我正在移植SSE SIMD代码以使用256位AVX扩展,并且似乎找不到任何可以混合/混洗/移动高128位和低128位的指令。
支持故事:
我真正想要的是VHADDPS
/ _mm256_hadd_ps
像HADDPS
/ _mm_hadd_ps
一样,仅使用256位字。不幸的是,它就像两个对HADDPS
的调用一样,分别作用于高低单词。
最佳答案
使用VPERM2F128,可以交换低128位和高128位(以及其他排列)。内部函数用法看起来像
x = _mm256_permute2f128_ps( x , x , 1)
第三个参数是控制字,它为用户提供了很大的灵活性。有关详细信息,请参见Intel Instrinsic Guide。