一种汇编代码的编写方法、装置、系统和可读存储介质与流程

文档序号:14990234发布日期:2018-07-20 22:04阅读:181来源:国知局

本发明涉及计算机领域,特别涉及一种汇编代码的编写方法、装置、系统和可读存储介质。



背景技术:

随着各应用领域数据的爆炸式增长,该领域的高性能应用计算花费的时间也成倍增长。为了能够减少高性能应用的计算时间,提升计算结果的时效性,可以在两个方面实现对各应用的优化,分别是粗粒度的多进程优化和对硬件依赖程度较高的底层优化。

但是,在现有技术中,由于底层优化的可移植效果较差,且优化难度较大,所以往往会忽略底层优化。目前较为常用的底层优化方法是slp(超字并行)向量化方法,该方法利用相邻地址的内存访问作为打包的种子,然后通过定义-使用链和使用-定义链启发式地扩展包,最后利用依赖关系调度包,虽然充分利用了服务器的向量化指令,但却没有考虑到硬件指令流水线的优化和访存对性能的影响,同样也不适用于具有数据依赖的基本块和条件判断程序块。而实际上,如果能够基于计算机硬件和指令架构对底层硬件依赖进行优化,则可以获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能。

因此,如何获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能以提升计算速度和节约计算时间是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本发明的目的是提供一种汇编代码的编写方法、装置、系统和可读存储介质,能够获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能以提升计算速度和节约计算时间。

为了解决上述技术问题,本发明提供的一种汇编代码的编写方法,包括:

选取备选指令中指令耗时最短的指令或指令集;

按照预设的指令调度规则对目标指令进行重排以确保每条指令流水线的正常执行;

向量化程序中无数据依赖的语句,并当所述程序进行内存访问时,一次至少读取四个连续的数据;

其中,所述目标指令为所述指令或所述指令集中的指令。

优选地,所述按照预设的指令调度规则对目标指令进行重排以确保每条指令流水线的正常执行具体包括:

判断所述目标指令是否符合四发射流水线;

如果否,以空操作指令nop填充定点指令以填满每条所述指令流水线。

优选地,在所述目标指令符合四发射流水线之后,还包括:

判断相邻所述目标指令之间是否存在数据依赖;

如果是,在所述相邻目标指令之间添加无关指令。

优选地,所述无关指令的数量为一条。

优选地,当所述程序中包括存在函数调用的循环时,所述向量化程序中无数据依赖的语句具体为:

采用slp(超字并行)向量化算法在所述循环内对所述无数据依赖的语句进行向量化。

优选地,当所述程序中包括存在分支判断的循环时,所述向量化程序中无数据依赖的语句具体为:

采用投机向量化算法对所述无数据依赖的语句进行向量化。

为了解决上述技术问题,本发明还提供的一种汇编代码的编写装置,包括:

选取模块,用于选取备选指令中指令耗时最短的指令或指令集;

重排模块,用于按照预设的指令调度规则对目标指令进行重排以确保每条指令流水线的正常执行;

向量化模块,用于向量化程序中无数据依赖的语句;

访存模块,用于当所述程序进行内存访问时,一次至少读取连续连续的数据;

其中,所述目标指令为所述指令或所述指令集中的指令。

优选地,所述重排模块包括:

判断模块,用于判断所述目标指令是否符合四发射流水线,如果否,则触发填充模块;

所述填充模块,用于以空操作指令nop填充定点指令以填满每条所述指令流水线。

为了解决上述技术问题,本发明还提供的一种汇编代码的编写系统,包括:

存储器,用于存储编写程序;

处理器,用于在执行所述编写程序时实现如上述任一种编写方法的步骤。

为了解决上述技术问题,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有编写程序,所述编写程序被处理器执行时实现如上述任一种编写方法的步骤。

本发明提供的汇编代码的编写方法,首先通过选取备选指令中指令耗时最短的指令或指令集,可以消耗最少的cpu周期实现程序需要实现的功能,节约计算时间;而后再按照预设的指令调度规则对目标指令进行重排,可以确保每条指令流水线的正常执行,进而实现指令级并行,提高处理器性能,提升计算速度;最后向量化程序中无数据依赖的语句,可以进一步提升指令执行速度;且当程序进行内存访问时,一次至少读取四个连续的数据,能够提高cache命中率,减少预取指令的使用,从而减少指令数量,进而进一步提高计算速度,节省计算时间。既考虑到了指令流水线的优化也考虑到了访存对性能的影响,同样适用于具有数据依赖的基本块和条件判断程序块,因此,本发明提供的汇编代码的编写方法,能够获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能,进而提升计算速度,减少计算时间。而且,本编写方法也可以使编码更加规范,具有条理化,易于后期维护。此外,本发明还公开了一种汇编代码的编写装置、系统和一种计算机可读存储介质,效果如上。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。

图1为本发明实施例提供的一种汇编代码的编写方法的流程图;

图2为本发明实施例提供的一种汇编代码的编写装置的结构示意图;

图3为本发明实施例提供的一种汇编代码的编写系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动的前提下,所获得的所有其他实施例,都属于本发明保护范围。

本发明的目的是提供一种汇编代码的编写方法、装置、系统和可读存储介质,能够获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能以提升计算速度和节约计算时间。

为了使本领域的技术人员更好的理解本发明技术方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

图1为本发明实施例提供的一种汇编代码的编写方法的流程图。如图1所示,本实施例提供的编写方法包括以下步骤:

s10:选取备选指令中指令耗时最短的指令或指令集。

s11:按照预设的指令调度规则对目标指令进行重排以消除相邻目标指令之间的依赖。

s12:向量化程序中无数据依赖的语句,并当程序进行内存访问时,一次至少读取四个连续的数据。

其中,目标指令为备选指令中指令耗时最短的指令或指令集中的指令。

需要说明的是,备选指令是指可以实现同一功能的各种指令和指令组合;连续的数据是指地址连续的数据。

对于步骤s10来说,可以根据指令的耗时表确定备选指令中耗时最短的指令或指令集,达到使用最少的时间实现相同功能的目的。以国产服务器sw261010基础数学库开发为例进行说明,例如,在数学库的开发过程中用到了2的n次方,则备选指令中至少包含移位指令和乘法指令,参考指令耗时表发现,乘法指令要比移位指令多消耗4到8个cpu周期,因此,实现计算2的n次方的这个功能,可以采用移位运算实现,而不是直接采用连乘运算。再例如,在数学库的开发过充中,如果备选指令中包含加减指令和乘除指令,则由于加减指令的指令耗时要小于乘除指令的指令耗时,所以在实现某一功能时,如果能用加减指令代替乘除指令的应尽量采用加减指令实现功能。

无论是国产处理器还是商用处理器均具有乱序执行能力,同一时刻存在着多条指令同时执行,即指令级并行。在保证程序运行的最终结果一致的情况下,处理器执行指令的顺序是无需和汇编代码给出的指令顺序完全一致的。也就是说,指令级并行能够利用处理器上不同组件同时工作,如果程序具有类型丰富的运算,指令级并行能使处理器的性能迅速提升,但是,值得注意的是,同时执行的指令之间是需要没有数据依赖或控制依赖的。因此,对于步骤s12来说,需要根据程序的不同需求,预先设置指令调度规则,实现对目标指令的重排以消除相邻目标指令之间的依赖,从而确保每条指令流水线都能够正常执行。

在步骤s12中,向量化程序中无数据依赖的语句包括:一、向量化仅包含无数据依赖语句的基本块中的所有语句;二、向量化存在数据依赖语句的基本块中的无数据依赖语句。在对存在数据依赖语句的基本块中的无数据依赖语句进行向量化的同时,存在数据依赖的语句串行执行即可。通过向量化无数据依赖的语句可以进一步提升指令执行速度。而在程序进行内存访问时,一次至少读取四个连续的数据,则可以使得数据访问具有更强的局部性,有利于发挥缓存的能力,提高cache命中率,减少预取指令的使用,减少指令数量,节省计算时间。

下面以一次访存连续绝对地址的四个数据的程序为例进行说明,程序代码如下:

$data:

quad0x2389183b

quad0x42a6c9d2

….

….

quad0xa58c35eb

exp:

vldd$f0,0(a1)

vldd$f1,4(a1)

其中,a1为数据段机制,vldd为向量访存指令。

而且,可以理解的是,采用本发明实施例提供的编码方法编写的汇编代码,可以使汇编过程更加有章可循,编码更加规范,具有条理化,也易于后期维护。

综上所述,本发明实施例提供的汇编代码的编写方法,首先通过选取备选指令中指令耗时最短的指令或指令集,可以消耗最少的cpu周期实现程序需要实现的功能,节约计算时间;而后再按照预设的指令调度规则对目标指令进行重排,可以确保每条指令流水线的正常执行,进而实现指令级并行,提高处理器性能,提升计算速度;最后向量化程序中无数据依赖的语句,可以进一步提升指令执行速度;且当程序进行内存访问时,一次至少读取四个连续的数据,能够提高cache命中率,减少预取指令的使用,从而减少指令数量,进而进一步提高计算速度,节省计算时间。既考虑到了指令流水线的优化也考虑到了访存对性能的影响,同样适用于具有数据依赖的基本块和条件判断程序块,因此,本发明提供的汇编代码的编写方法,能够获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能,进而提升计算速度,减少计算时间。而且,本编写方法也可以使编码更加规范,具有条理化,易于后期维护。

基于上述实施例,作为一种优选的实施方式,步骤s11具体包括:

判断目标指令是否符合四发射流水线;

如果否,以空操作指令nop填充定点指令以填满每条指令流水线。

如果是,正常发射执行目标指令。

当目标指令不符合四发射流水线时,通过以空操作指令nop填充定点指令,能够填满每条指令流水线,使得目标指令符合四发射流水线,从而确保了指令流水线的正常执行。

基于上述实施例,作为一种优选的实施方式,在目标指令符合四发射流水线之后,还包括:

判断相邻目标指令之间是否存在数据依赖;

如果是,在相邻目标指令之间添加无关指令。

如果否,则无需进行任何操作。

其中,如果不考虑指令间是否存在数据依赖,则在时间上先后相继执行的两条目标指令为相邻目标指令。

当相邻目标指令之间存在数据依赖时,通过在该相邻的目标指令之间添加无关指令,能够消除该相邻的目标指令之间的数据依赖,使目标指令符合乱序执行标准,从而提高发射效率和计算效率。并且,优选地,添加的无关指令的数量为一条。

以数学库实现过充中充分利用指令流水线的为例进行说明,在未添加无关指令之前的原程序为:

fldd$f0,0(a1)

fldd$f1,8(a1)

fadd$f1,$f0,$f2

fmad$f2,$f1,$f3,$f2

其中,加法指令fadd$f1,$f0,$f2和乘加指令fmad$f2,$f1,$f3,$f2具有数据依赖关系,所以,为了消除加法指令和乘加指令之间的数据依赖,可以通过在加法指令fadd$f1,$f0,$f2和乘加指令fmad$f2,$f1,$f3,$f2之间添加一条不相干的计算指令,如指令fuld$f4,$f5,$f6,则添加无关指令之后的程序为:

fldd$f0,0(a1)

fldd$f1,8(a1)

fadd$f1,$f0,$f2

fuld$f4,$f5,$f6,

fmad$f2,$f1,$f3,$f2

如此,可以使该程序符合乱序执行标准,提高指令发射效率和计算效率,而且,同时也能够更充分地利用处理器指令并行的能力。

基于上述实施例,作为一种优选的实施方式,当程序中包括存在函数调用的循环时,向量化程序中无数据依赖的语句具体为:

采用slp(超字并行)向量化算法在循环内对无数据依赖的语句进行向量化。

在本实施例中,对于循环内存在数据依赖的语句保持串行执行即可。

基于上述实施例,作为一种优选的实施方式,当程序中包括存在分支判断的循环时,向量化程序中无数据依赖的语句具体为:

采用投机向量化算法对无数据依赖的语句进行向量化。

在本实施例中,采用投机向量化算法对无数据依赖的数据进行向量化的实质是将与循环内与判断无关的语句进行向量化,提到判断外执行,以提升指令的计算速度。

上文对于本发明提供的一种汇编代码的编写方法的实施例进行了详细的描述,本发明还提供了一种与该编写方法对应的编写装置,由于装置部分的实施例与方法部分的实施例相互照应,因此装置部分的实施例请参见方法部分的实施例的描述,对于相同部分,本文不再赘述。

图2为本发明实施例提供的一种汇编代码的编写装置的结构示意图。如图2所示,本实施例提供的编写装置包括:

选取模块20,用于选取备选指令中指令耗时最短的指令或指令集;

重排模块21,用于按照预设的指令调度规则对目标指令进行重排以消除相邻目标指令之间的依赖;

向量化模块22,用于向量化程序中无数据依赖的语句;

访存模块23,用于当程序进行内存访问时,一次至少读取连续连续的数据;

其中,目标指令为备选指令中指令耗时最短的指令和指令集中的指令。

由于本实施例提供的编写装置,与上述任一实施例提供的编写方法相对应,具有同上述任一种编写方法相同的有益效果,因此,应用本发明提供的编写装置,能够获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能,进而提升计算速度,减少计算时间。而且,应用本编写装置,也可以使编码更加规范,具有条理化,易于后期维护。

基于上述实施例,作为一种优选的实施方式,重排模块21包括:

判断模块,用于判断目标指令是否符合四发射流水线,如果否,则触发填充模块;

填充模块,用于以空操作指令nop填充定点指令以填满每条流水线。

本发明还提供了一种与上述编写方法对应的编写系统,由于系统部分的实施例与方法部分的实施例相互照应,因此系统部分的实施例请参见方法部分的实施例的描述,对于相同部分,本文不再赘述。

图3为本发明实施例提供的一种汇编代码的编写系统的结构示意图。如图3所示,本实施例提供的编写系统包括:

存储器30,用于存储编写程序;

处理器31,用于在执行编写程序时实现如上述任一实施例提供的编写方法的步骤。

由于本实施例提供的编写系统的处理器能够调用编写程序实现上述任一实施例提供的编写方法的步骤,所以,应用本编写系统,能够获得初始性能良好的源码,使得程序在未优化之前就具有良好的性能,进而提升计算速度,减少计算时间。而且,应用本编写系统,也可以使编码更加规范,具有条理化,易于后期维护。

本发明还提供了一种计算机可读存储介质,计算机可读存储介质上存储有编写程序,编写程序被处理器执行时实现如上述任一实施例提供的编写方法的步骤。

本实施例提供的计算机可读存储介质,由于编写程序被处理器执行时,可以实现上述任一实施例提供的编写方法的步骤,所以本计算机可读存储介质具有同上述编写方法同样的实际效果。

以上对本发明所提供的一种汇编代码的编写方法、装置、系统和可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明都是与其它实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或者操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何变体意在涵盖非排他性的包含,从而使得包括一系列的要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1