序
因为个人兴趣所在,我在Arm工作了大约20年。也正是在这段时间里,电子行业以及Arm发生了令人难以置信的变化。
在我加入Arm之前,Jon Marsh就已经加入了这家公司(大约是在1997年)。我很高兴能够认识Jon并和他一起工作。我通常负责组织Arm的客户培训活动,而Jon是团队中非常出色的培训师。Jon对授课内容有深刻的理解,也能够用易懂的方式清晰地解释复杂的主题。更难能可贵的是,他将这两种能力结合在了一起。
当Jon加入Arm时,Arm的处理器在手机行业已经非常流行,并开始在其他市场生根发芽。应用工程团队为全球快速增长的芯片及软件开发人员提供支持和培训,而Jon则是该团队的关键成员之一。
自1999年加入Arm以来,我有幸见证了Arm一次又一次地“提高标准”。1994年推出的Thumb指令集可以说是Arm处理器系列中第一个也是最重要的创新。它改变了游戏规则,针对资源有限的处理器,在减少内存开销的同时极大地提升了处理器性能。Arm7TDMI在手机行业被广泛采用,并成为Arm的第一个全球成功案例。在接下来的几年里,Arm以惊人的速度不断创新变革:Arm920T转变为哈佛总线架构;Arm926EJ-S具有硬件Java加速功能的完全可综合IP内核;Arm11系列首先实现Thumb-2指令集、TrustZone安全架构,以及涉足多处理器扩展;2004年转向Cortex品牌,它的三个不同系列的处理器内核A、R和M分别针对高性能、硬实时和大众市场的微控制器。
正是这种进入微控制器领域的举措推动了15年来Arm处理器出货量的惊人增长。我最近向一名嵌入式行业资深从业人员提问:你认为过去50年嵌入式计算中最主要的游戏规则改变者是谁?他毫不犹豫地回答道:“Cortex-M3。它将32位计算能力以不到1美元的价格交到了嵌入式开发人员手中。这改变了一切。”这可能存在个人偏好的因素,但我认同他的观点。当你参加嵌入式行业活动,查找组件经销商的产品展示卡时,你会发现Cortex-M3及其派生产品无处不在。
Cortex-M微控制器的发展并没有止步于Cortex-M3。Cortex-M0和Cortex-M0+的面积变得更小;Cortex-M1可以应用于FPGA市场;Cortex-M4拥有了浮点计算和数字信号处理(Digital Signal Processing,DSP)能力;Cortex-M23和Cortex-M33则首次将硬件的TrustZone安全特性引入微控制器。
现在,借助Cortex-M55,Arm不仅又一次改变了游戏规则,还将微控制器引入了另一个全新的领域。Cortex-M55处理器是第一个实现Helium技术(即M系列矢量扩展)的Arm内核。Cortex-M55增加了一个矢量处理指令集扩展,该扩展能够极大地提高内核进行数字信号处理和机器学习(Machine Learning,ML)运算的性能。
你可能会问,为什么要进行这样的改变?为什么Arm现在进行这样的改变如此重要?原因是我们看到分布式系统的构建方式发生了变化。一直以来,微控制器并不具备单独处理涉及DSP和ML应用的能力,因此设计人员经常需要在设备中添加单独的DSP来处理它们。这样的设计使得硬件设计更加复杂,同时,由于需要多个工具链来处理在具有不同架构的设备上运行的单独应用程序,软件开发也会变得更加困难。高速网络的出现使得将数据定期发送到服务器进行处理成为可能,但是这个方法本身也存在问题。它不仅会给系统带来潜在的不可接受的延迟,还会增加安全风险和能耗。而最根本的问题是方法本身固有的,它缺乏可扩展性——带宽和服务器容量都不是无限的。
因此,人们正在将高性能数据处理尽可能地放在网络边缘位置,最好是放在终端设备的处理器上进行。简而言之,Cortex-M55让这一切成为可能。
早期的Cortex-M微控制器内核基于Armv7-M架构,主要依靠整型指令集进行计算。Cortex-M4和Cortex-M7包括提供浮点计算和加速某些DSP操作的扩展,使其适用于更广泛的工作负载。基于Armv8.1-M架构的Cortex-M55则更进一步,实现了Helium MVE。
这些扩展为Cortex-M系列处理器增加了新的功能——并行地处理矢量数据。对于某些类别的工作负载,主要是DSP,这样的能力可以显著提高吞吐量,使微控制器级别的设备能够在没有其他帮助的情况下处理更广泛的用例。
这些扩展可以用于应对嵌入式设备日益复杂的挑战,满足更丰富和更复杂的用户界面需求、触屏和语音控制的使用需求,以及融合和处理来自越来越广泛的传感器阵列的数据的需求。
这本书很好地介绍了这种新功能。在本书的前几章中,Jon介绍了非常基础且易于理解的基本概念,包括单指令多数据(Single Instruction, Multiple Data,SIMD)、矢量处理、浮点和定点数据表示以及饱和运算。在对MVE架构进行概述之后,后续章节将指令集拆分成几个部分来进行讨论,涵盖了流水线结构、预测和分支处理、数据处理及内存访问等主题。
本书中最实用的部分介绍了具有Helium功能的内核(例如Cortex-M55)的编码机制,包括编译、调试和优化。
最后,本书总结了如何实现DSP和ML,这也是最重要的部分。同样,在这一部分中,先对基本原理进行详细介绍,接着介绍关于编码及优化关键算法和技术(例如傅里叶变换、滤波和神经网络)的实用建议。
我很开心能够向所有希望将知识扩展到新领域的软件开发人员推荐这本书。
Chris Shore
Arm汽车与物联网业务产品管理总监
2020年9月