On 07/11/2011 03:17 PM, Christian Thalinger wrote:
> On Jul 9, 2011, at 3:27 PM, Hiroshi Nakamura wrote:
>> Hello,
>>
>> Thanks for you comments.
>>
>> On Sat, Jul 9, 2011 at 19:01, Jochen Theodorou<blackd...@gmx.org>  wrote:
>>>> Code is here:
>>>> https://raw.github.com/nahi/jsr292-sandbox/master/src/jp/gr/java_conf/jruby/MethodHandleTest.java
>>> lookup I don't know. I am not sure about the recent versions, I think
>>> the lookup is using the same "core" as Reflection plus additional
>>> checks. I don't expect that to be faster. It would be very nice though.
>>>
>>> The performance of the invocation cannot be meassured like you do it I
>>> think. The big pro comes from the ability to inline the method calls,
>>> but this is only present if you use the invokedynamic bytecode
>>> instruction. There is currently no way in Java to express invokedynamic.
>> Sure. I should have written it clearly. I heard from someone at Java
>> SE 7 launch event that reflection would get faster on Java SE 7 even
>> if you don't use dynamic language, so I wanted to measure the
>> MethodHandle perf without invokedynamic.
>>
>> For invokedynamic, I did some (bogus, experimental, micro)benchmark
>> with current JRuby.
>> http://bit.ly/invokedynamic (Flash, Japanese)
>> Please see the circle at the right edge of 5 circles. Invokedynamic
>> support of JRuby is still experimental but it already outperforms
>> existing optimization code for some microbenchmarks. Great job,
>> Charles.
> Just a quick follow up on the tak numbers, which look really bad.  The 
> problem here is that we inline the fallback path (a bug we know about).  
> Excluding that one method from inlining actually gives better numbers with 
> invokedynamic:
>
> intelsdv03.us.oracle.com:/export/twisti/jruby$ jruby -X+C --server 
> bench/bench_tak.rb 5
>        user     system      total        real
>    1.300000   0.000000   1.300000 (  1.263000)
>    1.018000   0.000000   1.018000 (  1.018000)
>    1.018000   0.000000   1.018000 (  1.018000)
>    1.027000   0.000000   1.027000 (  1.027000)
>    1.024000   0.000000   1.024000 (  1.023000)
>
> intelsdv03.us.oracle.com:/export/twisti/jruby$ jruby -X+C --server 
> -J-XX:CompileCommand=dontinline,*.invocationFallback bench/bench_tak.rb 5
> CompilerOracle: dontinline *.invocationFallback
>        user     system      total        real
>    0.619000   0.000000   0.619000 (  0.580000)
>    0.422000   0.000000   0.422000 (  0.422000)
>    0.422000   0.000000   0.422000 (  0.422000)
>    0.422000   0.000000   0.422000 (  0.422000)
>    0.422000   0.000000   0.422000 (  0.422000)
>
> intelsdv03.us.oracle.com:/export/twisti/jruby$ jruby -X+C --server 
> -Xcompile.invokedynamic=false bench/bench_tak.rb 5
>        user     system      total        real
>    0.824000   0.000000   0.824000 (  0.788000)
>    0.565000   0.000000   0.565000 (  0.565000)
>    0.565000   0.000000   0.565000 (  0.565000)
>    0.565000   0.000000   0.565000 (  0.565000)
>    0.565000   0.000000   0.565000 (  0.565000)

Nice numbers.
And we know how to improve the invokedynamic speed a little bit more.

> -- Christian

Rémi

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

Reply via email to