gpt4 book ai didi

assembly - Intel AVX-512 : how to set the EVEX. z位

转载 作者:行者123 更新时间:2023-12-03 16:11:34 27 4
gpt4 key购买 nike

AVX-512中的EVEX.z位与k个寄存器一起用于控制屏蔽。如果z位为0,则表示合并屏蔽;如果z位为1,则k寄存器中的零元素将在输出中清零。

语法如下所示:

VPSUBQ zmm0{k2}{z},zmm1,zmm2

其中{z}代表z位。

但是,如何设置或测试EVEX.z位?我搜索了所有可以找到的资源,但没有找到答案。

最佳答案

据我了解,它们的意思是VPSUBQ zmm0{k2}{z},zmm1,zmm2VPSUBQ zmm0{k2},zmm1,zmm2是两个不同的指令,它们的编码在单个位(称为“z位”)中有所不同。 (这是该指令的EVEX前缀的一部分。Wikipedia documents所有字段)

因此,您可以通过在汇编源程序中指定{z}来“设置z位”,并告诉汇编器生成带有相应位集的指令。这在很多地方都有记录,例如Intel的vol.2指令集手册,以及在大多数包含内在函数的mask(merge-masking)与maskz(zero-masking)版本的Intel intrinsics guide中)

它不是CPU状态中的物理位(如方向标志之类的东西),它会从一条指令持续到下一条指令。 “测试”它没有意义。

为了说明这一点,以下是我组装两个版本所得到的结果:

00000000  62F1F5CAFBC2      vpsubq zmm0{k2}{z},zmm1,zmm2
00000006 62F1F54AFBC2 vpsubq zmm0{k2},zmm1,zmm2

请注意,编码的区别在于第四个字节的高位。那就是您的“z位”。

也许您认为您可以在运行时“设置”或“清除” z位,从而改变后续指令的屏蔽效果?由于它是每条指令编码的一部分,而不是CPU状态的一部分,因此这种思维方式仅在您即时运行JIT指令或使用自修改代码的情况下才有效。

在“常规”提前代码中,您将必须同时编写两种版本的代码,一次使用 {z}指令,一次不使用。使用条件跳转来确定要执行的版本。

关于assembly - Intel AVX-512 : how to set the EVEX. z位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60778385/

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