处理器“三国鼎立”:从CPU、GPU到DPU
欢迎关注“软硬件融合”公众号:
1 从冯·诺依曼架构说起
数据的输入输出。主要负责跟外部的数据交互;
控制单元:主要负责接收控制命令并且执行对整个处理引擎的控制和状态反馈;
计算单元:主要负责具体数据的处理;
数据缓冲:负责计算过程中临时数据的存储。
要么是冯·诺依曼架构的变种;
要么是多个冯·诺依曼架构的组合;
要么是上述两者兼而有之。
2 从软件到硬件,存在很多中间形态
指令是软件和硬件交互的媒介,指令的复杂度决定了系统的软硬件解耦的程度;
按照单位计算(指令)的复杂度,处理器平台典型的分为CPU、协处理器、GPU、FPGA、ASIC/DSA。
从CPU到ASIC,单位计算越来越复杂,而灵活性却越来越低。
任务在CPU运行,则定义为软件运行;
任务在协处理器、GPU、FPGA或ASIC运行,则定义为硬件加速运行。
3 CPU,划时代意义的发明
3.1 指令集,软件和硬件的媒介
硬件工程师不需要关心场景,只关注于通过各种“无所不用其极”的方式,快速的提升CPU的性能。
而软件工程师,则完全不用考虑硬件的细节,只关注于程序本身。
然后有了高级编程语言/编译器、操作系统以及各种系统框架/库的支持,构建起一个庞大的软件生态超级帝国。
3.2 软硬件解耦,CPU性能狂飙,软件蓬勃发展
时间并行度。通过流水线,在同一时刻有更多的指令进行处理。通过进一步的增加流水线级数,也即增加同一时刻处理的指令数量来提升性能。当然了,因为指令流本身的各种依赖,通过流水线的方式,会产生很多额外的代价,我们还需要通过分支预测、重命名、重排序缓冲ROB等机制来进一步减少流水线Stall的次数,来进一步优化时间并行。
空间并行度。空间并行有很多维度,从指令级别的指令多发射、多执行单元,到超线程,到处理器多核等,都进一步的提升CPU的空间并行度。
工艺进步,进一步提升设计规模和运行速度。使得单个CPU Core的很多复杂设计可以完成,并且使得可以在单芯片中集成更多的CPU Core,以此来进一步提升并行能力。
存储Hierarchy。随着处理器性能的飞速提升,内存和处理器性能差距越来越大。因为程序局部性原理,为了进一步弥合两者的速率差距,在处理器和内存之间,增加了多级缓存。
3.3 CPU持续发展,达到性能瓶颈
CISC阶段。在上世纪80年代,以Intel和AMD的x86架构为典型代表的CISC架构CPU开启了CPU性能快速提升的时代,CPU性能每年提升约25%(图中22%数据有误),大约3年性能可以翻倍。
RISC阶段。随后,CISC系统越来越复杂,有很多设计资源花在了不经常使用的指令实现上。随后,RISC证明了“越精简,越高效”。随着RISC架构的CPU开始流行,性能提升进一步加快,每年可以达到52%,性能翻倍只需要18个月。
多核阶段。单核CPU的性能提升越来越困难,开始通过集成更多CPU核并行的方式来进一步提升性能。这一时期,每年性能提升可以到23%,性能翻倍需要3.5年。
多核整体性能递减阶段。随着CPU核集成的数量越来越多,阿姆达尔定律证明了处理器数量的增加带来的收益会逐渐递减。这一时期,CPU性能提升每年只有12%,性能翻倍需要6年。
性能提升瓶颈阶段。不管是从架构/微架构设计、工艺、多核并行等各种手段都用尽的时候,CPU整体的性能提升达到了一个瓶颈。如图,从2015年之后,CPU性能每年提升只有3%,要想性能翻倍,需要20年。
4 GPU,不仅仅是GPU
4.1 GPGPU,通用的并行计算平台
4.2 CUDA,NVIDIA GPU成功的关键
4.3 GPU,AI加速的王者
基于CPU。CPU虽然灵活性很好,并且唾手可得,可以很好的做前期验证。但CPU标量计算,性能相对较弱,不能很好的满足AI类算法对性能的要求。
基于(CPU+)ASIC/DSA。谷歌的TPU是非常经典的AI DSA案例,TPU是张量计算,性能非常好。但这里面临如下一些挑战:
(1)芯片设计的门槛和周期;
(2)ASIC/DSA与业务场景(或者说算法)的深度绑定;
(3)是否可以大范围落地使用;
(4)开发者的编程难度问题。
这些问题,都使得ASIC/DSA非常难以芯片的方式交付给用户去做开发。
例如,谷歌的TPU和AWS的Inferentia均是以服务的方式提供给客户使用。
基于(CPU+)GPU。GPU的优势在于,其向量运算,一方面性能比CPU有很大提升,另一方面,可以通过CUDA支持用户编程。在CUDA的基础上,通过相关开发库及AI框架的支撑,使得开发者可以很方便的完成AI算法的开发、测试和部署。
5 经典CPU+xPU异构计算的挑战
可加速部分占整个系统的比例有限,例如加速占比为80%,则加速最高不超过5倍;
数据在CPU和加速器之间来回搬运的影响,加速比率打了折扣,有些场景综合加速效果不明显;
异构加速显式的引入新的实体,计算变成两个或多个实体显式的协作完成,增加了整个系统的复杂度;
虽然GPU相比CPU性能提升不少,但是相比DSA/ASIC的性能,还是有显著的差距;而DSA/ASIC的问题则在于,无法适应复杂场景对业务灵活性的要求,导致大规模应用成为巨大的门槛;
CPU+xPU架构,是以CPU为中心,整个IO路径很长,IO成为性能的瓶颈。
5.1 扩展:定制不是未来
不同的场景不同的算法。而DSA/ASIC架构跟算法紧密结合,只能覆盖少量的场景。
上层的算法快速迭代,算法可能半年或一年就会有一次大的升级。
而芯片的研发周期却需要2-3年,而其生命周期4-5年。
在6-8年的周期里,DSA/ASIC很难满足算法如此频繁的迭代。
6 DPU横空出世,面向未来
6.1 CPU的算力瓶颈,量变引起质变
第一阶段,“史前”阶段。在CPU之前的年代,CPU的处理速度和IO的输入输出速度基本匹配,因此也谈不上以谁为中心。IO部分负责数据的输入和输出,核心的计算模块负责具体的计算。
第二阶段,CPU迅猛发展阶段。CPU发明后,通过标准的指令集,解耦了软件和硬件。CPU开始性能狂飙,而内存和外存的性能提升却非常有限。这时候,我们不得不设计非常多层级的存储hhierarchy来弥补IO(内存也可以当做CPU的数据IO)和CPU之间巨大的性能差距。这样,以CPU的计算为中心成为了整个计算机最核心的架构。
第三阶段,CPU瓶颈+数据爆炸阶段。再进一步的,时间来到了大数据时代。网络带宽升级到百Gbps以上,存储更换成更高IOPS的NVMe SSD。可预见的未来,网络和存储的带宽还会持续的增加,暂时看不到停顿的迹象。而与此同时,CPU的性能却陷入了停滞。这样,以CPU计算为中心的架构越来越无法满足计算性能的要求,计算机架构未来会逐渐演化成以数据为中心的架构。
6.2 面向超大规模数据处理的新一代异构计算架构
DPU也可以集成一些应用层级的加速器,如AI-DSA加速、基于嵌入式GPU/FPGA的弹性加速等,进一步强大DPU的功能。
DPU也可以集成高性能的嵌入式CPU,把一些跟DPU硬件加速任务关系紧密的软件Workload放在嵌入式CPU运行,进一步提升整体的效率。