高性能并行计算华为云实验五: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 ]; thenecho "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.mzph.cn/web/34276.shtml

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

相关文章

MySQL——联表查询JoinON详解

Join 对比&#xff08;7种&#xff09; 代码演示&#xff1a; -- 查询参加了考试的同学&#xff08;学号&#xff0c;姓名&#xff0c;科目编号&#xff0c;分数&#xff09; SELECT * FROM student SELECT * FROM result/* 1. 分析需求&#xff1a;分析查询的字段来自哪些表&…

【C++学习】适合新手小白的C++的小型项目

对于学习C&#xff0c;以下是一些适合的小项目建议&#xff0c;这些项目可以帮助你熟悉C的基础语法、面向对象编程、文件操作、标准库等概念&#xff1a; 控制台计算器&#xff1a; 创建一个简单的控制台应用程序&#xff0c;实现一个计算器&#xff0c;能够执行基本的算术运算…

spring原理篇

第三方bean默认为方法名 自动配置 自动配置的原理 springboot的自动配置原理 首先是从 SpringBootApplication这个注解出发 有一个ComponentScan()默认扫描同级包及其子包 第二个注解是springbootconfiguration 声明当前类是一个配置类 第三个是核心 enableAutoConfigurati…

通过看板系统管理工作流程:强调持续交付与可视化工作的全面指南

目录 前言1. 看板系统简介1.1 看板系统的基本原理1.2 看板系统的主要特点 2. 强调持续交付的重要性2.1 持续交付的优势2.2 持续交付的实施步骤 3. 可视化工作的核心价值3.1 提高透明度和可见性3.2 促进工作流程的优化3.3 增强团队的自我管理能力 4. 看板系统的实施指南4.1 初始…

速盾:cdn使用场景是什么?

CDN&#xff0c;全称为Content Delivery Network&#xff0c;即内容分发网络。它是一种通过在全球各地部署服务器、缓存内容以及优化网络路由等方式&#xff0c;提供高速、高可用、安全稳定的内容分发服务的网络架构。 在互联网的发展过程中&#xff0c;由于网络的带宽和延迟等…

vue-cli 搭建项目,ElementUI的搭建和使用

vue-cli 官方提供的一个脚手架&#xff0c;用于快速生成一个vue的项目模板&#xff1b;预先定义 好的目录结构及基础代码&#xff0c;就好比咱们在创建Maven项目时可以选择创建一个 骨架项目&#xff0c;这个骨架项目就是脚手架&#xff0c;我们的开发更加的快速&#xff1b; …

在FlowUs息流,让知识库为你所用|如何打造个人知识库|如何打造企业知识库

&#x1f389; 在 FlowUs 的世界中&#xff0c;知识绽放出无限的可能&#xff01;&#x1f680; 在当今信息爆炸的时代&#xff0c;知识的更新换代速度极快&#xff0c;我们每天都面临着海量的信息冲击。拥有一个属于自己的知识库变得至关重要。 首先&#xff0c;打造自己的知…

【PB案例学习笔记】-24创建一个窗口图形菜单

写在前面 这是PB案例学习笔记系列文章的第24篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

Django 表单使用示例:添加角色

在本文中,我们将使用 Django 的表单(Forms)功能来创建一个添加角色的页面。 创建 Django 项目和应用 首先,我们创建一个名为 ​​form_demo​​​ 的 Django 项目和一个名为 ​​app01​​ 的应用: django-admin startproject form_demo cd form_demo python manage.py…

在Ubuntu 18.04上安装和配置Ansible的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 配置管理系统旨在简化对大量服务器的控制&#xff0c;适用于管理员和运维团队。它们允许您从一个中央位置以自动化的方式控制许多…

Matplotlib中文显示解决方案:字体渲染机制与font.sans-serif设置

在Matplotlib中&#xff0c;设置font.sans-serif参数为中文字体如SimHei&#xff0c;可以使图表支持中文显示的原因在于Matplotlib的字体渲染机制。以下是详细解释&#xff1a; 1. **字体支持**&#xff1a; Matplotlib默认使用的字体可能不支持中文字符。大多数西方字体只包含…

Golang - 90天从新手到大师

开篇 最近有很多小伙伴都在寻找go语言完整学习资料&#xff0c;我整理了一些Golang方面的知识&#xff0c;方便大家学习。内容从最基础的入门到项目设计&#xff0c;希望帮助更多想了解和学习Go语言的伙伴。 因为是持续创作&#xff0c;所以也会持续更新。有些章节目录还没有…

mysql高并发环境解决方案有那些?

1、硬件和基础设施优化 1、使用高性能的服务器硬件&#xff0c;如更快的CPU、更大的内存和高速的存储设备。 2、确保网络带宽和延迟不会对数据库性能产生负面影响。 3、使用负载均衡器将请求分发到多个MySQL服务器上&#xff0c;以实现水平扩展。 2、数据库架构优化 1、读…

免费APP分发平台:小猪APP分发如何解决开发者的痛点

你是否曾为自己开发的APP找不到合适的分发平台而烦恼&#xff1f;你是否因为高昂的分发费用而望而却步&#xff1f;放心吧&#xff0c;你并不是一个人。很多开发者都面临同样的问题。但别担心&#xff0c;小猪APP分发来了&#xff0c;它可以帮你解决这些问题。 小猪app封装www…

面试题--MongoDB

MongoDb MongoDB 是什么&#xff1f; mongodb 是属于文档型的非关系型数据库&#xff0c;是开源、高性能、高可用、可扩展的 数据逻辑层次关系&#xff1a;文档>集合>数据库 在关系型数据库中每一行的数据对应 mongodb 里是一个文档。mongodb 的文档 是以 BSON&…

条件断点在找call中的应用

以TLBB为例&#xff0c;在2024.6.24附近左右的时间段&#xff0c;游戏窗口切换时就会有两个左右的call&#xff0c;在x64dbg下断点之后切换回游戏窗口&#xff0c;很难分辨出哪个是我们需要的动作引起的call&#xff0c;因此在send函数处下条件断点&#xff1a;$breakpointcoun…

FFMPEG 流媒体推流收流基本命令

FFmpeg可用来进行音视频的编解码、转码、剪辑、合成等操作。在流媒体领域&#xff0c;FFmpeg也是一个非常重要的工具&#xff0c;可以用来进行RTSP推流、HLS推流、RTMP推流等操作。 FFmpeg推流&#xff0c;以RTSP推流示例&#xff1a; RTSP推流是指将本地的音视频流通过RTSP协…

数据库课程知识点总结

数据库概述 数据库基本特点&#xff1a;数据结构化&#xff0c;数据独立性&#xff0c;数据冗余小&#xff0c;易扩充&#xff0c;统一管理和控制&#xff0c;永久存储&#xff0c;有组织&#xff0c;可共享 三级模式 模式&#xff1a;一个数据库只有一个模式&#xff0c;是对…

大屏可视化

<!DOCTYPE html> <!-- 这个font-size:20px UI给的字体大小--> <html lang"en" style"font-size: 20px;"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width…

Java中的流处理框架:Kafka Streams与Flink

Java中的流处理框架&#xff1a;Kafka Streams与Flink 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中两个强大的流处理框架&#xff…