Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
905fab56
MegEngine
项目概览
MegEngine 天元
/
MegEngine
大约 1 年 前同步成功
通知
395
Star
4704
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,发现更多精彩内容 >>
提交
905fab56
编写于
3月 15, 2023
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(core): fix multithread load graph
GitOrigin-RevId: 696ec86d6776a470c3eb5424bc356a5664f4df65
上级
0257b2e6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
64 addition
and
1 deletion
+64
-1
lite/test/test_network.cpp
lite/test/test_network.cpp
+63
-0
src/opr/impl/internal/indexing_helper.cpp
src/opr/impl/internal/indexing_helper.cpp
+1
-1
未找到文件。
lite/test/test_network.cpp
浏览文件 @
905fab56
#include <thread>
#include "lite_build_config.h"
#if LITE_BUILD_WITH_MGE
...
...
@@ -87,6 +88,68 @@ TEST(TestNetWork, SetDeviceId) {
ASSERT_EQ
(
output_tensor
->
get_device_id
(),
4
);
}
TEST
(
TestNetWork
,
MutliThreadLoad
)
{
Config
config
;
std
::
string
model_path
=
"./shufflenet.mge"
;
std
::
shared_ptr
<
Network
>
network0
=
std
::
make_shared
<
Network
>
(
config
);
std
::
shared_ptr
<
Network
>
network1
=
std
::
make_shared
<
Network
>
(
config
);
std
::
shared_ptr
<
Network
>
network2
=
std
::
make_shared
<
Network
>
(
config
);
std
::
shared_ptr
<
Network
>
network3
=
std
::
make_shared
<
Network
>
(
config
);
auto
func0
=
[
&
]
{
network0
->
set_device_id
(
0
);
network0
->
load_model
(
model_path
);
std
::
shared_ptr
<
Tensor
>
input_tensor
=
network0
->
get_input_tensor
(
0
);
std
::
shared_ptr
<
Tensor
>
output_tensor
=
network0
->
get_output_tensor
(
0
);
network0
->
forward
();
network0
->
wait
();
ASSERT_EQ
(
input_tensor
->
get_device_id
(),
0
);
ASSERT_EQ
(
output_tensor
->
get_device_id
(),
0
);
};
auto
func1
=
[
&
]
{
network1
->
set_device_id
(
0
);
network1
->
load_model
(
model_path
);
std
::
shared_ptr
<
Tensor
>
input_tensor
=
network1
->
get_input_tensor
(
0
);
std
::
shared_ptr
<
Tensor
>
output_tensor
=
network1
->
get_output_tensor
(
0
);
network1
->
forward
();
network1
->
wait
();
ASSERT_EQ
(
input_tensor
->
get_device_id
(),
0
);
ASSERT_EQ
(
output_tensor
->
get_device_id
(),
0
);
};
auto
func2
=
[
&
]
{
network2
->
set_device_id
(
1
);
network2
->
load_model
(
model_path
);
std
::
shared_ptr
<
Tensor
>
input_tensor
=
network2
->
get_input_tensor
(
0
);
std
::
shared_ptr
<
Tensor
>
output_tensor
=
network2
->
get_output_tensor
(
0
);
network2
->
forward
();
network2
->
wait
();
ASSERT_EQ
(
input_tensor
->
get_device_id
(),
1
);
ASSERT_EQ
(
output_tensor
->
get_device_id
(),
1
);
};
auto
func3
=
[
&
]
{
network3
->
set_device_id
(
1
);
network3
->
load_model
(
model_path
);
std
::
shared_ptr
<
Tensor
>
input_tensor
=
network3
->
get_input_tensor
(
0
);
std
::
shared_ptr
<
Tensor
>
output_tensor
=
network3
->
get_output_tensor
(
0
);
network3
->
forward
();
network3
->
wait
();
ASSERT_EQ
(
input_tensor
->
get_device_id
(),
1
);
ASSERT_EQ
(
output_tensor
->
get_device_id
(),
1
);
};
std
::
thread
t0
(
func0
);
std
::
thread
t1
(
func1
);
std
::
thread
t2
(
func2
);
std
::
thread
t3
(
func3
);
t0
.
join
();
t1
.
join
();
t2
.
join
();
t3
.
join
();
}
TEST
(
TestNetWork
,
GetAllName
)
{
Config
config
;
auto
lite_tensor
=
get_input_data
(
"./input_data.npy"
);
...
...
src/opr/impl/internal/indexing_helper.cpp
浏览文件 @
905fab56
...
...
@@ -266,7 +266,7 @@ SubTensorSpec FancyIndexingHelper::fancy_indexing_make_sub_spec(
static
DeviceTensorND
fake_val
;
static
MGB_MUTEX
fake_val_mtx
;
if
(
mgb_unlikely
(
fake_val
.
empty
()))
{
{
MGB_LOCK_GUARD
(
fake_val_mtx
);
if
(
fake_val
.
empty
())
{
fake_val
.
comp_node
(
CompNode
::
default_cpu
())
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录