You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2015/11/25 18:51:27 UTC

[4/4] incubator-systemml git commit: Fix parfor rewrite 'inject rdd repartitioning' (awareness of transpose)

Fix parfor rewrite 'inject rdd repartitioning' (awareness of transpose) 

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

Branch: refs/heads/master
Commit: 52ec04aff0a841265b50302ee24e0a5af713d9d2
Parents: d16968e
Author: Matthias Boehm <mb...@us.ibm.com>
Authored: Tue Nov 24 22:25:53 2015 -0800
Committer: Matthias Boehm <mb...@us.ibm.com>
Committed: Tue Nov 24 22:25:53 2015 -0800

----------------------------------------------------------------------
 .../parfor/opt/OptimizerRuleBased.java          | 21 +++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/52ec04af/src/main/java/com/ibm/bi/dml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java b/src/main/java/com/ibm/bi/dml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
index b1d2622..ae581e6 100644
--- a/src/main/java/com/ibm/bi/dml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
+++ b/src/main/java/com/ibm/bi/dml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
@@ -2242,15 +2242,22 @@ public class OptimizerRuleBased extends Optimizer
 	private void rCollectZipmmPartitioningCandidates( OptNode n, HashSet<String> cand )
 	{
 		//collect zipmm inputs
-		if( n.getNodeType()==NodeType.HOP ) {
+		if( n.getNodeType()==NodeType.HOP ) 
+		{
 			Hop h = OptTreeConverter.getAbstractPlanMapping().getMappedHop(n.getID());
 			if( h instanceof AggBinaryOp && (((AggBinaryOp)h).getMMultMethod()==MMultMethod.ZIPMM 
-				||((AggBinaryOp)h).getMMultMethod()==MMultMethod.CPMM) ){
-				
-				if( h.getInput().get(0) instanceof DataOp ) 
-					cand.add( h.getInput().get(0).getName() );
-				if( h.getInput().get(1) instanceof DataOp ) 
-					cand.add( h.getInput().get(1).getName() );
+				||((AggBinaryOp)h).getMMultMethod()==MMultMethod.CPMM) )
+			{
+				//found zipmm or cpmm (unknowns) which might turn into zipmm
+				//check for dataop or dataops under transpose on both sides
+				for( Hop in : h.getInput() ) {
+					if( in instanceof DataOp )
+						cand.add( in.getName() );
+					else if( in instanceof ReorgOp 
+						&& ((ReorgOp)in).getOp()==ReOrgOp.TRANSPOSE
+						&& in.getInput().get(0) instanceof DataOp )
+						cand.add( in.getInput().get(0).getName() );
+				}
 			}
 		}