gpt4 book ai didi

cuda - CUDA 流是否与设备相关?以及如何获得流的设备?

转载 作者:行者123 更新时间:2023-12-03 20:20:21 27 4
gpt4 key购买 nike

我有一个 CUDA 流,有人交给我 - cudaStream_t值(value)。 CUDA Runtime API似乎没有表明我如何获得与该流相关联的设备的索引。

现在,我知道 cudaStream_t只是一个指向驱动程序级流结构的指针,但我对深入研究驱动程序犹豫不决。有没有一种惯用的方法来做到这一点?或者有什么好的理由不想这样做?

编辑:这个问题的另一个方面是流是否真的以某种方式与设备相关联,在这种方式下,CUDA 驱动程序本身可以根据所指向的结构确定该设备的身份。

最佳答案

是的,流是特定于设备的。
在 CUDA 中,流特定于上下文,而上下文特定于设备。
现在,使用运行时 API,您不会“看到”上下文 - 每个设备只使用一个上下文(这是一个好主意,因为上下文很昂贵)。但是,如果您考虑驱动程序 API - 您 have :

CUresult cuStreamGetCtx ( CUstream hStream, CUcontext* pctx );
CUstreamcudaStream_t都是一样的东西——一个指针。所以,你可以得到上下文。然后,您将该上下文设置或推送为当前上下文(阅读有关在其他地方执行此操作的信息),最后,您使用:
CUresult cuCtxGetDevice ( CUdevice* device ) 
获取当前上下文的设备。
所以,有点麻烦,但很可行。

我轻松确定流设备的方法
我解决这个问题的方法是让 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() == my_device());
不必担心。 (当然,上面的代码片段适用于至少有 2 个 CUDA 设备的系统,否则没有索引为 1 的设备......)

关于cuda - CUDA 流是否与设备相关?以及如何获得流的设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com