OpenMPI(一) 点对点通信-程序员宅基地

技术标签: 数据结构与算法  

CMake

cmake_minim_required(VERSION 3.0)
project(TEST)

find_package(MPI REQUIRED)

include_directories(${MPI_INCLUDE_PATH})

add_executable(hello hello.cpp)
target_link_libraries(hello ${MPI_LIBRARIES})
int MPI_Ssend(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);
  • comm : 沟通器
  • tag : 信息标签
  • dest/source : 在该沟通器中的发送者和接受者的等级号
  • datatype : 所发送的数据的类型
  • count :发送和接受的数据数量
  • buf : 发送/接收的数据的开始地址

进程2发给进程3一个int型数字 :1

#include <mpi.h> 
#include <stdio.h>
int main(int argc, char** argv) {

    MPI_Init(&argc, &argv);

    int wrank; MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
    int witness = 0; if (wrank==2)
    {
        int modifier = 1;
        MPI_Ssend(&modifier, 1, MPI_INT, 3, 28, MPI_COMM_WORLD);
    }
    else if (wrank==3){
	MPI_Recv(&witness, 1, MPI_INT,2,28,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
	
	}
        
    printf("Rang %d, witness %d.\n", wrank, witness); 

    MPI_Finalize();
    return 0;
多参数传递
// intro/send-receive.c
int witness[] = {0, 0};  
if (wrank==2)
{
    int modifier[] = {1, 1};
    MPI_Ssend(modifier, 2, MPI_INT, 3, 28, MPI_COMM_WORLD);
}
else if (wrank==3)
    MPI_Recv(witness, 2, MPI_INT, 2, 28, MPI_COMM_WORLD, MPI_STATUS_IGNORE);

如果发送的字节数等于接收的字节数,通信将成功。例如,可以发送一个包含两个int的数组,并接收一个long或者一个double。

有关标签的详细信息

标记必须是介于0和系统相关值之间的整数,系统相关值由以下程序获取。该最大值总是≥32767。

// tag.c
#include <mpi.h> 
#include <stdio.h>

int main(int argc, char** argv) {

    MPI_Init(&argc, &argv);
    int flag;
    int* max_tag; 
   MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, &max_tag, &flag);
    printf("Maximum tag : %d.\n", *max_tag);
    MPI_Finalize();
    return 0; 
}

多个进程允许重复使用相同的标签:无论通信的模式如何,接收顺序与发送顺序相同。
MPI基本数据类型

MPI C 字节数
MPI_CHAR char 1
MPI_SHORT short 2
MPI_INT int 4
MPI_LONG long 8
MPI_UNSIGNED_CHAR unsigned char 1
MPI_UNSIGNED_SHORT unsigned short 2
MPI_UNSIGNED_LONG unsigned long 8
MPI_UNSIGNED unsigned int 4
MPI_FLOAT float 4
MPI_DOUBLE double 8
MPI_LONG_DOUBLE long double 16

所有MPI_ *类型的大小均为8个字节。

只有收到指定标签的全部消息时,接收过程才会退出对MPI_Recv的调用。 发送过程的行为更加复杂。 MPI_STATUS_IGNORE是一个可以用来代替状态变量的预定义常量。 可以创建和传达更复杂的数据结构。

转载于:https://my.oschina.net/VenusV/blog/2874709

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34033624/article/details/91741844

智能推荐

关于vue-grid-layout vue 可拖拽缩放组件的使用 已经 vue-grid-layout和echarts结合的用法_vue3可拖拽缩放 echarts-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏22次。关于vue-gird-layout 的使用方法规范<grid-layout // 网格初始化布局 数组 必填 每一项都必须具有i、x、y、w和h属性 :layout.sync="layout" // 表示网格有多少列 number 类型 非必填 默认为12 :col-num="12" // 表示_vue3可拖拽缩放 echarts

Framebuffer的配置及应用——先转载留着,以后一定要弄懂-程序员宅基地

文章浏览阅读365次。http://blog.csdn.net/tju355/article/details/6881389 借助于framebuffer,我们能够在console下面作很多事情。首先下载framebuffer的配置工具fbset:# apt-get install fbset 下载完毕后,配置文件/etc/fb.modes随之产生。比较简单的作法是用万能的vesafb,如果它被编译进了内核,如:D..._etc/fb.mode

c语言列方程组解方程,求助! C语言用矩阵求解方程组-程序员宅基地

文章浏览阅读100次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序在这个邮箱里,行列式的计算没有问题,好像问题出在了把行列式变换上,就是slove(1,n)这个函数的运算上,那位大神可以看看问题到底出在哪…… 不胜感激!!!#include #include void input(int n);void output(int n);double slove(int i , int n);double A[10][1..._c语言怎么列方程

强化学习和序列决策问题的关系-程序员宅基地

文章浏览阅读426次,点赞17次,收藏9次。序列决策问题指代理需要连续地做一系列决策,以达到长期的目标。

输入法开发解析_选择一款你熟悉的输入法软件,提取功能点,谈谈你对输入法开发的认识-程序员宅基地

文章浏览阅读1.5k次。Android平台自1.5版本之后开放了输入法框架(Input Method Framework,IMF),IMF是Android平台的特色设计。它的出现,为诞生不带实体键盘的设备提供了可能。同时,IMF开放了Android平台输入法的开发接口,为Android平台的输入法提供了可扩展性。OPhone平台继承了Android平台的输入法框架。本文首先介绍OPhone平台IMF的构成、工作机制和流程,以便广大开发者能够更好的理解OPhone平台是如何实现文字输入。接下来,将以一个简单的_选择一款你熟悉的输入法软件,提取功能点,谈谈你对输入法开发的认识

服务器安装win7系统蓝屏,安装win7系统出现蓝屏| win7安装过程中蓝屏|安装win7系统时蓝屏...-程序员宅基地

文章浏览阅读731次。2016-05-24 14:52:52  浏览量:991win7系统安装显卡后出现蓝屏问题怎么办呢?其实安装显卡后出现蓝屏也是比较常见的故障问题,网上也讲解很多关于win7系统安装显卡后出现蓝屏的资讯,可能是驱动不兼容显卡导致,如何解决呢?大家可以在win7系统开机时进入安全模式来设置与修复,轻松解决问题,下面来看看详细设置步骤吧。2017-06-23 09:51:30  浏览量:1728Win7..._华为服务器安装win7蓝屏

随便推点

PHP模板引擎-程序员宅基地

文章浏览阅读37次。2019独角兽企业重金招聘Python工程师标准>>> ...

BLE-NRF51822教程13-连接时触发配对_nrf hid 设备不能和同一台电脑连续配对?-程序员宅基地

文章浏览阅读505次。最近答疑碰到几次都提到 需要实现手机每次连接上设备后,立刻出发配对并要求输入密钥的功能。 这里就单独写一个教程供大家参考下。 配对的目的是为了对链路进行加密。以提高蓝牙的传输安全。关于配对的一些相关知识在 静态密码/动态随机密码教程中有一些介绍。对于使用来说,理解一下配对相关流程就行了。 这里额外说个问道比较多的配对和绑定区别的问题:关于配对和绑定,一些人可能一直分不清楚他..._nrf hid 设备不能和同一台电脑连续配对?

Kubernetes网络隔离_serviceaccount/weave-net unchanged-程序员宅基地

文章浏览阅读649次。Kubernetes网络隔离Network Policies隔离手段:NetworkPolicy要在Kubernetes集群中使用NetworkPolicy,CNI网络插件必须维护一个NetworkPolicy Controller,支持Kubernetes 的NetworkPolicy。实现了NetworkPolicy的网络插件包括Weave和Calico等,但不包括Flannel。通过控制循环的方式对NetworkPolicy对象的增删改查作出响应,然后在宿主机上完成iptables规则的配置工作_serviceaccount/weave-net unchanged

如何判定是NR5G 还是LTE_physicalchannelconfig.java-程序员宅基地

文章浏览阅读1k次。RIL_UNSOL_PHYSICAL_CHANNEL_CONFIGPhysicalChannelConfig.javaLTE下radio log搜RIL_UNSOL_PHYSICAL_CHANNEL_CONFIG,查看是否有以下字符串mConnectionStatus=SecondaryServing,mRat=20,有的话就是NSA_physicalchannelconfig.java

若依配置apifox自动登录获取token的脚本_若依 自动登陆-程序员宅基地

文章浏览阅读1k次。若依 apifox 自动登录_若依 自动登陆

POJ-3281Dining 最大流_3281dining 挑程-程序员宅基地

文章浏览阅读207次。这题是挑战程序设计竞赛的例题,因为师兄讲了所以就补了做法:建图的方法是:加一个源点和汇点,讲饮料或食物分别连向源点、汇点,对于每一头牛,把它和它喜欢的食物和饮料连边,由于每一头牛在考虑的时候都是只能被一个边流入和流出(因为每一头牛都是只能吃一个食物喝一个饮料),所以把牛拆点(假如拆成牛1,牛2),就在牛1和牛2之间连一条边。然后源点到汇点跑一遍dinic就可以了。代码:#p..._3281dining 挑程

推荐文章

热门文章

相关标签