PTX“位桶”寄存器

7

这些指令在PTX手册中被提及,但没有透露它们的作用或如何使用。

有人了解更多吗?我是不是遗漏了一个常见概念?


2
如果我没记错的话(虽然我很可能是错的,会被纠正的;)),对寄存器的写入基本上是无操作。 - Bart
1
通常情况下,当我们对指令的寄存器结果不感兴趣,而只关心指令的副作用时,我们会将位桶指定为指令的目标寄存器。例如,在各种微处理器中,比较指令实际上是一条伪指令,它被实现为带有位桶指定为目标寄存器的减法指令,因为我们只关心减法的副作用所产生的标志(条件码)。harrism已经在下面提供了PTX特定的位桶使用示例。 - njuffa
1个回答

8
巴特的评论基本正确。更详细地说,正如在PTX ISA 3.1 手册中所述,
对于一些指令,目标操作数是可选的。可以使用下划线(_)表示的“比特桶”操作数来代替目标寄存器。
实际上,在3.1 PTX规范中只有一个指令类别,_是有效的目标: atom。以下是atom的语义:
原子性地将位置a处的原始值加载到目标寄存器d中,使用操作数b和位置a中的值执行减少操作,并将指定操作的结果存储在位置a中,覆盖原始值。
而且,atom有一个注释:
可以使用“比特桶”目标操作数' _ '来指定简单的缩减。
因此,我们可以构造一个例子:
atom.global.add.s32 _, [a], 4

这会将数字4加到内存位置a的有符号整数上,并不会将之前位置a的值返回给寄存器。所以如果你不需要之前的值,可以使用这个方法。我假设编译器会为这段代码生成这个方法。

atomicAdd(&a, 4);

由于未将 atomicAdd 函数的返回值存储到变量中。


谢谢您提供了一些实际信息,来扩展我的“某些东西无操作某些东西”的内容。很好知道。 :) - Bart
谢谢,那很有道理。知道手册的3.1版本发布了也很好。 - Dude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接