本样例介绍了调用ArithProgression高阶API实现arithprogression单算子,并按照不同的算子调用方式分别给出了对应的端到端实现。
直调:使用核函数直调arithprogression自定义算子。
核函数的基础调用方式,开发者完成算子核函数的开发和Tiling实现后,即可通过AscendCL运行时接口,完成算子的调用。
框架调用:使用框架调用arithprogression自定义算子。
按照工程创建->算子实现->编译部署->算子调用的流程完成算子开发。整个过程都依赖于算子工程:基于工程代码框架完成算子核函数的开发和Tiling实现,通过工程编译脚本完成算子的编译部署,继而实现单算子调用或第三方框架中的算子调用。
本样例中包含如下调用方式:
调用方式 | 目录 | 描述 |
---|---|---|
直调 | kernel_launch_method_by_direct | host侧的核函数调用程序,包含CPU侧、NPU侧、仿真侧三种运行验证方法。 |
框架调用 | kernel_launch_method_by_framework | 通过aclnn调用的方式调用arithprogression算子。 |
目录 | 描述 |
---|---|
kernel_launch_method_by_direct | 通过kernel直调的方式调用自定义算子工程样例目录 |
kernel_launch_method_by_framework | 通过aclnn调用的方式调用自定义算子工程样例目录 |
host_tiling | 本样例tiling代码实现 |
kernel_impl | 本样例kernel侧代码实现 |
arithprogression单算子,给定起始值,等差值和长度,返回一个等差数列。
arithprogression算子规格:
算子类型(OpType) | ArithprogressionCustom | |||
算子输入 | ||||
name | shape | data type | format | |
firstGm | 1 | float | ND | |
diffGm | 1 | float | ND | |
算子输出 | ||||
outputGm | count | float | ND | |
核函数名 | arith_progression_custom |
本样例中实现的是固定shape,输入firstGm[1],diffGm[1],输出outputGm[128]的arithprogression算子。
kernel实现
计算逻辑是:Ascend C提供的矢量计算接口的操作元素都为LocalTensor,输入数据需要先搬运进片上存储,然后使用ArithProgression高阶API接口完成arithprogression计算,得到最终结果,再搬出到外部存储上。
arithprogression算子的实现流程分为3个基本任务:CopyIn,Compute,CopyOut。CopyIn任务负责将Global Memory上的输入搬运至LocalMemory,Compute任务负责根据输入信息执行arithprogression计算,计算结果存储在dstLocal中,CopyOut任务负责将输出数据从dstLocal搬运至Global Memory上的输出Tensor dst_global中。
tiling实现
arithprogression算子的tiling实现流程如下:设置输出shape信息。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。