Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
88898e63
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看板
提交
88898e63
编写于
7月 05, 2021
作者:
M
Megvii Engine Team
提交者:
huangxinda
7月 19, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mgb): replace if_constexpr with runtime function to avoid potential
bug GitOrigin-RevId: 27fe093d506ab9536fe281ec45b061de5b0407e7
上级
25932352
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
69 addition
and
30 deletion
+69
-30
src/opr/impl/search_policy/profiler.cpp
src/opr/impl/search_policy/profiler.cpp
+60
-30
src/opr/include/megbrain/opr/search_policy/profiler.h
src/opr/include/megbrain/opr/search_policy/profiler.h
+9
-0
未找到文件。
src/opr/impl/search_policy/profiler.cpp
浏览文件 @
88898e63
...
...
@@ -154,6 +154,64 @@ double TimedProfiler<Opr>::init_timeout_setting() {
mgb::apply([&](const auto&... args) { return statement; }, \
std::tuple_cat(__VA_ARGS__))
template
<
typename
Opr
>
void
TimedProfiler
<
Opr
>::
preprocess
(
const
TensorLayoutArray
&
,
const
megdnn
::
SmallVector
<
DeviceTensorND
>&
,
intl
::
UniqPtrWithCN
<
Opr
>&
,
megdnn
::
Workspace
&
,
std
::
array
<
TensorLayout
,
arity
>&
,
std
::
array
<
DeviceTensorND
,
arity_in
>&
,
PreprocessFilter
<
Opr
>&
)
{
// Opr is neither convbias nor convolution.This function do nothing.
}
//! convbias
template
<
>
void
TimedProfiler
<
megdnn
::
ConvBias
>::
preprocess
(
const
TensorLayoutArray
&
preprocessed_layout
,
const
SmallVector
<
DeviceTensorND
>&
flt_val
,
intl
::
UniqPtrWithCN
<
megdnn
::
ConvBias
>&
megdnn_opr
,
megdnn
::
Workspace
&
mdn_workspace
,
std
::
array
<
TensorLayout
,
arity
>&
layouts
,
std
::
array
<
DeviceTensorND
,
arity_in
>&
inp_val
,
PreprocessFilter
<
megdnn
::
ConvBias
>&
prep_flt
)
{
if
(
!
preprocessed_layout
.
empty
())
{
auto
&&
pf
=
prep_flt
;
pf
.
algorithm_id
=
nullptr
;
pf
.
tensors
.
resize
(
flt_val
.
size
());
for
(
size_t
i
=
0
;
i
<
flt_val
.
size
();
i
++
)
{
pf
.
tensors
[
i
]
=
flt_val
[
i
].
as_megdnn
();
}
APPLY
(
megdnn_opr
->
exec_preprocess
(
args
...,
&
pf
,
mdn_workspace
),
std
::
forward_as_tuple
(
layouts
[
0
],
inp_val
[
1
].
as_megdnn
(),
inp_val
[
2
].
as_megdnn
()),
array_skip
<
arity_in
-
1
>
(
layouts
));
}
}
//! convolution
template
<
>
void
TimedProfiler
<
megdnn
::
ConvolutionForward
>::
preprocess
(
const
TensorLayoutArray
&
preprocessed_layout
,
const
megdnn
::
SmallVector
<
DeviceTensorND
>&
flt_val
,
intl
::
UniqPtrWithCN
<
megdnn
::
ConvolutionForward
>&
megdnn_opr
,
megdnn
::
Workspace
&
mdn_workspace
,
std
::
array
<
TensorLayout
,
arity
>&
layouts
,
std
::
array
<
DeviceTensorND
,
arity_in
>&
inp_val
,
PreprocessFilter
<
megdnn
::
ConvolutionForward
>&
prep_flt
)
{
if
(
!
preprocessed_layout
.
empty
())
{
auto
&&
pf
=
prep_flt
;
pf
.
algorithm_id
=
nullptr
;
pf
.
tensors
.
resize
(
flt_val
.
size
());
for
(
size_t
i
=
0
;
i
<
flt_val
.
size
();
i
++
)
{
pf
.
tensors
[
i
]
=
flt_val
[
i
].
as_megdnn
();
}
APPLY
(
megdnn_opr
->
exec_preprocess
(
args
...,
&
pf
,
mdn_workspace
),
std
::
forward_as_tuple
(
layouts
[
0
],
inp_val
[
1
].
as_megdnn
()),
array_skip
<
2
>
(
layouts
));
}
}
template
<
typename
Opr
>
typename
TimedProfiler
<
Opr
>::
TResult
TimedProfiler
<
Opr
>::
prof_impl
(
const
TParam
&
raw_param
)
{
...
...
@@ -258,36 +316,8 @@ typename TimedProfiler<Opr>::TResult TimedProfiler<Opr>::prof_impl(
}
PreprocessFilter
<
Opr
>
prep_flt
;
if_constexpr
<
opr_supports_preprocess
<
Opr
>
()
>
([
&
](
auto
_
)
{
if
(
!
preprocessed_layout
.
empty
())
{
auto
&&
pf
=
_
(
prep_flt
);
pf
.
algorithm_id
=
nullptr
;
pf
.
tensors
.
resize
(
flt_val
.
size
());
for
(
size_t
i
=
0
;
i
<
flt_val
.
size
();
i
++
)
{
pf
.
tensors
[
i
]
=
flt_val
[
i
].
as_megdnn
();
}
if_constexpr
<
opr_contain_bias
<
Opr
>
()
>
(
//! convbias
[
&
](
auto
__
)
{
APPLY
(
__
(
megdnn_opr
)
->
exec_preprocess
(
args
...,
&
pf
,
mdn_workspace
),
std
::
forward_as_tuple
(
layouts
[
0
],
inp_val
[
1
].
as_megdnn
(),
inp_val
[
2
].
as_megdnn
()),
array_skip
<
arity_in
-
1
>
(
layouts
));
},
//! Convolution
[
&
](
auto
__
)
{
APPLY
(
__
(
megdnn_opr
)
->
exec_preprocess
(
args
...,
&
pf
,
mdn_workspace
),
std
::
forward_as_tuple
(
layouts
[
0
],
inp_val
[
1
].
as_megdnn
()),
array_skip
<
arity_in
>
(
layouts
));
});
}
});
preprocess
(
preprocessed_layout
,
flt_val
,
megdnn_opr
,
mdn_workspace
,
layouts
,
inp_val
,
prep_flt
);
RealTimer
timer
;
auto
ev_start
=
cn
.
create_event
(
CompNode
::
Event
::
NEED_TIMER
),
...
...
src/opr/include/megbrain/opr/search_policy/profiler.h
浏览文件 @
88898e63
...
...
@@ -16,6 +16,8 @@
#include "megbrain/utils/timer.h"
#include "megbrain/system.h"
#include "megbrain/comp_node.h"
#include "megbrain/tensor.h"
#include "megbrain/opr/internal/megdnn_opr_wrapper.h"
#include "megdnn/basic_types.h"
#include "megdnn/oprs.h"
...
...
@@ -149,6 +151,13 @@ private:
static
const
double
timeout_setting
;
static
double
init_timeout_setting
();
static
void
preprocess
(
const
megdnn
::
TensorLayoutArray
&
preprocessed_layout
,
const
SmallVector
<
DeviceTensorND
>&
flt_val
,
intl
::
UniqPtrWithCN
<
Opr
>&
megdnn_opr
,
megdnn
::
Workspace
&
mdn_workspace
,
std
::
array
<
TensorLayout
,
arity
>&
layouts
,
std
::
array
<
DeviceTensorND
,
arity_in
>&
inp_val
,
PreprocessFilter
<
Opr
>&
prep_flt
);
static
TResult
prof_impl
(
const
TParam
&
raw_param
);
static
void
prof_init_device
(
const
TParam
&
raw_param
);
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录