【计算机系统结构实验】实验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 for
	 for (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时间产生较大影响。

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

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

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

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

相关文章

Mac使用Vmware Fusion虚拟机配置静态ip地址

一、设置虚拟机的网络为NAT 二、修改虚拟机的网络适配器网络 1、查看虚拟机的网卡 cd /etc/sysconfig/network-scripts#有些系统显示的是ens33&#xff0c;ens160等等 #不同的系统和版本&#xff0c;都会有所不同 #Centos8中默认是ens160,在RedHat/Centos7则为ens33 2、查看网…

封装Detours用于Python中x64函数hook

Detours 代码仓库: https://github.com/microsoft/Detours x64写一个任意地址hook要比x86麻烦的多&#xff0c;所以这里直接封装框架来用于x64的hook。 Detours是微软发布的一个API hook框架&#xff0c;同时支持x86和x64&#xff0c;看文档说也支持ARM和ARM64的Windows。 …

【Linux笔记】网络操作命令详细介绍

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 前言&#xff1a; 网络操作是Linux系统中常见的任务之一&#xff0c;它涵盖了测试网络连接、配置网络接口、显示网络统计信息以及远程登录和文件传…

STM32的以太网外设+PHY(LAN8720)使用详解(5):MAC及DMA配置

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 MAC及DMA配置 1.1 使能ETH时钟 stm32的ETH外设挂载在AHB1总线上&#xff0c;位于RCC_AHB1ENR的bit25-bit27&#xff1a; 相关语句如下&#xff1a; RCC_AHB1PeriphClockCmd(RCC_AHB1…

WPF组合控件TreeView+DataGrid之DataGrid封装-粉丝专栏

wpf的功能非常强大&#xff0c;很多控件都是原生的&#xff0c;但是要使用TreeViewDataGrid的组合&#xff0c;就需要我们自己去封装实现。 我们需要的效果如图所示&#xff1a; 这2个图都是第三方控件自带的&#xff0c;并且都是收费使用。 现在我们就用原生的控件进行封装一…

Tekton

一. 概念 Tekton 官网 Github Tekton 是一种用于构建 CI/CD 管道的云原生解决方案&#xff0c;它由提供构建块的 Tekton Pipelines&#xff0c;Tekton 作为 Kubernetes 集群上的扩展安装和运行&#xff0c;包含一组 Kubernetes 自定义资源&#xff0c;这些资源定义了您可以为…

nodejs+vue+ElementUi资源互助共享平台的设计

后台&#xff1a;管理员功能有个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;咨询师管理&#xff0c;萌宝信息管理&#xff0c;幼儿知识管理&#xff0c;保姆推荐管理&#xff0c;音频资源管理&#xff0c;二手商品管理&#xff0c;商品分类管理&#xff0c;资…

【CF闯关练习】—— 900分段

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

GPTs | Actions应用案例

上篇文章说道&#xff0c;如何使用创建的GPTs通过API接口去获取外部的一些信息&#xff0c;然后把获取的外部信息返回给ChatGPT让它加工出来&#xff0c;回答你的问题&#xff0c;今天我们就来做一个通俗易懂的小案例&#xff0c;让大家来初步了解一下它的使用法&#xff01; …

基于AE、VAE 和 VQ-VAE的图像生成

AE 是将数据映直接映射为数值code&#xff08;确定的数值&#xff09;&#xff0c;主要用于图像压缩与还原VAE是先将数据映射为分布&#xff0c;再从分布中采样得到数值code&#xff0c;主要用于图像生成。AQ-VAE是在原始VAE基础上多了一步Vector Quantization矢量量化操作&…

STM32的以太网外设+PHY(LAN8720)使用详解(1):ETH和PHY介绍

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 以太网外设&#xff08;ETH&#xff09; 1.1 以太网外设&#xff08;ETH&#xff09;简介 STM32F4系列MCU内部集成了一个以太网外设&#xff08;ETH&#xff09;&#xff0c;可以通过介…

DRF之引入

目录 一、web应用模式 【1】前后端混合开发 【2】前后端分离 二、API接口 三、接口测试工具&#xff1a;Postman 四、RESTful API规范 【1】什么是RESTful 【2】RESTful API的规范 2.1 数据的安全保障 2.2 接口特征表现 2.3 多数据版本共存 2.4 数据即是资源&#…

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析

从战争中学习战争。对于参加2024年PMP考试的小伙伴来说&#xff0c;最有效的学习方式是这样地&#xff1a;①阅读了教材&#xff08;PMBOK6、7和敏捷&#xff09;&#xff0c;了解基本概念&#xff1b;②反复刷近期的PMP考试真题&#xff0c;查漏补缺。 为此&#xff0c;华研荟…

华为云Stack 8.X流量模型分析(三)

三、VPC内部二层流量模型分析 1.不同宿主机下虚拟机互访 VM1发送arp请求&#xff0c;arp报文根据流表到达br-tun&#xff0c;br-tun给予VM1到达VM2的MAC信息。此时arp报文不出宿主机&#xff08;Host1&#xff09;&#xff1b; **注意&#xff1a;**br-tun内的信息是由管理平…

2023年PMP证书的含金量有多高?对于企业来说有多大的价值?

PMP含金量更多的是“敲门砖”作用&#xff0c;公司招聘的门槛 当然现在PMP管理模式也很热门&#xff0c;各大企业都有引进改良应用在公司的项目上&#xff0c;之前在校友群里面大家在讨论PMP 的作用也有说到这一点&#xff0c;给大家看看吧。 至于为什么PMP认证从国外引进大陆…

尺寸公差分析与尺寸链计算软件-DTAS3D到底能给我们带来哪些价值?

【技能】DTAS3D能给我们带来哪些价值&#xff1f; DTAS3D是一款高度集成的公差分析软件&#xff0c;旨在为产品开发团队提供准确的建议&#xff0c;从而放心地将设计发布给制造部门。下面是DTAS3D的关键价值和应用: 1.与三维CAD无缝集成: DTAS3D与三维CAD软件 (CATIA、NX、Cr…

如何进行USB丢弃攻击?

USB丢弃攻击&#xff0c;类似于一场表演艺术&#xff0c;您需要构建一个引人入胜的故事&#xff0c;激发目标的好奇心&#xff0c;让他们忽略基本的安全意识&#xff0c;插入您精心准备的USB设备! 本文章仅限娱乐&#xff0c;请勿模仿或进行违法活动&#xff01; 一、选择放置…

提示“由于找不到mfc140u.dll,无法继续执行代码”如何解决?

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到某个动态链接库文件&#xff0c;比如mfc140u.dll。这个问题可能会导致某些应用程序无法正常运行或打开。 一、关于找不到mfc140u.dll文件造成会的问题 mfc140u.dll是Visual C中的一个…

深眸科技以AI+3D视觉技术引领技术创新,赋予工业自动化新的活力

随着工业4.0和智能制造时代的到来&#xff0c;3D机器视觉在工业各领域的应用越来越重要。这种技术改变了传统工业的生产方式&#xff0c;为现代工业带来了更高的生产效率和更精确的质量控制&#xff0c;广泛涉及物体识别、产品检测、尺寸测量、视觉引导定位等环节。 在工业领域…

Qt制作定时关机小程序

文章目录 完成效果图ui界面ui样图 main函数窗口文件头文件cpp文件 引言 一般定时关机采用命令行模式&#xff0c;还需要我们计算在多久后关机&#xff0c;我们可以做一个小程序来定时关机 完成效果图 ui界面 <?xml version"1.0" encoding"UTF-8"?>…