CUDA中二维数组的乘法和

时间:2011-12-09 17:05:30

标签: cuda 2d sum multiplication

我是CUDA的新手,我想实现一个乘法和作为这个等式

enter image description here

enter image description here

我在CUDA中编写了这段代码,但它没有给出正确的答案

mulFV1[idx] = f[idx][idy]*compV2[idy];
mulFV2[idy] = f[idx][idy]*compV1[idx];

然后,我将数组mulFV1和mulFV2发送到缩减设备函数。

问题是如何调试它?

注意:要在图片中mulFV1关注行和mulFV2关注列

2 个答案:

答案 0 :(得分:1)

我认为,你的内核可能如下所示

__global__ void kernel_code(const int* f,const int* v1,const int* v2, int* outv1, int* outv2)
{
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    int idy = blockIdx.y * blockDim.y + threadIdx.y;
    if (idx<MAX_X && idy <MAX_Y)
    {
        if(idx==0)
        {
            outv2[idy]=0;
        }
        if(idy==0)
        {
            outv1[idx]=0;
        }
        __syncthreads();

        atomicAdd(&(outv1[idx]),f[idy*MAX_Y+ idx]*v2[idy]);
        atomicAdd(&(outv2[idy]),f[idy*MAX_Y+idx]*v1[idx]);
   }
}

答案 1 :(得分:0)

您的变量名称表示第一行是使用向量v1的乘法,第二行是v2的乘法。但相反,你正在做它交叉。也许你想拥有

mulFV1[idx] = f[idx][idy]*compV1[idy];
mulFV2[idy] = f[idx][idy]*compV2[idx];
交换指数1和2的