CUDA學習筆記之變數限制符

洛欣發表於2010-05-07

 變數限制符

__device__:位於視訊記憶體中,用於全域性通訊,具有檔案作用域,且須定義在所有程式程式碼之前,因此其值在所有的在device上執行的函式中都可以使用

 

__shared__:位於共享儲存中,主要用於執行緒塊內通訊:必須定義在kernal最前,且定義時不能賦值。一般和執行緒id有關。一般前加extend修飾,一般的使用方法是:shared[threadIdx.x]=device[blockIdx.x*blockDim.x+threadIdx.x]

 

無修飾:在register夠用時,儲存在暫存器中,不夠用時,儲存在在local memory內,當然local Memory也只是屬於執行緒所有,不過也很慢,因為它實事上是golbal memory中的一塊空間。

 

__constant__:位於不變儲存器中,在kernal執行過程中不能修改,但是可以在主機中修改。而且必須定義在所有程式程式碼之前,具有檔案內作用域。__constant__修飾的量,如果是值的話,只是它的值不可更改;如果是指標的話,可以更改指標空間記憶體儲的值,但是不能讓指標重新指向;而且必須宣告在檔案的所有函式的前面,也就是說它的作用域是檔案內,因此在使用時,沒有必要把它當成引數傳入函式(我受java的影響太深了)。

 

訪問速度順序為:register>shared>constant>local>device

 

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

相關文章