本技术涉及计算机,尤其涉及一种应用程序容错处理方法、装置及存储介质。
背景技术:
1、随着半导体工艺节点不断向前推进,处理器(例如中央处理器(centralprocessing unit,cpu)、图形处理器(graphics processing unit,gpu)、神经网络处理器(neural-network processing unit,npu)等)的晶体管密度在不断增加,但其可靠性却在逐渐降低。例如,大型的计算集群或数据中心通常通过处理器执行大量的计算任务,而处理器在执行计算任务的过程中,有时会发生瞬时错误(transient error),从而导致计算错误(例如计算结果错误、用于完成计算任务的应用程序崩溃等)。
2、在计算正确性至关重要的领域(例如科学计算、金融计算、数据库服务等领域),在具备有效的计算错误检测机制的情况下,通常通过重运行机制来修复计算错误。重运行机制假设计算错误是处理器部件偶然发生的瞬时错误造成的,重新运行一次出错的计算任务就能够极大概率得到正确的结果。
3、目前的重运行机制通常基于检查点(checkpoint)或者基于编译阶段确定的幂等区域(idempotent region)。其中,基于检查点的重运行机制,虽然适用于大多数计算场景,但是建立检查点和从检查点恢复计算任务通常涉及大量的内存复制操作,性能较差;而基于编译阶段确定的幂等区域的重运行机制,则依赖于编译器对应用程序的幂等性分析,无法在运行时调整,局限性较大。
技术实现思路
1、有鉴于此,提出了一种应用程序容错处理方法、装置及存储介质。
2、第一方面,本技术的实施例提供了一种应用程序容错处理方法,所述方法包括:运行应用程序,所述应用程序用于完成预设的计算任务;在所述应用程序运行过程中,标记并跟踪抽象函数及所述抽象函数的接口参数,所述抽象函数用于指示所述应用程序中的预设级别的功能模块,所述抽象函数的接口参数包括输入参数及输出参数,所述输入参数为存储所述功能模块的输入数据的内存区域,所述输出参数为存储所述功能模块的输出数据的内存区域;在检测到所述应用程序出现计算错误的情况下,从所述抽象函数中,确定发生所述计算错误的目标抽象函数;根据所述目标抽象函数的接口参数,判断所述目标抽象函数是否具有幂等性;在所述目标抽象函数具有幂等性的情况下,重新运行所述目标抽象函数,以修复所述计算错误。
3、本技术的实施例,能够在应用程序运行过程中,根据预设级别,标记并跟踪抽象函数及其接口参数,并在检测到计算错误的情况下,确定发生计算错误的目标抽象函数,然后根据目标抽象函数的接口参数,判断目标抽象函数的幂等性,在目标抽象函数具有幂等性的情况下,重新运行目标抽象函数,以修复计算错误,从而不仅能够实现动态的、应用程序运行时的幂等性分析,使得应用程序的幂等性分析不再依赖于特殊设计的编译器或硬件,而且能够支持可调整的容错粒度,提高了本技术实施例的应用程序容错处理方法的通用性及容错性能。
4、根据第一方面,在所述应用程序容错处理方法的第一种可能的实现方式中,所述接口参数具有版本号,所述版本号用于指示所述接口参数的数据存放状态,所述标记并跟踪抽象函数及所述抽象函数的接口参数,包括:在所述应用程序运行过程中,根据所述预设级别,识别所述应用程序中的功能模块,将识别出的功能模块标记为抽象函数;确定所述抽象函数的接口参数及所述接口参数的版本号;根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,其中,所述参数全局版本表用于记录所述应用程序的所有抽象函数的接口参数的最新版本号,所述参数局部版本表用于记录所述应用程序的各个抽象函数运行时的接口参数的版本号。
5、本技术的实施例,能够在应用程序运行过程中,根据预设级别,识别应用程序中的功能模块,并将识别出的功能模块标记为抽象函数,然后确定抽象函数的接口参数及其版本号,并根据抽象函数的接口参数及其版本号,更新参数全局版本表及参数局部版本表,从而可以在应用程序运行过程中,标记抽象函数及其接口参数,并通过简单的数据结构(参数全局版本表pgvmap及参数局部版本表plvmap)来跟踪抽象函数的接口参数(输入参数及输出参数)指示的内存区的版本变化(即读写历史),实现对抽象函数及其接口参数的标记及跟踪,复杂度低,开销小,能够提高标记及跟踪抽象函数及其接口参数时的处理效率。
6、根据第一方面的第一种可能的实现方式,在所述应用程序容错处理方法的第二种可能的实现方式中,所述根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,包括:将所述抽象函数的标识符及所述抽象函数的接口参数的标识符及版本号,加入参数局部版本表中。
7、本技术的实施例,更新参数局部版本表时,能够将抽象函数的标识符及抽象函数的接口参数的标识符及版本号,加入参数局部版本表中,从而能够实现参数局部版本表的动态更新及维护,提高参数局部版本表的准确性。
8、根据第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式,在所述应用程序容错处理方法的第三种可能的实现方式中,所述根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,包括:在参数全局版本表中存在所述抽象函数的接口参数的情况下,更新所述参数全局版本表中所述抽象函数的接口参数的版本号;或在所述参数全局版本表中不存在所述抽象函数的接口参数的情况下,将所述抽象函数的接口参数的标识符及版本号,加入所述参数全局版本表中。
9、本技术的实施例,更新参数全局版本表时,在参数全局版本表中存在抽象函数的接口参数的情况下,更新参数全局版本表中抽象函数的接口参数的版本号;在参数全局版本表中不存在抽象函数的接口参数的情况下,将抽象函数的接口参数的标识符及版本号,加入参数全局版本表中,从而能够实现参数全局版本表的动态更新及维护,提高参数全局版本表的准确性。
10、根据第一方面的第一种可能的实现方式至第一方面的第三种可能的实现方式中的任意一种,在所述应用程序容错处理方法的第四种可能的实现方式中,所述根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,包括:在所述接口参数被所述应用程序的抽象函数之外的其他操作修改的情况下,更新所述参数全局版本表中所述接口参数的版本号;将所述参数局部版本表中,版本号低于所述参数全局版本表中的版本号的所述接口参数,标记为无效。
11、本技术的实施例,在抽象函数的接口参数被应用程序的抽象函数之外的其他操作修改的情况下,更新参数全局版本表中该接口参数的版本号,并将参数局部版本表中,版本号低于参数全局版本表中的版本号的该接口参数标记为无效,从而能够跟踪抽象函数之外的其他操作对抽象函数的接口参数的修改,提高参数全局版本表及参数局部版本表的准确性。
12、根据第一方面的第一种可能的实现方式至第一方面的第四种可能的实现方式中的任意一种,在所述应用程序容错处理方法的第五种可能的实现方式中,所述根据所述目标抽象函数的接口参数,判断所述目标抽象函数是否具有幂等性,包括:判断所述参数局部版本表中所述目标抽象函数的接口参数的标识符中,是否存在相同的标识符;在不存在相同的标识符的情况下,确定所述目标抽象函数具有幂等性。
13、本技术的实施例,通过判断参数局部版本表中目标抽象函数的接口参数的标识符中是否存在相同的标识符,并在不存在相同的标识符的情况下,确定目标抽象函数具有幂等性,实现了基于参数局部版本表的运行时幂等性分析,简单快速,从而能够提高处理效率。
14、根据第一方面的第一种可能的实现方式至第一方面的第五种可能的实现方式中的任意一种,在所述应用程序容错处理方法的第六种可能的实现方式中,所述方法还包括:在所述目标抽象函数不具有幂等性的情况下,在所述抽象函数中,搜索重运行集合,所述重运行集合用于指示为修复所述计算错误所必须重新运行的最小抽象函数的集合;在所述重运行集合搜索成功的情况下,运行所述重运行集合,以修复所述计算错误。
15、本技术的实施例,在目标抽象函数不具有幂等性的情况下,在抽象函数中搜索重运行集合,并在重运行集合搜索成功的情况下,运行重运行集合来修复计算错误,从而能够通过包括多个抽象函数的重运行集合来修复计算错误。
16、根据第一方面的第六种可能的实现方式,在所述应用程序容错处理方法的第七种可能的实现方式中,所述在所述抽象函数中,搜索重运行集合,包括:根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合。
17、本技术的实施例,能够根据参数局部版本表及参数全局版本表,从抽象函数中搜索重运行集合。由于参数局部版本表及参数全局版本表为简单的数据结构,根据参数局部版本表及参数全局版本表,从抽象函数中搜索重运行集合,简单快速,能够提高重运行集合的搜索效率。
18、根据第一方面的第七种可能的实现方式,在所述应用程序容错处理方法的第八种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括:将所述目标抽象函数加入重运行集合;判断所述参数局部版本表中,所述重运行集合中的所有抽象函数的接口参数中是否存在被标记为无效的第一参数;在不存在第一参数的情况下,判断所述重运行集合中的所有抽象函数的输入参数中,是否存在所述参数局部版本表中的版本号低于所述参数全局版本表中的版本号的第二参数;在存在所述第二参数的情况下,根据所述参数局部版本表,判断所述抽象函数中,是否存在输出参数包括所述第二参数的第一抽象函数;在所述抽象函数中存在所述第一抽象函数的情况下,判断所述重运行集合是否包括所述第一抽象函数;在所述重运行集合不包括所述第一抽象函数的情况下,将所述第一抽象函数加入所述重运行集合;从步骤所述判断所述参数局部版本表中,所述重运行集合中的所有抽象函数的接口参数中是否存在被标记为无效的第一参数开始重新执行,直到所述重运行集合包括所述第一抽象函数。
19、本技术的实施例中搜索重运行集合的过程可以称为前向搜索,通过前向搜索可以判断为了重新运行目标抽象函数,必须首先运行哪些其他的抽象函数来重新产生目标抽象函数的原始输入(即正确的输入数据)。
20、根据第一方面的第八种可能的实现方式,在所述应用程序容错处理方法的第九种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括:在不存在所述第二参数或所述重运行集合包括所述第一抽象函数的情况下,判断所述重运行集合中的所有抽象函数的输出参数中,是否存在所述参数局部版本表中的版本号低于所述参数全局版本表中的版本号的第三参数;在存在所述第三参数的情况下,根据所述参数局部版本表,判断所述抽象函数中,是否存在输入参数包括所述第三参数的第二抽象函数;在所述抽象函数中存在所述第二抽象函数的情况下,判断所述重运行集合是否包括所述第二抽象函数;在所述重运行集合不包括所述第二抽象函数的情况下,将所述第二抽象函数加入所述重运行集合;从步骤所述判断所述参数局部版本表中,所述重运行集合中的所有抽象函数的接口参数中是否存在被标记为无效的第一参数开始重新执行,直到所述重运行集合包括所述第二抽象函数。
21、本技术的实施例中搜索重运行集合的过程可以称为后向搜索,通过后向搜索可以判断为了不破坏当前的内存上下文,必须重新运行哪些抽象函数,即通过后向搜索能够找到还原内存上下文到当前参数局部版本表plvmap记录的状态的抽象函数。
22、根据第一方面的第九种可能的实现方式,在所述应用程序容错处理方法的第十种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括:在不存在所述第三参数或所述重运行集合包括所述第二抽象函数的情况下,所述重运行集合搜索成功。
23、本技术的实施例,在不存在第三参数或重运行集合包括第二抽象函数的情况下,确定重运行集合搜索成功,简单快速,能够提高重运行集合的搜索效率。
24、根据第一方面的第九种可能的实现方式,在所述应用程序容错处理方法的第十一种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括如下任意一项:在存在所述第一参数的情况下,所述重运行集合搜索失败;在所述抽象函数中不存在所述第一抽象函数的情况下,所述重运行集合搜索失败;在所述抽象函数中不存在所述第二抽象函数的情况下,所述重运行集合搜索失败。
25、本技术的实施例,在存在第一参数的情况下,或者抽象函数中不存在第一抽象函数或第二抽象函数的情况下,确定重运行集合搜索失败,简单快速,能够提高重运行集合的搜索效率。
26、根据第一方面的第六种可能的实现方式,在所述应用程序容错处理方法的第十二种可能的实现方式中,所述运行所述重运行集合,包括:根据所述参数局部版本表,生成与所述重运行集合对应的局部控制流图;根据所述局部控制流图,运行所述重运行集合。
27、本技术的实施例,能够根据参数局部版本表,生成与重运行集合对应的局部控制流图,并根据局部控制流图,运行重运行集合,从而不仅能够在应用程序运行过程中,基于参数局部版本表,动态生成重运行集合的局部控制流图,使得局部控制流图的生成不在依赖编译时分析,而且简单快速,能够提高生成局部控制流图时的处理速度,进而提高重运行集合的运行效率。
28、根据第一方面的第六种可能的实现方式至第一方面的第十二种可能的实现方式中的任意一种,在所述应用程序容错处理方法的第十三种可能的实现方式中,所述方法还包括:在所述应用程序运行过程中,根据预设的检查点建立规则,建立至少一个检查点;在所述重运行集合搜索失败的情况下,从所述至少一个检查点中,确定出与所述目标抽象函数最近的目标检查点;从所述目标检查点开始,重新运行所述应用程序,以修复所述计算错误。
29、本技术的实施例,能够在应用程序运行过程中,根据预设的检查点建立规则,建立至少一个检查点,在重运行集合搜索失败的情况下,从至少一个检查点中,确定出与目标抽象函数最近的目标检查点,并从目标检查点开始,重新运行应用程序,从而能够在重运行集合搜索失败的情况下,从与目标抽象函数最近的检查点开始,重新运行应用程序来修复计算错误。
30、根据第一方面或者第一方面的第一种可能的实现方式至第一方面的第十三种可能的实现方式中的任意一种,在所述应用程序容错处理方法的第十四种可能的实现方式中,所述应用程序运行在包括处理器及加速器的异构计算平台上,所述标记并跟踪抽象函数及所述抽象函数的接口参数,包括:在所述应用程序运行过程中,将所述处理器发射到所述加速器的核函数,标记为抽象函数。
31、本技术的实施例,在应用程序运行在包括处理器及加速器的异构计算平台上时,在应用程序运行过程中,将处理器发射到加速器的核函数,标记为抽象函数,不仅使得抽象函数的标记与应用程序的运行平台紧密结合,而且便于封装异构计算平台(包括处理器及加速器)上的内存管理接口,来实现应用程序运行过程中的抽象函数及其接口参数的标记及跟踪。
32、第二方面,本技术的实施例提供了一种应用程序容错处理装置,所述装置包括:第一运行模块,用于运行应用程序,所述应用程序用于完成预设的计算任务;标记及跟踪模块,用于在所述应用程序运行过程中,标记并跟踪抽象函数及所述抽象函数的接口参数,所述抽象函数用于指示所述应用程序中的预设级别的功能模块,所述抽象函数的接口参数包括输入参数及输出参数,所述输入参数为存储所述功能模块的输入数据的内存区域,所述输出参数为存储所述功能模块的输出数据的内存区域;目标抽象函数确定模块,用于在检测到所述应用程序出现计算错误的情况下,从所述抽象函数中,确定发生所述计算错误的目标抽象函数;幂等性判断模块,用于根据所述目标抽象函数的接口参数,判断所述目标抽象函数是否具有幂等性;第二运行模块,用于在所述目标抽象函数具有幂等性的情况下,重新运行所述目标抽象函数,以修复所述计算错误。
33、本技术的实施例,能够在应用程序运行过程中,根据预设级别,标记并跟踪抽象函数及其接口参数,并在检测到计算错误的情况下,确定发生计算错误的目标抽象函数,然后根据目标抽象函数的接口参数,判断目标抽象函数的幂等性,在目标抽象函数具有幂等性的情况下,重新运行目标抽象函数,以修复计算错误,从而不仅能够实现动态的、应用程序运行时的幂等性分析,使得应用程序的幂等性分析不再依赖于特殊设计的编译器或硬件,而且能够支持可调整的容错粒度,提高了本技术实施例的应用程序容错处理方法的通用性及容错性能。
34、根据第二方面,在所述应用程序容错处理装置的第一种可能的实现方式中,所述接口参数具有版本号,所述版本号用于指示所述接口参数的数据存放状态,所述标记及跟踪模块,被配置为:在所述应用程序运行过程中,根据所述预设级别,识别所述应用程序中的功能模块,将识别出的功能模块标记为抽象函数;确定所述抽象函数的接口参数及所述接口参数的版本号;根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,其中,所述参数全局版本表用于记录所述应用程序的所有抽象函数的接口参数的最新版本号,所述参数局部版本表用于记录所述应用程序的各个抽象函数运行时的接口参数的版本号。
35、本技术的实施例,能够在应用程序运行过程中,根据预设级别,识别应用程序中的功能模块,并将识别出的功能模块标记为抽象函数,然后确定抽象函数的接口参数及其版本号,并根据抽象函数的接口参数及其版本号,更新参数全局版本表及参数局部版本表,从而可以在应用程序运行过程中,标记抽象函数及其接口参数,并通过简单的数据结构(参数全局版本表pgvmap及参数局部版本表plvmap)来跟踪抽象函数的接口参数(输入参数及输出参数)指示的内存区的版本变化(即读写历史),实现对抽象函数及其接口参数的标记及跟踪,复杂度低,开销小,能够提高标记及跟踪抽象函数及其接口参数时的处理效率。
36、根据第二方面的第一种可能的实现方式,在所述应用程序容错处理装置的第二种可能的实现方式中,所述根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,包括:将所述抽象函数的标识符及所述抽象函数的接口参数的标识符及版本号,加入参数局部版本表中。
37、本技术的实施例,更新参数局部版本表时,能够将抽象函数的标识符及抽象函数的接口参数的标识符及版本号,加入参数局部版本表中,从而能够实现参数局部版本表的动态更新及维护,提高参数局部版本表的准确性。
38、根据第二方面的第一种可能的实现方式或者第二方面的第二种可能的实现方式,在所述应用程序容错处理装置的第三种可能的实现方式中,所述根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,包括:在参数全局版本表中存在所述抽象函数的接口参数的情况下,更新所述参数全局版本表中所述抽象函数的接口参数的版本号;或在所述参数全局版本表中不存在所述抽象函数的接口参数的情况下,将所述抽象函数的接口参数的标识符及版本号,加入所述参数全局版本表中。
39、本技术的实施例,更新参数全局版本表时,在参数全局版本表中存在抽象函数的接口参数的情况下,更新参数全局版本表中抽象函数的接口参数的版本号;在参数全局版本表中不存在抽象函数的接口参数的情况下,将抽象函数的接口参数的标识符及版本号,加入参数全局版本表中,从而能够实现参数全局版本表的动态更新及维护,提高参数全局版本表的准确性。
40、根据第二方面的第一种可能的实现方式至第二方面的第三种可能的实现方式中的任意一种,在所述应用程序容错处理装置的第四种可能的实现方式中,所述根据所述抽象函数的接口参数及所述接口参数的版本号,更新参数全局版本表及参数局部版本表,包括:在所述接口参数被所述应用程序的抽象函数之外的其他操作修改的情况下,更新所述参数全局版本表中所述接口参数的版本号;将所述参数局部版本表中,版本号低于所述参数全局版本表中的版本号的所述接口参数,标记为无效。
41、本技术的实施例,在抽象函数的接口参数被应用程序的抽象函数之外的其他操作修改的情况下,更新参数全局版本表中该接口参数的版本号,并将参数局部版本表中,版本号低于参数全局版本表中的版本号的该接口参数标记为无效,从而能够跟踪抽象函数之外的其他操作对抽象函数的接口参数的修改,提高参数全局版本表及参数局部版本表的准确性。
42、根据第二方面的第一种可能的实现方式至第二方面的第四种可能的实现方式中的任意一种,在所述应用程序容错处理装置的第五种可能的实现方式中,所述幂等性判断模块,被配置为:判断所述参数局部版本表中所述目标抽象函数的接口参数的标识符中,是否存在相同的标识符;在不存在相同的标识符的情况下,确定所述目标抽象函数具有幂等性。
43、本技术的实施例,通过判断参数局部版本表中目标抽象函数的接口参数的标识符中是否存在相同的标识符,并在不存在相同的标识符的情况下,确定目标抽象函数具有幂等性,实现了基于参数局部版本表的运行时幂等性分析,简单快速,从而能够提高处理效率。
44、根据第二方面的第一种可能的实现方式至第二方面的第五种可能的实现方式中的任意一种,在所述应用程序容错处理装置的第六种可能的实现方式中,所述装置还包括:重运行集合搜索模块,用于在所述目标抽象函数不具有幂等性的情况下,在所述抽象函数中,搜索重运行集合,所述重运行集合用于指示为修复所述计算错误所必须重新运行的最小抽象函数的集合;第三运行模块,用于在所述重运行集合搜索成功的情况下,运行所述重运行集合,以修复所述计算错误。
45、本技术的实施例,在目标抽象函数不具有幂等性的情况下,在抽象函数中搜索重运行集合,并在重运行集合搜索成功的情况下,运行重运行集合来修复计算错误,从而能够通过包括多个抽象函数的重运行集合来修复计算错误。
46、根据第二方面的第六种可能的实现方式,在所述应用程序容错处理装置的第七种可能的实现方式中,所述重运行集合搜索模块,被配置为:根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合。
47、本技术的实施例,能够根据参数局部版本表及参数全局版本表,从抽象函数中搜索重运行集合。由于参数局部版本表及参数全局版本表为简单的数据结构,根据参数局部版本表及参数全局版本表,从抽象函数中搜索重运行集合,简单快速,能够提高重运行集合的搜索效率。
48、根据第二方面的第七种可能的实现方式,在所述应用程序容错处理装置的第八种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括:将所述目标抽象函数加入重运行集合;判断所述参数局部版本表中,所述重运行集合中的所有抽象函数的接口参数中是否存在被标记为无效的第一参数;在不存在第一参数的情况下,判断所述重运行集合中的所有抽象函数的输入参数中,是否存在所述参数局部版本表中的版本号低于所述参数全局版本表中的版本号的第二参数;在存在所述第二参数的情况下,根据所述参数局部版本表,判断所述抽象函数中,是否存在输出参数包括所述第二参数的第一抽象函数;在所述抽象函数中存在所述第一抽象函数的情况下,判断所述重运行集合是否包括所述第一抽象函数;在所述重运行集合不包括所述第一抽象函数的情况下,将所述第一抽象函数加入所述重运行集合;从步骤所述判断所述参数局部版本表中,所述重运行集合中的所有抽象函数的接口参数中是否存在被标记为无效的第一参数开始重新执行,直到所述重运行集合包括所述第一抽象函数。
49、本技术的实施例中搜索重运行集合的过程可以称为前向搜索,通过前向搜索可以判断为了重新运行目标抽象函数,必须首先运行哪些其他的抽象函数来重新产生目标抽象函数的原始输入(即正确的输入数据)。
50、根据第二方面的第八种可能的实现方式,在所述应用程序容错处理装置的第九种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括:在不存在所述第二参数或所述重运行集合包括所述第一抽象函数的情况下,判断所述重运行集合中的所有抽象函数的输出参数中,是否存在所述参数局部版本表中的版本号低于所述参数全局版本表中的版本号的第三参数;在存在所述第三参数的情况下,根据所述参数局部版本表,判断所述抽象函数中,是否存在输入参数包括所述第三参数的第二抽象函数;在所述抽象函数中存在所述第二抽象函数的情况下,判断所述重运行集合是否包括所述第二抽象函数;在所述重运行集合不包括所述第二抽象函数的情况下,将所述第二抽象函数加入所述重运行集合;从步骤所述判断所述参数局部版本表中,所述重运行集合中的所有抽象函数的接口参数中是否存在被标记为无效的第一参数开始重新执行,直到所述重运行集合包括所述第二抽象函数。
51、本技术的实施例中搜索重运行集合的过程可以称为后向搜索,通过后向搜索可以判断为了不破坏当前的内存上下文,必须重新运行哪些抽象函数,即通过后向搜索能够找到还原内存上下文到当前参数局部版本表plvmap记录的状态的抽象函数。
52、根据第二方面的第九种可能的实现方式,在所述应用程序容错处理装置的第十种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括:在不存在所述第三参数或所述重运行集合包括所述第二抽象函数的情况下,所述重运行集合搜索成功。
53、本技术的实施例,在不存在第三参数或重运行集合包括第二抽象函数的情况下,确定重运行集合搜索成功,简单快速,能够提高重运行集合的搜索效率。
54、根据第二方面的第九种可能的实现方式,在所述应用程序容错处理装置的第十一种可能的实现方式中,所述根据所述参数全局版本表及所述参数局部版本表,在所述抽象函数中,搜索重运行集合,包括如下任意一项:在存在所述第一参数的情况下,所述重运行集合搜索失败;在所述抽象函数中不存在所述第一抽象函数的情况下,所述重运行集合搜索失败;在所述抽象函数中不存在所述第二抽象函数的情况下,所述重运行集合搜索失败。
55、本技术的实施例,在存在第一参数的情况下,或者抽象函数中不存在第一抽象函数或第二抽象函数的情况下,确定重运行集合搜索失败,简单快速,能够提高重运行集合的搜索效率。
56、根据第二方面的第六种可能的实现方式,在所述应用程序容错处理装置的第十二种可能的实现方式中,所述第三运行模块,被配置为:根据所述参数局部版本表,生成与所述重运行集合对应的局部控制流图;根据所述局部控制流图,运行所述重运行集合。
57、本技术的实施例,能够根据参数局部版本表,生成与重运行集合对应的局部控制流图,并根据局部控制流图,运行重运行集合,从而不仅能够在应用程序运行过程中,基于参数局部版本表,动态生成重运行集合的局部控制流图,使得局部控制流图的生成不在依赖编译时分析,而且简单快速,能够提高生成局部控制流图时的处理速度,进而提高重运行集合的运行效率。
58、根据第二方面的第六种可能的实现方式至第二方面的第十二种可能的实现方式中的任意一种,在所述应用程序容错处理装置的第十三种可能的实现方式中,所述装置还包括:检查点建立模块,用于在所述应用程序运行过程中,根据预设的检查点建立规则,建立至少一个检查点;目标检查点确定模块,用于在所述重运行集合搜索失败的情况下,从所述至少一个检查点中,确定出与所述目标抽象函数最近的目标检查点;第四运行模块,用于从所述目标检查点开始,重新运行所述应用程序,以修复所述计算错误。
59、本技术的实施例,能够在应用程序运行过程中,根据预设的检查点建立规则,建立至少一个检查点,在重运行集合搜索失败的情况下,从至少一个检查点中,确定出与目标抽象函数最近的目标检查点,并从目标检查点开始,重新运行应用程序,从而能够在重运行集合搜索失败的情况下,从与目标抽象函数最近的检查点开始,重新运行应用程序来修复计算错误。
60、根据第二方面或者第二方面的第一种可能的实现方式至第二方面的第十三种可能的实现方式中的任意一种,在所述应用程序容错处理装置的第十四种可能的实现方式中,所述应用程序运行在包括处理器及加速器的异构计算平台上,所述标记及跟踪模块,被配置为:在所述应用程序运行过程中,将所述处理器发射到所述加速器的核函数,标记为抽象函数。
61、本技术的实施例,在应用程序运行在包括处理器及加速器的异构计算平台上时,在应用程序运行过程中,将处理器发射到加速器的核函数,标记为抽象函数,不仅使得抽象函数的标记与应用程序的运行平台紧密结合,而且便于封装异构计算平台(包括处理器及加速器)上的内存管理接口,来实现应用程序运行过程中的抽象函数及其接口参数的标记及跟踪。
62、第三方面,本技术的实施例提供了一种应用程序容错处理装置,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令时实现上述第一方面或者第一方面的多种可能的实现方式中的一种或几种的应用程序容错处理方法。
63、本技术的实施例,能够在应用程序运行过程中,根据预设级别,标记并跟踪抽象函数及其接口参数,并在检测到计算错误的情况下,确定发生计算错误的目标抽象函数,然后根据目标抽象函数的接口参数,判断目标抽象函数的幂等性,在目标抽象函数具有幂等性的情况下,重新运行目标抽象函数,以修复计算错误,从而不仅能够实现动态的、应用程序运行时的幂等性分析,使得应用程序的幂等性分析不再依赖于特殊设计的编译器或硬件,而且能够支持可调整的容错粒度,提高了本技术实施例的应用程序容错处理方法的通用性及容错性能。
64、第四方面,本技术的实施例提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述第一方面或者第一方面的多种可能的实现方式中的一种或几种的应用程序容错处理方法。
65、本技术的实施例,能够在应用程序运行过程中,根据预设级别,标记并跟踪抽象函数及其接口参数,并在检测到计算错误的情况下,确定发生计算错误的目标抽象函数,然后根据目标抽象函数的接口参数,判断目标抽象函数的幂等性,在目标抽象函数具有幂等性的情况下,重新运行目标抽象函数,以修复计算错误,从而不仅能够实现动态的、应用程序运行时的幂等性分析,使得应用程序的幂等性分析不再依赖于特殊设计的编译器或硬件,而且能够支持可调整的容错粒度,提高了本技术实施例的应用程序容错处理方法的通用性及容错性能。
66、第五方面,本技术的实施例提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备中运行时,所述电子设备中的处理器执行上述第一方面或者第一方面的多种可能的实现方式中的一种或几种的应用程序容错处理方法。
67、本技术的实施例,能够在应用程序运行过程中,根据预设级别,标记并跟踪抽象函数及其接口参数,并在检测到计算错误的情况下,确定发生计算错误的目标抽象函数,然后根据目标抽象函数的接口参数,判断目标抽象函数的幂等性,在目标抽象函数具有幂等性的情况下,重新运行目标抽象函数,以修复计算错误,从而不仅能够实现动态的、应用程序运行时的幂等性分析,使得应用程序的幂等性分析不再依赖于特殊设计的编译器或硬件,而且能够支持可调整的容错粒度,提高了本技术实施例的应用程序容错处理方法的通用性及容错性能。
68、本技术的这些和其他方面在以下(多个)实施例的描述中会更加简明易懂。