一、简介

OpenMP介绍

在C/C++中,OpenMP可以通过使用预处理指令来让程序并行化。OpenMP指令使用的格式为:

#pragma omp 指令 [子句[子句]…]

下面是一个最简单的OpenMP程序,

#include <stdio.h>
#include <omp.h>int main(int argc, char* argv[])
{int i;#pragma omp parallel for for (i = 0; i < 10; i++) {printf("i = %d\n", i);}return 0;
}

#pragma是预编译指令,这里的意思是在编译时使用openmp并行库,parallel是并行指令,for也是另外一个指令,一般来讲要使用for,通常都会跟parallel搭配使用。通常parallel只对其后面紧跟的代码块起作用,要想对多个代码块起作用,可以在代码块组合前后加上括号。

OpenMP是一套用于共享内存并行系统的多处理器程序设计的指导性的编译处理方案,我们可以发现程序还是在循环结束之后才运行return 0语句,因此可以推断OpenMP并行执行的程序要全部结束后才会运行后面非并行部分的代码,这就是fork/join并行模式。

二、parallel,for,sections指令的组合用法

parallel 是构造并行块的一个指令,同时也可以配合其他指令如for, sections等指令一起使用。在这个指令后面需要使用一对大括号来指定需要并行计算的代码。这里看一下怎么搭配for和sections的用法

#pragma omp parallel [for | sections] [子句[子句]…]
{
//并行部分
}

上面第一部分已经介绍了parallel for这种最常用的用法,下面看一下第二种用法:

#include <stdio.h>
#include <omp.h>int main(int argc, char* argv[])
{#pragma omp parallel {int i, j;#pragma omp forfor (i = 0; i < 5; i++)printf("i = %d\n", i);#pragma omp forfor (j = 0; j < 5; j++)printf("j = %d\n", j);}return 0;
}

接下来看看sections指令的用法:

sections语句可以将下面的代码分成不同的分块,通过section指令来指定分块。每一个分块都会并行执行,具体格式:

#pragma omp [parallel] sections [子句]
{

#pragma omp section
{
//代码
}

}

int main(int argc, char* argv[])
{#pragma omp parallel sections{#pragma omp section printf("Section 1 ThreadId = %d\n", omp_get_thread_num());#pragma omp sectionprintf("Section 2 ThreadId = %d\n", omp_get_thread_num());#pragma omp sectionprintf("Section 3 ThreadId = %d\n", omp_get_thread_num());#pragma omp sectionprintf("Section 4 ThreadId = %d\n", omp_get_thread_num());}return 0;
}

sections和for的区别:

当我们使用for时,openmp是对for语句的所有i值分配到不同线程(或计算节点)进行并行计算。

而当我们使用sections,openmp是对sections中的子section分配到不同计算节点进行并行计算。这只适用于section和section之间没有依赖的情形。

并行计算:openMP(一)—— parallel,for,sections指令的用法相关推荐

  1. OpenMP学习笔记之常用指令parallel/sections/critical 其余待续

    主要涵盖以下指令: parallel parallel for sections critical single flush atomic master ordered threadprivate p ...

  2. //synopsys full_case parallel_case综合指令的用法

    "//synopsys full_case parallel_case"综合指令的用法 case语句介绍 case item statement case default ==Ca ...

  3. linux入门(三)常见Linux指令及其用法

    一.上回说到说到Linux的shell指令运行的原理,这回我们来看看Linux中shell的权限管理,所谓的"权限"是指某一类人做某一件事的权利. 在shell中这一类人被分为了三 ...

  4. FreeMarker中assign指令的用法

    assign assign指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量, assign指令的用法有多种,包含创建或替换一个顶层变量,或者创建或替换多个变量等, 它的最简单的语法如 ...

  5. 几个预编译指令的用法

    *.几个预编译指令的用法 #        字符串化运算符,其主要效果是把参数的名字转换为字符串. Example: //1. *.h中定义 #defineSTRINGLIZE(ivalue)  #i ...

  6. linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

    tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装, 安装 sudo apt install tree ...

  7. Vue.js自定义指令的用法与实例

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...

  8. 我的世界java版tp_神奇的tp指令 我的世界tp指令的用法

    神奇的tp指令 我的世界tp指令的用法.tp指令是每个玩服务器的玩家都要了解和掌握的一个指令,那下面游戏园小编就给大家详细的介绍一下在我的世界中tp指令要怎么使用吧!希望大家喜欢. 其实是运用到了指令 ...

  9. linux下tree指令的用法

    linux下tree指令的用法 (2010-04-20 23:23:48) 转载 标签: 杂谈 分类: linux学习笔记 首先来看tree的用法 tree 中文解释:tree 功能说明:以树状图列出 ...

最新文章

  1. 爱情,真的那么奢侈吗?
  2. 升级pip后出错:无法导入名称“ main”
  3. GitHub 开源的 MySQL 在线更改 Schema 工具【转】
  4. 【学习笔记】操作系统之哲学原理
  5. MULE ESB简介
  6. php str cmp,php中整数的strcmp equivalent(intcmp)
  7. centos 6.6 oracle 10g,centos 6.2 安装 oracle 10g 问题
  8. [C++] - 纯虚函数 抽象基类 接口类
  9. 猫都能学会的Unity3D Shader入门指南(一)
  10. LeetCode 3.无重复字符的最长字串(滑动窗口)
  11. Java中文乱码解决方式
  12. Ubuntu 18.04 如何调整桌面图标大小
  13. Win10隐藏图标怎么恢复
  14. 浅析ERP系统—供应链
  15. igs时间和utc_世界协调时间(UTC)与中国标准时间
  16. 计算机图形学VC 配置,计算机图形学(VC++实现)(第2版)
  17. 新手python之BP神经网络——手写公式推导+可运行代码+编程中遇到的问题
  18. 【python】必备小知识——解决google chrome无法更新(错误代码为:7:0x80040902:60)
  19. 2009年我国报刊发行创新的五个关键词
  20. html的国际标准智商测试,国际标准智商测试30题(含答案)

热门文章

  1. Unity3d资源反编译. AssetBundle格式简析+简单应用+爬坑
  2. 终结HashMap面试?我是谁?我在哪
  3. pdf如何转换成word?分享三个好用的方法!
  4. WZOI-218疯狂吃鸡腿1
  5. 那么如何高效管理Linkedin账号
  6. 全球与中国3D透视导航技术市场现状及未来发展趋势(2022)
  7. python求特征值以及特征向量,并且输出最小特征值对应的特征向量
  8. 命令行quser logoff
  9. android是乐视手机刷机,乐视 X620(乐2 全网通)刷机教程,简单刷机
  10. 分布式计算原理之分布式协调与同步(1)——分布式事务