GPU(CUDA)学习日记(十三)------ CUDA内存简介
生活随笔
收集整理的這篇文章主要介紹了
GPU(CUDA)学习日记(十三)------ CUDA内存简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
GPU(CUDA)學習日記(十三)------ CUDA內存簡介
標簽: cuda存儲線程結構 2012-12-07 16:53 2902人閱讀 評論(0)收藏 舉報 分類: GPU(16) CUDA(16)版權聲明:本文為博主原創文章,未經博主允許不得轉載。
寄存器 寄存器是GPU片上高速緩存, 執行單元可以以極低的延遲訪問寄存器。寄存器的基本單元式寄存器文件,每個寄存器文件大小為32bit。局部存儲器對于每個線程,局部存儲器也是私有的。如果寄存器被消耗完。數據將被存儲在局部存儲器中。如果每個線程使用了過多的寄存器,或聲明了大型結構體或數據,或者編譯器無法確定數據的大小,線程的私有數據就有可能被分配到local memory中,一個線程的輸入和中間變量將被保存在寄存器或者是局部存儲器中。局部存儲器中的數據被保存在顯存中,而不是片上的寄存器或者緩存中,因此對local memory的訪問速度很慢。共享存儲器 共享存儲器(share memeory)也是GPU片內緩存存儲器。它是一塊可以被同一block中的所有線程訪問的可讀存儲器。使用關鍵字share添加到變量的聲明中,這將使這個變量駐留在共享內存中。cuda c編譯器對共享內存中的變量與普通變量將采取不同的處理方式。對于在GPU上啟動的每個線程塊,cuda c編譯器都將創建該變量的一個副本,線程塊中的每一個線程都共享這塊內存,但這個線程卻無法看到也不能修改其他線程塊的變量的副本。這就實現了一種非常好的方式,使得一個線程塊中的多個線程能夠在計算上進行通信和協作,而且,共享內存緩沖區駐留在物理GPU上,而不是駐留在GPU之外的系統內存中。
常量內存 __constant__將把變量的訪問限制為只讀。在接受了這種限制之后,我們希望得到某種回報,與全局內存中讀數據相比,從常量內存中讀取相同的數據可以節約內存的帶寬,主要有兩個原因: -對常量內存的單次讀操作可以廣播到其他的“領進”線程,這將節約15次讀取操作。 -常量內存的數據緩存起來,因此對相同地址的連續讀取操作將不會產生額外的內存通信量。 “鄰近”是指半個warp中的線程。當處理常量內存時。nvidia硬件將把單次內存讀取操作廣播到每個半線程束。在半線程束中包含了16個線程,即線程束中數量的一半。如果在半線程束中的每一個線程訪問相同的常量內存地址。那么GPU只會發生一次讀操作事件并在隨后將數據廣播到每個線程。如果從常量內存中讀取大量的數據,那么這種方式產生的內存流量只是全局內存時的1/16.然而,當使用常量內存時也可能產生負面影響。如果半線程束的所有16個線程需要訪問常量內存中不同的數據,那么這個16次讀取操作會被串行化,從而需要16倍的時間來發出請求。但如果從全局內存中讀取,那么這些請求會同時發出。在這種情況下,從常量內存讀取就慢于從全局內存中讀取。
全局存儲器 全局存儲器(global memeory)位于顯存(占據了大部分的顯存),GPU, CPU, 都可以進行讀取訪問嗎。整個網格中的任意線程都能讀寫全局存儲器的任意位置。在目前的架構中,全局存儲器沒有緩存。
總結
以上是生活随笔為你收集整理的GPU(CUDA)学习日记(十三)------ CUDA内存简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 下从命令行打开pdf文件和h
- 下一篇: Adobe illustrator 论文