设备内存阵列的生命周期

2024-06-26 17:59:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用numba-cuda编写的cuda内核,它可以同时处理不适合GPU内存的大数组。所以,我必须多次调用内核来处理整个数组。内核在循环中被调用,在循环内部,GPU完成计算后,我将结果复制并聚合回主机数组。在

我的问题:

  • 设备阵列和复制到GPU内存的阵列的生存期是多少?从一个内核调用到另一个内核调用,它们的值是否被保留?在
  • 我需要将设备数组定义放入循环中(在调用内核之前),还是在进入循环之前只做一次?在
  • 我是否需要在代码中手动释放/删除设备阵列,或者CUDA内存管理器将在程序结束时执行此操作?在

谢谢。在


Tags: 内存代码程序管理器gpu定义数组手动
1条回答
网友
1楼 · 发布于 2024-06-26 17:59:48
  • What is the lifetime of a device array and an array that is copied to GPU memory? Are their value preserved from one kernel call to another?

在Numba中,全局内存分配被保留,直到它们被释放。在

  • Do I need to put the device arrays definitions inside the loop (before I call the kernel) or do I just do it once before I enter the loop?

后者。在

  • Do I need to free/delete the device arrays manually in the code or the CUDA memory manager will do it at the end of the program?

首先要认识到的是,CUDA内存管理器没有你想象的那样。当上下文被破坏时,内存分配会自动释放,否则在任何情况下都不会释放。唯一的例外是使用Numbadevice_array,如果超出范围,Python可能会对其进行垃圾回收。但是,一般来说,您应该假设您分配的任何内容都将保留在内存中,直到显式释放它,并且始终在代码中包含显式内存释放。在

相关问题 更多 >