在Java8中,可以执行一些SIMD指令,如本文http://prestodb.rocks/code/simd/所述。
我想知道是否可以在Java8中执行SIMD比较指令。
我想检查两个字符(UTF-16,16位数)的相等性,如果它们相同则得到0xffff的值,如果不是快速则得到0x0。我有一个大的char数组,我想通过循环数组在每个char元素和一个特定的char(如0x0022)之间执行上述等式检查。
是否可以在Java8中执行SIMD比较指令?或者是否有任何可以有效和快速地执行字符比较的按位操作或算法?
感谢。
答案 0 :(得分:4)
根据this
,jdk-9
中的数组等式被矢量化(如果可能的话,我可以告诉它)
甚至该方法内部也有一个定义:
@HotSpotIntrinsicCandidate
static int vectorizedMismatch...
但这并没有移植到jdk-8。
就按位操作而言, lot 的操作已经被篡改;由@HotSpotIntrinsicCandidate
注释表示。
最好用一些选项进行实际测试,例如:
-XX:-TieredCompilation
-XX:CICompilerCount=1
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintCompilation
-XX:+PrintInlining
并检查您是否有这样的条目:Unsafe::getAndAddInt (27 bytes) (intrinsic)
。
最后一个明显的观点可能是你的速度目标是什么?即使你没有实际可能认为你想要的内在函数,速度也可能在你想要的范围内。