个人博客地址: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());
}
```

一树春风千万枝,

嫩于金色软于丝。

永丰西角荒园里,

尽日无人属阿谁?

–白居易 《杨柳枝词》

最新文章

  1. IE下get传中文乱码的问题完美解决方案
  2. 【转】TCP协议的无消息边界问题
  3. python数字图像处理(7):图像的形变与缩放
  4. spring mvc绑定对象String转Date解决入参不能是Date的问题
  5. unbuntu下vnc和vnc2swf的使用
  6. 怎么使用PHPMailer实现邮件的发送??
  7. MySQL驱动阅读------Connection连接的建立,基于JDBC-----5.1.26
  8. php mkdir 创建多级目录实例代码
  9. 牛顿法(Newton's Method)
  10. NOIP2011-普及组复赛-第二题-统计单词数
  11. webfont 字体
  12. 201521123087 《java程序设计》 第七周学习总结
  13. 手 Q 人脸识别动画实现详解
  14. R语言do.call 函数用法详解
  15. 数据处理 array json 格式 转换成 数组形式
  16. [vue]组件的导入
  17. leetcode-algorithms-13 Roman to Integer
  18. java实现按中文首字母排序的方式
  19. download & excel & blob
  20. Redis API的理解与使用

热门文章

  1. ping不通www.baidu.com,但可以访问www.baidu.com网页
  2. nginx proxy_pass解释
  3. EBP寻址
  4. SignalR实现页面实时监控
  5. Java 逆序打印链表
  6. 课程作业02-1-课后作业1-(1)使用组合数公式利用n!来计算
  7. 逆向-PE导入表
  8. android 开发学习3
  9. Linux每日练习-crontab
  10. vue 父子传值,子页面没有实时刷新的问题