小编Tho*_*gas的帖子

使用英特尔AVX通过面罩进行随机播放

我是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被描述但是我没有找到解决方案来解决我的问题.

有没有教程如何设计这样的面具?或者这两个方法的示例函数能够深入理解它们吗?

提前感谢提示

c++ sse simd intrinsics avx

7
推荐指数
1
解决办法
1973
查看次数

标签 统计

avx ×1

c++ ×1

intrinsics ×1

simd ×1

sse ×1