【发布时间】:2019-03-21 21:55:44
【问题描述】:
在 cuda C 编程指南中,流的定义非常抽象:一系列 cuda 操作,按照代码发出的顺序执行。
我对 Nvidia GPU 中指令如何执行的理解是:当内核启动时,块被分发到设备中的 SM。然后,经线(32 个线程的组)由 SM 中的经线调度程序调度,以便按经线方式处理指令。
因此,如果两个内核在同一个流中启动,则第一个内核会在第二个内核之前处理(因为指令按照它们放入流中的顺序进行处理)。这是否意味着两个内核最终只使用一个内核的硬件资源?还是每个内核都有自己的资源,但第二个内核等待第一个内核完成?
一般来说,流是如何在硬件中实现的?我假设它为 warp 调度程序提供了排序(但随后一个 warp 调度程序是基于每个 SM 的,那么这将如何允许多 SM 内核使用流?)。
【问题讨论】:
-
流不抽象任何东西。它们只是主机端机制
-
@talonmies:嗯,有有个硬件队列,不是吗?流并没有完全抽象它们,但仍然如此。
标签: cuda