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