cuda 核函数 for循环_【CUDA 基础】4.4 核函数可达到的带宽
Abstract: 本文通過(guò)矩陣轉(zhuǎn)置這一個(gè)例子,調(diào)整,優(yōu)化核函數(shù),使其達(dá)到最優(yōu)的內(nèi)存帶寬Keywords: 帶寬,吞吐量,矩陣轉(zhuǎn)置
開篇廢話
下面是廢話,與本文知識(shí)無(wú)關(guān),可以直接跳到下面紅字處開始本文知識(shí)的學(xué)習(xí)。
廢話繼續(xù),這兩天沒(méi)更新博客了,上一篇是轉(zhuǎn)發(fā)的MIT人工智能實(shí)驗(yàn)室的研究指南,也就是告訴剛?cè)雽W(xué)的研究生怎么做研究,要怎么積累,那篇文章發(fā)表在1988年,MIT的AI實(shí)驗(yàn)室網(wǎng)站目前仍然能檢索的到,通讀全文,感受很多,也學(xué)會(huì)了很多東西,當(dāng)一個(gè)健康的框架搭好了以后,后面的好功能會(huì)源源不斷的涌現(xiàn),教育也是,當(dāng)一套體系形成,那么就會(huì)有源源不斷的人才和成果出現(xiàn),相反,如果體系本身漏洞百出,根基不穩(wěn),短時(shí)間真的改不了,人也一樣,價(jià)值觀一旦確定,這個(gè)人的人生也就基本定型了——正所謂三歲看老。
今天廢話有點(diǎn)多,如果沒(méi)興趣,可以直接跳到這里
上一章我們研究怎么通過(guò)調(diào)整線程網(wǎng)格結(jié)構(gòu)和核函數(shù)來(lái)達(dá)到SM的最高利用率,今天我們來(lái)研究如何達(dá)到內(nèi)存帶寬的最大利用率。
還是要提那個(gè)老例子,但是說(shuō)實(shí)話,這的很形象,也很有用,記住這個(gè)例子基本就能了解CUDA的優(yōu)化大概要從哪入手了:一條大路(內(nèi)存讀取總線)連接了工廠生產(chǎn)車間(GPU)和材料倉(cāng)庫(kù)(全局內(nèi)存),生產(chǎn)車間又有很多的工作小組(SM),材料倉(cāng)庫(kù)有很多小庫(kù)房(內(nèi)存分塊),工作小組同時(shí)生產(chǎn)相同的產(chǎn)品互不干擾(并行),我們有車從材料倉(cāng)庫(kù)開往工廠車間,什么時(shí)候發(fā)車,運(yùn)輸什么由工作小組遠(yuǎn)程電話指揮(內(nèi)存請(qǐng)求),發(fā)車前,從材料倉(cāng)庫(kù)裝貨的時(shí)候,還要聽從倉(cāng)庫(kù)管理員的分配,因?yàn)榭赡芡婚g庫(kù)房可能只允許一個(gè)車來(lái)拿材料(內(nèi)存塊訪問(wèn)阻塞),然后這些車單向的開往工廠,這時(shí)候就是交通問(wèn)題了,如果我們的路是單向(從倉(cāng)庫(kù)到工廠)8車道,每秒鐘能通過(guò)16輛車,那么我們把這個(gè)指標(biāo)稱為帶寬。當(dāng)然我們還有一條路是將成品運(yùn)輸?shù)匠善穫}(cāng)庫(kù),這也是一條路,與原料庫(kù)互不干擾,和材料倉(cāng)庫(kù)到工廠的路一樣,也有寬度,也是單向的,如果這條路堵住,和倉(cāng)庫(kù)到工廠的路堵住一樣,此時(shí)工廠要停工等待。最理想的狀態(tài)是,路上全是車,并且全都高速行駛,工廠里的所有工人都在滿負(fù)荷工作,沒(méi)有等待,這就是優(yōu)化的最終目標(biāo),如果這個(gè)目標(biāo)達(dá)到了,還想進(jìn)一步提高效率,那么你就只能優(yōu)化你的工藝了(算法)
上面的這個(gè)就是粗糙的GPU工作過(guò)程。例子還是比較貼切的,但是有點(diǎn)描述粗糙,多讀兩遍應(yīng)該會(huì)有點(diǎn)收獲的。
內(nèi)存延遲是影響核函數(shù)的一大關(guān)鍵,內(nèi)存延遲,也就是從你發(fā)起內(nèi)存請(qǐng)求到數(shù)據(jù)進(jìn)入SM的寄存器的整個(gè)時(shí)間。
內(nèi)存帶寬,也就是SM訪問(wèn)內(nèi)存的速度,它以單位時(shí)間內(nèi)傳輸?shù)淖止?jié)數(shù)進(jìn)行測(cè)量。
上一節(jié)我們用了兩種方法改善內(nèi)核性能:
- 最大化線程束的數(shù)量來(lái)隱藏內(nèi)存延遲,維持更多的正在執(zhí)行的內(nèi)存訪問(wèn)達(dá)到更好的總線利用率
- 通過(guò)適當(dāng)?shù)膶?duì)齊和合并訪問(wèn),提高帶寬效率
然而,當(dāng)前內(nèi)核本身的內(nèi)存訪問(wèn)方式就有問(wèn)題,上面兩種優(yōu)化相當(dāng)于給一個(gè)拖拉機(jī)優(yōu)化空氣動(dòng)力學(xué)外觀,杯水車薪。
我們本文要做的就是看看這個(gè)核函數(shù)對(duì)應(yīng)的問(wèn)題,其極限效率是多少,在理想效率之下,我們來(lái)進(jìn)行優(yōu)化,我們本文那矩陣轉(zhuǎn)置來(lái)進(jìn)行研究,看看如何把一種看起來(lái)沒(méi)辦法優(yōu)化的內(nèi)核,重新設(shè)計(jì)讓它達(dá)到更好的性能。
內(nèi)存帶寬
完整內(nèi)容參考 https://face2ai.com/CUDA-F-4-4-核函數(shù)可達(dá)到的帶寬/
總結(jié)
以上是生活随笔為你收集整理的cuda 核函数 for循环_【CUDA 基础】4.4 核函数可达到的带宽的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 休眠后gpio状态_STM32中GPIO
- 下一篇: 鼎信诺审计前端取数工具_给2019前端的