如何将 thrust::device_vector<int> 转换为原始指针?

25

我有一个thrust的device_vector,我想将它强制转换为原始指针以便将其传递给内核。我该如何做?

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

30

您可以使用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)

(免责声明:在浏览器中编写,从未编译,从未测试)。这里包括Thrust的完整工作示例:unwrap_pointer.cu


我们需要将那些数据复制回去吗?现在dv_ptr已经拥有了来自dv的修改后的数据,我们该怎么做才能将它复制回dv呢? - RaenirSalazar
不需要,这只是一种静态转换,以避免编译时检查。在运行时,实际上没有任何变化。 - Johan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接