内核启动和执行之间的平均时间?
Posted
技术标签:
【中文标题】内核启动和执行之间的平均时间?【英文标题】:average time between kernel launch and execution? 【发布时间】:2011-07-13 13:35:59 【问题描述】:如果我理解正确,当您异步启动 CUDA 内核时,它可能会立即开始执行,或者它可能会等待先前的异步调用(传输、内核等)首先完成。 (我也知道内核在某些情况下可以同时运行,但我现在想忽略它)。
我怎样才能找出启动内核(“排队”)和它实际开始执行之间的时间。事实上,我真的只是想知道在我的程序的一次运行中所有启动的平均“排队时间”(通常在数万或数十万次内核启动中)。
我可以通过事件轻松计算每个内核的平均执行时间(~500us)。我试图模拟 - 每次启动内核时我都会删除 CLOCK()
的结果,这样我就可以确定每个内核启动时启动队列的时间。但是CLOCK()
没有足够高的精度(0.01 秒) - 有时似乎一次启动了多达 60 个内核,而实际上很多内核并没有。
【问题讨论】:
【参考方案1】:而不是clock
使用基于机器时钟周期计数的QueryPerformanceTimer
。
Code for QueryPerformanceTimer
其次,分析工具 (Visual Profiler) 仅测量串行启动 [see page 24] 和 [see post number 3]。
因此,最好的选择是 (1) 使用 QueryPerformanceTimer
(或 Visual Profiler),这样您就可以获得单次启动的准确测量结果;(2) 使用 QueryPerformanceTimer
获得多次启动的时间并观察是否计时结果表明发生了异步启动。
【讨论】:
以上是关于内核启动和执行之间的平均时间?的主要内容,如果未能解决你的问题,请参考以下文章