【技术实现步骤摘要】
修复弱内存序问题的方法及装置
[0001]本申请涉及计算机
,尤其涉及一种修复弱内存序问题的方法及装置。
技术介绍
[0002]当基于非弱内存模型开发的多线程程序,在采用弱内存模型(weak memory model)的计算机设备中运行时,由于不同内存模型下硬件所支持的指令语义不同,因此可能会导致该程序中并行运行的线程在执行用于访存的读写指令时乱序,从而出现弱内存序的问题。
[0003]例如,基于强内存模型(strong memory model)开发的多线程程序,在采用弱内存模型的计算机设备中运行时,该程序中并行运行的线程执行用于访存的读写指令时,即可能出现弱内存序的问题。这样的话,该程序所要实现的功能可能会出现逻辑上的错误,从而导致该程序运行后输出的结果不准确。
[0004]基于此,如何修复多线程程序弱内存序的问题,是亟待解决的技术问题。
技术实现思路
[0005]本申请提供了一种修复弱内存序问题的方法及装置,该方法能够在多线程程序的编译阶段,自动修复该程序中的弱内存序问题。 >[0006]为达上本文档来自技高网...
【技术保护点】
【技术特征摘要】
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.一种修复弱内存序问题的装置,其特征在于,所述装置包括:确定单元,用于在待修复代码中确定读写指令集,所述读写指令集包括所述待修复代码中的读指令和/或写指令,所述读写指令集中的指令用于访问内存;以及,用于对所述读写指令集中的指令进行分类,...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。