Compiler transforms
This page collects documentation on the Infer.NET compiler transforms.
| Transform | Summary |
|---|---|
| Gate | Handles if and switch statements with stochastic arguments. |
| Indexing | Converts constant array indexing such as a[0] into a separate variable a_item0. |
| Depth cloning | Clones variables to ensure that each is used at a fixed depth. |
| Replication | Replicates any variables which are referenced in a loop, so that each reference is a unique variable. |
| Variable | Inserts variable factors, splitting each variable into a definition, use, and marginal. |
| If cutting | Splits if statements. |
| Channel | Converts variables so that each reference becomes a unique channel variable, corresponding to an edge in the factor graph. |
| Group | Converts GroupMember attributes into ChannelPath attributes |
| Hybrid algorithm | Allows different algorithms to be applied to different parts of the graph. Inserts operators at algorithm boundaries to transform the messages of one algorithm into messages suitable for another. |
| Message | Transforms a model specified in terms of channels into the set of message passing operations required to perform inference in that model. |
| Message optimisation | Removes duplicate messages or redundant message operations. |
| Loop cutting | Splits for loops and promotes variables declared in loops to the top level. |
| Dependency analysis | Determines dependencies between statements in the code. |
| Pruning | Removes statements whose result is never used by an output, and removes updates whose result is uniform. |
| Iteration | Creates while(true) loops around statement blocks with cyclic dependencies. Statements not in loops, and the loops themselves, are topologically sorted. |
| Scheduling | Re-orders statements within while(true) loops to respect their dependency requirements. |
| Dead code elimination | Post-optimization of the schedule. Removes statements whose result is never used. |
| Iterative process | Converts an inference method into a class which implements IGeneratedAlgorithm. Promotes local variables to fields and places parts of the inference into different methods. |
| Loop merging | Optimizes the generated code by merging consecutive for loops over the same range into one for loop. |