public class Rmm extends Object
Modifier and Type | Class and Description |
---|---|
static class |
Rmm.LogConf
What to send RMM alloc and free logs to.
|
Constructor and Description |
---|
Rmm() |
Modifier and Type | Method and Description |
---|---|
static DeviceMemoryBuffer |
alloc(long size)
Allocate device memory and return a pointer to device memory, using stream 0.
|
static DeviceMemoryBuffer |
alloc(long size,
Cuda.Stream stream)
Allocate device memory and return a pointer to device memory.
|
static CudaMemoryBuffer |
allocCuda(long size,
Cuda.Stream stream)
Allocate device memory using `cudaMalloc` and return a pointer to device memory.
|
static long |
allocFromFallbackPinnedPool(long size) |
static long |
allocFromPinnedPool(long poolPtr,
long size) |
static void |
cleanupDefaultCudaDevice() |
static void |
clearEventHandler()
Clears the active RMM event handler if one is set.
|
static boolean |
configureDefaultCudfPinnedPoolSize(long size)
Sets the size of the cuDF default pinned pool.
|
static void |
freeFromFallbackPinnedPool(long ptr,
long size) |
static void |
freeFromPinnedPool(long poolPtr,
long ptr,
long size) |
static RmmDeviceMemoryResource |
getCurrentDeviceResource()
Get the RmmDeviceMemoryResource that was last set through the java APIs.
|
static long |
getMaximumTotalBytesAllocated()
Returns the maximum amount of RMM memory (Bytes) outstanding during the
lifetime of the process.
|
static long |
getPoolSize()
Get the most recently set pool size or -1 if RMM has not been initialized or pooling is
not enabled.
|
static long |
getScopedMaximumBytesAllocated()
Returns the maximum amount of RMM memory (Bytes) outstanding since the last
`resetScopedMaximumOutstanding` call was issued (it is "scoped" because it's the
maximum amount seen since the last reset).
|
static long |
getTotalBytesAllocated()
Return the amount of RMM memory allocated in bytes.
|
static RmmTrackingResourceAdaptor<RmmDeviceMemoryResource> |
getTracker()
Get the currently set RmmTrackingResourceAdaptor that is set.
|
static void |
initDefaultCudaDevice() |
static void |
initialize(int allocationMode,
Rmm.LogConf logConf,
long poolSize)
Initialize memory manager state and storage.
|
static boolean |
isInitialized()
Check if RMM has been initialized already or not.
|
static boolean |
isPoolingEnabled()
Return true if rmm is initialized and pooling has been enabled, else false.
|
static Rmm.LogConf |
logTo(File location)
Create a config that will write alloc/free logs to a file.
|
static Rmm.LogConf |
logToStderr()
Create a config that will write alloc/free logs to stderr.
|
static Rmm.LogConf |
logToStdout()
Create a config that will write alloc/free logs to stdout.
|
static long |
newPinnedPoolMemoryResource(long initSize,
long maxSize) |
static void |
releasePinnedPoolMemoryResource(long poolPtr) |
static void |
resetScopedMaximumBytesAllocated()
Resets a scoped maximum counter of RMM memory used to keep track of usage between
code sections while debugging.
|
static void |
resetScopedMaximumBytesAllocated(long initialValue)
Resets a scoped maximum counter of RMM memory used to keep track of usage between
code sections while debugging.
|
static long |
setCudfPinnedPoolMemoryResource(long poolPtr) |
static RmmDeviceMemoryResource |
setCurrentDeviceResource(RmmDeviceMemoryResource newResource,
RmmDeviceMemoryResource expectedResource,
boolean forceChange)
Set the current device resource that RMM should use for all allocations and de-allocations.
|
static void |
setEventHandler(RmmEventHandler handler)
Sets the event handler to be called on RMM events (e.g.: allocation failure).
|
static void |
setEventHandler(RmmEventHandler handler,
boolean enableDebug)
Sets the event handler to be called on RMM events (e.g.: allocation failure) and
optionally enable debug mode (callbacks on every allocate and deallocate)
|
static void |
shutdown()
Shut down any initialized RMM instance.
|
static void |
shutdown(long forceGCInterval,
long maxWaitTime,
TimeUnit units)
Shut down any initialized RMM instance.
|
public static Rmm.LogConf logTo(File location)
public static Rmm.LogConf logToStdout()
public static Rmm.LogConf logToStderr()
public static RmmDeviceMemoryResource getCurrentDeviceResource()
public static RmmTrackingResourceAdaptor<RmmDeviceMemoryResource> getTracker()
public static RmmDeviceMemoryResource setCurrentDeviceResource(RmmDeviceMemoryResource newResource, RmmDeviceMemoryResource expectedResource, boolean forceChange)
NOTE: All cudf methods will set the chosen CUDA device in the CUDA context of the calling thread after this returns and `newResource` was not null.
If `newResource` is null this will unset the default CUDA device and mark RMM as not initialized.
Be aware that for many of these APIs to work the RmmDeviceMemoryResource will need an `RmmTrackingResourceAdaptor`. If one is not found and `newResource` is not null it will be added to `newResource`.
Also be very careful with how you set this up. It is possible to set up an RmmDeviceMemoryResource that is just bad, like multiple pools or pools on top of an RmmAsyncMemoryResource, that does pooling already. Unless you know what you are doing it is best to just use the `initialize` API instead.
newResource
- the new resource to set. If it is null an RmmCudaMemoryResource will be
used, and RMM will be set as not initialized.expectedResource
- the resource that we expect to be set. This is to let us avoid race
conditions with multiple things trying to set this at once. It should
never happen, but just to be careful.forceChange
- if true then the expectedResource check is not done.public static void initialize(int allocationMode, Rmm.LogConf logConf, long poolSize) throws RmmException
NOTE: All cudf methods will set the chosen CUDA device in the CUDA context of the calling thread after this returns.
allocationMode
- Allocation strategy to use. Bit set using
RmmAllocationMode.CUDA_DEFAULT
,
RmmAllocationMode.POOL
,
RmmAllocationMode.ARENA
,
RmmAllocationMode.CUDA_ASYNC
and
RmmAllocationMode.CUDA_MANAGED_MEMORY
logConf
- How to do logging or null if you don't want topoolSize
- The initial pool size in bytesIllegalStateException
- if RMM has already been initializedRmmException
public static boolean configureDefaultCudfPinnedPoolSize(long size)
size
- initial and maximum size for the cuDF default pinned pool.
Pass size=0 to disable the default pool.public static long getPoolSize()
public static boolean isPoolingEnabled()
public static boolean isInitialized() throws RmmException
RmmException
public static long getTotalBytesAllocated()
public static long getMaximumTotalBytesAllocated()
public static void resetScopedMaximumBytesAllocated(long initialValue)
initialValue
- an initial value (in Bytes) to use for this scoped counterpublic static void resetScopedMaximumBytesAllocated()
public static long getScopedMaximumBytesAllocated()
If the memory used is net negative (for example if only frees happened since reset, and we reset to 0), then result will be 0.
If `resetScopedMaximumBytesAllocated` is never called, the scope is the whole program and is equivalent to `getMaximumTotalBytesAllocated`.
public static void setEventHandler(RmmEventHandler handler) throws RmmException
handler
- event handler to invoke on RMM events or null to clear an existing handlerRmmException
- if an active handler is already setpublic static void setEventHandler(RmmEventHandler handler, boolean enableDebug) throws RmmException
NOTE: Only enable debug mode when necessary, as code will run much slower!
handler
- event handler to invoke on RMM events or null to clear an existing handlerenableDebug
- if true enable debug callbacks in RmmEventHandler
(onAllocated, onDeallocated)RmmException
- if an active handler is already setpublic static void clearEventHandler() throws RmmException
RmmException
public static void initDefaultCudaDevice()
public static void cleanupDefaultCudaDevice()
public static void shutdown() throws RmmException
RmmException
- on any error. This includes if there are outstanding allocations that
could not be collected.public static void shutdown(long forceGCInterval, long maxWaitTime, TimeUnit units) throws RmmException
forceGCInterval
- how frequently should we force a JVM GC. This is just a recommendation
to the JVM to do a gc.maxWaitTime
- the maximum amount of time to wait for all objects to be collected before
throwing an exception.units
- the units for forceGcInterval and maxWaitTime.RmmException
- on any error. This includes if there are outstanding allocations that
could not be collected before maxWaitTime.public static DeviceMemoryBuffer alloc(long size)
size
- The size in bytes of the allocated memory regionpublic static DeviceMemoryBuffer alloc(long size, Cuda.Stream stream)
size
- The size in bytes of the allocated memory regionstream
- The stream in which to synchronize this command.public static CudaMemoryBuffer allocCuda(long size, Cuda.Stream stream)
size
- The size in bytes of the allocated memory regionstream
- The stream in which to synchronize this command.public static long newPinnedPoolMemoryResource(long initSize, long maxSize)
public static long setCudfPinnedPoolMemoryResource(long poolPtr)
public static void releasePinnedPoolMemoryResource(long poolPtr)
public static long allocFromPinnedPool(long poolPtr, long size)
public static void freeFromPinnedPool(long poolPtr, long ptr, long size)
public static long allocFromFallbackPinnedPool(long size)
public static void freeFromFallbackPinnedPool(long ptr, long size)
Copyright © 2024. All rights reserved.