CN106406822A - 具有改进的别名队列和存储冲突检测的处理器 - Google Patents

具有改进的别名队列和存储冲突检测的处理器 Download PDF

Info

Publication number
CN106406822A
CN106406822A CN201610828147.9A CN201610828147A CN106406822A CN 106406822 A CN106406822 A CN 106406822A CN 201610828147 A CN201610828147 A CN 201610828147A CN 106406822 A CN106406822 A CN 106406822A
Authority
CN
China
Prior art keywords
instruction
storage
loading
rob
queue
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
CN201610828147.9A
Other languages
English (en)
Other versions
CN106406822B (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.)
Shanghai Zhaoxin Semiconductor Co Ltd
Original Assignee
Shanghai Zhaoxin Integrated Circuit Co Ltd
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 Shanghai Zhaoxin Integrated Circuit Co Ltd filed Critical Shanghai Zhaoxin Integrated Circuit Co Ltd
Priority to CN201610828147.9A priority Critical patent/CN106406822B/zh
Priority to US15/281,644 priority patent/US10203957B2/en
Publication of CN106406822A publication Critical patent/CN106406822A/zh
Application granted granted Critical
Publication of CN106406822B publication Critical patent/CN106406822B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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 or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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 or 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 or 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 or 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 or 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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 or 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 or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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 or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

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

具有改进的别名队列和存储冲突检测的处理器
技术领域
本发明总体上涉及确定并减少处理器中的存储冲突,并且更具体地涉及使用别名队列确定存储冲突,该别名队列存储用于更准确地预测存储冲突的加载和存储指令指针以便减少存储器违规和加载指令重放(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;耦接于RAT106的调度器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不仅重放加载指令,而且重放比加载指令新的所有指令。当ROB110重放该加载指令时,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等于来自AQ130的条目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等于来自AQ130的条目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与存储在AQ130内的每个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的操作过程中重复。
已经呈现前述描述以使得本领域的普通技术人员能够制造并使用如在特定申请的上下文及其要求中提供的本发明。尽管已经参照其某些优选版本相当详细地描述了本发明,但是其他版本和变体是有可能且被设想的。对优选实施例的各种修改对于本领域的技术人员将是明显的,且在此定义的通用原理可以应用于其他实施例。例如,在此描述的电路可以用包括逻辑器件或电路等的任何合适的方式实现。
本领域的技术人员应认识到,他们可以容易使用所披露的概念和特定实施例作为基础来设计并修改其他结构以在不脱离本发明的精神和范围的情况下执行本发明的相同目的。因此,本发明不旨在受限于在此示出并描述的具体实施例,而旨在符合与在此披露的原理和新颖特征一致的最宽范围。

Claims (20)

1.一种用于处理器的寄存器别名表,包括:
别名队列,该别名队列包括至少一个条目,其中,每个条目存储加载指令指针、存储指令指针和有效值,并且,其中,所述加载和存储指令指针与之前彼此冲突导致存储器违规的一对加载和存储指令相对应;
存储比较器,该存储比较器将随后的存储指令的存储指令指针与存储在所述别名队列中的每个存储指令指针进行比较,并且当检测到匹配时,该存储比较器将在相应的别名队列条目中的相应的有效值设置为真;
加载比较器,该加载比较器将随后的加载指令的加载指令指针与存储在所述别名队列中的每个加载指令指针进行比较,并且当检测到匹配时,该加载比较器将匹配的别名队列条目中的AQ命中设置为真;以及
相关性逻辑,如果所述匹配的别名队列条目的所述有效值和所述AQ命中都为真则该相关性逻辑将所述随后的存储指令的存储索引提供为所述随后的加载指令的相关性信息。
2.如权利要求1所述的寄存器别名表,其中,所述相关性逻辑包括:
比较逻辑,当所述匹配的别名队列条目的所述有效值和所述AQ命中都为真时,该比较逻辑提供相关性指示;以及
传送逻辑,当提供所述相关性指示时,该传送逻辑将所述随后的存储指令的所述存储索引传送至所述随后的加载指令的相关性字段中。
3.如权利要求1所述的寄存器别名表,进一步包括:
本地存储器,该本地存储器存储之前彼此冲突导致所述存储器违规的所述加载和存储指令对的加载索引和存储索引;以及
RAT逻辑,该RAT逻辑将回退的存储指令的随后的存储索引与存储在所述本地存储器中的所述存储索引进行比较,如果匹配则该RAT逻辑撷取并存储所述存储指令指针。
4.如权利要求3所述的寄存器别名表,其中,所述RAT逻辑将重放的加载指令的随后的加载索引与存储在所述本地存储器中的所述加载索引进行比较,并且在匹配的情况下,撷取所述加载指令指针、在所述别名队列中分配条目并且将所述存储指令指针和所述加载指令指针存储到所述别名队列的所述经分配的条目中。
5.如权利要求1所述的寄存器别名表,其中,所述别名队列的每个条目进一步包括存储索引字段,其中,当所述存储比较器检测到所述随后的存储指令的所述存储指令指针与存储在所述别名队列中的任何存储指令指针匹配时,所述存储比较器进一步将所述随后的存储指令的所述存储索引存储到所述存储索引字段中。
6.如权利要求1所述的寄存器别名表,进一步包括RAT逻辑,该RAT逻辑将所述加载和存储指令指针以减少的位数存储在所述别名队列中,这些位包括与所述加载和存储指令指针的高位的散列值组合的低页偏移位。
7.一种处理器,包括:
重排序缓冲器,该重排序缓冲器包括ROB队列,该ROB队列包括多个条目,其中,每个条目存储被发射用于执行的相应的指令的指令指针;以及
寄存器别名表,该寄存器别名表包括:
别名队列,该别名队列包括至少一个条目,其中,每个条目存储加载指令指针、存储指令指针和有效值;
RAT逻辑,该RAT逻辑接收由之前的加载指令与之前的存储指令之间的存储冲突引起的存储器违规指示,其中,所述RAT逻辑从所述ROB队列中撷取所述之前的存储指令的存储指令指针和所述之前的加载指令的加载指令指针并且将所述存储指令指针和所述加载指令指针存储到所述别名队列的条目中;
存储比较器,该存储比较器将随后的存储指令的存储指令指针与存储在所述别名队列中的每个存储指令指针进行比较,并且当检测到与相应的别名队列条目中的存储指令指针匹配时,该存储比较器将在所述相应的别名队列条目中的相应的有效值设置为真;
加载比较器,该加载比较器将随后的加载指令的加载指令指针与存储在所述别名队列中的每个加载指令指针进行比较,并且当检测到与所述相应的别名队列条目中的加载指令指针匹配时,该加载比较器将AQ命中设置为真;以及
相关性逻辑,当所述匹配的别名队列条目的所述有效值和所述AQ命中都为真时,该相关性逻辑将所述随后的存储指令的存储索引提供为所述随后的加载指令的相关性信息。
8.如权利要求7所述的处理器,其中:
所述重排序缓冲器进一步包括ROB逻辑,该ROB逻辑按程序顺序回退在所述ROB队列中的指令并且该ROB逻辑向所述RAT逻辑标识被回退或被重放的指令;以及
其中,所述RAT逻辑一旦所述之前的存储指令被回退就从所述ROB队列中撷取所述之前的存储指令的所述存储指令指针,并且一旦所述之前的加载指令被重放就从所述ROB队列中撷取所述之前的加载指令的所述加载指令指针。
9.如权利要求7所述的处理器,其中:
所述重排序缓冲器进一步包括ROB逻辑,该ROB逻辑按程序顺序回退在所述ROB队列中的指令并且该ROB逻辑向所述RAT逻辑标识被回退或被重放的指令;
其中,所述寄存器别名表进一步包括本地存储器;
其中,响应于所述存储器违规指示,所述RAT逻辑存储加载ROB索引及存储ROB索引到所述本地存储器中,该加载ROB索引标识所述之前的加载指令在所述ROB队列中的位置,而该存储ROB索引标识所述之前的存储指令在所述ROB队列中的位置;
其中,所述RAT逻辑将从所述ROB逻辑接收到的存储ROB索引与存储在所述本地存储器中的所述存储ROB索引进行比较,并且在匹配的情况下撷取并存储来自所述ROB队列的所述之前的存储指令的所述存储指令指针;并且
其中,所述RAT逻辑将从所述ROB逻辑接收的用于重放加载指令的加载ROB索引与存储在所述本地存储器中的所述加载ROB索引进行比较,并且在匹配的情况下,撷取来自所述ROB队列的所述之前的加载指令的所述加载指令指针、在所述别名队列中分配条目并且将所述经撷取的加载指令指针和所述存储指令指针存储到所述别名队列的所述经分配的条目中。
10.如权利要求7所述的处理器,进一步包括:
存储器子系统,该存储器子系统检测由之前的加载指令与之前的存储指令之间的冲突引起的存储器违规并且该存储器子系统提供标识所述之前的加载和存储指令的所述存储器违规指示;
其中,在所述ROB队列内与所述之前的加载指令对应的条目标记有重放指示;并且
其中,所述RAT逻辑响应于所述存储器违规指示存储了存储ROB索引并且存储了加载ROB索引,该存储ROB索引标识所述之前的存储指令,而该加载ROB索引标识所述之前的加载指令。
11.如权利要求7所述的处理器,其中,所述相关性逻辑包括:
比较逻辑,当所述匹配的别名队列条目的所述有效值和所述AQ命中都为真时,该比较逻辑提供相关性指示;以及
传送逻辑,当提供所述相关性指示时,该传送逻辑将所述随后的存储指令的所述存储索引传送至所述随后的加载指令的相关性字段中。
12.如权利要求7所述的处理器,其中,所述别名队列的每个条目进一步包括存储索引字段,其中,当所述存储比较器检测到所述随后的存储指令的所述存储指令指针与存储在所述别名队列中的任何存储指令指针匹配时,所述存储比较器进一步将所述随后的存储指令的所述存储索引存储到所述存储索引字段中。
13.一种预测加载和存储相关性以减小存储器违规的方法,该方法包括:
将冲突的加载指令与存储指令的指令指针存储到别名队列中;
将随后的存储指令的随后存储指令指针与存储在该别名队列中的每个存储指令指针进行比较,并且当发现匹配时,指示该随后的存储指令的相应的存储索引是有效的;并且
将随后的加载指令的随后加载指令指针与存储在该别名队列中的每个加载指令指针进行比较,并且当发现匹配时且如果该随后的存储指令的该相应的存储索引是有效的,则将该随后的存储指令的该相应的存储索引提供为该随后的加载指令的相关性信息。
14.如权利要求13所述的方法,进一步包括:
接收存储器违规指示,该存储器违规指示标识上述冲突的加载指令和存储指令;
存储标识该冲突的加载指令的加载索引并存储标识该冲突的存储指令的存储索引;并且
当该冲突的存储指令回退时,撷取并存储相应的存储指令指针。
15.如权利要求14所述的方法,进一步包括一旦该冲突的加载指令被重放就撷取并存储相应的加载指令指针。
16.如权利要求14所述的方法,其中,所述撷取并存储相应的存储指令指针包括从ROB队列中撷取该相应的存储指令指针并存储于本地存储器中。
17.如权利要求16所述的方法,进一步包括:
响应于该冲突的加载指令的重放,从该ROB队列中撷取相应的加载指令指针;并且
在该别名队列中分配条目并将该撷取的加载指令指针存储于该别名队列的该条目中并且将存储在该本地存储器中的该相应的存储指令指针存储在该别名队列的该条目中。
18.如权利要求17所述的方法,其中,所述指示该随后的存储指令的相应的存储索引是有效的的步骤包括将该相应的存储索引存储于该别名队列的该条目中。
19.如权利要求14所述的方法,进一步包括将回退的存储指令的存储索引与该存储的存储索引进行比较,并且将重放的加载指令的加载索引与该存储的加载索引进行比较。
20.如权利要求13所述的方法,其中,所述将这些冲突的加载指令和存储指令的指令指针存储于别名队列中的步骤包括将这些冲突的加载指令和存储指令的缩减形式存储于该别名队列中。
CN201610828147.9A 2016-09-18 2016-09-18 具有改进的别名队列和存储冲突检测的处理器 Active CN106406822B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201610828147.9A CN106406822B (zh) 2016-09-18 2016-09-18 具有改进的别名队列和存储冲突检测的处理器
US15/281,644 US10203957B2 (en) 2016-09-18 2016-09-30 Processor with improved alias queue and store collision detection to reduce memory violations and load replays

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610828147.9A CN106406822B (zh) 2016-09-18 2016-09-18 具有改进的别名队列和存储冲突检测的处理器

Publications (2)

Publication Number Publication Date
CN106406822A true CN106406822A (zh) 2017-02-15
CN106406822B CN106406822B (zh) 2019-02-15

Family

ID=57996688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610828147.9A Active CN106406822B (zh) 2016-09-18 2016-09-18 具有改进的别名队列和存储冲突检测的处理器

Country Status (2)

Country Link
US (1) US10203957B2 (zh)
CN (1) CN106406822B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108874447A (zh) * 2018-06-05 2018-11-23 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN108920191A (zh) * 2018-06-05 2018-11-30 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN109933368A (zh) * 2019-03-12 2019-06-25 苏州中晟宏芯信息科技有限公司 一种指令的发射和验证方法及装置
CN110658990A (zh) * 2018-06-28 2020-01-07 希捷科技有限公司 具有改善的准备时间的数据存储系统
CN112965668A (zh) * 2021-03-30 2021-06-15 上海芷锐电子科技有限公司 一种缓存数字电路处理请求冲突的方法

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11113055B2 (en) 2019-03-19 2021-09-07 International Business Machines Corporation Store instruction to store instruction dependency
US10970077B2 (en) 2019-06-11 2021-04-06 Apple Inc. Processor with multiple load queues including a queue to manage ordering and a queue to manage replay

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads
CN101847094A (zh) * 2009-05-29 2010-09-29 威盛电子股份有限公司 非循序执行的微处理器及其操作方法
US20130326198A1 (en) * 2012-05-30 2013-12-05 Stephan G. Meier Load-store dependency predictor pc hashing
CN103455309A (zh) * 2012-05-04 2013-12-18 苹果公司 加载-储存相关性预测器内容管理
US20140244984A1 (en) * 2013-02-26 2014-08-28 Advanced Micro Devices, Inc. Eligible store maps for store-to-load forwarding

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8930679B2 (en) * 2009-05-29 2015-01-06 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay by making an issuing of a load instruction dependent upon a dependee instruction of a store instruction
US10152327B2 (en) * 2013-03-15 2018-12-11 Intel Corporation Apparatus for gating a load operation based on entries of a prediction table

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads
CN101847094A (zh) * 2009-05-29 2010-09-29 威盛电子股份有限公司 非循序执行的微处理器及其操作方法
CN103455309A (zh) * 2012-05-04 2013-12-18 苹果公司 加载-储存相关性预测器内容管理
US20130326198A1 (en) * 2012-05-30 2013-12-05 Stephan G. Meier Load-store dependency predictor pc hashing
US20140244984A1 (en) * 2013-02-26 2014-08-28 Advanced Micro Devices, Inc. Eligible store maps for store-to-load forwarding

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108874447A (zh) * 2018-06-05 2018-11-23 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN108920191A (zh) * 2018-06-05 2018-11-30 上海兆芯集成电路有限公司 处理器电路及其操作方法
US10509655B1 (en) 2018-06-05 2019-12-17 Shanghai Zhaoxin Semiconductor Co., Ltd. Processor circuit and operation method thereof
US10747542B2 (en) 2018-06-05 2020-08-18 Shanghai Zhaoxin Semiconductor Co., Ltd. Load store dependency predictor using separate alias tables for store address instructions and store data instructions
CN108874447B (zh) * 2018-06-05 2020-09-15 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN108920191B (zh) * 2018-06-05 2020-11-20 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN110658990A (zh) * 2018-06-28 2020-01-07 希捷科技有限公司 具有改善的准备时间的数据存储系统
CN109933368A (zh) * 2019-03-12 2019-06-25 苏州中晟宏芯信息科技有限公司 一种指令的发射和验证方法及装置
CN109933368B (zh) * 2019-03-12 2023-07-11 北京市合芯数字科技有限公司 一种指令的发射和验证方法及装置
CN112965668A (zh) * 2021-03-30 2021-06-15 上海芷锐电子科技有限公司 一种缓存数字电路处理请求冲突的方法

Also Published As

Publication number Publication date
US20180081688A1 (en) 2018-03-22
CN106406822B (zh) 2019-02-15
US10203957B2 (en) 2019-02-12

Similar Documents

Publication Publication Date Title
CN106406822A (zh) 具有改进的别名队列和存储冲突检测的处理器
US7966478B2 (en) Limiting entries in load reorder queue searched for snoop check to between snoop peril and tail pointers
US6553480B1 (en) System and method for managing the execution of instruction groups having multiple executable instructions
US7822951B2 (en) System and method of load-store forwarding
US8285947B2 (en) Store hit load predictor
CN100424635C (zh) 验证将加载作业的推测结果连结到缓存器值的存储档案的系统及方法
US20170060579A1 (en) Device and processing architecture for instruction memory efficiency
JP5512041B2 (ja) データ処理システムのトレース時のキー割り当て
US20020023203A1 (en) Memory access debug facility
CN105005463B (zh) 具有世代重命名的计算机处理器
US10725937B2 (en) Synchronized access to shared memory by extending protection for a store target address of a store-conditional request
US20080010440A1 (en) Means for supporting and tracking a large number of in-flight stores in an out-of-order processor
US10509655B1 (en) Processor circuit and operation method thereof
US20070101111A1 (en) Processor core and method for managing program counter redirection in an out-of-order processor pipeline
Schuchman et al. BlackJack: Hard error detection with redundant threads on SMT
CN110221862A (zh) 指令执行方法及指令执行装置
US7013256B2 (en) Computer system with debug facility
CN116136810A (zh) 寄存器传输级设计内存序检测方法及装置存储介质和终端
US20080010441A1 (en) Means for supporting and tracking a large number of in-flight loads in an out-of-order processor
US11693776B2 (en) Variable protection window extension for a target address of a store-conditional request
US10747542B2 (en) Load store dependency predictor using separate alias tables for store address instructions and store data instructions
CN104808996B (zh) 减少处理引擎中的加载-存储冲突惩罚的系统和方法
CN117806706A (zh) 存储顺序违例处理方法、装置、电子设备及介质
Utamaphethai et al. Relating buffer-oriented microarchitecture validation to high-level pipeline functionality
Poskitt et al. Using contracts to guide the search-based verification of concurrent programs

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203

Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd.

Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203

Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd.

CP03 Change of name, title or address