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

news2024/10/9 1:56:51

目录

一、实验目的

二、实验说明

三、实验过程

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~

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

天气☁️:⛈️暴雨!

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

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

相关文章

2024广东省职业技能大赛云计算赛项实战——集群部署GitLab Agent

集群部署GitLab Agent 前言 题目如下&#xff1a; 部署GitLab Agent 将Kubernetes集群添加到demo-2048项目中&#xff0c;并命名为kubernetes-agent&#xff0c;项目命名空间选择gitlab-ci。 说是部署GitLab Agent,但据我了解&#xff0c;Agent就是Runner&#xff0c;看题目…

5.How Fast Should You Be When Learning?(你应该用多快的速度学习? (一))

Normally when I talk about learing quickly, I’m using speed as a synonym for efficiency.Use more effective methods and you’ll learn more in less time.All else being equal, that means you’re learing faster. 通常我在谈到快速学习时&#xff0c;是把“速度&qu…

【神经网络】神经元的基本结构和训练过程

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&#xff01; 神经元的基本结构和训练过程 …

Redis数据库(三):Redis数据库三种特殊数据类型

除了上一篇博客讲的五种基本数据类型外&#xff0c;Redis还有三种特殊的数据类型&#xff0c;它们有着不同的应用场景&#xff0c;这一篇博客&#xff0c;我们来学习它。 目录 一、geospatial 地理空间 1.1 添加地理位置 1.2 返回给定名称的纬度和经度 1.3 返回两个给定位…

小柴冲刺嵌入式系统设计师系列总目录

工作两年 逐渐意识到基础知识的重要性✌️ 意识到掌握了这个证书好像就已经掌握了80%工作中用到的知识了。剩下的就在工作的实战中学习 来和小柴一起冲刺软考吧&#xff01;加油&#x1f61c; 【小柴冲刺软考中级嵌入式系统设计师系列】总目录 前言 专栏目标&#xff1a;冲刺…

ros2_control 使用教程

系列文章目录 前言 0.1 欢迎阅读 ros2_control 文档&#xff01; ros2_control 是一个使用&#xff08;ROS 2&#xff09;对机器人进行&#xff08;实时&#xff09;控制的框架。其软件包是对 ROS&#xff08;机器人操作系统&#xff09;中使用的 ros_control 软件包的重写。r…

NetSuite CSV导入类型与记录类型梳理

最近有用户问到我们的一个问题是&#xff0c;哪些数据可以使用CSV导入&#xff0c;哪些数据不能使用CSV导入&#xff0c;干脆咱们就整理出来可使用CSV导入功能的类型和记录类型&#xff0c;供大家直接参考&#xff5e; 但是有一些内容或多或少由于每个企业的环境不一样而有所不…

jenkins环境搭建--关于jenkins在Ubuntu下的安装篇(一)

在ubuntu下使用命令进行下载安装包&#xff1a; 关于jenkins的安装有多种&#xff0c;可以借助docker容器进行安装&#xff0c;也可以通过传统方法手动一步步的进行安装&#xff0c;以下介绍手动一步步的安装方法&#xff0c;后续我们将解释关于jenkins的相关配置以及实战使用…

mongodb 查询语句学习笔记

基础查询 正则查询 {status: A,$or: [{ qty: { $lt: 30 } }, { item: { $regex: ^p } }] }AND 查询 { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" }OR 查询 { $or: [ { status: "A" }, { qty: { $lt: 30 } …

万界星空科技自动化运维管理---设备管理

在信息化管理体系建设中&#xff0c;设备管理系统被看作是重中之重。因为设备是工厂生产中的主体、生命线&#xff0c;随着科学技术的不断发展、智能制造的产业升级&#xff0c;生产设备日益智能化、自动化&#xff0c;设备在现代工业生产中的作用和影响也随之增大&#xff0c;…

智能体——父亲兴趣爱好助手

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Sectigo或RapidSSL DV通配符SSL证书哪个性价比更高?

在当前的网络安全领域&#xff0c;选择一款合适的SSL证书对于保护网站和用户数据至关重要。Sectigo和RapidSSL作为市场上知名的SSL证书提供商&#xff0c;以其高性价比和快速的服务响应而受到市场的青睐。本文将对Sectigo和RapidSSL DV通配符证书进行深入对比&#xff0c;帮助用…

java设计模式(四)原型模式(Prototype Pattern)

1、模式介绍&#xff1a; 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许对象在创建新实例时通过复制现有实例而不是通过实例化新对象来完成。这样做可以避免耗费大量的资源和时间来初始化对象。原型模式涉及一个被复制的原型对象…

【机器学习】在【R语言】中的应用:结合【PostgreSQL数据库】的【金融行业信用评分模型】构建

目录 1.数据库和数据集的选择 1.准备工作 2.PostgreSQL安装与配置 3.R和RStudio安装与配置 2.数据导入和预处理 1.连接数据库并导入数据 1.连接数据库 2.数据检查和清洗 1.数据标准化 2.拆分训练集和测试集 3.特征工程 1.生成新特征 2.特征选择 4.模型训练和评估…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

2024广东省职业技能大赛云计算赛项实战——构建CICD

构建CI/CD 前言 题目如下&#xff1a; 构建CI/CD 编写流水线脚本.gitlab-ci.yml触发自动构建&#xff0c;具体要求如下&#xff1a; &#xff08;1&#xff09;基于镜像maven:3.6-jdk-8构建项目的drone分支&#xff1b; &#xff08;2&#xff09;构建镜像的名称&#xff1a…

【threejs】火焰特效制作

2024-06-26 08-57-16火焰 shader 来源 //shadertory&#xff1a;https://www.shadertoy.com/view/ctVGD1//shadertory&#xff1a;https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…

嵌入式EMC之TVS管

整理一些网上摘抄的笔记&#xff1a; TVS管认识&#xff1a; TVS的Vc要比&#xff0c;DCDC的最大承受电压要小

mysql workbench使用schema视图导出表和列结构到excel

目的&#xff1a;导出所有表和列的名字和注释 很多时候没有正规的数据库文档&#xff0c;为了快速交流啊&#xff0c;需要一个快捷的基础。数据库建表的时候可能有注释&#xff0c;也可能没有注释。有当然好&#xff0c;查看注释就能清楚很多&#xff0c;没有的话最好一个一个补…

高效文件分类管理:快速将不同类型文件素材归类到专属文件夹,告别混乱,让工作更高效!

在数字化时代&#xff0c;我们每天都会产生大量的文件素材&#xff0c;从图片、文档到音频、视频&#xff0c;种类繁多&#xff0c;数量庞大。如果这些文件没有得到有效的管理和归类&#xff0c;不仅会让我们的工作变得混乱无序&#xff0c;还会影响我们的工作效率。那么&#…