Global Sources
電子工程專輯
 
電子工程專輯 > EDA/IP
 
 
EDA/IP  

在FPGA上最佳化複數浮點運算

上網時間: 2015年04月09日     打印版  Bookmark and Share  字型大小:  

關鍵字:FPGA  浮點運算  GPU  OpenCL  FFT 

作者:Michael Parker,Altera公司DSP產品規劃首席設計師

高性能浮點處理一直與高性能CPU有關。過去幾年來,GPU已經成為功能強大的浮點處理平台了,超越繪圖處理功能,稱為GP-GPU(通用繪圖處理單元)。其創新是在嚴苛的應用中實現基於FPGA的浮點處理。本文重點在於FPGA及其浮點性能和設計流程以及OpenCL的使用,這是高性能浮點運算前端的程式設計語言。

各種處理平台的GFLOP指標不斷提高,現在,TFLOP/s一詞已經使用的非常廣泛了。但是,在某些平台上,峰值GFLOP/s或TFLOP/s對於元件性能所提供的資訊十分有限。它只表示了每秒能夠完成的理論浮點加法或者乘法總數。根據分析顯示,FPGA單精確度浮點處理能夠超過1TFLOP/s。

一種較不複雜的常用演算法是FFT。使用單精確度浮點實現了4096點FFT。它能夠在每個時脈週期輸入輸出四個複數採樣。每一個FFT核心執行速度超過80GFLOP/s,大容量FPGA的資源支援實現7個這類的核心。

但是,如圖1所示,這一FPGA的FFT演算法GFLOP/s接近400GFLOP/s。這是‘按鍵式’OpenCL編譯的結果,不需要FPGA專業知識。使用邏輯鎖定和DSE進行最佳化,7核心設計接近單核心設計Fmax,將其GFLOP/s提升至500,超過了每瓦10GFLOP/s。

這一每瓦GFLOP/s比起CPU或者GPU功效更高得多。以GPU的比較來看,GPU在這些FFT長度上效率並不高,因此,沒有進行基準測試。當FFT長度達到幾十萬個點時,GPU效率才比較高,能夠為CPU提供有效的加速功能。

圖1:Altera Stratix V 5SGSD8 FPGA浮點FFT性能。
圖1:Altera Stratix V 5SGSD8 FPGA浮點FFT性能。

總之,實際的GFLOP/s一般只達到峰值或者理論GFLOP/s的一小部份。因此,更好的方法是採用演算法來比較性能,這種演算法能夠合理的表示典型應用的特性。演算法越複雜,典型實際應用的基準測試就越具有代表性。

協力廠商基準測試

一種替代性方案是取決於協力廠商利用具有代表性的案例進行評估,而不是依靠供應商的峰值GFLOP/s指標來確定處理技術。高性能運算理想的演算法是Cholesky分解。

這一演算法經常用於線性代數,有效率地解出多個方程式,以實現矩陣求逆功能。這一演算法非常複雜,要獲得合理的結果總是要求浮點數值表示。計算需求與N3成正比,N是矩陣維度,因此,一般對處理要求很高。實際GFLOP/s取決於矩陣大小以及所要求的矩陣處理輸送量。

表1顯示基於Nvidia GPU指標1.35TFLOP/s的基準測試結果,使用各種工具庫以及Xilinx Virtex6 XC6VSX475T,其密度達到了475K LC,這種FPGA針對DSP處理進行了最佳化。用於Cholesky基準測試時,這些元件在密度上與Altera FPGA相似。

LAPACK和MAGMA是商用工具庫,而GPU GFLOP/s是指採用田納西州大學開發的OpenCL建置的。後者在較小規模的矩陣時明顯更具最佳化。

表1:田納西州大學的GPU和Xilinx FPGA Cholesky基準測試。
表1:田納西州大學的GPU和Xilinx FPGA Cholesky基準測試。

中等規模的Altera Stratix V FPGA (460kLE)也進行了基準測試,使用單精確度浮點Cholesky演算法。如表2所示,在Stratix V FPGA上進行Cholesky演算法的性能比Xilinx結果高很多。

表2:BDTI的Altera FPGA Cholesky和QR基準測試。
表2:BDTI的Altera FPGA Cholesky和QR基準測試。

值得注意的是,矩陣大小並不相同。田納西州大學結果是從[512×512]矩陣大小開始的。BDTI基準測試達到了[360×360]矩陣大小。原因是矩陣規模較小時,GPU效率非常低,因此,在這些應用中,不應該使用它們來加速CPU。在規模較小的矩陣時,FPGA的工作效率非常高。

其次,BDTI基準測試是基於每個Cholesky核心的。每個可參數賦值的Cholesky核心支援選擇矩陣大小、向量大小和通道數量。向量大小大致決定了FPGA資源。較大的[360×360]矩陣使用了較長的向量,支援這一FPGA中實現一個核心,達到91GFLOP/s。較小的[60×60]矩陣使用的資源更少,因此,可以實現兩個核心,總共是2×39=78GFLOP/s。最小的[30×30]矩陣支援實現三個核心,總共是3×26=78GFLOP/s。

FPGA看起來更適合解決資料規模較小的問題。原因之一在於計算負載隨N3而增大,資料I/O隨N2增大,最終,隨著資料的增加,GPU的I/O瓶頸不再是問題。另一項考慮是輸送量。隨著矩陣規模的增大,由於每個矩陣的處理量增大,矩陣每秒輸送量會大幅度下降。吞吐量在某些點時變得非常低,以至於無法滿足很多應用的要求。在很多情況下,大規模矩陣會被分解,處理每個小的子矩陣,以解決由於龐大的處理負載造成的輸送量限制問題。

對於FFT,計算負載增加N log2 N,而資料I/O隨N而增加。對於規模較大的資料,GPU是高效的運算引擎。相反地,資料長度很短時,FPGA是高效的運算引擎,更適合FFT長度達數千多種應用,對於GPU,FFT長度則達數十萬。

GPU和FPGA設計方法

使用Nvidia的專用CUDA語言或者開放標準OpenCL語言對GPU進行程式設計。這些語言在能力上非常相似,而最大的不同在於CUDA只能用在Nvidia GPU上。

FPGA通常使用HDL語言Verilog或者VHDL進行程式設計。這些語言的最新版雖然採用了浮點數定義,不用進行合成,但都不太適合支援浮點設計。例如,在System Verilog中,短實數變數與IEEE單精確度(浮點)對應,實數變數與IEEE雙精密度對應。

使用傳統的方法,將浮點數據通路合成到FPGA的效率非常低。Xilinx FPGA在Cholesky演算法上的性能很低,它使用了Xilinx浮點核心產生功能,從而證實了這一點。Altera則採用了兩種不同的方法。第一種使用基於Mathworks的設計輸入,稱為DSP Builder先進模組工具庫。這一工具套件包括支援定點和浮點數。它支援7種不同精密度的浮點,包括IEEE半精密度、單精確度和雙精密度,還支援向量化,這是高效實現線性代數所需要的。而最重要的是,它能夠將浮點電路高效地映射到目前的定點FPGA架構中,如基準測試所示,規模中等的28nm FPGA,Cholesky演算法接近了100GFLOP/s。相形之下,在規模類似但不具合成能力的Xilinx FPGA上實現同樣的演算法,使用密度相似的FPGA時,性能只有20GFLOP/s。

針對FPGA的OpenCL

GPU程式設計人員比較熟悉OpenCL。針對FPGA的OpenCL編譯意味著,針對AMD或者Nvidia GPU編寫的OpenCL程式碼可以編譯到FPGA中。Altera的OpenCL編譯器支援GPU程式使用FPGA,而無需開發典型的FPGA設計組。

使用支援FPGA的OpenCL比GPU具有幾個關鍵優勢。首先,GPU的I/O是有限制的。所有輸入和輸出資料必須由主CPU通過PCI介面進行傳輸。導致的延遲會讓GPU處理引擎暫停,因而降低性能。

FPGA具有各種寬頻I/O功能。這些功能支援資料通過Gigabit乙太網路和SRIO,或者直接從ADC和DAC輸入輸出FPGA。Altera定義了OpenCL標準的供應商專用擴展,以支援串流作業。

FPGA的處理延遲比GPU更低很多。眾所週知,GPU必須有數千個執行緒才能高效的作業。這是由於記憶體讀取很長的延遲,以及GPU大量的處理核心之間的延遲。實際上,GPU必須進行多工處理才能使處理核心不會暫停等待資料,否則會導致任務很長的延遲。

FPGA使用了‘粗粒度平行’架構。它建立了多個經過最佳化的平行資料路徑,每個路徑一般在每個時脈週期輸出一個結果。資料路徑的案例數取決於FPGA資源,但一般要比GPU核心數少很多。但是,每一資料路徑案例的輸送量比GPU核心更高得多。這個方法的主要優勢是低延遲。降低延遲在很多應用中都是關鍵的性能優勢。

FPGA的另一優勢在於更低功耗,極大的降低了每瓦GFLOP/s。正如BDTI所測量的,Cholesky等複數浮點演算法的每瓦GFLOP/s約為每瓦5~6GFLOP/s。一般很難進行GPU能效測量,但是,Cholesky的GPU性能達到50GFLOP/s,典型功耗是200W,得到的結果是每瓦0.25GFLOP/s,單位FLOP/s的功率高20倍。

OpenCL和DSP Builder都取決於‘融合資料路徑’技術(圖2),以這種技術實現浮點處理,能夠大幅度減少桶形移位電路,因而支援使用FPGA來開發大規模的高性能浮點設計。

圖2:浮點的融合資料路徑建置。
圖2:浮點的融合資料路徑建置。

為了降低桶形移位頻率,合成過程盡可能使用較大的尾數寬度,因而不需要頻率規格化和反向規格化。27×27和36×36硬核心乘法器支援比單精確度實現所要求的23位元更大的乘法運算,54×54和72×72結構的乘法器支援比52位元更大的運算,這通常是雙精密度實現所要求的。FPGA邏輯已經針對大規模定點加法器電路進行了最佳化,包括了內建進位超前電路。

當需要進行規格化和反向規格化時,另一種可以避免低性能和過度佈線的方法是使用乘法器。對於一個24位元單精確度尾數(包括符號位元),24×24乘法器透過乘以2n對輸入移位。27×27和36×36硬核心乘法器支援單精確度擴展尾數,可用於建構雙精密度乘法器。

在很多線性代數演算法中,向量點乘(圖3)是佔用大量FLOP/s的底層運算。單精確度實現長度是64的長向量點乘需要64個浮點乘法器,以及隨後由63個浮點加法器構成的加法樹。這類實現需要很多桶形移位電路。

圖3:向量點乘最佳化。
圖3:向量點乘最佳化。

相反地,可以為64個乘法器的輸出進行反向規格化,成為公共指數,最大是64位指數。可以使用定點加法器電路對這些64路輸出求和,在加法樹的最後進行最終的規格化。如圖3所示,這一本地模組浮點處理過程省掉了每一加法器所需要的臨時規格化和反向規格化。即使是IEEE754浮點,最大指數基本決定了最終的指數,因此,這種改變只是在運算早期進行指數調整。

但是,進行訊號處理時,在計算最後盡可能以高精密度來截斷結果才能獲得最佳結果。這種方法進位額外的尾數,補償了單精確度浮點處理所需要的早期反向規格化次優方法,一般從27位元到36位元。採用浮點乘法器進行尾數擴展,因此,在每一步不需要對乘積進行規格化。

但這種方法導致每個時脈週期也會產生一個結果。GPU架構可以平行產生所有浮點乘法,但是不能高效的平行進行加法。這是因為不同的核心必須透過本機存放區器傳輸資料,彼此實現通訊,因此,不能靈活的連接到FPGA架構。

這一方法產生的結果比傳統IEEE754浮點結果更精確得多,如表3的測量結果所示。BDTI的基準測試獲得了相似的結果。

表3:FPGA相對於IEEE754浮點更精確的結果。
表3:FPGA相對於IEEE754浮點更精確的結果。

使用Cholesky分解演算法實現大規模矩陣求逆,獲得了表3的結果。以三種不同的方法實現了相同的演算法——在Matlab/Simulink中,使用了IEEE754單精確度浮點;在RTL單精確度浮點處理中,使用融合資料通路方法;在Matlab中也使用了雙精密度浮點。雙精密度建置比起單精確度實現更高十億倍的精密度(109)。

表3比較Matlab單精確度、RTL單精確度和Matlab雙精密度存在誤差,確認融合資料路徑方法的完整性。採用了這一方法來獲得輸出矩陣中所有複數元素的規格化誤差以及矩陣元素的最大誤差。使用Frobenius範數計算了總誤差和範數:

請注意,由於範數包括了所有元素的誤差,因而比每一誤差更大許多。

而且,DSP Builder先進模組工具庫和OpenCL工具流程都針對下一代FPGA架構,支援並最佳化目前的設計。由於架構創新和製程技術創新,性能可以達到100峰值GFLOPs/W。

結語

高性能運算應用現在有了新的處理平台選擇。對於特殊類型的浮點演算法,FPGA能夠提供低延遲和較高的GFLOP/s。幾乎在所有應用中,FPGA都能夠實現優異的每瓦GFLOP/s效能。隨著下一代高性能運算最佳化FPGA的推出,這種優勢會更明顯。

Altera的OpenCL編譯器為GPU程式設計人員提供了幾乎無縫的方法來評估這一新處理架構的指標。Altera OpenCL符合1.2規格,提供全面的資料庫支援。它解決了傳統FPGA遇到的時序收斂、DDR記憶體管理以及PCIe主處理器介面等難題。

對於非GPU開發人員,Altera提供DSP Builde先進模組庫工具流程,支援開發人員開發高Fmax定點或者浮點DSP設計,同時保持基於Mathworks的模擬和開發環境優點。要求高效能工作流程的FPGA開發人員多年以來一直使用這一產品,與經驗豐富的FPGA開發人員相較,所實現的Fmax性能相同。

(參考原文:Optimizing complex floating point calculations on FPGAs,by Michael Parker)





投票數:   加入我的最愛
我來評論 - 在FPGA上最佳化複數浮點運算
評論:  
*  您還能輸入[0]個字
*驗證碼:
 
論壇熱門主題 熱門下載
 •   將邁入40歲的你...存款多少了  •  深入電容觸控技術就從這個問題開始
 •  我有一個數位電源的專利...  •  磷酸鋰鐵電池一問
 •   關於設備商公司的工程師(廠商)薪資前景  •  計算諧振轉換器的同步整流MOSFET功耗損失
 •   Touch sensor & MEMS controller  •  針對智慧電表PLC通訊應用的線路驅動器
 •   下週 深圳 llC 2012 關於PCB免費工具的研討會  •  邏輯閘的應用


EE人生人氣排行
 
返回頁首