Ale*_*tov 6 c++ optimization assembly intrinsics sse2
我有以下瓶颈功能.
typedef unsigned char byte;
void CompareArrays(const byte * p1Start, const byte * p1End, const byte * p2, byte * p3)
{
const byte b1 = 128-30;
const byte b2 = 128+30;
for (const byte * p1 = p1Start; p1 != p1End; ++p1, ++p2, ++p3) {
*p3 = (*p1 < *p2 ) ? b1 : b2;
}
}
Run Code Online (Sandbox Code Playgroud)
我想C++用SSE2内部函数替换代码.我试过_mm_cmpgt_epi8但它使用了签名比较.我需要无符号比较.
是否有任何技巧(SSE,SSE2,SSSE3)来解决我的问题?
注意: 在这种情况下,我不想使用多线程.
而不是抵消您的签名值以使其无符号,更有效的方法是执行以下操作:
_mm_min_epu8得到p1,p2的无符号最小值_mm_cmpeq_epi8_mm_or_si128和_mm_andc_si128选择适当的b1/b2值请注意,总共有4条指令,而使用offset + signed比较方法则为5条指令.