0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將OpenCL編譯到FPGA

李建設 ? 來源:云漢007 ? 作者:云漢007 ? 2022-08-29 08:07 ? 次閱讀

異構(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、GPUFPGA。這些加速設備的控制是通過一組通用的 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ù)和任務并行表示。

poYBAGL0iA-AJB-WAACxDyvwwLI066.jpg

圖 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 所示。

pYYBAGL0iBKAIurRAAC-Mg_PPqc376.jpg

圖 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)自定義邏輯的靈活性。

poYBAGL0iBSAbTnrAADG3oMSFa0783.jpg

圖 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ù)負載可以并行或塊方式計算。

poYBAGL0iBeAfqgZAAC5wk9Cv6Q576.jpg

圖 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)勢:

pYYBAGL0iBqAdvi-AACSthKU7vw990.jpg

對于此比較,英特爾 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)驗。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21538

    瀏覽量

    600450
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10768

    瀏覽量

    210418
  • OpenCL
    +關(guān)注

    關(guān)注

    2

    文章

    48

    瀏覽量

    33239
收藏 人收藏

    評論

    相關(guān)推薦

    Altera發(fā)布面向FPGAOpenCL解決方案 簡化FPGA開發(fā)

    Altera公司近日發(fā)布其面向FPGAOpenCL (開放計算語言)早期使用計劃(EAP),支持客戶提前了解Altera面向FPGAOpenCL解決方案。采用這一開放標準,設計團隊
    發(fā)表于 09-04 08:47 ?832次閱讀

    充分發(fā)揮FPGA優(yōu)勢 Altera首推新穎OpenCL工具

    Altera宣布業(yè)界首款支持FPGAOpenCL工具,進一步加速了FPGA在異構(gòu)系統(tǒng)中的應用;OpenCL軟件開發(fā)套件支持開發(fā)人員充分發(fā)揮FPGA
    發(fā)表于 11-06 14:26 ?1502次閱讀

    基于OpenCL標準的FPGA設計

    FPGA上使用OpenCL標準,與目前的硬件體系結(jié)構(gòu)(CPU、GPU,等)相比,能夠大幅度提高性能,同時降低了功耗。此外,與使用Verilog或者VHDL等底層硬件描述語言(HDL)的傳統(tǒng)FPGA
    發(fā)表于 05-26 09:10 ?4184次閱讀

    Intel altera opencl 入門

    今天給大俠帶來Intel altera opencl 入門,話不多說,上貨。 概述 Intel altera 的 OpenCL 主要面向信號處理類應用的客戶,是用C語言開發(fā)FPGA的利器
    發(fā)表于 06-04 18:25

    Altera OpenCL

    各位大牛晚上好,是這樣的,小弟目前在做一個Altera OpenCL的工作,具體是OpenCL的kernel通過Altera提供的工具轉(zhuǎn)換成aocx和Quartus工程,然后下載到FPGA
    發(fā)表于 03-11 20:32

    FPGA編譯openCL內(nèi)核文件出錯

    ` 用openCL寫了個機器學習算法,用a10gx的板子的BSP編譯運行沒問題,但是a10gx板子太貴了。 于是準備買DE10-Standard 來做研究,下了BSP在bashrc里改了文件后,編譯
    發(fā)表于 04-18 17:30

    什么是OpenCL?面向FPGAOpenCL有什么優(yōu)點?

      很多工程師朋友對OpenCL以及面向FPGAOpenCL很感興趣,也有很多相關(guān)問題提出。這里發(fā)一篇小小的技術(shù)普及文章,以供大家參考學習,歡迎參考...  
    發(fā)表于 09-17 08:26

    Altera發(fā)布業(yè)界第一個面向FPGAOpenCL計劃

    Altera公司(NASDAQ: ALTR)今天發(fā)布FPGA和SoC FPGA的開放計算語言(OpenCL?)標準開發(fā)計劃。OpenCL標準是基于C語言的開放標準,適用于并行編程。Al
    發(fā)表于 11-16 16:12 ?721次閱讀

    面向Altera FPGAOpenCL:提高性能和設計效能

    開放計算語言(OpenCL)編程模型與Altera的并行FPGA體系結(jié)構(gòu)相結(jié)合,實現(xiàn)了功能強大的系統(tǒng)加速解決方案。面向OpenCL的Altera SDK為您提供了設計環(huán)境,工程師很容易在FPG
    發(fā)表于 11-06 14:56 ?1220次閱讀

    用于OpenCL的英特爾FPGA SDK資料

    用于OpenCL的英特爾FPGA SDK
    發(fā)表于 03-22 15:02 ?8次下載

    C/C++/OpenCL 應用編譯的SDSoC開發(fā)

    應用大比拼開擂 基于vivado HLS的幀差圖像實現(xiàn) 基于FPGA的實時移動目標的追蹤 類似嵌入式 C/C++/OpenCL 應用開發(fā)的體驗 SDSoC 開發(fā)環(huán)境可為異構(gòu) Zynq SoC 及 MPSoC 部署
    發(fā)表于 05-21 14:16 ?2177次閱讀

    針對OpenCL、C和 C++的SDAccel開發(fā)環(huán)境可利用FPGA實現(xiàn)數(shù)據(jù)中心應用加速

    系列的最新成員,業(yè)界首款支持 OpenCL、C 和 C++ 內(nèi)核任意組合的架構(gòu)優(yōu)化編譯器、庫、開發(fā)板完美結(jié)合在一起,在 FPGA 上首次實現(xiàn)了完全類似 CPU/GPU 的開發(fā)和運行時
    發(fā)表于 08-30 17:00 ?1149次閱讀

    如何使用OpenCL輕松實現(xiàn)FPGA應用編程

    應用能夠有更高的性能,您需要熟悉如下介紹的硬件。另外,將會介紹編譯優(yōu)化選項,有助于您的 OpenCL 應用更好的實現(xiàn) RTL 的轉(zhuǎn)換和映射,并部署
    發(fā)表于 07-16 17:58 ?6409次閱讀
    如何使用<b class='flag-5'>OpenCL</b>輕松實現(xiàn)<b class='flag-5'>FPGA</b>應用編程

    Intel Cyclone V 開發(fā)板OpenCL使用手冊免費下載

    開發(fā)環(huán)境,以及如何編譯和執(zhí)行C5P的示例項目。請注意,OpenCL編碼指令不在本文檔的范圍內(nèi),但用戶可以參考Intel FPGA SDK for OpenCL Programming
    發(fā)表于 09-01 08:00 ?7次下載
    Intel Cyclone V 開發(fā)板<b class='flag-5'>OpenCL</b>使用手冊免費下載

    使用OpenCL for FPGA設計200萬點頻域濾波器

      本文介紹如何使用 Altera OpenCL SDK for FPGA 設計 200 萬點頻域濾波器。所有功能驗證均使用軟件樣式的仿真完成,并且每個硬件編譯都能正常工作。我們沒有打開硬件模擬器,也從不擔心時序收斂。
    的頭像 發(fā)表于 06-09 16:21 ?1384次閱讀
    使用<b class='flag-5'>OpenCL</b> for <b class='flag-5'>FPGA</b>設計200萬點頻域濾波器