NSIGHT:内核级实验中的红色和黑色是什么?

时间:2014-10-08 09:18:08

标签: cuda nsight

我正在努力学习NSIGHT。

有人可以告诉我这些红色标记在User Guide的以下屏幕截图中显示了什么?如您所见,每个SM的占用率有两个红色标记,经线部分有两个红色标记。

同样,那些长度不同的黑线是什么?

enter image description here

同一页面的另一个例子:

enter image description here

1 个答案:

答案 0 :(得分:3)

以下是基本解释:

  • 灰色条表示您特定的可用资源量 设备具有(由于其硬件和计算能力)。
  • 黑条表示在启动配置下可以为内核实现的理论限制(每个网格的块数和每个块的线程数)
  • 红点表示您正在使用的资源。

例如,在第一张图片上看“Active warps”:

  • 灰色:设备同时支持64个活动warp。
  • 黑色:由于使用了寄存器,理论上可以映射64个经线。
  • 红色:您实现了63.56个有效扭曲。

在这种情况下,灰色条纹位于黑色条纹下方,因此您无法看到灰色条纹。

在某些情况下,可能会发生理论限制其大于设备限制的情况。还行吧。您可以在第二张图片上看到示例(块限制(共享内存)和块限制(寄存器)。如果您认为您的内核仅使用一小部分资源,那么这是有意义的;如果一个块使用1个寄存器,则可能是可以启动65536个块(不考虑其他因素),但仍然是你的设备限制为16.然后,数字128来自65536/512。这同样适用于共享内存部分:因为你使用0字节的共享内存每个块,您可以根据共享内存限制启动无限数量的块。

关于空格 除“Active warps”和“Occupancy”之外的所有行的理论值和实现值都相同。 你真的每块执行1024个线程,第一张图片上每个块有32个warp。 在占用和主动扭曲的情况下,我想实现的数量是一种统计测量。我认为这是因为CUDA模型的本质。在CUDA中,warp中的每个线程在SM上同时执行。隐藏高延迟操作(如内存读取)的方法是通过“几乎免费的warp上下文切换”。我想在这种情况下应该很难准确测量活动扭曲的数量。除了硬件概念之外,我们还必须考虑内核实现,分支发散,例如可能使warp比其他更慢......等等。

扩展信息

如您所见,这些数字与您的设备特定硬件和计算能力密切相关,因此也许一个具体的例子可以帮助:

  

使用CCC 3.0可以处理每个SM最多2048个线程,16个   每SM块数和每SM 64个经线。您还有最大数量   可以使用的寄存器(在这种情况下为65536)。

This维基百科条目是一个方便的网站,可以了解每个ccc功能。

您可以使用随CUDA工具包提供的deviceQuery实用程序示例代码查询此参数,或者在执行时使用CUDA API作为here查询此参数。

效果考虑因素

理想情况是,理想情况下,每个线程使用少于32个寄存器可以执行16个128个线程的块。这意味着高入住率。在大多数情况下,你的内核每块需要多于32个寄存器,因此不再可能在SM上同时执行16个块,然后以块级粒度完成减少,即减少块的数量。这是酒吧捕获的内容。

您可以使用线程和块的数量,甚至使用 _ _launch_bounds_ _ 指令来优化内核,也可以使用 - maxrregcount 设置降低单个内核使用的寄存器数量,看它是否能提高整体执行速度。