首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

用于管线间数据危害避免的方法和系统 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:畅想科技有限公司

摘要:本公开涉及用于管线间数据危害避免的方法和系统。管线间数据危害在编译时间被标识。对于每个标识的管线间数据危害,其中主指令和一个或多个次指令都被如此标识并且通过用于跟踪管线间数据危害的计数器被链接。然后,当由指令解码器输出主指令用于执行时,与之相关联的计数器的值被调整例如,增加以指示存在与主指令相关的危害,并且当主指令已被多个并行处理管线解决时,与之相关联的计数器的值被调整例如,减少以指示与主指令相关的危害已被解决。当解码器输出次指令用于执行时,如果与其依赖的主指令相关联的至少一个计数器指示存在与该主要相关的危害,则将次指令停滞在与适当的指令管线相关联的队列中。

主权项:1.一种并行处理单元,包括:计数器块,该计数器块包括多个计数器,所述多个计数器包括与低延迟数据危害相关联的一组低延迟计数器;多个队列,每个队列在多个指令管线中的一个指令管线之前,并且与所述计数器块通信;指令解码器,被配置为:解码接收到的指令;响应于确定所解码的指令是至少一个其他指令所依赖的主指令,使得与所述主指令相关联的所述计数器块的所述多个计数器中的计数器的值被调整以指示存在与所述主指令相关的危害,其中,当执行依赖于所述主指令的次指令是不安全的时,存在与所述主指令相关的危害;并且将所述解码的指令转发到所述多个队列中的一个队列;以及监测器逻辑,被配置为监测所述多个指令管线,并且响应于检测到指令管线已经解决了与主指令相关的危害,使得与所述主指令相关联的所述计数器的值被调整以指示与所述主指令相关的所述危害已被解决;其中,每个队列被配置为响应于接收到依赖于一个或多个主指令的次指令,如果与所述次指令所依赖的主指令相关联的所述计数器块的所述多个计数器中的低延迟计数器指示存在与该主指令相关的危害,则停滞由所述相关联的指令管线对所述次指令的执行;其中,低延迟数据危害是如下数据危害:该数据危害的所述主指令将由所述多个指令管线中的具有高于或等于预定阈值的吞吐量的指令管线执行。

全文数据:用于管线间数据危害避免的方法和系统技术领域本公开总体涉及用于管线间数据危害避免的方法和系统。背景技术如本领域技术人员所知的,当指令的管线改变对指令操作数的读取和写入访问的顺序以使得顺序不同于将逐个顺序地执行指令而出现的顺序时,在具有指令管线的处理单元中产生数据危害。存在三类数据危害:先写后读RAW危害;先读后写WAR危害;以及先写后写WAW危害,它们根据在程序中必须由管线保留的顺序而命名。RAW数据危害是最常见的数据危害类型,并且当较早指令写入该源操作数之前较晚指令相对于程序中的指令顺序尝试读取源操作数时发生。这会导致较晚指令得到旧的操作数的值。例如,如果有如下一组指令:R1=R2+R3R4=R1-R5其中第一指令使得寄存器2R2和寄存器3R3的值的总和被存储在寄存器1R1中,并且第二指令使得寄存器1R1的值与寄存器5R5之间的差被存储在寄存器4R4中,如果第二指令在第一指令写入寄存器1R1之前读取寄存器1R1,则会发生RAW数据危害。当较晚指令相对于程序中的指令的顺序在操作数被较早指令写入之前写入操作数,导致以错误的顺序执行写入,使得操作数具有来自较早指令的值而不是来自较晚指令的值时,则发生WAW数据危害。当较晚指令相对于程序中的指令的顺序尝试在操作数被较早指令读取之前写入操作数,导致较早指令读取不正确的值时,则会发生WAR数据危害。存在许多用于避免由单个指令管线引起的数据危害的已知方法诸如,转发,但诸如图形处理单元GPU之类的许多处理单元被配置有多个并行指令管线以有效地并行处理大量数据。在这样的并行处理单元中,不仅需要跟踪和消除管线内危害即,与在相同指令管线中执行的指令相关的危害,还需要跟踪和消除管线间危害即,与在不同指令管线中执行的指令相关的危害。以下描述的实施例仅作为示例提供,并不限制解决已知GPU或并行处理单元的任何或全部缺点的实现。发明内容提供本概述是为了介绍将在以下详细说明中进一步描述的概念的选择。本概述不旨在确定所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。本文描述的是用于避免管线间数据危害的方法和并行处理单元,其中管线间数据危害在编译时间被标识。对于每个标识的管线间数据危害,其中主指令和一个或多个次指令都是通过用于追踪管线间数据危害的计数器被标识并且链接的。当由指令解码器输出主指令用于执行时,与之相关联的计数器的值被调整例如,增加以指示存在与主指令相关的危害,并且当主指令已被多个并行处理管线解决时,与之相关联的计数器的值被调整例如,减少以指示与主指令相关的危害已被解决。当解码器输出次指令用于执行时,如果与其依赖的主指令相关联的至少一个计数器指示存在与该主指令相关的危害,则将次指令停滞stall在与适当的指令管线相关联的队列中。第一方面提供了一种并行处理单元,包括:多个计数器;多个队列,每个队列在多个指令管线中的一个指令管线之前;指令解码器,被配置为:解码接收到的指令;响应于确定解码的指令是至少一个其他指令所依赖的主指令,使得与主指令相关联的多个计数器中的计数器的值被调整以指示存在与主指令相关的危害;以及将所解码的指令转发到该多个队列中的一个队列;以及监测器逻辑,其被配置为监测该述多个指令管线,并且响应于检测到指令管线已经解决与主指令相关的危害,使得与主指令相关联的计数器的值被调整以指示与主指令相关的危害已被解决;其中,每个队列被配置为响应于接收到依赖于一个或多个主指令的次指令,如果与次指令所依赖的主指令相关联的计数器指示存在与该主指令相关的危害,则停滞相关联的指令管线对次指令的执行。第二方面提供了一种避免并行处理单元中的数据危害的方法,该方法包括:由指令解码器解码指令;响应于在指令解码器处确定解码的指令是至少一个其他指令所依赖的主指令,使得与该主指令相关联的多个计数器中的计数器的值被调整以指示存在与该主指令相关的危害;以及将解码的指令从指令解码器转发到多个队列中的队列,每个队列接收将由多个指令管线中的一个指令管线执行的指令;响应于在队列处确定接收到的指令是依赖于一个或多个主指令的次指令,如果与次指令所依赖的主指令相关联的计数器指示存在与主指令相关的危害,则停滞次指令由相关联的指令管线执行;以及响应于由监测器硬件逻辑检测到与主指令相关的危害已被多个指令管线中的指令管线解决,使得与主指令相关联的计数器的值被调整以指示与主要指令有关的危害已被解决。第三方面提供了一种生成用于并行处理单元的计算机可执行指令的计算机实现的方法,该方法包括:由处理器:接收多个相关指令;标识该多个相关指令中的数据危害,每个数据危害包括主指令和一个或多个次指令;为每个主指令分配多个计数器的计数器以跟踪所标识的数据危害;生成用于每个主指令的计算机可执行指令,该计算机可执行指令包括指示该计算机可执行指令是主指令的信息和标识被分配给该主指令的计数器的信息;以及生成用于每个次指令的计算机可执行指令,该次指令包括标识该计算机可执行指令是次指令的信息和标识被分配给相应的主指令的计数器的信息;以及将计算机可执行指令加载到并行处理单元中。本文描述的并行处理单元可被实现在集成电路上的硬件中。可以提供一种在集成电路制造系统中制造本文所述的并行处理单元的方法。可以提供集成电路定义数据集,当该集成电路定义数据集在集成电路制造系统中被处理时,配置系统以制造本文描述的并行处理单元。可以提供一种存储有集成电路的计算机可读描述的非暂态计算机可读存储介质,当在集成电路制造系统中处理时,使得集成电路制造系统来制造本文描述的并行处理单元。可以提供一种集成电路制造系统,包括:其上存储有描述了本文描述的并行处理单元的计算机可读集成电路描述的非暂态计算机可读存储介质;布局处理系统,被配置为处理集成电路描述,以生成体现本文描述的并行处理单元的集成电路的电路布局描述;以及集成电路生成系统,被配置为根据电路布局描述来制造本文描述的并行处理单元。可以提供用于执行如本文描述的方法的计算机程序代码。可以提供存储有计算机可读指令的非暂态计算机可读存储介质,当该计算机可读指令在计算机系统处被执行时,使计算机系统执行如本文描述的方法。附图说明参考附图通过示例描述本发明。在附图中:图1是第一示例并行处理单元的框图;图2是图1的指令的格式的示意图;图3是图1的示例队列的框图;图4是图1的示例计数器块的框图;图5是用于避免管线间数据危害的示例方法的流程图;图6是第二示例并行处理单元的框图;图7是图6的示例计数器块的框图;图8是用于避免管线间数据危害的第二示例方法的流程图;图9是第三示例并行处理单元的框图;图10是图9的示例计数器块的示意图;图11是用于避免管线间数据危害的第三示例方法的流程图;图12是生成用于在并行处理单元上执行的指令的示例方法的流程图;图13是为主指令分配计数器的示例方法的流程图;图14是其中实现本文描述的并行处理单元的示例计算机系统的框图;以及图15是用于生成体现用于实现本文描述的并行处理单元的系统的集成电路的示例集成电路制造系统的框图。具体实施方式通过示例的方式给出以下描述以使本领域技术人员能够制造和使用本发明。本发明不限于这里描述的实施例,并且对于本领域技术人员来说,对所公开的实施例的各种修改将是明显的。仅通过示例来描述实施例。如上所述,诸如GPU之类的许多处理单元包括多个并行指令管线,其被设计为并行有效地处理大量数据。例如,一些处理单元可以包括一组并行指令管线,其包括至少两条指令管线,每条指令管线针对特定类型或多种类型的计算被优化。拥有被配置为执行不同类型计算的多条指令管线,允许缓慢或很少使用的指令以高吞吐量常见算术运算被并行执行,从而缓慢或很少使用的指令不会成为瓶颈。这也允许每个管线的算术逻辑单元ALU针对其特定用途分别进行优化。尽管多个指令管线允许更有效地使用处理资源例如,算术逻辑单元ALU资源并且允许将由资源争用导致的停滞进行隐藏,但是通过在多个指令管线上重新排序指令使得跟踪数据危害以确保指令按正确的顺序执行复杂化。具体地,在这样的并行处理单元中,不仅需要跟踪和消除管线内危害即,与在相同指令管线中执行的指令相关的危害,还需要跟踪和消除管线间危害即,与在不同指令管线中执行的指令相关的危害。具体地,由于有多条并行运行的指令管线,相关的指令可能同时处于不同的管线处理速率不同。因此,需要一种机制:确保如果在不同管线中执行的指令之间存在数据危害,则在数据危害清除之前不会执行相关指令。由于将需要跟踪大量的管线阶段并且需要大量的比较,所以仅在硬件中检测管线间数据危害在面积area方面是非常昂贵的。因此,本文描述了用于避免具有多个并行指令管线的GPU或其他并行处理单元诸如,用于高性能计算应用中的管线间数据危害的软件控制的方法和系统。具体而言,在本文描述的方法和系统中,在构建时例如,通过编译器标识管线间数据危害,并且将信息插入标识主指令的指令中即,在另一管线中的一个或多个指令所取决于的指令和次指令即取决于另一管线中的一个或多个主指令的指令,并通过计数器链接主指令和次指令,该计数器用于跟踪管线间数据危害并实施指令的适当排序。当并行处理单元的指令解码器输出主指令用于执行时,相关计数器被修改例如,增加以指示存在与该主指令相关的危害即,执行取决于该主指令的次指令是不安全的。当随后检测到与该主指令相关的危害已被解决例如,主指令已将数据写入存储器时,相关联的计数器的值被调整例如,减少以指示与该主指令相关的危害已被解决即,执行依赖于该主指令的次指令是安全的。由指令解码器输出的用于执行的指令被发送到与适当指令管线相关的队列。在从队列向指令管线发送用于执行的指令之前,队列针对每个次指令检查与次指令所依赖的一个或多个主指令相关联的一个或多个计数器。只要与次指令所依赖的一个或多个主指令相关联的一个或多个计数器中的至少一个计数器指示存在危害,则次指令在队列中被停滞。在即将由指令管线执行之前停滞次指令显示了在次指令所依赖的一个或多个主指令将被快速完成的情况下例如,当主指令由具有高吞吐量的指令管线执行时增强性能。这种管线间数据危害在本文可以被称为低延迟管线间数据危害。然而,在即将由指令管线执行之前停滞次指令显示了在次指令所依赖的一个或多个主指令将被缓慢完成的情况下例如,当由具有低吞吐量的指令管线执行主指令时降低性能。这样的管线间数据危害在本文可以被称为高延迟管线间数据危害。因此,在本文描述的一些实施例中,编译器可以被配置成单独标识并标记低延迟管线间数据危害和高延迟管线间数据危害。在这些实施例中,可以如上述处理低延迟管线间数据危害例如,当指令解码器输出低延迟管线间数据危害的主指令时,与主指令相关联的计数器的值被调整以指示存在与该主指令相关的危害,并且随后检测到与该主指令相关的危害已被解决例如,主指令已将数据写入存储器时,调整与主指令相关联的计数器的值以指示与该主指令相关的危害已被解决;并且只要与由指令解码器输出的用于执行的低延迟数据危害相关的次指令所依赖的主指令相关联的至少一个计数器的值指示存在危害,该次指令被停滞在适当指令管线之前的队列中。然而,高延迟管线间数据危害以不同的方式处理。具体地,高延迟管线间数据危害的主指令以与低延迟管线间数据危害的主指令相同的方式进行处理例如,当高延迟管线间数据危害的主指令由解码器输出用于由指令管线执行,与之相关联的计数器的值被调整以指示存在与主指令相关的数据危害,并且当随后检测到危害已被解决例如,主指令已被写入存储器时,与之相关联的计数器的值被调整以指示与主指令相关的数据危害已被解决。然而,当由指令解码器解码至少一个高延迟数据危害的次指令时,则做出关于相关的一个或多个高延迟数据危害是否已被解决即,所依赖的一个或多个主指令相关联的计数器的值是否表明高延迟危害已被解决的确定。如果解决了相关的高延迟危害,则解码器输出次指令以供适当的指令管线执行。然而,如果尚未解决相关的高延迟危害,则由指令解码器撤销次指令的调度例如,将次指令发送回调度器,直到相关的高延迟危害已被解决即,直到与其所依赖的主指令相关联的计数器指示危害已被解决。一旦次指令的相关高延迟危害被解决,则次指令被重新调度并被发送回指令解码器进行处理。在一些情况下,次指令可能依赖于高延迟主指令和低延迟主指令。在这些情况下,次指令将同时受到上述管线间避免危害机制的影响。具体地,指令解码器将检查与高延迟主指令相关联的计数器,并且队列将被配置为检查与低延迟主指令相关联的计数器。尽管本文描述的方法、系统和技术被描述为用于管线间数据危害避免,但是本文描述的方法、系统和技术也可以用于管线内数据危害。例如,在其中面积与性能之间的折衷不能证明可以通过其他方式实现的具有周期精确的危害检测的成本的情况下,本文所述的方法、系统和技术也可以用于管线内数据危害避免。在这些情况下,编译器将被配置成还标识管线内数据危害并且以与本文所述相同的方式更新其主指令和次指令。现在参考图1,图1示出了可以是GPU或其他并行处理单元的第一示例并行处理单元100。应该理解的是,图1仅示出了并行处理单元100的一些元件,并且在并行处理单元内可能有未在图1中示出的许多其他元件例如缓存、接口等。图1的并行处理单元100包括具有多个计数器103的计数器块102、指令解码器104、多个指令管线106、监测器逻辑108、以及在每个指令管线106之前的队列110。计数器块102包括多个计数器103,这些计数器103用于跟踪管线间数据危害并根据其执行指令的排序。具体地,计数器103用于指示i何时存在与主指令相关的危害,并因此对于要执行的依赖该主指令的次指令是不安全的例如,一个或多个次指令应该停滞;ii何时当解决了与主指令相关的危害,并因此执行依赖于该主指令的次指令是安全的。具体地,计数器103被配置为使得当计数器具有预定值或一组值时,其指示存在与相关联的主指令相关的危害;并且当计数器具有不同的预定值或一组预定值时,它指示与相关联的主指令相关的危害已被解决。在一些示例中,计数器103被配置为使得当计数器具有非零值时,指示存在与相关联的主指令相关的危害,并且当计数器具有零值时,指示与相关联的主指令相关的危害已被解决。对于本领域技术人员而言明显的是,这仅是示例,并且计数器103可以被配置为使得不同的值指示存在危害和或危害已被解决。当计数器103指示存在与相关联的主指令相关的危害时,计数器103充当其所依赖的次指令已达到的护栏。具体地,次指令必须等待直到护栏被移除。相应地,图1的计数器103在本文可以被称为护栏计数器。计数器块102被配置为响应于从指令解码器104、监测器逻辑108和可选的队列110接收调整指令或信号,而调整计数器103的值;并且生成计数器状态信息并将其提供给队列110。具体地,如下面更详细描述的,指令解码器104被配置为响应于输出主指令例如,响应于将主指令转发给队列110用于执行,向计数器块102发送调整指令或信号,其使得计数器块102调整与主指令相关联的计数器103的值以指示主指令存在危害。监测器逻辑108被配置为响应于检测到与主指令相关的危害已被指令管线106部分或完全解决,向计数器块102发送调整指令或信号,其使得计数器块102调整与主指令相关联的计数器103的值以指示与主指令相关联的危害已被部分或完全解决。队列110还可以被配置为响应于检测到主指令部分或完全不再有效并因此该主指令被部分或完全丢弃,向计数器块102发送调整指令或信号,其导致计数器块102调整与主指令相关联的计数器103的值,以指示与主指令相关的危害已被部分或完全解决。计数器状态信息包括指示是否存在与每个计数器相关联的主指令相关的危害或危害是否已被清除或已被解决的信息。计数器块102被配置为基于计数器103的值生成计数器状态信息。在一些情况下,计数器状态信息可以包括用于每个计数器103的标记或位,该标记或位指示是否存在与相应的主指令相关的危害或与相应的主指令相关的危害是否已被解决。例如,计数器状态信息可以包括用于每个计数器103的单个位标记,其中标记被设置为“1”以指示存在与主指令相关的危害,并且标记被设置为“0”以指示与主指令相关的危害已被解决。在其他情况下,计数器状态信息可以包括每个计数器103的值,并且计数器状态信息的接收者被配置为根据这些值确定与相关联的主指令相关的危害是否已被解决。指令解码器104接收指令,该指令包括标识主指令即,在另一指令管线中至少一个其他指令所依赖的指令、次指令即,依赖于另一个管线中的至少一个主指令的指令、以及它们相关联的计数器的信息例如由编译器在构建时插入。具体地,每个主指令将被分配一个计数器,并且一个或多个次指令将通过该计数器链接到主指令。由于次指令可能依赖于多于一个主指令,所以次指令可以通过多个计数器链接到多个主指令。下面参考图2描述标识主指令和次指令以及它们相关联的计数器的信息和信息格式的示例。通常情况下,计数器数量少于管线间数据危害,因此计数器通常会重复用于多个管线间数据危害。指令解码器104对接收到的指令进行解码,选择用于执行每条指令的适当的指令管线,并输出该指令以供选择的指令管线执行。如果指令解码器104确定被输出用于执行的指令是主指令,则指令解码器向计数器块102发送调整指令或信号,该调整指令或信号使计数器块102将与该主指令相关联的计数器103的值调整为指示存在与主指令相关的危害因此,执行依赖于该主指令的次指令是不安全的。例如,如果主指令X与计数器2相关联,则当指令解码器104输出主指令X用于执行时,指令解码器104将向计数器块102输出调整信号或指令,使得计数器块102调整计数器2的值,以指示存在与主指令X相关的危害。在一些示例中,指令解码器104可以被配置为响应于输出主指令用于执行,而输出调整指令或信号,该调整指令或信号使得计数器块102将与主指令相关联的计数器103增加预定量例如,8。在一些情况下,如下所述,每个指令可以是导致指令的多个实例被执行的任务的一部分或与其相关。在这些情况下,仅当对于主指令的所有实例的危害已被解决时,执行次指令是安全的。在这种情况下,计数器103增加的预定量可以反映可以分开地跟踪危害的实例或实例组的数量。例如,如果指令的32个实例可以以4的组即,8个组执行,则指令解码器104可以被配置为将计数器103增加8。每个指令管线106包括用于执行指令的硬件逻辑例如,一个或多个ALU。在一些示例中,多个指令管线106包括被配置为执行不同类型的解码指令的至少两个不同的指令管线。例如,指令管线106可以包括一个或多个指令管线,其被配置为:i执行位整数运算、浮点运算和逻辑按位运算;ii计算每实例的纹理坐标或其他变化;iii执行32位浮点非有理先验运算;iv执行64位浮点运算;v执行数据复制和格式转换;vi执行纹理地址计算;以及vii在本地存储器寄存器上执行原子运算。具有配置为执行不同类型指令的多个指令管线允许缓慢或很少使用的指令与高吞吐量常见算术操作并行执行,以便缓慢或很少使用的指令不会成为瓶颈。这也允许ALU分别针对其特定用途进行优化。在一些情况下,指令管线106可以每个都是单指令多数据SIMD管线。如本领域技术人员已知的,SIMD指令是当被执行时使得对与指令相关联的多个数据项执行相同操作的指令。SIMD指令允许更少的指令指定相同的工作量,从而减少指令提取模块和指令解码器的压力。因此,SIMD管线是能够处理SIMD指令的管线,即它是能够在多个数据项上执行相同指令的管线。这意味着如果指令是任务的一部分,如下面更详细描述的,指令管线106可以使用一个发布的指令来执行整个任务的实例或数据项。指令管线可能需要超过一个时钟周期来处理发布的SIMD指令。监测器逻辑108监测指令管线106以检测与主指令相关的危害何时已被指令管线部分或完全解决,并且响应于检测到与主指令相关的危害已经部分或完全由指令管线106解决而发送调整指令或信号到计数器块102,以使与主指令相关联的计数器指示与主指令相关的危害已被部分或完全解决。例如,如果主指令与计数器2相关联,则当监测器逻辑108检测到指令管线106已经解决了与该主指令相关的危害时,监测器逻辑108将向计数器块102发送调整信号或指令以使得计数器块102调整计数器2的值,以指示与该主指令相关联的危害已被解决。在一些示例中,监测器逻辑108可以被配置为响应于检测到与主指令相关联的危害已被指令管线106部分或完全解决,发送调整信号或指令给计数器块102,其使得计数器块102将计数器103的值减少预定量例如,1或8以指示已经部分或完全解决危害。如下面更详细描述的,在一些情况下,每个指令可以是导致要执行指令的多个实例例如,高达32个实例的任务的一部分或与其相关联。在这些情况下,当所有实例已经解决危害时,则称危害被完全解决,并且当一些但不是全部实例已经解决危害时,则称危害被部分解决。这些实例可以被分成多个组例如8个,并且每组作为一个块被执行,从而可以分别跟踪每个块的执行。在这些情况下,监测器逻辑108可以被配置为每次检测到与一个主指令相关的危害已被一组实例解决时发送单独的指令或信号,以使计数器的值被调整以指示危害已被部分解决例如指令将计数器的值减1。一旦危害由每个组解决,计数器将指示危害已经完全解决。对于本领域技术人员而言明显的是,这仅是示例,并且监测器逻辑108可以被配置为使得计数器块102以任何合适的方式调整与主指令相关联的计数器的值,使得该计数器将具有指示与其相关的危害已被完全地或部分地解决的值。监测器逻辑108可以被配置为使用不同的标准来基于危害的类型来确定危害何时已经被指令管线106解决。例如,当主指令已经将指令的结果写入存储设备112诸如,存储器114或寄存器未示出时,可以解决WAW或RAW危害。因此,监测器逻辑108可以被配置为当监测器逻辑108检测到指令管线106已经将主指令的结果写入到存储设备112时,检测WAW或RAW危害已被指令管线106解决。在每个指令管线106具有到存储单元的接口的这些情况下,监测器逻辑106可以被配置为监测这些指令管线106到存储接口以检测对存储设备的写入。相反,当指令管线106已经读取了主指令的源时,可以解决WAR危害。因此,监测器逻辑108可以被配置为,当监测器逻辑108检测到主指令的源已被指令管线106读取时,检测WAR危害是否已经由指令管线106解决。尽管监测器逻辑108在图1中示出为与指令管线分离的单个逻辑块,在其他示例中,监测器逻辑108可以分布在指令管线106中并且作为指令管线106的一部分。例如,每个指令管线106可以包括其自己的监测器逻辑。每个指令管线106之前都有队列110,该队列接收来自指令解码器104的将由相应的指令管线106执行的指令,并且将所接收的指令转发到相应的指令管线106以按顺序执行。每个队列110被配置为在将指令转发到相应的指令管线106以供执行之前,确定指令是否是次指令。如果该指令不是次指令,则该指令被转发到相应的指令管线106以供执行。然而,如果该指令是次指令,则根据计数器103和或计数器状态信息做出与次指令所依赖的主指令相关的危害是否已被解决的确定。如果与次指令所依赖的主指令相关的危害已被解决,则次指令被转发到相应的指令管线106以供执行。但是,如果与次指令所依赖的主指令相关的至少一个危害尚未解决,则指令被停滞。因此,仅当与一个或多个主指令相关联的所有计数器指示相关的危害已被解决,指令才能被转发到指令管线106以供执行。例如,如果队列110接收依赖于与计数器2和3相关联的主指令的次指令,则队列110不能将次指令转发到指令管线,直到计数器2和3都具有指示相关危害已得到解决的值例如,零。在一些示例中,停滞次指令可能会停滞所有后续指令被相关联的指令管线的执行。然而,如下面参照图3更详细描述的,在指令是任务的一部分或与任务相关联的其他示例中,当队列110停滞与第一任务相关的次指令时,它可以能够将与不同任务相关的其他后续指令转发到相关联的指令管线。在一些情况下,队列110可以被配置为通过轮询或请求来自计数器块102的适当计数器的计数器状态信息来确定一个或多个适当计数器的值。在其他情况下,计数器块102可以被配置为周期性地将计数器状态信息推送到队列110。在一些情况下,队列110还可以被配置为向计数器块102发送调整指令或信号,该调整指令或信号使得计数器块102调整与主指令相关联的计数器103的值以指示,如果在转发之前队列110检测到指令将被部分或完全丢弃,则危害已经部分或完全被解决。具体地,由于各种原因,指令被发送到队列110以供执行是可能的,但是当该指令被发布到指令管线的时候,可能不再希望该指令被执行。例如,这可能在并行处理单元实施预测时发生。如本领域技术人员所知,预测是在并行处理单元中实现的处理,其是分支预测的替代方案。在分支预测中,并行处理单元预测将被执行的分支路径并且预测性地执行与该分支相关的指令。错误预测即,错误猜测分支的哪条路径将被采用可能导致管线停滞并导致从实际分支目标地址取指令。相反,在预测中,与分支的所有可能路径相关的指令被并行执行,并且只允许那些与如根据分支条件确定的所采用路径相关的指令来修改架构状态。来自特定路径的每个指令将与一个谓词例如,布尔Boolean值相关联,该谓词指示指令是否被允许修改架构状态。谓词值将基于对分支条件的评估来设置。其谓词指示指令不允许修改架构状态的指令被称为已被预测出来。如果指令在被转发到指令管线之前已经被预测出来,则不需要将它转发到指令管线来执行。因此,在将指令转发到指令管线以供执行之前,队列110可被配置为基于主动信息例如,谓词信息来确定是否期望将指令转发到管线以供执行。如果主动信息指示该指令不被执行例如,谓词指示该指令已被预测出来,则该指令被丢弃,并且如果指令是次指令,则队列110发送调整指令或信号到计数器块102,该调整指令或信号使得计数器块102调整与该主指令相关联的计数器103的值以指示危害已被解决例如,使计数器块将计数器的值减小预定量的指令。在指令与任务相关联的情况下,指令对于一些实例而非其他实例可能是有效的。例如,如果指令是基于每实例进行预测的,则可能发生这种情况。在这些情况下,队列110可以被配置为检测指令是否部分有效一些但不是全部实例有效、完全无效全部实例都无效或完全有效所有实例有效。如果队列110检测到指令完全无效,则队列110可以发送调整指令给计数器块102,该调整指令使得计数器块102调整与该主指令相关联的计数器103的值以指示危害已经完全解析例如,使得计数器块将计数器的值减少8的指令,并且如果队列110检测到指令是部分无效,则队列110可以向计数器块102发送调整指令,该调整指令使得计数器块102调整与主指令相关联的计数器103的值以指示危害已被部分地解决例如,使得计数器块将计数器的值减少小于8的指令,以反映指令的哪部分危害已经解决。以下参考图3描述图1的队列110的示例实现方式。在一些示例中,由指令解码器104解码并由指令管线106执行的指令均与任务相关或对应于任务。术语“任务”在本文中用于指代其中相同程序例如,相同的ALU指令序列被应用于一组数据的工作组或工作主体即,多个工作项或程序实例,其中该数据可以包括一个或多个元素或数据项,例如多个像素或顶点。因此,任务涉及一个或多个数据项对数据项的一个或多个参考点和要在该数据项上执行的程序或对程序即,指令序列的参考例如,指针。如上所述,当执行与任务相关的指令时,针对每个数据项独立执行该指令的实例。在这些示例中,可以在调度器116处接收任务,该调度器116调度接收到的任务以供执行即,确定任务将被执行的顺序。一旦调度器116确定接下来要执行哪个任务,调度器116将标识该任务的信息例如,任务ID和标识要提取的下一指令的信息例如,程序计数器值发送到指令提取模块120。指令提取模块120然后基于所接收的信息例如,程序计数器值从存储器例如,经由高速缓存结构提取该任务的下一指令。提取的指令然后被发送到指令解码器104以被解码。已经被发送到指令提取模块120用于执行的任务被认为是活动任务或者计划任务。指令提取模块120和指令解码器104可以形成指令控制器118的一部分。由于任务包含相关指令例如,相同程序的指令,通常在任务内的指令之间存在依赖关系例如,危害,但是通常在不同任务中的指令之间不存在依赖关系例如,危害。因此,可能有多个计数器103与每个任务ID相关联,以通过该任务ID跟踪任务内的管线间危害。在下面结合图4描述计数器块102的示例,其中计数器103与其中任务ID中的一个相关联。在与每个任务ID相关联的计数器被分配了相同的计数器ID例如计数器数字的情况下,可以使用任务ID和计数器ID两者来标识或索引与指令相关联的特定计数器。现参考图2,其示出了包括标识主指令和次指令以及它们与之相关联的计数器的信息的图1的系统中的指令200的示例格式。在图2的示例中,该指令包括主指令字段202和次指令字段204。主指令字段202指示该指令是否是主指令,并且如果是,则指示主指令与哪个计数器相关联。具体地,在图2的示例中,主指令字段202被配置为保存N位数字。当N位数字具有特定值例如,零时,其指示该指令不是主指令,并且当N位数字具有不同于特定值的值例如,非零值时,其指示该指令是主指令,并且它例如,通过数字标识与主指令相关联的计数器。例如,具有二进制值“000”即,十进制值为零的三位主指令字段202可以指示该指令不是主指令即,另一指令管线中不存在其他指令依赖于该指令,以及具有二进制值“001”即,十进制值1的三位主指令字段202可以指示该指令是主指令即,在另一指令管线中存在至少一个其他指令依赖于该指令并且主指令与计数器数字1相关联。分配给主指令字段202的位数即,N将基于计数器103的数字。具体地,主指令字段202通常包括足够的位以唯一地标识每个计数器。例如,如果有6个计数器,则主指令字段可以包括3位可以表示8个唯一数字,以便能够通过唯一数值唯一地标识六个计数器。次指令字段204指示该指令是否是次指令,如果是,则指示哪些计数器与其依赖的主指令相关联。在图2的示例中,次指令字段204被配置为保存M位掩码。每个计数器有一个位,该位的值指示指令是否依赖于与该计数器相关联的主指令。例如,如果有6个计数器,则掩码中将有6位,第一位可以对应于第一计数器,第二位可以对应于第二计数器,第三位可以对应于第三计数器等。在一些情况下,被设置的位例如,“1”可以指示该指令依赖于与相应计数器相关联的主指令,并且被清除或未被设置的位例如,“0”可以指示该指令不依赖于与相应计数器相关联的主指令。在这些情况下,如果次指令字段204的掩码中的至少一个位被设置,则该指令依赖于另一个管线中的至少一个指令,并因此该指令是次指令;并且如果次指令字段204的掩码中没有位被设置,则该指令不依赖于另一管线中的任何指令,因此该指令不是次指令。例如,具有二进制值“000000”的6位次指令字段204可以指示该指令不是次指令即,它不依赖于任何其他指令,并且具有二进制值“010100”的6位次指令字段204可以指示该指令是依赖于与第二和第四计数器相关联的指令的次指令。由于指令可以既依赖于一个或多个其他指令,又被一个或多个其他指令所依赖,所以指令既可以是主指令又可以是次指令。如上所述,指令例如,图2的指令200可以在构建时由编译器生成,该编译器被配置为标识管线间数据危害并且为每个标识的管线间数据危害分配计数器以用于跟踪管线间数据危害并实施适当的顺序。然后修改该数据危害的主指令以包括指示它是主指令和已经与该主指令相关联的计数器的信息例如,在主指令字段202中;并且数据危害的一个或多个次指令被修改以包括指示与它所依赖的主指令相关联的计数器的信息例如,在次指令字段204中。在一些情况下,编译器可以被配置为为每个标识的管线间数据危害分配一个计数器。在其他情况下,编译器可以配置为使用单个计数器用于多个所标识的管线间数据危害。例如,如果指令C和D要在相同的指令管线中执行并且C取决于指令A并且指令D取决于指令B,则主指令A和B可以都被分配相同的计数器。C在它可以被执行之前将不得不等待与指令A和B相关联的危害被解决,并且由于D跟随C,D也将不得不等待与指令A和B相关的危害被解决。如果指令C和D要在不同的指令管线上执行,那么它们都将等待与指令A和B相关联的危害被解决,但它们可能等待了过久。在次指令依赖于不同管线中的两条不同的主指令的情况下,则优选使用单个计数器来处理多个管线间数据危害。在这种情况下,主指令都可以被分配到同一个计数器。因此,在一些情况下,在使用单个计数器用于多个管线间数据危害中可能存在性能成本,但这可以允许使用较少数量的计数器,从而减小硬件实现的尺寸。现在参考图3,示出了用于并行处理单元的图1的队列110的示例实现,其中每个指令对应于已被分配任务ID的任务,并且每个指令管线106接收与多个任务相关的指令,该多个任务的每个任务具有相应的不同任务ID。如上所述,队列110从指令解码器104接收指令以由相应的指令管线106执行,并以正确的顺序将指令转发到相应的指令管线106。然而,任何次指令都不能被转发到指令管线106,直到与次指令所依赖的主指令相关联的计数器指示与主指令相关的危害已被解决。在该示例中,队列110优选地按照它们被接收的顺序将所有指令发布到相应的指令管线,但是队列110必须维持任务内的指令的顺序。这意味着,如果由于与次指令所依赖的一个或多个主指令相关联的计数器未指示危害已被解决因而次指令被停滞,则只有与相同任务相关例如,由相同的任务ID标识的后续指令也需要被停滞,并且与不同的任务相关例如由不同的任务ID标识的后续指令可以在停滞的次指令之前被转发到相应的指令管线106。在图3的示例中,队列110包括先进先出FIFO队列302、危害检测逻辑304、危害指令队列306、信息队列308和复用器MUX310。FIFO队列302接收由指令解码器104输出的指令,按照它们被接收的顺序存储指令,然后以相同的顺序即,它们被接收的顺序将它们输出到危害检测逻辑304。在一些情况下例如,当存在一个指令译码器时,FIFO队列302可以能够在每时钟周期内最多接收一个指令。在其他情况下例如,当存在多个指令解码器时,FIFO队列302可以能够在每时钟周期接收多于一条指令。FIFO队列302通常每时钟周期最多只能输出一个指令。危害检测逻辑304被配置为确定从FIFO队列302输出的指令是否无危害即,指令是否可以安全执行。在这个示例中,存在两个潜在的危害:i该指令可以是次指令,该次指令在可以被发布到指令管线以供执行之前等待与一个或多个主指令相关的一个或多个危害被解决;和或ii该指令可能涉及与危害指令队列306中的指令相同的任务例如,具有相同的任务ID,并因此在其可以被发布到指令管线以供执行之前必须等待该指令被发布到相应的指令管线。由于与任务相关的更新的指令在与相同的任务相关的较旧的指令之前不能被发布到指令管线,所以如果危害指令队列306中已经存在与尚未发布给该指令管线的相同任务相关的指令,则新指令必须等待较旧的指令发布到指令管线,然后才能被发布到指令管线。在一些情况下,危害检测逻辑304被配置为首先确定危害指令队列306中是否存在与相同任务相关的任何指令例如,基于与该指令相关联的任务ID。如果确定在具有相同任务ID的危害指令队列306中存在至少一个停滞的指令,则该指令不能被安全地执行,并且该指令被发送到危害指令队列306,在危害指令队列306中它等待具有相同的任务ID的较早指令被发送到相应的指令管线106。然而,如果危害指令队列306中不存在具有相同的任务ID的指令,则确定从FIFO队列302接收的指令是否是次指令指示潜在危害。如果危害检测逻辑304确定从FIFO队列302接收到的指令不是次指令,则该指令是无危害指令并且因此准备好被执行,并且该指令被直接转发到MUX310。然而,如果危害检测逻辑304确定从FIFO队列302接收的指令是次指令例如,指令的次指令字段为非零,则危害检测逻辑304确定与其所依赖的主要指令相关联的计数器是否指示与相关联的主指令相关的危害已被解决例如,通过计数器状态信息。如果所有相关计数器指示与相关联的主指令相关的危害已被解决例如,所有相关计数器都为零,则该指令是无危害指令并因此准备好执行,并且该指令被直接转发到MUX310。然而,如果至少一个相关计数器指示与相关联的主指令相关的危害还没有解决例如至少一个相关计数器具有非零值,则指令是危害指令并且被转发到危害指令队列306。危害指令队列306被配置为按顺序存储危害指令,直至一个或多个相应的危害已被清除。信息队列308存储危害指令队列306中每个危害指令的信息,该信息指示与该指令相关联的一个或多个危害。例如,信息队列308可以为每个危害指令存储指示与其所依赖的每个主指令相关的危害是否已经被解决的信息和或指示该指令是否正在等待危害队列中的另一指令以及如果是的话为哪一个的信息。如上所述,在该示例中存在两个潜在的危害:i该指令可以是正在等待与一个或多个主指令相关的危害被解决的次指令;和或ii该指令可以涉及与危害指令队列306中的指令相同的任务ID,并且正在等待该指令被发布到相应的指令管线。因此,信息队列308可以存储指示相应的危害指令是否正在等待与主指令相关的危害被解决的单个位或标记如果与指令所依赖的主指令相关联的至少一个计数器指示危害未被解决,则可以被设置,并且一旦与指令所依赖的主指令相关联的所有计数器都指示危害已被解决,则可以被清除;和或信息队列308可以存储指示该指令是否正在等待危害指令队列306中的另一指令被发布到相应的指令管线的标记或位。当信息队列308中的信息指示针对特定指令,所有危害已被清除时例如,相关计数器的计数器值指示与其所依赖的主指令相关的危害已被解决和或正在等待的危害指令已被转发到相应的指令管线,则危害指令队列306将清除的危害指令转发给MUX310。当相应的指令管线106准备好接收下一个指令时,MUX310被配置为选择危害检测逻辑304输出的指令以及危害指令队列306输出的指令中的一个,以转发给相应的指令管线106以供执行。如果危害检测逻辑304和危害指令队列306中仅有一个已经在相同的时钟周期中输出指令,则该MUX310选择该指令并将其转发到相应的指令管线。然而,如果危害检测逻辑304和危害指令队列306都在相同的时钟周期内输出指令,则MUX310选择从危害指令队列306输出的指令,因为通常该指令比由危害检测逻辑304输出的指令更旧。在一些情况下,队列110还可以包括有效逻辑312,其被配置为接收由MUX310输出的指令并接收指示是否全部或部分的指令有效的有效信息。如上所述,指令可能被发送到队列以供执行,但是当该指令被发送到指令管线时,可能不再需要该指令被执行例如它可能已被预测出来。因此,在由MUX310输出的指令被转发到指令管线以供执行之前,有效逻辑312被配置为基于有效信息确定是否期望将指令转发到管线以供执行。如果有效信息指示该指令不被执行,则该指令被丢弃,并且如果该指令是主指令,则活动逻辑312向计数器块102发送指令,该指令使计数器块102调整与该主指令相关联的计数器103以指示危害已经清除例如,使计数器块将计数器的值减少预定量的指令。在指令与任务相关联的情况下,指令对于一些实例而非其他实例可能有效。在实例被分成可被单独跟踪的组的情况下,有效逻辑312可被配置为确定哪些实例的组有效即,具有至少一个有效实例。如果指令没有有效的组,则该指令完全无效并且指令被丢弃。如果完全无效的指令是主指令,则由于危害将不会被指令管线106解决或清除,有效逻辑312向计数器块102发送指令,使得计数器块102调整与该主指令相关联的计数器103的值以指示危害已被解决例如,使得计数器块将计数器的值减少预定量的指令。然而,如果存在用于该指令的至少一个有效的组,则该指令是部分无效的或部分有效的,并且有效逻辑312将该指令转发给指令管线106以供执行。如果部分无效指令是主指令,则由于无效的组的实例将不会被执行,因此危害将不会被指令管线106解决或清除这些组,有效逻辑312向计数器块102发送指令,该指令使计数器块102调整计数器的值以指示危害已被部分解决例如,使得计数器块将计数器的值减少非活动组的数量。现在参考图4,其示出图1的计数器块102的示例实现,其中每个任务ID与多个计数器103相关联。图4的计数器块102包括计数器103的矩阵402、计数器更新逻辑404、和状态逻辑406。如上所述,与任务相关联或形成任务的一部分的指令是相关指令,并因此在任务内的指令之间可能发生管线间数据危害。然而,由于任务本身通常独立于其他任务,所以不同任务的指令之间可能不会发生管线间数据危害。因此,管线间数据危害通常可以在每个任务的基础上进行标识和跟踪。计数器103的矩阵402包括用于每个可能的任务ID的行。例如,在存在3个可能的任务ID的情况下,矩阵402将具有三个行,如图4所示。每行包括与相应的任务ID相关联的K个计数器,其中K是大于或等于2的整数。因此,特定行中的计数器103用于跟踪具有相应任务ID的任务的管线间数据危害。例如,在图4中,矩阵402的第一行中的计数器用于跟踪具有任务ID为“01”二进制的任务的管线间数据危害,并且矩阵402的第二行用于跟踪具有任务ID为“10”二进制的任务的管线间数据危害。如上所述,在构建时,标识任务中的管线间数据危害,并且修改主指令以包括将该指令标识为主指令的信息和标识用于跟踪危害的计数器的信息例如,计数器数字;并且次指令被修改以包括将该指令标识为次指令的信息和标识用于追踪它所依赖的一个或多个主指令的一个或多个计数器的信息。因此,除了标识任务中的管线间数据危害并且标识其主指令和次指令之外,编译器被配置为为每个被标识的管线间数据危害分配计数器,该计数器用于跟踪相应的数据危害。编译器可以被配置成以任何合适的方式将计数器例如,计数器数字分配给被标识的管线间数据危害。在每个任务有少量可用计数器的情况下,为了使计数器可能针对相同任务被多次使用,编译器可以被配置成以最大化在该计数器的使用之间的时间的方式,将计数器分配给被标识的管线间数据危害例如,编译器可以被配置为基于循环将计数器分配给标识的管线间数据危害。计数器更新逻辑404从指令解码器104、监测器逻辑108以及可选地,队列110接收调整指令或信号,该调整指令或信号使得计数器的值被调整以反映相应的管线间数据危害的当前状态。具体地,如上所述,当指令译码器输出主指令用于执行时,指令解码器104向计数器块102发送调整指令,以使得与主指令相关联的计数器103具有指示存在与该主指令相关的危害的值。在一些示例中,指令解码器104被配置为向计数器块102发送调整指令,该调整指令使得与主指令相关联的计数器103的值增加预定量例如8。当监测器逻辑108随后检测到与主指令相关的危害已被完全或部分由指令管线之一例如,通过监测指令管线和存储模块之间的接口被解决时,监测器逻辑108向计数器块102发送调整指令或信号,使得与主指令相关联的计数器103指示与主指令相关的危害已被部分或完全解决。在一些示例中,监测器逻辑108被配置为向计数器块102发送调整指令,使得与主指令相关联的计数器103的值减少预定量例如,8。如果队列110检测到要转发到对应管线的主指令全部或部分无效,则队列110向计数器块102发送调整指令或信号,以使计数器块102调整与要调整的主指令相关联的计数器103的值,以指示与主指令相关的危害已被部分或完全解决。每个调整指令或信号可以包括但不限于,对该指令是增加指令还是减少指令的指示、计数器数字、任务ID以及可选地增加或减少的值。在一些情况下,一些计数器103可能仅增加或减少固定量,因此增加或减少的值不需要被明确提供。计数器更新逻辑404使用计数器数字和任务ID来标识矩阵402中的特定计数器103。计数器更新逻辑404然后基于调整指令来增加或减少被标识的计数器103的值例如,将计数器的值增加或减少指定的或预定的量。尽管计数器更新逻辑404被示出为执行矩阵402中的计数器103的增加和减少的单个块,但是在其他示例中,可以存在单独的增加和减少逻辑块,其分别接收和处理增加和减少指令。在这些情况下,调整指令可能不指定调整是增加还是减少,因为这可以基于哪个逻辑块接收到调整指令而自动确定。状态逻辑406被配置为生成指示矩阵402中的计数器103的状态的计数器状态信息,并且将该计数器状态信息至少提供给队列110。这允许队列110确定是否因为与其所依赖的主指令相关的一个或多个危害尚未得到解决停滞次指令,或是否所有与其所依赖的主指令相关的危害都已得到解决并且可安全地转发或发布次指令到指令管线以供执行假设没有其他危害。具体地,如果与其所依赖的一个或多个主指令相关联的计数器指示与其所依赖的主指令相关的危害已被解决,则次指令仅可以被转发到或发布到指令管线106。在一些情况下,计数器状态信息可以包括例如用于每个计数器的位或标记,其基于计数器的值指示是否存在与相关联的主指令相关的危害或者与相关联的主指令相关的危害是否已被解决。例如,标记值“1”可以指示存在与主指令相关的危害,并且标记值“0”可以指示与相关联的主指令相关的危害已被解决。标记值可以基于计数器103的值生成。例如,如上所述,计数器103可以被配置为使得当它们具有一个或多个预定值中的一个例如,非零值时,它们指示存在与相关联的主指令相关的危害,以及当它们具有一个或多个其他预定值中的一个例如,零值时,它们指示与相关联的主指令相关的危害已被解决。在其他情况下,计数器状态信息可以包括矩阵402中的计数器103的实际值,并且计数器状态信息的接收器例如,队列110被配置为根据计数器值来确定是否存在与相关联的主指令相关的危害。在一些情况下,状态逻辑406可以被配置为周期性地将计数器状态信息推送到队列110。在其他情况下,队列110可以被配置为请求计数器状态信息,并且状态逻辑406可以被配置为响应于这样的请求提供计数器状态信息。现在参考图5,其示出了用于避免并行处理单元诸如图1的并行处理单元中的管线间数据危害的示例方法500。方法500从块502开始,在块502处指令解码器104接收要解码的调度指令,并且在块504处指令解码器104解码接收到的指令。如果指令解码器104确定在块506处该解码指令是主指令例如,根据主指令字段,则方法500前进到块508,在块508处指令解码器104将调整指令发送或传送到计数器块102,其使得与检测到的主指令相关联的计数器103的值被调整为具有指示存在与主指令相关的危害的值例如,非零值。例如,指令解码器104可以被配置为向计数器块102发送或传送调整指令,该调整指令使得与检测到的主指令相关联的计数器103的值增加预定量例如,8。方法500然后前进至块510。如果指令解码器104在块506处确定被解码的指令不是主指令例如,根据主指令字段,则方法500前进到块510,其中该指令被转发到与适当的指令管线106相关联的队列110。然后在块512处,队列110确定接收到的指令是否是次指令。如果在块512处队列110确定接收到的指令是次指令,则方法500前进到块514,在块514处如果与次指令所依赖的一个或多个主指令相关联的一个或多个计数器中的至少一个计数器指示存在与该主指令相关的危害例如,根据次指令字段确定,则该指令被停滞。一旦与次指令所依赖的一个或多个主指令相关联的一个或多个计数器指示与主指令相关的危害已被解决,则方法500前进至块516。如果在块512处队列110确定所接收的指令不是次指令,则方法500直接前进到块516,其中该指令被转发到相应的指令管线以供执行。方法500然后前进到块518。在块518处,监测器逻辑确定指令管线中的指令是否是主指令。如果在块518处监测器逻辑检测到指令管线中的指令是主指令,则方法500前进到块520,其中监测器逻辑确定指令管线是否已解决与主指令相关的危害。如果监测器逻辑108确定指令管线已经解决了与主指令相关的危害,则在块522处监测器逻辑108向计数器块发送调整信号或指令,该调整信号或指令使得与主指令相关联的计数器的值被调整为具有指示与主指令相关的危害已被解决的值例如,零。在每任务ID的计数器的数量与每任务的管线间数据危害的数量相比较小的情况下,可以频繁地在任务内重新使用计数器。这可能导致这样的情况,其中,在指令解码器处以相对较快的顺序接收与同一计数器相关联的两个主指令,使得指令解码器可以在其转发第二主指令以用于执行时,调整公共计数器的值以指示在与第一主指令相关的所有次指令具有机会来读取计数器以查看与第一主指令相关的危害被解决之前,第二主指令具有危害。例如,如果第一和第二主指令与计数器1相关联并且存在依赖于第一主指令的三次指令,则可以响应于指令解码器转发第一主指令以供执行来调整计数器1的值以指示存在与第一主指令相关的危害,随后响应于检测到指令管线已经解决该危害而调整计数器1的值以指示解决了与第一主指令相关的危害,并且随后响应于指令解码器转发第二主指令以供执行而调整计数器1的值以指示存在与第二主指令相关的危害,这些都发生在三个次指令的队列已经读取或获得计数器1的状态之前。这将导致次指令必须等待第二主指令完成。存在等待稍后在代码中发生的指令的执行的指令显然是有问题的,因为它可能导致死锁。因此,在一些实施例中,为了确保计数器103未被调整以反映与后续主指令相关的危害的状态直至不存在等待与先前的主指令相关的危害的结果的次指令,计数器块102还包括针对每个计数器103的等待计数器,其保持跟踪等待相应计数器103的结果的次指令的数量。计数器103的等待计数器的值可以在每次将依赖于与该计数器相关联的主指令的次指令发送到队列以供执行时由指令解码器调整例如,增加,以指示存在等待计数器103的结果的一个附加次指令。当依赖于与计数器103相关联的主指令的次指令被从队列发送到相应的指令管线10以供执行,或者当依赖于与计数器103相关联的主指令的次指令被队列丢弃例如,响应于确定该指令无效时,该计数器的等待计数器的值可以被队列调整例如,减少以指示少了一个次指令正在等待计数器103的结果。当在指令解码器处接收到主指令时,指令解码器确定针对相应的计数器103的等待计数器是否指示不存在等待该计数器的结果的次指令。如果等待计数器指示不存在等待此计数器结果的次指令,则该指令被转发到适当的队列以供执行。然而,如果等待计数器指示存在至少一个等待该计数器结果的次指令,则指令解码器使该指令和其相关指令例如,具有相同任务ID的同一任务中的指令被解除调度例如,指令被发送回调度器,其他,它等待直至等待计数器指示不存在等待相关计数器结果的次指令。现在参考图6,示出了第二示例并行处理单元600,其可以是包括多个等待计数器的GPU或其他并行处理单元。应该理解的是,图6仅示出了并行处理单元的一些元件,并且在并行处理单元内存在未在图6中示出的的许多其他元件例如缓存、接口等。如图1的并行处理单元100,图6的并行处理单元600包括:计数器块602、指令解码器604、多个指令管线106、监测器逻辑108和用于每个指令管线106的队列610。图6的计数器块602与图1的计数器块102相同,除此之外,图6还包括用于每个计数器103的等待计数器630以保持跟踪等待该计数器103的结果的次指令的数量。在一些示例中,等待计数器630被配置为使得零值表示不存在等待计数器103的结果的次指令,并且非零值指示等待计数器103的结果的次指令的数量例如,等待计数器值为3指示存在等待计数器103的结果的三个次指令。但是,这仅是示例,其他值可能用于指示等待该计数器的次指令的数量。计数器块602被配置为响应于接收到来自指令解码器104以及队列110的等待计数器调整指令或信号而调整等待计数器630的值;并且生成等待计数器状态信息并提供到指令解码器604和调度器616。具体地,如下面更详细描述的,指令解码器604被配置为向计数器块602发送等待计数器调整指令或信号,其使计数器块602调整对应于特定计数器103的等待计数器630的值以响应于将依赖于与特定计数器103相关联的主指令的次指令转发到队列610,指示额外的次指令正在等待特定计数器103的结果。队列610被配置为向计数器块602发送等待计数器调整指令或信号,其使得计数器块602调整对应于特定计数器103的等待计数器630的值,以响应于以下情况而指示少了一个次指令正在等待特定计数器103的结果:i将依赖于与特定计数器103相关联的主指令的次指令转发到指令管线以供执行;或ii丢弃依赖于与特定计数器103相关联的主指令的次指令。等待计数器状态信息包括指示是否存在等待计数器的结果任何次指令,并且由计数器模块602基于等待计数器630的值生成。在一些情况下,等待计数器状态信息可以包括用于每个等待计数器的标记或位,指示是否存在等待关联计数器103的结果的任何次指令。例如,等待计数器状态信息可以包括用于每个等待计数器的标记,其中标记被设置为“1”以指示至少有一个等待相关计数器结果的次指令,并且标记被设置为“0”以指示没有等待相关计数器结果的次指令。在其他情况下,等待计数器状态信息可以包括每个等待计数器630的值,并且等待计数器状态信息的接收方被配置为从这些值确定是否存在等待相应计数器103的结果的任何次指令。以下参考图7描述图6的计数器块602的示例实现方式。图6的指令解码器604与图1的指令解码器104相同,除此之外,指令解码器604还被配置为响应于将次指令转发到队列610以供执行,针对次指令所依赖的每个主指令向计数器块602发送等待计数器调整指令,其使得计数器块602调整特定等待计数器的值以指示附加的次指令正在等待相关计数器103的结果。图6的指令解码器604还被配置为在将经解码的主指令发送到队列610以供执行之前,根据等待队列状态信息确定是否存在任何等待与主指令相关联的计数器的结果的次指令。如果指令解码器604确定没有等待计数器结果的次指令,则指令解码器604将该主指令发送到队列610以供执行。然而,如果指令解码器604确定存在至少一个等待计数器结果的次指令,则指令解码器604发送去激活指令或信号也可以被称为解除调度指令或信号到调度器616以使指令和或它所关联的任务被解除调度或去激活,直到等待计数器状态信息指示不存在等待相关计数器的结果的次指令。在一些情况下,计数器块602周期性地将等待计数器状态信息自动推送到指令解码器604。在其他情况下,指令解码器604被配置为从计数器块请求等待计数器状态信息,并且响应于接收到该请求,计数器块602向指令解码器604提供等待计数器状态信息。多个指令管线106与图1的指令管线106相同,并且这样被配置为执行接收到的指令。监测器逻辑108与图1的监测器逻辑108相同。图6中的队列610与图1中的队列110相同,除此之外,图6的每个队列610还被配置为确定由队列610转发到相应的指令管线的指令,或者由队列610丢弃的指令例如因为它们无效是否是次指令,并且响应于队列610转发次指令到相应的指令管线或者响应于队列610丢弃次指令,而针对次指令所依赖的每个主指令发送等待计数器调整指令或信号到计数器块602,使得计数器块602调整与和主指令相关联的计数器有关的等待计数器的值,以指示少了一个次指令正在等待该计数器的结果。在一些情况下,由队列610发送到计数器块602的等待计数器调整指令或信号使计数器块将等待计数器的值减少1。图6的并行处理单元600还包括调度器616。调度器616与图1的调度器116相同,除此之外,指令调度器616还被配置为响应于从指令解码器604接收到用于指令的去激活指令或信号,来解除调度或去激活被标识的指令和相关联的任务,直到一个或多个相关的等待计数器指示不存在更多等待相关计数器的结果的次指令。如上所述,当任务已经从调度器616被发送到指令提取模块120以供执行时,该任务变成有效任务。当调度器616接收到针对与任务相关的指令的解除调度或去激活消息时,该任务变为无效任务,并且不可变成有效任务直到一个或多个相关的等待计数器指示不存在更多等待相应计数器结果的次指令。去激活或解除调度指令可以包括用于标识将被解除调度去激活任务的任务ID、用于指示指令的程序计数器值使得当任务被重新激活或重新调度时,并行处理单元可以返回在程序中的指令以及标识待监测的一个或多个相关等待计数器的信息例如,等待计数器数字。现在参考图7,图7示出了图6的计数器块602的示例实现。图6的计数器块602包括如上参考图4描述的进行操作的图4的计数器103的矩阵402、计数器更新逻辑404和状态逻辑406。图6的计数器块602附加地包括等待计数器630的矩阵702、等待计数器更新逻辑704、和等待计数器状态逻辑706。等待计数器630的矩阵702包括用于计数器103的矩阵402中的每个计数器103的一个等待计数器630,其用于跟踪等待相应计数器103的结果的次指令的数量。等待计数器630的矩阵702以与矩阵402相同的方式布置,使得可以使用用于标识计数器103的相同信息例如,任务ID和计数器数字来标识相应的等待计数器630。具体地,等待计数器的矩阵702包括用于每个可能的任务ID的行。例如,如图7所示,在存在3个可能的任务ID的情况下,矩阵702将具有三个行。每行包括K个计数器,其中K是计数器103的矩阵402的每行中的计数器的数量。等待计数器更新逻辑704接收来自指令解码器604和队列610的等待计数器调整指令或信号,其使得等待计数器630的值被调整以反映当前正等待相应计数器103的结果的次指令的数量。具体地,如上面关于图6描述的,响应于向队列610发送次指令以供执行,指令解码器604针对次指令所依赖的每个主指令向计数器块602发送等待计数器调整指令或信号以使得对应于与主指令相关联的计数器的等待计数器的值被调整为具有指示额外的次指令正在等待计数器103的结果的值。在一些示例中,指令解码器604被配置为发送调整指令,其使得计数器块602将对应于计数器103的等待计数器630的值增加1。当队列610随后检测到次指令已被发送到指令管线106以供执行时,队列610针对次指令所依赖的每个主指令发送等待计数器调整指令或信号到计数器块602,以使得对应于与主指令相关联的计数器的等待计数器的值被调整,以指示少了一个次指令正在等待该计数器的结果。在一些示例中,每个队列610被配置为向计数器块602发送等待计数器调整指令或信号,其使得计数器块602将对应于计数器103的等待计数器630的值减少1。此外,如果等待队列610随后检测到次指令已被丢弃例如因为它无效,则队列610针对次指令所依赖的每个主指令发送等待计数器调整指令或信号到计数器块602,以使得与对应于与主指令相关联的计数器的等待计数器的值被调整,以指示少了一个次指令正在等待该计数器的结果。每个等待计数器调整指令或信号可以包括但不限于,对该指令是增加指令还是减少指令的指示、计数器数字、任务ID以及可选地增加或减少的值。在一些情况下,一个或多个等待计数器630可能仅增加或减少固定量,因此增加或减少的值不需要被明确提供。等待计数器更新逻辑704使用计数器数字和任务ID来标识矩阵702中的等待计数器630。等待计数器更新逻辑704然后基于等待计数器调整指令来增加或减少被标识的等待计数器103的值例如,将计数器的值增加或减少指定的或预定的量。尽管等待计数器更新逻辑704被示出为执行矩阵702中的等待计数器103的增加和减少的单个块,但是在其他示例中,可以存在单独的增加和减少逻辑块,其分别接收和处理等待计数器增加和减少指令。在这些情况下,等待计数器调整指令可能不指定调整是增加还是减少,因为这可以基于哪个逻辑块接收到调整指令而自动确定。等待计数器状态逻辑706被配置为生成指示矩阵702中的等待计数器103的状态的等待计数器状态信息,并且将该等待计数器状态信息至少提供给调度器616和指令解码器604。提供该等待计数器状态信息到指令解码器604允许指令解码器604确定将主指令转发到队列以执行是否安全。将等待计数器状态信息提供给调度器616允许调度器616确定指令任务何时可以被重新调度。如上所述,在一些情况下,等待计数器状态信息可以包括用于每个等待计数器的位或标记,其指示是否存在任何等待对应计数器103的结果的次指令。例如,标记值“1”可以指示存在至少一个等待对应计数器103的结果的次指令,并且标记值“0”可以指示没有等待对应计数器103的结果的次指令。在其他情况下,计数器状态信息可以包括矩阵702中的等待计数器630的实际值,并且等待计数器状态信息的接收器例如,调度器616和指令解码器604被配置为根据计数器值来确定是否存在任何等待计数器103的结果的次指令。在一些情况下,等待计数器状态逻辑706可以被配置为周期性地将等待计数器状态信息推送到调度器616和指令解码器604。在其他情况下,调度器616和指令解码器604可以被配置为请求等待计数器状态信息,并且等待计数器状态逻辑706可以被配置为响应于该请求提供等待计数器状态信息。现在参考图8,图8示出了用于避免并行处理单元诸如,图6的并行处理单元中的管线间数据危害的第二示例方法800。方法800在块802处开始,其中指令解码器604接收指令,并且在块804处对指令进行解码。在块806处,指令解码器604例如,根据主指令字段确定解码的指令是否是主指令。如果在块806处确定指令是主指令,则方法800前进到块808,其中基于对应于与主指令相关联的计数器的等待计数器做出是否存在任何等待该计数器结果的次指令的确定。如果在块808处确定存在至少一个等待相关计数器的结果的次指令,则方法800前进至块810,其中指令解码器向调度器616发送解除调度或去激活指令或信号,以使得调度器将指令任务被解除激活,直到在块812处,对应于与主指令相关联的计数器的等待计数器指示不存在等待相关计数器的结果的次指令。一旦不存在等待相关计数器的结果的次指令,则在块814处,重新调度指令任务,然后方法800返回块802。如果在块808处确定不存在等待相关计数器的结果的次指令,则调整针对新的主指令的计数器的值是安全的,因此方法800前进到块816,其中指令解码器604向计数器块发送或传送调整指令,使得与主指令相关联的计数器的值被调整以指示存在与主指令相关的危害。方法800然后前进到块818。如果在块806处确定解码的指令不是主指令,则该方法继续前进到块818,其中指令解码器例如,根据次指令字段确定该指令是否是次指令。如果确定该指令是次指令,则在块820处,指令解码器604针对次指令所依赖的每个主指令向计数器块发送或传送等待计数器调整指令或信号,其使得对应于与主指令相关联的计数器的等待计数器的值被调整以指示多了一个等待该计数器的结果的次指令。方法800然后前进到块822。如果在块818处指令解码器604例如,根据次指令字段确定解码的指令不是次指令,则方法800前进至块822,其中该指令被转发到与适当的指令管线相关联的队列。方法800然后前进到块824。在块824处,队列确定接收到的指令是否是次指令。如果在块824处队列确定所接收的指令是次指令,则方法800前进到块826,其中如果与次指令所有依赖的一个或多个主指令相关联的至少一个计数器指示例如,根据次指令字段确定存在与主指令相关的危害例如,计数器不为零,则指令被停止。一旦与次指令所依赖的一个或多个主指令相关联的一个或多个计数器指示与主指令相关的危害已被解决,则方法800前进到块828,其中队列610针对次指令所依赖的主指令发送或传送等待计数器调整信号到计数器块,其使得对应于与主指令相关联的计数器的等待计数器的值被调整以指示少了一个等待该计数器的结果的次指令。方法800然后前进到块830。如果在块824处队列确定所接收的指令不是次指令,则方法800直接前进至块830,其中该指令被转发到相应的指令管线106以供执行。方法800然后前进到块832。在块832,监测器逻辑确定指令管线中的指令是否是主指令。如果在块832处监测器逻辑检测到指令管线中的指令是主指令,则方法800前进到块834,其中监测器逻辑确定指令管线是否已经解决了与主指令相关的危害。如果监测器逻辑108确定指令管线已经解决了与主指令相关的危害,则在块836处监测器逻辑108向计数器块发送调整信号或指令,其使得与主指令相关联的计数器的值被调整为具有指示与主指令相关的危害已被解决的值例如,零。在即将由指令管线执行次指令之前停滞该次指令显示了在次指令所依赖的一个或多个主指令将被快速完成例如,当一个或多个主指令由具有高吞吐量的指令管线执行的情况下增强性能。这种管线间数据危害在本文被称为低延迟管线间危害。然而,在要由指令管线执行次指令之前停滞次指令,显示了在次指令所依赖的一个或多个主指令将被缓慢完成的情况下例如,当一个或多个主指令由低吞吐量的指令管线执行降低性能。这种管线间数据危害在本文可以被称为高延迟管线间危害。因此,在本文描述的一些实施例中,编译器可以被配置成单独标识并标记低延迟管线间数据危害和高延迟管线间数据危害。在这些实施例中,如上面参照图1描述的来处理低延迟数据危害即,等待一个或多个低延迟危害被清除的次指令将在相关指令管线之前的队列中等待一个或多个低延迟危害被清除。然而,高延迟数据危害以不同方式处理。具体,如果指令解码器检测到等待一个或多个高延迟危害被清除的次指令,而不是将次指令发送到队列以供执行,则解除调度该指令直到所有相关的高延迟管线间危害已清除。现在参考图9示出了第三示例并行处理单元900,其可以是以不同方式处理高延迟和低延迟管线间数据危害的GPU或其他并行处理单元。应该理解的是,图9仅示出并行处理单元的一些元件,并且在并行处理单元900内可能存在未在图9中示出许多其他元件例如,缓存、接口等。类似于图1的并行处理单元100,图9的并行处理单元900包括:计数器块102、指令解码器904、多个指令管线1、测器逻辑108、用于每个指令管线106的监队列910。图9的并行处理单元900被配置为处理由编译器生成的指令,该编译器被配置为i标识管线间数据危害;ii确定所标识的管线间数据危害是低延迟数据危害还是高延迟数据危害例如,基于与将执行管线间数据危害的主指令的指令管线相关联的吞吐量;以及iii将来自计数器103的第一子集例如,低延迟计数器的计数器103分配到低延迟管线间数据危害,以及将来自计数器103的第二不同子集例如,高延迟计数器的计数器103分配到到高延迟管线间数据危害。相应地,由图9的并行处理单元900处理的指令包括标识主指令即,在另一指令管线中至少一个其他指令所依赖的指令、次指令即,依赖于在另一管线中的至少一个主指令的指令、它们所关联的计数器、以及指示相关联的危害是低延迟危害还是高延迟危害的的信息例如由编译器在构建时插入。例如,如图10所示,如果存在编号为1到3的三个计数器例如,对于每个可能的任务ID,则由计数器1和2形成的第一组计数器可以被分配给低延迟管线间数据危害,并且由计数器3形成的第二组计数器可以被分配给高延迟管线间数据危害。并行处理单元900可以使用与主指令或次指令相关联的计数器数字来确定主指令或次指令是否与低延迟管线间数据危害或高延迟管线间数据危害相关联,并由此进行处理。回到图9,计数器块102与图1的计数器块102相同,除此之外,该计数器块102还被配置为向调度器916和指令解码器904提供计数器状态信息。具体地,计数器块102包括用于跟踪管线间数据危害的多个计数器103。计数器模块102接收来自指令解码器904的调整指令或信号,以在指令解码器将主指令转发至队列910以供执行时调整计数器的值以指示存在与关联的主指令相关的危害;并且计数器块102随后从监测器逻辑108接收调整指令或信号以当监测器逻辑108检测到指令管线已经解决与主指令相关的危害时调整计数器的值以指示与相关联的主指令相关的危害已被解决。计数器块还向队列910、调度器916和指令解码器904提供计数器状态信息,该计数器状态信息针对每个计数器指示是否存在与与之相关联的主指令相关的危害。一个或多个计数器103被指定用于低延迟管线间数据危害并且一个或多个计数器103被指定用于高延迟管线间数据危害的事实不影响计数器块102的操作。指令解码器904通常对应于图1的指令解码器104,因为它被配置为接收指令,解码所接收的指令,将解码的指令转发到与适当的管线相关联的队列910以供执行;并且响应于将主指令无论与低延迟管线间数据危害还是高延迟管线间数据危害相关转发至队列910以供执行,向计数器块发送调整指令以使得与主指令相关联的计数器的值被调整,以指示存在与主指令相关的危害例如,发送调整指令以将与主指令相关联的计数器的值增加预定量例如,8。然而,与图1的指令解码器104自动地将所有解码的次指令转发到队列910以供执行不同,图9的指令解码器904被配置为在将被解码的次指令转发到队列910以供执行之前,确定例如,根据与其相关联的计数器数字次指令是否与至少一个高延迟数据危害相关。如果确定次指令不与任何高延迟数据危害相关,则指令解码器904将次指令转发到队列910以供执行。然而,如果确定次指令与至少一个高延迟数据危害相关,则指令解码器904根据计数器块102提供的计数器状态信息确定与次指令相关联的每个高延迟管线间数据危害是否已被解决。如果计数器状态信息指示与次指令相关联的所有高延迟数据危害已被解决例如,与次指令相关联的任何高延迟计数器指示高延迟数据危害已被解决,则次指令被转发至队列910以供执行。然而,如果计数器状态信息指示与次指令相关联的高延迟危害中的至少一个尚未解决,则去激活指令或信号被发送到调度器916,以使得调度器将指令和或与之相关的任务去激活。去激活指令可以包括标识指令的信息例如,程序计数器的值和标识要被监测的高延时计数器的信息,并且在指令是任务的一部分的情况下,去激活消息还可以包括标识任务的信息例如,任务ID。多个指令管线106与图1的指令管线106相同,并且如此被配置为执行接收到的指令。监测器逻辑108与图1的监测器逻辑108相同。队列910与图1的队列110相同,除此之外,图9的队列910仅被配置为当次指令相关联的低延迟计数器而不是其他计数器指示存在与相关联的主指令相关的危害时,停滞次指令。图9的并行处理单元900还包括调度器916。调度器916与图1的调度器116相同,除此之外,图9的调度器916还被配置为响应于从指令解码器904接收用于次指令的去激活指令或信号,将标识的次指令和相关联的任务解除调度或去激活,直到与次指令相关联的高延迟计数器指示一个或多个高延迟数据危害已被解决。如上所描述,当任务已从调度器916被发送到指令提取模块以进行处理时,该任务成为有效任务。当调度器916接收到关于指令的解除调度或去激活消息时,相关联的任务变成无效任务,并且不可变成有效任务直到一个或多个相关高延迟计数器指示相关高延迟危害已被解决。去激活或解除调度指令可以包括标识要被解除调度去激活的指令的信息例如,程序计数器值、标识指令相关联的任务的信息例如任务ID、以及标识需要被监测的高延迟计数器的信息例如,计数器数字。现在参考图11,示出了用于避免并行处理单元诸如,图1的并行处理单元900中的管线间数据危害的第三示例方法1100。方法1100在方块1102处开始,其中指令解码器904接收指令并对该指令进行解码在块1104处。在块1106处,指令解码器904例如,根据次指令字段确定解码的指令是否为次指令。如果在块1106确定指令是次指令,则方法1100前进到块1108,其中根据与所依赖的每个主指令相关联的计数器的数字来确定指令是否与至少一个高延迟管线间危害相关。如果在块1108处确定次指令与至少一个高延迟管线间数据危害相关,则方法1100前进至块1110,在块1110处指令解码器904确定次指令所依赖的相关高延迟计数器是否指示存在与主指令相关的高延迟危害。如果在块1110处确定相关高延迟计数器指示存在与主指令相关的高延迟危害,则方法1100前进至块1112,在块1112处指令解码器904发送解除调度或去激活指令或消息到调度器,使得调度器将指令任务去激活,直到在块1114处一个或多个相关高延迟计数器指示与一个或多个主指令相关的高延迟危害已被解决。一旦相关高延迟计数器指示与一个或多个主指令相关的高延迟危害已被解决,则在块1116处指示任务被重新调度并且方法1100返回到块1102。如果确定在块1108处次指令不与任何高延迟计数器相关联,或确定在块1110处已解决相关高延迟危害,则方法前进到块1118。如果确定在块1106处解码的指令不为次指令,则在块1118处指令解码器例如,根据主指令字段确定指令是否是主指令。如果确定该指令是主指令,则在块1120处,指令解码器904向计数器块发送或传送计数器调整指令或信号,使得与主指令相关联的计数器的值被调整以指示存在与主指令相关的危害。方法1100然后前进到块1122。如果在块1118处指令解码器例如,根据主指令字段确定解码的指令不是主指令,则方法1100前进到块1122,其中指令被转发到与适当的指令管线相关联的队列。然后在块1124处,队列910确定接收到的指令是否是次指令。如果在块1124处队列910确定所接收的指令是次指令,则方法1100前进到块1126,指令被停滞,直到与次指令所依赖的一个或多个主指令相关联的一个或多个低延迟计数器指示与主指令相关的低延迟危害已被解决例如,计数器为零。一旦与次指令所依赖的一个或多个主指令相关联的一个或多个低延迟计数器指示与主指令相关的低延迟危害已被解决,则方法1100前进至块1128。如果在块1124处队列910确定所接收的指令不是次指令,则方法1100直接前进至块1128,在块1128处指令被转发到相应的指令管线以供执行。在块1130处,监测器逻辑确定指令管线中的指令是否是主指令。如果在块1130处监测器逻辑确定指令管线中的指令是主指令,则方法1100前进到块1132,其中监测器逻辑确定指令管线是否已解决与主指令相关的危害。如果监测器逻辑108确定指令管线已经解决了与主指令相关的危害,则在块1134处监测器逻辑108向计数器块发送调整信号或指令,使得与主指令相关联的计数器的值被调整以指示与主指令相关的危害已被解决。尽管未示出,但是在其他示例中,参照图6到图8描述的等待计数器可以与参照图9至图11描述的管线间数据危害的低延迟高延迟处理相组合。在这些示例中,针对每个低延迟计数器可能只有一个等待计数器。现在参考图12,示出了用于生成要由图1和图2的并行处理单元100、600执行的指令的示例方法1200。方法1200在块1202处开始,其中例如在编译器处接收一组相关指令例如,形成程序的指令。该组相关指令可以是任何合适的格式。例如,在一些情况下,该组相关指令可以是机器语言。一旦接收到该组相关指令,则方法1200前进到块1204。在块1204处,例如,由编译器分析指令以标识该组相关指令中的管线间数据危害。如上所述,当要在一个管线中执行的指令只能在另一指令管线中执行的另一条指令已经执行数据动作例如读取或写入数据之后才能安全地执行时,存在管线间数据危害。通常可能会发生三种类型的数据危害:WAR危害、RAW危害和WAW危害。执行动作的指令在本文被称为主指令,并且等待由主指令执行的动作的指令被称为次指令。例如,在WAR危害中,读取指令是主指令,写入指令是次指令;在RAW危害中,写入指令是主指令,读取指令是次指令;以及在WAW危害中,第一写入指令是主指令,而第二写入指令是次指令。次指令被认为依赖于主指令。如上描述,可能存在多于一个的依赖于相同主指令的次指令。在一些情况下,编译器可以被配置为通过分析指令的操作数来标识在相关指令中的管线间数据危害及其主要和次指令以标识WAR、RAW和WAW危害。在其他情况下,该组指令可以包括指示该组指令中的管线内数据危害的信息例如由程序员或开发人员手动插入,并且编译器可以被配置为基于该信息标识管线间数据危害以及其主指令和次指令。一旦管线间数据危害已被标识,则方法1200前进到块1206。在块1206处,标识的管线间数据危害的每个主指令被分配例如,由编译器多个计数器例如计数器103中的计数器例如计数器数字以跟踪所标识的管线间数据危害。如上描述的,在一些情况下,计数器可以以最大化计数器的重用之间的时间的方式例如,以循环方式被分配给主指令。一旦计数器已被分配给每个主指令,则方法1200进前进到块1208。在块1208处,例如,由编译器为每个主指令生成计算机可执行指令,使得计算机可执行指令包括将主指令标识为主指令的信息,以及标识分配给主指令的计数器的信息。如以上关于如图2所描述,在一些情况下,所生成的计算机可执行指令可以包括主指令字段,该主指令字段包括指示计算机可执行指令是主指令的信息,以及标识分配给主指令的计数器的信息。例如,主指令字段可以被配置为保存数字,并且当数字是预定值例如零时它指示指令不是主指令,并且当数字不是预定值时例如,零值它指示指令是主指令,数字表示与主指令相关联的计数器的数字。一旦针对主指令生成了计算机可读指令,则方法1200前进到块1210。在块1210处,例如,由编译器针对每个次指令生成计算机可执行指令,使得计算机可执行指令包括将计算机可执行指令标识为次指令的信息,以及标识分配给相应主指令的计数器的信息。如以上关于图2描述的,在一些情况下,所生成的计算机可执行指令包括次指令字段,该次指令字段包括指示计算机可执行指令是次指令的信息以及标识分配给相应主指令的计数器的信息。例如,次指令字段可以被配置为保持位掩码,其中位掩码的每个位对应于多个计数器的计数器,并且当掩码的位被设置时,它指示该指令是依赖于与相应计数器关联的主指令的次指令。一旦针对次指令生成了计算机可读指令,则方法1200前进到块1212。在块1212处,将在块1208和1210中生成的计算机可执行指令加载到并行处理单元的存储器中或可由其访问。尽管在图12的示例方法1200中,标识所有管线间数据危害,然后将计数器分配到其中并为其主指令和次指令生成的可执行指令,在其他示例中,在标识每个管线间数据危害之后,计数器可以被分配给主指令并且为主指令和次指令生成计算机可执行指令,以包括指示它们如此并标识分配给主指令的计数器的信息。当由图12的方法1200生成的指令旨在由被配置为处理不同于高延迟管线间数据危害的低延迟管线间数据危害的并行处理单元诸如图9的并行处理单元执行时,用于跟踪数据危害的计数器可以被分成两组,并且来自一组的计数器可以被分配给低延迟数据危害的主指令,并且来自另一组的计数器可以被分配给高延迟数据危害的主指令。如上描述,然后并行处理单元可以基于分配给相应的主指令的计数器来确定将危害作为低延迟危害还是高延迟危害来处理。现在参考图13,其示出了向主指令分配计数器块1206的示例方法,其中高延迟数据危害的主指令被分配来自一组计数器的计数器,而低延迟数据危害的主指令被分配来自另一组计数器的计数器。方法1206从块1302开始,其中针对所标识的管线间数据危害确定管线间数据危害是低延迟数据危害还是高延迟数据危害。该确定可以基于将执行所标识的管线间数据危害的主指令的指令管线例如,指令管线106的吞吐量。吞吐量提供了对指令管线处理指令的速度的指示。通常,吞吐量越高,指令管线处理指令就越快。具有高于或等于预定阈值的吞吐量的指令管线可以被认为是高吞吐量指令管线,并且要由高吞吐量指令管线执行的主指令可以被认为是与低时延间隔管线数据危害相关。相反地,具有低于预定阈值的吞吐量的指令管线可以被认为是低吞吐量指令管线,并且要由低吞吐量指令管线执行的主指令可以被认为与高延迟管线间数据危害相关。确定哪个指令管线将执行主指令可以基于主指令的类型,其可以例如由主指令的操作码“opcode”来标识。如果确定主指令与低延迟危害相关联,则方法1206前进到块1304,其中主指令被分配例如,由编译器来自第一组计数器的计数器例如,计数器0到3。然后,方法1206进行到块1308。然而,如果确定主指令与高延迟危害相关联,则方法1206前进到块1306,其中主指令被分配例如,由编译器来自第二组计数器例如,计数器4至7的计数器。方法1306然后前进到块1308。在块1308处,确定是否存在更多标识的管线间数据危害。如果存在至少一个被标识的管线间数据危害,则该方法返回到块1302。如果没有更多标识的管线间数据危害即,所有主指令已经被分配了计数器,则方法1206结束。图14示出了其中可以实现本文描述的并行处理单元100、600、900的计算机系统。该计算机系统包括CPU1402、GPU1404、存储器1406和其他设备1414,诸如显示器1416、扬声器1418和照相机1420。并行处理单元1410对应于并行处理单元100、600或900中任何一个被示为在GPU1404内实现。在其他示例中,并行处理单元1410可以在CPU1402内实现。计算机系统的组件可以经由通信总线1422彼此通信。图1、3、4、6、7和9的并行处理单元、队列和计数器块被示出为包括许多功能块。这仅是示意性的并不旨在定义这些实体的不同逻辑元件之间的严格划分。每个功能块可以以任何合适的方式提供。应该理解,在此描述的由并行处理单元、队列或计数器块的元件形成的中间值不需要在任何地方由并行处理单元、队列或计数器块物理地生成,并且可以仅表示便于描述由在其输入和输出之间的并行处理单元、队列或计数器块执行的处理的逻辑值。本文描述的并行处理单元、队列和或计数器块可以用集成电路上的硬件来实现。本文描述的并行处理单元可以被配置为执行本文描述的任何方法。通常,上述任何功能、方法、技术或组件可以用软件、固件、硬件例如,固定逻辑电路或其任何组合来实现。这里可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”和“逻辑”来大体地表示软件、固件、硬件或其任何组合。在软件实现的情况下,模块、功能,组件、元件、单元、块或逻辑表示在处理器上执行时执行指定任务的程序代码。本文描述的算法和方法可以由执行使得一个或多个处理器执行算法方法的代码的一个或多个处理器执行。计算机可读存储介质的示例包括随机存取存储器RAM、只读存储器ROM、光盘、闪速存储器、硬盘存储器以及可以使用磁、光学和其他技术来存储指令或其他数据并且可以被机器访问的其他设备。本文使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码诸如硬件描述语言或网表以及以编程语言代码例如C、Java或OpenCL表达的代码。可执行代码可以是例如当在虚拟机处或其他软件环境中适当地执行、处理、解释、编译、执行时使得支持代码可执行的计算机系统的处理器执行由代码指定的任务的任何类型的软件、固件、脚本、模块或库。处理器、并行处理单元、计算机或计算机系统可以是任何种类的具有使其能够执行指令处理能力的设备、机器或专用电路或其集合或其部分。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路ASIC、可编程逻辑阵列、现场可编程门阵列、可编程门阵列FPGA等。计算机或计算机系统可以包括一个或多个处理器。还旨在涵盖定义如本文所述的硬件配置的软件诸如HDL硬件描述语言软件以执行期望的功能,如用于设计集成电路或用于配置可编程芯片。换言之,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中处理时,将该系统配置为制造被配置为执行本文所描述的方法、或制造包括本文所描述的任何装置的处理器或并行处理单元的系统。集成电路定义数据集可以为例如集成电路描述。可以提供一种在集成电路制造系统处制造如本文所描述的并行处理单元、队列和或计数器块的方法。可以提供一种集成电路定义数据集,其在集成电路制造系统中处理时,使得制造并行处理单元、队列和或计数器块的方法被执行。集成电路定义数据集可以是计算机代码的形式,例如作为网表、用于配置可编程芯片的代码、作为定义任何级别的集成电路的硬件描述语言、包括寄存器传输级别RTL代码、作为诸如Verilog或VHDL之类的高级电路表示、以及作为诸如OASISRTM和GDSII之类的低级电路表示。逻辑地定义集成电路例如RTL的较高级表示可以在配置用于在软件环境的上下文中生成集成电路的制造定义的计算机系统处被处理,该软件环境包括电路元件的定义和用于将这些元件组合以生成由该表示定义的集成电路的制造定义。如通常在计算机系统处执行以定义机器的软件的情况,可能需要一个或多个中间用户步骤例如,提供命令、变量等,以使被配置用于生成制造定义集成电路的计算机系统执行定义集成电路的代码,从而生成该集成电路的制造定义。现在将参考图15描述处理集成电路制造系统处的集成电路定义数据集,从而配置系统以制造并行处理单元例如,并行处理单元100、600或900的示例。图15示出了被配置为制造如本文任一示例中所描述的并行处理单元例如,并行处理单元100、600或900的集成电路IC制造系统1502的示例。特别地,IC制造系统1502包括布局处理系统1504和集成电路生成系统1506。IC制造系统1502被配置为接收IC定义数据集例如,定义如本文描述的并行处理单元例如,并行处理单元100、600或900,处理IC定义数据集,并且根据IC定义数据集来生成IC例如,体现如本文任一示例描述的并行处理单元例如,并行处理单元100、600或900。对IC定义数据集的处理将IC制造系统1502配置为制造体现如本文任何示例中描述的并行处理单元例如,并行处理单元100、600或900的集成电路。布局处理系统1504被配置为接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的栅极电平表示,例如,在逻辑组件方面例如NAND、NOR、AND、OR、MUX和FLIP-FLOP组件。通过确定逻辑组件的位置信息,可以从电路的栅极电平表示来确定电路布局。这可以自动完成或在用户参与下完成,从而优化电路布局。当布局处理系统1504已经确定了电路布局时,它可以向IC生成系统1506输出电路布局定义。电路布局定义可以是例如电路布局描述。如本领域已知的,IC生成系统1506根据电路布局定义生成IC。例如,IC生成系统1506可以实现半导体器件制造工艺以生成IC,其可以涉及光刻和化学处理步骤的多步骤序列,在该步骤中电子电路逐渐形成在由半导体材料制成的晶片上。电路布局定义可以是掩模的形式,其可以用于根据电路定义生成IC的光刻工艺中。或者,提供给IC生成系统1506的电路布局定义可以是IC生成系统1506可用来形成用于生成IC的合适掩模的计算机可读代码的形式。由IC制造系统1502执行的不同处理可以全部位于一个位置例如,由一方实现。或者,IC制造系统1502可以是分布式系统,使得一些过程可以在不同位置执行并且可以由不同方执行。例如,以下各项的一些阶段中:i合成表示IC定义数据集的RTL代码,以形成要生成的电路的栅极电平表示,ii基于栅极电平表示来生成电路布局,iii根据电路布局来形成掩模,以及iv使用掩模制造集成电路可以在不同位置和或由不同方执行。在其他示例中,集成电路制造系统处的集成电路定义数据集可以将系统配置为制造并行处理单元例如,并行处理单元100、600或900,而无需处理IC定义数据集而确定电路布局。例如,集成电路定义数据集可以定义诸如FPGA之类的可重新配置处理器的配置,并且该数据集的处理可以配置IC制造系统以生成具有该定义的配置的可重新配置的处理器例如,通过将配置数据加载到FPGA。在一些实施例中,当集成电路制造定义数据集在集成电路制造系统中处理时,该集成电路制造定义数据集可以使集成电路制造系统生成如本文描述的设备。例如,通过集成电路制造定义而配置以上面关于图15描述的方式的集成电路制造系统,可以使得制造如本文描述的设备。在一些示例中,集成电路定义数据集可以包括在数据集上定义的硬件上运行的软件或者与数据集上定义的硬件相结合的软件。在图15所示的示例中,IC生成系统还可以由集成电路定义数据集配置,以在制造集成电路时根据定义在集成电路定义数据集处的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供向程序代码以与集成电路一起使用。与已知实施方式相比,在本申请中阐述的概念在设备、装置、模块和或系统以及本文实施的方法中中的实现可以引起性能改进。性能改进可以包括增加的计算性能、减少的延迟、增加的吞吐量和或减少的功耗中的一个或多个。在这样的设备、装置、模块和系统例如在集成电路中的制造期间,性能改进可以与物理实现相权衡从而改进制造方法。例如,性能改进可以针对布局区域相权衡,从而匹配已知实现的性能但使用更少的硅。这可以例如通过以串行化方式重用功能块或在设备、制造、模块和或系统的元件之间共享功能块来完成。相反,可以改善设备、装置、模块和系统的物理实现例如减小的硅面积的本申请中提出的概念可被权衡用于改善性能。这可以通过例如在预定义区域预算内制造模块的多个实例来完成。申请人在此独立地公开了本文描述的每个单独特征和两个或更多这种特征的任何组合,使得这样的特征或组合能够基于本说明作为整体根据本领域技术人员的一般常识,而无论这些特征或特征的组合解决本文公开的任何问题。鉴于前面的描述,对于本领域技术人员而言显然的是,可以在本发明的范围内进行各种修改。现在通过条款提供进一步的示例。条款1:一种生成用于并行处理单元的计算机可执行指令的计算机实现的方法1200,该方法1200包括,由处理器:接收1202多个相关指令;标识1204多个相关指令中的数据危害,每个数据危害包括主指令和一个或多个次指令;为每个主指令分配1206多个计数器中的计数器,用于跟踪所标识的数据危害;为每个主指令生成1208计算机可执行指令,该计算机可执行指令包括指示该计算机可执行指令是主指令的信息和标识分配给主指令的计数器的信息;以及为每个次指令生成1210计算机可执行指令,该计算机可执行指令包括指示该计算机可执行指令是次指令的信息以及标识分配给对应主指令的计数器的信息;以及将计算机可执行指令加载1212到并行处理单元中。条款2:条款1所述的方法1200,其中每个计算机可执行指令包括主指令字段和次指令字段,该主指令字段被配置为包括指示该计算机可执行指令是主指令的信息和标识分配给主指令的计数器的信息,并且次指令字段被配置为包括指示该计算机可执行指令是次指令的信息和标识分配给相应主指令的计数器的信息。条款3:条款2的方法1200,其中主指令字段被配置为保持数字,并且当数字是预定值时指示该指令不是主指令,并且当数字不是预定的值时指示指令是主指令,并且该数字表示分配给主指令的计数器的数字。条款4:条款2或条款3的方法1200,其中次指令字段被配置为保持位掩码,其中位掩码的每个位对应于多个计数器的计数器,并且当掩码被设置时指示该指令是依赖于分配给相应计数器的主指令的次指令。条款5:条款2至4中任一项的方法1200,其中,为主指令分配用于跟踪所标识的数据危害的计数器,包括确定1302所标识的数据危害是高延迟数据危害还是低延迟数据危害,并且当所标识的数据危害是高延迟数据危害时,为主指令分配1304多个计数器的第一子集中的计数器,并且当标识的数据危害是低延时数据危害时,为主指令分配1306多个计数器的第二子集中的计数器。条款6:条款5的方法1200,其中确定所标识的数据危害是高延迟数据危害还是低延迟数据危害基于与用于执行标识的数据危害的主指令的指令管线相关联的吞吐量。条款7:条款6所述的方法1200,其中,如果与用于执行所标识的数据危害的主指令的指令管线相关联的吞吐量大于或等于预定的阈值,则所标识的数据危害是高延迟数据危害,反之,则标识的数据危害是低延迟数据危害。条款8:条款6或条款7的方法1200,其中,用于执行所标识的数据危害的主指令的指令管线基于主指令的类型。条款9:条款1至8中任一项的方法1200,其中,并行处理单元包括多个并行指令管线,并且标识多个相关指令内的数据危害包括标识多个相关指令内的管线间数据危害的相关。条款10:条款1至9中任一项的方法1200,其中,并行处理单元被配置为使用在计算机可读指令中标识的计数器来跟踪数据危害。条款11:条款1至10中任一项的方法1200,其中,并行处理单元被配置为:响应于并行处理单元的解码器输出主指令用于执行,调整分配给主指令的计数器以指示与该主指令相关的数据危害;响应于检测到与主指令相关的数据危害已被解决,调整分配给主指令的计数器以指示数据危害已被解决;以及响应于解码器输出次指令用于执行,如果分配给次指令所依赖的主指令的至少一个计数器指示存在与主指令相关的数据危害,则停滞次指令。条款12:条款1至11中任一项的方法1200,其中,并行处理单元包括:多个计数器103;多个队列110、610、910,每个队列110、610、910在多个指令管线106中的一个指令管线之前;指令解码器104、604、904被配置为:解码接收到的指令;响应于确定解码的指令是至少一个其他指令所依赖的主指令,使得分配给主指令的多个计数器的计数器103的值被调整以指示存在与主指令相关的危害;以及将解码的指令转发到多个队列110、610、910中的一个;以及监测器逻辑108,被配置为监测所述多个指令管线106,并且响应于检测到指令管线106已经解决与主指令相关的危害,使得分配给主指令的计数器的值被调整以指示与主指令相关的危害已被解决;其中,每个队列110、610、910被配置为响应于接收到依赖于一个或多个主指令的次指令,如果分配给次指令所依赖的主指令的多个计数器中的计数器103指示存在与该主指令相关的危害,则停滞由相关联的指令管线106对次指令的执行。条款13:条款1至12中任一项的方法,其中,主指令是一个或多个指令所依赖的指令,并且次指令是依赖于一个或多个主指令的指令。条款14:用于执行条款1至13中任一条款的方法的计算机程序代码。条款15:一种其上存储有计算机可读指令的非暂态计算机可读存储介质,该计算机可读指令在计算机系统处被执行时,使所述计算机系统执行条款1至13中任一条款的方法。

权利要求:1.一种并行处理单元100、600、900,包括:计数器块102、602,该计数器块包括多个计数器103;多个队列110、610、910,每个队列110、610、910在多个指令管线106中的一个指令管线之前,并且与所述计数器块102、602通信;指令解码器104、604、904,被配置为:解码接收到的指令;响应于确定所解码的指令是至少一个其他指令所依赖的主指令,使得与所述主指令相关联的所述计数器块102、602的所述多个计数器中的计数器103的值被调整以指示存在与所述主指令相关的危害;并且将所述解码的指令转发到所述多个队列110、610、910中的一个队列;以及监测器逻辑108,被配置为监测所述多个指令管线106,并且响应于检测到指令管线106已经解决了与主指令相关的危害,使得与所述主指令相关联的所述计数器的值被调整以指示与所述主指令相关的所述危害已被解决;其中,每个队列110、610、910被配置为响应于接收到依赖于一个或多个主指令的次指令,如果与所述次指令所依赖的主指令相关联的所述计数器块102、602的所述多个计数器中的计数器103指示存在与该主指令相关的危害,则停滞由所述相关联的指令管线106对所述次指令的执行。2.根据权利要求1所述的并行处理单元100、600、900,其中,所述指令解码器104被配置为通过使得与所述主指令相关联的所述计数器103的值增加预定量来使得与所述主指令相关联的所述计数器103的值被调整以指示存在与所述主指令相关的危害。3.根据权利要求2所述的并行处理单元100、600、900,其中,所述监测器逻辑108被配置为通过使得与所述主指令相关联的所述计数器103的值减少预定量来使得与所述主指令相关联的计数器的值被调整以指示与所述主指令相关的危害已被解决。4.根据权利要求1所述的并行处理单元100、600、900,其中,所述接收到的指令包括主指令字段202和次指令字段204,所述主指令字段202被配置为指示所述指令是否为主指令并且标识与该主指令相关联的所述计数器103,并且所述次指令字段204被配置为指示所述指令是否为次指令以及与所述次指令所依赖的每个主指令相关联的所述计数器103。5.根据权利要求4所述的并行处理单元100、600、900,其中,所述主指令字段202被配置为保持数字,并且当所述数字为预定值时,所述数字指示所述指令不是主指令,并且当所述数字不是所述预定值时,所述数字指示所述指令是主指令,并且所述数字表示与所述主指令相关联的所述计数器103的数字。6.根据权利要求4所述的并行处理单元100、600、900,其中,所述次指令字段204被配置为保持位掩码,其中所述位掩码的每个位对应于所述多个计数器中的计数器103,并且当所述掩码中的位被设置时,该位指示所述指令是依赖于与所述相应的计数器103相关联的所述主指令的次指令。7.根据权利要求4所述的并行处理单元100、600、900,其中,所述接收到的指令已经由编译器生成,所述编译器被配置成标识在一组相关指令内的数据危害,为每个标识的数据危害分配计数器,并且生成计算机可执行指令以包括基于所述标识和计数器分配所配置的主指令字段和次指令字段。8.根据权利要求1至7中任一项所述的并行处理单元100、600、900,其中,所述接收到的指令形成具有特定任务ID的任务的一部分,并且每个队列110、610、910被配置为如果次指令被停滞,则在该次指令之前将形成具有不同任务ID的任务的一部分的指令转发到所述相关联的指令管线。9.根据权利要求1至7中任一项所述的并行处理单元600,还包括一个等待计数器630,所述等待计数器630对应于所述多个计数器103中的每一个,并且其中:所述指令解码器604还被配置为:响应于确定所述被解码的指令是主指令,而确定对应于与所述主指令相关联的所述计数器的所述等待计数器630是否指示存在等待与所述主指令相关联的所述计数器103的结果的至少一个次指令;仅响应于确定对应于与所述主指令相关联的所述计数器的所述等待计数器630指示不存在等待与所述主指令相关联的所述计数器103的所述结果的至少一个次指令,将主指令转发到所述队列610中的一个队列;响应于确定对应于与所述主指令相关联的所述计数器的所述等待计数器630指示存在等待与所述所述主指令相关联的所述计数器103的所述结果的至少一个次指令,使得所述主指令被解除调度,直到对应于与所述主指令相关联的所述计数器的所述等待计数器630指示不存在等待与所述主指令相关联的所述计数器103的所述结果的至少一个次指令;以及响应于确定所述解码的指令是次指令,使得对应于与所述次指令所依赖的主指令相关联的所述计数器的每个等待计数器630的值被调整以指示额外的次指令正在等待所述计数器103的所述结果;并且所述队列610还被配置为,响应于检测到已经将次指令转发至指令管线以供执行,而使得对应于与所述次指令所依赖的主指令相关联的所述计数器的每个等待计数器的所述值被调整以指示少了一个次指令正在等待所述计数器的所述结果。10.根据权利要求9所述的并行处理单元600,还包括调度器616,被配置为调度指令以供由所述指令解码器604进行解码,并且所述指令解码器604被配置为通过向所述调度器616发送去激活指令以使得所述指令被解除调度,直到对应于与所述主指令相关联的所述计数器的所述等待计数器指示不存在正在等待所述计数器的所述结果的至少一个次指令,所述去激活指令包括标识所述主指令的信息和标识对应于与所述主指令相关联的所述计数器的所述等待计数器的信息。11.根据权利要求1至7中任一项所述的并行处理单元900,其中,所述多个计数器被划分成与高延迟数据危害相关联的第一组高延迟计数器和与低延迟数据危害相关联的第二组低延迟计数器,并且其中:每个队列910被配置为仅当与次指令所依赖的主指令相关联的低延迟计数器指示存在与所述主指令相关的危害时,停滞由所述相关联的指令管线对所述次指令的执行;并且所述指令解码器904还被配置为:响应于确定所述解码的指令是次指令,确定与所述次指令所依赖的主指令相关联的每个高延迟计数器是否指示与所述主指令相关的危害已被解决;仅响应于确定与所述次指令所依赖的主指令相关联的每个高延迟计数器指示与所述主指令相关的所述危害已被解决,将所述次指令转发到所述多个队列910中的一个队列;以及响应于确定与所述次指令所依赖的主指令相关联的至少一个高延迟计数器指示与所述主指令相关的所述危害尚未解决,使得所述次指令被解除调度,直到与所述次指令所依赖的主指令相关联的每个高延迟计数器指示与所述主指令相关的所述危害已被解决。12.根据权利要求11所述的并行处理单元900,还包括调度器916,被配置为调度指令以供由所述指令解码器904进行解码;并且所述指令解码器904还被配置为通过所述向调度器916发送去激活指令以使得所述次指令被限制调度,直到与所述次指令所依赖的主指令相关联的每个高延迟计数器指示与所述主指令相关的所述危害已被解决,所述去激活指令包括标识所述指令和与所述次指令所依赖的主指令相关联的所述高延时计数器的信息。13.根据权利要求1至7中任一项所述的并行处理单元100、600、900,其中,每个次指令将在与其所依赖的所述主指令不同的指令管线106中被执行。14.一种用于避免并行处理单元中的数据危害的方法500、800、1100,所述方法500、800、1100包括:由指令解码器解码指令502、504;响应于在所述指令解码器处确定所述解码的指令是至少一个其他指令所依赖的主指令,向包括多个计数器的计数器块发送调整信号,所述调整信号使得与所述主指令相关联的所述计数器块的所述多个计数器中的计数器的值被调整以指示存在与所述主指令506、508相关的危害;将所述解码的指令从所述指令解码器转发到多个队列中的队列,每个队列接收将由多个指令管线510中的一个指令管线执行的指令;响应于在所述队列处确定接收到的指令是依赖于一个或多个主指令的次指令,如果与所述次指令所依赖的主指令相关联的所述计数器块的所述多个计数器中的计数器指示存在与所述主指令相关的危害,则停滞所述次指令由所述相关联的指令管线执行512、514、516;以及响应于由监测器硬件逻辑检测到与主指令相关的危害已被所述多个指令管线中的指令管线解决,向所述计数器块发送调整信号,所述调整信号使得与所述主指令相关联的所述计数器块中的所述多个计数器中的所述计数器的值被调整以指示与所述主指令相关的所述危害已被解决518、520、522。15.根据权利要求14所述的方法,其中,所述指令包括主指令字段和次指令字段,所述主指令字段被配置为指示所述指令是否为主指令并且标识与该主指令相关联的所述计数器,并且所述次指令字段被配置为指示所述指令是否为次指令并且标识与所述次指令所依赖的每个主指令相关联的所述计数器。16.根据权利要求14或权利要求15所述的方法,还包括:响应于在所述指令解码器处确定所述被解码的指令是主指令,确定对应于与所述主指令相关联的所述计数器的等待计数器是否指示存在等待与所述主指令相关联的所述计数器的结果的至少一个次指令;仅响应于确定对应于与所述主指令相关联的所述计数器的所述等待计数器指示不存在等待与所述主指令相关联的所述计数器的所述结果的至少一个次指令,使得与所述主指令相关联的所述多个计数器中的所述计数器的值被调整以指示存在与所述主指令相关的危害,并且转发所述主指令到队列;响应于确定对应于与所述主指令相关联的所述计数器的所述等待计数器指示存在等待所述计数器的所述结果的至少一个次指令,使得所述主指令被解除调度,直到对应于与所述主指令的所述计数器的所述等待计数器指示不存在等待所述计数器的所述结果的至少一个次指令;响应于在所述指令解码器处确定所述解码的指令是次指令,使得对应于与所述次指令所依赖的主指令相关联的计数器的每个等待计数器的值被调整以指示额外的次指令正在等待所述计数器的所述结果;以及响应于在所述队列处检测到次指令已经被转发至指令管线以供执行,使得对应于与所述次指令所依赖的主指令相关联的所述计数器的每个等待计数器的值被调整以指示少了一个次指令正在等待所述计数器的所述结果。17.根据权利要求14或权利要求15所述的方法,其中,所述多个计数器被划分成与高延迟数据危害相关联的第一组高延迟计数器和与低延迟数据危害相关联的第二组低延迟计数器,并且其中:响应于在所述指令解码器处确定所述解码的指令是次指令,确定与所述次指令所依赖的主指令相关联的每个高延迟计数器是否指示与所述主指令相关的数据危害已被解决;仅响应于确定与所述次指令所依赖的主指令相关联的每个高延迟计数器指示与所述主指令相关的所述数据危害已被解决,将所述次指令转发到所述多个队列中的一个队列;以及响应于确定与所述次指令所依赖的主指令相关联的至少一个高延迟计数器指示与所述主指令相关的所述危害尚未解决,使得所述次指令被解除调度,直到与所述次指令所依赖的主指令相关联的每个高延迟计数器指示与所述主指令相关的所述危害已被解决;以及仅当与所述次指令所依赖的主指令相关联的低延迟计数器指示存在与所述主指令相关的危害时,停滞由所述相关联的队列对所述次指令的执行。18.一种在其上存储有集成电路的的非暂态计算机可读存储介质,所述计算机可读描述当在集成电路制造系统1502中处理时,使得所述集成电路制造系统1502制造权利要求1-7中任一项所述的并行处理单元100、600、900。19.一种集成电路制造系统1502,包括:非暂态计算机可读存储介质,其上存储有描述权利要求1至7中任一项所述的并行处理单元100、600、900的计算机可读集成电路描述;布局处理系统1504,被配置为处理所述集成电路描述,以生成体现所述并行处理单元100、600、900的集成电路的电路布局描述;以及集成电路生成系统1506,被配置为根据所述电路布局描述来制造所述并行处理单元100、600、900。20.一种在其上存储有计算机可读指令的非暂态计算机可读存储介质,所述计算机可读指令当在计算机系统处执行时,使得所述计算机系统执行权利要求14或权利要求15所述的方法。

百度查询: 畅想科技有限公司 用于管线间数据危害避免的方法和系统

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。