CUDA使用cudaMemcpy复制多个结构数组
假设一个带有一些原语和一个Y结构数组的结构X:
typedef struct
{
int a;
Y** y;
} X;
X的实例X1在主机上初始化,然后通过cudaMemcpy复制到设备内存中X的实例X2。
这对X中的所有原语(例如int a)都适用,但cudaMemcpy似乎将任何双指针变为单个指针,从而在X中存在访问结构数组(如y)的情况下导致出现异常限制, 。
在这种情况下,我应该使用另一个memcpy函数,如cudaMemcpy2D或cudaMemcpyArrayToArray?
建议非常感谢。 谢谢!
编辑
自然的方法(如“我就是这样做,如果它只是C)复制一个结构数组将是cudaMalloc数组,然后cudaMalloc和初始化每个元素分开,例如:
X** h_x;
X** d_x;
int num_x;
cudaMalloc((void**)&d_x, sizeof(X)*num_x);
int i=0;
for(;i<num_x;i++)
{
cudaMalloc((void**)d_x[i], sizeof(X));
cudaMemcpy(&d_x[i], &h_x[i], sizeof(X), cudaMemcpyHostToDevice);
}
然而,for的cudaMalloc会产生崩溃。 我承认我不熟悉Cuda函数中指针的使用,所以也许我搞砸了cudaMalloc和cudaMemcpy参数?
cudaMemcpy
, cudaMemcpy2D
和cudaMemcpyArrayToArray
都从主机中的连续内存区域复制到设备上的连续内存区域。
您必须将所有数据复制到发送到设备的中间连续缓冲区中。
链接地址: http://www.djcxy.com/p/47367.html上一篇: CUDA Copying multiple arrays of structs with cudaMemcpy