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

一種單機多核環(huán)境下約束地形并行構建方法_2

文檔序號:8943781閱讀:來源:國知局
edge,并加到New_EdgeQueue ;
[0020] 步驟6,主控機將每個處理機生成的NeW_EdgeQu eue進行合并,從而形成一個完整 三角網。
[0021] 現有技術存在以下不足:
[0022] 1.現有技術并行構建建立在集群模式下,對于普通用戶來說,代價太大,增加經濟 成本,個人難于承擔,集群模式主要是為了滿足那些有需求的部門和科研單位,而普通戶面 向的主要是目前流行的多核獨立CPU的計算機。
[0023] 2.現有的三角網并行構建技術主要面向的是無約束D-TIN的構建,而對于具有約 束的D-TIN在并行環(huán)境下的構建需要考慮的問題更多,算法更復雜,因而較難實現。
[0024] 3.數據劃分過程中沒有對每個處理機的計算能力,實現自適應負載劃分。
[0025] 4.在并行計算算法設計中沒有考慮運用數據庫實現數據的存儲,數據都在內存中 計算,內存消耗較大,而且難以支持海量數據的并行構建。

【發(fā)明內容】

[0026] 本發(fā)明的目的是提供一種單機多核環(huán)境下約束地形并行構建方法,針對當前多核 CHJ計算機的計算性能越來越強大,以及內外存儲容量越來越大情況,為了充分挖掘現有資 源優(yōu)勢,提出了實現在該環(huán)境下的約束地形的并行構建算法,充分發(fā)揮并行計算技術為普 通用戶對地形高效構建的需求,給普通用戶帶來更強的體驗。在現有技術基礎上,設計一種 合適的約束地形內存描述數據結構,并構建以之對應的數據庫存儲模型,進一步提出了基 于負載平衡策略離散點數據劃分策略;選擇分治算法作為地形構建的基礎算法,在空間索 引技術支持下,制定了約束點地物、約束線地物和約束面地物的并行插入規(guī)則,并設計了并 行插入算法。本發(fā)明構建的多核環(huán)境下約束地形并行構建算法,將促進空間矢量算子在單 機環(huán)境下的并行化發(fā)展。
[0027] 本發(fā)明所采用的技術方案是,一種單機多核環(huán)境下約束地形并行構建方法,包括 以下步驟:
[0028] 步驟1,基于四方邊緣結構的⑶-TIN數據結構及主要函數設計;
[0029] 步驟2,基于負載平衡的數據劃分策略;
[0030] 步驟3,基于分治算法的子網并行構建;
[0031] 步驟4,子網并行合并;
[0032] 步驟5,格網索引構建;
[0033] 步驟6,約束點地物并行插入;
[0034] 步驟7,約束線地物并行插入;
[0035] 步驟8,約束面地物并行插入。
[0036] 步驟1的具體步驟為:
[0037] CCW代表逆時針方向,CW代表順時針方向,該數據結構定義如下:
[0038] (1)假設初始邊為e,則e有一個與其方向相反的伴生邊e. twin ;e. org為e的起 始點坐標;e. dest為e的終點坐標;e. Rot和e. InvRot為e的對偶邊;
[0039] (2)包含"next"的邊是指以逆時針方向圍繞鄰面或頂點的下一條邊;e. Lnext指 逆時針圍繞e邊左面的下一條邊,與e邊同左面;e. Dnext指逆時針圍繞e邊終點的下一條 邊,與e邊同終點;e. Onext指逆時針圍繞e邊起點的下一條邊,與e邊同起點;e. Rnext指 逆時針圍繞e邊右面的下一條邊,與e邊同右面;
[0040] (3)包含"prev"的邊是指以順時針方向圍繞鄰面或頂點的下一條邊;e. Dprev指 順時針圍繞e邊終點的下一條邊,與e邊同終點;e. Rprev指順時針圍繞e邊右面的下一條 邊,與e邊同右面;e. Lprev指順時針圍繞e邊左面的下一條邊,與e邊同左面;e. Oprev指 順時針圍繞e邊起點的下一條邊,與e邊同起點;
[0041] 為實現該數據結構,定義了三個數據類:節(jié)點類一VertexClass、邊類一EdgeClass 和三角形類一TriangleClass,以及一個操作類:UtilityClass ;VertexClass記錄節(jié)點三 維坐標、關聯(lián)邊和布爾值的約束屬性,EdgeClass記錄四方邊緣結構的各拓撲邊、左右三角 邊形和布爾值的約束屬性;UtilityClas中定義了⑶-TIN的系列操作函數接口,
[0042] 其中包含四個主要含數據接口:makeEdge、splice、connected和swap,函數功能 描述如下:
[0043] (I) void splice (Edge*a, Edge*b),該函數作用是對a、b邊進行連接或者拆分;若 將a、b邊所在的兩個具有共同頂點的獨立子三角網合并,該函數將兩個子網在共同頂點處 關聯(lián)在一起;同時,合并a和b左側的面;相反,若要在共同點處沿a和b邊拆分,該函數將 在共同頂點處將三角網拆分成兩個獨立子網,同時,分裂a和b左側的面;
[0044] (2)Edge*connected(Edge*a, Edge*b),該函數作用是連接a的終點,b的起點生 成新邊c,在此過程中會建立a, b, c之間的四方邊緣結構關系,next指邊的INext,prev指 邊的IPrev ;
[0045] (3) void swap (Edge*e),該函數作用是用來交換對角線邊,當用局部優(yōu)化法LOP檢 測三角形不滿足Delaunay法則時,則需要交換邊線,將與e邊相鄰的兩三角形組成的四邊 形另兩頂點相連,形成新的邊取代e,該邊分別以e邊起點和終點逆時針方向查找,第一點 為新邊的起點,第二點為終點。
[0046] 步驟2的具體步驟為:
[0047] 采用坐標排序法作為統(tǒng)一的數據劃分策略,(1)用總點數N除于計算線程數K,假 設每個線程平均分配點數為m ; (2)將離散點集先X軸方向,后Y軸方向進行排序;(3)根據 每個線程的點數m,將點號區(qū)間[i*m,(i+l)m-l],i為線程序號,i = 0, 1,2,…,K,分配給每 個線程,如果存在沒有分配完的剩余點號,則全部給最后一個線程,所有線程共享同一份數 據,每個線程計算時,根據點號區(qū)間從新排序點集中讀取對應點。
[0048] 步驟3的具體步驟為:以左右合并情況為例,具體實現過程如下:
[0049] (1)定義數據結構MaxEdge用于存儲線程內部和線程間子網凸包的最左上/下和 最右上/下邊;
[0050] (2)定義左右凸包合并時的邊指針參數:ldo、ldi、rdo和rdi,其中,Ido-指針為 左凸包上以最左點為始點的逆時針方向的邊;Idi-指針為左凸包上以最右點為始點的順 時針方向的邊;rdo-指針為右凸包上以最右點為始點的逆時針方向的邊;rdi-指針為右 凸包上以最左點為始點的順時針方向的邊,該四個指針為全局變量,為了解決并行時數據 共享沖突問題,在OpenMP并行模塊頭部設置指針變量為線程私有:#pragma omp threadpr ivate (ldo, ldi, rdo, rdi);
[0051] (3)分治算法程序模塊,分治算法使用遞歸方式,將離散點集按子塊數量在空間上 分成左右均等的兩個子集L、R,子塊經過遞歸繼續(xù)劃分為更小子塊直到劃分數目size小于 4,并且最小只會出現點集size為2和3的情況,此時,直接兩兩相連形成線段或三角形,遞 歸下降過程結束之后,開始遞歸上升;在上升過程,size最小為4,左右子集L、R剖分形成 左右凸包后,將凸包數據以MaxEdge結構方式保存在leftRet、rightRet,從左右凸包中可 以獲取指針 ldi、ldo、rdi、rdo ;
[0052] (4)多核并行構建程序模塊。
[0053] 步驟4的具體步驟為:
[0054] (1)獲取左右凸包下公切線,
[0055] 以左凸包最右邊Idi和右凸包最左邊rdi為起始邊參數,通過判斷各自起點org 在對方邊的哪側,并結合數據結構快速找到下公切線;為了快速獲取點在哪側,使用向量叉
乘K分量結果進行判斷;假設有兩個向量 這兩個向 f 量有同共點A,對這兩個向量作叉乘運算:
[0057] 假設A、B、C三點都為二維平面上的點則(^和C2都為零,那么有:
[0059] 叉積的k分量具有以下性質:
[0060] 性質1 :若(aib2_bia2) > 0,則;順時針方向,那么C點在涵的左邊;
[0061] 性質2 :若(B1W2) < 0,則兄在涵的逆時針方向,那么C點在涵的右邊;
[0062] 性質3 :若= 0,則紀與Αβ共線,但可能同向也可能反向,如果C點在 A和B的最小外包MBR內,則同向且C點落在線段AB上;根據上述向量叉乘K分量性質,獲 取下公切線偽代碼;
[0063] (2)獲取最終候選點并連接合并,
[0064] 假設下公切線記為baseLine,以其終點為起點、左候選鄰居點為終點的邊記為 LEdge ;以baseLine共起點、右候選鄰居點為終點的邊記為REdage,候選點判斷過程如下:
[0065] ①重新獲取左右邊:LEdge和REdge如果LEdge終點在baseLine右邊,則判斷 baseLine終點、起點及LEdge終點三點構成的外接圓是否包含LEdge. oNext終點,若包含, 則LEdge = LEdge. oNext,重復①;如果REdge終點在baseLine右邊,則判斷baseLine終 點、起點及REdge終點三點構成的外接圓是否包含REdge-> 〇PreV終點,若包含,則REdge = REdge_>oPrev,重復①;
[0066] ②獲取最終候選點;如果LEdge終點不在baseLine右邊,或者如果REdge終點 在baseLine右邊,且LEdge起點、終點及REdge起點三點構成的外接圓包含REdge終點, 則由baseLine終點和REdge終點組成Delaunay三角形的一條邊unionLine,然后更新下 公切線,令baseLine = unionLine ;如果以上條件不滿足,則從左凸包獲取候選點,則由 baseLine起點和LEdge終點組成Delaunay三角形的一條邊unionLine,然后更新下公切 線,令baseLine = unionLine ;最后,基于新下公切線,并回到①,重新獲取LEdge、REdge ;
[0067] ③退出算法;如果LEdge和REdge的終點都不在baseLine右邊,則此時baseLine 為上公切線,算法結束;
[0068] (3)相鄰子網兩兩遞歸并行合并,
[0069] 根據并行構建子網的凸包找到相鄰子網兩兩合并,并得到新的子網及其凸包;然 后,通過新子網的凸包找到相鄰子網進行合并,如此下去直到子網數為1,則合并結束。
[0070] 步驟5的具體步驟為:
[0071] 以D-TIN中所有三角形MBR的長作為樣本,并對該樣本進行排序,得到一組從小到 大的新樣本,利用正態(tài)分布檢驗算法求出樣本的均值μ和方差σ,接著以μ + σ為網格單 元行高的初始值,每次增加〇
當前第2頁1 2 3 4 5 6 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1