首页 > 其他分享 >OMP中single和task组合实现任务的并行操作

OMP中single和task组合实现任务的并行操作

时间:2022-11-03 19:56:29浏览次数:61  
标签:task barrier 并行操作 single 线程 任务 执行

Task 用于指定某一段程序,并放置在任务池中,由进程池中的空闲的进程执行该任务。

例如(https://ppc.cs.aalto.fi/ch3/more/)。

注意以下例子中,C(7)是和C(1)在同一个核中执行的,说明,进入了处于 team_barrier的核才有机会调用omp task 运行函数。例如,在下面的例子中,master线程首先执行c(1),omp会在single结束的地方显示的增加barrier,其余线程会进入barrier函数等待调度。当执行到task时,会将代码段的入口以函数名的形式发送给team barrier函数。处于barrier的线程1,2,3 将会轮换执行c(2)~c(6),主线程在执行完c(7)之后,才会到达barrier,此时master线程也有机会从任务池中分配到任务执行。当所有的任务执行结束之后,即task_num 为0时,所有进程都处于barrier中,将同时跳出barrier。
image

,进一步的解释为:

除了其他答案之外,让我更深入地了解执行过程中会发生什么。
1  #pragma omp parallel

2 {
3 #pragma omp single
4 {
5 for(node* p = head; p; p = p->next)
6 {
7 #pragma omp task
8 process(p);
9 }
10 } // barrier of single construct
11 }
在代码中,我标记了在single构造末尾引入的屏障。
发生的事情是这样的:
首先,当遇到parallel构造时,主线程产生并行区域并创建一堆工作线程。然后你有n 个线程运行并执行并行区域。
其次,该single构造选择n 个线程中的任何一个并执行该single构造的花括号内的代码。所有其他的n-1 个线程将进入第 10 行的屏障。在那里,它们将等待最后一个线程赶上并完成屏障同步。当这些线程在那里等待时,它们不仅在浪费时间,而且还在等待工作的到来。

第三,由single构造(“生产者”)选择的线程执行for循环,并为每次迭代创建一个新任务。然后将该任务放入任务池中,以便另一个线程(屏障中的一个线程)可以拾取并执行它。一旦生产者完成任务创建,它就会加入屏障,如果任务池中还有任务等待执行,它将帮助其他线程执行任务。
第四,一旦所有任务都以这种方式生成和执行,所有线程都完成了,屏障同步也完成了。
我在这里和那里做了一些简化,因为 OpenMP 实现如何执行任务有更多方面,但从概念的角度来看,以上是您可以想到的事情,直到您准备好深入研究OpenMP API 中任务调度的各个方面。

来自 <https://qa.1r1g.com/sf/ask/4795153821/>

标签:task,barrier,并行操作,single,线程,任务,执行
From: https://www.cnblogs.com/cofludy/p/16855628.html

相关文章

  • Singleton、Scoped、Transient 的应用情景有哪些
    对于方法都是线程安全的类型,一般使用单例。对于对象依赖了处理上下文,或者使用了有限资源(如数据库连接),一般使用Scoped或者Transient。Scoped、Transient的区别是你在同一个......
  • 【HMS Core】Task initTask = appsClient.init(); 海外版本初始化是否有初始化成功的
    ​ 1、问题描述游戏发布海外,不发国内,那么sdk初始化部分的Task<Void>initTask=appsClient.init();不传参数的版本是没有返回值的,也就无法接受不了初始化成功的回调,......
  • xTaskCreate()的使用
    *xTaskCreate()只能用于创建不受限制的任务访问整个微控制器的内存映射。包括MPU在内的系统支持可以创建MPU约束任务使用*xTaskCreateRestricted()。**@parampvTaskC......
  • Spring-Task使用介绍
    目前springboot应用广泛,因此对于spring-task直接基于springboot框架介绍,不涉及xml配置。本文直接介绍spring-task的使用方法,涉及的相关基础知识不再赘述,请先阅读Timer和......
  • PTRACE_SINGLESTEP相关
      https://blog.csdn.net/justin2009212407/article/details/104664025/https://blog.csdn.net/weixin_30667301/article/details/99779621https://blog.51cto.com/u......
  • ProbeQueryTask
    1packagecom.*.it.regioc.task;23importcom.alibaba.fastjson.JSONObject;4importcom.*.it.regioc.bean.model.api.ApiParameter;5importcom.*.it.regi......
  • Task Similarity Aware Meta Learning for Cold-Start Recommendation阅读笔记
    动机本文是2022年CIKM上的一篇论文。目前解决物品冷启动的方法通常有两种:1.通过物品的特征补充信息。2.元学习。前者通常只考虑到利用物品的属性,而后者旨在为所有新物品生......
  • oracle的length()、lengthb()、to_single_bye()函数
    length('张三')结果:2lengthb('张三')结果:4所以length返回长度为字符个数,lengthb返回长度为字节数to_single_byte():全角转半角函数 ......
  • 浅谈Java多线程之FutureTask
    Runnable和Callable是多线程中的两个任务接口,实现接口的类将拥有多线程的功能,FutureTask类与这两个类是息息相关!FutureTask继承体系看下这张图,原来FutureTask类实现了Runnab......
  • 2.单例模式(Singleton)JAVA语言实现
    单例模式实现1.私有的构造方法2.私有的静态的当前类对象作为属性3.共有的静态的方法返回当前类对象单例模式实现方式有三种(指的时对象的加载)1.饿汉式(立即加载)对象启动时就......