CN102541511A - 用于可乱序执行指令的处理器的流水线排空 - Google Patents
用于可乱序执行指令的处理器的流水线排空 Download PDFInfo
- Publication number
- CN102541511A CN102541511A CN2010106247550A CN201010624755A CN102541511A CN 102541511 A CN102541511 A CN 102541511A CN 2010106247550 A CN2010106247550 A CN 2010106247550A CN 201010624755 A CN201010624755 A CN 201010624755A CN 102541511 A CN102541511 A CN 102541511A
- Authority
- CN
- China
- Prior art keywords
- instruction
- streamline
- data
- response
- emptying
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 230000015654 memory Effects 0.000 claims abstract description 82
- 238000012545 processing Methods 0.000 claims abstract description 30
- 230000004044 response Effects 0.000 claims description 46
- 230000015572 biosynthetic process Effects 0.000 claims description 30
- 238000013500 data storage Methods 0.000 claims description 15
- 238000013507 mapping Methods 0.000 claims description 2
- 238000005265 energy consumption Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 18
- 239000003795 chemical substances by application Substances 0.000 description 12
- 238000005755 formation reaction Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明的实施方式涉及用于可乱序执行指令的处理器的流水线排空。具体地,指令流水线的一个实施方式包括第一部分和第二部分。第一部分可操作用于提供有序的第一指令和第二指令;并且第二部分可操作用于响应于第二指令而从数据存储位置读取第一数据,可操作用于响应于第一指令而在读取第一数据之后向该数据存储位置写入第二数据,以及可操作用于响应于在读取第一数据之后写入第二数据而致使流水线的某些但非全部的排空。这种指令流水线可以通过仅排空部分流水线而非排空整个流水线来降低由流水线排空引起的处理时间损失和消耗的能量。
Description
技术领域
本发明的实施方式总体上涉及计算机技术,并且更具体地,涉及用于可乱序执行指令的处理器的流水线排空(flush)的方法和系统。
发明内容
提供“发明内容”是为了以简化形式介绍下文将在“具体实施方式”中详述的概念选择。本“发明内容”并非意在标识要求保护主题的关键特征或者必要特征,也非意在限制要求保护主题的范围。
指令流水线的一个实施方式包括第一部分和第二部分。第一部分可操作用于提供有序的第一指令和第二指令;并且第二部分可操作用于响应于第二指令而从数据存储位置读取第一数据,可操作用于响应于第一指令而在读取第一数据之后向该数据存储位置写入第二数据,以及可操作用于响应于在读取第一数据之后写入第二数据而致使流水线的某些但非全部的排空。
在一个实施方式中,这种指令流水线可以通过仅排空部分流水线而非排空整个流水线来降低由流水线排空引起的处理时间损失和消耗的能量。例如, 超标量处理器可以响应于错误推测(mis-speculative)装载指令而执行这种部分流水线排空,其中错误推测装载指令是在相对于某存储器位置的存储指令的执行之前相对于同一存储器位置而执行的装载指令,其中在指令顺序中,存储指令在装载指令之前到来。处理器可以这样来执行这种部分流水线排空:从重排序缓冲区重新装载指令发布队列,使得流水线的取指-译码部分无需刷新并因此不进行刷新。
附图说明
图1是具有指令流水线的超标量处理器的实施方式的框图。
图2是图1的指令流水线的一个实施方式的框图,其中详细示出了存储-装载流水线分支的一个实施方式。
图3是相对于同一存储器位置的存储和装载指令的按序执行的流程图。
图4是相对于同一存储器位置的存储和装载指令的乱序执行的流程图。
图5是在其间或之前执行相对于存储器位置的装载指令的操作状态期间的、图2的指令流水线的实施方式的框图。
图6是图5的操作状态之后的、在其间发布相对于同一存储器位置的存储指令的操作状态期间的、图2的指令流水线的实施方式的框图。
图7是图6的操作状态之后的、在其间由于错误推测而标记先前执行的装载指令的操作状态期间的、图2的指令流水线的实施方式的框图。
图8是图7的操作状态之后的、在其间排空流水线的部分而非全部的操作状态期间的、图2的指令流水线的实施方式的框图。
图9是图8的操作状态之后的、在其间利用重排序缓冲区中存储的指令重新填入指令发布队列的操作状态期间的、图2的指令流水线的实施方式的框图。
图10是图9的操作状态之后的、在其间指令流水线的操作返回正常的操作状态期间的、图2的指令流水线的实施方式的框图。
图11是包括具有图2的指令流水线的实施方式的超标量处理器的实施方式的计算机系统的实施方式的框图。
具体实施方式
超标量处理器可以包括指令流水线,其可操作用于同时乱序执行多个(例如,4个)程序指令,其中“乱序”是指按照不同于指令在程序中所排次序的顺序。通过同时乱序执行多个指令,超标量处理器能够比只能按序执行指令或者每次只能执行一条指令的处理器更快地执行软件或固件程序。
图1是具有指令流水线10的超标量处理器8的实施方式的框图。如下文所述,与传统指令流水线相比,通过响应于引致排空的事件而仅仅排空流水线的部分,指令流水线10可以降低流水线排空延迟和能耗。
指令流水线10包括取指-译码部分12、指令队列部分14、指令发布部分16以及指令执行部分18。
取指-译码部分12包括指令取回(IF)级20、指令译码(ID)级22以及寄存器映射(RM)级24。
IF级20按照程序顺序从程序存储器(图1中未示出)取回程序指令,其中程序顺序可以是指令存储在存储器中的顺序(在执行分支指令时会出现例外),并且IF级20按照取回指令的顺序将这些指令提供给ID级22。例如,程序计数器(图1中未示出)存储程序存储器的地址,并且在每个时钟周期期间递增(或者递减)该地址,使得IF级20从顺序的地址取回程序指令。被执行的分支可能导致以非顺序地址装载程序计数器;但是一旦重新装载,程序计数器再次在每个时钟周期期间递增(或者递减)地址,使得IF级20再次从顺序地址(即,按照程序顺序)取回指令,直到下一被执行的分支。
ID级22按照接收自IF级20的顺序来译码取回的指令。
RM级24通过如下方式来防止潜在的物理存储器冲突:如果一个指令附近的(例如,10条指令之内)先前指令调用了至少一个相同的物理寄存器,则重新映射该指令所调用的处理器物理寄存器(图1中未示出)。例如,假设:“加”指令调用物理寄存器R0,并且按照程序顺序在该“加”指令之前5条的“减”指令也调用R0。如果确保这些指令按照程序顺序执行,则不会发生寄存器冲突。但是,因为超标量处理器8可能乱序执行这些指令,并且甚至可能同时执行这些指令,因此RM级22将“加”指令重新映射到未被任何其他附近的先前指令调用的另一物理寄存器Rn(例如,R23)。
指令队列部分14包括指令进入队列(EQ)级26,其包括下文结合图2进一步讨论的一个或多个指令队列。
指令发布部分16包括指令发布(IS)级28,其将来自EQ级26的指令发布至指令执行部分18。IS级28可以同时发布多条指令,并且如果指令在按照程序顺序的先前指令之前准备好被执行,还可以乱序发布指令。例如,“加”指令可将两个目前可用的值加在一起,但是先前的“减”指令可将一个值从尚不可用的另一个值中减去。因此,为了加速指令执行,IS级28并非在发布任何后续指令之前等待另一减法值变为可用,而是可以在向指令执行部分发布“减”指令之前向指令执行部分18发布“加”指令,即使按照程序顺序“减”指令在“加”指令之前。
指令执行部分18包括一个或多个指令执行分支301-30n,其每一个能够与其他分支并行地执行各自的指令,并且能够并行地引退(retire)指令。例如,如果流水线10能够同时执行四个指令,则流水线可以包括四个或更多指令执行分支30。此外,每个分支30可以专用于特定类型的指令。例如,分支30可以专用于执行调用将对数据执行的数学运算的指令(例如,加、减、乘、除),另一分支30可以专用于执行调用访问高速缓存或其他存储器的指令(例如,数据装载、数据存储)。此外,每个分支30可以在按照程序顺序位于已执行指令之前的所有执行也被引退或者准备好被引退之后,引退该已执行指令。作为引退指令的一部分,分支30从EQ级26中的所有队列中移除指令。
仍然参考图1,描述了流水线10的一个操作模式。
在流水线10的第一周期期间,IF级20按照程序顺序从程序指令存储器(图1中未示出)取回一个或多个指令。
在流水线10周期的下一周期期间,ID级22对接收自IF级20的一个或多个指令进行译码。
在流水线10周期的下一周期期间,RM级24适当地对接收自ID级22的一个或多个已译码指令的物理寄存器进行重映射。
在流水线10的下一周期期间,EQ级26从RM级24接收一个或多个经重映射的指令,并将其存储在一个或多个队列中。
在流水线10的下一周期期间,IS级28向一个或多个相应的指令执行分支30发布来自EQ级26的一个或多个指令。
在流水线10的下一周期期间,从IS级28接收相应指令的每个指令执行分支30执行该指令。
继而,在流水线10的后续周期期间,执行相应指令的每个分支30引退该指令。
上述序列通常是重复的,直到处理器8例如停止运行程序、执行分支或者遇到流水线排空条件。
图2是图1的指令流水线10的实施方式的框图,其中该框图包括EQ级26的实施方式和装载/存储执行部分30n的实施方式。
EQ级26包括可以具有任何适当长度的以下五个队列/缓冲区:指令发布队列(ISQ)40、“存储”指令队列(SQ)42、“装载”指令队列(LQ)44、重排序缓冲区(ROB)46以及分支指令队列(BRQ)48。
ISQ 40接收由RM级24提供的所有指令,并且存储这些指令,直到它们被IS级28发布至执行部分30之一。如上文结合图1所述,IS级28可以乱序发布指令。因此,ISQ 40中的指令可以不按照程序顺序,因为来自RM级24的指令进入ISQ中的任何空“槽”,并且这些空槽可以是非顺序的。ISQ 40的实施方式的操作将在下文结合图5-图10详述。
SQ 42仅从RM级24接收存储指令,但是按照程序顺序保持这些存储指令,其中存储指令是向诸如高速缓存位置的存储器位置写入数据的指令。SQ 42保持存储指令,直到存储指令由装载/存储执行部分30n执行并且引退。SQ 42的实施方式的操作将在下文结合图5-图10详述。
LQ 44仅从RM级24接收装载指令,并且按照程序顺序存储这些装载指令,其中装载指令是从诸如高速缓存位置的存储器位置读取数据、继而向诸如处理器8的物理寄存器R的另一存储器位置写入此数据的指令。LQ 44存储装载指令,直到该装载指令由装载/存储执行部分30n执行和引退。LQ 44的实施方式的操作将在下文结合图5-图10详述。
ROB 46从RM级24接收所有指令,并且按照程序顺序存储这些指令。ROB 46存储指令,直到该指令由执行部分30之一执行并且引退。ROB 46的实施方式的操作将在下文结合图5-图10详述。
BRQ 48仅从RM级24接收分支指令,并且按照程序顺序存储这些分支指令,其中分支指令是例如响应于该分支指令所规定的条件得到满足而使IF级20的程序计数器(图2中未示出)“跳转”到程序存储器中的非顺序地址的指令。BRQ 48存储分支指令,直到该分支指令由执行部分30之一执行并且引退。BRQ 48的实施方式的操作将在下文结合图5-图10详述。
装载/存储执行部分30n包括:操作数地址生成器(AG)级50,数据访问(DA)级52,数据写回(DW)级54,以及指令引退/提交(CM)级56。装载/存储执行级30n仅执行从存储器位置读取数据或者向存储器位置写入数据的指令。因此,在一个实施方式中,装载/存储执行级30n仅装载和存储分别存储在LQ 44和SQ 42中的指令类型。
AG级50从IS级28接收装载或存储指令,并且生成指令中指定的一个或多个存储器位置的一个或多个物理地址。例如,存储指令可以指定向存储器位置写入数据,但是该指令可能仅包括该存储器位置的相对地址。AG级50将此相对地址转换为实际地址,例如,转换为高速缓存位置的实际地址。而且,如果要写入的数据是从指令中指定的其他存储器位置获得的,则AG级50还将以类似方式生成这一其他存储器位置的实际地址。AG级50可以使用存储器映射查找表(图2中未示出)或者其他传统技术,以根据装载或存储指令中包括的地址生成物理地址。
DA级52访问由存储指令指定的目的地存储器位置(使用由AG级50生成的实际地址),并且访问由装载指令指定的源存储器位置(也使用由AG级生成的实际地址)。在第一示例中,假设:存储指令指定将来自物理寄存器R1的数据D1写入高速缓存位置C1(图2中未示出D1、R1和C1)。DA级52是执行此操作的级;也即,响应于此存储指令,DA级将来自物理寄存器R1的数据D1写入高速缓存位置C1。备选地,数据D1本身可被包括在存储指令中,在这种情况下,DA级52将包括在存储指令中的数据写入高速缓存位置C1。在第二示例中,假设:装载指令指定从高速缓存位置C2读取数据D2,继而将此数据写回存储器位置M1(图2中未示出D2、C2、M1)。DA级是执行此操作前一半的级;也即,响应于此装载指令,DA级从高速缓存位置C2读取数据D2;DA级可以将D2暂时存储在物理或其他寄存器中,直到DW级54将D2写入存储器位置M1,如下所述。
DW级54有效地忽略存储指令,并且执行装载指令的第二操作(例如,“写回”部分)。例如,尽管DW级54可以从DA级52接收存储指令,但是它除了向CM级56提供该存储指令之外,不执行相对于该存储指令的操作。对于装载指令,继续上文的第二示例,DW级54将数据D2从其临时存储位置写入其目的地,即存储器位置M1。
CM级56监测其他执行部分301-30n-1,并且仅当按照程序顺序在装载或存储指令之前的所有指令都已经执行和引退时,引退该装载或存储指令。例如,假设装载指令按照程序顺序是第15个。CM级56仅当程序中的前14个指令都已执行和引退之后,才引退该装载指令。此外,作为引退指令的一部分,CM级56从指令被存储的EQ级26中的所有队列/缓冲区移除指令。CM级56可以这样来执行这种移除:从队列/缓冲区实际擦除指令;或者移动与队列/缓冲区相关联的头或标记指针,使得指令处于队列/缓冲区中将会被后续接收的指令覆盖的部分。
图3是按照程序顺序执行的相对于同一存储器位置的存储和装载指令的序列的流程图。
图4是打乱程序顺序执行的相对于同一存储器位置的存储和装载指令的序列的流程图。
参考图2和图3,讨论图2的流水线10的一个实施方式的操作,其中相对于同一存储器位置的存储指令和装载指令按照程序顺序执行。
现在参考图3的框60,在初始状态,数据值D1存储在实际地址M1处的存储器位置中。
参考框62,DA级52向M1处的存储器位置存储(写入)数据值D2。
参考框64,DA和DW级52和54协作以将M1处的存储器位置的内容(此例中是数据值D2)装载到实际地址M2处的另一存储器位置。也即,DA级52从M1处的存储器位置读取D2,并且DW级54将D2写入M2处的存储器位置。因此,在执行框64的装载操作之后,数据值D2被存储在M2处的存储器位置。
参考框66,执行部分301-30n-1之一将M2处的存储器位置的内容(此例中是数据值D2)乘以数据值D3。因此,框66的乘操作生成正确的结果D2×D3,如框68所示。
参考图2和图4,描述图2的流水线10的一个实施方式的操作,其中打乱程序顺序来执行相对于同一存储器位置的存储指令和装载指令。
参考图4的框70,在初始状态,数据值D1存储在M1处的存储器位置中;这与图3的框60的初始条件相同。
参考框72,因为流水线10乱序执行存储和装载指令,DA和DW级52和54协作以将M1处的存储器位置的内容(此例中是数据值D1)装载到M2处的存储器位置。
参考框74,DA级52将数据值D2写入M2处的存储器位置。但是,因为此存储指令在装载指令之后执行,DA和DW级52和54没有如程序指示的那样将D2装载到M1处的存储器位置。
参考框76,执行部分301-30n-1之一将M2处的存储器位置的内容(此示例中是数据值D1)乘以数据值D3。因此,在此示例中,框76的乘操作生成不正确的结果D1×D3,如框78所示,而不是如图3的框68生成D2×D3的正确结果。
因此,通过打乱程序顺序执行装载和存储指令,流水线10可能生成错误的结果。
仍然参考图2到图4,处理器8可以用来防止框78的错误结果的一个技术是实现对存储指令的“回看”,以确定在DA级52执行装载指令时,存储指令所指定的存储器地址是否已被解析并由此是可用的。如果存储指令所指定的存储器地址是可用的,并且与装载指令指定的源存储器地址相同,则DA级52可以装载存储指令所指定的数据。由此,即使装载指令在存储指令之后执行,装载指令仍将装载正确的数据。
更具体地,当DA级52执行装载指令时,它可以“回看”SQ 42和ISQ 40以确定是否存在任何按照程序顺序在装载指令之前的未执行存储指令,并且可以回看AG级50以确定是否存在与装载指令同时执行的存储指令。例如,参考图4,在框72中,DA级52确定是否存在按照程序顺序在装载指令之前的未执行存储指令(将在框74执行的存储指令)。
如果存在这样的存储指令,则DA级52确定与该存储指令所指定的存储器地址相对应的实际存储器地址是否已经被解析,并且由此是可用的。例如,AG级50可能已经结合执行涉及同一存储器地址的先前装载或存储指令而解析了该存储指令所指定的实际存储器地址。例如,继续上文参考图4的示例,DA级52确定存储器位置M1的实际存储器地址是否已经已知。
如果对应于存储指令的实际存储器地址是可用的,则DA级52接下来确定此实际存储器地址是否与对应于装载指令的实际存储器地址相同。例如,继续上文的示例,DA级52确定实际地址M1由装载指令和存储指令二者指定。
如果对应于存储指令的实际存储器地址与对应于装载指令的实际存储器地址相同,则响应于装载指令,DA级52可以不从该实际存储器地址读取数据,而是代之以直接从存储指令读取数据。例如,继续上文的示例,取代响应于装载指令而从M1处的位置读取不正确的数据D1,DA级52从存储指令读取数据D2(或者从当前存储D2的存储器位置,此存储器位置由存储指令指定)。由此,流水线10仍生成如图3的框68的正确结果D2×D3。
不幸的是,只有在对应于存储指令的实际存储器地址可用于DA级52同时该DA级正在执行对应于同一地址的装载指令时,这一技术才可能有效。
但是,如果对应于存储指令的实际存储器地址不可用(例如,当DA级52正在执行对应于M1的装载指令时,对应于存储指令的实际地址M1不可用于DA级52),则响应于流水线“认识到”它已经在执行了相对于某存储器位置的装载指令之后执行了相对于同一存储器位置的存储指令(其中装载指令按照程序顺序在存储指令之后到来),处理器可能排空整个流水线10。例如,当DA级52在框74中检测到它已经在它和DW级54在框72中执行装载指令之后执行了存储指令,并且检测到对应于该存储指令的实际地址在装载指令在框72中被执行时不可用时,它可以信号通知处理器8排空整个流水线10,以利用装载指令的地址重新装载程序计数器(在图2和图4中未示出),并且从这一处理点重新开始流水线的操作。
但是,排空整个流水线10可能增加执行程序所需的处理时间,并且还可能增加处理器消耗的能量,后者在电池供电的设备中可能是特别不期望的。
然而,参考图5-图10,在处理器8可以用来在来自某存储器位置的装载相对于针对同一存储器位置的存储以打乱程序顺序执行时防止错误结果的技术的实施方式中,处理器仅排空流水线10的一部分,并且从ROB 46重新填入被排空的流水线部分。这种实施方式可以减少由排空消耗的处理时间,并且可以由此降低在排空的情况下执行程序所需的处理时间。此外,这种实施方式可以降低处理器8响应于排空而消耗的能量。
图5-图10是在由于装载指令相对于针对同一存储器地址的存储指令以打乱程序顺序执行而引起的流水线排空之前、期间和之后的各个操作状态中,图2的流水线10的实施方式的框图。在图5-图10中,指令被标记为In,其中n指示指令在程序顺序中的位置。此外,指令I15是针对实际存储器地址M1处的存储器位置(图5-图10中未示出)的存储指令,并且指令I16是从实际地址M1处的存储器位置的装载指令。地址M1处的存储器位置可以是可由存储和装载指令访问的高速缓存位置或者任何其他存储器位置。
参考图5,在图5中表示的流水线10的操作状态之前,RM级24向EQ级26提供指令I1-I19。此外,一个或多个执行部分301-30n(图5中仅示出了部分30n)已经引退了指令I1-I11(由这些指令在ROB 46中不存在指示),IS级28已经发布了未引退指令I12、I14、I16-I17和I19(这些指令是未引退的,由其在ISQ 40中不存在并且由其在SQ 42、LQ 44和ROB 46中的相应存在来指示),并且IS级尚未发布指令I13、I15和I18(由这些指令在ISQ中的存在来指示)。
接下来,在图5表示的流水线10的操作状态期间,DA级52执行装载指令I16,确定存储指令I15尚未执行,并且确定对应于I15的实际地址(此示例中是实际地址M1)尚不可用。因为对应于I15的实际地址M1不可用,DA级52没有认识到装载指令I16和存储指令I15访问M1处的同一存储器位置;因此,DA级通过读取M1处的位置的内容来执行装载指令I16。也即,流水线10相对于存储指令I15乱序执行装载指令I16;如果保持未检查,此乱序执行可能导致错误的计算结果,如上文结合图2和图4所讨论的。而且,在此操作状态期间,IS级28向执行部分301-30n-1之一发布分支指令I13。
参考图6,在图5表示的操作状态之后的周期的下一操作状态中,DW级54通过将DA级52从地址M1处的源存储器位置读取的内容装载到I16所指定的目的地存储器位置(例如,实际地址M2处的存储器位置),从而执行装载指令16的写回部分。此外,在此操作状态中,RM级24向ISQ 40和ROB 46提供四个附加指令I20-I23。因为I20是装载指令而I22是存储指令,RM级24还将I20和I22分别提供给LQ 44和SQ 42。而且,IS级28向AG级50发布存储指令I15,并且执行部分301-30n-1(图2)之一执行分支指令I13(在此示例中假设,由指令I13指示的分支未被执行)。
参考图7,在图6中表示的操作状态之后的周期的下一操作状态中,RM级24向ISQ 40和ROB 46提供四个指令I24-I27,并且IS级28向执行部分301-30n-1(图2)之一发布指令I21。此外,执行部分301-30n-1引退指令I12-I14。
仍然参考图7,在执行存储指令I15的同时,DA级52确定响应于指令I15将向其写入数据值D1的M1处的存储器位置已经被按照程序顺序在指令I15之后的装载指令I16读取。响应于此确定,DA级52设置“装载错误推测(load-mis-speculation)”标记,并且将此标记与装载指令I16相关联。DA级52可以将此标记设置在I16所处的LQ 44的槽中、I16所处的ROB 46的槽中、这两个槽中或者某些其他位置。但是,出于示例目的,假设DA级52将此标记设置在I16所处的LQ 44的槽中。
参考图8,在图7中表示的操作状态之后的一个或多个周期的下一操作状态中,CM级56引退存储指令I15,并且尝试引退装载指令I16。但是,因为针对装载指令I16设置了“装载错误推测”标记,CM级56无法引退I16。相反,CM级56使处理器8排空ISQ 40、IS级28、AG级50、DA级52、DW级54和CM级56,以及其他执行部分301-30n-1的级(图2)。此外,CM级56使处理器8停顿(stall)但不排空IF级20、ID级22、RM级24以及EQ级26之前的流水线10的任何其他级。处理器8可以通过任何适当的方式执行排空和停顿。与排空整个流水线10的处理器相比,处理器8通过仅排空IS级28、ISQ 40以及执行部分301-30n的级可以降低由排空引起的程序处理时间的增加,并且可以降低由排空引起的耗能。例如,至少因为级20、22和24无需在排空后重新填入,部分流水线排空可以降低处理时间和能耗。
仍然参考图8,在流水线10的部分排空之后,至少指令I16-I27在ROB 46中。
参考图9,在图8中表示的操作状态之后的周期的下一操作状态中,EQ级26从ROB 46向ISQ 40装载按照程序顺序的前四条指令,在此例中是I16-I19,并且保持级20、22和24停顿。备选地,如果EQ级26可操作用于一次向ISQ 40装载多于四条指令,则EQ级可以在排空之后立即向ISQ同时装载ROB 46中的所有指令I16-I27。
参考图10,在图9中表示的操作状态之后的周期的下一操作状态中,IS级28向AG 50发布指令I16,并且向相应的其他执行部分301-30n-1发布例如指令I19、I21和I22。此外,EQ级26向ISQ 40装载其余指令(此例中为I24-I27),并且处理器停止停顿(un-stall)级20、22和24,使得在后续操作状态中,RM级24可以再次向EQ级26提供附加指令。因为级20、22和24未被排空,因此与完全排空流水线的关联延迟相比,与重新开始流水线10的正常操作相关联的延迟得以降低。如上所述,这一延迟降低可以降低由于排空而损失的处理时间,并且可以降低由于排空而消耗的能量。
在图10表示的操作状态之后的一个和两个周期的下一操作状态中,DA和DW级52和54分别执行装载指令I16的读取和写回部分。但是,因为存储指令I15在排空之前已经执行,装载指令从地址M1处的存储器位置读取正确的数据值,使得根据此装载数据值而生成的后续结果是正确的。
图11是计算机系统60的实施方式的框图,其包括图1的超标量处理器8的实施方式,该超标量处理器8的实施方式实现上文结合图5-图10描述的部分流水线排空的实施方式。尽管将系统60描述为计算机系统,但是其可以是部分流水线排空处理器的实施方式可适用的任何系统。
系统60包括计算电路62,计算电路62除了包括处理器8之外还包括耦合至处理器的存储器64,并且系统还包括输入设备66、输出设备68以及数据存储设备70。
处理器8可以响应于存储器64中存储的程序指令而处理数据,并且还可以将数据存储在存储器中以及从存储器中装载数据,或者可以将数据从存储器的一个位置装载到存储器的另一位置。而且,处理器8可以执行处理器或控制器所能执行的任何功能。
存储器64与处理器8可以位于相同或不同的管芯上,并且可以存储如上所述的程序指令或数据。当与处理器8布置在相同管芯上时,存储器64可以是高速缓存存储器。此外,存储器64可以是非易失性存储器、易失性存储器,或者可以包括非易失性和易失性存储器单元二者。
输入设备(例如,键盘、鼠标)66允许例如人类操作者向计算电路62提供数据、编程以及命令。
输出设备(例如,显示器、打印机、扬声器)68允许计算电路62以例如人类操作者可感知的形式提供数据。
而且,数据存储设备(例如,闪存驱动、硬盘驱动、RAM、光学驱动)70允许例如程序和数据的非易失性存储。
通过上文将会理解,尽管已经出于说明目的而描述了特定实施方式,但是可以在不脱离本公开的精神和范围的情况下进行各种修改。此外,当针对特定实施方式公开备选方案的情况下,即使没有特别声明,此备选方案也同样适用于其他实施方式。
Claims (37)
1.一种指令流水线,包括:
第一部分,可操作用于提供有序的第一指令和第二指令;以及
第二部分,可操作用于:
响应于所述第二指令,从数据存储位置读取第一数据,
响应于所述第一指令,在读取所述第一数据之后向所述数据存储位置写入第二数据,以及
响应于在读取所述第一数据之后写入所述第二数据,致使所述流水线的某些但非全部的排空。
2.如权利要求1所述的指令流水线,其中所述第一部分可操作用于按照所述有序的第一指令和第二指令在软件程序中所处位置的顺序来提供所述第一指令和所述第二指令。
3.如权利要求1所述的指令流水线,其中所述第一部分包括指令取回级。
4.如权利要求1所述的指令流水线,其中所述第一部分包括指令译码级。
5.如权利要求1所述的指令流水线,其中所述第一部分包括寄存器映射级。
6.如权利要求1所述的指令流水线,其中所述第二部分包括数据访问级。
7.如权利要求1所述的指令流水线,其中所述第二部分可操作用于:
响应于在从所述数据存储位置读取所述第一数据之后向所述数据存储位置写入所述第二数据,将标记与所述第二指令相关联;以及
响应于所述标记而致使所述排空。
8.如权利要求1所述的指令流水线,还包括:
第三部分,包括第一指令队列和第二指令队列,可操作用于从所述第一部分接收所述第一指令和所述第二指令;以及
其中所述第二部分可操作用于:
从所述第一队列和所述第二队列中的一个接收所述第一指令和所述第二指令;以及
响应于所述第二部分在读取所述第一数据之后写入所述第二数据,排空所述第一队列和所述第二队列中的所述一个,并且从所述第一队列和所述第二队列中的另一个向所述第一队列和所述第二队列中的所述一个装载所述第二指令。
9.如权利要求1所述的指令流水线,还包括:
第三部分,包括:
第一指令队列和第二指令队列,可操作用于从所述第一部分接收所述第一指令和所述第二指令;以及
第三指令队列,可操作用于从所述第一部分接收所述第二指令;以及
其中所述第二部分可操作用于:
从所述第一队列和所述第二队列中的一个接收所述第一指令和所述第二指令,以及可操作用于响应于在读取所述第一数据之后写入所述第二数据而将标记与所述第三指令队列中的所述第二指令相关联;以及
响应于所述标记,排空所述第一队列和所述第二队列中的所述一个,并且从所述第一队列和所述第二队列中的另一个向所述第一队列和所述第二队列中的所述一个装载所述第二指令。
10.如权利要求1所述的指令流水线,还包括:
其中所述第一指令包括存储指令;
其中所述第二指令包括装载指令;
第三部分,包括:
重排序缓冲区和指令发布队列,可操作用于从所述第一部分接收所述存储指令和装载指令;以及
装载指令队列,可操作用于从所述第一部分接收所述装载指令;以及
其中所述第二部分包括:
数据访问级,可操作用于从所述指令发布队列接收所述存储指令和装载指令,在执行所述存储指令之前执行所述装载指令,以及响应于在执行所述装载指令之后执行所述存储指令而将标记与所述装载指令队列中的所述装载指令相关联;以及
指令提交级,可操作用于响应于所述标记而致使所述指令发布队列的排空、以及所述装载指令从所述重排序缓冲区向所述指令发布队列的重新装载。
11.如权利要求1所述的指令流水线,还包括:
其中所述第一指令包括存储指令;
其中所述第二指令包括装载指令;
第三级,包括:
重排序缓冲区和指令发布队列,可操作用于从所述第一部分接收所述存储指令和装载指令以及第三有序指令;以及
装载指令队列,可操作用于从所述第一部分接收所述装载指令;以及
其中所述第二部分包括:
数据访问级,可操作用于从所述指令发布队列接收所述存储指令和装载指令,在执行所述存储指令之前执行所述装载指令,以及响应于在执行所述装载指令之后执行所述存储指令而将标记与所述装载指令队列中的所述装载指令相关联;以及
指令提交级,可操作用于响应于所述标记而致使所述指令发布队列的排空、以及所述装载指令和所述第三指令从所述重排序缓冲区向所述指令发布队列的重新装载。
12.如权利要求1所述的指令流水线,其中所述数据存储位置包括高速缓存位置。
13.如权利要求1所述的指令流水线,其中所述第二部分可操作用于致使所述第二部分的排空。
14.如权利要求1所述的指令流水线,其中所述第二部分可操作用于响应于所述第二部分在读取所述第一数据之后写入所述第二数据,而致使除所述第一部分之外的流水线部分的排空。
15.一种处理器,包括:
指令流水线,包括:
第一部分,可操作用于提供有序的第一指令和第二指令;
以及
第二部分,可操作用于:
响应于所述第二指令而从数据存储位置读取第一数据,以及可操作用于响应于所述第一指令而在读取所述第一数据之后向所述数据存储位置写入第二数据,以及
响应于在读取所述第一数据之后写入所述第二数据,致使所述流水线的某些但非全部的排空。
16.如权利要求15所述的处理器,还包括存储器,其耦合至所述流水线,并且可操作用于存储所述第一指令和第二指令。
17.一种系统,包括:
处理器,包括:
指令流水线,包括:
第一部分,可操作用于提供有序的第一指令和第二指令;以及
第二部分,可操作用于:
响应于所述第二指令而从数据存储位置读取第一数据,以及可操作用于响应于所述第一指令而在读取所述第一数据之后向所述数据存储位置写入第二数据,以及
响应于在读取所述第一数据之后写入所述第二数据,致使所述流水线的某些但非全部的排空;以及
耦合至所述处理器的集成电路。
18.如权利要求17所述的系统,其中所述处理器和所述集成电路布置在相同管芯上。
19.如权利要求17所述的系统,其中所述处理器和所述集成电路布置在各自的管芯上。
20.如权利要求17所述的系统,其中所述集成电路包括存储器。
21.如权利要求17所述的系统,其中所述处理器可操作用于控制所述集成电路。
22.一种方法,包括:
确定处理流水线在响应于第一指令而写入存储器位置之前响应于第二指令而读取所述存储器位置,其中所述处理流水线在所述第二指令之前取回所述第一指令;以及
响应于所述确定,排空所述处理流水线的至少一部分但非所有部分。
23.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线在所述处理流水线响应于所述第一指令而写入所述存储器位置之前读取所述存储器位置。
24.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线在所述处理流水线响应于所述第一指令而正在写入所述存储器位置的同时读取所述存储器位置。
25.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线在所述处理流水线响应于所述第一指令而写入所述存储器位置之后读取所述存储器位置。
26.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线在所述处理流水线执行所述第一指令之前读取所述存储器位置。
27.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线在所述处理流水线正在执行所述第一指令的同时读取所述存储器位置。
28.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线在所述处理流水线执行所述第一指令之后读取所述存储器位置。
29.如权利要求22所述的方法,其中确定所述处理流水线读取所述存储器位置包括:确定所述处理流水线响应于所述处理流水线执行所述第一指令而读取所述存储器位置。
30.如权利要求22所述的方法,其中排空所述流水线的至少一部分包括:排空所述流水线的进入队列之后的至少一部分。
31.如权利要求22所述的方法,其中排空所述流水线的至少一部分包括:不排空所述流水线的进入队列之前的部分。
32.如权利要求22所述的方法,还包括:响应于所述排空,从所述流水线的重排序缓冲区重新填入所述流水线的发布队列。
33.如权利要求22所述的方法,还包括:响应于所述排空,从所述第二指令开始重新填入所述流水线的发布队列。
34.如权利要求22所述的方法,还包括:响应于所述排空,停顿所述流水线的未排空部分。
35.如权利要求22所述的方法,还包括:
其中排空包括不排空所述流水线中位于所述流水线的发布队列之前的部分;
停顿所述流水线中位于所述发布队列之前的部分,直到所述流水线的重排序缓冲区中的所有指令已被装载到所述发布队列。
36.如权利要求22所述的方法,还包括:
其中排空包括不排空所述流水线中位于所述流水线的发布队列之前的部分;
停顿所述流水线中位于所述发布队列之前的部分,直到所述流水线的重排序缓冲区中的所有指令已被装载到所述发布队列,并且直到所述发布队列具有开放槽。
37.如权利要求22所述的方法,还包括:
响应于所述确定而标记所述第二指令;以及
其中排空所述流水线的至少一部分包括响应于所述标记而排空所述至少一部分。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010624755.0A CN102541511B (zh) | 2010-12-30 | 2010-12-30 | 用于可乱序执行指令的处理器的流水线排空 |
US13/340,679 US20120173848A1 (en) | 2010-12-30 | 2011-12-30 | Pipeline flush for processor that may execute instructions out of order |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010624755.0A CN102541511B (zh) | 2010-12-30 | 2010-12-30 | 用于可乱序执行指令的处理器的流水线排空 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102541511A true CN102541511A (zh) | 2012-07-04 |
CN102541511B CN102541511B (zh) | 2015-07-08 |
Family
ID=46348490
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010624755.0A Active CN102541511B (zh) | 2010-12-30 | 2010-12-30 | 用于可乱序执行指令的处理器的流水线排空 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20120173848A1 (zh) |
CN (1) | CN102541511B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105247479A (zh) * | 2013-06-28 | 2016-01-13 | 英特尔公司 | 指令次序实施指令对、处理器、方法和系统 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391680B (zh) * | 2014-11-25 | 2017-04-19 | 上海高性能集成电路设计中心 | 一种超标量微处理器中实现存储指令流水提交方法 |
US10228951B1 (en) | 2015-08-20 | 2019-03-12 | Apple Inc. | Out of order store commit |
US9471313B1 (en) | 2015-11-25 | 2016-10-18 | International Business Machines Corporation | Flushing speculative instruction processing |
US11681533B2 (en) | 2019-02-25 | 2023-06-20 | Intel Corporation | Restricted speculative execution mode to prevent observable side effects |
US11507379B2 (en) | 2019-05-31 | 2022-11-22 | Marvell Asia Pte, Ltd. | Managing load and store instructions for memory barrier handling |
US11520591B2 (en) * | 2020-03-27 | 2022-12-06 | International Business Machines Corporation | Flushing of instructions based upon a finish ratio and/or moving a flush point in a processor |
US11914511B2 (en) * | 2020-06-22 | 2024-02-27 | Apple Inc. | Decoupling atomicity from operation size |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1303043A (zh) * | 2000-01-06 | 2001-07-11 | 国际商业机器公司 | 具有指令历史信息的基本块高速缓存的微处理器 |
CN101542412A (zh) * | 2005-04-14 | 2009-09-23 | Mips技术公司 | 用于多线程处理器中自动低功率模式调用的装置和方法 |
US20090271592A1 (en) * | 2005-02-04 | 2009-10-29 | Mips Technologies, Inc. | Apparatus For Storing Instructions In A Multithreading Microprocessor |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658552B1 (en) * | 1998-10-23 | 2003-12-02 | Micron Technology, Inc. | Processing system with separate general purpose execution unit and data string manipulation unit |
US6467027B1 (en) * | 1999-12-30 | 2002-10-15 | Intel Corporation | Method and system for an INUSE field resource management scheme |
US7555634B1 (en) * | 2004-04-22 | 2009-06-30 | Sun Microsystems, Inc. | Multiple data hazards detection and resolution unit |
US7689804B2 (en) * | 2006-12-20 | 2010-03-30 | Intel Corporation | Selectively protecting a register file |
US8046400B2 (en) * | 2008-04-10 | 2011-10-25 | Via Technologies, Inc. | Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor |
US9135005B2 (en) * | 2010-01-28 | 2015-09-15 | International Business Machines Corporation | History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties |
-
2010
- 2010-12-30 CN CN201010624755.0A patent/CN102541511B/zh active Active
-
2011
- 2011-12-30 US US13/340,679 patent/US20120173848A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1303043A (zh) * | 2000-01-06 | 2001-07-11 | 国际商业机器公司 | 具有指令历史信息的基本块高速缓存的微处理器 |
US20090271592A1 (en) * | 2005-02-04 | 2009-10-29 | Mips Technologies, Inc. | Apparatus For Storing Instructions In A Multithreading Microprocessor |
CN101542412A (zh) * | 2005-04-14 | 2009-09-23 | Mips技术公司 | 用于多线程处理器中自动低功率模式调用的装置和方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105247479A (zh) * | 2013-06-28 | 2016-01-13 | 英特尔公司 | 指令次序实施指令对、处理器、方法和系统 |
CN105247479B (zh) * | 2013-06-28 | 2018-01-09 | 英特尔公司 | 指令次序实施指令对、处理器、方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
US20120173848A1 (en) | 2012-07-05 |
CN102541511B (zh) | 2015-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102541511A (zh) | 用于可乱序执行指令的处理器的流水线排空 | |
JP5221546B2 (ja) | 同時に予測された分岐命令を解決するための方法および装置 | |
US20040054876A1 (en) | Synchronising pipelines in a data processing apparatus | |
US20070143581A1 (en) | Superscalar data processing apparatus and method | |
JP2007504575A (ja) | 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機 | |
JPS592143A (ja) | 情報処理装置 | |
US20110314259A1 (en) | Operating a stack of information in an information handling system | |
TW201439904A (zh) | 在提前執行中管理潛在無效結果 | |
US8266411B2 (en) | Instruction set architecture with instruction characteristic bit indicating a result is not of architectural importance | |
US10564691B2 (en) | Reducing power consumption in a multi-slice computer processor | |
JP2018005488A (ja) | 演算処理装置及び演算処理装置の制御方法 | |
CN105242963A (zh) | 执行机构间的切换控制 | |
US9690590B2 (en) | Flexible instruction execution in a processor pipeline | |
US6622240B1 (en) | Method and apparatus for pre-branch instruction | |
US8977837B2 (en) | Apparatus and method for early issue and recovery for a conditional load instruction having multiple outcomes | |
CN110928577B (zh) | 一种带异常返回的向量存储指令的执行方法 | |
US20220035635A1 (en) | Processor with multiple execution pipelines | |
US10095518B2 (en) | Allowing deletion of a dispatched instruction from an instruction queue when sufficient processor resources are predicted for that instruction | |
US9747109B2 (en) | Flexible instruction execution in a processor pipeline | |
US7197630B1 (en) | Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation | |
JPWO2007083421A1 (ja) | プロセッサ | |
US9286069B2 (en) | Dynamic write port re-arbitration | |
US7472264B2 (en) | Predicting a jump target based on a program counter and state information for a process | |
TWI407369B (zh) | 具功率感知之指令引退裝置、方法及系統 | |
US20100185834A1 (en) | Data Storing Method and Processor Using the Same |
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 |