延迟缓冲器的制作方法

文档序号:15444751发布日期:2018-09-14 23:13阅读:209来源:国知局

本技术涉及数据处理领域。



背景技术:

一些数据处理设备可以支持处理的两个或更多个线程的并发执行,其中硬件寄存器被提供以同时存储多个线程的上下文数据。这种方法可以被称为同时多线程(smt),并且可以有助于提高使用硬件资源的效率并提高性能,因为如果一个线程停滞(stall),另一线程可以继续进行,而不会导致软件控制的上下文切换的线程切换延迟(其中,寄存器一次仅存储一个线程的上下文,因此中断将触发软件将旧线程的上下文数据存储到存储器中,并用新线程的上下文数据来代替它)。通过smt,多个线程可以具有同时在流水线内运行的指令,并且每个线程的相应上下文数据组可以在硬件寄存器内同时被访问。



技术实现要素:

至少一些示例提供了一种装置,该装置包括:

处理电路,用于执行处理的多个线程的指令;

硬件寄存器,用于同时存储多个线程的上下文数据;

提交电路,用于提交多个线程的被执行的指令的结果,其中对于每个线程,提交电路被配置为按照程序顺序提交该线程的指令;以及

至少一个延迟缓冲器,用于缓冲至少一个阻塞指令(blockedinstruction),针对阻塞指令的执行已由处理电路完成但在程序顺序中同一线程的更先前指令的执行未被完成。

至少一些示例提供了一种装置,该装置包括:

用于使用用于同时存储多个线程的上下文数据的硬件寄存器来执行处理的多个线程的指令的装置;

用于提交多个线程的被执行的指令的结果的装置,其中,对于每个线程,用于提交的装置被配置为按照程序顺序提交该线程的指令;以及

用于缓冲至少一个阻塞指令的装置,阻塞指令的执行被用于执行的装置完成但在程序顺序中同一线程的更先前指令的执行未被完成。

至少一些示例提供了一种数据处理方法,该方法包括:

使用用于同时存储多个线程的上下文数据的硬件寄存器来执行处理的多个线程的指令;

提交多个线程的被执行的指令的结果,其中,对于每个线程,按照程序顺序提交该线程的指令;以及

在至少一个延迟缓冲器中缓冲至少一个阻塞指令,阻塞指令的执行被完成但在程序顺序中同一线程的更先前指令的执行未被完成。

本技术的其他方面、特征和优点将从以下结合附图阅读的示例的描述中变得显而易见。

附图说明

图1示意性地示出了数据处理装置的示例,该数据处理装置支持对多个线程与存储在硬件寄存器中的每个线程的上下文数据的同时执行;

图2示出了流水线的执行和提交阶段(stage)的示例,该流水线被提供有至少一个用于缓冲阻塞指令的延迟缓冲器;

图3是示出控制指令的提交的方法的流程图;以及

图4是示出确定是否将阻塞指令传送到延迟缓冲器的方法的流程图。

具体实施方式

装置可以具有用于执行来自处理的多个线程的指令的处理电路以及用于同时存储多个线程的上下文数据的硬件寄存器。例如,该装置可以支持同时多线程(smt)。smt类型的技术传统上主要用于更复杂的无序处理器,因为在具有更复杂的处理器的情况下通常存在多种可用于执行指令的执行资源,但给定的线程可能不能在给定的时间充分利用所有可用资源,所以通过支持同时对来自多个线程的指令的执行,更有可能增加资源利用率。

然而,smt型技术也可以用在有序处理器中,在有序处理器中,指令以它们的原始程序顺序(与所执行的指令的指令地址的顺序相对应的程序顺序)被发出(issue)以供执行以及被提交。有序处理器通常具有较少的可用资源,因此不太可能具有较多的备用资源,所以smt对于有序处理器而言不太常见。然而,smt仍然可能是有用的,因为如果一个线程停滞(例如,由于长时间的延迟存储器操作),则有序处理的限制意味着来自同一线程的其他指令不能继续进行,而smt可以允许其他线程在此期间继续进行。因此,对于有序smt方法,该装置可以具有用于提交两个或更多个线程的被执行的指令的结果的提交电路,其中对于每个线程,提交电路按照程序顺序提交该线程的指令。

然而,在使用在流水线内同时活动的多个线程的有序核心中,两个或更多个线程可能遭受线程间阻塞,其中在一个线程中的停滞指令会阻止另一线程中的指令继续进行。这是因为提交电路被限制为按照程序顺序提交给定线程的指令,所以如果先前的指令被停滞,则不可能以同一线程的程序顺序提交后续指令,但是来自其他线程的指令可能被困在执行流水线中的停滞线程的该后续指令的后面,因此即使另一线程独立于停滞线程,其也可能不能被执行或提交。

这个问题可以通过提供用于缓冲至少一个阻塞指令的至少一个延迟缓冲器来解决,其中针对阻塞指令的执行被完成但对在程序顺序中同一线程的更先前的指令的执行未被完成。因此,在线程间阻塞的情况下,除了更先前的指令仍然未被完成的事实,已完成执行并因此准备提交的阻塞指令可以被移动到延迟缓冲器。这允许来自其他线程的指令在处理电路中继续进行,因为它们未被阻止提交,因为它们来自与停滞线程的未被完成的指令不同的线程。在实践中,在有序的流水线中,停滞线程通常会用尽独立的指令,这些指令可以在停滞指令之后被相对较快地发出,所以延迟缓冲器不需要非常大以提供足够的资源来解决线程间阻塞问题(例如,少量延迟缓冲器条目(例如,4个)已被发现是足够的),因此可以以相对较低的成本来实现。因此,这为解决线程间阻塞问题提供了相对低成本的方法。

处理电路可以具有用于执行各类指令的多个功能单元。例如,一个功能单元可以执行整数指令,另一个可以执行浮点指令,而另一功能单元可以执行加载/存储指令。也可以提供两个或更多个相同类型的功能单元,每个功能单元执行同类指令。例如,出于性能原因,提供多个整数功能单元可能是有用的。

从提交电路的角度来看,除了处理电路的功能单元之外,延迟缓冲器可以被看作是另一个要提交的指令的源。因此,提交电路可以在任何功能单元和任何延迟缓冲器中待决(pending)的给定线程的指令之间选择程序顺序中最早(oldest)的指令来作为要从给定线程提交的下一个指令,并在检测到下一个指令的执行完成时提交下一个指令。请注意,对于延迟缓冲器中的指令,这些指令按定义是其执行已被完成的指令,因此这些指令一成为针对给定线程维持的最早指令就可以被提交。对于功能单元中的指令,可以执行对该线程的最早指令是否已被执行的附加检查。

可以提供延迟缓冲器控制电路来控制阻塞指令到至少一个延迟缓冲器的分配。响应于在给定的功能单元中检测到阻塞指令,延迟缓冲器控制电路可以将阻塞指令从给定功能单元传送到至少一个延迟缓冲器中的一者。因此,延迟缓冲器使得能够从功能单元中移除阻塞指令,使得在给定的功能单元中在阻塞指令后面的来自另一线程的指令可以继续进行。

延迟缓冲器控制电路以任何顺序(包括与该线程的程序顺序不同的顺序)将阻塞指令分配给延迟缓冲器都是可能的。然而,在这种情况下,延迟缓冲器可能需要被实现为内容可寻址存储器(cam)结构,在该结构中,提交电路可以查询延迟缓冲器的任何条目以识别保持在延迟缓冲器中的哪个指令对于给定线程是最早的。这可能会增加延迟缓冲器的电路开销。

替代地,在其他实施例中,延迟缓冲器控制电路可以按照给定线程的程序顺序来将该线程的阻塞指令分配给至少一个延迟缓冲器。这意味着延迟缓冲器中最早的条目对应于该线程的最早剩余指令,因此提交电路仅需要检查最非最近分配的条目以便识别要从延迟缓冲器提交的下一个指令。因此,延迟缓冲器然后可以被实现为先进先出(fifo)缓冲器,其在硬件上比内容可寻址存储器更便宜。因此,延迟缓冲器控制电路可以将在与最早执行的指令不同的功能单元中的给定线程的至少一个较早的指令未被完成时已完成执行的给定线程的最早执行的指令检测作为阻塞指令。这使得指令能够按程序顺序被分配给延迟缓冲器。

在一些示例中,延迟缓冲器可以在多个线程之间共享,并且来自多个线程的指令可以被同时分配给同一延迟缓冲器。然而,在一些情况下,启用该选项将需要cam结构以允许提交电路查询延迟缓冲器的任何条目,以识别处理电路正在执行的多个线程中的任何线程的最早的未提交的指令。这个开销可以通过替代地限制延迟缓冲器分配来避免,使得一旦来自给定线程的指令已被分配给给定延迟缓冲器,延迟缓冲器控制电路可以阻止来自另一线程的指令被分配给给定延迟缓冲器,直到给定延迟缓冲器排空(drain)来自该给定线程的指令。因此,虽然延迟缓冲器在线程之间共享,但从某种意义上来说,一旦缓冲器变为空,则来自另一线程的指令可以被分配给延迟缓冲器,一旦在给定延迟缓冲器中存在来自特定线程的一个有效指令,则为该特定线程保留延迟缓冲器,直到在延迟缓冲器中不再有来自该线程的阻塞指令。同样,这使得提交电路能够将针对给定线程的要提交的下一个指令的搜索限制到在延迟缓冲器的头部(最非最近更新的条目)处的指令,从而使得能够使用fifo结构而非cam。

可选地,延迟缓冲器控制电路还可以应用其他准则来确定指令是否应该被传送到延迟缓冲器。在一些情况下,一旦阻塞指令被识别出并且在延迟缓冲器中存在可用于从相关线程中获取指令的足够的空间,则延迟缓冲器控制电路可以将阻塞指令传送到该延迟缓冲器而不管任何其他准则,并且与阻塞指令已维持未提交达多少个周期无关。这种方法可能实现起来最简单。

然而,这可能会导致一些指令在事实上它们稍后很快就能够被提交时被分配到延迟缓冲器。因为延迟缓冲器中的空间可能有限,所以可以优先考虑将延迟缓冲器用于可能长时间维持阻塞的指令。因此,在其他示例中,延迟缓冲器控制电路可以进行对阻塞指令已维持多久未被提交的确定,并且这可以被用来确定阻塞指令是否应该被传送到延迟缓冲器。例如,当阻塞指令在完成执行后维持未被提交超出预定时段时,或者当其维持未被提交超过阻塞指令的预期提交时间时,该阻塞指令可以被传送。预期提交时间可以基于由负责调度指令的执行的处理电路的发出阶段提供的信息来确定,并且可以知道不同类型的指令可能用多少个处理周期。通过将阻塞指令到延迟缓冲器的传送限制到阻塞指令维持未被提交的时间超过给定时间量的情况,这允许更有效地使用延迟缓冲器中可用的空间,因为维持阻塞相对较短时间的指令可以被停留在功能单元中,并节省延迟缓冲器中的空间以用于更可能长时间阻塞流水线的指令。

用于确定是否传送阻塞指令的另一准则可以是是否存在在同一功能单元中待决的与该阻塞指令不同的线程的指令。不太复杂的实施方式可以简单地将阻塞指令传送到延迟缓冲器,而不管实际上在同一功能单元中在其后是否存在来自不同线程的指令。然而,在该给定功能单元中待决的所有指令都可能来自同一线程(例如,当前只有一个线程可能正在使用例如浮点单元,所以在浮点单元中在阻塞指令后面可能没有任何其他线程)。在同一功能单元中在阻塞指令后面没有来自其他线程的指令的情况下,因为来自同一线程的指令可能也被阻塞,所以将阻塞指令传送到延迟缓冲器的益处较少。通过将指令到延迟缓冲器的传送限制为在阻塞指令后面的不同线程可以继续进行的情况,这使得能够更有效地使用延迟缓冲器。

在一些实施例中,用于提供同时多线程的硬件资源可以仅支持一次两个并发线程,并且在这种情况下,单个延迟缓冲器就足够了。即使在支持不止两个硬件线程的系统中,单个延迟缓冲器仍可能是足够的,因为在实践中通常只有一些硬件线程可能受线程间阻塞的影响,因此仅提供可由受线程间阻塞影响的第一个线程使用的一个延迟缓冲器可以提供大部分的性能优势。

然而,一些示例可以提供两个或更多个延迟缓冲器,这可以实现改进的性能,尤其是在每个延迟缓冲器一次可以仅被分配来自一个线程的指令以便能够被实现为如上所述的fifo缓冲器的情况下。在这种情况下,然后通过提供多个延迟缓冲器,可以从处理电路的功能单元中移除来自不止一个线程的阻塞指令以使其他线程能够继续进行,这增加了在存在停滞的情况下进行一些前向发展的可能性。

同时存储两个或更多个线程的上下文数据的硬件寄存器是支持同时多线程的硬件资源的一个示例。在某些情况下,可以为不可以被重新分配或重新分区的线程中的每一者提供多个不同的寄存器组,并为每个硬件线程提供一定数目的寄存器。然而,在其他示例中,可以使用可重新分配的寄存器组,其可以根据正在执行的线程的数目来以不同的方式进行分区。

可以被提供以支持smt的硬件资源的其他示例可以包括以下各项中的一者或两者:

·由处理电路处理的每个指令可以与标识了与该指令相关联的线程的线程标识符一起沿着处理流水线被向下传递。这允许执行阶段例如识别哪一组硬件寄存器用指令的结果来进行更新,并使得提交电路能够追踪哪些指令一旦成为来自给定线程的最早指令就可以被提交。

·硬件寄存器可以存储指示了相应线程的当前执行点的多个程序计数器,每个程序计数器对应于由处理电路执行的不同线程。

图1示出了包括具有多个流水线阶段的处理流水线4的数据处理装置2的示例。流水线4是有序的处理流水线,所以指令按照其原始的程序顺序(对应于为相应程序定义的指令地址的顺序)被发出和提交。用于处理的多个线程的指令被存储在1级指令缓存6中。处理流水线包括用于从指令缓存6获取指令的获取阶段8、用于对获取到的指令进行解码的解码阶段10、用于确定用于处理指令的所需操作数是否可用并且当它们的操作数可用时发出指令以用于执行的发出阶段12、用于使用从寄存器文件16读取的操作数来执行指令以生成处理结果的执行阶段14、以及用于通过将结果写入针对所提交的指令的硬件寄存器16来将处理结果提交给架构状态的提交阶段18。提交阶段按照程序顺序提交指令。执行阶段14可以响应于加载/存储指令而访问1级数据缓存20中的数据。1级指令缓存6和1级数据缓存20是存储器系统的一部分,其还可以包括一个或多个其他级缓存(例如,针对数据和指令共享的二级缓存22)以及主存储器24。应理解的是,这仅是可能的存储器层次结构的一个示例,并且也可以使用其他布置。

有序流水线4支持同时多线程,使得来自多个线程的指令可以同时在流水线内运行。提供了多个硬件特征来实现这一点。例如,寄存器文件16包括用于为多个线程中的每一者存储多组架构状态数据的硬件寄存器组。例如,在图1中,系统支持正在同时执行的多达四个线程,因此提供了四组上下文数据寄存器r0-rn、pc,每个线程一个。这包括指示针对给定线程已到达的当前执行点的程序计数器寄存器30,因此提供了多个程序计数器寄存器,使得每个线程可以被指示为到达不同的执行点。应理解的是,其他控制信息寄存器也可以被每个线程分组(bank)。此外,沿着流水线传递的指令伴随有标识该指令所属于的线程的线程标识符32。然后,线程标识符可以在发出阶段12处用于指令的调度以考虑同一线程的指令之间的寄存器依赖性,在执行阶段14处用于确定寄存器文件的哪个分组版本要访问指令的操作数,以及在提交阶段处用于控制给定线程的提交,使得来自给定线程的指令按其原始程序顺序被提交而来自不同线程的指令可以按任意顺序被提交。

图2更详细地示出了执行阶段14和提交阶段18的一部分。执行阶段14包括多个功能单元40,功能单元40中的每一者提供单独的执行流水线以用于处理由发出阶段12发出的指令。每个功能单元40可以专用于处理特定类别的指令。例如,图2示出具有以下各项的执行阶段14:用于执行整数算术或逻辑指令的两个整数alu功能单元fu0、fu1;用于执行用于将数据从存储器系统加载到寄存器文件16的加载指令或用于将来自寄存器文件16的数据存储到存储器系统的存储指令的加载/存储功能单元fu2;以及用于执行作用于浮点操作数和/或生成浮点结果的浮点指令的浮点功能单元fu3。应理解的是,也可以提供其他类型的功能单元。给定类型的指令被分配给相关的功能单元,并且随着其沿着执行流水线向下进行其被执行以生成所需的处理结果。当指令到达给定功能单元执行流水线的末端时,其执行被完成,从某种意义上说该指令准备被提交。然而,如果到达给定功能单元的末端的被执行的指令不是针对相应线程维持的程序顺序中最早的指令,则由于提交逻辑18按程序顺序进行提交,所以该指令不能被提交,并因此这可能使相应的功能单元停滞。

这种停滞可能导致线程间阻塞。图2中示出了可以导致这种问题的场景的示例。例如,在第一线程a中的最早指令a1在加载/存储功能单元中待决并且停滞,因为它请求来自1级数据缓存20的数据且存在缓存未命中(cachemiss),所以在从存储器系统中获得数据时存在延迟。因此,指令a1还不能完成执行。同时,来自同一线程a的后续指令a2已到达一个整数alu功能单元的末端并已完成执行,但是由于它不是线程a的最早指令,所以它还不能被提交。因此,指令a2阻塞整数alu流水线。来自不同线程b的指令b1在整数功能单元中在指令a2之后待决,虽然它与指令a2无关,但仍然在同一功能单元流水线中被卡在a2后面,因此不能完成执行。另外,如果包括阻塞指令a2的功能单元已充满指令,则它也不能接受从发出阶段12发出的任何新的指令,这也可以阻止没有在指令a2后面的任何较早的指令的给定线程继续进行(如果没有具有所需功能的其他功能单元可用的话)。因此,在有序的smt流水线中的这种线程间阻塞问题可能会降低可以实现的性能。

可以通过使用一个或多个延迟缓冲器50来解决该问题,该延迟缓冲器50被提供以允许在阻塞指令已完成执行且准备提交但并非相应线程中的最早指令时从功能单元40中移除该阻塞指令。这使得相应的功能单元40能够被解除阻塞,使得在阻塞指令后面的来自其他线程的指令然后可以继续进行。在该示例中,在执行功能单元40后面提供两个延迟缓冲器50以存储已完成执行但因为同一线程中的较早的指令停滞而仍不能提交的阻塞指令(如指令a2)。提供延迟缓冲器控制逻辑52以检查各个功能单元40中的指令,从而检测应被分配到延迟缓冲器的阻塞指令。从提交逻辑18的角度来看,延迟缓冲器50简单地变为像功能单元40的执行流水线一样的另一被完成的指令的源。延迟逻辑52按程序顺序将给定线程的阻塞指令分配给延迟缓冲器,并且一旦一个线程a的给定指令a2已被分配给一个特定的延迟缓冲器50,则来自其他线程b、c等的指令不能被分配给该延迟缓冲器,直到延迟缓冲器被排空。提供两个或更多个延迟缓冲器50使得更多的线程被解除阻塞,但是其他示例可以提供仅单个延迟缓冲器。

图3是示出由延迟缓冲器控制逻辑52和提交阶段18进行的处理的流程图。在步骤70,提交逻辑18针对给定线程x确定线程x中最早的指令的执行是否已完成。如果最早指令的执行已完成,则在步骤72,线程x中最早的指令被提交阶段18提交,并且被从功能单元40或延迟缓冲器50中移除。注意,线程x中最早的指令可以在功能单元40中或在延迟缓冲器50中,而对于功能单元40,线程x的最早指令可能已被完成或可能未被完成,如果最早的指令在延迟缓冲器50中,则按照定义它应已完成执行。在提交完线程x的最早指令之后,该方法返回到步骤70以检查下一个最早指令。

如果线程x中的最早指令还未完成执行,则在步骤74,延迟缓冲器控制逻辑52确定当在与线程x的最早执行的指令不同的功能单元中至少一个较早的指令未被完成时该线程x的最早执行的指令的执行是否已被完成。如果没有,则不进行指令到延迟缓冲器的传送,并且该方法返回到步骤70以继续等待线程x的最早指令完成。然而,如果线程x中最早执行的指令已被完成并且在与最早指令不同的功能单元中,则最早执行的指令被标识为阻塞指令,并且在步骤76,将阻塞指令从功能单元42传送到延迟缓冲器50的过程被触发。在一些实施方式中,每当步骤74的准则被满足时阻塞指令可以被传送到延迟缓冲器50中的一者(假设延迟缓冲器50中存在可用空间)。然而,还可以应用用于确定是否将线程x的待决的阻塞指令传送到延迟缓冲器50的一个或多个附加准则。图4更详细地示出了这些准则。

如图4的步骤80所示,延迟缓冲器控制电路可以确定是否存在空的延迟缓冲器50或已被分配为用对阻塞指令可用的空间来对来自线程x的指令进行缓冲的延迟缓冲器50。如果不存在,则不传送阻塞指令,而是在步骤82将阻塞指令保留在其相应的功能单元40中。步骤80的这个准则确保给定延迟缓冲器50一次只能包含来自一个线程的指令,使得提交逻辑18在确定哪个指令是给定线程的最早执行的指令时不需要查找延迟缓冲器的不止一个条目。这支持将延迟缓冲器实现为fifo。

如果存在空的延迟缓冲器或在已被分配给线程x的延迟缓冲器中存在可用空间,则在步骤84,延迟缓冲器控制逻辑52检查是否存在作为阻塞指令的在同一功能单元40中待决的来自与线程x不同的线程的任何指令。如果不存在,则在步骤85检查在空的延迟缓冲器50或已被分配给线程x的延迟缓冲器中是否存在足够的空间以容纳来自线程x的所有完成指令的传送。如果在同一功能单元40中不存在作为阻塞指令的来自不同待决线程的指令,并且在延迟缓冲器50中没有足够的空间来容纳来自同一功能单元的所有完成指令,则再次在步骤82将阻塞指令保留在功能单元40中。然而,如果存在来自不同待决线程的指令,或者存在用于传送来自包含阻塞指令的功能单元的线程x的所有完成指令的空间,则该方法移到步骤86。在步骤84中应用的准则将延迟缓冲器的使用限制到在阻塞指令后面存在来自不同待决线程的指令的情况,在这种情况下将阻塞指令从功能单元传送到延迟缓冲器更有可能可以允许另一线程的继续进行,从而避免用实际上不允许对停滞线程进行解除阻塞的指令来填充延迟缓冲器。

在步骤86,延迟缓冲器控制逻辑52确定阻塞指令是否在执行完成之后超出预定周期或超过预期提交时间未被提交。如果不是,则再次在步骤82,将阻塞指令保留在功能单元40中,而如果阻塞指令被保持未提交的时间超出时段或超过预期提交时间,则在步骤88,将阻塞指令传送到延迟缓冲器50中的一者。如果存在已被分配给线程x的延迟缓冲器,则使用该延迟缓冲器来分配阻塞指令(假设该缓冲器尚未满),而如果不存在已被分配给线程x的延迟缓冲器,则使用空的延迟缓冲器。可以从发出阶段提供关于阻塞指令的预期提交时间的信息,其中发出阶段通常用给定指令预期将会用多少个周期的知识来调度指令。

在图4中的步骤80、84、以及86处应用的准则不是必需的,并且在其他示例中,可以省略这些步骤中的一个或多个,使得即使这些准则中的一个或多个未被满足,阻塞指令也可以被传送到延迟缓冲器。

图3和图4所示的方法可以针对流水线支持的每个线程分别执行(每个线程可以与其他线程的方法同时并且独立于其他线程的方法而逐步进行图3和图4)。因此,虽然线程a可能因为其最早的指令尚未被提交而停滞,但线程b仍可以继续进行。虽然为了便于解释,图3和图4描述了一次对单个指令的提交和到延迟缓冲器的传送,但一些实施方式可以提供提交逻辑18和延迟逻辑52,其中只要不违反程序顺序,延迟逻辑52能够每个周期处理通常来自同一线程的不止一个指令。

在一些示例中,发出阶段12可以根据针对该线程的延迟缓冲器的当前占用情况和/或已检测到的在停滞指令(例如,遇到诸如缓存未命中之类的某长等待时间操作的指令)后面发出的指令的数目来控制给定线程是否被允许向执行阶段14发出更多指令。这可以降低功能单元40充满来自阻塞线程的指令的可能性,增加了其他线程可以继续进行的机会。此外,这减少了这样的机会:一个线程发出比可用延迟缓冲器条目的数目更多的阻塞指令,这可能使得延迟缓冲器机制不能阻止进一步的线程间阻塞。

例如,当指示在至少一个延迟缓冲器中有多少个正在待决的来自给定线程的指令的缓冲器占用率达到或超过预定阈值时,问题阶段12可以阻止来自所述给定线程的指令被发出到处理电路以供执行。该阈值可以对应于完全填满的与给定线程相关联的延迟缓冲器,或者可以被设置为较低等级以提前暂停给定线程的发出,使得已在功能单元40中的来自阻塞线程的指令仍然可以进入延迟缓冲器50。一旦延迟缓冲器开始解除阻塞并且缓冲器占用率下降到阈值以下,则发出阶段12可以再次开始发出阻塞线程的指令。

可选地,当在针对其的停滞条件(例如,缓存未命中或其他长等待事件)被检测到的指令之后来自给定线程的预定数目的指令已被发出到处理电路时,发出阶段12可以防止来自给定线程的指令被发出到所述处理电路以供执行。例如,预定数目的指令可以对应于一个延迟缓冲器50的大小,使得在停滞指令后面,在延迟缓冲器内将有足够的空间来容纳同一线程的后续指令。替代地,预定数目的指令可以小于延迟缓冲器50的容量。例如,考虑到有序处理器不太可能在长等待时间指令的阴影下找到许多独立指令,在实践中一检测到长等待时间指令就停止发出可能就足够了(因此指令的预定数目可以是零)。不管怎样,一旦长等待时间指令被完成,则可以重新开始对来自阻塞线程的指令的发出。

用于处理延迟缓冲器变满的另一选项是使用选择性刷除(flush)。当针对线程的延迟缓冲器已满时,发出到功能单元的任何更新(younger)的指令都将被刷除。如果内核支持指令重放,则在相应的线程被解除阻塞之后这些指令可以被重新发出,否则,所有更新的指令都可以被刷除并且程序计数器可以被设置为在线程被解除阻塞之后重新从最早刷除的指令进行获取。因此,响应于与给定线程相关联的给定延迟缓冲器变满,处理电路可以刷除在所述处理电路中待决的与给定线程相关联的一个或多个剩余指令。这减少了延迟缓冲器中不能容纳的阻塞指令阻塞其他线程的指令继续进行的机会。

在本申请中,词语“被配置为......”用于表示装置的元件具有能够执行所定义的操作的配置。在这种情境中,“配置”是指硬件或软件互连的布置或方式。例如,该设备可以具有提供所定义的操作的专用硬件,或者处理器或其他处理设备可以被编程为执行该功能。“被配置为......”并不意味着装置元件需要以任何方式被改变以便提供所定义的操作。

尽管本文已参考附图详细描述了本发明的说明性实施例,但应理解的是,本发明不限于这些精确的实施例,并且本领域技术人员可以在不背离由所附权利要求限定的本发明的范围和精神的情况下在其中进行各种改变和修改。

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