用签名实现的多核程序内存竞争记录及重演方法

文档序号:6386521阅读:187来源:国知局
专利名称:用签名实现的多核程序内存竞争记录及重演方法
技术领域
本发明涉及多核程序内存竞争记录的方法,具体涉及用签名实现的多核程序内存竞争记录及重演方法。
背景技术
内存竞争的记录和重演是实现多核程序确定性重演的关键。当前多核程序确定性重演方法中只注重内存竞争记录的性能而忽略内存竞争重演的性能,导致重演时效率低下的问题。

发明内容
本发明解决了现有基于硬件的多核程序确定性重演方法中只注重内存竞争记录的性能而忽略内存竞争重演的性能,导致重演时效率低下的问题。本发明所述的用签名实现的多核程序内存竞争记录及重演方法包括如下步骤步骤一、在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录;步骤二、当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能。在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录操作步骤如下A、请求方发出指令,若该指令是读内存操作指令,则IC的值加1,所述的IC的值为指令计数值,将所读的内存块的地址添加到所有的读签名寄存器中,同时请求方发出共享内存请求消息到每个处理器的一致性协议机构,执行步骤B ;若该指令是写内存操作指令,则将要写的内存块的地址添加到所有的写签名寄存器中,同时请求方发出共享内存请求消息到每个处理器的一致性协议机构,执行步骤B ;B、一致性机构收到共享内存请求消息后,将共享内存请求消息转发给其他处理器核,即应答方,执行步骤C ;C、应答方根据接收到的共享内存请求消息的地址到读签名寄存器或写签名寄存器中查找,判断是否有内存竞争发生,若发生内存竞争,则将一个记录标志位和当前指令计数值连同内存块的内容一起发送给请求方,清空对应请求方的写签名寄存器和读签名寄存器;并将伪依赖关系记录到运行在该处理器核上的线程的内存竞争日志中,执行步骤D ;若没有发生内存竞争,则只将内存块的内容发送给请求方,执行步骤A ;D、请求方接收到应答消息后,检测内存竞争记录模块记录的标志位是否为真,若为真,则记录内存竞争依赖关系到内存竞争日志;否则不记录。当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能,每个处理器核操作步骤如下
E、处理器核开始运行时,从运行在该处理器上的线程的内存竞争日志中读取一个记录,并存储到该内存竞争记录过程中使用的寄存器中,执行步骤F ;F、处理器核检测该记录依赖关系,若该记录为伪依赖关系,则当执行完它所对应的指令后,创建唤醒消息、并通过一致性协议发送给对应的处理器,执行步骤G ;若该记录为内存竞争依赖关系,则暂不执行该指令,当接收到唤醒消息时,执行步骤H ;所述的唤醒消息为内存竞争的先发生方所在的处理器核创建并发送的,G、处理器发送完唤醒消息后,该处理器核从内存竞争日志中读取下一条记录,再执行步骤F ;H、处理器接收到合适的唤醒消息后,处理器核从内存竞争日志中读取下一条记录,执行步骤F。本发明为基于目录的高速缓存(Cache) —致性协议的多核处理器系统,用较少的硬件资源实现了多核程序运行时内存竞争的记录以及重演时内存竞争的重放。该内存竞争记录及重演方法为每个线程记录一个内存竞争日志,在记录阶段,采用签名实现内存竞争的检测,硬件开销小;在重演阶段,能够主动创建唤醒消息,提高了重演的效率。本发明既实现了内存竞争的记录,又能实现高效的内存竞争重演的目的。本发明应用在多核程序调试、入侵检测、容错等领域。


图1为本发明所述用签名实现的多核程序内存竞争记录及重演方法的流程图;图2为每个处理器核开始内存竞争记录操作的流程图;图3为进入多核程序重演阶段,开启内存竞争重演功能每个处理器核操作的流程图;图4为内存竞争日志样式图;图5为内存竞争记录硬件实现结构图。
具体实施例方式具体实施方式
一、结合图1具体说明本实施方式,本实施方式所述的用签名实现的多核程序内存竞争记录及重演方法包括如下步骤步骤一、在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录;步骤二、当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能。
具体实施方式
二、结合图2具体说明本实施方式,本实施方式与具体实施方式
一所述的用签名实现的多核程序内存竞争记录及重演方法的区别在于步骤一所述的在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录操作步骤如下A、请求方发出指令,若该指令是读内存操作指令,则IC的值加1,所述的IC的值为指令计数值,将所读的内存块的地址添加到所有的读签名寄存器中,同时请求方发出共享内存请求消息到每个处理器的一致性协议机构,执行步骤B;多核处理器都有一致性协议控制机构,用于保证所有处理器核私有LI数据Cache中保留的共享数据的副本一致,若该指令是写内存操作指令,则将要写的内存块的地址添加到所有的写签名寄存器中,同时请求方发出共享内存请求消息到每个处理器的一致性协议机构,执行步骤B ;B、一致性机构收到共享内存请求消息后,将共享内存请求消息转发给其他处理器核,即应答方,执行步骤C ;C、应答方根据接收到的共享内存请求消息的地址到读签名寄存器或写签名寄存器中查找,判断是否有内存竞争发生,若发生内存竞争,则将一个记录标志位和当前指令计数值连同内存块的内容一起发送给请求方,清空对应请求方的写签名寄存器和读签名寄存器;并将伪依赖关系记录到运行在该处理器核上的线程的内存竞争日志中,执行步骤D ;若没有发生内存竞争,则只将内存块的内容发送给请求方,执行步骤A ;D、请求方接收到应答消息后,检测内存竞争记录模块记录的标志位是否为真,若为真,则记录内存竞争依赖关系到内存竞争日志;否则不记录。
具体实施方式
三、结合图3具体说明本实施方式本实施方式与具体实施方式
一所述的用签名实现的多核程序内存竞争记录及重演方法的区别在于步骤二所述的当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能,每个处理器核操作步骤如下E、处理器核开始运行时,从运行在该处理器上的线程的内存竞争日志中读取一个记录,并存储到该内存竞争记录过程中使用的寄存器中,执行步骤F ;F、处理器核检测该记录依赖关系,若该记录为伪依赖关系,则当执行完它所对应的指令后,创建唤醒消息、并通过一致性协议发送给对应的处理器,执行步骤G ;若该记录为内存竞争依赖关系,则暂不执行该指令,当接收到唤醒消息时,执行步骤H ;所述的唤醒消息为内存竞争的先发生方所在的处理器核创建并发送的,G、处理器发送完唤醒消息后,该处理器核从内存竞争日志中读取下一条记录,再执行步骤F ;H、处理器接收到合适的唤醒消息后,处理器核从内存竞争日志中读取下一条记录,执行步骤F。相比先前的多核程序确定性重演方法,本发明有如下突出优点1、既支持内存竞争的记录,又支持内存竞争的重演。2、记录伪依赖关系,能在重演时主动创建唤醒消息并发送给请求方,重演效率高。3、使用签名实现内存竞争的检测,硬件资源消耗少。4、无需修改原有的Cache —致性协议。
具体实施方式
四、本实施方式与具体实施方式
二所述的用签名实现的多核程序内存竞争记录及重演方法的区别在于,步骤C中所述的内存竞争日志由内存竞争依赖关系和伪依赖关系组成,内存竞争依赖关系是用来在重演时指出哪条指令需要等待来自哪里的唤醒消息;伪依赖关系是用来在重演时指出哪条指令需要发送唤醒,内存竞争依赖关系用依赖关系1: w — j : V来表不,伪依赖关系用依赖关系1:w — O来表示,此依赖关系的后发生为0,区别于内存竞争依赖关系,从而表示此依赖关系是一个伪依赖关系。其中,W、ν表示发生冲突1:x — j:y发生时,线程1、j的当前指令计数值x和y均表示冲突发生时,冲突双方对应指令的指令计数值。如图4所示,有两个线程i和j都对ζ执行写操作,发生冲突j : 2 —1: 3,在内存竞争记录时要记录2 — 3作为此冲突的内存竞争依赖关系到i线程的内存竞争日志中;记录2 — 0作为此冲突的伪依赖关系到j线程的内存竞争日志中。线程i记录的2 — 3指出了重演时,线程i的指令3需要等待来自线程j指令2发送过来的唤醒消息;线程j记录的2 — O指出了重演时,线程j需要指令2执行完毕后发送一个唤醒消息给线程i。唤醒消息用二元组{发出唤醒消息的线程号,发出唤醒消息对应的指令计数值}表示,简洁明了,很容易被接受唤醒消息的一方识别。如此以来,多核程序重演时,能够主动发送消息,从而提高了重演的效率。本发明要实现内存竞争的记录及重演,需要为原有的多核处理器系统(若处理 器核数目为P)中的每个处理器核增加一个内存竞争记录模块,它包含如下部件P-1个1024bits的写签名寄存器、P-1个256bits的读签名寄存器和64bits指令计数器。支持本发明内存竞争记录及重演方法的4核(P=4)处理器硬件实现结构如图5所示。
权利要求
1.用签名实现的多核程序内存竞争记录及重演方法,其特征在于它包括如下步骤步骤一、在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录;步骤二、当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能。
2.根据权利要求1所述的用签名实现的多核程序内存竞争记录及重演方法,其特征在于步骤一所述的在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录操作步骤如下A、请求方发出指令,若该指令是读内存操作指令,则IC的值加1,所述的IC的值为指令计数值,将所读的内存块的地址添加到所有的读签名寄存器中,同时请求方发出共享内存请求消息到每个处理器的一致性协议机构,执行步骤B ;若该指令是写内存操作指令,则将要写的内存块的地址添加到所有的写签名寄存器中,同时请求方发出共享内存请求消息到每个处理器的一致性协议机构,执行步骤B ;B、一致性机构收到共享内存请求消息后,将共享内存请求消息转发给其他处理器核, 即应答方,执行步骤C ;C、应答方根据接收到的共享内存请求消息的地址到读签名寄存器或写签名寄存器中查找,判断是否有内存竞争发生,若发生内存竞争,则将一个记录标志位和当前指令计数值连同内存块的内容一起发送给请求方,清空对应请求方的写签名寄存器和读签名寄存器;并将伪依赖关系记录到运行在该处理器核上的线程的内存竞争日志中,执行步骤D ;若没有发生内存竞争,则只将内存块的内容发送给请求方,执行步骤A ;D、请求方接收到应答消息后,检测内存竞争记录模块记录的标志位是否为真,若为真, 则记录内存竞争依赖关系到内存竞争日志;否则不记录。
3.根据权利要求1所述的用签名实现的多核程序内存竞争记录及重演方法,其特征在于步骤二所述的当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能,每个处理器核操作步骤如下E、处理器核开始运行时,从运行在该处理器上的线程的内存竞争日志中读取一个记录,并存储到该内存竞争记录过程中使用的寄存器中,执行步骤F ;F、处理器核检测该记录依赖关系,若该记录为伪依赖关系,则当执行完它所对应的指令后,创建唤醒消息、并通过一致性协议发送给对应的处理器,执行步骤G ;若该记录为内存竞争依赖关系,则暂不执行该指令,当接收到唤醒消息时,执行步骤H ; 所述的唤醒消息为内存竞争的先发生方所在的处理器核创建并发送的,G、处理器发送完唤醒消息后,该处理器核从内存竞争日志中读取下一条记录,再执行步骤F ;H、处理器接收到合适的唤醒消息后,处理器核从内存竞争日志中读取下一条记录,执行步骤F。
4.根据权利要求2所述的用签名实现的多核程序内存竞争记录及重演方法,其特征在于步骤C中所述的内存竞争日志由内存竞争依赖关系和伪依赖关系组成,内存竞争依赖关系是用来在重演时指出哪条指令需要等待来自哪里的唤醒消息;伪依赖关系是用来在重演时指出哪条指令需要发送唤醒,内存竞争依赖关系用依赖关系i : w — j : v来表不,伪依赖关系用依赖关系i:w — 0来表示,其中,w、v表示发生冲突i:x — j:y发生时,线程i、j的当前指令计数值。
全文摘要
用签名实现的多核程序内存竞争记录及重演方法,涉及用签名实现的多核程序内存竞争记录及重演方法。它为了解决现有基于硬件的多核程序确定性重演方法中只注重内存竞争记录的性能而忽略内存竞争重演的性能,导致重演时效率低下的问题。签名实现的多核程序内存竞争记录及重演方法为步骤一、在多核程序原始执行阶段,开启内存竞争记录功能,每个处理器核开始内存竞争记录;步骤二、当所有的处理器核的内存竞争记录完成后,进入多核程序重演阶段,开启内存竞争重演功能。本发明应用在多核程序调试、入侵检测、容错等领域。
文档编号G06F9/50GK103019829SQ201210593408
公开日2013年4月3日 申请日期2012年12月31日 优先权日2012年12月31日
发明者朱素霞, 季振洲, 陈志刚, 吴昊, 王庆, 王晖, 李聪 申请人:哈尔滨工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1