编者按
前面专门写过一篇“软硬件融合”的系统性介绍文章,之后有很多朋友私信交流。不断汲取大家对软硬件以及软硬件相互协作方面的观点,逐步深化和完善“软硬件融合”概念和技术体系。
简单总结一下。一方面,大家对未来认识的大方向是趋同的,就是“软硬件要深度结合/协同”。但另一方面,对软硬件融合观点的认识,也存在如下一些常见的误区:
第一个误区,道理比较浅显易懂,这里不再赘述。今天这篇文章,接着第二个和第三个误区的话题,来详细介绍一下软硬件融合的丰富内涵。
软硬件融合的内涵,可以简单总结成“三融一通”,指的是:
接下来,我们详细展开。
垂直向的软硬件协同或融合,是目前大家最大的共识。
软硬件系统通过分层实现系统的拆分,同时实现不同子系统的解耦。即使系统分层非常的科学和准确,分层仍然无法一劳永逸。随着系统的发展,原有的分层必然逐渐不再适应系统发展的需要。系统的每一层均不宜是黑盒或“独立领地”,不同层之间需要联动。从系统的视角,需要全局的、动态的、长期的、持续的重构系统分层。
举存储分层的一个例子。
传统的观点认为,模块或层次之间的调用,是在模块内部封装复杂的功能,然后给外部提供简单的访问接口。这种观点没有错,但是是静态的观点。
站在系统发展的角度,就产生了如上图的问题。上图是以RocksDB为例的存储的整个系统堆栈,在这个系统堆栈里有三层虚拟化:SSD内部的FTL地址映射、系统层的文件系统、应用层软件的地址管理。
三层虚拟化比较冗余,会影响到存储的延迟。目前行业逐渐流行的ZNS存储,就是取消了存储控制器中的FTL虚拟化层,只完成简单的控制。然后把SSD块的管理交给软件,实现软件定义存储。
如果只考虑本层,而不考虑系统整体:
所有层次的设计,都需要考虑全局统筹。
也以算力提升为例。
算力的提升,是一个复杂而庞大的系统工程。不仅需要各个相关领域的持续优化,还需要跨领域的协同创新。需要从数据中心多层次挖潜,整体协同优化。优化的主要方向有:
按照指令的复杂度,典型的处理器平台大致分为CPU、协处理器、GPU、FPGA、DSA、ASIC。从左往右,单位计算越来越复杂。性能越来越好,而灵活性越来越低。
假设CPU是100%软件,ASIC是100%硬件;那么,其他处理引擎则介于两者之间,是不同比例软硬件的混合态。因此,CPU、GPU、DSA等各种类型的处理器,本质上是在不同层次的软硬件解耦基础上的软硬件再协同。
计算架构,从同构计算走向异构计算;再从异构计算,走向更多异构相互协作的异构融合计算。异构计算仅有一种加速处理器类型,仅关注CPU和加速处理器的协同;而异构融合计算,具有两种或两种以上的加速处理器类型,关注的重心在于所有处理器之间的协同和融合。
异构融合计算中的协同,指的是系统的工作由两个或两个以上处理器协作处理,协作可以是CPU和CPU之间的协作,也可以是CPU和加速处理器之间的协作,还可以是加速处理器和加速处理器之间直接协作。
异构融合计算中的融合,指的是某个具体工作任务可以跨CPU、GPU和DSA等不同类型处理器运行,也可以跨同类型中的不同架构处理器运行。
以Intel的XPU和OneAPI为例。
XPU它不是一个新的处理器或产品,而是一个架构组合,包括CPU、GPU、FPGA 和其他加速器。OneAPI是Intel构建的一套开源的跨平台编程框架,底层可以运行CPU、GPU、FPGA或其他DSA加速器,通过OneAPI为应用提供一致性的编程接口,使得应用能够轻松实现跨平台复用。
随着算力需求越来越高,而单芯片算力提升有限,通过Scale Out实现的分布式集群计算越来越成为主流。
计算系统,不再是基于单个芯片、单个设备,而是基于数以百计甚至千计的计算节点的计算集群。甚至,计算系统还要进一步扩展,计算需要跨集群,跨不同位置,进而扩展到跨云网边端。
一方面,底层的芯片,需要有非常多异构架构的处理器引擎,同时支持异构融合计算。另一方面,上层的计算集群需要跨云边端,实现云边端硬件计算平台的融合,软件可以非常方便地在云边端不同的计算节点动态自由迁移。
同时,为了更好的支撑宏观的跨云边端融合计算,微观的芯片也需要做很多调整。以异构融合计算处理器单芯片HCU为例,其和传统的SOC在功能特征方面存在很多的不同:
性能和灵活性是一对矛盾:一方面,随着系统规模和复杂度的上升,系统对灵活性的要求也越来越高;而另一方面,系统对性能的要求越来越高,越需要专用优化的加速处理器来优化性能,进而使得系统的灵活性越来越低。
每个处理引擎都有优势,也有劣势。通过单兵作战,只能“权衡”;但通过“团队协作”的异构融合计算,每个处理器做自己最擅长的工作,从而实现优势互补,把性能和灵活性都拉扯到极致。
软硬件融合,强调的是,如何在确保系统灵活性的前提下,实现最极致的性能。我们给出的解决方案是:通过更多异构处理器的深度协作,通过团队合作,实现整体最优。
此外,性能和灵活性的平衡仍在动态变化。可能随着系统的发展,有的任务会“上浮”,越来越需要更多灵活性;有的任务会“下沉”,灵活性要求逐步降低,可以通过更高效的硬件加速来极致的提升性能。
(正文完)