On Apr 28, 2011, at 12:16 PM, Christian Thalinger wrote:
> On Apr 27, 2011, at 5:54 AM, Charles Oliver Nutter wrote:
>> I prepared this for someone else, but I thought folks here might be
>> interested in it too.
>> 
>> This gist contains hotspot x86 (32-bit) assembly output for JRuby's
>> dynopt mode and invokedynamic (on a couple-week-old OS X OpenJDK
>> build). I haven't spent a lot of time investigating.
> 
> I took a look at it.  I used 64-bit x86 since the code is a bit smaller than 
> with 32-bit.
> 
> The code is almost identical but three things popped into my eye (the output 
> is from PrintOptoAssembly):
> 
> 1. The obvious one:  the method handle call site guard:
> 
> 1a4   B32: #    B160 B33 <- B31 B149 B123  Freq: 0.499969
> 1a4     movq    R10, byte[int:>=0]<ciObject ident=770 PERM address=0xe99088> 
> *  # ptr
> 1ae     movq    R10, [R10 + #1576 (32-bit)]     # ptr
> 1b5     movq    R11, [R10 + #32 (8-bit)]        # ptr
> 1b9     movq    R8, java/lang/invoke/AdapterMethodHandle:exact *        # ptr
> 1c3     cmpq    R11, R8 # ptr
> 1c6     jne,u  B160  P=0.000000 C=-1.000000

I did an experiment and hacked a version of HotSpot that does not emit the call 
site guard.  Since the fib benchmark is monomorphic this works and shows that 
we just need to get rid of the guard to get on a par with dynopt performance.  
The numbers are 32-bit x86.

-- Christian

$ bin/jruby.sh --server -Xcompile.dynopt=false -J-XX:+UseSerialGC 
-J-XX:InlineSmallCode=5000 -J-XX:MaxInlineSize=150 -J-XX:MaxInlineLevel=15 
bench/bench_fib_recursive.rb 10
  0.259000   0.000000   0.259000 (  0.215000)
  0.094000   0.000000   0.094000 (  0.094000)
  0.093000   0.000000   0.093000 (  0.093000)
  0.094000   0.000000   0.094000 (  0.094000)
  0.093000   0.000000   0.093000 (  0.093000)
  0.094000   0.000000   0.094000 (  0.094000)
  0.093000   0.000000   0.093000 (  0.093000)
  0.094000   0.000000   0.094000 (  0.094000)
  0.093000   0.000000   0.093000 (  0.093000)
  0.093000   0.000000   0.093000 (  0.093000)

$ bin/jruby.sh --server -Xcompile.dynopt=true -J-XX:+UseSerialGC 
-J-XX:InlineSmallCode=5000 -J-XX:MaxInlineSize=150 -J-XX:MaxInlineLevel=15 
bench/bench_fib_recursive.rb 10
  0.398000   0.000000   0.398000 (  0.351000)
  0.075000   0.000000   0.075000 (  0.075000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.075000   0.000000   0.075000 (  0.075000)
  0.075000   0.000000   0.075000 (  0.075000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.075000   0.000000   0.075000 (  0.075000)
  0.075000   0.000000   0.075000 (  0.075000)

$ bin/jruby.sh --server -Xcompile.invokedynamic=true -J-XX:+UseSerialGC 
-J-XX:InlineSmallCode=5000 -J-XX:MaxInlineSize=150 -J-XX:MaxInlineLevel=15 
bench/bench_fib_recursive.rb 10
  0.227000   0.000000   0.227000 (  0.180000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.073000   0.000000   0.073000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.074000)
  0.074000   0.000000   0.074000 (  0.075000)
  0.074000   0.000000   0.074000 (  0.074000)

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to