Cuda GPU使用解释 我用英伟达探查器测试了一个内核,输出如下:

Cuda GPU使用解释 我用英伟达探查器测试了一个内核,输出如下:,cuda,nvidia,Cuda,Nvidia,我们已经启动了具有256个块和256个线程的内核。 据我所知,图形显示了三个部分,一个用于扭曲,一个用于寄存器,一个用于共享内存,每个部分都有一个计算的“块限制”,其中寄存器部分中的一个是最小和最大的限制值。 显然,内核是寄存器绑定的,我们只能在一个SM上同时启动4个块。这就是剖析者所说的。我完全是在问自己以下事情: 一个GTX 780 Ti,在一个SM中有192个内核,怎么可能同时启动4个块*256个线程=1024个线程?在CUDA术语中,“同时”是什么意思?这是否意味着可以在调度器中同时调度

我们已经启动了具有256个块和256个线程的内核。 据我所知,图形显示了三个部分,一个用于扭曲,一个用于寄存器,一个用于共享内存,每个部分都有一个计算的“块限制”,其中寄存器部分中的一个是最小和最大的限制值。 显然,内核是寄存器绑定的,我们只能在一个SM上同时启动4个块。这就是剖析者所说的。我完全是在问自己以下事情:

一个GTX 780 Ti,在一个SM中有192个内核,怎么可能同时启动4个块*256个线程=1024个线程?在CUDA术语中,“同时”是什么意思?这是否意味着可以在调度器中同时调度4个块,并且SM同时以锁步方式从单个块的扭曲执行指令。这个词有点混淆


非常感谢

GPU是一台延迟隐藏机器,延迟隐藏涉及在每个周期/问题槽的不同执行单元上调度各种线程(指令)。为了最好地隐藏延迟,GPU喜欢有更多的可用线程来选择指令,而不是SM上的执行单元

因此,在给定的周期中,可能只有192个(或更少,可能)执行单元由warp调度器调度,但在下一个周期/问题槽中,可以调度更多的指令。为了简化这个过程,我们希望有尽可能多的线程/扭曲/块“可用”用于调度。此处的“同步”指SM上“打开”且“可调度”的线程/扭曲/块的数量。它不是指在任何发布槽中发出的实际指令数量,也不是指SM上的“核心”或“执行单元”数量

在任何给定时间(以便可用于调度目的)可在SM上“打开”的线程/扭曲/块的数量可能会受到所讨论线程块的资源使用的限制。例如,寄存器使用率高的线程块可能会限制SM上可以“打开”的线程块总数,因为SM必须为每个“打开”的线程块分配一个完整的寄存器集


由于GTX 780 Ti使用GK110 GPU,因此可能会对GPU感兴趣。

GPU是一个延迟隐藏机器,延迟隐藏涉及在每个周期/问题槽的不同执行单元上调度各种线程(指令)。为了最好地隐藏延迟,GPU喜欢有更多的可用线程来选择指令,而不是SM上的执行单元

因此,在给定的周期中,可能只有192个(或更少,可能)执行单元由warp调度器调度,但在下一个周期/问题槽中,可以调度更多的指令。为了简化这个过程,我们希望有尽可能多的线程/扭曲/块“可用”用于调度。此处的“同步”指SM上“打开”且“可调度”的线程/扭曲/块的数量。它不是指在任何发布槽中发出的实际指令数量,也不是指SM上的“核心”或“执行单元”数量

在任何给定时间(以便可用于调度目的)可在SM上“打开”的线程/扭曲/块的数量可能会受到所讨论线程块的资源使用的限制。例如,寄存器使用率高的线程块可能会限制SM上可以“打开”的线程块总数,因为SM必须为每个“打开”的线程块分配一个完整的寄存器集


由于GTX 780 Ti使用GK110 GPU,因此可能会有兴趣。

目前使用的每个线程的寄存器数量限制了可以在一个SM上同时(同时)执行的块的数量。因此,GPU没有得到充分利用。请记住,寄存器、块和线程之间的关系是一种三向关系。此文档可以帮助您。您目前使用的每个线程的寄存器数量限制了可以在一个SM上同时(同时)执行的块的数量。因此,GPU没有得到充分利用。请记住,寄存器、块和线程之间的关系是一种三向关系。这个医生可以帮你。谢谢你的解释。您写道“但在下一个周期/问题时段,可以安排更多指令。”-->“更多指令”是什么意思?计划的指令超过192条?如果是这样,一个块中最多只能有192个线程同时执行一条指令,因为有192个内核可用?GPU执行单元是流水线的。我所说的“更多”是指新指令(与之前发布的指令相比),而不是“超过192条”。由于以前发出的指令可能处于管道执行的不同阶段,所以说“一个块最多只能有192个线程同时执行一条指令”是不明智的。在任何给定的时刻,各种指令都在管道中执行。关于单周期/问题插槽中可以发布的内容,它仍然不是完全正确的,因为开普勒SM中有超过192个执行单元。192个“核心”大约指SP单元。除SP单元外,还有其他执行单元。但是只有4个warp调度程序,每个都可以双重发出warp的指令。因此,理论上的最大值是8*32=256条发出的线程指令。这一最大理论值通常在实践中无法实现。即使是,256条线程指令也不可能都是同一类型的(例如SP浮点乘法)。感谢您的精彩解释。你写了“但是在非常