2013-02-05 49 views
2

呼叫:cudaMalloc3DArray失敗並顯示錯誤值 - 限制大小?

cudaExtent extent = make_cudaExtent(1920 * sizeof(float), 1080, 10); 
chanDesc = cudaCreateChannelDesc (32, 0, 0, 0, cudaChannelFormatKindFloat); 
err = cudaMalloc3DArray (&(devYAll[0]), &chanDesc, extent, 0); 

err=cudaErrorInvalidValue失敗。當我使用第一個參數的範圍爲1024或更小時,那麼對3D數組的調用會成功。內存大小是否有限制,可以用cudaMalloc3DArray分配?

+0

試圖使代碼縮進codelike; – JPM

回答

3

是的範圍大小的限制 - 2048x2048x2048或4096x4096x4096取決於你有哪些硬件(從你的問題的細節我猜你有一張費米卡)。但是,您的問題的真正來源是您的撥打make_cudaExtent。對於cudaMalloc3DArray,範圍的第一個參數應在元素中給出,而不是字節。這就是爲什麼你的第一個尺寸> 1024的錯誤,因爲1024 * sizeof(float)= 4096這是Fermi GPU的限制。

因此分配一個1920x1080x10 3D陣列,這樣做:

cudaExtent extent = make_cudaExtent(1920, 1080, 10); 
chanDesc = cudaCreateChannelDesc (32, 0, 0, 0, cudaChannelFormatKindFloat); 
err = cudaMalloc3DArray (&(devYAll[0]), &chanDesc, extent, 0); 

在這個調用中,該類型的大小是從信道描述推斷出,並根據需要以滿足間距的程度的尺寸被修改/硬件的對齊要求。

相關問題