如何在Nsight探查器中修复“内核并发不足”警告?

时间:2019-09-14 04:53:19

标签: cuda gpu profiler nsight

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

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

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

1 个答案:

答案 0 :(得分:1)

对于您显示的代码:

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

您仅运行单个内核。仅使用一个内核就不可能观察到内核并发。要摆脱Nsight Profiler中的“内核低并发”警告,您需要运行一个实际上启动两个或多个同时运行的内核的代码。仅启动单个内核的代码无法执行此操作。

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

关于您的问题中的这一说法:

  

我还检查了一个问题:概要分析并发CUDA内核,并说分析时会对应用程序中的所有并发内核进行序列化

不,那不是它的意思,我建议您重新阅读。这是答案中第1点的内容:

  
      
  1. 仅进行跟踪。如果您未指定--metrics或--events,则nvprof将仅执行跟踪运行。 在这种情况下,nvprof将同时运行内核,但是您将仅获得内核计时,而不是度量/事件数据。
  2.   

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