欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種GPU摳像方法與流程

文檔序號(hào):12378188閱讀:734來(lái)源:國(guó)知局
一種GPU摳像方法與流程

本發(fā)明屬于圖像處理領(lǐng)域,涉及視頻制作時(shí)的摳像方法,尤其涉及一種基于GPU的摳像方法。



背景技術(shù):

隨著視頻演播技術(shù)的發(fā)展,許多節(jié)目在制作時(shí)已經(jīng)不用忙于布置演播室,只需要一個(gè)純色的區(qū)域,主持人站在這個(gè)區(qū)域主持節(jié)目,而當(dāng)節(jié)目呈現(xiàn)給觀眾時(shí),觀眾卻可看到主持人置身于一個(gè)特定的節(jié)目場(chǎng)景中,這種虛擬演播室的效果要?dú)w功于視頻摳像技術(shù)。

但是,在制作高清節(jié)目的虛擬演播系統(tǒng)中,摳像設(shè)備多數(shù)采用價(jià)格較高的專用硬件設(shè)備,而價(jià)格較低的基于“普通PC+信號(hào)輸入板卡”的摳像機(jī)在面對(duì)高清信號(hào)處理要求時(shí),處理能力不足。目前市面上基于普通PC的現(xiàn)有技術(shù)大部分是通過(guò)圖像像素掃描,RGB三原色的判斷,將目標(biāo)顏色鎖定在一定的RGB值范圍內(nèi),通過(guò)CPU的運(yùn)算能力,逐行掃描圖片像素,分析像素的色域范圍來(lái)進(jìn)行摳像,其具有明顯的兩點(diǎn)缺陷:其一是摳像速度比較慢,由于CPU的主頻限制,目前現(xiàn)有技術(shù)對(duì)CPU的提升已經(jīng)越來(lái)越有局限,導(dǎo)致單純依靠CPU來(lái)運(yùn)行的效率比較差;其二是摳像效果不理想,通過(guò)傳統(tǒng)RGB三原色摳像已經(jīng)很難滿足越來(lái)越多元化的現(xiàn)場(chǎng)光線要求。因此,亟需一種新的摳像方法,可以使用普通PC運(yùn)行,在節(jié)省成本的基礎(chǔ)上,保證處理能力。



技術(shù)實(shí)現(xiàn)要素:

為了解決現(xiàn)有技術(shù)中的上述問(wèn)題,本發(fā)明提出了一種基于GPU并行操作性能的摳像方法。

本發(fā)明采用的技術(shù)方案如下:

一種GPU摳像方法,其特征在于,該方法包括如下步驟:

1)CPU獲取摳像所需的圖像數(shù)據(jù),包括前景圖像和背景圖像,將所述前景圖像和背景圖像從RAM傳入GPU全局內(nèi)存;所述前景圖像和背景圖像的分辨率相同;

2)所述CPU向GPU的全局內(nèi)存申請(qǐng)空間,用于存放合成后的圖像數(shù)據(jù);

3)所述GPU的各個(gè)block開(kāi)始執(zhí)行kernel函數(shù);

4)所述GPU從全局內(nèi)存分別聚合讀取前景圖像和背景圖像中的一塊數(shù)據(jù)到共享內(nèi)存。

5)所述GPU同步線程,重復(fù)步驟4,直至要處理的圖像數(shù)據(jù)全部讀入共享內(nèi)存;

6)所述GPU的每個(gè)線程從共享內(nèi)存中各讀取前景圖像和背景圖像中一個(gè)像素的數(shù)據(jù),并對(duì)讀取的像素進(jìn)行摳像處理,將處理結(jié)果寫(xiě)入存放合成圖像的共享內(nèi)存;

7)所述GPU同步線程,每個(gè)線程處理一個(gè)像素的數(shù)據(jù),處理結(jié)果都寫(xiě)入共享內(nèi)存,最終形成合成圖像數(shù)據(jù);

8)所述GPU將共享內(nèi)存中的合成圖像數(shù)據(jù)寫(xiě)入全局內(nèi)存;

9)所述GPU將全局內(nèi)存中的合成圖像數(shù)據(jù)回傳給所述CPU;

10)顯示合成圖像。

進(jìn)一步地,所述聚合讀取為滿足以下兩個(gè)條件的全局內(nèi)存讀取操作:

(1)所述GPU中任意一個(gè)half-warp對(duì)全局內(nèi)存數(shù)據(jù)的存取都落在全局內(nèi)存的一個(gè)段內(nèi);

(2)所述half-warp中的第n個(gè)線程,或者不存取數(shù)據(jù),或者必須存取所述段中的第n個(gè)數(shù)據(jù)。

進(jìn)一步地,在所述聚合讀取中,每個(gè)線程每次讀取的所述數(shù)據(jù)的長(zhǎng)度為4字節(jié)、8字節(jié)或者16字節(jié)。

進(jìn)一步地,所述GPU的每個(gè)block包括的線程數(shù)量在128以上,并且為64的倍數(shù)。

優(yōu)選的,所述GPU的每個(gè)block包括128個(gè)線程。

進(jìn)一步地,所述GPU的每個(gè)線程處理?yè)赶裰械囊粋€(gè)像素,設(shè)線程ID為threadIdx,其處理的像素坐標(biāo)為(x,y),則有

x=blockIdx.x×blockDim.x+threadIdx.x;

y=blockIdx.y×blockDim.y+threadIdx.y;

其中,blockIdx是線程的block在grid中的索引值,blockIdx.x和blockIdx.y是該索引值的x分量和y分量;blockDim是該block的尺寸,blockDim.x和blockDim.y分別是x軸尺寸和y軸尺寸;threadIdx.x和threadIdx.y是線程ID的x分量和y分量。

進(jìn)一步地,每個(gè)線程通過(guò)下述方法進(jìn)行摳像處理:

6.1)設(shè)P為線程處理的像素的坐標(biāo)點(diǎn),前景圖像上P點(diǎn)對(duì)應(yīng)的像素在RGB色彩空間的顏色為Rcap、Gcap和Bcap,所述線程將其轉(zhuǎn)換到HSV色彩空間,得到前景圖像上P點(diǎn)對(duì)應(yīng)的像素在HSV色彩空間的顏色為Hcap、Scap和Vcap;

6.2)設(shè)背景圖像上P點(diǎn)對(duì)應(yīng)的像素在RGB色彩空間的顏色為Rbg、Gbg和Bbg;摳像后輸出的合成圖像在P點(diǎn)對(duì)應(yīng)的像素在RGB色彩空間的顏色為Rresult、Gresult和Bresult;則計(jì)算公式如下:

其中,色鍵Hkey、Skey、Vkey分別是摳像顏色的色相、飽和度和明度,scale是預(yù)先定義的摳像閾值。

本發(fā)明的有益效果包括:使用普通PC進(jìn)行摳像,節(jié)約成本,通過(guò)GPU來(lái)完成摳像的操作,性能相對(duì)于CPU顯著提高,并且可以滿足高清信號(hào)要求。本發(fā)明可以降低CPU的要求,相對(duì)于配置一般的電腦,只要合理利用好CPU和GPU就能發(fā)揮出出色的摳像效果。

【附圖說(shuō)明】

此處所說(shuō)明的附圖是用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,但并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定,在附圖中:

圖1是本發(fā)明基本的摳像流程。

圖2是本發(fā)明通過(guò)GPU進(jìn)行摳像處理的基本方法。

圖3是本發(fā)明GPU線程配置方案表。

圖4是本發(fā)明GPU不同線程配置方案的統(tǒng)計(jì)數(shù)據(jù)表。

【具體實(shí)施方式】

下面將結(jié)合附圖以及具體實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明,其中的示意性實(shí)施例以及說(shuō)明僅用來(lái)解釋本發(fā)明,但并不作為對(duì)本發(fā)明的限定。

本發(fā)明的主要思想是:通過(guò)CPU和GPU的共同參與,完成整個(gè)摳像過(guò)程,并且為了進(jìn)一步提高處理速度,利用了GPU操作的異步執(zhí)行功能,將CPU和GPU的操作執(zhí)行并行起來(lái),最終使整個(gè)摳像處理達(dá)到高清立體節(jié)目的要求。

在實(shí)現(xiàn)虛擬演播應(yīng)用中,主持人需要在一個(gè)純色的背景前主持節(jié)目,之后通過(guò)摳像處理將主持人的圖像從整個(gè)畫(huà)面中提取出來(lái),疊加到另一個(gè)背景上。但是,由于光照強(qiáng)度的影響,攝像機(jī)拍攝到的演播室背景亮度不均,強(qiáng)光照的區(qū)域呈現(xiàn)出亮調(diào),弱光照的區(qū)域呈現(xiàn)出暗調(diào),換言之,同樣的色相,色度(飽和度)和亮度不同。因此,為了更好地實(shí)現(xiàn)摳像,首先需要將圖像從RGB色彩空間轉(zhuǎn)換到HSV色彩空間,在HSV色彩空間中,選定一種色彩(色相H)后,可以通過(guò)改變色彩含量的多少(飽和度S)和色彩明暗程度(明度V)獲得不同顏色,而且這種變化在其色彩空間模型中是連續(xù)的,這也是HSV色彩空間與RGB色彩空間的不同之處。HSV色彩空間這種可將某種色彩的色度和亮度變化構(gòu)成的顏色集中在某個(gè)區(qū)域的特點(diǎn),能夠更容易地將演播室背景顏色變化表示出來(lái),所以在HSV的色彩空間下進(jìn)行摳像比在RGB空間下更具操作性。

參見(jiàn)附圖1,其示出了本發(fā)明的一個(gè)基本的摳像流程:

步驟100:演播室中,主持人在一個(gè)純色的背景前主持節(jié)目,由攝像機(jī)拍下主持人的主持畫(huà)面的圖像;現(xiàn)有的攝像機(jī)所產(chǎn)生的圖像基本都是由RGB色彩空間表示。

步驟200:將拍攝的圖像由RGB色彩空間轉(zhuǎn)換到HSV色彩空間,具體的轉(zhuǎn)換方法在后面說(shuō)明。

步驟300:對(duì)轉(zhuǎn)換后的圖像進(jìn)行摳像,即剔除圖像中的純色背景。

步驟400:輸出摳像后的圖像。

步驟500:將摳像后的圖像疊加到預(yù)先設(shè)置的虛擬背景上,從而形成主持人在虛擬背景前主持節(jié)目的合成圖像。

步驟600:輸出所述合成圖像。

下面對(duì)RGB色彩空間到HSV色彩空間的具體轉(zhuǎn)換方法作出說(shuō)明,設(shè)圖像上某個(gè)像素在RGB色彩空間的顏色為R(紅色分類(lèi))、G(綠色分量)、B(藍(lán)色分量),相對(duì)應(yīng)的HSV色彩空間的顏色為H(色相)、S(飽和度)、V(明度)。則通過(guò)以下公式計(jì)算HSV

V=max(R,G,B)

H=H×60;如果H<0,H=H+360。

其中,亮度V取RGB三個(gè)值中的最大值。在該最大值不為零時(shí),S通過(guò)其第一個(gè)公式計(jì)算,否則S等于0。計(jì)算H的過(guò)程稍微復(fù)雜,如果S=0,則H值未定義,否則根據(jù)RGB三個(gè)值哪個(gè)最大,采用對(duì)應(yīng)的三個(gè)公式之一計(jì)算一個(gè)初值,然后將該初值乘以60得到H的結(jié)果,如果該結(jié)果還小于0,則再加上360。

在將圖像從RGB色彩空間轉(zhuǎn)換到HSV色彩空間后,具體的摳像方法如下:

步驟301:輸入兩幅分辨率相同的圖像,一幅為演播室拍攝并轉(zhuǎn)換到HSV色彩空間的前景圖像(CAP),一幅為需要疊加的虛擬背景圖像(BG)。

步驟302:掃描前景圖像上的每個(gè)像素點(diǎn),對(duì)每一個(gè)像素點(diǎn)進(jìn)行處理,具體處理方法如下:

設(shè)P為圖像上某個(gè)像素的位置,前景圖像上P點(diǎn)對(duì)應(yīng)的像素在HSV色彩空間的顏色為Hcap、Scap和Vcap(即該像素的色相、飽和度和明度),前景圖像上P點(diǎn)對(duì)應(yīng)的像素在RGB色彩空間的顏色為Rcap、Gcap和Bcap(即該像素的紅色分量、綠色分量和藍(lán)色分量)。背景圖像上P點(diǎn)對(duì)應(yīng)的像素在RGB色彩空間的顏色為Rbg、Gbg和Bbg(即該像素的紅色分量、綠色分量和藍(lán)色分量)。摳像后輸出的合成圖像在P點(diǎn)對(duì)應(yīng)的像素在RGB色彩空間的顏色為Rresult、Gresult和Bresult(即該像素的紅色分量、綠色分量和藍(lán)色分量)。計(jì)算公式為:

其中,色鍵Hkey、Skey、Vkey分別是摳像顏色的色相、飽和度和明度,scale是預(yù)先定義的摳像閾值。上述公式說(shuō)明,在前景圖像像素的三個(gè)HSV分量與色鍵的三個(gè)分量的差都小于閾值時(shí),摳像結(jié)果取背景圖像像素的RGB值,否則取前景圖像像素的RGB值。

在對(duì)兩幅圖像進(jìn)行摳像處理的過(guò)程中,無(wú)論是色彩空間的轉(zhuǎn)換還是與閾值的比較,都是以像素為單位進(jìn)行處理,而且像素之間的數(shù)據(jù)獨(dú)立,整個(gè)過(guò)程是一種高度密集型的計(jì)算。對(duì)于這樣的計(jì)算,普通CPU的處理能力不足,因此本發(fā)明采用GPU進(jìn)行計(jì)算。根據(jù)本發(fā)明的實(shí)施例,采用普通的支持CUDA1.1計(jì)算能力的GeForce 9800GT作為GPU計(jì)算工具和CPU進(jìn)行合作計(jì)算。GeForce 9800GT具有14個(gè)多處理器,每個(gè)多處理器又有8個(gè)核,總共有14×8=112個(gè)核心,由于其時(shí)鐘頻率為1.37GHz,那么總的并行處理的時(shí)鐘頻率為1.37GHz×112=153.44GHz,與CPU相比,GPU具有非常高的數(shù)據(jù)并行運(yùn)算能力。

參見(jiàn)附圖2,其示出了本發(fā)明通過(guò)GPU進(jìn)行摳像處理的基本方法:

1)CPU獲取圖像數(shù)據(jù),將RGB24格式的前景圖像數(shù)據(jù)和背景圖像數(shù)據(jù)從RAM傳入GPU全局內(nèi)存。

2)CPU向GPU的全局內(nèi)存申請(qǐng)空間,用于存放合成后的圖像數(shù)據(jù)。

3)GPU的各個(gè)block開(kāi)始執(zhí)行kernel函數(shù)。

4)GPU從全局內(nèi)存中各讀取前景圖像和背景圖像中一個(gè)像素的數(shù)據(jù)。

5)GPU對(duì)步驟4中讀取的像素進(jìn)行摳像處理,將處理結(jié)果寫(xiě)入存放合成圖像的全局內(nèi)存。具體的摳像處理過(guò)程類(lèi)似于上述步驟301-302,即首先將該像素從RGB色彩空間轉(zhuǎn)換到HSV色彩空間,然后采用上述步驟302的公式,計(jì)算出摳像的處理結(jié)果。

6)GPU重復(fù)步驟4-5,直到生成最終的合成圖像,將合成圖像回傳給CPU。

7)顯示合成圖像。

在GPU進(jìn)行摳像處理時(shí),是多線程進(jìn)行的,每個(gè)線程處理一個(gè)像素。需要處理多少個(gè)像素,就為GPU分配至少多少個(gè)線程,由于線程間處理的像素各不相同,所以各自沒(méi)有數(shù)據(jù)相關(guān)性。

由于處理的數(shù)據(jù)是平面圖像,可以用二維坐標(biāo)系來(lái)表示圖像中像素的坐標(biāo)。所以GPU在計(jì)算時(shí),配置grid的維數(shù)為二維,block的維數(shù)也為二維,各個(gè)線程處理的像素的坐標(biāo)計(jì)算如下:

x=blockIdx.x×blockDim.x+threadIdx.x;

y=blockIdx.y×blockDim.y+threadIdx.y;

其中blockIdx是線程的線程塊(block)在線程格(grid)中的索引值,blockIdx.x和blockIdx.y是該索引值的x分量和y分量;blockDim是該線程塊的尺寸,blockDim.x和blockDim.y分別是x軸尺寸和y軸尺寸;threadIdx是線程ID,threadIdx.x和threadIdx.y是線程ID的x分量和y分量。計(jì)算出來(lái)的(x,y)就是線程threadIdx處理的像素的坐標(biāo)。

每個(gè)線程占用GPU中的10個(gè)寄存器,每個(gè)block占用60字節(jié)的共享內(nèi)存和20字節(jié)的常量?jī)?nèi)存。根據(jù)CUDA 1.1能力標(biāo)準(zhǔn),計(jì)算出一個(gè)GPU對(duì)基本算法的資源限制為:

寄存器:8192/10=819個(gè)線程;

共享內(nèi)存:16K/60=266個(gè)block

常量?jī)?nèi)存:64K>20,未受限

但是,在在CUDA 1.1能力標(biāo)準(zhǔn)中,每個(gè)GPU最多可處理768個(gè)線程。CUDA中線程塊線程數(shù)量的配置會(huì)影響CUDA的處理效率。主要如下:

1、多處理器中活動(dòng)的warp數(shù)量會(huì)影響延遲隱藏效果和GPU的使用率。

延遲是指使用多少個(gè)時(shí)鐘周期去使一個(gè)warp完成執(zhí)行下一個(gè)指令的準(zhǔn)備工作。延遲隱藏是指多處理器在每個(gè)時(shí)鐘周期中總可以執(zhí)行某個(gè)warp中的指令,從而隱藏了其它warp的延遲。如果warp下一個(gè)指令中的輸入操作數(shù)未準(zhǔn)備好時(shí),warp就無(wú)法繼續(xù)執(zhí)行。當(dāng)輸入操作數(shù)是寄存器,延遲將取決于寄存器的延遲。例如寄存器的寫(xiě)后讀延遲,當(dāng)此時(shí)輸入的寄存器操作數(shù)是由前一個(gè)指令寫(xiě)入時(shí),GPU無(wú)法立即將寄存器數(shù)值讀取出來(lái),因此產(chǎn)生了延遲,在這個(gè)延遲期間,warp調(diào)度器調(diào)用其它準(zhǔn)備就緒的warp給多處理器第執(zhí)行。平均的寄存器延遲大概是22個(gè)時(shí)鐘周期,對(duì)于計(jì)算能力的設(shè)備,CUDA建議多處理器必須有6個(gè)warp(192個(gè)線程)才能隱藏該類(lèi)延遲。當(dāng)輸入操作數(shù)不是位于片上內(nèi)存,即訪問(wèn)DRAM顯存,延遲為400到600個(gè)時(shí)鐘周期。消除該類(lèi)延遲需要的warp數(shù)量取決于GPU代碼。一般來(lái)說(shuō),GPU代碼中,讀取片上存儲(chǔ)器的指令與非片上存儲(chǔ)器的指令的比值越小,需要的warp越多。如果比值為1:15,CUDA 1.1計(jì)算能力的設(shè)備的每個(gè)多處理器需要10個(gè)活動(dòng)的warp才能將延遲隱藏。

2、多處理器中活動(dòng)的block數(shù)量會(huì)影響GPU的使用率。

當(dāng)多處理器只有一個(gè)活動(dòng)的block時(shí),如果執(zhí)行到線程同步或者非片上存儲(chǔ)器的讀取操作時(shí),多處理器就會(huì)產(chǎn)生空閑。所以多處理器中應(yīng)包含有多個(gè)活動(dòng)的block,當(dāng)某個(gè)block在等待時(shí),多處理器調(diào)入其它block執(zhí)行,盡量使GPU忙碌。另外,一個(gè)GPU有多個(gè)多處理器,GPU將block平均分配給各個(gè)多處理器,最佳的block數(shù)量是多處理器數(shù)量的整數(shù)倍,每個(gè)多處理器的負(fù)荷均勻,block的并行化程度最高。

3、block中線程數(shù)量也會(huì)影響GPU計(jì)算效率。

多處理器每次處理一個(gè)block,block中的線程又以warp為單位進(jìn)行調(diào)度,如果block中線程的數(shù)量是warp的整數(shù)倍,不會(huì)在不足32個(gè)線程的warp上浪費(fèi)計(jì)算資源,同時(shí)也可以促成block對(duì)全局內(nèi)存的完全的聚合訪問(wèn)。block中的數(shù)量也不能太少,以產(chǎn)生足夠的warp,實(shí)現(xiàn)延遲隱藏。CUDA建議block中線程的數(shù)量不少于64,最好在128到256之間。另外,寄存器內(nèi)存也存在bank沖突,當(dāng)block中線程的數(shù)量為64的整數(shù)倍時(shí),編譯器和線程調(diào)度器可以取得最佳的沖突避免效果。

如果多處理器的活動(dòng)線程達(dá)到其處理上限,多處理的占用率達(dá)到100%。是否能滿負(fù)荷運(yùn)行,取決于block中線程數(shù)量的配置和每個(gè)線程使用的寄存器資源及其他資源的數(shù)量,其中最重要的還是資源的使用。多處理器的資源必須能夠預(yù)留給所有活動(dòng)線程,如果多處理器無(wú)法為一個(gè)block預(yù)留資源,kernel的調(diào)用將失敗。在多處理器上的各種資源,寄存器資源是最少的,CUDA提供了一個(gè)編譯參數(shù),可以限制每個(gè)線程使用寄存器的個(gè)數(shù),編譯器使用本地內(nèi)存替代寄存器。由于本地內(nèi)存無(wú)緩存和聚合存取機(jī)制,本地內(nèi)存的存取效率是所有存取DRAM方式中最低的,所以即使多處理的占用率達(dá)到100%,GPU算法的執(zhí)行時(shí)間不一定是最短。

根據(jù)以上因素,本發(fā)明在GPU的每個(gè)block中包含的線程為128以上,并且為64的倍數(shù),由于block線程上限為512,線程配置組合如附圖3所示。

對(duì)附圖3中多處理器占有率100%的配置方案進(jìn)行比較,通過(guò)CUDA Visual Profiler得到統(tǒng)計(jì)數(shù)據(jù),如附圖4所示。從附圖4可以看出,當(dāng)每個(gè)block的線程數(shù)量為128時(shí),性能最優(yōu),并且與其它多處理器占有率100%的配置方案相比,每個(gè)多處理器的活動(dòng)block數(shù)量最多。

聚合存取的優(yōu)化

在CUDA中,一個(gè)時(shí)鐘周期可以執(zhí)行8次內(nèi)存操作。但是,對(duì)local memory或global memory的存取有400-600個(gè)時(shí)鐘周期延遲,每個(gè)線程都需要從global memory中讀取數(shù)據(jù),往global memory寫(xiě)入數(shù)據(jù),內(nèi)存操作與處理的像素成比例增長(zhǎng)。由于存取的延遲,非聚合操作將影響到整個(gè)CUDA摳像的效率。為了提高處理效率,必須對(duì)數(shù)據(jù)存取進(jìn)行聚合優(yōu)化。如果數(shù)據(jù)能夠?qū)崿F(xiàn)聚合存取,那么多個(gè)線程對(duì)數(shù)據(jù)多個(gè)存取操作將合并為一個(gè)操作,延遲也將僅有一次存取操作的延遲,否則每次存取操作分開(kāi)獨(dú)立進(jìn)行,延遲成倍增長(zhǎng)。

在CUDA1.1計(jì)算能力的硬件中,global memory被劃分成段,有兩種劃分方法,一種是每一塊global memory從起點(diǎn)開(kāi)始,連續(xù)的128byte的數(shù)據(jù)就被劃分成一個(gè)段,另一種是從起點(diǎn)開(kāi)始,連續(xù)的64byte的數(shù)據(jù)被劃分成一個(gè)段。由于CUDA對(duì)線程的調(diào)度是以half-warp為單位,所以如果一個(gè)half-warp對(duì)數(shù)據(jù)的存取能夠落在某個(gè)段內(nèi),就滿足了聚合讀取的一個(gè)條件。

聚合讀取的另一個(gè)條件是,half-warp中第n個(gè)線程,要么不存取數(shù)據(jù),要么必須存取段中的第n個(gè)數(shù)據(jù),數(shù)據(jù)的長(zhǎng)度可以是4byte,8byte或者16byte。

64byte的聚合讀?。?6個(gè)線程,每個(gè)線程讀取4個(gè)byte,總共64個(gè)byte,總的開(kāi)銷(xiāo)為一次讀取的時(shí)間。

128byte的聚合讀取:16個(gè)線程,每個(gè)線程讀取8個(gè)byte,總共128個(gè)byte,總的開(kāi)銷(xiāo)為一次讀取的時(shí)間;16個(gè)線程,每個(gè)線程讀取16個(gè)byte,總共256個(gè)byte,分兩次讀取,每次讀取128byte,總的開(kāi)銷(xiāo)為兩次讀取時(shí)間。

每個(gè)線程8個(gè)byte的聚合存取的帶寬略低于4個(gè)byte的,每個(gè)線程16byte的聚合存取的帶寬低于4個(gè)byte的很多。而非聚合存取的帶寬大大低于4個(gè)byte的聚合讀取,但是與8個(gè)byte的聚合讀取比起來(lái)卻只低大約4倍,與16個(gè)byte的相比只低于大約2倍。所以4個(gè)byte的聚合讀取帶寬最高。

在前述的基本摳像算法中,每個(gè)線程處理一個(gè)像素,每個(gè)像素是RGB24格式,占3個(gè)byte,開(kāi)始時(shí)每個(gè)線程并行地從存放前景圖像的全局內(nèi)存中存取3個(gè)byte,再?gòu)拇娣疟尘皥D像的全局內(nèi)存中存取3個(gè)byte,最后往存放最終結(jié)果的全局內(nèi)存中寫(xiě)入3個(gè)byte,對(duì)全局內(nèi)存的存取都不符合聚合存取4個(gè)byte,8個(gè)byte或16個(gè)byte的條件,由于對(duì)全局內(nèi)存的大量非聚合存取操作,導(dǎo)致存取帶寬非常低,大量的時(shí)間消耗在全局內(nèi)存操作上。基于此,本發(fā)明對(duì)基本方法進(jìn)行聚合讀寫(xiě)優(yōu)化。

聚合讀寫(xiě)優(yōu)化的基本思想是:在CUDA中,每個(gè)多處理器擁有16KB的share memory,share memory位于片上(on-chip),類(lèi)似于CPU中的L1緩存,讀取和寫(xiě)入速度快,每個(gè)時(shí)鐘周期可以進(jìn)行8次share memory操作,且沒(méi)有非聚合存取問(wèn)題,也沒(méi)有g(shù)lobal memory存取操作額外的內(nèi)存延遲。share memory的生命周期為block,使用share memory解決global memory非聚合存取的高延遲問(wèn)題時(shí)得以block為單位,block中的線程首先將數(shù)據(jù)讀入share memory,再讀取出來(lái)進(jìn)行摳像處理。優(yōu)化后的方法如下:

1)CPU獲取圖像數(shù)據(jù),將RGB24格式的前景圖像數(shù)據(jù)和背景圖像數(shù)據(jù)從RAM傳入GPU全局內(nèi)存。

2)CPU向GPU的全局內(nèi)存申請(qǐng)空間,用于存放合成后的圖像數(shù)據(jù)。

3)GPU的各個(gè)block開(kāi)始執(zhí)行kernel函數(shù)。

4)GPU從全局內(nèi)存分別聚合讀取前景圖像和背景圖像中的一塊數(shù)據(jù)到共享內(nèi)存。

5)GPU同步線程,重復(fù)步驟4,以保證要處理的數(shù)據(jù)全部讀入共享內(nèi)存。

6)GPU的一個(gè)線程從共享內(nèi)存中各讀取前景圖像和背景圖像中一個(gè)像素的數(shù)據(jù),并對(duì)讀取的像素進(jìn)行摳像處理,將處理結(jié)果寫(xiě)入存放合成圖像的共享內(nèi)存。具體的摳像處理過(guò)程與基本方法中說(shuō)明的相同。

7)GPU同步線程,每個(gè)線程處理一個(gè)像素的數(shù)據(jù),保證處理結(jié)果都寫(xiě)入到共享內(nèi)存,最終形成了合成圖像數(shù)據(jù)。

8)GPU將共享內(nèi)存中的合成圖像數(shù)據(jù)寫(xiě)入全局內(nèi)存。

9)GPU將全局內(nèi)存中的合成圖像數(shù)據(jù)回傳給CPU。

10)顯示合成圖像。由于合成圖像數(shù)據(jù)實(shí)際上已經(jīng)在顯卡中,因此可以由顯卡直接顯示合成后的圖像,從而在不降低處理效率的前提下在顯卡上同時(shí)實(shí)現(xiàn)GPU摳像和結(jié)果顯示,無(wú)需將數(shù)據(jù)回傳到內(nèi)存再顯示。

以上所述僅是本發(fā)明的較佳實(shí)施方式,故凡依本發(fā)明專利申請(qǐng)范圍所述的構(gòu)造、特征及原理所做的等效變化或修飾,均包括于本發(fā)明專利申請(qǐng)范圍內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
漾濞| 眉山市| 常宁市| 子长县| 天柱县| 会同县| 麟游县| 顺平县| 钟山县| 罗甸县| 乌兰察布市| 侯马市| 西乌珠穆沁旗| 长海县| 长阳| 丽水市| 扶沟县| 内丘县| 岢岚县| 夹江县| 甘肃省| 南汇区| 什邡市| 互助| 安陆市| 张掖市| 农安县| 壶关县| 商丘市| 施甸县| 诏安县| 杨浦区| 佛学| 汤原县| 蓬安县| 宣化县| 文昌市| 泸水县| 汾阳市| 大宁县| 湖口县|