System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 修复弱内存序问题的方法及装置制造方法及图纸_技高网

修复弱内存序问题的方法及装置制造方法及图纸

技术编号:44247910 阅读:10 留言:0更新日期:2025-02-11 13:44
本申请公开了一种修复弱内存序问题的方法及装置,涉及计算机技术领域,该方法能够在多线程程序的编译阶段,自动修复该程序中的弱内存序问题。该方法包括:在待修复代码中确定读写指令集;对读写指令集中的指令进行分类,以确定目标指令;在目标指令的前一条读写指令和目标指令之间插入内存屏障指令;其中,读写指令集包括待修复代码中的读指令和/或写指令,读写指令集中的指令用于访问内存。

【技术实现步骤摘要】

本申请涉及计算机,尤其涉及一种修复弱内存序问题的方法及装置


技术介绍

1、当基于非弱内存模型开发的多线程程序,在采用弱内存模型(weak memorymodel)的计算机设备中运行时,由于不同内存模型下硬件所支持的指令语义不同,因此可能会导致该程序中并行运行的线程在执行用于访存的读写指令时乱序,从而出现弱内存序的问题。

2、例如,基于强内存模型(strong memory model)开发的多线程程序,在采用弱内存模型的计算机设备中运行时,该程序中并行运行的线程执行用于访存的读写指令时,即可能出现弱内存序的问题。这样的话,该程序所要实现的功能可能会出现逻辑上的错误,从而导致该程序运行后输出的结果不准确。

3、基于此,如何修复多线程程序弱内存序的问题,是亟待解决的技术问题。


技术实现思路

1、本申请提供了一种修复弱内存序问题的方法及装置,该方法能够在多线程程序的编译阶段,自动修复该程序中的弱内存序问题。

2、为达上述目的,本申请提供如下技术方案:

3、第一方面,本申请提供一种修复弱内存序问题的方法,该方法包括:在待修复代码中确定读写指令集。对该读写指令集中的指令进行分类,以确定目标指令。在目标指令的前一条读写指令和目标指令之间插入内存屏障指令。其中,该读写指令集包括待修复代码中的读指令和/或写指令,该读写指令集中的指令用于访问内存。

4、通过本申请的提供方法,可以通过对待修复指令进行分类,以确定出目标指令。然后,在目标指令前插入内存屏障指令,以使目标指令能够按照程序本身要求的顺序去执行,从而实现了自动的修复多线程程序的弱内存序的问题。通过本申请实施例提供的方法可以自动的修复多线程程序的弱内存序问题,大大提高了程序弱内存序问题修复的效率。

5、在一种可能的设计方式中,上述“对读写指令集中的指令进行分类,以确定目标指令”具体包括:在该读写指令集中确定第一类指令;根据该第一类指令,确定目标指令。其中,该第一类指令中的指令是弱内存序安全的指令。目标指令是上述读写指令集中、除该第一类指令之外的指令。

6、在另一种可能的设计方式中,上述“根据第一类指令,确定目标指令”具体包括:基于第一类指令,确定目标指令集;基于优化策略,在该目标指令集中确定目标指令。其中,该目标指令集包括上述读写指令集中,除该第一类指令之外的全部指令。该优化策略用于指示需要修复弱内存序问题的读写指令类型。

7、在另一种可能的设计方式中,上述优化策略包括以下策略中的至少一种:第一策略、将目标指令集中属于白名单中的读写指令,确定为目标指令;或者,将目标指令集中,除黑名单中的读写指令之外的读写指令,确定为目标指令。第二策略、将目标指令集中具有上下文依赖关系的读写指令中,仅作为依赖的读写指令,确定为目标指令。第三策略、将目标指令集中除与专用寄存器有关的读写指令之外的读写指令,确定为目标指令。第四策略、将目标指令集中除与输入输出参数有关的读写指令之外的读写指令,确定为目标指令。

8、在另一种可能的设计方式中,上述的第一类指令包括:读写线程间非共享变量的指令、或具有保序语义的读写指令中的至少一种。

9、通过该几种可能的设计,可以准确识别出安全的、不存在弱内存序问题的第一类指令,并通过排除第一类指令,从而确定目标指令。通过该方法,可以快速的排除掉待修复代码中无需修复的读写指令,从而可以最大限度的减少不必要的内存屏障指令的插入,从而提高了修复后的多线程程序的运行性能。

10、另外,通过优化策略,可以进一步的减少不必要的内存屏障指令的插入,从而进一步的提高了修复后的多线程程序的运行性能。

11、在另一种可能的设计方式中,上述“对该读写指令集中的指令进行分类,以确定目标指令”,具体包括:基于上述的优化策略,对该读写指令集中的指令进行分类,以确定目标指令。其中,该优化策略用于指示需要修复弱内存序问题的读写指令类型。

12、通过该可能的实现方式,本申请可以通过优化策略,在读写指令集中确定出需要插入内存屏障指令的读写指令,这样,即可减少不必要的内存屏障指令的插入,从而提高了修复后的多线程程序的运行性能。

13、在另一种可能的设计方式中,上述方法还包括:获取用户配置的第五策略。将该第五策略添加至上述优化策略中。

14、这里,第五策略可以是用户自定义配置的策略。这样的话,通过该可能的设计,本申请允许通过用户自定义配置的策略对待修复代码进行修复,从而提高了本申请应用的灵活性。

15、在另一种可能的设计方式中,在上述“确定所述目标指令”之前,上述方法还包括:接收指示信息,该指示信息用于指示用户从待选优化策略中选择所述优化策略。

16、这里,该待选优化策略可以是修复装置预置的优化策略。这样,通过该可能的设计方式,用户可以待选优化策略中自由选择用于修复待修复代码的优化策略,从而提高了本申请应用的灵活性。

17、通过该可能的实现方式,可以使用户自定义配置优化策略,从而实现了本申请方法的灵活应用。

18、在另一种可能的设计方式中,上述“确定读写指令集”具体包括:对目标函数中的指令进行识别,以确定该读写指令集。其中,目标函数是上述待修复代码中的任意一个函数。

19、通过该可能的设计,本申请可以以函数为单位来识别并修复待修复代码中的弱内存序问题,从而本申请的方法可以应用于大规模的多线程程序的弱内存序问题的修复,进而提高了本申请方法的实用性。

20、在另一种可能的设计方式中,上述待修复代码是多线程程序的源代码经编译器编译得到的中间语言。

21、在另一种可能的设计方式中,上述待修复代码是多线程程序的源代码经编译器编译得到的汇编代码。

22、通过该两种可能的设计,本申请提供的修复弱内存序问题的方法,可以和多线程程序的源代码编译同步执行,从而实现了自动的对该多线程程序的弱内存序问题的修复,进而提高了修复该多线程程序的弱内存序问题的效率。

23、第二方面,本申请提供了一种修复弱内存序问题的装置。

24、在一种可能的设计方式中,该装置用于执行上述第一方面提供的任一种方法。本申请可以根据上述第一方面提供的任一种方法,对该装置进行功能模块的划分。例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。示例性的,本申请可以按照功能将该装置划分为确定单元和插入单元等。上述划分的各个功能模块执行的可能的技术方案和有益效果的描述均可以参考上述第一方面或其相应的可能的设计提供的技术方案,此处不再赘述。

25、在另一种可能的设计中,该修复弱内存序问题的装置包括:存储器和一个或多个处理器,存储器和处理器耦合。存储器用于存储计算机指令,处理器用于调用该计算机指令,以执行如第一方面及其任一种可能的设计方式提供的任一种方法。

26、第三方面,本申请提供了一种计算机可读存储介质,如计本文档来自技高网...

【技术保护点】

1.一种修复弱内存序问题的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述对所述读写指令集中的指令进行分类,以确定目标指令,具体包括:

3.根据权利要求2所述的方法,其特征在于,所述根据所述第一类指令,确定所述目标指令,具体包括:

4.根据权利要求1所述的方法,其特征在于,所述对所述读写指令集中的指令进行分类,以确定目标指令,具体包括:

5.根据权利要求3或4所述的方法,其特征在于,所述优化策略包括以下策略中的至少一种:

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:

7.根据权利要求3-6中任一项所述的方法,其特征在于,在所述确定所述目标指令之前,所述方法还包括:

8.根据权利要求2、3、5-7中任一项所述的方法,其特征在于,所述第一类指令包括读写线程间非共享变量的指令、或具有保序语义的读写指令中的至少一种。

9.根据权利要求1-8中任一项所述的方法,其特征在于,所述确定读写指令集,具体包括:

10.根据权利要求1-9中任一项所述的方法,其特征在于,

11.一种修复弱内存序问题的装置,其特征在于,所述装置包括:

12.根据权利要求11所述的装置,其特征在于,

13.根据权利要求12所述的装置,其特征在于,

14.根据权利要求11所述的装置,其特征在于,所述确定单元具体用于:

15.根据权利要求13或14所述的装置,其特征在于,所述优化策略包括以下策略中的至少一种:

16.根据权利要求15所述的装置,其特征在于,所述装置还包括:

17.根据权利要求13-16中任一项所述的装置,其特征在于,所述装置还包括:

18.根据权利要求12、13、15-17中任一项所述的装置,其特征在于,所述第一类指令包括读写线程间非共享变量的指令、或具有保序语义的读写指令中的至少一种。

19.根据权利要求11-18中任一项所述的装置,其特征在于,所述装置还包括:

20.根据权利要求11-19中任一项所述的装置,其特征在于,

21.一种修复弱内存序问题的装置,其特征在于,所述装置包括:存储器和一个或多个处理器,所述存储器用于存储计算机指令,所述处理器用于调用所述计算机指令,以执行如权利要求1-10中任一项所述的方法。

22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行权利要求1-10中任一项所述的方法。

...

【技术特征摘要】

1.一种修复弱内存序问题的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述对所述读写指令集中的指令进行分类,以确定目标指令,具体包括:

3.根据权利要求2所述的方法,其特征在于,所述根据所述第一类指令,确定所述目标指令,具体包括:

4.根据权利要求1所述的方法,其特征在于,所述对所述读写指令集中的指令进行分类,以确定目标指令,具体包括:

5.根据权利要求3或4所述的方法,其特征在于,所述优化策略包括以下策略中的至少一种:

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:

7.根据权利要求3-6中任一项所述的方法,其特征在于,在所述确定所述目标指令之前,所述方法还包括:

8.根据权利要求2、3、5-7中任一项所述的方法,其特征在于,所述第一类指令包括读写线程间非共享变量的指令、或具有保序语义的读写指令中的至少一种。

9.根据权利要求1-8中任一项所述的方法,其特征在于,所述确定读写指令集,具体包括:

10.根据权利要求1-9中任一项所述的方法,其特征在于,

11.一种修复弱内存序问题的装置,其特征在于,所述装置包括:

12.根据权利要求11所述的装置,其特征在...

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

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

1