專利名稱:一種基于cuda的梯形填充方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多線程并行開(kāi)發(fā)、計(jì)算機(jī)圖形學(xué)、數(shù)據(jù)結(jié)構(gòu)開(kāi)發(fā)、數(shù)字圖像處理等領(lǐng)域,具體為一種利用CUDA通用并行計(jì)算架構(gòu),使GPU (圖形處理器)能夠解決復(fù)雜計(jì)算和大量數(shù)據(jù)處理問(wèn)題的梯形填充方法。
背景技術(shù):
光刻技術(shù)是在襯底表面上印刷具有特征的構(gòu)圖的技術(shù),本發(fā)明所涉及的無(wú)掩膜光刻技術(shù)使用數(shù)字微鏡系統(tǒng)生成圖像,通過(guò)光學(xué)投影元件,圖像以一定的倍率投影到光敏感的襯底上,產(chǎn)生特征的構(gòu)圖。
在光刻過(guò)程中,需要進(jìn)行大量的、快速的數(shù)據(jù)處理與發(fā)送,而將GDSII文件解析之后,得到的只是一系列的梯形頂點(diǎn)坐標(biāo),然后需要利用繪圖工具進(jìn)行填充處理,以得到需要的圖像。
現(xiàn)有填充技術(shù)中多采用CUDA進(jìn)行填充,CUDA是NVIDIA的GPGPU模型,也就是通用計(jì)算圖形處理器,它使用為大多數(shù)編程人員所知曉的C語(yǔ)言編程,編寫的程序直接在顯示芯片上執(zhí)行,從而避免學(xué)習(xí)像匯編這樣底層開(kāi)發(fā)語(yǔ)言或指令。
在CUDA的架構(gòu)下,一個(gè)應(yīng)用程序被分為兩個(gè)部分執(zhí)行,一部分被分配在CPU上執(zhí)行,也就是所謂的Host端;另一部分被分配在GPU上運(yùn)行,也就是所謂的Device端,又被稱為Kernel。而通常是在Host端準(zhǔn)備好數(shù)據(jù),然后復(fù)制到Device端的全局存儲(chǔ)器、常數(shù)存儲(chǔ)器或紋理存儲(chǔ)器中,再由GPU執(zhí)行Device端程序,執(zhí)行完的結(jié)果,再拷貝到Host端的內(nèi)存中。
在CUDA 架構(gòu)下,一個(gè) GPU 中含有數(shù)十個(gè) TPC (Texture Processing Clusters),每個(gè)TPC 中含有多個(gè) SM(Streaming Multiprocessor),每個(gè) SM 中有 8 個(gè)以上的 SP (Streaming !Processor),而SP就是最基本的處理單元。并且這些SP可以同時(shí)進(jìn)行運(yùn)算。
在CUDA架構(gòu)下,顯示芯片執(zhí)行的最小單位是Thread,數(shù)個(gè)Thread組成一個(gè) Block, 一個(gè)Block中的Thread能存取同一塊共享內(nèi)存,而且可以快速的進(jìn)行同步動(dòng)作。執(zhí)行相同程序的Block,可以組成Grid。
采用傳統(tǒng)的圖形設(shè)備接口⑶1+繪圖,即使⑶1+可以讓程序?qū)D形界面的操作和硬件設(shè)備隔絕開(kāi)來(lái),但依然不能構(gòu)造龐大的⑶1+內(nèi)容,在gdi32. inc文件中函數(shù)總量達(dá)到 300多個(gè),與GDI+相關(guān)的數(shù)據(jù)結(jié)構(gòu)數(shù)量也十分龐大,而且CPU即使采用了很好的作業(yè)調(diào)用算法和中斷搶斷機(jī)制,但其終究是基于時(shí)間片,相對(duì)于某個(gè)時(shí)刻來(lái)說(shuō),也只有一個(gè)作業(yè)在執(zhí)行。隨著GDSII圖像越來(lái)越復(fù)雜,客戶對(duì)曝光速度的要求越來(lái)越快,采用傳統(tǒng)的填充方法已滿足不了光刻系統(tǒng)的需求。本發(fā)明使用一種通用并行處理架構(gòu)(CUDA),從而能夠快速處理圖形圖像,以滿足光刻機(jī)在光刻過(guò)程中對(duì)圖像和速度的要求。發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于CUDA的梯形填充方法,以解決現(xiàn)有技術(shù)中采用GDI繪圖不能滿足大量圖形數(shù)據(jù)處理,且使用時(shí)效率低下,不夠便捷的問(wèn)題。
為達(dá)到上述目的,本發(fā)明采用的技術(shù)方案為一種基于CUDA的梯形填充方法,其特征在于包括以下步驟①、在Host端準(zhǔn)備需要填充的位形,設(shè)置位深、顏色表,分配并初始化內(nèi)存單元;②、在Host端準(zhǔn)備好需要的梯形頂點(diǎn)數(shù)據(jù),并保存在梯形點(diǎn)集里;③、把當(dāng)前處理任務(wù)分配給一個(gè)Grid,根據(jù)位形的數(shù)量確定Block數(shù)量,根據(jù)梯形的數(shù)量確定Thread數(shù)量;④、通過(guò)CUDA提供接口函數(shù),在Device端的GlobalMemory分別分配位形和梯形頂點(diǎn)數(shù)據(jù)所需的空間;⑤、將Host端的數(shù)據(jù)拷貝到Device端的內(nèi)存中;⑥、啟動(dòng)CUDA多線程并行填充梯形;⑦、待處理完之后,將Device端填充之后的數(shù)據(jù),拷貝到Host端,即完成填充。
所述的一種基于CUDA的梯形填充方法,其特征在于在步驟③中也可把任務(wù)分配給多個(gè)Grid處理。
所述的一種基于CUDA的梯形填充方法,其特征在于所述Grid由數(shù)個(gè)執(zhí)行相同程序的Block組成,所述Block由數(shù)個(gè)Thread組成。
本發(fā)明的有益效果為本發(fā)明采用CUDA多線程并行填充梯形方法,從而避免了利用GDI填充方法不能對(duì)大量圖形數(shù)據(jù)有效處理,且由于CPU串行運(yùn)行的限制而不能并行處理的問(wèn)題,因而本發(fā)明能夠有效地提升填充效率,滿足大量圖形數(shù)據(jù)處理的需求。
圖1為本發(fā)明中GPU內(nèi)部構(gòu)造與CPU數(shù)據(jù)交互方式的示意圖。
圖2為本發(fā)明中未填充之前Block內(nèi)每個(gè)Thread分配的梯形及梯形最小外接矩形的范圍示意圖。
圖3為每個(gè)Block內(nèi)梯形完成填充后的狀態(tài)示意圖。
具體實(shí)施方式
如圖1、圖2、圖3所示,本發(fā)明包括以下步驟①、準(zhǔn)備位形數(shù)據(jù)根據(jù)需要,可以選擇單色、8位、M位或32位等位圖,對(duì)非單色圖,設(shè)置其填充的初始灰度值。本實(shí)施例選擇8位圖,填充的灰度值為一固定值。
②、準(zhǔn)備梯形頂點(diǎn)數(shù)據(jù)對(duì)于每一張位形,其需要填充的梯形可能不同,將這些梯形頂點(diǎn)坐標(biāo)放在一個(gè)梯形頂點(diǎn)的結(jié)構(gòu)體數(shù)組里,為不同位形的梯形組分配不同大小的內(nèi)存空間,并保存這些梯形頂點(diǎn)。
③、分配Block和Thread數(shù)量因?yàn)槲恍沃g可以并行填充,這樣不會(huì)產(chǎn)生沖突,所以把每一個(gè)Block分配一個(gè)位形,然后把這個(gè)位形需要填充的梯形分配給該Block下的Thread進(jìn)行處理。
④、Device端分配內(nèi)存利用CUDA提供的接口函數(shù),對(duì)Device端分配內(nèi)存,其大小為Host端需要分配的內(nèi)存大小。
⑤、將數(shù)據(jù)拷貝至Device端利用CUDA提供的接口函數(shù),對(duì)步驟①和②分配的數(shù)據(jù)進(jìn)行拷貝,使得這些數(shù)據(jù)復(fù)制到GPU的內(nèi)存里。該內(nèi)存可以是全局存儲(chǔ)器,也可以是常數(shù)存儲(chǔ)器。對(duì)于位形數(shù)據(jù),一般比較大,放在全局存儲(chǔ)區(qū)。
⑥、啟動(dòng)CUDA核心函數(shù)進(jìn)行填充先把每一張位形所屬的梯形頂點(diǎn)集拷貝到共享存儲(chǔ)區(qū)(即圖1中Glared Memory),然后使得每個(gè)線程分配一張位形(如圖2), 比如說(shuō)ThreadO填充bmpO,Threadl填充bmpl,Thread2填充bmp2。準(zhǔn)備就緒,使得所有線程都在同一起點(diǎn),也就是某個(gè)Block把其梯形頂點(diǎn)拷貝到其自己的共享存儲(chǔ)區(qū)最晚結(jié)束的時(shí)間,然后開(kāi)始啟動(dòng)填充,每一個(gè)Thread都會(huì)先計(jì)算自己的四條邊的斜率,然后得到自己的四條直線。根據(jù)四個(gè)頂點(diǎn)計(jì)算到一個(gè)最小外接矩形,然后比較這個(gè)外接矩形內(nèi)的坐標(biāo)點(diǎn)是否在梯形范圍內(nèi),如果在,設(shè)置其灰度值。
⑦、將數(shù)據(jù)拷貝到Host端利用CUDA提供的接口函數(shù),拷貝Device填充好的數(shù)據(jù)至Host端已經(jīng)分配好的內(nèi)存區(qū)。
對(duì)于步驟①,如果是單色圖,或者初始灰度值為0的圖形,則不需要將位形數(shù)據(jù)在步驟⑤中拷貝至GPU內(nèi)存中,直接在GPU分配需要的同等大小的內(nèi)存即可。
對(duì)于步驟⑥,把梯形頂點(diǎn)放在共享存儲(chǔ)區(qū)(即圖1中Siared Memory),其目的是為了在進(jìn)行步驟⑥中的點(diǎn)與梯形邊比較的頻繁使用,而共享存儲(chǔ)區(qū)的特點(diǎn)是比較小,存儲(chǔ)速度快。這樣可以提高填充速度。
其中如果梯形頂點(diǎn)只有三個(gè),也可以填充;包括梯形頂點(diǎn)有可能超出圖形外圍內(nèi) (如圖2中梯形4),或?yàn)樨?fù)值,或大于位圖寬高,亦可以填充。對(duì)于相互重疊的梯形或梯形最小外接矩形,在填充時(shí),不需要考慮重疊部分,只需要在其原有灰度的基礎(chǔ)上,添加需要設(shè)置的灰度即可。
在CUDA梯形填充處理中,需要考慮位形和梯形數(shù)據(jù)的有效性和合理性,對(duì)填充過(guò)程,合理化安排每個(gè)Block和Thread可使性能提升。
權(quán)利要求
1.一種基于CUDA的梯形填充方法,涉及光刻技術(shù),其特征在于包括以下步驟①、在Host端準(zhǔn)備需要填充的位形,設(shè)置位深、顏色表,分配并初始化內(nèi)存單元;②、在Host端準(zhǔn)備好需要的梯形頂點(diǎn)數(shù)據(jù),并保存在梯形點(diǎn)集里;③、把當(dāng)前處理任務(wù)分配給一個(gè)Grid,根據(jù)位形的數(shù)量確定Block數(shù)量,根據(jù)梯形的數(shù)量確定Thread數(shù)量;④、通過(guò)CUDA提供接口函數(shù),在Device端的GlobalMemory分別分配位形和梯形頂點(diǎn)數(shù)據(jù)所需的空間;⑤、將Host端的數(shù)據(jù)拷貝到Device端的內(nèi)存中;⑥、啟動(dòng)CUDA多線程并行填充梯形;⑦、待處理完之后,將Device端填充之后的數(shù)據(jù),拷貝到Host端,即完成填充。
2.根據(jù)權(quán)利要求1所述的一種基于CUDA的梯形填充方法,其特征在于在步驟③中也可把任務(wù)分配給多個(gè)Grid處理。
3.根據(jù)權(quán)利要求1所述的一種基于CUDA的梯形填充方法,其特征在于所述Grid由數(shù)個(gè)執(zhí)行相同程序的Block組成,所述Block由數(shù)個(gè)Thread組成。
全文摘要
本發(fā)明公開(kāi)了一種基于CUDA的梯形填充方法,涉及多線程并行開(kāi)發(fā)、計(jì)算機(jī)圖形學(xué)、數(shù)據(jù)結(jié)構(gòu)開(kāi)發(fā)、數(shù)字圖像處理等領(lǐng)域,本發(fā)明采用CUDA多線程并行填充梯形方法,從而避免了利用GDI填充方法不能對(duì)大量圖形數(shù)據(jù)有效處理,且由于CPU串行運(yùn)行的限制而不能并行處理的問(wèn)題,因而本發(fā)明能夠有效地提升填充效率,滿足大量圖形數(shù)據(jù)處理的需求。
文檔編號(hào)G06T1/00GK102521789SQ20111043206
公開(kāi)日2012年6月27日 申請(qǐng)日期2011年12月21日 優(yōu)先權(quán)日2011年12月21日
發(fā)明者蔣興華, 趙美云 申請(qǐng)人:合肥芯碩半導(dǎo)體有限公司