&引用;登记册;CUDA中的关键字

&引用;登记册;CUDA中的关键字,cuda,Cuda,我有一个大程序,它使用我分配给每个线程(64)的所有寄存器,并溢出到本地内存。我希望能够告诉编译器哪些变量应该不惜一切代价保留在寄存器中,哪些我并不真正关心。“register”C/C++关键字在nvcc中有效吗?可能有不同的机制吗 谢谢 如果需要,可以在CUDA C/C++中使用寄存器。在任何上下文中,它都只是对编译器的提示。它可能被忽略。没有任何声明保证它会做任何事情 我认为这些语句对于register的大多数语言实现都非常正确 我还认为,在决定寄存器中应该包含什么以及适当的优先级方面,编译

我有一个大程序,它使用我分配给每个线程(64)的所有寄存器,并溢出到本地内存。我希望能够告诉编译器哪些变量应该不惜一切代价保留在寄存器中,哪些我并不真正关心。“register”C/C++关键字在nvcc中有效吗?可能有不同的机制吗


谢谢

如果需要,可以在CUDA C/C++中使用
寄存器
。在任何上下文中,它都只是对编译器的提示。它可能被忽略。没有任何声明保证它会做任何事情

我认为这些语句对于
register
的大多数语言实现都非常正确

我还认为,在决定寄存器中应该包含什么以及适当的优先级方面,编译器很可能比您做得更好

控制寄存器使用的典型CUDA C/C++机制在更高级别上工作,它们是:

  • -maxrregcount
  • 指令

  • 登记登记登记时,Roberr Crovella的状态,“代码>寄存器/<代码>关键字被任何现代C/C++工具链(包括CUDA的基于C++的工具链)忽略,因为它们都有复杂的寄存器分配机制。编译器可能不允许使用
    register
    属性获取变量的地址。谢谢,这就是我的想法。我还认为,在决定寄存器中应该包含什么以及适当的优先级方面,编译器很可能比您做得更好。不幸的是,它不能(计算路径严重依赖于数据),而且它的选择很差。通过手动将变量逐出到全局内存中,我可以显著提高性能。不幸的是,这意味着,由于我使用CC3.5,我正在失去一级缓存对它们的好处(编写合并访问的程序变得很麻烦)。@Robert Crovella,njuffa,所以除了在汇编中写入对这些变量的所有访问外,没有确定的解决方案(我从未在CUDA中这样做过-这是一个选项吗?。@AMMC:事实是,在
    PTX ISA 5.1.1中。寄存器状态空间
    我发现如下:
    寄存器(.reg State Space)是快速存储位置。寄存器的数量是有限的,并且会因平台而异。当超过限制时,寄存器变量将溢出到内存中,导致性能变化。
    因此,即使我编写手写PTX,我似乎仍然无法控制它。我遗漏了什么吗?PTX是一个中间代码。它没有以任何保证的方式规定寄存器的使用。它仍然要经过编译步骤(通过ptxas或等效的驱动程序运行时)。我不知道有什么方法可以锁定或规定特定的寄存器用法,也没有任何方法可以使用NVIDIA提供的任何工具直接编写CUDA代码is SASS(GPU汇编代码)。