对应于多个微操作的复杂程序指令的译码的制作方法
【技术领域】
[0001]本技术涉及数据处理领域。更具体地,本技术涉及在支持并行处理线程的数据处理装置中对程序指令进行译码以生成微操作。
【背景技术】
[0002]一些指令集包括一些与将由处理电路执行的多个微操作相对应的复杂程序指令,每个微操作表示与程序指令相关的操作的一部分。因此,指令译码器可对程序指令进行译码以生成将由处理电路执行的微操作。
[0003]一些处理装置支持多个并行处理线程。分离的获取单元可被提供用于各自线程以触发获取微操作到处理电路中。共享指令译码器可被提供用于生成各自的获取单元所需的微操作。典型指令译码器将复杂程序指令作为单一的实体进行译码,从而使得:响应于来自获取单元中的一个的、对复杂程序指令进行译码的请求,指令译码器然后将在连续周期中生成与该复杂程序指令相对应的所有微操作。但是,这在共享指令译码器在多个对应于处理线程的获取单元之间共享的系统中可能有问题。如果获取单元中的一个在获取对应于复杂程序指令的微操作时中途停滞,则不能接受对同一复杂程序指令的进一步的微操作,则共享译码器也将停滞,因为其要保证完成所有对复杂程序指令的微操作。这就阻止了其他获取单元从指令译码器接收经译码的微操作,直到第一获取单元的停滞被解决,即使那些其他获取单元本可以接受微操作。这导致处理性能降低。本技术需求解决这一问题。
【发明内容】
[0004]从一个方面看,本发明提供了一种数据处理装置,包括:
[0005]处理电路,该处理电路被配置为并行处理多个处理线程;
[0006]共享指令译码器,该共享指令译码器被配置为对程序指令进行译码以生成要由处理电路处理的微操作,程序指令包括与多个微操作相对应的至少一个复杂程序指令;以及
[0007]多个获取单元,该多个获取单元被配置为获取由共享指令译码器生成的微操作以用于由处理电路进行处理,每个获取单元与多个线程中的至少一个相关联;
[0008]其中共享指令译码器被配置为:响应于由多个获取单元中的一个触发的译码请求,生成每个微操作;以及
[0009]共享指令译码器被配置为:响应于分离的译码请求,个体地生成复杂程序指令的多个微操作,每个分离的译码请求标识了复杂程序指令的哪个微操作将由共享指令译码器响应于译码请求而生成。
[0010]本技术的指令译码器响应于由获取单元触发的分离的译码请求,个体地生成复杂程序指令的微操作。每个译码请求可标识将响应于译码请求而生成的复杂程序指令的特定微操作。因此,不是如在先前的系统中那样响应于单个请求而生成所有微操作,在依次的每个译码请求之后,指令译码器可译码复杂程序指令中所请求的微操作,然后在译码另一微操作之前,等待进一步的译码请求。通过要求每个微操作被个体地请求,这允许共享指令译码器在为复杂程序指令生成微操作的中途切换正被译码的指令。因此,即使一个获取单元在只生成了复杂程序指令所需的微操作的一部分之后停滞,译码器也能够切换到生成由另一获取单元请求的微操作,然后当请求这些微操作的获取单元去停滞时,返回到生成第一程序指令的剩余微操作。这就减少了指令译码器不活动的周期数量,因此总体上提升了数据处理装置的处理性能。
[0011]在一些示例中,将由处理电路进行处理的每个线程可具有它自己的用于获取将为该线程执行的微操作的获取单元。在其他示例中,获取单元中的至少一个可在多个线程之间共享。
[0012]在一些示例中,每个获取单元可直接向用于处理的处理电路发送所获取的微操作。另一方面,微操作队列可被提供,每个队列对应于获取单元中的一个,因此由获取单元获取的微操作在相应的队列中被排成队列。排成队列的微操作然后可被发出,用于由处理电路进行处理。如果提供了微操作队列,那么当队列中有可用空间时,获取单元例如可请求下一个微操作。
[0013]获取单元可以不同方式触发译码请求。在一些示例中,由指令译码器生成的微操作可被直接传递给相应的获取单元。在这种情况下,获取单元可生成标识了将被译码和获取以用于由处理电路进行处理的选定的微操作的译码请求。响应于来自获取单元的译码请求,指令译码器可生成选定的微操作并将其发送给获取单元。
[0014]在其他示例中,获取单元可间接触发译码请求并且不必自己生成译码请求。例如,微操作缓存可被提供用于存储由共享指令译码器生成的微操作。通常,同一微操作在同一线程或不同线程中可被多次需求,因此通过缓存由译码器生成的微操作能够提升能源效率,因为这避免了译码器重复生成同一微操作的需求。如果提供了微操作缓存,那么获取电路可向微操作缓存提供获取请求,以请求从缓存获取选定的微操作,如果选定的微操作不在缓存中,则微操作缓存可向指令译码器触发译码请求。如果选定的微操作已经在缓存中,则不必触发译码请求。由微操作缓存触发的译码请求可直接传递给指令译码器,或间接通过存储了将被译码的程序指令的另一电路元件(例如,更高级别缓存)。
[0015]微操作缓存每个处理周期支持的请求数量比共享指令译码器每个处理周期支持的译码请求的数量大。这意味着缓存能够向获取单元提供明显指令获取带宽,该明显指令获取带宽比共享指令译码器能够支持的带宽大。这尤其适用于当存在于单个共享指令译码器相对应的多个获取单元时。在共享指令译码器每个处理周期能够支持两个或更多译码请求从而多个微操作能够在同一周期中生成的实施例中,该两个或更多译码请求可为对应于完全不同的程序指令的微操作,或同一程序指令的不同微操作。但是,即使在多个微操作在同一周期中生成的实施例中,每个微操作仍然可响应于分离的译码请求而生成。
[0016]共享指令译码器不但生成微操作自身,还可生成相应的指示所生成的微操作是否是相应的指令的最后一个微操作的控制标志。获取单元可维护用于标识下一个将被获取的微操作的程序计数器和微程序计数器,程序计数器指示对应于下一个将被获取的微操作的程序指令,且微程序计数器指示该指令的哪个微操作是下一个将被获取的微操作。当获取单元接收到所获取的微操作时,控制标志允许获取单元确定是否递增微程序计数器或程序计数器。如果所获取的微操作的控制标志指示所获取的微操作不是最后一个微操作,则递增微程序计数器以指示同一指令的下一个微操作应当在接下来被获取。另一方面,如果控制标志指示所获取的微操作是最后一个微操作,则递增程序计数器以指示下一个程序指令。当递增程序计数器时,微程序计数器也被重置以指示将为下一个程序指令获取的第一个微操作。通过在微操作被译码时采用指令译码器生成控制标志,获取单元不必记录多少个微操作对应于每个程序指令,或是否存在将为同一指令接收的任何进一步的微操作。这简化了获取单元的配置。
[0017]该装置可具有存储了先前由共享指令译码器译码的一个或多个程序指令的指令缓冲器。由于复杂程序指令的每个微操作响应于分离的请求而被个体地译码,因此同一程序指令可能被多个连续的处理周期所需要以使译码器为该指令生成所有微操作。通过在指令缓冲器中存储一个或多个近期被译码的程序指令,能够提升性能和能源效率,因为这降低了同一指令需要被多次从更高级别指令数据存储设备(例如,指令缓存或存储器)获取的可能性。当接收针对指定程序指令的译码请求时,译码器可检查该指令是否在指令缓冲器中,并且如果是,则从指令缓冲器获取指定程序指令。如果该指定程序指令不在指令缓冲器中,那么译码器可从指令缓存或存储器获取该指定程序指令。通常,缓冲器可存储一个或多个最近被译码的程序指令,但是缓冲器可替换为具有更复杂的用于确定哪个程序指令应被缓冲及哪个应被驱逐出缓冲器的驱逐方案。此外,虽然缓冲器可以存储多于一个的指令,但在很多情况下,使用只具有单个程序指令的容量的缓冲器可获得显著的性能提升,且这会比更大的缓冲器在硬件中更有效的实现。在缓冲器只存储一个指令且最近被译码的指令置于缓冲器中、然后当下一个指令被译码时被下一个指令覆盖的实施例中,指令译码器能够通过检查当前译码请求的程序计数器是否与先前的译码请求的程序计数器相同,来确定所需指令是否在缓冲器中。另一方面,如果译码器每个周期支持多个译码请求,则提供能够保存多个指令的缓存是适用的,在这种情况下,需要将程序计数器与和每个指令一同存储在缓冲器中的地址标签进行匹配。
[0018]处理电路可以不同方式并行处理线程。在一些情况下,处理电路可具有多个处理单元,每个处理单元能够处理线程中的至少一个。另一方面,其他实施例可采用一组公用硬件执行线程的时分复用,例如,当处理电路执行线程时,每个线程具有已分配的时隙。因此,对于处理电路而言,不必在任何时候实际并行执行多个操作——通过时分复用,线程同时处于活动状态但一次处理一个是足够的。
[0019]在一些情况下,对于线程中的至少一个,处理电路可并行同步执行同一区块的微操作的多个实例,对每个实例用不同操作数。这种方法有时被称为同时多线程(SIMT)。该方法尤其适用于处理同一组微操作需要在多组数据值上执行的情况,这种情况尤其常见于例如图形处理中。为支持该方法,处理电路可具有一组用于执行微操作的每个实例的并行算术单元,算术单元由公用控制单元采用共享程序计数器和微程序计数器来控制。在一些情况下,可存在多个并行SMT组,每个SMT组用不同操作数值并行处理给定线程