1

在 CUDA PTX 中,有一个特殊的寄存器保存线程的 warp 索引:%warpid. 现在,规范说:

请注意,它%warpid 是易失的,并在读取时返回线程的位置,但其值可能会在执行期间发生变化,例如,由于抢占后线程的重新调度。

嗯,那是什么位置?它不应该是块内的位置,例如一维网格%tid.x / warpSize吗?它是 SM 中的一些 slot-for-a-warp(例如 warp 调度程序或一些内部队列)吗?我很困惑。

动机:我想%tid.x / warpSize通过使用这个特殊的寄存器来省去计算和释放寄存器的麻烦。

4

1 回答 1

4

您需要阅读紧随您在问题中发布的引文之后的文档的下 25 个单词:

出于这个原因,如果内核代码中需要这样的值,则应该使用 %ctaid 和 %tid 来计算虚拟扭曲索引;

接着

%warpid 主要用于启用分析和诊断代码来采样和记录工作场所映射和负载分布等信息。

所以不,你不能用它来做你想要的。%warpid实际上是一个调度器槽 ID,而不是一个块内一个恒定的、唯一的 warp 索引。

于 2016-07-12T07:26:27.063 回答