在SSE矢量M128中找到最大浮点

finding maximum float in sse vector m128

本文关键字:SSE 矢量 M128      更新时间:2023-10-16

我找到了_m128i

的以下解决方案
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);
}

返回M128的最大浮点的等效函数是什么?

(我可以使用任何版本的SSE和AVX)

感谢任何帮助

使用算法,您可以将其转换为Interins的单个尺寸浮点版本。并不是说这是最佳解决方案,而是这样的解决方案:

float horizontal_max_Vec4(__m128 x) {
    __m128 max1 = _mm_shuffle_ps(x, x, _MM_SHUFFLE(0,0,3,2));
    __m128 max2 = _mm_max_ps(x, max1);
    __m128 max3 = _mm_shuffle_ps(max2, max2, _MM_SHUFFLE(0,0,0,1));
    __m128 max4 = _mm_max_ps(max2, max3);
    float result = _mm_cvtss_f32(max4);
    return result;
}

您可以使用DirectXmath,MS在_M128上为您完成了所有事情。