0
我想從設備複製到主機8650752字節,但我越來越堆棧溢出錯誤,令人驚訝的是我可以從主機複製相同的數據到設備,但計算後,無法取回。代碼非常簡單,所以不知道什麼是錯將數據從設備複製到主機是否有任何限制?
代碼:
__global__
void kernel(....)
{
int x=threadIDX.x;
for (int j=0; j<256; j++)
{
for (int i=0; i<256; i++)
{
int index = 256*256*x + 256*j + i;
dVOL_in[(x*65536)+(256*j)+i]=index;
}
}
}
int main(void)
{
const int VOL_SIZE = 8650752;
const int VOL_BYTES = VOL_SIZE * sizeof(float);
float hVOL[VOL_SIZE];
float * dVOL_in;
gpuErrchk(cudaMalloc((void**) &dVOL_in, VOL_BYTES));
// volume data read from some file
gpuErrchk(cudaMemset(dVOL_in,0,VOL_BYTES));
gpuErrchk(cudaMemcpy(dVOL_in,Vol,VOL_BYTES, cudaMemcpyHostToDevice)); //works fine
kernel<<<1,132>>>(....);
cudaMemcpy(hVOL, dVOL_in, VOL_BYTES, cudaMemcpyDeviceToHost); //stack overflow error
}
「hVOL」數組爲33 MB。內核可能沒有太多的堆棧空間。 – Barmar 2013-04-21 03:06:13
因此,用'malloc'來創建你的主機數組'hVOL'。 – 2013-04-21 04:37:41
如果您打算在此處提出更多問題,請遵守格式化您的代碼的習慣,以便那些試圖幫助您閱讀的人很容易。這真是太糟糕了...... – talonmies 2013-04-21 11:21:04