超异构计算杂谈
在这一节中要从更远的视角来看看计算机架构发展的黄金 10 年,主要将围绕异构计算和超异构来展开。在开始具体内容前,非常推荐观看以下两个视频:
- 计算机架构的新黄金时代:A New Golden Age for Computer Architecture
- 编译器的黄金时代:The Golden Age of Compiler Design in an Era of HW/SW Co-design
他们可以让更细致的了解计算机体系结构和编译器的发展历程和重要节点。接下来让先简述一下关于 AI 芯片发展的阶段。
AI 芯片发展
人工智能的发展与芯片算力的提升密不可分,可以大致分为三个阶段:
- 第一阶段:芯片算力不足,神经网络没有被受到重视
在早期,受限于芯片算力,复杂的神经网络模型难以实现。这一时期的人工智能主要依赖于专家系统、决策树等传统方法。神经网络虽然在理论上已经被提出,但由于计算资源的匮乏,难以训练出有效的模型,因此没有受到广泛重视。
- 第二阶段:CPU 算力大幅提升,但仍然无法满足神经网络增长需求
随着摩尔定律的推进,CPU 性能不断提升。这为神经网络的发展提供了一定的计算基础。研究者们开始尝试更大规模的神经网络,并在一些领域取得了突破。但是,神经网络对算力的需求呈指数级增长,单纯依靠 CPU 的性能提升已经难以满足日益复杂的模型训练需求。
- 第三阶段:GPU 和 AI 芯片新架构推动人工智能快速落地
为了解决算力瓶颈,研究者们开始将目光转向了其他计算架构。GPU 凭借其强大的并行计算能力,成为了深度学习的主要计算平台。与 CPU 相比,GPU 在矩阵运算等方面有着显著的优势,能够大幅加速神经网络训练。与此同时,一些专门针对 AI 加速的芯片架构也开始涌现,如 TPU、NPU 等。这些芯片在算力、功耗等方面进一步优化,为人工智能的落地应用扫清了障碍。
除了芯片算力外,算法的进步、数据的积累也是人工智能发展的重要推动力。在算力瓶颈得到缓解后,一些重要的神经网络结构如 CNN、RNN、Transformer 等被相继提出,并在图像、语音、自然语言处理等领域取得了突破性进展。海量的数据为模型训练提供了丰富的素材,使得神经网络能够学习到更加鲁棒和泛化的特征表示。
而更进一步,单一架构的使用也渐渐满足不了一些应用场景,针对于此,异构计算的概念也就应运而生。
异构与超异构场景
首先让来理解一下为什么需要异构?摩尔定律放缓,传统单一架构难以满足日益增长的计算需求。异构计算,犹如打破计算藩篱的利器,通过整合不同类型计算单元的优势,为计算难题提供全新的解决方案。
异构计算的主要优势有:
性能飞跃: 异构架构将 CPU、GPU、FPGA 等计算单元有机结合,充分发挥各自优势,实现 1+1>2 的效果,显著提升计算性能。
灵活定制: 针对不同计算任务,灵活选择合适的主张计算单元,实现资源的高效利用。
降低成本: 相比于昂贵的专用计算单元,异构架构用更低的成本实现更高的性能,带来更佳的性价比。
降低功耗: 异构架构能够根据任务需求动态调整资源分配,降低整体功耗,提升能源利用效率。
其应用场景也十分广泛,包括人工智能、高性能计算、大数据分析、图形处理等等
以一个具体的例子来引入:特斯拉 HW3 FSD 芯片(如下图),可以看到其单一芯片却有着 CPU,GPU,NPU 多种架构。
其之所以有如此异构架构则是由需求(如下图所标示)决定的:身为汽车芯片,其要负责雷达、GPS、地图等等多种功能,这时单一传统的架构就会比较难以高效完成任务:
而将各部分组件有机结合的异构芯片就可以更好的处理复杂情况,如下图,可以看到 GPU、NPU、Quad Cluster 等等硬件均被集合在一起,通过芯片外的 CPU 等等进行协同控制,这样就可以在多种任务的处理和切换时实现非常好的效果。
计算体系迎来异构
异构计算的出现和发展源于传统冯·诺依曼结构计算机受制于存储和计算单元之间的数据交换瓶颈,难以满足日益增长的计算需求,加之半导体工艺的发展使得 CPU 主频提升受到物理和功耗的限制,性能提升趋于缓慢。
为了突破单核 CPU 性能的瓶颈,业界开始探索并行计算技术,通过多核处理器或集群计算机实现高性能计算,然而并行计算中的微处理器仍受冯·诺依曼结构的制约,在处理数据密集型任务时,计算速度和性价比不尽如人意。
随着深度学习等人工智能技术的兴起,对计算能力提出了更高的要求,传统的 CPU 在处理神经网络训练和推理任务时,性能和效率远不及专门设计的 AI 芯片,如 GPU 和 NPU 等。异构计算通过集成不同类型的计算单元,发挥各自的计算优势,实现更高的性能和能效,AI 芯片在处理特定任务时,计算效率远超传统 CPU,有望成为未来计算机体系的标配。
尽管异构计算的发展仍面临系统功耗限制、上层基础软件的欠缺以及与芯片结构的匹配度不足等挑战,但通过优化异构计算平台的架构设计、开发高效的编程模型和运行时系统、提供易用的开发工具和库,可以更好地发挥异构计算的潜力,推动人工智能、大数据分析、科学计算等领域的进一步发展,异构计算有望成为未来计算机体系结构的主流趋势。
异构的例子
下面将用一个最常见的 CPU-GPU 异构工作流来给出一个具体的例子,如下图:
其具体流程为:
- CPU 把数据准备好,并保存在 CPU 内存中
- 将待处理的数据从 CPU 内存复制到 GPU 内存(图中 Step1)
- CPU 指示 GPU 工作,配置并启动 GPU 内核(图中 Step2)
- 多个 GPU 内核并行执行,处理准备好的数据(图中 Step3)
- 处理完成后,将处理结果复制回 CPU 内存(图中 Step4)
- CPU 把 GPU 的结果进行后续处理
通过这样的异构设置,就可以更充分、高效地协同发挥不同组件的优势特性,以实现更高的性能。以游戏为例:现代游戏画面逼真复杂,对计算能力提出了极高要求。传统 CPU 难以满足如此严苛的性能需求,而 GPU 擅长图形处理,能够高效渲染游戏画面。异构计算将 CPU 和 GPU 优势互补,强强联合。CPU 负责游戏逻辑、场景构建等任务,GPU 则专注于画面渲染。两者分工协作,实现更高效的硬件利用率。
异构的优势
接下来总结补充三点异构架构的优势:
- 适用于处理高性能计算:伴随着高性能计算类应用的发展,驱动算力需求不断攀升,但目前单一计算类型和架构的处理器已经无法处理更复杂、更多样的数据。数据中心如何在增强算力和性能的同时,具备应对多类型任务的处理能力,成为全球性的技术难题。异构并行计算架构作为高性能计算的一种主流解决方案,受到广泛关注。
- 适用于处理数据中心产生的海量数据:数据爆炸时代来临,使用单一架构来处理数据的时代已经过去。比如:个人互联网用户每天产生约 1GB 数据,智能汽车每天约 50GB,智能医院每天约 3TB 数据,智慧城市每天约 50PB 数据。数据的数量和多样性以及数据处理的地点、时间和方式也在迅速变化。无论工作任务是在边缘还是在云中,不管是人工智能工作任务还是存储工作任务,都需要有正确的架构和软件来充分利用这些特点。
- 可以共享内存空间,消除冗余内存副本:在此前的技术中,虽然 GPU 和 CPU 已整合到同一个芯片上,但是芯片在运算时要定位内存的位置仍然得经过繁杂的步骤,这是因为 CPU 和 GPU 的内存池仍然是独立运作。为了解决两者内存池独立的运算问题,当 CPU 程式需要在 GPU 上进行部分运算时,CPU 都必须从 CPU 的内存上复制所有的资料到 GPU 的内存上,而当 GPU 上的运算完成时,这些资料还得再复制回到 CPU 内存上。然而,将 CPU 与 GPU 放入同一架构,就能够消除冗余内存副本来改善问题,处理器不再需要将数据复制到自己的专用内存池来访问/更改该数据。统一内存池还意味着不需要第二个内存芯片池,即连接到 CPU 的 DRAM。
除了 CPU 和 GPU 异构以外,AISC 在异构体系中也扮演着重要的角色(如下图),尤其是对于 AI 加速。其通过驱动程序和 CSR 和可配置表项交互,以此来控制硬件运行。和 GPU 类似, ASIC 的运行依然需要 CPU 的参与:
- 数据输入:数据在内存准备好,CPU 控制 ASIC 输入逻辑,把数据从内存搬到处理器
- 数据输出:CPU 控制 ASIC 输出逻辑,把数据从处理器搬到内存,等待后续处理
- 运行控制:控制 CSR、可配置表项、中断等
ASIC 工作流示意图如下:
从 CPU 到 ASIC,会发现架构越来越碎片化,指令作为软件和硬件之间的媒介,其复杂度决定了系统的软硬件解耦程度。典型的处理器平台可以分为 CPU、协处理器、GPU、FPGA、DSA 和 ASIC。随着指令复杂度的提高,单个处理器能够覆盖的场景变得越来越小,处理器的形态也变得越来越多样化。这种碎片化趋势导致构建生态变得越来越困难。这形成了易用性和性能之间的权衡关系,如下图:
而在 CPU+XPU 的异构计算中,XPU 的选择决定了整个系统的性能和灵活性特征。GPU 具有较好的灵活性,但性能效率不够极致;DSA 性能优异,但灵活性较差,难以适应复杂计算场景对灵活性的要求;FPGA 的功耗和成本较高,需要进行定制开发,落地案例相对较少;ASIC 的功能完全固定,难以适应灵活多变的复杂计算场景。
可以发现异构计算本身也还是存在着一些问题:
- 复杂计算:系统越复杂,需要选择越灵活的处理器;性能挑战越大,需要选择越偏向定制的加速处理器;
- 本质矛盾:单一处理器无法兼顾性能和灵活性;
为了解决异构计算存在的挑战,超异构概念应运而生。超异构架构将多种类型的 XPU 有机结合,融合了不同 XPU 的优势,能够同时兼顾性能和灵活性,满足复杂计算场景的需求。
从异构到超异构
首先从三个角度来理解一下为什么超异构的出现是应运而生的:
- 需求驱动:软件新应用层出不穷,两年一个新热点。 随着人工智能、大数据、元宇宙等新兴技术的快速发展,对计算能力提出了越来越高的要求。传统单一架构的计算模式难以满足日益增长的计算需求,亟需新的计算架构来突破性能瓶颈。已有的热点技术仍在快速演进。 例如,元宇宙需要将算力提升 1000 倍才能实现逼真的沉浸式体验。超异构计算能够通过融合不同类型计算单元的优势,显著提升计算性能,为元宇宙等新兴技术的落地提供强有力的支持。
- 工艺和封装支撑:Chiplet 封装使得在单芯片层次,可以构建规模数量级提升的超大系统。 Chiplet 封装技术将多个芯片封装在一个封装体内,可以显著提高芯片的集成度和性能。这使得在单一封装内集成多种类型的 XPU 成为可能,进一步推动了超异构计算的发展。
- 系统架构持续创新:通过架构创新,在单芯片层次,实现多个数量级的性能提升。 随着计算机体系结构的不断发展,新的架构设计不断涌现,例如异构架构、多核架构等。这些架构能够通过充分发挥不同类型处理器的优势,显著提升计算性能。异构编程很难,超异构编程更是难上加难。 如何更好地驾驭超异构,是成败的关键。近年来,随着异构编程模型和工具的不断完善,超异构编程的难度逐渐降低,这为超异构计算的推广应用奠定了基础。
通过以上三个角度可以推断,超异构计算的出现是顺应时代发展需求的必然选择。它能够突破传统单一架构的性能瓶颈,满足日益增长的计算需求,为各行各业的创新发展注入强劲动力。
了解背景后,来正式介绍超异构的概念,如下图:
超异构实际上就是集合了三种以上类型引擎/架构的超架构,但是这种集合非简单的集成,而是把更多的异构计算整合重构,各类型处理器间充分、灵活的 数据交互,形成统一的超异构计算体系。计算从单核的串行走向多核的并行;又进一步从同构并行走向异构并行。下图为异构计算的发展的概略流程图:
超异构有以下基本特征:
- 超大规模的计算集群:超异构计算通常由大量计算节点组成,每个节点可以包含 CPU、GPU、FPGA、DSA 等多种类型的计算单元。这些计算节点通过高速互联网络连接在一起,形成一个超大规模的计算集群。超大规模的计算集群能够提供强大的计算能力,满足大数据分析、人工智能、科学计算等对计算能力要求高的应用场景。
- 复杂计算系统,由分层分块组件组成,如下图所示。超异构计算系统的复杂性主要体现在以下几个方面:不同类型的计算单元具有不同的性能和特性,需要进行统一管理和调度;计算任务可能涉及多个计算节点,需要进行任务分解和数据通信;需要考虑功耗、可靠性等因素,进行系统优化。
超异构的挑战与思考
根据前文内容,可以明白超异构的概念和其必要性,但是显然超异构的实现也伴随着许多挑战,接下来将分点来介绍它们。
参考文献链接
https://chenzomi12.github.io/02Hardware02ChipBase/07Future.html