2
我试图移植一个SSE函数,它可以得到两个8位无符号整数数组的绝对差值。 它看起来像:Altivec:_mm_sad_epu8()的模拟
uint64_t AbsDiffSum(const uint8_t * a, const uint8_t * b, size_t size)
{
assert(size%16 == 0);
__m128i _sum = _mm_setzero_si128();
for(size_t i = 0; i < size; i += 16)
{
const __m128i _a = _mm_loadu_si128((__m128i*)(a + i));
const __m128i _b = _mm_loadu_si128((__m128i*)(b + i));
_sum = _mm_add_epi64(_sum, _mm_sad_epu8(_a, _b));
}
return _mm_cvtsi128_si64(_mm_add_epi64(_sum, _mm_srli_si128(_sum, 8)));
}
主要工作是通过内部函数_mm_sad_epu8进行()。
Altivec有类似吗?
谢谢。其作品。 – Georg
为什么在名称中使用带有前导'_'的变量?这只是要求麻烦,因为这些名称是为实现特定的用途而保留的。 'vec_ld'可能是一个内部使用临时名为'_a'的宏。 –
我知道诸如__abc和_Abc之类的名字是为编译器而保留的。像_abc这样的名称可以自由使用。在目前的情况下,我使用了标量和矢量变量的相似名称。 – ErmIg