Matmul API样例介绍
概述
本样例集介绍了Matmul API不同特性的典型用法,给出了对应的端到端实现。
样例列表
| 目录名称 | 功能描述 | 支持的产品 |
|---|---|---|
| batch_matmul | 批量处理Matmul计算的样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| batch_matmul_bias_reuse | 批量处理Matmul计算时,每个Batch复用同一个Bias矩阵的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| batch_matmul_iterate_n_batch | 多次批量处理Matmul计算的样例,包括非异步场景和异步场景的实现 | Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul | 调用Matmul API实现matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_a2b2_share | 开启 A2(L0A Buffer) 和 B2(L0B Buffer) 全局管理的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_async_iterate | 异步场景下的Matmul样例,实现方式为调用Iterate和GetTensorC输出到VECIN | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_async_iterate_all | 异步场景下的Matmul样例,实现方式为调用IterateAll输出到GM | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_callback | Matmul API模板参数MatmulCallbackFunc的自定义使用方式 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_channelsplit_output | 矩阵乘输出Channel拆分功能的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_co1_output | 用户自主管理CO1(L0C Buffer)的Matmul样例 | Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_constant_tiling | Tiling常量化的Matmul样例,在tiling参数固定的场景下,减少运行时的Scalar开销 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_format_column_major | 输入输出矩阵为COLUMN_MAJOR(列优先)格式排布的Matmul样例 | Ascend 950PR/Ascend 950DT |
| matmul_format_gemv | 实现矩阵向量乘GEMV(General Matrix-Vector multiplication)的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_format_nd_align | 在输入矩阵的N方向非对齐场景下,矩阵乘输出时使能N方向对齐的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_fp8 | A、B矩阵为hifloat8、fp8_e4m3fn、fp8_e5m2数据类型输入的Matmul样例 | Ascend 950PR/Ascend 950DT |
| matmul_fused | 分核AIC、AIV融合编程实现,主要介绍了Matmul高阶API的MIX模式,Matmul API内部会自动控制AIC、AIV的核间同步 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_fused_mannul | 分核AIC、AIV融合编程实现,主要介绍了Matmul高阶API的纯Cube模式,需要调用相关接口实现手动控制AIC、AIV的核间同步 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_ibshareAB | 调开启IBShare功能,复用L1 Buffer上相同的A矩阵或者B矩阵数据的样例,本样例为A矩阵和B矩阵同时复用场景 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_ibshareB | 调开启IBShare功能,复用L1 Buffer上相同的A矩阵或者B矩阵数据的样例,本样例为仅B矩阵复用场景 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_int4 | A、B矩阵为int4b_t数据类型输入的Matmul样例 | Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_k_reorder_load | 使能K轴错峰加载数据特性的Matmul样例,减少多核对Global Memory地址访问冲突概率 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_l0cache | 使能L0缓存特性的Matmul样例,减少MTE1重复搬运 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_l2cache | 使能L2 Cache切分特性的Matmul样例,提高L2 Cache的利用率 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_mixdualmaster | 使能双主模式(MixDualMaster)的Matmul样例,AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_mn_double_buffer | M/N轴方向的流水并行的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_multi_core_unaligned | 多核非对齐切分,即多核切分尾块的实际计算量小于tiling中对应参数的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_mx | 在MXFP4/MXFP8数据格式下的带有量化系数的矩阵乘法,即MxMatmul样例 | Ascend 950PR/Ascend 950DT |
| matmul_mx_scale_cache | 在MXFP4/MXFP8数据格式下,量化系数矩阵scale在L1 Buffer上开启多倍缓存的MxMatmul样例 | Ascend 950PR/Ascend 950DT |
| matmul_mx_ub_tscm_nz | 在MXFP4/MXFP8数据格式下,使用用户自定义TSCM、VECOUT的输入的MxMatmul样例 | Ascend 950PR/Ascend 950DT |
| matmul_nbuffer33 | NBuffer33算法的Matmul样例,实现搬入搬出带宽平衡从而提升效率 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_partial_output | Matmul高阶API实现开启Partial Output功能的样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_preload | M/N方向预加载的Matmul样例,可以减少MET2间隙 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_quant | 输出随路反量化的Matmul样例,支持同一系数的反量化模式和向量的反量化模式 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_sparse | 4:2稀疏矩阵乘(Sparse Matmul)的Matmul样例,可以减少矩阵乘计算时的内存占用和计算量 | Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_splitk | 多核切K场景下的Matmul样例,将输入矩阵沿K轴切分后分配到多核上并行处理 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_splitm | 多核切M场景下的Matmul样例,将输入矩阵沿M轴切分后分配到多核上并行处理 | Ascend 950PR/Ascend 950DT |
| matmul_triangle | TrianUpperMatmulPolicy(上三角模板策略)和TrianLowerMatmulPolicy(下三角模板策略)的Matmul样例 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_tscm | 使用数据来源为GM的用户自定义TSCM的输入的Matmul样例,开发者可以自主管理L1 Buffer以高效利用硬件资源 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_tscm_src_vecout | 使用数据来源为VECOUT的用户自定义TSCM的输入的Matmul样例,开发者可以自主管理L1 Buffer以高效利用硬件资源 | Ascend 950PR/Ascend 950DT |
| matmul_unitflag | 使能UnitFlag功能的Matmul样例,使样例中的CUBE计算流水与FIXPIPE数据搬出流水并行 | Ascend 950PR/Ascend 950DT Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
| matmul_vecout | 使用用户自定义VECOUT的输入的Matmul样例,开发者可以自主管理Unified Buffer以高效利用硬件资源 | Ascend 950PR/Ascend 950DT |