代码拉取完成,页面将自动刷新
本样例介绍了如何使用Matmul高阶API中basicBlock模版实现矩阵乘算子,按照不同的算子调用方式分别给出了对应的端到端实现。
BasicBlock模板的特点:适用于无尾块的特定场景(矩阵的shape可以被base块整除),可以固定base块大小(baseM/baseN/baseK),减少矩阵搬运和计算过程中的Scalar开销。
直调:使用核函数直调basicBlock Matmul实现矩阵运算。
核函数的基础调用方式,开发者完成算子核函数的开发和Tiling实现后,即可通过AscendCL运行时接口,完成算子的调用。
框架调用:使用框架调用basicBlock Matmul实现矩阵运算。
按照工程创建->算子实现->编译部署>算子调用的流程完成算子开发。整个过程都依赖于算子工程:基于工程代码框架完成算子核函数的开发和Tiling实现,通过工程编译脚本完成算子的编译部署,继而实现单算子调用或第三方框架中的算子调用。
本样例中包含如下调用方式:
调用方式 | 目录 | 描述 |
---|---|---|
直调 | kernel_launch_method_by_direct | host侧的核函数调用程序,包含CPU侧和NPU侧两种运行验证方法。 |
框架调用 | kernel_launch_method_by_framework | 通过aclnn调用的方式调用basicBlock Matmul程序,包含CPU侧和NPU侧两种运行验证方法。 |
目录 | 描述 |
---|---|
kernel_launch_method_by_direct | 通过kernel直调的方式调用自定义算子工程样例目录 |
kernel_launch_method_by_framework | 通过aclnn调用的方式调用自定义算子工程样例目录 |
host_tiling | 通过aclnn调用的方式调用自定义算子工程样例所需的host侧tiling实现 |
kernel_impl | 本样例kernel侧代码实现 |
basicBlockMatmul单算子,对输入的A B矩阵做矩阵乘和加bias偏置
basicBlockMatmul算子规格
算子类型(OpType) | BasicBlockMatmulCustom | ||||
算子输入 | name | shape | data type | format | isTrans |
a | - | float16 | ND | true | |
b | - | float16 | ND | false | |
bias | - | float | ND | - | |
算子输出 | c | - | float | ND | - |
核函数名 | basic_block_matmul_custom |
Framework调用样例中实现的是固定shape为[M, N, K] = [4096, 5120, 4096], bias = [5120]的basicBlockMatmul算子。
kernel实现
tiling实现
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。