亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種單機(jī)多核環(huán)境下約束地形并行構(gòu)建方法_4

文檔序號(hào):8943781閱讀:來源:國知局
有負(fù)載平衡最優(yōu),從而最大程 度地減少計(jì)算線程之間的等待時(shí)間。本方法為了兼顧分治算法的效率,采用坐標(biāo)排序法作 為統(tǒng)一的數(shù)據(jù)劃分策略,該方法簡(jiǎn)單高效,兼顧空間。具體劃分思路:(1)用總點(diǎn)數(shù)N除于 計(jì)算線程數(shù)K,假設(shè)每個(gè)線程平均分配點(diǎn)數(shù)為m ; (2)將離散點(diǎn)集先X軸方向,后Y軸方向 進(jìn)行排序;⑶根據(jù)每個(gè)線程的點(diǎn)數(shù)m,將點(diǎn)號(hào)區(qū)間[i*m,(i+l)m-l] (i為線程序號(hào),i = 0, 1,2,…,K)分配給每個(gè)線程,如果存在沒有分配完的剩余點(diǎn)號(hào),則全部給最后一個(gè)線程。 所有線程共享同一份數(shù)據(jù),每個(gè)線程計(jì)算時(shí),根據(jù)點(diǎn)號(hào)區(qū)間從新排序點(diǎn)集中讀取對(duì)應(yīng)點(diǎn)。
[0126] 步驟3,基于分治算法的子網(wǎng)并行構(gòu)建。
[0127] 對(duì)逐點(diǎn)插入算法、生長(zhǎng)算法和分治算法的時(shí)間復(fù)雜度進(jìn)行了深入比較分析,從 比較結(jié)果來看,分治算法的效率最高,最壞情況下的時(shí)間復(fù)雜度都能達(dá)到O(NlogN),最好 情況下其性能甚至能達(dá)到O(NloglogN);而生長(zhǎng)算法的效率最差,性能最高也只能達(dá)到 0(N3/2)。分治算法不足在于由于遞歸的原因,剖分時(shí)消耗內(nèi)存較大,但如今人們對(duì)時(shí)間的 要求越來越高,并且隨著計(jì)算機(jī)的發(fā)展,硬件將會(huì)更加強(qiáng)大,因而內(nèi)存的影響將會(huì)得到緩 解,也可以通過改進(jìn)分治算法盡量使內(nèi)存消耗最小化。分治算法最關(guān)鍵之處是要解決點(diǎn)集 的劃分,根據(jù)點(diǎn)集分割方法的不同,可以分為單向劃分、雙向劃分、四叉樹劃分等。單向劃 分容易形成狹長(zhǎng)三角形,增加交換邊的次數(shù);四叉樹劃分由于離散點(diǎn)的空間分布不均勻,可 能出現(xiàn)葉子節(jié)點(diǎn)擁有1個(gè)或O個(gè)點(diǎn)的情況。本文在已經(jīng)排序的點(diǎn)集基礎(chǔ)上,將每個(gè)計(jì)算線 程的數(shù)據(jù)實(shí)現(xiàn)基于自適應(yīng)格網(wǎng)劃分,根據(jù)分治算法要求,所有子集中的點(diǎn)數(shù)少于4個(gè)。分治 算法關(guān)鍵步驟是子網(wǎng)凸包構(gòu)建,凸包是線程內(nèi)部和線程間子網(wǎng)合并重要依據(jù),它隨著子網(wǎng) 的合并而不斷更新。兩子網(wǎng)的合并是從兩個(gè)子網(wǎng)的合并起始線開始至終止線結(jié)束,伴隨著 三角形刪除、生成的過程。相鄰兩子網(wǎng)合并由于位置的不同可分為左右和上下合并兩種情 況,原理相同,下文以左右合并情況為例。具體實(shí)現(xiàn)過程如下:
[0128] (1)定義數(shù)據(jù)結(jié)構(gòu)MaxEdge用于存儲(chǔ)線程內(nèi)部和線程間子網(wǎng)凸包的最左上/下和 最右上/下邊。
[0130] (2)定義左右凸包合并時(shí)的邊指針參數(shù):ldo、ldi、rdo和rdi,其中,Ido-指針為 左凸包上以最左點(diǎn)為始點(diǎn)的逆時(shí)針方向的邊;Idi-指針為左凸包上以最右點(diǎn)為始點(diǎn)的順 時(shí)針方向的邊;rdo-指針為右凸包上以最右點(diǎn)為始點(diǎn)的逆時(shí)針方向的邊;rdi-指針為右 凸包上以最左點(diǎn)為始點(diǎn)的順時(shí)針方向的邊,如圖5所示。該四個(gè)指針為全局變量,為了解決 并行時(shí)數(shù)據(jù)共享沖突問題,在OpenMP并行模塊頭部設(shè)置指針變量為線程私有:#pragma omp threadprivate(ldo, ldi, rdo, rdi)〇
[0131] (3)分治算法程序模塊
[0132] 分治算法使用遞歸方式,將離散點(diǎn)集按子塊數(shù)量在空間上分成左右均等的兩個(gè)子 集L、R,子塊經(jīng)過遞歸繼續(xù)劃分為更小子塊直到劃分?jǐn)?shù)目size小于4,并且最小只會(huì)出現(xiàn)點(diǎn) 集size為2和3的情況,此時(shí),直接兩兩相連形成線段或三角形,遞歸下降過程結(jié)束之后, 開始遞歸上升。在上升過程,size最小為4,左右子集L、R剖分形成左右凸包后,將凸包數(shù) 據(jù)以MaxEdge結(jié)構(gòu)方式保存在leftRet、rightRet,從左右凸包中可以獲取指針ldi、ldo、 rdi、rdo,分治算法偽代碼如下:

[0137] 步驟4,子網(wǎng)并行合并。
[0138] 子網(wǎng)合并是分治算法下三角網(wǎng)剖分的核心,也是并行計(jì)算結(jié)果完整性和準(zhǔn)確性的 保證。多核并行構(gòu)建子網(wǎng)間的合并與串行算法內(nèi)部子網(wǎng)合并原理具有一致性,都是根據(jù) 左右凸包實(shí)現(xiàn)相鄰子網(wǎng)的合并,關(guān)鍵之處在于提取左右凸包下公切線及與其構(gòu)成Delaunay 三角形的候選點(diǎn)。具體實(shí)現(xiàn)過程如下:
[0139] (1)獲取左右凸包下公切線
[0140] 以左凸包最右邊Idi和右凸包最左邊rdi為起始邊參數(shù),通過判斷各自起點(diǎn) 〇rg在對(duì)方邊的哪側(cè),如圖6(a)所示,并結(jié)合數(shù)據(jù)結(jié)構(gòu)快速找到下公切線。為了快速獲 取點(diǎn)在哪側(cè),通常使用向量叉乘K分量結(jié)果進(jìn)行判斷。假設(shè)有兩個(gè)向量^ = 和
這兩個(gè)向量有同共點(diǎn)A,對(duì)這兩個(gè)向量作叉乘運(yùn)算:
[0142] 假設(shè)A、B、C三點(diǎn)都為二維平面上的點(diǎn)則(^和C2都為零,那么有:
C2)
[0144] 叉積的k分量在判斷點(diǎn)與線段的位置關(guān)系具有十分重要的作用,它具有以下性 質(zhì):
[0145] 性質(zhì)1 :若(aib2-bia2) > 0,則?. Η的順時(shí)針方向,那么C點(diǎn)在S的左邊;
[0146] 性質(zhì)2 :若(aib2_bia2) < 0,則? Χ?的逆時(shí)針方向,那么C點(diǎn)在XTi的右邊;
[0147] 性質(zhì)3 :若= 0,則Ad與.涵共線,但可能同向也可能反向,如果C點(diǎn)在 A和B的最小外包MBR內(nèi),則同向且C點(diǎn)落在線段AB上。
[0148] 根據(jù)上述向量叉乘K分量性質(zhì),獲取下公切線偽代碼如下:
}
[0151] (2)獲取最終候選點(diǎn)并連接合并
[0152] 合并過程是通過下公切線往上獲取構(gòu)建Delaunay三角形候選點(diǎn)(也可以通過上 公切線往下獲取候選點(diǎn))。當(dāng)滿足相鄰三點(diǎn)構(gòu)成的外接圓不包含其他候選點(diǎn)時(shí),則該候選 點(diǎn)為最終候選點(diǎn),連接后作為新的下公切線,所有的候選點(diǎn)從下公切線右邊的點(diǎn)集中選取; 當(dāng)左右候選點(diǎn)都在下公切線的左邊,且當(dāng)前下公切線為最頂邊,即上公切線,則合并結(jié)束。 假設(shè)下公切線記為baseLine,以其終點(diǎn)為起點(diǎn)、左候選鄰居點(diǎn)為終點(diǎn)的邊記為L(zhǎng)Edge ;以 baseLine共起點(diǎn)、右候選鄰居點(diǎn)為終點(diǎn)的邊記為REdage,如圖7(a)所示。候選點(diǎn)判斷過程 如下:
[0153] ①重新獲取左右邊:LEdge和REdge如果LEdge終點(diǎn)在baseLine右邊,則判斷 baseLine終點(diǎn)、起點(diǎn)及LEdge終點(diǎn)三點(diǎn)構(gòu)成的外接圓是否包含LEdge. oNext終點(diǎn),若包含, 則LEdge = LEdge. oNext,重復(fù)①;如果REdge終點(diǎn)在baseLine右邊,則判斷baseLine終 點(diǎn)、起點(diǎn)及REdge終點(diǎn)三點(diǎn)構(gòu)成的外接圓是否包含REdge-> 〇PreV終點(diǎn),若包含,則REdge = REdge_>oPrev,重復(fù)①。如圖7(a)所示的情形,無需更新左右邊。
[0154] ②獲取最終候選點(diǎn):如果LEdge終點(diǎn)不在baseLine右邊,或者如果REdge終點(diǎn)在 baseLine右邊,且LEdge起點(diǎn)、終點(diǎn)及REdge起點(diǎn)三點(diǎn)構(gòu)成的外接圓包含REdge終點(diǎn),如圖 7(a)所示,則由baseLine終點(diǎn)和REdge終點(diǎn)組成Delaunay三角形的一條邊unionLine, 然后更新下公切線,令baseLine = unionLine ;如果以上條件不滿足,則從左凸包獲取候 選點(diǎn),如圖7 (b)所示,則由baseLine起點(diǎn)和LEdge終點(diǎn)組成Delaunay三角形的一條邊 unionLine,然后更新下公切線,令baseLine = unionLine。最后,基于新下公切線,并回到 ①,重新獲取LEdge、REdge。
[0?55] ③退出算法:如果LEdge和REdge的終點(diǎn)都不在baseLine右邊,則此時(shí)baseLine 為上公切線,如圖7(e)所示,算法結(jié)束。
[0156] (3)相鄰子網(wǎng)兩兩遞歸并行合并
[0157] 在分治算法中,子網(wǎng)合并在數(shù)據(jù)量比較大時(shí),會(huì)嚴(yán)重影響算法的性能,應(yīng)盡量避免 數(shù)據(jù)分割的塊數(shù)過多,通常根據(jù)計(jì)算線程數(shù)自適應(yīng)劃分,并行塊數(shù)越多,最終比串行多出更 多合并操作。子網(wǎng)并行合并過程如圖8所示,根據(jù)并行構(gòu)建子網(wǎng)的凸包找到相鄰子網(wǎng)兩兩 合并,并得到新的子網(wǎng)及其凸包;然后,通過新子網(wǎng)的凸包找到相鄰子網(wǎng)進(jìn)行合并,如此下 去直到子網(wǎng)數(shù)為1,則合并結(jié)束。
[0158] 步驟5,格網(wǎng)索引構(gòu)建。
[0159] 格網(wǎng)索引作用是為了當(dāng)約束地物插入時(shí)快速找到其對(duì)D-TIN影響區(qū)域。格網(wǎng)單元 大小的確定是構(gòu)建格網(wǎng)索引的一個(gè)關(guān)鍵環(huán)節(jié),太小會(huì)使得目標(biāo)對(duì)象跨越格網(wǎng)就太多,檢索 的格網(wǎng)單元數(shù)就增多;而太大又會(huì)使得格網(wǎng)單元中落入對(duì)象數(shù)會(huì)增多,進(jìn)行二次空間過濾 的對(duì)象數(shù)就越多,兩種情況都會(huì)影響空間檢索效率。目前,確定格網(wǎng)單元大小比較常用方法 是對(duì)目標(biāo)對(duì)象MBR的長(zhǎng)和寬做正態(tài)分布計(jì)算,確立劃分格網(wǎng)最小單元的最佳行高和列寬。 它的主要思路是:以D-TIN中所有三角形MBR的長(zhǎng)作為樣本,并對(duì)該樣本進(jìn)行排序,得到一 組從小到大的新樣本,利用正態(tài)分布檢驗(yàn)算法求出樣本的均值μ和方差σ,接著以μ + 〇 為網(wǎng)格單元行高的初始值,每次增加0. 1 σ,增加m次(m由r決定,對(duì)于那些不服從正態(tài)分 布要求的數(shù)據(jù)參照正態(tài)分布的"3〇準(zhǔn)則"引進(jìn)一個(gè)比例系數(shù)r(0〈r彡1),r的默認(rèn)值為 [0. 90,0. 95]),最終以y + 〇+m*〇. Io作為網(wǎng)格單元的行高,從而得到網(wǎng)格劃分的行數(shù)M。 再以D-TIN中所有三角形MBR的寬作為樣本,確定網(wǎng)格劃分的列數(shù)N。
[0160] 步驟6,約束點(diǎn)地物并行插入。
[0161 ] 本方法結(jié)合格網(wǎng)索引和四方邊緣結(jié)構(gòu),加快點(diǎn)狀約束地物影響區(qū)域的搜索速度。 本方法對(duì)已正參與約束地物影響區(qū)域重構(gòu)的三角形在內(nèi)存中標(biāo)記為:已占用,避免其它地 物同時(shí)調(diào)用此三角形,從而避免算法混亂,計(jì)算完成后將參與計(jì)算的三角形從內(nèi)外存刪除, 其它地物將從最新三角網(wǎng)搜索影響區(qū)域。約束點(diǎn)并行插入時(shí),可能存在如圖8所示的情形, 對(duì)不同情形,采取不同并行策略:
[0162] (1)對(duì)于圖8(a)所示的情形,并行插入點(diǎn)的影響區(qū)域不重疊,則兩線程同時(shí)執(zhí)行 對(duì)影響區(qū)域重新構(gòu)網(wǎng),完成后刪除影響三角形,并更新三角網(wǎng)和格網(wǎng)索引;
[0163] (2)對(duì)于圖8(a)、(b)所示的情形,并行插入點(diǎn)的影響區(qū)域存在重疊,則不可以同 時(shí)進(jìn)行影響區(qū)域重新構(gòu)網(wǎng),需要待到約束點(diǎn)地物CPl完成計(jì)算后,約束點(diǎn)地物CP2再從新的 三角網(wǎng)中,查找影響區(qū)域。對(duì)上述情形,CP2釋放所占線程,進(jìn)入下一約束點(diǎn)地物的插入,CP2 則仍保留在未插入約束點(diǎn)地物集合中。
[0164] 步驟7,約束線地物并行插入。
[0165] 約束線地物的影響區(qū)域搜索比約束點(diǎn)如地物復(fù)雜得多,如圖9所示的約束線地物 影響區(qū)域搜索過程:
[0166] (1)通過約束線地物外包矩形找到其所在范圍的格網(wǎng)索引;
[0167] (2)根據(jù)格網(wǎng)索引初步找到約束線地物的影響區(qū)域三角形;
[0168] (3)從(2)的結(jié)果集中,逐一找到約束線地物頂點(diǎn)與相鄰點(diǎn)間線段的影響區(qū)域三 角形,并將找到的三角形標(biāo)記為:已占用,此時(shí)存在以下兩種情形:
[0169] ( i )如果前一點(diǎn)與后一點(diǎn)的影響三角形相鄰,則此兩點(diǎn)的影響三角形也即為此 兩點(diǎn)間線段的影響區(qū)域,如圖9中約束線CPl的頂點(diǎn)Vl和V2 ;
[0170] ( ii )如果相鄰兩點(diǎn)影響三角形不相鄰,如圖9中約束線CPl的頂點(diǎn)V2和
當(dāng)前第4頁1 2 3 4 5 6 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1