昇腾Ascend C算子开发––Sinh算子开发学习笔记

考题:实现Ascend C算子Sinh,算子命名为SinhCustom,编写其kernel侧代码、host侧代码,并完成aclnn算子调用测试

相关算法:sinh(x)=(exp(x)–exp(–x))/2.0

算子开发流程

e72acfeae68d45518a78ae8c0146ad9c.jpg

对应题目,本题主要解决的是核函数代码,Kernel侧代码、Host 侧代码,单算子调用时的代码。

算子的分析计算过程分为三个阶段:

CopyIn:搬入x到Local内存

Compute:使用Local内存进行计算

CopyOut:搬运Local计算结果到z

算子开发:可参考官方文档给出的add算子范例

首先对于kernel侧,需要修改参数相关,例如,对于函数入口处:

17ac72fe8ccf42c8b819332f8ea4fd9a.jpg

函数x作为输入,y作为输出,并调用Init方法初始化后,调用Process方法进行计算

Process方法中需要将计算逻辑修改为Sinh的计算逻辑:

29279656fd6e422c942d20dc675e4e23.jpg

首先求exp(x),然后求其倒数exp(-x),相减之后乘以0.5即可

构建编译和安装测试:完成算子开发后,使用指令bash build.sh 进行编译构建。在构建的过程中出现如下报错:

fbc2bbca1ac0480889d0c87f6bdddd23.jpg

需要执行指令chmod +x * –R来授予权限

构建成功后依次执行下列指令完成将构建好的算子包安装到环境中

cd build.out

./custom_opp_ubuntu_aarch64.run

接着进入AclNNInvocation目录执行

bash run.sh

指令进行测试

3daabc4b5a46454facdf77027fc2edfe.jpg

出现上图所示则表明测试成功

实践感想:

我之前没有AI相关编程经验,因此第一次接触算子的概念,经过老师的讲解和文档的阅读,我将算子理解为一个进行运算的一个函数,这个函数使用aicore_函数类型限定符来标识该核函数在设备端AI Core 上执行,并且流程都十分相似:先进行初始化,接着核函数的实现分为3个基本任务:Copyln, Compute, CopyQut,而算子之间主要就是Compute 部分的不同,其次就是参数的不同

通过此次实践活动,我的收获很多,不仅对异腾有了初步的了解,还上机实操了Ascend C算子的开发。并且深深认识到开发属于我国独立研发的AI框架和生态有多么重要。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值