仿真/建模/设计

使用NVIDIA Nsight系统优化CUDA内存传输

NVIDIA Nsight系统是一个用于跨CPU和GPU资源跟踪应用程序性能的综合工具。它有助于确保硬件得到有效使用,跟踪API调用,并通过描述低级指标如何与应用程序性能相加并找出可以改进的地方,深入了解节点间网络通信。

Nsight Systems可以扩展到集群大小的问题多节点分析,但当您刚刚开始优化之旅时,它还可以用于发现简单的性能改进。例如,可以使用Nsight Systems查看内存传输比预期更昂贵的位置。快速查看内存活动将捕获并关联性能代价,并建议如何解决这些代价。

在这一深入研究中,我将着眼于2019年GROMACS和2020年GROMAC之间的变化。我使用Nsight Systems逐步查找以前版本中的GPU和内存优化机会,并检查在新版本中如何解决这些问题。

2019年GROMACS

GROMACS公司是一个通用且广泛使用的软件包,用于模拟生物分子(如蛋白质、脂质和核酸)的分子动力学(MD)。它用于帮助研究人员检查疾病预防和治疗的重要生物过程。

我在带有NVIDIA Volta GPU的Arm服务器系统上使用Nsight Systems分析了GROMACS 2019。Nsight Systems包括用户界面和CLI,称为国家科学院.

运行以下命令国家科学院收集CUDA和NVTX的跟踪信息,无需CPU采样。这里使用它从目标Arm服务器收集性能数据,然后可以像往常一样在Nsight Systems用户界面中进行分析。有关的更多信息国家科学院和分析选项,请参见单个命令行示例.

nsys配置文件-t cuda,nvtx-s none gmx mdrun-dlb no-notunepme-noconfout-nsteps 3000

图1显示了执行此命令并打开报告文件。

屏幕截图显示,在放大之前,GROMACS 2019在带有NVIDIA Volta GPU的Arm服务器系统上运行。
图1。GROMACS的Nsight Systems命令行性能分析

Nsight Systems使用细节级别(LOD)缩放来显示时间轴上每个像素下的GPU使用量。然而,在这个缩放级别上,数据过于密集,无法看到真实的模式。放大显示Nsight Systems捕获的内容的粒度。

同样,还有关于GPU活动的信息,但详细信息在下拉列表中组织。展开GPU行以显示有关流和上下文的信息。

屏幕截图显示了GROMACS 2019跑步的扩展视图,放大到1秒时钟时间。
图2。GROMACS的硬件级吞吐量指标

在图2中,您可以开始看到GPU上内存传输和内核活动的重复模式。重复模式是正常的,但您也可以看到在内存传输上花费了大量时间。GPU活动中存在差距,这表明有改进的机会。

图3将时钟时间进一步放大到0.1秒。

屏幕截图显示了GROMACS 2019的运行,放大到0.1秒,显示了GPU上内核和内存的模式。
图3。GPU活动模式

在这个分辨率下,您可以清楚地看到GPU上的活动模式。在每次重复中,都会有主机到设备的内存传输(绿色)、一些内核工作(蓝色),然后再将内存传输回主机(洋红色)。您还可以看到在每个内核运行后、新内存传输开始之前的暂停。

图3显示了从上一次设备主机传输结束到本次迭代的设备主机传输(选择标记为绿色)结束的单个迭代中的移位。右键单击此处可打开菜单,您可以放大以隔离此迭代。

屏幕截图显示了GROMACS 2019运行的单个模式的隔离和放大,以供进一步分析。
图4。使用Nsight Systems分析GPU吞吐量模式

图4中标记了几点以指出:

  1. 这个[所有流]这排是溪流的汇合。关注细分,注意有一个活动上下文和两个活动流(流22和流23),默认流是不活动的。每个流在内存传输上花费了一半以上的时间。这个高百分比强烈表明您必须优化内存传输的大小,并考虑将其移动到默认流。
  2. 迭代需要约19毫秒,但其中3毫秒位于活动块之间的空白间隙中。这意味着有大约17%的加速等待捕获。下一个好的步骤是运行CPU配置文件来检查暂停的编程原因。
  3. 内存传输被序列化。流23从主机获取数据,而流22则等待,直到可以获取数据时才开始工作。工作完成后也会发生同样的事情。
  4. 最主要的工作内核是nbnxn_kernel_ElecEw_VdwLJCombGeom_VF_cuda。我建议在深入研究单个内核之前,先解决CPU和GPU时间线上的差距。

要查找最昂贵的内核,请右键单击[所有流]行并选择在事件视图中显示(图5)。

屏幕截图显示了GROMACS 2019事件视图,其中显示了CUDA内核及其运行时间。
图5。Nsight Systems中的CUDA内核评测

按持续时间对Events视图进行排序可以显示出最昂贵的内核。不同的实例略有不同,但目前最昂贵的是~10毫秒。单击一个特定的内核实例以青色突出显示时间线上与其相关的所有事件。

在图6中,闭合行上的青色标记表示该行中的某些内容被高亮显示。时间线顶部或左侧的箭头表示高亮显示的内容当前已离开屏幕。

屏幕截图显示,从GROMACS 2019运行的事件视图中选择内核会显示其在时间线上的位置。
图6。Nsight Systems内核分析

或者,您可以右键单击事件表并选择在时间线中显示当前将时间线缩放到该内核。

屏幕截图显示右键单击CUDA内核以使用Nsight Compute进行分析的菜单。
图7。从Nsight Systems启动Nsight Compute

大多数时候,您都会集中精力消除时间间隔,并确保在深入研究单个内核之前,将工作分配给所有CPU和GPU。当这个时间到来时,或者如果内核性能与您的期望不符,您可以右键单击感兴趣的内核并选择使用NVIDIA Nsight Compute分析选定的内核.

Nsight计算是一个强大的独立工具,用于分析、调试和优化CUDA内核。如果您的机器上安装了Nsight Systems中有问题的内核,则可以直接从该内核启动其用户界面或CLI。

GROMACS 2020年

NVIDIA与斯德哥尔摩GROMACS开发团队合作,对GROMACS进行了改进。有关详细信息,请参阅在现代多GPU系统上加速Gromacs.

您可能会注意到一些变化:

  • 这个nbnxn_gpux_to_nbat_x_内核是一个函数的GPU实现,该函数将原子的坐标数据从“XYZ”转换为一个结构,该结构还负责数据局部性:XYZQ。在2019年的GROMACS中,这是在CPU上完成的。2020版调整了内存传输的大小,并将其移动到默认流。
  • 长内核nbnxn_kernel_ElecEw_VdwLJCombGeom_VF_cuda现在启用两个流之间的重叠内核执行。
GROMACS 2020的Nsight Systems性能分析将时间线放大至约0.1秒。
图8。Nsight Systems 2020 GROMACS简介

将图8和图3中的结果进行比较。两者都显示约100毫秒的挂钟时间。如图8所示,更多的GPU时间实际上是在工作。GPU的使用在不同版本之间得到了优化。

几乎所有的内存传输工作都转移到了默认流上,这意味着这两个活动流在内存传输操作上花费的时间很少(4%和2.5%,而在GROMACS 2019中超过50%)。小内存传输也被合并为更大的大小,仍然适合传输缓冲区。

屏幕截图显示,Nsight Systems隔离了GROMACS 2020的单一GPU活动模式。
图9。放大到GROMACS 2020的单一迭代

将图4(GROMACS 2019的一个工作部分)与图9(GROMAC 2020的一个任务部分)进行比较是不太公平的。正如我前面提到的,大部分内存传输都被打包并转移到默认流。有几个有趣的事情需要注意:

  • 两个流之间有更多的并行内核执行。
  • 这个nbnxn_gpux_to_nbat_x_在进行昂贵的计算之前,内核正在GPU上运行。将其移动到GPU而不是CPU不仅填补了一些间隙时间,而且还消除了一些内存传输开销。
  • 昂贵的内核,nbnxn_kernel_ElecEw_VdwLJCombGeom_VF_cuda,并没有变得更快。最长的实例仍然大约为10毫秒。然而,由于它可以更有效地为整个运行迭代提供数据,因此该工作减少到10毫秒,而不是GROMACS 2019中的19毫秒。

现在已经消除了差距,nbnxn_kernel_ElecEw_VdwLJCombGeom_VF_cuda在运行时占主导地位,这表明您的性能调优过程应该继续到下一个内核。

关键要点

优化GPU代码时,改进CUDA内核并不是您应该做的第一件事。提高内存利用率并确保GPU“充足”可以产生最直接的影响。

这在最初为GPU重构或迁移到新一代GPU硬件时尤为重要。如果GPU急需工作,您将永远无法实现可用的性能提升。

准备好开始了吗?

这只是Nsight Systems必须提供的所有系统性能信息的开始。

NVIDIA Nsight Systems可从NVIDIA CUDA工具包公共下载。您还可以在NVIDIA CUDA Toolkit中获取最新更新的Nsight Systems,其增强功能和修复程序超出了NVIDI亚CUDA工具包中提供的版本Nsight系统第页。

有关GROMACS的更多信息,请参阅http://manual.gromacs.org/documentation网站/.

有关最近的其他帖子,请参阅以下内容:

有关帖子、视频和其他教程的完整列表,请参阅其他资源Nsight Systems文档的第节。

有问题吗?使用将其发布到NVIDIA论坛NVIDIA Nsight系统。将消息放在nsight-systems-feedback@nvidia.com。或者只是选择反馈在应用程序中让我们知道您看到的内容和您的想法。

讨论(1)

标签