openmpi
安装
./configure ; make ; make install
查看 openmpi 安装信息:
# ompi_info
编译下面的一个例子:hello.c
#include <mpi.h> int main(int argc, char *argv[]) { int nproc; int iproc; char proc_name[MPI_MAX_PROCESSOR_NAME]; int nameLength; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&nproc); MPI_Comm_rank(MPI_COMM_WORLD,&iproc); MPI_Get_processor_name(proc_name,&nameLength); printf("Hello World, Iam host %s with rank %d of %d\n", proc_name,iproc,nproc); MPI_Finalize(); return 0; }
编译上面的例子:
mpicc -o hello hello.c
建立HPC集群主机之间的信任ssh通信
使用这个shell脚本:setup.ssh_auth 。我在 dev3-140(4核)和 dev3-249(8核)上试验。在两台机器执行同样的命令建立ssh信任访问:
./setup.ssh_auth dev3-140 ./setup.ssh_auth dev3-249
运行例子:
# mpirun -H dev3-140,dev3-249 -np 8 hello Hello World, Iam host dev3-249.turbo with rank 1 of 8 Hello World, Iam host dev3-249.turbo with rank 3 of 8 Hello World, Iam host dev3-249.turbo with rank 5 of 8 Hello World, Iam host dev3-249.turbo with rank 7 of 8 Hello World, Iam host dev3-140 with rank 0 of 8 Hello World, Iam host dev3-140 with rank 2 of 8 Hello World, Iam host dev3-140 with rank 4 of 8 Hello World, Iam host dev3-140 with rank 6 of 8
建立一个 hostfile
# cat hostfile dev3-140 slots=4 <== dev3-140是4核 ,可以再加参数: max-slots=4 dev3-249 slots=8 <== dev3-249是8核,也可以有max-slots
使用hostfile信息运行:
# mpirun -hostfile hostfile -np 8 hello Hello World, Iam host dev3-249.turbo with rank 4 of 8 Hello World, Iam host dev3-249.turbo with rank 5 of 8 Hello World, Iam host dev3-249.turbo with rank 6 of 8 Hello World, Iam host dev3-249.turbo with rank 7 of 8 Hello World, Iam host dev3-140 with rank 0 of 8 Hello World, Iam host dev3-140 with rank 1 of 8 Hello World, Iam host dev3-140 with rank 2 of 8 Hello World, Iam host dev3-140 with rank 3 of 8
通常执行的顺序和网络,机器性能有关。如果我们运行的并行进程数 少或等于4,一般就之用140一个机器运行了,应为我们的hostfile里 面140排在最前面。
运行非mpi程序(任何程序)
[root@dev3-249 1.2.5-gcc]# mpirun -hostfile include/hostfile -np 9 hostname dev3-249.turbo dev3-249.turbo dev3-249.turbo dev3-140 dev3-249.turbo dev3-249.turbo dev3-140 dev3-140 dev3-140
例如可以在当前目录写个shell脚本:
[root@dev3-249 1.2.5-gcc]# cat a-test-mpi.sh #!/bin/sh echo "$0现在运行在$(hostname)上,时间$(date|cut -d' ' -f5)" [root@dev3-249 1.2.5-gcc]# pwd /usr/lib/openmpi/1.2.5-gcc [root@dev3-249 1.2.5-gcc]# scp a-test-mpi.sh dev3-140:/usr/lib/openmpi/1.2.5-gcc a-test-mpi.sh 100% 79 0.1KB/s 00:00 [root@dev3-249 1.2.5-gcc]# mpirun -hostfile include/hostfile -np 9 bash a-test-mpi.sh a-test-mpi.sh现在运行在dev3-249.turbo上,时间17:40:17 a-test-mpi.sh现在运行在dev3-249.turbo上,时间17:40:17 a-test-mpi.sh现在运行在dev3-249.turbo上,时间17:40:17 a-test-mpi.sh现在运行在dev3-249.turbo上,时间17:40:17 a-test-mpi.sh现在运行在dev3-249.turbo上,时间17:40:17 a-test-mpi.sh现在运行在dev3-140上,时间17:41:06 a-test-mpi.sh现在运行在dev3-140上,时间17:41:06 a-test-mpi.sh现在运行在dev3-140上,时间17:41:06 a-test-mpi.sh现在运行在dev3-140上,时间17:41:06
其中 a-test-mpi.sh 必须是同样的目录,或者在各个系统的 PATH 变量能搜索到。
参考帖子:
mpich2应用
在这里先贴一下mpich2的安装过程:
说明:本系统测试环境为Redhat9.0完全安装,并且以获得mpich2-1.0.1.tar.gz软件包。假设你的mpich2- 1.0.1.tar.gz软件包已经下载到/root/目录下。以root用户登录。要求会使用vi文本编辑器修改文件。下面以四台pc为例。
准备工作:设置IP,更改主机名为node01,node02,node03,node04.
一、创建SSH信任连接(在root目录下)
1、更改/etc/hosts文件
#vi /etc/hosts 打开hosts文件,更改如下:
127.0.0.1 localhost.localdomain localhost
node01的IP scc-m
node01的IP node01
node02的IP node02
node03的IP node03
node04的IP node04
2、在node01生成SSH秘钥对.
#ssh-keygen -t rsa 一路回车即可
产生.ssh文件,
#ls -a 查看是否有.ssh文件夹
3、进入.ssh目录
#cd .ssh
4、生成authorized_keys文件
#cp id_rsa.pub authorized_keys
5、退出到root目录
#cd ..
6、建立本身的信任连接
#ssh node01 按提示输入yes(三个字母要打全)
7、设置node02(node02的root目录下)
#ssh-keygen -t rsa 生成.ssh文件夹
#scp node01的IP:/root/.ssh/* /root/.ssh 拷贝node01上的.ssh文件夹覆盖本地的
#scp node01的IP:/etc/hosts /etc/hosts 拷贝node01上的hosts文件覆盖本地的
#ssh node01 提示处输入yes回车
设置node03,node04的方法与node02相同
8、确认四台机器的信任连接已建立
对每个节点执行:
#ssh node01
#ssh node02
#ssh node03
#ssh node04
在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)
二、安装MPICH2(在节点root目录下)
1、解压缩
#tar -zxvf mpich2-1.0.1.tar.gz
或者 #gunzip -c mpich2-1.0.1.tar.gz|tar xf mpich2-1.0.1.tar
2、创建安装目录
#mkdir /usr/MPICH-instsll
3、进入mpich2解压目录
#cd mpich2-1.0.1
4、设置安装目录
#./configure --prefix=/usr/MPICH-install
5、编译
#make
6、安装
#make install
7、退出到root目录
#cd ..
8、通过编辑.bashrc文件修改环境变量
#vi .bashrc
修改后的.bashrc文件如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PATH="$PATH:/usr/MPICH-install/bin" 新增加的
#Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
9、测试环境变量设置
#which mpd
#which mpicc
#which mpiexec
#which mpirun
10、修改/etc/mpd.conf文件,内容为secretword=myword
#vi /etc/mpd.conf
设置文件读取权限和修改时间
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf
11、创建主机名称集合文件/root/mpd.hosts
#vi mpd.hosts
文件内容如下:
node01
node02
node03
node04
三、测试
1、本地测试
#mpd & 启动
#mpdtrace 观看启动机器
#mpdallexit 退出
2、通过mpd.hosts运行集群系统
#mpdboot -n number -f mpd.hosts number为要起动的机器个数
#mpdtrace
#mpdallexit
3、测试运行MPICH的例子程序
#mpdboot -n 4 -f mpd.hosts 启动4台机器
#mpiexec -n number /usr/MPICH-install/examples/cpi number为使用的进程数
#mpdallexit
4、如果测试不能通过,请进行第四步
四、问题解决
1、通过mpdcheck获得一写帮助信息
#mpdcheck -pc
2、查错
#mpdcheck -l
3、通过mpd.hosts文件查错
#mpdcheck -f mpd.hosts 如果无错误
#mpdcheck -f mpd.hosts -ssh
4、如果上述无错误,可略过此步
对任意两台机器进行查错
m1: #mpdcheck -s 输出主机名host和端口port
m2: #mpdcheck -c host port
注意:以上四步都是在没有运行mpd的情况下进行的
5、mpd查错
m1: #mpd -e & 返回使用的端口
m2: #mpd -h m1 -p echoed_port_m1 &
以上测试通过,集群系统就建成了。
上面的文章来源于:http://bbs.zol.com.cn/index20050904/index_217_2479_2.shtml
###
按照上面的操作到 三_3、测试运行MPICH的例子程序 时遇到问题
#mpdboot -n 2 -f mpd.hosts 启动2台机器
shell界面:
[root@IBM-Linux root]# mpdboot -n 2 -f mpd.hosts
mpdboot_IBM-Linux.localdomain (handle_mpd_output 359): failed to ping mpd on
SnortSvr.localdomain; recvd output={}
[1]+ Done mpd
有谁知道为什丰X错了!!!
