灰羽_GrayPlumage 2016-06-01 08:02 采纳率: 100%
浏览 1684
已采纳

关于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;
}

  • 写回答

1条回答 默认 最新

  • devmiao 2016-06-01 09:39
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序