X86 如何使用SSE计算某个范围内的字节数?

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

我想写一个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来保存指令,如下所示:

__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范围)内的字节数。那你为什么不问这个呢?;-)我编辑了这个问题以便澄清。