首页 > 其他分享 >OpemMP 同步结构

OpemMP 同步结构

时间:2024-03-31 22:30:37浏览次数:13  
标签:OpemMP 同步 register newline omp 线程 指令 pragma 结构

为了说明同步,我们先来看如下多线程加法的问题,假设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

标签:OpemMP,同步,register,newline,omp,线程,指令,pragma,结构
From: https://blog.csdn.net/leizhengshenglzs/article/details/137211207

相关文章

  • C语言中的基本结构3——循环结构篇
    C语言中的基本结构3——循环结构篇一、前言二、何为循环结构三、三种循环语句1.while2.do···while3.for四、循环的嵌套五、如何根据需要使用适合的循环语句?六、循环的辅助:continue和break1.continue2.break3.其余的方法:goto,return离开循环1.goto2.return七、结束语......
  • InnoDB 内存结构
    参考资料https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.htmlhttps://relph1119.github.io/mysql-learning-notes/#/mysql/InnoDB内存结构内存结构如下图查看InnoDB运行状态SHOWENGINEINNODBSTATUS通过上述命令查看InnoDB运行时的状态信息BufferPool......
  • Ray Tracking 加速结构
    基本原理中使用AABB作为判断光线和物体相交的加速。在AABB内部如何快速判断判断光线和物体的相交情况呢?主要分为种方法:UniformgridsSpatialpartitions注意这里使用的加速结构是在光线追踪之前做的准备工作。Grids分格子,然后记住每个格子里有哪些物体。碰到格子的话,再和......
  • Java(3) ----- File类、IO流、基本软件结构
    File类:代表当前操作系统的文件对象。File类:建用来操作操作系统的文件对象的,删除文件,获取文件信息,创建文件(文件夹)广义来说操作系统认为文件包含(文件和文件夹)File类创建文件路径:相对路径:默认是直接相对到工程目录下寻找文件的;分隔符:File:separatorgetAbsolutePath()绝对......
  • 数据结构(六)——图的遍历
    6.3图的遍历6.3.1图的广度优先遍历⼴度优先遍历(Breadth-First-Search,BFS)要点:1.找到与⼀个顶点相邻的所有顶点2.标记哪些顶点被访问过3.需要⼀个辅助队FirstNeighbor(G,x):求图G中顶点x的第⼀个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。Next......
  • 数据结构 - 线性表 - 顺序表
    前言最近刚刚开始复习408数据结构,就想着把每个章节的代码部分汇总记录一下,写成一组文章,便于日后的复习和参考。本系列整体的框架和课后习题参考了王道的复习指导。在本系列的每篇文章中,我会先把该章节所对应数据结构的基础代码放上来,然后附上参考资料习题对应的题目代码。线性......
  • 对于结构体的见解(新手)
    不知道还能坚持多久,是没有自信了还是?不试试怎麽知道?希望自己以后可以挣好多好多钱,不要在为钱发愁!!!加油吧,少年!!!首先结构体是自定义类型的,它里面包含许多成员变量,  结构体内存对齐对齐规则 vs中的默认对齐数为8    修改默认对齐数 intb[1000]; 位段......
  • C生万物之循环结构全面学习<四>
    万水千山总是情,点点关注行不行。一声朋友一生情,点点关注才能行!文章目录1.三种循环结构1_1while循环if和while对比while执行流程实战示例1_2for循环for循环执行流程for循环实战while循环和for循环对比1_3do-while循环do-while循环执行流程2_1break和continue语句wh......
  • 操作系统体系结构
    操作系统体系结构时钟管理:利用时钟中断实现计时功能原语:原语是一种特殊的程序,具有原子性。也就是说,这段程序的运行必须一气呵成,不可被“中断”非内核功能:Ubuntu、Centos的开发团队,其主要工作是实现非内核功能,而内核都是用了Linux内核内核内核是操作系统最基木,最核心的......
  • 数据结构_包装类&泛型
    目录一、包装类1.1基本数据类型和对应的包装类1.2装箱和拆箱1.3拓展 二、泛型2.1引出泛型2.2泛型的语法及使用2.3泛型是如何编译的2.3.1擦除机制2.4泛型的上界2.5泛型方法总结一、包装类在Java中,由于基本类型不是继承自Object类,为了在泛型代码中......