具有共享前端单元的处理核的制作方法

文档序号:18256941发布日期:2019-07-24 10:19阅读:178来源:国知局
具有共享前端单元的处理核的制作方法

发明领域

本发明的领域一般涉及计算科学,更具体而言,涉及具有共享前端单元的处理核。

背景

图1示出了示例性多核处理器100的架构。如在图1中观察到的,处理器包括:1)多个处理核101_1到101_N;2)互连网络102;3)末级缓存系统103;4)存储器控制器104和I/O中枢105。处理核中的每一个都包含用于执行程序代码指令的一个或多个指令执行流水线。互连网络102可以将核101_1到101_N中的每一个彼此互连并与其他组件103、104、105互连。末级缓存系统103在指令和/或数据被驱逐到系统存储器108之前充当处理器中的最后一层缓存。

存储器控制器104从/向系统存储器108读/写数据和指令。I/O中枢105管理处理器和“I/O”设备(例如,非易失性存储器设备和/或网络接口)之间的通信。端口106源于互连网络102以链接多个处理器,以便可以实现具有N以上的核的系统。图形处理器107执行图形计算。功率管理电路(未示出)作为整体管理处理器的性能和功率状态(“封装级别”)以及处理器内的诸如单个核101_1到101_N、图形处理器107等等之类的单个单元的性能和功率状态的各方面。为了方便起见,在图1中未描绘其他重要的功能块(例如,锁相环(PLL)电路)。

图2示出了图1的处理核中的一个的示例性实施例200。如在图2中观察到的,每一核都包括两个指令执行流水线250,260。每一指令执行流水线250,260都包括其自己的相应的:i)指令获取级201;ii)数据获取级202;iii)指令执行级203;以及,iv)写回级204。指令获取级201从缓存或系统存储器(如果所希望的指令不在缓存内)获取指令序列中的“接下来的”指令。指令通常操作数数据以及要对操作数数据执行的操作。数据获取级202从本地操作数寄存器空间、数据缓存或系统存储器获取操作数数据。指令执行级203包含一组功能单元,其中任何一个都被调用,以执行由任何一个指令对操作数数据调用的特定操作,操作数数据是由指令所指定的,并由数据获取级202获取的。写回级204通常通过将结果写入到耦合到相应的流水线的本地寄存器空间,来“提交”执行的结果。

为了避免对较早的“飞行中的”指令没有任何依赖关系的指令的不必要的等待时间,许多现代的指令执行流水线具有增强的数据获取和写回级以实行“无序”执行。这里,流水线250,260的相应的数据获取级202被增强,以包括数据相依性逻辑205,以识别指令何时没有对较早的飞行中的指令的依赖关系,并准许其在例如其数据还没有被获取的较早的指令的“前头”向指令执行级203发出。

此外,写回级204还被增强以包括重排序缓冲器206,该重排序缓冲器206将无序执行的指令的结果重排序为其正确的顺序,并将它们的引退等待时间到物理寄存器组,直到指令执行结果的正确地排序的连续序列引退。

还观察到增强的指令执行流水线在指令获取级201内包括指令推测逻辑207。推测逻辑207猜测指令序列将采取什么条件分支方向或跳转,并开始获取从该方向或跳转流出的指令序列。然后,由执行流水线的其余级处理推理性指令。

附图

本发明是作为示例说明的,而不仅限制于各个附图的图形,在附图中,类似的参考编号表示类似的元件,其中:

图1示出了处理器(现有技术);

图2示出了指令执行流水线(现有技术);

图3示出了具有共享前端单元的处理核;

图4示出了由图3的处理核执行的方法;

图5示出了其相应的核具有共享前端单元的处理器;

图6示出了由其相应的核具有共享前端单元的处理器组成的计算系统。

详细描述

在半导体芯片上制造的逻辑晶体管的数量可以被视为半导体芯片的用于处理信息的固定资源。上文参考图1和2所讨论的处理器和处理核架构的特征是,强调缩短由处理器处理的指令的等待时间。换言之,图1和2的处理器设计的固定资源,诸如对每一个流水线作出的无序执行增强,专用于通过带有最小的等待时间的流水线运行线程。

然而,逻辑电路专用于当前活跃的线程的加速,是以处理器在任何时刻能够同时处理的线程的总数为代价来实现的。换言之,如果以不同的方式强调处理器的逻辑电路单元,则处理器能够比图1的处理器(其处理核是根据2的架构设计的)同时处理更多线程。例如,如果移除无序执行增强的逻辑电路资源,则“被腾出的”逻辑电路可以重新用于实例化处理器内的更多执行单元。利用更多执行单元,处理器可以同时执行更多指令,并由此的更多线程。

图3示出了在多核处理器内可以实例化多次(例如,对于每一个处理核,一次)的处理核300的架构的实施例。图3的处理核架构被设计有比典型的标准处理核更多执行单元,以便提高处理核的总的吞吐量(即,提高处理核可以同时处理的线程的数量)。如在图3中观察到的,处理核架构包括耦合到多个处理单元302_1至302_N的共享前端单元301。在一个实施例中,处理单元302_1到302_N中的每一个都包含能够支持整个指令集,诸如整个x86指令集或其他通用指令集(与诸如数字信号处理器(DSP)或加速器的典型的指令集之类的比较有限的特定用途指令集相反)的至少一组功能单元(例如,至少一组功能单元303)。

如在图3中观察到的,共享前端单元301获取并接收要由处理核300处理的指令,解码接收到的指令,并将经解码的指令派遣到它们的合适的处理单元。在一个实施例中,共享前端单元获取正在由处理核的所有通用处理单元执行的所有线程的所有指令。

将特定线程分配给特定处理单元,并且每一处理单元,如下面更详细地描述的,是多线程的(即,可以同时和/或并发地处理一个以上的线程)。如此,如果每一处理单元都可以同时/并发地执行高达M个硬件线程,并且有N个处理单元,则处理核可以同时/并发地执行高达M*N个硬件线程。这里,乘积M*N可以大于可以在典型的处理核中同时执行的硬件线程的典型的数量(例如,大于当前密度中的8或16)。参考共享前端单元301,共享前端单元包含程序控制逻辑电路311,用以标识并获取每一个线程的合适的“接下来的”指令。这里,程序控制逻辑电路311包括每一个线程的指令指针312_1到312_M*N,以及指令获取电路313。注意,图3指出有M*N个指令指针以反映对于M*N个不同的硬件线程的支持。对于每一个硬件线程,指令获取电路313首先针对在线程的指令指针内标识的指令查看指令缓存314。如果在指令缓存314内没有发现搜寻的指令,则从程序存储器315中获取它。在各实现中,可以以每个硬件线程为基础存储指令块,并从缓存和/或存储器中获取它们。

个体硬件线程可以由指令获取电路313以时间切片为基础来服务(例如,合理的轮询(round robin)方法)。进一步,指令获取电路313可以被并行化为并行地获取不同的硬件线程的指令的类似的/相同块(例如,指令获取电路的每一并行块服务指令指针的不同的子集)。

然而,由于可能比传统的处理器较慢地处理单个硬件线程(例如,由于每个线程等待时间缩减电路没有被实例化以有利于更多处理单元,如上文所描述的),因此,可以设想,某些实现可能不需要并行指令获取能力,或至少包括少于N个并行指令获取通道(例如,N/2并行指令获取块)。相应地,在这些中的任何一种情况下,前端单元301的某些组件由处理单元302_1到302_N中的至少两个共享。

在又一实施例中,程序控制逻辑电路311还包括每一个硬件线程的指令转换后备缓冲器(ITLB)电路316。如本领域理解的,ITLB将从程序存储器315接收到的指令地址转换为物理存储器中指令实际驻留的实际地址。

在获取指令之后,它被指令解码器317解码。在一个实施例中,每一个处理单元有指令解码器(即,有N个解码器)。再次,例如,在以较低等待时间执行线程为代价增大处理单元的数量N的情况下,每个指令解码器可以有一个以上的处理单元。可以想象地,对于所有处理单元,甚至可以有一个解码器。

指令通常指定:i)要以“操作码”的形式执行的操作;ii)可以发现操作的输入操作数的位置(寄存器和/或存储器空间);以及,iii)将存储操作的结果的位置(寄存器和/或存储器空间)。在一个实施例中,指令解码器317不仅通过将指令分解为其操作码和输入操作数/结果存储位置,而且还通过将操作码转换为微指令序列,来解码指令。

如本领域理解的,微指令类似于执行单元将执行以便执行指令的功能的小软件程序(微代码)。如此,指令操作码被转换为对应于指令的功能操作的微代码。通常,操作码作为查询参数被输入到被配置成作用就象查询表一样的电路318(例如,被配置为查询表的只读存储器(ROM))。查询表电路318利用操作码的指令的微代码,对输入操作码作出响应。如此,在一个实施例中,在处理核中每一个处理单元有ROM(或再次,每个微代码ROM,有一个以上处理单元,因为与传统的处理器相比,处理单元的每线程等待时间已经变弱)。

然后,与其输入操作数和结果的经解码的指令的寄存器/存储器地址一起,将经解码的指令的微代码分派到处理单元,该处理单元已经分配给经解码的指令是其分量的硬件线程。注意,在两个不同的处理单元上运行的两个不同的硬件线程的两个不同的指令的相应的微代码可以同时被派遣到它们的相应的处理单元。

在一个实施例中,如上文所讨论的,每一处理单元302_1到302_N都可以同时和/或并发地执行一个以上的硬件线程。例如,每一处理单元都可以具有X组执行单元(其中,X=1或更大),其中,每一组执行单元都能够支持诸如整个x86指令集之类的整个指令集。可另选地或组合地,每一处理单元都可以并发地(而不是同时)执行多个软件线程。这里,并发执行,而不是同时执行,对应于在一段时间内通过在由处理单元支持的软件线程之间交替处理资源执行多个软件线程(例如,以轮询方式给每一个软件线程供给资源)。如此,在一个实施例中,在一个时间窗口内,单一处理单元可以通过作为处理单元的硬件线程,将软件线程以及它们的相关联的状态信息切换进出处理单元,并发地执行多个软件线程。

如在图3中观察到的,每一处理单元都具有微代码缓冲区320,用于存储从指令解码器317派遣的微代码。可以将微代码缓冲区320分区,以便对于由处理单元支持的每一个硬件线程,存在单独的FIFO排队空间。输入操作数和结果地址还以对准方式排队,或以别的方式与它们的指令的相应的微代码相关联。

每一处理单元都包括耦合到其内部功能单元组303的寄存器空间321,用于保存功能单元组303负责执行的线程的操作数/结果数据。如果单个功能单元组将并发地执行多个硬件线程,则可以将功能单元组303的寄存器空间321分区,以便对于功能单元组303将并发地执行的每一个硬件线程,有一个寄存器组分区。如此,功能单元组303对于功能单元组正在并发地执行的每一个唯一硬件线程,在特定寄存器分区“之外操作”。

如在图3中观察到的,每一处理单元302_1到302_N都包括寄存器分配逻辑322,用以为处理单元正在并发地和/或同时执行的每一个相应的硬件线程的指令分配寄存器。这里,对于每个处理单元具有一个以上的功能单元组的实现,可以有微代码缓冲区电路320和寄存器分配电路322的多个实例(例如,处理单元的每一功能单元组,一个实例),或可以有馈给一个以上的功能单元组的一个微代码缓冲区和寄存器分配电路(即,对于两个或更多功能单元组,一个微代码缓冲区320和寄存器分配电路322)。寄存器分配逻辑电路322包括数据获取逻辑,用于从与操作数的相应的指令被指向的功能单元相关联的寄存器空间321获取操作数(由指令调用的)。数据获取逻辑电路可以耦合到系统存储器323,以显式地从系统存储器323获取数据操作数。

在一个实施例中,每一功能单元组303都包括:i)包含用于执行整数数学/逻辑指令的功能单元的整数功能单元集群;ii)包含用于执行浮点数学/逻辑指令的功能单元的浮点功能单元集群;iii)包含用于执行SIMD数学/逻辑指令的功能单元的SIMD功能单元集群;以及,iv)包含用于执行数据存储器访问(对于整数和/或浮点和/或SIMD操作数和/或结果)的功能单元的存储器访问功能单元集群。存储器访问功能单元集群可以包含一个或多个数据TLB,以对于其相应的线程执行虚拟到物理地址转换。

特定指令的微代码连同由与寄存器分配逻辑322相关联的获取电路为指令获取的操作数数据一起从其相应的微代码缓冲区320发到合适的功能单元。功能单元的执行的结果被写回到与执行单元相关联的寄存器空间321。

在又一实施例中,每一处理单元都包含耦合到存储器访问集群的功能单元的数据缓存329。存储器访问集群的功能单元还耦合到系统存储器323,以便它们可以从存储器获取数据。值得注意的是,上文所描述的每一寄存器组分区都可以被进一步分区为耦合到对应的功能单元集群的单独的整数、浮点以及SIMD寄存器空间。

根据一种情况,操作系统和/或虚拟机监视器(VMM)软件将特定软件线程分配到特定处理单元。共享前端逻辑301和/或操作系统/VMM能够动态地将软件线程分配到特定处理单元或功能单元组,以作为硬件线程来激活线程。在各实施例中,每一处理单元都包括“上下文切换”逻辑(未示出),以便每一处理单元都比起它可以同时或并发地作为硬件线程支持,可分配更多软件线程。即,分配给处理单元的软件线程的数量可以超出处理单元目前能够执行(或者同时或者并发)的“活跃”硬件线程的数量,如由线程的上下文信息在处理单元的寄存器空间内的存在所证明的。

这里,例如,当软件线程作为硬件线程变为活跃时,其上下文信息(例如,其各种操作数的值和控制信息)位于耦合到执行线程的指令的功能单元组303的寄存器空间321内。如果作出将线程从活跃转换为非活跃状态的决定,则从此寄存器空间321读出线程的上下文信息,并存储在别处(例如,系统存储器323)。在线程的寄存器空间现在被“腾出”的情况下,可以将其上下文信息驻留,例如,在系统存储器232中的另一“非活跃”软件线程的上下文信息写入到寄存器空间321。结果,其他线程从“非活跃”转换到“活跃”,其指令作为前进的硬件线程来执行。

如上文所讨论的,可以以最大化任何一个特定线程的等待时间为代价取得容纳大量的硬件线程的逻辑电路的“空间”。如此,用于“加速”硬件线程的执行的任何一个机制以及相关联的逻辑电路可能不存在于共享前端或处理单元电路中。这样的被消除的块可包括下列各项中的任何一项或多项:1)推测逻辑(例如,分支预测逻辑);2)无序执行逻辑(例如,寄存器重命名逻辑和/或重排序缓冲区和/或数据相依性逻辑);3)用于对于单一硬件线程动态地实行并行指令发出的超级标量逻辑。

利用图3的处理核架构的多个实例构建的多核处理器可包括上文参考图1所讨论的周围的特征中的任何一个/全部。

图4示出了描述上文所描述的处理核的方法的流程图。根据图4的方法,在共享前端单元中获取401和解码不同的硬件线程的第一和第二指令。解码指令,从共享前端单元402向不同的处理单元发出指令的相应的微代码和操作数/结果地址。相应的处理单元获取它们的相应的操作数的数据,并向相应的功能单元403发出接收到的微代码和相应的操作数。然后,功能单元执行它们的相应的指令404。

图5示出了具有多个处理核550_1到550_N的处理器500的实施例,每一处理核都具有相应的共享前端单元511_1,511_2,...511_N(带有相应的指令TLB 516_1,516_2,...516_N)和具有对应的微代码缓冲区的相应的处理单元(例如,核501_1的处理单元内的微代码缓冲区520_1,520_2,等等)。每一核还包括一个或多个缓存级别550_1,550_2,550_N以个体地和/或相应的核作为整体地,缓存每一处理单元的指令和/或数据。核501_1,501_2,...501_N通过互连网络502彼此耦合,该互连网络502还将核耦合到一个或多个缓存级别(例如,末级缓存503),它们缓存核501_1,501_2...501_N的指令和/或数据),以及耦合到例如系统存储器508的“切片”的存储器控制器504。在图5中还可以包括诸如图1的组件中的任何一个之类的其他组件。

图6示出了诸如利用具有上文在图5中所讨论的特征的多个处理器600_1到600_z实现的计算机之类的计算系统的实施例。多个处理器600_1到600_z通过网络彼此连接,该网络还将处理器耦合到多个系统存储器单元608_1,608_2,非易失性存储器单元610(例如,磁盘驱动器)和外部(例如,因特网)网络接口611。

在上述说明书中,已经参考特定示例性实施例描述了本发明。然而,显然可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本发明的更宽泛精神和范围。因此,说明书和附图应被认为是说明性而非限制性意义。

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