我可以使用推力::主机向量还是必须使用cudaHostAlloc进行推力的零拷贝?
我想通过我可以使用推力::主机向量还是必须使用cudaHostAlloc进行推力的零拷贝?,cuda,gpu,thrust,zero-copy,Cuda,Gpu,Thrust,Zero Copy,我想通过cudaHostGetDevicePointer在映射内存上使用零拷贝。我可以使用推力::主机向量还是必须使用cudaHostAlloc(…,cudaHostAllocMapped)? 或者说使用推力更容易吗?我很确定仍然不可能使用推力::主机\向量作为映射的主机分配。有一个固定内存分配器,但我不相信映射内存是可用的。您需要做的是这样的事情: 使用cudaHostAlloc 使用cudaHostGetDevicePointer 在设备指针上使用推力::设备指针\u cast创建一个推力:
cudaHostGetDevicePointer
在映射内存上使用零拷贝。我可以使用推力::主机向量
还是必须使用cudaHostAlloc(…,cudaHostAllocMapped)?
或者说使用推力更容易吗?我很确定仍然不可能使用推力::主机\向量作为映射的主机分配。有一个固定内存分配器,但我不相信映射内存是可用的。您需要做的是这样的事情:
cudaHostAlloc
cudaHostGetDevicePointer
推力::设备指针\u cast
创建一个推力::设备\u ptr
(有关更多信息,请参阅)您可以使用
推力::设备ptr
生成一个推力::设备ptr
向量,或者直接将推力::设备ptr
传递给任何接受迭代器的算法。谢谢!但是如何使用推力::设备ptr生成推力::设备_向量呢?您可以从迭代器范围创建一个推力::设备_向量
,类似于推力::设备_向量v(p,p+n)
从指向n
元素分配的设备ptr
p
创建向量v
。但它将创建新的设备ptr p向量并将内存从设备ptr p复制到向量,不是吗?是的,它创建一个新的设备ptr
,但不,它不会分配任何内存或进行任何复制。实例将引用您分配的零拷贝内存。