2014-02-10 3 views
0

Я абсолютный новичок, когда дело доходит до CUDA. Я попробовал написать простую программу суммирования векторов, следуя примеру программы в качестве базы, и она, похоже, не работает в том смысле, что cudaMalloc не выделяет память. Я использую CUDA 5.0, и я работаю на Ubuntu 13.04 Для компиляции я просто введитеПочему cudaMalloc() не работает?

nvcc cuda1.cu -o cuda1

приведен фрагмент кода, как выглядит следующим образом

#include<stdio.h> 
#include<cuda.h> 
#include<cuda_runtime_api.h> 
#define N 5 

__global__ void add(int *a, int *b, int *c) 
{ 
     int tid = blockIdx.x; 
     if (tid<N) 
       c[tid] = a[tid] + b[tid]; 
} 

int main(void) 
{ 
     int a[N],b[N],c[N]; 
     int *dev_a, *dev_b, *dev_c; 
     if (cudaMalloc((void**)&dev_a, N * sizeof(int))!= cudaSuccess) 
       printf("Could not allocate memory"); 
cudaMalloc((void**)&dev_b, N * sizeof(int)); 
     cudaMalloc((void**)&dev_c, N * sizeof(int)); 
     for (int i = 0; i<N; i++) 
     { 
       a[i] = i; 
       b[i] = i; 
     } 
     cudaMemcpy(dev_a, a, N * sizeof(int), cudaMemcpyHostToDevice); 
     cudaMemcpy(dev_b, b, N * sizeof(int), cudaMemcpyHostToDevice); 
     add<<<N,1>>>(dev_a, dev_b, dev_c); 
     cudaMemcpy(c, dev_c, N * sizeof(int), cudaMemcpyDeviceToHost); 
     for(int i =0; i<N; i++) 
       printf("%d + %d = %d\n",a[i],b[i],c[i]); 
     cudaFree(dev_a); 
     cudaFree(dev_b); 
     cudaFree(dev_c); 
     return EXIT_SUCCESS; 
} 
+3

Я предполагаю, что вы получаете сообщение об ошибке «Не удалось выделить память». Вероятно, это проблема с вашей машиной. Пожалуйста, сделайте [правильную проверку ошибок cuda] (http://stackoverflow.com/questions/14038589), чтобы декодировать ошибку для вас и дать вам сообщение с дополнительной информацией о том, что не так. Затем опубликуйте * полный * выход вашей программы, включая все сообщения об ошибках. Вы также должны попробовать запустить 'nvidia-smi -a' на своей машине и отложить результаты. Пожалуйста, отредактируйте эту запрошенную информацию в свой вопрос, не пытайтесь вставлять комментарии. (Я могу правильно запустить вашу программу). –

ответ

1

Не могли бы вы изменить логику распределения для

cudaError_t rc = cudaMalloc((void **) &dev_a, N*sizeof(int)); 

if (rc != cudaSuccess) 
    printf("Could not allocate memory: %d", rc); 

Возможно, код возврата дает более глубокое понимание.

Смежные вопросы