13cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. 23cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 33cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerLicensed under the Apache License, Version 2.0 (the "License"); 43cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFloweryou may not use this file except in compliance with the License. 53cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerYou may obtain a copy of the License at 63cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 73cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower http://www.apache.org/licenses/LICENSE-2.0 83cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 93cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerUnless required by applicable law or agreed to in writing, software 103cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerdistributed under the License is distributed on an "AS IS" BASIS, 113cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerSee the License for the specific language governing permissions and 133cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerlimitations under the License. 143cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower==============================================================================*/ 153cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 163cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#ifndef TENSORFLOW_CORE_GRAPPLER_OPTIMIZERS_LOOP_OPTIMIZER_H_ 173cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#define TENSORFLOW_CORE_GRAPPLER_OPTIMIZERS_LOOP_OPTIMIZER_H_ 183cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 193cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include <unordered_set> 203cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include "tensorflow/core/grappler/optimizers/graph_optimizer.h" 213cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include "tensorflow/core/grappler/utils.h" 223cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include "tensorflow/core/protobuf/rewriter_config.pb.h" 233cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 243cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowernamespace tensorflow { 253cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowernamespace grappler { 263cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 273cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerclass LoopOptimizer : public GraphOptimizer { 283cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower public: 293cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower LoopOptimizer() : opt_level_(RewriterConfig::ON) {} 303cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower explicit LoopOptimizer(RewriterConfig::Toggle opt_level) 313cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower : opt_level_(opt_level) {} 323cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower ~LoopOptimizer() override {} 333cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 343cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower string name() const override { return "loop_optimizer"; }; 353cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 363cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower Status Optimize(Cluster* cluster, const GrapplerItem& item, 373cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower GraphDef* optimized_graph) override; 383cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 393cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower void Feedback(Cluster* cluster, const GrapplerItem& item, 403cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower const GraphDef& optimized_graph, double result) override; 413cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 423cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower private: 433cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower RewriterConfig::Toggle opt_level_; 443cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower}; 453cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 463cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower} // end namespace grappler 473cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower} // end namespace tensorflow 483cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower 493cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#endif // TENSORFLOW_CORE_GRAPPLER_OPTIMIZERS_LOOP_OPTIMIZER_H_ 50