在完成环境部署后,进行算子开发。
2 创建项目
新建项目Ascend Operator,创建算子工程
选择算子类型
算子信息库选择
算子工程创建成功
3算子原型实现
在该文件下
写入:输入x的形状、数据类型
IMPLEMT_COMMON_INFERFUNC(SinhInferShape)
{
auto x = op.GetInputDescByName("x");
auto x_shape = x.GetShape();
auto x_type = x.GetDataType();
return GRAPH_SUCCESS;
}
写入:输出y的形状、数据类型
4 UT测试
右键project-new cases-UT Case
生成两个文件:分别为算子原型UT与算子实现UT
Ctrl+/ 取消代码注释
按照 实际情况修改输入情况,运行UT
5算子实现
实现sinh计算:sinh(x)=(exp(x)-exp(-x))/2.0
@register_op_compute("sinh")
def sinh_compute(x, y, kernel_name="sinh"):
"""
To do: Implement the operator by referring to the
TBE Operator Development Guide.
"""
exp_res = tbe.vexp(x)
un_exp_res = tbe.vexp(-x)
sub_res = tbe.vsub(exp_res,un_exp_res)
two_tensor = tbe.broadcast(2.0,x.shape,x.dtype)
div_res = tbe.vdiv(sub_res,two_tensor)
return div_res
6 编译
设置环境变量,填入/home/HwHiAiUser/Ascend/ascend-toolkit/latest/include
编译成功
7 ST测试
右键项目-新建ST case
输入输出形状一致
在st目录下新建预期函数python file
命名
写入:
import numpy as np
def calc_expect_func(x,y):
res = np.cosh(x["value"])
return [res, ]
右键打开st工程目录
获取路径:
C:\Users\13073\MindstudioProjects\Sinh\testcases\st\sinh\ascend910a
函数填入:calc_expect_func
点击run
配置环境变量,参考网站ST测试-TBE算子开发-算子开发-用户指南-5.0.RC3-MindStudio-文档首页-昇腾社区 (hiascend.com)
ASCEND_DRIVER_PATH
/home/HwHiAiUser/Ascend/driver
ASCEND_HOME
/home/HwHiAiUser/Ascend/ascend-toolkit/latest
修改精度并运行
结果对比