从设备函数调用Thrust device_vector

时间:2016-11-17 13:50:14

标签: cuda gpu thrust

我有一个Athens-RELEASE,其中有一个struct Cap的另一个结构。当我编译代码时,我收到一个错误,它抱怨从设备函数thrust::device_vector调用主机函数(thrust::device_vector<FloatIntPair>)。当我向成员函数和构造函数添加SphericalFaceManager::makeCaps而不仅仅__host__ __device__时,代码然后编译但是我收到与上述错误相同的警告,我认为它在主机和设备之间复制数据。我的问题是如何在我的类中访问设备向量,避免CPU和GPU之间的任何数据传输?

此后您可以找到代码:

__device__

1 个答案:

答案 0 :(得分:2)

您不能直接在设备代码中使用推力矢量(或std::vector)。在诸如here

之类的其他各种SO问题中都提到了这一点

如果要在设备代码中使用thrust::device_vector中的数据,则应将指向数据的指针作为仿函数初始化参数传递。各种其他SO问题举例说明了这一点,例如here

同样,你不能使用矢量方法,例如设备代码中的.empty().push_back()

您需要将这些替换为普通的C风格分配器和C风格的索引数据访问。

对于设备代码中的push_back的多线程实现,我建议像this这样的东西。这是一个完整的示例,演示了如何为向量分配空间以及每个线程如何将其用于insertVertex