一种基于竞态条件的任务调度方法与流程

文档序号:21028973发布日期:2020-06-09 20:05阅读:187来源:国知局
一种基于竞态条件的任务调度方法与流程

本发明属于任务调度技术领域,具体涉及一种基于竞态条件的任务调度方法。



背景技术:

在多任务计算系统中,线程通常被用来为响应某些事件而来执行并行操作。由于这些事件的内在不确定性,当不同的线程以非因果顺序访问一个共享资源(例如总线、内存)并且至少有一个线程必须在共享资源上写入时,就会出现竞态条件。由于竞态条件会导致不可预知的后果,因此,通过智能的竞态条件检测和有效的任务调度来减少竞争是至关重要的。

如今已经有一些现有的研究对竞态条件进行检测。通过在编译时识别所有可能的竞态条件,静态方法是可以有高覆盖率的,但是通过静态分析检测竞态条件在系统运行时是不可判定的。因此又有人提出了动态检测方法,一般将动态方法分类为“on-the-fly”或“post-mortem”两种,这些方法都可以检测系统在执行的过程中出现的竞态条件。

虽然研究者提出了众多优化任务调度技术,但是,在复杂的多核计算系统中应用上述提到的现有的方法,竞态条件检测的性能就会严重下降,因为这些方法没有考虑硬件相关的因素。在面向硬件的方法中,需要考虑与硬件相关的因素,如内存的层次结构或者缓存一致性模型。此外,由于不同的执行环境表现出不同的事件发生概率分布,多核计算系统中的任务执行环境对竞态条件有很大的影响。这里的执行环境指的是系统硬件平台(例如并行处理器的核数)、应用程序(例如fft),输入参数(例如输入数据的大小)等。不过,这些现有的方法都没有将执行环境视为设计参数。因此,他们的竞态条件检测性能在多核计算系统中并不是最佳的。



技术实现要素:

本发明的目的在于提供通过不确定矩阵描述时间序列特征以及测量任务执行不确定性,利用最大熵优化法提出的新算法确保任务执行期间发生的竞态条件概率最低的一种基于竞态条件的任务调度方法。

本发明的目的通过如下技术方案来实现:包括以下步骤:

步骤1:输入任务调度序列;

步骤2:构造竞态条件检测模型;

某操作事件e作为输入,识别竞态条件和happened-before关系;

若输入的操作事件e为接收消息事件,则其对应于发送消息事件es,并且会在相同任务中发现每一个前置的接收消息事件e′;如果e′||es,则判定在es和e′s之间存在竞态条件,用表示;

若输入的操作事件e为获取信号量事件,则其对应于发送信号量事件eg,并且会在相同任务中发现每一个前置的获取信号量e′;如果e′||eg,则在e′和eg之间存在竞态条件,用表示;

如果n个操作事件形成了执行序列且产生的时间序列t1<t2<…<tn<t1,则判定为非灾难性的竞态条件;

步骤3:确定竞态集合;

由于竞态条件的不确定性,最大熵模型函数p(y|x)是竞态条件可能发生的最大概率,因此可以获得最大发生概率的竞态集合;最大熵模型函数p(y|x)求解方法为:

步骤3.1:确定一个特征空间作为问题域,收集原始训练数据并将其转换为训练样本;每个训练样本由一个实例x和其目标类y组成,一组训练样本t={(x1,y1),(x2,y2),…,(xn,yn)}对应于一个特定的执行环境;当事件yi发生时,相应的上下文信息是xi,经验概率分布是从这个训练样本中获得,特征f指的是x和y之间的特定关系,特征经验的期望概率是满足二元关系中特定要求的所有经验概率的综合,二元函数定义如下:

实际概率函数定义如下:

步骤3.2:选择特征作为优化约束,保持特征的经验概率和预期概率一致,令步骤3.1中的p是一个满足约束集c的统计模型,argmax使得熵值最大化;在满足约束集c所有约束条件时,确定最大熵;约束集c的函数定义如下:

熵值最大化函数定义如下:

步骤3.3:导出模拟最大熵的理论模型,将约束优化问题转化为非约束优化问题,为每个特征值fi引入拉格朗日算子λ,由于p(y|x)是一个条件概率,因此,通过每个实例x的参数k(x),拉格朗日函数定义如下:

相应的参数λi将会把特征fi的权重考虑在内,因此,λi满足最大熵的条件p(y|x),pλ的最大值函数定义如下:

步骤3.4:应用多重收敛来调整λi,具体描述为:

步骤3.4.1:初始化λi(0)

步骤3.4.2:重复函数直至其收敛,函数定义如下:

真实参数γ和λ={λ1,λ2,...,λn}都是n+1的约束;为了最大化η(p,λ,γ),利用步骤3.3的函数来表示pλ(y|x),并结合可以确定最大熵模型,最大熵模型函数定义如下:

步骤4:划分子任务并消除竞态条件;

如果两个任务之间存在竞态条件,则每个任务将会分为两个部分即没有灾难性的竞态条件的子任务(ti',tj')和一个涉及到灾难性竞态条件的子任务(tsub(i),tsub(j));使用lock函数避免tsub(i)和tsub(j)这两个子任务的同步问题,消除灾难性竞态条件;tsub会被允许多次申请lock函数而不会导致死锁,同时有必要确定lock的拥有者和持有者数量lockcounter;当lockcounter为0时,则允许tsub(i)或tsub(j)申请lock,在一个新的申请之后,lockcounter增加1,并在lock函数后减1;如果tsub(i)持有一个lock,则如果tsub(j)请求lock,它将会阻塞;如果tsub(i)重新申请已经存在的lock,则将会允许此操作;

步骤5:一旦处理器内核处于空闲状态,所有子任务和任务就会循环分配给处理器内核。

本发明的有益效果在于:

本发明通过不确定矩阵描述时间序列特征以及测量任务执行不确定性,利用最大熵优化发提出的任务调度算法确保任务执行期间发生的竞态条件概率最低。本发明的任务调度优化方法在低功耗系统平台有更高的cpu利用率,吞吐量和更低的计算复杂度和任务执行时间,具有一定的研究和使用价值。

附图说明

图1为本发明的一种基于竞态条件的任务调度方法的流程图。

图2为任务执行时间比较图。

图3(a)为在200kb输入数据大小的情况下8核执行时间比较图。

图3(b)为在200kb输入数据大小的情况下16核执行时间比较图。

图3(c)为在200kb输入数据大小的情况下24核执行时间比较图。

图3(d)为在200kb输入数据大小的情况下32核执行时间比较图。

图4(a)为在不同输入数据大小情况下的8核执行时间比较图。

图4(b)为在不同输入数据大小情况下的16核执行时间比较图。

图4(c)为在不同输入数据大小情况下的24核执行时间比较图。

图4(d)为在不同输入数据大小情况下的32核执行时间比较图。

图5为处理器内核利用率比较图。

图6为计算吞吐量比较图。

图7为时间复杂度比较表。

图8(a)为任务调度算法的任务与竞态条件结果表。

图8(b)为rrp、ras、gta和任务调度算法的竞态条件结果表。

图9为性能改进百分比比较表。

具体实施方式

下面结合附图对本发明做进一步描述。

一种基于竞态条件的任务调度方法,通过不确定矩阵描述时间序列特征以及测量任务执行不确定性,利用最大熵优化发提出的任务调度算法确保任务执行期间发生的竞态条件概率最低,具有一定的研究和使用价值。本发明的具体描述包括如下几个步骤,前一个步骤是建立最大熵优化模型,第二个步骤是利用该模型提出相应的任务调度方案,最后一个步骤是通过任务调度方案实现降低系统功耗的方法。

1、最大熵优化模型,具体实现方法如下:

(1)确定一个特征空间作为问题域,收集原始训练数据并将其转换为训练样本,每个训练样本由一个实例x和其目标类y组成,一组训练样本t={(x1,y1),(x2,y2),…,(xn,yn)}对应于一个特定的执行环境,当事件yi发生时,相应的上下文信息是xi,经验概率分布是从这个训练样本中获得,特征f是指的是x和y之间的特定关系,特征f指的是x和y之间的特定关系,特征经验的期望概率是满足二元关系中特定要求的所有经验概率的综合,二元函数定义如下:

实际概率函数定义如下:

(2)选择特征作为优化约束,保持特征的经验概率和预期概率一致,令步骤(1)中的p是一个满足约束集c的统计模型,argmax使得熵值最大化。在满足约束集c所有约束条件时,确定最大熵。约束集c的函数定义如下:

熵值最大化函数定义如下:

(3)导出模拟最大熵的理论模型,将约束优化问题转化为非约束优化问题,为每个特征值fi引入拉格朗日算子λ。由于p(y|x)是一个条件概率,等于1,因此,通过每个实例x的参数k(x),拉格朗日函数定义如下:

相应的参数λi将会把特征fi的权重考虑在内,因此,λi满足最大熵的条件p(y|x),pλ的最大值函数定义如下:

(4)应用多重收敛来调整λi,具体描述为:

a.初始化λi(0)例如,所有的λi(0)=0;

b.重复函数直至其收敛,函数定义如下:

真实参数γ和λ={λ1,λ2,...,λn}都是n+1的约束。为了最大化η(p,λ,γ),利用步骤(3)的函数来表示pλ(y|x),并结合可以确定最大熵模型,最大熵模型函数定义如下:

2、基于最大熵模型提出面向竞态条件的任务调度方法优化任务分配,具体描述如下:

(1)确定竞态条件集合以及任务事件序列。竞态条件简言之就是数据竞争,在计算机系统执行过程中,多个任务之间会由于共享数据而产生竞争,这就是竞态条件。竞态条件集合就是系统一次运行中所有的竞态条件的集合。而任务事件序列指的的是:在任务中需要完成某一项工作称之为事件,多个任务的多个事件所组成的序列成为事件序列。由于竞态条件的存在,事件与事件之间也存在着依赖关系。但是由于系统执行环境的不同,可能会导致事件的执行序列不同,这就导致了竞态条件发生具有不确定性。

(2)确定竞态条件检测模型。某操作事件e的作为输入,识别竞态条件和happened-before关系。接收消息(rm)事件e对应于发送消息(sm)事件es,并且会在相同任务中发现每一个前置的接收消息事件e′。如果e′||es,则在es和e′s之间存在竞态条件,用来表示。获取信号量(ts)事件e对应于发送信号量(gs)事件eg,并且会在相同任务中发现每一个前置的获取信号量e′。如果e′||eg,则在e′和eg之间存在竞态条件,用表示。如果n个操作事件碰巧形成了执行序列则产生的时间序列是t1<t2<…<tn<t1,这意味着它是非灾难性的竞态条件。否则,将存在灾难性的竞态条件。

(3)确定竞态集合。由于竞态条件的不确定性,p(y|x)是竞态条件可能发生的最大概率,因此,从前四个步骤可以获得最大发生概率的竞态集合。

(4)划分子任务及消除竞态条件。如果两个任务之间存在竞态条件,则每个任务将会分为两个部分即没有灾难性的竞态条件的子任务(即ti',tj')和一个涉及到灾难性竞态条件的子任务(即tsub(i),tsub(j))。使用lock函数避免tsub(i)和tsub(j)这两个子任务的同步问题,消除灾难性竞态条件。tsub会被允许多次申请lock函数而不会导致死锁,同时有必要确定lock的拥有者和持有者数量(即lockcounter)。lockcounter为0时,则允许tsub(i)或tsub(j)申请lock,在一个新的申请之后,lockcounter增加1,并在lock函数后减1。如果tsub(i)持有一个lock,则如果tsub(j)请求lock,它将会阻塞。如果tsub(i)重新申请已经存在的lock,则将会允许此操作。

(5)一旦处理器内核处于空闲状态,所有子任务和任务就会循环分配给处理器内核。

通过步骤(5)的方法减少任务调度次数,使得cpu占用率降低,从而得到cpu的电压降低,因此减少了功耗。任务taskj执行在硬件的处理单元pe上的功耗函数定义为:

其中uj为任务对功耗的影响因子,cu,vu分别为处理单元的等效电容和电压。

本发明的任务调度优化方法在低功耗系统平台有更高的cpu利用率,吞吐量和更低的计算复杂度和任务执行时间。

在创建最大熵模型之前,需要收集原始训练数据并将其转换为训练样本。每个训练样本由一个实例x和其目标类y组成。一组训练样本t={(x1,y1),(x2,y2),…,(xn,yn)}对应于一个特定的执行环境。当事件yi发生时,相应的上下文信息是xi。经验概率分布是从这个训练样本中获得。均值和方差的无偏估计量从公式(1.1)中可以得到。特征f指的是x和y之间的特定关系。f可以由二元函数来描述,

性质1在一个执行序列q中,e中的各种操作事件满足关系假设

(1)如果那么或者

(2)如果<ei,ej>是有效的,那么或者

(3)如果那么

性质2在执行序列q中,e中的每个事件的发生时间是全序关系。假设如果那么ei发生在ej之前。

特征经验的期望概率是满足方程(1.1)中特定要求的所有经验概率的综合,即,

特征的预期概率是一个实际的分布,指的是发生x时y的经验概率。

2、要保持特征的经验概率和预期概率一致。

由于多核并发计算系统中有多个功能,因此满足这些约束会导致一系列的限制。

在此推导过程中,使用性质1和性质2中的四个特征(即,k=4)。因此,模型应该满足熵最大化的所有约束。

p是一个满足约束集c的统计模型,argmax使得熵值最大化。在满足公式(1.5)中的所有约束条件时,确定最大熵。

3、为每个特征值fi引入拉格朗日算子λ。由于p(y|x)是一个条件概率,等于1.因此,通过每个实例x的参数k(x),拉格朗日函数可定义为,

相应的参数λi将会把特征fi的权重考虑在内,因此,λi满足最大熵的条件p(y|x),其可以表示为,

其中是归一化因子。所以,pλ的最大值可以表示为,

这样到目前为止,一个约束优化问题(即,公式1.6和1.7)已经成为一个非约束优化问题(即,公式1.10)。

4、多重收敛来调整λi。这个收敛计算包括两个步骤:(1)初始化λi(0),例如,所有的λi(0)=0;(2)重复方程1.11直至其收敛。

真实参数γ和λ={λ1,λ2,...,λn}都是n+1的约束。为了最大化η(p,λ,γ),我们利用公式1.8的推导来表示pλ(y|x)。

进而得到,

由于我们还可以得到。

将上面这个公式代入到1.13中,最大熵模型将最终被确定为,

该等式1.14确保任务序列中竞态条件的最低可能性。因此,在任务调度中使用该公式实现最小的竞态条件。

5、基于步骤4的最大熵模型提出的任务调度算法优化任务分配,具体描述如下:

(1)针对给定的执行环境找到一个竞态集合的最佳概率分布。

(2)由于竞态条件的不确定性,p(y|x)是竞态条件最优可能发生的最大概率,因此,从最大熵模型可以获得最优的竞态集合。

(3)如果两个任务之间存在竞态条件,则每个任务将会分为两个部分即没有灾难性的竞态条件的子任务(即ti',tj')和一个涉及到灾难性竞态条件的子任务(即tsub(i),tsub(j))。

(4)通过调整步骤(3)提到的第二类子任务的执行时间消除了灾难性的竞态条件,使用lock函数避免这两个子任务的同步问题。tsub会被允许多次申请lock函数而不会导致死锁,同时有必要确定lock的拥有者和持有者数量(即lockcounter)。

(5)步骤(4)中的lockcounter为0时,则允许tsub(i)或tsub(j)申请lock,在一个新的申请之后,lockcounter增加1,并在lock函数后减1。如果tsub(i)持有一个lock,则如果tsub(j)请求lock,它将会阻塞。如果tsub(i)重新申请已经存在的lock,则将会允许此操作。

(6)一旦处理器内核处于空闲状态,所有子任务和任务就会循环分配给处理器内核。

6、通过步骤5的方法减少任务调度次数,使得cpu占用率降低,从而得到cpu的电压降低,因此减少了功耗。任务taskj执行在硬件的处理单元pe上的功耗函数定义为:(更改,归结为系统平台。)

puj=ujcuqjvu2

其中uj为任务对功耗的影响因子,cu,vu分别为处理单元的等效电容和电压。

最终通过基于竞态条件的任务划分和分配就会消除存在灾难的竞态条件。

实验结果

图7是时间复杂度比较。图8(a)是任务调度算法的任务与竞态条件结果;图8(b)是rrp、ras、gta、和任务调度算法的竞态条件结果。图1是任务执行时间比较。图2是在200kb输入数据大小的情况下五个应用程序的任务执行时间。图3(a)至图3(d)是所有在应用程序在不同输入数据大小情况下的平均执行时间。图4(a)至图4(d)是处理器内核利用率比较。图5是计算吞吐量比较。图9是性能改进百分比比较。

图2为任务执行时间比较图,从上到下折线依次代表ras、rrp、gta、ourwork

图3(a)为在200kb输入数据大小的情况下8核执行时间比较图。图3(b)为在200kb输入数据大小的情况下16核执行时间比较图。图3(c)为在200kb输入数据大小的情况下24核执行时间比较图。图3(d)为在200kb输入数据大小的情况下32核执行时间比较图。图3(a)、图3(b)、图3(c)和图3(d)中每一列的4个直方从左到右依次代表ourwork、rrp、ras、gta。

图4(a)为在不同输入数据大小情况下的8核执行时间比较图。图4(b)为在不同输入数据大小情况下的16核执行时间比较图。图4(c)为在不同输入数据大小情况下的24核执行时间比较图。图4(d)为在不同输入数据大小情况下的32核执行时间比较图。图4(a)、图4(b)、图4(c)和图4(d)中每一列的4个直方从左到右依次代表ourwork、rrp、ras、gta。

图5为处理器内核利用率比较图,从上到下折线依次代表ourwork、gta、rrp、ras。

图6为计算吞吐量比较图,每一列的4个直方从左到右依次代表ourwork、rrp、ras、gta。

图7为时间复杂度比较表。图8(a)为任务调度算法的任务与竞态条件结果表。图8(b)为rrp、ras、gta和任务调度算法的竞态条件结果表。图9为性能改进百分比比较表。

由图7知rrp、ras、gta和ourwork的空间复杂度有节点数m确定,因此它们的空间复杂度是相同的。

图8(a)显示了我们提出的基于竞态条件感知的任务划分方法成功的消除了五个应用程序中所有的灾难性竞态条件。竞态条件的总数平均减少幅度达到了82.86%。图8(b)说明任务调度算法比其他任务调度算法的竞态条件少很多。

如图1所示,无论多少个处理器内核,任务调度算法的性能均优于同类算法。在图2和图3中,可以得到任务调度算法在各种执行环境中表现出良好的适应性。如图4所示,当处理器内核配置为128个的时候,由此产生的cpu利用率为0.936。与rrp、ras和gta算法相比,利用率分别增加了9.4%、17.6%和8.2%。如图5所示,由于具有竞态条件分解为无竞态条件的子任务的特性,任务调度算法大大减少了任务等待时间,因此,任务调度算法可以使更多的县城同时并发运行。图9显示,通过任务调度方法减少任务调度次数,使得cpu占用率降低,从而得到cpu的电压降低,因此减少了功耗。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1