analyzer.h 2.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */

G
gongweibao 已提交
15 16
#pragma once

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
/*
 * This file contains Analyzer, an class that exposed as a library that analyze
 * and optimize
 * Fluid ProgramDesc for inference. Similar to LLVM, it has multiple flags to
 * control whether
 * an process is applied on the program.
 *
 * The processes are called Passes in analysis, the Passes are placed in a
 * pipeline, the first
 * Pass is the FluidToDataFlowGraphPass which transforms a Fluid ProgramDesc to
 * a data flow
 * graph, the last Pass is DataFlowGraphToFluidPass which transforms a data flow
 * graph to a
 * Fluid ProgramDesc. The passes in the middle of the pipeline can be any Passes
 * which take a
 * node or data flow graph as input.
 *
 * The Analyzer can be used in two methods, the first is a executable file which
 * can be used to
 * pre-process the inference model and can be controlled by passing difference
 * command flags;
 * the other way is to compose inside the inference API as a runtime pre-process
 * phase in the
 * inference service.
 */

#include <gflags/gflags.h>
#include "paddle/fluid/inference/analysis/pass.h"
#include "paddle/fluid/inference/analysis/pass_manager.h"

namespace paddle {
namespace inference {
namespace analysis {

// TODO(Superjomn) add a definition flag like PADDLE_WITH_TENSORRT and hide this
// flag if not available.
DECLARE_bool(inference_analysis_enable_tensorrt_subgraph_engine);
DECLARE_string(inference_analysis_graphviz_log_root);

class Analyzer : public OrderedRegistry<PassManager> {
 public:
  // Register all the pass-managers.
  Analyzer();

  void Run(Argument* argument);

  DISABLE_COPY_AND_ASSIGN(Analyzer);
};

}  // namespace analysis
}  // namespace inference
}  // namespace paddle