我已经将一个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函数,我应该对矩阵做什么。
答案 0 :(得分:1)
答案 1 :(得分:0)
float * A
是主机上的指针,而不是设备空间中的指针。使用cuda malloc + memcpy。
float * A
不传递内容,只传递地址。