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 
25 #ifndef NNVM_PASS_H_
26 #define NNVM_PASS_H_
27 
28 #include <vector>
29 #include <functional>
30 #include "base.h"
31 #include "graph.h"
32 
33 namespace nnvm {
34 
46 typedef std::function<Graph (Graph src)> PassFunction;
47 
55  const std::vector<std::string>& passes);
56 
63 inline Graph ApplyPass(Graph src, const std::string& pass) {
64  return ApplyPasses(src, {pass});
65 }
66 
67 
72  : public dmlc::FunctionRegEntryBase<PassFunctionReg,
73  PassFunction> {
78  bool change_graph{false};
80  std::vector<std::string> op_attr_dependency;
82  std::vector<std::string> graph_attr_dependency;
84  std::vector<std::string> graph_attr_targets;
90  PassFunctionReg& set_change_graph(bool v) { // NOLINT(*)
91  change_graph = v;
92  return *this;
93  }
100  PassFunctionReg& provide_graph_attr(const std::string& attr_name) { // NOLINT(*)
101  graph_attr_targets.push_back(attr_name);
102  return *this;
103  }
110  PassFunctionReg& depend_op_attr(const std::string& attr_name) { // NOLINT(*)
111  op_attr_dependency.push_back(attr_name);
112  return *this;
113  }
120  PassFunctionReg& depend_graph_attr(const std::string& attr_name) { // NOLINT(*)
121  graph_attr_dependency.push_back(attr_name);
122  return *this;
123  }
124 };
125 
142 #define NNVM_REGISTER_PASS(name) \
143  DMLC_REGISTRY_REGISTER(::nnvm::PassFunctionReg, PassFunctionReg, name)
144 
145 } // namespace nnvm
146 
147 #endif // NNVM_PASS_H_
Definition: base.h:36
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:90
Graph ApplyPass(Graph src, const std::string &pass)
Apply one pass to the graph.
Definition: pass.h:63
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:120
std::vector< std::string > op_attr_dependency
dependencies on operator attributes
Definition: pass.h:80
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:100
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:47
Registry entry for pass functions.
Definition: pass.h:71
std::vector< std::string > graph_attr_dependency
dependencies on attributes in the graph
Definition: pass.h:82
bool change_graph
Whether the pass will change graph structure If this is false, the pass will only change attributes...
Definition: pass.h:78
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:110
std::vector< std::string > graph_attr_targets
generated targets of graph attributes
Definition: pass.h:84
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:46
Configuration of nnvm as well as basic data structure.