显卡/GPU是具体干活的芯片,其从host端拿命令和数据。显卡驱动,
分内核态和用户态两部分。内核态驱动只管将用户态驱动发过来的命令和数据准备好,
通知GPU来拿,利用环形fifo来下发命令和数据指针,并追踪命令的完成状态。
用户态部分,负责对shader程序的编译,编译成GPU的二进制代码指令。
OS提供的D3D,OpenGL等函数库,屏蔽底层不同显卡的差异。
上层程序比如游戏,在准备好对应的模型、贴图纹理、着色器程序等数据之后,调用统一的D3D/OpenGL接口发起绘制请求,D3D则调用显卡用户态驱动提供的回调函数将对应的数据传递给后者,后者进行运行时编译生成底层代码,然后传递给内核态驱动,内核态驱动将命令和数据发送给GPU。
至于GPU怎么算的,那就是完全另外一回事了。
那么,CUDA又是什么呢。CUDA就是通用计算,游戏让GPU算的是一堆像素的颜色,而GPU完全可以算其他任何运算,比如大数据量矩阵乘法等。
同样,程序准备好对应的数组,以及让GPU如何算这些数组的描述结构(比如让GPU内部开多少个线程来算,怎么算,之类),这些数据和描述,都要调用CUDA库提供的函数来传递给CUDA,CUDA再调用显卡用户态驱动对CUDA程序进行编译,后者再调用内核态驱动将命令以及编译好的程序数据传送给GPU,算。
CUDA,就是相当于一个专门与通用程序而不是图形程序对接的库,那么它的角色和地位与D3D/OpenGL在系统架构层次中是齐平的。
cudnn,是针对深度卷积神经网络的加速库
显卡驱动版本
首先,最底层的是显卡驱动,不管是玩游戏还是做并行加速计算,都是必须装的。
不管是玩游戏还是用于并行计算,显卡驱动一定要使用最新的。通常新版本的显卡驱动应该能支持当前最高支持CUDA版本以下的所有版本,所有要关注显卡驱动能支持的最高CUDA版本。
获得显卡驱动能支持的最高cuda版本,有两个方法,一是参考显卡驱动的Release Notes,其中会有能支持的CUDA最高版本。
显卡驱动版本与CUDA版本对应关系
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
CUDA版本
CUDA版本选择要看其上层库的需求,比如TensorFlow,还有编译环境的需求,比如VisualStudio等。可以同时安装多个(参考)
下载地址:https://developer.nvidia.com/cuda-toolkit-archive
tensorflow版本要求:https://tensorflow.google.cn/install/source_windows
cuDNN版本
最后是cuDNN,其实这只是一个基于cuda的库,不需要安装。
cudnn下载地址:https://developer.nvidia.com/rdp/cudnn-download