我目前正在编写一个应用程序来传输openGL内容,因此使用CUDA和NVidias NVenc-API。我注意到调用cuInit(0)
- 根据许多教程,这应该作为初始化Cuda的第一次调用来完成,并不会改变我的Cuda内核的成功。所以无论我是否在调用它,程序都会在两种情况下运行。
他们改变了吗?我正在寻找一些信息,但无法找到任何相关信息。
谢谢!
更多信息:
第一步是使用cudaSetDevice()
- 运行时API创建Cuda设备。
第二步,使用cuCtxCreate()
- Driver API创建上下文。
在此之后,我可以使用带有通过cudaMalloc()
分配的cuda数组的三重chevron语法启动内核。
答案 0 :(得分:1)
如果您的代码中的第一个调用是cudaSetDevice()
,而您的CUDA版本是CUDA 4或更新版本,则会隐式建立上下文,并且不需要执行任何其他操作使CUDA运行时API会话正常工作。
之后你应不致电cuCtxCreate
或cuInit
。如果你真的要求同时使用运行时和驱动程序API(并且它听起来不像你那样),那么有一种supported and documented方法可以实现。经验法则是使用 驱动程序API 或运行时API,但不能同时使用两者,如果您没有理由使用驱动程序API,然后不要使用它。运行时API更简单,更简洁,更简洁。