预解码用于执行的指令的方法及装置的制作方法

文档序号:6614297阅读:228来源:国知局
专利名称:预解码用于执行的指令的方法及装置的制作方法
技术领域
本发明 一般涉及流水线处理器,尤其是涉及到使用彼此延迟的执行单 元的一种级联排列的处理器。
背景技术
典型地,计算机系统包含几个集成电路(IC),包括一个或多个用于处理计算机系统中的信息的处理器。现代的处理器经常以流水线的方式处 理指令,按一系列步骤执行每条指令。典型的,每个步骤由流水线中一个 不同的级(硬件电路)执行,每个流水线级在一个给定的时钟周期内按其 步骤执行一条不同的指令。因而,如果一个流水线满负荷,那么每个时钟 周期就要处理一条指令,从而增加了吞吐量。
来看一个简单的例子, 一个流水线可包括三级加载(从存储器读取 指令),执行(执行指令),以及存储(存储结果)。在第一个时钟周期 内,第一条指令i^流水线加载级。在笫二个时钟周期内,该第一指令进 入执行级,同时释》文了加载级来加载第二条指令。在第三个时钟周期内, 第一条指令的执行结果可以由存储级存储,同时执行第二条指令并加栽第 三条指令。
不幸的是,由于在一个典型指令流中固有的依赖性,当执行一条指令 的执行单元在等待前一条指令执行产生的结果时,传统的指令流水线通常 会遭受停止(stall)(此时流水线级并没有执行)。例如, 一条加载指令 可能依赖于前一条指令(比如,另一条加载指令,或者对基址添加偏移) 来提供将被加载的数据的地址。再例如, 一条乘法指令可能依赖于一条或 多条先前的加载指令的执行结果来作为其操作数之一。在这两种情况下,
一个传统的指令流水线都将停止至先前指令的结果可用时。停止可能持续几个时钟周期,例如,如果先前的指令(后续的指4^赖于此指令)将不 存在于一级高速緩存中的数据作为目标(导致一级"高速緩存缺失,,), 并且必须对相对慢的二级高速緩存进行访问的话。因而,这样的停止由于 流水线的未充分利用必将而导致性能大幅降低。
相应的,需要一种改进的以流水线方式处理指令的机制,优选的是减 少停止的机制。

发明内容
一个实施例提供了一种在处理环境中预解码用于执行的指令的方法。 该方法大体上包括由处理器内核接收用于执行的第一指令行;对第一指 令行进行预解码;以及将预解码的第一指令行存储在多级高速緩存中。
一个实施例提供了 一种集成电路装置,该集成电路装置大体上包括 一个或多个处理器内核,多级高速緩存,预解码器以及高速緩存控制电路。 预解码器大体上被配置为读取指令行、预解码指令行并将预解码的指令行 发送至处理器内核以便执行。高速緩存控制电路大体上被配置为将预解码的指令行存储在多级高速緩存中。
一个实施例提供了 一种集成电路装置,该集成电路装置大体上包括 多级高速緩存, 一个或多个级联延迟执行流水线单元,以及预解码及调度 电路。该一个或多个级联延迟执行流水线单元中的每一个至少具有第一和 第二执行流水线,其中,被发送至执行流水线单元的一共同发送组中的指 令在被执行于第二执行流水线之前在第一执行流水线中被执行,以及,转 发路径,其用于将在第一执行流水线中执行第一指令产生的结果转发至第 二执行流水线中以用于执行第二指令,其中至少第 一及第二执行流水线之 一在浮点操作数上操作。预解码及调度电路大体上被配置为接收将由流水 线单元执行的指令行,预解码指令行,以及将预解码的指令行存储在多级 高速緩存中。


为了使实现本发明上述的特征、优点及目标的方式可以被详细的理解, 将通过参考在附图中示出的实施例对本发明进行更加详细的描述(在上文 简单描述过)。
然而,要提到的是附图表示的仅仅是本发明典型的实施例,并不是要 限制其范围,本发明允许还有其他等效的实施例。
图l是示出才艮据本发明的一个实施例的系统的框图。
图2是示出根据本发明的一个实施例的计算机处理器的框图。
图3是示出根据本发明的一个实施例的处理器内核的框图。
图4A和4B对传统流水线单元与根据本发明实施例的流水线单元的性 能作了比较。
图5示出了根据本发明的实施例的示例性整数级,迟执行流水线单元。
图6示出了根据本发明的实施例用于调度;sjc送指令的示例性操作的 流程图。
图7A-7D示出了通过图5所示流水线单元的指令流。
图8示出了根据本发明的实施例的一个示例性浮点级m迟执行流水 线单元。
图9A-9D示出了通过图5所示的流水线单元的指令流。
图10示出了根据本发明的实施例的一个示例性向量级联延迟执行流 水线单元。
图11示出了在多个处理器内核间共用的一个示例性预解码器。
图12示出了可由图11的共用预解码器执行的示例性操作。
图13示出了一个示例性共用预解码器。
图14示出了一个示例性共用预解码器流水线排列。
图15示出了在多级高速緩存中共用的预解码的指令行。
图16示出了用于处理先前预解码的指令行的示例性操作。
图17示出了用于在多级高速緩存中存储预解码指令行的高速緩存层
级结构。
具体实施例方式
本发明主要提供了 一种以流水线的方式执行指令的改进技术,这种技 术可以减少在执行依赖性指令时产生的停止。可以通过使用 一个含有彼此 延迟的执行单元的级联流水线排列来减少停止。通过调度依赖性指令在不 同的流水线中在不同的时间执行,这种级联的延迟流水线排列允许在一个 共同的发送组中发送依赖性指令。
例如,第一条指令可以被调度在第一个"较早"或"较少延迟"的流 水线中执行,而第二条指令(依赖于执行第一条指令得到的结果)可以被 调度在第二个"较延迟"或"较多延迟"的流水线中执行。通过调度第二 条指令在一个相对第 一个流水线延迟的流水线中执行,第 一条指令的结果 可以在刚好要执行第二条指令的时候可用。虽然第二条指令的执行仍然延 迟至第一条指令的结果可用时,但是后续的发送组可以在下一个周期中进 入级联流水线,从而增加了吞吐量。换言之,这样的延迟仅仅在第一个发 送组中可以"看到",并对后续的发送组"隐藏",从而允许在每个流水 线周期发送不同的发送组(即使含有依赖性指令)。
在下文中,将会参考本发明的实施例。然而,应当理解本发明并不限 于特定的描述的实施例。相反,下述特征及元素的任何组合,无论是否涉 及到不同的实施例,都被认为实施和实现了本发明。更进一步地,在各种 实施例中,本发明提供了比原有技术更多的优点。然而,虽然本发明的实 施例可以实现比其他可能的解决方案和/或现有技术更多的优点,但是一个 特定优点是否由一给定的实施例实现,这并不是本发明的限制。因此,下 述方面、特征、实施例及优点仅仅是说明性的,并非所附权利要求的元素 或限制,除非在权利要求中明确说明。同样地,提及"本发明"时亦不应的元素或限制,除非在权利要求中明确叙述。
下文将对附图中所示的本发明的实施例进行详细描述。这些实施例是
示例并且被足够详细地描述以传达本发明。然而,提供细节的数量并不是要限制实施例的预期变化;相反,意图是本发明包含了落入所附权利要求 中定义的本发明的精神及范围的全部修改、等价物、以及其他选择。
本发明的实施例可以与一个系统例如计算机系统一起使用,并在下文 中相对于该系统被描述。正如在这里使用的, 一个系统可以包含使用一个 处理器及一个高速緩冲存储器的任何系统,包括个人计算机、互联网电器 (internet appliance)、数字媒体设备、个人数字助理(PDA)、便携音 乐/视频播放器及视频游戏控制台。虽然高速緩冲存储器可能与使用高速 緩冲存储器的处理器位于同一芯片上,但是在一些情况下,处理器和高速 緩冲存储器可能位于不同的芯片上(例如,在不同模块中的不同芯片上或 者在单个才莫块中的不同芯片)。
示例性系统概述
图1是示出根据本发明实施例的系统100的框图。该系统100可包含 一个用于存储指令和数据的系统存储器102, 一个用于图形处理的图形处 理单元104, 一个用于与外部设备通信的1/0接口, 一个用于长期存储指 令和数据的存^i殳备108, 一个用于处理指令和数据的处理器110。
根据本发明的一个实施例,处理器110可包含一个二级高速緩存112 (和/或更高级别的高速緩存,例如三级和/或四级高速緩存)及多个一级高 速緩存116,每个一级高速緩存116被多个处理器内核114中的一个使用。 根据一个实施例,每个处理器内核114可采用流水线处理,其中每条指令 按一系列步骤执行,每个步骤由不同的流水线级执行。
图2是示出了根据本发明的一个实施例的一个处理器110的框图。为 简明起见,图2示出了处理器110—个单独的内核114。在一种实施例中, 每个内核114可能是相同的(例如,包含具有同样流水线级排列的同样的 流水线)。对于其他实施例,内核114可能是不同的(例如,包含具有不 同流水线级排列的不同的流水线)。
在本发明的实施例中,二级高速緩存(及/或更高级别的高速緩存,
比如三级和/或四级高速緩存)可以包括处理器110使用的指令及数据的一 部分。在一些情况下,处理器110可能需要二级高速緩存112中不包含的 指令和数据。当二级高速緩存112不包含被需要的指令和数据时,被需要 的指令和数据可以被获取(或是从一个更高级别的高速緩存,或是从系统 存储器102)并^^L置在二级高速緩存中。当处理器内核114从二级高速 緩存112请求指令时,这些指令首先被一个预解码器及调度器220处理。
在本发明的一个实施例中,指令可以从二级高速緩存112中以被称为 指令行(I-line)的组的形式读取。类似地,数据可以从二级高速緩存112 中以被称为数据行(D-line)的组的形式读取。图1示出的一级高速緩存 116可以被分为两个部分,用于存储指令行的一级指令高速緩存222 (指令 高速緩存222 )以及用于存储数据行的一级数据高速緩存224 (数据高速緩 存224 )。可以使用二级访问电路210从二级高速緩存112中读取指令行 与数据行。
在本发明的一个实施例中,从二级高速緩存112获取的指令行可以被 一个预解码器和调度器220处理,而且指令行可以被放置在指令高速緩存 222中。为了进一步改进处理器性能,指令通常被预解码,例如,从二级 (或更高级)高速緩存中获取指令行。这样的预解码可以包括多种功能, 比如,地址生成、分支预测及调度(决定指令发送的次序),这些作为控 制指令执行的分发信息(一组标志)被获取。对于一些实施例,预解码器
(及调度器)220可以由多个内核114及一级高速緩存共用。
除了从发送及分发电路234接收指令,内核114可以从多个位置读取 数据。当内核114需要来自一个数据寄存器的数据时,可使用寄存器文件 240来获取数据。当内核114需要来自一个存储单元的数据时,可使用高 速緩存加载及存储电路250从数据高速緩存224加载数据。当执行这样的 加载时,可将需要数据的请求发送至数据高速緩存224。同时,可检测数 据高速緩存目录225来判定需要的数据是否位于数据高速緩存224中。当 数据高速緩存224包含需要的数据时,数据高速緩存目录225可显示数据 高速緩存224包含需要的数据以及数据高速緩存访问可以在之后的某一时间完成。当数据高速緩存224不包含需要的数据时,数据高速緩存目录225 可指示数据高速緩存224不包含需要的数据。因为数据高速緩存目录225 可以比数据高速緩存224更快速地被访问,所以对所需要数据的请求可在 数据高速緩存目录224被访问之后但在数据高速緩存访问完成之前被发送 至二级高速緩存112 (例如,使用二级高速緩存访问电路210)。
在一些情况下,数据可以在内核114中被修改。修改后的数据可以被 写入寄存器文件,或者存储在存储器中。可使用回写电路238把数据回写 至寄存器文件240。在一些情况下,回写电路238可以使用高速緩存加载 及存储电路250把数据写回至数据高速緩存224。可选地,内核114可以 直接访问高速緩存加载及存储电路250来执行存储。在一些情况下,如下 所述,也可以使用回写电路238把指令回写至指令高速緩存222。
如上所述,可以使用发送及分发电路234形成指令组,并发送形成的 指令组至内核114。发送及分发电路234也可包括用来循环及合并指令行 中的指令的电路,从而形成一个适合的指令组。发送组的形成可考虑几种 因素,比如一个指令组中指令的依赖性以及从指令排序中获得的优化(下 文会更详细描述)。 一旦形成一个发送组,发送组可被平行发送至处理器 内核114。在一些情况下, 一个指令组可以包含用于内核114中每个流水 线的一条指令。可选地,指令组可以包含少量的指令。
级联延迟执行流水线
根据本发明的一个实施例, 一个或多个处理器内核114可以使用一个 级联的、延迟执行的流水线配置。在图3的例子中,内核114包含组成级 联配置的4个流水线。可选地,在这样的配置里,可以使用较少数(2个 或更多个流水线)或较多数(超过4个流水线)的流水线。更进一步地, 图3示出的流水线的物理布局是示例性,而不一定暗示着级联延迟执行流 水线单元的实际物理布局。
在一个实施例中,在级联延迟执行流水线配置中的每个流水线(P0, Pl, P2, P3)可包含一个执行单元310。执行单元310可以包含为一个给定的流水线执4亍一种或多种功能的几个流水线级。例如,执行单元310可 执行读取及解码一条指令的所有或部分功能。执行单元执行的解码可以与 被多个内核114共用或单个内核114专用的预解码器及调度器220共同执 行。执行单元也可以从一个寄存器文件读取数据,计算地址,执行整数运 算功能(例如,使用一个算术逻辑单元,或ALU),执行浮点运算功能,执行指令分支,执行数据存取功能(例如,从存储器加载及存储),以及 把数据写回寄存器(例如,寄存器文件240中的)。在一些情况下,内核114可使用指令读取电路236、寄存器文件240、高速緩存加载及存储电路250、回写电路、以及任何其他电路,来执行这些功能。
在一个实施例中,每个执行单元310可以执行同样的功能。可选地,每个执行单元310 (或不同组的执行单元)可以执行不同组功能。而且, 在一些情况下,在每个内核114中的执行单元310可能与其他内核中提供 的执行单元310相同或者不同。例如,在一个内核中,执行单元3100和3102可以执行加载/存储及运算功能,而执行单元31(h和3102可能仅仅执行运算功能。
在一个实施例中,正如所描述的,在执行单元310中的执行可能以比其他执行单元310有所延迟的方式进行。所示出的排列也可以被称作级联 延迟配置,但是所示出的布局并不一定指示执行单元的实际物理布局。在 这样的一个配置里,当一个指令组中的指令(为了方使爽见,称作10、11、12、13)被平行发送至流水线P0、Pl、P2、P3时,每条指令均可以以比每条其他指令延迟的方式执行。例如,指令10可首先在流水线P0的执行单元310o中执行,接下来,指令II可在流水线Pl的执行单元3101中执行, 以此类推。
在一个实施例中,一旦把发送組发送至处理器内核114,10可在执行单元3100中立即被执行。此后,当指令I0在执行单元310。中执行完后,执行单元31(h可开始执行指令I1,以此类推,从而使平行发送到内核114 的指令以彼此延迟的方式执行。
在一个实施例中,一些执行单元310会彼此延迟,而其他执行单元310
不彼此延迟。当第二条指令的执行依赖于第一条指令的执行时,可以使用转发路径312把第一条指令的结果转发到第二条指令。所示出的转发路径 312仅仅是示例性,内核114可以包含从执行单元310中的不同点到其他 执行单元310或到相同执行单元310的更多转发路径。
在一个实施例中,没有被执行单元310执行的指令(例如,被延迟的 指令)可保留在一个延迟队列320或一个目标延迟队列330中。可以使用 延迟队列320保留指令组中还没有被执行单元310执行的指令。例如,当 指令I0在执行单元310。中被执行的时候,指令Il、 12、 13可以在延迟队 列330中保留。 一旦指令通过延迟队列330,指令可被发送到适合的执行 单元310并被执行。目标延迟队列330可以被用来保留已经被执行单元310 执行的指令的结果。在一些情况下,目标延迟队列330中的执行结果可被 转发至执行单元310处理或被无效(在适当的情况下)。类似地,在一些 情况下,延迟队列310中的指令可以被无效(如下所述)。
在一个实施例中,当一个指令组中的每条指令都已经通过延迟队列 320、执行单元310以及目标延迟队列330之后,结果(例如,数据以及如 下所述的指令)可被回写至寄存器文件或一级指令高速緩存222或数据高 速緩存224。在一些情况下,可以使用回写电路238回写一个最近被修改 的寄存器值(从目标延迟队列330之一接收的)并丢弃无效的结果。
级联延迟执行流水线的性能
级联延迟执行流水线的性能影响可以与传统的顺序执行流水线比较的 方式示出,如图4A和4B所示。在图4A中, 一个传统的"2发送"(2 issue) 流水线排列2802与根据本发明实施例的一个级联延迟的流水线排列2002 相比较。在图4B中, 一个传统的"4发送"流水线排列2804与根据本发 明实施例的级,迟的流水线排列2004相比较。
仅为了示意的目的,示出了相对筒单的仅包括加载存储单元(LSU) 412和运算逻辑单元(ALU) 414的排列。然而,本领域的技术人员会认 识到通过使用多种其他类型的执行单元的级联延迟排列可实现性能的类似改进。更进一步地,针对一个示例性指令发送组(L, -A, -L" -A" -ST-L) 的执行的来考虑每种排列的性能,该指令组包括两个依赖性的加载-加法 指令对(L, -A,及L" -A"), 一个独立的存储指令(ST),以及一个 独立的加载指令(L)。在这个例子中,不仅仅是每个加法指令依赖于先 前的加载指令,而且第二个加载指令(L,,)依赖于第一个加法指令(A,) 的结果。
首先参考图4A示出的传统的2发送流水线排列2802,第一个加栽指 令(L,)在第一个周期中发出。因为第一个加法指令(A,)依赖于第一 个加载指令的结果,所以第一个加法直到第一个加载指令的结果可用时才发送,在本例中为第7周期。假设第一个加法指令在第一周期中完成,依 赖于此结果的笫二个加载指令(L")可在下一个周期中发送。再次地, 第二个加法指令(A,,)直至第二个加栽指令的结果可用时才能发送,在 本例中为第14周期。因为存储指令是独立的,所以其可以在相同的周期中 发送。进一步地,因为第三个加载指令(L)是独立的,其可能在下一个 周期中发送(第15周期),从而总共用了 15个周期。
接着参考图4A示出的2发送延迟执行流水线2002,发送周期的总数 会明显减少。如图所示,由于延迟排列,其中第二流水线(Pl)的运算逻 辑单元(ALU) 412A相对于第一流水线(P0)的加载存储单元(LSU) 412L 位于流水线的深处,所以第一个加载和加法指令(L, -A,)可能被同时 发送,无论是否独立。换言之,到指令A,到达ALU412A时,L,的结果 会可用并转发以被用于A,的执行(第7周期)。再次假设A'在一个周期 中完成,L"和A"可在下个周期中发送。因为接下来的存储和加载指令 是独立的,它们将在下个周期中发送。这样,即使没有增加发送的宽度, 但是一个级联延迟的流水线2002还是将发送周期的总数减少到9。
接下来参考图4B示出的传统的4发送流水线排列2804,可以看到, 尽管增加了发送宽度(x2),但是第一个加法指令(A,)仍然直至第一 个加载指令(L,)的结果可用时才发送(在第7周期)。然而,在第二 个加栽指令(L")结果可用之后,发送宽度的增加确实允许第二个加法
指令(A")以及独立的存储和加载指令(ST和L)在同一个周期中发送。 然而,这仅仅带来很少的性能增加,将发送周期的总数减少为14。
接下来,参考图4B所示的4发送级联延迟执行流水线2004,当将一 个较宽的发送组与一个级联延迟排列组合时,发送周期的总数将会明显减 少。如图所示,由于延迟排列,其中第四流水线(P3)的第二个运算逻辑 单元(ALU) 412A相对于第三流水线(P2 )的第二个加载存储单元(LSU) 412t位于流水线的深处,两个加载及加法指令对(L, -A,和L" -A") 可能被同时发送,无论是否独立。换言之,到指令L"到达第三个流水线 (P2)的412t时,A,的结果将可用,并且到指令A"到达第四流水线(P3) 的ALU的412A时,A"的结果将可用。从而,后续的存储及加载指令将 在下一个周期内发送,将发送周期的总数减少为2。
调度一个发送組中的指令
图5示出了调度及发送至少有一些依赖性的指令以便在级联延迟执行 流水线中执行的示例性操作500。对于一些实施例,实际的调度操作可以 在多个处理器内核(每个内核有一个级联延迟执行流水线单元)之间共用 的一个预解码器/调度器电路中执行,而分发/发送指令可由一个处理器内核 中的单独电路执行。例如, 一个共用的预解码器/调度器可通过检查待发送 指令的"窗口,,来查看依赖性并生成控制分发电路将如何(向哪些流水线) 发送一个组内的指令的一组"发送标志,,,来应用一组调度规则。
在任何情况下,在步骤502,接收到一个将要发送的指令组,该组的 第二条指令农赖于第一条指令。在步骤504,第一条指令被调度发送至拥 有第一执行单元的第一流水线。步骤506中,第二条指令被调度送至拥 有相对第一个执行单元延迟的第二个执行单元的第二个流水线中。在步骤 508中(在执行期间),第一条指令的执行结果被转发至第二个执行单元, 以用于第二条指令的执行。
指令,皮调度至不同流水线的确切方式可以随着不同的实施例变化,并可至少部分地依赖于相应的级:^迟流水线单元的确切配置。例如,较宽的发送流水线单元可以允许更多的指令平行发送,并为调度提供更多机会, 而一个更深的流水线单元可以允许更多依赖性的指令一起被发送。
当然,通过使用 一个级m迟流水线排列获得的性能的总的提高依赖 于若干因素。例如,较宽发送宽度(更多流水线)的级联排列可以允许更 大的发送组,而且通常更多依赖性指令可以被一起发送。然而,由于实际 限制,比如电力及空间成本,可能需要将流水线单元的发送宽度限制为可管理的数量。对于一些实施例, 一个4-6个流水线的级联排列可以在可接 受的成本下提供好的性能。总的宽度也可能依赖于预期的指令类型,这很 可能决定排列中的特定执行单元。
一个整数级联延迟执行流水线的示例性实施例
图6示出了用于执行整数指令的级自迟执行流水线单元600的示例 性排列。如图所示,该单元有四个执行单元,包括两个LSU 612l及丙个 ALU614a。单元600允许在两个相邻的流水线之间直接转发。对一些实施 例,可允许更复杂的转发,例如,在不相邻的流水线之间直接转发。对一 些实施例,也同样允许来自目标延迟队列(TDQ ) 630的选择性转发。
图7A-7D示出了四条指令(L, -A, -L" -A")的示例性发送组通过 图6所示的流水线单元600的流程。如图所示,在图7A中,发送组可以 进入单元600,其中第一个加载指令(L,)被调度至最少延迟的第一流水 线(PO)。因此,L,将在组内的其他指令(这些其他指令可以在L,被 执行时通过指令队列620前进)之前到达第一个LSU 612L,并被执行。
正如在图7B中所示,当第一个加法指令A,到达第二流水线(P1) 的第一个ALU 612A时,第一个加载指令(L,)的执行结果可能可用(恰 好地)。在某些情况下,例如,第二个加载指令可能依赖于第一个加法指 令的结果,该加法指令可通过对一个基址(例如,第一个加法指令A,的 操作数)增加一个偏移量(例如,用第一个加载指令L,加载的)来进地 计算。
在任何情况下,如图7C所示,当第二个加载指令L"到达第三个流
水线(P2)的第二个LSU 612L时,第一个加法指令(A,)的执行结果 可能可用。最后,如图7D所示,当第二个加法指令A"到达第四个流水 线(P3)的第二个ALU 612A时,第二个加载指令(L")的执行结果可 能可用。第一个组中的指令的执行结果将被用作执行后续发送组的操作数, 并因此可^L^馈(例如,直接反馈或通过TDQ 630)。
虽然没有示出,但应当理解在每个时钟周期, 一个新的发送组可ii^ 流水线单元600。在一些情况下,例如,由于有多重依赖性的相对稀少的 指令流(L, -L"-L",),因而每个新发送组可能并不包含最大数量的指令 (在本例中有4个),但这里描述的级,迟排列仍然可以通过允许无停 止地在一个的共同发送组中发送依赖性的指令,而在吞吐量方面提供明显 的改进。
浮点/向量级联延迟执行流水线的示例性实施例
这里提出的级联、延迟、执行流水线单元的概念能够应用于使用多种 不同类型的功能单元的多种不同的配置中,在所述级联、延迟、执行流水 线单元中,在一个发送组中 一个或多个指令的执行比同 一发送组中其他指 令的执行延迟。更进一步地,对一些实施例,级联、延迟、执行流水线单 元的多种不同配置可被包含在同 一系统和/或同 一芯片中。包含特定设备或 系统包含的特定配置或一组配置取决于预期的用途。
上文描述的定点执行流水线单元允许包含相对简单的操作(即仅仅花 费少量周期完成,例如,加载、存储以及基本的ALU操作)的发送组可 以无停止地执行,无论发送組中是否有依赖性。然而,通常至少有一些执 行相对复杂的操作的流水线单元,这些操作可能需要花费几个周期,比如 浮点乘法/加法(MADD)指令、向量点积、向量叉积等等。
在图像代码方面,比如在商业视频游戏中常见的,倾向于高频率出现 标量浮点代码,例如,当处理三维场景数据以生成像素值来创建逼真的荧 幕图像时。 一个指令流的示例可包括一个加载指令(L),紧随其后是以 所述加载作为输入的第一个乘法/加法指令(MADD),接下来是基于第一个MADD的结果的第二个MADD指令。换言之,第一个MADD指令 赖于加载指令,而第二个MADD指4S^赖于第一个MADD指令。第二个 MADD指令之后可以是一个存储第二个MADD指令生成的结果的存储指令。
图8示出了将允许上文所述的指令流的示例、从而允许在单个发送组 中同时发送两个依赖性的MADD指令的一个级联延迟执行流水线单元 800。如图所示,该单元有四个执行单元,包括第一个加载存储单元 (LSU)812、两个浮点单元FPU 81^和8142,以及第二个加载存储单元LSU 816。单元800允许将第一个流水线(P0)中的加载指令的结果直接转发 至第二个流水线(Pl)中的第一个FPU 814"以及将第一个MADD指令 的结果直接转发至第二个FPU 8142。
图9A-9D示出了一个示例性的包含四条指令(L, -M, -M" -S,) 的发送组(M,表示第一个依赖性的乘法/加法指令,M"表示依赖于第一 条指令的结果的第二个乘法/加法指令)通过图8所示的流水线单元800的 流程。如图所示,在图9A中,发送组可进入单元900,其中加载指令L, 被调度至最少延迟的第一个流水线(PO)。因此,L,将在组内其他指令 (这些其他指令可以在L,正在4皮执行通过指令队列620前进)之前到达 第一个LSU 812而被执行。
如图9B所示,当第一个MADD指令M,到达时,第一个加载指令L, 执行的结果可净皮转发至第一个FPU81A。如图9C所示,可能刚好当第二 个MADD指令(M")到达第三个流水线(P2 )的第二个FPU 8142时, 第一个MADD指令(M,)执行的结果可用。
第一个组中的指令的执行结果可以在执行后续发送组时被用作操作 数,并因此可净iL^馈(例如,直接反馈或通过TDQ 630),或者转发至寄 存器文件回写电路。对于一些实施例,第二个MADD指令的(浮点)结 果可在被存辟至存储器之前被进一步处理,例如,以便为了更加有效地存 储而将结果压缩(compact或compress )。
当把图8所示的浮点级联延迟执行流水线单元800与图6所示的整数
级联延迟执行流水线单元600相比时,可以观察到若干相似点及不同点。 例如,每种都可以使用若干指令队列620来延迟发送至"延迟"流水线的 某些指令的执行,以及可以使用目标延迟队列630来保留"中间的"目标 结果。
单元800的FPU 814的深度可以比单元600的ALU 600大很多,从而 增加了单元800的整体流水线深度。对一些实施例来说,深度的这种增加 可允许一些等待时间被隐藏,例如,当访问二级高速緩存的时候。例如, 对一些实施例,二级高速緩存访问可以在流水线P2上被首先启动,来获 取第二个MADD指令的操作数之一。可能刚好当二级高速緩存访问完成 时,由第一个MADD指令生成的另一个操作数可用,这样就有效隐藏了 二级高速緩存访问的等待时间。
另外,转发互连可以显著不同,部分地是由于一个加载指令可以生成 一个可作为地址使用(被其他指令)的结果,而一个浮点MADD指令生 成一个并不能被用作地址的浮点结果。因为FPU不能产生可以用作地址的 结果,因而图8示出的流水线互连方案可能是显著简化的。
对一些实施例,为了预期目的,比如用置换指令进行向量处理(例如, 其中中间结果被当作后续指令的输入),可创建多种其他流水线单元排列。 图10示出了 一个适用于这种向量操作的级,迟执行流水线单元1000。
与图8所示的执行单元800类似,执行单元1000有四个执行单元,包 括第一及第二加载存储单元(LSU) 1012,但是有两个向量处理单元FPU 101A和10142。向量处理单元可被配置为执行多种向量处理操作,而且在 一些情况下,可以执行与图8中的FPU814类似的操作(乘法及加法), 以及其他功能。
这种向量操作的例子可包括多重(例如,32位或更高位)乘法/加法操 作,包括对结果求和,比如在点积(或叉积)中。 一旦生成一个点积,另 一个点积也可由此生成,而且/或者在准备存储到存储器中时结果可被压 缩。对于一些实施例,所生成的点积在其,皮存储到存储器中或发送到其他 地方以便进行其他处理时可以从浮点转换为定点,被缩放,和被压缩。这种操作例如可以在向量处理单元1014或在LSU 1012中执行。
共用的支持多个处理器内核的指令预解码器的示例性实施例
如上所述,本发明不同的实施例可以使用拥有级联延迟执行流水线的多个处理器内核。对一些实施例,至少一些内核可以使用提供不同的功能的不同的级联延迟执行流水线排列。例如,如上所述,对一些实施例,单个芯片可以包含如上所述的一个或多个定点处理器内核以及一个或多个浮点和/或向量处理器内核。
为了提高处理器性能并识别可被平行发送的最优的指令发送组,例如 当从二级(或更高级)高速緩存获取指令行时,指令可被预解码。这样的预解码可以包括多种功能,例如地址生成,分支预测,以及调度(决定发送指令的次序),这将作为控制指令执行的分发信息(一组标志)被获取。
在典型的应用中,经过相对少数的"训练"执行周期(例如,6-10 个周期)之后,这些调度标志可能很少改变。典型地,改变最多的标志将是分支预测标志(即那些指示是否一个….的标志),这些标志可在大约3-4 o/o的时间里的切换。因此,对使用预解码器再转换(retranslation ) /再调 度的要求很少。这样的效果是,在典型情况下,单个处理器或处理器内核专用的预解码器很可能将不能充分利用。
由于在稳定状态执行期间由任何给定的处理器内核施加给预解码器的负载相对较轻,而且对指令高速緩存线再翻译的需求相对不频繁,所以可在多个(N)处理器内核之间共用一个预解码器(例如,N=4, 8,或12)。 图11示出了这样一个共用的预解码器1100,其被用于对将要分发到N个处理器内核114执行的指令行进行预解码。N个处理器内核114可包括相同或不同类型处理器内核的任何合适的组合,如上所述,对一些实施例, 这些处理器内核可能包括级m迟执行流水线排列。换言之,共用的预解码器1100会能够预解码任何定点、浮点和/或向量指令的组合。
通过在多内核间共用预解码器1100,可以将其做得更大,从而允许更 复杂逻辑的预解码以及更智能的调度,同时与单个专用的预解码器相比,仍减少了每个处理器内核的成本。更进一步的,由于额外的复杂性造成的 空间损失也可相对小。例如,当一个共用的预解码器电路的整体尺寸可能增长了2倍时,如果在4-8个处理器内核间共用它,则会节省空间。对一 些实施例,单个预解码器可以在处理器内核组间共用,所述处理器内核组 例如共用 一个共同的二级高速緩存和/或更高级别的高速緩存。
由于当从更高级别高速緩存读取指令行时产生的等待时间而有足够的 周期可用于预解码以及由于共用而能够设计更大的复杂性,这样可能产生 一个接近最优的调度。例如,通过在训练周期期间记录执行活动,比如导 致存储器未命中的加载和/或分支比较的结果,可能产生有极少停止或没有 停止的适于平行执行的指令组。
另外,对一些实施例,共用的预解码器1100能够以比处理器内核运行 频率(CLKcoRE)更低的频率(CKLpD)运行,这样共用的预解码器比以 处理器内核频率运行的传统的(专用的)预解码器允许更加复杂的预解码 (可以接受更多的逻辑门传送延迟)。更进一步,可,皮用于预解码的额外 的"训练,,周期能够被访问更高级别的高速緩存或主存储器时产生的相对 大的等待时间(例如,在100-1000个周期的量级上)有效地隐藏。换言之, 虽然10-20个周期可允许相对复杂的解码、调度及分发,但是当它们在加 载程序时产生时,这些周期可能对整体性能只产生微不足道的影响("在 噪声中消失,,)。
图12示出了可由共用预解码器1100执行的示例性^^作1200的流程 图。步骤1202中,操作通过读取一个指令行开始。例如,该指令行能够当 从任何其他更高级高速緩存(二级、三级或四级)或主存储器加载一个程 序("cold")至任何特定的处理器内核114的一级高速緩存时被读取。
在步骤1204,该指令行可被预解码并产生一组的调度标志。例如,预 解码操作可包括目标操作数及源操作数的比较,来检测指令及操作之间的 依赖性(模拟执行)从而预测分支路径。对一些实施例,出于调度的目的, 可能需要读取一个或多个额外的指令行(例如,包括先前指令)。例如, 对于依赖性比较或分支预测比较,可能需要检查在一个目标内核流水线中较早的指令的效果。也可实施基于可用资源的规则,例如,基于一特定内 核中的特定流水线单元,限制发送至该内核的指令数量。
基于这些操作的结果,调度标志可被设置来指示指令组是什么(例如, 使用停止位来界定发送組)。如果预解码器识别了一个可以平行执行的指令组(例如,4个指令),那么它就能够使用一个来自前一个组的停止位 以及(在四条指令之后)另一个停止位来界定该组。
步骤1206,预解码的指令行及调度标志被分发至适合的一个内核(或 多个内核)来执行。正如在下文将详细描述的,对一些实施例,调度标志 可以被编码并附加到相应的指令行或者与相应的指令行一起存储。在任何 情况下,调度标志能够控制目标内核处指令行中指令的执行。例如,除了 识别可以平行发送的一个指令发送组之外,这些标志也可以指示该组中的 特定指令应该被调度在执行内核中的哪些流水线(例如,调度一个依赖性 的指令在一个比该指令所依赖的指令执行更加延迟的流水线中执行)。
图13更加详细的示出了共用预解码器1100的一个实施例。如图所示, 指令行能够被读取并存储在一个指令行緩冲器1110中。来自緩冲器1110 的指令行可以被传送至格式化逻辑1120。例如,以便将完整的指令行(例 如,32条指令)解析为子指令行(例如,4个子指令行,每个子指令行含 有8条指令)、循环、以及对准指令。接下来,子指令行可被发送至拥有 适合逻辑的调度标记生成逻辑1130,以检查指令(例如,检查源操作数及 目标操作数),并生成定义发送组及执行次序的调度标志。接下来,预解 码的指令行与生成的调度标志可被存储在预解码指令行緩沖器1140中,从 这里它们可被分发至其适合的目标内核。执行的结果可被记录,而且调度 标志可被^Jt至标志生成逻辑1130,(例如,通过反馈总线1142 )。
正如在下文将更加详细描述的,对一些实施例,预解码的指令行(与 它们的调度标志一起)可被存储在多个级别的高速緩存(例如,二级、三 级及/或四级)中。在这样的实施例中,当读取指令行时,在由于高速緩 存未命中读取一个指令行或者在调度标志已改变的情况下,可能仅需要产 生调度标志生成器1130的额外等待时间。然而,当读取已被解码以及其调
度标志未曾改变的指令行时,可例如通过绕过总线1112来绕过标志生成逻 辑1130。
如上所述,在多个内核间共用一个预解码器及调度器可允许更复杂的 预解码逻辑,从而得到更优化的调度。增加的复杂性可导致需要在多个时 钟周期内以流水线方式执行部分解码操作,即使预解码流水线以比内核更 慢的时钟频率运行。
图14示出了预解码流水线的一个实施例,其中调度标志生成逻辑1130
的部分解码操作发生在不同级。如图所示,第一部分解码器1131可在第一
个时钟周期内在第一组子指令行上执行第一组预解码操作(例如,资源值
规则执行,和/或一些初步的重新格式化),并将部分解码后的子指令传送
至緩冲器1132。部分解码后的子指令行可在第二个时钟周期中由第二个部
分解码器进一步预解码(例如,进行初始加载存储依赖性检查、地址生成、
和/或加载冲突检查),这些进一步解码后的子指令行可被传送至对准逻辑
1134。最终的预解码逻辑1135可仍进一步在第三个时钟周期内对子指令行
进行解码(例如,对形成的发送组的进行最终的依赖性检测和/或决定发送
组长度)。发送组长度可被存储在表1137中,并用于设定界定发送组的结 士、
作为预解码操作的例子,在一个或更多预解码周期中,可执行一个依
赖性的检测,来总计由若干(例如,超过100个)寄存器比较识别的依赖 性,以判定哪些指令是有效的,并将其分组。可以按照不同的方式进行分 组(例如,基于加载-加载依赖性和/或加法-加法依赖性)。指令可以基于 是否它们应被调度至一个更多延迟还是更少延迟的流水线来分组。然后可 决定基于可用流水线以及目标依赖性队列的哪级(对应的流水线级深度) 具有依赖性将指令(例如,四个或五个)的分组。
例如,第一个加载指令可被调度至一个无延迟的流水线,而依赖于第 一个加载指令的结果的另一个加载指令可被调度至一个延迟的流水线,从 而,到该指令执行时所述结果可用。在一组指令不能被调度至任何流水线 而无停止的情况下,发送组可在第一条指令之后结束。另外,可设置一个
停止位以不仅仅指示指令不能在一个通常的发送组中被调度,而且指示由 于其停止,该组可在之后立即终止。这个停止位能够促进进一步的预解码。
预解码的指令行的持久存储
如前所述,生成于多个周期的预解码训练阶段的指令行调度标志可在 训练阶段之后相对不频繁地变化。例如,在训练之后,在一个程序的稳定 状态执行期间,调度标志可仅仅在很少的时间改变。对一些实施例,可利 用这样的事实,并在预先花费训练周期以生成用于指令行的调度及分发信 息之后,这些预解码/调度信息可被存储在更高级别的高速緩存中(例如, 二级、三级和/或四级高速緩存)。因而,当在一个后续的执行周期期间读 取指令行时,为了调度目的而进行预解码(再转换)可能就不必要了。
图15概念性地示出了在多级别高速緩存中持久地存储预解码的指令 行的概念。示意性地,预解码的指令行及调度标志("指令标志")被存 储在所有级别的高速缓存中。然而,对本发明的一些实施例,仅仅有指定 级别的高速緩存和/或存储器可包含指令行中包含的信息(例如,数据访问 历史以及数据目标地址)。
对于一些实施例,指令标志能够在预解码的指令行中被编码。所以, 可提供格式化逻辑1505来对指令行进行格式化,例如,必要性当为分发至 处理器内核做准备时循环及截取指令。如图所示,对于一些实施例, 一组 标志可被提取并反馈至读访问电路1504。例如,基于先前的执行记录,这 样的标志可指示应当从二级高速緩存1502或三级高速緩存1503预先读取 的一个或多个指令行或数据行,如在2006年2月3日提交的、申请号为 11/347,414 、代理机构巻号为ROC920050277US1 、标题为"SELF PREFETCHING L2 CACHE MECHANISM FOR DATA LINES",以及、 2006年2月3日提交的、申请号为11/347,412、代理机构巻号为 ROC920050278US1 、标题为"SELF PREFETCHING L2 CACHE MECHANISM FOR INSTRUCTION LINES的美国专利申请人所描述的, 所述专利申请作为参考被全文纳入本说明书。
图16示出了根据本发明的实施例用于分发指令行的操作,其中预解码 信息被持久地存储。在步骤1602,操作开始,读取一个指令行。如果此读 取行为导致了一个指令高速緩存未命中(所请求的指令行不在一级高速緩 存中)或者调度标志已经作为执行的结果被改变(例如, 一个分支历史标 志被改变,从而指示已经采用了一条与先前不同的路径),则在步骤1606, 指令行可被预解码。否则,如果此读取命中(所请求的指令行已经位于一 级高速緩存中)而且调度标志没有改变,那么可以绕过预解码,至少是部 分地绕过(例如,可能仍然要执行一些格式化)。在步骤1610,预解码的 (或者再次预解码的)指令行被分发以便执行。
一般来说,如果在所有高速緩存中都使用了存储穿透(store-through ) 緩存机制,那么本领域技术人员所知的高速緩存一致性原理可被用于更新 任何一级高速緩存和/或存储器中指令行的副本。更进一步地,由于仅仅是 指令标志被修改(并仅仅被视作提示),因而正常的存储中(store-in)高 速緩存机制(更新指令高速緩存中的高速緩存行以及将该指令行标记为已 改变,从而使得当该改变的指令行被替换时,将该改变的行被写出至二级 高速緩存)也正常工作,因为指令本身未被修改,并且仍然是只读的。含 有陈旧(过时)指令标志的指令行的情况仍在所有情况下产生正确的执行, 虽然可能会发生一些性能损失。应提到的是,在使用指令高速緩存的传统 系统中,典型地,指令不被修改。这样,在传统的系统中,指令行通常在 一段时间之后老化(age)出一级高速緩存1501,而不是被回写至二级高 速緩存1502。然而,为了持久地保持预解码信息,当指令标志在执行期间 被修改时,指令行(指令标志)指令可被修改,而且当被替换时,这些修 改后的指令行可被逐出(cast out)至更高级别的高速緩存中(例如,二级 和/或三级高速緩存),从而允许保持预解码信息(指令标志)。
可以提到的是,存储的/生成的调度标志可被当作"提示",并且只有 "最新的"版本将在相应的一级指令行高速緩存中。对一些实施例, 一旦 执行了指令行,它可被逐出,其他处理器不能访问该指令行。因而,维持 一致性(以确保多个处理器可以访问相同版本的指令行)并不是必要的。因为标志仅仅被用作提示,所以即使提示是错误的和/或指令行的最新版本;故另一个处理器内核访问,也仍然可以实现正确的执行。
例如,参考图17,当指令行中的指令已经被处理器内核处理(可能引 起数据目标地址及其他历史信息的更新),指令行中的指令标志1702可在 一级高速緩存中被修改。 一个改变标志1704可被标记以描述指令标志中的 改变。如图所示,当指令行在一级高速緩存中被替换时,因为它们被标记 为已改变,所以它们可被逐出至二级高速緩存。类似地,修改后的指令行 可从二级高速緩存被逐出至三级高速緩存。
按这种方式存储带调度信息(指令标志)的预解码指令行可以被称作 "半永久"调度。换言之,调度信息可在最初产生,例如,当加载程序而 进行冷启动时。仅仅当调度标志改变(例如,当在训练或执行期间,分支 模式变化)时,才需要再次预解码。所以,通过避免不必要地再次预解码 周期,系统性能可改进,而且,指令行可以被立即分发。另外,通过避免 预解码操作(例如,几百次的依赖性检查),总的系统电耗可减少。
结论
通过提供相互延迟的执行流水线的级联, 一个发送组中的一组依赖性 指令可被智能地调度以在不同延迟的流水线中执行,从而整个发送组可以 无停止地执行。
虽然以上所述是针对本发明的实施例的,但是可以设计其他或进一步 的实施例,而不偏离本发明基本范围,且本发明的范围由下面的权利要求 确定。
权利要求
1.一种在处理环境中预解码用于执行的指令的方法,包括由处理器内核接收用于执行的第一指令行;对第一指令行进行预解码;以及将预解码的第一指令行存储在多级高速缓存中。
2. 权利要求l中的方法,进一步包括 接收先前已被预解码的一指令行。
3. 权利要求2中的方法,进一步包括判定与先前已被预解码的该指令行相关联的一个或多个标志 指示相关联的预解码信息已改变;以及作为响应,将先前预解码的该指令行重新预解码。
4. 权利要求2中的方法,进一步包括判定与先前已被预解码的该指令行相关联的一个或多个标志 指示相关联的预解码信息没有改变;以及作为响应,将先前预解码的该指令行发送至处理内核,而不 进行进一步的预解码。
5. 权利要求l中的方法,进一步包括 改变与预解码的该指令行相关联的、并存储在第一级高速緩存中的一个或多个标志;以及当替换第一级高速緩存中的预解码的该指令行时,将预解码 的该指令行逐出至第二级高速緩存。
6. 权利要求5中的方法,进一步包括 将预解码的该指令行逐出至第三级高速緩存。
7. 权利要求1中的方法,其中对指令进行预解码包括生成一 组调度标志,该组调度标志控制当该行中的指令被分发到处理器 内核以便执行时,所述指令将如何被执行。
8. 权利要求7中的方法,进一步包括 对预解码的该指令行中的调度标志进行编码;以及 将预解码的该指令行与编码的调度标志存储在多级高速緩存中。
9. 一种集成电路装置,包括 一个或多个处理器内核; 多级高速緩存;预解码器,其被配置为读取指令行、预解码指令行并将预解 码的指令行发送至处理器内核以便执行;以及高速緩存控制电路,其被配置为将预解码的指令行存储在多 级高速緩存中。
10. 权利要求9中的装置,其中多级高速緩存包括 与多个处理器内核中的每一个关联的第一级高速緩存;以及 在多个处理器内容间共用的第二级高速緩存。
11. 权利要求9中的装置,其中至少一个处理器内核包括 具有至少第 一 和第二执行流水线的级联延迟执行流水线单元,其中被发送至执行流水线单元的一共同发送组中的指令在被 执行于第二执行流水线之前在第一执行流水线中被执行,而且至 少第一和第二执行流水线之一在浮点操作数上操作;以及转发路径,用于将在第一执行流水线中执行第一指令产生的 结果转发至第二执行流水线中以用于执行第二指令。
12. 权利要求9中的装置,其中预解码器被配置为 读取先前预解码的指令行;以及检查改变位来判定与先前预解码的指令行关联的一个或多个 调度标志是否自先前的预解码以来已改变。
13. 权利要求12中的装置,其中所述预解码器被配置为 响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来已改变,重新预解码先前预解 码的指令行。
14. 权利要求12中的装置,所述预解码器被配置为 响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来没有改变,将先前预解码的指 令行转发至处理器内核以便执行,而不进行进一步的预解码。
15. 权利要求12中的装置,其中所述处理器内核被配置为设 置改变位,以指示与先前预解码的指令行关联的一个或多个调度 标志是否已由于执行而改变。
16. —种集成电路装置,包括 多级高速緩存;一个或多个级联延迟执行流水线单元,每个单元至少具有第 一和第二执行流水线,其中,被发送至执行流水线单元的一共同 发送组中的指令在被执行于第二执行流水线之前在第一执行流水 线中被执行,以及,转发路径,其用于将在第一执行流水线中执行第一指令产生的结果转发至第二执行流水线中以用于执行第二 指令,其中至少第一及第二执行流水线之一在浮点操作数上操作;以及预解码及调度电路,其被配置为接收将由流水线单元执行的 指令行,预解码指令行,以及将预解码的指令行存储在多级高速 緩存中。
17. 权利要求16中的装置,其中预解码器被配置为 读取先前预解码的指令行;以及检查改变位来判定与先前预解码的指令行关联的一个或多个 调度标志是否自先前的预解码以来已改变。
18. 权利要求17中的装置,其中预解码器被配置为 响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来已改变,重新预解码先前预解 码的指令行。
19. 权利要求17中的装置,其中预解码器被配置为响应于判定改变位指示与先前预解码的指令行关联的一个或 多个调度标志自先前的预解码以来没有改变,将先前预解码的指 令行转发至执行流水线单元以便执行,而不进一步预解码。
20.权利要求17中的装置,其中执行流水线单元被配置为设 置改变位,以指示与先前预解码的指令行关联的一个或多个调度 标志是否已由于执行而改变。
全文摘要
提供了用于以流水线方式执行指令的改进的技术,这种流水线方式可减少当执行依赖性指令时产生的停止。通过使用一个具有彼此延迟的执行单元的级联的流水线排列可减少停止。这种级联延迟排列通过将依赖性指令调度至不同的流水线在不同的时间执行,而允许依赖性指令在一个共同的发送组内发送。
文档编号G06F9/38GK101201733SQ200710186639
公开日2008年6月18日 申请日期2007年11月14日 优先权日2006年12月13日
发明者D·A·卢伊克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1