This is an automated email from the ASF dual-hosted git repository.
mboehm7 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new 65d702afe0 [MINOR] Cleanup unnecessary indirections for matrix block
operations
65d702afe0 is described below
commit 65d702afe0d38b9292a63c5baa1c305f20d1a929
Author: Matthias Boehm <[email protected]>
AuthorDate: Fri May 3 19:35:41 2024 +0200
[MINOR] Cleanup unnecessary indirections for matrix block operations
---
.../instructions/spark/CtableSPInstruction.java | 11 +-
.../spark/MatrixAppendMSPInstruction.java | 5 +-
.../spark/UaggOuterChainSPInstruction.java | 4 +-
.../matrix/data/OperationsOnMatrixValues.java | 156 +--------------------
4 files changed, 9 insertions(+), 167 deletions(-)
diff --git
a/src/main/java/org/apache/sysds/runtime/instructions/spark/CtableSPInstruction.java
b/src/main/java/org/apache/sysds/runtime/instructions/spark/CtableSPInstruction.java
index f79b86ac61..bfe80c80d7 100644
---
a/src/main/java/org/apache/sysds/runtime/instructions/spark/CtableSPInstruction.java
+++
b/src/main/java/org/apache/sysds/runtime/instructions/spark/CtableSPInstruction.java
@@ -38,7 +38,6 @@ import
org.apache.sysds.runtime.instructions.spark.utils.SparkUtils;
import org.apache.sysds.runtime.matrix.data.CTableMap;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixIndexes;
-import org.apache.sysds.runtime.matrix.data.OperationsOnMatrixValues;
import org.apache.sysds.runtime.meta.DataCharacteristics;
import org.apache.sysds.runtime.util.LongLongDoubleHashMap.ADoubleEntry;
import scala.Tuple2;
@@ -245,13 +244,11 @@ public class CtableSPInstruction extends
ComputationSPInstruction {
//local aggregation of entire partition
while( arg0.hasNext() ) {
Tuple2<MatrixIndexes,MatrixBlock[]> tmp =
arg0.next();
- MatrixIndexes ix = tmp._1();
MatrixBlock[] mb = tmp._2();
switch( _ctableOp ) {
case CTABLE_TRANSFORM: {
-
OperationsOnMatrixValues.performCtable(ix, mb[0], ix,
- mb[1], ix, mb[2], map,
block, null);
+ mb[0].ctableOperations(null,
mb[1], mb[2], map, block);
break;
}
case CTABLE_EXPAND_SCALAR_WEIGHT:
@@ -261,14 +258,12 @@ public class CtableSPInstruction extends
ComputationSPInstruction {
break;
}
case CTABLE_TRANSFORM_HISTOGRAM: {
-
OperationsOnMatrixValues.performCtable(ix, mb[0],
- _scalar_input2,
_scalar_input3, map, block, null);
+ mb[0].ctableOperations(null,
_scalar_input2, _scalar_input3, map, block);
break;
}
case
CTABLE_TRANSFORM_WEIGHTED_HISTOGRAM: {
// 2nd and 3rd inputs are
scalars
-
OperationsOnMatrixValues.performCtable(ix, mb[0],
- _scalar_input2, ix,
mb[1], map, block, null);
+ mb[0].ctableOperations(null,
_scalar_input2, mb[1], map, block);
break;
}
default:
diff --git
a/src/main/java/org/apache/sysds/runtime/instructions/spark/MatrixAppendMSPInstruction.java
b/src/main/java/org/apache/sysds/runtime/instructions/spark/MatrixAppendMSPInstruction.java
index bdc98f28fb..68de8c3376 100644
---
a/src/main/java/org/apache/sysds/runtime/instructions/spark/MatrixAppendMSPInstruction.java
+++
b/src/main/java/org/apache/sysds/runtime/instructions/spark/MatrixAppendMSPInstruction.java
@@ -30,7 +30,6 @@ import
org.apache.sysds.runtime.instructions.spark.data.PartitionedBroadcast;
import org.apache.sysds.runtime.instructions.spark.utils.SparkUtils;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixIndexes;
-import org.apache.sysds.runtime.matrix.data.OperationsOnMatrixValues;
import org.apache.sysds.runtime.matrix.operators.Operator;
import org.apache.sysds.runtime.meta.DataCharacteristics;
import scala.Tuple2;
@@ -165,8 +164,8 @@ public class MatrixAppendMSPInstruction extends
AppendMSPInstruction {
outlist.add(second);
}
}
-
-
OperationsOnMatrixValues.performAppend(in1.getValue(), value_in2, outlist,
_blen, _cbind, true, 0);
+
+ in1.getValue().append(value_in2, outlist,
_blen, _cbind, true, 0);
ret.addAll(SparkUtils.fromIndexedMatrixBlock(outlist));
}
diff --git
a/src/main/java/org/apache/sysds/runtime/instructions/spark/UaggOuterChainSPInstruction.java
b/src/main/java/org/apache/sysds/runtime/instructions/spark/UaggOuterChainSPInstruction.java
index 9d8f2aa022..766d80158b 100644
---
a/src/main/java/org/apache/sysds/runtime/instructions/spark/UaggOuterChainSPInstruction.java
+++
b/src/main/java/org/apache/sysds/runtime/instructions/spark/UaggOuterChainSPInstruction.java
@@ -331,8 +331,8 @@ public class UaggOuterChainSPInstruction extends
BinarySPInstruction {
MatrixValue in2Val = _pbc.getBlock(1,
bidx);
//outer block operation
-
OperationsOnMatrixValues.performBinaryIgnoreIndexes(in1Val, in2Val, _tmpVal1,
_bOp);
-
+ in1Val.binaryOperations(_bOp, in2Val,
_tmpVal1);
+
//unary aggregate operation
OperationsOnMatrixValues.performAggregateUnary( in1Ix, _tmpVal1, outIx,
_tmpVal2, _uaggOp, _blen);
diff --git
a/src/main/java/org/apache/sysds/runtime/matrix/data/OperationsOnMatrixValues.java
b/src/main/java/org/apache/sysds/runtime/matrix/data/OperationsOnMatrixValues.java
index 0134f9fec0..66f7e6317d 100644
---
a/src/main/java/org/apache/sysds/runtime/matrix/data/OperationsOnMatrixValues.java
+++
b/src/main/java/org/apache/sysds/runtime/matrix/data/OperationsOnMatrixValues.java
@@ -31,175 +31,23 @@ import
org.apache.sysds.runtime.compress.CompressedMatrixBlock;
import org.apache.sysds.runtime.controlprogram.caching.CacheBlock;
import org.apache.sysds.runtime.controlprogram.caching.MatrixObject.UpdateType;
import org.apache.sysds.runtime.frame.data.FrameBlock;
-import org.apache.sysds.runtime.functionobjects.Builtin;
import org.apache.sysds.runtime.instructions.spark.data.IndexedMatrixValue;
import org.apache.sysds.runtime.instructions.spark.utils.SparkUtils;
import org.apache.sysds.runtime.matrix.operators.AggregateBinaryOperator;
import org.apache.sysds.runtime.matrix.operators.AggregateOperator;
import org.apache.sysds.runtime.matrix.operators.AggregateUnaryOperator;
-import org.apache.sysds.runtime.matrix.operators.BinaryOperator;
import org.apache.sysds.runtime.matrix.operators.Operator;
-import org.apache.sysds.runtime.matrix.operators.ReorgOperator;
import org.apache.sysds.runtime.util.IndexRange;
import org.apache.sysds.runtime.util.UtilFunctions;
public class OperationsOnMatrixValues
{
- public static void performReorg(MatrixIndexes indexesIn, MatrixValue
valueIn, MatrixIndexes indexesOut,
- MatrixValue valueOut, ReorgOperator op, int startRow,
int startColumn, int length) {
- //operate on the value indexes first
- op.fn.execute(indexesIn, indexesOut);
-
- //operation on the cells inside the value
- valueIn.reorgOperations(op, valueOut, startRow, startColumn,
length);
- }
-
- public static void performAppend(MatrixValue valueIn1, MatrixValue
valueIn2,
- ArrayList<IndexedMatrixValue> outlist, int blen,
boolean cbind, boolean m2IsLast, int nextNCol) {
- valueIn1.append(valueIn2, outlist, blen, cbind, m2IsLast,
nextNCol);
- }
-
- public static void performZeroOut(MatrixIndexes indexesIn, MatrixValue
valueIn,
- MatrixIndexes indexesOut, MatrixValue valueOut,
IndexRange range, boolean complementary) {
- valueIn.zeroOutOperations(valueOut, range, complementary);
- indexesOut.setIndexes(indexesIn);
- }
-
- // ------------- Ternary Operations -------------
- public static void performCtable(MatrixIndexes indexesIn1, MatrixValue
valueIn1, MatrixIndexes indexesIn2, MatrixValue valueIn2,
- MatrixIndexes indexesIn3, MatrixValue valueIn3,
CTableMap resultMap, MatrixBlock resultBlock, Operator op ) {
- //operation on the cells inside the value
- valueIn1.ctableOperations(op, valueIn2, valueIn3, resultMap,
resultBlock);
- }
-
- public static void performCtable(MatrixIndexes indexesIn1, MatrixValue
valueIn1, MatrixIndexes indexesIn2, MatrixValue valueIn2,
- double scalarIn3, CTableMap resultMap, MatrixBlock
resultBlock, Operator op) {
- //operation on the cells inside the value
- valueIn1.ctableOperations(op, valueIn2, scalarIn3, false,
resultMap, resultBlock);
- }
-
- public static void performCtable(MatrixIndexes indexesIn1, MatrixValue
valueIn1, double scalarIn2,
- double scalarIn3, CTableMap resultMap, MatrixBlock
resultBlock, Operator op ) {
- //operation on the cells inside the value
- valueIn1.ctableOperations(op, scalarIn2, scalarIn3, resultMap,
resultBlock);
- }
-
- public static void performCtable(MatrixIndexes indexesIn1, MatrixValue
valueIn1, double scalarIn2, boolean left,
- int blen, CTableMap resultMap, MatrixBlock resultBlock,
Operator op ) {
- //operation on the cells inside the value
- valueIn1.ctableOperations(op, indexesIn1, scalarIn2, left,
blen, resultMap, resultBlock);
- }
-
- public static void performCtable(MatrixIndexes indexesIn1, MatrixValue
valueIn1, double scalarIn2,
- MatrixIndexes indexesIn3, MatrixValue valueIn3,
CTableMap resultMap, MatrixBlock resultBlock, Operator op ) {
- //operation on the cells inside the value
- valueIn1.ctableOperations(op, scalarIn2, valueIn3, resultMap,
resultBlock);
- }
- // -----------------------------------------------------
-
- //binary operations are those that the indexes of both cells have to be
matched
- public static void performBinaryIgnoreIndexes(MatrixValue value1,
MatrixValue value2,
- MatrixValue valueOut, BinaryOperator op) {
- value1.binaryOperations(op, value2, valueOut);
- }
-
- public static void startAggregation(MatrixValue valueOut, MatrixValue
correction, AggregateOperator op,
- int rlen, int clen, boolean sparseHint, boolean
embeddedCorrection) {
- int outRow=0, outCol=0, corRow=0, corCol=0;
- if(!embeddedCorrection || op.existsCorrection())
- {
- if( !embeddedCorrection ) {
- switch(op.correction)
- {
- case NONE:
- outRow=rlen;
- outCol=clen;
- corRow=rlen;
- corCol=clen;
- break;
- case LASTROW:
- outRow=rlen-1;
- outCol=clen;
- corRow=1;
- corCol=clen;
- break;
- case LASTCOLUMN:
- if(op.increOp.fn instanceof Builtin
- && (
((Builtin)(op.increOp.fn)).bFunc == Builtin.BuiltinCode.MAXINDEX
- ||
((Builtin)(op.increOp.fn)).bFunc == Builtin.BuiltinCode.MININDEX) )
- {
- outRow = rlen;
- outCol = 1;
- corRow = rlen;
- corCol = 1;
- }
- else{
- outRow=rlen;
- outCol=clen-1;
- corRow=rlen;
- corCol=1;
- }
- break;
- case LASTTWOROWS:
- outRow=rlen-2;
- outCol=clen;
- corRow=2;
- corCol=clen;
- break;
- case LASTTWOCOLUMNS:
- outRow=rlen;
- outCol=clen-2;
- corRow=rlen;
- corCol=2;
- break;
- case LASTFOURROWS:
- outRow=rlen-4;
- outCol=clen;
- corRow=4;
- corCol=clen;
- break;
- case LASTFOURCOLUMNS:
- outRow=rlen;
- outCol=clen-4;
- corRow=rlen;
- corCol=4;
- break;
- default:
- throw new
DMLRuntimeException("unrecognized correctionLocation: "+op.correction);
- }
- }else
- {
- outRow=rlen;
- outCol=clen;
- corRow=rlen;
- corCol=clen;
- }
-
- //set initial values according to operator
- if(op.initialValue==0) {
- valueOut.reset(Math.max(outRow,0),
Math.max(outCol,0), sparseHint);
- correction.reset(Math.max(corRow,0),
Math.max(corCol,0), false);
- }
- else {
- valueOut.reset(Math.max(outRow, 0),
Math.max(outCol,0), op.initialValue);
- correction.reset(Math.max(corRow,0),
Math.max(corCol,0), op.initialValue);
- }
- }
- else {
- if(op.initialValue==0)
- valueOut.reset(rlen, clen, sparseHint);
- else
- valueOut.reset(rlen, clen, op.initialValue);
- }
- }
-
public static void incrementalAggregation(MatrixValue valueAgg,
MatrixValue correction, MatrixValue valueAdd,
AggregateOperator op, boolean embeddedCorrection) {
incrementalAggregation(valueAgg, correction, valueAdd, op,
embeddedCorrection, true);
}
-
public static void incrementalAggregation(MatrixValue valueAgg,
MatrixValue correction, MatrixValue valueAdd,
AggregateOperator op, boolean embeddedCorrection,
boolean deep)
{
@@ -264,7 +112,7 @@ public class OperationsOnMatrixValues
* @return A List containing pairs of MatrixIndices and CacheBlocks
either containing MatrixBlock or FrameBlocks
*/
@SuppressWarnings("rawtypes")
- public static List performSlice(IndexRange ixrange, int blen, int iix,
int jix, CacheBlock in) {
+ public static List performSlice(IndexRange ixrange, int blen, int iix,
int jix, CacheBlock<?> in) {
if( in instanceof MatrixBlock )
return performSlice(ixrange, blen, iix, jix,
(MatrixBlock)in);
else if( in instanceof FrameBlock )
@@ -275,7 +123,7 @@ public class OperationsOnMatrixValues
@SuppressWarnings("rawtypes")
public static List performSlice(IndexRange ixrange, int blen, int iix,
int jix, MatrixBlock in) {
IndexedMatrixValue imv = new IndexedMatrixValue(new
MatrixIndexes(iix, jix), in);
- ArrayList<IndexedMatrixValue> outlist = performSlice(imv,
ixrange, blen);
+ List<IndexedMatrixValue> outlist = performSlice(imv, ixrange,
blen);
return SparkUtils.fromIndexedMatrixBlockToPair(outlist);
}