我有一个CUDA流,有人递给我 - cudaStream_t
值。 CUDA Runtime API似乎并未表明我如何获取与此流相关联的设备的索引。
现在,我知道cudaStream_t
只是指向驱动程序级流结构的指针,但我对于过多地研究驱动程序犹豫不决。这是否有惯用的方法?还是有一些不想做的好理由?
编辑:此问题的另一个方面是流是否真的与设备相关联,其中CUDA驱动程序本身可以确定设备的身份给定指向的设备结构
答案 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设备才能实现上述目标......)