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