cuInit(0)不再需要了吗?

时间:2016-07-27 10:23:00

标签: c++ cuda

我目前正在编写一个应用程序来传输openGL内容,因此使用CUDA和NVidias NVenc-API。我注意到调用cuInit(0) - 根据许多教程,这应该作为初始化Cuda的第一次调用来完成,并不会改变我的Cuda内核的成功。所以无论我是否在调用它,程序都会在两种情况下运行。

他们改变了吗?我正在寻找一些信息,但无法找到任何相关信息。

谢谢!

更多信息:

第一步是使用cudaSetDevice() - 运行时API创建Cuda设备。 第二步,使用cuCtxCreate() - Driver API创建上下文。 在此之后,我可以使用带有通过cudaMalloc()分配的cuda数组的三重chevron语法启动内核。

1 个答案:

答案 0 :(得分:1)

如果您的代码中的第一个调用是cudaSetDevice(),而您的CUDA版本是CUDA 4或更新版本,则会隐式建立上下文,并且不需要执行任何其他操作使CUDA运行时API会话正常工作。

之后你应致电cuCtxCreatecuInit。如果你真的要求同时使用运行时和驱动程序API(并且它听起来不像你那样),那么有一种supported and documented方法可以实现。经验法则是使用 驱动程序API 运行时API,但不能同时使用两者,如果您没有理由使用驱动程序API,然后不要使用它。运行时API更简单,更简洁,更简洁。