利用FPGA虛擬化突破時(shí)空限制
在傳統(tǒng)的FPGA開(kāi)發(fā)模型中,使用者通常使用硬件描述語(yǔ)言(HDL)對(duì)應(yīng)用場(chǎng)景進(jìn)行建模,然后通過(guò)特定的FPGA開(kāi)發(fā)工具將硬件模型映射到FPGA上,最終生成可以運(yùn)行的FPGA映像。
這種開(kāi)發(fā)模式的另外一個(gè)主要缺點(diǎn)是,F(xiàn)PGA只能由單一用戶(hù)開(kāi)發(fā)和使用,而與應(yīng)用場(chǎng)景、FPGA的產(chǎn)品種類(lèi)等無(wú)關(guān)。比如對(duì)于一個(gè)對(duì)資源需求不大、而且不需要連續(xù)運(yùn)行的應(yīng)用而言,大部分FPGA的硬件資源在大部分時(shí)間內(nèi)都會(huì)閑置。很顯然,這樣很難在時(shí)空范圍內(nèi)對(duì)FPGA進(jìn)行充分利用,見(jiàn)下圖。
為了提高FPGA的開(kāi)發(fā)效率、更好的利用FPGA的邏輯資源、方便FPGA的大規(guī)模部署和應(yīng)用,需要將FPGA進(jìn)行一定程度的邏輯抽象,使頂層用戶(hù)不必太多關(guān)注于FPGA硬件邏輯的實(shí)現(xiàn)方式與細(xì)節(jié)。由此,F(xiàn)PGA虛擬化技術(shù)就應(yīng)運(yùn)而生。
可以說(shuō),F(xiàn)PGA虛擬化技術(shù)打破了時(shí)間和空間維度的限制,使用戶(hù)能夠輕松的在不同時(shí)間,對(duì)多個(gè)FPGA的各類(lèi)資源進(jìn)行充分的調(diào)度與使用,見(jiàn)上圖。
FPGA虛擬化技術(shù)目前仍在發(fā)展初期,是工業(yè)界和學(xué)術(shù)界研究的熱點(diǎn)。在本文中將介紹三種主流的FPGA虛擬化技術(shù)的實(shí)現(xiàn)方法:
FPGA Overlay
部分重構(gòu)與虛擬化管理器
FPGA資源池與虛擬化框架
FPGA Overlay
Overlay本意是覆蓋或疊加,它在網(wǎng)絡(luò)技術(shù)里是一種構(gòu)建虛擬邏輯網(wǎng)絡(luò)的方法。它的實(shí)現(xiàn)方法通常是在物理網(wǎng)絡(luò)架構(gòu)的基礎(chǔ)上,增加一層虛擬的網(wǎng)絡(luò)平面,使得上層應(yīng)用與底層物理網(wǎng)絡(luò)相分離。這個(gè)虛擬的網(wǎng)絡(luò)平面本質(zhì)上可以通過(guò)隧道封裝技術(shù)實(shí)現(xiàn),在數(shù)據(jù)中心網(wǎng)絡(luò)中常用的VxLAN就是Overlay的主流標(biāo)準(zhǔn)之一。
Overlay中增加虛擬層次的方法與本章開(kāi)頭給出的FPGA虛擬化方法非常類(lèi)似。事實(shí)上,F(xiàn)PGA Overlay可以說(shuō)是目前應(yīng)用最廣泛的FPGA虛擬化方法之一。和網(wǎng)絡(luò)技術(shù)相似,F(xiàn)PGA Overlay是一層位于FPGA硬件層之上,并連接頂層應(yīng)用的虛擬可編程架構(gòu),如下圖所示。
Overlay的具體實(shí)現(xiàn)形式有很多種,它既可以是工程中常用的軟核通用處理器,也可以是一組支持更高級(jí)編程模型的可編程邏輯處理單元,稱(chēng)為CGRA(Coarse-Grained Reconfigurable Array),或者是一些實(shí)現(xiàn)特定功能的專(zhuān)用處理器,如Virtual Box公司開(kāi)發(fā)的針對(duì)加速向量計(jì)算的向量處理器(Vector Processor)等等。
使用Overlay的主要目的是為上層用戶(hù)提供一個(gè)他們更為熟悉的編程架構(gòu)與接口,便于他們通過(guò)諸如C語(yǔ)言等高層語(yǔ)言對(duì)Overlay中的通用處理器等進(jìn)行編程,而不需擔(dān)心具體的硬件電路實(shí)現(xiàn),由此實(shí)現(xiàn)了對(duì)FPGA底層硬件資源的抽象和虛擬化。
另外,由于Overlay層提供的邏輯處理單元或軟核處理器通常與底層FPGA硬件無(wú)關(guān),因此方便了上層設(shè)計(jì)在不同F(xiàn)PGA架構(gòu)之間的移植。
使用Overlay的另外一個(gè)好處是可以在很大程度上縮短FPGA的編譯時(shí)間。相比通常只有幾分鐘的軟件編譯時(shí)間,F(xiàn)PGA的編譯需要經(jīng)過(guò)邏輯綜合、映射、布局布線(xiàn)等多項(xiàng)步驟,對(duì)于一個(gè)中等規(guī)模的FPGA設(shè)計(jì)而言,整個(gè)編譯過(guò)程通常會(huì)長(zhǎng)達(dá)幾個(gè)小時(shí)之久。由于Overlay層的邏輯架構(gòu)相對(duì)固定,因此可以由Overlay的提供者提前進(jìn)行全部或部分編譯。用戶(hù)在使用時(shí),就只需編譯自己編寫(xiě)的邏輯部分即可,這樣大大縮短了整體的開(kāi)發(fā)時(shí)間,也方便對(duì)應(yīng)用進(jìn)行調(diào)試和修改。
Overlay技術(shù)與高層次綜合(High-Level Synthesis,簡(jiǎn)稱(chēng)HLS)技術(shù)的主要區(qū)別在于,前者引入的Overlay層往往并不能完全隱藏底層的FPGA結(jié)構(gòu),由此可能帶來(lái)額外的開(kāi)發(fā)難度和成本。這通常體現(xiàn)在兩個(gè)方面:
第一,Overlay層往往不能實(shí)現(xiàn)上層用戶(hù)的全部邏輯。例如,使用軟核處理器時(shí),通常用它們進(jìn)行數(shù)據(jù)通路和邏輯的控制,此時(shí)仍然需要專(zhuān)門(mén)的硬件工程師開(kāi)發(fā)數(shù)據(jù)通路的部分。
第二,Overlay還沒(méi)有一個(gè)業(yè)界統(tǒng)一的標(biāo)準(zhǔn)化開(kāi)發(fā)模型。如果在Overlay中使用專(zhuān)門(mén)的處理器陣列或CGRA,由于目前并沒(méi)有一個(gè)類(lèi)似在HLS中采用的通用標(biāo)準(zhǔn),那么就需要軟件工程師提前學(xué)習(xí)和掌握所用的CGRA的編程模型,也需要有硬件工程師團(tuán)隊(duì)負(fù)責(zé)在FPGA中實(shí)現(xiàn)和優(yōu)化Overlay層中的CRGA硬件電路。
部分可重構(gòu)與虛擬化管理器
部分可重構(gòu)(Partial Reconfiguration)是FPGA的主要特點(diǎn)之一,它體現(xiàn)了FPGA特有的靈活性。具體來(lái)說(shuō),部分可重構(gòu)是指,可以將FPGA內(nèi)部劃分出一個(gè)或多個(gè)區(qū)域,并在FPGA運(yùn)行過(guò)程中單獨(dú)對(duì)這些區(qū)域進(jìn)行編程和配置,以改變區(qū)域內(nèi)電路的邏輯,但并不影響FPGA其他電路的正常運(yùn)行。
部分可重構(gòu)使得FPGA可以在時(shí)間和空間兩個(gè)維度,由硬件直接進(jìn)行多任務(wù)的切換,如下圖所示。
利用部分可重構(gòu)技術(shù),可以將FPGA劃分成若干個(gè)子區(qū)域,作為虛擬FPGA供單個(gè)或多個(gè)用戶(hù)使用,同時(shí)保留一部分邏輯資源作為不可重配置區(qū)域,用來(lái)實(shí)現(xiàn)必要的基礎(chǔ)架構(gòu),如內(nèi)存管理與網(wǎng)絡(luò)通信等。
一個(gè)典型的例子是微軟的Catapult項(xiàng)目。在他們2014年ISCA會(huì)議上發(fā)表的文章中介紹,每個(gè)FPGA都在邏輯上被劃分成“Role”和“Shell”兩部分,如下圖所示。
其中,Role為可重構(gòu)的邏輯單元,可以根據(jù)不同用戶(hù)應(yīng)用進(jìn)行編程和配置;Shell為不可重配置區(qū)域,包含了不同應(yīng)用都可能需要的基礎(chǔ)架構(gòu),比如DRAM控制器、高速串行收發(fā)器、負(fù)責(zé)與主機(jī)通信的PCIe模塊與DMA、控制重構(gòu)的Flash讀寫(xiě)模塊,以及其他各種I/O接口等等。
在這篇文章中,微軟在其數(shù)據(jù)中心的1632臺(tái)服務(wù)器中部署了Intel的Stratix V系列FPGA,在Role部分對(duì)微軟必應(yīng)(Bing)搜索引擎的文件排名運(yùn)算進(jìn)行了硬件加速,并達(dá)到了高達(dá)95%的吞吐量提升,同時(shí)功耗的增加不超過(guò)10%,總成本增加不超過(guò)30%。
另外一個(gè)基于FPGA部分可重構(gòu)技術(shù)進(jìn)行FPGA虛擬化的例子,是IBM的cloudFPGA項(xiàng)目。在它2015年發(fā)表的文章中,F(xiàn)PGA被劃分成三部分:管理層(Management Layer)、網(wǎng)絡(luò)服務(wù)層(Network Service Layer)以及虛擬FPGA層(vFPGA),如下圖所示。
其中,vFPGA本質(zhì)上就是一個(gè)或多個(gè)可以動(dòng)態(tài)重構(gòu)的FPGA區(qū)域,它們可以共同屬于一個(gè)用戶(hù),或分屬多個(gè)用戶(hù),運(yùn)行著相同或不同的應(yīng)用。
在一個(gè)vFPGA進(jìn)行動(dòng)態(tài)重構(gòu)時(shí),其他vFPGA的運(yùn)行不會(huì)受到影響。管理層是不可被用戶(hù)配置的區(qū)域,主要負(fù)責(zé)對(duì)這些vFPGA進(jìn)行內(nèi)存的分配和管理。vFPGA和管理層類(lèi)似于傳統(tǒng)虛擬化架構(gòu)中虛擬機(jī)和Hypervisor的關(guān)系。網(wǎng)絡(luò)服務(wù)層則主要負(fù)責(zé)控制多個(gè)vFPGA與數(shù)據(jù)中心網(wǎng)絡(luò)的通信,并在FPGA硬件上實(shí)現(xiàn)了L2-L4層網(wǎng)絡(luò)協(xié)議,供所有vFPGA使用。
為了通過(guò)部分重構(gòu)技術(shù)進(jìn)行FPGA虛擬化,通常都需要引入額外的管理層。與Hypervisor類(lèi)似,管理層對(duì)虛擬后的FPGA進(jìn)行各類(lèi)資源的統(tǒng)一管理與調(diào)度,如Catapult項(xiàng)目中的Shell層,以及cloudFPGA項(xiàng)目中的Management層。
但是,管理層的引入勢(shì)必會(huì)占用原本可以用于應(yīng)用邏輯的可編程資源,同時(shí)對(duì)系統(tǒng)的整體性能帶來(lái)負(fù)面影響。
另外,對(duì)FPGA強(qiáng)行劃分多個(gè)可重構(gòu)區(qū)域,也可能會(huì)嚴(yán)重影響系統(tǒng)性能。比如,一旦劃分了可重構(gòu)區(qū)域,就代表著其他應(yīng)用邏輯不能使用該區(qū)域內(nèi)的硬件資源,這樣會(huì)嚴(yán)重影響編譯時(shí)布局布線(xiàn)的靈活度,導(dǎo)致某些時(shí)序路徑必須“繞道”,以避免這些可重構(gòu)區(qū)域,從而造成過(guò)長(zhǎng)的布線(xiàn)延時(shí)。另一方面,如果劃分了過(guò)少的可重構(gòu)區(qū)域,就可能會(huì)造成FPGA資源的空置和浪費(fèi)。
因此,如何優(yōu)化FPGA上可重構(gòu)區(qū)域的劃分?jǐn)?shù)目,以及針對(duì)動(dòng)態(tài)重構(gòu)進(jìn)行布局布線(xiàn)工具的優(yōu)化設(shè)計(jì),是當(dāng)前學(xué)術(shù)界和工業(yè)界正在探索的問(wèn)題。
FPGA資源池與虛擬化框架
為了實(shí)現(xiàn)多用戶(hù)的支持,與其在單一FPGA芯片上使用動(dòng)態(tài)重構(gòu)技術(shù)劃分多個(gè)可重構(gòu)區(qū)域,也可以使用多個(gè)FPGA級(jí)聯(lián),使每個(gè)FPGA負(fù)責(zé)單個(gè)或少量用戶(hù),并通過(guò)一個(gè)整體的虛擬化框架完成系統(tǒng)的集成與資源調(diào)度。同樣的,這個(gè)架構(gòu)也可以支持單一個(gè)用戶(hù)同時(shí)需求多個(gè)FPGA的應(yīng)用場(chǎng)景。這種多租戶(hù)的FPGA虛擬化架構(gòu)通常需要軟硬件兩個(gè)層面的支持:
硬件層面,需要實(shí)現(xiàn)多FPGA互聯(lián),形成FPGA“資源池”,同時(shí)也要支持其他硬件結(jié)構(gòu),比如CPU、GPU,或者其他硬件加速器等。
軟件層面,需要有一個(gè)虛擬化框架,對(duì)用戶(hù)任務(wù)進(jìn)行有效的FPGA部署。具體來(lái)說(shuō),就是對(duì)各類(lèi)硬件資源進(jìn)行分配調(diào)度,管理包括FPGA在內(nèi)的各個(gè)加速器之間的通信和數(shù)據(jù)傳輸,控制FPGA的連接方式,以及對(duì)FPGA進(jìn)行動(dòng)態(tài)重構(gòu)和配置等等。
上文提到的微軟Catapult項(xiàng)目和IBM cloudFPGA項(xiàng)目都有各自的對(duì)多租戶(hù)的支持。比如,微軟在2016年MICRO會(huì)議上發(fā)表的論文提到,每個(gè)FPGA內(nèi)都集成了一個(gè)Elastic Router,多個(gè)用戶(hù)可配置模塊(Role)可以通過(guò)Elastic Router提供的虛擬通道與外界進(jìn)行網(wǎng)絡(luò)通信,如下圖所示。
在更高層面,Catapult提出了一種“硬件即服務(wù)(Hardware-as-a-Service)”的使用模型,如下圖所示。
這個(gè)HaaS模型通過(guò)一個(gè)中心化的資源管理器(Resource Manager,RM),對(duì)數(shù)據(jù)中心里的FPGA資源進(jìn)行統(tǒng)一管理和調(diào)度。每個(gè)FPGA資源池中,都有一個(gè)服務(wù)管理器(Service Manager,SM)通過(guò)API與RM進(jìn)行通信。SM對(duì)整個(gè)資源池的FPGA進(jìn)行管理,實(shí)現(xiàn)諸如FPGA負(fù)載均衡、互聯(lián)管理、故障處理等功能。
在cloudFPGA項(xiàng)目中,F(xiàn)PGA與CPU完全解耦,直接作為網(wǎng)絡(luò)設(shè)備接入數(shù)據(jù)中心網(wǎng)絡(luò),并成為池化的硬件加速資源。同時(shí),IBM提出了一個(gè)基于OpenStack的虛擬化框架和加速服務(wù),使得用戶(hù)可以通過(guò)在FPGA中預(yù)先設(shè)定的management IP地址對(duì)FPGA資源池進(jìn)行服務(wù)注冊(cè)、任務(wù)分配、FPGA配置以及使用。
在池化FPGA和虛擬化框架領(lǐng)域其他的代表性工作還有來(lái)自英國(guó)Maxeler公司開(kāi)發(fā)的基于FPGA的數(shù)據(jù)流引擎(Dataflow Engine),及其一系列開(kāi)發(fā)環(huán)境與框架。在傳統(tǒng)的基于CPU的計(jì)算架構(gòu)中(見(jiàn)下圖),CPU通過(guò)讀取內(nèi)存中的指令和數(shù)據(jù)進(jìn)行相應(yīng)的計(jì)算,當(dāng)前指令的計(jì)算結(jié)果會(huì)寫(xiě)入內(nèi)存,并在讀取下一條指令和數(shù)據(jù),直到程序運(yùn)行結(jié)束。
與之對(duì)應(yīng)的,在基于數(shù)據(jù)流的架構(gòu)中,只需在應(yīng)用開(kāi)始時(shí)從內(nèi)存中讀取數(shù)據(jù),隨后會(huì)在FPGA上進(jìn)行數(shù)據(jù)流處理和計(jì)算,所有中間數(shù)據(jù)不會(huì)返回內(nèi)存,直到計(jì)算結(jié)束。這樣從根本上杜絕了訪(fǎng)存的性能瓶頸。多個(gè)數(shù)據(jù)流引擎的計(jì)算節(jié)點(diǎn)可以互聯(lián),并與x86 CPU、網(wǎng)絡(luò)單元、存儲(chǔ)單元等共同組成完整的計(jì)算集群,如下圖所示。
Maxeler還提供了一種類(lèi)似于Java的編程語(yǔ)言,稱(chēng)為MaxJ,用來(lái)對(duì)數(shù)據(jù)流圖進(jìn)行描述和建模。然后通過(guò)對(duì)應(yīng)的編譯器MaxCompiler,將數(shù)據(jù)流圖映射到底層的FPGA硬件平臺(tái),從而對(duì)上層用戶(hù)虛擬化了底層電路邏輯的具體實(shí)現(xiàn)。
目前,這套數(shù)據(jù)流引擎架構(gòu)已經(jīng)被用在多個(gè)高性能計(jì)算的應(yīng)用場(chǎng)景,比如蒙特卡洛仿真、金融風(fēng)險(xiǎn)計(jì)算、科學(xué)計(jì)算,以及一些新興的應(yīng)用場(chǎng)景,如卷積神經(jīng)網(wǎng)絡(luò)(CNN)的硬件加速等等。
在虛擬化框架協(xié)議方面的另一個(gè)主要工作是對(duì)MapReduce框架的FPGA支持。MapReduce是Google提出的針對(duì)大規(guī)模數(shù)據(jù)處理的并行計(jì)算框架,已被用于多種計(jì)算平臺(tái)和架構(gòu),如多核CPU、Xeon Phi和GPU等等。通過(guò)MapReduce框架,上層用戶(hù)只需要調(diào)用給定的軟件庫(kù)和API,而不需要知道底層的硬件結(jié)構(gòu)。
MapReduce的核心即為map和reduce兩個(gè)函數(shù)的實(shí)現(xiàn),為了對(duì)MapReduce增加FPGA支持,可以首先設(shè)計(jì)map和reduce的FPGA硬件模塊以及對(duì)應(yīng)的編程接口,然后通過(guò)MapReduce框架調(diào)用,這樣可以實(shí)現(xiàn)FPGA的分布式部署和配置。在這里,map和reduce的FPGA設(shè)計(jì)可以通過(guò)傳統(tǒng)的硬件描述語(yǔ)言(HDL)完成,也可以通過(guò)高層語(yǔ)言,如OpenCL等,并借助高層次綜合工具完成設(shè)計(jì)。
小結(jié)
與軟件虛擬化類(lèi)似,F(xiàn)PGA虛擬化技術(shù)抽象了具體的FPGA體系結(jié)構(gòu)與硬件資源,使得用戶(hù)能在更高的邏輯層級(jí)上利用FPGA進(jìn)行應(yīng)用的硬件加速。
評(píng)論