【发布时间】:2011-11-04 19:39:41
【问题描述】:
我正在移植 SSE SIMD 代码以使用 256 位 AVX 扩展,但似乎找不到任何可以混合/混洗/移动高 128 位和低 128 位的指令。
背景故事:
我真正想要的是 VHADDPS/_mm256_hadd_ps 像 HADDPS/_mm_hadd_ps 一样,只有 256 位字。不幸的是,它就像对HADDPS 的两次调用一样,独立作用于低位和高位字。
【问题讨论】:
-
如果你只想水平求和,通常你想要
vextractf128,它在任何地方都很快(尤其是 Zen1),缩小到 128 位向量。 How to sum __m256 horizontally?。但是您首先不希望haddps作为有效水平总和的一部分,所以希望这不是您正在做的事情......除非您有多个 hsum 要做,那么是的,vhaddps 可以像这样有用在Intel AVX: 256-bits version of dot product for double precision floating point variables。也许 2x vperm2f128 + vaddps