Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
d9197b59
M
mindspore
项目概览
magicwindyyd
/
mindspore
与 Fork 源项目一致
Fork自
MindSpore / mindspore
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
mindspore
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d9197b59
编写于
5月 06, 2020
作者:
L
limingqi107
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gpu optimize the use of reference count
上级
cae8a921
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
19 addition
and
7 deletion
+19
-7
mindspore/ccsrc/device/gpu/gpu_kernel_runtime.cc
mindspore/ccsrc/device/gpu/gpu_kernel_runtime.cc
+7
-6
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse.cc
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse.cc
+8
-0
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse.h
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse.h
+2
-0
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse_checker.cc
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse_checker.cc
+2
-1
未找到文件。
mindspore/ccsrc/device/gpu/gpu_kernel_runtime.cc
浏览文件 @
d9197b59
...
...
@@ -184,6 +184,10 @@ void GPUKernelRuntime::InitKernelOutputAddress(const session::KernelGraph *graph
bool
GPUKernelRuntime
::
LaunchKernelDynamic
(
const
session
::
KernelGraph
*
graph
)
{
MS_EXCEPTION_IF_NULL
(
graph
);
auto
graph_id
=
graph
->
graph_id
();
auto
mem_reuse_util_ptr
=
mem_reuse_util_map_
[
graph_id
];
MS_EXCEPTION_IF_NULL
(
mem_reuse_util_ptr
);
// Reset the reference count.
mem_reuse_util_ptr
->
ResetDynamicUsedRefCount
();
// The inputs and outputs memory of communication kernel need be continuous, so separate processing.
AllocCommunicationOpDynamicRes
(
graph
);
...
...
@@ -360,16 +364,13 @@ void GPUKernelRuntime::FreeKernelDynamicRes(const mindspore::AnfNodePtr &kernel,
if
(
kernel_ref_count_ptr
==
nullptr
)
{
continue
;
}
// Can't free the output of graph.
if
(
kernel_ref_count_ptr
->
ref_count_dynamic_use_
==
memreuse
::
kMaxRefCount
)
{
continue
;
}
kernel_ref_count_ptr
->
ref_count_dynamic_use_
--
;
if
(
kernel_ref_count_ptr
->
ref_count_dynamic_use_
<
0
)
{
MS_LOG
(
EXCEPTION
)
<<
"Check dynamic reference count failed."
;
}
if
(
kernel_ref_count_ptr
->
ref_count_dynamic_use_
==
0
)
{
auto
device_address
=
AnfAlgo
::
GetPrevNodeMutableOutputAddr
(
kernel
,
i
);
mem_manager_
->
FreeMemFromMemPool
(
device_address
);
// Reset the reference count.
kernel_ref_count_ptr
->
ref_count_dynamic_use_
=
kernel_ref_count_ptr
->
ref_count_
;
}
}
// Free the output of kernel, if output has no reference.
...
...
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse.cc
浏览文件 @
d9197b59
...
...
@@ -288,6 +288,14 @@ void MemReuseUtil::SetGraphOutputRefCount() {
#endif
}
void
MemReuseUtil
::
ResetDynamicUsedRefCount
()
{
for
(
auto
iter
=
kernel_output_refs_
.
begin
();
iter
!=
kernel_output_refs_
.
end
();
++
iter
)
{
for
(
auto
&
ref_count
:
iter
->
second
)
{
ref_count
->
ref_count_dynamic_use_
=
ref_count
->
ref_count_
;
}
}
}
void
MemReuseUtil
::
SetAllInfo
(
KernelGraph
*
graph
)
{
if
(
!
InitDynamicKernelRef
(
graph
))
{
MS_LOG
(
EXCEPTION
)
<<
"Init ReuseAssignDynamicMemory Fault"
;
...
...
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse.h
浏览文件 @
d9197b59
...
...
@@ -64,6 +64,8 @@ class MemReuseUtil {
void
SetReuseRefCount
();
// Set the reference count of graph output specially.
void
SetGraphOutputRefCount
();
// Reset the dynamic used reference count by ref_count_.
void
ResetDynamicUsedRefCount
();
KernelRefCountPtr
GetRef
(
const
AnfNodePtr
&
node
,
int
output_idx
);
KernelRefCountPtr
GetKernelInputRef
(
const
CNodePtr
&
kernel
,
size_t
input_idx
);
...
...
mindspore/ccsrc/pre_activate/mem_reuse/mem_reuse_checker.cc
浏览文件 @
d9197b59
...
...
@@ -161,7 +161,8 @@ void MemReuseChecker::CheckMemReuseIR(const KernelRefCountPtrList &total_refs_li
total_ori_value_size_
=
CalculOriValue
(
graph
);
total_ori_dy_size_
=
CalculOriDy
(
graph
);
total_ori_wkspace_size_
=
CalculOriWk
(
graph
);
std
::
string
filename
=
"./memreuse.ir"
;
std
::
string
graph_id
=
std
::
to_string
(
graph
->
graph_id
());
std
::
string
filename
=
"./memreuse_"
+
graph_id
+
".ir"
;
std
::
ofstream
ofs
(
filename
);
if
(
!
ofs
.
is_open
())
{
MS_LOG
(
ERROR
)
<<
"Open file ["
<<
filename
<<
"] failed!"
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录