summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Meissner <wmeissner@gmail.com>2012-09-15 21:53:35 +1000
committerWayne Meissner <wmeissner@gmail.com>2012-09-15 21:53:35 +1000
commit8369af3faca8db8e7a3ba19567f314c94de4a8e7 (patch)
treeed487279892434bba6aa17e85f19853599401aea
parent1030a2ccecea7b80a4be8a15f6ef324535c04c1c (diff)
downloadffi-8369af3faca8db8e7a3ba19567f314c94de4a8e7.tar.gz
Unroll some benchmark loops
-rw-r--r--bench/bench_enum.rb4
-rw-r--r--bench/bench_struct_field.rb25
2 files changed, 22 insertions, 7 deletions
diff --git a/bench/bench_enum.rb b/bench/bench_enum.rb
index ec28922..d4ebf56 100644
--- a/bench/bench_enum.rb
+++ b/bench/bench_enum.rb
@@ -4,8 +4,8 @@ module LibTest
extend FFI::Library
ffi_lib LIBTEST_PATH
enum :foo, [ :a, :b, :c ]
- attach_function :ffi_bench, :bench_s32_v, [ :foo ], :void, :save_errno => true
- attach_function :ffi_bench_i, :bench_s32_v, [ :int ], :void, :save_errno => true
+ attach_function :ffi_bench, :bench_s32_v, [ :foo ], :void, :save_errno => false
+ attach_function :ffi_bench_i, :bench_s32_v, [ :int ], :void, :save_errno => false
def self.rb_bench(i0); nil; end
end
diff --git a/bench/bench_struct_field.rb b/bench/bench_struct_field.rb
index 0e6faf4..45ec7be 100644
--- a/bench/bench_struct_field.rb
+++ b/bench/bench_struct_field.rb
@@ -12,7 +12,10 @@ s = TestStruct.new(FFI::MemoryPointer.new(TestStruct))
puts "Benchmark FFI Struct.get(:int) performance, #{iter}x"
10.times {
puts Benchmark.measure {
- i = 0; while i < iter
+ i = 0; max = iter / 4; while i < max
+ s[:i]
+ s[:i]
+ s[:i]
s[:i]
i += 1
end
@@ -22,7 +25,10 @@ puts "Benchmark FFI Struct.get(:int) performance, #{iter}x"
puts "Benchmark FFI Struct.get(:int) using string name performance, #{iter}x"
10.times {
puts Benchmark.measure {
- i = 0; while i < iter
+ i = 0; max = iter / 4; while i < max
+ s['i']
+ s['i']
+ s['i']
s['i']
i += 1
end
@@ -32,7 +38,10 @@ puts "Benchmark FFI Struct.get(:int) using string name performance, #{iter}x"
puts "Benchmark FFI Struct.put(:int) performance, #{iter}x"
10.times {
puts Benchmark.measure {
- i = 0; while i < iter
+ i = 0; max = iter / 4; while i < max
+ s[:i] = 0x12345678
+ s[:i] = 0x12345678
+ s[:i] = 0x12345678
s[:i] = 0x12345678
i += 1
end
@@ -41,7 +50,10 @@ puts "Benchmark FFI Struct.put(:int) performance, #{iter}x"
puts "Benchmark FFI Struct.get(:pointer) performance, #{iter}x"
10.times {
puts Benchmark.measure {
- i = 0; while i < iter
+ i = 0; max = iter / 4; while i < max
+ s[:p]
+ s[:p]
+ s[:p]
s[:p]
i += 1
end
@@ -51,7 +63,10 @@ puts "Benchmark FFI Struct.put(:pointer) performance, #{iter}x"
10.times {
p = FFI::MemoryPointer.new :int
puts Benchmark.measure {
- i = 0; while i < iter
+ i = 0; max = iter / 4; while i < max
+ s[:p] = p
+ s[:p] = p
+ s[:p] = p
s[:p] = p
i += 1
end