简单的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

本函数则用来标识相应进程组中有多少个进程。

学习MPI并行编程记录的更多相关文章

  1. 学习笔记——并行编程Parallel

    Parallel 并行运算 参考资料:http://www.cnblogs.com/woxpp/p/3925094.html 1.并行运算 使用Parallel并行运算时,跟task很像,相当于tas ...

  2. 五 浅谈CPU 并行编程和 GPU 并行编程的区别

    前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺 ...

  3. 第五篇:浅谈CPU 并行编程和 GPU 并行编程的区别

    前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺 ...

  4. 【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式

    这里的内容主要是都志辉老师<高性能计算之并行编程技术——MPI并行程序设计> 书上有一些代码是FORTAN的,我在学习的过程中,将其都转换成C的代码,便于统一记录. 这章内容分为两个部分: ...

  5. 【MPI学习6】MPI并行程序设计模式:具有不连续数据发送的MPI程序设计

    基于都志辉老师<MPI并行程序设计模式>第14章内容. 前面接触到的MPI发送的数据类型都是连续型的数据.非连续类型的数据,MPI也可以发送,但是需要预先处理,大概有两类方法: (1)用户 ...

  6. 【MPI学习7】MPI并行程序设计模式:MPI的进程组和通信域

    基于都志辉老师MPI编程书中的第15章内容. 通信域是MPI的重要概念:MPI的通信在通信域的控制和维护下进行 → 所有MPI通信任务都直接或间接用到通信域这一参数 → 对通信域的重组和划分可以方便实 ...

  7. 大数据学习笔记3 - 并行编程模型MapReduce

    分布式并行编程用于解决大规模数据的高效处理问题.分布式程序运行在大规模计算机集群上,集群中计算机并行执行大规模数据处理任务,从而获得海量计算能力. MapReduce是一种并行编程模型,用于大规模数据 ...

  8. python并行编程学习之绪论

    计算机科学的研究,不仅应该涵盖计算处理所基于的原理,还因该反映这些领域目前的知识状态.当今,计算机技术要求来自计算机科学所有分支的专业人员理解计算机处理的基础的关键,在于知道软件和硬件在所有层面上的交 ...

  9. OpenCL学习笔记(二):并行编程概念理解

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 并行编程的需求是显而易见的,其 ...

随机推荐

  1. Mysql经常使用函数

    -----------------------------字符串函数--------------------------------------- ----拼接字符串.不论什么字符串与null拼接为n ...

  2. 发现所有的字都被加上了 <font> 标签,导致样式全部错乱

    经检查,发现我的浏览器默认打开了翻译软件!!!!!!!

  3. leetcode题解||Palindrome Number问题

    problem: Determine whether an integer is a palindrome. Do this without extra space. click to show sp ...

  4. pygame save that Stream as video output.

    python - how to save pygame camera as video output - Stack Overflow  https://stackoverflow.com/quest ...

  5. Linux下的IPC-UNIX Domain Socket【转】

    本文转载自:http://blog.csdn.net/guxch/article/details/7041052 一. 概述 UNIX Domain Socket是在socket架构上发展起来的用于同 ...

  6. 【HAOI 2008】 糖果传递

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1045 [算法] 环形均分纸牌问题 [代码] #include<bits/std ...

  7. 对于Mobile模块化的概念认知(小白)

    最近刚刚学习了Mobile的一些基础知识,把它整理一下方便自己的学习 那什么是Mobile呢? 自己的理解是将一个项目中共同的部分抽出来,这样就形成了Mobile模块. 为什么要使用Mobile呢? ...

  8. Android Framework 学习

    1. 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework面存一些资料待有空查看. 2.Android系统的层次如下: 3.项目目录简单分析如下: 4.telphony ...

  9. aop 切面demo

    /** * 必须要@Aspect 和 @Component一起使用否则没法拦截通知 * 搞了好久才明白刚刚开始以为时execution里面的配置的问题 * AOP使用很简单的 */@Aspect@Co ...

  10. centos mysql允许远程root登录

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...