APP下载

面向未来的高性能移动计算

2021-05-08张平

微型计算机 2021年8期
关键词:指令集管理程序寄存器

张平

ARM的首个指令集为Armv4,它于1990年发布。在随后的20年间,ARM陆续发布了Armv5、Armv6、Armv7这三代指令集,不断扩充着这个面向低功耗、高性能功耗比的精简指令集家族的阵容。最大的变化来自2011年,ARM当年发布了划时代的Armv8指令集,带来了全新的AArch64架构,引领了移动计算时代的爆发性增长。在十年后的今天,ARM又再度发布了全新的Armv9。这一次,ARM希望通过大量新计算功能的加入以及安全特性的增强,为ARM在下一个十年的发展奠定基础。

安全和计算:Armv9的两大板块

一般来说,对底层指令集的改动应该是极为谨慎的,因为这意味着整个行业架构的变化。具体到ARM来说,这会涉及千亿级别的芯片和产品。在之前的Armv8上,ARM引入了全新的AArch64架构,将移动计算扩展至64位,并且还带来了完全不同的执行模式和指令集,包括扩展寄存器、64位的虚拟地址空间等。因此,Armv8的出现带给业界极大震撼。

那么,十年后发布的Armv9有什么改进,可以和当年Armv8从32位转换成64位的进步相提并论比呢?在这一点上,ARM宣称Armv9依旧基于AArch64,但是增加了包括安全、AI计算、矢量计算、DSP计算等全新能力。从ARM的官方资料来看,Armv9的改变主要在于计算和安全两个板块。计算方面包含了增强的矢量计算、机器学习能力以及数字信号处理能力等,这部分的提升主要是交由SVE2来实现,同时还包含了相对应的各个计算功能的增强。考虑到这是指令集级别的改变,因此目前还暂时不会有这些增强的部分特别具体的内容,官方资料中只提供了一些功能和应用方面的描述。安全方面增加了包括CCA在内的安全特性,并针对未来ARM所要面向的市场在安全方面可能遇到的问题进行了强化。

接下来,本文就先为大家介绍Armv9在计算方面的变化,主要内容为全新的SVE2模块。其余部分,比如涉及到CPU架构改进的内容,目前还不得而知,ARM可能会在未来的产品说明中进一步描述。

更强算力:Armv9引入SVE2

计算能力方面,Armv9对A I计算、矢量计算和DSP计算进行了大幅度加强,其核心就是第二代可变长度矢量扩展指令集(Scalable VectorExtensions 2,简称“SVE2”)。SVE2在技术和产品的实现上比我们想象的速度更快,因为它是作为N E N O指令集的后续出现的,并且有SVE的经验在前,厂商应该很容易就能将它集成在自己全新的产品中。

SVE(第一代可变长度矢量扩展指令集)诞生于2016年,并已进行了实际应用。SVE主要是为富士通A64FX CPU设计的,并且服务于全球排名第一的超算“Fuka gu”(中文为“富岳”)。SVE大大扩展了之前ARM指令集针对矢量数据的并行处理能力,但它的问题在于数据的可变范围相当有限,并且只针对HPC的工作负载进行研发,缺少很多通用性较强的指令集。相比之下,面向民用市场的NENO则覆盖了这些缺少的内容。但NENO的规格和计算能力都不够出色,已经难以满足目前的需求了。

在这种情况下,新的SVE2在2019年4月发布。作为SVE2和NENO的超集,SVE2拥有SVE和NENO的所有功能和优点,比如允许在数据集并行中实现更多的功能域,集成了SVE的概念,矢量寄存器和操作基本原理,并且SVE和SVE2都定义了32个可扩展的矢量寄存器(后文还有详述)。现在,芯片开发人员可以根据需求选择合适的矢量长度来进行计算方面的实现,可选的矢量长度范围最小为NENO的128位(这是因为NENO指令集只能处理固定长度为128位的矢量),最长可选2048位,开发人员可以以128位为起始值,以128位为一个单位选择自己需要的矢量处理单元的一次性可处理数据长度,这在很大程度上给了芯片设计人员和软件研发人员不小的自由度。

SVE和SVE2的设计理念非常先进。它们允许开发人员只需要通过一次编写和构建软件,就可以在不同的、支持A Arch64的硬件上,使用不同的SV E矢量长度的计算单元来完成相同的计算,当然其中存在效率和速度的差異。这种特性使得开发人员不需要知道当前系统实际设计的矢量长度,并且也不需要他们根据硬件矢量长度来匹配相关软件,这为软件移植带来了相当大的便利。

在技术特性方面,SVE和SVE2带来了不少新的技术特性,包括每通道预测(Per-lane predication)、对数据的获取、装载以及分散、存储功能(Gather-load and scatter-store)、矢量化的预测技术(Speculativevectorization)等,上述功能有助于实现数据的矢量化处理和优化循环。同时,SVE2在SVE仅针对HPC和ML优化的基础上,还带来了针对机器学习(UDOT指令)、计算机视觉(TBL和TBX指令)、基带网络(CADD和CMLA指令)、基因组学(BDEP和BEXT指令)以及服务器(MATC H和NMATCH指令)等全新应用场合的指令优化。

尤其是为了帮助编译器对上述领域更好的矢量化—SVE2针对大多数编译器使用的整数数字信号处理器(DSP),提供了一个和矢量宽度无关的新N E N O指令集,这扩大了矢量并行处理的适用范围,极大地提高了新架构在上述所有方面的计算效能和计算速度。

进一步来看SVE2的结构。SVE2拥有32个可扩展的矢量寄存器(scalable vector registers)、16个可扩展的述语寄存器(predicate registers)、第一故障述语寄存器(F i rstFaultpredicate Register,简称为FFR)以及可扩展矢量系统控制寄存器(scalablevector system control registers)。其中,32个可扩展矢量寄存器正如前文所说,可以在128位到2048位间选择,其中首128位和NENO指令集固定的128位长度共享。具体计算内容方面,可扩展矢量寄存器可以容纳64、32、16和8位元素,支持整数、双精度、单精度和半精度浮点计算,功能相当丰富。所谓述语寄存器,通常用作存储数据运算的位掩码,每个述语寄存器的长度是之前的可扩展矢量寄存器的1/8,共16个述语寄存器的前8个用作加载、存储和运算,后8个用于循环管理额外的述语。此外FFR和可扩展矢量系统控制寄存器主要是用于推测性的存储器访问以及保留供将来使用。

对现有的处理器使用的NENO指令集而言,SVE2会将其进行复制或者转换,使其更有效率地在SVE2架构下运行。ARM还特别指出,即使处理器内集成了SVE2,依旧可以继续存在NENO。这里并不仅仅是指SVE2可以处理NENO指令集的内容,而是说一个芯片拥有了SVE2的相关单元,也可以同时放置NENO相关单元。这里可能是考虑到启用SVE2后功耗和效率等问题,毕竟N ENO的操作和计算都要更简单一些。总的来说,SV E和SVE2并非只是NENO指令集的简单扩展,它们是针对更好的数据并行性而重新设计的一整套计算方案,当然,SVE和SVE2的硬件逻辑覆盖了NENO的硬件逻辑,因此,支持SVE和SVE2的硬件也必然支持NENO,反之则不一定。

加入SVE2后,Armv9在矢量计算上终于拥有了可以和桌面处理器相比拟的功能和实现路径。实际上,纵观A R M之前在指令集上的发展路径可以看出,在计算领域,桌面平台往往会领先移动平台数个身位,移动平台则会在制造工艺或者技术应用相对成熟的时候开始提供类似的功能。比如英特尔在数年前就开始推广SSE指令集,也就是典型的矢量并行计算指令集,其提供了8个SIMD浮点寄存器,可以进行128位浮点计算。此后英特尔又推出了包括AVX、AVX-256、AV X-512在内的指令集,都是希望利用规模化的并行计算,将可以并行化、矢量化处理器的数据导入AVX这类可以高效率执行计算的模块,实现处理器计算能力的大幅度提升,并对当前和未来很长一段时间的热门,诸如深度学习、计算机视觉、科学计算等内容进行加速,大幅度提高处理器效率。这次ARM在Armv9上引入SVE2,所做的也是这个事情。当然,我们并不指望Armv9和相对应的产品拥有类似于桌面产品那样强大的计算能力,但有就是好的。在执行移动计算和一些要求不高、需要并行矢量计算的任务时,Armv9做出的这个改变还是能起到一定的效果。

全面强化:Armv9的安全特性改进

ARM在Armv9的安全特性方面做了相当多的工作。其中很大一部分原因是考虑到目前行业内安全问题频发,包括英特尔之前“幽灵”和“熔断”这类安全缺陷所导致的连锁反应,以及AMD近期发生的预测存储转发(PSF)安全缺陷等。这些漏洞和相关同级别的旁侧信道攻击都表明,对安全性的根本需求是考虑如何对待安全本身以及如何在处理器层面实现安全。ARM在这里的做法是通过Armv9,重新制作整个安全架构工作方式,这就是新的ARM保密计算架构。

目前ARM对Armv9中新的安全架构披露得还不算详细,已有的消息仅仅包括比较高层级、宏观的CCA(Confidential Compute Architecture,保密计算架构)方面的内容,其运行的一些关键性和细节内容,ARM会在今年夏末的发布会上进一步公布。

ARM解释了有关CCA工作的内容。从原理上来说,CCA是以软件为核心的,也就是设备上运行的应用必须置于操作系统和管理程序的控制之下。相比传统系统和软件那种权属不清,部分特权软件拥有超越操作系统和管理程序的功能并可能损害操作系统和管理程序而言,CCA将在很大程度上扭转这个问题。

为此,CCA引入了一个动态创建的 "领域"新概念。所谓“领域”,可以看成是对操作系统或者管理程序完全不透明的、安全的、容器化的执行环节。管理程序仍然存在,但只负责调度和资源分配,而领域将由一个名为 "领域管理器"的新实体来管理,领域管理器本身并不大,大约只有管理程序1/10的体积。在这里有一个非常特殊的设计,领域内的应用程序可以“验证”一个领域管理器,并确认其是可信的,这在传统的管理程序中是不可能的。ARM并没有深入地介绍到底是什么在领域、操作系统、管理程序之间建立了这种分离。根据推测来看,这个功能比较接近硬件支持的地址空间,这样一来不同的域之间就无法相互影响了。

根据ARM解释,使用领域的好处是可以极大地减少设备上运行的某一应用的信任链,这使得操作系统可以非常透明地控制系统内的安全问题,并且这与需要企业使用带有授权软件的专用设备的情况相反,用来监督控制的關键任务应用程序将能够在任何设备上运行,这也大大方便了企业的运行和操作。

另一个和安全相关的功能是MTE(Memory Tagging Extensions,内存标记扩展)。这个功能的出现是为了解决目前普遍存在的内存安全问题。比如微软宣称目前每年通过安全更新解决的问题中,70%都是内存安全问题。谷歌Chromium的安全问题,同样有70%和内存安全相关。

因此在Armv9上,ARM着重介绍了MTE功能。不过实际上MTE并非Armv9中的功能,而是在之前的Armv8.5中就已经引入,其目的是帮助解决软件中两个最持久的安全问题,即缓冲区溢出(Buffers overflows)和释放后重用(Use-af ter-free)。释放后重用是指当系统使用并释放了一个堆块后,并没有将该指针置为NULL,这会导致该指针处于悬空的状态,同样被释放的内存数据如果被恶意利用的话,可能产生数据泄露等问题。在过去50年中,这两大问题一直伴随着软件的发展,目前也没有找到特别好的根治方法。MTE则是通过分配时标记内存指针,并在使用数据时进行检查来帮助识别这类问题的出现,可能会对整个系统的安全性加强起到一定的作用。

面向未来:ARM公布部分未来CPU架构

除了展示有关Armv9的内容外,ARM还公布了其所带来的CPU架构和相关性能进步等内容。

ARM给出的数据显示,相比2016年推出的Cort ex-A73,在I SO流程的设计IPC层面,全新的Cortex-X1已经将处理器的峰值性能提升了2.5倍。在采用了新的Armv9、代号为“Matterhorn”和“Makal u”的下一代(2021年推出)和下下一代(2022年推出)的新C PU架构上,A R M预计性能增幅会提升至最多30%。值得注意的是,这里的性能增幅仅仅是指IPC方面的内容,并不包括受益于频率和新的工艺所带来的性能增益。平均下来,相比2020年推出的Cortex-X1,新的内核平均每年将带来14%的性能增长幅度。虽然从这个曲线的斜率来看,14%的速度是要略小于之前从Cortex-A72到Cortex-X1的2015年或2016年到2020年间的增长速度的,但是显然高于业内平均水平。

除了移动设备外,在数据中心市场,ARM在2019年推出了全新的Neoverse架构,目前Neoverse V1拥有ARM旗下最高的单核心性能,面向的是云端、H P C和机器学习用户,另一款Neoverse N2则兼具高单核性能和高效率,面向5G边缘计算、SmartNIC等设备中可以实现非常好的扩展性能。ARM的数据显示,这两款产品相比之前的产品分别带来了2.4倍和2.2倍的性能提升,但是ARM没有给出数据元点,因此不清楚ARM是和哪年的哪一款产品进行了对比。

另外,ARM还特别指出,在系统层面需要进一步加强,这样才能更好地发挥出CPU架构的性能。比如根据ARM给出的数据显示,在系统延迟方面之前是150ns,现在则是90ns,平均减少5ns的延迟就可以带来1%的性能提升。与此类似的情况还体现在各个方面,每100MHz频率的提升对应3%的性能提升,每10GB/s内存带宽的增加对应2%的性能提升,以及缓存容量的翻倍对应9%的性能提升等。ARM在这部分可能是想说明目前整个系统层面对CPU的性能优化还远远不够,建议业内应该更注重系统层级的优化,针对延迟、频率、内存带宽和缓存优秀的设计可能会带来比拟CPU架构升级的性能优势,这是非常值得关注的一个点。

在对未来的展望上,ARM依旧将CPU视为未来通用性最好的计算模块,其余的加速模块包括GPU等虽然正在快速发展,但是在很多情况下这些加速模块在灵活性和易用性上不足,包括可编程性、安全特性、在任何设备上部署的能力以及经过验证的正确工作的能力等。ARM还提到,目前计算设备的生态系统的运行方式极其分散,不仅设备类型不同,设备厂商和操作系统之间也存在差异。而Armv9新加入的SVE2和矩阵乘法可以极大地简化软件生态系统,可以采用更统一的方法并可在任何设备上运行,简化系统的运行架构并提高效率。

在GPU方面ARM也给出了一些消息。值得注意的是,ARM宣称M aliGPU的未来将可能支持VRS、光线追踪等目前已经在桌面平台广泛应用的新技术。这一点是非常令人惊讶的,这意味着移动GPU在发展路线上也深受桌面GPU的影响,未来我们会看到运行在移动G P U上的光线追踪游戏(云游戏是否会成为其最大竞争对手?)。

最后我们来总结一下有关Armv9指令集的发布。总的来看,Armv9指令集看起来更像是一个在计算和安全方面极大加强的Armv8指令集的擴展版本,其中有关计算的部分也就是SV E2带来了对矢量计算根本性的改变,安全部分的设计(ARM还将继续公布详细内容)也非常令人感兴趣。无论是计算还是安全,都将影响到未来十年ARM的发展,也会影响到我们每一个人手中的移动设备。

在具体的产品上,Neoverse N2可能会采用新的Armv9指令集,其他面向消费者的新架构正在准备中,其主要目标应该是接替Cor tex-X1和Cortex-A78,乐观估计的话,预计2022年消费者就可以在市场中看到这类产品了。

猜你喜欢

指令集管理程序寄存器
军事保密管理程序法治化及其对军民协同创新发展的促进研究
3DNow指令集被Linux淘汰
Lite寄存器模型的设计与实现
分簇结构向量寄存器分配策略研究*
关于EPC总承包项目设计管理程序文件的研究
实时微测量系统指令集及解析算法
什么是AMD64
基于覆盖率驱动的高性能DSP指令集验证方法
FMC移动性管理程序
宁德核电管理体系建设与优化