聊聊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下测试 五.测试速度对比结论 正文 一.基础环境 ...
随机推荐
- mybatisplus使用xml
一.配置xml路径 mybatis-plus: mapper-locations: classpath:mapper/*.xml 二.编写Mapper里面的方法 public interface Us ...
- 从new File("")到jdk源码
1. 概述 今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码. //获取当前工作路径 File file = new File( ...
- JS/java实现QQ空间自动点赞
使用方法: 1:进入QQ空间 2:复制下面代码 3:按F12或右键审查元素 进入控制台 也就是console 4:粘贴 回车键 喝口水 5:如果嫌慢的话可以 修改这段代码. window.setI ...
- VS2019 Community社区版登录提示:我们无法刷新此账户的凭证 解决方法
最正确的方式: 1.点击 帮助-->发送反馈-->报告问题 2.点击 检查新的许可证 ,即可登陆成功 3.如果提示:无法下载或者下载失败. 4.那么就需要在左边 账户选项 中将 嵌入式We ...
- Java第一篇:为什么是接口?
好家伙, 写了一道Java作业: 一道简单的接口练习题 而答案也比较简单 public class Demo1 { public static void main(String[] args ...
- std::atomic和std::mutex区别
std::atomic介绍 模板类std::atomic是C++11提供的原子操作类型,头文件 #include<atomic>.在多线程调用下,利用std::atomic可实 ...
- php统计IP PV和今日访问量统计方法
php引用,在wordpress主题中 $getroot=$_SERVER['DOCUMENT_ROOT']; require_once("$getroot/countstart.php&q ...
- vue3+three.js实现疫情可视化
前言 自成都九月份以来疫情原因被封了一两周,居家着实无聊,每天都是盯着微信公众号发布的疫情数据看,那种页面,就我一个前端仔来说,看着是真的丑啊!(⊙_⊙)?既然丑,那就自己动手开整!项目是2022.9 ...
- pod(一):Kubernetes(k8s)创建pod的两种方式
目录 一.系统环境 二.前言 三.pod 四.创建pod 4.1 环境介绍 4.2 使用命令行的方式创建pod 4.2.1 创建最简单的pod 4.2.2 创建pod,指定镜像下载策略 4.2.3 创 ...
- Java SE 四大内部类
内部类 1.成员内部类 调用成员内部类 //在外面的类的最后,写一个方法,调用成员内部类(创建对象,在访问) class Outer08{ class Inner08{ //成员内部类 public ...