_mm256_shuffle_ps 是如何工作的?
How does _mm256_shuffle_ps work?
我了解 _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 个参数,而每个向量将有 8 个元素。所以,逻辑上 _MM_SHUFFLE
应该有 8 个参数。有人可以解释一下这是如何工作的吗?
_mm256_shuffle_ps
独立地对两个 128 位通道中的每一个进行洗牌,就好像在两个 XMM 上调用 _mm_shuffle_ps
一样。如果你想洗牌所有8个32位元素,你需要_mm256_permutevar8x32_ps
SSE/AVX 采用立即数操作数的指令始终只采用 8 位立即数。
像往常一样,the manual explains how the 8-bit immediate is used。它对两个 128b 通道应用相同的洗牌。
部分指令在128b版本的立即数中有空闲位,256b版本可以使用。例如256b shufpd
将立即数的第 2 位和第 3 位用于上通道,与通常的第 0 位和第 1 位分开用于下 128。
shufps
需要四组 2 位到 select 每个目标元素的四个元素之一,因此 imm8 中没有额外的空间。
我了解 _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 个参数,而每个向量将有 8 个元素。所以,逻辑上 _MM_SHUFFLE
应该有 8 个参数。有人可以解释一下这是如何工作的吗?
_mm256_shuffle_ps
独立地对两个 128 位通道中的每一个进行洗牌,就好像在两个 XMM 上调用 _mm_shuffle_ps
一样。如果你想洗牌所有8个32位元素,你需要_mm256_permutevar8x32_ps
SSE/AVX 采用立即数操作数的指令始终只采用 8 位立即数。
像往常一样,the manual explains how the 8-bit immediate is used。它对两个 128b 通道应用相同的洗牌。
部分指令在128b版本的立即数中有空闲位,256b版本可以使用。例如256b shufpd
将立即数的第 2 位和第 3 位用于上通道,与通常的第 0 位和第 1 位分开用于下 128。
shufps
需要四组 2 位到 select 每个目标元素的四个元素之一,因此 imm8 中没有额外的空间。