
本發明涉及并行計算應用
技術領域:
和高性能科學計算領域,特別是涉及一種具備TB級數據處理規模的CT切片數據可視化重構的八叉樹并行構造方法。
背景技術:
:在圖形圖像處理應用領域中,三維可視化技術是描繪和理解三維模型的一種重要工具,而八叉樹是一種用于描述三維空間的樹狀數據結構,其數據結構是三維可視化技術廣泛應用的重要數據結構之一。科學計算領域中常用的并行編程框架包括MPI(消息傳遞接口)、OpenMP、CUDA等。MPI主要用于實現多進程協作的并行程序設計。由于不同進程具有獨立的地址空間和資源,因此需要采用MPI提供的消息傳遞接口來實現進程間的相互通信。在使用MPI實現八叉樹并行構造算法時,通常會對計算網格進行區域劃分,不同的進程負責不同區域的計算,完成計算之后將數據存儲至自定義文件中。OpenMP是一種用于共享內存的并行系統的多處理器程序設計的編譯處理方案。在OpenMP的程序中,多個線程協同工作來完成計算任務,線程之間共享所在進程的內存空間,因此,線程間不需要額外的通信來交換數據。但是OpenMP不能實現跨節點并行,而且,在線程數目很大的情況下,不能實現良好的并行效率。隨著數據處理規模的迅速激增,和處理時效性需求不斷增加,三維可視化技術已經越來越多地利用高性能計算應用技術和并行計算應用技術來解決面臨的例如單機無法處理,或處理時間無法接受,或處理效果不好等問題和挑戰。八叉樹構造算法是一個非常重要的應用基礎算法,針對其優勢和特點,結合目前數據規模逐漸達到TB級、甚至PB級,應用時效性要求高的實際情況,研究八叉樹的并行構造方法有重要的實際意義和迫切的應用需求。技術實現要素:為了解決現有技術的不足,本發明提供了一種基于MPI+OpenMP并行編程模型的CT切片數據可視化重構的八叉樹并行構造方法。該方法利用原始體數據網格剖分、八叉樹節點數據沒有依賴性等特點,基于“按需構造-BranchonneedOctrees,BONOs”方案,根據體數據的實際三維尺寸進行八叉樹并行構造,一方面減少構造過程中對計算資源、存儲資源的浪費和I/O開銷,另一方面通過并行計算的方式實現對TB級CT切片數據的快速八叉樹數據結構構造,MPI+OpenMP并行編程技術滿足TB級CT切片數據在不同分辨率要求下的八叉樹數據結構體快速構造,該方法具備較好的并行加速比和并行效率。本發明的技術方案是:一種CT切片數據可視化重構的八叉樹并行構造方法,其具備TB級數據規模處理能力,其包括以下步驟:(1)根據CT切片數據組合而成的原始體數據尺寸X、Y和Z,將八叉樹的葉子節點和中間節點設定尺寸為x、y和z,計算獲得X方向、Y方向和Z方向的剖分網格數目NX、NY和NZ,得到體數據的剖分網格數目N=NX*NY*NZ,按照該數目構造一份線性滿八叉樹的索引列表,剖分網格即代表八叉樹的葉子節點;其中索引列表內包括以下信息:1)體數據三維尺寸:擬處理體數據的實際三維大小X、Y和Z;2)節點三維尺寸:BONOs樹節點表示的體數據三維大小x、y和z;3)實際節點數:當前BONOs樹的節點個數,包括根節點、中間節點和葉子節點;4)八叉樹深度:當前BONOs樹的深度;5)是否BONO樹:標識當前八叉樹是否為BONO樹;6)是否壓縮:標識當前八叉樹存儲前是否經過壓縮;7)線性八叉樹地址向量,滿線性八叉樹,包括:①節點標識:根據BONOs算法,若該樹節點實際存在,則為真,否則為假;②樹節點坐標:樹節點的三維坐標x,y和z;③節點Morton編碼:節點的Morton編碼;④節點實際內存地址:節點數據所在的實際內存地址;⑤節點鄰域索引:標識出子節點相鄰的其余體數據索引下標,包括面鄰域、邊鄰域和角鄰域,共27個;⑥文件存儲絕對路徑:表示當前節點的文件存儲路徑。(2)完成索引列表字段填充,包括八叉樹屬性字段和節點屬性字段,按照“按需構造-BONOs”原則,根據實際存在的體數據進行劃分,不保留擴充的“偽數據”:若節點內包含實際存在的體數據,則該節點被標識為存在;若節點只包含擴充的偽數據,則該節點被標識為不存在,減少轉換和構造過程中對計算資源、存儲資源的浪費和消耗。(3)根據原始體數據尺寸X、Y和Z,以及擬定的節點尺寸x、y和z,進行數據預取操作,將Z方向的z個CT切片數據文件預取至所有計算節點內存中,減少轉換過程中對數據文件的重復數據I/O開銷,提高數據復用效果。1)按照節點尺寸x、y和z,以及切片數據大小,申請動態內存空間,等待數據緩存至內存;2)按照OZ坐標軸方向將z個切片數據讀取至節點內存;3)根據體數據尺寸Z和節點尺寸z,計算迭代次數K,其中K表示該數據預取過程將持續K次,K=┌Z/z┐。(4)將預取至內存的體數據子塊,即三維尺寸為X、Y和z的體數據子塊在XOY平面進行X和Y方向進行等分,X方向劃分,Y方向劃分,將該體數據塊劃分為(X/x)*(Y/y)個葉子節點。1)按照MPI并行規模PN,對本次葉子節點網格數N進行平均劃分;2)每一個進程P,確定擬處理的葉子節點個數和節點編號,確保所有節點能夠被處理;3)根據擬處理葉子節點數目,申請動態內存空間,分配待處理數據緩存區域。(5)基于MPI+OpenMP編程模型,執行葉子節點數據并行轉換操作,由PN個MPI進程將N個葉子節點進行數據轉換,每個進程內部啟動OpenMP多線程完成數據排列,使得CT切片數據格式快速并行轉換為八叉樹葉子節點數據格式,并存儲為自定義二進制文件,將該過程迭代執行次,完成整個體數據由CT切片數據格式向葉子節點二進制數據格式的轉換操作。1)按照葉子節點尺寸和編碼,讀取體數據子塊的對應區域至緩存區域;2)依次按照OX、OY和OZ三個方向,將切片數據順序排列為樹節點數據;3)將完成數據填充的葉子節點存儲為自定義二進制文件;4)如此迭代執行K次,完成整個體數據由CT切片數據格式向八叉樹葉子節點二進制數據格式的轉換過程,其中。(6)根據線性滿八叉樹索引列表屬性信息和MPI+OpenMP并行編程模型,從八叉樹的葉子節點所在層位開始進行自底向上進行合并構造,逐層向上合并構造樹的中間節點,并將構造結果存儲為自定義二進制文件,存儲路徑保存至索引列表中。a)按照MPI并行規模PN,對當前擬合并的中間節點數目進行平均劃分,確保該層所有節點能夠被處理;b)每一個進程P,按照父子節點定位算法,確定擬處理的中間節點的子節點在索引列表中的索引編號范圍,線性滿八叉樹索引列表具備如下特性:i.設一子節點索引號為ID’,其對應的父節點索引號為ID;ii.ID’=ID*8+i,i={1,2,3,4,5,6,7,8};iii.ID’-1=ID*8+i’,i’={0,1,2,3,4,5,6,7};iv.(ID’-1)/8=(ID*8+i’)/8=ID,i’={0,1,2,3,4,5,6,7};v.ID=(ID’-1)/8c)即根據子節點索引編號ID’,可以直接計算得到父節點索引編號ID,同樣父節點也能夠直接計算獲得八個子節點的索引編號,計算時間復雜度為O(1);d)對上述a)-c)步驟重復迭代執行,直至完成對樹的根節點Root數據合并操作。(7)完成整棵八叉樹構造,獲得線性滿八叉樹索引列表和八叉樹節點數據文件,滿足體數據三維可視化重構目的。本發明的有益效果是,一種CT切片數據可視化重構的八叉樹并行構造方法,相比已有的八叉樹構造方案,該并行構造方案有以下方面的突破:1)設計并實現了線性滿八叉樹索引列表數據結構,利用線性滿八叉樹的特性和領域尋找算法,對于八叉樹的父子節點、相鄰節點定位能夠在時間復雜度內完成,提高了八叉樹節點編號定位效率;2)設計并實現了針對TB級CT切片數據自底向上八叉樹構造算法,通過MPI+OpenMP并行編程模型,在節點之間采用MPI多進程并行,在節點內部采用OpneMP共享內存并行,完成對TB級規模的CT切片數據進行八叉樹數據結構并行構造,使得TB級的CT切片數據能夠快速完成八叉樹數據結構構造,實現指定分辨率的快速三維可視化重構;3)以“按需構造-BONOs”思路和自底向上逐層合并算法框架設計實現八叉樹并行構造方法,能夠根據體數據尺寸和八叉樹節點尺寸完成八叉樹自底向上按需構造,構造過程中根據節點是否真實存在進行內存申請,無需對不規則體數據進行三維尺寸補全,減少無效數據對內存、磁盤I/O的消耗,提高八叉樹結構體的并行處理效率,在可接受時間內滿足對TB級CT切片數據的可視化重構需求,一方面實現數據規模越來越大的CT切片數據可視化重構要求,另一方面通過自底向上重構方法,探索獲得一種適用于并行計算的八叉樹并行構造算法框架。4)該方法可以實現對TB級CT切片體數據進行快速八叉樹并行重構。根據重構之后的八叉樹數據結構體,能夠快速進行不同設定分辨率下的數據可視化查看,方法具備對TB級數據處理能力,具備良好的并行加速比和并行效率,可靠性、可擴展性良好,能夠有效提升三維數據可視化重構的應用水平。附圖說明圖1是本申請索引列表數據結構示意圖。圖2是本申請體數據子塊中數據預取示意圖。圖3是本申請葉子節點網絡并行劃分示意圖。圖4是本申請葉子節點數據轉換示意圖。圖5是本申請中八叉樹中間節點合并構造示意圖。具體實施方式下面結合附圖、附表和具體實施例對本發明作進一步詳細說明。一種CT切片數據可視化重構的八叉樹并行構造方法,其具備TB級數據規模處理能力,其包括以下步驟:(1)根據CT切片數據組合而成的原始體數據尺寸X、Y和Z,將八叉樹的葉子節點和中間節點設定尺寸為x、y和z,計算獲得X方向、Y方向和Z方向的剖分網格數目NX、NY和NZ,得到體數據的剖分網格數目N=NX*NY*NZ,按照該數目構造一份線性滿八叉樹的索引列表,剖分網格即代表八叉樹的葉子節點;如圖1所示,其中索引列表內包括以下信息:1)體數據三維尺寸:擬處理體數據的實際三維大小X、Y和Z;2)節點三維尺寸:BONOs樹節點表示的體數據三維大小x、y和z;3)實際節點數:當前BONOs樹的節點個數,包括根節點、中間節點和葉子節點;4)八叉樹深度:當前BONOs樹的深度;5)是否BONO樹:標識當前八叉樹是否為BONO樹;6)是否壓縮:標識當前八叉樹存儲前是否經過壓縮;7)線性八叉樹地址向量,滿線性八叉樹,包括:①節點標識:根據BONOs算法,若該樹節點實際存在,則為真,否則為假;②樹節點坐標:樹節點的三維坐標x,y和z;③節點Morton編碼:節點的Morton編碼;④節點實際內存地址:節點數據所在的實際內存地址;⑤節點鄰域索引:標識出子節點相鄰的其余體數據索引下標,包括面鄰域、邊鄰域和角鄰域,共27個;⑥文件存儲絕對路徑:表示當前節點的文件存儲路徑。(2)完成索引列表字段填充,包括八叉樹屬性字段和節點屬性字段,按照“按需構造-BONOs”原則,根據實際存在的體數據進行劃分,不保留擴充的“偽數據”:若節點內包含實際存在的體數據,則該節點被標識為存在;若節點只包含擴充的偽數據,則該節點被標識為不存在,減少轉換和構造過程中對計算資源、存儲資源的浪費和消耗。(3)根據原始體數據尺寸X、Y和Z,以及擬定的節點尺寸x、y和z,進行數據預取操作,將Z方向的z個CT切片數據文件預取至所有計算節點內存中,減少轉換過程中對數據文件的重復數據I/O開銷,提高數據復用效果。如圖2所示:1)按照節點尺寸x、y和z,以及切片數據大小,申請動態內存空間,等待數據緩存至內存;2)按照OZ坐標軸方向將z個切片數據讀取至節點內存;3)根據體數據尺寸Z和節點尺寸z,計算迭代次數K,其中K表示該數據預取過程將持續K次,K=┌Z/z┐。(4)將預取至內存的體數據子塊,即三維尺寸為X、Y和z的體數據子塊在XOY平面進行X和Y方向進行等分,X方向劃分,Y方向劃分,將該體數據塊劃分為(X/x)*(Y/y)個葉子節點,如圖3所示:1)按照MPI并行規模PN,對本次葉子節點網格數N進行平均劃分;2)每一個進程P,確定擬處理的葉子節點個數和節點編號,確保所有節點能夠被處理;3)根據擬處理葉子節點數目,申請動態內存空間,分配待處理數據緩存區域。(5)基于MPI+OpenMP編程模型,執行葉子節點數據并行轉換操作,由PN個MPI進程將N個葉子節點進行數據轉換,每個進程內部啟動OpenMP多線程完成數據排列,使得CT切片數據格式快速并行轉換為八叉樹葉子節點數據格式,并存儲為自定義二進制文件,將該過程迭代執行次,完成整個體數據由CT切片數據格式向葉子節點二進制數據格式的轉換操作,如圖4所示:1)按照葉子節點尺寸和編碼,讀取體數據子塊的對應區域至緩存區域;2)按依次按照OX、OY和OZ三個方向,將切片數據順序排列為樹節點數據,如圖4虛線框部分;3)將完成數據填充的葉子節點存儲為自定義二進制文件;4)如此迭代執行K次,完成整個體數據由CT切片數據格式向八叉樹葉子節點二進制數據格式的轉換過程,其中。(6)根據線性滿八叉樹索引列表屬性信息和MPI+OpenMP并行編程模型,從八叉樹的葉子節點所在層位開始進行自底向上進行合并構造,逐層向上合并構造樹的中間節點,并將構造結果存儲為自定義二進制文件,存儲路徑保存至索引列表中,如圖5所示:按照MPI并行規模PN,對當前擬合并的中間節點數目進行平均劃分,確保該層所有節點能夠被處理;a)每一個進程P,按照父子節點定位算法,確定擬處理的中間節點的子節點在索引列表中的索引編號范圍,線性滿八叉樹索引列表具備如下特性:i.設一子節點索引號為ID’,其對應的父節點索引號為ID;ii.ID’=ID*8+i,i={1,2,3,4,5,6,7,8};iii.ID’-1=ID*8+i’,i’={0,1,2,3,4,5,6,7};iv.(ID’-1)/8=(ID*8+i’)/8=ID,i’={0,1,2,3,4,5,6,7};v.ID=(ID’-1)/8b)即根據子節點索引編號ID’,可以直接計算得到父節點索引編號ID,同樣父節點也能夠直接計算獲得八個子節點的索引編號,計算時間復雜度為O(1);c)對上述a)-c)步驟重復迭代執行,直至完成對樹的根節點Root數據合并操作。(7)完成整棵八叉樹構造,獲得線性滿八叉樹索引列表和八叉樹節點數據文件,滿足體數據三維可視化重構目的。本發明的測試環境為:TH-1A系統,2CPU/節點,6核/CPU,2.90GHz,24GB內存,網絡通信點對點80GB/s,基于Lustre文件系統提供存儲。本發明的測試數據為:腦切片CT數據,TIFF格式,包括600MB、17GB和1.8TB三種數據規模,其體數據尺寸如表1所示:表1體數據尺寸數據大小X維度Y維度Z維度600MB5684222110717GB28420111031071.8TB284201110314000本發明的測試方案,根據體數據尺寸設定樹節點尺寸為表2所示:表2樹節點尺寸設定數據大小樹節點X維度樹節點Y維度樹節點Z維度600MB2561283217GB256128141.8TB51225664測試結果包括600MB數據、17GB數據和1.8TB數據的并行執行時間,考慮到數據規模較大、單節點內存配置有限,測試方案沒有對傳統八叉樹構造方案進行時間開銷測試統計。600MB數據測試統計表為表3所示:表3600MB數據測試統計表從表3可以看出,2個進程即可在20S內完成對600MB的CT切片數據格式向八叉樹結構格式轉換。17GB數據測試統計表為表4所示:表417GB數據測試統計表從表4可以看出,17GB的CT切片數據在8個進程并行執行下能夠在8分鐘以內完成格式轉換,獲得八叉樹結構。同時,由4個進程線性增加到8個進程時,加速比為1.51,并行效率為75.7%,具備較好的可擴展性。1.8TB數據測試統計表如表5所示:表51.8TB數據測試統計表從表5可以看出,1.8TB的CT切片數據在16進程并行規模下能夠在6個小時內完成數據格式轉換,快速實現TB級數據可視化重構需求。測試結果分析:從上述表可知,600MB數據的2進程并行時間開銷在20秒以內,17GB數據的8進程時間開銷在8分鐘以內,1.8TB數據的16進程時間開銷在6小時以內。本發明方法一方面實現數據規模越來越大的CT切片數據可視化重構要求,另一方面通過自底向上重構方法,探索獲得一種新的適用于并行計算的八叉樹并行構造算法框架。以上僅是本申請的優選實施方式,本申請的保護范圍并不局限于上述實施例。凡屬于本申請思路下的技術方案均屬于本申請的保護范圍。應當指出,對于本
技術領域:
的普通技術人員來講,在不脫離本申請的原理前提下的若干改進和潤飾,都應視為本申請的保護范圍。當前第1頁1 2 3