AVX-512中的压缩和扩展指令有什么区别?

Mar*_*tin 8 x86 assembly simd avx512

我正在研究英特尔内在指南中的扩展和压缩操作.我对这两个概念感到困惑:

对于 __m128d _mm_mask_expand_pd (__m128d src, __mmask8 k, __m128d a) == vexpandpd

从a(在掩码k中设置各自的位)加载连续的有效双精度(64位)浮点元素,并使用写掩码k将结果存储在dst中(当相应的掩码位为时,从src复制元素)没有设置).

对于 __m128d _mm_mask_compress_pd (__m128d src, __mmask8 k, __m128d a) == vcompresspd

将有效双精度(64位)浮点元素连续存储在a(在写掩码k中设置各自的位)到dst,并从src传递剩余的元素.

是否有更清楚的描述或任何可以解释更多的人?

提前致谢.

fuz*_*fuz 7

这些指令实现了APL运算符\(展开)和/(压缩). 扩大需要一些的位掩码α Ñ其中位Ñ被设置和阵列ω的Ñ号码和返回的向量数与来自ω插入到由α,其余设置为零指示的地方的数字.例如,

0 1 1 0 1 0 \ 2 3 4
Run Code Online (Sandbox Code Playgroud)

回报

0 2 3 0 4 0
Run Code Online (Sandbox Code Playgroud)

_mm_mask_expand_pd指令为固定的m = 8 实现此运算符.

压缩操作的索马里发展事务处的影响扩大操作,即它使用一个位掩码α选择来自ω条目,并存储这些条目连续到存储器.