You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by gw...@apache.org on 2017/08/17 19:16:39 UTC
systemml git commit: [MINOR] Fix javadoc warning
Repository: systemml
Updated Branches:
refs/heads/master 830e6589f -> c18352f29
[MINOR] Fix javadoc warning
Closes #625.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/c18352f2
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/c18352f2
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/c18352f2
Branch: refs/heads/master
Commit: c18352f29368569e6f1ffc475ba2f9b0fab6c403
Parents: 830e658
Author: Glenn Weidner <gw...@us.ibm.com>
Authored: Thu Aug 17 12:13:23 2017 -0700
Committer: Glenn Weidner <gw...@us.ibm.com>
Committed: Thu Aug 17 12:13:23 2017 -0700
----------------------------------------------------------------------
.../instructions/gpu/context/GPUContext.java | 96 +++++++++++++++-----
1 file changed, 72 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/c18352f2/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/GPUContext.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/GPUContext.java b/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/GPUContext.java
index 4c0562d..f107f47 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/GPUContext.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/gpu/context/GPUContext.java
@@ -65,8 +65,8 @@ import jcuda.runtime.JCuda;
import jcuda.runtime.cudaDeviceProp;
/**
- * Represents a context per GPU accessible through the same JVM
- * Each context holds cublas, cusparse, cudnn... handles which are separate for each GPU
+ * Represents a context per GPU accessible through the same JVM.
+ * Each context holds cublas, cusparse, cudnn... handles which are separate for each GPU.
*/
public class GPUContext {
@@ -187,12 +187,22 @@ public class GPUContext {
}
}
+ /**
+ * Returns which device is currently being used.
+ *
+ * @return the current device for the calling host thread
+ */
public static int cudaGetDevice() {
int[] device = new int[1];
JCuda.cudaGetDevice(device);
return device[0];
}
+ /**
+ * Returns which device is assigned to this GPUContext instance.
+ *
+ * @return active device assigned to this GPUContext instance
+ */
public int getDeviceNum() {
return deviceNum;
}
@@ -201,8 +211,10 @@ public class GPUContext {
* Sets the device for the calling thread.
* This method must be called after
* {@link org.apache.sysml.runtime.controlprogram.context.ExecutionContext#getGPUContext(int)}
- * If in a multi-threaded env like parfor, this method must be called when in the
- * appropriate thread
+ * If in a multi-threaded environment like parfor, this method must be called when in the
+ * appropriate thread.
+ *
+ * @throws DMLRuntimeException if DMLRuntimeException occurs
*/
public void initializeThread() throws DMLRuntimeException {
cudaSetDevice(deviceNum);
@@ -295,7 +307,7 @@ public class GPUContext {
}
/**
- * Does lazy cudaFree calls
+ * Does lazy cudaFree calls.
*
* @param toFree {@link Pointer} instance to be freed
*/
@@ -304,7 +316,7 @@ public class GPUContext {
}
/**
- * does lazy/eager cudaFree calls
+ * Does lazy/eager cudaFree calls.
*
* @param toFree {@link Pointer} instance to be freed
* @param eager true if to be done eagerly
@@ -314,7 +326,7 @@ public class GPUContext {
}
/**
- * Does lazy cudaFree calls
+ * Does lazy cudaFree calls.
*
* @param instructionName name of the instruction for which to record per instruction free time, null if do not want to record
* @param toFree {@link Pointer} instance to be freed
@@ -324,7 +336,7 @@ public class GPUContext {
}
/**
- * Does cudaFree calls, lazily
+ * Does cudaFree calls, lazily.
*
* @param instructionName name of the instruction for which to record per instruction free time, null if do not want to record
* @param toFree {@link Pointer} instance to be freed
@@ -366,7 +378,7 @@ public class GPUContext {
}
/**
- * Thin wrapper over {@link GPUContext#evict(long)}
+ * Thin wrapper over {@link GPUContext#evict(long)}.
*
* @param size size to check
* @throws DMLRuntimeException if DMLRuntimeException occurs
@@ -376,7 +388,7 @@ public class GPUContext {
}
/**
- * Thin wrapper over {@link GPUContext#evict(long)}
+ * Thin wrapper over {@link GPUContext#evict(long)}.
*
* @param instructionName instructionName name of the instruction for which performance measurements are made
* @param size size to check
@@ -389,7 +401,7 @@ public class GPUContext {
}
/**
- * Convenience wrapper over {@link GPUContext#evict(String, long)}
+ * Convenience wrapper over {@link GPUContext#evict(String, long)}.
*
* @param GPUSize Desired size to be freed up on the GPU
* @throws DMLRuntimeException If no blocks to free up or if not enough blocks with zero locks on them.
@@ -492,7 +504,7 @@ public class GPUContext {
}
/**
- * Whether the GPU associated with this {@link GPUContext} has recorded the usage of a certain block
+ * Whether the GPU associated with this {@link GPUContext} has recorded the usage of a certain block.
*
* @param o the block
* @return true if present, false otherwise
@@ -520,7 +532,7 @@ public class GPUContext {
}
/**
- * Gets the available memory on GPU that SystemML can use
+ * Gets the available memory on GPU that SystemML can use.
*
* @return the available memory in bytes
*/
@@ -532,7 +544,7 @@ public class GPUContext {
}
/**
- * Makes sure that GPU that SystemML is trying to use has the minimum compute capability needed
+ * Makes sure that GPU that SystemML is trying to use has the minimum compute capability needed.
*
* @throws DMLRuntimeException if the compute capability is less than what is required
*/
@@ -560,12 +572,18 @@ public class GPUContext {
}
}
+ /**
+ * Instantiates a new {@link GPUObject} initialized with the given {@link org.apache.sysml.runtime.controlprogram.caching.MatrixObject MatrixObject}.
+ *
+ * @param mo a {@link org.apache.sysml.runtime.controlprogram.caching.MatrixObject MatrixObject} that represents a matrix
+ * @return a new {@link GPUObject} instance
+ */
public GPUObject createGPUObject(MatrixObject mo) {
return new GPUObject(this, mo);
}
/**
- * Gets the device properties for the active GPU (set with cudaSetDevice())
+ * Gets the device properties for the active GPU (set with cudaSetDevice()).
*
* @return the device properties
* @throws DMLRuntimeException ?
@@ -575,7 +593,7 @@ public class GPUContext {
}
/**
- * Gets the maximum number of threads per block for "active" GPU
+ * Gets the maximum number of threads per block for "active" GPU.
*
* @return the maximum number of threads per block
* @throws DMLRuntimeException ?
@@ -586,7 +604,7 @@ public class GPUContext {
}
/**
- * Gets the maximum number of blocks supported by the active cuda device
+ * Gets the maximum number of blocks supported by the active cuda device.
*
* @return the maximum number of blocks supported
* @throws DMLRuntimeException ?
@@ -597,7 +615,7 @@ public class GPUContext {
}
/**
- * Gets the shared memory per block supported by the active cuda device
+ * Gets the shared memory per block supported by the active cuda device.
*
* @return the shared memory per block
* @throws DMLRuntimeException ?
@@ -608,7 +626,7 @@ public class GPUContext {
}
/**
- * Gets the warp size supported by the active cuda device
+ * Gets the warp size supported by the active cuda device.
*
* @return the warp size
* @throws DMLRuntimeException ?
@@ -618,32 +636,62 @@ public class GPUContext {
return deviceProp.warpSize;
}
+ /**
+ * Returns the cudnnHandle for Deep Neural Network operations on the GPU.
+ *
+ * @return cudnnHandle for current thread
+ */
public cudnnHandle getCudnnHandle() {
return cudnnHandle.get();
}
+ /**
+ * Returns cublasHandle for BLAS operations on the GPU.
+ *
+ * @return cublasHandle for current thread
+ */
public cublasHandle getCublasHandle() {
return cublasHandle.get();
}
+ /**
+ * Returns cusparseHandle for certain sparse BLAS operations on the GPU.
+ *
+ * @return cusparseHandle for current thread
+ */
public cusparseHandle getCusparseHandle() {
return cusparseHandle.get();
}
+ /**
+ * Returns cusolverDnHandle for invoking solve() function on dense matrices on the GPU.
+ *
+ * @return cusolverDnHandle for current thread
+ */
public cusolverDnHandle getCusolverDnHandle() {
return cusolverDnHandle.get();
}
+ /**
+ * Returns cusolverSpHandle for invoking solve() function on sparse matrices on the GPU.
+ *
+ * @return cusolverSpHandle for current thread
+ */
public cusolverSpHandle getCusolverSpHandle() {
return cusolverSpHandle.get();
}
+ /**
+ * Returns utility class used to launch custom CUDA kernel, specific to the active GPU for this GPUContext.
+ *
+ * @return {@link JCudaKernels} for current thread
+ */
public JCudaKernels getKernels() {
return kernels.get();
}
/**
- * Destroys this GPUContext object
+ * Destroys this GPUContext object.
*
* @throws DMLRuntimeException if error
*/
@@ -658,8 +706,8 @@ public class GPUContext {
}
/**
- * Clears all memory used by this {@link GPUContext}
- * Be careful to ensure that no memory is currently being used in the temporary memory before invoking this
+ * Clears all memory used by this {@link GPUContext}.
+ * Be careful to ensure that no memory is currently being used in the temporary memory before invoking this.
* If memory is being used between MLContext invocations, they are pointed to by a {@link GPUObject} instance
* which would be part of the {@link MatrixObject}. The cleanup of that {@link MatrixObject} instance will
* cause the memory associated with that block on the GPU to be freed up.
@@ -681,7 +729,7 @@ public class GPUContext {
}
/**
- * Clears up the memory used to optimize cudaMalloc/cudaFree calls
+ * Clears up the memory used to optimize cudaMalloc/cudaFree calls.
*/
public void clearTemporaryMemory() {
// To record the cuda block sizes needed by allocatedGPUObjects, others are cleared up.
@@ -724,7 +772,7 @@ public class GPUContext {
}
/**
- * Eviction policies for {@link GPUContext#evict(long)}
+ * Eviction policies for {@link GPUContext#evict(long)}.
*/
public enum EvictionPolicy {
LRU, LFU, MIN_EVICT