openMP学习笔记(一)

声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。

本文链接:http://blog.csdn.net/li_007/archive/2009/04/30/4139211.aspx

开拓进取的小乌龟------->CSDN点滴点点滴滴Blog

之前大概看了一下openMP,并且在初期像很多人一样犯了一些低级错误。

openMP是一种API,不是另一种编程语言,是像XML这样的一种业界标准,是一种基于内存共享的可扩展的可移植的多核并行编程模型,它适合于PC应用程序,同样也适合超级计算机的并行编程。可以去openMP的官网(www.openmp.org)它的介绍。

openMP的语句也很简洁,由#pragma omp这个directives加上一些如parallel、for、section、etc子语句组成,现在又很多人写了大量这方面的文章,如何感兴趣可以去baidu or google一下,当然最好是去官网或者www.wikipedia.org看看,毕竟它们更权威和专业。

支持openMP的编译器有很多,流行的Visual Studio .NET 2005/2008都支持(说明一下,只有professional Edition 和 Team Edition才支持)、当然还有Intel studio@parallel、gcc 4.3.2以上版本的编译器都支持openMP。在VS系列中,如果没有用到openMP的omp_get_thread_num()等等这些API,是不需要包含<omp.h>头文件的。只需要在项目属性中打开openMP支持就可以了。

 

 #include "stdafx.h" #include <omp.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[6][6] = {0}; int i, j; int sum = 0; omp_set_num_threads(3);//设置线程数为3 // omp_get_thread_num()得到当前线程ID #pragma omp parallel for private(i, j) reduction(+:sum) for(i = 1; i <= 6; i ++) { for(j = 1; j <= 6; j ++) { a[i][j] = i * j; printf("a[%d][%d] = %d ID = %d/n", i, j, a[i][j], omp_get_thread_num()); sum += a[i][j]; } } int max = 0; int min = 37; int m, n; #pragma omp parallel for private(m, n) //lastprivate(max, min) for(m = 6; m >= 0; m --) { for(n = 0; n <= 6; n ++) { #pragma omp parallel sections { #pragma omp section #pragma omp critical if(max < a[m][n]) max = a[m][n]; #pragma omp section #pragma omp critical if(min > a[m][n]) min = a[m][n]; } printf("max = %d min = %d ID = %d/n", max, min, omp_get_thread_num()); } } cout<<"/nsum = "<<sum<<endl; cout<<"max = "<<max<<endl; cout<<"min = "<<min<<endl; int loop; cin>>loop; return 0; }

上面是一个简单的利用了openMP的程序 ,执行结果如下:

a[3][1] = 3 ID = 1 a[1][1] = 1 ID = 0 a[5][1] = 5 ID = 2 a[3][2] = 6 ID = 1 a[1][2] = 2 ID = 0 a[5][2] = 10 ID = 2 a[3][3] = 9 ID = 1 a[1][3] = 3 ID = 0 a[5][3] = 15 ID = 2 a[3][4] = 12 ID = 1 a[1][4] = 4 ID = 0 a[5][4] = 20 ID = 2 a[3][5] = 15 ID = 1 a[1][5] = 5 ID = 0 a[5][5] = 25 ID = 2 a[3][6] = 18 ID = 1 a[1][6] = 6 ID = 0 a[5][6] = 30 ID = 2 a[4][1] = 4 ID = 1 a[2][1] = 2 ID = 0 a[6][1] = 6 ID = 2 a[4][2] = 8 ID = 1 a[2][2] = 4 ID = 0 a[6][2] = 12 ID = 2 a[4][3] = 12 ID = 1 a[2][3] = 6 ID = 0 a[6][3] = 18 ID = 2 a[4][4] = 16 ID = 1 a[2][4] = 8 ID = 0 a[6][4] = 24 ID = 2 a[4][5] = 20 ID = 1 a[2][5] = 10 ID = 0 a[6][5] = 30 ID = 2 a[4][6] = 24 ID = 1 a[2][6] = 12 ID = 0 a[6][6] = 36 ID = 2 max = 30 min = 30 ID = 0 max = 30 min = 0 ID = 2 max = 30 min = 0 ID = 1 max = 30 min = 0 ID = 0 max = 30 min = 0 ID = 2 max = 30 min = 0 ID = 1 max = 30 min = 0 ID = 0 max = 30 min = 0 ID = 2 max = 30 min = 0 ID = 1 max = 30 min = 0 ID = 0 max = 30 min = 0 ID = 2 max = 30 min = 0 ID = 1 max = 30 min = 0 ID = 0 max = 30 min = 0 ID = 2 max = 30 min = 0 ID = 1 max = 30 min = 0 ID = 0 max = 30 min = 0 ID = 2 max = 30 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 2 max = 36 min = 0 ID = 1 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 0 max = 36 min = 0 ID = 0 sum = 441 max = 36 min = 0

 

注:在这里说明一下,不能使用C++的cout输出,貌似是不支持多线程输出,大家可以自己去测试。

转载于:https://www.cnblogs.com/leezhm/archive/2009/04/30/2560316.html

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

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

相关文章

LeetCode 532. 数组中的K-diff数对

1. 题目 给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。 这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字&#xff0c;且两数之差的绝对值是 k. 示例 1: 输入: [3, 1, 4, 1, 5], k 2 输出: 2 解释: 数组中有两个 2-diff …

python随机生成六位数密码_python生成6位包含数字和字母的密码

初学python&#xff0c;简单敲了几行生成6位包含数字和字母密码的代码(我是在python 3上敲的)首先理清思路&#xff1a;1、包含数字和字母的六位口令共有36^6个2、将0-9和a-z合成一个字符串pwd,用pwd[0-35]表示所有数字和小写字母&#xff0c;即pwd[0]0,pwd[1]1…pwd[34]y,pwd[…

知识图谱入门视频(三)

学习内容 小象学院 b站 第三章 【其实后面的方法学习只是一个框架式的学习&#xff0c;并不明白具体的操作】 链接 问题&#xff1a; 知识图谱究竟是什么&#xff1f; 可以看看开放知识图谱 其实就是将我们的语言拆分转换为符号表达&#xff0c;之后经过机器学习来将离散式的…

博客新皮肤上市

原创&#xff1a;冰极峰 有朋友说原来的博客不好看&#xff0c;趁着五一节放假&#xff0c;花了点时间重新制作了一套样式&#xff0c;图片借用一个外国博客的图片。 样式全部基于自定义皮肤样式改写的。 说实话&#xff0c;改写博客园样式是一件比较痛苦的事情&#xff0c;你不…

python调用接口测试_Python接口测试实战2 - 使用Python发送请求

本节内容requests安装requests使用JSON类型解析requests库详解带安全认证的请求序言上节课我们学习了接口测试的理论&#xff0c;抓包工具及使用Postman手工测试各种接口&#xff0c;这节课我们主要讲解使用Python语言来发送接口请求&#xff0c;实现接口测试自动化。发送请求,…

LeetCode 551. 学生出勤记录 I

1. 题目 给定一个字符串来代表一个学生的出勤记录&#xff0c;这个记录仅包含以下三个字符&#xff1a; A : Absent&#xff0c;缺勤 L : Late&#xff0c;迟到 P : Present&#xff0c;到场如果一个学生的出勤记录中 不超过一个’A’(缺勤) 并且 不超过两个连续的’L’(迟到…

论文阅读笔记(一)【Journal of Machine Learning Research】Natural Language Processing (Almost) from Scratch(未完)

学习内容 题目&#xff1a; 自然语言从零开始 Natural Language Processing (Almost) from Scratch 2021年7月28日 1-5页 这将是一个长期的过程&#xff0c;因为本文长45页&#xff1b; 每天给自己定为5页的任务量&#xff01; 由于刚开始接触知识图谱&#xff0c;尚未学习N…

python找出录取率最高的年份_Python分析42年高考数据,告诉你高考为什么这么难?...

不同省份的985和211录取率有着比较明显的差距&#xff0c;12个省份的985录取率低于1.5%&#xff0c;安徽&#xff0c;河南&#xff0c;江苏和贵州更是低于1.2%大数据文摘授权转载自数据森麟作者&#xff1a;徐麟对于已经工作的“上班族”来说&#xff0c;6月7号到9号三天无疑是…

知识图谱入门视频(四)

学习内容 小象学院 b站 问题 本体和实体的区别&#xff1f; 苹果公司是一个科技公司&#xff0c;那么苹果公司就是一个实体&#xff0c;它所对应的科技公司就是本体概念。分布式表示和分布式存储 前者是将语义连续化&#xff0c;后者则是一个存不下&#xff1b; 第四部分 应…

FMS3系列(三):创建基于FMS的流媒体播放程序

本文主要介绍怎么去创建基于FMS的流媒体播放程序&#xff0c;Flash客户端通过网络加载FMS服务器上的视频流文件(.flv,.mp4等)&#xff0c;实现视频流的播放。 要实现媒体流文件的播放是非常简单的&#xff0c;只要在FMS服务器上提供好流媒体文件&#xff0c;Flash客户端通过Net…

kakfa怎么看消息是否堆积_纯种哈士奇多少钱一只,怎么看是否是纯种哈士奇

纯种哈士奇多少钱一只&#xff0c;怎么看是否是纯种哈士奇哈士奇之前是一种生存在高寒地带的工作犬&#xff0c;近些年迅速占领了家庭宠物的市场&#xff0c;成为最受欢迎的宠物犬之一&#xff0c;由于它精力过于旺盛而且服从性极地因此也让很多人头痛。但是这并不能让人们减少…

论文阅读笔记(二)【ACL2021】知识抽取NER

学习内容 由于刚刚进入知识图谱领域&#xff0c;对该领域的研究热点不是很了解&#xff0c;所以本文直接翻译ACL2021中关于知识抽取NER中各个论文的摘要和共享&#xff1b;并且适时在最后写出自己的理解&#xff1b;同时自己也会在了解完全部后给出各个论文的研究分类。 1. 题…

SQL Server 2000中的数据转换服务 (DTS)

SQL Server 2000中的数据转换服务 (DTS) 更新日期&#xff1a; 2004年06月15日发布者 Diane LarsenEuan Garden, 投稿人 Microsoft Corporation 2000 年 9 月 摘要&#xff1a; 为了完成数据合并、存档和分析等任务&#xff1b;为了进行应用程序开发&#xff1b;为了进行数据库…

LeetCode 599. 两个列表的最小索引总和(哈希map)

1. 题目 假设Andy和Doris想在晚餐时选择一家餐厅&#xff0c;并且他们都有一个表示最喜爱餐厅的列表&#xff0c;每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个&#xff0c;则输出所有答案并且不考虑顺序。 你可以假…

python odoo_odoo python 使用缓存

from tools.com_cache import cache, ctime, timeblock# 使用SQL来取得指定商品在指定仓库的库存数量def get_warehouse_stock_qty(self,warehouse_id):self.ensure_one()# 从缓存中查询&#xff0c;如有cache_data cache.warehouse_stock_qty.get([self.id,warehouse_id])if …

项目经理(project manager)刘小备的一天

背景介绍说明:人物:部门经理:汉小帝刘正系统实施部经理:陶小谦项目经理(project manager):刘小备软件Software工程师:关小羽张小飞赵小云马小超黄小忠任务:为江东通信公司开发套管理平台软件Software江东通信公司接口人:鲁小肃时间:2007年某某月某某天当前状态:项目在编码阶段进…

李宏毅机器学习(一)基本概念介绍

学习内容 这是第二次看机器学习的内容&#xff0c;所以这里主要记录的是让我印象深刻的知识点&#xff1b; 但是有两个问题&#xff1a; deep&#xff1f; 为什么不是越深越好&#xff1f;fat&#xff1f; 为什么要套娃&#xff0c;我们只需要将多个sigmoid并排不就好了吗&am…

灰色关联分析_灰色关联分析模型研究综述

灰色关联分析模型研究小结1 引言灰色关联分析是灰色系统理论中十分活跃的一个分支, 其基本思想是根据序列曲线几何形状来判断不同序列之间的联系是否紧密. 基本思路是通过线性插值的方法将系统因素的离散行为观测值转化为分段连续的折线, 进而根据折线的几何特征构造测度关联程…

LeetCode 622. 设计循环队列

1. 题目 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。 它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。 在一个…

solidworks模板_工程师实用高级操作,Solidworks自定义属性链接到工程图模板

下面&#xff0c;我以一个非常简单的零件为例&#xff0c;为大家介绍如何在工程图中链接这些属性。来达到减少工作量节省工作时间的目的。1.这是1个简单的零件&#xff0c;零件的自定义零件属性都已经填写完成。2.制作该零件的工程图文件&#xff0c;这里我以SolidWorks中默认的…