CUDA中文教程03之心得體會
定義在GPU上的變數:
1、使用關鍵字__device__ __local__ int X,則意味著該變數是定義在thread中的,它的生存週期跟它所在的thread一致。實際上定義為__local__ 的變數會存在global memory 中,所以速度也會很慢,一般不採用__local__關鍵字定義變數。關鍵字預設情況下的變數是存在register中的,速度比存在global memory中快,只有當register存滿了變數之後,系統才會自動把變數定義為__local__的,所以不要隨意的採用__local__關鍵字,這其實是下下策。
2、使用關鍵字__device__ __shared__ int X,則意味著該變數是定義在block中的,它的生存週期跟它所在的block一致,並且為該block裡的512個thread共享,都可以訪問到這個變數。
3、如果預設了第二個關鍵字,即__device__ int X,則是定義在grid中的,不僅在GPU中可見,CPU也可見。
4、使用關鍵字__device__ __constant__ int X,則意味著該變數是定義在grid中的,是一常量,在run的過程中不會改變其值,且GPU及CPU均可見,在CPU中可見,是因為CPU要把該值傳入GPU中。
*使用這些關鍵字時,如果是用了__local__,__shared__,__constant__,則不必要在前面加__device__,系統就會知道定義的是GPU上的變數,如果是定義了global memory 的變數,則需寫__device__關鍵字即可。
*自動變數,即沒有任何限定詞的,會自動的放到register中,除了陣列,陣列會存在local memory中,所以當宣告陣列時,必須存到thread中去run。
怎樣選擇關鍵字呢?
第一步,考慮該關鍵字是否被CPU可見:“是”,進入第二步;“不是”,進入第三步。
第二步,如果要被CPU可見,則選擇關鍵字__global__或者__constant__。而且在宣告變數時,必須寫在所有函式體外,保證全域性性。
第三步,如果不被CPU可見,則選擇關鍵字__shared__或__local__或者預設不寫關鍵字(存在register中),這時變數宣告必須在kernel 函式中。
shared memory 是一個很重要的概念,因為如果我們每次都去access global memory的話,就要很久的時間,所以我們要提高速度,就得想怎樣換到shared memory中去。這裡我們採用的是tile data ,即把資料切片的方法,變成一個個subset,使其剛好滿足shared memory的大小,處理完資料之後再從shared memory傳到global memory去。
*指標只能指向定義在global memory中的函式或變數。
源自:xieyan blog
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22785983/viewspace-619745/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CUDA中文教程02之心得體會
- CUDA程式優化心得之序列優化優化
- RabbitMQ學習心得體會之ExchangeMQ
- 心得體會
- CUDA程式優化心得之錯誤處理優化
- github心得體會Github
- Laravel 框架學習心得體會Laravel框架
- Oracle Job 使用心得體會Oracle
- 4~6次pta心得體會
- cuda安裝教程
- OpenCV 2.4.9 + CUDA 6.5 + Visual Studio 2013 [中文教程]OpenCV
- python學習心得體會(一)Python
- 這些年軟體開發生涯心得體會
- 學習“5S”管理心得體會
- java學習總結及心得體會Java
- State模式探討(筆記心得體會)模式筆記
- Proxy模式探討(筆記心得體會)模式筆記
- Iterators模式探討(筆記心得體會)模式筆記
- Day19 本週心得體會
- 對軟體開發的一點心得體會 (轉)
- 移動端SDK介面設計心得體會
- 學習EJB CMP/CMR 的心得體會 (轉)
- 構建CtRL-sim心得體會和思考
- nessus使用教程心得
- 軟體開發的一些思考及心得體會
- 從開源軟體開發中體會到的心得
- 由軟體構造引申的OOP與POP的心得體會OOP
- 完全使用 VSCode 開發的心得和體會VSCode
- 四則運算改進版+心得體會+總結
- Oracle DBA優化資料庫效能的心得體會Oracle優化資料庫
- CUDA記憶體介紹記憶體
- CUDA總體優化策略優化
- GStreamer基礎教程03 - 媒體型別與Pad型別
- 分享一些git小技巧,與個人心得體會Git
- 銷售人員工作心得體會:有回報的付出
- CUDA之Dynamic Parallelism詳解(二)Parallel
- CUDA優化之指令優化優化
- NV驅動重灌不會影響CUDA