在 CUDA PTX 中,%warpid 到底意味着什么?

ein*_*ica 1 cuda ptx

在 CUDA PTX 中,有一个特殊寄存器,用于保存线程的扭曲索引:%warpid。现在,规范说:

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

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

动机:我想%tid.x / warpSize通过使用这个特殊寄存器来省去计算的麻烦并释放寄存器。然而,回想起来,这是一个错误的动机,因为读取特殊寄存器的成本很高;请参阅:计算一维网格中的扭曲 id / 通道 id 的最有效方法是什么?

tal*_*ies 5

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

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

进而

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

所以不,你不能用它来达到你想要的目的。%warpid实际上是调度程序槽 ID,而不是块内恒定、唯一的扭曲索引。