具有改进的别名队列和存储冲突检测的处理器的制作方法

文档序号:11133552阅读:303来源:国知局
具有改进的别名队列和存储冲突检测的处理器的制造方法与工艺

本发明总体上涉及确定并减少处理器中的存储冲突,并且更具体地涉及使用别名队列确定存储冲突,该别名队列存储用于更准确地预测存储冲突的加载和存储指令指针以便减少存储器违规和加载指令重放(replay)。



背景技术:

乱序(OOO)处理器允许指令被调度以按与由软件或程序代码指定的不同顺序进行推测性执行(speculative execution)。例如,加载指令(load instruction)可能在之前的存储指令(store instruction)之前被调度用于执行,尽管该加载指令需要由该存储指令存储的数据。加载指令的这种推测性执行导致需要加载指令被重放(replay)的存储器违规(memory violation)。指令的重放在处理效率方面代价很高,因此期望检测到随后的迭代(iteration)中的冲突的加载/存储指令对并且防止额外的加载指令重放发生。



技术实现要素:

一种根据一个实施例的用于处理器的寄存器别名表包括别名队列、加载和存储比较器以及相关性逻辑。别名队列的每个条目存储引起存储器违规的冲突的加载指令和存储指令对的指令指针以及有效值。存储比较器将随后的存储指令的指令指针与存储在别名队列中的那些存储指令指针进行比较,并且当检测到匹配时,存储比较器将在相应的别名队列条目中的有效值设置为真。加载比较器确定随后的加载指令的该指令指针是否匹配存储在该别名队列中的指令指针。若是,相关性逻辑将随后的存储指令的存储索引(若由有

效值指示为有效的话)提供作为随后的加载指令的相关性信息。

寄存器别名表可以包括本地存储器,该本地存储器存储之前彼此冲突导致存储器违规的加载和存储指令对的ROB索引。寄存器别名表可以进一步包括RAT逻辑,该RAT逻辑将回退的存储指令的随后的存储索引与存储在本地存储器中的存储索引进行比较,并且在匹配的情况下该RAT逻辑撷取并存储该存储指令指针。RAT逻辑可以进一步将重放的加载指令的随后的加载索引与存储在本地存储器中的加载索引进行比较,并且在匹配的情况下,撷取加载指令指针、在别名队列中分配条目并且将加载指令指针和存储指令指针存储到别名队列的经分配的条目中。

根据一个实施例的处理器包括重排序缓冲器和寄存器别名表。重排序缓冲器包括具有多个条目的ROB队列,其中,每个条目存储被发射用于执行的相应的指令的指令指针。寄存器别名表包括别名队列、RAT逻辑、加载和存储比较器以及相关性逻辑。RAT逻辑接收由之前的加载指令与之前的存储指令之间的存储冲突引起的存储器违规指示。响应于存储器违规指示,RAT逻辑从ROB队列中撷取之前的存储指令的存储指令指针以及之前的加载指令的加载指令指针,并且将指令指针存储于别名队列的条目中。存储比较器将随后的存储指令的存储指令指针与存储在别名队列中的每个存储指令指针进行比较,并且当检测到匹配时,存储比较器将在相应的别名队列条目中的相应的有效值设置为真。加载比较器将随后的加载指令的加载指令指针与存储在别名队列中的每个加载指令指针进行比较,并且当检测到与所述相应的别名队列条目中的加载指令指针匹配时,加载比较器将AQ命中设置为真。当匹配别名队列条目的有效值和AQ命中都为真时,相关性逻辑将随后的存储指令的存储索引提供为随后的加载指令的相关性信息。

处理器的重排序缓冲器可以进一步包括ROB逻辑,ROB逻辑按程序顺序回退在ROB队列中的指令并且ROB逻辑向RAT逻辑标识被回退或被重放的指令。RAT逻辑一旦之前的存储指令被回退就从ROB队列中撷取之前的存储指令的存储指令指针,并且一旦之前的加载指令被重放就从ROB队列中撷取之前的加载指令的加载指令指针。寄存器别名表可以进一步包括本地存储器,该本地存储器存储冲突的加载和存储指令的ROB索引以检测加载和存储指令的回退和/或重放。处理器可以包括存储器子系统,该存储器子系统检测由之前的加载与存储指令之间的冲突引起的存储器违规并且该存储器子系统将标识之前的加载和存储指令的存储器违规指示提供给重排序缓冲器和/或寄存器别名表。

一种根据一个实施例预测加载和存储相关性以减少存储器违规的方法,该方法包括:将冲突的加载和存储指令的指令指针存储于别名队列中、将随后的存储指令的随后存储指令指针与存储在别名队列中的每个存储指令指针进行比较且当发现匹配时指示该随后的存储指令的相应的存储索引是有效的、并且将随后的加载指令的随后加载指令指针与存储在别名队列中的每个加载指令指针进行比较且当发现匹配时且如果随后的存储指令的相应的存储索引是有效的话则将存储索引提供作为随后的加载指令的相关性信息。

该方法可以包括:接收标识冲突的加载和存储指令的存储器违规指示、存储标识冲突的加载指令的加载索引以及存储标识冲突的存储指令的存储索引、并且当冲突的存储指令回退时撷取并存储相应的存储指令指针。该方法可以包括:将加载索引和存储索引存储于本地存储器中、并且从ROB队列中撷取相应的存储指令指针并且一旦存储指令被回退就存储于本地存储器中。该方法可以包括一旦该冲突的加载指令被重放就撷取并存储相应的加载指令指针。该方法可以包括分配在别名队列中的条目并将撷取的加载指令指针存储于别名队列的条目中并且将存储在本地存储器中的相应的存储指令指针存储在别名队列的条目中。

附图说明

借助以下详细说明以及附图将更好地理解本发明的益处、特征和优点,在附图中:

图1是展示根据本发明的实施例实现的具有改进的冲突检测以减少存储器违规和加载指令重放的处理器的框图;

图2是根据本发明的一个实施例实现的用于检测并解析由存储冲突引起的存储器违规的处理器的多个部分的框图;

图3是根据本发明的另一个实施例实现的图1的用于检测并减少由存储冲突引起的存储器违规的处理器的多个部分的框图;

图4是展示由图1的处理器执行的用于将冲突的加载和存储指令的指令指针存储于图1的别名队列的条目中的过程的流程图;并且

图5是展示由图1的处理器的寄存器别名表执行的用于检测存储在图1的别名队列的条目中的相同的加载/存储冲突指令对的随后的执行的随后的存储冲突的过程的流程图。

具体实施方式

该发明人已经认识到用于检测并解析由加载(LD)指令与存储(ST)指令之间的冲突(以其他方式在此称为存储冲突)引起的存储器违规的常规处理器配置的缺陷。乱序(OOO)处理器允许指令被调度以按与由软件或程序代码指定的不同的顺序进行推测性执行。在由冲突引起的存储器违规的情况中,确定加载/存储冲突指令对之间的距离以检测在随后的迭代中的该相同指令对。然而,许多处理器支持融合(fuse)特征,该融合特征将多条指令合并到数量减少的指令(或者甚至单条指令)中,由此可能改变冲突的指令对的加载和存储指令之间的距离。

该发明人因此还开发出具有另一个别名队列和存储冲突检测机制的处理器,该处理器更准确地检测出加载/存储冲突指令对以减少存储器违规和加载重放。冲突指令对的指令指针被存储并且与相同指令对的随后的迭代进行比较,而不是依赖于引起存储器违规的加载和存储指令之间的距离。当存储指令的随后的迭代基于其指令指针被检测到时,寄存器别名表指示冲突的随后的存储指令被检测到,并且进一步采集并存储被分配于存储指令的重排序缓冲器(ROB)索引。当加载指令的随后的迭代基于其指令指针被检测到时,随后的存储指令的ROB索引被撷取并且被提供作为随后的加载指令的相关性信息。以此方式,加载/存储冲突对的检测是基于存储指令的ROB索引在当前迭代中的实际确定的而不是基于可能不准确的距离确定的。

图1是展示根据本发明的实施例实现的具有改进的冲突检测以减少存储器违规和加载指令重放的处理器100的框图。在一个实施例中,处理器100的微体系结构是x86微体系结构。如果处理器可以正确地执行被设计成用于在x86处理器上执行的大多数应用程序,则该处理器具有x86微体系结构。如果应用程序的预期结果被获得,则该应用程序可以被正确地执行。具体地,处理器100执行x86指令集的指令并且包括x86用户可见寄存器集。然而,在此描述的存储器违规重放减少机制可以在其他体系结构(现有的和未来的两者)的处理器中被采用。在此使用的术语“处理器”指任何类型的处理单元,包括微处理器、中央处理单元(CPU)、处理核、微控制器等。在此使用的术语“处理器”还包括任何类型的处理器配置,如集成在芯片上的处理单元或包括整合在系统芯片(SOC)等中的那些元件的集成电路(IC)。

处理器100包括指令高速缓存102,该指令高速缓存对来自系统存储器(未示出)的程序指令进行缓存。处理器100还包括指令译码器104,该指令译码器接收来自指令高速缓存102的指令并对其进行译码。在一个实施例中,指令译码器104包括指令译码器,该指令译码器将处理器100的宏指令集(如x86指令集体系结构)的宏指令译码成处理器100的微指令集体系结构的微指令。具体地,指令译码器104将如x86MOV、PUSH、POP、CALL、RET等指令的存储器访问指令译码成微指令序列,该微指令序列包括一个或多个加载或存储微指令,这些微指令在此被简单地称为加载指令或存储指令。在其他实施例中,加载和存储指令是处理器100的固有指令集的一部分。

处理器100还包括耦接于指令译码器104的寄存器别名表(RAT)106;耦接于RAT 106的调度器108(以其他方式已知为保留站);耦接于RAT 106和调度器108的重排序缓冲器(ROB)110;耦接于调度器108和ROB 110的执行单元112;以及耦接于ROB 110和执行单元112的寄存器114。处理器100被配置成乱序(OOO)机,其中,指令可以被调度以按与从指令译码器104接收到的顺序不同的顺序执行。OOO处理意味着经常按与由源代码或软件程序初始指定的不同的顺序执行指令。

执行单元110包括存储器子系统116(也被称为存储器排序缓冲器,或MOB),该存储器子系统116执行在此通常被称为加载和存储指令的存储器访问指令。具体地,存储器子系统116响应于加载和存储指令从耦接于存储器子系统116的数据高速缓存120中读写数据。因此,存储器子系统116与用于从系统存储器中读写数据的总线接口单元(未示出)相对应。执行单元110还包括执行非存储器访问指令的其他执行单元118,如整数执行单元、浮点单元、多媒体单元等。

尽管存储器子系统116可以接收并执行相对于彼此不按程序顺序的加载和存储指令,存储器子系统116正确地解析了可能由这种无序执行造成的存储器违规或冲突。也就是说,存储器子系统116确保在存储冲突的情况下每个加载指令具体地从正确的存储指令(或者在多个存储指令供应由单个加载指令指定的数据的情况下的存储指令)中接收正确的数据。举例来讲,在旨在用于为加载指令提供数据的之前的存储指令之前当乱序执行加载指令时,存储器子系统116检测到加载指令还未从存储指令中接收到正确的数据。由存储冲突引起的存储器违规通常是由存储器子系统116在执行存储指令时被检测到。当存储器子系统116检测到存储器违规时,其提供沿着至ROB 110的信号路径122的存储器违规(MV)信息以请求ROB 110重放加载指令从而确保其接收来自存储指令的正确数据。然而,如在此描述的处理器更准确地检测这种存储冲突以便减少由存储器子系统116请求的加载指令重放的次数。还可以利用被示出为虚线的信号路径122的延伸将MV信息直接提供给RAT 106。

RAT 106按程序顺序接收来自指令译码器104的经译码的指令并且确定每条指令与处理器100中其他未回退(retire)的指令的相关性。RAT 106存储与处理器100中的每条未回退的指令相关联的寄存器重命名信息。寄存器重命名信息结合了指令的程序顺序。因此,如在此所述的,RAT 106包括复杂的状态机或者响应于重命名信息和它的其他输入来控制处理器100的各动作的类似物。

RAT 106基于其程序顺序、基于其指定的源操作数并且基于重命名信息生成每条指令的相关性信息。相关性信息包括指令的每个输入操作数的标识符,即输入操作数依赖的被依赖者指令的标识符(如果有的话)。在一个实施例中,标识符是进入ROB 110中的索引(ROB索引,或RIDX),该标识符标识ROB 110中存储被依赖者指令和与其相关的状态信息的条目。如在此进一步描述的,RAT 106包括别名队列(AQ)130,该别名队列用于标识涉及加载和存储指令对的之前的存储冲突、并且用于更新加载指令的相关性以防止由相同的加载和存储指令的随后的执行引起的未来的存储冲突。注意,加载/存储指令对可以在循环程序中(或者在由循环机制等多次执行的代码内)被提供。存储器违规在第一次执行中被检测到,并且在相同指令的随后的迭代中被防止。

RAT 106经由一个或多个发射路径134将经译码的指令及其相关联的相关性信息发射(issue)至调度器108。当处理器100同时地或在相同的时钟周期内并行地发射多条指令时,可以使用多个发射路径134。在发射一条或多条指令之前,RAT 106针对每条指令分配ROB 110中的条目,其中,ROB中的每个条目由相应的ROB索引标识或以其他方式访问。当指令被推送到调度器108中时,利用指令和相应的信息分配并更新ROB 110中的相应条目。因此,指令被发射给调度器108并按程序顺序被分配到ROB 110中。ROB 110可以被配置成圆形队列或具有多个条目的类似物,其使得ROB 110能够保证按程序顺序回退指令。

调度器108包括保留从RAT 106接收到的指令和相关性信息的一个或多个队列(取决于调度器配置)。调度器108还包括调度逻辑,该调度逻辑当其准备被执行时经由一个或多个调度路径136将指令从队列调度至执行单元112。当处理器100同时地或在相同的时钟周期内并行地调度多条指令时,可以使用多个调度路径136。当其已知的相关性被解析并且当这些执行单元112中的一个合适的执行单元可用时,指令准备被调度并且被执行。当被依赖者指令已经执行时解析指令相关性从而使得其结果对相关的指令可用,即,该结果对执行相关的指令的这些执行单元112中的一个执行单元是可用的。执行单元112可以经由寄存器114或者经由一个或多个写回路径138直接从执行单元112自身接收已执行的指令的结果。寄存器114可以被实现为物理寄存器文件(PRF),该PRF包括物理寄存器集,每个物理寄存器指向物理寄存器索引或以其他方式由物理寄存器索引标识。ROB 110内对应于存储指令的条目可以存储标识寄存器114中用于写结果的物理寄存器的相应的物理寄存器索引。

存储器子系统116使用由加载和存储指令指定的源操作数解析(即,计算)加载指令的加载地址并且解析存储指令的存储地址。操作数的源可以是寄存器114、常数和/或由指令指定的位移。存储器子系统116还在计算的加载地址处从数据高速缓存120中读取加载数据。存储器子系统116还在计算的存储地址处将存储数据写入数据高速缓存120中。在一个实施例中,存储器子系统116包括执行加载指令的一个或多个加载单元以及执行存储指令的一个或多个存储单元。

如之前提及的,存储器子系统116检测存储器违规并且经由信号路径122将MV信息提供给ROB 110。在存储冲突的情况下,MV信息标识必须重放的加载指令,从而使得ROB 110可以用一个需要重放的指示更新有索引的条目。MV信息还标识加载指令与其冲突的存储指令。在一个实施例中,加载和存储指令各自被相应的ROB索引标识。在另一个实施例中,每个指令由相应的指令指针(IP)标识,这些IP标识指示指令在系统存储器和/或指令高速缓存102中的位置。IP当其通过调度器108、ROB 110和执行单元112被处理时通常被标识为为每条指令配备的下一个顺序的IP(Next Sequential IP,NSIP)值或类似物。

当其ROB条目被标记为需要被重放的指令是下一个有待回退的指令(即,是最旧的未回退的指令)时,ROB 110重放加载指令。ROB 110可以经由一个或多个重发射路径140将加载指令重发射(re-issue)至调度器108以等待随后重新调度至执行单元112并由此重放。在一个实施例中,ROB 110不仅重放加载指令,而且重放比加载指令新的所有指令。当ROB 110重放该加载指令时,ROB 110还经由RAT 106与ROB 110之间的通信路径142经由相应的重放信号将此事件用信号发送至RAT 106。重放信号标识被重放(例如通过指定加载指令的ROB索引来标识)的加载指令。如在此进一步描述的,ROB 110提供或RAT 106撷取附加的信息以标识存储器违规从而更新AQ 130。如在此进一步描述的,RAT 106更新被重放重放的加载指令的相关性信息以减少由类似的存储器冲突引起的重放事件。

图2是根据本发明的一个实施例实现的用于检测并解析由加载(LD)指令和存储(ST)指令之间的冲突引起的存储器违规的处理器200的多个部分的框图。处理器200包括通过解析相关性并发射指令执行的、与RAT 106类似功能的RAT 206,以及通过重发射指令并按程序顺序回退指令的、执行与ROB 110类似功能的ROB 210。调度器108和存储器子系统116被包括并且耦接于RAT 206和ROB 210从而按之前描述的类似方式操作。RAT 206包括RAT逻辑202,该RAT逻辑接收来自指令译码器104的指令,包括加载(LD)指令(包括从数据高速缓存120和/或系统存储器加载信息的许多不同类型的指令类型中的任何指令)以及存储(ST)指令(包括将信息存储至数据高速缓存120和/或系统存储器中的许多不同类型的指令类型中的任何指令)。NSIP值包括有每条指令,被示出为针对LD指令的LNSIP值和针对ST指令的SNSIP值。RAT逻辑202解析指令相关性并且针对每条指令生成ROB索引(RIDX),用于对在ROB 210内提供的ROB队列208的已分配的条目进行定位。沿着如之前描述的发射路径134将准备发射的指令提供给调度器108。当相应的ST和LD指令被发射至调度器108中时,ROB队列208中的一对条目212和214分别针对ST和LD指令被分配且被更新。如所示,条目212包括针对ST指令的SNSIP值,而条目214包括针对LD指令的LNSIP值。

RAT 206包括存储列表216,其存储针对穿过RAT 206直到其被回退的每条存储指令的条目。如所示的,例如,每个新的存储指令(示出为ST_N)包括存储在存储列表216中的相应的ROB索引SRIDX_N。存储列表216的大小是任意的并且被示出存储多达整数N条存储指令,单独地示出为ST1、ST2、、…、STN(ST1–STN)。进入存储列表216中的每条存储指令包括由RAT逻辑202确定的相应的ROB索引,针对存储指令ST1–STN分别示出为SRIDX1、SRIDX2、…、SRIDXN(SRIDX1–SRIDXN)。当每条存储指令随后被ROB 210回退时,存储列表216中的相应条目被无效或被清除以接收新的存储指令。

存储器子系统116被配置成用于检测包括LD与ST指令之间的存储冲突的存储器违规。尽管ST指令可以首先按程序顺序发生以将数据提供给LD指令,OOO操作可能允许LD指令先被执行。当ST指令被执行时,存储器子系统116检测到LD指令未接收正确的数据并且经由标识冲突加载和存储指令的信号路径122将相应的存储器违规(MV)信息提供给ROB 210。MV信息可以包括标识冲突的LD和ST指令的每条指令的信息,如相应的ROB索引LRIDX和SRIDX或者相应的NSIP值LNSIP和SNSIP。在一个实施例中,NSIP值相对较大(例如,49位),而ROB索引相对较小(例如,5位)。可以使用NSIP值的缩减版本,如低页位(例如,12位)和/或附加的高位散列版本。然而,减小的NSIP值仍通常大于ROB索引。ROB索引LRIDX和SRIDX对于分别针对ST和LD指令在ROB队列208中快速地标识相应的条目212和214是尤其有用的。

在一个实施例中,存储器子系统116可以直接地访问ROB队列208以指示存储冲突并以防止随后的存储器违规。替代地,MV信息被提供给ROB 210的ROB逻辑218,该MV信息访问并更新ROB队列208。如所示的,针对LD指令的条目214包括用于标识加载指令LD的字段、用于存储NSIP值LNSIP的另一个字段、存储重放值RPLY的另一个字段、以及存储距离值DST的另一个字段。附加的字段可以被提供但是未示出。字段中的星号“*”指示空或空值。在LD与ST指令之间的存储冲突的情况中,在针对LD指令的条目214中的RPLY值被更新或被设置成通知ROB 210重放LD指令。此外,LD与ST指令之间的“距离”被计算并被存储作为条目214中的DST值。DST值可以简单地是分别针对ST与LD指令的ROB索引SRIDX与LRIDX之间的差值。

ROB逻辑218通过生成指向在ROB队列208中的最旧的指针的回退指针RP进一步执行回退功能。当由RP指向的最旧的指针准备回退时,ROB逻辑218执行回退指令并且将其从ROB队列中208中移除所需的功能。然而,如果RPLY值被设置(如针对LD指令的条目214的情况),则ROB逻辑218引起LD指令被重发射至调度器108以重放。LD指令此时未被回退,而是保持在ROB队列208中直到被存储器子系统116成功地重放并最终被回退。当LD指令被重发射以重放时,ROB逻辑218还针对RAT 206声明重放信号,其中,该重放信号进一步将LD标识为被重放的加载指令。在处理器200的配置中,一旦重放LD指令,就将相应的LNSIP和DST值从ROB队列208中的条目214复制到RAT 206的别名队列(AQ)222的条目220中。

当新的加载指令被RAT逻辑202接收并处理时,针对每个新的加载指令的每个LNSIP值(示出为LNSIP_N)被提供给在RAT 206内的NSIP比较器224的输入端。NSIP比较器224将LNSIP_N与存储在AQ 222内的之前的LNSIP值中的每个值(示出为LNSIP_P)进行比较。当匹配发生时,如当LNSIP_N等于来自AQ 222的LNSIP_P时,NSIP比较器224针对相关性逻辑227的比较逻辑226的一个输入端声明AQ_HIT信号为真。同样,针对每个新的加载指令,相应的ROB索引值(示出为LRIDX_N)被提供给索引计算电路228的一个输入端,该索引计算电路在另一个输入端处在AQ 222内接收匹配条目的DST值。索引计算电路228确定LRIDX_N与DST之间的差值以计算可能的冲突存储指令的相应的ROB索引(示出为SRIDX)。经计算的SRIDX值被提供给存储列表216,并且存储列表216将SRIDX与当前在处理器200中处理的相应的存储指令的存储的ROB索引SRIDX1-SRIDXN的每个ROB索引进行比较。在匹配的情况下,存储列表216针对比较逻辑226的另一个输入端声明存储命中值ST_HIT。比较逻辑226被示出为布尔逻辑AND门,从而使得当ST_HIT和AQ_HIT都为真时,比较逻辑226针对相关性逻辑227的传送逻辑230的输入端将相关性信号DEP声明或以其他方式设置为真。同时,经计算的SRIDX值被提供至传送逻辑230的另一个输入端。当DEP被设置为真时,传送逻辑230将作为相关性信息的、经计算的SRIDX值与经由发射路径134传送的新的加载指令一起传送至调度器108。

调度器108包括针对已经从RAT 206发射的指令的多个条目。如所示的,条目232对应于最新发射的示出为微指令LD_N的加载指令。经计算的SRIDX值被提供在条目232的字段中,该条目指示加载指令LD_N依赖于由SRIDX标识的存储指令。具体地,SRIDX旨在为加载指令LD_N依赖的ROB队列208内的存储指令的ROB索引。调度器108使用此信息以确保加载指令LD_N在其依赖的存储指令之前不被调度,从而使得针对相同加载/存储指令对的随后的迭代不再重复发生存储器违规。

当NSIP比较器224不检测与LNSIP_N的匹配时,则AQ_HIT为假从而使得DEP为假(或不被声明)并且经计算的SRIDX值不被传送逻辑230传送至调度器108作为新加载指令的相关性信息。同样,即使AQ_HIT为真,如果存储列表216不检测与经计算的SRIDX的匹配,则经计算的SRIDX被忽略并且不被传送逻辑230传送至调度器108作为新加载指令的相关性信息。如在此进一步描述的,然而,DST值可能不准确地反映冲突的加载和存储指令之间的距离从而使得经计算的SRIDX“遗漏”存储在存储列表216中的正确的存储指令。以此方式,尽管真的冲突LD/ST指令对可能存在,其可能不被检测到,从而使得针对加载/存储指令对的下一次迭代再次发生加载重放。

当加载/存储指令对的存储指令与加载指令之间的“距离”固定时,处理器200的配置足以标识存储冲突。然而,指令译码器104具备融合(fuse)特征,其将多条指令合并到单条微指令或“μop”中的。考虑以下在软件程序等的代码中的指令序列:

MOV[EAX],EDX(ST)

TEST EAX,EBX

JNE

MOV EBP,[EAX](LD)

第一个移动指令(MOV)通常是将寄存器EDX的内容移至在由另一个寄存器EAX的内容标识(例如,使用存储器指针或存储器地址等)的系统存储器中的存储器位置中的存储指令(ST)。第二个移动指令通常是将在由EAX寄存器的内容标识的系统存储器中的存储器位置的内容移至另一个寄存器EBP中的加载指令(LD)。中间TEST指令将EAX寄存器的内容与EBX寄存器的内容进行比较并且当这些内容彼此相等时置位相应的标志位或诸如此类。如果EAX寄存器的内容与EBX寄存器的内容不相等,则下一条JNE指令通知处理器跳到另一个程序位置。中间的省略号“…”通常代表可以插入在所列举的指令之间的任何数量的指令(包括0条指令)。

以上这些指令被指令译码器104转换成一系列微指令或“μop”,其中,在ST指令与LD指令之间存在多个μop。如果译码每次是完全相同的从而使得μop的数量不变化,则被确定为DST值的ST与LD指令之间的“距离”基本上是固定的。当指令之间的距离保持为基本上固定时,处理器200的配置可以很好地工作用于检测并减少存储冲突和相应的加载指令重放。然而,TEST和JNE指令可以被译码成两个μop或者它们可以在一次或多次迭代过程中使用融合函数合并成单个μop,从而使得ST与LD之间的距离不固定。融合函数可以应用于给定的代码序列或程序中的代码的许多其他的组合。通常,使用距离确定的存储冲突检测机制不能处理在其中融合函数或任何类似类型的函数导致加载与存储指令对之间的距离可变的译码变化的情形。注意的是,处理器200仍可以正确地操作,因为存储器子系统116检测存储器违规并引起重放以最终确保适当操作。处理整体效率然而可以被显著地降低。

图3是根据本发明的另一个实施例实现的用于检测并解析减少由加载(LD)指令和存储(ST)指令之间的冲突引起的存储器违规的处理器100的多个部分的框图。处理器100支持融合特征,其中,多条指令可以合并成一条微指令或至少数量减少的微指令,从而使得可能冲突的加载指令与存储指令之间的距离可以变化。RAT 106和ROB 110进一步详细地示出耦接于调度器108和存储器子系统116。RAT 106包括RAT逻辑302,该RAT逻辑302接收来自指令译码器104的指令,包括分别进一步包括LNSIP值和SNSIP值的LD指令和ST指令。RAT逻辑302解析指令相关性并且生成ROB索引(RIDX),该ROB索引用于对在ROB 110内提供的ROB队列308的已分配的条目进行定位。在一个实施例中,ROB队列308包括48个条目,尽管针对不同处理器配置可以设想任何其他数量的条目。沿着如之前描述的发射路径134将准备发射的指令提供给调度器108。当相应的ST和LD指令被发射至调度器108中时,ROB队列308中的一对条目312和314分别针对ST和LD指令被更新。按照与之前描述的类似的方式,条目312包括针对ST指令的SNSIP值,而条目314包括针对LD指令的LNSIP值。

存储器子系统116如之前描述的那样操作,其中,该存储器子系统检测包括在LD与ST指令之间的存储冲突的存储器违规。如之前所描述的,存储冲突通常在执行存储指令时被检测到,其中,存储器子系统116检测之前执行的加载指令未接收正确的数据。存储器子系统116经由标识冲突的加载和存储指令的信号路径122将相应的MV信息提供给ROB 110。冲突的LD和ST指令可以用类似的方式被标识,如通过提供ROB索引或相应的NSIP值或诸如此类。ROB队列308的条目312和314分别与条目212和214类似,包括用于标识指令的字段、用于存储NSIP值的另一个字段、以及用于存储重放值RPLY的另一个字段。然而,用于存储距离值DST的字段并非必需的且不被包括。其它字段可以被提供但是未示出。在如MV信息指示的在LD与ST指令之间的存储冲突的情况中,存储器子系统116或ROB逻辑318针对LD指令置位在条目314中的RPLY值以便一旦回退就指令ROB 110重放LD指令。

可以如通过通信路径122(图1)直接将MV信息提供给RAT 106的RAT逻辑302,其中,加载/存储冲突对的ROB索引LRIDX和SRIDX被提供给RAT 106。此外或者替代地,ROB逻辑318通过上报加载/存储冲突对的加载和存储ROB索引LRIDX和SRIDX经由通信路径142将存储器违规上报至RAT 106的RAT逻辑302。在一个实施例中,RAT 106包括本地存储器319用于使RAT逻辑302能够存储加载/存储冲突对的ROB索引LRIDX和SRIDX以追踪最旧的存储冲突。在由更旧的存储冲突引起的随后的存储器违规(意味着随后的加载/存储冲突对的更旧的存储指令)的情况中,本地存储器319被RAT逻辑302更新以反映最旧的加载/存储冲突对。

按照与之前针对ROB逻辑218描述类似的方式,ROB逻辑318通过生成指向在ROB队列308中的最旧的指针的回退指针RP进一步执行回退功能。当由RP指向的最旧的指针准备回退时,ROB逻辑318执行回退指令并且将其从ROB队列中308中移除所需的功能。这些功能包括经由通信路径142将回退的指令的ROB索引上报至RAT 106的RAT逻辑302。当RP指向条目312以回退引起存储器违规的加载/存储冲突对的存储指令时,相应的ROB索引SRIDX被上报至RAT逻辑302。如果RAT 106的本地存储器319存储引起存储器违规的加载/存储冲突对的有效ROB索引,则RAT逻辑302将回退的存储指令的SRIDX与存储在本地存储器319中的SRIDX进行比较。在匹配的情况中,RAT逻辑302从ROB队列308中撷取该回退的存储指令所对应的NSIP值SNSIP并将SNSIP存储于本地存储器319中。因为该存储指令已经被恰当地执行,所以允许回退,并且一旦回退,ROB条目就可用于利用较新的指令进行更新从而使得所存储的SNSIP在回退该存储指令之后不可用。因此,回退的存储指令的SNSIP被暂时地保存于本地存储器319中。

当RP指向加载指令的条目314时,ROB逻辑318检测到RPLY值被置位,并且引起LD指令被重发射至调度器108用于重新执行(另外地被称为重放)。LD指令此时未被回退,而是保持在ROB队列308中直到被存储器子系统116成功地重放并最终被回退。尽管如此,ROB 110经由通信路径142向RAT逻辑302上报LD指令被重放了并且标识被重放的加载指令的ROB索引LRIDX。RAT逻辑302将被重放的加载指令的LRIDX与存储在本地存储器319中的LRIDX进行比较。在LRIDX值之间匹配的情况下,RAT逻辑302分配RAT 106的AQ 130的条目320,并且然后将冲突的存储指令的SNSIP值从本地存储器319移动或复制到新条目320的字段中。此外,RAT逻辑302使用加载指令的LRIDX值来从ROB队列308中撷取加载指令的相应的NSIP值LNSIP并将LNSIP存储于AQ 130的条目320的另一个字段中。

AQ 130的每个条目(包括条目320)进一步包括用于存储一个存储有效值STVLD的存储有效字段。如在所展示的实施例中所示,AQ 130的每个条目(包括条目320)可以进一步包括用于存储一个存储ROB索引SRIDX的存储ROB索引字段。在另一个实施例中,AQ 130的条目不包括存储ROB索引字段并且替代地存储ROB索引SRIDX被存储在RAT 106内单独的存储器位置中。当响应于冲突加载指令的重放将LNSIP值和SNSIP值传送至AQ 130中时,条目320的存储值字段和存储ROB索引字段(如果包括的话)还没被定义。应注意的是,来自本地存储器319中的SRIDX未被存储,因为它是存储指令的之前的迭代的ROB索引值因此不再有效。代替地,存储指令的随后的迭代的ROB索引被存储在AQ 130(例如,条目320)或者如在此进一步描述的其他存储位置中。值得注意的是,AQ 130可以包括用于记录多个冲突加载/存储指令对的多个条目320。存储ROB索引字段可以与每个条目一起被包括。替代地,对应于每个条目的存储ROB索引SRIDX存储于单独的存储器位置中。

当随后的(新的)存储指令被RAT逻辑302接收并处理时,针对每个随后的存储指令的每个SNSIP值(示出为SNSIP_N)被提供给在RAT 106内的NSIP比较器324的输入端。NSIP比较器324类似于NSIP比较器224,其中,NSIP比较器324将SNSIP_N与存储在AQ 130内的之前的SNSIP值中的每个值(示出为SNSIP_P)进行比较。当匹配发生时,如当SNSIP_N等于来自AQ 130的条目320的SNSIP_P时,那么这意味着在之前的存储冲突中涉及的存储指令在存储指令的随后的迭代中被再次执行。在这种情况下,NSIP比较器324将条目320中的STVLD值设置为真以指示在条目320中在冲突的加载/存储指令对中涉及的存储指令现在正被再次执行。在一个实施例中,其中,每个条目320进一步包括存储ROB索引字段,NSIP比较器324进一步将与SNSIP_N对应的存储指令的作为ROB索引SRIDX的ROB索引复制到字段320的存储ROB索引字段中。

当随后的加载指令被RAT逻辑302接收并处理时,针对每个随后的加载指令的每个LNSIP值(示出为LNSIP_N)被提供给在RAT 106内的另一个NSIP比较器325的输入端。NSIP比较器325类似于NSIP比较器224,其中,NSIP比较器325将LNSIP_N与存储在AQ 130内的之前的LNSIP值中的每个值(示出为LNSIP_P)进行比较。当匹配发生时,如当LNSIP_N等于来自AQ 130的条目320的LNSIP_P时,NSIP比较器325针对相关性逻辑327的比较逻辑326的一个输入端声明AQ_HIT信号为真。此外,来自匹配条目320的相应的STVLD值被提供给比较逻辑326的另一个输入端。比较逻辑326被示出为布尔逻辑AND门,从而使得当STVLD和AQ_HIT都为真时,比较逻辑326针对相关性逻辑327的传送逻辑330的输入端将相关性信号DEP声明或以其他方式设置为真。同时,对应于存储指令指针(NSIP值)SNSIP的命中存储指令的SRIDX值被提供给传送逻辑330的另一个输入端。命中存储指令的SRIDX值还被存储在匹配条目320的存储ROB条目字段中(如果如在展示的配置中所示的被提供的话),或者在另一个实施例中被存储在RAT 106的另一个存储器位置中。当DEP被设置为真时,传送逻辑330将作为相关性值SRIDX的经撷取的SRIDX值与经由发射路径134传送的随后的加载指令一起传送至调度器108。

如前,调度器108包括针对已经从RAT 106发射的指令的多个条目。如所示的,条目232对应于最新发射的示出为微指令LD_N的加载指令。SRIDX值被提供在条目232的字段中,该条目指示加载指令LD_N依赖于由其相应的ROB索引SRIDX标识的存储指令。调度器108使用此信息以确保加载指令LD_N在其依赖的相应的存储指令之前不被调度,从而使得针对相同加载/存储指令对的随后的迭代不重复存储器违规。

当与处理器200的配置进行比较时,在图3中示出的由处理器100执行的存储冲突配置不依赖于加载和存储指令对之间的距离,依赖于距离的实施方式在许多情形中(包括当支持融合特征时)可能是不可靠的。代替地,存储冲突配置使用指令指针信息(NSIP值)来明确地标识引起存储器违规的加载/存储指令对的加载指令和存储指令两者,该存储器违规最初由存储器子系统116检测到。当随后的存储指令的NSIP值与存储在AQ 130中的NSIP值匹配时,指示随后的存储指令涉及之前的存储冲突并且现在在此迭代中被检测到的STVLD值被设置为有效的,并且同时,随后的存储指令的实际ROB索引例如被存储在AQ 130的匹配条目中。当随后的加载指令的NSIP值与存储在AQ 130中的NSIP值匹配时,则相应的存储指令的ROB索引被撷取并且被用作加载指令的相关性信息。以此方式,不管相同的冲突的加载/存储指令对的下一次迭代之间的中间μop的数量是多少,加载指令被正确地更新以依赖相应的存储指令。调度器108检测相关性并且在该存储指令之前不调度该加载指令,使得存储器违规在随后的迭代中被避免。减少存储冲突的数量进一步减少加载指令重放的次数以提高操作效率。

当NSIP比较器324未检测到AQ 130内的匹配时,那么这意味着随后的存储指令或者不涉及冲突的加载/存储指令对,或者其是冲突的加载/存储指令对的第一次(或可能仅一次)迭代。如果随后的加载指令实际上不依赖于随后的存储指令,并且如果随后的加载指令然后根据OOO操作在随后的存储指令之前被调度,那么存储冲突被存储器子系统116检测到并且AQ 130利用加载和存储NSIP信息被更新。以此方式,NSIP比较器324检测相同存储指令的下一次迭代(如果有的话)并且通过设置相应的STVLD值为真并进一步存储相应的存储ROB索引来更新AQ 130中的相应的条目。NSIP比较器325检测随后的加载指令的下一次迭代(加载NSIP匹配)并且声明AQ_HIT信号为真,并且利用相应的存储指令的ROB索引更新加载指令的相关性以防止另一个存储器违规。

当NSIP比较器325未检测到AQ 130内的匹配时,那么这意味着随后的加载指令或者不依赖于之前的存储指令,或者其是第一次迭代并且还未涉及与存储指令的冲突。如果随后的加载指令实际上确实依赖于之前的存储指令但加载/存储对还未被执行,并且如果随后的加载指令然后根据OOO操作在那个存储指令之前被调度,那么存储器冲突被存储器子系统116检测到并且AQ 130利用加载和存储NSIP信息被更新。以此方式,NSIP比较器325检测同一加载指令的下一次迭代并且声明AQ_HIT信号为真,并且利用相应的存储指令的ROB索引更新加载指令的相关性以防止另一个存储器违规。

注意的是,存储在本地存储器319和/或AQ 130中的NSIP值(SNSIP、LNSIP)可以用缩减形式存储。例如,NSIP值的形成页内偏移的低位在某些配置中可以是足够的。此外或替代地,RAT逻辑302可以进一步包括散列函数,该散列函数将每个NSIP值的高位散列成与低页内偏移位组合的散列值以用于这些存储NSIP值。AQ 130包括如期望的一样多的条目用于在操作过程中检测多个存储冲突。在一个实施例中,AQ 130的每个条目包括用于存储LNSIP值和SNSIP值、SRIDX值和相应的有效值STVLD的4个字段。在如之前描述的另一替代性实施例中,每个条目包括3个字段,其中,SRIDX值被存储在RAT 106内的单独的存储器位置中。

图4是展示由处理器100执行的用于将冲突的加载和存储指令的指令指针存储于AQ 130的条目中的过程的流程图。在第一个块402处,如由存储器子系统116检测到引起存储器违规的存储冲突。在下一个块404处,如由存储器子系统116上报存储器违规的MV信息,其中,MV信息标识冲突的加载和存储指令。MV信息可以包括例如相应的NSIP值(LNSIP和SNSIP)或相应的ROB索引(LRIDX和SRIDX)。在下一个块406处,如通过置位在相应的ROB队列条目中的重放值RPLY来标记加载指令以在ROB队列308中重放。在下一个块408处,RAT 106存储冲突的LD/ST指令对的ROB索引LRIDX和SRIDX。在一个实施例中,ROB索引LRIDX和SRIDX被存储在本地存储器319中。

一旦在块410处回退每条存储指令,就将回退的存储指令的SRIDX与由RAT 106存储的SRIDX进行比较。如果在下一个查询块412处SRIDX值与确定的值不匹配,那么操作返回至块410以回退下一条存储指令。如果在下一个查询块412处SRIDX值与确定的值匹配,那么操作行进至块414,其中,RAT 106如在本地存储器319内撷取并存储回退的存储指令的NSIP值SNSIP。一旦在块416处回退每条加载指令,就将回退的加载指令的LRIDX与由RAT 106存储的LRIDX进行比较。如果在下一个查询块418处LRIDX值与确定的值不匹配,那么操作返回至块416以回退下一条加载指令。如果在查询块418处LRIDX值与确定的值匹配,那么加载指令实际上被重放并且是存储的引起存储器违规的加载/存储指令对的加载指令,并且操作行进至下一个块420处。在块420处,在AQ 130内分配新的条目,使用LRIDX从ROB队列308中撷取加载指令的LNSID以定位加载指令,并且然后加载/存储指令对的SNSID值(可能之前存储于本地存储器319中)和撷取的LNSID值被存储在AQ 130的经分配的条目中。操作至少针对一个加载/存储指令对被完成并且可以针对由存储冲突引起的随后的存储器违规被重复。

图5是展示由处理器100的RAT 106执行的用于检测存储在AQ 130的条目中的相同的加载/存储冲突指令对的随后的执行的随后的存储冲突的过程的流程图。在第一块502处,针对由RAT 106发射的每条存储指令,将发射的存储指令的ROB索引SNSIP与存储在AQ 130内的每个SNSIP进行比较。如果在查询块504处SNSIP值与确定的值不匹配,那么操作返回至块502用于下一条存储指令。操作循环直到检测到匹配。当在查询块504处SNSIP值与确定的值匹配时,那么操作代替地行进至块506,其中,发射的存储指令的相应的SRIDX被存储,并且匹配条目的相应的STVLD值被设置为真。如之前描述的,SRIDX可以被存储在AQ 130条目中,或者其可以被存储在RAT 106的另一个存储器位置中。操作然后返回至块502以进行下一次发射存储指令。操作在处理器100的操作过程中重复。

同时,在另一块510处,针对由RAT 106发射的每条加载指令,将发射的加载指令的ROB索引LNSIP与存储在AQ 130内的每个LNSIP进行比较。如果在查询块512处LNSIP值与确定的值不匹配,那么操作返回至块510用于下一条加载指令。操作循环直到检测到匹配。当在查询块512处LNSIP值与确定的值匹配时,那么操作代替地行进至块514,其中,AQ_HIT被设置为真并且匹配AQ条目的STVLD值被输出或以其他方式被提供。SRIDX值还从匹配AQ条目或从其他存储器位置处输出。在下一个查询块516处,如果AQ_HIT和STVLD如由AND门326确定都为真,那么操作行进至块518,其中,DEP信号被声明。响应于DEP信号,将SRIDX提供为随后发射的加载指令的相关性信息。例如,SRIDX可以被提供在随后发射的加载指令的字段中,从而使得在由ROB队列308中的SRIDX标识的存储指令之前,随后发射的加载指令将不被调度器108调度。以此方式,随后的存储器违规和相应的加载重放被避免。操作然后返回至块510以进行下一次发射加载指令。操作在处理器100的操作过程中重复。

已经呈现前述描述以使得本领域的普通技术人员能够制造并使用如在特定申请的上下文及其要求中提供的本发明。尽管已经参照其某些优选版本相当详细地描述了本发明,但是其他版本和变体是有可能且被设想的。对优选实施例的各种修改对于本领域的技术人员将是明显的,且在此定义的通用原理可以应用于其他实施例。例如,在此描述的电路可以用包括逻辑器件或电路等的任何合适的方式实现。

本领域的技术人员应认识到,他们可以容易使用所披露的概念和特定实施例作为基础来设计并修改其他结构以在不脱离本发明的精神和范围的情况下执行本发明的相同目的。因此,本发明不旨在受限于在此示出并描述的具体实施例,而旨在符合与在此披露的原理和新颖特征一致的最宽范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1