%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 特殊寄存器保存啥?的主要内容,如果未能解决你的问题,请参考以下文章
单片机中的寄存器到底有啥作用,它们是像RAM一样呢还是有啥其它的作用?