cupy.cuda.MemoryAsyncPool#

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

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

内存池保留任何分配,即使它们被用户释放。此类的一个实例可以用于多个设备。此类使用 CUDA 的流有序内存分配器(支持 CUDA 11.2+)。使用此池作为 CuPy 默认分配器的最简单方法是以下代码:

set_allocator(MemoryAsyncPool().malloc)

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

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

参数:

pool_handles (str or int) – 一个标志,用于指示使用哪个内存池。’default’ 表示设备的默认内存池,’current’ 表示当前内存池(可能是默认内存池),以及一个表示从其他地方创建的外部内存池的 cudaMemPool_tint。也可以接受由这些标志组成的列表,在这种情况下,列表长度必须等于可见设备的总数,以便可以独立设置每个设备的内存池。

警告

此功能目前处于实验阶段,可能会发生变化。

备注

MemoryAsyncPool 目前不能与内存钩子一起工作。

方法

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(self, 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#