CN117055891A - 基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法 - Google Patents
基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法 Download PDFInfo
- Publication number
- CN117055891A CN117055891A CN202310813811.2A CN202310813811A CN117055891A CN 117055891 A CN117055891 A CN 117055891A CN 202310813811 A CN202310813811 A CN 202310813811A CN 117055891 A CN117055891 A CN 117055891A
- Authority
- CN
- China
- Prior art keywords
- function
- input
- instruction
- variable name
- result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 238000006243 chemical reaction Methods 0.000 claims abstract description 4
- 230000006870 function Effects 0.000 claims description 118
- 238000012545 processing Methods 0.000 claims description 3
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 238000012546 transfer Methods 0.000 claims description 3
- 238000012905 input function Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000012634 fragment Substances 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,包括以下步骤:步骤1:获取模板函数中可能为函数输入、结果数据相关的变量名;步骤2:获取模板函数中所有函数调用的代码片段指令序列且把模板函数的参数按输入、结果用途分类,并存储到输入、结果的集合中,并从两个集合中找出所有变量名的定值或使用的行号;步骤3:分析模板函数本身的参数,用户输入期望转化后目标函数的参数信息描述;步骤4:根据用户输入的期望参数描述从输入、结果集合中得到一个输入或结果变量名的所有行号,在该行号后生成新指令并插入。本发明具有易实现、可实现以输入的函数为模板函数自动生成新函数的代码框架的优点。
Description
技术领域
本发明主要涉及到代码的编译优化方法,特指基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法。
背景技术
随着科学技术的发展进步、市场不断成熟,和人们对软件或硬件的功能需求越来越多,所以相应的工程量也会变得越来越庞大复杂。一个成熟的软件工程包含的代码量通常非常庞大,且可能需要开发的程序比较类似,就导致工程技术人员必须花费大量精力进行程序的开发,这就在工程应用中造成了巨大的资源浪费。目前,编译器对基于模板函数指令序列的目标函数多数据块操作框架代码自动生成技术较少,这类方法能够较好地处理开发过程中代码量庞大,减少重复的编码,保持代码风格统一等问题。
近年来,现有的代码生成器不能满足于需求,许多代码生成器都是借助一个模型来进行代码生成,但对于新的编码方式没有一个相对合适的模型进行代码生成,所以需要一种新的方式来实现模板函数指令序列的目标函数多数据块操作框架代码自动生成方法。
发明内容
本发明为了解决上述技术问题,提出本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法。
本发明的技术方案为:包括以下步骤,
步骤1,由于输入数据块的首地址及对该数据块的访问的步长等信息是确定的,且所有读操作和写操作指令所对应的目标数据块都是一个变量名,因此可以遍历模板函数中的每条指令,获取所有可能为输入、结果数据相关的首地址变量名,存放于集合fun_regvar中,其中需要把操作目标存储空间的地址变量名名称单独存放到addr集合;
步骤2,获取模板函数中所有函数调用的代码片段指令序列且把模板函数参数按输入、结果用途分类,并按分类存储到输入、结果的集合中,从两个集合中找出所有变量名的所有定值或使用的行号;
步骤3,分析模板函数本身的参数,用户输入期望转化后目标函数的参数信息描述;
步骤4,根据用户输入的期望参数描述从输入、结果集合中得到一组输入或结果用途相关的变量名的所有行号,在行号后一行生成新指令并插入。
2.根据权利要求1所述的本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,其特征是,所述步骤2的具体方式包括如下步骤,
步骤2.1,定义一个函数调用类,包含一个函数调用输入集合(存储数据组类)、一个函数调用结果集合(存储数据组类),调用代码片段的起始行号,调用代码片段的结束行号和一个调用类型(传输输入信息的函数调用类型置为true,传输结果信息的函数调用类型置为false);
步骤2.2,遍历模板函数中的所有指令序列,遇到函数调用代码片段的起始行号,定义一个数据组类包含两个地址变量名存储这一次函数调用代码片段中所识别到的原数据块和目标数据块的首地址变量名,包含一个链表存储对该数据块访问的步长等信息,通过首地址变量名是否存储在addr集合中来判断该函数调用代码片段是输入用途参数还是结果用途参数;
步骤2.3,从模板函数的指令序列中找出addr、输入、结果三个集合中的所有变量名,分别为每个变量名初始化一个集合(ud_arry)来存储该变量名被定值和使用的行号,通过键值对绑定变量名与对应变量名的ud_arry。
3.根据权利要求1所述的本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,其特征是,所述步骤4的具体方式包括如下步骤,
步骤4.1,根据用户输入的期望参数个数描述与模板函数分析出来的参数个数进行对比,用户期望的输入用途(结果用途)的参数个数大,则计算出需要增加个输入(结果)参数数据;
步骤4.2,从输入(结果)集合中取出任意一个输入(结果)数据组,并初始化一个存储指令的指令链表,下文中所有插入指令语句暂时保存于该链表中,初始化一个参照位置链表用来保存各指令语句插入的位置;
步骤4.3,初始化一个新的数据组(dg_i),从分析出来的输入集合中获取一个模板函数的输入(结果)数据组的目标存储空间地址变量名,通过地址变量名作为key获得该变量名的ud_arry并遍历所有行号,如果该行是地址变量名的定值行,在该指令后生成一条地址加法指令,新生成的目标地址和原目标存储空间地址之间的地址差为(空闲地址/总输入结果个数)*(i+1),如果当前行是使用行,生成的新指令为当前行的指令与加上后缀的原变量名与加上后缀的目标变量名,将生成的新指令存储到指令链表中,该行号存储到参照位置链表,将新的加后缀的目标变量名存储到dg_i;
步骤4.4,从步骤4.3的输入(结果)数据组获取包含其他信息的一个链表,遍历该链表里的每一个变量名,通过变量名作为key获得该变量名对应的ud_arry,并将该变量名加上与步骤4.3相同的后缀作为新的输入用途(结果用途)的其它信息变量名(t_i),并将新变量名t_i存储到dg_i中;
步骤4.5,通过ud_arry找到模板函数中操作该变量名的所有行号并遍历,当前行是该变量名的定值行,则当前行生成新的指令为与当前行相同的指令、原变量名,目标变量名改为t_i;如果是该变量名的使用行,则当前行生成新的指令为和当前行相同的指令,原变量名改为原变量名加上后缀与原目标变量名加上后缀,将生成的新指令存储到指令链表中,该行号存储到参照位置链表,跳转到步骤4.4执行下一个变量名处理;
步骤4.6,从函数调用类中找出该模板函数的输入数据组的函数调用代码片段的结束行号,在结束行号的下一行通过传输函数的固定模板生成新的函数调用指令序列,并按新数据组dg_i中包含的信息传到约定的物理寄存器中,将生成的新指令存储到指令链表中,该行号存储到参照位置链表;
步骤4.7,通过记录的指令链表对其行号进行排序,从行号最小的开始插入指令完成基于模板函数指令序列的目标函数多数据块操作框架代码自动生成。
与现有技术相比,本发明的有益效果是:
本发明利用编译器技术基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,能保证较高的编程效率,具有可靠性高、准确性强等优点。同时在大型工程开发的应用及普及上有着广泛的市场前景。
附图说明
图1为本发明的函数调用代码片段的获取流程示意图。
图2为本发明的新增输入或结果用途的地址信息指令示意图。
图3为本发明的新增输入或结果用途的其它信息指令示意图。
图4为本发明的整体流程示意图。
具体实施方式
现结合附图说明与实施例对本发明进一步说明。
步骤1,本发明的本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,以模板函数为一个输入用途一个结果用途自动生成为两个输入用途一个结果用途的框架代码为例,可以遍历模板函数中的指令序列,获取所有可能为输入、结果数据相关的首地址变量名,存放于集合fun_regvar中,其中需要把操作目标存储空间的地址变量名名称单独存放到addr集合;
步骤2,图1为本发明的函数调用代码片段的获取流程示意图,遍历模板函数中的指令序列,遇到约定的移动指令且以非立即数为源操作数时,该行号为函数调用代码片段的起始行号;
步骤2.1,初始化一个函数调用对象,包含一个函数调用输入集合(存储数据组对象)、一个函数调用结果集合(存储数据组对象),调用代码片段的起始行号,调用代码片段的结束行号和一个调用类型(传输输入信息的函数调用类型置为true,传输结果信息的函数调用类型置为false),将模板函数识别出来的所有函数调用对象存储在useFuntions集合中;
步骤2.2.1,遍历模板函数中的所有指令序列,遇到函数调用代码片段的起始行号,初始化一个数据组对象包含两个地址变量名存储这一次函数调用代码片段中所识别到的输入或结果数据块的首地址变量名和一个链表存储对该数据块访问的步长等信息;
步骤2.2.2,函数调用要求输入或结果数据块的首地址变量名传到约定的物理寄存器中,对该数据块访问的步长等信息通过普通移动指令传参;
步骤2.2.3,如果该次函数调用的首个地址变量名不存储在addr集合中,而是存储在fun_regvar集合中则可以判断该变量名为函数的输入首地址变量名,对该数据块访问的步长等信息也为输入用途的信息,将该数据组对象存储在输入集合中,也存储在函数调用对象的输入集合中,函数调用类型置为true;
步骤2.2.4,如果该次函数调用的首个地址变量名存储在addr集合中,而不存储在fun_regvar集合中则可以判断该变量名为函数的结果首地址变量名,对该数据块访问的步长等信息也为结果用途的信息,将该数据组对象存储在结果集合中,也存储在函数调用对象的结果集合中,函数调用类型置为false;
步骤2.2.5,函数调用代码片段以跳转指令结束;此时输入集合与输出集合各自含有一个输入用途的参数数据,一个输出用途的参数数据;
步骤2.3,从模板函数的指令序列中找出addr、输入、结果三个集合中的所有变量名,分别为每个变量名初始化一个集合(ud_arry)来存储该变量名被定值和使用的行号,通过键值对绑定该变量名与该ud_arry。
步骤3,通过上面分析模板函数本身的一个输入用途参数和一个结果用途参数,与用户输入期望转化后目标函数的两个输入用途参数和一个结果用途参数进行对比,用户期望的输入用途的参数个数大,则计算出需要增加一个输入用途的参数数据;
步骤4.1,图2,本发明的新增输入或结果用途的地址信息指令示意图。从输入集合中取出任意一个输入数据组,并初始化一个存储指令的指令链表,下文中所有插入指令语句暂时保存于该链表中,初始化一个参照位置链表用来保存各指令语句插入的位置;
步骤4.2.1,初始化一个新的数据组(dg_i)对象,从分析出来的输入集合中获取一个模板函数的输入数据组对象,输入数据组对象所对应的目标存储空间地址变量名,通过地址变量名作为key获得该变量名的ud_arry并遍历所有行号;
步骤4.2.2,如果行号在函数调用代码片段之间,则跳过,如果该行是目标存储空间地址变量名的定值行,在该指令后生成一条地址加法指令,新生成指令的目标地址和原目标存储空间地址之间的地址差为(空闲地址/总输入结果个数)*(i+1);
步骤4.2.3,如果当前行是目标存储空间地址变量名的使用行,生成的新指令为当前行的指令与加上后缀的原变量名与加上后缀的目标变量名;
步骤4.2.4,将生成的新指令存储到指令链表中,该行号存储到参照位置链表,将新的加后缀的目标变量名存储到dg_i;
步骤4.3,图3,本发明的新增输入或结果用途的其它信息指令示意图。从步骤4.2的输入数据组对象获取包含其他信息的一个链表,遍历该链表里的每一个变量名,通过变量名作为key,得到一个模板函数的指令序列中所有对该变量名定值或使用的行号的集合(ud_arry),并将该变量名加上与步骤4.2相同的后缀作为新的输入用途的其它信息变量名(t_i),并将新变量名t_i存储到dg_i中;
步骤4.4,通过ud_arry找到模板函数中操作该变量名的所有行号并遍历,如果当前行号在函数调用代码片段之间,则跳过当前行,如果是该变量名的定值行,则当前行生成新的指令为与当前行相同的指令、原变量名,目标变量名改为t_i;如果是该变量名的使用行,则当前行生成新的指令为和当前行相同的指令,原变量名改为原变量名加上后缀与原目标变量名加上后缀,将生成的新指令存储到指令链表中,该行号存储到参照位置链表,跳转到步骤4.3执行下一行处理;
步骤4.5,从useFuntions集合中找出该模板函数的输入数据组的函数调用代码片段的结束行号,在结束行号的下一行通过传输函数的固定模板生成新的函数调用指令序列,并按新数据组dg_i中包含的信息传到约定的物理寄存器中,将生成的新指令存储到指令链表中,该行号存储到参照位置链表;
步骤4.6,通过记录的指令链表对其参照位置链表的行号进行排序,从行号最小的开始插入指令,完成基于模板函数指令序列的目标函数多数据块操作框架代码自动生成。
Claims (3)
1.本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,其特征在于:包括以下步骤,
步骤1,由于输入数据块的首地址及对该数据块的访问的步长等信息是确定的,且所有读操作和写操作指令所对应的目标数据块都是一个变量名,因此可以遍历模板函数中的每条指令,获取所有可能为输入、结果数据相关的首地址变量名,存放于集合fun_regvar中,其中需要把操作目标存储空间的地址变量名名称单独存放到addr集合;
步骤2,获取模板函数中所有函数调用的代码片段指令序列且把模板函数参数按输入、结果用途分类,并按分类存储到输入、结果的集合中,从两个集合中找出所有变量名的所有定值或使用的行号;
步骤3,分析模板函数本身的参数,用户输入期望转化后目标函数的参数信息描述;
步骤4,根据用户输入的期望参数描述从输入、结果集合中得到一组输入或结果用途相关的变量名的所有行号,在行号后一行生成新指令并插入。
2.根据权利要求1所述的本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,其特征是,所述步骤2的具体方式包括如下步骤,
步骤2.1,定义一个函数调用类,包含一个函数调用输入集合(存储数据组类)、一个函数调用结果集合(存储数据组类),调用代码片段的起始行号,调用代码片段的结束行号和一个调用类型(传输输入信息的函数调用类型置为true,传输结果信息的函数调用类型置为false);
步骤2.2,遍历模板函数中的所有指令序列,遇到函数调用代码片段的起始行号,定义一个数据组类包含两个地址变量名存储这一次函数调用代码片段中所识别到的原数据块和目标数据块的首地址变量名,包含一个链表存储对该数据块访问的步长等信息,通过首地址变量名是否存储在addr集合中来判断该函数调用代码片段是输入用途参数还是结果用途参数;
步骤2.3,从模板函数的指令序列中找出addr、输入、结果三个集合中的所有变量名,分别为每个变量名初始化一个集合(ud_arry)来存储该变量名被定值和使用的行号,通过键值对绑定变量名与对应变量名的ud_arry。
3.根据权利要求1所述的本发明涉及基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法,其特征是,所述步骤4的具体方式包括如下步骤,
步骤4.1,根据用户输入的期望参数个数描述与模板函数分析出来的参数个数进行对比,用户期望的输入用途(结果用途)的参数个数大,则计算出需要增加个输入(结果)参数数据;
步骤4.2,从输入(结果)集合中取出任意一个输入(结果)数据组,并初始化一个存储指令的指令链表,下文中所有插入指令语句暂时保存于该链表中,初始化一个参照位置链表用来保存各指令语句插入的位置;
步骤4.3,初始化一个新的数据组(dg_i),从分析出来的输入集合中获取一个模板函数的输入(结果)数据组的目标存储空间地址变量名,通过地址变量名作为key获得该变量名的ud_arry并遍历所有行号,如果该行是地址变量名的定值行,在该指令后生成一条地址加法指令,新生成的目标地址和原目标存储空间地址之间的地址差为(空闲地址/总输入结果个数)*(i+1),如果当前行是使用行,生成的新指令为当前行的指令与加上后缀的原变量名与加上后缀的目标变量名,将生成的新指令存储到指令链表中,该行号存储到参照位置链表,将新的加后缀的目标变量名存储到dg_i;
步骤4.4,从步骤4.3的输入(结果)数据组获取包含其他信息的一个链表,遍历该链表里的每一个变量名,通过变量名作为key获得该变量名对应的ud_arry,并将该变量名加上与步骤4.3相同的后缀作为新的输入用途(结果用途)的其它信息变量名(t_i),并将新变量名t_i存储到dg_i中;
步骤4.5,通过ud_arry找到模板函数中操作该变量名的所有行号并遍历,当前行是该变量名的定值行,则当前行生成新的指令为与当前行相同的指令、原变量名,目标变量名改为t_i;如果是该变量名的使用行,则当前行生成新的指令为和当前行相同的指令,原变量名改为原变量名加上后缀与原目标变量名加上后缀,将生成的新指令存储到指令链表中,该行号存储到参照位置链表,跳转到步骤4.4执行下一个变量名处理;
步骤4.6,从函数调用类中找出该模板函数的输入数据组的函数调用代码片段的结束行号,在结束行号的下一行通过传输函数的固定模板生成新的函数调用指令序列,并按新数据组dg_i中包含的信息传到约定的物理寄存器中,将生成的新指令存储到指令链表中,该行号存储到参照位置链表;
步骤4.7,通过记录的指令链表对其行号进行排序,从行号最小的开始插入指令完成基于模板函数指令序列的目标函数多数据块操作框架代码自动生成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310813811.2A CN117055891A (zh) | 2023-07-04 | 2023-07-04 | 基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310813811.2A CN117055891A (zh) | 2023-07-04 | 2023-07-04 | 基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117055891A true CN117055891A (zh) | 2023-11-14 |
Family
ID=88659688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310813811.2A Pending CN117055891A (zh) | 2023-07-04 | 2023-07-04 | 基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117055891A (zh) |
-
2023
- 2023-07-04 CN CN202310813811.2A patent/CN117055891A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0838755A2 (en) | Binary program conversion apparatus and method | |
US20050289530A1 (en) | Scheduling of instructions in program compilation | |
US5937188A (en) | Instruction creation device | |
EP0428560A4 (en) | Machine process for translating programs in binary machine language into another binary machine language | |
CN110399182B (zh) | 一种cuda线程放置优化方法 | |
CN113722218B (zh) | 一种基于编译器中间表示的软件缺陷预测模型构建方法 | |
US7293264B2 (en) | Method and a device for abstracting instruction sequences with tail merging | |
CN109934507A (zh) | 一种业务流程调度的方法及装置 | |
US6519768B1 (en) | Instruction translation method | |
CN115576840A (zh) | 基于机器学习的静态程序插桩检测方法及装置 | |
CN113553057A (zh) | 一种针对不同架构的gpu进行并行计算的优化系统 | |
CN117055891A (zh) | 基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法 | |
CN109885702B (zh) | 自然语言处理中的序列标注方法、装置、设备及存储介质 | |
CN1894674A (zh) | 存储器访问指令向量化 | |
CN114995832B (zh) | 一种动静结合的二进制程序翻译方法 | |
US7096462B2 (en) | System and method for using data address sequences of a program in a software development tool | |
CN113900662B (zh) | 一种llvm编译选项选择方法 | |
RU2206119C2 (ru) | Способ получения объектного кода | |
Servadei et al. | Cost optimization at early stages of design using deep reinforcement learning | |
EP0638862B1 (en) | Method and system for processing language | |
CN116414396A (zh) | 一种llvm的目标定义文件生成方法、装置和电子设备 | |
CN114385180A (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
US20090112568A1 (en) | Method for Generating a Simulation Program Which Can Be Executed On a Host Computer | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
JP3495230B2 (ja) | エミュレーション処理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |