Global Sources
電子工程專輯
 
電子工程專輯 > 嵌入式技術
 
 
嵌入式技術  

透過FPGA協處理器加速演算法執行速度

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

關鍵字:FPGA  協處理器  加速演算法  coprocessor  auxiliary processor unit 

受到面積、功率和成本等約束,目前設計工程師尚無法採用GHz級的處理器實現嵌入式設計。在嵌入式系統中,通常是由相對數量較少的演算法決定最大的運算需求。使用設計自動化工具可以將這些演算法快速轉換到硬體協處理器中,而後協處理器可有效地連接到處理器,以產生‘GHz’級的性能。

本文將研究程式碼加速和程式碼轉換到硬體協處理器的方法,並分析透過一個涉及基於輔助處理器單元(APU)之實際圖形顯示案例的基準數據均衡決策過程。該設計使用了在一個平台FPGA中實現的嵌入式PowerPC。

協處理器的意義

協處理器是一個處理單元,該處理單元與主處理單元共同使用,負責通常由主處理器執行的運算。協處理器的功能通常以硬體實現,用於取代幾種軟體指令。透過將多種程式碼指令簡化為單一指令,以及在硬體中直接實現指令等方式,可實現程式碼加速。

最常用的協處理器是浮點單元(FPU),這是與CPU緊密結合的唯一普通協處理器。目前並沒有通用的協處理器庫,即使這種元件庫存在,仍難以簡單地將協處理器與一個CPU(如Pentium 4)連接。不過,Xilinx Virtex-4 FX FPGA具備一個或兩個PowerPC,且均帶有一個APU介面。透過在FPGA中嵌入處理器,將能在單晶片上實現完整的處理系統。

帶APU介面的PowerPC能在FPGA中實現緊密結合的協處理器。由於頻率需求與接腳數量等限制,採用外部協處理器不大可行。因此,你可以製作一個直接連接到PowerPC的專用協處理器以大幅提高軟體速度。由於FPGA為可編程,因此能快速地開發和測試連接到CPU的協處理器解決方案。

協處理器連接模型

協處理器有三種基本形式:與CPU匯流排連接、與I/O連接,以及與指令管線連接(Instruction Pipeline Connection),另外還有一些混合形式。

1. CPU匯流排連接:處理器匯流排連接加速器需要CPU在匯流排上移動數據以及發送命令。通常單一數據處理就需要很多的處理器時脈週期。因為匯流排仲裁以及匯流排驅動的時脈是處理器時脈的分頻,所以會降低數據處理速度。一個與匯流排連接的加速器可以包含一個記憶體存取(DMA)引擎。在增加額外的邏輯情況下,DMA引擎允許協處理器工作在位於連接到匯流排之記憶體上的數據區塊。

2. I/O連接:與I/O連接的加速器直接連接到一個專用I/O埠。通常透過GET或PUT函數提供數據和控制。由於缺少了仲裁,其控制複雜度與連接元件數均得以減少,因此這些介面的驅動時脈通常比處理器匯流排更快。以Xilinx Fast Simplex Link(FSL)為例,FSL是一種簡單的FIFO介面,可連接到Xilinx MicroBlaze軟核心處理器或Virtex-4 FX PowerPC。與處理器匯流排介面中的數據移動相較,透過FSL移動的數據具有較低的延遲和更高的數據率。

3. 指令管線連接:指令管線連接加速器直接連接到CPU的運算核心。透過與指令管線連接,協處理器可執行CPU無法識別的指令。作業、結果以及狀態直接從數據執行管線向外傳遞或接收。單一運算即可實現兩個作業的處理,同時返回一個結果和狀態。

作為一個直接連接的介面,連接到指令管線的加速器可以用比處理器匯流排更快的時脈驅動。Xilinx透過APU介面實現這種協處理器連接模型,對標準的雙作業指令,在數據控制和數據傳輸上可縮減10倍的時脈週期。APU控制器還連接到數據緩衝記憶體控制器,可透過該控制器執行數據加載/儲存作業,因此APU介面能在每秒內移動數MB數據,速度接近DMA。

I/O連接的加速器或指令管線連接加速器可以與匯流排連接加速器結合。在增加額外的邏輯條件下,設計人員可以製作一個加速器,這個加速器執行在一個位於匯流排連接記憶體上的數據區塊上,透過一個快速、低延遲的介面接收命令並返回狀態。

本文介紹的C-HDL工具組可實現匯流排連接和I/O連接加速器,它還能實現連接到PowerPC的APU介面加速器。儘管APU連接是基於指令管線的,C-HDL工具組也能實現一種I/O管線介面,該介面具有I/O連接加速器的標準性能。

FPGA/PowerPC/APU介面

FPGA允許硬體設計工程師利用單晶片上的處理器、解碼邏輯、週邊設備和協處理器實現一個完整的運算系統。FPGA可以包含數千到數十萬個邏輯單元,用以實現一個處理器,如Xilinx PicoBlaze或MicroBlaze處理器,或是一個或更多的硬邏輯單元(如Virtex-4 FX PowerPC)。大量的邏輯單元可實現數據處理單元,這些單元與處理器系統一起工作,由處理器對其進行控制或監控。

由於FPGA是一種可編程元件,能在設計過程中進行編程並對其進行測試,因此一旦發現設計缺陷,將能立即對其重新編程設計。FPGA還能實現硬體運算功能,而這在過去的實現成本相當高。另外,由於CPU管線與FPGA邏輯之間緊密結合,因此能讓用戶製作高性能軟體加速器。

圖1的模組結構圖顯示了PowerPC、整合的APU控制器以及一個與之相連的協處理器。來自快取記憶體或記憶體中的指令可立即出現在CPU解碼器和APU控制器上,若CPU能識別指令才執行這些指令,否則APU控制器或用戶製作的協處理器可對指令做出應答並執行指令。一個或者兩個作業會被傳遞到協處理器,並返回其結果或狀態。APU介面還支援用單一指令發送單一數據單元。數據單元的大小範圍從1個位元組到4個32位元的字符。


圖1:PowerPC、整合的APU控制器和協處理器

透過一個結構協處理器匯流排(FCB),可以將一個或多個協處理器連接到APU介面。連接到匯流排的協處理器範圍包括現有的核心(如FPU)到用戶製作的協處理器。一個協處理器可以連接到FCB用於控制和狀態運算,並連接到一個處理器匯流排,以實現直接記憶體數據區塊存取以及DMA數據傳遞。像FSL這種簡化的連接方案也能用於FCB和協處理器之間,以便在犧牲一定性能條件下實現FIFO數據和控制通訊。

為展示指令管線連接加速器的性能優勢,我們首先採用一個處理器匯流排連接FPU實現一項設計,然後採用APU/FCB連接的FPU實現設計。表1為兩種實現方式下有限脈衝響應(FIR)濾波器的性能。如表所示,連接到一個指令管線的FPU使軟體浮點運算速度增加30倍,而APU介面相較於匯流排連接FPU來說則改善了近4倍。


表1:未加速與加速的浮點性能

從C程式碼轉換到HDL

採用C到HDL的轉換工具將C程式碼轉換到HDL加速器是一種製作硬體協處理器的高效方法。圖2及以下步驟詳細描述了C到HDL的轉換過程:


圖2:C-HDL設計流程

1. 使用標準C工具實現應用程式或演算法。可開發一種軟體測試台(test bench)用於基線性能和正確性(主機或桌上型電腦模擬)測試,並使用編譯器(如gprof)以確定關鍵函數。

2. 確定浮點到定點轉換是否適當。使用庫或巨集來輔助這種轉換,使用一個基線測試台來分析性能和準確性。使用編譯器來重新評估關鍵函數。

3. 使用C到HDL轉換工具,例如Impulse C,在每個關鍵功能上重覆,以實現將演算法分割成平行的過程;製作軟硬體流程介面(串流、共享記憶體、訊號);對關鍵的程式碼區段(如內部程式碼循環)進行自動最佳化和平行化;使用桌面電腦模擬、週期準確的C模擬,並確實在系統測試期間對獲得的平行演算法進行測試和驗證。

4. 使用C到HDL轉換工具,將關鍵的程式碼區段轉換到HDL協處理器。

5. 將協處理器連接到APU介面用於最終測試。

Impulse:C到HDL轉換工具

如圖3所示的Impulse C,透過結合使用C相容庫函數與Impulse CoDeveloper C程式碼到硬體的編譯器,使嵌入式系統設計工程師能製作高度平行的FPGA加速應用。Impulse C透過使用定義完好的數據通訊、消息傳遞和同步處理機制,簡化了軟硬體混合應用設計。Impulse C提供了C程式碼(如循環管線處理、展開和運算符調度)的自動最佳化以及互動式工具,能對每個週期的硬體行為進行分析。


圖3. Impulse C

Impulse C主要針對數據串流應用所設計,但它也具有足夠的靈活性以支援其他編程模型,包括使用共享記憶體。這一點很重要,因為基於FPGA的不同應用都具有不同性能和數據要求。在一些應用中,透過區塊記憶體讀取和寫入在嵌入式處理器和FPGA之間轉移數據是有必要的;在其他情況下,串流通訊訊息通道可提供更高性能。可實現快速建模、編譯和評估可選演算法的能力,對實現某種最佳應用來說非常重要。

目前為止,Impulse C庫已包含了以新數據類型和預定義函數調用形式的最少C語言擴展。使用Impulse C函數調用,你可以定義多個平行程式區段(調用進程),並使用串流、訊號和其他機制描述它們的互連。Impulse C編譯器會轉換這些C語言進程,並將其最佳化成能夠合成到FPGA的較低階HDL,或可透過廣泛存在的C交叉編譯器將其編譯到支援的微處理器上標準C(具有相關的庫調用)。

完整的CoDeveloper開發環境包括與標準C編譯器和除錯器(包括微軟Visual Studio和GCC/GDB)相容的桌上型電腦模擬庫。使用這些庫,Impulse C程式設計工程師能編譯和執行其用於演算法驗證和除錯的應用程式。C程式設計工程師還能檢驗平行進程,分析數據移動,並利用CoDeveloper Application Monitor解決進程到進程的通訊問題。

在編譯時,Impulse C應用程式的輸出是一組硬體和軟體原始碼文件,用於輸入到FPGA合成工具。這些文件包括:

1. 自動產生HDL檔案以描述編譯硬體進程;

2. 自動產生HDL檔案以描述連接硬體進程到系統匯流排所需的串流、訊號和記憶體元件;

3. 自動產生的軟體組件(包括執行時間庫)可用於設立任何軟硬體串流連接的軟體端;

4. 附加檔案,包括腳本文件,對輸入應用程式到目標FPGA佈局佈線環境而言非常重要。這種編譯進程可實現完整的應用,包括所需的硬體/軟體介面,可在基於FPGA的編程平台上實現。

設計實例

圖4所示的Mandelbrot圖是一種典型的不規則幾何圖形,該圖形在科學和工程學界廣泛地被用於模擬無序事件,例如天氣。不規則圖形也適合產生紋理以及在視訊顯示應用上成像。Mandelbrot圖像描述為自相似性。只要放大圖形的局部,就可獲得與整個圖形類似的另外一個圖形。


圖4:Mandelbrot圖

Mandelbrot圖形是軟硬體協同設計的理想選擇,因為它具有單個運算密集的函數。透過將關鍵函數轉移到硬體實現,將大幅增加整個系統的速度,讓這個關鍵函數更快。Mandelbrot應用還能清楚地區分硬體和軟體進程,而使用C-HDL工具將很容易實現。

我們使用CoDeveloper工具組作為C-HDL工具組用於該設計實例,我們只修改了軟體Mandelbrot C程式以使其與C-HDL工具相容。我們的改變包括:將軟體計劃分割成不同的進程(順序執行的獨立單元);函數介面轉換(硬體到軟體)到串流;增加編譯器指令對產生的硬體進行最佳化。隨後使用CoDeveloper工具組來製作Pcore協處理器,將該協處理器輸入到Xilinx Platform Studio(XPS)中。利用XPS,我們將PC連接到PowerPC APU控制器介面,並測試系統。

我們對Mandelbrot圖像紋理問題、圖像濾波應用和三倍DES加密的性能改善進行了測量。性能改善顯示了從11倍到34倍的加速,如表2所示。


表2:透過協處理器加速器的演算法加速性能對比

本文小結

受功率、尺寸和成本的約束,設計人員可能需做出一個並非理想的處理器選擇,通常所選擇處理器性能比期望的性能低。當軟體程式碼執行速度不夠快時,協處理器程式碼加速器便成為一種極具吸引力的解決方案。你可以在HDL中手動設計加速器或使用C-HDL工具自動將C程式碼轉換成HDL。

使用Impulse C這類C-HDL工具能加速並簡化加速器的產生過程。Virtex-4 FX FPGA具有兩個嵌入式PowerPC,能實現處理器指令管線到軟體加速器之間的緊密連接。如本文所展示的,關鍵軟體程式的速度增加了10~30倍,讓300MHz的PowerPC提供相等或高於高性能GHz級處理器的性能。本文所述的每個實例只需幾天的時間來產生,顯示了採用C-HDL流程的快速設計、實現和測試優勢。

作者:

Glenn Steiner

Kunal Shenoy

Dan Isaacs

Xilinx公司

David Pellerin

ImpulseC公司

david.pellerin@impulsec.com




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


EE人生人氣排行
 
返回頁首