MPI 之 点对点通信的一个实例

MPI 之 点对点通信的一个实例目标:通过MPI实现100次点对点通信,并计算平均每次的通信时间。代码如下:/**点对点通信100次,计算平均通信时间,并观察传输数据量大小和传输时间关系数据量变化采用动态内存方式从4kb增加到400M,每次增大400kb**/#include<stdio.h>//标准输入输出头文件#include<stdlib.h>//标准库#incl…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目标:通过MPI 实现100次 点对点通信,并计算平均每次的通信时间。

代码如下:

/**点对点通信100次,计算平均通信时间,并观察传输数据量大小和传输时间关系
   数据量变化采用动态内存方式  从4kb增加到400M,每次增大400kb
**/

#include<stdio.h>//标准输入输出头文件
#include<stdlib.h>//标准库
#include<mpi.h>//mpi的接口


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


  int i, j, k, my_rank, nprocs;
  double  data_size;
  double start_time, end_time, time_cost, average_time;
  int *p;// 动态分配内存,存放int型数据 1个int 4个字节(Byte)
  
  
   
  MPI_Init(&argc,&argv);//启动并行环境
  MPI_Comm_size(MPI_COMM_WORLD, &nprocs);//获取总进程数 
  MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);//获取本地进程编号 
  MPI_Status status; 
 
 for (i=1; i<=1e5; i=i+1e2)
 {  
    p = (int*)malloc( (sizeof(int)*1000)*i); //分配i个内存空间,每个大小为sizeof(int)*1000 即4000B=4kb, 分配的内存内随机赋值
    if(!p) 
       { 
         printf("动态分配内存失败!\n");  
         exit(1); 
        } 
    if(my_rank==0){printf("开始传送 %d×4kb/400M 数据\n",i);}
     
     start_time=MPI_Wtime();//获取墙上时间
    //来回传输100次
     for(k=1;k<=100;k++)
     {
      if(my_rank==0)
        {
          MPI_Send(p, i, MPI_INT, 1, k, MPI_COMM_WORLD);
          printf("第%d回合: %d发送数据完成……\n",k,my_rank);
        }
      if(my_rank==1)
        {
          MPI_Recv(p, i, MPI_INT, 0, k, MPI_COMM_WORLD, &status);
          MPI_Send(p, i, MPI_INT, 0, k, MPI_COMM_WORLD);
          printf("第%d回合:%d接收发送数据完成……\n",k,my_rank);
         }
      if(my_rank==0)
        {
          MPI_Recv(p, i, MPI_INT, 1, k, MPI_COMM_WORLD, &status);
          //MPI_Send(p, i, MPI_INT, 1, k, MPI_COMM_WORLD);//不能再MPI_Send,与上面突,死锁。
          printf("第%d回合succeed! \n", k);
         }
       } 
       end_time=MPI_Wtime();
       time_cost=end_time-start_time;
       average_time=time_cost/100;
       data_size=i/1e3;//转换为M为单位

      //创建experiment_data.txt文件,将数据写入
      FILE *fp;
      fp=fopen("experiment_data.txt","a+");
      fprintf(fp,"%lf,%lf\n",data_size, average_time);
      fclose(fp);
      free(p);

      if(my_rank == 0)
      printf("%f M 数据包发送接收完成 \n", data_size);
      printf("来回传输一次时间为 %lf \n ",average_time);

   }
  
     MPI_Finalize();//结束并行环境
     return 0;     
}
 

运行结果:

experiment_data.txt文件

下面将数据用matlab可视化

如何利用matlab读取txt文件并将数据可视化参看我的另一篇博文。

下图是可视化结果:y轴是时间(单位 s),x轴是数据大小(单位M)

                                     MPI 之 点对点通信的一个实例

 

可以看到,随着数据的增大,时间整体上呈现线性增长。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159986.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 后端框架的学习流程[通俗易懂]

    后端框架的学习流程[通俗易懂]有不少初学者问到,我想学习后端,但是又不知道该怎么学,所以我决定把这几年的经验和经历整理成一篇文章,分析后端的路该怎么走,先说明下面仅仅是个人心得,也许与外面的理论有所不同。(文章最后面会附上学习路线地图和一些自己看过的书籍)后端初接触后端首先需要学习的是html,css和js,也许你会问做网页不是前端做的事情吗?答案是对于真实开发环境后端很多时候还兼顾

    2022年5月4日
    50
  • 手游云测工具TestBird:测试走入垂直细分领域

    手游云测工具TestBird:测试走入垂直细分领域

    2021年5月11日
    117
  • py2exe怎么安装_py安装及开发环境设置

    py2exe怎么安装_py安装及开发环境设置一、简介py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32comclient和server,和其它的独立程序。py2exe是发布在开源许可证下的。目前只有py…

    2025年10月25日
    3
  • 全面详解c语言使用cJSON解析JSON字符[通俗易懂]

    全面详解c语言使用cJSON解析JSON字符[通俗易懂]为什么选择cJSON来解析JSON字符串?因为简洁又简单,而且效率又快,cJSON工程文件也非常简单,仅一个.c文件和一个.h文件!如果要自己写的话就是重造轮子了,况且效率上也不一定会比cJSON更好!且文件体积大小不到30k,源代码思路也非常清晰,也非常适合研究。点我下载cJSON当我们下载好cJSON只需要把.c和.h文件包含文件拷贝到我们工程目录下,并将头文件和实现文件…

    2022年6月30日
    81
  • DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运[通俗易懂]

    DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运[通俗易懂]DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运导读:2020年的开篇,开的太意外,无论以什么样的眼光去回顾2020,它一定是载入史册的一年。突然起来的疫情,打得人们措手不及!人生的确不易,每个人都在负重前行,致敬那些可爱的人,感谢钟院士,感谢医护人员,感谢我们这这个强大的国家。2020年,太特殊,特殊的就像一场梦,无数的关键词涌入了记忆的心头:新冠,武汉,没毕业照,科比……前几天看到这样的一段话:2020年,最大的收获是一身伤,一身债,半条命、还活.

    2022年7月26日
    5
  • 电脑蓝屏代码0x0000000f4_电脑蓝屏代码

    电脑蓝屏代码0x0000000f4_电脑蓝屏代码Stop:0x000000F40x000000f4CRITICAL_OBJECT_TERMINATION此问题主要由于系统重要进程被意外终止。请使用干净启动的操作来排除软件方面的干扰。开机按F8进安全模式,设置操作系统进入干净启动状态:a.点击开始菜单并在搜索框中输入msconfig,然后按回车键。b.点击“服务”标签卡,选择“隐藏所有的微软服务”,然后点击全部禁…

    2022年10月8日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号