【发布时间】:2012-07-26 09:34:30
【问题描述】:
我想通过cudaHostGetDevicePointer 对映射内存使用零拷贝。我可以使用thrust::host_vector 还是必须使用cudaHostAlloc(...,cudaHostAllocMapped)?
还是用 Thrust 更容易做到?
【问题讨论】:
我想通过cudaHostGetDevicePointer 对映射内存使用零拷贝。我可以使用thrust::host_vector 还是必须使用cudaHostAlloc(...,cudaHostAllocMapped)?
还是用 Thrust 更容易做到?
【问题讨论】:
我很确定仍然无法将推力::host_vector 用作映射的主机分配。有一个固定的内存分配器,但我不相信映射内存可用。你需要做的是这样的:
cudaHostAlloc 分配的映射、固定主机内存
cudaHostGetDevicePointer获取零拷贝内存的设备指针
thrust::device_pointer_cast 创建thrust::device_ptr(有关详细信息,请参阅here)您可以使用thrust::device_ptr 创建thrust::device_vector 或直接将thrust::device_ptr 传递给任何接受迭代器的算法。
【讨论】:
thrust::device_vector,所以像thrust::device_vector<int> v(p, p+n)这样的东西从device_ptrp创建向量v,它指向n元素的分配。
device_vector,但不,它不会分配任何内存或进行任何复制。实例将引用您分配的零拷贝内存。