如何修复 Nsight 分析器中的“低内核并发”警告?

Posted

技术标签:

【中文标题】如何修复 Nsight 分析器中的“低内核并发”警告?【英文标题】:How to fix 'Low Kernel Concurrency' warning in Nsight profiler? 【发布时间】:2020-01-15 20:34:19 【问题描述】:

我正在尝试使用 Nsight eclipse 分析器中的内核调用来分析 cuda 程序,但我收到以下警告:'低内核并发,两个内核并行执行的时间百分比很低'。当我运行程序时,结果显示内核是并行运行的。

我检查了一些其他简单的 cuda 代码,结果是一样的。我还检查了这个问题: Profile concurrent CUDA kernels 它说应用程序中的所有并发内核在分析时都被序列化,如果这是正确的,为什么我会收到这个警告? 这是代码的内核调用部分:

cudaProfilerStart();
Kernel <<<BlockNum, ThreadNum>>>();
cudaProfilerStop();

【问题讨论】:

我建议您重新阅读链接到的答案。它没有说明你声称它做了什么。 对于启动单个内核或没有并行运行内核的应用程序,您未显示的代码可能就是这种情况(您显示的 3 行还不够),这个消息是正常的,可以忽略。可以预料,如果您的应用程序没有启动可以同时运行的内核,您将收到此消息。您可能还会看到其他预期的消息,例如“低 GPU 利用率”、“低计算/复制重叠”等。这些都取决于您的应用程序设计,并且对于您的应用程序可能是正常的/预期的。 【参考方案1】:

对于您显示的代码:

cudaProfilerStart();
Kernel <<<BlockNum, ThreadNum>>>();
cudaProfilerStop();

您只运行一个内核。仅使用单个内核是不可能观察内核并发性的。要消除 Nsight 分析器中的“低内核并发”警告,您需要运行一个实际启动 2 个或更多同时运行的内核的代码。仅启动单个内核的代码无法做到这一点。

如果您想见证内核并发,请尝试运行 concurrentKernels CUDA sample code。

关于你的问题中的这个陈述:

我还检查了这个问题:Profile concurrent CUDA kernels,它说应用程序中的所有并发内核在分析时都被序列化了

不,这不是它所说的,我建议你重新阅读它。这是答案中第 1 点所说的内容:

    只做追踪。如果您不指定 --metrics 或 --events,nvprof 将仅执行跟踪运行。 在这种情况下,nvprof 将同时运行内核,但您只会获得内核计时 - 而不是指标/事件数据。

Nsight Eclipse 中内置的分析工具基本上是 NVIDIA Visual Profiler - nvvp。关于并发性,它的行为类似。它可以在时间轴上捕获和显示内核并发。如果您在启动该工具时选择了配置并发内核的选项,那么对于时间线捕获部分,它可以显示并发内核。同样,您可以使用concurrentKernels 示例代码来尝试一下。 Here 是同时运行的内核的可视化分析器显示示例(Nsight Eclipse 分析器基本上就是可视化分析器)。

【讨论】:

以上是关于如何修复 Nsight 分析器中的“低内核并发”警告?的主要内容,如果未能解决你的问题,请参考以下文章

NSight Profiler 信号 139

如何使 Nsight profiling 的内存统计部分有意义?

Nsight 分析器显示的“其他”问题停顿原因是啥?

Nsight 分析器显示的“其他”问题停顿原因是啥?

Nsight + Visual Studio 上缺少“开始性能分析”按钮

Nsight Compute 说:“此设备不支持分析” - 为啥?