包含指针的结构的推力矢量

时间:2012-04-23 12:24:39

标签: cuda thrust

我有以下数据结构:

struct Data {
    int* ptr;
    int a;
    int b;
}

我需要从主机传递的GPU上有一系列这样的结构。这样做的简单方法是

thrust::host_vector<Data> h;
... // fill vector 'h'
thrust::device_vector<Data> d = h;

棘手的时刻是如何为ptr分配内存以及如何在那里复制数据。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

已根据您对@Heatsink的评论更新,如果我理解正确,您说的是

struct Data {
    int* ptr;
    int a, b;
};

vector<Data> data;

data[0].ptr指向包含data[0].adata[0].b的GPU内存如果这是正确的,那么我会推荐以下组织:

struct Data {
    int a, b;
};

thrust::host_vector<Data> h;
thrust::device_vector<Data> d = h;

h[i]的GPU内存只是d[i]。我不建议将每个元素的指针存储到GPU内存中,也不希望为每个数据对象分配单独的GPU内存(会非常慢)。如果你使用单独的数组,你的计算代码仍然可能会更快

通常将数据组织为数组结构而不是结构数组是出于多种原因,包括对齐和负载合并的简易性。