aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/grappler/utils.cc
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-04-12 16:59:57 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-04-12 17:10:43 -0700
commit4d568133aade026bfc3bcee3a444682a349058b6 (patch)
tree12e45dd36ccabb546497b455901501521e9e3c44 /tensorflow/core/grappler/utils.cc
parent59c828c5f0d040f6461534d7760e2ff6e89b3f1a (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.cc41
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;
+ }
}
}
}