CUDA驱动程序API等效于cudaSetDevice

时间:2013-08-19 19:22:39

标签: c cuda

CUDA驱动程序的API等效于运行时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可以使用

完成
cudaSetDevice(device_no);
MPI_init();

但是,我不想使用对CUDA运行时的调用,因为我的应用程序的其余部分纯粹是使用驱动程序API,而且我还想避免链接到运行时。

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

1 个答案:

答案 0 :(得分:3)

您可以在编程指南的附录H中找到有关此内容的信息,但简短版本是:

  • cuCtxCreate充当第一个 cudaSetDevice调用(即在驱动程序上下文堆栈上创建上下文)
  • cuCtxPushCurrent()cuCtxPopCurrent()对(或cuCtxSetCurrent取决于您使用的API版本)充当任何后续cudaSetDevice调用(即推送或选择先前创建的上下文将成为所有后续API调用的活动上下文,直到上下文从驱动程序上下文堆栈弹出或取消选择)