Good news, bad news
Charles Oliver Nutter
headius at headius.com
Wed May 25 10:06:11 PDT 2011
Actually now that I look at it, this isn't all that solid performance.
It's just *slightly* faster than using JRuby's inline cache, which
almost never inlines...
Inline cache only, via CachingCallSite.
~/projects/jruby ➔ jruby -Xcompile.invokedynamic=false --server
bench/bench_fib_recursive.rb 5 359227465
1.230000 0.000000 1.230000 ( 1.114000)
9227465
1.024000 0.000000 1.024000 ( 1.024000)
9227465
1.016000 0.000000 1.016000 ( 1.016000)
9227465
0.993000 0.000000 0.993000 ( 0.993000)
9227465
1.003000 0.000000 1.003000 ( 1.003000)
So invokedynamic dispatch is better, but only by a tiny margin. :(
I'll start browsing logs and asm dumps later today to see if I can
figure out why it's not as fast as before.
- Charlie
On Wed, May 25, 2011 at 12:00 PM, Charles Oliver Nutter
<headius at headius.com> wrote:
> On Wed, May 25, 2011 at 11:31 AM, Charles Oliver Nutter
> <headius at headius.com> wrote:
>> Build in progress! I'll let you know how it goes. How low is low in "low arity"?
>
> Ok, we're definitely back to having solid performance, but it's not as
> good as it was before. I'm not sure if it's related to the inlining
> thresholds, since bumping them up the same way we used to doesn't get
> all the perf back. Here's the numbers I have. It's now around 3x
> faster than it was a few days ago, but not as fast as JRuby's dynopt
> mode (which inserts a guarded invokevirtual next to a normal IC hit).
> The invokedynamic logic was nearly as fast as dynopt before, which was
> breathtaking to behold.
>
> Indy, indy with thresholds bumped, dynopt:
>
> ~/projects/jruby ➔ jruby --server bench/bench_fib_recursive.rb 5 359227465
> 1.215000 0.000000 1.215000 ( 1.155000)
> 9227465
> 0.985000 0.000000 0.985000 ( 0.985000)
> 9227465
> 0.977000 0.000000 0.977000 ( 0.977000)
> 9227465
> 0.981000 0.000000 0.981000 ( 0.981000)
> 9227465
> 0.976000 0.000000 0.976000 ( 0.976000)
>
> ~/projects/jruby ➔ jruby -J-XX:MaxInlineSize=150
> -J-XX:InlineSmallCode=3000 --server bench/bench_fib_recursive.rb 5 35
> 9227465
> 1.209000 0.000000 1.209000 ( 1.132000)
> 9227465
> 0.981000 0.000000 0.981000 ( 0.981000)
> 9227465
> 0.974000 0.000000 0.974000 ( 0.974000)
> 9227465
> 0.971000 0.000000 0.971000 ( 0.971000)
> 9227465
> 0.969000 0.000000 0.969000 ( 0.969000)
>
> ~/projects/jruby ➔ jruby -Xcompile.dynopt=true
> -Xcompile.invokedynamic=false --server bench/bench_fib_recursive.rb 5
> 35
> 9227465
> 1.078000 0.000000 1.078000 ( 1.013000)
> 9227465
> 0.706000 0.000000 0.706000 ( 0.706000)
> 9227465
> 0.697000 0.000000 0.697000 ( 0.697000)
> 9227465
> 0.699000 0.000000 0.699000 ( 0.699000)
> 9227465
> 0.695000 0.000000 0.695000 ( 0.695000)
>
More information about the mlvm-dev
mailing list