我正在移植SSE SIMD代码以使用256位AVX扩展,并且似乎找不到任何可以混合/混洗/移动高128位和低128位的指令。

支持故事:

我真正想要的是VHADDPS / _mm256_hadd_psHADDPS / _mm_hadd_ps一样,仅使用256位字。不幸的是,它就像两个对HADDPS的调用一样,分别作用于高低单词。

最佳答案

使用VPERM2F128,可以交换低128位和高128位(以及其他排列)。内部函数用法看起来像

x = _mm256_permute2f128_ps( x , x , 1)
第三个参数是控制字,它为用户提供了很大的灵活性。有关详细信息,请参见Intel Instrinsic Guide

07-28 00:39