【问题标题】:how to cast thrust::device_vector<int> to raw pointer如何将推力::device_vector<int> 转换为原始指针
【发布时间】:2012-06-22 05:33:01
【问题描述】:

我有一个推力device_vector。我想将它转换为原始指针,以便我可以将它传递给内核。我该怎么做?

thrust::device_vector<int> dv(10);
//CAST TO RAW
kernel<<<bl,tpb>>>(pass raw)

【问题讨论】:

    标签: cuda gpu thrust


    【解决方案1】:

    您可以使用thrust::raw_pointer_cast 执行此操作。设备向量类有一个成员函数data,它将返回一个thrust::device_ptr 到向量所持有的内存中,可以进行强制转换,如下所示:

    thrust::device_vector<int> dv(10);
    
    int * dv_ptr = thrust::raw_pointer_cast(dv.data());
    
    kernel<<<bl,tpb>>>(dv_ptr)
    

    (免责声明:在浏览器中编写,从未编译,从未测试)。推力包含一个完整的工作示例:unwrap_pointer.cu

    【讨论】:

    • 我们需要将数据复制回来吗?既然 dv_ptr 已经从 dv 中获得了修改后的数据,我们应该怎么做才能将其复制回 dv?
    • 不,不需要复制回来,它只是一个静态转换以避免编译时检查。在运行时没有什么真正改变。
    猜你喜欢
    • 2016-10-29
    • 2020-01-19
    • 2021-09-03
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多