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

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

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

將OpenCL編譯到FPGA

李建設(shè) ? 來(lái)源:云漢007 ? 作者:云漢007 ? 2022-08-29 08:07 ? 次閱讀

異構(gòu)計(jì)算是指不斷增長(zhǎng)的一類系統(tǒng),其中應(yīng)用程序在不同的處理器和加速器設(shè)備的混合上執(zhí)行以最大化吞吐量。在這種系統(tǒng)上執(zhí)行程序需要一種編程范式,該范式向應(yīng)用程序開發(fā)人員提供一致的系統(tǒng)視圖。OpenCL 框架是為解決異構(gòu)計(jì)算系統(tǒng)的需求和挑戰(zhàn)而創(chuàng)建的行業(yè)標(biāo)準(zhǔn)。

在最基本的層面上,OpenCL 框架為應(yīng)用程序程序員提供了與設(shè)備供應(yīng)商無(wú)關(guān)的平臺(tái)定義和跨所有實(shí)現(xiàn)該標(biāo)準(zhǔn)的設(shè)備的單一內(nèi)存模型。這些特性使 OpenCL 程序員能夠?qū)W⒂谡陂_發(fā)的應(yīng)用程序的核心挑戰(zhàn),而不是特定計(jì)算設(shè)備的特定細(xì)節(jié)。

OpenCL 框架的第一個(gè)組件是平臺(tái),它定義了可用于執(zhí)行程序的資源。在一個(gè) OpenCL 平臺(tái)中,總是有一個(gè)主機(jī)處理器和至少一個(gè)加速設(shè)備。主機(jī)處理器負(fù)責(zé)將作業(yè)分派給加速器以及啟動(dòng)主機(jī)/加速器內(nèi)存?zhèn)鬏?。此主機(jī)始終使用 CPU 實(shí)現(xiàn),加速器可以是 CPU、GPUFPGA。這些加速設(shè)備的控制是通過一組通用的 API 函數(shù)來(lái)實(shí)現(xiàn)的,這些 API 函數(shù)是 OpenCL 標(biāo)準(zhǔn)的一部分。

加速設(shè)備上的作業(yè)采用內(nèi)核執(zhí)行的形式。內(nèi)核是運(yùn)行在加速設(shè)備上的應(yīng)用程序的計(jì)算功能。OpenCL 中的一個(gè)應(yīng)用程序可能有一個(gè)或多個(gè)內(nèi)核,每個(gè)內(nèi)核的特點(diǎn)是表達(dá)一個(gè)數(shù)據(jù)并行操作。例如,圖 1 顯示了將在 CPU 上執(zhí)行的程序轉(zhuǎn)換為適合 OpenCL 的數(shù)據(jù)和任務(wù)并行表示。

poYBAGL0iA-AJB-WAACxDyvwwLI066.jpg

圖 1:從順序到 sata 和任務(wù)并行應(yīng)用程序

在圖 1 中代碼的順序版本中,函數(shù) f、g 和 h 在“for”循環(huán)內(nèi)執(zhí)行。每個(gè)函數(shù)將數(shù)據(jù)集 X 和 Y 作為輸入源并產(chǎn)生一個(gè)輸出 T,它不會(huì)被“for”循環(huán)內(nèi)的任何其他函數(shù)消耗。因此,代碼的順序版本中的循環(huán)可以分配給函數(shù) f、g 和 h,以創(chuàng)建應(yīng)用程序的任務(wù)并行表示,如圖 1 的中心列所示。如果函數(shù) f、g 和 h 的每次調(diào)用獨(dú)立于上一個(gè)和下一個(gè)調(diào)用,則應(yīng)用程序是任務(wù)和數(shù)據(jù)并行的,如圖 1 的右側(cè)列所示。函數(shù) f、g 或 h 的每次調(diào)用代表加速設(shè)備執(zhí)行的一個(gè)工作項(xiàng)。根據(jù)可用的計(jì)算資源,

除了為應(yīng)用程序員提供與設(shè)備無(wú)關(guān)的數(shù)據(jù)并行編程模型外,OpenCL 還提供了統(tǒng)一的內(nèi)存模型層次結(jié)構(gòu),如圖 2 所示。

pYYBAGL0iBKAIurRAAC-Mg_PPqc376.jpg

圖 2:OpenCL 內(nèi)存模型

在模型的應(yīng)用層,內(nèi)存空間分為主機(jī)內(nèi)存和設(shè)備內(nèi)存。與設(shè)備相關(guān)的內(nèi)存進(jìn)一步分為三個(gè)層次結(jié)構(gòu),包括全局內(nèi)存、本地內(nèi)存和私有內(nèi)存。全局內(nèi)存由連接到設(shè)備的內(nèi)存組件(如 SDRAM)創(chuàng)建。映射到全局內(nèi)存的緩沖區(qū)的管理由主機(jī)代碼應(yīng)用程序通過使用 OpenCL API 函數(shù)來(lái)處理。OpenCL API 函數(shù)用于確定緩沖區(qū)的大小以及對(duì)緩沖區(qū)的讀寫訪問。在 OpenCL 內(nèi)存模型支持的所有內(nèi)存類型中,請(qǐng)務(wù)必記住,全局內(nèi)存是容量最大、延遲最長(zhǎng)的內(nèi)存,

OpenCL 和 FPGA

FPGA 可以在制造后針對(duì)不同的算法進(jìn)行編程,如圖 3 所示,具有執(zhí)行邏輯操作的查找表 (LUT)、存儲(chǔ) LUT 結(jié)果的觸發(fā)器 (FF) 以及元件之間的連接和 I/O 焊盤,用于將數(shù)據(jù)輸入和輸出 IC。當(dāng)代 FPGA 架構(gòu)包含額外的計(jì)算 (DSP)、數(shù)據(jù)存儲(chǔ) (BRAM)、高速串行收發(fā)器和片外存儲(chǔ)器控制器塊。這些元素的組合為 FPGA 提供了為給定軟件工作負(fù)載實(shí)現(xiàn)自定義邏輯的靈活性。

poYBAGL0iBSAbTnrAADG3oMSFa0783.jpg

圖 3:FPGA 的基本結(jié)構(gòu)

在 OpenCL 的上下文中,由于內(nèi)核代碼的數(shù)據(jù)并行特性,F(xiàn)PGA 架構(gòu)非常適合這種工作負(fù)載。與其他能夠執(zhí)行 OpenCL 內(nèi)核的設(shè)備不同,F(xiàn)PGA 架構(gòu)可以使用針對(duì)特定內(nèi)核完全優(yōu)化的內(nèi)核進(jìn)行定制,從而允許內(nèi)核執(zhí)行的并行性隨 FPGA 設(shè)備的大小而擴(kuò)展。

在加速器計(jì)算單元上執(zhí)行的 OpenCL 應(yīng)用程序內(nèi)核。計(jì)算單元是指執(zhí)行內(nèi)核功能中的操作的處理器內(nèi)核或加速器邏輯。

SHA-1 算法

SHA-1 算法是最常用的加密哈希函數(shù)之一。使用這些功能確保和檢查數(shù)據(jù)完整性的能力已經(jīng)成為在線簽名和作為電子商務(wù)解決方案核心的安全套接字層 (SSL) 的基礎(chǔ)。該函數(shù)非常適合 FPGA,因?yàn)樗峭ㄟ^ 80 輪處理對(duì) 512 位數(shù)據(jù)集的與、異或、旋轉(zhuǎn)、加法或移位操作組成的。每輪計(jì)算中使用的 512 位數(shù)據(jù)負(fù)載可以并行或塊方式計(jì)算。

poYBAGL0iBeAfqgZAAC5wk9Cv6Q576.jpg

圖 4:用于 SHA-1 的 FPGA 計(jì)算單元

SHA-1 功能的 FPGA 實(shí)現(xiàn)如圖 4 所示。在此設(shè)計(jì)中,關(guān)鍵元素是創(chuàng)建自定義計(jì)算單元,以包含計(jì)算單個(gè) SHA-1 所需的 80 輪處理。通過將所有 80 輪處理分組到同一個(gè)處理邏輯中,應(yīng)用程序設(shè)計(jì)人員可以最大限度地減少與標(biāo)準(zhǔn) CPU 實(shí)現(xiàn)所需的高速緩存或內(nèi)存元素的交互。這反過來(lái)又增加了此功能的吞吐量并降低了維持所達(dá)到的吞吐量所需的功耗。下表總結(jié)了 FPGA 實(shí)現(xiàn)與 CPU 實(shí)現(xiàn)的優(yōu)勢(shì):

pYYBAGL0iBqAdvi-AACSthKU7vw990.jpg

對(duì)于此比較,英特爾 Haswell CPU 有 12 個(gè)內(nèi)核,能夠執(zhí)行任何 OpenCL 內(nèi)核代碼,但未針對(duì)任何特定工作負(fù)載進(jìn)行優(yōu)化。相比之下,F(xiàn)PGA 實(shí)現(xiàn)有 16 個(gè)內(nèi)核優(yōu)化為僅執(zhí)行 SHA1 工作負(fù)載。加速器計(jì)算單元定制級(jí)別的差異直接轉(zhuǎn)化為該工作負(fù)載的兩個(gè)設(shè)備之間的性能差異。

Xilinx FPGA 結(jié)果是通過使用適用于 OpenCL、C 和 C++ 的 SDAccel 開發(fā)環(huán)境編譯 SHA1 算法并在 Xilinx Virtex 7 器件上運(yùn)行生成的二進(jìn)制程序生成的。SDAccel 利用 FPGA 為數(shù)據(jù)中心應(yīng)用程序加速提供高達(dá) 25 倍的性能功耗比,并結(jié)合了業(yè)界第一個(gè)支持 OpenCL、C 和 C++ 內(nèi)核的任意組合的架構(gòu)優(yōu)化編譯器,以及庫(kù)、開發(fā)板和第一個(gè)完整的 CPU/GPU類似 FPGA 的開發(fā)和運(yùn)行時(shí)經(jīng)驗(yàn)。

審核編輯:湯梓紅

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

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

    關(guān)注

    68

    文章

    10698

    瀏覽量

    209348
  • OpenCL
    +關(guān)注

    關(guān)注

    2

    文章

    48

    瀏覽量

    33205
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    基于OpenCL標(biāo)準(zhǔn)的FPGA設(shè)計(jì)

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

    Intel altera opencl 入門

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

    Altera OpenCL

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

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

    ` 用openCL寫了個(gè)機(jī)器學(xué)習(xí)算法,用a10gx的板子的BSP編譯運(yùn)行沒問題,但是a10gx板子太貴了。 于是準(zhǔn)備買DE10-Standard 來(lái)做研究,下了BSP在bashrc里改了文件后,編譯
    發(fā)表于 04-18 17:30

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

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

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

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

    面向Altera FPGAOpenCL:提高性能和設(shè)計(jì)效能

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

    用于OpenCL的英特爾FPGA SDK資料

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

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

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

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

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

    如何使用OpenCL輕松實(shí)現(xiàn)FPGA應(yīng)用編程

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

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

    開發(fā)環(huán)境,以及如何編譯和執(zhí)行C5P的示例項(xiàng)目。請(qǐng)注意,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>使用手冊(cè)免費(fèi)下載

    使用OpenCL for FPGA設(shè)計(jì)200萬(wàn)點(diǎn)頻域?yàn)V波器

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