DCU 上的 Matrix Core 编程(part2)
Matrix Core 上矩阵乘指令的基本格式
我们考虑矩阵乘:
其中,A 矩阵是 的(M 行、K列,后续记号也是一样的含义), B 矩阵是 的, C、D 矩阵都是 的。
对应的 API 的格式为: d = __builtin_amdgcn_mmac_CDFmt_MxNxKABFmt(a, b, c);
其中,约定如下:
- ABFmt:、 矩阵中元素的精度,可以是 f16、f32、f64、bf16、tf16、i8、u8 等。
- CDFmt:、 矩阵中元素的精度,可以是 f16、f32、f64、bf16、tf16、i8、u8 等,如果 CDFmt 和ABFmt 一样,则省略 CDFmt。
- M、N、K:对应上面表述的 A、B、C、D 矩阵的行列数:
- mA[M][K]: 输入矩阵A;
- mB[K][N]: 输入矩阵B;
- mC[M][N]: 累加输入矩阵C;
- mD[M][N]: 累加结果矩阵D。
- a:向量寄存器(VGPRs),用于存储输入矩阵 A;
- b:向量寄存器(VGPRs),用于存储输入矩阵 B;
- c:向量寄存器(VGPRs),用于存储累加输入矩阵 C;
- d:向量寄存器(VGPRs),用于存储累加结果矩阵 D。
虽然 AMD 也有类似的文档,但其指令格式和 DCU 上还是有很多差异(AMD 用的是 MFMA形式,如 v_mfma_f32_16x16x4_f32
(AMD) vs v_mmac_16x16x4_f32
(DCU) ),所以本教程适合中国宝宝。
我们可以看到,相对于AMD 的指令,DCU 上的指令似乎参数要少。