原理

将 x 轴上的区间划分为 n 个等长的子区间,有

,
,
,......,

梯形面积可表示为

首先很容易可以得出串行计算的代码:

/*Input a, b, n*/
h = (b - a)/n;
approx = (f(a) + f(b))/2.0;
for(i = 1;i <= n-1; i++) {x_i = a + i * h;approx += f(x_i);
}
approx = h * approx;

现在考虑并行化梯形积分法

在划分阶段,通常尝试识别成尽可能多的任务,对于梯形积分法,我们可以识别出两种任务

  1. 获取单个矩形面积的任务

使用的梯度 N 越多,估计值就越精确。当梯形的数目将超过核的数量,需要将梯度区域面积的计算聚合成组。为了实现这一目标一个很自然的地方是将区间[a,b]划分成 comm_sz 个子区间。

 width = (b - a)/(double)N;/* how many trapezoids per process? */
local_n = N/nprocs;/* calculate local interals to work on */
local_a = a + (rank * (local_n * width));
local_b = local_a + (local_n * width);

2. 计算这些区域的面积和

/* message passing and totalling of local sums */
if (rank == MASTER) {integral = local_sum;for (source =1; source < nprocs; source++) {MPI_Recv(&local_sum, 1, MPI_DOUBLE, source, tag, MPI_COMM_WORLD, &status);integral += local_sum;}
}
else {MPI_Send(&local_sum, 1, MPI_DOUBLE, dest, tag, MPI_COMM_WORLD);
}

集合通信

  • 在MPI里,涉及通信子中所有进程的通信函数称为集合通信(collective communication)
  • MPI_Reduce(归约):函数将通信器内每个进程输入缓冲区( sendbuf )中的数据按给定的操作进行简单运算,并将其结果返回到根进程的输出缓冲区( recvbuf )中
  • MPI_Bcast(广播):属于一个进程的数据被发送到通信子中的所有进程
示意图

任务描述

结合课程所学基础知识,利用 MPI 进行并行计算。使用不同被积函数实现梯形面积法求解 pi的近似值。通过修改数据规模 N 和通信进程数 Comm_sz 来进行算法的性能评估以及考察与 pi 真实值之间的误差变化。

性能评估

1. 使用计时函数对程序性能进行评估,根据并行时间取决于“最慢”进程花费的时间,设计计时函数。使用 MPI_Barrier() 能够确保同一个通信子中的所有进程都完成调用该函数之前,没有进程能够提前返回。从而确保所返回时间能准确描述程序并行时间。

计时代码

2. 由于计时存在易变性,尽管每次输入的参数一样,进程数相同,运行环境也没有发生改变,但多次运行同一段程序,仍然可能会见到运行时间有变化。因为系统其余部分,尤其是操作系统的影响,是不可预知的。于是此处报告的是最短运行时间,而不是平均运行时间或者中位数时间。

实验结果

运行截图

公式 1 :

PI的串行和并行程序的运行时间(单位: 毫秒)

公式 2 :

PI的串行和并行程序的运行时间(单位:毫秒)

实验分析

1. 数据规模 N 的影响:

程序中 local_n = N/nprocs ,代表含义为积分区间均等划分的数量。由上述实验结果显示,数据规模的增大与程序运行时间并无明显线性相关性。这是由于数据规模在一定范围内受限于运行环境等因素,导致运行时间的不确定。当 N 增大到一定规模时,程序的运行时间也显著增大。

2. 通信进程数 Comm_sz 的影响:

当数据规模小时,增大进程数并未如预期显著提升程序性能。对于大的问题规模而言,增大进程数对应性能提升有很大帮助,大幅减少了运行时间。

3. 被积函数的影响:

公式 1 整体性能优于公式 2,分析可能原因是程序在处理三角函数时需花费较多时间,对整体性能产生了影响。

附件-代码:

Ubuntu Pastebin​paste.ubuntu.com

复化梯形公式matlab程序_【HPC】高性能数值计算-梯形面积法相关推荐

  1. 五步移相法matlab程序_基于结构光的相移法三维重建matlab

    一.基本原理: 正弦条纹打在三维物体上,CCD记录到的条纹由于受到三维物体高度的调制而发生扭曲,扭曲的条纹(deformed fringe)实质上为原始条纹在物体具有高度存在的位置有了附加相位,各点的 ...

  2. 基于粒子群PSO算法的风光发电与电动汽车充放电协同优化调度matlab程序_电动汽车v2g

    V2G模型 基于粒子群PSO算法的风光发电与电动汽车充放电协同优化调度matlab程序_电动汽车v2g 1.针对大规模电动汽车无序接入电网给电力系统带来的负荷压力问题,提出一种含不确定性电源的电动汽车 ...

  3. 数值分析复化梯形公式matlab,数值分析复化梯形公式,复化Simpson公式MATLAB程序

    <数值分析复化梯形公式,复化Simpson公式MATLAB程序>由会员分享,可在线阅读,更多相关<数值分析复化梯形公式,复化Simpson公式MATLAB程序(1页珍藏版)>请 ...

  4. 时间窗车辆路径问题matlab代码,【图片】蚁群算法求解有时间窗约束的车辆路径问题matlab程序_蚁群算法吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 蚁群算法求解有时间窗约束的车辆路径问题matlab程序 1 简介 带时间窗的车辆路径问题(VRPTW)一般描述为从某一物流配送中心出发,用多台车辆向多个顾 ...

  5. 二次指数平滑法matlab程序_二次指数平滑法程序

    二次指数平滑法程序 线性指数平滑法 Matlab 程序,代码如下: 注: Data- 原始数据 s- 一次和二次平滑结果 at- 预测式中的 a 参数 bt- 预测式中的 b 参数 y1- 预测结果 ...

  6. 动态矩阵控制matlab程序_【实时关注】你了解MATLAB吗?

    你了解MATLAB吗? MATLAB(矩阵实验室),全称为matrix laboratory.是由美国mathworks公司发布的主要面对科学计算.可视化以及交互式程序设计的高科技计算环境. 20世纪 ...

  7. 极限学习机的matlab程序_新程序员七宗罪,新手别踩雷

    每一次过渡到一个新的职业都需要学习曲线;在完全适应新的工作环境之前,我们都必须经历这个过程.具有较强的适应能力和对变化的灵活性的人可能会发现它是平稳和简单的;其他的人可能需要更多的时间和精力. 无论你 ...

  8. dijkstra算法matlab程序_编程习题课 | 用最短路算法为你的小地图导航

    简介:路网拓扑的正确导入方式,运筹学算法的完整实战案例,最详细的代码讲解与分享. 引言:在研究路径选择和流量分配等交通问题时,常常会用到最短路算法.用最短路算法解决交通问题存在两个难点:一.算法的选择 ...

  9. 网络matlab程序_【Matlab】官网资源盘点

    相关链接: 一个单身男博士的业余生活:技多不压身,解数独也可撩妹 手把手 | 使用 MATLAB 图像处理与深度学习解算数独 基于Matlab的杨氏双缝干涉实验模拟 基于Matlab的二维正方晶体马德 ...

最新文章

  1. [转]Windows Shell 编程 第十三章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988004】...
  2. 开放下载!解锁 Serverless 从入门到实战大“橙”就
  3. 前端学习(668):分支导读
  4. spring中需要掌握的25个常用注解
  5. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架论坛网友比较
  6. Struts2中我所遇到的内存溢出(java.lang.OutOfMemoryError)异常错误介绍
  7. 我的git仓库,顺记github配置
  8. 《码出高效:Java开发手册
  9. epoll原理详解及epoll反应堆模型
  10. 唐福林《新浪微博开放平台中的Redis实践》演讲视频
  11. 《AWR Adaptive Weighting Regression for 3D Hand Pose Estimation》研读与实践
  12. Python 解析式
  13. 实习日志 (2021.09.13)
  14. 根据Magic Number(幻数)判断文件类型
  15. 莫队算法二(树上莫队cot2,Haruna’s Breakfast)
  16. 求微信小程序开发交流群
  17. 谷款量子计算机用了多少光子,中国光量子计算机诞生 脑容量小的别看
  18. 第一台计算机采取了哪位科学家的意见,计算机一级ms office考试上机题
  19. python爬取物流信息_快递信息查询爬虫 python实现
  20. 闽高校计算机二级c语言模拟器,闽高校计算机二级C语言模拟题

热门文章

  1. 软件公司怎么定价它们的项目_如何为副项目定价
  2. aws lambda_它会融合吗? 或如何在AWS Lambda中运行Google Chrome
  3. 修改webpack配置,在react中使用less
  4. MATLAB安装机器人学工具箱
  5. clickhouse 获取几天前的日期
  6. Python2.7.16安装(Win10)
  7. 通过WiFi控制智能小车机器人制作过程详解
  8. Python《爬虫初实践》
  9. 漫步数学分析一——实数轴
  10. C++中图的简单表示法