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集体入局车联网…

mybatis大于小于的转义

今天在写代码时&#xff0c;由于业务&#xff0c;须要在mybatis中&#xff0c;使用到大于号&#xff0c;小于号&#xff0c;所以就在SQL中直接使用了。SELECT * FROM test WHERE 1 1 AND start_date < CURRENT_DATE AND end_date > CURRENT_DATE但是&#xff0c;在运行时…

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

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

RMQ求区间最值 nlog(n)

转载于&#xff1a;http://blog.csdn.net/xuzengqiang/article/details/7350465 RMQ算法全称为(Range Minimum/Maximum Query)意思是给你一个长度为n的数组A,求出给定区间的最值的下标。当然我们可以采用枚举&#xff0c;但是我们也可以使用线段树来优化&#xff0c;复杂度为(n…

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

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

Jacobi迭代法

我们在求解矩阵时&#xff0c;有很多种方法&#xff0c;其中当矩阵是大型稀疏矩阵&#xff08;矩阵中有大部分元素都为0&#xff09;时&#xff0c;我们可以用迭代法求解。 其中Jacobi迭代法就是很简单易懂的一种。 我编写的C代码如下&#xff0c;其中文件matrix.txt内容如下…

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

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

单应矩阵的解释

参考博客&#xff1a; https://www.cnblogs.com/wangguchangqing/p/8287585.html https://blog.csdn.net/jay463261929/article/details/53611363

学习网址积累

ecshop120.com ecshop的学习开发网址 68ecshop 转载于:https://www.cnblogs.com/ymj0906/p/4088749.html

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;…

Java魔法堂:初探MessageFormat.format和ChoiceFormat

一、前言                               刚开始从.net的转向java的时候总觉得 String.format 用得不习惯&#xff0c;希望格式模版会这样 {0}, this is {1}s cat.{1},this is {0}s dog. 而不是 %1$s,this is %2$ss cat.%2$s,this is %1$ss dog.…

2019年深度学习的十大预测

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

正整数 n 所有可能的和式的组合

正整数 n 所有可能的和式的组合&#xff08;如&#xff1b; 41111、 112、 13、22、4&#xff09; 代码的思想是&#xff0c;从最小值开始&#xff0c;依次加入序列中&#xff0c;整体类似DFS&#xff08;深搜&#xff09;&#xff0c;因为有回退的一步。区别是加入一个值s&am…

一张图看懂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;https://coderschool.cn/1853.html