在乙個陽光氤氳的周五下午,csdn記者在清華大學的一間會議室裡,見到了鄧仰東老師。鄧仰東老師現任清華大學微電子系副教授,是最早開始使用gpu進行通用並行演算法設計的研究人員之一。gpu的起源可以追溯到個人電腦開始普及的80年代,此時使用者開始有了遊戲的需求。為了更好的使用者體驗,各遊戲公司紛紛推出3d遊戲。而圖形渲染在3d遊戲中起到至關重要的作用,因此gpu應運而生。gpu的產生是為了在計算機螢幕上更快地、顯示更多的特效效果。鄧老師本科及碩士均畢業於清華大學,並取得卡內基梅隆大學的博士學位,師從wojciech maly,進行三維積體電路相關設計的研究。博士畢業後,鄧老師加入magma,一家位於矽谷的積體電路計算機輔助設計公司。2023年,鄧老師回清華微電子系任教,作為nvidia合作教授,參與其大賽的評審工作,並在全國範圍內開展了系列講座。同年,鄧教授在國內率先開設了gpu並行程式設計訓練課程。著有《異構處理器opencl程式設計導論》。
- 打破國外對火車控制系統的壟斷
- 貝葉斯計算機與三維積體電路
本文為第一篇,採取作者口述、筆者記錄的形式。文中詳細闡述了gpu的工作原理、將gpu用於通用計算、以及gpu行業的發展歷程。
例如,在設計乙個遊戲人物的時候,我們希望他的膚色、頭髮能夠盡可能的逼真。這樣的效果在80年代的時候還做不到,那個時候顯示效果還很粗糙。但是在最近的電影《魔幻森林》裡面,除了主角小男孩是真實的,其餘動物以及布景都是計算機生成的。
可以說現在的影象處理技術已經能夠達到很好的效果了,但是還有很大的發展空間。因為人眼對色彩的感知能夠達到浮點數級,而不是指數級,成像能力極高,所以將來可能還需要更加逼真的視訊記憶體效果。
又比如遊戲,遊戲的場景是動態的,人物每向前走一步,就需要生成新的場景。這個場景通過實時渲染得來。通常情況下畫素點的渲染是按照並行的方式進行處理的,所以gpu天生擁有很多很小的核心來並行處理畫素點。那麼gpu的工作原理如何?它是如何產生影象的呢?
gpu做圖形處理的時候,是以圖形流水線(graphics pipeline )的模式工作的。gpu從cpu那裡得到很多的三角網格(如下圖所示),這些三角網格被用來近似地表示物體的曲面。
比如,現在我們要顯示乙個拳頭,因為在計算機上很難表徵任意曲面,因此計算機會將這個拳頭切成乙個三角網路,曲率比較小的地方用相對大一些的三角形,曲率比較大的地方就用小一點的三角形。這些三角形在空間中存在著某種鄰接關係。 只要對三角網路的劃分足夠細,就可以模擬出這個拳頭的形狀。
gpu從cpu那裡得到這個三角網路之後,簡單來說會進行兩個步驟的處理:
第一步:vertex級的處理
vertex級的處理為頂點級的處理:
取三角網格中的頂點進行光照處理。對頂點進行光照處理後,頂點與定點之間會互相產生影響。
對每乙個三角形,做從三維空間到二維平面上的投影。
頂點級處理之後,三維空間裡的物體就被對映到二維平面上了。
第二步: fragment級的處理
投影到二維平面上之後,這個拳頭依然是由很多鄰接三角形所表徵的,我們需要將這些三角形轉化為畫素,最後要顯示在螢幕上的是乙個乙個的畫素點。
當然剛才提到的處理過程是經過簡化的,實際情況是非常複雜的。比如說水的效果,斯坦福就有學者專門研究如何**水的效果,涉及到流體方程,是乙個交叉學科;又比如頭髮,比如動物的皮毛,比如人物穿了一件毛衣,在走路的時候會有什麼樣的效果,這些都是很複雜的。
到2023年左右,因為並行的緣故,gpu的單核計算能力開始超過cpu。這裡的計算能力指的是峰值能力。如何計算峰值能力?最簡單的辦法就是,讓cpu和gpu同時做1+1的運算,比較他們分別一秒鐘計算的次數。
此時gpu的計算能力開始超過cpu,這引起了科學家們的注意,科學計算主要追求峰值的計算能力。其實沒有任何應用能夠達到峰值,但是有些應用會接近峰值,比如矩陣計算的的速度可以達到峰值的70%到80%。有些科學家研究大氣、大海,這樣的學科永遠需要更強大的計算能力來計算龐大的資料,這個時候gpu就派上用場了。在最近很熱的機器學習中,深度神經網路模型中需要做大量的矩陣計算,gpu正好很擅長,因此又火了一把。
但是傳統的gpu是用來做圖形計算的,所用的程式設計模型是opengl。如果想用gpu做通用的計算,就要有更通用的程式設計工具。為此,nvidia推出了一種計算架構,叫cuda(compute unified device architecture),又稱統一計算架構。cuda上有很多任務具可以用來為通用計算程式設計。
下圖為cuda生態系統,截圖自nvidia官網。
在被用做通用計算的初期,gpu的內部結構還是非常不規範的。上文說到,為了顯示影象,gpu會進行兩個步驟的處理。因此gpu內部也存在兩種處理器,vertex級處理器以及fragment級處理器。 除了上述兩種處理器之外,還有一些畫素級的處理單元。這些處理器、處理單元都放在乙個晶元上,不同的處理單元採用不同的程式程式設計。由於程式設計相對容易,最初進行科學計算的時候,普遍用的是fragment級處理器。但這種策略帶來的問題是,vertex級處理器以及其它處理單元沒有被有效利用。
到2023年的時候,nvidia在gpu的晶元設計方面做出了很大的改進,設計出了統一處理器(unified processor )。vertex級的處理和fragment級的處理都可以在統一處理器上實現,大大提高了通用計算時的資源利用率。
除此之外,為了支援通用計算,gpu還增加了快取。快取的作用是為了平衡處理器與儲存器之間速度的差異。做圖形計算的時候,gpu不需要快取,因為圖形計算的儲存訪問完全是可預期的。在重新整理螢幕的時候,一定是從左上角的第乙個畫素開始逐行重新整理。而且每乙個畫素點重新整理結束後,不需要再進行訪問。但是通用計算不同,為了適應通用計算,gpu有了快取,而且快取越來越大,到現在已經能夠達到幾兆的量級。此前gpu和cpu的乙個本質的區別,就是cpu有快取而gpu沒有,現在這個區別也不大了。
有了這些改進之後,現在gpu的運算能力普遍已經達到3t flops左右,即每秒鐘能夠進行3萬億次浮點運算。cpu的運算能力可能是gpu的幾十分之一,到一百分之一。但是,當談到gpu能否吸取cpu的優點,進而替代cpu的時候,鄧教授是持否定態度的。原因在於cpu和gpu的設計思想不同,cpu天生就被設計成乙個全面手,能夠處理非常複雜的任務。比如用word編輯文件的過程涉及到的字處理,其控制流程非常複雜,但是計算量不是很大。
gpu被設計用來完成很清晰的任務,比如矩陣的計算。當計算100萬行和100萬列的矩陣相乘的時候,我們可以將計算過程很清晰地劃分出很多並行的模組,類似這種任務gpu很擅長。
cpu的設計在於幾個超強的核,每乙個核能夠單獨處理很複雜的事情。而gpu的設計側重於幾千個很小很弱的核,每個核做很小很弱的事情。如果強迫gpu去吸取cpu的優點,那它也要有很複雜的核,因此就很難保證核的數量。但現在也有一些公司,比如intel、amd,在做融合處理器。在同乙個晶元上既有cpu核心,也有若干個gpu核心,但目前還做不到讓cpu和gpu使用同一種核心。
雖然gpu在80年代就已經出現,但是直到90年代才開始有gpu的叫法。說起gpu,一定要談nvidia。nvidia於2023年成立,當時的gpu市場呈雙雄並立的局面,一家是nvidia,另一家是ati。這兩家公司的創始人都是華人,nvidia的創始人黃仁勳從小在美國長大,ati的創始人來自台灣。
當時nvidia和ati的競爭非常激烈,在摩爾定律尚且成立的年代,電路規模每18個月翻一番、效能提高一倍。然而當時nvidia和ati每半年發布一款新產品,其成長速度遠高於摩爾定律,這也切實促進了gpu行業的發展。
雙雄並立的局面持續到2023年代初期,ati在某些動作方面略顯遲鈍,最終因資金周轉問題被amd收購。
amd和intel並稱cpu雙雄。amd多年來一直被intel打壓,或許因為反壟斷法的原因,intel一直保留著這個競爭對手,並且時刻小心,不讓自己被amd超過。當時amd為了和intel競爭,拓展市場,收購了amd。所以現在gpu行業內,nvdia的主要競爭對手已經變成amd。大部分時候nvidia比amd在市場份額上略強一些。
intel也生產gpu,但主要生產比較低端的gpu,比如筆記本自帶的gpu一般出自intel。若你是遊戲愛好者,自己另行配置的顯示卡上的gpu一般出自nvidia或者amd。
談及中國的晶元市場,鄧教授表示:「我們中國也有自己的處理器,中國科學院研製的,叫龍芯。但是龍芯真正所佔的市場份額很少。中國的半導體行業進步很快,但仍然不能在主戰場和國外的公司競爭。國內目前還有一些針對移動應用的圖形處理器公司,一般規模很小。不過我們還是應該抱有平常心,畢竟全世界只有一家intel、一家amd、一家nvidia。」
張博涵清華大學 特別專訪 張博涵 上
本期嘉賓 張博涵男 清華大學 能源與動力工程系 大四 學長,您能給我們的讀者們簡單的介紹一下自己嗎?我叫張博涵,是南崗校區2015屆畢業生,現在清華大學能源與動力工程系讀大四。學長,您是15年從三中畢業的,當年的高考是近幾年難度較高的一屆高考,您依然沒有被難題難倒考進了清華大學這所中國的頂尖高校。當...
蓋茨清華大學演講
尊敬的顧校長,清華大學的老師 同學們 獲得清華大學這所世界一流大學的榮譽博士學位,讓我感到非常榮幸。清華是所有著百年歷史的名校,這裡誕生了很多傑出的科學家 商業和政治領袖。我上一次造訪貴校是在1997年。當時,貴校學生的才華 熱情和創造性給我留下了很深的印象。之後,我決定在中國設立微軟研究院。在沈向...
清華大學 自學能力
一 永遠不要說你已經盡力了 我在高中時體育特別差,跑1000公尺都很要命,從來都是不及格。到了清華之後,第一節體育課,老師告訴我們每年要測3000公尺長跑,跑不過不許畢業,取消推研資格。怎麼辦?於是每天晚上10 30,我們的自習教室關門,操場上的人就多起來了。跑半個小時再回寢室繼續學習,練了乙個學期...