CN113227969A - 用于容忍存储器违反排序检查缓冲器的排空延迟的推测性指令唤醒 - Google Patents

用于容忍存储器违反排序检查缓冲器的排空延迟的推测性指令唤醒 Download PDF

Info

Publication number
CN113227969A
CN113227969A CN202080007266.2A CN202080007266A CN113227969A CN 113227969 A CN113227969 A CN 113227969A CN 202080007266 A CN202080007266 A CN 202080007266A CN 113227969 A CN113227969 A CN 113227969A
Authority
CN
China
Prior art keywords
load
load instruction
data
instruction
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.)
Pending
Application number
CN202080007266.2A
Other languages
English (en)
Inventor
约翰·卡拉马丁纳斯
直下进
克里斯南·V·拉马尼
斯科特·托马斯·宾汉
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of CN113227969A publication Critical patent/CN113227969A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

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

用于容忍存储器违反排序检查缓冲器的排空延迟的推测性指 令唤醒
相关申请的交叉引用
本申请要求2019年10月31日提交的美国非临时申请号16/671,097和2019年4月3日提交的美国临时专利申请序列号62/828,861的权益,其内容通过引用的方式并入本文中。
关于政府利益的声明
本发明是在DOE授予的美国劳伦斯·利弗莫尔国家安全局的PathForward项目(主要合同编号DE-AC52-07NA27344,分包合同编号B620717)的政府支持下完成的。政府享有本发明中的某些权利。
背景技术
乱序处理器按乱序执行指令,但却遵守某些约束以确保执行按程序指定的方式发生。一类约束涉及确保遵循某些存储器排序语义。可以放宽与存储器排序语义相关的约束以改善性能,但也需要采取附加的步骤以确保执行的正确性。
附图说明
可从结合附图以举例方式给出的以下描述中获得更详细的理解,在附图中:
图1是在其中可以实现一个或多个所公开实施方案的示例性装置的框图;
图2是根据一个示例的位于图1的处理器内的指令执行流水线的框图;
图3A示出了用于触发依赖于有资格被置于已满的存储器一致性排序队列中的加载指令的指令的推测性执行的示例性操作;
图3B示出了针对这种队列先前已满的加载指令的响应于时隙在存储器排序一致性队列中变得空闲的示例性操作;以及
图4是根据一个示例的用于推测性地执行依赖于存储器排序一致性队列已满的加载指令的指令的方法的流程图。
具体实施方式
提供了一种用于推测性地执行加载依赖性指令的技术。所述技术包括检测对于完成的加载指令而言,存储器排序一致性队列已满。所述技术还包括当所述存储器排序一致性队列已满时,将由所述完成的加载指令加载的数据存储至用于存储数据的存储位置中。所述技术还包括推测性地执行依赖于所述完成的加载指令的指令。所述技术还包括响应于时隙在所述存储器排序一致性队列中变得可用,重放所述加载指令。所述技术还包括响应于接收到用于所述重放加载指令的加载数据,通过比较用于所述重放加载指令的所述加载数据与存储在所述存储位置中的由所述完成的加载指令加载的所述数据来测试数据的错误推测。
提供了一种用于推测性地执行加载依赖性指令的处理器子系统。所述处理器子系统包括存储器排序一致性队列和加载/存储单元。所述加载/存储单元检测对于完成的加载指令而言,存储器排序一致性队列已满;当所述存储器排序一致性队列已满时,将由所述完成的加载指令加载的数据写入到用于存储数据的存储位置中;允许推测性地执行依赖于所述完成的加载指令的指令;响应于时隙在所述存储器排序一致性队列中变得可用,重放所述加载指令;以及响应于接收到用于所述重放加载指令的加载数据,通过比较用于所述重放加载指令的所述加载数据与存储在所述存储位置中的由所述完成的加载指令加载的所述数据来测试数据的错误推测。
提供了一种用于推测性地执行加载依赖性指令的处理器。所述处理器包括存储器排序一致性队列、加载/存储单元以及一个或多个功能单元。所述加载/存储单元检测对于完成的加载指令而言,存储器排序一致性队列已满;当所述存储器排序一致性队列已满时,将由所述完成的加载指令加载的数据写入到用于存储数据的存储位置中;允许推测性地执行依赖于所述完成的加载指令的指令;响应于时隙在所述存储器排序一致性队列中变得可用,重放所述加载指令;以及响应于接收到用于所述重放加载指令的加载数据,通过比较用于所述重放加载指令的所述加载数据与存储在所述存储位置中的由所述完成的加载指令加载的所述数据来测试数据的错误推测。所述一个或多个功能单元推测性地执行依赖于所述完成的加载指令的所述指令。
图1是其中实现了本公开的各方面的示例性装置100的框图。装置100包括例如计算机、游戏装置、手持式装置、机顶盒、电视、移动电话或平板计算机。装置100包括处理器102、存储器104、存储装置106、一个或多个输入装置108以及一个或多个输出装置110。装置100还可以任选地包括输入驱动器112和输出驱动器114。应理解,装置100可以包括图1中未示出的附加部件。
处理器102包括中央处理单元(CPU)、图形处理单元(GPU)、位于同一管芯上的CPU和GPU、或者一个或多个处理器核心,其中每个处理器核心是CPU或GPU。存储器104可以与处理器102位于同一管芯上,或者可以与处理器102分开定位。存储器104包括易失性或非易失性存储器,例如随机存取存储器(RAM)、动态RAM或高速缓存。
存储装置106包括固定或可移除存储装置,例如硬盘驱动器、固态驱动器、光盘或快闪驱动器。输入装置108包括键盘、小键盘、触摸屏、触摸板、检测器、传声器、加速度计、陀螺仪、生物计量扫描仪或网络连接件(例如,用于无线IEEE 802信号的传输和/或接收的无线局域网卡)。输出装置110包括显示器、扬声器、打印机、触觉反馈装置、一个或多个灯、天线或网络连接件(例如,用于无线IEEE 802信号的传输和/或接收的无线局域网卡)。
输入驱动器112与处理器102和输入装置108通信,并且允许处理器102接收来自输入装置108的输入。输出驱动器114与处理器102和输出装置110通信,并且允许处理器102将输出发送到输出装置110。应注意,输入驱动器112和输出驱动器114为任选部件,并且装置100在不存在输入驱动器112和输出驱动器114的情况下将以相同方式操作。
图2是根据一个示例的位于图1的处理器102内的指令执行流水线200的框图。指令执行流水线200从存储器检索指令并执行指令,将数据输出到存储器,以及修改指令执行流水线200内元件的状态,诸如在寄存器文件218内的寄存器。
指令执行流水线200包括指令提取单元204,其经由指令高速缓存202从系统存储器(诸如存储器104)提取指令;解码器208,其对提取的指令进行解码;功能单元216,其执行计算以处理指令;加载/存储单元214,其经由数据高速缓存220从系统存储器加载数据或将数据存储至系统存储器;以及寄存器文件218,其包括存储用于指令的工作数据的寄存器。重排序缓冲器210跟踪当前进行中的指令并且尽管在飞行中允许无序执行,其也确保了按顺序引退指令。“飞行中”的指令指的是已经由重排序缓冲器210接收到但尚未将结果提交给处理器的架构状态(例如,将非推测性结果写入到寄存器文件等)的指令。保留站212维护等待要在功能单元216上执行的指令,并且跟踪指令操作数。当所有操作数都准备好执行特定指令时,保留站212将指令发送到功能单元216或加载/存储单元214以便执行。完成的指令在重排序缓冲器210中被标记为引退并且当在重排序缓冲器队列210的开头时引退。引退是指将指令的结果提交到处理器的架构状态的行为。例如,通过加法指令将加法结果写入架构寄存器的最新的非推测性副本中;通过加载指令将加载的值写入架构寄存器的最新的非推测性副本中;或者通过分支指令非推测性地使指令流跳转到新位置都是指令引退的示例。
指令执行流水线200的各个元件经由公共数据总线222进行通信。例如,功能单元216和加载/存储单元214将结果写入公共数据总线222,其可以由保留站212读取以执行依赖指令;以及由重排序缓冲器210读取作为已经完成执行的进行中的指令的最终处理结果。加载/存储单元214还从公共数据总线222读取数据。例如,加载/存储单元214从源于公共数据总线222的完成的指令读取结果,并且经由数据高速缓存220将结果写入存储器以用于存储指令。
指令执行流水线200能够执行加载指令和存储指令(以及其他指令)。加载指令是从存储器加载数据并且将该数据放入寄存器文件218中的寄存器中的指令。存储指令是将数据从寄存器存储到存储器位置的指令。对于存储或加载而言,基于一个或多个寄存器的内容和/或在指令本身中指定的一个或多个值来计算指定的地址。此外,对于指定虚拟存储器地址的加载或存储而言,那些地址被转换为物理地址。
加载/存储单元214支持存储器一致性模型,其指定软件观察加载和存储的执行的相对顺序。在示例中,加载/存储单元214实现加载排序一致性模型,其中加载指令对于软件看起来好像是关于其他线程的加载指令按顺序执行的。详细地,该加载排序存储器一致性模型如下操作。保留站212向功能单元216发布加载指令以生成虚拟地址(例如,以加载指令指定的方式计算虚拟地址)。随后,功能单元216将加载指令传输到加载/存储单元214,其执行加载指令,从而从数据转换后备缓冲器(“TLB”)226提取至物理地址的转换并且从数据高速缓存220基于物理地址提取数据。在一些实现方式中,加载/存储单元214响应于将加载指令从解码器208分派到重排序缓冲器210来将加载存储在加载队列224中。在其他实现方式中,在任何其他技术上可行的时间将加载置于加载队列224中。
当返回由加载指令请求的数据时,加载指令则被视为是完成的。然而,直到已经检查到存储器一致性违反情况,重排序缓冲器210才会将加载指令标记为有资格引退。如果对于加载指令而言发生了违反存储器一致性模型的情况,则加载/存储单元214使加载指令(并且在各种情况下,为比该加载指令更新的指令)从指令流水线200进行刷新并且使加载指令重放。在一些实现方式中,两种类型的违反情况是可能的:违反加载至加载的排序以及违反存储至加载的排序。
加载至加载的排序的定义取决于由存储器一致性模型强加的排序规则。在一些实现方式中,存储器排序要求所有加载看起来像是按程序顺序执行的,而与加载是否访问相同的地址无关。加载至加载的排序是通过检查当加载变得有资格按程序顺序引退时加载是否观察到了与彼此相同的值来强制实施的。通过监测对数据高速缓存220的外部探测和数据高速缓存220的逐出来实现这种强制实施。如果对地址(“A”)的外部探测到达数据高速缓存220,并且在加载排序队列228中存在从地址A进行读取的指令,则确定在加载排序队列228中的最老的这种指令经历了加载至加载的排序违反情况。如果在地址A处的加载指令变成重排序缓冲器210中最老的加载之前从数据高速缓存220逐出了地址A处的数据,则该指令已经历了加载至加载的排序违反情况。在针对加载指令发生了加载至加载的排序违反的情况下,加载/存储单元214使加载指令从指令执行流水线200进行刷新并且进行重放。
存储至加载的排序是存储器排序规则,其要求所有加载按程序顺序限定的方式从存储操作接收数据(即,根据执行那些指令的软件的控制流假定要执行指令的顺序)。因为指令执行流水线200能够无序地执行包括加载指令和存储指令的指令,所以在相同线程的指令之间强制实施存储至加载的排序,以防止加载指令消耗过时的数据。
为了在无序处理器(例如,处理器102)中强制实施存储器排序规则,指令流水线200则被允许且有时确实无序地执行加载和存储指令。当加载指令完成但尚未准备引退时,指令流水线200则监测加载指令是否违反了一个或多个存储器排序规则。当针对该加载指令不可能发生违反存储器排序规则的情况时,加载指令则准备好引退。加载指令也有可能完成且同时准备好引退,在这种情况下,则不会检查该加载指令是否违反了存储器排序规则。在发生违反的情况下,加载指令从流水线200进行刷新且重放。依据重放机制,其他指令,诸如比该加载指令更新的指令也会进行刷新。在不发生违反的情况下,允许加载指令引退,这意味着将加载指令的结果提交到指令流水线200的架构状态。用于检查违反情况的一些示例性技术如下。
在一些示例中,按以下方式检查违反加载至加载的排序的情况。响应于加载指令完成以及该加载指令不是将在加载排序队列228中最老的加载指令,加载/存储单元214从加载队列224移除该指令并且将指令置于加载排序队列228中。如果当加载指令完成时加载指令是将在加载排序队列228中最老的加载指令,则加载/存储单元214从加载队列224移除该指令并且不会将该指令置于加载排序队列228中。
当加载指令在加载排序队列228中时,加载/存储单元214监测在存储加载数据的最低级高速缓存(例如,L1高速缓存)中的高速缓存行。如果发生以下任一种情况:从高速缓存逐出高速缓存行(例如,由于被不同的高速缓存行替换);或者由与执行加载指令的线程不同的线程访问高速缓存行(其中,由在高速缓存处接收的探测识别访问),则加载/存储单元214确定发生了违反加载至加载的排序。如果在加载排序队列228中不再要监测加载指令之前发生了违反,则加载/存储单元214从加载排序队列228移除加载指令。在加载指令是用于加载排序队列228和加载队列224中的该线程的最老的加载指令的情况下,在加载排序队列228中不再要监测加载指令。
在一些示例中,按以下方式检查违反存储至加载的排序的情况。响应于加载指令完成并且该加载指令有资格置于乱序缓冲器230中,加载/存储单元214将加载指令置于乱序缓冲器230中。在加载指令有可能提交存储至加载的排序规则的违反的情况下,加载指令有资格置于乱序缓冲器230中。如果存在至少一个比加载指令更老的存储指令,则可能发生这种违反情况,其中加载/存储单元214尚未确定用于该更老的存储指令的物理地址。如果加载指令有资格置于乱序缓冲器230中,则加载/存储单元214不会将加载指令置于乱序缓冲器230中。
当在乱序缓冲器230中时,加载/存储单元214按以下方式检查是否违反了存储至加载的排序规则。在确定用于比该加载指令更老的存储指令的物理地址时,加载/存储单元214将该物理地址与加载指令的物理地址进行比较。如果存在匹配,则加载/存储单元214确定发生了违反,并且如果不存在匹配,则加载/存储单元214确定针对该存储指令不会发生违反情况。响应于不再有比加载指令更老并且尚未确定其物理地址的存储指令,加载/存储单元214确定针对该加载指令来说不再可能有违反情况并且从乱序缓冲器230移除该加载指令。
如果要强制实施加载至加载的排序和存储至加载的排序两者,则如果加载指令仍在加载排序队列228或乱序缓冲器230中的一者中,即使从那些队列中的一者移除了加载指令,加载指令也不会引退。在这种情况下,在加载指令不再在任一队列中的情况下,加载指令引退。也可以使用替代的或附加的存储器排序规则,每一个均具有相应的队列。在这种情况下,响应于加载指令不存在于所有这样的队列中,加载指令则引退。加载排序队列、乱序缓冲器和/或用于存储器一致性模型验证的任何其他队列在本文中被称为存储器一致性排序队列232。
在一些情况下,存储器一致性排序队列232中的一个或多个变满。如果加载指令完成并且有资格置于存储器一致性排序队列232中,但是该队列已满,则加载指令不会被置于该存储器一致性排序队列232中。在那种情况下,加载指令保留在加载队列224中,直到时隙在已满的存储器一致性排序队列232中变得空闲为止。这种加载指令在本文中有时被称为正在等待在存储器一致性排序队列232中的时隙变得空闲的加载指令。
在一种技术中,当加载指令正在等待存储器一致性排序队列中的时隙变得空闲时,不发出依赖于加载指令的指令以供执行。如果指令消耗由加载指令加载的数据(作为操作数),则该指令取决于加载指令。该技术是“简单的”,这是因为该技术不需要特殊的步骤来识别针对依赖于加载指令的指令是否已发生违反存储器排序规则的情况。更具体地说,根本不执行这样的指令,这意味着不需要检测这种违反情况。然而,可以通过推测性地执行这种依赖性指令并且使用用于检测违反存储器排序规则的情况的机制来获得性能改善。
图3A示出了用于触发依赖于有资格被置于已满的存储器一致性排序队列232中的加载指令的指令的推测性执行的示例性操作。加载/存储单元214接收用于执行的加载指令301,并且将加载指令301置于加载队列224中。加载/存储单元214执行如由加载指令301指定的地址计算302。地址计算302涉及计算地址,要基于由加载指令301显式或隐式指定的操作或操作数从该地址加载数据。如果加载指令301需要地址转换(例如,因为加载指令301指定了虚拟地址),则在操作304处,加载/存储单元214从数据TLB 226请求地址转换,并且在操作306处,数据TLB 226返回转换的地址。在操作308中,加载/存储单元214从数据高速缓存220请求在地址处的数据,并且在操作310中,数据高速缓存220返回所请求的数据。此时,加载指令被认为是完成的。然而,因为加载/存储单元214乱序地执行存储器指令,所以加载/存储单元214检查是否违反了存储器排序规则。如本文其他地方所述,如果加载指令有资格被置于至少一个存储器排序一致性队列232中,则加载/存储单元214尝试将加载指令置于这种队列中。
然而,在图3A的操作中,队列232已满。因此,在操作312处,加载/存储单元214检测到要放置加载指令的存储器排序一致性队列232中的至少一个已满。如本文其他地方所述,并非所有加载指令都要被置于每个存储器排序一致性队列232中。在本文的其他地方提供了关于何时将加载指令置于或不置于存储器排序一致性队列232中的讨论。通常,当有可能发生违反与该队列232相关联的类型时,将加载指令置于存储器排序一致性队列232中。当不再可能发生违反该类型时,加载指令不会被置于存储器排序一致性队列232中。操作312涉及加载/存储单元214检测到要放置加载指令的至少一个存储器排序一致性队列232已满。
响应于检测312,加载/存储单元214将加载指令301保留在加载队列214中,并且在操作314中,将从数据高速缓存220检索的数据存储至用于检索数据的存储位置中。在一个示例中,存储位置是寄存器文件218。在另一个示例中,存储位置是用于临时存储这种加载数据的存储器320。加载/存储单元214随后使用存储在用于检索数据的存储位置处的数据来检查是否违反了用于推测性执行的加载依赖性指令的数据推测。使用寄存器文件218作为存储位置提供了以下好处:不使用附加的成本(就芯片面积而言)来检查是否违反了数据推测,并且另外,如果分配到要被置于存储器排序一致性队列232中的加载指令的寄存器文件218的端口是读取/写入,则可以“免费”使用该端口以用于检查违反情况。
图3B示出了针对这种队列232先前已满的加载指令的响应于时隙在存储器排序一致性队列232中变得空闲的示例性操作。在一些实现方式中,响应于时隙在加载指令正在等待的所有存储器排序一致性队列232中变得空闲,发生图3B的操作。在其他实现方式中,每次时隙在加载指令正在等待的存储器排序一致性队列232中的一个中变得空闲,图3B的操作则会发生。通常,图3B的操作示出了针对由于存储器排序一致性队列232已满而保留在加载队列224中的加载依赖性指令的对数据错误推测的检查。
在操作330处,加载/存储单元214重放加载指令301。该重放涉及从数据高速缓存220提取数据。在操作332处,加载/存储单元214将针对重放的加载指令检索到的数据与来自原始加载指令的存储在用于检索数据的存储位置中的数据进行比较。如果数据相同,则针对依赖于加载指令的指令而言未发生数据错误推测,并且加载/存储单元214不刷新流水线或重放加载指令。如果数据不同,则已发生数据错误推测,并且加载/存储单元214刷新至少加载指令和加载依赖性指令的指令流水线200,并且使加载指令重放。
如果在操作332中数据相同,并且仍然要检查加载指令是否违反了存储器排序规则,则加载/存储单元214将加载指令存储在存储器排序一致性队列232中现在空闲的时隙中。加载/存储单元214使用该时隙以在以后的时间检查这种违反情况,如本文其他地方所述。所检查的违反情况是与已经变得空闲的队列232相关联的类型的加载指令的违反情况。例如,如果加载指令正在等待加载排序队列228中的时隙,则要检查的违反情况是对加载至加载的排序的违反情况。
有可能在比较332完成时,不需要检查加载指令是否违反了针对队列232的存储器排序规则,时隙对于该队列232而言变得空闲(例如,由于加载指令将是该队列232中的最老的加载指令或者所有较老的存储指令已经具有其所计算的物理地址并且其中没有一个与加载指令冲突)。在那种情况下,加载指令没有被置于该队列232中。如果此时加载指令未驻留在加载队列224或任何存储器排序一致性队列232中,则该加载指令准备引退。
图4是根据一个示例的用于推测性地执行依赖于存储器排序一致性队列已满的加载指令的指令的方法400的流程图。虽然相关于图1至图3B的系统进行了描述,但是本领域的技术人员将理解,被配置为以任何技术上可行的顺序执行方法400的步骤的任何系统都落在本公开的范围内。
方法400开始于步骤402,其中加载指令完成并且加载指令有资格被置于的存储器排序一致性队列232已满。当由加载指令请求的数据已经返回到加载/存储单元214时,加载指令完成。已经在加载队列224中的加载指令保留在那里。在步骤404,加载/存储单元214将加载的数据置于用于当存储器排序一致性队列232已满时加载的数据的存储位置中。如本文其他地方所述,在一个示例中,该存储位置是寄存器文件218,并且在另一个示例中,该存储位置是临时加载数据存储存储器320。
在步骤406,指令流水线200推测性地执行加载依赖性指令,其依赖于关于步骤402讨论的加载指令。加载依赖性指令是消耗由加载指令加载的值(作为操作数)的指令,或者是依赖于其他加载依赖性指令的指令。因为不能确定其消耗的值是正确的,这些指令是推测性执行的,这是因为加载指令可能被确定已违反了存储器排序规则。
在步骤408,响应于时隙在已满的存储器排序一致性队列232中变得可用,加载/存储单元214重放加载指令以再次提取数据。在步骤410,加载/存储单元214通过将由重放的加载指令加载的数据与用于存储在用于当存储器排序一致性队列232已满时加载的数据的存储位置中的原始执行的加载指令的数据进行比较来针对推测性执行的加载依赖性指令测试数据错误推测。该测试包括将用于重放加载的值与存储位置中的值进行比较。如果值不相同,则会发生错误推测,并且刷新加载指令和加载依赖性指令以及重放加载指令。如果值相同,则不会发生错误推测。
如果未发生数据错误推测,则加载/存储单元214将加载指令移动至之前已满并且现在可用的存储器排序一致性队列232。当在该存储器排序一致性队列232中时,加载/存储单元214监测加载指令是否违反了与该队列232相关联的存储器排序规则。本文描述了用于测试这种违反情况的几种示例性技术。如果当加载指令在队列232中时未发生违反情况并且如果确定不会发生违反情况,则加载指令会离开队列(例如,加载指令变为队列232中最老的加载指令或者不再有比加载指令更老且尚未确定其物理地址的存储指令)。如果加载指令不再在任何存储器排序一致性队列232中,则加载指令变为准备好引退。
如本文所使用的术语“指令”可以指由解码器级208或指令流水线200的其他级生成的架构指令或微操作。众所周知,由指令集架构指定的架构指令有时是由指令流水线作为多个单独的微操作执行的。
在声明从高速缓存提取数据的情况下,应理解,数据在请求时可能不存在于高速缓存中,并且响应于这种请求,高速缓存可能从层次结构的更高级别请求数据,这最终将该数据提供至原始高速缓存。
应理解,基于本文的公开内容,许多变型是可能的。尽管上面以特定的组合描述了特征和要素,但是每个特征或要素可以单独使用而无需其他特征和要素,或者以具有或不具有其他特征和要素的各种组合使用。
本文描述的各种元件被实现为执行本文描述的功能的电路、在处理器上执行的软件或其组合。在图1中,处理器102是执行本文描述的操作的计算机处理器。输入驱动器112、输出驱动器114、输入装置108和输出装置110是在一个或多个处理器上执行的软件、硬件或其组合。指令流水线200的各种元件是硬件电路。
所提供的方法可在通用计算机、处理器或处理器核心中实现。合适的处理器包括例如通用处理器、专用处理器、常规处理器、数字信号处理器(DSP)、多个微处理器、与DSP核相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)电路、任何其他类型的集成电路(IC)和/或状态机。此类处理器可通过以下方式制造:使用处理后硬件描述语言(HDL)指令的结果和包括网表的其他中间数据(此类指令能够存储在计算机可读介质上)来配置制造过程。此类处理的结果可以是掩模作品,所述掩膜作品然后在半导体制造过程中被用来制造实现实施方案各方面的处理器。
本文提供的方法或流程图可在计算机程序、软件或固件中实现,所述计算机程序、软件或固件结合在非暂时性计算机可读存储介质中以供通用计算机或处理器执行。非暂时性计算机可读存储介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、寄存器、高速缓存存储器、半导体存储器装置、磁性介质(诸如内部硬盘和可移除磁盘)、磁光介质、以及光学介质(诸如CD-ROM盘和数字多功能盘(DVD))。
***

Claims (20)

1.一种用于推测性地执行加载依赖性指令的方法,其包括:
检测对于完成的加载指令而言,存储器排序一致性队列已满;
当所述存储器排序一致性队列已满时,将由所述完成的加载指令加载的数据存储至用于存储数据的存储位置中;
推测性地执行依赖于所述完成的加载指令的指令;
响应于时隙在所述存储器排序一致性队列中变得可用,重放所述加载指令;以及
响应于接收到用于所述重放加载指令的加载数据,通过比较用于所述重放加载指令的所述加载数据与存储在所述存储位置中的由所述完成的加载指令加载的所述数据来测试数据的错误推测。
2.如权利要求1所述的方法,其还包括:
响应于确定用于所述重放加载指令的所述加载数据与由所述完成的加载指令加载的所述数据相同,确定未发生违反所述存储器排序规则。
3.如权利要求2所述的方法,其还包括:
从加载队列移除所述加载指令;
将所述加载指令存储在所述存储器排序一致性队列中;以及
针对在所述存储器排序一致性队列中的所述加载指令,测试是否违反了所述存储器排序一致性规则。
4.如权利要求1所述的方法,其还包括:
响应于确定用于所述重放加载指令的所述加载数据与由所述完成的加载指令加载的所述数据不相同,确定发生了违反所述存储器排序一致性语义。
5.如权利要求4所述的方法,其还包括:
响应于发生所述违反,刷新并重放所述加载指令。
6.如权利要求1所述的方法,其中依赖于所述完成的加载指令的指令包括消耗由所述完成的加载指令加载的所述数据的指令。
7.如权利要求1所述的方法,其中所述存储器排序规则包括加载至加载的排序规则。
8.如权利要求1所述的方法,其中所述存储器排序规则包括存储至加载的排序规则。
9.如权利要求1所述的方法,其中:
所述存储位置包括以下项中的一个:寄存器文件中的寄存器,所述寄存器是所述完成的加载指令的目的地寄存器;以及存储器,所述存储器专用于存储加载数据以针对加载依赖性指令测试是否违反了存储器排序一致性语义。
10.一种用于推测性地执行加载依赖性指令的处理器子系统,所述处理器子系统包括:
存储器排序一致性队列;以及
加载/存储单元,所述加载/存储单元被配置为:
检测对于完成的加载指令而言,存储器排序一致性队列已满;
在所述存储器排序一致性队列已满的条件下,将由所述完成的加载指令加载的数据存储至用于存储数据的存储位置中;
允许推测性地执行依赖于所述完成的加载指令的指令;
响应于时隙在所述存储器排序一致性队列中变得可用,重放所述加载指令;以及
响应于接收到用于所述重放加载指令的加载数据,通过比较用于所述重放加载指令的所述加载数据与存储在所述存储位置中的由所述完成的加载指令加载的所述数据来测试数据的错误推测。
11.如权利要求10所述的处理器子系统,其中所述加载/存储单元还被配置为:
响应于确定用于所述重放加载指令的所述加载数据与由所述完成的加载指令加载的所述数据相同,确定未发生违反所述存储器排序规则。
12.如权利要求11所述的处理器子系统,其中所述加载/存储单元还被配置为:
从加载队列移除所述加载指令;
将所述加载指令存储在所述存储器排序一致性队列中;以及
针对在所述存储器排序一致性队列中的所述加载指令,测试是否违反了所述存储器排序一致性规则。
13.如权利要求10所述的处理器子系统,其中所述加载/存储单元还被配置为:
响应于确定用于所述重放加载指令的所述加载数据与由所述完成的加载指令加载的所述数据不相同,确定违反了所述存储器排序一致性语义。
14.如权利要求13所述的处理器子系统,其中所述加载/存储单元还被配置为:
响应于发生所述违反,刷新并重放所述加载指令。
15.如权利要求10所述的处理器子系统,其中依赖于所述完成的加载指令的指令包括消耗由所述完成的加载指令加载的所述数据的指令。
16.如权利要求10所述的处理器子系统,其中所述存储器排序规则包括加载至加载的排序规则。
17.如权利要求10所述的处理器子系统,其中所述存储器排序规则包括存储至加载的排序规则。
18.如权利要求10所述的处理器子系统,其中:
所述存储位置包括以下项中的一个:寄存器文件中的寄存器,所述寄存器是所述完成的加载指令的目的地寄存器;以及存储器,所述存储器专用于存储加载数据以针对加载依赖性指令测试是否违反了存储器排序一致性语义。
19.一种用于推测性地执行加载依赖性指令的处理器,所述处理器包括:
存储器排序一致性队列;
加载/存储单元,所述加载/存储单元被配置为:
检测对于完成的加载指令而言,存储器排序一致性队列已满;
当所述存储器排序一致性队列已满时,将由所述完成的加载指令加载的数据存储至用于存储数据的存储位置中;
允许推测性地执行依赖于所述完成的加载指令的指令;
响应于时隙在所述存储器排序一致性队列中变得可用,重放所述加载指令;以及
响应于接收到用于所述重放加载指令的加载数据,通过比较用于所述重放加载指令的所述加载数据与存储在所述存储位置中的由所述完成的加载指令加载的所述数据来测试数据的错误推测;以及
一个或多个功能单元,所述一个或多个功能单元被配置为推测性地执行依赖于所述完成的加载指令的所述指令。
20.如权利要求19所述的处理器,其中所述存储器排序规则包括加载至加载的排序规则和存储至加载的排序规则中的一个。
CN202080007266.2A 2019-04-03 2020-03-27 用于容忍存储器违反排序检查缓冲器的排空延迟的推测性指令唤醒 Pending CN113227969A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962828861P 2019-04-03 2019-04-03
US62/828,861 2019-04-03
US16/671,097 US11113065B2 (en) 2019-04-03 2019-10-31 Speculative instruction wakeup to tolerate draining delay of memory ordering violation check buffers
US16/671,097 2019-10-31
PCT/US2020/025357 WO2020205570A1 (en) 2019-04-03 2020-03-27 Speculative instruction wakeup to tolerate draining delay of memory ordering violation check buffers

Publications (1)

Publication Number Publication Date
CN113227969A true CN113227969A (zh) 2021-08-06

Family

ID=72663441

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080007266.2A Pending CN113227969A (zh) 2019-04-03 2020-03-27 用于容忍存储器违反排序检查缓冲器的排空延迟的推测性指令唤醒

Country Status (6)

Country Link
US (1) US11113065B2 (zh)
EP (1) EP3948527A4 (zh)
JP (1) JP7403541B2 (zh)
KR (1) KR20210135216A (zh)
CN (1) CN113227969A (zh)
WO (1) WO2020205570A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117806706A (zh) * 2023-12-29 2024-04-02 上海合芯数字科技有限公司 存储顺序违例处理方法、装置、电子设备及介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US20230078985A1 (en) * 2021-09-15 2023-03-16 Realtek Semiconductor Corporation Checker and checking method for prossor circuit

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058472A (en) 1997-06-25 2000-05-02 Sun Microsystems, Inc. Apparatus for maintaining program correctness while allowing loads to be boosted past stores in an out-of-order machine
AU1078099A (en) 1997-10-13 1999-05-03 Institute For The Development Of Emerging Architectures, Llc Method and apparatus for optimizing instruction execution
US6463522B1 (en) 1997-12-16 2002-10-08 Intel Corporation Memory system for ordering load and store instructions in a processor that performs multithread execution
AU2002367955A1 (en) 2001-06-26 2004-01-06 Sun Microsystems, Inc. Method and apparatus for facilitating speculative loads in a multiprocessor system
US7293161B1 (en) * 2003-10-14 2007-11-06 Sun Microsystems, Inc. Deferring loads and stores when a load buffer or store buffer fills during execute-ahead mode
US20060026371A1 (en) 2004-07-30 2006-02-02 Chrysos George Z Method and apparatus for implementing memory order models with order vectors
US7529911B1 (en) 2005-05-26 2009-05-05 Sun Microsystems, Inc. Hardware-based technique for improving the effectiveness of prefetching during scout mode
US8392757B2 (en) 2010-10-22 2013-03-05 Advanced Micro Devices, Inc. Method and apparatus for processing load instructions in a microprocessor having an enhanced instruction decoder and an enhanced load store unit
US8972700B2 (en) * 2011-02-28 2015-03-03 Freescale Semiconductor, Inc. Microprocessor systems and methods for latency tolerance execution
US20120303934A1 (en) * 2011-05-26 2012-11-29 Advanced Micro Devices, Inc. Method and apparatus for generating an enhanced processor resync indicator signal using hash functions and a load tracking unit
KR101996592B1 (ko) 2012-06-15 2019-07-04 인텔 코포레이션 명확화 없는 비순차 load store 큐를 갖는 재정렬된 투기적 명령어 시퀀스들
US10534616B2 (en) * 2017-10-06 2020-01-14 International Business Machines Corporation Load-hit-load detection in an out-of-order processor
US11188341B2 (en) * 2019-03-26 2021-11-30 Intel Corporation System, apparatus and method for symbolic store address generation for data-parallel processor

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117806706A (zh) * 2023-12-29 2024-04-02 上海合芯数字科技有限公司 存储顺序违例处理方法、装置、电子设备及介质

Also Published As

Publication number Publication date
US11113065B2 (en) 2021-09-07
KR20210135216A (ko) 2021-11-12
EP3948527A1 (en) 2022-02-09
JP2022526057A (ja) 2022-05-23
WO2020205570A1 (en) 2020-10-08
JP7403541B2 (ja) 2023-12-22
US20200319889A1 (en) 2020-10-08
EP3948527A4 (en) 2022-12-21

Similar Documents

Publication Publication Date Title
US9448936B2 (en) Concurrent store and load operations
US8127057B2 (en) Multi-level buffering of transactional data
US8180977B2 (en) Transactional memory in out-of-order processors
US8327188B2 (en) Hardware transactional memory acceleration through multiple failure recovery
CN114730294A (zh) 用于执行存储到加载转发的技术
US11113065B2 (en) Speculative instruction wakeup to tolerate draining delay of memory ordering violation check buffers
US11948013B2 (en) Apparatus and method with value prediction for load operation
US7934080B2 (en) Aggressive store merging in a processor that supports checkpointing
US20200310814A1 (en) Reduction of data cache access in a processing system
KR20230093442A (ko) 프로세서에서 추론적 예측 실패 복구시 리플레이를 위한 제어 독립적(ci) 메모리 데이터 의존적(dd)(cimdd) 명령어들로서 로드 기반 제어 독립적(ci) 레지스터 데이터 독립적(di)(cirdi) 명령어들의 예측
CN109690489B (zh) 锁定后指令的推测性引退
US10747535B1 (en) Handling non-cacheable loads in a non-coherent processor
US11822479B2 (en) History-based selective cache line invalidation requests
US11630772B1 (en) Suppressing cache line modification
US11836085B2 (en) Cache line coherence state upgrade
KR102594618B1 (ko) 락 어드레스 경합 예측자
US20230101748A1 (en) Weak cache line invalidation requests for speculatively executing instructions
KR20240089036A (ko) 캐시 라인 일관성 상태 다운그레이드
CN118056192A (zh) 将特定数据模式的指示存储在备用目录条目中

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination