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