题目如下,是关于MPI进程拓扑的:

请编写具有二维拓扑的MPI程序,每个程序都与其上下左右进程进行通信,请打印出它的上下左右进程的进程号和通信的内容。

代码如下,通信语句使用了非阻塞通信方式:

#include"mpi.h"

#include

#defineNUM_DIMS 2

intmain( int argc, char **argv ){

int rank,size;

int periods[NUM_DIMS] = {0,0};

int dims[NUM_DIMS] = {0,0};

int right_nbr, left_nbr;

int *data,buf=0;

int i,flag;

MPI_Comm my_comm;

MPI_Status status;

MPI_Request request;

MPI_Init(&argc, &argv);

MPI_Comm_rank( MPI_COMM_WORLD, &rank );

MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Dims_create(size, NUM_DIMS, dims);

MPI_Cart_create(MPI_COMM_WORLD, NUM_DIMS, dims, periods, 0, &my_comm);

data = (int *)malloc( size * sizeof(int) );

//初始化data数组

for(i=0;i

data[i] = 10*i;

}

flag = NUM_DIMS;

while(--flag>=0){

//flag = 1时,横向,flag = 0时,纵向

MPI_Cart_shift(my_comm, flag, 1, &left_nbr, &right_nbr);

MPI_Isend(&data[rank], 1, MPI_INT, left_nbr, 0, MPI_COMM_WORLD, &request);

MPI_Wait(&request, &status);

MPI_Isend(&data[rank], 1, MPI_INT, right_nbr, 0, MPI_COMM_WORLD, &request);

MPI_Wait(&request, &status);

if(flag){

printf("进程[%d]发送数据数据(%d)\n",rank, data[rank]);

}

if(left_nbr!=-1){

MPI_Irecv(&buf, 1, MPI_INT, left_nbr, 0, MPI_COMM_WORLD, &request);

MPI_Wait(&request, &status);

printf("进程[%d]从%s进程[%d]接收到数据(%d)\n",rank, flag?"左边":"上边", left_nbr, buf);

}

if(right_nbr!=-1){

MPI_Irecv(&buf, 1, MPI_INT, right_nbr, 0, MPI_COMM_WORLD, &request);

MPI_Wait(&request, &status);

printf("进程[%d]从%s进程[%d]接收到数据(%d)\n",rank, flag?"右边":"下边", right_nbr, buf);

}

}

MPI_Finalize();

}

进程数为8时,程序运行结果如下:

linux 进程阻塞 语句,MPI进程拓扑及非阻塞通信程序示例相关推荐

  1. java非阻塞锁_Java并发问题的非阻塞解决方案

    转自http://blog.csdn.net/u011277203/article/details/9223545 在并发环境中,对于共享资源通常会采用显式的锁机制(比如synchronized或Re ...

  2. 【Linux】进程等待wait/waitpid status详解 (非)阻塞等待(代码)

    文章目录 进程等待原因 进程等待方法 wait waitpid 获取子进程status (非)阻塞等待 进程的非阻塞等待方式代码 进程的阻塞等待方式代码 进程等待原因 fork创建了子进程,子进程帮父 ...

  3. Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】

    阅读目录 1,以阻塞方式运行: 2,以非阻塞方式运行: 转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章 ...

  4. python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用

    用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...

  5. Linux高性能服务器I/0高级应用:非阻塞connect(15)

    前言 首linux系统下,connect函数是阻塞的,阻塞时间的长度与系统相关.而如果把套接字设置成非阻塞,调用connect函数时会报错Operation now in progress,且errn ...

  6. python复制文件夹不阻塞_Python学习第54天(阻塞(blocking) IO和非阻塞(non-blocking)IO)...

    今天之所以这么早结束,主要是因为自己脑子不够用了,发现最近的定义有点多,完全搞不清楚了,打算早点睡觉,今天的内容估计要引用很多别人的部分了. 看到题目的四个东东是不是惊呆了,我也是惊呆了,同时脑子还跟 ...

  7. 高级IO(文件的读写)——阻塞式IO的困境、非阻塞式IO

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 一.阻塞式IO的困境 1.程序中读取键盘 int main(void) {// 读取键盘// 键盘就是标准输入,s ...

  8. c语言网络编程阻塞,c语言网络编程-设置非阻塞方式

    #include #include #include #include #include #include #include #include #include #include #define MA ...

  9. java处理异步非阻塞请求_Spring WebFlux 的异步非阻塞处理

    前言 随着 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞( ...

最新文章

  1. 一图读懂《“十四五”软件和信息技术服务业发展规划》
  2. java 文件引用路径_JAVA项目引用文件路径问题
  3. CentOS7中多台服务器配置时钟同步
  4. webpack 引入jquery和第三方jquery插件
  5. Altium Designer20原理图库放置引脚报错解决方案
  6. 基于Tensorflow + Opencv 实现CNN自定义图像分类
  7. JS中判断某个字符串是否包含另一个字符串的方法
  8. Spark 基础 —— sc.broadcast
  9. 腾讯游戏人脸识别系统更新!刷脸的同时语音提示付款成功_游侠网 Ali213.net
  10. idea中怎么新建vue项目_项目中使用vue-awesome-swiper
  11. 关系抽取综述及相关顶会论文介绍
  12. random.choice与random.choices
  13. 【图像配准】基于matlab SIFT图像配准【含Matlab源码 148期】
  14. html5中的错误怎么调试,页面中css调试和问题 解决的一些经验总结
  15. 金笛JDMAIL打造公务员邮件系统
  16. quartusII编译时出现Error (119013): Current license file does not support the EP4CE6F17C8 device
  17. 中国历史人物传记数据库 CBDB 若干表简介
  18. 安徽省淮南市谷歌卫星地图下载
  19. 页面加载微信聊天记录图片不显示问题
  20. 第46届ICPC 东亚区域赛(澳门) A So I‘ll Max Out My Constructive Algor...

热门文章

  1. 怎样让手机变得更安全_使不安全变得更加安全
  2. java 导出word_Java 生成Word文档
  3. CEO不当了,CTO也不做了!我要回去写代码,这才是我所热爱的!
  4. 皮一皮:有钱人的品味实在不懂...
  5. 赠书:《Java性能优化实践》,众多业内大佬推荐阅读
  6. 8 种常见的SQL错误用法
  7. 快速提升页面性能的必备利器
  8. 从零开始入门 K8s | K8s 的应用编排与管理
  9. 命令行编译_新鲜货:C++ Build Insights告诉你为啥你的代码编译这么慢
  10. git项目比对_Git实战之Git对比SVN