编者按
日前,国家发改委等四部门联合发布《全国一体化大数据中心协同创新体系算力枢纽实施方案》,提出在京津冀、长三角、粤港澳大湾区、成渝以及贵州、内蒙古、甘肃、宁夏建设全国算力网络国家枢纽节点,启动实施“东数西算”工程,构建国家算力网络体系。
算力,成为整个数字信息社会发展的关键。通过“东数西算”能缓解一些问题,但没有根本解决问题:当前要想提升算力,更多的是靠“摊大饼”的方式构建更加规模庞大并且低能耗的现代化数据中心。
这是算力提升的Scale out(增大规模),那么,我们如何能够做到算力的Scale up(提升单个计算节点的性能)?或者说,我们如何显著(数量级)的提高单个处理器的性能?
当前,算力成为制约信息技术更加蓬勃发展的最核心问题:
我们需要构建新一代的创新计算范式,相比当前,要把算力至少再提升1-2个数量级,并且能够提供非常好的易用编程能力,来持续应对未来10年的更加复杂系统的算力需求爆炸的挑战。
注:本文想法还比较粗糙,抛砖引玉,期待更多的讨论,未来会优化更新。
1.1 指令集软硬件解耦,CPU性能狂飙,软件蓬勃发展
指令集,是软硬件的媒介。CPU是最灵活的,原因在于运行于CPU指令都是最基本的加减乘除外加一些访存及控制类指令,就像积木块一样,我们可以随意组合出我们想要的各种形态的功能,形成非常复杂并且功能强大的程序,或者称为软件。
CPU最大的价值在于提供并规范了标准化的指令集,使得软件和硬件从此解耦:
硬件工程师不需要关心场景,只关注于通过各种“无所不用其极”的方式,快速的提升CPU的性能。
而软件工程师,则完全不用考虑硬件的细节,只关注于程序本身。然后有了高级编程语言/编译器、操作系统以及各种系统框架/库的支持,构建起一个庞大的软件生态超级帝国。
通过标准化指令集,达到软硬件解耦,并且互相向前兼容(软件向前兼容之前的硬件,硬件向前兼容之前的软件)。这样,CPU的硬件设计者,可以不用考虑上层的业务到底是什么,也即不关心通过指令组合出的程序到底是干什么用的。只需要关心,我设计的CPU性能如何的好,可以实现更高的IPC(Instructions per Cycle)和更高的频率。
图1. 历年CPU性能提升对比
从图1中,可以看到,在差不多40年的时间里,CPU的整体性能提升接近50000倍。一方面,这有赖于处理器架构的翻天覆地变化,也有赖于半导体工艺的进步。另一方面,更有赖于通过标准化的指令集,使得CPU平台的硬件实现和软件编程完全解耦,没有了对方的掣肘,软件和硬件均可以完全的放飞自我。
一方面是CPU性能狂飙,另一方面,则是软件逐渐发展成了一个超级的生态帝国。从各种数以百万级使用者的高级编程语言,到广泛使用在云计算数据中心、PC机、手机等终端的智能操作系统,再到各种专业的数据库、中间件,以及云计算基础的虚拟化、容器等。上述这些软件都是基础的支撑软件,是软件的“冰山一角”,而更多的则是各种用户级的应用软件,系统级和应用的软件,共同组成了基于CPU的软件超级生态。
1.2 摩尔定律失效,CPU性能瓶颈,制约软件的发展
图2. CPU性能提升的五个阶段
图2和上一节的图1是一致的,图2主要是明确展示了五个发展阶段:
二、第二代:GPU
2.1 GPGPU,通用的并行计算平台
GPU,Graphics Processing Units,图形处理单元。顾名思义,GPU是主要用于做图形图形处理的专用加速器。GPU内部处理是由很多并行的计算单元支持,如果只是用来做图形图像处理,有点“暴殄天物”,其应用范围太过狭窄。
因此把GPU内部的计算单元进行通用化重新设计,GPU变成了GPGPU。到2012年,GPU已经发展成为高度并行的众核系统,GPGPU有强大的并行处理能力和可编程流水线,既可以处理图形数据,也可以处理非图形数据。特别是在面对SIMD类指令,数据处理的运算量远大于数据调度和传输的运算量时,GPGPU在性能上大大超越了传统的CPU应用程序。现在大家所称呼的GPU通常都指的是GPGPU。
图3. NVIDIA图灵GPU架构
2018年,NVIDIA发布了最新一代的GPU架构——图灵架构。基于图灵架构的GPU提供PCIe 3.0来连接CPU主机接口,提供千兆的线程引擎来管理所有的工作。另外,图灵架构支持通过两路x8的NVLink接口实现多GPU之间的数据一致性访问。
如图3,图灵架构GPU的核心处理引擎由如下部分组成:6个图形处理簇(GPC);每个GPC有6个纹理处理簇(TPC),共计36个TPC;每个TPC有2个流式多核处理器(SM),总共72个SM。每个SM由64个CUDA核、8个Tensor核、1个RT核、4个纹理单元,总计有4608个CUDA核、576个Tensor核、72个RT核、288个纹理单元。
2.2 CUDA,NVIDIA GPU成功的关键
图4. CUDA框架
2006年NVIDIA推出了CUDA,这是一个通用的并行计算平台和编程模型,利用NVIDIA GPU中的并行计算引擎,以一种比CPU更高效的方式解决许多复杂的计算问题。CUDA提供了开发者使用C++作为高级编程语言的软件环境。也支持其他语言、应用程序编程接口或基于指令的方法,如FORTRAN、DirectCompute、OpenACC。
CUDA是NVIDIA成功的关键,它极大的降低了用户基于GPU并行编程的门槛,在此基础上,还针对不同场景构建了功能强大的开发库和中间件,逐步建立了GPU+CUDA的强大生态。
三、第三代:DSA
3.1 DSA兴起
2017年三月,图灵奖获得者David Patterson和John Hennessy在其“体系结构的黄金年代”主题演讲中,提出了DSA架构。CPU的性能提升走向终结,需要针对特定场景有针对性的定制加速,而DSA则是切实可行的解决方案。DSA是在定制ASIC的基础上回调,使其具有一定的软件可编程灵活性。
按照指令的“复杂度”,DSA可以归属到ASIC一类。跟CPU、GPU、FPGA以及传统ASIC相比,DSA具有如下一些特点:
3.2 AI领域DSA案例:谷歌TPU
DSA架构的第一个经典案例是谷歌的TPU。TPU(Tensor Processing Unit,张量处理单元)是Google定制开发的ASIC芯片,用于加速机器学习工作负载。谷歌在2013年进行的一项预测分析显示,人们每天使用语音识别DNN进行语音搜索三分钟,这将使数据中心的计算需求增加一倍,而使用传统的CPU成本非常昂贵。因此,谷歌启动了一个高优先级项目,即TPU项目,以快速生成用于推理的自研ASIC。目标是将GPU的性价比提高10倍。
图5. 谷歌TPU 1.0结构框图
如图5,显示了TPU的结构框图。TPU指令通过PCIe Gen3 x16总线从Host发送到TPU的指令缓冲区。内部模块通过256字节宽的总线连接在一起。开始在右上角,矩阵乘法单元是TPU的核心,它包含256x256 MAC,可以对有符号或无符号整数执行8位乘加,16位乘积收集在矩阵单元下方的4 MB 32位累加器中。4 MB可容纳4096个256元素的32位累加器。矩阵单元每个时钟周期产生一个256个元素的部分和。
TPU指令设计为CISC(复杂指令集计算机)类型,包括一个重复域。这些CISC类型指令的CPI(Cycles per Instruction,每条指令的平均时钟周期)通常为10到20。总共大约有十二条指令,主要的五个指令是:
其他指令包括备用Host内存读写、组配置、两个版本的同步、中断主机、调试标签、空指令NOP和停顿Halt。
(★代表TPU,▲代表K80 GPU,●代表Haswell CPU)
图6. CPU、GPU和TPU的Roofline组合图
如图6,对于HPC来说,Y轴是每秒浮点运算的性能,X轴是操作强度,用访问的每个DRAM字节的浮点操作来衡量。峰值计算速率就是Roofline的“平坦”部分,内存带宽是每秒字节数,因此变成了Roofline的“倾斜”部分。从图6中,我们可以看到,所有TPU星星均位于CPU和GPU的Roofline之上。从Roofline的平坦部分可以看出,TPU的处理速度比GPU和CPU要快15-30倍。
图7. CPU、GPU和TPU的性能功耗比
如图7,其中的TPU’是使用了GDDR5存储的改进型。可以看到,相比CPU性能提升196倍,相比GPU性能提升68倍。谷歌随后又开发了TPU 2.0、3.0版本。TPU 1.0的性能峰值达到了92Tops,而TPU2.0性能峰值达到180Tflops,TPU3.0更是达到了420Tflops。并且,从TPU 2.0开始,TPU不再是作为一个加速卡应用于通用服务器,而是定制的TPU集群,这样会更大限度的发挥TPU的加速价值。
3.3 网络领域DSA案例:Intel Tofino
SDN蓬勃发展,从控制面可编程的Openflow到数据面可编程的P4语言,以及出现了Intel PISA架构的Tofino芯片。站在体系结构的视角,Tofino是网络领域最典型的DSA,其实现的可编程流水线既能够达到ASIC级别的性能,又能够通过P4对整个包处理数据面进行编程。
Intel基于PISA架构,设计了面向数据中心的、支持P4数据面编程的ASIC交换芯片。其目标是使对网络的编程与和CPU编程一样简单。当网络是完全可编程的(即控制平面和数据平面都在最终用户的控制之下)时,网络行业将享有与软件一样飞速的发展。
在Intel看来,虽然已经存在NPU和FPGA,可以修改网络协议和编辑数据包,并为那些知道如何编写微代码或RTL的人员提供适度的可编程性,但是它们跟ASIC的性能不在一个数量级。因此,NPU和FPGA只能在性能不敏感的地方找到用武之地。Intel为网络行业提供两全其美的解决方案:可编程性数据平面协议,并且达到行业最高速度。Intel不仅开发了全球第一个比传统ASIC还要更快的可编程交换机芯片,而且还使得网络编程变得容易并且通用。
Intel与Google、Microsoft、Princeton及Stanford合作,开发了用于编程网络的开源网络编程语言P4。程序员可以基于P4编程一次来描述网络行为,然后编译程序以在各种不同的平台上运行。P4为网络设备制造商和网络所有者提供了差异化的手段,可以使产品或整个网络比竞争对手更好。
这与当前的情况形成了鲜明对比,如果用户想向网络添加新功能,则必须与芯片供应商共享该功能,并看到它也出现在竞争对手的网络中,从而打败了差异化的目的。设备制造商也不愿意添加新功能。添加新功能需要花费几年的时间,然后竞争优势却很短暂。这导致一些公司倾向于开发特有的固定功能ASIC,以保持领先地位。
图8. 像CPU编译器一样的网络编译器
如图8所示,可编程性长期存在于计算、图形、数字信号处理以及特定领域处理器中,从而使蓬勃发展的开发人员社区能够快速创新并编写以最终用户为中心的解决方案。Intel的PISA架构可以像DSP、GPU以及TPU那样,它将完全控制权交给网络所有者。
为此,Intel首先确定了一个小规模的原语指令集来处理数据包,总共约11条指令。以及非常统一的可编程流水线(PISA架构),来快速连续地处理数据包头。程序使用领域特定语言P4编写,然后由Intel Capilano编译器进行编译,并经过优化以在PISA架构的设备上全线速运行。Intel的目标是使网络更加敏捷、灵活、模块化且成本更低。
Intel认为,网络系统正朝着由三层构成的方向发展:在底部是一个P4可编程的Tofino交换机,在上面是一个基于Linux的操作系统,运行专有的控制平面应用程序。Intel为整个行业提供最快的、最高可编程性、经过P4优化的交换机硬件。
四、第四代:CASH超异构
4.1 芯片从2D到3D到4D,单个芯片所能容纳的晶体管数量越来越多
图9. 苹果公司M1芯片说明
如图9所示,苹果公司自研的ARM CPU M1基于TSMC 5nm工艺,具有160亿个晶体管,如此巨大规模的设计,使得M1集成了8核CPU和8核GPU,并且每个处理器都可以非常奢侈的使用内部Register、Buffer或Cache资源(这些是晶体管消耗大户)。
图10. TSMC 新工艺Roadmap
如图10所示,TSMC 5nm刚刚量产,其3nm工艺已经在路上,2nm、1nm也都在未来几年的路线图中。并且,TSMC已经开始在攻关0.1nm工艺,半导体工艺即将进入亚纳米(埃米)时代。
图11. 3D存储封装
如图11,在存储领域,近些年来还兴起了3D封装技术,使得集成电路从二维进入三维。
图12. Chiplet示意图
如图12,芯粒(chiplet)机制,把多个芯片裸DIE集成到一起,从3D到4D,都进一步增强了单位面积的晶体管集成度。
工艺持续进步、3D堆叠以及Chiplet多Die互联,使得芯片从2D->3D->4D。这些技术的进步,意味着在芯片这个尺度,可以容纳更多的晶体管,也意味着芯片的规模越来越大。
4.2 从异构到超异构,从SOC到Multi-SOC,设计规模越来越庞大
(a) CPU同构并行 (b) CPU + xPU异构并行
图13. 同构并行和异构并行计算架构
当前,并行计算的主流架构如图13所示:
异构并行计算架构的情况说明:
图14. 多种处理引擎共存的超异构并行计算
随着芯片工艺所能支撑的设计规模越来越大,并且,CPU、GPU、FPGA、一些特定的算法引擎,都可以作为IP,被集成到更大的系统中。这样,构建一个更大规模的芯片设计成为了可能。在这里,我们提出“超异构”并行计算的概念,如图14,超异构指的是由CPU、GPU、FPGA、DSA、ASIC以及其他各种形态的处理器引擎共同组成的复杂芯片系统。
站在系统的角度,传统的SOC是单系统,而超异构系统则是多个系统整合到一个更加庞大的宏系统。传统SOC和超异构SOC的区别和联系:
超异构需要实现相比传统基于GPU或DSA的异构计算10倍甚至100倍以上的性能提升,并且需要实现整体接近于ASIC的极致的性能,还要确保整个系统的接近于CPU软件的通用可编程能力。
4.3 软硬件融合,超异构计算的必由之路
由于云计算的发展,数据中心已经发展到超大规模,每个超大规模数据中心拥有数以万计甚至十万计的服务器规模。超大规模数据中心的发展,是云计算逐渐走向软硬件融合的根本性驱动力量。
图15. 软硬件融合和CPU系统不断卸载
云服务器上运行的各类软件可以看做是一个非常复杂的并且分层的系统, 由于CPU已经性能瓶颈,在宏观的数据中心规模的加持下, 以及IaaS层针对特定场景优化的一些服务,如图15所示,我们可以认为:软硬件融合的过程其实就是系统不断卸载的过程。
软硬件融合:
图16. 基于CASH架构超异构实现的DPU
通常,我们把DPU当做是CPU的任务卸载加速,这个想法依然没有摆脱以CPU为中心架构设计的“桎梏”。
更本质的,如图16所示,基于CASH架构(CASH,Converged Architecture of Software and Hardware,软硬件融合架构)的DPU,是一个性能强劲的、功能完整的、超异构计算的算力平台。在这个平台里,包含了硬件加速部分去完成底层基础设施层的加速处理;也包含了,用于应用层处理的CPU和GPU,来完成应用层的处理。
独立的CPU和GPU可以看做是DPU的扩展,只有当集成的CPU/GPU不满足处理要求时,作为独立的计算平台,来增强整个系统的功能。
图17. 软硬件融合技术是各种复杂计算场景的基础支撑
软硬件融合技术,是为了应对算力需求最高、系统规模最大、成本最敏感、灵活性要求最高的云计算数据中心场景的各种复杂挑战,而逐渐形成的技术理念和一整套技术体系。
基于软硬件融合的超异构混合计算,聚焦算力需求再上1-2个数量级的复杂场景。面向未来,自动驾驶、5G/6G核心网、边缘计算等场景,对算力的需求都会更加强劲,面对如此多的复杂系统场景,软硬件融合也有了更多的用武之地。
如图17,软硬件融合从云计算抽象出来,反过来指引包括云计算、自动驾驶等复杂系统场景的芯片及系统设计。
软硬件融合的超异构计算需要达到如下一些标准:
性能。单位晶体管资源的性能水平接近于ASIC,整体性能需要达到GPGPU、DSA的10-100倍甚至以上。
通用灵活性。在保证性能极致的基础上,要确保其可编程能力达到接近于CPU软件的水平。并且给开发者提供友好的编程平台。
开放、开源。CPU有x86、ARM和RISC-v三大主流的架构平台,而DSA方面,完全是各家自己定义的各种互不兼容的架构。到了超异构时代,在软件定义的加持下,一定需要开放的标准化的架构定义,才能真正实现不同架构不同软件生态之间的“互联互通”。
各个平台的算力和通用性总结如下图18所示。
图18. CPU、GPU、DSA、CASH算力平台比较
领取专属 10元无门槛券
私享最新 技术干货