关于CPU 和 GPU
*处理器(CPU,Central Processing Unit)
是电子计算机的主要设备之一,电脑中核心配件。主要功能是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行的指令的核心部件。*处理器主要包括两部分,即控制器、运算器,其中还包括高速缓冲存储器以及实现它们之间联系的数据,控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。*处理器的功效主要为处理指令,执行操作,控制时间,处理数据。
在计算机体系结构中,CPU是对计算机的所有硬件资源(如存储器、输入输出单元)进行控制调配、执行通用运算的核心硬件单元。CPU是计算机的运算和控制核心。计算机系统中的所有软件层的操作,最终都将通过指令集映射为CPU操作。
图形处理器(Graphics Processing Unit)
图形处理器,又称显卡核心、视觉处理器、显示芯片,使一种专门在个人电脑,工作站,游戏机和一些移动设备(如平板电脑,智能手机等)上做图像和图形相关运算工作的微处理器。GPU是显卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时GPU所采用的核心技术。
两者的区别与联系
CPU和GPU的区别产生于两者的设计目标不同(最初用来处理的任务不同),它们分别针对两种不同的场景:一个是通用计算,一个是专用计算。CPU主要负责操作系统和应用程序,GPU主要负责与显示相关的数据处理。
CPU需要很强的通用性来处理各种不同类型的数据,同时又要逻辑判断又会引入大量的分支跳转和中断处理。这些都是的CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖关系的大规模数据和不需要被打断的纯净的计算环境。
两者架构图如下:
CPU基于低延时的设计
CPU有强大的ALU(算数运算单元),它可以在很少的时间内完成算数运算。同时大的缓存也可以降低延时。保存更多的数据放在缓存里面,当需要访问的这些数据,只要是之前已经访问过的,如今直接在缓存里取即可。不仅如此,它还具有复杂的逻辑控制单元:当程序含有多个分支的时候,它通过提供分支预测的能力来降低延时。
GPU是基于大的吞吐量设计。
GPU的特点是有很多的ALU和很少的cache,缓存的目的不是保存后面需要访问的数据。这点和CPU不同,而是为thread服务。如果有很多线程需要访问同一个数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据保存在dram中而不是cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候是数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。尽管如此,但GPU却有着非常多的ALU和非常多的thread。为了平衡内存延时的问题,我们可以充分利用多的ALU特性来达到一个非常大的吞吐量的效果。尽可能多的分配多的Threads。通常看来GPU ALU会有非常多的pipeline就是因为这个。
如架构图所示:
CPU中30%用在了控制单元,且各个单元还算均衡;而GPU的偏科就有点严重了,80%都用在了计算单元。正是这样区别,导致了CPU精于控制和复杂运算,而GPU精于简单而重复的运算。此外还有一个最大的区别就是:CPU是顺序执行运算,而GPU是可以大量并发的执行运算,通俗的说就是CPU做的事情是一件一件来做,而GPU是很多事情同时做。
借用知乎上某大神的说法,就像你有个工作需要计算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已;而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?
最后借助B站大学趣味一下GPU和CPU的学习(Click this !)
Jolly
补给站(Pokestop):
- DRAM(动态随机存取存储器):DRAM只能将数据保持很短的时间。为了保存数据,DRAM采用电容存储,所以系需要隔一段时间刷新(预充电)一次。如果存储单元没有被刷新,存储信息就会丢失(关机就会丢失数据)。主要用于系统内存。
- SRAM(静态随机存取存储器):SRAM是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据,速度快,但是集成度低。主要用于CPU与主存之间的高速缓存。
- Cache(高速缓冲存储器):Cache通常使用昂贵但较快速的SRAM技术(通常认为cache是静态随机存储器)。在计算机存储系统的层次结构中,介于cpu和主存储器之间的高速小容量存储器(主存属于DRAM,比如pc上面的内存条,相对SRAM慢一些)。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。高速缓冲存储器最重要的技术指标是它的命中率。Cache作为主存局部区域的副本,用来存放当前活跃的程序和数据,它利用程序运行的局部性,把局部范围的数据从主存复制到Cache中,使CPU直接高速从Cache中读取程序和数据,从而解决CPU速度和主存速度不匹配的问题。