作者: Michael Parker 高性能浮點(diǎn)處理一直與高性能CPU相關(guān)聯(lián)。在過(guò)去幾年中,GPU也成為功能強大的浮點(diǎn)處理平臺,超越了圖形,稱(chēng)為GP-GPU(通用圖形處理單元)。新創(chuàng )新是在苛刻的應用中實(shí)現基于FPGA的浮點(diǎn)處理。本文的重點(diǎn)是FPGA及其浮點(diǎn)性能和設計流程,以及OpenCL的使用,這是高性能浮點(diǎn)計算前沿的編程語(yǔ)言。 各種處理平臺的GFLOP指標在不斷提高,現在,TFLOP/s這一術(shù)語(yǔ)已經(jīng)使用的非常廣泛了。但是,在某些平臺上,峰值GFLOP/s,即,TFLOP/s表示的器件性能信息有限。它只表示了每秒能夠完成的理論浮點(diǎn)加法或者乘法總數。分析表明,FPGA單精度浮點(diǎn)處理能夠超過(guò)1 TFLOP/s。 一種不太復雜的常用算法是FFT。使用單精度浮點(diǎn)實(shí)現了4096點(diǎn)FFT。它能夠在每個(gè)時(shí)鐘周期輸入輸出四個(gè)復數采樣。每一個(gè)FFT內核運行速度超過(guò)80 GFLOP/s,大容量FPGA的資源支持實(shí)現7個(gè)這類(lèi)的內核。 但是,如圖1所示,這一FPGA的FFT算法GFLOP/s接近400 GFLOP/s。這是“按鍵式”OpenCL編譯結果,不需要FPGA專(zhuān)業(yè)知識。使用邏輯鎖定和DSE進(jìn)行優(yōu)化,7內核設計接近單內核設計的Fmax,將其GFLOP/s提升至500,超過(guò)了10 GFLOP/s每瓦。 這一每瓦GFLOP/s要比CPU或者GPU功效高很多。對比一下GPU,GPU在這些FFT長(cháng)度上效率并不高,因此,沒(méi)有進(jìn)行基準測試。當FFT長(cháng)度達到幾十萬(wàn)個(gè)點(diǎn)時(shí),GPU效率才比較高,能夠為CPU提供有效的加速功能。 ![]() 圖1:Altera Stratix V 5SGSD8 FPGA浮點(diǎn)FFT性能。 總之,實(shí)際的GFLOP/s一般只達到峰值或者理論GFLOP/s的一小部分。出于這一原因,更好的方法是采用算法來(lái)對比性能,這種算法能夠合理的表示典型應用的特性。算法越復雜,典型實(shí)際應用的基準測試就越具有代表性。 第三方基準測試 并不是依靠供應商的峰值GFLOP/s指標來(lái)確定處理技術(shù),而是使用比較復雜具有代表性的第三方評估。高性能計算理想的算法是Cholesky分解。 這一算法經(jīng)常用于線(xiàn)性代數,高效的解出多個(gè)方程,可以實(shí)現矩陣求逆功能。這一算法非常復雜,要獲得合理的結果總是要求浮點(diǎn)數值表示。計算需求與N3成正比,N是矩陣維度,因此,一般對處理要求很高。實(shí)際GFLOP/s取決于矩陣大小以及所要求的矩陣處理吞吐量。 表1顯示了基于Nvidia GPU指標1.35TFLOP/s的基準測試結果,使用了各種庫,以及Xilinx Virtex6 XC6VSX475T,其密度達到475K LC,這種FPGA針對DSP處理進(jìn)行了優(yōu)化。用于Cholesky基準測試時(shí),這些器件在密度上與Altera FPGA相似。 表1:田納西州大學(xué)的GPU和Xilinx FPGA Cholesky基準測試。 ![]() LAPACK和MAGMA是商用庫,而GPU GFLOP/s是指采用田納西州大學(xué)開(kāi)發(fā)的OpenCL實(shí)現的。對于小規模矩陣,后者更優(yōu)化一些。 中等規模的Altera Stratix V FPGA (460kLE)也進(jìn)行了基準測試,使用了單精度浮點(diǎn)Cholesky算法。如表2所示,在Stratix V FPGA上進(jìn)行Cholesky算法的性能要比Xilinx結果高很多。 表2:BDTI的Altera FPGA Cholesky和QR基準測試。 ![]() 應指出,矩陣大小并不相同。田納西州大學(xué)結果是從[512×512]矩陣大小開(kāi)始的。BDTI基準測試達到了[360×360]矩陣大小。原因是,矩陣規模較小時(shí),GPU效率非常低,因此,在這些應用中,不應該使用它們來(lái)加速CPU。在規模較小的矩陣時(shí),FPGA的工作效率非常高。 其次,BDTI基準測試是基于每個(gè)Cholesky內核的。每個(gè)可參數賦值的Cholesky內核支持選擇矩陣大小,矢量大小和通道數量。矢量大小大致決定了FPGA資源。較大的[360×360]矩陣使用了較長(cháng)的矢量,支持這一FPGA中實(shí)現一個(gè)內核,達到91GFLOP/s。較小的[60×60]矩陣使用的資源更少,因此,可以實(shí)現兩個(gè)內核,總共是2×39=78GFLOP/s。最小的[30×30]矩陣支持實(shí)現三個(gè)內核,總共是3×26=78GFLOP/s。 FPGA看起來(lái)更適合解決數據規模較小的問(wèn)題。原因之一是因為計算負載隨N3而增大,數據I/O隨N2增大,最終,隨著(zhù)數據的增加,GPU的I/O瓶頸不再是問(wèn)題。另一項考慮是吞吐量。隨著(zhù)矩陣規模的增大,由于每個(gè)矩陣的處理量增大,矩陣每秒吞吐量會(huì )大幅度下降。在某些點(diǎn),吞吐量變得非常低,以至于無(wú)法滿(mǎn)足很多應用的要求。在很多情況下,會(huì )分解大規模矩陣,處理每個(gè)小的子矩陣,以解決由于龐大的處理負載造成的吞吐量限制問(wèn)題。 對于FFT,計算負載增加N log2 N,而數據I/O隨N增大而增大。對于規模較大的數據,GPU是高效的計算引擎。作為對比,數據長(cháng)度很短時(shí),FPGA是高效的計算引擎,更適合FFT長(cháng)度達到數千的很多應用,對于GPU,FFT長(cháng)度是數十萬(wàn)。 GPU和FPGA設計方法 使用Nvidia的專(zhuān)用CUDA語(yǔ)言或者開(kāi)放標準OpenCL語(yǔ)言對GPU進(jìn)行編程。這些語(yǔ)言在能力上非常相似,而最大的不同在于CUDA只能用在Nvidia GPU上。 FPGA通常使用HDL語(yǔ)言Verilog或者VHDL進(jìn)行編程。這些語(yǔ)言的最新版雖然采用了浮點(diǎn)數定義,不用進(jìn)行綜合,但都不太適合支持浮點(diǎn)設計。例如,在System Verilog中,短實(shí)數變量與IEEE單精度(浮點(diǎn))對應,實(shí)數變量與IEEE雙精度對應。 使用傳統的方法,將浮點(diǎn)數據通路綜合到FPGA的效率非常低。Xilinx FPGA在Cholesky算法上的性能很低,它使用了Xilinx浮點(diǎn)內核生成功能,這證實(shí)了這一點(diǎn)。而Altera采用了兩種不同的方法。第一種使用基于Mathworks的設計輸入,稱(chēng)之為DSP Builder高級模塊庫。這一工具包含了對定點(diǎn)和浮點(diǎn)數的支持。它支持7種不同精度的浮點(diǎn),包括IEEE半精度、單精度和雙精度。它還支持矢量化,這是高效實(shí)現線(xiàn)性代數所需要的。而最重要的是,它能夠將浮點(diǎn)電路高效的映射到目前的定點(diǎn)FPGA體系結構中,如基準測試所示,規模中等的28 nm FPGA,Cholesky算法接近了100GFLOP/s。作為對比,在不具有綜合能力的規模相似的Xilinx FPGA上,實(shí)現同樣的算法,使用密度相似的FPGA,性能只有20GFLOP/s。 面向FPGA的OpenCL GPU編程人員比較熟悉OpenCL。面向FPGA的OpenCL編譯意味著(zhù),面向AMD或者Nvidia GPU編寫(xiě)的OpenCL代碼可以編譯到FPGA中。Altera的OpenCL編譯器支持GPU程序使用FPGA,不需要熟練的開(kāi)發(fā)典型的FPGA設計。 使用支持FPGA的OpenCL,相對于GPU有幾個(gè)關(guān)鍵優(yōu)勢。首先,GPU的I/O是有限制的。所有輸入和輸出數據必須由主CPU通過(guò)PCI接口進(jìn)行傳輸。結果延時(shí)會(huì )讓GPU處理引擎暫停,因此,降低了性能。 FPGA以各種寬帶I/O功能而知名。這些功能支持數據通過(guò)千兆以太網(wǎng)和SRIO,或者直接從ADC和DAC輸入輸出FPGA。Altera定義了OpenCL標準的供應商專(zhuān)用擴展,以支持流操作。 即使與I/O瓶頸無(wú)關(guān),FPGA的處理延時(shí)也要比GPU低很多。眾所周知,GPU必須有數千個(gè)線(xiàn)程才能高效的工作。這是由于存儲器讀取很長(cháng)的延時(shí),以及GPU大量的處理內核之間的延時(shí)。實(shí)際上,GPU必須有很多任務(wù)才能使得處理內核不會(huì )暫停等待數據,否則會(huì )導致任務(wù)很長(cháng)的延時(shí)。 而FPGA使用了“粗粒度并行”體系結構。它建立了多個(gè)經(jīng)過(guò)優(yōu)化的并行數據通路,每一通路一般在每個(gè)時(shí)鐘周期輸出一個(gè)結果。數據通路的例化數取決于FPGA資源,但一般要比GPU內核數少很多。但是,每一數據通路例化的吞吐量要比GPU內核高得多。這一方法的主要優(yōu)勢是低延時(shí)。降低延時(shí)在很多應用中都是關(guān)鍵的性能優(yōu)勢。 FPGA的另一優(yōu)勢是很低的功耗,極大的降低了每瓦GFLOP/s。正如BDTI所測量的,Cholesky等復數浮點(diǎn)算法的每瓦GFLOP/s是每瓦5~6GFLOP/s。一般很難進(jìn)行GPU能效測量,但是,Cholesky的GPU性能達到50GFLOP/s,典型功耗是200W,得到的結果是0.25每瓦GFLOP/s,單位FLOP/s的功率高20倍。 OpenCL和DSP Builder都依靠“融合數據通路”這種技術(shù)(圖2),以這種技術(shù)實(shí)現浮點(diǎn)處理,能夠大幅度減少桶形移位電路,從而支持使用FPGA來(lái)開(kāi)發(fā)大規模高性能浮點(diǎn)設計。 ![]() 圖2:浮點(diǎn)的融合數據通路實(shí)現。 為降低桶形移位頻率,綜合過(guò)程盡可能使用較大的尾數寬度,從而不需要頻率歸一化和去歸一化。27×27和36×36硬核乘法器支持比單精度實(shí)現所要求的23位更大的乘法計算,54×54和72×72結構的乘法器支持比52位更大的計算,這通常是雙精度實(shí)現所要求的。FPGA邏輯已經(jīng)針對大規模定點(diǎn)加法器電路進(jìn)行了優(yōu)化,包括了內置進(jìn)位超前電路。 當需要進(jìn)行歸一化和去歸一化時(shí),另一種可以避免低性能和過(guò)度布線(xiàn)的方法是使用乘法器。對于一個(gè)24位單精度尾數(包括符號位),24×24乘法器通過(guò)乘以2n對輸入移位。27×27和36×36硬核乘法器支持單精度擴展尾數,可以用于構建雙精度乘法器。 在很多線(xiàn)性代數算法中,矢量點(diǎn)乘(圖3)是占用大量FLOP/s的底層運算。單精度實(shí)現長(cháng)度是64的長(cháng)矢量點(diǎn)乘需要64個(gè)浮點(diǎn)乘法器,以及隨后由63個(gè)浮點(diǎn)加法器構成的加法樹(shù)。這類(lèi)實(shí)現需要很多桶形移位電路。 ![]() 圖3:矢量點(diǎn)乘優(yōu)化。 相反,可以對64個(gè)乘法器的輸出進(jìn)行去歸一化,成為公共指數,最大是64位指數?梢允褂枚c(diǎn)加法器電路對這些64路輸出求和,在加法樹(shù)的最后進(jìn)行最終的歸一化。如圖3所示,這一本地模塊浮點(diǎn)處理過(guò)程省掉了每一加法器所需要的臨時(shí)歸一化和去歸一化。即使是IEEE754浮點(diǎn),最大指數基本決定了最終的指數,因此,這種改變只是在計算早期進(jìn)行指數調整。 但是,進(jìn)行信號處理時(shí),在計算最后盡可能以高精度來(lái)截斷結果才能獲得最佳結果。這種方法進(jìn)位額外的尾數,補償了單精度浮點(diǎn)處理所需要的早期去歸一化次優(yōu)方法,一般從27位到36位。采用浮點(diǎn)乘法器進(jìn)行尾數擴展,因此,在每一步不需要對乘積進(jìn)行歸一化。 注意,這一方法每個(gè)時(shí)鐘周期也會(huì )產(chǎn)生一個(gè)結果。GPU體系結構可以并行產(chǎn)生所有浮點(diǎn)乘法,但是不能高效的并行進(jìn)行加法。之所以這樣是因為不同的內核必須通過(guò)本地存儲器傳輸數據,彼此實(shí)現通信,因此,不能靈活的連接FPGA體系結構。 這一方法產(chǎn)生的結果要比傳統IEEE754浮點(diǎn)結果精確得多,如表3的測量結果所示。BDTI的基準測試獲得了相似的結果。 表3:FPGA相對于IEEE754浮點(diǎn)更精確的結果。 ![]() 使用Cholesky分解算法,實(shí)現大規模矩陣求逆,獲得了表3的結果。以三種不同的方法實(shí)現了相同的算法——在Matlab/Simulink中,使用了IEEE754單精度浮點(diǎn),在RTL單精度浮點(diǎn)處理中,使用融合數據通路方法,在Matlab中也使用了雙精度浮點(diǎn)。雙精度實(shí)現要比單精度實(shí)現精度高十億倍(109)。 表3對比了Matlab單精度;RTL單精度和Matlab雙精度存在誤差,確認了融合數據通路方法的完整性。采用了這一方法來(lái)獲得輸出矩陣中所有復數元素的歸一化誤差以及矩陣元素的最大誤差。使用Frobenius范數計算了總誤差和范數: ![]() 請注意,由于范數包括了所有元素的誤差,因此,它要比每一誤差大很多。 而且,DSP Builder高級模塊庫和OpenCL工具流程都針對下一代FPGA體系結構,支持并優(yōu)化目前的設計。由于體系結構創(chuàng )新和工藝技術(shù)創(chuàng )新,性能可以達到100峰值GFLOPs/W。 總結 高性能計算應用現在有新的處理平臺選擇。對于特殊類(lèi)型的浮點(diǎn)算法,FPGA能夠提供低延時(shí)和較高的GFLOP/s。在幾乎所有應用中,FPGA都能夠實(shí)現優(yōu)異的每瓦GFLOP/s。隨著(zhù)下一代高性能計算優(yōu)化FPGA的推出,這種優(yōu)勢會(huì )更明顯。 Altera的OpenCL編譯器為GPU編程人員提供了幾乎無(wú)縫的方法來(lái)評估這一新處理體系結構的指標。Altera OpenCL符合1.2規范,提供全面的數據庫支持。它解決了傳統FPGA遇到的時(shí)序收斂、DDR存儲器管理以及PCIe主處理器接口等難題。 對于非GPU開(kāi)發(fā)人員,Altera提供DSP Builder高級模塊庫工具流程,支持開(kāi)發(fā)人員開(kāi)發(fā)高Fmax定點(diǎn)或者浮點(diǎn)DSP設計,同時(shí)保持了基于Mathworks的仿真和開(kāi)發(fā)環(huán)境的優(yōu)點(diǎn)。要求高效能工作流程的FPGA開(kāi)發(fā)人員多年以來(lái)一直使用這一產(chǎn)品,與經(jīng)驗豐富的FPGA開(kāi)發(fā)人員相比,所實(shí)現的Fmax性能相同。 參考文獻 [1] 采用28-nm FPGA實(shí)現1 TeraFLOPS,Michael Parker,Altera公司。 [2] Cholesky分解在GPU和FPGA上的性能對比,Depeng Yang,Junqing Sun,JunKu Lee,Getao Liang,David D. Jenkins,Gregory D. Peterson,Husheng Li,電子工程和計算機科學(xué)系,田納西州大學(xué)。 [3] 對Altera 28-nm FPGA浮點(diǎn)DSP設計流程和性能的獨立分析,Berkeley設計技術(shù)公司員工。 [4] 對Altera 28 nm FPGA浮點(diǎn)DSP能效的獨立評估,Berkeley設計技術(shù)公司員工。 [5] 采用OpenCL標準實(shí)現FPGA設計, Deshanand Singh,Altera公司。 Michael Parker是Altera公司的DSP產(chǎn)品規劃首席設計師,這包括適用于DSP應用的精度可調FPGA硅片體系結構、DSP工具開(kāi)發(fā)、浮點(diǎn)工具以及DSP和視頻知識產(chǎn)權(IP)。他于2007年1月加入Altera,有20多年的DSP無(wú)線(xiàn)工程設計經(jīng)驗,曾在A(yíng)lvarion、Soma Networks、TCSI、斯坦福電信以及很多新創(chuàng )公司工作過(guò)。他獲得了圣巴巴拉大學(xué)的電子工程科學(xué)碩士學(xué)位,以及Rensselaer理工學(xué)院的電子工程科學(xué)學(xué)士學(xué)位。本文來(lái)自他在嵌入式系統大會(huì )上所講授的“在FPGA中使用OpenCL提高復數浮點(diǎn)處理性能”(ESC-430)。 |