我有一个用numba-cuda编写的cuda内核,它可以同时处理不适合GPU内存的大数组。所以,我必须多次调用内核来处理整个数组。内核在循环中被调用,在循环内部,GPU完成计算后,我将结果复制并聚合回主机数组。在
我的问题:
- 设备阵列和复制到GPU内存的阵列的生存期是多少?从一个内核调用到另一个内核调用,它们的值是否被保留?在
- 我需要将设备数组定义放入循环中(在调用内核之前),还是在进入循环之前只做一次?在
- 我是否需要在代码中手动释放/删除设备阵列,或者CUDA内存管理器将在程序结束时执行此操作?在
谢谢。在
Tags:
在Numba中,全局内存分配被保留,直到它们被释放。在
后者。在
首先要认识到的是,CUDA内存管理器没有你想象的那样。当上下文被破坏时,内存分配会自动释放,否则在任何情况下都不会释放。唯一的例外是使用Numba
device_array
,如果超出范围,Python可能会对其进行垃圾回收。但是,一般来说,您应该假设您分配的任何内容都将保留在内存中,直到显式释放它,并且始终在代码中包含显式内存释放。在相关问题 更多 >
编程相关推荐