Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
681514e1
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
681514e1
编写于
9月 10, 2018
作者:
M
minqiyang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make all scope pointer to shared
上级
ce24a920
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
63 addition
and
44 deletion
+63
-44
paddle/fluid/framework/details/fast_threaded_ssa_graph_executor.cc
...uid/framework/details/fast_threaded_ssa_graph_executor.cc
+2
-1
paddle/fluid/framework/details/fast_threaded_ssa_graph_executor.h
...luid/framework/details/fast_threaded_ssa_graph_executor.h
+6
-5
paddle/fluid/framework/details/fetch_op_handle.cc
paddle/fluid/framework/details/fetch_op_handle.cc
+1
-1
paddle/fluid/framework/details/fetch_op_handle.h
paddle/fluid/framework/details/fetch_op_handle.h
+2
-2
paddle/fluid/framework/details/scope_buffered_ssa_graph_executor.cc
...id/framework/details/scope_buffered_ssa_graph_executor.cc
+2
-1
paddle/fluid/framework/details/scope_buffered_ssa_graph_executor.h
...uid/framework/details/scope_buffered_ssa_graph_executor.h
+3
-2
paddle/fluid/framework/details/threaded_ssa_graph_executor.cc
...le/fluid/framework/details/threaded_ssa_graph_executor.cc
+2
-1
paddle/fluid/framework/details/threaded_ssa_graph_executor.h
paddle/fluid/framework/details/threaded_ssa_graph_executor.h
+6
-5
paddle/fluid/framework/parallel_executor.cc
paddle/fluid/framework/parallel_executor.cc
+20
-11
paddle/fluid/framework/parallel_executor.h
paddle/fluid/framework/parallel_executor.h
+11
-10
paddle/fluid/framework/scope.cc
paddle/fluid/framework/scope.cc
+7
-4
paddle/fluid/framework/scope.h
paddle/fluid/framework/scope.h
+1
-1
未找到文件。
paddle/fluid/framework/details/fast_threaded_ssa_graph_executor.cc
浏览文件 @
681514e1
...
...
@@ -22,7 +22,8 @@ namespace framework {
namespace
details
{
FastThreadedSSAGraphExecutor
::
FastThreadedSSAGraphExecutor
(
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
std
::
unique_ptr
<
ir
::
Graph
>
&&
graph
)
:
strategy_
(
strategy
),
...
...
paddle/fluid/framework/details/fast_threaded_ssa_graph_executor.h
浏览文件 @
681514e1
...
...
@@ -29,16 +29,17 @@ namespace details {
class
OpHandleBase
;
class
FastThreadedSSAGraphExecutor
:
public
SSAGraphExecutor
{
public:
FastThreadedSSAGraphExecutor
(
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
std
::
unique_ptr
<
ir
::
Graph
>
&&
graph
);
FastThreadedSSAGraphExecutor
(
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
std
::
unique_ptr
<
ir
::
Graph
>
&&
graph
);
FeedFetchList
Run
(
const
std
::
vector
<
std
::
string
>
&
fetch_tensors
)
override
;
const
ir
::
Graph
&
Graph
()
const
override
;
private:
ExecutionStrategy
strategy_
;
std
::
vector
<
Scope
*
>
local_scopes_
;
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
local_scopes_
;
std
::
vector
<
platform
::
Place
>
places_
;
std
::
unique_ptr
<
ir
::
Graph
>
graph_
;
...
...
paddle/fluid/framework/details/fetch_op_handle.cc
浏览文件 @
681514e1
...
...
@@ -22,7 +22,7 @@ namespace framework {
namespace
details
{
FetchOpHandle
::
FetchOpHandle
(
ir
::
Node
*
node
,
FeedFetchList
*
data
,
size_t
offset
,
std
::
vector
<
Scope
*
>
*
local_scopes
)
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
*
local_scopes
)
:
OpHandleBase
(
node
),
data_
(
data
),
offset_
(
offset
),
...
...
paddle/fluid/framework/details/fetch_op_handle.h
浏览文件 @
681514e1
...
...
@@ -29,7 +29,7 @@ namespace details {
struct
FetchOpHandle
:
public
OpHandleBase
{
public:
FetchOpHandle
(
ir
::
Node
*
node
,
FeedFetchList
*
data
,
size_t
offset
,
std
::
vector
<
Scope
*
>
*
local_scopes
);
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
*
local_scopes
);
~
FetchOpHandle
();
...
...
@@ -47,7 +47,7 @@ struct FetchOpHandle : public OpHandleBase {
private:
FeedFetchList
*
data_
;
size_t
offset_
;
std
::
vector
<
Scope
*
>
*
local_scopes_
;
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
*
local_scopes_
;
std
::
vector
<
LoDTensor
>
tensors_
;
};
...
...
paddle/fluid/framework/details/scope_buffered_ssa_graph_executor.cc
浏览文件 @
681514e1
...
...
@@ -23,7 +23,8 @@ namespace paddle {
namespace
framework
{
namespace
details
{
ScopeBufferedSSAGraphExecutor
::
ScopeBufferedSSAGraphExecutor
(
ExecutionStrategy
strategy
,
std
::
vector
<
Scope
*>
local_scopes
,
ExecutionStrategy
strategy
,
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
local_scopes
,
std
::
vector
<
VariableInfo
>
var_infos
,
std
::
vector
<
platform
::
Place
>
places
,
std
::
unique_ptr
<
SSAGraphExecutor
>
&&
underlying_executor
)
:
strategy_
(
std
::
move
(
strategy
)),
...
...
paddle/fluid/framework/details/scope_buffered_ssa_graph_executor.h
浏览文件 @
681514e1
...
...
@@ -37,7 +37,8 @@ struct VariableInfo {
class
ScopeBufferedSSAGraphExecutor
:
public
SSAGraphExecutor
{
public:
ScopeBufferedSSAGraphExecutor
(
ExecutionStrategy
strategy
,
std
::
vector
<
Scope
*>
local_scopes
,
ExecutionStrategy
strategy
,
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
local_scopes
,
std
::
vector
<
VariableInfo
>
var_infos
,
std
::
vector
<
platform
::
Place
>
places
,
std
::
unique_ptr
<
SSAGraphExecutor
>&&
underlying_executor
);
...
...
@@ -52,7 +53,7 @@ class ScopeBufferedSSAGraphExecutor : public SSAGraphExecutor {
ExecutionStrategy
strategy_
;
std
::
unique_ptr
<
SSAGraphExecutor
>
underlying_executor_
;
std
::
vector
<
Scope
*
>
local_scopes_
;
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
local_scopes_
;
std
::
vector
<
VariableInfo
>
var_infos_
;
std
::
vector
<
platform
::
Place
>
places_
;
};
...
...
paddle/fluid/framework/details/threaded_ssa_graph_executor.cc
浏览文件 @
681514e1
...
...
@@ -21,7 +21,8 @@ namespace paddle {
namespace
framework
{
namespace
details
{
ThreadedSSAGraphExecutor
::
ThreadedSSAGraphExecutor
(
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
std
::
unique_ptr
<
ir
::
Graph
>
&&
graph
)
:
graph_
(
std
::
move
(
graph
)),
...
...
paddle/fluid/framework/details/threaded_ssa_graph_executor.h
浏览文件 @
681514e1
...
...
@@ -38,10 +38,11 @@ namespace details {
class
ThreadedSSAGraphExecutor
:
public
SSAGraphExecutor
{
public:
ThreadedSSAGraphExecutor
(
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
std
::
unique_ptr
<
ir
::
Graph
>
&&
graph
);
ThreadedSSAGraphExecutor
(
const
ExecutionStrategy
&
strategy
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
std
::
unique_ptr
<
ir
::
Graph
>
&&
graph
);
const
ir
::
Graph
&
Graph
()
const
override
{
return
*
graph_
;
}
// Run a SSAGraph by a thread pool
...
...
@@ -57,7 +58,7 @@ class ThreadedSSAGraphExecutor : public SSAGraphExecutor {
private:
std
::
unique_ptr
<
ir
::
Graph
>
graph_
;
std
::
unique_ptr
<::
ThreadPool
>
pool_
;
std
::
vector
<
Scope
*
>
local_scopes_
;
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
local_scopes_
;
std
::
vector
<
platform
::
Place
>
places_
;
platform
::
DeviceContextPool
fetch_ctxs_
;
ExceptionHolder
exception_holder_
;
...
...
paddle/fluid/framework/parallel_executor.cc
浏览文件 @
681514e1
...
...
@@ -39,7 +39,8 @@ std::unique_ptr<ir::Graph> ApplyParallelExecutorPass(
const
ProgramDesc
&
main_program
,
const
std
::
vector
<
platform
::
Place
>
&
places
,
const
std
::
string
&
loss_var_name
,
const
std
::
unordered_set
<
std
::
string
>
&
param_names
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
bool
use_cuda
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
bool
use_cuda
,
#ifdef PADDLE_WITH_CUDA
const
BuildStrategy
&
strategy
,
platform
::
NCCLContextMap
*
nccl_ctxs
)
{
#else
...
...
@@ -66,8 +67,8 @@ std::unique_ptr<ir::Graph> ApplyParallelExecutorPass(
&
loss_var_name
);
multi_devices_pass
->
SetNotOwned
<
const
std
::
unordered_set
<
std
::
string
>>
(
"params"
,
&
param_names
);
multi_devices_pass
->
SetNotOwned
<
const
std
::
vector
<
Scope
*>>
(
"local_scopes"
,
&
local_scopes
);
multi_devices_pass
->
SetNotOwned
<
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>>
(
"local_scopes"
,
&
local_scopes
);
multi_devices_pass
->
SetNotOwned
<
const
BuildStrategy
>
(
"strategy"
,
&
strategy
);
#ifdef PADDLE_WITH_CUDA
...
...
@@ -100,8 +101,8 @@ class ParallelExecutorPrivate {
:
places_
(
places
)
{}
std
::
vector
<
platform
::
Place
>
places_
;
std
::
vector
<
Scope
*
>
local_scopes_
;
Scope
*
global_scope_
;
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
local_scopes_
;
std
::
shared_ptr
<
Scope
>
global_scope_
;
std
::
unique_ptr
<
details
::
SSAGraphExecutor
>
executor_
;
#ifdef PADDLE_WITH_CUDA
...
...
@@ -112,7 +113,7 @@ class ParallelExecutorPrivate {
bool
use_all_reduce_
;
};
std
::
vector
<
Scope
*
>
&
ParallelExecutor
::
GetLocalScopes
()
{
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
&
ParallelExecutor
::
GetLocalScopes
()
{
return
member_
->
local_scopes_
;
}
...
...
@@ -121,7 +122,8 @@ ParallelExecutor::ParallelExecutor(
const
std
::
unordered_set
<
std
::
string
>
&
params
,
const
std
::
unordered_set
<
std
::
string
>
&
bcast_vars
,
const
ProgramDesc
&
main_program
,
const
std
::
string
&
loss_var_name
,
Scope
*
scope
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
std
::
shared_ptr
<
Scope
>
&
scope
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
ExecutionStrategy
&
exec_strategy
,
const
BuildStrategy
&
build_strategy
,
size_t
num_trainers
,
size_t
trainer_id
)
:
member_
(
new
ParallelExecutorPrivate
(
places
))
{
...
...
@@ -142,13 +144,13 @@ ParallelExecutor::ParallelExecutor(
member_
->
own_local_scope_
=
true
;
member_
->
local_scopes_
.
emplace_back
(
member_
->
global_scope_
);
for
(
size_t
i
=
1
;
i
<
member_
->
places_
.
size
();
++
i
)
{
member_
->
local_scopes_
.
emplace_back
(
&
scope
->
New
Scope
());
member_
->
local_scopes_
.
emplace_back
(
scope
->
NewShared
Scope
());
}
}
else
{
member_
->
own_local_scope_
=
false
;
PADDLE_ENFORCE_EQ
(
member_
->
places_
.
size
(),
local_scopes
.
size
());
for
(
size_t
i
=
0
;
i
<
member_
->
places_
.
size
();
++
i
)
{
member_
->
local_scopes_
.
emplace_back
(
&
local_scopes
[
i
]
->
New
Scope
());
member_
->
local_scopes_
.
emplace_back
(
local_scopes
[
i
]
->
NewShared
Scope
());
}
}
...
...
@@ -321,7 +323,7 @@ void ParallelExecutor::FeedTensorsIntoLocalScopes(
for
(
size_t
i
=
0
;
i
<
tensors
.
size
();
++
i
)
{
auto
&
map
=
tensors
[
i
];
auto
*
scope
=
member_
->
local_scopes_
[
i
];
auto
&
scope
=
member_
->
local_scopes_
[
i
];
for
(
auto
&
pair
:
map
)
{
auto
*
trg
=
scope
->
Var
(
pair
.
first
)
->
GetMutable
<
LoDTensor
>
();
trg
->
ShareDataWith
(
pair
.
second
);
...
...
@@ -351,8 +353,15 @@ void ParallelExecutor::FeedAndSplitTensorIntoLocalScopes(
ParallelExecutor
::~
ParallelExecutor
()
{
if
(
member_
->
own_local_scope_
)
{
std
::
vector
<
Scope
*>
local_scopes_ptrs
;
local_scopes_ptrs
.
reserve
(
member_
->
local_scopes_
.
size
());
for
(
size_t
i
=
1
;
i
<
member_
->
local_scopes_
.
size
();
++
i
)
{
member_
->
global_scope_
->
DeleteScope
(
member_
->
local_scopes_
[
i
]);
local_scopes_ptrs
.
emplace_back
(
member_
->
local_scopes_
[
i
].
get
());
member_
->
local_scopes_
[
i
].
reset
();
}
for
(
size_t
i
=
0
;
i
!=
local_scopes_ptrs
.
size
();
++
i
)
{
member_
->
global_scope_
->
DeleteScope
(
local_scopes_ptrs
[
i
]);
}
}
}
...
...
paddle/fluid/framework/parallel_executor.h
浏览文件 @
681514e1
...
...
@@ -39,19 +39,20 @@ class ParallelExecutor {
DISABLE_COPY_AND_ASSIGN
(
ParallelExecutor
);
public:
explicit
ParallelExecutor
(
const
std
::
vector
<
platform
::
Place
>
&
places
,
const
std
::
unordered_set
<
std
::
string
>
&
params
,
const
std
::
unordered_set
<
std
::
string
>
&
bcast_vars
,
const
ProgramDesc
&
main_program
,
const
std
::
string
&
loss_var_name
,
Scope
*
scope
,
const
std
::
vector
<
Scope
*>
&
local_scopes
,
const
ExecutionStrategy
&
exec_strategy
,
const
BuildStrategy
&
build_strategy
,
size_t
num_trainers
=
1
,
size_t
trainer_id
=
0
);
explicit
ParallelExecutor
(
const
std
::
vector
<
platform
::
Place
>
&
places
,
const
std
::
unordered_set
<
std
::
string
>
&
params
,
const
std
::
unordered_set
<
std
::
string
>
&
bcast_vars
,
const
ProgramDesc
&
main_program
,
const
std
::
string
&
loss_var_name
,
const
std
::
shared_ptr
<
Scope
>
&
scope
,
const
std
::
vector
<
std
::
shared_ptr
<
Scope
>>
&
local_scopes
,
const
ExecutionStrategy
&
exec_strategy
,
const
BuildStrategy
&
build_strategy
,
size_t
num_trainers
=
1
,
size_t
trainer_id
=
0
);
~
ParallelExecutor
();
std
::
vector
<
Scope
*
>
&
GetLocalScopes
();
std
::
vector
<
std
::
shared_ptr
<
Scope
>
>
&
GetLocalScopes
();
/**
* Feed tensors to local scopes. The size of tensors should be equal to the
...
...
paddle/fluid/framework/scope.cc
浏览文件 @
681514e1
...
...
@@ -38,8 +38,8 @@ Scope::~Scope() { DropKids(); }
Scope
&
Scope
::
NewScope
()
const
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
mutex_
);
kids_
.
push_back
(
new
Scope
(
this
));
return
*
kids_
.
back
();
kids_
.
push_back
(
std
::
shared_ptr
<
Scope
>
(
new
Scope
(
this
)
));
return
kids_
.
back
().
get
();
}
Variable
*
Scope
::
Var
(
const
std
::
string
&
name
)
{
...
...
@@ -68,7 +68,6 @@ const Scope* Scope::FindScope(const Variable* var) const {
void
Scope
::
DropKids
()
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
mutex_
);
for
(
Scope
*
s
:
kids_
)
delete
s
;
kids_
.
clear
();
}
...
...
@@ -84,8 +83,12 @@ std::vector<std::string> Scope::LocalVarNames() const {
void
Scope
::
DeleteScope
(
Scope
*
scope
)
const
{
std
::
unique_lock
<
std
::
mutex
>
lock
(
mutex_
);
auto
it
=
std
::
find
(
this
->
kids_
.
begin
(),
this
->
kids_
.
end
(),
scope
);
auto
it
=
std
::
find_if
(
this
->
kids_
.
begin
(),
this
->
kids_
.
end
(),
[
&
scope
](
const
std
::
shared_ptr
<
Scope
>&
kid
)
{
return
kid
.
get
()
==
scope
;
});
PADDLE_ENFORCE
(
it
!=
this
->
kids_
.
end
(),
"Cannot find %p as kid scope"
,
scope
);
it
->
reset
();
this
->
kids_
.
erase
(
it
);
// When making memory benchmark on Fluid, we have to delete scope sync.
if
(
FLAGS_benchmark
||
FLAGS_eager_delete_scope
)
{
...
...
paddle/fluid/framework/scope.h
浏览文件 @
681514e1
...
...
@@ -105,7 +105,7 @@ class Scope {
Variable
*
FindVarLocally
(
const
std
::
string
&
name
)
const
;
// Scope in `kids_` are owned by this class.
mutable
std
::
list
<
Scope
*
>
kids_
;
mutable
std
::
list
<
std
::
shared_ptr
<
Scope
>
>
kids_
;
Scope
const
*
parent_
{
nullptr
};
DISABLE_COPY_AND_ASSIGN
(
Scope
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录