创建并使用流
提交相互独立的工作队列
创建并使用流 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。
独立的工作队列
非默认流就是您自己的工作队列。两个流可以独立运行,因此 GPU 能够同时推进两边的工作。🧵
流句柄
流保存在 cudaStream_t 句柄中。您创建一次,将它传给各个调用,并在使用完毕后销毁它。
cudaStream_t stream;创建流
调用 cudaStreamCreate 来创建一个新流。它会分配驱动程序用于调度该流工作的队列。
cudaStreamCreate(&stream);在流中启动内核
内核的启动配置有第四个参数:共享内存大小,然后是流。将您的流传入,即可把内核排入该流。
kernel<<<grid, block, 0, stream>>>(d_data);两个流,两个任务
将一个任务放到 streamA,另一个任务放到 streamB。如果两者之间没有依赖关系,GPU 就可以并发运行它们。
kA<<<g, b, 0, streamA>>>(a);
kB<<<g, b, 0, streamB>>>(d);天然异步
流调用是异步的:主机会立即返回并继续执行。GPU 会按照自己的节奏处理队列。
等待一个流
使用 cudaStreamSynchronize 可以阻塞主机,直到指定的流完成,而不必等待整个设备。
cudaStreamSynchronize(stream);无阻塞检查
想快速查看状态吗?cudaStreamQuery 会在流完成时返回 cudaSuccess,在流仍然繁忙时返回 cudaErrorNotReady,而且不会让您停下来等待。
cudaStreamQuery(stream);清理资源
当不再需要某个流时,请使用 cudaStreamDestroy 释放它。在句柄被释放前,待处理的工作仍会完成。
cudaStreamDestroy(stream);非阻塞流
使用 cudaStreamNonBlocking 标志创建流,使其不会与传统默认流发生隐式同步。
cudaStreamCreateWithFlags(&s, cudaStreamNonBlocking);更多流,更多重叠
将独立的数据块分散到多个流中,可以让调度器持续为各个引擎提供工作。流的数量超过几个后,随着硬件逐渐填满,收益会递减。
快速检查
如何将内核排入指定的流?
回顾
现在您可以创建流、在流中启动内核、进行同步或查询,以及销毁流。独立的流能够实现真正的并发。✨
用 AI 导师学习 C++ — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「创建并使用流」课时是免费的吗?
是的 — 「创建并使用流」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。
「创建并使用流」这节课中我会学到什么?
提交相互独立的工作队列 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 CUDA Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「创建并使用流」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 CUDA Academy 课中编写并运行代码吗?
能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 默认流陷阱
- 创建并使用流
- 使用事件进行计时与同步
- 重叠复制与计算