唐 波,王勇獻
(國防科學技術大學計算機學院,湖南 長沙 410073)
計算流體力學CFD(Computational Fluid Dynamics)是一門利用計算機對流體的復雜流動規律進行數值模擬的學科。在CFD數值模擬中, 首先要把計算區域空間離散化為網格, 生成模擬計算過程中所需要的網格文件。網格主要分為結構網格和非結構網格, 本文主要關注結構網格。隨著科學技術的發展, CFD數值模擬精度要求越來越高, 網格規模越來越大, 要滿足這種需求, 唯一的可行手段就是發展大規模并行計算。
當采用結構網格時, 計算區域被離散為多個大小不等的網格區塊, 在模擬計算過程中, 這些區塊被分配到不同進程上進行流體流動規律的數值模擬。如何使得數值模擬過程中各個進程上任務負載平衡, 是提高并行CFD程序性能的關鍵技術之一。對于當前并行CFD數值模擬應用, 任務負載平衡問題已經變得越來越復雜, 隨著并行計算規模的加大, 進程間通信開銷的大小對并行性能的影響在加大; 網格塊數和進程數的不匹配, 網格塊的計算量與進程的計算能力不匹配, 使得傳統的分割或組合策略不能很好滿足負載平衡的需求; 隨著近年來異構并行機的出現, 不同類型處理器進程上的計算能力不一樣, 不同類型處理器進程間的通信能力不一樣, 使得傳統的負載平衡算法已不能滿足負載平衡要求。因此,有必要研究一種新的負載平衡算法來滿足當前的并行CFD任務負載平衡需求。
目前, 國際上已有很多并行CFD任務負載平衡軟件, 如MB-split; 也有多種負載平衡算法, 如Streng M等[1]和Ytterstrom A[2]提出的三種經典的負載平衡算法:遞歸對分法、貪婪負載平衡算法、增量貪婪負載平衡算法, Saule E提出的一種新的啟發式算法等[3]。國內也有相應的研究, 如張娟等人[4]提出的基于Block的遞歸二分對無向圖剖分算法, 鄭秋亞等人[5]提出的一種類似貪婪負載平衡算法的方法, 李桂波等人[6]提出的基于遺傳算法的任務負載平衡算法等。上述軟件和算法都只適應特定的任務分配情形, 不能很好地滿足當前并行CFD任務負載平衡的需求。
計算量與通信開銷是衡量大規模并行計算負載平衡的兩個重要因素, 它們都與具體的應用問題緊密相關。在典型的多區結構網格CFD應用中, 根據所采用的求解器類型的不同, 計算量跟離散網格單元呈不同的關系。例如, 在經典的顯式Runge-Kutta求解器及隱式LUSGS求解器中, 每個網格單元上執行的計算量大體相等, 各網格塊的計算量與網格塊中網格單元數成正比。本文重點關注這兩類求解器, 因此計算量可以簡化為網格單元數。

Figure1 Parallel computer architecture圖1 圖1 并行計算機體系結構
并行計算的通信開銷則依賴于高性能計算平臺的硬件體系結構及并行計算組織方式。當前的主流并行計算機的體系結構如圖1所示, 一臺并行計算機內有多個結節, 各個結節的配置一樣, 每個結節內可以包含多種類型的處理器, 每個處理器中可以創建多個進程。其中, 不同處理器類型進程的計算能力不一樣, 不同進程之間的通信開銷隨著進程所在處理器類型不一樣和是否在同一結節內而不同。如P1與P1、P1與P2、P2與P2之間的通信開銷隨著它們是否在同一結節內而不同。
因此,如何對進程間的通信開銷進行準確建模與度量將變得異常重要。在以往CFD任務負載平衡的研究中, 通常用通信量代替通信開銷, 當通信開銷與通信量二者不成正比時, 這種代替不能準確地反映進程間通信所占時間。經過測試和總結, 我們用式(1)的分段線性函數來刻畫進程間的通信開銷與通信量的關系:
C(x)=ax+b,x∈[x1,x2]
(1)
其中,x代表通信量(單位:KB),C(x)為x通信量下的通信開銷(單位:ms),a、b是與機器硬件相關的參數。
在并行CFD數值模擬計算中, 假定整個CFD流場區域由Nz個網格塊組成, 而高性能計算資源包含(圖1中)結節Nnode個, 每個結節內創建a1個P1類型進程, 創建a2個P2類型進程, 整個計算的總進程數為Np=Nnode×(a1+a2)。CFD任務負載平衡需要將Nz個網格塊分配到Np個進程上, 使得其達到任務負載平衡。下面建立其數學描述。
CFD任務負載平衡問題的數學描述:定義進程i上期望負載計算量為Wi, ave;每給定一種任務分配方式M,我們用Wi(M)表示進程i上的實際計算量,Ci(M)表示進程i與其余進程間的通信總開銷。定義進程i上的計算負載平衡因子gi(M)如式(2)所示,它刻畫了進程i上實際計算負載與期望計算負載間的相對偏差量。定義任務分配方案M下的最大通信開銷f(M)如式(3)所示, 它表示通信負載最大的進程上的通信開銷量:
(2)
(3)
本文的CFD任務負載平衡模型旨在尋找一個分配方案使得以下約束優化問題成立:
(1)目標函數:minf(M);
(2)約束條件:gi(M)=0,i∈{0, 1, 2, …,Np-1}。
其中,M為不同的分配方案。
在真實的并行CFD任務負載平衡應用中, 我們通常會遇到進程數遠大于網格塊數或者網格塊計算量大于進程所期望負載計算量的情況, 這時我們需要對網格塊進行分割,以滿足負載平衡的需求; 也會遇到進程數遠小于網格塊數的情況, 這時我們需要對網格塊進行組合映射,以達到各個進程上的負載平衡。為了適應各種應用情形, 本文提出的負載平衡算法分為三步:首先,通過一定原則對原始網格塊進行分割, 使其塊數大于進程數, 并使得體積最大網格塊的計算量不超過進程所期望負載計算量; 然后,對第一步分割后的網格塊進行組合分配, 這是一個NP完全問題, 本文采用遺傳算法來解決這一組合映射問題; 當經過前兩步處理仍存在計算負載不平衡的進程時, 則啟動第三步處理, 對所有這些進程上的計算量進行增減微調, 直至所有進程都達到負載平衡需求。下面對這三步進行詳細介紹。
對于給定的進程數目及原始網格分布狀態,可計算出每個進程上計算的平均網格量,以此為基準,當原始網格中存在體積超大的網格塊時,為了完成負載平衡,必須對這樣的網格塊進行分割。這時可實施以下的網格塊循環分割算法, 使每個網格塊的體積大小不超過單個進程的平均網格量,從而可使用第二步完成網格塊向進程上的組合映射。網格塊循環分割算法的核心是維護一個網格塊列表和一個進程列表,通過反復迭代,逐次完成網格塊的分割。
3.1.1 網格塊循環分割算法
輸入原始網格塊, 找出未標記體積最大網格塊, 記該網格塊為Zunsign, 其計算量為Nmax; 計算進程的集合, 找出未標記計算能力最大的進程, 如果所有進程都已標記則選出計算能力最小的進程, 記該進程為Pexpect, 其期望負載計算量記為Wexpect。算法如下:
1. while(存在Zunsign)
2. if(Nmax 3. 標記Zunsign和Pexpect; 4. else{ 5. 分割Zunsign, 標記計算量為Wexpect的子網格塊和Pexpect; 6. 其余子網格塊添加到原始網格未標記網格塊的序列中} 7. end if 8. end while 輸出適合向進程上映射的網格塊集合, 其表現在以下兩個方面:網格塊數大于進程數; 網格塊的計算量不超過進程所期望負載的計算量。 3.1.2 網格塊分割策略 CFD數值模擬中, 網格塊網格單元層數太少會對模擬計算的精度產生很大影響, 甚至導致計算結果不收斂。在并行CFD計算過程中, 對接邊界面積與通信量成正比。因此,在網格塊分割過程中要避免出現過“薄”的網格塊, 同時使得分割后子網格塊的表面積較小。為此我們提出了網格塊的多維分割方法來滿足這種需求。 本文多維分割方法分三種情況對網格塊進行不同維數的分割: (1)如果該網格塊的形狀接近正方體, 則對其進行三維分割, 分割過程如圖2所示。圖2中標記“r”的網格塊為分割所需的網格塊, 各子網格塊的大小不一樣, 為了方便畫圖, 此處子網格塊大小取為一樣。圖3和圖4作相同解釋。 Figure 2 Three-dimensional split example圖2 三維分割示例 (2)如果該網格塊的形狀為“扁平”狀, 則對其進行二維分割, 分割過程如圖3所示。 Figure 3 Two-dimensional split example圖3 二維分割示例 (3)如果該網格塊的形狀為“長條”狀, 則對其進行一維分割, 分割過程如圖4所示。 Figure 4 One-dimensional split example圖4 一維分割示例 上述多維分割算法, 本文稱為非智能多維分割算法。該算法在實際分割過程中, 容易產生過小的網格塊, 如所需子網格塊的大小和需分割父網格塊的大小相差不大, 這時對父網格塊進行三維分割, 將會產生體積很小的子網格塊。因此, 本文在非智能多維分割算法的基礎上, 提出了智能多維分割算法, 其過程如下: 輸入:待分割的最大網格塊, 其計算量為Nmax; 當前進程期望負載的計算量, 記為Wexpect。 輸出:分割所需的子網格塊和剩余的子網格塊。 1. if(Wexpect≤1/8*Nmax) 2. if(是否適合三維分割) 3. 三維分割; 4. else if(是否適合二維分割) 5. 二維分割; 6. else 一維分割; 7. end if 8. else if(Wexpect>1/8*Nmax&&Wexpect≤1/4*Nmax) 9. if(是否適合二維分割) 10. 二維分割; 室間隔缺損是兒科常見先天性心臟病,約20%,其中缺損口徑小、分流量少等癥狀較輕者一般臨床癥狀并不典型,癥狀嚴重者會出現呼吸窘迫和左心衰竭等癥狀,由于左心室與右心室存在壓差,左向右分流時可導致肺血多引發充血性心力衰竭、肺動脈高壓等癥狀,給患兒的生命安全帶來了極大的威脅[1-2]。研究表明,在室間隔缺損并發癥出現之前予以針對性的措施進行干預,是可以痊愈的,其中治療方式選擇至關重要[3-4]。本研究探討介入治療、外科手術在室間隔缺損患兒的應用價值,現報道如下。 11. else 一維分割; 12. end if 13. else if(Wexpect>1/4*Nmax) 14. 一維分割; 15. end if 兩種多維分割算法, 在相同的條件下分割網格塊的效果將在實驗部分給出。 網格塊向進程上的分配問題是一個NP完全問題, 隨著CFD數值模擬規模的擴大, 問題解的搜索空間急劇增加, 普通的搜索算法已不能滿足CFD任務分配的需求, 本文采用遺傳算法來解決該問題。 3.2.1 遺傳算法的基本流程 Figure 5 Flow chart of genetic algorithm圖5 遺傳算法流程圖 由于CFD任務分配問題的特殊性, 在應用遺傳算法解決該問題的過程中, 為了減小遺傳算法的搜索空間、提高遺傳算法的搜索能力、加快遺傳算法的收斂速度, 我們對遺傳算法的以下操作做了相應改進, 以適應CFD任務分配問題。 3.2.2 染色體編碼和種群初始化 在遺傳算法中, 一個染色體對應問題的一個解。常規遺傳算法的染色體編碼一般采用二進制編碼, 對于本文的任務分配問題是不適用的, 本文染色體x的編碼形式如式(4)所示: (4) 本文用隨機算法按照式(4)的編碼方式生成遺傳算法的初始種群。隨機生成的編碼,可能產生部分進程分配的網格塊為空的個體,稱為無效個體。對于這種情況,首先找出網格塊數為0的進程,然后從網格塊數最多的進程中隨機分出一個網格塊給此空進程,如果存在多個空進程,循環執行上述操作,直至空進程數為0。 3.2.3 選擇操作、交叉操作、變異操作 本文中選擇操作采用經典的輪盤賭方法和最佳個體保存方法;變異操作采用傳統的單點變異操作,采用3.2.2節中提到的方法處理變異操作過程中產生的無效個體。 為了避免因傳統交叉操作產生的無效個體,本文引用并改進了由Goldberg D E和Lingle R[7]于1985年提出的PMX操作,使其能夠滿足該問題的需求。例如,對于兩個父個體,隨機產生兩個位串交叉點“|”,位串交叉點之間的區域為交叉區域,如表1所示。首先交換父個體的兩個交叉區域,得到表1中的中間體;為了避免出現空進程,進行如下操作,中間體的交叉區域映射關系有: 2→1, 1→2, 4→3 根據映射關系,對M1中間體交叉區域外的部分進行映射交換。如第一對映射關系2→1。找出M1中間體交叉區域外的第一個2所在位置,使其變換為1,然后依次根據映射關系進行類似變換,最終得到M1的子個體如表1所示。同樣對M2中間體進行映射交換,可得最終的子個體。 Table 1 Crossover operation表1 交叉操作 3.2.4 適應度函數設計 我們采用帶懲罰函數[8]的適應度函數設計, 如式(5)所示: (5) 其中,M為分配方案(個體);F(M)為個體M下的適應度值;f(M)刻畫了個體M下進程間的最大通信開銷;g(M)=max(|gi(M)|), 刻畫了個體M下進程上負載平衡因子絕對值的最大值;φ為懲罰函數,r1為權重系數,r2為懲罰系數。 對于不考慮通信開銷的情形, 可令r1為0。 懲罰函數有很多確定方法, 為了擴大約束條件g(M)對適應度的影響, 我們設定: φ(g(M))=g2(M) (6) 對于懲罰系數r2, 取個體M下的最大通信開銷f(M)的值, 此時適應度函數為: (7) 其中r1為可調節的參數。當r1較大時, 為弱約束條件;當r1較小時, 為強約束條件。 經過3.2節處理后, 原始網格塊在空間上分為了Np個區域, 每個區域對應一個進程。如圖6所示,實心黑圈代表網格塊, 連線代表網格塊之間的相鄰關系, 網格塊數目為11; 虛線劃分的區域與進程對應, 進程數為3。由于3.2節中的最終網格塊分配方案是由帶懲罰函數的適應度函數選出的最優個體, 不一定能很好地滿足2.2節中提出的約束條件, 也就是各進程上的計算量不一定能達到負載平衡要求。對于沒有達到負載平衡的進程我們需要對其計算量進行二次優化, 使其達到計算量的負載平衡。 Figure 6 Grids partition example圖6 網格區域劃分示例 該算法主要分為三個步驟:(1) 當前分配方案, 若需要二次優化, 選出需要二次優化的進程P; (2) 從進程集合中找出合適的進程Psuit, 使其與P共同完成二次優化; (3) 從進程P中分離出所需的網格塊Zsuit分配給Psuit。下面分別描述上面三個步驟的細節: 第1步:在當前的分配方案中, 若進程最大的負載平衡因子大于所期望的值(此處取為0.05) , 則該進程P需要二次優化。 第2步: (1)列出在空間上與P相鄰的進程鏈表Plist,Plist中負載平衡因子最小的進程為Plmin; (2)if(Plmin的負載平衡因子< -0.05) Plmin→Psuit; (3)else 找出進程集合中負載平衡因子最小的進程Pmin,Pmin→Psuit; (4)end if 第3步: (1)定義對象為網格塊的鏈表Zlist; (2)if(P與Psuit相鄰) (3) 列出P中與Psuit有相鄰關系的網格塊, 添加給Zlist; (4)else列出P中的網格塊, 添加給Zlist; (5)end if (6)計算Psuit所需的計算量Nrequire; (7)if(Zlist中是否存在網格塊Zsuit的計算量N, 使得Nrequire*(1-0.05) (8)Zsuit分配給Psuit, 從P中刪除Zsuit; (9)else 使用分割策略分割Zlist中計算量最大的網格塊, 分割出所需的網格塊Zsuit; (10)Zsuit分配給Psuit, 分割剩余的子網格塊分配給P, 從P中刪除被分割的網格塊; (11)end if 本文的數值實驗平臺為國家超級計算長沙中心的高性能計算系統, 每個結節由兩個6核的Intel Xeon X5670的CPU組成, 主頻為2.93 GHz, 雙精度浮點峰值性能是70.32 GFlops。 在上述平臺上, 經過簡單的實驗測試與數據擬合, 結果表明,通信開銷與通信量之間均呈分段線性函數關系, 但結節內與結節間兩種情形有區別, 結果如表2所示。 Table 2 Test results of communication overhead model表2 通信開銷模型測試結果 4.2.1 同構平臺的測試 在4.1節通信開銷模型測試的基礎上, 不同的CFD算例在不同的策略下進行負載平衡性能測試。根據網格塊數與進程數目的相對多少,將算例分為兩種情形, 下文分別稱為“情形A”和“情形B”。共測試了四種負載平衡策略, 分別用a、b、c、d表示(如圖7和8所示), 其中a為文獻[1]提到的貪婪負載平衡算法,b、c、d為本文算法。a采用一維分割策略,b采用智能多維分割策略,c采用非智能多維分割策略,d采用一維分割策略。我們將以文獻中的策略a作為性能比較的基準。 情形A:網格塊數較少情形的測試結果(原始網格包含4個網格塊, 12億網格單元)。 Figure 7 Test results of load balancing in less zone number圖7 網格塊數較少情形的負載平衡測試結果 測試結果顯示, 在此種情況下, 本文算法b、c、d與傳統算法a在性能比較上具有很大的優勢。隨著進程數的增加, 算法a的最大負載平衡因子絕對值急劇增加, 顯現出了各進程上計算任務的不平衡性, 這遠離了負載平衡的約束條件, 因此本文算法優于傳統算法。此處a方法64進程后的情況不予測試。對于b與c和d之間的比較, 就進程間最大通信開銷、對接邊界面數目、對接邊界面面積三方面而言,b具有明顯優勢。實驗結果表明了b算法能夠使得分割負載后網格塊之間的對接邊界面數較少, 對接邊界面面積最少, 從而在各進程計算任務負載平衡的基礎上使得進程間的最大通信開銷最小。綜上所述, 在網格塊數較少的情況下,b為綜合性能最好的方法。 情形B:網格塊數較多情形的測試結果(原始網格包含265個網格塊, 15 000 000網格單元)。 Figure 8 Test results of load balancing in more zone number圖8 網格塊數較多情形的負載平衡測試結果 測試結果顯示, 在此種情況下, 本文算法b、c、d與傳統算法a在性能比較上具有很大的優勢。在進程數較少的時候, 都能滿足最大負載平衡因子絕對值小于所期望的值(本文為0.05), 但在進程間通信開銷方面本文算法具有明顯優勢。隨著進程數的增加, 算法a的最大負載平衡因子絕對值急劇增加, 顯現出了各進程上計算任務的不平衡性, 這遠離了負載平衡的約束條件, 綜合分析本文算法優于傳統算法。當進程數小于網格塊數或相差不大時, 進程間最大通信開銷、對接邊界面數目、對接邊界面面積三方面而言,b較c具有明顯優勢,b與d相當。隨著進程數的繼續增加, 當進程數遠遠大于網格塊數時, 情形變換為A, 如圖7所示, 此時在進程間最大通信開銷、對接邊界面數目、對接邊界面面積三方面的比較中,b具有明顯優勢。實驗結果表明,在網格塊數較多的情況下,b能使空間上具有相鄰關系的網格塊分配到同一進程上, 從而減少各進程間的通信開銷。在此種情況下,算法b能使分割后網格中的對接邊界面數較少, 對接邊界面面積最小, 從而在各進程上計算任務負載平衡的基礎上使得進程間的最大通信開銷最小。綜上所述, 在網格塊數較多的情況下, 算法b是綜合性能最好的方法。 4.2.2 異構平臺的測試 如圖1所示并行計算機, 假設一個結節包含第一類處理器兩個, 第二類處理器一個, 每個處理器中創建兩個進程。假設第二類處理器的計算能力是第一類的兩倍, 本文異構平臺下只作理論測試, 所以進程間的通信開銷簡化為4.1節測試的通信開銷模型。測試結果如圖9所示,a′、b′、c′為本文算法,a′采用智能多維分割策略,b′采用非智能多維分割策略,c′采用一維分割策略(原始網格包含4個網格塊, 12億網格單元)。結果顯示, 本文算法a′、b′、c′同樣適合異構平臺, 對于a′與b′和c′之間的比較, 就最大負載平衡因子絕對值來說, 三種方法都能滿足要求;就進程間最大通信開銷、對接邊界面數目、對接邊界面面積三方面而言,a′具有明顯優勢。綜上所述, 本文算法同樣適合異構平臺, 采用智能多維分割方法的本文算法a′為綜合性能最好的方法。 Figure 9 Test results of load balancing on heterogeneous platform圖9 異構平臺上的負載平衡測試結果 在4.1節中提到的實驗平臺下進行CFD實例負載平衡測試, 其中網格包含八個等體積的網格塊, 800萬網格單元, 采用消息傳遞并行編程模型分別在20、40、60個CPU進程上進行并行模擬。表3列出了4.2.1節中四種方法的實際負載平衡性能(時間為CFD并行計算迭代20步所用的時間)。 對所列四種負載平衡指標對CFD并行測試結果進行分析, 結果表明:隨著進程數的增加, 方法b在并行CFD任務負載平衡方面具有最優的穩定效果, 并且具有很好的可擴展性(例如,進程上的最大計算時間隨著進程數的增加線性減少), 而且進程間最大通信開銷也是四種方法中最小的。 綜合上述所有測試, 智能多維分割算法能夠使負載平衡后的最大負載平衡因子滿足要求, 使得進程間的最大通信開銷最小, 對接邊界面數目較小, 對接邊界面面積最小。 Table 3 Test result of load balancing of CFD application example表3 CFD實例負載平衡測試結果 本文提出的大規模CFD多區結構網格任務負載平衡算法, 集網格塊的分割、網格塊的組合、進程上計算量的優化于一體, 解決了傳統負載平衡方法適應性不強的問題。該算法既適應同構計算平臺, 也適應新型異構平臺; 既適應網格塊較少的情形, 也適應網格塊較多的情形。該算法對通信開銷方面做了很好的度量。實驗結果表明, 在適當的分割策略下本文算法能夠取得很好的并行CFD任務負載平衡性能, 減少并行CFD程序的運行時間。隨著并行規模的擴大, 本文所用遺傳算法的搜索空間會逐漸增加, 負載平衡處理時間會漸漸加大, 后續工作將研究如何對大規模負載平衡問題中的遺傳算法進行加速。 [1] Streng M. Load balancing for computational fluid dynamics calculationsp[M]∥High Performance Computing in Fluid Dynamics Netherlands,Netherlands:Springer, 1996. [2] Ytterstr?m A. A tool for partitioning structured multiblock meshes for parallel computational mechanics[J]. International Journal of High Performance Computing Applications, 1997, 11(4):336-343. [3] Saule E, Bas E ?, Catalyürek I V. Load-balancing spatially located computations using rectangular partitions[J]. Journal of Parallel and Distributed Computing,2012,70(10):1201-1214. [4] Zhang Juan,Lu Lin-sheng.Automatic partition algorithm based on multi-region and multi-code problem[J]. Computer Engineering, 2010, 36(9):73-76.(in Chinese) [5] Zhang Qiu-ya, Liu San-yang, Zuo Da-hai. CFD parallel computing and load balancing research using multi-block structured grids[J]. Chinese Journal of Engineering Mathematics, 2010, 27(2):219-224.(in Chinese) [6] Li Gui-bo, Yang Guo-wei. Study on parallel computation and load balance strategy based on multiblock structured grid[J]. Journal of Astronautics, 2011, 32(6):1224-1230.(in Chinese) [7] Goldberg D E, Lingle R.Alleles, Loci, and the travelling salesman problem[C]∥Proc of International Conference on Genetic Algorithms and Their Applications, 1985:154-159. [8] Chen Guo-liang, Wang Xu-fa, Zhuang Zhen-quan, et al. Genetic algorithm and its application[M]. Beijing:People’s Posts and Telecommunications Publishing House, 2001.(in Chinese) 附中文參考文獻: [4] 張娟, 陸林生.基于多區域多代碼問題的自動分塊算法[J].計算機工程, 2010, 36(9):73-76. [5] 鄭秋亞, 劉三陽, 左大海. 多塊結構化網格CFD并行計算和負載平衡研究[J].工程數學學報, 2010, 27(2):219-224. [6] 李桂波, 楊國偉. 基于多塊結構網格的并行計算及負載平衡研究[J]. 宇航學報, 2011, 32(6):1224-1230. [8] 陳國良, 王煦法, 莊鎮泉, 等. 遺傳算法及其應用[M]. 北京:人民郵電出版社, 2001.


3.2 網格塊向進程上的分配算法



3.3 進程上計算量二次優化算法

4 數值實驗結果
4.1 通信模型中參數的確定

4.2 CFD算例負載平衡性能測試



4.3 CFD實例負載平衡測試

5 結束語