Thank you all I didn't realize that JIT in macruby is compiling on the fly the code piece a piece (I thought that a source file was the compilation unit) and so JIT time to compile the block was inside my time metrics I re-run the test looping many times and the results are speaking for themselfs: uliano$ macruby fib.rb sum of even Fibonacci less than 4000000 = 4613732 time = 0.637182 uliano$ /usr/bin/ruby fib.rb sum of even Fibonacci less than 4000000 = 4613732 time = 4.710929 uliano$ ruby fib.rb # this is Ruby 1.9.1 from macports sum of even Fibonacci less than 4000000 = 4613732 time = 0.660384 uliano$ macrubyc -o fib fib.rb uliano$ ./fib sum of even Fibonacci less than 4000000 = 4613732 time = 0.61873
Hi Uliano, The way I get the JIT to preprocess your fib code is simply to call the method once. For example I wrapped your code in a class (not that I am saying that it is necessary to do this - its just the first thing i tried and it worked) and then. (for example) afib.fib_iter(sum,10) and then time test with afib.fib_iter(sum,4_000_000) I think you have to also keep in mind that the method dispatch in macruby is a work in progress and that method dispatch time is always going to be different between different ruby implementations. In your code for example passing a block and dispatching that block always with yield could be a performance stopper - when i rewrote your original code to not have these yield calls I got much improved performance: #command line: ruby or macruby fib.rb #ruby 1.8.7 recursive sum = 4613732 time = 18.795026 iterative sum = 4613732 time = 3.0e-05 #macruby beta 0.5-2 #no pre compile recursive sum = 4613732 time = 0.585983 iterative sum = 4613732 time = 0.007148 #macruby beta 0.5-2 #run it once first recursive sum = 4613732 time = 0.591092 iterative sum = 4613732 time = 0.002592 #macruby beta 0.5-2 #run it once first and using code without yields. recursive sum = 4613732 time = 0.586312 iterative sum = 4613732 time = 3.0e-06 hope that helps, John On Nov 23, 2009, at 8:30 , Uliano Guerrini wrote:
Thank you all
I didn't realize that JIT in macruby is compiling on the fly the code piece a piece (I thought that a source file was the compilation unit) and so JIT time to compile the block was inside my time metrics
I re-run the test looping many times and the results are speaking for themselfs:
uliano$ macruby fib.rb sum of even Fibonacci less than 4000000 = 4613732 time = 0.637182 uliano$ /usr/bin/ruby fib.rb sum of even Fibonacci less than 4000000 = 4613732 time = 4.710929 uliano$ ruby fib.rb # this is Ruby 1.9.1 from macports sum of even Fibonacci less than 4000000 = 4613732 time = 0.660384 uliano$ macrubyc -o fib fib.rb uliano$ ./fib sum of even Fibonacci less than 4000000 = 4613732 time = 0.61873
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
participants (2)
-
John Shea
-
Uliano Guerrini