I’ve passed a 2D array from a C++ class to a CUDA function; however, once in the CUDA function the data in the matrix is gone. I’m still in the host, not the device so I don’t understand what I’ve done wrong as this should be very straight forward.
Here is the 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);
}
Here is the CUDA code that is just printing out the matrix.
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");
}
}
In the C++ file – the print out of the matrix has real numbers, but the CUDA function just prints out 0’s for both the matrix and for the address of A[0]. I don’t know if this means I’m not passing in the matrix correctly between the 2 or if there is something I should do with the matrix once I get it to the CUDA function.
Ha, needed a while to find it. Check the indexing in your matrix randomization code. 🙂 You’re using the wrong variables and never initialize the float values.