CUDA流是否与设备相关?我如何获得流媒体设备?

时间:2015-07-17 11:28:19

标签: cuda multi-gpu

我有一个CUDA流,有人递给我 - cudaStream_t值。 CUDA Runtime API似乎并未表明我如何获取与此流相关联的设备的索引。

现在,我知道cudaStream_t只是指向驱动程序级流结构的指针,但我对于过多地研究驱动程序犹豫不决。这是否有惯用的方法?还是有一些不想做的好理由?

编辑:此问题的另一个方面是流是否真的与设备相关联,其中CUDA驱动程序本身可以确定设备的身份给定指向的设备结构

2 个答案:

答案 0 :(得分:1)

关于显式流,它取决于实现(据我所知),没有API为用户提供这种潜在的查询功能;我不知道驱动程序可以在这方面为您提供的功能,但是,您始终可以查询流。

通过使用 cudaStreamQuery ,您可以在所选设备上查询目标流,如果它返回 cudaSuccess cudaErrorNotReady 则表示该流确实存在于该设备上,如果它返回 cudaErrorInvalidResourceHandle ,则表示它没有。

答案 1 :(得分:0)

我对此问题的解决方法是让the (C++'ish) stream wrapper class将设备保留为成员变量,这意味着您可以写:

auto my_device = cuda::device::get(1);
auto my_stream = my_device.create_stream(); /* using some default param values here */
assert(my_stream.device_id() == my_device.id());
assert(my_stream.device_id() == 1);

而不必担心。 (当然,只有拥有至少2台CUDA设备才能实现上述目标......)