一种硬件内存序架构下的代码处理方法及相应装置制造方法及图纸

技术编号:36649731 阅读:16 留言:0更新日期:2023-02-18 13:11
本申请公开了一种硬件内存序架构下的代码处理方法,应用于计算机系统,尤其适用于在不同的硬件内存序架构下迁移代码的场景。该方法包括获取编译流程中的第一文件,第一文件与源文件关联;将第一文件的目标代码中的volatile内存访问代码转换为atomic内存访问代码,以得到第二文件,目标代码为与并发控制相关的内存访问代码;对第二文件进行编译处理,以得到适用于目标架构的执行文件,目标架构为强内存序架构或弱内存序架构。本申请提供的方案可以使代码迁移后的执行代码与编写代码保持一致,从而减少了代码运行时出现挂死或死锁等非预期行为。死锁等非预期行为。死锁等非预期行为。

【技术实现步骤摘要】
一种硬件内存序架构下的代码处理方法及相应装置


[0001]本申请涉及计算机
,具体涉及一种硬件内存序架构下的代码处理方法及相应装置。

技术介绍

[0002]处理器在调用线程操作内存时,在一些内存序架构下,实际执行的代码顺序与代码编写顺序一致,不会出现对内存的访问顺序进行重排的情况。而在一些内存序架构下,如一些弱内存序架构(如:高级精简指令集机器架构(advanced RISC machine,ARM)、基于精简指令集的第五代指令架构(reduced instruction set computing five,RISC

V)、基于精简指令集的性能优化增强架构(performance optimization with enhanced RISC,POWER))下,处理器通常会根据执行的情况对内存的访问顺序进行重排,重排可能会导致处理器实际执行的代码顺序与代码的编写顺序不一致,出现非预期行为。
[0003]在代码迁移的场景中,将在一种内存序架构下正常运行的代码迁移到另外一种内存序架构下,由于处理器对内存的访问重排,导致迁移后的代码在新的内存序架构下运行大概率会出现问题,产生非预期行为,尤其是与并发控制相关的代码,在代码迁移后,出错的概率会更大。

技术实现思路

[0004]本申请提供一种硬件内存序架构下的代码处理方法,用于减少代码在硬件内存序架构下运行的非预期行为。本申请实施例还提供了相应设备、计算机可读存储介质及计算机程序产品等。
[0005]本申请第一方面提供一种硬件内存序架构下的代码处理方法,应用于计算机系统,包括:获取编译流程中的第一文件,第一文件与源文件关联;将第一文件的目标代码中的volatile内存访问代码转换为atomic内存访问代码,以得到第二文件,目标代码为与并发控制相关的内存访问代码;对第二文件进行编译处理,以得到适用于目标架构的执行文件,目标架构为强内存序架构或弱内存序架构。
[0006]本申请中,该代码处理方法应用于计算机设备,该计算机设备可以是服务器、终端设备或虚拟机(virtual machine,VM)。
[0007]本申请中,硬件内存序架构通常包括强内存序架构和弱内存序架构,弱内存序架构是相对于强内存序架构来说的,弱内存序架构和强内存序架构都是指令集架构,强内存序架构可以包括x86架构,弱内存序架构可以包括高级精简指令集机器架构(advanced RISC machine,ARM)架构、基于精简指令集的第五代指令架构(reduced instruction set computing five,RISC

V)或基于精简指令集的性能优化增强架构(performance optimization with enhanced RISC,POWER)。
[0008]本申请所提供的代码处理方法可以适用于代码迁移的场景,代码迁移的场景包括两种,一种是源文件从源架构迁移到目标架构后,由目标架构执行本申请的代码处理过程
得到适用于目标架构的执行文件;另一种是由源架构对源文件执行本申请的代码处理过程得到适用于目标架构的执行文件,然后将执行文件发送给目标架构。
[0009]本申请所提供的代码处理方法还可以使用于代码修复的场景,即源文件包括的源代码可能存在错误,由运行该源文件的架构执行本申请的代码处理过程进行修复的场景。
[0010]本申请中,源架构可以为强内存序架构或弱内存序架构,目标架构可以为强内存序架构或弱内存序架构。如:源架构为强内存序架构(X86),目标架构为弱内存序架构(ARM);或者,源架构为弱内存序架构(ARM),目标架构为强内存序架构(X86);或者,源架构为强内存序架构(X86),目标架构为强内存序架构(可扩充处理器架构第九版(Scalable Processor ARChitecture version9,SPARC V9));或者,源架构为弱内存序架构(ARM),目标架构为弱内存序架构(RISC

V)。
[0011]本申请中,该代码处理的方法可以在编译流程中执行,由处理器运行编译器的代码来完成相应的代码处理过程。
[0012]本申请中,第一文件可以是源文件,也可以是编译流程中的中间表示(intermediate representation,IR)。
[0013]本申请中,中间表示指编译器对于源程序进行扫描后生成的内部表示,代表源程序的语义结构,编译器中端的各个阶段都在IR上进行分析或优化变换,因而IR对编译器的整体结构、效率和健壮性都有着极大的影响。
[0014]本申请中,源文件可以为C/C++源文件。
[0015]本申请中,与并发控制相关的内存访问代码可以理解为是除驱动(driver)之外的代码。
[0016]本申请中,Volatile是C/C++中的一种关键字,该关键字的作用是阻止编译器优化,在处理器运行代码时,volatile memory access的顺序不改变,但其他的memory access的顺序可能改变,无法使代码执行顺序与代码编写顺序保持一致。
[0017]本申请中,atomic是C/C++版本(C11/C++11)中atomic关键字,声明变量时加上atomic关键字,可以实现对整型(int)、字符型(char)、布尔型(bool)等数据结构的原子性封装。访问被声明为atomic的变量只能通过原子操作进行。在不加内存访问顺序限定关系(如:获得acquire,释放release)的默认情况下,atomic memory access表示顺序一致性的原子性内存访问。
[0018]由上述第一方面可知,在编译流程中可以将并发控制相关的内存访问代码中的volatile内存访问代码转换为atomic内存访问代码,因为atomic内存访问可以使处理器执行程序时的执行代码与编写代码保持一致,从而减少了代码运行时出现挂死或死锁等非预期行为。
[0019]在第一方面的一种可能的实现方式中,该方法还包括:删除目标代码中单独的内存屏障,单独的内存屏障为目标代码中单独的一条内嵌汇编指令,且单独的一条内嵌汇编指令是内存屏障指令。
[0020]该种可能的实现方式中,删除单独的内存屏障,可以进一步提升代码性能。
[0021]在第一方面的一种可能的实现方式中,第一文件为包含源代码的源文件,源文件包括适用于源架构的内嵌汇编代码,该方法还包括:将适用于源架构的内嵌汇编代码转换为能运行于所述目标架构的内嵌汇编代码或编译器内建函数,所述源架构和所述目标架构
为两个不同的硬件内存序架构。
[0022]该种可能的实现方式中,编译器内建函数(compiler builtins)是可以适用于多种硬件架构的函数。在代码迁移场景中,适用于源架构的内嵌汇编代码通常不适用于目标架构,通过将适用于源架构的内嵌汇编代码自动转换为能运行于目标架构的内嵌汇编代码或编译器内建函数,可以提高代码转换效率,从而提高代码本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种硬件内存序架构下的代码处理方法,应用于计算机系统,其特征在于,包括:获取编译流程中的第一文件,所述第一文件与源文件关联;将所述第一文件的目标代码中的volatile内存访问代码转换为原子性的atomic内存访问代码,以得到第二文件,所述目标代码为与并发控制相关的内存访问代码;对所述第二文件进行编译处理,以得到适用于目标架构的执行文件,所述目标架构为强内存序架构或弱内存序架构。2.根据权利要求1所述的代码处理方法,其特征在于,所述方法还包括:删除所述目标代码中单独的内存屏障,所述单独的内存屏障为所述目标代码中单独的一条内嵌汇编指令,且所述单独的一条内嵌汇编指令是内存屏障指令。3.根据权利要求1或2所述的代码处理方法,其特征在于,所述第一文件为包含源代码的源文件,所述源文件包括适用于源架构的内嵌汇编代码,所述方法还包括:将适用于源架构的内嵌汇编代码转换为能运行于所述目标架构的内嵌汇编代码或编译器内建函数,所述源架构和所述目标架构为两个不同的硬件内存序架构。4.根据权利要求1或2所述的代码处理方法,其特征在于,所述第一文件为第一中间表示,所述第二文件为第二中间表示,所述获取编译流程中的第一文件,包括:获取与源架构对应的源文件,所述源文件中包括适用于所述源架构的内嵌汇编代码;将适用于所述源架构的内嵌汇编代码转换为能运行于所述目标架构的内嵌汇编代码或编译器内建函数,以得到中间文件,所述源架构和所述目标架构为两个不同的硬件内存序架构;将所述中间文件转换为所述第一中间表示。5.根据权利要求3或4所述的代码处理方法,其特征在于,所述将适用于所述源架构的内嵌汇编代码转换为能运行于所述目标架构的内嵌汇编代码或编译器内建函数,包括:将所述适用于所述源架构的内嵌汇编代码转换为抽象语法树;按照所述抽象语法树中每个分支的语义,将所述每个分支转换为适用于所述目标架构的内嵌汇编代码或编译器内建函数。6.根据权利要求1

5任一项所述的代码处理方法,其特征在于,所述源文件为C/C++源文件。7.根据权利要求3

5任一项所述的代码处理方法,其特征在于,所述源架构为强内存序架构,所述目标架构为弱内存序架构;或者,所述源架构为弱内存序架构,所述目标架构为强内存序架构;或者,所述源架构为强内存序架构,所述目标架构为强内存序架构;或者,所述源架构为弱内存序架构,所述目标架构为弱内存序架构。8.一种硬件内存序架构下的代码处理装置,其特征在于,包括:获取单元,用于获取编译流程中的第一文件,所述第一文件与源文件关联;第一处理...

【专利技术属性】
技术研发人员:陈更付明雷继棠
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1