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