Операции сложения и умножения с массивами больших размерностей

Доброго времени суток. У меня возникла проблема с освоением технологии Nvidia Cuda. Есть программа, которая должна умножить два массива между собой и
затем сложить полученные результаты. В подавляющем большинстве примеров используются одномерные массивы, которые не очень удобны в работе. Однако, промучавшись с двумерными, решил все-таки
делать с одномерными. Для удобства в проведении вычислений я использую двумерную индексацию(.x , .y). При компиляции выдается ошибка:
"cutilCheckMsg() CUTIL CUDA error : Kernel execution failed [ ComplexMA ] : (9) invalid configuration argument."

Участок кода:

  1. #define SIGNAL_SIZE 8192
  2. #define SIGNAL_COUNT 384
  3. #define RAY_COUNT 512
  4.  
  5. typedef double Complex;
  6.  
  7. static __global__ void ComplexMA(Complex* , Complex* , Complex* );
  8.  
  9. static __global__ void ComplexMA(Complex* mas1, Complex* mas2, Complex* mas_tmp)
  10. {
  11.         const int numThreadsX = blockDim.x * gridDim.x;
  12.         const int threadIDX = blockIdx.x * blockDim.x + threadIdx.x;
  13.         const int numThreadsY = blockDim.y * gridDim.y;
  14.         const int threadIDY = blockIdx.y * blockDim.y + threadIdx.y;
  15.        
  16.         int j=0, m=0, p=0;
  17.         Complex c;
  18.  
  19.         for(int m = threadIDY; m <RAY_COUNT; m+= numThreadsY)
  20.         {
  21.                 for (int i = threadIDX; i <SIGNAL_COUNT*SIGNAL_SIZE; i+= numThreadsX)
  22.                 {
  23.                         j=m*SIGNAL_COUNT+i/(SIGNAL_SIZE);                //для смещения по массиву, который участвует в произведении
  24.                         p=m*SIGNAL_SIZE+(i-SIGNAL_SIZE*j)%SIGNAL_SIZE;   //для смещения по массиву, куда производится сложение
  25.                         c=mas1[i]*mas2[j];                               //массивы состоят из рандомных чисел
  26.                         mas_tmp[p]+=c;                                   //массив состоит изначально из нулей
  27.                        
  28.                        
  29.                 }
  30.        
  31.         }
  32. }
  33.  
  34. int main(int argc, char** argv)
  35. {
  36.         dim3 dimGrid(6144,16);
  37.         dim3 dimBlock(512,32);
  38.         ...
  39.         // Calling  Mul 'n Add function
  40.         ComplexMA<<<dimBlock, dimGrid>>>(mas1_, mas2_,mastmp_);
  41.  
  42.         // Check if kernel execution generated and error
  43.         cutilCheckMsg("Kernel execution failed [ ComplexMA ]");//ошибка указывает на эту строку
  44.         ...
  45. }

Видеокарта: GTX 650, Windows 7 Professional 32 bit, VS 2010, версия toolkit 5.0.

AttachmentSize
Plain text icon prog_array.txt4.39 KB

Forums: 

В unapproved comments - пусто

В unapproved comments - пусто.

Но снял антиспам для зарегистрированных пользвателей

Не знаю что значит

Не знаю что значит "unapproved comments", но вчера были проблемы, а сегодня - нет.

Единственное, что можно

Единственное, что можно предположить, это выход за пределы диапазона. Возможно, ошибка здесь:

j=m*SIGNAL_COUNT+i/(SIGNAL_SIZE);
p=m*SIGNAL_SIZE+(i-SIGNAL_SIZE*j)%SIGNAL_SIZE;

Попробуйте сначала закомментировать содержимое функции - если ошибка появится даже при вызове пустой функции, то значит проблема в другом месте. Иначе, следует предположить что проблема в этом блоке - числа получаются больше или равны SIGNAL_COUNT*SIGNAL_SIZE. Ели есть возможность отследить пошагово, просмотрите, иначе - используйте другие методы, например, закомментировать, вывести число и т. п.