CN101395573A - 乱序处理器中的分布式记分板调度 - Google Patents

乱序处理器中的分布式记分板调度 Download PDF

Info

Publication number
CN101395573A
CN101395573A CN200780007020.XA CN200780007020A CN101395573A CN 101395573 A CN101395573 A CN 101395573A CN 200780007020 A CN200780007020 A CN 200780007020A CN 101395573 A CN101395573 A CN 101395573A
Authority
CN
China
Prior art keywords
instruction
operand
register
value
availability bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200780007020.XA
Other languages
English (en)
Other versions
CN101395573B (zh
Inventor
江醒玉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Arm Overseas Finance Co ltd
Overpass Bridge Co ltd
Original Assignee
MIPS Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by MIPS Technologies Inc filed Critical MIPS Technologies Inc
Publication of CN101395573A publication Critical patent/CN101395573A/zh
Application granted granted Critical
Publication of CN101395573B publication Critical patent/CN101395573B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

一种用于乱序处理器流水线中的分布式记分板调度的处理器核和方法。在实施例中,控制逻辑将操作数可用性位附加于每一个指令。所附加的操作数可用性位形成每一个指令的一个分布式记分板。所附加的操作数可用性位与该指令一同被传送经过多个处理器流水线级。指令分派缓冲区存储指令和操作数可用性位。分派控制器确定指令何时将被发送。该确定至少部分基于存储在指令分派缓冲区内的操作数可用性位。

Description

乱序处理器中的分布式记分板调度
技术领域
本发明一般涉及微处理器。更特别地,本发明涉及乱序处理器。
背景技术
许多微处理器是相对简单的有序机器。在有序处理器中,取指令并且如果该指令的源操作数在处理器的寄存器文件中是可用的(available)那么该指令被发送到合适的功能单元。指令发送典型地指的是发送指令到功能单元(例如执行单元)以便处理。在有序处理器中,依照程序顺序发送和执行指令。在流水线有序处理器中,流水线(pipeline)被停止直到指令的操作数可用。
在乱序处理器中,取指令并分派指令到指令分派缓冲区。该指令在缓冲区中等待直到它们的操作数准备好,并且在较新或较老的指令之前发送该指令,且打乱了程序的顺序。接着结果在缓冲区中(例如在完成缓冲区(completion buffer)中)排队。完成缓冲区保持指令的程序顺序的轨迹并且在较老的指令将它们的结果写入寄存器文件之后,较新的指令将它们的结果写入寄存器文件。在乱序处理器中,脱离了程序顺序来执行指令而它们的结果依照程序顺序被写入寄存器文件。流水线乱序处理器允许指令的执行被安排在将使流水线有序处理器停止的危险附近。
典型地,指令包括一个或多个源操作数和一个目的操作数。指令的目的操作数通常至少部分的基于源操作数被修改。修改目的操作数的指令典型地称为它修改了其源操作数的另一个指令的生产者(producer)。其源操作数被生产者指令修改的指令典型地称为消费者(consumer)。消费者的源操作数典型地是生产者的目的操作数。生产者在它们相应的消费者被处理之前由处理器的执行单元处理。生产者指令可以是其它生产者的消费者,并且消费者可以是其它消费者指令的生产者。对于源操作数,消费者可以具有它依赖的多于一个的生产者。可以从生产者指令设旁路到消费者指令的源操作数。
旁路指的是在生产者指令将它的结果写入寄存器文件之前(即在生产者更新架构状态(architectural state)之前)由生产者指令修改的操作数的值向消费者指令的传送。处理器的旁路策略决定了由生产者指令修改的一个或多个操作数的值何时以及从哪里可以向消费者指令发送。只有当所有源操作数的值都可用(例如在寄存器文件中或通过来自生产者指令的旁路)的时候指令可以被发送到处理器的执行单元。因此,旁路策略可以决定指令可以被发送的最早时间。
一些乱序处理器使用称为记分板的技术以在存在足够的可用的计算资源以及对源操作数没有数据相关性的时候允许指令乱序执行。集中式记分板用于检查指令的操作数可用性。集中式记分板存储处理器中每一个寄存器的状态并且每一个指令查找该集中式记分板以确定它们的操作数是否可用。在使用记分板的乱序处理器中,每一个指令搜查集中式记分板,其中在集中式记分板中创建了指令的源操作数的数据相关性的记录。集中式记分板确定了指令何时可以读取它的操作数以及开始执行。如果集中式记分板判定指令由于它的源操作数不可用所以不能立即执行,则该集中式记分板监视系统状态的改变并且判定操作数何时准备好。如果源操作数的值准备好被读取,则集中式记分板确定指令何时可以被发送。因此所有的危险检测和决定(resolution)都被集中在记分板内。集中式记分板不得不与处理器的所有功能单元通信,因为仅有有限数量的用于通信的总线,因此这表现出了结构危险。
集中式记分板实现需要芯片上的较大面积。而且,查找集中式记分板可能是耗时的。集中式记分板存储每一个寄存器的状态。指令典型地需要访问一个或两个操作数的值并且查找一个或两个寄存器的状态。当集中式记分板被访问以确定操作数的可用性时,记分板中的一个或两个寄存器从处理器中的所有寄存器中被选出。这等效于寄存器文件的查找耗时。同样,如果多个指令试图同时查找记分板,则需要复杂的布线。记分板的尺寸和到记分板的总线的数量可以被增加,这消耗宝贵的芯片有效面积并且同样具有时序纠葛(implication)。查找集中式记分板的复杂性同样延迟了指令发送。
所需要的是用于减小乱序微处理器中的集中式记分板的复杂性的新技术,该新技术克服了上面指出的不足。
发明内容
本发明提供了一种处理器核以及一种用于乱序处理器中的分布式记分板调度的方法。在实施例中,控制逻辑将操作数可用性位(operand availability bits)附加于每一个指令。所附的操作数可用性位形成每一个指令的分布式记分板。所附的操作数可用性位与指令一起被传送经过处理器流水线的多个级。指令分派缓冲区存储指令和操作数可用性位。分派控制器确定指令何时将被发送。该确定至少部分基于存储于指令分派缓冲区内的操作数可用性位。
在实施例中,指令的操作数可用性位包括用于确定由生产者指令修改的操作数何时可以被旁路到消费者指令的计数器值。操作数可用性位包括一位,用于当生产者指令被发送到处理器的执行单元内时触发消费者指令的计数器。生产者指令被附加有唤醒使能值,该唤醒使能值用于当生产者指令被发送到处理器的执行单元内时触发消费者指令的计数器。当生产者指令被发送到处理器的执行单元内时,消费者指令的计数器开始减小它的值。当计数器计数下降到零时,由生产者指令修改的操作数可以被旁路到消费者指令。因此,消费者指令不必等待生产者指令将修改的操作数写入处理器的寄存器文件内,在它可以被访问之前。这加速了指令发送并且由此增加了指令吞吐量。在实施例中,使用唤醒使能值,生产者指令可以延迟计数器的启动从而控制消费者指令何时被发送。
操作数可用性位包括一个值,用于指示操作数是否存在在处理器的寄存器文件内。操作数可用性位还包括一个值,用于指示操作数是否在处理器中预知可用。
在本发明的实施例中,改进的重命名映射表(renaming map)还存储操作数可用性位。
在本发明的一个实施例中,处理器核包括流水线,该流水线包括多个并行的处理路径,其中每一个并行的处理路径中的指令都包括附加的操作数可用性位。
本发明的其它实施例、特征和优点,以及本发明的各种实施例的结构和操作将参考附图在下面详细描述。
附图说明
在这里并入的并且形成本说明书的一部分的附图说明了本发明并且与说明书一同进一步用来解释本发明的原理和用来使本领域技术人员能够实现和使用本发明。在附图中,相同的附图标记指示同样的或者功能类似的元件。另外,附图标记的最左边一位数指示该附图标记最先出现在哪个附图中。
图1是根据本发明的第一实施例的处理器核的示意图。
图2是根据本发明的第二实施例的处理器核的示意图。
图3是处理器的流水线级的示意图。
图4是处理器的流水线级的更详细的示意图。
图5是根据本发明实施例的处理器的重命名和分派级的流水线级的示意图。
图6是说明根据本发明实施例的寄存器重命名映射表的示意图。
图7是说明根据本发明实施例的指令分派缓冲区的示意图。
图8是说明根据本发明实施例的组合逻辑的示意图。
图9是说明根据本发明实施例的状态机的示意图。
图10是说明根据本发明实施例的移位寄存器计数器的示意图。
具体实施方式
本发明提供了一种处理器核以及一种用于实现乱序处理器中的分布式记分板调度的方法。在接下来的本发明的详细描述中,涉及“一个实施例”、“实施例”、“示例实施例”等说法是指示描述的实施例可以包括特殊的特征、结构或特性,但是每一个实施例都可以不必包括该特殊的特征、结构或特性。而且,这样的短语不必指相同的实施例。此外,当结合实施例描述特殊的特征、结构或特性时,应该认为本领域技术人员理解无论是否明确地描述都可以结合其它实施例实现这样的特征、结构或特性。虽然参照流水线乱序处理器描述实施例,但是本领域技术人员理解可以在非流水线的处理器或部分流水线的处理器中实现实施例。
图1是根据本发明实施例的处理器100的示意图。处理器100包括处理器核102、指令存储器104和寄存器文件106。处理器核102具有流水线,该流水线包括指令分派单元110。
如图1所示,处理器核102的指令分派单元110包括分派控制器130、解码器132、重命名器(renamer)122和指令分派器(ID)124。根据实施例,重命名器122包括控制逻辑(未示出),该控制逻辑将操作数可用性位附加于指令,该指令从指令读取缓冲区116被读取并且由解码器132解码。在实施例中,处理器核102可以包括多个流水线级。由重命名器122附加于指令的操作数可用性位可以与该指令一起被传送经过多个流水线级。指令分派器124包括指令分派缓冲区(IDB)700(这里没有显示但是在下面描述),该指令分派缓冲区700存储指令和大部分的附加的操作数可用性位。分派控制器130基于存储于指令分派缓冲区700内的附加的操作数可用性位,动态地调度由ALU 126执行的指令。
在实施例中,消费者指令的操作数可用性位包括计数器值,用于确定由生产者指令修改的操作数何时可以被旁路到消费者指令。该操作数可用性位包括一位,用于当生产者指令被发送到处理器100的ALU 126中时触发消费者指令的计数器。生产者指令被附加有唤醒使能值,用于当生产者指令被发送到ALU 126中时触发消费者指令的计数器。当生产者指令被发送到ALU 126中时,该计数器开始减小它的值。当该计数器计数下降到零时,该消费者指令可以被发送使得它可以接收来自生产者指令的旁路的操作数。因此,消费者指令不必等待生产者指令将修改的操作数在它可以被访问之前写入寄存器文件106内。计数器的使用以确定指令的一个或多个操作数是否可以在它们被写入寄存器文件106之前被访问,导致更快速的指令发送以及增加的指令吞吐量。
在实施例中,使用唤醒使能值,生产者指令可以延迟计数器的启动从而控制消费者指令何时被发送。
在实施例中,操作数可用性位包括一个值,用于指示操作数是否存在于处理器的寄存器文件内。操作数可用性位同样包括一个值,用于指示操作数是否在处理器100中预知可用。例如,如果加载(load)指令具有高速缓存失败(cache miss),则它不得不从主存储器或硬盘访问数据。从主存储器或硬盘的数据访问时间是不可预测的。一旦从主存储器或硬盘访问数据并且该数据在处理器100的一个功能单元内是可用的,则该数据是预知可用的。一有加载失败(load miss)时则该位被设置为0而当待加载的值在处理器100内是预知可用时,该位被设置为1。
使用附加于指令的操作数可用性位的形式的分布式记分板,消除了如在传统乱序处理器中那样持续访问集中式记分板以确定指令是否可以被发送的需要。
处理器核102同样包括程序计数器(PC)选择器112、可选的重编码器(recoder)114、分支预测器118以及流水线控制逻辑120。
程序计数器选择器112选择用于从存储器读取程序指令的地址或程序计数器值。在一个实施例中,PC选择器112可以选择连续增加的程序计数器值、重定向程序计数器值、或新程序线程的程序计数器值。
处理器核102优选地能够执行标准宽度的指令(例如32位指令)和压缩格式宽度的指令(例如16位指令)。因此,在一个实施例中,处理器核102包括可选的重编码器114。如果从指令存储器104中读取压缩格式指令,则该指令由重编码器114重新编码到可以被解码器132解码和被算术逻辑单元126执行的格式宽度。在一个实施例中,标准宽度指令和压缩格式宽度指令都由重编码器114重新编码到具有比标准宽度指令更多位的指令宽度。指令从可选的重编码器114被传送到指令缓冲区116。
指令缓冲区116能够保持多个指令。在一个实施例中,其中处理器核102实现多线程,来自不同程序线程的指令被存储,例如,在指令缓冲区116的各自的部分内。多线程指的是同时执行程序的不同部分(叫做线程)的操作系统的能力。在另一个实施例中,其中处理器核102实现多线程,来自不同程序线程的指令被存储在各自的指令缓冲区内,例如,每一个程序线程有一个指令缓冲区。处理器核102优选地每个读取周期读取多个指令。
在控制转移指令(例如分支指令或跳转指令)从指令存储器104读取的情况下,分支预测器118预测与控制转移指令相关的有条件的分支是实行还是不实行。任何已知的分支预测算法可以被使用。
指令从指令缓冲区116被读取并且由解码器132解码。解码器132执行对指令进行解码的功能。重命名器122执行更新寄存器重命名映射表600(这里没有显示但是在下面描述)的功能。在解码和重命名处理期间,每一个指令都关联/分配一个指令标识(IID)标签。IID是分配给每一个指令的独特的标识符。指令的源和目的操作数的每一个都被分配一个完成缓冲区标识(CBID)标签。目的操作数的CBID决定了在完成缓冲区128中的其中算术逻辑单元126可以写入指令的计算结果的位置。源操作数的CBID是在完成缓冲区128中的其中源操作数的值可以被定位的位置。在一个实施例中,指令标识标签连续地被生成多位的值。生成的位数取决于同时执行多少指令。在一个实施例中,其中处理器核102实现多线程,指令标识标签以每一个线程为基础被生成并且被分配。
指令根据由分派控制器130决定的调度而从指令分派器124读取并且由算术逻辑单元(ALU)126执行。一旦指令的操作数准备好,分派控制器130就调度该指令以便执行并且优选地根据指令的年龄(age)来调度。指令的年龄由程序决定。例如,在程序顺序中较早的指令比程序顺序中较晚的指令要“老”。在乱序处理器100中,如果较老的指令和较年轻的指令的操作数都是可用的,那么较老的指令优选地在较年轻的指令之前被发送。在实施例中,指令分派缓冲区124按照它接收到指令的顺序来存储指令。在指令分派缓冲区124中的队列的顶部的指令是较老的指令。具有可用操作数的较老的指令,在指令分派缓冲区124队列中的较低的指令之前,由指令分派器124分派。在实施例中,分派控制器130可以是ID 124或者流水线控制逻辑120的部分。
算术逻辑单元126的结果被写到完成缓冲区128并且被存储直到指令结束且它们的结果被写到寄存器文件106。
指令存储器104是对于处理器核102可访问的任何存储器,例如指令高速缓存器、高速暂存存储器、环形缓冲区等等。在一个实施例中,存储器104包括多个存储器和/或多个类型的存储器。
寄存器文件106包括多个通用目的寄存器(未示出),该通用目的寄存器对程序员是可见的。
图2是根据本发明的另一个实施例的处理器200的示意图。处理器200包括处理器核202、指令存储器104、以及寄存器文件106。处理器核202具有包括指令分派单元210的流水线。
如图2所示,处理器核202的指令分派单元210包括分派控制器130、解码器132、重命名器122。在图2所示的实施例中,存在两个流水线,一个用于ALU 126b,而另一个用于地址生成(AGEN)126a。除了微处理器200包括两个并行的指令执行流水线,微处理器200操作与微处理器100类似。这两个指令执行流水线可以是相似的,或者可以使它们专用于执行挑选的指令。在一个实施例中,由指令分派器124a、AGEN 126a、以及完成缓冲区128a表示的流水线用于执行控制转移指令例如分支、跳转和返回指令以及加载、存储、预取、高速缓存指令。由指令分派器124b、ALU 126b以及完成缓冲区128b表示的流水线用于执行算术指令,例如加、减等等。
因为存在两个流水线,指令分派单元210具有两个指令分派器,即指令分派器124a和指令分派器124b。根据实施例,在指令分派单元210内的重命名器122包括控制逻辑(未示出),该控制逻辑将操作数可用性位附加于指令,其中该指令从指令读取缓冲区116读取并且由解码器132解码。指令分派器124a和124b的每一个都包括指令分派缓冲区(未示出),与IDB 700类似,该指令分派缓冲区存储指令和大部分的附加的操作数可用性位。分派控制器130基于存储于指令分派器124a和124b各自的指令缓冲区内的附加于指令的操作数可用性位,决定何时将指令发送到ALU 126b或者AGEN 126a。
如图2所示,处理器核202包括程序计数器(PC)选择器112、可选的重编码器114、指令缓冲区116、分支预测器118以及流水线控制逻辑220。
处理器核202包括与AGEN 126a和ALU 126b的每一个相关的两个完成缓冲区128a和128b。调度器130动态地调度指令以便由处理器核202的两个并行的流水线执行。
在实施例中,处理器200可以包括多个并行的流水线级。由重命名器122附加于指令的操作数可用性位可以与该指令一起被传送经过多个并行的流水线级。操作数可用性位可以被修改以适应并行的流水线级。如这里描述的相关领域的技术人员应当理解的,操作数可用性位对于并行的流水线级可以被修改。同样应当理解虽然这里给出的示例使用单流水线,但是作为替换的实施例不限于单流水线。例如,在包括多于两个流水线的处理器中,可以使用多于两个的指令分派器和相关的功能单元。在另一个示例中,单指令分派器可以用于多个流水线。如这里描述的相关领域的技术人员应当理解的,功能单元的数目可以根据实现方式而变化。
图3是说明处理器(例如处理器100或处理器200)的示例流水线级划分的示意图。在图3所示的实施例中,处理器100被划分为四个流水线级。这四个流水线级是示意性的并且不希望限制本发明。在其它实施例中,处理器100可以多于或者少于四个流水线级。在本发明的任何实施例中实现的流水线级的数目是设计选择。
如图3所示,处理器100的四个流水线级是指令读取级302、指令重命名和分派级304、指令执行级306和写寄存器文件级308。
级302典型地包括PC选择器112、重编码器114和指令读取缓冲区116。在级302中,PC选择器112在多种程序计数器值之中选择以用于从指令存储器104读取指令。检查与将要从指令存储器104中读取的指令相关的指令标签。从指令存储器104中读取一个或多个指令。压缩格式指令由重编码器114重新编码成为可以被解码和被执行的格式。所有指令被写入指令缓冲区116。在一个多线程实施例中,处理器100包括用于每个程序线程的一个指令缓冲区。在一个实施例中,指令可以被直接分派到解码器132。
级304典型地包括解码器132、重命名器122、指令分派器124和分派控制器130。重命名器122包括重命名映射表600和重命名控制逻辑(未示出)。指令分派器124包括指令分派缓冲区(IDB)700和指令分派控制逻辑(未示出)。在示例中,对于并行的流水线,如在处理器200中,级304包括指令分派器124a和124b。在级304中,指令被解码、重命名和分派。并行于使用解码器132进行解码,重命名器122更新寄存器重命名映射表600。寄存器重命名映射表是保持程序员可见的结构寄存器(architectural registers)与内部物理寄存器之间的映射信息的结构。根据实施例,重命名映射表600被修改以包括处理器100中每一个寄存器的可用性位。重命名映射表600同样具有对应于处理器100中每一个寄存器的最新提供者(provider)的CBID。对于每一个指令,重命名器122将操作数可用性位附加于指令。然后指令可以带着来自重命名映射表600的该可用性位经过流水线,从而生成分布式记分板,该分布式记分板确定操作数何时可用。使用重命名映射表600来获得操作数可用性位消除了对集中式记分板的需要和对反复查找集中式记分板以确定操作数何时可用的指令的需要。
根据实施例,指令分派单元110内的重命名器122包括重命名控制逻辑(未示出),该重命名控制逻辑将操作数可用性位附加于指令,该指令从指令读取缓冲区116中取出并且由解码器132解码。指令分派器124包括指令分派缓冲区700,该指令分派缓冲区700存储指令和大部分的附加的操作数可用性位。分派控制器130基于存储于指令分派器124的IDB 700内的操作数可用性位,决定何时将指令发送到处理器核102的ALU 126。在一个实施例中,其中处理器100包括累加器寄存器(未示出)、数字信号处理器(DSP)寄存器(未示出)和协处理器寄存器(未示出),对于不同的寄存器类型维持各自的重命名映射表。这些重命名映射表与为通用目的寄存器维持的重命名映射表600类似。在另一个实施例中,重命名映射表600可以用于所有的寄存器。
如在这里指出的,对目的寄存器进行寄存器重命名以去除输出相关性并且确保在任何特定的时刻在处理器核102存储器在特定寄存器的单一生产者。源寄存器被重命名使得在最早的时机从生产者获得数据而不是等待处理器的状态被更新。这同样帮助减小例如与算术逻辑单元126耦连的任何协处理器内的相关性检查的复杂性。
在级304内指令收到指令标识(IID)标签和完成缓冲区标识(CBID)标签。指令的目的操作数具有与分配给它的指令的相同的CBID。目的操作数的CBID决定了在完成缓冲区128中的其中算术逻辑单元126可以写入指令的计算结果的位置。指令的源操作数被分配它们对应的生产者指令的CBID。源操作数在重命名映射表600中查找它们对应的生产者指令的CBID。在一个实施例中,每一个指令标识标签是唯一地确定指令的程序顺序的线程专有的连续生成的值。在级304的末端,被解码和被重命名的指令被放置于指令分派器124的指令分派缓冲区700内。分派控制器130选择位于指令缓冲区内的指令以便由算术逻辑单元126执行。
级306典型地包括ALU 126。在另一个示例中,级306可以具有并行的流水线级,例如AGEN 126a。在级306内,指令由算术逻辑单元126执行并且分解控制转移指令诸如,例如,分支指令和跳转指令。在一个实施例中,所选的指令(诸如,例如浮点指令)由与算术逻辑单元126耦连的协处理器(未示出)处理。
在级308内,由ALU 126和/或协处理器生成的结果被写到完成缓冲区128。如上面所指出的,在级304内,指令的目的操作数被分配CBID数。作为指令完成执行,它们相应的完成缓冲区完成位被设置,从而使指令能够结束并且释放它们相关的CBID数。当指令结束并且寄存器重命名映射表被更新时,将结果从完成缓冲区128写到寄存器文件106。每个指令优选地根据程序顺序而结束。
图4是说明图3中的一些流水线级的更进一步的流水线级划分的示意图。在图4中所示的实施例中,指令解码级被划分为N级D1~DN。指令执行级306被划分为并行的级306a和306b。级306a可以包括AGEN 126a而级306b可以包括ALU 126b。指令执行级306a被划分成M级A1~AM而指令执行级306b被划分成R级E1~ER。回写级308被划分成K级W1~WK。这些流水线级是示意性的而不希望限制本发明。在其它实施例中,处理器核102可以具有更多或者更少的流水线级。在本发明的任何实施例中实现的流水线级的数目是设计选择。图4中所示的流水线级说明了生产者指令与消费者指令之间的操作数的旁路。
典型地,指令包括一个或多个源操作数和一个目的操作数。指令的目的操作数通常至少部分的基于源操作数而被修改。修改目的操作数的指令典型地称为它修改了其源操作数的另一个指令的生产者。其源操作数被生产者指令修改的指令典型地称为消费者。消费者的源操作数典型地是生产者的目的操作数。生产者在它们相应的消费者被处理之前由处理器的执行单元处理。生产者指令可以是其它生产者的消费者并且消费者可以是其它消费者指令的生产者。消费者可以具有它依赖的多于一个的生产者用于源操作数。可以从生产者指令旁路到消费者指令的源操作数。
旁路指的是在生产者指令将它的结果写入寄存器文件之前(即在生产者更新架构状态之前)由生产者指令修改的操作数的值向消费者指令的传送。处理器的旁路策略决定了由生产者指令修改的一个或多个操作数的值何时以及从哪里可以被发送到消费者指令。只有当所有源操作数的值都可用时指令可以被发送到处理器的执行单元。因此,旁路策略可以决定指令可以被发送的最早时间。
典型地,当消费者指令的操作数在寄存器文件106内可用的时候该消费者指令被发送。通过给消费者指令的源操作数的值设旁路,消费者指令可以在它的操作数值在寄存器文件106内可用之前发送。消费者指令何时可以被发送由它的生产者指令何时被发送以及操作数可以从处理器中的何处通过旁路到消费者来决定。当从生产者指令到消费者指令的操作数值的旁路可以发生时,生产者和消费者之间的流水线级的最小数目(即流水线级差距)被用作初始的计数器值。当重命名生产者指令时由重命名器122将该计数器值存储于重命名映射表700内。在实施例中,计数器值可以是当从生产者到消费者的旁路可以发生时在生产者指令发送之后的时钟周期的最小数目。计数器值与消费者指令一起传送经过多个流水线级。在实施例中,计数器值仅被传送经过重命名和分派级304。在该实施例中,执行级306不需要流水线化,因为操作数可用性位仅被传送到重命名和分派级304。计数器值的使用使得消费者指令在不必重复查找集中式记分板的情况下确定它的操作数是否可用成为可能。计数器值的使用同样消除了在消费者指令可以被发送到指令执行级306之前等待该消费者指令的操作数在寄存器文件106内可用的要求。在操作数在寄存器文件106内可用之前就发送消费者指令,增加了指令吞吐量。
在图4所示的示例中,操作数值可以从W1级旁路到A3级。W1与A3之间的级数可以是3级。在另一个示例中,操作数可以从Am级旁路到A2级。Am与A2之间的级数可以是2级。操作数同样可以从与流水线级A1到Am并行的流水线级之一被旁路。例如,操作数可以从与级306a并行的级306b被旁路。操作数可以从流水线级E3旁路到流水线级A3。E3与A3之间的级数可以是0。
对于将要被生产者指令修改的单个操作数,因为当生产者由重命名器122处理的时候消费者指令的类型和旁路级是未知的,因此多个计数器值可以由重命名器124存储到重命名映射表600中。例如,生产者加载指令可以从级E3将一个值通过旁路到达级A2的消费者加法指令。在这种情况下,因为级E3与级A2之间的差距是2,因此计数器值是2。如果同样的生产者加载指令从级E4将一个操作数值通过旁路到达级E1的消费者指令,那么因为级E4与E1之间的距离是3个时间周期,因此计数器值是3。生产者可以从该级旁路的级是与实现方式有关的。生产者指令的类型决定了它可以从该级旁路的流水线级而消费者指令的类型决定了它可以接收到旁路值的流水线级。一旦重命名则生产者指令的类型已知,但是消费者指令类型未知,因为它还没有被重命名。在实施例中,根据生产者指令的类型,在重命名映射表600中存储两个计数器值。当消费者指令被重命名时,它的类型已知并且选择这两个计数器值中的一个。在另一个实施例中,消费者指令的类型可以是无关的而计数器值仅仅基于生产者指令的类型和它可以从哪里为一个值设旁路。在实施例中,为了限制计数器值减小的计数器的尺寸,计数器值限制在两位。唤醒使能位(下面描述)可以由生产者指令使用以延迟计数器的启动从而间接地增加计数器值。表1,在下面显示了基于操作数被旁路的级和操作数被旁路到的级的示例计数器值。表1可以存储在重命名器122内。
表1
从表1得到,从级W1旁路操作数到A3的计数器值是3,从W1旁路到E3的值是3并且从W1旁路到E2的值是4。因此,对于可以从级W1旁路操作数值的生产者指令,两个计数器值是3和4。根据实现方式,生产者指令可以仅在到达特定流水线级之后旁路。在到达该级之后,根据实现方式,生产者可以从其后的任何一级旁路。在一个实施例中,计数器值基于生产者指令可以从该级为操作数值设旁路的最早的级。在另一个实施例中,计数器值基于晚于生产者指令可以从该级为操作数值设旁路的最早级的级。表1中所示的值是出于示例的目的而并不限制这里提出的实施例。
当生产者指令由指令分派器124发送到指令执行级306时,与相应的消费者指令的操作数相关的计数器被触发。当该计数器计数减小到0,并且消费者指令的所有其它操作数可以被访问或者可以被旁路时,该消费者指令准备发送。例如,如果生产者指令可以使操作数从级Am旁路到达级A2内的消费者指令,并且流水线级Am和A2之间的差距是2级,那么消费者指令的相应操作数的计数器值是2。当生产者在级DN内被发送时,消费者的计数器被触发并且开始减小值。当生产者到达级A2时,消费者的操作数的计数器为0。如果消费者指令的其它操作数同样是预知可用的,那么消费者指令被发送。当消费者指令到达级A2时,生产者指令在级AM内并且生产者指令将操作数值旁路到达级A2内的消费者指令。如这里描述的相关领域的技术人员应当理解的,其中操作数值可以从该级旁路的级、操作数值可以被旁路到的级以及当旁路可以发生时生产者与消费者之间的最小流水线级差距可以根据实现方式而变化。计数器值、其它操作数可用性位以及相关的控制逻辑在下面详细描述。
图5是说明根据本发明的实施例的指令重命名和分派级304的示意图。出于简化说明的目的,没有在图5中显示级304的所有功能单元。在本实施例中,级304已经被划分成四个流水线级D1~D4,并包括流水线寄存器500-508。级D1包括重命名器122,级D2包括选择控制逻辑510,而级D3包括指令分派器124。在实施例中,选择控制逻辑510可以是分派控制器130、流水线控制逻辑120或者处理器100内的其它控制逻辑的部分。
流水线寄存器500接收并存储来自指令读取级302内的指令读取缓冲区116的指令512。重命名器122将操作数可用性位附加于指令512。在实施例中,操作数可用性位包括可预测的可用性(avail)位、寄存器文件内(inRF)位、第一计数器值(CNT_1)、第二计数器值(CNT_2)、第一旁路使能位(BP_1)和第二旁路使能位(BP_2)以及用于指令512的每一个操作数的active(活动)位。指令512和附加的操作数可用性位被传送到寄存器502。
avail位指示操作数值在处理器100内是否预测可用,即操作数值是否可以立即在处理器100的功能单元中的一个内被访问。一旦重新命名指令512就由重命名器122将avail位典型地设置为1作为默认值。在实施例中,如果生产者是具有高速缓存失败并且必须从主存储器或者硬盘取回数据的加载指令,则avail位被设置为0。因为从主存储器或者硬盘取回数据所需要的时钟周期数是不可预测的,所以avail位被设置为0直到数据在处理器100内可以预测可用。当加载指令为高速缓存失败时,在加载指令从主存储器或者硬盘取出数据的同时inRF位可以被设置为1。
inRF位用于指示操作数数据在寄存器文件106内的可用性。如果操作数数据不在寄存器文件106内,则在级D1内重命名器122将inRF设置为0,而如果操作数数据在寄存器文件106内,则在级D1内重命名器122将inRF设置为1。在实施例中,当想要的操作数值的生产者一旦写到寄存器文件106就广播相应的CBID时,重命名器122确定指令的操作数值是否在寄存器文件106内。重命名器122将存储在重命名映射表600内的源操作数CBID与广播的CBID相比较,并且如果两个CBID匹配,则重命名器122将inRF设置为1。这里使用的术语“广播”指的是一个信号或者多个信号,该信号指示事件(诸如,指令被发送到执行级304内、指令写到完成缓冲区128或者指令写到寄存器文件106)的发生。在实施例中,广播被传送到处理器100内的每一个流水线级。广播典型地包括关于事件的信息,诸如寄存器的CBID或者与唤醒使能值(如果可用)一起的指令的IID。
BP_1位和BP_2位,对应于CNT_1和CNT_2,用于指示如果指令512被发送,指令512的操作数是否将通过来自生产者指令的旁路而可用。典型地,BP_1和BP_2由重命名器122设置为0。当CNT_1计数减小到0时BP_1被设置为1,而当CNT_2计数减小到0时BP_2被设置为1。当指令512的操作数的旁路使能位(BP_1或者BP_2)被设置为1时,那么它指示了如果指令512被发送,操作数值将通过旁路而可用。
active位用于触发计数器,该计数器减小CNT_1和CNT_2的值。典型地,一旦重新命名指令512时重命名器122就将active位设置为0。当指令512的生产者一旦被发送到指令执行级306内就广播CBID和唤醒使能位(wakeup_enbit)时,重命名器122将广播的CBID与存储在它的重命名映射表600内的CBID相比较并且如果存在CBID匹配则设置active位。当设置active位时,相应的CNT_1和CNT_2值开始减小。示例移位寄存器计数器在图10中说明并且在下面描述。
CNT_1和CNT_2是基于当旁路能够发生时生产者与消费者之间的流水线级差距由重命名器122确定的计数器值。生产者指令的类型决定了它可以从该级设旁路的流水线级而消费者指令的类型决定了它可以接收到旁路值的流水线级。因为消费者指令类型未知,所以当重命名器122重新命名生产者指令时,在重命名映射表600中存储两个计数器CNT_1和CNT_2。当消费者指令由重命名器122重命名时,该消费者指令的类型已知并且只可以选择计数器值中的一个(CNT_1或者CNT_2)。时序约束可以阻止重命名器122选择计数器值来附加于指令。在这种情况下,如图5所示,计数器值CNT_1和CNT_2以及旁路使能位BP_1和BP_2都被附加于指令。在级D2内选择这两个计数器值中的一个(CNT_1或者CNT_2)以及相应的旁路使能位中的一个(BP_1或者BP_2)。
在实施例中,在级D1内,重命名器122选择并且附加仅一个计数器值(CNT_1或者CNT_2)和一个相应的旁路使能位(BP_1或者BP_2)到从流水线寄存器500接收的指令。如这里描述的相关领域的技术人员应当理解的,计数器值的数量、每一个计数器值的位数以及用来确定哪一个计数器值被附加于指令的策略可以根据实现方式而变化。在实施例中,计数器值可以基于如表1的预定的查找表而被确定。
应当理解,为了说明的简单,图5说明了指令512的仅仅一个操作数的操作数可用性位,但是流水线寄存器502-508包括指令512的两个操作数的操作数可用性位。
在级D2内,选择控制逻辑510从流水线寄存器502接收操作数可用性位avail、inRF、BP_1、BP_2、CNT_1、CNT_2和active。选择控制逻辑510基于接收到的广播而处理操作数可用性位并且将处理过的操作数可用性位传送到寄存器504。
选择控制逻辑510监视来自生产者指令的CBID广播。如果修改指令512的操作数的生产者指令被发送到执行级306内,那么该生产者指令广播相应的CBID和wakeup_en位,这导致选择控制逻辑510将相应的active位设置为1。
选择控制逻辑510选择作为两个计数器值CNT_1和CNT_2中的一个的CNT,并且选择作为两个相应的旁路使能位BP_1和BP_2中的一个的BP。选择控制逻辑510将CNT和BP附加于指令512。在一个实施例中,选择控制逻辑510基于如在表1中的查找表而选择两个计数器CNT_1和CNT_2值中的一个。如果active位为1,那么控制逻辑减小该所选的计数器值。如果从级D1接收到的active位已经被设置为1,则选择控制逻辑510继续减小所选的计数值。如果在级D2内该所选的计数器值计数减小到0,那么选择控制逻辑510将相应的BP位设置为1。
如果选择控制逻辑510接收到指令512的操作数值已经被写入寄存器文件106的广播,则选择控制逻辑510将inRF设置为1。
如果选择控制逻辑510接收到指令512的操作数值在处理器100内是预知可用的广播,则选择控制逻辑510也将avail设置为1。广播同样可以包括在处理器100内该操作数的位置。
在处理了操作数可用性位之后,选择控制逻辑510将它们传送到寄存器504。
在级D3内,指令分派器124从流水线寄存器504接收指令512和该指令附加的avail、inRF、BP、CNT和active位。指令分派器124在指令分派缓冲区700存储器储指令512和该指令相应的avail、inRF、BP、CNT和active位。当指令512的所有操作数可以被访问时,分派控制器130通过流水线寄存器506将指令512发送到级D4内。
在级D3内,ID 124监视来自生产者指令的CBID广播。如果修改指令512的操作数的生产者指令被发送到执行级306内,那么该生产者指令广播相应的CBID和wakeup_en位,这导致ID 124在IDB700内将相应的active位设置为1。如果从级D2接收到的active位已经被设置为1,则ID 124继续减小相应的计数值。如果在级D2内所选的计数器值计数减小到0,那么ID 124将BP设置为1。在级D3内,如果操作数的BP位为1那么它指示如果消费者被发送,它将能够接收到来自生产者的旁路操作数。
在级D3内,如果ID 124从级D2接收到的inRF位被设置为1,那么该操作数值在寄存器文件106内可用。如果inRF是0,则只有当ID124接收到指令512的操作数值已经被写入寄存器文件106的广播时ID 124才将inRF设置为1。
如果avail位是1,则它指示指令512的操作数值在处理器100内是预知可用的。如果,例如,生产者指令是具有高速缓存失败的加载并且必须从主存储器或者硬盘访问数据,那么avail位被设置为0。当操作数数据在处理器100内是预知可用的时,例如当数据从主存储器或者硬盘取出时,相应的寄存器标识号的广播导致ID 124将avail设置为1。在实施例中,CBID或者IID可以被广播以指示avail设置为1的预知可用性。
在实施例中,指令分派器124基于下面的公式来确定指令512的操作数是否可以被访问:
Operand_ready=(inRF OR BP)AND avail  --------(1)
当指令的所有操作数值可以被访问时该指令准备好被发送。如果指令512有两个操作数,则ID 124根据下面的公式2来确定指令是否准备好被发送:
Issue_ready=Operand_readyOperand 1 AND Operand_readyOperand 2
                                              --------(2)
如果指令512有N个操作数,则发送准备就绪(readiness)由下面公式来确定:
Issue_ready=Operand_readyOperand 1 AND Operand_readyOperand 2
AND...Operand_readyOperand n             --------(3)
用来实现issue_ready的示例控制逻辑在下面参考图8来描述。
在实施例中,对于存储在指令分派器124的IDB 700中的指令的每一个操作数,操作数准备就绪和发送准备就绪由下面公式来确定:
Operand_ready=f1(inRF,BP,avail)       --------(4)
其中f1是第一函数。
Issue_ready=f2(inRF,BP,avail)       --------(4)
其中f2是第二函数。
基于上述公式,当指令512的所有操作数可用时,分派控制器130发送指令512。在一个实施例中,如果在指令分派缓冲区700内多个指令准备好被发送,则指令分派器124结合分派控制器130基于程序顺序或者指令的年龄(即具有可用操作数的最老的指令首先被发送)发送指令。在实施例中,指令分派器124和分派控制器130可以被合并为单个单元。
如果指令512是另一个指令的生产者,则指令分派器124将唤醒使能(wakeup_en)位附加于指令512。当指令512发送到执行级306内时指令512广播该wakeup_en位,从而导致相应的消费者指令的active位被设置并且从而启动该消费者指令的计数器。当指令512的所有操作数可以被访问时,分派控制器130通过流水线寄存器506将指令512连同附加的wakeup_en位一起发送到级D4内。
在级D4内,可以是分派控制器130或者流水线控制逻辑120的部分的控制逻辑(未示出)广播指令512发送到指令执行级306内。该广播可以包括指令512的IID、CBID和wakeup_en位。指令512在级D4内的广播用于处理在级D1、D2和D3内的相应的消费者指令的操作数可用性位。在另一个实施例中,当指令512到达特定的级时指令512的广播可以发生。如果指令512写到完成缓冲区128并且同样当指令512写寄存器文件106时指令512再次广播它的CBID和IID。
图6是说明根据本发明实施例的重命名映射表600的示意图。重命名映射表600是重命名器122的部分。在本实施例中,重命名映射表600包括每一个条目的字段:CBID、寄存器标识(ID)、inRF、avail、BP_1、BP_2、active、CNT_1和CNT_2。重命名映射表600可以包括H个条目602a到602h(602a-h)。在实施例中,H是寄存器文件106内的寄存器的数量。寄存器由寄存器ID来标识。在实施例中,寄存器ID是逻辑的寄存器号。每一个寄存器都有唯一的寄存器ID。重命名映射表600内的条目600a-h中的每一个都有两个相关的计数器,计数器604a-h和计数器606a-h。计数器600a-h和计数器606a-h是重命名器122和/或重命名控制逻辑(未示出)的部分。CBID是5位,寄存器ID是5位,inRF是1位,avail是1位,active是1位,CNT_1是2位,CNT_2是2位以及BP_1和BP_2每一个1位。如这里描述的相关领域的技术人员应当理解的,在重命名映射表600内的每一个字段的位数都是任意的并且取决于实现方式。在实施例中,计数器604a-h和计数器606a-h是重命名控制逻辑(未示出)的部分。重命名映射表600可以包括其它字段(未示出)。
重命名映射表600的使用有助于减小乱序处理器100的相关性检查的复杂性。由重命名器122来进行寄存器的重命名从而避免在试图在寄存器文件106内写相同寄存器的不同指令之间的冲突。使用寄存器重命名的处理器典型地具有一组内部寄存器(诸如完成缓冲区128)以在结果被写入寄存器文件(诸如寄存器文件106)之前将该结果排队。寄存器重命名允许对寄存器文件106内相同寄存器的多个访问被映射到完成缓冲区128内的不同的内部寄存器,从而解决冲突。重命名映射表600内的每一个重命名条目都具有寄存器的最新提供者的CBID并且因此每一个消费者都知道它的操作数将来自于哪一个生产者。如所述的,在这里,重命名映射表600被修改以便存储操作数可用性位从而消除集中式记分板的需求。当消费者指令传送通过级D1时适当的操作数可用性位被附加于该消费者指令。
当指令512进入级D1(图5中所示)时,重命名器122从指令512中提取目的寄存器ID。CBID同样被分配给目的寄存器ID。重命名器122在重命名映射表600内查找相应的寄存器ID并且更新具有目的寄存器的CBID的条目,将avail设置为1(假设数据将是预测可用的),inRF设为0(因为指令512没有写到寄存器文件512内的目的寄存器),active设为0(因为指令512还没有被发送到执行级306内),BP_1和BP_2都设为0(因为与目的寄存器相关的计数器还没有开始计数),以及CNT_1和CNT_2从表1内的值初始化。
对于指令512的源操作数,重命名器122在重命名映射表600内查找相应的寄存器ID并且将指令512的每一个源操作数的相应的avail、inRF、active、BP、CNT_1和CNT_2值附加上。在实施例中,重命名器122同样将相应的CBID附加于指令512。如果指令没有源操作数(例如具有即时值(immediate value)的存储指令),那么没有位被附加于指令512。
图7是说明根据本发明实施例的指令分派缓冲区(IDB)700的示意图。IDB700是指令分派器124的部分。在本实施例中,IDB700包括指令的第一操作数的inRF1、avail1、active1、CNT1和BP1字段以及指令的第二操作数的inRF2、avail2、active2、CNT2和BP2字段,指令标识字段(IID)以及唤醒使能(wakeup_en)字段。IDB700可以包括J个条目702a到702j(702a-j)。在实施例中,IDB700同时保持6个指令并且J是6。指令通过IID来标识。每一个指令都有唯一的IID,该IID在例如级D1(在图5中)内被分配。IDB700同样可以包括每一个指令的源和目的操作数的CBID的字段(未示出)。IDB700内的每一个指令被分配条目702a-j中的一个。IDB700内的条目702a-j中的每一个都有相应的计数器704a-j和组合逻辑706a-j。计数器704a-j和组合逻辑706a-j可以是指令分派器124或者指令分派控制逻辑(未示出)的部分。IID是5位,inRF1、inRF2、avail1、avail2、BP1、BP2、active1和active2中的每一个1位,CNT1、CNT2和wakeup_en中的每一个2位。如这里描述的相关领域的技术人员应当理解的,在IDB 700内的每一个字段的位数是任意的并且取决于实现方式。IDB 700可以包括其它字段(未示出)。
当指令进入级D3(图5中所示)时,ID 124在IDB 700存储器储指令相应的操作数可用性位。基于IID组织IDB 700。ID 124基于指令是否是生产者以及指令是否是在那时操作数的最新的生产者而将wakeup_en值分配给IDB 700内的每一个指令条目。指令可以不是生产者或者指令可以不是它修改的操作数的最新的生产者。wakeup_en的示例在下面描述。
IDB 700存储指令,该指令正在等待由分派控制器130发送。IDB700内的指令被存储直到它们的操作数可用并且直到分派控制器130调度它们以发送。下面的表2基于avail、inRF和BP位说明了操作数的示例状态。
 
Avail inRF BP 操作数状态描述 操作数可用性    
0 0 0 不可能 N/A
0 0 1 生产者可能为加载失败
0 1 1 生产者可能为加载失败,它从主存储器或者硬盘读取数据                              
0 1 0 不可能 N/A
1 0 0 生产者被发送,计数器已经启动但是生产者还没有到达可设旁路的级                    
1 0 1 生产者被发送并且已经到达可设旁路的级
1 1 0 不可能 N/A
1 1 1 生产者已经完成写寄存器文件
表2
在处理器200的情况下,存在2个IDB,每一个分别在ID 124a和ID 124b内。在处理器200内,一个IDB(未示出)与AGEN 126a流水线相关而另一个IDB(未示出)与ALU 126b流水线相关。
在IDB 700内等待被发送的指令在每一个时针周期都被测试操作数可用性。在实施例中,使用公式(2)的inRF、avail和BP位的逻辑组合决定了操作数是否可用并且指令是否准备好被发送。实现公式(2)以测试操作数和分派准备就绪的示例组合逻辑在图8中说明。IDB 700内最老的指令由分派控制器130从IDB 700内所有具有可用的操作数的指令中选出来。或者,分派控制器130可以基于不同的方案(scheme)来调度指令发送。在实施例中,分派控制器130是ID 124的部分。
一旦指令发送到执行级306内,该指令就唤醒IDB 700、重命名映射表600和级D2(图5中所示)内的它的消费者指令的计数器。这通过广播所发送的指令的相应CBID和wakeup_en位来完成。如果在各自的流水线级内,消费者指令的操作数的相应CBID与广播的CBID相匹配,那么作为广播的结果,级D1内的重命名器122、级D2内的选择控制逻辑510和级D3内的IDB 700将active位设置为1。当active被置为1时,相应的计数器将开始计数并且当它到达零时,相应的BP位被置为1,并且操作数可以旁路。
在写寄存器文件级308内,生产者指令的目的操作数数据从CBID 128被写入寄存器文件106。写寄存器文件308导致所写的寄存器的CBID和寄存器ID的广播从而改变在级D1内的IDB 700、级D2内的重命名映射表600和级D3内的相应条目的操作数可用性位。如果在源操作数CBID与被写到寄存器文件106的寄存器的广播CBID之间存在匹配,那么因为操作数现在在寄存器文件106内是可用的,IDB 700将相应的源操作数的inRF位设置为1。
在实施例中,IDB 700、重命名器124和选择控制逻辑510将在它们各自的流水线级内的源操作数CBID与指令写完成缓冲区128时广播的CBID进行比较。如果在源操作数CBID与广播的CBID之间存在匹配,那么因为操作数现在是预知可用的(即使它们还没有被写到寄存器文件106),IDB 700、重命名器124和选择控制逻辑510将相应源操作数的inRF和avail位设置为1。
对于具有长的完成等待时间的生产者指令(诸如乘法指令),重命名器122在重命名映射表600内将长等待时间指令要修改的操作数的avail位设置为0。只有当由长等待时间生产者修改的操作数在处理器100内是预知可用的以及长等待时间生产者的广播指示了操作数的预知可用性时,avail位在IDB 700、重命名映射表600内以及在级D2内才被设置为1。
存储在IDB 700内的用于每一个指令的wakeup_en值都通过ID124附加于指令。当分派控制器130将指令从IDB 700发送时,wakeup_en位与该指令一起被传送。例如,在图5中,指令512被附加有wakeup_en值并且通过寄存器508被传送到级D4内。
wakeup_en,连同相应的CBID一起,由进入指令执行级306的生产者指令广播。wakeup_en的广播将IDB 700、重命名映射表600内以及级D2内的相应的源操作数的active位设置为1。根据wakeup_en的值,active位可以根本不被设置或者active位的设置可以被延迟。例如,如果wakeup_en是00,那么计数器不起动。如果wakeup_en是01,在相同周期内active位被设置为1并且计数器被启动。如果wakeup_en是10那么计数器在一预定时间段之后被启动并且在该预定时间段(例如两个时钟周期)之后将active位同样设置为1。如果wakeup_en是11,则计数器在另一预定时间段之后被启动并且在该预定时间段(例如四个时钟周期)之后将active位设置为1。active位设置为1的延迟将相应计数器的触发延迟且因此延迟了消费者指令的发送。在实施例中,ID 124基于生产者指令的类型查找wakeup_en值的表,如下面表3中的一样:
 
指令类型 Wakeup_en
01
10
11
表3
指令的wakeup_en值可以在它通过ID 124发送后改变。例如,如果生产者指令是无效的,则它的wakeup_en可以由例如流水线控制逻辑120设置为00。
在实施例中,长等待时间指令广播wakeup_en位的值以延迟相应的消费者源操作数的active位的设置。典型地,长等待时间指令一旦发送到执行级306内就广播它的wakeup_en值和相应的CBID。
在不可预测的生产者指令的情况下(例如具有高速缓存失败的加载指令),相应的CBID广播导致在IDB 700、重命名映射表600和级D2内的相应消费者源操作数的avail位被设置为0以指示加载已经失败并且操作数值是不可用的。
IDB 700同样由于指令取消(kill)而更新。例如如果分支预测错误或者发生异常时,指令取消可以发生。在多线程的情况下,指令取消使指令在该线程内无效。对于非多线程的情况,IDB 700内的所有条目在流水线刷新(flush)时被移除并且重命名映射表600被复位。在多线程的情况下,某些线程可以被取消并且它们在IDB 700内相应的条目和相应的重命名映射表被复位。
图8是说明根据本发明实施例的电路800的示意图。电路800是组合逻辑706的示例实现。电路800用于测试指令是否准备好通过ID 124发送。电路800可以用于实现公式2。电路800包括用于确定指令的源操作数是否可用的电路802和804。电路802和804中的每一个都可以用于实现公式1。
电路802包括或门806和与门808。或门806从IDB 700接收指令的第一源操作数的inRF1和BP1的输入。或门806的结果作为输入被供给到与门808。与门808同样从IDB 700接收avail1作为输入。与门808的输出816指示指令的第一源操作数的可用性。在示例中,如果输出816是0,则它指示该第一源操作数是不可用的;而如果输出816是1,则它指示该第一源操作数是可用的。
与电路802类似,电路804包括或门810和与门812。或门810从IDB 700接收指令的第二源操作数的inRF2和BP2的输入。或门810的结果作为输入被供给与门812。与门812同样从IDB700接收avail2作为输入。与门812的输出820指示指令的第二源操作数的可用性。在示例中,如果输出820是0,则它指示该第二源操作数是不可用的;而如果输出820是1,则它指示该第二源操作数是可用的。
电路802和804各自的输出816和820作为输入被供给与门814。与门814的输出822指示指令是否准备好被发送。
图9说明了根据本发明实施例的用于控制消费者指令的active和BP位的状态机900。状态机900可以是ID 124的部分并且被复制用于IDB 700内的每一个条目。状态机900同样可以是重命名器700和选择控制逻辑510的部分。状态机900包括三个状态902、904和906。
在状态902中,当start(起动标记)为假(false)时active为0且BP为0。Start是基于wakeup_en值的标记。作为默认值start为假并且是取决于生产者指令的wakeup_en广播的。例如,如果生产者广播wakeup_en为00,则start保持为假。如果广播wakeup_en为01,则在相同时钟周期内start被设置为真(true)。如果wakeup_en为10,则在收到该广播之后2个时钟周期start被设置为真。如果wakeup_en为11,则在收到该广播之后四个时钟周期start被设置为真。周期数和示例wakeup_en值是任意的并且可以根据实现方式而改变。当start被设为真时,控制转移到状态904。
在状态904中,相应的源操作数的active位被设置为1并且相应的计数器被触发。该计数器每一个周期都减小相应的计数值(CNT)。下面参考图10描述了示例计数器。当CNT大于0时控制保持在状态904。在状态904中旁路使能位BP同样为0。当CNT为0时,控制转移到状态906。
在状态906中,因为CNT为0,所以BP被设为1并且相应的消费者指令可以被发送使得在执行之前从生产者指令接收到旁路的操作数值。控制保持在状态906直到为了下一个指令它被复位回到状态902。
状态机900可以在硬件、软件和固件或者它们的任何组合中实现。
图10是说明根据本发明实施例的计数器1000的示例实施例的示意图。计数器1000可以被用在重命名器600、IDB700和选择控制逻辑510中以在收到来自相应的生产者指令的广播时对消费者源操作数的计数值进行向下计数。计数器1000由重命名器600或者在级D2内由控制逻辑510进行初始化以具有初始的计数值。计数器1000包括四个移位寄存器1002a-d。每一个移位寄存器1002都包括置位输入(S)、复位输入(R)、时钟输入(CLK)、数据输入(IN)和数据输出(Q)。在本实施例中,每一个移位寄存器1000都接收相同的时钟信号CLK_IN1006。每一个移位寄存器都可以通过数据输入(IN)或者通过置位和复位输入进行初始化以具有初始的计数值。一旦计数器1000被触发它就通过每个周期向右移动一位来减小计数值。在实施例中,当最低有效位的移位寄存器1002d收到1并且移位寄存器1002a-c是0时,相应的BP位被设为1。
在这里提出的实施例中,示例指令有两个源操作数和一个目的操作数。在其它实施例中,指令有一个或多个源操作数和多个目的操作数。操作数可用性位avail、inRF、active、BP和计数器值也被称为局部的或者分布式记分板,这是因为它们被附加于指令并且被传送经过处理器100的多个流水线级。虽然为了简化说明而没有示出,但是应当理解源操作数和目的操作数的CBID、IID和寄存器ID同样可以被传送经过多个流水线级。在实施例中,生产者指令的广播可以包括指令的CBID以及所修改的操作数的CBID。在这里提出的示例中,计数值是2位以限制计数器和寄存器的大小。应当理解计数值的大小是任意的并且取决于实现方式。
虽然前面完整描述了本发明的示例性实施例,但是应当明白可以作出并且使用各种修改、替代方案和等效物。同样应当理解这里所提供的本发明的详细描述(不是发明内容和摘要部分),希望用于解释权利要求。发明内容和摘要部分可以陈述如发明人所预期的一个或多个但是不是所有的本发明的示例性实施例。
例如,除了使用硬件的实现(例如耦连到中央处理器(“CPU”)或位于其中、微处理器、微控制器、数字信号处理器、处理器核、片上系统(“SOC”)、或者任何其它可编程的或电子的器件)之外,各实施方式同样可以用例如配置为存储软件的计算机可用的(例如,可读的)介质内设置的软件(例如,计算机可读代码、程序代码、指令和/或以诸如源、对象或机器语言的任何形式设置的数据)来实现。这样的软件可以实现例如这里所描述的装置和方法的功能、制造、建模、仿真、描述、和/或测试。例如,这可以通过使用通用编程语言(例如,C、C++)、GDSII数据库、包括Verilog HDL、VHDL等的硬件描述语言(HDL)、或者其它可用的程序、数据库、和/或电路(即示意图)捕捉工具(capture tool)来实现。这样的软件可以被设置在包括半导体、磁盘、光盘(例如,CD-ROM、DVD-ROM等)的任何已知的计算机可用的介质内并且作为在计算机可用的(例如,可读的)传输介质(例如,载波或者包括基于数字的、光学的、或模拟的介质的任何其它的介质)中实现的计算机数据信号。同样的,该软件可以通过包括互联网和内联网的通信网络来传输。
应当理解,这里所描述的装置和方法的实施例可以被包括在诸如微处理器核的半导体知识产权核内(例如,用HDL实现)并且被转换为集成电路产品中的硬件。另外,这里所描述的装置和方法可以被实现为硬件和软件的组合。因此,本发明不应该被任何上述的示例性实施例所限制,而应该仅根据下面的权利要求和它们的等效物来限定。

Claims (27)

1.一种处理器的指令分派单元,包括:
控制逻辑,将多个操作数可用性位附加于指令;
指令缓冲区,存储指令和多个操作数可用性位;以及
指令分派器,至少部分基于存储在该指令缓冲区内的多个操作数可用性位而确定指令何时被发送到处理器的执行单元。
2.权利要求1的指令分派单元,其中操作数可用性位与指令一同被传送经过多个流水线级。
3.权利要求1的指令分派单元,其中多个操作数可用性位包括计数器值。
4.权利要求1的指令分派单元,其中多个操作数可用性位包括用于触发计数器的值。
5.权利要求1的指令分派单元,其中多个操作数可用性位包括用于指示在寄存器内指令的源操作数的可用性的值。
6.权利要求5的指令分派单元,其中寄存器是通用寄存器、累加器寄存器和协处理器寄存器中的一个。
7.权利要求1的指令分派单元,其中多个操作数可用性位包括用于指示在完成缓冲区内指令的源操作数的预知可用性的值。
8.权利要求1的指令分派单元,其中控制逻辑包括重命名映射表。
9.一种处理器核,包括:
指令分派单元,其包括:
控制逻辑,将多个操作数可用性位附加于指令;
指令缓冲区,存储指令和多个操作数可用性位;以及
指令分派器,至少部分基于存储在该指令缓冲区内的多个操作数可用性位而确定指令何时被发送到处理器的执行单元。
10.权利要求9的处理器核,其中操作数可用性位与指令一同被传送经过多个流水线级。
11.权利要求9的处理器核,其中多个操作数可用性位包括计数器值。
12.权利要求9的处理器核,其中多个操作数可用性位包括用于触发计数器的值。
13.权利要求9的处理器核,其中多个操作数可用性位包括用于指示在寄存器内指令的源操作数的可用性的值。
14.权利要求13的处理器核,其中寄存器是通用寄存器、累加器寄存器和协处理器寄存器中的一个。
15.权利要求9的处理器核,其中多个操作数可用性位包括用于指示在完成缓冲区内指令的源操作数的预知可用性的值。
16.权利要求9的处理器核,其中控制逻辑包括重命名映射表。
17.一种计算机可读存储介质,包括用软件实现的具有乱序流水线的处理器核,该处理器核包括:
指令分派单元,其包括:
控制逻辑,将多个操作数可用性位附加于指令;
指令缓冲区,存储指令和多个操作数可用性位;以及
指令分派器,至少部分基于存储在该指令缓冲区内的多个操作数可用性位而确定指令何时被发送到处理器的执行单元。
18.权利要求17的计算机可读存储介质,其中操作数可用性位与指令一同被传送经过多个流水线级。
19.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括计数器值。
20.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括用于触发计数器的值。
21.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括用于指示在寄存器内指令的源操作数的可用性的值。
22.权利要求21的计算机可读存储介质,其中寄存器是通用寄存器、累加器寄存器和协处理器寄存器中的一个。
23.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括用于指示在完成缓冲区内的指令的源操作数的预知可用性的值。
24.权利要求17的计算机可读存储介质,其中控制逻辑包括重命名映射表。
25.权利要求17的计算机可读存储介质,其中处理器核用硬件描述语言软件实现。
26.权利要求17的计算机可读存储介质,其中该处理器核用Verilog硬件描述语言软件实现。
27.权利要求17的计算机可读存储介质,其中该处理器核用VHDL硬件描述语言软件实现。
CN200780007020.XA 2006-02-28 2007-02-12 乱序处理器中的分布式记分板调度 Expired - Fee Related CN101395573B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/362,764 US7721071B2 (en) 2006-02-28 2006-02-28 System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
US11/362,764 2006-02-28
PCT/US2007/003752 WO2007100487A2 (en) 2006-02-28 2007-02-12 Distributive scoreboard scheduling in an out-of-order processor

Publications (2)

Publication Number Publication Date
CN101395573A true CN101395573A (zh) 2009-03-25
CN101395573B CN101395573B (zh) 2012-06-06

Family

ID=38265592

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200780007020.XA Expired - Fee Related CN101395573B (zh) 2006-02-28 2007-02-12 乱序处理器中的分布式记分板调度

Country Status (4)

Country Link
US (1) US7721071B2 (zh)
CN (1) CN101395573B (zh)
GB (1) GB2448276B (zh)
WO (1) WO2007100487A2 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107851028A (zh) * 2015-08-14 2018-03-27 高通股份有限公司 将指令操作数的窄生成值直接存储在乱序处理器中的寄存器映射中
CN108279928A (zh) * 2018-01-30 2018-07-13 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置
CN108415730A (zh) * 2018-01-30 2018-08-17 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置
CN109074260A (zh) * 2016-04-28 2018-12-21 微软技术许可有限责任公司 乱序的基于块的处理器和指令调度器
CN111258657A (zh) * 2020-01-23 2020-06-09 上海燧原智能科技有限公司 流水线控制方法及相关设备
CN111506347A (zh) * 2020-03-27 2020-08-07 上海赛昉科技有限公司 一种基于指令写后读相关假设的重命名的方法
CN111538534A (zh) * 2020-04-07 2020-08-14 江南大学 一种基于指令凋零的多指令乱序发射方法及处理器
CN114610394A (zh) * 2022-03-14 2022-06-10 海飞科(南京)信息技术有限公司 指令调度的方法、处理电路和电子设备

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990543B2 (en) 2008-03-11 2015-03-24 Qualcomm Incorporated System and method for generating and using predicates within a single instruction packet
US7502918B1 (en) 2008-03-28 2009-03-10 International Business Machines Corporation Method and system for data dependent performance increment and power reduction
FR2941117B1 (fr) * 2009-01-15 2011-02-11 Peugeot Citroen Automobiles Sa Procede et dispositif de controle du reveil, d'organes appartenant a au moins un reseau multiplexe, par comptage de reveils intempestifs
WO2011134861A1 (en) * 2010-04-26 2011-11-03 Dong Energy A/S Dispatch controller for a distributed electrical power system
CN102215162B (zh) * 2011-03-24 2014-07-30 无锡众志和达数据计算股份有限公司 一种基于现场可编程门阵列的光纤i/o乱序帧处理方法
US9529596B2 (en) 2011-07-01 2016-12-27 Intel Corporation Method and apparatus for scheduling instructions in a multi-strand out of order processor with instruction synchronization bits and scoreboard bits
KR101667167B1 (ko) 2012-06-15 2016-10-17 소프트 머신즈, 인크. Load store 재정렬 및 최적화로부터 생기는 투기적 포워딩 예측 착오/오류로부터의 복원을 구현하는 방법 및 시스템
KR101996592B1 (ko) 2012-06-15 2019-07-04 인텔 코포레이션 명확화 없는 비순차 load store 큐를 갖는 재정렬된 투기적 명령어 시퀀스들
EP2862087A4 (en) 2012-06-15 2016-12-14 Soft Machines Inc UNIQUE IRREGULAR CHARGING / STORAGE MAINTENANCE
EP2862069A4 (en) 2012-06-15 2016-12-28 Soft Machines Inc DEFINING INSTRUCTIONS TO REORDER AND OPTIMIZE LOADING AND STORAGE
WO2013188460A2 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A virtual load store queue having a dynamic dispatch window with a distributed structure
KR101996351B1 (ko) 2012-06-15 2019-07-05 인텔 코포레이션 통합된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
US20140129805A1 (en) * 2012-11-08 2014-05-08 Nvidia Corporation Execution pipeline power reduction
US9424041B2 (en) * 2013-03-15 2016-08-23 Samsung Electronics Co., Ltd. Efficient way to cancel speculative ‘source ready’ in scheduler for direct and nested dependent instructions
WO2016097811A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on fuse array access in out-of-order processor
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
US9645827B2 (en) 2014-12-14 2017-05-09 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
JP6286065B2 (ja) 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサの書き込み結合メモリ領域アクセスに依存するロードリプレイを除外する装置及び方法
US10089112B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
WO2016097802A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on long load cycles in an out-order processor
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
US9740271B2 (en) 2014-12-14 2017-08-22 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
WO2016097803A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
KR101822726B1 (ko) 2014-12-14 2018-01-26 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 로드 리플레이를 억제하는 메커니즘
US10114794B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
WO2016097790A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in out-of-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
KR101819315B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 작성 결합 메모리 공간 접근에 따라 로드 리플레이를 억제하기 위한 장치 및 방법
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US10095514B2 (en) 2014-12-14 2018-10-09 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10108429B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared RAM-dependent load replays in an out-of-order processor
US9703359B2 (en) 2014-12-14 2017-07-11 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
KR101819314B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 오프­다이 제어 부재 접근에 따라 로드 리플레이를 억제하는 장치
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
CN105653790B (zh) * 2015-12-29 2019-03-29 东南大学—无锡集成电路技术研究所 一种基于人工神经网络的乱序处理器Cache访存性能评估方法
US10445100B2 (en) * 2016-06-09 2019-10-15 International Business Machines Corporation Broadcasting messages between execution slices for issued instructions indicating when execution results are ready
GB2563582B (en) 2017-06-16 2020-01-01 Imagination Tech Ltd Methods and systems for inter-pipeline data hazard avoidance
US11429555B2 (en) * 2019-02-26 2022-08-30 Apple Inc. Coprocessors with bypass optimization, variable grid architecture, and fused vector operations
US10956168B2 (en) * 2019-03-08 2021-03-23 International Business Machines Corporation Post completion execution in an out-of-order processor design
US11086626B2 (en) * 2019-10-24 2021-08-10 Arm Limited Circuitry and methods
CN113867793A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
US11687347B2 (en) * 2021-05-25 2023-06-27 Andes Technology Corporation Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard

Family Cites Families (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5109520A (en) 1985-02-19 1992-04-28 Tektronix, Inc. Image frame buffer access speedup by providing multiple buffer controllers each containing command FIFO buffers
US5021945A (en) * 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
US5781753A (en) 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
US5091851A (en) 1989-07-19 1992-02-25 Hewlett-Packard Company Fast multiple-word accesses from a multi-way set-associative cache memory
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
EP0461923B1 (en) 1990-06-15 1997-10-01 Compaq Computer Corporation True least recently used replacement apparatus
EP0871108B1 (en) 1991-03-11 2000-09-13 MIPS Technologies, Inc. Backward-compatible computer architecture with extended word size and address space
US5961629A (en) 1991-07-08 1999-10-05 Seiko Epson Corporation High performance, superscalar-based computer system with out-of-order instruction execution
US5493667A (en) 1993-02-09 1996-02-20 Intel Corporation Apparatus and method for an instruction cache locking scheme
US6079014A (en) 1993-12-02 2000-06-20 Intel Corporation Processor that redirects an instruction fetch pipeline immediately upon detection of a mispredicted branch while committing prior instructions to an architectural state
US5493523A (en) 1993-12-15 1996-02-20 Silicon Graphics, Inc. Mechanism and method for integer divide involving pre-alignment of the divisor relative to the dividend
US5510934A (en) 1993-12-15 1996-04-23 Silicon Graphics, Inc. Memory system including local and global caches for storing floating point and integer data
US5537538A (en) 1993-12-15 1996-07-16 Silicon Graphics, Inc. Debug mode for a superscalar RISC processor
US5604909A (en) 1993-12-15 1997-02-18 Silicon Graphics Computer Systems, Inc. Apparatus for processing instructions in a computing system
US5572704A (en) 1993-12-15 1996-11-05 Silicon Graphics, Inc. System and method for controlling split-level caches in a multi-processor system including data loss and deadlock prevention schemes
US5526504A (en) 1993-12-15 1996-06-11 Silicon Graphics, Inc. Variable page size translation lookaside buffer
US5740402A (en) 1993-12-15 1998-04-14 Silicon Graphics, Inc. Conflict resolution in interleaved memory systems with multiple parallel accesses
US6393550B1 (en) 1993-12-30 2002-05-21 Intel Corporation Method and apparatus for pipeline streamlining where resources are immediate or certainly retired
US5606683A (en) 1994-01-28 1997-02-25 Quantum Effect Design, Inc. Structure and method for virtual-to-physical address translation in a translation lookaside buffer
US5586278A (en) 1994-03-01 1996-12-17 Intel Corporation Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor
US5555432A (en) * 1994-08-19 1996-09-10 Intel Corporation Circuit and method for scheduling instructions by predicting future availability of resources required for execution
WO1996012229A1 (en) 1994-10-14 1996-04-25 Silicon Graphics, Inc. Indexing and multiplexing of interleaved cache memory arrays
WO1996012228A1 (en) 1994-10-14 1996-04-25 Silicon Graphics, Inc. Redundant mapping tables
WO1996012231A1 (en) 1994-10-14 1996-04-25 Silicon Graphics, Inc. A translation buffer for detecting and preventing conflicting virtual addresses from being stored therein
US6216200B1 (en) 1994-10-14 2001-04-10 Mips Technologies, Inc. Address queue
US5625789A (en) 1994-10-24 1997-04-29 International Business Machines Corporation Apparatus for source operand dependendency analyses register renaming and rapid pipeline recovery in a microprocessor that issues and executes multiple instructions out-of-order in a single cycle
US5675758A (en) 1994-11-15 1997-10-07 Advanced Micro Devices, Inc. Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations
US5546545A (en) 1994-12-09 1996-08-13 International Business Machines Corporation Rotating priority selection logic circuit
US5732242A (en) 1995-03-24 1998-03-24 Silicon Graphics, Inc. Consistently specifying way destinations through prefetching hints
US5799165A (en) 1996-01-26 1998-08-25 Advanced Micro Devices, Inc. Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay
US5764999A (en) 1995-10-10 1998-06-09 Cyrix Corporation Enhanced system management mode with nesting
US5670898A (en) 1995-11-22 1997-09-23 Silicon Graphics, Inc. Low-power, compact digital logic topology that facilitates large fan-in and high-speed circuit performance
US5734881A (en) 1995-12-15 1998-03-31 Cyrix Corporation Detecting short branches in a prefetch buffer using target location information in a branch target cache
US6108769A (en) 1996-05-17 2000-08-22 Advanced Micro Devices, Inc. Dependency table for reducing dependency checking hardware
GB2317469B (en) 1996-09-23 2001-02-21 Advanced Risc Mach Ltd Data processing system register control
US5966734A (en) 1996-10-18 1999-10-12 Samsung Electronics Co., Ltd. Resizable and relocatable memory scratch pad as a cache slice
US5802386A (en) * 1996-11-19 1998-09-01 International Business Machines Corporation Latency-based scheduling of instructions in a superscalar processor
US5909572A (en) 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US5864341A (en) 1996-12-09 1999-01-26 International Business Machines Corporation Instruction dispatch unit and method for dynamically classifying and issuing instructions to execution units with non-uniform forwarding
US6044478A (en) 1997-05-30 2000-03-28 National Semiconductor Corporation Cache with finely granular locked-down regions
US6286130B1 (en) * 1997-08-05 2001-09-04 Intel Corporation Software implemented method for automatically validating the correctness of parallel computer programs
US6076159A (en) 1997-09-12 2000-06-13 Siemens Aktiengesellschaft Execution of a loop instructing in a loop pipeline after detection of a first occurrence of the loop instruction in an integer pipeline
US6085315A (en) 1997-09-12 2000-07-04 Siemens Aktiengesellschaft Data processing device with loop pipeline
US6223278B1 (en) 1998-11-05 2001-04-24 Intel Corporation Method and apparatus for floating point (FP) status word handling in an out-of-order (000) Processor Pipeline
US6308252B1 (en) 1999-02-04 2001-10-23 Kabushiki Kaisha Toshiba Processor method and apparatus for performing single operand operation and multiple parallel operand operation
EP1209559A1 (en) * 1999-04-22 2002-05-29 Hajime Seki Computer system
US6473837B1 (en) 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Snoop resynchronization mechanism to preserve read ordering
US6546477B1 (en) 1999-09-20 2003-04-08 Texas Instruments Incorporated Memory management in embedded systems with dynamic object instantiation
US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6643767B1 (en) * 2000-01-27 2003-11-04 Kabushiki Kaisha Toshiba Instruction scheduling system of a processor
US6430655B1 (en) 2000-01-31 2002-08-06 Mips Technologies, Inc. Scratchpad RAM memory accessible in parallel to a primary cache
US20010052053A1 (en) 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US7032226B1 (en) 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US6557127B1 (en) 2000-02-28 2003-04-29 Cadence Design Systems, Inc. Method and apparatus for testing multi-port memories
US6915395B1 (en) 2000-05-03 2005-07-05 Sun Microsystems, Inc. Active address content addressable memory
US6757817B1 (en) 2000-05-19 2004-06-29 Intel Corporation Apparatus having a cache and a loop buffer
US6505285B1 (en) 2000-06-26 2003-01-07 Ncr Corporation Scratch segment subsystem for a parallel processing database system
US6760835B1 (en) 2000-11-22 2004-07-06 Lsi Logic Corporation Instruction branch mispredict streaming
KR20040101231A (ko) * 2002-03-05 2004-12-02 인터내셔널 비지네스 머신즈 코포레이션 외부적으로 트리거링되는 이벤트와 연관된 데이터/명령을예비 인출하는 방법
US7398375B2 (en) * 2002-04-04 2008-07-08 The Regents Of The University Of Michigan Technique for reduced-tag dynamic scheduling and reduced-tag prediction
US6836833B1 (en) 2002-10-22 2004-12-28 Mips Technologies, Inc. Apparatus and method for discovering a scratch pad memory configuration
US7159103B2 (en) 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US7418575B2 (en) * 2003-07-29 2008-08-26 Stretch, Inc. Long instruction word processing with instruction extensions
US7263599B2 (en) * 2004-02-06 2007-08-28 Infineon Technologies Thread ID in a multithreaded processor
US7219185B2 (en) * 2004-04-22 2007-05-15 International Business Machines Corporation Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache
US20060095732A1 (en) * 2004-08-30 2006-05-04 Tran Thang M Processes, circuits, devices, and systems for scoreboard and other processor improvements

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107851028A (zh) * 2015-08-14 2018-03-27 高通股份有限公司 将指令操作数的窄生成值直接存储在乱序处理器中的寄存器映射中
CN109074260A (zh) * 2016-04-28 2018-12-21 微软技术许可有限责任公司 乱序的基于块的处理器和指令调度器
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
CN108279928A (zh) * 2018-01-30 2018-07-13 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置
CN108415730A (zh) * 2018-01-30 2018-08-17 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置
CN108415730B (zh) * 2018-01-30 2021-06-01 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置
CN111258657A (zh) * 2020-01-23 2020-06-09 上海燧原智能科技有限公司 流水线控制方法及相关设备
CN111258657B (zh) * 2020-01-23 2020-11-20 上海燧原智能科技有限公司 流水线控制方法及相关设备
CN111506347B (zh) * 2020-03-27 2023-05-26 上海赛昉科技有限公司 一种基于指令写后读相关假设的重命名的方法
CN111506347A (zh) * 2020-03-27 2020-08-07 上海赛昉科技有限公司 一种基于指令写后读相关假设的重命名的方法
CN111538534A (zh) * 2020-04-07 2020-08-14 江南大学 一种基于指令凋零的多指令乱序发射方法及处理器
CN111538534B (zh) * 2020-04-07 2023-08-08 江南大学 一种基于指令凋零的多指令乱序发射方法及处理器
CN114610394A (zh) * 2022-03-14 2022-06-10 海飞科(南京)信息技术有限公司 指令调度的方法、处理电路和电子设备
CN114610394B (zh) * 2022-03-14 2023-12-22 海飞科(南京)信息技术有限公司 指令调度的方法、处理电路和电子设备

Also Published As

Publication number Publication date
GB2448276B (en) 2011-06-15
WO2007100487A2 (en) 2007-09-07
US20070204135A1 (en) 2007-08-30
CN101395573B (zh) 2012-06-06
US7721071B2 (en) 2010-05-18
GB2448276A (en) 2008-10-08
WO2007100487A3 (en) 2007-11-22
GB0814234D0 (en) 2008-09-10

Similar Documents

Publication Publication Date Title
CN101395573B (zh) 乱序处理器中的分布式记分板调度
JP4170292B2 (ja) データの投機的実行をサポートするマイクロプロセッサで用いるスケジューラ
CN101449237B (zh) 快速和廉价的存储-加载冲突调度和转送机制
US7502914B2 (en) Transitive suppression of instruction replay
US7647475B2 (en) System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
US8032734B2 (en) Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
CN108196884B (zh) 利用生成重命名的计算机信息处理器
US8874880B2 (en) Instruction tracking system for processors
US20050247774A1 (en) System and method for validating a memory file that links speculative results of load operations to register values
US20040177236A1 (en) System and method for linking speculative results of load operations to register values
US20080082788A1 (en) Pointer-based instruction queue design for out-of-order processors
CN101194225A (zh) 其中条件指令无条件提供输出的系统及方法
EP1499958A1 (en) System and method of using speculative source operands in order to bypass load/store operations
US5689674A (en) Method and apparatus for binding instructions to dispatch ports of a reservation station
US10296341B2 (en) Latest producer tracking in an out-of-order processor, and applications thereof
US11269647B2 (en) Finish status reporting for a simultaneous multithreading processor using an instruction completion table
US20100306513A1 (en) Processor Core and Method for Managing Program Counter Redirection in an Out-of-Order Processor Pipeline
US7937569B1 (en) System and method for scheduling operations using speculative data operands
JPH04503582A (ja) コンピュータの分散型パイプライン制御装置及び方法
US7844859B2 (en) Method and apparatus for instruction trace registers
JP4996945B2 (ja) データ処理装置、データ処理方法
US10983801B2 (en) Load/store ordering violation management
US20130019085A1 (en) Efficient Recombining for Dual Path Execution
US11068274B2 (en) Prioritized instructions in an instruction completion table of a simultaneous multithreading processor
US11537402B1 (en) Execution elision of intermediate instruction by processor

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: ARM FINANCE OVERSEAS LTD.

Free format text: FORMER OWNER: BRIDGE DECK LLC

Effective date: 20141208

Owner name: BRIDGE DECK LLC

Free format text: FORMER OWNER: MIPS TECHNOLOGIES INC.

Effective date: 20141208

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20141208

Address after: cambridge

Patentee after: ARM Overseas Finance Co.,Ltd.

Address before: American New Jersey

Patentee before: Overpass Bridge Co.,Ltd.

Effective date of registration: 20141208

Address after: American New Jersey

Patentee after: Overpass Bridge Co.,Ltd.

Address before: American California

Patentee before: MIPS Technologies, Inc.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120606