[發明專利]一種基于OpenMP/MPI混合編程的CFD仿真程序的通信優化方法有效
| 申請號: | 201810308300.4 | 申請日: | 2018-04-08 |
| 公開(公告)號: | CN108595277B | 公開(公告)日: | 2021-01-19 |
| 發明(設計)人: | 董小社;何鋒;張興軍;張瓊;劉闖;鄒年俊;肖兮 | 申請(專利權)人: | 西安交通大學 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54 |
| 代理公司: | 西安通大專利代理有限責任公司 61200 | 代理人: | 徐文權 |
| 地址: | 710049 陜*** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 openmp mpi 混合 編程 cfd 仿真 程序 通信 優化 方法 | ||
1.一種基于OpenMP/MPI混合編程的CFD仿真程序的通信優化方法,其特征在于,包括以下步驟:
步驟一,根據通信負載和計算負載對計算域進行區域分解,劃分為可并行求解的若干子域;步驟一具體包括以下步驟:
1)根據通信負載將求解網格劃分為若干個較大的子網格塊,每個進程負責一個網格塊的計算;
2)根據計算負載將進程的網格塊在劃分為若干個較小的網格塊,每個線程負責一個小網格塊的計算;
線程數,進程數,細分后總的網格塊數目滿足:
nblocks=nprocs*nthreads
其中nblocks是總的網格塊數目,nprocs是總的進程數,nthreads是每個進程包含的線程數;
步驟二,根據{進程,線程組}的設置情況,確定各個網格塊之間的網絡拓撲關系,創建并初始化進程間的MPI持久化通信關系;
步驟三,線程間無關計算推進結束后,進程間激活MPI通道進行消息通信,同時線程組內使用共享內存通信,實現網格塊之間的邊界數據交換;
步驟四,線程組內計算殘差,進程間收集最大殘差,如果最大殘差仍未滿足收斂條件則返回步驟二進行迭代,否則并行計算結束;
步驟二具體包括以下步驟:
1)根據{進程,線程組}和網格塊的對應關系,設置進程中每個線程計算的網格塊邊界中分別需要進程間MPI通信和進程內共享緩存通信的拓撲關系;
BlockNum/threads=procid,BlockNum%threads=threadid
其中BlockNum代表要和本線程通信的線程所計算的網格塊編號,threads代表一個線程組中線程的總個數,procid代表要通信的線程所屬的進程號,threadid代表要通信的線程在它的線程組中的線程號;
2)根據拓撲關系對需要進行MPI通信的進程,調用MPI函數MPI_Send_init/MPI_Recv_init創建持久化通信,建立半關閉的通信通道等待激活;
每個線程同步的計算需要和本線程通信的其他線程號,并通過判斷來確定該線程是否和自己同屬一個線程組,如果是則使用共享緩存通信方法,否則就需要在進程之間使用消息通信。
2.根據權利要求1所述的一種基于OpenMP/MPI混合編程的CFD仿真程序的通信優化方法,其特征在于,步驟三具體包括以下步驟:
1)各線程進行相對獨立的CFD推進計算;
2)線程間無關計算推進結束后,根據之前建立的網絡拓撲關系,主線程激活進程間MPI通信通道進行數據交換,同時其他副線程進行線程內的OpenMP共享內存通信,實現兩種通信方式的重疊,隱藏部分通信等待時間。
3.根據權利要求1所述的一種基于OpenMP/MPI混合編程的CFD仿真程序的通信優化方法,其特征在于,步驟四具體包括以下步驟:
1)各個線程計算出自己目前推進所得到的殘差結果,并寫入本線程所在進程的共享緩存;
2)主線程計算出本進程最大殘差,同時通過MPI通信收集其他進程的最大殘差;獲得所有進程最大殘差后,根據結果判斷繼續迭代還是結束。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西安交通大學,未經西安交通大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810308300.4/1.html,轉載請聲明來源鉆瓜專利網。





