【问题标题】:Can I use thrust::host_vector or I must use cudaHostAlloc for zero-copy with Thrust?我可以使用thrust::host_vector 还是必须使用cudaHostAlloc 进行Thrust 的零拷贝?
【发布时间】:2012-07-26 09:34:30
【问题描述】:

我想通过cudaHostGetDevicePointer 对映射内存使用零拷贝。我可以使用thrust::host_vector 还是必须使用cudaHostAlloc(...,cudaHostAllocMapped)? 还是用 Thrust 更容易做到?

【问题讨论】:

    标签: cuda gpu thrust zero-copy


    【解决方案1】:

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

    1. 使用cudaHostAlloc 分配的映射、固定主机内存
    2. 使用cudaHostGetDevicePointer获取零拷贝内存的设备指针
    3. 在该设备指针上使用thrust::device_pointer_cast 创建thrust::device_ptr(有关详细信息,请参阅here

    您可以使用thrust::device_ptr 创建thrust::device_vector 或直接将thrust::device_ptr 传递给任何接受迭代器的算法。

    【讨论】:

    • 谢谢!但是如何使用推力::device_ptr 制作推力::device_vector?
    • 你可以从一个迭代器范围创建一个thrust::device_vector,所以像thrust::device_vector<int> v(p, p+n)这样的东西从device_ptrp创建向量v,它指向n元素的分配。
    • 但它会创建新的 device_vector 并将内存从 device_ptr p 复制到 vector,不是吗?
    • 是的,它会创建一个新的device_vector,但不,它不会分配任何内存或进行任何复制。实例将引用您分配的零拷贝内存。
    • Thrust fallback allocator example 给出了一个可能的实现方式,就像 talonmies 所描述的那样,用推力实现映射的固定内存。
    猜你喜欢
    • 2016-11-07
    • 2018-05-13
    • 2012-02-21
    • 2011-07-14
    • 2019-08-22
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2014-10-25
    相关资源
    最近更新 更多