首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于cudaSetDevice的CUDA驱动程序API等效

用于cudaSetDevice的CUDA驱动程序API等效
EN

Stack Overflow用户
提问于 2013-08-19 19:22:39
回答 2查看 1.9K关注 0票数 3

运行时API函数cudaSetDevice的CUDA驱动程序API等效于什么?

我正在查看驱动程序API,但找不到等效的函数。我能做的是

代码语言:javascript
运行
复制
cuDeviceGet(&cuDevice, device_no);
cuCtxCreate(&cuContext, 0, cuDevice);

这不是等价的,因为除了设置设备之外,它还创建了一个上下文。运行时API cudaSetDevice本身并不创建上下文。在运行时API中,CUDA上下文是通过第一个CUDA调用隐式创建的,该调用要求设备上的状态。

这个问题的背景: CUDA感知的MPI (MVAPICH2 1.8/9)初始化要求在调用MPI_init之前设置CUDA设备。使用CUDA运行时API,可以使用

代码语言:javascript
运行
复制
cudaSetDevice(device_no);
MPI_init();

但是,我不想使用对CUDA运行时的调用,因为我的应用程序的其余部分完全是使用驱动程序API,我希望避免也链接到运行时。

在MPI初始化之前创建上下文有什么问题?原则上没什么。只是想知道驱动程序API中是否有一个等价的调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-19 20:28:56

您可以在编程指南附录中找到有关驱动程序API的相关信息,但简短的版本如下:

  • cuCtxCreate充当第一个cudaSetDevice调用(也就是说,它在驱动程序上下文堆栈上创建上下文)
  • cuCtxPushCurrent()cuCtxPopCurrent()对(或根据您使用的API版本而定)充当任何后续cudaSetDevice调用(也就是说,它推送或选择先前创建的上下文作为所有后续cudaSetDevice调用的活动上下文,直到上下文从驱动程序上下文堆栈中弹出或取消选择为止)。
票数 5
EN

Stack Overflow用户

发布于 2021-11-15 19:56:23

实际上,cudaSetDevice()并不完全像创建来检索上下文,就像调用了cuCtxCreate()一样。这是非常相似的,但是CUDA运行时API使用的是一个特殊的上下文。此上下文称为设备的主上下文。有用于处理此特殊上下文的特定驱动程序API函数

代码语言:javascript
运行
复制
CUresult cuDevicePrimaryCtxGetState ( CUdevice dev, unsigned int* flags, int* active );
CUresult cuDevicePrimaryCtxRelease ( CUdevice dev );
CUresult cuDevicePrimaryCtxReset ( CUdevice dev );
CUresult cuDevicePrimaryCtxRetain ( CUcontext* pctx, CUdevice dev );
CUresult cuDevicePrimaryCtxSetFlags ( CUdevice dev, unsigned int  flags );

那么,为什么您想要实现cudaSetDevice()的等效化,这将涉及(忽略错误检查)这样的事情:

代码语言:javascript
运行
复制
CUcontext* primary_context;
cuDevicePrimaryCtxRetain(&primary_context, device_id);
cuCtxSetCurrent(primary_context);

备注:

  • 您应该在某个时候调用function函数来减少引用计数;但是--不要在没有设置另一个当前上下文的情况下这样做。
  • 您可以替换-替换-替换当前上下文,也可以推送并最终从一个上下文堆栈中弹出当前上下文。替换在堆栈的顶部工作(所以它就像pop,然后推送)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18321493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档