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