CN114730294A - 用于执行存储到加载转发的技术 - Google Patents

用于执行存储到加载转发的技术 Download PDF

Info

Publication number
CN114730294A
CN114730294A CN202080082330.3A CN202080082330A CN114730294A CN 114730294 A CN114730294 A CN 114730294A CN 202080082330 A CN202080082330 A CN 202080082330A CN 114730294 A CN114730294 A CN 114730294A
Authority
CN
China
Prior art keywords
load
instruction
store
load instruction
address
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
CN202080082330.3A
Other languages
English (en)
Inventor
约翰·M·金
马修·T·索贝尔
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 CN114730294A publication Critical patent/CN114730294A/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/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
    • 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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

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)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

提供了一种用于执行存储到加载转发的技术。所述技术包括:确定针对加载指令要加载的数据的虚拟地址;通过将加载指令的基于虚拟地址的比较值与一个或多个存储指令的一个或多个基于虚拟地址的比较值进行比较,来从一个或多个存储指令存储器识别匹配的存储指令;确定加载指令的物理地址;以及基于加载指令的物理地址与匹配的存储指令的物理地址之间的比较来验证加载指令。

Description

用于执行存储到加载转发的技术
相关申请的交叉参考
本申请要求于2019年11月27日提交的标题为“TECHNIQUES FOR PERFORMINGSTORE-TO-LOAD FORWARDING(用于执行存储到加载转发的技术)”的未决美国非临时专利申请号16/698,808的权益,所述申请的全部内容以引用方式并入本文中。
背景技术
无序处理器无序地执行指令,但遵守某些约束,以便确保如程序所指定地进行执行。特定地说,与较旧存储对同一地址执行的较新加载有时是无序执行的且一起及时关闭。如果由存储指令存储的值在加载指令执行时尚未被提交给存储器系统(其包括例如由更高层级的高速缓存及系统存储器支持的高速缓存),则执行存储到加载转发,其中指令流水线将由存储指令存储的数据直接提供给加载指令。
附图说明
可以从结合附图以举例的方式给出的以下描述中获得更详细的理解,在附图中:
图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是可选部件,并且如果输入驱动器112和输出驱动器114不存在,则装置100将以相同方式操作。
图2是根据示例的位于图1的处理器102内的指令执行流水线200的框图。指令执行流水线200从存储器检索指令并执行指令,从而将数据输出到存储器并修改指令执行流水线200内元件(例如寄存器文件218内的寄存器)的状态。
指令执行流水线200包括:指令提取单元204,其经由指令高速缓存202从系统存储器(例如存储器104)提取指令;解码器208,其解码所提取的指令;功能单元216,其执行计算以处理指令;加载/存储单元214,其经由存储器系统220从系统存储器加载数据或将数据存储到系统存储器;以及寄存器文件218,其包括针对指令存储工作数据的寄存器。存储器系统220包括存储器层级的一个或多个存储器,所述存储器包括例如数据高速缓存(例如,0级)、其他高速缓存、存储器及其他存储器。重新排序缓冲器210跟踪当前运行中的指令并确保指令有序退出,尽管允许在运行时无序执行。“运行中”指令是指已被重新排序缓冲器210接收但尚未将结果(例如,写入寄存器文件的非推测性结果等等)提交给处理器的架构状态的指令。保留站212保存等待在功能单元216上执行的指令并跟踪指令操作数。当所有操作数都准备好执行特定指令时,保留站212将指令发送到功能单元216或加载/存储单元214以供执行。已完成指令在重新排序缓冲器210中被标记为退出且当在重新排序缓冲器队列210最前面时退出。退出是指将指令的结果提交给处理器的架构状态的行为。例如,通过添加指令将添加结果写入架构寄存器的最新非推测性副本、通过加载指令将加载值写入架构寄存器的最新非推测性副本、或者通过分支指令非推测性地致使指令流跳转到新位置都是指令的退出的示例。
指令执行流水线200的各种元件经由共用数据总线222通信。例如,功能单元216及加载/存储单元214将结果写入共用数据总线222,所述结果可以由保留站212读取以执行相关指令并由重新排序缓冲器210读取作为已完成执行的运行中指令的最终处理结果。加载/存储单元214还从共用数据总线222读取数据。例如,加载/存储单元214从共用数据总线222读取来自已完成指令的结果并针对存储指令经由存储器系统220将结果写入存储器。
指令执行流水线200能够执行加载指令和存储指令(以及其他指令)。加载指令是从存储器加载数据并将所述数据放置到寄存器文件218中的寄存器的指令。存储指令是将数据从寄存器存储到存储器位置的指令。对于存储或加载,在许多情况下,基于一个或多个寄存器的内容及/或指令本身中所指定的一个或多个值来计算指定的地址(将数据存储到的地址或从中加载数据的地址)。此外,对于指定虚拟存储器地址的加载或存储,那些地址被转译成物理地址。
更详细地,存储指令执行如下。指令提取单元204提取存储指令。解码器208解码存储指令并将存储指令传输到重新排序缓冲器210,所述重排序缓冲器将存储指令提供到加载/存储单元214。保留站212向功能单元216发出存储指令以生成虚拟地址(例如,以存储指令所指定的方式计算虚拟地址,例如,通过将一个寄存器的内容添加到另一寄存器的内容)。随后,功能单元216将虚拟地址传输到执行存储指令的加载/存储单元214。加载/存储单元214通过经由数据转译后备缓冲器(TLB)226将虚拟地址转译为物理地址并且通过在加载/存储单元214中内部缓冲存储指令要存储的数据来执行存储指令。重新排序缓冲器210使存储指令退出,这意味着存储指令不是推测性地执行的且最终将被提交给存储器系统220。加载/存储单元214将存储指令传输到存储提交队列230。然后,加载/存储单元214将存储提交给存储系统220并响应于接收到存储指令所指定的数据已实际写入存储器系统220的通知而从存储提交队列230移除存储指令。在一些实施方式中,不使用存储提交队列230。
更详细地,加载指令执行如下。指令提取单元204提取加载指令。解码器208解码加载指令并将加载指令传输到重新排序缓冲器210,所述重排序缓冲器将加载指令提供到加载/存储单元214。保留站212向功能单元216发出加载指令以针对加载指令生成虚拟地址(例如,以加载指令所指定的方式计算虚拟地址,例如,通过将一个寄存器的内容添加到另一寄存器的内容)。随后,功能单元216将虚拟地址传输到执行加载指令的加载/存储单元214。加载/存储单元214通过经由数据TLB 226将虚拟地址转译为物理地址并通过从存储器系统220加载物理地址所指定的数据来执行加载指令。
出于性能原因,加载/存储单元214对访问同一地址并在至少部分地重叠的时间周期中执行的存储和加载执行存储到加载转发。更具体地说,在一些情况下,对同一地址执行加载指令及存储指令,并且加载指令是比存储指令新的指令。在加载/存储单元214中执行的加载指令试图加载请求数据。如果存储指令尚未将其数据提交给存储器系统220,则通过加载指令从存储器系统读取是不可能的,因为此种读取会产生过期数据。因此,加载/存储单元214将数据从存储指令转发到加载指令。
如上所述,如果加载指令及较旧存储指令的物理地址相同,则进行存储到加载转发。如果物理地址不同,则不应进行存储到加载转发。因此,在一种技术中,在执行加载指令之后,加载/存储单元214检查加载指令的物理地址是否与任何未提交的存储指令相同。然而,这种技术导致与以下事实相关联的潜在延迟:在一些情况下,在将要进行这种检查时,存储指令或加载指令的物理地址中的一者或两者都是未知的。因此,这种技术将导致成功地执行加载指令的延迟,直到此类物理地址可用为止。
因此,在一种技术中,加载/存储单元214使用基于虚拟地址的比较值(本文中有时简称为“比较值”)来检查加载指令与未提交的存储指令之间的匹配,所述比较值是基于加载指令要加载的数据的虚拟地址。在一些实施方式中,基于虚拟地址的比较值是完整虚拟地址。在其他实施方式中,基于虚拟地址的比较值是完整虚拟地址的一部分。在又其他实施方式中,基于虚拟地址的比较值是通过变换函数(其中在一些实施方式中,变换函数是散列函数)从完整虚拟地址导出的值。在另外的其他实施方案中,基于虚拟地址的比较值是通过变换函数(其中在一些实施方式中,变换函数是散列函数)从虚拟地址的一部分导出的值。针对加载指令和存储指令两者计算基于虚拟地址的比较值以允许对这些值进行比较。在一些实施方式中,“匹配”意味着存储指令的基于虚拟地址的比较值与加载指令的基于虚拟地址的比较值相同。在其他实施方案中,匹配意味着比较值的一部分是相同的。
注意,加载指令的基于虚拟地址的比较值与存储指令的基于虚拟地址的比较值之间的匹配不一定指示加载指令及存储指令的物理地址是相同的。而是,比较值的匹配指示这些物理地址可能是相同的。因此,将加载指令的执行(包括从具有匹配的比较值的存储指令获得数据)视为是推测性的。出于此原因,加载/存储单元214在基于比较值匹配检索数据之后的某个时间验证已正确执行加载。触发加载指令的此验证的事件在本文中称为“验证触发事件”。在一些示例中,验证触发事件是加载指令的成功完成,这意味着加载指令完成了所有其他步骤,诸如地址转译以及实际接收到加载数据,这将使得加载指令被视为完成。在其他示例中,验证触发事件是在加载指令已完成之后存储指令的成功完成。如果验证成功完成,则加载指令所加载的数据被视为是正确的,并且加载指令被视为不再是为了验证存储到加载转发的目的而推测性地执行(在一些情况下,由于其他原因,加载指令仍然在推测性地执行)。如果验证没有成功完成,则从指令执行流水线200刷新加载指令,这意味着从流水线移除加载指令(以及在一些示例中移除,潜在的其他指令,诸如比加载指令新的指令),并且所刷新的加载指令不影响流水线的架构状态,并且对加载指令(以及潜在的其他指令)进行重放。
基于基于虚拟地址的比较值进行的存储到加载转发的验证以如下方式进行。在验证时,存储指令可能已成功地完成了数据要存储到的地址的虚拟到物理地址转译。在那种情况下,验证包括检查存储指令的物理地址是否与加载指令从中读取加载数据的物理地址相同。在物理地址相同的情况下,加载指令得到成功验证,而在物理地址不同的情况下,加载指令没有得到验证。注意,这种验证发生在执行加载指令的稍后时间点,以隐藏在获得加载指令及存储指令两者的物理地址方面的延迟。
也有可能在验证加载指令时,存储指令尚未成功完成数据要存储到的地址的虚拟到物理地址转译。在那种情况下,响应于加载/存储单元214完成加载指令,加载/存储单元214将加载指令放置到加载等待缓冲器228中。当加载/存储单元214通过地址转译获得其比较值与加载指令匹配的存储指令的物理地址时,加载/存储单元214将所述物理地址与加载指令的物理地址进行比较。在物理地址相同的情况下,认为验证已成功完成。在物理地址不是相同的情况下,认为验证没有成功完成。
在一些实施方式中,加载等待缓冲器228是也用于验证存储到加载存储器排序规则的无序缓冲器。更具体地说,存储到加载排序是一种存储器排序规则,其要求所有加载从由程序顺序(即,根据执行那些指令的软件的控制流,指令应该被执行的顺序)定义的存储操作接收数据。由于指令执行流水线200能够无序地执行指令(包括加载指令及存储指令),所以在相同线程的指令之间实施存储到加载排序,以防止加载指令消耗过期数据。
在一些示例中,以以下方式检查对存储到加载排序的违规情况。响应于加载指令完成,并且所述加载指令有资格放置到无序缓冲器中,加载/存储单元214将所述加载指令放置于无序缓冲器中。在加载指令有可能违反存储到加载排序规则的情况下,加载指令有资格被放置到无序缓冲器中。如果存在比加载指令更旧的至少一个存储指令,其中加载/存储单元214尚未确定较旧存储指令的物理地址,则存在此种违规的可能性。如果加载指令没资格放置到无序缓冲器中,则加载/存储单元214不会将加载指令放置到无序缓冲器中。
当在无序缓冲器中时,加载/存储单元214以以下方式检查是否违反了存储到加载排序规则。在确定比加载指令更旧的存储指令的物理地址之后,加载/存储单元214将所述物理地址与加载指令的物理地址进行比较。如果存在匹配,则加载/存储单元214确定发生了违规情况,并且如果存在不匹配,则加载/存储单元214确定所述存储指令没有发生违规情况。响应于不再存在比加载指令更老且尚未确定其物理地址的存储指令,加载/存储单元214确定加载指令不再可能发生违规情况,并且如果不存在将加载指令保留在无序缓冲器中的其他原因,则从无序缓冲器移除加载指令。
因此,在一些实施方式中,加载等待缓冲器228用于执行存储到加载转发验证并执行对违反存储到加载排序规则的检查。如果两个检查都需要,则加载/存储单元214响应于两个检查都完成而从加载等待缓冲器228移除加载指令。
在一些实施方案中,加载/存储单元214实施了一种技术,所述技术涉及基于加载指令的虚拟地址的一部分的初始候选存储指令选择,接着是基于比较值的初步验证,以及随后是基于物理地址的最终验证。更具体地说,在执行加载指令的过程中,加载/存储单元214基于存储指令的虚拟地址的最低有效X位数(在一些示例中,X是12)以及加载指令的虚拟地址的最低有效X位数来选择候选的未提交的存储指令。更具体地说,加载/存储单元214将最低有效X位数与加载指令的最低有效X位数相同的未提交的存储指令识别为候选的未提交的存储指令。然后,加载/存储单元214试图通过将存储指令的基于虚拟地址的比较值与加载指令的基于虚拟地址的比较值进行比较,初步地验证存储指令是获得加载指令的数据的正确指令。如果存在匹配,则加载/存储单元214允许加载指令使用来自匹配存储指令的数据来执行。
稍后,加载/存储单元214使用匹配的存储指令及加载指令的物理地址来执行最终验证,如本文中别处所描述。如果在识别出候选的未提交的存储指令之后,基于虚拟地址的比较值不匹配,则存在两种可能性:假未命中或真未命中。当候选的未提交的存储指令及加载指令的虚拟地址具有相同的X个最低有效位时,发生假未命中,其中虚拟地址本身是不同的(并且因此具有不同比较值,例如,不同虚拟地址的散列是不同的),但尽管如此,不同虚拟地址指向相同物理地址。在X个最低有效位匹配但其余虚拟地址不匹配并且物理地址也不匹配时,发生真未命中。因此,如果在识别候选的未提交的存储指令之后,基于虚拟地址的比较值不匹配,则加载/存储单元214通过比较物理地址来识别此匹配失败是指示真未命中还是假未命中,如本文中别处所描述的(例如,如关于图4的步骤408所描述的)。
如果物理地址不同,则发生真未命中。如果物理地址相同,则发生假未命中。在这两种情况下,都会重放加载指令。如果发生真未命中,则候选的存储指令不保存加载指令的正确数据,并且加载指令在后续重放中不从所述存储指令接收数据。如果发生假未命中,则候选的存储指令确实保存加载指令的正确数据,并且加载指令在后续重放中从存储指令接收数据。
在一些实施方式中,在已将与候选的存储指令的匹配初步验证为无效之后,检测到假未命中。更具体地说,如本文中别处所描述,基于基于虚拟地址的比较值的初步验证发生在加载指令执行的相对早期阶段,此时加载指令及存储指令中的任一者或两者的物理地址不可用。当物理地址可用时,会进行后续最终验证。在真未命中的情况下,加载/存储单元214记住存储指令是不匹配的并重放加载指令。使用此所记住的信息,加载/存储单元214将存储指令从初始候选择排除,并且加载指令不从所述存储指令接收数据。在假未命中的情况下,加载/存储单元214记住所述存储是匹配的并重放加载。使用此所记住的信息,加载/存储单元214迫使由于比较值不匹配而失败的验证改为成功。最终验证也成功,因为物理地址是相同的。
图3A是根据示例的图解说明用于执行存储到加载转发的操作的图式。在图3A中,从一个地址进行加载的加载指令在对同一地址进行写入的存储指令已至少部分地执行但尚未提交结果时执行。
在操作320处,已从重新排序缓冲器210接收到加载指令的保留站212通过解码器208及指令提取单元204将加载指令传输到加载/存储单元214以供执行。在操作322处,保留站212将加载指令传输到功能单元216以确定加载指令的虚拟地址。因为许多加载指令包括间接指定的虚拟地址(例如,作为诸如基地址及偏移量的两个或更多个值的和),所以操作322涉及在功能单元216中执行操作以获得如加载指令所指定数据要从中加载的虚拟地址。
在操作324中,加载/存储单元214执行以下子操作。加载存储单元基于在操作322处获得的虚拟地址来确定基于虚拟地址的比较值。在各种示例中,此确定是通过对在操作322处获得的完整或部分虚拟地址执行散列或通过对在操作322处获得的完整或部分虚拟地址执行除散列之外的操作来做出的。查找匹配涉及查找尚未将结果提交给存储器系统的具有与加载指令的基于虚拟地址的比较值相匹配的基于虚拟地址的比较值的存储操作。在一些示例中,两个基于虚拟地址的比较值之间的匹配意味着这两个值是相同的。在其他示例中,两个基于虚拟地址的比较值之间的匹配意味着这两个值中的一部分是相同的。在又其他示例中,匹配意味着应用于这两个值的函数产生相同的值。操作326图解说明了在存储队列304及存储提交队列230中搜索匹配,但替代地或另外,搜索存储数据的其他结构以获得尚未提交给存储器的存储指令是可能的。存储队列304是存储从加载/存储单元214接收到存储指令时直到存储指令退出并被放置在存储提交队列230中时未决的存储指令的存储器。存储提交队列230是存储从存储队列304接收到存储指令时直到由存储指令存储的数据已提交(即存储)到存储器系统220时的存储指令的存储器。
另外,在操作324处,加载/存储单元214将加载指令的地址提供给地址转译系统(即,数据TLB 226,其试图经由TLB高速缓存存储器的内容并在必要时在存储器层级结构中更高层级的帮助下来转译地址),所述地址转译系统返回所转译的地址。在操作324处,在一些情况下,匹配查找和地址转译发生在至少部分重叠的时间周期中。在一些情况下,加载/存储单元214大致同一时间发出找到匹配的操作及将虚拟地址转译为物理地址的操作。在示例中,“大致同一时间”意味着在相同时钟周期中。在另一示例中,“大致同一时间”意味着两者都响应于获得虚拟地址而开始。一般来说,在操作324处,每个操作开始而无需等待另一操作完成。
注意,因为在等待物理地址完成之前就开始查找比较值之间的匹配,所以加载指令能够比加载指令等待物理地址完成的情况更早地获得经加载数据。然而,因为在操作324处发生的匹配不是基于物理地址,所以进行验证操作(操作326)以验证加载数据。另外,在图3A中,在进行验证时,匹配的存储指令尚未接收到转译的地址(其中术语“匹配的存储指令”意味着在操作324处找到其基于虚拟地址的比较值与加载指令的基于虚拟地址的比较值相匹配的存储指令)。更具体地说,执行比加载指令更旧的存储指令的过程还涉及获得地址转译。然而,加载指令的地址转译可能比匹配的存储指令的地址转译更早获得。在图3A中再次表示的那种情况下,在操作326处,加载/存储单元214将加载指令放置到加载等待缓冲器228中。在操作328处,响应于获得存储指令的物理地址转译,加载/存储单元将所述物理地址应用到加载等待缓冲器228以验证推测性地执行的加载指令。如果加载指令的物理地址与存储指令的物理地址不匹配,则加载/存储单元214确定加载指令的推测性执行失败,并且加载/存储单元214从指令执行流水线200刷新加载指令并致使加载指令重放。如果加载指令的物理地址与存储指令的物理地址相匹配,则加载/存储单元214确定推测性执行得以成功完成。
图3B是根据另一示例的图解说明用于执行存储到加载转发的操作的图式。此示例类似于图3A的示例,除了在验证加载指令时,加载指令没有被放置到加载等待缓冲器228中,因为存储指令的物理地址已可用。更具体地说,在操作342处,保留站212以与操作322类似的方式将加载指令分派给加载/存储单元214。在操作344处,保留站212以与操作324类似的方式确定加载指令的虚拟地址。在操作346处,加载/存储单元以与操作326类似的方式查找加载指令与存储指令的比较值的匹配。在操作348处,加载/存储单元214将存储指令的物理地址与加载指令的物理地址进行比较。如果地址相同,则加载指令被验证。如果地址不相同,则加载指令未被验证并被刷新且重放。
图4是根据示例的用于对加载指令执行存储到加载转发的方法400的流程图。尽管关于图1至图3B的系统进行了描述,但所属领域的技术人员将理解,被配置为以任何技术上可行的顺序执行方法400的步骤的任何系统都落在本公开的范围内。
在步骤402处,加载/存储单元确定针对加载指令要加载的数据的虚拟地址。如本文中别处所描述,加载指令指定要从中加载数据的地址。地址通常是间接指定的,诸如基于添加到基地址的偏移量,或以另一种方式指定。步骤402涉及执行根据加载指令所指定的信息确定虚拟地址所需的任何步骤。
在步骤404处,加载/存储单元214通过将加载指令的基于虚拟地址的比较值与一个或多个存储指令的一个或多个基于虚拟地址的比较值进行比较来识别匹配的存储指令。其比较值被比较的存储指令是已开始执行并且尚未将其结果提交给存储器的存储指令,因为这些存储指令是可用于进行比较的存储指令。在存储指令已将存储值提交给存储器之后,所述值可在存储器中直接使用。在一些实施方案中,加载/存储单元214试图从存储队列304和存储提交队列230中的存储指令识别匹配的存储指令,这两个存储指令在本文中别处都有描述。注意,如果没有找到匹配的存储指令,则不执行存储到加载转发,并且方法400结束。
在步骤406处,加载/存储单元214经由地址转译确定加载指令的物理地址。在各种实施方式中,在与步骤404至少部分重叠的时间周期中执行步骤406。更具体地说,在这些实施方式中,加载/存储单元214识别匹配的存储而不等待接收到物理地址转译,这使得与加载/存储单元214使用物理地址来执行存储到加载转发的技术相比加快了速度。
在步骤408处,加载/存储单元214基于加载指令的物理地址与匹配的存储指令的物理地址的比较来验证加载指令。在一些情况下,加载指令完成,而存储指令尚未接收到物理地址。在这些情况下,加载/存储单元214将加载指令放置在加载等待缓冲器228中。当存储指令接收到物理地址时,加载/存储单元214将所述物理地址应用于加载等待缓冲器228中的加载指令以进行验证。在其他情况下,加载指令完成,且存储指令已接收到物理地址。在这些情况下,加载/存储单元214将加载指令的物理地址与存储指令的物理地址进行比较以进行验证。不管是否使用加载等待缓冲器228,如果在物理地址之间存在匹配,则加载/存储单元214就成功地验证加载指令,并且如果在物理地址之间不存在匹配,则加载/存储单元214未成功地验证加载指令,并且加载/存储单元214致使加载指令得到刷新及重放。
在上文所描述的技术的一些替代方案中,如果在加载指令试图查找具有匹配的基于虚拟地址的比较值的存储指令时,具有匹配的比较值的存储指令已具有转译的物理地址,则允许执行并完成加载指令,但如果此种匹配的存储指令尚不具有转译的物理地址,则无法完成并重放加载指令。
应理解,基于本文中的公开内容,许多变化是可能的。尽管上文以特定组合描述了特征及元件,但是每个特征或元件都可以在没有其他特征和元件的情况下单独使用,或者在具有或不具有其他特征和元件的情况下以各种组合使用。
本文中所描述的各种元件被实施为被配置为执行本文中所描述的功能性的电路、在处理器上执行的软件或者其组合。在图1中,处理器102是被配置为执行本文中所描述的操作的计算机处理器。输入驱动器112、输出驱动器114、输入装置108和输出装置110是在一个或多个处理器、硬件或其组合上执行的软件。指令流水线200的各种元件是硬件电路。
可以在通用计算机、处理器或处理器内核中实施所提供的方法。合适的处理器包括例如通用处理器、专用处理器、常规处理器、数字信号处理器(DSP)、多个微处理器、与DSP内核相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)电路、任何其他类型的集成电路(IC)及/或状态机。此类处理器可以通过以下方式制造:使用所处理的硬件描述语言(HDL)指令的结果和包括网表的其他中间数据(此类指令能够存储在计算机可读介质上)来配置制造过程。此类处理的结果可以是掩模作品,然后在半导体制造过程中使用所述掩模作品来制造实施实施例的各方面的处理器。
本文中所提供的方法或流程图可以在计算机程序、软件或固件中实施,所述计算机程序、软件或固件合并在非暂时性计算机可读存储介质中以供通用计算机或处理器执行。非暂时性计算机可读存储介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、寄存器、高速缓存存储器、半导体存储器装置、磁性介质(诸如内部硬盘和可移除磁盘)、磁光介质以及光学介质(诸如CD-ROM磁盘和数字多功能磁盘(DVD))。

Claims (20)

1.一种用于对加载指令执行存储到加载转发的方法,所述方法包括:
确定针对所述加载指令要加载的数据的虚拟地址;
通过将所述加载指令的基于虚拟地址的比较值与一个或多个存储指令的一个或多个基于虚拟地址的比较值进行比较,从一个或多个存储指令存储器识别匹配的存储指令;
确定所述加载指令的物理地址;以及
基于所述加载指令的所述物理地址与所述匹配的存储指令的物理地址之间的比较来验证所述加载指令。
2.根据权利要求1所述的方法,其中确定针对所述加载指令要加载的所述数据的所述虚拟地址包括:
对如所述加载指令所指定的地址值执行一次或多次计算以获得所述虚拟地址。
3.根据权利要求1所述的方法,其中所述一个或多个存储指令存储器包括以下各项中的至少一项:
存储队列,其被配置为存储正在执行且尚未退出的存储指令;以及
存储提交队列,其被配置为存储已退出且其存储数据尚未提交给存储器系统的存储指令。
4.根据权利要求1所述的方法,其中确定所述加载指令的所述物理地址包括:执行地址转译以将所述加载指令的所述要加载的数据的所述虚拟地址转译为所述加载指令的所述物理地址。
5.根据权利要求1所述的方法,其中验证所述加载指令包括:
在启动所述验证时,检测到所述匹配的存储指令尚未接收到地址转译;以及
响应于所述检测,将所述加载指令放置在加载等待缓冲器中。
6.根据权利要求5所述的方法,其还包括:
响应于接收到所述存储指令的物理地址,将所述存储指令的所述物理地址应用于所述加载等待缓冲器以确定所述存储指令的所述物理地址是否与所述加载指令的所述物理地址相匹配。
7.根据权利要求1所述的方法,其中验证所述加载指令包括:
在启动所述验证时,检测到所述匹配的存储指令已接收到地址转译;以及
将所述加载指令的所述物理地址与所述匹配的存储指令的所述物理地址进行比较。
8.根据权利要求1所述的方法,其中基于所述加载指令的所述数据的所述虚拟地址,所述加载指令的所述基于虚拟地址的比较值包括以下各项中的一项:
所述加载指令的所述虚拟地址的一部分的散列;
所述加载指令的完整虚拟地址的散列;
所述加载指令的所述虚拟地址的一部分;以及
所述加载指令的所述完整虚拟地址。
9.根据权利要求1所述的方法,其还包括:
响应于成功地验证所述加载指令,在不刷新所述加载指令的情况下允许所述加载指令完成执行;或
响应于未成功地验证所述加载指令,刷新所述加载指令并重放所述加载指令。
10.一种用于对加载指令执行存储到加载转发的加载/存储子系统,所述加载/存储子系统包括:
一个或多个存储指令存储器;以及
加载/存储单元,其被配置为:
确定针对所述加载指令要加载的数据的虚拟地址;
通过将所述加载指令的基于虚拟地址的比较值与一个或多个存储指令的一个或多个基于虚拟地址的比较值进行比较,来从所述一个或多个存储指令存储器识别匹配的存储指令;
确定所述加载指令的物理地址;并且
基于所述加载指令的所述物理地址与所述匹配的存储指令的物理地址之间的比较来验证所述加载指令。
11.根据权利要求10所述的加载/存储子系统,其中确定针对所述加载指令要加载的所述数据的所述虚拟地址包括:
对如所述加载指令所指定的地址值执行一次或多次计算以获得所述虚拟地址。
12.根据权利要求10所述的加载/存储子系统,其中所述一个或多个存储指令存储器包括以下各项中的至少一项:
存储队列,其被配置为存储正在执行且尚未退出的存储指令;以及
存储提交队列,其被配置为存储已退出且其存储数据尚未提交给存储器系统的存储指令。
13.根据权利要求10所述的加载/存储子系统,其中确定所述加载指令的所述物理地址包括:执行地址转译以将针对所述加载指令要加载的所述数据的所述虚拟地址转译为所述加载指令的所述物理地址。
14.根据权利要求10所述的加载/存储子系统,其中验证所述加载指令包括:
在启动所述验证时,检测到所述匹配的存储指令尚未接收到地址转译;以及
响应于所述检测,将所述加载指令放置在加载等待缓冲器中。
15.根据权利要求14所述的加载/存储子系统,其中所述加载/存储单元还被配置为:
响应于接收到所述存储指令的物理地址,将所述存储指令的所述物理地址应用于所述加载等待缓冲器以确定所述存储指令的所述物理地址是否与所述加载指令的所述物理地址相匹配。
16.根据权利要求10所述的加载/存储子系统,其中验证所述加载指令包括:
在启动所述验证时,检测到所述匹配的存储指令已接收到地址转译;以及
将所述加载指令的所述物理地址与所述匹配的存储指令的所述物理地址进行比较。
17.根据权利要求10所述的加载/存储子系统,其中基于所述加载指令的所述数据的所述虚拟地址,所述加载指令的所述基于虚拟地址的比较值包括以下各项中的一项:
所述加载指令的所述虚拟地址的一部分的散列;
所述加载指令的完整虚拟地址的散列;
所述加载指令的所述虚拟地址的一部分;以及
所述加载指令的所述完整虚拟地址。
18.根据权利要求10所述的加载/存储子系统,其中所述加载/存储单元还被配置为:
响应于成功地验证所述加载指令,在不刷新所述加载指令的情况下允许所述加载指令完成执行;或
响应于未成功地验证所述加载指令,刷新所述加载指令并重放所述加载指令。
19.一种用于对加载指令执行存储到加载转发的处理单元,所述处理单元包括:
一个或多个存储指令存储器;
加载/存储单元,其被配置为:
确定针对所述加载指令要加载的数据的虚拟地址;
通过将所述加载指令的基于虚拟地址的比较值与一个或多个存储指令的一个或多个基于虚拟地址的比较值进行比较,来从所述一个或多个存储指令存储器识别匹配的存储指令;
确定所述加载指令的物理地址;并且
基于所述加载指令的所述物理地址与所述匹配的存储指令的物理地址之间的比较来验证所述加载指令;以及
数据转译后备缓冲器,其被配置为将所述加载指令的所述虚拟地址转译为所述加载指令的所述物理地址。
20.根据权利要求19所述的处理单元,其中确定针对所述加载指令要加载的所述数据的所述虚拟地址包括:
对如所述加载指令所指定的地址值执行一次或多次计算以获得所述虚拟地址。
CN202080082330.3A 2019-11-27 2020-11-02 用于执行存储到加载转发的技术 Pending CN114730294A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/698,808 2019-11-27
US16/698,808 US11113056B2 (en) 2019-11-27 2019-11-27 Techniques for performing store-to-load forwarding
PCT/US2020/058595 WO2021108086A1 (en) 2019-11-27 2020-11-02 Techniques for performing store-to-load forwarding

Publications (1)

Publication Number Publication Date
CN114730294A true CN114730294A (zh) 2022-07-08

Family

ID=75974191

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080082330.3A Pending CN114730294A (zh) 2019-11-27 2020-11-02 用于执行存储到加载转发的技术

Country Status (6)

Country Link
US (1) US11113056B2 (zh)
EP (1) EP4066120A4 (zh)
JP (1) JP2023503577A (zh)
KR (1) KR20220100939A (zh)
CN (1) CN114730294A (zh)
WO (1) WO2021108086A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102456176B1 (ko) * 2020-05-21 2022-10-19 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
US11573891B2 (en) 2019-11-25 2023-02-07 SK Hynix Inc. Memory controller for scheduling commands based on response for receiving write command, storage device including the memory controller, and operating method of the memory controller and the storage device
US11755731B2 (en) 2020-07-23 2023-09-12 Ventana Micro Systems Inc. Processor that prevents speculative execution across translation context change boundaries to mitigate side channel attacks
US11755732B2 (en) * 2020-07-23 2023-09-12 Ventana Micro Systems Inc. Microprocessor that conditions store-to-load forwarding on circumstances associated with a translation context update
US11803637B2 (en) 2020-07-23 2023-10-31 Ventana Micro Systems Inc. Microprocessor that prevents store-to-load forwarding between different translation contexts
US11803638B2 (en) 2020-07-23 2023-10-31 Ventana Micro Systems Inc. Microprocessor core with a store dependence predictor accessed using a translation context
TW202331504A (zh) * 2021-12-21 2023-08-01 美商賽發馥股份有限公司 處理器管線之儲存-載入轉送
US20220114104A1 (en) * 2021-12-24 2022-04-14 Intel Corporation Typed store buffers for hardening store forwarding

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5606683A (en) * 1994-01-28 1997-02-25 Quantum Effect Design, Inc. Structure and method for virtual-to-physical address translation in a translation lookaside buffer
EP0686912B1 (en) * 1994-06-03 1998-12-16 Motorola, Inc. Data processor with an execution unit for performing load instructions and method of operation
US6813699B1 (en) * 1995-06-02 2004-11-02 Transmeta Corporation Speculative address translation for processor using segmentation and optional paging
US5895503A (en) * 1995-06-02 1999-04-20 Belgard; Richard A. Address translation method and mechanism using physical address information including during a segmentation process
US5761740A (en) * 1995-11-30 1998-06-02 Unisys Corporation Method of and apparatus for rapidly loading addressing registers
US6021485A (en) * 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US6360314B1 (en) * 1998-07-14 2002-03-19 Compaq Information Technologies Group, L.P. Data cache having store queue bypass for out-of-order instruction execution and method for same
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads
US6523109B1 (en) * 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6481251B1 (en) * 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6651161B1 (en) * 2000-01-03 2003-11-18 Advanced Micro Devices, Inc. Store load forward predictor untraining
US7065632B1 (en) * 2000-04-07 2006-06-20 Ip First Llc Method and apparatus for speculatively forwarding storehit data in a hierarchical manner
JP3497832B2 (ja) * 2001-03-28 2004-02-16 株式会社半導体理工学研究センター ロード・ストアキュー
US20040044881A1 (en) * 2002-08-28 2004-03-04 Sun Microsystems, Inc. Method and system for early speculative store-load bypass
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US20070288725A1 (en) * 2006-06-07 2007-12-13 Luick David A A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US7603527B2 (en) * 2006-09-29 2009-10-13 Intel Corporation Resolving false dependencies of speculative load instructions
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US9946547B2 (en) * 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7877559B2 (en) * 2007-11-26 2011-01-25 Globalfoundries Inc. Mechanism to accelerate removal of store operations from a queue
US8533438B2 (en) * 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US20140281116A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits
US9524164B2 (en) * 2013-08-30 2016-12-20 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
US9361227B2 (en) * 2013-08-30 2016-06-07 Soft Machines, Inc. Systems and methods for faster read after write forwarding using a virtual address
US20150121046A1 (en) 2013-10-25 2015-04-30 Advanced Micro Devices, Inc. Ordering and bandwidth improvements for load and store unit and data cache
KR20150096226A (ko) 2014-02-14 2015-08-24 삼성전자주식회사 멀티미디어 데이터 프로세싱 방법 및 그에 따른 멀티미디어 데이터 프로세싱 시스템
US9483409B2 (en) * 2015-02-05 2016-11-01 International Business Machines Corporation Store forwarding cache
US11989555B2 (en) 2017-06-29 2024-05-21 Intel Corporation Instructions for remote atomic operations

Also Published As

Publication number Publication date
US20210157590A1 (en) 2021-05-27
EP4066120A4 (en) 2023-12-20
JP2023503577A (ja) 2023-01-31
KR20220100939A (ko) 2022-07-18
EP4066120A1 (en) 2022-10-05
US11113056B2 (en) 2021-09-07
WO2021108086A1 (en) 2021-06-03

Similar Documents

Publication Publication Date Title
US11113056B2 (en) Techniques for performing store-to-load forwarding
EP3516508B1 (en) Memory violation prediction
US6523109B1 (en) Store queue multimatch detection
US8627044B2 (en) Issuing instructions with unresolved data dependencies
US11048506B2 (en) Tracking stores and loads by bypassing load store units
US7603527B2 (en) Resolving false dependencies of speculative load instructions
US6481251B1 (en) Store queue number assignment and tracking
US8601240B2 (en) Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
JP7403541B2 (ja) メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ
TW202105176A (zh) 減少處理系統中的資料快取記憶體存取
CN114761922A (zh) 指令高速缓存预取限流
US7953960B2 (en) Method and apparatus for delaying a load miss flush until issuing the dependent instruction
US11822479B2 (en) History-based selective cache line invalidation requests
US11947456B2 (en) Weak cache line invalidation requests for speculatively executing instructions
US11630772B1 (en) Suppressing cache line modification
US20230099256A1 (en) Storing an indication of a specific data pattern in spare directory entries
KR20240089314A (ko) 이력 기반 선택적 캐시 라인 무효화 요청
KR102594618B1 (ko) 락 어드레스 경합 예측자
CN118176491A (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