博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一篇:关于GPU+CUDA+cuDNN的理解
阅读量:3978 次
发布时间:2019-05-24

本文共 2288 字,大约阅读时间需要 7 分钟。

有关GPU、CUDA、cuDNN的理解


文章目录


前言

接触深度学习的小伙伴应该或多或少能够理解,神经网络的学习离不开GPU,那对于利用电脑的CPU还是GPU来进行神经网络的训练有什么区别呢,这跟cuda和cuDNN又是如何挂钩的呢?刚入门的小伙伴肯定会有这些问题,下面来帮助大家解决这些问题哦。


一、CPU和GPU的区别是什么呢?

这里先附上一张截图(图片来源于cuda tookit文档,都是英文的,想看的小伙伴直接搜就可以了,哈哈):

在这里插入图片描述
下面我就通过这两张图来说明CPU和GPU的区别。
  我们都知道CPU(中央处理器,Central Processing Unit)和GPU(图像处理器,Graphics Processing Unit)在设计上主要是后者拥有更多的运算单元,也就是图中的绿色部分ALU。两者的差异在哪里呢?

  第一点:对于CPU来说,它比GPU拥有更多的Control和Cache单元,我们知道Cache单元是用来做数据缓存的,CPU可以通过Cache来减少存取主内存的次数,也就是减少内存延迟(memory latency)。GPU中Cache很小或者没有,因为GPU可以通过并行计算的方式来减少内存延迟。因此CPU的Cahce设计主要是实现低延迟,Control主要是通用性,复杂的逻辑控制单元可以保证CPU高效分发任务和指令。所以CPU擅长逻辑控制,是串行计算,而GPU擅长高强度计算,是并行计算。举个简单的例子,GPU就像是工厂里面流水线上的员工,相互独立,各自分工,但是呢人多力量大,哈哈;反之CPU就像每个车间班长,虽然也会参与干活,但是人少,一般只负责任务分配,人员调度等任务,其实这些知识都是计算机组成原理里面的,详细的还会涉及到CPU工作原理等,内存如何分配,对于小白可能会有些生涩哈,只能努力去理解啦。

  第二点:对于GPU而言,提供比 CPU 高得多的指令吞吐量和内存带宽。许多应用程序利用这些更高的功能在 GPU 上比在 CPU 上运行得更快。其他计算设备(如 FPGA)也非常节能,但提供的编程灵活性比 GPU 低得多。GPU 和 CPU 之间的这种能力差异之所以存在,是因为它们的设计目标不同。虽然 CPU 旨在以尽可能快的速度执行称为线程的一系列操作,并且可以并行执行几十个这样的线程,但 GPU 旨在并行执行数千个线程(摊销较慢的单线程性能以实现更大的吞吐量)。GPU 专用于高度并行计算,因此设计为将更多晶体管用于数据处理而不是数据缓存和流量控制将更多晶体管用于数据处理,例如浮点计算,有利于高度并行计算;GPU 可以通过计算隐藏内存访问延迟,而不是依靠大数据缓存和复杂的流控制来避免长时间的内存访问延迟

一大堆文字看的是不是有点晕,哈哈。写的都晕啦,没办法,继续往下。


二、为什么要用GPU来训练神经网络呢?

在解决这个问题之前大家要首先对神经网络有一定的了解才行,因为神经网络的训练或者说计算机制是与GPU的运行原理相结合的。

  第一点:神经网络是高度并行的。我们知道神经元的每一层都是由一个个神经元组成,每个神经元彼此独立,层与层的神经元又互相关联,在并行计算中,高度并行任务是指将整个任务分割成一组较小的任务以并行计算的任务。高度并行任务是那些容易看到一组小任务彼此独立的任务,由于这个原因,神经网络也就是高度并行的,这也正符合GPU的高度并行性计算特性。
  第二点:神经网络的训练是需要设计大量参数的,激活值、权重等等,并且这些参数由于每次迭代训练都需要更新,会造成很大的缓冲,这也使得内存带宽的使用占比会很大。而GPU一个显著的优势就是拥有极高的内存带宽。并且呢神经网络的训练也不涉及大量的分支运算与复杂的控制指令,所以呢更适合在GPU上训练。


三、什么是cuda?

CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 同时也是是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,这里大家就用该明白了吧,cuda是只能应用在NVIDIA的GPU上的,所以小伙伴们想使用的cuda做计算先看看自己的电脑显卡是NVIDIA的还是AMD的。

一般电脑上都是有两张显卡的,一张是CPU自带的核芯显卡,也叫集成显卡;一张就是英伟达的独立显卡,给大家看看我笔记本上显卡类型的:

在这里插入图片描述


四、什么是cuDNN?

cuDNN(CUDA Deep Neural Network library):是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。它强调性能、易用性和低内存开销。如果你要用GPU训练模型,cuDNN不是必须的,但是一般会采用这个加速库


五、cuda和cuDNN的关系

看了很多解释,我这里也总结一个版本的吧。

如果将CUDA看作是一个工作台,cuDNN是基于CUDA的深度学习GPU加速库,它是一个SDK,有了它才能在GPU上完成深度学习的计算,其能够很大程度的把加载到显卡上的网络层数据进行优化计。值得注意的是,它跟我们的CUDA没有一一对应的关系,即每一个版本的CUDA可能有好几个版本的cuDNN与之对应,但一般有一个最新版本的cuDNN版本与CUDA对应更好。

总结

文字有点多,对于想了解或者刚接触的小伙伴应该会有一些帮助的,下一篇我会详细记录下有关cuda的环境配置,如有什么不足或者错误之处欢迎留言指正,虚心求教。

喜欢的小伙伴可以关注一下点个赞哦,哈哈。

转载地址:http://uogki.baihongyu.com/

你可能感兴趣的文章
生成和使用动态链接库和静态链接库…
查看>>
linux工作队列(转)
查看>>
工作队列的初始化(INIT_WORK的参…
查看>>
sysfs and /proc/bus/usb/device
查看>>
linux工作队列(转)
查看>>
跟我一起写udev规则(译)
查看>>
sysfs and /proc/bus/usb/device
查看>>
跟我一起写udev规则(译)
查看>>
USB和sysfs文件系统
查看>>
USB和sysfs文件系统
查看>>
udev(八):实战:使用udevadm修…
查看>>
android开发环境搭建(for 驱动开发…
查看>>
android开发环境搭建(for 驱动开发…
查看>>
android驱动例子(LED灯控制)
查看>>
为Android内核添加新驱动,并添加…
查看>>
利用条件变量实现线程间同步
查看>>
利用条件变量实现线程间同步
查看>>
linux 下 C 程序(进程) 内存布局
查看>>
linux 下 C 程序(进程) 内存布局
查看>>
位字段
查看>>