我是AVX编程的新手.我有一个需要被驱动的寄存器,准确地说我想将256位寄存器R1中的几个字节混合到空寄存器R2中.我想定义一个掩码,告诉shuffle操作应该将旧寄存器R1中的哪个字节复制到新寄存器中的哪个位置.
掩码应该如下所示(Src:R1中的字节位置,目标:R2中的字节位置):
{(0,0),(1,1),(1,4),(2,5),...}
Run Code Online (Sandbox Code Playgroud)
这意味着要复制几个字节两次.
我不是100%确定我应该使用哪个功能.我尝试了这两个AVX功能,第二个只使用2个通道.
__m256 _mm256_permute_ps (__m256 a, int imm8)
__m256 _mm256_shuffle_ps (__m256 a, __m256 b, const int imm8)
Run Code Online (Sandbox Code Playgroud)
我对imm8中的Shuffle Mask完全感到困惑,以及如何设计它将如上所述工作.
我看过这张幻灯片(第26页)是_MM_SHUFFLE被描述但是我没有找到解决方案来解决我的问题.
有没有教程如何设计这样的面具?或者这两个方法的示例函数能够深入理解它们吗?
提前感谢提示