本课程以矢量编程Add算子为例,对Ascend C(旧名TIK C++)的使用进行详细讲解,并讲解sqrt单目算子的改写步骤
视频地址
pdf文档下载:TIK2算子开发
https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/63RC1alpha002/download
1.昇腾AI处理器的硬件结构
文档地址
CANN算子在昇腾AI处理器上的位置
TIK C++算子在AI Core上运行
向量运算每个时钟周期可以运算的数据是256Bytes
2.算子开发的思想:大事化小
1.切分
比如说我们要计算一个8*2048 half (float)类型的数据。
昇腾AI处理器里面有8个计算核心,所以我们要把这些数据要给它分到这些计算核心上,在这个例子里面,就是把它分成了八份,分给了八个计算核心去进行计算。
2.double buffer
double buffer是基于MTE指令队列与Vector指令队列的独立性和可并行 性,通过将数据搬运与Vector计算并行执行以隐藏数据搬运时间并降低Vector指令的等 待时间,最终提高Vector单元的利用效率,您可以通过为队列申请内存时中设置内存 块的个数来实现数据并行,简单代码示例如下:
pipe.InitBuffer(inQueueX, 2, 256);
就是copy in/compute/copy out 三个步骤并行了
3.再看Add算子运行的过程
3.1 参考gitee中的源代码
TIK2 C++的例子在这个目录下
/root/cann_op_contrib/community/ops
UT相关的文件有4个
ST相关的文件有4个
具体可参考在线实验:基于昇腾CANN的Ascend C算子开发
4.使用其它矢量算子试一试 sqrt
单目算子的编写可参考官方文档TIK2的第五章矢量编程,在add示例代码的基础上修改为单目计算(求平方根)
要点:
1.输入有2个变量改为1个变量
2.Compute部分Add算子改为Sqrt