zoukankan      html  css  js  c++  java
  • 学习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 ", 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

    image

    这个程序在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

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

    作者:霊梦
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    区块链简单模拟的一些资料
    解析配置文件的一段练习代码
    go语言字符串练习
    20180613更新 leetcode刷题
    啊哈 算法 中 图相关算法
    paxos 练手 推进中
    传智播客8月C/C++基础班开班
    虚拟机最佳实践:单个 VM、临时存储和已上传磁盘
    在微软平台上运行 SAP 应用程序
    了解 Windows Azure 存储的可伸缩性、可用性、持久性和计费
  • 原文地址:https://www.cnblogs.com/linmeng97blogwzhh/p/10485205.html
Copyright © 2011-2022 走看看