---
title: MatMul
description: "执行两个矩阵之间的乘法运算。"
url: https://www.hikunpeng.com/document/detail/zh/boostsra/srainference/SRA_Inference/kunpengsra_inference_16_0017.html
sourcePath: /source/zh/boostsra/srainference/SRA_Inference/kunpengsra_inference_16_0017.html
indexId: bb5c40d55917c3cde8d006d3bfb0b0f1a3b4fad5aa4e3853f89d3975e346402e80
---
# MatMul

#### 接口功能

执行两个矩阵之间的乘法运算。


#### 函数原型

```
int Matmul(T *blockA, T *blockB, T *output, MatMulParams<T> &M);
```


- 该接口只接受一维张量作为输入。
- 
  模板类型T：支持float，double。

- 指针有效空间由用户指定。
- 保证输入指针的有效空间相互不重叠。


#### 参数说明

| 参数 | 输入/输出 | 说明 | 约束 |
| --- | --- | --- | --- |
| blockA | 输入 | 矩阵用于乘法运算。 | 指针不为空，且只接受一维张量。矩阵中不包含NaN或者INF，需用户保证，防止计算结果未定义。 |
| blockB | 输入 | 矩阵用于乘法运算。 | 指针不为空，且只接受一维张量。矩阵中不包含NaN或者INF，需用户保证，防止计算结果未定义。 |
| output | 输入 | 用于存储计算结果，构成的张量，作为输出。 | 指针不为空，且只接受一维张量。 |
| M | 输入 | 用于乘法运算的参数结构体，包括： order：矩阵存储顺序（行优先或列优先） transA：A矩阵是否转置 transB：B矩阵是否转置 m：A矩阵的行数 n：B矩阵的列数 k：A矩阵的列数或B矩阵的行数 alpha：alpha参数 lda：A矩阵存储步长 ldb：B矩阵存储步长 beta：beta参数 ldc：C矩阵存储步长 | m，n，k均大于0。 order为行优先时， 若transA为未转置，则lda=k； 若transA为转置，则lda=m； 若transB为未转置，则ldb=n； 若transB为转置，则ldb=k;ldc=n。 order为列优先时， 若transA为未转置，则lda=m； 若transA为转置，则lda=k； 若transB为未转置，则ldb=k； 若transB为转置，则ldb=n;ldc=m。 alpha与beta不为NaN或者INF，需用户保证，防止计算结果未定义。 |
