CUDA記憶體訪問(一)提高篇------按部就班 ------GPU的革命

來源:互聯網
上載者:User

談到記憶體的訪問,其實也就是幾個API函數的調用,感覺也沒什麼好講的,知道cudaMalloc,知道cudaMemcpy,還有cudaFree,就應該可以對device上的記憶體進行分配,然後就可以在device上使用記憶體。但是就像我們看運動會一樣,只看100米的那不到10秒的時間,也許你只會說,他跑得真快。又有多少人能清楚其過程中的磨鍊啦?要真正理解device上記憶體的調度訪問,讓我們的程式達到更快的速度,就得對記憶體訪問的情況做更深入的瞭解,明白其中的過程。

我記得大學剛開始上程式設計語言的課程的時候,都會講到記憶體的分配和記憶體的釋放,但是一般都是在書的最後面才會講記憶體的對齊,記憶體的空間布局。就像C++一樣,或許你學習了好幾年,用了它好多年,但是你是否清楚class的記憶體布局?知道虛表是怎麼一個記憶體訪問過程?就像做網路,當做到一定地步的時候,才會探索資料從一段傳遞到另一段的時候資料發生了變化,內容不對了,定義的結構體傳遞到另一邊的時候就錯位了。當在使用SSE對資料處理加速的時候,是否為記憶體對齊的問題頭疼?說了這麼多,或許有人在煩了~~~講正題吧,這些部分或許只有自己真正在實際運用中遇到問題,才會去考慮的,不過還是希望大家能在遇到問題之前,就能掌握解決問題的能力。不是在遇到美女的時候才開始刮鬍子,平時的習慣就要養好。

前面這一段話或許只是生活的一些經曆,其實可以跳過,當遇到的時候再回來看看:)我們還是按部就班的來講解device上記憶體的訪問吧。這麼多年的發展,記憶體的價格是越來越便宜,但是有誰知道當你做編織記憶體的時候,很多人的眼睛都被弄瞎過啦,為她們當年為電腦作出的貢獻bless一下。

還記得小時候經常看槍戰片,看到小馬哥端著槍一個勁的掃射,哪個帥啊~~不過後來稍微大一些以後,心理面一直有一個疑問,子彈用不完?一次能裝多少子彈啊~就那麼小的彈夾。8發子彈的左輪手槍在帥哥哥手裡可以搞定十幾個人~還不裝彈- 囧!一般的自動手槍一般都是8發,14發,最多的駁殼槍(毛瑟槍)也才能裝20發子彈。你要說人家是《第一滴血4》裡面的史泰龍可以開著戰車上面的M2HB12.7mm重機槍,子彈不用彈夾,一次可以裝幾千發的彈;對,人家是DMA直接記憶體存取,不是通過彈夾訪問的,不需要處理器來中轉資料。G80支援的記憶體訪問的能力是一次訪問4bytes,8byets或者16bytes,G80有三種彈夾,一種可以一次裝4發子彈,一種是8發子彈,還有16發的。

Global Memory 在訪問過程中沒有Cache,就像以前的火槍一樣,打一槍以後,裝藥,然後才能打下一槍。每次的訪問時間是400-600個clock(core 跑的時鐘)延遲。所以在CUDA編程中,其中一個瓶頸就是記憶體訪問。利用SDK提供的bandwidthTest可以測試到host到device,device到host,device到device的傳輸效能。雖然PCIE有3.2G/s的理論值,但實際達不到這麼多。Device to Device的傳輸能達到89G/s(GTX260)左右,理論值是90G/s(GTX260)也達到差不多了。這個地方每個人顯卡不一樣,主板不一樣,設定環境不同,也不一定一樣。

Device上active的一個warp有32個線程,但是實際是16個thread同時在運行,就是half warp。當half warp的16個threads訪問記憶體的時候,最好讓16個thread依次對著相對應的記憶體位址,這樣的時候才能保證Coalesced Access。如下圖http://www.isi.edu/~ddavis/GPU/Course/Slides/GPU+CUDA.pdf:

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。