aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/grappler/costs/virtual_scheduler.cc
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2017-12-22 10:35:05 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2017-12-22 10:43:28 -0800
commit87fcd473fba75a6ca8ee8e479116b7baa3296a33 (patch)
treeb1f56b21990f2620828cb328f5acba99053c47d5 /tensorflow/core/grappler/costs/virtual_scheduler.cc
parent2f484f175a9229d598e81a1803f5db0bbb10e7a3 (diff)
In FirstReady node manager, use node name as tie-breaker when multiple nodes
have same time_ready. PiperOrigin-RevId: 179940344
Diffstat (limited to 'tensorflow/core/grappler/costs/virtual_scheduler.cc')
-rw-r--r--tensorflow/core/grappler/costs/virtual_scheduler.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/tensorflow/core/grappler/costs/virtual_scheduler.cc b/tensorflow/core/grappler/costs/virtual_scheduler.cc
index f74ec8cb9f..fce50e33d6 100644
--- a/tensorflow/core/grappler/costs/virtual_scheduler.cc
+++ b/tensorflow/core/grappler/costs/virtual_scheduler.cc
@@ -118,9 +118,14 @@ FirstReadyManager::FirstReadyManager(
: ReadyNodeManager(), node_state_(node_state) {
std::make_heap(nodes_.begin(), nodes_.end());
greater_ = [this](const NodeDef* a, const NodeDef* b) -> bool {
- // Note: we need a node with minimum time_ready, not
- // maximum; hence, using a > b for comparison function.
- return node_state_->at(a).time_ready > node_state_->at(b).time_ready;
+ if (node_state_->at(a).time_ready == node_state_->at(b).time_ready) {
+ // Use Node name as tie-breaker for deterministic node scheduling.
+ return a->name().compare(b->name()) > 0;
+ } else {
+ // Note: we need a node with minimum time_ready, not
+ // maximum; hence, using a > b for comparison function.
+ return node_state_->at(a).time_ready > node_state_->at(b).time_ready;
+ }
};
}