---
title: Demo介绍
description: "1. 请从  GitHub(https://github.com/kunpengcompute/devkitdemo/tree/main/Hyper_tuner/testdemo/matrix_multiplication)"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/profiler/demo/KnowHow_0010.html
sourcePath: /source/zh/kunpengdevps/profiler/demo/KnowHow_0010.html
indexId: 6497cbc1deda1fea359b2a157a6b4040b473387da801d769203d760627b6f5fa55
---
# Demo介绍

1. 请从  GitHub(https://github.com/kunpengcompute/devkitdemo/tree/main/Hyper_tuner/testdemo/matrix_multiplication)
获取Demo。
2. Demo主要用于完成两个矩阵的相乘。
  图1 矩阵相乘示意

3. 编译方式。
  主要使用Make，支持编译出两个二进制文件matmul_nokml，matmul。

  构建鲲鹏数学库（Kunpeng Math Library，KML）版本时，需要先安装鲲鹏数学库(https://www.hikunpeng.com/boostkit/library/detail?subtab=数学库)，并设定KML_INCLUDE和KML_LIB环境变量。

4. Demo用法。

```
./matmul
size
method
[test_correctness
]
```


  - size（必选参数）：矩阵的行列大小，需要为2的幂次，例如512、1024、2048、4096等。
  - method（必选参数）：matmul_nokml可以使用0-5，matmul可以使用0-6。
  - test_correctness（可选参数）：如果选择true，则会对矩阵计算的准确性进行校验，默认为false。

**表1 method描述表**

| method | 描述 |
| --- | --- |
| 0 （base\_matmult） | 基础串行计算。 |
| 1 （parallel\_matmult） | 在0（base\_matmult）的基础上实现一般OMP并行计算。 |
| 2 （transpose\_B\_matmult） | 在1（parallel\_matmult）的基础上增加矩阵转置优化。 |
| 3 （change\_loop\_order\_matmult） | 类似2（transpose\_B\_matmult）的优化，通过改变计算循环方式。 |
| 4 （block\_transpose\_B\_matmult） | 在2（transpose\_B\_matmult）的基础上增加矩阵内部块循环优化。 |
| 5 （intrinsics\_transpose\_B\_matmult） | 在4（block\_transpose\_B\_matmult）的基础上增加Arm Neon向量化计算优化。 |
| 6 （kml\_matmult） | 使用鲲鹏数学库优化。 |


method 2和method 3是同一种优化手段的变体，是用于改进读取矩阵B的内存访问顺序。


5. Demo默认使用float类型进行计算，增加编译选项“-DDOUBLE_TYPE”可使用double类型进行计算。
6. 通过修改OMP_NUM_THREADS可以设定并行数，不设定时默认使用物理核数，使用method 4（block_transpose_B_matmult）时，需要显式指定并行数。
