为什么我应该使用CUDA驱动程序API,在哪些情况下我不能使用CUDA Runtime API(比Driver API更方便)?
答案 0 :(得分:8)
运行时API是一种比驱动程序API更高级别的抽象,它通常更容易使用(性能差距应该最小)。驱动程序API是基于句柄的,并提供更高程度的控制。相反,运行时API更易于使用(例如,您可以使用kernel<<<>>>
启动语法)。
&#34; 更高程度的控制&#34;意味着使用驱动程序API,您必须以更详细的方式处理模块初始化和内存管理,但这允许您执行更多操作,例如禁用内核代码的驱动程序JIT优化:
CU_JIT_OPTIMIZATION_LEVEL - 应用于生成的代码(0 - 4)的优化级别,其中4是默认和最高级别的优化。 选项类型:unsigned int
目前无法通过运行时API的代码实现此目的。更好的控制程度意味着你可能会破坏或减慢事情,如果你不知道它们是什么,就不要使用它。
您通常应该只在应用程序中使用运行时API或驱动程序API,但使用较新的CUDA版本,运行时API代码可以与驱动程序API代码和平共存(http://docs.nvidia.com/cuda/pdf/CUDA_C_Programming_Guide.pdf)
应用程序可以将运行时API代码与驱动程序API代码混合使用。
答案 1 :(得分:3)
添加并扩展@Marco的优秀答案。驱动程序API提供的一个主要功能是在运行时加载内核。这由驱动程序API的模块部分介绍,这里是概述:
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#module
使用运行时API,所有内核都会在初始化期间自动加载,并且只要程序运行就会保持加载状态。使用驱动程序API,程序员可以明确控制加载和卸载内核。例如,后者可用于从因特网下载更新的内核版本。另一个用途是仅保留当前相关的模块,即使这很少是一个问题,因为相对于程序的其余部分,内核通常很小。
[更新:删除不相关的东西]