gpt4 book ai didi

assembly - 如何将 AVX512 寄存器 zmm26 中的 QuadWord 写入 rax 寄存器?

转载 作者:行者123 更新时间:2023-12-04 08:06:13 28 4
gpt4 key购买 nike

我希望对 zmm 0-31 寄存器集的四字元素执行整数算术运算并保留这些运算产生的进位位。看来这只有在通用寄存器集中处理数据时才有可能。

因此,我想将信息从 zmm 0-31 寄存器之一复制到通用寄存器之一。在处理通用寄存器中的 64 位数据后,我想将数据返回到原始 zmm 0-31 寄存器中它来自的同一个 QuadWord 位置。我知道我可以使用命令将数据从通用寄存器 rax 移动到 AVX512 寄存器 zmm26 QuadWord location 5

    vpbroadcastq zmm26{k5}{z},rax 

其中 8 位掩码 k5 = 十进制 32,允许将数据广播到 zmm26 的第 5 个 QuadWord,z=1 表示 zmm26 中的其他 QWord 不受影响,而 rax 是数据的来源。

但是我找不到将数据从寄存器 zmm26、四字 5 写入 rax 寄存器的反向命令。看来我只能使用 vmovq rax, xmm1 命令将最不重要的 QuadWord 从 AVX 寄存器复制到通用寄存器。并且没有使用屏蔽的 zmm 0-31 源的广播命令。

如果我知道从 zmm 0-31 寄存器获取特定 QuadWord 到 rax 寄存器的命令选项是什么,我将不胜感激。此外,除英特尔手册外,此时是否还有其他有关 AVX512 指令集的描述性信息来源?

最佳答案

与某些具有“提取”指令的早期 SIMD 扩展不同,例如 pextrq这将直接执行此操作,除以下之外,我不知道在 AVX-512(也不在具有 ymm 寄存器的 AVX 中)中执行此操作的任何方法:

  • 将您想要的元素排列/改组为低阶四字,然后使用 vmovq正如您所指出的,将其放入通用寄存器中。
  • 将整个向量存储到临时内存位置 loc ,如堆栈,然后使用 mov register,[loc + offset]阅读您感兴趣的任何 qword(s) 的说明。

  • 这两种方法看起来都很丑陋,哪种更好取决于您的具体情况。尽管使用内存作为中介,但如果您计划从每个向量中提取多个值,则第二种方法可能会更快,因为您可以利用最近 CPU 上的两个加载端口,这些 CPU 的吞吐量为一个加载/周期,而置换/随机播放方法可能会在置换/洗牌所需的端口上造成瓶颈。

    有关更全面的处理,请参阅下面彼得的回答,包括使用 vcompress带有面具的说明是一种穷人的提取物。

    关于assembly - 如何将 AVX512 寄存器 zmm26 中的 QuadWord 写入 rax 寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893523/

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