簡體   English   中英

CUDA使用cudaMemcpy復制多個結構數組

[英]CUDA Copying multiple arrays of structs with cudaMemcpy

假設結構X具有一些基本元素和Y結構數組:

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都從主機中的連續內存區域復制到設備上的連續內存區域。

您必須將所有數據復制到發送到設備的中間連續緩沖區中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM