在超算機群上運行 OpenFOAM
有超算賬號前,我覺得雲計算簡直就是 CFD 的未來,試用過超算後,發現這種需求10年前就被超算解決了。要論上手難度,各種平台的排序大概是:Windows 10 Subsystem for Linux > Linux物理機 > Windows+Linux 虛擬機 > 雲計算伺服器 > 超算。
舉個例子好了,以下是 Compute Canada 官方支持的 OpenFOAM 版本,只需一條命令就可以配置好計算環境
? ~ module avail openfoam
--------------------------------- Global Aliases ---------------------------------
allinea-cpu -> ddt-cpu arm-forge-cpu -> ddt-cpu
allinea-gpu -> ddt-gpu arm-forge-gpu -> ddt-gpu
--------------------------- MPI-dependent avx2 modules ---------------------------
openfoam/v1712 (phys) openfoam/5.0 (phys)
openfoam/3.0.1 (phys) openfoam/6 (phys)
openfoam/4.1 (phys) openfoam/6.20180813 (L,phys,D)
Where:
L: Module is loaded
phys: Physics libraries/apps / Logiciels de physique
D: Default Module
Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching
any of the "keys".
此外,超算平台上的軟體是非常全的,幾乎不需要自己安裝。比如我用 zsh 和 vim,只需兩條命令就可以配置好 oh-my-zsh 和 spf-13-vim,完全不用擔心沒有 root 許可權。htop 這種必備的系統監視工具自然也裝好了,題圖就是我在登錄節點上運行 htop 的結果,這個節點使用雙路 Intel E5-2683 v4,一共32個核心。
大多數超算使用 slurm 進行作業調度,這一系統也是非常簡潔乾淨,很多情況下底層的東西都是透明的,可以像使用個人電腦那樣,直接用 mpirun 調用幾百幾千個核心。看一個例子
!/bin/sh
#SBATCH --time=00:01:00
#SBATCH --mem=2M
#SBATCH --job-name=serialTest
#SBATCH --output=job-%J.out
#SBATCH --account=def-wenming
echo "`pwd`"
cd $FOAM_RUN/damBreak || exit 1 # Run from this directory
blockMesh
setFields
interFoam
這就是一個基本的 bash 腳本,用來調用 blockMesh、setFields 和 interFoam。文件中 #SBATCH 開頭的是作業調度系統 sbatch 的參數。這是一個串列程序,非常小,所以內存只申請了 2M。加拿大的超算對小用戶非常友好,如果是天河二號的話,這樣的串列程序非常浪費資源,因為天河二號上的作業會獨佔整個節點,哪怕這個作業是串列的。
近幾天我將在 GitHub 更新更多的 sbatch 腳本和 OpenFOAM 測試算例,phresher/OpenFOAM_Tutorials_Plus,敬請 watch 和 star。
推薦閱讀:
TAG:openfoam | 天河二號 | 計算流體力學(CFD) |
