CUDA简介:(Computed Unified Device Architecture,统一计算架构)是由NVIDIA所推出的一种集成技术,解决的是用更加廉价的设备资源,实现更高效的并行计算问题。
相关:CUDA、GPU均是英伟达(NVIDIA)推出的概念。图形处理器(Graphics Processing Unit, GPU)与中央处理器(Central Processing Unit, CPU)相对,是显卡的核心芯片。而cuda正是nvidia开发的gpu的编程接口。
1、如何查看显卡是否支持cuda?
lspci | grep -i nvidia
13:00.0 VGA compatible controller: NVIDIA Corporation Device 2204 (rev a1)
1b:00.0 VGA compatible controller: NVIDIA Corporation Device 2204 (rev a1)
其中lspic是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。可知,显卡型号为:NVIDIA Corporation Device 2204
2、cuda组件?
cuda包含三大组件,nvidia driver(驱动),toolkit,samples。
1、driver可以和toolkit分开安装,并且同一台主机上两者支持的CUDA版本可以不一样,需保证:driver cuda version >= toolkit cuda version。
nvidia-smi显示的是 driver cuda version,GPU硬件信息。driver包含函数库libcuda.so,该函数库提供对 CUDA driver API 的访问。
2、toolkit包含函数库libcudart.so
,该函数库提供了对 CUDA runtime API 的访问,以及nvcc编译器等。
nvcc命令是toolkit提供。
安装cuda时候,可选择先安装nvidia driver,再安装nvidia cuda,所以driver cuda version、toolkit cuda version可能会不一致。
3、 driver API与runtime API区别?
Driver API有着更灵活的控制,也存在更高的性能的可能性,当然也伴随着更复杂的编程。CUDA driver相比runtime需要做显式的device初始化,以及context、module的管理,这些概念在runtime中是不存在,也是不希望用户关心的
Runtime是Driver的“更高级”的Layer。
编译方面:runtime API使用nvida自己的编译器进行编译,并且可以将CUDA kernel链接到同一个executable中。。而driver API不使用nvidia编译器,通过NVRTC实现编译。
4、CUDA toolkit组件?
cuda toolkit可以通过conda来安装,但是驱动不可。
- Compiler: CUDA-C和CUDA-C++编译器NVCC位于bin/目录中。它建立在NVVM优化器之上,而NVVM优化器本身构建在LLVM编译器基础结构之上。因此开发人员可以使用nvm/目录下的Compiler SDK来直接针对NVVM进行开发。
- Tools: 提供一些像profiler,debuggers等工具,这些工具可以从bin/目录中获取
- Libraries: 下面列出的部分科学库和实用程序库可以在lib/目录中使用(Windows上的DLL位于bin/中),它们的接口在include/目录中可获取。
cudart: CUDA Runtime
cudadevrt: CUDA device runtime
cupti: CUDA profiling tools interface
nvml: NVIDIA management library
nvrtc: CUDA runtime compilation
cublas: BLAS (Basic Linear Algebra Subprograms,基础线性代数程序集)
cublas_device: BLAS kernel interface
… - CUDA Samples: 演示如何使用各种CUDA和library API的代码示例。
可在Linux和Mac上的samples/目录中获得,Windows上的路径是C:\ProgramData\NVIDIA Corporation\CUDA Samples中。在Linux和Mac上,samples/目录是只读的,如果要对它们进行修改,则必须将这些示例复制到另一个位置。 - CUDA Driver: 运行CUDA应用程序需要系统至少有一个具有CUDA功能的GPU和与CUDA工具包兼容的驱动程序。每个版本的CUDA工具包都对应一个最低版本的CUDA Driver,也就是说如果你安装的CUDA Driver版本比官方推荐的还低,那么很可能会无法正常运行。
- CUDA Driver是向后兼容的,这意味着根据CUDA的特定版本编译的应用程序将继续在后续发布的Driver上也能继续工作。通常为了方便,在安装CUDA Toolkit的时候会默认安装CUDA Driver。在开发阶段可以选择默认安装Driver,但是对于像Tesla GPU这样的商用情况时,建议在官方安装最新版本的Driver。
5、 linux系统只可以拥有一个driver cuda,但是可以下载多个cuda toolkit
参考文献:
【1】cuda 的driver API 和 runtime API :https://blog.csdn.net/jslove1997/article/details/113737934
【2】浅谈Cuda driver API:https://zhuanlan.zhihu.com/p/111602648