Repository: systemml Updated Branches: refs/heads/master 2c1fb20ec -> 59dfb50ea
[SYSTEMML-2491] Reduced instruction overhead (createvar,rmvar,literals) This patch slightly improves the performance for scripts with fine-grained updates and very small intermediates, where instruction overheads currently dominate. In detail this includes (1) the reuse of string builders for createvar filename construction, (2) avoidance of stream creation during rmvar shared reference analysis, and (3) the reuse of scalar objects for literals (avoid parsing and object allocation). Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/59dfb50e Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/59dfb50e Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/59dfb50e Branch: refs/heads/master Commit: 59dfb50eae9161f42af8562ec8d1885f89aece53 Parents: 2c1fb20 Author: Matthias Boehm <mboe...@gmail.com> Authored: Tue Sep 25 13:58:42 2018 +0200 Committer: Matthias Boehm <mboe...@gmail.com> Committed: Tue Sep 25 13:58:42 2018 +0200 ---------------------------------------------------------------------- .../runtime/controlprogram/LocalVariableMap.java | 7 +++++-- .../controlprogram/context/ExecutionContext.java | 3 ++- .../cp/BinaryMatrixScalarCPInstruction.java | 2 +- .../cp/BinaryScalarScalarCPInstruction.java | 4 ++-- .../sysml/runtime/instructions/cp/CPOperand.java | 12 ++++++++++++ .../instructions/cp/CentralMomentCPInstruction.java | 2 +- .../instructions/cp/FrameIndexingCPInstruction.java | 2 +- .../instructions/cp/IndexingCPInstruction.java | 8 ++++---- .../instructions/cp/ListIndexingCPInstruction.java | 4 ++-- .../instructions/cp/MatrixReshapeCPInstruction.java | 4 ++-- .../MultiReturnParameterizedBuiltinCPInstruction.java | 2 +- .../runtime/instructions/cp/ReorgCPInstruction.java | 6 +++--- .../instructions/cp/ScalarAppendCPInstruction.java | 4 ++-- .../cp/ScalarBuiltinNaryCPInstruction.java | 2 +- .../instructions/cp/UnaryScalarCPInstruction.java | 2 +- .../instructions/cp/VariableCPInstruction.java | 14 ++++++++------ 16 files changed, 48 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/controlprogram/LocalVariableMap.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/LocalVariableMap.java b/src/main/java/org/apache/sysml/runtime/controlprogram/LocalVariableMap.java index a4c2fef..6b241c1 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/LocalVariableMap.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/LocalVariableMap.java @@ -115,8 +115,11 @@ public class LocalVariableMap implements Cloneable } public boolean hasReferences( Data d ) { - return localMap.values().stream().anyMatch(e -> (e instanceof ListObject) ? - ((ListObject)e).getData().contains(d) : e == d); + //perf: avoid java streams here for reduced overhead in rmvar + for( Data o : localMap.values() ) + if( o instanceof ListObject ? ((ListObject)o).getData().contains(d) : o == d ) + return true; + return false; } public void setRegisteredOutputs(HashSet<String> outputs) { http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/controlprogram/context/ExecutionContext.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/context/ExecutionContext.java b/src/main/java/org/apache/sysml/runtime/controlprogram/context/ExecutionContext.java index ce53aea..f310d76 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/context/ExecutionContext.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/context/ExecutionContext.java @@ -440,7 +440,8 @@ public class ExecutionContext { } public ScalarObject getScalarInput(CPOperand input) { - return getScalarInput(input.getName(), input.getValueType(), input.isLiteral()); + return input.isLiteral() ? input.getLiteral() : + getScalarInput(input.getName(), input.getValueType(), false); } public ScalarObject getScalarInput(String name, ValueType vt, boolean isLiteral) { http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryMatrixScalarCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryMatrixScalarCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryMatrixScalarCPInstruction.java index a9ec74e..095dd8e 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryMatrixScalarCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryMatrixScalarCPInstruction.java @@ -38,7 +38,7 @@ public class BinaryMatrixScalarCPInstruction extends BinaryCPInstruction { CPOperand scalar = ( input1.getDataType() == DataType.MATRIX ) ? input2 : input1; MatrixBlock inBlock = ec.getMatrixInput(mat.getName(), getExtendedOpcode()); - ScalarObject constant = (ScalarObject) ec.getScalarInput(scalar.getName(), scalar.getValueType(), scalar.isLiteral()); + ScalarObject constant = (ScalarObject) ec.getScalarInput(scalar); ScalarOperator sc_op = (ScalarOperator) _optr; sc_op = sc_op.setConstant(constant.getDoubleValue()); http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryScalarScalarCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryScalarScalarCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryScalarScalarCPInstruction.java index 5f7f8a7..54f4b1e 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryScalarScalarCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/BinaryScalarScalarCPInstruction.java @@ -34,8 +34,8 @@ public class BinaryScalarScalarCPInstruction extends BinaryCPInstruction { @Override public void processInstruction(ExecutionContext ec) { - ScalarObject so1 = ec.getScalarInput(input1.getName(), input1.getValueType(), input1.isLiteral()); - ScalarObject so2 = ec.getScalarInput(input2.getName(), input2.getValueType(), input2.isLiteral() ); + ScalarObject so1 = ec.getScalarInput(input1); + ScalarObject so2 = ec.getScalarInput(input2); String opcode = getOpcode(); BinaryOperator dop = (BinaryOperator) _optr; http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/CPOperand.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/CPOperand.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/CPOperand.java index 22b79b0..b995e63 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/CPOperand.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/CPOperand.java @@ -23,6 +23,7 @@ import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.apache.sysml.parser.Expression.DataType; import org.apache.sysml.parser.Expression.ValueType; +import org.apache.sysml.runtime.DMLRuntimeException; import org.apache.sysml.runtime.instructions.Instruction; @@ -32,6 +33,7 @@ public class CPOperand private ValueType _valueType; private DataType _dataType; private boolean _isLiteral; + private ScalarObject _literal; public CPOperand() { this("", ValueType.UNKNOWN, DataType.UNKNOWN); @@ -77,8 +79,17 @@ public class CPOperand return _isLiteral; } + public ScalarObject getLiteral() { + if( !_isLiteral ) + throw new DMLRuntimeException("CPOperand is not a literal."); + if( _literal == null ) + _literal = ScalarObjectFactory.createScalarObject(_valueType, _name); + return _literal; + } + public void setName(String name) { _name = name; + _literal = null; } public void split(String str){ @@ -106,6 +117,7 @@ public class CPOperand _name = opr[0]; _valueType = ValueType.valueOf(opr[1]); } + _literal = null; } @Override http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/CentralMomentCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/CentralMomentCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/CentralMomentCPInstruction.java index 1fcb5bc..4f13f1f 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/CentralMomentCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/CentralMomentCPInstruction.java @@ -100,7 +100,7 @@ public class CentralMomentCPInstruction extends AggregateUnaryCPInstruction { MatrixBlock matBlock = ec.getMatrixInput(input1.getName(), getExtendedOpcode()); CPOperand scalarInput = (input3==null ? input2 : input3); - ScalarObject order = ec.getScalarInput(scalarInput.getName(), scalarInput.getValueType(), scalarInput.isLiteral()); + ScalarObject order = ec.getScalarInput(scalarInput); CMOperator cm_op = ((CMOperator)_optr); if ( cm_op.getAggOpType() == AggregateOperationTypes.INVALID ) http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/FrameIndexingCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/FrameIndexingCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/FrameIndexingCPInstruction.java index bda2951..52e05b6 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/FrameIndexingCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/FrameIndexingCPInstruction.java @@ -69,7 +69,7 @@ public final class FrameIndexingCPInstruction extends IndexingCPInstruction { else { //FRAME<-SCALAR if(!ixrange.isScalar()) throw new DMLRuntimeException("Invalid index range of scalar leftindexing: "+ixrange.toString()+"." ); - ScalarObject scalar = ec.getScalarInput(input2.getName(), input2.getValueType(), input2.isLiteral()); + ScalarObject scalar = ec.getScalarInput(input2); out = new FrameBlock(lin); out.set((int)ixrange.rowStart, (int)ixrange.colStart, scalar.getStringValue()); } http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java index fb4732d..5150847 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java @@ -50,10 +50,10 @@ public abstract class IndexingCPInstruction extends UnaryCPInstruction { protected IndexRange getIndexRange(ExecutionContext ec) { return new IndexRange( //rl, ru, cl, ru - (int)(ec.getScalarInput(rowLower.getName(), rowLower.getValueType(), rowLower.isLiteral()).getLongValue()-1), - (int)(ec.getScalarInput(rowUpper.getName(), rowUpper.getValueType(), rowUpper.isLiteral()).getLongValue()-1), - (int)(ec.getScalarInput(colLower.getName(), colLower.getValueType(), colLower.isLiteral()).getLongValue()-1), - (int)(ec.getScalarInput(colUpper.getName(), colUpper.getValueType(), colUpper.isLiteral()).getLongValue()-1)); + (int)(ec.getScalarInput(rowLower).getLongValue()-1), + (int)(ec.getScalarInput(rowUpper).getLongValue()-1), + (int)(ec.getScalarInput(colLower).getLongValue()-1), + (int)(ec.getScalarInput(colUpper).getLongValue()-1)); } public static IndexingCPInstruction parseInstruction ( String str ) { http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/ListIndexingCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/ListIndexingCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/ListIndexingCPInstruction.java index d22d9a8..9e53700 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/ListIndexingCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/ListIndexingCPInstruction.java @@ -41,8 +41,8 @@ public final class ListIndexingCPInstruction extends IndexingCPInstruction { @Override public void processInstruction(ExecutionContext ec) { String opcode = getOpcode(); - ScalarObject rl = ec.getScalarInput(rowLower.getName(), rowLower.getValueType(), rowLower.isLiteral()); - ScalarObject ru = ec.getScalarInput(rowUpper.getName(), rowUpper.getValueType(), rowUpper.isLiteral()); + ScalarObject rl = ec.getScalarInput(rowLower); + ScalarObject ru = ec.getScalarInput(rowUpper); //right indexing if( opcode.equalsIgnoreCase(RightIndex.OPCODE) ) { http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java index cd8d5dc..1f7b053 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java @@ -60,8 +60,8 @@ public class MatrixReshapeCPInstruction extends UnaryCPInstruction { public void processInstruction(ExecutionContext ec) { //get inputs MatrixBlock in = ec.getMatrixInput(input1.getName(), getExtendedOpcode()); - int rows = (int)ec.getScalarInput(_opRows.getName(), _opRows.getValueType(), _opRows.isLiteral()).getLongValue(); //save cast - int cols = (int)ec.getScalarInput(_opCols.getName(), _opCols.getValueType(), _opCols.isLiteral()).getLongValue(); //save cast + int rows = (int)ec.getScalarInput(_opRows).getLongValue(); //save cast + int cols = (int)ec.getScalarInput(_opCols).getLongValue(); //save cast BooleanObject byRow = (BooleanObject) ec.getScalarInput(_opByRow.getName(), ValueType.BOOLEAN, _opByRow.isLiteral()); //execute operations http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java index 8afa9d7..9d606b2 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java @@ -68,7 +68,7 @@ public class MultiReturnParameterizedBuiltinCPInstruction extends ComputationCPI public void processInstruction(ExecutionContext ec) { //obtain and pin input frame FrameBlock fin = ec.getFrameInput(input1.getName()); - String spec = ec.getScalarInput(input2.getName(), input2.getValueType(), input2.isLiteral()).getStringValue(); + String spec = ec.getScalarInput(input2).getStringValue(); String[] colnames = fin.getColumnNames(); //execute block transform encode http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java index 89d99b7..5eeda8a 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java @@ -130,9 +130,9 @@ public class ReorgCPInstruction extends UnaryCPInstruction { if( r_op.fn instanceof SortIndex ) { //additional attributes for sort int[] cols = _col.getDataType().isMatrix() ? DataConverter.convertToIntVector(ec.getMatrixInput(_col.getName())) : - new int[]{(int)ec.getScalarInput(_col.getName(), _col.getValueType(), _col.isLiteral()).getLongValue()}; - boolean desc = ec.getScalarInput(_desc.getName(), _desc.getValueType(), _desc.isLiteral()).getBooleanValue(); - boolean ixret = ec.getScalarInput(_ixret.getName(), _ixret.getValueType(), _ixret.isLiteral()).getBooleanValue(); + new int[]{(int)ec.getScalarInput(_col).getLongValue()}; + boolean desc = ec.getScalarInput(_desc).getBooleanValue(); + boolean ixret = ec.getScalarInput(_ixret).getBooleanValue(); r_op = r_op.setFn(new SortIndex(cols, desc, ixret)); } http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarAppendCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarAppendCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarAppendCPInstruction.java index 85e290b..f2728f7 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarAppendCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarAppendCPInstruction.java @@ -32,8 +32,8 @@ public final class ScalarAppendCPInstruction extends AppendCPInstruction { @Override public void processInstruction(ExecutionContext ec) { //get input strings (vars or literals) - ScalarObject so1 = ec.getScalarInput( input1.getName(), input1.getValueType(), input1.isLiteral() ); - ScalarObject so2 = ec.getScalarInput( input2.getName(), input2.getValueType(), input2.isLiteral() ); + ScalarObject so1 = ec.getScalarInput(input1); + ScalarObject so2 = ec.getScalarInput(input2); //pre-checks String val1 = so1.getStringValue(); String val2 = so2.getStringValue(); http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java index 75e22c2..172351a 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java @@ -48,7 +48,7 @@ public class ScalarBuiltinNaryCPInstruction extends BuiltinNaryCPInstruction { if( "printf".equals(getOpcode()) ) { List<ScalarObject> scalarObjects = new ArrayList<>(); for (CPOperand input : inputs) { - ScalarObject so = ec.getScalarInput(input.getName(), input.getValueType(), input.isLiteral()); + ScalarObject so = ec.getScalarInput(input); scalarObjects.add(so); } http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryScalarCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryScalarCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryScalarCPInstruction.java index 2773084..06291ea 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryScalarCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryScalarCPInstruction.java @@ -39,7 +39,7 @@ public class UnaryScalarCPInstruction extends UnaryMatrixCPInstruction { ScalarObject so = null; //get the scalar input - so = ec.getScalarInput( input1.getName(), input1.getValueType(), input1.isLiteral() ); + so = ec.getScalarInput(input1); //core execution if ( opcode.equalsIgnoreCase("print") ) { http://git-wip-us.apache.org/repos/asf/systemml/blob/59dfb50e/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java index 8e78442..007e2f0 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java @@ -101,6 +101,9 @@ public class VariableCPInstruction extends CPInstruction { private static final IDSequence _uniqueVarID = new IDSequence(true); private static final int CREATEVAR_FILE_NAME_VAR_POS=3; + private static ThreadLocal<StringBuilder> _varNameBuilders = new ThreadLocal<StringBuilder>() { + @Override protected StringBuilder initialValue() { return new StringBuilder(64); } + }; private final VariableOperationCode opcode; private final List<CPOperand> inputs; @@ -475,8 +478,9 @@ public class VariableCPInstruction extends CPInstruction { String fname = getInput2().getName(); // check if unique filename needs to be generated if( Boolean.parseBoolean(getInput3().getName()) ) { - fname = new StringBuilder(fname.length()+16).append(fname) - .append('_').append(_uniqueVarID.getNextID()).toString(); + StringBuilder sb = _varNameBuilders.get(); + fname = sb.append(fname).append('_').append(_uniqueVarID.getNextID()).toString(); + sb.setLength(0); //reset for next use } MatrixObject mobj = new MatrixObject(getInput1().getValueType(), fname ); //clone meta data because it is updated on copy-on-write, otherwise there @@ -591,8 +595,7 @@ public class VariableCPInstruction extends CPInstruction { ec.setMatrixOutput(output.getName(), out, getExtendedOpcode()); } else if( getInput1().getDataType().isScalar() ) { - ScalarObject scalarInput = ec.getScalarInput( - getInput1().getName(), getInput1().getValueType(), getInput1().isLiteral()); + ScalarObject scalarInput = ec.getScalarInput(getInput1()); MatrixBlock out = new MatrixBlock(scalarInput.getDoubleValue()); ec.setMatrixOutput(output.getName(), out, getExtendedOpcode()); } @@ -924,8 +927,7 @@ public class VariableCPInstruction extends CPInstruction { */ private void writeScalarToHDFS(ExecutionContext ec, String fname) { try { - ScalarObject scalar = ec.getScalarInput(getInput1().getName(), - getInput1().getValueType(), getInput1().isLiteral()); + ScalarObject scalar = ec.getScalarInput(getInput1()); MapReduceTool.writeObjectToHDFS(scalar.getValue(), fname); MapReduceTool.writeScalarMetaDataFile(fname +".mtd", getInput1().getValueType());