FPGA協(xié)處理技術(shù)介紹及進(jìn)展
FPGA協(xié)處理技術(shù)介紹及進(jìn)展
FPGA的架構(gòu)使得許多算法得以實(shí)現(xiàn),較之采用四核CPU或通用圖形處理器(GPGPU),這些算法的持續(xù)性能更接近器件的峰值性能。隨著對(duì)芯片、算法和庫基礎(chǔ)的集中改進(jìn),F(xiàn)PGA加速器的基準(zhǔn)測(cè)試結(jié)果不斷提高。就算當(dāng)前最大的FPGA所消耗的功率也不到30W,因此它們可應(yīng)用于多種場(chǎng)合。在目前出現(xiàn)的幾大行業(yè)動(dòng)態(tài)的共同作用下,F(xiàn)PGA實(shí)現(xiàn)的算法加速更加令人矚目。這些行業(yè)動(dòng)態(tài)包括:
● 當(dāng)前FPGA的容量已足夠容納更大的算法?,F(xiàn)在已經(jīng)有可能將期權(quán)定價(jià)算法或1M點(diǎn)快速傅里葉變換放入FPGA。將算法從CPU中加載到FPGA的延遲時(shí)間小于算法加速所節(jié)省的時(shí)間。
● 單核CPU在功耗和冷卻問題上受到了限制。采用多核CPU的嘗試正在順利進(jìn)行,但現(xiàn)有為單核編寫的軟件必須進(jìn)行重寫,用以支持合理的性能擴(kuò)展。
● FPGA協(xié)處理的主動(dòng)式支持。在某些情況下,這些CPU接口(AMD公司的Torrenza Initiative與Intel公司面向FPGA廠商的注冊(cè)FSB與QPI)支持8 GB/s的速率,寫入等待時(shí)間低于140ns。
較之雙核、四核CPU或GPGPU,F(xiàn)PGA基準(zhǔn)測(cè)試結(jié)果顯示了采用插槽式加速器的優(yōu)異的蒙特卡洛浮點(diǎn)結(jié)果(見表1)。
就結(jié)果而言,運(yùn)行頻率為150~250 MHz之間的FPGA是如何做到優(yōu)于運(yùn)行頻率為2~3 GHz的四核CPU或運(yùn)行頻率為1.35 GHz的128核GPU的呢?正如蒙特卡洛布萊克-斯科爾算法所示,F(xiàn)PGA架構(gòu)具有獨(dú)特的性能,這是產(chǎn)生這一優(yōu)異結(jié)果的原因之一。
FPGA架構(gòu)特征
靈活的FPGA可根據(jù)需要進(jìn)行編程和重新編程。一個(gè)典型的FPGA包括一個(gè)邏輯塊陣列、內(nèi)存塊和DSP塊,它們周邊環(huán)繞著可由軟件進(jìn)行配置的可編程式互連結(jié)構(gòu)(如圖1所示)。該架構(gòu)確保下列特征的實(shí)現(xiàn)。
● 功能并行:功能的多次重復(fù)
● 數(shù)據(jù)并行:處理數(shù)據(jù)陣列或數(shù)據(jù)矩陣
● 流水化的自定義指令:每個(gè)時(shí)鐘周期輸出流數(shù)據(jù)的一個(gè)結(jié)果
● 超大的主緩沖帶寬與規(guī)模:GPGPU的3~10倍
● 靈活的數(shù)據(jù)通路布線:巨型交叉連通在一個(gè)時(shí)鐘周期內(nèi)完成數(shù)據(jù)傳輸
● 功能和數(shù)據(jù)流的串聯(lián):均在一個(gè)時(shí)鐘周期內(nèi)完成
● 定制片外I/O:所需的協(xié)議、帶寬和延遲
● 可擴(kuò)展的路徑圖:更大的陣列具有充足的空間支持供電與冷卻
[!--empirenews.page--]
顯然,F(xiàn)PGA在并行化與流水化方面存在相當(dāng)大的優(yōu)勢(shì),同時(shí)與GPGPU相比,F(xiàn)PGA在主緩存與帶寬方面也存在優(yōu)勢(shì)。在FPGA中,邏輯資源周圍是存儲(chǔ)器塊。XDI模塊具有一塊帶寬為3.8TB/s的3.3MB主緩存,這是nVidia 8800 GTX型GPGPU上主緩存(支持流處理器)的5~10倍。
FPGA的優(yōu)勢(shì)還在于,可以利用裕量連接帶寬來靈活構(gòu)建直達(dá)各邏輯塊的數(shù)據(jù)通道和存儲(chǔ)器訪問通路。圖1所示的可編程互連結(jié)構(gòu)提供了大量的布線帶寬。模塊與電路板可根據(jù)FPGA輸出帶寬、存儲(chǔ)器大小及延遲的需要進(jìn)行設(shè)計(jì),I/O端口可由用戶自定義。
圖1 FPGA的架構(gòu)
最后,F(xiàn)PGA架構(gòu)還擁有一個(gè)優(yōu)勢(shì),它可擴(kuò)展為更大型的邏輯塊、存儲(chǔ)器塊與DSP塊的陣列。邏輯與主緩存的大小是一起擴(kuò)展的?,F(xiàn)有最大的FPGA峰值功耗為30W,其FPGA架構(gòu)有很多空間,可以在不超過現(xiàn)有數(shù)據(jù)中心功率和冷卻限制的前提下,擴(kuò)展為新的處理構(gòu)型。
盡管FPGA架構(gòu)具有許多出眾的性能,一些性能必須共同發(fā)揮作用,才能提供優(yōu)于CPU協(xié)處理的解決方案。
芯片與算法基礎(chǔ)
大部分雙精度浮點(diǎn)算法的加法與乘法操作比例大約為1:1。在FPGA中,加法運(yùn)算使用邏輯資源,乘法運(yùn)算使用DSP塊,因此FPGA的邏輯資源與DSP塊的比例必須均衡。FPGA的另一個(gè)特點(diǎn)是其可編程功率技術(shù),該技術(shù)可針對(duì)所有邏輯塊、DSP塊與存儲(chǔ)器塊進(jìn)行編程,根據(jù)設(shè)計(jì)的時(shí)序要求將其設(shè)定為高功耗或低功耗模式。
浮點(diǎn)運(yùn)算核已經(jīng)改進(jìn),可運(yùn)行于更高的時(shí)鐘速率,使用更少的DSP塊和更少的邏輯資源。采用浮點(diǎn)編譯器可減少不同浮點(diǎn)運(yùn)算核之間用于連接64位數(shù)據(jù)通路的邏輯資源。
在一次浮點(diǎn)運(yùn)算結(jié)束時(shí),合并對(duì)浮點(diǎn)運(yùn)算進(jìn)行規(guī)格化處理(定點(diǎn)格式轉(zhuǎn)換至浮點(diǎn)格式)的步驟,可以顯著減少對(duì)后續(xù)浮點(diǎn)運(yùn)算輸入的去規(guī)格化處理(浮點(diǎn)格式轉(zhuǎn)換為定點(diǎn)格式)。浮點(diǎn)運(yùn)算的數(shù)學(xué)表達(dá)式的整個(gè)數(shù)據(jù)通路可熔接在一起,這會(huì)最多減少40%的邏輯資源并使時(shí)鐘速率略有提高。
浮點(diǎn)運(yùn)算的正確組合十分重要。如果算法有許多超越運(yùn)算(求指數(shù)、求對(duì)數(shù)等),F(xiàn)PGA可配置所需要的數(shù)目。在GPGPU設(shè)計(jì)中,會(huì)增加一些硬模塊實(shí)現(xiàn)上述函數(shù),但比例比單精度浮點(diǎn)邏輯少得多。使用算法技巧、抽象硬件細(xì)節(jié)及針對(duì)個(gè)別FPGA資源的優(yōu)化都需要函數(shù)庫。
基于芯片、算法與庫基礎(chǔ),圖2的系統(tǒng)級(jí)解決方案涉及到了工具鏈、模塊/板級(jí)設(shè)計(jì)、CPU接口以及采用合作公司專門技術(shù)的由CPU至基于FPGA的加速器的數(shù)據(jù)傳輸。
圖2 FPGA加速系統(tǒng)級(jí)解決方案的基礎(chǔ)[!--empirenews.page--]
使持續(xù)性能接近峰值
對(duì)于可并行化或流水化的任務(wù),相對(duì)于峰值性能而言,F(xiàn)PGA經(jīng)常能夠大大提高持續(xù)性能,并可利用各器件資源。以一個(gè)蒙特卡洛布萊克-斯科爾斯基準(zhǔn)測(cè)試程序?yàn)槔?,它可建立一條運(yùn)行頻率為150MHz的等式流水線。
在每個(gè)時(shí)鐘周期,F(xiàn)PGA通過梅森素?cái)?shù)旋轉(zhuǎn)核產(chǎn)生的隨機(jī)數(shù)被輸入(接入)“定制指令”,每個(gè)時(shí)鐘周期產(chǎn)生一個(gè)結(jié)果。12條“定制指令”與模塊的兩片F(xiàn)PGA匹配,利用雙精度浮點(diǎn)邏輯輸出12×150M=1.8G結(jié)果/秒。通過額外倍頻,可預(yù)期實(shí)現(xiàn)性能為上述性能的兩倍。
對(duì)比不同架構(gòu)的浮點(diǎn)能力持續(xù)性能與峰值性能十分有趣。表2給出了四種可能解決方案的單精度浮點(diǎn)峰值性能。由于布萊克-斯科爾斯公式需要常規(guī)加法與乘法函數(shù)以外更多的函數(shù)(指數(shù)、平方根等),布萊克-斯科爾斯結(jié)果的總GFLOPS未作統(tǒng)計(jì)。
表3給出了布萊克-斯科爾斯結(jié)果與峰值GFLOPS的比例,作為比較持續(xù)性能與峰值性能的一種相對(duì)衡量方法。相比峰值性能,F(xiàn)PGA達(dá)到了最佳持續(xù)性能。相比另外兩種加速器的單精度邏輯,F(xiàn)PGA的雙精度邏輯具有最優(yōu)原始性能以及最優(yōu)的“性能/瓦”參數(shù)。
對(duì)許多包含并行性或可流水化的算法而言,由于裕量連接帶寬可實(shí)現(xiàn)用戶自定義的數(shù)據(jù)通路,這樣,邏輯可在一個(gè)時(shí)鐘周期內(nèi)訪問存儲(chǔ)器或訪問另一個(gè)邏輯塊的結(jié)果,從而使FPGA的持續(xù)性能可接近峰值性能。由于固定架構(gòu)具備預(yù)先確定的用以實(shí)現(xiàn)不同功能的邏輯塊集合,所以可以為FPGA配置支持某種給定算法的最優(yōu)邏輯函數(shù)比例來實(shí)現(xiàn)器件資源的最佳利用。