修志龙_ZenonXiu · 2022年07月29日

Arm A-Profile构架发展: Armv8.6-A

本文翻译自

https://community.arm.com/dev...

原作者:Nigel Stephens 2019年9月25日

译者: Zenon Xiu

Arm 构架持续进化中以满足我们生态伙伴的需求。这篇博文介绍了Armv8.6-A引进的一些新功能的概况。

这些增强构架功能提供了更高效的处理和更好地使能新领域应用,比如神经网络和机器学习。通用矩阵乘(GEMM)和BFloat16为这些领域提供了显著的提升。我们还会介绍增强的指针鉴权(Pointer authentication)安全功能。完整的指令集和系统寄存器信息会在我们的技术网站提供。完整包含Armv8.6-A和之前构架的Armv8-A 构架参考手册(ArmARM)将在下一年(2020)公布。 XML将会很快发布,我们会提供相应链接。((译者:这篇翻译发布时,XML文档已经发布,链接为 https://developer.arm.com/arc... ,ArmARM也已经包含了armv8.6-A扩展,https://developer.arm.com/pro...

之前A-profile构架更新的细节可以在这里找到:Armv8.1-A, Armv8.2-A, Armv8.3-A, Armv8.4-A, and Armv8.5-A.

向量和浮点数相关增强
通用矩阵乘(GEMM)
矩阵乘是神经网络的Convolution Layer的关键部分。 Weights放在一个矩阵,activations 放在另一个矩阵。

1.jpg

图1 weights和activation的矩阵乘, Arm Compute Library Layout

为了做矩阵乘,一个简单的算法通常使用3个嵌套循环,每次计算一个输出。

总共的数据取需要:2MN*K

Armv8.6-A在SVE和NEON里引进了新的矩阵乘指令。这通过减少内存访问的次数优化这个过程。这是通过一次计算多个元素来实现的,比如

2.jpg

图2 一次计算2x2个元素

这里我们每次从A和B取两个操作数(2xfetches)但是每次计算4个结果(一次loop 4次计算;4倍减少循环次数)。总的来说,相较于每次计算一个元素,数据取的数量减半。

区域越大好处越多,比如 4x4的数组,每个循环深度需要8个操作数,但是进行16个乘。

3.jpg

图3 计算4x4 块的结果

NEON和SVE里加入BF16和有符号/无符号 8-bit整型矩阵乘指令。SVE额外加入了对单精度和双精度矩阵乘的支持。

BFloat16
BFloat16(BF16)是最近特别针对神经网络高性能处理引进的浮点数格式。Armv8.6-A增加了利用BF16浮点数格式加速特定运算的指令。

更多有关arm BF16支持的信息可以在这个神经网络的帖子找到。

虚拟化和系统管理相关的增强
虚拟化:细化的trap
从Armv7-A开始引入虚拟化以来,arm持续改进虚拟化的支持。一个虚拟化关键的支持是trap虚拟机执行的一些操作。目的是为了虚拟化这些操作或是让hypervisor充当Guest OS的哨兵。

Armv8.6-A改进了第二个使用场景的支持(让hypervisor当着Guest OS的哨兵), 通过细化的trap控制,包括各个系统寄存器,来实现。

WFE traps
Wait-for-Event (WFE)指令让在等待一个事件,比如等一个锁释放,的CPU进入低功耗状态,当WFE在一个虚拟机中执行时,hypervisor通常trap这个WFE指令,让CPU运行其他的workload.

通常wait-for-event的事件会比较快到来,意味着推迟trap WFE可能有利于性能。Arm的研究表明引进延迟可以提高一个未超载系统的吞吐量。为了支持这个功能,Armv8.6-A引进了可配置的trap延迟时间的可选功能。

通用定时器Generic Timer:高精度时间
从Armv7-A开始,arm提供了标准的定时器框架,Generic Timer构架。Armv8.6-A引进了一序列Generic Timer的改进。

Generic Timer提供了一个CNTFREQ_EL0寄存器,用来报告system count的频率,但是给予系统设计选择其频率值的自由。这可能造成在不同频率系统上软件迁移workload的挑战。Armv8.6-A将这个频率标准化为1GHz, 这提供了一致的时间基础。 1GHz也远比Armv8.6-A之前构架的指导频率(译者:1-50MHz)高,因此可以提供更高的精度。

另外,增加了自同步(self-synchronizing)的物理和虚拟system count寄存器,这可以简化代码序列,比如,为了保证在一个内存操作之后的读当前count值的代码。

安全
在Armv8.3-A和Armv8.5-A中,我们引进了指针鉴权(Pointer Authentication, PAC)和 Branch Target Indicators (BTI)的支持。它们一起可以帮助抵抗如ROP和JOP攻击((Return- and Jump-Oriented Programming))技术,明显减少系统中可用的gadget数目。

Armv8.6-A在此基础上改进了指针鉴权(Pointer Authentication)的支持。

在Armv8.3-A中,当鉴权失败时,返回一个无效地址。在很多情况下,这个地址在鉴权指令(AUT*)之后很快会被使用,或做跳转或数据访问。使用这样的指针会导致一个异常。

在有限的情况下,AUT*指令返回的地址不会马上使用,Armv8.6-A引入了2个功能来处理这些情况。

EnhancedPAC2
EnhancedPAC2改变了增加PAC到指针的方式。在Armv8.3-A 中, PAC替换部分指针高bits。而在EnhancedPAC2中,PAC是与指针的高bits进行XOR操作。

FPAC
当一个攻击者可以获取AUT*指令返回的地址时,他们可能采用重复猜测的方式得到这个地址的正确的PAC。

为了对付这种攻击,在Armv8.6-A中加入了一个新扩展(FPAC )。 如果有FPAC功能,当PAC不正确时,AUT*指令会导致异常,从而阻止攻击者重复尝试猜测一个地址的正确PAC。

其他功能
Armv8.6-A也包含一些小功能:

数据gathering hint, 用来表示写merging可能对性能优化没有好处
额外的PMU events
增加Activity Monitor Units (AMU)的虚拟化支持

总结
这篇博文简要介绍了Armv8-A构架中Armv8.6-A 引进的最新功能。这些功能提供了未来CPU在机器学习神经网络,虚拟化这些领域的增强,和改进处理效能的矩阵乘和改进的安全功能。下一步是和我们包括Linaro在内的生态伙伴一起使能开源软件,保证当包含这些功能的硬件可用时,软件已经准备好了。

获取更多细节,请访问我们的开发者网站。

推荐阅读
关注数
8629
内容数
50
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息