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

        ?

        基于OpenCL與FPGA異構(gòu)模式的Sobel算法研究

        2018-02-05 01:45:40,,,
        計算機(jī)測量與控制 2018年1期
        關(guān)鍵詞:模型

        ,,,

        (湖北大學(xué) 計算機(jī)與信息工程學(xué)院, 武漢 430062)

        0 引言

        圖像邊緣作為圖像最基本的特征,是圖像進(jìn)行相關(guān)處理(如圖像分割等)的主要基礎(chǔ)。在進(jìn)行圖像處理的過程中,圖像邊緣檢測技術(shù)對圖像處理具有十分重要的意義。獲取比較好的圖像邊緣有助于去除不必要的圖像信息,同時保留圖像形狀等重要信息。在實時圖像處理中,通用軟件算法進(jìn)行邊緣檢測一般在實時性方面效果欠佳,如Sobel邊緣檢測算法;在硬件實現(xiàn)層面,如何使用高性能計算來實現(xiàn)提高圖像處理速度,簡化算法來提高算法運行速度的研究較少。

        目前,異構(gòu)計算因為其高性能并行處理的特性逐漸被應(yīng)用到圖像處理中[1]。在PC領(lǐng)域中,研究人員已經(jīng)大量采用圖形處理器(GPU:graphics processing unit)進(jìn)行圖像處理計算[2],然而在嵌入式領(lǐng)域采用異構(gòu)系統(tǒng)進(jìn)行邊緣識別的應(yīng)用較少。FPGA(field programmable gate array)的可重構(gòu)性和高度并行性在高性能計算上具有很大的優(yōu)勢,F(xiàn)PGA內(nèi)部邏輯資源可以靈活地實現(xiàn)許多算法,并在相當(dāng)短的時鐘周期內(nèi)完成大量的高性能計算,但FPGA算法實現(xiàn)需要由經(jīng)驗豐富的邏輯工程師來完成,其開發(fā)流程也比較繁瑣。OpenCL(Open Computing Language)跨平臺開發(fā)語言為異構(gòu)計算的開發(fā)帶來了極大便利,開發(fā)人員可以從復(fù)雜的異構(gòu)系統(tǒng)構(gòu)建和通信機(jī)制中擺脫出來,專心研究算法實現(xiàn)和優(yōu)化。另外,OpenCL對圖像數(shù)據(jù)類型支持較好,非常適用于圖像的像素操作。因此,OpenCL與FPGA異構(gòu)模式的結(jié)合在嵌入式圖像高性能處理上具有相當(dāng)大的優(yōu)勢,本文基于該模式對Sobel算法的并行性進(jìn)行研究。

        1 技術(shù)原理介紹

        在分析Sobel算法并行性和展開性能之前,需要了解Sobel算法原理、OpenCL在FPGA上的并行性和共享內(nèi)存機(jī)制。

        1.1 Sobel算法原理

        Sobel算子是圖像邊緣檢測中常用的一種梯度幅值檢測算子,采用3*3卷子模板同時在水平方向和垂直方向?qū)D像進(jìn)行卷積,計算出與目標(biāo)圖像亮度函數(shù)的灰度近似值的一個離散性的差分算子,通過該算子得到目標(biāo)圖像任意一點上的灰度矢量[3]。

        Sobel卷積因子為如圖1所示,gx為水平方向梯度模板,gy為垂直方向梯度模板,兩個模板和目標(biāo)圖像進(jìn)行平面卷積,就可以得到該圖像在水平和垂直方向上相應(yīng)的亮度差分近似值。

        圖1 Sobel卷積因子

        設(shè)A為圖像中任意3*3的像素矩陣,如式(1),式中f(x,y)為圖像中任意像素點的灰度值。通過Sobel邊緣檢測運算后,得到水平和垂直方向的灰度值Gx和Gy,如式(2)和式(3)所示。

        (1)

        (2)

        (3)

        Gx和Gy的計算結(jié)果如式(4)和(5)。

        Gx=[f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-

        [f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

        (4)

        Gy=[f(x-1,y-1)+2*f(x,y-1)+f(x+1,y-1)]-

        [f(x-1,y+1)+2*f(x,y+1)+f(x+1,y+1)]

        (5)

        通過式(6),計算目標(biāo)像素灰度值G的大小,將灰度值G與設(shè)定的閾值比較,即可判斷該像素點是否為邊緣點。

        (6)

        1.2 OpenCL在FPGA上的實現(xiàn)

        Altera Cyclone V SOC芯片在傳統(tǒng)的FPGA芯片內(nèi)嵌一個HPS(硬核處理系統(tǒng)),該硬核處理系統(tǒng)包括一個雙核的Cortex-A9處理器及其外設(shè),F(xiàn)PGA與HPS之間有多條內(nèi)部互聯(lián)總線相連,保證了HPS和FPGA之間的高速數(shù)據(jù)交換。

        Altera OpenCL SDK是Altera 公司提供的OpenCL開發(fā)套件,其支持以Cyclone V SOC 芯片為基礎(chǔ)的OpenCL計算架構(gòu)。HPS中的ARM作為OpenCL的主機(jī),主要負(fù)責(zé)流程控制和OpenCL 運行時(RunTime);而FPGA則作為OpenCL計算設(shè)備。

        Altera為基于Cyclone V SoC的OpenCL平臺提供了一個OpenCL 板級支持包(BSP)。該BSP包括OpenCL運行的基本硬件結(jié)構(gòu),并預(yù)留與OpenCL內(nèi)核邏輯黑盒連接的接口。OpenCL SDK能夠?qū)?nèi)核代碼編譯為FPGA運算邏輯,取代該部分黑盒邏輯,連接在OpenCL接口上。在進(jìn)行OpenCL計算時,ARM主機(jī)動態(tài)加載該部分運算邏輯配置FPGA進(jìn)行計算。

        1.3 FPGA與OpenCL共享內(nèi)存機(jī)制

        在OpenCL的內(nèi)存模型中,Host內(nèi)存和Device 內(nèi)存通常是獨立的(如CUP內(nèi)存和GPU顯存)。由于OpenCL環(huán)境中Device為計算設(shè)備,需要將Host內(nèi)存中的數(shù)據(jù)拷貝到Device內(nèi)存中計算。在計算結(jié)束后,需要將設(shè)備內(nèi)存中的計算結(jié)果拷貝到主機(jī)內(nèi)存中進(jìn)行后續(xù)處理。對于高內(nèi)存消耗型的計算來講,主機(jī)和設(shè)備之間數(shù)據(jù)的拷貝將會消耗許多時間,從而降低OpenCL計算的性能優(yōu)勢。Altera的CycloneV SOC芯片支持OpenCL的共享物理內(nèi)存模式的內(nèi)存訪問,F(xiàn)PGA和HPS可以通過其芯片內(nèi)部的DDR內(nèi)存控制器硬核訪問內(nèi)存的共享區(qū)域,以避免主機(jī)和設(shè)備之間的數(shù)據(jù)拷貝。

        在硬件方面,Cyclone V SOC芯片內(nèi)有一個特殊的DDR內(nèi)存控制器硬核,F(xiàn)PGA和HPS均可通過該控制器訪問內(nèi)存。FPGA在訪問內(nèi)存時,無需通過HPS系統(tǒng)中的AXI總線和L3互聯(lián)交換系統(tǒng),直接通過FPGA-to-HPS橋訪問SDRAM控制器,如圖2所示。因為FPGA是訪問共享物理內(nèi)存,而不是共享虛擬內(nèi)存,所以它不需訪問將用戶虛擬地址映射到物理頁地址的CPU頁面表。這種方式不僅有更好的數(shù)據(jù)帶寬,且不會占用AXI總線干涉HPS對其他外設(shè)的訪問。

        圖2 FPGA在訪問SDRAM

        在軟件方面,主機(jī)必須能夠分配物理連接的內(nèi)存區(qū)域,來與設(shè)備中的連續(xù)內(nèi)存空間保持一致。在CPU上分配內(nèi)存的典型軟件(例如,malloc()函數(shù)) 并不能保證分配到連續(xù)的物理內(nèi)存。在Linux上的用戶空間應(yīng)用程序中,Malloc()函數(shù)分配的內(nèi)存在虛擬內(nèi)存地址空間中是連續(xù)的,但任何底層物理頁面可能不是鄰接的物理頁面。因此,Linux內(nèi)核驅(qū)動程序必須執(zhí)行內(nèi)存分配。

        OpenCL SoC FPGA Linux內(nèi)核驅(qū)動程序中通過調(diào)用dma_alloc_coherent()來分配連續(xù)的物理內(nèi)存,并將其映射到用戶空間。為了保證內(nèi)存一致性,驅(qū)動還需要調(diào)用pgprot_noncached()或者remap_pf_range()來禁止該部分內(nèi)存的cache訪問。一方面, mmp()將完成驅(qū)動分配內(nèi)存的映射,返回主機(jī)程序所需要的虛擬地址。另一方面,通過查詢驅(qū)動,OpenCL內(nèi)核可以獲取該內(nèi)存所對應(yīng)的實際物理地址。

        OpenCL運行時,使用clCreateBuffer()和CL_MEM_USE_HOST_PTR標(biāo)簽來申請分配共享內(nèi)存并返回設(shè)備地址指針;通過clEnqueueMapBuffer()和設(shè)備地址指針獲取共享內(nèi)存的主機(jī)地址指針,二者將對應(yīng)到物理內(nèi)存的同一塊區(qū)域。Intel FPGA SDK假定共享內(nèi)存是board_spec.xml文件中列出的第一個內(nèi)存。通過FPGA與OpenCL的共享內(nèi)存方式,減少OpenCL內(nèi)核與數(shù)據(jù)的拷貝時間,進(jìn)一步提高系統(tǒng)運行速度。

        2 實驗設(shè)計

        為設(shè)計對比實驗,本文將Sobel處理的模型抽象為圖3的模型,主要包括圖像輸入RGB緩存區(qū),圖像算法和圖像輸出緩存區(qū)。通過純軟件和OpenCL的方式分別實現(xiàn)Sobel算法核心,完成相同的功能,并對不同實現(xiàn)方式進(jìn)行對比分析。

        圖3 Sobel處理的模型

        基于上述模型,Sobel的軟件和OpenCL實現(xiàn)都將在友晶科技的DE1-SOC硬件平臺上實現(xiàn)。Sobel的軟件算法運行在HPS的ARM硬核中,Sobel的OpenCL則由FPGA部分實現(xiàn),通過參數(shù)配置加載不同的算法核心完成Sobel的圖像處理。

        2.1 硬件設(shè)計

        由于軟件算法在ARM中實現(xiàn),軟件算法和OpenCL方式將共用一套平臺,該硬件設(shè)計主要為OpenCL的硬件設(shè)計。OpenCL開發(fā)環(huán)境的最小加速系統(tǒng),該系統(tǒng)包含OpenCL最小硬件系統(tǒng)、OpenCL加速子系統(tǒng)。

        1)DE1-SOC硬件平臺核心為Altera的Cyclone V SoC FPGA芯片,核心芯片的FPGA邏輯資源和雙核心ARM處理器分別為OpenCL平臺模型中的設(shè)備和主機(jī)。

        2)OpenCL最小硬件系統(tǒng)的主機(jī)包括HPS、板載DDR3 SDRAM內(nèi)存、SD卡、USB轉(zhuǎn)串口和使用FPGA邏輯資源搭建的OpenCL接口。最小系統(tǒng)的設(shè)計框圖如圖4所示。

        圖4 OpenCL最小系統(tǒng)框圖

        3)OpenCL加速系統(tǒng)的硬件設(shè)計主要是完成Sobel加速內(nèi)核的實現(xiàn)。內(nèi)核雖然以O(shè)penCL內(nèi)核代碼體現(xiàn),但這些代碼將直接決定其在FPGA內(nèi)的硬件結(jié)構(gòu)。內(nèi)核主要完成RGB-Gray的顏色轉(zhuǎn)換和Sobel卷積計算。

        2.2 軟件設(shè)計

        1)Sobel邊緣檢測算法C/C++實現(xiàn)。

        Sobel邊緣檢測算法具體步驟如下。

        Step1:將水平和垂直2個方向模板的中心像素與圖像的相應(yīng)像素點重合,并且將模板按照從左到右、從上到下方向沿著圖像像素移動。

        Step2:將模板中的系數(shù)與對應(yīng)的圖像像素值進(jìn)行卷積運算。

        Step3:用兩個模板得到卷積結(jié)果的最大值代替模板中心位置對應(yīng)的像素值,作為該像素新的像素灰度值。

        Step4:設(shè)置合適的閾值TH,若新的像素灰度值≥TH,則判斷該像素點為邊緣點。

        Sobel 算法通常使用圖像的灰度值與梯度系數(shù)進(jìn)行卷積,完成RGB圖像進(jìn)行Sobel圖像轉(zhuǎn)換輸出時,還需要進(jìn)行圖像顏色空間的轉(zhuǎn)換。

        其中像素值為輸入彩色圖像像素點的RGB值根據(jù)公式1.7加權(quán)轉(zhuǎn)換為灰度圖像的像素值。

        Gray=(77*R+151*G+28*B)>>8

        (17)

        上述步驟灰度值轉(zhuǎn)換中有兩種計算模型,首先介紹計算模型1,其結(jié)構(gòu)模型如圖5所示。

        圖5 計算模型1

        該模型首先從輸入圖像的RGB緩沖區(qū)每次提取9個像素點,同時依次完成顏色空間的轉(zhuǎn)換和Sobel卷積運算,計算出一個中心點的Sobel特征值。

        代碼的行為將被翻譯成指令執(zhí)行,Soble算法中內(nèi)存的訪問(ldr/str指令)、加法運算(add指令)和乘法運算(vmul.f64 neno乘法指令)執(zhí)行的次數(shù)與程序執(zhí)行時間密切相關(guān)。于1個像素點的Gray 計算而言,灰度運算如表1所示。

        表1 單個像素點灰度運算

        其中,1次內(nèi)存訪問為讀取像素點的RGB值;3次乘法運算和2次加法為RGB顏色空間到Gray顏色空間的轉(zhuǎn)換。另外2次加法和3次移位操作為中間數(shù)據(jù)的數(shù)學(xué)計算。而每次計算一個Sobel特征值需要計算9個像素的灰度值和與對應(yīng)得系數(shù)值相乘,最后所有值相加,則Gray的內(nèi)存訪問和數(shù)據(jù)計算量為單次計算的9倍。所以該方法計算一個Sobel特征值總運算次數(shù)如表2所示,包括9*2次(橫向和縱向)灰度運算和1次Sobel運算。

        表2 計算模型1的一個Sobel特征值運算

        按照計算模型1,完成整張RGB圖像的Sobel需要關(guān)鍵運算量為Col*Row*單個Sobel特征值運算量。這種計算模型優(yōu)點是只需要一個輸入緩沖和一個輸出緩沖區(qū),占用的內(nèi)存空間較小,但是會存在計算灰度值是反復(fù)訪問內(nèi)存和重復(fù)計算灰度值的問題。這種方式在嵌入式應(yīng)用中,適合應(yīng)用于微處理器RAM資源本身很小,或者處理圖像較大占用的緩沖區(qū)過大而消耗過多內(nèi)存導(dǎo)致RAM資源緊缺的場景中。

        在計算模型1分析的基礎(chǔ)上,增加一個緩沖區(qū)用于緩存灰度值數(shù)據(jù),先進(jìn)行RGB到灰度值的轉(zhuǎn)換,再取灰度值值進(jìn)行Sobel計算,來減少重復(fù)計算灰度值,其計算模型2如圖6所示。

        圖6 計算模型2

        同理分析可得計算模型2計算一個Sobel特征值總運算次數(shù)如表3表2所示。

        表3 計算模型2的一個Sobel特征值運算

        其中,灰度值轉(zhuǎn)換的2次內(nèi)存訪問為讀取像素點的RGB值和向緩存區(qū)存入Gray值;3次乘法運算和兩次加法為RGB顏色空間到Gray顏色空間的轉(zhuǎn)換,另外2次加法為中間數(shù)據(jù)的數(shù)學(xué)計算。

        Sobel的計算時,將不再用Gray計算過程中寄存器存儲的Gray值來計算,而變?yōu)閺膬?nèi)存中讀取Gary值進(jìn)行計算,每個像素點的Sobel特征值的計算需要9次。

        計算模型1直接將灰度值進(jìn)行數(shù)據(jù)運算,未分配內(nèi)存存放數(shù)據(jù),該方式所消耗的時間資源較多;計算模型2將圖像灰度值處理完后全部存放在分配的內(nèi)存中,該方式所消耗的存儲空間較多。計算模型2相對于計算模型1減少了灰度值的重復(fù)運算,提升了運行速度。

        2)Sobel算法的并行實現(xiàn)。

        由上述分析可知,Sobel算法的指令串行執(zhí)行是時間消耗的關(guān)鍵,OpenCL方法能使算法并行執(zhí)行從而降低計算開銷。Sobel算法的并行實現(xiàn)主要包括運行在DE1-SoC上執(zhí)行的OpenCL內(nèi)核程序和主機(jī)程序。

        OpenCL內(nèi)核主要通過展開的for循環(huán)實現(xiàn)一組移位寄存器的行為,并在一次內(nèi)核計算中同時完成9個像素點的RGB-Gray的轉(zhuǎn)換和Sobel特征值的計算以及閾值比較輸出。通過OpenCL內(nèi)核,能在每個時鐘輸出一個Sobel運算結(jié)果。

        假設(shè)圖片像素大小為COLS* ROWS,OpenCL內(nèi)核程序主要實現(xiàn)移位寄存器rows[2 * COLS + 3],讓移位寄存器前面3行3列共9個像素值轉(zhuǎn)換為灰度值,與橫向和縱向Sobel因子做平面卷積,以如圖7所示,以320*240像素大小的圖片為例, 構(gòu)成一個320*2+3大小的移位寄存器,灰色部分是用來計算Sobel的9個數(shù)據(jù),對應(yīng)一個 Sobel 卷積的計算單元。依次移位,即可完成下一個 Sobel 卷積的計算。每一個Sobel 卷積的計算單元對應(yīng)一個硬件的運算單元,這樣就可以每個時鐘出一個數(shù)據(jù),提高運算效率。

        圖7 移位寄存器示例

        主機(jī)程序?qū)崿F(xiàn)主要有以下步驟。

        Step1:通過clGetPlatformInfo函數(shù)先獲得 OpenCL 的平臺信息,在此平臺上選定OpenCL設(shè)備,如DE1-SoC。

        Step2:查詢硬件設(shè)備獲取OpenCL對各項指標(biāo)的支持能力。

        Step3:通過clCreateContex函數(shù)創(chuàng)建上下文環(huán)境,通過上下文來管理命令隊列和內(nèi)存對象。

        Step4:通過clCreateQueue函數(shù)創(chuàng)建命令隊列,OpenCL可以實現(xiàn)對內(nèi)存對象、程序?qū)ο蠛蛢?nèi)核對象的操作。

        Step5:通過包含F(xiàn)PGA邏輯配置信息的二進(jìn)制內(nèi)核文件來創(chuàng)建編程對象,解決FPGA邏輯重構(gòu)問題。

        Step6:通過clCreateKernel函數(shù)創(chuàng)建內(nèi)核,將內(nèi)核函數(shù)和主機(jī)程序關(guān)聯(lián)。

        Step7:通過clSetKernelArg函數(shù)設(shè)置內(nèi)核參數(shù),綁定主機(jī)程序與內(nèi)核之間數(shù)據(jù)交換需要的參數(shù)。

        Step8:通過clEnqueneNDRangeKernel函數(shù)執(zhí)行內(nèi)核,完成內(nèi)核在加速設(shè)備上的運行。

        Step9:內(nèi)核執(zhí)行完成后,通過釋放函數(shù)釋放資源。

        主機(jī)程序流程圖如圖8所示。

        圖8 OpenCL主機(jī)程序流程圖

        由于OpenCL內(nèi)存模型中,主機(jī)和設(shè)置的內(nèi)存是獨立的內(nèi)存空間。雖然在DE1SOC上,二者在一塊物理內(nèi)存上,如果通過常規(guī)的內(nèi)存分配方式分配主機(jī)內(nèi)存和設(shè)置內(nèi)存(主機(jī) malloc(),設(shè)備clCreateBuffer()),二者在應(yīng)用層面依然是獨立的,其計算模型3如圖9所示。

        圖9 計算模型3

        在這種情況下,完成Sobel的計算必須包括兩個部分的操作:將主機(jī)內(nèi)存的RGB數(shù)據(jù)拷貝到設(shè)備內(nèi)存中和從設(shè)備內(nèi)存中將Sobel結(jié)果讀取到主機(jī)內(nèi)存中,分析可得計算模型3計算一個Sobel特征值總運算次數(shù)如表4表2所示。

        主機(jī)內(nèi)存拷貝:RGB處像素個內(nèi)存讀取和寫入,Sobel結(jié)果處的像素個內(nèi)存讀取和寫入;OpenCL內(nèi)核:像素個時鐘移位(或計算)。

        表4 計算模型3的一個Sobel特征值運算

        注:內(nèi)核通過獨占通道直接訪問進(jìn)行內(nèi)存讀寫,實際測量內(nèi)核計算總時間包括該部分的內(nèi)存訪問時間。

        3)共享內(nèi)存實現(xiàn)。

        由上述分析,對于內(nèi)存消耗型的計算,運算時間會遠(yuǎn)遠(yuǎn)低于內(nèi)存拷貝時間。因此,由于硬件的特殊結(jié)構(gòu)和運行環(huán)境的支持,使用共享內(nèi)存將能避免大量重復(fù)數(shù)據(jù)的拷貝。具體實現(xiàn)步驟如下:

        Step1:主機(jī)程序調(diào)用clCreateBuffer()函數(shù)分配共享內(nèi)存,并在共享內(nèi)存中分配緩沖區(qū)。

        Step2:主機(jī)程序調(diào)用clEnqueueMapBuffer()函數(shù)對上面定義的緩沖區(qū)進(jìn)行映射操作。

        Step3:主機(jī)程序填充或更新共享內(nèi)存緩沖區(qū)的內(nèi)容。

        Step4:主機(jī)將相應(yīng)內(nèi)核函數(shù)放入命令隊列,然后調(diào)用clSetKernelArg()函數(shù)將共享內(nèi)存緩沖區(qū)傳遞給內(nèi)核函數(shù)。

        Step5:OpenCL加速子系統(tǒng)處理緩沖區(qū)數(shù)據(jù)。

        其OpenCL共享內(nèi)存計算模型如圖10所示,主要操作為將RGB數(shù)據(jù)存放在分配好的主機(jī)和設(shè)備的共享內(nèi)存,將Sobel結(jié)果也存放在主機(jī)和設(shè)備的共享內(nèi)存,不存在主機(jī)和設(shè)備間數(shù)據(jù)拷貝操作,分析可得計算模型3計算一個Sobel特征值總運算次數(shù)如表5表2所示。

        圖10 計算模型4

        內(nèi)存拷貝OpenCL內(nèi)核Gray9Sobel1合計10僅9個像素時鐘來操作移位寄存器

        2.3 實驗測試

        系統(tǒng)開發(fā)PC主機(jī)系統(tǒng)為Windows10,64位,安裝Quartus II 16.1和Intel OpenCL SDK 16.1。Quartus II軟件編譯硬件邏輯,OpenCL SDK編譯OpenCL內(nèi)核。Intel OpenCL SDK在編譯內(nèi)核時會調(diào)用Quartus II的FPGA工具來生成相應(yīng)的邏輯資源,對內(nèi)核系統(tǒng)的修改也能通過Quartus II的Qsys工具來編輯。

        在友晶科技官方提供的OpenCL支持包中,有已經(jīng)編譯好的包含OpenCL運行環(huán)境的Linux SD卡鏡像,將鏡像寫入空白SD卡中即可運行OpenCL環(huán)境。在DE1-SoC上運行Linux系統(tǒng),配置ARM交叉編譯工具編譯OpenCL主機(jī)程序的可執(zhí)行文件,將已經(jīng)編譯好的驅(qū)動和OpenCL運行環(huán)境拷貝到SD的Linux文件系統(tǒng)目錄中,配置環(huán)境變量。再將OpenCL編譯過程中生成的aocx配置文件拷貝到DE1-SOC Linux文件系統(tǒng)中,執(zhí)行aocl program sobel.aocx命令來配置硬件,以實現(xiàn)FPGA中內(nèi)核邏輯的更新。

        最后在終端中執(zhí)行OpenCL主機(jī)程序,對不同方案進(jìn)行測試。

        圖11 實驗平臺

        實驗測試平臺如圖11所示,DE1-SoC通過VGA接口連接顯示器,實時顯示數(shù)據(jù)處理結(jié)果,如圖12所示為1 920*1 080像素大小圖片進(jìn)行Sobel邊緣檢測后的結(jié)果。

        表1 不同分辨率圖像采用C與OpenCL不同模式處理時間對比表

        圖12 實驗結(jié)果樣圖

        3 實驗數(shù)據(jù)分析

        為分析采用OpenCL與FPGA模式進(jìn)行Sobel算法完成邊緣檢測的性能優(yōu)勢,測試了OpenCL和片上ARM軟件處理,對不同分辨率的圖像進(jìn)行顏色空間轉(zhuǎn)換的時間進(jìn)行比較。其中,OpenCL與FPGA模式下測試了OpenCL和OpenCL采用共享內(nèi)存的兩種方式;ARM軟件處理模式下測試了圖像輸入數(shù)據(jù)沒有采用數(shù)據(jù)緩沖區(qū)和采用數(shù)據(jù)緩沖區(qū)兩種方式;圖像數(shù)據(jù)為SD卡存儲的bmp格式圖像,圖像分辨率為320*240、640*480、1 280*720和1 920*1 080。通過實驗測試,表1為4種不同分辨率圖像數(shù)據(jù)采用不同模式的OpenCL和軟件執(zhí)行時間。對于計算模型1,通過時間戳測量所有像素點依次完成灰度轉(zhuǎn)換到Sobel灰度值完成運算的總時間;對于計算模型2,測量從將所有像素依次完成灰度轉(zhuǎn)換后放入緩沖區(qū),到緩沖區(qū)像素點灰度值完成Sobel運算的時間;對于模型3,測量主機(jī)像素數(shù)據(jù)拷貝到設(shè)備、OpenCL內(nèi)核從開始執(zhí)行到結(jié)束和將Sobel運算結(jié)果從設(shè)備拷貝到主機(jī)的總時間;對于模型4,僅測量OpenCL內(nèi)核從開始執(zhí)行到結(jié)束時間,像素數(shù)據(jù)和Sobel運算結(jié)果的在共享內(nèi)存中讀寫時間總時間。

        從實驗數(shù)據(jù)來看,OpenCL非共享內(nèi)存計算性能是無緩沖區(qū)的軟件處理的4~6倍,是由緩存區(qū)的軟件處理的2~3倍。在OpenCL非共享內(nèi)存計算中,主機(jī)內(nèi)存拷貝的時間是設(shè)備內(nèi)核執(zhí)行時間的17~19倍。

        OpenCL共享內(nèi)存的計算方式較非共享內(nèi)存方式,性能提高約20倍;較帶緩存區(qū)的軟件處理性能提升約50倍;較不帶緩存區(qū)的軟件處理性能提高約100倍。

        已知HPS內(nèi)Cortex-A9的運行頻率為900 Mhz,Quartus II編譯報告給出的內(nèi)核運行頻率為129 Mhz。因此,OpenCL的共享內(nèi)存方式較帶緩存的軟件處理方式,在Sobel計算的每赫茲性能提升約340倍。

        4 結(jié)論

        本文提出一種OpenCL與FPGA異構(gòu)模式進(jìn)行Sobel邊緣檢測算法的并行性方案,在DE1SOC硬件平臺上完成了OpenCL加速功能。實驗結(jié)果表明,OpenCL與FPGA異構(gòu)模式并行性運算方式,與ARM處理的軟件在相同算法上有很大性能提升。OpenCL與FPGA異構(gòu)模式與傳統(tǒng)硬件平臺相比,提高了系統(tǒng)執(zhí)行效率。綜合上述實驗和結(jié)論, OpenCL與FPGA模式在實時圖像處理領(lǐng)域有很大應(yīng)用價值。

        [1] Meng X, Chaudhary V. A High-Performance Heterogeneous Computing Platform for Biological Sequence Analysis[J]. IEEE Transactions on Parallel & Distributed Systems, 2010, 21(9):1267-1280.

        [2] Plaks T P. Proceedings of the International Conference on Engineering of Reconfigurable Systems and Algorithms, June 23 - 26, 2003, Las Vegas, Nevada, USA[J]. Thorax, 2003, 45(11):907-907.

        [3] 袁春蘭,熊宗龍,周雪花,等.基于Sobel算子的圖像邊緣檢測研究[J].激光與紅外,2009,39(1): 85-87.

        [4] 何春華,張雪飛,胡迎春. 基于改進(jìn)Sobel算子的邊緣檢測算法的研究[J]. 光學(xué)技術(shù),2012,38(3): 323-327

        [5] 鄧仰東,朱茂華,劉春峰. 異構(gòu)處理器OpenCL編程導(dǎo)論[M]. 北京: 機(jī)械工業(yè)出版社, 2016: 120.

        [6] (美)Raymod Tay,OpenCL異構(gòu)并行編程實踐[M]. 張立浩譯. 北京: 機(jī)械工業(yè)出版社, 2015.

        [7] 黃樂天. FPGA異構(gòu)計算:基于OpenCL的開發(fā)方法[M]. 西安: 西安電子科技大學(xué)出版社, 2016.

        [8] 徐 波. Altera Cyclone V的Linux系統(tǒng)的搭建[J]. 科技資訊,2014(34): 15-15.

        [9] 徐 家,陳 奇. 基于V4L2 的視頻設(shè)備驅(qū)動開發(fā)[J]. 計算機(jī)工程與設(shè)計, 2010, 31(16): 3569-3572.

        [10] 雷 洪,熊文龍. 基于 Frambuffer 的 LCD 驅(qū)動程序的實現(xiàn)[J]. 武漢理工大學(xué)學(xué)報: 交通科學(xué)與工程版, 2006, 30(1): 106-109.

        [11] 宋寶華. Linux設(shè)備驅(qū)動開發(fā)詳解:基于最新的Linux 4.0內(nèi)核[M]. 北京: 機(jī)械工業(yè)出版社, 2016.

        [12] 范興山,彭 軍,黃樂天. 基于OpenCL的FPGA設(shè)計優(yōu)化方法研究[J]. 電子技術(shù)應(yīng)用,2014,40(01):16-19.

        [13] 詹 云,趙新燦,譚同德. 基于OpenCL的異構(gòu)系統(tǒng)并行編程[J]. 計算機(jī)工程與設(shè)計,2012,33(11):4191-4195,4293.

        [14] Intel? Cyclone? V SoC Development Kit Reference Platform Porting Guide. Version 17.0[EB/OL]. https://www.altera.com

        [15] Intel? FPGA SDK for OpenCL Getting Started Guide. Version 17.0[EB/OL]. https://www.altera.com.

        猜你喜歡
        模型
        一半模型
        一種去中心化的域名服務(wù)本地化模型
        適用于BDS-3 PPP的隨機(jī)模型
        提煉模型 突破難點
        函數(shù)模型及應(yīng)用
        p150Glued在帕金森病模型中的表達(dá)及分布
        函數(shù)模型及應(yīng)用
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
        3D打印中的模型分割與打包
        a国产一区二区免费入口| 亚洲自拍偷拍色图综合| 国产欧美日韩中文久久| 亚洲成av人片一区二区| 国产精品视频流白浆免费视频| 在线一区二区三区视频观看| 久久免费亚洲免费视频| 狠狠躁日日躁夜夜躁2020| 国产欧美日韩a片免费软件| 亚洲欧洲日产国码久在线| 日韩有码中文字幕在线视频| 熟女无套高潮内谢吼叫免费| 亚洲av永久无码精品一区二区| 日本丰满妇人成熟免费中文字幕| 91青青草视频在线播放| 国产精品国产高清国产专区| 精精国产xxxx视频在线播放| 久久久伊人影院| 日本岛国视频在线观看一区二区| 亚洲伦理第一页中文字幕| 日日婷婷夜日日天干| 婷婷丁香91| 美女偷拍一区二区三区| 精品一二三四区中文字幕| 99re8这里有精品热视频免费| 日韩秘 无码一区二区三区| 手机在线观看成年人视频| 激情内射人妻1区2区3区| 337人体做爰大胆视频| 久久久久久久尹人综合网亚洲| 国产一区二区三区精品乱码不卡| 亚洲av无码一区东京热| 欧美综合自拍亚洲综合图片区| 午夜爽毛片| 一级老熟女免费黄色片| 狠狠躁夜夜躁人人爽天天古典| 无码的精品免费不卡在线| 国产一级黄片久久免费看| 久久精品国产99国产精品澳门| 吃奶摸下的激烈视频| 日韩在线视频不卡一区二区三区 |