随着Arm生态系统的发展壮大,各种各样的应用场景层出不穷。为了更好地在特定场景下得到更好的性能,能耗比等指标,针对特定应用场景的加速器市场也在蓬勃发展,近年来火热的人工智能加速器(Artificial Intelligence Accelerator)就是一个典型例子。
一个高效的加速器,需要精心设计的硬件以及与之搭配的软件,两者缺一不可,否则用户体验会大打折扣,这也是为什么我们常常看到某些指标非常惊艳的加速器,在实际使用中体验却不尽如人意的原因。以人工智能加速器为例,其中基本的硬件加速单元就是乘加器的组合,但如何让这些乘加器高效地进行并行计算,涉及到上层数据的打包、调度,需要大量的驱动软件工作,而且大部分软件开发者都是基于某种框架进行应用开发,具体见图 1,所以驱动到框架的适配也很重要,甚至有一些框架不能满足应用的需求,需要专门开辟通道进行优化。
图1:Arm NPU软硬件框架
开发一款高性能加速器,需要投入大量人力物力,如果不能大规模使用,那么投入回报比会大大降低,甚至亏本。如果加速器能和不同Arm系统轻松组合,拓展Arm系统的应用范围,那么应用场景将会大大增加,生命周期也会延长。让加速器适配不同的Arm系统,这对软硬件接口和驱动提出了非常大的挑战,因为今天的Arm产品非常丰富,从低功耗的微处理器,主流的移动平台,到高端的服务器,高性能计算处理器都有相应产品。对于一个加速器团队来说,针对尽可能多的Arm配置组合进行开发验证成本将非常高昂,这里面不单单涉及IP/EDA的采购,还有系统的搭建维护,但如果没有这些IP又无法将整个业务流程完整验证,甚至影响软硬件接口的设计优化。
有没有方法高效地解决加速器配套驱动,框架,应用软件开发的问题呢?Fast Model!
图2:使用DS-5调试运行在Fast Model中的系统软件
在Fast Model的例子系统中,Arm给出了一系列Arm核,相关IP组合的子系统模型,以及相应OS,开发工具DS-5,方便客户快速搭建软件开发平台,调整软硬件接口,进行驱动以及上层软件的开发,具体参考图3。
整个开发流程如下:
1.在Fast Model的例子系统中找到你需要的平台,和对应的Bootloader, Firmware, OS软件,并将他们顺利运行
2. 将Fast Model的子系统导出生成SystemC的模型子系统模块
3. 编写加速器的功能模型,通过AMBA PV总线和Fast Model导出的子系统模块进行连接
4. 编写驱动在目标OS中操作加速器
5. 在模型平台上进行软件框架,应用匹配移植
Arm提供了绝大部分市面可见设计的类似子系统,无论是基于Arm v7/v8单核,多核,多cluster系统,还是包含最新架构特性的CPU系统,加速器开发团队都可以在Fast Model的例子程序里面找对类似子系统范例进行适配,在设计之初就可以解决不同系统的适配性问题。Fast Model也提供工具让开发者对例子系统进行修改,生成新的子系统以满足需要。在加速器设计之初,软件硬件人员就可以一起利用丰富多样的例子系统进行架构的探索,对稳定软硬件接口非常有帮助,而稳定的接口定义对长期的产品演进至关重要。
图3:基于Fast Model的加速器软件开发
至此开发者已经完成了大部软硬件接口,驱动以及框架软件开发工作,但驱动中的时序问题还没有完全解决,因为Fast Model是一款功能型模型,它为了提高运行速度(50-200MHz),牺牲了时序信息。对于时序信息,开发者可以最后去仿真平台甚至最终芯片上去调节,而此时软件测试用例和框架都已经完成,这将大大节省占用仿真平台(MHz)进行调试排错的时间,从而降低成本。