亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于OpenCL的3DES算法FPGA加速器

        2021-12-20 12:35:16吳健鳳鄭博文柴志雷
        計(jì)算機(jī)工程 2021年12期
        關(guān)鍵詞:數(shù)據(jù)位矢量化編譯器

        吳健鳳,鄭博文,聶 一,柴志雷,3

        (1.江南大學(xué) 人工智能與計(jì)算機(jī)學(xué)院,江蘇 無(wú)錫 214122;2.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫 214122;3.數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫 214215)

        0 概述

        將加解密算法用于數(shù)字貨幣、區(qū)塊鏈、云端數(shù)據(jù)加密等領(lǐng)域時(shí)[1-2],算法應(yīng)具備高強(qiáng)度計(jì)算能力。因此,當(dāng)前服務(wù)器端允許包含異構(gòu)計(jì)算平臺(tái)以增強(qiáng)特定工作負(fù)載的性能,同時(shí)改善整個(gè)系統(tǒng)的維護(hù)成本。OpenCL 是異構(gòu)平臺(tái)的開(kāi)放框架,其中內(nèi)核(Kernel)程序可以在多核CPU 上,同時(shí)也可以在GPU、現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,F(xiàn)PGA)、DSP 上編譯執(zhí)行[3]。當(dāng)前服務(wù)器端除了采用ASIC 或GPU 處理大批量數(shù)據(jù)外,考慮到能效等因素也會(huì)大規(guī)模部署FPGA。

        目前,已有許多基于OpenCL 的加解密算法加速器的研究。文獻(xiàn)[4]設(shè)計(jì)一種基于OpenCL 的MD5算法加速器架構(gòu),提出結(jié)合優(yōu)化CPU 端內(nèi)存分配、復(fù)制內(nèi)核計(jì)算單元的方法,其較未經(jīng)優(yōu)化方法性能提高了6.1 倍。文獻(xiàn)[5]提出基于OpenCL 內(nèi)核的Kuznyechik算法流水線(xiàn)架構(gòu)設(shè)計(jì),結(jié)合輪密鑰按位模2 加消除依賴(lài)、查找表、分解線(xiàn)性變換為布爾函數(shù)等方法,在Intel Arria 10 系列實(shí)現(xiàn)了41 Gb/s 的吞吐率,同時(shí)占用不超過(guò)10%的FPGA 資源。文獻(xiàn)[6]評(píng)估了可擴(kuò)展的多FPGA 架構(gòu)上AES 加密內(nèi)核的性能,在帶有Stratix A3 FPGA 的單個(gè)M506 模塊上,通過(guò)使用OpenCL SIMD4 達(dá)到了較高的吞吐率。文獻(xiàn)[7]結(jié)合OpenCL 工具設(shè)計(jì)SHA1 哈希算法,與基于硬件的描述語(yǔ)言相比,使用Intel FPGA SDK 工具進(jìn)行少量的內(nèi)核代碼更改即可實(shí)現(xiàn)電路的改變,有效節(jié)省了系統(tǒng)開(kāi)發(fā)時(shí)間,其結(jié)合循環(huán)展開(kāi)、循環(huán)流水等策略,在Altera Stratix V 系列器件上達(dá)到3 033 Mb/s 的吞吐率,相比于CPU 性能提升了14 倍。

        DES 算法是1972 年美國(guó)IBM 公司設(shè)計(jì)的對(duì)稱(chēng)密碼體制加密算法。隨著軟硬件的快速發(fā)展,DES算法已被證實(shí)不夠安全。為了克服DES 算法的缺陷,1999 年美國(guó)NIST 發(fā)布了新版本的DES 標(biāo)準(zhǔn)[8],指出DES 僅能用于遺留的系統(tǒng),同時(shí)3DES 將取代DES 成為新的標(biāo)準(zhǔn)。在國(guó)內(nèi),中國(guó)人民銀行的智能卡技術(shù)規(guī)范已支持3DES[9],電子支付系統(tǒng)將3DES方案用于數(shù)據(jù)的加解密[2]。目前3DES 算法在國(guó)內(nèi)外有著廣泛的應(yīng)用,因此,更高效地實(shí)現(xiàn)3DES 加密具有重要意義。

        現(xiàn)有針對(duì)3DES算法的優(yōu)化方法以使用硬件描述語(yǔ)言(Hardware Description Language,HDL)居多[10-11]。雖然HDL 仍是在FPGA 上開(kāi)發(fā)時(shí)序關(guān)鍵型設(shè)計(jì)的合適選擇,但在HDL 中開(kāi)發(fā)應(yīng)用程序需要付出較大代價(jià)并且容易出錯(cuò)。高層次綜合工具(High-Level Synthesis,HLS)是高性能計(jì)算界針對(duì)FPGA 編程的替代解決方案[12]。使用HLS 可以讓幾乎沒(méi)有FPGA開(kāi)發(fā)經(jīng)驗(yàn)的用戶(hù)充分利用FPGA 的優(yōu)勢(shì)。目前,有2 種支持利用FPGA 開(kāi)發(fā)OpenCL 應(yīng)用的商業(yè)編譯器,一個(gè)是用于OpenCL 的Intel FPGA 軟件開(kāi)發(fā)套件(Software Development Kit,SDK),支持Cyclone、Stratix 和Arria 系列的FPGA平臺(tái)[13-15],另一個(gè)是Xilinx,為基于OpenCL 的Kintex 系列和Virtex-7 FPGA 產(chǎn)品提供了完整的SDAccel 開(kāi)發(fā)環(huán)境[16]。

        本文采用數(shù)據(jù)存儲(chǔ)調(diào)整、數(shù)據(jù)位寬改進(jìn)、指令流優(yōu)化、內(nèi)核矢量化、計(jì)算單元復(fù)制等策略,設(shè)計(jì)并實(shí)現(xiàn)一種基于OpenCL 的加解密算法FPGA 加速器架構(gòu),以應(yīng)用廣泛的3DES 算法為例,介紹內(nèi)核程序的設(shè)計(jì)過(guò)程。

        1 3DES 算法原理

        3DES 算法以DES 算法為基礎(chǔ),其通過(guò)進(jìn)行3 次DES 加密增強(qiáng)算法復(fù)雜性,從而保障安全性[17]。DES 算法包含16 輪迭代,使用56 bit 密鑰,而3DES算法包含48 輪迭代,使用168 bit 密鑰。

        1.1 DES 算法

        DES 算法將明文按64 bit 進(jìn)行分組,參與計(jì)算的密鑰長(zhǎng)度固定為64 bit(有效位數(shù)56 bit)。加密流程主要包括初始置換、16 輪循環(huán)迭代、逆初始置換3 個(gè)部分。其中,16 輪迭代過(guò)程中參與計(jì)算的子密鑰由56 bit 密鑰擴(kuò)展而來(lái)[8]。

        DES 算法流程如圖1 所示,其中,64 bit 的輸入明文經(jīng)初始置換分為L(zhǎng)0和R0兩部分,然后進(jìn)行16 輪相同的迭代運(yùn)算,最后經(jīng)過(guò)逆初始置換得到64 bit 的輸出密文。在每一輪迭代中,包含一次異或運(yùn)算和f 函數(shù)運(yùn)算。

        圖1 DES 算法流程Fig.1 Procedure of DES algorithm

        f 函數(shù)原理如圖2 所示,其中,輸入為該輪的Ri-1和該輪對(duì)應(yīng)的子密鑰ki,Ri-1經(jīng)E 盒擴(kuò)展后的結(jié)果與48 bit 的子密鑰ki進(jìn)行異或運(yùn)算,之后經(jīng)S 盒變換、P 盒置換得到32 bit 的輸出。S 盒將6 bit 的輸入轉(zhuǎn)換為4 bit 的輸出,這也是算法中唯一的非線(xiàn)性變換,極大地提高了算法的安全性。S 盒的置換部分使用查找表實(shí)現(xiàn),其將8 個(gè)S 盒的內(nèi)容存儲(chǔ)于片上ROM,有效提高了算法的計(jì)算效率。DES 算法的子密鑰生成模塊輸入為56 bit 的密鑰,經(jīng)16 輪迭代生成16 個(gè)子密鑰ki,分別用于DES 算法的16 輪迭代計(jì)算模塊。在子密鑰生成模塊中,每輪迭代包含循環(huán)左移和密鑰置換操作。

        圖2 f 函數(shù)原理示意圖Fig.2 Schematic diagram of f function principle

        1.2 3DES 算法

        3DES 算法在DES 算法的基礎(chǔ)上發(fā)展而來(lái),其輸入為64 bit 的明文,輸出為64 bit 的密文。與DES 算法不同,3DES 算法包含192 bit(有效長(zhǎng)度168 bit)的密鑰。令Eki(I)和Dki(I)分別表示使用DES 密鑰ki對(duì)數(shù)據(jù)塊I的DES 加密和解密運(yùn)算。3DES 的加密操作如式(1)所示,其將64 bit 的輸入塊I轉(zhuǎn)換成64 bit的輸出塊O1。3DES 的解密操作如式(2)所示,其將64 bit 的輸入塊I轉(zhuǎn)換成64 bit 的輸出塊O2。

        2 基于OpenCL的FPGA設(shè)計(jì)

        OpenCL 為開(kāi)發(fā)人員提供了抽象的內(nèi)存層次結(jié)構(gòu)以生成有效代碼,適合目標(biāo)設(shè)備的內(nèi)存層次結(jié)構(gòu)。OpenCL 內(nèi)存結(jié)構(gòu)由全局內(nèi)存(Global Memory)、常量?jī)?nèi)存(Constant Memory)、局部?jī)?nèi)存(Local Memory)、私有內(nèi)存(Private Memroy)4 種類(lèi)型構(gòu)成[18]。工作項(xiàng)在處理單元(Processing Element,PE)上運(yùn)行,可以訪(fǎng)問(wèn)對(duì)應(yīng)的私有內(nèi)存,工作組在一個(gè)計(jì)算單元(Compute Unit,CU)上運(yùn)行。同一工作組中的工作項(xiàng)擁有共同的局部?jī)?nèi)存。

        OpenCL 程序包含主機(jī)端程序和內(nèi)核程序兩部分。如圖3 所示,內(nèi)核程序運(yùn)行時(shí)系統(tǒng)會(huì)創(chuàng)建一個(gè)整數(shù)索引空間,工作項(xiàng)對(duì)應(yīng)執(zhí)行索引空間的一個(gè)實(shí)例,工作組是工作項(xiàng)的集合,同一工作組中的工作項(xiàng)共享內(nèi)存并可以實(shí)現(xiàn)組內(nèi)同步。工作項(xiàng)在全局索引空間中的坐標(biāo)為該工作項(xiàng)的全局ID,工作項(xiàng)在工作組中的坐標(biāo)為該工作項(xiàng)的局部ID。

        圖3 OpenCL 索引空間示意圖Fig.3 Schematic diagram of OpenCL index space

        本文采用IntelFPGA SDK 實(shí)現(xiàn)3DES 算法加速器設(shè)計(jì)。在FPGA 上構(gòu)建系統(tǒng)之前,SDK 支持在CPU 上仿真OpenCL 應(yīng)用程序。軟件仿真利用CPU模擬FPGA 硬件特性,通常用于功能驗(yàn)證。目前,Intel 的工具鏈不支持硬件仿真[16]。Intel FPGA SDK包含一個(gè)編譯OpenCL 內(nèi)核以創(chuàng)建優(yōu)化硬件鏡像的離線(xiàn)編譯器,該編譯器將內(nèi)核代碼轉(zhuǎn)換成為中間Verilog 形式,然后通過(guò)Quartus II 軟件將其編譯為二進(jìn)制鏡像,該鏡像可在程序運(yùn)行時(shí)加載至FPGA端。由于編譯過(guò)程需要數(shù)小時(shí)來(lái)應(yīng)用適當(dāng)?shù)膬?yōu)化并設(shè)計(jì)出硬件鏡像,因此編譯過(guò)程是離線(xiàn)的,主機(jī)程序僅在運(yùn)行時(shí)才加載硬件鏡像。構(gòu)建完成后,將創(chuàng)建主機(jī)可執(zhí)行文件和二進(jìn)制文件,以在FPGA 上運(yùn)行目標(biāo)程序[19]。

        3 基于OpenCL 的3DES 算法FPGA 加速器

        本文基于OpenCL 實(shí)現(xiàn)3DES 算法FPGA 加速器的設(shè)計(jì),包含主機(jī)端(HOST)程序設(shè)計(jì)與設(shè)備端程序設(shè)計(jì)兩部分:主機(jī)端程序結(jié)合3DES 算法加密的原理,完成主機(jī)端程序?qū)γ魑臄?shù)據(jù)的讀取、初始化、存儲(chǔ)、OpenCL 運(yùn)行時(shí)環(huán)境的創(chuàng)建以及對(duì)Kernel 的調(diào)度與管理;設(shè)備端程序設(shè)計(jì)針對(duì)3DES 算法內(nèi)核計(jì)算模塊進(jìn)行優(yōu)化并形成流水線(xiàn)并行架構(gòu)。同時(shí),采用數(shù)據(jù)存儲(chǔ)調(diào)整、數(shù)據(jù)位寬改進(jìn)策略有效提升實(shí)際帶寬利用率,采用指令流優(yōu)化技術(shù)針對(duì)算法中的循壞迭代進(jìn)行改進(jìn),提高計(jì)算的并行度,采用內(nèi)核矢量化、計(jì)算單元復(fù)制進(jìn)一步提升內(nèi)核性能。

        3.1 主機(jī)端程序設(shè)計(jì)

        主機(jī)端完成明文數(shù)據(jù)的讀取、初始化、存儲(chǔ)、內(nèi)核調(diào)度、管理等工作。Intel FPGA SDK提供了OpenCL平臺(tái)API 及運(yùn)行時(shí)API:平臺(tái)API 定義了主機(jī)端程序發(fā)現(xiàn)OpenCL 設(shè)備所用的函數(shù)以及這些函數(shù)的功能;運(yùn)行時(shí)API 用于管理上下文來(lái)創(chuàng)建命令隊(duì)列以及運(yùn)行時(shí)發(fā)生的其他操作。通過(guò)調(diào)用OpenCL API 可實(shí)現(xiàn)主機(jī)端對(duì)內(nèi)核的調(diào)度與管理[17],CPU 端程序流程如圖4 所示。

        圖4 主機(jī)端程序流程Fig.4 Procedure of HOST program

        3.2 優(yōu)化策略

        3DES 算法內(nèi)核模塊包括明文數(shù)據(jù)輸入緩存、算法加密模塊和密文數(shù)據(jù)輸出緩存3 個(gè)模塊,如圖5 所示。明文數(shù)據(jù)輸入緩存完成從全局內(nèi)存讀取明文數(shù)據(jù),通過(guò)使用數(shù)據(jù)存儲(chǔ)調(diào)整、數(shù)據(jù)位寬改進(jìn)提高實(shí)際帶寬利用率;算法加密模塊基于FPGA 完成3DES 算法的加密計(jì)算,通過(guò)數(shù)據(jù)循環(huán)展開(kāi)、循環(huán)流水形成流水線(xiàn)并行計(jì)算架構(gòu);密文數(shù)據(jù)輸出緩存模塊將數(shù)據(jù)從FPGA 片上傳輸至外部DDR 中。

        圖5 內(nèi)核模塊示意圖Fig.5 Schematic diagram of Kernel module

        3.2.1 數(shù)據(jù)存儲(chǔ)調(diào)整

        由主機(jī)端傳輸?shù)臄?shù)據(jù)存儲(chǔ)于片外DDR 中,對(duì)應(yīng)的數(shù)據(jù)類(lèi)型為_(kāi)_global;常量?jī)?nèi)存位于片上緩存單元,對(duì)應(yīng)的數(shù)據(jù)類(lèi)型為_(kāi)_constant;局部?jī)?nèi)存的物理地址為片上RAM 資源,對(duì)應(yīng)的數(shù)據(jù)類(lèi)型為_(kāi)_local;私有內(nèi)存的物理地址為片上寄存器資源,對(duì)應(yīng)的數(shù)據(jù)類(lèi)型為_(kāi)_private。由于片上不同資源的大小、延遲、吞吐率存在差異,因此合理分配數(shù)據(jù)存儲(chǔ)位置對(duì)于算法性能提升有較大的影響[19]。

        不同內(nèi)存類(lèi)型的性能參數(shù)如表1 所示。全局內(nèi)存類(lèi)型具有最大的吞吐率及容量,但同時(shí)也存在較大的訪(fǎng)存延遲,主機(jī)端傳輸?shù)臄?shù)據(jù)存儲(chǔ)于全局內(nèi)存中,因此提高內(nèi)存帶寬的實(shí)際利用率對(duì)于系統(tǒng)性能的提升是有效的。局部?jī)?nèi)存對(duì)工作組中的所有工作項(xiàng)可見(jiàn),與私有內(nèi)存相比,在訪(fǎng)存延遲相當(dāng)?shù)那闆r下,其具有更高的吞吐率及更大的容量,但同一工作組中的工作項(xiàng)執(zhí)行后需要通過(guò)使用屏障保證數(shù)據(jù)一致性,這在一定程度上增加了延遲。因此,將參與3DES 計(jì)算的變量存儲(chǔ)于私有內(nèi)存中,工作項(xiàng)訪(fǎng)問(wèn)位于私有內(nèi)存中相應(yīng)的明文數(shù)據(jù)塊并完成3DES 算法加密。針對(duì)f 函數(shù)計(jì)算模塊的S 盒和E 盒變換,由于是頻繁訪(fǎng)問(wèn)的數(shù)據(jù)且其值在計(jì)算過(guò)程中保持不變,因此將其存儲(chǔ)于常量?jī)?nèi)存,對(duì)應(yīng)的物理地址為片上ROM,從而在加快訪(fǎng)問(wèn)速度的同時(shí)避免訪(fǎng)存沖突。

        表1 不同內(nèi)存類(lèi)型的性能參數(shù)Table 1 Performance parameters of different memory types

        3.2.2 數(shù)據(jù)位寬改進(jìn)

        工作項(xiàng)執(zhí)行內(nèi)核程序的一個(gè)實(shí)例,如果工作項(xiàng)處理的數(shù)據(jù)位寬不固定,則編譯器會(huì)使用更多的資源以滿(mǎn)足可能的數(shù)據(jù)位寬,但同時(shí)也會(huì)對(duì)程序的優(yōu)化編譯有所限制。

        基于3DES 算法輸入數(shù)據(jù)長(zhǎng)度為64 bit 且輸出數(shù)據(jù)長(zhǎng)度為64 bit 的前提,將單工作項(xiàng)處理的數(shù)據(jù)長(zhǎng)度調(diào)整為8 Byte。若將數(shù)據(jù)長(zhǎng)度調(diào)整為4 Byte,則需要2 個(gè)工作項(xiàng)來(lái)完成一個(gè)明文塊的加密操作,此時(shí)工作項(xiàng)間的數(shù)據(jù)需要同步以保證數(shù)據(jù)一致性,這會(huì)增加額外的時(shí)間開(kāi)銷(xiāo);若將數(shù)據(jù)長(zhǎng)度調(diào)整為16 Byte,此時(shí)單工作項(xiàng)的處理數(shù)據(jù)量為原來(lái)的1 倍,理論上內(nèi)核執(zhí)行時(shí)間增加1 倍,則將單工作項(xiàng)的行為定義為從全局內(nèi)存中搬運(yùn)8 Byte 的數(shù)據(jù)至私有內(nèi)存,針對(duì)8 Byte 數(shù)據(jù)進(jìn)行3DES 加密計(jì)算,再將計(jì)算的結(jié)果從私有內(nèi)存搬運(yùn)至全局內(nèi)存中。通過(guò)獲得工作項(xiàng)的全局ID 可實(shí)現(xiàn)工作項(xiàng)與明文數(shù)據(jù)的一一對(duì)應(yīng),從而避免工作項(xiàng)間的同步操作。

        3.2.3 指令流優(yōu)化

        指令流優(yōu)化主要使用循環(huán)展開(kāi)和循環(huán)流水來(lái)提高程序的并行度。循環(huán)展開(kāi)可指導(dǎo)離線(xiàn)編譯器將OpenCL Kernel 轉(zhuǎn)換為硬件鏡像的方式。通過(guò)使用循環(huán)展開(kāi)可形成有效的流水,而流水線(xiàn)架構(gòu)能夠縮短整體的執(zhí)行時(shí)間。如圖6 所示,假設(shè)每步操作需要1 個(gè)時(shí)鐘周期,未形成流水線(xiàn)型設(shè)計(jì)時(shí),內(nèi)核在下次計(jì)算時(shí)延遲了3 個(gè)時(shí)鐘周期,而在使用流水線(xiàn)型設(shè)計(jì)后,只延遲了1 個(gè)時(shí)鐘周期。

        圖6 內(nèi)核計(jì)算架構(gòu)Fig.6 Architecture of Kernel computing

        循環(huán)展開(kāi)在消耗一定硬件資源的前提下可降低數(shù)據(jù)讀取與存儲(chǔ)的次數(shù),節(jié)省計(jì)算所需的時(shí)間,形成流水線(xiàn)型架構(gòu),從而提高并行度。如表2 所示,在內(nèi)存數(shù)據(jù)Load 模塊,針對(duì)8 Byte的明文數(shù)據(jù)與3 個(gè)8 Byte的子密鑰數(shù)據(jù)讀取進(jìn)行循環(huán)展開(kāi)形成內(nèi)存合并,將對(duì)內(nèi)存數(shù)據(jù)的32 次Load 操作降低為4 次更寬的Load 操作;在內(nèi)存數(shù)據(jù)Store 模塊,針對(duì)8 Byte 的密文數(shù)據(jù)存儲(chǔ)進(jìn)行循環(huán)展開(kāi)形成內(nèi)存合并,將使內(nèi)存的8 次Store 操作減少為1 次更寬的Store 操作;在迭代計(jì)算模塊,針對(duì)子密鑰生成模塊的16 次循環(huán)左移和密鑰置換、DES 計(jì)算模塊的16 輪輪換計(jì)算模塊進(jìn)行循環(huán)展開(kāi),指導(dǎo)編譯器生成多套單次迭代所需的硬件結(jié)構(gòu),節(jié)省了迭代計(jì)算所需的時(shí)間。表2 數(shù)據(jù)顯示,未進(jìn)行循環(huán)展開(kāi)時(shí),內(nèi)核的執(zhí)行時(shí)間為1 110.096 ms,使用循環(huán)展開(kāi)后,內(nèi)核的執(zhí)行時(shí)間降低為46.620 ms,可見(jiàn)通過(guò)循環(huán)展開(kāi)取得了較好的優(yōu)化效果。

        表2 循環(huán)展開(kāi)的優(yōu)化效果Table 2 Optimization effect of loop unrolling

        3.2.4 內(nèi)核矢量化

        內(nèi)核矢量化允許多個(gè)工作項(xiàng)以SIMD 的方式執(zhí)行內(nèi)核程序的實(shí)例。矢量化指導(dǎo)編譯器生成多個(gè)矢量通道,使得工作項(xiàng)可以同時(shí)存取并處理多個(gè)數(shù)據(jù)[20]。如圖7 所示,內(nèi)核矢量化參數(shù)設(shè)定為2 后編譯器會(huì)合并內(nèi)存訪(fǎng)問(wèn)。與未經(jīng)矢量化相比,矢量化后的內(nèi)核單次Load 和Store 的數(shù)據(jù)量為原先的2 倍。使用內(nèi)核矢量化時(shí),需要同時(shí)指定工作組大小,且內(nèi)核矢量化的參數(shù)能被工作組大小整除。內(nèi)核矢量化的參數(shù)只能是2 的指數(shù),由于硬件資源的限制,因此實(shí)驗(yàn)中可設(shè)定的最大矢量化參數(shù)為16。

        圖7 內(nèi)核矢量化示意圖Fig.7 Schematic diagram of kernel vectorization

        以加密128 MB 數(shù)據(jù)量為例描述不同內(nèi)核矢量化參數(shù)下系統(tǒng)內(nèi)存帶寬及吞吐率的變化情況。在SIMD2方案中,設(shè)置矢量化參數(shù)為2 后工作組中的工作項(xiàng)平均分布在2 個(gè)SIMD 通道中,此時(shí)單工作項(xiàng)執(zhí)行的工作量為原來(lái)的2 倍,同時(shí)編譯器會(huì)合并內(nèi)存訪(fǎng)問(wèn),單工作項(xiàng)一次可從內(nèi)存中加載2 個(gè)明文數(shù)據(jù)塊進(jìn)行加密并一次將2 個(gè)數(shù)據(jù)塊的加密結(jié)果存儲(chǔ)到全局內(nèi)存中[19]。如表3 所示,隨著矢量化參數(shù)的增加,內(nèi)核的執(zhí)行時(shí)間得到降低,內(nèi)存帶寬及系統(tǒng)的吞吐率得到提升。

        表3 內(nèi)核矢量化的優(yōu)化效果Table 3 Optimization effect of Kernel vectorization

        在本文設(shè)計(jì)中,工作組大小為512,內(nèi)核矢量化參數(shù)為16,每個(gè)工作組中的工作項(xiàng)分布在16 個(gè)SIMD 通道中。編譯器實(shí)現(xiàn)16 個(gè)SIMD 通道后,每一個(gè)工作項(xiàng)的計(jì)算工作量為原先的16 倍,相應(yīng)的全局工作組大小減少為原來(lái)的1/16。

        3.2.5 計(jì)算單元復(fù)制

        通過(guò)計(jì)算單元復(fù)制策略可提高具有常規(guī)內(nèi)存訪(fǎng)問(wèn)模式的內(nèi)核性能。Intel FPGA SDK 編譯器支持為內(nèi)核生成多個(gè)計(jì)算單元,通常每個(gè)計(jì)算單元可以同時(shí)執(zhí)行多個(gè)工作組,從而提高內(nèi)核的吞吐率。使用計(jì)算單元復(fù)制后,F(xiàn)PGA 中的硬件調(diào)度器將工作組分派到其他可用的計(jì)算單元。只要計(jì)算單元尚未達(dá)到其最大容量,就可以將其用于工作組分配[19]。

        如圖8 所示,本結(jié)合參數(shù)為16 的內(nèi)核矢量化策略,利用FPGA 硬件調(diào)度器將工作組分配至2 個(gè)計(jì)算單元中執(zhí)行,理論上可使內(nèi)核的運(yùn)行時(shí)間縮短為原來(lái)的一半。然而,雖然通過(guò)使用多個(gè)計(jì)算單元可提高系統(tǒng)的吞吐率,但也會(huì)增加對(duì)于全局內(nèi)存帶寬的競(jìng)爭(zhēng)以及硬件資源的使用。

        圖8 計(jì)算單元復(fù)制策略示意圖Fig.8 Schematic diagram of compute unit replication strategy

        3.3 加速器總體架構(gòu)設(shè)計(jì)

        如圖9 所示,基于OpenCL 的3DES 算法加速器架構(gòu)由主機(jī)(HOST)端和設(shè)備端2個(gè)部分組成,其中,HOST端負(fù)責(zé)與OpenCL 程序外部環(huán)境的數(shù)據(jù)交互、與設(shè)備端的數(shù)據(jù)交互及Kernel的調(diào)度與管理,設(shè)備端負(fù)責(zé)3DES算法的計(jì)算任務(wù)。

        設(shè)備端包含明文數(shù)據(jù)輸入緩存、3DES 算法加密計(jì)算、密文數(shù)據(jù)輸出緩存3 個(gè)模塊。其中,明文數(shù)據(jù)輸入緩存、密文數(shù)據(jù)輸出緩存位于設(shè)備端的全局內(nèi)存區(qū)域,3DES 算法加密的中間數(shù)據(jù)存儲(chǔ)于設(shè)備端的私有內(nèi)存區(qū)域。

        在圖9 中,PE 單元為一個(gè)工作項(xiàng)的處理單元,每個(gè)PE 單元擁有相應(yīng)的私有內(nèi)存用于存儲(chǔ)運(yùn)算的中間數(shù)據(jù),一個(gè)PE 單元完成一個(gè)明文塊的3DES 加密計(jì)算。針對(duì)全局內(nèi)存與私有內(nèi)存的數(shù)據(jù)傳輸模塊,結(jié)合OpenCL 內(nèi)存模型及全局內(nèi)存、私有內(nèi)存存在訪(fǎng)存差異的特點(diǎn),采用改進(jìn)數(shù)據(jù)存儲(chǔ)位置、調(diào)整數(shù)據(jù)位寬策略提高內(nèi)核實(shí)際帶寬利用率;針對(duì)算法加密計(jì)算模塊,結(jié)合3DES 算法加密的原理,采用循環(huán)展開(kāi)、循環(huán)流水策略形成流水線(xiàn)并行架構(gòu),同時(shí)結(jié)合使用內(nèi)核矢量化策略形成更寬的矢量計(jì)算通道從而有效提升算法的性能,采用計(jì)算單元復(fù)制策略進(jìn)一步提高FPGA 端計(jì)算的吞吐率。

        圖9 3DES 算法FPGA 加速器總體架構(gòu)Fig.9 The overall architecture of FPGA accelerator for 3DES algorithm

        4 實(shí)驗(yàn)

        4.1 實(shí)驗(yàn)環(huán)境

        對(duì)本文設(shè)計(jì)的加速器進(jìn)行實(shí)驗(yàn)驗(yàn)證,軟件環(huán)境為CentOS Linux release 7.7.1908+GCC V4.8.5,OpenCL 版本為Intel FPGA SDK for OpenCL 19.3,硬件組合為Intel Xeon E5-2650 V2 的CPU+Intel Stratix 10 GX2800 的FPGA,該款FPGA 包含1 866 240 個(gè)ALUT,內(nèi)存帶寬為34 GB/s,資源情況如表4 所示[14]。

        表4 FPGA 端資源情況Table 4 FPGA resources

        4.2 實(shí)驗(yàn)結(jié)果

        在不同優(yōu)化策略下,以加密128 MB 數(shù)據(jù)、單工作項(xiàng)處理8 Byte 明文塊為例,結(jié)合FPGA 端內(nèi)存帶寬、工作頻率、內(nèi)核執(zhí)行時(shí)間及資源消耗情況描述內(nèi)核的性能變化。內(nèi)存帶寬及時(shí)鐘頻率通過(guò)在編譯器編譯時(shí)加入性能計(jì)數(shù)器(-profile)獲得,通過(guò)aocl report 指令調(diào)用Intel FPGA Dynamic Profiler for OpenCL 工具獲得內(nèi)存帶寬及工作頻率的信息,通過(guò)clGetEventProfilingInfo 函數(shù)獲得內(nèi)核的執(zhí)行時(shí)間,通過(guò)aoc -rtl 指令生成內(nèi)核的分析報(bào)告,獲得資源消耗的詳細(xì)信息。實(shí)驗(yàn)中記錄的時(shí)間是算法的絕對(duì)執(zhí)行時(shí)間,不包含主機(jī)與設(shè)備之間的數(shù)據(jù)傳輸時(shí)間,時(shí)間的統(tǒng)計(jì)結(jié)果通過(guò)多次測(cè)試取平均值獲得。

        4.3 實(shí)驗(yàn)結(jié)果分析

        表5 展示了不同優(yōu)化策略下FPGA 端內(nèi)存帶寬、時(shí)鐘、內(nèi)核執(zhí)行時(shí)間及資源占用變化情況。,其中,未優(yōu)化的內(nèi)核其內(nèi)存帶寬為1 916.9 MB/s 且FPGA板卡的工作頻率為306.2 MHz,內(nèi)核運(yùn)行時(shí)間為1 349.181 ms。下文對(duì)不同方案下的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析。

        表5 不同優(yōu)化方案下FPGA 端性能及資源情況Table 5 FPGA performance and resources under different optimization schemes

        數(shù)據(jù)存儲(chǔ)調(diào)整結(jié)合OpenCL 內(nèi)存模型及FPGA 板卡不同硬件資源存在訪(fǎng)存延遲及吞吐率差異的特點(diǎn),將HOST端傳輸?shù)臄?shù)據(jù)存儲(chǔ)類(lèi)型由常量類(lèi)型(__constant)更改為全局變量類(lèi)型(__global),將內(nèi)存的實(shí)際帶寬利用率、板卡的工作頻率提升至325 MHz。這是因?yàn)槿诸?lèi)型的變量其存儲(chǔ)位置為FPGA 的片外DDR,且理論帶寬可達(dá)到34 GB/s,而常量類(lèi)型變量在內(nèi)核運(yùn)行時(shí)會(huì)自動(dòng)由DDR 轉(zhuǎn)存至FPGA 片上緩存,這在一定程度上增加了額外的數(shù)據(jù)移動(dòng)。

        數(shù)據(jù)位寬改進(jìn)將單工作項(xiàng)處理的數(shù)據(jù)位寬確定為8 Byte,此時(shí)內(nèi)存帶寬提升了一倍多,這是因?yàn)樵跀?shù)據(jù)位寬確定的情況下,編譯器能夠結(jié)合長(zhǎng)度信息做更好的優(yōu)化,且使用8 Byte 長(zhǎng)度的位寬可最大化單工作項(xiàng)處理數(shù)據(jù)的效率,同時(shí)減少不必要資源的使用。結(jié)合數(shù)據(jù)位寬改進(jìn)后,設(shè)備端占用的邏輯資源大幅減少,由最初的8.01%降至1.91%。

        指令流優(yōu)化包含循環(huán)展開(kāi)和循環(huán)流水兩部分。使用指令流優(yōu)化后,系統(tǒng)整體性能的提升較為明顯。由表5 可知,使用指令流優(yōu)化后內(nèi)存帶寬提升至5 779.7 MB/s,時(shí)鐘頻率達(dá)到372.2 MHz,同時(shí)內(nèi)核的運(yùn)行時(shí)間由最初的1 349.181 ms 縮短至46.620 ms。這是因?yàn)樵诮Y(jié)合數(shù)據(jù)存儲(chǔ)調(diào)整、數(shù)據(jù)位寬改進(jìn)的前提下,采用循環(huán)展開(kāi)和循環(huán)流水策略可以達(dá)到較好的并行度。實(shí)驗(yàn)結(jié)果表明,在未結(jié)合數(shù)據(jù)位寬改進(jìn)的情況下,采用循環(huán)展開(kāi)循環(huán)流水策略后內(nèi)核的運(yùn)行時(shí)間為437.053 ms。這是因?yàn)槿绻唇Y(jié)合數(shù)據(jù)位寬改進(jìn),編譯器無(wú)法針對(duì)循環(huán)做有效的展開(kāi),且會(huì)盡量使用更多的資源和更粗粒度的優(yōu)化來(lái)滿(mǎn)足可能的數(shù)據(jù)長(zhǎng)度,這在一定程度上限制了編譯器的優(yōu)化能力。由表5 可知,使用循環(huán)展開(kāi)、循環(huán)流水策略后,消耗的邏輯資源由原先的1.91%增加至3.3%,這與循環(huán)展開(kāi)增加邏輯資源的消耗相符合。

        內(nèi)核矢量化實(shí)現(xiàn)內(nèi)核中多個(gè)工作項(xiàng)以單指令多數(shù)據(jù)(SIMD)的方式參與運(yùn)算。結(jié)合工作組大小為512,將內(nèi)核矢量化的參數(shù)指定為8,此時(shí)全局工作組的大小減少為原來(lái)的8 倍。內(nèi)核矢量化后內(nèi)存帶寬由5 779.7 MB/s 提升至23 274.5 MB/s。這是因?yàn)槭噶炕瘍?nèi)核會(huì)指導(dǎo)編譯器合并內(nèi)存訪(fǎng)問(wèn),將對(duì)全局內(nèi)存的8 次Load操作合并為1 次更寬的矢量Load 操作且內(nèi)核函數(shù)計(jì)算模塊包含較少的分支語(yǔ)句,有利于形成較合適的SIMD通道。內(nèi)核矢量化后FPGA端的工作頻率為373.3 MHz,內(nèi)核的執(zhí)行時(shí)間由原先的46.620 ms縮短至11.132 ms,可見(jiàn)內(nèi)核矢量化在性能上產(chǎn)生明顯的提升。內(nèi)核矢量化會(huì)增加FPGA 端資源的消耗,由表5 可知,其占用的邏輯資源由3.3%上升至19.41%。

        將矢量化的參數(shù)由8提升至16,此時(shí)可形成更寬的內(nèi)存訪(fǎng)問(wèn)操作。由表5 可知,內(nèi)存帶寬進(jìn)一步提高至27 534.1 MB/s,內(nèi)核的執(zhí)行時(shí)間縮短至9.425 ms,系統(tǒng)資源的消耗由19.41%增加至38.57%。

        結(jié)合內(nèi)核矢量化與計(jì)算單元復(fù)制的組合可進(jìn)一步提高內(nèi)核的性能。內(nèi)核矢量化參數(shù)為8 時(shí),可復(fù)制的最大計(jì)算單元數(shù)為4;內(nèi)核矢量化參數(shù)為16 時(shí),可復(fù)制的最大計(jì)算單元數(shù)為2。

        結(jié)合矢量化參數(shù)為8、4 個(gè)計(jì)算單元復(fù)制后內(nèi)存帶寬為27 105.5 MB/s,相比于SIMD16 有一定程度的下降,這是因?yàn)橛?jì)算單元的增加導(dǎo)致對(duì)帶寬的競(jìng)爭(zhēng),內(nèi)核的執(zhí)行時(shí)間縮短至9.409 ms,邏輯資源的消耗為77.33%。使用參數(shù)為16 的內(nèi)核矢量化與2 個(gè)計(jì)算單元復(fù)制的組合,其內(nèi)存帶寬為28 102.3 MB/s,工作頻率為366.7 MHz,內(nèi)核的計(jì)算時(shí)間縮短至最低的9.243 ms,邏輯資源的占用達(dá)到77.03%。在有限的資源下,內(nèi)核矢量化參數(shù)為16、計(jì)算單元復(fù)制數(shù)為2時(shí)獲得了最佳的內(nèi)核性能。下文將結(jié)合不同大小的明文數(shù)據(jù)量,進(jìn)一步描述結(jié)合內(nèi)核矢量化參數(shù)為16、計(jì)算單元復(fù)制數(shù)為2 的內(nèi)核性能變化。

        4.4 不同數(shù)據(jù)量下系統(tǒng)吞吐率變化

        為直觀(guān)描述內(nèi)核的性能,以64 KB、1 MB、8 MB、64 MB、128 MB、256 MB、512 MB、1 024 MB的數(shù)據(jù)為例,描述內(nèi)核在不同數(shù)據(jù)量下的吞吐率變化情況。內(nèi)核吞吐率的計(jì)算公式[21]如式(3)所示:

        其 中:T為吞吐率;N為3DES 加密的次數(shù);B為單次3DES 加密的明文塊大?。籈為內(nèi)核的執(zhí)行時(shí)間。不同數(shù)據(jù)量下內(nèi)核的執(zhí)行時(shí)間及吞吐率的變化情況如表6 所示??梢钥闯觯涸跀?shù)據(jù)量較小的情況下,內(nèi)核的吞吐率不能很好地反映算法的真實(shí)性能;隨著數(shù)據(jù)量的增加,內(nèi)核的吞吐率在增加后趨于穩(wěn)定;在計(jì)算的數(shù)據(jù)量大于128 MB 后,內(nèi)核的吞吐率保持在111.801 Gb/s 左右。

        表6 不同數(shù)據(jù)量下的吞吐率Table 6 Throughput rates under different data volumes

        4.5 與不同方案的對(duì)比

        為了驗(yàn)證本文方案的有效性,與其他文獻(xiàn)方案進(jìn)行比較,并與CPU、GPU 平臺(tái)實(shí)現(xiàn)結(jié)果進(jìn)行比較。

        4.5.1 與其他文獻(xiàn)方案的比較

        文獻(xiàn)[11,22-25]皆采用基于Verilog/VHDL 的設(shè)計(jì)方案。本文基于OpenCL 實(shí)現(xiàn)FPGA 的設(shè)計(jì),采用數(shù)據(jù)存儲(chǔ)調(diào)整、數(shù)據(jù)位寬改進(jìn)、指令流優(yōu)化、內(nèi)核矢量化等策略實(shí)現(xiàn)3DES 算法加速器的設(shè)計(jì)。如表7 所示,與基于Verilog/VHDL 實(shí)現(xiàn)的方案相比,本文方案有效解決了開(kāi)發(fā)周期長(zhǎng)、維護(hù)升級(jí)困難等問(wèn)題,同時(shí)頻率達(dá)到了366.7 MHz,吞吐率達(dá)到111.801 Gb/s,取得了較明顯的性能提升。

        表7 不同方案的加速性能Table 7 Acceleration performance of different schemes

        4.5.2 與CPU、GPU 實(shí)現(xiàn)結(jié)果的比較

        結(jié)合CPU、GPU 平臺(tái)驗(yàn)證本文方案的性能。OpenSSL 是基于密碼學(xué)的開(kāi)發(fā)工具包,包含豐富的密碼算法庫(kù)。Hashcat 是一種快速密碼恢復(fù)工具,支持OpenCL 框架。本文的對(duì)比對(duì)象為CPU 端的OpenSSL 庫(kù),其版本為1.0.2,CPU 型號(hào)為Intel Core i7-9700;GPU 端 的Hashcat,其版本為5.0.0,GPU 型號(hào)為NvidiaGeForce GTX 1080Ti。

        由圖10 可知,本文實(shí)現(xiàn)方案相比于CPU 性能提升372 倍,相比于GPU 性能提升20%。由圖11 可知,本文實(shí)現(xiàn)方案相比于CPU 能效比提升644 倍,相比于GPU 能效比提升9 倍。

        圖10 不同平臺(tái)下的吞吐率Fig.10 Throughput rate under different platforms

        圖11 不同平臺(tái)下的能效比Fig.11 Energy efficiency ratio under different platforms

        5 結(jié)束語(yǔ)

        本文針對(duì)傳統(tǒng)數(shù)據(jù)加解密計(jì)算速度慢、功耗高、占用主機(jī)資源的問(wèn)題,以及Verilog/VHDL 方式實(shí)現(xiàn)的FPGA 加解密系統(tǒng)開(kāi)發(fā)周期長(zhǎng)、維護(hù)升級(jí)困難的問(wèn)題,提出一種基于OpenCL 的3DES 算法FPGA 加速器架構(gòu)設(shè)計(jì)方案。結(jié)合OpenCL 內(nèi)存模型與FPGA 端硬件資源的對(duì)應(yīng)關(guān)系優(yōu)化數(shù)據(jù)存儲(chǔ)模塊,同時(shí)對(duì)私有內(nèi)存與全局內(nèi)存的數(shù)據(jù)傳輸模塊,采用循環(huán)展開(kāi)、數(shù)據(jù)位寬改進(jìn)策略提高內(nèi)存帶寬的實(shí)際利用率,對(duì)3DES 算法計(jì)算模塊,采用指令流優(yōu)化提高計(jì)算的并行度,形成流水線(xiàn)型架構(gòu)。在此基礎(chǔ)上,結(jié)合內(nèi)核矢量化、計(jì)算單元復(fù)制策略進(jìn)一步提高內(nèi)核的吞吐率。實(shí)驗(yàn)結(jié)果表明,本文設(shè)計(jì)的加速器能夠有效提升3DES 算法的速度與能效方面,滿(mǎn)足數(shù)字貨幣、區(qū)塊鏈、云端數(shù)據(jù)加密等高強(qiáng)度計(jì)算領(lǐng)域的計(jì)算要求。為進(jìn)一步提高該加速器的通用性和性能,后續(xù)將針對(duì)非對(duì)稱(chēng)加密算法和哈希算法進(jìn)行設(shè)計(jì),同時(shí)優(yōu)化主機(jī)端與FPGA 端數(shù)據(jù)的傳輸性能,開(kāi)發(fā)實(shí)現(xiàn)支持算法類(lèi)別更多的加解密算法計(jì)算平臺(tái)。

        猜你喜歡
        數(shù)據(jù)位矢量化編譯器
        A320飛機(jī)大氣數(shù)據(jù)的采集和計(jì)算在排故中的應(yīng)用
        基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
        一種適用于FPGA系統(tǒng)中的變速箱電路設(shè)計(jì)
        交互式矢量化技術(shù)在水文站網(wǎng)分布圖編繪中的應(yīng)用
        科技視界(2016年10期)2016-04-26 21:12:24
        減少調(diào)度自動(dòng)化設(shè)備通訊串口丟包率的措施
        基于VP Studio和CASS的柵格地形圖矢量化方法
        通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
        遙感圖像多尺度分割算法與矢量化算法的集成
        矢量化技術(shù)在檔案管理中的應(yīng)用
        河南科技(2013年3期)2013-04-10 14:34:43
        編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)
        亚洲av成人无遮挡网站在线观看| 国产大片在线观看三级| 国产日产韩国级片网站| 韩国三级在线观看久| 国产69精品久久久久9999| 亚洲加勒比无码一区二区在线播放| 国产三级不卡在线观看视频| 精品国产偷窥一区二区| 国产乱妇乱子视频在播放 | 人人妻人人澡人人爽人人dvd| 香港日本三级亚洲三级| 国产精品99精品一区二区三区∴| 日本熟女视频一区二区三区| 精品久久久久久综合日本| 亚洲精品成人区在线观看| 日韩在线观看网址| 久久久亚洲av成人乱码| 蜜臀性色av免费| 91spa国产无码| 国产中文字幕亚洲综合| 极品嫩模大尺度av在线播放| 好屌草这里只有精品| 日本道免费精品一区二区| 日韩精品免费av一区二区三区| 欧美人与禽z0zo牲伦交| 久青草国产视频| 白白白色视频在线观看播放 | 青青草在线免费观看在线| 久久久久久欧美精品se一二三四| 人妻去按摩店被黑人按中出| 在线免费观看亚洲天堂av| 中文字幕国产精品一二三四五区| 怡红院a∨人人爰人人爽| 国色天香精品亚洲精品| 一本色道久久亚洲精品| 精品三级av无码一区| 最新精品国偷自产在线婷婷| 亚洲一区二区懂色av| 亚洲av成人精品日韩在线播放| 男人天堂免费视频| 少妇久久一区二区三区|