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应用程序给出了更好的解释.

http://stackoverflow.com/questions/7210034/how-can-i-exchange-the-low-128-bits-and-high-128-bits-in-a-256-bit-avx-ymm-reg

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:x86 – 如何在256位AVX(YMM)寄存器中交换低128位和高128位