Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
98a74e4a
MegEngine
项目概览
MegEngine 天元
/
MegEngine
9 个月 前同步成功
通知
392
Star
4702
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看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
98a74e4a
编写于
12月 02, 2020
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(dnn): refactor opr proxy in test
GitOrigin-RevId: a1d8682e6f6957a212cc8793c2f0cc9b58f2192b
上级
57546b4c
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
219 addition
and
458 deletion
+219
-458
dnn/test/common/opr_algo_proxy.h
dnn/test/common/opr_algo_proxy.h
+120
-29
dnn/test/common/opr_proxy.h
dnn/test/common/opr_proxy.h
+99
-429
未找到文件。
dnn/test/common/opr_algo_proxy.h
浏览文件 @
98a74e4a
...
...
@@ -6,7 +6,8 @@
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*/
#pragma once
...
...
@@ -20,36 +21,126 @@ namespace test {
template
<
typename
Opr
,
size_t
Arity
>
struct
AlgoProxy
;
template
<
typename
Opr
>
struct
AlgoProxy
<
Opr
,
3
>
{
static
std
::
vector
<
typename
Opr
::
AlgorithmInfo
>
get_all_algorithms_info
(
Opr
*
opr
,
TensorLayoutArray
&
layouts
)
{
megdnn_assert
(
layouts
.
size
()
==
3
);
return
opr
->
get_all_algorithms_info
(
layouts
[
0
],
layouts
[
1
],
layouts
[
2
]);
}
static
typename
Opr
::
AlgorithmInfo
get_algorithm_info_heuristic
(
Opr
*
opr
,
TensorLayoutArray
&
layouts
)
{
megdnn_assert
(
layouts
.
size
()
==
3
);
return
opr
->
get_algorithm_info_heuristic
(
layouts
[
0
],
layouts
[
1
],
layouts
[
2
]);
#define DEF_ALGO_PROXY(arity) \
template <typename Opr> \
struct AlgoProxy<Opr, arity> { \
static std::vector<typename Opr::AlgorithmInfo> \
get_all_algorithms_info(Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_all_algorithms_info(LAYOUTS); \
} \
static typename Opr::AlgorithmInfo get_algorithm_info_heuristic( \
Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_algorithm_info_heuristic(LAYOUTS); \
} \
static size_t get_workspace_in_bytes( \
Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_workspace_in_bytes(LAYOUTS); \
} \
static void exec(Opr* opr, const TensorNDArray& tensors, \
Workspace workspace) { \
megdnn_assert(tensors.size() == arity); \
return opr->exec(TENSORS, workspace); \
} \
}
};
template
<
typename
Opr
>
struct
AlgoProxy
<
Opr
,
5
>
{
static
std
::
vector
<
typename
Opr
::
AlgorithmInfo
>
get_all_algorithms_info
(
Opr
*
opr
,
TensorLayoutArray
&
layouts
)
{
megdnn_assert
(
layouts
.
size
()
==
5
);
return
opr
->
get_all_algorithms_info
(
layouts
[
0
],
layouts
[
1
],
layouts
[
2
],
layouts
[
3
],
layouts
[
4
]);
}
static
typename
Opr
::
AlgorithmInfo
get_algorithm_info_heuristic
(
Opr
*
opr
,
TensorLayoutArray
&
layouts
)
{
megdnn_assert
(
layouts
.
size
()
==
5
);
return
opr
->
get_algorithm_info_heuristic
(
layouts
[
0
],
layouts
[
1
],
layouts
[
2
],
layouts
[
3
],
layouts
[
4
]);
}
};
#define LAYOUTS layouts[0], layouts[1], layouts[2]
#define TENSORS tensors[0], tensors[1], tensors[2]
DEF_ALGO_PROXY
(
3
);
#undef LAYOUTS
#undef TENSORS
#define LAYOUTS layouts[0], layouts[1], layouts[2], layouts[3], layouts[4]
#define TENSORS tensors[0], tensors[1], tensors[2], tensors[3], tensors[4]
DEF_ALGO_PROXY
(
5
);
#undef LAYOUTS
#undef TENSORS
#define LAYOUTS \
layouts[0], layouts[1], layouts[2], layouts[3], layouts[4], layouts[5], \
layouts[6], layouts[7]
#define TENSORS \
tensors[0], tensors[1], tensors[2], tensors[3], tensors[4], tensors[5], \
tensors[6], tensors[7]
DEF_ALGO_PROXY
(
8
);
#undef LAYOUTS
#undef TENSORS
#undef DEF_ALGO_PROXY
#define DEF_ALGO_PROXY(Opr, arity) \
template <> \
struct AlgoProxy<Opr, arity> { \
static std::vector<typename Opr::AlgorithmInfo> \
get_all_algorithms_info(Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_all_algorithms_info(LAYOUTS); \
} \
static typename Opr::AlgorithmInfo get_algorithm_info_heuristic( \
Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_algorithm_info_heuristic(LAYOUTS); \
} \
static size_t get_workspace_in_bytes( \
Opr* opr, const TensorLayoutArray& layouts, \
const typename Opr::PreprocessedFilter* preprocessed_filter = \
nullptr) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_workspace_in_bytes(LAYOUTS, preprocessed_filter); \
} \
static void exec( \
Opr* opr, const TensorNDArray& tensors, \
const typename Opr::PreprocessedFilter* preprocessed_filter, \
Workspace workspace) { \
megdnn_assert(tensors.size() == arity); \
return opr->exec(TENSORS, preprocessed_filter, workspace); \
} \
static void exec(Opr* opr, const TensorNDArray& tensors, \
Workspace workspace) { \
megdnn_assert(tensors.size() == arity); \
return opr->exec(TENSORS, nullptr, workspace); \
} \
static size_t get_preprocess_workspace_in_bytes( \
Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->get_preprocess_workspace_in_bytes(LAYOUTS); \
} \
static SmallVector<TensorLayout> deduce_preprocessed_filter_layout( \
Opr* opr, const TensorLayoutArray& layouts) { \
megdnn_assert(layouts.size() == arity); \
return opr->deduce_preprocessed_filter_layout(LAYOUTS); \
} \
static void exec_preprocess( \
Opr* opr, const TensorNDArray& tensors, \
const TensorLayoutArray& layouts, \
Opr::PreprocessedFilter* preprocessed_filter, \
_megdnn_workspace workspace) { \
megdnn_assert(layouts.size() == arity && tensors.size() == arity); \
return opr->exec_preprocess(PREPROCESS_ARGS, preprocessed_filter, \
workspace); \
} \
};
#define LAYOUTS layouts[0], layouts[1], layouts[2]
#define TENSORS tensors[0], tensors[1], tensors[2]
#define PREPROCESS_ARGS layouts[0], tensors[1], layouts[2]
DEF_ALGO_PROXY
(
ConvolutionForward
,
3
);
#undef PREPROCESS_ARGS
#undef LAYOUTS
#undef TENSORS
#define LAYOUTS layouts[0], layouts[1], layouts[2], layouts[3], layouts[4]
#define TENSORS tensors[0], tensors[1], tensors[2], tensors[3], tensors[4]
#define PREPROCESS_ARGS \
layouts[0], tensors[1], tensors[2], layouts[3], layouts[4]
DEF_ALGO_PROXY
(
ConvBias
,
5
);
#undef PREPROCESS_ARGS
#undef LAYOUTS
#undef TENSORS
#undef DEF_ALGO_PROXY
template
<
typename
Opr
,
size_t
arity
=
OprTrait
<
Opr
>
::
arity
>
struct
OprAlgoProxyDefaultImpl
:
public
AlgoProxy
<
Opr
,
arity
>
{};
...
...
dnn/test/common/opr_proxy.h
浏览文件 @
98a74e4a
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录