用于在单指令多数据SIMD处理系统中控制发散分支指令的方法和设备与流程

文档序号:11294192阅读:306来源:国知局
用于在单指令多数据SIMD处理系统中控制发散分支指令的方法和设备与流程
本发明涉及多线程处理,且更特定来说涉及用于在多线程处理系统中执行子例程的技术。

背景技术:
单指令多数据(SIMD)处理系统是一种类型的并行计算系统,其包含在多个数据块上执行相同指令的多个处理元件。SIMD系统可为独立计算机或计算系统的子系统。举例来说,一或多个SIMD执行单元可用于图形处理单元(GPU)中以实施支持可编程着色的可编程着色单元。SIMD处理系统允许以并行方式在多个处理元件上同步地执行程序的多个执行线程,借此增加其中需要对多个数据块执行相同一组操作的程序的通过量。由于每一线程对不同数据产生作用,所以如果程序包含条件性分支指令,那么有可能针对执行于系统中的一些线程而满足分支条件且针对执行于系统中的其它线程而不满足分支条件。此条件可称作发散分支条件且导致SIMD系统不能够以同步方式在多个处理元件上执行所有线程。

技术实现要素:
本发明是针对用于在经受发散线程条件的单指令多数据(SIMD)处理系统中执行子例程的技术。特别地说,描述用于管理发散线程的基于恢复计数器的方法,其利用程序模块特定型最小恢复计数器(MINRC)来有效处理控制流指令。如本文中所使用,程序模块可指主程序模块(例如,顶级程序模块)或子例程程序模块。因而,在处理系统中执行的每一子例程可使用子例程特定型MINRC来控制对所述子例程中包含的控制流指令的处理。程序模块特定型MINRC的使用允许实施基于MINRC的控制流的系统支持执行子例程程序指令。在一个实例中,本发明描述一种方法,所述方法包含通过一或多个处理器基于第一MINRC来控制对程序的执行。第一MINRC指定指示与所述程序的多个执行线程相关联的多个恢复计数器值中的最小恢复计数器值的值。所述方法进一步包含通过一或多个处理器基于与所述程序的子例程相关联的第二MINRC来控制对所述子例程的执行。第二MINRC指定指示来自多个恢复计数器值的子集的最小恢复计数器值的值,所述多个恢复计数器值对应于在起始对子例程的执行时为有效的所有线程。在另一实例中,本发明描述包含一或多个处理器的系统,所述一或多个处理器经配置以基于第一MINRC来控制对程序的执行且基于与所述程序的子例程相关联的第二MINRC来控制对所述子例程的执行。第一MINRC指定指示与所述程序的多个执行线程相关联的多个恢复计数器值中的最小恢复计数器值的值。第二MINRC指定指示来自多个恢复计数器值的子集的最小恢复计数器值的值,所述多个恢复计数器值对应于在起始对子例程的执行时为有效的所有线程。在另一实例中,本发明描述包含用于基于第一MINRC来控制对程序的执行的装置的设备。第一MINRC指定指示与所述程序的多个执行线程相关联的多个恢复计数器值中的最小恢复计数器值的值。所述设备进一步包含用于基于与所述程序的子例程相关联的第二MINRC来控制对所述子例程的执行的装置。第二MINRC指定指示来自多个恢复计数器值的子集的最小恢复计数器值的值,所述多个恢复计数器值对应于在起始对子例程的执行时为有效的所有线程。在另一实例中,本发明描述存储指令的计算机可读存储媒体,所述指令在执行时致使一或多个处理器基于第一MINRC来控制对程序的执行。第一MINRC指定指示与所述程序的多个执行线程相关联的多个恢复计数器值中的最小恢复计数器值的值。所述指令进一步致使一或多个处理器基于与所述程序的子例程相关联的第二MINRC来控制对所述子例程的执行。第二MINRC指定指示来自多个恢复计数器值的子集的最小恢复计数器值的值,所述多个恢复计数器值对应于在起始对子例程的执行时为有效的所有线程。在附图及以下描述中阐述本发明的一或多个实例的细节。本发明的其它特征、目标和优势将从描述和附图以及从权利要求书显而易见。附图说明图1是说明可用于实施本发明的子例程执行技术的实例处理系统的框图。图2是根据本发明的更详细地说明图1的实例处理系统中的控制单元的框图。图3是说明可用于实施本发明的子例程执行技术的实例控制流模块的框图。图4是说明本发明的子例程执行技术的实例控制流的概念图。图5是说明本发明的子例程执行技术的另一实例控制流的概念图。图6是根据本发明的技术的说明实例程序空间布置的概念图。图7到18是说明利用本发明的子例程执行技术的实例指令处理技术的流程图。图19是说明可用于实施本发明的子例程执行技术的另一实例控制流模块的框图。图20是根据本发明的特征化图19中所说明的控制流模块的示范性操作的状态转变图。图21是根据本发明的特征化图19中所说明的控制流模块的示范性操作的状态转变表。图22到28说明用于实施本发明的子例程执行技术的实例伪码。图29是根据本发明的说明用于基于程序模块特定型MINRC来控制处理系统的实例技术的流程图。图30是根据本发明的说明用于执行子例程调用指令的实例技术的流程图。图31是根据本发明的说明用于执行子例程返回指令的实例技术的流程图。具体实施方式本发明是针对用于在经受发散线程条件的单指令多数据(SIMD)处理系统中执行子例程的技术。特别地说,描述用于管理发散线程的基于恢复计数器的方法,其利用程序模块特定型最小恢复计数器(MINRC)来有效处理控制流指令。如本文中所使用,程序模块可指主程序模块(例如,顶级程序模块)或子例程程序模块。因而,在处理系统中执行的每一子例程可使用子例程特定型MINRC来控制对所述子例程中包含的控制流指令的处理。程序模块特定型MINRC的使用允许实施基于MINRC的控制流的系统支持执行子例程程序指令。在一些实例中,本发明的技术可包含使用主程序MINRC来控制对主程序的执行及使用子例程特定型MINRC来控制对由主程序或由其它子例程调用的子例程的执行。主程序MINRC值可指示来自一组一或多个恢复计数器值的最小恢复计数器值,所述一组一或多个恢复计数器值对应于在起始对主程序的执行时为有效的所有线程(其通常为执行于系统中的所有线程)。类似地,每一子例程特定型MINRC可指定指示来自一组一或多个恢复计数器值的最小恢复计数器值的值,所述一组一或多个恢复计数器值对应于在起始对相应子例程的执行时为有效的所有线程。每一恢复计数器值可对应于执行于处理系统上的多个线程中的相应者,且如果所述相应线程无效,那么恢复计数器值可指示所述无效线程经调度以再激活所处的程序计数器值。当一或多个线程被去活时,当前控制处理系统的执行的MINRC可用于控制在向前跳跃之后或在向前分支指令之后执行哪个指令。举例来说,在某些情况下,在执行向前跳跃指令或向前分支指令之后,处理系统可将由MINRC指示的指令选择为将执行的下一指令。通过将独立的MINRC用于主程序和用于子例程中的每一者,处理系统可确保子例程不从子例程分支到主程序中或分支到不在调用或返回指令的执行范围中的另一子例程中。这样,本发明的技术可确保用于在使用MINRC来控制对向前跳跃指令和向前分支指令的执行的处理系统中执行子例程的恰当控制流。根据本发明的一些方面,描述用于切换MINRC的技术,所述MINRC用于在进入和退出子例程之后即刻切换控制对处理系统的执行。举例来说,响应于执行调用指令,处理系统可经配置以:保存对应于调用者程序的MINRC的状态;初始化对应于子例程程序的新MINRC;以及基于对应于子例程程序的MINRC来控制对子例程的执行。响应于执行返回指令,处理系统可经配置以:还原对应于调用者程序的MINRC的所保存状态;以及基于MINRC的所还原状态来恢复控制对调用者程序的执行。根据本发明的一些方面,描述用于响应于激活和/或去活处理系统中的一或多个线程来更新MINRC值的技术。一般来说,为更新MINRC值,处理系统可确定一组候选恢复计数器值以供用于确定MINRC值,且将MINRC设定到指示来自所述一组候选恢复计数器值的最小恢复计数器值的值。一组候选恢复计数器值可为对应于执行于处理系统中的所有线程的一组完整恢复计数器值的子集。在一些情况下,一组候选恢复计数器值可排除对应于在起始对当前执行的程序模块的执行时为无效的线程的一或多个恢复计数器值。通过在更新MINRC时排除此些恢复计数器值而不予考虑,本发明的技术可确保子例程特定型MINRC被更新到在与子例程相关联的程序空间内的值。如果SIMD处理系统的指令集架构(ISA)支持控制流指令,那么可由包含单一程序计数器的单一控制流单元来控制所有线程。由于每一线程对不同数据产生作用,所以有可能针对执行于系统中的一些线程而满足特定分支指令的分支条件且针对执行于系统中的其它线程而不满足特定分支指令的分支条件。如果针对执行于系统中的所有有效线程而满足或不满足由特定条件性分支指令所指定的条件,那么所述分支指令的分支发散据称是一致的。否则,如果针对一些有效线程而满足条件且针对其它有效线程而不满足条件,那么所述分支指令的分支发散据称是发散的。如果发生发散分支,那么经调度以针对一些有效线程所执行的下一指令可不同于经调度以针对其它有效线程所执行的下一指令。此可导致SIMD处理系统不能够以锁步方式执行所有线程。为处理发散分支指令,在一些实例中,本发明的技术可去活满足或不满足分支条件的线程的一个子集以使得剩余有效线程皆被同步化以执行相同的下一指令。为控制对所去活线程的再激活,本发明的技术可使用基于恢复计数器的方法,所述方法涉及:为执行于处理系统中的每一线程分配恢复计数器;将正去活的每一线程的恢复计数器设定到指示应再激活相应线程所处的程序计数器值的值;以及在执行每一指令之前执行恢复检查操作。举例来说,基于恢复计数器的方法可响应于发散分支条件来去活一或多个线程,且针对正去活的每一线程而将相应线程的恢复计数器(例如,寄存器)设定到指示对应于将由所去活线程执行的下一指令的程序计数器值的值。如果线程有效,那么所述线程的恢复计数器可设定到默认值。在一些实例中,默认值可为对应于大于程序的地址范围的值的“无限值”(例如,最大寄存器值)。每次程序计数器寄存器加载有新的程序计数器值时,可执行恢复检查操作,所述恢复检查操作可再激活其中线程的恢复计数器值等于所述新的程序计数器值的任何线程。为确保在使用上述基于恢复计数器的方法来用于线程再激活的处理系统中维持恰当的控制流,处理系统可使用“最小值地址优先”线程处理次序。一般来说,“最小值地址优先”线程处理次序可指以下次序:经调度以处理较低值地址处的指令的线程是在经调度以处理较高值地址处的指令的线程之前执行的。此处理次序可防止控制流在不首先再激活无效线程的情况下针对此些线程而跳过任何恢复点。换句话说,此处理次序可确保所有线程将有效且到最后一个程序语句已完成执行的时间为止将已完成处理。“最小值地址优先”线程处理次序可基于发散分支指令的方向(即,向前或向后)来区分什么线程响应于所述分支指令而被去活。对于发散向后分支指令来说,本发明的技术可去活分支指令不被满足所针对的线程,将正去活的每一线程的恢复计数器值设定到与在所述分支指令之后发生的下一顺序指令相关联的值,使程序计数器加载有与由所述分支指令指定的目标指令相关联的值,且着手执行分支条件被满足所针对的那些线程。对于发散向前分支指令来说,本发明的技术可去活分支指令被满足所针对的线程,将正去活的每一线程的恢复计数器值设定到与由所述分支指令指定的目标指令相关联的值,使程序计数器加载有与在所述分支指令之后发生的下一顺序指令相关联的值,且着手执行分支条件不被满足所针对的那些线程。这样去活线程确保经调度以处理较低值地址处的指令的发散线程是在经调度以处理较高值地址处的指令的线程之前执行的(即,“最小值地址优先”线程处理次序)。在其中一或多个线程业已被去活且剩余有效线程执行向前跳跃指令或一致满足的向前分支指令(即,其中针对所有有效线程而一致满足分支条件的向前分支指令)的情况下,一种用以处置控制流的方法可为总是跳跃到向前跳跃或向前分支指令中所指定的目标指令,因为所有有效线程将保持有效。然而,此方法不保证“最小值地址优先”线程处理次序。特别地说,在一些情况下,一或多个无效线程可具有在跳跃或分支指令的当前程序计数器值与目标程序计数器值(即,与分支或跳跃指令中所指定的目标指令相关联的程序计数器值)之间的恢复计数器值。如果控制流将跳过此些无效线程,那么有可能在完成程序的执行之前将不再激活此些线程。为避免此情形,可使用全局MINRC,其存储指示来自对应于系统中的所有线程的一组恢复计数器值的最小恢复计数器值的值。当所述恢复计数器中的任一者设定到新值时(例如,在去活线程后即刻),可更新MINRC以反映新的最小恢复计数器值。处理系统可使用MINRC来确定在当前执行的向前跳跃或向前分支指令与指令中所指定的目标指令之间是否存在任何恢复点,所述确定反过来可用于确定处理系统是否可直接跳跃到目标指令而不致使系统针对无效线程而略过一或多个恢复点。举例来说,当执行得到一致满足的向前跳跃指令或向前分支指令时,处理系统可比较由跳跃或分支指令所指定的目标程序计数器值与MINRC值且基于所述比较来选择将加载到程序计数器中的目标程序计数器值或MINRC值。当目标程序计数器值小于或等于MINRC值时,处理系统可将目标程序计数器值选择为将加载到程序计数器中的值。当目标程序计数器值不小于或等于MINRC值时,处理系统可将MINRC选择为将加载到程序计数器中的值。由于MINRC值指示所有无效线程的最小恢复计数器值,所以以上述方式执行向前跳跃及一致的向前分支将确保控制流不针对任何无效线程而略过恢复点。这样,MINRC可用于当在使用恢复计数器以控制对所去活线程的再激活的处理系统中执行向前跳跃和向前分支指令时确保恰当控制流。用于确保向前跳跃和向前分支指令的恰当控制流的基于MINRC的方法也可比可用于相同目的的其它技术更有效。举例来说,用于确保恰当控制流的另一技术可涉及每当执行向前跳跃指令或一致满足的向前分支指令时去活所有线程且顺序地递增程序计数器贯穿在当前程序计算器值与目标程序计数器值之间的每一程序计数器值以使得在执行目标指令之前恰当地再激活并执行具有在当前程序计数器值与目标程序计数器值之间的恢复计数器值的任何无效线程。虽然此方法可保证“最小值地址优先”线程处理次序,但此方法的效率不及基于MINRC的方法。举例来说,在一些情况下,所有无效线程的恢复计数器在可大于或等于与在争论中的向前跳跃或分支指令相关联的目标程序计数器值。在此情形中顺序地遍历在当前指令与目标指令之间的每一程序计数器值可归因于其中不发生任何线程的执行的浪费的休眠指令周期而效率低下。基于MINRC的方法可响应于处理向前跳跃指令或一致满足的向前分支指令而将目标程序计数器值或MINRC值直接加载到程序计数器中,而非顺序地遍历在当前指令与目标指令之间的每一程序计数器值。这允许在下一指令周期期间处理下一指令而无需具有在当前指令的执行与下一指令之间的额外休眠指令周期。通过允许在下一指令周期处理下一指令,控制流的基于MINRC的方法可相对于不使用MINRC的基于恢复计数器的系统来改善向前跳跃和向前分支指令的性能。然而,使用单一全局MINRC值的一个缺陷是此值可能自己本身并不适合确保用于包含子例程的程序的恰当控制流。如果程序包含子例程,那么有可能全局MINRC值可指向位于当前正执行的子例程的程序空间外部的程序计数器值。举例来说,一或多个线程可能已经在主程序模块中去活,且MINRC可已经被设定到主程序空间中的对应于将由此些线程执行的下一指令的程序计数器值。在在主程序空间(其中所去活线程经调度以再激活)中的程序计数器值下执行指令之前,剩余有效线程可开始执行子例程。如果在所述子例程期间执行向前跳跃或向前分支指令,那么有可能MINRC值可仍指向主程序空间中的程序计数器值,所述程序计数器值是在所述子例程的程序空间的外部。这可致使控制流跳出子例程且返回到在返回指令外部的主程序。一般来说,使用专用调用指令和返回指令以在执行程序期间在主程序与子例程之间或在不同子例程之间转移控制流。这些指令允许在将控制转移到另一程序模块之前保存一个程序模块(即,主程序或子例程)的系统状态且在先前保存了另一程序模块的系统状态的情况下将它还原。如上述实例中所描述,致使控制流跳出子例程且返回到在调用指令或返回指令外部的主程序中可致使系统以不明确的状态操作。因此,虽然单一全局MINRC可能够改善在使用恢复计数器的系统中的向前分支和向前跳跃指令的性能,但全局MINRC独自可不能够充分支持执行程序内的子例程。本发明描述用于在使用基于MINRC的控制流技术的处理系统中执行子例程的技术。用于执行子例程的技术可包含维持一或多个程序模块特定型MINRC。每一程序模块特定型MINRC可对应于将执行的程序的特定程序模块,且指示来自一组一或多个恢复计数器值的最小恢复计数器值,所述一组一或多个恢复计数器值对应于在起始对当前执行的程序模块的执行时为有效的所有线程。通过将独立的MINRC用于主程序和用于子例程中的每一者,处理系统可确保子例程不从子例程分支到主程序中或分支到不在调用或返回指令的执行范围中的另一子例程中。这样,可在使用基于MINRC的方法来控制对向前跳跃指令和向前分支指令的执行的处理系统中确保用于执行子例程的恰当控制流。用于管理发散线程的其它技术可包含使用堆栈来存储同步化令牌和发散令牌及使用软件触发的线程再激活系统来控制对所去活线程的再激活。举例来说,每次发生考虑到发散的分支指令时,便可将同步化令牌推入到指示在最初遇到分支指令时为有效的线程的堆栈上。如果分支指令为发散分支指令,那么系统可将发散令牌推入到指示未采取分支的线程的堆栈和对应于用于未采取分支的线程的下一指令的程序计数器值上。系统可继续执行采取分支的剩余线程直到遇到命令系统从堆栈拿走发散令牌的专用软件旗标和/或软件指令为止。响应于从堆栈拿走发散令牌,系统可着手去活采取分支的线程,且再激活并执行未采取分支的线程。系统可继续执行未采取分支的剩余线程直到遇到命令系统从堆栈拿走同步化令牌的专用软件旗标和/或软件指令为止。响应于从堆栈拿走同步化令牌,系统可着手再激活线程以使得线程状态与在最初遇到发散分支指令时相同。然而,此方法的一个缺陷是需要特殊软件指令以便控制对线程的再激活。此外,由于此方法在每次发生发散分支时将条目放置在堆栈中,所以系统可处置的嵌套发散分支的数目基于堆栈的大小而受限制。嵌套发散分支可指在执行另一发散分支指令的已采取路径或不采取路径期间发生的发散分支。即,嵌套发散分支为在一或多个线程归因于先前发生的发散分支指令而业已去活且此些线程尚未被再激活时发生的发散分支。和上文所描述的用于再激活发散线程的软件触发、基于堆栈的方法形成对比,不必需要专用软件指令以实施本发明的基于恢复计数器的方法。相反,在一些实例中,可在每一指令周期执行恢复检查以确定任何所去活线程是否经调度以针对那个周期而再激活。此可允许隐藏去活和再激活发散线程的方式而使程式设计师和/或编译者不可见且允许程式设计师和/或编译者产生可在经设计以处理发散线程的并行系统与未经设计成处理发散线程的非并行系统两者上执行一组单一可执行代码。另外,基于恢复计数器的方法能够执行最初设计用于非并行系统的代码而无需重新编译和/或重写旧代码以实现发散线程处置。此外,由于基于恢复计数器的方法使用一组有限的恢复计数器(与堆栈相反)来控制对所去活线程的再激活,所以此方法可处置的嵌套发散分支的数目在概念上是无限的且并不基于堆栈的大小而受限制。在一些实例中,应注意,本发明的技术可使用堆栈来存储MINRC值。然而,MINRC值是响应于子例程调用指令和返回指令而不是响应于发散分支本身而被推入到此堆栈上和拿离此堆栈。因此,即使MINRC堆栈可用于实施本发明的技术,此堆栈仍不限制可发生在此系统中的嵌套发散分支的数目。图1是说明可用于实施本发明的子例程执行技术的实例处理系统10的框图。处理系统10经配置成以并行方式执行程序的指令。处理系统10包含控制单元12、处理元件14A-14D(共同地称为“处理元件14”)、指令存储器16、数据存储器18和通信路径20、22、24、26A-26D。通信路径26A-26D可共同地称为“通信路径26”。处理系统10可实施于个人计算机、台式计算机、膝上型计算机、计算机工作站、平板计算装置、视频游戏平台或控制台、无线通信装置(例如(例如)所谓的智能电话、移动电话、蜂窝式电话、卫星电话和/或移动电话手机)、固定电话、因特网电话、例如便携式视频游戏装置或个人数字助理(PDA)的手持式装置、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主计算机、处理和/或显示图形数据的任何其它类型的装置,或执行计算的任何类型的装置在一些实例中,控制单元12和处理元件14可为形成可编程处理器或可编程处理器的部分的硬件组件。举例来说,控制单元12和处理单元14可一同形成图形处理单元(GPU)或GPU的一部分。在一些实例中,处理系统10可为经配置以使用处理元件14来执行程序的多个执行线程的单指令多数据(SIMD)处理系统。在此SIMD系统中,处理元件14可关于不同数据项而一次一同处理单一指令。程序可在与所述程序相关联的所有线程完成执行之后引退。控制单元12经配置以控制处理系统10执行用于存储于指令存储器16中的程序的指令。对于程序的每一指令来说,控制单元12可经由通信路径20从指令存储器16检索指令,且处理所述指令。在一些实例中,控制单元12可通过致使在处理元件14中的一或多者上执行与指令相关联的操作来处理指令。举例来说,由控制单元12检索的指令可为命令处理系统10关于由指令指定的数据项执行算术运算的算术指令,且控制单元12可致使处理元件14中的一或多者对指定的数据项执行算术运算。在另外的实例中,控制单元12可在不致使对处理元件14执行操作的情况下处理指令。控制单元12可通过经由通信路径22提供指令到处理元件14来致使对处理元件14中的一或多者执行操作。所述指令可指定将由处理元件14执行的操作。提供到处理元件14中的一或多者的指令可与从指令存储器16检索的指令相同或不同。在一些实例中,控制单元12可通过以下步骤中的一者或两者来致使对处理元件14的特定子集执行操作:激活应对其执行操作的处理元件14的特定子集;以及去活不应对其执行操作的处理元件14的另一子集。控制单元12可通过经由通信路径22提供相应激活和/或去活信号到处理元件14中的每一者来激活和/或去活处理元件14。在一些实例中,控制单元12可通过提供激活和/或去活信号到处理元件14结合提供指令到处理元件14来激活和/或去活处理元件14。在另外的实例中,控制单元12可在提供指令到处理元件14之前激活和/或去活处理元件14。控制单元12可使用处理元件14来执行程序的多个执行线程。处理元件14中的每一者可经配置以针对多个线程中的相应线程来处理程序的指令。举例来说,控制单元12可将每一执行线程指派给处理元件14中的个别者以供处理。程序的不同执行线程可关于一组数据项中的不同数据项而执行一组相同指令。举例来说,处理元件14A可关于多个数据项中的数据项的第一子集来执行存储于指令存储器16中的程序的第一执行线程,且处理元件14B可关于多个数据项中的数据项的第二子集来执行存储于指令存储器16中的程序的第二执行线程。第一执行线程可不同于第二执行线程,且数据项的第一子集可不同于数据项的第二子集。在一些实例中,控制单元12可激活和去活多个执行线程中的个别线程。当控制单元12去活线程时,控制单元12也可去活和/或停用经指派以执行所述线程的处理元件14A-14D。类似地,当控制单元12激活线程时,控制单元12也可激活经指派以执行所述线程的处理元件14A-14D。控制单元12可激活和去活一或多个线程的各种组合以帮助处置发散分支条件,如稍后在本发明中予以进一步详细阐释。如本文中所使用,有效线程可指被激活且当前经配置成执行程序的指令的线程。无效线程可指被去活且当前经配置成不执行程序的指令的线程。对于在给定处理周期期间执行于处理系统10中的多个线程来说,有效线程中的每一者可经配置以处理由所述多个线程的全局程序计数器寄存器在所述处理周期期间识别的程序的指令。举例来说,控制单元12可激活被指派给有效线程的处理元件14以便将此些处理元件14配置成在处理周期期间处理程序的指令。另一方面,无效线程中地每一者可经配置成在处理周期期间不处理程序的指令。举例来说,控制单元12可去活被指派给无效线程的处理元件14以将此些处理元件14配置成在处理周期期间不处理程序的指令。在一些实例中,指令处理周期可指在程序计数器的连续加载之间的时间间隔。举例来说,指令处理周期可指在当程序计数器加载有与第一指令相关联的第一值时与当程序计数器加载有与第二指令相关联的第二值时之间的时间。第二指令可为由系统紧接在第一指令之后处理的指令。第一值和第二值可为相同或不同值,且第一指令和第二指令可为相同或不同指令。在一些实例中,指令处理周期可指在程序计数器的连续同步加载之间的时间间隔。在一些实例中,程序计数器的同步加载可指由时钟信号触发的加载。在本文中可将指令处理周期替代地称为指令周期或处理周期。在一些实例中,指令处理周期可对应于一或多个时钟周期。有时在处理下一指令之前,控制单元12确定将由处理系统10处理的下一指令。控制单元12确定将处理的下一指令的方式取决于最近执行的指令是否为控制流指令而不同。如果最近执行的指令非为控制流指令,那么控制单元12可确定将由处理系统10处理的下一指令对应于存储于指令存储器16中的下一顺序指令。举例来说,指令存储器16可按有序序列来存储程序的指令,且下一顺序指令可为有序指令序列中的紧接在最近执行的指令之后出现的指令。如果最近执行的指令为控制流指令,那么控制单元12可基于控制流指令中指定的信息来确定将由处理系统10处理的下一指令。举例来说,控制流指令可为无条件控制流指令(例如,无条件分支指令或跳跃指令),在所述情况下,控制单元12可确定将由处理系统10处理的下一指令为由控制流指令识别的目标指令。作为另一实例,控制流指令可为条件性控制流指令(例如,条件性分支指令),在所述情况下,控制单元12可将由控制流指令识别的目标指令或存储于指令存储器16中的下一顺序指令中的一者选择为将从指令存储器16处理的下一指令。如本文中所使用,控制流指令可指指导控制单元12基于不同于无条件选择下一顺序指令的技术来确定将执行的下一指令的指令。控制流指令可指定存储于指令存储器16中的目标指令。举例来说,控制流指令可包含指示对应于存储于指令存储器16中的目标指令的目标程序计数器值的值。作为另一实例,控制流指令可通过指导控制单元12从堆栈存储结构拿走返回地址来指定目标指令。返回地址可对应于存储于指令存储器16中的目标指令。在一些实例中,目标指令可不同于存储于指令存储器16中的下一顺序指令。高级程序代码可包含例如(例如)if、switch、do、for、while、continue、break和goto语句的控制流语句。编译者可将高级控制流语句翻译成低级(例如,机器级)控制流指令。非为控制流指令的指令可在本文中称为顺序指令。顺序指令可指其中控制单元12必要地将下一顺序指令选择为将执行的下一指令的指令。在一些实例中,顺序指令可能不包含识别目标指令的信息。对于控制流指令来说,识别目标指令的信息可为指示存储于指令存储器16中的目标指令的值。在一些实例中,指示目标指令的值可为指示对应于存储于指令存储器16中的目标指令的指令地址的值。在一些情况下,指示指令地址的值可为存储于指令存储器16中的目标指令的地址。在额外情况下,指示指令地址的值可为用于计算目标指令的地址的值。在另外的实例中,指示指令地址的值可为指示对应于目标指令的目标程序计数器值的值。在一些情况下,指示目标程序计数器值的值可为对应于目标指令的目标程序计数器值。在额外情况下,指示目标程序计数器值的值可为用于计算目标程序计数器值的值。在一些实例中,对应于目标指令的目标程序计数器值可等于存储于指令存储器16中的目标指令的地址。控制流指令可为向前控制流指令或向后控制流指令。可将控制流指令是向前型还是向后型的性质称为控制流的方向。向前控制流指令可为其中在存储于指令存储器16中的有序指令序列中目标指令出现在控制流指令之后的控制流指令。向后控制流指令可为其中在存储于指令存储器16中的有序指令序列中目标指令出现在下一顺序指令之前的控制流指令。在有序指令序列中,下一顺序指令可紧接在控制流指令之后出现。控制流指令可为条件性控制流指令或无条件控制流指令。条件性控制流指令包含指定用于跳跃到与控制流指令相关联的目标指令的条件的信息。当处理条件性控制流指令时,如果控制单元12确定满足条件,那么控制单元12可确定将处理的下一指令为目标指令。另一方面,如果控制单元12确定不满足条件,那么控制单元12可确定将处理的下一指令为存储于指令存储器16中的下一顺序指令。无条件控制流指令不包含指定用于跳跃到与控制流指令相关联的目标指令的条件的信息。当处理无条件控制流指令时,控制单元12可无条件确定将处理的下一指令为由控制流指令识别的目标指令。换句话说,此情况下的确定不以无条件控制流指令自身中指定的任何条件为条件。条件性控制流指令的实例包含条件性分支指令。本发明中对通用术语分支指令的使用通常指条件性分支指令,除非分支指令另外标示为无条件分支指令。无条件控制流指令的实例包含跳跃指令、调用指令和返回指令。条件性分支指令可包含关于一或多个数据项值所指定的条件。举例来说,一个类型的条件可为针对执行于处理系统10中的每一有效线程来比较第一数据项值与第二数据项值的比较条件。比较数据项值可包含例如确定第一数据项值是否大于、小于、不大于、等于或不等于第二数据项值。另一类型的条件可为确定执行于处理系统10中的每一有效线程的数据项值等于或不等于零的零检查条件。由于处理元件14中的每一者对不同数据项产生作用,所以评估所述条件的结果对于执行于处理系统10中的每一有效线程来说可不同。如果执行于处理系统10中的所有有效线程满足分支条件或执行于处理系统10中的所有有效线程不满足分支条件,那么发生一致分支条件且分支指令的分支发散据称是一致的。另一方面,如果执行于处理系统10中的有效线程中的至少一者满足分支条件且执行于处理系统10中的有效线程中的至少译者不满足分支条件,那么发生发散分支条件且分支指令的分支发散据称是发散的。执行于处理系统10中的线程可以锁步方式执行相同指令。换句话说,处理元件14中的每一者可在处理周期期间针对所有有效线程执行相同指令。然而,当发生发散分支条件时,满足分支条件的线程可经调度以执行下一些指令,所述下一些指令不同于经调度以由不满足分支条件的线程执行的下一些指令。此可妨碍处理系统10中的线程以锁步方式执行单一指令。为处理发散分支条件,在一些实例中,控制单元12可去活满足或不满足分支条件的线程的一个子集以使得剩余有效线程皆被同步化到相同程序计数器地址。为控制对线程的再激活,控制单元12可使用基于恢复计数器的方法,所述方法涉及:为执行于处理系统中的每一线程分配恢复计数器;根据“最小值地址优先”线程处理次序来处理发散线程;以及在执行每一指令之前执行恢复检查操作。更具体来说,控制单元12可响应于发散分支条件来去活一或多个线程,且针对正去活的每一线程而将相应线程的恢复计数器(例如,寄存器)设定到指示相应线程经调度以再激活所处的程序计数器值的值。在一些实例中,相应线程经调度以再激活所处的程序计数器值可为对应于将由所去活线程执行的下一指令的程序计数器值。如果线程有效,那么所述线程的恢复计数器可设定到默认值,所述默认值可对应于大于程序的地址范围的值(例如,最大寄存器值)。每次程序计数器寄存器加载有新的程序计数器值时,控制单元12可执行恢复检查操作,所述恢复检查操作可再激活其中线程的恢复计数器值等于所述新的程序计数器值的任何线程。在一些实例中,恢复检查操作可比较与每一所去活线程相关联的恢复计数器值与新近加载的程序计数器值以确定所去活线程中的任一者是否经调度以在执行指令之前被再激活。“最小值地址优先”线程处理次序可基于发散分支指令的方向(即,向前或向后)来区分什么线程响应于所述分支指令而被去活。对于发散向后分支指令来说,控制单元12可去活分支条件不被满足所针对的线程,将正去活的每一线程的恢复计数器值设定到与在所述分支指令之后出现的下一顺序指令相关联的值,使程序计数器加载有与由所述分支指令指定的目标指令相关联的值,且着手执行分支条件被满足所针对的那些线程。对于发散向前分支指令来说,控制单元12可去活分支条件被满足所针对的线程,将正去活的每一线程的恢复计数器值设定到与由所述分支指令指定的目标指令相关联的值,使程序计数器加载有与在所述分支指令之后出现的下一顺序指令相关联的值,且着手执行分支条件不被满足所针对的那些线程。这样去活线程确保经调度以处理较低值地址处的指令的发散线程是在经调度以处理较高值地址处的指令的线程之前执行的(即,“最小值地址优先”线程处理次序)。此处理次序可防止控制流在不再激活无效线程且永久地结束程序的情况下针对此些线程而跳过任何恢复点。换句话说,此处理次序确保所有线程将有效且到最后一个程序语句已完成执行的时间为止将已完成处理。根据本发明,控制单元12可基于与程序相关联的第一MINRC来控制对程序的执行,且基于与程序的子例程相关联的第二MINRC来控制对所述子例程的执行。第一MINRC可指定指示多个恢复计数器值中的最小恢复计数器值的值,所述多个恢复计数器值与执行于处理系统10中的多个线程相关联。第二MINRC可指定指示来自多个恢复计数器值的子集的最小恢复计数器值的值,所述子集应于在起始对子例程的执行时为有效的所有线程。在一些情况下,第一MINRC的多个恢复计数器值可对应于在起始对程序的执行时为有效的所有线程。在一些实例中,当程序为顶级程序(例如,主程序)时,在起始程序时所有线程可为有效的。在此些实例中,第一MINRC可为与执行于处理系统10中的所有线程相关联的一组恢复计数器值中的最小恢复计数器值。一般来说,控制单元12可基于多个MINRC来控制对处理系统10的执行。每一MINRC可用于控制完整程序内的特定程序模块。如本文中所使用,程序模块可指主程序模块(即,在起始对程序的执行时程序最初所执行的程序模块)和/或由主程序摸跨哦或另一子例程程序模块调用的子例程程序模块。在一些实例中,控制单元12可位置正执行的当前程序模块的MINRC值,且基于对应于当前程序模块的MINRC值来控制对当前程序模块的执行。MINRC值可指示来自一组一或多个恢复计数器值中的最小恢复计数器值,所述一组一或多个恢复计数器值对应于在起始对当前程序模块的执行时为有效的所有线程。当控制单元12切换到执行不同程序模块时,控制单元12可切换用于控制对处理系统10的执行的MINRC。举例来说,如果控制单元12从执行调用者程序模块切换到执行子例程程序模块,那么控制单元12可将用于控制对处理系统10的执行的MINRC从与调用者程序模块相关联的第一MINRC切换到与子例程模块相关联的第二MINRC。类似地,在完成对子例程程序模块的执行之后,控制单元12可将用于控制对处理系统10的执行的MINRC从与子例程模块相关联的第二MINRC切换到与调用者程序模块相关联的第一MINRC值。调用者程序模块可为主程序模块或子例程程序模块。在一些实例中,基于特定MINRC来控制对程序模块的执行可包含基于那个特定MINRC来控制对包含于所述程序模块中的向前控制流指令的执行。举例来说,响应于执行向前跳跃指令或其中满足分支条件的向前条件性分支指令,控制单元12可基于MINRC值来确定将执行的下一指令。举例来说,控制单元12可比较由分支或跳跃指令指定的目标程序计数器值与MINRC值且选择目标程序计数器值或MINRC值以加载到程序计数器中。在一个实例中,当目标程序计数器值小于或等于MINRC值时,控制单元12可将目标程序计数器值选择为将加载到程序计数器中的值。在此实例中,当目标程序计数器值不小于或等于MINRC值时,控制单元12可将MINRC值选择为将加载到程序计数器中的值。将目标程序计数器值或MINRC值加载到程序计数器中防止处理系统10归因于递增程序计数器贯穿其中不发生执行的值而浪费程序周期。此外,由于MINRC值指示所有无效线程的最小恢复计数器值,所以以上述方式执行向前跳跃和一致向前分支将确保控制流不跳过任何无效线程的恢复点。这样,基于一或多个MINRC值来控制对处理系统10的执行可改善在利用恢复计数器以用于发散线程处置的系统中的向前跳跃指令和向前分支指令的性能。根据本发明的一些方面,控制单元12可经配置以切换MINRC,所述MINRC用于在进入和/或退出子例程之后即刻控制对处理系统的执行。举例来说,响应于执行调用指令,控制单元12可经配置以:保存对应于调用者程序的第一IMNRC的状态;初始化对应于子例程程序的第二MINRC;以及基于对应于子例程程序的第二MINRC来控制对子例程的执行。响应于执行返回指令,处理系统可经配置以:还原对应于调用者程序的第一MINRC的所保存状态;以及基于第一MINRC的所还原状态来恢复控制对主程序的执行。在一些实例中,控制单元12可至少部分地通过将存储于第一MINRC的MINRC寄存器中的值推入到堆栈存储结构上来保存对应于调用者程序的第一MINRC的状态。在此些实例中,控制单元12可至少部分地通过从堆栈存储结构拿取第一MINRC的所保存状态且用对应于第一MINRC的所保存状态的值来改写存储于MINRC寄存器中的值而还原对应于调用者程序的MINRC的所保存状态。当执行调用指令时,控制单元12可至少部分地通过将第二MINRC设定成等于默认值(例如,最大寄存器值或大于程序的地址范围的值)来初始化对应于子例程程序的第二MINRC。当处理系统10中的恢复计数器值中的任一者设定到新值时,控制单元12可更新MINRC值以反映新的最小恢复计数器值。举例来说,控制单元12可响应于去活一或多个线程和/或响应于执行恢复检查操作来更新MINRC值。根据本发明的一些方面,当更新MINRC值时,控制单元12可使用各种技术从用于更新与子例程相关联的MINRC中排除与在起始对子例程的执行时为无效的线程相关联的恢复计数器值。通过在更新MINRC时排除此些恢复计数器值而不予考虑,本发明的技术可确保子例程特定型MINRC被更新到在与子例程相关联的程序空间内的值。在一些实例中,控制单元12可在MINRC更新期间从影响所得MINRC值中排除大于或等于子例程的进入点的恢复计数器值。在另外的实例中,控制单元12可维持一组旗标,其中所述一组旗标中的每一旗标指示在起始对子例程的执行时相应线程是否有效。在此些实例中,控制单元12可在MINRC更新期间从影响所得MINRC值中排除在起始对子例程的执行时为无效的恢复计数器值。控制单元12经由通信路径20通信地耦合到指令存储器16,经由通信路径22通信地耦合到处理元件14,且经由通信路径24通信地耦合到数据存储器18。控制单元12可使用通信路径20来发送读指令到指令存储器16。读指令可指定在指令存储器16中的指令地址,应从所述指令地址检索指令。控制单元12可响应于发送读指令而从指令存储器16接收一或多个程序指令。控制单元12可使用通信路径22来提供指令到处理元件14,且在一些实例中从处理元件14接收数据(例如,用于评估分支条件的比较指令的结果)。在一些实例中,控制单元12可使用通信路径24来直接从数据存储器18检索数据项值(例如,以评估分支条件)。虽然图1将处理系统10说明为包含通信路径24,但在其它实例中,处理系统10可不包含通信路径24。处理元件14中的每一者可经配置以执行操作从而帮助处理系统10处理存储于指令存储器16中的程序的指令。在一些实例中,处理元件14中的每一者可经配置以执行一组相同操作。举例来说,处理元件14中的每一者可实施相同指令集架构(ISA)。在额外实例中,处理元件14中的每一者可为算术逻辑单元(ALU)。在另外的实例中,处理系统10可为向量处理器(例如,图形处理单元(GPU)向量处理器),且处理元件14中的每一者可为向量处理器内的处理元件。在额外实例中,处理系统10可为SIMD执行单元,且处理元件14中的每一者可为SIMD执行单元内的SIMD处理元件。由处理元件14执行的操作可包含算术运算、逻辑运算、比较运算等。算术运算可包含例如(例如)加法运算、减法运算、乘法运算、除法运算等的运算。算术运算也可包含例如整数算术运算和/或浮点算术运算。逻辑运算可包含例如(例如)逐位AND运算、逐位OR运算、逐位XOR运算等的运算。比较运算可包含例如(例如)大于运算、小于运算、等于零运算、不等于零运算等的运算。大于和小于运算可确定第一数据项大于还是小于第二数据项。等于零和不等于零运算可确定数据项等于零还是不等于零。用于运算的操作数可存储于数据存储器18中含有的寄存器中。处理元件14中的每一者可经配置以响应于经由通信路径22从控制单元12接收指令来执行操作。在一些实例中,处理元件14中的每一者可经配置以独立于其它处理元件14而被激活和/或去活。在此些实例中,处理元件14中的每一者可经配置以在相应处理元件14A-14D被激活时响应于从控制单元12接收指令来执行操作,且在相应处理元件14A-14D被去活(即,未激活)时响应于从控制单元12接收指令不执行操作。处理元件14A-14D中的每一者可经由相应通信路径26A-26D通信地耦合到数据存储器18。处理元件14可经配置以经由通信路径26从数据存储器18检索数据及将数据存储到数据存储器18。在一些实例中,从数据存储器18检索的数据可为用于由处理单元14执行的运算的操作数。在一些实例中,存储到数据存储器18的数据可为由处理元件14执行的运算的结果。指令存储器16经配置以存储供由处理系统10执行的程序。所述程序可存储为有序指令序列。在一些实例中,可由唯一指令地址来寻址每一指令。在此些实例中,指令序列中的较迟指令的指令地址大于指令序列中的较早指令的指令地址。在一些实例中,程序指令可为机器级指令。即,在此些实例中,指令可呈对应于处理系统10的ISA的格式。指令存储器16经配置以经由通信路径20从控制单元12接收读指令。读指令可指定指令地址,应从所述指令地址检索指令。响应于接收读指令,指令存储器16可经由通信路径20提供对应于读指令中指定的指令地址的指令到控制单元12。指令存储器16可为任何类型的存储器、高速缓冲存储器或其组合。当指令存储器16为高速缓冲存储器时,指令存储器16可高速缓冲存储与存储于在处理系统10外部的程序存储器中的程序相关联的指令。虽然将指令存储器16说明为在处理系统10内,但在其它实例中,指令存储器16可在处理系统10外部。数据存储器18经配置以存储由处理元件14使用的数据项。在一些实例中,数据存储器18可包括多个寄存器,每一寄存器经配置以存储由处理系统10操作的多个数据项内的相应数据项。数据存储器18可耦合到一或多个通信路径(未图示),所述一或多个通信路径经配置以在数据存储器18中的寄存器与存储器或高速缓冲存储器(未图示)之间转移数据。通信路径20、22、24、26可经配置以在处理系统10中的不同组件之间提供信号、指令和/或数据的传达,如图1中所说明。举例来说,通信路径20、22、24、26可各自实施为在图1中所示的不同组件之间载运电信号的一或多个总线(例如,芯片上总线)和/或电互连件(例如,导线和/或电路迹线)。虽然图1说明用于存储由处理元件14使用的数据的单一数据存储器18,但在其它实例中,处理系统10可包含用于处理元件14中的每一者的独立、专用数据存储器。出于示范目的,图1说明具有四个处理元件14的处理系统10。然而,在其它实例中,处理系统10可在相同或不同配置中具有相同或不同数目个处理元件1...
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1