【发布时间】:2020-04-03 12:16:18
【问题描述】:
我对使用 CUDA 时的推力库有疑问。 我正在使用推力函数,即exclusive_scan,并且我想使用原始指针。我正在使用原始(设备)指针,因为我想完全控制何时分配和释放内存。
在函数调用之后,我将把指针交给另一个数据结构,然后在我重新计算我的(设备)指针时,在这个数据结构的析构函数中或在下一个函数调用中释放内存。例如,我遇到了this problem here now,它建议将数据结构包装在 device_vector 中。但是后来我遇到了一个问题,即一旦我的 device_vector 超出范围,内存就会被释放,这是我不想要的。全局拥有设备指针也不是一种选择,因为我正在破解代码,即它被用作缓冲区,如果我想做类似的事情,我将不得不重写很多。
有人对此有很好的解决方法吗?我现在看到的唯一机会是自己重写推力函数,只使用原始设备指针。
编辑:我看错了,我可以将它包装在 device_ptr 而不是 device_vector 中。 不过进一步询问,如果没有使用 device_ptr 的选项,我该如何解决这个问题?
【问题讨论】:
-
您链接到的问题建议使用
device_ptr,而不是device_vector。 -
啊,你是对的。我确实监督了这个细节,谢谢。这给我留下了一个问题,但是如果我没有这个选项,我该如何进行内存管理。我应该为此提出一个新问题吗?
-
使用 API 的调度策略版本,我猜
标签: memory-management cuda thrust