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