MPI并行计算PI,并进行n值和并行进程个数影响探讨
实验目的
搭建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值比较小时,可以看到并行进程数对时间的影响并无明显的关系,甚至并行计算并不一定会对运行时间的提升有所帮助。
https://blog.csdn.net/silence401/article/details/80445846 ↩︎
MPI并行计算PI,并进行n值和并行进程个数影响探讨相关推荐
- 搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]
文章目录 一. 选在Linux,Ubuntu或者Windows上搭建mpi环境 First of all What's more 二.VS配置mpi 三.计算pi值 (1)基础编译环境的构建 (2)M ...
- Ubuntu下搭建MPI并行计算环境
Ubuntu下搭建MPI并行计算环境 [日期:2012-10-10] 来源:Linux社区 作者:hs794502825 [字体:大 中 小] 在这里面可以选择一个合适的openmpi安装包,此处我选 ...
- 永磁同步电机矢量控制基础补充(四)——如何设定电流环PI调节器和转速环PI调节器的限幅值
注: 1:此为永磁同步控制系列文章之一,应大家的要求,关于永磁同步矢量控制的系列文章已经在主页置顶,大家可以直接去主页里面查阅,希望能给大家带来帮助,谢谢. 2:矢量控制的六篇文章后.弱磁.MTPA. ...
- MPI并行计算学习笔记6——行主元高斯消去法
1.运行环境:VS2017 + MPI 2.参考资料:MPI与OpenMP并行程序设计 (Michael J.Quinn 著: 程文光 武永卫译 ) 第十二章线性方程组的求解(P243) 3.算法说明 ...
- 【MPI并行计算】计算cosx在a~b的积分
先将a~b分成p份,然后将每个p份分为n份,对于最小的n份,其在x轴的长度为(b-a)/p/n=h,那么这最小的一份的面积就是h乘以高度,高度是cos(该长方形的在x轴的中点的坐标),其中该长方形的在 ...
- 【Android 进程保活】oom_adj 值 ( oom_adj 值对应的进程优先级 | oom_adj 值动态改变 | 进程保活优化方向 )
文章目录 一.oom_adj 值对应的进程优先级 二.oom_adj 值动态改变 1.正常运行时的 oom_adj 值 2.按下 Home 键后的 oom_adj 值 3.按下回退键后的 oom_ad ...
- 【Android 进程保活】oom_adj 值 ( 简介 | 查询进程 PID | 根据进程 PID 查询 oom_adj 值 )
文章目录 一.oom_adj 值简介 二.查询进程号 PID 三.查询进程对应的 oom_adj 值 一.oom_adj 值简介 oom_adj 值是 Linux 内核为每个进程分配的 , 该值可以反 ...
- 处理数字_6_NULL值的列的个数
NULL值的列的个数 需求描述 需求:取EMP表里COMM字段为空的个数. 解决方法:通过SUM CASE WHEN comm IS NULL - 来统计. 注: 数据库数据集SQL脚本详见如下链接地 ...
- 处理数字_5_非NULL值的列的个数
非NULL值的列的个数 需求描述 需求:取EMP表里COMM字段非空的个数. 解决方法:通过COUNT(comm)来完成. 注: 数据库数据集SQL脚本详见如下链接地址 员工表结构和数据初始化SQL脚 ...
最新文章
- Active Diretory 全攻略(五)--规划和建立组
- redis单线程为什么快?
- 浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose
- 数据结构基础:线性表学习笔记
- Visual Studio 使用说明文档、VScode 使用手册
- shell基础05 处理用户输入
- python函数示例_带Python示例的complex()函数
- Anaconda3安装后,解决cmd中jupyter,pip,python不是内部命令以及jupyter更改默认路径问题
- 实战 Comet 应用程序开发
- 详解 Qt 串口通信程序全程图文 (3)
- Tensorflow中使用tfrecord,队列方式读取数据
- Cookie和Session专题
- Linux find 命令概览
- 【图像分割】基于matlab视网膜图像分割【含Matlab源码 382期】
- 2019java后端面试集合篇最值得收藏的(一)
- 2021年UI设计面试问题及答案解析
- matlab TVdenoise,TV_Denoise TV全变分模型图像去噪
以及高斯模糊处理 2D Graphic 2D图形编程 272万源代码下载- www.pudn.com...
- 大佬带你看源码!BTAJ大厂最新面试题汇集,已拿offer附真题解析
- 自动建站.实现虚拟二级目录
- Linux 下nm 、objdump 和 readelf 比较