MPI编程环境配置与示例
MPI环境搭建

MPI 并行环境的搭建1、在计算机中,安装两个CentOS系统2、[root@node1 etc]# ifconfig #查看ip192.168.241.128[root@node2 etc]# ifconfig192.168.241.1293、互ping[root@node1 etc]# ping 192.168.241.129 #测试网络是否联通 [root@node2 etc]# ping 192.168.241.1284、修改/etc/hosts文件,在节点设置节点名称192.168.241.128 node1192.168.241.129 node2[root@node1 etc]# source /etc/hosts[root@node2 etc]# source /etc/hosts5、各个节点是否互通[root@node1 etc]# ping node2 #测试主机名修改是否成功[root@node2 etc]# ping node16、关闭iptables防火墙[root@node1 etc]# serviceiptables stop[root@node2 etc]# serviceiptables stop在各个节点设置iptables 防火墙开机关闭[root@node1 usr]# chkconfigiptables off #设置iptables开机关闭 [root@node2 usr]# chkconfigiptables off #设置iptables开机关闭7、在各个节点创建共享目录[root@node1 etc]#mkdir /usr/cluster[root@node2 etc]#mkdir /usr/cluster在node1上修改/usr/cluster为777[root@node1 etc]#chmod –R 777 /usr/cluster8、挂在nfs文件系统/etc/exports文件配置在node1(主节点)节点配置[root@node1 etc]# vi /etc/exportsusr/cluster 192.168.241.128(rw)/usr/cluster 192.168.241.129(rw)启动nfs服务在node1节点执行[root@node1 usr]# yum install nfs-utilsrpcbind #安装nfs[root@node1 usr]# service rpcbind start #启动rpc[root@node1 usr]# service nfs start #启动nfs服务[root@node1 usr]# chkconfigrpcbind on #设置rpcbind开机启动[root@node1 usr]# chkconfignfs on #设置nfs开机启动在node2节点执行[root@node2 usr]# yum install nfs-utilsrpcbind #安装nfs[root@node2 usr]# service rpcbind start #启动服务[root@node2 usr]# service nfs start #启动nfs服务[root@node2 usr]# chkconfigrpcbind on #设置rpcbind开机启动[root@node2 usr]# chkconfignfs on #设置nfs开机启动9、查看服务器已有的共享目录查看node2的共享目录[root@node2 usr]# showmount -e 192.168.241.129Export list for 192.168.241.129:/usr/cluster 192.168.241.129,192.168.241.128挂在共享目录node2的共享目录挂在node1[root@node1 etc]# mount -t nfs 192.168.241.129:/usr/cluster /usr/cluster设置文件系统启动时自动挂载在node2的/etc/fstab文件下添加下边代码[root@node2 etc]# vi /etc/fstab192.168.241.128:/usr/cluster /usr/cluster nfsdefaults 0 010、配置ssh实现MPI节点的无密码登陆在各个节点上操作[root@node1 ~]# cd ~/.ssh/[root@node1 .ssh]# ssh-keygen -t rsa #一直按回车键会产生一个私钥id_rsa 和公钥id_rsa.pub[root@node2 ~]# cd ~/.ssh/[root@node2 .ssh]# ssh-keygen -t rsa #一直按回车键会产生一个私钥id_rsa 和公钥id_rsa.pub将各个节点的公钥合并到authorized_keys文件[root@node1 .ssh]# cat id_rsa.pub >>authorized_keys[root@node1 .ssh]# ssh root@node2 cat /root/.ssh/id_rsa.pub >>authorized_keys将authorized_keys拷贝到各个节点[root@node1 .ssh]# scpauthorized_keys root@node2:/root/.ssh/[root@node1 .ssh]# scpknown_hosts root@node2:/root/.ssh/无密钥测试[root@node1 .ssh]# ssh node2 #node1登陆到node2[root@node2 .ssh]# ssh node1 #node2登陆到node111、安装MPICH2(在各个节点都需要操作)将下载的mpich-3.2.tar.gz文件拷贝到/usr/src目录下[root@node2 src]# tar -zxvf mpich-3.2.tar.gz #解压文件[root@node2 src]# cd mpich-3.2配置安装路径最新版本mpich3的进程管理默认使用hydra[root@node2 mpich-3.2]# yum -y install gcc-c++ #安装c++编译器[root@node2 mpich-3.2]# mkdir /usr/cluster/mpich3 #创建mpich3目录[root@node2 mpich-3.2]# ./configure --prefix=/usr/cluster/mpich3/ --with-pm=hydra --disable-fortran #配置安装路径[root@node2 mpich-3.2]# make #编译[root@node2 mpich-3.2]# make install #安装在node1里执行[root@node1 ~]# vi .bashrc #添加mpich3的路径export PATH=$PATH:/usr/cluster/mpich3/bin[root@node1 ~]# source .bashrc #配置生效在node2里执行[root@node2 ~]# vi .bashrc #添加mpich3的路径export PATH=$PATH:/usr/cluster/mpich3/bin检测是否配置成功[root@node2 ~]# which mpicc #显示mpicc的路径[root@node2 ~]# which mpiexec #显示mpiexec的路径11、配置hostfile文件在当前用户主目录下建立并编辑配置文件hostfile。
MPI编程环境安装与测试

一、实验目的1. 熟悉Linux平台的使用。
2. 掌握MPICH的安装、配置以及测试方法。
二、实验条件Linux平台。
三、实验原理及相关知识1. 参阅相关Linux操作系统的配置;2. 参阅MPICH安装与配置。
四、实验步骤一、运行平台搭建1. 准备工作(1) PC机或虚拟机;(2) 设置机器IP,更改主机名。
例如:主机名node1,node2,IP地址分别为192.168.0.1,192.168.0.2 执行:#service network restart#service iptables stop2. 创建SSH信任连接(在root目录下):(1) 更改/etc/hosts文件#vi /etc/hosts增加如下内容:主机IP地址主机名例如:192.168.0.1 node1192.168.0.2 node2(2)在node1上生成SSH密钥对#ssh-keygen –t rsa(3) 进入.ssh目录#cd .ssh(4) 生成authorized_keys文件#cp id_rsa.pub authorized_keys(5) 退出root目录#cd ..(6) 建立本地的信任连接#ssh node1(7) 设置node2(node2的root目录下)#ssh-keygen –t rsa#scp node1的IP:/root/.ssh/* /root/.ssh # scp node1的IP:/etc/hosts /etc/hosts #ssh node1(8) 确认信任连接(每台机器上执行)#ssh node1#ssh node2二、安装MPICH2(在节点root目录下)1. 下载MPICH并解压;下载:/pub/mpi/解压:tar -zxvf mpich2-1.0.4.pl.tar.gz 2. 创建安装目录#mkdir /root/MPICH23. 进入/root/mpich2-1.0.4.pl#cd /root/ mpich2-1.0.4.pl4. 设置安装目录#./configure --prefix=/root/ MPICH25. 编译#make6. 安装#make install7. 修改/etc/mpd.conf#vi /etc/mpd.conf内容:MPD_SECRETWORD=mypasswd#chmod 600 /etc/mpd.conf8.创建主机名称集合文件/root/mpd.hosts#vi /root/mpd.hosts内容:node1node2三、测试1.修改/root/.bashrc# vi /root/.bashrc增加:PATH=”$PATH:/root/MPICH2/bin”#source /root/.bashrc2. 本地测试#mpd &#mpdtrace#mpdallexit3. 运行集群系统#mpdboot -n number –f /root/mpd.hosts number为要起动的机器个数#mpdtrace#mpdallexit。
c++ mpi程序案例

c++ mpi程序案例MPI(Message Passing Interface,消息传递接口)是一种用于并行计算的通信协议和编程模型,它允许在多个处理器上同时运行程序。
MPI程序可以在多个计算节点(可能是分布式或共享内存系统)上运行,它通过消息传递来进行通信和同步。
下面我们来介绍一个使用C++编写的简单MPI程序案例,该程序实现了一个简单的向量加法操作。
在该程序中,我们将通过MPI的消息传递机制来实现向量的分割和分发,以及节点间的通信和同步。
首先,我们需要包含`mpi.h`头文件,该头文件包含了MPI所需的声明和定义。
然后,我们需要初始化MPI环境,并获取当前节点的进程ID和总进程数。
```cpp#include <mpi.h>#include <iostream>int main(int argc, char** argv) {MPI_Init(&argc, &argv);int rank, size;MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);// ...MPI_Finalize();return 0;}```接下来,我们需要定义向量的大小和向量元素,并进行分割和分发。
在本例中,我们假设向量大小为`N`,并将向量分割成与节点数相等的子向量。
同时,我们还需要定义一个接收缓冲区,用于存储节点计算得到的结果。
```cppint N = 1000;int* vector = new int[N];int* subvector = new int[N / size];int* result = new int[N / size];// Initialize vector elementsif (rank == 0) {for (int i = 0; i < N; ++i) {vector[i] = i;}}// Scatter vector to all nodesMPI_Scatter(vector, N / size, MPI_INT, subvector, N / size, MPI_INT, 0, MPI_COMM_WORLD);```在上述代码中,节点0(根节点)首先初始化了整个向量,并通过`MPI_Scatter`函数将分割后的子向量分发给其他节点。
visual studio fortran mpi用法 -回复

visual studio fortran mpi用法-回复首先,让我们来介绍一下Visual Studio和Fortran。
Visual Studio是一个集成开发环境(Integrated Development Environment, IDE),由Microsoft开发,用于建立和开发各种不同类型的应用程序。
Fortran则是一种高级编程语言,用于科学和工程计算。
Visual Studio对于Fortran的支持主要通过插件的形式来实现。
这个插件叫做Intel Visual Fortran,由Intel开发,可以使开发者在Visual Studio 中轻松编写、调试和优化Fortran代码。
首先,我们需要确保已经安装了Visual Studio和Intel Visual Fortran插件。
如果没有安装,请前往官方网站下载并按照说明进行安装。
安装完成后,打开Visual Studio,接下来我们将学习如何使用Visual Studio和Intel Visual Fortran来编写和运行MPI(Message Passing Interface)程序。
MPI是一种用于实现并行计算的库接口,用于在多个计算节点之间传递消息。
它可以在多个计算节点上同时运行程序,从而加快计算速度。
首先,创建一个新的MPI项目。
选择“文件”->“新建”->“项目”,在模板窗口中选择“Visual Fortran”->“MPI工程”,然后在“名称”文本框中输入项目名称。
接下来,配置MPI项目的属性。
右键单击项目名称,选择“属性”,在属性窗口中,找到“Fortran”选项卡,然后选择“常规”。
在“常规”选项卡下,将“Debug(调试)”模式的“命令参数”和“工作目录”设置为空。
这是为了方便在多个计算节点上运行程序时不需要手动输入命令参数。
然后,我们需要在Fortran源代码中定义MPI程序。
双击打开“main.f90”文件,在文件中添加必要的MPI库和变量定义。
mpi编程实例

mpi编程实例MPI(Message Passing Interface)是一种用于并行计算的标准通信协议。
MPI编程是一种分布式内存编程模型,用于在多台计算机上实现并行计算。
MPI编程可以利用多台计算机的处理能力,同时处理大量数据,从而加快程序运行速度。
下面将介绍一个简单的MPI编程实例。
实例描述:假设我们有一个长度为n的数组a,我们要对其进行求和操作,并将结果返回给主进程。
我们可以使用MPI来实现这个操作,具体步骤如下:1. 初始化MPI环境在程序开始时,需要初始化MPI环境。
这可以通过调用MPI_Init函数来实现。
该函数接受两个参数:argc和argv,它们是程序启动时传递给主函数的命令行参数。
如果没有命令行参数,则可以将它们设置为0和NULL。
2. 获取进程数量和当前进程号在MPI中,每个进程都有一个唯一的编号(rank)。
我们可以使用MPI_Comm_size函数获取当前运行的进程数量,并使用MPI_Comm_rank函数获取当前进程的rank值。
3. 初始化数组在本例中,我们需要初始化一个长度为n的数组a。
由于每个进程只能访问自己所拥有的部分数据,因此每个进程只需要初始化自己所拥有的部分即可。
4. 分发数据为了让每个进程都能够对整个数组进行求和操作,我们需要将数组分发给每个进程。
这可以通过调用MPI_Scatter函数来实现。
该函数接受四个参数:要发送的数据、发送数据的大小、接收数据的缓冲区、接收数据的大小。
在本例中,我们将数组a分成n/p份,其中p为进程数量。
每个进程将收到n/p个元素。
5. 求和操作每个进程都对自己所拥有的部分进行求和操作,并将结果存储在一个变量中。
6. 合并结果最后,我们需要将每个进程的结果合并起来,并返回给主进程。
这可以通过调用MPI_Reduce函数来实现。
该函数接受五个参数:要发送的数据、接收数据的缓冲区、发送数据的大小、操作类型(本例中为MPI_SUM)、接收数据的rank值。
MPI编程

MPICH2在Windows系统Visual Studio 2010的环境搭建MPICH的安装和配置文中使用的MPICH2安装文件是mpich2-1.4-win-ia32(/mpi/mpich),在Windows下安装MPICH2比较简单,但是要有Microsoft .NET Framework 2.0的支持。
安装基本上只要单击“Next”即可。
在安装过程中会提示输入进程管理器的密码,这个密码被用来访问所有的程序,这里使用的密码为admin。
如果是多台机器执行mpi,那么这多台机器上必须配置相同的mpi用户,就是新用户的用户名和密码必须相同。
安装完成后,安装目录下的include子目录包含了编程所需要的所有头文件,lib子目录包含了相应的程序库,而子目录bin则包含了MPI在Windows下面必须的运行程序。
运行时需要的动态链接库被安装在了Windows系统目录中。
在Windows平台下可以使用Microsoft Visual Studio来开发MPI程序。
首先,新建一个Win32控制台项目,然后将MPICH2安装目录下的include 子目录加入到头文件目录中。
在VS 2005的菜单工具->选项->项目解决方案->VC++目录对话框中添加include子目录,如图3-1所示。
图3-1 配置头文件目录再用相同的方法将MPICH2\lib加入到库文件目录中,如图3-2。
图3-2 配置库文件目录为了避免名字冲突,需要在预编译头文件stdafx.h中加入#inlcude mpi.h语句。
现在就可以在主程序文件中编写MPI程序了,MPI的开发环境配置完毕。
在Windows下如何运行MPI程序本文MPI程序的开发是在Windows平台下,使用Visual Studio 2005 + MPIEXEC wrapper 进行的,首先用一个简单的Hello World 程序说明运行环境的配置。
按照上面配置好开发环境之后,在VS 2005中新建立一个Win32控制台项目,并取名MPI1,在MPI1.CPP文件中输入下面的程序。
基于MPI并行编程环境简述

基于MPI并行编程环境简述MPI并行编程环境是一种并行编程解决方案,它被广泛应用于高性能计算领域。
本文将对MPI并行编程环境做一个简单的介绍,包括MPI的概念、MPI的基本编程模式、MPI的特点和应用场景等方面。
最后还将介绍一些MPI编程中要注意的问题。
一、MPI的概念MPI是Message Passing Interface的缩写,意思是“消息传递接口”,它是一种并行计算环境的标准化接口,并且被广泛应用于高性能计算领域。
MPI允许程序员编写MPI应用程序来在多个进程之间传递消息,并对应用程序进行并行化处理。
MPI定义了一套通信协议,使得单个进程可以通过网络连接与其他进程进行通信。
MPI支持多种编程语言,包括C、C++、Fortran等。
MPI的实现通常包括一个标准库和一个运行时系统,它们提供了一系列函数和工具,用于支持消息传递协议和进程管理。
二、MPI的基本编程模式MPI的基本编程模式是消息传递模型,它通过传递消息实现进程之间的通信和同步。
MPI提供了一套通信协议,包括点对点通信和集合通信两种方式,以及同步通信和异步通信两种方式。
在点对点通信中,发送方将消息传递给接收方;在集合通信中,一组进程相互交换数据。
同步通信要求发送方等待接收方的响应,而异步通信则可以在发送消息之后立即返回并继续执行。
三、MPI的特点MPI具有以下几个特点:1. 并行性:MPI可以同时在多个进程之间完成任务,并能够将运算分解成多个独立的计算单元来并行执行。
2. 可移植性:MPI的标准化接口使得程序员可以跨平台编写MPI应用程序,而无需考虑底层计算机架构和操作系统的区别。
3. 可扩展性:MPI支持将计算任务分配到大规模的计算资源上,能够有效地扩展计算能力。
4. 通信效率高:MPI的通信协议具有高效的性能,支持传输大量的数据,因此可以在高速网络上实现高速通信。
四、MPI的应用场景MPI主要应用于高性能计算领域,可以用于大规模数值模拟、数据挖掘、机器学习等任务。
MPI环境搭建

MPI环境搭建一、安装虚拟机二、在虚拟机安装两个ubuntu-server16.04系统一个主机命名为master另一个主机命名为slave1启动界面三、系统配置主机slave1配置master slave双向免登录三、MPI的下载于安装1.下载将文件上传到master在master主机查看文件安装G++、GCClzz@master:~/mpich-3.2$ sudo apt-get install build-essential创建安装路径lzz@master:~$ mkdir mpich-install安装lzz@master:~$ cd mpich-install/lzz@master:~/mpich-3.2$ ./configure --prefix=/home/lzz/mpich-install --disable-fortran 2>&1 | tee c.txt编译lzz@master:~/mpich-3.2$ make 2>&1 | tee m.txt安装MPICH命令lzz@master:~/mpich-3.2$ make install 2>&1 | tee mi.txt添加环境变量编辑.bashrc文件export PATH=/home/lzz/mpich-install/bin:$PATH使配置生效Source .bashrc配置集群复制master节点上的编译程序到slave1节点lzz@master:~$ scp -r /home/lzz/mpich-install lzz@slave1:~/编写demo程序#include "mpi.h" /*import head function of mpi*/#include <stdio.h>int main(int argc, char *argv[]){int rank, size, tag=1;/*rank is No. of process; size is the total number of process*/ MPI_Status status;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &rank);/*save process's No.*/MPI_Comm_size(MPI_COMM_WORLD, &size);/*save process's total number*/ printf("Hello World from thread %d of %d\n", rank, size);MPI_Finalize();return 0;}编译zhenzhen@lzz:~/source/c/mpidemo$ mpicxx -o mpidemo mpidemo.c 执行zhenzhen@lzz:~/source/c/mpidemo$ mpirun -np 3 ./mpidemo运行结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、系统安装 (1)
1、下载地址 (1)
2、安装步骤 (1)
3、Visual Stdio设置 (1)
二、实验程序 (2)
1、简单得MPI编程示例 (2)
2、消息传递MPI编程示例1 (3)
3、消息传递MPI编程示例2 (4)
4、Monte Carlo方法计算圆周率 (6)
5、计算积分 (8)
三、心得体会 (9)
一.系统安装
1.下载地址
FTP匿名登陆,在pub/mpi/nt文件夹中
2.安装步骤
1)在安装有MPI得计算机上要建立一个有管理员权限得账户,不可以没有密
码;
2)双击exe文件,按默认设置安装MPI;
3)注册MPI账户,调用MPIRegister、exe,用户名与密码即为第一步中得账户。
3.Visual Stdio设置
为避免每新建一个项目都要设置一次,可以对它进行通用设置。
打开视图-其她窗口-属性管理器,点击Debug|Win32目录下得Microsoft、Cpp、Win32、user,在VC++目录下得包含目录中添加MPICH得Include路径,库目录中添加MPICH得Lib路径;在链接器-输入目录下得附加依赖项中添加mpich、lib、mpe、lib、mped、lib、mpichd、lib。
二.实验程序
1.简单得MPI编程示例
1)源代码
#include <mpi、h>
#include <stdio、h>
int main(int argc, char* argv[])
{
int num, rk;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &num);
MPI_Comm_rank(MPI_COMM_WORLD, &rk);
printf("Hello world from Process %d of %d\n", rk, num);
MPI_Finalize();
return 0;
}
2)运行截图
2.消息传递MPI编程示例1
1)源代码
#include <mpi、h>
#include <stdio、h>
int main(int argc, char** argv)
{
int myid, numprocs,source;
MPI_Status status;
char messages[100];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if (myid != 0)
{
strcpy(messages, "Hello World!");
MPI_Send(messages, strlen(messages) + 1, MPI_CHAR, 0, 99, MPI_COMM_WORLD);
}
else
{
for (source = 1; source < numprocs; source++)
{
MPI_Recv(messages, 100, MPI_CHAR, source, 99, MPI_COMM_WORLD,&status);
printf("I am process %d I recv string '%s' from process %d\n", myid, messages, source);
}
}
MPI_Finalize();
return 0;
}
2)运行截图
3.消息传递MPI编程示例2
1)源代码
}
MPI_Send(&SqrtSum, 1, MPI_DOUBLE, 0, 99, MPI_COMM_WORLD);
}
printf("I am process %d、I recv total %d from process 0, and SqrtSum=%f、\n", myid, C, SqrtSum);_
MPI_Finalize();_
return 0;
}
2)运行截图
4.Monte Carlo方法计算圆周率
1)源代码
#include "mpi、h"
#include <stdio、h>
#include <stdlib、h>
int main(int argc, char **argv)
{
int myid, numprocs;
int source;
2)运行截图
5.计算积分
1)源代码
#define N 100000000
#define a 0
#define b 10
#include <stdio、h>
#include <stdlib、h>
#include <time、h>
#include "mpi、h"
int main(int argc, char** argv)
{
int myid, numprocs;
int i; _
double local = 0、0, dx = ((double)b - (double)a) / (double)N;
double inte, x;
MPI_Init(&argc, &argv);_
MPI_Comm_rank(MPI_COMM_WORLD, &myid);_
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
for (i = myid; i<N; i = i + numprocs)
{
x = a + i*dx + dx / 2;
local += x*x*dx;
}
MPI_Reduce(&local, &inte, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);_
if (myid == 0)
{
printf("The integal of x*x in region [%d,%d] =%16、15f\n", a, b,
inte);
}
MPI_Finalize();
return 0;
}
2)运行截图
三.心得体会
1.学习了MPICH得安装、注册。
用户名与密码为装有MPI、得计算机得账号名
与密码(注册时密码不能为空),
2.学会执行MPI程序——基于图形界面得guiMPIRun
3.通过PPT上得程序,真正了解了什么就是并行实验程序,并自己实现与观察
了并行程序执行得过程,对并行程序设计有了进一步得了解。