Class GPUObject
java.lang.Object
org.apache.sysds.runtime.instructions.gpu.context.GPUObject
Handle to a matrix block on the GPU
-
Constructor Summary
ConstructorsConstructorDescriptionGPUObject(GPUContext gCtx, MatrixObject mat, jcuda.Pointer ptr) GPUObject(GPUContext gCtx, GPUObject that, MatrixObject mat) -
Method Summary
Modifier and TypeMethodDescriptionbooleanbooleanacquireDeviceModifyDense(boolean initialize) booleanbooleanacquireDeviceModifySparse(boolean initialize) booleanacquireDeviceRead(String opcode) booleanacquireHostRead(String instName) if the data is allocated on the GPU and is dirty, it is copied back to the host memoryvoidvoidvoidallocateAndFillDense(double v) Allocates a dense matrix of size obtained from the attached matrix metadata and fills it up with a single valuevoidAllocates a sparse and emptyGPUObjectThis is the result of operations that are both non zero matrices.voidClears the data associated with thisGPUObjectinstancevoidRemoves the dense pointer and potential soft referencevoidclone()static CSRPointercolumnMajorDenseToRowMajorSparse(GPUContext gCtx, jcuda.jcusparse.cusparseHandle cusparseHandle, jcuda.Pointer densePtr, int rows, int cols) Convenience method to convert a CSR matrix to a dense matrix on the GPU Since the allocated matrix is temporary, bookkeeping is not updated.voidConvenience method.voidConvenience method.voidConverts this GPUObject from dense to sparse format.longjcuda.PointerPointer to dense matrixlongPointer to sparse matrixlongBeing allocated is a prerequisite for computing nnz.static longgetPointerAddress(jcuda.Pointer p) longConvenience method to directly examine the Sparse matrix on GPUbooleanbooleanChecks if the dense pointer is nullbooleanisDirty()Whether this block is dirty on the GPUbooleanisLocked()booleanisSparse()booleanIf thisGPUObjectis sparse and empty Being allocated is a prerequisite to being sparse and empty.voidReleases input allocated on GPUvoidreleases output allocated on GPUvoidvoidvoidvoidsetDensePointer(jcuda.Pointer densePtr) Convenience method to directly set the dense matrix pointer on GPUvoidsetDirty(boolean flag) voidsetSparseMatrixCudaPointer(CSRPointer sparseMatrixPtr) Convenience method to directly set the sparse matrix on GPU Needed for operations like cusparseDcsrgemm(cusparseHandle, int, int, int, int, int, cusparseMatDescr, int, Pointer, Pointer, Pointer, cusparseMatDescr, int, Pointer, Pointer, Pointer, cusparseMatDescr, Pointer, Pointer, Pointer)voidMore efficient method to convert sparse to dense but returns dense in column major formatvoidConvert sparse to dense (Performs transpose, use sparseToColumnMajorDense if the kernel can deal with column major format)voidsparseToDense(String instructionName) Convert sparse to dense (Performs transpose, use sparseToColumnMajorDense if the kernel can deal with column major format) Also records per instruction invokation of sparseToDense.static inttoIntExact(long l) toString()static jcuda.Pointertranspose(GPUContext gCtx, jcuda.Pointer densePtr, int m, int n, int lda, int ldc) Transposes a dense matrix on the GPU by calling the cublasDgeam operation
-
Constructor Details
-
GPUObject
-
GPUObject
-
-
Method Details
-
getDensePointer
public jcuda.Pointer getDensePointer()Pointer to dense matrix- Returns:
- a pointer to the dense matrix
-
isDensePointerNull
public boolean isDensePointerNull()Checks if the dense pointer is null- Returns:
- if the state of dense pointer is null
-
clearDensePointer
public void clearDensePointer()Removes the dense pointer and potential soft reference -
getMatrixObject
-
setDensePointer
public void setDensePointer(jcuda.Pointer densePtr) Convenience method to directly set the dense matrix pointer on GPU- Parameters:
densePtr- dense pointer
-
setDirty
public void setDirty(boolean flag) -
clone
-
transpose
public static jcuda.Pointer transpose(GPUContext gCtx, jcuda.Pointer densePtr, int m, int n, int lda, int ldc) Transposes a dense matrix on the GPU by calling the cublasDgeam operation- Parameters:
gCtx- a validGPUContextdensePtr- Pointer to dense matrix on the GPUm- rows in ouput matrixn- columns in output matrixlda- rows in input matrixldc- columns in output matrix- Returns:
- transposed matrix
-
columnMajorDenseToRowMajorSparse
public static CSRPointer columnMajorDenseToRowMajorSparse(GPUContext gCtx, jcuda.jcusparse.cusparseHandle cusparseHandle, jcuda.Pointer densePtr, int rows, int cols) Convenience method to convert a CSR matrix to a dense matrix on the GPU Since the allocated matrix is temporary, bookkeeping is not updated. Also note that the input dense matrix is expected to be in COLUMN MAJOR FORMAT Caller is responsible for deallocating memory on GPU.- Parameters:
gCtx- a validGPUContextcusparseHandle- handle to cusparse librarydensePtr- [in] dense matrix pointer on the GPU in row majorrows- number of rowscols- number of columns- Returns:
- CSR (compressed sparse row) pointer
-
getSparseMatrixCudaPointer
Convenience method to directly examine the Sparse matrix on GPU- Returns:
- CSR (compressed sparse row) pointer
-
setSparseMatrixCudaPointer
Convenience method to directly set the sparse matrix on GPU Needed for operations like cusparseDcsrgemm(cusparseHandle, int, int, int, int, int, cusparseMatDescr, int, Pointer, Pointer, Pointer, cusparseMatDescr, int, Pointer, Pointer, Pointer, cusparseMatDescr, Pointer, Pointer, Pointer)- Parameters:
sparseMatrixPtr- CSR (compressed sparse row) pointer
-
denseToSparse
public void denseToSparse()Converts this GPUObject from dense to sparse format. -
denseRowMajorToColumnMajor
public void denseRowMajorToColumnMajor()Convenience method. Converts Row Major Dense Matrix to Column Major Dense Matrix -
denseColumnMajorToRowMajor
public void denseColumnMajorToRowMajor()Convenience method. Converts Column Major Dense Matrix to Row Major Dense Matrix -
sparseToDense
public void sparseToDense()Convert sparse to dense (Performs transpose, use sparseToColumnMajorDense if the kernel can deal with column major format) -
sparseToDense
Convert sparse to dense (Performs transpose, use sparseToColumnMajorDense if the kernel can deal with column major format) Also records per instruction invokation of sparseToDense.- Parameters:
instructionName- Name of the instruction for which statistics are recorded inGPUStatistics
-
sparseToColumnMajorDense
public void sparseToColumnMajorDense()More efficient method to convert sparse to dense but returns dense in column major format -
isSparse
public boolean isSparse() -
isAllocated
public boolean isAllocated() -
allocateSparseAndEmpty
public void allocateSparseAndEmpty()Allocates a sparse and emptyGPUObjectThis is the result of operations that are both non zero matrices. -
allocateAndFillDense
public void allocateAndFillDense(double v) Allocates a dense matrix of size obtained from the attached matrix metadata and fills it up with a single value- Parameters:
v- value to fill up the dense matrix
-
isSparseAndEmpty
public boolean isSparseAndEmpty()If thisGPUObjectis sparse and empty Being allocated is a prerequisite to being sparse and empty.- Returns:
- true if sparse and empty
-
getNnz
Being allocated is a prerequisite for computing nnz. Note: if the matrix is in dense format, it explicitly re-computes the number of nonzeros.- Parameters:
instName- instruction namerecomputeDenseNNZ- recompute NNZ if dense- Returns:
- the number of nonzeroes
-
acquireDeviceRead
-
acquireDeviceModifyDense
public boolean acquireDeviceModifyDense() -
acquireDeviceModifyDense
public boolean acquireDeviceModifyDense(boolean initialize) -
acquireDeviceModifySparse
public boolean acquireDeviceModifySparse() -
acquireDeviceModifySparse
public boolean acquireDeviceModifySparse(boolean initialize) -
acquireHostRead
if the data is allocated on the GPU and is dirty, it is copied back to the host memory- Parameters:
instName- name of the instruction- Returns:
- true if a copy to host happened, false otherwise
-
isLocked
public boolean isLocked() -
addReadLock
public void addReadLock() -
addWriteLock
public void addWriteLock() -
releaseReadLock
public void releaseReadLock() -
releaseWriteLock
public void releaseWriteLock() -
resetReadWriteLock
public void resetReadWriteLock() -
releaseInput
public void releaseInput()Releases input allocated on GPU -
releaseOutput
public void releaseOutput()releases output allocated on GPU -
getSizeOnDevice
public long getSizeOnDevice() -
getAllocatedSize
public long getAllocatedSize() -
toIntExact
public static int toIntExact(long l) -
clearData
Clears the data associated with thisGPUObjectinstance- Parameters:
opcode- opcode of the instructioneager- whether to be done synchronously or asynchronously- Throws:
DMLRuntimeException- if error occurs
-
clearGPUObject
public void clearGPUObject() -
getJcudaSparseMatrixPtr
Pointer to sparse matrix- Returns:
- ?
-
isDirty
public boolean isDirty()Whether this block is dirty on the GPU- Returns:
- ?
-
toString
-
getDensePointerAddress
public long getDensePointerAddress() -
getPointerAddress
public static long getPointerAddress(jcuda.Pointer p)
-