CN105808211B - 用于将程序中的加载指令分发到数据高速缓存的方法和设备 - Google Patents

用于将程序中的加载指令分发到数据高速缓存的方法和设备 Download PDF

Info

Publication number
CN105808211B
CN105808211B CN201610192717.XA CN201610192717A CN105808211B CN 105808211 B CN105808211 B CN 105808211B CN 201610192717 A CN201610192717 A CN 201610192717A CN 105808211 B CN105808211 B CN 105808211B
Authority
CN
China
Prior art keywords
load
instruction
window
function
storage
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.)
Active
Application number
CN201610192717.XA
Other languages
English (en)
Other versions
CN105808211A (zh
Inventor
H·杰克逊
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.)
Hai Luo Software Co ltd
Imagination Technologies Ltd
Original Assignee
MIPS Tech LLC
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 Tech LLC filed Critical MIPS Tech LLC
Publication of CN105808211A publication Critical patent/CN105808211A/zh
Application granted granted Critical
Publication of CN105808211B publication Critical patent/CN105808211B/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/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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

描述了用于将加载指令分发到数据高速缓存的方法及加载和存储缓冲器。所述方法包括确定存储缓冲器中是否存在比所述加载指令更旧的任何未解析的存储指令。如果所述存储缓冲器中存在比所述加载指令更旧的至少一个未解析的存储指令,则确定所述存储缓冲器中最旧的未解析的存储指令是否在所述加载指令的推测窗内。如果所述最旧的未解析的存储指令在所述加载指令的推测窗内,则所述加载指令被推测性地分发到所述数据高速缓存。否则,所述加载指令被停止,直到所述推测窗外侧的任何未解析的存储指令被解析为止。所述推测窗是定义紧接着在所述加载指令之前的指令或存储指令的数量的短窗。

Description

用于将程序中的加载指令分发到数据高速缓存的方法和设备
本申请是申请日为 2014 年 2 月 11 日并且申请号为 201410047131.5 的中国专利申请的分案申请。
背景技术
在乱序处理器中,在解析位于加载指令之前的所有存储指令的存储器地址之前,可能不会向该存储器地址安全地分发加载指令。这是因为如果之前的存储指令写入到由该加载指令读取的存储器地址,则该加载指令应该读取由该存储指令写入的数据,而不是存储器中的数据,以便确保它具有最近的数据。然而,停止加载指令直到解析了所有之前的存储指令的存储器地址为止,会引起不必要的延迟。
在一些乱序处理器中,通过在解析所有之前的存储指令的存储器地址之前推测性地将加载指令分发到存储器来解决这一问题。如果之前的存储指令稍后被确定为与该加载指令写入到相同的存储器地址,则该加载指令被倒回并且使用正确的数据。然而,倒回是复杂且昂贵的,并且理想地应该被避免。
在一些乱序处理器中,通过以加载指令与之前的存储指令在过去是否冲突为基础来预测它们是否将冲突(例如,存储指令将与加载指令写入到相同的存储器地址),减少倒回的数量。例如,程序计数器可以用于浏览表格以便确定加载和存储指令在过去是否冲突。如果它们在过去冲突,则加载指令可以不被分发,直到解析了存储指令的存储器地址为止。这一技术在加载指令和存储指令在循环中并且因而被重复执行的情况下是有用的。
下面描述的实施例并不局限于解决已知的乱序处理器的任何或所有缺点的实现。
发明内容
提供这一发明内容以便以简化的形式引入下面在具体实施方式中进一步描述的概念的选择。这一发明内容并不意在识别请求保护的主题的关键特征或本质特征,也不意在用作确定请求保护的主题的范围时的辅助。
本文描述了用于将加载指令分发到数据高速缓存的方法以及加载和存储缓冲器。所述方法包括确定所述存储缓冲器中是否存在比所述加载指令更旧的任何未解析的存储指令。如果所述存储缓冲器中存在比所述加载指令更旧的至少一个未解析的存储指令,则确定所述存储缓冲器中最旧的未解析的存储指令是否在所述加载指令的推测窗内。如果所述最旧的未解析的存储指令在所述加载指令的推测窗内,则将所述加载指令推测性地分发到数据高速缓存。否则,所述加载指令被停止,直到解析了所述推测窗外侧的任何未解析的存储指令为止。推测窗是可以定义紧接着在所述加载指令之前的指令或存储指令的数量的短窗。
第一方面提供一种将程序中的加载指令分发到数据高速缓存的方法,所述方法包括:在加载和存储逻辑单元处确定存储缓冲器中是否存在比所述加载指令更旧的任何未解析的存储指令;如果所述存储缓冲器中存在比所述加载指令更旧的至少一个未解析的存储指令,则在所述加载和存储逻辑单元处确定所述存储缓冲器中最旧的未解析的存储指令是否在所述加载指令的推测窗内;并且如果所述最旧的未解析的存储指令在所述加载指令的推测窗内,则将所述加载指令推测性地分发到所述数据高速缓存。
第二方面提供一种用于将程序中的加载指令分发到数据高速缓存的加载和存储缓冲器,所述加载和存储缓冲器包括:用于存储一个或多个存储指令的存储缓冲器;以及与所述存储缓冲器通信的加载和存储逻辑单元,所述加载和存储逻辑单元配置为:确定所述存储缓冲器中是否存在比所述加载指令更旧的任何未解析的存储指令;如果在所述存储缓冲器中存在比所述加载指令更旧的至少一个未解析的存储指令,则确定所述存储缓冲器中最旧的未解析的存储指令是否在所述加载指令的推测窗内;并且如果所述最旧的未解析的存储指令在所述加载指令的推测窗内,则将所述加载指令推测性地分发到所述数据高速缓存。
第三方面提供一种包括所述第二方面的加载和存储缓冲器的乱序处理器。
第四方面提供一种如实质上参照图2描述的加载和存储缓冲器。
第五方面提供一种将加载指令分发到如实质上参照图4描述的数据高速缓存的方法。
第六方面提供一种动态地调整如实质上参照图5描述的推测窗的尺寸的方法。
本文描述的方法可以由计算机执行,所述计算机配置有以机器可读形式存储在有形存储介质上的软件,例如包括用于配置计算机以便执行所述方法的构成部分的计算机程序代码的计算机程序的形式。有形(或非暂态)存储介质的示例包括磁盘、拇指驱动、存储卡等等,并且不包括传播的信号。软件可以适合于在并行处理器或串行处理器上执行,以使得可以按照任何适当的顺序或者同时执行所述方法步骤。
这承认固件和软件可以是有价值的、可单独买卖的商品。意在包括在“哑”或标准硬件上运行或者控制该“哑”或标准硬件的软件以便执行期望的功能。也意在包括“描述”或定义硬件的配置的软件,例如HDL(硬件描述语言)软件,如用于设计硅芯片或用于配置通用可编程芯片使用的,以便执行期望的功能。
可以适当地组合优选的特征,这对于本领域的普通技术人员来说是显而易见的,并且可以将优选的特征与本发明的任何方面进行组合。
附图说明
将参照附图通过示例的方式来描述本发明的实施例,在附图中:
图1是示例单线程乱序处理器的示意图;
图2是图1的示例加载和存储缓冲器的示意图;
图3是说明图1和图2的程序代码、重排序缓冲器和存储缓冲器之间的关系的示意图;
图4是用于将加载指令分发到数据高速缓存的示例方法的流程图;
图5是用于动态地更新在图4的方法中使用的推测窗的尺寸的示例方法的流程图;以及
图6是示例性多线程乱序处理器的示意图。
在整个附图中使用共同的附图标记来指示类似的特征。
具体实施方式
下面仅通过示例的方式来描述本发明的实施例。这些示例代表申请人目前已知的实践本发明的最佳方式,尽管它们不是可以实现本发明的唯一方式。该描述阐述了这些示例的功能以及用于构造和操作所述示例的步骤的序列。然而,相同或等效的功能和序列可以由不同的示例实现。
本文描述的实施例涉及用于在乱序处理器中推测性地分发加载指令的方法以及加载和存储缓冲器,其利用程序不可能包括包含在存储器地址的加载之后立即到相同的存储器地址的存储的代码的认识。具体地说,在本文描述的实施例中,只有在所有较旧的未解析的存储指令(例如,其中还没有解析目的地存储器地址的存储指令)在加载指令的短窗内时,才推测性地分发加载指令。如果在这一窗的外侧存在任何较旧的未解析的存储指令,则停止加载指令。换句话说,如果解析了在所述窗外侧的所有存储指令,则可以推测性地分发所述加载指令。
本文描述的方法以及加载和存储缓冲器允许推测性地分发加载指令(例如,在解析了较旧的存储指令的存储器地址之前被分发),并且因而与不允许加载指令的推测性执行的方法相比较减少了加载指令的不必要的停止(例如,在较旧的未解析的加载指令不与加载指令写入到相同的存储器地址的情况下,该加载指令的停止)的数量。而且,它们与纯推测性方法(例如,其中推测性地分发所有加载指令的方法)相比较减少了由误推测的加载指令引起的倒回的数量,因而改善了处理器的性能。具体地说,因为程序不可能在短窗内写入到存储器地址并且然后从该存储器地址进行读取,以在这一窗中的未解析的存储指令为基础推测性地分发的加载指令不可能被误推测并且因而将引起倒回。
在一些实施例中,所述窗的尺寸被固定,并且在其它实施例中,所述窗的尺寸被动态地调整。
现在参照图1,说明了单线程乱序处理器100,其中如果所有较旧的未解析的存储指令都在加载指令的短窗内,则可以推测性地分发加载指令。处理器100包括配置为从如由程序计数器(PC)指示的程序(按照程序顺序)取出指令的取出级102以及布置为解释所述指令并且执行寄存器重命名的解码和重命名级104。
在指令经过解码和重命名级104之后,将其插入到重排序缓冲器106(ROB)中,并被分派到保留站108或加载和存储缓冲器110用于以指令的类型为基础来进行执行。例如,可以将加载和存储指令分派到加载和存储缓冲器110,并且可以将所有其它指令分派到保留站108。
重排序缓冲器106是使指令能够被乱序地执行但被有序地呈交的缓冲器。重排序缓冲器106保持按照程序顺序插入在其中的指令,但是ROB 106内的指令可以由乱序管线112及加载和存储缓冲器110失序地执行。在一些示例中,重排序缓冲器106可以被形成为具有指向ROB 106中的最旧的指令的头部和指向ROB 106中的最新的指令的尾部的环形缓冲器。指令按照程序顺序从重排序缓冲器106输出。换句话说,当指令被乱序管线112或加载和存储缓冲器110执行时将该指令从ROB 106的头部输出,并且将该头部递增到ROB 106中的下一个指令。将从重排序缓冲器106输出的指令提供到呈交级114,该呈交级114将该指令的结果呈交到寄存器/存储器。
保留站108从解码和重命名级104接收指令并且将它们存储在队列中。指令在该队列中等待,直到它的输入操作数值可用为止。一旦所有指令的操作数值可用,就认为该指令准备好用于执行并且可以将其分发到乱序管线112用于执行。指令的操作数值可以在更早的、更旧的指令的操作数值之前可用,允许该指令在那些更早的、更旧的指令之前离开所述队列。乱序管线112可以访问一个或多个寄存器文件116以便执行到物理寄存器的读取和/或写入。
加载和存储缓冲器110从解码和重命名级104接收加载和存储指令(例如,从存储器地址读取或写入到存储器地址的指令)并且将它们分别存储在加载和存储缓冲器中。加载指令在加载缓冲器中等待,直到它的源存储器地址被解析为止。一旦加载指令的源存储器地址被解析,就认为该指令准备好并且可以被分发到数据高速缓存118。将分发到数据高速缓存118的任何加载的结果返回到加载和存储缓冲器110,该加载和存储缓冲器又将该结果写入到适当的寄存器文件116。在本文描述的实施例中,加载和存储缓冲器110配置为如果所有较旧的未解析的存储指令在加载指令的短窗内则将加载指令推测性地分发到数据高速缓存118。
在一些情况下,可以不将存储指令分发到数据高速缓存118,直到它的目的地存储器地址被解析并且它由重排序缓冲器106呈交到呈交级114为止。这是因为,在存储指令被呈交之前,存在它可能由于较旧的指令的倒回而被冲掉的机会。具体地说,如果存储指令在呈交时间之前被分发到数据高速缓存118并且接着随后被冲掉,则由存储指令118对数据高速缓存进行的更新不能够被撤销。而且,使存储指令的分发延迟直到呈交时间为止不引起从相同的存储器地址读取的加载指令的延迟,因为能够从存储缓冲器获得满足加载指令的数据。另一方面(如上所述),只要加载准备好,它们就可以被分发,因为它们不更新数据高速缓存118。因此,如果它们被倒回,则不存在需要被撤销的更新。
参照图2来描述示例性加载和存储缓冲器110。
处理器100还可以包括分支预测器120,该分支预测器120配置为在诸如分支指令的被已知引起可能的流改变的指令的情况下预测程序流将采取哪个方向。分支预测是有用的,因为它能够使指令在分支指令的结果已知之前由处理器100推测性地执行。分支预测器120可以从取出级102以及解码和重命名级104接收与新指令有关的输入,并且从乱序管线112以及加载和存储缓冲器110接收与执行的指令有关的输入。
当分支预测器120精确地预测程序流时,这改善了处理器100的性能。然而,如果分支预测器120没有正确地预测分支方向,则发生误预测,这需要在程序能够继续之前进行校正。为了校正误预测,发送到ROB 106的推测性指令被丢弃,并且取出级102开始从正确的程序分支取出指令。
现在参照图2,说明了图1的示例加载和存储缓冲器110。如上面参照图1描述的,加载和存储缓冲器110负责从解码和重命名级104接收加载和存储指令,并且将它们存储在各自的加载和存储缓冲器中,直到它们准备好用于分发为止。如上所述,加载指令可以在其源存储器地址被解析时准备好用于分发,并且存储指令可以在其目的地存储器地址被解析并且被呈交级114呈交时准备好用于分发。一旦加载指令准备好用于分发,加载和存储缓冲器110就将该加载指令分发到数据高速缓存118,(i)如果在存储缓冲器中不存在较旧的未解析的存储指令;或者(ii)如果所有较旧的未解析的存储指令在加载指令的短窗内;并且加载指令不能够被存储缓冲器中的存储指令解析(例如,在存储缓冲器中不存在写入到在加载指令中指定的存储器地址的较旧的存储指令)。这一短窗将在本文中被称为推测窗。
图2的加载和存储缓冲器110包括用于存储从解码和重命名级104接收的加载指令的加载缓冲器202,用于存储从解码和重命名级104接收的存储指令的存储缓冲器204,以及用于当存储在加载和存储缓冲器202和204中的加载和存储准备好用于分发时将它们分发到数据高速缓存118的加载和存储逻辑单元206。在一些情况下,加载缓冲器202、存储缓冲器204或者加载和存储缓冲器202和204二者可以被实现为具有头部和尾部的环形缓冲器。
加载缓冲器202从解码和重命名级104接收加载指令并且对它们进行存储,直到它们被分发到数据高速缓存118或者它们被重写为止。加载缓冲器202可以配置为包括多个行208、210、212和列214-222的表。例如,如图2所示,加载缓冲器202可以包括对于缓冲器中的每一个加载指令的多个行208、210、212以及ROB ID列214、存储器地址列216、存储器地址有效列218、目的地寄存器号码列220和状态列222。尽管图2的示例加载缓冲器202包括五个列214-222,但是其它实施例可以具有更多、更少和/或不同的列。
ROB ID列214用于存储加载指令的ROB ID。使用ROB ID来索引ROB 106中的每一个条目/行。因为将每一个指令插入在ROB 106中,因此每一个指令被分配指定该指令在ROB106中的位置或时隙的ROB ID。因为指令按照程序顺序被存储在ROB 106中并且因而ROB ID按照程序顺序被分配,ROB ID可以用于识别与彼此有关的指令的顺序。每一个加载指令的ROB ID连同加载指令一起被解码和重命名级104典型地提供到加载和存储缓冲器110。
存储器地址列216用于存储由加载指令读取的存储器地址。存储器地址典型地不由解码和重命名级104提供到加载和存储缓冲器110。因此,当从解码和重命名级104接收到加载指令时,认为存储器地址是未被解析的。存储器地址随后被解析并存储在存储器地址列216中。在一些情况下,存储器地址可以由乱序管线112解析。在其它情况下,存储器地址可以由加载和存储缓冲器110解析。例如,加载和存储缓冲器110可以包括地址生成单元(未示出),一旦源寄存器准备好被读取,该地址生成单元就生成或解析存储器地址。
地址生成单元可以在它从乱序管线112接收到源寄存器准备好被读取的指示时确定该源寄存器准备好被读取。具体地说,乱序管线112可以配置为当它检测到写入到特定的物理寄存器的指令正在被执行时将特定的物理寄存器准备好被读取的指示发送到保留站108以及加载和存储缓冲器110。
存储器地址有效列218用于指示存储器地址列216中的数据是否有效。存储器地址有效列218可以按照任何适当的方式实现。例如,在一些情况下,存储器地址有效列218可以被实现为单个位,并且在其它情况下,存储器地址有效列218可以被实现为布尔值。因为在创建行时(例如,在从解码和重命名级104接收到加载指令时)存储器地址典型地是未知的,因此可以初始设置存储器地址有效列218(例如,为“0”或“假”)以便指示存储器地址列216中的数据无效。一旦存储器地址被解析并且存储在存储器地址列216中,该存储器地址有效列218就可以被更新(例如,为“1”或“真”)以便指示存储器地址列216中的数据有效。
目的地寄存器号码列220用于存储物理寄存器的号码,其中要存储从在存储器地址列216中识别的存储器地址获得的数据。
状态列222可以用于指示加载指令的当前状态。在一些情况下,每一个指令可以被分配下列状态中的一个:分发和未分发。在这些情况中,当从解码和重命名级104接收到加载指令时,可以将该状态设置为“未分发”。一旦被分发到数据高速缓存118,就可以将该状态改变为“分发”。
存储缓存器204从解码和重命名级104接收存储指令,并且对它们进行存储,直到它们被分发到数据高速缓存118或者被重写为止。与加载缓冲器202类似,存储缓冲器204可以配置为包括多个行224、226、228和列230-242的表。例如,如图2所示,存储缓冲器204可以包括对于缓冲器中的每一个存储指令的行224、226、228以及ROB ID列230、存储器地址列232、存储器地址有效列234、源寄存器号码列236、源数据列238、源数据有效列240和状态列242。尽管图2的示例存储缓冲器204包括七个列,但是其它实施例可以具有更多、更少和/或不同的列。
ROB ID列230用于存储所述存储指令的ROB ID。
存储器地址列232用于存储将被存储指令写入到的存储器地址。存储器地址典型地不被解码和重命令级104提供到加载和存储缓冲器110。因此,当从解码和重命名级104接收到存储指令时,认为存储器地址未被解析。存储器地址随后被解析并且存储在存储器地址列232中。在一些情况下,存储器地址可以由乱序管线112解析。在其它情况下,存储器地址可以由加载和存储缓冲器110解析。例如,加载和存储缓冲器110可以包括地址生成单元(未示出),一旦源寄存器准备好被读取,该地址生成单元就生成或解析存储器地址。
存储器地址有效列234用于指示存储器地址列232中的数据是否有效。存储器地址有效列234可以按照任何适当的方式实现。例如,在一些情况下,存储器地址有效列234可以被实现为单个位,并且在其它情况下,存储器地址有效列234可以被实现为布尔值。因为在创建行时(例如,在从解码和重命名级104接收到存储指令时)存储器地址典型地是未知的,因此可以初始设置存储器地址有效列234(例如,为“0”或“假”)以便指示存储器地址列232中的数据无效。一旦存储器地址被解析并且存储在存储器地址列232中,存储器地址有效列234就可以被更新(例如,为“1”或“真”)以便指示存储器地址列232中的数据有效。
源寄存器号码列236包括物理寄存器的号码,包含要被写入到在存储器地址列232中识别的存储器地址的数据。
源数据列238用于存储要被写入到在存储器地址列232中指定的存储器地址的来自在源寄存器号码列236中指定的源寄存器的数据。源数据典型地不被解码和重命令级104提供到加载和存储缓冲器110。因此,当从解码和重命名级104接收到存储指令时,源数据是未知的。加载和存储逻辑单元206可以配置为一旦它从乱序管线112接收到源寄存器准备好被读取的指示就随后从在源寄存器号码列236中指定的源寄存器号码获得源数据。如上面参照图1描述的,乱序管线112可以配置为当它检测到正在执行写入到特定的物理寄存器的指令时向保留站108以及加载和存储缓冲器110发送该特定的物理寄存器准备好被读取的指示。
源数据有效列240用于指示源数据列238中的数据是否有效。源数据有效列240可以按照任何适当的方式实现。例如,在一些情况下,源数据有效列240可以被实现为单个位,并且在其它情况下,源数据有效列240可以被实现为布尔值。因为在创建行时(例如,在从解码和重命名级104接收到存储指令时)源数据典型地不是已知的,因此可以初始设置源数据有效列240(例如,为“0”或“假”)以便指示源数据列238中的数据无效。一旦源数据被获得并存储在源数据列238中,源数据有效列240就可以被更新(例如,为“1”或“真”)以便指示源数据列238中的数据有效。
在其它示例中,存储缓冲器204可以不包括如图2所示的源数据和源数据有效列238和240。在这些示例中,加载和存储逻辑单元206可以配置为当存储指令被选择用于分发到数据高速缓存118时从寄存器文件116获得源数据。这允许与其中存储缓冲器包括源数据和源数据有效列238和240的情况相比较,存储缓冲器204更小。
状态列242可以用于指示存储指令的当前状态。在一些情况下,每一个存储指令可以被分配下列状态中的一个:分发和未分发。在这些情况中,当从解码和重命名级104接收到存储指令时,可以将该状态初始设置为“未分发”。一旦被分发到数据高速缓存118,就可以将该状态改变为“分发”。
加载和存储逻辑单元206负责将准备好的加载和存储指令分发到数据高速缓存118。在一些情况下,在任何周期中,仅一个加载或存储指令能够被分发到数据高速缓存118。在这些情况下,在每一个时钟周期,加载和存储逻辑单元206浏览加载和存储缓冲器202和204以便确定是否存在任何准备好的加载和/或存储。如上所述,在加载指令的源存储器地址被解析时认为该加载指令准备好,并且在存储指令的目的地存储器地址被解析且它由呈交级114呈交时被认为该存储指令准备好。在存在准备好的加载指令和准备好的存储指令二者的情况下,加载和存储逻辑单元206可以使用用于决定是否分发加载或存储的任何适当的手段。通常,加载指令将被给予优先级。然而,在一些情况下,加载和存储逻辑单元206可以配置为如果满足某些条件(例如,存储缓冲器204变满)则将优先级给予存储指令。
如果决定加载指令将被分发到数据高速缓存118,则加载和存储逻辑单元206可以(1)从加载缓冲器202选择准备好的加载指令中的一个以便进行分发;以及(2)确定选择的加载指令是否应该被推测性地分发。在一些情况下,加载和存储逻辑单元206可以配置为从加载缓冲器202选择最旧的准备好的加载指令。
如果在存储缓冲器204中存在比加载指令更旧且未被解析的任何存储指令(例如,目的地存储器地址未知或未被解析),则认为加载指令被推测性地分发。在一些情况下,如果存储缓冲器204中的所有较旧的未解析的存储指令在加载指令的推测窗内,则加载指令仅被推测性地分发到数据高速缓存118。这以程序不可能包括将数据存储到存储器地址并且不久之后从相同的存储器地址读取数据的代码的认识为基础。
在一些情况下,推测窗可以覆盖紧接着在加载指令之前的多个指令。例如,推测窗可以被定义为覆盖紧接着在加载指令之前的八个指令。在这些情况下确定存储缓冲器204中的所有较旧的未解析的存储指令是否在推测窗内可以包括:(i)将推测窗的开始定义为与紧接着在加载指令之前的指令相关联的ROB ID;(ii)将推测窗的结束定义为与紧接着在加载指令之前的第X个指令相关联的ROB ID,其中X是推测窗的尺寸;以及(iii)将存储缓冲器204中未解析的存储指令的ROB ID与推测窗的开始和结束进行比较以便确定存储缓冲器204中所有较旧的未解析的存储指令是否在推测窗内。
如果存储缓冲器204中所有较旧的未解析的存储指令在推测窗内,则加载指令可以被推测性地分发到数据高速缓存。如果存储缓冲器204中存在位于推测窗外侧的至少一个较旧的未解析的存储指令,则加载指令可以被停止。参照图4描述用于根据这些原理分发加载指令的示例方法。
在其它情况下,推测窗可以覆盖紧接着在加载指令之前的多个存储指令。例如,推测窗可以被定义为覆盖紧接着在加载指令之前的两个存储指令。在这些情况下确定存储缓冲器204中所有较旧的未解析的存储指令是否在推测窗内可以包括:(i)使用加载指令的ROB ID来识别存储缓冲器204中紧接着在加载指令之前的X个存储指令,其中X是推测窗的尺寸;以及(ii)确定存储缓冲器204中是否存在比识别的指令更旧的任何未解析的存储指令。
如果在存储缓冲器204中不存在比识别的存储指令更旧的未解析的存储指令,则加载指令可以被推测性地分发到数据高速缓存118。如果存储缓冲器204中存在比识别的存储指令更旧的至少一个未解析的存储指令,则加载指令可以被停止。
在一些情况下,推测窗尺寸被固定。在其它情况下,推测窗尺寸被动态地调整。例如,可以以由被推测性分发的加载指令引起的倒回的数量和/或加载指令的不必要的停止的数量为基础来调整推测窗尺寸。参照图5描述用于动态地调整推测窗尺寸的示例方法。
可以使用任何适当的硬件来实现加载缓冲器202、存储缓冲器204及加载和存储逻辑单元206。
现在参照图3,说明了程序代码302、ROB 106和存储缓冲器204之间的关系的示意图。图3的示例程序代码302包括两个示例存储指令304和306及一个示例加载指令308。第一示例存储指令304指定寄存器二中的数据将被存储在由寄存器一中的数据指定的存储器地址处。类似地,第二示例存储指令306指定寄存器四中的数据将被存储在由寄存器三中的数据指定的存储器地址处。示例加载指令308指定来自由寄存器六中的数据指定的存储器地址的数据将被加载到寄存器五中。
如上面参照图1描述的,程序中的每一个指令按照程序顺序由取出级102取出并被提供到解码和重命名级104。在执行解码和重命名之后,解码和重命名级104向ROB 106提供每一个解码和重命名的指令,该指令连同ROB ID一起按照程序顺序被存储在ROB 106中。在图3所示的示例中,第一存储指令304被分配ROB ID 0010,第二存储指令306被分配ROB ID0101,并且加载指令308被分配ROB ID 1000。
解码和重命名级104还将任何存储和加载指令提供或分派到加载和存储缓冲器110用于执行。加载和存储缓冲器110将任何接收到的加载指令存储在加载缓冲器202中并将任何接收到的存储指令存储在存储缓冲器204中。如上面关于图2描述的,当从解码和重命名级104接收/分派加载/存储指令时,相对应的存储器地址典型地是未知的,并且因而被认为未被解析。存储器地址稍后由乱序管线112或加载和存储缓冲器110解析并且被存储在加载或存储缓冲器202或204中。在一些情况下,具有未解析的存储器地址的存储指令可以由存储缓冲器204的存储器地址有效列234识别。具体地说,当存储器地址有效列234指示存储器地址列232中的数据不是有效的时,该存储指令的存储器地址是未解析的。
在图3所示的示例中,第一和第二存储指令304和306二者都被存储在存储缓冲器204中,但是它们二者都具有未解析的存储器地址(如由存储器地址有效列中的数据指示的)。
一旦加载指令的存储器地址被解析并且被存储在加载缓冲器202中,该加载指令就准备好被分发到数据高速缓存118。然而,不认为存储指令准备好分发到数据高速缓存118,直到该存储指令的存储器地址被解析且被存储在存储缓冲器204中并且该存储指令被呈交级114呈交为止。如上面参照图2描述的,一旦加载指令准备好用于分发,加载和存储逻辑单元206就可以确定它是否应该以存储缓冲器204中未解析的存储指令(例如,具有未解析的存储器地址的存储指令)为基础而被分发。在一些情况下,如果存储缓冲器204中所有较旧的未解析的存储指令在加载指令的推测窗310内,则准备好的加载指令就可以仅被推测性地分发到数据高速缓存。
如参照图2描述的,在一些情况下,推测窗310被定义为覆盖紧接着在加载指令之前的某个数量(X)的指令。在这些情况下,窗可以被定义为包括紧接着在加载指令之前的X个指令。可以以加载指令的ROB ID和数量X为基础来确定窗。在图3所示的示例中,加载指令的ROB ID为1000,并且X为五,因而推测窗310包含与ROB ID 0011到0111相关联的指令。
一旦推测窗310被定义,确定存储缓冲器204中所有未解析的存储指令是否在推测窗内就可以包括将较旧的未解析的存储指令的ROB ID与所定义的推测窗310进行比较。如果存储缓冲器204中不存在较旧的未解析的存储指令,则加载指令可以被非推测性地分发到数据高速缓存。如果存储缓冲器204中所有较旧的未解析的指令在推测窗310中,则加载指令可以被推测性地分发到数据高速缓存。然而,如果存储缓冲器204中存在位于推测窗310外侧的至少一个较旧的未解析的指令,则加载指令被停止,直到推测窗310外侧的较旧的未解析的存储指令被解析为止。
在图3所示的示例中,如果第一和第二存储指令304和306二者都被解析,则加载指令308可以被非推测性地分发到数据高速缓存;如果第一存储指令304被解析但是第二存储指令306没有被解析(因为第二存储指令306(ROB ID 0101)位于推测窗0011到0111中),则加载指令308可以被推测性地分发到数据高速缓存;并且如果第一存储指令304未被解析,则加载指令308可以被停止,而与第二存储指令306的状态无关(因为第一存储指令304(ROB010)位于推测窗0011到0111外侧)。
现在参照图4,说明了方法400,其可以由图2的加载和存储逻辑单元206执行,用于将加载指令分发到数据高速缓存。在步骤402,加载和存储逻辑单元206从加载缓冲器202选择准备分发的加载指令。当它正在从其读取的存储器地址被解析时,认为加载指令准备好用于分发。如上面参照图2描述的,在一些情况下,加载和存储逻辑单元206可以选择最旧的准备好的加载指令。在其它情况下,加载和存储逻辑单元206可以使用用于选择准备好的加载指令中的一个的其它准则。一旦选择了加载指令,方法400就继续进行到步骤404。
在步骤404,确定存储缓冲器204中是否存在比在步骤402中选择的加载指令更旧的任何未解析的存储指令。如上所述,未解析的存储指令是其目的地存储器地址未被解析的存储指令。确定存储指令是否是未解析的存储指令可以包括分析存储缓冲器204的存储器地址有效列。例如,如果存储器地址有效列指示存储器地址列中的数据无效,则可以确定存储指令是未解析的存储指令。
确定未解析的存储指令是否比加载指令更旧可以包括将未解析的存储指令的ROBID与加载指令的ROB ID进行比较。
如果确定存储缓冲器204中不存在比选择的加载指令更旧的未解析的存储指令,则方法400继续进行到步骤406,其中加载指令被非推测性地分发。然而,如果确定存储缓冲器204中存在比选择的加载指令更旧的至少一个未解析的存储指令,则该方法继续进行到步骤408。
在步骤406,将在步骤402中选择的加载指令分发到数据高速缓存118。一旦加载指令被分发,方法400就结束。
在步骤408,确定存储缓冲器204中最旧的未解析的存储指令是否在加载指令的推测窗(例如,窗310)中。在推测窗内的任何存储指令不可能与加载指令正在写入到相同的存储器地址,因而如果存储缓冲器204中的最旧的未解析的存储指令在推测窗中,则加载指令可以被推测性地分发。比加载指令更旧并且在窗外侧的任何存储指令具有与加载指令写入到相同的存储器地址的增加的机会,因而如果存储缓冲器204中存在位于推测窗外侧的至少一个较旧的未解析的存储指令,则加载指令被停止。
推测窗的尺寸可以被固定或者可以被动态地调整。例如,结果显示:包括先前的八个指令的推测窗消除了大多数不必要的停止。因此,在一些情况下,推测窗的尺寸可以被固定在例如八个指令。参照图5描述用于动态地调整推测窗的尺寸的示例方法。
在一些情况下,确定最旧的未解析的存储指令是否在推测窗内可以包括:(i)将推测窗的开始识别为与紧接着在加载指令之前的指令相关联的ROB ID(例如,加载指令的ROBID-1);(ii)将该窗的结束识别为与紧接着在加载指令之前的第X个指令相关联的ROB ID,其中X是推测窗的尺寸(例如,加载指令的ROB-X);以及(iii)将存储缓冲器204中的存储指令的ROB ID与推测窗的开始和结束进行比较以便确定它们是否位于推测窗中。
因为ROB 106可以被实现为环形缓冲器,因此在步骤(i)和(ii)中执行的推测操作会使ROB ID绕回。例如,如果加载指令的ROB ID为0001,X等于四,并且最后的ROB ID为1111,则推测窗的开始可以是ROB ID 0000并且推测窗的结束可以是ROB ID 1101。在另一示例中,如果加载指令的ROB ID为0110,X等于五,并且最后的ROB ID为1111,则推测窗的开始可以是ROB ID 0101并且推测窗的结束可以是ROB ID 0001。在表1中说明了这些示例。
表1
在其它情况下,确定最旧的未解析的存储指令是否在推测窗内可以包括:(i)使用加载指令的ROB ID以便识别存储缓冲器204中紧接着在加载指令之前的X个存储指令,其中X是推测窗的尺寸;以及(ii)确定存储缓冲器204中是否存在比所识别的指令更旧的任何未解析的存储指令。
如果确定存储缓冲器204中最旧的未解析的存储指令在推测窗中,则该方法继续进行到步骤406,其中在步骤402中选择的加载指令被推测性地分发到数据高速缓存。然而,如果确定最旧的未解析的存储指令在推测窗外侧,则方法400继续进行到步骤410,其中在步骤402中选择的加载指令被停止。如果加载指令被停止,则它不符合条件被分发,直到在推测窗外侧的所有存储指令被解析为止。
在一些情况下,在步骤406中将加载指令分发到数据高速缓存之前,加载和存储逻辑单元206可以配置为首先确定加载指令是否能够由存储缓冲器204中的数据解析。如果存储缓冲器204中存在写入到由加载指令读取的存储器地址的任何较旧的被解析的存储指令,则加载和存储逻辑单元206可以确定加载指令能够被存储缓冲器204中的数据解析。如果存储缓冲器204中存在写入到由加载指令读取的存储器地址的至少一个较旧的被解析的存储指令,则加载和存储逻辑单元206可以配置为使用最新的被解析的存储指令的源数据,而不是将存储指令分发到数据高速缓存118。这一数据可以接着随后按照惯例被提供到寄存器文件116。
例如,参照图2,具有ROB ID 1001的加载指令从存储器地址0x80218048进行读取,并且具有ROB 0011的存储指令写入到相同的存储器地址。因此,不是将这一加载指令分发到数据高速缓存,存储指令0011的源数据列238中的源数据可以用于满足该加载指令。在源数据当前可用(如由源数据有效列指示的)的情况下,来自源数据列238的数据可以被立即提供到寄存器文件116。然而,在源数据不可用(如由源数据有效列指示的)的情况下,加载指令可以被停止,直到源数据可用为止。
如上所述,已经识别出程序不可能包括包含在存储器地址的存储之后立即到相同的存储器地址的加载的代码。对此的一个例外是函数返回。具体地说,在函数返回周围的代码可以将数据存储在以后不久被读取(加载)的存储器地址中。具体地说,函数可能已经将一些数据存储在它想要返回到函数调用程序的存储器位置中。在这一情况下,该函数将写入到存储器位置,并且可以接着执行函数返回,该函数返回可以紧密地跟随有将数据从相同的存储器位置读取回的调用程序代码。
因此,在一些实施例中,如果在加载指令的函数窗内的指令中不存在函数返回,则加载指令可以仅被推测性地分发(例如,在较旧的存储指令的存储器地址被解析之前被分发)。这一函数返回方法可以与上面描述的推测窗方法单独地使用或者结合该推测窗方法来使用。例如,在一些情况下,在执行方法400之前,加载和存储逻辑单元206可以配置为首先确定在加载指令的函数窗内的指令中是否存在函数返回。函数窗可以被定义为在加载指令之前的多个指令,其中具有函数返回不是可接受的。函数窗的尺寸可以被固定;被动态地确定(例如,按照参照图5描述的用于动态地调整推测窗的尺寸的方式类似的方式);或者(其中结合上面描述的推测窗方法被使用)是推测窗的尺寸的函数(例如,推测窗的尺寸的60%或者比推测窗的尺寸更小的四个指令)。在函数窗的尺寸是推测窗的尺寸的函数并且推测窗的尺寸被动态地确定的情况下,当推测窗被调整时,函数窗的尺寸可以被动态地调整。
在一些情况下,解码和重命名级104可以配置为给加载和存储缓冲器110提供它检测到的每一个函数返回的ROB ID。加载和存储缓冲器110可以接着将这些ROB ID存储在单独的函数返回表中。接着,不是执行方法400或者在方法400的执行之前,加载和存储逻辑单元206可以配置为确定函数返回表中的任何函数返回是否在函数窗内。如果在函数窗内存在函数返回,则加载指令被停止,直到所有较旧的存储指令(即,在程序中的加载指令之前的存储指令)被解析为止。然而,如果在函数窗内不存在函数返回,则加载指令可以被推测性地分发或者方法400可以被执行以便确定加载是否将被推测性地分发或停止。
对于程序不可能包括包含到存储器地址的存储之后立即到相同的存储器地址的加载的代码的概念的其它例外,可以实现类似的逻辑。
现在参照图5,说明了用于动态地调整在方法400中使用的推测窗的尺寸的方法500。在一些情况下,可以以倒回的数量、不必要的停止的数量或倒回的数量和不必要的停止的数量二者为基础来调整推测窗的尺寸。
在步骤502,加载和存储逻辑单元206获得对于当前时钟周期的度量数据。在一些情况下,度量数据是与在当前时钟周期中发生的被推测性地执行的加载指令有关的倒回的数量。例如,加载和存储逻辑单元206可以配置为对与每时钟周期被推测性地执行的加载指令有关的倒回的数量进行计数并且记录。在其它情况下,度量数据可以是在当前时钟周期中发生的不必要的加载停止的数量。例如,加载和存储逻辑单元206可以配置为对每时钟周期不必要的加载指令停止的数量进行计数并且记录。
在又一些其它情况下,加载和存储逻辑单元206可以配置为对倒回的数量和停止的数量二者进行计数。在又一些其它情况下,度量数据可以是在当前时钟周期中倒回的数量和停止的数量的组合。例如,度量数据(被称为组合的度量数据)可以根据公式(1)进行计算,其中A和B分别是以倒回的成本和停止的成本为基础的权重。
度量数据=A*倒回的数量-B*停止的数量 (1)
一旦获得了度量数据,方法500就继续进行到步骤504。
在步骤504,使用在步骤502中获得的数据来更新重新调整尺寸的度量。在一些情况下,重新调整尺寸的度量可以是由于被推测性地分发的加载指令而发生的倒回的数量的总计数。在这些情况下,更新重新调整尺寸的度量可以包括将在步骤502中获得的度量数据添加到倒回计数器。在其它情况下,重新调整尺寸的度量可以是不必要的加载停止的数量的总计数。在这些情况下,更新重新调整尺寸的度量可以包括将度量数据添加到停止计数器。在又一些其它情况下,重新调整尺寸的度量(被称为第一组合的重新调整尺寸的度量)可以是在步骤502中计算的组合的度量数据的总计数。在这些情况下,更新重新调整尺寸的度量可以包括将度量数据添加到组合的度量计数器。
在又一些其它情况中,加载和存储逻辑单元206可以配置为跟踪倒回的总数量和停止的总数量二者。在这些情况中的一些中,倒回的总数量和停止的总数量中的一个可以是重新调整尺寸的度量并且另一个可以在步骤506中用于确定何时到调整推测窗的时间。在这些情况的其它情况中,重新调整尺寸的度量(被称为第二组合的重新调整尺寸的度量)可以以倒回的总数量和停止的总数量为基础。例如,重新调整尺寸的度量可以根据公式(2)进行计算,其中A和B分别是以倒回的成本和停止的成本为基础的权重。
重新调整尺寸的度量=A*倒回的总数量-B*停止的总数量(2)一旦更新了重新调整尺寸的度量,方法500就继续进行到步骤506。
在步骤506,确定是否到了调整推测窗的尺寸的时间。在一些情况下,确定是否到了调整推测窗的尺寸的时间包括确定自从最后一次调整以来是否发生了预定数量的周期。在这些情况下,预定数量的周期被选择得足够大以便赶上倒回的不可接受的数量或者不必要的停止。在一些情况下,有用的预定数量的周期可以是100或更大。
在其它情况下,确定是否到了调整推测窗的尺寸的时间可以包括确定是否发生了预定数量(例如八个)的倒回。在又一些其它情况下,确定是否到了调整推测窗的尺寸的时间可以包括确定是否发生了预定数量的停止。
如果确定到了调整推测窗的尺寸的时间,则方法500继续进行到步骤508。如果确定还没有到调整推测窗的尺寸的时间,则方法500继续回到步骤502。
在步骤508,确定重新调整尺寸的度量(例如,倒回计数器;停止计数器;第一组合的重新调整尺寸的度量;或者第二组合的重新调整尺寸的度量)是否在低阈值之下。低阈值可以被硬编码或固定,或者它可以由程序进行设置。例如,在一些情况下,可以存在程序设计人员可以经由程序将低阈值写入到其中的控制寄存器。在一些情况下,低阈值可以以在步骤506中使用的周期的预定数量为基础。在一些情况下,周期的预定数量越高,低阈值就越高。例如,在周期的预定数量为1,000的情况下,低阈值可以是一个倒回或停止。如果重新调整尺寸的度量低于该低阈值,则方法500继续进行到步骤510。然而如果重新调整尺寸的度量高于或等于该低阈值,则方法500继续进行到步骤512。
在步骤510,推测窗尺寸被调整。在重新调整尺寸的度量是倒回的总数量的情况下,倒回的低数量可以指示系统不是充分推测性的,并且因此可以增加推测窗尺寸。在重新调整尺寸的度量是停止的总数量的情况下,停止的低数量可以指示系统是过于推测性的,并且因此可以减小推测窗。在重新调整尺寸的度量是组合的度量(例如第一组合的重新调整尺寸的度量或第二组合的重新调整尺寸的度量)中的一个的情况下,正数可以指示系统是过于推测性的,并且负数可以指示系统不是充分推测性的。因此,如果组合的重新调整尺寸的度量低于该低阈值,则可以增加推测窗。
在一些情况下,以单个指令或单个存储指令来增加或减小推测窗尺寸。在其它情况下,可以以多于一个指令或多于一个存储指令来增加或减小推测尺寸。一旦调整了推测窗尺寸,方法500就继续进行到步骤516。
在步骤512,确定重新调整尺寸的度量(例如,倒回计数器;停止计数器;第一组合的重新调整尺寸的度量;或者第二组合的重新调整尺寸的度量)是否在高/上阈值之上。该高阈值可以被硬编码或固定,或者它可以由程序设置。例如,在一些情况下,可以存在程序设计人员可以经由程序将高阈值写入到其中的控制寄存器。在一些情况下,高阈值可以以在步骤506中使用的周期的预定数量为基础。典型地,周期的预定数量越高,高阈值就越高。例如,在周期的预定数量为1,000的情况下,高阈值可以是两个倒回或停止。在一些情况下,高阈值和低阈值可以相同。在其它情况下,高阈值和低阈值可以不同。
如果重新调整尺寸的度量高于上阈值,则方法500继续进行到步骤514。然而,如果重新调整尺寸的度量低于或等于上阈值,则方法500继续进行到步骤516。
在步骤514,推测窗尺寸被调整。在重新调整尺寸的度量是倒回的总数量的情况下,倒回的高数量可以指示系统是过于推测性的,并且因此推测窗尺寸可以减小。在重新调整尺寸的度量是停止的总数量的情况下,停止的高数量可以指示系统不是充分推测性的,并且因此推测窗尺寸可以增加。在重新调整尺寸的度量是组合的度量(例如第一组合的重新调整尺寸的度量或第二组合的重新调整尺寸的度量)中的一个的情况下,正数可以指示系统是过于推测性的,而负数可以指示系统不是充分推测性的。因此,如果组合的重新调整尺寸的度量高于高阈值,则推测窗可以减小。
在一些情况下,可以以单个指令或单个存储指令来增加或减小推测窗尺寸。在其它情况下,可以以多于一个指令或存储指令来增加或减小推测窗尺寸。一旦调整了推测窗尺寸,方法500就继续进行到步骤516。
在步骤516,重新调整尺寸的度量被重置(例如,总倒回计数器、总停止计数器或第一/第二组合的重新调整尺寸的度量被重置(即,归零))。一旦重置了重新调整尺寸的度量,方法就继续回到步骤502。
尽管本文描述的示例涉及单线程乱序处理器,但是本文描述的方法和原理可以同样适用于多线程乱序处理器。
现在参照图6,说明了多线程乱序处理器600的示意图。处理器600包括两个线程602和604,在本文将被分别称为线程0和线程1。每一个线程602和604包括如上面参照图1描述的取出级606或608、解码和重命名级610或612、重排序缓冲器614或616、呈交级618或620以及分支预测器622或624。线程602和604共享如上面参照图1描述的一个或多个保留站626、乱序管线628、加载和存储缓冲器630、数据高速缓存632以及一个或多个寄存器文件634。
在线程602和602在统一的存储器空间中操作(即,不存在划分或隔离线程602和604之间的存储器空间的存储器单元等等)的情况下,加载和存储缓冲器630可以配置为在分发加载指令之前考虑来自线程602和604二者的存储指令。然而,在其中存在不同的线程602和604的存储器区域的隔离的情况下,加载和存储缓冲器630可以配置为仅考虑与特定的加载指令相关联的线程相关联的存储指令。例如,加载和存储缓冲器630可以配置为仅考虑对于与线程0相关联的加载指令与线程0相关联的存储指令。
在不失去所寻求的效果的情况下,可以扩展或者改变本文给出的任何范围或设备值,这对于本领域的普通技术人员来说是显而易见的。
将理解,上面描述的益处和优点可以涉及一个实施例或者可以涉及几个实施例。所述实施例并不局限于解决任一或所有陈述的问题的实施例或具有任一或所有陈述的益处和优点的实施例。
对“一”项目的任何提及指代那些项目中的一个或多个。术语“包括”在本文中用于意指包括所识别的方法块或元件,但是这样的块或元件不包括排它性的列表,并且装置可以包含附加的块或元素以及方法可以包含附加的块或操作。而且,块、元件和操作本身不被隐含地闭合。
存储用于在实现所公开的方面中使用的机器可执行数据的存储器可以是非暂态介质。非暂态介质可以是易失性或非易失性的。易失性非暂态介质的示例包括基于半导体的存储器,例如SRAM或DRAM。可以用于实现非易失性存储器的技术的示例包括光和磁存储器技术、闪存、相变存储器、电阻性RAM。
对“逻辑”的特定提及指代执行一种或多种功能的结构。逻辑的示例包括布置为执行那些功能的电路。例如,这样的电路可以包括在制造过程中可用的晶体管和/或其它硬件元件。这样的晶体管和/或其它元件可以用于形成实现和/或包含通过示例的方式的下列部件的电路或结构:诸如寄存器、触发器或者锁存器的存储器,诸如布尔运算的逻辑运算器,诸如加法器、乘法器或移位器的数学运算器以及互连。这样的元件可以被提供为定制电路或标准单元库、宏或其它级别的抽象。这样的元件可以在特定的布置中互连。逻辑可以包括具有固定功能的电路,并且电路可以被编程以便执行一种或多种功能;这样的编程可以从固件或软件更新或者控制机制提供。被识别为执行一种功能的逻辑还可以包括实现构成的功能或子过程的逻辑。在示例中,硬件逻辑具有实现一种或多种固定功能操作、状态机或过程的电路。
本文描述的方法的步骤可以在合适时按照任何适当的顺序或同时被执行。此外,在不偏离本文描述的主题的精神和范围的情况下,可以将单独的块从任何方法删除。在不失去所寻求的效果的情况下,可以将上面描述的任何示例的方面与所描述的任何其它示例的方面进行组合以便形成进一步的示例。在附图的元件被表示为通过箭头进行连接的情况下,将认识到,这些箭头仅示出了元件之间的通信(包括数据和控制消息)的一个示例流。元件之间的流可以在任一方向上或在两个方向上。
将理解,仅通过示例的方式给出了优选实施例的上面描述,并且本领域的普通技术人员能够做出各种修改。尽管上面以某种程度的细节或者参照一个或多个单独的实施例描述了各种实施例,但是本领域的普通技术人员可以在不偏离本发明的精神或者范围的情况下对所公开的实施例做出许多修改。

Claims (15)

1.一种将程序中的加载指令分发到数据高速缓存的方法,所述方法包括:
确定所述程序是否包括在所述加载指令的函数窗内的函数返回指令;并且
如果所述程序包括在所述加载指令的所述函数窗内的函数返回指令,则停止所述加载指令;并且
如果所述程序不包括在所述加载指令的所述函数窗内的函数返回指令,则确定所述加载指令是否要被推测性地分发。
2.根据权利要求1所述的方法,其中,确定所述程序是否包括在所述加载指令的所述函数窗内的函数返回指令包括:
将在所述程序中识别的每个函数返回指令的ID存储在函数返回表中;并且
使用所存储的ID以及与所述加载指令相关联的ID来确定所述程序是否包括在所述加载指令的所述函数窗内的函数返回指令。
3.根据权利要求2所述的方法,其中,所述ID是重排序缓冲器ID。
4.根据权利要求1所述的方法,其中,所述函数窗包括在所述加载指令之前的多个指令,所述多个指令定义所述函数窗的尺寸。
5.根据权利要求4所述的方法,其中,所述函数窗的尺寸被固定。
6.根据权利要求4所述的方法,进一步包括动态地调整所述函数窗的尺寸。
7.根据权利要求4至6中的任意一项所述的方法,其中,所述函数窗的尺寸是基于推测窗的尺寸的,所述推测窗包括在所述加载指令之前的多个指令,其中,如果任何更旧的未解析的存储指令在所述推测窗内,则所述加载指令仅被推测性地分发。
8.一种将程序(302)中的加载指令(308)分发到数据高速缓存(118)的加载和存储缓冲器(110),所述加载和存储缓冲器(110)包括:
加载和存储逻辑单元(206),其被配置为:
确定所述程序(302)是否包括在所述加载指令(308)的函数窗内的函数返回指令;并且
如果所述程序包括在所述加载指令(308)的所述函数窗内的函数返回指令,则停止所述加载指令(308);并且
如果所述程序不包括在所述加载指令(308)的所述函数窗内的函数返回指令,则确定所述加载指令(308)是否要被推测性地分发。
9.根据权利要求8所述的加载和存储缓冲器(110),进一步包括被配置为存储所述程序(302)中识别的每个函数返回指令的ID的函数返回表;并且
其中,确定所述程序(302)是否包括在所述加载指令(308)的所述函数窗内的函数返回指令包括:使用所存储的ID和与所述加载指令(308)相关联的ID来确定所述程序(302)是否包括在所述加载指令(308)的所述函数窗内的函数返回指令。
10.根据权利要求9所述的加载和存储缓冲器(110),其中,所述ID是重排序缓冲器ID。
11.根据权利要求8所述的加载和存储缓冲器(110),其中,所述函数窗包括在所述加载指令(308)之前的多个指令,所述多个指令定义所述函数窗的尺寸。
12.根据权利要求11所述的加载和存储缓冲器(110),其中,所述函数窗的尺寸被固定。
13.根据权利要求11所述的加载和存储缓冲器(110),其中,所述加载和存储逻辑单元(206)进一步被配置为动态地调整所述函数窗的尺寸。
14.根据权利要求11至13中的任意一项所述的加载和存储缓冲器(110),其中,所述函数窗的尺寸是基于推测窗(310)的尺寸的,所述推测窗(310)包括在所述加载指令(308)之前的多个指令,其中,如果任何更旧的未解析的存储指令(304,306)在所述推测窗(310)内,则所述加载指令(308)仅被推测性地分发。
15.一种包括根据权利要求8所述的加载和存储缓冲器(110)的处理器(100)。
CN201610192717.XA 2013-02-11 2014-02-11 用于将程序中的加载指令分发到数据高速缓存的方法和设备 Active CN105808211B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1302373.4A GB2501582B (en) 2013-02-11 2013-02-11 Speculative load issue
GB1302373.4 2013-02-11
CN201410047131.5A CN103984643B (zh) 2013-02-11 2014-02-11 用于将程序中的加载指令分发到数据高速缓存的方法和设备

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201410047131.5A Division CN103984643B (zh) 2013-02-11 2014-02-11 用于将程序中的加载指令分发到数据高速缓存的方法和设备

Publications (2)

Publication Number Publication Date
CN105808211A CN105808211A (zh) 2016-07-27
CN105808211B true CN105808211B (zh) 2019-01-25

Family

ID=47998926

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201410047131.5A Active CN103984643B (zh) 2013-02-11 2014-02-11 用于将程序中的加载指令分发到数据高速缓存的方法和设备
CN201610192717.XA Active CN105808211B (zh) 2013-02-11 2014-02-11 用于将程序中的加载指令分发到数据高速缓存的方法和设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201410047131.5A Active CN103984643B (zh) 2013-02-11 2014-02-11 用于将程序中的加载指令分发到数据高速缓存的方法和设备

Country Status (4)

Country Link
US (2) US9395991B2 (zh)
CN (2) CN103984643B (zh)
DE (1) DE102014002012A1 (zh)
GB (2) GB2501582B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10467010B2 (en) * 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US10152327B2 (en) 2013-03-15 2018-12-11 Intel Corporation Apparatus for gating a load operation based on entries of a prediction table
US10073789B2 (en) * 2015-08-28 2018-09-11 Oracle International Corporation Method for load instruction speculation past older store instructions
US10521351B2 (en) * 2017-01-12 2019-12-31 International Business Machines Corporation Temporarily suppressing processing of a restrained storage operand request
US10621090B2 (en) 2017-01-12 2020-04-14 International Business Machines Corporation Facility for extending exclusive hold of a cache line in private cache
CN108345470B (zh) * 2017-01-24 2021-10-08 阿里巴巴集团控股有限公司 一种数据处理、存储的方法、装置及电子设备
TWI645286B (zh) 2017-08-31 2018-12-21 慧榮科技股份有限公司 記憶體控制裝置和方法
US10866805B2 (en) * 2018-01-03 2020-12-15 Arm Limited Speculation barrier instruction
CN108920191B (zh) * 2018-06-05 2020-11-20 上海兆芯集成电路有限公司 处理器电路及其操作方法
CN117806706A (zh) * 2023-12-29 2024-04-02 上海合芯数字科技有限公司 存储顺序违例处理方法、装置、电子设备及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1193777A (zh) * 1997-03-13 1998-09-23 国际商业机器公司 非顺序处理系统中的低执行时间指令发送
CN1382274A (zh) * 1999-05-26 2002-11-27 因芬尼昂技术股份公司 微处理机的延迟时隙控制机构
CN101067781A (zh) * 2006-03-07 2007-11-07 英特尔公司 执行存储器消歧的技术
CN101763250A (zh) * 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 减少功率的加载/存储队列搜索机制
CN102364431A (zh) * 2011-10-20 2012-02-29 北京北大众志微系统科技有限责任公司 一种实现读指令执行的方法及装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5850543A (en) * 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
US5974543A (en) * 1998-01-23 1999-10-26 International Business Machines Corporation Apparatus and method for performing subroutine call and return operations
US6115777A (en) * 1998-04-21 2000-09-05 Idea Corporation LOADRS instruction and asynchronous context switch
US6381691B1 (en) * 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
JP3729087B2 (ja) * 2001-05-23 2005-12-21 日本電気株式会社 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
US20040123081A1 (en) * 2002-12-20 2004-06-24 Allan Knies Mechanism to increase performance of control speculation
US7441107B2 (en) * 2003-12-31 2008-10-21 Intel Corporation Utilizing an advanced load address table for memory disambiguation in an out of order processor
JP4247132B2 (ja) * 2004-01-29 2009-04-02 株式会社ルネサステクノロジ 情報処理装置
JP2006040173A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd 分岐予測装置および分岐予測方法
US20060095752A1 (en) * 2004-08-28 2006-05-04 Min-Cheng Kao [method for return instruction identification and associated method for return target pointer prediction]
US7519775B2 (en) * 2006-02-23 2009-04-14 Sun Microsystems, Inc. Enforcing memory-reference ordering requirements at the L2 cache level
US7827392B2 (en) 2006-06-05 2010-11-02 Qualcomm Incorporated Sliding-window, block-based branch target address cache
US20100325395A1 (en) * 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
US8601240B2 (en) * 2010-05-04 2013-12-03 Oracle International Corporation Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
KR101862799B1 (ko) * 2011-12-12 2018-05-31 삼성전자주식회사 메모리 컨트롤러 및 메모리 컨트롤 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1193777A (zh) * 1997-03-13 1998-09-23 国际商业机器公司 非顺序处理系统中的低执行时间指令发送
CN1382274A (zh) * 1999-05-26 2002-11-27 因芬尼昂技术股份公司 微处理机的延迟时隙控制机构
CN101067781A (zh) * 2006-03-07 2007-11-07 英特尔公司 执行存储器消歧的技术
CN101763250A (zh) * 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 减少功率的加载/存储队列搜索机制
CN102364431A (zh) * 2011-10-20 2012-02-29 北京北大众志微系统科技有限责任公司 一种实现读指令执行的方法及装置

Also Published As

Publication number Publication date
GB2509830B (en) 2014-12-24
US9910672B2 (en) 2018-03-06
GB2501582A (en) 2013-10-30
GB201302373D0 (en) 2013-03-27
CN105808211A (zh) 2016-07-27
CN103984643A (zh) 2014-08-13
US9395991B2 (en) 2016-07-19
GB2501582B (en) 2014-12-24
US20160291976A1 (en) 2016-10-06
GB201321319D0 (en) 2014-01-15
CN103984643B (zh) 2016-04-06
DE102014002012A1 (de) 2014-08-14
US20140229718A1 (en) 2014-08-14
GB2509830A (en) 2014-07-16

Similar Documents

Publication Publication Date Title
CN105808211B (zh) 用于将程序中的加载指令分发到数据高速缓存的方法和设备
US10001997B2 (en) Prioritizing instructions based on type
US9672039B2 (en) Register file having a plurality of sub-register files
US9606834B2 (en) Allocating resources to threads based on speculation metric
CN105005463B (zh) 具有世代重命名的计算机处理器
US9612968B2 (en) Migration of data to register file cache
CN108196884A (zh) 利用生成重命名的计算机信息处理器
US20150154022A1 (en) Soft-Partitioning of a Register File Cache
CN104603747B (zh) 响应于分支预测表调换指令而调换分支方向历史及相关的系统和方法
WO2016155421A1 (en) Method and apparatus for superscalar processor
US20130262725A1 (en) Data processing device and method for controlling data processing device
US11507379B2 (en) Managing load and store instructions for memory barrier handling
GB2550658B (en) Apparatus and methods for out of order item selection and status updating
US10713049B2 (en) Stunt box to broadcast and store results until retirement for an out-of-order processor
JP2020077334A (ja) 演算処理装置および演算処理装置の制御方法
US20240086196A1 (en) Processing of issued instructions
CN112416244A (zh) 用于操作发出队列的装置和方法
CN108536474A (zh) 延迟缓冲器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Hertfordshire

Applicant after: Mex Technology Co.,Ltd.

Address before: Hertfordshire

Applicant before: Hai Luo Software Co.,Ltd.

CB02 Change of applicant information
TA01 Transfer of patent application right

Effective date of registration: 20180720

Address after: California, USA

Applicant after: Imagination Technologies Ltd.

Address before: Hertfordshire

Applicant before: Mex Technology Co.,Ltd.

Effective date of registration: 20180720

Address after: Hertfordshire

Applicant after: Hai Luo Software Co.,Ltd.

Address before: Hertfordshire

Applicant before: Imagination Technologies Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant