gpt4 book ai didi

cuda - SASS指令的组合格式

转载 作者:行者123 更新时间:2023-12-05 00:32:38 38 4
gpt4 key购买 nike

没有看到cuda文档描述SASS指令的组合形式。例如,我知道什么是 IADDIMAD。但是

IMAD.IADD R8, R8, 0x1, R7 ;

不清楚。哪个操作数属于哪个操作码?那是如何执行的?此外,我们是否正在处理一个ADD一个MAD,这意味着两个ADD一个MUL?或者这被认为是一个 一个 MADD,这意味着 一个 ADD 和一个 一个 MUL

IMAD.MOV.U32 R5, RZ, RZ, 0x0 ; 怎么样?如何解释?

最佳答案

Volta 和 Turing 架构有两个主要的执行管道。

  1. FMA 管道负责 FFMA、FMUL、FADD、FSWZADD 和 IMAD 指令。
  2. ALU 管道负责整数(IMAD 除外)、位操作、逻辑和数据移动指令。

ALU 管道执行MOVIADD3。FMA 管道执行 IMAD,包括变体 IMAD.IADDIMAD.MOV

使用 IMAD 模拟 IADD 和 MOV 允许编译器明确地将指令调度到 FMA 管道而不是 ALU 管道。

从编译器输出中可以清楚地看出,编译器正在使用 IMAD 模拟二进制整数加法和原始移动,这对两者都进行了概括。后缀只是反汇编程序通过匹配模式并告诉您该操作在语义上等同于更简单的操作而变得很好。 IMAD.* 序列巧妙地使用了 RZ(零寄存器)、0x00x1 来实现这一点。当反汇编器看到这样的模式时,它会添加 .MOV op 后缀来表示,“嘿,这只是一个简单的移动。”

例如

IMAD.IADD R8, R8, 0x1, R7

是:

R8 = 1*R8 + R7 = R8 + R7
IADD R8, R8, R7

(如果 IADD 存在。)

MOV 情况类似,您会看到它使用了 RZ。它正在模拟以下内容。

MOV R5, 0x0

Volta 中有一个MOV 操作,但我几乎没见过它。

(我认为还有一个左移 K 版本 IMAD.SHL,它使用 2^K 的乘数,其中 K 是偏移量。)

关于cuda - SASS指令的组合格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59777333/

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