異構計算是指不斷增長的一類系統,其中應用程序在不同的處理器和加速器設備的混合上執行以最大化吞吐量。在這種系統上執行程序需要一種編程范式,該范式向應用程序開發人員提供一致的系統視圖。OpenCL 框架是為解決異構計算系統的需求和挑戰而創建的行業標準。
在最基本的層面上,OpenCL 框架為應用程序程序員提供了與設備供應商無關的平臺定義和跨所有實現該標準的設備的單一內存模型。這些特性使 OpenCL 程序員能夠專注于正在開發的應用程序的核心挑戰,而不是特定計算設備的特定細節。
OpenCL 框架的第一個組件是平臺,它定義了可用于執行程序的資源。在一個 OpenCL 平臺中,總是有一個主機處理器和至少一個加速設備。主機處理器負責將作業分派給加速器以及啟動主機/加速器內存傳輸。此主機始終使用 CPU 實現,加速器可以是 CPU、GPU 或 FPGA。這些加速設備的控制是通過一組通用的 API 函數來實現的,這些 API 函數是 OpenCL 標準的一部分。
加速設備上的作業采用內核執行的形式。內核是運行在加速設備上的應用程序的計算功能。OpenCL 中的一個應用程序可能有一個或多個內核,每個內核的特點是表達一個數據并行操作。例如,圖 1 顯示了將在 CPU 上執行的程序轉換為適合 OpenCL 的數據和任務并行表示。
圖 1:從順序到 sata 和任務并行應用程序
在圖 1 中代碼的順序版本中,函數 f、g 和 h 在“for”循環內執行。每個函數將數據集 X 和 Y 作為輸入源并產生一個輸出 T,它不會被“for”循環內的任何其他函數消耗。因此,代碼的順序版本中的循環可以分配給函數 f、g 和 h,以創建應用程序的任務并行表示,如圖 1 的中心列所示。如果函數 f、g 和 h 的每次調用獨立于上一個和下一個調用,則應用程序是任務和數據并行的,如圖 1 的右側列所示。函數 f、g 或 h 的每次調用代表加速設備執行的一個工作項。根據可用的計算資源,
除了為應用程序員提供與設備無關的數據并行編程模型外,OpenCL 還提供了統一的內存模型層次結構,如圖 2 所示。
圖 2:OpenCL 內存模型
在模型的應用層,內存空間分為主機內存和設備內存。與設備相關的內存進一步分為三個層次結構,包括全局內存、本地內存和私有內存。全局內存由連接到設備的內存組件(如 SDRAM)創建。映射到全局內存的緩沖區的管理由主機代碼應用程序通過使用 OpenCL API 函數來處理。OpenCL API 函數用于確定緩沖區的大小以及對緩沖區的讀寫訪問。在 OpenCL 內存模型支持的所有內存類型中,請務必記住,全局內存是容量最大、延遲最長的內存,
OpenCL 和 FPGA
FPGA 可以在制造后針對不同的算法進行編程,如圖 3 所示,具有執行邏輯操作的查找表 (LUT)、存儲 LUT 結果的觸發器 (FF) 以及元件之間的連接和 I/O 焊盤,用于將數據輸入和輸出 IC。當代 FPGA 架構包含額外的計算 (DSP)、數據存儲 (BRAM)、高速串行收發器和片外存儲器控制器塊。這些元素的組合為 FPGA 提供了為給定軟件工作負載實現自定義邏輯的靈活性。
圖 3:FPGA 的基本結構
在 OpenCL 的上下文中,由于內核代碼的數據并行特性,FPGA 架構非常適合這種工作負載。與其他能夠執行 OpenCL 內核的設備不同,FPGA 架構可以使用針對特定內核完全優化的內核進行定制,從而允許內核執行的并行性隨 FPGA 設備的大小而擴展。
在加速器計算單元上執行的 OpenCL 應用程序內核。計算單元是指執行內核功能中的操作的處理器內核或加速器邏輯。
SHA-1 算法
SHA-1 算法是最常用的加密哈希函數之一。使用這些功能確保和檢查數據完整性的能力已經成為在線簽名和作為電子商務解決方案核心的安全套接字層 (SSL) 的基礎。該函數非常適合 FPGA,因為它是通過 80 輪處理對 512 位數據集的與、異或、旋轉、加法或移位操作組成的。每輪計算中使用的 512 位數據負載可以并行或塊方式計算。
圖 4:用于 SHA-1 的 FPGA 計算單元
SHA-1 功能的 FPGA 實現如圖 4 所示。在此設計中,關鍵元素是創建自定義計算單元,以包含計算單個 SHA-1 所需的 80 輪處理。通過將所有 80 輪處理分組到同一個處理邏輯中,應用程序設計人員可以最大限度地減少與標準 CPU 實現所需的高速緩存或內存元素的交互。這反過來又增加了此功能的吞吐量并降低了維持所達到的吞吐量所需的功耗。下表總結了 FPGA 實現與 CPU 實現的優勢:
對于此比較,英特爾 Haswell CPU 有 12 個內核,能夠執行任何 OpenCL 內核代碼,但未針對任何特定工作負載進行優化。相比之下,FPGA 實現有 16 個內核優化為僅執行 SHA1 工作負載。加速器計算單元定制級別的差異直接轉化為該工作負載的兩個設備之間的性能差異。
Xilinx FPGA 結果是通過使用適用于 OpenCL、C 和 C++ 的 SDAccel 開發環境編譯 SHA1 算法并在 Xilinx Virtex 7 器件上運行生成的二進制程序生成的。SDAccel 利用 FPGA 為數據中心應用程序加速提供高達 25 倍的性能功耗比,并結合了業界第一個支持 OpenCL、C 和 C++ 內核的任意組合的架構優化編譯器,以及庫、開發板和第一個完整的 CPU/GPU類似 FPGA 的開發和運行時經驗。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1630文章
21796瀏覽量
605987 -
cpu
+關注
關注
68文章
10902瀏覽量
212997 -
OpenCL
+關注
關注
2文章
48瀏覽量
33381
發布評論請先 登錄
相關推薦
評論