我正在尝试使用Nsight eclipse Profiler中的内核调用来分析cuda程序,但是却收到以下警告:“低内核并发性,并行执行两个内核的时间百分比很低”。当我运行程序时,结果表明内核正在并行运行。
我检查了其他一些简单的cuda代码,结果相同。我还检查了这个问题: Profile concurrent CUDA kernels 它说在进行概要分析时,应用程序中的所有并发内核都已序列化,如果这是正确的,那么为什么我会收到此警告? 这是代码的内核调用部分:
cudaProfilerStart();
Kernel <<<BlockNum, ThreadNum>>>();
cudaProfilerStop();
答案 0 :(得分:1)
对于您显示的代码:
cudaProfilerStart();
Kernel <<<BlockNum, ThreadNum>>>();
cudaProfilerStop();
您仅运行单个内核。仅使用一个内核就不可能观察到内核并发。要摆脱Nsight Profiler中的“内核低并发”警告,您需要运行一个实际上启动两个或多个同时运行的内核的代码。仅启动单个内核的代码无法执行此操作。
如果要见证内核并发,请尝试运行concurrentKernels
CUDA sample code。
关于您的问题中的这一说法:
我还检查了一个问题:概要分析并发CUDA内核,并说分析时会对应用程序中的所有并发内核进行序列化
不,那不是它的意思,我建议您重新阅读。这是答案中第1点的内容:
- 仅进行跟踪。如果您未指定--metrics或--events,则nvprof将仅执行跟踪运行。 在这种情况下,nvprof将同时运行内核,但是您将仅获得内核计时,而不是度量/事件数据。
Nsight Eclipse内置的分析工具基本上是NVIDIA Visual Profiler-nvvp
。关于并发,它的行为类似。它可以在时间轴中捕获并显示内核并发。如果在启动该工具时选择了分析并发内核的选项,则对于时间线捕获部分,它可以显示并发内核。同样,您可以使用concurrentKernels
示例代码进行尝试。 Here是同时运行的内核的可视化探查器显示示例(Nsight Eclipse探查器基本上是可视化探查器)。