| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |
symmMatmul Example Readme
功能说明
-
算子功能:完成对称矩阵乘法计算(75_symm),利用输入矩阵的对称性,仅读取上三角(或下三角)有效数据,通过 direct/transpose 双路径完成等价的全量矩阵乘。
-
计算公式:
左侧对称矩阵乘(
symmSide=0,要求M == K):C=S×BC = S \times B
其中 SS 是 M×MM \times M 对称方阵(S=STS = S^T),BB 是 K×NK \times N 的普通矩阵。
右侧对称矩阵乘(
symmSide=1,要求K == N):C=B×SC = B \times S
其中 BB 是 M×KM \times K 的普通矩阵,SS 是 N×NN \times N 对称方阵。
-
支持上三角(
symmFill=1)和下三角(symmFill=0)两种有效数据区域。
参数说明
以下是本样例的命令行参数:
| 参数名 | 描述 | 默认值 |
|---|---|---|
m |
输出矩阵 C 的行数 | 必填 |
n |
输出矩阵 C 的列数 | 必填 |
k |
GEMM 归约维度 | 必填 |
deviceId |
使用的 NPU 卡 ID | 0 |
symmSide |
对称矩阵所在侧:0=LEFT(C=S×B),1=RIGHT(C=B×S) |
1 |
symmFill |
有效三角区域:1=UPPER(上三角),0=LOWER(下三角) |
1 |
Shape 约束
| 模式 | 约束 | 原因 |
|---|---|---|
LEFT(symmSide=0) |
M == K |
左侧操作数必须是方阵 |
RIGHT(symmSide=1) |
K == N |
右侧操作数必须是方阵 |
支持的数据类型
当前示例固定使用 float(fp32):
| ElementA | ElementB | ElementC | Layout |
|---|---|---|---|
float |
float |
float |
RowMajor |
代码组织
examples
├── 75_symm
│ ├── CMakeLists.txt # CMake 编译文件
│ ├── 75_symm.md # 设计文档
│ ├── README.md
│ └── 75_symm.cpp # 主文件(包含 host 数据生成、kernel 调度、正确性验证)
使用示例
-
编译样例代码:
bash scripts/build.sh 75_symm -
执行算子样例程序:
cd output/bin # 可执行文件名 |矩阵m轴|n轴|k轴|Device ID|symmSide|symmFill # 左乘 + 上三角:C = S(M×M) × B(M×N),S 上三角有效 ./75_symm 768 4096 768 0 0 1 # 左乘 + 下三角 ./75_symm 768 4096 768 0 0 0 # 右乘 + 上三角:C = B(M×K) × S(K×K),S 上三角有效 ./75_symm 4096 768 768 0 1 1 # 右乘 + 下三角 ./75_symm 4096 768 768 0 1 0参数含义依次为:
m n k deviceId symmSide symmFill。 -
执行成功输出:
Compare success.