问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://m.blog.csdn.net/weixin_43319948/article/details/140503283

本文是一篇关于基于香橙派昇腾310B的Ascend C算子开发的学习笔记。文章详细介绍了算子开发的软硬件准备、香橙派连接与设置、算子开发说明(以AddCustom为例)、KernelLaunch调用、FrameworkLaunch调用以及注意事项等内容。

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(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. 注意事项

  • 香橙派连接部分,注意PC端配IPv4是192.168.137.101,而ssh连接香橙派时则以192.168.137.100。
  • 若使用华为云实践,务必注意NPU版本(310不带字母版仅支持cpu和sim编译执行!AddKernelInvocationTilingNeo样例运行报错 aclError:507015

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号