关于CUDA传一维数组到单个线程求和

问题是这样的,比如我有3个数组{1,2,3},{1,2,3,4,5},{10,11}它们的长度不一定相同,现在想把它们通过CUDA进行求和,最终得到结果6,15,21,分别对应1+2+3、1+2+3+4+5、10+11.现在不知道应该怎么组织cudaMalloc和cudaMemcpy来批量完成这一功能。

暂时设想的是每个threadIdx.x线程传进1个数组和一个长度,求和之后写到一个对应threadIdx.x下的result数组里。但现在不知道怎么传进去

设想的代码如下,当然还是没法运行的:

__global__ void addArray(int ** dev_a, int *dev_arraySize) {
    int i = threadIdx.x;
    int sum = 0;
    for (int k = 0; k < dev_arraySize[i]; k++) {
        sum += dev_a[i][k];
    }
    printf("第%d个数组的求和结果:%d\n", i, sum);
 }
 int main()
 {
    int a0[3] = { 1, 2, 3 };
    int a1[5] = { 1, 2, 3, 4, 5 };
    int a2[2] = { 10, 11 };
    int arraySize[3] = { 3, 5, 2 };
    int **a = new int*[3];
    a[0] = a0;
    a[1] = a1;
    a[2] = a2;
int **device_a;
int *dev_arrSize;
cudaMalloc((void**)&device_a, sizeof(int*)*3);
cudaMalloc((void**)&dev_arrSize, sizeof(int)*3);
cudaMemcpy(device_a, a, sizeof(int*)*3, cudaMemcpyHostToDevice);
cudaMemcpy(dev_arrSize, arraySize, sizeof(int)*3, cudaMemcpyHostToDevice);
addArray << <1, 3 >> >(device_a, dev_arrSize);

return 0;
}

http://www.cnblogs.com/Romi/archive/2012/04/20/2459817.html