我有一个用numba-cuda编写的cuda内核,该内核可以处理无法立即容纳在GPU内存中的大型阵列。因此,我必须多次调用内核来处理整个阵列。在循环中调用内核,在循环中,在GPU完成计算之后,我将结果复制并聚合回主机阵列。
我的问题:
谢谢。
答案 0 :(得分:1)
- 设备阵列和复制到GPU内存的阵列的寿命是多少?从一个内核调用中保留它们的值吗? 另一个?
在Numba中,全局内存分配会保留到释放为止。
- 我是否需要将设备数组定义放入循环内(在调用内核之前),还是在进入内核之前只做一次 环?
后者。
- 我是否需要在代码中手动释放/删除设备阵列,否则CUDA内存管理器将在程序结束时执行该操作?
首先要意识到的是,您没有想象中的CUDA内存管理器。销毁上下文后,将自动释放内存分配,否则在任何情况下都不会释放。唯一的例外是使用Numba device_array
,如果超出范围,Python可能会对其进行垃圾回收。但是,通常,您应该假定分配的任何内容都保留在内存中,直到您明确释放它为止,并且始终在代码中包括明确的内存释放。