【2023 · CANN训练营第一季】Ascend C算子开发入门(中)

1.课程简介

课程地址

第二章 Ascend C(旧名TIK C++)算子编程范式及算子实现

https://www.hiascend.com/zh/developer/courses/detail/1627494761683783682

 课程视频

https://space.bilibili.com/1190614918/channel/collectiondetail?sid=1201995

TIK2文档

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/63RC1alpha002/operatordevelopment/tik2opdevg/atlastik2_10_0001.html

在线实验>基于昇腾CANN的TIK C++算子开发

https://www.hiascend.com/zh/edu/experiment/detail/Tik_xl

示例代码

https://gitee.com/zgx950813/samples/tree/master/tik2_demo/kernel_samples/kernel_add_sample

2.课程内容

2.1流水任务
单核处理程序可以有多个流水任务,任务之间会有数据依赖关系

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第1张图片

每个流水任务可以进行数据切片使得多个任务并行执行

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第2张图片

矢量编程的三个流水任务(Stage

CopyIn
Compute
CopyOut
【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第3张图片

2.2任务间通信与同步

知识点

任务通信与同步管理单元 Queue
TQue
代码中的使用示例
TQue que;
Queue 接口
EnQue(放入Queue)
DeQue(从Queue中取出)
Queue 的逻辑位置( QuePosition
VECIN
VECOUT

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第4张图片

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第5张图片

关于矢量编程的任务间通信与同步的描述,正确的是:

Compute 任务中主要进行了数据的计算操作,需要从 VECIN 中取出 LocalTensor ,最后将结果 LocalTensor 存入 VECOUT

2.3内存管理

知识点

内存管理单元 Pipe
TPipe
TBuf
Pipe 接口
InitBuffer (…)
Queue接口
AllocTensor (…)
FreeTensor (…)
Buf接口
Get(…)

 内存管理模块 Pipe【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第6张图片

 Pipe对TBuf初始化存储空间,Get方法获取全部分配到的存储空间或部分空间,从TBuf分配到LocalTensor

LocalTensor Get();

LocalTensor Get(uint32_t len);

 【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第7张图片

2.4算子开发流程

知识点

2.4.1基于内核调用符方式

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第8张图片

 【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第9张图片2.4.2算子分析

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第10张图片 2.4.3核函数定义

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第11张图片

 2.4.4算子类实现

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第12张图片

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第13张图片

 2.4.5成员函数实现

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第14张图片

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第15张图片

【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第16张图片

下列关于矢量Add算子开发流程的描述,正确的是:

A. 该样例使用了多个优化方法,如多核并行, Tiling 分块, Double Buffer
B. 该样例使用了多个 TIK C++ API 接口,如涉及数据搬运的 DataCopy (…) ,涉及数据计算的 Add(…)
C. 该样例使用了 Queue 来管理任务同步,实例化了 VECIN VECOUT 的队列来管理 LocalTensor EnQue(…) DeQue(…)
D. Init(…) 函数主要为了做一些内存初始化操作,如使用 SetGlobalBuffer (…) 来确定不同逻辑 ID 核的 GlobalTensor 初始地址
E. 该样例设计了 CPU 模式和 NPU 模式,并用内置宏 __CCE_KT_TEST__ 区分,开启宏的代码块会在C PU 模式下参与编译

2.5样例演示

算子样例代码包含
算子工程编译配置 CMakeLists.txt
算子核函数源码文件
算子输入和真值数据生成脚本
算子主机侧调用源码文件
算子一键化调用脚本
https://gitee.com/zgx950813/samples/tree/master/tik2_demo/kernel_samples/kernel_add_sample
【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第17张图片

 【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第18张图片

 【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第19张图片

 【2023 · CANN训练营第一季】Ascend C算子开发入门(中)_第20张图片

你可能感兴趣的:(c++,开发语言)