聊聊GPU与CPU的区别
作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」
前言
大家好,国庆马上就要过去了,这不偷偷地进来学习了一波。之前小牛学过一点深度学习的知识,做了几个项目,发现CPU来训练就很慢,但是后来用装有GPU的电脑来训练,就明显快的飞起,感觉很神奇。
此时心里有个疑问,CPU造价那么昂贵,性能比起内存、机械硬盘、固态硬盘,快的不是一个数量级的,这个GPU竟然比CPU还要厉害?

让我们一起进入计算机的世界,一起来看看GPU和CPU!
CPU是什么?
CPU,中央处理器(Central Processing Unit)是一台计算机的运算核心和控制核心。CPU、内部存储器和输入/输出设备是电子计算机三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。

GPU是什么?
GPU,图形处理器(Graphic Processing Unit)。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。

GPU与CPU的区别
GPU的由来
计算机对图像进行实时渲染, 一般需要经过图形流水线的过程:顶点处理->图元处理->栅格化->片段处理->像素操作, 期间需要大量的计算,比如 640×480的分辨率的屏幕,为了显示游戏画面,大概有30万个像素需要渲染 ,为了让人眼看到画面动起来,其不像电影一样只需要24帧,至少需要60帧, 即每秒我们需要完成1800 万次单个像素的渲染,每个像素都需要经过图形流水线过程,需要耗费大量资源
随着图像处理对于计算机来说越来越重要,CPU越来越不从心了。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。
另一方面,当芯片的集成度增加后,漏电流也随之增大,但时钟频率的提高有限,而且晶体管的线宽很快就会到达物理极限,因此芯片的性能很难靠减小晶体管线宽来提高。所以工程师们开始想办法在设计上做文章:由于图像渲染的流程是固定的,通过硬件来解决这个问题,那就设计一个不需要考虑CPU的流水线停顿、乱序执行、 分支预测、内存管理、IO等等的各类问题的芯片 ,这其实就是GPU。
并行计算
我们重点再介绍一下CPU并行,即并行计算
并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来共同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。
并行计算可分为时间上的并行和空间上的并行
- 时间上的并行是指流水线技术,采用流水线,可以在同一时间启动两个或两个以上的操作,大大提高计算性能。
- 空间上的并行是指多个处理机并发的执行计算,即通过网络将两个以上的处理机连接起来,达到同时计算同一个任务的不同部分,或者单个处理机无法解决的大型问题。
GPU架构优化
我们来看看,现代的 GPU 为了图形渲染、深度学习上有相较于CPU更强大的性能,做出来哪些设计上的优化:
- 由于GPU不需要考虑CPU的流水线停顿、乱序执行、 分支预测等等的各类问题,只需要流式计算的功能,所以内部许多CPU的电路是不需要的,这样就节约了大量空间
- 由于GPU相比CPU电路就简单多了,这样就可以塞入更多的电路,即更多的"核",他们都是并行的,能够极大提升性能
- 除了塞更多的核,为了更大程度提升GPU的性能,还采用 SIMT技术, 可以把多条数据,交给不同的线程去处理。类似于CPU中,SIMD技术,但是其只能一次性取出了固定 长度的多个数据,放到寄存器里面,用一个指令去执行
- GPU同样采用超线程技术, 当任务计算遇到停顿的时候,调度一些别的计算任务给当前的 ALU,这样就需要保证核心中提供更多的执行上下文给ALU算数计算单元使用
我们再看看下面的CPU和GPU的架构图,想必会有所得
- CPU架构图

- GPU架构图

从架构图我们就能很明显的看出,GPU的构成相对简单,GPU采用流式并行计算模式,每一个计算单元可以单独负责一个像素点,每个像素点不依赖旁边像素点的数据,所以每个计算单元都是独立并行的,不需要控制器额外干涉。CPU的核数一般2,4,8核;但是GPU可以达到上千核
拥有数量非常多的计算单元和超长的流水线,计算能力非常强悍,特别适合处理大规模并发计算
我们需要知道GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。
GPU和CPU的应用场景
小结一下
- CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂,采用的是精兵战术,能力强,但数量少,擅长逻辑控制,串行运算。
- GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境,采用的是人海战术,单个能力弱,但数量众多,擅长的是大规模并发计算。
虽然GPU是为了图像处理而生的,随着时代的发展,现在GPU不仅可以在图像处理领域大显身手,它还被用来深度学习、科学计算、密码破解、数值分析,海量数据处理,金融分析等需要大规模并行计算的领域。
参考资料:
《深入浅出计算机组成原理》
https://blog.csdn.net/shuiyixin/article/details/82915378
https://www.sohu.com/a/201309334_468740
https://zhuanlan.zhihu.com/p/156171120
本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章

聊聊GPU与CPU的区别的更多相关文章
- GPU与CPU的区别
作者:虫子君 链接:https://www.zhihu.com/question/19903344/answer/96081382 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- GPU和CPU的区别
http://blog.csdn.net/conowen/article/details/7256260 这里有几种计算平台的Flynn分类法 GPU是SIMD 多核CPU是MIMD 硬件结果多核处理 ...
- GPU、CPU的异同
一.概念 CPU(Center Processing Unit)即中央处理器,GPU(Graphics Processing Unit)即图形处理器. 二.CPU和GPU的相同之处 两者都有总线和外界 ...
- GPU与CPU
GPU与CPU CPU CPU,也就是中央处理器,结构主要包括控制器(指挥各部分工作).运算器(实现数据加工).寄存器.高缓以及数据/控制/状态总线.计算机的性能很大程度上依赖于CPU,CPU的功能包 ...
- 使用PCAST检测散度以比较GPU和CPU结果
使用PCAST检测散度以比较GPU和CPU结果 并行编译器辅助软件测试(PCAST)是英伟达HPC FORTRAN.C++和C编译器中的一个特性.PCAST有两个用例.一个新的处理器或新的编译程序的部 ...
- 【转】GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
在不少人的心目中,显卡最大的用途可能就只有两点--玩游戏.看电影,除此之外,GPU并没有其他的作用了.但是随着微软IE9的正式发布,不少人突然发现,微软一直提到一个名词:GPU硬件加速,从而也让不少人 ...
- GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
http://blog.csdn.net/maopig/article/details/6803141 在不少人的心目中,显卡最大的用途可能就只有两点——玩游戏.看电影,除此之外,GPU并没有其他的作 ...
- Visual Studio中Debug与Release以及x86、x64、Any CPU的区别
Visual Studio中Debug与Release的区别: 在Visual Studio中,编译模式有2种:Debug与Release.这也是默认的两种方式,在新建一个project的时候,就已经 ...
- YOLO---Darknet下的 GPU vs CPU 速度
YOLO---Darknet下的 GPU vs CPU 速度 目录 一.基础环境 二.安装Darknet-yolo v3 三.CPU下测试 四.GPU下测试 五.测试速度对比结论 正文 一.基础环境 ...
随机推荐
- 三道MySQL联合索引面试题,淘汰80%的面试者,你能答对几道
众所周知MySQL联合索引遵循最左前缀匹配原则,在少数情况下也会不遵循(有兴趣,可以翻一下上篇文章). 创建联合索引的时候,建议优先把区分度高的字段放在第一列. 至于怎么统计区分度,可以按照下面这种方 ...
- React报错之Parameter 'props' implicitly has an 'any' type
正文从这开始~ 总览 当我们没有为函数组件或者类组件的props声明类型,或忘记为React安装类型声明文件时,会产生"Parameter 'props' implicitly has an ...
- grep使用常用操作十五条
grep的全部使用语法参照grep --help,日常工作常用的语法如下:构造数据如下:test001.txt与test002.txt 一.在单个文件中查询指定字符串 grep abc test01/ ...
- KingbaseES V8R3 shared_buffer占用过多导致实例崩溃
背景 有这样一个案例.客户备库意外宕机,从集群日志只看出发生了主备切换,备库一直持续恢复备库没有成功,从数据库日志看到如下报错: terminating connection because of c ...
- 【Vue学习笔记】—— vuex的语法 { }
学习笔记 作者:o_Ming vuex Vuex ++ state ++ (用于存储全局数据) 组件访问 state 中的全局数据的方式1: this.$store.state.全局数据 组件访问 s ...
- 让Python更优雅更易读(第二集)
友情链接 让Python更优雅更易读(第一集) 1.装饰器 1.1装饰器特别适合用来实现以下功能 运行时校验:在执行阶段进行特定校验,当校验通不过时终止执行. 适合原因:装饰器可以方便地在函数执行前介 ...
- DFS算法-求集合的所有子集
目录 1. 题目来源 2. 普通方法 1. 思路 2. 代码 3. 运行结果 3. DFS算法 1. 概念 2. 解题思路 3. 代码 4. 运行结果 4. 对比 1. 题目来源 牛客网,集合的所有子 ...
- 面试突击82:SpringBoot 中如何操作事务?
在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现. 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法: 使用 Tr ...
- haodoop企业优化
MapReduce 跑的慢的原因 MapReduce程序效率的瓶颈在于两点 计算机性能 CPU,内存,磁盘健康,网络 I/O操作优化 数据倾斜 Map和Reduce数设置不合理 Map运行时间太长,导 ...
- PHP获取当前周一、周末时间等(持续更新)
获取周一和周日的日期 $week = date('w') == 0 ? 7 : date('w'); $Sunday = strtotime('today -' . ($week - 1) . 'da ...