【问题标题】:CPU and GPU timer in cuda visual profilercuda 视觉分析器中的 CPU 和 GPU 计时器
【发布时间】:2011-05-20 01:55:53
【问题描述】:

所以cuda视觉分析器中有2个定时器,

GPU Time:方法在 GPU 上的执行时间。 CPU 时间:启动该方法的 GPU 时间和 CPU 开销的总和。在驱动程序生成的数据级别,CPU Time 只是启动非阻塞方法的方法的 CPU 开销;对于阻塞方法,它是 GPU 时间和 CPU 开销的总和。默认情况下,所有内核启动都是非阻塞的。但是,如果启用了任何探查器计数器,则内核启动将被阻止。不同流中的异步内存复制请求是非阻塞的。

如果我有一个真正的程序,实际执行时间是多少?我测量时间,有一个GPU计时器和一个CPU计时器,有什么区别?

【问题讨论】:

  • 我想你已经回答了你自己的问题。

标签: cuda


【解决方案1】:

您快到了 - 既然您已经了解了一些不同的选项,那么最后一步是问问自己您想要测量的确切时间。对此没有正确答案,因为这取决于您要对测量进行什么操作。当您尝试优化计算时,CPU 时间和 GPU 时间正是您想要的,但它们可能不包括实际上可能非常重要的等待之类的事情。您提到“实际执行时间”——这是一个开始。你是指问题的完整执行时间——从用户启动程序到答案吐出和程序结束?在某种程度上,那真的是唯一真正重要的时间。

对于这样的数字,在 Unix 类型的系统中,我喜欢只测量程序的整个运行时间; /bin/time myprog,大概有一个 Windows 等价物。这很好,因为它完全没有歧义。另一方面,因为它是一个总数,所以它太宽泛而无济于事,而且如果你的代码有一个大的 GUI 组件也不是很好,因为你也在测量用户点击他们的方式所花费的时间到结果。

如果您想要某组计算的经过时间,cuda 有非常方便的函数 cudaEvent* 可以放置在代码的各个部分 — 请参阅 CUDA Best Practices Guide, s 2.1.2, Using CUDA GPU Timers — 这些你可以在重要的代码位之前和之后放置并打印结果。

【讨论】:

    【解决方案2】:

    gpu 计时器基于事件。 这意味着当一个事件被创建时,它将被设置在 gpu 的队列中以供服务。所以那里也有一点开销。 根据我的测量结果,尽管差异并不重要

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2012-07-07
      相关资源
      最近更新 更多