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 2018/04/04 04:58:23 UTC
systemml git commit: [MINOR] Remove redundancy from builtin function
hop construction
Repository: systemml
Updated Branches:
refs/heads/master c33e066ac -> eb852482b
[MINOR] Remove redundancy from builtin function hop construction
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/eb852482
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/eb852482
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/eb852482
Branch: refs/heads/master
Commit: eb852482b359dd3405fe0bd3dcd678715a503f43
Parents: c33e066
Author: Matthias Boehm <mb...@gmail.com>
Authored: Tue Apr 3 20:41:02 2018 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Tue Apr 3 21:59:40 2018 -0700
----------------------------------------------------------------------
.../java/org/apache/sysml/hops/AggBinaryOp.java | 5 +-
.../java/org/apache/sysml/hops/BinaryOp.java | 8 +-
.../org/apache/sysml/hops/ConvolutionOp.java | 86 ++--
src/main/java/org/apache/sysml/hops/Hop.java | 36 +-
.../org/apache/sysml/hops/QuaternaryOp.java | 2 +-
.../java/org/apache/sysml/hops/ReorgOp.java | 10 +-
.../java/org/apache/sysml/hops/TernaryOp.java | 16 +-
.../codegen/opt/PlanSelectionFuseCostBased.java | 8 +-
.../opt/PlanSelectionFuseCostBasedV2.java | 11 +-
.../sysml/hops/rewrite/HopRewriteUtils.java | 4 +-
.../RewriteAlgebraicSimplificationDynamic.java | 4 +-
.../RewriteAlgebraicSimplificationStatic.java | 6 +-
.../apache/sysml/lops/ConvolutionTransform.java | 22 +-
.../org/apache/sysml/parser/DMLTranslator.java | 448 ++++---------------
.../parfor/opt/OptimizerRuleBased.java | 2 +-
15 files changed, 184 insertions(+), 484 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/AggBinaryOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/AggBinaryOp.java b/src/main/java/org/apache/sysml/hops/AggBinaryOp.java
index fbbb2dd..03a1bb6 100644
--- a/src/main/java/org/apache/sysml/hops/AggBinaryOp.java
+++ b/src/main/java/org/apache/sysml/hops/AggBinaryOp.java
@@ -1321,13 +1321,10 @@ public class AggBinaryOp extends Hop implements MultiThreadedHop
}
else //MR
{
- if( h1 instanceof ReorgOp && ((ReorgOp)h1).getOp()==ReOrgOp.TRANSPOSE )
- {
+ if( HopRewriteUtils.isTransposeOperation(h1) ) {
long m = h1.getDim1();
long cd = h1.getDim2();
long n = h2.getDim2();
-
-
//note: output size constraint for mapmult already checked by optfindmmultmethod
if( m>0 && cd>0 && n>0 && (m*cd > (cd*n + m*n)) &&
2 * OptimizerUtils.estimateSizeExactSparsity(cd, n, 1.0) < OptimizerUtils.getLocalMemBudget() &&
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/BinaryOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/BinaryOp.java b/src/main/java/org/apache/sysml/hops/BinaryOp.java
index 35d40c5..d66ac12 100644
--- a/src/main/java/org/apache/sysml/hops/BinaryOp.java
+++ b/src/main/java/org/apache/sysml/hops/BinaryOp.java
@@ -139,8 +139,8 @@ public class BinaryOp extends Hop
switch(op)
{
case IQM:
- case CENTRALMOMENT:
- case COVARIANCE:
+ case MOMENT:
+ case COV:
case QUANTILE:
case INTERQUANTILE:
case MEDIAN:
@@ -197,11 +197,11 @@ public class BinaryOp extends Hop
constructLopsIQM(et);
break;
}
- case CENTRALMOMENT: {
+ case MOMENT: {
constructLopsCentralMoment(et);
break;
}
- case COVARIANCE: {
+ case COV: {
constructLopsCovariance(et);
break;
}
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ConvolutionOp.java b/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
index 299f7c9..4224474 100644
--- a/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
+++ b/src/main/java/org/apache/sysml/hops/ConvolutionOp.java
@@ -116,13 +116,13 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
ArrayList<Hop> inputs = getInput();
switch( op )
{
- case MAX_POOLING:
- case MAX_POOLING_BACKWARD:
- case AVG_POOLING:
- case AVG_POOLING_BACKWARD:
- case DIRECT_CONV2D:
- case DIRECT_CONV2D_BACKWARD_DATA:
- case DIRECT_CONV2D_BACKWARD_FILTER:
+ case MAX_POOL:
+ case MAX_POOL_BACKWARD:
+ case AVG_POOL:
+ case AVG_POOL_BACKWARD:
+ case CONV2D:
+ case CONV2D_BACKWARD_DATA:
+ case CONV2D_BACKWARD_FILTER:
case BIAS_ADD:
case BIAS_MULTIPLY:
{
@@ -151,11 +151,11 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
private int getNumExpectedInputs() {
switch(op) {
- case MAX_POOLING_BACKWARD:
- case AVG_POOLING_BACKWARD:
- case DIRECT_CONV2D:
- case DIRECT_CONV2D_BACKWARD_FILTER:
- case DIRECT_CONV2D_BACKWARD_DATA:
+ case MAX_POOL_BACKWARD:
+ case AVG_POOL_BACKWARD:
+ case CONV2D:
+ case CONV2D_BACKWARD_FILTER:
+ case CONV2D_BACKWARD_DATA:
return 14;
case BIAS_ADD:
case BIAS_MULTIPLY:
@@ -186,7 +186,7 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
}
private static boolean isInputConv2d(Hop input) {
- return input instanceof ConvolutionOp && ((ConvolutionOp) input).getOp() == ConvOp.DIRECT_CONV2D;
+ return input instanceof ConvolutionOp && ((ConvolutionOp) input).getOp() == ConvOp.CONV2D;
}
/**
@@ -213,8 +213,8 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
* @return output lop of max_pool/avg_pool operation with same parameters as this hop
*/
private Lop getMaxPoolOutputLop() {
- if(op == ConvOp.MAX_POOLING_BACKWARD || op == ConvOp.AVG_POOLING_BACKWARD) {
- ConvOp opType = (op == ConvOp.MAX_POOLING_BACKWARD) ? ConvOp.MAX_POOLING : ConvOp.AVG_POOLING;
+ if(op == ConvOp.MAX_POOL_BACKWARD || op == ConvOp.AVG_POOL_BACKWARD) {
+ ConvOp opType = (op == ConvOp.MAX_POOL_BACKWARD) ? ConvOp.MAX_POOL : ConvOp.AVG_POOL;
Hop inputImage = getInput().get(0);
for(Hop tmpParent : inputImage.getParent()) {
if(!(tmpParent instanceof ConvolutionOp))
@@ -242,16 +242,16 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
// by reducing unnecessary sparse-to-dense-to-sparse conversion.
// For other backends, this operators is not necessary as it reduces an additional relu operator.
Hop parentReLU = isInputReLU(inputs.get(0));
- if(OptimizerUtils.ALLOW_OPERATOR_FUSION && et == ExecType.CP && op == ConvOp.MAX_POOLING && parentReLU != null) {
+ if(OptimizerUtils.ALLOW_OPERATOR_FUSION && et == ExecType.CP && op == ConvOp.MAX_POOL && parentReLU != null) {
lhsInputLop = parentReLU.constructLops();
lopOp = OperationTypes.RELU_MAX_POOLING;
}
- else if(OptimizerUtils.ALLOW_OPERATOR_FUSION && et == ExecType.CP && op == ConvOp.MAX_POOLING_BACKWARD && parentReLU != null) {
+ else if(OptimizerUtils.ALLOW_OPERATOR_FUSION && et == ExecType.CP && op == ConvOp.MAX_POOL_BACKWARD && parentReLU != null) {
lhsInputLop = parentReLU.constructLops();
lopOp = OperationTypes.RELU_MAX_POOLING_BACKWARD;
}
else if(OptimizerUtils.ALLOW_OPERATOR_FUSION && op == ConvOp.BIAS_ADD && isInputConv2d(inputs.get(0))) {
- lopOp = OperationTypes.DIRECT_CONV2D_BIAS_ADD;
+ lopOp = OperationTypes.CONV2D_BIAS_ADD;
// the first lop is image
lhsInputLop = inputs.get(0).getInput().get(0).constructLops();
@@ -436,7 +436,7 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
{
ArrayList<IntermediateDimensions> gpuIntermediates = new ArrayList<>();
ArrayList<IntermediateDimensions> cpIntermediates = new ArrayList<>();
- if(getOp() == ConvOp.DIRECT_CONV2D) {
+ if(getOp() == ConvOp.CONV2D) {
// Assumption: To compile a GPU conv2d operator, following should fit on the GPU:
// 1. output in dense format (i.e. computeOutputMemEstimate)
// 2. input in any format
@@ -450,7 +450,7 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
// im2col operation preserves the worst-case sparsity of the input.
cpIntermediates.add(new IntermediateDimensions(this, "CRS", "PQ", getInput().get(0).getSparsity()));
}
- else if(getOp() == ConvOp.DIRECT_CONV2D_BACKWARD_DATA) {
+ else if(getOp() == ConvOp.CONV2D_BACKWARD_DATA) {
// Assumption: To compile a GPU conv2d_backward_data operator, following should fit on the GPU:
// 1. output in dense format (i.e. computeOutputMemEstimate)
// 2. dout in any format
@@ -467,7 +467,7 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
// Note: worst-case sparsity for the input of col2im (of size NPQ x CRS where N is determined by degree of parallelism)
cpIntermediates.add(new IntermediateDimensions(this, "PQ", "CRS"));
}
- else if(getOp() == ConvOp.DIRECT_CONV2D_BACKWARD_FILTER) {
+ else if(getOp() == ConvOp.CONV2D_BACKWARD_FILTER) {
// Assumption: To compile a GPU conv2d_backward_filter operator, following should fit on the GPU:
// 1. output in dense format (i.e. computeOutputMemEstimate)
// 2. dout in any format
@@ -483,11 +483,11 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
// im2col operation preserves the worst-case sparsity of the input.
cpIntermediates.add(new IntermediateDimensions(this, "CRS", "PQ", getInput().get(0).getSparsity()));
}
- else if(getOp() == ConvOp.MAX_POOLING || getOp() == ConvOp.AVG_POOLING) {
+ else if(getOp() == ConvOp.MAX_POOL || getOp() == ConvOp.AVG_POOL) {
// Account for potential sparse-to-dense conversion of atleast 1 input row
gpuIntermediates.add(new IntermediateDimensions(this, 1, "CHW"));
}
- else if(getOp() == ConvOp.MAX_POOLING_BACKWARD || getOp() == ConvOp.AVG_POOLING_BACKWARD) {
+ else if(getOp() == ConvOp.MAX_POOL_BACKWARD || getOp() == ConvOp.AVG_POOL_BACKWARD) {
// Account for potential sparse-to-dense conversion of atleast 1 input + dout row
gpuIntermediates.add(new IntermediateDimensions(this, 1, "CHW"));
gpuIntermediates.add(new IntermediateDimensions(this, 1, "CPQ"));
@@ -568,10 +568,10 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
ConvolutionParameters parseInput() {
Hop imageHeightHop = null; Hop filterHeightHop = null;
- if(op == ConvOp.MAX_POOLING_BACKWARD || op == ConvOp.AVG_POOLING_BACKWARD
- || op == ConvOp.DIRECT_CONV2D
- || op == ConvOp.DIRECT_CONV2D_BACKWARD_FILTER
- || op == ConvOp.DIRECT_CONV2D_BACKWARD_DATA) {
+ if(op == ConvOp.MAX_POOL_BACKWARD || op == ConvOp.AVG_POOL_BACKWARD
+ || op == ConvOp.CONV2D
+ || op == ConvOp.CONV2D_BACKWARD_FILTER
+ || op == ConvOp.CONV2D_BACKWARD_DATA) {
imageHeightHop = getInput().get(8);
filterHeightHop = getInput().get(12);
_cachedParams.setIfUnknown(
@@ -605,8 +605,8 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
}
if(INFER_TENSOR_SHAPE_FROM_PARENT_CONV_OP) {
- boolean isPool = (getOp() == ConvOp.MAX_POOLING || getOp() == ConvOp.AVG_POOLING);
- boolean isConv = getOp() == ConvOp.DIRECT_CONV2D;
+ boolean isPool = (getOp() == ConvOp.MAX_POOL || getOp() == ConvOp.AVG_POOL);
+ boolean isConv = getOp() == ConvOp.CONV2D;
boolean unknownCHWPQ = _cachedParams.C < 0 || _cachedParams.H < 0 || _cachedParams.W < 0 || _cachedParams.P < 0 || _cachedParams.Q < 0;
if((isPool || isConv) && unknownCHWPQ) {
// Only infer input shape for convolution and maxpool
@@ -675,7 +675,7 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
if(parentOp == null)
return;
- else if(parentOp.getOp() == ConvOp.MAX_POOLING || parentOp.getOp() == ConvOp.AVG_POOLING) {
+ else if(parentOp.getOp() == ConvOp.MAX_POOL || parentOp.getOp() == ConvOp.AVG_POOL) {
ConvolutionParameters parentParam = parentOp.parseInput();
int prevC = _cachedParams.C; int prevH = _cachedParams.H; int prevW = _cachedParams.W;
// [C, P, Q] from maxpool becomes [C, H, W] of next op
@@ -691,7 +691,7 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
throwExceptionIfNotEqual(prevW, _cachedParams.W, "W");
}
}
- else if(parentOp.getOp() == ConvOp.DIRECT_CONV2D) {
+ else if(parentOp.getOp() == ConvOp.CONV2D) {
ConvolutionParameters parentParam = parentOp.parseInput();
int prevC = _cachedParams.C; int prevH = _cachedParams.H; int prevW = _cachedParams.W;
// [K, P, Q] from convolution becomes [C, H, W] of next op
@@ -725,37 +725,37 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
switch(op)
{
- case MAX_POOLING:
- case AVG_POOLING:
+ case MAX_POOL:
+ case AVG_POOL:
{
_dim1 = getDim("N");
_dim2 = getDim("CPQ");
_nnz = -1; // cannot infer stats
break;
}
- case MAX_POOLING_BACKWARD:
- case AVG_POOLING_BACKWARD:
+ case MAX_POOL_BACKWARD:
+ case AVG_POOL_BACKWARD:
{
_dim1 = getDim("N");
_dim2 = getDim("CHW");
_nnz = -1;
break;
}
- case DIRECT_CONV2D:
+ case CONV2D:
{
_dim1 = getDim("N");
_dim2 = getDim("KPQ");
_nnz = -1; // cannot infer stats
break;
}
- case DIRECT_CONV2D_BACKWARD_DATA:
+ case CONV2D_BACKWARD_DATA:
{
_dim1 = getDim("N");
_dim2 = getDim("CHW");
_nnz = -1; // cannot infer stats
break;
}
- case DIRECT_CONV2D_BACKWARD_FILTER:
+ case CONV2D_BACKWARD_FILTER:
{
_dim1 = getDim("K");
_dim2 = getDim("CRS");
@@ -835,22 +835,22 @@ public class ConvolutionOp extends Hop implements MultiThreadedHop
Hop dout = null; // shape: N x KPQ
Hop dout1 = null; // shape: N x CPQ
- if(getOp() == ConvOp.DIRECT_CONV2D) {
+ if(getOp() == ConvOp.CONV2D) {
input = getInput().get(0);
filter = getInput().get(1);
}
- else if(getOp() == ConvOp.DIRECT_CONV2D_BACKWARD_DATA) {
+ else if(getOp() == ConvOp.CONV2D_BACKWARD_DATA) {
filter = getInput().get(0);
dout = getInput().get(1);
}
- else if(getOp() == ConvOp.DIRECT_CONV2D_BACKWARD_FILTER) {
+ else if(getOp() == ConvOp.CONV2D_BACKWARD_FILTER) {
input = getInput().get(0);
dout = getInput().get(1);
}
- else if(getOp() == ConvOp.MAX_POOLING || getOp() == ConvOp.AVG_POOLING) {
+ else if(getOp() == ConvOp.MAX_POOL || getOp() == ConvOp.AVG_POOL) {
input = getInput().get(0);
}
- else if(getOp() == ConvOp.MAX_POOLING_BACKWARD || getOp() == ConvOp.AVG_POOLING_BACKWARD) {
+ else if(getOp() == ConvOp.MAX_POOL_BACKWARD || getOp() == ConvOp.AVG_POOL_BACKWARD) {
input = getInput().get(0);
dout1 = getInput().get(1);
}
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/Hop.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/Hop.java b/src/main/java/org/apache/sysml/hops/Hop.java
index 1a93a27..9445220 100644
--- a/src/main/java/org/apache/sysml/hops/Hop.java
+++ b/src/main/java/org/apache/sysml/hops/Hop.java
@@ -1064,7 +1064,7 @@ public abstract class Hop implements ParseInfo
public enum OpOp2 {
PLUS, MINUS, MULT, DIV, MODULUS, INTDIV, LESS, LESSEQUAL, GREATER, GREATEREQUAL, EQUAL, NOTEQUAL,
MIN, MAX, AND, OR, XOR, LOG, POW, PRINT, CONCAT, QUANTILE, INTERQUANTILE, IQM,
- CENTRALMOMENT, COVARIANCE, CBIND, RBIND, SOLVE, MEDIAN, INVALID,
+ MOMENT, COV, CBIND, RBIND, SOLVE, MEDIAN, INVALID,
//fused ML-specific operators for performance
MINUS_NZ, //sparse-safe minus: X-(mean*ppred(X,0,!=))
LOG_NZ, //sparse-safe log; ppred(X,0,"!=")*log(X,0.5)
@@ -1074,7 +1074,7 @@ public abstract class Hop implements ParseInfo
// Operations that require 3 operands
public enum OpOp3 {
- QUANTILE, INTERQUANTILE, CTABLE, CENTRALMOMENT, COVARIANCE, PLUS_MULT, MINUS_MULT, IFELSE
+ QUANTILE, INTERQUANTILE, CTABLE, MOMENT, COV, PLUS_MULT, MINUS_MULT, IFELSE
}
// Operations that require 4 operands
@@ -1096,7 +1096,7 @@ public abstract class Hop implements ParseInfo
}
public enum ReOrgOp {
- TRANSPOSE, DIAG, RESHAPE, SORT, REV
+ TRANS, DIAG, RESHAPE, SORT, REV
//Note: Diag types are invalid because for unknown sizes this would
//create incorrect plans (now we try to infer it for memory estimates
//and rewrites but the final choice is made during runtime)
@@ -1104,8 +1104,8 @@ public abstract class Hop implements ParseInfo
}
public enum ConvOp {
- MAX_POOLING, MAX_POOLING_BACKWARD, AVG_POOLING, AVG_POOLING_BACKWARD,
- DIRECT_CONV2D, DIRECT_CONV2D_BACKWARD_FILTER, DIRECT_CONV2D_BACKWARD_DATA,
+ MAX_POOL, MAX_POOL_BACKWARD, AVG_POOL, AVG_POOL_BACKWARD,
+ CONV2D, CONV2D_BACKWARD_FILTER, CONV2D_BACKWARD_DATA,
BIAS_ADD, BIAS_MULTIPLY
}
@@ -1159,7 +1159,7 @@ public abstract class Hop implements ParseInfo
protected static final HashMap<ReOrgOp, org.apache.sysml.lops.Transform.OperationTypes> HopsTransf2Lops;
static {
HopsTransf2Lops = new HashMap<>();
- HopsTransf2Lops.put(ReOrgOp.TRANSPOSE, org.apache.sysml.lops.Transform.OperationTypes.Transpose);
+ HopsTransf2Lops.put(ReOrgOp.TRANS, org.apache.sysml.lops.Transform.OperationTypes.Transpose);
HopsTransf2Lops.put(ReOrgOp.REV, org.apache.sysml.lops.Transform.OperationTypes.Rev);
HopsTransf2Lops.put(ReOrgOp.DIAG, org.apache.sysml.lops.Transform.OperationTypes.Diag);
HopsTransf2Lops.put(ReOrgOp.RESHAPE, org.apache.sysml.lops.Transform.OperationTypes.Reshape);
@@ -1170,15 +1170,15 @@ public abstract class Hop implements ParseInfo
protected static final HashMap<ConvOp, org.apache.sysml.lops.ConvolutionTransform.OperationTypes> HopsConv2Lops;
static {
HopsConv2Lops = new HashMap<>();
- HopsConv2Lops.put(ConvOp.MAX_POOLING, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.MAX_POOLING);
- HopsConv2Lops.put(ConvOp.MAX_POOLING_BACKWARD, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.MAX_POOLING_BACKWARD);
- HopsConv2Lops.put(ConvOp.AVG_POOLING, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.AVG_POOLING);
- HopsConv2Lops.put(ConvOp.AVG_POOLING_BACKWARD, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.AVG_POOLING_BACKWARD);
- HopsConv2Lops.put(ConvOp.DIRECT_CONV2D, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.DIRECT_CONV2D);
+ HopsConv2Lops.put(ConvOp.MAX_POOL, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.MAX_POOL);
+ HopsConv2Lops.put(ConvOp.MAX_POOL_BACKWARD, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.MAX_POOL_BACKWARD);
+ HopsConv2Lops.put(ConvOp.AVG_POOL, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.AVG_POOL);
+ HopsConv2Lops.put(ConvOp.AVG_POOL_BACKWARD, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.AVG_POOL_BACKWARD);
+ HopsConv2Lops.put(ConvOp.CONV2D, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.CONV2D);
HopsConv2Lops.put(ConvOp.BIAS_ADD, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.BIAS_ADD);
HopsConv2Lops.put(ConvOp.BIAS_MULTIPLY, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.BIAS_MULTIPLY);
- HopsConv2Lops.put(ConvOp.DIRECT_CONV2D_BACKWARD_FILTER, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.DIRECT_CONV2D_BACKWARD_FILTER);
- HopsConv2Lops.put(ConvOp.DIRECT_CONV2D_BACKWARD_DATA, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.DIRECT_CONV2D_BACKWARD_DATA);
+ HopsConv2Lops.put(ConvOp.CONV2D_BACKWARD_FILTER, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.CONV2D_BACKWARD_FILTER);
+ HopsConv2Lops.put(ConvOp.CONV2D_BACKWARD_DATA, org.apache.sysml.lops.ConvolutionTransform.OperationTypes.CONV2D_BACKWARD_DATA);
}
protected static final HashMap<Hop.Direction, org.apache.sysml.lops.PartialAggregate.DirectionTypes> HopsDirection2Lops;
@@ -1458,8 +1458,8 @@ public abstract class Hop implements ParseInfo
HopsOpOp2String.put(OpOp2.INTERQUANTILE, "interquantile");
HopsOpOp2String.put(OpOp2.IQM, "IQM");
HopsOpOp2String.put(OpOp2.MEDIAN, "median");
- HopsOpOp2String.put(OpOp2.CENTRALMOMENT, "cm");
- HopsOpOp2String.put(OpOp2.COVARIANCE, "cov");
+ HopsOpOp2String.put(OpOp2.MOMENT, "cm");
+ HopsOpOp2String.put(OpOp2.COV, "cov");
HopsOpOp2String.put(OpOp2.CBIND, "cbind");
HopsOpOp2String.put(OpOp2.RBIND, "rbind");
HopsOpOp2String.put(OpOp2.SOLVE, "solve");
@@ -1481,8 +1481,8 @@ public abstract class Hop implements ParseInfo
HopsOpOp3String.put(OpOp3.QUANTILE, "quantile");
HopsOpOp3String.put(OpOp3.INTERQUANTILE, "interquantile");
HopsOpOp3String.put(OpOp3.CTABLE, "ctable");
- HopsOpOp3String.put(OpOp3.CENTRALMOMENT, "cm");
- HopsOpOp3String.put(OpOp3.COVARIANCE, "cov");
+ HopsOpOp3String.put(OpOp3.MOMENT, "cm");
+ HopsOpOp3String.put(OpOp3.COV, "cov");
HopsOpOp3String.put(OpOp3.PLUS_MULT, "+*");
HopsOpOp3String.put(OpOp3.MINUS_MULT, "-*");
HopsOpOp3String.put(OpOp3.IFELSE, "ifelse");
@@ -1524,7 +1524,7 @@ public abstract class Hop implements ParseInfo
protected static final HashMap<Hop.ReOrgOp, String> HopsTransf2String;
static {
HopsTransf2String = new HashMap<>();
- HopsTransf2String.put(ReOrgOp.TRANSPOSE, "t");
+ HopsTransf2String.put(ReOrgOp.TRANS, "t");
HopsTransf2String.put(ReOrgOp.DIAG, "diag");
HopsTransf2String.put(ReOrgOp.RESHAPE, "rshape");
HopsTransf2String.put(ReOrgOp.SORT, "sort");
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/QuaternaryOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/QuaternaryOp.java b/src/main/java/org/apache/sysml/hops/QuaternaryOp.java
index 947f2ba..90cfc98 100644
--- a/src/main/java/org/apache/sysml/hops/QuaternaryOp.java
+++ b/src/main/java/org/apache/sysml/hops/QuaternaryOp.java
@@ -363,7 +363,7 @@ public class QuaternaryOp extends Hop implements MultiThreadedHop
}
else {
// replication of t(V) for shuffle to target block
- Transform ltV = new Transform(V.constructLops(), HopsTransf2Lops.get(ReOrgOp.TRANSPOSE), getDataType(),
+ Transform ltV = new Transform(V.constructLops(), HopsTransf2Lops.get(ReOrgOp.TRANS), getDataType(),
getValueType(), ExecType.MR);
ltV.getOutputParameters().setDimensions(V.getDim2(), V.getDim1(), V.getColsInBlock(), V.getRowsInBlock(), V.getNnz());
setLineNumbers(ltV);
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/ReorgOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ReorgOp.java b/src/main/java/org/apache/sysml/hops/ReorgOp.java
index 0d3863b..70fb797 100644
--- a/src/main/java/org/apache/sysml/hops/ReorgOp.java
+++ b/src/main/java/org/apache/sysml/hops/ReorgOp.java
@@ -90,7 +90,7 @@ public class ReorgOp extends Hop implements MultiThreadedHop
public void checkArity() {
int sz = _input.size();
switch( op ) {
- case TRANSPOSE:
+ case TRANS:
case DIAG:
case REV:
HopsException.check(sz == 1, this, "should have arity 1 for op %s but has arity %d", op, sz);
@@ -131,7 +131,7 @@ public class ReorgOp extends Hop implements MultiThreadedHop
if(!DMLScript.USE_ACCELERATOR)
return false;
switch( op ) {
- case TRANSPOSE: {
+ case TRANS: {
Lop lin;
try {
lin = getInput().get(0).constructLops();
@@ -166,7 +166,7 @@ public class ReorgOp extends Hop implements MultiThreadedHop
switch( op )
{
- case TRANSPOSE:
+ case TRANS:
{
Lop lin = getInput().get(0).constructLops();
if( lin instanceof Transform && ((Transform)lin).getOperationType()==OperationTypes.Transpose )
@@ -437,7 +437,7 @@ public class ReorgOp extends Hop implements MultiThreadedHop
switch(op)
{
- case TRANSPOSE:
+ case TRANS:
{
// input is a [k1,k2] matrix and output is a [k2,k1] matrix
// #nnz in output is exactly the same as in input
@@ -556,7 +556,7 @@ public class ReorgOp extends Hop implements MultiThreadedHop
switch(op)
{
- case TRANSPOSE:
+ case TRANS:
{
// input is a [k1,k2] matrix and output is a [k2,k1] matrix
// #nnz in output is exactly the same as in input
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/TernaryOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/TernaryOp.java b/src/main/java/org/apache/sysml/hops/TernaryOp.java
index 1e7876a..c7c7832 100644
--- a/src/main/java/org/apache/sysml/hops/TernaryOp.java
+++ b/src/main/java/org/apache/sysml/hops/TernaryOp.java
@@ -130,8 +130,8 @@ public class TernaryOp extends Hop
if(!DMLScript.USE_ACCELERATOR)
return false;
switch( _op ) {
- case CENTRALMOMENT:
- case COVARIANCE:
+ case MOMENT:
+ case COV:
case CTABLE:
case INTERQUANTILE:
case QUANTILE:
@@ -155,11 +155,11 @@ public class TernaryOp extends Hop
try
{
switch( _op ) {
- case CENTRALMOMENT:
+ case MOMENT:
constructLopsCentralMoment();
break;
- case COVARIANCE:
+ case COV:
constructLopsCovariance();
break;
@@ -198,8 +198,8 @@ public class TernaryOp extends Hop
*/
private void constructLopsCentralMoment()
{
- if ( _op != OpOp3.CENTRALMOMENT )
- throw new HopsException("Unexpected operation: " + _op + ", expecting " + OpOp3.CENTRALMOMENT );
+ if ( _op != OpOp3.MOMENT )
+ throw new HopsException("Unexpected operation: " + _op + ", expecting " + OpOp3.MOMENT );
ExecType et = optFindExecType();
@@ -247,8 +247,8 @@ public class TernaryOp extends Hop
* Method to construct LOPs when op = COVARIANCE.
*/
private void constructLopsCovariance() {
- if ( _op != OpOp3.COVARIANCE )
- throw new HopsException("Unexpected operation: " + _op + ", expecting " + OpOp3.COVARIANCE );
+ if ( _op != OpOp3.COV )
+ throw new HopsException("Unexpected operation: " + _op + ", expecting " + OpOp3.COV );
ExecType et = optFindExecType();
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/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 0dd9480..a4afa6d 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
@@ -696,7 +696,7 @@ public class PlanSelectionFuseCostBased extends PlanSelection
current.getInput().get(1), 2) ? 1 : 16); break;
case MINUS_NZ:
case MINUS1_MULT: costs = 2; break;
- case CENTRALMOMENT:
+ case MOMENT:
int type = (int) (current.getInput().get(1) instanceof LiteralOp ?
HopRewriteUtils.getIntValueSafe((LiteralOp)current.getInput().get(1)) : 2);
switch( type ) {
@@ -708,7 +708,7 @@ public class PlanSelectionFuseCostBased extends PlanSelection
case 5: costs = 16; break; //variance
}
break;
- case COVARIANCE: costs = 23; break;
+ case COV: costs = 23; break;
default:
LOG.warn("Cost model not "
+ "implemented yet for: "+((BinaryOp)current).getOp());
@@ -719,7 +719,7 @@ public class PlanSelectionFuseCostBased extends PlanSelection
case PLUS_MULT:
case MINUS_MULT: costs = 2; break;
case CTABLE: costs = 3; break;
- case CENTRALMOMENT:
+ case MOMENT:
int type = (int) (current.getInput().get(1) instanceof LiteralOp ?
HopRewriteUtils.getIntValueSafe((LiteralOp)current.getInput().get(1)) : 2);
switch( type ) {
@@ -731,7 +731,7 @@ public class PlanSelectionFuseCostBased extends PlanSelection
case 5: costs = 17; break; //variance
}
break;
- case COVARIANCE: costs = 23; break;
+ case COV: costs = 23; break;
default:
LOG.warn("Cost model not "
+ "implemented yet for: "+((TernaryOp)current).getOp());
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/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 76735ea..1e5bcf3 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
@@ -48,7 +48,6 @@ import org.apache.sysml.hops.Hop.DataOpTypes;
import org.apache.sysml.hops.Hop.Direction;
import org.apache.sysml.hops.Hop.OpOp2;
import org.apache.sysml.hops.Hop.OpOpN;
-import org.apache.sysml.hops.Hop.ReOrgOp;
import org.apache.sysml.hops.IndexingOp;
import org.apache.sysml.hops.LiteralOp;
import org.apache.sysml.hops.OptimizerUtils;
@@ -718,7 +717,7 @@ public class PlanSelectionFuseCostBasedV2 extends PlanSelection
|| HopRewriteUtils.isNary(hop, OpOpN.CBIND)
|| (hop instanceof AggBinaryOp && (inRow || !hop.dimsKnown()
|| (hop.getDim1()!=1 && hop.getDim2()!=1)))
- || (HopRewriteUtils.isReorg(hop, ReOrgOp.TRANSPOSE)
+ || (HopRewriteUtils.isTransposeOperation(hop)
&& (hop.getDim1()!=1 && hop.getDim2()!=1))
|| (hop instanceof AggUnaryOp && inRow);
}
@@ -1075,7 +1074,7 @@ public class PlanSelectionFuseCostBasedV2 extends PlanSelection
current.getInput().get(1), 2) ? 1 : 16); break;
case MINUS_NZ:
case MINUS1_MULT: costs = 2; break;
- case CENTRALMOMENT:
+ case MOMENT:
int type = (int) (current.getInput().get(1) instanceof LiteralOp ?
HopRewriteUtils.getIntValueSafe((LiteralOp)current.getInput().get(1)) : 2);
switch( type ) {
@@ -1087,7 +1086,7 @@ public class PlanSelectionFuseCostBasedV2 extends PlanSelection
case 5: costs = 16; break; //variance
}
break;
- case COVARIANCE: costs = 23; break;
+ case COV: costs = 23; break;
default:
LOG.warn("Cost model not "
+ "implemented yet for: "+((BinaryOp)current).getOp());
@@ -1099,7 +1098,7 @@ public class PlanSelectionFuseCostBasedV2 extends PlanSelection
case PLUS_MULT:
case MINUS_MULT: costs = 2; break;
case CTABLE: costs = 3; break;
- case CENTRALMOMENT:
+ case MOMENT:
int type = (int) (current.getInput().get(1) instanceof LiteralOp ?
HopRewriteUtils.getIntValueSafe((LiteralOp)current.getInput().get(1)) : 2);
switch( type ) {
@@ -1111,7 +1110,7 @@ public class PlanSelectionFuseCostBasedV2 extends PlanSelection
case 5: costs = 17; break; //variance
}
break;
- case COVARIANCE: costs = 23; break;
+ case COV: costs = 23; break;
default:
LOG.warn("Cost model not "
+ "implemented yet for: "+((TernaryOp)current).getOp());
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/rewrite/HopRewriteUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/HopRewriteUtils.java b/src/main/java/org/apache/sysml/hops/rewrite/HopRewriteUtils.java
index c490bbf..c6c42ae 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/HopRewriteUtils.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/HopRewriteUtils.java
@@ -502,7 +502,7 @@ public class HopRewriteUtils
}
public static ReorgOp createTranspose(Hop input) {
- return createReorg(input, ReOrgOp.TRANSPOSE);
+ return createReorg(input, ReOrgOp.TRANS);
}
public static ReorgOp createReorg(Hop input, ReOrgOp rop) {
@@ -853,7 +853,7 @@ public class HopRewriteUtils
}
public static boolean isTransposeOperation(Hop hop) {
- return isReorg(hop, ReOrgOp.TRANSPOSE);
+ return isReorg(hop, ReOrgOp.TRANS);
}
public static boolean isTransposeOperation(Hop hop, int maxParents) {
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
index ae5bda3..545ffd8 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
@@ -377,7 +377,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
apply |= (rop.getOp()==ReOrgOp.RESHAPE && HopRewriteUtils.isEqualSize(hi, input));
//1x1 dimensions of transpose/reshape -> no need for reorg
- apply |= ((rop.getOp()==ReOrgOp.TRANSPOSE || rop.getOp()==ReOrgOp.RESHAPE)
+ apply |= ((rop.getOp()==ReOrgOp.TRANS || rop.getOp()==ReOrgOp.RESHAPE)
&& rop.getDim1()==1 && rop.getDim2()==1);
if( apply ) {
@@ -807,7 +807,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
{
//reorg-operation-specific rewrite
Hop hnew = null;
- if( rhi.getOp() == ReOrgOp.TRANSPOSE )
+ if( rhi.getOp() == ReOrgOp.TRANS )
hnew = HopRewriteUtils.createDataGenOp(input, true, input, true, 0);
else if( rhi.getOp() == ReOrgOp.REV )
hnew = HopRewriteUtils.createDataGenOp(input, 0);
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
index a75167c..d1629ac 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
@@ -906,7 +906,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
&& hi.getInput().get(0) instanceof ReorgOp ) //reorg operation
{
ReorgOp rop = (ReorgOp)hi.getInput().get(0);
- if( (rop.getOp()==ReOrgOp.TRANSPOSE || rop.getOp()==ReOrgOp.RESHAPE
+ if( (rop.getOp()==ReOrgOp.TRANS || rop.getOp()==ReOrgOp.RESHAPE
|| rop.getOp() == ReOrgOp.REV ) //valid reorg
&& rop.getParent().size()==1 ) //uagg only reorg consumer
{
@@ -1043,7 +1043,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
BinaryOp binary = (BinaryOp) hi.getInput().get(0);
if( HopRewriteUtils.containsTransposeOperation(X.getParent())
- && !HopRewriteUtils.isValidOp(binary.getOp(), new OpOp2[]{OpOp2.CENTRALMOMENT, OpOp2.QUANTILE}))
+ && !HopRewriteUtils.isValidOp(binary.getOp(), new OpOp2[]{OpOp2.MOMENT, OpOp2.QUANTILE}))
{
//clear existing wiring
HopRewriteUtils.removeChildReferenceByPos(parent, hi, pos);
@@ -1591,7 +1591,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
*/
private static Hop removeUnnecessaryReorgOperation(Hop parent, Hop hi, int pos)
{
- ReOrgOp[] lookup = new ReOrgOp[]{ReOrgOp.TRANSPOSE, ReOrgOp.REV};
+ ReOrgOp[] lookup = new ReOrgOp[]{ReOrgOp.TRANS, ReOrgOp.REV};
if( hi instanceof ReorgOp && HopRewriteUtils.isValidOp(((ReorgOp)hi).getOp(), lookup) ) //first reorg
{
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/lops/ConvolutionTransform.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/lops/ConvolutionTransform.java b/src/main/java/org/apache/sysml/lops/ConvolutionTransform.java
index 192adb5..cd232d0 100644
--- a/src/main/java/org/apache/sysml/lops/ConvolutionTransform.java
+++ b/src/main/java/org/apache/sysml/lops/ConvolutionTransform.java
@@ -30,10 +30,10 @@ public class ConvolutionTransform extends Lop
public enum OperationTypes {
- MAX_POOLING, MAX_POOLING_BACKWARD, AVG_POOLING, AVG_POOLING_BACKWARD,
+ MAX_POOL, MAX_POOL_BACKWARD, AVG_POOL, AVG_POOL_BACKWARD,
RELU_MAX_POOLING, RELU_MAX_POOLING_BACKWARD, RELU_BACKWARD,
- DIRECT_CONV2D, DIRECT_CONV2D_BACKWARD_FILTER, DIRECT_CONV2D_BACKWARD_DATA,
- BIAS_ADD, DIRECT_CONV2D_BIAS_ADD, BIAS_MULTIPLY, CHANNEL_SUMS
+ CONV2D, CONV2D_BACKWARD_FILTER, CONV2D_BACKWARD_DATA,
+ BIAS_ADD, CONV2D_BIAS_ADD, BIAS_MULTIPLY, CHANNEL_SUMS
}
private OperationTypes operation = null;
@@ -126,7 +126,7 @@ public class ConvolutionTransform extends Lop
private String getOpcode() {
switch(operation) {
- case MAX_POOLING:
+ case MAX_POOL:
return "maxpooling";
case RELU_MAX_POOLING:
@@ -138,19 +138,19 @@ public class ConvolutionTransform extends Lop
case RELU_BACKWARD:
return "relu_backward";
- case MAX_POOLING_BACKWARD:
+ case MAX_POOL_BACKWARD:
return "maxpooling_backward";
- case AVG_POOLING:
+ case AVG_POOL:
return "avgpooling";
- case AVG_POOLING_BACKWARD:
+ case AVG_POOL_BACKWARD:
return "avgpooling_backward";
- case DIRECT_CONV2D:
+ case CONV2D:
return "conv2d";
- case DIRECT_CONV2D_BIAS_ADD:
+ case CONV2D_BIAS_ADD:
return "conv2d_bias_add";
case BIAS_ADD:
@@ -159,10 +159,10 @@ public class ConvolutionTransform extends Lop
case BIAS_MULTIPLY:
return "bias_multiply";
- case DIRECT_CONV2D_BACKWARD_FILTER:
+ case CONV2D_BACKWARD_FILTER:
return "conv2d_backward_filter";
- case DIRECT_CONV2D_BACKWARD_DATA:
+ case CONV2D_BACKWARD_DATA:
return "conv2d_backward_data";
case CHANNEL_SUMS:
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/src/main/java/org/apache/sysml/parser/DMLTranslator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/DMLTranslator.java b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
index 9b5f02e..66f3c8e 100644
--- a/src/main/java/org/apache/sysml/parser/DMLTranslator.java
+++ b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
@@ -40,9 +40,11 @@ import org.apache.sysml.hops.FunctionOp;
import org.apache.sysml.hops.FunctionOp.FunctionType;
import org.apache.sysml.hops.Hop;
import org.apache.sysml.hops.Hop.AggOp;
+import org.apache.sysml.hops.Hop.ConvOp;
import org.apache.sysml.hops.Hop.DataGenMethod;
import org.apache.sysml.hops.Hop.DataOpTypes;
import org.apache.sysml.hops.Hop.Direction;
+import org.apache.sysml.hops.Hop.OpOp1;
import org.apache.sysml.hops.Hop.OpOpN;
import org.apache.sysml.hops.Hop.OpOp2;
import org.apache.sysml.hops.Hop.OpOp3;
@@ -2077,32 +2079,21 @@ public class DMLTranslator
case PF:
case PCHISQ:
case PEXP:
- currBuiltinOp = constructDfHop(target.getName(), target.getDataType(), target.getValueType(), source.getOpCode(), paramHops);
+ currBuiltinOp = constructDfHop(target.getName(), target.getDataType(),
+ target.getValueType(), source.getOpCode(), paramHops);
break;
case GROUPEDAGG:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(), ParamBuiltinOp.GROUPEDAGG, paramHops);
- break;
-
case RMEMPTY:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(), ParamBuiltinOp.RMEMPTY, paramHops);
- break;
-
case REPLACE:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(), ParamBuiltinOp.REPLACE, paramHops);
- break;
-
case LOWER_TRI:
- currBuiltinOp = new ParameterizedBuiltinOp(target.getName(), target.getDataType(),
- target.getValueType(), ParamBuiltinOp.LOWER_TRI, paramHops);
- break;
-
case UPPER_TRI:
+ case TRANSFORMAPPLY:
+ case TRANSFORMDECODE:
+ case TRANSFORMCOLMAP:
+ case TRANSFORMMETA:
currBuiltinOp = new ParameterizedBuiltinOp(target.getName(), target.getDataType(),
- target.getValueType(), ParamBuiltinOp.UPPER_TRI, paramHops);
+ target.getValueType(), ParamBuiltinOp.valueOf(source.getOpCode().name()), paramHops);
break;
case ORDER:
@@ -2114,30 +2105,6 @@ public class DMLTranslator
currBuiltinOp = new ReorgOp(target.getName(), target.getDataType(), target.getValueType(), ReOrgOp.SORT, inputs);
break;
- case TRANSFORMAPPLY:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(),
- ParamBuiltinOp.TRANSFORMAPPLY, paramHops);
- break;
-
- case TRANSFORMDECODE:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(),
- ParamBuiltinOp.TRANSFORMDECODE, paramHops);
- break;
-
- case TRANSFORMCOLMAP:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(),
- ParamBuiltinOp.TRANSFORMCOLMAP, paramHops);
- break;
-
- case TRANSFORMMETA:
- currBuiltinOp = new ParameterizedBuiltinOp(
- target.getName(), target.getDataType(), target.getValueType(),
- ParamBuiltinOp.TRANSFORMMETA, paramHops);
- break;
-
case TOSTRING:
//check for input data type and only compile toString Hop for matrices/frames,
//for scalars, we compile (s + "") to ensure consistent string output value types
@@ -2329,34 +2296,20 @@ public class DMLTranslator
switch (source.getOpCode()) {
case EVAL:
- currBuiltinOp = new NaryOp(target.getName(), target.getDataType(), target.getValueType(), OpOpN.EVAL, processAllExpressions(source.getAllExpr(), hops));
+ currBuiltinOp = new NaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ OpOpN.EVAL, processAllExpressions(source.getAllExpr(), hops));
break;
case COLSUM:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.SUM,
- Direction.Col, expr);
- break;
-
case COLMAX:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.MAX,
- Direction.Col, expr);
- break;
-
case COLMIN:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.MIN,
- Direction.Col, expr);
- break;
-
case COLMEAN:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.MEAN,
- Direction.Col, expr);
- break;
-
case COLPROD:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.PROD,
- Direction.Col, expr);
+ case COLVAR:
+ currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ AggOp.valueOf(source.getOpCode().name().substring(3)), Direction.Col, expr);
break;
-
+
case COLSD:
// colStdDevs = sqrt(colVariances)
currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(),
@@ -2365,19 +2318,14 @@ public class DMLTranslator
target.getValueType(), Hop.OpOp1.SQRT, currBuiltinOp);
break;
- case COLVAR:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(),
- target.getValueType(), AggOp.VAR, Direction.Col, expr);
- break;
-
case ROWSUM:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.SUM,
- Direction.Row, expr);
- break;
-
+ case ROWMIN:
case ROWMAX:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.MAX,
- Direction.Row, expr);
+ case ROWMEAN:
+ case ROWPROD:
+ case ROWVAR:
+ currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ AggOp.valueOf(source.getOpCode().name().substring(3)), Direction.Row, expr);
break;
case ROWINDEXMAX:
@@ -2390,21 +2338,6 @@ public class DMLTranslator
Direction.Row, expr);
break;
- case ROWMIN:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.MIN,
- Direction.Row, expr);
- break;
-
- case ROWMEAN:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.MEAN,
- Direction.Row, expr);
- break;
-
- case ROWPROD:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.PROD,
- Direction.Row, expr);
- break;
-
case ROWSD:
// rowStdDevs = sqrt(rowVariances)
currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(),
@@ -2413,50 +2346,24 @@ public class DMLTranslator
target.getValueType(), Hop.OpOp1.SQRT, currBuiltinOp);
break;
- case ROWVAR:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(),
- target.getValueType(), AggOp.VAR, Direction.Row, expr);
- break;
-
case NROW:
// If the dimensions are available at compile time, then create a LiteralOp (constant propagation)
// Else create a UnaryOp so that a control program instruction is generated
-
- long nRows = expr.getDim1();
- if (nRows == -1) {
- currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(), Hop.OpOp1.NROW, expr);
- }
- else {
- currBuiltinOp = new LiteralOp(nRows);
- }
+ currBuiltinOp = (expr.getDim1()==-1) ? new UnaryOp(target.getName(), target.getDataType(),
+ target.getValueType(), Hop.OpOp1.NROW, expr) : new LiteralOp(expr.getDim1());
break;
case NCOL:
// If the dimensions are available at compile time, then create a LiteralOp (constant propagation)
// Else create a UnaryOp so that a control program instruction is generated
-
- long nCols = expr.getDim2();
- if (nCols == -1) {
- currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(), Hop.OpOp1.NCOL, expr);
- }
- else {
- currBuiltinOp = new LiteralOp(nCols);
- }
+ currBuiltinOp = (expr.getDim2()==-1) ? new UnaryOp(target.getName(), target.getDataType(),
+ target.getValueType(), Hop.OpOp1.NCOL, expr) : new LiteralOp(expr.getDim2());
break;
case LENGTH:
- long nRows2 = expr.getDim1();
- long nCols2 = expr.getDim2();
- /*
- * If the dimensions are available at compile time, then create a LiteralOp (constant propagation)
- * Else create a UnaryOp so that a control program instruction is generated
- */
- if ((nCols2 == -1) || (nRows2 == -1)) {
- currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(), Hop.OpOp1.LENGTH, expr);
- }
- else {
- long lval = (nCols2 * nRows2);
- currBuiltinOp = new LiteralOp(lval);
- }
+ // If the dimensions are available at compile time, then create a LiteralOp (constant propagation)
+ // Else create a UnaryOp so that a control program instruction is generated
+ currBuiltinOp = (expr.getDim1()==-1 || expr.getDim2()==-1) ? new UnaryOp(target.getName(), target.getDataType(),
+ target.getValueType(), Hop.OpOp1.LENGTH, expr) : new LiteralOp(expr.getDim1()*expr.getDim2());
break;
case EXISTS:
@@ -2465,10 +2372,12 @@ public class DMLTranslator
break;
case SUM:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.SUM,
- Direction.RowCol, expr);
+ case PROD:
+ case VAR:
+ currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ AggOp.valueOf(source.getOpCode().name()), Direction.RowCol, expr);
break;
-
+
case MEAN:
if ( expr2 == null ) {
// example: x = mean(Y);
@@ -2480,7 +2389,7 @@ public class DMLTranslator
// stable weighted mean is implemented by using centralMoment with order = 0
Hop orderHop = new LiteralOp(0);
currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp3.CENTRALMOMENT, expr, expr2, orderHop);
+ Hop.OpOp3.MOMENT, expr, expr2, orderHop);
}
break;
@@ -2493,34 +2402,14 @@ public class DMLTranslator
target.getValueType(), Hop.OpOp1.SQRT, currBuiltinOp);
break;
- case VAR:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(),
- target.getValueType(), AggOp.VAR, Direction.RowCol, expr);
- break;
-
case MIN:
- //construct AggUnary for min(X) but BinaryOp for min(X,Y)
- if( expr2 == null ) {
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(),
- AggOp.MIN, Direction.RowCol, expr);
- }
- else {
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(), target.getValueType(), OpOp2.MIN,
- expr, expr2);
- }
- break;
-
case MAX:
- //construct AggUnary for max(X) but BinaryOp for max(X,Y)
- if( expr2 == null ) {
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(),
- AggOp.MAX, Direction.RowCol, expr);
- } else {
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(), target.getValueType(), OpOp2.MAX,
- expr, expr2);
- }
+ //construct AggUnary for min(X) but BinaryOp for min(X,Y)
+ currBuiltinOp = (expr2 == null) ? new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ AggOp.valueOf(source.getOpCode().name()), Direction.RowCol, expr) : new BinaryOp(target.getName(),
+ target.getDataType(), target.getValueType(), OpOp2.valueOf(source.getOpCode().name()), expr, expr2);
break;
-
+
case PPRED:
String sop = ((StringIdentifier)source.getThirdExpr()).getValue();
sop = sop.replace("\"", "");
@@ -2544,23 +2433,16 @@ public class DMLTranslator
currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(), target.getValueType(), operation, expr, expr2);
break;
- case PROD:
- currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.PROD,
- Direction.RowCol, expr);
- break;
case TRACE:
currBuiltinOp = new AggUnaryOp(target.getName(), target.getDataType(), target.getValueType(), AggOp.TRACE,
Direction.RowCol, expr);
break;
case TRANS:
- currBuiltinOp = new ReorgOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.ReOrgOp.TRANSPOSE, expr);
- break;
-
+ case DIAG:
case REV:
- currBuiltinOp = new ReorgOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.ReOrgOp.REV, expr);
+ currBuiltinOp = new ReorgOp(target.getName(), target.getDataType(),
+ target.getValueType(), ReOrgOp.valueOf(source.getOpCode().name()), expr);
break;
case CBIND:
@@ -2572,11 +2454,6 @@ public class DMLTranslator
new NaryOp(target.getName(), target.getDataType(), target.getValueType(), appendOp2,
processAllExpressions(source.getAllExpr(), hops));
break;
-
- case DIAG:
- currBuiltinOp = new ReorgOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.ReOrgOp.DIAG, expr);
- break;
case TABLE:
@@ -2647,28 +2524,13 @@ public class DMLTranslator
// Boolean binary
case XOR:
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(),
- target.getValueType(), Hop.OpOp2.XOR, expr, expr2);
- break;
case BITWAND:
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(),
- target.getValueType(), OpOp2.BITWAND, expr, expr2);
- break;
case BITWOR:
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(),
- target.getValueType(), OpOp2.BITWOR, expr, expr2);
- break;
case BITWXOR:
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(),
- target.getValueType(), OpOp2.BITWXOR, expr, expr2);
- break;
case BITWSHIFTL:
- currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(),
- target.getValueType(), OpOp2.BITWSHIFTL, expr, expr2);
- break;
case BITWSHIFTR:
currBuiltinOp = new BinaryOp(target.getName(), target.getDataType(),
- target.getValueType(), OpOp2.BITWSHIFTR, expr, expr2);
+ target.getValueType(), OpOp2.valueOf(source.getOpCode().name()), expr, expr2);
break;
case ABS:
@@ -2691,80 +2553,10 @@ public class DMLTranslator
case CUMPROD:
case CUMMIN:
case CUMMAX:
- Hop.OpOp1 mathOp1;
- switch (source.getOpCode()) {
- case ABS:
- mathOp1 = Hop.OpOp1.ABS;
- break;
- case SIN:
- mathOp1 = Hop.OpOp1.SIN;
- break;
- case COS:
- mathOp1 = Hop.OpOp1.COS;
- break;
- case TAN:
- mathOp1 = Hop.OpOp1.TAN;
- break;
- case ASIN:
- mathOp1 = Hop.OpOp1.ASIN;
- break;
- case ACOS:
- mathOp1 = Hop.OpOp1.ACOS;
- break;
- case ATAN:
- mathOp1 = Hop.OpOp1.ATAN;
- break;
- case SINH:
- mathOp1 = Hop.OpOp1.SINH;
- break;
- case COSH:
- mathOp1 = Hop.OpOp1.COSH;
- break;
- case TANH:
- mathOp1 = Hop.OpOp1.TANH;
- break;
- case SIGN:
- mathOp1 = Hop.OpOp1.SIGN;
- break;
- case SQRT:
- mathOp1 = Hop.OpOp1.SQRT;
- break;
- case EXP:
- mathOp1 = Hop.OpOp1.EXP;
- break;
- case ROUND:
- mathOp1 = Hop.OpOp1.ROUND;
- break;
- case CEIL:
- mathOp1 = Hop.OpOp1.CEIL;
- break;
- case FLOOR:
- mathOp1 = Hop.OpOp1.FLOOR;
- break;
- case CUMSUM:
- mathOp1 = Hop.OpOp1.CUMSUM;
- break;
- case CUMPROD:
- mathOp1 = Hop.OpOp1.CUMPROD;
- break;
- case CUMMIN:
- mathOp1 = Hop.OpOp1.CUMMIN;
- break;
- case CUMMAX:
- mathOp1 = Hop.OpOp1.CUMMAX;
- break;
- default:
-
- LOG.error(source.printErrorLocation() +
- "processBuiltinFunctionExpression():: Could not find Operation type for builtin function: "
- + source.getOpCode());
-
- throw new ParseException(source.printErrorLocation() +
- "processBuiltinFunctionExpression():: Could not find Operation type for builtin function: "
- + source.getOpCode());
- }
- currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(), mathOp1, expr);
+ currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ OpOp1.valueOf(source.getOpCode().name()), expr);
break;
+
case LOG:
if (expr2 == null) {
Hop.OpOp1 mathOp2;
@@ -2804,71 +2596,21 @@ public class DMLTranslator
expr, expr2);
}
break;
+
case MOMENT:
- if (expr3 == null){
- currBuiltinOp=new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp2.CENTRALMOMENT, expr, expr2);
- }
- else {
- currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp3.CENTRALMOMENT, expr, expr2,expr3);
- }
- break;
-
case COV:
- if (expr3 == null){
- currBuiltinOp=new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp2.COVARIANCE, expr, expr2);
- }
- else {
- currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp3.COVARIANCE, expr, expr2,expr3);
- }
- break;
-
case QUANTILE:
- if (expr3 == null){
- currBuiltinOp=new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp2.QUANTILE, expr, expr2);
- }
- else {
- currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp3.QUANTILE, expr, expr2,expr3);
- }
- break;
-
case INTERQUANTILE:
- if ( expr3 == null ) {
- currBuiltinOp=new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp2.INTERQUANTILE, expr, expr2);
- }
- else {
- currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp3.INTERQUANTILE, expr, expr2,expr3);
- }
- break;
-
- case IQM:
- if ( expr2 == null ) {
- currBuiltinOp=new UnaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp1.IQM, expr);
- }
- else {
- currBuiltinOp=new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp2.IQM, expr, expr2);
- }
- break;
+ currBuiltinOp = (expr3 == null) ? new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ OpOp2.valueOf(source.getOpCode().name()), expr, expr2) : new TernaryOp(target.getName(), target.getDataType(),
+ target.getValueType(), OpOp3.valueOf(source.getOpCode().name()), expr, expr2,expr3);
+ break;
+ case IQM:
case MEDIAN:
- if ( expr2 == null ) {
- currBuiltinOp=new UnaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp1.MEDIAN, expr);
- }
- else {
- currBuiltinOp=new BinaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp2.MEDIAN, expr, expr2);
- }
- break;
+ currBuiltinOp = (expr2 == null) ? new UnaryOp(target.getName(), target.getDataType(), target.getValueType(),
+ OpOp1.valueOf(source.getOpCode().name()), expr) : new BinaryOp(target.getName(), target.getDataType(),
+ target.getValueType(), OpOp2.valueOf(source.getOpCode().name()), expr, expr2);
case IFELSE:
currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(),
@@ -2933,14 +2675,10 @@ public class DMLTranslator
break;
case INVERSE:
- currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp1.INVERSE, expr);
- break;
-
case CHOLESKY:
currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(),
- Hop.OpOp1.CHOLESKY, expr);
- break;
+ OpOp1.valueOf(source.getOpCode().name()), expr);
+ break;
case OUTER:
if( !(expr3 instanceof LiteralOp) )
@@ -2953,74 +2691,40 @@ public class DMLTranslator
((BinaryOp)currBuiltinOp).setOuterVectorOperation(true); //flag op as specific outer vector operation
currBuiltinOp.refreshSizeInformation(); //force size reevaluation according to 'outer' flag otherwise danger of incorrect dims
break;
-
- case CONV2D:
- {
- Hop image = expr;
- ArrayList<Hop> inHops1 = getALHopsForConvOp(image, source, 1, hops);
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.DIRECT_CONV2D, inHops1);
- setBlockSizeAndRefreshSizeInfo(image, currBuiltinOp);
- break;
- }
+
case BIAS_ADD:
- {
- ArrayList<Hop> inHops1 = new ArrayList<>();
- inHops1.add(expr);
- inHops1.add(expr2);
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.BIAS_ADD, inHops1);
- setBlockSizeAndRefreshSizeInfo(expr, currBuiltinOp);
- break;
- }
- case BIAS_MULTIPLY:
- {
+ case BIAS_MULTIPLY: {
ArrayList<Hop> inHops1 = new ArrayList<>();
inHops1.add(expr);
inHops1.add(expr2);
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.BIAS_MULTIPLY, inHops1);
+ currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(),
+ ConvOp.valueOf(source.getOpCode().name()), inHops1);
setBlockSizeAndRefreshSizeInfo(expr, currBuiltinOp);
break;
}
case AVG_POOL:
- case MAX_POOL:
- {
- Hop image = expr;
- ArrayList<Hop> inHops1 = getALHopsForPoolingForwardIM2COL(image, source, 1, hops);
- if(source.getOpCode() == BuiltinFunctionOp.MAX_POOL)
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.MAX_POOLING, inHops1);
- else
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.AVG_POOLING, inHops1);
- setBlockSizeAndRefreshSizeInfo(image, currBuiltinOp);
+ case MAX_POOL: {
+ currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(),
+ ConvOp.valueOf(source.getOpCode().name()), getALHopsForPoolingForwardIM2COL(expr, source, 1, hops));
+ setBlockSizeAndRefreshSizeInfo(expr, currBuiltinOp);
break;
}
case AVG_POOL_BACKWARD:
- case MAX_POOL_BACKWARD:
- {
- Hop image = expr;
- ArrayList<Hop> inHops1 = getALHopsForConvOpPoolingCOL2IM(image, source, 1, hops); // process dout as well
- if(source.getOpCode() == BuiltinFunctionOp.MAX_POOL_BACKWARD)
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.MAX_POOLING_BACKWARD, inHops1);
- else
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.AVG_POOLING_BACKWARD, inHops1);
- setBlockSizeAndRefreshSizeInfo(image, currBuiltinOp);
+ case MAX_POOL_BACKWARD: {
+ currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(),
+ ConvOp.valueOf(source.getOpCode().name()), getALHopsForConvOpPoolingCOL2IM(expr, source, 1, hops));
+ setBlockSizeAndRefreshSizeInfo(expr, currBuiltinOp);
break;
}
+ case CONV2D:
case CONV2D_BACKWARD_FILTER:
- {
- Hop image = expr;
- ArrayList<Hop> inHops1 = getALHopsForConvOp(image, source, 1, hops);
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.DIRECT_CONV2D_BACKWARD_FILTER, inHops1);
- setBlockSizeAndRefreshSizeInfo(image, currBuiltinOp);
- break;
- }
- case CONV2D_BACKWARD_DATA:
- {
- Hop image = expr;
- ArrayList<Hop> inHops1 = getALHopsForConvOp(image, source, 1, hops);
- currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(), Hop.ConvOp.DIRECT_CONV2D_BACKWARD_DATA, inHops1);
- setBlockSizeAndRefreshSizeInfo(image, currBuiltinOp);
+ case CONV2D_BACKWARD_DATA: {
+ currBuiltinOp = new ConvolutionOp(target.getName(), target.getDataType(), target.getValueType(),
+ ConvOp.valueOf(source.getOpCode().name()), getALHopsForConvOp(expr, source, 1, hops));
+ setBlockSizeAndRefreshSizeInfo(expr, currBuiltinOp);
break;
}
-
+
default:
throw new ParseException("Unsupported builtin function type: "+source.getOpCode());
}
http://git-wip-us.apache.org/repos/asf/systemml/blob/eb852482/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 9059e0f..536acb3 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
@@ -1305,7 +1305,7 @@ public class OptimizerRuleBased extends Optimizer
&& !( h instanceof UnaryOp //only unaryop-cumulativeagg
&& !((UnaryOp)h).isCumulativeUnaryOperation() )
&& !( h instanceof ReorgOp //only reorgop-transpose
- && ((ReorgOp)h).getOp() != ReOrgOp.TRANSPOSE ))
+ && ((ReorgOp)h).getOp() != ReOrgOp.TRANS ))
{
MultiThreadedHop mhop = (MultiThreadedHop) h;
mhop.setMaxNumThreads(opsK); //set max constraint in hop