http://hi.baidu.com/evevil/item/578c89ea990324225a2d6438
我是Linux超級新手,文中難免有錯誤的地方,望指正和多多包容
硬件情況:2臺主機
主機1: 主機名:node1 IP:192.168.19.165 操作系統:CentOS 5.2 用戶:root 密碼:root
主機2: 主機名:node2 IP:192.168.19.169 操作系統:CentOS 5.2 用戶:root 密碼:root
(這裏的兩臺主機上的用戶名和密碼設置成一樣的,好像不一樣的話將會影響之後mpi程序的執行)
爲了省事,以下操作都是以root用戶進行的
1、===================配置host文件=========================
在node1和node2上
#vi /etc/hosts 打開hosts文件,修改如下:
127.0.0.1 localhost.localdomain localhost
192.168.19.165 node1
192.168.19.169 node2
(注意127.0.0.1 localhost.localdomain localhost一定不能缺,否則將可能導致之後 mpiexec運行出錯)
2、====================設置SSH信任連接====================
在node1上生成SSH祕鑰對.
#ssh-keygen -t rsa yes,一路回車
#cat /root/.ssh/id_rsa.pub | [email protected] "cat - >> root/.ssh/authorized_keys" 將密鑰等信息拷貝至node2中,該過程需要輸入node2上root用戶的密碼
#ssh root@node2 登陸node2
#exit
#ssh root@node2 第二次登陸node2,無需再輸入密碼了
#exit
#ssh root@node1 登陸自身一次
在node2上執行同樣的操作,只不過目標換成node1了
#ssh-keygen -t rsa yes,一路回車
#cat /root/.ssh/id_rsa.pub | [email protected] "cat - >> root/.ssh/authorized_keys"
#ssh root@node1
#exit
#ssh root@node1
#exit
#ssh root@node2
(以上使用的ssh,如果系統安裝的ssh2,設置過程將與上有所不同)
3、=====================安裝mpich2======================
在node1和node2上:
#tar -zxvf mpich2-1.0.1.tar.gz 解壓縮
#cd mpich2-1.0.1
#./configure --prefix==安裝路徑,指定安裝路徑時可以使用#./configure --prefix=???,不帶參數時默認安裝路徑爲/usr/loacl,我用的是默認安裝路徑
#make
#make install 安裝完成
(爲了避免未知錯誤,兩臺機器的mpich2安裝位置最好一樣)
設置環境變量:
#cd /etc/
#vi profile 編輯profile文件
添加 PATH="$PATH:/usr/local/bin"
#source profile
#which mpd 測試環境變量
創建並修改/etc/mpd.conf文件
#vi /etc/mpd.conf
內容爲
secretword=myword
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf (設置文件讀取權限和修改時間,這兩步好像不能省)
創建主機名稱集合文件/root/mpd.hosts
#vi /root/mpd.hosts
文件內容如下:
node1
node2
4、=====================簡單的測試=========================
在node1上
#mpd & 啓動
#mpdboot -n 2 -f mpd.hosts 啓動2臺機器(啓動的機器數不能超過集羣中的主機數,這裏只有2臺)
#mpdtrace 觀看啓動機器
#mpiexec -n 4 /usr/local/examples/cpi number爲使用的進程數,運行mpi自帶的測試程序(不一定存在)
#mpdallexit 退出
mpi程序的編譯
#mpicc example.cc -o example C語言源代碼
或#mpic++ example.cc -o example C++語言源代碼
或#mpif77 example.f -o example Fortran語言源代碼
編譯後可以執行:
#mpdboot -n 2 -f mpd.hosts
#scp /tmp/example root@node2:/tmp/example (/tmp/爲剛纔編譯的程序所在文件夾)
(需要並行運算的程序在兩臺主機上所存放的路徑必須相同,文件名也必須相同我這裏都存放在/tmp/文件夾下)
#mpiexec -n 4/tmp/example
5、===================在Eclipse中開發MPI程序=================
在新建的工程上點右鍵 選擇Properties
添加include路徑,我的mpich2安裝在/usr/local
添加lib庫路徑,添加mpich,mpichxx,pthread 注:這是在linux下,與windows環境下需添加的庫不同
OK,Eclipse加MPI開發環境配置完成
參考資料:
SSH設置:
http://stevenz.blog.hexun.com/15798089_d.html
MPICH2配置:
http://www.xxlinux.com/linux/article/accidence/install/20070514/8413.html
MPI與Eclipse:
http://blog.csdn.net/cleverysm/archive/2007/06/06/1640290.aspx
一些MPI錯誤解決方法:
http://blog.csdn.net/xiaxiazls/archive/2009/09/08/4530423.aspx
在PBS任務管理系統中使用MPICH
只要將
sort -u $PBS_NODEFILE > mpd.hosts mpdboot -f mpd.hosts -n $NNODES --rsh=/usr/bin/rsh mpiexec -machinefile $PBS_NODEFILE -np $NNODES $RUNJOB -i $WORK_AREA/$PREFILE/$PREFILE.in -dim 2 -n 100000 -d 10000 > $PREFILE.log mpdallexit寫入pbs的script中就可以了實際上包含了一個完整使用集羣的過程,只不過是提交給了任務管理系統PBS而已。