使用Thrust device_malloc而不是普通的cudaMalloc有什么好处,device_new做什么?
对于device_malloc来说,似乎使用它的唯一原因是它只是更清洁一点.
device_new文档说:
“device_new implements the placement new operator for types resident
in device memory. device_new calls T’s null constructor on a array of
objects in device memory. No memory is allocated by this function.”
哪个我不明白……
最佳答案 如果您打算将Thrust用于其他事情,device_malloc将返回正确类型的对象.如果您使用Thrust,通常没有理由使用cudaMalloc.封装CUDA调用使其更容易,通常更清晰. C和STL容器与C样式数组和malloc相同.
对于device_new,您应该阅读documentation的以下行:
template<typename T>
device_ptr<T> thrust::device_new (device_ptr< void > p, const size_t n = 1)
p: A device_ptr to a region of device memory into which to construct
one or many Ts.
基本上,如果已经分配了内存,则可以使用此功能.只会调用默认构造函数,这将返回一个转换为T类型的device_pointer.
另一方面,以下方法分配内存并返回device_ptr< T>:
template<typename T >
device_ptr<T> thrust::device_new (const size_t n = 1)