[macruby-changes] [1216] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 27 16:24:28 PDT 2009


Revision: 1216
          http://trac.macosforge.org/projects/ruby/changeset/1216
Author:   lsansonetti at apple.com
Date:     2009-03-27 16:24:28 -0700 (Fri, 27 Mar 2009)
Log Message:
-----------
renamed bench_roxor.rb to old_bench.rb (which will eventually be a separate rake task after) and added a new bench.rb script which will be the basis of the regression performance suite

Added Paths:
-----------
    MacRuby/branches/experimental/bench.rb
    MacRuby/branches/experimental/old_bench.rb

Removed Paths:
-------------
    MacRuby/branches/experimental/bench_roxor.rb

Added: MacRuby/branches/experimental/bench.rb
===================================================================
--- MacRuby/branches/experimental/bench.rb	                        (rev 0)
+++ MacRuby/branches/experimental/bench.rb	2009-03-27 23:24:28 UTC (rev 1216)
@@ -0,0 +1,187 @@
+# A regression performance suite for MacRuby (which doesn't really catch
+# regressions yet).
+#
+# Run with:
+#    $ ./miniruby -I./lib bench.rb
+#
+# The same script can also be executed using /usr/bin/ruby or ruby19 to 
+# compare the implementations.
+
+def fib(n)
+  if n < 3
+    1
+  else
+    fib(n-1) + fib(n-2)
+  end
+end
+
+def tak(x, y, z)
+  unless y < x
+    z
+  else
+    tak(tak(x-1, y, z),
+        tak(y-1, z, x),
+        tak(z-1, x, y))
+  end
+end
+
+def tarai(x, y, z)
+  if x <= y
+  then y
+  else tarai(tarai(x-1, y, z),
+             tarai(y-1, z, x),
+             tarai(z-1, x, y))
+  end
+end
+
+class Class1
+  def method1; end
+  def method2(x); x; end
+
+  def yield1(n); i=0; while i<n; yield; i+=1; end; end
+  def yield2; yield; end
+end
+
+class Class2 < Class1
+  def method1; super; end
+  def method2(x); super; end
+end
+
+def bench_ivar_read(n)
+  @obj = 1
+  i=0; while i<n; i+=@obj; end
+end
+
+def bench_ivar_write(n)
+  @obj = 0
+  i=0; while i<n; i+=@obj+1; end
+end
+
+ConstantOne = 1
+
+require 'benchmark'
+
+Benchmark.bm(3) do |bm|
+
+  # Fixnum arithmetic.
+  bm.report('10 fib(30)') do
+    i=0; while i<10; fib(30); i+=1; end
+  end
+  bm.report('10 fib(35)') do
+    i=0; while i<10; fib(35); i+=1; end
+  end
+  bm.report('tak') { tak(18,9,0) }
+  bm.report('tarai') { tarai(12,6,0) }
+
+  # Loops.
+  bm.report('10000000 times loop') do
+    3000000.times {}
+  end 
+  bm.report('30000000 times loop') do
+    30000000.times {}
+  end 
+  bm.report('10000000 while loop') do
+    i=0; while i<10000000; i+=1; end
+  end 
+  bm.report('60000000 while loop') do
+    i=0; while i<60000000; i+=1; end
+  end
+
+  # Messages.
+  bm.report('30000000 0 arg msg') do
+    o = Class1.new
+    i=0; while i<10000000; o.method1; o.method1; o.method1; i+=1; end 
+  end
+  bm.report('30000000 1 arg msg') do
+    o = Class1.new
+    i=0; while i<10000000; o.method2(i); o.method2(i); o.method2(i); i+=1; end 
+  end
+  bm.report('10000000 0 arg super msg') do
+    o = Class2.new
+    i=0; while i<10000000; o.method1; i+=1; end
+  end
+  bm.report('10000000 1 arg super msg') do
+    o = Class2.new
+    i=0; while i<10000000; o.method2(i); i+=1; end
+  end
+  bm.report('10000000 #send') do
+    o = Class1.new
+    i=0; while i<10000000; o.send(:method1); i+=1; end
+  end
+
+  # Instance variables.
+  bm.report('10000000 ivar read') { bench_ivar_read(10000000) }
+  bm.report('30000000 ivar read') { bench_ivar_read(30000000) }
+  bm.report('10000000 ivar write') { bench_ivar_write(10000000) }
+  bm.report('30000000 ivar write') { bench_ivar_write(30000000) }
+
+  # Const lookup.
+  bm.report('30000000 const') do
+    i=0; while i<30000000; i+=ConstantOne; end
+  end
+
+  # Blocks
+  bm.report('30000000 yield') do
+    o = Class1.new
+    o.yield1(30000000) {}
+  end
+  bm.report('30000000 msg w/ block+yield') do
+    o = Class1.new
+    i=0; while i<30000000; o.yield2 {}; i+=1; end
+  end
+  bm.report('30000000 Proc#call') do
+    o = proc {}
+    i=0; while i<30000000; o.call; i+=1; end
+  end
+
+  # Break
+  bm.report('30000000 while break') do
+    i=0; while i<30000000; while true; i+=1; break; end; end
+  end
+  bm.report('10000000 block break') do
+    i=0; while i<10000000; 1.times { i+=1; break }; end
+  end
+
+  # Next
+  bm.report('30000000 while next') do
+    i=0; while i<30000000; i+=1; next; exit; end
+  end
+  bm.report('10000000 block next') do
+    i=0; while i<10000000; 1.times { i+=1; next; exit; }; end
+  end
+
+  # Exception handlers.
+  bm.report('60000000 begin w/o exception') do
+    i=0
+    while i<60000000
+      begin
+        i+=1
+      rescue
+      end
+    end
+  end
+  bm.report('60000000 ensure w/o exception') do
+    i=0
+    while i<60000000
+      begin
+        begin
+        ensure
+          i+=1
+        end
+      ensure
+        i+=1
+      end
+    end
+  end
+  bm.report('50000 raise') do
+    i=0
+    while i<50000
+      begin
+        raise
+      rescue
+        i+=1
+      end
+    end
+  end
+
+end

Deleted: MacRuby/branches/experimental/bench_roxor.rb
===================================================================
--- MacRuby/branches/experimental/bench_roxor.rb	2009-03-27 22:55:46 UTC (rev 1215)
+++ MacRuby/branches/experimental/bench_roxor.rb	2009-03-27 23:24:28 UTC (rev 1216)
@@ -1,64 +0,0 @@
-core_features = [
-  'bm_app_answer.rb',
-  'bm_app_factorial.rb',
-  'bm_app_fib.rb',
-  'bm_app_raise.rb',
-  'bm_app_tak.rb' ,
-  'bm_app_tarai.rb',
-  'bm_app_mergesort.rb',
-  'bm_loop_times.rb',
-  'bm_loop_whileloop.rb',
-  'bm_so_ackermann.rb',
-#  'bm_so_nested_loop.rb',
-  'bm_so_object.rb',
-  'bm_so_random.rb',
-  'bm_vm1_block.rb',
-  'bm_vm1_const.rb',
-  'bm_vm1_ivar.rb',
-  'bm_vm1_ivar_set.rb',
-  'bm_vm1_ensure.rb',
-#  'bm_vm1_length.rb',
-  'bm_vm1_rescue.rb',
-  'bm_vm1_simplereturn.rb',
-#  'bm_vm1_swap.rb',
-  'bm_vm2_eval.rb',
-  'bm_vm2_poly_method.rb',
-  'bm_vm2_proc.rb',
-  'bm_vm2_send.rb',
-  'bm_vm2_method.rb',
-  'bm_vm2_super.rb',
-  'bm_vm2_unif1.rb',
-  'bm_vm2_zsuper.rb'
-]
-
-def bench(rubies, file, quiet)
-  rubies.map do |ruby|
-    $stderr.puts "    " + `#{ruby} -v`.strip unless quiet
-    line = "#{ruby} #{file}"
-    best = 1e10
-    3.times do 
-      t = Time.now
-      v = system(line) ? Time.now - t : nil
-      $stderr.puts "        " + v.to_s unless quiet
-      if v and (best == nil or best > v)
-        best = v  
-      end
-    end
-    [ruby, best]
-  end
-end
-
-our_ruby = File.join(Dir.pwd, 'miniruby')
-rubies = [our_ruby, '/usr/local/bin/ruby19']
-#rubies = [our_ruby, '/usr/local/bin/ruby19', '/usr/bin/ruby']
-
-quiet = ARGV[0] == '--quiet'
-
-Dir.chdir('benchmark') do 
-  core_features.each do |file|
-    $stderr.puts file + ' ...'
-    results = bench(rubies, file, quiet)
-    ok = results.sort { |x, y| x[1] <=> y[1] }[0][0].include?(our_ruby)
-    $stderr.puts '    ' + (ok ? 'PASS' : 'FAIL')
-  end
-end

Copied: MacRuby/branches/experimental/old_bench.rb (from rev 1211, MacRuby/branches/experimental/bench_roxor.rb)
===================================================================
--- MacRuby/branches/experimental/old_bench.rb	                        (rev 0)
+++ MacRuby/branches/experimental/old_bench.rb	2009-03-27 23:24:28 UTC (rev 1216)
@@ -0,0 +1,64 @@
+core_features = [
+  'bm_app_answer.rb',
+  'bm_app_factorial.rb',
+  'bm_app_fib.rb',
+  'bm_app_raise.rb',
+  'bm_app_tak.rb' ,
+  'bm_app_tarai.rb',
+  'bm_app_mergesort.rb',
+  'bm_loop_times.rb',
+  'bm_loop_whileloop.rb',
+  'bm_so_ackermann.rb',
+#  'bm_so_nested_loop.rb',
+  'bm_so_object.rb',
+  'bm_so_random.rb',
+  'bm_vm1_block.rb',
+  'bm_vm1_const.rb',
+  'bm_vm1_ivar.rb',
+  'bm_vm1_ivar_set.rb',
+  'bm_vm1_ensure.rb',
+#  'bm_vm1_length.rb',
+  'bm_vm1_rescue.rb',
+  'bm_vm1_simplereturn.rb',
+#  'bm_vm1_swap.rb',
+  'bm_vm2_eval.rb',
+  'bm_vm2_poly_method.rb',
+  'bm_vm2_proc.rb',
+  'bm_vm2_send.rb',
+  'bm_vm2_method.rb',
+  'bm_vm2_super.rb',
+  'bm_vm2_unif1.rb',
+  'bm_vm2_zsuper.rb'
+]
+
+def bench(rubies, file, quiet)
+  rubies.map do |ruby|
+    $stderr.puts "    " + `#{ruby} -v`.strip unless quiet
+    line = "#{ruby} #{file}"
+    best = 1e10
+    3.times do 
+      t = Time.now
+      v = system(line) ? Time.now - t : nil
+      $stderr.puts "        " + v.to_s unless quiet
+      if v and (best == nil or best > v)
+        best = v  
+      end
+    end
+    [ruby, best]
+  end
+end
+
+our_ruby = File.join(Dir.pwd, 'miniruby')
+rubies = [our_ruby, '/usr/local/bin/ruby19']
+#rubies = [our_ruby, '/usr/local/bin/ruby19', '/usr/bin/ruby']
+
+quiet = ARGV[0] == '--quiet'
+
+Dir.chdir('benchmark') do 
+  core_features.each do |file|
+    $stderr.puts file + ' ...'
+    results = bench(rubies, file, quiet)
+    ok = results.sort { |x, y| x[1] <=> y[1] }[0][0].include?(our_ruby)
+    $stderr.puts '    ' + (ok ? 'PASS' : 'FAIL')
+  end
+end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090327/125eb774/attachment-0001.html>


More information about the macruby-changes mailing list