【发布时间】:2019-01-25 17:25:56
【问题描述】:
我有一个用 numba-cuda 编写的 cuda 内核,它可以一次处理不适合 GPU 内存的大型数组。所以,我必须多次调用内核来处理整个数组。内核在循环中被调用,在循环内,GPU 完成计算后,我将结果复制并聚合回主机数组。
我的问题:
- 设备数组和复制到 GPU 内存的数组的生命周期是多少?从一个内核调用到另一个内核调用是否保留了它们的值?
- 是否需要将设备数组定义放入循环中(在调用内核之前),还是只在进入循环之前执行一次?
- 我是否需要在代码中手动释放/删除设备阵列,或者 CUDA 内存管理器会在程序结束时执行此操作?
谢谢。
【问题讨论】:
-
1) 一个设备数组会在你释放它或结束程序时死掉,如果你不改变它的值,它就不会通过其他一些晦涩的方法改变它的值。 2)如果您可以重写它的值,您可以重用设备指针。 3) 释放分配的代码是一种良好的编程习惯,即使退出程序时它们可能会被释放。