本样例介绍了调用Matmul高阶API实现Matmul支持M/N轴方向的流水并行单算子,并按照不同的算子调用方式分别给出了对应的端到端实现。
直调:使用核函数直调matmul自定义算子。
核函数的基础调用方式,开发者完成算子核函数的开发和Tiling实现后,即可通过AscendCL运行时接口,完成算子的调用。
框架调用:使用框架调用matmul自定义算子。
按照工程创建->算子实现->编译部署->算子调用的流程完成算子开发。整个过程都依赖于算子工程:基于工程代码框架完成算子核函数的开发和Tiling实现,通过工程编译脚本完成算子的编译部署,继而实现单算子调用或第三方框架中的算子调用。
本样例中包含如下调用方式:
调用方式 | 目录 | 描述 |
---|---|---|
直调 | kernel_launch_method_by_direct | host侧的核函数调用程序,包含CPU侧和NPU侧两种运行验证方法。 |
框架调用 | kernel_launch_method_by_framework | 通过aclnn调用的方式调用matmul算子。 |
目录 | 描述 |
---|---|
kernel_launch_method_by_direct | 通过kernel直调的方式调用自定义算子工程样例目录 |
kernel_launch_method_by_framework | 通过aclnn调用的方式调用自定义算子工程样例目录 |
host_tiling | 通过aclnn调用的方式调用自定义算子工程样例所需的host侧tiling实现 |
kernel_impl | 本样例kernel侧代码实现 |
matmul单算子,通过联合设置IterateOrder参数和ScheduleType参数,设定matmul矩阵运算的循环迭代顺序,特定场景下使MTE1流水和Cube流水并行,提高算子性能。
matmul Mndb 算子规格
算子类型(OpType) | MatmulMndbCustom | ||||
算子输入 | name | shape | data type | format | isTrans |
a | - | float32 | ND | flase | |
b | - | float32 | ND | false | |
bias | - | float | ND | - | |
算子输出 | c | - | float | ND | - |
核函数名 | matmul_mndb_custom |
Framework调用样例中实现了4种场景的Matmul算子,分别是使能M/N方向流水并行和使用NORM/MDL模板的两两组合:使用NORM模板与使能IterateOrder::ORDER_M场景对应kernel代码中的mndbMode=1, 使用NORM模板与使能IterateOrder::ORDER_N场景对应kernel代码中的mndbMode=2,使用MDL模板与使能IterateOrder::ORDER_M场景对应kernel代码中的mndbMode=3, 使用MDL模板与使能IterateOrder::ORDER_N场景对应kernel代码中的mndbMode=4。
kernel实现
tiling实现
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。