mpi4py安裝手冊
shen shen129[at]gmail.com>
2010/1/19 v1.1
下載套件
目前mpi4py的官網在
而Project則是Host在google.code
http://code.google.com/p/mpi4py/
這個是下載網址
http://mpi4py.googlecode.com/files/mpi4py-1.2.tar.gz
安裝與設定
1. 先確定已經安裝了Python 2.6的套件,預設的安裝目錄應該是C:Python26,檢查看看 %PATH% 這個環境變數內,有沒有引入Python的Home目錄,若沒有,則到控制台內去新增。
2. 安裝MPICH2的Windows套件,可以到MPICH2的官網下載
http://www.mcs.anl.gov/research/projects/mpich2/
smpd在Windows7 / 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 Edition,Express Edition可在微軟的網站上下載,是免費的),等等進行套件的編譯時需使用vc++的編譯程式。
4. 解開剛剛下載的mpi4py-1.2.tar.gz到C:¥目錄下,接著開啟記事本修改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名稱,此處是Enzo和Peugeot。再來的19是表示執行的Process數目(此處是從0開始計算,所以19其實是使用了20個Process來執行),之後是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參數說明
留言列表