例如cudaMemcpy和cuMemcpy?我可以看到函数定义不同,但我的意思是API。为什么api从cu...
开始,一个以cuda...
开头?应该何时使用每个API?
答案 0 :(得分:10)
方法名称以cu...
开头的API就是所谓的驱动程序API 。方法名称以cuda...
开头的API是运行时API 。
最初(直到CUDA 3.0)API已完全分离。粗略的分类是:Runtime API更简单,更经济。 Driver API适用于更复杂的“低级”编程(可能还有库开发)。
从CUDA 3.0开始,两个API都可以互操作。这意味着,例如,当您使用cuMemAlloc
为驱动程序API分配内存时,您也可以在运行时API调用中使用相同的内存,例如cudaMemcpy
。
主要的实际区别在于,在Runtime API中,您可以使用特殊的kernel<<<...>>>
启动语法,而在Driver API中,您可以将CUDA程序加载为“模块”(使用{{1}等方法以CUBIN文件或PTX文件的形式给出,并使用cuModuleLoad
以编程方式启动这些内核。
事实上,我认为对于CUDA程序的最大部分,差异可以忽略不计:几乎所有其他功能(内核/模块处理除外)都可以在两个 API中使用,并且差不多两者都相等。这指的是方法(cuLaunchKernel
和cuMemcpy
等,以及结构cudaMemcpy
和CU_event
等。)
可以在涉及关键字“CUDA Runtime Driver API”的网络搜索中找到更多信息,例如https://devtalk.nvidia.com/default/topic/522598/what-is-the-difference-between-runtime-and-driver-api-/