You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by ni...@apache.org on 2018/09/10 22:06:58 UTC
systemml git commit: [MINOR] Allow non-literal values in
parameterized built-in functions
Repository: systemml
Updated Branches:
refs/heads/master ab251f6ee -> 2fc26b3dc
[MINOR] Allow non-literal values in parameterized built-in functions
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/2fc26b3d
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/2fc26b3d
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/2fc26b3d
Branch: refs/heads/master
Commit: 2fc26b3dced89a473055828b08550ed6e6a8d7be
Parents: ab251f6
Author: Niketan Pansare <np...@us.ibm.com>
Authored: Mon Sep 10 15:05:05 2018 -0700
Committer: Niketan Pansare <np...@us.ibm.com>
Committed: Mon Sep 10 15:05:05 2018 -0700
----------------------------------------------------------------------
.../gpu/GPUDenseInputPointerFetcher.java | 1 -
.../gpu/MatrixReshapeGPUInstruction.java | 3 +-
.../ParameterizedBuiltinSPInstruction.java | 75 ++++++++++++++++----
3 files changed, 63 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/2fc26b3d/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUDenseInputPointerFetcher.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUDenseInputPointerFetcher.java b/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUDenseInputPointerFetcher.java
index 8fcaec3..1ab3420 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUDenseInputPointerFetcher.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUDenseInputPointerFetcher.java
@@ -20,7 +20,6 @@ package org.apache.sysml.runtime.instructions.gpu;
import java.util.HashMap;
-import org.apache.sysml.api.DMLScript;
import org.apache.sysml.conf.ConfigurationManager;
import org.apache.sysml.runtime.DMLRuntimeException;
import org.apache.sysml.runtime.controlprogram.caching.MatrixObject;
http://git-wip-us.apache.org/repos/asf/systemml/blob/2fc26b3d/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixReshapeGPUInstruction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixReshapeGPUInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixReshapeGPUInstruction.java
index 61cb643..ee2166e 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixReshapeGPUInstruction.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixReshapeGPUInstruction.java
@@ -79,7 +79,8 @@ public class MatrixReshapeGPUInstruction extends GPUInstruction {
GPUContext gCtx = ec.getGPUContext(0);
MatrixObject mat = getMatrixInputForGPUInstruction(ec, _input.getName());
if(rows*cols != mat.getNumRows()*mat.getNumColumns()) {
- throw new DMLRuntimeException("Incorrect number of rows and cols in rshape instruction");
+ throw new DMLRuntimeException("Cannot reshape a matrix of dimensions: [" + mat.getNumRows() + ", " + mat.getNumColumns() + "] to a matrix of"
+ + " dimensions [" + rows + ", " + cols + "]");
}
// We currently support only dense rshape
Pointer inPtr = LibMatrixCUDA.getDensePointer(gCtx, mat, instName);
http://git-wip-us.apache.org/repos/asf/systemml/blob/2fc26b3d/src/main/java/org/apache/sysml/runtime/instructions/spark/ParameterizedBuiltinSPInstruction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/spark/ParameterizedBuiltinSPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/spark/ParameterizedBuiltinSPInstruction.java
index f9d7ef3..4a1c710 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/spark/ParameterizedBuiltinSPInstruction.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/spark/ParameterizedBuiltinSPInstruction.java
@@ -174,6 +174,54 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
}
}
+ private double getDoubleParam(ExecutionContext ec, String key) {
+ String val = params.get(key);
+ try {
+ if(val != null)
+ return Double.parseDouble( val );
+ else
+ throw new RuntimeException("Expected parameter " + key);
+ } catch(NumberFormatException e) {
+ return ec.getScalarInput(val, ValueType.DOUBLE, false).getDoubleValue();
+ }
+ }
+
+ private boolean getBooleanParam(ExecutionContext ec, String key) {
+ String val = params.get(key);
+ try {
+ if(val != null)
+ return Boolean.parseBoolean( val.toLowerCase() );
+ else
+ throw new RuntimeException("Expected parameter " + key);
+ } catch(NumberFormatException e) {
+ return ec.getScalarInput(val, ValueType.BOOLEAN, false).getBooleanValue();
+ }
+ }
+
+ private long getLongParam(ExecutionContext ec, String key) {
+ String val = params.get(key);
+ try {
+ if(val != null)
+ return Long.parseLong( val );
+ else
+ throw new RuntimeException("Expected parameter " + key);
+ } catch(NumberFormatException e) {
+ return ec.getScalarInput(val, ValueType.INT, false).getLongValue();
+ }
+ }
+
+ private long getLongParam(ExecutionContext ec, String key, long defaultValue) {
+ String val = params.get(key);
+ try {
+ if(val != null)
+ return Long.parseLong( val );
+ else
+ return defaultValue;
+ } catch(NumberFormatException e) {
+ return ec.getScalarInput(val, ValueType.INT, false).getLongValue();
+ }
+ }
+
@Override
@SuppressWarnings("unchecked")
@@ -191,8 +239,8 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
PartitionedBroadcast<MatrixBlock> groups = sec.getBroadcastForVariable(groupsVar);
MatrixCharacteristics mc1 = sec.getMatrixCharacteristics( targetVar );
MatrixCharacteristics mcOut = sec.getMatrixCharacteristics(output.getName());
- CPOperand ngrpOp = new CPOperand(params.get(Statement.GAGG_NUM_GROUPS));
- int ngroups = (int)sec.getScalarInput(ngrpOp.getName(), ngrpOp.getValueType(), ngrpOp.isLiteral()).getLongValue();
+
+ int ngroups = (int) getLongParam(ec, Statement.GAGG_NUM_GROUPS);
//single-block aggregation
if( ngroups <= mc1.getRowsPerBlock() && mc1.getCols() <= mc1.getColsPerBlock() ) {
@@ -222,7 +270,7 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
}
else if ( opcode.equalsIgnoreCase("groupedagg") )
{
- boolean broadcastGroups = Boolean.parseBoolean(params.get("broadcast"));
+ boolean broadcastGroups = getBooleanParam(ec, "broadcast");
//get input rdd handle
String groupsVar = params.get(Statement.GAGG_GROUPS);
@@ -253,8 +301,7 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
}
else //input vector or matrix
{
- String ngroupsStr = params.get(Statement.GAGG_NUM_GROUPS);
- long ngroups = (ngroupsStr != null) ? (long) Double.parseDouble(ngroupsStr) : -1;
+ long ngroups = getLongParam(ec, Statement.GAGG_NUM_GROUPS, -1);
//execute basic grouped aggregate (extract and preagg)
if( broadcastGroups ) {
@@ -312,8 +359,8 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
String rddOffVar = params.get("offset");
boolean rows = sec.getScalarInput(params.get("margin"), ValueType.STRING, true).getStringValue().equals("rows");
- boolean emptyReturn = Boolean.parseBoolean(params.get("empty.return").toLowerCase());
- long maxDim = sec.getScalarInput(params.get("maxdim"), ValueType.DOUBLE, false).getLongValue();
+ boolean emptyReturn = getBooleanParam(ec, "empty.return");
+ long maxDim = getLongParam(ec, "maxdim");
MatrixCharacteristics mcIn = sec.getMatrixCharacteristics(rddInVar);
if( maxDim > 0 ) //default case
@@ -369,8 +416,8 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
MatrixCharacteristics mcIn = sec.getMatrixCharacteristics(params.get("target"));
//execute replace operation
- double pattern = Double.parseDouble( params.get("pattern") );
- double replacement = Double.parseDouble( params.get("replacement") );
+ double pattern = getDoubleParam(ec, "pattern");
+ double replacement = getDoubleParam(ec, "replacement");
JavaPairRDD<MatrixIndexes,MatrixBlock> out =
in1.mapValues(new RDDReplaceFunction(pattern, replacement));
@@ -388,8 +435,8 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
JavaPairRDD<MatrixIndexes,MatrixBlock> in1 = sec.getBinaryBlockRDDHandleForVariable(params.get("target"));
MatrixCharacteristics mcIn = sec.getMatrixCharacteristics(params.get("target"));
boolean lower = opcode.equalsIgnoreCase("lowertri");
- boolean diag = Boolean.parseBoolean(params.get("diag"));
- boolean values = Boolean.parseBoolean(params.get("values"));
+ boolean diag = getBooleanParam(ec, "diag");
+ boolean values = getBooleanParam(ec, "values");
JavaPairRDD<MatrixIndexes,MatrixBlock> out = in1.mapPartitionsToPair(
new RDDExtractTriangularFunction(lower, diag, values), true);
@@ -408,11 +455,11 @@ public class ParameterizedBuiltinSPInstruction extends ComputationSPInstruction
//get input rdd handle
JavaPairRDD<MatrixIndexes,MatrixBlock> in = sec.getBinaryBlockRDDHandleForVariable( rddInVar );
MatrixCharacteristics mcIn = sec.getMatrixCharacteristics(rddInVar);
- double maxVal = Double.parseDouble( params.get("max") );
+ double maxVal = getDoubleParam(ec, "max");
long lmaxVal = UtilFunctions.toLong(maxVal);
boolean dirRows = params.get("dir").equals("rows");
- boolean cast = Boolean.parseBoolean(params.get("cast"));
- boolean ignore = Boolean.parseBoolean(params.get("ignore"));
+ boolean cast = getBooleanParam(ec, "cast");
+ boolean ignore = getBooleanParam(ec, "ignore");
long brlen = mcIn.getRowsPerBlock();
long bclen = mcIn.getColsPerBlock();