我有以下數據結構在我的主機:如何在CUDA中將設備內存分配給我的指針數組?
typedef struct point{
int x;
int y;
}Point;
typedef struct pair{
Point i;
Point j;
float cost;
}Pair;
Pair* pairs[n]; // allocates an array of pointers to pair
現在,我已經爲「對」複製到GPU。因此,我宣佈以下指針:
Pair **d_pair;
,並使用分配的內存如下:
cudaMalloc((void**)d_pair,(sizeof(Pair)+sizeof(Pair*))*n);
現在,我從主機複製到設備:
cudaMempy(d_pair,pair,(sizeof(Pair)+sizeof(Pair*))*n),cudaMemcpyHostToDevice);
內核的原型接收d_pair爲:
__global__ my_kernel(Pair* d_pair[], ...){
...
}
上述報表序列是否按預期工作?如果不是,我做了什麼修改?基本上,我想複製Pair *對[n];就像「d_pair」一樣。我該怎麼做呢?
如果您可以切換到Pair對象的數組,而不是指向Pair的指針數組,那麼您的數據複製可以很簡單,只需對所列出的序列進行相對較小的更改即可。否則,這個過程要複雜得多,並且需要一個包含多個步驟的循環。如果您在cuda二維數組上進行搜索(一組指向數據的指針實際上是一個二維數組),您將會了解複雜性。 –