高性能并行计算华为云实验二: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;可以用于探讨大脑是如何控制动物的运动行为。 …

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

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

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

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

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

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

《STM32 HAL库》CAN通信系列函数详尽解析——HAL_CAN_Init()

食用指南&#xff1a;本文主要内容为梳理CAN初始化函数主要运行逻辑及重点功能实现代码的详尽解析。函数源码在文末&#xff0c;建议在阅读源码之后观看。 CAN相关寄存器图&#xff1a; 主要逻辑分析&#xff1a; 下面分点梳理函数的主要逻辑&#xff08;注意逻辑序号&#xf…

function包装器和bind包装器

function包装器和bind包装器 包装器function包装器为什么需要functionfunction包装器function包装器的应用场景逆波兰表达式求值 bind包装器bind包装器的应用场景 包装器 包装器是用于给其他编程接口提供更一致或更合适的接口 由于函数调用可以使用函数名、函数指针、函数对象…

【React】极客园--04.发布文章模块

实现基础文章发布 创建基础结构 import {Card,Breadcrumb,Form,Button,Radio,Input,Upload,Space,Select } from antd import { PlusOutlined } from ant-design/icons import { Link } from react-router-dom import ./index.scssconst { Option } Selectconst Publish () …

【JavaEE】Cookie和Session详解

一.Cookie 首先我们知道HTTP协议本身是’‘无状态’‘的, 这里的’‘无状态’指的是:默认情况下HTTP协议的客户端和服务器之间的这次通信,和下次通信之间没有直接的联系. 但是在实际的开发过程之中, 我们很多时候是需要知道请求之间的关联关系的. 例如登陆网站成功后,第二次访…

IPv6知识点整理

IPv6&#xff1a;是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议&#xff0c;其地址数量号称可以为全世界的每一粒沙子编上一个地址 。 国…

BigDataCloud 反向地理编码

在当今数字化飞速发展的时代&#xff0c;地理信息的精确获取和游戏数据的深入分析成为众多领域的关键需求。2024 年的今天&#xff0c;技术的创新为我们带来了更为出色的 API 服务。BigDataCloud 反向地理编码服务&#xff0c;能够将经纬度迅速而准确地转换为详细位置信息&…

ThinkPHP5大学生社会实践管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP5大学生社会实践管理系统 一 介绍 大学生社会实践管理系统基于ThinkPHP5框架开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;ThinkPHP5mysqlbootstrapphpstudyvscode 二 功…

ChatTTS增强版V3【已开源】,长文本修复,中英混读,导入音色,批量SRT、TXT

ChatTTS增强版V3来啦&#xff01;本次更新增加支持导入SRT、导入音色等功能。结合上次大家反馈的问题&#xff0c;修复了长文本、中英混读等问题。 项目已开源(https://github.com/CCmahua/ChatTTS-Enhanced) 项目介绍 V3 ChatTTS增强版V3&#xff0c;长文本修复&#xff0c…