【计算机系统结构实验】实验5 多核编程(OpenMP编程)

5.1 实验目的

加深对多核处理器架构的理解;

掌握使用OpenMP进行多线程编程的基本方法;

学习Windows和OpenEuler环境下多核编程的过程和time命令;

5.2 实验平台

  1. 需要多核处理器的计算机和微软编程工具Visual Studio 2012。
  2. Taishan服务器,已经安装Openeuler操作系统,安装gcc编译器,学生用PC实验机和相关账号访问。

5.3 实验内容

1. Windows环境下的多核编程

1)Visual Studio环境中,新建一个空项目,在项目属性中打开OpenMP支持即可(如图所示)。

2)添加项目中的cpp源文件,代码如下:

#include <iostream>
#include <time.h>
using namespace std;
void test()
{int a = 0;for (int i=0;i<100000000;i++)a++;}int main()
{clock_t t1 = clock();for (int i=0;i<8;i++)test();clock_t t2 = clock();cout<<"time: "<<t2-t1<<endl;getchar();}

 

查看记录一下运行时间(这是完全串行执行的时间)。

3)然后在for 循环前面增加一行:#pragma omp parallel for

即代码如下:

#include <iostream>
#include <time.h>
using namespace std;
void test(){int a = 0;for (int i=0;i<100000000;i++)a++;}int main(){clock_t t1 = clock();#pragma omp parallel forfor (int i=0;i<8;i++)test();clock_t t2 = clock();cout<<"time: "<<t2-t1<<endl;getchar();}

 

再查看记录一下运行时间(这是把for循环部分变成多线程并行执行的时间。线程数目就是你电脑CPU的默认线程数目)。分析一下程序性能提升了多少。

执行时间从1305减小至234,多线程并行比完全串行减少了82%。

2. Openeuler环境下的多核编程

1)在实验机器上,使用学生账号通过SSH方式远程连接Taishan服务器 (用户名:stud001——stud140,密码:1)

2)使用lscpu命令,了解Taishan服务器CPU信息,包括CPU(s): 、Thread(s) per core、Core(s) per socket、Socket(s)

 3)使用vim编辑器,创建程序threads.c,并使用gcc编译该程序

 4)运行threads程序,查看并记录运行结果

 5)使用time命令查看real时间(墙上时间(wall clock time)

 6)在threads.c的基础上进行修改,加入多线程指令,了解OMP用法及默认线程数。建立threadsOMP.c程序,使用gcc -fopenmp命令编译后,运行并查看程序结果。观察程序运行时间的变化,并分析原因。

可以看到,96个线程的程序运行时间并不比完全串行执行的时间少,原因可能是clock()测量所有线程的累积时间,上下文切换影响到了多线程的执行速度。

7)使用time命令运行threadsOMP程序,查看墙上时间,比较与之前程序的差异。

    可以看到,96个线程的程序运行时间比完全串行执行的时间多约0.05。但是,96个线程的程序运行的real时间比完全串行执行的real时间少了约87%,user用户CPU时间不相上下,sys系统CPU时间比完全串行执行的时间多了线程切换时间。可见,多个线程可明显降低real执行时间,但是由于上下文切换等原因,程序运行时间反而比完全串行执行的时间长。

8)修改程序使用不同线程数(变量nt)运行程序观察程序结果及墙上时间的变化。列表记录nt为1、2、4、6、8、9、10、32、96时的运行时间

线程数(nt=)

程序结果Time

Real(s)

User(s)

Sys(s)

1

2.537147

2.485

2.560

0.009

2

2.560795

1.244

2.554

0.008

4

2.580562

0.672

2.582

0.000

6

2.549261

0.624

2.545

0.008

8

2.541675

0.314

2.290

0.268

9

2.535507

0.314

2.552

0.004

10

2.541194

0.314

2.325

0.231

32

2.537887

0.314

2.537

0.008

96

2.534621

0.314

2.549

0.008

可以看到,1个线程的程序结果Time与32个线程的程序结果Time差不多,从线程数为2开始,线程数越多,程序结果Time越小;从线程数为1到线程数为8,程序运行的real时间大幅减少,而从线程数为8往后,线程数的增加不会对程序运行的real时间产生较大影响;线程数的变化不会对程序运行的user用户CPU时间和sys系统CPU时间产生较大影响。

-------------------------------------------------------------------------------------------------------

最后一点碎碎念:如果各位有发现本文有哪处有误或理解不当的地方,敬请指正。

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

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

相关文章

互联网加竞赛 python图像检索系统设计与实现

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python图像检索系统设计与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c…

JDBC学习,从入门到入土

JDBC引入 JDBC概念&#xff1a; JDBC是使用Java语言操作关系型数据库的一套API。全称&#xff1a;&#xff08;Java DataBase Connectivity&#xff09;Java数据库连接 JDBC的本质&#xff1a; 官方定义的一套操作所有关系型数据库的规则&#xff0c;即接口。 各个数据库厂…

C# WPF上位机开发(业务主流程才是核心)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说了很多的c# wpf编程技术&#xff0c;里面有控件&#xff0c;有绘图&#xff0c;有数据库&#xff0c;有多线程等技术。但是他们都属于实…

数据结构之进阶二叉树(二叉搜索树和AVL树、红黑树的实现)超详细解析,附实操图和搜索二叉树的实现过程图

绪论​ “生命有如铁砧&#xff0c;愈被敲打&#xff0c;愈能发出火花。——伽利略”&#xff1b;本章主要是数据结构 二叉树的进阶知识&#xff0c;若之前没学过二叉树建议看看这篇文章一篇掌握二叉树&#xff0c;本章的知识从浅到深的对搜索二叉树的使用进行了介绍和对其底层…

数据结构 | 查漏补缺

目录 数据的基本单位 冒泡排序 DFS和BFS中文 Prim 比较 中序线索二叉树 顺序栈 链栈 时间复杂度 循环队列 求第K个结点的值 数据的基本单位 数据元素 循环队列sq中&#xff0c;用数组elem[0‥25]存放数据元素&#xff0c;设当前sq->front为20&#xff0c;sq-&g…

MySQL——内置函数

目录 一.日期函数 1.current_date() 2.current_time() 3.current_stamp() 4.date_add() 5.date_sub() 6.datediff 7.date 8.now 二.字符串函数 1.charset() 2.concat() 3.length() 4.replace 5.substring(str,postion,length) 6.instr&#xff08;string,substr…

零代码助力服装行业数字化转型

内容来自演讲&#xff1a;涂岳俊 | 广州市衣湛国际信息科技有限公司 | CEO 摘要 这篇文章讨论了为什么选择明道云零代码平台&#xff0c;以及它如何帮助服装企业解决各种问题。作者分享了自己的经验&#xff0c;并列举了一些成功的案例来证明零代码平台的优势。文章还提到了在…

[Unity错误解决]There are 2 audio listeners in the scene.

There are 2 audio listeners in the scene. Please ensure there is always exactly one audio listener in the scene. 从组件中找出包含 Audio Listener 的&#xff0c;只激活一个&#xff0c;其他的关掉

【Amazon 实验①】使用Amazon WAF做基础 Web Service 防护

文章目录 一、实验介绍二、实验环境准备三、验证实验环境四、Web ACLs 配置 & AWS 托管规则4.1 Web ACLs 介绍4.2 Managed Rules 托管规则4.3 防护常见威胁类型&#xff08;sql注入&#xff0c;XSS&#xff09;4.4 实验步骤4.4.1 创建Web ACL4.4.2 测试用例4.4.3 测试结果4…

融资项目——vue之路由实现

通俗来说&#xff0c;路由就是锚点<a>的升级版。下面举一个例子来了解&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div id"list"><h1…

【C++】可变参数模板使用总结(简洁易懂,详细,含代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》…

【Unity基础】9.地形系统Terrain

【Unity基础】9.地形系统Terrain 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;地形编辑器Terrain &#xff08;1&#xff09;创建地形 游戏场景中大多数的山川河流地表地貌都是基…

前端项目为什么需要 TypeScript 来强化?

什么是TypeScript? TypeScript 是一个为开发大规模应用程序而设计的语言。它是 JavaScript 的一个超集&#xff0c;包含 JavaScript 全部的功能&#xff0c;并扩展了一些新的特性。具体来说&#xff0c;TypeScript 增加了如类型注解和编译时类型检查等特性&#xff1a; let n…

淘宝通过关键字搜索商品列表API接口对接详细步骤(支持免费测试)

通过关键字搜索商品&#xff0c;批量获取到相关商品&#xff0c;这是几乎所有电商平台购物商城都有的功能。我将此功能封装为API&#xff0c;可供外部软件直接调用&#xff0c;实现通过关键字搜索淘宝商品的功能。 接口名称&#xff1a;item_search-按关键字搜索淘宝商品 请求…

微信小程序promise封装

一. 在utils文件夹内创建一个request.js 写以下封装的 wx.request() 方法 const baseURL https:// 域名 ; //公用总路径地址 export const request (params) > { //暴露出去一个函数&#xff0c;并且接收一个外部传入的参数let dataObj params.data || {}; //…

pytorch中nn.Sequential详解

1 nn.Sequential概述 1.1 nn.Sequential介绍 nn.Sequential是一个序列容器&#xff0c;用于搭建神经网络的模块被按照被传入构造器的顺序添加到容器中。除此之外&#xff0c;一个包含神经网络模块的OrderedDict也可以被传入nn.Sequential()容器中。利用nn.Sequential()搭建好…

csrf自动化检测调研

https://github.com/pillarjs/understanding-csrf/blob/master/README_zh.md CSRF 攻击者在钓鱼站点&#xff0c;可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求&#xff1a; <form action"https://my.site.com/me/something-destructive" metho…

一些问题/技巧的集合(仅个人使用)

目录 第一章、1.1&#xff09;前端找不到图片1.2&#xff09;1.3&#xff09;1.4&#xff09; 第二章、2.1&#xff09;2.2&#xff09;2.3&#xff09; 第三章、3.1&#xff09;3.2&#xff09;3.3&#xff09; 第四章、4.1&#xff09;4.2&#xff09;4.3&#xff09; 友情提…

系列一、GitHub搜索技巧

一、GitHub搜索技巧 1.1、概述 作为程序员&#xff0c;GitHub大家应该都再熟悉不过了&#xff0c;很多时候当我们需要使用某一项技能而又无从下手时&#xff0c;通常会在百度&#xff08;面向百度编程&#xff09;或者在GitHub上通过关键字寻找相关案例&#xff0c;比如我想学…