二维数组我是新来的CUDA,我想实现乘法加法,这个等式总和乘法在CUDA
我写了这个代码在CUDA,但它并没有给出正确的答案
mulFV1[idx] = f[idx][idy]*compV2[idy];
mulFV2[idy] = f[idx][idy]*compV1[idx];
,然后,我送阵列mulFV1和mulFV2减少设备功能..
问题是我该如何调试它?
注:要在画面mulFV1是行的关注和关心mulFV2在列
二维数组我是新来的CUDA,我想实现乘法加法,这个等式总和乘法在CUDA
我写了这个代码在CUDA,但它并没有给出正确的答案
mulFV1[idx] = f[idx][idy]*compV2[idy];
mulFV2[idy] = f[idx][idy]*compV1[idx];
,然后,我送阵列mulFV1和mulFV2减少设备功能..
问题是我该如何调试它?
注:要在画面mulFV1是行的关注和关心mulFV2在列
我想,你的内核可能是这个样子以下
__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]);
}
}
你的变量名表示,第一行是使用矢量v1
乘法,第二个具有v2
。但是,你正在交叉。也许你想有
mulFV1[idx] = f[idx][idy]*compV1[idy];
mulFV2[idy] = f[idx][idy]*compV2[idx];
与索引1和2交换?
如果你在我的问题中检查数学方程,你会知道第一个eq。关注行,所以我不会改变。对于第二个eq。关于列,所以我不改变.. – asma
结果被放置在一个变量R [I]?如:R [I] = f [K] [I] * V1 [K]? – Tudor
你解决了那个问题?什么类型的f?你想获得两个数组作为输出吗? – Yappie
@Tudor我希望输出是一个变量,但因为我使用CUDA,我必须将每个线程的结果放在一个数组中,并将它们添加到另一个函数中。 – asma