cupy.cuda.memory_hooks.LineProfileHook#

class cupy.cuda.memory_hooks.LineProfileHook(max_depth=0)[源代码][源代码]#

代码行 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)[源代码][源代码]#

从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)[源代码][源代码]#

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

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

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

  • mem_size (int) – 要分配的圆整内存字节大小

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

打印行内存分析报告。

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self<value。

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

属性

name = 'LineProfileHook'#