c - _mm256_shuffle_ps 是如何工作的?

标签 c x86 simd intrinsics avx

我了解 _mm_shuffle_ps 的工作原理。例如,在下面。

__m128 r = _mm_shuffle_ps(x,y, _MM_SHUFFLE(2,0,2,0)); 

r 将包含内容,x[0]x[2]y[0] , y[2].

但我看到 _MM_SHUFFLE 也为 _mm256_shuffle_ps 使用了 4 个参数,而每个 vector 都有 8 个元素。所以,逻辑上 _MM_SHUFFLE 应该有 8 个参数。有人可以解释一下这是如何工作的吗?

最佳答案

_mm256_shuffle_ps 独立地洗牌两个 128 位 channel 中的每一个,就好像 _mm_shuffle_ps 是在两个 XMM 上调用的。如果你想洗牌所有 8 个 32 位元素,你需要 _mm256_permutevar8x32_ps

关于c - _mm256_shuffle_ps 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41073382/

相关文章:

c++ - SSE/AVX 寄存器的非零字节索引

c - 快速 24 位数组 -> 32 位数组转换?

c++ - 在wxWidgets Mac版本(wxMac)上,我需要修改的setup.h文件在哪里?

c - 试图在 C 中跳过 1 次 do/while 循环

c - 如何检查我的变量是否等于 NULL ? C

c++ - 放松内存排序时,C++延迟会增加

linux - ASM printf : no output if string doesn't include\n newline

似乎可以在结构内部传递结构,有什么想法吗?

gcc - 为什么我不能使用 `section .data:` 和 `section .text:` 在 C 中创建长度超过 61 个字符的 char 数组?

optimization - 如何连接两个SSE寄存器的低半部分?