以下是我几天来调试能成功跑通CPI例子的方法。
一、安装mpich2(版本是mpich2-1.3.2p1)(值得注意的是以下 2-8 步骤集群中各节点均需做相同工作)
1.下载tar包,解压缩,解压缩后路径 * /* /* /*/mpich2-1.3.2p1
2.新建安装目录mpich(我是建立在/usr/local/下),新建临时buid目录(位置任意,但建议不要在
解压缩后目录下);
3.cd buid 运行 dir_to_mpich2-1.3.2p1/configure --prefix=/usr/local/mpich --with-pm=mpd 2>&1 | tee c.txt
意思是安装到/usr/loacal/mpich路径下。使用mpd,而不是默认的hydra。检查是否出错,看c.txt内报错信息,缺 什么装什么,或看configure选项,去掉不用检查项 ;
4.如果configure不出错,运行 make 2>&1 | tee m.txt 查看m.txt检查错误,错误排除请自行google;
5.如果make不出错,运行 make install 2>&1 | tee mi.txt 同样查看mi.txt检查错误;
6.运行 ls /usr/local/mpich/bin 看是否已经成功生成mpicc、mpiexec等可执行文件,若有,则说明安装成功。
7.为保证mpi运行路径相同,各节点要新建相同用户名用户,例如都新建用户flying。
8.切换至新建用户 su flying 修改环境变量,我用的是修改新建用户主目录下的 .bashrc ,在该文件最后一行追加
PATH=$PATH:/usr/local/mpich/bin
二、修改/etc/hosts
为了使各节点可以互访,需要在各节点上都修改该文件内容。打开该文件,添加节点,每节点单独占一行,内容为
节点IP 节点名(任意)
... ...
将所有节点填入该文件,保存;
三、配置ssh无密码访问文件
在主节点新建用户主目录下,运行ssh-keygen -t rsa1 一路回车。将生成 .ssh目录,将 .ssh目录下的
id_rsa.pub 拷贝重命名为authorized_keys,将authorized_keys文件拷贝到集群中各新建用户主目录下的 .ssh目
录下,这样,只需一次ssh访问输入密码,以后主节点访问各节点将不再需要输入密码;
四、配置mpd配置文件
在集群中各新建用户主目录下新建 .mpd.conf文件,在其中写入:MPD_SECRETWORD=abc
保存,修改 .mpd.conf文件权限为 600 (非常重要)。在主节点(只需该节点)上,希望以后运行mpi程序
目录(我用mpiExecDir目录,命名随意,但各节点该目录位置及命名必须一致)下新建mpd.conf文件,
将集群中各节点名字写入,每个名字占一行;主节点上该目录下运行 mpdcheck -f mpd.conf看是否能够成功,命令
没有任何返回即为成功;
五、建立节点名文件
在主节点(只需在该节点)mpi可执行文件目录mpiExecDir目录下新建hosts文件(名字任意),打开hosts文件,
将各节点填入,内容为节点名和核数节点,格式为
主机名:核数
... ...
每项单独占一行,保存,退出。
*****************************************************************************************************************************************************
至此安装配置完毕。
首先各节点各自编译mpi自带例子程序cpi。在mpiExecDir目录下运行 mpicc to/cpi.c/dir/cpi.c -o cpi
启动各节点mpd,只需在主节点上敲命令 mpdboot -n 节点数 -f mpd.conf
然后在mpiExecDir下运行 mpiexec -machinefile hosts -np 启动进程数(需要小于总核数) ./cpi
即可。