RFR 8199843 : Optimize Integer/Long.highestOneBit()
Claes Redestad
claes.redestad at oracle.com
Tue Mar 20 09:46:01 UTC 2018
Hi,
On 2018-03-20 09:58, Ivan Gerasimov wrote:
> Hello!
>
> The hightestOneBit function doesn't have an intrinsic and is currently
> implemented with a dozen of instructions.
> Alternatively, it could be implemented as MIN_VALUE >>>
> numberOfLeadingZeros(i), which works for all integers but zero.
> The former function gets intrisified by hotspot, which results in +27%
> of throughput (see the jmh results below).
>
> Would you please help review this simple fix?
>
> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8199843
> WEBREV: http://cr.openjdk.java.net/~igerasim/8199843/00/webrev/
nice optimization!
> Benchmark:
> http://cr.openjdk.java.net/~igerasim/8199843/00/MyBenchmark.java
>
> Benchmark results:
>
> Benchmark (arg) Mode Cnt Score Error Units
> MyBenchmark.int_testMethod_new 0 thrpt 35 323430664.593 ±
> 7492044.171 ops/s
> MyBenchmark.int_testMethod_new 42 thrpt 35 298526237.078 ±
> 5978291.689 ops/s
> MyBenchmark.int_testMethod_new -42 thrpt 35 302903562.073 ±
> 7984723.721 ops/s
> MyBenchmark.int_testMethod_org 0 thrpt 35 236245042.891 ±
> 3635990.596 ops/s
> MyBenchmark.int_testMethod_org 42 thrpt 35 237903410.753 ±
> 3437684.390 ops/s
> MyBenchmark.int_testMethod_org -42 thrpt 35 238472580.618 ±
> 2654886.010 ops/s
> MyBenchmark.long_testMethod_new 0 thrpt 35 282646114.501 ±
> 48028366.305 ops/s
> MyBenchmark.long_testMethod_new 42 thrpt 35 282382228.405 ±
> 5781529.307 ops/s
> MyBenchmark.long_testMethod_new -42 thrpt 35 276724858.286 ±
> 6529561.227 ops/s
> MyBenchmark.long_testMethod_org 0 thrpt 35 198500211.972 ±
> 15096862.367 ops/s
> MyBenchmark.long_testMethod_org 42 thrpt 35 215854630.194 ±
> 3112930.563 ops/s
> MyBenchmark.long_testMethod_org -42 thrpt 35 217992805.521 ±
> 2622877.082 ops/s
To nitpick a bit:
Please run with some appropriate time unit, e.g., "-tu us" to make
results more human readable.
And where are the baseline results? :-)
It'd also be nice to verify we don't regress too much in case there's no
intrinsic, i.e., test with the
intrinsic disabled.
Thanks!
/Claes
More information about the core-libs-dev
mailing list