作者:sdfasdfqg | 来源:互联网 | 2023-05-21 13:37
我有一个大程序,它使用我为每个线程分配的所有寄存器(64)并溢出到本地内存.我希望能够告诉编译器哪些变量应该不惜一切代价保留在寄存器中,以及哪些变量我并不关心."注册"C/C++关键字是否在nvcc中有效?是否有不同的机制?
谢谢!
1> Robert Crove..:
register
如果您愿意,可以在CUDA C/C++中使用.在任何上下文中,它只是编译器的提示.它可能会被忽略.没有声明保证它可以做任何事情.
我认为这些陈述对于大多数语言实现来说都是如此register
.
我还认为编译器很可能比决定寄存器中的内容和适当的优先级做得更好.
用于控制寄存器使用的典型CUDA C/C++机制在更高级别工作,它们是:
该-maxrregcount
编译开关
在推出边界指令.
PTX是一个中间代码.它没有以任何保证的方式规定注册用法.它仍然经历一个编译步骤(通过ptxas或驱动程序运行时等效).我不知道有任何方法可以锁定或规定特定的寄存器使用,并且无法使用任何NVIDIA提供的工具直接编写CUDA代码(SASS(GPU汇编代码)).
正如Roberr Crovella所述,当涉及寄存器分配时,任何现代C/C++工具链(包括基于CUDA的C++工具链)都会忽略`register`关键字,因为它们都内置了复杂的寄存器分配机制.编译器可能禁止使用`register`属性获取变量的地址.