Package org.apache.sysds.hops.rewrite
Class RewriteSplitDagDataDependentOperators
java.lang.Object
org.apache.sysds.hops.rewrite.StatementBlockRewriteRule
org.apache.sysds.hops.rewrite.RewriteSplitDagDataDependentOperators
Rule: Split Hop DAG after specific data-dependent operators. This is
important to create recompile hooks if output dimensions are usually
significantly overestimated.
This is a recursive statementblock rewrite rule.
NOTE: Before we used AssignmentStatement.controlStatement() in order to force
statementblock cuts. However, this (1) cuts not only after but before-and-after
(which prevents certain rewrites because the input operators are unknown),
and (2) is statement-centric which potentially prevents the cut right after
the problematic operation.
TODO: Cleanup runtime to never access individual statements of potentially
split statements blocks again (for consistency). However, currently it is
only used in places (e.g., parfor optimizer) that are not directly affected.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanIndicates if the rewrite potentially splits dags, which is used for phase ordering of rewrites.Handle an arbitrary statement block.rewriteStatementBlocks(List<StatementBlock> sbs, ProgramRewriteStatus sate) Handle a list of statement blocks.Methods inherited from class org.apache.sysds.hops.rewrite.StatementBlockRewriteRule
createCutVarName
-
Constructor Details
-
RewriteSplitDagDataDependentOperators
public RewriteSplitDagDataDependentOperators()
-
-
Method Details
-
createsSplitDag
public boolean createsSplitDag()Description copied from class:StatementBlockRewriteRuleIndicates if the rewrite potentially splits dags, which is used for phase ordering of rewrites.- Specified by:
createsSplitDagin classStatementBlockRewriteRule- Returns:
- true if dag splits are possible.
-
rewriteStatementBlock
Description copied from class:StatementBlockRewriteRuleHandle an arbitrary statement block. Specific type constraints have to be ensured within the individual rewrites. If a rewrite does not apply to individual blocks, it should simply return the input block.- Specified by:
rewriteStatementBlockin classStatementBlockRewriteRule- Parameters:
sb- statement blockstate- program rewrite status- Returns:
- list of statement blocks
-
rewriteStatementBlocks
public List<StatementBlock> rewriteStatementBlocks(List<StatementBlock> sbs, ProgramRewriteStatus sate) Description copied from class:StatementBlockRewriteRuleHandle a list of statement blocks. Specific type constraints have to be ensured within the individual rewrites. If a rewrite does not require sequence access, it should simply return the input list of statement blocks.- Specified by:
rewriteStatementBlocksin classStatementBlockRewriteRule- Parameters:
sbs- list of statement blockssate- program rewrite status- Returns:
- list of statement blocks
-