On Aug 8, 2011, at 6:39 PM, Charles Oliver Nutter wrote: > 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.
That's perfect! Let's see what numbers I can come up with... -- Christian > > - Charlie > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev