1、官网下载mpich
网址:http://packages.ubuntu.com/trusty/mpich(本人使用Ubuntu)
2、解压安装mpich3
tar -xvzf XXXX.tar.gz
cd mpi3
./configure --prefix=/home/mpi3
make && make install
3、配置
vim ~/.baserc
export MPI_ROOT=/home/mpich3
export PATH=$MPI_ROOT/bin:$PATH
export MANPATH=$MPI_ROOT/man:$MANPATH
4、测试hello.c
#include <mpi.h>
#include <stdio.h>
#include <math.h>
int main (int argc, char **argv)
{
int myid, numprocs;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
MPI_Get_processor_name (processor_name, &namelen);
fprintf (stderr, "Hello World! Process %d of %d on %s\n", myid, numprocs, processor_name);
MPI_Finalize ();
return 0;
}
5、编译:mpicc -o hello hello.c(如果c++使用mpicxx)
6、 MPI应用一个管理器来管理运行MPI程序,这个管理器就是mpd,但是在正式开始运行mpd前还需要一个基于安全考虑的配置文件.mpd.conf,这个文件是要放在运行程序的用户的home目录下,本例子中就是/home/mpi/.mpd.conf,而且这个文件只能由这个用户读写,创建文件的命令是,
cd $HOME
touch .mpd.conf
chmod 600 .mpd.conf
然后在.mpd.conf文件中(如果没有这个文件需要创建一个)写入这么一行,secretword=***,***可以是任意的值,如果配置集群的话,这个值在参与计算的计算机上必需完全一致。如果是root用户的话,这个文件应该是/etc/mpd.conf。
7、启动并行环境 mpdboot
第一次使用这个命令时,可能会出现错误,执行以下代码
cd ~
touch .mpd.conf //这是修改mpd配置文件的时间戳
chmod 600 .mpd.conf //这是修改配置文件的权限
运行程序: mpirun -np 4 ./hello
-np 是指用几个进程模拟运行,这里用4个
输出结果为: (下面结果每台机器可能都不一样,是正常的)
Hello World! Process 1 of 4 on jack-laptop
Hello World! Process 3 of 4 on jack-laptop
Hello World! Process 2 of 4 on jack-laptop
Hello World! Process 0 of 4 on jack-laptop
想停止并行运行环境
mpdcleanup
利用mpi进行矩阵计算
1、问题描述
矩阵乘法问题描述如下:
给定矩阵A和B,其中A是m*p大小矩阵,B是p*n大小的矩阵。求C = A*B。
求解这个问题最简单的算法是遍历A的行和B的列,求得C的相应元素,时间复杂度O(mnp),空间复杂度O(1)。
// 矩阵乘法的C++实现 for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ float temp = 0.0; for(int k=0; k<p; k++){ temp += A[i*p + k] * B[k*n + j]; } C[i*n + j] = temp; } }