【发布时间】:2011-04-28 13:42:29
【问题描述】:
我有以下瓶颈功能。
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;
}
}
我想用 SSE2 内部函数替换 C++ 代码。我试过_mm_cmpgt_epi8,但它使用了有符号比较。我需要无符号比较。
有什么技巧(SSE、SSE2、SSSE3)可以解决我的问题吗?
注意: 在这种情况下我不想使用多线程。
【问题讨论】:
-
您知道您的目标处理器架构是什么吗?一次使用一个 64 位字块(位旋转以在寄存器中进行比较)可以在一定程度上减少内存总线争用。编译器的汇编代码应该有助于提供思路... ...而且 SSE 不是用于浮点运算,而不是整数运算吗?
-
SSE 有一些整数指令。
-
为什么不让他们签名呢?在比较之前对每个元素进行简单的 XOR 0x80 即可完成这项工作。
标签: c++ optimization assembly intrinsics sse2