在x86上實現水平浮點向量和的最快方法你有三個(或四個)浮動向量。最快的方法是什么?SSE(移動,洗牌,添加,移動)總是比X87快嗎?SSE4.2中的水平添加說明值得嗎?搬到FPU,然后是Faddp,Faddp要花多少錢?最快的指令順序是什么?“試著把事情安排好,這樣你就可以一次把四個向量和起來”將不會被接受為答案。*-)
3 回答

縹緲止盈
TA貢獻2041條經驗 獲得超4個贊
SSE 2
所有四項:
const __m128 t = _mm_add_ps(v, _mm_movehl_ps(v, v)); const __m128 sum = _mm_add_ss(t, _mm_shuffle_ps(t, t, 1));
R1+R2+R3:
const __m128 t1 = _mm_movehl_ps(v, v); const __m128 t2 = _mm_add_ps(v, t1); const __m128 sum = _mm_add_ss(t1, _mm_shuffle_ps(t2, t2, 1));
HADDPS

炎炎設計
TA貢獻1808條經驗 獲得超4個贊
HADDPS
v = _mm_hadd_ps(v, v); v = _mm_hadd_ps(v, v);
添加回答
舉報
0/150
提交
取消