一种软件流水优化方法及装置与流程

文档序号:18463707发布日期:2019-08-17 02:15阅读:283来源:国知局
一种软件流水优化方法及装置与流程

本发明涉及一种软件优化方法及装置,更具体涉及一种软件流水优化方法及装置。



背景技术:

为了解决数字信号处理过程中产生的大量数学运算的问题,dsp(digitalsignalprocessor,数字信号处理器)应运而生。数字信号处理可以利用一系列乘法和加法来实现复杂的数学运算。数字信号处理器的一个显著特点是能够在一个时钟周期内完成至少一次乘法或乘法累加计算。为了满足很多应用对dsp性能越来越高的要求,现代dsp均拥有乘法器、加法器等多个执行单元。如何充分利用这些内部执行单元,发挥dsp的性能,成为提高整个应用系统性能的关键。

对于软件中的一个循环体来说,其内部各个语句具有很强的时间相关关系,但是连续多个循环体之间的各个语句却是相互独立的。各个循环体分别以相同的语句处理不同的数据,如果并行执行各个循环体可以相应成倍地减少循环数目。软件流水将一个循环体分成多个操作阶段,属于不同循环体的操作可以并行执行。软件流水是一种重组循环以开发循环程序指令级并行性的技术,它通过并行执行连续的多个循环体来加快循环的执行速度。软件流水可以充分利用处理器内部各种运算资源,有效减少指令行间延,是提高dsp程序执行效率的一种重要手段。软件流水是通过重叠不同循环体的执行,把不同循环体间的指令交织在一起,将各指令分配到各执行单元并行执行,而单个循环体中的指令仍然是串行执行的。这样既保证了循环体中指令的相关关系,又提高了并行性。在软件流水中,不同循环体的重叠增加了对处理器内部处理单元、寄存器的需求,导致单个指令周期处理压力增大,对追求更高性能的汇编指令级编程提出了更高的要求。

有鉴于软件流水对dsp性能优化的重要性,部分dsp厂商提供了相应软硬件支持。目前,软件支持则主要体现在编译系统的改进上。但是,编译系统的改进仍然无法保证最终得到软件流水的高效性,有时甚至无法实现软件流水。因此,很多软件流水必须要靠人工进行后期调整,进而导致现有的软件流水优化效率较低的技术问题。



技术实现要素:

本发明所要解决的技术问题在于提供了一种软件流水优化方法及装置,以提高软件流水优化的效率。

本发明是通过以下技术方案解决上述技术问题的:

本发明实施例提供了一种软件流水优化方法,所述方法包括:

根据执行代码之间的串行处理关系,将待优化软件中的串行执行代码进行模块化处理,得到若干个功能模块,其中,所述执行代码,包括:循环体;

针对每一个功能模块,按照所述功能模块中的包含的指令的运行顺序依次展开,得到指令列,并将功能模块对应的指令列并排处理,得到二维指令网格;

获取针对二维指令网格中指令的调节命令,并判断根据所述调节命令调节后的二维指令网格中的指令是否符合预设的规则约束,其中,所述规则约束包括:运算资源、寄存器资源以及指令延迟中的一种或组合;

若否,调节不符合规则约束的指令的位置,并返回执行所述判断所述二维指令网格中的指令是否符合预设的规则约束的步骤,直至各行中的指令均符合规则约束。

可选的,所述将功能模块对应的指令列并排处理,包括:

将各个功能模块中包含的指令列中的首个指令对齐到同一行。

可选的,在按照所述功能模块中的包含的指令的运行顺序依次展开时,所述方法还包括:

根据功能模块中包含的指令的类型,使用视觉要素将各个类型的指令进行差异展示,其中,所述视觉要素包括:字体、字体颜色、填充颜色、特殊字符标记中的一种或组合。

可选的,所述判断所述二维指令网格中的指令是否符合预设的规则约束,包括:

判断所述二维指令网格各行中的指令是否符合预设的规则约束。

可选的,所述调节不符合规则约束的指令的位置,包括:

将不符合规则约束的指令的位置调节至下一行或者上一行。

可选的,所述判断所述二维指令网格中的指令是否符合预设的规则约束,包括:

判断所述二维指令网格各列中的指令是否符合预设的规则约束。

可选的,所述调节不符合规则约束的指令的位置,包括:

将不符合规则约束的指令的位置调节至左侧一列或者右侧一列。

可选的,所述调节不符合规则约束的指令的位置,包括:

接收调节不符合规则约束的指令的操作命令,执行所述操作命令以调节不符合规则约束的指令的位置。

本发明实施例提供了一种软件流水优化装置,所述装置包括:

处理模块,用于根据执行代码之间的串行处理关系,将待优化软件中的串行执行代码进行模块化处理,得到若干个功能模块,其中,所述执行代码,包括:循环体;

展开模块,用于针对每一个功能模块,按照所述功能模块中的包含的指令的运行顺序依次展开,得到指令列,并将功能模块对应的指令列并排处理,得到二维指令网格;

判断模块,用于判断所述二维指令网格中的指令是否符合预设的规则约束,其中,所述规则约束包括:运算资源、寄存器资源以及指令延迟中的一种或组合;

调节模块,用于在所述判断模块的判断结果为否的情况下,调节不符合规则约束的指令的位置,并返回执行所述判断所述二维指令网格中的指令是否符合预设的规则约束的步骤,直至各行中的指令均符合规则约束。

可选的,所述展开模块,用于:

将各个功能模块中包含的指令列中的首个指令对齐到同一行。

可选的,所述装置还包括:展示模块,用于:

根据功能模块中包含的指令的类型,使用视觉要素将各个类型的指令进行差异展示,其中,所述视觉要素包括:字体、字体颜色、填充颜色、特殊字符标记中的一种或组合。

可选的,所述判断模块,用于:

判断所述二维指令网格各行中的指令是否符合预设的规则约束。

可选的,所述调节模块,用于:

将不符合规则约束的指令的位置调节至下一行或者上一行。

可选的,所述判断模块,用于:

判断所述二维指令网格各列中的指令是否符合预设的规则约束。

可选的,所述调节模块,用于:

将不符合规则约束的指令的位置调节至左侧一列或者右侧一列。

可选的,所述调节模块,用于:

接收调节不符合规则约束的指令的操作命令,执行所述操作命令以调节不符合规则约束的指令的位置。

本发明相比现有技术具有以下优点:

应用本发明实施例,利用各个功能模块对应的指令列以及规则约束,构建二维指令网格,然后在二维指令网格中进行指令的调节,相对于现有技术中进行人工调整判断,可以提高软件流水优化效率。

附图说明

图1为本发明实施例提供的一种软件流水优化方法的流程示意图;

图2为本发明实施例提供的一种软件流水优化方法中多核处理器的结构示意图;

图3为本发明实施例提供的一种软件流水优化方法中功能模块拆分示意图;

图4为本发明实施例提供的一种软件流水优化方法中构建的二维指令网格的结构示意图;

图5为本发明实施例提供的一种软件流水优化方法中指令的位置的调节示意图;

图6为本发明实施例提供的一种软件流水优化方法中指令的位置调节后的二维指令网格的结构示意图;

图7为本发明实施例提供的一种软件流水优化装置的结构示意图。

具体实施方式

下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

本发明实施例提供了一种软件流水优化方法及装置,下面首先就本发明实施例提供的一种软件流水优化方法进行介绍。

图1为本发明实施例提供的一种软件流水优化方法的流程示意图,如图1所示,所述方法包括:

s101:根据执行代码之间的串行处理关系,将待优化软件中的串行执行代码进行模块化处理,得到若干个功能模块,其中,所述执行代码,包括:循环体。

示例性的,以包含若干个循环体的待优化软件为例进行说明,

图2为本发明实施例提供的一种软件流水优化方法中多核处理器的结构示意图,如图2所示,处理器xxx中包含乘法运算单元、移位器运算单元、算术运算单元以及存/取运算单元;且,

乘法运算单元所能运行的执行指令对应的指令代码为mulsp;

算术运算单元所能运行的执行指令对应的指令代码为addsp、subsp;

移位器运算单元所能运行的执行指令对应的指令代码为shr、shl;

存/取运算单元所能运行的执行指令对应的指令代码为load、save。

由于各个循环体之间的执行代码之间是相互独立的,且各个循环体内部的各句执行代码之间存在逻辑上的先后关系,因此,可以将存在逻辑上的先后顺序的执行代码作为一个整体进行模块化处理,进而可以将待优化软件进行模块化处理,每一个循环体对应一个功能模块。

需要说明的是,一个待优化软件可以包括若干个功能模块,一个功能模块可以包括若干个串行或者并行执行的执行指令;一个执行指令可以包括若干行执行代码。

最后,需要强调的是,上述所称“mulsp”、“addsp”、“subsp”等均为指令代码的代号,在实际应用中,各个运算单元所能运算的代码的代号包括但不仅限于上述代号,任何能够由对应运算单元进行运算的代码均可以适用本发明实施例所述方法。

s102:针对每一个功能模块,按照所述功能模块中的包含的指令的运行顺序依次展开,得到指令列,并将功能模块对应的指令列并排处理,得到二维指令网格。

图3为本发明实施例提供的一种软件流水优化方法中功能模块拆分示意图,如图3所示,图3左侧为待优化软件的执行代码序列;将待优化软件进行模块化后得到的循环体包括:

循环体1,其包含的执行指令的代码为load、nop、nop、nop;

循环体2,其包含的执行指令的代码为shr、mulsp、nop、nop;

循环体3,其包含的执行指令的代码为nop、mulsp、nop、nop;

循环体4,其包含的执行指令的代码为nop、addsp、nop、nop;

循环体5,其包含的执行指令的代码为save、nop、nop、nop。

然后,为了压缩执行时间,将各个功能模块中包含的指令列中的首个指令对齐到同一行;如图3所示,将循环体1-5的首个执行指令对齐到同一行。

图4为本发明实施例提供的一种软件流水优化方法中构建的二维指令网格的结构示意图,如图4所示,图4为二维指令网格的结构示意图,在图4中,循环体1-5的首个执行指令对齐到同一行,且循环体1-5从左到右依次排开。每一个功能模块,即循环体中的执行指令从上到下依次排列。

在实际应用中,为了对不同的执行指令进行区分显示,在按照所述功能模块中的包含的指令的运行顺序依次展开时,可以根据功能模块中包含的指令的类型,使用视觉要素将各个类型的指令进行差异展示,其中,所述视觉要素包括:字体、字体颜色、填充颜色、特殊字符标记中的一种或组合。

如图3-4所示,可以使用不同的代码将不同类型的执行指令进行显示;也可以为不同类型的执行指令的标记信息赋予不同的颜色,也可以为不同类型的执行指令的标记信息赋予不同的字体;也可以为不同类型的执行指令对应的网格填充不同的颜色;或者使用不同的特殊字符标记不同类型的执行指令。本发明实施例中对不同类型的执行指令的区别显示的方式包括但不仅限于以上方式,本发明实施例在此并不对其进行一一列举,任何可以实现区别显示不同类型的执行指令的方式均可以。

可以理解的是,执行指令类型是指,乘法运算单元执行的执行指令可以为一个类型的执行指令,类似的,移位器运算单元执行的执行指令可以为另一个类型的执行指令。

s103:获取针对二维指令网格中指令的调节命令,并判断根据所述调节命令调节后的所述二维指令网格中的指令是否符合预设的规则约束,其中,所述规则约束包括:运算资源、寄存器资源以及指令延迟中的一种或组合;若否,执行s104。

示例性的,首先接收用户输入的对二维指令网格中的指令的调节命令,例如,将第一行第二列中的a指令调节至第三行第三列的位置;或者将第二行第二列中的c指令调节至第三行第四列的指令互换位置。调节指令的输入方式可以为字符命令、鼠标操作、手势操作等;本发明实施例并不对用户所述的调节命令的内容以及调节命令的输入方式进行限定。

第一方面,可以判断所述二维指令网格各行中的指令是否符合预设的规则约束。

如图4所示,由于存/取数运算单元不能同时执行存取操作,因此,图4中的第一行中的第一列执行指令load与第六列执行指令save发生冲突,

可以理解的是,在判断二维指令网格各行中的指令是否符合预设的规则约束时,以寄存器资源以及指令延迟为规则约束时,对不符合规则约束的执行指令的调节方式与上述方式相同。

第二方面,还可以判断所述二维指令网格各列中的指令是否符合预设的规则约束。

具体的,判断二维指令网格各列中的指令是否符合预设的规则约束的判断方式,与第一方面中的判断方式相同,区别仅在于判断的是各列中的控制指令是否符合预设的规则约束。

s104:调节不符合规则约束的指令的位置,并返回执行所述判断所述二维指令网格中的指令是否符合预设的规则约束的步骤,直至各行中的指令均符合规则约束。

示例性的,与s103步骤中第一方面相对应,图5为本发明实施例提供的一种软件流水优化方法中指令的位置的调节示意图,如图5所示,将二维指令网格中第一行第六列的执行指令save与下一个网格位对应的执行指令交换位置。

需要强调的是,仅在save指令与save的下一个指令nop指令之间不存在逻辑上的先后顺序时才可以进行位置的交换;如果,save指令与save的下一个指令nop指令之间存在逻辑上的先后顺序时,将第六列的执行指令整体下移一个网格位。

类似的,由于乘法运算单元一个时刻只能执行一次乘法运算,因此,二维指令网格中第二行第二列的mulsp与第二行第二列的mulsp冲突,

如图5所示,将二维指令网格中第二行第三列的执行指令mulsp与下一个网格位对应的执行指令交换位置。

具体的,可以将不符合规则约束的指令的位置调节至下一行或者上一行。

与s103步骤中第二方面相对应,类似的,在各列中的执行指令不符合预设的规则约束时,可以将发生冲突的执行指令从其中一列调节至另一列。

需要强调的是,在二维指令网格各列中的指令不符合预设的规则约束时的调节,与前述二维指令网格各行中的指令不符合预设的规则约束时的调节方式相同,区别仅在于进行列间的调节。

在进行控制指令的调节后,需要判断调节执行指令之后的新的二维指令网格中的各行和/或各列中的控制指令是否符合预设的规则约束,即返回执行s101步骤。

具体的,可以将不符合规则约束的指令的位置调节至左侧一列或者右侧一列。

应用本发明图1所示实施例,利用各个功能模块对应的指令列以及规则约束,构建二维指令网格,然后在二维指令网格中进行指令的调节,相对于现有技术中进行人工调整判断,可以提高软件流水优化效率。

另外,现有编程软件普遍缺乏面向编程人员的软件流水辅助编程手段,导致人工优化软件流水难度大大增加。

在实际应用中,可以接收调节不符合规则约束的指令的操作命令,执行所述操作命令以调节不符合规则约束的指令的位置。

在执行指令调节过程中可以接收人工调节指令,提高了调节过程的灵活性以及简便性。

与本发明图1所示实施例相对应,本发明实施例还提供了一种软件流水优化装置。

图7为本发明实施例提供的一种软件流水优化装置的结构示意图,如图7所示,所述装置包括:

处理模块701,用于根据执行代码之间的串行处理关系,将待优化软件中的串行执行代码进行模块化处理,得到若干个功能模块,其中,所述执行代码,包括:循环体;

展开模块702,用于针对每一个功能模块,按照所述功能模块中的包含的指令的运行顺序依次展开,得到指令列,并将功能模块对应的指令列并排处理,得到二维指令网格;

判断模块703,用于获取针对二维指令网格中指令的调节命令,并判断根据所述调节命令调节后的二维指令网格中的指令是否符合预设的规则约束,其中,所述规则约束包括:运算资源、寄存器资源以及指令延迟中的一种或组合;

调节模块704,用于在所述判断模块703的判断结果为否的情况下,调节不符合规则约束的指令的位置,并返回执行所述判断所述二维指令网格中的指令是否符合预设的规则约束的步骤,直至各行中的指令均符合规则约束。

应用本发明图7所示实施例,利用各个功能模块对应的指令列以及规则约束,构建二维指令网格,然后在二维指令网格中进行指令的调节,相对于现有技术中进行人工调整判断,可以提高软件流水优化效率。

在本发明实施例的一种具体实施方式中,所述展开模块702,用于:

将各个功能模块中包含的指令列中的首个指令对齐到同一行。

在本发明实施例的一种具体实施方式中,所述装置还包括:展示模块,用于:

根据功能模块中包含的指令的类型,使用视觉要素将各个类型的指令进行差异展示,其中,所述视觉要素包括:字体、字体颜色、填充颜色、特殊字符标记中的一种或组合。

在本发明实施例的一种具体实施方式中,所述判断模块703,用于:

判断所述二维指令网格各行中的指令是否符合预设的规则约束。

在本发明实施例的一种具体实施方式中,所述调节模块704,用于:

将不符合规则约束的指令的位置调节至下一行或者上一行。

在本发明实施例的一种具体实施方式中,所述判断模块703,用于:

判断所述二维指令网格各列中的指令是否符合预设的规则约束。

在本发明实施例的一种具体实施方式中,所述调节模块704,用于:

将不符合规则约束的指令的位置调节至左侧一列或者右侧一列。

在本发明实施例的一种具体实施方式中,所述调节模块704,用于:

接收调节不符合规则约束的指令的操作命令,执行所述操作命令以调节不符合规则约束的指令的位置。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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