编者按
软硬件协同,是上世纪90年代提出的概念。在那个时候,系统已经变得相对复杂,需要更加准确严谨的软硬件划分,然后软硬件再协同。
系统规模小的时候,软硬件划分很容易,可以比较随意的划分,即使有错误,后期修改也没什么大不了。但随着系统越来越大,如果不经过严谨的软硬件划分,到开发阶段才发现问题,可能来不及纠正,会导致项目的失败,带来非常严重的后果。软硬件协同,是系统变的复杂之后,软硬件设计的必然选择。
那么,既然已经软硬件协同了,为什么还需要软硬件融合?软硬件融合又是什么?我们将在本文中进行探讨。
1 首先,讲一下软硬件划分
软件和硬件需要定义好交互的“接口”,通过接口实现软硬件的“解耦”。例如,对CPU来说,软硬件的接口是指令集架构ISA:ISA之下的CPU处理器是硬件,指令集之上的各种程序、数据集、文件等是软件。
软硬件划分的意思是说:需要确定好软件做什么,硬件做什么。确定软硬件做什么的过程其实就是确定指令复杂度的过程。可以这样说,指令的复杂度(单位指令的计算密度)决定了系统的软硬件解耦程度。
按照指令的复杂度,典型的处理器平台大致分为CPU、协处理器、GPU、FPGA、DSA、ASIC。如图所示:最左边,几乎是100%软件实现,CPU硬件只是一个跟业务没有必然联系的软件执行平台而已;最右边,是几乎100%的硬件,系统的业务逻辑,完全的固化成了电路实现,额外的软件控制面,只是负责硬件的运行控制而已;中间的协处理器、GPU、FPGA和DSA,则是软件做一部分,硬件做一部分。
2 软硬件协同概念的提出
软硬件协同是1990年代提出的概念。大背景是随着系统规模扩大,传统的系统软硬件设计的问题逐渐凸显,需要软硬件协同设计。传统系统软硬件设计存在的问题主要是:
- 硬件/软件划分,是在还未充分理解系统的情况下进行,很容易产生设计错误;
- 软硬件划分的设计错误,会对系统产生巨大的负面影响;
- 而受开发周期和纠正代价的影响,难以纠正在软硬件划分阶段的错误。
传统软硬件一体的设计,适合于较小的系统;而软硬件协同的设计,适合于大一些的系统。
软硬件协同的价值主要体现在:
- 统一的设计方法论,可以持续指导大系统的设计;
- 可以充分利用已有的软硬件资源,使得开发效率最大化;
- 缩短大系统产品上市的时间。
从长期来看,软硬件协同,需要对目标系统的软硬件设计持续迭代:
- 如果是做一次性的项目,只需要循环一次;
- 如果要做用户满意的产品,需要迭代循环数次,不断的升级优化;
- 如果是一个软硬件平台,则需要循环数十次,不断的优化软硬件划分,基于软硬件的“接口”,实现功能更强大的软件和硬件;
- 如果要构建基于平台的生态,甚至需要循环上百次,时间更久(数年甚至数十年),代价更高(数以十亿美金计的投入)。
3 为什么要从软硬件协同到软硬件融合
量变会引起质变!
随着系统的规模越来越大,系统的设计方法论也需要不断地升级:
- 第一阶段,小系统。软硬件一体设计,软硬件划分的难度也不高,划分也比较随意。即使划分错误,后期修正的代价也不高。
- 第二阶段,大系统。随着系统设计规模不断扩大,传统的软硬件一体的方法,越来越不适应系统的设计,越来越成为系统设计的瓶颈;于是,出现了软硬件协同。
- 第三阶段,复杂宏系统是很多系统的混合交叉,需要实现很多功能的融合。复杂系统里的每一个子系统,其体量和传统系统的规模相当。每个子系统设计都需要软硬件协同,而且会是不同程度软硬件划分之后的再协同。子系统之间的协作(软件和软件的协作、软件和硬件的协作、硬件和硬件的协作),也是软硬件协同。通过不同子系统的软硬件协同,形成了有机的复杂系统。如图所示,我们把众多子系统的众多软硬件协同的组合称为软硬件融合。
软硬件协同,是单个系统的软硬件设计方法学;而软硬件融合,则是复杂宏系统的软硬件设计方法学。
4 软硬件融合
复杂系统,由分层分块的各个组件(即工作任务Workloads),有机组成的。这样,我们就可以把系统的组件(即工作任务,或子系统)映射到一个或多个处理引擎:
- 按照指令复杂度,形成一维坐标系。CPU是100%软件,ASIC是100%硬件,其他处理引擎介于两者之间,是不同比例软硬件混合态。
- 根据任务特点,映射到最合适的引擎。软硬件的分工和协同,需要均衡;但更要不断的向上向下拉扯,形成极致最优。需要注意的是:基于软硬件引擎的分层跟系统分层是不同的概念。
- 映射是动态平衡的:任务最合适的处理引擎,并非一成不变,而是随着系统发展有可能下沉(Offload)/上浮(Onload)。
需要强调的是:软硬件融合不改变系统层次结构和组件间的交互关系,但打破传统软硬件的界限,系统的、动态的重构软硬件划分/协同,达到整体最优。
在小系统和大系统的背景下,分层很清晰:下层硬件上层软件。软硬件融合的分层分块,每个任务都是不同程度软硬件解耦基础上的再协同。然后再整合成复杂宏系统。整个复杂宏系统呈现出:软件中有硬件,硬件中有软件,软硬件融合成一体。
目前,在CPU性能瓶颈和对算力需求不断上升的的大背景下,软硬件融合主要是任务卸载。系统的任务,不断的从CPU卸载到各个层次的硬件加速,其原因主要是:①复杂分层的系统、 ②CPU性能瓶颈、 ③超大规模以及④特定场景服务。
无规模,不卸载(Offload)。
哪些任务适合卸载?卸载的大原则可以分为微观和宏观两个方面。微观原则是:①性能敏感,占据较多CPU资源;宏观原则是:②广泛部署,运行于众多服务器。
宏观的看,分层的系统,越上层越灵活软件成分越多,越下层越固定硬件成分越多。庞大的规模以及特定场景服务,使得云计算底层工作任务逐渐稳定并且逐步卸载到硬件(被动趋势)。软硬件融合架构,可以使“硬件”更加灵活,功能也更加强大,使得更多的层次功能向“硬件”加速卸载(主动抢占)。
5 软硬件融合面向的场景
Intel SVP Raja表示:要实现元宇宙级别的体验,算力至少需要提升1000倍。从云计算到云网边端融合的万物融合,再到云宇宙的虚实融合,算力需要多个数量级的提高,单个设备的系统越来越复杂,数以亿计设备组成的融合大系统,则更加复杂。
软硬件融合,从宏观和微观的视角,尝试解决复杂计算面临的问题。系统越复杂,软硬件融合的价值越凸显。
软硬件融合相关技术,从云计算抽象出来,指引包括云计算在内的各种复杂计算场景的芯片及系统设计。
6 软硬件融合的意义
软硬件融合的根基:①分层分块的系统和②宏观的超大规模,这两个原因使得③二八规律广泛存在。
软硬件融合承上启下:从产品定义和系统架构开始,逐步拓展到整个系统栈;往下拓展微架构设计和实现,甚至考虑工艺、封装和测试;往上,考虑接口驱动、操作系统、框架和开发库,甚至需要考虑应用算法和业务逻辑。
软硬件融合,落地实现必然是CPU + 协处理器 + GPU + FPGA + DSA + ASIC等多种处理引擎充分协同的超异构计算。其中,每个工作任务都是在软硬件均衡/解耦基础上的再协同。
软硬件融合的核心目标是要兼顾软件灵活性和硬件高性能,实现既要又要。
软硬件融合,既是理论和理念,也是方法和解决方案。让硬件更加灵活、弹性、可扩展,弥补硬件和软件之间的鸿沟。
软硬件融合应对云计算、边缘计算及超级终端等复杂计算场景的挑战。软硬件融合也为解决芯片一次性成本过高导致的设计风险,提供了切实可行的思路和方案。
(全文完)
来源:软硬件融合
微信公众号:
相关文章推荐
更多软硬件技术干货请关注软硬件融合专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。