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

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 获得多次启动的时间并观察是否计时结果表明发生了异步启动。

【讨论】:

以上是关于内核启动和执行之间的平均时间?的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核如何装载和启动一个可执行程序

Linux内核如何装载和启动一个可执行程序

内核控制路径和内核线程之间有什么关系?

linux内核设计的艺术--系统启动第一步

Linux内核如何装载和启动一个可执行程序

Linux内核如何装载和启动一个可执行程序(转)