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

目录

一、实验目的

二、实验说明

三、实验过程

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~

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零实现GPT【1】——BPE

文章目录 Embedding 的原理训练特殊 token 处理和保存编码解码完整代码 BPE&#xff0c;字节对编码 Embedding 的原理 简单来说就是查表 # 解释embedding from torch.nn import Embedding import torch# 标准的正态分布初始化 也可以用均匀分布初始化 emb Embedding(10, 32) …

探索Agent AI智能体的未来

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;Agent AI智能体正成为一种改变世界的新力量。这些智能体不仅在当前的技术领域中发挥着重要作用&#xff0c;而且在未来将以更深远的影响改变我们的生活、工作和社会结构。本文将探讨Agent AI智能体的现状、潜…

回顾今年的618大战:除了卷低价,还有别的出路吗?

今年的618刚刚落下帷幕&#xff0c;大促期间&#xff0c;一些电商平台纷纷备足马力、迎接挑战&#xff0c;反倒是一向领跑的淘宝京东公开表示&#xff0c;今年取消了618预售制。 互联网电商20年来&#xff0c;每年618、双11轮流登场&#xff0c;“低价大战”愈演愈烈&#xff0…

【C++】类和对象2.0

俺来写笔记了&#xff0c;哈哈哈&#xff0c;浅浅介绍类和对象的知识点&#xff01; 1.类的6个默认成员函数 俺们定义一个空类&#xff1a; class N {}; 似乎这个类N里面什么都没有&#xff0c;其实不是这样子的。这个空类有6个默认的成员函数 。 默认成员函数&#xff1a…

Android 你应该知道的学习资源 进阶之路贵在坚持

coderzheaven 覆盖各种教程&#xff0c;关于Android基本时案例驱动的方式。 非常推荐 thenewcircle 貌似是个培训机构&#xff0c;多数是收费的&#xff0c;不过仍然有一些free resources值得你去挖掘。 coreservlets 虽然主打不是android&#xff0c;但是android的教程也​ 是…

【前端技术】标签页通讯localStorage、BroadcastChannel、SharedWorker的技术详解

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

MySQL之复制(十二)

复制 复制的问题和解决方案 未定义的服务器ID 如果没有在my.cnf里面定义服务器ID,可以通过CHANGE MASTER TO 来设置备库&#xff0c;但却无法启动复制。 mysql>START SLAVE; ERROR 1200(HY000):The server is not configured as slave;fix in config file or with CHANG…

实验13 简单拓扑BGP配置

实验13 简单拓扑BGP配置 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 BGP&#xff08;Border Gateway Protocol&#xff0c;边界网关协议&#xff09;是一种用于自治系统间的动态路由协议&#xff0c;用于在自治系统&#xff08;AS&…

汇聚荣做拼多多运营怎么样?

汇聚荣做拼多多运营怎么样?在电商行业竞争日益激烈的今天&#xff0c;拼多多作为一家迅速崛起的电商平台&#xff0c;吸引了众多商家入驻。对于汇聚荣这样的企业而言&#xff0c;选择在拼多多上进行商品销售和品牌推广&#xff0c;无疑需要一套高效的运营策略。那么&#xff0…

技术师增强版,系统级别的工具!【不能用】

数据安全是每位计算机用户都关心的重要问题。在日常使用中&#xff0c;我们经常面临文件丢失、系统崩溃或病毒感染等风险。为了解决这些问题&#xff0c;我们需要可靠且高效的数据备份与恢复工具。本文将介绍一款优秀的备份软件&#xff1a;傲梅轻松备份技术师增强版&#xff0…

【MySQL数据库】:MySQL视图特性

目录 视图的概念 基本使用 准备测试表 创建视图 修改视图影响基表 修改基表影响视图 删除视图 视图规则和限制 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图中的数据…

地下管线管网三维建模系统MagicPipe3D

地下管网是保障城市运行的基础设施和“生命线”。随着实景三维中国建设的推进&#xff0c;构建地下管网三维模型与地上融合的数字孪生场景&#xff0c;对于提升智慧城市管理至关重要&#xff01;针对现有三维管线建模数据差异大、建模交互弱、模型效果差、缺乏语义信息等缺陷&a…

多功能投票系统(ThinkPHP+FastAdmin+Uniapp)

让决策更高效&#xff0c;更民主&#x1f31f; ​基于ThinkPHPFastAdminUniapp开发的多功能系统&#xff0c;支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c;Uniapp提供全部无加密源码…

Android MVP模式 入门

View&#xff1a;对应于布局文件 Model&#xff1a;业务逻辑和实体模型 Controllor&#xff1a;对应于Activity 看起来的确像那么回事&#xff0c;但是细细的想想这个View对应于布局文件&#xff0c;其实能做的事情特别少&#xff0c;实际上关于该布局文件中的数据绑定的操…

高通安卓12-安卓系统定制2

将开机动画打包到system.img里面 在目录device->qcom下面 有lito和qssi两个文件夹 现在通过QSSI的方式创建开机动画&#xff0c;LITO方式是一样的 首先加入自己的开机动画&#xff0c;制作过程看前面的部分 打开qssi.mk文件&#xff0c;在文件的最后加入内容 PRODUCT_CO…

【SSM】医疗健康平台-管理端-检查组管理

技能目标 掌握新增检查组功能的实现 掌握查询检查组功能的实现 掌握编辑检查组功能的实现 掌握删除检查组功能的实现 体检的检查项种类繁多&#xff0c;为了方便管理和快速筛选出类别相同的检查项&#xff0c;医疗健康将类别相同的检查项放到同一个检查组中进行管理&#…

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…

<Rust><iced>在iced中显示gif动态图片的一种方法

前言 本文是在rust的GUI库iced中在窗口显示动态图片GIF格式图片的一种方法。 环境配置 系统&#xff1a;window 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;iced、image 概述 在iced中&#xff0c;提供了image部件&#xff0c;从理论上说&…

软考 系统架构设计师系列知识点之杂项集萃(44)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;43&#xff09; 第71题 设有员工实体Employee&#xff08;员工号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;电话&#xff0c;家庭住址&#xff0c;家庭成员&#xff0c;关系…

自动驾驶⻋辆环境感知:多传感器融合

目录 一、多传感器融合技术概述 二、基于传统方法的多传感器融合 三、基于深度学习的视觉和LiDAR的目标级融合 四、基于深度学习的视觉和LiDAR数据的前融合方法 概念介绍 同步和配准 时间同步 标定 摄像机内参标定&#xff08;使用OpenCV&#xff09; 摄像机与LiDAR外…