Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cupy fft导致内存泄漏?_Python_Cupy - Fatal编程技术网

Python Cupy fft导致内存泄漏?

Python Cupy fft导致内存泄漏?,python,cupy,Python,Cupy,在我的python脚本中,我大量使用了fft和ifft。为了加快我的GTX 1060 6GB的速度,我使用了cupy库。在遇到内存不足的问题后,我发现内存泄漏是原因 我创建了以下代码来调查这个问题。调用cupy.fft.fft后,将分配比输出大小更多的额外内存。删除该输出时,实际上只释放了该数量的内存,我不知道如何释放额外的内存。这是一只虫子还是我在监督什么 import cupy as cp t = cp.linspace(0, 1, 1000) print("t :&

在我的python脚本中,我大量使用了fft和ifft。为了加快我的GTX 1060 6GB的速度,我使用了cupy库。在遇到内存不足的问题后,我发现内存泄漏是原因

我创建了以下代码来调查这个问题。调用
cupy.fft.fft
后,将分配比输出大小更多的额外内存。删除该输出时,实际上只释放了该数量的内存,我不知道如何释放额外的内存。这是一只虫子还是我在监督什么

import cupy as cp


t = cp.linspace(0, 1, 1000)
print("t      :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

a = cp.sin(4 * t*2*3.1415)

print("t+a    :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

fft = cp.fft.fft(a)

print("fft    :", fft.nbytes/1024, "kB")
print("t+a+fft:", cp.get_default_memory_pool().used_bytes()/1024, "kB")

del fft
cp.get_default_memory_pool().free_all_blocks()
cp.get_default_pinned_memory_pool().free_all_blocks()

print("t+a    :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

del t,a
print("       :", cp.get_default_memory_pool().used_bytes()/1024, "kB")
输出:

t      : 8.0 kB
t+a    : 16.0 kB
fft    : 15.625 kB
t+a+fft: 48.0 kB
t+a    : 32.0 kB
       : 16.0 kB

我使用的是cupy-cuda101 8.1.0版

Hi@MazzMan,直到现在我才注意到你的问题。正如我在中所回答的,这不是一个bug,而是预期的行为,因为在启动v8.0时,默认情况下我们缓存了cuFFT计划。这些计划作为工作区绑定到一些内存,因此除非删除计划/清除缓存,否则会有一些内存保留。例如,您可以在计划缓存中引用CuPy的文档并尝试禁用缓存

在您的情况下,您还可以在脚本之后运行以下行,以确认在清除缓存后释放内存

缓存=cp.fft.config.get\u plan\u cache() >>>cache.clear() >>>打印(“清除缓存后:”,cp.get_default_memory_pool()。used_bytes()/1024,“kB”) 清除缓存后:0.0 kB