国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于mpi的網(wǎng)格并行預(yù)處理方法_2

      文檔序號(hào):8445388閱讀:來(lái)源:國(guó)知局
      網(wǎng)格的分區(qū)數(shù);啟動(dòng)MPI多進(jìn)程,設(shè)定進(jìn)程數(shù);判斷進(jìn)程數(shù)是否等于分區(qū)數(shù),若等于則打開(kāi)網(wǎng)格文件,主進(jìn)程讀取網(wǎng)格單元信息文件,將網(wǎng)格單元平均初始分配到各個(gè)進(jìn)程,每個(gè)進(jìn)程創(chuàng)建網(wǎng)格單元的鄰接數(shù)組,否則重新啟動(dòng)MPI多進(jìn)程;每個(gè)進(jìn)程調(diào)用ParMETIS對(duì)網(wǎng)格單元進(jìn)行網(wǎng)格劃分;每個(gè)進(jìn)程將網(wǎng)格單元信息分塊讀到數(shù)組,設(shè)定數(shù)組的索引位置;每個(gè)進(jìn)程循環(huán)遍歷網(wǎng)格單元信息文件,判斷數(shù)組長(zhǎng)度減去數(shù)組的索引位置號(hào)是否小于網(wǎng)格單元信息長(zhǎng)度,若小于則讀取網(wǎng)格單元信息文件的數(shù)據(jù)填充到數(shù)組中,否則將數(shù)組元素賦值給網(wǎng)格單元,并修改數(shù)組的索引位置;判斷網(wǎng)格單元的分區(qū)號(hào)是否等于進(jìn)程號(hào),若等于則將網(wǎng)格單元信息存儲(chǔ)到進(jìn)程文件中,否則修改數(shù)組索引位置,繼續(xù)循環(huán)判斷。
      [0024]本發(fā)明網(wǎng)格預(yù)處理方案中,計(jì)算域的網(wǎng)格的分區(qū)數(shù)小于或等于并行計(jì)算機(jī)的處理器數(shù)。鄰接數(shù)組的存儲(chǔ)格式為CSR(Compressed Sparse Row)。每個(gè)進(jìn)程調(diào)用ParMETIS的子程序ParMETIS_V3_Mesh2Dual,將網(wǎng)格單元轉(zhuǎn)化成圖。每個(gè)進(jìn)程調(diào)用ParMETIS的子程序ParMETIS_V3_AdaptiveRepart,對(duì)圖進(jìn)行重劃分。每個(gè)進(jìn)程調(diào)用ParMETIS的子程序ParMETIS_V3_RefineKway,進(jìn)一步精化網(wǎng)格劃分的質(zhì)量。本發(fā)明通過(guò)多次調(diào)用ParMETIS的精化網(wǎng)格功能函數(shù)ParMETIS_V3_RefineKWay,不斷優(yōu)化網(wǎng)格劃分的質(zhì)量,進(jìn)一步減少網(wǎng)格分區(qū)邊界大小,減少并行計(jì)算的通信時(shí)間,提高網(wǎng)格劃分的質(zhì)量。
      [0025]本發(fā)明采用ParMETIS實(shí)現(xiàn)高效快速的網(wǎng)格劃分,ParMETIS的多層k_路圖劃分方法使各子圖的頂點(diǎn)權(quán)值基本相同且劃分產(chǎn)生的邊截權(quán)數(shù)最小化,劃分結(jié)果產(chǎn)生的通信時(shí)間短,從而使得整個(gè)并行程序的執(zhí)行時(shí)間得到有效減少,并且隨著數(shù)據(jù)規(guī)模的不斷增大和處理器個(gè)數(shù)的增加,通信開(kāi)銷降低的效果更加明顯。
      [0026]本發(fā)明采用MPI多進(jìn)程計(jì)算的方式,分布式進(jìn)行網(wǎng)格的劃分和預(yù)處理,能實(shí)現(xiàn)大規(guī)模網(wǎng)格的快速劃分;同時(shí)采用ParMETIS并行區(qū)域分解工具劃分大規(guī)模網(wǎng)格,將待劃分的網(wǎng)格,初始平均分配到多個(gè)進(jìn)程,各進(jìn)程并行完成網(wǎng)格的劃分,提升網(wǎng)格劃分的速度。
      [0027]本發(fā)明各進(jìn)程根據(jù)網(wǎng)格劃分的結(jié)果,循環(huán)遍歷網(wǎng)格文件,采用定位文件指針和數(shù)組索引的方法對(duì)網(wǎng)格文件進(jìn)行分塊讀,減少了大量的讀網(wǎng)格信息的操作,同時(shí)有效避免了多進(jìn)程同時(shí)讀文件的競(jìng)爭(zhēng)等待時(shí)間消耗,加速了各進(jìn)程對(duì)網(wǎng)格數(shù)據(jù)的分割,能快速實(shí)現(xiàn)網(wǎng)格的分布式存儲(chǔ)。
      [0028]實(shí)施例一
      [0029]本發(fā)明基于MPI的網(wǎng)格并行預(yù)處理方法的基本步驟為:首先MPI進(jìn)程啟動(dòng),讀入網(wǎng)格文件數(shù)據(jù),從網(wǎng)格文件中將結(jié)點(diǎn)信息和網(wǎng)格單元信息分別寫進(jìn)兩個(gè)文件。創(chuàng)建新的通信域,調(diào)用ParMETIS的分區(qū)函數(shù),對(duì)網(wǎng)格實(shí)現(xiàn)高質(zhì)量的劃分。根據(jù)網(wǎng)格劃分的結(jié)果,啟動(dòng)多進(jìn)程同時(shí)對(duì)網(wǎng)格文件進(jìn)行循環(huán)遍歷,通過(guò)定位文件指針?lè)謮K讀的方法,實(shí)現(xiàn)網(wǎng)格的分布式存儲(chǔ)。
      [0030]請(qǐng)參閱圖1和圖2,本實(shí)施例的具體步驟如下:
      [0031]1.用戶給定網(wǎng)格所需的分區(qū)數(shù)num_d0mains,分區(qū)數(shù)不能大于并行計(jì)算機(jī)的處理器數(shù)。
      [0032]2.啟動(dòng)MPI多進(jìn)程,設(shè)定進(jìn)程數(shù)num_processors,進(jìn)程數(shù)需等于分區(qū)數(shù)。
      [0033]3.判斷MPI進(jìn)程數(shù)是否等于網(wǎng)格的分區(qū)數(shù),若進(jìn)程數(shù)等于分區(qū)數(shù),則程序繼續(xù)執(zhí)行,否則退出,重新啟動(dòng)MPI多進(jìn)程,設(shè)定進(jìn)程數(shù)num_processors。
      [0034]4.從網(wǎng)格文件中,讀入網(wǎng)格全局幾何結(jié)點(diǎn)數(shù)和網(wǎng)格單元數(shù)。打開(kāi)指定目錄下指定的原始網(wǎng)格文件channnel.msh,從channnel.msh文件中,讀入網(wǎng)格全局幾何結(jié)點(diǎn)數(shù)global_nde和全局網(wǎng)格單兀數(shù)global_nel。
      [0035]5.將網(wǎng)格結(jié)點(diǎn)編號(hào)和結(jié)點(diǎn)坐標(biāo)寫進(jìn)指定目錄下的grid, bin文件。從channnel.msh網(wǎng)格文件中,用fscanf函數(shù)讀取網(wǎng)格結(jié)點(diǎn)信息,并將網(wǎng)格結(jié)點(diǎn)編號(hào)和結(jié)點(diǎn)坐標(biāo)寫進(jìn)指定目錄下的grid, bin文件。
      [0036]6.將網(wǎng)格單元的類型和構(gòu)成單元的結(jié)點(diǎn)表等信息寫進(jìn)指定目錄下的nenn.bin文件。用fscanf函數(shù)讀取網(wǎng)格單元信息,并將網(wǎng)格單元的類型和構(gòu)成單元的結(jié)點(diǎn)表等信息寫進(jìn)指定目錄下的nenn.bin文件。
      [0037]7.創(chuàng)建ParMETIS分區(qū)工具的通信域。指定ParMETIS的進(jìn)程數(shù)num_run,根據(jù)指定的進(jìn)程創(chuàng)建ParMETIS分區(qū)函數(shù)所需的通信域。
      [0038]8.網(wǎng)格劃分。包括以下步驟:
      [0039]I)主進(jìn)程讀網(wǎng)格單元信息文件nenn.bin,將網(wǎng)格單元平均初始分配到各個(gè)進(jìn)程,每個(gè)進(jìn)程負(fù)責(zé)global_nel/num_processors個(gè)網(wǎng)格單元的劃分。
      [0040]2)主進(jìn)程創(chuàng)建數(shù)組elmdist, elmdist=new idx_t [num_run+l],表示各進(jìn)程處理的網(wǎng)格單元范圍。其中第mpi_id個(gè)進(jìn)程負(fù)責(zé)第elmdist [mpi_id]到第elmdist [mpi_id+l]個(gè)網(wǎng)格單元的劃分。
      [0041]3)主進(jìn)程創(chuàng)建全局網(wǎng)格單元的鄰接數(shù)組結(jié)構(gòu),采用CSR格式即用兩個(gè)數(shù)組global_eptr、global_eind表示全局網(wǎng)格單元的鄰接關(guān)系。
      [0042]4)主進(jìn)程根據(jù)全局鄰接數(shù)組global_eptr、global_eind和elmdist數(shù)組,獲得網(wǎng)格單元的并行CSR格式,即各進(jìn)程第elmdist [mpi_id]到第elmdist [mpi_id+l]個(gè)網(wǎng)格單元的相鄰結(jié)構(gòu),用數(shù)組eptr、eind表示。
      [0043]5)主進(jìn)程采用MPI通信方式根據(jù)進(jìn)程數(shù)循環(huán),將第elmdiSt[mpi_id]到第elmdist [mpi_id+l]個(gè)網(wǎng)格單元的相鄰結(jié)構(gòu)數(shù)組eptr、eind,發(fā)送到進(jìn)程號(hào)為mpi_id的進(jìn)程。
      [0044]6)子進(jìn)程采用MPI_Recv函數(shù)接收主進(jìn)程發(fā)送的eptr、eind數(shù)組。
      [0045]7)各進(jìn)程準(zhǔn)備ParMETIS函數(shù)其他的輸入輸出參數(shù),如表示分區(qū)結(jié)果數(shù)組的輸出參數(shù)part。
      [0046]8)各進(jìn)程調(diào)用ParMETIS函數(shù)ParMETIS_V3_Mesh2Dual,將網(wǎng)格轉(zhuǎn)化成圖,獲得圖的鄰接結(jié)構(gòu),用數(shù)組xadj、adjncy表示。
      [0047]9)各進(jìn)程調(diào)用ParMETIS的重分區(qū)函數(shù)ParMETIS_V3_AdaptiveRepart,用圖的鄰接結(jié)構(gòu)數(shù)組xadj、adjncy作為該函數(shù)的輸入?yún)?shù)對(duì)圖進(jìn)行重劃分,獲得劃分的結(jié)果數(shù)組part,表示網(wǎng)格單元與進(jìn)程號(hào)的對(duì)應(yīng)關(guān)系。
      [0048]10)各進(jìn)程調(diào)用ParMETIS的精化分區(qū)函數(shù)ParMETIS_V3_RefineKway,在上述劃分的基礎(chǔ)上,進(jìn)一步精化網(wǎng)格劃分的質(zhì)量。
      [0049]9.各進(jìn)程將ParMETIS函數(shù)的輸出結(jié)果數(shù)組part,用MPI的1函數(shù)MPI_File_write_at同時(shí)寫進(jìn)partit1n, bin文件,其中各進(jìn)程寫的起始偏移位置為elmdist [mpi_id],寫的數(shù)組大小為 elmdist [mpi_id+l]-elmdist [mpi_id]。
      [0050]10.網(wǎng)格的分布式存儲(chǔ)。本發(fā)明采用分布式存儲(chǔ)方式存儲(chǔ),每個(gè)分區(qū)會(huì)產(chǎn)生自己的數(shù)據(jù)文件,存儲(chǔ)在相應(yīng)進(jìn)程的存儲(chǔ)空間里,減少了 I/o瓶頸,提高了處理數(shù)據(jù)的規(guī)模和速度。
      [0051 ] 請(qǐng)參閱圖2,包括以下步驟:
      [0052]I)各進(jìn)程將partit1n, bin的分區(qū)結(jié)果讀入數(shù)組ele_part,表示全局網(wǎng)格單元的分區(qū)號(hào)。
      [0053]2)各進(jìn)程創(chuàng)建大小為file_arr_size的分塊讀數(shù)組file_arr,用來(lái)存儲(chǔ)每次分塊讀的網(wǎng)格單元內(nèi)容。file_arr_siZe可以自己設(shè)定,設(shè)置太小算法的效果不明顯,設(shè)置越大文件讀寫請(qǐng)求的次數(shù)越少,算法的性能越好,所以在內(nèi)存夠大的時(shí)候,file_arr_size可設(shè)置為大一點(diǎn)的值。
      [0054]3)各進(jìn)程從nenn.bin文件讀file_arr_s
      當(dāng)前第2頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1