如何创建CUDA上下文?

如何创建CUDA上下文?,cuda,cuda-context,Cuda,Cuda Context,如何创建CUDA上下文? CUDA的第一次调用很慢,我想在启动内核之前创建上下文。使用运行时API:cudaDeviceSynchronize,cudaDeviceGetLimit,或者任何实际访问上下文的东西都应该可以工作 我很确定您没有使用驱动程序API,因为它不会进行那种延迟初始化,但为了其他人的利益,驱动程序调用将是cuCtxCreate强制运行时API上下文建立的标准方法是调用cudaFree(0)。如果您有多个设备,请使用要在其上建立上下文的设备的ID调用cudaSetDevice(

如何创建CUDA上下文?
CUDA的第一次调用很慢,我想在启动内核之前创建上下文。

使用运行时API:
cudaDeviceSynchronize
cudaDeviceGetLimit
,或者任何实际访问上下文的东西都应该可以工作


我很确定您没有使用驱动程序API,因为它不会进行那种延迟初始化,但为了其他人的利益,驱动程序调用将是
cuCtxCreate

强制运行时API上下文建立的标准方法是调用
cudaFree(0)
。如果您有多个设备,请使用要在其上建立上下文的设备的ID调用
cudaSetDevice()
,然后
cudaFree(0)
建立上下文


编辑:请注意,从CUDA 5.0开始,上下文建立的试探法似乎略有不同,
cudaSetDevice()
本身在设备上建立上下文,只要它被调用。因此,显式的
cudaFree(0)
调用不再是必需的(尽管它不会损害任何东西)。

我使用Library openCV,第一次调用很慢。我可以在我的应用程序中选择设备,但我希望在启动应用程序时初始化Cuda的上下文。我尝试cudaDeviceSynchronize,但不起作用。您确定在这种情况下它实际上是上下文创建吗?这在大多数硬件上都非常快。OpenCV可能(此处猜测)正在执行一个大型memcpy,而预初始化的上下文对此没有帮助。在OpenCV常见问题解答中:“这是因为初始化开销。在第一次GPU函数调用时,Cuda运行时API被隐式初始化。此外,还编译了一些GPU代码(即时编译)对于第一次使用时的视频卡。因此,对于性能度量,有必要执行虚拟函数调用,然后才执行时间测试。如果应用程序仅运行一次GPU代码非常关键,则可以使用编译缓存,该缓存在多次运行时保持不变。有关详细信息,请阅读nvcc文档(CUDA_DEVCODE_缓存环境变量)。”