文件最后提交记录最后更新时间
修复950分支下gm2l1搬运zN2zN在大k场景下精度问题 Co-authored-by: longjihui<longjihui@huawei.com> # message auto-generated for no-merge-commit merge: !550 merge fix_950_gm_to_l1 into master 修复950分支下gm2l1搬运zN2zN在大k场景下精度问题 Created-by: longjihui Commit-by: longjihui Merged-by: cann-robot Description: ## 描述 (1)修复950分支gm2l1的zN2zN在大k场景下stride超表示范围(uint16)导致的精度问题; (2)提供双标杆精度比对方法 ## 关联的Issue https://gitcode.com/cann/catlass/issues/146 ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/7631999/c648d97b-4e37-4efc-8cf8-bfd38b1ce015/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5501 个月前
文档新增中英文目录、低错整改,及代码实践类文档更新 Co-authored-by: sunhao_hw<sunhao203@huawei.com> # message auto-generated for no-merge-commit merge: !555 merge docs into master 文档新增中英文目录、低错整改,及代码实践类文档更新 Created-by: sunhao_hw Commit-by: sunhao_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - docs下新增zh和en目录,原始文档迁移到zh下 - 仓内文档的批量低错整改 - docs/zh/01_Practice下补充完善部分文档 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5551 个月前
修复950分支下gm2l1搬运zN2zN在大k场景下精度问题 Co-authored-by: longjihui<longjihui@huawei.com> # message auto-generated for no-merge-commit merge: !550 merge fix_950_gm_to_l1 into master 修复950分支下gm2l1搬运zN2zN在大k场景下精度问题 Created-by: longjihui Commit-by: longjihui Merged-by: cann-robot Description: ## 描述 (1)修复950分支gm2l1的zN2zN在大k场景下stride超表示范围(uint16)导致的精度问题; (2)提供双标杆精度比对方法 ## 关联的Issue https://gitcode.com/cann/catlass/issues/146 ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/7631999/c648d97b-4e37-4efc-8cf8-bfd38b1ce015/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5501 个月前
README.md

950BasicMatmulTla Example Readme

注意:社区包暂不支持950能力,后续支持的版本敬请期待

代码组织

├── 43_ascend950_basic_matmul
│   ├── CMakeLists.txt     # CMake编译文件
│   ├── README.md
│   └── basic_matmul_tla.cpp # 主文件

使用示例

  • 获取代码之后编译相应的算子可执行文件,可参考quickstart,本用例为950算子,编译时需加-DCATLASS_ARCH=3510
  • 执行算子
# 编译指定用例
bash scripts/build.sh 43_ascend950_basic_matmul -DCATLASS_ARCH=3510
cd output/bin
# 可执行文件名 |矩阵m轴|n轴|k轴|Device ID
# Device ID可选,默认为0
./43_ascend950_basic_matmul 256 512 1024 0

执行结果如下,说明精度比对成功。

Compare success.

使用说明

BasicMatmul默认使用的DispatchPolicy MmadPingpong支持以下几个模板参数:

模板参数 默认值 参数说明
ArchTag 指定架构型号
enableUnitFlag false 是否开启Unitflag,开启L0C多缓冲时必须设置为false
useHF32 false 是否开启HF32,仅float类型支持
l0CStages 1 指定L0C的缓冲区数量,设置为2即可开启L0C双缓冲
enableL1Resident false 是否开启L1常驻
l1AStages 2 L1上加载矩阵A的Buffer数量
l1BStages 2 L1上加载矩阵B的Buffer数量
l0AStages 2 L0上加载矩阵A的Buffer数量
l0BStages 2 L0上加载矩阵B的Buffer数量

设矩阵Shape为M N K, L1上的分块大小为m1 n1 k1,M方向的分块数量mTiles = CeilDiv(M, m1),N方向的分块数量nTiles = CeilDiv(N, n1),总任务数为taskBlocks = mTiles * nTiles,在以下两种情况下可以选择开启enableL1Resident:

1.mTiles = 1,且nTiles > CoreNum,且K < 2 * k1。此时还可以设置l0CStages=2(需要关闭enableUnitFlag),如果空间不足无法设置l0CStages=2,则将n1设置为原来的一半。

2.nTiles = 1,且mTiles > CoreNum, 且K < 2 * k1。此时还可以设置l0CStages=2(需要关闭enableUnitFlag),如果空间不足无法设置l0CStages=2,则将m1设置为原来的一半。

BasicMatmul还支持DispatchPolicy MmadPreloadAsyncWithCallback,支持以下几个模板参数:

模板参数 默认值 参数说明
ArchTag 指定架构型号
preloadStages 指定预加载的次数
l1AStages 2 L1上加载矩阵A的Buffer数量
l1BStages 2 L1上加载矩阵B的Buffer数量
l0AStages 2 L0上加载矩阵A的Buffer数量
l0BStages 2 L0上加载矩阵B的Buffer数量
l0CStages 1 指定L0C的缓冲区数量,设置为2即可开启L0C双缓冲
enableUnitFlag false 是否开启Unitflag,开启L0C多缓冲时必须设置为false
enableShuffleK false 是否开启K方向错位读取
useHF32 false 是否开启HF32,仅float类型支持
enableL1Resident false 是否开启L1常驻

相比MmadPingpongMmadPreloadAsyncWithCallback多两个模板参数,一个是preloadStages,此参数一般设置为1即可,指定预加载次数,当该参数设置为1时,第一个循环只进行数据加载,不进行matmul计算,第二轮循环先加载第二轮循环的数据,然后完成上一轮循环的Matmul计算,依此类推,最后循环结束后,会补一次Matmul计算。这样做的好处是,当前计算Matmul需要的数据,在上一轮就搬运好了,做到了指令的提前发射,缓解了指令发射延迟造成的性能损失。

第二个参数是enableShuffleK,该参数主要为了规避同地址访问冲突造成带宽损失,主要原理是错开各个核心的数据读取地址。950上不需要启用该参数。

相比MmadPingpongMmadPreloadAsyncWithCallback的优化点更多,但是逻辑也更复杂,Scalar开销更大,需要根据场景酌情使用,尤其是小Shape场景。