我可以使用thrust :: host_vector或者我必须使用cudaHostAlloc进行零重复吗?

时间:2012-07-27 16:59:58

标签: cuda gpu thrust zero-copy

我希望cudaHostGetDevicePointer在映射内存上使用零拷贝。我可以使用thrust::host_vector还是必须使用cudaHostAlloc(...,cudaHostAllocMapped)? 或者Thrust在某种程度上更容易做什么?

1 个答案:

答案 0 :(得分:5)

我很确定仍然无法使用thrust :: host_vector作为映射主机分配。有一个固定内存分配器,但我不相信映射内存可用。你需要做的是这样的事情:

  1. 使用cudaHostAlloc
  2. 分配映射的固定主机内存
  3. 使用cudaHostGetDevicePointer
  4. 获取零拷贝内存的设备指针
  5. 在该设备指针上使用thrust::device_ptr创建thrust::device_pointer_cast(有关详情,请参阅here
  6. 您可以使用thrust::device_vector创建thrust::device_ptr,也可以将thrust::device_ptr直接传递给任何接受迭代器的算法。