提交 d94a314d 编写于 作者: D dzhwinter

add reference. test=develop

上级 591ad33e
...@@ -46,7 +46,6 @@ namespace details { ...@@ -46,7 +46,6 @@ namespace details {
std::unique_ptr<ir::Graph> MemoryOptimizePass::ApplyImpl( std::unique_ptr<ir::Graph> MemoryOptimizePass::ApplyImpl(
std::unique_ptr<ir::Graph> graph) const { std::unique_ptr<ir::Graph> graph) const {
auto nodes = graph->Nodes(); auto nodes = graph->Nodes();
ClearControlDepVars(graph.get());
CollectSkipVarsSet(nodes); CollectSkipVarsSet(nodes);
cfg_.reset(new details::ControlFlowGraph(*graph)); cfg_.reset(new details::ControlFlowGraph(*graph));
...@@ -79,7 +78,7 @@ std::unique_ptr<ir::Graph> MemoryOptimizePass::ApplyImpl( ...@@ -79,7 +78,7 @@ std::unique_ptr<ir::Graph> MemoryOptimizePass::ApplyImpl(
ir::Node* cache = pool_.FindBestFitNode(var); ir::Node* cache = pool_.FindBestFitNode(var);
while (cache != nullptr && var->Name() == cache->Name()) { while (cache != nullptr && var->Name() == cache->Name()) {
VLOG(3) << "The same cache variable is cascade reused. " VLOG(3) << "The same cache variable is cascade reused. "
<< var->Name() << " is re-filled to the pool after" << cache->Name() << " is re-filled to the pool after "
<< "the reused op is finished. Current op can not " << "the reused op is finished. Current op can not "
<< "replace it again. Skip this candidate."; << "replace it again. Skip this candidate.";
cache = pool_.FindNextBestFitNode(var, cache); cache = pool_.FindNextBestFitNode(var, cache);
...@@ -325,32 +324,6 @@ void MemoryOptimizePass::RenameVarInGraphNode(const std::string& var, ...@@ -325,32 +324,6 @@ void MemoryOptimizePass::RenameVarInGraphNode(const std::string& var,
} }
} }
void MemoryOptimizePass::ClearControlDepVars(ir::Graph* graph) const {
for (auto& op : graph->Nodes()) {
if (!op->IsOp()) continue;
{
auto& nodes = op->inputs;
nodes.erase(
std::remove_if(nodes.begin(), nodes.end(),
[&](ir::Node* var) { return var->IsCtrlVar(); }),
nodes.end());
}
{
auto& nodes = op->outputs;
nodes.erase(
std::remove_if(nodes.begin(), nodes.end(),
[&](ir::Node* var) { return var->IsCtrlVar(); }),
nodes.end());
}
}
for (auto& node : graph->Nodes()) {
if (node->IsCtrlVar()) {
graph->RemoveNode(node);
}
}
}
} // namespace details } // namespace details
} // namespace framework } // namespace framework
} // namespace paddle } // namespace paddle
......
...@@ -48,7 +48,6 @@ class MemoryOptimizePass : public ir::Pass { ...@@ -48,7 +48,6 @@ class MemoryOptimizePass : public ir::Pass {
void RenameVarInGraphNode(const std::string& var, void RenameVarInGraphNode(const std::string& var,
const std::string& cache_var, size_t idx, const std::string& cache_var, size_t idx,
ir::Graph* graph) const; ir::Graph* graph) const;
void ClearControlDepVars(ir::Graph* graph) const;
void SubGraphOptimize(OpDesc* op_desc) const; void SubGraphOptimize(OpDesc* op_desc) const;
// 1. scan op with subblock and collect the output/input vars. // 1. scan op with subblock and collect the output/input vars.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册