代码之家  ›  专栏  ›  技术社区  ›  Amiri

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

  •  8
  • Amiri  · 技术社区  · 6 年前

    我在研究从 Intel intrinsics guide . 我对这两个概念感到困惑:

    为了 __m128d _mm_mask_expand_pd (__m128d src, __mmask8 k, __m128d a) == vexpandpd

    从中加载连续的活动双精度(64位)浮点元素(那些在掩码k中设置了各自位的元素),并使用writemask k k将结果存储在dst中(如果没有设置相应的掩码位,则从src复制元素)。

    为了 __m128d _mm_mask_compress_pd (__m128d src, __mmask8 k, __m128d a) == vcompresspd

    连续地将活动的双精度(64位)浮点元素存储到DST(那些在writemask k k中设置了各自位的元素),并从SRC传递其余元素。

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

    事先谢谢。

    1 回复  |  直到 6 年前
        1
  •  7
  •   fuz    6 年前

    这些指令实现APL运算符 \ (展开)和 / (压缩)。 展开 取一些掩模α ± n 其中的一部分 n 集合和数组ω n 并返回向量 将ω中的数字插入α指示的位置,其余的设置为零。例如,

    0 1 1 0 1 0 \ 2 3 4
    

    退货

    0 2 3 0 4 0
    

    这个 _mm_mask_expand_pd 指令将此运算符实现为fixed = 8。

    这个 压缩 操作撤消 扩大 操作,即使用位掩码α从ω中选择条目,并将这些条目连续存储到内存中。