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

目录

一、实验目的

二、实验说明

三、实验过程

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/738772.html

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

相关文章

flex 弹性布局还不懂?一篇文章带你了解一下

flex 是什么 Flex布局&#xff0c;全称为Flexible Box布局&#xff0c;或简称Flexbox&#xff0c;是一种由W3C提出用于网页设计的新型布局模式。它旨在提供一个更加有效且灵活的方式来布局、对齐和分配容器内项目的空间&#xff0c;无论是行还是列方向。Flex布局特别适用于响应…

头歌——机器学习——决策树案例

第1关&#xff1a;基于决策树模型的应用案例 任务描述 本关任务&#xff1a;使用决策树算法完成成人收入预测。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.数据特征处理&#xff0c;2.使用决策树算法完成成人收入预测。 数据处理及特征工程 本次任务…

Adaptive Server Connection Failed on Windows

最近在使用pymssql &#xff08;版本2.3.0&#xff09;连接SQL Server2012遇到如下问题&#xff1a; pymssql._mssql.MSSQLDatabaseException: (20002, bDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (localhost)\nDB-Lib error message 2000…

Linux如何远程访问?

远程访问是现代计算机网络中非常重要的一个功能&#xff0c;它允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行操作。对于使用Linux操作系统的用户来说&#xff0c;Linux远程访问是非常常见的需求。本文将介绍如何实现Linux远程访问&#xff0c;并简要介绍一…

GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

目录 概述 1 使用GUI Guider 设计UI 1.1 创建页面 1.2 页面切换事件实现 1.3 生成代码和仿真 1.3.1 生成和编译代码 1.3.2 仿真UI 2 GUI Guider生成的代码结构 2.1 代码结构介绍 2.2 Project目录下的文件 3 板卡上移植UI 3.1 加载代码至工程目录 3.2 主函数中调…

高职人工智能专业实训课之“自然语言处理”

一、前言 在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术日益成为研究和应用的热点。为了满足高职院校对NLP专业实训课程的需求&#xff0c;唯众人工智能教学实训凭借其前沿的教育技术平台&#xff0c;特别是GPU虚拟化技术&#xff0c;为学生提供了高…

C语言转义序列的含义和用法

基础理论 在C语言中&#xff0c;转义序列是一种特殊的字符组合&#xff0c;以反斜杠\开头&#xff0c;后面跟着一个或多个字符&#xff0c;用于表示不能直接输入的字符或者控制字符。转义序列允许程序员在字符串中包含那些不易直接输入的字符&#xff0c;如换行符、制表符或特…

2-3KW户储、家储逆变器设计资料

储能电源方案双向逆变器板资料&#xff0c;原理文件&#xff0c;PCB文件&#xff0c;源代码&#xff0c;bom清单。 bom表&#xff1a; PCB&#xff1a; 变压器电感 2-3KW户储、家储逆变器设计通常需要考虑以下几个方面&#xff1a; 输入电压范围&#xff1a;逆变器需要能够适应…

“人工智能+”带来新变化

以生成式人工智能&#xff08;AIGC&#xff09;为代表的新一代人工智能技术创新加速演进&#xff0c;相关商业化应用成果也不断涌现&#xff0c;行业应用范围不断拓展&#xff0c;深度赋能实体经济&#xff0c;为行业提质增效与实现减排提供助力。 自主航运初创公司OrcaAI于6月…

帕金森患者营养补充指南:维生素的重要性与选择

帕金森病&#xff0c;在众多营养素中&#xff0c;维生素对于帕金森病患者来说尤为重要。本文将详细介绍帕金森患者应该补充哪些维生素&#xff0c;以及这些维生素的重要性。 一、维生素B组 维生素B组在帕金森病患者中扮演着重要的角色。其中&#xff0c;维生素B6是神经递质多…

JavaSE (Java基础):方法简介

6 Java中的方法 下面关于Java方法的介绍都引用了某B大佬狂神的PPT 6.1 方法简介 自己看注释&#xff0c;&#xff0c;&#xff0c;&#xff0c;这就是方法&#xff01; package com.zlx.method;public class Demo01 {//main方法public static void main(String[] args) {//实…

基于YOLOv5+PyQT5的吸烟行为检测(含pyqt页面、模型、数据集)

简介 吸烟不仅对个人健康有害,也可能在某些特定场合带来安全隐患。为了有效地监控公共场所和工作环境中的吸烟行为,我们开发了一种基于YOLOv5目标检测模型的吸烟检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取…

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上&#xff0c;或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景&#xff1a; 表单…

同城跑腿APP开发,随叫随到超方便!

随着移动互联网的发展和人们生活节奏的加快&#xff0c;越来越多的人们没有闲暇的时间来做一些繁琐的事情&#xff0c;比如说买药、挂号、排队、送花、取文件等等。如果没有时间去处理这些事情怎么办&#xff1f;开发同城跑腿APP&#xff0c;提供跑腿服务&#xff0c;随时办事随…

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇&#xff0c;分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》&#xff0c;3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

C++ | Leetcode C++题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int majorityElement(vector<int>& nums) {int candidate -1;int count 0;for (int num : nums) {if (num candidate)count;else if (--count < 0) {candidate num;count 1;}}return candidate;…

大咖共话|智领未来,数字化革新生命健康产业

在数字化浪潮席卷全球的今天&#xff0c;生命健康产业正迎来前所未有的发展机遇。6月20日&#xff0c;“第三届滨海中关村协同创新发展交流会”在北京隆重举办&#xff0c;唯迈医疗与业界大咖齐聚一堂&#xff0c;在“数字化赋能驱动生命健康产业发展”圆桌论坛上&#xff0c;共…

Modsecurity安装+Nginx+腾讯云CentOS+XSS-Labs靶场+WAF规则

君衍. 一、项目环境介绍二、ModSecurity介绍1、Modsecurity基本概述2、Modsecurity工作原理3、Modsecurity功能特点4、Modsecurity优点5、Modsecurity缺点 三、Nginx介绍及配置文件1、Nginx基本概述2、Nginx应用场景3、正向代理4、反向代理5、负载均衡6、动静分离7、主页面路径…

LeetCode 算法:二叉树的中序遍历 c++

原题链接&#x1f517;&#xff1a;二叉树的中序遍历 难度&#xff1a;简单⭐️ 题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&…

运动蓝牙耳机哪个口碑最好?五大高口碑顶尖单品推荐

在这个快节奏时代&#xff0c;智能手机的普及使得运动开放式耳机逐渐成为我们日常出行的必备单品。运动开放式耳机凭借独特的外形设计&#xff0c;赢得了众多消费者的喜爱。它们不同于传统的入耳式设计&#xff0c;以舒适佩戴为核心&#xff0c;有效缓解了长时间佩戴对耳部造成…