运行时API函数 cudaSetDevice 的CUDA驱动程序API等效于什么?
cudaSetDevice
我正在查看驱动程序API,但找不到等效的函数。我能做的是
cuDeviceGet(&cuDevice, device_no); cuCtxCreate(&cuContext, 0, cuDevice);
这不是等价的,因为除了设置设备之外,它还创建了一个上下文。运行时API cudaSetDevice 本身并不创建上下文。在运行时API中,CUDA上下文是通过第一个CUDA调用隐式创建的,该调用要求设备上的状态。
这个问题的背景: CUDA感知的MPI (MVAPICH2 1.8/9)初始化要求在调用 MPI_init 之前设置CUDA设备。使用CUDA运行时API,可以使用
MPI_init
cudaSetDevice(device_no); MPI_init();
但是,我不想使用对CUDA运行时的调用,因为我的应用程序的其余部分完全是使用驱动程序API,我希望避免也链接到运行时。
在MPI初始化之前创建上下文有什么问题?原则上没什么。只是想知道驱动程序API中是否有一个等价的调用。
发布于 2013-08-19 20:28:56
您可以在编程指南附录中找到有关驱动程序API的相关信息,但简短的版本如下:
cuCtxCreate
cuCtxPushCurrent()
cuCtxPopCurrent()
发布于 2021-11-15 19:56:23
实际上, cudaSetDevice() 并不完全像创建来检索上下文,就像调用了 cuCtxCreate() 一样。这是非常相似的,但是CUDA运行时API使用的是一个特殊的上下文。此上下文称为设备的 主上下文 。有用于处理此特殊上下文的 特定驱动程序API函数 :
cudaSetDevice()
cuCtxCreate()
CUresult cuDevicePrimaryCtxGetState ( CUdevice dev, unsigned int* flags, int* active );