matmul

功能说明

给定两个输入的张量a和b。进行矩阵相乘,输出到结果张量中。

支持的输入和输出数据类型请参见:表2

函数原型

matmul(dst, a, b, m, k, n, init_l1out=True)

参数说明

表1 参数说明

参数名称

输入/输出

含义

dst

输出

矩阵相乘结果操作数的起始element, 支持的数据类型请参考表2,Tensor的scope为L1OUT。

结果张量格式:[N1, M, N0],N = N1 * N0

  • N1 = Ceiling(n/N0); n 为n方向的大小,具体请看n参数说明;Ceiling表示向上取整。
  • M = Ceiling(m/M0)*M0;M0 = 16;m为m方向的大小,具体请看m参数说明。
  • N0 =16

a

输入

源操作数,左矩阵Tensor,支持的数据类型请参考表2, Tensor的scope为L1。

输入张量格式:[K1, M, K0], K = K1 * K0

  • K1 = Ceiling(k/K0); k为k方向的大小,具体请看k参数说明;Ceiling表示向上取整。
  • M = Ceiling(m/M0)*M0;M0 = 16;m为m方向的大小,具体请看m参数说明。
  • K0:当输入张量a的数据类型为float16时,K0=16, 数据类型为立即数(int);当输入张量a的数据类型为int8时,K0=32,数据类型为立即数(int)。

b

输入

源操作数,右矩阵Tensor,支持的数据类型请参考表2, Tensor的scope为L1。

输入张量格式:[K1, N, K0], K = K1 * K0

  • K1 = Ceiling(k/K0); k为k方向的大小,具体请看k参数说明;Ceiling表示向上取整。
  • K0:当输入张量b的数据类型为float16时,K0=16, 数据类型为立即数(int);当输入张量b的数据类型为int8时,K0=32, 数据类型为立即数(int)
  • N = N1* N0;N1 = Ceiling(n/N0); n为n方向的大小,具体请看n参数说明;N0 = 16。

m

输入

左矩阵有效Height,范围:[1, 4096],支持的数据类型为:立即数(int)。

注意:m可以不是16的倍数。

k

输入

左矩阵有效Width、右矩阵有效Height,支持的数据类型为:立即数(int)。

当输入张量a的数据类型为float16时,范围:[1, 16384]

当输入张量a的数据类型为int8时,范围:[1, 32768]

注意:k可以不是16的倍数。

n

输入

右矩阵有效Width,范围:[1, 4096],支持的数据类型为:立即数(int)。

注意:n可以不是16的倍数。

init_l1out

输入

表示dst是否需要初始化。支持的数据类型为:bool类型。默认值为True。

  • True:dst初始矩阵中数据无意义,计算结果直接覆盖dst中的数据。
  • False:dst初始矩阵保存有之前结果,新计算结果会累加前一次matmul 计算结果。
表2 a、b和dst的数据类型组合

a.dtype

b.dtype

dst.dtype

int8

int8

int32

float16

float16

float32

支持的芯片型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

注意事项

返回值

调用示例