x86 – 如何在256位AVX(YMM)寄存器中交换低128位和高128位

我正在移植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 online documentation似乎完全不了解控制字结构的解释,但是可下载的Intel Instrinsic Guide应用程序给出了更好的解释.

转载注明原文:x86 – 如何在256位AVX(YMM)寄存器中交换低128位和高128位 - 代码日志