【问题标题】:average time between kernel launch and execution?内核启动和执行之间的平均时间?
【发布时间】:2011-07-13 13:35:59
【问题描述】:

如果我理解正确,当您异步启动 CUDA 内核时,它可能会立即开始执行,或者它可能会等待先前的异步调用(传输、内核等)首先完成。 (我也知道内核在某些情况下可以同时运行,但我现在想忽略它)。

我怎样才能找出启动内核(“排队”)和它实际开始执行之间的时间。事实上,我真的只是想知道在我的程序的一次运行中所有启动的平均“排队时间”(通常在数万或数十万次内核启动中)。

我可以通过事件轻松计算每个内核的平均执行时间(~500us)。我试图模拟 - 每次启动内核时我都会删除 CLOCK() 的结果,这样我就可以确定每个内核启动时启动队列的时间。但是CLOCK() 没有足够高的精度(0.01 秒) - 有时似乎一次启动了多达 60 个内核,而实际上很多内核并没有。

【问题讨论】:

    标签: c profiling cuda clock


    【解决方案1】:

    而不是clock 使用基于机器时钟周期计数的QueryPerformanceTimer

    Code for QueryPerformanceTimer

    其次,分析工具 (Visual Profiler) 仅测量串行启动 [see page 24] 和 [see post number 3]。

    因此,最好的选择是 (1) 使用 QueryPerformanceTimer(或 Visual Profiler),这样您就可以获得单次启动的准确测量结果;(2) 使用 QueryPerformanceTimer 获得多次启动的时间并观察是否计时结果表明发生了异步启动。

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 2011-04-15
      • 2023-03-07
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多