个人博客地址:http://www.bearoom.xyz/2019/02/21/openmp3/

这一部分主要记录一些指令的使用。

一、parallel的使用

parallel是用于构造并行块的,也可以和for、sections等指令一起使用。在C/C++中,parallel的使用方法如下 :
```
#pragma omp parallel [for | sections] [子句[子句]…]
{
//代码
}
```

一个例子:

#pragma omp parallel
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}

这段代码中的打印会执行四次,说明开了四个线程,当然可以修改默认的线程数,通过函数来设置或者指令来修改,如:

omp_set_num_threads(8);
#pragma omp parallel
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}

或者:

#pragma omp parallel num_threads(8)
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}

二、for的使用

for的使用是将for循环分配到多个线程中执行,一般for要跟parallel一起使用才有效,单独使用for一般是无效的。
单独使用for指令的情况,可以看到,即使设置了8个线程,依然是无效的:

#pragma omp for
for (int i = 0; i < 8; i++)
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}



与parallel的结合使用方法1:

omp_set_num_threads(8);
#pragma omp parallel for
for (int i = 0; i < 8; i++)
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}



与parallel的结合使用方法2:

omp_set_num_threads(8);
#pragma omp parallel
#pragma omp for
for (int i = 0; i < 8; i++)
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}

或者,将#pragma omp parallel后面要并行的部分用大括号括起来,此时大括号中可以写多个for循环,且每个for循环前面都要写#pragma omp for,每个for循环之间是串行的,for循环里面是并行的:

omp_set_num_threads(8);
#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < 8; i++)
{
printf("Hello, World!, ThreadId = %d\n", omp_get_thread_num());
}
}

三、sections和section指令的用法

section语句是要用在sections语句中的,将不同的语句分段执行,sections的用法与for类似:
```
#pragma omp parallel sections
{
#pragma omp section
printf("section 1 ThreadId = %d \n", omp_get_thread_num());
#pragma omp section
printf("section 2 ThreadId = %d \n", omp_get_thread_num());
#pragma omp section
printf("section 3 ThreadId = %d \n", omp_get_thread_num());
#pragma omp section
printf("section 4 ThreadId = %d \n", omp_get_thread_num());
}
```

一树春风千万枝,

嫩于金色软于丝。

永丰西角荒园里,

尽日无人属阿谁?

–白居易 《杨柳枝词》

OpenMP笔记(三)的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  3. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

  4. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  5. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

  6. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  7. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  8. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

  9. Git 笔记三 Git的初步使用

    Git 笔记三 Git的初步使用 在上一篇中,学习了如何配置Git环境,这一篇,开始学习Git的初步使用.Git的初步使用还是很简单的.总体上知道git init, git clone, git ad ...

随机推荐

  1. P1429 平面最近点对(加强版)(分治)

    P1429 平面最近点对(加强版) 主要思路: 分治,将点按横坐标为第1关键字升序排列,纵坐标为第2关键字升序排列,进入左半边和右半边进行分治. 设d为左右半边的最小点对值.然后以mid这个点为中心, ...

  2. int类型和char类型的区别

    下面三个定义式的区别: int i = 1; char i = 1; char i = '1'; int用来定义整型变量,char用来定义字符型变量,要清楚的知道三个定义式的区别,可以比较它们在内存中 ...

  3. Jenkins实现自动打包,MAVEN打包,Shell脚本启动

    1.点击New任务 2.创建任务,输入项目名 3.输入描述等 4.选择Git或SVN 5.自动,定时打包 6.在Build下配置

  4. node.js - 定义全局变量

    1,定义全局变量 app.set('name','八戒') 2,获取全局变量 app.get('name')

  5. PHP页面跳转以及伪登录实例

    PHP页面跳转一.header()函数header()函数是PHP中进行页面跳转的一种十分简单的方法.header()函数的主要功能是将HTTP协议标头(header)输出到浏览器. header() ...

  6. php.laravel.部署

    Laravel 的部署 D  参考laravel-china的做 | 其他参考 | 重要的参考 | Nginx github | 如果想要ssl 啊

  7. Power BI角色控制

    Case:企业的数据分析报表经常需要进行权限控制,根据读者的部门或职位,决定他可以看到的数据.例如,A部门的人只能查看A部门的数据,B部门的人只能查看B部门的数据,而领导层则可以看到所有的数据. 1, ...

  8. UVALive 4287 SCC-Tarjan 加边变成强连通分量

    还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量 然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛... ...

  9. E. Third-Party Software - 2 贪心----最小区间覆盖

    E. Third-Party Software - 2 time limit per test 2.0 s memory limit per test 256 MB input standard in ...

  10. 转载:HTTP 请求头中的 X-Forwarded-For,X-Real-IP

    转载:https://www.cnblogs.com/diaosir/p/6890825.html  X-Forwarded-For 在使用nginx做反向代理时,我们为了记录整个的代理过程,我们往往 ...