我可以使用推力::主机向量还是必须使用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
    ,但不,它不会分配任何内存或进行任何复制。实例将引用您分配的零拷贝内存。