Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
93310c0e
MegEngine
项目概览
MegEngine 天元
/
MegEngine
大约 1 年 前同步成功
通知
399
Star
4705
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
93310c0e
编写于
12月 27, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mgb/gopt): fix cpu global layout transform fastrun error
GitOrigin-RevId: ea254297e5e46134490c9aa9f1e98861493ba015
上级
3ff5ca5f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
50 addition
and
1 deletion
+50
-1
dnn/include/megdnn/common.h
dnn/include/megdnn/common.h
+6
-0
src/gopt/impl/global_layout_transform/opr_format_modifier.cpp
...gopt/impl/global_layout_transform/opr_format_modifier.cpp
+39
-0
src/gopt/impl/global_layout_transform/opr_format_modifier.h
src/gopt/impl/global_layout_transform/opr_format_modifier.h
+3
-0
src/gopt/impl/global_layout_transform/profiler_impl.cpp
src/gopt/impl/global_layout_transform/profiler_impl.cpp
+2
-1
未找到文件。
dnn/include/megdnn/common.h
浏览文件 @
93310c0e
...
...
@@ -12,6 +12,7 @@
#pragma once
#include "megbrain_build_config.h"
#include "megdnn/oprs/base.h"
#if MGB_ENABLE_GETENV
#define MGB_GETENV ::std::getenv
...
...
@@ -36,6 +37,11 @@ bool has_available_algo(Opr* opr, Args&&... args) {
return
!
all_algos
.
empty
();
}
template
<
class
Opr
,
typename
...
Args
>
bool
has_no_naive_heuristic_algo
(
Opr
*
opr
,
Args
&&
...
args
)
{
auto
&&
algo
=
opr
->
get_algorithm_info_heuristic
(
std
::
forward
<
Args
>
(
args
)...);
return
!
static_cast
<
bool
>
(
algo
.
attribute
&
detail
::
Algorithm
::
Attribute
::
NAIVE
);
}
}
// namespace megdnn
// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}}
src/gopt/impl/global_layout_transform/opr_format_modifier.cpp
浏览文件 @
93310c0e
...
...
@@ -220,6 +220,28 @@ struct MultiAlgoOprTrait;
::megdnn::has_available_algo(megdnn_opr, args...), array_layouts); \
MIDOUT_E \
} \
static bool has_no_naive_heuristic_algo( \
const VarNodeArray& i, const cg::OperatorNodeBase* opr_) { \
MIDOUT_B( \
midout_iv(MGB_HASH_STR(#_Opr)), \
midout_iv(MGB_HASH_STR("has_no_naive_heuristic_algo"))) \
auto&& opr = opr_->cast_final_safe<_Opr>(); \
auto&& megdnn_opr = reinterpret_cast<MegDNNOpr*>(opr.megdnn_opr()); \
FixedTensorLayouts array_layouts; \
size_t in = i.size() - 1; \
for (size_t idx = 0; idx < in; idx++) { \
const auto& v = i[idx]; \
array_layouts[idx] = \
TensorLayout{v->shape(), v->dtype(), v->format()}; \
} \
const auto& v = i[in]; \
array_layouts[arity - 1] = \
TensorLayout{v->shape(), v->dtype(), v->format()}; \
return APPLY( \
::megdnn::has_no_naive_heuristic_algo(megdnn_opr, args...), \
array_layouts); \
MIDOUT_E \
} \
};
INST
(
Convolution
)
INST
(
ConvBiasForward
)
...
...
@@ -365,6 +387,23 @@ bool has_available_algo(const VarNodeArray& i, const cg::OperatorNodeBase* opr)
#undef cb
}
bool
has_no_naive_heuristic_algo
(
const
VarNodeArray
&
i
,
const
cg
::
OperatorNodeBase
*
opr
)
{
#define cb(_Opr) \
if (opr->dyn_typeinfo() == _Opr::typeinfo()) { \
MGB_MARK_USED_VAR(MultiAlgoOprTrait<_Opr>::has_algo); \
VarNodeArray _ = i; \
_.emplace_back(opr->output(0)); \
return MultiAlgoOprTrait<_Opr>::has_no_naive_heuristic_algo(_, opr); \
} else
cb
(
Convolution
)
cb
(
ConvBiasForward
)
cb
(
ConvolutionBackwardData
)
cb
(
PoolingForward
)
{
mgb_throw
(
InternalError
,
"invalid multi-algo operator(got:%s)"
,
opr
->
dyn_typeinfo
()
->
name
);
}
#undef cb
}
bool
has_opr_format
(
const
cg
::
OperatorNodeBase
*
opr
)
{
bool
ret
=
false
;
#define cb(_Opr) ret |= opr->dyn_typeinfo() == _Opr::typeinfo();
...
...
src/gopt/impl/global_layout_transform/opr_format_modifier.h
浏览文件 @
93310c0e
...
...
@@ -27,6 +27,9 @@ namespace intl {
bool
has_available_algo
(
const
VarNodeArray
&
i
,
const
cg
::
OperatorNodeBase
*
opr
);
bool
has_no_naive_heuristic_algo
(
const
VarNodeArray
&
i
,
const
cg
::
OperatorNodeBase
*
opr
);
struct
OprFormatInfo
{
opr
::
Convolution
::
Param
::
Format
opr_format
;
struct
TensorFormatsInfo
{
...
...
src/gopt/impl/global_layout_transform/profiler_impl.cpp
浏览文件 @
93310c0e
...
...
@@ -331,7 +331,8 @@ float ProfilerImpl::profile_operator(
opr
::
PoolingForward
::
typeinfo
(),
};
if
(
multi_algo_oprs
.
count
(
opr
->
dyn_typeinfo
())
&&
!
mgb
::
gopt
::
intl
::
has_available_algo
(
new_inps
,
y
->
owner_opr
()))
(
!
mgb
::
gopt
::
intl
::
has_available_algo
(
new_inps
,
y
->
owner_opr
())
||
!
mgb
::
gopt
::
intl
::
has_no_naive_heuristic_algo
(
new_inps
,
y
->
owner_opr
())))
return
PROFILE_TIME_OUT
;
if
(
!
m_opr_filter
(
opr
,
y
->
owner_opr
()))
return
PROFILE_TIME_OUT
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录