Laurent Sansonetti wrote:
For instance, the optimizations that are (and will be) implemented in the experimental branch are not random but were selected after having profiled a big MacRuby/Cocoa application and found many areas where we performed badly. I assume that other implementations are using similar techniques.

The interesting thing about many of these microbenchmarks is that a substantial part of MacRuby's performance seems to come from one key optimization: recursive calls.

MacRuby (experimental) fib(30) with fcalls (fib(...):
  0.060000   0.000000   0.060000 (  0.053868)
  0.050000   0.000000   0.050000 (  0.053773)
  0.050000   0.000000   0.050000 (  0.055541)
  0.050000   0.000000   0.050000 (  0.049992)
  0.060000   0.000000   0.060000 (  0.054645)

MacRuby (experimental) fib(30) with calls (self.fib(...)):
  0.180000   0.000000   0.180000 (  0.182371)
  0.180000   0.000000   0.180000 (  0.178691)
  0.170000   0.000000   0.170000 (  0.177174)
  0.170000   0.000000   0.170000 (  0.179554)
  0.180000   0.000000   0.180000 (  0.181848)

The latter numbers are roughly the same as JRuby performance without recursion optimization (with or without fcall).

The recursion opt is actually pretty clever...I experimented with it a few weeks back (achieving similar results, http://gist.github.com/67329) and backed off temporarily to work on other things. I also wasn't sure how common it would be in real code, nor was I sure it could be done safely while maintaining all Ruby semantics. Maybe we'll be able to figure that out together. :)

- Charlie
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to