本發(fā)明涉及數(shù)字地形分析的可視域分析和并行計算的交叉技術(shù)領(lǐng)域,特別是一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法。
背景技術(shù):
數(shù)字地形分析(digitalterrainanalysis,簡稱dta)是在數(shù)字高程模型(digitalelevationmodel,簡稱dem)的基礎(chǔ)上進(jìn)行地形屬性計算和特征提取的數(shù)字信息處理技術(shù)??梢曅苑治鍪菙?shù)字地形分析的重要地形分析因子,包括通視性分析和可視域分析。其中,可視域分析又稱地形通視分析,指的是從單個或者多個地理位置所能看到的地形范圍或者與其他地理位置之間的可見程度,是數(shù)字地形分析中的不可缺少的一部分。地形可視域分析在很多相關(guān)領(lǐng)域都有比較重要的意義,已經(jīng)成為景觀分析與評估、建筑規(guī)劃、軍事、空間認(rèn)知與決策、考古等領(lǐng)域的重要研究手段。由于可視域分析算法中具有的數(shù)據(jù)的全局依賴特性和局部數(shù)據(jù)依賴特性,可視性分析并行化過程中所面臨的各種復(fù)雜的問題需要考慮,已有的并行化手段無法徹底解決這一問題,同時在并行數(shù)字地形分析的大環(huán)境下,大尺度下的復(fù)雜數(shù)據(jù)依賴問題逐漸成為制約相關(guān)算法加速效果進(jìn)一步提升的瓶頸。
并行可視域分析是使用并行計算的技術(shù)來解決可視域分析中的海量數(shù)據(jù)量的高效處理問題。隨著各種新型傳感器以及測量技術(shù)的出現(xiàn),dem數(shù)據(jù)呈級數(shù)增長,從而導(dǎo)致單機(jī)環(huán)境下對大規(guī)模的數(shù)據(jù)進(jìn)行處理是一件十分困難的事情。因此使用并行計算技術(shù)可以有效地解決單處理器的計算瓶頸問題以及提高數(shù)據(jù)處理的效率?;谝?guī)則格網(wǎng)dem的可視域計算,一種簡單的方法就是沿著視線的方向,從視點(diǎn)開始到目標(biāo)格網(wǎng)點(diǎn),計算與視線相交的格網(wǎng)單元(邊或面),判斷相交的格網(wǎng)單元是否可視,從而確定視點(diǎn)與目標(biāo)視點(diǎn)之間是否可視。該方法存在大量的冗余計算,導(dǎo)致海量規(guī)則格網(wǎng)dem的可視域計算非常耗時。xdraw算法是一種近似的可視域分析算法,可以采用并行化的方法進(jìn)行計算,大大提高計算的效率。
gpu(graphicsprocessingunit)主要是用于圖形計算的處理單元,圖形計算通常是并行的,因此gpu的結(jié)構(gòu)設(shè)計盡可能具有好的并行計算能力。nvidia公司開發(fā)的gpu結(jié)構(gòu)如圖1所示。通常,gpu被設(shè)計探究數(shù)據(jù)并行化,并能達(dá)到cpu10倍的flops能力。cuda(computeunifieddevicearchitecture)是一個編程框架,其設(shè)計目的不僅是使用計算機(jī)的圖形處理單元所具有的快速圖形渲染能力,而是其強(qiáng)大的計算能力,也稱為通用目的gpu編程。cuda僅支持nvidiagpu計算,而且數(shù)據(jù)密集型的應(yīng)用得益于gpu的高帶寬內(nèi)存,其能夠進(jìn)行i/o管理功能,因而增強(qiáng)i/o性能。cuda線程模型如圖2所示,其被設(shè)計適用于數(shù)據(jù)密集型的空間分析,例如數(shù)字地形分析。
gpu有五種不同的內(nèi)存類型,用于提高gpu的處理性能。(1)gm(globalmemory)用于存儲從主機(jī)傳送給gpu設(shè)備的數(shù)據(jù),其可以被處于同一空間的cuda的線程訪問;(2)cm(constantmemory)是gm的一部分,常存儲只讀的常量數(shù)據(jù),也可以是從cm讀取的緩存內(nèi)存,速度要比gm快;(3)tm(texturememory)也是gm的一部分,稱為l2級緩存,用于從一個圖形或內(nèi)核結(jié)構(gòu)采樣;(4)共享內(nèi)存(sharedmemory)僅能被同一個線程塊中的線程訪問,通過執(zhí)行同步操作確保在共享內(nèi)存的讀寫同步;(5)privatememory(pm)是線程的私有內(nèi)存,對其他線程是不可見的。放在pm中的變量將使用寄存器以達(dá)到快速內(nèi)存訪問的水平??梢栽L問的寄存器數(shù)目取決于在內(nèi)核中執(zhí)行的線程的數(shù)目。gm和tm一般比較大,而每個線程的pm小于16kb,cm只有64kb,對于每個流式多處理器(streammultiprocessor,sm)共享內(nèi)存僅達(dá)到16kb,以及每個處理器32位的寄存器只能到8192或16384。寄存器、cm和共享內(nèi)存的時延至多是24個周期,但是gm和tm的訪問時延大約是400-600周期。cuda性能提高最重要的問題是內(nèi)存優(yōu)化。大規(guī)模的并行線程以流水線的方式被調(diào)度到多處理器上,可以減輕gm的訪問延時。由于硬件資源有限,例如寄存器文件的大小、共享內(nèi)存和線程調(diào)度插槽,一個流式多處理器同時只能擁有一定數(shù)量的線程塊。駐留在sm中主動線程數(shù)目與gpu中的sm所支持的線程最大數(shù)目的比例稱為多處理器占用比。對內(nèi)存帶寬受限的應(yīng)用,提高占用比可以有助于減輕gm訪問的時延。
cuda基于gpu架構(gòu)設(shè)計,可用于開發(fā)面向海量數(shù)據(jù)的并行計算。為了利用大量的線程并行計算能力,cuda編程模型采用了spmd(singleprogrammultipledata)模式,大量的處理器核被組織成一組流式多處理器來達(dá)到較高的flops(floating-pointoperationspersecond)。因此,應(yīng)用開發(fā)者指定稱作核(kernel)的數(shù)據(jù)并行函數(shù),其通過主機(jī)的cpu請求運(yùn)行在擁有大量的并行線程的gpu設(shè)備上,每個線程執(zhí)行核函數(shù)的一個實例。這些線程被組織成線程塊和線程塊網(wǎng)格(grid),且每個線程可以通過線程id和線程塊唯一標(biāo)識。一個網(wǎng)格有許多線程塊,它們不能相互通信。一個線程塊至少擁有512個線程,它們可以相互通信和同步。每個線程塊被分配給一個sm,并被分成兩個或三個段(warp)。每個段有八個線程,并以simt(simpleinstructionmultiplethreads)方式在sm中執(zhí)行。線程調(diào)度器在不同段中切換以最大化處理器的效率。在cuda應(yīng)用中的變量應(yīng)存儲在gpu芯片中的設(shè)備內(nèi)存中。這些內(nèi)存資源可以靈活地分配給線程,以達(dá)到令人滿意的內(nèi)存訪問性能。特別是,每個線程能夠私有的方式訪問自己的寄存器文件。在同一個線程塊中的線程被允許訪問芯片上的共享內(nèi)存。不同線程塊的線程能夠共享gm,能夠通過全體核同步方式進(jìn)行通信。
xdraw可視域分析算法是由franklin等人提出的可視域分析算法,其將dem數(shù)據(jù)區(qū)域劃分成8個45°角三角形區(qū)域,使得每個三角形區(qū)域保持獨(dú)立,因而可以實現(xiàn)數(shù)據(jù)并行計算。xdraw算法通過由視點(diǎn)逐漸向外的矩形環(huán)來近似確定每個單元的可視性。如圖3所示,目標(biāo)單元p的可視性僅需通過前一層上的單元的信息確定。這種方式可以將兩維的可視計算環(huán)簡化成一維的基于視線插值的可視性問題。例如,xdraw使用兩個參考點(diǎn)r1p與r2p的和觀察點(diǎn)與目標(biāo)點(diǎn)p視線的插值點(diǎn)的高程值來判斷p點(diǎn)是否可視。具體就是通過插值點(diǎn)的高程值計算出p點(diǎn)的可視要求的高程值,然后判斷p點(diǎn)的高程值是否大于要求的高程值,若大于,則可視,否則不可視。
目前并行可視域分析的研究熱點(diǎn)主要集中在dem數(shù)據(jù)拆分和可視域分析算法并行化,其中對于數(shù)據(jù)并行策略的研究主要集中在數(shù)據(jù)的有效拆分和數(shù)據(jù)調(diào)度策略方面。數(shù)據(jù)拆分主要分為等角度拆分和非等角度拆分。
基于等角度的數(shù)據(jù)拆分策略是按照角度對dem進(jìn)行數(shù)據(jù)拆分。每一塊數(shù)據(jù)的視點(diǎn)角度為angle=360°/n,n是處理器的數(shù)目。如圖3所示,以視點(diǎn)為中心,地形被拆分為8個規(guī)格的三角形區(qū)域。各個區(qū)域的數(shù)據(jù)基本獨(dú)立,不存在數(shù)據(jù)依賴,便于數(shù)據(jù)分發(fā)和并行計算。該拆分策略可以保證數(shù)據(jù)塊拆分的角度大小與計算處理器的多少有關(guān)。對于單視點(diǎn)的并行可視域計算具有較好的適應(yīng)性,可以保證相鄰進(jìn)程間的可視域計算不需要交互,各個進(jìn)程可以根據(jù)本地數(shù)據(jù)獨(dú)立計算。
數(shù)據(jù)按照角度拆分成三角形區(qū)域,每個三角形中的數(shù)據(jù)是按照視點(diǎn)從內(nèi)到外依次計算的,存在從內(nèi)到外的依賴關(guān)系,也就是說外面點(diǎn)的可視計算需要依賴?yán)锩纥c(diǎn)的結(jié)果。因此,每個三角形區(qū)域的數(shù)據(jù)還能否再次拆分,以便更細(xì)粒度的并行計算,是一個核心的問題之一。
盡管基于等角度數(shù)據(jù)劃分的8個區(qū)域具有獨(dú)立的特點(diǎn),但是每個區(qū)域的數(shù)據(jù)量還是巨大的,且可視域算法的數(shù)據(jù)從里到外具有先后依賴關(guān)系,因此對每個區(qū)域的數(shù)據(jù)調(diào)度和計算效率還是比較低下的。從另一個角度看,這8個區(qū)域的數(shù)據(jù)依賴存在行數(shù)據(jù)塊依賴或者是列數(shù)據(jù)塊依賴。如圖4所示,將這8個區(qū)域合并成4個區(qū)域,則i、iii區(qū)域是列數(shù)據(jù)塊依賴,而ii、iv區(qū)域是行數(shù)據(jù)塊依賴的。對于行數(shù)據(jù)塊依賴,數(shù)據(jù)可以按照每一行的數(shù)據(jù)段來讀取,且dem柵格數(shù)據(jù)是按照行數(shù)據(jù)塊存儲的。對于列數(shù)據(jù)塊依賴,數(shù)據(jù)可以按列數(shù)據(jù)塊來讀取。假設(shè)整個dem數(shù)據(jù)區(qū)域起始點(diǎn)在左上方,坐標(biāo)設(shè)為(0,0),終止點(diǎn)在右下方,坐標(biāo)設(shè)為(n,n)。設(shè)視點(diǎn)在區(qū)域的中心,即為(n/2,n/2)。
對于區(qū)域i,數(shù)據(jù)可以按列方式讀取每列數(shù)據(jù)段,且從里向外的順序讀取數(shù)據(jù)。設(shè)k為序號,則列號以及每列數(shù)據(jù)段的行起點(diǎn)和終點(diǎn)坐標(biāo)給出如下:
對于區(qū)域ii,數(shù)據(jù)可以按行方式讀取每行數(shù)據(jù)段,且從里向外的順序讀取數(shù)據(jù)。設(shè)k為序號,則行號以及每行數(shù)據(jù)段的列起點(diǎn)和終點(diǎn)坐標(biāo)給出如下:
對于區(qū)域iii,數(shù)據(jù)可以按列方式讀取每列數(shù)據(jù)段,且從里向外的順序讀取數(shù)據(jù)。設(shè)k為序號,則列號以及每列數(shù)據(jù)段的行起點(diǎn)和終點(diǎn)坐標(biāo)給出如下:
對于區(qū)域iv,數(shù)據(jù)可以按行方式讀取每行數(shù)據(jù)段,且從里向外的順序讀取數(shù)據(jù)。設(shè)k為序號,則行號以及每行數(shù)據(jù)段的列起點(diǎn)和終點(diǎn)坐標(biāo)給出如下:
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是克服現(xiàn)有技術(shù)的不足而提供一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法,本發(fā)明方法可以有效實現(xiàn)并行可視域分析,提高了地形可視域分析的效率。
本發(fā)明為解決上述技術(shù)問題采用以下技術(shù)方案:
根據(jù)本發(fā)明提出的一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法,包括以下步驟:
步驟1、主進(jìn)程讀入dem數(shù)據(jù),并按照角度將dem數(shù)據(jù)劃分為4個三角形區(qū)域:首先,利用90度角的數(shù)據(jù)拆分方法,將該dem數(shù)據(jù)以粗粒度的方式劃分為以視點(diǎn)為中心的4個三角形區(qū)域;然后在粗劃分得到的三角形區(qū)域數(shù)據(jù)的基礎(chǔ)上,以視點(diǎn)為參照點(diǎn),按照行或列數(shù)據(jù)塊方式進(jìn)行細(xì)粒度劃分;
步驟2、主進(jìn)程創(chuàng)建4個子進(jìn)程,并將所述4個三角形區(qū)域的數(shù)據(jù)和類型分別分發(fā)給這4個子進(jìn)程;
步驟3、每個子進(jìn)程讀取三角形區(qū)域的數(shù)據(jù),按照三角形區(qū)域類型確定按行還是按列數(shù)據(jù)塊方式來分發(fā)數(shù)據(jù),計算三角形區(qū)域的行或列數(shù)據(jù)并將其發(fā)送至gpu;
步驟4、gpu啟動多個gpu線程對每個子進(jìn)程發(fā)送過來的行或列數(shù)據(jù)進(jìn)行可視性計算,并將計算結(jié)果返回給各自的子進(jìn)程;
步驟5、每個子進(jìn)程接收和聚集計算結(jié)果,并保存結(jié)果;
步驟6、主進(jìn)程確認(rèn)各子進(jìn)程計算完成,結(jié)束計算工作。
作為本發(fā)明所述的一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法進(jìn)一步優(yōu)化方案,所述步驟3中分發(fā)數(shù)據(jù)的計算方法如下:
設(shè)整個dem數(shù)據(jù)大小為n×n,左上角坐標(biāo)為(0,0),右下角坐標(biāo)為(n,n),視點(diǎn)坐標(biāo)為(n/2,n/2):4個三角形區(qū)域分別為區(qū)域i、區(qū)域ii、區(qū)域iii和區(qū)域iv;
(1)對于區(qū)域i,數(shù)據(jù)塊按列方式讀取區(qū)域i中的數(shù)據(jù),對于第i列,則行取值范圍為:
(2)對于區(qū)域ii,數(shù)據(jù)塊按行方式讀取該區(qū)域ii中的數(shù)據(jù),對于第i行,則列為:
(3)對于區(qū)域iii,數(shù)據(jù)塊按列方式讀取該區(qū)域iii中的數(shù)據(jù),對于第i列,則行取值范圍為:
(4)對于區(qū)域iv,數(shù)據(jù)塊按照行方式讀取該數(shù)據(jù)段,對于第i行,則列為:
作為本發(fā)明所述的一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法進(jìn)一步優(yōu)化方案,所述步驟4中可視性計算是通過核函數(shù)進(jìn)行計算的。
作為本發(fā)明所述的一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法進(jìn)一步優(yōu)化方案,區(qū)域i和區(qū)域iii是按列讀取數(shù)據(jù)。
作為本發(fā)明所述的一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法進(jìn)一步優(yōu)化方案,區(qū)域ii和區(qū)域iv是按行讀取數(shù)據(jù)。
本發(fā)明采用以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)效果:
(1)本發(fā)明提出的面向地形可視域分析的數(shù)據(jù)細(xì)粒度拆分方法,結(jié)合數(shù)據(jù)依賴關(guān)系特點(diǎn),在基于90°角度粗粒度拆分的基礎(chǔ)上,以視點(diǎn)為中心的行或列數(shù)據(jù)讀取與分發(fā)策略,保證數(shù)據(jù)單向依賴,為數(shù)據(jù)調(diào)度建立基礎(chǔ);本發(fā)明的數(shù)據(jù)調(diào)度方法可以保證數(shù)據(jù)單向依賴,使得后續(xù)的調(diào)度方法能有效實現(xiàn)并行可視域分析,提高了地形可視域分析的效率;本發(fā)明可應(yīng)用于大規(guī)模海量數(shù)據(jù)的并行地形可視域分析的高性能計算的數(shù)據(jù)動態(tài)調(diào)度場合;
(2)本發(fā)明提出的基于gpu架構(gòu)的共享內(nèi)存的數(shù)據(jù)調(diào)度與分發(fā)方法,基于進(jìn)程和gpu線程的數(shù)據(jù)分發(fā)與計算策略,利用進(jìn)程進(jìn)行三角區(qū)域劃分?jǐn)?shù)據(jù)并進(jìn)行調(diào)度,使用gpu線程進(jìn)行以行或列方式分發(fā)數(shù)據(jù)進(jìn)行計算。三角形拆分的數(shù)據(jù)區(qū)域由進(jìn)程進(jìn)行數(shù)據(jù)調(diào)度,每個進(jìn)程上的三角形區(qū)域數(shù)據(jù)再按照以視點(diǎn)為中心的行或列進(jìn)行數(shù)據(jù)段分發(fā),并被分配到gpu線程上進(jìn)行計算。上述調(diào)度方法可以有效實現(xiàn)并行可視域分析,提高了地形可視域分析的效率;
(3)本發(fā)明完全可應(yīng)用于大規(guī)模海量數(shù)據(jù)的并行地形可視域分析的高性能計算的數(shù)據(jù)拆分和動態(tài)調(diào)度場合,例如,等角度三角區(qū)域劃分的可視域分析計算、基于計算量的非等角度三角區(qū)域劃分的可視域計算;也可以應(yīng)用于景觀分析與評估、建筑規(guī)劃、軍事、空間認(rèn)知與決策、考古等領(lǐng)域的可視域分析為基礎(chǔ)的研究手段等應(yīng)用場合,提高處理效率。
附圖說明
圖1是本發(fā)明實施例中的nvidia的gpu結(jié)構(gòu)原理圖;
圖2是cuda線程模型圖;
圖3是xdraw算法原理圖;
圖4為本發(fā)明實施例中的數(shù)據(jù)三角形區(qū)域拆分示意圖;
圖5為本發(fā)明實施例中的按照行或列依賴的數(shù)據(jù)段分發(fā)圖;
圖6為本發(fā)明實施例中的數(shù)據(jù)分發(fā)與調(diào)度流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說明:
本發(fā)明的實施例提供了一種基于gpu的地形可視域分析的數(shù)據(jù)調(diào)度與分發(fā)方法,主要包括:(1)面向并行地形可視域分析的數(shù)據(jù)三角區(qū)域劃分和行或列的數(shù)據(jù)調(diào)度:基于90°角度等角度數(shù)據(jù)拆分策略,以視點(diǎn)為中心按照90°角度的三角形區(qū)域進(jìn)行粗粒度劃分;對于每個三角形區(qū)域數(shù)據(jù),按照以視點(diǎn)為參照點(diǎn),對不同的三角形區(qū)域按照行或列數(shù)據(jù)段進(jìn)行細(xì)粒度劃分;(2)基于進(jìn)程與gpu線程相合的數(shù)據(jù)調(diào)度方法:進(jìn)程進(jìn)行三角形區(qū)域數(shù)據(jù)劃分,并按照行或列的方式進(jìn)行數(shù)據(jù)調(diào)度與分發(fā),而gpu線程則進(jìn)行以行或列的數(shù)據(jù)塊進(jìn)行數(shù)據(jù)調(diào)度與并行計算。具體為:
a)數(shù)據(jù)分層拆分
如圖5所示所拆分的4個三角形區(qū)域,按照可視域分析算法,每個區(qū)域的數(shù)據(jù)保持獨(dú)立,可以有一個進(jìn)程進(jìn)行數(shù)據(jù)讀取和調(diào)度。無論是按照視線計算可視域,還是按照由外層節(jié)點(diǎn)依賴內(nèi)層節(jié)點(diǎn)的可視性計算方法,數(shù)據(jù)都存在從內(nèi)到外逐次向外擴(kuò)展,如圖3所示。
按照xdraw算法,數(shù)據(jù)是按照分層調(diào)度并計算的,第1層的兩個點(diǎn)計算完成后,才能計算第2層的三個點(diǎn),因為第2層的三個點(diǎn)依賴第1層的兩個點(diǎn)的可視性結(jié)果。同理,第3層的四個點(diǎn)需要依賴第2層的三個的可視性結(jié)果。依次類推……。按照圖5的4個三角形區(qū)域劃分?jǐn)?shù)據(jù),每個區(qū)域的數(shù)據(jù)讀取方式不同。i和iii區(qū)域是按列讀取數(shù)據(jù)的,ii和iv區(qū)域是按行讀取數(shù)據(jù)的,且不同的行或列上讀取的數(shù)據(jù)大小也是不一樣的。
b)基于gpu共享內(nèi)存的數(shù)據(jù)調(diào)度與分發(fā)方法
如果一個三角形區(qū)域的數(shù)據(jù)被分發(fā)到一個進(jìn)程上,那么對該區(qū)域的可視域計算可以獨(dú)立進(jìn)行。為了更細(xì)粒度的數(shù)據(jù)調(diào)度和基于gpu共享內(nèi)存的并行計算,按照圖5的行或列數(shù)據(jù)調(diào)度策略進(jìn)行g(shù)pu數(shù)據(jù)分發(fā)和gpu線程調(diào)度與并行計算,有效提高計算的效率。
當(dāng)按照圖5所示的行或列數(shù)據(jù)調(diào)度策略,各行或列的數(shù)據(jù)由進(jìn)程分發(fā)給相應(yīng)的gpu設(shè)備,然后由gpu調(diào)度給不同的gpu線程進(jìn)行計算。例如,對于圖5中的區(qū)域i,數(shù)據(jù)按列來讀取與分發(fā),每一列的數(shù)據(jù)的起點(diǎn)和終點(diǎn)是由列決定的。區(qū)域i的列調(diào)度策略,第i列數(shù)據(jù)(1≤i≤n/2)對應(yīng)的列號為
每個gpu接收到行或列數(shù)據(jù),然后啟動大量的gpu線程,以并行的方式進(jìn)行核函數(shù)的并行計算。
上述的基于的gpu共享內(nèi)存的數(shù)據(jù)調(diào)度策略,可以實現(xiàn)并行計算,從而提高計算的效率。
c)進(jìn)程與gpu線程相結(jié)合的調(diào)度方法,如圖6所示,包括以下步驟:
步驟1、主進(jìn)程讀入dem數(shù)據(jù),并按照角度將dem數(shù)據(jù)劃分為4個三角形區(qū)域:首先,利用90度角的數(shù)據(jù)拆分方法,將該dem數(shù)據(jù)以粗粒度的方式劃分為以視點(diǎn)為中心的4個三角形區(qū)域;然后在粗劃分得到的三角形區(qū)域數(shù)據(jù)的基礎(chǔ)上,以視點(diǎn)為參照點(diǎn),按照行或列數(shù)據(jù)塊方式進(jìn)行細(xì)粒度劃分;
步驟2、主進(jìn)程創(chuàng)建4個子進(jìn)程,并將所述4個三角形區(qū)域的數(shù)據(jù)和類型分別分發(fā)給這4個子進(jìn)程;
步驟3、每個子進(jìn)程讀取三角形區(qū)域的數(shù)據(jù),按照三角形區(qū)域類型確定按行還是按列數(shù)據(jù)塊方式來分發(fā)數(shù)據(jù),計算三角形區(qū)域的行或列數(shù)據(jù)并將其發(fā)送至gpu;
步驟4、gpu啟動多個gpu線程對每個子進(jìn)程發(fā)送過來的行或列數(shù)據(jù)進(jìn)行可視性計算,并將計算結(jié)果返回給各自的子進(jìn)程;
步驟5、每個子進(jìn)程接收和聚集計算結(jié)果,并保存結(jié)果;
步驟6、主進(jìn)程確認(rèn)各子進(jìn)程計算完成,結(jié)束計算工作。