Strange branching performance
Martin Grajcar
maaartinus at gmail.com
Fri Feb 7 11:35:10 PST 2014
I wrote a simple benchmark showing much better performance (on Core
i5) for branching probability of about 50% than for 15%. The branch is
unpredictable. The better performance comes from HotSpot replacing Jcc by
CMOVcc, the bad performance comes from it not doing it in case in seemingly
should.
The linked picture shows the duration as measured with caliper
http://i.stack.imgur.com/TstzH.png
The attached JMH benchmark confirms it:
PERCENTAGE: MEAN MIN MAX UNIT
branchless: 7.237 6.977 7.283 ops/ms
5: 7.848 7.355 8.306 ops/ms
10: 5.522 5.359 5.665 ops/ms
15: 4.205 4.027 4.372 ops/ms
16: 3.964 3.677 4.255 ops/ms
* 17: 3.779 3.478 4.048 ops/ms*
* 18: 4.459 3.458 7.983 ops/ms*
* 19: 7.922 7.168 8.188 ops/ms*
20: 8.008 7.697 8.328 ops/ms
30: 7.938 5.410 8.075 ops/ms
40: 8.004 7.651 8.256 ops/ms
50: 7.995 7.440 8.055 ops/ms
It looks like the JIT switches to CMOVcc somewhere around 18% branching
probability, but at this time the branching penalty reduces the speed to
about a half. The break even lies somewhere around 5%, and using CMOVcc
always would also be better than the current state.
Is this a performance bug or is there an explanation?
I might have forgotten some details, you can find them in my SO question or
ask me
http://stackoverflow.com/questions/19689214/strange-branching-performance
Regards, Martin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20140207/2d6751ba/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: JmhBranchingBenchmark.java
Type: text/x-java
Size: 5546 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20140207/2d6751ba/JmhBranchingBenchmark-0001.java
More information about the hotspot-compiler-dev
mailing list