2012-02-23 50 views
3

當我們在羣集上使用命令say mpirun -np 4 a.out啓動MPI程序時,然後 MPI運行系統如何在CPU之間分配進程?由MPI運行系統分配的進程的物理位置

我的意思是,假設它在羣集中找到一個空閒的四核CPU,它會運行該CPU上的所有4個進程,還是會找到4個CPU並運行4個進程,每個CPU有1個進程?

這是否取決於MPI的特定實現?

而且應該由我具體的配置來打擾它MPI會選擇對我來說(4個流程上的一個CPU或4 CPU的每個CPU 1個過程)

回答

4

是的,它取決於MPI實現,並且是它事項。例如,如果您希望能夠爲每個MPI任務使用一個內存節點,並且您發現自己在單個節點上加載了4個任務,而其他任何內容都沒有,那麼您將遇到嚴重問題。同樣,如果您正在4個8核心節點上運行,並且每個運行8個OpenMP線程的4個mpi任務,那麼對於4個節點中的每個節點使用1個任務和8個線程,或者4個任務和32個線程在一個節點上,其他節點上沒有任何東西

x86型硬件上最常見的MPI實現是基於OpenMPI或MPICH2的。在進入下一個節點之前,OpenMPI將填充一個節點;你可以改變這種行爲,例如給它一個「--bynode」選項,它將在這裏分配一個任務到一個節點,下一個任務到下一個任務等等,並根據需要重新包裝到第一個節點。 (OpenMPI也有--bysocket和--bycore用於更好的控制,以及非常有用的--display-map選項,它可以準確顯示出發生了什麼情況)。

對於基於mpich2的MPI,可以給它一個「round robin」的-rr選項,它將在節點之間循環(例如,OpenMPI的--bynode行爲)。

在任何情況下,在Linux類系統,你總是可以運行「的mpirun -np 4主機名」作爲一個快速和骯髒的辦法,找出哪些主機您的mpirun命令將推出的進程。