目录
- 前言
- 1. Driver API概述
- 总结
前言
杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记
本次课程学习精简 CUDA 教程-Driver API 概述
课程大纲可看下面的思维导图

1. Driver API概述
对于 Driver API 你需要知道:
- CUDA Driver 是与 GPU 沟通的驱动级别底层 API
- 对 Driver API 的理解,有利于理解后续的 Runtime API
- CUDA Driver 随显卡驱动发布,需要与 cudatoolkit 分开看
- CUDA Driver 对应于 cuda.h 和 libcuda.so
- Driver API 主要知识点是 Context 的管理机制 以及 CUDA 系列接口的开发习惯(错误检查方法),还有内存模型
参考:显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
下图很清楚的展示了 Driver API 和 Runtime API 以及与其它概念之间的关系

从图中可知我们平时常用的 nvidia-smi 调用的是 Driver API。最开始 Driver API 是与显卡沟通的底层 API,但是人们发现 Driver API 太过底层,由此引入了 Runtime API。从图中可以看出 Runtime API 是基于 Driver API 开发的,我们日常中见到的 cudaMalloc()、cudaMemset()、cudaMemcpy() 都属于 Runtime API。像 cu 开头的如 cuCtxCreate() 就属于 Driver API。
值得注意的是,cuda.h 是 NVIDIA CUDA Toolkit 中的一部分。CUDA Toolkit 是 NVIDIA 提供的用于开发 GPU 加速应用程序的软件开发工具包,其中包含了用于编译和执行 CUDA 程序的各种库和头文件。而 libcuda.so 是 NVIDIA 显卡驱动安装到系统中时随之安装的一个共享库文件。
cuda.h 提供了 CUDA 编程的接口和声明,而 libcuda.so 则是运行库,提供了 CUDA 运行时所需的底层功能和支持。
为什么需要了解 Driver API 呢,直接看更高级的 Runtime API 不就行了吗?
- Driver API 是理解 cudaRuntime 中上下文的关键
- Driver API 只需要做到理解 context 即可,知道它的存在就行
- 开发过程中可能因为对 Driver API 的理解不够,造成上层调试困难
- 对于越底层的 api,做一些了解,有利于高层遇到问题后排查原因
关于 context 有两种:
- 手动管理的 context,
cuCtxCreate()(手动管理,以堆栈方式 push/pop) - 自动管理的 context,
cuDevicePrimaryCtxRetain(自动管理,runtime api 以此为基础)
关于内存,有两大类:
- CPU 内存,称之为 Host Memory。又可以分为 Pageable Memory:可分页内存 + Page-Locked Memory:页锁定内存
- GPU 内存,称之为 Device Memory。又可以分为 Global Memory:全局内存 + Shared Memory:共享内存 + 其它多种内存

关于 context 和内存先有个基本概念就行,后续会详细讲解。
总结
本次课程主要了解 CUDA Driver API 的一些概念,它是一个偏底层的 API,它提供了对 GPU 硬件和驱动程序的底层访问能力。学习了解 Driver API 可以更好的帮助我们后续理解 Runtime API,后续主要从 Context 的管理机制、CUDA 系列接口的开发习惯、内存模型 三个方面来学习 Driver API 的使用。



















