实验目的

搭建MPI并行计算环境,利用课件中计算PI的公式,计算PI值,n分别使用100、1000、10000计算结果。要求写出实验报告,并对实验结果进行分析,分析n值对PI精度的影响,并行进程个数对计算速度的影响。

实验内容及代码实现

PI计算公式

利用矩形求PI

MPI流程图:

C语言代码实现:

#include<stdio.h>
#include<mpi.h>
int main(int argc,char *argv[])
{int myid,np,i,j;int tag=666;double pi=0.0; double fVal;//fVal代表取Xi所对应的函数值   4/(1+x^2) 即每个矩形的高度int n=100;//改变n的值,表示改变切分小矩形的个数,越多越接近极限思维MPI_Status status;double h=(double)1/n; //每个矩形的宽度double local=0.0;//每个进程计算的面积和 double start,end;double a;MPI_Init(&argc,&argv);//启动并行程序    MPI_Comm_size(MPI_COMM_WORLD,&np);//获取进程总数,np代表进程数,在运行时可以通过 -np设置MPI_Comm_rank(MPI_COMM_WORLD,&myid);//获取当前进程号start=MPI_Wtime();//记录开始时间for(i=myid;i<n;i+=np) //利用np个进程同时计算各部分矩形面积{a=(i+0.5)*h;fVal=4.0/(1.0+a*a);//得到f(xi) local+=fVal ; }local=local*h;//得到该进程所计算的面积 //进程号!=0的进程计算的结果发送到进程0上面 if(myid!=0){   MPI_Send(&local,1,MPI_DOUBLE,0,myid,MPI_COMM_WORLD); }if(myid==0) //进程号为0就累加每个进程的计算结果 {pi=local;//得到进程0的值 后面接收就会覆盖这个值 for(j=1;j<np;j++){MPI_Recv(&local,1,MPI_DOUBLE,j,j,MPI_COMM_WORLD,&status); //把其他进程的结果发送到local中 pi+=local;//得到所有的面积和 }}end=MPI_Wtime();//结束计算时间 if(myid==0){printf("PI = %.15f\n",pi);printf("Time = %lf\n",end-start); printf("np = %d\n",np);}MPI_Finalize();return 0;
}

实验代码参考博客:https://www.cnblogs.com/JuiceDreamer/p/10968801.html
np进程数,本人应用的实验室集群环境,通过:

mpicc -c mpi.c
mpicc -o mpi mpi.o
mpicc -o mpi mpi.c
mpirun -np 1  mpi

完成编译和运行。-np设置了并行进程数

实验结果

1、改变n的值对时间和准确度影响

n 10 100 1000 10000 100000000
PI 3.142425985001098 3.141600986923125 3.141592736923127 3.141592654423128 3.141592653589751
ERROR(ABS) 0.000833331 8.33333E-06 8.33333E-08 8.3333E-10 3.9E-14
Time 0.000172 0.000214 0.000355 0.000422 0.036362

分析:

本次对照采用默认进程数20,可以看到随着n个数的增加,计算所得PI的准确度越来越高,因为n代表了切分的小矩形的个数,切分的越小越接近真实值,而极限就是切分为无数个小矩形。当n较小时(如10、100、1000)每次运行时间上的增加效果并不明显,甚至不会增加,但当n足够大时,可以明显看到所需时间的增加。

2、改变进程数对计算速度的影响(图表中纵轴代表运行时间,横轴代表并行进程数)

结果分析:

实验环境为实验室所用集群,性能比较强大,我的用户权限可以支持的CPU可用核心上限为20个(总核心数不止20个),随着进程个数的增加,可以看到程序运行所用时间是逐步下降的,然而查阅资料有说1,后续时间会因超出CPU核数而导致运行时间增加。


同时实验过程中可以注意到当n值比较小时,可以看到并行进程数对时间的影响并无明显的关系,甚至并行计算并不一定会对运行时间的提升有所帮助。


  1. https://blog.csdn.net/silence401/article/details/80445846 ↩︎

MPI并行计算PI,并进行n值和并行进程个数影响探讨相关推荐

  1. 搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]

    文章目录 一. 选在Linux,Ubuntu或者Windows上搭建mpi环境 First of all What's more 二.VS配置mpi 三.计算pi值 (1)基础编译环境的构建 (2)M ...

  2. Ubuntu下搭建MPI并行计算环境

    Ubuntu下搭建MPI并行计算环境 [日期:2012-10-10] 来源:Linux社区 作者:hs794502825 [字体:大 中 小] 在这里面可以选择一个合适的openmpi安装包,此处我选 ...

  3. 永磁同步电机矢量控制基础补充(四)——如何设定电流环PI调节器和转速环PI调节器的限幅值

    注: 1:此为永磁同步控制系列文章之一,应大家的要求,关于永磁同步矢量控制的系列文章已经在主页置顶,大家可以直接去主页里面查阅,希望能给大家带来帮助,谢谢. 2:矢量控制的六篇文章后.弱磁.MTPA. ...

  4. MPI并行计算学习笔记6——行主元高斯消去法

    1.运行环境:VS2017 + MPI 2.参考资料:MPI与OpenMP并行程序设计 (Michael J.Quinn 著: 程文光 武永卫译 ) 第十二章线性方程组的求解(P243) 3.算法说明 ...

  5. 【MPI并行计算】计算cosx在a~b的积分

    先将a~b分成p份,然后将每个p份分为n份,对于最小的n份,其在x轴的长度为(b-a)/p/n=h,那么这最小的一份的面积就是h乘以高度,高度是cos(该长方形的在x轴的中点的坐标),其中该长方形的在 ...

  6. 【Android 进程保活】oom_adj 值 ( oom_adj 值对应的进程优先级 | oom_adj 值动态改变 | 进程保活优化方向 )

    文章目录 一.oom_adj 值对应的进程优先级 二.oom_adj 值动态改变 1.正常运行时的 oom_adj 值 2.按下 Home 键后的 oom_adj 值 3.按下回退键后的 oom_ad ...

  7. 【Android 进程保活】oom_adj 值 ( 简介 | 查询进程 PID | 根据进程 PID 查询 oom_adj 值 )

    文章目录 一.oom_adj 值简介 二.查询进程号 PID 三.查询进程对应的 oom_adj 值 一.oom_adj 值简介 oom_adj 值是 Linux 内核为每个进程分配的 , 该值可以反 ...

  8. 处理数字_6_NULL值的列的个数

    NULL值的列的个数 需求描述 需求:取EMP表里COMM字段为空的个数. 解决方法:通过SUM CASE WHEN comm IS NULL - 来统计. 注: 数据库数据集SQL脚本详见如下链接地 ...

  9. 处理数字_5_非NULL值的列的个数

    非NULL值的列的个数 需求描述 需求:取EMP表里COMM字段非空的个数. 解决方法:通过COUNT(comm)来完成. 注: 数据库数据集SQL脚本详见如下链接地址 员工表结构和数据初始化SQL脚 ...

最新文章

  1. Active Diretory 全攻略(五)--规划和建立组
  2. redis单线程为什么快?
  3. 浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose
  4. 数据结构基础:线性表学习笔记
  5. Visual Studio 使用说明文档、VScode 使用手册
  6. shell基础05 处理用户输入
  7. python函数示例_带Python示例的complex()函数
  8. Anaconda3安装后,解决cmd中jupyter,pip,python不是内部命令以及jupyter更改默认路径问题
  9. 实战 Comet 应用程序开发
  10. 详解 Qt 串口通信程序全程图文 (3)
  11. Tensorflow中使用tfrecord,队列方式读取数据
  12. Cookie和Session专题
  13. Linux find 命令概览
  14. 【图像分割】基于matlab视网膜图像分割【含Matlab源码 382期】
  15. 2019java后端面试集合篇最值得收藏的(一)
  16. 2021年UI设计面试问题及答案解析
  17. matlab TVdenoise,TV_Denoise TV全变分模型图像去噪 以及高斯模糊处理 2D Graphic 2D图形编程 272万源代码下载- www.pudn.com...
  18. 大佬带你看源码!BTAJ大厂最新面试题汇集,已拿offer附真题解析
  19. 自动建站.实现虚拟二级目录
  20. Linux 下nm 、objdump 和 readelf 比较

热门文章

  1. 快速排序三种实现方式及其优化
  2. 玉林首创广西全区不动产登记与房产交易一体化信息平台
  3. LabVIEW中使用CIN节点
  4. flexsim案例分析3
  5. 向量几何在游戏编程中的使用6
  6. iToolab UnlockGo for Mac,iOS设备解锁工具
  7. 【备考01组29号】2017年全国硕士研究生招生考试英语(二)
  8. Activity渲染完成第一帧时机
  9. 西门子PLC协议转换CIP协议,实现与罗克韦尔/AB、欧姆龙PLC之间通讯
  10. Android学习笔记 75. 单元测试