文件最后提交记录最后更新时间
泛化工程: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 个月前
泛化工程:新增模板LocalPaddingCPaddingCommonMatmul,Padding C矩阵,开局部workspace Co-authored-by: weixin_42818618<zhusongxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !398 merge zsx/local-padding-c into master 泛化工程:新增模板LocalPaddingCPaddingCommonMatmul,Padding C矩阵,开局部workspace Created-by: weixin_42818618 Commit-by: weixin_42818618 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1.新增模板LocalPaddingCPaddingCommonMatmul,Padding C矩阵,使用固定大小局部workspace,由每个Cube对应的两个AIV完成RemovePadding操作。 2.使用m1Factor,n1Factor,按基本块大小(m1*m1Factor,n1*Factor)划分GM C矩阵,每个Cube每次计算m1*m1Factor,n1*n1Factor大小的完整结果块,swizzle的粒度也为(m1*m1Factor,n1*n1Factor)。 3.为PaddingMatrixND增加调用参数useSingleCore ,表示是否使用当前AIC对应的两个AIV进行Padding操作,默认为false,即采用全部AIV进行Padding。因为C矩阵开局部Workspace,每个AICORE有一个workspace,自己的workspace数据的处理由自己对应的两个AIV完成。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> 此模板旨在优化C矩阵的写出性能,开局部workspace,一次做一个大块,这样C矩阵的写出缓存命中率会很高,对于C矩阵写出量大且C矩阵非对齐的Shape有明显的优化效果。 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 针对该单模板,精度测试泛化600组case,无精度问题。 性能测试,在全量79828组case中,有69219组case优于基线,占比86.7%,平均算力利用率0.2491。 优化前,在全量79828组case中,有67940组case优于基线,占比85.1%,平均算力利用率0.2436。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3984 个月前
泛化工程:新增模板LocalPaddingCPaddingCommonMatmul,Padding C矩阵,开局部workspace Co-authored-by: weixin_42818618<zhusongxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !398 merge zsx/local-padding-c into master 泛化工程:新增模板LocalPaddingCPaddingCommonMatmul,Padding C矩阵,开局部workspace Created-by: weixin_42818618 Commit-by: weixin_42818618 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1.新增模板LocalPaddingCPaddingCommonMatmul,Padding C矩阵,使用固定大小局部workspace,由每个Cube对应的两个AIV完成RemovePadding操作。 2.使用m1Factor,n1Factor,按基本块大小(m1*m1Factor,n1*Factor)划分GM C矩阵,每个Cube每次计算m1*m1Factor,n1*n1Factor大小的完整结果块,swizzle的粒度也为(m1*m1Factor,n1*n1Factor)。 3.为PaddingMatrixND增加调用参数useSingleCore ,表示是否使用当前AIC对应的两个AIV进行Padding操作,默认为false,即采用全部AIV进行Padding。因为C矩阵开局部Workspace,每个AICORE有一个workspace,自己的workspace数据的处理由自己对应的两个AIV完成。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> 此模板旨在优化C矩阵的写出性能,开局部workspace,一次做一个大块,这样C矩阵的写出缓存命中率会很高,对于C矩阵写出量大且C矩阵非对齐的Shape有明显的优化效果。 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 针对该单模板,精度测试泛化600组case,无精度问题。 性能测试,在全量79828组case中,有69219组case优于基线,占比86.7%,平均算力利用率0.2491。 优化前,在全量79828组case中,有67940组case优于基线,占比85.1%,平均算力利用率0.2436。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3984 个月前
【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 个月前
大模型扫描文档低错修改 Co-authored-by: init__zhb__<zhanghaobo6@huawei.com> # message auto-generated for no-merge-commit merge: !418 merge br_docup into master 大模型扫描文档低错修改 Created-by: init__zhb__ Commit-by: init__zhb__ Merged-by: cann-robot Description: ## 描述 调整文档中的低错描述。 ## 关联的Issue ## 原因 文档刷新,使之表述更为清晰、正式、规范。 ## 测试 ## 文档更新 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!4184 个月前
【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,耗时较长。