mpi4py安裝手冊

shen <shen129[at]gmail.com>

2010/1/19 v1.1

 

下載套件

目前mpi4py的官網在

http://mpi4py.scipy.org/

Project則是Hostgoogle.code

http://code.google.com/p/mpi4py/

這個是下載網址

http://mpi4py.googlecode.com/files/mpi4py-1.2.tar.gz

 

安裝與設定

1. 先確定已經安裝了Python 2.6的套件,預設的安裝目錄應該是C:Python26,檢查看看 %PATH% 這個環境變數內,有沒有引入PythonHome目錄,若沒有,則到控制台內去新增。

 

2. 安裝MPICH2Windows套件,可以到MPICH2的官網下載

http://www.mcs.anl.gov/research/projects/mpich2/

 

smpdWindows7 / Vista安裝注意事項

smpd的全名是Process manager service for MPICH2 applications,是MPICH2用來管應用程式在個節點上通訊的程式。

 

Windows7/Vista上安裝時,原本套件內的wmpiregister.exe並無法順利進行金鑰加密,需要手動進行金鑰的處理。

 

以管理員的身分開啟一個CMD視窗,然後執行下列指令[1]

 

smpd -phrase behappy -install

其中,behappy是預設的金鑰,每個區網內要當節點的主機,都必須設定相同的金鑰才能運作,後面的 -install 是讓smpd程序能在windows的背景服務,根據smpd命令內的說明:

 

"smpd -install" will install and start the smpd in Windows service mode.

This must be done by a user with administrator privileges and then all

users can launch processes with mpiexec.

 

檢查services服務,找到MPICH2 Process Manager, Argonne National Lab這個服務名稱,檢查看看是否在執行中的狀態。

 

接著,修改防火牆的設定,讓smpd程序可通過防火牆,如下圖:(Windows7)

 

開啟wmpiconfig.exe來驗證上述程序是否成功,若成功會看到下列結果:

 

(需要上述Hosts的地方皆為綠色才行)

 

補充說明一下我的執行環境:兩台PC皆為雙核心,一台的Hostname Enzo (Windows 7)另外一台是Peugeot (Windows 2003 Enterprise Edition)Enzo是用來執行指令的環境。

 

再來,將安裝MPICH2的目錄加到系統的%PATH%變數內,如下圖:

 

3. 安裝Microsoft Visual Studio 2008 (我這邊使用的是Team EditionExpress Edition可在微軟的網站上下載,是免費的)等等進行套件的編譯時需使用vc++的編譯程式。

 

4. 解開剛剛下載的mpi4py-1.2.tar.gzC:¥目錄下,接著開啟記事本修改mpi.cfg,找到# MPICH2 example這個段落,修改如下:

[mpich2]

mpi_dir              = C:/Program Files/MPICH2

mpicc                = %(mpi_dir)/bin/mpiexec

mpicxx               = %(mpi_dir)/bin/mpiexec

 

5. 進行編譯,開啟一個CMD視窗,切換到剛剛解開的目錄下,接著執行[3]

 

python setup.py build -mpi=mpich2

 

再來則是一串的編譯過程。編譯好了會產生一個build的資料夾如下

接著,使用下列指令進行安裝

 

python setup.py install

 

程式會安裝到Python的套件預設目錄C:Python26Libsite-packagesmpi4py內。

 

測試

mpi4py的目錄下,有個demo目錄,我們用裡面所附的helloworld.py進行測試,輸入下列指令:

 

mpiexec -n 5 python demo/helloworld.py

 

其中,-n 是指定Process的數量,後面的數字2是執行個數(1開始),後面的python helloworld.py則是mpi4py的指令[2]。如果順利,會見到下列結果:

 

再來,透過指定Host的方式來測試兩台機器間是否能通訊

 

mpiexec -hosts 2 Enzo Peugeot 19 python ¥¥192.168.0.1¥mpi¥helloworld.py

 

其中 -host 之後所接的2是表示host list的數目,此處呼叫了兩台機器進行運算,之後承接hostlist則是分別輸入hosts名稱,此處EnzoPeugeot。再來19表示執行的Process數目(此處是0開始計算,所以19其實是使用20Process來執行),之後python \192.168.0.1mpihelloworld.py

(需要將可執行的程式,放在所有節點都能存取 / 寫入的位置,否則會產生錯誤此處是將檔案放在192.168.0.1這台主機的資料夾內)

 

以下是執行結果

 

遠端主機會產生相對應的process如下圖:

 

此外,根據mpiexec Command的說明,-n -host屬性兩者互斥[4]還有,呼叫mpiexec並不需要管理者的權限。

 

至此,已經能用mpi4py搭配Python語言進行平行程式的開發了。

 

Reference

[1] 詳見討論串

http://groups.google.com/group/fds-smv/msg/48380e577059f7d8?pli=1

[2] 詳見MPI for Python使用手冊 p.p. 11

[3] 詳見MPI for Python使用手冊 p.p. 10

[4] 線上版的mpiexec參數說明

http://linux.die.net/man/1/mpiexec


give 發表在 痞客邦 留言(0) 人氣()