多核时代:并行程序设计探讨(10)——任务分组模式Group Task Pattern

简介:

                                                    任务分组模式Group Task Pattern

1.1        问题

一个问题的多个任务如何聚集成一组,以简化依赖关系的管理?

1.2        上下文

当任务和数据分解完成后,就可以应用此模式了。

任务分组模式描述了分析任务之间的依赖关系的第一步。在任务分解的过程中,我们按照任务可以并行运行来考虑,然而我们并没有强调一个很明显的事实:这些任务并不是组成一个扁平(译者注:指任务之间也是有层次关系)的集合。例如,继承于算法中同一个高级的操作的任务自然的应该组成一组。其它任务可能和初始问题没有关系,但在并行运行时存在相似的约束,因此也可以组成一组。

简而言之,任务集内存在一个值得考虑的结构。这些结构——指任务组——简化了问题的依赖关系分析。如下分析:

1)             如果一个任务组共享一个时序的约束(例如等待一个任务组完成文件的填充),我们可以一次满足整个组的约束;

2)             如果一个组必须在一个共享数据结构上一起工作,整个组的同步可以一次解决;

3)             如果一组任务互相独立,那么把它们组成一个独立的组然后在运行时作为一组同一调度,则可以简化设计并且提高并行性,因此可以让整个解决方案分布到更多的处理单元上。

以上无论哪种情况,思想都是通过定义共享相同约束的任务组,以及通过处理一组任务而不是单个任务来简化约束管理。

1.3        解决方法

任务间的约束可以划分到如下主要的几类:

1)最容易理解的依赖就是时序依赖:即一组任务顺序运行时存在的约束。如果任务A依赖于任务B的结果,则A必须等到B运行完毕后才能运行。我们经常把这种情况叫做数据流:任务A阻塞直到任务B准备好数据,当任务B结束后,数据就流向A了。

2)另一种顺序依赖就是指一组任务必须同时运行。例如,在很多“数据并行(data-parallel)”的问题中,原始问题划分为多个可以同时更新的区域。典型的情况为,任何指定区域的更新需要其相邻区域的边界信息,如果所有区域没有同时处理,则并行程序将停止或者死锁,因为某些区域要等待不活动区域的数据。

3)某些情况下,任务组中的任务是互相独立的,这些任务并没有顺序执行的约束。这是一个重要的特性,因为这意味着这些任务可以以任何顺序执行,包括并行执行。

 

没有一个简单的方法来发现任务组。我们建议按照如下方法进行操作。但要记住不能不考虑约束本身而去考虑任务分组,在这个设计点上,最好的方法是尽可能的抽象——识别约束然后将任务分组以解决这些约束,但是不要陷入到细节的泥沼中去。

1)              首先,关注初始问题如何分解。大部分情况下,高层的操作或者大的循环结构在分解中扮演关键的角色,这是第一个寻找任务组的地方,属于同一高层操作的任务自然的就划为一组了。
这样划分后,可能有很多小的任务组。接下来我们将关注那些由一个任务组内的任务共享的约束,共享同一约束的任务划为一组。

2)              其次,我们需要问是否有其它任务组共享相同的约束。如果有,将任务组合并。大的任务组提供了额外的并行性,使得更多的处理单元运行;同时也提供了额外的任务调度的灵活性,使得在处理单元间进行平衡也更加容易。

3)              接下来的步骤要关注任务组之间的约束。如果任务组间有明确的时间顺序,或者任务间有明确的数据流,这种情况很简单。更复杂的情况是独立的任务组之间以另外方式共享约束。这种情况下,将这些任务组合并成一个更大的任务。

 

 

相关文章
|
23小时前
Pyglet控件的批处理参数batch和分组参数group简析
Pyglet控件的批处理参数batch和分组参数group简析
6 0
|
7月前
|
iOS开发
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
217 0
|
8月前
|
存储 分布式计算 并行计算
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
|
8月前
|
存储 分布式计算 对象存储
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
|
分布式计算 并行计算 数据处理
|
存储 分布式计算 大数据
Spark 原理_运行过程_stage 和 task 的关系 | 学习笔记
快速学习 Spark 原理_运行过程_stage 和 task 的关系
160 0
Spark 原理_运行过程_stage 和 task 的关系 | 学习笔记
|
分布式计算 大数据 调度
Spark 原理_运行过程_Job 和 Stage 的关系 | 学习笔记
快速学习 Spark 原理_运行过程_Job 和 Stage 的关系
109 0
Spark 原理_运行过程_Job 和 Stage 的关系 | 学习笔记
|
分布式计算 Spark
SPARK最新特性Runtime Filtering(运行时过滤)以及与动态分区裁剪的区别
SPARK最新特性Runtime Filtering(运行时过滤)以及与动态分区裁剪的区别
467 0
SPARK最新特性Runtime Filtering(运行时过滤)以及与动态分区裁剪的区别
|
存储 SQL 缓存
核心特性region split
核心特性region split
108 0
核心特性region split
SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?
SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?
SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?

热门文章

最新文章