Я недавно работаю с CUDA, пытаюсь написать код, но у меня все еще проблемы.
Код процессора это нормально. Но не код GNU.
ошибки, которые я получил при компиляции кода:
ejemplo.cu(59): error: argument of type "double" is incompatible with parameter of type "const void *"
ejemplo.cu(61): error: argument of type "double" is incompatible with parameter of type "const void *"
ejemplo.cu(66): error: identifier "__global__void" is undefined
ejemplo.cu(67): error: expected a ";"
и предупреждение: разбор перезапускается здесь после предыдущей синтаксической ошибки
int main(int argc, char** argv)
{
int N = 1000;
int M = 10;
int DATA[N][M];
for (int i=0; i<N; i++){
for (int j=0; j<M; j++) {
DATA[i][j] = rand() % 10;
}
}
printf("\nMatriz DATA\n");
for (int i=0; i<N; i++){
for (int j=0; j<M; j++) {
printf("%i,",DATA[i][j]);
}
printf("\n");
}
printf("\nMatriz MOV\n");
double SUMA, PROMEDIO, MOV[N][1];
for (int i=0; i<N; i++){
for (int j=0; j<M; j++) {
SUMA+=DATA[i][j];
}
PROMEDIO=SUMA / M;
MOV[1][i]=PROMEDIO;
SUMA=0;
}
for (int i=0; i<N; i++){
printf("%f,",MOV[1][i]);
}
printf("\n\nVector AVG\n");
double AVG[M];
SUMA=0;
for (int j=0; j<M; j++) {
for (int i=0; i<N; i++){
SUMA+=DATA[i][j];
}
PROMEDIO=SUMA / N;
AVG[j]=PROMEDIO;
SUMA=0;
}
for (int i=0; i<M; i++) {
printf("%f\n",AVG[i]);
}
printf("\n");
void ejemplo(int argc, char** argv); {
int size = N*M*sizeof(double*);
double *SUMAd, *PROMEDIOd, *MOVd, *AVGd;
cudaMalloc(&SUMAd, size);
cudaMemcpy(SUMAd, SUMA, size, cudaMemcpyHostToDevice);
cudaMalloc(&PROMEDIOd, size);
cudaMemcpy(PROMEDIOd, PROMEDIO, size, cudaMemcpyHostToDevice);
cudaMalloc(&MOVd, size);
cudaMemcpy(MOVd, MOV, size, cudaMemcpyHostToDevice);
cudaMalloc(&AVGd, size);
__global__void ejemplo(int argc, char** argv)
{
int N = blockDim.x * blockIdx.x + threadIdx.x;
int M = blockDim.y * blockIdx.y + threadIdx.y;
int thread_id = N * N + M;
}
dim3 dimGrid (1,1);
dim3 dimBlock(16,1);
ejemplo<<dimGrid, dimBlock>>(SUMAd,PROMEDIOd,MOVd, AVGd);
cudaMemcpy(AVG, AVGd, size, cudaMemcpyDeviceToHost);
cudafree(SUMAd);
cudafree(PROMEDIOd);
cudafree(MOVd);
cudafree(AVGd);
return 0;
}
}