Ascend C算子开发——学习笔记

目标:

 编写代码,在香橙派上实现Sinh运算,在SinhCustom目录下编写kernel侧代码和host侧代码,完成调用测试,考取中级微认证证书。

开发流程:

算子分析:分析算子的数学表达式、输入、输出以及计算逻辑的实现,明确需要调用的Ascend C接口。

核函数定义:定义Ascend C算子入口函数。

根据矢量变成范式实现算子类:完成核函数的内部实现。

Ascend C算子开发——学习笔记_第1张图片

其中:

CopyIn:将Global Memory上的输入Tensor搬运到Local Memory中。

Compute:执行计算,结果存储在Local Memory中。

CopyOut:将输出数据搬运至Global Memory上的输出Tensor中。

Sinh计算方法:

sinh(x)=(exp(x)–exp(–x))*0.5

值得注意的是,不需要另外定义临时变量,计算方法如下:

y <- exp(x)

x <- -x

x <- exp(x)

y <- y-x

y <- y*0.5

代码编写

修改SinhCustom目录下,op_kernel中的一个cpp,op_host中的两个cpp。

  1. 在op_host目录下的头文件中完成titling结构体定义。
  2. 在op_host目录下的cpp文件中完成titling结构体的初始化。
  3. 在op_kernel目录下的cpp文件中完成Sinh算子的实现,具体参考Add算子实现与上述计算实现方法。

编译与安装完成后,进入~/SinhCustom/AclNNInvocation目录,执行bash run.sh

出现以下内容表示测试通过。

Ascend C算子开发——学习笔记_第2张图片

实验感想:

首先感谢华为为我们提供了这样一个实践平台。

由于我本身是做数据库的,AI中的算子概念与数据库的算子概念有许多相似之处,理解起来并不困难。因为接触比较少,操作系统中核函数等概念让我十分新奇,经过阅读文档和老师的讲解,我对计算机底层的知识有了一些初步的了解。

你可能感兴趣的:(学习,笔记)