被Armv9 重点引入的SVE2是何方神圣?

2021-04-06 12:10:34 来源:EETOP编译整理

3月30日,Arm召开了最新架构Armv9的发布会,并展示了SVE的高级形式“ SVE2”的存在。

在Armv9发布时,Arm发布了《SVE2简介》,从这本白皮书中我们可以大概了解一下SVE2。

可伸缩矢量扩展-SVE(Scalable Vector Extension)是Arm AArch64架构下的下一代SIMD指令集,旨在加速高性能计算。

而SVE2本质上是SVE的扩展,但是最初的SVE是针对HPC的(因此第一个实现是富士通的A64FX),而SVE2实现了NEON兼容的指令。从某种意义上说,最大的不同是它被定位为NEON的后继产品(Photo01)。

Photo01:正如我将在后面详细解释的那样,它比SVE更易于使用。

Photo02展示了SVE2的主要功能,SVE是为HPC设计的,从某种意义上说,配置上已经完全放弃了对NEON的兼容,但是SVE2是非常接近NEON的配置。

Photo02:显示了指令的预期用途。

同时,与SVE相比,它可以实现灵活的数据访问,并可用于广泛的应用。虽然考虑到要维持对SVE的向后兼容性,但是只有ID 寄存器需要变更,反过来说只要对应就可以了。蓝色标记的功能是NEON或SVE提供的功能。例如,在“ NEON型DSP指令”的情况下,它最初来自NEON一代。

  • 基于块(恒定数据块单元)的数据处理,例如FFT和矩阵运算
  • 视频/音频编解码器,包括MPEG-4和H.264
  • 2D / 3D图形
  • 色彩空间转换
  • 物理模拟
  • CRC, Reed-Solomon,椭圆曲线密码等

这种处理方式原本是DSP的特长,这种指令被称为DSP式的 "指令",但已经被原封不动地接管了。但是,究竟是指令本身兼容,还是编写了具有相同功能的指令(指令本身不兼容),目前还不清楚。换句话说,目前还不清楚是否会包含类似DSP的 "机制",比如Helium中包含的Low Overhead Branch Extension。

“Cross-lane match detect/count”以后的特征主要是继承自SVE。

新功能是与比特Bit shuffle和加密相关的指令。由于指令集列表尚未发布(当前仅是SVE),所以目前还不是很清楚,但是看起来它的配置与x86 SSE / AVX非常相似。

从NEON转到这里有一个小障碍。是指将操作的结果做成不同大小时的对应关系(Photo03)。

Photo03:所以在NEON中使用这样的用法的情况下,重写起来有点麻烦也是没办法的事

NEON的宽度固定为128bit,而SVE/SVE2的最小单位为128bit,可扩展到2048bit宽度。仔细想想,NEON的方法也不是不可以,但是需要考虑一下。特别是可扩展性部分,很麻烦,需要根据SVE寄存器的大小,从程序上处理 "数据放在哪里"。与此相比,SVE方法具有可扩展性和易部署性。

这是NEON与128/256 / 512bit SVE(Photo04)之间的性能比较。

Photo04:柱状图(左轴)为矢量化率,折线(右轴)为性能比

这是之前在安藤教授的文章中出现的一张幻灯片,根据应用的不同,性能提升率自然也会发生变化,但差别还是蛮大的:在NAS Parallel Benchmark中提升了2倍,在ASC Coral HACC中提升了8倍。

那么SVE2呢? SVE2的性能与HPC的SVE相同(SVE2并没有进一步提高性能),但DSP/多媒体的性能是128bit的1.2倍,256bit的2倍,512bit的3.5倍(Photo05)。

Photo05:即使使用相同的宽度(128位),速度也将快约1.2倍,但本质在于,它很容易加宽宽度并相应地加快速度。

Photo06是对范围更广的应用程序的比较。

Photo06:与上面的Photo05一样,竖线是矢量化率,折线是性能提高率。比较为NEON×2与128位SVE2×2与256位SVE2×2

如果矢量化效果不好(如eembc_automotive_idctrn01),性能与VNEON相差不大,但如果矢量化效果好,性能将大大提高。

顺便说一句,除此以外,在Linano Connect Bangkok 2019上推出的“ Arm Architecture中的新技术”不仅包括SVE2,还包括笔者在此介绍的Transaction Memory(Photo07)。

Photo07:Arm本身还是只在少数CPU IP中支持多线程,但也有一些CPU支持4路SMT,比如Marvell(原Broadcom的)Thunder X2。内存被认为对同步这些处理器很有用。

首先,虽然对事务内存(Transaction Memory)的研究已经广泛开展了一段时间,但IBM的POWER8是第一个在量产产品中实现的。接下来,英特尔在Haswell一代支持它为TSX(事务同步扩展),但以AMD为例,现在也不支持事务存储。它不一定是一个广泛使用的功能。

Arm目前还没有宣布会支持这一功能,但据说将来的Arm处理器将支持它 (Photo07)。

在执行TME时,自然会假设有两个或更多的线程会尝试访问相关的内存区域,因此在某些情况下可能无法建立事务(回滚)。其实现方式是将每个线程的状态写入状态寄存器并返回(Photo09)。

Photo 08

Photo09

顺便说一句,事务内存通常有两种类型的方法,即HLE(硬件锁定清除)和RTM(受限跨转录存储),并且Intel支持这两种方法,但是Arm似乎仅支持HLE(照片10)。

Photo10:不幸的是,没有关于为什么不支持RTM的解释

HLE和RTM之间的区别在Ando博士的评论中也有详细介绍,因此,如果您阅读此书,请查看用法示例(Photo 11),它与Intel的TSX尽可能接近。

Photo11:确切地说,这类似于将HLE与TSX一起使用

截至目前,Arm还没有透露哪一代Arm内核将支持TME,但似乎不久之后LLVM和GNU Tools/Glibc就已经支持了。当然,在智能手机中使用TME的意义不大,所以我认为它只适用于Neoverse,但如果在不久的将来支持它,我不会感到惊讶。

  1. EETOP 官方微信

  2. 创芯大讲堂 在线教育

  3. 创芯老字号 半导体快讯

相关文章

全部评论

  • 最新资讯
  • 最热资讯
X
Baidu