Arrays CUDA,动态数组+;数组。malloc和copy
所以我在这个问题上纠缠了一段时间。我的结构如下所示:Arrays CUDA,动态数组+;数组。malloc和copy,arrays,dynamic,cuda,Arrays,Dynamic,Cuda,所以我在这个问题上纠缠了一段时间。我的结构如下所示: typedef struct { int size; int dim[DIMENSIONS]; float *data; }matrix; DeviceComp<<<gridSize, blockSize>>>(d_out, d_in); 现在我的问题是如何使用malloc和memcpy。我就是这样做的: matrix * d_in; matrix * d_out; const int THREAD
typedef struct
{
int size;
int dim[DIMENSIONS];
float *data;
}matrix;
DeviceComp<<<gridSize, blockSize>>>(d_out, d_in);
现在我的问题是如何使用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是我分配的矩阵。我这样称呼我的内核:
typedef struct
{
int size;
int dim[DIMENSIONS];
float *data;
}matrix;
DeviceComp<<<gridSize, blockSize>>>(d_out, d_in);
DeviceComp(d_out,d_in);
然而,在我的内核中,我无法从结构中获取任何数据,只有数组和变量。这是一个常见的问题。当您在主机上执行malloc操作时(对于h_a->data),您分配了无法从设备访问的主机数据 详细描述发生的情况以及如何修复 在您的情况下,类似这样的方法应该会起作用:
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;
float *d_data;
cudaMalloc((void **) &d_data, A._size*sizeof(float));
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);
cudaMemcpy(&(d_in->data), &d_data, sizeof(float *), cudaMemcpyHostToDevice);
请注意,这实际上不会将数据
区域从A的主机副本复制到设备副本。它只是使设备可以访问数据
区域,大小与主机数据
区域相同。如果还要复制数据
区域,则需要使用h\u a->data
和d\u data
执行另一个cudaMemcpy
操作