RFR(L): 8024070: C2 needs some form of type speculation
Vladimir Kozlov
vladimir.kozlov at oracle.com
Fri Sep 6 15:11:32 PDT 2013
Roland,
Thank you for doing this experiment. But Richards is faster ;)
Regression could be also caused by different inlining (InlineSmallCode)
because more uncommon traps are generated.
Anyway, you convince me. Let me go through your changes again. I am also
looking on your extra type profiling changes.
Thanks,
Vladimir
On 9/6/13 11:16 AM, Roland Westrelin wrote:
>>> Can you try an other experiment (may be you did it already)? Always (under flag) generate klass check (type_check_receiver()) when unique type from profiling is more precise than type from static analysis. Yes, we may get performance regression in cases where more precise type is not needed. We need to test it and see how bad it is.
>>
>> This change in itself doesn't bring any performance improvement. It's here so that if we add more profiling points (8023657) we know what to do with the data from profiling. Type speculation + extra profiling show a perf improvement on nashorn (10-20% on some benchmarks with the nashorn.jar from jdk b105). To me the experiment that makes sense it to enable profiling from 8023657, do the type checks at the profiling points systematically and see what impact we see on perf. I did that with type checks on entry to the root method of the compilation for incoming arguments and at returns from calls that were not inlined and I had a clear regression on specjvm98. I don't remember the exact numbers. I can run the experiment again.
>
> This is the kind of results I get with nashorn:
> deltablue:
> current: 2345
> with type speculation and extra profiling: 2662
> with extra profiling and systematic type checks: 2285
>
> RayTrace:
> current: 1978
> with type speculation and extra profiling: 2113
> with extra profiling and systematic type checks: 1795
>
> Richards:
> current: 2222
> with type speculation and extra profiling: 2489
> with extra profiling and systematic type checks: 2563
>
> "extra profiling and systematic type checks" is:
> - type checks for incoming arguments on method entry for the root method of the compilation
> - type check on return from non inlined calls
>
> so a limited subset of type checks but that gives us type for value flowing in the compiled method. Eventhought the number of checks is limited, it is sufficient to cause a regression on standard benchmarks:
>
> ============================================================================
> t
> Benchmark Samples Mean Stdev
> specjvm98 10 663.84 0.01
> javac 10 385.70 0.05
> db 10 444.51 0.01
> jess 10 699.05 0.00
> jack 10 603.98 0.01
> compress 10 534.99 0.01
> mtrt 10 1694.45 0.01
> mpegaudio 10 866.77 0.00
> ============================================================================
> t2
> Benchmark Samples Mean Stdev %Diff P Significant
> specjvm98 10 654.39 0.01 -1.42 0.014 *
> javac 10 356.46 0.07 -7.58 0.013 *
> db 10 444.87 0.01 0.08 0.875 *
> jess 10 681.66 0.01 -2.49 0.000 Yes
> jack 10 601.90 0.01 -0.34 0.425 *
> compress 10 538.06 0.02 0.57 0.329 *
> mtrt 10 1722.77 0.03 1.67 0.181 *
> mpegaudio 10 854.38 0.01 -1.43 0.001 Yes
> ============================================================================
>
> Roland.
>
More information about the hotspot-compiler-dev
mailing list