一种网络处理器微引擎的多发射指令并行处理方法及装置与流程

文档序号:11133550阅读:399来源:国知局
一种网络处理器微引擎的多发射指令并行处理方法及装置与制造工艺

本发明涉及网络处理器技术,尤其涉及一种网络处理器微引擎(ME,Micro Engine)的多发射指令并行处理方法与装置。



背景技术:

为了满足未来网络发展的需要,提高路由器的性能,处于因特网(Internet)骨干位置的核心路由器进行了一个又一个的技术变革。尤其在高端路由器市场,网络处理器以其杰出的报文处理性能及可编程性已经成为构成路由转发引擎不可替代的部分。

在网络处理器系统中,ME是网络处理器的核心部件,负责根据微码指令(Microcode Instructions)完成对报文的解析与处理。因此,微引擎的处理性能是网络处理器的重要参数,决定了网络处理器整体的性能表现。

现有的微引擎技术中,传统的单发射指令流水线,每次只能处理一条指令,完成逻辑计算/跳转/数据搬移中的一类操作,这就造成很多其他的执行单元处于空闲状态,内核的资源没有充分利用起来,即微引擎性能没有最大化。

现有的多发射指令流水线,主要采用超长指令集技术。用户在编写微码时,根据需求,尽量在一条超长指令中尽可能多将不同的可执行单元利用起来,提高指令并行性。这种方案最主要依靠在预编译阶段,由用户来完成执行单元的并行使用,易增加用户编程的复杂度,从而增加了人力成本。另外,超长指令的存储需要更大的指令存储器,增加了芯片成本。



技术实现要素:

为解决上述技术问题,本发明实施例提供了一种网络处理器微引擎的多发射指令并行处理方法及装置。

本发明实施例提供的网络处理器微引擎的多发射指令并行处理方法包括:

对指令间的相关性进行判断和标记,根据所述标记判断是否并行发射指令;

当并行发射指令时,利用并行解码单元对所述指令进行解析,得到各个指令的指令类型和源操作数的地址;

根据所述指令的源操作数的地址,在多端口内核寄存器中获取源操作数;

根据所述指令的指令类型,为所述指令分配相应的可执行单元对所述源操作数进行处理;

将处理结果存储至多端口内核寄存器中。

本发明实施例中,所述对指令间的相关性进行判断和标记,包括:

判断前后两条指令的目的寄存器是否在同一个区域;

当前后两条指令的目的寄存器不在同一个区域时,判断前后两条指令的目的寄存器是否存在数据冒险;

当前后两条指令的目的寄存器不存在数据冒险时,判断前后两条指令的指令类型是否不同;

当前后两条指令的指令类型不同时,判断前一条指令是否为跳转指令;

当前一条指令不是跳转指令时,确定两条指令不相关,并在后一条指令上置上不相关标记。

本发明实施例中,所述根据所述标记判断是否并行发射指令,包括:

当所述后一条指令置有不相关标记时,一个线程并行发射前后两条指令。

本发明实施例中,所述多端口内核寄存器按照线程分为两组寄存器,每组寄存器包括4个寄存器单元;一条指令的两个源操作数分别在两个不同的寄存器单元中;一个线程的两条指令的目的操作数分别在两个不同的寄存器单元中;

所述多端口内核寄存器具有8个数据读口和4个数据写口,同时支持四条指令访问,每条指令访问两个源操作数和一个目的操作数。

本发明实施例中,所述指令的指令类型大类分为逻辑计算类指令、数据上传/下载类指令、跳转类指令;每一指令类型大类中又包括多个指令小类;每个线程对应一组可执行单元,包括:逻辑计算类执行单元、数据上传/下载类执行 单元、跳转类执行单元;

所述根据所述指令的指令类型,为所述指令分配相应的可执行单元,包括:

当一个线程的两条指令大类不一致时,将各组的指令分配到各自对应的可执行单元;

当一个线程的两条指令大类一致且指令小类不一致时,根据以下三种情况处理:

指令大类属逻辑计算类指令时,线程内分配各自的逻辑计算类执行单元;

指令大类属上传/下载类指令时,线程内分配各自的数据上传/下载类执行单元;

其中一条指令属跳转类指令时,按约束分配各自的可执行单元。

本发明实施例提供的网络处理器微引擎的多发射指令并行处理装置包括:

编译单元,用于对指令间的相关性进行判断和标记,根据所述标记判断是否并行发射指令;

并行解码单元,用于当并行发射指令时,并行对所述指令进行解析,得到各个指令的指令类型和源操作数的地址;

读取单元,用于根据所述指令的源操作数的地址,在多端口内核寄存器中获取源操作数;

指令分配单元,用于根据所述指令的指令类型,为所述指令分配相应的可执行单元对所述源操作数进行处理;

写入单元,用于将处理结果存储至多端口内核寄存器中。

本发明实施例中,所述编译单元,还用于判断前后两条指令的目的寄存器是否在同一个区域;当前后两条指令的目的寄存器不在同一个区域时,判断前后两条指令的目的寄存器是否存在数据冒险;当前后两条指令的目的寄存器不存在数据冒险时,判断前后两条指令的指令类型是否不同;当前后两条指令的指令类型不同时,判断前一条指令是否为跳转指令;当前一条指令不是跳转指令时,确定两条指令不相关,并在后一条指令上置上不相关标记。

本发明实施例中,所述编译单元,还用于当所述后一条指令置有不相关标 记时,一个线程并行发射前后两条指令。

本发明实施例中,所述多端口内核寄存器按照线程分为两组寄存器,每组寄存器包括4个寄存器单元;一条指令的两个源操作数分别在两个不同的寄存器单元中;一个线程的两条指令的目的操作数分别在两个不同的寄存器单元中;

所述多端口内核寄存器具有8个数据读口和4个数据写口,同时支持四条指令访问,每条指令访问两个源操作数和一个目的操作数。

本发明实施例中,所述指令的指令类型大类分为逻辑计算类指令、数据上传/下载类指令、跳转类指令;每一指令类型大类中又包括多个指令小类;每个线程对应一组可执行单元,包括:逻辑计算类执行单元、数据上传/下载类执行单元、跳转类执行单元;

所述指令分配单元,还用于当一个线程的两条指令大类不一致时,将各组的指令分配到各自对应的可执行单元;当一个线程的两条指令大类一致且指令小类不一致时,根据以下三种情况处理:指令大类属逻辑计算类指令时,线程内分配各自的逻辑计算类执行单元;指令大类属上传/下载类指令时,线程内分配各自的数据上传/下载类执行单元;其中一条指令属跳转类指令时,按约束分配各自的可执行单元。

本发明实施例的技术方案中,首先通过编译单元完成指令间相关性的判断和标记,能够降低微码人员编程的复杂度;根据标记判断是否并行发射指令;当并行发射指令时,利用并行解码单元对所述指令进行解析,得到各个指令的指令类型和源操作数的地址,实现了多发射指令的并行解析;然后,根据所述指令的源操作数的地址,在多端口内核寄存器中获取源操作数;根据所述指令的指令类型,为所述指令分配相应的可执行单元对所述源操作数进行处理;将处理结果存储至多端口内核寄存器中。独特的多端内核寄存器结构能够很好的支持多条指令并行处理,并且分配相应的可执行单元也可对所述源操作数进行并行处理,极大的提升了微引擎的性能。

附图说明

图1为本发明实施例的网络处理器微引擎的多发射指令并行处理方法的流程示意图;

图2为本发明实施例的多发射指令并行处理的原理图;

图3为本发明实施例的判断和标记指令间相关性的流程图;

图4为本发明实施例的流水线读取源操作数和回写目的寄存器的流程图;

图5为本发明实施例的多端口内核寄存器的结构图;

图6为本发明实施例的流水线并行处理指令的流程图;

图7为本发明实施例的并行解码单元和指令分配单元的结构图;

图8为本发明实施例的网络处理器微引擎的多发射指令并行处理装置的结构组成示意图。

具体实施方式

本发明实施例的一种网络处理器微引擎的多发射指令并行处理方法与装置,通过编译单元完成指令间相关性的判断和标记;设计了独特的多端口内核寄存器结构;采用并行解码单元和可执行单元完成多发射指令的并行处理。为使本发明实施例的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明实施例进行详细说明。

图1为本发明实施例的网络处理器微引擎的多发射指令并行处理方法的流程示意图,如图1所示,所述网络处理器微引擎的多发射指令并行处理方法包括以下步骤:

步骤101:对指令间的相关性进行判断和标记,根据所述标记判断是否并行发射指令。

本发明实施例中,所述指令间的相关性,包括:

一个线程前后两条指令间是否存在数据冒险、是否共用源操作数、是否共用目的操作数、是否共用同一个可执行单元的情况,只要存在其中一种情况,那么就判定前后两条指令存在相关性,否则不存在相关性。前后指令是否存在 相关性,决定了这两条指令在一个线程中是否可以被同时发射,并行执行。

本发明实施例支持同时调度两个线程执行,即线程A和线程B。

编译单元在编译时,判断前后两条指令的相关性,当前后两条指令不相关时,将指令的不相关标记置为有效。每个线程在调度时,根据不相关标记决定同时发射一条指令还是发射两条指令。

通过利用指令间不相关性,可以最大程度上完成指令并行,发挥执行单元的功效,减少执行单元空闲造成的性能损失,从而提高ME整体性能。

在一实施方式中,所述对指令间的相关性进行判断和标记,包括:

判断前后两条指令的目的寄存器是否在同一个区域;

当前后两条指令的目的寄存器不在同一个区域时,判断前后两条指令的目的寄存器是否存在数据冒险;

当前后两条指令的目的寄存器不存在数据冒险时,判断前后两条指令的指令类型是否不同;

当前后两条指令的指令类型不同时,判断前一条指令是否为跳转指令;

当前一条指令不是跳转指令时,确定两条指令不相关,并在后一条指令上置上不相关标记。

本发明实施例中,所述根据所述标记判断是否并行发射指令,包括:

当所述后一条指令置有不相关标记时,一个线程并行发射前后两条指令。

步骤102:当并行发射指令时,利用并行解码单元对所述指令进行解析,得到各个指令的指令类型和源操作数的地址。

参照图2,指令进入流水线解码级,进行指令解析201。

为支持同时最多4条指令处理,本发明实施例提供了4个并行的解码单元。解码单元对指令进行解码,解析出指令类型。

本发明实施例中,所述指令类型包括:

指令大类分为逻辑计算类指令、数据上传/下载类指令、跳转类指令,每一指令大类中又包括多个指令小类,例如:逻辑计算类指令中包括加法运算、剑法运算、与或逻辑运算等,每个指令小类有自己单独的指令编码。本发明实施 例所述的指令类型主要是指每条指令的指令小类。

同时,并行解码单元还解析出指令所需的源操作数在多端口内核寄存器中的地址。

步骤103:根据所述指令的源操作数的地址,在多端口内核寄存器中获取源操作数。

如图2所示,取得源操作数在多端口内核寄存器中的地址后,访问多端口内核寄存器取得源操作数202。

为了支持最大四条指令同时被执行,考虑到源操作数/目的操作数的访问,需要将多端口内核寄存器做成多端口的结构。本发明实施例的多端口内核寄存器提供8个数据读口和4个数据写口,可以同时支持四条指令访问,每条指令可以访问两个源操作数和一个目的操作数。

本发明实施例中,所述多端口内核寄存器按照线程分为两组寄存器,每组寄存器包括4个寄存器单元;一条指令的两个源操作数分别在两个不同的寄存器单元中;一个线程的两条指令的目的操作数分别在两个不同的寄存器单元中。

步骤104:根据所述指令的指令类型,为所述指令分配相应的可执行单元对所述源操作数进行处理。

如图2所示,从多端口内核寄存器中取得源操作数后,指令分配单元开始根据指令类型进行可执行单元的分配,使处理性能最大化203。

本发明实施例中,所述可执行单元,包括:逻辑计算类执行单元、数据上传/下载类执行单元、跳转类执行单元。本发明实施例所述的这三类执行单元,对应的完成所述三大类指令的执行功能。本发明实施例提供两组逻辑计算类执行单元、两组数据上传/下载类执行单元和两组跳转类执行单元。

本发明实施例所述的流水线最多有4条指令同时执行,指令分配单元根据各自的指令类型将指令分配到各自的可执行单元,并且保证相同类型的指令分配到不同组的可执行单元,不能产生资源冲突引发结构冒险。

本发明实施例中的指令类型大类分为逻辑计算类指令、数据上传/下载类指令、跳转类指令;每一指令类型大类中又包括多个指令小类;每个线程对应一 组可执行单元,包括:逻辑计算类执行单元、数据上传/下载类执行单元、跳转类执行单元;为此,所述根据所述指令的指令类型,为所述指令分配相应的可执行单元,包括:

当一个线程的两条指令大类不一致时,将各组的指令分配到各自对应的可执行单元;

当一个线程的两条指令大类一致且指令小类不一致时,根据以下三种情况处理:

指令大类属逻辑计算类指令时,线程内分配各自的逻辑计算类执行单元;

指令大类属上传/下载类指令时,线程内分配各自的数据上传/下载类执行单元;

其中一条指令属跳转类指令时,按约束分配各自的可执行单元。

步骤105:将处理结果存储至多端口内核寄存器中。

如图2所示,指令分配到各自的可执行单元并完成执行,执行后的处理结果需要回写到指定的目的寄存器,如果是跳转类指令那么将从指令存储器中重新取址204。

本发明实施例的内核寄存器提供4个数据写口,最多支持4条指令完成数据回写。操作结果回写后,一条指令也就处理完毕。

编译单元在编译时,判断前后两条指令的相关性,相关标记决定了一个线程可以同时发射一条指令还是发射两条指令。图3为本发明实施例的判断和标记指令间相关性的流程图,该流程包括以下步骤:

步骤301:判断前后两条指令的目的寄存器是否在同一个区域。

一具体实施例中,所述同一个区域,主要是:

多端口内核寄存器可以为每个线程提供32个寄存器,编号依次为寄存器0到寄存器31,每个寄存器空间为4字节。将其中的寄存器0到寄存器15分为一个区域,寄存器16到寄存器31分为另外一个区域。

如果前后两条指令的目的寄存器在同一个区域,那么就判定为前后指令相关,如图3所示,不符合条件,编译单元放弃置不相关标记。如果前后两条指 令的目的寄存器不在同一个区域,那么就继续进行步骤302的判定。

步骤302:判断前后两条指令的目的寄存器是否存在数据冒险。

一具体实施例中,所述数据冒险,主要是:后一条指令的源操作数寄存器是否为前一条指令的目的寄存器。

如果前后两条指令存在数据冒险,那么就判定为前后指令相关,如图3所示,不符合条件,编译单元放弃置不相关标记。如果前后两条指令不存在数据冒险,那么就继续进行步骤303的判定。

步骤303:判断前后两条指令的指令类型是否不同,不使用同一个可执行单元。

这里判断的指令类型除跳转类指令外,都是指令小类,如果前后两条指令小类相同,那么就判定为前后指令相关,如果同属跳转类指令,那么只需判断指令大类,就判定为前后指令相关,如图3所示,不符合条件,编译单元放弃置不相关标记。如果前后两条指令类型不同,至此,就判定前后两条指令不相关,在后一条指令中置上不相关标记。

步骤304:判断前一条指令是否为跳转指令。

步骤305:如果前一条指令为跳转指令,那么就判定为前后指令相关,不符合条件,编译单元放弃置不相关标记。

步骤306:如果前一条指令不为跳转指令,就判定前后两条指令不相关,在后一条指令中置上不相关标记。

本发明实施例中,指令需要访问多端口内核寄存器取得源操作数和回写目的寄存器,图4为本发明实施例的流水线读取源操作数和回写目的寄存器的流程图,该流程包括以下步骤:

步骤401:按线程分配,将多端口内核寄存器分为两组。

如图5所示,本发明实施例的多端口内核寄存器模块分为两组,分别为线程A和线程B一组寄存器,每组寄存器提供4个寄存器单元。

一具体实施例中,所述线程A的4个寄存器单元,包括:一组寄存器0到寄存器15为寄存器单元0,另一组寄存器0到寄存器15为寄存器单元2;一组 寄存器16到寄存器31为寄存器单元1,另一组寄存器16到寄存器31为寄存器单元3。线程B的4个寄存器单元划分规则和线程A相同,分别为寄存器单元4、5、6、7。

步骤402:组内,根据约束和指令读取源操作数。

按约束规定,一条指令的两个源操作数尽量分别使用两个区域中的操作数,即一个在寄存器0到寄存器15中,另一个在寄存器16到寄存器31中。

如图5所示,读端口0和读端口1提供给指令0完成源操作数的读取,依次类推,读端口2和读端口3提供给指令1,读端口4和读端口5提供给指令2,读端口6和读端口7提供给指令3,这样一条指令就可以访问全部的32个寄存器,也可以取得两个不同的操作数,同时可以充分的利用内核寄存器读口,最大支持四条指令同时访问多端口内核寄存器。

步骤403:组内,根据约束和指令将操作结果回写到目的寄存器。

按约束规定,一个线程的两条指令的目的寄存器也分别使用两个区域中的寄存器。

如图5所示,写端口0提供给指令0,完成操作数结果到目的寄存器的回写,依次类推,写端口1提供给指令1,写端口2提供给指令2,写端口3提供给指令3,这样就可以充分的利用内核寄存器写口,最大支持四条指令同时访问内核寄存器。

图6为本发明实施例的流水线并行处理指令的流程图,该流程包括以下步骤:

步骤601:指令并行解码,解析出指令类型。

如图7所示,4个解码单元分析对4条指令进行解码,解析出各自的指令类型。本专利所述实施例所述的三类指令类型,逻辑计算类指令、数据上传/下载类指令、跳转类指令。

步骤602:根据指令类型,对可执行单元进行分组。

如图7所示,本发明实施例提供两组逻辑计算类执行单元、两组数据上传/下载类执行单元和两组跳转类执行单元,为线程A和B分别提供一组逻辑计算 类执行单元、数据上传/下载类执行单元和跳转类执行单元。

这里主要分类的规则,主要是针对一个线程的两条指令大类一样而指令小类不一致的情况,如果前后两条指令的指令大类不一致,那么只需要将各组的指令分配到各自对应的可执行单元即可,不会产生冲突。

两条指令大类一样而指令小类不一致时,分三种情况,具体地如下:

第一种情况:指令大类属逻辑计算类指令,小类不一致,线程内分配各自的计算单元。

一个线程的两条指令如果都是逻辑计算类指令,由于编译单元的约束,这两条指令小类不一致,所以只需要将一个线程根据指令类型分配到各自所需的计算单元即可。

第二种情况:指令大类属上传/下载类指令,小类不一致,线程内分配各自的数据上传/下载单元。

一个线程的两条指令如果都是指令大类属上传/下载类指令,由于编译单元的约束,这两条指令小类不一致,所以只需要将根据指令类型分配到各自所需的计算单元即可。

第三种情况:其中一条指令属跳转类指令,按约束分配各自的执行单元。

按照编译单元约束,如果前一条为跳转指令,这时一个线程只发射一条指令,那么只给这条指令分配跳转执行单元。如果后一条为跳转指令,那么根据类型,各自分配执行单元。

步骤603:指令分配单元完成可执行单元的有效分配。

图8为本发明实施例的网络处理器微引擎的多发射指令并行处理装置的结构组成示意图,如图8所示,所述网络处理器微引擎的多发射指令并行处理装置包括:

编译单元81,用于对指令间的相关性进行判断和标记,根据所述标记判断是否并行发射指令;

并行解码单元82,用于当并行发射指令时,并行对所述指令进行解析,得到各个指令的指令类型和源操作数的地址;

读取单元83,用于根据所述指令的源操作数的地址,在多端口内核寄存器中获取源操作数;

指令分配单元84,用于根据所述指令的指令类型,为所述指令分配相应的可执行单元对所述源操作数进行处理;

写入单元85,用于将处理结果存储至多端口内核寄存器中。

所述编译单元81,还用于判断前后两条指令的目的寄存器是否在同一个区域;当前后两条指令的目的寄存器不在同一个区域时,判断前后两条指令的目的寄存器是否存在数据冒险;当前后两条指令的目的寄存器不存在数据冒险时,判断前后两条指令的指令类型是否不同;当前后两条指令的指令类型不同时,判断前一条指令是否为跳转指令;当前一条指令不是跳转指令时,确定两条指令不相关,并在后一条指令上置上不相关标记。

所述编译单元81,还用于当所述后一条指令置有不相关标记时,一个线程并行发射前后两条指令。

所述多端口内核寄存器按照线程分为两组寄存器,每组寄存器包括4个寄存器单元;一条指令的两个源操作数分别在两个不同的寄存器单元中;一个线程的两条指令的目的操作数分别在两个不同的寄存器单元中;

所述多端口内核寄存器具有8个数据读口和4个数据写口,同时支持四条指令访问,每条指令访问两个源操作数和一个目的操作数。

所述指令的指令类型大类分为逻辑计算类指令、数据上传/下载类指令、跳转类指令;每一指令类型大类中又包括多个指令小类;每个线程对应一组可执行单元,包括:逻辑计算类执行单元、数据上传/下载类执行单元、跳转类执行单元;

所述指令分配单元84,还用于当一个线程的两条指令大类不一致时,将各组的指令分配到各自对应的可执行单元;当一个线程的两条指令大类一致且指令小类不一致时,根据以下三种情况处理:指令大类属逻辑计算类指令时,线程内分配各自的逻辑计算类执行单元;指令大类属上传/下载类指令时,线程内分配各自的数据上传/下载类执行单元;其中一条指令属跳转类指令时,按约束 分配各自的可执行单元。

本领域技术人员应当理解,图8所示的网络处理器微引擎的多发射指令并行处理装置中的各单元的实现功能可参照前述网络处理器微引擎的多发射指令并行处理方法的相关描述而理解。

本发明上述实施例所述的一种网络处理器微引擎的多发射指令并行处理方法与装置,通过编译单元完成指令间相关性的判断和标记;设计了独特的支持多端口访问的内核寄存器结构;采用并行解码单元和指令分配单元完成多发射指令的并行处理。本发明实施例首先通过编译单元完成指令间相关性的判断和标记能够降低微码软件人员编程的复杂度;此外,独特的多端口访问的内核寄存器结构能够很好的支持多条指令并行处理;并行解码单元和指令分配单元实现了多发射指令的并行处理,方案实现相对简单,极大的提升了微引擎的性能。

上述各单元可以由电子设备中的中央处理器(Central Processing Unit,CPU)、数字信号处理器(Digital Signal Processor,DSP)或可编程逻辑阵列(Field-Programmable Gate Array,FPGA)实现。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备 以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

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