我有一个使用SSE的函数来完成很多工作,分析器显示我用于计算水平最小值和最大值的代码部分占用了大部分时间。
例如,我一直在使用以下实现来获取最小值:
static inline int16_t hMin(__m128i buffer) {
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m1));
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m2));
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m3));
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m4));
return ((int8_t*) ((void *) &buffer))[0];
}
我需要计算16个1字节整数的最小值和最大值,正如您所看到的。
非常感谢任何好的建议 :)
谢谢
_mm_cvtsi128_si32
将是最好的选择。 - rwong