gpt4 book ai didi

c - 使用 SSE 在 __m128i vector 中获取最大值?

转载 作者:太空狗 更新时间:2023-10-29 16:39:26 25 4
gpt4 key购买 nike

我刚开始使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com