OpenCL標準簡介
OpenCL應用程序含有兩部分。OpenCL主程序是純軟件例程,以標準C/C++編寫,可以運行在任何類型的微處理器上。例如,這類處理器可以是FPGA中的嵌入式軟核處理器、硬核ARM處理器或者外置x86處理器,如圖4所示。

在這一主軟件例程執行期間的某一點,某一功能有可能需要很大的計算量,這就可以受益于并行器件的高度并行加速功能,例如CPU、GPU、FPGA等器件。要加速的功能被稱為OpenCL內核。采用標準C編寫這些內核;但是,采用結構對其進行注釋,以設定并行處理操作和存儲器等級。圖5中的例子對兩個數組a和b進行矢量加法,將結果寫回輸出數組應答中。矢量的每一元素都采用了并行線程,當采用像FPGA這類具有大量精細粒度并行單元的器件進行加速時,能夠很快的計算出結果。主程序使用標準OpenCL應用程序接口(API),支持將數據傳送至FPGA,調用FPGA內核,傳回得到的數據。

1Khronos集團網站對OpenCL標準進行了詳細的介紹。
與CPU和GPU不同,其并行線程可以在不同的內核中執行,而FPGA能夠提供不同的策略。可以把內核功能傳送到專用深度流水線硬件電路中,它使用了流水線并行處理概念,在本質上就是多線程的。這些流水線的每一條都可以復制多次,與一條流水線相比,提供更強的并行處理功能。如圖5所示,可以通過級聯功能單元實現矢量加法內核,在OpenCL描述中實現每一操作,進行復制以滿足實際應用的吞吐量和延時要求。
雖然所顯示的只是一個簡單表征,但每個功能單元都可以是深度流水線,以保證最終電路的工作頻率足夠高。此外,編譯器可以建立電路來管理與外部系統的通信。在這個例子中,DDRx控制器和PHY連接至內核,使其能夠高效訪問片外陣列。類似的,PCI Express?(PCIe?)IP自動例化,連接至內核,這樣,x86主機能夠通過OpenCLAPI與FPGA加速器進行通信。
在FPGA上實現OpenCL標準的優勢
使用OpenCL描述來開發FPGA設計,與基于HDL設計的傳統方法相比,具有很多優勢。最顯著的優勢如圖6所示。開發軟件可編程器件的流程一般包括進行構思、在C等高級語言中對算法編程,然后使用自動編譯器來建立指令流。

這一方法可以與傳統基于FPGA的設計方法相比。這里,設計人員的主要工作是對硬件按照每個周期進行描述,用于實現其算法。傳統流程涉及到建立數據通路,如圖7所示,通過狀態機來控制這些數據通路,使用系統級工具(例如,SOPCBuilder、PlatformStudio)連接至底層IP內核,由于必須要滿足外部接口帶來的約束,因此,需要處理時序收斂問題。OpenCL編譯器的目的是幫助設計人員自動完成所有這些步驟,使他們能夠集中精力定義算法,而不是重點關注乏味的硬件設計。以這種方式進行設計,設計人員很容易移植到新FPGA,性能更好,功能更強,這是因為OpenCL編譯器將相同的高級描述轉換為流水線,從而發揮了FPGA新器件的優勢。

案例:MonteCarloBlack-Scholes方法
在金融市場上最重要的一個基準測試方法是通過Monte Carlo Black-Scholes方法計算期權價格。該方法基于對底層股票價格的隨機仿真,以及數百萬不同路徑上的平均預期收益。圖8以圖形化的方式顯示了這類仿真的一個例子。

圖9顯示了進行這一計算的高級算法結構。首先采用Mersenne旋轉隨機數發生器來創建均勻分布的數值。將隨機數序列送入逆正態累積密度函數,以產生正態分布序列。然后,使用幾何布朗運動,這些隨機數用于仿真股票價格的變化。在每一仿真通路的最后,記錄看漲期權的收益,進行平均來產生收益預期值。整個算法通過大約300行的OpenCL代碼來實現,可以從FPGA移植到CPU、GPU。

利用針對Altera FPGA開發的OpenCL工作臺,可以產生很好的基準測試結果,如表1所示。與相應的GPU相比,面向Stratix? IV FPGA EP4SGX530的OpenCL工作臺在吞吐量上超過了CPU和GPU。與相應的GPU相比,在執行相同的代碼時,FPGA解決方案不但提高了吞吐量,保守估計,功耗也只有其五分之一。速率和高功效相結合,降低了大計算量應用的功耗需求。

結論
利用FPGA上的OpenCL標準,與目前的硬件體系結構(CPU、GPU,等)相比,能夠大幅度提高性能,同時降低了功耗。此外,與使用Verilog或者VHDL等底層硬件描述語言(HDL)的傳統FPGA開發方法相比,使用OpenCL標準、基于FPGA的混合系統(CPU+FPGA)具有明顯的產品及時面市優勢。Altera于2010年加入Khronos集團,為標準建設做出了積極貢獻。
原文轉自:http://www.ednchina.com/ART_8800501745_19_35499_AN_a996b8f4.HTM