cuda 功能的自动内存管理

Posted

技术标签:

【中文标题】cuda 功能的自动内存管理【英文标题】:Automatic memory management for cuda functions 【发布时间】:2020-04-29 17:12:18 【问题描述】:

我一直在尝试使用一些用于 python 的 cuda 库来进行线性代数运算。迄今为止最直接的一个似乎是cupy。

然而,我遇到的所有这些问题是,每当操作变得足够大以对 gpu 计算感兴趣时,我就会遇到内存错误。

cupy 或类似的库中是否有某种方法可以自动进行内存管理?

【问题讨论】:

cupy 自动进行内存管理。以 Python 的方式,GPU 上引用计数为零的内存分配将提交给 cupy GPU 垃圾收集器,最终将被释放。就像在 python 中一样,如果你需要释放内存,你作为程序员有责任正确使用数据并允许它超出范围,或者它的引用计数变为零,当它不是需要更长的时间。 当然这也不是解决内存问题的灵丹妙药。您很可能只是试图使用过多的 GPU 内存。你不能在 cupy 中超额订阅 GPU 内存,AFAIK。 【参考方案1】:

您可以尝试让 CuPy 在进入内存密集型区域之前回收所有未使用的 GPU 内存:

mempool = cupy.get_default_memory_pool()
mempool.free_all_blocks()

在调用之前引用计数为零的任何 CuPy 数组都将被释放,并将底层 GPU 内存返回到内存池。

【讨论】:

以上是关于cuda 功能的自动内存管理的主要内容,如果未能解决你的问题,请参考以下文章

.Net 自动内存管理

Oracle DB管理内存

EasyTask简单易用的PHP常驻内存多进程任务管理器

Go 语言内存管理(三):逃逸分析

Java自动内存管理机制

正确地使用智能指针