基于自适应释放的确定性重放方法技术

技术编号:18289297 阅读:29 留言:0更新日期:2018-06-24 03:55
本发明专利技术公开了一种基于自适应释放的确定性重放方法,基于库函数重载确定线程执行同步操作的顺序,并在线程请求获得共享页面的访问权限失败时调用自适应释放模块,自适应释放模块将引起各线程阻塞的所有共享页面暂存于候选集合,并从候选集合中选出合适的释放线程和被释放共享页面移入待释放集合;所有线程遍历待释放集合判断自身是否为释放线程,若判断结果为是,则当前线程释放相应的共享页面,若判断结果为否,则当前线程替释放线程释放相应的共享页面,释放线程在后续执行过程中取消被释放共享页面的访问权限。本发明专利技术能够让最合适的线程在合适的时机释放最合适的共享页面,降低并行程序在记录阶段处理页保护异常的开销,提高记录性能。

【技术实现步骤摘要】
基于自适应释放的确定性重放方法
本专利技术涉及并行程序调试
,具体涉及基于自适应释放的确定性重放方法。
技术介绍
与传统的串行程序不同,并行程序的执行具有不确定性,即在输入相同的情况下,同一个并行程序执行多次的结果并不相同。造成并行程序不确定性的主要因素是各线程访问共享内存的顺序不确定。并行程序的不确定性会给调试带来困难,为了解决这一问题,目前通常采用确定性重放技术,确定性重放技术包括两步:记录和重放,在记录阶段,将各线程间的访存依赖关系记录在日志文件中;在重放阶段,强制各线程按照所记录的日志执行访存操作。传统的实现确定性重放的方法主要通过记录所有线程的访存指令顺序来确定并行程序的访存依赖关系,但是其记录开销非常大。为了降低时间开销,现有技术中提出基于页保护机制的确定性重放方法,这种方法利用页保护机制能够为运行的进程提供对虚拟页面的访问控制,通过限定每个线程对共享页面的访问权限,以此来推断各线程访问共享内存的顺序。在记录阶段,记录每个共享页面的访问权限在各线程间的转移顺序;在重放阶段,强制各线程根据日志内容来获得共享页面的访问权限。然而,对于这种确定性重放方法来说,页保护异常是其主要的性能开销来源。并行程序执行过程中触发页保护异常存在两种情况:第一次访问某个共享页面;释放后再次访问同一个共享页面。我们无法避免第一种情况下引入的页保护异常(每个新创建的线程执行前,所有共享页面都被添加页保护,否则将会遗漏某些访存操作)。与前者不同,通过优化释放策略,可以降低第二种情况下引入的页保护异常。为了让各线程公平竞争共享页面的访问权限,基于页保护机制的确定性重放方法一般提供多个释放同步点,例如libc类库函数、同步操作类库函数等。然而,释放同步点的数量越多,页保护异常的次数越少,程序并行度偏低,但并行程序处理页保护异常的开销较小;相反,释放同步点的数量越少,页保护异常的次数越多,程序并行度偏高,但并行程序处理页保护异常的开销较大。目前,对于不同的并行程序来说,无法通过单一的增加或减少释放同步点的数量来提高并行程序的记录性能,现有的基于页保护机制的确定性重放方法的记录性能较差,无法满足设计要求。
技术实现思路
本专利技术要解决的技术问题是面向基于页保护机制的确定性重放方法,提供一种基于自适应释放的确定性重放方法,能够以最合适的线程在合适的时机释放最合适的共享页面,改善并行程序当前的并行度,使每一次共享页面的释放获得的收益最优,最大化的降低并行程序在记录阶段处理页保护异常的开销,从而大大提高其记录性能。为了解决上述技术问题,本专利技术提供的技术方案如下:一种基于自适应释放的确定性重放方法,包括以下步骤:1)并行程序中的每个线程在执行前,将所有的共享页面都设置为不可访问状态;并行程序的线程在缺少共享页面的访问权限而触发页保护异常时会进入共享页面访问权限请求处理模块;2)线程在共享页面访问权限请求模块中请求获得共享页面的访问权限,若请求成功,则该线程设置该共享页面相应的访问权限,并调用记录重放模块记录本事件,若请求失败,则进入步骤3);3)判断当前并行程序的所有线程是否都处于阻塞状态,如果判断结果为是,则调用自适应释放模块并进入步骤4);若判断结果为否,则再次执行步骤3);所述阻塞状态为线程由于缺少共享页面的访问权限或由于执行同步操作而无法继续正常执行的状态;4)自适应释放模块将引起各线程阻塞的所有共享页面暂存于候选集合,并从候选集合中选出合适的释放线程和被释放共享页面移入待释放集合;5)并行程序的所有线程遍历待释放集合来判断自身是否为释放线程,如果判断结果为是,则当前线程主动释放相应的共享页面,并调用记录重放模块记录访问权限的转移情况,如果判断结果为否,则进入步骤6);6)当前线程替释放线程释放相应的共享页面,并调用记录重放模块记录释放信息,释放线程在后续执行时取消被释放共享页面的访问权限;7)通过库函数重载模块确定并行程序中的各线程执行同步操作的顺序,并调用记录重放模块记录该顺序。所述步骤4)中从候选集合中选出合适的释放线程和被释放共享页面移入待释放集合具体包括以下步骤:S1)第一个进入阻塞状态的线程为候选集合中每个共享页面计算释放代价;S2)比较每个共享页面释放代价的值,将释放代价值最小的共享页面以及该共享页面的持有线程分别作为合适的被释放共享页面和释放线程移入待释放集合。所述步骤S1)中第一个进入阻塞状态的线程根据以下公式为候选集合中每个共享页面计算释放代价:其中,P(A)表示共享页面A的释放代价,Powned表示线程持有共享页面A的时间,Pwait_header表示共享页面A的等待队列中队首线程的等待时间,Phistory表示持有线程在历史执行过程中请求获得共享页面A的访问权限的时间之和,Pparallel表示并行度,并行度为当前并行程序的所有线程执行时间总和占所有线程执行时间与等待时间总和的比例,所述线程等待时间是指当次页保护异常触发的开始时刻到当前计算时刻之间的时间段,线程执行时间是指线程从最近一次页保护异常处理完毕到当次页保护异常的触发所经历的时间段。所述步骤2)中共享页面访问权限请求模块通过查询CREW协议判断线程是否能够获得共享页面的访问权限。所述记录重放模块包括记录模块和重放模块,所述记录模块用于并行程序的记录阶段,记录获得共享页面访问权限的顺序、释放共享页面访问权限的顺序和同步操作的执行顺序并生成日志文件;所述重放模块用于使得线程按序单条读取并按序执行日志文件的日志项。线程按序单条读取日志文件的日志项时,对于每一条日志项,每个线程在各重放执行点将该线程与将要执行的操作逐一匹配,如果匹配失败,则阻塞等待直到读取到正确的日志项。本专利技术具有以下有益效果:本专利技术的基于自适应释放的确定性重放方法,能够使得并行程序在记录阶段,以最合适的线程在合适的时机释放最合适的共享页面,能够最大化的降低并行程序在记录阶段处理页保护异常的开销,使得在记录阶段可以低开销地记录并行程序访问共享内存的顺序,从而大大提高其记录性能。附图说明图1是本专利技术的结构框图;图2是并行度的计算原理示意图;具体实施方式下面结合附图和具体实施例对本专利技术作进一步说明,以使本领域的技术人员可以更好地理解本专利技术并能予以实施,但所举实施例不作为对本专利技术的限定。如图1所示,一种基于自适应释放的确定性重放方法,具体包括以下步骤:1)并行程序中的每个线程在执行前,将所有的共享页面都设置为不可访问状态,并行程序的线程在缺少共享页面的访问权限而触发页保护异常时会进入共享页面访问权限请求处理模块;2)线程在共享页面访问权限请求模块中请求获得共享页面的访问权限,若请求成功,则该线程设置该共享页面相应的访问权限,并调用记录重放模块记录本事件,若请求失败,则进入步骤3);其中,共享页面访问权限请求模块通过查询CREW(Concurrentreadexclusivewrite并发读-独占写)协议判断线程是否能够获得共享页面的访问权限。其中,共享页面的状态分为共享读、独占写和公共状态这三种状态。3)判断当前并行程序的所有线程是否都处于阻塞状态,如果判断结果为是,则调用自适应释放模块并进入步骤4);若判断结果为否,则再次执行步骤3),所述阻塞状态为线程由于缺少共享页面的访问权限本文档来自技高网
...
基于自适应释放的确定性重放方法

【技术保护点】
1.一种基于自适应释放的确定性重放方法,其特征是,包括以下步骤:1)并行程序中的每个线程在执行前,将所有的共享页面都设置为不可访问状态;并行程序的线程在缺少共享页面的访问权限而触发页保护异常时会进入共享页面访问权限请求处理模块;2)线程在共享页面访问权限请求模块中请求获得共享页面的访问权限,若请求成功,则该线程设置该共享页面相应的访问权限,并调用记录重放模块记录本事件,若请求失败,则进入步骤3);3)判断当前并行程序的所有线程是否都处于阻塞状态,如果判断结果为是,则调用自适应释放模块并进入步骤4);若判断结果为否,则再次执行步骤3);所述阻塞状态为线程由于缺少共享页面的访问权限或由于执行同步操作而无法继续正常执行的状态;4)自适应释放模块将引起各线程阻塞的所有共享页面暂存于候选集合,并从候选集合中选出合适的释放线程和被释放共享页面移入待释放集合;5)并行程序的所有线程遍历待释放集合来判断自身是否为释放线程,如果判断结果为是,则当前线程主动释放相应的共享页面,并调用记录重放模块记录访问权限的转移情况,如果判断结果为否,则进入步骤6);6)当前线程替释放线程释放相应的共享页面,并调用记录重放模块记录释放信息,释放线程在后续执行时取消被释放共享页面的访问权限;7)通过库函数重载模块确定并行程序中的各线程执行同步操作的顺序,并调用记录重放模块记录该顺序。...

【技术特征摘要】
1.一种基于自适应释放的确定性重放方法,其特征是,包括以下步骤:1)并行程序中的每个线程在执行前,将所有的共享页面都设置为不可访问状态;并行程序的线程在缺少共享页面的访问权限而触发页保护异常时会进入共享页面访问权限请求处理模块;2)线程在共享页面访问权限请求模块中请求获得共享页面的访问权限,若请求成功,则该线程设置该共享页面相应的访问权限,并调用记录重放模块记录本事件,若请求失败,则进入步骤3);3)判断当前并行程序的所有线程是否都处于阻塞状态,如果判断结果为是,则调用自适应释放模块并进入步骤4);若判断结果为否,则再次执行步骤3);所述阻塞状态为线程由于缺少共享页面的访问权限或由于执行同步操作而无法继续正常执行的状态;4)自适应释放模块将引起各线程阻塞的所有共享页面暂存于候选集合,并从候选集合中选出合适的释放线程和被释放共享页面移入待释放集合;5)并行程序的所有线程遍历待释放集合来判断自身是否为释放线程,如果判断结果为是,则当前线程主动释放相应的共享页面,并调用记录重放模块记录访问权限的转移情况,如果判断结果为否,则进入步骤6);6)当前线程替释放线程释放相应的共享页面,并调用记录重放模块记录释放信息,释放线程在后续执行时取消被释放共享页面的访问权限;7)通过库函数重载模块确定并行程序中的各线程执行同步操作的顺序,并调用记录重放模块记录该顺序。2.如权利要求1所述的基于自适应释放的确定性重放方法,其特征是,所述步骤4)中从候选集合中选出合适的释放线程和被释放共享页面移入待释放集合具体包括以下步骤:S1)第一个进入阻塞状态的线程为候选集合中每个共享页面计算释放代价;S2)比较每个共享页面释放代价的值,将...

【专利技术属性】
技术研发人员:应欢王磊朱朝阳韩丽芳周亮梅文明缪思薇邱意民余文豪李梦涛范永王海翔
申请(专利权)人:中国电力科学研究院有限公司国家电网公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1