[SYSTEMML-1905] Extended codegen plan enumeration statistics (all plans)

This patch extends the codegen plan enumeration statistics by the number
of total plans without partitioning by connected components, i.e., the
sum of 2^(|M|) per DAG.


Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/3acd9418
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/3acd9418
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/3acd9418

Branch: refs/heads/master
Commit: 3acd94186b5e6e2fdf12823e7932bf56027511c6
Parents: 808a8f4
Author: Matthias Boehm <mboe...@gmail.com>
Authored: Tue Sep 12 19:10:58 2017 -0700
Committer: Matthias Boehm <mboe...@gmail.com>
Committed: Tue Sep 12 20:13:18 2017 -0700

----------------------------------------------------------------------
 .../hops/codegen/opt/PlanSelectionFuseCostBased.java    |  9 ++++++++-
 .../hops/codegen/opt/PlanSelectionFuseCostBasedV2.java  |  8 +++++++-
 src/main/java/org/apache/sysml/utils/Statistics.java    | 12 ++++++++++--
 3 files changed, 25 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/3acd9418/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java
 
b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java
index 4fcef6e..c230505 100644
--- 
a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java
+++ 
b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java
@@ -57,6 +57,7 @@ import 
org.apache.sysml.hops.codegen.template.TemplateBase.TemplateType;
 import org.apache.sysml.hops.rewrite.HopRewriteUtils;
 import 
org.apache.sysml.runtime.controlprogram.parfor.stat.InfrastructureAnalyzer;
 import org.apache.sysml.runtime.controlprogram.parfor.util.IDSequence;
+import org.apache.sysml.runtime.util.UtilFunctions;
 import org.apache.sysml.utils.Statistics;
 
 /**
@@ -87,12 +88,14 @@ public class PlanSelectionFuseCostBased extends 
PlanSelection
                Collection<PlanPartition> parts = 
PlanAnalyzer.analyzePlanPartitions(memo, roots, false);
                
                //step 2: optimize individual plan partitions
+               int sumMatPoints = 0;
                for( PlanPartition part : parts ) {
                        //create composite templates (within the partition)
                        createAndAddMultiAggPlans(memo, part.getPartition(), 
part.getRoots());
                        
                        //plan enumeration and plan selection
                        selectPlans(memo, part.getPartition(), part.getRoots(), 
part.getMatPoints());
+                       sumMatPoints += part.getMatPoints().size();
                }
                
                //step 3: add composite templates (across partitions)
@@ -101,6 +104,10 @@ public class PlanSelectionFuseCostBased extends 
PlanSelection
                //take all distinct best plans
                for( Entry<Long, List<MemoTableEntry>> e : 
getBestPlans().entrySet() )
                        memo.setDistinct(e.getKey(), e.getValue());
+               
+               //maintain statistics
+               if( DMLScript.STATISTICS )
+                       Statistics.incrementCodegenEnumAll(UtilFunctions.pow(2, 
sumMatPoints));
        }
        
        //within-partition multi-agg templates
@@ -389,7 +396,7 @@ public class PlanSelectionFuseCostBased extends 
PlanSelection
                        }
                        
                        if( DMLScript.STATISTICS ) {
-                               Statistics.incrementCodegenEnumAll(len);
+                               Statistics.incrementCodegenEnumAllP(len);
                                Statistics.incrementCodegenEnumEval(len);
                        }
                        

http://git-wip-us.apache.org/repos/asf/systemml/blob/3acd9418/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java
 
b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java
index a8f7365..1bf42f6 100644
--- 
a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java
+++ 
b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java
@@ -107,12 +107,14 @@ public class PlanSelectionFuseCostBasedV2 extends 
PlanSelection
                Collection<PlanPartition> parts = 
PlanAnalyzer.analyzePlanPartitions(memo, roots, true);
                
                //step 2: optimize individual plan partitions
+               int sumMatPoints = 0;
                for( PlanPartition part : parts ) {
                        //create composite templates (within the partition)
                        createAndAddMultiAggPlans(memo, part.getPartition(), 
part.getRoots());
                        
                        //plan enumeration and plan selection
                        selectPlans(memo, part);
+                       sumMatPoints += part.getMatPointsExt().length;
                }
                
                //step 3: add composite templates (across partitions)
@@ -121,6 +123,10 @@ public class PlanSelectionFuseCostBasedV2 extends 
PlanSelection
                //take all distinct best plans
                for( Entry<Long, List<MemoTableEntry>> e : 
getBestPlans().entrySet() )
                        memo.setDistinct(e.getKey(), e.getValue());
+               
+               //maintain statistics
+               if( DMLScript.STATISTICS )
+                       Statistics.incrementCodegenEnumAll(UtilFunctions.pow(2, 
sumMatPoints));
        }
        
        private void selectPlans(CPlanMemoTable memo, PlanPartition part) 
@@ -257,7 +263,7 @@ public class PlanSelectionFuseCostBasedV2 extends 
PlanSelection
                }
                
                if( DMLScript.STATISTICS ) {
-                       
Statistics.incrementCodegenEnumAll((rgraph!=null)?len:0);
+                       
Statistics.incrementCodegenEnumAllP((rgraph!=null)?len:0);
                        Statistics.incrementCodegenEnumEval(numEvalPlans);
                        Statistics.incrementCodegenEnumEvalP(numEvalPartPlans);
                }

http://git-wip-us.apache.org/repos/asf/systemml/blob/3acd9418/src/main/java/org/apache/sysml/utils/Statistics.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/utils/Statistics.java 
b/src/main/java/org/apache/sysml/utils/Statistics.java
index bab668f..109eec2 100644
--- a/src/main/java/org/apache/sysml/utils/Statistics.java
+++ b/src/main/java/org/apache/sysml/utils/Statistics.java
@@ -79,6 +79,7 @@ public class Statistics
        private static final LongAdder codegenCPlanCompile = new LongAdder(); 
//count
        private static final LongAdder codegenClassCompile = new LongAdder(); 
//count
        private static final LongAdder codegenEnumAll = new LongAdder(); //count
+       private static final LongAdder codegenEnumAllP = new LongAdder(); 
//count
        private static final LongAdder codegenEnumEval = new LongAdder(); 
//count
        private static final LongAdder codegenEnumEvalP = new LongAdder(); 
//count
        private static final LongAdder codegenPlanCacheHits = new LongAdder(); 
//count
@@ -262,6 +263,9 @@ public class Statistics
        public static void incrementCodegenEnumAll(long delta) {
                codegenEnumAll.add(delta);
        }
+       public static void incrementCodegenEnumAllP(long delta) {
+               codegenEnumAllP.add(delta);
+       }
        public static void incrementCodegenEnumEval(long delta) {
                codegenEnumEval.add(delta);
        }
@@ -300,6 +304,9 @@ public class Statistics
        public static long getCodegenEnumAll() {
                return codegenEnumAll.longValue();
        }
+       public static long getCodegenEnumAllP() {
+               return codegenEnumAllP.longValue();
+       }
        public static long getCodegenEnumEval() {
                return codegenEnumEval.longValue();
        }
@@ -403,6 +410,7 @@ public class Statistics
                codegenCPlanCompile.reset();
                codegenClassCompile.reset();
                codegenEnumAll.reset();
+               codegenEnumAllP.reset();
                codegenEnumEval.reset();
                codegenEnumEvalP.reset();
                codegenCompileTime.reset();
@@ -795,8 +803,8 @@ public class Statistics
                        if( ConfigurationManager.isCodegenEnabled() ) {
                                sb.append("Codegen compile (DAG,CP,JC):\t" + 
getCodegenDAGCompile() + "/"
                                                + getCodegenCPlanCompile() + 
"/" + getCodegenClassCompile() + ".\n");
-                               sb.append("Codegen enum (All,Eval,EvalP):\t" + 
getCodegenEnumAll() + "/"
-                                               + getCodegenEnumEval() + "/" + 
getCodegenEnumEvalP() + ".\n");
+                               sb.append("Codegen enum (ALLt/p,EVALt/p):\t" + 
getCodegenEnumAll() + "/" +
+                                               getCodegenEnumAllP() + "/" + 
getCodegenEnumEval() + "/" + getCodegenEnumEvalP() + ".\n");
                                sb.append("Codegen compile times (DAG,JC):\t" + 
String.format("%.3f", (double)getCodegenCompileTime()/1000000000) + "/" + 
                                                String.format("%.3f", 
(double)getCodegenClassCompileTime()/1000000000)  + " sec.\n");
                                sb.append("Codegen plan cache hits:\t" + 
getCodegenPlanCacheHits() + "/" + getCodegenPlanCacheTotal() + ".\n");

Reply via email to