You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by du...@apache.org on 2017/05/05 20:47:11 UTC
[3/3] incubator-systemml git commit: [MINOR] Adding documentation to
IPA functions.
[MINOR] Adding documentation to IPA functions.
Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/abc9686f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/abc9686f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/abc9686f
Branch: refs/heads/master
Commit: abc9686fbaaa11c12cfa02c49c7675165acdf176
Parents: a281f38
Author: Mike Dusenberry <mw...@us.ibm.com>
Authored: Fri May 5 13:45:23 2017 -0700
Committer: Mike Dusenberry <mw...@us.ibm.com>
Committed: Fri May 5 13:45:23 2017 -0700
----------------------------------------------------------------------
.../sysml/hops/ipa/InterProceduralAnalysis.java | 87 ++++++++++++++++++--
.../apache/sysml/hops/recompile/Recompiler.java | 11 ++-
2 files changed, 87 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/abc9686f/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java b/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
index 37fa379..95a6069 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
@@ -460,8 +460,21 @@ public class InterProceduralAnalysis
/////////////////////////////
// INTRA-PROCEDURE ANALYSIS
//////
-
- private void propagateStatisticsAcrossBlock( StatementBlock sb, Map<String, Integer> fcand, LocalVariableMap callVars, Map<String, Set<Long>> fcandSafeNNZ, Set<String> unaryFcands, Set<String> fnStack )
+
+ /**
+ * Perform intra-procedural analysis (IPA) by propagating statistics
+ * across statement blocks.
+ *
+ * @param sb DML statement blocks.
+ * @param fcand Function candidates.
+ * @param callVars Map of variables eligible for propagation.
+ * @param fcandSafeNNZ Function candidate safe non-zeros.
+ * @param unaryFcands Unary function candidates.
+ * @param fnStack Function stack to determine current scope.
+ * @throws HopsException If a HopsException occurs.
+ * @throws ParseException If a ParseException occurs.
+ */
+ private void propagateStatisticsAcrossBlock( StatementBlock sb, Map<String, Integer> fcand, LocalVariableMap callVars, Map<String, Set<Long>> fcandSafeNNZ, Set<String> unaryFcands, Set<String> fnStack )
throws HopsException, ParseException
{
if (sb instanceof FunctionStatementBlock)
@@ -552,9 +565,15 @@ public class InterProceduralAnalysis
*
* This replaces scalar reads and typecasts thereof with literals.
*
+ * Ultimately, this leads to improvements because the size
+ * expression evaluation over DAGs with scalar symbol table entries
+ * (which is also applied during IPA) is limited to supported
+ * operations, whereas literal replacement is a brute force method
+ * that applies to all (including future) operations.
+ *
* @param roots List of HOPs.
* @param vars Map of variables eligible for propagation.
- * @throws HopsException
+ * @throws HopsException If a HopsException occurs.
*/
private void propagateScalarsAcrossDAG(ArrayList<Hop> roots, LocalVariableMap vars)
throws HopsException
@@ -589,8 +608,15 @@ public class InterProceduralAnalysis
throw new HopsException("Failed to update Hop DAG statistics.", ex);
}
}
-
- private void propagateStatisticsAcrossDAG( ArrayList<Hop> roots, LocalVariableMap vars )
+
+ /**
+ * Propagate matrix sizes across DAGs.
+ *
+ * @param roots List of HOP DAG root nodes.
+ * @param vars Map of variables eligible for propagation.
+ * @throws HopsException If a HopsException occurs.
+ */
+ private void propagateStatisticsAcrossDAG( ArrayList<Hop> roots, LocalVariableMap vars )
throws HopsException
{
if( roots == null )
@@ -615,14 +641,44 @@ public class InterProceduralAnalysis
/////////////////////////////
// INTER-PROCEDURE ANALYIS
//////
-
- private void propagateStatisticsIntoFunctions(DMLProgram prog, ArrayList<Hop> roots, Map<String, Integer> fcand, LocalVariableMap callVars, Map<String, Set<Long>> fcandSafeNNZ, Set<String> unaryFcands, Set<String> fnStack )
+
+ /**
+ * Propagate statistics from the calling program into a function
+ * block.
+ *
+ * @param prog The DML program.
+ * @param roots List of HOP DAG root notes for propagation.
+ * @param fcand Function candidates.
+ * @param callVars Calling program's map of variables eligible for
+ * propagation.
+ * @param fcandSafeNNZ Function candidate safe non-zeros.
+ * @param unaryFcands Unary function candidates.
+ * @param fnStack Function stack to determine current scope.
+ * @throws HopsException If a HopsException occurs.
+ * @throws ParseException If a ParseException occurs.
+ */
+ private void propagateStatisticsIntoFunctions(DMLProgram prog, ArrayList<Hop> roots, Map<String, Integer> fcand, LocalVariableMap callVars, Map<String, Set<Long>> fcandSafeNNZ, Set<String> unaryFcands, Set<String> fnStack )
throws HopsException, ParseException
{
for( Hop root : roots )
propagateStatisticsIntoFunctions(prog, root, fcand, callVars, fcandSafeNNZ, unaryFcands, fnStack);
}
-
+
+ /**
+ * Propagate statistics from the calling program into a function
+ * block.
+ *
+ * @param prog The DML program.
+ * @param hop HOP to propagate statistics into.
+ * @param fcand Function candidates.
+ * @param callVars Calling program's map of variables eligible for
+ * propagation.
+ * @param fcandSafeNNZ Function candidate safe non-zeros.
+ * @param unaryFcands Unary function candidates.
+ * @param fnStack Function stack to determine current scope.
+ * @throws HopsException If a HopsException occurs.
+ * @throws ParseException If a ParseException occurs.
+ */
private void propagateStatisticsIntoFunctions(DMLProgram prog, Hop hop, Map<String, Integer> fcand, LocalVariableMap callVars, Map<String, Set<Long>> fcandSafeNNZ, Set<String> unaryFcands, Set<String> fnStack )
throws HopsException, ParseException
{
@@ -732,7 +788,20 @@ public class InterProceduralAnalysis
}
}
}
-
+
+ /**
+ * Extract return variable statistics from this function into the
+ * calling program.
+ *
+ * @param fstmt The function statement.
+ * @param fop The function op.
+ * @param tmpVars Function's map of variables eligible for
+ * extraction.
+ * @param callVars Calling program's map of variables.
+ * @param overwrite Whether or not to overwrite variables in the
+ * calling program's variable map.
+ * @throws HopsException If a HopsException occurs.
+ */
private void extractFunctionCallReturnStatistics( FunctionStatement fstmt, FunctionOp fop, LocalVariableMap tmpVars, LocalVariableMap callVars, boolean overwrite )
throws HopsException
{
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/abc9686f/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java b/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
index 6a2d88c..6c8ddea 100644
--- a/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
+++ b/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
@@ -1311,12 +1311,19 @@ public class Recompiler
}
}
-
+
+ /**
+ * Remove any scalar variables from the variable map if the variable
+ * is updated in this block.
+ *
+ * @param callVars Map of variables eligible for propagation.
+ * @param sb DML statement block.
+ */
public static void removeUpdatedScalars( LocalVariableMap callVars, StatementBlock sb )
{
if( sb != null )
{
- //remove update scalar variables from constants
+ //remove updated scalar variables from constants
for( String varname : sb.variablesUpdated().getVariables().keySet() )
{
Data dat = callVars.get(varname);