<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 叢京生院士ICCAD大會(huì )萬(wàn)字演講:講透民主化集成電路設計與可定制計算

叢京生院士ICCAD大會(huì )萬(wàn)字演講:講透民主化集成電路設計與可定制計算

發(fā)布人:芯東西 時(shí)間:2023-07-16 來(lái)源:工程師 發(fā)布文章
叢京生院士介紹了他在民主化集成電路設計和可定制計算上的由一系列工作所形成的生態(tài)系統。

作者 |  VASTLab
引言:叢京生院士為作者之一的論文“AutoDSE: Enabling software programmers to design efficient FPGA accelerators”獲得了2023 ACM TODAES最佳論文獎。為了介紹這項工作以及叢院士在民主化集成電路設計和可定制計算上所構建的生態(tài)系統,VLSI架構綜合技術(shù)研究室翻譯了他在ICCAD’2022開(kāi)幕日所做的主題演講,以饗讀者。

圖片

叢京生院士報告全文如下:很高興在ICCAD’2022現場(chǎng)見(jiàn)到這么多同仁!我本人也非常榮幸能夠在這次的ICCAD開(kāi)幕日做主題演講。ICCAD對我來(lái)說(shuō)有著(zhù)非常特別和重要的意義。35年前我的第一篇論文是在ICCAD上發(fā)表的。在這張幻燈片左邊,你可以看見(jiàn)這篇文章的截圖。因為年代久遠,我并沒(méi)有在ICCAD Proceedings上找到這篇文章的電子版,但是我在IEEE Transactions on CAD上還是找到了這篇文章的期刊版本。

圖片

幻燈片右邊,你能看見(jiàn)當年UIUC四位年輕的研究生。站在我旁邊的男士是黃定發(fā)教授,他現在是香港中文大學(xué)工程學(xué)院院長(cháng)。站在我旁邊的年輕女士現在是IBM EDA部門(mén)的資深員工。站在照片最左邊的男士是KC Chen。你們中的有些人可能知道他是前世界級芯片驗證公司Veriplex的共同創(chuàng )辦人。Veriplex后來(lái)被Cadence收購。當我找到這張照片的時(shí)候,心中涌起了許多回憶。最重要的一點(diǎn),我想說(shuō)這次的主題演講也是為我的導師劉炯朗先生所做。他也是這篇文章的作者之一。他的一言一行帶領(lǐng)我走進(jìn)了EDA的世界并引導我了解如何真正做好科研。我非常希望劉炯朗先生今天也能在現場(chǎng),然而他在兩年前不幸過(guò)世。相信我們所有人都會(huì )記住他在這個(gè)領(lǐng)域深耕幾十年的巨大貢獻。
01.15年前轉變賽道讓可定制計算成為可能


我在這篇文章里講的是一種三層芯片設計通道布線(xiàn)(three-layer channel routing)的方法。這在當時(shí)是個(gè)新問(wèn)題,是我在1987年根據當年的技術(shù)水平寫(xiě)的文章。在那個(gè)時(shí)候芯片還只有兩層的設計所以我們猜測工業(yè)界會(huì )向三層或者多層發(fā)展。那么這個(gè)情況下的布局布線(xiàn)問(wèn)題就是個(gè)很好的研究課題。實(shí)際上,我們在兩年后的確看見(jiàn)Intel在486處理器上使用了三層的設計,順帶一提486芯片同時(shí)實(shí)現了片內集成超一百萬(wàn)晶體管的這個(gè)令人激動(dòng)的里程碑。

圖片

所以當回看這35年間我的實(shí)驗室的科研路線(xiàn),前20年,我的關(guān)注點(diǎn)一直在服務(wù)于硬件工程師的電子設計自動(dòng)化。我們希望他們可以設計出更好的奔騰處理器或者更好的硬件加速器。但是過(guò)去的10年或15年我們逐漸地改變了重心:變成可以讓更多的軟件工程師來(lái)設計他們自己所需要的定制化集成電路和加速器,特別是其在FPGA上的實(shí)現。當被問(wèn)到為什么我們要轉換跑道,我想說(shuō),我們想使得可定制計算成為可能。我們可以用下面這幅圖來(lái)解釋一下15年前為什么我們決定開(kāi)始轉變賽道。

圖片

各位可能都見(jiàn)過(guò)這幅Intel繪制的能耗圖線(xiàn)。我們可以看到頻率的增加是和熱量的產(chǎn)生成正比的。今天大多數的芯片都運行在2-4GHz之間。想做一個(gè)太赫茲級的芯片其實(shí)是沒(méi)有問(wèn)題的,只是做完運行后你大概率會(huì )發(fā)現芯片被自己燒了。所以工業(yè)界在2000年中后期沿著(zhù)圖線(xiàn)向右折了一下, 從單純提高頻率轉向并行設計?;疽馑季褪俏覀儽M量保持現有的頻率,然后增加更多的核來(lái)設計出更強大的芯片。當時(shí)也有對功率和散熱進(jìn)行專(zhuān)門(mén)的分析。在那個(gè)時(shí)候,我們實(shí)際上已經(jīng)提出了一個(gè)更大膽的想法,那就是我們應該再往下走一步讓芯片架構服務(wù)于具體應用,而不是先固定架構再進(jìn)行開(kāi)發(fā)。所以我們向美國國家科學(xué)基金會(huì )(NSF)提交了一個(gè)相關(guān)的項目申請。很幸運,這個(gè)項目獲得了NSF的5年1000萬(wàn)美元的資助并同時(shí)獲得了Expedition in Computing的獎項。這在當時(shí)應該是NSF最大的獎項和資助之一。在申請中我們寫(xiě)了出現在幻燈片里的一句話(huà)“不止著(zhù)眼于并行設計,同時(shí)關(guān)注特定領(lǐng)域可定制設計從而顯著(zhù)提高功耗-性能的效率”。我們不僅寫(xiě)下了這句話(huà),我們也是沿著(zhù)這個(gè)方向努力去做的。實(shí)際上也有很多同仁做出了成功的例子。其中最著(zhù)名的例子是谷歌的TPU。TPU就是專(zhuān)門(mén)為一種應用而設計的,那就是深度學(xué)習。如果你仔細去看TPU的設計架構,他主要就是由一個(gè)個(gè)矩陣-向量乘法塊或者矩陣-矩陣乘法塊構成。TPU的論文報告了相比于最先進(jìn)CPU快200倍,GPU快70倍的性能提升。當然現在CPU和GPU的性能也在提升,所以這是個(gè)大概的數字。谷歌的TPU是個(gè)非常大的成就。但是設計類(lèi)似TPU這樣的特定芯片有一些顯著(zhù)的限制。首當其沖的問(wèn)題就是必須非常有錢(qián)。根據麥肯錫做的調查報告設計制造7nm的芯片需要花費至少15億人民幣。你有沒(méi)有15億人民幣這是第一個(gè)問(wèn)題。第二個(gè)問(wèn)題是你必須要很有耐心。我實(shí)驗室的學(xué)生不是很喜歡去設計芯片以及流片,原因之一就是從你有想法到流片成功至少需要兩年的時(shí)間。萬(wàn)一你的設計流片回來(lái)發(fā)現有問(wèn)題你又要重新流片,這就很難及時(shí)發(fā)出文章。一般畢業(yè)你可能需要有三篇文章發(fā)表,那你什么時(shí)候才能畢業(yè)呢?不僅如此各類(lèi)算法和設計都在快速推陳出新,可能現在的想法很快就過(guò)時(shí)了。所以冗長(cháng)的設計周期也是一項限制。盡管可定制計算芯片有諸多限制,你還是可以在可編程邏輯器件FPGA上實(shí)現很多的可定制計算,也能達到很高的計算效率。我在這里想舉一個(gè)我們在ISCA’2020上發(fā)表的工作。這項工作其實(shí)是在講一個(gè)很經(jīng)典的問(wèn)題——排序。不過(guò)不是對10000個(gè)數字排序,而是對超大規模,比如10T規模的數字進(jìn)行排序。我們的做法從宏觀(guān)上看是一個(gè)簡(jiǎn)單的歸并排序,這樣的排序先對許多小塊數據進(jìn)行排序,然后合并小塊排序合成更大的塊。你可以知道計算層面的算法復雜度是NlogN, 數據的移動(dòng)也是最優(yōu)化的。


那么在硬件設計層面如何對這個(gè)排序算法做特定設計?設計的自由度在于有多少數字需要被處理,以及IO的帶寬有多少?那么映射到這個(gè)歸并排序的合并樹(shù)就是你有多少的葉子結點(diǎn)以及每個(gè)節點(diǎn)的吞吐量有多大?做ASIC對這兩項進(jìn)行專(zhuān)門(mén)設計就比較有難度,我們可以做到的是,如果你告訴我需要排序1T字節的數據、100字節記錄實(shí)現原地歸并排序我們就可以給你定制一個(gè)最優(yōu)化的歸并樹(shù)。定制化的歸并樹(shù)設計好之后當你實(shí)際去跑這個(gè)排序時(shí)你會(huì )發(fā)現1T字節的數據可能裝不進(jìn)內存里,那又該怎么做呢?最好的解決方案是在以?xún)却娴娜萘繛閴K的大小在內存里排序,比如說(shuō)你有256G的內存那么你就排序256G大小的數。那么歸并就會(huì )發(fā)生在硬盤(pán)比如SSD里。SSD和內存比帶寬小了很多,所以從DRAM的排序到SSD的歸并的數據轉移我們可以在線(xiàn)重構FPGA來(lái)重新產(chǎn)生一個(gè)電路專(zhuān)門(mén)解決這個(gè)問(wèn)題,這也是ASIC做不到的。這樣的定制化重構電路僅需要花費1秒鐘,整體的1T字節排序總共花費200秒。相比于現有的CPU、GPU或者其他替代方案,我們的方案可以得到最優(yōu)的性能和最高的吞吐量。這項工作傳達的一個(gè)信息就是,FPGA可以在設計的開(kāi)銷(xiāo)、性能和吞吐量之間給出一個(gè)較好的權衡考量。
02.實(shí)現高效可定制計算設計的五個(gè)關(guān)鍵


我很欣賞斯坦福大學(xué)Bill Dally教授寫(xiě)的一篇文章《Domain-Specific Hardware Acclerators》。這篇文章總結了可定制計算的優(yōu)勢,并且闡述了一些得到高效的可定制設計的關(guān)鍵。第一點(diǎn)在于使用特殊的數據類(lèi)型。比如說(shuō)AI的推斷通常使用8比特數據類(lèi)型。我們曾經(jīng)實(shí)現了基因測序的加速。在這個(gè)應用中一般會(huì )有四種含氮堿基ATCG。我們用2比特的數據類(lèi)型就可以表達這四種堿基。這可能會(huì )帶來(lái)10-1000倍的效率提升。第二點(diǎn)在于使用大規模并行計算。比如說(shuō)在計算矩陣乘法時(shí)利用脈動(dòng)陣列(Systolic Array)架構,其每一個(gè)處理單元都可以處理數據。這種處理不是簡(jiǎn)單的16路并行而是幾千路并行。這可以帶來(lái)極大的性能提升。第三點(diǎn)是優(yōu)化存儲。不需要使用標準的L1/L2/L3緩存架構。數據就放在優(yōu)化好的內存里,需要時(shí)取出就好了。這為高吞吐量低能耗的可定制計算提供了可能。第四點(diǎn)降低或者平攤額外的處理器開(kāi)銷(xiāo)。在一般的芯片上做一個(gè)加法需要先獲取指令,解碼,然后獲取操作數,再根據其他指令的執行情況安排執行這條加法指令。實(shí)際上定制化計算做加法你只要拿到這兩個(gè)操作數用加法器加起來(lái)就可以了。其他的操作都是額外的處理器開(kāi)銷(xiāo)。這種簡(jiǎn)化的指令執行可以帶來(lái)10000倍的效率提升。第五點(diǎn)是定制化計算不使用標準的處理器,既可以根據算法來(lái)設計芯片架構,也可以根據架構來(lái)考慮各類(lèi)算法。這兩者是在定制環(huán)節中是可以一起考慮的。這幾點(diǎn)加起來(lái),就可以提供和傳統標準處理器相比幾個(gè)數量級的性能和效率的提升。當然ASIC也有和以上相同的優(yōu)勢。
03.軟件工程師設計專(zhuān)屬定制化加速器門(mén)檻有多高?


不過(guò),我們之前提過(guò)ASIC的設計是一個(gè)昂貴又漫長(cháng)的過(guò)程。使用FPGA雖然沒(méi)有ASIC的性能提升那么高,但是和一般處理器比性能的提升也是相當顯著(zhù)的。同時(shí)FPGA的設計周期極短,在需要時(shí)可以快速重構,成本和ASIC比大大減小的優(yōu)勢,使我們覺(jué)得FPGA是讓大多數人可以體驗到可定制計算優(yōu)勢的首選方案。現在我希望已經(jīng)讓大家相信:讓軟件工程師為自己的應用設計一款定制化加速器是一件重要而有趣的事情。那現階段軟件工程師可以很容易地設計出專(zhuān)屬的定制化加速器嗎?可能這個(gè)問(wèn)題太寬泛了。很多軟件工程師的工作范圍可能觸及不到對性能的考量,只要設計出的軟件正常工作就可以。但實(shí)際上還有很多“認真的”軟件工程師對程序的運行性能有著(zhù)很高的要求。他們在寫(xiě)代碼的時(shí)候可能會(huì )關(guān)注處理的數據能不能放進(jìn)緩存里,是不是要改寫(xiě)一下循環(huán)做循環(huán)分塊使得程序跑的更快。這些都是固定于現有架構基于軟件層面的優(yōu)化。我希望這一類(lèi)的軟件工程師更進(jìn)一步不需要很多硬件知識能夠很容易地設計出定制化加速器從來(lái)更好地提升性能提高效率。這是我們的目標。只要你懂如何在普通CPU的情況下優(yōu)化軟件代碼,我可以讓你很容易地設計出你想要的加速電路。我們可以把問(wèn)題精確到現階段這些“認真的”軟件工程師身上,他們可以很容易地設計出專(zhuān)屬的定制化加速器嗎?我想說(shuō)答案既是也不是。當我一提到電路設計自動(dòng)化,你可能會(huì )立刻想到高層次綜合(High-level Synthesis)。這是我們20年前的工作。高層次綜合可以將C/C++轉變成LLVM中間代碼。通過(guò)做各種代碼變換、調度安排和片上資源分配就可以得到RTL電路。我們這項工作從一個(gè)普通的學(xué)術(shù)項目xPilot為起點(diǎn),然后基于它我們創(chuàng )立了AutoESL公司,不斷迭代xPilot變成AutoPilot。之后Xilinx收購了AutoESL,AutoPilot也變成了如今的Vivado HLS/Vitis HLS。


在收購之前Xilinx需要做完善的技術(shù)盡職調查。他們不僅自己在內部進(jìn)行了測試,也雇傭了Berkerly Design Automation來(lái)進(jìn)行第三方測試。測試的結果表明,高層次綜合的結果(QoR)可以和手工設計的電路相媲美。IEEE TCAD將我們的最初驗證結果作為主旨論文發(fā)表在其2011年4月刊上。你可以在這篇文章里看見(jiàn)參照設計和高層次綜合生成設計的對比結果。高層次綜合確實(shí)是個(gè)好消息。利用高層次綜合可以很輕松的將C/C++程序轉換成電路。比如說(shuō)下面這個(gè)Polybench的例子。這個(gè)例子中有兩個(gè)做矩陣乘法的循環(huán)。使用高層次綜合,你按一下按鈕就可以得到一個(gè)FPGA的設計,這條路已經(jīng)完全自動(dòng)化了。

圖片

然而,這并不是故事的終點(diǎn),不然我今天的主題報告到這里就結束了。實(shí)際上你會(huì )還會(huì )遇到以下幾個(gè)挑戰。第一個(gè)挑戰在于,當你原原本本地將軟件代碼放進(jìn)高層次綜合工具,點(diǎn)完成按鈕測試了一下性能,發(fā)現這個(gè)電路比單線(xiàn)程CPU慢了13倍。那設計這樣一個(gè)比CPU還要慢的加速器又有什么意義呢?順帶一提,CPU一般的運行頻率是2-4GHz,而FPGA的頻率是300-500MHz。這樣的性能差別其實(shí)很常見(jiàn)。在座的各位如果寫(xiě)過(guò)并行程序如OpenMP的話(huà),會(huì )發(fā)現你寫(xiě)的第一個(gè)程序在16核CPU上并不會(huì )提高16倍的效率,甚至你可能幾乎看不見(jiàn)有任何性能提升。你要做的事情是去做運行時(shí)間分析(profiling)。然后你會(huì )發(fā)現你需要給程序添加一些prgama來(lái)指明哪段代碼可以并行執行,哪些需要做規約(reduction)等等。高層次綜合工具也提供了類(lèi)似的pragma寫(xiě)法。在下圖的例子里,我們就對兩個(gè)循環(huán)添加了pipeline, parallel和parallel with reduction三種pragma。我們回過(guò)頭來(lái)再看加了pragma的代碼產(chǎn)生的RTL發(fā)現性能提高了120倍。順帶一提這些pragma和Vitis_HLS的pragma略有不同。我們使用了Merlin編譯器來(lái)產(chǎn)生這些電路。

Merlin是我們另外一家公司峰科計算(Falcon Computing)的產(chǎn)品。Xlinx在兩年前收購了峰科之后也將Merlin編譯器開(kāi)源供各位試用。

開(kāi)源地址:https://github.com/Xilinx/merlin-compilerMerlin編譯器的好處在于它自動(dòng)實(shí)現了一般高層次綜合手寫(xiě)才能做的很多代碼優(yōu)化,需要額外添加的pragma數量和一般高層次綜合相比大大減少。你們可以看見(jiàn)這個(gè)例子只用3個(gè)pragma就可以了。Merlin的pragma只有簡(jiǎn)單的pipeline, parallel和tiling三種??偟膩?lái)說(shuō)我們想告訴大家的是軟件代碼需要添加合適的pragma來(lái)產(chǎn)生高性能的RTL電路。

圖片

現在你說(shuō),好,如果我添加三個(gè)pragma就可以產(chǎn)生120倍性能提升的電路,那么我怎么知道在哪里添加什么pragma呢?這就涉及到我想說(shuō)的第二個(gè)挑戰。以Merlin編譯器為例子,我們已經(jīng)知道Merlin只有pipeline、parallel和tiling三種pragma,你可能需要在每個(gè)循環(huán)上把這三種pragma以及對應不同的參數都試一遍。就算你的程序很簡(jiǎn)單只有四五個(gè)循環(huán),這樣的求解空間都是指數級。對于我們圖示的簡(jiǎn)單例子可能就有超過(guò)三百萬(wàn)種設置,一個(gè)個(gè)手工窮舉并不是一件合理的事情。那我們怎么來(lái)解決這個(gè)挑戰呢?

圖片

下面我想介紹一下為了解決這個(gè)挑戰我們做的幾方面工作。為了民主化可定制計算:即讓大家都可以用!我們希望不僅是C/C++語(yǔ)言能用來(lái)設計電路,更上層的語(yǔ)言或工具比如TensorFlow、Halide、Spark等都可以用來(lái)描述和設計電路。然后對這些更高層次的語(yǔ)言有一些通用的中間表示層如HeteroCL/MLIR。我們之后會(huì )詳細描述這些工作。
04.讓軟件工程師暢通無(wú)阻生成高性能加速器


我會(huì )從三個(gè)不同的角度來(lái)描述我們的工作。第一個(gè)角度我稱(chēng)之為架構導向優(yōu)化(Architecture Guided Optimization)。如果我知道某些特定的架構模板對特定的應用有很大優(yōu)勢那么我就使用這些特定模板。這樣的例子包括脈動(dòng)陣列(Systolic Array, DAC‘17)和模板計算(Stencil, ICCAD’18)。還有一類(lèi)新的架構我們稱(chēng)之為可組合可并行可流水架構(CPP, DAC’18)。第二個(gè)角度,我們的初步研究相信利用機器學(xué)習或者深度學(xué)習來(lái)進(jìn)行優(yōu)化設計是有可能的,我們之后會(huì )提到相關(guān)的工作。第三點(diǎn)基于上述兩個(gè)角度,我們希望可以把各種加速器快速地組合在一起,我們也有一些相應的工作。我們的目標是使得軟件工程師可以在他們熟悉的高層次語(yǔ)言描述上可以一路到底暢通無(wú)阻的生成他們需要的高性能加速器。

圖片

首先來(lái)談?wù)劦谝粋€(gè)角度,架構導向優(yōu)化。我們的工作的其中一個(gè)例子是AutoSA。這項工作主要是深度學(xué)習的高層次代碼核(Kernel)映射到脈動(dòng)陣列上。脈動(dòng)陣列在上世紀70年代由H. T. Kung教授和Charles Leiserson教授提出并給出了形式化的定義。大概的意思是數值的計算是可以像心跳一樣舒張收縮脈動(dòng)化的,比如在3x3矩陣相乘時(shí),行列向量之間錯拍輸入處理單元(PE),結果可以按節拍輸出(譯者記:行列輸入分別在1,2,3拍進(jìn)入,按列為單位輸出分別在第3,4,5拍, 第4,5,6拍, 第5,6,7拍產(chǎn)生)。


為什么我們對脈動(dòng)陣列這么感興趣呢。因為這里面包含了很多大型矩陣和大量的并行處理,這帶來(lái)了性能提升。谷歌的TPU就是基于脈動(dòng)陣列的架構進(jìn)行設計的。脈動(dòng)矩陣的另一個(gè)關(guān)注點(diǎn)在于局部臨近計算,這優(yōu)化了能耗。對傳統芯片設計主要的性能影響指標并不是門(mén)的速度而是導線(xiàn)的速度。脈動(dòng)陣列的布線(xiàn)只連接了相鄰的處理單元。所以現在幾乎所有的,包括谷歌、特斯拉和亞馬遜的深度學(xué)習加速器都在基于脈動(dòng)陣列來(lái)設計。雖然脈動(dòng)陣列的原理很簡(jiǎn)單,然而要設計出一塊好的脈動(dòng)陣列加速器并不是一件容易的事情。下面這幅研發(fā)周期分析圖來(lái)自英特爾,他們展示了從包括C、OpenCL、Verilog、SystemVerilog等語(yǔ)言開(kāi)始到生成硬件電路的研發(fā)周期。其中紅色高亮的三個(gè)設計使用到了脈動(dòng)陣列。我們可以看到研發(fā)這樣的電路少則4個(gè)月,多則18個(gè)月。設計出的可能只是一個(gè)性能還可以的電路,不是最終完全調優(yōu)的電路。我們希望自動(dòng)化這一步驟。實(shí)現自動(dòng)化的挑戰在哪里呢?挑戰在于不僅僅可以設計出一個(gè)脈動(dòng)陣列的電路,而且是根據不同參數自動(dòng)設計出最優(yōu)的或者接近于最優(yōu)的電路。所以,我們提出了設計空間的概念。比如說(shuō)你有輸入數組的參數以及所有可能的脈動(dòng)陣列參數等等,這些參數的笛卡爾積就構成了一個(gè)待求解的設計空間。我們的工作已經(jīng)可以在這個(gè)求解空間內自動(dòng)尋找最優(yōu)解或者接近于最優(yōu)的設計。接下來(lái)的工作我們又分成兩大步驟,一個(gè)是計算管理,另一個(gè)是通信管理。對于計算管理,我們這里用一個(gè)三循環(huán)的矩陣乘法來(lái)展示一下工作原理。這里第一個(gè)需要考慮的問(wèn)題就是時(shí)間-空間映射。對這三個(gè)循環(huán),你需要決定哪幾個(gè)循環(huán)可以映射到二維的空間域上同時(shí)計算,哪幾個(gè)循環(huán)映射到一維時(shí)間維度上在處理器上進(jìn)行常規的時(shí)間循環(huán)。解決這個(gè)問(wèn)題我們使用了多面體模型(Polyhedral Model)來(lái)分析數據依賴(lài),然后做一定程度上的窮舉來(lái)縮小求解空間從而劃出存在著(zhù)最優(yōu)解的子集。

圖片

第二個(gè)需要考慮的問(wèn)題是數據量。你的數據量可能特別大,比如說(shuō)你需要處理10x24x24字節的數據,因為數據量大可能沒(méi)有辦法做到計算單元和每一個(gè)數據的對應。你可能需要創(chuàng )建多個(gè)小一點(diǎn)的數組作為替代,我們稱(chēng)之為數組分塊(Array Partition)。見(jiàn)圖中的實(shí)例,你可以把循環(huán)劃分出一個(gè)個(gè)小塊并在每一個(gè)小塊上產(chǎn)生一個(gè)新的循環(huán)。這里我們會(huì )對產(chǎn)生多大的小塊這一參數進(jìn)行優(yōu)化。

圖片

這還沒(méi)有完,第三個(gè)需要考慮的問(wèn)題就是時(shí)序。真正的電路并沒(méi)有像當前時(shí)刻做計算然后傳到右邊的鄰接節點(diǎn)然后在下一個(gè)時(shí)刻做新的計算這么簡(jiǎn)單。很多的運算比如說(shuō)浮點(diǎn)數加乘需要花費好幾個(gè)時(shí)鐘周期。如果不做任何優(yōu)化,相鄰的處理單元可能需要等上5-10時(shí)鐘周期才能得到數據。一個(gè)更好的方式是我先開(kāi)始計算一部分數據,比如說(shuō)要花8個(gè)時(shí)鐘周期。接著(zhù)我立刻在下一時(shí)鐘周期對一塊沒(méi)有數據依賴(lài)的獨立區域進(jìn)行計算,這樣每個(gè)時(shí)鐘周期我都能給相鄰的處理單元一些數據。這就意味著(zhù)你可能需要額外再分離出一些循環(huán)來(lái)實(shí)現上述操作,我們稱(chēng)之為延時(shí)隱藏(Latency Hiding)。

圖片

最后你的脈動(dòng)陣列處理單元不一定只能做一次加乘操作,這其中可以進(jìn)行SIMD處理。你可以有一個(gè)向量來(lái)同時(shí)處理16個(gè)運算。這也會(huì )產(chǎn)生額外的循環(huán)我們稱(chēng)之為SIMD循環(huán)。以上就是我們在計算管理上幾個(gè)角度的考量。這些考量合在一起就形成了一個(gè)大的自動(dòng)化求解空間。你也可以看見(jiàn)因為空間很大,我們也需要花一些時(shí)間來(lái)找到最優(yōu)或接近最優(yōu)的脈動(dòng)陣列電路設計。


到現在為止對數據計算管理就有這么多的選項,對數據傳輸通信呢?其實(shí)傳輸通信才是關(guān)鍵,因為你要保證數據只在相鄰的處理單元之間傳遞而不是廣播數據。我們通過(guò)做依賴(lài)分析來(lái)解決這個(gè)問(wèn)題。你可以在這個(gè)矩陣乘法的例子中發(fā)現A和B矩陣各自都有讀后讀依賴(lài)(Read-after-Read dependency)。一般來(lái)說(shuō)在CPU中我們對讀后讀依賴(lài)不是很看重,但在脈動(dòng)陣列設計中這非常重要。接著(zhù)我們發(fā)現操作中還有寫(xiě)后讀的依賴(lài)(Read-after-Write dependency)因為C矩陣是在循環(huán)之間累加的。最后不同的數值會(huì )寫(xiě)在C矩陣不同的位置上。接著(zhù)你就能得到下圖中的這張表來(lái)發(fā)現哪一個(gè)I/O組有著(zhù)怎樣的數據依賴(lài)關(guān)系。

圖片

有了這張表你就可以知道如何構建網(wǎng)絡(luò )架構。比如說(shuō)根據你的依賴(lài)向量你發(fā)現依賴(lài)是沿著(zhù)j軸的那你就可以沿著(zhù)j軸傳輸數據流。同理,如果依賴(lài)沿著(zhù)i軸那么就沿i軸傳輸數據流。這些分析都是通過(guò)多面體分析得來(lái)的,基于這個(gè)分析得出的傳輸網(wǎng)絡(luò ),我可以保證是依賴(lài)正確,同時(shí)只有相鄰處理單元有數據傳輸。當然所有計算完成之后數據會(huì )被讀回去。我在這里不會(huì )詳細展開(kāi)這個(gè)分析,但是我很樂(lè )于分享相應的論文給大家參考。

圖片

以上的步驟中有些參數是我們需要去調整的。其中很重要的是循環(huán)分塊(loop tiling)的參數。你需要決定執行循環(huán)的數組的維度是多少。為了找到這個(gè)參數我們采取了一種混合方法。首先我們用一個(gè)數學(xué)優(yōu)化求解器,然后我們做進(jìn)化搜索,因為找到的參數可能存在無(wú)法整除的情況。我想強調的是之所以我稱(chēng)之為基于微架構的優(yōu)化是因為一旦你定義好了微架構的模板我就可以根據這個(gè)架構來(lái)快速準確的估計設計電路的性能。這使得使用數學(xué)求解器成為了可能。

我們目前已經(jīng)將AutoSA開(kāi)源。歡迎大家來(lái)試用這個(gè)工具,并給這個(gè)工具添加新的功能。

開(kāi)源地址:https://github.com/UCLA-VAST/AutoSA我也可以告訴大家,當你擁有了這樣的基于具體架構的空間求解器你可以得到一些令人驚訝的結果。其中一個(gè)新洞察是物理數組的大小應該是多少,這個(gè)大小一定需要是總體數據大小的因數嗎?比如說(shuō)總大小是1024,是不是只能去嘗試2、4、8、16這樣的因數作為物理數組的大小呢?實(shí)際上,有不少文章是基于這樣的假設來(lái)做設計空間求解的。這些文章也發(fā)表在了頂級的期刊或會(huì )議上。但是我們證明了這條假設不是一定正確的。原因很簡(jiǎn)單,如下圖所示如果一個(gè)4x32的設計是可以裝進(jìn)FPGA的,8x32則裝不下,在這個(gè)設計里如果你用一些非因數參數(13x16)反而有更好的效果。這個(gè)矩陣乘法的例子我們可以很明確地告訴大家根據純因數參數最好的設計參數為32x4x8(行,列,SIMD),但如果你選一些奇怪的數字比如說(shuō)16x13x8我們甚至可以獲得50%的性能提升,這是令人意想不到的。

圖片

另外一個(gè)驚人的洞察是很多人知道片外的存儲轉移是很重要的。不對此進(jìn)行優(yōu)化,很難得到最優(yōu)化的設計。很多人說(shuō)只要最小化存儲轉移的量,我應該就可以得到最優(yōu)化的設計。當然也有一些文章是基于這樣的假設。再一次地,我們證明了這不一定永遠正確。我們還是使用剛才的例子,如果你計算一下數據移動(dòng)你會(huì )發(fā)現第二個(gè)設計有著(zhù)更高的移動(dòng)。這是一個(gè)高計算密度的應用所以計算量是很重要的,增加的數據移動(dòng)保證了所有的計算單元都被有效利用了。


以上例子顯示了有些工作如果你如果沒(méi)有用到空間求解你可能就無(wú)法真正研究到這種設計細節。順帶一提,我們的工作不僅實(shí)現了對脈動(dòng)陣列的優(yōu)化,而且優(yōu)化了一些模板計算(Stencil Computation)。這些模板計算也在數據管理和通信管理上做到了最優(yōu)化。希望現在你可以相信脈動(dòng)陣列我們可以做得很好。但是對于沒(méi)有經(jīng)典架構可以映射的一般程序,是否也可以做好呢?在這個(gè)問(wèn)題上我們使用峰科計算開(kāi)發(fā)的Merlin編譯器來(lái)解決這個(gè)問(wèn)題。我們將Merlin編譯器設計成和OpenMP類(lèi)似的使用方式。OpenMP是很多軟件工程師開(kāi)發(fā)多核CPU程序的應用程序接口。我們認為這樣的設計可能是最貼近于軟件工程師使用習慣的。在OpenMP里怎么讓程序并行執行呢?和高層次綜合類(lèi)似,你用pragma來(lái)做這件事情。OpenMP的pragma以”omp parallel for”為前綴,你可以把它加在需要并行執行的循環(huán)之前并指定并行執行的參數。類(lèi)似地在Merlin編譯器里,我們使用”ACCEL”作為前綴,你可以對循環(huán)指定pipeline,parallel和tiling的操作并指定對應的優(yōu)化參數。比如這里的例子我們就指定對循環(huán)做16路并行。Merlin編譯器會(huì )自動(dòng)執行很多的代碼變換。這些變換包括將數據裝入緩沖存儲器(Buffer)、數組劃分(Array Partition)、上位機代碼生成等等。這些所有的步驟都是全自動(dòng)的。對于軟件工程師來(lái)說(shuō)這非常容易上手。

圖片

基于Merlin編譯器,我們所做的第一項工作叫自動(dòng)設計空間求解(AutoDSE)。這項工作也獲得了ACM TODAES 2023年度最佳論文獎。AutoDSE的工作原理類(lèi)似一個(gè)專(zhuān)家系統。一般來(lái)說(shuō)如何去設計一個(gè)加速電路呢?極大概率你會(huì )想從什么pragma也不加開(kāi)始,當然有可能很幸運的,什么pragma不加就能用Merlin達到性能目標。從一個(gè)沒(méi)有pragma的程序出發(fā),你先會(huì )去看一下Merlin的輸出報告。從報告上不僅可以看見(jiàn)總的時(shí)鐘周期,也可以看見(jiàn)詳細到每個(gè)循環(huán)的時(shí)鐘周期分布以及資源使用情況。這樣很明顯你可以發(fā)現某幾個(gè)嵌套循環(huán)占據了大量的延時(shí)。知道這一點(diǎn)之后你就會(huì )在相應的循環(huán)上添加pragma來(lái)提升性能。如此循環(huán)往復直到獲得滿(mǎn)意的設計。我稱(chēng)之為基于瓶頸指向的優(yōu)化設計。AutoDSE可以通過(guò)空間求解自動(dòng)產(chǎn)生pragma及其參數,并調用Merlin編譯器實(shí)現了自動(dòng)化求解。然而AutoDSE有一個(gè)限制在于,對于每次迭代求解我都必須運行高層次綜合以了解性能。一次執行可能需要10分鐘,有時(shí)20分鐘,有時(shí)30分鐘,所以一天之內你很難經(jīng)歷很大量多次迭代,也許最多20-40次。一個(gè)設計求解空間中可能有數百萬(wàn)個(gè)點(diǎn),因此我們認為這可能是深度學(xué)習可以提供幫助的地方:我們想要提出一個(gè)模型,可以給我們正確的性能預測。如果機器學(xué)習可以成為最好的國際象棋棋手,也許它也可以成為即將到來(lái)的最好的電路設計師。我們實(shí)際上研究發(fā)現這比下棋要困難得多。因為圍棋雖然是相當具有挑戰性的大棋盤(pán),但它的規則是固定的。但是加速器電路設計,例如編寫(xiě)算法,都是開(kāi)放式的沒(méi)有固定的規則。你只受你的創(chuàng )造力的限制,所以這是一個(gè)更加難的問(wèn)題。我們的第一個(gè)目標是給程序和pragma準確預測性能,這樣我就可以在設計空間里快速迭代。對于A(yíng)lphaGo的設計師來(lái)說(shuō)最激動(dòng)人心的時(shí)刻還在于,一旦你擁有了棋盤(pán),你就擁有了黑色棋子、白色棋子和規則。一旦他們看見(jiàn)棋盤(pán)的局勢他們就可以產(chǎn)生對應的評分函數進(jìn)行預測,這是他們可以進(jìn)行機器學(xué)習的關(guān)鍵。我們也想做同樣的事情,當我看到程序員的程序時(shí),我也想建立一個(gè)評分函數對其進(jìn)行性能評估。另一個(gè)問(wèn)題是我該如何預處理這些帶pragma的程序,你是把它當作一串字符向量、自然語(yǔ)言還是別的什么量化表示。事實(shí)上,我發(fā)現程序與自然語(yǔ)言非常不同,因為當我在這里說(shuō)話(huà)時(shí),有很多的冗余詞,你可以跳過(guò)也許五個(gè)詞你仍然可以知道我在說(shuō)什么。但是對于一個(gè)程序它敏感到如果你放錯了分號,你會(huì )得到一個(gè)非常不同的結果。所以對于程序直接使用自然語(yǔ)言處理并不是一個(gè)很好的方式。

圖片

我們在這里想解的決問(wèn)題依然是希望能夠自動(dòng)插入pragma。然后我們快速地搜索這個(gè)求解空間。我們要做的第一件事情是創(chuàng )建訓練樣本。這個(gè)時(shí)候AutoDSE就可以發(fā)揮巨大的作用,原因是AutoDSE的求解過(guò)程中會(huì )產(chǎn)生大量的中間設計結果,我們不僅保留了這些電路的性能指標也保存了這些對應的電路設計。這些AutoDSE生成的樣本電路可以作為我們的訓練樣本,不僅是因為我們進(jìn)行了針對瓶頸的優(yōu)化使得這些中間設計仍然是有意義的,盡管它不是最優(yōu)的。而且我們對有些電路也做了一些擾動(dòng)使得我們生成的訓練樣本包括好的和壞的設計。我們通過(guò)這樣的方式創(chuàng )建包含有幾千個(gè)程序的訓練樣本數據庫。我也希望您可以與我們合作,也許在更大的社區范圍內我們可以制作一個(gè)更多更大的樣本數據庫。圖神經(jīng)網(wǎng)絡(luò )有很多令人興奮的進(jìn)展。事實(shí)上,我注意到在我的主題報告之后有一個(gè)關(guān)于圖神經(jīng)網(wǎng)絡(luò )的研討會(huì )。我認為這非常及時(shí)。我們將把圖編碼成多維向量或者多個(gè)多維向量的嵌入(Embedding)。在編碼成向量之前我們需要考慮節點(diǎn)的注意力機制(Attention)、知識跳躍(Jumping knowledge)等等很多因素。有了這個(gè)圖的嵌入編碼,就可以作為高維神經(jīng)網(wǎng)絡(luò )的輸入層,然后把對應的性能指標作為訓練標簽進(jìn)行訓練了。

圖片

這樣的做法和純用AutoDSE相比就快多了。我也不必運行高層次綜合就可以做設計空間求解。我們在第一個(gè)版本中選擇最好的M個(gè)設計,然后對M個(gè)設計再進(jìn)行高級綜合來(lái)作為新的訓練數據集。但這還不是故事的結束。對于和訓練集完全不一樣設計使用圖神經(jīng)網(wǎng)絡(luò )我們還是有一些掙扎的。這些測試樣本對于訓練來(lái)說(shuō)屬于域外分布。所以這就是我們想要利用遷移學(xué)習(Transfer Learning)的地方(GNN-DSE-MAML)。大概的做法是如果你給我一些全新的東西,我要建立一個(gè)模型,我必須運行在一些樣本上運行幾次真正的高層次綜合,然后我更新我的模型而不是直接使用已有數據進(jìn)行探索。

圖片

我們這個(gè)方法的靈感來(lái)源于機器學(xué)習中K樣本學(xué)習(K-shot learning)的概念。用早期的分類(lèi)工具我可以從一百萬(wàn)張圖像中學(xué)會(huì )如何區分一千個(gè)類(lèi)別的狗和貓或其他物件。那現在如果我給你一種新動(dòng)物比如說(shuō)駱駝,你從來(lái)沒(méi)有見(jiàn)過(guò)你能認出嗎?顯然必須教你一些東西,但也許只要有兩三個(gè)駱駝的照片你就可以知道這是駱駝,你以后可以一直分辨出來(lái)。如何來(lái)做這件事情?基本上你將會(huì )有一些動(dòng)物,每一種都有一些例子。每一個(gè)新動(dòng)物都稱(chēng)為一項任務(wù),你希望在所有這些任務(wù)上都做好。每個(gè)任務(wù)的樣本數很少,你也想要在這些任務(wù)之間做好區分。數學(xué)上發(fā)生的事情是你迭代所有這些任務(wù),你進(jìn)行梯度下降,每個(gè)任務(wù)都會(huì )給你一個(gè)新的梯度,然后你做某種加權平均然后你取得了訓練進(jìn)展。在推理時(shí),當你看到一個(gè)新任務(wù),基本上是一種新動(dòng)物或在我們的情況是一個(gè)新程序,然后你會(huì )先運行幾張圖,找到現有最小化誤差,所以給你另一個(gè)梯度,然后你從這個(gè)梯度出發(fā)來(lái)更新現有的模型。

圖片

這是我們做自適應的方法。利用這個(gè)方法我們得到了魯棒性更好的結果。這個(gè)結果是比直接微調更好的。我會(huì )說(shuō)我們還是有優(yōu)化的空間,尤其是在資源管理部分。因為在某些情況下我們得到了很好的結果,但它已經(jīng)超出了我們擁有的資源,所以我們必須更精確地處理這些情況。

圖片

AutoDSE(https://github.com/UCLA-VAST/AutoDSE)和GNN DSE(https://github.com/UCLA-VAST/GNN-DSE)都是開(kāi)源的,所以如果您有興趣在這個(gè)方向繼續研究,歡迎您下載試用。

圖片

HeteroCL這項工作非常成功,我們將其硬件優(yōu)化部分擴展到我們的加速器設計。在這里我們主要有三種優(yōu)化方式。第一種是特定計算的定義。比如我們可以來(lái)定義一個(gè)循環(huán)的展開(kāi)。第二種是自定義數據類(lèi)型。你可以很容易地嘗試從2bit到16bit,看看你的輸出結果是什么樣子。我們也可以指定如何復用數據。

圖片

接下來(lái)我們很快意識到,在硬件優(yōu)化的定義區塊中,我們可以給用戶(hù)使用微架構的設計自由。比如說(shuō)其中某些計算可以使用脈動(dòng)陣列,某些計算可以使用模板計算。這些都是設計模式,和真正的硬件指標比如FPGA中的BRAM或者URAM的使用毫不相關(guān)。軟件設計師可以很容易地和他們平常寫(xiě)設計一樣指定這些模式。其他指定不了的步驟我們將通過(guò)自動(dòng)合成、AutoDSE和機器學(xué)習等等技術(shù)幫助他們自動(dòng)完成。



05.結語(yǔ):民主化可定制計算取得的進(jìn)展令人鼓舞


最后,在我的主旨報告結束之前,我想再談一個(gè)問(wèn)題:即如何將所有東西搭建在一起?對于一些真正從事FPGA設計的人來(lái)說(shuō),當你把所有東西放在一起時(shí),性能可能從大約300MHz降至100MHz。而且還需要非常長(cháng)的時(shí)間生成比特流。20小時(shí)并不夸張,40小時(shí)完全合理。我們最近在這個(gè)問(wèn)題上取得了很大的進(jìn)步。順便說(shuō)一句,你不必因為設計錯了什么而感到難過(guò),只是大型的FPGA非常復雜。你可能注意到了一個(gè)大的FPGA往往有四個(gè)大片(die)而不是一個(gè)。如果你的設計出現了跨片的情況整個(gè)電路的延時(shí)可能一下子就從幾納秒漲到幾十納秒。而且大型FPGA中還有很多IP核在那里阻礙了很多布局布線(xiàn)。比如說(shuō)你有DDR、控制器在中間,然后你有PCIe控制器在最后與CPU通信。最新的FPGA有32個(gè)通道的HBM。那么如何連接到你需要的數據你需要創(chuàng )建一個(gè)大的交叉通信模塊,這也會(huì )犧牲芯片的性能。有了以上原因,你的FPGA實(shí)際表現很差并不是一件奇怪的事情。HLS對這一點(diǎn)的考慮也是有限的。你在編寫(xiě)代碼和插入pragma時(shí)不知道在實(shí)際布局布線(xiàn)中你會(huì )在哪里出現跨片,在哪里會(huì )遇到哪些IP塊。我們的解決方法實(shí)際上很簡(jiǎn)單。如果你有一根高延時(shí)長(cháng)線(xiàn)我可以通過(guò)增加流水線(xiàn)級數來(lái)解決這個(gè)問(wèn)題。所以問(wèn)題轉變?yōu)檫@些長(cháng)線(xiàn)在哪里。這就是我們要先做布局的地方,這是一個(gè)粗略等級的布局。然后利用這個(gè)粗略的布局信息作為約束條件來(lái)指導全局的優(yōu)化。從高層次綜合開(kāi)始實(shí)際上是理想的,因為我基于一種抽象表示做調度比較自由。如果我需要兩個(gè)額外的時(shí)鐘周期我可以將其添加到我的調度解決方案中。這個(gè)方法也是比較成功的。現在我們超過(guò)43種設計中看到幾乎是2倍的時(shí)鐘周期提升,從150MHz到 297MHz。我可以告訴你,每一個(gè)我實(shí)驗室的項目都在使用Autobridge進(jìn)行FPGA輔助設計, 因為學(xué)生自然而然能獲得2倍的性能提升。這項工作獲得了 FPGA’2021的最佳論文獎。如果你對此感興趣,歡迎與你的團隊分享這項工作。

圖片

不僅如此,我可以繼續向你展示關(guān)于脈動(dòng)陣列的設計討論。從12 x 12陣列開(kāi)始到24 x 24陣列時(shí),在傳統情況下你會(huì )發(fā)現性能下降,頻率從300MHz開(kāi)始降至150MHz或120MHz,但用AutoBridge優(yōu)化后,我們的運行頻率基本上保持不變。所以你可以看到圖中的布局布線(xiàn)圖是一個(gè)很神秘的部分,左邊的圖中布局布線(xiàn)工具看起來(lái)似乎做得很好,他們將所有東西都包裝在盡可能少的片中,但是他們造成大量布線(xiàn)擁堵(Congestion)。我們可以放心地將其分離出來(lái),然后我們將流水線(xiàn)寄存器按需插入設計。

圖片

這些我稱(chēng)之為延遲激勵設計技術(shù),因為你可以容忍比較長(cháng)的延遲,也可以幫助我們改善布局布線(xiàn)。如果你運行Xilinx工具,你發(fā)現它太慢了要40小時(shí),你分析一下CPU使用情況發(fā)現你只使用了四個(gè)核。你說(shuō)我有32個(gè)核,為什么不使用32個(gè)核?因為你無(wú)法并行優(yōu)化各個(gè)電路,因為片與片之間存在全局互連。使用這種方法,我們在邊界添加觸發(fā)器,因此每個(gè)觸發(fā)器完全解耦了片間連接,以便我們可以并行運用它們。

圖片

這種技術(shù)實(shí)際上也可以帶來(lái)驚人的結果。我們獲得5到10 倍編譯綜合運行速度的提升,我們還獲得了30%頻率提升。

圖片

我們還有一個(gè)擴展,被稱(chēng)為TAPA的HLS?;旧衔覀兲砑右恍┠0錓O來(lái)描述這些數據。從那里進(jìn)行流程設計,我們可以利用之前提到的技術(shù)自動(dòng)進(jìn)行延遲激勵優(yōu)化。

圖片

我們使用TAPA設計了一個(gè)FlexCNN。它共計有14000行代碼,這一切都使用了延遲激勵設計。

圖片

最后總結一下,我知道民主化可定制計算這個(gè)方向存在的時(shí)間很短,但對在這個(gè)方向上所取得的進(jìn)展,我倍感鼓舞。也許我有些偏愛(ài),在報告中我選擇了更多來(lái)自我的實(shí)驗室所做的研究,但實(shí)際上這個(gè)領(lǐng)域有著(zhù)一群共同努力的優(yōu)秀學(xué)者。這確實(shí)需要整個(gè)社區的共同努力,這就是為什么我們對工具開(kāi)源這件事情如此強調。我希望聆聽(tīng)或者是閱讀我報告的人,能夠在這個(gè)領(lǐng)域繼續添磚加瓦。工業(yè)界也正在朝著(zhù)開(kāi)源這個(gè)方向發(fā)展,并且會(huì )更加開(kāi)放,例如英特爾有一個(gè)可定制計算API 是開(kāi)源的。同時(shí)在我們的鼓勵下,AMD-Xilinx在收購峰科計算之后也開(kāi)源了Merlin編譯器。我們對使用MLIR作為加速器設計的也越來(lái)越感興趣。你們很多人可能都聽(tīng)過(guò)Hennessy教授和Patterson教授在他們的圖靈獎演講中的一句話(huà):“這是一個(gè)計算機架構的黃金時(shí)代”。這絕對是真的。因為以前你只有微處理器、控制器等一些很少類(lèi)型的東西可以設計?,F在有了所有這些加速器的設計,實(shí)際上產(chǎn)生了無(wú)限的機會(huì )。

開(kāi)源軟件生態(tài):

AutoSA: https://github.com/UCLA-VAST/AutoSA

Stencil: https://github.com/UCLA-VAST/soda

Merlin Compiler: 

https://github.com/Xilinx/merlin-compiler

AutoDSE: https://github.com/UCLA-VAST/AutoDSE

GNN-DSE: https://github.com/UCLA-VAST/GNN-DSE

HeteroCL: https://github.com/cornell-zhang/heterocl

AutoBridge:

https://github.com/UCLA-VAST/AutoBridge

TAPA: https://github.com/UCLA-VAST/tapa

FlexCNN with TAPA: 

https://github.com/UCLA-VAST/FlexCNN


參考鏈接:

[1]主旨報告演講視頻:

https://www.youtube.com/watch?v=qlqjymTcLdI

[2]主旨報告幻燈片:

https://ucla.box.com/s/8yx0m0v1wtobn0io87jg4xh4sw0fculp

[3]Wang, Jie, Licheng Guo, and Jason Cong. "AutoSA: A polyhedral compiler for high-performance systolic arrays on FPGA." The 2021 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays. 2021.

[4]Chi, Yuze, and Jason Cong. "Exploiting computation reuse for stencil accelerators." 2020 57th ACM/IEEE Design Automation Conference (DAC). IEEE, 2020.

[5]Chi, Yuze, Jason Cong, Peng Wei, and Peipei Zhou. "SODA: Stencil with optimized dataflow architecture." In 2018 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), pp. 1-8. IEEE, 2018.

[6]Cong, Jason, Muhuan Huang, Peichen Pan, Yuxin Wang, and Peng Zhang. "Source-to-source optimization for HLS." FPGAs for Software Programmers (2016): 137-163.

[7]Wei, Xuechao, Cody Hao Yu, Peng Zhang, Youxiang Chen, Yuxin Wang, Han Hu, Yun Liang, and Jason Cong. "Automated systolic array architecture synthesis for high throughput CNN inference on FPGAs." In Proceedings of the 54th Annual Design Automation Conference 2017, pp. 1-6. 2017.

[8]Sohrabizadeh, Atefeh, Cody Hao Yu, Min Gao, and Jason Cong. "AutoDSE: Enabling software programmers to design efficient FPGA accelerators." ACM Transactions on Design Automation of Electronic Systems (TODAES) 27, no. 4 (2022): 1-27. (ACM TODAES best paper award)

[9]Sohrabizadeh, Atefeh, Yunsheng Bai, Yizhou Sun, and Jason Cong. "Automated accelerator optimization aided by graph neural networks." In Proceedings of the 59th ACM/IEEE Design Automation Conference, pp. 55-60. 2022.

[10]Lai, Yi-Hsiang, Yuze Chi, Yuwei Hu, Jie Wang, Cody Hao Yu, Yuan Zhou, Jason Cong, and Zhiru Zhang. "HeteroCL: A multi-paradigm programming infrastructure for software-defined reconfigurable computing." In Proceedings of the 2019 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, pp. 242-251. 2019. (Best paper award candidate)

[11]Pal, Debjit, Yi-Hsiang Lai, Shaojie Xiang, Niansong Zhang, Hongzheng Chen, Jeremy Casas, Pasquale Cocchini et al. "Accelerator design with decoupled hardware customizations: benefits and challenges." In Proceedings of the 59th ACM/IEEE Design Automation Conference, pp. 1351-1354. 2022.

[12]Guo, Licheng, Yuze Chi, Jie Wang, Jason Lau, Weikang Qiao, Ecenur Ustun, Zhiru Zhang, and Jason Cong. "AutoBridge: Coupling coarse-grained floorplanning and pipelining for high-frequency HLS design on multi-die FPGAs." In The 2021 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, pp. 81-92. 2021. (Best paper award)

[13]Chi, Yuze, Licheng Guo, Jason Lau, Young-kyu Choi, Jie Wang, and Jason Cong. "Extending high-level synthesis for task-parallel programs." In 2021 IEEE 29th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM), pp. 204-213. IEEE, 2021.

[14]Basalama, Suhail, Atefeh Sohrabizadeh, Jie Wang, Licheng Guo, and Jason Cong. "FlexCNN: An End-to-End Framework for Composing CNN Accelerators on FPGA." ACM Transactions on Reconfigurable Technology and Systems 16, no. 2 (2023): 1-32.

[15]Sohrabizadeh, Atefeh, Jie Wang, and Jason Cong. "End-to-end optimization of deep learning applications." In Proceedings of the 2020 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, pp. 133-139. 2020.



*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 院士

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>