CUDA运行时可以编译CUDA内核并将其链接到可执行文件中。这意味着您不必在应用程序中分发cubin文件,或者通过驱动程序API处理它们。正如你所指出的,它通常更易于使用。
相比之下,驱动程序API很难编程,但提供了更多的CUDA使用控制。程序员有直接处理初始化,模块加载等
显然更详细的设备信息,可以通过驱动程序API查询不是通过运行时API。例如,设备上可用的空闲内存只能通过驱动程序API查询。
从CUDA程序员指南:
它由两个API组成:
- 一个低级别的API调用CUDA驱动程序API,
- 更高级别的API调用CUDA运行时API,在CUDA驱动程序API的顶层实现 。
这些API是互斥的:一个应用程序应该使用其中一个或者使用 。
CUDA运行时通过提供隐式的 初始化,上下文管理和模块管理来简化设备代码管理。通过NVCC生成的C主机代码 基于CUDA运行时(见第4.2.5节),所以 应用链接到这个代码必须使用CUDA运行时API。相比之下,CUDA驱动程序API需要更多的代码,更难编程和调试,但提供了更好的控制级别,并且与语言无关,因为它只处理cubin对象的 (请参阅第4.2.5节) 。特别是,它是使用CUDA驱动程序API 配置和启动内核比较困难,因为执行 配置和内核参数必须使用显式函数调用来指定 ,而不是在4.2.3所述的执行配置语法。此外,设备 仿真(见4.5.2.9)不使用CUDA驱动程序API的工作。
API之间没有明显的性能差异。你的内核如何使用内存以及它们在GPU上的布局(经线和块)将会产生更为明显的效果。
来源
2008-10-31 18:55:14
mch
一个驱动程序API的优势将是编译器开发人员添加其他语言编写内核支持,C. – 2009-10-21 22:12:37