我是CUDA的新手,我想实现一个乘法和作为这个等式
我在CUDA中编写了这段代码,但它没有给出正确的答案
mulFV1[idx] = f[idx][idy]*compV2[idy];
mulFV2[idy] = f[idx][idy]*compV1[idx];
然后,我将数组mulFV1和mulFV2发送到缩减设备函数。
问题是如何调试它?
注意:要在图片中mulFV1关注行和mulFV2关注列
答案 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的?