Che*_*Guy 1 c++ simd intrinsics
我找到了以下 _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);
}
Run Code Online (Sandbox Code Playgroud)
返回 m128 的最大浮点数的等效函数是什么?
(我可以使用任何版本的SSE和AVX)
将不胜感激任何帮助
小智 5
使用您的算法,您可以将其转换为内部函数的单一大小浮点版本。并不是说这是最优的解决方案,而是这样的:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |