一种指令延迟执行和指令规约的方法和装置与流程

文档序号:14941244发布日期:2018-07-13 20:52阅读:178来源:国知局

本发明涉及计算机处理器结构技术领域,具体为一种指令延迟执行和指令规约的方法和装置。



背景技术:

计算机程序有两种执行策略,贪婪执行(立即执行)和懒惰执行(延迟执行)。对于命令式编程的语言构造得到的绝大多数程序都是采用贪婪执行策略。计算机处理器的硬件执行的机器代码就是一种命令式语言,因此几乎所有的计算机处理器都是采用贪婪执行策略设计而成。贪婪执行的优点是计算机不需要跟踪和调度某条指令或者某句表达式的时机,程序员可以指定指令执行的顺序,减少硬件判断的复杂度。而懒惰执行可以从多方面提高程序的性能,如避免执行不需要的计算,避免计算组合表达式中已经处于的错误条件,减少程序执行的内存开销等。

与命令式编程大多数采用贪婪执行策略相对,函数式编程大多数采用懒惰执行策略。在函数式编程中允许高阶函数将函数作为参数传入,并规约成一个新的函数返回。这种规约可以改变整个程序的执行顺序从而优化执行效率。

通常前一种命令式编程的架构具有一般化的处理能力和优化结构,如中央处理器上的程序会充分利用中央处理单元的计算指令以及数据和指令缓存。而另一种处理器架构通常是针对某一类有自身特征的程序而设计,具有比较特殊的计算单元和局部存储器结构,如神经网络加速器会设计大量相互有独特拓扑关系的乘累加器用于卷积或矢量内积运算。如果仍然采用命令式编程和贪婪执行策略,前者的程序很难在后者上达到高效率,所以需要重新编写或者编译前者的程序。



技术实现要素:

本发明的目的在于提供一种指令延迟执行和指令规约的方法和装置,以解决上述背景技术中提出的神经网络加速器会设计大量相互有独特拓扑关系的乘累加器用于卷积或矢量内积运算。如果仍然采用命令式编程和贪婪执行策略,前者的程序很难在后者上达到高效率的问题。

为实现上述目的,本发明提供如下技术方案:一种指令延迟执行和指令规约的方法,包括:

一种函数式的指令、一个函数规约的规则集合、一个函数可组合的规则集合。

函数执行时经过函数译码从函数输入缓冲区获得并变换得到函数的可规约形式,根据函数的变量参数和当前规约的函数的返回值,判断是否符合规约和合并的先决条件。如果符合条件,将函数的可规约形式与当前暂存的规约函数输入到规约函数规约状态机,状态机根据给定的规约规则决定是否将该输入函数与当前的规约函数规约成新的函数,如果状态机无法规约该输入函数,当前已经规约的函数将被输入到函数组合模块中,而当前规约函数将被替换成输入函数。当已规约好的函数输入到函数组合模块时,函数组合器将判断是否将输入函数与之前的函数组合成一个函数包,或者终止之前的函数打包,并将已打包好的函数包交付后续执行部件完成函数执行,并以输入函数开始新的函数包。

一种函数式的指令必须包含一个函数操作符,一个函数返回值,至少一个变量参数,可以包含若干个非变量参数。函数的操作符定义函数的基本行为,如加法、减法等,函数的返回值代表函数的计算结果,函数的返回值也是该函数被执行一次的标识符,用于指代该条函数的执行。变量参数是指可以将函数作为变量传递的参数。非变量参数是指不可以传递函数的参数。

一种函数规约规则集合由若干条规约规则组成。若规则集不为空,每条规约规则定义为输入两个函数(一个输入函数和一个当前规约的函数),输入函数的一个变量参数是当前规约函数的返回值,是否存在一个函数式指令能够具有完成两个函数的等价功能,其返回值与输入函数的返回值相同,并且其变量参数是输入函数的变量参数减去由当前规约函数返回值替代的参数,加上当前规约函数的变量参数,并且其非变量参数是两个函数的非变量参数,若存在,则说明两个输入函数符合规约规则。若规则集为空,则该方法不规约任何函数。

一种函数可组合规则集合由若干条组合规则组成,每条组合规则定义为输入一个函数和一组函数(一个输入函数和一个当前函数包),输入函数的一个变量参数是当前函数包最后一个函数的返回值,是否允许函数包中最后函数的返回值在不计算或者不完全计算的情况下开始执行输入函数。

判断是否符合规约和合并的先决条件指一个函数的一个变量参数是另一个函数的返回值。

规约过程:将该输入函数与当前的规约函数规约成新的函数,首先将输入函数、当前的规约函数和其返回值存储到历史函数列表中。然后根据规约规则将输入函数和当前的规约函数生成新的规约函数,将新的规约函数中的参数设置为输入函数和规约函数的参数。将当前规约函数换成新的规约函数。如果输入函数与当前的规约函数不能构成新的规约函数,则查找历史函数列表。

如果输入函数的某个参数变量与历史列表中的某一个返回值匹配,则需要将这个返回值对应的规约函数输出到函数组合,并将历史列表中该项之后的表项里的输入函数组合成新的规约函数,输出到函数组合中,或者将历史列表中最后的规约函数输出到函数组合中。并清空历史列表用新的输入函数替换当前规约函数。如果在历史函数列表中没有找到匹配的返回值,则将当前的规约函数输出到函数组合中,清空历史列表并将新的输入函数替换当前规约函数。组合过程:如果输入函数能够符合函数组合判断规则,将输入的函数置于函数包末尾,从组合执行的资源中分配一个用于组合的资源(一块局部存储器,一组寄存器等),并将原函数包尾的函数返回值,以及输入函数中对应该返回值的参数替换成这个资源的标识符。

一种指令延迟执行和指令规约的装置,该指令延迟执行和指令规约的装置包括:一个函数输入缓冲区、若干个函数规约模块、一个函数组合模块以及一个函数包缓冲区。

一个函数输入缓冲区用于存放已下载或者预先写入的函数指令。可以由一个混合的缓冲区,或者若干个分别存放函数操作符、函数返回值、函数参数的独立缓冲区构成。

函数规约模块包括一个函数译码子模块,一个规约先决条件判断子模块,一个当前规约状态机、一个当前规约函数缓冲区、以及一个历史函数列表。

一个函数译码子模块,用于将函数从函数输入缓冲区中的函数操作符、返回值和参数译码成可以规约的格式,同时生成该函数用于规约的特征码。

一个规约先决条件判断子模块,输入译码得到的函数的变量参数、当前规约函数的返回值以及历史函数列表返回值,输出历史函数或者使能规约状态机。

一个规约状态机实现函数规约的规则,其根据当前规约状态和从函数译码子模块输入的规约特征码,判断是否进行规约,或者输出当前规约函数,并更新当前规约状态和当前规约函数缓冲区。

一个当前规约函数缓冲区,用于存储当前规约函数。

一个历史函数列表,记录每一次当前规约函数缓冲区里更新的内容,由每一条表项内的函数返回值和当前规约函数缓冲区内容所构成。

一个组合模块包括一个组合先决条件判断子模块、一个组合状态机、一个函数包缓冲区以及一个历史函数包尾列表。

组合先决条件判断子模块接收从函数规约模块输出的一个已经规约好的函数,当前函数包缓冲区尾,部函数的返回值,以及历史返回值列表,输出历史函数包或者使能组合状态机。

组合状态机实现函数组合的规则,其根据当前已打包的函数和输入的规约函数,判断是否将规约函数组合到现在缓存的函数包中,或者输出当前缓存的函数包,并以输入的规约函数作为新的函数包开始。

与现有技术相比,本发明的有益效果是:本方案一方面将若干个函数简化成一个处理器硬件支持的复杂函数,另一方面将若干个函数之间返回值和参数传递由外部存储器转变成内部存储器完成,从而减少数据与外部或低速存储器之间的交互,以达到降低存储带宽需求和功耗的目的。

附图说明

图1是本发明所述指令延迟执行和指令规约的结构框图;

图2是本发明所述规约模块的具体结构图;

图3是本发明所述组合模块的具体结构图;

图4是本发明所述组合模块中历史函数包尾列表与函数包循环队列的映射关系;

图5是本发明所述规约模块中规约状态机的具体状态转移图;

图6是本发明所述的设计函数式指令表格图;

图7是本发明所述的两部分内容组织的表格图;

图8是本发明所述的历史函数列表的表项表格图;

图9是本发明所述的历史函数包尾表项的表格图。

具体实施方式

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

请参阅图1,本发明提供一种技术方案:一种指令延迟执行和指令规约的方法,包括:

一种函数式的指令、一个函数规约的规则集合、一个函数可组合的规则集合。

函数执行时经过函数译码从函数输入缓冲区获得并变换得到函数的可规约形式,根据函数的变量参数和当前规约的函数的返回值,判断是否符合规约和合并的先决条件。如果符合条件,将函数的可规约形式与当前暂存的规约函数输入到规约函数规约状态机,状态机根据给定的规约规则决定是否将该输入函数与当前的规约函数规约成新的函数,如果状态机无法规约该输入函数,当前已经规约的函数将被输入到函数组合模块中,而当前规约函数将被替换成输入函数。当已规约好的函数输入到函数组合模块时,函数组合器将判断是否将输入函数与之前的函数组合成一个函数包,或者终止之前的函数打包,并将已打包好的函数包交付后续执行部件完成函数执行,并以输入函数开始新的函数包。

一种函数式的指令必须包含一个函数操作符,一个函数返回值,至少一个变量参数,可以包含若干个非变量参数。函数的操作符定义函数的基本行为,如加法、减法等,函数的返回值代表函数的计算结果,函数的返回值也是该函数被执行一次的标识符,用于指代该条函数的执行。变量参数是指可以将函数作为变量传递的参数。非变量参数是指不可以传递函数的参数。

一种函数规约规则集合由若干条规约规则组成。若规则集不为空,每条规约规则定义为输入两个函数(一个输入函数和一个当前规约的函数),输入函数的一个变量参数是当前规约函数的返回值,是否存在一个函数式指令能够具有完成两个函数的等价功能,其返回值与输入函数的返回值相同,并且其变量参数是输入函数的变量参数减去由当前规约函数返回值替代的参数,加上当前规约函数的变量参数,并且其非变量参数是两个函数的非变量参数,若存在,则说明两个输入函数符合规约规则。若规则集为空,则该方法不规约任何函数。

一种函数可组合规则集合由若干条组合规则组成,每条组合规则定义为输入一个函数和一组函数(一个输入函数和一个当前函数包),输入函数的一个变量参数是当前函数包最后一个函数的返回值,是否允许函数包中最后函数的返回值在不计算或者不完全计算的情况下开始执行输入函数。

判断是否符合规约和合并的先决条件指一个函数的一个变量参数是另一个函数的返回值。

规约过程:将该输入函数与当前的规约函数规约成新的函数,首先将输入函数、当前的规约函数和其返回值存储到历史函数列表中。然后根据规约规则将输入函数和当前的规约函数生成新的规约函数,将新的规约函数中的参数设置为输入函数和规约函数的参数。将当前规约函数换成新的规约函数。如果输入函数与当前的规约函数不能构成新的规约函数,则查找历史函数列表。

如果输入函数的某个参数变量与历史列表中的某一个返回值匹配,则需要将这个返回值对应的规约函数输出到函数组合,并将历史列表中该项之后的表项里的输入函数组合成新的规约函数,输出到函数组合中,或者将历史列表中最后的规约函数输出到函数组合中。并清空历史列表用新的输入函数替换当前规约函数。如果在历史函数列表中没有找到匹配的返回值,则将当前的规约函数输出到函数组合中,清空历史列表并将新的输入函数替换当前规约函数。组合过程:如果输入函数能够符合函数组合判断规则,将输入的函数置于函数包末尾,从组合执行的资源中分配一个用于组合的资源(一块局部存储器,一组寄存器等),并将原函数包尾的函数返回值,以及输入函数中对应该返回值的参数替换成这个资源的标识符。

一种指令延迟执行和指令规约的装置,该指令延迟执行和指令规约的装置包括:一个函数输入缓冲区、若干个函数规约模块、一个函数组合模块以及一个函数包缓冲区。

一个函数输入缓冲区用于存放已下载或者预先写入的函数指令。可以由一个混合的缓冲区,或者若干个分别存放函数操作符、函数返回值、函数参数的独立缓冲区构成。

函数规约模块包括一个函数译码子模块,一个规约先决条件判断子模块,一个当前规约状态机、一个当前规约函数缓冲区以及一个历史函数列表。

一个函数译码子模块,用于将函数从函数输入缓冲区中的函数操作符、返回值和参数译码成可以规约的格式,同时生成该函数用于规约的特征码。

一个规约先决条件判断子模块,输入译码得到的函数的变量参数、当前规约函数的返回值以及历史函数列表返回值,输出历史函数或者使能规约状态机。

一个规约状态机实现函数规约的规则,其根据当前规约状态和从函数译码子模块输入的规约特征码,判断是否进行规约,或者输出当前规约函数,并更新当前规约状态和当前规约函数缓冲区。

一个当前规约函数缓冲区,用于存储当前规约函数。

一个历史函数列表,记录每一次当前规约函数缓冲区里更新的内容,由每一条表项内的函数返回值和当前规约函数缓冲区内容所构成。

一个组合模块包括一个组合先决条件判断子模块、一个组合状态机、一个函数包缓冲区以及一个历史函数包尾列表。

组合先决条件判断子模块接收从函数规约模块输出的一个已经规约好的函数,当前函数包缓冲区尾,部函数的返回值,以及历史返回值列表,输出历史函数包或者使能组合状态机。

组合状态机实现函数组合的规则,其根据当前已打包的函数和输入的规约函数,判断是否将规约函数组合到现在缓存的函数包中,或者输出当前缓存的函数包,并以输入的规约函数作为新的函数包开始。

实施例

假设一个处理器支持1kb大小的源操作数,对于尺寸大于1kb的操作,将自动分为多个1kb的操作完成,有两级流水线,第一级流水线支持矩阵内积乘法,矩阵点对点乘法和二维卷积,第二级支持加法,减法和取绝对值。本专利使该处理器支持指令延迟执行和指令规约的一个实施方式如下:

设计其函数式指令(如图6)。

设计一条规约规则:

如果当前规约函数是矩阵内积,输入函数是矩阵加法,则允许规约

设计组合规则:

若输入的规约函数含有矩阵内积或二维卷积,则不允许组合,其他情况允许组合。

设计一个函数输入缓冲区由2个循环队列组成,每个队列有头尾两个指针,头指针用于写入,尾指针用于读出。一个队列用于缓存函数操作符,缓存返回值和非变量参数,另一个队列用于缓存变量参数。

设计一个函数译码子模块201,首先判断第一个队列是否为空,如果不为空,取出尾指针的内容,根据函数操作符判断该函数的变量参数个数,并从第二个队列中取出对应个数的变量参数,然后将两部分内容按规约函数的格式重新组织在一起(如图7)。

按函数操作符为该函数生成用于规约的2位特征码:

矩阵内积、矩阵点对点乘法、二维卷积、矩阵尺寸定义:01

矩阵加法、取绝对值:10

矩阵内积累加:11

设计一个规约先决条件判断子模块202,首先查找历史函数列表中的所有返回值地址与abc的地址进行匹配,将历史函数列表中首个匹配的项里存储的规约函数输出到函数组合模块,将该项存储的输入函数更新到当前规约函数存储器204中。如果没有匹配的项,则判断译码输出的函数中变量参数a(为简化示例,实际上abc都可以参与判断)是否与当前规约函数返回值地址一致。如果一致,发送使能信号给规约状态机,否则将当前规约函数寄存器中的值输出给函数组合模块,将译码输入的函数放入当前规约函数寄存器中,清空历史函数列表。

设计一个历史函数列表205,包含一个表项(本实例只有一个规约规则,所以只存在规约一次的可能),表项的结构(如图8)。

设计一个规约状态机包含4个状态203,

空闲状态501:此时规约特征寄存器和当前规约函数寄存器内无有效数据;

内积函数状态502:当前规约函数寄存器内有一个内积函数操作符;

其他函数状态503:当前规约函数寄存器中为其他函数;

输出状态504:输出当前规约寄存器函数,重置当前规约寄存器,清空历史函数列表。

在空闲状态下,当前状态机被使能,且有函数输入,则将该函数放入当前规约函数寄存器,将其规约特征码放入规约特征寄存器,如果函数是内积函数则跳转到内积函数状态,否则跳转到其他函数状态;

在内积函数状态下,当前状态机被使能,且有函数输入,如果输入函数的特征码和规约特征寄存器里的值做按位与操作结果为0,且输入函数操作符为矩阵加法,则将当前规约寄存器的返回值地址、当前规约寄存器的值以及输入函数作为历史函数表项存入历史函数列表中,并规约输入函数和当前规约寄存器里的函数,跳转到其他函数状态,否则跳转到输出状态;

其他函数状态:当前状态机被使能,且有函数输入,跳转到输出状态;

输出状态,将历史函数列表清空,输出当前规约函数寄存器里的值到函数组合模块,将当前规约函数寄存器和规约特征寄存器设置为无效,跳转到空闲状态。

规约输入函数和当前规约寄存器里的函数,将输入函数与当前规约寄存器里的函数操作符做按位或运算存入当前规约寄存器,将当前规约寄存器里的c替换为输入函数的c参数地址。将输入函数的特征码和规约特征寄存器的值做按位或操作,并将结果放入规约特征寄存器。

设计一个有16个存储单元的函数包循环队列303,每一个队列存储单元有一个规约函数(292bit)和一个包尾标记(1bit)构成。队列有3个指针,头指针401,尾指针403,包内指针402。头指针用于写入新的函数,尾指针用于指示最旧的一个函数包的起始位置,包内指针用于循环输出一个包内的函数。

设计一个由4个标识符0~3的局部存储器资源,每个资源分别代表一个1kb的存储器。

设计一个由4个历史函数包尾表项构成的历史函数包尾列表304,每个表项结构为(如图9)。

设计一个组合先决条件判断子模块301,用12个比较器将输入函数的3个变量参数与历史函数包尾列表有效地址比较,如果有相同存在,则将该历史项及其之前的表项的有效位置0,将该表项的头指针位置所指的循环队列中的对应函数的函数包尾标志置1,并将其返回值替换为表项中的地址,并将该指针的后一个函数的变量参数号对应的变量参数替换为表项中的地址,同时用3个64位比较器,分别比较队列最后一个函数的返回值地址和输入函数的3个变量参数地址,如果任意一个相同,则使能组合状态机,并将比较相同的变量参数号传递给状态机,否则通知状态机进入输出状态。

设计一个组合状态机302包含3个状态,空闲状态:此时函数包队列里没有函数包,或者最后一条函数标记有包尾标志;组合状态:当前缓冲区内至少有一个函数在函数包中且该函数包没有被标记为包尾;函数包输出状态:完成一个函数包,开始新的函数包。在空闲状态下,有函数输入时,且组合先决条件判断子模块使能状态机,将输入的函数放入队列头指针的位置,跳转到组合状态。在组合状态下,当前状态机被使能,且有函数输入,如果函数的操作符是矩阵点积或者二维卷积,跳转到函数包输出状态,否则从局部存储器资源中分配一个资源,用该资源号,替换输入函数中的变量参数和函数包中的返回值,并将该输入函数写入队列头指针的位置,将头指针的位置,资源号,替换的地址,及变量参数号写入历史函数包尾列表中并将该项有效位置1。在函数包输出状态下,将当前队列最后一个函数的包尾标志置1,将资源分配重置为0,将历史函数包列表的所有表项的有效位置0,跳转到空闲状态。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

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