弱内存序的检测修复方法、系统及相关设备技术方案

技术编号:37142898 阅读:14 留言:0更新日期:2023-04-06 21:51
本申请提供了弱内存序的检测修复方法、系统及相关设备,其特征在于,该方法包括以下步骤:提供程序输入接口,程序输入接口用于获取用户上传的程序,对程序进行弱内存序检测,输出检测结果,检测结果包括需要修复的代码在程序中的位置信息,根据位置信息,输出程序进行弱内存序修复的范围信息,范围信息对应的代码至少包括需要修复的代码,对范围信息对应的代码进行弱内存序修复。根据范围信息进行弱内存序的修复,可以减少弱内存序修复时内存屏障指令插入的数量,提高程序运行效率,而且当程序的规模较大时,通过对范围信息对应的代码进行修复,可以提高修复的效率。可以提高修复的效率。可以提高修复的效率。

【技术实现步骤摘要】
弱内存序的检测修复方法、系统及相关设备


[0001]本申请涉及计算机领域,尤其涉及弱内存序的检测修复方法、系统及相关设备。

技术介绍

[0002]中央处理器(central processing unit,CPU)为了使得处理器内部的运算单元尽量被充分利用,处理器可能会对输入代码进行乱序执行(out

of order excution)优化,也就是改变程序中部分语句执行的先后顺序。但是在多处理器系统中,处理器上运行的多线程在不同内存模型的处理器上可能会具有不同的指令执行顺序,从而导致多线程程序运行出现逻辑上的错误。
[0003]举例来说,当基于非弱内存模型开发的多线程,在采用弱内存模型(weak memory model)的处理器中运行时,由于不同内存模型下硬件所支持的指令语义不同,因此可能会导致多线程关联的程序中并行运行的线程在执行用于访存的读写指令时乱序,从而出现弱内存序的问题。这样的话,该程序所要实现的功能可能会出现逻辑上的错误,从而导致该程序运行后输出的结果不准确。
[0004]对于上述弱内存序问题,通常可以在访存指令之前插入内存屏障指令,以保证该两条访存指令能够按照程序要求的顺序执行。然而,对于程序中需要插入内存屏障指令的位置的确定,一般是通过开发人员基于经验确定的。当程序的规模较大时,该方法的效率极为低下,影响处理器所在系统的处理效率。因此,如何提供一种高效的弱内存序检测修复方法成为亟待解决的技术问题。

技术实现思路

[0005]本申请提供了一种弱内存序的检测修复方法、系统及相关设备,用于解决弱内存序检测修复方法效率低、影响处理器所在系统处理效率的问题。
[0006]第一方面,提供了一种弱内存序的检测修复方法,该方法包括以下步骤:提供程序输入接口,程序输入接口用于获取用户上传的程序,对程序进行弱内存序检测,输出检测结果,检测结果包括需要修复的代码在程序中的位置信息,根据位置信息,输出程序进行弱内存序修复的范围信息,范围信息对应的代码至少包括需要修复的代码,最后对范围信息对应的代码进行弱内存序修复。
[0007]具体实现中,该程序输入接口可以是GUI也可以是API本申请不作具体限定。上述用户上传的程序可包括至少一个程序文件,程序文件的数量为多个时,上述多个程序文件还可以包括多个文件类别,比如用户提供5个程序文件,其中3个程序文件属于类别1,剩余2个程序文件属于类别2;上述多个程序文件还可以属于不同的程序函数库(比如so库),比如用户提供45个程序文件,其中15个程序文件属于第一so库,剩余30个程序文件属于第二so库;上述多个程序文件还可以归属于不同的软件模块,比如用户提供150个程序文件,其中50个程序文件属于第一软件模块,剩余100个程序文件属于第二软件模块,应理解,上述举例用于说明,本申请不作具体限定。
[0008]实施第一方面描述的方法,通过对程序进行弱内存序检测,获得检测结果,并根据检测结果确定弱内存序修复的修复范围,然后针对修复范围对应的代码进行弱内存序的修复,可以减少参与弱内存序修复的程序数量,减少不必要的内存屏障指令的插入,从而提高修复后的多线程程序的运行性能。
[0009]在一种可能的实现方式中,可以获取用户输入的修复粒度,根据修复粒度对上述需要修复的代码的位置进行扩大,获得范围信息,使得扩大后的范围信息对应的代码至少包括上述需要修复的代码。
[0010]可选地,该范围信息可以包括文件列表,该文件列表可包括待修复文件的文件名称和/或文件路径,还可包括其他供修复单元获取上述待修复文件的获取方式,本申请不作具体限定。
[0011]在一些可选的实现方式中,若修复单元无法根据文件列表获取待修复文件,该范围信息还可包括待修复文件本身,本申请不对此进行限定。
[0012]具体实现中,该待修复文件可以是用户上传的程序,也可以是程序检测单元生成的检测结果中需要修复的代码所在的程序文件,本申请不作具体限定。
[0013]可选地,该范围信息还可以包括需要修复的代码所使用的函数。修复单元可以根据文件列表和函数,对文件列表中每个程序文件内使用该函数的代码段进行弱内存序修复。具体实现中,该函数可以是根据上述检测结果中需要修复的代码所使用的函数,该函数的数量可以为一个或者多个,在函数的数量为多个时,函数可以用函数列表的形式记录。
[0014]可选地,该范围信息可以包括需要修复的代码所在的类信息,该类信息可以是上述检测结果中需要修复的代码所在的程序文件对应的类,修复单元可以根据文件列表和类信息,对文件列表中属于该类的程序文件进行弱内存序修复。
[0015]可选地,该范围信息可以包括需要修复的代码所属的库信息,该库信息可以是上述需要修复的代码所使用的程序函数库的相关信息。修复单元可以根据该文件列表和库信息,对文件列表中使用该库信息对应的程序函数库的程序文件进行弱内存序修复。
[0016]可选地,该范围信息可以包括需要修复的代码所属的软件模块信息,该软件模块信息可以是上述需要修复的代码所在的软件模块的相关信息。修复单元可以根据该文件列表和软件模块信息,对文件列表中关于该文件模块的程序文件进行弱内存序修复。
[0017]具体实现中,可以将上述范围信息通过上述显示界面显示给用户,用户可以对范围信息进行修改,应理解,允许用户对范围信息进行修改,可以使得本申请提供的方法的应用更加灵活。
[0018]具体实现中,还可以将范围信息的几种类型作为多个选项通过上述显示界面显示给用户,用户可根据业务需求确定所需的修复粒度,选择合适的范围信息进行弱内存序的修复,比如用户需要快速修复,那么可以选择范围信息包括文件列表和软件模块信息,比如用户需要精准详细地对用户上传的代码进行弱内存序的修复,那么可以根据修复的代码所在的软件模块确定范围信息;如果用户需要快速地对用户上传的代码进行弱内存序的修复,那么可以根据需要修复的代码所使用的函数,对该文件内使用该函数的全部代码段进行修复,具体可根据用户的需求确定范围信息,本申请不对此进行限定。
[0019]实施上述实现方式,将检测结果中需要修复的代码的位置进行扩大,对扩大的范围信息对应的代码进行修复,可以将弱内存序检测过程中漏检的代码位置也进行修复,提
高程序进行弱内存序修复的准确率。
[0020]在另一种可能的实现方式中,可以根据查询参数和程序,获得检测结果。其中,查询参数用于指示程序的两条操作发生重排序的最大间隔。具体地,可以根据查询参数、程序的第一线程中的第一操作与第一线程中的第二操作的间隔,和程序的第二线程中的第三操作与第二线程中的第四操作的间隔,获得检测结果。
[0021]具体实现中,第一操作和第三操作可以为对同一变量进行的一对读写操作,第二操作和第四操作可以为对同一变量进行的一对读写操作,第一操作和第二操作可以为对不同变量进行的操作,第三操作和第四操作可以为对不同变量进行的操作。例如,该变量可以为共享变量。一对操作可以为:第一操作为对第一变量的读本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种弱内存序的检测修复方法,其特征在于,所述方法包括:提供程序输入接口,所述程序输入接口用于获取用户上传的程序;对所述程序进行弱内存序检测,输出检测结果,所述检测结果包括需要修复的代码在所述程序中的位置信息;根据所述位置信息,输出所述程序进行弱内存序修复的范围信息,所述范围信息对应的代码至少包括所述需要修复的代码;对所述范围信息对应的代码进行弱内存序修复。2.根据权利要求1所述的方法,其特征在于,所述根据所述位置信息,输出所述程序进行弱内存序修复的范围信息包括:获取用户输入的修复粒度,根据所述用户输入的修复粒度对所述需要修复的代码在所述程序中的位置信息进行扩大,获得所述范围信息。3.根据权利要求1或2所述的方法,其特征在于,所述范围信息包括文件列表,所述文件列表包括所述程序的文件名称、文件路径、文件本身中的一项或者多项,所述文件列表对应的程序文件是所述需要修复的代码所在的程序文件,所述对所述范围信息对应的代码进行弱内存序修复包括:对所述文件列表对应的程序文件进行弱内存序修复。4.根据权利要求1至3任一权利要求所述的方法,其特征在于,所述范围信息包括函数,所述函数是所述需要修复的代码使用的函数,所述对所述范围信息对应的代码进行弱内存序修复包括:对所述程序中使用所述函数的代码段进行弱内存序修复。5.根据权利要求1至3任一权利要求所述的方法,其特征在于,所述范围信息包括类信息,所述类信息是所述需要修复的代码所在的程序文件所属的文件类的信息,所述对所述范围信息对应的代码进行弱内存序修复包括:对所述程序中属于所述文件类的程序文件进行弱内存序修复。6.根据权利要求1至3任一权利要求所述的方法,其特征在于,所述范围信息包括库信息,所述库信息是需要修复的代码所在的程序文件所使用的函数库的信息,所述对所述范围信息对应的代码进行弱内存序修复包括:对所述程序中使用所述函数库的程序文件进行弱内存序修复。7.根据权利要求1至3任一权利要求所述的方法,其特征在于,所述范围信息包括软件模块信息,所述软件模块信息是所述需要修复的代码所在的程序文件所属的软件模块的信息,所述对所述范围信息对应的代码进行弱内存序修复包括:对所述程序中属于所述软件模块的程序文件进行弱内存序修复。8.根据权利要求1至7任一权利要求所述的方法,其特征在于,所述对所述范围信息对应的代码进行弱内存序修复包括:根据所述范围信息确定所述程序中的待修复代码;基于优化策略对所述待修复代码进行弱内存序修复,其中,所述优化策略用于指示在所述待修复代码中插入内存屏障指令,所述内存屏障指令位于非弱内存序安全指令之前。9.一种弱内存序的检测修复系统,其特征在于,所述系统包括:接口提供单元,用于提供程序输入接口,所述程序输入接口用于获取用户上传的程序;
程序检测单元,...

【专利技术属性】
技术研发人员:侯凯张汝涛
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1