CUDA API cu...和CUDA...之间的区别是什么?

7
例如,cudaMemcpycuMemcpy之类的API?我可以看到函数定义不同,但我的意思是API的一般性质。为什么有一个以cu...开头,另一个以cuda...开头?应该在什么情况下使用每个API?
1个回答

15

方法名以 cu... 开头的API被称为Driver API。方法名以 cuda... 开头的API则是Runtime API

最初(直到CUDA 3.0),这两个API完全分开。一个粗略的分类是:Runtime API更简单、更方便。驱动程序API旨在进行更复杂、“低级”编程(也许是库开发)。

从CUDA 3.0开始,这两个API是互操作的。这意味着,例如,当您使用 cuMemAlloc 在驱动程序API中分配内存时,您还可以在Runtime API调用中使用相同的内存,如 cudaMemcpy

主要的实际区别在于,在Runtime API中,您可以使用特殊的 kernel<<<...>>> 启动语法,而在Driver API中,您可以将CUDA程序作为“模块”(使用像 cuModuleLoad 这样的方法)加载,并使用 cuLaunchKernel 在程序中启动这些核心。

实际上,我认为对于CUDA程序的大部分内容,差异是可以忽略不计的:除了核心/模块处理以外,两个API几乎提供了每种其他功能,并且两者几乎相等。这涉及到方法(例如 cuMemcpycudaMemcpy 等),以及结构体 CU_eventcudaEvent 等)。

更多信息可以通过搜索关键字“CUDA Runtime Driver API”获得,例如在 https://devtalk.nvidia.com/default/topic/522598/what-is-the-difference-between-runtime-and-driver-api-/ 上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接