我正在为我的项目使用推力库并遇到以下问题:
我有一个名为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执行相同操作,它可以正常工作。 不幸的是,文档似乎没有自定义数据类型向量的任何示例。
我错过了什么?
答案 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;主机数据副本。)