亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于MIC計算平臺的NLM并行圖像增強方法與流程

文檔序號:12271075閱讀:780來源:國知局
一種基于MIC計算平臺的NLM并行圖像增強方法與流程

本發(fā)明屬于遙感圖像處理領域,具體涉及一種基于MIC計算平臺的NLM并行圖像增強方法。



背景技術:

遙感圖像去噪是遙感圖像處理領域的關鍵技術,其在圖像識別、圖像分割以及復原等方面發(fā)揮著重要的作用。

遙感圖像去噪發(fā)展至今,涌現出很多優(yōu)秀的去噪方法。從早期的基于鄰域的平均去噪方法到后來的基于小波、多小波、輪廓波等的去噪算法,再到能夠局部自適應的去噪方法。這些方法都是基于局部的去噪方法,所謂基于局部就是使用特定的核與帶噪圖像作卷積運算,主要利用的是像素點間的空間關系。圖像去噪的過程就是將周圍像素點灰度值通過某種加權方式進行求和,以估計目標像素點的灰度值。此估計值只受到目標像素周圍其他像素灰度值的影響。圖像去噪屬于圖像增強的一個重要方面,是遙感圖像相關應用領域中重要的預處理步驟。目前,已有眾多學者投入到對圖像去噪的研究當中,并提出了很多去噪方法。但其中的大多數效果并不十分理想,去噪過程中很多圖像的紋理細節(jié)被丟失掉。

NLM(Nonlocal Means)算法由Buades等人于2005年提出,是一種全新的圖像去噪方法,基于完全不同的去噪策略。這一方法基于圖像的自相似性原理,充分利用了圖像中廣泛存在的冗余信息,利用圖像片來計算圖像中不同像素點間的相似度,更好地保護了圖像的紋理結構信息,取得了顯著的去噪效果。雖然NLM去噪性能效果良好,但具有較高的計算復雜度,在CPU中計算耗時較長。為了提升算法運行速度,近些年來對NLM圖像增強算法進行加速主要從以下幾個方面展開:有些是通過改進算法本身對NLM進行加速,有些是利用目前流行的高性能計算設備對算法進行加速。通常來說,后者往往能取得更好的加速效果,且由于無需改動算法本身,采用硬件加速也使得提升算法性能的過程變得簡單、快捷。有些學者利用GPU對NLM算法進行了加速,但是這種方式存在缺陷:首先基于GPU的并行編程比較復雜,在編程的過程中需要程序員對硬件底層架構和參數有一定了解,其次,CUDA編寫的程序不利于往其他平臺的遷移,在程序的并行方式方面較為單一。想提升算法運算速度的另一種方式是使用計算機集群,但集群設備價格昂貴,耗電量大,且維護起來較為麻煩。

針對上述硬件平臺存在的缺陷,Intel公司推出了至強融核(Intel Xeon Phi)系列產品。該系列基于集成眾核架構即MIC,每個協處理器上包含50個以上的X86核心,使得高性能計算單節(jié)點上的計算能力大幅度提升。



技術實現要素:

針對上述存在問題或不足,本發(fā)明提供了一種基于MIC計算平臺的NLM并行圖像增強方法。

具體包含以下步驟:

首先,程序主體先在CPU執(zhí)行,當運行至NLM核心代碼段時,在其前面使用offload語句,表示接下來的代碼段要在MIC卡執(zhí)行。

當程序執(zhí)行到offload語句時,數據傳入MIC端,MIC端開始執(zhí)行并行任務并同時將控制權交回給CPU線程,CPU在得到控制權后繼續(xù)執(zhí)行下面的代碼;CPU端的并行任務結束后,等待MIC端任務結束的信號,如果信號沒有到達,則繼續(xù)等待,如果到達則將數據從MIC端傳出并繼續(xù)執(zhí)行下面的語句。

然后,使用數據傳輸關鍵字,將運算時需要用的變量、指針傳入MIC卡,并使用alloc_if、free_if關鍵字控制MIC端空間的開辟和釋放。

被MIC端調用的函數和變量在定義時需要標記為__attribute__((target(mic))),才能在被offload到卡上后正確執(zhí)行。

將現有NLM串行程序使用offload模式移植成為MIC程序的過程中,需要首先根據欲并行的部分,將串行程序改寫為OpenMP并行程序,然后確定輸入輸出變量,書寫相應的offload語句,將并行代碼移植到MIC上。

進一步的,上述并行算法中,當MIC卡進行計算的時候,CPU處于空閑狀態(tài),為了將CPU的計算資源充分利用,設計了MIC/CPU協同并行算法。

在CPU端調用offload語句時,在其結尾處使用signal關鍵字發(fā)出信號,MIC端將啟動并開始執(zhí)行其并行代碼段,與此同時CPU端并不會因此而處于等待狀態(tài),而是繼續(xù)執(zhí)行自身代碼,直到遇到offload_wait語句;此時CPU開始等待接收來自MIC的信號,當MIC函數執(zhí)行完畢返回時,發(fā)送信號給CPU端,CPU端在接收到該信號后便可繼續(xù)執(zhí)行后面的程序;過程中用到nocopy、offload_transfer、signal和wait關鍵字。

基于動態(tài)任務分配的MIC/CPU協同并行算法分別用兩個線程進行管理CPU、MIC端的計算過程。

在計算開始執(zhí)行前,將輸入圖像以行為單位切分為多個數據塊,計算開始時,CPU和MIC設備按分塊順序分別獲取一個不同的數據塊進行處理,待各自處理完成之后,無需等待,繼續(xù)獲取下一個未處理的數據塊,直至所有數據塊處理完成。

兩個線程的建立使用OpenMP的#pragma omp parallel for num_threads(device_num)指令來完成,然后從邏輯上對圖像進行劃分,并保證CPU端和MIC端進行處理任務時的一致性;前者可以維護一個全局變量,用來保存數據片處理的進度,每次CPU或MIC獲取任務時,將此變量加1,直至增加到所有數據片都處理完成;后者的實現通過使用鎖機制,當一個設備完成當前計算任務即將獲取下一個計算任務時,先將保存數據片處理進度的變量加鎖,獲取任務后再進行解鎖,上鎖過程中如果另外一個設備也完成了當前任務準備對全局變量進行修改時,需要等到此全局變量處于解鎖狀態(tài),以保證數據劃分的一致性。

在任務進行處理的過程中,MIC計算的部分在計算完成之后需要將數據從MIC端傳回CPU端,此處用#pragma offload_transfer target(mic:0)out(ptO[bl:br-bl]:alloc_if(0)free_if(1))命令;target使用的格式為target(),括號里填寫具體的MIC設備。

CPU端在處理任務的時候開啟多線程,這里用到OpenMP指令,且在最外層指令前使用omp_set_nested(),并將其參數置為1。

nocopy關鍵字,表示在MIC端不拷貝數據,僅建立空間,不復制數據;nocopy使用的場合有兩個:一個是在不同的offload區(qū)域,如果后一次需要用到前一次計算后的某些變量和數據,則可以使用nocopy避免數據通過內存中轉,造成浪費;另一個是,當變量作為設備代碼段中的臨時變量時,可以使用nocopy屬性,減少數據傳輸;所述臨時變量即不需要從主機端賦初值,也無需傳回主機端。

signal和wait關鍵字,用于異步傳輸,兩者成對使用以實現在啟動MIC端代碼段后,CPU端無需等待offload語句的返回便可繼續(xù)往下執(zhí)行自身代碼;signal語句的作用是在offload代碼段結束之后發(fā)送一個信號,wait語句可以對該信號進行接收;offload_transfer關鍵字與offload類似,只負責數據傳輸,后面不加入計算的代碼段,其支持的參數與offload語句相同。

進一步的,所述MIC計算平臺中,包含1塊CPU和n個MIC共n+1個計算設備,n>0,在主程序中開啟n+1個線程來管理各設備,程序中同樣利用鎖機制來保證各設備的任務分配一致性,利用omp_set_nested()指令開啟CPU設備的嵌套并行。

綜上所述,本發(fā)明的有益效果是:

(1)MIC架構之上的并行算法可以克服常規(guī)集群式并行計算成本、維護代價過高,以及GPU并行算法開發(fā)困難,不易移植等缺陷;將Intel Xeon Phi計算平臺引入大數據量、高計算復雜度的遙感圖像處理領域,將在某種程度上為遙感圖像并行化處理提供新的思路;

(2)MIC架構自2011年推出至今,很多研究人員對其還不了解,相關文獻資料也較為缺乏,本發(fā)明將有利于MIC技術的普及,在促進其在遙感圖像處理領域的使用和發(fā)展方面具有一定的作用與意義。

附圖說明

圖1為技術路線圖;

圖2為串行算法偽代碼;

圖3為NLM算法流程圖;

圖4為NLM算法offload模式流程圖;

圖5為NLM算法并行化分析代碼;

圖6為單MIC并行算法偽代碼;

圖7為單MIC并行算法程序偽代碼;

圖8為MIC/CPU協同并行算法流程圖;

圖9為MIC/CPU動態(tài)任務分配算法流程圖;

圖10為動態(tài)任務分配并行算法;

圖11為3MIC+CPU動態(tài)任務分配算法思路圖;

圖12為3MIC+CPU動態(tài)調度并行算法框架偽代碼。

具體實施方式

下面結合實施例、附圖和表格,詳細說明本發(fā)明的技術方案。

一,理解常見遙感圖像增強算法:非局部均值算法、高斯濾波、中值濾波、拉普拉斯銳化等。分析它們的共性,選擇代表性算法理解其實現過程,找出制約算法性能的瓶頸。同時,并根據MIC的并行計算特性,明確算法各階段可并行部分;

NLM算法中有兩個新的概念:window和patch。patch代表以選定像素點為中心的n*n的矩形區(qū)域,window代表算法執(zhí)行過程中patch可移動的范圍。

NLM算法整體邏輯比較簡單,大致可劃分為以下步驟:

1)為帶噪圖像中每一個像素點確定一個window和一個patch;

2)計算特定window中,每個patch和目標patch的距離、權重;

3)根據權重將像素點的灰度值累加到一起;

4)將最大權重賦予當前patch,并將像素點的灰度值累加;

5)對累加的值進行歸一化處理;

6)對帶噪圖像每個像素點進行上述步驟;

7)后續(xù)處理。

從以上NLM算法的執(zhí)行過程能夠看出,NLM算法之所以耗時,是因為要對圖像中每個像素點重復1~6步。n*n的圖像,以上步驟要重復n2次。串行算法偽代碼如圖2所示。

從圖2串行代碼可以看出,算法主體集中在一個兩層的for循環(huán)體中。本發(fā)明使用Vtune性能分析工具對上述串行算法進行了分析,發(fā)現兩層循環(huán)體占據了算法總耗時的99%以上,即為NLM算法的熱點部分。

另外,根據NLM算法原理并聯系串行代碼進行分析,可知在算法處理過程中,各像素點相互獨立,循環(huán)體前后計算之間無數據依賴關系。說明該算法熱點部分具有良好的可并行性,符合并行化條件。下一步將基于算法熱點,利用Intel Xeon Phi協處理器對算法進行并行化設計。

二,研究MIC硬件體系的特征,針對非局部均值去噪算法的瓶頸部分,完成算法的并行化設計,然后采用MIC offload并行模型完成對并行算法的實現;

在將NLM算法并行化前,要設計出合理的并行化思路為下一步的并行化工作打好基礎。下面將結合NLM算法原理及MIC眾核硬件特性,對并行思路進行介紹。

MIC眾核平臺的優(yōu)勢在于他們的核心數,常見多核CPU往往具有4個至12個核心,MIC眾核的核心數一般可達60個左右。多個核心意味著可開啟更多的線程數,多個線程并發(fā)執(zhí)行其性能將遠超串行程序。

如圖3所示,非局部均值濾波算法在確定目標像素點后,需要固定匹配窗口,遍歷搜索窗中的像素,每次移動一個像素,計算相應權值。如果噪聲圖像大小為N×N,匹配窗口的大小為W×W,搜索窗的大小為K×K,則算法復雜度為O(N2×K2×W2)。這樣的算法耗時,如果用串行程序實現的話,隨著圖像增大,程序運行時間將從幾十分鐘到若干小時,無法滿足去噪算法的實時性需求。合理分配和使用好硬件平臺眾多的核心是NLM算法并行化的關鍵。根據上圖,可以把對圖像中像素點的計算映射到多核/眾核平臺的多線程當中,每個線程負責計算相應像素點。多個線程并行執(zhí)行,可極大縮短算法處理時間。

三,單MIC并行算法實現

由于NLM算法的高并行性,在MIC平臺的并行化過程本發(fā)明采用以CPU為中心,MIC協同計算的模式,即offload模式。程序主函數(main函數)由CPU發(fā)起,執(zhí)行到高并行計算部分交給MIC計算,并行計算部分將運行于MIC卡上,圖4所示為流程圖。

本發(fā)明將現有NLM串行程序使用offload模式移植成為MIC程序的過程中,需要首先根據欲并行的部分,將串行程序改寫為OpenMP并行程序,然后確定輸入輸出變量,書寫相應的offload語句,將并行代碼移植到MIC上。

NLM算法是典型的空間域去噪算法,算法處理過程中各像素點相互獨立。算法執(zhí)行過程中要對圖像的每一個像素點進行相同的處理:確定搜索框、計算權值、歸一化權值、賦值。所有像素點的處理共用同樣的流程,算法主體集中在一個兩層的for循環(huán)體中。如圖5所示:

程序中的兩層循環(huán)都沒有數據依賴,即兩層循環(huán)都可以實施并行。這種情況下,通常會根據粗粒度的并行原則,盡量在外層循環(huán)實施并行。這樣會使得程序有較大的并行粒度,降低線程調度和銷毀的次數,減少程序中線程本身開銷所占的比例。另外,對外層循環(huán)并行,實施起來也較為方便。

本發(fā)明中采用對外層循環(huán)并行的方式。并行化后的算法偽代碼如圖6所示:

其中omp_set_num_threads(NUM_THREADS)用來設定開啟的線程數。

往MIC卡移植的過程,需要用到MIC語言擴展里面幾個重要的關鍵字:

1)offload關鍵字。在CPU與MIC主從模式中,offload是最重要的關鍵字,也是MIC程序的根本。其作用是表示:在offload作用范圍內(即最靠近offload語句下面的第一個代碼段)的程序代碼要在MIC卡上運行。

2)數據傳輸關鍵字:in、out、inout等。這些關鍵字表示了在設備端開辟空間后是否要將主機端數據復制到設備端以及待計算結束后是否需要將數據進行輸出,這樣在代碼離開MIC端時,驅動就會根據不同的關鍵字選擇是否將變量內容拷貝到內存中的相應位置去。如關鍵字in,表示在設備端開辟空間并將主機端數據復制到設備端;inout,表示在設備端開辟空間,當設備端代碼執(zhí)行結束后,將數據復制到主機端。

3)alloc_if和free_if關鍵字。這兩個關鍵字需要判斷型表達式作為參數。對alloc_if來說,如果其參數結果為真,則在進入設備端的時候為變量開辟空間;而對free_if來說,如果其參數結果為真,則在離開設備端的時候為變量釋放空間。

本發(fā)明中,程序主體先在CPU執(zhí)行,當運行至NLM核心代碼段時,在其前面使用offload語句,表示接下來的代碼段要在MIC卡執(zhí)行。然后使用in、out等數據傳輸關鍵字,將運算時需要用的變量、指針傳入MIC卡,并使用alloc_if、free_if關鍵字控制MIC端空間的開辟和釋放。

算法程序如圖7所示。

需要注意的是,算法往MIC端移植時一些函數和變量的類型需要相應修改。被MIC端調用的函數和變量在定義時需要標記為__attribute__((target(mic))),才能在被offload到卡上后正確執(zhí)行。如:在MIC中需要調用到的pixDist函數,定義時需要寫成如下形式:__attribute__((target(mic)))pixDist(…)

四,MIC/CPU協同并行算法實現

目前為止,算法并行部分全部交由MIC端進行處理,CPU只做一些控制的工作。這樣做雖達到了一定加速比,但是降低了CPU的使用率。因為在MIC執(zhí)行并行部分的時候,CPU一直處于空閑等待狀態(tài)。待MIC處理結束后,將數據交至CPU端,此時CPU的計算才能繼續(xù)進行。這對某些MIC運行時間比較短的應用來說,還不是什么問題。但是對某些計算十分密集的應用來說,大量CPU計算能力就會被閑置。畢竟,CPU對于MIC來說,有單核計算能力強、不需要傳入傳出數據等優(yōu)勢,如果能結合CPU和MIC二者共同計算,則性能會更上一個臺階。

為避免在MIC進行計算時CPU資源處于閑置狀態(tài),使能充分利用各計算資源,本發(fā)明在上述MIC并行程序的基礎上開發(fā)了MIC/CPU協同并行程序。流程圖如圖8所示。

如圖8所示,當程序執(zhí)行到offload語句時,數據傳入MIC端,MIC端開始執(zhí)行并行任務并同時將控制權交回給CPU線程,CPU在得到控制權后繼續(xù)執(zhí)行下面的代碼。CPU端的并行任務結束后,等待MIC端任務結束的信號,如果信號沒有到達,則繼續(xù)等待,如果到達則將數據從MIC端傳出并繼續(xù)執(zhí)行下面的語句。

MIC/CPU協同程序在上面并行程序的基礎上進行開發(fā),過程中主要用到nocopy、offload_transfer、signal和wait關鍵字,

1)nocopy關鍵字。表示在MIC端不拷貝數據,僅建立空間,不復制數據。一般nocopy使用的場合有兩個。一個是在不同的offload區(qū)域,如果后一次需要用到前一次計算后的某些變量和數據,則可以使用nocopy避免數據通過內存中轉,造成浪費。另一個場合是,當變量作為設備代碼段中的臨時變量時(即不需要從主機端賦初值,也無需傳回主機端),可以使用nocopy屬性,減少數據傳輸。

2)signal和wait關鍵字。這兩個關鍵字主要用于異步傳輸,兩者配合可以實現在啟動MIC端代碼段后,CPU端無需等待offload語句的返回便可繼續(xù)往下執(zhí)行自身代碼。signal語句的作用是在offload代碼段結束之后發(fā)送一個信號,wait語句可以對該信號進行接收,二者通常情況下成對使用。offload_transfer關鍵字與offload類似,但是其只是負責數據傳輸,后面不加入計算的代碼段。其支持的參數與offload語句相同。

本發(fā)明中,在CPU端調用offload語句后,MIC端將啟動并開始執(zhí)行其并行代碼段,與此同時CPU端并不會因此而處于等待狀態(tài),而是繼續(xù)執(zhí)行自身代碼,直到遇到offload_wait語句。此時CPU開始等待接收來自MIC的信號,當MIC函數執(zhí)行完畢返回時,發(fā)送信號給CPU端。CPU端在接收到該信號后便可繼續(xù)執(zhí)行后面的程序。

具體步驟如下:

1)在CPU端調用offload語句時,在其結尾處使用signal關鍵字發(fā)出信號;

2)在CPU計算部分執(zhí)行完畢后利用wait關鍵字接收來自MIC端的作業(yè)終止信號;

3)CPU接收到信號后繼續(xù)往下執(zhí)行,此時MIC端再將計算后的數據傳至CPU;

4)基于動態(tài)任務分配的MIC/CPU協同并行算法實現。

MIC/CPU協同并行算法主要用到MIC編程模型中的異步編程模型。這種方式有其自身的缺陷:算法執(zhí)行前即對任務進行分配。這將導致如果兩個設備計算完成的時間不同步,則會發(fā)生先完成任務的計算設備處于等待狀態(tài),浪費計算資源。

為了解決這個問題,本發(fā)明將動態(tài)任務分配機制引入MIC/CPU協同并行算法中,提出了基于動態(tài)任務分配的MIC/CPU協同并行算法。該算法改變了原始協同并行算法中任務劃分必須在計算執(zhí)行前進行的方式,使算法可以在計算過程中根據設備性能動態(tài)地對任務進行分配。算法具體流程如圖9所示。

如圖9所示,基于動態(tài)任務分配的MIC/CPU協同并行算法分別用兩個線程進行管理CPU、MIC端的計算過程。在計算開始執(zhí)行前,將輸入圖像以行為單位切分為多個數據塊。計算開始時,CPU和MIC設備按分塊順序分別獲取一個不同的數據塊進行處理,待各自處理完成之后,無需等待,繼續(xù)獲取下一個未處理的數據塊,直至所有數據塊處理完成??梢钥闯?,與之前的MIC/CPU協同算法不同的是,本算法中任務粒度被減小至處理一個數據分塊,并在計算過程中對任務動態(tài)分配。處理一個分塊的時間將成為各計算設備在算法執(zhí)行中的單位任務處理時間。當一個計算設備計算完成所有任務開始等待時,最壞情況下其等待時間即為另一個計算設備的單位任務處理時間。因此,設備等待時間大大縮短。

本算法中需要分出兩個線程,負責管理CPU和MIC設備的計算任務。此線程的建立使用OpenMP的#pragma omp parallel for num_threads(device_num)指令來完成。然后從邏輯上對圖像進行劃分,并保證CPU端和MIC端進行處理任務時的一致性。前者可以維護一個全局變量,用來保存數據片處理的進度,每次CPU或MIC獲取任務時,將此變量加1,直至增加到所有數據片都處理完成;后者的實現可以通過使用鎖機制,當一個設備完成當前計算任務即將獲取下一個計算任務時,先將保存數據片處理進度的變量加鎖,獲取任務后再進行解鎖。上鎖過程中如果另外一個設備也完成了當前任務準備對全局變量進行修改時,需要等到此全局變量處于解鎖狀態(tài),這樣就保證了數據劃分的一致性。

在任務進行處理的過程中,MIC計算的部分在計算完成之后需要將數據從MIC端傳回CPU端,此處可用#pragma offload_transfer target(mic:0)out(ptO[bl:br-bl]:alloc_if(0)free_if(1))命令。這里用到了offload_transfer和target關鍵字,offload_transfer語句與offload類似,但有個特點是只負責數據傳輸,后面不加入計算代碼。其支持的參數也與offload語句相同。

target使用的格式為target(),括號里填寫具體的MIC設備,比如本發(fā)明使用的是target(mic:0),表示數據是從序號為0的MIC設備(即第一塊MIC)傳出。

另外,CPU端在處理任務的時候也應該開啟多線程,這里需要用到OpenMP指令。由于之前在劃分CPU、MIC的管理線程時已經使用過OpenMP指令,此時再用,將需要用到OpenMP的命令嵌套功能,因此需要在最外層指令前使用omp_set_nested(),并將其參數置為1。

綜上,得到本發(fā)明中動態(tài)任務分配并行算法所使用的程序框架,偽代碼如圖10所示。

此外,在設計動態(tài)調度算法時將面臨一個問題:按行來對輸入圖像進行切分,此過程中,切分的粒度大小將對并行算法的效率產生影響。比如512*512的圖像,可以1行為一個數據塊,將整幅圖像切分為512份,也可以64行為一個數據塊,將圖像分為8塊。這兩種分發(fā)各有優(yōu)缺點:對前者來說,數據劃分的粒度足夠細,這樣使得單位任務處理時間降到最短,但是由于數據塊的數量過多,導致線程的調度時間增長,不利于整體算法效率的提升;而對于后者來說,數據塊的數量減少至8,降低了線程調用的耗時的同時,數據粒度的增大將導致單位任務處理時間變長。同樣不利于算法整體效率的提升。因此基于動態(tài)任務分配的并行算法在對數據進行切分的過程中,必須充分考慮切分粒度對算法效率的影響。后面的實驗分析部分將結合實驗對如何選擇合適的數據切分粒度進行深入分析。

以上所設計的并行算法都是基于單MIC,本實施例的實驗平臺配備3塊MIC計算卡,如果能充分利用所有MIC卡的計算能力,那么并行算法的性能將得到進一步提升。因此在上述動態(tài)任務分配的MIC/CPU協同算法基礎上進行擴展,得到了3MIC+CPU并行算法。算法示意圖如圖11所示。

3MIC+CPU并行算法基于上述動態(tài)任務分配的MIC/CPU協同并行算法,利用前面算法的鋪墊,在數據任務分配上也使用動態(tài)任務分配策略。在算法運行之前從邏輯上將輸入圖像進行切分,各計算設備按照自身計算的快慢獲取相應數目的計算任務,最終計算快的設備將獲取更多的任務,計算慢的設備相應獲得較少任務。

由于本算法中將涉及到一塊CPU和三塊MIC共四個計算設備,因此需要在主程序中開啟四個線程來管理各設備。程序中同樣利用鎖機制來保證各設備的任務分配一致性。利用omp_set_nested()指令開啟CPU設備的嵌套并行。整體算法框架如圖11所示:

3MIC+CPU動態(tài)調度并行算法框架偽代碼如圖12所示。

前面在介紹MIC/CPU動態(tài)任務分配算法時曾提到,任務切分的粒度不同將導致最終算法執(zhí)行效率的差異,因此算法在運行之前應盡量使用最適合的任務劃分粒度。在本算法中,計算設備增加到4個,任務調度的環(huán)境變得更加復雜,其任務切分粒度方面的情況將與前面的算法迥異。另外本算法在設計中還需要考慮的一點是:由于算法共利用了3塊MIC卡作為計算資源,這3塊MIC卡的管理將由主進程分出的3個線程負責。前文中提到,MIC卡在首次運行offload時有個預熱的過程。前面對單MIC并行算法進行優(yōu)化的時候,優(yōu)化方式之一就是在算法執(zhí)行之前調用offload語句,以使預熱提前。但是針對預熱的優(yōu)化只能針對主線程中的MIC設備。在本算法中,由于涉及到3MIC卡,其中只能有一塊處于主線程,其他處于副線程管理的2塊MIC將無法預熱。這會對算法效率產生一定影響。

總之,雖然去噪效果優(yōu)異,但是NLM算法具有較高的時間復雜度,無法滿足人們實時性處理的需求。針對此問題,本發(fā)明基于英特爾集成眾核(Many Integrate Core,MIC)架構在至強融核(Intel Xeon Phi)協處理器上進行了NLM并行化研究。并且取得了良好的加速效果??偟膩碚f有以下幾個方面:

1)通過深入理解非局部均值去噪算法的原理,對串行算法進行熱點分析,找出了算法的耗時步驟并分析其可并行性。利用基于MIC架構的Intel Xeon Phi協處理器實現了基于單MIC的NLM并行算法并取得了良好的加速效果,噪聲參數取50時,1024*1024圖像的加速比達到26.2X;

2)實現了MIC/CPU協同計算的NLM并行算法,該算法使用了MIC編程模型中的異步編程機制,在MIC端執(zhí)行計算任務的時候CPU端可異步地參與計算,該算法的加速比相比之前的并行算法有了大幅提升。噪聲參數取50時,三種尺寸圖像的加速比達到62X;

3)針對MIC/CPU協同并行算法任務分配問題,提出了基于動態(tài)任務分配的MIC/CPU協同并行算法,該算法更充分得利用了硬件計算資源,使得加速比進一步提升;

4)為將高性能平臺的3塊MIC卡利用起來,本實施例設計了3MIC+CPU并行NLM算法,該算法將四塊硬件設備作為計算單元,使用動態(tài)任務分配策略,進一步提升了加速效果。噪聲參數取50時,2048*2048圖像的加速比達到129.2X。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1