2017-04-04 97 views
-2

下面是代碼:錯誤:表達式必須具有指針到的對象類型,以矩陣

__global__ 
void matrixSumKernelB(float **a, float **b, float **c, int n) { 
    // Sums each element per thread 
    int i = threadIdx.x + blockDim.x * blockIdx.x; 

    if (i < n * n) { 
     int l = i/n;     // Line 
     int c = (l == 0) ? i : (n - i); // Column 
     a[l][c] = b[l][c] + c[l][c]; 
    } 
} 

編譯器說,誤差是在該行:

a[l][c] = b[l][c] + c[l][c]; 

,你可以看,我試圖求和兩個矩陣(b和c)並將結果存儲在第三個矩陣(a)中,但是當我嘗試編譯時,我收到了這個惱人的錯誤。

我已經搜索了這個其他的問題,但在大部分時間裏,問題是,他們通過一維數組,並試圖訪問它們作爲一個二維數組,這不是我的情況。可能是我還沒注意到的東西,但我在這裏很難過。任何線索?

PS:這是從一個Programming Massively Parallel Processors鍛鍊,第3章

+4

你看到什麼奇怪在這個表達式:'C [1] [C]'? – Angew

+1

我建議你實際閱讀你的代碼。這個地方不是一個小問題,請不要把它當作一個。 – talonmies

+3

如果您使用了描述性變量名稱而不是「帶評論的廢話」,那麼這絕不會發生。 – molbdnilo

回答

2
int c = (l == 0) ? i : (n - i); // Column 

在此之後,c局部變量隱藏c函數參數。這也適用於這個子表達式:c[l][c]

解決方案:重命名局部變量c到別的東西。想起colcolumn,這會使聲明的評論變得冗餘。同樣,line(甚至更好,row)將用於l是一個更好的名字。

相關問題