-2
我已經編寫了一個程序來在cuda編程中進行矩陣乘法,但是我得到了一些錯誤。我提到了r =錯誤,我收到了。嘗試編譯cuda編程時出現錯誤
expected an identifier
代碼行int a=0,b=0
expression must be a modifiable lvalue
行代碼b=arr2[(a*b)+row]
我剛纔提到的代碼below.I感到非常乞討CUDA programming.please幫我解決這個問題。
#include<stdio.h>
#define n 512
#define r 512
#define t 512
#define b 512
__global__ void metrimul(int *arr,int *arr2,int *arr3){
int row=threadIdx.x;
int column=threadIdx.y;
int result=0,i;
int a=0,b=0;
for(i=0;i<n;i++){
a=arr[(column * n) + i];
b=arr2[(i * n) + row];
result=(a * b)+result ;
}
arr3[(column*n) + row]=result;
}
int main(){
int **h_arr1=(int **)malloc(sizeof(int *)* n);
int **h_arr2=(int **)malloc(sizeof(int *)* n);
int **h_arr3=(int **)malloc(sizeof(int *)* n);
int *d_arr1;
int *d_arr2;
int *d_arr3;
int i,j,k;
cudaMalloc((void **)&d_arr1,sizeof(int) * n);
cudaMalloc((void **)&d_arr2,sizeof(int) * n);
cudaMalloc((void **)&d_arr3,sizeof(int) * n);
for(i=0;i<n;i++){
h_arr1[i]=(int *)malloc(sizeof(int) * n);
h_arr1[i]=(int *)malloc(sizeof(int) * n);
h_arr1[i]=(int *)malloc(sizeof(int) * n);
}
for(j=0;j<n;j++){
for(k=0;k<n*n;k++){
h_arr1[j][k]=1;
h_arr2[j][k]=1;
}
}
cudaMemcpy(d_arr1,h_arr1,n * n * sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(d_arr2,h_arr2,n * n * sizeof(int),cudaMemcpyHostToDevice);
metrimul<<<b,t>>>(d_arr1,d_arr2,d_arr3);
cudaMemcpy(h_arr3,d_arr3,n * n * sizeof(int),cudaMemcpyDeviceToHost);
for(j=0;j<n;j++){
for(k=0;k<n*n;k++){
printf("%d",h_arr3[j][k]);
}
}
return 0;
}
@M歐姆我試着用你的修改。現在我沒有得到這樣的錯誤。但是當我編譯這個我得到'分段錯誤(核心轉儲)'。 ..幫我解決這個問題 – Intern
分段錯誤是在有效內存之外訪問的。您應該嘗試在調試器中找到原因。 (但是看看你的代碼,你試圖從'h_arr'複製'n * n' ints到'd_arr',但是你的內存不是連續的ints。在你的情況下,你必須分配一個'n *或者在循環中複製子陣列。) –
並且您將三次分配給相同的數組'h_arr1'。當然,這是一個錯字。 –