矩阵从c ++传递到CUDA时显示为空

时间:2010-11-13 16:46:59

标签: c++ arrays multidimensional-array

我已经将一个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函数只为矩阵和A [0]的地址输出0。我不知道这是否意味着我没有在2之间正确地传递矩阵,或者一旦我将它转换为CUDA函数,我应该对矩阵做什么。

2 个答案:

答案 0 :(得分:1)

哈,需要一段时间才能找到它。检查矩阵随机码中的索引。 :)您正在使用错误的变量,并且从不初始化浮点值。

答案 1 :(得分:0)

float * A是主机上的指针,而不是设备空间中的指针。使用cuda malloc + memcpy。 float * A不传递内容,只传递地址。