内核启动和执行之间的平均时间?

时间:2011-07-13 13:36:00

标签: c profiling cuda clock

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

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

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

1 个答案:

答案 0 :(得分:1)

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

Code for QueryPerformanceTimer

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

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