Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MindSpore
docs
提交
2e423f9e
D
docs
项目概览
MindSpore
/
docs
通知
4
Star
2
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2e423f9e
编写于
5月 20, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
5月 20, 2020
浏览文件
操作
浏览文件
下载
差异文件
!141 doc(custom_op): delete comment in code block.
Merge pull request !141 from gongchen/fix_customop1
上级
0fa8b1e6
41b5b274
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
7 deletion
+13
-7
tutorials/source_zh_cn/advanced_use/custom_operator.md
tutorials/source_zh_cn/advanced_use/custom_operator.md
+13
-7
未找到文件。
tutorials/source_zh_cn/advanced_use/custom_operator.md
浏览文件 @
2e423f9e
...
...
@@ -83,13 +83,19 @@ class CusSquare(PrimitiveWithInfer):
算子信息是指导后端选择算子实现的关键信息,同时也指导后端为算子插入合适的类型和格式转换。它通过
`TBERegOp`
接口定义,通过
`op_info_register`
装饰器将算子信息与算子实现入口函数绑定。当算子实现py文件被导入时,
`op_info_register`
装饰器会将算子信息注册到后端的算子信息库中。更多关于算子信息的使用方法请参考
`TBERegOp`
的成员方法的注释说明。
> 算子信息中定义输入输出信息的个数和顺序、算子实现入口函数的参数中的输入输出信息的个数和顺序、算子原语中输入输出名称列表的个数和顺序,三者要完全一致。
> 算子如果带属性,在算子信息中需要用`attr()`描述属性信息,属性的名称与算子原语定义中的属性名称要一致。
> - 算子信息中定义输入输出信息的个数和顺序、算子实现入口函数的参数中的输入输出信息的个数和顺序、算子原语中输入输出名称列表的个数和顺序,三者要完全一致。
> - 算子如果带属性,在算子信息中需要用`attr()`描述属性信息,属性的名称与算子原语定义中的属性名称要一致。
### 示例
下面以
`Square`
算子的TBE实现
`square_impl.py`
为例进行介绍。
`square_compute`
是算子实现的计算函数,通过调到
`te.lang.cce`
提供的API描述了
`x * x`
的计算逻辑。
`cus_square_op_info `
是算子信息,通过
`TBERegOp`
来定义。
`TBERegOp`
中的
`dtype_format`
是用来描述算子支持的数据类型,下面示例中注册了两项说明该算子支持两种数据类型,而每一项需按照输入和输出的顺序依次描述支持的格式。第一个
`dtype_format`
说明支持的第一种数据类型是input0为F32_Default格式,output0为F32_Default格式。第二个
`dtype_format`
说明支持的第二种数据类型是input0为F16_Default格式,output0为F16_Default格式。
下面以
`Square`
算子的TBE实现
`square_impl.py`
为例进行介绍。
`square_compute`
是算子实现的计算函数,通过调到
`te.lang.cce`
提供的API描述了
`x * x`
的计算逻辑。
`cus_square_op_info `
是算子信息,通过
`TBERegOp`
来定义。
在
`TBERegOp`
中:
-
`TBERegOp("CusSquare")`
中算子注册名称
`CusSquare`
需要与算子名称一致。
-
`fusion_type("OPAQUE")`
中
`OPAQUE`
是说明自定义算子采取不融合策略。
-
`kernel_name("CusSquareImpl")`
中"CusSquareImpl"需要与算子入口函数名称一致。
-
`dtype_format`
是用来描述算子支持的数据类型,下面示例中注册了两项说明该算子支持两种数据类型,而每一项需按照输入和输出的顺序依次描述支持的格式。第一个
`dtype_format`
说明支持的第一种数据类型是input0为F32_Default格式,output0为F32_Default格式。第二个
`dtype_format`
说明支持的第二种数据类型是input0为F16_Default格式,output0为F16_Default格式。
```
python
from
__future__
import
absolute_import
...
...
@@ -107,13 +113,13 @@ def square_compute(input_x, output_y):
return
res
# Define the kernel info of CusSquare.
cus_square_op_info
=
TBERegOp
(
"CusSquare"
)
\
# The registered op name should be same with primitive name.
.
fusion_type
(
"OPAQUE"
)
\
# Setting kernel fusion strategy. The default is not infusible.
cus_square_op_info
=
TBERegOp
(
"CusSquare"
)
\
.
fusion_type
(
"OPAQUE"
)
\
.
partial_flag
(
True
)
\
.
async_flag
(
False
)
\
.
binfile_name
(
"square.so"
)
\
.
compute_cost
(
10
)
\
.
kernel_name
(
"CusSquareImpl"
)
\
# The kernel name should be same with the name of the entry function.
.
kernel_name
(
"CusSquareImpl"
)
\
.
input
(
0
,
"x"
,
False
,
"required"
,
"all"
)
\
.
output
(
0
,
"y"
,
False
,
"required"
,
"all"
)
\
.
dtype_format
(
DataType
.
F32_Default
,
DataType
.
F32_Default
)
\
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录