CUDA:流抽象了什么?

时间:2018-10-17 09:09:09

标签: cuda

在cuda C编程指南中,流的定义非常抽象:一系列cuda操作,它们按代码发出的顺序执行。

我对在Nvidia GPU中如何执行指令的理解是:启动内核时,将块分配给设备中的SM。然后由SM中的经编调度器调度经纱(每组32个线程),以进行经向处理指令。

  1. 因此,如果在同一流中启动了两个内核,那么第一个内核将在第二个内核之前进行处理(因为指令按照它们在流中的放置顺序进行处理)。这是否意味着两个内核最终仅使用一个内核的硬件资源?还是每个内核都有自己的资源,但是第二个内核正在等待中,直到第一个内核完成?

  2. 通常,流是如何在硬件中实现的?我假设它为warp调度程序提供了排序(但是warp调度程序是基于每个SM的,所以这将如何允许多SM内核使用流?)。

1 个答案:

答案 0 :(得分:2)

CUDA流只是要由GPU执行的动作队列。 通过API的每个功能都可以异步方式发布-CPU代码继续运行,而指令等待独立于主机代码执行。不过,它是相对于队列/流中的其他指令同步地执行的。

如果要在GPU上异步执行多个操作,则需要两个或更多队列/流。例如,CUDA手册中有一章介绍了如何将内核执行(第一流)与内存传输(第二流)混合使用。