diff options
author | A. Unique TensorFlower <gardener@tensorflow.org> | 2018-04-12 16:59:57 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-04-12 17:10:43 -0700 |
commit | 4d568133aade026bfc3bcee3a444682a349058b6 (patch) | |
tree | 12e45dd36ccabb546497b455901501521e9e3c44 /tensorflow/core/grappler/utils.cc | |
parent | 59c828c5f0d040f6461534d7760e2ff6e89b3f1a (diff) |
Misc. small optimizations in Grappler and shape inference code.
Impact on time per optimizer on inception graph:
model_pruner: 590 ms -> 550 ms (-7%)
function_optimizer: 130 ms -> 130 ms (-0%)
constant_folding: 7600 ms -> 7550 ms (-0.7%)
arithmetic_optimizer: 1860 ms -> 1550 ms (-20%)
loop_optimizer: 320 ms -> 320 ms (-0%)
dependency_optimizer: 1300 ms -> 720 ms (-45%)
layout: 1400 ms -> 1400 ms (-0%)
memory_optimizer: 4200 ms -> 3540 ms (-16%)
PiperOrigin-RevId: 192694528
Diffstat (limited to 'tensorflow/core/grappler/utils.cc')
-rw-r--r-- | tensorflow/core/grappler/utils.cc | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/tensorflow/core/grappler/utils.cc b/tensorflow/core/grappler/utils.cc index 534fe670e0..7398d2c896 100644 --- a/tensorflow/core/grappler/utils.cc +++ b/tensorflow/core/grappler/utils.cc @@ -142,38 +142,12 @@ bool IsSameInput(const string& name1, const string& name2) { return true; } int position1; - string node1 = ParseNodeName(name1, &position1); + StringPiece node1 = ParseNodeNameAsStringPiece(name1, &position1); int position2; - string node2 = ParseNodeName(name2, &position2); + StringPiece node2 = ParseNodeNameAsStringPiece(name2, &position2); return (position1 == position2) && (node1 == node2); } -string ParseNodeName(const string& name, int* position) { - // Strip the prefix '^' (if any), and strip the trailing ":{digits} (if any) - // to get a node name. - strings::Scanner scan(name); - scan.ZeroOrOneLiteral("^") - .RestartCapture() - .One(strings::Scanner::LETTER_DIGIT_DOT_UNDERSCORE) - .Any(strings::Scanner::LETTER_DIGIT_DASH_DOT_SLASH_UNDERSCORE); - StringPiece capture; - StringPiece remaining; - if (scan.Peek(':') != ':' || !scan.GetResult(&remaining, &capture)) { - *position = 0; - return ""; - } else { - if (name[0] == '^') { - *position = -1; - } else if (remaining.empty()) { - *position = 0; - } else { - // Skip the first ':' character. - CHECK(strings::safe_strto32(remaining.substr(1), position)); - } - return capture.ToString(); - } -} - bool IsControlInput(const string& name) { return !name.empty() && name[0] == '^'; } @@ -185,7 +159,7 @@ string NodeName(const string& name) { int NodePosition(const string& name) { int position; - ParseNodeName(name, &position); + ParseNodeNameAsStringPiece(name, &position); return position; } @@ -275,13 +249,20 @@ int NumNonControlInputs(const NodeDef& node) { int NumNonControlOutputs(const NodeDef& node, const NodeMap& node_map) { int num_outputs = 0; + int pos; for (const NodeDef* output : node_map.GetOutputs(node.name())) { for (const string& node_as_input : output->input()) { if (IsControlInput(node_as_input)) { break; } - if (NodeName(node_as_input) == node.name()) { + if (node_as_input == node.name()) { ++num_outputs; + } else { + const StringPiece name = + ParseNodeNameAsStringPiece(node_as_input, &pos); + if (name == node.name()) { + ++num_outputs; + } } } } |