1.4.5 GPU和CPU体系结构对比
目前,主流计算机中的处理器主要是CPU和GPU。CPU和GPU属于不同架构的处理器,它们的设计理念是不同的。
● CPU的设计理念:注重通用性以处理各种不同类型的数据,同时支持复杂的控制指令,例如条件指令、分支、循环、逻辑判断及子程序调用等。因此,CPU微架构的复杂性高,它是面向指令执行的高效率而设计的。
● GPU的设计理念:GPU最初是针对图形处理领域的,图形运算的特点是大量同类型数据的密集 运算。
CPU和GPU的架构对比如图1-8所示,图的左边为CPU架构,右边为GPU架构。对处理器芯片架构设计来说,有两个指标是经常要考虑的:延迟和吞吐量。延迟是指从发出指令到最终返回结果中间所经历的时间间隔。吞吐量是指单位之间内处理的指令的条数。
从图1-8可以看到,CPU的架构特点表现在以下几个方面。
首先,CPU采用了多级高速缓存结构。由于处理运算的速度远远高于访问存储的速度,为了提高指令访问存储的速度,CPU设计了多级高速缓存结构L2、L3、DRAM。它将经常访问的内容放在低级缓存中,不经常访问的内容放在高级缓存中,从而实现了空间换时间的设计思想。
其次,CPU包含了许多控制单元。具体来说,它有两种控制单元:分支预测机制和流水线前传机制控制单元。这些控制单元使得CPU在运算过程中能够高效地进行指令控制。
最后,CPU的运算单元(Core)非常强大,它能够快速进行整型、浮点型复杂运算。这使得CPU在处理大量复杂运算时能够保持高效和稳定。
与CPU不同,GPU的架构特点表现在以下几个方面。
首先,GPU虽然也有缓存结构,但其数量较少,GPU缓存所占的芯片面积较小。这意味着支持指令访问缓存的次数会比较少,从而影响了GPU在存储访问方面的效率。
其次,GPU的控制单元相对简单,没有分支预测机制和数据转发机制,GPU控制单元所占的芯片面积较小。这使得GPU在处理复杂指令时速度较慢,但这也降低了它的功耗和复杂度。
最后,GPU的运算单元非常多,其采用长延时流水线以实现高吞吐量。每行的运算单元共用一个控制器,这意味着每行的运算单元执行的指令是相同的,只是数据内容不同。这种整齐划一的运算方式使得GPU在处理控制简单但运算量大的任务时效率显著提高。
CPU和GPU在基本架构层面上的差异导致了它们在计算性能方面的巨大差异。CPU拥有庞大而广泛的指令集,能够与更多的计算机组件(如内存、输入和输出)交互,以执行复杂的指令。相比之下,GPU是一种专门的协处理器,在高数据吞吐量的任务上表现出色,但在其他任务上的表现则不如CPU。
CPU更强调低延迟的指定运行,其处理方式主要是串行。如果需要处理多任务并发需求,CPU只能通过任务切换来实现,这需要重置寄存器和状态变量、刷新缓存等。然而,经过延迟优化,CPU在多个任务之间的切换速度非常快,让人感觉它是在并行处理任务,但实际上它仍然是一次运行一项任务。因此,CPU像一个学识渊博的专家,它可以迅速处理各种不同难度的任务,但在面对大量的重复性劳动时也会感到困扰。
为了提高CPU的性能,人们可以通过不断提高主频来提高它的运行速度,常见的CPU主频为2~4GHz。相比之下,GPU更强调高数据吞吐量,其核心主频通常为1GHz左右。
除了提高主频和改进架构,增加专门用于并行计算的加速处理器(Accelerated Processor,AP)的数量也是提高GPU处理速度的一种常见方法。CPU和GPU能力差异示意图如图1-9所示,CPU像一个大学里的数学系教授,而GPU更像一群中学生,可以同时处理大量的简单运算,但面对复杂任务则会感到困难。
GPU适合重复性和高度并行的计算任务,其最常规也是最初的应用便是图形渲染和显示。后来,人民发现GPU多多组数据执行并行操作的能力也非常适合某些非图形任务,例如机器学习、金融模拟、科学计算等数据大规模且反复运行相同数学函数的活动。概括起来,适合GPU解决的问题有以下特点:
- 计算密集(任务并行):数值计算的比例要远大于内存操作,因此内存访问的延迟可以被计算掩盖。
- 数据并行:大任务可以被拆解为执行相同指令的小任务,因此,对复杂流程控制的需求较低。