cupy.cuda.memory_hooks.LineProfileHook#

class cupy.cuda.memory_hooks.LineProfileHook(max_depth=0)[source]#

代码行 CuPy 内存分析器。

此分析器使用 traceback 模块按行显示 GPU 内存消耗。但请注意,它只能跟踪 CPython 级别,不能跟踪 Cython 级别。参考 cython/cython#1755

示例

代码示例

from cupy.cuda import memory_hooks
hook = memory_hooks.LineProfileHook()
with hook:
    # some CuPy codes
hook.print_report()

输出示例

_root (4.00KB, 4.00KB)
  lib/python3.6/unittest/__main__.py:18:<module> (4.00KB, 4.00KB)
    lib/python3.6/unittest/main.py:255:runTests (4.00KB, 4.00KB)
      tests/cupy_tests/test.py:37:test (1.00KB, 1.00KB)
      tests/cupy_tests/test.py:38:test (1.00KB, 1.00KB)
      tests/cupy_tests/test.py:39:test (2.00KB, 2.00KB)

每行显示

{filename}:{lineno}:{func_name} ({used_bytes}, {acquired_bytes})

其中 used_bytes 是从 CuPy 内存池使用的内存字节数,acquired_bytes 是 CuPy 内存池从 GPU 设备实际获取的内存字节数。_root 是堆栈跟踪的根节点,用于显示总内存使用量。

参数:

max_depth (int) – 跟踪堆栈的最大深度。默认为 0 (无限制)。

方法

__enter__(self)#
__exit__(self, *_)#
alloc_postprocess(self, **kwargs)#

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

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

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

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

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

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

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

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

free_postprocess(self, **kwargs)#

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

关键字参数:
  • 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)#

从内存池检索内存后调用的回调函数。

关键字参数:
  • 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)[source]#

从内存池检索内存前调用的回调函数。

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

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

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

print_report(file=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]#

打印行内存分析报告。

__eq__(value, /)#

Return self==value.

__ne__(value, /)#

Return self!=value.

__lt__(value, /)#

Return self<value.

__le__(value, /)#

Return self<=value.

__gt__(value, /)#

Return self>value.

__ge__(value, /)#

Return self>=value.

属性

name = 'LineProfileHook'#