当我使用.reg
来声明寄存器时......它们在哪里?
我的意思是:如果我在设备函数中使用.reg
寄存器存储在每个线程都有的寄存器文件中......但是如果我在全局模块中声明.reg
变量怎么办?范围(不是.global
,只是全局范围)?
答案 0 :(得分:1)
任何.reg
声明都会在PTX寄存器状态空间中结束。如何映射到硬件功能由汇编程序确定,但寄存器或本地内存的通常规则保持不变。您应该知道模块范围内的寄存器状态空间声明仅在PTX 1.x和2.x代码中受支持,并且不能与CUDA ABI一起使用。 PTX文档说明:
寄存器与其他州空间的不同之处在于它们不是 完全可寻址,即不可能参考地址 一个登记册。编译时使用应用程序二进制接口 (ABI),寄存器变量仅限于功能范围,可能不是 在模块范围声明。编译传统PTX代码时(ISA 包含模块作用域.reg变量的3.0之前的版本 编译器静默禁用ABI。