From cca71532eb6be8de79842b2bf7ece2ba7d80521b Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 31 Jan 2019 23:15:58 +0800 Subject: [PATCH 1/3] add skip send.recv test=develop --- .../framework/details/analysis_var_pass.cc | 22 +++++++++---------- .../framework/details/analysis_var_pass.h | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/paddle/fluid/framework/details/analysis_var_pass.cc b/paddle/fluid/framework/details/analysis_var_pass.cc index 223b9da3cf..c6a9d08f73 100644 --- a/paddle/fluid/framework/details/analysis_var_pass.cc +++ b/paddle/fluid/framework/details/analysis_var_pass.cc @@ -79,8 +79,7 @@ void FilterVariables(const Container& nodes, Callback callback) { std::unique_ptr AnalysisVarPass::ApplyImpl( std::unique_ptr graph) const { auto nodes = graph->Nodes(); - auto subblock_vars = GetSubBlockVars(nodes); - skip_set_.insert(subblock_vars.begin(), subblock_vars.end()); + CollectSkipSet(nodes); cfg_.reset(new details::ControlFlowGraph(*graph)); cfg_->LiveVariableAnalysis(); @@ -247,20 +246,21 @@ void AnalysisVarPass::SubGraphOptimize(OpDesc* op_desc) const { } } -std::unordered_set AnalysisVarPass::GetSubBlockVars( +void AnalysisVarPass::CollectSkipSet( const std::unordered_set& nodes) const { - std::unordered_set vars; + auto update_skip_set = [&](OpDesc* op_desc) { + auto inputs = op_desc->InputArgumentNames(); + auto outputs = op_desc->OutputArgumentNames(); + skip_set_.insert(inputs.begin(), inputs.end()); + skip_set_.insert(outputs.begin(), outputs.end()); + }; for (auto& op : nodes) { if (!op->IsOp() || op->Op() == nullptr) continue; auto* op_desc = op->Op(); - if (OpHasSubBlock(op_desc)) { - auto inputs = op_desc->InputArgumentNames(); - auto outputs = op_desc->OutputArgumentNames(); - vars.insert(inputs.begin(), inputs.end()); - vars.insert(outputs.begin(), outputs.end()); - } + if (OpHasSubBlock(op_desc)) update_skip_set(op_desc); + if (op_desc->Type() == "send") update_skip_set(op_desc); + if (op_desc->Type() == "recv") update_skip_set(op_desc); } - return vars; } void AnalysisVarPass::RenameVarInGraphDesc(const std::string& var, diff --git a/paddle/fluid/framework/details/analysis_var_pass.h b/paddle/fluid/framework/details/analysis_var_pass.h index 144204beaf..007bdd8311 100644 --- a/paddle/fluid/framework/details/analysis_var_pass.h +++ b/paddle/fluid/framework/details/analysis_var_pass.h @@ -60,8 +60,8 @@ class AnalysisVarPass : public ir::Pass { // valid a tensor can be reuse or not bool NodeCanReused(ir::Node* node) const; // scan subblock and collect the output/input variables. - std::unordered_set GetSubBlockVars( - const std::unordered_set&) const; + // scan the dist 'send', 'recv' op inputs/outputs + void CollectSkipSet(const std::unordered_set&) const; // check op has subblock or not bool OpHasSubBlock(OpDesc* desc) const; From 4ef34916a41a98ebbd7cd560e350d2690a2c9c1e Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Fri, 1 Feb 2019 15:36:07 +0800 Subject: [PATCH 2/3] enhanced print message. test=develop --- paddle/fluid/framework/details/inplace_op_pass.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paddle/fluid/framework/details/inplace_op_pass.cc b/paddle/fluid/framework/details/inplace_op_pass.cc index cf16ac1264..78c5d5b50e 100644 --- a/paddle/fluid/framework/details/inplace_op_pass.cc +++ b/paddle/fluid/framework/details/inplace_op_pass.cc @@ -408,7 +408,8 @@ void GraphView::Build(ir::Graph* g) { if (in->IsVar() && in->Var() != nullptr) dup_nodes_.emplace(in->Name()); } for (auto& out : node->outputs) { - if (in->IsVar() && in->Var() != nullptr) dup_nodes_.emplace(in->Name()); + if (out->IsVar() && out->Var() != nullptr) + dup_nodes_.emplace(out->Name()); } }; for (auto& node : g->Nodes()) { From 5d30b55de1def87efba8a0ecafcdd5b9ccfdf3b4 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Sat, 2 Feb 2019 11:42:06 +0800 Subject: [PATCH 3/3] rerun ci. test=develop --- paddle/fluid/framework/inplace_op_inference_test.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/paddle/fluid/framework/inplace_op_inference_test.cc b/paddle/fluid/framework/inplace_op_inference_test.cc index 121f648a5f..3e4d715c6f 100644 --- a/paddle/fluid/framework/inplace_op_inference_test.cc +++ b/paddle/fluid/framework/inplace_op_inference_test.cc @@ -276,6 +276,7 @@ TEST(InferInplace, MultiGradInplaceInToOut) { auto& infer_inplace = OpInfoMap::Instance().Get(op->Type()).infer_inplace_; auto in_to_outs = infer_inplace(*op, op->Block()); + EXPECT_EQ(in_to_outs.size(), 3ul); std::unordered_map expects = { {"o0", "a0"}, {"y0", "b0"}, {"z0", "c0"},