基于OpenMP的并行计算实验

news2024/11/28 18:52:25

一、实验目的

在Linux系统中,基于C++编写OpenMP用例对并行计算进行实验:

1.掌握OpenMP的配置方式;

2.通过编写测试用例,观察引入OpenMP的加速效果

二、实验内容

2.1配置并测试OpenMP

1.配置并测试OpenMP

配置环境变量,设置线程数:

 2.编写测试用例

编写一个简单的测试用例:

#include <iostream>
#include <omp.h>

using namespace std;

int main(){
#pragma omp parallel
{
    cout<<"Test"<<endl;
}
return 0;
}

3.编译并运行

编译上述测试用例:

 执行生成的可执行文件

执行结果如下

 

 2.2编写测试用例

通过编写一个测试用例来说明并行计算的加速效果,该用例有一个简单的函数test(),在main()中一个for循环把这个函数重复运行8次

首先编写单核运行的程序,并加入计时功能:

#include <iostream>
#include <sys/time.h>

using namespace std;

void test(){
int res = 0;
for(int i=0;i<100000000;i++)
 res++;
}

int main(){
struct timeval t1,t2;
double timeuse;
gettimeofday(&t1,NULL);

for(int i=0;i<8;i++)
test();
gettimeofday(&t2,NULL);
timeuse = (t2.tv_sec - t1.tv_sec)+double(t2.tv_usec-t1.tv_usec)/1000000.0;
cout<<"time elapse:"<<timeuse<<" sec"<<endl;
return 0;
}

编译运行,打印出消耗时间

引入OpenMP,将上述代码转换为多核运算:

#include <iostream>
#include <sys/time.h>
#include <omp.h>
using namespace std;

void test(){
int res = 0;
for(int i=0;i<100000000;i++)
 res++;
}

int main(){
struct timeval t1,t2;
double timeuse;
gettimeofday(&t1,NULL);
omp_set_num_threads(4);
#pragma omp parallel for
for(int i=0;i<8;i++)
test();
gettimeofday(&t2,NULL);
timeuse = (t2.tv_sec - t1.tv_sec)+double(t2.tv_usec-t1.tv_usec)/1000000.0;
cout<<"time elapse:"<<timeuse<<" sec"<<endl;
return 0;
}

 编译运行,打印出多核运算的消耗时间:

 单核消耗时间为1.29689s,而多核消耗时间仅为0.374862s,由此可知多核并行执行速度远高于单核运行速度

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

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

相关文章

MySQL基础(三十五)多版本并发控制

1. 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC 是通过数据行的多个版本管理来实现数据库的 并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读 操作有了保证。换言之&…

乡镇外卖好做吗?这几点一定要注意

乡镇外卖可靠吗&#xff1f;随着90后逐渐成为社会的主力军&#xff0c;自主创业&#xff0c;不做农民工已经成为这一代人的标签。找到一个项目难&#xff0c;可靠的项目更难找。根据实际数据反馈&#xff0c;乡镇外卖的就是是一个小而精细的项目。 但如果想通过乡镇外卖每月挣…

Python获取酷得music并下载,获得无限听

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests re win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源) 代码实现步骤 <基…

H桥电机驱动芯片CS9027C可pin对pin兼容DRV8812

CS9027C为打印机和其它电机一体化应用提供一种双通道集成电机驱动方案。CS9027C有两路 H 桥驱动&#xff0c;每个H桥可提供最大输出电流2A(在24V 和Ta 25℃ 适当散热条件下)&#xff0c;可驱动两个刷式直流电机&#xff0c;或者一个双极步进电机&#xff0c;或者螺线管或者其它…

全网火爆,性能测试从0到1分析需求到实战详解,冲出高级测试岗...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、制定测试目的 …

《设计模式》备忘录模式

《设计模式》备忘录模式 定义&#xff1a; 备忘录模式又称为快照模式或者令牌模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;这样可以在以后将对象恢复到原先保存的状态。属性行为型模式。 备…

【云原生】私有镜像的解决方案-Harbor管理实战

前言 通过前面的镜像管理&#xff0c;我们知道docker的开发和运行都离不开镜像管理&#xff0c;如果要进行镜像管理就需要使用镜像仓库。 docker官方提供的镜像仓库是&#xff1a; docker hub&#xff0c; 很方面但从安全和效率的角度考虑&#xff0c;这样的公有镜像环境就无…

Qt文件系统源码分析—第一篇QFile

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice QIODev…

实用技能 || 从安装到实战!Citespace、vosviewer保姆级教程!

【基于Citespace和vosviewer文献计量学相关论文 】 专题一&#xff1a;文献计量学方法与应用 1 文献计量学方法基本介绍 2 与其他综述方法区别联系 3 各学科领域应用趋势近况 4 主流分析软件优缺点对比 5 经典高分10SCI思路复盘 6 软件安装与Java环境配置 专题二&#…

【IDEA】DeBug(图文并茂)

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 IDAEA&#xff08;Interactive Data Anal…

【k8s】【ELK】Sidecar容器运行日志Agent

1、日志收集场景分析与说明 对于那些能够将日志输出到本地文件的Pod&#xff0c;我们可以使用Sidecar模式方式运行一个日志采集Agent&#xff0c;对其进行单独收集日志1、首先需要将Pod中的业务容器日志输出至本地文件&#xff0c;而后运行一个Filebeat边车容器&#xff0c;采…

【Mysql实战】存储过程详解

快速入门 创建存储过程 CREATE PROCEDURE p1()BEGIN-- SQL语句SELECT count(*) FROM user; END;调用存储过程 CALL p1();查看存储过程 SHOW CREATE PROCEDURE 存储过程名称删除存储过程 DROP PROCEDURE [ IF EXISTS ] 存储过程名称 ;入参出参 IN&#xff1a;该类参数作为输…

关于不同处理器的函数调用规则

关于不同处理器的函数调用规则 接前面一篇变长参数调用的记录&#xff0c;这次从原理上进行了进一步研究。 不同调用规则对对于编译出来的汇编影响很大的&#xff0c;这里之前的理解比较粗浅&#xff0c;尤其是一般教科书或者网上能看到的内容都比较老&#xff0c;这里记录一下…

【马蹄集】第十一周作业

第十一周作业 目录 MT2012 竹鼠的白色季节MT2013 照亮街道MT2014 打靶MT2026 二维坐标点移动MT2027 一秒成零 MT2012 竹鼠的白色季节 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;250M 题目描述 小码哥的竹鼠养殖场中的竹鼠都在一条直线的隔间…

深度学习笔记之递归网络(一)引子:序列模型

深度学习笔记之递归网络——引子&#xff1a;序列模型 引言回顾&#xff1a;齐次马尔可夫假设序列模型序列信息序列数据建模 引言 从本节开始&#xff0c;将介绍递归网络系列。本节将介绍序列模型。 回顾&#xff1a;齐次马尔可夫假设 齐次马尔可夫假设——在隐马尔可夫模型…

LeetCode 124. 二叉树中的最大路径和

124. 二叉树中的最大路径和 描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一…

收藏|必读10本pcb设计书籍推荐

1."High-Speed Digital Design: A Handbook of Black Magic"。 作者是Howard Johnson和Martin Graham。这是一本关于高速数字电路设计的优秀教材&#xff0c;适合那些需要设计高速电路的工程师。 作为比较早出来的信号完整性参考书&#xff0c;对国内的信号完整性研…

Apollo与SpringBoot整合原理深度剖析

Apollo与SpringBoot整合原理深度剖析 Spring环境上下文模块Value注解如何完成属性注入application.yml等配置文件加载时机监听环境上下文prepared事件Loader加载配置文件 Apollo与SpringBoot整合原理Value注解的热更新原理 Spring环境上下文模块 Spring Envionment设计如下: 需…

Unlimiformer:一个Transformers输入无限长文本思路和中文长文本摘要上的性能实验

Unlimiformer&#xff1a;一个Transformers输入无限长文本思路和中文长文本摘要上的性能实验 1、前言 在处理长文本输入时&#xff0c;以往方法常采用截断&#xff08;如&#xff1a;max_len512&#xff09;、分块&#xff08;将输入分成多个块&#xff0c;并进行逐块处理&am…

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇

悟纤&#xff1a;师傅&#xff0c;那个讨人厌的产品又来捣乱了~ &#x1f612; 师傅&#xff1a;哈哈&#xff0c;你又来抱怨老板设定的无休止需求了啊&#xff1f; &#x1f606; 悟纤&#xff1a;没错&#xff0c;这次竟然要求导出多个Sheet&#xff0c;这还能不能好好地活着…