Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Oneflow-Inc
oneflow
提交
443b3dfd
O
oneflow
项目概览
Oneflow-Inc
/
oneflow
上一次同步 2 年多
通知
13
Star
2733
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oneflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
443b3dfd
编写于
8月 14, 2019
作者:
L
lixinqi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
copyhd-free output_op task_node
上级
2fab3c60
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
33 addition
and
40 deletion
+33
-40
oneflow/core/graph/task_graph.cpp
oneflow/core/graph/task_graph.cpp
+10
-6
oneflow/core/job_completer/job_completer.cpp
oneflow/core/job_completer/job_completer.cpp
+23
-27
oneflow/core/operator/operator.h
oneflow/core/operator/operator.h
+0
-5
oneflow/core/operator/output_op.cpp
oneflow/core/operator/output_op.cpp
+0
-1
oneflow/core/operator/switch_output_op.cpp
oneflow/core/operator/switch_output_op.cpp
+0
-1
未找到文件。
oneflow/core/graph/task_graph.cpp
浏览文件 @
443b3dfd
...
...
@@ -15,12 +15,12 @@ namespace oneflow {
namespace
{
bool
Is
Output
InterfaceTask
(
const
TaskNode
*
node
)
{
bool
IsInterfaceTask
(
const
TaskNode
*
node
)
{
const
auto
*
comp_task_node
=
dynamic_cast
<
const
CompTaskNode
*>
(
node
);
if
(
comp_task_node
==
nullptr
)
{
return
false
;
}
if
(
comp_task_node
->
logical_node
()
->
op_vec
().
size
()
!=
1
)
{
return
false
;
}
auto
op_type_case
=
comp_task_node
->
logical_node
()
->
SoleOp
()
->
op_conf
().
op_type_case
();
return
IsClassRegistered
<
Is
Output
InterfaceOpConf4OpTypeCase
>
(
op_type_case
);
return
IsClassRegistered
<
IsInterfaceOpConf4OpTypeCase
>
(
op_type_case
);
}
bool
IsConnectToTickOp
(
const
TaskNode
*
node
)
{
...
...
@@ -762,7 +762,7 @@ void TaskGraph::BuildTaskPath(
||
cur_node
->
MemZoneId121
()
!=
dst
->
MemZoneId121
())
{
cur_node
=
BuildTaskStep
(
cur_node
,
dst
,
GetBufTask
,
SetBufTask
,
use_buf_task_node
);
}
Connect
<
TaskNode
>
(
cur_node
,
NewEdge
(),
dst
);
if
(
cur_node
!=
dst
)
{
Connect
<
TaskNode
>
(
cur_node
,
NewEdge
(),
dst
);
}
}
TaskNode
*
TaskGraph
::
BuildTaskStep
(
...
...
@@ -783,6 +783,7 @@ TaskNode* TaskGraph::BuildTaskStep(
next_mem_zone_id
=
dst
->
MemZoneId121
();
if
(
!
use_buf_task_node
||
!
(
next_node
=
GetBufTask
(
cur_node
->
machine_id
(),
next_mem_zone_id
)))
{
next_node
=
TryAddCopyH2DTaskTo
(
dst
);
if
(
next_node
==
nullptr
)
{
next_node
=
dst
;
}
Connect
<
TaskNode
>
(
cur_node
,
NewEdge
(),
next_node
);
}
}
else
if
(
cur_node
->
machine_id
()
!=
dst
->
machine_id
())
{
...
...
@@ -794,12 +795,14 @@ TaskNode* TaskGraph::BuildTaskStep(
}
else
{
UNIMPLEMENTED
();
}
if
(
use_buf_task_node
)
{
SetBufTask
(
next_node
->
machine_id
(),
next_mem_zone_id
,
next_node
);
}
if
(
use_buf_task_node
&&
(
next_node
!=
dst
))
{
SetBufTask
(
next_node
->
machine_id
(),
next_mem_zone_id
,
next_node
);
}
return
next_node
;
}
TaskNode
*
TaskGraph
::
TryAddCopyH2DTaskTo
(
TaskNode
*
task
)
{
if
(
Is
OutputInterfaceTask
(
task
))
{
return
task
;
}
if
(
Is
InterfaceTask
(
task
))
{
return
nullptr
;
}
CHECK_EQ
(
task
->
device_type
(),
DeviceType
::
kGPU
);
CopyHdTaskNode
*
copy_task
=
NewNode
<
CopyHdTaskNode
>
();
copy_task
->
Init
(
CopyHdOpConf
::
H2D
,
task
->
machine_id
(),
task
->
GpuPhyId
());
...
...
@@ -860,7 +863,8 @@ void TaskGraph::BuildInBoxing(const LogicalNode* logical,
TaskNode
*
task
=
comp_task
;
if
(
task
->
device_type
()
==
DeviceType
::
kGPU
)
{
task
=
TryAddCopyH2DTaskTo
(
comp_task
);
Connect
<
TaskNode
>
(
task
,
NewEdge
(),
comp_task
);
if
(
task
==
nullptr
)
{
task
=
comp_task
;
}
if
(
task
!=
comp_task
)
{
Connect
<
TaskNode
>
(
task
,
NewEdge
(),
comp_task
);
}
}
machine_id2bound_task
[
task
->
machine_id
()].
push_back
(
task
);
}
...
...
oneflow/core/job_completer/job_completer.cpp
浏览文件 @
443b3dfd
...
...
@@ -32,10 +32,11 @@ void WithOpGraphAndMutJob(Job* job, const std::function<void(const OpGraph&, Job
Handler
(
op_graph
,
job
);
}
void
WithOpGraphAndMutJobBuilder
(
Job
Builder
*
job_builder
,
void
WithOpGraphAndMutJobBuilder
(
Job
*
job
,
const
std
::
function
<
void
(
const
OpGraph
&
,
JobBuilder
*
)
>&
Handler
)
{
OpGraph
op_graph
(
job_builder
->
job
());
Handler
(
op_graph
,
job_builder
);
OpGraph
op_graph
(
*
job
);
JobBuilder
job_builder
(
job
);
Handler
(
op_graph
,
&
job_builder
);
}
void
GenerateFacadeImplOpConfIf
(
const
OpNode
&
op_node
,
JobBuilder
*
job_builder
)
{
...
...
@@ -461,36 +462,31 @@ void JobCompleter::Complete(Job* job) const {
// replace facade op
SplitDecodeOps
(
job
);
AddRecordLoadOps
(
job
);
auto
job_builder
=
std
::
make_unique
<
JobBuilder
>
(
job
);
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
ReplaceFacade
);
WithOpGraphAndMutJobBuilder
(
job
,
&
ReplaceFacade
);
// complete variable ops
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
AutoVar
);
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
SetDefaultVariableConf
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AutoVar
);
WithOpGraphAndMutJobBuilder
(
job
,
&
SetDefaultVariableConf
);
if
(
GlobalJobDesc
().
IsTrain
())
{
WithOpGraphAndMutJob
(
job
,
&
TieUpChainHeadersUnReachableFromAnyVariableOps
);
job_builder
.
reset
(
new
JobBuilder
(
job
));
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
EnableAutoMixedPrecision
);
WithOpGraphAndMutJobBuilder
(
job
,
&
EnableAutoMixedPrecision
);
// complete ops for trainning
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
GenerateOpConf4Trainning
);
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
RewriteBoxingWithAllReduce
);
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
MakeAllReduceSequence
);
WithOpGraphAndMutJobBuilder
(
job
,
&
GenerateOpConf4Trainning
);
WithOpGraphAndMutJobBuilder
(
job
,
&
RewriteBoxingWithAllReduce
);
WithOpGraphAndMutJobBuilder
(
job
,
&
MakeAllReduceSequence
);
}
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
DumpLogicalBlobDescAndSbpSignature
);
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
GroupBoxingByDstParallel
);
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
AddKeepHeaderOnlyOp
);
WithOpGraphAndMutJobBuilder
(
job
_builder
.
get
()
,
&
SetCtrlInOpName4VariableOp
);
WithOpGraphAndMutJobBuilder
(
job
,
&
DumpLogicalBlobDescAndSbpSignature
);
WithOpGraphAndMutJobBuilder
(
job
,
&
GroupBoxingByDstParallel
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AddKeepHeaderOnlyOp
);
WithOpGraphAndMutJobBuilder
(
job
,
&
SetCtrlInOpName4VariableOp
);
// complete tick ops
job_builder
.
reset
(
new
JobBuilder
(
job
));
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
AutoSourceTick
);
job_builder
.
reset
(
new
JobBuilder
(
job
));
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
AddTickForTimeShape
);
job_builder
.
reset
(
new
JobBuilder
(
job
));
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
AutoSinkTick
);
AddGlobalTotalJobCriticalSection
(
job_builder
->
job
());
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
AddGlobalInputCriticalSections
);
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
AddGlobalOutputCriticalSections
);
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
DumpLogicalBlobDescAndSbpSignature
);
WithOpGraphAndMutJobBuilder
(
job_builder
.
get
(),
&
SetOpTimeShape7BatchDimLbis
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AutoSourceTick
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AddTickForTimeShape
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AutoSinkTick
);
AddGlobalTotalJobCriticalSection
(
*
job
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AddGlobalInputCriticalSections
);
WithOpGraphAndMutJobBuilder
(
job
,
&
AddGlobalOutputCriticalSections
);
WithOpGraphAndMutJobBuilder
(
job
,
&
DumpLogicalBlobDescAndSbpSignature
);
WithOpGraphAndMutJobBuilder
(
job
,
&
SetOpTimeShape7BatchDimLbis
);
CheckOpGraph
(
OpGraph
(
*
job
));
}
...
...
oneflow/core/operator/operator.h
浏览文件 @
443b3dfd
...
...
@@ -313,7 +313,6 @@ struct RuntimeMemBlockNum4OpSameOutputBlob final {
};
struct
IsInterfaceOpConf4OpTypeCase
final
{};
struct
IsOutputInterfaceOpConf4OpTypeCase
final
{};
#define REGISTER_OP(op_type_case, OpType) \
REGISTER_CLASS_CREATOR(op_type_case, OnlyCpuSupportPredicator, \
...
...
@@ -338,10 +337,6 @@ struct IsOutputInterfaceOpConf4OpTypeCase final {};
REGISTER_CLASS_CREATOR(op_type_case, IsInterfaceOpConf4OpTypeCase, \
([] { return new IsInterfaceOpConf4OpTypeCase(); }))
#define REGISTER_OUTPUT_INTERFACE_OP(op_type_case) \
REGISTER_CLASS_CREATOR(op_type_case, IsOutputInterfaceOpConf4OpTypeCase, \
([] { return new IsOutputInterfaceOpConf4OpTypeCase(); }))
std
::
shared_ptr
<
Operator
>
ConstructOp
(
const
OperatorConf
&
op_conf
);
inline
std
::
shared_ptr
<
Operator
>
ConstructOp
(
const
OperatorConf
&
op_conf
,
DeviceType
device_type
)
{
...
...
oneflow/core/operator/output_op.cpp
浏览文件 @
443b3dfd
...
...
@@ -34,6 +34,5 @@ void OutputOp::GetSbpSignatures(
REGISTER_OP
(
OperatorConf
::
kOutputConf
,
OutputOp
);
REGISTER_OP_SAME_OUTPUT_BLOB_MEM_BLOCK_NUM
(
OperatorConf
::
kOutputConf
,
1
);
REGISTER_INTERFACE_OP
(
OperatorConf
::
kOutputConf
);
REGISTER_OUTPUT_INTERFACE_OP
(
OperatorConf
::
kOutputConf
);
}
// namespace oneflow
oneflow/core/operator/switch_output_op.cpp
浏览文件 @
443b3dfd
...
...
@@ -51,6 +51,5 @@ void SwitchOutputOp::GetSbpSignatures(
REGISTER_OP
(
OperatorConf
::
kSwitchOutputConf
,
SwitchOutputOp
);
REGISTER_OP_SAME_OUTPUT_BLOB_MEM_BLOCK_NUM
(
OperatorConf
::
kSwitchOutputConf
,
1
);
REGISTER_INTERFACE_OP
(
OperatorConf
::
kSwitchOutputConf
);
REGISTER_OUTPUT_INTERFACE_OP
(
OperatorConf
::
kSwitchOutputConf
);
}
// namespace oneflow
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录