本發明涉及一種圖像處理方法,尤其是一種應用于圖像處理的基于雙顯卡的gpu并行計算方法。
背景技術:
現代gpu提供了頂點處理器和片段處理器兩個可編程并行處理部件。在利用gpu執行圖像處理等通用計算任務時,要做的主要工作是把待求解的任務映射到gpu支持的圖形繪制流水線上。通常的方法是把計算任務的輸入數據用頂點的位置、顏色、法向量等屬性或者紋理等圖形繪制要素來表達,而相應的處理算法則被分解為一系列的執行步驟,并改寫為gpu的頂點處理程序或片段處理程序,并調用片段程序進行處理;最后,保存在幀緩存中的繪制結果就是算法的輸出數據。
gpu對圖像處理的應用已經十分普遍,但是并沒有協調多張顯卡同步對單張圖像進行處理的應用,尤其是對于高分辨率醫學圖像實時處理,單顯卡的處理效率有時無法滿足圖像的實時性。
技術實現要素:
本發明的目的是提供一種提高圖像處理的實時性和處理效率的方法。
為了實現上述目的,本發明的技術方案是:
一種應用于圖像處理的基于雙顯卡的gpu并行計算方法,它包括以下步驟:
步驟一:初始化雙顯卡的gpu資源;
步驟二:將圖像內存劃分為圖像數據塊一和圖像數據塊二,圖像數據塊一和圖像數據塊二在物理空間上連續,設定圖像數據塊一和圖像數據塊二的重疊區域大小;
步驟三:創建并啟動兩個線程,分別調用兩張顯卡對應的gpu資源,執行圖像處理程序,得到圖像數據塊一和圖像數據塊二各自的處理結果;
步驟四:丟棄重疊區域的數據,合并圖像數據塊一和圖像數據塊二的處理結果,完成雙顯卡的gpu對一張圖像的并發處理。
進一步地,步驟一具體為:
步驟101:安裝gpu運行所需的庫文件;
步驟102:初始化顯卡設備,在平臺中尋找gpu資源可以調用的顯卡;
步驟103:初始化顯卡設備信息,建立gpu運行必需的程序對象;
步驟104:編譯gpu并行程序模塊。
進一步地,步驟二中,圖像內存劃分方式為:水平分割、縱向分割或斜向分割;水平分割時:
步驟201:將圖像內存以水平分割線均勻分割為兩塊;
步驟202:沿水平分割線向上下兩側分別構建大小相等的重疊區域一和重疊區域二,重疊區域一和重疊區域二的數據與底層圖像內存的數據一致,構建圖像數據塊一,包括水平分割線上方的部分和重疊區域二,構建圖像數據塊二,包括水平分割線下方的部分和重疊區域一;
步驟203:對圖像數據塊一和圖像數據塊二進行鄰域計算,對圖像數據塊一進行鄰域計算時,重疊區域二只提供數據,對圖像數據塊二進行鄰域計算時,重疊區域一只提供數據。
進一步地,所述的步驟二中縱向分割時:先將圖像轉置90°,再按照水平分割處理。
進一步地,步驟202中所述的重疊區域大小是根據鄰域計算的大小來確定的,重疊區域的大小為鄰域計算高度的兩倍。
進一步地,步驟三具體為:
步驟301:創建并啟動兩個線程,分別調用兩張顯卡對應的gpu資源。
步驟302:在兩個線程內執行圖像處理程序,每個線程分別對應一個圖像數據塊,使用線程控制接口同步等待兩個線程完成相應的處理,記錄兩張顯卡運行時間較長者為圖像內存處理的時間。
進一步地,步驟四具體為:
步驟401:圖像數據塊一丟棄重疊區域二的數據,圖像數據塊二丟棄重疊區域一的數據;
步驟402:合并圖像數據塊一和圖像數據塊二的處理結果;
步驟403:釋放gpu資源,輸出處理結果。
本發明的有益效果:
本發明提高了圖像處理的計算效率,整體效率可以提升70%~80%,對于目前的主流4k圖像畫面,雙顯卡的gpu并發機制可以大大提高圖像處理的實時性,同時成本上低于同類效果的dsp或者fpga硬件設計,對于高分辨率圖像的實時處理和現實意義很大,同時通過設定重疊區域,保證了新的邊緣附近的像素計算與原圖一致。
附圖說明
通過結合附圖對本發明示例性實施方式進行更詳細的描述,本發明的上述以及其它目的、特征和優勢將變得更加明顯,其中,在本發明示例性實施方式中,相同的參考標號通常代表相同部件。
圖1是圖像內存水平分割圖。
圖2是圖像內存縱向分割圖。
圖3是重疊區域示意圖。
具體實施方式
下面將參照附圖更詳細地描述本發明的優選實施方式。雖然附圖中顯示了本發明的優選實施方式,然而應該理解,可以以各種形式實現本發明而不應被這里闡述的實施方式所限制。
如圖1-3所示,一種應用于圖像處理的基于雙顯卡的gpu并行計算方法,其特征是它包括以下步驟:
步驟一:初始化雙顯卡的gpu資源,確保設備的有效性;具體為:安裝gpu運行所需的庫文件;初始化顯卡設備,在平臺中尋找gpu資源可以調用的顯卡;初始化顯卡設備信息,建立gpu運行必需的程序對象;編譯gpu并行程序模塊。
步驟二:將圖像內存劃分為物理上的連續的兩塊,設定兩塊內存間的重疊區域大小,重疊區域大小是根據鄰域計算的大小來確定的,重疊區域的大小為鄰域計算高度的兩倍;具體如圖3所示,兩個圖像內存塊分別是1、陰影區域、陰影區域以上部分、陰影區域以下且與陰影區域面積相同的部分;2、陰影區域及陰影區域以下部分,上下兩塊的計算考慮是不一樣的:上半部分的計算不需要進入陰影區域以下且與陰影區域面積相同的部分,陰影區域以下且與陰影區域面積相同的部分只是提供數據以完成到中間線的鄰域計算;下半部分的計算不進入陰影區域,陰影區域只是提供數據以完成中間線的鄰域計算。
步驟三:創建并啟動兩個線程,分別調用兩張顯卡對應的gpu資源,執行圖像處理程序,,使用線程控制接口同步等待兩個線程完成相應的處理,記錄兩張顯卡運行時間較長者為圖像內存處理的時間,得到圖像數據塊一和圖像數據塊二各自的處理結果;
步驟四:丟棄重疊區域的數據,合并圖像數據塊一和圖像數據塊二的處理結果,完成雙顯卡的gpu對一張圖像的并發處理。具體為:圖像數據塊一丟棄重疊區域二的數據,圖像數據塊二丟棄重疊區域一的數據;合并圖像數據塊一和圖像數據塊二的處理結果;釋放gpu資源,輸出處理結果。
考慮更多顯卡并發的機制,與雙顯卡的處理機制基本一致,一般pc架構很難采用多于兩個顯卡的部署。所以我們以雙顯卡作為多gpu并發處理的主要結構。
以上已經描述了本發明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本技術領域的普通技術人員來說許多修改和變更都是顯而易見的。