本示例是一个入门实践,基于Ascend C SIMD实现Add算子,帮助您快速上手。它完整呈现了Device端核函数实现、Host端调用及编译运行的全流程,助您建立整体认知。开始前,请先参考安装所需的CANN软件包。
下面分别介绍基于C API与C++ API的Add算子实现,完整示例代码请参考和。
Add算子功能介绍:
Add算子的数学表达式为:
计算逻辑为逐元素完成
[object Object]。算子设计
Device端核函数编程接口
Host端运行时接口
- 内存分配:使用
[object Object]分配Host Memory,[object Object]分配Device Memory。 - 数据搬入:使用
[object Object]将输入数据从Host Memory拷贝到Device Memory。 - 启动NPU计算任务:通过
[object Object]语法糖启动核函数。 - 同步等待:调用
[object Object]或[object Object]等待任务完成。 - 数据搬出:使用
[object Object]将计算结果从Device Memory拷贝回Host Memory。
[object Object]
- 内存分配:使用
算子代码实现:
后缀名为
[object Object]的代码文件包含Host端与Device端代码。Device端Kernel实现: Device端部分示例如下:
基于C语言API实现Memory矢量计算示例
[object Object][object Object]
基于C++ Tensor实现Memory矢量计算示例
[object Object][object Object]
Host端代码实现:
Host端通过
[object Object]语法糖调用Device端核函数,示例代码片段如下:[object Object]
算子编译与运行:
CMake配置文件示例:
[object Object]编译与执行示例:
[object Object][object Object]
此外,基于C/C++不同层级的编程接口和不同的矢量计算类型,Add算子有多种实现方式,具体可参考下表:
[object Object]