%envregN 特殊寄存器保存啥?

Posted

技术标签:

【中文标题】%envregN 特殊寄存器保存啥?【英文标题】: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 寄存器是否构成“虚拟网格索引”?这些寄存器中的每一个都包含什么?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

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

以上是关于%envregN 特殊寄存器保存啥?的主要内容,如果未能解决你的问题,请参考以下文章

通用寄存器起啥作用?

CPU各寄存器的作用,即用来保存啥内容

单片机中的寄存器到底有啥作用,它们是像RAM一样呢还是有啥其它的作用?

计算机C语言中的关键字:register是啥意思?

linux中设备和驱动到底有啥区别,有啥联系啊?学习2.6的内核,搞得好晕呢!

单片机中断相关寄存器功能,点亮LED灯步骤步骤?