任何科學(xué)技術(shù)的發(fā)展和進(jìn)步都離不開兩個(gè)主要的推動(dòng)力量,一個(gè)是相關(guān)領(lǐng)域各大公司的研發(fā),另一個(gè)就是各大高校與科研院所的科學(xué)研究。這兩者往往是相互補(bǔ)充、相互促進(jìn)的關(guān)系,既能涵蓋短期的實(shí)用性研究,又有長期技術(shù)難題的攻關(guān)與突破。
這樣的技術(shù)發(fā)展模式,FPGA 行業(yè)也不例外。除了英特爾、賽靈思等大公司的研發(fā)投入之外,世界上各大頂尖高校對(duì)于 FPGA 的研究也在不斷幫助 FPGA 技術(shù)取得新的成就。
在諸多決定著 FPGA 技術(shù)發(fā)展的新成就里,那些最為突出的成果,也就是所謂的“皇冠上的明珠”,都會(huì)集中發(fā)表在一年一度的“FPGA 國際研討會(huì)”上(簡稱 ISFPGA)。從 1993 年舉辦至今,ISFPGA 一直是 FPGA 領(lǐng)域的旗艦級(jí)頂會(huì),沒有之一。在 ISFPGA 上發(fā)表的文章,都代表著 FPGA 最前沿和最優(yōu)秀的研究成果,也被業(yè)界人士看成是預(yù)測 FPGA 今后發(fā)展方向的風(fēng)向標(biāo)。
在 2019 年 2 月結(jié)束的 ISFPGA 會(huì)議上,再一次涌現(xiàn)出了諸多嶄新的研究成果。從整體上看,業(yè)界的研究方向主要集中在兩個(gè)方面:
一個(gè)是和人工智能和機(jī)器學(xué)習(xí)相關(guān)的各個(gè)領(lǐng)域,比如 FPGA 微架構(gòu)、FPGA 編程工具與編程語言,以及 FPGA 在 AI 的各種應(yīng)用等。
另一個(gè)是 FPGA 的高層次綜合(High-Level Synthesis,HLS),也就是使用高層語言,如 C++/OpenCL/Python 等,對(duì) FPGA 進(jìn)行有效的編程和使用。
其中,這屆會(huì)議中與 AI 相關(guān)的文章有 8 篇,與高層次綜合相關(guān)的文章有 6 篇,占會(huì)議接收的全部 24 篇論文的超過一半。
老石在之前詳細(xì)介紹過賽靈思在這次會(huì)議上發(fā)表的有關(guān) ACAP 架構(gòu)的論文。在今天的這篇文章中,老石又挑選了另外五篇具有代表性的論文,為各位逐一點(diǎn)評(píng)和解析。同時(shí),我也會(huì)簡單介紹論文主要作者的背景和代表性研究,方便各位把握當(dāng)前最新的 FPGA 發(fā)展動(dòng)態(tài)。
欲查看本文介紹的這幾篇論文全文,請?jiān)?ldquo;老石談芯”后臺(tái)回復(fù)“FPGA 論文”。
1
FPGA 微架構(gòu):低精度乘加單元
一句話總結(jié)
隨著軟硬件技術(shù)的不斷發(fā)展,DNN 算力的瓶頸已逐漸從內(nèi)存帶寬轉(zhuǎn)向乘加(MAC)操作效率,因此本文提出了面向英特爾 FPGA 的全新低精度乘加單元微架構(gòu)。
對(duì)行業(yè)發(fā)展的影響和意義
顯著提升了 FPGA 低精度乘加操作的性能與資源利用率,是針對(duì) DNN 應(yīng)用的“殺手級(jí)”微架構(gòu)創(chuàng)新。提出的新架構(gòu)專為英特爾 FPGA 設(shè)計(jì),預(yù)計(jì)會(huì)帶來巨大的競爭優(yōu)勢。
技術(shù)細(xì)節(jié)
本論文來自多倫多大學(xué)的 Vaughn Betz 課題組。多倫多大學(xué)的 FPGA 研究一直被公認(rèn)是世界頂尖水平,歸功于這里的一群大牛教授,比如 Jonathan Rose, Vaughn Betz, Jason Anderson, Paul Chow 等。他們的研究基本涵蓋了 FPGA 的各個(gè)層面,包括架構(gòu)、工具、應(yīng)用等各個(gè)領(lǐng)域。
他們很多人都曾經(jīng)擔(dān)任過 FPGA 公司高管,有多年的工業(yè)界一線研發(fā)經(jīng)歷,轉(zhuǎn)向?qū)W術(shù)界后仍然與工業(yè)界結(jié)合非常緊密,這使得他們的研究有著極強(qiáng)的實(shí)用性,對(duì)于 FPGA 行業(yè)發(fā)展有著很重要的推動(dòng)作用。
這篇論文研究的大背景,是當(dāng)前在 DNN 中使用低精度算術(shù)運(yùn)算可以取得極大的性能提升。DNN 中的兩類核心算法:CNN 和 LSTM,都可以在很大程度上受益于低精度的乘加運(yùn)算。為了實(shí)現(xiàn)這種低精度的 DNN 數(shù)據(jù)通路,F(xiàn)PGA 往往是超越 CPU 和 GPU 的第一選擇,因?yàn)樗陟`活性和性能等方面有著很好的平衡。例如,微軟的腦波項(xiàng)目就使用了自定義的低精度(8~9 位)浮點(diǎn)數(shù)表示。
另一方面,作者指出隨著 FPGA 器件和云端部署等技術(shù)的發(fā)展,內(nèi)存帶寬已經(jīng)逐漸不再是 DNN 的算力瓶頸,取而代之的是單周期可以完成的乘加操作數(shù)量,這其實(shí)是一個(gè)非常新穎的觀點(diǎn)。
作者發(fā)現(xiàn),傳統(tǒng)的 FPGA 架構(gòu)在執(zhí)行乘加操作時(shí),會(huì)浪費(fèi)大量邏輯資源,進(jìn)而導(dǎo)致性能無法達(dá)到最優(yōu)。因此本文提出了三種針對(duì)英特爾 Stratix 10 FPGA 的微架構(gòu)創(chuàng)新,以提升 DNN 里乘加操作的性能和資源使用率。例如,一種方法是在傳統(tǒng) ALM 結(jié)構(gòu)里增加一條額外的進(jìn)位鏈,如下圖所示。這樣避免了使用多余的 ALM 完成最后一級(jí)加法操作,從而節(jié)省了邏輯資源,也減少了 ALM 間的傳輸延時(shí)。
使用這種方法,乘加操作的平均延時(shí)會(huì)縮短 21%,乘加單元的面積會(huì)減小 35%。文中提出的另外兩種微架構(gòu)在這里不再詳述,這篇文章的文筆很棒,可讀性很強(qiáng),推薦有興趣的讀者看看。
2
名為 HetroCL 的可重構(gòu)計(jì)算編程語言框架
一句話總結(jié)
基于 Python 的 FPGA 編程模型與編譯工具,為 DNN 應(yīng)用而優(yōu)化。
對(duì)行業(yè)發(fā)展的影響和意義
降低了 FPGA 的編程難度,有效解決了一些當(dāng)前高層次綜合存在的問題與痛點(diǎn)。相比傳統(tǒng)的 FPGA 開發(fā)與編程模型,這個(gè)新提出的名為 HetroCL 的領(lǐng)域?qū)S谜Z言和編程框架兼顧了性能與開發(fā)效率,使開發(fā)者可以專注于算法實(shí)現(xiàn),而無需考慮 FPGA 底層邏輯的實(shí)現(xiàn)與優(yōu)化。
技術(shù)細(xì)節(jié)
這篇文章由康奈爾大學(xué)的張志如副教授、以及 UCLA 的叢京生教授及兩位的團(tuán)隊(duì)合作完成,并獲得了本次大會(huì)的最佳論文獎(jiǎng)。這兩位也是 FPGA 領(lǐng)域的頂級(jí)學(xué)者,主要專注于 FPGA 的高層次綜合等領(lǐng)域,而叢教授也是張教授的博士導(dǎo)師。在博士研究期間,二人創(chuàng)辦了 AutoESL 公司,并隨后被賽靈思收購,其主要軟件產(chǎn)品也正是賽靈思 Vivado HLS 的前身。
FPGA 的高層次綜合(High-Level Synthesis)指的是將諸如 C++、OpenCL 等高層語言,通過特定編譯工具直接轉(zhuǎn)化成 FPGA 上可以運(yùn)行的硬件代碼。有關(guān) HLS 的研究一直是學(xué)術(shù)界和工業(yè)界的研究熱點(diǎn),英特爾和賽靈思都有各自的 HLS 工具和開發(fā)套件。
然而,使用 HLS 并沒有想象中那么簡單。雖然算法和模型可以使用高層語言編寫,但為了達(dá)到最優(yōu)的硬件性能,開發(fā)者仍然需要清楚的了解底層 FPGA 的硬件架構(gòu),并通過特殊的預(yù)處理指令指導(dǎo) HLS 編譯器生成期望的硬件結(jié)構(gòu)。這也使得 HLS 在很多時(shí)候并沒有體現(xiàn)出它的便利性優(yōu)勢。
例如,一個(gè)簡單的點(diǎn)積函數(shù)的 HLS 描述如下圖所示,可以看到算法部分包含很多與底層硬件相關(guān)的#pragma,用以指導(dǎo)特定的編譯器行為,嚴(yán)重影響開發(fā)效率與代碼可讀性。
為了解決這個(gè)問題,這篇論文提出了一種基于 Python 的領(lǐng)域?qū)S谜Z言(Domain Specific Language),名為 HeteroCL。它的最主要特點(diǎn)是能將算法描述與底層硬件結(jié)構(gòu)進(jìn)行完全解耦,使得算法設(shè)計(jì)師不需要關(guān)心底層硬件的數(shù)據(jù)類型、計(jì)算單元實(shí)現(xiàn)以及存儲(chǔ)器架構(gòu)優(yōu)化等,如下圖所示。
關(guān)于 HeteroCL 的語法和語義在這里不再詳述,有興趣的讀者可以在老石談芯后臺(tái)回復(fù)“FPGA 論文”自行查閱論文原文。
3
使用 P4 語言編程 FPGA
一句話總結(jié)
使用高層語言“P4”構(gòu)建網(wǎng)絡(luò)算法和應(yīng)用,并直接映射到 FPGA 上執(zhí)行。
對(duì)行業(yè)發(fā)展的影響和意義
這是一種快速開發(fā) FPGA 的新方法。與基于 RTL 的傳統(tǒng) FPGA 開發(fā)方法、以及基于 C/C++的高層次綜合 HLS 相比,這種方法在性能和靈活性達(dá)到了很好的平衡。P4 適用于諸如網(wǎng)絡(luò)數(shù)據(jù)包處理等算法和應(yīng)用,使用者不需要掌握 Verilog 或 VHDL 等硬件描述語言,就可以快速完成網(wǎng)絡(luò)算法的建模與 FPGA 硬件實(shí)現(xiàn)。
技術(shù)細(xì)節(jié)
這篇論文的作者來自斯坦福大學(xué)、賽靈思和劍橋大學(xué),作者之一的 Nick McKeown 教授就是 P4 語言的發(fā)明者。這篇論文主要介紹了如何使用 P4 編寫計(jì)算機(jī)網(wǎng)絡(luò)算法,并如何通過新提出的軟件工具將其自動(dòng)映射到 FPGA 上。
P4 語言的全名為“Programming Protocol-independent Packet Processors”。與 C/C++/Python 等通用語言不同,P4 是一種領(lǐng)域?qū)S谜Z言,主要被設(shè)計(jì)用來描述各類網(wǎng)絡(luò)算法與應(yīng)用,如數(shù)據(jù)包處理、分類、查找、路由等等。顧名思義,P4 語言的主要設(shè)計(jì)目標(biāo)有以下三點(diǎn):
協(xié)議無關(guān):即 P4 語言及其底層硬件可以支持各類網(wǎng)絡(luò)協(xié)議
現(xiàn)場可編程:即部署后仍然具有可編程能力
可擴(kuò)展:即 P4 可以在多種硬件平臺(tái)上使用
與 ASIC 相比,F(xiàn)PGA 在性能上有著大約一個(gè)量級(jí)的差距。即便如此,F(xiàn)PGA 有著很好的靈活性,能夠?qū)崿F(xiàn)多種網(wǎng)絡(luò)算法并在其中靈活切換,因此被廣泛用于網(wǎng)絡(luò)數(shù)據(jù)處理的場合,例如之前講過的智能網(wǎng)卡等等。
然而,F(xiàn)PGA 對(duì)于非硬件工程師而言有著很大的開發(fā)難度,因此使用 P4 這種領(lǐng)域?qū)S谜Z言進(jìn)行 FPGA 的高層次開發(fā)就成了十分自然的考慮。
這篇論文提出的開發(fā)流程如下圖所示。簡單來說,就是將 P4 程序,借助賽靈思的 P4 和 SDNet 編譯器生成底層的 Verilog 模塊,然后映射到名為“NetFPGA”的參考設(shè)計(jì)上。
在生成 Verilog 模塊的過程中,使用了定義好的模塊庫和元組。因此這種方法本質(zhì)上是一種 FPGA 虛擬化方法,即在 FPGA 底層硬件之上,增加了一層虛擬的模塊層,并可以通過 P4 語言直接映射。
4
將 DNN 模型映射到 FPGA 云的開源架構(gòu)
一句話總結(jié)
一個(gè)開源的工具鏈,用于將訓(xùn)練完成的 CNN 模型映射到亞馬遜 AWS FPGA 云服務(wù)上運(yùn)行。
對(duì)行業(yè)發(fā)展的影響和意義
這篇論文與微軟腦波項(xiàng)目(Project Brainwave)完成的工作非常類似,不同之處在于采用了高層次綜合 HLS 的方法,針對(duì)公有云的 FPGA 服務(wù),并且開源。因此為從事云端 DNN 加速研究的相關(guān)人員和機(jī)構(gòu)提供了應(yīng)用平臺(tái)與經(jīng)驗(yàn)借鑒。
技術(shù)細(xì)節(jié)
這篇論文的作者來自新加坡和美國伊利諾伊厄巴納 - 香檳分校(UIUC),作者之一來自 UIUC 的陳德銘教授是硬件加速器研究領(lǐng)域的知名學(xué)者。
這篇論文與微軟腦波項(xiàng)目完成的目標(biāo)非常類似,只是實(shí)現(xiàn)方法有所不同。老石之前介紹過,腦波項(xiàng)目將訓(xùn)練好的 DNN 模型轉(zhuǎn)化成數(shù)據(jù)流圖表示,然后根據(jù)單一 FPGA 的資源情況,對(duì)數(shù)據(jù)流圖進(jìn)行拆分,并映射到 FPGA 的軟核 NPU 上。
在這篇論文中,直接使用 HLS 工具對(duì) DNN 模型進(jìn)行綜合,見下圖,這在很大程度上減少了開發(fā)的難度,但與腦波方案相比,不可避免的會(huì)有較大的性能差距。同時(shí),這個(gè)工作只支持 Caffe,而不支持其他 DNN 框架。
在腦波項(xiàng)目中,F(xiàn)PGA 基礎(chǔ)架構(gòu)是源于 Catapult 項(xiàng)目的大規(guī)模 FPGA 互聯(lián)和資源池,而本論文主要面向的是亞馬遜 AWS-F1 實(shí)例的 FPGA 公有云。這樣的好處是能為廣大 AWS 開發(fā)者或其他希望進(jìn)行 FPGA DNN 加速的用戶提供參考平臺(tái)和經(jīng)驗(yàn)借鑒,但同樣的也會(huì)有明顯的性能限制。
相比 CPU 而言,使用 FPGA 對(duì) DNN 進(jìn)行硬件加速仍然可以取得可觀的性能提升。比如在這篇論文中,針對(duì)不同的 DNN 模型,使用 FPGA 可以取得 47 倍~104 倍的加速性能。
5
多線程代碼的高層次綜合工具:EASY
一句話總結(jié)
使用形式化(formal)方法,有效減少高層次綜合多線程代碼時(shí)使用的內(nèi)存仲裁器數(shù)量與邏輯復(fù)雜度。
對(duì)行業(yè)發(fā)展的影響和意義
極大的提高了 FPGA 的高層次綜合工具的性能,尤其是對(duì)多線程代碼有了更好的支持。
技術(shù)細(xì)節(jié)
這篇論文由倫敦帝國理工大學(xué)的 George Constantinides 教授團(tuán)隊(duì)和多倫多大學(xué)的 Jason Anderson 教授團(tuán)隊(duì)合作完成。這兩位都是 FPGA 學(xué)術(shù)界鼎鼎大名的人物,George Constantinides 有著很深的數(shù)學(xué)功底,研究方向主要集中在針對(duì) FPGA 內(nèi)存優(yōu)化的高層次綜合,以及和數(shù)學(xué)相關(guān)的 FPGA 字長優(yōu)化,還有近年興起的近似計(jì)算等領(lǐng)域。
帝國理工大學(xué)在 FPGA 研究領(lǐng)域也處于世界頂尖水平,除了 George 之外,還有 Peter Cheung 和 Wayne Luk 兩位華裔教授,這兩位對(duì)于現(xiàn)代 FPGA 技術(shù)的發(fā)展做出了舉足輕重的貢獻(xiàn),本文不再展開。
這篇論文研究的主要問題是,當(dāng)對(duì)多線程代碼進(jìn)行 FPGA 的高層次綜合時(shí),多個(gè)線程之間對(duì)內(nèi)存的讀寫需要額外的仲裁機(jī)制,這主要用來判斷某塊內(nèi)存會(huì)被哪些線程所訪問。而這個(gè)仲裁機(jī)制在硬件實(shí)現(xiàn)上會(huì)有很大的額外開銷,對(duì)性能也有很大的消極影響,如下圖所示。
不過作者注意到,線程往往不會(huì)訪問所有內(nèi)存塊,因此很多情況下仲裁器不需要支持全部的線程 - 內(nèi)存塊映射,這樣就大大減少了仲裁器的邏輯復(fù)雜度,從而提高了系統(tǒng)性能。
為了判斷某個(gè)線程是否會(huì)訪問某個(gè)內(nèi)存塊,作者使用了形式化方法,通過將多線程代碼轉(zhuǎn)換成一種單線程的形式化描述語言 Boogie,并通過形式化工具證明某個(gè)線程與內(nèi)存塊的訪問關(guān)系,這樣就能完全確定仲裁器需要支持的線程與內(nèi)存塊的映射。
這個(gè)思路十分簡潔但有效,它的完整流程圖如下圖所示。這篇文章使用這種方法取得了高達(dá) 39%的性能提升,以及高達(dá) 87%的面積縮減。
6
結(jié)語
展望 2019 年 FPGA 技術(shù)的發(fā)展趨勢,人工智能與高層次綜合必將是兩大值得關(guān)注的重點(diǎn)領(lǐng)域。隨著新技術(shù)的不斷涌現(xiàn),F(xiàn)PGA 的易用性和性能都將得到極大提升。在這其中,人工智能和數(shù)據(jù)中心將會(huì)是老石持續(xù)關(guān)注的重中之重。
閱讀全文