在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
提交
取消