http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java index 27bb340..e515947 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java @@ -265,9 +265,9 @@ public class LibMatrixBincell return; // skip entire empty block ret.allocateDenseBlock(); - double[] a = m1.denseBlock; - double[] b = m2.denseBlock; - double[] c = ret.denseBlock; + double[] a = (m1.denseBlock != null) ? m1.getDenseBlockValues() : null; + double[] b = (m2.denseBlock != null) ? m2.getDenseBlockValues() : null; + double[] c = ret.getDenseBlockValues(); int nnz = 0; if( atype == BinaryAccessType.MATRIX_COL_VECTOR ) @@ -631,7 +631,7 @@ public class LibMatrixBincell ret.allocateDenseBlock(); final int m = ret.rlen; final int n = ret.clen; - double[] c = ret.denseBlock; + double[] c = ret.getDenseBlockValues(); //1) process left input: assignment @@ -657,9 +657,9 @@ public class LibMatrixBincell else //DENSE left { if( !m1.isEmptyBlock(false) ) - System.arraycopy(m1.denseBlock, 0, c, 0, m*n); + System.arraycopy(m1.getDenseBlockValues(), 0, c, 0, m*n); else - Arrays.fill(ret.denseBlock, 0, m*n, 0); + ret.denseBlock.set(0); } //2) process right input: op.fn (+,-,*), * only if dense @@ -687,14 +687,14 @@ public class LibMatrixBincell else //DENSE right { if( !m2.isEmptyBlock(false) ) { - double[] a = m2.denseBlock; + double[] a = m2.getDenseBlockValues(); for( int i=0; i<m*n; i++ ) { c[i] = op.fn.execute(c[i], a[i]); lnnz += (c[i]!=0) ? 1 : 0; } } else if(op.fn instanceof Multiply) - Arrays.fill(ret.denseBlock, 0, m*n, 0); + ret.denseBlock.set(0); } //3) recompute nnz @@ -707,9 +707,9 @@ public class LibMatrixBincell ret.allocateDenseBlock(); final int m = ret.rlen; final int n = ret.clen; - double[] a = m1.denseBlock; - double[] b = m2.denseBlock; - double[] c = ret.denseBlock; + double[] a = m1.getDenseBlockValues(); + double[] b = m2.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); ValueFunction fn = op.fn; //compute dense-dense binary, maintain nnz on-the-fly @@ -782,7 +782,7 @@ public class LibMatrixBincell double b[] = DataConverter.convertToDoubleVector(mbRight); if(!mbOut.isAllocated()) mbOut.allocateDenseBlock(); - double c[] = mbOut.getDenseBlock(); + double c[] = mbOut.getDenseBlockValues(); //pre-materialize various types used in inner loop boolean scanType1 = (bOp.fn instanceof LessThan || bOp.fn instanceof Equals @@ -875,9 +875,9 @@ public class LibMatrixBincell && !m2.sparse && !m2.isEmptyBlock(false) ) { ret.allocateDenseBlock(); - double[] a = m1.denseBlock; - double[] b = m2.denseBlock; - double[] c = ret.denseBlock; + double[] a = m1.getDenseBlockValues(); + double[] b = m2.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); int lnnz = 0; for( int i=0; i<rlen; i++ ) { c[i] = op.fn.execute( a[i], b[i] ); @@ -991,7 +991,7 @@ public class LibMatrixBincell ret.allocateDenseBlock(); SparseBlock a = m1.sparseBlock; - double[] c = ret.denseBlock; + double[] c = ret.getDenseBlockValues(); int m = m1.rlen; int n = m1.clen; @@ -1027,8 +1027,8 @@ public class LibMatrixBincell //allocate dense block (if necessary), incl clear nnz ret.allocateDenseBlock(true); - double[] a = m1.denseBlock; - double[] c = ret.denseBlock; + double[] a = m1.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); //compute scalar operation, incl nnz maintenance int limit = m1.rlen*m1.clen;
http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java index 0e4a468..ca38db3 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java @@ -403,7 +403,7 @@ public class LibMatrixDNN { throw new DMLRuntimeException("Incorrect inputs for bias_add: input[" + N + " X " + input.getNumColumns() + "] and bias[" + K + " X " + bias.getNumColumns() + "]"); } - double [] outputArray = outputBlock.getDenseBlock(); + double [] outputArray = outputBlock.getDenseBlockValues(); if(input.isEmptyBlock()) { for(int n = 0; n < N; n++) ConvolutionUtils.fillBias(bias, outputArray, n, n+1, N, K, PQ); @@ -414,7 +414,7 @@ public class LibMatrixDNN { int index = 0; if(bias.isInSparseFormat()) bias.sparseToDense(); // Since bias is extremely small array - double [] biasArr = bias.getDenseBlock(); + double [] biasArr = bias.getDenseBlockValues(); for(int n = 0; n < N; n++) { for(int k = 0; k < K; k++) { double biasVal = biasArr[k]; @@ -462,9 +462,9 @@ public class LibMatrixDNN { outputBlock.copy(input); if(bias.isInSparseFormat()) bias.sparseToDense(); // Since bias is extremely small array - double [] biasArr = bias.getDenseBlock(); + double [] biasArr = bias.getDenseBlockValues(); if(!input.isInSparseFormat()) { - double [] outputArray = outputBlock.getDenseBlock(); + double [] outputArray = outputBlock.getDenseBlockValues(); int index = 0; for(int n = 0; n < N; n++) { for(int k = 0; k < K; k++) { http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java index 55f263f..03dfa93 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java @@ -46,7 +46,7 @@ public class LibMatrixDNNConv2dBackwardDataHelper { public Long call() throws Exception { int CHW = _params.C*_params.H*_params.W; double [] ret = new double[CHW]; - double [] filterArr = _params.input1.getDenseBlock(); + double [] filterArr = _params.input1.getDenseBlockValues(); double [] dout_n = new double[_params.P*_params.Q*_params.K]; for(int n = _rl; n < _ru; n++) { LibMatrixDNNHelper.getRowInDenseFormat(_params.input2, n, dout_n); @@ -55,7 +55,7 @@ public class LibMatrixDNNConv2dBackwardDataHelper { NativeHelper.conv2dBackwardDataDense(filterArr, dout_n, ret, 1, _params.C, _params.H, _params.W, _params.K, _params.R, _params.S, _params.stride_h, _params.stride_w, _params.pad_h, _params.pad_w, _params.P, _params.Q, 1); - System.arraycopy(ret, 0, _params.output.getDenseBlock(), n*CHW, CHW); + System.arraycopy(ret, 0, _params.output.getDenseBlockValues(), n*CHW, CHW); } //multi-threaded nnz maintenance of current working set return _params.output.recomputeNonZeros(_rl, _ru-1); http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java index 4a94838..f30916c 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java @@ -48,7 +48,7 @@ public class LibMatrixDNNConv2dBackwardFilterHelper { dout_n.allocateBlock(); LibMatrixDNNRotate180Helper.Rotate180Worker rotate180Worker = LibMatrixDNNRotate180Helper.Rotate180Worker.getWorker( _params.input2, dout_n, _params, true, false); - double [] ldout_n = dout_n.getDenseBlock(); + double [] ldout_n = dout_n.getDenseBlockValues(); double [] partRet = new double[CRS*_params.K]; //CRS x K for(int n = _rl; n < _ru; n++) { if( !_params.input1.getSparseBlock().isEmpty(n) ) { @@ -108,7 +108,7 @@ public class LibMatrixDNNConv2dBackwardFilterHelper { long t3 = DMLScript.FINEGRAINED_STATISTICS ? System.nanoTime() : 0; if( !outMM.isEmptyBlock() ) //accumulate row results - LibMatrixMult.vectAdd(outMM.getDenseBlock(), partRet, 0, 0, K*CRS); + LibMatrixMult.vectAdd(outMM.getDenseBlockValues(), partRet, 0, 0, K*CRS); if(DMLScript.FINEGRAINED_STATISTICS) { time1 += t2 - t1; @@ -161,7 +161,7 @@ public class LibMatrixDNNConv2dBackwardFilterHelper { long t3 = DMLScript.FINEGRAINED_STATISTICS ? System.nanoTime() : 0; if( !outMM.isEmptyBlock() ) //accumulate row results - LibMatrixMult.vectAdd(outMM.getDenseBlock(), partRet, 0, 0, K*CRS); + LibMatrixMult.vectAdd(outMM.getDenseBlockValues(), partRet, 0, 0, K*CRS); if(DMLScript.FINEGRAINED_STATISTICS) { time1 += t2 - t1; @@ -180,14 +180,14 @@ public class LibMatrixDNNConv2dBackwardFilterHelper { private static void inplaceAdd(double[] a, ConvolutionParameters params) { synchronized (params.output.denseBlock) { - LibMatrixMult.vectAdd(a, params.output.denseBlock, 0, 0, a.length); + LibMatrixMult.vectAdd(a, params.output.getDenseBlockValues(), 0, 0, a.length); } } private static void inplaceTransAdd(double[] a, ConvolutionParameters params) { synchronized (params.output.denseBlock) { // Perform transposed addition: output of size [K, CRS] += input of size [CRS,K] - double [] c = params.output.denseBlock; + double [] c = params.output.getDenseBlockValues(); final int CRS = params.C*params.R*params.S, K = params.K; final int blocksizeIJ = 128; //L2 cache http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java index b390906..3699512 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java @@ -71,11 +71,12 @@ public class LibMatrixDNNConv2dHelper { } // Add the matrix matMultOutBlock of shape [K X PQ] to params.output.denseBlock + destPos - add(matMultOutBlock, _params.output.getDenseBlock(), n*K*PQ, K, PQ); + add(matMultOutBlock, _params.output.getDenseBlockValues(), n*K*PQ, K, PQ); } // Add bias to current row if necessary, always dense if(_params.bias != null) - LibMatrixDNNHelper.addBias(n, _params.output.getDenseBlock(), _params.bias.getDenseBlock(), K, PQ); + LibMatrixDNNHelper.addBias(n, _params.output.getDenseBlockValues(), + _params.bias.getDenseBlockValues(), K, PQ); } if(DMLScript.FINEGRAINED_STATISTICS) { LibMatrixDNN.loopedConvIm2ColTime.addAndGet(time1); @@ -109,7 +110,7 @@ public class LibMatrixDNNConv2dHelper { } } else { - LibMatrixMult.vectAdd(src.denseBlock, dest, 0, destPos, K*PQ); + LibMatrixMult.vectAdd(src.getDenseBlockValues(), dest, 0, destPos, K*PQ); } } } @@ -152,11 +153,12 @@ public class LibMatrixDNNConv2dHelper { } // Copy the matrix matMultOutBlock of shape [K X PQ] to params.output.denseBlock + destPos - partialCopy1(outMM, _params.output.getDenseBlock(), n*K*PQ, K, PQ); + partialCopy1(outMM, _params.output.getDenseBlockValues(), n*K*PQ, K, PQ); // Add bias to current row if necessary, always dense if(_params.bias != null) - LibMatrixDNNHelper.addBias(n, _params.output.getDenseBlock(), _params.bias.getDenseBlock(), K, PQ); + LibMatrixDNNHelper.addBias(n, _params.output.getDenseBlockValues(), + _params.bias.getDenseBlockValues(), K, PQ); } if(DMLScript.FINEGRAINED_STATISTICS) { @@ -188,7 +190,7 @@ public class LibMatrixDNNConv2dHelper { } } else - System.arraycopy(src.denseBlock, 0, dest, destPos, K * PQ); + System.arraycopy(src.getDenseBlockValues(), 0, dest, destPos, K * PQ); } } @@ -226,7 +228,8 @@ public class LibMatrixDNNConv2dHelper { // Add bias to current row if necessary, always dense if(_params.bias != null) - LibMatrixDNNHelper.addBias(n, _params.output.getDenseBlock(), _params.bias.getDenseBlock(), K, PQ); + LibMatrixDNNHelper.addBias(n, _params.output.getDenseBlockValues(), + _params.bias.getDenseBlockValues(), K, PQ); } //multi-threaded nnz maintenance of current working set @@ -240,7 +243,7 @@ public class LibMatrixDNNConv2dHelper { //src is [PQ x K] -> [K x PQ] -> [1 x KPQ] if(src.isInSparseFormat()) { SparseBlock sblock = src.sparseBlock; - double[] c = dest.denseBlock; + double[] c = dest.getDenseBlockValues(); for(int i = 0; i < src.getNumRows(); i++) { if( sblock.isEmpty(i) ) continue; int apos = sblock.pos(i); @@ -253,8 +256,8 @@ public class LibMatrixDNNConv2dHelper { } } else { - double[] a = src.denseBlock; - double[] c = dest.denseBlock; + double[] a = src.getDenseBlockValues(); + double[] c = dest.getDenseBlockValues(); final int blocksizeIJ = 128; //128KB for L2 //cache-conscious blocked execution for( int bi = 0; bi < PQ; bi+=blocksizeIJ ) @@ -291,10 +294,10 @@ public class LibMatrixDNNConv2dHelper { int alen = _params.input1.getSparseBlock().size(n); int[] aix = _params.input1.getSparseBlock().indexes(n); double[] avals = _params.input1.getSparseBlock().values(n); - NativeHelper.conv2dSparse(apos, alen, aix, avals, _params.input2.getDenseBlock(), temp, + NativeHelper.conv2dSparse(apos, alen, aix, avals, _params.input2.getDenseBlockValues(), temp, 1, _params.C, _params.H, _params.W, _params.K, _params.R, _params.S, _params.stride_h, _params.stride_w, _params.pad_h, _params.pad_w, _params.P, _params.Q, 1); - System.arraycopy(temp, 0, _params.output.denseBlock, n*KPQ, KPQ); + System.arraycopy(temp, 0, _params.output.getDenseBlockValues(), n*KPQ, KPQ); } } //multi-threaded nnz maintenance of current working set http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java index ee21ce3..a5564cd 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java @@ -248,15 +248,15 @@ public class LibMatrixDNNHelper { public ReluBackward(int rl, int ru, ConvolutionParameters params) { _rl = rl; _ru = ru; _params = params; - outputArray= params.output.getDenseBlock(); + outputArray= params.output.getDenseBlockValues(); numOutCols = params.input1.getNumColumns(); } @Override public Long call() throws Exception { if(!_params.input1.isInSparseFormat() && !_params.input2.isInSparseFormat()) { - double [] inputArr = _params.input1.getDenseBlock(); - double [] doutArr = _params.input2.getDenseBlock(); + double [] inputArr = _params.input1.getDenseBlockValues(); + double [] doutArr = _params.input2.getDenseBlockValues(); for(int i = _rl*numOutCols; i < _ru*numOutCols; i++) { outputArray[i] = inputArr[i] > 0 ? doutArr[i] : 0; } @@ -293,11 +293,11 @@ public class LibMatrixDNNHelper { private static ArrayList<MatrixBlock> splitFilter(ConvolutionParameters _params) { ArrayList<MatrixBlock> ret = new ArrayList<>(); int RS = _params.R*_params.S; int CRS = _params.C*_params.R*_params.S; - double [] filter = _params.input2.getDenseBlock(); int S = _params.S; + double [] filter = _params.input2.getDenseBlockValues(); int S = _params.S; for(int c = 0; c < _params.C; c++) { MatrixBlock mb = new MatrixBlock(_params.K, RS, false); mb.allocateDenseBlock(); long nnz = 0; - double [] outputArr = mb.getDenseBlock(); + double [] outputArr = mb.getDenseBlockValues(); if(filter != null) { for(int k = 0; k < _params.K; k++) { int outOffset = k*RS; @@ -348,8 +348,8 @@ public class LibMatrixDNNHelper { ret.sparse = false; if(ret.getDenseBlock() == null) ret.allocateDenseBlock(); - NativeHelper.matrixMultDenseDense(m1.denseBlock, m2.denseBlock, - ret.denseBlock, m1.rlen, m1.clen, m2.clen, 1); + NativeHelper.matrixMultDenseDense(m1.getDenseBlockValues(), m2.getDenseBlockValues(), + ret.getDenseBlockValues(), m1.rlen, m1.clen, m2.clen, 1); } //no need to maintain nnz exactly, as consumed by other operations @@ -484,7 +484,8 @@ public class LibMatrixDNNHelper { } } else { - System.arraycopy(input.getDenseBlock(), n*input.getNumColumns(), ret, 0, input.getNumColumns()); + System.arraycopy(input.getDenseBlockValues(), + n*input.getNumColumns(), ret, 0, input.getNumColumns()); } } @@ -500,13 +501,13 @@ public class LibMatrixDNNHelper { double [] outputArray = null; if (!params.output.isInSparseFormat()) - outputArray = params.output.getDenseBlock(); + outputArray = params.output.getDenseBlockValues(); else { throw new DMLRuntimeException("Only dense output is implemented"); } if(!input.isInSparseFormat()) { - double [] inputArray = input.getDenseBlock(); + double [] inputArray = input.getDenseBlockValues(); doCol2IMDenseInput(0, outputN, inputArray, outputArray, params); } else { http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java index 1fa863e..bd29848 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java @@ -42,13 +42,13 @@ public class LibMatrixDNNIm2ColHelper { LOG.trace("Using DenseIm2colWorkerAllChannels operator to perform " + "im2col (stride1pad0="+stride1Pad0+", allChannels="+allChannels+")."); if(allChannels && stride1Pad0 && !trans ) - return new DenseIm2colWorkerStride1Pad0AllChannels(input.getDenseBlock(), out.getDenseBlock(), params); + return new DenseIm2colWorkerStride1Pad0AllChannels(input.getDenseBlockValues(), out.getDenseBlockValues(), params); else if( allChannels ) - return new DenseIm2colWorkerAllChannels(input.getDenseBlock(), out.getDenseBlock(), params, trans); + return new DenseIm2colWorkerAllChannels(input.getDenseBlockValues(), out.getDenseBlockValues(), params, trans); else if( stride1Pad0 ) - return new DenseIm2colWorkerStride1Pad0(input.getDenseBlock(), out.getDenseBlock(), params); + return new DenseIm2colWorkerStride1Pad0(input.getDenseBlockValues(), out.getDenseBlockValues(), params); else - return new DenseIm2colWorker(input.getDenseBlock(), out.getDenseBlock(), params); + return new DenseIm2colWorker(input.getDenseBlockValues(), out.getDenseBlockValues(), params); } else { if(LOG.isTraceEnabled()) http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java index 1992b79..6e5e978 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java @@ -40,8 +40,8 @@ public class LibMatrixDNNPoolingBackwardHelper { _rl = rl; _ru = ru; _params = params; this.performReluBackward = performReluBackward; - inputArray = params.input1.getDenseBlock(); - doutArray = params.input2.getDenseBlock(); + inputArray = params.input1.getDenseBlockValues(); + doutArray = params.input2.getDenseBlockValues(); output = params.output; C = params.C; CHW = params.C*params.H*params.W; HW = params.H*params.W; P = params.P; Q = params.Q; CPQ = params.C*params.P*params.Q; @@ -52,7 +52,7 @@ public class LibMatrixDNNPoolingBackwardHelper { @Override public Long call() throws Exception { - double[] out = output.getDenseBlock(); + double[] out = output.getDenseBlockValues(); for(int n = _rl; n < _ru; n++) { for (int c = 0; c < C; c++) { final int inputOffset = n*CHW + c*HW; @@ -86,7 +86,7 @@ public class LibMatrixDNNPoolingBackwardHelper { _rl = rl; _ru = ru; _params = params; this.performReluBackward = performReluBackward; - inputArray = params.input1.getDenseBlock(); + inputArray = params.input1.getDenseBlockValues(); dout = params.input2; output = params.output; C = params.C; CHW = params.C*params.H*params.W; HW = params.H*params.W; @@ -99,7 +99,7 @@ public class LibMatrixDNNPoolingBackwardHelper { @Override public Long call() throws Exception { - double[] out = output.getDenseBlock(); + double[] out = output.getDenseBlockValues(); for(int n = _rl; n < _ru; n++) { if( !dout.sparseBlock.isEmpty(n) ) { int [] tensorIndexes = new int[3]; @@ -226,8 +226,8 @@ public class LibMatrixDNNPoolingBackwardHelper { } protected void maxpoolingBackward(int[] maxIx, int outOffset, int n, int c, int C, int Q, int PQ, int CPQ) { - double[] dout = doutput.getDenseBlock(); - double[] out = output.getDenseBlock(); + double[] dout = doutput.getDenseBlockValues(); + double[] out = output.getDenseBlockValues(); final int doutOffset = n*CPQ + c*PQ; for( int pq = 0; pq < PQ; pq++ ) out[ outOffset + maxIx[pq] ] += dout[ doutOffset + pq ]; @@ -276,7 +276,7 @@ public class LibMatrixDNNPoolingBackwardHelper { @Override protected void maxpoolingBackward(int[] maxIx, int outOffset, int n, int c, int C, int Q, int PQ, int CPQ) { SparseBlock sblock = doutput.getSparseBlock(); - double[] out = output.getDenseBlock(); + double[] out = output.getDenseBlockValues(); if( sblock.isEmpty(n) ) return; int apos = sblock.pos(n); http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java index 3567690..0377c50 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java @@ -46,8 +46,8 @@ public class LibMatrixDNNPoolingHelper { final int HW = _params.H*_params.W; final int CHW = _params.C*_params.H*_params.W; final int CPQ = C*P*Q; - double[] in = _params.input1.getDenseBlock(); - double[] out = _params.output.getDenseBlock(); + double[] in = _params.input1.getDenseBlockValues(); + double[] out = _params.output.getDenseBlockValues(); double minValForMaxPoolOperations = _params.minValForMaxPoolOperations; @@ -101,7 +101,7 @@ public class LibMatrixDNNPoolingHelper { public SparseMaxPooling(int rl, int ru, ConvolutionParameters params) { _rl = rl; _ru = ru; _params = params; - outputArray = params.output.getDenseBlock(); + outputArray = params.output.getDenseBlockValues(); C = params.C; P = params.P; Q = params.Q; H = params.H; W = params.W; CPQ = C*P*Q; http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java index 7a71ced..1ca6ad1 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java @@ -28,7 +28,7 @@ public class LibMatrixDNNRotate180Helper { public static Rotate180Worker getWorker(MatrixBlock in, MatrixBlock out, ConvolutionParameters params, boolean zeroOutSparseOutput, boolean trans) { if(!in.isInSparseFormat()) - return new DenseRotate180Worker(in, out.getDenseBlock(), params); + return new DenseRotate180Worker(in, out.getDenseBlockValues(), params); else return new SparseRotate180Worker(in, out, params, trans); } @@ -44,7 +44,7 @@ public class LibMatrixDNNRotate180Helper { public DenseRotate180Worker(MatrixBlock input, double [] outputArray, ConvolutionParameters params) { this.outputArray = outputArray; this.params = params; - inputArray = input.getDenseBlock(); + inputArray = input.getDenseBlockValues(); if(inputArray == null || outputArray == null) throw new RuntimeException("Incorrect usage: empty inputs"); } http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java index 90dda05..d67fb15 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java @@ -399,7 +399,7 @@ public class LibMatrixDatagen out.allocateDenseBlock(); //compute sequence data - double[] c = out.denseBlock; + double[] c = out.getDenseBlockValues(); double cur = from; for(int i=0; i < rows; i++) { c[i] = cur; @@ -577,7 +577,7 @@ public class LibMatrixDatagen } else { if (sparsity == 1.0) { - double[] c = out.denseBlock; + double[] c = out.getDenseBlockValues(); int cix = rowoffset*cols + coloffset; for(int ii = 0; ii < blockrows; ii++, cix+=cols) for(int jj = 0; jj < blockcols; jj++) @@ -605,7 +605,7 @@ public class LibMatrixDatagen } } else { - double[] c = out.denseBlock; + double[] c = out.getDenseBlockValues(); int cix = rowoffset*cols + coloffset; for(int ii = 0; ii < blockrows; ii++, cix+=cols) for(int jj = 0; jj < blockcols; jj++) http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java index e2af752..a90ef5d 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java @@ -219,7 +219,7 @@ public class LibMatrixMult ret.nonZeros = 0; //reset after execute for( Future<Object> task : taskret ) { if( pm2r ) - vectAdd((double[])task.get(), ret.denseBlock, 0, 0, ret.rlen*ret.clen); + vectAdd((double[])task.get(), ret.getDenseBlockValues(), 0, 0, ret.rlen*ret.clen); else ret.nonZeros += (Long)task.get(); } @@ -329,7 +329,7 @@ public class LibMatrixMult pool.shutdown(); //aggregate partial results for( Future<double[]> task : taskret ) - vectAdd(task.get(), ret.denseBlock, 0, 0, mX.clen); + vectAdd(task.get(), ret.getDenseBlockValues(), 0, 0, mX.clen); } catch(Exception ex) { throw new DMLRuntimeException(ex); @@ -926,9 +926,9 @@ public class LibMatrixMult private static void matrixMultDenseDense(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret, boolean tm2, boolean pm2, int rl, int ru, int cl, int cu) throws DMLRuntimeException { - double[] a = m1.denseBlock; - double[] b = m2.denseBlock; - double[] c = ret.denseBlock; + double[] a = m1.getDenseBlockValues(); + double[] b = m2.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); final int m = m1.rlen; final int n = m2.clen; final int cd = m1.clen; @@ -1113,8 +1113,8 @@ public class LibMatrixMult private static void matrixMultDenseSparse(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret, boolean pm2, int rl, int ru) throws DMLRuntimeException { - double[] a = m1.denseBlock; - double[] c = ret.denseBlock; + double[] a = m1.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); int m = m1.rlen; int cd = m1.clen; int n = m2.clen; @@ -1183,8 +1183,8 @@ public class LibMatrixMult throws DMLRuntimeException { SparseBlock a = m1.sparseBlock; - double[] b = m2.denseBlock; - double[] c = ret.denseBlock; + double[] b = m2.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); final int m = m1.rlen; final int n = m2.clen; final int cd = m2.rlen; @@ -1390,7 +1390,7 @@ public class LibMatrixMult { SparseBlock a = m1.sparseBlock; SparseBlock b = m2.sparseBlock; - double[] c = ret.denseBlock; + double[] c = ret.getDenseBlockValues(); int m = m1.rlen; int cd = m1.clen; int n = m2.clen; @@ -1591,10 +1591,10 @@ public class LibMatrixMult private static void matrixMultChainDense(MatrixBlock mX, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, ChainType ct, int rl, int ru) { - double[] a = mX.denseBlock; - double[] b = mV.denseBlock; - double[] w = (mW!=null) ? mW.denseBlock : null; - double[] c = ret.denseBlock; + double[] a = mX.getDenseBlockValues(); + double[] b = mV.getDenseBlockValues(); + double[] w = (mW!=null) ? mW.getDenseBlockValues() : null; + double[] c = ret.getDenseBlockValues(); final int cd = mX.clen; //features in X boolean weights = (ct == ChainType.XtwXv); boolean weights2 = (ct == ChainType.XtXvy); @@ -1644,9 +1644,9 @@ public class LibMatrixMult private static void matrixMultChainSparse(MatrixBlock mX, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, ChainType ct, int rl, int ru) { SparseBlock a = mX.sparseBlock; - double[] b = mV.denseBlock; - double[] w = (mW!=null) ? mW.denseBlock : null; - double[] c = ret.denseBlock; + double[] b = mV.getDenseBlockValues(); + double[] w = (mW!=null) ? mW.getDenseBlockValues() : null; + double[] c = ret.getDenseBlockValues(); boolean weights = (ct == ChainType.XtwXv); boolean weights2 = (ct == ChainType.XtXvy); @@ -1677,8 +1677,8 @@ public class LibMatrixMult { //2) transpose self matrix multiply dense // (compute only upper-triangular matrix due to symmetry) - double[] a = m1.denseBlock; - double[] c = ret.denseBlock; + double[] a = m1.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); int m = m1.rlen; int n = m1.clen; @@ -1809,7 +1809,7 @@ public class LibMatrixMult //2) transpose self matrix multiply sparse // (compute only upper-triangular matrix due to symmetry) SparseBlock a = m1.sparseBlock; - double[] c = ret.denseBlock; + double[] c = ret.getDenseBlockValues(); int m = m1.rlen; int n = m1.clen; @@ -1930,9 +1930,9 @@ public class LibMatrixMult private static void matrixMultPermuteDense(MatrixBlock pm1, MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2, int rl, int ru) throws DMLRuntimeException { - double[] a = pm1.denseBlock; - double[] b = m2.denseBlock; - double[] c = ret1.denseBlock; + double[] a = pm1.getDenseBlockValues(); + double[] b = m2.getDenseBlockValues(); + double[] c = ret1.getDenseBlockValues(); final int n = m2.clen; final int brlen = ret1.getNumRows(); @@ -1953,7 +1953,7 @@ public class LibMatrixMult if( lastblk!=-1 && lastblk<blk ){ ret2.sparse = false; ret2.allocateDenseBlock(); - c = ret2.denseBlock; + c = ret2.getDenseBlockValues(); } //memcopy entire dense row into target position @@ -1965,8 +1965,8 @@ public class LibMatrixMult private static void matrixMultPermuteDenseSparse( MatrixBlock pm1, MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2, int rl, int ru) { - double[] a = pm1.denseBlock; - double[] b = m2.denseBlock; + double[] a = pm1.getDenseBlockValues(); + double[] b = m2.getDenseBlockValues(); SparseBlock c = ret1.sparseBlock; final int n = m2.clen; @@ -2002,7 +2002,7 @@ public class LibMatrixMult private static void matrixMultPermuteSparse( MatrixBlock pm1, MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2, int rl, int ru) { - double[] a = pm1.denseBlock; + double[] a = pm1.getDenseBlockValues(); SparseBlock b = m2.sparseBlock; SparseBlock c = ret1.sparseBlock; @@ -2012,7 +2012,7 @@ public class LibMatrixMult for( int i=rl; i<ru; i++ ) { //compute block index and in-block indexes - int pos = UtilFunctions.toInt( a[ i ]); //safe cast + int pos = UtilFunctions.toInt( a[ i ]); //safe cast if( pos > 0 ) //selected row { int bpos = (pos-1) % brlen; @@ -2036,10 +2036,10 @@ public class LibMatrixMult private static void matrixMultWSLossDense(MatrixBlock mX, MatrixBlock mU, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, WeightsType wt, int rl, int ru) { - double[] x = mX.denseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; - double[] w = (mW!=null)? mW.denseBlock : null; + double[] x = mX.getDenseBlockValues(); + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); + double[] w = (mW!=null)? mW.getDenseBlockValues() : null; final int n = mX.clen; final int cd = mU.clen; double wsloss = 0; @@ -2111,8 +2111,8 @@ public class LibMatrixMult { SparseBlock x = mX.sparseBlock; SparseBlock w = (mW!=null)? mW.sparseBlock : null; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int n = mX.clen; final int cd = mU.clen; double wsloss = 0; @@ -2262,7 +2262,7 @@ public class LibMatrixMult } else //DENSE { - double[] w = mW.denseBlock; + double[] w = mW.getDenseBlockValues(); for( int i=rl, wix=rl*n; i<ru; i++, wix+=n ) for( int j=0; j<n; j++) @@ -2295,7 +2295,7 @@ public class LibMatrixMult } else //DENSE { - double[] x = mX.denseBlock; + double[] x = mX.getDenseBlockValues(); for( int i=rl, xix=rl*n; i<ru; i++, xix+=n ) for( int j=0; j<n; j++) @@ -2344,7 +2344,7 @@ public class LibMatrixMult } } else { //DENSE - double[] x = mX.denseBlock; + double[] x = mX.getDenseBlockValues(); for( int i=rl, xix=rl*n; i<ru; i++, xix+=n ) for( int j=0; j<n; j++) if( x[xix+j] != 0 ) { @@ -2367,16 +2367,16 @@ public class LibMatrixMult matrixMultTransposeSelf(mV, tmp2, true, k); ret.quickSetValue(0, 0, ret.quickGetValue(0, 0) + ((tmp1.sparse || tmp2.sparse) ? dotProductGeneric(tmp1, tmp2) : - dotProduct(tmp1.denseBlock, tmp2.denseBlock, mU.clen*mU.clen))); + dotProduct(tmp1.getDenseBlockValues(), tmp2.getDenseBlockValues(), mU.clen*mU.clen))); } private static void matrixMultWSigmoidDense(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock ret, WSigmoidType wt, int rl, int ru) throws DMLRuntimeException { - double[] w = mW.denseBlock; - double[] c = ret.denseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] w = mW.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int n = mW.clen; final int cd = mU.clen; @@ -2413,8 +2413,8 @@ public class LibMatrixMult { SparseBlock w = mW.sparseBlock; SparseBlock c = ret.sparseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int cd = mU.clen; boolean flagminus = (wt==WSigmoidType.MINUS || wt==WSigmoidType.LOG_MINUS); @@ -2469,8 +2469,8 @@ public class LibMatrixMult else //DENSE { //w and c always in same representation - double[] w = mW.denseBlock; - double[] c = ret.denseBlock; + double[] w = mW.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); for( int i=rl, ix=rl*n; i<ru; i++ ) for( int j=0; j<n; j++, ix++) { @@ -2495,11 +2495,11 @@ public class LibMatrixMult final int n = mW.clen; final int cd = mU.clen; - double[] w = mW.denseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; - double[] x = (mX==null) ? null : mX.denseBlock; - double[] c = ret.denseBlock; + double[] w = mW.getDenseBlockValues(); + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); + double[] x = (mX==null) ? null : mX.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); //approach: iterate over non-zeros of w, selective mm computation //cache-conscious blocking: due to blocksize constraint (default 1000), @@ -2543,9 +2543,9 @@ public class LibMatrixMult final int cd = mU.clen; SparseBlock w = mW.sparseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; - double[] c = ret.denseBlock; + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); SparseBlock x = (mX==null) ? null : mX.sparseBlock; //approach: iterate over non-zeros of w, selective mm computation @@ -2555,7 +2555,7 @@ public class LibMatrixMult final int blocksizeI = (int) (8L*mW.rlen*mW.clen/mW.nonZeros); final int blocksizeJ = left ? Math.max(8,Math.min(L2_CACHESIZE/(mU.clen*8), blocksizeI)) : blocksizeI; - int[] curk = new int[blocksizeI]; + int[] curk = new int[blocksizeI]; boolean[] aligned = (four&&!scalar) ? new boolean[blocksizeI] : null; //blocked execution over row blocks @@ -2583,7 +2583,7 @@ public class LibMatrixMult int wpos = w.pos(i); int wlen = w.size(i); int[] wix = w.indexes(i); - double[] wval = w.values(i); + double[] wval = w.values(i); int k = wpos + curk[i-bi]; if( basic ) { @@ -2632,7 +2632,7 @@ public class LibMatrixMult final int cd = mU.clen; //output always in dense representation - double[] c = ret.denseBlock; + double[] c = ret.getDenseBlockValues(); //approach: iterate over non-zeros of w, selective mm computation if( mW.sparse ) //SPARSE @@ -2665,7 +2665,7 @@ public class LibMatrixMult } else //DENSE { - double[] w = mW.denseBlock; + double[] w = mW.getDenseBlockValues(); for( int i=rl, ix=rl*n; i<ru; i++, ix+=n ) for( int j=cl; j<cu; j++) @@ -2686,9 +2686,9 @@ public class LibMatrixMult private static void matrixMultWCeMMDense(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, double eps, MatrixBlock ret, WCeMMType wt, int rl, int ru) { - double[] w = mW.denseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] w = mW.getDenseBlockValues(); + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int n = mW.clen; final int cd = mU.clen; double wceval = 0; @@ -2720,8 +2720,8 @@ public class LibMatrixMult private static void matrixMultWCeMMSparseDense(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, double eps, MatrixBlock ret, WCeMMType wt, int rl, int ru) { SparseBlock w = mW.sparseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int n = mW.clen; final int cd = mU.clen; double wceval = 0; @@ -2730,7 +2730,7 @@ public class LibMatrixMult // blocked over ij, while maintaining front of column indexes, where the // blocksize is chosen such that we reuse each vector on average 8 times. final int blocksizeIJ = (int) (8L*mW.rlen*mW.clen/mW.nonZeros); - int[] curk = new int[blocksizeIJ]; + int[] curk = new int[blocksizeIJ]; for( int bi=rl; bi<ru; bi+=blocksizeIJ ) { int bimin = Math.min(ru, bi+blocksizeIJ); @@ -2783,7 +2783,7 @@ public class LibMatrixMult } else //DENSE { - double[] w = mW.denseBlock; + double[] w = mW.getDenseBlockValues(); for( int i=rl, ix=rl*n; i<ru; i++ ) for( int j=0; j<n; j++, ix++) { @@ -2794,7 +2794,6 @@ public class LibMatrixMult } } } - ret.quickSetValue(0, 0, wceval); } @@ -2802,10 +2801,10 @@ public class LibMatrixMult private static void matrixMultWuMMDense(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock ret, WUMMType wt, ValueFunction fn, int rl, int ru) throws DMLRuntimeException { - double[] w = mW.denseBlock; - double[] c = ret.denseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] w = mW.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int n = mW.clen; final int cd = mU.clen; @@ -2841,8 +2840,8 @@ public class LibMatrixMult { SparseBlock w = mW.sparseBlock; SparseBlock c = ret.sparseBlock; - double[] u = mU.denseBlock; - double[] v = mV.denseBlock; + double[] u = mU.getDenseBlockValues(); + double[] v = mV.getDenseBlockValues(); final int cd = mU.clen; boolean flagmult = (wt==WUMMType.MULT); @@ -2895,8 +2894,8 @@ public class LibMatrixMult else //DENSE { //w and c always in same representation - double[] w = mW.denseBlock; - double[] c = ret.denseBlock; + double[] w = mW.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); for( int i=rl, ix=rl*n; i<ru; i++ ) for( int j=0; j<n; j++, ix++) { @@ -3527,7 +3526,7 @@ public class LibMatrixMult if( ret.rlen != ret.clen ) throw new RuntimeException("Invalid non-squared input matrix."); - final double[] c = ret.denseBlock; + final double[] c = ret.getDenseBlockValues(); final int n = ret.rlen; long nnz = 0; @@ -3780,7 +3779,7 @@ public class LibMatrixMult if( !_pm2r ) return _ret.recomputeNonZeros(rl, ru-1, cl, cu-1); else - return _ret.getDenseBlock(); + return _ret.getDenseBlockValues(); } } @@ -3819,8 +3818,7 @@ public class LibMatrixMult //NOTE: we dont do global aggregation from concurrent tasks in order //to prevent synchronization (sequential aggregation led to better //performance after JIT) - - return ret.getDenseBlock(); + return ret.getDenseBlockValues(); } } http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java index 524218d..51a79e1 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java @@ -62,8 +62,8 @@ public class LibMatrixNative { ret.sparse = false; ret.allocateDenseBlock(); long start = DMLScript.STATISTICS ? System.nanoTime() : 0; - if (NativeHelper.matrixMultDenseDense(m1.denseBlock, m2.denseBlock, - ret.denseBlock, m1.getNumRows(), m1.getNumColumns(), m2.getNumColumns(), k)) { + if (NativeHelper.matrixMultDenseDense(m1.getDenseBlockValues(), m2.getDenseBlockValues(), + ret.getDenseBlockValues(), m1.getNumRows(), m1.getNumColumns(), m2.getNumColumns(), k)) { if(DMLScript.STATISTICS) { Statistics.nativeLibMatrixMultTime += System.nanoTime() - start; Statistics.numNativeLibMatrixMultCalls.increment(); @@ -100,7 +100,8 @@ public class LibMatrixNative { setNumThreads(params); if(params.bias == null) { long start = DMLScript.STATISTICS ? System.nanoTime() : 0; - int nnz = NativeHelper.conv2dDense(input.denseBlock, filter.denseBlock, outputBlock.denseBlock, params.N, params.C, params.H, params.W, + int nnz = NativeHelper.conv2dDense(input.getDenseBlockValues(), filter.getDenseBlockValues(), + outputBlock.getDenseBlockValues(), params.N, params.C, params.H, params.W, params.K, params.R, params.S, params.stride_h, params.stride_w, params.pad_h, params.pad_w, params.P, params.Q, params.numThreads); if(nnz != -1) { @@ -121,7 +122,8 @@ public class LibMatrixNative { if(params.bias.isInSparseFormat()) params.bias.sparseToDense(); // Bias matrix is usually extremely small long start = DMLScript.STATISTICS ? System.nanoTime() : 0; - int nnz = NativeHelper.conv2dBiasAddDense(input.denseBlock, params.bias.denseBlock, filter.denseBlock, outputBlock.denseBlock, + int nnz = NativeHelper.conv2dBiasAddDense(input.getDenseBlockValues(), params.bias.getDenseBlockValues(), + filter.getDenseBlockValues(), outputBlock.getDenseBlockValues(), params.N, params.C, params.H, params.W, params.K, params.R, params.S, params.stride_h, params.stride_w, params.pad_h, params.pad_w, params.P, params.Q, params.numThreads); @@ -166,7 +168,8 @@ public class LibMatrixNative { if(NativeHelper.isNativeLibraryLoaded() && !dout.isInSparseFormat() && !input.isInSparseFormat()) { setNumThreads(params); long start = DMLScript.STATISTICS ? System.nanoTime() : 0; - int nnz = NativeHelper.conv2dBackwardFilterDense(input.denseBlock, dout.denseBlock, outputBlock.denseBlock, params.N, params.C, params.H, params.W, + int nnz = NativeHelper.conv2dBackwardFilterDense(input.getDenseBlockValues(), dout.getDenseBlockValues(), + outputBlock.getDenseBlockValues(), params.N, params.C, params.H, params.W, params.K, params.R, params.S, params.stride_h, params.stride_w, params.pad_h, params.pad_w, params.P, params.Q, params.numThreads); if(nnz != -1) { @@ -202,7 +205,8 @@ public class LibMatrixNative { if(NativeHelper.isNativeLibraryLoaded() && !dout.isInSparseFormat() && !filter.isInSparseFormat()) { setNumThreads(params); long start = DMLScript.STATISTICS ? System.nanoTime() : 0; - int nnz = NativeHelper.conv2dBackwardDataDense(filter.denseBlock, dout.denseBlock, outputBlock.denseBlock, params.N, params.C, params.H, params.W, + int nnz = NativeHelper.conv2dBackwardDataDense(filter.getDenseBlockValues(), dout.getDenseBlockValues(), + outputBlock.getDenseBlockValues(), params.N, params.C, params.H, params.W, params.K, params.R, params.S, params.stride_h, params.stride_w, params.pad_h, params.pad_w, params.P, params.Q, params.numThreads); if(nnz != -1) { http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java index 37a55ba..2c9f476 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java @@ -288,8 +288,8 @@ public class LibMatrixOuterAgg * @param outVal output matrix block * @param uaggOp aggregate unary operator */ - public static void resetOutputMatix(MatrixIndexes in1Ix, MatrixBlock in1Val, MatrixIndexes outIx, MatrixBlock outVal, AggregateUnaryOperator uaggOp) - { + public static void resetOutputMatrix(MatrixIndexes in1Ix, MatrixBlock in1Val, MatrixIndexes outIx, MatrixBlock outVal, AggregateUnaryOperator uaggOp) + { if(uaggOp.indexFn instanceof ReduceCol) { outIx.setIndexes(in1Ix.getRowIndex(), 1); outVal.reset(in1Val.getNumRows(), 2, false); @@ -396,7 +396,7 @@ public class LibMatrixOuterAgg */ private static void uaRowSumGtLe(MatrixBlock in, MatrixBlock out, double[] bv, BinaryOperator bOp) throws DMLRuntimeException - { + { int agg0 = sumRowSumGtLeColSumLtGe(0.0, bv, bOp); int m = in.rlen; @@ -459,7 +459,7 @@ public class LibMatrixOuterAgg */ private static void uaColSumGtLe(MatrixBlock in1Val, MatrixBlock outVal, double[] bv, BinaryOperator bOp) throws DMLRuntimeException - { + { if (in1Val.isInSparseFormat()) s_uaColSumGtLe(in1Val, outVal, bv, bOp); else @@ -870,26 +870,26 @@ public class LibMatrixOuterAgg //allocate and initialize output values (not indices) out.allocateDenseBlock(true); - Arrays.fill(out.getDenseBlock(), 0, out.getNumColumns(), agg0); - if(agg0 != 0.0) - out.setNonZeros(out.getNumColumns()); + if(agg0 != 0.0) { + out.getDenseBlock().set(0, 1, 0, out.clen, agg0); + out.setNonZeros(out.clen); + } if( in.isEmptyBlock(false) ) return; - - SparseBlock sblock = in.getSparseBlock(); + + SparseBlock sblock = in.getSparseBlock(); for( int j = 0; j < sblock.numRows(); j++) if( !sblock.isEmpty(j) ) { int apos = sblock.pos(j); int alen = sblock.size(j); int[] aix = sblock.indexes(j); double [] avals = sblock.values(j); - for (int i=apos; i < apos+alen; i++) { int cnt = sumRowSumGtLeColSumLtGe(avals[i], bv, bOp); out.quickSetValue(0, aix[i], cnt); } - } + } } /** @@ -927,29 +927,29 @@ public class LibMatrixOuterAgg throws DMLRuntimeException { int agg0 = sumRowSumLtGeColSumGtLe(0.0, bv, bOp); - + //allocate and initialize output values (not indices) out.allocateDenseBlock(true); - Arrays.fill(out.getDenseBlock(), 0, out.getNumColumns(), agg0); - if(agg0 != 0.0) + if(agg0 != 0.0) { + out.getDenseBlock().set(0, 1, 0, out.clen, agg0); out.setNonZeros(out.getNumColumns()); + } if( in.isEmptyBlock(false) ) return; - - SparseBlock sblock = in.getSparseBlock(); + + SparseBlock sblock = in.getSparseBlock(); for (int j = 0; j < sblock.numRows(); j++) if( !sblock.isEmpty(j) ) { int apos = sblock.pos(j); int alen = sblock.size(j); int[] aix = sblock.indexes(j); double [] avals = sblock.values(j); - for (int i=apos; i < apos+alen; i++) { int cnt = sumRowSumLtGeColSumGtLe(avals[i], bv, bOp); out.quickSetValue(0, aix[i], cnt); } - } + } } /** @@ -990,26 +990,26 @@ public class LibMatrixOuterAgg //allocate and initialize output values (not indices) out.allocateDenseBlock(true); - Arrays.fill(out.getDenseBlock(), 0, out.getNumColumns(), agg0); - if(agg0 != 0.0) + if(agg0 != 0.0) { + out.getDenseBlock().set(0, 1, 0, out.clen, agg0); out.setNonZeros(out.getNumColumns()); + } if( in.isEmptyBlock(false) ) return; - - SparseBlock sblock = in.getSparseBlock(); + + SparseBlock sblock = in.getSparseBlock(); for (int j = 0; j < sblock.numRows(); j++) if( !sblock.isEmpty(j) ) { int apos = sblock.pos(j); int alen = sblock.size(j); int[] aix = sblock.indexes(j); double [] avals = sblock.values(j); - for (int i=apos; i < apos+alen; i++) { int cnt = sumEqNe(avals[i], bv, bOp); out.quickSetValue(0, aix[i], cnt); } - } + } } http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java index 8cf20ed..e8a7bd6 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java @@ -136,7 +136,7 @@ public class LibMatrixReorg //we don't need to create a copy, given our copy on write semantics. //however, note that with update in-place this would be an invalid optimization if( SHALLOW_COPY_REORG && !in.sparse && !out.sparse && (in.rlen==1 || in.clen==1) ) { - out.denseBlock = in.denseBlock; + out.denseBlock = DenseBlockFactory.createDenseBlock(in.getDenseBlockValues(), in.clen, in.rlen); return out; } @@ -207,7 +207,7 @@ public class LibMatrixReorg blklen += (blklen%8 != 0)?8-blklen%8:0; for( int i=0; i<k & i*blklen<len; i++ ) tasks.add(new TransposeTask(in, out, row, i*blklen, Math.min((i+1)*blklen, len), cnt)); - List<Future<Object>> taskret = pool.invokeAll(tasks); + List<Future<Object>> taskret = pool.invokeAll(tasks); pool.shutdown(); for( Future<Object> task : taskret ) task.get(); @@ -286,12 +286,12 @@ public class LibMatrixReorg MatrixBlock outblk2 = new MatrixBlock(blklen2, inblk.getNumColumns(), inblk.isInSparseFormat()); MatrixBlock tmp2 = tmpblk.sliceOperations(iposCut+1, tmpblk.getNumRows()-1, 0, tmpblk.getNumColumns()-1, new MatrixBlock()); outblk2.leftIndexingOperations(tmp2, 0, tmp2.getNumRows()-1, 0, tmpblk.getNumColumns()-1, outblk2, UpdateType.INPLACE_PINNED); - out.add(new IndexedMatrixValue(outix2, outblk2)); + out.add(new IndexedMatrixValue(outix2, outblk2)); } } } - public static MatrixBlock diag( MatrixBlock in, MatrixBlock out ) + public static MatrixBlock diag( MatrixBlock in, MatrixBlock out ) throws DMLRuntimeException { //Timing time = new Timing(true); @@ -341,7 +341,7 @@ public class LibMatrixReorg if( !sparse && clen == 1 ) { //DENSE COLUMN VECTOR //in-place quicksort, unstable (no indexes needed) out.copy( in ); //dense - Arrays.sort(out.denseBlock); + Arrays.sort(out.getDenseBlockValues()); if( desc ) sortReverseDense(out); return out; @@ -351,7 +351,7 @@ public class LibMatrixReorg { if( in.isEmptyBlock(false) ) { //EMPTY INPUT BLOCK out.allocateDenseBlock(false); - double[] c = out.getDenseBlock(); + double[] c = out.getDenseBlockValues(); for( int i=0; i<rlen; i++ ) c[i] = i+1; //seq(1,n) return out; @@ -391,7 +391,7 @@ public class LibMatrixReorg if( !sparse ) { //DENSE out.allocateDenseBlock(false); for( int i=0; i<rlen; i++ ) - System.arraycopy(in.denseBlock, vix[i]*clen, out.denseBlock, i*clen, clen); + System.arraycopy(in.getDenseBlockValues(), vix[i]*clen, out.getDenseBlockValues(), i*clen, clen); } else { //SPARSE out.allocateSparseRowsBlock(false); @@ -477,7 +477,7 @@ public class LibMatrixReorg * @throws DMLRuntimeException if DMLRuntimeException occurs */ public static ArrayList<IndexedMatrixValue> reshape( IndexedMatrixValue in, MatrixCharacteristics mcIn, - ArrayList<IndexedMatrixValue> out, MatrixCharacteristics mcOut, boolean rowwise ) + ArrayList<IndexedMatrixValue> out, MatrixCharacteristics mcOut, boolean rowwise ) throws DMLRuntimeException { //prepare inputs @@ -524,7 +524,7 @@ public class LibMatrixReorg if( rows ) ret.reset(1, in.clen, in.sparse); else //cols - ret.reset(in.rlen, 1, in.sparse); + ret.reset(in.rlen, 1, in.sparse); return ret; } @@ -743,8 +743,8 @@ public class LibMatrixReorg final int n = in.clen; final int n2 = out.clen; - double[] a = in.getDenseBlock(); - double[] c = out.getDenseBlock(); + double[] a = in.getDenseBlockValues(); + double[] c = out.getDenseBlockValues(); if( m==1 || n==1 ) //VECTOR TRANSPOSE { @@ -785,7 +785,7 @@ public class LibMatrixReorg final int n2 = out.clen; final int ennz2 = (int) (in.nonZeros/m2); - double[] a = in.getDenseBlock(); + double[] a = in.getDenseBlockValues(); SparseBlock c = out.getSparseBlock(); if( out.rlen == 1 ) //VECTOR-VECTOR @@ -806,7 +806,7 @@ public class LibMatrixReorg int bimin = Math.min(bi+blocksizeI, m); int bjmin = Math.min(bj+blocksizeJ, n); //core transpose operation - for( int i=bi; i<bimin; i++ ) + for( int i=bi; i<bimin; i++ ) for( int j=bj, aix=i*n+bj; j<bjmin; j++, aix++ ) { c.allocate(j, ennz2, n2); @@ -887,7 +887,7 @@ public class LibMatrixReorg final int n2 = out.clen; SparseBlock a = in.getSparseBlock(); - double[] c = out.getDenseBlock(); + double[] c = out.getDenseBlockValues(); if( m==1 ) //ROW VECTOR TRANSPOSE { @@ -992,8 +992,8 @@ public class LibMatrixReorg out.nonZeros = in.nonZeros; out.allocateDenseBlock(false); - double[] a = in.getDenseBlock(); - double[] c = out.getDenseBlock(); + double[] a = in.getDenseBlockValues(); + double[] c = out.getDenseBlockValues(); //copy all rows into target positions if( n == 1 ) { //column vector @@ -1116,7 +1116,7 @@ public class LibMatrixReorg //since the physical representation of dense matrices is always the same, //we don't need to create a copy, given our copy on write semantics. //however, note that with update in-place this would be an invalid optimization - out.denseBlock = in.denseBlock; + out.denseBlock = DenseBlockFactory.createDenseBlock(in.getDenseBlockValues(), rows, cols); return; } @@ -1124,8 +1124,8 @@ public class LibMatrixReorg out.allocateDenseBlock(false); //dense reshape - double[] a = in.denseBlock; - double[] c = out.denseBlock; + double[] a = in.getDenseBlockValues(); + double[] c = out.getDenseBlockValues(); if( rowwise ) { @@ -1157,7 +1157,7 @@ public class LibMatrixReorg { int ai = aix2%rlen; int aj = aix2/rlen; - c[ cix++ ] = a[ ai*clen+aj ]; + c[ cix++ ] = a[ ai*clen+aj ]; } //index conversion c[i,j]<- a[k,l]: // k = (rows*j+i)%rlen @@ -1313,7 +1313,7 @@ public class LibMatrixReorg int estnnz = (int) (in.nonZeros/rows); //sparse reshape - double[] a = in.denseBlock; + double[] a = in.getDenseBlockValues(); SparseBlock c = out.sparseBlock; if( rowwise ) @@ -1384,7 +1384,7 @@ public class LibMatrixReorg //sparse/dense reshape SparseBlock a = in.sparseBlock; - double[] c = out.denseBlock; + double[] c = out.getDenseBlockValues(); if( rowwise ) { @@ -1564,7 +1564,7 @@ public class LibMatrixReorg int rlen = in.rlen; int clen = in.clen; - double[] a = in.denseBlock; + double[] a = in.getDenseBlockValues(); //append all values to right blocks MatrixIndexes ixtmp = new MatrixIndexes(); @@ -1714,7 +1714,7 @@ public class LibMatrixReorg rlen2 += (flags[i] = !a.isEmpty(i)) ? 1 : 0; } else { //DENSE - double[] a = in.denseBlock; + double[] a = in.getDenseBlockValues(); for(int i=0, aix=0; i<m; i++, aix+=n) for(int j=0; j<n; j++) if( a[aix+j] != 0 ) { @@ -1758,8 +1758,8 @@ public class LibMatrixReorg else if( !in.sparse && !ret.sparse ) //DENSE <- DENSE { ret.allocateDenseBlock(); - double[] a = in.denseBlock; - double[] c = ret.denseBlock; + double[] a = in.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); for( int i=0, aix=0, cix=0; i<m; i++, aix+=n ) if( flags[i] ) { @@ -1770,7 +1770,7 @@ public class LibMatrixReorg else //SPARSE <- DENSE { ret.allocateSparseRowsBlock(); - double[] a = in.denseBlock; + double[] a = in.getDenseBlockValues(); for( int i=0, aix=0, cix=0; i<m; i++, aix+=n ) if( flags[i] ) { @@ -1816,15 +1816,14 @@ public class LibMatrixReorg } else //DENSE { - double[] a = in.denseBlock; - + double[] a = in.getDenseBlockValues(); for(int i=0, aix=0; i<m; i++) for(int j=0; j<n; j++, aix++) if( a[aix] != 0 ) - flags[j] = true; + flags[j] = true; } } - else { + else { flags = DataConverter.convertToBooleanVector(select); } @@ -1881,8 +1880,8 @@ public class LibMatrixReorg else if( !in.sparse && !ret.sparse ) //DENSE <- DENSE { ret.allocateDenseBlock(); - double[] a = in.denseBlock; - double[] c = ret.denseBlock; + double[] a = in.getDenseBlockValues(); + double[] c = ret.getDenseBlockValues(); for(int i=0, aix=0, lcix=0; i<m; i++, lcix+=clen2) for(int j=0; j<n; j++, aix++) @@ -1892,7 +1891,7 @@ public class LibMatrixReorg else //SPARSE <- DENSE { ret.allocateSparseRowsBlock(); - double[] a = in.denseBlock; + double[] a = in.getDenseBlockValues(); for(int i=0, aix=0; i<m; i++) for(int j=0; j<n; j++, aix++) @@ -2060,7 +2059,7 @@ public class LibMatrixReorg tmp[i] = in.quickGetValue(ixin+i, 0); } else { //DENSE - System.arraycopy(in.denseBlock, ixin, tmp, 0, len); + System.arraycopy(in.getDenseBlockValues(), ixin, tmp, 0, len); } //init index array @@ -2078,7 +2077,7 @@ public class LibMatrixReorg */ private static void sortReverseDense( MatrixBlock m1 ) { int rlen = m1.rlen; - double[] a = m1.denseBlock; + double[] a = m1.getDenseBlockValues(); for( int i=0; i<rlen/2; i++ ) { double tmp = a[i]; a[i] = a[rlen - i -1];
