【问题标题】:PTX - where are .reg registers located?PTX - .reg 寄存器在哪里?
【发布时间】:2013-07-16 13:32:24
【问题描述】:

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

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

【问题讨论】:

  • 虚拟机状态空间上下文中的“位置”和“位置”是什么意思?
  • 我的意思是它在哪里分配:在线程上注册文件?即使我在全局范围内而不是在内核中声明 .reg 名称?
  • 它是在虚拟机的寄存器状态空间中“分配”的(并且这只允许在非CUDA ABI PTX代码中)。
  • 知道了。我打算遵守遵守 ABI 的 PTX。谢谢,把它作为一个答案,我会接受它

标签: cuda nvidia ptx


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 2012-01-05
    • 2016-01-26
    • 2012-11-28
    • 2016-02-16
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多