Необходима помощь с CUDA

Доброе время суток. Необходима помощь с CUDA. Установил куда и попробовал запустить следующий пример:

  1. #include cuda.h
  2. #include stdio.h
  3.  
  4. __global__ void sumKernel(int* a, int* b, int* c)
  5. {
  6.    int idx = blockIdx.x*blockDim.x+threadIdx.x;
  7.    c[idx] = a[idx] + b[idx];  
  8. }
  9.  
  10. void fillRandom(int *a, const unsigned int n)
  11. {
  12.         for(int i=0; i<n; i++)
  13.                 a[i] = rand();
  14. }
  15.  
  16. int main()
  17. {
  18.         const unsigned int blockSize=512;
  19.         const unsigned int numBlocks=3;
  20.         const unsigned int numItems=blockSize*numBlocks;
  21.  
  22.         int * a = new int[numItems];
  23.         int * b = new int[numItems];
  24.         int * c = new int[numItems];
  25.  
  26.         fillRandom(a, numItems);
  27.         fillRandom(b, numItems);
  28.         for(int i=0; i<numItems; i++) c[i]=1;
  29.  
  30.         cudaSetDevice(0);
  31.  
  32.         int *aDev, *bDev, *cDev;
  33.  
  34.         cudaMalloc( (void**)&aDev, numItems*sizeof(int) );
  35.         cudaMalloc( (void**)&bDev, numItems*sizeof(int) );
  36.         cudaMalloc( (void**)&cDev, numItems*sizeof(int) );
  37.  
  38.         cudaMemcpy(aDev, a, numItems*sizeof(int), cudaMemcpyHostToDevice);
  39.         cudaMemcpy(bDev, b, numItems*sizeof(int), cudaMemcpyHostToDevice);
  40.  
  41.         dim3 blocks = dim3(numBlocks);
  42.         dim3 threads = dim3(blockSize);
  43.  
  44.         sumKernel<<<numBlocks, blockSize>>>(aDev, bDev, cDev);
  45.  
  46.         cudaMemcpy((void *)c, cDev, numItems*sizeof(int), cudaMemcpyDeviceToHost);
  47.  
  48.         for(int i = 0; i < 100; i++)
  49.                 printf("%d + %d = %d\n", a[i], b[i], c[i]);
  50.  
  51.         delete [] a;
  52.         delete [] b;
  53.         delete [] c;
  54.  
  55.         cudaFree(aDev);
  56.         cudaFree(bDev);
  57.         cudaFree(cDev);
  58.  
  59.         system("pause");
  60.         return 0;
  61. }

Компиляция проходит успешно, но после выполнения sumKernel все элементы массива С равны 1. Подскажите с чего начать поиск ошибки.

Среда - Visual Studio 2008
cudatoolkit_4.1.28_win_32
WIndows xp
gForce 8600GT

Forums: 

Я тоже сейчас мучаюсь с

Я тоже сейчас мучаюсь с кудой, но этот момент вроде прошел. Советую заглянуть сюдой http://www.cs.cmu.edu/afs/cs/academic/class/15668-s11/www/cuda-doc/html/... и написать обработчик ошибок, там при копировании памяти у тебя точно должно что то вылазить. А пока ты ничего не открыл, попробуй сделать следующее:
в строках 34-36 убиваем (void**), без него чудно должно и так работать.
строка 46 - убить (void *), оставить cudaMemcpy((void *)c, cDev,.....
а строки 41-42 убиваем полностью, не используются

Если не запустится, смотри как получать коды ошибок и их расшифровывать

по расшифровке кодов - ссылка выше
коды получаются из ф-ций работы с памятью - это результат, а после вызова ядра вызываем cudaGetLastError().
Удачи, надеюсь поможет...