鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

SME简介

矩阵乘在计算仿真、机器学习等领域扮演着十分重要的角色,SME(Scalable Matrix Extension)是Armv9中新增加的基于矩阵外积运算的指令集扩展,它在SVE/SVE2的已有能力之上,针对矩阵运算扩充了多种能力:如独立的矩阵存储单元ZA,高效的矩阵外积乘指令及矩阵向量间的数据移动指令,以及流模式(streaming mode)。自4.0.0版本开始,毕昇编译器对ACLE SME(Beta)SME ABI进行了支持, 并提供了对典型计算模式进行自动识别并生成SME指令的自动矩阵化能力,目前支持GEMM/SYR2K算子及其变种。

毕昇编译器不包含SME2内容支持

流模式

SME指令需要在AArch64流模式(streaming mode)下执行。流模式与非流模式(non-streaming mode)有不同的z寄存器和p寄存器宽度,流模式下的z寄存器宽度用SVL(streaming vector length)表示,非流模式下的z寄存器宽度用NSVL(non-streaming vector length)表示,两种模式下p寄存器宽度分别为SVL/8与NSVL/8。

920 72F8机器中,SVL与NSVL均为64,即z寄存器宽度均为64 bytes。

存储单元

ZA是一块核内私有的SVL.B x SVL.B(SVL的byte数量,如SVL=256时SVL.B=32)字节大小的存储单元,SME中的矩阵运算指令即是将运算结果存放在此块区域。如下图所示(图片来自Arm):

SME矩阵操作类型

SME支持的向量外积运算类型如下:

表1 SME支持的向量外积运算类型

输出矩阵(类型)

输入向量(类型)

920 72F8是否支持

对应编译器特性扩展名

INT32

INT8 * INT8

sme-i8i32

INT32

INT32

sme-i32i32

FP32

BF16 * BF16

sme-bf16f32

FP32

FP16 * FP16

sme-f16f32

FP32

FP32 * FP32

sme-f32f32

INT64

INT16 * INT16

sme-i16i64

FP64

FP64 * FP64

sme-f64f64

毕昇编译器支持显示添加sme、sme-f64f64、sme-fa64, 其他特性隐式包含在sme中