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参数?


cudaMemcpycudaMemcpy2DcudaMemcpyArrayToArray都从主机中的连续内存区域复制到设备上的连续内存区域。

您必须将所有数据复制到发送到设备的中间连续缓冲区中。

链接地址: http://www.djcxy.com/p/47367.html

上一篇: CUDA Copying multiple arrays of structs with cudaMemcpy

下一篇: Default Pinned Memory Vs Zero