高性能并行计算华为云实验三:蒙特卡罗算法实验

news2024/10/7 5:54:26

目录

一、实验目的

二、实验说明

三、实验过程

3.1 创建蒙特卡罗算法源码

3.2 Makefile的创建与编译

3.3 主机文件配置与运行监测​​​​​​​

四、实验结果与分析

4.1 原教程对应的实验结果

4.2 改进后的实验结果

五、实验思考与总结

5.1 实验思考

5.2 实验总结

END~


一、实验目的

1.1 掌握蒙特卡罗算法程序的编写以及编译运行。

1.2 实现在多台主机上编译运行蒙特卡罗算法的程序。

二、实验说明

华为鲲鹏云主机、openEuler 20.03 操作系统;

四台主机名称及ip地址如下:

122.9.37.146    zzh-hw-0001

122.9.43.213    zzh-hw-0002

116.63.11.160   zzh-hw-0003

116.63.9.62     zzh-hw-0004

三、实验过程

3.1 创建蒙特卡罗算法源码

首先创建 MonteCarlo 目录存放该程序的所有文件, 并进入 MonteCarlo 目录(四台主机都执行),具体通过输入如下命令:

mkdir /home/zhangsan/MonteCarlo

cd /home/zhangsan/MonteCarlo

然后通过输入vim MonteCarlo.cpp创建 MonteCarlo 源码 MonteCarlo.cpp(四台主机都执行)。代码输入结束后,输入:wq完成文件保存。部分代码如下:

①圆周率计算关键代码

truct timeval start, stop;
gettimeofday(&start, NULL);
MC::PI::calPiRets *rets;
rets = MC::RunMC<MC::PI::calPiArgs, MC::PI::calPiRets>(n);
#pragma omp parallel for reduction(+ : count)
for (int i = 0; i < n; i++) {
    if (rets[i].hit) {
        count += 1.0;
    }
}
double pi_estimate = count * 4.0 / n;
gettimeofday(&stop, NULL);
double elapse = (stop.tv_sec - start.tv_sec) * 1000 + (stop.tv_usec - start.tv_usec) / 1000;
cout << "采样数为 " << n << " 时圆周率计算耗时: " << elapse << " ms" << endl;

②定积分计算关键代码

gettimeofday(&start, NULL);
 MC::Integral::val *rets2;
 rets2 = MC::RunMC<MC::Integral::variable, MC::Integral::val>(n);
 count = 0;
#pragma omp parallel
 {
#pragma omp for reduction(+ : count)
 for (int i = 0; i < n; i++) {
 count += rets2[i].y;
 } }
//cout << "Integral = " << double(count / n) << endl;
 gettimeofday(&stop, NULL);
 elapse = (stop.tv_sec - start.tv_sec) * 1000 +
 (stop.tv_usec - start.tv_usec) / 1000;
cout << "采样数为 " << n << " 时多维积分计算耗时: " << elapse << " ms" << endl;

接下来输入vim MonteCarlo.h继续创建 MonteCarlo 头文件 MonteCarlo.h(四台主机都执行)。

3.2 Makefile的创建与编译

首先输入vim Makefile创建Makefile文件,并输入如下内容:

CC = g++
CCFLAGS = -I . -O2 -fopenmp
LDFLAGS = # -lopenblas
all: montecarlo 
montecarlo: MonteCarlo.cpp
    ${CC} ${CCFLAGS} MonteCarlo.cpp -o montecarlo ${LDFLAGS}
clean:
    rm montecarlo

输入:wq完成文件保存后输入make开始进行编译,结果如下

生成了可执行文件montecarlo .

3.3 主机文件配置与运行监测

首先输入vim /home/zhangsan/MonteCarlo/hostfile进行主机文件配置,内容如下:
zzh-hw-0001:2

zzh-hw-0002:2

zzh-hw-0003:2

zzh-hw-0004:2

然后输入vim run.sh进行脚本文件编写

app=$1
if [ $app = "montecarlo" ]; then
    ./montecarlo ${2}   ${3}
fi

此处对命令行输入进行了改动,将采样点数作为作为可变参数放入命令行。原教程中采样点数固定为8000000。对此部分进行改动,也是便于研究采样点数对实验结果的影响。

然后分别执行以下命令,查看蒙特卡罗算法运行结果(只需要在任意一台主机上执行),结果在下一部分进行展示。

四、实验结果与分析

4.1 原教程对应的实验结果

受篇幅限制仅展示处理机数量为1和8的结果,1-8 数字表示启动处理的进程数量。

从结果中可以看出出蒙特卡罗算法程序已经在集群中并行运行起来。其中第一行输出代表的是蒙特卡罗算法统计耗时,第二行输出代表的是 Integral 统计耗时。可以得出结论,随着进程数量的增加,耗时越来越少。

4.2 改进后的实验结果

命令行输入bash run.sh montecarlo a b

a为进程数量,b为设置的采样点数

根据上述结果,可以观察到如下现象,并做出对应解释

①随采样数增加,计算耗时增加

我认为这是直观的,因为随着采样数增加,需要进行的计算量也增加,因此计算耗时增加是合理的。

②计算耗时增长不是线性的

因为当采样数增加时,计算耗时的增长速度不是简单的线性关系。例如,当从80000增加到800000时,圆周率计算耗时从0ms增加到6ms,但当从800000增加到8000000时,圆周率计算耗时从6ms增加到61ms。这表明随着采样数的增加,计算耗时的增长速度逐渐减缓。

③多维积分计算耗时更高

与圆周率计算相比,多维积分计算的耗时更高。例如,在相同的采样数下,多维积分计算耗时要比圆周率计算耗时长一个数量级以上。

④增加并行度可以减少计算耗时

可以看到,在某些情况下,增加并行度(如从8到1)可以显著减少计算耗时。这是因为增加并行度可以使得更多的计算任务同时进行,从而提高了计算效率。

保持进程数不变,进一步研究采样点数与运行耗时之间的关系

整理出的实验数据如下

处理机数量

采样点数

圆周率计算耗时/ms

定积分计算耗时/ms

5

10000000

92

663

5

20000000

184

1322

5

30000000

275

1987

5

50000000

459

3380

5

80000000

734

5286

将此部分数据进行可视化,观察其变化规律

可以看出,当线程数保持不变时,部分区间确实存在一种近似的线性关系。随着采样数的增加,计算耗时也呈现出近似线性增长的趋势。这可能是由于在给定的硬件和软件环境下,随着采样数的增加,计算任务的复杂性增加,导致计算耗时呈线性增长。

五、实验思考与总结

5.1 实验思考

①g++中的-O1、-O2、-O3 的区别是?

在g++编译器中,-O1、-O2和-O3是优化级别的选项,它们指示编译器在编译代码时所采用的优化策略的强度。以下是每个优化级别的简要说明:

 -O1:启用基本优化。这是一组较为保守的优化措施,旨在提高程序的执行效率而不增加编译时间。这些优化通常包括消除冗余代码、常量传播、死码删除等。

-O2:进一步优化。这个级别在-O1的基础上增加了更多的优化措施,如循环展开、分支预测、更激进的内联函数等。-O2旨在提供更好的性能,但编译时间会比-O1长。

 -O3:最高级别的优化。除了-O2中的优化外,-O3还可能包括进一步的优化技术,如更激进的内联、浮点单位优化等。这个级别可能会增加编译时间,有时也可能引入更多的风险,因为它可能会改变程序的控制流。

每个优化级别都旨在提高程序的性能,但随着优化级别的提高,编译时间也会增加,且程序的调试可能会变得更加困难。通常,选择哪个优化级别取决于程序的性能要求和开发阶段。在开发初期,可能使用较低的优化级别以便于调试;而在发布最终版本时,可能会使用更高的优化级别来提高性能。

②蒙特卡罗算法的并行化原理

蒙特卡罗算法的并行化通过将问题分解为可独立完成的多个子任务,利用随机抽样的独立性,实现在多核处理器、GPU或分布式计算集群上的并行执行。每个计算节点或进程负责一部分抽样和计算工作,减少了通信需求并降低了通信开销。完成所有子任务后,结果被收集并合并,得到最终的统计估计。为了最大化并行效率,合理分配子任务至计算节点以实现负载均衡至关重要。同时,考虑到并行执行中个别节点可能的故障,实现容错机制也是必要的。这种并行化策略显著提高了计算效率,尤其适用于解决需要大量计算资源和时间的复杂系统模拟、风险分析和优化问题,使得在较短时间内完成更多抽样,获得更精确或更可靠的结果成为可能。

5.2 实验总结

在华为鲲鹏云服务器上进行的蒙特卡罗算法实验表明,随着并行进程数量的增加,算法的统计耗时显著减少,验证了并行化策略在提高计算效率方面的有效性。

在实验中,我发现随着采样点数的增加,蒙特卡罗算法的计算耗时相应上升,但这种增长是非线性的。特别是,多维积分任务的耗时远高于圆周率计算,显示出更高计算复杂度。此外,提高并行度能有效减少耗时,因为并行处理允许任务同时执行,提升了计算效率。而在固定进程数下,采样点数与耗时之间的关系近似线性,有助于预测计算时间。

通过这些实验操作,我不仅掌握了蒙特卡罗算法程序的编写和编译运行,还深入理解了并行计算在实际应用中的优势和潜在的优化空间。实验结果强调了合理分配计算资源和优化算法对于提高蒙特卡罗模拟性能的重要性。

END~

早上坏~
偶尔失败,经常偶尔~~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1864656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效安全的IPXProxy代理服务:摆脱免费代理的烦恼

​在现代互联网环境中&#xff0c;IP代理的使用变得越来越普遍。无论是企业级用户还是个人用户&#xff0c;都需要借助IP代理来实现隐私保护、网络加速和跨区域访问。然而&#xff0c;面对市场上众多的代理服务&#xff0c;有些用户会因为成本考虑而选择免费代理。然而&#xf…

用python做地图绘制

1.写代码 from pyecharts.charts import Map from pyecharts.options import VisualMapOptsmapMap() data[("上海市",122),("北京市",12),("天津市", 12),("广东省",22) ] map.add("测试地图",data) map.set_global_opts(v…

惠海 H6901B升压恒流3.7V 7.4V 12V 24V 30V 36V 48V 60V 80V 100V LED灯杯方案

H6901B是一款升压型LED恒流驱动芯片&#xff0c;具有良好稳定性的特点。H6901B的主要特点包括宽输入电压范围&#xff08;2.7V-100V&#xff09;、高工作频率&#xff08;1MHz&#xff09;以及多种保护功能&#xff08;如芯片供电欠压保护、过温保护、软启动等&#xff09;。此…

专业,城市,院校,高考填报志愿的三要素怎么排序?

我认为排序方式可以参考&#xff1a; 城市>学校 同样是计算机专业&#xff0c;不论学校的高低&#xff0c;一线城市更容易接触到时代的前端&#xff0c;有更多学习机会&#xff0c;有更好的文化氛围&#xff0c;同样在就业的时候也更容易接触到企业.... 如果要把专业考虑进…

openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 二(51-)

环境&#xff1a;OpenCV3.2.0 VS2015 51、Mean-Shift算法分割图像 cv::pyrMeanShiftFiltering() 参考链接&#xff1a;【从零学习OpenCV 4】分割图像——Mean-Shift分割算法 Mean-Shift算法又被称为均值漂移法&#xff0c;是一种基于颜色空间分布(彩色图像的像素值)的图像分割…

C语言实战 | “贪吃蛇”游戏重构

程序设计的过程中,面对复杂项目,利用模块化思维分解任务,是关键的一步。读者一定要掌握模块化思维设计思维,为将来团队合作、协同完成大型应用软件做好准备。 01、“贪吃蛇”游戏 有了游戏框架之后,按照游戏框架完成“贪吃蛇”游戏。 “贪吃蛇”游戏角色有两个:“贪吃蛇…

高考填报志愿,为什么要做性格测试?

我认为兴趣跟报志愿是有很大关系的。兴趣可以让你学习的动力更强&#xff0c;可以让你在困难面前更加坚强。根据兴趣爱好来选择的专业&#xff0c;可以让你更容易获得职业满足感&#xff0c;成就感&#xff0c;就酱。 有些人说兴趣变成了职业&#xff0c;就没有兴趣了&#xf…

10.二次开发——黑马程序员Java最新AI+若依框架项目

目录 前言零、使用若依修改器修改项目名称一、创建sky-merchant模块1.创建模块2. 在新模块中导入依赖3. 父工程锁定版本4. sky-admin 导入依赖 二、菜品管理页面生成1.根据页面原型&#xff0c;确定表信息2.设计表3使用代码生成器生成页面4&#xff0c;下载tb_dish代码并分别导…

【AI编译器】triton学习:编程模型

介绍 动机 在过去十年里&#xff0c;深度神经网络 (DNNs) 已成为机器学习 (ML) 模型的一个重要分支&#xff0c;能够实现跨领域多种应用中的最佳性能。这些模型由一系列包括参数化&#xff08;如滤波器&#xff09;和非参数化&#xff08;如缩小值函数&#xff09;元件组成的…

arco.design 利用 a-input-search 和 a-trigger 自己实现一个关键字查询select

先看效果 <div class"search-content" id"map-search-wrapper"><a-triggerpopup-visibleposition"bl"autoFitPopupWidth:popup-offset"4":unmount-on-close"true"trigger"click"popup-container"#m…

一年前端|17K|极光推送5轮面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景 渣本毕业&#xff0c;学历一般中文系出身&#xff0c;非科班大四转行&#xff0c;总体基础不行一年工作年限&#xff0c;项目毫无亮点&#x…

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展&#xff0c;我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代&#xff0c;一个名为Vatee万腾的平台正以其独特的魅力&#xff0c;引领我们走向一个更加智能的未来。 Vatee万腾&#xff0c;这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

抖音外卖服务商入驻流程及费用有哪几种?申请不通过怎么办?

随着多家互联网大厂布局的不断深入&#xff0c;本地生活的市场前景和收益潜力逐渐展现了在人们眼前&#xff0c;连带着其重点板块之一的外卖市场也成为了众多资本和创业者的重点关注对象。在此背景下&#xff0c;抖音外卖的正式开放&#xff0c;更是将本就火热的本地生活和外卖…

技术回顾:冷却风机

每天一篇行业发展资讯&#xff0c;让大家更及时了解外面的世界。 更多资讯&#xff0c;请关注B站/公众号【莱歌数字】&#xff0c;有视频教程~~ 在这一期中&#xff0c;我们的重点是冷却应用中使用的冷却风扇在电子热管理。这些专利显示了不同发明者所关注的一些显著特征。 带…

【windows】win11系统跳过联网和微软账户登录,实现本地账户登录

问题原因&#xff1a;现在市面上销售的品牌笔记本和台式机基本上都预装了正版的Windows S11家族中文版操作系统&#xff0c;联网后系统会自动激活。在win11的版本中&#xff0c;隐藏了关闭跳过连接网络的按钮&#xff0c;默认强制需要注册微软账户登录才能正常使用。 一、跳过…

Windows 10 11 Install Docker-Desktop

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…

基于React18+Appwrite实现类似Instagram的社交APP

源码地址&#xff1a;https://github.com/sikichan/Ins-social-media-app 请给我一个Star ⭐️ 谢谢&#xff01;

数据结构——跳表Skip List

本文对跳表的定义、实现、应用等进行简单总结。 一、 介绍 1.定义 跳表&#xff08;Skip List&#xff09;&#xff1a;是一种概率性数据结构&#xff0c;由William Pugh在1990年提出&#xff0c;主要用于在有序的元素集合上进行快速的搜索、插入和删除操作。跳表的效率与平衡…

AD手动添加网络

AD手动添加网络&#xff0c;&#xff08;用于不画原理图直接画PCB用&#xff09;一看就懂_ad不用原理图画pcb-CSDN博客https://blog.csdn.net/feifeiccode/article/details/107198441#:~:text%E6%B7%BB%E5%8A%A0%E8%A6%81%E6%B7%BB%E5%8A%A0%E7%9A%84%E7%BD%91%E7%BB%9C,%E6%8C…

12个RAG常见痛点及解决方案

Barnett等人的论文《Seven Failure Points When Engineering a Retrieval Augmented Generation System》介绍了RAG的七个痛点&#xff0c;我们将其延申扩展再补充开发RAG流程中常遇到的另外五个常见问题。并且将深入研究这些RAG痛点的解决方案&#xff0c;这样我们能够更好地在…