Repository: systemml
Updated Branches:
  refs/heads/master 4e0c7f1c9 -> bfb30b3af


[SYSTEMML-1946] Fix constrained parfor optimizer w/ fixed parallelism

This patch fixes the constrained parfor optimizer for the case of a
specified parfor degree of parallelism to properly assign the remaining
parallelism to nested parfor loops and operations. So far all operations
ran at maximum parallelism leading to large CPU over-provisioning, which
can severely hurt performance.


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

Branch: refs/heads/master
Commit: bfb30b3afaa0f88b946e326799cda81754e7bcab
Parents: 4e0c7f1
Author: Matthias Boehm <[email protected]>
Authored: Sat Oct 7 16:41:02 2017 -0700
Committer: Matthias Boehm <[email protected]>
Committed: Sat Oct 7 16:41:02 2017 -0700

----------------------------------------------------------------------
 .../controlprogram/parfor/opt/OptimizerConstrained.java       | 7 +++++++
 .../runtime/controlprogram/parfor/opt/OptimizerRuleBased.java | 6 +++---
 2 files changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/bfb30b3a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
 
b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
index 1ca5631..d571a71 100644
--- 
a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
+++ 
b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
@@ -293,9 +293,16 @@ public class OptimizerConstrained extends 
OptimizerRuleBased
                // constraint awareness
                if( n.getK() > 0 && ConfigurationManager.isParallelParFor() )
                {
+                       //set parfor degree of parallelism
                        ParForProgramBlock pfpb = (ParForProgramBlock) 
OptTreeConverter
                                        
.getAbstractPlanMapping().getMappedProg(n.getID())[1];
                        pfpb.setDegreeOfParallelism(n.getK());
+                       
+                       //distribute remaining parallelism 
+                       int remainParforK = 
getRemainingParallelismParFor(n.getK(), n.getK());
+                       int remainOpsK = getRemainingParallelismOps(_lkmaxCP, 
n.getK());
+                       rAssignRemainingParallelism( n, remainParforK, 
remainOpsK );
+                       
                        LOG.debug(getOptMode()+" OPT: forced 'set degree of 
parallelism' - result=(see EXPLAIN)" );
                }
                else

http://git-wip-us.apache.org/repos/asf/systemml/blob/bfb30b3a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
 
b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
index b80e786..e035f1b 100644
--- 
a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
+++ 
b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
@@ -1258,7 +1258,7 @@ public class OptimizerRuleBased extends Optimizer
                        //distribute remaining parallelism 
                        int remainParforK = getRemainingParallelismParFor(kMax, 
parforK);
                        int remainOpsK = getRemainingParallelismOps(_lkmaxCP, 
parforK);
-                       rAssignRemainingParallelism( n, remainParforK, 
remainOpsK ); 
+                       rAssignRemainingParallelism( n, remainParforK, 
remainOpsK );
                }
                else // ExecType.MR/ExecType.SPARK
                {
@@ -1373,12 +1373,12 @@ public class OptimizerRuleBased extends Optimizer
                }
        }
        
-       private static int getRemainingParallelismParFor(int parforK, int tmpK) 
{
+       protected static int getRemainingParallelismParFor(int parforK, int 
tmpK) {
                //compute max remaining parfor parallelism k such that k * tmpK 
<= parforK
                return (int)Math.ceil((double)(parforK-tmpK+1) / tmpK);
        }
        
-       private static int getRemainingParallelismOps(int opsK, int tmpK) {
+       protected static int getRemainingParallelismOps(int opsK, int tmpK) {
                //compute max remaining operations parallelism k with slight 
over-provisioning 
                //such that k * tmpK <= 1.5 * opsK; note that if parfor already 
exploits the
                //maximum parallelism, this will not introduce any 
over-provisioning.

Reply via email to