学习MPI并行编程记录
简单的MPI程序示例
首先,我们来看一个简单的MPI程序实例。如同我们学习各种语言的第一个程序一样,对于MPI的第一个程序同样是"Hello Word"。
/* Case 1 hellow.c */
#include <stdio.h>
#include "mpi.h"
int main( int argc, char *argv[] ) {
int rank;
int size;
MPI_Init( argc, argv );
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf( "Hello world from process %d of %d\n", rank, size );
MPI_Finalize();
return 0;
}
根据上一节的介绍,我们使用如下命令编译和链接这个程序:
mpicc –o hellow hellow.c
运行这个例子可以在可执行文件的目录中执行mpiexec –np 4 ./hellow。运行结果如下:
Hello world from process 0 of 4
Hello world from process 1 of 4
Hello world from process 2 of 4
Hello world from process 3 of 4
这个程序在MPI程序运行的每个进程中分别打印各自的MPI进程号(0~3)和总进程数(4)。
值得注意的是,由于四个进程是并行执行,所以即使输出的顺序有变化也是正常的,程序中并没有限制哪个进程在前,哪个进程在后。
2.2 MPI程序的四个基本函数
1.MPI_Init和MPI_Finalize
MPI_Init用来初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备。而MPI_Finalize则是结束MPI执行环境。
如同OpenMP定义并行区一样,这两个函数就是用来定义MPI程序的并行区的。也就是说,除了检测是否初始化的函数之外,不应该在这两个函数定义的区域之外调用其他MPI函数。
2.MPI_Comm_rank
参考书籍介绍过SPMD的程序形式,给出的例子中需要通过进程标识和总数来分配数据。MPI_Comm_rank就是来标识各个MPI进程的,告诉调用该函数的进程“我是谁?”。MPI_Comm_rank返回整型的错误值,需要提供两个函数参数:
MPI_Comm类型的通信域,标识参与计算的MPI进程组。
整型指针,返回进程在相应进程组中的进程号。进程号从0开始编号。
3.MPI_Comm_size
本函数则用来标识相应进程组中有多少个进程。
最新文章
- MySQL_积分兑换的优惠券在某时间段内使用情况_ 20161215
- sql server2008 字段类型
- activiti入门
- css3 keyframes animation
- 设置NODE_ENV=production
- 【C#学习笔记】写文件
- CDH5.5.1版HBase安装使用LZO压缩
- javascript summary
- libsvm中的dec_values以及分类结果评分问题
- 内核对象 windows操作系统
- Python函数中如何定义参数
- cmd 与 bash 基础命令入门
- Java ftp 上传文件和下载文件
- Python爬虫目录
- Python字符串方法总结(一)
- yii2 创建模块modules
- spring-data-redis HashOperations
- redux进一步优化
- 尚学堂java 参考答案 第八章
- SED单行脚本快速参考(Unix 流编辑器)
热门文章
- 微信JS-SDK怎样使用
- Android开源框架ViewPageIndicator和ViewPager实现Tab导航
- 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 数据库连接不释放测试 连接池 释放连接 关闭连接 有关 redis-py 连接池会导致服务器产生大量 CLOSE_WAIT 的再讨论以及一个解决方案
- Android开发:setAlpha()方法
- 乐视云监控数据存放到influxdb中
- NodeJs函数式编程
- 如何用css约束一个层不可见
- MAC地址 初识
- mysql sql执行错误#1436 Thread stack overrun
- PCB Genesis 无需启动Xmanager图形窗口运行脚本 实现方法