我刚开始使用 SSE,我很困惑如何获得 __m128i
的最大整数值 (max
)。例如:
__m128i t = _mm_setr_ps(0,1,2,3);
// max(t) = 3;
四处搜索使我找到了 MAXPS
指令,但我似乎无法找到如何将其与 "xmmintrin.h"
一起使用。
此外,是否有您推荐的 "xmmintrin.h"
文档,而不是查看头文件本身?
最佳答案
以防万一有人关心,并且由于内在函数似乎是最近的方式,这里是内在函数方面的解决方案。
int horizontal_max_Vec4i(__m128i x) {
__m128i max1 = _mm_shuffle_epi32(x, _MM_SHUFFLE(0,0,3,2));
__m128i max2 = _mm_max_epi32(x,max1);
__m128i max3 = _mm_shuffle_epi32(max2, _MM_SHUFFLE(0,0,0,1));
__m128i max4 = _mm_max_epi32(max2,max3);
return _mm_cvtsi128_si32(max4);
}
我不知道这是否比这更好:
int horizontal_max_Vec4i(__m128i x) {
int result[4] __attribute__((aligned(16))) = {0};
_mm_store_si128((__m128i *) result, x);
return max(max(max(result[0], result[1]), result[2]), result[3]);
}
关于c - 使用 SSE 在 __m128i vector 中获取最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877700/