2012-11-02 116 views
6

我知道使用1D數組時的動態分配,但在使用2D數組時如何完成動態分配?GPU 2D共享內存動態分配

myKernel<<<blocks, threads,sizeofSharedMemoryinBytes>>>(); 
     .... 

__global__ void myKernerl(){ 
__shared__ float sData[][]; 
    ..... 
} 

說我要分配一個2D共享存儲陣列:

__shared__ float sData[32][32]; 

怎樣纔可以動態地完成?將是:

myKernel<<< blocks, threads, sizeof(float)*32*32 >>>(); 
+7

你的靜態聲明「2D共享存儲陣列」是不是二維的,它僅僅是線性內存和編譯器生成到其行爲主的順序進行訪問。根據你關於多維數組的無數問題,或許是時候坐下來閱讀一些參考資料,並瞭解C++如何工作。 – talonmies

回答

4

正如你已經正確地寫入你的每個內核調用的執行配置之前指定動態分配共享內存的大小(<<<blocks, threads, sizeofSharedMemoryinBytes>>>)。這指定共享存儲器中的字節數,除了靜態分配的內存以外, 爲此調用每個塊動態分配的字節數。恕我直言,沒有辦法訪問像二維數組這樣的內存,你必須使用一維數組,並使用它像2D。最後想想,別忘了修飾符extern。所以,你的代碼應該是這樣的:

​​
+0

這也是我的想法。 – Ono