• 聊聊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)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来共同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。

    并行计算可分为时间上的并行空间上的并行

    1. 时间上的并行是指流水线技术,采用流水线,可以在同一时间启动两个或两个以上的操作,大大提高计算性能。
    2. 空间上的并行是指多个处理机并发的执行计算,即通过网络将两个以上的处理机连接起来,达到同时计算同一个任务的不同部分,或者单个处理机无法解决的大型问题。

    GPU架构优化

    我们来看看,现代的 GPU 为了图形渲染、深度学习上有相较于CPU更强大的性能,做出来哪些设计上的优化:

    1. 由于GPU不需要考虑CPU的流水线停顿、乱序执行、 分支预测等等的各类问题,只需要流式计算的功能,所以内部许多CPU的电路是不需要的,这样就节约了大量空间
    2. 由于GPU相比CPU电路就简单多了,这样就可以塞入更多的电路,即更多的"核",他们都是并行的,能够极大提升性能
    3. 除了塞更多的核,为了更大程度提升GPU的性能,还采用 SIMT技术, 可以把多条数据,交给不同的线程去处理。类似于CPU中,SIMD技术,但是其只能一次性取出了固定 长度的多个数据,放到寄存器里面,用一个指令去执行
    4. GPU同样采用超线程技术, 当任务计算遇到停顿的时候,调度一些别的计算任务给当前的 ALU,这样就需要保证核心中提供更多的执行上下文给ALU算数计算单元使用

    我们再看看下面的CPU和GPU的架构图,想必会有所得

    1. CPU架构图

    1. GPU架构图

    从架构图我们就能很明显的看出,GPU的构成相对简单,GPU采用流式并行计算模式,每一个计算单元可以单独负责一个像素点,每个像素点不依赖旁边像素点的数据,所以每个计算单元都是独立并行的,不需要控制器额外干涉。CPU的核数一般2,4,8核;但是GPU可以达到上千核
    拥有数量非常多的计算单元和超长的流水线,计算能力非常强悍,特别适合处理大规模并发计算

    我们需要知道GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。

    GPU和CPU的应用场景

    小结一下

    1. CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂,采用的是精兵战术,能力强,但数量少,擅长逻辑控制,串行运算。
    2. GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境,采用的是人海战术,单个能力弱,但数量众多,擅长的是大规模并发计算。

    虽然GPU是为了图像处理而生的,随着时代的发展,现在GPU不仅可以在图像处理领域大显身手,它还被用来深度学习、科学计算、密码破解、数值分析,海量数据处理,金融分析等需要大规模并行计算的领域。

    参考资料:
    《深入浅出计算机组成原理》
    https://blog.csdn.net/shuiyixin/article/details/82915378
    https://www.sohu.com/a/201309334_468740
    https://zhuanlan.zhihu.com/p/156171120


    本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章

  • 相关阅读:
    IoC含义介绍(Spring的核心思想)
    json对象中嵌套一个json字符串,python如何生成带有转义字符的json的字符串?
    【springboot】手写SpringBoot核心流程
    Ajax,json
    基于FME实现地铁路径规划
    【java基础】字符串和日期转化
    LC516. 最长回文子序列
    为你的项目搭建sentry并且通过企微推送
    iview表格实现的编辑和expand功能
    排序算法-冒泡排序
  • 原文地址:https://blog.csdn.net/qq_41603102/article/details/127726596