所以我一直在这个问题上停留了一段时间。我的结构如下所示:
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);
但是,在我的内核中,我无法从结构中获取任何数据,只能获取数组和变量。