一种快速的全系统模拟器确定性回放方法技术方案

技术编号:10877849 阅读:90 留言:0更新日期:2015-01-08 00:11
本发明专利技术公开了一种快速的全系统模拟器确定性回放方法,其实施步骤如下:将并行程序的内存分为固定大小的块,将每块作为一个数据对象,在并行程序执行时记录数据对象的访存顺序;根据记录的数据对象的访存顺序重放并行程序,每当并行程序的一个线程执行写操作修改数据对象时,如果该数据对象仍有其它线程的读操作尚未完成,则先保留数据对象副本再执行数据对象的写操作,其它线程在执行读操作时则读取被保留的数据对象副本。本发明专利技术具有等待时间开销小、执行效率高、回放速度快、线程扩展性能强的优点。

【技术实现步骤摘要】
一种快速的全系统模拟器确定性回放方法
本专利技术涉及并行程序的调试及可靠性
,尤其涉及一种快速的全系统模拟器确定性回放方法。
技术介绍
由于数据竞争等因素的存在,并行程序的执行具有不确定性,即在给定输入下运行程序,并不一定会得到唯一的结果。记录-回放方法是一种能够使并行程序确定性执行的方法。记录-回放方法首先对并行程序的执行进行记录,主要记录程序中的访存顺序。然后对并行程序进行回放,在回放阶段,按照日志记录中的访存顺序执行并行程序指令。记录-回放方法能够保持回放阶段的执行和记录阶段的执行完全一致,具有复现程序执行的效果,对并行程序调试和可靠性具有重要意义。但是,现有技术的全系统模拟器确定性回放方法针对写操作时,必须等到所有对相同版本的数据的读操作完成之后才能进行,引起了很多等待时间,导致回放速率较低,实验显示从8线程扩展到16线程时程序回放的性能出现了下降。
技术实现思路
本专利技术要解决的技术问题是提供一种等待时间开销小、执行效率高、回放速度快、线程扩展性能强的快速的全系统模拟器确定性回放方法。为解决上述技术问题,本专利技术采用的技术方案为:一种快速的全系统模拟器确定性回放方法,其实施步骤如下:1)将并行程序的内存分为固定大小的块,将每块作为一个数据对象,在并行程序执行时记录数据对象的访存顺序;2)根据记录的所述数据对象的访存顺序重放并行程序,每当并行程序的一个线程执行写操作修改数据对象时,如果该数据对象仍有其它线程的读操作尚未完成,则先保留数据对象副本再执行数据对象的写操作,其它线程在执行读操作时则读取被保留的数据对象副本。优选地,所述步骤1)的详细执行步骤如下:1.1)初始化并行程序,为并行程序的每个线程创建一个用于记录线程的访存顺序的日志文件,为每个线程设置一个访存指令执行数并初始化为0;1.2)将并行程序的内存分为固定大小的块,每一个块作为一个数据对象,为每个数据对象设置一个版本号并初始化为0;1.3)并行程序选择一条待执行的访存指令并分配给指定线程执行,所述指定线程首先判断访存指令的指令类型,如果访存指令是读指令,则转到步骤1.4);如果访存指令是写指令则转到步骤1.5);1.4)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象的版本号,在所述指定线程的日志文件增加一条日志记录,所述日志记录包括针对目标数据对象的读操作以及目标数据对象的版本号,执行访存指令对目标数据对象的读操作;将访存指令执行数量加1,转到步骤1.6);1.5)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象的版本号,在所述指定线程的日志文件增加一条日志记录,所述日志记录包括针对目标数据对象的写操作以及目标数据对象的版本号,执行访存指令对目标数据对象的写操作,将目标数据对象的版本号加1;将访存指令执行数加1,转到步骤1.6);1.6)判断并行程序是否还有未执行的指令,如果有则转到步骤1.3),否则判定记录并行程序针对所述数据对象的访存顺序完毕,得到与并行程序的线程数量相同的日志文件,跳转执行步骤2)。优选地,所述步骤2)的详细执行步骤如下:2.1)初始化并行程序,为并行程序的每个线程创建一个用于记录线程的访存信息的日志文件,为每个线程设置一个访存指令执行数并初始化为0;2.2)将并行程序的内存分为固定大小的块,每一个块作为一个数据对象,为每个数据对象设置一个版本号并初始化为0;对每个数据对象创建一个用于存放保留执行写操作前的数据对象副本的数据对象队列并初始化为空;2.3)并行程序根据所述访存指令执行数读取分配给指定线程执行的访存指令,所述指定线程首先判断访存指令的指令类型,如果访存指令是读指令,则转到步骤2.4);如果访存指令是写指令则转到步骤2.5);2.4)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象当前的版本号,根据当前的版本号、所述指定线程的日志文件记录的版本号判断访存指令的目标版本数据,如果访存指令的目标版本数据为目标数据对象,则直接执行访存指令对目标数据对象的读操作;如果访存指令的目标版本数据为数据对象队列中的数据对象副本,则执行访存指令对数据对象队列中的数据对象副本的读操作,在数据对象队列中删除多余的数据对象副本;将访存指令执行数加1,转到步骤2.6);2.5)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象当前的版本号,根据当前的版本号、所述指定线程的日志文件记录的版本号判断访存指令的目标数据对象是否仍有其它线程的读操作正在等待,如果目标数据对象仍有其它线程的读操作正在等待,则执行所述数据对象的写操作,保留执行写操作前的数据对象副本并添加至数据对象队列中;将访存指令执行数加1,转到步骤2.6);2.6)判断并行程序是否还有未执行的指令,如果有则转到步骤2.3),否则判定根据记录结果重放并行程序的执行完毕,结束回放并退出。优选地,所述步骤2.4)的详细执行步骤如下:2.4.1)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象当前的版本号;根据所述访存指令执行数读取所述指定线程的日志文件中对应所述访存指令以及目标数据对象的记录的版本号,将当前的版本号、记录的版本号进行比较,如果当前的版本号小于记录的版本号则转到步骤2.4.2),否则转到步骤2.4.3);2.4.2)强制所述指定线程等待直到目标数据对象当前的版本号大于或者等于记录的版本号;2.4.3)判断当前的版本号大于记录的版本号是否成立,如果成立则判定访存指令的目标版本数据为数据对象队列中的数据对象副本,转到步骤2.4.4);否则,判定访存指令的目标版本数据为目标数据对象,直接执行访存指令对目标数据对象的读操作,转到步骤2.4.6);2.4.4)查找数据对象队列中的数据对象副本,找到其中版本号为所述记录的版本号的数据对象副本,执行访存指令对数据对象队列中的数据对象副本的读操作;2.4.5)判断是否还有其他线程需要对版本号为所述记录的版本号的数据对象副本进行读操作,如果没有则从数据对象队列中删除版本号为所述记录的版本号的数据对象副本;2.4.6)访存指令的读操作完成,将访存指令执行数加1,转到步骤2.6)。优选地,所述步骤2.5)的详细执行步骤如下:2.5.1)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象当前的版本号;根据所述访存指令执行数读取所述指定线程的日志文件中对应所述访存指令以及目标数据对象的记录的版本号,将当前的版本号、记录的版本号进行比较,如果当前的版本号小于记录的版本号则转到步骤2.5.2),否则转到步骤2.5.3);2.5.2)强制所述指定线程等待直到目标数据对象当前的版本号等于记录的版本号;2.5.3)检查是否还有其他线程对目标数据对象的记录的版本号有读操作没有完成,如果有这样的读操作没有完成则执行步骤2.5.4),否则执行步骤2.5.5);2.5.4)创建该目标数据对象的副本,并插入到所述数据对象队列中;2.5.5)执行对目标数据对象的写操作,并将目标数据对象当前的版本号增加1;2.5.6)访存指令的写操作完成,将访存指令执行数加1,转到步骤2.6)。与现有技术相比,本专利技术的优点在于:1)本专利技术在回放执行并行程序时,每当并行程序的一个线程执行写操作修改数据对象时,如果该本文档来自技高网...
一种快速的全系统模拟器确定性回放方法

【技术保护点】
一种快速的全系统模拟器确定性回放方法,其特征在于实施步骤如下:1)将并行程序的内存分为固定大小的块,将每块作为一个数据对象,在并行程序执行时记录数据对象的访存顺序;2)根据记录的所述数据对象的访存顺序重放并行程序,每当并行程序的一个线程执行写操作修改数据对象时,如果该数据对象仍有其它线程的读操作尚未完成,则先保留数据对象副本再执行数据对象的写操作,其它线程在执行读操作时则读取被保留的数据对象副本。

【技术特征摘要】
1.一种快速的全系统模拟器确定性回放方法,其特征在于实施步骤如下:1)将并行程序的内存分为固定大小的块,将每块作为一个数据对象,在并行程序执行时记录数据对象的访存顺序;2)根据记录的所述数据对象的访存顺序重放并行程序,每当并行程序的一个线程执行写操作修改数据对象时,如果该数据对象仍有其它线程的读操作尚未完成,则先保留数据对象副本再执行数据对象的写操作,其它线程在执行读操作时则读取被保留的数据对象副本;所述步骤1)的详细执行步骤如下:1.1)初始化并行程序,为并行程序的每个线程创建一个用于记录线程的访存顺序的日志文件,为每个线程设置一个访存指令执行数并初始化为0;1.2)将并行程序的内存分为固定大小的块,每一个块作为一个数据对象,为每个数据对象设置一个版本号并初始化为0;1.3)并行程序选择一条待执行的访存指令并分配给指定线程执行,所述指定线程首先判断访存指令的指令类型,如果访存指令是读指令,则转到步骤1.4);如果访存指令是写指令则转到步骤1.5);1.4)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象的版本号,在所述指定线程的日志文件增加一条日志记录,所述日志记录包括针对目标数据对象的读操作以及目标数据对象的版本号,执行访存指令对目标数据对象的读操作;将访存指令执行数加1,转到步骤1.6);1.5)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象的版本号,在所述指定线程的日志文件增加一条日志记录,所述日志记录包括针对目标数据对象的写操作以及目标数据对象的版本号,执行访存指令对目标数据对象的写操作,将目标数据对象的版本号加1;将访存指令执行数加1,转到步骤1.6);1.6)判断并行程序是否还有未执行的指令,如果有则转到步骤1.3),否则判定记录并行程序针对所述数据对象的访存顺序完毕,得到与并行程序的线程数量相同的日志文件,跳转执行步骤2)。2.根据权利要求1所述的快速的全系统模拟器确定性回放方法,其特征在于:所述步骤2)的详细执行步骤如下:2.1)初始化并行程序,为并行程序的每个线程创建一个用于记录线程的访存信息的日志文件,为每个线程设置一个访存指令执行数并初始化为0;2.2)将并行程序的内存分为固定大小的块,每一个块作为一个数据对象,为每个数据对象设置一个版本号并初始化为0;对每个数据对象创建一个用于存放保留执行写操作前的数据对象副本的数据对象队列并初始化为空;2.3)并行程序根据所述访存指令执行数读取分配给指定线程执行的访存指令,所述指定线程首先判断访存指令的指令类型,如果访存指令是读指令,则转到步骤2.4);如果访存指令是写指令则转到步骤2.5);2.4)通过所述指定线程获取访存指令的目标数据对象以及目标数据对象当前的版本号,根据当前的版本号、所述指定线程的日志文件记录的版本号判断访存指令的目标版本数据,如果访存指令的目标版本数据为目标数据对象,则直接执行访存指令对目标数据对象的读操作;如果访存指令的目标版本数据为数据对象队列中的数据对象副本,则执行访存指令对数据对象队列中的数据对象副本...

【专利技术属性】
技术研发人员:周旭卢凯迟万庆李根唐宏伟刘勇鹏冯华王小平蒋杰王睿伯樊葆华张英高颖慧王双喜陈沉
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南;43

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

1