我已经在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;
}
答案 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 ...
。)