openMP的简单使用

安装,参考:https://blog.csdn.net/augusdi/article/details/8808226
如图所示,右键工程名->属性->C/C+±>语言,找到OpenMP支持,更改设置即可。
这里写图片描述

代码编程,参考:https://blog.csdn.net/zhongkejingwang/article/details/40350027
在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以下面介绍一下OpenMP中for循环的应用。
###1. 首先,如何使一段代码并行处理呢?
omp中使用parallel制导指令标识代码中的并行段,形式为:

#pragma omp parallel
{...//每个线程都会执行大括号里的代码
}

我们编写如下的代码:

#include <iostream>
#include "omp.h"
using namespace std;
int main(int argc, char **argv) {//设置线程数,一般设置的线程数不超过CPU核心数,这里开4个线程执行并行代码段omp_set_num_threads(4);#pragma omp parallel{cout << "Hello" << ", I am Thread " << omp_get_thread_num() << endl;}
}

上面的代码输出结果为:

Hello,Thread Hello,Thread 21
Hello,Thread 3
Hello,Thread 0

可以看到四个线程各自独立的输出了cout后面的内容。如果去掉omp_set_num_threads(4)语句,我们的电脑CPU的每个核都会独立执行,我的CPU有8个核,就会执行8次大括号内的语句。
###2.带有for的制导指令:
使用形式为:

#pragma omp parallel for
for()

或者

#pragma omp parallel
{	//注意:大括号必须要另起一行#pragma omp forfor()
}

第一种形式作用域只是紧跟着的那个for循环,而第二种形式在整个并行块中可以出现多个for制导指令。

...
#include "omp.h"
...
int main()
{omp_set_num_threads(4);#pragma omp parallel forfor (int i = 0; i < 6; i++){printf("i = %d,Hello,Thread:%d\n", i, omp_get_thread_num());}return 0;
}

输出结果如下:

i = 0,Hello,Thread:0
i = 1,Hello,Thread:0
i = 2,Hello,Thread:1
i = 3,Hello,Thread:1
i = 5,Hello,Thread:3
i = 4,Hello,Thread:2

我们可以看到输出6次printf的任务被分给了CPU的4个核。
###3.数据同步问题

int main()
{int n = 100000;int sum = 0;omp_set_num_threads(4);#pragma omp parallel forfor (int i = 0; i < n; i++){sum++;}cout << sum << endl;return 0;
}

期望的正确结果是100000,但是这样写是错误的。看代码,由于默认情况下sum变量是每个线程共享的,所以多个线程同时对sum操作时就会因为数据同步问题导致结果不对,显然,输出结果每次都不同,这是无法预知的,下面是输出结果,但是每个线程不会共享for循环中的变量,包括i值。所以如果线程要调用for循环外的变量,要加critical语句,下面有介绍。

//多次输出结果
58504
45203
35716
...

#####解决方法1:方法一:对操作共享变量的代码段做同步标识

int main()
{int n = 100000;int sum = 0;omp_set_num_threads(4);#pragma omp parallel forfor (int i = 0; i < n; i++){#pragma omp critical{sum++;}}cout << sum << endl;return 0;
}

critical制导语句标识的下一行代码,也可以是跟着一个大括号括起来的代码段做了同步处理。
输出结果100000。

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

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

相关文章

车联网系统会不会只是智能手机系统的翻版?

来源&#xff1a;智能相对论摘要&#xff1a;对于当前大热的车联网技术&#xff0c;各家车企都像“王婆卖瓜”一样夸赞自己&#xff0c;在一片叫好声中&#xff0c;我们需要厘清一个问题&#xff0c;车联网系统到底是不是“另一个”智能手机系统&#xff1f;在BAT集体入局车联网…

清华、中科大实现了量子版本的GAN,平均保真度98.8%

作者&#xff1a;Ling Hu等编译&#xff1a;机器之心 刘晓坤、张倩摘要&#xff1a;清华和中科大的研究者在 Science Advances 上发表论文&#xff0c;他们在超导量子电路上实现了第一个生成对抗学习的原理验证&#xff0c;即量子版本的 GAN。实验中生成的单个 qubit 的平均保真…

一个令人心醉的谜题——DNA和RNA是如何演化出美妙的螺旋结构?

来源&#xff1a;原理丨公众号在现代科学中&#xff0c;一直存在一个匪夷所思到令无数科学家心醉的谜题——DNA和RNA究竟是如何演化出这种美妙的螺旋结构的&#xff1f;最近&#xff0c;佐治亚理工学院的一组研究人员在超分子聚合物的形成过程中&#xff0c;发现了一种全然自发…

AI人才「用工荒」如何解决?看看这几家顶级公司的应对策略

来源&#xff1a; Forbes编译&#xff1a; 机器之心 太浪在未来几年&#xff0c;人工智能可能会成为众多行业的战略选择&#xff0c;但有一个重大的挑战&#xff1a;招人。如何避免招募 AI 人才的误区&#xff1f;这里有来自几家顶级公司的建议。招到 AI 人才后&#xff0c;可能…

AI芯片混战,谁能挑战英伟达?

来源&#xff1a;forbes我准备写一篇预测未来一年的AI芯片&#xff0c;以及英伟达如何应对挑战的文章&#xff0c;但我很快意识到&#xff0c;文章要比我预期的要长得多。由于有很多内容要介绍&#xff0c;我决定把文章分为3个部分。第1部分&#xff1a;简介&#xff0c;以及分…

webServices 应该支持Get和Post调用,在web.config应该增加以下代码

1 #region Tip:使用说明2 //webServices 应该支持Get和Post调用&#xff0c;在web.config应该增加以下代码3 //<webServices>4 // <protocols>5 // <add name"HttpGet"/>6 // <add nam…

VS2017安装openGL

项目名->管理NuGet程序包->浏览->搜索nupengl&#xff0c;下载安装即可。 参考博客&#xff1a;https://blog.csdn.net/HY_JT/article/details/79482556 还可以参考博客&#xff1a;https://blog.csdn.net/yinglang19941010/article/details/50166343 #include <c…

从专利数量看全球最具创新力的50家公司

来源&#xff1a;资本实验室专利&#xff0c;在很大程度上不仅代表着一家企业的技术实力&#xff0c;也代表着一个国家的长期发展潜力。很多机构也习惯用专利数量来衡量企业或国家的创新能力。为保护自身的技术发明&#xff0c;全球大型公司都会在很多国家申请专利&#xff0c;…

2019年深度学习的十大预测

来源&#xff1a;云栖社区丨公众号摘要&#xff1a;如果连思考方式都是错的&#xff0c;机器学习肯定不会有很大的进步&#xff01;2018年已结束&#xff0c;现在是开始预测2019深度学习的时候了。以下是我之前对2017年和2018年的预测和回顾&#xff1a;关于2017年预测和回顾。…

一张图看懂AR至GL数据流

转载于:https://www.cnblogs.com/wanghang/p/6299101.html

腾讯帝国的野蛮生长史

来源&#xff1a; CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;译者&#xff1a;弯月如今的社交巨头腾讯&#xff0c;可以说是很多厂商可望而不可及的存在。手握微信和QQ这两张王牌&#xff0c;其制霸着整个国民的社交脉络。不过在腾讯成立之初&#xff0c;也是经过了漫…

[LeetCode] Plus One

Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 这题有意思啊&#xff0c;虽然是easy题但我还是折腾了很久&#xff0c;一开始做出一个逗…

六大“未来式”存储器,谁将脱颖而出?

来源&#xff1a;半导体行业观察摘要&#xff1a;最近&#xff0c;一篇回顾该领域现状的论文对六种最有前景的技术进行了盘点和解读。对神经形态计算的浓厚兴趣刺激人们研发出一系列全新的存储设备&#xff0c;这些设备可以复制生物神经元和突触功能。最近&#xff0c;一篇回顾…

cuda学习

CUDA 安装测试部分 https://blog.csdn.net/sunmc1204953974/article/details/51000970 CUDA的HelloWorld程序编写 https://www.cnblogs.com/neopenx/p/4643705.html 对多线程并行处理的解释&#xff1a;https://blog.csdn.net/sunmc1204953974/article/details/51025801 以下的…

英特尔第七任CEO敲定 斯旺为何受到董事会青睐?

来源&#xff1a;网易科技2019年1月最后一天&#xff0c;芯片巨头英特尔公司(Intel)宣布任命临时首席执行官罗伯特斯旺(Robert Swan)为正式CEO&#xff0c;从而结束了长达数月的猎头工作。此前&#xff0c;英特尔前任CEO布莱恩柯再奇(Brian Krzanich)因与员工存在“暧昧关系”而…

图灵奖得主长文报告:是什么开启了计算机架构的新黄金十年?

来源&#xff1a;AI科技评论摘要&#xff1a;2017 年图灵奖的两位得主 John L. Hennessy 和 David A. Patterson 就是这个新浪潮的见证者和引领者。近几年来&#xff0c;不论是普通消费者还是科研人员们都可以感受到两种浪潮&#xff0c;一种是CPU速度的提升越来越不显著了&…

ubuntu安装wine之后进不了系统

以前曾经装过一次wine&#xff0c;安装的时候没碰到什么问题&#xff0c;但卸载的时候却出问题了&#xff0c;把我nouvean显卡给删除了。 自然&#xff0c;我下一次启动的时候就进不了桌面了。所以我得重装一次&#xff0c;那一次重装的是整个系统&#xff01; 今天突然觉得evi…

5G到底有哪些能力

来源&#xff1a;工信头条作者&#xff1a;华为5G首席科学家 童文摘要&#xff1a;华为5G首席科学家告诉你5G到底有哪些能力&#xff01;2019年是5G产业进入全面商用的关键一年&#xff0c;全球5G网络的部署已经启动。2018年6月&#xff0c;5G独立组网标准冻结&#xff0c;5G完…

口琴简易吹奏法

摘自上海口琴说明书。 口琴体积小巧&#xff0c;携带方便&#xff0c;有"带着走的音乐"、"口袋里的钢琴"之称。 口琴是一种簧舌乐器&#xff0c;用嘴吹吸发音。 复音口琴每孔上下两个是同音&#xff0c;吹奏时两格内的簧片同时发音。 口琴的 "1、3…

商业航天:通往太空旅程的新门票

来源&#xff1a;资本实验室自1969年美国实现人类首次登月之后&#xff0c;很长一段时间里&#xff0c;人类对月球的探索计划因各种原因变得沉寂。近年来&#xff0c;随着各国航天科技的持续发展&#xff0c;人类正在启动对月球的全新探索旅程。今年1月3日&#xff0c;我国“嫦…