在Java8中,可以执行一些SIMD指令,如本文http://prestodb.rocks/code/simd/所述.
我想知道是否可以在Java8中执行SIMD比较指令.
我想检查两个字符(UTF-16,16位数)的相等性,如果它们相同则得到0xffff的值,如果不是快速则得到0x0.我有一个大的char数组,我想通过循环数组在每个char元素和特定的char(如0x0022)之间执行上述相等性检查.
是否可以在Java8中执行SIMD比较指令?或者是否有任何按位操作或算法可以有效和快速地执行字符比较?
谢谢.
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)。
最后一个明显的问题可能是你的速度目标是什么?即使您没有在您实际认为需要的地方获得内在函数,速度也可能在您希望的范围内。