OpenMP笔记(三)
个人博客地址: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笔记(三)的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- Git 笔记三 Git的初步使用
Git 笔记三 Git的初步使用 在上一篇中,学习了如何配置Git环境,这一篇,开始学习Git的初步使用.Git的初步使用还是很简单的.总体上知道git init, git clone, git ad ...
随机推荐
- return , return true , return false的区别
return true: 返回正确的处理结果. return false : 返回错误的处理结果 和 中断代码继续向下 执行. return: 返回null,起到中断方法执行的效果,只要不r ...
- PHP ~ 原生语法 ~ 根据从数据库查询数据之后快速输出 某个属性的值到 到页面
一,根据 id 来查询单个的数据 <?php require_once '../../conn.php'; $sql = "select * from blogarticle wher ...
- web应用中并发控制的实现,各种锁的集合
参考:http://blog.csdn.net/xiangwanpeng/article/details/55106732 B/S构架的应用越来越普及,但由于它有别于C/S构架的特殊性,并发控制始终没 ...
- HTML笔记01
HTML语法规范 <!DOCTYPE html>//HTML5规范 用于注释<!-- HTML文件主要包含头部分和体部分 <!-title> 指定网站标题 指定浏览器打开 ...
- Android进阶——多线程系列之异步任务AsyncTask的使用与源码分析
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并主线程中更新UI,通过AsyncTask可以更加方便执行后台任务以及在主线程中访问UI ...
- vue项目配置多入口多出口【转载】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/localhost_1314/article ...
- A. Yellow Cards ( Codeforces Round #585 (Div. 2) 思维水题
---恢复内容开始--- output standard output The final match of the Berland Football Cup has been held recent ...
- linux_c_udp_example
udp_server #include <stdlib.h> #include <string.h> #include <unistd.h> #include &l ...
- Callable、Future、线程池简单使用
Callable.Future与线程池 在创建新线程的三种方式中,继承Thread和实现Runnable接口两种方式都都没有返回值,因此当我们想要获取子线程计算结果时只能设置共享数据,同时还需要考虑同 ...
- VS2013的工程移植到VS2008
VS2013的工程完成后,用VS2008创建一个名称一样的工程(大小写也一样). 具体过程参考http://blog.csdn.net/sz76211822/article/details/42775 ...