计算机为什么有GPU和CPU之分

计算机为什么有GPU和CPU之分

PC在刚诞生的时候,其实是没有GPU的,所有的图形计算都由CPU来计算。后来人们意识到CPU做图形计算太慢了,于是他们设计了专门的图形加速卡用来帮忙处理图形计算,再后来,NVIDIA提出了GPU的概念,将GPU提升到了一个单独的计算单元的地位。

计算机为什么有GPU和CPU之分

图片来自于NVIDIA

由于两者面向的计算不同,CPU面对的是人们各种各样的需求,比如你打开一个网页的时候,CPU要负责网络交互,要解析HTML文件和JS脚本,要构建DOM树,要加载各种各样的资源,而最后才轮到GPU的事情:渲染画面并输出。

再举个例子,玩游戏的时候,CPU负责完成游戏程序的逻辑、从硬盘里面加载游戏数据,然后才开始把图形相关的东西挑出来交给GPU做,而游戏中的各种运算还是离不开CPU的帮助,比如常见的NPC,他们怎么运动,还是需要CPU来运算。

从上述两个例子中就可以看出,CPU负责的是各种各样的计算,为了应对这么多种类的计算,它的通用性要求非常高,而这就必定会造成设计上的复杂,比如要支持if-else这类条件语句就要针对性加入一些控制单元。而GPU从诞生开始,面对的就是单一种类的计算,早期的GPU为了更好的应对单一的图形计算任务,采用的是流水管线形式的设计,通过在芯片规模上的大量堆叠,就可以获得在图形处理速度上的提升,从而提供更好的画质,简单粗暴。

所以问题的答案很明显了,在计算上,CPU的通用性更强,什么活都能接,但是速度都不咋地;GPU只能接图形计算这类活,速度非常快,或者也可以接特别写给它来计算的任务,这也就是GPGPU(在图形计算单元上进行的通用计算)的由来。

cpu和GPU的不同之处在于CPU是负责高级逻辑计算,就是类似于我们程序当中的各种循环判断带有逻辑性的计算方式,但是GPU也是负责计算的,但是GPU的计算方式是属于并行的大规模的简单运算就类似于简单的加减乘除一样,这是他们最大的区别。

CPU主要用来处理不同的数据类型,比如各种整型、浮点型、字符型等等的数据处理,同时还要引入各种复杂的逻辑判断跳转等,比方说游戏里面的各种坐标计算,各种动作的处理这都是需要CPU来完成的,这就使得CPU内部设计是十分复杂的,而GPU基本上处理的数据都是重复单一的类型相同,但是需要大量的重复计算,计算不复杂,尤其是类似于各种密码解密一样,比方说前段时间的的挖矿计算,这种计算本身不需要很复杂的计算就是需要大量的并行计算而已。GPU采用了超级多的计算单元和超长的流水线,因为其计算的数据都很简单并且没有复杂的逻辑控制,因此省去了各种的CACHE,由于CPU需要复杂的逻辑运算因此CPU内部被各种缓存设计占据了一定的空间,这就决定了CPU内部的电路复杂性,相比较GPU而言,CPU的运算力只是其中一部分的能力。

可以有这样的一个列子作为很好的说明,GPU的计算都是重复的工作计算量很大,这个就相当于有几万个算术题,都是简单的加减乘除,这些简单的计算小学生就可以解决了,因此你要瞬间完成这些算数量可以雇佣几百个小学生来计算这些题目,而CPU的运算由于比较复杂还要各种逻辑判断,因此让大学生来解答的,因此你让大学生去解答小学生的这些算术题,虽然单个速度快但是对于大学生来说没有任何挑战性,还占用了大学生的资源,因为计算这些用大批量的小学生即可完成的事情,为啥非要用大学生来搞定呢?GPU的计算题目之间并没有什么相关新,也就是说GPU的各个算数单元和流水线之间都是独立运算的只要把运算结果算出来即可,但是CPU不一样,CPU算的每个步骤之间都是有联系内部之间都是有关联的,并不能单独进行计算。

以上各种说明,其实都是解释了GPU和CPU的不同之处,GPU就是计算简单的问题流水线较长,其中的运算单元很多,而CPU就是内复杂有各种缓存设计,有各种的寄存器等等,因为其需要进行各种复杂的逻辑运算,其算力只是其中的一个功能,并不能代表其最终的性能。

发表评论

评论列表

还没有评论,快来说点什么吧~