---
title: 毕昇自动使能矩阵计算加速
description: "为了提高矩阵计算相关指令在应用中的利用率，最新版本毕昇编译器加入了自动矩阵化能力，通过静态分析识别应用源码中存在的GEMM、SYR2K等典型计算模式，并获取行指标、列指标、维度等关键计算信息，在不影响程序正确性的前提下生成矩阵化的指令，提高程序性能。在应用程序编译时，可通过增加编译选项'-mcpu=hip11'、'-foptimize-loops'等来使能矩阵计算加速。举例如下："
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/KunpengDeveloper/usermanual/topic_0000002535456072.html
sourcePath: /source/zh/kunpenghpcs/KunpengDeveloper/usermanual/topic_0000002535456072.html
indexId: 499f4973a9df5e5f7d0a3e13dbca77d8dc9d61cd0424d9256a8e2ceec412f5ac78
---
# 毕昇自动使能矩阵计算加速

为了提高矩阵计算相关指令在应用中的利用率，最新版本毕昇编译器加入了自动矩阵化能力，通过静态分析识别应用源码中存在的GEMM、SYR2K等典型计算模式，并获取行指标、列指标、维度等关键计算信息，在不影响程序正确性的前提下生成矩阵化的指令，提高程序性能。在应用程序编译时，可通过增加编译选项'-mcpu=hip11'、'-foptimize-loops'等来使能矩阵计算加速。举例如下：

编译命令：

```
clang -mcpu=hip11 -O1 -foptimize-loops gemm.c
```

源文件gemm.c的内容如下：
```
void gemm(int M, int N, int K, float ALPHA, float *A, int lda, float *B, int ldb, float *C, int ldc) {
int i, j, k;
for(i = 0; i < M; ++i){
for(j = 0; j < N; ++j){
float sum = 0;
for(k = 0; k < K; ++k){
sum += ALPHA * A[i * lda + k] * B[j + ldb * k];
}
C[i + ldc * j] += sum;
}
}
}
```


1、编译优化等级要求>=O1；

2、可以通过增加编译选项'-S'生成编译后的汇编文件，检测是否存在'fmopa'指令以确认是否成功使能矩阵计算加速。
