【2023 · CANN训练营第一季】- TIK C++算子开发入门 第五章 学习笔记

一、学习目标

1. 掌握TIKC++矢量算子动态shape输入的实现

2. 掌握CPU模式下的算子调试技术

3. 掌握UT和ST的测试编码方法

4. 了解NPU模式下的性能采集与分析

二、动态shape算子

1.

基于现有的固定shape算子,将其改装为动态shape的算子。将控制形状的BLOCK DIM,TOTAL LENGTH,TILE NUM这些变量依靠外界输入得到,在核函数中额外传入一个tiling,它将指向控制核函数逻辑处理的至关重要的这几个变量

2. tiling结构体

流程:

tiling结构体中的信息:

  • BLOCK DIM:并行计算使用的核数
  • TOTAL LENGTH:总共需要计算的数据个数
  • TILE NUM:每个核上计算数据分块的个数

3. tiling解析函数

核函数传入tiling指针,与x,y,Z的角色相同,添加获得tiling结构体的宏函数调用GET_TILING DATA

 4. 与固定shape对比

(1)核函数

 (2)KernelAdd类

 (3)Init()函数

 (4) main.cpp

 (5)

 

三、功能调试

TIK C++提供孪生调试技术,即在CPU模式下进行运算实际上会创建一个NPU的模型并模拟它的计算行为以此进行业务功能的调试。相同的算子代码可以在CPU模式下进行精度调试,并无缝切换到NPU模式下运行。

 

四、测试验证

1.UT

UT的本质是使用内核调用符测试CPU模式下的TIK C++算子用例

 为TIK C++自定义算子添加UT测试步骤:

2.ST

ST的本质是创建ACL应用程序测试NPU模式下的TIK C++算子用例

为TIK C++自定义算子添加ST测试步骤: 

3.

host侧算子实现开发,包括算子原型注册、Shape推导等函数实现与注册、Tiling实现与注册和信息库配置

  • 算子原型注册,算子原型描述了算子的输入输出,属性等信息,算子原型注册用于将算子注册到算子原型库中
  • Shape推导等函数实现与注册,根据算子的输入张量描述、算子逻辑及算子属性,推理出算子的输出张量描述,包括张量的Shape、数据类型及数据排布格式等信息。这样算子构图准备阶段就可以为所有的张量静态分配内存,避免动态内存分配带来的开销
  • Tiling实现与注册,计算数据切分过程相关的参数,比如每次计算的数据量大小
  • 信息库配置(根据运行平台进行配置),算子开发者需要通过配置算子信息库文件,将算子在异腾A处理器上相关实现信息注册到算子信息库中

五、性能采集

性能采集工具-msprof

当使用内核调用符时,会生成相应的二进制可执行文件,可以使用性能采集工具运行NPU模式下生成的可执行文件从而采集TIK C++算子在昇腾平台上执行的性能数据。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值