Python mempool.used_字节和mempool.total_字节的差异导致cupy.cuda.memory.outOfMemory错误

Python mempool.used_字节和mempool.total_字节的差异导致cupy.cuda.memory.outOfMemory错误,python,cupy,Python,Cupy,我可以运行示例中提供的代码和 mempool.used\u bytes=mempool.total\u bytes 然而,当我尝试自己的代码时,它总是导致 mempool.total\u bytes>mempool.used\u bytes 我不知道所有的记忆都到哪里去了。我还使用了“del”和cp._default_memory_pool.free_all_blocks(),在每次迭代之后 我的代码创建了两个矩阵NxN x_1和x_2以及循环N x_1=cp.ones((N,N))+1 x_2

我可以运行示例中提供的代码和

mempool.used\u bytes=mempool.total\u bytes

然而,当我尝试自己的代码时,它总是导致

mempool.total\u bytes>mempool.used\u bytes

我不知道所有的记忆都到哪里去了。我还使用了“del”和cp._default_memory_pool.free_all_blocks(),在每次迭代之后

我的代码创建了两个矩阵NxN x_1和x_2以及循环N

x_1=cp.ones((N,N))+1
x_2=cp.ones((N,N))+1

然后求第三个矩阵的值

y\u gpu=np.multiply(np.power(x\u gpu,2),np.power(x\u gpu,2))

因此,总的来说,所需的内存是3*8(每个数字的字节)*(N)^2

mempool.used_字节给我这个数字,但是mempool.total_字节>mempool.used_字节

例如,当N=5000时,
mempool.used_字节=600m
mempool.total_字节=1200m
N=6000时,mempool.used_字节将为864 M,但cupy.cuda.memory.outOfMemory错误将生效

有人能告诉我这里发生了什么吗? 谢谢

    import cupy as cp
    import numpy as np
    from timeit import default_timer as timer
    import time 

    def GPU(N):
        t_gpu_1 = time.time()
        x_1 = cp.ones((N,N))+1
        x_2 = cp.ones((N,N))+1
        t_gpu_2 = time.time()
        y_gpu = cp.zeros((N,N))
        y_gpu = cp.multiply( cp.power(x_1,2), cp.power(x_2,2) )
        t_gpu_1 = time.time() - t_gpu_1
        t_gpu_2 = time.time() - t_gpu_2

        print("Alloc + Computo GPU ",t_gpu_1," Computo GPU ",t_gpu_2)
        print("matrixes size >> ",y_gpu.nbytes * 3/1e6)
        print("BEFORE DEL")
        print("used Mbytes >> ",mempool.used_bytes()/1e6)              # 
        print("total Mbytes >> ",mempool.total_bytes()/1e6)
        time.sleep(3)
        del x_1
        del x_2
        del y_gpu
        cp._default_memory_pool.free_all_blocks()
        print("AFTER DEL + FREE")
        print("used Mbytes >> ",mempool.used_bytes()/1e6)              # 
        print("total Mbytes >> ",mempool.total_bytes()/1e6)

    if __name__ == "__main__":
        mempool = cp.get_default_memory_pool()
        print("Device >> ", cp.cuda.runtime.getDeviceCount())
        #print("Limit >> ",mempool.get_limit()) 

        for N in range(1,10,1):
            print("N >> ",N*1e3)
            #CPU(N*1e3)
            GPU(int(N*1e3))
            cp._default_memory_pool.free_all_blocks()