不对准存储器存取预测的制作方法

文档序号:6567032阅读:165来源:国知局

专利名称::不对准存储器存取预测的制作方法
技术领域
:本发明大体上涉及处理器领域,且明确地说涉及预测管线处理器中的不对准存储器存取。
背景技术
:便携式电子装置已变得普遍。便携式电子装置的两个趋势是功能性增加和尺寸减小。功能性增加是由较快且更强大的处理器所提供的增加的计算能力推动的。除了提供高级特征和功能性,便携式电子装置自身的尺寸和重量不断縮减。此縮减趋势的一个影响是用于向装置中的处理器和其它电子元件供电的电池的尺寸不断减小。尽管电池技术提高部分抵销了所述问题,但电池尺寸减小对所有便携式电子装置电子元件强加严格的功率预算。便携式电子装置的功率预算的相当大部分是由处理器消耗的功率。因此,提高性能且减少功率消耗的处理器改进对于例如便携式电子装置的许多应用来说是理想的。通常现代处理器采用管线结构,其中顺序指令(其每一者具有多个执行步骤)在执行上重叠。为了获得最大性能,指令应连续流动通过管线。导致指令从管线冲洗出且随后重新开始的任何情形均可能不利地影响性能和功率消耗两者。某些管线资源(例如,用于指令状态和追踪的队列位置)在指令进入管线时被分派。如果稍后在管线中发现单个指令需要比最初分派的资源更多的资源,那么可能需要冲洗随后指令以允许将它们的资源重新分派给需要所述资源的指令。从存储器加载未对准数据或将未对准数据存储到存储器的存储器存取指令是可能需要比最初分派到的管线资源更多的管线资源的指令的一个实例,可能直到在管线深处才发现指令需要更多管线资源。未对准数据是在存储于存储器中时越过预定存储器边界(例如,字或半字边界)的那些数据。由于在逻辑上构造和寻址存储器以及在物理上将存储器耦合到存储器总线的方式的缘故,通常不能在单个周期中读取或写入越过存储器边界的数据。事实上,可能需要两个连续总线周期---个用以读取或写入边界一侧的数据,且另一个用以读取或写入剩余数据。对于不对准数据的存储器存取指令一一即加载或存储指令一一必须在管线中产生额外指令步骤或微操作,以执行不对准数据所需的额外存储器存取。然而,在执行级处,直到知道存储器存取的有效地址和数据大小(这可能仅发生在管线深处)时才能确定数据的对准。当产生有效地址且发现数据未对准时,可能存在不足以用于产生微操作来执行第二存储器存取的管线控制资源。在此类未对准的情况下,管线必须被冲洗出至少所有随后指令,以释放这些资源。接着必须在管线中重新取出并重新执行所述冲洗出的指令,从而使处理器性能降级且浪费了功率。
发明内容可在管线中早期在指令的有效地址产生之前预测存储器存取指令的数据未对准。可分派管线资源且控制管线以创建第二微操作。根据未对准数据的需要,利用所述第二微操作来执行第二存储器存取周期。本发明在一个实施例中涉及一种在指令执行管线中处理存储器存取指令的方法。预测存储器存取指令的未对准,且在针对存储器存取指令产生有效地址之前,响应于所述预测在管线中产生至少一个微操作,所述微操作针对未对准数据执行第二存储器存取。在另一实施例中,本发明涉及一种管线处理器。所述处理器包括包含多个管级的指令执行管线,和产生存储器存取指令将存取未对准数据的预测的未对准预测器。所述处理器另外包括控制逻辑,其在针对存储器存取指令产生有效地址之前,响应于所述预测在管线中针对存储器存取指令产生额外微操作。图1是处理器的功能方框图。图2是存储器组织的图。图3是处理器管线的一部分的功能方框图。具体实施方式管线技术是一种处理器实施技术,借此多个指令在执行时同时重叠。典型结构中的每一指令通常&多个执行步骤来执行,所述执行步骤例如取出、解码、一个或一个以上执行步骤、存储器存取和反写。处理器管线包含多个"管级"。每一管级(其通常包含逻辑和存储装置)完成指令的执行步骤或执行步骤的一部分。所述管级耦合在一起以形成管线。指令进入管级,且在所述管级中被连续处理。在先前指令完成执行之前,额外指令进入管线——因此,可在任何给定时间在管线内处理多个指令。这种在顺序指令流中的指令间开发并行性的能力显著有助于改进处理器性能。在理想条件下且在在一个周期中完成每个管级的处理器中,在填充管线的简短初始过程之后,指令可在每个周期中完成执行。由于包括指令间的数据相依性(数据危险)、例如分支的控制相依性(控制危险)、处理器资源分派冲突(结构危险)、中断、高速缓冲存储器未中等的多种因素的缘故,实际上很少实现此类理想条件。另外,某些指令可能需要通过一个或一个以上所述管级一次以上。在此情况下,处理器可为所述指令产生多个微操作。如本文所使用,微操作是一种逻辑实体,其每次占据一个管级且流动穿过管线。理想地,大多数指令包含管线中的单个微操作(以接近每个周期一个指令的目标)。然而,指令可包含两个或两个以上微操作,或者可分裂成两个或两个以上,其每一者依序流动穿过管线。一种形式的结构管线危险由未对准的存储器存取产生。在执行级期间,许多存储器存取指令计算有效存储器地址_一即从其处加载数据或数据被存储到的地址。然而,在解码级期间,将处理器资源一一明确地说,向指令分派管级和穿过管线追踪指令的管线控制资源_一分派到加载或存储指令。在字、半字或其它预定地址边界上对准存储器地址的常见情况下,可在单个管级中执行加载或存储操作(但在从存储器检索数据时可暂停管线)。如果存储器存取指令针对于越过预定地址边界的数据,那么需要两个加载或存储操作,从而需要执行管线中的两个微操作。然而,很可能在解码级中仅将一个微操作分派给所述加载或存储。需要在管线的执行级中产生新的微操作存在问题。在管线资源被完全分派的情况下,需要新的微操作将造成异常,从而需要从管线中冲洗出随后所有的指令以释放必需的管线控制资源。图1描绘处理器10的功能方框图。所述处理器10根据控制逻辑14在指令执行管线12中执行指令,所述控制逻辑14可包括指令执行FIFO15。所述管线包括各种寄存器或锁存器器16(其以管级形式组织)和一个或一个以上算术逻辑单元(ALU)18。通用寄存器(GPR)文件20提供组成存储器层级的顶部的寄存器。管线从指令高速缓冲存储器22中取出指令,其中存储器寻址和许可由指令侧转译后备缓冲器(ITLB)24管理。从数据高速缓冲存储器26存取数据,其中存储器寻址和许可由主转译后备缓冲器(TLB)28管理。在各种实施例中,ITLB可包含TLB的一部分的副本。或者,ITLB和TLB可集成。类似地,在处理器10的各种实施例中,I高速缓冲存储器22和D高速缓冲存储器26可集成或联合。I高速缓冲存储器22和/或D高速缓冲存储器26中的未中造成在存储器接口30的控制下对主(芯片外)存储器32的存取,所述存储器接口30可包括高速缓冲存储器未中处理队列29。处理器10可包括输入/输出(I/O)接口34,其控制对各种外围装置36的存取。所属领域的技术人员将认识到可能对处理器IO作出多种变化。举例来说,处理器10可包括针对I和D高速缓冲存储器中的任一者或两者的第二级别(L2)高速缓冲存储器。另外,可在特定实施例中省略处理器10中所描绘的功能块中的一者或一者以上。以下表1描绘代表性管线操作的图。所述代表性结构中的指令以六个步骤执行IF—指令取出ID—指令解码EX1—执行(取出用于存储器存取指令的地址操作数)EX2—执行(针对存储器存取指令的有效地址计算)MEM—存储器存取WB—反写<table>tableseeoriginaldocumentpage8</column></row><table>表1:代表性管线操作如果每一管级以一个周期执行,且如果不存在管线停止、危险或中断,那么从周期6到10,在每一周期中完成一个指令并执行其结果的反写。时钟周期1到4代表填充管线的初始化过程,其(例如)在管线的复位、上下文切换、中断或任何其它冲洗之后执行。由于额外指令跟随第!'+4指令,因而在理想情况下可无限期地继续每个周期一个指令的执行。表1的管线结构仅仅是代表性的。在任何给定处理器实施方案中,管线可包括针对任何指令步骤的任何数目的管级。加载(LD)和存储(ST)指令存取存储器以分别读取和写入数据。存储器经组织以每次同时存取预定量的数据。图2是电子装置中的一个存储器结构的方框图,其包括处理器IO、总线31和存储器32。在此实例中,总线31为32位宽,且存储器32(其可包含(例如)处理器中的高速缓冲存储器或芯片外RAM)在字(32位)边界上对准。如所属领域的技术人员将容易了解,可实施多种不同的总线和存储器结构,其具有相应的不同数据对准边界。作为不对准存储器存取的实例,图2描绘由LD指令以有效开始字节地址OxOA读取的存储器,和具有三个字节的尺寸字段。对于字对准的存储器32,不能在一个总线周期中从存储器读取此数据。事实上,处理器10必须首先读取在0x08处开始的全字(遮蔽字节0x08和0x09),且接着读取在OxOC处开始的全字(遮蔽字节OxOD到OxOF)。在具有双字存储器对准和64位总线的系统中,可在单个周期中读取此数据;然而,不可读取在0x07处开始的3字节数据。一般来说,任何现实总线31和存储器32配置可引起不对准存储器存取的问题。因为不对准数据需要两个总线周期,所以针对不对准数据的存储器存取指令(本文中称为"不对准存储器指令")将导致在执行级中创建两个微操作。举例来说,如果表l中第/+3个指令是不对准存储器存取指令,那么管线将如以下表2中描绘而执行。<table>tableseeoriginaldocumentpage9</column></row><table>表2:具有不对准存储器存取指令的代表性管线在EX2级期间,在时钟周期7中确定存储器存取指令!'+3的有效地址。只有在此刻,处理器控制逻辑才可确定有效存储器存取是不对准的一一也就是说,其越过预定存储器边界且不能在单个总线周期中存取。如果足够的管线资源可用,那么处理器将为存储器存取指令产生额外的微操作(表2中"genpop"),指示为("3)2。最初分派的微操作和新的微操作接着依序前进通过剩余管线。初始微操作(已在EX2处计算第一存储器存取的地址)接着在MEM处存取经寻址数据的第一部分,且在WB处写入数据。新创建的微操作将在时钟周期8中在EX2处计算第二存储器存取的地址(例如,通过添加一个字偏移),接着在MEM处存取经寻址数据的第二部分,且在WB处写入数据。由于指令i+3的未对准数据所需的额外微操作的缘故,指令i+4在时钟周期8中停止。为了在管线中实施此停止,必须门控针对EX1锁存器的时钟,针对EX1锁存器的输出重新循环到针对EX1锁存器的输入处的多路复用器,或者必须采用某种其它机制来保持EX1内容通过时钟周期7禾B8两者。类似地,随后指令i+5将在整个管线中在DCD锁存器等等处停止。实施此停止控制提出设计挑战,当在管线中晚期才发现需要停止时尤其如此。另外,需要针对EX2处的存储器存取指令以及针对先前管级中的其它指令"重新循环"管级会在一个或一个以上关键路径上添加多路复用器选择延迟,从而可能通过增加机器周期时间而降低性能。将可能造成管线停止的事件减到最少改进了性能。还可参看图3更详细地描述未对准存储器存取,图3是指令管线12的一部分的功能方框图。在管线中从指令高速缓冲存储器22取出LD指令并将其加载到IF锁存器40中。所述指令由解码逻辑42解码。在一个实施例中,LD通过将位于第一寄存器rl中的基地址加上位于第二寄存器r2中的偏移来计算有效地址。从所述指令中解码出所述两个寄存器rl和r2的地址以及数据的大小,且将其锁存在DCD锁存器44中。这些寄存器地址接着可将寄存器文件(例如,GPR文件20)索引,所述寄存器文件传回寄存器(指示为(rl)和(r2))的内容。将这些值存储在EX1锁存器46中,由ALU18相加,且将有效存储器地址存储在EX2锁存器48中。存储器存取接着在50处继续,从而存取数据高速缓冲存储器26。如果数据高速缓冲存储器26中发生存取未中,那么存储器存取操作50在必要时将执行地址转译,且存取芯片外存储器32,从而停止管线直到解决存储器存取为止。在任何情况下,存储器存取操作50传回不对准数据的第一部分,将其存储在MEM锁存器52中。在48处通过将(rl)和(r2)相加而产生有效地址时,控制逻辑14检查有效地址和大小字段,且第一次检测到存储器存取不对准。如果足够的处理器资源是可用的,那么有效地址在EX2锁存器48处"重新循环",如箭头54所指示。用单字偏移来更新所述地址,以为第二存储器存取产生有效地址。这向管线添加微操作;且不允许随后指令前进到EX2管级。当从第一字提取的数据沿着管线前进时,在50处存取第二字,并将其存储在MEM锁存器52中。接着可连续地将数据写入到GPR,或在适当时,将其进行组合并接着写入。注意,出于解释的目的,图3描绘管线12的每一级,在所述级中具有相关的LD指令步骤。实际上,一旦相关LD指令步骤在一管级中完成且相应的微操作移动到后续级,就将另一指令的微操作加载到所述管级中以进行处理。因此,当在48处锁存LD指令的有效地址时,先前三个管级加载有三个微操作,其可对应于多达三个不同指令。当在EX2锁存器48处产生有效地址时,如果没有足够的管线控制资源可用于如54处所描绘而循环地址且产生第二微操作以执行第二存储器存取,那么造成结构危险且将发生异常。在此情况下,必须从管线处冲洗出未对准LD指令后面的所有指令,以使得必要的控制资源可用。稍后必须重新取出这些指令并对其重新处理,从而导致性能损失且浪费与两次执行所述操作相关联的功率。必须可用于在EX2管级中创建微操作的管线控制资源可包括指令跟踪FIFO15(图1)中的条目。所述指令跟踪FIFO15包括针对每一发出指令(以编程次序)的条目。当发出相应指令时分派FIFO15中的条目,且在若干周期之后,当管线控制逻辑14确定所述指令是否具有可能造成中断的异常时,对所述条目进行更新。依次从指令跟踪FIFO15中移除条目,使每一者在已被"证实"(即,管线控制器确定指令将完成执行而不发生异常)并"确认"(即,管线控制器已认识到,其及其所有先趋者已被确认,所以显然所述指令在管线中完成执行)之后出栈。如果指令跟踪FIFO15中的每一条目对应于单个微操作,那么简化了指令跟踪FIFO15的结构和控制。另一方面,如果不对准存储器存取指令造成在管线深处(例如,在EX2管级中)产生额外微操作,那么指令跟踪FIFO15中的每一条目必须能够跟踪多个潜在微操作,从而对于每一FIFO条目增加了硬件资源和控制复杂性。此增加的复杂性和大小对于每一FIFO条目来说是需要的,但不对准存储器存取指令(晚期将需要多个微操作跟踪的仅有的指令)相对稀少。作为将指令跟踪FIFO15设计成每个条目跟踪多个微操作的替代方案,每一条目可仅跟踪一个微操作。在此情况下,晚期未对准存储器存取指令将造成管线(和指令跟踪FIFO15)冲洗出其后面的所有指令,在指令跟踪FIFO15中分派对应于两个微指令的两个条目,且重新取出并重新发出所有随后指令。这导致显著的性能和功率损失。除了指令跟踪FIFO15之外,在管线中晚期可能不可用的未对准存储器指令所必需的另一资源是高速缓冲存储器未中队列29中的条目。当数据高速缓冲存储器中发生数据存取未中时,可将所述存取放置在队列29中以存取外部总线上的主存储器。如果没有队列条目可用,那么管线必须停止。在存储器存取指令的情况下,可在DCD级期间检査高速缓冲存储器未中队列29,且如果条目可用,那么控制逻辑14允许指令前进,从而知道高速缓冲存储器未中将不会使管线12停止。然而,如果不对准存储器存取指令晚期必须在管中产生额外微操作,以执行额外存储器存取,且如果高速缓冲存储器中发生存储器存取未中,那么需要第二高速缓冲存储器未中队列条目。由于在DCD管级中仅保留一个,因而可能没有足够的队列资源可用,从而造成管线12停止。根据本发明的一个实施例,在针对存储器存取指令产生有效地址之前,预测存储器存取指令中的数据未对准,且响应于所述预测创建微操作。新的微操作执行存取未对准数据所需的第二存储器存取。这允许早期在管线中(例如,在解码指令之后立即)分派管线控制资源。再次参看图2,一旦在42处解码存储器存取指令,未对准预测器56就检测所述指令。响应于未对准预测,可立即创建第二微操作,如在IF锁存器40处"重新循环"LD指令所指示。所述第二微操作将跟随初级加载指令微操作通过管线,且将可用于在所预测的数据未对准正确时执行第二存储器存取周期。额外的微操作实际上不需要执行上文针对LD指令所描述的寄存器存取和地址产生,因为已知存储器存取的地址与具有(例如)单字偏移的LD指令的地址是相同的。在50处通过LD指令进行第一存储器存取之后,如果未对准预测是正确的,那么当第一数据存储在MEM锁存器52中时,计算读取未对准数据所必需的第二存储器存取的地址并将其存储在EX2锁存器48中。接着执行第二存储器存取,且从高速缓冲存储器26或存储器32处获得第二数据,且将其加载到MEM锁存器52中。如果未对准预测错误,那么不执行第二存储器存取,且放弃所述额外的微操作。在管线停止的情况下,LD之后的指令可前进,从而消耗经分派以用于第二微操作的资源并有效地将其从管线中移除。以下表3描绘其中指令i+3是被正确预测未对准的未对准存储器存取指令的管线。<table>tableseeoriginaldocumentpage12</column></row><table>表3:具有正确预测的不对准存储器存取指令的代表性管线响应于将指令解码为LD且预测未对准,在解码管级处在时钟周期5中产生第二微操作(!'+3)2。如此早期产生微操作(在时钟周期7处在EX2管级中计算LD指令的有效地址之前)确保足够的管线控制资源可用于微操作(/+3)2。指令执行的时序以另外方式与表2中的类似,其假定足够的资源可用于在£乂2管级中创建第二微操作(/+3)2。一个不同之是使指令i+4停止相同量,但停止在其执行序列中较早发生,因为在管线中较早产生微操作(/+3)2。如果未对准预测准确,那么精确地分派正确的管线控制资源以用于执行未对准存储器存取,且可将后续指令加载到管线中并执行而不用担心它们由于未对准的缘故而被冲洗。如果未对准预测错误,那么处理器性能和功率管理降低。然而,性能的降级不是对称的。以下表4描绘对于未对准预测准确性可能性的相关性能和功率影响。预测实际影响注释对准对准最佳这是普遍情况,且将在99+%应用中发生对准未对准可能极坏如果没有足够的资源可用于产生微操作,那么必定造成异常且冲洗管未对准对准不利单级管气泡——在DCD处创建的非必要微操作未对准未对准最佳确保足够的资源可用于必需的微操作表4:未对准预测准确性的影响经正确预测的情况通过根据充分执行指令需要的那样精确地将所需数目的微操作分派到存储器存取指令来提供最佳性能。上文描述了预测为对准但实际上未对准的错误预测情况,其中直到针对存储器存取指令产生有效地址(在上述实例中在EX2管级中)才检验数据对准。如所论述,如果足够的管线控制资源可用,那么唯一的性能降级是完成所述存储器存取指令之后的指令的等待时间增加,因为创建了微操作以执行第二存储器存取操作。然而,如果没有足够的管线控制资源可用,那么将发生异常,且管线12将冲洗出加载于存储器存取指令之后的所有指令,以释放用以创建和管理额外微操作的必要资源。这是性能和功率优化方面的最坏可能性。预测为未对准但实际上对准的错误预测情况在管线12中在存储器存取指令之后产生多余的微操作或"气泡"。一旦产生存储器存取指令的有效地址且控制逻辑14可检测到其实际上是对准的,那么可放弃所述多余的微操作。如果(例如)高速缓冲存储器26中发生存储器存取指令未中,从而迫使存取芯片外存储器32,那么将停止管线12以等待完成存储器存取操作。如果所产生的微操作后面的另一指令在EX1或EX2管级中不遭遇任何危险,那么其可前进到恰好在存储器存取指令后面,从而使得气泡消失。在此情况下,尽管浪费了某些功率来创建和管理微操作,但没有性能降级。在高速缓冲存储器26中发生存储器存取指令命中(且管线12另外不停止)的更可能的情况下,气泡将流动通过管线12,从而造成单周期性能降级(假定每个管级一个周期)。然而,错误预测的未对准将不会造成异常或由于缺少必要控制资源而冲洗管线12。可以各种其它方式来执行未对准预测,本文中揭示了某些方式。然而,本发明不限于所揭示的特定未对准预测算法。预测(以任何方式)存储器存取指令的未对准和在产生指令的有效地址之前响应于所述预测产生微操作以存取未对准数据属于本发明的范围内。在未对准数据存取是常见的情况下,合理的微小未对准预测算法可能只是假定未对准,且始终在针对存储器存取指令产生有效地址之前产生额外微操作。这将以每个实际上对准的存储器存取一个周期的执行性能冲击为代价保证不会由于未对准的缘故而造成异常或管线冲洗。根据本发明的一个实施例,"预测未对准"模式由控制寄存器中的位界定。当应用预期较大数目的未对准存储器存取时,其可通过设定所述位来启用所述模式。当设定所述位时,预测所有存储器存取为未对准的。在另一实施例中,未对准预测由存储器存取指令的页表中的属性控制,使得将以相同方式(无论对准还是未对准)预测来自单个页的指令进行的所有存储器存取。大多数代码可能不会遭遇如此容易地被识别为在特定代码片段或存储器区域内的未对准存储器存取。因此,需要较复杂的未对准预测方法一一预测可被连续启用但不盲目预测所有存储器存取或特定页上的所有存取将是未对准的。举例来说,在一个实施例中,未对准预测可遵循堆栈指针对准。如果堆栈指针未对准,那么预测存储器存取是未对准的。预测条件分支指令的行为的方法是众所周知的,且许多方法可应用于预测未对准。举例来说,过去的新近存储器存取型式可以是未来存储器存取的对准的良好指示符。在一个实施例中,多个一位旗标(通过存储器存取指令的地址位索引)指示相应指令进行的最近存储器存取的对准一一例如,"一"指示未对准存取,且"零"指示对准存取(或反之亦然)。未对准旗标可包括比较存储器存取指令地址的全部或大部分以防止存储器存取指令间的未对准混淆(其可降低预测准确性)的标签。或者,为了节省资源,可仅使用地址的最低有效少数位将未对准旗标索引。在产生存储器存取指令的有效地址之前,且优选地尽可能早地,检验相应的未对准旗标。如果存储器存取指令的最近执行未对准,那么管线控制器可预测待决存取也将是未对准的,且产生微操作以执行第二存储器存取。由于在指令解码管级中首先知道指令(即,存储器存取指令)的类型,因而优选地在那里创建微操作。然而,可在管线中稍后创建微操作。在产生存储器存取指令的有效地址之前响应于未对准预测进行的任何微操作创建均属于本发明范围内。单个位未对准旗标的一个结果是,对准存储器存取指令流中的奇数未对准存储器存取指令将误预测两次一一一次是在首次遭遇未对准指令时,且再次是在指令(其未对准旗标现被设定)的下一次对准执行时。此问题的解决方案(在条件分支预测中也是已知的)是双峰未对准预测器,其包含通过存储器存取指令地址索引的两位饱和计数器的表。每一计数器具有四个状态中的一者-ll一强未对准IO—弱未对准Ol—弱对准OO—强对准当产生存储器存取指令的有效地址时,更新相应的计数器。未对准存储器存取指令使状态朝向强未对准递增,且对准存储器存取指令使状态朝向强对准递减。此类双峰计数器将仅对对准存取流中的奇数未对准存取误预测一次,其代价是在未对准存取流的开始处误预测两次。可从条件分支预测借用的另一未对准预测算法是局部未对准预测器。局部未对准预测器维持两个表。第一表是局部未对准历史表。其通过存储器存取指令的地址位被索引,且其记录每一存储器存取指令的n个最近执行的对准/未对准历史。另一表是型式历史表。类似于双峰预测器,此表含有双峰计数器;然而,其索引是从第一表中的未对准历史中产生的。为了预测对准,査找未对准历史,且接着使用所述历史来査找进行未对准预测的双峰计数器。用于预测未对准的又一选项是全局未对准预测器,其利用许多存储器存取的行为与其它新近存储器存取的历史极其相关的事实。全局未对准预测器保持以所执行的每个存储器存取指令的新近未对准历史更新的单个移位寄存器,且使用此值将双峰计数器的表索引。或者,所述双峰计数器的表可用与存储器存取指令的地址中的少数位链接的新近未对准历史来索引,这称为gselect预测器。对于较小的表尺寸,gselect可比局部预测产生更准确的结果。作为另一替代方案,存储器存取指令地址可与全局历史进行异或运算,而并非链接,这称为gshare预测器。对于较大的表,gshare可比gselet产生更准确的未对准预测。即使gselect和gshare不如局部预测准确,但它们可能出于实施原因而为优选的。gselect和gshare对于每个对准预测需要单次表査找,而局部预测需要连续的两次表查找。1993年,ScottMcFarling在数字西方研究工作实验室技术说明(DigitalWesternResearchLaboratoryTechnicalNote)TN-36,"CombiningBranchPredictors"中提议组合分支预测器,所述文章全文以引用的方式并入本文中。根据本发明,McFarling所提议的技术可有利地应用于预测未对准存储器存取的问题,以借此在存储器存取指令的有效地址产生之前产生管线微操作。在一个实施例中,经组合的未对准预测并行使用三个预测器双峰、gshare,和类似双峰预测器以基于每个存储器存取指令来挑选使用双峰或gshare中的哪一者。选择预测器是另一种2位升/降饱和计数器,在此情况下,MSB选择将使用的预测。在此情况下,每当双峰和gshare预测不一致时更新计数器,以赞同较为准确的任何一个预测器。在另一实施例中,未对准预测器可维持未对准高速缓冲存储器,其可为完全相关联或设定相关联的,且可通过存储器存取指令地址的一部分或所述地址的与其它新近未对准历史(例如对于以上gselect和gshare参数)链接或进行异或运算的一部分索引。在管线中早期,例如在指令取出管级期间(例如,在恰好知道指令是存储器存取指令之前),可将高速缓冲存储器索引。如果未对准高速缓冲存储器命中,那么存储器存取最近为未对准的,且可预测为未对准。如果此高速缓冲存储器存取未中,那么存储器存取被预测为对准的。向用于未预测为未对准的存储器存取指令的高速缓冲存储器添加条目,且从用于预测为不对准的对准存储器存取的高速缓冲存储器中移除条目。各种其它未对准预测算法是可能的。举例来说,未对准预测器可保持存储器存取指令的对准行为的详细统计,且逐个指令或全局地基于过去对准经历的统计平均值而预测未对准。类似地,未对准预测器可维持n个最近存储器存取指令的对准的滚动平均值。某些指令集结构在操作码中包括静态预测位,其可由程序员基于他或她对应用的特定认识来指定。举例来说,如果在"遇误分支(branchonerror)"情形中使用分支且错误相对稀少,那么程序员可静态地预测那些分支为"不采用"。类似地,程序员可洞察到特定应用的存储器对准行为。举例来说,许多数据处理应用利用设计周全且有序的数据结构,且将预期很少(如果有的话)的不对准存储器存取。另一方面,某些应用可预期较大数目的不对准数据存取。实例可包括通信程序从共享信道中的连续数据流中提取特定数据,或数据获得应用响应于异步触发器记录来自连续输出的数据。在此类应用中,启用未对准预测或者将未对准预测偏置到较积极模式可改进处理器性能和功率节省。根据本发明的一个实施例,程序员可经由存储器存取指令中的旗标或一组不对准存储器存取指令来影响程序的未对准预测行为。在一个实施例中,存储器存取指令(例如,LD和ST指令)包括参数列表中的旗标,其指示应执行未对准预测。或者,指令集可包括分别针对可能未对准的加载和存储操作的新的指令(例如,LDMAL和STMAL)。此旗标或新的指令向未对准预测器56提供输入以启用存储器对准预测,且在有效地址产生之前较早地产生微操作,以执行额外存储器存取周期来存取不对准数据。在另一实施例中,未对准预测旗标或指令类型将未对准预测器56置于一种模式中,在所述模式中与在没有旗标的情况下相比,其作出更积极的未对准预测。举例来说,旗标或指令类型可将未对准预测器从使用两位双峰饱和计数器(如上所述)切换为三位饱和计数器,其中八个状态中的五个或六个状态指示所预测的未对准的程度。此类非对准预测旗标或指令类型的一个优点是,由程序员来控制未对准预测,程序员依靠他或她对应用行为的认识能更好地预测何时未对准预测可能引起处理器性能和功率管理改进。尽管本文已相对于本发明的特定特征、方面和实施例描述了本发明,但将了解,在本发明的广泛范围内可能作出许多变化、修改和其它实施例,且因此,应将所有变化、修改和实施例视为属于本发明范围内。因此,应在所有方面将本发明实施例解释为说明性的而并非限制性的,且期望在所附权利要求书的含义和等效范围内的所有变化均包含于其中。权利要求1.一种在指令执行管线中处理存储器存取指令的方法,所述存储器存取指令执行第一存储器存取其包含针对所述存储器存取指令预测数据未对准;以及在针对所述存储器存取指令产生有效地址之前,响应于所述预测,在所述管线中产生至少一个微操作,所述微操作针对未对准的数据执行第二存储器存取。2.根据权利要求l所述的方法,其中在所述管线中产生至少一个微操作包含在指令解码管级中产生所述微操作。3.根据权利要求1所述的方法,其中产生至少一个微操作包含针对所述微操作分派管线控制资源。4.根据权利要求3所述的方法,其中所述管线控制资源包括指令跟踪FIFO中的至少一个条目。5.根据权利要求3所述的方法,其中所述管线控制资源包括高速缓冲存储器未中队列中的可用位置。6.根据权利要求1所述的方法,其中针对所述存储器存取指令预测数据未对准包含在控制寄存器中设定未对准预测位,使得当所述位被设定时,所有存储器存取指令均被预测为未对准。7.根据权利要求1所述的方法,其中针对所述存储器存取指令预测数据未对准包含在所述存储器存取指令页表条目上设定一个或一个以上属性,使得在所述属性被设定时,相应页上的所有存储器存取指令均被预测为未对准。8.根据权利要求1所述的方法,其中针对所述存储器存取指令预测数据未对准包含在堆栈指针未对准时预测数据未对准,以及在所述堆栈指针对准时预测数据对准。9.根据权利要求1所述的方法,其中针对所述存储器存取指令预测数据未对准包含存储对准历史,以及响应于所述对准历史来预测未对准。10.根据权利要求9所述的方法,其中存储对准历史包含存储与所述存储器存取指令相关联的对准历史。11.根据权利要求10所述的方法,其中所述对准历史通过与所述存储器存取指令相关联的多个指令地址位而被索引。12.根据权利要求11所述的方法,其中所述对准历史包含指示最近的所述存储器存取指令的对准的旗标。13.根据权利要求ll所述的方法,其中存储所述对准历史包含响应于每一所述存储器存取指令的对准来递增或递减双峰饱和计数器;且其中响应于所述对准历史预测数据未对准包含输出所述双峰饱和计数器的MSB。14.根据权利要求ll所述的方法,其中存储所述对准历史包含响应于每一所述存储器存取指令的对准来递增或递减双峰饱和计数器;且其中响应于所述对准历史预测数据未对准包含基于对所述计数器的位的编码来输出数据未对准预测。15.根据权利要求14所述的方法,其中存储所述对准历史包含存储针对预定数目的最近的所述存储器存取指令的对准指示;且其中响应于所述对准历史预测数据未对准包含使用所述指示将双峰计数器的表索引,以及输出所述索引的双峰计数器的MSB。16.根据权利要求9所述的方法,其中存储对准历史包含存储与所有存储器存取指令相关联的对准历史;且其中响应于所述对准历史预测未对准包含使用所述对准历史将双峰计数器的表索引,以及输出所述索引的双峰计数器的MSB。17.根据权利要求16所述的方法,其中用与和所述存储器存取指令相关联的多个地址位链接的所述对准历史将所述双峰计数器的表索引。18.根据权利要求16所述的方法,其中用与和所述存储器存取指令相关联的多个地址位进行异或运算的所述对准历史将所述双峰计数器的表索引。19.根据权利要求9所述的方法,其中存储对准历史包含响应于每一所述存储器存取指令的对准来递增或递减单独的双峰饱和计数器;以及存储与所有存储器存取指令相关联的综合对准历史;且其中响应于所述对准历史预测未对准包含产生第一预测器,所述第一预测器包含与所述存储器存取指令相关联的所述双峰饱和计数器的MSB;产生第二预测器,所述第二预测器包含通过与和所述存储器存取指令相关联的多个地址位进行异或运算的所述综合对准历史被索引的表中的双峰计数器的MSB;以及输出选择双峰饱和计数器的MSB,在所述第一预测器与所述第二预测器不一致时,在赞同所述第一和第二预测器中准确的一者的方向上更新所述选择双峰饱和计数器。20.根据权利要求9所述的方法,其中存储过去对准经历包含维持过去存储器存取指令的对准的统计平均值。21.根据权利要求9所述的方法,其中存储过去对准经历包含维持预定数目的最近存储器存取指令的对准的滚动平均值。22.根据权利要求9所述的方法,其中存储过去对准经历包含维持被预测为对准的未对准存储器存取的未对准高速缓冲存储器,且其中响应于所述对准历史来预测未对准包含在所述未对准高速缓冲存储器中命中。23.根据权利要求22所述的方法,其中响应于所述对准历史来预测未对准进一步包含在解码所述存储器存取指令之前将所述未对准高速缓冲存储器索引。24.根据权利要求22所述的方法,其进一步包含从所述高速缓冲存储器移除被预测为未对准的对准存储器存取。25.根据权利要求1所述的方法,其中针对所述存储器存取指令预测数据未对准包含响应于所述存储器存取指令中的旗标来预测数据未对准。26.根据权利要求l所述的方法,其中针对所述存储器存取指令预测数据未对准包含响应于包含可能未对准存储器存取指令的所述存储器存取指令来预测数据未对准。27.—种管线处理器,其包含指令执行管线,其包含多个管级;未对准预测器,其产生存储器存取指令将存取未对准数据的预测;以及控制逻辑,其在针对所述存储器存取指令产生有效地址之前,响应于所述预测在所述管线中产生额外微操作,以执行额外存储器存取。28.根据权利要求27所述的处理器,其中所述额外微操作是在指令解码管级中产生的。29.根据权利要求27所述的处理器,其中所述微操作占据至少一个所述管级。30.根据权利要求27所述的处理器,其中所述未对准预测器包括存储所述存储器存取指令对准历史的存储器。31.根据权利要求27所述的处理器,其进一步包含指令执行FIFO,且其中所述控制逻辑在对应于所述微操作的所述指令执行FIFO中产生条目。全文摘要在指令执行管线中,预测存储器存取指令的未对准。基于所述预测,在所述存储器存取指令的有效地址产生之前,在所述管线中产生额外微操作。所述额外微操作存取越过预定地址边界的存储器。预测所述未对准且在所述管线中早期产生微操作确保足够的管线控制资源可用于产生和跟踪所述额外微操作,从而在所述资源在有效地址产生时不可用的情况下避免管线冲洗。所述未对准预测可采用已知的条件分支预测技术,例如旗标、双峰计数器、局部预测器、全局预测器和经组合的预测器。未对准预测器可由存储器存取指令旗标或未对准指令类型启用或偏置。文档编号G06F9/312GK101156132SQ200680011584公开日2008年4月2日申请日期2006年2月16日优先权日2005年2月17日发明者托马斯·安德鲁·萨托里乌斯,杰弗里·托德·布里奇斯,维克托·罗伯茨·奥格斯堡,詹姆斯·诺里斯·迪芬德尔费尔申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1