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);