GPU和CPU的核心区别是什么?

半兽人 发表于: 2023-05-29   最后更新时间: 2023-05-29 17:35:28   1,481 游览

最好通俗易懂一些。

发表于 2023-05-29
添加评论

当涉及到GPU(图形处理器)和CPU(中央处理器)时,可以将其比喻为一支军队中的两种不同类型的士兵。

CPU类似于一名多才多艺的士兵,可以执行各种任务。他们有强大的智力和灵活性,能够管理和执行各种指令,比如计算、决策和控制。他们适合处理有序的任务,比如处理操作系统、运行应用程序和逻辑控制。

GPU则类似于一支高度并行的士兵部队,专注于处理大规模的任务。他们虽然个体能力较弱,但数量庞大且高度协同工作。他们的优势在于同时处理大量的数据,如图形渲染和复杂的并行计算任务。他们能够迅速处理大量数据并实现高效的并行计算。

从内存角度来看,CPU可以将数据存储在自己身边的缓存中,以便快速访问,就像士兵身上携带的行囊。而GPU的核心则依赖于更大容量的全局内存,类似于士兵们共享的资源。

综上所述,CPU和GPU在设计目标、处理方式和内存结构等方面存在差异。CPU像一名多才多艺的士兵,适用于各种任务,而GPU则像一支并行工作的士兵部队,擅长处理大规模的数据并实现高效的并行计算。

GPU(图形处理器)和CPU(中央处理器)是计算机系统中的两种不同类型的处理器,它们具有以下核心区别:

  1. 设计目标和用途:CPU的设计目标是通用计算,它被用于执行广泛的任务,包括操作系统管理、应用程序运行和逻辑控制等。而GPU的设计目标是图形渲染和并行计算,它专注于高效处理图形、图像和大规模并行计算任务。

  2. 架构和核心数量:CPU的架构较为复杂,每个核心通常比较强大,具有较大的缓存和复杂的控制单元。相比之下,GPU的架构相对简化,但在相同的芯片上通常拥有大量的小型核心。这些核心可以同时执行多个任务,从而实现高度并行的计算能力。

  3. 计算方式:CPU的核心更加适合处理顺序任务,它们具有复杂的流水线结构和高度预测分支能力,能够有效执行各种类型的指令。GPU的核心则更适合执行大规模数据并行任务,它们可以同时处理大量数据,通过向量化指令和SIMD(单指令多数据)指令集来提高计算效率。

  4. 内存层次结构:CPU通常具有较大的缓存和高速缓存(L1、L2、L3缓存),以减少数据访问延迟。而GPU的核心通常共享较小的缓存,并依赖于更大容量的全局内存。这是因为GPU的设计目标是处理大量数据,而不需要频繁地访问高速缓存。

总的来说,GPU和CPU在设计目标、核心数量、架构、计算方式和内存层次结构等方面存在显著差异。CPU适用于广泛的通用计算任务,而GPU则更适用于并行计算和图形渲染任务。然而,随着技术的发展,GPU和CPU之间的界限变得模糊,一些新的处理器产品线结合了两者的特点,以满足更广泛的计算需求。

两者的相同之处:两者都有总线和外界联系,有自己的缓存体系,以及数字和逻辑运算单元。一句话,两者都为了完成计算任务而设计。

两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。从结果上导致CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作,如:对每一个顶点进行同样的坐标变换,对每一个顶点按照同样的光照模型计算颜色值。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行。在2003-2004年左右,图形学之外的领域专家开始注意到GPU与众不同的计算能力,开始尝试把GPU用于通用计算(即GPGPU)。之后NVIDIA发布了CUDA,AMD和Apple等公司也发布了OpenCL,GPU开始在通用计算领域得到广泛应用,包括:数值分析,海量数据处理(排序,Map-Reduce等),金融分析等等。

简而言之,当程序员为CPU编写程序时,他们倾向于利用复杂的逻辑结构优化算法从而减少计算任务的运行时间,即Latency。当程序员为GPU编写程序时,则利用其处理海量数据的优势,通过提高总的数据吞吐量(Throughput)来掩盖Lantency。目前,CPU和GPU的区别正在逐渐缩小,因为GPU也在处理不规则任务和线程间通信方面有了长足的进步。另外,功耗问题对于GPU比CPU更严重。

CPU 力气大啥P事都能干,还要协调。

GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。

CPU是十项全能,GPU是偏科的天才。

教授 vs 小学生

你可以简单的将CPU理解为学识渊博的教授,什么都精通,而GPU则是一堆小学生,只会简单的算数运算,可即使教授再神通广大,也不能一秒钟内计算出500次加减法,因此对简单重复的计算来说单单一个教授敌不过数量众多的小学生,在进行简单的算数运算这件事上,500个小学生(并发)可以轻而易举打败教授。

教授 vs 小学生

因此我们可以看到,CPU和GPU的最大不同在于架构,CPU适用于广泛的应用场景(学识渊博),可以执行任意程序,而GPU则专为多任务而生,并发能力强,具体来讲就是多核,一般的CPU有2核、4核、8核等,而GPU则可能会有成百上千核:

CPU和GPU的最大不同

可以看到,CPU内部cache以及控制部分占据了很大一部分片上面积,因此计算单元占比很少,再来看看GPU,GPU只有很简单的控制单元,剩下的大部分都被计算单元占据,因此CPU的核数有限,而GPU则轻松堆出上千核:

只不过CPU中每个核的能力好比教授,而GPU的每个核的能力好比一个小学生,关于CPU你可以参考这里:

你可能会想,为什么GPU需要这么奇怪的架构呢?

为什么GPU需要这么多核心?

想一想计算机上的一张图是怎么表示的?无非就是屏幕上的一个个像素:

GPU像素

我们需要为每个像素进行计算,而且是相同的运算,就好比刚才例子中的小学生计算计加法一样,注意,对于屏幕来说一般会有上百万个像素,如果我们要串行的为每一个像素进行运算效率就太低了,因此我们可以让GPU中的每一个核心去为相应的像素进行计算,由于GPU中有很多核心,因此并行计算可以大幅提高速度。

现在你应该明白为什么GPU要这样工作了吧。

除了GPU的核心数比较多之外,GPU的工作方式也比较奇怪。

奇怪的工作方式

对CPU来说,不同的核心可以执行不同的机器指令,coreA在运行word线程的同时coreB上可以运行浏览器线程,这就是所谓的多指令多数据,MIMD,(Multiple Instruction, Multiple Data)。

而GPU则不同,GPU上的这些核心必须整齐划一的运行相同的机器指令,只是可以操作不同的数据,这就好比这些小学生在某个时刻必须都进行加法计算,不同的地方在于有的小学生可能需要计算1+1,有的要计算2+6等等,变化的地方仅在于操作数,这就是所谓的单指令多数据,SIMD,(Single Instruction, Multiple Data)。

因此我们可以看到GPU的工作方式和CPU是截然不同的。

除了这种工作方式之外,GPU的指令集还非常简单,不像CPU这种复杂的处理器,如果你去看CPU的编程手册就会发现,CPU负责的事情非常多:中断处理、内存管理、IO等等,这些对于GPU来说都是不存在的,可以看到GPU的定位非常简单,就是纯计算,GPU绝不是用来取代CPU的,CPU只是把一些GPU非常擅长的事情交给它,GPU仅仅是用来分担CPU工作的配角。

CPU和GPU是这样配合工作的:

CPU和GPU配合工作

GPU擅长什么比较适合GPU的计算场景是这样的:

  1. 计算简单;
  2. 重复计算

因此如果你的计算场景和这里的图像渲染相似那么使用GPU就很合理了。因此对于图形图像计算、天气预报以及神经网络等都适用于GPU,嗯,GPU还适合用来挖矿。

你的答案

查看NVIDIA相关的其他问题或提一个您自己的问题