Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
066da0bf
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
403
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看板
提交
066da0bf
编写于
9月 08, 2020
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mgb/comp_node): add lock_guard to sd.mtx & update warning message & add test
GitOrigin-RevId: ae0bf4b479ceefa59eedaa9bacc9cd56be8dd098
上级
b111baf1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
55 addition
and
1 deletion
+55
-1
imperative/python/megengine/device.py
imperative/python/megengine/device.py
+26
-1
src/core/impl/comp_node/cuda/comp_node.cpp
src/core/impl/comp_node/cuda/comp_node.cpp
+23
-0
src/core/test/comp_node.cpp
src/core/test/comp_node.cpp
+6
-0
未找到文件。
imperative/python/megengine/device.py
浏览文件 @
066da0bf
...
@@ -15,6 +15,7 @@ __all__ = [
...
@@ -15,6 +15,7 @@ __all__ = [
"get_device_count"
,
"get_device_count"
,
"get_default_device"
,
"get_default_device"
,
"set_default_device"
,
"set_default_device"
,
"set_prealloc_config"
,
]
]
...
@@ -33,7 +34,7 @@ def _str2device_type(type_str: str, allow_unspec: bool = True):
...
@@ -33,7 +34,7 @@ def _str2device_type(type_str: str, allow_unspec: bool = True):
elif
type_str
==
"GPU"
or
type_str
==
"CUDA"
:
elif
type_str
==
"GPU"
or
type_str
==
"CUDA"
:
return
DeviceType
.
CUDA
return
DeviceType
.
CUDA
else
:
else
:
assert
allow_unspec
and
str
==
"XPU"
,
"
bad device type
"
assert
allow_unspec
and
str
==
"XPU"
,
"
device type can only be cpu, gpu or xpu
"
return
DeviceType
.
UNSPEC
return
DeviceType
.
UNSPEC
...
@@ -87,3 +88,27 @@ def get_default_device() -> str:
...
@@ -87,3 +88,27 @@ def get_default_device() -> str:
set_default_device
(
os
.
getenv
(
"MGE_DEFAULT_DEVICE"
,
"xpux"
))
set_default_device
(
os
.
getenv
(
"MGE_DEFAULT_DEVICE"
,
"xpux"
))
def
set_prealloc_config
(
alignment
:
int
=
1
,
min_req
:
int
=
32
*
1024
*
1024
,
max_overhead
:
int
=
0
,
growth_factor
:
float
=
2.0
,
device_type
:
str
=
"gpu"
,
):
"""specifies how to pre-allocate from raw device allocator
:param alignment: specifies the alignment in byte
:param min_req: min request size in byte
:param max_overhead: max overhead above required size in byte
:growth_factor: request size = growth_factor * current allocated size
:device_type: the device type
"""
assert
alignment
>
0
assert
min_req
>
0
assert
max_overhead
>=
0
assert
growth_factor
>=
1
t
=
_str2device_type
(
device_type
)
_set_prealloc_config
(
alignment
,
min_req
,
max_overhead
,
growth_factor
,
t
)
src/core/impl/comp_node/cuda/comp_node.cpp
浏览文件 @
066da0bf
...
@@ -815,6 +815,29 @@ size_t CudaCompNode::get_device_count(bool warn) {
...
@@ -815,6 +815,29 @@ size_t CudaCompNode::get_device_count(bool warn) {
return
cnt
;
return
cnt
;
}
}
void
CudaCompNode
::
set_prealloc_config
(
size_t
alignment
,
size_t
min_req
,
size_t
max_overhead
,
double
growth_factor
)
{
auto
&&
sdptr
=
CudaCompNodeImpl
::
sd
;
{
MGB_LOCK_GUARD
(
CudaCompNodeImpl
::
sd_mtx
);
if
(
!
sdptr
)
{
using
T
=
CudaCompNodeImpl
::
StaticData
;
static
std
::
aligned_storage_t
<
sizeof
(
T
),
alignof
(
T
)
>
storage
;
sdptr
=
new
(
&
storage
)
T
;
MGB_LOCK_GUARD
(
sdptr
->
mtx
);
sdptr
->
prealloc_config
.
alignment
=
alignment
;
sdptr
->
prealloc_config
.
min_req
=
min_req
;
sdptr
->
prealloc_config
.
growth_factor
=
growth_factor
;
sdptr
->
prealloc_config
.
max_overhead
=
max_overhead
;
}
else
{
mgb_log_warn
(
"failed to invoke set_prealloc_config; fallback to default configuration; "
"prealloc_config should be specified before any invocation of load_cuda"
);
}
}
}
#else
#else
bool
CudaCompNode
::
available
()
{
bool
CudaCompNode
::
available
()
{
...
...
src/core/test/comp_node.cpp
浏览文件 @
066da0bf
...
@@ -290,6 +290,12 @@ TEST(TestCompNodeCuda, Uid) {
...
@@ -290,6 +290,12 @@ TEST(TestCompNodeCuda, Uid) {
ASSERT_NE
(
cn00
.
get_uid
(),
cn1
.
get_uid
());
ASSERT_NE
(
cn00
.
get_uid
(),
cn1
.
get_uid
());
}
}
TEST
(
TestCompNodeCuda
,
set_prealloc_config
)
{
CompNode
::
set_prealloc_config
(
1024
,
1024
,
256
*
1024
*
1024
,
4
,
CompNode
::
DeviceType
::
CUDA
);
}
#if MGB_CAMBRICON
#if MGB_CAMBRICON
TEST
(
TestCompNodeCambricon
,
MemNode
)
{
TEST
(
TestCompNodeCambricon
,
MemNode
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录