Error compiling CUDA
c, compiler-construction, cuda, gcc, nvcc
Solution
I think if you make these changes:
__global__ void operate(int* memoria1, int* memoria2)
^ ^
and:
cudaMalloc((void**) &memory_1, 5 * sizeof(int));
cudaMalloc((void**) &memory_2, 5 * sizeof(int));
^ ^
Your code will compile and run properly. Your results will be kind of wierd since the code doesn't actually initialize the values of `a` and `c` that are being operated on by the CUDA kernel. So you might want to initialize those.
Problem
I'm trying to compile a C program to try parallel programming, when I try to compile it with nvcc compiler (Nvidia) it gives me those errors: ``` inicis.cu(3): error: attribute "global" does not apply here inicis.cu(3): error: incomplete type is not allowed inicis.cu(3): error: identifier "a" is undefined inicis.cu(3): error: expected a ")" inicis.cu(4): error: expected a ";" /usr/include/_locale.h(68): error: expected a declaration inicis.cu(20): error: type name is not allowed inicis.cu(21): error: type name is not allowed inicis.cu(22): error: type name is not allowed inicis.cu(41): error: identifier "dev_a" is undefined inicis.cu(42): error: identifier "dev_b" is undefined inicis.cu(43): error: identifier "dev_c" is undefined ``` It seems nvcc doesn't recognize the global attribute made by Nvidia... Here's my C program, it's pretty simple: ``` __global__ void operate(*memoria1, *memoria2) { memoria2[threadIdx.x] = memoria1[threadIdx.x] + 1; } int main(int args, char **argv){ int a[5], c[5]; int *memory_1, *memory_2; cudaMalloc(void** &memory_1, 5 * sizeof(int)); cudaMalloc(void** &memory_2, 5 * sizeof(int)); cudaMemcpy(memory_1, a, 5 * sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(memory_2, c, 5 * sizeof(int), cudaMemcpyHostToDevice); operate <<<1, 5>>>(memory_1, memory_2); cudaMemcpy(c, memory_2, 5 * sizeof(int), cudaMemcpyDeviceToHost); for (int i = 0; i < sizeof(c); ++i) { printf ("%d" , c[i]); } cudaFree(memory_1); cudaFree(memory_2); return 0; } ``` I think it could be the compiler but what do you think It would be?