前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发学习一、MPI初步认识

并发学习一、MPI初步认识

作者头像
梅花
发布2020-09-28 16:24:56
1.1K0
发布2020-09-28 16:24:56
举报
文章被收录于专栏:梅花的学习记录

学习参考地址:https://www.jianshu.com/p/2fd31665e816

编程使用的vs2015 社区版本(个人感觉比Vc6.0的丑界面看起来舒服多了)

MPI基本函数

MPI调用借口的总数虽然庞大, 但根据实际编写MPI的经验, 常用的MPI调用的个数确什么有限。 下面是6个最基本的MPI函数。 1.  MPI_Init(…); 2.  MPI_Comm_size(…); 3.  MPI_Comm_rank(…); 4.  MPI_Send(…); 5.  MPI_Recv(…); 6.  MPI_Finalize(); 我们在此通过一个简单的例子来说明这6个MPI函数的基本用处。

函数介绍

1. int MPI_Init (int* argc ,char** argv[] )

该函数通常应该是第一个被调用的MPI函数用于并行环境初始化,其后面的代码到 MPI_Finalize()函数之前的代码在每个进程中都会被执行一次。 –  除MPI_Initialized()外, 其余所有的MPI函数应该在其后被调用。 –  MPI系统将通过argc,argv得到命令行参数(也就是说main函数必须带参数,否则会出错)。

2. int MPI_Finalize (void)

–  退出MPI系统, 所有进程正常退出都必须调用。 表明并行代码的结束,结束除主进程外其它进程。 –  串行代码仍可在主进程(rank = 0)上运行, 但不能再有MPI函数(包括MPI_Init())。

3. int MPI_Comm_size (MPI_Comm comm ,int* size )

–  获得进程个数 size。 –  指定一个通信子,也指定了一组共享该空间的进程, 这些进程组成该通信子的group(组)。 –  获得通信子comm中规定的group包含的进程的数量。

4. int MPI_Comm_rank (MPI_Comm comm ,int* rank)

–  得到本进程在通信空间中的rank值,即在组中的逻辑编号(该 rank值为0到p-1间的整数,相当于进程的ID。)

5. int MPI_Send( void *buff, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

–void *buff:你要发送的变量。 –int count:你发送的消息的个数(注意:不是长度,例如你要发送一个int整数,这里就填写1,如要是发送“hello”字符串,这里就填写6(C语言中字符串未有一个结束符,需要多一位))。 –MPI_Datatype datatype:你要发送的数据类型,这里需要用MPI定义的数据类型,可在网上找到,在此不再罗列。 –int dest:目的地进程号,你要发送给哪个进程,就填写目的进程的进程号。 –int tag:消息标签,接收方需要有相同的消息标签才能接收该消息。 –MPI_Comm comm:通讯域。表示你要向哪个组发送消息。

第一个程序的代码

代码语言:javascript
复制
#include <stdio.h> 
#include <mpi.h>

//也就是说main函数必须带参数,否则会出错
int main(int argc, char *argv[])
{

    int procs_id, procs_count, namelen;

    //返回的是进程的名字
    char processor_name[MPI_MAX_PROCESSOR_NAME];

    /*
    该函数通常应该是第一个被调用的MPI函数用于并行环境初始化,
    其后面的代码到 MPI_Finalize()函数之前的代码在每个进程中都会被执行一次。
    */
    MPI_Init(&argc, &argv);   

    //得到本进程在通信空间中的rank值, 即在组中的逻辑编号(该 rank值为0到p - 1间的整数, 相当于进程的ID。)
    MPI_Comm_rank(MPI_COMM_WORLD, &procs_id);

    /*
        –  获得进程个数 size。
        –  指定一个通信子,也指定了一组共享该空间的进程, 这些进程组成该通信子的group(组)。
        –  获得通信子comm中规定的group包含的进程的数量。
    */
    MPI_Comm_size(MPI_COMM_WORLD, &procs_count);

    //参数描述:name为返回的机器名字符串,resultlen为返回的机器名长度
    MPI_Get_processor_name(processor_name, &namelen);

    if (procs_id == 0)
        printf("进程数目为: %d\n", procs_count);
    printf("进程%s说: Hello world 来自进程 %d \n", processor_name, procs_id);

    MPI_Finalize();
    return 0;
}

配置mpi的环境便后可以使用如下的命令在编译后的程序目录中运行

mpiexec -n 10 helloworld.exe

10:这个是开启的进程数目

helloworld.exe:这个是代码编译后生成的程序 作者:没对象的野指针 链接:https://www.jianshu.com/p/2fd31665e816 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MPI基本函数
  • 函数介绍
    • 1. int MPI_Init (int* argc ,char** argv[] )
      • 2. int MPI_Finalize (void)
        • 3. int MPI_Comm_size (MPI_Comm comm ,int* size )
          • 4. int MPI_Comm_rank (MPI_Comm comm ,int* rank)
            • 5. int MPI_Send( void *buff, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档