目录
- 前言
- 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 的使用。