2018年3月5日 星期一

GROMACS mdrun平行處理與GPU加速

GROMACS執行分子模擬的程式叫做mdrun,要加速模擬速度除了平行處理(parallelization)還可以用GPU加速,官方的參考資料如下:

首先介紹在編譯程式的時候,可以開啟的加速選項
  1. SIMD support:不同的CPU會有一些SIMD (Simple Instruction Multiple Data) 的指令集可以使用,像是SSE2, SSE4.1, AVX, AVX2, AVX_512_KNL, IBM_VSX, Sparc64_HPC_ACE, ARM_NEON_ASIMD等等。通常讓CMake自動選擇就可以,但有些型號選擇最新的指令集效能卻會下降,編譯前請先參考此說明
  2. CUDA GPU acceleration:機器上若有裝Nvidia的顯示卡
  3. OpenCL GPU acceleration:機器上若有裝AMD的顯示卡或APU
  4. Linear algebra libraries:主要是BLAS與LAPACK函式庫。對於normal-mode analysis與covariance analysis會有加速的功能
  5. MPI support:讓mdrun可以透過網路在多台機器上面執行。這邊注意一點,GROMACS本身就內建thread-MPI,可在同台機器上面開多核心來跑;這段所謂的MPI則是指OpenMPI, MPICH等,用來讓mdrun跨多台機器跑,與thread-MPI無關

下面則是在執行mdrun的時候,可以開啟的加速選項。注意,下面許多加速的功能需要在上面編譯的時候就先設定好。這些mdrun指令的使用範例:
  • gmx mdrun
    讓GROMACS直接自動跑thread-MPI rank,也會自動分配工作到GPU上
  • gmx mdrun -nt 8
    開啟8個threads來跑,至於thread-MPI rank數目與OpenMP threads數目則由GROMACS自動決定
  • gmx mdrun -ntmpi 2 -ntomp 4
    總共會開啟2*4=8 threads在跑。也就是開了2個thread-MPI rank,而每個rank又用4個OpenMP threads。GROMACS會自動把每個rank上面的OpenMP threads都放在同一個CPU插槽上面跑。簡單理解就是
    • -ntmpi 就是機器上有幾個CPU插槽(socket)
    • -ntomp 數目代表每個CPU有幾個核心(core)
  • gmx mdrun -gpu_id 12
    讓mdrun使用兩張GPU來跑,其GPU ID分別是1與2。這個設定會要求兩個thread-MPI ranks(亦即-ntmpi 2)
  • gmx mdrun -ntmpi 4 -nb gpu -gputasks 1122
    讓mdrun開4個thread-MPI ranks,每個rank上面的non-bond計算丟給GPU。這邊有兩張GPU,4個thread-MPI ranks分別把工作丟到1, 1, 2, 2上面跑
  • gmx mdrun -nt 6 -pin on -pinoffset 0
    gmx mdrun -nt 6 -pin on -pinoffset 3

    一台六核心有hyper-threading的機器。兩個mdrun工作就會被丟到rank 0與rank 3上面去
  • mpirun -np 2 gmx_mpi mdrun
    使用外裝的MPI,像是OpenMPI或是MPICH等來分配工作。建議同一台機器上面不要這要開啟。mpirun這種是用來跨機器跑的時候才需要用到
_EOF_

沒有留言:

張貼留言