使用 SSE 获取 __m128i 向量中的最大值?

2023-12-31

我刚刚开始使用 SSE,我很困惑如何获取最大整数值(max) of a __m128i。例如:

__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]); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSE 获取 __m128i 向量中的最大值? 的相关文章

随机推荐