cupy.cuda.memory_hooks.DebugPrintHook#

class cupy.cuda.memory_hooks.DebugPrintHook(file=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, flush=True)[source]#

打印调试信息的内存钩子。

这个内存钩子在后处理阶段(即每个方法被调用后)输出钩子函数中涉及的 mallocfree 方法的输入参数的调试信息。

示例

基本用法是与 with 语句一起使用。

代码示例

>>> import cupy
>>> from cupy.cuda import memory_hooks
>>>
>>> cupy.cuda.set_allocator(cupy.cuda.MemoryPool().malloc)
>>> with memory_hooks.DebugPrintHook():
...     x = cupy.array([1, 2, 3])
...     del x  

输出示例

{"hook":"alloc","device_id":0,"mem_size":512,"mem_ptr":150496608256}
{"hook":"malloc","device_id":0,"size":24,"mem_size":512,"mem_ptr":150496608256,"pmem_id":"0x7f39200c5278"}
{"hook":"free","device_id":0,"mem_size":512,"mem_ptr":150496608256,"pmem_id":"0x7f39200c5278"}

其中输出格式是 JSONL (JSON Lines),hook 是钩子点的名称,device_id 是 CUDA 设备 ID,size 是请求分配的内存大小,mem_size 是四舍五入后要分配的内存大小,mem_ptr 是内存指针,pmem_id 是池化内存对象 ID。

变量:
  • file – 输出文件类对象,重定向到该对象。

  • flush – 如果为 True,此钩子将在打印结束时强制刷新文本流。默认为 True

方法

__enter__(self)#
__exit__(self, *_)#
alloc_postprocess(self, **kwargs)[source]#

从 GPU 设备分配内存后调用的回调函数。

关键字参数:
  • device_id (int) – CUDA 设备 ID

  • mem_size (int) – 已分配的四舍五入后的内存字节大小

  • mem_ptr (int) – 获取的内存指针。如果在分配中发生错误则为 0。

alloc_preprocess(self, **kwargs)#

从 GPU 设备分配内存前调用的回调函数。

关键字参数:
  • device_id (int) – CUDA 设备 ID

  • mem_size (int) – 将分配的四舍五入后的内存字节大小

free_postprocess(self, **kwargs)[source]#

将内存释放回内存池后调用的回调函数。

关键字参数:
  • device_id (int) – CUDA 设备 ID

  • mem_size (int) – 内存字节大小

  • mem_ptr (int) – 要释放的内存指针

  • pmem_id (int) – 池化内存对象 ID。

free_preprocess(self, **kwargs)#

将内存释放回内存池前调用的回调函数。

关键字参数:
  • device_id (int) – CUDA 设备 ID

  • mem_size (int) – 内存字节大小

  • mem_ptr (int) – 要释放的内存指针

  • pmem_id (int) – 池化内存对象 ID。

malloc_postprocess(self, **kwargs)[source]#

从内存池获取内存后调用的回调函数。

关键字参数:
  • device_id (int) – CUDA 设备 ID

  • size (int) – 请求分配的内存字节大小

  • mem_size (int) – 已分配的四舍五入后的内存字节大小

  • mem_ptr (int) – 获取的内存指针。如果在 malloc 中发生错误则为 0。

  • pmem_id (int) – 池化内存对象 ID。如果在 malloc 中发生错误则为 0。

malloc_preprocess(self, **kwargs)#

从内存池获取内存前调用的回调函数。

关键字参数:
  • device_id (int) – CUDA 设备 ID

  • size (int) – 请求分配的内存字节大小

  • mem_size (int) – 将分配的四舍五入后的内存字节大小

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

属性

name = 'DebugPrintHook'#