考题:实现Ascend C算子Sinh,算子命名为SinhCustom,编写其kernel侧代码、host侧代码,并完成aclnn算子调用测试
相关算法:sinh(x)=(exp(x)–exp(–x))/2.0
算子开发流程
对应题目,本题主要解决的是核函数代码,Kernel侧代码、Host 侧代码,单算子调用时的代码。
算子的分析计算过程分为三个阶段:
CopyIn:搬入x到Local内存
Compute:使用Local内存进行计算
CopyOut:搬运Local计算结果到z
算子开发:可参考官方文档给出的add算子范例
首先对于kernel侧,需要修改参数相关,例如,对于函数入口处:
函数x作为输入,y作为输出,并调用Init方法初始化后,调用Process方法进行计算
Process方法中需要将计算逻辑修改为Sinh的计算逻辑:
首先求exp(x),然后求其倒数exp(-x),相减之后乘以0.5即可
构建编译和安装测试:完成算子开发后,使用指令bash build.sh 进行编译构建。在构建的过程中出现如下报错:
需要执行指令chmod +x * –R来授予权限
构建成功后依次执行下列指令完成将构建好的算子包安装到环境中
cd build.out
./custom_opp_ubuntu_aarch64.run
接着进入AclNNInvocation目录执行
bash run.sh
指令进行测试
出现上图所示则表明测试成功
实践感想:
我之前没有AI相关编程经验,因此第一次接触算子的概念,经过老师的讲解和文档的阅读,我将算子理解为一个进行运算的一个函数,这个函数使用aicore_函数类型限定符来标识该核函数在设备端AI Core 上执行,并且流程都十分相似:先进行初始化,接着核函数的实现分为3个基本任务:Copyln, Compute, CopyQut,而算子之间主要就是Compute 部分的不同,其次就是参数的不同
通过此次实践活动,我的收获很多,不仅对异腾有了初步的了解,还上机实操了Ascend C算子的开发。并且深深认识到开发属于我国独立研发的AI框架和生态有多么重要。