Repository: incubator-systemml
Updated Branches:
  refs/heads/master 58a954609 -> afe7ebec0


[SYSTEMML-701] Fix sparse block conversion and cleanup gpu integration

Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/afe7ebec
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/afe7ebec
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/afe7ebec

Branch: refs/heads/master
Commit: afe7ebec0fac02bd409e02bebb6e3df9042fcbc1
Parents: 58a9546
Author: Matthias Boehm <[email protected]>
Authored: Wed Aug 24 13:59:49 2016 +0200
Committer: Matthias Boehm <[email protected]>
Committed: Wed Aug 24 13:59:49 2016 +0200

----------------------------------------------------------------------
 .../controlprogram/caching/MatrixObject.java    | 10 ---------
 .../context/ExecutionContext.java               |  2 +-
 .../gpu/AggregateBinaryGPUInstruction.java      |  5 +++--
 .../instructions/gpu/context/JCudaContext.java  |  2 --
 .../instructions/gpu/context/JCudaObject.java   |  2 --
 .../runtime/matrix/data/LibMatrixCUDA.java      |  7 -------
 .../sysml/runtime/matrix/data/MatrixBlock.java  | 14 ++++++-------
 .../runtime/matrix/data/SparseBlockCSR.java     | 22 ++++++++++----------
 8 files changed, 21 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
 
b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
index fc5df81..b18b9ee 100644
--- 
a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
+++ 
b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
@@ -33,8 +33,6 @@ import org.apache.sysml.parser.Expression.ValueType;
 import org.apache.sysml.runtime.DMLRuntimeException;
 import 
org.apache.sysml.runtime.controlprogram.ParForProgramBlock.PDataPartitionFormat;
 import org.apache.sysml.runtime.controlprogram.context.SparkExecutionContext;
-import org.apache.sysml.runtime.instructions.gpu.context.GPUContext;
-import org.apache.sysml.runtime.instructions.gpu.context.GPUObject;
 import org.apache.sysml.runtime.instructions.spark.data.RDDObject;
 import org.apache.sysml.runtime.matrix.MatrixCharacteristics;
 import org.apache.sysml.runtime.matrix.MatrixDimensionsMetaData;
@@ -662,12 +660,4 @@ public class MatrixObject extends 
CacheableData<MatrixBlock>
                long newnnz = SparkExecutionContext.writeRDDtoHDFS(rdd, fname, 
oinfo);  
                ((MatrixDimensionsMetaData) 
_metaData).getMatrixCharacteristics().setNonZeros(newnnz);
        }
-       
-       /**
-        * Allocates the {@link GPUObject} which will be used
-        * to track the pointer on the GPU
-        */
-       public void allocateGPUObject(){
-               setGPUObject(GPUContext.createGPUObject(this));
-       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/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 1ad1525..dd20fd0 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
@@ -294,7 +294,7 @@ public class ExecutionContext
        public MatrixObject allocateGPUMatrixObject(String varName) throws 
DMLRuntimeException {
                MatrixObject mo = getMatrixObject(varName);
                if( mo.getGPUObject() == null ) {
-                       mo.allocateGPUObject();
+                       mo.setGPUObject(GPUContext.createGPUObject(mo));
                }
                return mo;
        }

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/instructions/gpu/AggregateBinaryGPUInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/AggregateBinaryGPUInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/AggregateBinaryGPUInstruction.java
index 5ed9b51..a668607 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/AggregateBinaryGPUInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/AggregateBinaryGPUInstruction.java
@@ -102,8 +102,7 @@ public class AggregateBinaryGPUInstruction extends 
GPUInstruction
         int clen = (int) (_isRightTransposed ? m2.getNumRows() : 
m2.getNumColumns());
         
         ec.setMetaData(_output.getName(), rlen, clen);
-        //MatrixObject out = 
ec.getMatrixOutputForGPUInstruction(_output.getName(), false);
-        MatrixObject out = LibMatrixCUDA.matmult(ec, m1, m2, 
_output.getName(), _isLeftTransposed, _isRightTransposed);
+        LibMatrixCUDA.matmult(ec, m1, m2, _output.getName(), 
_isLeftTransposed, _isRightTransposed);
         
                //release inputs/outputs
                ec.releaseMatrixInputForGPUInstruction(_input1.getName());
@@ -117,6 +116,7 @@ public class AggregateBinaryGPUInstruction extends 
GPUInstruction
         * @return
         * @throws DMLRuntimeException
         */
+       @SuppressWarnings("unused")
        private MatrixBlock transpose(MatrixBlock m1) throws 
DMLRuntimeException {
                ReorgOperator r_op = new 
ReorgOperator(SwapIndex.getSwapIndexFnObject(), 1);
                return (MatrixBlock) (m1.reorgOperations(r_op, new 
MatrixBlock(), 0, 0, 0));
@@ -129,6 +129,7 @@ public class AggregateBinaryGPUInstruction extends 
GPUInstruction
         * @return
         * @throws DMLRuntimeException
         */
+       @SuppressWarnings("unused")
        private boolean isSparse(ExecutionContext ec, String var) throws 
DMLRuntimeException {
                MatrixObject mo = ec.getMatrixObject(var);
                return LibMatrixCUDA.isInSparseFormat(mo);

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaContext.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaContext.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaContext.java
index 2ef00d4..bc16a05 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaContext.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaContext.java
@@ -29,7 +29,6 @@ import org.apache.sysml.utils.Statistics;
 import jcuda.driver.JCudaDriver;
 import jcuda.jcublas.JCublas2;
 import jcuda.jcublas.cublasHandle;
-import jcuda.jcublas.cublasPointerMode;
 import jcuda.jcudnn.JCudnn;
 import jcuda.runtime.JCuda;
 import jcuda.jcudnn.cudnnHandle;
@@ -38,7 +37,6 @@ import jcuda.jcusparse.cusparseHandle;
 
 import static jcuda.jcudnn.JCudnn.cudnnCreate;
 import static jcuda.jcublas.JCublas2.cublasCreate;
-import static jcuda.jcublas.JCublas2.cublasSetPointerMode;
 import static jcuda.jcublas.JCublas2.cublasDestroy;
 import static jcuda.jcudnn.JCudnn.cudnnDestroy;
 import static jcuda.jcusparse.JCusparse.cusparseDestroy;

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaObject.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaObject.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaObject.java
index 88ebf46..f7f3a73 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaObject.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/JCudaObject.java
@@ -47,9 +47,7 @@ import org.apache.sysml.utils.Statistics;
 
 import jcuda.Pointer;
 import jcuda.Sizeof;
-import jcuda.jcublas.JCublas2;
 import jcuda.jcublas.cublasHandle;
-import jcuda.jcublas.cublasOperation;
 import jcuda.jcusparse.JCusparse;
 import jcuda.jcusparse.cusparseDirection;
 import jcuda.jcusparse.cusparseHandle;

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java
index 07cfa0c..af80bf6 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java
@@ -45,18 +45,12 @@ import static 
jcuda.jcudnn.cudnnPoolingMode.CUDNN_POOLING_MAX;
 import static jcuda.jcudnn.cudnnTensorFormat.CUDNN_TENSOR_NCHW;
 import static jcuda.jcusparse.JCusparse.cusparseDcsrgemm;
 import static jcuda.jcusparse.JCusparse.cusparseDcsrmv;
-import static jcuda.jcusparse.JCusparse.cusparseDdense2csr;
-import static jcuda.jcusparse.JCusparse.cusparseDnnz;
 import static 
jcuda.jcusparse.cusparseOperation.CUSPARSE_OPERATION_NON_TRANSPOSE;
 import static jcuda.jcusparse.cusparseOperation.CUSPARSE_OPERATION_TRANSPOSE;
 import static jcuda.runtime.JCuda.cudaFree;
 import static jcuda.runtime.JCuda.cudaMalloc;
 
-import static 
jcuda.jcusparse.cusparseOperation.CUSPARSE_OPERATION_NON_TRANSPOSE;
-import static jcuda.jcusparse.cusparseOperation.CUSPARSE_OPERATION_TRANSPOSE;
-import static jcuda.runtime.JCuda.cudaFree;
 import static jcuda.runtime.JCuda.cudaMemcpy;
-import static jcuda.runtime.cudaMemcpyKind.cudaMemcpyDeviceToHost;
 import static jcuda.runtime.cudaMemcpyKind.cudaMemcpyHostToDevice;
 
 
@@ -82,7 +76,6 @@ import jcuda.jcudnn.cudnnHandle;
 import jcuda.jcudnn.cudnnPoolingDescriptor;
 import jcuda.jcudnn.cudnnTensorDescriptor;
 import jcuda.jcusparse.cusparseHandle;
-import java.util.Arrays;
 
 //FIXME move could to respective instructions, this is not a block library
 public class LibMatrixCUDA {

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
index 9d233fc..da17207 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
@@ -95,9 +95,9 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
        public static final double SPARSITY_TURN_POINT = 0.4;
        //sparsity threshold for ultra-sparse matrix operations (40nnz in a 
1kx1k block)
        public static final double ULTRA_SPARSITY_TURN_POINT = 0.00004; 
-       //default sparse block type: modified compressed sparse rows, CSR would 
best suited to use cuSparse 
+       //default sparse block type: modified compressed sparse rows, for 
efficient incremental construction
        public static final SparseBlock.Type DEFAULT_SPARSEBLOCK = 
SparseBlock.Type.MCSR;
-       //default sparse block type for update in place: compressed sparse rows 
to prevent serialization
+       //default sparse block type for update in place: compressed sparse 
rows, to prevent serialization
        public static final SparseBlock.Type DEFAULT_INPLACE_SPARSEBLOCK = 
SparseBlock.Type.CSR;
        //basic header (int rlen, int clen, byte type)
        public static final int HEADER_SIZE = 9;
@@ -160,12 +160,10 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
         * @param nnz   number of non zeroes
         * @param sparseBlock
         */
-       public MatrixBlock(int rows, int cols, long nnz, SparseBlock 
sparseBlock) {
-               this.rlen = rows;
-               this.clen = cols;
-               this.nonZeros = nnz;
-               this.sparse = true;
-               this.sparseBlock = sparseBlock;
+       public MatrixBlock(int rl, int cl, long nnz, SparseBlock sblock) {
+               this(rl, cl, true, nnz);
+               nonZeros = nnz;
+               sparseBlock = sblock;
        }
        
        public MatrixBlock(MatrixBlock that, SparseBlock.Type stype, boolean 
deep) {

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/afe7ebec/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
index ab4e665..04a6cb7 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
@@ -99,11 +99,9 @@ public class SparseBlockCSR extends SparseBlock
                                        int alen = sblock.size(i);
                                        int[] aix = sblock.indexes(i);
                                        double[] avals = sblock.values(i);
-                                       for( int j=apos; j<apos+alen; j++ ) {
-                                               _indexes[pos] = aix[j];
-                                               _values[pos] = avals[j];
-                                               pos++;
-                                       }
+                                       System.arraycopy(aix, apos, _indexes, 
pos, alen);
+                                       System.arraycopy(avals, apos, _values, 
pos, alen);
+                                       pos += alen;
                                }
                                _ptr[i+1]=pos;
                        }                       
@@ -125,12 +123,14 @@ public class SparseBlockCSR extends SparseBlock
                _size = nnz;
                
                for( int i=0, pos=0; i<rlen; i++ ) {
-                       int alen = rows[i].size();
-                       int[] aix = rows[i].indexes();
-                       double[] avals = rows[i].values();
-                       System.arraycopy(aix, 0, _indexes, pos, alen);
-                       System.arraycopy(avals, 0, _values, pos, alen);
-                       pos += alen;
+                       if( rows[i]!=null && !rows[i].isEmpty() ) {
+                               int alen = rows[i].size();
+                               int[] aix = rows[i].indexes();
+                               double[] avals = rows[i].values();
+                               System.arraycopy(aix, 0, _indexes, pos, alen);
+                               System.arraycopy(avals, 0, _values, pos, alen);
+                               pos += alen;
+                       }
                        _ptr[i+1]=pos;  
                }
        }

Reply via email to