cupy.cuda.MemoryAsyncPool#

class cupy.cuda.MemoryAsyncPool(pool_handles='current')[来源]#

(实验性)主机上所有 GPU 设备共用的 CUDA 内存池。

内存池会保留所有分配的内存,即使它们已被用户释放。此类的实例可用于多个设备。此类使用 CUDA 的流有序内存分配器(CUDA 11.2+ 支持)。将此内存池用作 CuPy 默认分配器的最简单方法如下:

set_allocator(MemoryAsyncPool().malloc)

使用此功能需要 CUDA 版本 >= 11.2,以及受支持的 GPU 和平台。如果不支持,将引发错误。

当前的 CuPy 流用于分配/释放内存。

参数:

pool_handles (strint) – 指示使用哪个内存池的标志。‘default’ 表示设备的默认内存池,‘current’ 表示当前内存池(可能是默认内存池),int 表示从其他地方创建的 cudaMemPool_t,用于外部内存池。也可以接受包含这些标志的列表,此时列表的长度必须等于可见设备的总数,以便独立设置每个设备的内存池。

警告

此功能目前处于实验阶段,未来可能会有所改变。

注意

MemoryAsyncPool 目前无法与内存钩子(memory hooks)一起使用。

方法

free_all_blocks(self, stream=None)#

释放空闲内存。

参数:

stream (cupy.cuda.Stream) – 释放给定 stream 上释放的内存。如果 streamNone,则使用当前流。

另请参阅

物理页缓存行为

free_bytes(self) size_t#

获取内存池已获取但未使用的总字节数。

返回:

内存池已获取但未使用的总字节数。

返回类型:

int

get_limit(self) size_t#

获取当前设备的内存分配上限。

返回:

字节数

返回类型:

int

注意

MemoryPool 不同,MemoryAsyncPoolset_limit() 方法只能设置一个限制。如果其他(非 CuPy)应用程序也从同一个内存池分配内存,则此限制可能不会被遵守。

malloc(size_t size) MemoryPointer#

在当前流上从当前设备的内存池分配内存。

此方法可用作 CuPy 内存分配器。将内存池用作默认分配器的最简单方法如下:

set_allocator(MemoryAsyncPool().malloc)
参数:

size (int) – 要分配的内存缓冲区的大小(以字节为单位)。

返回:

指向已分配缓冲区的指针。

返回类型:

MemoryPointer

n_free_blocks(self) size_t#
set_limit(self, size=None, fraction=None)#

设置当前设备的内存分配上限。

当指定 fraction 时,其值将成为 GPU 可用内存量的分数。例如,如果您有一个具有 2 GiB 内存的 GPU,可以使用 set_limit(fraction=0.5)set_limit(size=1024**3) 将内存大小限制为 1 GiB。

不能同时指定 sizefraction。如果两者都指定或指定为 0,则会禁用限制。

注意

MemoryPool 不同,MemoryAsyncPoolset_limit() 方法只能设置一个限制。如果其他(非 CuPy)应用程序也从同一个内存池分配内存,则此限制可能不会被遵守。在内部,此限制是通过 cudaMemPoolAttrReleaseThreshold 属性设置的。

注意

您还可以使用 CUPY_GPU_MEMORY_LIMIT 环境变量来设置限制,详见 环境变量。此方法设置的限制会覆盖环境变量中指定的值。

另请注意,此方法仅更改当前设备的限制,而环境变量设置所有设备的默认限制。

参数:
  • size (int) – 限制大小,以字节为单位。

  • fraction (float) – 范围在 [0, 1] 之间的比例。

total_bytes(self) size_t#

获取内存池已获取的总字节数。

返回:

内存池已获取的总字节数。

返回类型:

int

used_bytes(self) size_t#

获取内存池已使用的总字节数。

返回:

内存池已使用的总字节数。

返回类型:

int

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self<value。

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

属性

memoryAsyncHasStat#