X86 如何使用SSE计算某个范围内的字节数?
我想写一个c程序,用下面的代码计算X86 如何使用SSE计算某个范围内的字节数?,x86,sse,simd,X86,Sse,Simd,我想写一个c程序,用下面的代码计算a..c范围内的字节数: char a[16], b[16], c[16]; int counter = 0; for(i = 0; i < 16; i++) { if((a[i] < b[i]) && (b[i] < c[i])) counter++; } return counter; 我的方法正确吗?有更好的方法吗?你的方法看起来很合理。我认为您可以通过在SIMD寄存器中执行AND
a
..c
范围内的字节数:
char a[16], b[16], c[16];
int counter = 0;
for(i = 0; i < 16; i++)
{
if((a[i] < b[i]) && (b[i] < c[i]))
counter++;
}
return counter;
我的方法正确吗?有更好的方法吗?你的方法看起来很合理。我认为您可以通过在SIMD寄存器中执行AND来保存指令,如下所示:
__m128i result1 = _mm_cmpgt_epi8 (b, a);
__m128i result2 = _mm_cmplt_epi8 (b, c);
__m128i mask = _mm_and_si128(result1, result2);
int mask2 = _mm_movemask_epi8(mask);
int counter = _mm_popcnt_u32(mask2);
你的方法看起来很合理。我认为您可以通过在SIMD寄存器中执行AND来保存指令,如下所示:
__m128i result1 = _mm_cmpgt_epi8 (b, a);
__m128i result2 = _mm_cmplt_epi8 (b, c);
__m128i mask = _mm_and_si128(result1, result2);
int mask2 = _mm_movemask_epi8(mask);
int counter = _mm_popcnt_u32(mask2);
是否要计算相等的字节数?如果是这样的话,你应该问:-)@drhirsch,我想计算某个范围(即a&c范围)内的字节数。那你为什么不问这个呢?;-)我编辑了问题以进行澄清。是否要计算相等的字节数?如果是这样的话,你应该问:-)@drhirsch,我想计算某个范围(即a&c范围)内的字节数。那你为什么不问这个呢?;-)我编辑了这个问题以便澄清。