加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

CPU/GPU/FPGA都不給力,為啥說TPU才是未來?

2017/05/26
70
閱讀需 57 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

 

本文來自計算機體系結(jié)構(gòu)專家王逵。他認為,“摩爾定律結(jié)束之后,性能提升一萬倍”不會是科幻,而是發(fā)生在我們眼前的事實。


2008 年,《三體 2:黑暗森林》里寫到:
真的很難,你冬眠后不久,就有六個新一代超級計算機大型研究項目同時開始,其中三個是傳統(tǒng)結(jié)構(gòu)的,一個是非馮結(jié)構(gòu)的,另外兩個分別是量子和生物分子計算機研究項目。但兩年后,這六個項目的首席科學家都對我說,我們要的計算能力根本不可能實現(xiàn)。量子計算機項目是最先中斷的,現(xiàn)有的物理理論無法提供足夠的支持,研究撞到了智子的墻壁上。緊接著生物分子計算機項目也下馬了,他們說這只是一個幻想。最后停止的是非馮結(jié)構(gòu)計算機,這種結(jié)構(gòu)其實是對人類大腦的模擬,他們說我們這只蛋還沒有形成,不可能有雞的。最后只有三個傳統(tǒng)結(jié)構(gòu)計算機項目還在運作,但很長時間沒有任何進展。


好在我們要的計算機還是出現(xiàn)了,它的性能是你冬眠時最強計算機的一萬倍。傳統(tǒng)結(jié)構(gòu)?傳統(tǒng)結(jié)構(gòu),能從摩爾定律這個檸檬里又榨出這么多汁來,計算機科學界都很吃驚。但這次,親愛的,這次真的到頭了


那是我讀計算機體系結(jié)構(gòu)專業(yè)博士的最后一年,當時我對此嗤之以鼻:摩爾定律怎么可能還有那么多油水可以榨。工藝極限近在眼前,不用智子出手,摩爾定律就會死翹翹了;傳統(tǒng)結(jié)構(gòu)更是沒戲,CPU 的架構(gòu)已經(jīng)被研究到頭了,從 2000 年后,幾乎沒有搗鼓出啥新東西。


所以,這個“一萬倍”,真的是好科幻好科幻啊。


回顧三體 2 出版之后的這九年,工藝進展步履維艱,微架構(gòu)亮點寥寥,CPU 的性能每一代都是擠牙膏。一切都好像在印證我悲觀的預期——計算機硬件的性能,好像真的提升不上去了。


但是,從去年開始,“科幻”般的事件相繼降臨:


2016 年 3 月,AlphaGo 戰(zhàn)勝李世石,它使用了 1202 個 CPU 和 176 個 GPU


2016 年 4 月,NVidia 發(fā)布 Pascal 架構(gòu),峰值性能達到 11TFLOPS/s,黃仁勛在接受新智元專訪時表示,半導體技術(shù)迭代在放緩,但 GPU Pascal 架構(gòu)比上一代性能在兩年內(nèi)提升了近十倍,因此可以說我們正處在一個“超級摩爾定律”時代。


今年 5 月 11 日,NVidia 發(fā)布 Volta 架構(gòu),峰值性能達到 120TFLOPS/s


今年 5 月 11 日,Google 公布 TPU 二代,峰值性能達到 180TFLOPS/s,且可以通過 Google Cloud 訪問


今年 5 月 23 日 AlphaGo 重出江湖并且毫無懸念地戰(zhàn)勝了柯潔;24 日,DeepMind CEO 哈薩比斯和 AlphaGo 項目總負責人 David Silver 在新聞發(fā)布會上接受媒體采訪時表示,AlphaGo 實際上是在谷歌云端的單一一臺機器上運行的,此機器建立于二代 TPU 之上(據(jù)說這臺機器使用了 4 塊 TPU)


在摩爾定律已經(jīng)嚴重減速甚至失效的今天,我們實實在在地看到了算力的大幅度提升,而且這場算力的軍備競賽還在繼續(xù)!


而我,也改變了自己悲觀的預期,相信在不遠的將來,“摩爾定律結(jié)束之后,性能提升一萬倍”,將不會是科幻,而是發(fā)生在我們眼前的事實。


這是不是太瘋狂了?設計計算機硬件的技術(shù)宅男們,憑什么做到這一點?憑 TPU 所代表的技術(shù)路線以及新的商業(yè)模式。且聽我慢慢道來。


為什么 CPU 是低效的
在解釋憑什么能做到“摩爾定律之后一萬倍”之前,我們先聊聊為什么 CPU 和 GPU 無法擔此重任。


如果你問我,CPU 最大的特點是什么?我會說:它給程序員一個假象,讓你感覺訪問大容量的內(nèi)存任何一個位置的延遲都是相同的,而且和做一次加法的延遲差不多,近乎為 0。


制造這個假象非常困難。要知道 CPU 所采用的 Logic 生產(chǎn)線,同內(nèi)存用的 Memory 生產(chǎn)線,有天壤之別。簡單地說,由于某種底層的物理定律,Memory 產(chǎn)線無法實現(xiàn) CPU 所需要的高速度,Logic 產(chǎn)線無法實現(xiàn)內(nèi)存所需要的大容量。更糟糕的是,Memory 制程相對于 Logic 制程還越來越慢,從 1986 年到 2000 年,Logic 每年提速 55%,而 Memory 只有 10%。


何為“快”“慢”?口語中的“快”,可以指延遲?。◤拈_始到結(jié)束間隔的時間短),也可以指帶寬大(單位時間內(nèi)通過的量大),說“高鐵快”,指前者,說“網(wǎng)速快”,指后者。內(nèi)存的帶寬其實增長得還湊合,486 時代 CPU 跑 100MHz,SDRAM 內(nèi)存帶寬為 100MT/s;如今 CPU 達到 2GHz~3GHz,DDR4 內(nèi)存帶寬 3200MT/s。雖然內(nèi)存帶寬有了幾十倍的提升,但從發(fā)出讀請求到內(nèi)存條返回數(shù)據(jù)的延遲,這二十年來只減小了兩倍多。


且不說外行人,很多初級程序員都不知道內(nèi)存的延遲如此糟糕,即使是資深程序員,在大多數(shù)時候,也可以在編碼中忽略它,為什么?這都是 CPU 的功勞。CPU 使用了很多復雜的技術(shù)來隱藏內(nèi)存的延遲,例如:
CPU 使用非常大量的片上存儲來做 cache(緩存),把程序經(jīng)常訪問的數(shù)據(jù)放在片上,這樣就不必訪問內(nèi)存了。


CPU 用復雜的技術(shù)猜測程序即將訪問哪些數(shù)據(jù),用預取的方式,提前把這些數(shù)據(jù)從內(nèi)存中搬運到片上,當某一段程序由于等待內(nèi)存數(shù)據(jù)而卡住無法執(zhí)行時,CPU 用亂序的方式,執(zhí)行接下來的片段,使用超線程技術(shù),當一個程序因為等待內(nèi)存數(shù)據(jù)而卡住時,選擇另外一個程序來執(zhí)行,CPU 的硅片上,絕大多數(shù)面積都是用來制造“內(nèi)存訪問近乎零延遲”這一假象的,真正用來做運算的邏輯,所占面積甚至不到 1%——這就是它低效的根源。


CPU 誕生于 Logic 和 Memory 的速度差不多的年代,那個時候,程序員就已經(jīng)習慣于假設“內(nèi)存訪問近乎零延遲”,為了保證對軟件的兼容,CPU 多年來不惜一切代價維持這一假象。積重難返,時至今日,軟件已經(jīng)無法通過 CPU 來充分利用集成電路制造工藝所提供的澎湃動力。

 


為什么 GPU 是低效的
再用一句話來總結(jié) GPU 最大的特點:它給程序員一個假象,讓你感覺 GPU 上面有數(shù)十萬個小程序在運行,彼此相安無事。


GPU 的架構(gòu),簡單地說,就是把類似 CPU 超線程的技術(shù)用到極致來隱藏內(nèi)存訪問的超長延遲。GPU 里面有數(shù)千個小核心,每個都可以看成是個小 CPU,與此同時,它同時運行最多數(shù)十萬個小程序,大多數(shù)程序會因為等待訪存而卡住,真正在小 CPU 上執(zhí)行的程序只有數(shù)千個。


因為同時在工作的小核心有數(shù)千個,GPU 比起 CPU,單位時間內(nèi)完成的運算量大多了。但它也有軟肋,那就是:這數(shù)十萬個小程序,彼此之間根本不可能相安無事,它們會搶存儲帶寬,搶得很兇。GPU 要付出的管理代價相當高:


要做復雜的緩存,以備一塊從顯存取來的數(shù)據(jù)被很多小核心使用


訪存接口只有 8 個,能發(fā)出訪存請求的小核心確有數(shù)千個,必須分析它們發(fā)出的請求,把訪問相鄰地址的請求捏在一起作為一個請求送給顯存


訪存帶寬必須做得遠高于 CPU,才能喂飽數(shù)千個小核心


數(shù)千個小核心上,每個時鐘周期所運行的小程序都可能不一樣,每個小程序的上下文都要保留,以備將來喚醒。為了存儲上下文所付出的片上 Memory 的面積,堪比 CPU 上的龐大緩存


相對于 CPU,GPU 制造假象的能力稍遜一籌,稍有經(jīng)驗的 GPU 程序員,都明白要盡可能讓 GPU 上并行跑的數(shù)十萬小程序在訪存時呈現(xiàn)一定的規(guī)律,否則 GPU 的效率會大打折扣。


GPU 的定位,不單單是圖形加速,而是所有的有海量數(shù)據(jù)并行運算的應用,因此它必須非常通用,不能對其上運行的數(shù)十萬個小程序做限制。事實上,這數(shù)十萬的小程序每個都可以任意訪問到顯存的所有位置,而且訪問的位置各不相同,在這種情況下,GPU 也要保證功能的正確性,哪怕跑得慢些。管理和組織這數(shù)十萬個不受限制的小程序所付出的硅片面積代價和內(nèi)存帶寬的代價,是 GPU 低效的根源。


為什么 FPGA 只是過渡方案
CPU 和 GPU 的架構(gòu)都有非常沉重的歷史包袱,體現(xiàn)在:


它們都有很強的通用性,不能僅僅只針對某個領(lǐng)域做優(yōu)化


它們都有很強的兼容性,過去編寫的程序必須能夠運行


它們都有穩(wěn)定而龐大的程序員隊伍,這些程序員的思維方式不加改變的話,它們就不能放棄提供那些“假象”


這些也是非常偉大而甜蜜的包袱,正因為背負著它們,CPU 和 GPU 廠商才能在它們既有的市場里呼風喚雨,并且把競爭者擋在門外。


如果扔掉這些包袱,設計全新的架構(gòu),就可以做到:


僅僅針對某個領(lǐng)域做優(yōu)化


不考慮對過去軟件的兼容


用全新的方式對其編程,不拘泥于之前的思維定勢


這樣設計出的架構(gòu),對其目標領(lǐng)域,性能指標會大幅度超越 CPU 和 GPU 這類通用架構(gòu)。原因非常淺顯易懂,通用性和最優(yōu)化無法兩全。歷史上已有先例,當計算化學領(lǐng)域和天體物理領(lǐng)域?qū)τ嬎阈阅艿男枨鬅o法被滿足時,分別有科學家們?yōu)樗鼈冮_發(fā)出了專用的 Anton 和 Grape-DR 計算機。只不過它們的專業(yè)性太強,不為大眾所知。


如今,當 CPU 和 GPU 的架構(gòu)已經(jīng)無法滿足人工智能應用對速度、功耗和成本的需求時,尋找新的架構(gòu)成為了大家共同的選擇。在尋找新架構(gòu)的過程中,F(xiàn)PGA 起到了開路先鋒的作用。


FPGA 是什么?如果說 CPU 和 GPU 是在架構(gòu)級別做到“通用”的話,F(xiàn)PGA 就是在更低一級的電路級做到了“通用”。通過硬件描述語言對 FPGA 編程后,它可以模擬任何一種芯片的架構(gòu),包括 CPU 和 GPU 的架構(gòu),通俗地說,F(xiàn)PGA 是一種可編程的“萬能芯片”。它非常適合探索性的、小批量的產(chǎn)品。


我們已經(jīng)看到了很多的 FPGA 方案,實現(xiàn)了比 GPU 更好的速度、功耗或成本的指標。但是,F(xiàn)PGA 依然無法擺脫“通用就無法最優(yōu)”這一規(guī)律的制約。它之所以還能體現(xiàn)出相當?shù)膬?yōu)勢,是因為在一個軟硬件系統(tǒng)中,算法的影響遠大于硬件架構(gòu),而硬件架構(gòu)的影響又遠大于電路——在電路級別做“通用”付出的代價,比起在架構(gòu)級別做“通用”的代價,還是小得多了。


一旦 FPGA 給某個專用架構(gòu)趟出路來之后,它就會退居幕后,讓位給更專用的 ASIC。

 

 


TPU 代表了未來的方向
這次同柯潔對陣的 AlphaGo,采用了 Google 自研的第二代 TPU。TPU 的特點是:


僅僅針對線性代數(shù)做優(yōu)化


不兼容 CPU 或 GPU 的程序


用全新的方式對其編程


用 ASIC 而非 FPGA 的方式來實現(xiàn)


深度學習所使用算法,絕大多數(shù)可以被映射為底層的線性代數(shù)運算。TPU(Tensor Processing Unit)中的 Tensor,就是線性代數(shù)中的基本數(shù)據(jù)類型。線性代數(shù)運算有兩大特點:Tensor 的流動非常規(guī)整且可預期;計算密度很高,即每個數(shù)據(jù)都會歷經(jīng)非常多次的計算。這兩大特點使得線性代數(shù)運算特別適合做硬件加速——所有用來制造“假象”的邏輯都不再必要,每個晶體管都可以用做有意義的運算或存儲。


TPU 上無法運行 CPU 上跑的 Java 或 C++程序,也無法運行 GPU 上的 CUDA 程序。雖然尚未有公開信息,但它的編程方式非??赡苁沁@樣:TensorFlow 把神經(jīng)網(wǎng)絡用一種中間格式表示出來,然后這種中間格式被編譯器轉(zhuǎn)換為 TPU 上獨特的程序。這種中間格式被稱為 TensorFlow XLA,它也將是 TensorFlow 支持其它線性代數(shù)加速器的工具。


Google 之所以選擇 ASIC 而非 FPGA,與其說是它的眼光好,不如說是它的魄力強。內(nèi)行人都知道 ASIC 效能遠超 FPGA,但仍然有很多人不敢選擇 ASIC,為什么?自己做 ASIC 的風險太大:周期長,投入多,門檻高。一旦芯片做錯,就和石頭無異,落個血本無歸。當年 Apple 決定自己做芯片時,并沒有直接組建隊伍,而是收購了 P.A. Semi;這么多年后,成果赫赫,但依然不敢在 Mac 電腦中使用自研的 CPU 來淘汰 Intel 的芯片。而 Google 在短短幾年內(nèi),組建了隊伍,設計了合理的架構(gòu),做出了能 work 的芯片,并且敢于在自己的云上部署自己的產(chǎn)品,只能說一聲“服!”


Google 是一家偉大的公司,在它發(fā)布 MapReduce、GFS 和 BigTable 的論文之前,這些東西被普遍認為是不可能完成的。相信很多人在看到裝備 TPU 的 AlphaGo 戰(zhàn)勝柯潔之前,也會認為 TPU 是不可能完成的。歷史證明,Google 能做的事情,別人起碼可以模仿個七八分。現(xiàn)在大家應該相信,在一個足夠重要應用領(lǐng)域中,完全可以把優(yōu)化和定制做到晶體管級別,而不是只做到某種現(xiàn)成的芯片架構(gòu)的級別。這不但可行,而且必要,因為你不這么做,競爭對手也會這么做。


硬件的開源時代
摩爾定律的通俗表示是:每一美元所能買到的電腦性能,將每隔 18-24 個月翻一倍以上。過去三十年,拜摩爾定律所賜,我們見證了超過百萬倍的性價比提升。未來我們所能看到的這一萬倍,也應該按照“單位成本所能買到的電腦性能”來計算。


CPU 和 GPU 這種通用架構(gòu),它們的歷史包袱不僅僅導致了優(yōu)化難以開展,還導致了:一、壟斷導致的超額利潤;二、過度復雜所帶來的研發(fā)成本上升。于是,芯片的價格居高不下。


未來,當特定領(lǐng)域的定制芯片大行其道時,這些芯片的價格也將顯著降低。原因在于:一、不再有壟斷;二、沒有歷史包袱所帶來的研發(fā)成本;三、開源所帶來的研發(fā)成本降低。


硬件開源過去有過嘗試,但無大成,原因是多種多樣的。但從長遠角度看,所有的基礎設施,被廣大廠商共享的,最終都會走向開源的路子。如果說 Intel 的 CPU 是大地(所有的優(yōu)化不能做到比它更加底層),那么 Linux、Python 和 PHP 就是大地之上最底層的基礎設施,它們是開源的;如果說 GPU+CUDA 是大地,那么各種深度學習的框架就是最底層的基礎設施,它們也都是開源的。如果未來晶體管是大地,那么毫無疑問芯片的架構(gòu)也會出現(xiàn)各種開源方案。


這一切才剛剛開始。這個月 NVidia 做了兩件有趣的事:贊助了開源 CPU 架構(gòu) RISCV 在上海舉辦的 workshop;宣布 Xavier 自動駕駛芯片中的針對線性代數(shù)的硬件加速模塊 DLA 將開源。大廠支持開源,絕不是搞慈善,而是為了扼殺競爭對手,贏得業(yè)界事實標準的控制權(quán)。但開源的后果,必然是降低設計門檻,降低整個行業(yè)的研發(fā)成本。


我們的星辰大海:從應用到晶體管的全棧優(yōu)化
對于從事計算機體系結(jié)構(gòu)專業(yè)的同仁而言,這是最好的時代,半導體制造的先進工藝進展緩慢,但軟件的各種應用需求還在不斷涌現(xiàn),軟硬件接口逐漸模糊,成熟工藝的成本不斷下降。為了優(yōu)化特定應用,做深入到晶體管級的全棧優(yōu)化成為一個現(xiàn)實的選項。只要正確地設計專用架構(gòu),使用成熟工藝也可以輕松超越 GPU 和 CPU 這種通用架構(gòu),哪怕它們采用最先進的制造工藝。


這是一個全新的世界,以往的利益格局和設計思想都將被打破,誰也無法預知將會發(fā)生怎樣的興衰變遷。但這就是我們的星辰大海,一起來探索和歷險吧!


王逵,北京大學本碩博,自從大三讀了 Hennessy 和 Patterson 的書之后,就掉進了計算機體系結(jié)構(gòu)的坑,至今也沒有爬出來。前后總共做了 14 年的 CPU,從基礎軟件、芯片架構(gòu),到物理實現(xiàn)都攢了點經(jīng)驗。2016 年加入比特大陸,從事人工智能加速芯片的設計和實現(xiàn)工作。

 

更多最新行業(yè)資訊,歡迎點擊與非網(wǎng)《今日大事要聞》!

相關(guān)推薦

電子產(chǎn)業(yè)圖譜