Common Subexpression Elimination. More...
#include <common_subexpression_elimination.h>
Protected Member Functions | |
bool | PatternRule (const transform::Graph &g, const std::vector< int > &subgraph, int idx) override |
The PatternRule essentially answers: Given the current subgraph (ordered), should we append the new node at idx? | |
bool | ValidatorRule (const transform::Graph &g, const std::vector< int > &subgraph) override |
The ValidatorRule essentially answers: Given a subgraph, can we accept it? | |
bool | ReplaceRule (const std::vector< int > &subgraph, transform::Graph *g_ptr) override |
The ReplaceRule actually mutates the graph, and applies the transformation upon the subgraph. | |
Protected Member Functions inherited from caffe2::Transform | |
void | SetPatternMatchType (PatternMatchType type) |
Additional Inherited Members | |
Public Types inherited from caffe2::Transform | |
enum | PatternMatchType { CONNECTED_SUBGRAPH, SORTED_WRT_EXECUTION_ORDER, GENERAL } |
Determines the type of subgraphs that PatternMatch will find. More... | |
Public Member Functions inherited from caffe2::Transform | |
NetDef | ApplyTo (const NetDef &orig_net_def) |
Apply a Transform onto a NetDef. More... | |
std::vector< std::vector< int > > | PatternMatch (const transform::Graph &graph) |
Generates all matches (stored as ordered subgraphs) and returns them. More... | |
void | ReplacePattern (const std::vector< std::vector< int >> &matches, transform::Graph *graph) |
Applies the replace rule onto each of the matches found. | |
Common Subexpression Elimination.
This transforms looks for specific operators (denoted by whitelisted_ops_), and removes unnecessary repetition of that operator.
Consider some operator of X, that reads from blob b_ written to by W. X_a and X_b read the output of X. However, another operator Y, is the same type as X, has the same arguments as X, and reads from the same input b_, written to by W. It's output is the same as X. Y_a, Y_b, and Y_c read from Y.
Then, we can eliminate the common subexpressions X and Y, and merge them to Z, where X_a, X_b, Y_a, Y_b, and Y_c all read from Z.
TODO(benz): Fix the error to not match nodes that write to external output.
Definition at line 28 of file common_subexpression_elimination.h.