analyzer.h 2.3 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
/*
 * This file contains Analyzer, an class that exposed as a library that analyze
Y
Yan Chunwei 已提交
19 20 21
 * and optimize Fluid ProgramDesc for inference. Similar to LLVM, it has
 * multiple flags to
 * control whether an process is applied on the program.
22 23
 *
 * The processes are called Passes in analysis, the Passes are placed in a
Y
Yan Chunwei 已提交
24 25 26 27 28 29
 * 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.
30 31
 *
 * The Analyzer can be used in two methods, the first is a executable file which
Y
Yan Chunwei 已提交
32 33
 * can be used to pre-process the inference model and can be controlled by
 * passing difference command flags;
34
 * the other way is to compose inside the inference API as a runtime pre-process
Y
Yan Chunwei 已提交
35
 * phase in the inference service.
36 37 38 39 40 41 42 43 44 45 46 47
 */

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

namespace paddle {

// 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);
Y
Yan Chunwei 已提交
48
DECLARE_string(inference_analysis_output_storage_path);
49

50 51 52
namespace inference {
namespace analysis {

53 54 55 56 57 58 59 60 61 62 63 64 65
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