Developers
Download
[object Object]

本示例是一个入门实践,基于Ascend C SIMD实现Add算子,帮助您快速上手。它完整呈现了Device端核函数实现、Host端调用及编译运行的全流程,助您建立整体认知。开始前,请先参考安装所需的CANN软件包。

下面分别介绍基于C API与C++ API的Add算子实现,完整示例代码请参考

  • Add算子功能介绍

    Add算子的数学表达式为:

    计算逻辑为逐元素完成[object Object]

  • 算子设计

    • Device端核函数编程接口

      • 核函数定义:通过 修饰符声明。
      • 数据分块(Tiling):使用内置关键字 确定每个Block负责处理的数据。
      • 数据搬入:通过 [object Object] [object Object]完成。
      • 数据计算:通过C API接口[object Object]或C++接口[object Object]完成。
      • 数据搬出:通过C API接口[object Object]或C++接口[object Object]完成。
    • 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]undefined
[object Object]

若要深入理解Ascend C的SIMD与SIMT编程模型,请参阅