そのため、私はしばらくこの問題に悩まされてきました。私の構造体は次のようになります。
typedef struct
{
int size;
int dim[DIMENSIONS];
float *data;
}matrix;
今、私にとっての問題は、malloc と memcpy の方法です。これが私がやっている方法です:
matrix * d_in;
matrix * d_out;
const int THREADS_BYTES = sizeof(int) + sizeof(int)*DIMENSIONS + sizeof(float)*h_A->_size;
cudaMalloc((void **) &d_in, THREADS_BYTES);
cudaMemcpy(d_in, h_A, THREADS_BYTES, cudaMemcpyHostToDevice);
編集:これは私がh_aを割り当てた方法です:
matrix A; // = (matrix*)malloc(sizeof(matrix));
A._dim[0] = 40;
A._dim[1] = 60;
A._size = A._dim[0]*A._dim[1];
A._data = (float*)malloc(A._size*sizeof(float));
matrix *h_A = &A;
h_A は私が割り当てた行列です。私は自分のカーネルを次のように呼んでいます:
DeviceComp<<<gridSize, blockSize>>>(d_out, d_in);
ただし、私のカーネルでは、構造体からのデータに到達できず、配列と変数のみに到達します。