CUDA 學習筆記之儲存器

洛欣發表於2010-04-30

每一個執行緒都有它自身的register,有時也有local memory,但是我不建議使用local memory, 應由系統自己處理這個問題。放在register中的變數不用任何修飾符。

 

       每一個block內的執行緒共享shared memory(一塊記憶體空間),大小現在是16k。因此在訪問時,可能要同步,使用內建的函式_syncthreads()內建函式來處理同步,在該函式的呼叫處,塊內所有的執行緒都得等待,直至當前block內所有的執行緒都到達此處,如果有的執行緒被中止,就成了永遠等待了,要注意這種情況。用__shared__來修飾放在shared memory中的變數,但是在宣告的時候不能初始化,而且必須在函式內部宣告。

 

       此外還有兩個只讀儲存器,可由所有block的執行緒訪問,一個是常量儲存器,存入其中的變數值不可在kernal中修改,用 __constant__來修飾,但是其值可以進行復制等一些操作,也可以在主機上通過執行時函式訪問,但是必須定義成全域性變數,這不太好。一個是紋理儲存器,它必須繫結到某個資料集,但是它不是可改的。對於一個應用程式啟動的核心而言,所有的儲存器空間都是持久的。

 

       最後就是device memory了,它可以由所有的block的執行緒共享,作用域在於檔案,用__device__來修飾,要定義成全域性變數,儘量不用它。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22785983/viewspace-661686/,如需轉載,請註明出處,否則將追究法律責任。

相關文章