CUDA Academy · 课时

使用事件进行计时与同步

使用 cudaEvent 测量并安排工作顺序

第 3 / 4 课13 个步骤

使用事件进行计时与同步 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。

什么是事件?

CUDA事件是您放入流中的一个标记。GPU 到达该位置时会记录时间,从而让您可以测量并安排工作顺序。⏱️

事件句柄

事件使用 cudaEvent_t 句柄,就像流一样。您可以创建、记录、查询事件,并在完成后销毁它。

cudaEvent_t start, stop;

创建事件

为每个需要的事件调用 cudaEventCreate。计时通常需要两个事件:一个放在工作开始前,一个放在工作结束后。

cudaEventCreate(&start);
cudaEventCreate(&stop);

记录事件

cudaEventRecord 会将事件放入流中。GPU 完成之前排入队列的所有工作后,会立即为事件记录时间戳。

cudaEventRecord(start, stream);

测量内核时间

在同一流中记录开始事件、启动内核,然后记录结束事件。两者之间的间隔就是 GPU 的实际执行时间。

cudaEventRecord(start, s);
kernel<<<g, b, 0, s>>>(d);
cudaEventRecord(stop, s);

等待事件

事件是异步的,因此主机必须等待。cudaEventSynchronize 会阻塞,直到指定事件确实已在 GPU 上记录。

cudaEventSynchronize(stop);

测量经过的时间

cudaEventElapsedTime 会返回两个已记录事件之间的毫秒数。这比主机端的 CPU 时钟准确得多。

float ms;
cudaEventElapsedTime(&ms, start, stop);

为什么不用 CPU 时钟?

主机计时器会包含启动开销,也无法测得真正的 GPU 时间。事件位于流内部,因此能够准确捕获设备执行的内容。

跨流排序

事件还可以同步流。cudaStreamWaitEvent 会让一个流暂停,直到另一个流中记录的事件发生。

cudaStreamWaitEvent(streamB, eventA, 0);

构建依赖关系

借助流等待事件,您可以表达一个依赖关系:streamB 只有在 streamA 到达其事件后才开始工作,而且不会阻塞主机。

清理事件

不再需要的事件请使用 cudaEventDestroy 释放。与流一样,事件创建成本很低,但在长期运行的应用中也不应泄漏。

cudaEventDestroy(start);
cudaEventDestroy(stop);

快速检查

哪个函数可以返回两个事件之间的时间?

回顾

事件可以精确测量 GPU 工作的时间,并安排一个流在另一个流之后执行。它们是测量和协调重叠工作的工具。🎯

免费开始

用 AI 导师学习 C++ — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「使用事件进行计时与同步」课时是免费的吗?

是的 — 「使用事件进行计时与同步」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。

「使用事件进行计时与同步」这节课中我会学到什么?

使用 cudaEvent 测量并安排工作顺序 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CUDA Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用事件进行计时与同步」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CUDA Academy 课中编写并运行代码吗?

能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 默认流陷阱
  2. 创建并使用流
  3. 使用事件进行计时与同步
  4. 重叠复制与计算
← 返回 CUDA Academy