是否可以在Java8中执行SIMD比较指令?

blu*_*sun 8 java simd java-8

在Java8中,可以执行一些SIMD指令,如本文http://prestodb.rocks/code/simd/所述.

我想知道是否可以在Java8中执行SIMD比较指令.

我想检查两个字符(UTF-16,16位数)的相等性,如果它们相同则得到0xffff的值,如果不是快速则得到0x0.我有一个大的char数组,我想通过循环数组在每个char元素和特定的char(如0x0022)之间执行上述相等性检查.

是否可以在Java8中执行SIMD比较指令?或者是否有任何按位操作或算法可以有效和快速地执行字符比较?

谢谢.

Eug*_*ene 5

jdk-9根据这个,数组相等被向量化(在可能的情况下,尽我所能)

甚至该方法内部也有如下定义:

@HotSpotIntrinsicCandidate
static int vectorizedMismatch...
Run Code Online (Sandbox Code Playgroud)

但这并没有移植到 jdk-8。

就按位操作而言,许多操作已经得到强化;如@HotSpotIntrinsicCandidate注释所示。

您最好使用以下几个选项进行实际测试:

 -XX:-TieredCompilation 
 -XX:CICompilerCount=1
 -XX:+UnlockDiagnosticVMOptions 
 -XX:+PrintCompilation 
 -XX:+PrintInlining 
Run Code Online (Sandbox Code Playgroud)

和检查,如果你有这样的条目:Unsafe::getAndAddInt (27 bytes) (intrinsic)

最后一个明显的问题可能是你的速度目标是什么?即使您没有在您实际认为需要的地方获得内在函数,速度也可能在您希望的范围内。