On Mon, Aug 8, 2011 at 9:51 AM, Christian Thalinger
<christian.thalin...@oracle.com> wrote:
> Since I have the basic push-notification of CallSites I'm now looking into 
> push-notification of SwitchPoints:
>
> 7071709: JSR 292: switchpoint invalidation should be pushed not pulled
>
> Basically it should be the same, just needs some additional love in the 
> compiler.
>
> I looked into JRuby's usage of SwitchPoints and it seems it has something to 
> do with constants.  Is there an existing benchmark that would benefit from 
> the SwitchPoint optimization?  Seph also seems to use SwitchPoints, 
> PHP.reboot does not (that's what grep tells me).

Yes, currently SwitchPoint is only used for constant lookup, since
constant modification invalidates globally. A good benchmark to use
would be this one:

bench/language/bench_const_lookup.rb <number of iters>

Here's numbers with a recent openjdk-osx-build with and without
invokedynamic enabled

WITHOUT:

100k * 100 nested const get               0.059000   0.000000
0.059000 (  0.059000)
100k * 100 nested const get               0.059000   0.000000
0.059000 (  0.059000)
100k * 100 nested const get               0.058000   0.000000
0.058000 (  0.058000)
100k * 100 nested const get               0.059000   0.000000
0.059000 (  0.059000)
100k * 100 nested const get               0.057000   0.000000
0.057000 (  0.057000)
100k * 100 inherited const get            0.058000   0.000000
0.058000 (  0.058000)
100k * 100 inherited const get            0.059000   0.000000
0.059000 (  0.059000)
100k * 100 inherited const get            0.058000   0.000000
0.058000 (  0.058000)
100k * 100 inherited const get            0.058000   0.000000
0.058000 (  0.058000)
100k * 100 inherited const get            0.063000   0.000000
0.063000 (  0.064000)
100k * 100 both                           0.060000   0.000000
0.060000 (  0.060000)
100k * 100 both                           0.060000   0.000000
0.060000 (  0.060000)
100k * 100 both                           0.059000   0.000000
0.059000 (  0.059000)
100k * 100 both                           0.058000   0.000000
0.058000 (  0.058000)
100k * 100 both                           0.059000   0.000000
0.059000 (  0.059000)

WITH: (specify -Xinvokedynamic.constants=true to JRuby, or
-Djruby.invokedynamic.constants=true to JVM)

100k * 100 nested const get               1.321000   0.000000
1.321000 (  1.321000)
100k * 100 nested const get               1.311000   0.000000
1.311000 (  1.311000)
100k * 100 nested const get               1.305000   0.000000
1.305000 (  1.305000)
100k * 100 nested const get               1.293000   0.000000
1.293000 (  1.294000)
100k * 100 nested const get               1.292000   0.000000
1.292000 (  1.293000)
100k * 100 inherited const get            1.295000   0.000000
1.295000 (  1.295000)
100k * 100 inherited const get            1.241000   0.000000
1.241000 (  1.241000)
100k * 100 inherited const get            1.241000   0.000000
1.241000 (  1.241000)
100k * 100 inherited const get            1.244000   0.000000
1.244000 (  1.244000)
100k * 100 inherited const get            1.236000   0.000000
1.236000 (  1.236000)
100k * 100 both                           1.280000   0.000000
1.280000 (  1.280000)
100k * 100 both                           1.236000   0.000000
1.236000 (  1.236000)
100k * 100 both                           1.229000   0.000000
1.229000 (  1.230000)
100k * 100 both                           1.236000   0.000000
1.236000 (  1.236000)
100k * 100 both                           1.248000   0.000000
1.248000 (  1.248000)

You can see there's some room for improvement :) The number should be
faster with invokedynamic, since the SwitchPoint form has no active
guard.

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

Reply via email to