gpt4 book ai didi

assembly - 如何在ZMM寄存器上实现vpmovmskb的效果?

转载 作者:行者123 更新时间:2023-12-03 16:20:42 29 4
gpt4 key购买 nike

古怪的指令 (v)pmovmskb 可追溯到 SSE,它获取 mm、xmm 或 ymm 寄存器中字节的最高有效位,并将它们移动到通用寄存器中。这对于分类向量元素或执行 SWAR 非常有用。对单个位的操作。具体来说,我在 previous answer 中使用了这个指令。计算位置人口计数。
不幸的是,这条指令还没有扩展到 ZMM 寄存器,并且出人意料地没有出现在 AVX-512 名册中。如何有效地模拟 ZMM 寄存器的效果?我有哪些类似/其他选择?

最佳答案

在 AVX512BW 中有一个指令,只是名称不同。 _mm512_movepi8_mask/
vpmovb2m k, zmm ,可用于从字节到 qword 的每个元素大小。
(AVX512DQ 适用于 D 和 Q 版本,AVX512BW 适用于 B 和 W 版本)。
还有 mask->vector inverse movemask, vpmovm2b (再次适用于所有元素尺寸)。

AVX512当然也有各种cmptest进入掩码说明,所以用set1_epi8(1<<n)向量,您可以使用 vptestmb k2{k1}, zmm2, zmm3/m512 将任何位位置抓取到掩码寄存器中; _mm512_test_epi8_mask .请注意,与 vpmov2bm 不同,它支持对目标进行零掩码以有效地与另一个 k 进行 AND 运算。免费掩码,因此即使您只想要高位,也可能值得使用。
还有一个NAND版本 vptestnmb .这些 D 和 Q 版本支持广播内存源操作数,但 B 和 W 版本不支持。
使用 8 个不同的掩码常量,您可以在展开的循环中提取不同的位,而无需花费任何移位指令。或者您可以从不同的元素中提取不同的位。
这些都是 AVX512BW,在 Skylake-AVX512 之后的 AVX512 CPU 上可用,但不是 Xeon Phi (KNL/KNM)。

关于assembly - 如何在ZMM寄存器上实现vpmovmskb的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63300449/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com