0
我發現_m128i發現在上證所矢量M128最大浮動
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的任何版本)
希望得到任何幫助
這讓我看起來很蠢xD剛開始時那些內在的,完全錯過了_mm_store1_ps。謝謝:P – CheckersGuy
Larsson和@CheckersGuy:你不想存儲到內存中。使用'return _mm_cvtss_f32(max4)'。 (提示搜索[英特爾內部函數指南](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=float%20_mm):'float _mm'將會找到'_mm *'返回'float'的內在函數)。如果你不走運,你的編譯器會把它編譯成* actual * store/reload。 (如果你只使用movss(store1)而不是16字節存儲,你不需要'結果'對齊。) –
另外,如果你沒有AVX,你可以保存一些MOVAPS如果編譯器沒有爲您優化這些指令,請仔細選擇shuffle。特別是如果你有SSE3。水平MAX需要與水平ADD相同的洗牌,所以請參閱https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-float-vector-sum-on-x86。 –