CN1248108C - 用于处理失败的加载检查指令的机制 - Google Patents
用于处理失败的加载检查指令的机制 Download PDFInfo
- Publication number
- CN1248108C CN1248108C CNB008189935A CN00818993A CN1248108C CN 1248108 C CN1248108 C CN 1248108C CN B008189935 A CNB008189935 A CN B008189935A CN 00818993 A CN00818993 A CN 00818993A CN 1248108 C CN1248108 C CN 1248108C
- Authority
- CN
- China
- Prior art keywords
- load
- instructions
- instruction
- exception
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
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
提供了一种用于在一个实现超前加载指令的处理器中从一条失败的加载检查指令中进行恢复的机制。一个超前加载地址表(ALAT)跟踪用于该超前加载指令的状态信息。当一个相关的加载检查操作被处理时读取该状态信息,而且如果该状态信息指示由该超前加载操作返回的数据被一个后续存储操作修改了时,触发一个例外。该加载检查指令被转换到一个加载操作,从该处理器的指令执行流水线中刷新指令,而且该流水线被重新引导到紧接着该加载检查指令之后的第一条指令处。
Description
技术领域
本发明涉及用于处理加载操作的方法,尤其是涉及用于在存储可能以重叠的存储器地址为目标的操作之前处理加载操作的方法。
背景技术
当前可用的处理器能够以非常高的速度执行指令。这些处理器一般实现了流水线的、超标量微型体系结构,该体系结构能够以每一时钟周期接近一千兆赫或更高的时钟频率执行多条指令。近年来,处理器的指令执行性能已经开始超过了计算机系统的容量以提供用于处理的指令及/或数据。
在向处理器提供数据/指令中的一个瓶颈是从计算机的存储器系统传送数据到该处理器的寄存器中的加载操作的相对长的延迟。一个典型的存储器系统包含一个高速缓存分级结构和一个主存储器。加载的延迟取决于在该分级结构中发现该目标数据的位置,即其中该加载操作“命中”的高速缓存。例如,在主要或者第一级高速缓存、即最靠近该处理器核心的高速缓存中的一个加载命中,可以具有一个1到2个时钟周期的延迟。在更远离该处理器核心的更高级的高速缓存中的加载命中具有更大的延迟。例如,第二级和第三级高速缓存可以具有分别为4到8个时钟周期或者10个或更多时钟周期的延迟。如果数据仅仅可以从主存储器中获得,则加载延迟能够在数量级100-200个时钟周期上。
为了避免空闲该处理器,一个编译器一般在使用该目标数据的操作之前很久就调度在一个程序流中的加载操作。编译器调度在该程序被执行之前、以及因此在任何运行时间信息可用之前发生。结果,从该处理器的寄存器传送数据到存储器系统中的存储操作能够限制这个加载调度策略。如果一个编译器把从一个指定存储器地址返回数据的加载操作移动到把数据写入到同一个存储器地址的存储操作前面,则该加载操作将返旧的数据。这就是说,加载将不会观察到以执行次序在该加载前面的存储效果。只要编译器能够从可用的信息中确定由该加载和存储指定的存储器地址,它就能够确定把加载移动到存储前面是否安全。标识存储器地址以确定重叠的处理过程被称为存储器歧义消除。
在许多实例中,当相应的加载和存储操作被调度时不可能消除存储器引用的歧义。例如,由一个操作引用的存储器地址可以取决于恰好在该操作被执行之前、在运行时间确定的变量。对于不能在编译时间消除歧义的加载/存储对,某些高级的编译器仍然能够使用一种“超前加载”来重调度该加载到存储的前面。在一个超前加载中,该加载操作被调度到一个可能的冲突存储操作前面,并且在该存储操作之后把一个检查操作插入在该指令流中。当相应的指令被执行时,解决加载和存储存储器引用。检查操作确定这些动态解决的存储器引用是否重叠,并且如果它们确实如此则启动一个恢复过程。
伴随一个超前加载操作的指令移动由下列指令序列进行说明,其中LOAD、STORE、ALOAD、和LOAD CHECK表示加载、存储、超前加载、和检查操作,而且x和y表示未消除歧义的存储器引用。
没有超前加载 具有超前加载
INSTRUCTION A ALOAD reg2,mem[y]
· INSTRUCTION A
· ·
· ·
INSTRUCTION B ·
STORE regl,mem[x] INSTRUCTION B
LOAD reg2,mem[y] STORE regl,mem[x]
ADD reg2,reg3 LOAD CHECK
ADD reg2,reg3
超前加载添加一个检查操作(LOAD CHECK)到该程序流中。检查操作需要时间来完成,其能够延迟ADD指令(以及其它任何取决于该加载的指令)被收回的时间。为了完全实现超前加载的优点,一个处理器必须提供有效的机制来实现为支持超前加载所必需的操作。这些操作包含,例如,检查一个加载存储冲突,以及当检测到一个冲突时,取消任何也许已使用所产生的旧数据的指令,检索所更新的数据,并且重新执行被取消了的指令。在任何这些操作中由于效率低而造成的延迟能够抵销由超前加载提供的优点。
本发明解决这些及其它与处理超前加载操作相关的问题。
发明内容
本发明提供了一种有效的、用于从一个失败的加载检查操作中恢复的机制。
按照本发明的一种用于处理加载操作的方法,包含如下步骤:响应一第一加载指令,从在一个存储地址的存储器加载数据到一个寄存器;观察与在第一加载指令和一条加载检查指令之间执行的指令相关联的存储器访问;响应于在该第一加载指令和该执行的指令之间观察到的一个冲突,更新一个加载跟踪表,以储存关于由该第一加载指令作为目标的存储器地址的状态信息;响应于在该第一加载指令和该执行的指令之间观察到的一个冲突,更新记分板,以跟踪该寄存器的数据可用性;响应于一个加载检查指令,检查一个加载跟踪表,以确定该存储器地址的一个状态;以及如果该存储器地址的检查的状态指示把该加载检查指令转换成一条加载指令,则把该加载检查指令转换成一条加载指令。
按照本发明的一个处理器,包含:一个取指令单元,提供用于执行的指令;一个存储超前加载地址表的第一存储设备,以存储用于由一条超前加载指令作为目标的一个存储器地址的状态信息;一个存储记分板的第二存储设备,保持一个或多个寄存器的数据有用性的跟踪;一个探听单元,以跟踪加载和存储操作并且更新该状态信息;一个例外单元,当该状态信息指示触发一个微体系结构陷阱时,触发一个微体系结构陷阱。
按照本发明的一个计算机系统,包含:一个存储了一段计算机程序的存储器,其中该计算机程序包含一条超前加载指令和一条加载检查指令;和一个处理器,执行保存在该存储器中的指令,该处理器包含:一个取指令单元,从该存储器中检索指令;一个存储超前加载地址表的第一存储设备,跟踪有关由该超前加载指令作为目标的数据的状态信息;一个存储记分板的第二存储设备,保持一个或多个寄存器的数据有用性的跟踪;一个探听单元,响应于加载和存储操作更新该状态信息;以及一个例外单元,依据监控的例外信号有选择地收回指令,当该加载检查指令触发一个超前加载地址表错误例外时,该例外单元刷新一条或多条指令,并且重新引导该取指令单元到一个指定地址。
根据本发明,对一个存储器地址执行一个第一加载操作。一个后续的加载检查操作检查在一个与该存储器地址相关联的表入口处的加载操作状态。如果该状态指示由第一个加载操作返回的数据是旧的,则加载检查操作被转换到一个加载操作,并且执行一个恢复操作。
对于本发明的一个实施例,该恢复操作被实现为一个微体系结构陷阱。该陷阱刷新指令流水线,并且重新引导该处理器到紧接着检查加载操作之后的一条指令。
附图说明
参考以下附图可以理解本发明,其中类似的单元用类似的数字指示。提供这些附图以说明本发明选定的实施例并且不用于限制附加权利要求的范围。
图1是在其中可以实现本发明的一个计算机系统的一个实施例的一个框图。
图2是一个流程图,表示一种用于实现一个超前加载操作的方法,该超前加载操作使用一个超前加载地址表(ALAT)以跟踪选定的加载和存储操作。
图3是一个流程图,表示一种根据本发明、用于从一个失败的加载检查操作中恢复的方法的一个实施例。
图4是一个流程图,表示一种根据本发明、用于从一个失败的加载检查操作中恢复的方法的另一个实施例。
图5是一个流程图,表示一种根据本发明、用于从一个失败的加载检查操作中恢复的方法的还有另一个实施例。
图6是图1中的例外/确认单元的一个实施例的一个框图,该例外/确认单元适用于作为一个微体系结构陷阱实现图3、4、和5中的方法。
图7是可以由图6中的处理器实现的一个指令流水线的一个实施例的一个框图。
具体实施方式
在下面的讨论中,阐述了许多具体的细节以便提供对本发明的一个彻底了解。然而,本领域普通技术人员利用这个公开的优点,将会理解:可以实践本发明而不需要这些细节。此外,各种众所周知的方法、过程、组件和电路没有被详细描述以便把注意力集中在本发明的特征上。
本发明提供了一种用于从在一个超前加载操作和一个后续存储操作之间的一个冲突中恢复的机制。在下面的讨论中,超前加载是指被调度到一个未消除歧义的存储前面的一个加载操作。该超前加载和存储可以引用重叠的存储器地址。当存储器地址重叠时,该(超前)加载和存储被说成冲突了。本发明的实施例使用一个检查加载操作到检测这些冲突。
本发明的一个替换实施例可以使用估计机制来检查在超前加载和存储之间的冲突。该估计方法减小了为搜索冲突所必需的时间和硬件。例如,一个这样的机制比较存储器地址位的一个子集来预计是否发生一个冲突。在下面的讨论中,“冲突”是指当使用一个全地址比较时重叠的、或者当使用一个估计地址比较时可能重叠的存储器地址。类似地,对“重叠”存储器地址的引用包含可以仅仅可能重叠的存储器地址。
根据本发明,一个检查加载操作读取一个超前加载地址表(ALAT)来确定一个相关的超前加载操作是否与一个插入的存储操作冲突。如果没有指示冲突,则该加载检查操作被当做一个空操作(NOP)。如果指示了一个冲突,则该检查加载操作被转换到一个加载,而且执行检查加载操作的处理器的指令流水线被刷新,并且被重新引导到紧接着该检查加载操作之后的指令处。对于本发明的一个实施例,当指示了一个冲突时,高速缓存控制逻辑转换该检查加载操作到一个加载操作。
图1是适于实现本发明的一个计算机系统100的一个实施例的一个框图。系统100包含一个处理器104和一个存储器108,它们一般通过系统逻辑(没有显示)连接。处理器104的资源被组织成一条具有一个前端110和一个后端120的指令执行流水线。前端110取出指令并且把它们发布到在后端120中的资源用于执行。
前端110的公开实施例包含一个取指令单元114和一个解码器或者分布单元118。取指令单元114包含电路以从各种存储器结构、例如存储器108或者一个指令高速缓存(没有显示)中检索指令,并且把它们提供到处理器104的其它资源。取指令单元114一般还包含转移预测资源来预期控制流变化,以及一个指令高速缓存来存储指令用于处理。取出的指令被提供到分布单元118,其包含电路来引导它们到在后端120中的适当资源用于执行。
对于本发明的一个实施例,处理器104在处理器时钟的每一个周期上取出并且发布多个指令。同时发布到后端120的指令被称为一个发布组。一个发布组中的指令一起沿着指令执行流水线向下进行。
对于处理器104的公开实施例,后端120包含一个寄存器堆130、执行模块140、一个主要高速缓存150、和一个超前加载地址表(ALAT)160。一个记分板134与寄存器堆130相关联以跟踪在寄存器堆130入口(“寄存器”)中的数据可用性。执行模块140一般包含不同的执行单元用于不同类型的指令。例如,执行模块140可以包含一个或多个整数(IEU)、存储(MU)、浮点(FPU)、和转移(BRU)执行单元分别来处理整数、加载/存储、浮点、和转移操作。
处理器104的公开实施例还包含一个例外/确认单元(XPN)170、一个第二级的高速缓存180、和一个总线单元190。总线单元190控制在处理器104和诸如存储器108和如果存在而不在芯片上的高速缓存等不在芯片上的资源之间的通信。XPN 170监控在前端110和后端120中的各种资源以确定指令到达该指令执行流水线结尾时、哪些指令应当被收回。尤其是,XPN 170为例外条件(“例外”)监控这些资源,并且因此调整通过处理器104的指令流。对于本发明的一个实施例,XPN 170监控ALAT 160以确定一个检查加载指令是否失败,并且当检测到一个失败的检查加载指令时调整处理器104的操作。
处理器104的实施例可以包含第三级和更高级的高速缓存(没有显示)。例如,一个第三级高速缓存可以包含在和处理器104相同的芯片上或者在一个单独的芯片上。当一个第三级高速缓存在芯片外面提供时,总线单元190控制在处理器104和该不在芯片上的高速缓存之间的通信。高级缓存150、180(加上任何更高级的高速缓存)和存储器108形成一个用于计算机系统的存储器分级体系以提供数据到后端120的资源。本发明不取决于存储器分级体系的详细结构。
发布到后端120的指令在这样的数据(操作数)上操作,这些数据从寄存器堆130中提供或者从该存储器分级体系的各个部件或者其它执行单元中旁路到执行模块140。寄存器堆130可以包含单独的寄存器堆用于整数和浮点数据。记分板134用来跟踪在寄存器堆130入口(“寄存器”)中的数据可用性。操作数数据分别通过各种类型的加载和存储操作被传输到这些寄存器和从这些寄存器中传输出去,并且因此更新记分板134。一个加载操作为在一个指定存储器地址处的数据搜索该存储器子系统,并且从其中可得到请求数据的、最靠近该处理器核心的分级结构的级中返回该数据到寄存器堆130。一个存储操作把数据从在堆130中的一个寄存器中写入到该存储器分级体系的一个或多个级中。
ALAT 160包含多个入口以跟踪由超前加载操作作为目标的数据的存储器地址。对于ALAT 160的一个实施例,能够设置每一个入口以指示一个超前加载的目标存储器地址、指定该目标存储器地址内容的寄存器(“目标寄存器”)、和该目标地址的一个状态。当检测到一个超前加载时,目标地址和目标寄存器的指示被保存在一个入口中,并且设置一个状态位来指示该目标地址/寄存器信息是有效的。ALAT160还包含一个监控单元164,以观察选定的加载和存储事务并且据此更新ALAT的入口。例如,如果由存储作为目标的一个地址重叠在ALAT160中的一个目标地址,则设置该状态位来指示该入口不再有效。对于本发明的一个实施例,更新在一个记分板单元中的相应位来指示由该超前加载返回的数据不是有效的。在超前加载和存储地址之间的冲突意味着由该超前加载返回的数据可能是旧的。一个检查加载指令触发对ALAT 160的一次读取以确定一个恢复操作是否是必要的。
图2是一个流程图,表示一种使用一个ALAT或者等效跟踪机制用于实现一个超前加载操作的方法200。在210执行一个超前加载,并且在220,让在该ALAT中的一个入口标识从中加载该数据的目标存储器地址。在230发布插入的指令,并且在240,监控电路依据选定的存储和加载操作更新ALAT。例如,由一个寄存器堆栈引擎进行的存储和稍后进行的加载操作不需要被监控。对于一个实施例,该监控电路将由存储引用的存储器地址与在ALAT中的存储器地址(或者部分存储器地址)进行比较。如果检测到一个匹配,则与匹配的存储器地址相关联的入口是无效的。如上所述,其它实施例可以使用一种“不完整匹配方案”,其仅仅比较某些地址位以标识可能的冲突。
一般在原有程序次序中、该加载操作最初位于的点处,即在被重调度到该未消除歧义的存储上面之前加载操作的位置处,执行检查操作250。该检查操作读取与由超前加载引用的存储器地址相关联的ALAT入口。如果在260处该入口是有效的,则由超前加载返回的结果被认为是有效的(非旧的),而且处理继续到270。如果在260处入口是无效的,则由该超前加载返回的结果被认为是“旧的”,即一个或多个相关存储操作可能已经在该存储器地址由超前加载访问之后更新了该存储器地址。在这种情况下,在280处执行一个恢复过程。本发明提供了一种用于有效地处理这样的失败检查加载的机制。
虽然方法200的操作被顺序地显示了,但是本发明不局限于公开的顺序。例如,在210处执行超前加载和在220处启动ALAT入口可以并行发生,或者ALAT入口可以在超前加载被执行之前启动。类似地,监控插入的指令和据此更新ALAT可以并行发生。通常,公开的方法允许某些被显示为连续的操作被重新排序或者并行执行,而且本发明不局限于所显示的特定次序。在本领域内具有这个公开的优点的技术人员将会意识到:特定顺序是什么要被观察。
一个处理器执行多个功能以从一个失败的加载检查操作中恢复。它检索正确数据、标识并且删除任何也许已使用了不正确的(旧的)数据的操作,并且调整该处理器控制以使用正确加载的数据重复选定操作。这里,“正确数据”是指由最近的。冲突存储操作写入到该存储器地址(或者部分存储器地址)中的数据。
对于本发明的一个实施例,加载检查被设计成对于其中相关超前加载不和一个未消除歧义的存储相冲突的情况,它能提供快速执行。例如,该加载检查可以不必导致跟踪逻辑、例如记分板134、把该目标数据被返回到的寄存器标记为不可用。这允许取决于目标数据的指令,使用由该超前加载返回的数据,与加载检查指令同时或者在该加载检查指令之后执行。对于示例代码序列,CHECK LOAD和ADD指令可以被并行执行。
图3是一个流程图,表示一种根据本发明,从一个检查加载操作中恢复的方法300的一个实施例,其中该检查加载操作检测在一个超前加载和一个相关的、未消除歧义的存储之间的一个(可能的)冲突(“失败的加载检查”)。如果在310没有检测到冲突,则在320处该加载检查被当做一个NOP,而且方法300退出。如果在310处检测到一个冲突,则在330处,该加载检查被转换到一个加载,以从存储系统中检索更新的数据。因为该加载检查操作被调度到任何可能更新由该超前加载作为目标的存储器地址的未消除歧义的存储操作之后,所以正确数据可以用于该转换了的加载检查。
即使该加载检查操作失败了,在和该加载检查指令同一个发布组中的某些指令也可以被收回。如果一个指令被允许更新该处理器的体系结构状态的话,则该指令被认为是收回。对于方法300的该公开实施例,在340处、以执行次序在失败的加载检查指令前面的指令被收回。
由加载检查操作在310处检测的旧数据可能由被调度到该加载检查操作之后的指令使用。如上所述,检查加载操作的一个实施例不导致该记分板标记它的目标寄存器为不可用的。这允许相关的指令继续用由该超前加载返回的数据继续进行。然而,这还意味着:如果该加载检查失败了,则应当取消这些在进行中的指令并且重新执行它们。本发明的其它实施例可以使用不同的机制来拖延相关指令的执行。
对于方法300,在350处通过刷新指令流水线来取消相关指令,并且在360处,重新引导该处理器到紧接着检查加载操作之后的指令。为了阻止这些指令使用在由检查加载操作返回的正确数据之前的旧数据,在370处,目标寄存器被标记为不可用的。对于本发明的一个实施例,与目标寄存器相关联的一个记分板位可以被设置以指示更新的数据还没有被返回。
当该更新的加载数据由该失败的检查加载操作产生的加载返回时,可以重置这个位。
图4表示一个根据本发明、用于处理失败加载检查指令的方法400的另一个实施例。方法400是在方法300上的一个变化,其中该加载检查在用于一个冲突的检查410之前,在404处推测性地运行一个加载(重新加载)操作。如果在410处没有检测到冲突,则在414处中断该重新加载。这可以通过,例如把该推测性加载转换为一个NOP,来进行。如果在410处检测到一个冲突,则方法400在440处收回选定指令、在450处刷新该指令流水线、在460处把该流水线重新引导到紧接着该失败加载检查的指令处、以及在470处设置该记分板位。
图5是一个流程图,表示一种根据本发明、用于从一个失败的加载检查操作中恢复的方法500的还有一个实施例。当取决于通过超前加载指令返回的数据的指令还被重调度到一个未消除歧义的存储指令之前时,可以使用方法500。如果没有产生插入的例外,则该相关的指令在该加载检查指令之前被执行,而且它们还在该加载检查之前被收回。如果该加载检查检测到一个冲突,则由相关指令使用的数据是陈旧的,而且它们的结果在该处理器体系结构状态上的任何作用都需要被解决。
对于本发明的一个实施例,一个编译器可能以这种方式前进相关指令,在提供它的同时在编译时间产生一个恢复例程或者“修正代码”。如果检查加载操作指示一个不匹配的话,则可以访问该恢复例程。恢复例程包含这样的指令,其用正确的数据值、例如由第二次加载返回的值,复位由超前加载操作作为目标的寄存器,并且使用正确的寄存器值重复任何相关指令。方法500实现了一个差错处理器例程来实施恢复。
对于方法500,在510处加载检查确定是否发生一个可能的冲突。如果在510处没有检测到冲突,则在520处该加载检查的加载部分被当做一个NOP。如果在510处检测到一个冲突,则在530处选定的指令被收回。该收回指令包含,例如以执行次序在该加载检查前面的加载检查发布组中的指令。在540处刷新该指令流水线,以删除任何可能直接或者间接取决于该旧数据的、在运行中的指令。然后处理器的控制被传递到一个错误处理例程,其完成恢复操作。
对于本发明的一个实施例,该错误处理例程是知道任何这样的指令的“修正代码”,其中这些指令直接或者间接取决于由超前的加载指令返回的数据。在560重新执行加载指令,并且在570处,使用由该重新执行的加载提供的数据重新执行相关指令。当收回这些重新执行的指令时,处理器的体系结构状态是正确的,并且在580处再继续执行紧接着失败的加载检查指令之后的指令。
如关于图2指示的那样,方法300、400和500的各种操作可能以不同于那些指示的次序被实现。此外,方法300、400和500可能完全或者部分地通过一个微陷阱机制实现。参考XPN单元170的一个特定实施例可以更好地理解微陷阱机制。
图6是处理器104的一个框图,包含适于实现本发明的XPN 170的一个实施例详细情况。XPN 170的公开实施例具有一个分散结构,包含局部例外单元670(a)、670(b)、和670(c)(一般称为“局部例外单元”670),以减少信号传输时间和路由阻塞。本发明不需要一个用于XPN 170的分散结构,而且在时间和路由考虑允许的地方,如下所述的操作可以通过具有一个集中异常处理单元的XPN 170的一个实施例实现。
对图1和5公共的处理器104部分用相同的标记数字表示。例如在图6中指示了取指令单元114、指令分布单元118、执行模块140、高速缓存150和高速缓存180。执行模块140包含多个执行单元650(1)-150(n)(一般称为“执行单元650”),其表示,例如,一个或多个EU、FPU、MU、和BRU。执行单元650(1)-650(n)分别用收回端口660(1)-660(n)(一般称为收回端口660)终止。收回端口660是控制由指令的相应执行单元650处理的指令收回的分级锁存器。
对于例外处理操作,每一个收回端口660向XPN 170表示用于实现这样一个指令的处理器资源,其中该指令已经到达它的相应执行单元650的最后阶段。取决于用于每一个指令执行端口654的全局确认信号的状态,在一个发布组中的每一个指令从它的收回端口660被收回或者被忽略。
对于XPN 170的该公开实施例,每一个局部例外单元670处理来自于靠近它的流水线资源(“局部资源”)的例外信号。例如,局部例外单元670(a)接收由取指令单元114和指令分布单元118产生的例外信号。类似地,局部例外单元670(c)接收由执行单元650、ALAT160、和高速缓存180产生的例外信号。局部例外单元670(b)接收由高速缓存150产生的例外信号。每一个局部例外单元670依据从它的当地资源接收的例外信号和在该发布组中的指令的相对次序,为一个发布组产生局部确认信号。来自不同例外单元的局部确认信号被组合以形成用于每一个执行端口660的全局确认信号。
确认信号取决于产生例外的指令、指令的相对次序、和产生例外的类型。例如,当一个加载检查指令在一个ALAT错误(加载检查失败)上产生一个例外时,在该发布组中的、在加载检查指令前面的所有指令和该加载检查指令本身被确认。在执行中的、紧接着加载检查指令之后的指令不被收回直到该例外(ALAT错误)被解决为止。因此,指令的相对次序确定了由局部例外单元670接收的哪个例外信号实施该局部确认信号。如果多个指令产生例外,则只有由以执行次序的第一个指令产生的例外被处理。如果产生例外的指令产生多于一个例外,则一次仅仅处理一个例外。因此,当一条指令产生多个例外时,这些例外被按优先次序列出以确定哪个例外首先被处理。
图7是一个框图,表示了用于图6中的XPN 170实施例的REG、EXE、DET、RET、等流水线阶段。公开的流水线阶段表示由局部例外单元670的各个块实现以通过一个微体系结构陷阱机制处理一条失败的加载检查指令。顶行表示在记分板134、ALAT 160和收回端口660处作为加载指令的操作,即经过该流水线阶段的超前加载、加载检查、等等。中间表示由一个局部例外单元670执行的操作。对于XPN 170的公开实施例,一个局部例外单元收集来自于其它局部例外单元的例外信号,确定一个最高优先级或者全局例外,并且产生一个适合于该全局例外的重新引导地址。只有这个单元才有的操作在图7的底端行中表示。
对于本发明的一个实施例,一个超前的加载指令在RET阶段、在记分板134中设置一个位来指示来自于指定存储器地址的数据在该目标寄存器中是否还不是可用的。对于本发明的一个实施例,相关的加载检查指令不调整这个位。这允许取决于目标数据的指令,使用在由加载检查确认之前、由该超前加载返回的数据继续进行。
在EXE阶段产生一个ALAT错误例外,并且该例外在DET阶段被传送到它的局部例外单元。通过连接ALAT到XPN单元170的一个附近的、即局部例外单元,有可能在单个时钟周期内完成信号传输。在DET阶段中间行中的块A、B、C、E和F表示当局部例外单元670(c)接收由加载检查指令或者在同一个发布组中的其它指令产生的ALAT错误例外信号和其它任何例外信号时,由它执行的操作。来自其它资源的例外可以通过局部例外单元670(a)、670(b)处理。
块A处理例外信号以便为每一个执行端口660产生一个局部确认信号。例如,与各种类型加载和存储指令相关联的资源包含记分板134、ALAT 160和MU 650(n)。局部例外单元670(c)把来自于这些资源的例外信号进行或OR运算,以确定该加载检查是否触发一个影响在执行端口660(n)处的确认信号的例外。局部例外单元670(c)为从中接收相关例外信号的、在该发布组中的任何其它指令做出一个类似的确定,而且局部例外单元670(a)、670(b)基于它们从它们的当地资源中接收的信号做出类似的确定。一个次序掩码把该例外信号从各个执行端口映射到发布组的指令,并且确定以执行次序、第一个产生一个例外的指令。
基于来自每一个局部例外单元670的当地资源的信号,局部例外单元670产生局部确认信号,并且在DET阶段中把该局部确认信号转送到每一个执行端口660。块(A)产生一个与这样一个指令相关联的局部例外信号,该指令是在块(A)监控的任何资源中、以执行次序第一个产生一个例外条件的指令。例如,如果一个加载检查指令触发一个ALAT错误例外,而且它是以执行次序第一个这样做的指令,则将产生用于执行端口660(n)的例外信号。块(H)组合该局部确认信号以提供一个全局确认信号,其指示当前在执行端口660(n)中的加载检查指令是否应当被收回或者忽略。对执行端口660(1)-660(n-1)做出类似的确定。
当相应的局部例外单元检测到一个例外时,块(B)产生一个被分配到该处理器资源的刷新信号。(多个)刷新信号用来清除还没有到达RET阶段的所有指令的流水线。例如,以执行次序紧接着该失败加载检查指令之后的指令被清除(刷新)了,而且该流水线被重新引导到一个异常处理程序(方法500)或者重放指令(方法300,00)。
如果由单个指令产生多个例外,则在DET阶段中,在决(E)中把这些例外按优先次序列出并且在块(F)中进行编码。该编码的、按优先次序列出的信号与表征该例外的信号一起被转送到中心例外单元。例如,块(C)设置位以指示该例外是否是一个体系结构陷阱、一个体系结构错误、一个微体系结构陷阱、或者一个微体系结构错误。这些位指示局部的、最高优先级例外的特性到中央例外单元。编码该例外信号减小了路由阻塞。
对于公开的实施例,块J表示在选定(协调)例外单元、例如在XPN 170的公开实施例中的局部例外单元670(a)中的一个信号收集点。来自局部例外单元的信号在RET阶段由块J收集,块J使用该信号来标识全局例外,并且重新引导该流水线到适当的异常处理程序或者重放地址。全局例外可以通过例如,来自可用次序信息的确定,来进行标识,其中该次序信息编码了对应于以执行次序、该发布组中的最早指令。对于XPN 170的公开实施例,重新引导地址在该加载检查指令被收回之后2个时钟周期就变得可用。
本发明的一个替换实施例可以在检查加载操作中包括一个转移以访问一个异常处理程序。例如,在该检查加载指令中提供的一个偏移可以用来指向用于一个失败检查加载的“修正代码”。对于这个实施例,如果该检查加载失败了,则该偏移设置变为一个转移目标地址。这个实施例减小了在实现一个典型异常处理程序中涉及的流水线刷新数量上的数量。
因此这里已经公开了一种用于处理失败加载检查指令的机制。当在一个相关的超前加载指令和一个相关的未消除歧义的存储指令之间检测到一个(可能的)冲突时,该加载检查指令被认为是失败的。当检测到一个冲突时该机制转换一条加载检查指令到一条加载指令,刷新选定指令,并且重新引导执行到一条指定的指令。该机制可以被实现为在一个例外/确认系统控制之下的一个微体系结构陷阱或者一个转移。对于本发明的一个实施例,该重新引导地址是紧接着加载检查指令之后的地址。对于本发明的另一个实施例,该重新引导地址是一个标识并且重新执行任何这样的指令的一个异常处理程序例程,其中这些指令取决于超前加载指令并且被调度到该未消除歧义的存储的前面。对于本发明的还有另一个实施例,推测性地、即在确定是否发生一个冲突之前执行。一个与该加载检查操作相关联的重新加载操作。对于本发明的还有一个实施例,检查加载包含一个转移操作,当检测到一个可能的冲突时转移到“修正”代码。
在处理器设计技术领域的专业人员利用这个公开的优点就会意识到:对公开实施例的变化和修改依然属于附加权利要求的范围之内。
Claims (19)
1.一种用于处理加载操作的方法,包含:
响应一第一加载指令,从在一个存储地址的存储器加载数据到一个寄存器;
观察与在第一加载指令和一条加载检查指令之间执行的指令相关联的存储器访问;
响应于在该第一加载指令和该执行的指令之间观察到的一个冲突,更新一个加载跟踪表,以储存关于由该第一加载指令作为目标的存储器地址的状态信息;
响应于在该第一加载指令和该执行的指令之间观察到的一个冲突,更新记分板,以跟踪该寄存器的数据可用性;
响应于一个加载检查指令,检查一个加载跟踪表,以确定该存储器地址的一个状态;以及
如果该存储器地址的检查的状态指示把该加载检查指令转换成一条加载指令,则把该加载检查指令转换成一条加载指令。
2.如权利要求1所述的方法,进一步包含:如果该存储器地址的检查的状态指示执行一个恢复操作,则执行一个恢复操作。
3.如权利要求2所述的方法,其特征在于执行一个恢复操作进一步包含:
标识在包括收回了的加载检查指令的一个发布组中的一个或多个指令;
刷新紧接该加载检查指令之后的指令;以及
指示紧接该加载检查指令之后的一个第一指令的一个地址作为一个重新引导地址。
4.如权利要求1所述的方法,进一步包含:当该存储器地址的检查的状态指示在该加载检查指令处执行一个微体系结构陷阱时,在该加载检查指令处执行一个微体系结构陷阱。
5.如权利要求4所述的方法,其特征在于:执行该微体系结构陷阱包含:
收回在一个当前发布组中、在该加载检查指令前面以及包含该加载检查指令的指令;
忽略任何紧接着该加载检查指令之后的运行中的指令。
6.如权利要求5所述的方法,其特征在于执行该微体系结构陷阱进一步包含:
在该记分板上设置一位以指示来自该存储器地址的数据仍不可用在该寄存器中;以及
重新引导指令执行紧跟在该加载检查指令之后的一个第一指令。
7.如权利要求1所述的方法,进一步包含:转移到由该加载检查指令指示的一个错误处理程序。
8.如权利要求7所述的方法,其特征在于转移到该错误处理程序包含:
根据在该加载检查指令中指定的一个偏移确定该错误处理程序的一个地址;以及
跳转到该错误处理程序。
9.一个处理器,包含:
一个取指令单元,提供用于执行的指令;
一个存储超前加载地址表的第一存储设备,以存储用于由一条超前加载指令作为目标的一个存储器地址的状态信息;
一个存储记分板的第二存储设备,保持一个或多个寄存器的数据有用性的跟踪;
一个探听单元,以跟踪加载和存储操作并且更新该状态信息;
一个例外单元,当该状态信息指示触发一个微体系结构陷阱时,触发一个微体系结构陷阱。
10.如权利要求9所述的处理器,其特征在于:响应于一条加载检查指令读取该状态信息,并且当该状态信息指示加载检查指令失败了时,例外单元触发微体系结构陷阱。
11.如权利要求9所述的处理器,其特征在于:例外单元刷新所选择的指令,并且提供一个重新引导地址到该取指令单元。
12.如权利要求11所述的处理器,其特征在于:该重新引导地址指示以执行次序紧接着加载检查指令之后的第一条指令。
13.如权利要求12所述的处理器,其特征在于该重新引导地址指示在一个恢复例程中的一个第一指令。
14.一个计算机系统,包含:
一个存储了一段计算机程序的存储器,其中该计算机程序包含一条超前加载指令和一条加载检查指令;和
一个处理器,执行保存在该存储器中的指令,该处理器包含:
一个取指令单元,从该存储器中检索指令;
一个存储超前加载地址表的第一存储设备,跟踪有关由该超前加载指令作为目标的数据的状态信息;
一个存储记分板的第二存储设备,保持一个或多个寄存器的数据有用性的跟踪;
一个探听单元,响应于加载和存储操作更新该状态信息;以及
一个例外单元,依据监控的例外信号有选择地收回指令,当该加载检查指令触发一个超前加载地址表错误例外时,该例外单元刷新一条或多条指令,并且重新引导该取指令单元到一个指定地址。
15.如权利要求14所述的计算机系统,其特征在于:当该加载检查指令触发一个超前加载地址表错误例外时,例外单元触发该加载检查指令到一条加载指令的转换。
16.如权利要求15所述的计算机系统,进一步包含一个高速缓存控制器。
17.如权利要求16所述的计算机系统,其特征在于该高速缓存控制器响应来自该例外单元的一个信号时转换该加载检查指令到一个加载指令。
18.如权利要求14所述的计算机系统,其特征在于:该存储器包含一个错误处理程序,而且当加载检查指令触发一个超前加载地址表错误例外时,该例外单元重新引导该取指令单元到错误处理程序。
19.如权利要求18所述的计算机系统,其特征在于该加载检查指令包含指示与该错误处理程序相关联的一个存储器地址和当该加载检查指令触发一个超前加载地址表错误例外时该例外单元转移到该指示的存储器地址。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US09/471,308 US6598156B1 (en) | 1999-12-23 | 1999-12-23 | Mechanism for handling failing load check instructions |
| US09/471,308 | 1999-12-23 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN1434939A CN1434939A (zh) | 2003-08-06 |
| CN1248108C true CN1248108C (zh) | 2006-03-29 |
Family
ID=23871107
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CNB008189935A Expired - Fee Related CN1248108C (zh) | 1999-12-23 | 2000-11-20 | 用于处理失败的加载检查指令的机制 |
Country Status (8)
| Country | Link |
|---|---|
| US (1) | US6598156B1 (zh) |
| KR (1) | KR100491761B1 (zh) |
| CN (1) | CN1248108C (zh) |
| AU (1) | AU1790701A (zh) |
| DE (1) | DE10085333T1 (zh) |
| GB (1) | GB2375201B (zh) |
| TW (1) | TW480402B (zh) |
| WO (1) | WO2001048598A1 (zh) |
Families Citing this family (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6681317B1 (en) * | 2000-09-29 | 2004-01-20 | Intel Corporation | Method and apparatus to provide advanced load ordering |
| US6918030B2 (en) * | 2002-01-10 | 2005-07-12 | International Business Machines Corporation | Microprocessor for executing speculative load instructions with retry of speculative load instruction without calling any recovery procedures |
| US7260217B1 (en) | 2002-03-01 | 2007-08-21 | Cavium Networks, Inc. | Speculative execution for data ciphering operations |
| US7062636B2 (en) * | 2002-09-19 | 2006-06-13 | Intel Corporation | Ordering scheme with architectural operation decomposed into result producing speculative micro-operation and exception producing architectural micro-operation |
| US7496732B2 (en) * | 2003-12-17 | 2009-02-24 | Intel Corporation | Method and apparatus for results speculation under run-ahead execution |
| 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 |
| US20060129764A1 (en) * | 2004-12-09 | 2006-06-15 | International Business Machines Corporation | Methods and apparatus for storing a command |
| US7526583B2 (en) * | 2005-06-23 | 2009-04-28 | International Business Machines Corporation | Method and apparatus to launch write queue read data in a microprocessor recovery unit |
| US8082423B2 (en) * | 2005-08-11 | 2011-12-20 | International Business Machines Corporation | Generating a flush vector from a first execution unit directly to every other execution unit of a plurality of execution units in order to block all register updates |
| US7953960B2 (en) * | 2005-10-18 | 2011-05-31 | International Business Machines Corporation | Method and apparatus for delaying a load miss flush until issuing the dependent instruction |
| US20070288725A1 (en) * | 2006-06-07 | 2007-12-13 | Luick David A | A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism |
| US7461238B2 (en) * | 2006-06-07 | 2008-12-02 | International Business Machines Corporation | Simple load and store disambiguation and scheduling at predecode |
| US8542381B2 (en) * | 2008-03-05 | 2013-09-24 | Ricoh Production Print Solutions LLC | Purging of print jobs from a print data path |
| US20130326200A1 (en) * | 2011-02-11 | 2013-12-05 | Freescale Semiconductor, Inc. | Integrated circuit devices and methods for scheduling and executing a restricted load operation |
| CN102830953B (zh) * | 2012-08-02 | 2017-08-25 | 中兴通讯股份有限公司 | 指令处理方法及网络处理器指令处理装置 |
| WO2016097791A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
Family Cites Families (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5404484A (en) | 1992-09-16 | 1995-04-04 | Hewlett-Packard Company | Cache system for reducing memory latency times |
| US5812810A (en) | 1994-07-01 | 1998-09-22 | Digital Equipment Corporation | Instruction coding to support parallel execution of programs |
| US5625835A (en) * | 1995-05-10 | 1997-04-29 | International Business Machines Corporation | Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor |
| US5903749A (en) | 1996-07-02 | 1999-05-11 | Institute For The Development Of Emerging Architecture, L.L.C. | Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs |
| US5870579A (en) | 1996-11-18 | 1999-02-09 | Advanced Micro Devices, Inc. | Reorder buffer including a circuit for selecting a designated mask corresponding to an instruction that results in an exception |
| WO1999019795A1 (en) | 1997-10-13 | 1999-04-22 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for optimizing execution of load and store instructions |
-
1999
- 1999-12-23 US US09/471,308 patent/US6598156B1/en not_active Expired - Lifetime
-
2000
- 2000-11-20 WO PCT/US2000/032087 patent/WO2001048598A1/en not_active Ceased
- 2000-11-20 DE DE10085333T patent/DE10085333T1/de not_active Ceased
- 2000-11-20 KR KR10-2002-7008127A patent/KR100491761B1/ko not_active Expired - Fee Related
- 2000-11-20 AU AU17907/01A patent/AU1790701A/en not_active Abandoned
- 2000-11-20 GB GB0215183A patent/GB2375201B/en not_active Expired - Fee Related
- 2000-11-20 CN CNB008189935A patent/CN1248108C/zh not_active Expired - Fee Related
- 2000-12-22 TW TW089127735A patent/TW480402B/zh not_active IP Right Cessation
Also Published As
| Publication number | Publication date |
|---|---|
| DE10085333T1 (de) | 2002-11-21 |
| US6598156B1 (en) | 2003-07-22 |
| GB0215183D0 (en) | 2002-08-07 |
| HK1047991A1 (zh) | 2003-03-14 |
| CN1434939A (zh) | 2003-08-06 |
| WO2001048598A1 (en) | 2001-07-05 |
| GB2375201A (en) | 2002-11-06 |
| TW480402B (en) | 2002-03-21 |
| GB2375201B (en) | 2004-08-25 |
| KR20020091064A (ko) | 2002-12-05 |
| AU1790701A (en) | 2001-07-09 |
| KR100491761B1 (ko) | 2005-05-27 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN1095117C (zh) | 存数指令结果的前送的方法和处理器 | |
| US6912648B2 (en) | Stick and spoke replay with selectable delays | |
| CN1248108C (zh) | 用于处理失败的加载检查指令的机制 | |
| Kim et al. | Warped-preexecution: A GPU pre-execution approach for improving latency hiding | |
| CN1109967C (zh) | 多线程处理器中指令和关联读取请求的后台完成 | |
| JP4578042B2 (ja) | 接近して結合される多重プロセッサのための高速マルチスレッディング | |
| US6691220B1 (en) | Multiprocessor speculation mechanism via a barrier speculation flag | |
| US6907520B2 (en) | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor | |
| US6748518B1 (en) | Multi-level multiprocessor speculation mechanism | |
| CN100403257C (zh) | 能够隐式地多线程执行单线程程序的装置、方法和系统 | |
| US6963967B1 (en) | System and method for enabling weak consistent storage advantage to a firmly consistent storage architecture | |
| US20040128448A1 (en) | Apparatus for memory communication during runahead execution | |
| US7496732B2 (en) | Method and apparatus for results speculation under run-ahead execution | |
| US20070083735A1 (en) | Hierarchical processor | |
| US20070288736A1 (en) | Local and Global Branch Prediction Information Storage | |
| Gandhi et al. | Scalable load and store processing in latency tolerant processors | |
| JP2002508564A (ja) | 実行パイプラインの外部に複数のプログラム・カウンタとトレース・バッファを有するプロセッサ | |
| WO2013050901A1 (en) | Maintaining operand liveness information in a computer system | |
| EP2035919A1 (en) | A fast and inexpensive store-load conflict scheduling and forwarding mechanism | |
| TW201037517A (en) | Memory model for hardware attributes within a transactional memory system | |
| US7650485B1 (en) | Structure and method for achieving very large lookahead instruction window via non-sequential instruction fetch and issue | |
| US20180137056A1 (en) | Processor with instruction cache that performs zero clock retires | |
| WO2007027671A2 (en) | Scheduling mechanism of a hierarchical processor including multiple parallel clusters | |
| CN1726460A (zh) | 提高控制推测的性能的机制 | |
| US20080162908A1 (en) | structure for early conditional branch resolution |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| C10 | Entry into substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| C14 | Grant of patent or utility model | ||
| GR01 | Patent grant | ||
| REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1056242 Country of ref document: HK |
|
| C17 | Cessation of patent right | ||
| CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060329 Termination date: 20111120 |