尝试编译cuda编程时出错

时间:2017-09-13 13:11:54

标签: cuda

我已经在cuda编程中编写了一个矩阵乘法程序。但是我得到了几个错误。我已经提到r =错误我得到了什么。

expected an identifier代码行int a=0,b=0

expression must be a modifiable lvalue代码行b=arr2[(a*b)+row]

我已经提到了下面的代码。我非常乞求cuda编程。请帮助我解决这个问题。

    #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;

}

1 个答案:

答案 0 :(得分:3)

你有一个宏subprocess.run("start npm run features:chrome:server", check=True, shell=True)

b

请记住,宏实际上只是文本替换:所有出现的#define b 512 整个单词都将替换为b。现在编译器看到了这一行

512

为:

int a=0,b=0;

这显然是语法错误。

(因为这是导致错误的常见原因,所以使用宏的全大写名称是一个好习惯。替换宏的阶段称为预处理。您的编译器可以显示源代码的外观比如在预处理之后,例如int a=0,512=0; gcc -E ...。)