openmpi
安装
编译下面的一个例子:hello.c
建立HPC集群主机之间的信任ssh通信
运行例子:
建立一个 hostfile
运行非mpi程序(任何程序)
参考帖子:
mpich2应用

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错了!!!