Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MindSpore
docs
提交
c1292f4d
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看板
提交
c1292f4d
编写于
8月 25, 2020
作者:
G
gongchen
提交者:
gong chen
8月 25, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add MindIR Tutorial.
上级
b0e06c84
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
614 addition
and
14 deletion
+614
-14
docs/source_zh_cn/design.rst
docs/source_zh_cn/design.rst
+15
-14
docs/source_zh_cn/design/mindspore/images/ir/cf.dot
docs/source_zh_cn/design/mindspore/images/ir/cf.dot
+183
-0
docs/source_zh_cn/design/mindspore/images/ir/cf.png
docs/source_zh_cn/design/mindspore/images/ir/cf.png
+0
-0
docs/source_zh_cn/design/mindspore/images/ir/closure.dot
docs/source_zh_cn/design/mindspore/images/ir/closure.dot
+93
-0
docs/source_zh_cn/design/mindspore/images/ir/closure.png
docs/source_zh_cn/design/mindspore/images/ir/closure.png
+0
-0
docs/source_zh_cn/design/mindspore/images/ir/hof.dot
docs/source_zh_cn/design/mindspore/images/ir/hof.dot
+85
-0
docs/source_zh_cn/design/mindspore/images/ir/hof.png
docs/source_zh_cn/design/mindspore/images/ir/hof.png
+0
-0
docs/source_zh_cn/design/mindspore/images/ir/ir.dot
docs/source_zh_cn/design/mindspore/images/ir/ir.dot
+73
-0
docs/source_zh_cn/design/mindspore/images/ir/ir.png
docs/source_zh_cn/design/mindspore/images/ir/ir.png
+0
-0
docs/source_zh_cn/design/mindspore/ir.md
docs/source_zh_cn/design/mindspore/ir.md
+165
-0
未找到文件。
docs/source_zh_cn/design.rst
浏览文件 @
c1292f4d
设计文档
===========
.. toctree::
:maxdepth: 1
architecture
technical_white_paper
design/mindspore/distributed_training_design
design/mindinsight/profiler_design
design/mindinsight/training_visual_design
design/mindinsight/graph_visual_design
design/mindinsight/tensor_visual_design
design/mindarmour/differential_privacy_design
设计文档
===========
.. toctree::
:maxdepth: 1
architecture
technical_white_paper
design/mindspore/ir
design/mindspore/distributed_training_design
design/mindinsight/profiler_design
design/mindinsight/training_visual_design
design/mindinsight/graph_visual_design
design/mindinsight/tensor_visual_design
design/mindarmour/differential_privacy_design
docs/source_zh_cn/design/mindspore/images/ir/cf.dot
0 → 100644
浏览文件 @
c1292f4d
digraph
mindspore
{
compound
=
true
subgraph
cluster_0x8b8cc30
{
id
=
cluster_0x8b8cc30
label
=
"fibonacci[managed]"
fontname
=
"Courier New"
node0x8bde4b0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]0)
</td></tr>
</table>
>,
]
node0x8bee780_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td></tr>
<tr><td
colspan=
'1'
bgcolor=
'cornsilk'
>
CNode([CNode]1)
</td></tr>
</table>
>,
]
node0x8bee900_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td><td
port=
'3'
>
3
</td></tr>
<tr><td
colspan=
'4'
bgcolor=
'cornsilk'
>
CNode([CNode]2)
</td></tr>
</table>
>,
]
node0x8b702a0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]54)
</td></tr>
</table>
>,
]
node0x8b6db30_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]37)
</td></tr>
</table>
>,
]
node0x8bc0bb0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b768b0_1
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
switch
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b6c9f0_2
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"✓fibonacci"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x8b91500"
,
]
node0x8bd9410_3
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
Partial
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b85110_4
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"✗fibonacci"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x8bda550"
,
]
node0x8b7bab0_5
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"n"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x8b76120_29
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
PrimitivePy
</td></tr><tr><td>
scalar_lt
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b7bab0_30
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"n"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x8b90f50_31
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
parameters_0x8b8cc30
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
n
</td></tr></table>
>,
]
;}
subgraph
cluster_0x8bda550
{
id
=
cluster_0x8bda550
label
=
"✗fibonacci[managed]"
fontname
=
"Courier New"
node0x8b6acd0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]3)
</td></tr>
</table>
>,
]
node0x8b6dff0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td></tr>
<tr><td
colspan=
'1'
bgcolor=
'cornsilk'
>
CNode([CNode]4)
</td></tr>
</table>
>,
]
node0x8b7d410_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td><td
port=
'3'
>
3
</td></tr>
<tr><td
colspan=
'4'
bgcolor=
'cornsilk'
>
CNode([CNode]5)
</td></tr>
</table>
>,
]
node0x8b83a80_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]55)
</td></tr>
</table>
>,
]
node0x8b8c2a0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]35)
</td></tr>
</table>
>,
]
node0x8b62c70_6
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8bbe5f0_7
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
switch
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b8a0f0_8
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"✓✗fibonacci"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x8b64c50"
,
]
node0x8b8dbb0_9
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
Partial
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8bc0680_10
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"✗✗fibonacci"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x8bedfe0"
,
]
node0x8b76290_11
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"n"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x8b90c20_24
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
PrimitivePy
</td></tr><tr><td>
scalar_eq
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b76290_25
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"n"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x8b7da70_26
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
parameters_0x8bda550
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
n
</td></tr></table>
>,
]
;}
subgraph
cluster_0x8bedfe0
{
id
=
cluster_0x8bedfe0
label
=
"✗✗fibonacci[managed]"
fontname
=
"Courier New"
node0x8b8e4a0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]6)
</td></tr>
</table>
>,
]
node0x8bb9b70_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]33)
</td></tr>
</table>
>,
]
node0x8b7d610_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]8)
</td></tr>
</table>
>,
]
node0x8beae20_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]31)
</td></tr>
</table>
>,
]
node0x8b76cd0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]11)
</td></tr>
</table>
>,
]
node0x8b849b0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]31)
</td></tr>
</table>
>,
]
node0x8b85200_12
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b84310_13
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
PrimitivePy
</td></tr><tr><td>
scalar_add
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8bc14b0_14
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"fibonacci"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x8b8cc30"
,
]
node0x8b8d2e0_15
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
PrimitivePy
</td></tr><tr><td>
scalar_sub
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8bbc810_16
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"n"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x8b8d3d0_17
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
2
</td></tr></table>
>,
]
node0x8bd5920_18
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"fibonacci"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x8b8cc30"
,
]
node0x8bc15a0_19
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
PrimitivePy
</td></tr><tr><td>
scalar_sub
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8bbc810_20
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"n"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x8b83990_21
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
parameters_0x8bedfe0
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
n
</td></tr></table>
>,
]
;}
subgraph
cluster_0x8b64c50
{
id
=
cluster_0x8b64c50
label
=
"✓✗fibonacci[managed]"
fontname
=
"Courier New"
node0x8be8e20_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]15)
</td></tr>
</table>
>,
]
node0x8bd5440_22
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8b89ee0_23
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
parameters_0x8b64c50
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr></table>
>,
]
;}
subgraph
cluster_0x8b91500
{
id
=
cluster_0x8b91500
label
=
"✓fibonacci[managed]"
fontname
=
"Courier New"
node0x8bdacb0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]18)
</td></tr>
</table>
>,
]
node0x8b7d900_27
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x8bb9e90_28
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
0
</td></tr></table>
>,
]
parameters_0x8b91500
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr></table>
>,
]
;}
node0x8bc0bb0_0
:
core
->
node0x8bde4b0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bee780_0
:
core
->
node0x8bde4b0_0
:
1
[
arrowhead
=
vee
,
]
node0x8bee900_0
:
core
->
node0x8bee780_0
:
0
[
arrowhead
=
vee
,
]
node0x8b768b0_1
:
core
->
node0x8bee900_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b6db30_0
:
core
->
node0x8bee900_0
:
1
[
arrowhead
=
vee
,
]
node0x8b6c9f0_2
->
node0x8bee900_0
:
2
[
arrowhead
=
vee
,
]
node0x8b6c9f0_2
->
node0x8bdacb0_0
[
lhead
=
cluster_0x8b91500
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x8b702a0_0
:
core
->
node0x8bee900_0
:
3
[
arrowhead
=
vee
,
]
node0x8bd9410_3
:
core
->
node0x8b702a0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b85110_4
->
node0x8b702a0_0
:
1
[
arrowhead
=
vee
,
]
node0x8b85110_4
->
node0x8b6acd0_0
[
lhead
=
cluster_0x8bda550
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x8b7bab0_5
->
node0x8b702a0_0
:
2
[
arrowhead
=
vee
,
]
node0x8b62c70_6
:
core
->
node0x8b6acd0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b6dff0_0
:
core
->
node0x8b6acd0_0
:
1
[
arrowhead
=
vee
,
]
node0x8b7d410_0
:
core
->
node0x8b6dff0_0
:
0
[
arrowhead
=
vee
,
]
node0x8bbe5f0_7
:
core
->
node0x8b7d410_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b8c2a0_0
:
core
->
node0x8b7d410_0
:
1
[
arrowhead
=
vee
,
]
node0x8b8a0f0_8
->
node0x8b7d410_0
:
2
[
arrowhead
=
vee
,
]
node0x8b8a0f0_8
->
node0x8be8e20_0
[
lhead
=
cluster_0x8b64c50
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x8b83a80_0
:
core
->
node0x8b7d410_0
:
3
[
arrowhead
=
vee
,
]
node0x8b8dbb0_9
:
core
->
node0x8b83a80_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bc0680_10
->
node0x8b83a80_0
:
1
[
arrowhead
=
vee
,
]
node0x8bc0680_10
->
node0x8b8e4a0_0
[
lhead
=
cluster_0x8bedfe0
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x8b76290_11
->
node0x8b83a80_0
:
2
[
arrowhead
=
vee
,
]
node0x8b85200_12
:
core
->
node0x8b8e4a0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bb9b70_0
:
core
->
node0x8b8e4a0_0
:
1
[
arrowhead
=
vee
,
]
node0x8b84310_13
:
core
->
node0x8bb9b70_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b76cd0_0
:
core
->
node0x8bb9b70_0
:
1
[
arrowhead
=
vee
,
]
node0x8b7d610_0
:
core
->
node0x8bb9b70_0
:
2
[
arrowhead
=
vee
,
]
node0x8bc14b0_14
->
node0x8b7d610_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bc14b0_14
->
node0x8bde4b0_0
[
lhead
=
cluster_0x8b8cc30
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x8beae20_0
:
core
->
node0x8b7d610_0
:
1
[
arrowhead
=
vee
,
]
node0x8b8d2e0_15
:
core
->
node0x8beae20_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bbc810_16
->
node0x8beae20_0
:
1
[
arrowhead
=
vee
,
]
node0x8b8d3d0_17
:
core
->
node0x8beae20_0
:
2
[
arrowhead
=
vee
,
]
node0x8bd5920_18
->
node0x8b76cd0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bd5920_18
->
node0x8bde4b0_0
[
lhead
=
cluster_0x8b8cc30
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x8b849b0_0
:
core
->
node0x8b76cd0_0
:
1
[
arrowhead
=
vee
,
]
node0x8bc15a0_19
:
core
->
node0x8b849b0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bbc810_20
->
node0x8b849b0_0
:
1
[
arrowhead
=
vee
,
]
node0x8b83990_21
:
core
->
node0x8b849b0_0
:
2
[
arrowhead
=
vee
,
]
node0x8bd5440_22
:
core
->
node0x8be8e20_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b89ee0_23
:
core
->
node0x8be8e20_0
:
1
[
arrowhead
=
vee
,
]
node0x8b90c20_24
:
core
->
node0x8b8c2a0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b76290_25
->
node0x8b8c2a0_0
:
1
[
arrowhead
=
vee
,
]
node0x8b7da70_26
:
core
->
node0x8b8c2a0_0
:
2
[
arrowhead
=
vee
,
]
node0x8b7d900_27
:
core
->
node0x8bdacb0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8bb9e90_28
:
core
->
node0x8bdacb0_0
:
1
[
arrowhead
=
vee
,
]
node0x8b76120_29
:
core
->
node0x8b6db30_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x8b7bab0_30
->
node0x8b6db30_0
:
1
[
arrowhead
=
vee
,
]
node0x8b90f50_31
:
core
->
node0x8b6db30_0
:
2
[
arrowhead
=
vee
,
]
}
docs/source_zh_cn/design/mindspore/images/ir/cf.png
0 → 100644
浏览文件 @
c1292f4d
237.8 KB
docs/source_zh_cn/design/mindspore/images/ir/closure.dot
0 → 100644
浏览文件 @
c1292f4d
digraph
mindspore
{
compound
=
true
subgraph
cluster_0x19e608f0
{
id
=
cluster_0x19e608f0
label
=
"ms_closure[managed]"
fontname
=
"Courier New"
node0x19269490_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]0)
</td></tr>
</table>
>,
]
node0x1976cf00_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]1)
</td></tr>
</table>
>,
]
node0x1963d630_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode(out2)
</td></tr>
</table>
>,
]
node0x196d87f0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode(closure)
</td></tr>
</table>
>,
]
node0x196c2270_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode(out1)
</td></tr>
</table>
>,
]
node0x19e328a0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x19e5e7c0_1
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
DoSignaturePrimitive
</td></tr><tr><td>
S-Prim-make_tuple
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x19b6a3d0_2
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
2
</td></tr></table>
>,
]
node0x19e68e20_3
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"func_outer[func_outer]"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x19e63830"
,
]
node0x19e38e00_4
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
node0x19e23c10_5
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
2
</td></tr></table>
>,
]
node0x19e1c020_14
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
parameters_0x19e608f0
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr></table>
>,
]
;}
subgraph
cluster_0x19e63830
{
id
=
cluster_0x19e63830
label
=
"func_outer[managed]"
fontname
=
"Courier New"
node0x19e69550_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]5)
</td></tr>
</table>
>,
]
node0x19e68f90_6
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x19e69100_7
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"func_inner"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x19e64130"
,
]
node0x19e035b0_12
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"a"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x19e036b0_13
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"b"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
parameters_0x19e63830
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
a
</td></tr><tr><td>
b
</td></tr></table>
>,
]
;}
subgraph
cluster_0x19e64130
{
id
=
cluster_0x19e64130
label
=
"func_inner[managed]"
fontname
=
"Courier New"
node0x19e68c80_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]6)
</td></tr>
</table>
>,
]
node0x19e68ae0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]7)
</td></tr>
</table>
>,
]
node0x19e682c0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]8)
</td></tr>
</table>
>,
]
node0x19e50a00_8
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x19c7ced0_9
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
DoSignaturePrimitive
</td></tr><tr><td>
S-Prim-add
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x19e645e0_10
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"c"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x19e68790_11
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
DoSignaturePrimitive
</td></tr><tr><td>
S-Prim-add
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
parameters_0x19e64130
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
c
</td></tr></table>
>,
]
;}
node0x19e328a0_0
:
core
->
node0x19269490_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1976cf00_0
:
core
->
node0x19269490_0
:
1
[
arrowhead
=
vee
,
]
node0x19e5e7c0_1
:
core
->
node0x1976cf00_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x196c2270_0
:
core
->
node0x1976cf00_0
:
1
[
arrowhead
=
vee
,
]
node0x1963d630_0
:
core
->
node0x1976cf00_0
:
2
[
arrowhead
=
vee
,
]
node0x196d87f0_0
:
core
->
node0x1963d630_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19b6a3d0_2
:
core
->
node0x1963d630_0
:
1
[
arrowhead
=
vee
,
]
node0x19e68e20_3
->
node0x196d87f0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19e68e20_3
->
node0x19e69550_0
[
lhead
=
cluster_0x19e63830
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x19e38e00_4
:
core
->
node0x196d87f0_0
:
1
[
arrowhead
=
vee
,
]
node0x19e23c10_5
:
core
->
node0x196d87f0_0
:
2
[
arrowhead
=
vee
,
]
node0x19e68f90_6
:
core
->
node0x19e69550_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19e69100_7
->
node0x19e69550_0
:
1
[
arrowhead
=
vee
,
]
node0x19e69100_7
->
node0x19e68c80_0
[
lhead
=
cluster_0x19e64130
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x19e50a00_8
:
core
->
node0x19e68c80_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19e68ae0_0
:
core
->
node0x19e68c80_0
:
1
[
arrowhead
=
vee
,
]
node0x19c7ced0_9
:
core
->
node0x19e68ae0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19e682c0_0
:
core
->
node0x19e68ae0_0
:
1
[
arrowhead
=
vee
,
]
node0x19e645e0_10
->
node0x19e68ae0_0
:
2
[
arrowhead
=
vee
,
]
node0x19e68790_11
:
core
->
node0x19e682c0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19e035b0_12
->
node0x19e682c0_0
:
1
[
arrowhead
=
vee
,
]
node0x19e036b0_13
->
node0x19e682c0_0
:
2
[
arrowhead
=
vee
,
]
node0x196d87f0_0
:
core
->
node0x196c2270_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x19e1c020_14
:
core
->
node0x196c2270_0
:
1
[
arrowhead
=
vee
,
]
}
docs/source_zh_cn/design/mindspore/images/ir/closure.png
0 → 100644
浏览文件 @
c1292f4d
102.2 KB
docs/source_zh_cn/design/mindspore/images/ir/hof.dot
0 → 100644
浏览文件 @
c1292f4d
digraph
mindspore
{
compound
=
true
subgraph
cluster_0x1b3c23b0
{
id
=
cluster_0x1b3c23b0
label
=
"hof[managed]"
fontname
=
"Courier New"
node0x1b32ae50_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]0)
</td></tr>
</table>
>,
]
node0x1b064930_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode(res)
</td></tr>
</table>
>,
]
node0x1b3c0040_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x1b3bfbf0_1
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"g"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x1b3be6c0"
,
]
node0x1b3bfed0_2
[
fontname
=
"Courier New"
,
shape
=
oval
,
label
=
"f"
,
style
=
filled
,
fillcolor
=
palegreen
,
URL
=
"#cluster_0x1b3c50c0"
,
]
node0x1b3c6870_3
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"x"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
parameters_0x1b3c23b0
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
x
</td></tr></table>
>,
]
;}
subgraph
cluster_0x1b3c50c0
{
id
=
cluster_0x1b3c50c0
label
=
"f[managed]"
fontname
=
"Courier New"
node0x1ab4e190_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]1)
</td></tr>
</table>
>,
]
node0x1ab61220_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]2)
</td></tr>
</table>
>,
]
node0x1b3c59e0_4
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x1b3bf5e0_5
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
DoSignaturePrimitive
</td></tr><tr><td>
S-Prim-add
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x1b348630_6
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"x"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x1b3c60f0_7
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
3
</td></tr></table>
>,
]
parameters_0x1b3c50c0
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
x
</td></tr></table>
>,
]
;}
subgraph
cluster_0x1b3be6c0
{
id
=
cluster_0x1b3be6c0
label
=
"g[managed]"
fontname
=
"Courier New"
node0x1b3bfa50_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]4)
</td></tr>
</table>
>,
]
node0x1a9fb8c0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]5)
</td></tr>
</table>
>,
]
node0x1a39f7a0_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]6)
</td></tr>
</table>
>,
]
node0x1a4daa20_0
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]7)
</td></tr>
</table>
>,
]
node0x1b3adfd0_8
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x1b3c2920_9
[
fontname
=
"Courier New"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
DoSignaturePrimitive
</td></tr><tr><td>
S-Prim-mul
</td></tr><tr><td
align=
'left'
></td></tr></table>
>,
]
node0x1b3120e0_10
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"function"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x1b3121e0_11
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"x"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x1b3120e0_12
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"function"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x1b3121e0_13
[
fontname
=
"Courier New"
,
shape
=
octagon
,
label
=
"x"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
parameters_0x1b3be6c0
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
function
</td></tr><tr><td>
x
</td></tr></table>
>,
]
;}
node0x1b3c0040_0
:
core
->
node0x1b32ae50_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1b064930_0
:
core
->
node0x1b32ae50_0
:
1
[
arrowhead
=
vee
,
]
node0x1b3bfbf0_1
->
node0x1b064930_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1b3bfbf0_1
->
node0x1b3bfa50_0
[
lhead
=
cluster_0x1b3be6c0
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x1b3bfed0_2
->
node0x1b064930_0
:
1
[
arrowhead
=
vee
,
]
node0x1b3bfed0_2
->
node0x1ab4e190_0
[
lhead
=
cluster_0x1b3c50c0
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
blue
]
node0x1b3c6870_3
->
node0x1b064930_0
:
2
[
arrowhead
=
vee
,
]
node0x1b3c59e0_4
:
core
->
node0x1ab4e190_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1ab61220_0
:
core
->
node0x1ab4e190_0
:
1
[
arrowhead
=
vee
,
]
node0x1b3bf5e0_5
:
core
->
node0x1ab61220_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1b348630_6
->
node0x1ab61220_0
:
1
[
arrowhead
=
vee
,
]
node0x1b3c60f0_7
:
core
->
node0x1ab61220_0
:
2
[
arrowhead
=
vee
,
]
node0x1b3adfd0_8
:
core
->
node0x1b3bfa50_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1a9fb8c0_0
:
core
->
node0x1b3bfa50_0
:
1
[
arrowhead
=
vee
,
]
node0x1b3c2920_9
:
core
->
node0x1a9fb8c0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1a4daa20_0
:
core
->
node0x1a9fb8c0_0
:
1
[
arrowhead
=
vee
,
]
node0x1a39f7a0_0
:
core
->
node0x1a9fb8c0_0
:
2
[
arrowhead
=
vee
,
]
node0x1b3120e0_10
->
node0x1a39f7a0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1b3121e0_11
->
node0x1a39f7a0_0
:
1
[
arrowhead
=
vee
,
]
node0x1b3120e0_12
->
node0x1a4daa20_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x1b3121e0_13
->
node0x1a4daa20_0
:
1
[
arrowhead
=
vee
,
]
}
docs/source_zh_cn/design/mindspore/images/ir/hof.png
0 → 100644
浏览文件 @
c1292f4d
79.6 KB
docs/source_zh_cn/design/mindspore/images/ir/ir.dot
0 → 100644
浏览文件 @
c1292f4d
digraph
mindspore
{
compound
=
true
subgraph
cluster_0x55c9669c3c70
{
id
=
cluster_0x55c9669c3c70
label
=
"test_f"
fontname
=
"HuaweiSans"
node0x55c9669c6cc0_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]0)
</td></tr>
</table>
>,
]
node0x55c9669c66a0_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode(c)
</td></tr>
</table>
>,
]
node0x55c9669c6960_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]1)
</td></tr>
</table>
>,
]
node0x55c9669c58a0_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode(b)
</td></tr>
</table>
>,
]
node0x55c9669c4fb0_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode(a)
</td></tr>
</table>
>,
]
node0x55c9669c6b60_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr></table>
>,
]
node0x55c9669c9720_1
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
MultitypeFuncGraph
</td></tr><tr><td>
mul
</td></tr></table>
>,
]
node0x55c9669c9dd0_2
[
fontname
=
"HuaweiSans"
,
shape
=
oval
,
label
=
"func"
,
style
=
filled
,
fillcolor
=
"palegreen"
,
URL
=
"#cluster_0x55c9669c7310"
,
]
node0x55c9669c9800_3
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
MultitypeFuncGraph
</td></tr><tr><td>
add
</td></tr></table>
>,
]
node0x55c9669c4430_4
[
fontname
=
"HuaweiSans"
,
shape
=
octagon
,
label
=
"y"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x55c9669c9e80_5
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
MultitypeFuncGraph
</td></tr><tr><td>
sub
</td></tr></table>
>,
]
node0x55c9669c3fc0_6
[
fontname
=
"HuaweiSans"
,
shape
=
octagon
,
label
=
"x"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x55c96692eeb0_7
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Int32Imm
</td></tr><tr><td>
1
</td></tr></table>
>,
]
parameters_0x55c9669c3c70
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
x
</td></tr><tr><td>
y
</td></tr></table>
>,
]
;}
subgraph
cluster_0x55c9669c7310
{
id
=
cluster_0x55c9669c7310
label
=
"func"
fontname
=
"HuaweiSans"
node0x55c9669cc740_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td></tr>
<tr><td
colspan=
'2'
bgcolor=
'cornsilk'
>
CNode([CNode]7)
</td></tr>
</table>
>,
]
node0x55c9669cc5c0_0
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
>
<tr><td
port=
'0'
>
0
</td><td
port=
'1'
>
1
</td><td
port=
'2'
>
2
</td></tr>
<tr><td
colspan=
'3'
bgcolor=
'cornsilk'
>
CNode([CNode]8)
</td></tr>
</table>
>,
]
node0x55c9669cafc0_8
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
Primitive
</td></tr><tr><td>
return
</td></tr></table>
>,
]
node0x55c9669cc930_9
[
fontname
=
"HuaweiSans"
,
shape
=
plaintext
,
label
=<
<table
port=
'core'
cellborder=
'0'
cellspacing=
'2'
bgcolor=
'lavender'
><tr><td
bgcolor=
'white'
>
MultitypeFuncGraph
</td></tr><tr><td>
div
</td></tr></table>
>,
]
node0x55c9669cab20_10
[
fontname
=
"HuaweiSans"
,
shape
=
octagon
,
label
=
"x"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
node0x55c9669cacf0_11
[
fontname
=
"HuaweiSans"
,
shape
=
octagon
,
label
=
"y"
,
style
=
filled
,
fillcolor
=
paleturquoise
,
]
parameters_0x55c9669c7310
[
shape
=
plaintext
label
=<
<table
bgcolor=
'paleturquoise'
cellspacing=
'0'
cellborder=
'1'
border=
'0'
><tr><td>
parameters
</td></tr><tr><td>
x
</td></tr><tr><td>
y
</td></tr></table>
>,
]
;}
node0x55c9669c6b60_0
:
core
->
node0x55c9669c6cc0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669c66a0_0
:
core
->
node0x55c9669c6cc0_0
:
1
[
arrowhead
=
vee
,
]
node0x55c9669c9720_1
:
core
->
node0x55c9669c66a0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669c58a0_0
:
core
->
node0x55c9669c66a0_0
:
1
[
arrowhead
=
vee
,
]
node0x55c9669c6960_0
:
core
->
node0x55c9669c66a0_0
:
2
[
arrowhead
=
vee
,
]
node0x55c9669c9dd0_2
->
node0x55c9669c6960_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669c9dd0_2
->
node0x55c9669cc740_0
[
lhead
=
cluster_0x55c9669c7310
,
dir
=
both
,
arrowhead
=
dot
,
style
=
filled
,
color
=
"#444444"
]
node0x55c9669c4fb0_0
:
core
->
node0x55c9669c6960_0
:
1
[
arrowhead
=
vee
,
]
node0x55c9669c58a0_0
:
core
->
node0x55c9669c6960_0
:
2
[
arrowhead
=
vee
,
]
node0x55c9669c9800_3
:
core
->
node0x55c9669c58a0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669c4fb0_0
:
core
->
node0x55c9669c58a0_0
:
1
[
arrowhead
=
vee
,
]
node0x55c9669c4430_4
->
node0x55c9669c58a0_0
:
2
[
arrowhead
=
vee
,
]
node0x55c9669c9e80_5
:
core
->
node0x55c9669c4fb0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669c3fc0_6
->
node0x55c9669c4fb0_0
:
1
[
arrowhead
=
vee
,
]
node0x55c96692eeb0_7
:
core
->
node0x55c9669c4fb0_0
:
2
[
arrowhead
=
vee
,
]
node0x55c9669cafc0_8
:
core
->
node0x55c9669cc740_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669cc5c0_0
:
core
->
node0x55c9669cc740_0
:
1
[
arrowhead
=
vee
,
]
node0x55c9669cc930_9
:
core
->
node0x55c9669cc5c0_0
:
0
[
arrowhead
=
vee
,
style
=
dashed
]
node0x55c9669cab20_10
->
node0x55c9669cc5c0_0
:
1
[
arrowhead
=
vee
,
]
node0x55c9669cacf0_11
->
node0x55c9669cc5c0_0
:
2
[
arrowhead
=
vee
,
]
}
docs/source_zh_cn/design/mindspore/images/ir/ir.png
0 → 100644
浏览文件 @
c1292f4d
90.7 KB
docs/source_zh_cn/design/mindspore/ir.md
0 → 100644
浏览文件 @
c1292f4d
# MindSpore IR(MindIR)
`框架开发`
`中级`
`高级`
`贡献者`
<!-- TOC -->
-
[
MindSpore IR(MindIR)
](
#mindspore-irmindir
)
-
[
简介
](
#简介
)
-
[
文法定义
](
#文法定义
)
-
[
示例
](
#示例
)
-
[
如何保存IR
](
#如何保存ir
)
-
[
函数式语义
](
#函数式语义
)
-
[
高阶函数
](
#高阶函数
)
-
[
控制流
](
#控制流
)
-
[
自由变量和闭包
](
#自由变量和闭包
)
-
[
参考文献
](
#参考文献
)
<!-- /TOC -->
<a
href=
"https://gitee.com/mindspore/docs/blob/master/docs/source_zh_cn/design/mindspore/ir.md"
target=
"_blank"
><img
src=
"../../_static/logo_source.png"
></a>
## 简介
中间表示(IR)是程序编译过程中介于源语言和目标语言之间的程序表示,以方便编译器进行程序分析和优化,因此IR的设计需要考虑从源语言到目标语言的转换难度,同时考虑程序分析和优化的易用性和性能。
MindIR是一种基于图表示的函数式IR,其最核心的目的是服务于自动微分变换。自动微分采用的是基于函数式编程框架的变换方法,因此IR采用了接近于ANF函数式的语义。此外,借鉴Sea of Nodes[1]和Thorin[2]的优秀设计,采用了一种基于显性依赖图的表示方式。
## 文法定义
ANF是函数式编程中常用且简洁的中间表示,其文法定义如下所示:
```
<aexp> ::= NUMBER | STRING | VAR | BOOLEAN | PRIMOP
| (lambda (VAR …) <exp>)
<cexp> ::= (<aexp> <aexp> …)
| (if <aexp> <exp> <exp>)
<exp> ::= (let ([VAR <cexp>]) <exp>) | <cexp> | <aexp>
```
ANF中表达式分为原子表达式(aexp)和复合表达式(cexp),原子表达式表示一个常数值或一个变量或一个匿名函数;复合表达式由多个原子表达式复合组成,表示一个匿名函数或原语函数调用,组合的第一个输入是调用的函数,其余输入是调用的参数。
MindIR文法继承于ANF,其定义如下所示:
```
<ANode> ::= <ValueNode> | <ParameterNode>
<ParameterNode> ::= Parameter
<ValueNode> ::= Scalar | Named | Tensor | Type | Shape
| Primitive | MetaFuncGraph | FuncGraph
<CNode> ::= (<AnfNode> …)
<AnfNode> ::= <CNode> | <ANode>
```
MindIR中的ANode对应于ANF的原子表达式,ANode有两个子类分别为ValueNode和ParameterNode。ValueNode表示常数节点,可承载一个常数值(标量、符号、张量、类型、维度等),也可以是一个原语函数(Primitive)或一个元函数(MetaFuncGraph)或一个普通函数(FuncGraph),因为在函数式编程中函数定义本身也是一个值。ParameterNode是参数节点,表示函数的形参。
MindIR中CNode对应于ANF的复合表达式,表示一次函数调用。
在MindSpore自动微分时,会计算ParameterNode和CNode的梯度贡献,并返回最终ParameterNode的梯度,而不计算ValueNode的梯度。
## 示例
下面以一段程序作为示例,对比理解MindIR。
```
python
def
func
(
x
,
y
):
return
x
/
y
@
ms_function
def
test_f
(
x
,
y
):
a
=
x
-
1
b
=
a
+
y
c
=
b
*
func
(
a
,
b
)
return
c
```
这段Python代码对应的ANF表达为:
```
lambda (x, y)
let a = x - 1 in
let b = a + y in
let func = lambda (x, y)
let ret = x / y in
ret end in
let %1 = func(a, b) in
let c = b * %1 in
c end
```
对应的MindIR为
[
ir.dot
](
./images/ir/ir.dot
)
:
![](
./images/ir/ir.png
)
在MindIR中,一个函数图(FuncGraph)表示一个普通函数的定义,函数图一般由ParameterNode、ValueNode和CNode组成有向无环图,可以清晰地表达出从参数到返回值的计算过程。在上图中可以看出,python代码中两个函数
`test_f`
和
`func`
转换成了两个函数图,其参数
`x`
和
`y`
转换为函数图的ParameterNode,每一个表达式转换为一个CNode。CNode的第一个输入链接着调用的函数,例如图中的
`add`
、
`func`
、
`return`
。值得注意的是这些节点均是
`ValueNode`
,因为它们被理解为常数函数值。CNode的其他输入链接这调用的参数,参数值可以来自于ParameterNode、ValueNode和其他CNode。
在ANF中每个表达式都用let表达式绑定为一个变量,通过对变量的引用来表示对表达式输出的依赖,而在MindIR中每个表达式都绑定为一个节点,通过节点与节点之间的有向边表示依赖关系。
## 如何保存IR
通过
`context.set_context(save_graphs=True)`
来保存各个编译阶段的中间代码。被保存的中间代码有两种格式,一个是后缀名为
`.ir`
的文本格式,一个是后缀名为
`.dot`
的图形化格式。当网络规模不大时,建议使用更直观的图形化格式来查看,当网络规模较大时建议使用更高效的文本格式来查看。
DOT文件可以通过graphviz转换为图片格式来查看,例如将dot转换为png的命令是
`dot -Tpng *.dot -o *.png`
。
## 函数式语义
MindIR较传统计算图的一个重要特性是不仅可以表达算子之间的数据依赖,还可以表达丰富的函数式语义。
### 高阶函数
在MindIR中,函数的定义是由一个子图来定义,但其本身可以是一个被传递的值,作为其他高阶函数的输入或输出。
例如下面一个简单的示例中,函数
`f`
作为参数传入了函数
`g`
,因此函数
`g`
是一个接收函数输入的高阶函数,函数
`f`
真正的调用点是在函数
`g`
内部。
```
@ms_function
def hof(x):
def f(x):
return x + 3
def g(function, x):
return function(x) * function(x)
res = g(f, x)
return res
```
对应的MindIR为
[
hof.dot
](
./images/ir/hof.dot
)
:
![](
./images/ir/hof.png
)
在实际网络训练脚本中,自动求导泛函
`GradOperation`
和优化器中常用到的
`Partial`
和
`HyperMap`
都是典型的高阶函数。高阶语义极大地提升了MindSpore表达的灵活性和简洁性。
### 控制流
控制流在MindIR中是以高阶函数选择调用的形式表达。这样的形式把控制流转换为高阶函数的数据流,从而使得自动微分算法更加强大。不仅可以支持数据流的自动微分,还可以支持条件跳转、循环和递归等控制流的自动微分。
下面以一个简单的斐波那契用例来演示说明。
```
python
@
ms_function
def
fibonacci
(
n
):
if
(
n
<
1
):
return
0
elif
(
n
==
1
):
return
1
else
:
return
fibonacci
(
n
-
1
)
+
fibonacci
(
n
-
2
)
```
对应的MindIR为
[
cf.dot
](
./images/ir/cf.dot
)
:
![](
./images/ir/cf.png
)
其中
`fibonacci`
是顶层函数图,在顶层中有两个函数图被
`switch`
选择调用。
`✓fibonacci`
是第一个
`if`
的True分支,
`✗fibonacci`
是第一个
`if`
的False分支。在
`✗fibonacci`
中被调用的
`✓✗fibonacci`
是
`elif`
的True分支,
`✗✗fibonacci`
是
`elif`
的False分支。这里需要理解的关键是在MindIR中,条件跳转和递归是以高阶控制流的形式表达的。例如,
`✓fibonacci`
和
`✗fibonacci`
是作为
`switch`
算子的参数传入,
`switch`
根据条件参数选择哪一个函数作为返回值。因此,
`switch`
是把输入的函数当成普通的值做了一个二元选择操作,并没有调用,而真正的函数调用是在紧随
`switch`
后的CNode上完成。
### 自由变量和闭包
闭包(closure)是一种编程语言特性,它指的是代码块和作用域环境的结合。自由变量(free variable)是指在代码块中引用作用域环境中的变量而非局部变量。在MindIR中,代码块是以函数图呈现的,而作用域环境可以理解为该函数被调用时的上下文环境,自由变量的捕获方式是值拷贝而非引用。
一个典型的闭包用例如下:
```
python
@
ms_function
def
func_outer
(
a
,
b
):
def
func_inner
(
c
):
return
a
+
b
+
c
return
func_inner
@
ms_function
def
ms_closure
():
closure
=
func_outer
(
1
,
2
)
out1
=
closure
(
1
)
out2
=
closure
(
2
)
return
out1
,
out2
```
对应的MindIR为
[
closure.dot
](
./images/ir/closure.dot
)
:
![](
./images/ir/closure.png
)
在例子中,
`a`
和
`b`
是自由变量,因为
`func_inner`
中变量
`a`
和
`b`
是引用的其父图
`func_outer`
中定义的参数。变量
`closure`
是一个闭包,它是函数
`func_inner`
与其上下文
`func_outer(1, 2)`
的结合。因此,
`out1`
的结果是4,因为其等价于
`1+2+1`
,
`out2`
的结果是5,因为其等价于
`1+2+2`
。
## 参考文献
[1] C. Click and M. Paleczny. A simple graph-based intermediate representation.
SIGPLAN Not., 30:35–49, March 1995.
[2] Roland Leißa, Marcel Köster, and Sebastian Hack. A graph-based higher-order intermediate
representation. In Proceedings of the 13th Annual IEEE/ACM International Symposium on
Code Generation and Optimization, pages 202–212. IEEE Computer Society, 2015.
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录