文件最后提交记录最后更新时间
泛化工程:CommonMatmul文档 Co-authored-by: 祝松祥<zhusongxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !389 merge zsx/doc1 into master 泛化工程:CommonMatmul文档 Created-by: weixin_42818618 Commit-by: 祝松祥 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 添加CommonMatmul说明文档。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3895 个月前
update license Co-authored-by: Yao Weijie<yaoweijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !401 merge update-license into master update license Created-by: lavateinn Commit-by: Yao Weijie Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 单核切K相关模板更新license ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:更新license See merge request: cann/catlass!4015 个月前
泛化工程:单核切K系列模板 Co-authored-by: Yao Weijie<yaoweijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !358 merge singlecore-splitk into master 泛化工程:单核切K系列模板 Created-by: lavateinn Commit-by: Yao Weijie Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 泛化工程:新增单核切K系列模板 Block层 1. 每次传入的粒度为A(m1, k1), B(k1, n1), C(m1, n1),然后再block层中在L1上对ABC矩阵按照L0的粒度进行切分,实际分成CeilDiv(m1, m0) * CeilDiv(n1, n0)次计算 2. L1上A和B的STAGES独立配置,复用L1A时,L1A不开db, L1A_STAGES=1,L1B_STAGES=2,复用L1B时同理 3. L0C支持unitFlag和doubel buffer写出,当L0C_STAGES=1时 可配置unitFlag=true/false,当L0C_STAGES>1时,unitFlag必须为false,L0C是否开db影响 L0的tileshape 4. 传入isAtomicAdd参数控制写出时是否在gmC上原子加 5. 在泛化工程中传入动态的tiling需要 1. SingleCoreSplitkForSmallK和PaddingSingleCoreSplitkForSmallK (非padding和padding版本) 针对 K <= k1 的特殊场景,对每个C block写出一次 ElementC;padding版本gmWC分配方式为全局,计算时写出到gmWC,计算完成后vector从gmWC搬运到gmC 2. PaddingSingleCoreSplitkKLoopOuter K循环外置的版本 K > k1 的场景,写出类型为ElementAccumulator类型,在gmC上原子加,分核策略是按照C矩阵的block平铺分核每个核处理 CeilDiv(M, m1) * CeilDiv(N, n1) / coreNum个C基本块,gmWC 分配方式为全局 3. PaddingSingleCoreSplitkKLoopMiddle K循环中置的版本 K > k1的场景,写出类型为ElementAccumulator类型,在C矩阵上按照 (m1*m1Factor, n1*n1Factor)的大块粒度进行swizzle和分核,每次按照单核切K的方式完成 (m1*m1Factor, n1*n1Factor)粒度的局部结果,再处理下一个大块; 在计算大块的时候,m1Factor <= n1Factor的时候复用A,m1Factor > n1Factor复用B; gmWC分配方式为局部,分配了m1*m1Factor*n1*n1Factor*2*coreNum的内存,每次处理大块的时候写出到大块大小的gmWC上,计算完成一个大块时vector将这一块的结果搬运到gmC上 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3585 个月前
【task】更新license Co-authored-by: yuantao<taoyuan15@h-partners.com> # message auto-generated for no-merge-commit merge: !399 merge master into master 【task】更新license Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3995 个月前
泛化工程:CommonMatmul文档 Co-authored-by: 祝松祥<zhusongxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !389 merge zsx/doc1 into master 泛化工程:CommonMatmul文档 Created-by: weixin_42818618 Commit-by: 祝松祥 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 添加CommonMatmul说明文档。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3895 个月前
【task】更新license Co-authored-by: yuantao<taoyuan15@h-partners.com> # message auto-generated for no-merge-commit merge: !399 merge master into master 【task】更新license Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3995 个月前
README.md

DynamicOptimizedMatmul Example Readme

1 背景

在当今高性能计算核深度学习领域,矩阵乘法(Matmul)作为核心算子,其计算效率和泛化性的重要性无需赘述。对计算效率来说,常见的评价指标是算力利用率,也就是实际Flops/理论Flops。而泛化性很难以单一指标评价,在一些业务场景中,Matmul的输入范围变化很大,如推荐场景,MNK变化范围在100000量级,要求在这个范围下,整体有一个不错的性能,也就是泛化性的要求。相比于特定场景(某一类shape)、特定shape的性能要求来说,泛化性提出了更高的要求。

2 文档索引和约束说明

2.1 工程说明

泛化Matmul工程结构说明请参考:工程结构说明

工程默认编译成静态库,如果想编译成动态库,请把CMakeLists.txt中的STATIC改为SHARED,并手动export动态库路径。 工程编译前会调用python脚本生成代码,具体包括调用各模板的外围代码,以及launch_map.h(包含tilingKey和具体Kernel的映射关系)。

DynamicOptimizedMatmul根据shape动态确定Tiling参数,并尽力选择最好的模板进行计算,尽力获取最优性能,但是不保证是最优性能。

2.2 模板文档

模板名称 说明
CommonMatmul 基础模板
SmallMatmul 文档待补充...
MultiCoreSplitkMatmul 文档待补充...
StreamkMatmul 文档待补充...
SingleCoreSplitkMatmul 文档待补充...

2.3 相关约束

  1. A、B、C矩阵的数据类型支持fp16。

  2. A、B、C矩阵的数据格式支持ND(RowMajor和ColumnMajor)。

3 使用示例

  • 获取代码之后编译相应的算子可执行文件,可参考quickstart
  • 执行算子
# 编译指定用例
bash scripts/build.sh 102_dynamic_optimized_matmul
cd output/bin
# 可执行文件名 |矩阵m轴|n轴|k轴|LayoutA|LayoutB|Device ID
# 0 is RowMajor, 1 is ColumnMajor
./102_dynamic_optimized_matmul 256 512 1024 0 1 0

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

Compare success.

如果需要进行批量性能测试,请注释掉精度比较代码,由于精度比较使用cpu算golden,耗时较长。