【问题标题】:What do the %envregN special registers hold?%envregN 特殊寄存器保存什么?
【发布时间】:2021-08-09 17:21:42
【问题描述】:

我读过:CUDA PTX code %envreg<32> special registers。那里的发帖人对不尝试将源自 OpenCL 的 PTX 视为常规 CUDA PTX 感到满意。但是 - 他们关于 %envN 寄存器的问题没有得到正确回答。

马克哈里斯写道

OpenCL 支持的网格比大多数 NVIDIA GPU 支持的更大,因此需要通过划分多个实际网格启动来虚拟化网格大小,因此需要偏移。同样在 OpenCL 中,索引不一定从 (0, 0, 0) 开始,用户可以指定驱动程序必须传递给内核的偏移量。因此为 OpenCL 和 CUDA C 启动初始化的寄存器是不同的。

那么,%envN 寄存器是否构成“虚拟网格索引”?这些寄存器中的每一个都包含什么?

【问题讨论】:

    标签: cuda opencl ptx


    【解决方案1】:

    可以权威给出答案的程度是PTX documentation中的内容:

    一组 32 个预定义的只读寄存器,用于捕获 PTX 虚拟机之外的 PTX 程序的执行环境。这些寄存器在内核启动之前由驱动程序初始化,可以包含 cta 范围或网格范围的值。

    除此之外的任何东西都必须是:

    1. 通过逆向工程发现或由具有权威/未公开知识的人披露
    2. 可能会发生变化(未记录)
    3. 显然在驱动程序的控制下,这意味着对于不同的驱动程序(例如 CUDA 与 OpenCL),内容和/或解释可能不同。

    如果您认为应该以任何方式改进 NVIDIA 文档,我的建议是file a bug

    【讨论】:

    • 关于(2.):生活充满变化,CUDA也是如此。在下一个版本中,一切都可能发生变化……所以不是问题。我说的是最新版本的 CUDA 和 NVIDIA 驱动程序。 (3.): 为什么它会在司机的控制之下?驱动程序可能具有某种通用的传递行为,其中 libOpenCL 控制事物。 (1.) 好吧,网站上的一些人可能对这些 PTX 有过相关经验,而其他人则是 NVIDIA 的员工。
    • 我可能会提交一个错误 - 尽管 NVIDIA 在其人为的部分和漏洞的 OpenCL 支持方面臭名昭著。
    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2012-01-28
    • 2012-02-10
    • 2011-02-02
    • 2015-03-27
    相关资源
    最近更新 更多