MPI基础
- 格式:ppt
- 大小:651.50 KB
- 文档页数:85
MPI基本框架语句详解//转载请注出处 design by:lhl 于2016.12.14最近刚开始接触mpi并⾏运算,感觉⽆从下⼿,找了好多资料看完之后吧⾃⼰的⼀些笔记整理⼀下,万⼀也有初学者有困惑也能帮⼀把。
Let’s go:⼀.Mpi程序编译与运⾏⽅法⼀:1. 安装mpich,搭建mpi运⾏环境(linux中安装mpich即可)(其中mpi_pi.c是⽤来测试的计算pi的程序)2. 编译:mpicc mpi_pi.c -Wall -o mpi_pi(不同于gcc编译,需注意)3. 运⾏:mpiexec -n 4 ./mpi_pi⽅法⼆:⽣成可执⾏⽂件1.运⾏:mpicc mpi_pi.c进⾏编译,会⽣成a.out的可执⾏⽂件2.mpirun -np 4 ./a.out⼆.基本框架语句与详解1.main(int argc,char **argv)2.MPI_Init(&argc,&argv);进⾏MPI程序的初始化,⼀般MPI程序从这⼀句开始。
开始进⾏MPI运算。
3.MPI_Comm_rank(MPI_COMM_WORLD,&myid);先看第4条吧,相当于是当前进程的逻辑编号,是总进程p中的第⼏个进程。
4.MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI程序获得进程数p,设置总的进程数5.MPI_Finalize();MPI程序的结束语句,到这说明程序都结束了,不然程序get不到结束语句就不知道该什么时候停下来了。
下次会发⼀个计算pi的MPI程序,和我⼀样新⼿的可以看懂那个就容易多了。
《mpi使用操作流程》xx年xx月xx日contents •MPI介绍•MPI安装与配置•MPI基本使用方法•MPI并行文件IO操作•MPI并行计算实例•MPI错误处理与调试目录01 MPI介绍Multiple Processor Interface:一种并行计算编程模型,用于多处理器或多线程并行计算。
Message Passing Interface:一种消息传递编程模型,用于分布式或并行计算系统中的进程间通信。
MPI含义MPI标准由美国Argonne国家实验室开发,成为并行计算领域的重要工具。
1993年MPI-2标准发布,增加了对异步通信和动态进程管理的支持。
1997年MPI-3标准发布,优化了并行计算性能和可扩展性。
2008年MPI发展历程MPI应用场景并行数据库MPI可以用于并行数据库系统中的数据分发和通信,提高数据处理速度和效率。
并行图处理MPI可以用于大规模图处理中的并行计算,提高图算法的效率和速度。
高性能计算MPI是高性能计算中常用的并行计算编程模型,被广泛应用于天气预报、物理模拟、数据分析等领域。
02MPI安装与配置确认操作系统版本和支持的MPI版本准备MPI安装所需组件和工具确认网络连接和远程访问能力下载对应版本的MPI安装包解压缩MPI安装包执行安装脚本,如`.bin/install.sh`等待安装过程完成,不要手动中断按照提示进行下一步操作,如选择安装路径、配置环境变量等MPI配置步骤进入MPI安装目录下的`etc`子目录编辑`mpd.conf`文件,配置MPI守护进程的参数配置MPI启动脚本,如`mpd.sh`、`mpdstart.sh`等设置启动脚本属性为可执行,如`chmod +x mpd.sh`使用启动脚本启动MPI守护进程,如`./mpd.sh &`确认MPI守护进程是否成功启动,可以使用`ps -ef |grep mpd`命令查看进程状态03MPI基本使用方法MPI运行环境设置安装MPI选择适合的MPI版本并按照说明进行安装。
MPI(Message Passing Interface)是一种并行计算中常用的通信协议,主要用于进程间的消息传递。
以下是MPI的一些基础操作:
1.初始化MPI环境:通过MPI_Init函数完成MPI环境的初始化。
int MPI_Init(int *argc, char ***argv);
2.获取进程编号和总进程数:通过MPI_Comm_rank和MPI_Comm_size函
数获取当前进程的编号和总进程数。
int MPI_Comm_rank(MPI_Comm comm, int *rank);
int MPI_Comm_size(MPI_Comm comm, int *size);
3.发送和接收消息:通过MPI_Send和MPI_Recv函数进行消息的发送和接
收。
int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status);
4.结束MPI环境:通过MPI_Finalize函数结束MPI环境。
int MPI_Finalize(void);
以上是MPI的一些基本操作,实际上MPI还提供了许多其他的功能,如广播、散列、收集等,可以满足各种并行计算的需求。
MPI规约1. 什么是MPIMPI(Message Passing Interface)是一种用于并行计算的通信协议和编程模型。
它定义了一组函数、常量和数据类型,用于在并行计算中进行进程间的通信和同步操作。
MPI的目标是提供一个标准化的并行编程接口,使得开发者可以方便地编写并行程序,并在不同的计算平台上进行移植。
MPI最初由一些高性能计算领域的研究人员发起,目前已成为广泛使用的并行编程框架之一。
MPI的设计理念是基于消息传递的分布式内存模型,它允许开发者在多个进程之间进行通信,通过发送和接收消息来共享数据和进行协作计算。
2. MPI的特点MPI具有以下几个特点:2.1 并行性MPI是一种并行编程模型,它允许开发者将计算任务划分为多个子任务,并在多个进程之间进行并行计算。
每个进程都可以独立地执行指定的计算任务,通过消息传递来交换数据和协调计算。
2.2 分布式内存模型MPI采用分布式内存模型,每个进程都拥有独立的内存空间。
进程之间通过消息传递来进行通信,而不需要共享内存。
这种模型使得MPI程序可以在分布式计算环境中运行,充分利用多台计算机的计算资源。
2.3 灵活性MPI提供了丰富的通信和同步操作函数,开发者可以根据具体需求选择合适的函数来实现进程间的通信和同步。
MPI支持点对点通信、广播、规约、散射、聚集等常见的通信模式,同时也支持自定义通信操作。
2.4 可移植性MPI的标准化设计使得开发者可以方便地编写可移植的并行程序。
只要目标计算平台支持MPI标准,就可以在该平台上运行MPI程序,而不需要对程序进行修改。
这种可移植性使得MPI成为并行计算领域的重要工具。
3. MPI的规约操作MPI规约操作(MPI Reduction)是一种在并行计算中常用的操作,用于将多个进程的数据合并为一个结果。
MPI规约操作可以用于求和、求积、求最大值、求最小值等各种聚合计算。
MPI规约操作的基本思想是将多个进程的数据按照指定的操作进行合并,然后将合并结果发送给指定的进程。
从零开始学PLC之MPI通信调用系统功能SFC用系统功能SFC65~69,可以在无组态情况下实现PLC之间的MPI的通讯,这种通讯方式适合于S7-300、S7-400和S7-200之间的通讯。
无组态通讯又可分为两种方式:双向通讯方式和单向通讯方式。
无组态通讯方式不能和全局数据通讯方式混合使用。
1.双向通讯方式双向通讯方式要求通讯双方都需要调用通讯块,一方调用发送块发送数据,另一方就要调用接收块来接收数据。
适用S7-300/400之间通讯,发送块是SFC65(X_SEND),接收块是SFC66(X_RCV)。
下面举例说明如何实现无组态双向通讯。
例:设2个MPI站分别为MPI_Station_1(MPI地址为设为2)和MPI_Station_2(MPI地址设为4),要求MPI_Station_1站发送一个数据包到MPI_Station_2站。
生成MPI硬件工作站打开STEP 7,创建一个S7项目,并命名为“双向通讯”。
在此项目下插入两个S7-300的PLC站,分别重命名为MPI_Station_1和MPI_Station_2。
MPI_Station_1包含一个CPU315-2DP;MPI_Station_2包含一个CPU313C-2DP。
设置MPI地址完成2个PLC站的硬件组态,配置MPI地址和通信速率,在本例中CPU315-2DP和CPU313C-2DP的MPI地址分别设置为2号和4号,通信速率为187.5kbit/s。
完成后点击按钮,保存并编译硬件组态。
最后将硬件组态数据下载到CPU。
编写发送站的通讯程序在MPI_Station_1站的循环中断组织块OB35中调用SFC65,将I0.0~I1.7发送到MPI_Station_2站。
MPI_Station_1站OB35中的通讯程序如图所示。
编写接收站的通讯程序在MPI_Station_2站的主循环组织块OB1中调用SFC66,接收MPI_Station_1站发送的数据,并保存在MB10和MB11中。
MPI简介MPI简介MPI(Message Passing Interface)是消息传递并行程序设计的标准之一,当前通用的是MPI1.1规范。
正在制定的MPI2.0规范除支持消息传递外,还支持MPI的I/O规范和进程管理规范。
MPI正成为并行程序设计事实上的工业标准。
MPI的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是MPICH,曙光天潮系列的MPI以MPICH为基础进行了定制和优化。
MPICH含三层结构,最上层是MPI的API,基本是点到点通信,和在点到点通信基础上构造的集群通信(Collective Communication);中间层是ADI层(Abstract Device Interface),其中device可以简单地理解为某一种底层通信库,ADI就是对各种不同的底层通信库的不同接口的统一标准;底层是具体的底层通信库,例如工作站机群上的p4通信库、曙光1000上的NX库、曙光3000上的BCL通信库等。
MPICH的1.0.12版本以下都采用第一代ADI接口的实现方法,利用底层device提供的通信原语和有关服务函数实现所有的ADI接口,可以直接实现,也可以依靠一定的模板间接实现。
自1.0.13版本开始,MPICH采用第二代ADI接口。
我们将MPICH移植到曙光3000高效通信库BCL(Basic Communication Library)上(简称MPI_BCL)。
MPI_BCL的接口标准与MPICH版本1.1完全一致,满足MPI1.1标准。
同时,也支持ch_p4的通信库,即利用TCP/IP通信机制。
从网络硬件角度说,MPI_BCL针对系统网络,MPI_ch_p4针对高速以太网。
1.MPI的程序设计MPI1.1标准基于静态加载,即所有进程在加载完以后就全部确定,直至整个程序结束才终止,在程序运行期间没有进程的创建和结束。
一个MPI程序的所有进程形成一个缺省的组,这个组被MPI预先规定的Communicator MPI_COMM_WORLD所确定。