【发布时间】:2015-10-07 02:43:26
【问题描述】:
我有一个 CUDA 流,有人交给我 - 一个 cudaStream_t 值。 CUDA Runtime API 似乎没有表明我如何获取与此流关联的设备的索引。
现在,我知道cudaStream_t 只是一个指向驱动程序级流结构的指针,但我不愿过多地深入研究驱动程序。有没有一种惯用的方法来做到这一点?还是有什么不想做的充分理由?
编辑:这个问题的另一个方面是流是否真的与设备相关联,在这种方式下,CUDA 驱动程序本身可以在给定指向结构的情况下确定设备的身份。 p>
【问题讨论】:
-
我不是 CUDA 驱动专家,也没有多 GPU 编程的实践经验。但我希望每个 CUDA 流都特定于特定的 CUDA 上下文。我还希望每个 GPU 都有自己的 CUDA 上下文。这意味着 CUDA 流句柄在设备之间不是唯一的,只是对于每个给定的设备都是唯一的。因此,您可能需要在应用中传递一对 {device number, stream handle}。
-
@njuffa:如果 CUDA 流是特定于上下文的,并且如果上下文是特定于设备的,这是否意味着 CUDA 流句柄是跨设备唯一的?也许我没有关注你……
-
跨所有设备的唯一流句柄意味着流句柄的全局“命名空间”。我认为不存在。因此,如果您假设有两个 GPU,每个都有自己的上下文。在每个上下文中创建的第一个流可能会获得句柄值 1。有人将值为 1 的流句柄传递给您的代码。它属于哪个设备?我们不知道。
-
@njuffa:
cudaStream_ts 是指向结构的指针,而不是整数句柄(如 CUDA 设备标识符)。是什么让您相信这些不是唯一的句柄? -
@RobertCrovella 够公平的。