• 沒有找到結果。

第三章 數值計算模式

3-5、LUSGS 法:

將上述帶入(3-56)得

3-6、非反射性邊界(Non-reflecting Boundary):

如上述在 3-4 節中,經過 Preconditioning 法修正的 Navier-Stokes 方程式如下:

p 0

根據 Poinsot 等人[25]所提出的 LODI(The local one-dimensional invsicid relations)將(3-57) 簡化成在出口邊界的一維 Navier-Stokes 方程式:

1

展開(3-84)可得壓力與垂直進出口的速度方程式

3-7、座標轉換:

由上式可得在 physical domain 和 computational domain 之間存在一個轉換矩陣,稱為 Jacobian 轉換矩陣,三維的轉換矩陣如下:

其中

接著考慮統御方程式:

並且加入 Preconditioning 法修正方程式增加方程式之收斂性。

圖 3-3 座標轉換示意圖

1

圖 3-4(c)完整的漸縮管道示意圖 y x

zz y x

3-8、CUDA 平行化方法:

本研究包含複雜的三維物理模型以及龐大的計算量,因而在模擬過程相當耗時,以 往多使用平行化方法做為提高計算效能的方式,最常見的兩種平行化方法為MPI (Message Passing Interface)及OpenMP (Open Multi-Processing),前者將程式平行化於並聯 的多台電腦上運行,但效率隨電腦數增加而下降,且價格與佔用空間亦十分龐大。後者

(Compute Unified Device Architecture)是由英偉達(Nvidia)公司所推出的整合技術,此 技術是一種將GPU作為數據平行化運算設備的統一處理架構。利用顯示卡內GPU具有數 式語言撰寫順序執行,部分在 CPU 上運算的為串行處理程式(serial code),部分藉自行 開發在 CUDA 平台上的連結編輯程式,在 GPU 上執行的為核心函數(kernel)。每個 kernel 的執行單位為網格(Grid),網格中包含數個區塊(Block),區塊又由數個執行緒(Thread) 所組成,當 kernel 開始執行時,這些執行緒將分別由顯示卡內的流處理器(Stream Processor,SP)來作平行化運算。待此 kernel 結束,則接續下一個串行函數(serial code) 進行在 CPU 運算,依此順序執行至整個程式完成運算工作。

在 CUDA 平台上作平行化運算,為得到最佳化的計算效能,在記憶體的配置方式

上極為重要。由於在 GPU 的計算單元中,包含數個多流處理器(Stream Multiprocessor,

SM),而每個 SM 中又包含 8 個單(或雙)精確浮點數的流處理器(Stream Processor,SP),

在同 SM 中的 8 個 SP 共用同一共享記憶體(shared memory)。如前述在 CUDA 平台中的

述的一維陣列轉回原來的三維陣列,並輸出結果。

為了使程式能編譯一次後即能在擁有不同流處理器(Stream Processor,SP)數的顯示 卡上執行,CUDA 平台使用了單指令多執行緒(Single Instruction, Multiple Thread,SMIT) 的執行模型,將計算任務轉成可以大量平行執行的執行緒。實際運行時,kernel 是以區 塊為單位執行的,而網格則是用以表示一系列可以被平行執行的區塊的集合。一個 kernel 會在一個網格中運行,但由於同一區塊中的所有執行緒在同一時刻執行的指令並不一定 相同,故在 CUDA 平台中,同一區塊中的所有執行緒皆能存取共享記憶體(shared memory),因此可以互通交換數據並能快速進行同步的動作,不同區塊中的執行緒則否,

在此模式的設定下雖然能同時執行同一指令的執行緒數量有限,但通過共享記憶體和執 行緒柵欄同步(Barrier)的方式,確保同一區塊內的執行緒不僅能獨立平行運算,在需要 資料同步時,亦能待全部執行緒皆執行到相同指令時,程式才繼續往下運行,而不致計 算錯誤。

圖 3-5 CUDA 平台架構圖

相關文件