2

我有以下数据结构:

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

我需要从主机传递的 GPU 上的一组此类结构。最简单的方法是

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

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

4

1 回答 1

1

根据您对@Heatsink 的评论进行了更新,如果我理解正确,您说的是给定的

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

vector<Data> data;

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

struct Data {
    int a, b;
};

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

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

通常将数据组织为数组结构而不是结构数组是首选,原因有几个,包括对齐和易于负载合并。

于 2012-04-23T16:59:45.217 回答