CN103620555A - 抑制不正确的推测性执行路径上的控制转移指令 - Google Patents
抑制不正确的推测性执行路径上的控制转移指令 Download PDFInfo
- Publication number
- CN103620555A CN103620555A CN201280031310.9A CN201280031310A CN103620555A CN 103620555 A CN103620555 A CN 103620555A CN 201280031310 A CN201280031310 A CN 201280031310A CN 103620555 A CN103620555 A CN 103620555A
- Authority
- CN
- China
- Prior art keywords
- misprediction
- cti
- instruction
- processor
- indication
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012546 transfer Methods 0.000 title claims abstract description 17
- 230000001629 suppression Effects 0.000 title 1
- 238000000034 method Methods 0.000 claims abstract description 39
- 238000003860 storage Methods 0.000 claims description 48
- 238000011010 flushing procedure Methods 0.000 claims description 16
- 230000004044 response Effects 0.000 claims description 15
- 230000001915 proofreading effect Effects 0.000 claims description 4
- 230000007246 mechanism Effects 0.000 abstract description 5
- 230000015654 memory Effects 0.000 description 26
- 230000008569 process Effects 0.000 description 23
- 230000008878 coupling Effects 0.000 description 16
- 238000010168 coupling process Methods 0.000 description 16
- 238000005859 coupling reaction Methods 0.000 description 16
- 230000002093 peripheral effect Effects 0.000 description 15
- 238000012545 processing Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 10
- 230000005055 memory storage Effects 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 238000013519 translation Methods 0.000 description 6
- 238000007667 floating Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000006855 networking Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000013478 data encryption standard Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000005520 cutting process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 241000209507 Camellia Species 0.000 description 1
- 101100226370 Drosophila pseudoobscura pseudoobscura exu1 gene Proteins 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 235000018597 common camellia Nutrition 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000005242 forging Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000013011 mating Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
Abstract
公开涉及被配置为执行控制转移指令(CTI)的处理器的技术。在一些实施例中,处理器包含抑制推测性执行路径上的误预测的较年轻的CTI的机制。该机制允许分支预测器保持其保真度,并消除管线的伪造的冲洗。在一个实施例中,误预测位被用于指示出现了误预测,并且,比误预测CTI年轻的CTI被抑制。在一些实施例中,处理器可被配置为执行来自多个线程的指令流。各线程可包含误预测指示。各线程中的CTI可关于线程的其它CTI以程序次序执行,而CTI以外的指令可按程序乱序执行。
Description
技术领域
本公开涉及处理器,更特别地,涉及防止乱序处理器中的分支预测器出错。
背景技术
当代的超标量微处理器通过并行地按程序乱序执行多个指令实现较高的性能。在程序中高度盛行的诸如分支、调用和返回的控制转移指令(CTI)由于要在控制转移指令之后执行的指令在控制转移指令被执行之前是未知的而可导致流水线微处理器停顿。这些停顿可导致性能的显著损失。
当代的微处理器使用分支预测技术以推测性地取回和执行超出CTI的指令。分支预测包含预测CTI的方向和目标。如果CTI由于方向预测或目标预测不正确而被误预测,那么在CTI以外推测性地取回的所有指令被丢弃(冲洗),并且,由指令取回单元(IFU)从正确的路径取回新的指令。并且,在检测到误预测CTI时,分支预测器一般通过使用CTI的实际结果被更新以提高其将来的预测精度。在一些微处理器中,通过每个CTI的结果更新分支预测器。
如果CTI被误预测,那么在CTI以外推测性地取回的指令可进一步是比误预测CTI年轻的CTI指令。在冲洗超出CTI的推测性指令之前,处理器必须执行比CTI旧的指令。当等待执行这种较旧的指令时,来自误预测的推测性执行路径的较年轻的CTI如果被允许更新分支预测器则会使分支预测器精度劣化。这种较年轻的CTI也可导致伪造的指令冲洗和/或对于IFU不正确的更新。
当前的微处理器一般实现芯片级多线程(CT)以提高性能。在CMT处理器中,多个软件线程在处理器中同时活动,并且,每个活动线程具有专用的硬件资源以存储其状态。来自多个软件线程的指令的有效执行需要预测来自不同的线程CTI的能力。在CMT处理器上执行多个线程可导致来自不同线程的CTI的执行被交织。
发明内容
本公开涉及被配置为执行控制转移指令(CTI)的处理器。在一些实施例中,公开了抑制误预测的推测性执行路径上的较年轻的CTI的结果的机制。该机制允许分支预测器保持其保真度,消除管线的伪造的冲洗,并防止不正确的指令取回单元(IFU)更新。
在一些实施例中,该机制在存在多个处理器线程的情况下工作,并且确保在来自给定线程上的推测性CTI的结果被抑制时,其它线程上的非推测性CTI继续正常执行并且能够更新分支预测器。并且,其它线程上的误预测的非推测性CTI可继续冲洗与该线程对应的管线阶段,并使IFU重定向以取回这些线程的校正的路径上的指令。
在一个示例性实施例中,当出现CTI误预测时,设定指示误预测的位。CTI关于执行线程中的其它CTI按次序被执行。已知当设定了误预测位时出现的CTI要处于不正确的执行路径上,原因是它们比导致设定误预测位的CTI年轻。不允许这种较年轻的CTI导致管线冲洗,更新IFU或者更新分支预测器。当执行线程中的所有较旧的指令(相对于导致设定误预测位的CTI)完成执行或者出现陷阱或例外时,误预测位被清除,并且,从管线冲洗所有较年轻的指令。在一些实施例中,误预测位可抑制误预测的执行路径上的CTI的结果(例如,分支预测器更新、管线冲洗和IFU更新)。
附图说明
图1是多核处理器的一个实施例的框图。
图2是处理器核的一个实施例的框图。
图3是包含分支单元的处理器核的一个实施例的框图。
图4是分支单元的一个实施例的框图。
图5是示出设定和清除误预测指示的一个实施例的流程图。
图6是示出分支单元操作的一个实施例的流程图。
图7是示出示例性系统实施例的框图。
具体实施方式
本说明书包括提到“一个实施例”或“实施例”。短语“在一个实施例中”或“在实施例中”的出现未必指的是同一实施例。可通过与本公开一致的任何适当的方式组合特定的特征、结构或特性。
术语。以下的段落提供在本公开(包含所附的权利要求)中出现的术语的定义和/或语境。
“包含”。该术语是开放性的。如在所附的权利要求中使用的那样,该术语不排除附加的结构或步骤。考虑记载“包含一个或更多个处理器单元的装置……”的权利要求。这种权利要求不排除装置包含附加的部件(例如,网络接口单元、图形电路等)。
“被配置为”。各种单元、电路或其它部件可被描述或要求为“被配置为”执行任务或多项任务。在这种语境中,“被配置为”被用于通过指示单元/电路/部件包含在操作期间执行这些任务或多项任务的结构(例如,电路)隐含结构。因而,即使当特定的单元/电路/部件当前不操作(例如,没有开)时,也可以说单元/电路/部件被配置为执行任务。与“被配置为”语句一起使用的单元/电路/部件包含硬件-例如,存储实现操作的可执行程序指令的电路、存储器等。记载单元/电路/部件“被配置为”执行一项或更多项任务明显不是要对于该单元/电路/部件触发35U.S.C.§112第6段。
“第一”、“第二”等。如这里使用的那样,这些术语被用作它们的后面的名词的标签,不意味着任何类型的排序(例如,空间、时间、逻辑等)。例如,在具有两个分支预测单元的处理器中,术语“第一”和“第二”仅是用于指的是这些单元中的任一个的标签。
“基于”。如这里使用的那样,该术语被用于描述影响确定的一个或更多个因素。该术语不排除可影响确定的附加的因素。即,确定可单独地基于这些因素,或者至少部分地基于这些因素。考虑短语“基于B确定A”。虽然B可以是影响A的确定的因素,但这种短语不排除A的确定还基于C。在其它的情况下,A可单独地基于B被确定。
“执行”。该术语具有其在本领域中通常接受的意思,并且包含可由处理器执行以实现指令的完成的所有动作,包含取回、解码、发出以及实际计算指令的结果。当功能单元在这里被描述为“执行”特定的指令时,该术语指的是计算特定指令的结果(例如,计算两个寄存器的内容的和)。
“线程”。该术语具有其在本领域中通常接受的意思,并且包含可由处理器执行的程序内的一组指令。例如,术语“线程”可指的是作为“分岔(fork)”或其它类似的操作的结果在处理器上执行的一组指令。在这里描述为在线程“中”的指令是线程的一组指令的一部分。
“同时存储/同时间存储”。如这里使用的那样,这些短语指的是在一些重叠的时段中存储项目(例如,用于不同线程的误预测信息)。注意,这些短语未必意味着两个同时存储的项目的存储同时开始或者两个项目被存储持续相同的时间长度。
引言
本公开描述与改善的分支单元有关的各种实施例。图1和图2给出可包含这种分支单元的示例性多线程处理器的概要。图3和图4给出用于抑制不正确的推测性执行路径上的CTI的处理器元件的示例性实施例。图5和图6分别给出用于设定误预测指示和抑制不正确的推测性执行路径上的CTI的示例性方法。图7给出可使用这种处理器的计算机系统的概要。
多线程处理器的一般概要
现在转到图1,表示示出处理器10的一个实施例的框图。在某些实施例中,处理器10可以是多线程的。在示出的实施例中,处理器10包含也表示为“核0”~“核n”的数个处理器核100a~n。如这里使用的那样,术语处理器可指的是具有单个处理器核的装置或包含两个或更多个处理器核的装置。处理器10的各种实施例可包含不同数量的核100,诸如8个、16个或任何其它适当的数量。核100中的每一个与相应的L2高速缓存105a~n耦合,该相应的L2高速缓存105a~n又通过横条(crossbar)110与L3高速缓存120耦合。以集体或个别的方式,核100a~n和L2高速缓存105a~n分别统称为核100和L2高速缓存105。
通过横条110和L3高速缓存120,核100可与可在位于处理器10外面的各种装置耦合。在示出的实施例中,一个或更多个存储器接口130可被配置为与系统存储器(未示出)的一个或更多个群组(bank)耦合。一个或更多个相干处理器接口140可被配置为耦合处理器10与其它的处理器(例如,在使用处理器10的多个单元的多处理器环境中)。另外,系统互连125耦合核100与一个或更多个外设接口150和网络接口160。如以下更详细地描述的那样,这些接口可被配置为耦合处理器10与各种外设装置和网络。
核100可被配置为根据特定的指令集结构(ISA)执行指令并处理数据。在一个实施例中,例如,核100可被配置为实现ISA的某个版本,诸如V9、UltraSPARC Architecture2005、UltraSPARC Architecture2007或UltraSPARC Architecture2009。但是,在其它的实施例中,可以设想,例如,可以使用任何希望的ISA,诸如x86(32位或64位版本)、或
在示出的实施例中,核100中的每一个可被配置为相互独立地操作,使得所有核100可并行(即,同时)执行。另外,如以下结合图2的描述描述的那样,在一些实施例中,核100中的每一个可被配置为同时执行多个线程,这里,给定的线程可包含可与另一线程独立地执行指令的一组指令。(例如,诸如应用的单个软件处理可包含可对于被调度由操作系统执行的一个或更多个线程)。这种核100也可被称为多线程(MT)核。在一个实施例中,核100中的每一个可被配置为同时执行来自可变数量的线程的指令,高达8个同时执行的线程。在16核实现中,处理器10可由此同时执行高达128个线程。但在其它的实施例中,设想可提供其它数量的核100,并且,核100可同时处理不同数量的线程。
另外,如下面更详细地描述的那样,在一些实施例中,核100中的每一个可被配置为以程序乱序执行某些指令,这在这里也可被称为乱序执行,或者简称为OOO。作为乱序执行的例子,对于特定的线程,可存在在程序次序中处于给定指令的后面又不依赖于给定指令的指令。如果给定指令的执行出于一些原因(例如,由于高速缓存未命中)被延迟,那么后面的指令可在给定的指令完成之前执行,这可提高执行线程的总体性能。
如图1所示,在一个实施例中,每个核100可具有专用的相应的L2高速缓存105。在一个实施例中,L2高速缓存105可被配置为完全包含第一级高速缓存状态(例如,核100内的指令和数据高速缓存)的集相联回写高速缓存。为了保持与第一级高速缓存的相干性,L2高速缓存105的实施例可实现保持第一级高速缓存标签的虚拟复制的反转目录。L2高速缓存105可实现相干协议(例如,MESI协议)以保持与处理器10内的其它高速缓存的相干性。在一个实施例中,L2高速缓存105可实施执行的全存储顺序(TSO)模型,其中,来自同一线程的所有存储指令必须按程序次序完成。
在各种实施例中,L2高速缓存105可包含被配置为支持高速缓存功能和性能的各种结构。例如,L2高速缓存105可包含被配置为存储未命中L2的请求的未命中缓冲器、被配置为暂时存储从L3高速缓存120返回的数据的填充缓冲器、被配置为暂时存储脏的逐出数据和窥探复录数据的回写缓冲器和/或被配置为存储从L3高速缓存120接收的窥探请求的窥探缓冲器。在一个实施例中,L2高速缓存105可实现可尝试分析L2未命中行为并相应地产生对于L3高速缓存120的预取回请求的基于历史的预取回器。
横条110可被配置为管理L2高速缓存105与共享的L3高速缓存120之间的数据流动。在一个实施例中,横条110可包含允许任何L2高速缓存105访问L3高速缓存120的任何群组并且相反地允许数据从任何L3群组返回到任何L2高速缓存105的逻辑(例如,诸如多路复用器或开关结构)。即,横条110可被配置为允许广义的点对点通信的M到N横条。但是,在其它的实施例中,可在L2高速缓存105与L3高速缓存120之间使用其它的互连方案。例如,可以利用网、环或其它适当的拓扑结构。
横条110可被配置为同时处理从L2高速缓存105到L3高速缓存120的数据请求以及从L3高速缓存120到L2高速缓存105的数据响应。在一些实施例中,横条110可包含用于将数据请求和/或响应排队的逻辑,使得请求和响应在等待服务的同时不会阻挡其它的活动。另外,在一个实施例中,横条110可被配置为仲裁当多个L2高速缓存105尝试访问L3高速缓存120的单个群组时或者在相反的过程中可能出现的冲突。
L3高速缓存120可被配置为高速缓存供核100使用的指令和数据。在示出的实施例中,L3高速缓存120可被组织成可分别被独立地寻址的8个单独寻址的群组,使得在不存在冲突的情况下,各群组可同时向各L2高速缓存105返回数据。在一些实施例中,可通过使用集相联或直接映射技术实现各单个群组。例如,在一个实施例中,L3高速缓存120可以是8兆字节(MB)高速缓存,这里,每个1MB群组是具有16字节线尺寸的16路集相联。L3高速缓存120在一些实施例中可实现为回写高速缓存,在该回写高速缓存中,在相应的高速缓存线被逐出之前写入的(脏的)数据不能向系统存储器写入。但是,可以设想,在其它的实施例中,可通过任何适当的方式配置L3高速缓存120。例如,可通过更多或更少的群组实现L3高速缓存120,或者,在不使用独立可访问的群组的方案中,它可使用其它的群组尺寸或高速缓存几何(例如,不同线尺寸或集相联的程度);它可使用直写而不是回写行为;并且,它可以或者可以不在写入未命中上分配。L3高速缓存120配置的其它变更是可能的并且被设想。
在一些实施例中,L3高速缓存120可实现从横条110到达的请求和要被发送到它的结果的队列。另外,在一些实施例中,L3高速缓存120可实现被配置为存储从存储器接口130到达的填充数据的填充缓冲器、被配置为存储要被写入到存储器的脏的逐出数据的回写缓冲器和/或被配置为存储不能处理为简单的高速缓存命中的L3高速缓存访问(例如,L3高速缓存未命中、与较旧的未命中匹配的高速缓存访问、诸如可要求多个高速缓存访问的原子操作的访问等)的未命中缓冲器。L3高速缓存120可以各种方式实现为单端口或多端口(即,能够处理多个同时的读取和/或写入访问)。在任意的情况下,L3高速缓存120可实现优先化各种高速缓存读取和写入请求器之中的高速缓存访问的仲裁逻辑。
不是所有的来自核100的外部访问都必须通过L3高速缓存120前进。在示出的实施例中,不可高速缓存的单元(NCU)122可被配置为处理来自核100的针对不可高速缓存的数据的请求,诸如针对来自后面关于外设接口150和网络接口160描述的I/O装置的数据。
存储器接口130可被配置为例如响应高速缓存填充请求和数据逐出而管理L3高速缓存120与系统存储器之间的数据传送。在一些实施例中,可实现存储器接口130的多个实例,使得每个实例被配置为控制系统存储器的相应的群组。存储器接口130可被配置为与任何适当类型的系统存储器对接,诸如完全缓冲双列直插存储器模块(FB-DIMM)、双倍数据速率或者双倍数据速率2、3或4同步动态随机访问存储器(DDR/DDR2/DDR3/DDR4SDRAM)或DRAM()。在一些实施例中,存储器接口130可被配置为支持与多种不同类型的系统存储器的对接。
在示出的实施例中,处理器110还可被配置为从系统存储器以外的源接收数据。系统互连125可被配置为提供与这些源的中心接口,以与核100、L2高速缓存105和/或L3高速缓存120交换数据。在一些实施例中,系统互连125可被配置为协调去往和来自系统存储器的数据的直接存储器访问(DMA)转移。例如,通过存储器接口130,系统互连125可在系统存储器与通过网络接口160附接的网络装置之间或者在系统存储器和通过外设接口150附接的外设装置之间协调DMA转移。
处理器10可被配置为用于具有处理器10的其它实例或其它兼容的处理器的多处理器环境中。在示出的实施例中,相干处理器接口140可被配置为以保留各种处理器之间的存储器相干性的方式(例如,根据掌控存储器事务的相干性协议)在不同的处理器之间实现高带宽、直接芯片到芯片通信。
外设接口150可被配置为在处理器10与一个或更多个外设装置之间协调数据转移。例如,这种外设装置可没有限制地包含存储装置(例如,基于磁或光学介质的存储装置,包含硬驱动、带驱动、CD驱动、DVD驱动等)、显示装置(例如,图形子系统)、多媒体装置(例如,音频处理子系统)或任何其它适当的类型的外设装置。在一个实施例中,外设接口150可实现标准外设接口的一个或更多个实例。例如,外设接口150的一个实施例可通过任意适当数量的I/O通道实现根据1.x、2.0、3.0代的外设部件接口快运(PCI ExpressTM或PCIe)或该标准的另一适当的变更。但是,可以设想,可以使用任何适当的接口标准或标准的组合。例如,在一些实施例中,除了PCI ExpressTM以外或者作为其替代,外设接口150可被配置为实现通用串行总线(USB)协议或IEEE1394()协议的某个版本。
网络接口160可被配置为在处理器10与通过网络与处理器10耦合的一个或更多个网络装置(例如,联网计算机系统或外设)之间协调数据转移。在一个实施例中,网络接口160可被配置为执行实现诸如千兆以太网或10-千兆以太网的以太网(IEEE802.3)联网标准所需要的数据处理。但是,可以设想,可以实现任何适当的联网标准,包含诸如40-千兆以太网和100-千兆以太网的即将来临的标准。在一些实施例中,网络接口160可被配置为实现其它类型的联网协议,诸如光纤通道、以太网上光纤通道(FCoE)、数据中心以太网、Infiniband和/或其它适当的联网协议。在一些实施例中,网络接口160可被配置为实现多个不同的网络接口端口。
动态多线程处理器核的概要
如上所述,在一个实施例中,核100中的每一个可被配置为用于多线程、乱序执行。具体而言,在一个实施例中,核100中的每一个可被配置为执行动态多线程。一般而言,在动态多线程下,核100的执行资源可被配置为有效地处理表现不同的性能特性和资源要求的各种类型的计算工作负载。这种工作负载可跨着强调单线程和多线程性能的不同组合的连续体改变。
在连续体的一端,计算工作负载可包含数个独立的任务,这里,与完成任何特定的任务的速度相比,在某些性能准则内完成任务总集(例如,每秒的任务的总数)在系统性能中是更显著的因素。例如,在某些类型的服务器或事务处理环境中,可存在大量的单个客户端或顾客请求(诸如网页请求或文件系统访问)。在本语境中,各单个请求可能不对处理器性能特别敏感。例如,相对于包含的处理器努力,请求可以是I/O束缚的而不是处理器束缚的-完成单个请求可要求主导完成请求所需要的总时间的I/O访问(例如,对于相对较慢的存储器、网络或存储装置)。因此,与强调仅仅一个或少量的同时的任务的性能的处理器相比,能够同时处理许多这种任务(例如,作为独立执行的线程)的处理器可在这种工作负载上表现更好的性能。
在连续体的另一端,计算工作负载可包含性能高度处理器敏感的各单个任务。例如,与I/O束缚相比,包含明显的数学分析和/或变换(例如,加密、图形处理、科学计算)的任务可能是更受处理器束缚的。这种任务可受益于强调单任务性能的处理器,例如通过指令级并行的推测性执行和开发。
动态多线程代表以灵活地适于沿上述的连续体改变的工作负载的方式分配处理器资源的尝试。在一个实施例中,核100可被配置为实现细粒多线程,其中,每个核可从与多个线程对应的指令池选择用于执行的指令,使得来自不同线程的指令可被调度为相邻地执行。例如,在使用细粒多线程的核100的流水线实施例中,来自不同线程的指令可占据相邻的管线阶段,使得来自几个线程的指令可在给定核处理循环中处于各种执行阶段中。通过使用细粒多线程,核100可被配置为有效地处理与单线程性能相比更多地依赖于同时线程处理的工作负载。
在一个实施例中,核100还可被配置为实现乱序处理、推测性执行、寄存器重命名和/或提高依赖于处理器的工作负载的性能的其它特征。并且,核100可被配置为在给定的时间活动执行的线程之中动态分配各种硬件资源,使得,如果正在执行更少的线程,那么各单个线程可能能够利用更多的可用硬件资源的共享。这可在执行更少的线程时导致单个线程性能增加,同时保持支持表现在性能上较少依赖于处理器的更多数量的线程的工作负载的灵活性。在各种实施例中,可在不同数量的线程之中动态分配的给定核100的资源可包含分支资源(例如,分支预测器结构)、加载/存储资源(例如,加载/存储缓冲器和队列)、指令完成资源(例如,重排序缓冲器结构和提交逻辑)、指令发出资源(例如,指令选择和调度结构)、寄存器重命名资源(例如,寄存器映射表)和/或存储器管理单元资源(例如,转换后备缓冲器、页行走(walk)资源)。
在图2中示出被配置为执行动态多线程的核100的一个实施例。在示出的实施例中,核100包括包含指令高速缓存205的指令取回单元(IFU)200。IFU200与存储器管理单元(MMU)270、L2接口265和陷阱逻辑单元(TLU)275耦合。IFU200另外与从选择单元210开始并通过解码单元215、重命名单元220、拾取单元225和发出单元230依次前进的指令处理管线耦合。发出单元230被耦合以向数个指令执行资源中的任一个的发出指令:执行单元0(EXU0)235、执行单元1(EXU1)240、包含数据高速缓存250的加载存储单元(LSU)245和/或浮点/图形单元(FGU)255。这此指令执行资源与工作寄存器文件260耦合。另外,LSU245与L2接口265和MMU270耦合。
在以下的讨论中,描述核100的示出的实施例的结构中的每一个的示例性实施例。但应注意,示出的资源的分割仅是可如何实现核100的一个例子。替代性的构成和变更是可能的并且被设想。
指令取回单元200可被配置为向核100的剩余部分提供指令以供执行。在一个实施例中,IFU200可被配置为选择要取回的线程,对于所选择的线程从指令高速缓存205取回指令并且对于下游的处理缓冲它们、响应指令高速缓存未命中从L2高速缓存105请求数据、并且预测控制转移指令(例如,分支)的方向和目标。在一些实施例中,除了指令高速缓存205以外,IFU200可包含数个数据结构,诸如指令转换备用缓冲器(ITLB)、指令缓冲器和/或被配置为存储与线程选择和处理相关的状态的结构。
在一个实施例中,在核100的每个执行循环中,IFU200可被配置为选择将进入IFU处理管线的一个线程。线程选择可考虑各种因素和条件,一些是线程特有的,而其它的是IFU特有的。例如,某些指令高速缓存活动(例如,高速缓存填充)、ITLB活动或诊断活动可禁止线程选择,如果这些活动是在给定的执行循环中出现的话。另外,各单个线程可处于影响它们的选择合适性的特定就绪状态。例如,存针对其存在未解决的指令高速缓存未命中的线程可能不适于选择,直到该未命中被解决。在一些实施例中,适于参与线程选择的这些线程可通过优先级被分成多个组,例如,根据线程的状态或IFU管线处理线程的能力。在这些实施例中,可以使用多种级别的仲裁以执行线程选择:选择可首先以组优先级发生,然后是根据适当的仲裁算法(例如,最近最少取回算法)在所选择的组内。但应注意,可使用用于线程选择的任何适当的方案,包括比这里提到的方案复杂或简单的仲裁方案。
一旦选择了通过IFU200取回的线程,就可实际上对于所选择的线程取回指令。为了执行取回,在一个实施例中,IFU200可被配置为产生要供给到指令高速缓存205的取回地址。在各种实施例中,可根据与所选择的线程相关的程序计数器、预测的分支目标地址或通过一些其它的方式(例如,通过测试或诊断模式)供给的地址,来产生取回地址。产生的取回地址可然后被施加到指令高速缓存205,以确定是否存在高速缓存命中。
在一些实施例中,访问指令高速缓存205可包含执行取回地址转换(例如,在物理索引和/或标签的高速缓存的情况下)、访问高速缓存标签阵列和比较检索的高速缓存标签与请求的标签以确定高速缓存命中状态。如果存在高速缓存命中,那么IFU200可在缓冲器中存储检索的指令,以供指令管线的以后的阶段使用。如果存在高速缓存未命中,那么IFU200可协调从L2高速缓存105的未命中高速缓存数据的检索。在一些实施例中,IFU200还可被配置为在实际需要取回指令之前将指令预先取回到指令高速缓存205中。例如,在高速缓存未命中的情况下,假定以下的地址可能在最近的将来被取回,IFU200可被配置为针对请求的取回地址以及依次跟随请求的取回地址的地址来检索未命中数据。
在许多ISA中,指令执行根据指令地址依次前进(例如,由一个或更多个程序计数器反映)。但是,诸如分支、调用/返回指令或其它类型的指令的控制转移指令(CTI)可导致从当前的取回地址到非依次的地址的执行转移。如上所述,为了减少在确信地获知CTI的影响之前减少由等待招致的延迟,IFU200可被配置为预测CTI(或者,在一些实施例中,是对于ISA限定的CTI的子集)的方向和目标。在一个实施例中,IFU200可被配置为实现基于感知器的动态分支预测器,但是可以使用任何适当类型的分支预测器。
为了实现分支预测,IFU200在各种实施例中可实现各种控制和数据结构,诸如跟踪先前的分支历史的历史寄存器、反映预测的相对权重和强度的权重表和/或存储被预测为CTI的目标的取回地址的目标数据结构。并且,在一些实施例中,为了有利于分支预测,IFU200可进一步被配置为部分地解码(或者,预解码)取回的指令。当给定的线程被选择通过IFU200取回选择时,可以使用该给定线程的预测取回地址作为取回地址。当CTI实际被执行时(例如,如果CTI是条件指令,或者,如果CTI自身处于另一预测的CTI的路径中),预测的结果可被验证。如果预测不正确,那么沿预测路径的取回并发出的指令可被取消。
通过以上讨论的操作,IFU200可被配置为取回和保持来自一个或多个线程的、要被馈送到指令管线的剩余部分以供执行的指令的缓冲池。一般而言,选择单元210可被配置为选择和调度用于执行的线程。在一个实施例中,在核100的任意给定的执行循环期间,选择单元210可被配置为选择核100同时支持的最大数量的线程(例如,8个线程)中的高达一个就绪的线程,并且,可从所选择的线程选择最多两个指令供解码单元215解码,然而,在其它的实施例中可以使用不同数量的线程和指令。在各种实施例中,诸如分支误预测、不可用的指令或其它条件的不同条件可影响线程是否为选择单元210的选择准备好。为了确保线程选择的公平,选择单元210的一些实施例可在就绪的线程之中使用仲裁(例如,最近最少使用的算法)。
通过选择单元210选择的用于解码的特定的指令可经受解码单元215的解码限制;因此,在任意给定的循环中,可以选择比最大可能数量的指令少的指令。另外,在一些实施例中,选择单元210可被配置为向所选择的指令分配核100的某些执行资源,使得在它们被释放之前,不会出于另一指令的益处而使用所分配的资源。例如,选择单元210可对于重排序缓冲器、加载/存储缓冲器的条目或可在指令执行中利用的其它下游资源分配资源标签。
一般地,解码单元215可被配置为使由选择单元210选择的指令准备供进一步的处理。解码单元215可被配置为识别指令的选定的本质(例如,由其操作码规定)并确定在指令中编码的源和汇(即,目的地)寄存器,如果有的话。在一些实施例中,解码单元215可被配置为检测指令之中的某些依赖性,将结构寄存器再映射到平坦寄存器空间,并且/或者将某些复杂的指令转换成两个或更多个更简单的指令以供执行。另外,在一些实施例中,解码单元215可被配置为向随后调度的时隙分配指令。在一个实施例中,可以限定两个时隙0~1,这里,时隙0包含可在加载/存储单元245或执行单元235~240中执行的指令,而时隙1包含可在执行单元235~240、浮点/图形单元255中执行的指令,和任何分支指令。但是,在其它的实施例中,可以使用其它数量的时隙和其它类型的时隙分配,或者,可完全省略时隙。
寄存器重命名可有利于消除指令之间的某些依赖性(例如,读后写或“虚假”依赖性),这又可防止指令执行的不必要的串行化。在一个实施例中,重命名单元220可被配置为通过将由指令规定的逻辑(例如,结构)目的地寄存器映射到物理寄存器将其重命名,从而解决在处理中的虚假依赖性。在一些实施例中,重命名单元220可保持反映逻辑寄存器和它们映射到的物理寄存器之间的关系的映射表。
一旦被解码和重命名,指令就可准备好被调度以供执行。在示出的实施例中,拾取单元225可被配置为拾取准备好执行的指令并将拾取的指令发送到发出单元230。在一个实施例中,拾取单元225可被配置为保持存储数个解码和重命名的指令以及关于存储的指令的相对年龄和状态的信息的拾取队列。在各执行循环中,拾取单元225的本实施例可对于每个时隙拾取最多一个指令。例如,考虑指令依赖性和年龄信息,对于给定的时隙,拾取单元225可被配置为给定的时隙拾取准备好执行的最旧的指令。
在一些实施例中,拾取单元225可被配置为通过在推测性加载/存储指令(例如,在一些情况下,连同它们的依赖性指令)被拾取之后保持它们而支持加载/存储推测。这可有利于在加载/存储误推测的情况下重新播放指令。另外,在一些实施例中,例如,为了管理诸如某些加载/存储或长延时FGU指令的同步化的下游管线危险,拾取单元225可被配置为通过使用停顿(stall)有意地将“孔”插入管线中。
发出单元230可被配置为针对拾取的指令向各种执行单元提供指令源和数据。在一个实施例中,发出单元230可被配置为从适当的源读取源操作数,这些源操作数可根据管线的状态改变。例如,如果源操作数依赖于仍处于执行管线中的先前的指令,那么可直接从适当的执行单元结果总线绕过操作数。结果还可源自代表结构(例如,用户可见)以及非结构状态的寄存器文件。在示出的实施例中,核100包含可被配置为存储还没有提交给结构状态的指令结果(例如,整数结果、浮点结果和/或条件代码结果)并且可用作某些操作数的源的工作寄存器文件260。各种执行单元还可保持可发源操作数的结构整数、浮点和条件代码状态。
从发出单元230发出的指令可前进到示出的执行单元中的一个或更多个以供执行。在一个实施例中,EXU0235和EXU1240中的每一个可类似地或者同样地被配置为执行在实现的ISA中限定的某些整数类型的指令,诸如运算、逻辑和偏移指令。在示出的实施例中,EXU0235可被配置为执行从时隙0发出的整数指令,并且还可执行地址计算并用于由LSU245执行的加载/存储指令。EXU1240可被配置为执行从时隙1发出的整数指令以及分支指令。在一个实施例中,FGU指令和多循环整数指令可作为穿过EXU1240管线的时隙1指令被处理,虽然这些指令中的一些实际上可在其它功能单元中执行。
在一些实施例中,可在执行单元235~240内或附近物理实现结构和非结构寄存器文件。可以设想,在一些实施例中,核100可包含比两个多或少的执行单元,并且,执行单元可以或者可以不在功能上对称。并且,在一些实施例中,执行单元235~240可以不限于特定的发出时隙,或者可通过与刚刚描述的方式不同的方式被限定。
加载存储单元245可被配置为处理诸如整数和浮点加载和存储指令的数据存储器基准,以及其它类型的存储器基准指令。LSU245可包含数据高速缓存250以及被配置为检测数据高速缓存未命中并响应性地从L2高速缓存105请求数据的逻辑。在一个实施例中,数据高速缓存250可被配置为所有的存储不管是否命中数据高速缓存250都被写入到L2高速缓存105的集相联、直写高速缓存。如上所述,加载/存储指令的地址的实际计算可在整数执行单元中的一个内发生,但在其它的实施例中,LSU245可实现专用的地址产生逻辑。在一些实施例中,LSU245可实现被配置为预测和预取回可能在将来使用的数据数据的自适应、历史依赖硬件预取回器,以便增加在被需要时这种数据驻留于数据高速缓存250中的可能性。
在各种实施例中,LSU245可实现被配置为有利于存储器操作的各种结构。例如,LSU245可实现数据TLB以高速缓存虚拟数据地址转换,以及被配置为出于一致性窥探和依赖性检查的目的而存储被发出但还没有提交的加载和存储指令的加载和存储缓冲器。LSU245可包含被配置为存储例如由于高速缓存未命中还不能完成的未决的加载和存储的未命中缓冲器。在一个实施例中,LSU245可实现被配置为针对提交的存储而存储地址和数据信息的存储队列,以便有利于加载依赖性检查。LSU245还可包含被配置为支持原子加载存储指令、存储器有关例外检测和对于特殊用途寄存器(例如,控制寄存器)的读写访问的硬件。
浮点/图形单元255可被配置为执行并提供在实现的ISA中限定的某个浮点和图形取向指令的结果。例如,在一个实施例中,FGU255可实现符合IEEE754-1985浮点标准的单精度和双精度浮点运算指令,诸如加法、减法、乘法、除法和某些先验(transcendental)函数。并且,在一个实施例中,FGU255可实现由诸如VISTM2.0或VISTM3.0的Visual Instruction Set(VISTM)结构的某个版本限定的分割运算和图形取向指令。在一些实施例中,FGU255可实现融合和未融合浮点乘法-加法指令。另外,在一个实施例中,FGU255可实现诸如整数乘法、除法和总体计数指令的某些整数指令。根据FGU255的实现,可由软件陷阱并操作或模仿一些指令(例如,一些先验或扩展精度指令)或指令操作数或结果情景(例如,某些反常操作数或期望的结果)。
在一个实施例中,FGU255可实现用于浮点加法/乘法、除法/平方根和图形运算的单独的执行管线,而在其它的实施例中,可按不同的方式分割由FGU255实现的指令。在各种实施例中,根据指令类型,由FGU255实现的指令可被完全管线化(即,FGU255可能能够对于每个执行循环开始一个新的指令)、被部分管线化,或者可阻挡发出,直到完成。例如,在一个实施例中,浮点加法和乘法运算可被完全管线化,而浮点除法运算可阻挡其它的除法/平方根运算,直到完成。
FGU255的实施例还可被配置为实现硬件加密支持。例如,FGU255可包含被配置为支撑诸如先进加密标准(AES)、数据加密标准/三重数据加密标准(DES/3DES)、Kasumi块密码算法、和/或Camellia块密码算法的加密/解码运算的逻辑。FGU255还可包含实现诸如安全散列算法(SHA-1、SHA-256、SHA-384、SHA-512)或消息摘要5(MD5)的散列或检验和算法的逻辑。FGU255还可被配置为实现诸如模乘法、减法和取幂的模运算以及各种类型的Galois域运算。在一个实施例中,FGU255可被配置为对于模乘法利用浮点乘数阵列。在各种实施例中,FGU255可实现上述的算法中的几个以及没有具体描述的其它算法。
对于不同的实施例,可通过不同的方式调用由FGU255提供的各种密码和模运算。在一个实施例中,例如,可通过使用通过使用特殊寄存器或存储器映射寄存器限定的控制字队列,通过可间接地通过软件编码的离散的协处理器实现这些特征。在另一实施例中,可通过可允许软件直接执行这些操作的特定指令来增强ISA。
如上所述,指令和数据存储器访问可包含将虚拟地址转换成物理地址。在一个实施例中,这种转换可在页级的粒度上出现,这里,一定数量的地址位包含给定的地址页中的偏移,并且,剩余的地址位包含页号。例如,在使用4M页的实施例中,64位虚拟地址和40位物理地址的实施例中,22个地址位(与4MB的地址空间对应,并且一般是最低有效地址位)可构成页偏移。虚拟地址的剩余42个位可与该地址的虚拟页号对应,并且,物理地址的剩余的18个位可与该地址的物理页号对应。在这种实施例中,可通过将虚拟页号转换成特定的物理页号同时保持页偏移不被修改,而进行虚拟地址到物理地址的转换。
这种转换映射可存储于ITLB或DTLB中,以便在指令高速缓存205或数据高速缓存250的查找中迅速地转换虚拟地址。在没有在适当的TLB中发现给定虚拟页号的转换的情况下,存储器管理单元270可被配置为提供转换。在一个实施例中,MMU270可被配置为管理存储于系统存储器中的一个或更多个转换表并且响应诸如来自ITLB或DTLB未命中的地址转换的请求而遍历这些表(在一些实施例中可被分层组织)。(这种遍历也可被称为页表行走或硬件表行走)。在一些实施例中,如果MMU270不能导出有效的地址转换,例如,如果包含必要的页表的存储器页中的一个不驻留于物理存储器中(即,页未命中),那么MMU270可被配置为产生陷阱以允许存储器管理软件例程操作转换。可以设想,在各种实施例中,可使用任何希望的页尺寸。并且,在一些实施例中,可同时支持多个页尺寸。
如上所述,核100的示出的实施例中的几个功能单元可被配置为产生离核存储器请求。例如,IFU200和LSU245可分别响应它们各自的高速缓存未命中产生对于L2高速缓存105的访问请求。另外,MMU270可被配置为例如在执行页表行走时产生存储器请求。在示出的实施例中,L2接口265可被配置为代表可产生L2访问的各种功能单元提供向与特定的核100相关的L2高速缓存105中心化的接口。在一个实施例中,L2接口265可被配置为保持待决的L2请求的队列并在待决的请求之中仲裁以确定哪个或哪些请求可在给定的执行循环中被传输到L2高速缓存105。例如,L2接口265可实现最近最少使用或其它算法以在L2请求器之中进行仲裁。在一个实施例中,L2接口265还可被配置为接收从L2高速缓存105返回的数据,并将这种数据引入适当的功能单元(例如,由于未命中而引向数据高速缓存250以用于数据高速缓存填充)。
在核100的一些实施例的操作过程中,可出现例外事件。例如,来自通过选择单元210选择的供执行的给定线程的指令可能不是由核100实现的ISA的有效指令(例如,指令可具有不合法的操作码),浮点指令可产生需要在软件中进一步处理的结果,MMU270可能由于页未命中而不能完成页表行走,可能检测到硬件错误(诸如高速缓存或寄存器文件中的不可校正的数据出错),或者,各种其它的可能的结构限定或实现特有的例外事件可能出现。在一个实施例中,陷阱逻辑单元275可被配置为管理这些事件的操作。例如,TLU275可被配置为接收在特定线程的执行期间出现的例外事件的通知,并导致该线程的执行控制被指引(vector)至与检测的事件对应的管理模式软件操作器(即,陷阱操作器)。这种操作器可包含例如被配置为使错误状态指示返回与陷阱线程相关的应用并且可能终止应用的非法操作码陷阱操作器、被配置为修理不正确的结果的浮点陷阱操作器等。
在一个实施例中,TLU275可被配置为从核100内的处理的任意处理阶段冲洗来自陷阱线程的所有指令,而不扰乱其它非陷阱线程的执行。在一些实施例中,当来自给定线程的特定指令导致陷阱(与诸如硬件中断请求的与指令执行无关的陷阱导致条件相对)时,TLU275可实现这种陷阱作为精确的陷阱。即,TLU275可确保来自给定线程的在陷阱指令之前出现(以程序次序)的所有指令完成和更新结构状态,而没有来自给定线程的在陷阱指令次序之后出现(在程序中)的指令完成或更新结构状态。
另外,在不存在例外或陷阱请求的情况下,TLU275可被配置为启动和监视工作结果向结构状态的提交。例如,TLU275可包含协调将推测性结果转移到结构状态中的重排序缓冲器(ROB)。TLU275还可被配置为协调源自分析误预测的线程冲洗。对于没有由于误预测或例外而被冲洗或者另外消除的指令,指令处理可在指令结果被提交时结束。
在各种实施例中,图2所示的单元中的任一个可实现一个或更多个管线段,以形成当在IFU200中出现线程取回时开始并以TLU275的结果提交结束的指令执行管线。根据分割和实现图2的各种单元的功能的方式,不同的单元可需要不同数量的循环以完成它们的指令处理的部分。在一些情况下,某些单元(例如,FGU255)可需要可变数量的循环以完成某些类型的操作。
通过使用动态多线程,在一些情况下,与当在线程或处理之间切换时一般需要管线冲洗的常规处理器实现相反,能够使得核100的指令管线的各阶段在执行的不同阶段保持来自不同线程的指令。在一些实施例中,由于资源冲突或其它的调度危险导致的冲洗和停顿会导致一些管线阶段在给定的循环中没有指令。但是,在由核100的示出的实施例使用的细粒多线程处理器实现中,这种冲洗和停顿会被引向管线中的单个线程,从而使得其它的线程不被干扰。另外,即使由核100处理的一个线程在明显的时间长度上停顿(例如,由于L2高速缓存未命中),也可很容易地选择来自另一线程的指令用于发出,由此增加总线程处理吞吐量。
但是,如上所述,支持细粒多线程执行的核100的各种资源也可被动态重新分配,以提高具有更少数量的线程的工作负载的性能。在这些情况下,一些线程可被分配执行资源的更大的份额,而其它的线程相应地被分配更少的资源。但是,即使当更少的线程分享比较大的份额的执行资源时,核100仍可表现上述的灵活、线程特定的冲洗和停顿行为。
分支单元
在各种实施例中,处理器10或处理器核100可包含分支单元,该分支单元可包含与控制转移指令的处理相关的一个或更多个电路。例如,在各种实施例中,这种分支单元可包含分支预测单元、分支执行单元、与分支信息有关的存储元件等。在这些实施例中的某个实施例中,分支执行单元通过执行CTI并然后比较CTI的实际方向和目标与预测的方向和预测的目标以确定CTI是否被误预测,来确定给定线程中的最旧CTI的实际方向和目标。如果误预测被检测到,那么不正确的推测性路径上的CTI后面的所有较年轻的指令被冲洗,并且,指令取回单元被重新指引以从校正的目标地址取回指令。基于最旧的CTI的实际方向和目标,来更新分支预测器。
现在转到图3,表示处理器核100的一个实施例。在本实施例中,处理器核100包含分支单元380,该分支单元380又包含存储装置390、分支预测单元385和分支执行单元395。分支单元380与指令取回单元200耦合,以便接收用于分支预测的CTI指令并更新指令取回单元200(例如,在误预测之后从校正的执行路径取回)。在本实施例中,分支单元380还与发出单元230和工作寄存器文件260耦合。
在乱序处理器的某些实施例中,当CTI由执行单元执行时,它不是管线中的最旧指令,原因是可能存在还没有执行的更旧的指令。在典型的处理器实现中,从程序正确性观点看,不希望在检测到这些情景中的误预测时冲洗管线,原因是较旧的指令仍需要在冲洗之前被执行。因此,应允许执行比被误预测CTI旧的所有指令。
并且,在乱序机器中,伴随较旧的指令,可能存在将要在冲洗管线之前执行的在不正确的推测性路径上的较年轻的指令。推测性路径上的较年轻的指令可包含CTI,这些CTI自身可导致误预测。由于较年轻的指令处于推测性路径上,因此,它们的结果是不可靠的。通过使用推测性路径上的指令的结果更新分支预测器可导致分支预测器的精度降低。并且,由于推测性路径上的误预测CTI而冲洗管线和更新IFU是不希望的,原因是它将导致取回不正确的指令和损失性能。以下描述误预测的推测性路径上的CTI被抑制并且不允许影响分支预测、管线冲洗和指令取回的实施例。
在允许乱序执行的多线程处理器的一个实施例中,关于来自同一线程的其它的CTI依次执行CTI。但是,关于来自该线程的其它的指令则乱序执行CTI。在执行时,由于预测的方向错误或者由于预测的目标错误,CTI误预测被检测到。在任意的情况下,CTI后面的指令流然后被确定为“错误”路径。在这种误预测中,在一些处理器实现中应发生以下的事件:
1.CTI误预测后面的较年轻指令处于不正确的推测性路径上;它们应被冲洗并且不允许更新机器的任何结构状态。
2.取回单元应被重定向以在CTI之后从正确的路径取回。
3.分支预测器应基于误预测CTI的结果被更新。
如上所述,在执行比分支旧的所有指令之前,处理器不能被重定向和冲洗。这存在两种原因。首先,在被执行之前,还没有出现由这些指令导致的对于机器状态(诸如整数寄存器文件和条件代码)的更新。第二,这些指令中的一个能够由于例外、陷阱等重定向机器。
现在转到图4,表示分支单元380的一个实施例。在图4的实施例中,分支执行单元395包含对于各线程包含指示该线程的误预测状态的误预测位(元件402a~402n)。在其它的实施例中,作为误预测位的替代,或者,除了误预测位,可以使用其它的误预测指示。在一些实施例中,一旦来自线程的第一CTI被检测为被误预测,就对于线程设定误预测位(在各种实施例中,可称为逻辑0或1)。
在一个实施例中,一旦CTI到达分支执行单元395,方向和目标计算逻辑406就计算CTI指令的实际方向和目标,并且比较逻辑408比较这些值与由分支预测单元385预测的方向和目标。预测的方向和目标可存储于可位于分支单元或其它位置的存储装置390中,或者可另外沿执行管线转送到分支执行单元395。如果比较逻辑408发现实际和预测方向或目标不匹配,那么对于该CTI出现了误预测,并且,设定与CTI的线程对应的误预测位。指令取回单元(IFU)可被指示一检测到误预测就开始从校正的路径取回(基于CTI的实际目标)。在一个实施例中,通过误预测CTI的实际方向和/或目标更新分支预测单元385。另外,如上所述,需要从执行管线冲洗比CTI年轻的指令,但应允许比CTI旧的指令完成执行。
由于对于给定的线程依次执行所有CTI,因此在线程中不存在比执行CTI旧的任何CTI。但是,在等待比误预测CTI旧的所有指令执行时,可在不正确的路径上存在执行的较年轻的CTI。为了处理这些CTI同时保持处理器性能,在一个实施例中,在对于给定CTI的线程设定误预测位的同时执行的任何给定CTI将不影响冲洗管线、将处理器重定向到新的执行路径或者更新分支预测器。在某些实施例中,可简单地冲洗或忽略在设定误预测位时执行的任何CTI。
一旦比误预测CTI(导致误预测位被设定)旧的所有指令完成执行,就可冲洗执行管线,并且,误预测位可被清除或复位。在一个实施例中,如果比误预测CTI旧的任何指令导致例外、陷阱或一些其它类似的控制流程改变,那么误预测位也被复位。
在上述的实施例中,误预测执行路径上的较年轻的CTI指令将不使分支预测单元385的精度劣化,或者导致IFU的不正确的冲洗或更新。图4的实施例是要例示分支单元的一个可能的实现特别是使用误预测指示(例如,误预测位402a~402n)以防止分支预测器污染。但是,图4的特定的元件和连接被用于更好地解释一个实施例,但决不意味着以任何方式限制其它实施例。
现在转图5,表示示出用于设定和清除误预测指示的方法500和550的流程图。响应指令流中的CTI的误预测(事件510),对于指令流设定误预测指示(块520)。响应基于指令流中的至少一个较旧的指令(相对于误预测CTI)的复位事件(事件560),清除误预测指示(块570)。块560的事件可以是由指令流中的较旧的指令导致的陷阱或例外或指令流中的所有较旧指令的完成。指令的完成可指的是指令的结果提交给处理器的结构状态或者指令的执行的完成。图4的误预测位402a~402n是误预测指示的例子。由于在指令流中关于其它的CTI以程序次序出现CTI,因此,如果当在给定的指令流中设定误预测指示时出现CTI,那么获知它处于不正确的执行路径上,并且其结果将如前面描述的那样被抑制。
现在转到图6,表示示出分支单元的操作的一个实施例的流程图600。在管线的执行阶段,例如,在分支执行单元处接收CTI(事件602)。检查误预测指示(决定块604)。如果误预测指示被设定,那么已知CTI是比误预测CTI年轻的CTI,并因此处于不正确的推测性执行路径上并被冲洗(块626)。在其它的实施例中,这种CTI可被忽略或阻挡而不是被冲洗。
如果误预测指示不被设定,那么分支的实际方向和目标被计算(块606)。实际的方向和目标与例如由分支预测单元预测的CTI的预测的方向和目标相比较(块608)。如果CTI不被误预测(在决定块610中确定),那么分支预测器可通过CTI的结果被更新(块622),并且,指令将继续在管线中执行(624)。在一些实施例中,由于分支预测器仅在误预测上被更新并且另外被假定为正确,因此,不实现块622。
如果出现误预测(在决定块610中确定),那么误预测指示被设定(块612)。分支预测器通过CTI的结果被更新(块614)。IFU被更新以从校正的执行路径取回(块616)。注意,在示出的实施例中,在误预测CTI的提交之前出现分支预测器的更新和IFU的更新。在一些实施例中,这允许在误预测CTI的提交之前,IFU开始沿正确的执行路径取回指令并且分支预测器使用更新的CTI结果。在该点上,CTI执行停顿,直到比CTI旧的所有指令完成执行或者出现陷阱或例外(由决定块618和626周围的循环指示)。一旦比误预测CTI旧的所有指令完成执行或者出现陷阱或例外,管线就被冲洗(冲洗比CTI年轻的所有指令),并且,误预测指示被清除(块620)。在某些实施例中,一旦误预测CTI提交其结果,就可冲洗管线。
图6示出分支单元操作的特定实施例,并且不意味着限制其它的实施例,而是解释抑制不正确的推测性执行路径上的CTI的结果的分支单元操作的特定例子。注意,图6的流程图表示仅仅单个处理器线程和指令流的操作,但是,如上所述,也可被应用于几个线程。在多线程实施例中,用于给定的线程的误预测指示不会影响给定线程以外的线程。在图6的实施例中,一旦误预测被确定(而不是等待CTI完成执行或提交结果),缓冲器预测器就通过误预测CTI的结果被更新(块614)。由于在给定线程中关于其它的CTI以程序次序执行CTI,因此,在可在该点上执行分支预测器更新。因此,当不设定误预测指示时出现的CTI已知与分支预测器有关,而不等待来自任何其它指令的信息。
示例性系统实施例
如上所述,在一些实施例中,图1的处理器10可被配置为与数个外部装置连接。在图7中示出包括处理器10的系统700。在示出的实施例中,系统700包含与系统存储器710、外设存储装置720和引导装置730耦合的示为处理器10a的处理器10的实例。系统700与网络740耦合,该网络740又与另一计算机系统750耦合。在一些实施例中,系统700可包含表示的装置多于一个的实例。在各种实施例中,系统700可被配置为可支架安装的服务器系统、独立系统,或者可通过任何其它适当的形式因素被配置。在一些实施例中,系统700可被配置为客户端系统而不是服务器系统。
在一些实施例中,系统700可被配置为多处理器系统,其中,处理器10a可任选地与处理器10的一个或更多个其它的实例耦合,这实例在图10中示为处理器10b。例如,处理器10a~b可被耦合以通过它们相应的相干处理器接口160通信。
在各种实施例中,系统存储器710可包含上述的任意适当类型的系统存储器,诸如FB-DIMM、DDR/DDR2/DDR3/DDR4SDRAM、、快擦写存储器和各种类型的ROM等。在提供多个存储器接口130的处理器10的实施例中,系统存储器710可包含由分离的存储器接口控制的存储器的多个分离的群组。并且,在一些实施例中,系统存储器710可包含多个不同类型的存储器。
在各种实施例中,外设存储装置720可包含对于磁、光或固态存储介质的支持,诸如硬驱动、光盘、非易失性RAM装置等。在一些实施例中,外设存储装置720可包含更多的复杂的存储装置,诸如盘阵列或可通过标准的小型计算机系统接口(SCSI)、光纤信道接口、(IEEE1394)接口或另一适当的接口与处理器10耦合的存储区域网络(SAN)。另外,可以设想,在其它的实施例中,诸如多媒体装置、图形/显示装置、标准输入/输出装置等的任何其它适当的外设装置可与处理器10耦合。在一个实施例中,外设存储装置720可通过图1的外设接口150与处理器10耦合。
如上所述,在一个实施例中,引导装置730可包含被配置为诸如从通电复位状态协调处理器10的初始化和引导的FPGA或ASIC的装置。另外,在一些实施例中,引导装置730可包含被配置为允许访问诸如处理器10的调试或测试模式的管理功能的次级计算机系统。
例如,网络740可包含用于互连计算机系统的任何适当的装置、介质或协议,诸如有线或无线以太网。在各种实施例中,网络740可包含局域网络(LAN)、广域网络(WAN)、电信网络或其它适当类型的网络。在一些实施例中,计算机系统750可在配置上与示出的系统700类似或相同,而在其它的实施例中,计算机系统750可基本上以不同的方式被配置。例如,计算机系统750可以是服务器系统、基于处理器的客户端系统、无状态“薄”客户端系统、移动装置等。在一些实施例中,处理器10可被配置为通过图1的网络接口160与网络740通信。
虽然以上描述了特定的实施例,但这些实施例不是要限制本公开的范围,甚至在关于特定的特征描述单个实施例的情况下也是如此。除非另外陈述,否则,在本公开中提供的特征的例子是解释性的,不是限制性的。以上的描述要覆盖对于本领域技术人员来说十分明显的受益于本公开的所有这些替代方案、修改和等同。
本公开的范围包含这里公开的任何特征或特征的组合(明确地或者隐含地)或者其任何归纳,不管它是否解决这里提到的问题中的任一个或全部。因此,可在对于特征的任何这种组合诉求本申请(或者要求其优先权的申请)时构想新的权利要求。特别地,参照所附的权利要求,独立权利要求的特征可与从属权利要求的特征组合,并且,各独立的权利要求的特征可通过任何适当的方式组合,并且不仅仅是在所附的权利要求中列举的特定组合。
Claims (20)
1.一种装置,包括:
被配置为以程序次序执行指令流内的控制转移指令(CTI)的处理元件,其中,所述处理元件包含:
被配置为响应所述指令流中的控制转移指令(CTI)的误预测而设定误预测指示的分支单元,其中,所述分支单元被配置为响应基于所述指令流中的比误预测CTI旧的至少一个指令的复位事件而将所述误预测指示复位。
2.根据权利要求1的装置,其中,所述指令流中的CTI以外的指令以程序乱序被执行。
3.根据权利要求1的装置,其中,所述复位事件包含完成所述指令流中的比误预测CTI旧的所有未完成的指令。
4.根据权利要求1的装置,其中,所述复位事件包含由所述指令流中的比误预测CTI旧的指令导致的例外或陷阱。
5.根据权利要求1的装置,其中,所述处理元件包含执行管线,其中,所述装置被配置为响应当不设定所述误预测指示时出现的CTI误预测而冲洗所述执行管线中的指令,并且其中所述装置被配置为响应当设定了所述误预测指示时出现的CTI误预测而不冲洗所述执行管线中的指令。
6.根据权利要求1的装置,其中,所述处理元件被配置为响应当不设定所述误预测指示时出现的CTI误预测而从更新的执行路径取回指令,并且其中所述装置被配置为响应当设定了所述误预测指示时出现的CTI误预测而不从更新的执行路径取回指令。
7.根据权利要求1的装置,其中,所述处理元件被配置为响应当不设定所述误预测指示时出现的CTI而更新分支预测器,并且其中所述装置被配置为响应当设定了所述误预测指示时出现的CTI而不更新所述分支预测器。
8.根据权利要求1的装置,其中,所述处理元件被配置为使得当设定了所述误预测指示时出现的CTI误预测不导致管线冲洗、从更新的执行路径的指令取回或对于分支预测器的更新。
9.根据权利要求1的装置,其中,所述处理元件被配置为执行来自多个线程的指令流,并且其中所述装置被配置为对于多个线程中的每个线程同时存储误预测指示。
10.一种处理器,包括:
被配置为响应指令流中的控制转移指令(CTI)的误预测而设定误预测指示的分支单元,其中,所述分支单元被配置为存储可用于做出由所述处理器取回的CTI的预测的分支预测信息;
其中,所述分支单元被配置为当不设定所述误预测指示时对于到达处理器的执行阶段的CTI更新分支预测信息,但当设定了误预测指示时对于到达执行阶段的CTI则不更新分支预测信息。
11.根据权利要求10的处理器,其中,所述处理器被配置为在确定CTI是否被误预测之后但在提交CTI的结果之前更新所述分支预测信息。
12.根据权利要求10的处理器,其中,所述处理器被配置为使得当设定了所述误预测指示时在所述指令流中出现的CTI误预测不导致管线冲洗或从更新的执行路径的指令取回。
13.根据权利要求10的处理器,其中,所述处理器被配置为响应基于所述指令流中的比误预测CTI旧的至少一个指令的复位事件将所述误预测指示复位;并且
其中所述处理器被配置为推迟响应误预测CTI延迟而冲洗所述处理器的管线到出现复位事件之后。
14.根据权利要求10的处理器,其中,所述处理器被配置为执行来自多个线程的指令流,其中所述处理器被配置为同时存储多个误预测指示,每个误预测指示与所述多个线程中的一个线程对应。
15.根据权利要求14的处理器,其中,所述多个误预测指示的每个误预测指示不影响与其对应的线程以外的线程的执行。
16.一种方法,包括:
处理器响应指令流中的第一控制转移指令(CTI)的误预测而设定误预测指示,其中,所述设定包含基于第一CTI的误预测而更新在所述处理器中的分支单元的分支预测信息,其中,所述更新在第一CTI的提交之前被执行,
当设定了所述误预测指示时,响应所述指令流中的第二CTI到达处理器的管线的执行阶段,所述处理器防止基于第二CTI更新所述分支预测信息。
17.根据权利要求16的方法,还包括:
所述处理器基于所述指令流中的比第一CTI旧的至少一个指令来清除所述误预测指示;
当清除了所述误预测指示时,响应所述指令流中的第三CTI到达所述处理器的管线的执行阶段,所述处理器基于第三CTI更新分支预测信息。
18.根据权利要求16的方法,其中,当设定了所述误预测指示时出现的CTI误预测不导致管线冲洗或从更新的执行路径的指令取回。
19.根据权利要求16的方法,其中,当清除了误预测指示时出现的CTI误预测导致所述误预测指示被设定、从校正的执行路径取回指令、对分支预测器的更新和对指令流中的指令的冲洗。
20.根据权利要求16的方法,其中,所述处理器被配置为执行来自多个线程的指令,并且其中所述多个线程的每个特定线程的CTI关于所述特定线程中的其它CTI以程序次序被执行。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161485891P | 2011-05-13 | 2011-05-13 | |
US61/485,891 | 2011-05-13 | ||
US13/228,329 | 2011-09-08 | ||
US13/228,329 US8862861B2 (en) | 2011-05-13 | 2011-09-08 | Suppressing branch prediction information update by branch instructions in incorrect speculative execution path |
PCT/US2012/037813 WO2012158633A1 (en) | 2011-05-13 | 2012-05-14 | Suppression of control transfer instructions on incorrect speculative execution paths |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103620555A true CN103620555A (zh) | 2014-03-05 |
CN103620555B CN103620555B (zh) | 2016-10-12 |
Family
ID=47142689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280031310.9A Active CN103620555B (zh) | 2011-05-13 | 2012-05-14 | 抑制不正确的推测性执行路径上的控制转移指令 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8862861B2 (zh) |
EP (1) | EP2707794B1 (zh) |
CN (1) | CN103620555B (zh) |
WO (1) | WO2012158633A1 (zh) |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573722A (zh) * | 2014-12-14 | 2016-05-11 | 上海兆芯集成电路有限公司 | 用以改善在处理器中重新执行加载的装置与方法 |
WO2016097811A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude load replays dependent on fuse array access in out-of-order processor |
WO2016097814A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude shared ram-dependent load replays in out-of-order processor |
US9645827B2 (en) | 2014-12-14 | 2017-05-09 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude load replays dependent on page walks in an out-of-order processor |
US9703359B2 (en) | 2014-12-14 | 2017-07-11 | Via Alliance Semiconductor Co., Ltd. | Power saving mechanism to reduce load replays in out-of-order processor |
CN107003850A (zh) * | 2014-12-24 | 2017-08-01 | 英特尔公司 | 用于数据推测执行的系统、装置和方法 |
US9740271B2 (en) | 2014-12-14 | 2017-08-22 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor |
US9804845B2 (en) | 2014-12-14 | 2017-10-31 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor |
US10083038B2 (en) | 2014-12-14 | 2018-09-25 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on page walks in an out-of-order processor |
US10088881B2 (en) | 2014-12-14 | 2018-10-02 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude I/O-dependent load replays in an out-of-order processor |
US10089112B2 (en) | 2014-12-14 | 2018-10-02 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor |
US10095514B2 (en) | 2014-12-14 | 2018-10-09 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude I/O-dependent load replays in an out-of-order processor |
US10108421B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude shared ram-dependent load replays in an out-of-order processor |
US10108430B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor |
US10108420B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor |
US10114794B2 (en) | 2014-12-14 | 2018-10-30 | Via Alliance Semiconductor Co., Ltd | Programmable load replay precluding mechanism |
US10114646B2 (en) | 2014-12-14 | 2018-10-30 | Via Alliance Semiconductor Co., Ltd | Programmable load replay precluding mechanism |
US10120689B2 (en) | 2014-12-14 | 2018-11-06 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor |
US10127046B2 (en) | 2014-12-14 | 2018-11-13 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude uncacheable-dependent load replays in out-of-order processor |
US10133580B2 (en) | 2014-12-14 | 2018-11-20 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor |
US10133579B2 (en) | 2014-12-14 | 2018-11-20 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude uncacheable-dependent load replays in out-of-order processor |
US10146539B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd. | Load replay precluding mechanism |
US10146547B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor |
US10146540B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor |
US10146546B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd | Load replay precluding mechanism |
US10175984B2 (en) | 2014-12-14 | 2019-01-08 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor |
US10209996B2 (en) | 2014-12-14 | 2019-02-19 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
US10228944B2 (en) | 2014-12-14 | 2019-03-12 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
CN110609709A (zh) * | 2019-09-11 | 2019-12-24 | 上海高性能集成电路设计中心 | 一种超标量微处理器中重发自陷立即处理方法 |
CN111881013A (zh) * | 2015-11-02 | 2020-11-03 | 索尼互动娱乐有限责任公司 | 以扰乱时序的模式进行的软件向后兼容性测试 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8782434B1 (en) | 2010-07-15 | 2014-07-15 | The Research Foundation For The State University Of New York | System and method for validating program execution at run-time |
US9268569B2 (en) * | 2012-02-24 | 2016-02-23 | Apple Inc. | Branch misprediction behavior suppression on zero predicate branch mispredict |
US9122873B2 (en) | 2012-09-14 | 2015-09-01 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
US9626280B2 (en) * | 2013-07-01 | 2017-04-18 | Nxp Usa, Inc. | Debug method and device for handling exceptions and interrupts |
US9626279B2 (en) | 2013-07-01 | 2017-04-18 | Nxp Usa, Inc. | Debug method and device for providing indexed trace messages |
US10261826B2 (en) | 2014-06-02 | 2019-04-16 | International Business Machines Corporation | Suppressing branch prediction updates upon repeated execution of an aborted transaction until forward progress is made |
US10289414B2 (en) | 2014-06-02 | 2019-05-14 | International Business Machines Corporation | Suppressing branch prediction on a repeated execution of an aborted transaction |
US10235172B2 (en) | 2014-06-02 | 2019-03-19 | International Business Machines Corporation | Branch predictor performing distinct non-transaction branch prediction functions and transaction branch prediction functions |
US10503538B2 (en) | 2014-06-02 | 2019-12-10 | International Business Machines Corporation | Delaying branch prediction updates specified by a suspend branch prediction instruction until after a transaction is completed |
US20160350116A1 (en) * | 2015-05-29 | 2016-12-01 | Qualcomm Incorporated | Mitigating wrong-path effects in branch prediction |
US10423330B2 (en) * | 2015-07-29 | 2019-09-24 | International Business Machines Corporation | Data collection in a multi-threaded processor |
US9639370B1 (en) * | 2015-12-15 | 2017-05-02 | International Business Machines Corporation | Software instructed dynamic branch history pattern adjustment |
JP2019101543A (ja) * | 2017-11-29 | 2019-06-24 | サンケン電気株式会社 | プロセッサ及びパイプライン処理方法 |
WO2019140274A1 (en) | 2018-01-12 | 2019-07-18 | Virsec Systems, Inc. | Defending against speculative execution exploits |
US11275587B2 (en) | 2018-05-02 | 2022-03-15 | Micron Technology, Inc. | Static identifications in object-based memory access |
US10761855B2 (en) | 2018-05-02 | 2020-09-01 | Micron Technology, Inc. | Securing conditional speculative instruction execution |
CN110750301B (zh) * | 2018-08-29 | 2020-07-07 | 清华大学无锡应用技术研究院 | 检测处理器安全性的方法、装置、系统及存储介质 |
US11663014B2 (en) * | 2019-08-26 | 2023-05-30 | Arm Limited | Speculatively executing instructions that follow a status updating instruction |
CN112540794A (zh) * | 2019-09-20 | 2021-03-23 | 阿里巴巴集团控股有限公司 | 处理器核、处理器、装置和指令处理方法 |
JP2023508869A (ja) * | 2019-12-23 | 2023-03-06 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | フェッチグループのシーケンスについての分岐予測ユニットへのアクセスの制御 |
CN112035170B (zh) * | 2020-08-20 | 2021-06-29 | 海光信息技术股份有限公司 | 用于分支预测器的方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070101110A1 (en) * | 2005-10-31 | 2007-05-03 | Mips Technologies, Inc. | Processor core and method for managing branch misprediction in an out-of-order processor pipeline |
CN101128797A (zh) * | 2005-02-04 | 2008-02-20 | 美普思科技有限公司 | 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器 |
US20100017586A1 (en) * | 1998-12-31 | 2010-01-21 | Anatoly Gelman | Fetching all or portion of instructions in memory line up to branch instruction based on branch prediction and size indicator stored in branch target buffer indexed by fetch address |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0638183B1 (en) | 1992-05-01 | 1997-03-05 | Seiko Epson Corporation | A system and method for retiring instructions in a superscalar microprocessor |
US5586278A (en) | 1994-03-01 | 1996-12-17 | Intel Corporation | Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor |
US5687338A (en) * | 1994-03-01 | 1997-11-11 | Intel Corporation | Method and apparatus for maintaining a macro instruction for refetching in a pipelined processor |
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 |
US20020087844A1 (en) * | 2000-12-29 | 2002-07-04 | Udo Walterscheidt | Apparatus and method for concealing switch latency |
US6785804B2 (en) | 2001-05-17 | 2004-08-31 | Broadcom Corporation | Use of tags to cancel a conditional branch delay slot instruction |
US7363477B2 (en) | 2003-12-03 | 2008-04-22 | Intel Corporation | Method and apparatus to reduce misprediction penalty by exploiting exact convergence |
US7152155B2 (en) | 2005-02-18 | 2006-12-19 | Qualcomm Incorporated | System and method of correcting a branch misprediction |
US7949861B2 (en) | 2005-06-10 | 2011-05-24 | Qualcomm Incorporated | Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline |
US7624254B2 (en) | 2007-01-24 | 2009-11-24 | Qualcomm Incorporated | Segmented pipeline flushing for mispredicted branches |
-
2011
- 2011-09-08 US US13/228,329 patent/US8862861B2/en active Active
-
2012
- 2012-05-14 WO PCT/US2012/037813 patent/WO2012158633A1/en active Application Filing
- 2012-05-14 CN CN201280031310.9A patent/CN103620555B/zh active Active
- 2012-05-14 EP EP12724454.9A patent/EP2707794B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100017586A1 (en) * | 1998-12-31 | 2010-01-21 | Anatoly Gelman | Fetching all or portion of instructions in memory line up to branch instruction based on branch prediction and size indicator stored in branch target buffer indexed by fetch address |
CN101128797A (zh) * | 2005-02-04 | 2008-02-20 | 美普思科技有限公司 | 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器 |
US20070101110A1 (en) * | 2005-10-31 | 2007-05-03 | Mips Technologies, Inc. | Processor core and method for managing branch misprediction in an out-of-order processor pipeline |
Cited By (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10108420B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor |
US10146546B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd | Load replay precluding mechanism |
WO2016097814A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude shared ram-dependent load replays in out-of-order processor |
CN105573722A (zh) * | 2014-12-14 | 2016-05-11 | 上海兆芯集成电路有限公司 | 用以改善在处理器中重新执行加载的装置与方法 |
US9703359B2 (en) | 2014-12-14 | 2017-07-11 | Via Alliance Semiconductor Co., Ltd. | Power saving mechanism to reduce load replays in out-of-order processor |
US10114794B2 (en) | 2014-12-14 | 2018-10-30 | Via Alliance Semiconductor Co., Ltd | Programmable load replay precluding mechanism |
US9740271B2 (en) | 2014-12-14 | 2017-08-22 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor |
US9804845B2 (en) | 2014-12-14 | 2017-10-31 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor |
US9915998B2 (en) | 2014-12-14 | 2018-03-13 | Via Alliance Semiconductor Co., Ltd | Power saving mechanism to reduce load replays in out-of-order processor |
US10083038B2 (en) | 2014-12-14 | 2018-09-25 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on page walks in an out-of-order processor |
US10088881B2 (en) | 2014-12-14 | 2018-10-02 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude I/O-dependent load replays in an out-of-order processor |
US10089112B2 (en) | 2014-12-14 | 2018-10-02 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor |
US10095514B2 (en) | 2014-12-14 | 2018-10-09 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude I/O-dependent load replays in an out-of-order processor |
US10108428B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor |
US10108421B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude shared ram-dependent load replays in an out-of-order processor |
US10108430B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor |
US10108429B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude shared RAM-dependent load replays in an out-of-order processor |
US10108427B2 (en) | 2014-12-14 | 2018-10-23 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor |
US9645827B2 (en) | 2014-12-14 | 2017-05-09 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude load replays dependent on page walks in an out-of-order processor |
US10228944B2 (en) | 2014-12-14 | 2019-03-12 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
US10120689B2 (en) | 2014-12-14 | 2018-11-06 | Via Alliance Semiconductor Co., Ltd | Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor |
US10114646B2 (en) | 2014-12-14 | 2018-10-30 | Via Alliance Semiconductor Co., Ltd | Programmable load replay precluding mechanism |
US10127046B2 (en) | 2014-12-14 | 2018-11-13 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude uncacheable-dependent load replays in out-of-order processor |
US10133580B2 (en) | 2014-12-14 | 2018-11-20 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor |
US10133579B2 (en) | 2014-12-14 | 2018-11-20 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude uncacheable-dependent load replays in out-of-order processor |
US10146539B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd. | Load replay precluding mechanism |
US10146547B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor |
US10146540B2 (en) | 2014-12-14 | 2018-12-04 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor |
WO2016097811A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude load replays dependent on fuse array access in out-of-order processor |
US10175984B2 (en) | 2014-12-14 | 2019-01-08 | Via Alliance Semiconductor Co., Ltd | Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor |
US10209996B2 (en) | 2014-12-14 | 2019-02-19 | Via Alliance Semiconductor Co., Ltd. | Apparatus and method for programmable load replay preclusion |
CN107003850B (zh) * | 2014-12-24 | 2020-12-22 | 英特尔公司 | 用于数据推测执行的系统、装置和方法 |
CN107003850A (zh) * | 2014-12-24 | 2017-08-01 | 英特尔公司 | 用于数据推测执行的系统、装置和方法 |
US11907105B2 (en) | 2015-11-02 | 2024-02-20 | Sony Interactive Entertainment LLC | Backward compatibility testing of software in a mode that disrupts timing |
CN111881013A (zh) * | 2015-11-02 | 2020-11-03 | 索尼互动娱乐有限责任公司 | 以扰乱时序的模式进行的软件向后兼容性测试 |
CN111881013B (zh) * | 2015-11-02 | 2024-04-23 | 索尼互动娱乐有限责任公司 | 以扰乱时序的模式进行的软件向后兼容性测试 |
CN110609709A (zh) * | 2019-09-11 | 2019-12-24 | 上海高性能集成电路设计中心 | 一种超标量微处理器中重发自陷立即处理方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2707794A1 (en) | 2014-03-19 |
US20120290820A1 (en) | 2012-11-15 |
CN103620555B (zh) | 2016-10-12 |
US8862861B2 (en) | 2014-10-14 |
EP2707794B1 (en) | 2017-10-25 |
WO2012158633A1 (en) | 2012-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103620555A (zh) | 抑制不正确的推测性执行路径上的控制转移指令 | |
US8429636B2 (en) | Handling dependency conditions between machine instructions | |
US9122487B2 (en) | System and method for balancing instruction loads between multiple execution units using assignment history | |
US9940132B2 (en) | Load-monitor mwait | |
US8429386B2 (en) | Dynamic tag allocation in a multithreaded out-of-order processor | |
US9026705B2 (en) | Interrupt processing unit for preventing interrupt loss | |
US8335912B2 (en) | Logical map table for detecting dependency conditions between instructions having varying width operand values | |
US9690625B2 (en) | System and method for out-of-order resource allocation and deallocation in a threaded machine | |
US8904156B2 (en) | Perceptron-based branch prediction mechanism for predicting conditional branch instructions on a multithreaded processor | |
US9213551B2 (en) | Return address prediction in multithreaded processors | |
US8140769B2 (en) | Data prefetcher | |
US20100274961A1 (en) | Physically-indexed logical map table | |
US10338928B2 (en) | Utilizing a stack head register with a call return stack for each instruction fetch | |
US20110078425A1 (en) | Branch prediction mechanism for predicting indirect branch targets | |
EP2707792B1 (en) | Branch target storage and retrieval in an out-of-order processor | |
US20120290821A1 (en) | Low-latency branch target cache | |
US20130024647A1 (en) | Cache backed vector registers | |
US20130138888A1 (en) | Storing a target address of a control transfer instruction in an instruction field | |
EP4020229A1 (en) | System, apparatus and method for prefetching physical pages in a processor | |
US8504805B2 (en) | Processor operating mode for mitigating dependency conditions between instructions having different operand sizes | |
US9304767B2 (en) | Single cycle data movement between general purpose and floating-point registers | |
US7343474B1 (en) | Minimal address state in a fine grain multithreaded processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |