我有以下瓶颈功能。如何优化周期?
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++
代码。我试过,但它使用了有符号比较。我需要无符号比较。
是否有任何技巧(SSE,SSE2,SSSE3)来解决我的问题?
注: 我不想在这种情况下使用多线程。
你知道你的目标是哪个处理器架构吗?一次处理一个64位字块(在寄存器中进行比较)可以在一定程度上减少内存总线争用。编译器的汇编代码应该有助于提供想法... ...并不是SSE专门用于浮点,而不是整数操作? – 2010-10-21 11:58:44
SSE有一些整数指令。 – Crashworks 2010-10-21 11:59:15
为什么不让他们签名?一个简单的异或0x80与比较前的每个元素都可以完成这项工作。 – ruslik 2010-10-21 12:01:27