PTX“位桶”寄存器

Posted

技术标签:

【中文标题】PTX“位桶”寄存器【英文标题】:PTX "bit bucket" registers 【发布时间】:2012-10-18 01:55:02 【问题描述】:

...刚刚在PTX manual 中提及。没有关于它们的用途或如何使用它们的提示。

有人知道吗?我只是错过了一个共同的概念吗?

【问题讨论】:

如果我没记错的话(尽管我很可能是并且会在这方面得到纠正;))写入寄存器基本上是无操作的。 一般来说,当人们对指令产生的寄存器结果不感兴趣而只对指令的副作用感兴趣时,将位桶指定为指令的目标寄存器。例如,对于各种微处理器,比较指令实际上是一个伪指令,它被实现为减法指令,目标寄存器指定为位桶,因为人们只对生成的标志(条件代码)感兴趣。减法的影响。 harrism 已经在下面提供了特定于 PTX 的示例位桶用法。 【参考方案1】:

巴特的评论基本上是对的。更详细的,如PTX ISA 3.1 manual中所述,

对于某些指令,目标操作数是可选的。 “位桶”操作数 用下划线 (_) 表示的可以用来代替目标寄存器。

实际上,3.1 PTX 规范中仅列出了一类指令,_ 是其有效目标:atom。这里是atom的语义:

将a位置的原始值原子加载到目标寄存器d中,对操作数b和a位置的值执行归约操作,并将指定操作的结果存储在a位置,覆盖原始值。

还有atom的注释:

可以通过使用“位桶”目标操作数“_”来指定简单的缩减。

所以,我们可以构造一个例子:

atom.global.add.s32 _, [a], 4

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

atomicAdd(&a, 4);

因为 atomicAdd 的返回值没有存储到变量中。

【讨论】:

感谢您用一些实际信息扩展了我的“一些无操作的东西”。很高兴知道。 :) 谢谢,这是有道理的。很高兴知道该手册的 3.1 版本已经发布。

以上是关于PTX“位桶”寄存器的主要内容,如果未能解决你的问题,请参考以下文章

%envregN 特殊寄存器保存啥?

OpenCL中的popcnt?

集成芯片74LS164的移位原理是啥?

关于数据寄存器和指令寄存器?

什么是寄存器?什么是寄存器变量?

汇编语言基础总结