CN100480995C - 提高控制推测的性能的方法和系统 - Google Patents
提高控制推测的性能的方法和系统 Download PDFInfo
- Publication number
- CN100480995C CN100480995C CNB2003801065592A CN200380106559A CN100480995C CN 100480995 C CN100480995 C CN 100480995C CN B2003801065592 A CNB2003801065592 A CN B2003801065592A CN 200380106559 A CN200380106559 A CN 200380106559A CN 100480995 C CN100480995 C CN 100480995C
- Authority
- CN
- China
- Prior art keywords
- speculative load
- miss
- cache
- speculative
- register
- 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
- 238000000034 method Methods 0.000 title claims description 39
- 230000007246 mechanism Effects 0.000 claims abstract description 36
- 230000009467 reduction Effects 0.000 claims description 7
- 230000004044 response Effects 0.000 claims description 7
- 238000001514 detection method Methods 0.000 claims description 6
- 230000008878 coupling Effects 0.000 claims 1
- 238000010168 coupling process Methods 0.000 claims 1
- 238000005859 coupling reaction Methods 0.000 claims 1
- 238000011084 recovery Methods 0.000 abstract description 11
- 230000008901 benefit Effects 0.000 description 8
- 230000000875 corresponding effect Effects 0.000 description 7
- 230000001960 triggered effect Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000002269 spontaneous effect Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000014616 translation Effects 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000013475 authorization Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012546 transfer Methods 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/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种用于提高控制推测性能的机制包括执行推测装载,如果推测装载在高速缓存中命中,则向推测装载所针对的寄存器返回数据值,如果推测装载在高速缓存中未命中,将延迟令牌与推测装载相关联。如果后来确定推测装载在控制流路径上,该机制还可在高速缓存未命中时发出预取以加快恢复代码的执行。
Description
技术领域
本发明涉及计算系统,特别是涉及用于支持计算系统中的推测执行的机制。
背景技术
控制推测是由某些高级编译器用来安排指令以便更高效地执行的优化技术。这种技术允许编译器在它知道程序的动态控制流将实际到达程序中需要指令的点之前安排一个或多个指令用于执行。指令代码序列中条件转移的存在意味着这种需求只能在运行时间明确地确定。
根据相关分支条件的求解,分支指令把程序的控制流发送到两个或两个以上执行路径其中之一。程序将沿着哪条执行路径无法肯定地确定,直到运行时分支条件被求解。这些路径中的一个路径上的指令称为被分支指令“守卫”。支持控制推测的编译器可以在守卫这些路径上的指令的分支指令之前安排这些路径上的指令。
控制推测通常被用于具有长的执行等待时间的指令。较早地在控制流中、即在知道它们是否需要被执行前安排这些指令的执行,通过使它们的执行与其它指令的执行交迭而减少它们的等待时间。控制推测的指令所触发的异常条件可能被延迟,直到确定控制流实际到达这些指令。控制推测还允许编译器给出较大的指令池,从中它能安排用于并行执行的指令。因此,控制推测使编译器能更好地利用处理器所提供的大量执行资源,以处理高级的指令级并行(ILP)。
尽管控制推测有许多优点,但它可能造成导致不必要或意外的性能损失的微体系结构复杂性。例如,在某种条件下,高速缓存中未命中的推测装载操作可能使处理器停止工作几十甚至数百个时钟周期,即使该推测装载后来被确定是不需要的。
关于控制推测代码的这种微体系结构事件的频率和影响取决于诸如高速缓存策略、分支预测精确度和高速缓存未命中等待时间等因素。这些因素可能对于不同系统是不同的,取决于正运行的特定程序、执行程序的处理器以及向程序指令递交数据的存储器层次结构。这种可变性使得(如果不是不可能)难以在不做大量测试和分析的前提下评估控制推测的益处。因为性能损失的可能性可能很大,并且它们发生的条件是难以预测的,所以控制预测还没有像其它方式那样被广泛使用。
本发明着手解决与控制推测相关联的这些和其它问题。
发明内容
根据本发明的第一方面,提供了一种用于处理推测装载的方法,包括:
发出推测装载;
如果推测装载在高速缓存中命中,则向推测装载所针对的寄存器返回数据值;
如果推测装载在高速缓存中未命中,则用延迟令牌给目标寄存器作标记;以及
一旦推测装载在高速缓存中未命中,便发出非故障预取;
其中,推测装载的对象包括操作数;
如果分支没有被采用,则响应检查操作来检测所述延迟令牌;以及
响应所述检测而调用例程来执行对应于推测装载的装载,其中,所述装载的等待时间通过非故障预取来降低。
根据本发明的第二方面,提供了一种系统,包括:
高速缓存;
寄存器文件;
执行核;以及
存储器,存储可被执行核处理的指令,从而:
向高速缓存发出推测装载;以及
如果推测装载在高速缓存中未命中,则标记由推测装载所针对的寄存器文件中的寄存器,
其中,一旦推测装载在高速缓存中未命中,执行核便处理所存储的指令,以向推测装载所针对的地址发出非故障预取;
推测装载的对象包括操作数;
如果分支没有被采用,则响应检查操作来检测延迟令牌;以及
响应所述检测而调用例程来执行对应于推测装载的装载,其中,所述装载的等待时间通过非故障预取来降低。
根据本发明的第三方面,提供了一种方法,该方法包括:
执行第一推测操作;
如果所述执行触发与高速缓存未命中相对应的微体系结构事件,则将延迟令牌与第一推测操作相关联,
一旦第一推测操作在高速缓存中未命中,便向第一推测操作所针对的地址发出非故障预取请求,其中,所述第一推测操作是推测装载操作;
其中,推测装载的对象包括操作数;
如果分支没有被采用,则响应检查操作来检测所述延迟令牌;以及
响应所述检测而调用例程来执行对应于推测装载的装载,其中,所述装载的等待时间通过非故障预取来降低。
附图说明
参照下面的附图可以理解本发明,其中同样的元件由同样的数字来表示。这些附图用于说明本发明的所选实施例,而不是试图限制所附权利要求的范围。
图1是适合于实现本发明的计算机系统的框图。
图2是表示用于实现本发明的方法的一个实施例的流程图。
图3是表示用于实现本发明的方法的另一个实施例的流程图。
具体实施方式
下面的讨论提出了许多特定细节以提供本发明的全面理解。然而,本领域的那些受益于本公开的普通技术人员会明白,没有这些特定细节也可以实施本发明。此外,为了将注意力集中在本发明的特征上,没有详细描述各种公知的方法、过程、元件和电路。
图1是表示适合于实现本发明的计算系统100的一个实施例的框图。系统100包括一个或多个处理器110、主存储器180、系统逻辑170和外围设备190。处理器110、主存储器180和外围设备190通过通信链路与系统逻辑170相连。这些链路可以是例如共享总线、点到点链路等。系统逻辑170管理系统100的各种元件之间的数据传输。如图所示,系统逻辑可以是分开的部件,或者系统逻辑170的部分可能被结合到处理器110和系统的其它部件中。
处理器110的所公开实施例包括执行资源120、一个或多个寄存器文件130、第一和第二高速缓存140和150、以及高速缓存控制器160。高速缓存140、150和主存储器180构成了系统100的存储器层次结构。在下面的讨论中,根据它们的响应等待时间,存储器层次结构的部件被认作较高级或较低级。例如,高速缓存140被认作是较低级高速缓存,因为它返回数据比(较高级)高速缓存150快。本发明的实施例不局限于系统100的部件的特定配置或存储器层次结构的特定配置。其它计算系统可以在不同的芯片内和芯片外配置中使用例如不同的部件或不同数目的高速缓存。
在工作期间,执行资源120从被执行的程序中实现指令。这些指令对从寄存器文件130提供的或从存储器层次结构的各种部件绕过的数据(操作数)进行操作。分别通过装载和存储指令,操作数数据被传到寄存器文件130和从寄存器文件130传出。对于典型处理器配置,如果在高速缓存140中可获得数据,装载指令可能在一或两个时钟周期内实现。如果装载在高速缓存140中未命中,则请求被转发到层次结构中的下一个高速缓存,即图1中的高速缓存150。通常,请求被转发给存储器层次结构中的相继的高速缓存,直到数据被定位。如果所请求的数据没有存储在任何高速缓存中,则从主存储器180提供该数据。
如上所述的存储器层次结构使用高速缓存协议,该协议倾向于使数据很可能被用于离执行资源较近的位置、例如高速缓存140。例如,如果装载命中高速缓存140,那么装载、然后是使用装载所返回的数据的加法可以用3个时钟周期来完成,例如两个周期用于装载,一个周期用于加法。在某种条件下,控制推测允许三个时钟周期的等待时间隐藏在其它指令的执行后面。
指令序列(I)和(II)分别说明用于推测执行的修改前后的代码样本。虽然在任一代码序列中都没有明确地表示,但是假定装载和加法由反映从高速缓存装载数据所需的时钟周期数的时间间隔所分开。例如,如果装载需要两个时钟周期以从高速缓存140返回数据,那么编译器通常将安排加法在2或3个时钟周期之后执行,以避免不必要的拖延。
cmp.eq p1,p2=r5,r6
... (I)
(p1)br.cond BR-TARGET
ld r1=[r2]
add r3=r1,r4
st [r5]=r3
对于序列(I),比较指令(cmp.eq)确定谓词值(p1)是真还是假。如果(p1)是真,则采用(“TK”)分支(br.cond),控制流被转到由BR-TARGET所表示的地址处的指令。在这种情况下,不执行跟在br.cond后面的装载(ld)、从属的加法(add)和存储(st)。如果(p1)是假的,不采用(“NT”)分支,并且控制流对于跟着该分支的指令来说“落空”。在这种情况下,执行按顺序跟随br.cond的ld,add和st。
指令序列(II)说明由支持控制推测的编译器修改后的代码样本。
ld.s r1=[r2]
add r3=r1,r4
cmp.eq p1,p2=r5,r6
... (II)
(p1)br.cond TARGET
chk.s r1,RECOVER
st [r5]=r3
对于代码序列(II),装载操作(由ld.s表示)是推测的,因为在守卫其执行(br.cond)的分支指令之前,编译器已安排它执行。在分支前还安排了从属的加法指令,并且检查操作chk.s已被插入br.cond后面。如下所述,chk.s使处理器检查由推测执行的装载触发的异常条件。
代码序列(II)中的推测装载和它的从属加法比序列(I)中它们的非推测对应物更早地可用于执行。安排它们与分支前的那些指令并行执行将它们的等待时间隐藏到它们与之一起执行的指令后面。例如,如果在高速缓存140中可得到存储单元[r2]中的数据,装载和加法操作的结果可能在3个时钟周期内准备好。控制推测允许这个执行等待时间与分支前的其它指令的执行等待时间交迭。这把执行代码序列(II)所需的时间减少了3个时钟周期。假定无需向代码序列(II)增加一个额外的时钟周期就能安排检查操作,例如与st并行,在这个例子中,来自控制推测的静态增益是3个时钟周期。
运行时,可能意识到也可能未意识到代码序列(II)所示的静态增益,这取决于各种微体系结构事件。像上面所提到的,装载等待时间对其中找到所请求数据的存储器层次结构的级别是敏感的。对于图1的系统,装载将从其中能找到所请求数据的存储器层次结构的最低级别得到满足。如果数据只存在于较高级别高速缓存或主存储器中,控制推测可能触发降低性能的停止,即使数据是不需要的。
表1总结了在不同分支和高速缓存情形下,相对于代码序列(I)的代码序列(II)的性能。说明了由控制推测提供的相对增益/损耗,假定来自控制推测的3个时钟周期的静态增益和对于在高速缓存140中未命中却从高速缓存150中得到满足的12个时钟周期惩罚。
表1
高速缓存命中/未命中 | 分支TK/NT | 增益(损耗) | |
1 | 命中 | NT | 3 |
2 | 未命中 | NT | 3 |
3 | 命中 | TK | 0 |
4 | 未命中 | TK | (10) |
前两个条目说明当分支是NT时、即当推测指令在执行路径上时的相对增益/损耗结果。如果推测装载操作在高速缓存(条目1和2)中命中或未命中,控制推测相对于未被推测的代码序列提供3个时钟周期的静态增益(例如,两个周期用于装载,一个周期用于加法)。假定在两个代码序列中装载和加法都由两个时钟周期分开,装载在高速缓存中未命中之后,加法触发停止2个时钟周期。对于两个代码序列都导致10(12-2)个时钟周期的净停止-在具有推测的NT分支之前和没有推测的NT分支之后。
表1中接下来的两个条目说明了分支是TK的情况下的增益/损耗结果。对于这些条目,程序不需要由推测指令提供的结果。如果装载操作命中了高速缓存(条目3),控制推测相对于无推测的情况不提供增益,因为由推测执行指令所返回的结果是不需要的。因为返回不需要的结果,所以前面的3个时钟周期不提供净利益。
如果装载操作没有命中高速缓存,控制推测序列(条目4)相对于未推测序列产生10个时钟周期惩罚(损耗)。因为控制推测序列在估计分支方向(TK)之前执行装载和加法,因此它引起惩罚。因为未推测序列在TK分支不执行装载和加法,因而避免了高速缓存未命中和后续的停止。对于在TK分支之前的高速缓存未命中,由控制推测引起的相对损耗是10个时钟周期惩罚,尽管推测指令(ld.s,add)所返回的结果是不需要的。如果推测装载没有命中较高级别的高速缓存并且从存储器返回数据,那么惩罚可能是数百个时钟周期。
控制推测所提供的整体利益取决于分支方向(TK/NT)、高速缓存未命中的频率、高速缓存未命中惩罚的大小。在所说明的代码序列(对于在NT分支上高速缓存命中,有3个时钟周期的静态增益)中的潜在益处可能被与不必要的停止相关联的惩罚所超过,除非高速缓存命中率大于配置特定阈值(在本例中~80%)。对于较大的高速缓存未命中惩罚,高速缓存命中率必须相应地较大以补偿较长的停止。如果能以较高确定性预测分支为NT,那么高速缓存命中率可以不那么重要,因为这种情况下,停止发生在两个代码序列中。通常,关于分支方向(TK/NT)和高速缓存命中率的不确定性使得难以估计控制推测的净益处,并且与为不需要的指令维修高速缓存未命中相关联的显著惩罚(在上述例子中大于9个时钟周期)会使程序员保守地对使用控制推测存在偏见或者根本不使用。
本发明的实施例提供了一种用于限制由于使用控制推测而引起的性能损耗的机制。对于一个实施例,通过延迟机制来处理推测装载时的高速缓存未命中。当高速缓存未命中时,令牌可与推测装载所针对的寄存器相关联。如果实际上需要推测指令,则通过恢复例程处理高速缓存未命中。如果需要,可发出预取请求以响应高速缓存未命中,从而加速恢复例程的执行。延迟机制可用于任何高速缓存未命中或用于指定高速缓存级的未命中。
图2表示按照本发明、通过推测装载处理高速缓存未命中的方法200的一个实施例的概述。当执行推测装载210时,方法200被启动。如果推测装载在高速缓存中命中220,方法200终止260。如果推测装载在高速缓存中未命中220,设置标记230以便延迟处理。延迟处理意味着只有后续确定240推测装载结果是需要的,才导致处理高速缓存未命中所需的开销。如果推测装载结果是需要的,则执行恢复代码250。如果不需要,方法200终止260。
对于一个实施例,如果非推测指令涉及被标记的寄存器,则延迟的高速缓存未命中可能触发恢复,因为只有当推测装载结果确实是需要的,这种情况才发生。非推测指令可能是测试寄存器是否有延迟令牌的检查操作。如下面更详细论述的,该令牌可以是用于以信号通知推测指令的延迟异常的令牌,在这种情况下,修改异常延迟机制以处理微体系结构事件,如上述的高速缓存未命中的例子。
参照代码序列(II)说明延迟异常机制。如上所述,跟着分支的检查操作(chk.s)被用于确定是否推测装载触发了异常条件。通常,异常是相对复杂的事件,它使处理器挂起当前执行的代码序列,保存某些状态变量,并将控制交给低级软件、如操作系统和各种异常处理例程。例如,翻译后援缓冲器(TLB)可能不具有用于装载操作所指向的逻辑地址的物理地址转换,或者装载操作可能从非特权代码序列中瞄准特权代码。这些和其它异常通常需要操作系统或其它系统级资源来干预以解决问题。
推测指令所产生的异常通常被延迟,直到已经确定触发异常条件的指令是否需要被执行,例如在控制流路径上。可用与推测指令所指向的寄存器相关联的令牌来以信号通知延迟异常。如果推测指令触发异常,用令牌对寄存器作标记,依赖于异常指令的任何指令将该标记传送通过它的目的寄存器。如果到达检查操作,chk.s确定寄存器是否已经用令牌作了标记。如果发现令牌,表明推测指令没有正确执行,并处理异常。如果没有发现令牌,处理继续。这样,只有在指令需要执行时,延迟异常才允许推测执行指令所触发的异常发生成本。
英特尔公司的处理器系列采用一种被称作Not AThing(NaT)的令牌来实现延迟异常处理机制。如果推测指令触发异常条件或依赖于触发异常条件的推测指令,那么NaT可能是例如与被设置成特定状态的目标寄存器相关联的位(NaT位)。如果推测指令触发异常条件或依赖于触发异常条件的推测指令,那么NaT还可能是被写入目标寄存器的特定值(NaTVal)。处理器系列的整数和浮点寄存器分别使用NaT位和NaT值来表示延迟异常。
对于本发明的一个实施例,修改异常延迟机制,通过推测装载指令来延迟处理高速缓存未命中。高速缓存未命中不是异常,但相当于处理器硬件在不中断或向操作系统发出通知的情况下处理的微体系结构事件。在下面的讨论中,用于表示微体系结构事件的NaT被称作自发NaT以将其与表示异常的NaT区分开来。
表2说明相对于不具有高速缓存未命中延迟机制的控制推测,带有高速缓存未命中延迟机制的控制推测的性能增益/损耗。如表1中一样,条目分别表示3个和12个时钟周期的静态增益和高速缓存未命中惩罚,假定安排从属的加法在推测装载后2个时钟周期执行以考虑到2个时钟周期的高速缓存等待时间。
影响延迟机制的相对增益的两个额外因素是确定所针对的数据是否在高速缓存中所需的时钟周期数目(延迟损耗)和在NT分支上高速缓存未命中的情况下执行恢复例程所需的时钟周期数目(恢复损耗)。对于表2,假定高速缓存中的数据的存在可在推测装载的2个时钟周期内确定。因为从属的加法被安排在装载后两个时钟周期执行,在这种情况下,不产生额外的停止并且延迟损耗为零。如果该确定超过2个时钟周期,从属加法将停止额外的周期,这表示成延迟惩罚。恢复损耗被假定为15个时钟周期。
表2给出所公开的高速缓存未命中延迟机制所提供的相对增益(损耗)。表2中使用的所有惩罚值只用于说明。如下面所讨论的,可以应用不同值,如果不是这些结果,损耗/利益分析的实质保持不变。
表2
延迟 | 高速缓存命中/未命中 | 分支TK/NT | 增益(损耗) | |
1 | 是 | 命中 | NT | 0 |
2 | 是 | 未命中 | NT | (18) |
3 | 是 | 命中 | TK | 0 |
4 | 是 | 未命中 | TK | 10 |
因为延迟机制只有在高速缓存未命中时调用,对于命中高速缓存的推测装载没有性能影响。这样,在高速缓存命中时,相对于没有延迟的控制推测,带有延迟的控制推测的增益是零,与分支的TK/NT状态无关(条目1和3)。
对于高速缓存中推测装载没有命中的情况,带有和不带有延迟的控制推测的相对增益是显然的。不管分支是NT还是TK,推测装载上的高速缓存未命中的非延迟处理引起10个时钟周期惩罚。如上所述,不能完全消除高速缓存未命中,但由稍后被确定为不在控制流路径上的推测指令为高速缓存未命中所产生的10个时钟周期惩罚特别浪费。
在推测装载上由高速缓存未命中的延迟处理所提供的益处取决于延迟惩罚(如果有)和恢复惩罚。对于表2,没有评估用于延迟处理的延迟惩罚,因为检测高速缓存未命中所需的时钟周期数目被假定为不大于推测装载和使用之间的延迟,例如在此例子中是2个时钟周期。
如果分支是TK,高速缓存未命中的延迟处理只引起延迟惩罚,其在上述例子中是零。这样,在TK分支上的高速缓存未命中的延迟处理相对于非延迟高速缓存未命中处理(条目4)提供10个时钟周期的增益。如果分支是NT,推测指令对于程序流是必需的,并且延迟处理引起15个时钟周期恢复惩罚。例如,可通过将控制转给恢复代码来处理高速缓存未命中,恢复代码再执行推测装载和依赖于它的任何推测指令。这样,在所公开的实施例中,在NT分支上的高速缓存未命中的延迟处理相对于非延迟处理(条目4)提供18个时钟周期的损耗。这18个时钟周期包括用于由chk.s所触发的未命中处理程序的15个周期加上3个周期用来重复推测代码。12个周期的高速缓存未命中被消除。
对于一个实施例,如果调用恢复例程(高速缓存未命中后面是NT分支),延迟机制可发出预取请求来降低装载等待时间。一检测到高速缓存未命中,预取请求就发起从存储器层次结构中目标数据的返回,而不是等待调用恢复代码。这使预取的等待时间与在推测装载之后的操作的等待时间相交迭。如果随后调用恢复代码,则由于数据请求的较早发起,恢复代码将较快地执行。可以使用非故障预取来避免处理预取所触发的任何异常的开支。
对于说明的惩罚和增益值,相对于不具有延迟机制的控制推测,具有所公开的延迟机制和预取的控制推测的净开支/收益如下:
(-15)-(3)+12=6 在NT分支上每个高速缓存未命中的周期损耗
(0)-(-10)=10 在TK分支上每个高速缓存未命中的周期增益
这样,包括预取机制将表2中的条目2从18个周期减少到6个周期。这样,通过控制推测与所公开的延迟结合所提供的净收益取决于分支行为、高速缓存未命中的频率和所应用的各种惩罚(恢复、停止、延迟)。例如,当高速缓存未命中惩罚较高时,由延迟机制提供的好处发生在较低的高速缓存未命中频率上。类似地,如果用于给推测指令加标志(延迟惩罚)和执行恢复代码(恢复惩罚)的惩罚之和不大于停止惩罚,使用延迟机制的控制推测比不使用该机制的控制推测具有较好的性能,不管高速缓存未命中频率等如何。
如果延迟和恢复惩罚之和大于停止惩罚,权衡取决于延迟惩罚和其产生和放弃(被TK分支跟随的高速缓存未命中)的频率与恢复惩罚和其所发生的频率(被NT分支跟随的高速缓存未命中)。如下面所论述的,对于给定的恢复和延迟惩罚,处理器设计者可以选择实现高速缓存未命中延迟的条件,以确保在NT情况下高速缓存未命中延迟的否定可能性几乎是零。在整个系统中,可以通过对于所有ld.s的单拭探法或根据每个装载采用暗示来作出关于何时延迟高速缓存未命中的决定。通常,延迟机制的下降趋势潜力越小,高速缓存未命中的等待时间就越长。通过选择适当的用于实现高速缓存未命中延迟的高速缓存级,可充分地消除这种下降趋势。
给出由所公开的延迟机制提供的开支/收益与各种参数、如高速缓存中未命中率、在数据的随后使用中与未命中相关联的停止惩罚等的相关性,这可有助于在是否调用延迟机制上提供某些灵活性。对于一个实施例,如果推测装载在特定的高速缓存级中没有命中,则可调用延迟机制。在如图1的计算系统中,具有两级高速缓存,如果推测装载在这些高速缓存中的特定一个中没有命中,如高速缓存140,则推测装载可能产生自发NaT。
高速缓存级特定延迟还可以设成可编程的。例如,在的指令集体系结构(ISA)中推测装载指令包括可用于指示在其中期望找到数据的高速缓存层次结构中某一级的暗示字段。对于本发明的另一个实施例,这种暗示信息可用于指示为其高速缓存未命中触发延迟机制的高速缓存级。由暗示所表明的高速缓存级中的未命中可能触发自发NaT。
图3是表示按照本发明的方法300的另一个实施例的流程图。方法300由推测装载的执行310来启动。如果推测装载在指定的高速缓存中命中320,方法300等候分支指令的决定330。如果推测装载在指定的高速缓存级中未命中320,用延迟令牌、例如自发NaT将它的目标寄存器作标记324,并且发出预取请求328。令牌可被传送通过依赖于推测装载的任何推测指令的目的寄存器。
如果采用分支(TK)330,在分支的目的地址上的指令继续执行340。在这种情况下,推测装载的结果是不需要的,所以不产生额外的惩罚。如果没有采取分支,检查推测装载350。例如,推测装载所针对的寄存器中的值可与为NaT指定的值相比较,或者可读取NaT位的状态。如果未检测到延迟令牌360,由推测执行指令所返回的结果是正确的,并且继续执行370跟在装载检查后面的指令。
如果检测到延迟令牌360,执行高速缓存未命中处理程序380。该处理程序可包括装载和任何已安排用于推测执行的从属指令。通过预取减少了用于非推测装载的等待时间(块328),该预取发起来自存储器层次结构的较高级的目标数据的返回以响应高速缓存未命中。
除了选择为其延迟推测装载未命中的高速缓存级外,对于某些使用推测装载的代码段,使高速缓存未命中延迟机制禁用可能是符合需要的。例如,关键代码段、如操作系统和其它低级系统软件通常需要确定的行为。控制推测引入不确定性,因为由推测执行指令所触发的异常条件可能导致也可能不导致相应异常处理程序的执行,这取决于程序控制流。
只要这种关键代码段确保异常处理程序从不(或总是)被执行以响应推测装载异常而不管守卫分支指令怎样决定,那么为了性能,这些关键代码段可能仍使用推测装载。例如,关键代码段可以在从来不触发异常的条件下执行推测装载,或者它可使用令牌本身来控制程序流。相关情况是用于使用推测装载以避免与嵌套故障相关联的开销的Itanium处理器系列的异常处理程序。
对于Itanium处理器系列,对应于TLB未命中异常的处理程序必须从虚拟硬件页面表(VHPT)中装载地址变换。如果处理程序执行非推测装载到VHPT,这个装载可能出错,留给系统去管理与嵌套故障相关联的开销。用于TLB故障的高性能处理程序执行推测装载到VHPT,并通过执行测试NaT指令(TNaT)来测试目标寄存器的NaT。如果推测装载返回NaT,处理程序可以转移到可选代码段以解决页面表故障。这样,TLB未命中异常处理程序决不执行由推测装载所产生的对于VHPT未命中的VHPT未命中异常处理程序。
因为所公开的高速缓存未命中延迟机制的实施例可能触发延迟的类似异常的行为,所以它们还可能破坏关键代码段的确定性执行。由于这种延迟机制由微体系结构事件所驱动,所以对于非确定性行为的机会可能更大。
本发明的另一个实施例支持软件控制下的高速缓存未命中延迟的禁用,但不妨碍在关键代码段中推测装载的使用或者在适当位置的安全装置以防止非确定性行为。使用Itanium体系结构来说明此实施例,其通过各种系统寄存器中的字段来控制异常延迟的各方面。例如,处理器状态寄存器(PSR)保持用于当前执行的过程的执行环境,例如控制信息;控制寄存器捕获中断时处理器的状态;TLB存储最近使用的虚拟-物理地址转换。受益于本公开的本领域的技术人员将认识到将这个机制应用到其它处理器体系结构所需的修改。
为Itanium处理器启用延迟异常处理的条件由下面的逻辑式来表示:
!PSR.ic‖(PSR.it && ITLB.ed && DCR.xx)
异常是延迟的第一条件由处理器状态寄存器(PSR.ic)中的中断收集位(ic)的状态来控制。如果PSR.ic=I,当中断发生时,更新各种寄存器以反映处理器状态,并且将控制传递给中断处理程序,即中断没有被延迟。如果PSR.ic=0,则不保存处理器状态。如果发生中断而没有保存处理器状态,系统在多数情况下将会崩溃。因此,设计操作系统以便在PSR.ic=0时,不触发异常。
如果关键代码还提供备选机制来确保不产生中断,那么关键代码可包括具有PSR.ic=0(中断状态收集禁用)的推测装载。在前面的例子中,如果检测到NaT,这通过测试转移到不同代码段的NaT位来完成。
异常延迟的第二个条件发生在:(1)启用地址转换(PSR.it=1);ITLB表明恢复代码是可得到的(ITLB.ed=1);以及控制寄存器表明异常对应于启用延迟(DCR.xx=1)时的一个。第二个条件是常规应用到包括控制推测的应用级代码的条件。
为了保持关键代码段对推测装载的使用,当对所选择的应用级程序启用高速缓存未命中延迟时,高速缓存未命中延迟可能通过下面的逻辑式被启用:
(PSR.ic && PSR.it && ITLB.ed)
该条件确保高速缓存未命中延迟在异常延迟被无条件启用的那些条件下不被启用,例如PSR.ic=0。对于应用代码,当根据PSR.it、ITLB.ed和PSR.ic的状态启用高速缓存未命中延迟时,根据PSR.it、ITLB.ed和DCR中相应异常位的状态来启用异常延迟。
已经提供了用于限制高速缓存未命中在控制推测上的潜在性能惩罚的机制,以支持控制推测更广泛的使用。该机制通过推测装载检测高速缓存未命中并用延迟令牌标记由推测装载所指向的寄存器。可对目标数据发出非故障预取以响应高速缓存未命中。只有当需要推测装载的结果时,才执行检查延迟令牌的操作。如果执行检查操作并且检测到延迟令牌,则恢复代码处理高速缓存未命中。如果没有执行检查操作,或执行了但没有检测到延迟令牌,则不执行恢复代码。对于未命中指定的高速缓存级,可触发延迟机制,对于所选的代码序列,该机制可能完全被禁用。
针对在高速缓存中推测装载未命中时调用延迟机制的情况说明了本发明,但本发明也可用于由可能具有重大性能问题的推测指令所触发的其它微体系结构事件。本发明仅受所附权利要求的实质和范围的限制。
Claims (16)
1.一种用于处理推测装载的方法,包括:
发出推测装载;
如果推测装载在高速缓存中命中,则向推测装载所针对的寄存器返回数据值;
如果推测装载在高速缓存中未命中,则用延迟令牌给目标寄存器作标记;以及
一旦推测装载在高速缓存中未命中,便发出非故障预取;
其中,推测装载的对象包括操作数;
如果分支没有被采用,则响应检查操作来检测所述延迟令牌;以及
响应所述检测而调用例程来执行对应于推测装载的装载,其中,所述装载的等待时间通过非故障预取来降低。
2.如权利要求1所述的方法,其特征在于,发出预取指令包括将推测装载转换成预取。
3.如权利要求1所述的方法,其特征在于,标记目标寄存器还包括:
将推测装载的暗示字段中为推测装载指明的高速缓存级与一个高速缓存级相比;以及
如果这些级匹配,则标记目标寄存器。
4.如权利要求1所述的方法,其特征在于,延迟令牌是位值,并且标记目标寄存器包括把与目标寄存器相关联的位字段设置为所述位值。
5.如权利要求1所述的方法,其特征在于,延迟令牌是第一个值,并且标记目标寄存器包括将第一个值写入目标寄存器。
6.如权利要求1所述的方法,其特征在于,标记目标寄存器包括如果高速缓存未命中延迟被启用并且推测装载在高速缓存中未命中,则用延迟令牌来标记目标寄存器。
7.一种系统,包括:
高速缓存;
寄存器文件;
执行核;以及
存储器,存储可被执行核处理的指令,从而:
向高速缓存发出推测装载;以及
如果推测装载在高速缓存中未命中,则标记由推测装载所针对的寄存器文件中的寄存器,
其中,一旦推测装载在高速缓存中未命中,执行核便处理所存储的指令,以向推测装载所针对的地址发出非故障预取;
推测装载的对象包括操作数;
如果分支没有被采用,则响应检查操作来检测延迟令牌;以及
响应所述检测而调用例程来执行对应于推测装载的装载,其中,所述装载的等待时间通过非故障预取来降低。
8.如权利要求7所述的系统,其特征在于,通过向相关联的位写入第一个值来标记寄存器,响应推测装载在高速缓存中未命中。
9.如权利要求7所述的系统,其特征在于,通过向寄存器写入第二个值来标记寄存器,响应推测装载在高速缓存中未命中。
10.如权利要求7所述的系统,其特征在于,高速缓存包括至少第一和第二级高速缓存,并且如果推测装载在第一和第二级高速缓存中指定的一个中未命中,则标记目标寄存器。
11.如权利要求7所述的系统,其特征在于,如果高速缓存未命中延迟机制被启用并且推测装载在高速缓存中未命中,则标记推测装载所针对的寄存器文件。
12.一种方法,该方法包括:
执行第一推测操作;
如果所述执行触发与高速缓存未命中相对应的微体系结构事件,则将延迟令牌与第一推测操作相关联,
一旦第一推测操作在高速缓存中未命中,便向第一推测操作所针对的地址发出非故障预取请求,其中,所述第一推测操作是推测装载操作;
其中,推测装载的对象包括操作数;
如果分支没有被采用,则响应检查操作来检测所述延迟令牌;以及
响应所述检测而调用例程来执行对应于推测装载的装载,其中,所述装载的等待时间通过非故障预取来降低。
13.如权利要求12所述的方法,其特征在于,高速缓存中的未命中是微体系结构事件。
14.如权利要求13所述的方法,其特征在于,关联延迟令牌包括如果推测装载操作在高速缓存中未命中并且启用高速缓存未命中延迟,则将延迟令牌与推测装载操作相关联。
15.如权利要求13所述的方法,其特征在于,还包括在将延迟令牌与推测装载操作相关联之前,读取控制寄存器以确定是否启用延迟机制。
16.如权利要求15所述的方法,其特征在于,还包括:
执行依赖于所述第一推测操作的第二推测操作;以及
如果延迟令牌与所述第一推测操作相关联,则将延迟令牌与所述第二推测操作相关联。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/327,556 US20040123081A1 (en) | 2002-12-20 | 2002-12-20 | Mechanism to increase performance of control speculation |
US10/327,556 | 2002-12-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1726460A CN1726460A (zh) | 2006-01-25 |
CN100480995C true CN100480995C (zh) | 2009-04-22 |
Family
ID=32594285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003801065592A Expired - Fee Related CN100480995C (zh) | 2002-12-20 | 2003-12-04 | 提高控制推测的性能的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20040123081A1 (zh) |
JP (1) | JP4220473B2 (zh) |
CN (1) | CN100480995C (zh) |
AU (1) | AU2003300979A1 (zh) |
WO (1) | WO2004059470A1 (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040154010A1 (en) * | 2003-01-31 | 2004-08-05 | Pedro Marcuello | Control-quasi-independent-points guided speculative multithreading |
US7168070B2 (en) * | 2004-05-25 | 2007-01-23 | International Business Machines Corporation | Aggregate bandwidth through management using insertion of reset instructions for cache-to-cache data transfer |
US8443171B2 (en) * | 2004-07-30 | 2013-05-14 | Hewlett-Packard Development Company, L.P. | Run-time updating of prediction hint instructions |
WO2007138124A1 (es) * | 2006-05-30 | 2007-12-06 | Intel Corporation | Método aparato y sistema aplicado en un protocolo de coherencia de una memoria cache |
US7590826B2 (en) * | 2006-11-06 | 2009-09-15 | Arm Limited | Speculative data value usage |
US8065505B2 (en) * | 2007-08-16 | 2011-11-22 | Texas Instruments Incorporated | Stall-free pipelined cache for statically scheduled and dispatched execution |
US20100077145A1 (en) * | 2008-09-25 | 2010-03-25 | Winkel Sebastian C | Method and system for parallel execution of memory instructions in an in-order processor |
US8683129B2 (en) * | 2010-10-21 | 2014-03-25 | Oracle International Corporation | Using speculative cache requests to reduce cache miss delays |
WO2013095392A1 (en) * | 2011-12-20 | 2013-06-27 | Intel Corporation | Systems and method for unblocking a pipeline with spontaneous load deferral and conversion to prefetch |
US8832505B2 (en) | 2012-06-29 | 2014-09-09 | Intel Corporation | Methods and apparatus to provide failure detection |
GB2501582B (en) * | 2013-02-11 | 2014-12-24 | Imagination Tech Ltd | Speculative load issue |
GB2519108A (en) * | 2013-10-09 | 2015-04-15 | Advanced Risc Mach Ltd | A data processing apparatus and method for controlling performance of speculative vector operations |
US20160011874A1 (en) * | 2014-07-09 | 2016-01-14 | Doron Orenstein | Silent memory instructions and miss-rate tracking to optimize switching policy on threads in a processing device |
US20200372129A1 (en) * | 2018-01-12 | 2020-11-26 | Virsec Systems, Inc. | Defending Against Speculative Execution Exploits |
JP7041353B2 (ja) * | 2018-06-06 | 2022-03-24 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10860301B2 (en) | 2019-06-28 | 2020-12-08 | Intel Corporation | Control speculation in dataflow graphs |
US11176055B1 (en) | 2019-08-06 | 2021-11-16 | Marvell Asia Pte, Ltd. | Managing potential faults for speculative page table access |
US11403394B2 (en) * | 2019-09-17 | 2022-08-02 | International Business Machines Corporation | Preventing selective events of a computing environment |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6314513B1 (en) * | 1997-09-30 | 2001-11-06 | Intel Corporation | Method and apparatus for transferring data between a register stack and a memory resource |
US5915117A (en) * | 1997-10-13 | 1999-06-22 | Institute For The Development Of Emerging Architectures, L.L.C. | Computer architecture for the deferral of exceptions on speculative instructions |
US6016542A (en) * | 1997-12-31 | 2000-01-18 | Intel Corporation | Detecting long latency pipeline stalls for thread switching |
US6988183B1 (en) * | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
US6253306B1 (en) * | 1998-07-29 | 2001-06-26 | Advanced Micro Devices, Inc. | Prefetch instruction mechanism for processor |
US6463579B1 (en) * | 1999-02-17 | 2002-10-08 | Intel Corporation | System and method for generating recovery code |
US6871273B1 (en) * | 2000-06-22 | 2005-03-22 | International Business Machines Corporation | Processor and method of executing a load instruction that dynamically bifurcate a load instruction into separately executable prefetch and register operations |
US6829700B2 (en) * | 2000-12-29 | 2004-12-07 | Stmicroelectronics, Inc. | Circuit and method for supporting misaligned accesses in the presence of speculative load instructions |
JP3969009B2 (ja) * | 2001-03-29 | 2007-08-29 | 株式会社日立製作所 | ハードウェアプリフェッチシステム |
US7028166B2 (en) * | 2002-04-30 | 2006-04-11 | Advanced Micro Devices, Inc. | System and method for linking speculative results of load operations to register values |
-
2002
- 2002-12-20 US US10/327,556 patent/US20040123081A1/en not_active Abandoned
-
2003
- 2003-12-04 CN CNB2003801065592A patent/CN100480995C/zh not_active Expired - Fee Related
- 2003-12-04 WO PCT/US2003/040141 patent/WO2004059470A1/en active Application Filing
- 2003-12-04 AU AU2003300979A patent/AU2003300979A1/en not_active Abandoned
- 2003-12-04 JP JP2004563645A patent/JP4220473B2/ja not_active Expired - Fee Related
Non-Patent Citations (3)
Title |
---|
Computer Architecture News,Association for Computing Machinery. Ando H.. et al,126-137,Unconstrained Speculative Execution with PredicatedStateBuffering. 1995 Computer Architecture,1998.Proceedings.The 25th Annual International Symposium on Barcelona.. August D. I. et al,227-237,Integrated Predicated and Speculative Execution intheIMPACT EPIC Architecture. 1998 |
Computer Architecture News,Association for Computing Machinery. Ando H.. et al,126-137,Unconstrained Speculative Execution with PredicatedStateBuffering. 1995 * |
Computer Architecture,1998.Proceedings.The 25th Annual International Symposium on Barcelona. August D.I.et al,227-237,Integrated Predicated and Speculative Execution intheIMPACT EPIC Architecture. 1998 * |
Also Published As
Publication number | Publication date |
---|---|
AU2003300979A1 (en) | 2004-07-22 |
JP2006511867A (ja) | 2006-04-06 |
WO2004059470A1 (en) | 2004-07-15 |
US20040123081A1 (en) | 2004-06-24 |
CN1726460A (zh) | 2006-01-25 |
JP4220473B2 (ja) | 2009-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100480995C (zh) | 提高控制推测的性能的方法和系统 | |
US6061710A (en) | Multithreaded processor incorporating a thread latch register for interrupt service new pending threads | |
JP6095670B2 (ja) | コンピュータ・システム内のオペランド活性情報の維持 | |
US6256775B1 (en) | Facilities for detailed software performance analysis in a multithreaded processor | |
Krishnan et al. | A chip-multiprocessor architecture with speculative multithreading | |
Kessler | The alpha 21264 microprocessor | |
McNairy et al. | Itanium 2 processor microarchitecture | |
Borkenhagen et al. | A multithreaded PowerPC processor for commercial servers | |
US9483267B2 (en) | Exploiting an architected last-use operand indication in a system operand resource pool | |
CN100538629C (zh) | 处置分支误预测的处理器和方法 | |
US6965982B2 (en) | Multithreaded processor efficiency by pre-fetching instructions for a scheduled thread | |
US7133969B2 (en) | System and method for handling exceptional instructions in a trace cache based processor | |
US6694425B1 (en) | Selective flush of shared and other pipeline stages in a multithread processor | |
EP1570352B1 (en) | Method and apparatus for switching between processes | |
KR101529846B1 (ko) | 원자 영역에서 조건부 커미트를 위한 결정 메카니즘 제공 장치, 방법, 및 시스템 | |
US9690589B2 (en) | Computer instructions for activating and deactivating operands | |
JP2013537334A (ja) | ハードウェア制限に基づく調整可能なトランザクション・サイズを利用してコードを動的に最適化する装置、方法およびシステム | |
US6598156B1 (en) | Mechanism for handling failing load check instructions | |
US5996085A (en) | Concurrent execution of machine context synchronization operations and non-interruptible instructions | |
CA2271533C (en) | Distributed instruction completion logic | |
US10901936B2 (en) | Staged power on/off sequence at the I/O phy level in an interchip interface | |
Ceze et al. | CAVA: Hiding L2 misses with checkpoint-assisted value prediction | |
Roesner et al. | Counting dependence predictors | |
US6851044B1 (en) | System and method for eliminating write backs with buffer for exception processing | |
Yanagawa et al. | Complexity analysis of a cache controller for speculative multithreading chip multiprocessors |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090422 Termination date: 20131204 |