public class Rmm extends Object
修饰符和类型 | 类和说明 |
---|---|
static class |
Rmm.LogConf
要将 RMM 分配和释放日志发送到的位置。
|
构造方法和说明 |
---|
Rmm() |
修饰符和类型 | 方法和说明 |
---|---|
static DeviceMemoryBuffer |
alloc(long size)
分配设备内存并返回指向设备内存的指针,使用流 0。
|
static DeviceMemoryBuffer |
alloc(long size, Cuda.Stream stream)
分配设备内存并返回指向设备内存的指针。
|
static CudaMemoryBuffer |
allocCuda(long size, Cuda.Stream stream)
使用 `cudaMalloc` 分配设备内存并返回指向设备内存的指针。
|
static long |
allocFromFallbackPinnedPool(long size) |
static long |
allocFromPinnedPool(long poolPtr, long size) |
static void |
cleanupDefaultCudaDevice() |
static void |
clearEventHandler()
如果设置了活动 RMM 事件处理程序,则清除它。
|
static boolean |
configureDefaultCudfPinnedPoolSize(long size)
设置 cuDF 默认固定池的大小。
|
static void |
freeFromFallbackPinnedPool(long ptr, long size) |
static void |
freeFromPinnedPool(long poolPtr, long ptr, long size) |
static RmmDeviceMemoryResource |
getCurrentDeviceResource()
获取通过 Java API 最后设置的 RmmDeviceMemoryResource。
|
static long |
getMaximumTotalBytesAllocated()
返回进程生命周期内未释放的 RMM 内存的最大量(字节)。
|
static long |
getPoolSize()
获取最近设置的池大小,如果 RMM 尚未初始化或未启用池,则返回 -1。
|
static long |
getScopedMaximumBytesAllocated()
返回自上次调用 `resetScopedMaximumOutstanding` 以来未释放的 RMM 内存的最大量(字节)(它是“范围”的,因为它是自上次重置以来看到的最大量)。
|
static long |
getTotalBytesAllocated()
返回以字节为单位分配的 RMM 内存量。
|
static RmmTrackingResourceAdaptor<RmmDeviceMemoryResource> |
getTracker()
获取当前设置的 RmmTrackingResourceAdaptor。
|
static void |
initDefaultCudaDevice() |
static void |
initialize(int allocationMode, Rmm.LogConf logConf, long poolSize)
初始化内存管理器状态和存储。
|
static boolean |
isInitialized()
检查 RMM 是否已初始化。
|
static boolean |
isPoolingEnabled()
如果 RMM 已初始化且已启用池,则返回 true,否则返回 false。
|
static Rmm.LogConf |
logTo(File location)
创建将分配/释放日志写入文件的配置。
|
static Rmm.LogConf |
logToStderr()
创建将分配/释放日志写入标准错误输出的配置。
|
static Rmm.LogConf |
logToStdout()
创建将分配/释放日志写入标准输出的配置。
|
static long |
newPinnedPoolMemoryResource(long initSize, long maxSize) |
static void |
releasePinnedPoolMemoryResource(long poolPtr) |
static void |
resetScopedMaximumBytesAllocated()
重置用于在调试时跟踪代码段之间使用情况的 RMM 内存范围最大计数器。
|
static void |
resetScopedMaximumBytesAllocated(long initialValue)
重置用于在调试时跟踪代码段之间使用情况的 RMM 内存范围最大计数器。
|
static long |
setCudfPinnedPoolMemoryResource(long poolPtr) |
static RmmDeviceMemoryResource |
setCurrentDeviceResource(RmmDeviceMemoryResource newResource, RmmDeviceMemoryResource expectedResource, boolean forceChange)
设置 RMM 用于所有分配和释放的当前设备资源。
|
static void |
setEventHandler(RmmEventHandler handler)
设置在 RMM 事件(例如:分配失败)发生时调用的事件处理程序。
|
static void |
setEventHandler(RmmEventHandler handler, boolean enableDebug)
设置在 RMM 事件(例如:分配失败)发生时调用的事件处理程序,并可选择启用调试模式(每次分配和释放时的回调)。
|
static void |
shutdown()
关闭所有已初始化的 RMM 实例。
|
static void |
shutdown(long forceGCInterval, long maxWaitTime, TimeUnit units)
关闭所有已初始化的 RMM 实例。
|
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)
注意:如果 `newResource` 非空,所有 cuDF 方法在返回后都将在调用线程的 CUDA 上下文中设置所选的 CUDA 设备。
如果 `newResource` 为 null,此方法将取消设置默认 CUDA 设备并将 RMM 标记为未初始化。
请注意,为了使许多这些 API 工作,RmmDeviceMemoryResource 将需要一个 `RmmTrackingResourceAdaptor`。如果未找到且 `newResource` 非空,则将添加到 `newResource` 中。
此外,设置此项时请务必小心。可能会设置一个糟糕的 RmmDeviceMemoryResource,例如多个池或在已经进行池化的 RmmAsyncMemoryResource 之上设置池。除非您了解自己在做什么,否则最好只使用 `initialize` API。
newResource
- 要设置的新资源。如果为 null,将使用 RmmCudaMemoryResource,并且 RMM 将被设置为未初始化。expectedResource
- 我们期望设置的资源。这是为了避免多个事物同时尝试设置此项时出现竞争条件。这种情况不应该发生,但为了小心起见。forceChange
- 如果为 true,则不执行 expectedResource 检查。public static void initialize(int allocationMode, Rmm.LogConf logConf, long poolSize) throws RmmException
注意:所有 cuDF 方法在返回后都将在调用线程的 CUDA 上下文中设置所选的 CUDA 设备。
allocationMode
- 要使用的分配策略。使用 RmmAllocationMode.CUDA_DEFAULT
, RmmAllocationMode.POOL
, RmmAllocationMode.ARENA
, RmmAllocationMode.CUDA_ASYNC
, RmmAllocationMode.CUDA_ASYNC_FABRIC
和 RmmAllocationMode.CUDA_MANAGED_MEMORY
进行位设置。logConf
- 如何进行日志记录,如果不需要则为 null。poolSize
- 以字节为单位的初始池大小。IllegalStateException
- 如果 RMM 已初始化RmmException
public static boolean configureDefaultCudfPinnedPoolSize(long size)
size
- cuDF 默认固定池的初始和最大大小。传递 size=0 可禁用默认池。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
- 用于此范围计数器的初始值(以字节为单位)。public static void resetScopedMaximumBytesAllocated()
public static long getScopedMaximumBytesAllocated()
如果使用的内存净值为负(例如,自重置以来只发生了释放,且我们重置为 0),则结果将为 0。
如果从未调用 `resetScopedMaximumBytesAllocated`,则范围为整个程序,等效于 `getMaximumTotalBytesAllocated`。
public static void setEventHandler(RmmEventHandler handler) throws RmmException
handler
- 在 RMM 事件上调用的事件处理程序,或为 null 以清除现有处理程序。RmmException
- 如果已设置活动处理程序public static void setEventHandler(RmmEventHandler handler, boolean enableDebug) throws RmmException
注意:仅在必要时启用调试模式,因为代码会慢很多!
handler
- 在 RMM 事件上调用的事件处理程序,或为 null 以清除现有处理程序。enableDebug
- 如果为 true,则在 RmmEventHandler 中启用调试回调(onAllocated, onDeallocated)。RmmException
- 如果已设置活动处理程序public static void clearEventHandler() throws RmmException
RmmException
public static void initDefaultCudaDevice()
public static void cleanupDefaultCudaDevice()
public static void shutdown() throws RmmException
RmmException
- 在任何错误时。这包括存在无法收集的未完成分配。public static void shutdown(long forceGCInterval, long maxWaitTime, TimeUnit units) throws RmmException
forceGCInterval
- 强制执行 JVM GC 的频率。这只是向 JVM 建议执行 GC。maxWaitTime
- 等待所有对象被收集的最大时间量,超过此时间将抛出异常。units
- forceGcInterval 和 maxWaitTime 的时间单位。RmmException
- 在任何错误时。这包括如果在达到 maxWaitTime 之前存在无法收集的未完成分配。public static DeviceMemoryBuffer alloc(long size)
size
- 分配内存区域的大小(以字节为单位)。public static DeviceMemoryBuffer alloc(long size, Cuda.Stream stream)
size
- 分配内存区域的大小(以字节为单位)。stream
- 用于同步此命令的流。public static CudaMemoryBuffer allocCuda(long size, Cuda.Stream stream)
size
- 分配内存区域的大小(以字节为单位)。stream
- 用于同步此命令的流。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 © 2025. 保留所有权利。