999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

風雷(PHengLEI)通用CFD軟件設計*

2020-03-04 08:20:48何先耀
計算機工程與科學 2020年2期
關鍵詞:結構設計

趙 鐘,何 磊,何先耀

(中國空氣動力研究與發展中心計算空氣動力研究所,四川 綿陽 621000)

1 引言

針對航空航天、地面交通、能源動力等領域對空氣動力數值模擬的需求,為了開發通用的計算流體力學CFD(Computational Fluid Dynamics)軟件,面向相關領域提供高效、高可信度的數值模擬手段,以及多學科、精細化的設計工具,我國啟動了國家數值風洞NNW(National Numerical Wind tunnel)工程,以建設擁有自主知識產權、開放共享、達到世界一流水平的空氣動力數值模擬平臺。風雷(PHengLEI)軟件,是NNW工程的通用CFD軟件,是工程的重要組成部分,將對標國內外主要CFD軟件。

經過幾十年的發展,國內外已經有多個知名的CFD數值模擬代碼。OpenFOAM[1]是一款基于非結構網格的開源代碼和框架,以C++語言面向對象思想設計,具有良好的可擴展性,有豐富的算法庫。源于libMesh的Moose[2,3]是一個有限元方法開源類庫,主要面向固體力學、彈性力學、熱傳導、高精度模擬等問題。Overture[4]是一套結構網格框架,開發了包括網格生成、有限差分、邊界條件、數據存取等數值計算方法。SU2[5]是由斯坦福大學發布的開源非結構CFD代碼,按照面向對象的思想開發,除常規CFD計算外,還有網格自適應、氣動優化等面向多學科數值模擬的模塊,近年來在全球得到了廣泛的應用。JASMIN/JAUMIN/JCOGIN[6 - 8]是分別面向結構網格、非結構網格、無網格數值模擬的編程框架,為慣性約束聚變、武器物理、電磁模擬、粒子輸運等多個領域的軟件開發提供了底層編程開發庫。

CFD是一門同時涉及計算數學、流體力學和計算機科學的交叉學科,數值模擬的最終實現要依靠可執行的軟件。長期以來,CFD軟件的開發者基本上是流體力學、計算數學專業人員,正因如此,與常規的應用軟件相比,CFD軟件有其鮮明的特點:屬于科學計算類軟件,密集計算,頻繁訪存(尤其是非結構算法),軟件執行過程人工交互少,功能單一,任務和用戶群明確,大多是面向過程開發的,缺乏軟件工程思想,規模一般較小。這些軟件在多年的研究和應用中發揮了重要作用,但是隨著CFD應用的拓展,工程應用的需求也逐漸從單一功能向多學科耦合模擬、從小規模到大規模并行計算的轉變,尤其是當前高性能計算HPC(High Performance Computing)硬件正處于從P級(PFLOPS,運算速度每秒千萬億次)計算到E級(EFLOPS,運算速度每秒百億億次)計算的過渡期,以前眾多小而精的軟件逐漸顯現出劣勢。對此,近十年來,國外多個CFD軟件也在不斷更新換代,并制定了長期的下一代CFD軟件研發計劃,主要趨勢是增強軟件工程化,強調結構/非結構求解器、二階精度/高精度、不同學科的耦合計算能力,具備面向下一代E級計算機大規模并行計算的能力。整體看,CFD軟件的發展趨勢是集成多個學科物理模型求解器,構建大型軟件平臺。

在歐洲,由德宇航實施的Digital-X項目[9],旨在研發1個具備高度適應性的大規模并行多學科分析優化設計平臺,該軟件系統集成了包括CFD流動模擬、結構動力學模擬、六自由度運動模擬、不確定度量化分析、旋翼模擬、自動化工作鏈、多學科優化等7大領域的軟件包,德宇航的9個研究所和空客公司、相關大學參與研制。Flucs(Flexible Unstructured CFD Software)[10],是由德宇航正在研發的一款新一代CFD軟件,目的是為Digital-X項目中的多學科數值模擬提供基本的CFD流動求解器。該軟件的算法模塊來源于非結構求解代碼TAU[11],由于TAU在適應下一代HPC系統、多學科模擬、高精度求解的需求上越來越困難,德宇航在借鑒了TAU的大量算法基礎上,著手開發全新的下一代CFD軟件Flucs。與德宇航的傳統CFD軟件相比,Flucs最大的變化體現在軟件開發模式、編程框架(Framework)、并行計算等幾方面。在編程框架方面,摒棄了傳統的面向過程的開發方法,采用C++語言面向對象的思想建立1個模塊化的編程框架,將空間/時間離散方法、并行、數據結構等具體的底層算法抽象為模塊,形成編程框架,在此框架上,集成開發出了二階精度的有限體積求解器、DG(Discontinuous Galerkin)高精度求解器。Flucs的并行框架采用了3層并行模式,以適應下一代的HPC系統。

在美國,自2007年始,美國國防部高性能計算現代化計劃DoD HPCMP(Department of Defense High Performance Computing Modernization Program)開始實施總投資達3.6億美元、持續12年的CREATE(Computational Research and Engineering for Acquisition Tools and Environments)項目[12],旨在研發新一代關于艦船(Ship)、飛行器AV(Air Vehicle)和射頻雷達RF(Radio Frequency)等設計和分析軟件系統,以及獨立的幾何建模和網格生成模塊MG(Meshing and Geometry)。其中的Kestrel[13]是為CREATE項目的飛行器(AV)子項提供飛行流動模擬分析的軟件。Kestrel作為1個大型CFD模擬系統,遵循2大設計原則:(1)具備線性擴展性的萬核量級并行計算能力;(2)通過代碼重寫或模塊分解的方式集成已有的傳統軟件。前者強調對未來HPC的適應能力,而后者主要是強調軟件的開發設計模式,即模塊化。模塊化設計主要有幾個特點:(1)模塊化集成。Kestrel中包含1個通用可擴展框架CSI(Common Scalable Infrastructure),主要起到集成各功能模塊和數據總線的作用,即各功能模塊通過CSI集成,通過與CSI的接口傳輸數據,從而實現各模塊間的數據共享。(2)中粒度集成。各模塊間的集成既不是像Flucs一樣在源代碼層次細粒度集成,也不是在可執行程序層次的粗粒度集成,而是在中粒度集成,即各模塊分別編譯后在鏈接階段集成。這種集成方式的好處是,各功能模塊可以采用Python、C/C++、Fortran等不同的編程語言分別編譯為不同的組件,具備高度靈活性。(3)包含SDK(Software Developer Kit)和Plug-ins 2大集成模式,分別適用于團隊內部和外部的模塊開發集成,二者的區別是前者代碼共享,后者只是組件共享。

總之,不管是美國的CREATE項目,還是歐洲的Digital-X項目,在關于飛行器空氣動力學研究方面,都致力于在現有發展數十年的In-House CFD代碼基礎上,開發新一代大型CFD軟件,并強調學科融合、求解算法融合、網格類型融合。

國家數值風洞NNW是以建設大型CFD軟件系統為目的的重大工程,PHengLEI軟件是NNW數值模擬軟件系統的通用CFD軟件,將在此前已全國發布的版本的基礎上,集成中國空氣動力研究與發展中心和國內相關優勢單位,在直升機旋翼、飛機結冰、風工程、化學反應與燃燒、虛擬飛行、結構/非結構高精度等十多個領域發展的CFD研究與軟件成果,打造面向航空航天、地面交通、能源環境等領域絕大部分空氣動力學模擬需求的大型通用CFD軟件。文獻[14,15]已介紹了PHengLEI軟件原型系統(HyperFLOW)的體系結構和數據結構。為了滿足NNW多物理模型求解器繼承開發的需要,經過多輪敏捷迭代,PHengLEI已重構為面向多學科、大規模并行的新一代大型CFD軟件框架,本文將介紹最新的軟件設計思想,包括體系結構設計和數據結構設計。

2 設計原則

國家數值風洞的數值模擬系統面向多種物理問題求解,將集成開發多個求解器。軟件框架是大型CFD軟件的“骨骼”,如果設計不合理,可能導致軟件擴展性不足,架構隨著軟件的擴展變得越來越紊亂,最終可能導致顛覆性重構。因此,在軟件開發之初就應該設計合理的、易擴展的軟件框架。大型CFD軟件設計應著重考慮幾方面特性:

(1)多學科耦合模擬應用的靈活性和可擴展性。真實流動往往是多學科耦合問題,如多相流動、氣動彈性、氣動聲學、氣動/電磁、氣動/結構/運動學等,都是典型的多學科耦合問題。大型CFD軟件架構的靈活性體現在:除了滿足N-S(Navier-Stokes)方程求解外,還要兼顧其他學科控制方程耦合求解的需求;可擴展性體現為:耦合求解時,必須保證能耦合并行計算,并具有良好的并行性。

(2)具備適合團隊開發的、構件化的高可復用性。NNW工程的CFD軟件功能復雜,參研人員多,對于數據結構、并行模式、幾何網格等底層數據,和網格轉換、并行分區、壁面距離計算、數學算法等工具,應構件化、模塊化,通過高內聚、低耦合提高復用性,以盡可能提高軟件精益化水平。

(3)大規模并行計算的可擴展性。受功耗的限制,以后的高性能計算機勢必越來越“綠色”,只能以提高計算核數的方式來提高計算性能,因此CFD軟件框架必須具備高并行可擴展性。

在滿足上述原則的前提下,綜合考慮當前軟件技術的發展現狀,采用C++語言,以面向對象的思想,設計開發了軟件框架。核心思想是數據抽象、繼承和綁定。通過數據抽象使接口和實現分離,達到構件化、模塊化、高內聚、低耦合的設計目的;通過繼承和綁定,實現忽略特化各種對象的統一調用。

3 體系結構設計

3.1 整體組成

CFD軟件體系結構定義了在給定環境下,數據結構、網格幾何、數值算法、并行模式等要素間的層次、約束、調用與邏輯關系的設計決策。圖1是風雷軟件整體組成情況,從底層到頂層主要包括:

(1)數據結構與并行支撐層,定義了網格幾何、流程、參數的數據結構,支持基于COI(Coprocessor Offload Infrastructure)/SCIF(Symmetric Communications InterFace) 數據傳輸的MPI/OpenMP混合并行的數據通信機制。

(2)編程框架API(Application Programming Interface),將CFD軟件中所用的數值算法(如空間離散格式、梯度算法、限制器等)、數據結構、邊界條件、并行通信接口、工具類(Toolkit)等,抽象封裝為高內聚的類庫,這些類高度獨立、模塊化,開發者通過調用對象的公有接口,快速形成不同學科的求解器Solver。

(3)求解器(Solver)。包含流體求解的N-S方程求解器、湍流求解器以及其他學科物理模型求解器。這些求解器均為Solver基類的派生。

(4)網格(Mesh)。包含與CFD求解相關的網格操作,如六自由度運動與網格變形、網格自適應、重疊網格裝配等。

(5)可視化(View)。包含后置可視化相關操作,如輸出到各類可視化軟件接口、虛擬可視化(VR)、并行可視化等。

(6)三方庫(3rdparty)。可集成第三方庫,如CGNS(CFD General Notation System)標準庫、網格分區Metis/ParMetis庫、分別基于同構/異構架構優化的數學庫等。

(7)文檔。包括開發手冊、理論手冊、用戶手冊、開發環境使用說明等技術手冊。

(8)知識庫(Tutorials)。集成對編程框架API中常用類模塊和工具的調用實例,既可作為單元測試,也可作為二次開發指導用例。

(9)界面系統。提供基于本地計算的GUI(Graphical User Interface)界面、適用于遠程集群(如超算中心)的Web界面云平臺。

編程框架、并行計算、求解器和網格是CFD軟件的核心,下文將重點介紹。

Figure 1 Composites of PHengLEI圖1 風雷軟件組成

3.2 面向CFD開發的編程框架

在空氣動力數值模擬系統中,由于涉及到多學科、多物理模型方程的求解,整個系統將由若干個求解器(Solver)構成。這些求解器之間在很大程度上有大量的共用部件、基礎部件,例如網格幾何前置處理、并行計算、計算結果后處理、通量格式、限制器、隱式計算方法、湍流模型、轉捩模型等。如果每個求解器都單獨開發,不僅重復性功能多、效率低下、接口混亂,而且沒有統一規范標準,不易于維護,難以統一集成于一個平臺上。

因此,有必要將不同的求解器之間的最大的共性部分提取出來,將這些共性部分以編程框架的形式固化,以類庫的形式為其他求解器提供“公共基礎”。CFD編程框架是模板化的代碼,可以幫助完成許多基礎和細節工作,其他開發者只需將精力投入到系統的邏輯設計和特定算法的研發之中,而不必再考慮底層,可以大大提高開發效率。同時,使用統一的框架,使得整個軟件體系具有良好的結構和擴展性。編程框架也可以不斷升級,在不影響上層應用的情況下提高性能(如異構并行算法的改進),系統中所有的CFD應用都可以同時得到框架升級帶來的好處。

當前,在科學計算領域,有多個國內外知名的軟件框架,但在計算空氣動力學領域還沒有比較成熟的專門編程框架。在OpenFOAM、Moose等編程框架中,一般將微分導數項抽象為與數學公式類似的形式(如“fvm::ddt”“fvm::div”分別代表對時間微分算子、散度算子),這種模式有2個問題:(1)復雜物理方程在隱式處理時難以線化,工程應用能力弱;(2)與計算空氣動力學領域中常用的“通量”形式的使用習慣不符合。在目前國內尚無專門面向空氣動力模擬的CFD軟件框架的情況下,迫切需結合計算空氣動力學學科特點,設計能同時滿足任意網格類型的超大規模通用CFD軟件編程框架。

對于提供二次開發接口的軟件框架庫來說,采用分層結構是一種較好的選擇,有2個優點:(1)通過對體系結構分層封裝,用戶僅通過頂層的API接口,就能完成CFD的軟件開發,從而將用戶不關心的底層數據封裝,如并行、網格;(2)將整個框架分層后,各層之間僅通過定義好的接口交換數據,因此各層內部的模塊可以任意重構,而不會影響到全局,有利于采用敏捷實踐的方法升級軟件框架。圖2是設計的CFD編程框架PHengLEI-API的層次結構,主要包括:

(1)內核底層。控制參數、數據結構、第三方庫、并行通信等基礎模塊被抽象為類庫,供上層調用。該層模塊可根據計算機硬件特點優化、適配,從而使開發者與硬件隔離。如在設計的并行框架中,將同構/異構通信隔離至底層,開發者調用接口完全一樣。

(2)數值算法層。主要抽象計算流體力學中常用的數值算法,如通量格式、限制器、梯度、邊界條件、文件IO等模塊;還為開發者提供工具類,如日志工具、時間統計等。

(3)功能層。主要是將上層的模塊抽象為API接口。

(4)應用層。按照給定的多重網格控制流(下文介紹),集成編程框架模塊開發求解器。

Figure 2 Hierarchical structure of programming framework PHengLEI-API圖2 編程框架PHengLEI-API 模塊及分層結構

CFD開發者調用編程框架開發求解器的主要過程包括:

(1)引用PHengLEI編程框架API頭文件“PHengLEI.h”,執行初始化操作。

(2)創建網格幾何類,指定網格文件名并讀入網格。

(3)設置計算所需的參數,如方程模型、通量格式、求解器等。

(4)各進程根據給定的參數創建求解器,并加載到網格塊上。

(5)迭代求解方程。

(6)求解結束,調用退出接口。

3.3 幾何計算域(Zone)與求解器(Solver)

在并行計算、多學科模擬計算過程中,全局計算域通常被分解到不同的計算區域進行,例如計算域被劃分為子域后,被分配到不同的進程、執行不同的物理過程模擬。PHengLEI中,將幾何計算域(Zone)與求解器(Solver)作為數值模擬的基礎。

整個CFD計算域(Flow Field)分為2層(如圖3所示):第1層是Region分區;第2層是Zone分區。整個計算域被分為多個Region,每個Region被進一步分為多個Zone子分區。Region/Zone 2層分區分別對應1級分區和2級分區,通過遞歸并行分區方法得到[16]。圖3是圓柱繞流算例(圖中曲線是流線),整個圓柱計算域被分為上下2個Region分區,每個Region分區被分為3個Zone子分區。Zone是框架的核心,負責存儲網格、加載求解器、存儲流場變量和參數數據庫。

Figure 3 Geometric computational field of Region/Zone圖3 幾何計算域Region/Zone

圖4是計算區域Zone分區、網格與求解器間的關系。Zone中存儲直接用于CFD計算的網格Grid,Grid既可以是結構網格也可以是非結構網格,含有點坐標、單元-點、單元-面、鄰居連接等信息。根據計算任務,在每個Zone上分別加載求解器Solver,每個Zone上的Solver可以相同也可以不同,如對于結構/非結構混合計算而言,可以在不同的Zone上加載結構或非結構求解器。4.1節中的不同類型的數據結構也存儲于Zone上。

Figure 4 Relationship among zone, grid and solver圖4 計算區域、網格與求解器間的關系

CFD不同求解器間既有差異又有共性,將共性提取出來抽象為求解器基類,從基類派生出具有差異化的其他求解器子類。基類Solver存儲了求解器的共性成員和接口,如Solver編號、標識、初始化等;由基類Solver派生出CFD求解器類(CFDSolver),其中定義了CFD求解器的共性成員和接口,如計算網格、空間離散、時間推進、邊界條件處理等純虛函數接口。CFD中的求解器主要包括N-S方程求解器、湍流方程求解器、DG(Discontinuous Galerkin)求解器、MHD (Magneto Hydro Dynamics)求解器等,這些求解器既有共同點,又有不同點,在基類CFDSolver中已經定義了共有成員和功能,由此派生出對應的子類:N-S方程求解器類、湍流方程求解器類、DG求解器類、MHD求解器類等。上述不同的求解器可以基于結構/非結構/混合網格求解,因此不同的求解器又可以派生出基于不同網格的求解器類。例如,由N-S方程求解器派生出基于結構網格解算的N-S方程求解器(NSSolverStruct)和基于非結構網格解算的N-S方程求解器(NSSolverUnstruct)。圖5是求解器的繼承關系圖。一些非典型CFD求解器,例如DSMC求解器、Boltzmann求解器,可直接從Solver基類派生。

Figure 5 Inheritance relationship of solvers圖5 求解器(Solver)繼承關系

按照圖4定義的方式,將不同的求解器子類加載到計算區域Zone上,實際計算過程中調用Solver/CFDSolver對象的虛函數,動態綁定到真實求解器接口,通過多態性滿足多學科耦合計算需求。

3.4 結構/非結構耦合計算方法設計

網格類型無關性是大型CFD軟件框架設計的出發點之一,因此PHengLEI框架既能同時適應于結構網格、非結構網格,還能實現結構/非結構網格下的求解器耦合計算。結構/非結構2種求解器可獨立運行:當使用結構網格時調用結構求解器,使用非結構網格時調用非結構求解器。也能進行結構、非結構求解器的同步耦合計算:當計算域中同時有結構、非結構網格時,分別在其上運行結構、非結構求解器。

結構/非結構耦合計算的關鍵技術是2種網格類型交界面的數據通信。在2種網格內部分別調用結構/非結構求解器計算,2種網格間的交界面形成各自求解器的邊界條件,將這種邊界條件抽象為InterFace(交界面)類。在結構網格和非結構網格之間,通過交界面建立一一對應的面映射關系,計算模板相應擴展:對于結構求解器(如圖6a所示),在內場單元i處將另一側的非結構網格體心值視為其虛擬單元(i+1);對于非結構求解器(如圖6b所示),在內場單元le處將另一側的結構網格體心值視為其虛擬單元(re)。對于結構求解器,往往需要在邊界處拓寬虛擬單元模板,除了i+1點外,還需要i+2,…,i+n點信息,此時可將與非結構網格相鄰的若干層結構網格視為非結構網格,建立所需要的虛擬點信息。

結構/非結構網格交界面InterFace的信息交換方式與并行信息交換方式相同(3.6節)。

Figure 6 Stencil of structured/unstructured coupled solver圖6 結構/非結構混合求解器模板

3.5 基于多重網格MG(Multi-Grid)的流程控制

面向工程應用的大型CFD軟件需考慮加速收斂技術,多重網格技術是其中一種成熟的方法。CFD軟件的核心是各類求解器,本文設計了一種適用于任意求解器的并行多重網格控制流程(如圖7所示):程序啟動后,先讀入網格、控制參數等輸入信息,然后根據計算任務,將對應的各類求解器加載到計算區域Zone, 利用“迭代控制器”Controller依次初始化每個Zone上的所有求解器,并進入多重網格V/W循環迭代求解流程。這里,“迭代控制器”被設計為一種統一管理Zone/Solver的代理,例如,在Zone_i上加載了N-S求解器、SA(Spalart-Allmaras)求解器,一個迭代步內,先進行N-S方程求解,此時綁定Zone_i/NS求解器并計算,完成后,綁定Zone_i/SA求解器并計算。

Figure 7 Control workflow of multi-grid圖7 多重網格控制流程

求解器開始迭代計算后,在每次迭代內部,通過迭代控制器控制多重網格流程,多重網格循環中的每個接口在Solver基類中被抽象為純虛函數,由于每個具體的物理模型求解器都繼承自Solver基類,因此這些求解器子類都受迭代控制器管理,并進入統一的多重網格循環,在具體執行插值算子、限制算子、迭代松弛(Relaxation)等數值算法時,通過動態綁定執行真正求解器的接口。

3.6 并行計算框架

國內外已經有不少并行計算框架,如OpenFOAM、Moose、JASMIN/JAUMIN/JCOGIN,這些框架都是單獨針對結構網格或者非結構網格開發的,難以做到并行通信對網格類型的無關性。目前在CFD工程應用中,結構網格和非結構網格在不同應用領域都有各自的優勢。如果對于結構、非結構網格分別采用不同的并行計算框架,那么同樣的一套計算方法將難以適應不同的網格類型,且維護成本高。面向工業應用的CFD軟件是作為氣動數據生產的“數值風洞”,軟件的工程實用性、團隊開發能力是必須滿足的基本要求,要求代碼將并行隔離至底層,同時保持代碼的可擴展性、穩定性,以及對各種網格類型的適應性。

PHengLEI并行框架詳細介紹見文獻[16],這里只簡述。設計原則是:(1)將并行數據交換隔離至底層,不管是同構并行還是異構并行,CFD領域專家編程與并行無關;(2)在同一個框架上,兼容結構/非結構任意網格類型CFD并行計算。

為滿足第1條原則,PHengLEI將物理模型求解器開發與并行計算隔離,使得求解器開發者只需關心數值算法,而無需關心與計算機硬件環境密切相關的并行模式。圖8是設計的一種并行計算分層結構,由上至下分別是:并行API接口層、交界面數據層、數據底層(DataContainer)、MPI(Message Passing Interface)通信層。物理求解器開發者無須深厚的并行編程基礎,通過調用頭文件和靜動態庫,只需編寫串行程序,通過調用并行API接口通信變量,就能自動完成并行求解器開發。

Figure 8 Hierarchical structure of parallel computing圖8 并行分層結構示意圖

為了滿足第2條原則,使并行通信模式兼容結構/非結構求解器,圖9設計了底層數據(即網格塊交界面數據)通信模型[16],整個數據通信包括3個過程:數據壓縮→MPI通信→數據解壓。在這種數據交換模式中,將任意類型網格塊的交界面數據按照接口標準壓縮到數據容器DataContainer中(見第4節),不同進程間只進行“數據容器”底層數據的并行通信,將數據結構隔離在并行通信的底層,從而實現了任意類型網格的并行計算兼容性。

Figure 9 Communication model of underlying data圖9 底層數據通信模型

PHengLEI軟件中設計了2種異構并行方案:

(1) 基于“天河-2A”系統CPU+Matrix協處理器的MPI/OpenMP粗粒度異構并行(如圖10所示)。根據“CPU+Matrix協處理器”的硬件架構,通信分2層進行:第1層是MPI通信,即CPU核之間或計算結點之間、基于網格1級分區交界面信息的MPI通信;第2層是OpenMP并行,即計算核心間、基于網格2級子分區的粗粒度Fork-Join并行,CPU和協處理器間采用COI/SCIF進行數據傳輸、控制。這里,1級分區和2級分區分別對應上文中的Region和Zone。之所以對CPU/Matrix異構系統采用粗粒度并行,是為了在保證規模可擴展的前提下,盡可能減小編程難度,將異構并行隔離至底層,實現CFD專家編程與異構并行無關。

Figure 10 Hybrid parallel model based on CPU/Matrix圖10 CPU/Matrix協處理器異構并行架構

(2) 基于CPU+GPU的MPI/OpenACC細粒度異構并行(如圖11所示)。GPU每個計算核心存儲有限,不可能采用將Zone分配到線程的粗粒度并行模式,而是直接在GPU上對幾何體遍歷(圖11中的Element幾何體可以是點、面、單元),進行細粒度Fork-Join并行。為了減少CPU與GPU間的IO時間,迭代前,將計算過程中不變的幾何數據結構拷貝至顯存,在每步迭代中,僅將流場基本數據(密度、速度、壓力)從顯存拷貝出來。

Figure 11 Hybrid parallel model based on CPU/GPU圖11 CPU/GPU異構并行架構

4 數據結構設計

數據結構是大型CFD軟件的“靈魂”,數據流類似人體“血液”,對數據交換起著至關重要的作用。針對并行封裝、結構/非結構耦合計算的需要,本文設計了一種能存儲任意數據類型的數據容器DataContainer。

4.1 基本數據結構

在CFD軟件運行過程中,會涉及到各種各樣的數據讀取,數據來源主要包括:控制參數、流場變量、湍流變量、網格信息、邊界條件等。對于采用C++編程的CFD軟件,數據類型不僅有常用的整型數(int)、單精度數(float)、雙精度數(double)、字符串(string)等,還有標準庫中的各種容器,如vector、list、set、map等,除此之外,還有自定義的多種數據類型。要想實現種類繁多的數據讀寫和存儲,按照傳統的方式需要對每種類型設計1個接口,對于大型軟件來說無疑會帶來冗余,且由于封裝性不好,難以維護。

基本數據結構應滿足軟件的封裝性要求,即無論何種類型的數據,對外的接口必須唯一。如圖12所示,基本數據結構采用鏈表形式。鏈表是一種物理存儲單元上非連續、非順序的存儲結構,動態生成的每個Data數據元素(“節點”)間通過指針與前后節點連接。為此將控制參數、流場變量等數據抽象為Data節點,由關鍵字、值、類型和數據大小構成,具體應用為:

(1)關鍵字:即string類型的變量名。

(2)值,即存儲的變量指針,如迭代步數interation、馬赫數Mach、雷諾數Re等單變量指針;流場壓力、速度、溫度等數組地址。

(3)類型:整型、字符、浮點、布爾。

(4)大小:即數據維度。標量為1,數組為其長度。

Figure 12 Basic data structure of the linked list圖12 鏈表形式的基本數據結構

Figure 13 Design of DataContainer圖13 數據容器DataContainer設計

大型通用CFD軟件的一個重要基礎是能夠可靠、安全、高效地存取數據,數據流設計的合理性直接影響到軟件平臺設計的好壞和計算效率。實際上,圖12所示的數據鏈表被抽象為CFD軟件的“運行數據庫(Running Data Base)”。在CFD軟件運行過程中涉及到的所有數據均按照統一的規范存儲于“運行數據庫”之中,分別存儲為1個鏈表數據結構形式的數據庫。CFD軟件中用到的數據庫主要包括:

(1)計算控制參數數據庫。存儲迭代步數、計算狀態參數、數值方法等參數,由主進程從文件中讀入、解析后,分別發送至其他進程。

(2)流場變量數據庫。存儲密度、壓力、速度、溫度等流場數據,計算開始時各進程分別分配的內存,數據根據迭代過程隨時更新。

(3)幾何信息數據庫。主要包括網格的幾何信息,如網格點坐標、單元表面面積、單元體積、單元間或節點間的連接關系、并行網格分區間的對應關系等。

(4)邊界條件數據庫。對不同的每類物理邊界存儲參數(如物面、對稱面、遠場),分別構建不同數據庫,并將數據庫指針賦予每個邊界面。

對于頻繁存取的流場變量,非結構求解器采用多維數組(本質上是多維指針),結構求解器采用自定義的Fortran-style數組存儲。這些數組也通過首地址,以鏈表形式存儲于上述“運行數據庫”。

此外,幾何網格中涉及到的搜索查找操作,為提高其效率,采用ADT(Alternating Digital Tree)和哈希表數據結構。

4.2 數據容器

大規模并行CFD軟件中存在多種數據交換,比較典型的有以下幾種:多塊結構網格交界面數據交換、并行分區交界面數據MPI通信、結構/非結構混合網格交界面數據交換(3.4節)、重疊網格重疊區數據交換、CPU與協處理器數據交換(3.6節)。如果對每種數據交換都分別寫接口,則會極大地影響到軟件的可讀性、可擴展性和封裝度。為此,本文設計了一種數據容器DataContainer,以將上述幾種數據交換方式完全隔離至數據底層。

基本設計思想是將數據“標準化”,即:將整型、單/雙精度浮點型、字符串等任意類型的數據轉換為單字符數據,統一存儲至容器;對于標準化后的數據,通過統一的接口實現讀寫數據操作、MPI接收/發送、異構系統的CPU/協處理器數據交換等。數據容器DataContainer設計圖如圖13所示。

5 結束語

如何適應下一代E級計算機硬件,如何在同1個軟件上有機集成多物理模型,是PHengLEI軟件設計面臨的2個關鍵問題。國家數值風洞工程中,CFD軟件規模大、結構復雜、物理模型多,限于篇幅,無法詳細介紹,這其中,編程框架是團隊開發的基礎,計算域Zone/求解器Solver是軟件的核心,并行框架直接關系硬件適應能力,數據結構關系軟件可擴展性,本文從這幾個方面介紹了最新的PHengLEI設計輪廓,回答了上述2個問題。

要說明的是,大型軟件設計無法一蹴而就,在整體方案大體固定的情況下,要隨著開發需求的變更而局部敏捷微調。例如,本文的并行框架,一開始只考慮了MPI并行,隨著天河二號國產CPU/Matrix協處理器硬件需求的出現,重構了粗粒度異構并行框架,當考慮GPU加速后,又進一步重構了細粒度異構并行框架。未來的工作中,將采用“頂層設計+局部敏捷”的思路,持續更新軟件架構,為國家數值風洞其他系統提供通用CFD軟件。

致謝原空氣動力研究與發展中心赫新研究員、陳亮中副研究員等人在風雷軟件原型系統開發過程中做了開創性工作,國防科技大學計算機學院、廣州超算中心、中國科學院網絡中心等在軟件設計過程中提供了幫助,在此一并感謝。

猜你喜歡
結構設計
《形而上學》△卷的結構和位置
哲學評論(2021年2期)2021-08-22 01:53:34
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
論結構
中華詩詞(2019年7期)2019-11-25 01:43:04
新型平衡塊結構的應用
模具制造(2019年3期)2019-06-06 02:10:54
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
論《日出》的結構
創新治理結構促進中小企業持續成長
現代企業(2015年9期)2015-02-28 18:56:50
主站蜘蛛池模板: 风韵丰满熟妇啪啪区老熟熟女| 尤物特级无码毛片免费| 国产成人精品2021欧美日韩| 亚洲日韩欧美在线观看| 国产精品亚洲一区二区三区在线观看 | 国内精自线i品一区202| 成人另类稀缺在线观看| 亚洲三级片在线看| 亚洲黄色片免费看| 国产欧美在线视频免费| 中文字幕欧美成人免费| 国内精品伊人久久久久7777人| 国产欧美一区二区三区视频在线观看| 波多野结衣中文字幕久久| 成人一级黄色毛片| 精品国产网| 日本午夜影院| 毛片基地美国正在播放亚洲 | 久久久久人妻一区精品色奶水| 97国产精品视频自在拍| 22sihu国产精品视频影视资讯| 国产成人综合在线观看| 久久午夜夜伦鲁鲁片不卡| 四虎成人在线视频| 欧美国产综合色视频| 666精品国产精品亚洲| 欧美另类第一页| AV天堂资源福利在线观看| 国产区福利小视频在线观看尤物| 成年人国产网站| 精品无码一区二区三区电影| 久久精品丝袜高跟鞋| 浮力影院国产第一页| 亚洲色图另类| 72种姿势欧美久久久大黄蕉| 四虎免费视频网站| 午夜丁香婷婷| 亚洲综合第一区| 亚洲欧美日韩综合二区三区| 国产清纯在线一区二区WWW| 亚洲欧美日韩久久精品| 亚洲有码在线播放| 国产偷国产偷在线高清| 9久久伊人精品综合| 国产麻豆精品在线观看| 色综合日本| 小13箩利洗澡无码视频免费网站| 亚洲V日韩V无码一区二区| 一级毛片在线免费视频| 欧美亚洲一区二区三区在线| 国产免费人成视频网| 福利在线不卡一区| 粉嫩国产白浆在线观看| 婷婷99视频精品全部在线观看 | 中字无码av在线电影| 日韩福利视频导航| 亚洲午夜国产片在线观看| 亚洲日韩精品综合在线一区二区| 国产精品嫩草影院视频| 91亚洲国产视频| 九九视频免费看| 一本色道久久88| 午夜欧美理论2019理论| 久久人人妻人人爽人人卡片av| 欧美精品高清| 日韩精品无码免费一区二区三区 | 亚洲人成日本在线观看| 视频在线观看一区二区| 久久中文无码精品| 国产波多野结衣中文在线播放| 国产靠逼视频| 国产精品九九视频| 国产理论一区| 精品三级在线| 四虎永久在线精品国产免费| 国产丝袜丝视频在线观看| 成人福利在线免费观看| 四虎永久在线精品国产免费 | 国产理论最新国产精品视频| 一本一道波多野结衣av黑人在线| 九月婷婷亚洲综合在线| 在线无码九区|