mxnet
pass.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
24 #ifndef NNVM_PASS_H_
25 #define NNVM_PASS_H_
26 
27 #include <vector>
28 #include <functional>
29 #include "base.h"
30 #include "graph.h"
31 
32 namespace nnvm {
33 
45 typedef std::function<Graph (Graph src)> PassFunction;
46 
54  const std::vector<std::string>& passes);
55 
62 inline Graph ApplyPass(Graph src, const std::string& pass) {
63  return ApplyPasses(src, {pass});
64 }
65 
66 
71  : public dmlc::FunctionRegEntryBase<PassFunctionReg,
72  PassFunction> {
77  bool change_graph{false};
79  std::vector<std::string> op_attr_dependency;
81  std::vector<std::string> graph_attr_dependency;
83  std::vector<std::string> graph_attr_targets;
89  PassFunctionReg& set_change_graph(bool v) { // NOLINT(*)
90  change_graph = v;
91  return *this;
92  }
99  PassFunctionReg& provide_graph_attr(const std::string& attr_name) { // NOLINT(*)
100  graph_attr_targets.push_back(attr_name);
101  return *this;
102  }
109  PassFunctionReg& depend_op_attr(const std::string& attr_name) { // NOLINT(*)
110  op_attr_dependency.push_back(attr_name);
111  return *this;
112  }
119  PassFunctionReg& depend_graph_attr(const std::string& attr_name) { // NOLINT(*)
120  graph_attr_dependency.push_back(attr_name);
121  return *this;
122  }
123 };
124 
141 #define NNVM_REGISTER_PASS(name) \
142  DMLC_REGISTRY_REGISTER(::nnvm::PassFunctionReg, PassFunctionReg, name)
143 
144 } // namespace nnvm
145 
146 #endif // NNVM_PASS_H_
Definition: base.h:35
Common base class for function registry.
Definition: registry.h:151
PassFunctionReg & set_change_graph(bool v)
Set whether this pass will change graph structure.
Definition: pass.h:89
Graph ApplyPass(Graph src, const std::string &pass)
Apply one pass to the graph.
Definition: pass.h:62
PassFunctionReg & depend_graph_attr(const std::string &attr_name)
Declare this pass requires the given graph attribute to be available before being applied on the grap...
Definition: pass.h:119
std::vector< std::string > op_attr_dependency
dependencies on operator attributes
Definition: pass.h:79
PassFunctionReg & provide_graph_attr(const std::string &attr_name)
Declare that this pass will generate the given graph attribute name once it is applied on the graph...
Definition: pass.h:99
Graph ApplyPasses(Graph src, const std::vector< std::string > &passes)
Apply a series of pass transformations on the input graph.
Symbolic computation graph. This is the intermediate representation for optimization pass...
Definition: graph.h:46
Registry entry for pass functions.
Definition: pass.h:70
std::vector< std::string > graph_attr_dependency
dependencies on attributes in the graph
Definition: pass.h:81
bool change_graph
Whether the pass will change graph structure If this is false, the pass will only change attributes...
Definition: pass.h:77
Configuation of nnvm as well as basic data structure.
PassFunctionReg & depend_op_attr(const std::string &attr_name)
Declare this pass requires the given operator attribute to be available before being applied on the g...
Definition: pass.h:109
std::vector< std::string > graph_attr_targets
generated targets of graph attributes
Definition: pass.h:83
std::function< Graph(Graph src)> PassFunction
A PassFunction is an "Operator on Graph". It takes a source graph and return a graph that may or may ...
Definition: pass.h:45
Configuration of nnvm as well as basic data structure.