1. CPU和GPU

CPU和GPU是不一样的计算机设备,CPU作为计算机心脏一直被人们所认知,但是GPU直到最近才被人们重视起来,因为其优异的图片运算性能,或者说矩阵运算性能。

CPU和GPU的关系和差别:

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装

从上图可以看出GPU(图像处理器,Graphics Processing Unit)CPU(中央处理器,Central Processing Unit) 在设计上的主要差异在于GPU有更多的运算单元(如图中绿色的ALU),而Control和Cache单元不如CPU多,这是因为GPU在进行并行计算的时候每个运算单元都是执行相同的程序,而不需要太多的控制。Cache单元是用来做数据缓存的,CPU可以通过Cache来减少存取主内存的次数,也就是减少内存延迟(memory latency)。GPU中Cache很小或者没有,因为GPU可以通过并行计算的方式来减少内存延迟。因此CPU的Cahce设计主要是实现低延迟,Control主要是通用性,复杂的逻辑控制单元可以保证CPU高效分发任务和指令。所以CPU擅长逻辑控制,是串行计算,而GPU擅长高强度计算,是并行计算。 打个比方,GPU就像成千上万的苦力,每个人干的都是类似的苦力活,相互之间没有依赖,都是独立的,简单的人多力量大;CPU就像包工头,虽然也能干苦力的活,但是人少,所以一般负责任务分配,人员调度等工作。

可以看出GPU加速是通过大量线程并行实现的,因此对于不能高度并行化的工作而言,GPU就没什么效果了。而CPU则是串行操作,需要很强的通用性,主要起到统管和分配任务的作用。

https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#thread-hierarchy

2. 什么是CUDA

CUDA(Compute Unified Device Architecture,统一计算架构) 是由NVIDIA所推出的一种集成技术,是该公司对于GPGPU的正式名称。透过这个技术,用户可利用NVIDIA的GeForce 8以后的GPU和较新的Quadro GPU进行计算。亦是首次可以利用GPU作为C-编译器的开发环境。NVIDIA营销的时候,往往将编译器与架构混合推广,造成混乱。实际上,CUDA可以兼容OpenCL或者自家的C-编译器。无论是CUDA C-语言或是OpenCL,指令最终都会被驱动程序转换成PTX代码,交由显示核心计算。

换句话说CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。

在 CUDA 架构下,显示芯片执行时的最小单位是thread。数个 thread 可以组成一个block。一个 block 中的 thread 能存取同一块共享的内存,而且可以快速进行同步的动作。每一个 block 所能包含的 thread 数目是有限的。不过,执行相同程序的 block,可以组成grid。不同 block 中的 thread 无法存取同一个共享的内存,因此无法直接互通或进行同步。因此,不同 block 中的 thread 能合作的程度是比较低的。不过,利用这个模式,可以让程序不用担心显示芯片实际上能同时执行的 thread 数目限制。例如,一个具有很少量执行单元的显示芯片,可能会把各个 block 中的 thread 顺序执行,而非同时执行。不同的 grid 则可以执行不同的程序(即 kernel)。

CUDA(ComputeUnified Device Architecture)是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。

3.什么是cuDNN

NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。

4.CUDA与cuDNN的关系

CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。

官方安装教程
CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html
cuDNN:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows

5.安装

5.1 CUDA的安装

CUDA10的安装包可直接从NVIDIA官网下载。

根据相应的系统选项,我选择的是cuda_10.1.243_426.00_win10.exe(大小为2.3G),安装的时候建议选择自定义而不是“精简”(从下面的英文解释可以看出,其实这里的精简写成完整应该更贴切,它会安装所有组件并覆盖现有驱动,然而我并不想安装全家桶,何况我的官方显卡驱动比它的新)。

双击安装:

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_02

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_03

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_04

配置环境变量

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_05

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_06

查看是否配置成功

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_07

5.2 cuDNN的安装

安装完成之后,还需要下载与CUDA对应的相应版本cuDNN,到下图所示的下载页面,下载完成后,将这个压缩包里的所有文件放到CUDA10安装目录相应文件夹下即可。

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_08

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_09
win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_10
将对应文件夹下的文件 放入C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_11

再添加一个环境变量

添加环境变量:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_12

win10下CUDA和cuDNN的安装(超详细)_CUDA和cuDNN的安装_13

6.参考

7.注意:

用anaconda建了两个MXnet虚拟环境 一个cpu 一个gpu这样是不行的, 必须建一个环境!