文件最后提交记录最后更新时间
7 天前
9 天前
9 天前
9 天前
README

MatrixInverse Example Readme

功能说明

  • 算子功能:完成方阵的矩阵求逆计算

  • 计算方法:基于LU分解与部分选主元(LU decomposition with partial pivoting)

    矩阵求逆计算 A−1A^{-1},满足 A×A−1=IA \times A^{-1} = I,其中 AA 为输入方阵,II 为单位矩阵。

    本算子采用LU分解算法:

    PA=LU PA = LU

    其中 PP 为排列矩阵,LL 为下三角矩阵,UU 为上三角矩阵。通过求解 UX=L−1PUX = L^{-1}P 得到逆矩阵。

参数说明

以下是本样例的运行参数:

参数名 描述 约束
N 方阵的行/列数 N>0N > 0,且矩阵必须非奇异
deviceId 使用的NPU卡ID(默认0) 在设备NPU有效范围内

MatrixInverse所涉及的关键模板参数如下:

模板参数 说明 有效范围
Element 矩阵的数据类型 float | fp16_t | bfloat16_t
Layout 矩阵的排布方式 layout::RowMajor

约束说明

  • 输入矩阵必须是方阵(行数等于列数)
  • 输入矩阵必须是非奇异矩阵(行列式不为零)
  • 为保证数值稳定性,本样例生成对角占优(diagonally dominant)的随机测试矩阵

代码组织

├── 78_matrix_inverse
│   ├── CMakeLists.txt      # CMake编译文件
│   ├── README.md
│   └── matrix_inverse.cpp  # 主文件

使用示例

  1. 编译样例代码,并编译生成相应的算子可执行文件。
bash scripts/build.sh 78_matrix_inverse
  1. 切换到可执行文件的编译目录output/bin下,执行算子样例程序。测试样例数据随机生成(对角占优矩阵),尺寸从命令行输入。
cd output/bin
./78_matrix_inverse 128 0
  • 128:方阵的维度N(128×128矩阵)

  • 0:Device ID,可选,默认为0

执行结果如下,说明样例执行成功。

Matrix Inverse: N=128, device=0
Compare success.

性能说明

矩阵求逆的计算复杂度为 O(N3)O(N^3),约需 2N32N^3 次浮点运算。样例代码中包含被注释的精度统计与GFLOPS计算代码,可在需要时启用进行性能分析。