如何将struct数组传递给GPU?

时间:2011-04-14 16:47:32

标签: c cuda

我有这个结构:

struct Node
{
     int *ptr;
     int k;   
}*d_ptr;

如何声明Node数组并将其传递给GPU?问题是我必须先为ptr分配内存然后再分配节点!

直到现在我还有这个:

int N=100;
int NumbOfNodes=5;
cudaMalloc((void **) &d_NodeArr, sizeof(Node)*NumbOfNodes);
for(int i=0;i<NumbOfNodes;i++)
    cudaMalloc((void **) d_NodeArr[i].Degree, sizeof(int)*N);

如果我在一个数组中分配所有内容会更快:

int N=100;
int NumbOfNodes=5;
int SIZE=(100*5)+5;//the +5 is for the k
cudaMalloc((void **) &d_ptr,sizeof(int)*SIZE);

1 个答案:

答案 0 :(得分:1)

首先在主机上构造结构。 也就是说,创建结构然后为int数组执行cudaMalloc。 随后将struct本身从主机复制到设备。

这可以帮助你: http://forums.nvidia.com/index.php?showtopic=196084