CUDARuntime&CUDADriver

今天我们来讲解一下CUDA当中,Runtime和Driver的联系与区别.

上图表示了CUDA程序调用中间API的层次结构和所处设备情况. 可以看出,CUDA提供的接口分三个层次: CUDA Library, CUDA Runtime 和CUDA Driver. 而我们的程序可以在任意一个层次上调用CUDA.层次最高的Library自不必多言,诸如cudnn等. Driver API与Runtime API相比, 前者更接近底层硬件, 因此相对更难编写, 但也提供了对GPU的更多控制功能. 而Runtime则是建立在Driver上的, 它里面的接口实际都可以拆解为Driver的接口. 两者之间并没有显著的性能差异, 但接口相互排斥,不能同时调用. 相比之下,Runtime抽象层次更高,更容易编写. 因此可以由Runtime实现的功能, 推荐使用Runtime进行编写. CUDA driver相比runtime需要做显式的device初始化, 以及context、module的管理, 这些概念在runtime中是不存在, 也是不希望用户关心的. 同时CUDA driver API也是“语言无关的”, 因为它只需要处理cubin对象. 总结一下, 只有CUDA driver API可以做的事:
  • CUDA 显式的初始化
  • 获取一些device的信息, 比如blcok中最大线程数量, 甚至还有video memory的频率等等, 具体的可以查看enum CUdevice_attribute, 目前有超过100个attribute. 还可以* 获取GPU的内存大小, compute-capable等
  • 获取目前driver支持的最新CUDA版本
  • 管理Context, 包括创建, 销毁等一系列操作
  • 管理module

参考资料

[1] 浅谈Cuda driver API-zhihu.com
[2] Professional CUDA C Programming.

posted @ 2023-03-28 19:59  LinXiaoshu  阅读(317)  评论(0)    收藏  举报