二維數組我是新來的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