210 Star 1.1K Fork 958

Ascend/samples

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

目录结构介绍

├── AddKernelInvocationTilingNeo
│   ├── cmake                   // 编译工程文件
│   ├── scripts
│   │   ├── gen_data.py         // 输入数据和真值数据生成脚本
│   │   └── verify_result.py    // 验证输出数据和真值数据是否一致的验证脚本
│   ├── add_custom_tiling.h     // 算子tiling实现
│   ├── add_custom.cpp          // 算子kernel实现
│   ├── CMakeLists.txt          // 编译工程文件
│   ├── data_utils.h            // 数据读入写出函数
│   ├── main.cpp                // 主函数,调用算子的应用程序,含CPU域及NPU域调用
│   └── run.sh                  // 编译运行算子的脚本

代码实现介绍

  • kernel实现
    Add算子的数学表达式为:

    z = x + y
    

    计算逻辑是:Ascend C提供的矢量计算接口的操作元素都为LocalTensor,输入数据需要先搬运进片上存储,然后使用计算接口完成两个输入参数相加,得到最终结果,再搬出到外部存储上。

    Add算子的实现流程分为3个基本任务:CopyIn,Compute,CopyOut。CopyIn任务负责将Global Memory上的输入Tensor xGm和yGm搬运到Local Memory,分别存储在xLocal、yLocal,Compute任务负责对xLocal、yLocal执行加法操作,计算结果存储在zLocal中,CopyOut任务负责将输出数据从zLocal搬运至Global Memory上的输出Tensor zGm中。具体请参考add_custom.cpp

  • tiling实现
    TilingData参数设计,TilingData参数本质上是和并行数据切分相关的参数,本示例算子使用了2个tiling参数:totalLength、tileNum。totalLength是指需要计算的数据量大小,tileNum是指每个核上总计算数据分块个数。比如,totalLength这个参数传递到kernel侧后,可以通过除以参与计算的核数,得到每个核上的计算量,这样就完成了多核数据的切分。tiling实现代码中通过上下文获取输入输出的shape信息,并对应设置TilingData。

  • 调用实现

    1. CPU侧运行验证主要通过ICPU_RUN_KF CPU调测宏等CPU调测库提供的接口来完成;
    2. NPU侧运行验证主要通过使用ACLRT_LAUNCH_KERNEL内核调用宏来完成。

    应用程序通过ASCENDC_CPU_DEBUG 宏区分代码逻辑运行于CPU侧还是NPU侧。

运行样例算子

  • 打开样例目录
    以命令行方式下载样例代码,master分支为例。

    cd ${git_clone_path}/samples/operator/ascendc/0_introduction/3_add_kernellaunch/AddKernelInvocationTilingNeo
    
  • 配置环境变量

    请根据当前环境上CANN开发套件包的安装方式,选择对应配置环境变量的命令。

    • 默认路径,root用户安装CANN软件包
      export ASCEND_INSTALL_PATH=/usr/local/Ascend/ascend-toolkit/latest
      
    • 默认路径,非root用户安装CANN软件包
      export ASCEND_INSTALL_PATH=$HOME/Ascend/ascend-toolkit/latest
      
    • 指定路径install_path,安装CANN软件包
      export ASCEND_INSTALL_PATH=${install_path}/ascend-toolkit/latest
      

    配置仿真模式日志文件目录,默认为sim_log。

    export CAMODEL_LOG_PATH=./sim_log
    
  • 样例执行

    bash run.sh -r [RUN_MODE] -v  [SOC_VERSION]
    
    • RUN_MODE:编译方式,可选择CPU调试,NPU仿真,NPU上板。支持参数为[cpu / sim / npu],默认值为npu。
    • SOC_VERSION:昇腾AI处理器型号,如果无法确定具体的[SOC_VERSION],则在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的[SOC_VERSION]值为Ascendxxxyy。支持以下参数取值(xxx请替换为具体取值):
      • Atlas 训练系列产品参数值:AscendxxxA、AscendxxxB
      • Atlas 推理系列产品(Ascend 310P处理器)参数值:Ascend310P1、Ascend310P3
      • Atlas A2训练系列产品/Atlas 800I A2推理产品参数值:AscendxxxB1、AscendxxxB2、AscendxxxB3、AscendxxxB4
      • Atlas 200/500 A2推理产品参数值:AscendxxxB1、AscendxxxB2、AscendxxxB3、AscendxxxB4

    示例如下。

    bash run.sh -r cpu -v Ascend310P1
    

更新说明

时间 更新事项
2024/05/22 新增本readme
2024/11/11 样例目录调整
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ascend/samples.git
git@gitee.com:ascend/samples.git
ascend
samples
samples
v0.3-8.0.0.alpha003

搜索帮助