Ascend C算子开发基础概念笔记
收藏回复举报
Ascend C算子开发基础概念笔记
发表于2024-06-30 23:49:16
0 查看

Ascend C简介

面向算子开发场景的编程语言Ascend C,原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者低成本完成算子开发和模型调优部署。

基本概念介绍

AscendC开发的算子是运行在AICore上的,它是计算的核心,AI处理器内部有多个AICore,AICore由计算单元、存储单元和搬运单元组成,Add算子需要用到的计算单元就是Vector,Cube是专门用来处理矩阵运算的。

搬运单元是负责将global memory的数据搬运到Local Memory,来进行运算,运算结束后再搬出。

%E5%9B%BE%E7%89%871.png

并行计算处理方法

并行计算是提高计算速度的有效手段。下面介绍两种常用的并行计算方法,SPMD数据并行和流水线并行。

SPMD数据并行,指的是有多个进程,输入会分成多份分发给每个进程,每个分别处理自己的任务,对于多个AICore,可以根据Core的数量进行分发。SPMD(Single-Program Multiple-Data)编程模型的概念类似于并行计算中的常见方法,如MPI(Message Passing Interface)等。在这种编程模型中,同一个程序被并行地执行在多个计算核心上,每个核心执行相同的指令代码

SPMD编程模型:所有AI Core执行相同的程序,但可以处理不同的数据部分。

block_idx:每个AI Core通过block_idx来唯一标识自己。这是类似于并行计算中进程ID的概念。

并行性和性能:通过SPMD模型,可以实现数据并行,从而利用多个AI Core并行处理数据,以提高整体性能。

流水线并行,对应于流水线编程范式,通过pipe来管理队列,对于vector运算,包括CopyIn、Computer和CopyOut处理过程。

%E5%9B%BE%E7%89%872.png

由此可见,在处理第一次的数据时,第二部分的数据已经可以搬入到队列中进行等待了,等待第一次的数据处理完后,第二部分的数据进行处理,再将下一份数据搬入到队列中来。

矢量编程中的逻辑定义如下:

搬入数据的存放位置:VECIN;

计算中间变量的位置:VECCALC;

搬出数据的存放位置:VECOUT。

其中VECCALC代表的临时变量的储存,tmpBuffer,VECIN代表搬入队列,VECOUT代表的是搬出队列。

我要发帖子