0

当我.reg用来声明寄存器时......它们在哪里?

我的意思是:如果我.reg在设备函数内部使用寄存器存储在每个线程拥有的寄存器文件中......但是如果我.reg在全局范围内的模块中声明一个变量(不是.global,只是全局范围)怎么办?

4

1 回答 1

1

任何.reg声明都会在 PTX 寄存器状态空间中结束。映射到硬件特性的方式由汇编器决定,但寄存器或本地内存的通常规则仍然适用。您应该知道,模块范围内的寄存器状态空间声明仅在 PTX 1.x 和 2.x 代码中受支持,并且不能与 CUDA ABI 一起使用。PTX 文档说明:

寄存器与其他状态空间的不同之处在于它们不是完全可寻址的,即不可能引用寄存器的地址。当编译使用应用程序二进制接口 (ABI) 时,寄存器变量被限制在函数范围内,并且不能在模块范围内声明。在编译包含模块范围的 .reg 变量的旧版 PTX 代码(3.0 之前的 ISA 版本)时,编译器会静默禁用 ABI。

于 2013-07-16T14:54:17.993 回答