RFR: 8267190: Optimize Vector API test operations

Paul Sandoz psandoz at openjdk.java.net
Tue May 18 20:36:43 UTC 2021


On Fri, 14 May 2021 23:58:38 GMT, Sandhya Viswanathan <sviswanathan at openjdk.org> wrote:

> Vector API test operations (IS_DEFAULT, IS_FINITE, IS_INFINITE, IS_NAN and IS_NEGATIVE) are computed in three steps:
> 1) reinterpreting the floating point vectors as integral vectors (int/long)
> 2) perform the test in integer domain to get a int/long mask
> 3) reinterpret the int/long mask as float/double mask
> Step 3) currently is very slow. It can be optimized by modifying the Java code to utilize the existing reinterpret intrinsic.
> 
> For the VectorTestPerf attached to the JBS for JDK-8267190, the performance improves as follows:
> 
> Base:
> Benchmark (size) Mode Cnt Score Error Units
> VectorTestPerf.IS_DEFAULT 1024 thrpt 5 223.156 ± 90.452 ops/ms
> VectorTestPerf.IS_FINITE 1024 thrpt 5 223.841 ± 91.685 ops/ms
> VectorTestPerf.IS_INFINITE 1024 thrpt 5 224.561 ± 83.890 ops/ms
> VectorTestPerf.IS_NAN 1024 thrpt 5 223.777 ± 70.629 ops/ms
> VectorTestPerf.IS_NEGATIVE 1024 thrpt 5 218.392 ± 79.806 ops/ms
> 
> With patch:
> Benchmark (size) Mode Cnt Score Error Units
> VectorTestPerf.IS_DEFAULT 1024 thrpt 5 8812.357 ± 40.477 ops/ms
> VectorTestPerf.IS_FINITE 1024 thrpt 5 7425.739 ± 296.622 ops/ms
> VectorTestPerf.IS_INFINITE 1024 thrpt 5 8932.730 ± 269.988 ops/ms
> VectorTestPerf.IS_NAN 1024 thrpt 5 8574.872 ± 498.649 ops/ms
> VectorTestPerf.IS_NEGATIVE 1024 thrpt 5 8838.400 ± 11.849 ops/ms
> 
> Best Regards,
> Sandhya

Changes look good, some minor comments. I shall run it through tier 1 to 3 tests and report back.

src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java line 609:

> 607:         @ForceInline
> 608:         final <E>
> 609:         VectorMask<E> defaultMaskReinterpret(VectorSpecies<E> dsp) {

Since this method is only called by `cast` we can make this method private and accept an argument of `AbstractSpecies<E>`. Further, the length check is duplicated by `cast` so we could turn it into an assert. Extra bonus points for converting the statement switch into an expression switch.

-------------

Marked as reviewed by psandoz (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/4039


More information about the core-libs-dev mailing list