CANN Add算子Kernel执行样例

CANN Add算子Kernel执行样例 目录结构介绍【免费下载链接】cann-recipes-harmony-infer本项目为鸿蒙开发者提供基于CANN平台的业务实践案例方便开发者参考实现端云能力迁移及端侧推理部署。项目地址: https://gitcode.com/cann/cann-recipes-harmony-infer├── AddKernelInvocation │ ├── cmake // 编译工程文件 │ ├── input // 存放脚本生成的输入数据目录 │ ├── output // 存放算子运行输出数据和真实数据的目录 │ ├── scripts │ │ ├── acl.json // acl配置文件 │ │ ├── gen_data.py // 验证输出数据和针织数据是否一致的验证脚本 │ │ ├── verify_result.py // 真值对比文件 │ │── add_custom.cpp // 算子kernel实现暴露给main.cpp调用 │ │── CMakeLists.txt // 编译工程文件 │ │── data_utils.h // 数据读入写出函数 │ │── main.cpp // 主函数调用算子的应用程序含CPU域及NPU域调用 │ ├── run.sh // 编译运行算子的脚本替换自定义算子如果将该样例工程替换为自己的算子实现需要修改以下内容 1.add_custom.cpp为核函数实现整个文件都要替换成新算子实现 此外在以下文件中搜索 “迁移算子修改点” 2.run.sh 根据实际算子名修改FILE_NAME属性 3.scripts/gen_data.py 需自定义生成输入数据的内容Shape/数据类型/算子的输入参数数量 4.main.cpp 调用add_custom.cpp中的符号 读数据的逻辑代码实现介绍本调用样例中实现的是固定shape为8*2048的Add算子。kernel实现Add算子的数学表达式为z x y计算逻辑是Ascend C提供的矢量计算接口的操作元素都为LocalTensor输入数据需要先搬运进片上存储然后使用计算接口完成两个输入参数相加得到最终结果再搬出到外部存储上。Add算子的实现流程分为3个基本任务CopyInComputeCopyOut。CopyIn任务负责将Global Memory上的输入Tensor xGm和yGm搬运到Local Memory分别存储在xLocal、yLocalCompute任务负责对xLocal、yLocal执行加法操作计算结果存储在zLocal中CopyOut任务负责将输出数据从zLocal搬运至Global Memory上的输出Tensor zGm中。具体请参考add_custom.cpp。调用实现CPU侧运行验证主要通过ICPU_RUN_KF CPU调测宏等CPU调测库提供的接口来完成NPU侧运行验证主要通过使用内核调用符来完成。应用程序通过ASCENDC_CPU_DEBUG 宏区分代码逻辑运行于CPU侧还是NPU侧。运行样例算子打开样例目录cd $HOME/ops/AddKernelInvocation配置环境变量这里的$HOME需要替换为本仓根目录export ASCEND_INSTALL_PATH$HOME/Ascend/ascend-toolkit/latest样例执行bash run.sh -r [RUN_MODE] -v [SOC_VERSION]RUN_MODE编译方式simNPU仿真。SOC_VERSIONKirinX90 或者 Kirin9030。示例如下。bash run.sh -r sim -v KirinX90【免费下载链接】cann-recipes-harmony-infer本项目为鸿蒙开发者提供基于CANN平台的业务实践案例方便开发者参考实现端云能力迁移及端侧推理部署。项目地址: https://gitcode.com/cann/cann-recipes-harmony-infer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考