具有自定义数据类型

时间:2015-07-27 14:27:12

标签: cuda copy thrust

我正在为我的项目使用推力库并遇到以下问题:

我有一个名为box的结构,定义为

typedef struct {
    int coord[4];
    float h;
} box;

现在我正在尝试将数据从box_vector的框复制到box_vector:

thrust::device_vector<box> d_boxes(100);
thrust::host_vector<box> h_boxes;
thrust::copy(d_boxes.begin(), d_boxes.end(), h_boxes.begin());

但这会引发错误

  抛出一个&#39; thrust :: system :: system_error&#39;的实例后终止被调用   what():无效的参数

如果我使用int而不是box执行相同操作,它可以正常工作。 不幸的是,文档似乎没有自定义数据类型向量的任何示例。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

thrust::copy不会自动为您调整矢量大小(实际上没有推力算法可以。)

所以这是一个空矢量,不足以容纳100个物体:

thrust::host_vector<box> h_boxes;

请改为尝试:

thrust::host_vector<box> h_boxes(100);

正如@JaredHoberock所指出的,另一种认识可能是:

thrust::device_vector<box> d_boxes(100);
thrust::host_vector<box> h_boxes = d_boxes;

在这种情况下,h_boxes的构造函数会创建一个适当的大小,以保存d_boxes中的元素数量(以及执行设备 - &gt;主机数据副本。)