相关疑难解决方法(0)

使用AVX指令进行水平矢量和的最快方法

我有一个四个64位浮点值的打包向量.
我想得到向量元素的总和.

使用SSE(并使用32位浮点数),我可以执行以下操作:

v_sum = _mm_hadd_ps(v_sum, v_sum);
v_sum = _mm_hadd_ps(v_sum, v_sum);
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使AVX具有_mm256_hadd_pd指令,它的结果也与SSE版本不同.我相信这是因为大多数AVX指令分别用作每个低128位和高128位的SSE指令,而不会跨越128位边界.

理想情况下,我要寻找的解决方案应遵循以下准则:
1)仅使用AVX/AVX2指令.(没有SSE)
2)不超过2-3条指令.

但是,任何有效/优雅的方式(即使不遵循上述指导原则)总是被广泛接受.

非常感谢您的帮助.

-Luigi Castelli

x86 sse simd vector-processing avx

15
推荐指数
1
解决办法
2万
查看次数

标签 统计

avx ×1

simd ×1

sse ×1

vector-processing ×1

x86 ×1