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