<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LLVM之父Chris Lattner:編譯器的黃金時(shí)代

          共 13678字,需瀏覽 28分鐘

           ·

          2022-04-27 23:40

          作者|Chris Lattner
          翻譯|胡燕君、周亞坤



          摩爾定律失效論的討論與日俱增,2018年,圖靈獎(jiǎng)獲得者 John Hennessey 和 David Patterson 在一次演講上更是直言,幾十年來的 RISC(精簡(jiǎn)指令集)和 CISC(復(fù)雜指令集)孰優(yōu)孰劣之爭(zhēng)可以終結(jié)了,新一輪計(jì)算機(jī)架構(gòu)的黃金時(shí)代已經(jīng)到來,為此,他們?cè)?019年的 ACM 期刊上發(fā)表了一篇文章里作專門論述。

          為了打破當(dāng)前架構(gòu)發(fā)展的桎梏,他們給出的答案是,需要軟硬件協(xié)同設(shè)計(jì)和創(chuàng)新,構(gòu)建領(lǐng)域?qū)S眉軜?gòu)、領(lǐng)域?qū)S谜Z言,從而構(gòu)建更專業(yè)化的硬件,并提升運(yùn)行速度。
          ?

          作為驅(qū)動(dòng)計(jì)算機(jī)架構(gòu)革新的重要組成部分,編譯器也在迎來它的黃金時(shí)代。就在去年4月19日的ASPLOS會(huì)議上,編譯器大牛Chris Lattner在主題演講中分享了關(guān)于編譯器的發(fā)展現(xiàn)狀和未來、編程語言、加速器和摩爾定律失效論,并且討論業(yè)內(nèi)人士如何去協(xié)同創(chuàng)新,推動(dòng)行業(yè)發(fā)展,實(shí)現(xiàn)處理器運(yùn)行速度的大幅提升。OneFlow社區(qū)對(duì)其演講內(nèi)容做了不改變?cè)獾木幾g,希望能對(duì)AI/編譯器社區(qū)有所啟發(fā)。
          ?
          Chris Lattner 畢業(yè)于波特蘭大學(xué)的計(jì)算機(jī)科學(xué)系,具有創(chuàng)建和領(lǐng)導(dǎo)多個(gè)知名大型項(xiàng)目的經(jīng)驗(yàn),其中包括 LLVM、Clang、MLIR和CIRCT等編譯器基礎(chǔ)設(shè)施項(xiàng)目,他還帶頭創(chuàng)建了Swift編程語言。
          ?
          從2005年7月到2017年1月間,他曾領(lǐng)導(dǎo)蘋果的開發(fā)者工具部門,隨后,曾短暫領(lǐng)導(dǎo)過特斯拉的自動(dòng)駕駛團(tuán)隊(duì)。2017年8月,Chris Lattner 在Google Brain團(tuán)隊(duì)領(lǐng)導(dǎo)了TensorFlow基礎(chǔ)設(shè)施工作,包括一系列硬件支持(CPU、GPU、TPU),底層運(yùn)行時(shí)和編程語言工作。
          ?
          2020 年 1 月到 2022 年 1 月,Chris Lattner 在 SiFive 公司領(lǐng)導(dǎo)工程和產(chǎn)品團(tuán)隊(duì)(包括硬件、軟件和平臺(tái)工程),SiFive 基于開源指令集 RISC-V,向芯片設(shè)計(jì)公司提供 IP。去年 6 月,SiFive 收到了英特爾的收購意向,后者提出以超過 20 億美元的價(jià)格收購這家公司。2022 年 1 月,Chris Lattner 和 Tim Davis 共同成立了 Modular AI,他本人擔(dān)任CEO,目標(biāo)是重建全球 ML 基礎(chǔ)設(shè)施。

          以下是Chris Lattner的演講內(nèi)容。
          ?

          為什么需要下一代編譯器和編程語言


          盡管硬件正在蓬勃發(fā)展,新加速器和新技術(shù)不斷涌現(xiàn),但軟件業(yè)卻很難真正利用它們。
          ?
          為什么會(huì)這樣?在加速器的世界里,比如AI和結(jié)構(gòu)化計(jì)算技術(shù)發(fā)展領(lǐng)域,出現(xiàn)了標(biāo)量加速和向量加速等多種層面的加速,就像CPU領(lǐng)域也分為標(biāo)量處理器和向量處理器一樣,當(dāng)然現(xiàn)在還有多核CPU。這樣一來就會(huì)出現(xiàn)多種硬件組合,不同的硬件安裝在同一個(gè)數(shù)據(jù)中心,那這些硬件就必須相互通信。
          ?
          但是,很多時(shí)候卻沒有一致性的內(nèi)存,導(dǎo)致寫一個(gè)C語言程序來運(yùn)行所有東西是不可行的,這樣的組合運(yùn)行有點(diǎn)像超級(jí)計(jì)算機(jī)使用多個(gè)CPU一樣。

          同時(shí),世界正在越來越異質(zhì)化,出現(xiàn)了各種各樣的應(yīng)用。機(jī)器學(xué)習(xí)快速發(fā)展,但機(jī)器學(xué)習(xí)涉及很多技術(shù),如果你不止研究訓(xùn)練和推理,還想研究強(qiáng)化學(xué)習(xí),那就要了解不同的加速器。如果你想研究強(qiáng)化學(xué)習(xí),就要整合主機(jī)計(jì)算和加速器計(jì)算,讓它們協(xié)同工作?,F(xiàn)在制造的很多新設(shè)備里的IP和硬件塊都是可配置的,即便是隨存儲(chǔ)器層次深度改變緩存大小這么簡(jiǎn)單的事,都會(huì)影響這些設(shè)備運(yùn)行所依賴的內(nèi)核。
          ?
          所以,盡管現(xiàn)在硬件越來越多樣,硬件生態(tài)迅速壯大,但軟件還是很難充分利用它們來提高性能。而且如果軟硬件協(xié)同不到位,性能就會(huì)受到巨大影響,那不止是10%左右的浮動(dòng),比如,如果弄錯(cuò)了內(nèi)存層次結(jié)構(gòu),性能很可能會(huì)發(fā)生斷崖式下跌,變成正常水平的十分之一。
          ?
          當(dāng)今,加速器領(lǐng)域發(fā)生爆炸式增長,幾乎每天都會(huì)有新公司制造新的加速器。但問題是,怎么用這個(gè)加速器?更關(guān)鍵的是,有人想做新應(yīng)用,但他們想在軟件代碼庫上下工夫,于是不停地推進(jìn)和完善軟件代碼庫。
          ?
          你無法直接在這個(gè)新設(shè)備上使用舊的軟件堆棧,它們的某個(gè)部件可能換了供應(yīng)商,做了流程精簡(jiǎn),導(dǎo)致所需的技術(shù)堆棧不一樣。因此,你不得不給每個(gè)新的小型設(shè)備都寫一個(gè)全新的軟件堆棧。而這樣做又導(dǎo)致了軟件的碎片化,這種碎片化的發(fā)展帶來了巨大成本,也會(huì)反噬硬件行業(yè),因?yàn)橛布貌涣肆恕?/span>
          ?
          我的觀點(diǎn)是,我們需要下一代編譯器和編程語言來幫助解決這種碎片化。首先,計(jì)算機(jī)行業(yè)需要更好的硬件抽象,硬件抽象是允許軟件創(chuàng)新的方式,不需要讓每種不同設(shè)備變得過于專用化。
          ?
          其次,我們需要支持異構(gòu)計(jì)算,因?yàn)橐谝粋€(gè)混合計(jì)算矩陣?yán)镒鼍仃嚦朔?、解碼JPEG、非結(jié)構(gòu)化計(jì)算等等。然后,還需要適用專門領(lǐng)域的語言,以及普通人也可以用的編程模型。
          ?
          最后,我們也需要具備高質(zhì)量、高可靠性和高延展性的架構(gòu)。我很喜歡編譯器,很多人根據(jù)編譯器在做應(yīng)用,我也很尊重這一點(diǎn)??梢哉f,他們?cè)陂_發(fā)下一代神經(jīng)網(wǎng)絡(luò),而不僅僅只想做編譯器。大家可以合作,這樣一來就意味著他們需要可用的環(huán)境和可用的工具。
          ?
          令人興奮的是,編譯器或者編程語言工程師會(huì)迎來一個(gè)嶄新的時(shí)代:過去和現(xiàn)在都有無數(shù)的技術(shù)誕生,這些技術(shù)正在改變世界,有幸參與這場(chǎng)變革浪潮非常令人激動(dòng)。
          ?
          接下來,我會(huì)談?wù)劸幾g器行業(yè)的早期發(fā)展,以及它帶給我們的經(jīng)驗(yàn)和對(duì)未來的啟發(fā)。
          ?

          傳統(tǒng)編譯器的設(shè)計(jì)和挑戰(zhàn)


          當(dāng)我還是學(xué)生時(shí),編譯器是單獨(dú)裝盒的,安裝在一個(gè)軟盤上,每次使用都要把軟盤插進(jìn)電腦里。
          ?
          ?
          當(dāng)時(shí)的行業(yè)狀況是,不同的供應(yīng)商做出不同的處理器、操作系統(tǒng),都想要通過創(chuàng)新脫穎而出,抓住編譯器的價(jià)值。這些編譯器都是專用的,互不兼容,不會(huì)共享代碼。所以你會(huì)看到Borland C編譯器和Microsoft C編譯器互相競(jìng)爭(zhēng),最終造成碎片化生態(tài)。這就阻礙了行業(yè)發(fā)展,但人們還沒有意識(shí)到這一點(diǎn)。
          ?
          ?
          編譯器由前端、優(yōu)化器和后端組成,這種固定結(jié)構(gòu)已經(jīng)沿用很多年了。如果一家公司自主研發(fā)了一個(gè)編譯器,通常的做法是只研發(fā)一套前端和后端,而不會(huì)投入太多資金研發(fā)多種前端和后端。其他公司也會(huì)這么做,這導(dǎo)致不同公司的優(yōu)化器和前后端不能通用。
          ?
          ?
          GCC編譯器團(tuán)隊(duì)最早打破了這種模式。GCC通過自由軟件和開放許可證,允許互相合作,這使得人們可以將前端、優(yōu)化器、后端分開設(shè)計(jì),實(shí)現(xiàn)“關(guān)注點(diǎn)分離”。也因?yàn)檫@個(gè)原因,GCC有了多種前端和后端。
          ?
          這樣的“關(guān)注點(diǎn)分離”不但有利于編譯器的研究改進(jìn),還改變了編譯器的行業(yè)格局。因?yàn)镚CC有最好的C++前端,所以一大批編譯器工程師都在這個(gè)前端的代碼庫基礎(chǔ)上改進(jìn),推動(dòng)了創(chuàng)新和C++的發(fā)展。同時(shí),一大批CPU公司可以直接運(yùn)用GCC的前端,只需加上自己的后端就能參與市場(chǎng)競(jìng)爭(zhēng)。因此20世紀(jì)90年代到21世紀(jì)初這段時(shí)間,整個(gè)行業(yè)的碎片化程度降低。從那時(shí)起,GCC為C語言編譯器的發(fā)展鋪平了道路,涌現(xiàn)出更多新編譯器。這是行業(yè)的巨大成功,因?yàn)樗c(diǎn)燃了創(chuàng)新的火把。
          ?
          ?
          繼GCC的革新之后又出現(xiàn)了一些新技術(shù),其中包括我自己特別喜歡的LLVM,我想講的是它的模塊性。它顛覆了編譯器長久以來的“前端+優(yōu)化器+后端”的三段結(jié)構(gòu),LLVM編譯器是一系列庫(library)的組合。查看LLVM代碼庫會(huì)發(fā)現(xiàn),所有代碼都在lib目錄下。
          ?
          這些庫可以單獨(dú)拎出來,與其他庫組合、搭配使用,也可以重復(fù)使用。它可以和電影特效處理引擎、數(shù)據(jù)庫查詢引擎結(jié)合起來,LLVM既是一個(gè)優(yōu)秀的C++編譯器,也可以發(fā)揮更廣泛、更有創(chuàng)新性的用途。
          ?
          LLVM的模塊性凸顯了接口和組件的重要性。自LLVM誕生的20多年來,沒有了前端、優(yōu)化器、后端的劃分,它用一種革新的方式推動(dòng)了編譯器行業(yè)的發(fā)展。比如可以把XA6編譯器或者X86后端用到別的地方,還可以集中全世界頂尖專家來專門單獨(dú)研究寄存器分配器,而不用管其他編譯器組件,這樣既提高了擴(kuò)展性,也催生了新的合作形式。
          ?
          LLVM的一大優(yōu)點(diǎn)就是可以集合更多人的力量,實(shí)現(xiàn)更多創(chuàng)新。很多基于LLVM的新前端已經(jīng)誕生,而且它促進(jìn)了Julia語言、數(shù)字編程、Rust和Swift語言、系統(tǒng)程式設(shè)計(jì)、安全編程模型等大力發(fā)展,這讓人倍感興奮。LLVM的模塊性、IR的獨(dú)立性、低碎片化程度也催生了多種語言。
          ?
          此外,LLVM還讓JIT編譯(即時(shí)編譯)能有更多作為。雖然JIT編譯器已經(jīng)是一種著名的技術(shù),但它一開始是用在其他地方。有了LLVM以后,芯片設(shè)計(jì)、HLS工具、圖形處理、都更加便捷,還促進(jìn)了CUDA和GPGPU的誕生,這些都是很了不起的成就。
          ?
          但更重要的的是,LLVM整合了的碎片化。LLVM出現(xiàn)之前有很多種JIT編譯器框架,但LLVM的存在,提升了JIT編譯器的基線,讓它迸發(fā)出更多可能,也讓行業(yè)可以實(shí)現(xiàn)更高層次的創(chuàng)新。
          ?
          話說回來,LLVM雖然有很多優(yōu)點(diǎn),但它同樣存在很多問題。一開始LLVM的目標(biāo)是成為一個(gè)“萬能”的解決方案,但結(jié)果它好像什么也沒做好。很多人不斷給LLVM加一些“亂七八糟”的東西,你可以對(duì)CPU和GPU可以這么做,但對(duì)加速器來說不太行。這種胡亂做“加法”就導(dǎo)致不能很好地用LLVM做并行處理優(yōu)化。但我喜歡LLVM的一點(diǎn)是,它是一個(gè)很好的CPU后端,盡管并不能很好滿足其他需求。
          ?
          現(xiàn)在我們來到了“摩爾定律失效期”,我們可以發(fā)揚(yáng)LLVM作為CPU后端的優(yōu)點(diǎn),但如果要探索CPU以外的功能,應(yīng)該把目光放到LLVM IR之外。
          ?

          構(gòu)建適用專用領(lǐng)域的架構(gòu)


          Patterson和Hennessey提出過一個(gè)結(jié)論:我們來到了計(jì)算機(jī)架構(gòu)的文藝復(fù)興時(shí)代,需要把計(jì)算機(jī)行業(yè)上下游人員垂直整合起來,大家既要懂硬件,也要懂軟件。他們說,因?yàn)槭澜缱兓煤芸?,所以思考問題時(shí)要回歸第一性原理,要用新的眼光去重新看待舊事物。
          ?
          接下來我會(huì)講講加速器的構(gòu)建過程,并結(jié)合經(jīng)驗(yàn)談?wù)劶铀倨魑磥砜赡艿难葑儭?/span>
          ?
          ?
          如果觀察硬件領(lǐng)域,會(huì)發(fā)現(xiàn)專用化架構(gòu)已成為一種趨勢(shì),分化出一系列的專門品類。關(guān)于這個(gè)話題,我推薦觀看Mike Urbach的演講。如果把CPU看作通用型處理器,那么當(dāng)你想控制所有的門(gate)時(shí),就需要更深的專用化和更多硬編碼能力。
          ?
          所以一方面CPU是通用的,不像矩陣運(yùn)算加速器那么專用化。然后出現(xiàn)了GPGPU,很靈活,功能也很強(qiáng)大,但要對(duì)GPU進(jìn)行編程就沒那么容易了。然后針對(duì)機(jī)器學(xué)習(xí)加速又出現(xiàn)了TPU,可以做大矩陣乘法運(yùn)算和直接卷積等操作。這些是可編程的各種“xPU”,除此之外還有FPGA(現(xiàn)場(chǎng)可編程門陣列)等固定功能硬件,你可以重新配置block之間的線路;再進(jìn)一步細(xì)分的話還有ASIC,也就是可以應(yīng)特定需要專門設(shè)計(jì)集成電路。
          ?
          總體就這兩個(gè)大類,一類是通用的、可編程的,另一類是功能比較固定的。每當(dāng)我思考領(lǐng)域?qū)S眉軜?gòu)時(shí),我的腦海里就會(huì)浮現(xiàn)這兩大類。

          ?
          上圖列舉了一些正在做上述硬件的公司(不完全統(tǒng)計(jì)),可以看到有不少都是行業(yè)巨頭。每個(gè)公司研究的時(shí)候都會(huì)思考:怎么給它編程?而每個(gè)公司也會(huì)給出不同的答案。比如Google在做XLA和TensorFlow,NVIDIA在做CUDA,Intel在做oneAPI,還有很多硬件公司在做自己的硬件設(shè)計(jì)工具包等等。

          ?
          問題是,每個(gè)工具針對(duì)的都是不同問題,它們不協(xié)同,也不兼容。因?yàn)樗鼈兪敲總€(gè)公司的小型團(tuán)隊(duì)自主研發(fā)的,共享的代碼不多,而每個(gè)公司也都孜孜不倦地給自己的工具增加新功能,各個(gè)工具都瞬息萬變,造成比較混亂的整體局面。這些工具作為行業(yè)的基本組件,卻有這么多不同特點(diǎn),那從行業(yè)層面應(yīng)該怎么做?
          ?
          ?
          其實(shí)今天的加速器遇到的問題,90年代的C語言編譯器也遇到過。就像人們常說的那樣,歷史是一個(gè)輪回。我們見證了硬件和軟件的多樣性爆發(fā),但如果想要繼續(xù)發(fā)展,這種多樣性就會(huì)成為阻礙。
          ?
          所以我們需要統(tǒng)一,需要一些類似GCC和LLVM這樣的東西,不然都要忙著為每個(gè)特定的設(shè)備開發(fā)一個(gè)專屬后端,就沒時(shí)間進(jìn)行前端、編程語言和模型的創(chuàng)新了。
          ?
          業(yè)內(nèi)有許多精英人才,但還不夠多。假如我們能夠減少碎片化,把行業(yè)整合起來,就可以促進(jìn)創(chuàng)新,加快行業(yè)發(fā)展,持續(xù)建立技術(shù)堆棧,充分利用硬件,并以全新方式利用異構(gòu)計(jì)算。
          ?
          接下來談?wù)勎覍?duì)加速器發(fā)展的看法,以及發(fā)展過程中可能遇到的挑戰(zhàn)。
          ?

          加速器的本質(zhì)和演進(jìn)



          加速器是什么?可以把它高度簡(jiǎn)化成兩個(gè)部分,第一個(gè)是并行計(jì)算單元。因?yàn)楣璞旧淼慕Y(jié)構(gòu)也是并行的,加速器要用到許多晶體管,也就需要很多硅來達(dá)成這種并行處理能力。
          ?
          第二個(gè)部分起控制作用。它的名字不太統(tǒng)一,有人叫它“控制處理器(Control Processor)”,有人叫它“序列器(Sequencer)”。有人希望它小一點(diǎn),所以會(huì)做狀態(tài)機(jī)然后嵌入寄存器。這個(gè)部分基本上起到編排并行計(jì)算單元的作用。如果并行計(jì)算單元是一個(gè)大型矩陣乘法單元,控制處理器就會(huì)命令它執(zhí)行一些宏操作,例如從這個(gè)內(nèi)存區(qū)加載、執(zhí)行某一操作、執(zhí)行另一操作、更新SRAM等。
          ?
          還有一些加速器很不一樣,所以控制邏輯和計(jì)算之間的比率也各有不同。正如Patterson和Hennessy所說那樣,你可以選擇不同的點(diǎn),但每個(gè)點(diǎn)都需要一定程度的編排。
          ?
          但人們常常忘記其他一些相關(guān)的工作,比如,你不止需要編排,還要解決啟動(dòng)問題,比如電源管理,還要不斷調(diào)試排錯(cuò)。如果你想做得盡善盡美,可以對(duì)這些部件進(jìn)行編程;如果你希望簡(jiǎn)單一點(diǎn),可以把這些部件做得很小。
          ?
          ?
          當(dāng)控制處理器和并行計(jì)算單元都齊備之后,怎么給它們輸入和輸出信息?這時(shí)就需要一個(gè)內(nèi)存接口。根據(jù)抽象等級(jí)的不同,這個(gè)內(nèi)存接口可以是小型的block,也可以是支持物聯(lián)網(wǎng)的芯片,這樣加速器就可以和該芯片連接整個(gè)網(wǎng)絡(luò)通信了。這里需要用到像AMBA或類似的技術(shù)。
          ?
          你可以在更大的粒度(granularity)上構(gòu)建整個(gè) ASIC,所有的 ASIC 都在加速,在這種情況下,你可能正在與 PCI 通信,并且正在芯片外直接訪問內(nèi)存,但這種“我有一個(gè)控制處理器,有一個(gè)計(jì)算單元和有一個(gè)內(nèi)存接口”的模型,是構(gòu)建這些東西的一種非常標(biāo)準(zhǔn)的方法。
          ?
          ?
          一旦這些結(jié)構(gòu)問題解決了,架構(gòu)師們就開始大展拳腳,但他們往往忘記還需要軟件人員參與進(jìn)來。
          ?
          理想情況下,他們會(huì)從最基本的問題開始著手解決,但軟件最終看起來像按照幾個(gè)不同的層次來做。最高層次是考慮用戶體驗(yàn),用戶如何使用?要如何圍繞它構(gòu)建一個(gè)應(yīng)用程序?而最低層次則是考慮控制處理器的運(yùn)行,所以至少需要一個(gè)匯編器來完成要處理的控制過程。
          ?
          然后寫一個(gè)運(yùn)行在某種主機(jī)處理器上的驅(qū)動(dòng)程序來控制這個(gè)東西,控制它打開和關(guān)閉,進(jìn)行加載,把程序上傳到控制處理器。之后有一些工作在這些控制處理器上運(yùn)行,所以這些通常被稱為內(nèi)核。這個(gè)模型很通用,但最終的結(jié)果是硬件變得更復(fù)雜。所以第一代協(xié)同處理器(first generation co-processor)可能很簡(jiǎn)單,但后來有人想出了這個(gè)絕妙的主意:我們想實(shí)現(xiàn)更多。
          ?
          ?
          在這種情況下,我們想減小面積來進(jìn)行加速,想做更多的AI、物理、5G或比特幣等領(lǐng)域的任何值得加速的東西。最終的結(jié)果需要更多的控制處理器,因?yàn)楣馑俸途€延遲等問題會(huì)導(dǎo)致不能只用一個(gè)控制處理器在一個(gè)巨大的芯片上協(xié)調(diào)所有的晶體管,所以你需要多個(gè)控制處理器并行處理。
          ?
          幸運(yùn)的是,這很容易放進(jìn)你的模型里,因?yàn)橹恍枰獙⑦@些設(shè)備內(nèi)核并行化、多線程化或做一些展開(tiling),只需做一些簡(jiǎn)單的改動(dòng)就可以了。然后,在這些淡褐色單元上運(yùn)行的內(nèi)核就可以一起協(xié)作解決問題,把任何問題在空間上進(jìn)行分解,再并行處理。

          ?
          現(xiàn)在開始,事情變得更加復(fù)雜。當(dāng)建立一個(gè)像GPU一樣專門的加速器,比如要把數(shù)十億個(gè)晶體管組裝成一個(gè)完整的十字形芯片。這種規(guī)模的芯片會(huì)產(chǎn)生多方面的問題。
          ?
          首先,你最終想有多層次的平鋪,所以不會(huì)只想擁有492個(gè)核,你可以在GPU上有陣列,或者有不同的SMS或類似的東西。或者將有異質(zhì)性介入,所以在同一物理芯片上將有不同種類的加速器,因?yàn)槲铱赡苷谧鯝I,但需要能夠解碼一些JPEG。因此,如果我打算在相機(jī)上做推理,需要對(duì)相機(jī)的傳感器數(shù)據(jù)進(jìn)行原始解碼,這將得到新的加速器block,它們是硬編碼用于不同操作,而且這些都混在一起。
          ?
          然后它們需要通過內(nèi)存接口相互通信,這需要對(duì)其進(jìn)行編程,并且變得更加復(fù)雜?,F(xiàn)在突然需要這個(gè)中間層的技術(shù),在加速器上處理多個(gè)數(shù)據(jù)流時(shí),不只是在加速器上不同單元的tile上有并行性。因?yàn)楝F(xiàn)在有多個(gè)不同的操作在同時(shí)運(yùn)行,所以要解決工作負(fù)載平衡的問題。
          ?
          此外,還要解決通信優(yōu)化問題,光速是一個(gè)痛點(diǎn),因?yàn)榘褦?shù)據(jù)從芯片的一端傳到另一端需要時(shí)間。但是這段時(shí)間你不想閑著,而是想在通信的同時(shí)進(jìn)行另一個(gè)通信過程,或者在做通信的同時(shí)進(jìn)行計(jì)算。
          ?
          你希望能夠運(yùn)行像TensorFlow一樣的東西,現(xiàn)在你可能有一個(gè)XA6后置處理器,所以希望從加速器回到主機(jī)處理器。因?yàn)槟阍谧鑫募到y(tǒng)操作或其他非常奇怪的事情,就必須能夠協(xié)調(diào)這一點(diǎn),突然,這層軟件開始變得非常大,而且相當(dāng)復(fù)雜。
          ?
          在很多情況下已經(jīng)證實(shí)了這一點(diǎn),很多加速器都經(jīng)歷過這種情況。一個(gè)問題是,他們一開始都是手工寫的kernel,這些東西有多個(gè)不同的進(jìn)化步驟,從這些硬件供應(yīng)商的產(chǎn)品中可以看到:隨著時(shí)間的推移,他們的硬件不斷進(jìn)化,變得越來越普遍,軟件堆棧和支持的功能也在不斷進(jìn)化。
          ?
          所以kernel的優(yōu)點(diǎn)是,它是最簡(jiǎn)單好用的開始方式。一個(gè)硬件人員與一個(gè)固件人員配對(duì),就可以清楚地知道硬件的作用。軟件人員和硬件人員通過協(xié)同設(shè)計(jì)緊密合作,讓你的矩陣乘法在AI工作負(fù)荷上運(yùn)行得非常快。它的抽象程度很低,很容易搞定。
          ?
          問題是,這并沒有真正擴(kuò)展能力。所以我們也看到,現(xiàn)在想在加速器上運(yùn)行的工作負(fù)載不僅僅是矩陣乘法,他們想要在這些東西上運(yùn)行成百上千種不同的核運(yùn)算,涵蓋從卷積和矩陣乘法到重塑(主要是內(nèi)存操作)到元素間操作(element-wise operations),再到各種奇怪的操作,比如Top K和排序,再到非常普遍的新一代研究稀疏算法的東西和其他新興的不同應(yīng)用。
          ?
          隨之而來的問題是,一方面你有這些正在運(yùn)行的kernel,另一方面,你有硬件的無限通用性。因此,在一個(gè)供應(yīng)商的硬件中,也許你可以把它固定然后看看新一代的技術(shù)。
          ?
          你只需要手寫一百或一千單位的kernel就行了。也許這沒問題,但當(dāng)你推出了第二代設(shè)備,可能改變了內(nèi)存層次結(jié)構(gòu),給控制處理器增加了一些新指令,增加了可選的功能,或者你決定做kernel融合,想對(duì)卷積進(jìn)行元素間操作,這時(shí)你就有一個(gè)n次方的不同kernel的組合需要很好地融合。即使你有成千上萬個(gè)軟件工程師,你也不能手寫所有的kernel,因?yàn)槟阆M愕挠布F(tuán)隊(duì)能夠快速推進(jìn)工作。
          ?
          我見過這種情況好幾次了,最終人們開始手寫kernel,但后來他們寫了一個(gè)Python程序來生成kernel,這些Python程序在某種意義上就像微型編譯器。


          如果繼續(xù)這樣做,這些復(fù)雜性就會(huì)疊加起來,最終形成了這個(gè)編譯器層,它可以通過強(qiáng)大的編譯器工程來形成。這在理論上是可能的,隨著時(shí)間的推移,它可以通過自然演變逐漸形成,就像人類從爬行到行走一樣,這是我在實(shí)踐中所看到的真實(shí)情況。每個(gè)人都有機(jī)會(huì)成為這個(gè)過程的締造者,這方面還有很大的進(jìn)步空間。
          ?
          當(dāng)你在構(gòu)建一個(gè)真實(shí)的東西時(shí),實(shí)際上很困難。剛開始感覺容易,是因?yàn)榭梢詷?gòu)建一個(gè)小型控制處理器和小型加速器,讓一些軟件運(yùn)行得很快,這種情況下很簡(jiǎn)單。但當(dāng)你沿著“這條路”繼續(xù)走,困難會(huì)慢慢出現(xiàn),實(shí)際上,直到遇到擴(kuò)展問題之前都不會(huì)覺到特別難,但你不想改變方向了。
          ?
          此外,正如我們之前所說的,產(chǎn)品質(zhì)量并不一直都很好?,F(xiàn)在,人們創(chuàng)造出令人驚嘆的產(chǎn)品,而我也一直對(duì)這個(gè)行業(yè)中不斷發(fā)生的創(chuàng)新感到驚訝。但我們也見過一些編譯器崩潰了,比如技術(shù)堆棧中出現(xiàn)的壞消息。
          ?
          這是有道理的,人們就不會(huì)總在這方面投資。雖然我能理解這種做法,但這阻礙了行業(yè)發(fā)展,導(dǎo)致使用這些工具變得更加困難。因此,要減少社區(qū)中愿意容忍和使用這些工具的人。
          ?
          ?
          我認(rèn)為另一個(gè)真正的問題是,大部分復(fù)雜性真的與解決加速器問題無關(guān)。如果我想建立一個(gè)5G網(wǎng)絡(luò)加速器,需要考慮5G、FTS、問題中固有的并行性以及如何利用它們。如果要考慮人工智能機(jī)器學(xué)習(xí)的工作量,我應(yīng)該考慮的是算數(shù)運(yùn)算以及計(jì)算和內(nèi)存的正確比例等等。但相反,我們通常需要在和這些重要的問題無關(guān)的事情上投入很多時(shí)間,以復(fù)雜性而告終。
          ?
          如果你把與加速器有關(guān)的重要東西抹掉,剩下的就是控制處理器的內(nèi)核驅(qū)動(dòng)和匯編程序以及像所有這些復(fù)雜的多流管理小組,該如何利用加速器上的所有tiles。
          ?
          這不是我們想花費(fèi)時(shí)間的地方,要花時(shí)間在編程模式、硬件等方面進(jìn)行創(chuàng)新,但這種碎片化是真正阻礙行業(yè)發(fā)展的原因。
          ?
          因此,我的主張是創(chuàng)新編程模型,發(fā)展新的應(yīng)用程序,通過不斷創(chuàng)新推動(dòng)行業(yè)向前發(fā)展。我們應(yīng)該對(duì)此過程所需的一切實(shí)行標(biāo)準(zhǔn)化,通過標(biāo)準(zhǔn)化能夠快速完成工作,然后就可以把時(shí)間花在真正重要的事情上。
          ?
          ?
          那么,如何做好這個(gè)工作?幸運(yùn)的是,業(yè)界已經(jīng)開始對(duì)我們需要的所有接口總線進(jìn)行標(biāo)準(zhǔn)化。如果你與你知道的SoC結(jié)構(gòu)連接,通常使用AMBA或CHAI或類似的東西。如果要和內(nèi)存連接,那么你要用DDR或HBM這樣的東西。如果你要在系統(tǒng)中建立一個(gè)插件卡,要使用像PCI Express這樣的東西。有一些新的標(biāo)準(zhǔn),如CXL定義了新的方式,可以將PCI普遍化,并允許在更大規(guī)模的系統(tǒng)中使用新型加速器,但我們需要更進(jìn)一步。
          ?
          ?
          那么,這個(gè)控制處理器呢?需要注意的是,當(dāng)我們觀察加速器,開發(fā)在加速器上面運(yùn)行的軟件最終比打造硬件的成本更高。況且在這一點(diǎn)上,硬件是更被人熟知的。不同硬件有不同配置,但構(gòu)建軟件是一個(gè)尚未解決的問題。
          ?
          控制處理器也在堆棧的底部,所以當(dāng)我談到系統(tǒng)設(shè)計(jì)中存在這些微妙的陷阱時(shí),事情看起來很容易,但更進(jìn)一步會(huì)發(fā)現(xiàn)它們很困難??刂铺幚砥魇瞧渲幸环N情況,剛開始,你考慮的是用小型狀態(tài)機(jī)來控制它,所以我會(huì)在電子表格程序?qū)懸粋€(gè)編譯器。
          ?
          有時(shí)候要意識(shí)到需要做電源管理,還要考量安全性,需要構(gòu)建和協(xié)調(diào)這些東西的困難部分,真正改變它們最終的工作方式。如果構(gòu)建控制處理器的人沒有同時(shí)構(gòu)建編譯器,那么他們就不會(huì)感受到構(gòu)建軟件的痛苦,而軟件最終是更困難的部分。
          ?
          ?
          Patterson和Hennessey在他們的演講中談到了這一點(diǎn),他們從60年代開始觀察到行業(yè)存在著巨大的碎片化。IBM最終解決這個(gè)問題的方法是標(biāo)準(zhǔn)化指令集,選擇的是IBM 360指令集,至今仍在使用。這是一個(gè)驚人的壯舉。
          ?
          所以,我們要做出選擇,比如我們是否要標(biāo)準(zhǔn)化這些控制過程。我們會(huì)使用IBM 360嗎,還是我們要用一些新的東西?
          ?
          ?
          我認(rèn)為,我們應(yīng)該使用一些新東西,有一種指令集技術(shù)叫做RISC-V,它是CPU的一個(gè)開放的行業(yè)標(biāo)準(zhǔn)。我喜歡RISC-V的原因是,它是一個(gè)模塊化的指令集,就像LLVM一樣是模塊化的、基于庫的。如果不想用浮點(diǎn)數(shù),它允許把指令集的不同部分劃分子集出來。
          ?
          但是,如果你不想要整數(shù)乘法,也可以把它去掉。關(guān)于RISC-V的偉大之處在于,它不僅提供了一個(gè)指令集標(biāo)準(zhǔn),還提供了在上面運(yùn)行的整個(gè)軟件世界。因此,你可以得到一個(gè)C語言編譯器,得到Linux,得到所有圍繞RISC-V的這些東西。
          ?
          像SiFive這樣的公司,它制造了很多不同的RISC-V處理器。你可以在設(shè)計(jì)領(lǐng)域中得到許多不同的視角,以不同的權(quán)衡點(diǎn)來實(shí)現(xiàn)該規(guī)范。因此,如果你正在建立一個(gè)非常簡(jiǎn)單的加速器,如矩陣乘法或卷積加速器,可以有一個(gè)非常小的RISC-V核來控制一個(gè)大的硬編碼加速器block。
          ?
          另一方面,如果你想要更多的可編程性,你可以改變花費(fèi)在控制和并行處理上的硅的比例,并且有更多的控制邏輯,從而實(shí)現(xiàn)更多的可編程性和靈活性,可以調(diào)整比率。
          ?
          也可以反過來,并行單元是處理器的一部分,使用這個(gè)處理器時(shí),在處理器內(nèi)置一個(gè)異構(gòu)計(jì)算加速器。
          ?
          或者相反,你可以把這個(gè)加速器中的每一個(gè)tile視為一個(gè)很大的CPU,這樣做就會(huì)得到像Graviton這樣的云加速器,例如,你有一堆不同平鋪的CPU,通用性和加速的功能都可以在一個(gè)指令集內(nèi)處理,這就允許提升軟件的生態(tài)系統(tǒng)。
          ?
          你可能會(huì)擔(dān)心,如果想構(gòu)建這樣一個(gè)微小的控制處理器,RISC-V會(huì)如何解決這個(gè)問題?很明顯,一般的解決方案太大了。有一些非常小的RISC-V的實(shí)現(xiàn),你可以得到開源的標(biāo)準(zhǔn)化的RISC-V,大約有一萬五千種gates的實(shí)現(xiàn),這是硅行業(yè)的美妙之處。因?yàn)橛泻芏鄃ates,可以不必?fù)?dān)心在控制處理器上花費(fèi)太多gates,得到最符合需求的解決方案。
          ?
          ?
          一旦這樣做,它改變了構(gòu)建加速器的方式。以前你從選擇一個(gè)控制處理器開始,然后寫一個(gè)匯編程序或RISC-V給出一個(gè)匯編程序。但RISC-V不僅給出一個(gè)匯編程序,還給了一個(gè)C語言編譯器和一個(gè)可以編程的IR。
          ?
          因此,可以針對(duì)控制處理器來生成內(nèi)核。不僅可以得到C語言編譯器,還可以得到模擬器和調(diào)試器。我從來沒有見過其他可以為模擬器和芯片安裝GDB、LLDB的加速器,這不是人們通常會(huì)投資的技術(shù),因?yàn)樗且淮涡缘摹5?,通過建立和利用RISC-V的生態(tài)系統(tǒng),你可以投資并再次構(gòu)建下一個(gè)級(jí)別的技術(shù),從而獲益。
          ?
          ?
          一旦做到這一點(diǎn),就進(jìn)入到下一層級(jí)的復(fù)雜性。做出了這個(gè)類似加速器內(nèi)核編譯器的東西后,就會(huì)遇到下列問題:如何進(jìn)行分層并行計(jì)算?一個(gè)數(shù)據(jù)中心有很多機(jī)器,電路板上有多個(gè)芯片?每個(gè)芯片在一個(gè)ASIC中有幾十個(gè)或上百個(gè)不同的加速器單元,又該如何編程?
          ?
          有趣的是,雖然所有這些編譯器都是不同的,但它們有很多共同的特點(diǎn)。比如,都有內(nèi)存層次結(jié)構(gòu),都有多個(gè)不同粒度級(jí)別的tiling,都需要能夠與其互動(dòng)。所以,盡管這些編譯器是不同的,例如一個(gè)5G基站的編譯器應(yīng)該與AI加速器不同,但像平鋪和內(nèi)存層次結(jié)構(gòu)這種需要解決的技術(shù)問題都是一致的。
          ?
          ?
          現(xiàn)在有一種相對(duì)較新的編譯器技術(shù)MLIR可以幫上忙。你可以把MLIR看作是一個(gè)元編譯器,它允許你非??焖俚貥?gòu)建加速器/編譯器。MLIR的全稱是“多級(jí)中間表示”,它支持構(gòu)建分層編譯器,并以適用專門領(lǐng)域的方式構(gòu)建,同時(shí)保留領(lǐng)域的復(fù)雜性。然后,使用MLIR提供的大量庫和例程來做一些事情,比如,用多面體編譯器來做循環(huán)展開和循環(huán)融合等等。
          ?
          所以MLIR是LLVM技術(shù)家族的一部分,它繼承了LLVM的設(shè)計(jì)方法和使LLVM如此偉大的理念,所以有了模塊化、可擴(kuò)展性,有一個(gè)由友好的人們組成的偉大社區(qū)。我認(rèn)為,LLVM社區(qū)的一件令人欣賞事是:LLVM是模塊化的,有相當(dāng)好的文檔,很容易學(xué)習(xí),適合用于研究。
          ?
          我很高興看到MLIR的出現(xiàn)。盡管它只有幾年的歷史,但它已經(jīng)被廣泛用于從CPU代碼生成到GPU、機(jī)器學(xué)習(xí)、FPGAs以及硬件等領(lǐng)域,此外,也用于量子計(jì)算和編譯器本身的MLIR優(yōu)化模式應(yīng)用。在MLIR這個(gè)領(lǐng)域有很多有趣的事情發(fā)生。
          ?
          MLIR的另一個(gè)優(yōu)點(diǎn)是,直接在LLVM的基礎(chǔ)上分層。它使用LLVM的庫,所以可以做即時(shí)編譯,寫內(nèi)核然后編譯成LLVM IR也很容易。當(dāng)然,LLVM也有很好的RISC-V代碼生成支持。你可以用一種非常簡(jiǎn)單、漂亮且可組合的方式構(gòu)建基于RISC-V的加速器。
          ?
          ?
          現(xiàn)在,我們開始看到的是,MLIR開始統(tǒng)一異構(gòu)計(jì)算的世界,這也是我希望看到的。所有的大公司現(xiàn)在都在不同程度地使用MLIR,我認(rèn)為,建立在RISC-V之上的MLIR很有必要,因?yàn)橐坏╅_始從下往上整合行業(yè),就可以開始把越來越多的層(layer)拉到一起,重復(fù)使用更多的技術(shù)。這使得我們可以專注在堆棧中更有趣的部分,而不是一遍又一遍地重新發(fā)明輪子。
          ?
          我們能從中得到什么?如果我們能把稀缺的編譯器和編程語言的能量整合到一起,讓這些人一起工作,那么這個(gè)行業(yè)可以取得更多成就。如果我們一而再、再而三地重新發(fā)明輪子,我們就會(huì)互相拉扯。
          ?
          作為一個(gè)產(chǎn)業(yè),我們需要的是更多的創(chuàng)新,更多的編程模型,更多的技術(shù)和基礎(chǔ)設(shè)施,真的要減少行業(yè)的碎片化,提高其他未解決事物的模塊化,然后專注于真正重要的部分。
          ?
          我剛剛一直在談?wù)摷铀倨?,談到了從CPU到TPU和GPU等各種不同的“xPU”。
          ?
          ?
          硬件本身呢?上圖右邊留出了一個(gè)很大的灰色區(qū)域,在這個(gè)領(lǐng)域工作的人都是“硬件人員”,在左邊領(lǐng)域工作的人既是硬件也是軟件人員,但右邊確實(shí)是一個(gè)非常不同硬件世界。
          ?
          ?
          這也是并行計(jì)算單元里的東西。這就是Patterson和Hennessey談到的適用專門領(lǐng)域的架構(gòu),以及如何構(gòu)建這些硬件塊。我們需要算法創(chuàng)新,需要許多不同技術(shù)的創(chuàng)新,這些都需要基于特定領(lǐng)域。
          ?

          編譯器的創(chuàng)新機(jī)會(huì)

          ?
          也許你不會(huì)感到驚訝,但我認(rèn)為答案是編譯器,這是真正要走的一條路。
          ?
          ?
          作為編譯器編程語言從業(yè)者,我認(rèn)為硬件設(shè)計(jì)這個(gè)領(lǐng)域已經(jīng)到了重新評(píng)估的地步。整個(gè)領(lǐng)域是建立在兩種技術(shù)之上,但實(shí)際上主要是一種叫做Verilog的技術(shù),你大概率可能不喜歡Verilog。
          ?
          它有一個(gè)非常復(fù)雜的標(biāo)準(zhǔn),當(dāng)我看它時(shí),不知道它是被設(shè)計(jì)成一個(gè)IR,也即一個(gè)不同工具之間的中間表示,還是被設(shè)計(jì)成讓人們直接書寫的東西。我認(rèn)為,它在這兩方面都很失敗,它真的很難使用,對(duì)工具來說也很難生成。
          ?
          此外,EDA工具、硬件設(shè)計(jì)工具已經(jīng)非常成熟,它們非常標(biāo)準(zhǔn)化,有很多大公司正在推動(dòng)和開發(fā)這些工具。但他們的創(chuàng)新速度并不快,設(shè)計(jì)時(shí)并不注重可用性。它們比加速器編譯器要差得多,絕對(duì)不是以軟件架構(gòu)的最佳實(shí)踐來構(gòu)建的,而且成本也非常高。因此,這個(gè)領(lǐng)域有巨大的創(chuàng)新機(jī)會(huì)。
          ?
          ?
          我不是第一個(gè)認(rèn)識(shí)到這一點(diǎn)的人。在開源社區(qū),已經(jīng)構(gòu)建了一堆工具推動(dòng)行業(yè)向前發(fā)展。這些工具非常棒,比如Verilator被廣泛使用,Yosys是另一個(gè)非常棒的工具,它有很好的定理證明器(Theorem Prover)。
          ?
          我的擔(dān)憂在于,這些工具的理想目標(biāo)是試圖像專有工具一樣好,而我并不真的認(rèn)為專有工具有那么好。另外,這些工具的設(shè)計(jì)者并沒有合作。每個(gè)工具都在遵循單一僵化的方法,沒有實(shí)現(xiàn)大程度的模塊化或重復(fù)使用,可以從其中一些工具中得到網(wǎng)絡(luò)列表,用它來解析一些Verilog之類的東西。但是,它不是由基于庫的設(shè)計(jì)構(gòu)建,與LLVM之類的東西不一樣。
          ?
          ?
          好消息是,我看到了這里正在發(fā)生的不同進(jìn)展的全面爆發(fā),這與我們一直在談?wù)摰哪柖傻氖Х浅O嚓P(guān)。我們看到,研究小組正在推動(dòng)新硬件設(shè)計(jì)模型的生產(chǎn),有Bluespec和Chisel等東西。有許多新的不同研究小組在探索不同的硬件設(shè)計(jì)方法,而且他們最終往往會(huì)生成Verilog,這真的很好,因?yàn)楝F(xiàn)在你可以從軟件和硬件世界引入新的類型系統(tǒng)方法、編程語言思想、編譯器技術(shù)。實(shí)際上,軟件和硬件有很多想法是互通的。
          ?
          只是軟、硬件領(lǐng)域用不同的方式說著不同的語言。因此,如果雙方能有更多的交集,這對(duì)兩個(gè)行業(yè)都有益,這種合作令人驚奇,但他們也遇到了困難,這又回到了這個(gè)問題上:Verilog實(shí)際上不是一個(gè)很好的IR。
          ?
          要?jiǎng)?chuàng)建在語法上正確,并且能表達(dá)你想要的東西的Verilog非常困難。此外,因?yàn)樵S多與Verilog有關(guān)的工具都有點(diǎn)奇怪,而且很難高質(zhì)量地預(yù)測(cè)。生成與工具兼容的Verilog是每個(gè)前端工具都必須重新發(fā)明的一門黑科技。因此,在堆棧中真的缺失了一種組件,這個(gè)組件允許人們?cè)诰幊棠P退缴线M(jìn)行創(chuàng)新,并允許人們找到方法讓所有工具都接受它。
          ?
          ?
          有一個(gè)叫CIRCT的新開源項(xiàng)目正試圖解決這個(gè)問題。CIRCT的全稱是"Circuit IR for Compilers and Tools(編譯器和工具的Circuit IR)",它構(gòu)建在MLIR和LLVM之上。CIRCT社區(qū)的目的是提升整個(gè)硬件設(shè)計(jì)世界,促進(jìn)編程模型的創(chuàng)新,并啟用一套新的模塊化硬件設(shè)計(jì)工具。它確實(shí)運(yùn)用了很多我們到目前為止一直在討論的基于庫的技術(shù)。

          此外,它提供了一個(gè)可組合的基于庫的工具鏈,可以建立有趣的新的彈性接口連接,你可以建立Chisel社區(qū)正在探索的新編程模型,用它來加速Chisel流程。它帶來了很多好處,可以讓很多人一起工作,推動(dòng)不同方式的創(chuàng)新。我們正在建立一個(gè)真正偉大的小世界,讓關(guān)心硬件編譯器的人在一起工作,這很有趣。這項(xiàng)工作仍處于早期,目標(biāo)是更快地構(gòu)建加速器,讓加速器變得更快。
          ?
          ?
          我們的大目標(biāo)是,要把硬件設(shè)計(jì)和驗(yàn)證過程速度都提高10倍。因此,構(gòu)建新硬件往往最終需要更多的成本來驗(yàn)證其正確性,這包括形式化方法,相當(dāng)于單元測(cè)試,有很多不同方式可以證明你正在構(gòu)建的東西在所有情況下都是正確的。
          ?
          這種正確性驗(yàn)證在硬件領(lǐng)域比在軟件領(lǐng)域里更復(fù)雜,因?yàn)橛布I(lǐng)域并沒有真正的類型系統(tǒng),也沒有真正的多層次的IR,所以也就不允許將一個(gè)狀態(tài)機(jī)表示為一個(gè)狀態(tài)機(jī),并針對(duì)它編寫證明?,F(xiàn)在,正在發(fā)生的事情是整個(gè)領(lǐng)域被“去掉了糖分(de-sugared)”,變成了基本上沒有類型的bits,然后所有的分析和工具都在這個(gè)層面上工作,我認(rèn)為,我們可以通過構(gòu)建和引入編譯器和語言社區(qū)中相當(dāng)知名的技術(shù)來迅速提升改善整個(gè)領(lǐng)域。
          ?
          ?
          因此,我希望我們將能夠幫助覆蓋整個(gè)軟件和硬件領(lǐng)域,組合這些標(biāo)準(zhǔn)的開放工具,包括作為指令集的RISC-V,作為編譯器堆棧的MLIR,以及作為關(guān)注硬件的應(yīng)用的CIRCT。我們正在努力推動(dòng)整個(gè)行業(yè)更快發(fā)展。
          ?

          總結(jié)

          ?
          最后,我想說現(xiàn)在的確是“編譯器的黃金時(shí)代”。我認(rèn)為,隨著硬件和軟件的協(xié)同設(shè)計(jì)變得更加重要,我們需要比以往更快地推動(dòng)創(chuàng)新。
          ?
          編譯器、編程語言以及所有的技術(shù),包括形式化方法和提升線性類型的類型系統(tǒng),以及其他相當(dāng)好理解的系統(tǒng),將會(huì)使整個(gè)領(lǐng)域受益。我認(rèn)為形式化、工程化以及這個(gè)領(lǐng)域的不同部分的合作,都將推動(dòng)所有事情發(fā)展得更快、更進(jìn)一步。我很高興看到許多學(xué)術(shù)界相當(dāng)知名的方法和技術(shù)正在落地。
          ?
          人們正在試圖弄清楚這一點(diǎn),他們學(xué)習(xí)新東西,但也在一些愚蠢的問題上翻跟頭?,F(xiàn)在的情況是,我們看到發(fā)展速度加快了,看到了新的創(chuàng)新,對(duì)舊事物有新研究,因?yàn)槿藗冋诨氐降谝恍栽瓌t看問題。我非常高興和興奮地看到所發(fā)生的這一切。

          視頻鏈接:
          https://www.youtube.com/watch?v=4HgShra-KnY
          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男人天堂色色网 | 黄色三级艹逼视频 | 亚洲欧洲一区二区 | 99视频在线精品免费看 | www在线黄色 |