【发布时间】:2014-09-10 12:35:15
【问题描述】:
我使用 NVIDIA Profiler 测试了一个内核,它输出以下内容:
我们已经启动了具有 256 个块和 256 个线程的内核。 据我了解,grafic 显示了三个部分,一个用于 Warps ,一个用于寄存器,一个用于共享内存,每个部分都有一个计算的“块限制”,其中寄存器部分中的一个是最小和最大的限制值. 显然内核是寄存器绑定的,我们只能在一个 SM 上同时启动 4 个块。这就是 Profiler 所说的。我完全在问自己以下问题:
一个GTX 780 Ti,一个SM有192个核心,怎么可能同时启动4个block * 256个线程= 1024个线程?在 CUDA 术语中,这个“同时”是什么意思?这是否意味着,可以在调度程序中同时调度 4 个块,并且 SM 以锁步方式从一个单个块的 warp 中执行指令。同时这个词有点混乱?
非常感谢
【问题讨论】:
-
您当前使用的每个线程的寄存器数量限制了可以在一个SM上同时(同时)执行的块数量。因此 GPU 没有被充分利用。请记住,寄存器、块和线程之间的关系是三向关系。这个文档developer.download.nvidia.com/compute/cuda/… 可以帮助你。