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运行结果。
实验四MPI环境构建及程序设计
实验四MPI环境构建及程序设计MPI(Message Passing Interface)是一种并行计算通信标准,用于在并行计算环境中进行进程间通信。
构建MPI环境并进行程序设计是实现高性能计算的关键步骤之一、本实验将介绍如何构建MPI环境,并通过一个简单的程序设计来演示MPI的使用。
首先,我们需要在计算机上安装MPI环境。
MPI有多种实现,例如OpenMPI、MPICH和Intel MPI等。
这里我们以OpenMPI为例进行环境构建。
2. 安装OpenMPI:打开终端或命令提示符,进入到OpenMPI安装包所在目录,并执行以下命令进行安装:```$ tar xf openmpi-x.x.x.tar.gz # 解压安装包(x.x.x为安装包版本号)$ cd openmpi-x.x.x # 进入解压后的目录$ ./configure --prefix=/usr/local/openmpi # 配置安装路径$ make # 编译$ sudo make install # 安装(需要管理员权限)```3.配置环境变量:```export PATH=/usr/local/openmpi/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH ```执行以下命令使环境变量生效:```$ source ~/.bashrc # 或 source ~/.bash_profile```4.验证MPI环境:执行以下命令验证MPI环境是否成功安装:```$ mpiexec --version```如果输出了MPI版本信息,则说明安装成功。
接下来,我们将通过一个简单的MPI程序来演示MPI的使用。
以下是一个求解圆周率的MPI程序示例:```c#include <stdio.h>#include <stdlib.h>#include <mpi.h>int main(int argc, char *argv[])int rank, size;double pi = 0.0;double sum = 0.0;MPI_Init(&argc, &argv);srand(rank);for (int i = start; i < end; i++)double x = (double)rand( / RAND_MAX;double y = (double)rand( / RAND_MAX;if (x * x + y * y <= 1.0)sum += 1.0;}}MPI_Reduce(&sum, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);if (rank == 0)printf("Approximated Pi: %f\n", pi);}MPI_Finalize(;return 0;```该程序使用蒙特卡洛方法求解圆周率。
openmp和mpi环境配置
1、系统环境操作系统:Win7开发IDE:VS20102、配置openmp开发环境现流行的C/C++编译器基本上都支持openmp编程,只需在编译器上启动openmp选项即可VS2010开启openmp选项的操作如下:右击项目,选择“Property Pages(属性页)”;点击“Configuration Properties(配置属性)”,找到并点击“C/C++”,找到“Language(语言)”选项,里面有关于openmp的选项“OpenMP Support(OpenMP 支持)”,修改该选项即可。
3、安装并配置mpi软件(1)该文档包附带有软件mpich2-1.4.1p1-win-ia32.msi,在Win7中安装该软件。
(2)安装完成后,打开“开始-所有程序-MPICH-wmpiregister.exe”,在Account中输入本机用户名,在password中输入本机密码,点击Register按钮注册并按OK按钮退出。
(3)在VS2010中,配置VC++ Directories选项。
在VS2010中,VC++ Directories在Solution Explorer中,在项目名称上右键选择Properties,即进入Property Pages窗口。
(4)展开左边Configuration Properties,选中其中的VC++ Directories,在右边Include Directories加入“C:\Program Files\MPICH2\include;”(mpi安装目录里)(5)展开左边Configuration Properties,选中其中的VC++ Directories,在右边Library Directories加入“C:\Program Files\MPICH2\lib;”(6)展开左边Configuration Properties中的C/C++,选中其中的Preprocessor,在右边的Preprocessor Definitions中加入“MPICH_SKIP_MPICXX;”(7)同样展开C/C++,选中Code Generation,把右边的Runtime Library更改为“Multi-threaded Debug (/MTd)”(此外有下拉菜单可选到它)(8)展开左边的Linker,选中Input,在右边Additional Dependencies中加入“mpi.lib;”(9)运行MPI程序打开“开始-所有程序-MPICH-wmpiexec.exe”,在Applicationd右边浏览找到你在VS2010中生成的exe文件,设置Number of processes(即进程数目,用来模拟并行计算的CPU数目)。
Linux下MPI并行环境与Eclipse配置全过程
Linux下MPI并行环境与Eclipse配置全过程。
Linux + mpich2 + Eclipse我是Linux超级新手,文中难免有错误的地方,望指正和多多包容硬件情况:2台主机主机1:主机名:node1 IP:192.168.19.165 操作系统:CentOS 5.2 用户:root 密码:root主机2:主机名:node2 IP:192.168.19.169 操作系统:CentOS 5.2 用户:root 密码:root(这里的两台主机上的用户名和密码设置成一样的,好像不一样的话将会影响之后mpi程序的执行)为了省事,以下操作都是以root用户进行的1、===================配置host文件=========================在node1和node2上#vi /etc/hosts 打开hosts文件,修改如下:127.0.0.1 localhost.localdomainlocalhost192.168.19.165 node1192.168.19.169 node2(注意127.0.0.1 localhost.localdomainlocalhost一定不能缺,否则将可能导致之后 mpiexec运行出错)2、====================设置SSH信任连接====================在node1上生成SSH秘钥对.#ssh-keygen -t rsa yes,一路回车#cat /root/.ssh/id_rsa.pub | root@192.168.19.169 "cat - >> root/.ssh/authorized_keys" 将密钥等信息拷贝至node2中,该过程需要输入node2上root用户的密码#ssh root@node2 登陆node2#exit#ssh root@node2 第二次登陆node2,无需再输入密码了#exit#ssh root@node1 登陆自身一次在node2上执行同样的操作,只不过目标换成node1了#ssh-keygen -t rsa yes,一路回车#cat /root/.ssh/id_rsa.pub | root@192.168.19.165 "cat - >> root/.ssh/authorized_keys" #ssh root@node1#exit#ssh root@node1#exit#ssh root@node2(以上使用的ssh,如果系统安装的ssh2,设置过程将与上有所不同)3、=====================安装mpich2======================在node1和node2上:#tar -zxvf mpich2-1.0.1.tar.gz 解压缩#cd mpich2-1.0.1#./configure --prefix==安装路径,指定安装路径时可以使用#./configure --prefix=???,不带参数时默认安装路径为/usr/loacl,我用的是默认安装路径#make#make install 安装完成(为了避免未知错误,两台机器的mpich2安装位置最好一样)设置环境变量:#cd /etc/#vi profile 编辑profile文件添加 PATH="$PATH:/usr/local/bin"#source profile#which mpd 测试环境变量创建并修改/etc/mpd.conf文件#vi /etc/mpd.conf内容为secretword=myword#touch /etc/mpd.conf#chmod 600 /etc/mpd.conf (设置文件读取权限和修改时间,这两步好像不能省)创建主机名称集合文件/root/mpd.hosts#vi /root/mpd.hosts文件内容如下:node1node24、=====================简单的测试=========================在node1上#mpd& 启动#mpdboot -n 2 -f mpd.hosts 启动2台机器(启动的机器数不能超过集群中的主机数,这里只有2台)#mpdtrace 观看启动机器#mpiexec -n 4 /usr/local/examples/cpi number为使用的进程数,运行mpi自带的测试程序(不一定存在)#mpdallexit 退出mpi程序的编译#mpicc -o example C语言源代码或#mpic++ -o example C++语言源代码或#mpif77 example.f -o example Fortran语言源代码编译后可以执行:#mpdboot -n 2 -f mpd.hosts#scp /tmp/example root@node2:/tmp/example (/tmp/为刚才编译的程序所在文件夹)(需要并行运算的程序在两台主机上所存放的路径必须相同,文件名也必须相同我这里都存放在/tmp/文件夹下)#mpiexec -n 4/tmp/example5、===================在Eclipse中开发MPI程序=================在新建的工程上点右键选择Properties添加include路径,我的mpich2安装在/usr/local添加lib库路径,添加mpich,mpichxx,pthread 注:这是在linux下,与windows环境下需添加的库不同OK,Eclipse加MPI开发环境配置完成参考资料:SSH设置:/15798089_d.htmlMPICH2配置:/linux/article/accidence/install/20070514/8413.html MPI与Eclipse:/cleverysm/archive/2007/06/06/1640290.aspx一些MPI错误解决方法:/xiaxiazls/archive/2009/09/08/4530423.aspx。
c++的mpi编程
c++的mpi编程C++的MPI编程是一种用于实现并行计算的方法。
MPI(Message Passing Interface)是一种通信协议,它允许在分布式计算系统中进行高效的消息传递。
在C++中使用MPI编程,可以充分利用多核处理器和集群计算机等并行资源。
以下是C++ MPI编程的基本步骤:1. 配置MPI环境:首先,需要在操作系统上安装MPI库。
安装完成后,可以通过编译器参数或环境变量指定MPI库的路径。
2. 编写程序:编写一个C++程序,使用MPI库提供的函数进行通信和同步。
常见的MPI函数包括发送和接收消息的函数(如MPI_Send 和MPI_Recv),以及用于进程间通信的函数(如MPI_Comm_size和MPI_Comm_rank)。
3. 分配计算资源:在程序中,使用MPI_Comm_size函数获取进程数量,然后根据问题规模和计算资源分配任务。
可以使用MPI_Comm_rank函数获取当前进程的编号。
4. 初始化MPI:在程序开始时,使用MPI_Init函数初始化MPI库。
在程序结束时,使用MPI_Finalize函数关闭MPI库。
5. 编写主函数:在主函数中,使用MPI函数进行进程间通信和数据交换。
例如,可以使用MPI_Send和MPI_Recv函数实现数据的发送和接收。
6. 编写并行区域:在并行区域中,使用MPI_Barrier函数同步进程。
这样可以确保所有进程在执行并行区域之前达到相同的进度。
7. 结束MPI:在程序结束时,使用MPI_Finalize函数关闭MPI库。
以下是一个简单的C++ MPI编程示例:```cpp#include <iostream>#include <mpi.h>int main(int argc, char *argv[]) {// 初始化MPI库MPI_Init(&argc, &argv);// 获取进程数量和当前进程编号int size, rank;MPI_Comm_size(MPI_COMM_WORLD, &size);MPI_Comm_rank(MPI_COMM_WORLD, &rank);// 输出进程信息std::cout << "Hello, I am process " << rank << " of " << size << "." << std::endl;// 结束MPI库MPI_Finalize();return 0;}```这个示例程序将输出各个进程的编号和总进程数。
mpi编程指南
MPI编程指南一、MPI概述1.1 MPI的发展史MPI标准化涉及到大约60个国家的人们,他们主要来自于美国和欧洲的40个组织,这包括并行计算机的多数主要生产商,还有来自大学、政府实验室和工厂的研究者们。
1992年4月,并行计算研究中心在Williamsburg,Virginia,召开了一个关于消息传递的标准的工作会议,会议上讨论了标准消息传递的必要的、基本的特点,并建立了工作组继续进行标准化工作。
1992年10月,MPI的初步草稿MPI1形成,MPI1主要包含的是在Williamsburg工作组会议上讨论的基本消息传递的接口,因为它的基本目的就是促进讨论并继续此项工作,所以它主要集中在点对点的通信。
1993年1月,第一届MPI会议在Dallas举行,1993年2月MPI1修定版本公布;之后定期召开了一系列关于MPI的核心的研讨会;1993年11月MPI的草稿和概述分别发表于Supercomputing'93和the proceedings。
直到1994年5月,MPI标准正式发布。
1994年7月发布了MPI标准的勘误表。
现在该工作组正在着手扩展MPI、完善MPI,从事于MPI2(MPI的扩展标准)的制定工作。
1.2 MPI的优点●可移植性和易于使用。
以低级消息传递程序为基础的较高级和(或)抽象程序所构成的分布存储通信环境中,标准化的效益特别明显。
●MPI是被正式的详细说明的:它已经成为一个标准。
消息传递标准的定义能提供给生产商清晰定义的程序库,以便他们能有效地实现这些库或在某些情况下为库程序提供硬件支持,因此加强了可扩展性。
●MPI有完备的异步通信:使得send,recieve能与计算重叠。
●可以很有效的在MPP上或Cluster上用MPI编程:MPI的虚拟拓扑反映了应用程序所申请的一组结点的通信模式,在MPP上实现的MPI便可以利用这种信息来优化处理器间的通信路径。
1.3 主要内容●点对点通信(point_to_point communication)●群体操作(collective operations)●进程组(process groups)●通信上下文(communication contexts)●进程拓扑结构(process topologies)●与Fortran 77和C语言的邦定(bindings for Fortran 77 and C)●环境的管理与查询(environmental management and inquiry)●轮廓管理(profiling interface)1.4 MPI的各种实现在国外有许多自从MPI标准制定以来在各种机器上的MPI的portable的实现,并且他们仍从事于自己的MPI实现的性能改进,其中最著名的一些见表1。
MPI安装与配置实验
实习一MPICH安装与配置实习目的:学会在个人计算机上安装MPICH2并进行配置,在VC6中MPI配置。
实习要求:在个人计算机上安装mpich2,并进行配置,在VC6中完成与mpi的配置,编写一个简单mpi程序,并成功运行。
实习环境:Windows7操作系统,VC6编译器。
实习步骤:1.在个人计算机上安装mpich2,默认安装路径为C:\Program Files\MPICH2。
其安装界面为:选择Nest进行下一步的安装工作。
设置安装路径,如下图:继续,直至安装完成:2.mpich2与个人计算机进行配置。
首先进行注册,必须使用管理员账号登陆注册。
在C:\program files\mpich2\bin目录下执行wmpiregister.exe文件,出现如图界面。
在其中相应位置出入管理员账号和密码,点击“Register”按钮,在其下文本框内出现“Password encrypted into the Registry”,表示账号和密码已经读入内存,点击“OK”键,将其写入硬盘。
与个人计算机配置,点击“Get Hosts”显示当前主机名,实习主机为“yangxiaodi”。
点击“Scan for version”待下方蓝色进度条显示完成时,显示mpi版本号,此次实习的版本号为“1.4.1p1”,点击“Get setting”主机名将显示为绿色,如图所示。
选择要设置的选项,点击“Apply”,最后点击“OK”完成mpi与个人计算机配置。
在成功安装mpich之后,在“任务管理器”中“进程”将会出现“smpd”进程,如图中所示:3.mpi与VC6配置。
打开VC6,新建一个工程,点击“工程”--->“设置”,出现如下图界面,选择“C/C++”选项,选择“所有配置”选项(①的下拉框),再选择“预处理器”选项(②的下拉框),在“附加包含路径”(③所示区域)中添加头文件“include”所在目录。
本机安装路径为C:\Program Files\MPICH2\include。
并行计算环境搭建
并行计算环境搭建一.搭建并调试并行计算环境MPI的详细过程。
1.首先,我们选择在Windows XP平台下安装MPICH。
第一步确保Windows平台下安装上了.net框架。
2.在并行环境的每台机子上创建相同的用户名和密码,并使该平台下的各台主机在相同的工作组中。
3.登陆到新创建的帐号下,安装MPICH软件,在选择安装路径时,每台机子的安装路径要确保一致。
安装过程中,需要输入一致的passphrase,也即本机的用户名。
4.安装好软件后,要对并行环境进行配置(分为两步):第一步:注册。
在每台机器上运行wmpiregister,按照提示输入帐号和密码,即本机的登录用户名和密码。
第二步:配置主机。
在并行环境下,我们只有一台主机,其他机子作为端结点。
运行主机上的wmpiconfig,在界面左侧栏目中选择TNP工作组,点击“select”按钮,此时主机会在网络中搜索配置好并行环境的其他机子。
配置好并行环境的其他机子会出现绿色状态,点击“apply”按钮,最后点击“OK”按钮。
5.在并行环境下运行的必须是.exe文件,所以我们必须要对并行程序进行编译并生成.exe文件。
为此我们选择Visual C++6.0编译器对我们的C语言程序进行编译,在编译过程中,主要要配置编译器环境:(1)在编译器环境下选择“工程”,在“link”选项卡的“object/library modules”中输入mpi.lib,然后点击“OK”按钮。
(2)选择“选项”,点击“路径”选项卡,在“show directories for”下选择“Include files”,在“Directories”中输入MPICH软件中“Include”文件夹的路径;在“show directories for”下选择“Library files”,在“Directories”中输入MPICH软件中Library文件夹的路径,点击“OK”。
(3)对并行程序进行编译、链接,并生成.exe文件。
MPI通讯组态和编程方法
MPI通讯组态和编程方法用一台工控机监视两套PLC系统,解决方案为:1.硬件配置:两个CPU314新型,一根三端两蕊屏蔽电缆,分别连接到工控机的CP5611卡、PLC系统1的CPU,PLC系统2的CPU。
2.总线电缆定货号为:6XV1830-0EH10,总线插头定货号为:6ES7 972-0BA12-0XA0。
总线电缆可按米买,此次买15米,截为3根,每根5米。
总线接头三个,每个上面有输入与输出的标志。
接线时按照A B,B C,C A的顺序接。
屏蔽电缆内有两根线,一根为红色,一根为绿色。
接线时按照红色线接红色端,绿色线接绿色端即可3.注意接好后应把每个总线插头的开关都拨到OFF状态。
4.总线插头为90度出线,插在工控机上极不方便,可考虑选择斜向出线的插头。
5.接好线后,打开控制面板的Set PG/PC Interface,如下图所示6.点击Diagnostics按钮,出现如下画面:7.点击Test,待右侧出现O.K.字样时,再点击下面的Read按钮,若两套PLC都成功接通,则应出现三个打勾的空白。
其中0代表工控机,其它两个代表两套PLC系统。
8.在Step 7中设置。
只需在项目文件中添加两个SIMATIC 300站,分别为每个站组态好硬件,并为每个站分配好MPI地址,分配MPI地址的方法如下,在Hardware Config 中双击CPU,9.出现如下画面:10.点击Properties按钮,出现如下画面:11.在Address下拉选单中选择想要为这套PLC分配的MPI地址,选择后下载,会提示MPI 地址不正确,点击确定继续下载。
分别为两套PLC分配好地址,例如为其中一套分配的地址是2,别一套是4,则再到Set PG/PC Interface中去读取一次,打勾的应该的0、2、4这三个地址。
12.只要正确安装CP5611卡,电缆本身没有问题且连接正确、每个端头的开关都在OFF状态,应能用5611卡测出网络是否连通。
MPI配置
1、建一个项目如下:点击OK2、打开项目之后,插入两个S7-300站3、硬件组态第一个S7-300站,如下:双击该CPU4、双击机架里第二槽CPU 315-2 DP单击属性点击OK5、点击Properties(属性),选定MPI网,创建MPI节点地址。
我把它设成”4”。
设定MPI的网络节点选MPI网点击OK点击OK 即完成对MPI节点的设置。
6、保存并编译S7-300站里的PLC 里。
7、现在对第二个S7-300站进行MPI 节点的设定。
8、硬件插入之后,双击CPU315-2DP双击双击该PLC9、单击Propertie(属性)单击属性点击OK10、选定MPI网,设定MPI节点号。
我设定为“6”。
点击的设定。
1112、做完上面的对的步骤。
即完成了对MPI 的硬件和参数的配置。
下面用紫色的MPI 线把两个PLC 连接起来。
注意,一定把九针头插在在MPI/DP 口上。
13、先选定MPI(1)如下图:选定MPI 网设定MPI 网络节点点击OK14、把鼠标放在Optionsdefine Globel Data 单击打开。
15、打开之后如图双击该区域先选定PLC单击OK再插入第二个plc双击该区域MB100表示为起始字节。
10选定PLC之后单击OK上面已经配完了对两个PLC的映像区域的设定下面把这个全局数据表,进行保存并编译之后下载点击编译说明配成了点击关闭点击OK下载完成之后MPI网络已经建立。
MPI编程环境配置与示例
目录一.系统安装.......................................................... 2..1. 下载地址........................................................2.2. 安装步骤........................................................ 2.3. Visual Stdi o 设置 ................................................ 2.二.实验程序.......................................................... 3..1. 简单的MPI编程示例............................................. 3.2. 消息传递MPI编程示例1 ........................................................................... 4.3. 消息传递MPI编程示例2 ............................................................................ 5.4. Monte Carlo方法计算圆周率...................................... 7.5. 计算积分........................................................ .9..三.心得体会.......................................................... 1.0一.系统安装1. 下载地址FTP匿名登陆 ,在pub/mpi/nt 文件夹中2. 安装步骤1)在安装有MPI的计算机上要建立一个有管理员权限的账户,不可以没有密码; 2)双击exe文件,按默认设置安装MPI;3)注册MPI账户,调用MPIRegister.exe用户名和密码即为第一步中的账户。
MPI实验指导new
MPI实验1.实验目的本实验的目的是通过练习掌握分布存储并行编程的知识和技巧。
●了解并行算法的设计方法●掌握MPI并行程序编写的基本步骤●掌握MPI编程环境和工具的使用2.实验要求(1) 在vs2010上配置MPI环境(2) 熟悉MPI编程环境(3)使用MPI编程实现快速排序的并行化3.实验内容3.1 环境的配置vs2010中MPI的配置步骤:(1)安装mpich2-1.4.1p1-win-ia32.exe (32位机器,若是64位机器,则使用mpich2-1.4.1p1-win-x86-64.msi安装)(2)打开vs2010,建立一个空项目。
(3)在vs中,右键点击项目的属性->配置属性->vc++目录->包含文件,添加安装的mpich2下的include目录,如图:(VS2008,则是在vs中,工具->选项->项目和解决方案->vc++目录->包含文件,添加安装的mpich2下的include目录,)(4)链接器->常规->附加库目录,添加安装的mpich2下的lib目录(若是vs2008,则同样是vc++目录下,库文件下添加安装的mpich2目录下的lib目录),如图:(5)链接器->输入->附加依赖项,添加mpi.lib,如图:(6)点击确定之后,可以进行MPI编程。
编程的实例在文件夹中。
编程完毕之后,启动调试,目的是在Debug文件夹下生成.exe。
(7)到MPI的安装目录bin下找到wmpiregister.exe这个程序并打开,在里面填入一个用户名和密码(此处的用户名密码必须与本机的windows 登录的管理员用户名密码一致,如果没有则需要在控制面板先创建一个windows管理员用户名,并设置密码),点击注册(8)运行wmpiconfig.exe启动配置程序,点Scan Hosts可以查到安装MPICH2的计算机,如果成功的话,可以看到安装了MPICH2的计算机名称编程草绿色。
- 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上得程序,真正了解了什么就是并行实验程序,并自己实现与观察
了并行程序执行得过程,对并行程序设计有了进一步得了解。