用于处理器的显式指令调度器状态信息的制作方法

文档序号:13950610阅读:175来源:国知局
用于处理器的显式指令调度器状态信息的制作方法

背景技术
:指令集架构(isa)和处理器的设计者进行功耗和性能的权衡。例如,如果设计者选择具有交付更高性能的指令的isa,则处理器的功耗可能更高。备选地,如果设计者选择具有消耗较低功率的指令的isa,则性能可能更低。功耗可以与由指令在执行期间使用的处理器的硬件资源量相关,诸如算术逻辑单元(alu)、高速缓存线或寄存器。对大量这样的硬件资源的使用可以以较高的功耗为代价交付较高的性能。备选地,对少量这样的硬件资源的使用可以以较低的性能为代价产生较低的功耗。编译器用于将高级代码编译成与isa和处理器架构兼容的指令。编译后的指令在它们准备好被发出时由指令调度器发出。技术实现要素:在一个示例中,本公开涉及使用编译器显式地生成调度器状态信息并且在处理器内使用调度器状态信息。一方面,提供了一种方法,包括提取指令组,其中指令组被配置为由处理器原子地执行。该方法还可以包括,在对指令组中的至少一个指令进行解码之前,至少基于与指令组中的至少一个指令相关联的预先计算的就绪状态信息来调度指令组中的至少一个指令用于由处理器执行。另一方面,提供了一种处理器,包括指令调度器,该指令调度器被配置为:(1)处理指令组中的至少一个指令的预先计算的就绪状态信息,其中该指令组被配置为由处理器原子地执行,以及(2)在对指令组中的至少一个指令进行提取或解码中的至少一项之前,至少基于与指令组中的至少一个指令相关联的预先计算的就绪状态信息,调度指令组中的至少一个指令用于由处理器执行。又一方面,提供了一种方法,包括使用编译器来处理高级语言的指令以生成至少一个指令组,其中指令组被配置为由处理器原子地执行,其中处理还包括生成与至少一个指令组的子集相关联的就绪状态信息,使得在不对指令的子集进行提取或解码中的至少一项的情况下,指令的子集能够被调度用于由处理器执行。该方法还可以包括存储就绪状态信息用于由处理器进行后续处理。提供本
发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的概念选集。本
发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。附图说明本公开以示例的方式被示出,并且不被附图所限制,在附图中相同的附图标记表示相似的元素。附图中的元素为了简单和清楚而被示出,并且不一定按比例绘制。图1是根据一个示例的代表性处理器的框图;图2是根据一个示例的方法的流程图;图3是根据一个示例的方法的流程图;以及图4是根据一个示例的方法的流程图。具体实施方式本公开中描述的示例涉及指令集架构(isa)和处理器,其可以具有被组织在组中的指令,例如指令块,其被原子地提取、执行和提交。因此,处理器可以集中地提取属于单个组的指令,将它们映射到处理器内的执行资源,执行指令,并且以原子方式提交它们的结果。处理器既可以提交所有指令的结果,也可以取消整个组的执行。组内的指令可以按照数据流顺序执行。另外,处理器可以允许组内的指令彼此直接通信。产生结果的指令可以取代于将结果写入寄存器文件而将该结果传送给消耗结果的另一指令。例如,添加存储在寄存器r1和r2中的值的指令可以表示为如下面的表1所示:i[0]readr1t[2r];i[1]readr2t[2l];i[2]addt[3l].以这种方式,源操作数不利用指令来指定;相反,它们由瞄准add指令的指令来指定。编译器可以在指令的编译期间显式地编码控制和数据依赖关系,并且由此使得处理器无需在运行时重新发现这些依赖关系。这可以有利地导致在这些指令的执行期间降低的处理器负载和节能。例如,编译器可以使用预测来将所有的控制依赖关系转换成数据流依赖关系。使用这些技术,可以降低对耗电的寄存器文件的访问次数。下面的表2显示了这样的指令的通用指令格式的示例:opcodeprbidxoptarget1target2每个指令可以具有合适的大小,诸如32位、64位或另一大小。在表2所示的示例中,每个指令可以包括操作码(opcode)字段、pr(预测)字段、bid(广播标识符)字段、xop(扩展的opcode)字段、目标1(target1)字段和目标2(target2)字段。opcode字段可以为指令或指令组指定唯一的操作码,诸如加、读取、写入或乘。pr(预测)字段可以指定与指令相关联的任何预测。例如,可以使用如下2位pr字段:00-未被预测,01-保留,10-基于假被预测,11-基于真被预测。因此,例如,如果只有在比较结果为真的情况下指令才执行,则可以基于执行比较的另一指令的结果来预测该指令。bid(广播标识符)字段可以支持将操作数发送到组中的任何数目的消费者指令。2位bid字段可以用来对指令在其上接收其操作数之一的广播通道进行编码。xop(扩展的opcode)字段可以支持扩展操作码的类型。target1和target2字段可以允许多达两个目标指令被编码。目标字段可以指定生产者指令的结果的消费者指令,从而允许指令之间的直接通信。每个指令组可以具有与该指令组相关联的特定信息,诸如与指令组相关的控制信息和/或元信息。该信息可以在将诸如c或c++等较高级代码编译为用于在与本公开一致的处理器上执行的指令期间由编译器生成。在编译指令组并且在运行时期间检查指令的性质时,编译器可以提取该信息中的一些信息。附加地或者备选地,与指令组相关联的信息可以是关于该指令组的元信息。在一个示例中,可以使用特殊指令或如下指令来向处理器提供这样的信息,该指令提供与可以具有与指令组相关联的相关信息的寄存器或其他存储器相关的目标编码。在特殊指令的情况下,这些指令的操作码字段可以用于传送与指令组有关的信息。在另一示例中,可以将这样的信息作为处理器状态字(psw)的一部分被维持。在一个示例中,该信息可以有利地帮助处理器更高效地执行指令组。可以使用组头部、使用特殊指令、使用存储器引用位置、使用处理器状态字(psw)或使用其组合来向处理器提供的信息的类型的一个示例在下面的表3中:尽管表3中示出的示例性组头部包括很多字段,但是这仅是示例性的。在一个实施例中,编译器可以选择用于包括在组头部中的信息或者用于特殊指令的信息,特殊指令可以基于指令的性质和/或基于处理要求的性质(诸如高性能或低功率)来向处理器提供这样的信息。这可以有利地允许更好地平衡在性能和功耗之间的折衷。对于某些类型的处理应用,诸如使用大量内核的高性能计算,大量的信息可能是理想选项。备选地,对于其他类型的处理应用,诸如在物联网、移动设备、可穿戴设备或其他嵌入式计算类型的应用中使用的嵌入式处理器,较少的信息可能是理想的选项。在另一方面,可以取决于指令组中的指令的性质来定制经由组头部或特殊指令传送的信息的范围。例如,如果指令组包括被执行若干次的循环,则可能需要更广泛的信息来封装与指令组相对应的控制信息。附加控制信息可以允许处理器更高效地执行循环,从而提高性能。备选地,如果存在将很少被执行的指令组,则相对较少的信息就足够了。在另一示例中,如果指令组包括预测的控制循环,则可能需要更多的信息。类似地,如果指令组具有大量的指令级并行性,则可能需要更多信息作为经由特殊指令的组头部的一部分。组头部中的附加控制信息或特殊指令可以用来有效地利用指令组中的指令级并行性。在另一示例中,如果指令组包括若干分支指令,则可能需要更多的信息。有关分支指令的附加控制信息将使代码执行效率更高,因为它将导致更少的管线冲刷。就绪状态(readystate)字段可以用于存储预先计算的就绪状态信息,例如与指令组中的指令相对应的预先计算的就绪位或有效位(例如,用于被指令当作目标的操作数)。这样,编译器可以用来显式地向指令调度器提供指令的状态信息。这可以有利地促进数据流指令调度和指令的无序执行。例如,当对应于该指令的所有就绪位被设置为逻辑高(或逻辑低)时,指令可以准备好由指令调度器发出。因此,如果指令没有操作数或其他待处理的输入,即使在其被提取或解码之前,指令也可以被调度或发出。当诸如add(加)指令的指令的两个操作数已经被计算,add指令可以准备好被调度或被发出。例如,针对add指令的左操作数可以存在一个有效位,而针对add指令的右操作数可以存在另一有效位。在另一示例中,当谓词已经被评估时,预测的指令可以就绪。因此,例如,如果预测的指令基于真值被预测,则一旦真值被评估,则该指令就可以准备好被发出。在简化的示例中,指令在被发出之前可以正在等待三个输入:真或假谓词、左操作数和右操作数。其他指令可以没有任何它们需要等待的输入,诸如来自某些寄存器的操作数的addi(立即添加)或read(读取)值。另外,某些结果可能需要被传送给若干指令,并且在这种情况下,需要结果的指令可以监测广播通道。例如,某些预测的指令(诸如分支指令)可以仅在其谓词为真或假时才可以执行。两个预测分支指令(例如,bro.t和bro.f)都可以监测某个通道上的广播。将收到匹配谓词的分支可以发出。作为另一示例,加载指令也可以监测通道,并且当操作数在该通道上可用时,它们可以发出。在广播id(bid)上等待的广播指令可以就绪,当它们收到来自以它们为目标的指令或来自组头部的就绪位时。加载和存储指令可以由处理器的指令调度器按数据流顺序发出。当加载地址或存储地址/数据被确定时,加载和/或存储指令可以在加载/存储队列中被排队,直到已经观察到先前的存储器操作和/或指令组提交。加载/存储操作可以具有对应的加载/存储id(lsid)以确保它们按正确的顺序执行。例如,考虑具有lsid#2的加载指令和具有lsid#1的存储指令。假设加载指令首先到达加载/存储队列,则加载/存储队列将对加载指令排队,等待具有较低标识符号码lsid#1的存储指令的到达。一旦存储指令的值被计算,它就去往加载/存储队列。现在,加载/存储队列已经观察到在加载之前可能已经发生的存储,加载指令可以执行。加载/存储队列还可以准备加载指令的目标指令操作数,并且将加载结果写回到处理器的操作数缓冲器和/或处理器的寄存器文件。在一个示例中,预先计算的就绪状态信息不仅可以被包括在组头部中,诸如在表3中的就绪状态字段中,而且也可以被包括作为指令组中的指令的一部分。在另一示例中,预先计算的就绪状态信息可以仅被包括在组头部中,诸如在表3中的就绪状态字段中,并且不被包括作为指令组中的指令的一部分。因此,例如,组头部可以仅包括谓词状态就绪信息和操作数状态准备就绪信息;但是指令本身可以不具有这些信息。在另一示例中,用于各种指令组的组头部可以包括或不包括预先计算的就绪状态信息。组头部中的字段可以指示该特定组头部是否具有任何预先计算的就绪状态信息。与表3中所示的字段相对应的功能可以被组合或进一步分开。因此,例如,在一个示例中,就绪状态字段可以在单独的头部中。它也可以在存储器中通过组头部或另一结构中的地址或描述符字段来索引。类似地,特殊指令可以提供与表3中的任何一个字段相关的信息,或者它可以组合来自这些字段的信息。例如,尽管表3的示例性组头部包括单独的id字段和size字段,但是这两个字段可以被组合成单个字段。类似地,单个特殊指令在被解码时可以提供关于指令组的大小的信息和id字段中的信息。在不脱离本公开的范围的情况下,可以对组头部结构和格式进行其他改变。例如,附加字段可以被包括,附加字段包括与指令组的特性相关的信息。基于指令组的执行的频率,可以包括某些字段。被包括在组头部结构中的字段、或者经由较早讨论的特殊指令或其他机制提供的信息可以是特定处理器或处理器系列的公共可用标准指令集架构(isa)的一部分。这些字段的子集可以是对isa的专有扩展。该字段中的某些位值可以是处理器的标准isa的一部分,但是该字段中的某些其他位值可以提供专有功能。该示例性字段可以允许isa设计者向isa添加专有扩展而不完全公开与专有扩展相关联的性质和功能。因此,在这种情况下,由isa设计人员分发的编译器工具将支持该字段中的专有位值、完全单独的专有字段、或特殊指令。这样的字段可以用于某些处理器设计专有的硬件加速器。因此,程序可以包括组头部字段或不可识别的专用指令;但是程序还可以包括用于解密字段或解码指令的秘诀。合适的编译器可以处理被配置为由处理器原子地执行的指令组,以生成关于该指令组的信息,包括关于指令组的元信息和控制信息。作为该过程的一部分,编译器也可以计算与本公开一致地使用的就绪状态信息。一些程序可以仅针对一组isa被编译,例如与物联网的处理器、移动设备、可穿戴设备或其他嵌入式计算环境一起使用的isa。编译器可以使用诸如静态代码分析或代码剖析等技术来生成与指令组相关的信息。编译器可以考虑诸如指令组的特性和指令组的执行频率等因素。指令组的相关特性包括但不限于(1)指令级并行性、(2)循环的数目、(3)预测的控制指令的数目、以及(4)分支预测的数目。下面的表4中示出了简化的320位组头部的一个示例:如关于表3所讨论的,组头部的第一部分(128位)包括字段,诸如id、大小、xflags、出口类型、存储掩码和写掩码。在该示例中,组头部的第二部分(192位)对应于指令组中的32个指令中的每个指令的预先计算的就绪状态位值。这样,如前面关于表3所讨论的,与操作数和谓词的状态相关的信息可以被包括在组头部中。上面的表4仅是示例性的。与指令的就绪状态相关的信息可以以其他方式被封装。另外,可以使用预先计算的就绪状态的较小字段。作为该字段的一部分,可以传送的唯一信息是在组头部之后有多少指令准备好被调度用于执行。在另一示例中,作为该字段的一部分,唯一的预先计算的就绪状态信息可以指示仅奇数指令还是仅偶数指令准备好被调度用于执行。在另一示例中,一组32个指令的就绪状态位(例如,6组32位,例如,表4的192位)可以被存储,如下面的表5所示:图1是根据本公开的一个示例的代表性处理器100的一部分的框图。处理器100可以包括前端控制单元102、指令高速缓存104、分支预测器106、指令解码器108、指令窗口110、左操作数缓冲器112、右操作数缓冲器114、算术逻辑单元(alu)116、算术逻辑单元(alu)118、寄存器120和加载/存储队列122。在一个示例中,处理器100的部件中的每个部件可以经由数据和/或控制总线互连,如连接各种部件的具有箭头的线所示。在一些情况下,总线可以仅携带数据和指令;在一些情况下,总线可以仅携带数据(例如,操作数);在其他情况下,总线可以仅携带控制信号,例如,前端控制单元102可以经由仅携带控制信号的总线与其他控制网络通信。在一个示例中,前端控制单元102可以包括用于处理包括指令提取和解码的处理的前端的组合逻辑和状态机。例如,前端控制单元102可以从指令高速缓存104提取指令,用于由指令解码器108处理。前端控制单元102可以经由控制网络与处理器100的其他部分交换控制信息。处理器100可以包括单个内核或多个内核。在多核处理器的情况下,可以存在图1所示的元素中的至少一些元素的多个实例。前端控制单元102可以协调和管理处理器的各种内核和其他部分的控制。因此,在该示例中,指令组可以在多个内核上同时执行,并且前端控制单元102可以经由控制网络与其他内核交换控制信息以根据需要确保针对各指令组的执行的同步。前端控制单元102可以在每个时钟周期提取和解码单个指令或多个指令。虽然图1示出了以某种方式布置的处理器100的一定数目的部件,但是可以存在不同地布置的更多或更少数目的部件。例如,代替指令高速缓存104,更简单的指令存储器或便笺式存储器可以被用来存储指令。在一个示例中,可以在由编译器在编译期间确定指令组中的指令的就绪状态,并且可以将与指令的就绪状态相关的任何位(例如,就绪位和有效位)存储在诸如表3和表4中所示的组头部的就绪状态字段中、或者在诸如表5所示的表格中的另一位置。预先计算的就绪状态信息还可以由编译器使用其他机制传送给处理器100,诸如使用特殊指令、使用存储器引用位置、使用处理器状态字(psw)、或使用这些的组合。以这种方式,一旦前端控制单元102提取指令组,包括指令组的组头部,则即使在解码之前处理器100也可以开始调度在组头部的预先计算的就绪状态字段中指示为就绪的某些指令用于执行。如较早所讨论的,处理器100可以在甚至不提取准备好发出的指令的情况下调度这样的指令。作为结果,准备好发出的指令的调度可以有利地仅在一个或两个周期中发生(例如,紧跟在经由处理组头部或者以其他方式对预先计算的就绪状态信息的处理之后),而不是必须顺序提取指令并且稍后发现(例如,3至30个周期之后)这些指令中的一些指令准备好发出。另外,随着预先计算的就绪状态信息在提取周期开始时可用,以另一指令操作数为目标的任何指令都可以立即执行。这可以有利地减轻处理器100管理尚未解码的目标指令(例如,指令#10以指令#40的操作数为目标,但是指令#40尚未被解码)的唤醒状态数据写入的责任。预先计算的就绪状态信息有助于在不解码的情况下不仅调度立即可发出的指令(0输入,无预测),而且还调度尚不可发出但是变为可发出的指令。例如,指令#1(movi)是可立即发出的指令。指令#1以指令#20为目标,即addi指令,其预先计算的就绪状态指示它已经准备好发出,除了它的(第一个也是唯一的)左操作数(即操作数0)还没有就绪。基于预先计算的就绪状态,movi指令立刻发出;它然后被解码和执行。在指令#1(movi)的解码期间,处理器100发现movi指令以指令#20(addi)的左操作数为目标。在发出和解码指令#1(movi)之后,指令#20(addi)的就绪状态(例如,未就绪(等待操作数0))被更新,并且作为结果,指令#20(addi)变为准备好发出。在下一周期中,指令#20(addi)发出并且然后被解码。另外,在另一示例中,预先计算的就绪状态甚至可以包括与指令的目标字段相关的附加信息。因此,例如,预先计算的就绪状态可以包括对应于指令#20(addi)的左操作数的值。在这种情况下,可以发出指令#1(movi)而不提取它,并且然后可以发出指令#20(addi)而不提取它。换言之,在提取指令#1(movi)之后,指令#20(addi)的就绪状态(例如,未就绪(等待操作数0))被更新,并且作为结果,指令#20(addi)变为准备好发出。这些示例说明,利用预先计算的就绪状态,处理器100可以有利地实现用于初始就绪指令和“初始未就绪”指令的数据流指令调度,而不提取和/或解码这些指令直到它们发出。准备好调度指令可以被直接提供给指令窗口110和指令调度器130。在另一示例中,前端控制单元102可以在发出期间直接从高速缓存(例如,l-1高速缓存)提取准备好发出指令。在这个示例中,准备好发出指令可以根本不被存储在指令窗口110中;相反,它们可以在发出期间从l-1高速缓存中被提取。指令调度器130可以在指令解码器108不提取或解码指令的情况下调度这些指令用于执行而。这可以有利地通过去除针对大的已解码指令缓冲器或高速缓存器的需要而导致处理器的硬件面积的节省。以这种方式,处理器100可以调度和发出,然后从指令高速缓存104提取指令,对其进行解码而不必缓冲已解码指令,执行它。然而,预先计算的就绪状态信息可能需要存储在高速缓存中,诸如就绪状态高速缓存。另外,使就绪状态信息被预先计算并且存储在例如就绪状态字段中,处理器100可以有利地无序地发出指令;只要指令准备好被调度,甚至在提取或解码之前,它可以被调度用于由指令调度器130执行。在一个示例中,每个周期,指令调度器130可以选择要调度的下一指令。如较早所述,在编译器生成关于指令组的信息(诸如就绪状态字段信息)的情况下,处理器100可以在指令组的执行期间在消耗硬件资源方面更高效。指令调度器130可以处理组头部的就绪状态字段或另一就绪状态信息源,并且在甚至提取和/或解码指令之前确定指令组中的哪个指令准备好发出。该过程可以包括指令调度器130处理就绪状态信息,诸如与每个指令相关联的位向量和/或与指令组相关联的组头部。继续参考图1,指令调度器130可以为准备好发出的指令提供指令编号(iid),并且该编号可以与该指令所涉及的指令组的地址组合,以生成在指令高速缓存中的指令地址。在从指令高速缓存104获得准备好发出指令之后,指令调度器108可以将其提供给指令解码器108。一旦指令被发出,可以从左操作数缓冲器112和/或右操作数缓冲器114(根据需要)获得任何操作数。取决于指令的操作码,可以使用alu116和/或alu118对操作数执行操作。alu的输出可以被写回到操作数缓冲器中或一个或多个寄存器120中。按数据流顺序发出的存储操作可以在加载/存储队列122中被排队,直到指令组提交。当指令组提交时,加载/存储队列122可以将提交的组的存储写入存储器系统。分支预测器106可以处理与来自组头部、特殊指令、或存储器引用位置的分支出口类型相关的信息,并且在进行分支预测时将该信息作为因素。继续参考图1,前端控制单元102还可以包括组头部控制单元132。组头部控制单元132可以处理指令组的控制信息和/或元信息,指令组可以被原子地执行。例如,组头部控制单元132可以处理组头部的大小(size)字段,并且作为结果,处理器100可以确切地知道指令组跨越多少个缓存行,并且因此处理器100能够立即开始提取指令。在一个示例中,组头部控制单元132可以创建和处理这样的指令组的组头部。如较早关于表3所讨论的,组头部可以包括关于指令组的控制信息和/或元信息。组头部控制单元132可以包括组合逻辑、状态机和暂时存储单元,诸如触发器,以处理组头部中的各个字段。在一个示例中,针对指令组的控制信息和/或元信息可以包括预先计算的就绪状态信息。如较早所解释的,该信息可以帮助处理器100甚至在指令被解码之前调度它们用于执行。在关于具有固定大小的指令组(例如,32个指令)的一个示例中,组头部将在指令组的开始处,并且因此程序计数器(pc)的初始值将指向组头部。在与可变大小的指令组(例如,32、64、96或128个指令)有关的另一示例中,前端控制单元102将向组头部控制单元132提供关于当前在指令窗口中的指令组的大小的信息。一旦组头部控制单元132具有该信息,组头部控制单元132就可以使用它和pc值来确定组头部的位置。例如,考虑以下指令组:readreadaddtleibro.tb1bro.fb1在上面的示例中,指令中的每个指令可以与六位预先计算的就绪状态信息相关联,根据需要包括用于到每个指令的各种输入的有效位。并非所有的指令都可以具有预先计算的就绪状态信息。预先计算的就绪状态信息将允许指令调度器调度准备好发出的指令。下面的表5表示上述指令的就绪状态:前四个非预测指令具有谓词真和谓词假位,其被设置为反映它们不等待任何谓词结果。两个read指令(未预测和不等待输入操作数)立即准备好发出。例如,两个read指令可以由指令调度器130立即调度用于发出。因此,可以在第一周期中发出第一读取指令(假设每个周期仅发出一个指令),并且可以在第二发出周期中发出第二读取指令。这些指令在被调度用于执行之前将不需要被提取和/或解码,因为预先计算的就绪状态向指令调度器提供信息以调度这些指令用于执行。这可以再次有利地提高实现预先计算的就绪状态功能的处理器的性能。这是因为在没有预先计算的就绪状态信息的情况下,处理器将不得不首先提取和解码这些指令,以在发出任何指令之前创建该信息。在这两个read指令被发出的同时,指令调度器130可以调度add指令用于解码。接下来,指令调度器104可以评估输入的状态,即由read指令读取的两个操作数的状态。由于read指令以add操作数为目标,所以指令调度器130可以更新add指令的就绪状态信息并且发出add指令。add指令的target1字段(参见例如表2)可以以tlei指令为目标。指令调度器130可以更新tlei指令的就绪状态信息并且发出tlei指令。在这个示例中,tlei(小于等于立即值测试(test-less-than-equal-immediate))指令在通道1上广播其预测结果;两个分支指令(一个指令基于真值被预测,并且另一指令基于假值被预测)等待来自tlei指令的预测结果。分支指令可以被调度以发出,等待tlei指令的结果。接着可以发出分支指令中的一个指令,这取决于谓词被评估为真还是假。如该示例所示,借助于预先计算的就绪状态信息,处理器100可以有利地比其他方式更快地执行指令。图2是根据一个示例的方法的流程图。在步骤202中,例如,前端控制单元102可以提取被配置为由处理器(例如,处理器100)原子地执行的指令组。在前端控制单元102已经提取指令组之后,处理可以转到步骤204。在步骤204中,例如,在解码指令组中的至少一个指令之前,指令调度器130可以基于与指令组中的至少一个指令相关联的预先计算的就绪状态信息来调度指令组中的至少一个指令用于由处理器100执行。如较早利用各种示例所讨论的,编译器已经预先计算了其就绪状态的指令的调度可以有利地允许处理器按照数据流顺序、不按程序顺序并且更快地处理指令。在一个示例中,预先计算的就绪状态信息可以包括与指令组中的至少一个指令相关联的就绪位。预先计算的就绪状态信息还可以包括在解码之前能够由处理器执行的、紧接在指令组的组头部之前的指令的数目。预先计算的就绪状态信息可以包括数个有效位,例如如较早所讨论的,其中有效位中的每个有效位可以指示到指令组中的至少一个指令的输入准备就绪。有效位可以包括:(1)指示输入到指令组中的至少一个指令的左操作数准备就绪的至少一位,以及(2)指示向指令组中的至少一个指令输入的右操作数准备就绪的至少第二位。有效位还可以包括关于至少一个广播通道的信息,指令组中的至少一个指令可以监测至少一个广播通道以便经由广播通道接收输入。预先计算的就绪状态信息还可以包括指示与指令组中的至少一个指令相关联的谓词是否需要评估的至少一位。预先计算的就绪状态信息还可以包括标识在解码之前能够由处理器执行的特定指令的信息。预先计算的就绪状态信息还可以包括位向量,使得与位向量中的每个位相关联的逻辑状态包括标识在解码之前能够由处理器执行的指令的信息。图3是根据一个示例的方法的流程图。在步骤302中,例如,指令调度器130可以处理指令组中的至少一个指令的预先计算的读取状态信息,该指令组被配置为由处理器(例如,处理器100)原子地执行。作为该步骤的一部分,指令调度器130可以处理指令组的组头部,其中组头部包括指令组中的至少一个指令的预先计算的就绪状态信息。较早关于表3讨论了包括就绪状态字段的这样的组头部的示例。在指令调度器130已经处理了预先计算的就绪状态信息之后,处理可以转到步骤304。在步骤304中,例如,在提取和/或解码指令组中的至少一个指令之前,指令调度器130可以基于与指令组中的至少一个指令相关联的预先计算的就绪状态信息来调度指令组中的至少一个指令用于由过程执行。如较早利用各种示例所讨论的,例如,编译器已经预先计算了其就绪状态的指令的调度可以有利地允许处理器按照数据流顺序、不按照程序顺序并且更快地处理指令。在一个示例中,预先计算的就绪状态信息可以包括与指令组中的至少一个指令相关联的就绪位。预先计算的就绪状态信息还可以包括指示在提取和/或解码这样的指令之前能够被处理器的指令调度器调度用于执行的指令的值。预先计算的就绪状态信息可以包括数个有效位,例如如较早所讨论的,其中有效位中的每个有效位可以指示到指令组中的至少一个指令的输入准备就绪。有效位可以包括:(1)指示输入到指令组中的至少一个指令的左操作数准备就绪的至少一位,以及(2)指示输入到指令组中的至少一个指令的右操作数准备就绪的至少第二位。有效位还可以包括关于至少一个广播通道的信息,指令组中的至少一个指令可以监测至少一个广播通道以便经由广播通道接收输入。预先计算的就绪状态信息还可以包括指示与指令组中的至少一个指令相关联的谓词是否需要评估的至少一位。预先计算的就绪状态信息还可以包括标识在解码之前能够被调度用于由处理器执行的特定指令的信息。预先计算的就绪状态信息还可以包括位向量,使得与位向量中的每个位相关联的逻辑状态包括标识在解码之前能够被调度用于由处理器指令的指令的信息。图4是根据一个示例的方法的流程图。例如,该方法涉及在步骤402中,编译器处理高级语言的指令以生成被配置为由处理器原子地执行的至少一个指令组。此外,在步骤402中,处理还可以包括生成与至少一个指令组的子集相关联的就绪状态信息,使得在不提取和/或解码指令的子集的情况下指令的子集能够被调度用于由处理器执行。下面示出了高级语言的示例性程序的一个示例及其到指令的组的编译,指令的组包括具有预先计算的就绪状态信息的组头部:程序:下面示出了具有指令组和组头部的示例性编译程序:在上面的示例中,指令的组包括诸如read(读取)、mov(移动)和add(加)等指令。read指令用于从寄存器中读取操作数的值。mov指令用于将操作数移动或复制到由mov指令指定的一个或多个目标。add指令用于将作为该指令的一部分而提供的两个操作数相加。此外,还有说明控制回路到预测的数据流指令的转换的其他指令。tleip0,t4,99指令是“小于或等于立即值测试”指令。作为该指令的一部分,指令的操作数值与立即值(例如,99)相比较,并且如果操作数值小于或等于立即值,则产生真值;否则,产生假值。bro_t<p0>blk1指令是基于tlei指令的结果为真值而预测的“偏移分支”指令。类似地,bro_f<p0>blk2指令是基于tlei指令的结果为假值而预测的“偏移分支”指令。因此,如果tlei指令的结果是真值,则指令bro_t<p0>blk1将被执行。备选地,如果tlei指令的结果是假值,则bro_f<p0>blk2将被执行。在上面所示的示例中,截短头部用于说明传送就绪状态信息的一种方式。例如,用于块blk0的第一指令组的第一截短头部包括用于预先计算的就绪状态字段[010]的三个位。这三个位指示在组头部之后的前两个指令(movi跟随有另一movi)准备好甚至在被解码之前被调度用于执行。类似地,用于块bk11的第二指令组的第二截短标题包括用于预先计算的就绪状态字段[010]的三个位。这三个位指示前两个指令(read跟随有另一read)准备好甚至在被解码之前被调度用于执行。在该示例中,可以提供关于指令准备就绪的附加的预先计算的就绪状态信息。例如,在该示例中,信息可以被添加到组头部以传送关于其他指令准备就绪的更多信息。例如,预先计算的就绪状态字段可以包括在该示例中所示的指令中的每个指令的至少四个就绪位。就绪位可以被布置为用于每个指令的四位[rt,rf,r0,r1]。如果设置为0,则r0位可以指示指令等待操作数#0作为输入。如果设置为0,则r1位可以指示指令等待操作数#1作为输入。如果设置为0,则rt位可以指示指令等待真谓词。类似地,如果设置为0,则rf位可以指示指令等待假谓词。因此,add指令的四位向量可以是[rt=1,rf=1,r0=0,r1=0],因为它等待操作数#0和操作数#1。如上所述,bro_t<bl>blk1指令是基于tlei指令的结果为真值而预测的“偏移分支”指令。同样,bro_f<p0>blk2指令是基于tlei指令的结果为假值而预测的“偏移分支”指令。bro_t<p0>blk1指令的预先计算的就绪状态位可以是[rt=0,rf=1,r0=1,r1=1],因为它只等待真谓词。bro_f<p0>blk1指令的预先计算的readystate位可以是[rt=1,rf=0,r0=1,r1=1],因为它只等待假谓词。继续参考图4,在步骤404中,编译器可以存储就绪状态信息(例如,如上面的示例性组头部中所示)用于由处理器(诸如处理器100)进行后续处理。就绪状态信息可以包括有效位,其中有效位中的每个有效位可以包括指示到指令的子集的至少一个指令的输入准备就绪的信息。例如,后续处理可以包括分别关于图2和3描述的步骤。总之,提供了一种方法,包括提取指令组,其中指令组被配置为由处理器原子地执行。该方法还可以包括,在对指令组中的至少一个指令进行解码之前,至少基于与指令组中的至少一个指令相关联的预先计算的就绪状态信息来调度指令组中的至少一个指令用于由处理器执行。在该方法中,预先计算的就绪状态信息可以包括以下中的至少一项:(1)与指令组中的至少一个指令相关联的就绪位,(2)在解码之前能够被调度用于由处理器执行的、之前有指令组的组头部的指令的数目,(3)多个有效位,其中多个有效位中的每个有效位包括指示到指令组中的至少一个指令的输入准备就绪的信息,(4)指示与指令组中的至少一个指令相关联的谓词是否需要评估的至少一位,(5)多个有效位,其中多个有效位中的每个有效位包括关于至少一个广播通道的信息,指令组中的至少一个指令能够监测至少一个广播通道以经由该广播通道来接收输入,(6)标识在解码之前能够由处理器执行的特定指令的信息,或者(7)位向量,使得与该位向量中的每个位相关联的逻辑状态包括标识在解码之前能够由处理器执行的指令的信息。另外,一种处理器包括用于以下各项的装置:(1)处理指令组中的至少一个指令的预先计算的就绪状态信息,其中指令组被配置为由处理器原子地执行,以及(2)在对指令组中的至少一个指令进行提取或解码中的至少一项之前,至少基于指令组中的至少一个指令的预先计算的就绪状态信息,调度指令组中的至少一个指令用于由处理器执行。例如,用于处理和调度的装置可以是图1的指令调度器130。在该处理器中,预先计算的就绪状态信息可以是以下中的至少一个:(1)与指令组中的至少一个指令相关联的就绪位,(2)指示在对指令进行提取或解码中的至少一项之前能够被调度用于由处理器执行的指令的值,(3)多个有效位,其中多个有效位中的每个有效位包括指示到指令组中的至少一个指令的输入准备就绪的信息;(4)指示与指令组中的至少一个指令相关联的谓词是否需要评估的至少一位。在一个示例性处理器中,多个有效位可以包括:(1)指示输入到指令组中的至少一个指令的左操作数准备就绪的至少第一位,以及(2)指示输入到指令组中的至少一个指令的右操作数准备就绪的至少第二位。应当理解,本文中描绘的方法、模块和部件仅是示例性的。备选地或者附加地,本文中描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如而非限制,能够使用的说明性类型的硬件逻辑部件包括现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑器件(cpld)等。在抽象但仍明确的意义上,实现相同功能的部件的任何布置都被有效地“相关联”,使得期望的功能被实现。因此,本文中组合以实现特定功能的任何两个部件可以被视为彼此“相关联”,使得期望的功能被实现,而与架构或中间部件无关。同样,如此相关联的任何两个部件也可以被视为彼此“可操作地连接”或“耦合”以实现期望的功能。与本公开中描述的示例相关联的功能还可以包括存储在非暂态介质(例如,指令高速缓存104或其他类型的非暂态介质)中的指令。本文中使用的术语“非暂态介质”是指存储数据和/或指令的任何介质,指令使得机器(诸如处理器100)以特定方式操作。示例性的非暂态介质包括非易失性介质和/或易失性介质。非易失性介质例如包括硬盘、固态驱动器、磁盘或磁带、光盘或磁带、闪存、eprom、nvram、pram或其他此类介质、或者网络版本的这样的介质。易失性介质包括例如动态存储器,诸如dram、sram、高速缓存或其他此类介质。非暂态介质不同于传输介质,但是可以与传输介质一起使用。传输介质用于向机器(诸如处理器100)传输数据和/或指令,或者从其传输数据和/或指令。示例性传输介质包括同轴电缆、光纤电缆、铜线以及无线介质,诸如无线电波。此外,本领域技术人员将认识到,上述操作的功能之间的界限仅是说明性的。多个操作的功能可以被组合成单个操作,和/或单个操作的功能可以被分布在附加的操作中。此外,备选实施例可以包括特定操作的多个实例,并且在各种其他实施例中可以改变操作的顺序。尽管本公开提供了具体示例,但是可以在不脱离如下权利要求中阐述的本公开的范围的情况下做出各种修改和改变。因此,说明书和附图被认为是说明性的而非限制性的,并且所有这样的修改意图被包括在本发明的范围内。本文中关于具体示例描述的任何益处、优点或对于问题的解决方案不旨在被解释为任何或所有权利要求的关键的、要求的或必要的特征或元素。此外,本文中使用的术语“一个(a)”或“一个(an)”被定义为一个或多于一个。而且,在权利要求中对诸如“至少一个”和“一个或多个”的介绍性短语的使用不应当被解释为暗示由不定冠词“一个(a)”或“一个(an)”对另一权利要求元素的引入将包含这样引入的权利要求元素的任何特定权利要求限制为仅包含一个这样的元素的发明,即使当相同的权利要求包括介绍性短语“一个或多个”或“至少一个”以及诸如“一个(a)”或“一个(an)”等不定冠词时。对于定冠词的使用也是如此。除非另有陈述,诸如“第一”和“第二”等术语被用来任意区分这些术语所描述的元素。因此,这些术语不一定旨在指示这些元素的时间或其他优先级。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1