【发布时间】:2019-06-09 10:20:31
【问题描述】:
我尝试测量 CUDA 内核函数所花费的时间。我测量了它的 CPU 和 GPU 时间。但我发现两者之间存在巨大差异。
当我使用 NVIDIA 分析器对其进行分析时,内核大约需要 6 毫秒,这正是我想要的。但是当我在内核调用周围使用 gettimeofday() 来获取 CPU 计时时,测量结果是 15 毫秒。我那里也没有任何 memcpy 调用。内核在单独的流中运行。类似的内核也在并发流中运行。
示例代码:
gettimeofday(start);
cudaEventRecord(startGPU);
Kernel <<<abc, xyz,stream>>>();
cudaDeviceSynchronize();
cudaEventRecord(stopGPU);
printf("Elapsed GPU time = ");
gettimeofday(stop);
printf("Elapsed CPU time = ");
上述代码得到的结果:
经过的 GPU 时间 = 6 毫秒 CPU 运行时间 = 15 毫秒
这很奇怪,因为只有内核执行行存在。然而,内核参数是指针。内存副本是否占用了额外的时间?但我也没有在个人资料的任何地方找到内存副本。任何线索将不胜感激。
【问题讨论】:
-
什么平台?如果 Windows 带有 WDDM 驱动程序,CPU 时间将另外包括一个批处理超时。如果 GPU 还驱动显示器,则在 GPU 更新屏幕时可能会涉及额外的延迟。
-
是的,我知道这一点。但我使用的是 NVIDIA Jetson - TX2。
标签: c parallel-processing cuda gpu nvidia