Package at.dms.kjc.sir.linear.transform

Performs algebraic combination of adjacent linear filters in the stream graph.

See:
          Description

Class Summary
LinearTransform A LinearTransform communicates information about how to transform one or more linear representations into a new linear representation (eg combination rules).
LinearTransformNull Represents a null transform -- eg no transform to apply.
LinearTransformPipeline Represents a pipeline combination transform.
LinearTransformSplitJoin Contains the code for merging all the filters from a split join into a single monolithic matrix.
 

Exception Summary
NoTransformPossibleException Exception that is thrown when we can't compute a transform for some reason.
 

Package at.dms.kjc.sir.linear.transform Description

Performs algebraic combination of adjacent linear filters in the stream graph. As described in this PLDI'03 paper and Andrew Lamb's M.Eng. thesis, adjacent filters can be algebraically combined if each of their outputs is an affine combination of their inputs. As opposed to filter fusion, this transformation statically evaluates the product of coefficients in the two filters, and often changes the number of FLOPs required by the overall computation.

The main classes performing the combinations are LinearTransformPipeline and LinearTransformSplitJoin. They employ the rules described in the above papers. Note that there are no combination rules for feedback loops because it is impossible to combine a feedback loop while maintaining a linear representation; instead, a linear representation with state is needed. This combination is implemented by the statespace package (see below), which is a generalization of linear combination but may introduce extra overhead for simple linear filters.

See Also:
at.dms.kjc.sir.linear, at.dms.kjc.sir.statespace, at.dms.kjc.sir.lowering.partition.linear