高性能并行计算华为云实验五:PageRank算法实验

目录

一、实验目的

二、实验说明

三、实验过程

3.1 创建PageRank源码

3.2 makefile的创建和编译

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

四、实验结果与分析

4.1 采用默认的节点数量及迭代次数进行测试

4.2 分析并行化下节点数量与耗时的变化规律

4.3 分析迭代次数与耗时的变化规律

五、实验思考与总结

5.1 实验思考

5.2 实验总结

END~

世界上第二难的事就是唱《普通朋友》了,那第一呢?


一、实验目的

1.1 掌握 PageRank 算法程序的编写以及编译运行。

1.2 实现在多台主机上编译运行 PageRank 算法的程序。

二、实验说明

华为鲲鹏云主机、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 创建PageRank源码

以下步骤均在四台主机上,以 zhangsan 用户执行。

首先输入以下命令,创建 pagerank 目录存放该程序的所有文件, 并进入 pagerank 目录mkdir /home/zhangsan/pagerank    cd /home/zhangsan/pagerank

然后输入vim pagerank.cpp创建 PageRank 算法源码 pagerank.cpp(四台主机都执行),代码输入完毕后输入:wq完成文件保存。

随后输入vim logging.h完成头文件的编写。关键代码如下所示:

 if (argc != 4) {
 cout << "Usage: " << argv[0] << " thread-num node-num iterations";
 exit(-1);
 }
 int t = atoi(argv[1]);
 int n = atoi(argv[2]);
 int m = atoi(argv[3]);
 omp_set_num_threads(t);
 subgraph sg;
 sg.G = graph(n);
 struct timeval start, stop;
 gettimeofday(&start, NULL);
 PageRank(sg, m, t);
 gettimeofday(&stop, NULL);
 double elapse = (stop.tv_sec - start.tv_sec) * 1000 +
 (stop.tv_usec - start.tv_usec) / 1000;
cout << "当节点数量为 " << n << " 且迭代次数为 " << m << " 时,耗时为 " << elapse << " 秒。" << endl;

3.2 makefile的创建和编译

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

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

输入时需注意缩进,完成后输入“make”进行编译,可得到可执行文件pagerank

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

首先输入vim /home/zhangsan/pagerank/hostfile进行主机配置文件建立,添加如下内容

zzh-hw-0001:2

zzh-hw-0002:2

zzh-hw-0003:2

zzh-hw-0004:2

并对文件进行保存。然后输入vim run.sh 创建脚本文件,内容如下:

# 检查参数数量是否正确
if [ "$#" -ne 4 ]; then
    echo "Usage: $0 <pagerank|other_app> <thread-num> <node-num> <iterations>"
    exit 1
fi
app=${1}
thread_num=${2}
node_num=${3}
iterations=${4}
if [ ${app} = "pagerank" ]; then
    ./pagerank ${thread_num} ${node_num} ${iterations}
fi

此处较原教程作出了较大改动,将节点数和迭代次数都设置为了命令行参数,可通过用户输入进行调整。原教程中节点数和迭代次数分别固定为了80000和10,做出此改动的目的也是为了探究节点数和迭代次数与运行耗时的关系。

除此之外我还对程序的输出进行了优化,将原先输出为两组数字改为输出如下内容

cout << "当节点数量为 " << n << " 且迭代次数为 " << m << " 时,耗时为 " << elapse << " 秒。" << endl; 这样可以更好的观察结果与变量之间的对应关系。

四、实验结果与分析

4.1 采用默认的节点数量及迭代次数进行测试

测试结果如下:

整理数据如下:

处理机数量

节点数量

迭代次数

耗时

1

80000

10

7880

2

80000

10

4650

3

80000

10

5498

4

80000

10

5633

5

80000

10

5494

6

80000

10

5074

7

80000

10

5421

8

80000

10

6238

将上述结果进行可视化,如下所示:

从整体结果可以看出,随着进程数量的增加,耗时越来越少。从开始的 8000 减少到 6000 左右。但处理机数从1变为2的过程,性能提升最大。而后可能由于处理机间同步或通信开销等原因,耗时增加。

4.2 分析并行化下节点数量与耗时的变化规律

受篇幅限制,我们仅对如下结果进行分析

在节点数量从 80000 增加到 800000 时,耗时从 6238 秒增加到 139404 秒,即增加了约 22.33 倍。这不是一个严格的二次方变化关系,而是更接近线性增长。

于是我开始计算每个节点的平均处理时间来分析规律:

在第一个情况下,平均处理时间为 6238 秒 / 80000 = 0.078秒;

在第二个情况下,平均处理时间为 139404 秒 / 800000 = 0.1743秒。这表明,随着节点数量增加,每个节点的平均处理时间也在增加,导致总体耗时的增加。

原因分析:

①节点间通信开销:随着节点数量的增加,节点间通信开销也会增加,导致整体耗时增加。

②数据量增加:随着节点数量的增加,涉及的数据量也会增加,需要更多的计算资源和时间。

并行计算效率:在并行计算中,随着节点数量的增加,可能会遇到负载均衡或通讯开销等问题,影响并行计算的效率。

4.3 分析迭代次数与耗时的变化规律

结果如下:

将上述数据进行可视化,结果如下:

观察实验结果可以很明显的发现并行运算耗时与迭代次数成线性关系。这种线性关系可能表明在当前的并行计算环境下,迭代次数对于整体耗时的影响比较明显,并且可能受到了一些固定的通信开销等因素的影响,使得整体的耗时增长较为稳定。当然需要注意的是当节点数量较大时,可能会产生非线性的耗时增长。

五、实验思考与总结

5.1 实验思考

①采用头文件有什么好处?

头文件在C和C++编程中有许多好处,如下所述:

模块化和组织性:头文件可以帮助将代码分割成逻辑模块,提高代码的组织性和可读性。通过将相关的函数原型、宏定义和结构声明放在头文件中,可以更清晰地了解每个模块的功能和接口。

接口定义:头文件通常包含了公共接口的声明,这些接口定义了模块之间的通信方式和使用规范。通过头文件,可以明确地了解如何使用某个模块或库。

依赖管理:使用头文件可以方便地管理代码之间的依赖关系。当一个源文件需要使用另一个模块的功能时,只需要包含相应的头文件即可,而不需要知道该模块的具体实现细节。

编译优化:头文件可以帮助编译器进行优化和错误检查。通过包含必要的头文件,编译器可以在编译时检查函数调用的正确性,并优化代码生成过程。

重用性:头文件可以被多个源文件重复引用,从而实现代码的重用。这种机制使得相同的函数或数据结构可以在不同的源文件中被共享和复用。

②简述pageRank算法的并行化原理

PageRank算法的并行化原理是通过将网页图分解成多个子图,并在多个计算节点上同时进行排名计算。每个节点独立处理部分网页和链接,迭代更新其PageRank值。在迭代过程中,节点间需要交换排名信息以保证全局一致性。一旦所有节点达到收敛条件,局部的PageRank值将被汇总以形成最终的全局排名。并行化可以显著提高PageRank计算的效率,尤其是在处理大规模数据集时。

简而言之,PageRank算法的并行化涉及分布式数据存储、局部迭代计算、节点间信息同步和全局收敛检测。通过这种方法,算法能够利用多个处理器的计算能力,加快网页排名的计算速度,同时保持算法的准确性和有效性。

5.2 实验总结

在华为鲲鹏云服务器上进行的PageRank算法实验中,我成功地实现了算法的并行化,并探究了节点数量和迭代次数对运行耗时的影响。

实验过程中我观察到随着进程数量的增加,总体耗时逐渐减少,尤其是在从单进程过渡到双进程时,性能提升最为显著。然而,进程数量继续增加时,由于节点间的同步和通信开销,耗时减少的趋势放缓。当节点数量从80000增加到800000时,耗时呈现出超线性增长,这不仅因为数据量的增加,也因为节点间通信开销的上升。此外,迭代次数与耗时之间显示出线性关系,这可能与每次迭代时固定的通信开销有关,导致每次迭代的额外耗时保持稳定。实验结果让我意识到,在并行计算中,为了提高效率,需要重视负载均衡和节点间通信开销的优化。

通过本实验,我不仅掌握了PageRank算法的编写、编译和运行,还学会了配置并行计算环境。实验过程中,我们深入了解了并行计算中影响性能的关键因素,包括进程数量、节点数量、迭代次数以及它们对总体耗时的具体影响。这些经验对于设计和实现高效的并行算法至关重要,有助于在未来的研究和应用中进一步优化算法性能。

END~

世界上第二难的事就是唱《普通朋友》了,那第一呢?

天气☁️:⛈️暴雨!

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

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

相关文章

数据结构——跳表Skip List

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

百威英博旗下知名啤酒品牌Jupiler,创意助力比利时国足角逐欧洲杯冠军!

怎么说呢&#xff1f;今天非常开心。 因为今天分享的这个品牌创意案例很特别&#xff0c;和夏天、足球有关&#xff0c;和梦想、啤酒有关&#xff0c;还和QR Tiger 、二维彩虹有关。而把这一切连接在一起的&#xff0c;是一个小小的二维码。 这个夏天&#xff0c;百威英博旗下…

选专业,分析就业前景和市场需求

大学专业纷繁复杂&#xff0c;每个专业的就业前景和市场需求也天差地别&#xff0c;一般而言&#xff0c;就业前景优和市场需求的专业的学生更容易就业&#xff0c;更容易实现个人价值&#xff1f; 一、充分利用性格优势 在专业选择当中&#xff0c;如果我们自己对某个专业拥有…

背包模型——AcWing 423. 采药

背包模型 定义 背包模型是一种常见的算法问题模型&#xff0c;它主要涉及将一些物品放入一个容量有限的背包中&#xff0c;以达到某种最优目标&#xff0c;如最大化价值或最小化重量等。 运用情况 常用于资源分配、项目选择、货物装载等实际问题中。例如&#xff0c;在选择…

用AI解锁创意设计新思路

在数字化浪潮的推动下&#xff0c;创意设计领域正经历一场由人工智能&#xff08;AI&#xff09;引领的深刻变革。AI技术的崛起不仅显著提升了设计工作的效率&#xff0c;还为设计师们开辟了前所未有的创新空间。 随着AI技术的持续进步&#xff0c;传统的设计流程正在逐步被重…

Lua流媒体服务器支持(MP4视频、桌面直播、摄像头)

本来在做FFMPEG的项目&#xff0c;忽然想到Lua封装FFMPEG与SRS实现一个简易的直播网站何尝不是一个大胆的想法。 示例为初级版本&#xff0c;主要是用来验证可行性和功能性DEMO 演示效果&#xff1a; Lua流媒体直播服务器(支持MP4、桌面直播、摄像头)_哔哩哔哩_bilibili 代码简…

最佳实践 | HelpLook通过PartnerShare实现低成本的市场拓展

在如今许多行业市场竞争非常激烈&#xff0c;扩大品牌影响力、提升产品竞争力成为企业亟待攻克的难题之一。为此&#xff0c;HelpLook AI知识库对接了PartnerShare联盟系统&#xff0c;为SaaS产品如何做好全民分销带来了全新的解决思路。 PartnerShare凭借成熟的推广体系为Hel…

基于Python/MNE处理fnirs数据

功能性近红外光谱技术在脑科学领域被广泛应用&#xff0c;市面上也已经有了许多基于MATLAB的优秀工具包及相关教程&#xff0c;如&#xff1a;homer、nirs_spm等。而本次教程将基于Python的MNE库对fNIRS数据进行处理。 本次教程基于&#xff1a;https://mne.tools/stable/auto_…

宝兰德受邀出席华为开发者大会2024,携手共绘基础软件新篇章

6月21日-23日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞松山湖举行&#xff0c;作为全球开发者的年度盛会&#xff0c;本次大会汇聚了众多业界精英与前沿技术。华为分享了HarmonyOS、盘古大模型、昇腾AI云服务、GaussDB数据库、自研仓颉编程语言等最新…

一年Java转GO|19K|腾讯 CSIG 一二面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景 学历&#xff1a;本科工作经验&#xff1a;一年(不算实习)当前语言&#xff1a;Javabase&#xff1a;武汉部门\岗位&#xff1a;腾讯云‍ 一…

pdf压缩,pdf压缩在线,pdf文件太大怎么变小

在数字化时代&#xff0c;PDF文档因其跨平台、保持原样、易于阅读和打印等特点&#xff0c;成为了我们日常工作和生活中不可或缺的一部分。然而&#xff0c;随着PDF文件的不断累积&#xff0c;存储空间逐渐变得紧张&#xff0c;特别是在处理大量大型PDF文件时&#xff0c;如何有…

深圳大学 软件测试作业 #2

声明&#xff1a;本人上课摆烂选手&#xff0c;稍微听了下&#xff0c;答案仅供参考。 ———————— 1. 考虑下面这个代码&#xff0c;并回答以下的问题。 (a) 请画出上面代码的控制流程图。(20分) (b) 请画出上面代码的数据流程图。(10分) (c) 找出每个变量的定义使…

说点智驾领域的实话!感知|定位|规划控制|就业……

你们有没有一种感觉&#xff0c;近几年自动驾驶技术栈迭代太快&#xff0c;自己稍不留神就与当下主流技术产生脱节了。 其实说实话&#xff0c;并非只有你如此&#xff0c;行业内的工程师都有类似感受。 智能驾驶行业交流群&#xff1a;点击进 分享几个我们最近聊天中的几位朋…

低代码平台如何重塑项目管理:效率与创新的新边界

引言 随着数字化转型的加速和技术创新的推动&#xff0c;低代码开发平台在近年来逐渐崭露头角&#xff0c;成为企业和组织加速应用开发和创新的重要工具。低代码平台通过提供可视化的开发环境和预构建的组件&#xff0c;极大地简化了应用程序的开发过程&#xff0c;使非专业开发…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

windows 安装 Kubernetes(k8s)

windows 安装 docker 详情见&#xff1a; https://blog.csdn.net/sinat_32502451/article/details/133026301 minikube Minikube 是一种轻量级的Kubernetes 实现&#xff0c;可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。 下载地址&#xff1a;https://github.…

每日一题——Python实现PAT乙级1030 完美数列(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 初次尝试 再次尝试 代码结构 时间复杂度分析 空间复杂度分析 总结 我要更强 时…

《互联网政务应用安全管理规定》深度解读

《互联网政务应用安全管理规定》的出台&#xff0c;对互联网政务应用的安全提出了一系列具体要求。 2024年5月15日&#xff0c;中央网信办、中央编办、工业和信息化部、公安部等四部门联合公布《互联网政务应用安全管理规定》&#xff08;以下称《规定》&#xff09;&#xff…

手机pdf删除怎么办?只需要2招,就可以快速恢复耶

PDF文件&#xff0c;这个我们日常生活中的常客&#xff0c;越来越受到大家的喜爱。但是&#xff0c;有时候我们会因为一时的疏忽或者清理手机内存而不小心删掉了重要的PDF文件&#xff0c;这可真是让人头疼啊&#xff01;那么&#xff0c;这些pdf删除后&#xff0c;有没有什么好…

一年半测试|17K|商汤科技4轮面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景‍‍ 楼主本科&#xff0c;大概一年半工作经验。 之前工作也是测试岗&#xff0c;离职了三个多月再次刷题面试&#xff0c;大概花了一个月准备…