包云崗 常軼松 韓銀和 黃立波 李華偉 梁 云 羅國杰 尚 笠 唐 丹 王 穎解壁偉 喻文健 張 科 孫凝暉
1(計算機體系結(jié)構(gòu)國家重點實驗室(中國科學院計算技術(shù)研究所) 北京 100190)
2(中國科學院大學計算機科學與技術(shù)學院 北京 100049)
3(北京大學高能效計算與應用中心 北京 100871)
4(專用集成電路與系統(tǒng)國家重點實驗室(復旦大學) 上海 201203)
5(國防科技大學計算機學院 長沙 410073)
6(清華大學計算機科學與技術(shù)系 北京 100084)
(baoyg@ict.ac.cn)
處理器芯片是電子信息產(chǎn)業(yè)的驅(qū)動引擎,已成為人類社會的數(shù)字化、信息化和智能化的基石.互聯(lián)網(wǎng)、電信、金融、服務業(yè)等傳統(tǒng)行業(yè)以及物聯(lián)網(wǎng)、車聯(lián)網(wǎng)、人工智能等新興領域,都需要各類處理器芯片提供強有力的支撐計算能力.
然而,現(xiàn)有處理器芯片設計方法和體系需要極為復雜的設計描述和實現(xiàn)流程,并結(jié)合先進工藝節(jié)點下的制造、封裝和測試環(huán)節(jié),實現(xiàn)處理器芯片性能——頻率、面積和功耗的最優(yōu)設計.這就導致處理器芯片設計具有極長的設計周期,造成極高的設計門檻.
1)傳統(tǒng)通用處理器CPU設計愈發(fā)復雜
隨著工藝技術(shù)節(jié)點的不斷發(fā)展,基于現(xiàn)有的處理器設計方法,通用處理器芯片設計規(guī)模大幅增長,設計成本日趨高昂.以14 nm工藝節(jié)點為例,研發(fā)一款通用處理器芯片,需要投入上百人年,耗費上億美元的研發(fā)經(jīng)費①數(shù)據(jù)來源:Andreas Olofsson,Intelligent Design of Electronic Assets(IDEA),2017,形成極高的設計門檻.通用處理器芯片流片失敗勢必會造成巨大的成本浪費,因此只有極少數(shù)處理器芯片產(chǎn)業(yè)巨頭企業(yè)才能夠承受中高端通用處理器芯片的研發(fā)成本.
2)新興專用處理器XPU亟需大量定制
人類社會正逐步邁入“萬物互聯(lián)”的智能物聯(lián)網(wǎng)(AIo T)時代.每個物聯(lián)網(wǎng)設備都需要一顆處理器芯片來實現(xiàn)網(wǎng)絡互連和智能計算的功能,從而形成一個極具規(guī)模的處理器芯片市場.
然而,與傳統(tǒng)互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)時代的應用場景相比,AIo T設備需根據(jù)特定的專用應用領域需求,對處理器芯片進行深度定制,通過軟硬件協(xié)同設計,定制領域應用專用處理器硬件架構(gòu)及軟件程序,以滿足特定場景對芯片性能、功耗和面積需求.由于應用場景未來將呈現(xiàn)爆發(fā)式增長,勢必會造成不同AIo T設備對處理器芯片的設計需求出現(xiàn)極大差異化和碎片化.如繼續(xù)沿用現(xiàn)有處理器芯片設計方法,至少需要投入2~3年的設計時間,才能完成一款AIo T芯片的研發(fā).過長的芯片研發(fā)和上市時間顯然無法滿足海量的領域?qū)S肁Io T芯片及設備的快速定制需要,亟需探索一種敏捷的專用處理器芯片設計方法,以快速應對海量的AIo T芯片碎片化設計需求.
針對上述問題,如何突破現(xiàn)有處理器設計方法的壁壘,在保證性能和可靠性的前提下既可降低通用處理器CPU設計復雜性、成本和設計門檻,又能應對專用處理器XPU場景多樣性并縮短設計周期,從而形成以降低時間、成本和復雜度為主要導向的處理器芯片敏捷設計新方法,是破解CPU和XPU處理器芯片設計難題的有效途徑.
隨著摩爾定律發(fā)展速度放緩,芯片內(nèi)處理單元核心的頻率和性能增長幾乎停滯.為了保證單核心處理單元繼續(xù)維持現(xiàn)有計算能力和面積、功耗水平,傳統(tǒng)處理器芯片設計方法需要將計算核心作為一個單體(monolithic)設計,流水線前后端各邏輯模塊具有極高的耦合度.其中任何一個模塊的設計發(fā)生變化,都會影響其他模塊做出相應修改.同時,為提升處理器芯片整體的計算能力,在單顆芯片內(nèi)部需要集成更多的處理單元.龐大的處理單元數(shù)量使芯片的單體設計架構(gòu)變得越發(fā)復雜,導致處理器芯片的集成度不斷提高.
回顧處理器芯片設計發(fā)展的歷次重大變革(如圖1所示)可以看出,每一次將處理器芯片設計解耦,都會促使芯片設計實現(xiàn)新的跨越式發(fā)展,并催生一種全新的處理器芯片設計模式.例如,將芯片制造環(huán)節(jié)與芯片設計環(huán)節(jié)解耦有效降低處理器設計復雜度,使芯片設計公司專注于架構(gòu)與電路設計,將生產(chǎn)、封裝和測試等環(huán)節(jié)交給專門的代工廠完成,大幅降低公司的運營成本和設計門檻.與之類似,將處理器芯片內(nèi)部邏輯架構(gòu)的處理單元和I/O外設進一步解耦,通過IP核的形式使用戶快速復用已有設計構(gòu)建一個完整的片上系統(tǒng)(system-on-chip,SoC)的方式有利于更多的公司參與處理器芯片設計,形成當下繁榮的芯片設計產(chǎn)業(yè).
Fig.1 Revolutions in design modes of processor chips圖1 歷次處理器芯片設計模式的重大變革
如何降低現(xiàn)有處理器的單體設計耦合度,將若干復雜的緊耦合邏輯單元拆解為粒度更細、邏輯規(guī)模更小、更易于設計的微小單元或模組,有效降低各單元/模組的設計時間、成本及復雜度,并通過高效的方式實現(xiàn)這些松耦合單元/模組的快速組合,從而在保證性能和可靠性的前提下,以更高的敏捷度構(gòu)建完整的松耦合處理器芯片架構(gòu),是解決現(xiàn)有處理器芯片設計復雜度居高不下的有效手段.
現(xiàn)有處理器芯片設計方法屬于以頻率、功耗、面積等性能指標為導向的緊耦合設計方法.本文的目標是實現(xiàn)一種以時間、成本、復雜度等敏捷度指標為導向,并兼顧性能需要的松耦合設計方法.
將緊耦合設計優(yōu)化為松耦合設計,從整體上降低設計復雜度的數(shù)學原理可以從冪次不等式進行解釋.對任意a i≥0,當c≥1時,有以下關系成立:
在n相同的情況下,緊耦合的方法在性能上更好,但復雜度代價很高.松耦合的方法可以大幅降低復雜度、開發(fā)時間與成本,但拆分、組合、系統(tǒng)級驗證的難度變大;同時,要不損失整體性能,必須提高松耦合組件的性能,或者增大n來提升設計擴展性.
將單體設計解耦,降低軟件設計復雜度的方法在軟件工程領域已出現(xiàn)了較多成功案例.傳統(tǒng)系統(tǒng)軟件往往采用面向過程的單體設計模式,通過自頂向下的編程模型,獲得極佳的軟件性能.但是隨著軟件系統(tǒng)規(guī)模的增長,面向過程設計(如操作系統(tǒng)內(nèi)核)復雜度也呈現(xiàn)爆發(fā)式增長,用戶進行維護和擴展都需要花費大量研發(fā)時間和人員投入,大幅降低了軟件系統(tǒng)的易用性.為了應對上述問題,軟件工程領域提出了面向?qū)ο?object-oriented)設計方法,將系統(tǒng)組件功能高度抽象化并封裝基礎軟件類庫(class library),通過添加繼承和多態(tài)性的特性,靈活實現(xiàn)易維護、易復用、易擴展的軟件類對象實例化,從總體上降低各功能組件的耦合程度,滿足日益增長的軟件系統(tǒng)規(guī)模發(fā)展需要.由于摩爾定律帶來的硬件性能持續(xù)提升,面向?qū)ο筌浖O計方法更注重提升開發(fā)敏捷度,往往忽略開銷增大和性能降低等問題,但面向?qū)ο笤O計方法仍使得軟件工程領域得到了迅猛發(fā)展.
可以看出,從面向過程的緊耦合單體軟件系統(tǒng)發(fā)展到面向?qū)ο蟮乃神詈宪浖到y(tǒng)的內(nèi)在驅(qū)動力與處理器芯片進行功能解耦的動機極為相似.因此,如何借鑒面向?qū)ο蟮能浖O計思想,以敏捷度——開發(fā)周期、開發(fā)成本和復雜度為目標,提出全新的面向?qū)ο篌w系結(jié)構(gòu)(object-oriented architecture,OOA),通過涵蓋新型處理器體系結(jié)構(gòu)和芯片的設計語言、設計模式和設計工具,在保證性能和可靠性的前提下,將傳統(tǒng)緊耦合的處理單元結(jié)構(gòu)進一步細粒度解耦并對象化,從而實現(xiàn)易分解、易組合和易擴展的“樂高積木式”處理器芯片敏捷設計方法,如圖2所示.
針對CPU和XPU的設計需求,OOA設計將增加新的抽象描述層次,如圖3所示,簡化現(xiàn)有處理器體系結(jié)構(gòu)的描述難度,主要包括:
1)面向?qū)ο蟮奶幚砥髟O計范式
范式是一系列規(guī)則的集合.面向?qū)ο蟮脑O計原則是在對象層次進行抽象,通過封裝、繼承和多態(tài)等方法將設計解耦,達到分工開發(fā)、測試和復用等敏捷開發(fā)目標.因此,面向?qū)ο蟮奶幚砥髟O計范式是設計一系列規(guī)則,用于定義處理器架構(gòu)的基本描述方法,主要包括:
Fig.2 Main objects of our proposed object-oriented architecture(OOA)圖2 面向?qū)ο篌w系結(jié)構(gòu)(OOA)設計目標
Fig.3 Key technical points of OOA design圖3 面向?qū)ο篌w系結(jié)構(gòu)(OOA)設計方法技術(shù)要點
①組合規(guī)則.定義處理器架構(gòu)中細粒度對象的基本硬件結(jié)構(gòu),包括從性能和資源開銷角度定義對象的粒度,確定對象的接口定義與調(diào)用方式,并設計對象接口的約束檢查.
②交互規(guī)則.定義處理器架構(gòu)中細粒度對象間的繼承和多態(tài)等關系,定義滿足時序約束的對象間硬件交互接口邏輯與信息傳遞方式.
③拆解規(guī)則.定義處理器架構(gòu)中細粒度的對象化描述方法,歸納總結(jié)處理器必要和可選的對象,定義對象之間的控制流與數(shù)據(jù)流.
基于上述規(guī)則,最終形成通用處理器CPU的快速構(gòu)建與專用處理器XPU的智能生成.同時,針對兩類處理器不同的內(nèi)在設計特征,面向?qū)ο蟮脑O計范式設計出發(fā)點也有所不同,主要體現(xiàn)在:
①通用處理器CPU.體系結(jié)構(gòu)解耦及對象化描述語言和抽象方法,降低整體復雜度;實現(xiàn)對象級升級,持續(xù)迭代優(yōu)化,提升性能.
②專用處理器XPU.面向現(xiàn)有領域?qū)S玫膽瞄_發(fā)框架(如深度學習領域的Tensorflow和Caffe等)進行自上而下的設計,通過應用核心算子抽取,實現(xiàn)領域?qū)S锰幚砥骷軜?gòu)及編譯器快速自動生成;同時設計參數(shù)化硬件模板,實現(xiàn)應用-架構(gòu)的跨層次軟硬件協(xié)同優(yōu)化.基于這些方法,用戶可在小規(guī)模修改XPU對應操作系統(tǒng)設備驅(qū)動程序的情況下,使用XPU處理器芯片快速適配現(xiàn)有編程框架,完成領域?qū)S脩脠鼍暗纳疃燃铀?
2)高抽象層次的芯片描述語言
基于處理器體系結(jié)構(gòu)設計范式,面向處理器體系結(jié)構(gòu)設計需求,提升現(xiàn)有處理器描述語言的抽象層次,兼顧硬件性能和開發(fā)效率,并通過連接高層語言和底層硬件的中間表示形式,方便硬件設計的復用與優(yōu)化,同時通過一系列硬件綜合技術(shù)和輔助代碼調(diào)試工具,將體系結(jié)構(gòu)參數(shù)傳遞到設計自動化工具.
3)融合體系結(jié)構(gòu)特征的設計自動化工具
現(xiàn)有處理器設計流程中,底層物理設計是最復雜且耗時最長的一環(huán).現(xiàn)有物理設計過程中無法有效考慮定制化處理器體系結(jié)構(gòu)的特定需求,體系結(jié)構(gòu)設計與物理設計無法有效協(xié)同,整個設計鏈條收斂困難、迭代周期長、無法有效滿足定制化處理器核心芯片不斷縮短的上市時間要求.
因此需要在現(xiàn)有設計流程中引入敏捷物理設計方法與輔助工具,將對象化的處理器體系結(jié)構(gòu)特征傳遞到已有芯片設計自動化(EDA)工具.通過針對體系結(jié)構(gòu)特征參數(shù)空間進行高效的物理設計搜索尋優(yōu),實現(xiàn)在物理設計中融合處理器體系結(jié)構(gòu)信息,支持體系結(jié)構(gòu)設計與物理設計協(xié)同優(yōu)化,快速實現(xiàn)滿足處理器設計要求的芯片物理設計實現(xiàn).
本文后續(xù)將針對上述3個技術(shù)要點,著重梳理當前各領域的主要技術(shù)發(fā)展趨勢,并探討現(xiàn)有處理器設計方法向OOA設計目標轉(zhuǎn)化存在的諸多挑戰(zhàn).
IP核目前主要用于為設計者提供各類總線設備或針對總線協(xié)議的輔助模塊.IP核的靈活性建立在總線協(xié)議這一低耦合的前提下,且粒度較粗.目前尚不能通過IP核的組裝與連接來實現(xiàn)復雜的細粒度控制策略和調(diào)度邏輯.
與傳統(tǒng)面向SoC集成的IP核設計方法不同,面向?qū)ο蟮奶幚砥髟O計范式主要針對處理器微體系結(jié)構(gòu)設計場景.處理器微體系結(jié)構(gòu)中各部件間耦合程度較高,不同的設計方案和架構(gòu)風格兼容性較低,但又需要頻繁修改以探索更高性能或更符合需求的微架構(gòu)實現(xiàn).面向?qū)ο篌w系結(jié)構(gòu)OOA力圖對微架構(gòu)設計場景進行歸納總結(jié),實現(xiàn)對高于門級及低于或等于基礎模塊級的硬件對象和微架構(gòu)中的常見結(jié)構(gòu)進行解耦及封裝,為處理器體系結(jié)構(gòu)設計提供清晰直觀的抽象模型和開發(fā)框架,實現(xiàn)一種靈活的結(jié)構(gòu)定制方法,從而使處理器微體系結(jié)構(gòu)的設計空間探索更加高效且易于維護.
現(xiàn)有通用處理器和專用處理器設計尚未形成OOA的設計方法,但已有部分工作開始關注處理器體系結(jié)構(gòu)的快速構(gòu)建與智能生成.
1)通用處理器CPU快速構(gòu)建
通用處理器自動生成首先在應用定制指令集處理器(application-specific instruction set processors,ASIPs)受到廣泛關注和應用,使用戶可針對特定的應用定制高度優(yōu)化的結(jié)構(gòu)參數(shù)和定制指令[1].典型的ASIP自動化開發(fā)工具包括Tensilica的Xtensa開發(fā)工具集(Xplorer,XCC,XPRES,XTMS,XEnergy)[2]、CoWare的Processor Design、University of Campinas的Arch C[3-4]以及新思科技推出的ASIP Designer[5]等.其中ArchC是一種基于SystemC的開源體系結(jié)構(gòu)描述語言,允許用戶對新的體系結(jié)構(gòu)進行探索和驗證,并生成包括模擬器和協(xié)同驗證接口在內(nèi)的軟件工具鏈;而ASIP Designer則是一套針對領域?qū)S锰幚砥鞯拈_發(fā)流程自動化工具.
其次,現(xiàn)有的通用CPU都是性能為導向的緊耦合設計方法,不同流水線需要提供完全不同的設計.美國加州大學伯克利分校的開源處理器核Rocket-Chip[6]將處理器核按IP粒度進行分解,是一個可自動完成通用處理器核、緩存、互連和完整SoC集成的自動生成框架.然而,Rocket-Chip自動生成框架僅支持順序單發(fā)射流水線.為了實現(xiàn)更為復雜的多發(fā)射亂序流水線,加州大學伯克利分校又不得不重新開發(fā)了BOOM處理器核及自動生成框架[7].與此同時,北卡羅來納州立大學在2011年開發(fā)了FabScalar[8]項目,將處理器流水級進行了封裝.它以一種規(guī)范形式設計超標量處理器,使用戶可便捷快速地設計出不同超標量寬度、流水線深度及用于提取指令級并行性(ILP)的結(jié)構(gòu)大小的處理器.2018年Zhang等人[9]研發(fā)的CMD框架面向通用處理器架構(gòu)設計,約定了一整套各模塊的接口,在內(nèi)部進行迭代,并在Bluespec綜合器指導下修改代碼設定轉(zhuǎn)發(fā)與競爭端口的優(yōu)先級.但CMD框架目前僅支持一種流水線設計,尚不能通過靈活配置擴展支持其他復雜流水線結(jié)構(gòu).
國內(nèi)在通用處理器CPU自動生成框架的研究尚處于起步階段.雖然國內(nèi)學者近年來已設計并實現(xiàn)了眾多基于不同指令集架構(gòu)的通用處理器芯片[10-12],但這些處理器核都基于傳統(tǒng)的Verilog硬件描述語言進行開發(fā),尚不能針對實際應用場景進行體系結(jié)構(gòu)的快速構(gòu)建.中國科學院大學在基于RISC-V指令集架構(gòu)的處理器核敏捷開發(fā)及快速構(gòu)建領域進行了嘗試,使用Chisel語言開發(fā)了單發(fā)射順序流水線結(jié)構(gòu)的NutShell處理器核[13],對處理器核的流水線結(jié)構(gòu)的抽象進行了探索.NutShell處理器核在頂層對經(jīng)典單發(fā)射順序流水線結(jié)構(gòu)進行了抽象,將處理器核的流水線結(jié)構(gòu)進行了封裝,并對部分處理器功能部件進行了封裝,使得處理器的設計更為直觀.但NutShell處理器核僅僅實現(xiàn)了單發(fā)射順序流水線結(jié)構(gòu)[14],尚不能擴展到復雜的處理器流水線結(jié)構(gòu)中.此外,國內(nèi)學者也嘗試面向?qū)S妙I域計算需求的RISC-V指令集架構(gòu)擴展及多核架構(gòu)自動生成等方面的研究工作,支持SHA-3加解密算法[15]及卷積神經(jīng)網(wǎng)絡算法[16-17]的加速.
2)專用處理器XPU智能生成
降低芯片設計門檻并提高芯片設計效率,本質(zhì)上可以大幅度降低芯片設計成本,有助于芯片設計在更加廣闊的領域應用.在這樣的愿景驅(qū)動下,工業(yè)界和學術(shù)界都進行了大量的探索[18-19].
理想的XPU敏捷設計要滿足至少3個方面的特征:1)大幅度降低領域?qū)S肵PU設計門檻,使得領域應用人員能夠用高級語言進行XPU的設計,這樣才能有更多的領域應用受益于XPU的硬件加速和能效提升[20].2)大幅度提高XPU的設計效率,縮短XPU的設計周期,才能有效地降低研發(fā)成本,滿足市場的time-to-market需求.3)要保證XPU的設計質(zhì)量,才能有足夠的性能和能效提升.此外,優(yōu)化的XPU設計才能減少芯片面積開銷,降低流片成本.而目前的通用型的敏捷芯片開發(fā)技術(shù)還遠遠不能滿足這些標準,探索用于領域?qū)S肵PU設計的新方法具有重要的意義.
可以發(fā)現(xiàn),領域應用的計算核心通常都已經(jīng)在通用處理器系統(tǒng)上做了充分的抽象,領域應用的計算核心往往也只有幾個有限的計算模式,這些計算模式具有較強的可重用性[21-22].針對領域應用的這些特點,已經(jīng)有很多專用的XPU設計工作,總體上可以分為3種類型:
1)針對領域應用編程框架的設計方法.其核心思想是重用已有的軟件編程框架來進行硬件加速器設計,來保證硬件加速器能夠無縫地支持領域應用.典型的如針對深度學習加速的自動綜合算法Deep-Burning[23],初步實現(xiàn)了以當前使用較多的Caffe深度學習框架的神經(jīng)網(wǎng)絡模型配置文件為輸入,通過算法引擎自動生成FPGA硬件網(wǎng)表,大幅降低了神經(jīng)網(wǎng)絡處理器的設計周期;針對圖計算加速的工作如Graphicionado[24],FPGP[25],ForeGraph[26],Accu-Graph[27]等都普遍以軟件圖計算框架(gather-applyscatter,GAS)為基礎來進行硬件優(yōu)化[28-29].
2)基于可重構(gòu)硬件模板的加速器設計方法.其核心思想是將應用變換成硬件模板支持的模式,然后重用或者定制可重構(gòu)加速器模板,實現(xiàn)領域應用的加速.典型的硬件模板有用于矩陣運算或者張量運算的二維脈動陣列[30-31],以及用于Stencil計算的一維計算陣列[32].
3)基于領域?qū)S谜Z言(domain specific language,DSL)的自動化設計方法.本質(zhì)上類似于高層次綜合(high level synthesis,HLS),但是由于應用場景往往更加局限于領域應用,因此可以將領域知識一定程度地顯式體現(xiàn)在DSL中,從而使得DSL的描述能夠編譯成更加高效的硬件.典型工作如HalideCL[33-34],主要是利用Halide語言描述圖像類應用,結(jié)合圖像計算中的多層嵌套循環(huán)特點,支持豐富的數(shù)據(jù)切割和并行優(yōu)化,以生成更加高效的硬件設計.
在XPU設計過程中,充分利用領域應用知識,根據(jù)領域應用的特點如計算模式、訪存特點、并行模式等,可以顯著影響XPU的設計門檻、設計效率以及設計質(zhì)量.然而,應用的覆蓋上仍然有很大的局限性,Halide并不能支持圖計算,基于編程框架的方法也難以應用到圖像類應用中去.
從技術(shù)發(fā)展的角度看,面向領域應用的XPU敏捷設計方法,可以大幅度地降低XPU設計門檻并同時顯著提高XPU設計效率.
目前,硬件開發(fā)過程可選擇多種描述方式和綜合流程,但仍缺乏統(tǒng)一標準,使得處理器設計開發(fā)難、復用難.
1)硬件編程語言
為了提高硬件編程效率,學術(shù)界提出了多種硬件編程語言.美國加州伯克利大學于2012年基于Scala語言[35]提出了Chisel[36].康奈爾大學于2014年提出Py MTL[37],該語言是基于Python,支持多層面建模和Python3的一些特性.斯坦福大學于2017年提出的Halide-HLS[38]可以將關于圖像處理的領域?qū)S谜Z言Halide[39]部署到FPGA上.斯坦福大學與加州大學于2020年提出的Aetherling[40]設計了基于Haskell的DSL,用來針對流處理器設計進行數(shù)據(jù)并行加速.工業(yè)界的現(xiàn)有高層次綜合工具大部分試圖將現(xiàn)有的C,Java等語言轉(zhuǎn)化為RTL代碼,另一部分則是設計新的領域?qū)S谜Z言針對特定情況進行優(yōu)化,如Mentor Graphics于2004年發(fā)布的Catapult-C[41];Cadence提供的Stratus HLS[42]工具;Xilinx公司于2011年收購的Vivado HLS[43]和多倫多大學于2011年開發(fā)的Leg Up[44];EPFL于2018年提出的Dynamatic[45];EPFL與帝國理工學院于2020年提出的DSS[46].
SAFL[47]是函數(shù)式硬件綜合的一個研究實例.另一類函數(shù)式硬件設計語言Bluespec最早的原型是Haskell[48]的一個Term-Rewriting-Systems[49]語言擴展,即以純函數(shù)式的范式來描述電路,但是在后續(xù)發(fā)展中衍生出了獨立語言前端,并具有更接近面向?qū)ο笳Z言的特征.Handle-C[50]是C語言的一個超集,提供了語句塊來描述并行的電路邏輯,相比之下另一個C/C++擴展SystemC主要進行系統(tǒng)級的仿真驗證[51].相比基于C語言的擴展,基于C++語言的擴展[52]更能體現(xiàn)面向?qū)ο蟮奶卣?同時,其他具有面向?qū)ο筇卣鞯挠布O計語言,如Kuhn等人設計的獨立面向?qū)ο笳Z言前端[53]、利用Java來進行硬件規(guī)格描述的工作[54],都有效提高了硬件電路的描述效率.但是這些工作并沒有達到可以綜合硬件的程度.Greaves的工作[55]嘗試將SAFL,Handle-C和Bluespec的表達特點都整合到Chisel中,但是不可避免有一定程度的語法開銷,以及需要手動維護的部分,而且缺少真正的后端支持,比如Bluespec的調(diào)度機制仍需要進一步去復原.
2)中間表示形式
中間表示形式(intermediate representation,IR)最初應用于軟件編譯中.近年來,中間語言的產(chǎn)生常常歸因于新編程語言或新編譯器的提出.2003年,LLVM[56]編譯器被提出,它可以將各類源碼統(tǒng)一翻譯成內(nèi)置的LLVM IR.2010年,Mozilla公司提出Rust語言[57]以及MIR的中間表示.2014年,蘋果公司提出了Swift語言[58]及SIL中間表示.2002年,清華大學提出一種層次化的控制數(shù)據(jù)流圖[59],作為軟硬件協(xié)同設計的中間表示.2012年,隨著Chisel語言的提出,作為其專用中間表示的FIRRTL[60]也隨之開發(fā).
3)硬件綜合流程
硬件綜合流程將高級語言表示的硬件代碼進行編譯綜合并生成底層RTL硬件代碼.硬件綜合流程最重要的研究方向之一是高層次綜合流程,將行為級算法描述綜合成硬件實現(xiàn).HLS以循環(huán)和存儲體的推導為主要任務[19],缺少應用面向?qū)ο笏枷氲谋磉_能力.HLS的主要步驟有對輸入程序的編譯、資源分配、指令調(diào)度、代碼與硬件資源的連接等.其他代表性商業(yè)工具有Bambu[61]、Leg Up[44]、Bluespec編譯器[62]、CoDeveloper[63]、Synphony C[64]、Catapult-C[41]等.HLS的其他代表性學術(shù)工作包括:UCLA于2006年提出的AutoPilot[65];Ganesh等人提出的Conservation Cores[66];IBM Research提出的基于Lime語言的Liquid Metal[67];Vernalde等人在C++的基礎上引入類似Open MP的指示原語[52],從而可以從高級語言的描述中推導出硬件結(jié)構(gòu);Kuhn等人[53]設計了e語言來描述硬件規(guī)范.此外還有OO-VHDL[68],一種VHDL的面向?qū)ο笸卣?其發(fā)展?jié)摿梢灶惐认鄬τ兴鶓玫腟ystem Verilog.
基于敏捷硬件設計語言開發(fā)基礎硬件類庫已有一些開源社區(qū)的積累性工作,如1994年起步的由商業(yè)公司支撐的OpenCores[69]和FOSSi組織主導的LibreCores[70].這些社區(qū)也實現(xiàn)了類似高級語言設計的包管理器fusesoc.美國加州大學伯克利分校在處理器敏捷設計語言、基于敏捷設計語言構(gòu)建通用處理器CPU以及面向?qū)ο蟮耐ㄓ锰幚砥黧w系結(jié)構(gòu)的測試和驗證方法等方向進行了大量的探索工作,取得了很多先驅(qū)性的創(chuàng)新成果[6-7,36,71-72].
通過關鍵參數(shù)提取及EDA算法優(yōu)化,可有效提升處理器芯片物理設計效率,縮短芯片物理版圖的生成時間,達到敏捷設計的目標.雖然這些工作目前尚未融合處理器體系結(jié)構(gòu)的特征參數(shù),但仍然對未來EDA工具算法的進一步發(fā)展具有借鑒意義.
1)電路建模仿真的寄生參數(shù)提取
寄生參數(shù)提取是建模仿真的基礎,在物理設計多個階段被調(diào)用,例如估算時延、檢查時延約束[73]或構(gòu)建PDN(供電網(wǎng)絡)等效電路等.寄生參數(shù)提取的主要任務是計算互連線的等效電阻、電容參數(shù),并生成RC網(wǎng)表.隨著工藝的發(fā)展、電路規(guī)模的增大,準確快速計算互連線的電容參數(shù)(即電容提取)是寄生參數(shù)提取工作面臨的主要挑戰(zhàn)[74].為此,文獻[75]提出一種基于隨機行走方法的三維電容場求解器的方法.此方法有很高的準確度,并能夠通過大規(guī)模并行計算進行有效加速[76-77].然而,該方法只適用于關鍵路徑、關鍵模塊等非全芯片規(guī)模的提取任務,其運行時間比模型匹配法慢一兩個數(shù)量級.文獻[78]提出了利用一種宏模型的新型隨機行走電容提取技術(shù),在處理重復版圖結(jié)構(gòu)時可以取得10倍以上的加速.文獻[79]進一步提出了基于有限差分的可靠宏模型建立技術(shù),使得利用宏模型的電容提取準確度更高、更穩(wěn)定.此外,文獻[80]提出了一種基于隨機行走電容提取的保證時延計算準確的線網(wǎng)時延計算方法.
2)電路建模仿真的互連線網(wǎng)絡分析
大規(guī)模電路仿真,無論是大規(guī)模供電網(wǎng)絡的DC分析還是模擬電路的瞬態(tài)分析,都面臨著計算量、內(nèi)存開銷、算法可靠性等方面的挑戰(zhàn).對于納米工藝集成電路,電路節(jié)點數(shù)可以達到億級規(guī)模,高性能的稀疏矩陣直接解法[81]由于過大的內(nèi)存需求往往難以勝任,而一般的迭代解法[82]則很可能出現(xiàn)收斂性的問題,因此工業(yè)界普遍的做法是采用區(qū)域分解法或多重網(wǎng)格法將問題規(guī)模變小[83],同時通過并行計算技術(shù)進行加速.為減小每個子區(qū)域求解的內(nèi)存開銷、提高計算并行度,文獻[84]提出一種基于機器學習的矩陣重排序方法,內(nèi)存消耗可減少30%.文獻[85]找到一種排序使得求解過程中產(chǎn)生的非零元數(shù)目減少20%.
3)物理設計的貝葉斯優(yōu)化
貝葉斯優(yōu)化因其在機器學習算法超參數(shù)優(yōu)化(hyper-parameter optimization)中的成功應用[86-87]而成為近年來機器學習領域的研究熱點.文獻[88]提出基于貝葉斯優(yōu)化的模擬電路設計參數(shù)優(yōu)化策略.貝葉斯優(yōu)化等基于代理模型的優(yōu)化方法在連續(xù)變量的優(yōu)化領域已經(jīng)顯示出巨大優(yōu)勢[89-91].但是,電路優(yōu)化等諸多領域存在著大量離散的整數(shù)變量,而大部分代理模型無法有效解決此類問題.
4)物理設計的布局布線
作為芯片物理設計的核心環(huán)節(jié),國內(nèi)外專家早在20世紀60年代就開始研究芯片物理布局問題[92].到了20世紀80年代,隨機優(yōu)化方法特別是模擬退火法的提出為高質(zhì)量的物理布局生成提供了可能[93-95].但上述方法計算代價高昂,無法有效支撐日益復雜的電路設計.20世紀90年代開始興起的分級區(qū)域分解法[96-97]、force-directed方法[98]、非線性優(yōu)化方法[99-100],以及最近十年興起的二次優(yōu)化方法[101-103]與electrostatics-based的方法[104],是物理布局研究工作中比較具有代表性的工作.物理布線過程(全局布線與詳細布線)復雜耗時,針對物理布線精準的可布性建模與分析是提升物理設計效率的關鍵.文獻[105]研究基于深度神經(jīng)網(wǎng)絡的可布性分析方法.文獻[106]提出一種基于監(jiān)督學習的可布性預測模型.文獻[107]提出一種基于物理布局中邏輯單元管腳密度分布的預測局部布線擁堵熱點的方法.
如何基于EDA設計優(yōu)化算法,構(gòu)建完整的開源EDA工具鏈是近年來備受關注的研究熱點.目前已有4個項目重點關注開源EDA工具鏈生態(tài):美國的OpenROAD項目[108]依托DARPA的電子復興計劃,目標是研究開源EDA工具鏈和芯片敏捷開發(fā)方法,將芯片的設計周期和成本降低1~2個數(shù)量級;Qflow社區(qū)項目[109]是起步最早的開源EDA工具鏈;印度的VSDFlow項目[110]起源于教學項目,是基于Qflow進行改進的開源EDA工具鏈;學術(shù)界廣泛參與的DATC RDF項目[111]由EDA領域頗具影響力的組織CEDA(Council on Electronic Design Automation)發(fā)起,目標是為EDA技術(shù)方案驗證提供較好的工具支撐.北京大學高能效計算與應用中心(CECA)聯(lián)合南京集成電路設計服務產(chǎn)業(yè)創(chuàng)新中心、中國科學院計算技術(shù)研究所等單位,也于2019年發(fā)起OpenBELT開源EDA框架.
開源EDA工具鏈為處理器芯片敏捷設計提供了必要的工具支持,并可結(jié)合面向?qū)ο蟮奶幚砥黧w系結(jié)構(gòu)設計和組件類庫等,支撐處理器芯片從RTL到GDS的全流程設計和流片驗證,是保證處理器設計快速迭代和降低芯片設計門檻的重要基礎.同時,模塊化和可擴展性強的開源EDA工具鏈也為研究處理器快速構(gòu)建、處理器敏捷設計語言、綜合工具和數(shù)據(jù)驅(qū)動的處理器敏捷物理設計等提供了良好的實驗平臺支撐.例如,可在芯片體系結(jié)構(gòu)設計中引入部分特性(如指導語句等),以供物理設計工具識別并進行相應優(yōu)化,并指導物理設計階段快速達成更優(yōu)的芯片性能、面積和功耗.最后,以開源EDA為抓手,輔以高質(zhì)量軟件開發(fā)流程和開源社區(qū)協(xié)作方法,可將處理器芯片敏捷設計相關的技術(shù)和方法轉(zhuǎn)化到開源EDA工具中,最終形成完整的系統(tǒng)性的芯片敏捷設計解決方案.
因其基礎性和平臺性,構(gòu)建開源EDA工具鏈是一個復雜的系統(tǒng)工程,這體現(xiàn)在問題拆解和抽象、關鍵問題定義、整體框架設計、具體問題優(yōu)化和工程實現(xiàn)等多個方面.同時,為提升開源EDA工具鏈的性能、更好地支持處理器芯片敏捷設計,EDA算法與機器學習、數(shù)值計算、運籌優(yōu)化和高性能計算等方向的交叉和優(yōu)化,也為開源EDA工具鏈的整體設計和實現(xiàn)提出了巨大挑戰(zhàn).
通過本文的分析可以看出,處理器芯片的設計語言、設計工具和體系結(jié)構(gòu)設計方法雖已取得極大突破,但與最終實現(xiàn)基于面向?qū)ο篌w系結(jié)構(gòu)OOA的敏捷設計方法相比,仍存在較多尚未解決的挑戰(zhàn)和關鍵問題,主要包括:
1)如何實現(xiàn)處理器功能與結(jié)構(gòu)的細粒度解耦?
面向?qū)ο篌w系結(jié)構(gòu)設計方法的核心是將處理器內(nèi)部功能和結(jié)構(gòu)按設計需求,實現(xiàn)細粒度功能部件解耦,抽象出一系列可分解、可組合與可擴展的體系結(jié)構(gòu)功能組件.
針對通用處理器CPU,需要重點考慮4個問題:①考慮如何把握對象分解的粒度,兼顧各硬件對象的實現(xiàn)復雜度和組合后對性能的影響.②需探索如何實現(xiàn)適應各種不同處理器流水線的通用設計模板,兼顧不同流水線功能和結(jié)構(gòu)差異.③要思考如何根據(jù)設計目標和性能及面積約束,有效限制架構(gòu)組合的搜索邊界.④在架構(gòu)分解的過程中,需充分考慮如何抽取關鍵體系結(jié)構(gòu)參數(shù)及行為,形成面向?qū)ο蟮拿艚菪问交炞C方法.
針對專用處理器XPU,其性能潛力往往依賴于領域應用中高頻操作的劃分粒度和劃分方式,如何從龐大的任務劃分空間中探究專用處理器的性能加速上限,并找到面向應用的自動化任務分割與重用方法是第一個重要科學問題.其次,現(xiàn)有的模板化加速器設計方法往往與領域應用知識緊密耦合,如何對加速器硬件模板進行預設計,平衡硬件模板的專用性與通用性,從而同時滿足加速效率與應用覆蓋率的要求,是亟待解決的科學問題.最后,領域應用的專業(yè)知識和加速器設計存在巨大的鴻溝,缺少高效的協(xié)同方法來同時優(yōu)化加速器設計參數(shù)與領域應用的編譯選項,針對跨層設計的巨大且離散的設計空間進行自動優(yōu)化也是一個重要的科學問題.
此外,面向?qū)ο蟮募毩6确纸夥椒ㄒ矔ΜF(xiàn)有的處理器開發(fā)模式及仿真驗證環(huán)境產(chǎn)生影響.細粒度解耦方法會產(chǎn)生海量的處理器體系結(jié)構(gòu)模組,并可能由眾多研發(fā)團隊分布式協(xié)同開發(fā),從而與互聯(lián)網(wǎng)軟件的開發(fā)模式具有極為相似的特征.每個團隊搭建私有的開發(fā)仿真驗證環(huán)境會帶來維護開銷大、設計難以同步、迭代收斂速度慢等問題.因此,如何借鑒現(xiàn)有互聯(lián)網(wǎng)軟件開發(fā)的Dev Ops(Development和Operations的組合詞)思想,通過構(gòu)建基于云計算的開發(fā)服務平臺和公共仿真驗證環(huán)境,促進不同團隊代碼開發(fā)、合并集成和驗證測試管理等多個階段的溝通、協(xié)作與整合,形成面向?qū)ο蟮奶幚砥鏖_發(fā)“眾包模式”,是應對未來海量細粒度對象模組的潛在有效開發(fā)方法.
2)如何實現(xiàn)面向?qū)ο蟮奶幚砥髟O計高層抽象?
對處理器設計進行抽象依賴于硬件設計語言.但現(xiàn)有硬件描述語言仍無法為處理器設計提供敏捷易用的高層次抽象.①傳統(tǒng)硬件描述語言(如Verilog HDL等)、新型硬件構(gòu)造語言(如Chisel,Py MTL等)以及使用C/C++描述的高層次綜合語言由于語義上的鴻溝,尚無法兼顧處理器開發(fā)效率與硬件性能.②現(xiàn)有處理器硬件設計語言缺乏統(tǒng)一中間表示形式,還無法成為連接前端處理器設計語言和后端硬件結(jié)構(gòu)的橋梁,不易于硬件設計的復用與優(yōu)化.③不同層次和行為的硬件描述語言的編譯流程千差萬別,導致現(xiàn)有硬件綜合流程難以兼容不同層次和不同行為的語言,且不易于調(diào)試.
3)如何在設計自動化工具中深度融合體系結(jié)構(gòu)特征?
以應用驅(qū)動的定制化專用處理器芯片,面臨體系結(jié)構(gòu)復雜、電路規(guī)模龐大、制造工藝復雜等諸多問題.作為芯片設計過程中最復雜的階段之一,物理設計耗時、迭代收斂難度巨大.現(xiàn)有處理器芯片設計流程冗長、復雜,上層體系結(jié)構(gòu)的設計與芯片底層物理設計是獨立的環(huán)節(jié).體系結(jié)構(gòu)設計過程中無法有效考慮體系結(jié)構(gòu)變化所引發(fā)的芯片物理實現(xiàn)中性能指標參數(shù)的影響,導致芯片設計迭代次數(shù)多、收斂難度大.另一方面,由于體系結(jié)構(gòu)特征的缺失,體系結(jié)構(gòu)的變動往往導致物理設計迭代從零開始,無法實現(xiàn)高效的設計遷移,迭代代價巨大.因此如何通過在物理設計中引入體系結(jié)構(gòu)的特征信息是實現(xiàn)敏捷物理設計流程的關鍵環(huán)節(jié).基于本文提出的OOA處理器敏捷設計方法,體系結(jié)構(gòu)設計在對象級的改變,有望傳遞給后端物理設計進行快速增量式優(yōu)化;同時,物理設計在對象級的性能參數(shù)評估,也可以傳遞給體系結(jié)構(gòu)做早期的處理器設計空間探索,從而可以驅(qū)動體系結(jié)構(gòu)設計與物理設計的協(xié)同推進,逐步實現(xiàn)處理器芯片端到端全自動化流程的敏捷設計.
人工智能在集成電路EDA領域的價值與潛力已成為業(yè)界的共識.人工智能技術(shù)在EDA的各個關鍵環(huán)節(jié),特別是建模仿真與設計優(yōu)化環(huán)節(jié),正在引發(fā)顛覆式創(chuàng)新.如何充分利用人工智能方法,是實現(xiàn)體系結(jié)構(gòu)特征與EDA工具深度融合的重要手段.首先,在體系結(jié)構(gòu)與微體系結(jié)構(gòu)特征提取等研究領域,人工智能方法已在處理器設計參數(shù)優(yōu)化、性能預測、編譯優(yōu)化過程中起到重要作用.針對OOA設計方法的特點,在處理器芯片的體系結(jié)構(gòu)設計流程中,使用人工智能技術(shù)輔助通用處理器CPU的關鍵架構(gòu)特征抽取、縮減OOA體系結(jié)構(gòu)設計探索空間加速設計收斂是實現(xiàn)OOA敏捷設計的關鍵;同時,如何使用深度增強學習、生成模型以及Auto ML等新興人工智能技術(shù),實現(xiàn)更為激進的“端到端”體系結(jié)構(gòu)特征提取與設計方法,也成為影響專用處理器芯片XPU設計成敗的關鍵.其次,如何基于人工智能技術(shù),在芯片設計各階段EDA工具中融合體系結(jié)構(gòu)特征,最終實現(xiàn)“無人參與閉環(huán)”的處理器芯片智能設計與敏捷設計,也是未來EDA方法與工具亟待突破的重點.
如何突破現(xiàn)有處理器設計方法的壁壘,在保證性能和可靠性的前提下,降低通用處理器CPU設計復雜性、成本和設計門檻并有效應對專用處理器XPU場景多樣性并縮短設計周期,是破解CPU和XPU處理器芯片設計難題的關鍵.本文提出一種面向?qū)ο筇幚砥黧w系結(jié)構(gòu)OOA,力圖形成以降低時間、成本和復雜度為主要導向的處理器芯片敏捷設計新方法.本文針對OOA所涵蓋的設計范式、設計語言及設計工具,對目前處理器體系結(jié)構(gòu)快速構(gòu)建與生成、處理器敏捷設計語言及敏捷EDA設計工具等研究現(xiàn)狀進行梳理,并對未來實現(xiàn)OOA設計方法可能面臨的技術(shù)挑戰(zhàn)進行分析.作為一個跨學科問題,處理器芯片能否在新的OOA設計范式之下,大幅降低芯片設計的技術(shù)門檻,需要相關領域?qū)W者共同探索,一起促進處理器芯片生態(tài)的良性發(fā)展.