OpemMP 同步结构

为了说明同步,我们先来看如下多线程加法的问题,假设x初值为0:

THREAD 1:

THREAD 2:

High level code

increment(x)
{x = x + 1;}

increment(x)
{x = x + 1;}

Assembly

LOAD A, (x address)
ADD A, 1
STORE A, (x address)

LOAD A, (x address)
ADD A, 1
STORE A, (x address)

一个可能的执行序列如下:

  1. Thread 1 loads the value of x into register A.
  2. Thread 2 loads the value of x into register A.
  3. Thread 1 adds 1 to register A
  4. Thread 2 adds 1 to register A
  5. Thread 1 stores register A at location x
  6. Thread 2 stores register A at location x

结果将会是1而不是2,为了避免上面的问题,必须进行多线程之间的同步,OpenMP提供了多种同步指令:

MASTER指令

#pragma omp master newline

structured_block

该区域的代码只被主线程执行,其他线程将跳过

CRITICAL 指令

#pragma omp critical [ name ] newline

structured_block

临界资源区,同时只能被一个线程执行,一个线程在执行临界资源区代码时,如果其他线程执行到此处,那么其他线程将会被阻塞,直到此线程离开临界资源区

int main()
{int x;x = 0;#pragma omp parallel shared(x) {#pragma omp critical x = x + 1;}  /* end of parallel section */return 0;
}

BARRIER 指令

#pragma omp barrier newline

所有到达barrier指令处的线程将会等待,直到所有的线程都到达此处

TASKWAIT 指令

#pragma omp taskwait newline

该指令会等待在当前任务开始时生成的子任务执行完毕

ATOMIC 指令

#pragma omp atomic newline

statement_expression

atomic指令规定一块内存的更新必须是原子的,这意味着多个线程无法同时写它,该指令定义了一个最小临界资源区mini-CRITICAL section

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

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

相关文章

session反序列化漏洞2——ctfshow web263

题目链接 https://ctf.show/challenges#web263-723 解题思路 进去先是一个登录框 目录扫描一下发现存在源码泄露 查看源码 index.php error_reporting(0);session_start();//超过5次禁止登陆if(isset($_SESSION[limit])){$_SESSION[limti]>5?die("登陆失败次数超…

Centos7.9 无法启动 提示Entering emergency mode

前言 由于更换内存条,导致电脑运行时蓝屏直接断电导致启动不了 正文 输入命令当出现done时再重启就解决了 xfs_repair -v -L /dev/dm-0

智过网:中级安全工程师一年能挣多少钱?工资高吗?

中级安全工程师的年收入是广大从业者非常关心的问题。毕竟,了解自己所处行业的薪资水平,不仅有助于规划个人职业发展,还能为日常生活中的决策提供重要参考。那么,中级安全工程师一年究竟能挣多少钱呢?工资又是否算高呢…

[leetcode] 100. 相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,2,3] 输出:true示例 2&a…

YOLOV5训练自己的数据集教程(万字整理,实现0-1)

文章目录 一、YOLOV5下载地址 二、版本及配置说明 三、初步测试 四、制作自己的数据集及转txt格式 1、数据集要求 2、下载labelme 3、安装依赖库 4、labelme操作 五、.json转txt、.xml转txt 六、修改配置文件 1、coco128.yaml->ddjc_parameter.yaml 2、yolov5x.…

设计模式(10):享元模式

一.核心: 享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态: 可以共享,不会随环境变化而改变。外部状态: 不可以共享,会随环境变化而改变。 二…

第1章.提示词:开启AI智慧之门的钥匙

什么是提示词? 提示词,是引导语言模型的指令,让用户能够驾驭模型的输出,确保生成的文本符合需求。 ChatGPT,这位文字界的艺术大师,以transformer架构为基石,能轻松驾驭海量数据,编织…

嵌入式第一部分-第一集:ARM那些你得知道的事

ARM:Advanced RISC Machine,先进精简指令集机器 ARM公司只做设计,不生产。 国内IC生产厂商:华为海思、全志、瑞芯微、MTK(联发科) 扩展:ARM的商业模式了解。 使用三星S5PV210开发板进行视频的讲…

大数据 - Hadoop系列《五》- HDFS文件块大小及小文件问题

系列文章: 大数据- Hadoop入门-CSDN博客 大数据 - Hadoop系列《二》- Hadoop组成-CSDN博客 大数据 - Hadoop系列《三》- HDFS(分布式文件系统)概述_大量小文件的存储使用什么分布式文件系统-CSDN博客 大数据 - Hadoop系列《三》- MapRedu…

LeetCode算法——数组/字符串篇

对刷过的算法进行总结,所用解法都是最符合我个人逻辑的,以后再刷的话就看这篇帖子了 # 代码随想录——数组理论基础 首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题 数组是存放在连续内存空间上的相同类型数据的集合 …

IntelliJ IDEA 2023 for Mac 好用的Java开发工具

IntelliJ IDEA 2023是一款由JetBrains开发的强大的集成开发环境(IDE)软件,适用于多个编程语言。它旨在提高开发人员的生产力和代码质量,具有以下多种特色功能: 软件下载:IntelliJ IDEA 2023 v2023.3.6中文激…

2d导入人物素材进行分割后设置图层

1、设置分辨率大小 2、相机调整大小,要符合场景 3、选择2D sprite 编辑器 或者 点击这个也行 4、分割图像 5、设置过滤模式 6、图层设置

CAJViewer8.1下载地址及安装教程

CAJViewer是中国学术期刊(CAJ)全文数据库的专用阅读软件。CAJViewer是中国知识资源总库(CNKI)开发的一款软件,旨在方便用户在线阅读和下载CAJ数据库中的学术论文、期刊和会议论文等文献资源。 CAJViewer具有直观的界面…

vue render 函数详解 (配参数详解)

vue render 函数详解 (配参数详解) 在 Vue 3 中,render 函数被用来代替 Vue 2 中的模板语法。 它接收一个 h 函数(或者是 createElement 函数的别名),并且返回一个虚拟 DOM。 render 函数的语法结构如下: render(h) …

Modbus协议介绍

Modbus存储区 从机存储数据,那么肯定要有一个存储区,那就需要文件操作,我们都知道这文件可以分为只读(-r)和读写(-wr)两种类型 并且存储的数据类型可以分为 :布尔量 和 16位寄存器 布尔量比如IO口的电平高低,灯的开关…

如何实现对节点尺寸动态变化的有效监测与检测

前言 近来有需求要做分页,听起来可能有点Low。 所以我要把Low的事情做得有点逼格。 分页本身没啥,但是数据量起来了,比如十万。 要是不做点处理, 那你的页面估计爽得很,机器也爽得很。 放心,我不会让你这么…

金仓方案 | 全国高速联网收费系统国产化升级进行时

近年来,国家提出了交通强国建设战略,鼓励在交通领域加强自主创新,推动产业转型升级。高速公路收费系统作为高速公路行业的核心,也是交通领域信息技术应用创新的重中之重,自主可控问题成为系统建设和运营的关键难点。 2…

[机器学习]练习闵可斯基距离

闵可斯基距离(Minkowski distance)是一种用于衡量向量空间中两点之间距离的方法。它是曼哈顿距离和欧几里得距离的一般化形式。闵可斯基距离使用一个参数 p 来调整计算方法,其中 p 是一个大于 0 的实数值。 在二维空间中,闵可斯基…

可控占比闪烁电路

1启动Q0.0 亮一秒歇一秒循环执行 定时器设置为2秒 使用指令LD> T0 k10 控制亮和灭时间

[已解决]Unable to find a valid cUDNN algorithm to run convolution

问题描述:Unable to find a valid cUDNN algorithm to run convolution 可能原因: 1、cuDNN库的配置问题。 2、未指定训练使用的显卡或显卡占用率已满。 3、确定性算法。 解决方案:(从下往上试) 1、更新GPU驱动、cuD…