高性能并行计算华为云实验二:WordCount算法实验

目录

一、实验目的

二、实验说明

三、实验过程

3.1 创建wordcount源码

3.1.1 实验说明

3.1.2 文件创建

3.2 Makefile文件创建与编译

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

3.3.1 主机配置文件建立

3.3.2 运行监测

三、实验结果与分析

4.1 实验结果

4.2 结果分析

4.2.1 原始结果分析

4.2.2 改进后的结果分析

五、实验总结与思考

5.1 实验思考

5.2 实验总结

END~


一、实验目的

1.1 掌握简单的程序编写,如 WordCount 中的 getWords、countWords、treeMerge

1.2 理解集群 WordCount 算法,实现多台主机 WordCount 算法的编译运行

二、实验说明

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

安装 mpich-3.3.2.tar.gz;

安装 OpenBLAS-0.3.8.tar.gz;

四台主机名称及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 创建wordcount源码

3.1.1 实验说明

实验将提供两个文件夹,第一个文件夹包含 100 个小文件,第二文件夹包含一个大文件。请针对这两种情况分别实现 WordCount 算法,同时把结果打印到屏幕上。WordCount 算法可分解为三步,分别为 getWords 、countWords 、treeMerge。

3.1.2 文件创建

注:以下步骤均需要在四台主机上进行

首先创建 wordcount 目录存放该程序的所有文件, 并进入 wordcount 目录,具体通过输入如下命令:

mkdir /home/zhangsan/wordcount

cd /home/zhangsan/wordcount

然后输入mkdir –p project_file/big_file 、mkdir –p project_file/small_file创建存放测试数据的目录。最后创建wordcount源码wordcount.cpp文件。输入vim wordcount.cpp,添加代码并输入:wq完成保存。

部分代码如下:

 int rank;int worldSize;MPI_Init(&argc, &argv);MPI_Comm_size(MPI_COMM_WORLD, &worldSize);MPI_Comm_rank(MPI_COMM_WORLD, &rank);/** Word Count for big file*/
{struct timeval start, stop;gettimeofday(&start, NULL);std::string big_file = "./project_file/big_file/big_100.txt";auto content = readFile(big_file);auto partContent = getWords(content, rank, worldSize);auto counts = countWords(partContent);treeMerge(rank, worldSize, counts);gettimeofday(&stop, NULL);if (rank == 0) {cout << "word count: "<< (stop.tv_sec - start.tv_sec) * 1000.0 +(stop.tv_usec - start.tv_usec) / 1000.0<< " ms"<< endl;}

3.2 Makefile文件创建与编译

注:以下步骤四台主机均需要完成

首先输入vim Makefile ,进行编辑模式,输入如下内容,注意缩进:

CC = mpic++
CCFLAGS = -O2 -fopenmp
LDFLAGS = -lopenblas
all: wordcount
wordcount: wordcount.cpp${CC} ${CCFLAGS} wordcount.cpp -o wordcount ${LDFLAGS}
clean:rm wordcount

然后输入make完成编译,结果如下,生成了一个可执行文件-wordcount

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

3.3.1 主机配置文件建立

注:该步骤需要在四台主机上运行

首先输入vim /home/zhangsan/wordcount/hostfile,编辑如下内容

zzh-hw-0001:4

zzh-hw-0002:4

zzh-hw-0003:4

zzh-hw-0004:4

此处对原教程的内容进行了改进,将处理机数量整体上从8个提升到了16个,观察运行时间的变化规律

3.3.2 运行监测

输入vim run.sh编写 run.sh 脚本,编辑内容如下:

app=${1}
if [ ${app} = "wordcount" ]; then
mpirun --hostfile hostfile -np ${2} ./wordcount
fi

分别执行以下命令,查看 wordcount 运行结果(此步骤仅需在任意一台实现)

bash run.sh wordcount 2
bash run.sh wordcount 4
bash run.sh wordcount 6
bash run.sh wordcount 8
bash run.sh wordcount 10
bash run.sh wordcount 12
bash run.sh wordcount 14
bash run.sh wordcount 16

三、实验结果与分析

4.1 实验结果

I 处理机数为2、4、6、8时

II 处理机数量为10、12、14、16时

将上述结果进行可视化,观察耗时随处理机数量、文件大小的变化关系,如下:

由实验说明中指出第一个文件夹包含100 个小文件,于是尝试将文件

"./project_file/big_file/big_100.txt"改为 "./project_file/big_file/big_99.txt",观察结果变化

部分结果如下

4.2 结果分析

4.2.1 原始结果分析

由可视化结果知,此程序处理机数量增加,耗时反而增加,大文件小文件一致。考虑如下原因:

·通信开销:在分布式系统中,多个进程需要相互通信来协调工作。随着处理器数量的增加,通信开销可能会增加,特别是如果通信模式是全对全(all-to-all)或者需要频繁同步。

·负载不平衡:如果工作负载在各个处理器之间分配不均匀,一些处理器可能会早早完成任务而空闲,而其他处理器还在忙碌,这会导致整体性能下降。

4.2.2 改进后的结果分析

变化趋势依旧不变,仍然是处理机数量越多,耗时越长;仍然考虑通信开销及负载不平衡的原因。切换文件后,耗时依旧变化不大,可能是"./project_file/big_file/big_100.txt"和"./project_file/big_file/big_99.txt"大小差不多,导致最后的运行时间变化不大。

整个实验中,串行的耗时均小于并行的耗时,并没有很好的体现并行化的优势,我认为最可能的原因是用于计数的文件数据量及规模较小,导致并行化的通信开销等造成的性能下降幅度大于并行化处理造成的性能上升幅度。最终使得并行化效果不如串行。

五、实验总结与思考

5.1 实验思考

①实现 WordCount 算法中比较关键的是哪些?

·输入分割:将输入文本分割成单词或词元。

·映射(Map):生成每对(单词,1)。

·键(Key)设计:确保相同的单词映射到相同的键。

·归约(Reduce):对每个单词的所有出现次数进行汇总。

·并行处理:设计算法以支持并行处理,提高效率。

·性能优化:减少不必要的数据传输和计算,优化性能。

②WordCount 算法实现并行化的原理

首先将输入文件分割成多个数据块并分配给不同的进程进行数据分发。每个进程独立地对所接收的数据块执行WordCount操作,完成本地处理并生成局部的单词计数。随后,通过MPI的归约操作,如Reduce或全局汇总操作,例如Gather或Allgather,将所有进程的局部计数合并起来,形成全局的单词计数。最终,结果可以收集到一个主进程中,或者通过广播操作将结果分发到所有进程。

5.2 实验总结

在华为鲲鹏平台上实现WordCount程序的并行化实验中,我成功掌握了MPI并行编程的基本技巧,包括数据的分割、分布式处理、以及结果的归约合并。实验结果显示,随着并行化程度的提高,理论上处理速度应加快,但实际上观察到了耗时增加的现象。我认为有如下原因:

①通信开销:随着进程数量的增加,进程间的数据传输和同步所需的时间可能超过了单机处理的时间。

②负载不均衡:数据在不同进程间可能分配不均,导致部分进程空闲等待,而其他进程仍在处理数据。

③资源限制:硬件资源(如内存或CPU)的限制可能成为瓶颈,限制了并行化的效率。

通过这次实验,我认识到并行化并不是简单地增加进程数就能提升性能,而是需要细致地考虑数据分配、通信策略和资源管理等多个方面。未来,我计划进一步优化算法,比如通过动态负载平衡和减少通信开销来提高并行效率。

END~

享受过程就不要考虑结果
考虑结果就不要享受过程

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

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

相关文章

Nature | 解锁大脑运动控制机理!哈佛大学与DeepMind实现「AI大脑」控制虚拟老鼠

近日&#xff0c;哈佛大学的研究人员与谷歌DeepMind AI 实验室合作&#xff0c;开发出了一种虚拟大鼠模型&#xff0c;以研究大脑如何控制真实老鼠的运动。这个创新的模型准确地模拟了在真实大鼠身上观察到的神经活动&#xff0c;可以用于探讨大脑是如何控制动物的运动行为。 …

c++重载输出流(<<)和输入流(>>)

一.重载输出流 在C中&#xff0c;可以重载输出流运算符&#xff08;<<&#xff09;来自定义对象的输出方式。重载输出流运算符允许我们以自定义的方式将对象输出到标准输出流或其他输出流中。 以下是关于重载输出流运算符&#xff08;<<&#xff09;的几个知识点…

RNN/LSTM/GRU/TRANFORMER/编码器解码器理解

编码器和解码器是一种框架,lstm和gru都是这个框架中对这一框架的不同实现 编码器与解码器是一种架构,一种思想,注意力也是一种思想,相互独立,只是二者可以结合以用来训练模型可以提升模型能力 rnn gru lstm是三种不同的模型 里面并没有注意力机制这回事 RNN中有编码器和解码器实…

时间安排 |规划

计算机网络&#xff08;记得完成作业本上的习题&#xff09; 先看王道知识点讲解 然后不懂得看 计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;_哔哩哔哩_bilibili 最后做本章习题 【乱讲的】《计算机网络》&#xff08;第8版&#xff09;课后习题讲解_哔哩…

杀疯了!PerfXCloud-AI大模型夏日狂欢来袭,向基石用户赠送 ∞ 亿Token!

【澎峰科技重磅消息】 在全球范围内大模型正逐渐成为强大的创新驱动力。在这个充满激情的夏日&#xff0c;PerfXCloud为开发者和企业带来了前所未有的福利&#xff1a; 1. 零成本亲密、深度体验大模型&#xff0c;提供大量示范案例。 2. 向基石用户赠送∞亿Token的激励计划。…

预期和视角之外是什么?

记得“大时代”里讲过这么一句话,你要在你的世界里打败敌人。这句话,证明了人是活在心境里,小时候看到的葫芦娃也是这个道理,你去找蛇精去人家地盘上,容易中计,葫芦娃救爷爷一个个送,你要不中计就要逃出她的心境。在股票市场,养家心法是什么?它是心境,92科比说过要么…

HTML静态网页成品作业(HTML+CSS+JS)——家乡莆田介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播&#xff0c;共有5个页面。 二、作品…

qt 简单实验 json格式的文件写入配置文件

1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> //读取json数据的配置文件int main(int argc, char *argv[]) {QApplication a(argc, argv);QString…

学懂C#编程:常用高级技术——委托(Delegate)应用场景——委托与Lambda表达式的结合使用详解

在C#中&#xff0c;委托与Lambda表达式的结合使用是现代编程实践中的一个重要且强大的特性&#xff0c;它极大地提高了代码的简洁性和可读性。下面将详细讲解这两个概念如何协同工作&#xff0c;以及如何在实际编程中有效利用它们。 委托基础 委托是C#中的一种引用类型&#x…

基于SpringBoot+协同过滤算法的家政服务平台设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

问题解答:如何每隔2分钟弹出一次弹出框

事情是这样的&#xff0c;昨天有个粉丝问我&#xff1a;如何每隔2分钟弹出一次弹出框。 我说 那不就是setInterval嘛&#xff0c;然后设定2分钟执行一次。 他说 不是的&#xff0c;这个2分钟只是我说的一个时间&#xff0c;不是常量&#xff0c;是服务端下发的。 我说 那就获取…

matlab入门基础笔记

1、绘制简单三角函数&#xff1a; 绘制正弦曲线和余弦曲线。x[0:0.5:360]*pi/180; plot(x,sin(x),x,cos(x)); &#xff08;1&#xff09;明确x轴与y轴变量&#xff1a; 要求为绘制三角函数&#xff1a; X轴&#xff1a;角度对应的弧度数组 Y轴&#xff1a;对应sin(x)的值 求…

电商平台生活用品销售数据分析与应用

摘 要 在当前互联网飞速发展的时代&#xff0c;计算机应用给我们的工作生活带来了极大的便利。如今我们的生活离不开电商平台&#xff0c;其随之而来的是各种各样的销售数据与消费者信息&#xff0c;这些数据和信息的分析应用成为了当前互联网领域研究的重要部分。 本论文以基…

python自动化办公工具:自动批量生成奖状的工具(可视化)

&#x1f446;点击关注 获取更多编程干货&#x1f446; 不知道大家有没有注意到一种趋势&#xff0c;现在即便是那些非程序员&#xff0c;甚至对计算机一窍不通的人&#xff0c;也开始学习Python了&#xff0c;其“普及程度”实在让人感到有些惊讶。 那么&#xff0c;对于那些…

如何通过防泄密U盘,实现数据传输的安全性及可控性?

随着信息技术的发展&#xff0c;U盘作为重要的数据存储和传输工具&#xff0c;其安全性越来越受到关注。在日常办公中&#xff0c;经常会遇到这类情况&#xff1a;员工为了方便&#xff0c;随意使用U盘拷贝公司的机密资料。一旦U盘丢失或者被窃取&#xff0c;公司的机密资料就有…

警惕!最新17本期刊(含2本Top)被“镇压”,无影响因子无分区,这是被踢了吗?

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

【金】02Y90-60 大数据-HivetoMysQL

1、安装 Java 程序&#xff08;jdk&#xff09; 2、添加以下JAR包 3、确认配置成自己的数据库 ....

【数据结构与算法】线索二叉树 详解

为什么可在不增加指针域的情况下&#xff0c;对二叉树进行线索化&#xff1f; 不增加指针域&#xff1a;因为可以利用n1个空链域。 在线索二叉树中&#xff0c;为每个节点添加两个标志位&#xff0c;分别表示左指针和右指针是普通的孩子指针还是线索&#xff08;前驱或后继&a…

禅道身份认证绕过漏洞(QVD-2024-15263)复现

禅道项目管理系统在开源版、企业版、旗舰版的部分版本中都存在此安全漏洞。攻击者可利用该漏洞创建任意账号实现未授权登录。 1.漏洞级别 高危 2.漏洞搜索 fofa: title"禅道"3.影响范围 v16.x < 禅道 < v18.12 &#xff08;开源版&#xff09; v6.x <…

解决云原神在Linux浏览器鼠标无法旋转视角问题

【20230917】手动修复米哈游云游戏在Linux平台无法锁定鼠标问题 - 哔哩哔哩 // UserScript // name Genshin Cloud Mouse Fix // namespace https://www.bilibili.com/read/cv26576757/ // version 0.1 // description Fix a Genshin cloud game mouse move …