基于香橙派昇腾310B的Ascend C算子开发学习笔记

0. 软硬件准备

本次学习实践是基于香橙派开发板进行的,板卡本身已经预设好了驱动与开发套件。若使用华为云进行实践的话,须首先手动配置环境

硬件

  • 香橙派开发板(昇腾310B)

软件

  • PC端:MobaXterm终端工具
  • 代码:Ascend C算子开发样例仓库
  • *驱动和工具包(华为云需)
    • A300-3010-npu-driver_23.0.0_linux-x86_64.run
    • Ascend-cann-nnrt_8.0.RC2.alpha002_linux-x86_64.run
    • Ascend-cann-toolkit_8.0.RC2.alpha002_linux-x86_64.run

1. 香橙派连接与设置

在这里插入图片描述

板卡连接步骤

  1. 通过网线连接PC与香橙派板卡
  2. 接入香橙派电源(右侧TypeC接口)
  3. 适配以太网
    • PC端IPv4配192.168.137.101)
    • Moba或SSH按192.168.137.100连接

2. AddCustom为例的算子开发说明

  • 算子功能描述:实现half类型的z=x+y向量加法操作
  • 算子开发调用方式
    1. KernelLaunch,适合快速开发、验证场景
    2. FrameworkLaunch,适合正式、完整算子工程场景

在这里插入图片描述

3. KernelLaunch调用

算子文件夹路径:~/samples/operator/AddCustomSample/KernelLaunch/AddCustom
KernelLaunch调用的核心代码为add_custom.cpp,该文件内定义了算子的描述与实现内容。
在这里插入图片描述

3.1 KernelAdd核心

KernelAdd算子核心是要实现初始化(Init)和处理(Process)两个函数。

初始化(Init)

主要任务包括:

  • Global Memory的Buffer设置
  • 流水线pipe的Buffer初始化

处理(Process)

主要任务包括:

  • 计算所需循环迭代步数
  • 执行迭代步按Stage流水步骤(CopyIn,Compute和CopyOut)处理数据
    在这里插入图片描述

3.2 Stage流水核心代码

Ascend C将算子开发过程进行了封装抽象,即将算子处理数据的流程划分为了CopyIn、Compute和CopyOut三个阶段。
三个阶段的指令发送异步进行,之间通过VECIN和VECOUT的进出队的方式实现同步。

Compute Stage

  • 流程
    • 从inQueueX和inQueueY获取x和y数据存xLocal和yLocal
    • 使用Add算子执行xLocal与yLocal的向量加法操作,结果存zLocal
    • 将zLocal数据写入outQueueZ
    • inQueueX和inQueueY释放Tensor(xLocal和yLocal)
      在这里插入图片描述

CopyIn Stage

  • 流程
    • inQueueX和inQueueY分配LocalTensor<half>(xLocal和yLocal)
    • 数据拷贝,将GlobalMemory中数据拷贝到片上Local Memory
    • 将Local Memory数据入队到inQueueX和inQueueY
      在这里插入图片描述

CopyOut Stage

  • 流程
    • outQueueZ出队zLocal数据
    • 将z数据从Local Memory拷贝到Global Memory
    • outQueueZ释放Tensor资源(zLocal)

在这里插入图片描述

3.3 算子调用验证

运行脚本:bash run.sh
若编译运行完,验证显示test pass则表示通过算子验证!

4. FrameworkLaunch调用

算子文件夹路径:~/samples/operator/AddCustomSample/FrameworkLaunch/AddCustom
FrameworkLaunch调用是完整算子工程的开发调用方式,其中算子开发与编译在AddCustom进行,经编译安装后的算子在AclNNInvocation中调用验证。
在这里插入图片描述

4.1 算子开发(AddCustom)

AddCustom算子开发需要分别编写实现host侧(op_host)和device侧(op_kernel)的代码。

在这里插入图片描述

Host侧(op_host)

  • add_cutsom_tiling.h
    • 设置总长度(totalLength)
    • 设置分片长度(tileNum)

在这里插入图片描述

  • add_custom.cpp
    • 填充tiling信息
    • 输入输出参数信息(数据类型,存储排布方式等)

在这里插入图片描述

Device侧(op_device)

同KernelLaunch调用的算子实现(add_custom.cpp)

编译安装

  • 运行脚本:bash run.sh
  • 安装算子:进入build_out文件夹,运行.run文件

4.2 算子调用(AclNNInvocation)

经过上节算子开发与编译安装后,可在算子工程中通过Acl调用算子以验证。

  • 运行脚本:bash run.sh
  • 若test pass则表示算子验证通过!

5. 注意事项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值