Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
403b503f
P
Paddle
项目概览
Crayon鑫
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
403b503f
编写于
5月 10, 2022
作者:
J
JingZhuangzhuang
提交者:
GitHub
5月 10, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
pdnode_compare (#42597) (#42633)
* pdnode_compare * panode compare * pdnode_compare
上级
25124d7f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
2 deletion
+41
-2
paddle/fluid/framework/ir/graph_pattern_detector.h
paddle/fluid/framework/ir/graph_pattern_detector.h
+41
-2
未找到文件。
paddle/fluid/framework/ir/graph_pattern_detector.h
浏览文件 @
403b503f
...
...
@@ -81,6 +81,7 @@ struct PDNode {
bool
IsVar
()
const
{
return
type_
==
Type
::
kVar
;
}
const
std
::
string
&
name
()
const
{
return
name_
;
}
const
PDPattern
*
pdpattern
()
const
{
return
pattern_
;
}
PDNode
&
operator
=
(
const
PDNode
&
)
=
delete
;
PDNode
(
const
PDNode
&
)
=
delete
;
...
...
@@ -277,7 +278,44 @@ class PDPattern {
*/
class
GraphPatternDetector
{
public:
using
subgraph_t
=
std
::
map
<
PDNode
*
,
Node
*>
;
struct
NodeIdCompare
{
bool
operator
()(
Node
*
node1
,
Node
*
node2
)
const
{
return
node1
->
id
()
<
node2
->
id
();
}
};
struct
PDNodeCompare
{
bool
operator
()(
const
PDNode
*
node1
,
const
PDNode
*
node2
)
const
{
auto
&
nodes1
=
node1
->
pdpattern
()
->
nodes
();
auto
&
nodes2
=
node2
->
pdpattern
()
->
nodes
();
if
(
nodes1
.
size
()
!=
nodes2
.
size
())
{
return
nodes1
.
size
()
<
nodes2
.
size
();
}
else
{
std
::
string
pdnode_hash_key1
=
""
;
std
::
string
pdnode_hash_key2
=
""
;
for
(
auto
&
node
:
nodes1
)
{
pdnode_hash_key1
+=
node
.
get
()
->
name
();
pdnode_hash_key1
+=
"#"
;
}
pdnode_hash_key1
+=
node1
->
name
();
for
(
auto
&
node
:
nodes2
)
{
pdnode_hash_key2
+=
node
.
get
()
->
name
();
pdnode_hash_key2
+=
"#"
;
}
pdnode_hash_key2
+=
node2
->
name
();
auto
pdnode_key1
=
std
::
to_string
(
std
::
hash
<
std
::
string
>
()(
pdnode_hash_key1
));
auto
pdnode_key2
=
std
::
to_string
(
std
::
hash
<
std
::
string
>
()(
pdnode_hash_key2
));
return
pdnode_key1
<
pdnode_key2
;
}
return
false
;
}
};
using
subgraph_t
=
std
::
map
<
PDNode
*
,
Node
*
,
PDNodeCompare
>
;
// Operate on the detected pattern.
using
handle_t
=
...
...
@@ -321,7 +359,8 @@ class GraphPatternDetector {
using
hit_rcd_t
=
std
::
pair
<
Node
*
/*node in graph*/
,
PDNode
*
/*node in pattern*/
>
;
PDPattern
pattern_
;
std
::
map
<
const
PDNode
*
,
std
::
set
<
Node
*>>
pdnodes2nodes_
;
std
::
map
<
const
PDNode
*
,
std
::
set
<
Node
*
,
NodeIdCompare
>
,
PDNodeCompare
>
pdnodes2nodes_
;
};
// some helper methods.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录