首页 炼丹房 帖子详情
为什么GPU比CPU快?
收藏
快速回复
炼丹房 文章新手上路 16935 106
为什么GPU比CPU快?
收藏
快速回复
炼丹房 文章新手上路 16935 106

作者:毛大闲

来源:https://mbb.eet-china.com/blog/3887969-407803.html

一、前言

  近几年深度学习在各领域大显神威,而”GPU加速"也得到了越来越多的篇幅,似乎任何程序只要放到GPU上运行那速度就是杠杠的。GPU代替CPU计算已成了大势所趋?我先告诉你结论”那是不可能滴“,然后咱们再来说说”GPU为什么比CPU快“。


二、图形处理,GPU的源起

  GPU是显卡的计算单元,就好比CPU是电脑的计算核心,有时我们直接就把GPU称为显卡。显而易见,GPU从诞生之初就是用来处理图像的。下面我们讲一个简单的例子来说明下为什么图像处理需要用到GPU,而CPU的缺点是什么。

  我们讲一个画面”立体“,其实讲的是画面中对于光影的运用,下图就是一个简单的”圆“。

  当我们给这个圆加上”光影“之后,它就变成了一个球。我们说球要比圆立体的多,这就是光影的作用。

  光影的原理很简单,你需要想象一个远处的”光“,然后在画面上模拟出光照在物体上的明暗变化,计算机中这些明暗变化都是通过”计算“得到的。编程人员只需要输入光源的距离、亮度、被照体的位置,然后通过逐步计算、光影叠加就能得到图像中每一个像素应该显示什么颜色、什么亮度,一个立体画面也就跃然纸上了。

  那么现在问题来了,假设屏幕分辨率为1920*1080,即2073600(207.36万)个像素,游戏中每个像素都需要根据光影参数来计算显示的颜色和明暗。假设一个常见的Intel I5 CPU主频为3.2GHz,即最多每秒可做32亿次运算。但这里的一次运算只是做了一次简单的二进制加减法或数据读取,一个像素的光影计算我们可以假设需要100次运算,即CPU一秒约处理3200万次像素运算,大概15张图片,用专业点的说法,这个游戏流畅度大概是每秒15帧的样子。

  可见使用CPU全力进行图形运算是有点吃力的,更何况CPU还要处理很多键盘指令、游戏后台计算等等。是CPU还不够快吗?假设现在速度翻倍,即每秒64亿次运算似乎也是不够的。其实CPU面临的主要问题是,虽然每一次光影计算都非常简单,但经不住像素太多啦,还都得排队一个一个做。然后工程师们想到“其实任何一个像素的计算与其他像素的计算结果关系不大”,那为啥不多整几个计算核心“并行”计算呢,于是GPU就出现了。

  一个典型的显卡GTX1060,主频是1.5GHz大概是Intel I5一半左右,但是它具备1280个计算核心。每个计算核心每秒可做15亿次运算,1280个核心每秒就是19200亿次运算,那一秒可以处理192亿次像素计算,大概925张图片,是CPU计算能力的61倍!但GPU的特性只能应用于图形计算这种可以并行的任务,若是做普通的串行任务其速度远远不如CPU。

 

三、核心越多越好?

  通过前面的叙述我们都知道了GPU速度“快于”CPU的奥秘在于它有很多的“核”,那能不能这样,我们给CPU也装上1000多个核,那速度岂不是快到飞起?答案是“不得行”。由于制造工艺的原因,CPU内核越多其频率也就越低。其实很容易想到,同步10个人的动作和同步1000个人的动作其难度肯定是不一样的。其次,电脑中大部分的运算都是串行的,即下一个运算要等到上一个运算完毕才能继续,这时候单次运算的速度才是最重要的。

  所以相当长时间以内,CPU+GPU的搭配才是最佳方案。

 

 四、GPU与并行计算

  深度学习与图形处理有一些相通的地方,它需要大量的数据来“训练”模型。比如一个猫图识别AI,你需要提供数以万计的猫图供其“学习”。而每一张猫图的学习又与其他猫图没有先后关系,即你可以同时并行100、1000张猫图的学习,所以GPU在深度学习领域大放异彩。

  实际上GPU编程一直是近年来的热点,作为高效程序员又怎么能不了解一二呢?CUDA是NVIDIA推出的并行计算框架,它囊括了GPU并行计算中所有你需要的组件,只需要简单安装(当然你电脑得是N卡)就可以在C代码中使用它提供的接口进行GPU编程了,当然对于非从业人员来说了解下相关知识也是极好的。

5
收藏
回复
全部评论(106)
时间顺序
没入门的研究生
#83 回复于2020-07
觉得还是“doubi渣渣”同学更了解深入些

此处@doubi渣渣

0
回复
thinc
#84 回复于2020-07
我看这种想法还真是别有的好。 金融是研究分蛋糕的,离蛋糕最近,所以自己分得最多。

适当理财  跑赢通货膨胀

0
回复
thinc
#85 回复于2020-07
有种说法,交易员都是忐忑不安的“自大狂”,哈哈。 。。。一年买车、五年买房、十年买墓地。。。 赚这个钱真心不易。 只是说说,别认真~~

跟赌差不多,只是这个是拿知识来赌

0
回复
thinc
#86 回复于2020-07
我觉得一流的后浪们还是当科学家、实业家的比较好。个人踏实,对国家也更有益。现在经济危机的本质就是金融业太过侵蚀实体经济了。预期收益太高了。钱还没赚到就已经被各种金融手段给分完了,剩下给事业的不多。而且实体一出问题,更是成了空中楼阁。这现在已经演变成社会危机了,导致了世界地区紧张与冲突。
展开

有道理

0
回复
AIStudio810260
#87 回复于2020-07
此处@doubi渣渣

这个概念其实更靠近传统制造业,虽然理论上手机、树莓派都属于边缘端设备,但一般说的不是这些(在这些设备上的部署可以是验证,不是最终落地)。

就比如CV里面那些瑕疵检测的场景吧,往往真实情况是必须瞬间内识别出来,让人或者后面的机器来得及处理,所以如果计算中心在云端,延迟完全受不了;而且生产线上对故障的容忍度非常低,稍微卡一下可能就出严重事故。

所以后来有了边缘计算的概念,我的理解就是把类似瑕疵检测、人脸识别这种能力,部署在一个成本相对更低的设备上。在云端可以做大规模计算,训练模型,只是数据集更新可以是T+1的;然后把模型裁剪、推送到边缘端的设备上,也就是infer这个过程完全在边缘设备进行。如果云端还没训练完,边缘设备就继续用旧的模型去预测。

那种效果非常好、可以快速做人脸识别的场景,应该就是一种特别典型的边缘计算场景,比如度目,现在很多摄像头本身是有计算能力的。还有一种场景可以设想下,如果是自动驾驶,各种突发状况,行驶情况传到云端就是5G也来不及吧。。。

0
回复
没入门的研究生
#88 回复于2020-07
这个概念其实更靠近传统制造业,虽然理论上手机、树莓派都属于边缘端设备,但一般说的不是这些(在这些设备上的部署可以是验证,不是最终落地)。 就比如CV里面那些瑕疵检测的场景吧,往往真实情况是必须瞬间内识别出来,让人或者后面的机器来得及处理,所以如果计算中心在云端,延迟完全受不了;而且生产线上对故障的容忍度非常低,稍微卡一下可能就出严重事故。 所以后来有了边缘计算的概念,我的理解就是把类似瑕疵检测、人脸识别这种能力,部署在一个成本相对更低的设备上。在云端可以做大规模计算,训练模型,只是数据集更新可以是T+1的;然后把模型裁剪、推送到边缘端的设备上,也就是infer这个过程完全在边缘设备进行。如果云端还没训练完,边缘设备就继续用旧的模型去预测。 那种效果非常好、可以快速做人脸识别的场景,应该就是一种特别典型的边缘计算场景,比如度目,现在很多摄像头本身是有计算能力的。还有一种场景可以设想下,如果是自动驾驶,各种突发状况,行驶情况传到云端就是5G也来不及吧。。。
展开

意思就是在云端训练模型,然后把T时间上已经训练的模型复制到前端上推理,同时前端将新的数据发回云端继续训练。一段时间后,更新前端的模型用于改进前端的推理性能。这样云端一直进行着训练优化模型的效果,前端相当于得到了某一个时刻云端的模型的快照。这样理解对不?

0
回复
AIStudio810260
#89 回复于2020-07
意思就是在云端训练模型,然后把T时间上已经训练的模型复制到前端上推理,同时前端将新的数据发回云端继续训练。一段时间后,更新前端的模型用于改进前端的推理性能。这样云端一直进行着训练优化模型的效果,前端相当于得到了某一个时刻云端的模型的快照。这样理解对不?
展开

是吧,之前听专家讲好像是这么给解释的

0
回复
thinc
#90 回复于2020-07
这个概念其实更靠近传统制造业,虽然理论上手机、树莓派都属于边缘端设备,但一般说的不是这些(在这些设备上的部署可以是验证,不是最终落地)。 就比如CV里面那些瑕疵检测的场景吧,往往真实情况是必须瞬间内识别出来,让人或者后面的机器来得及处理,所以如果计算中心在云端,延迟完全受不了;而且生产线上对故障的容忍度非常低,稍微卡一下可能就出严重事故。 所以后来有了边缘计算的概念,我的理解就是把类似瑕疵检测、人脸识别这种能力,部署在一个成本相对更低的设备上。在云端可以做大规模计算,训练模型,只是数据集更新可以是T+1的;然后把模型裁剪、推送到边缘端的设备上,也就是infer这个过程完全在边缘设备进行。如果云端还没训练完,边缘设备就继续用旧的模型去预测。 那种效果非常好、可以快速做人脸识别的场景,应该就是一种特别典型的边缘计算场景,比如度目,现在很多摄像头本身是有计算能力的。还有一种场景可以设想下,如果是自动驾驶,各种突发状况,行驶情况传到云端就是5G也来不及吧。。。
展开

简单点说就是把模型放到更细的场景  缓解中心服务器的压力

0
回复
thinc
#91 回复于2020-07
意思就是在云端训练模型,然后把T时间上已经训练的模型复制到前端上推理,同时前端将新的数据发回云端继续训练。一段时间后,更新前端的模型用于改进前端的推理性能。这样云端一直进行着训练优化模型的效果,前端相当于得到了某一个时刻云端的模型的快照。这样理解对不?
展开

应该就是这个意思 

0
回复
Henry.coder
#92 回复于2020-07

想问个问题,在训练之前把数据feed进来的多线程加速是充分调用的cpu资源还是gpu资源呢?

0
回复
thinc
#93 回复于2020-07
想问个问题,在训练之前把数据feed进来的多线程加速是充分调用的cpu资源还是gpu资源呢?

gpu只是计算,只是计算,只是计算

内存调度靠的CPU

0
回复
Henry.coder
#94 回复于2020-07
thinc #93
gpu只是计算,只是计算,只是计算 内存调度靠的CPU

好的好的,get到了

0
回复
thinc
#95 回复于2020-07
好的好的,get到了

可以去了解下CPU的内部构造 学点操作系统的东西对以后大有利益

0
回复
Henry.coder
#96 回复于2020-07
thinc #95
可以去了解下CPU的内部构造 学点操作系统的东西对以后大有利益

下学期刚好要上计组和操作系统,那看来要好好理解下这些基础了

0
回复
AIStudio810258
#97 回复于2020-07
这个概念其实更靠近传统制造业,虽然理论上手机、树莓派都属于边缘端设备,但一般说的不是这些(在这些设备上的部署可以是验证,不是最终落地)。 就比如CV里面那些瑕疵检测的场景吧,往往真实情况是必须瞬间内识别出来,让人或者后面的机器来得及处理,所以如果计算中心在云端,延迟完全受不了;而且生产线上对故障的容忍度非常低,稍微卡一下可能就出严重事故。 所以后来有了边缘计算的概念,我的理解就是把类似瑕疵检测、人脸识别这种能力,部署在一个成本相对更低的设备上。在云端可以做大规模计算,训练模型,只是数据集更新可以是T+1的;然后把模型裁剪、推送到边缘端的设备上,也就是infer这个过程完全在边缘设备进行。如果云端还没训练完,边缘设备就继续用旧的模型去预测。 那种效果非常好、可以快速做人脸识别的场景,应该就是一种特别典型的边缘计算场景,比如度目,现在很多摄像头本身是有计算能力的。还有一种场景可以设想下,如果是自动驾驶,各种突发状况,行驶情况传到云端就是5G也来不及吧。。。
展开

真得涨姿势了,谢谢大佬~~

0
回复
AIStudio810258
#98 回复于2020-07
thinc #90
简单点说就是把模型放到更细的场景  缓解中心服务器的压力

然后还解决延迟问题。这个我原来就没怎么想到

0
回复
thinc
#99 回复于2020-07
然后还解决延迟问题。这个我原来就没怎么想到

是这么回事

0
回复
AIStudio810260
#100 回复于2020-07
真得涨姿势了,谢谢大佬~~

额,不是大佬,必须是小白。。。还有现在大部分喊边缘计算的公司做的只是把设备电机的那些个电流信号传到web端,就连这都很不稳定,所以AR什么的,看起来还是很需要5G乃至更强基础设施支持的

0
回复
AIStudio810258
#101 回复于2020-07
额,不是大佬,必须是小白。。。还有现在大部分喊边缘计算的公司做的只是把设备电机的那些个电流信号传到web端,就连这都很不稳定,所以AR什么的,看起来还是很需要5G乃至更强基础设施支持的

这么说5G很可能是AI爆发的另一次助力啊,就像上次gpu助力那样,更厉害的量子计算也在路上

0
回复
AIStudio810258
#102 回复于2020-07

地球上的小伙伴都要hold住啊,下次正儿八经的科技革命、经济腾飞、填补坏账就在路上了~~

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户