diff options
author | A. Unique TensorFlower <gardener@tensorflow.org> | 2017-05-01 16:14:06 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2017-05-01 17:31:34 -0700 |
commit | aebaf317ce50ef42ebaab91191224c872389a6f6 (patch) | |
tree | de9dc459f797e990a057b6aba5f9c76634937abe /tensorflow/core/graph/graph.cc | |
parent | 0135602ffd33f21d702ee7a3a55e86cd85af45ca (diff) |
This CL removes the Graph.edge_set_ field. This field stores a set of the Edge* that are in a Graph. However, Graph already stores this information, in Graph.edges_. There's really no good reason to keep both of these collections. To convert everything to use Graph.edges_ instead of Graph.edge_set_, I defined a class which handled excluding nullptr from iteration of the edges_ vector.
This caused changes to non-contractual behavior of the runtime (enumeration order), so the unit tests are updated to reflect this.
On a real-world graph used by our team, which contains 13190 nodes and 20796 edges, this change reduced heap allocation from 39.1 MB to 38.0 MB, for a drop of about 3%.
Change: 154781831
Diffstat (limited to 'tensorflow/core/graph/graph.cc')
-rw-r--r-- | tensorflow/core/graph/graph.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/tensorflow/core/graph/graph.cc b/tensorflow/core/graph/graph.cc index e1657cb862..a68a8f2509 100644 --- a/tensorflow/core/graph/graph.cc +++ b/tensorflow/core/graph/graph.cc @@ -344,7 +344,7 @@ const Edge* Graph::AddEdge(Node* source, int x, Node* dest, int y) { CHECK(source->out_edges_.insert(e).second); CHECK(dest->in_edges_.insert(e).second); edges_.push_back(e); - edge_set_.insert(e); + ++num_edges_; return e; } @@ -354,8 +354,8 @@ void Graph::RemoveEdge(const Edge* e) { CHECK_EQ(e->src_->out_edges_.erase(e), size_t{1}); CHECK_EQ(e->dst_->in_edges_.erase(e), size_t{1}); CHECK_EQ(e, edges_[e->id_]); + CHECK_GT(num_edges_, 0); - CHECK_EQ(edge_set_.erase(e), size_t{1}); edges_[e->id_] = nullptr; Edge* del = const_cast<Edge*>(e); @@ -365,6 +365,7 @@ void Graph::RemoveEdge(const Edge* e) { del->src_output_ = kControlSlot - 1; del->dst_input_ = kControlSlot - 1; free_edges_.push_back(del); + --num_edges_; } Status Graph::AddFunctionLibrary(const FunctionDefLibrary& fdef_lib) { |