матрица отображается пустой при передаче из cpp в CUDA - PullRequest
0 голосов
/ 13 ноября 2010

Я передал 2D-массив из класса C ++ в функцию CUDA;однако, как только в функции CUDA данные в матрице исчезают.Я все еще в хосте, а не в устройстве, поэтому я не понимаю, что я сделал неправильно, поскольку это должно быть очень просто.

Вот C ++

int main()
{
   const int row=8;
   const int column=8;
   int rnum;
   srand(time(0));
   rnum = (rand() % 100) + 1;  

  float table[row][column];

    for(int r=0; r<row; r++){ 
      for(int c=0; c<column;c++){  
  table[row][column] = (rand()%100) + 1.f;  
  cout << table[row][column] << " ";
      }
      cout << "\n";
    } 

   //CUDA
   handleMatrix(&table[0][0], 8);

}

Вот код CUDA, который просто распечатывает матрицу.

void handleMatrix(float * A, int size)
{

   printf("&A[0]=%i\n",&A);
   printf("A[0] is %f \n",A[0]);
   for(int j=0; j<size; j++){
      for(int k=0; k<size;k++){
        printf("%f ",A[j +size*k]); // << " ";
       }
       printf("\n");  
    }   
}

В файле C ++ - печать из матрицы имеет действительные числа, но функция CUDA просто печатаетout 0 для матрицы и для адреса A [0].Я не знаю, означает ли это, что я неправильно передаю матрицу между двумя, или я должен что-то сделать с матрицей, как только получу ее в функцию CUDA.

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

Ха, нужно время, чтобы найти его.Проверьте индексацию в коде матрицы рандомизации.:) Вы используете неправильные переменные и никогда не инициализируете значения с плавающей точкой.

0 голосов
/ 13 ноября 2010

float * A - указатель на хост, а не в пространство устройства. используйте cuda malloc + memcpy. float * A не передает содержимое, только адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...