选择性地阻止分支指令预测的制作方法

文档序号:6504230阅读:330来源:国知局
选择性地阻止分支指令预测的制作方法
【专利摘要】实施例涉及选择性地阻止分支指令预测。一方面包括用于执行选择性分支预测的计算机系统。该系统包括存储器和处理器,且该系统被配置为执行方法。该方法包括检测指令流中的分支预测阻止指令,并基于对分支预测阻止指令的检测来阻止分支预测阻止指令之后的预定数量的分支指令的分支预测。
【专利说明】选择性地阻止分支指令预测
【技术领域】
[0001]本实施例涉及选择性地阻止分支指令预测,且更具体而言涉及在指令流中提供指令,其将被执行以阻止预定数量的未来分支指令的分支预测。
【背景技术】
[0002]处理器使用流水线来提高指令流被处理的速度。流水线可以具有若干个处理阶段,并且当一个指令在一个阶段中处理中,下一指令可在上游阶段中处理。当指令流包含分支指令时,处理器可能需要执行分支指令,或在整个流水线中运行分支指令,以确定执行的下一指令。为了提升效率,处理器可以确定指令流何时包含分支指令,并可以预测流水线中的分支指令之后应是哪个指令。
[0003]但是,处理器的不正确的预测会导致降低的处理效率。例如,如果处理器预测了条件分支指令之后的下一指令,但该分支未被采用,则在流水线的各个阶段已被处理的该下一指令和后续指令必须被清除,且来自包含分支指令的原始流的新指令必须在流水线开始处被提供。结果,在不正确的分支预测之后,流水线的上游阶段可能闲置多个周期。

【发明内容】

[0004]示例性实施例包括一种用于执行选择性分支预测的计算机系统。该系统包括:存储器,其被配置为存储指令,以及处理器,其被配置为执行指令,以控制计算机系统来执行指令所指示的功能。该系统被配置为执行方法,该方法包括通过处理器来检测指令流中的分支预测阻止指令,以及基于对分支预测阻止指令的检测,通过处理器来阻止分支预测阻止指令之后的预定数量的分支指令的分支预测。
[0005]另一示例性实施例包括一种计算机实现的用于执行选择性分支预测的方法,该方法包括通过处理器来检测指令流中的分支预测阻止指令,以及基于对分支预测阻止指令的检测,通过处理器来阻止分支预测阻止指令之后的预定数量的分支指令的分支预测。
[0006]另一示例性实施例包括用于执行选择性分支预测的计算机程序产品。该计算机程序产品包括有形的存储介质,其可被处理电路读取并存储指令,该指令由处理单元执行以执行一种方法。该方法包括通过处理器来检测指令流中的分支预测阻止指令,以及基于对分支预测阻止指令的检测、通过处理器来阻止分支预测阻止指令之后的预定数量的分支指令的分支预测。
[0007]通过公开的实施例,实现了额外的特征和优势。这里详细描述了本公开的其他实施例和方面。为了更好地理解本发明的优势和特征,参考描述和附图。
【专利附图】

【附图说明】
[0008]在所附权利要求书中特别指出并清楚地要求保护被认为是实施例的主体。实施例的前述和其他特点以及优势将从以下结合附图的详细描述变得明显,在附图中:
[0009]图1示出了根据本公开的一个实施例的选择性分支预测阻止系统的框图;[0010]图2示出了根据一个实施例的指令执行组合件;
[0011]图3示出了根据一个实施例的指令编译组合件;
[0012]图4示出了根据一个实施例的选择性分支预测阻止方法的流程图;
[0013]图5示出了根据另一实施例的选择性分支预测阻止的方法的流程图;
[0014]图6示出了根据一个实施例的计算机系统;并且
[0015]图7示出了根据本公开的一个实施例的计算机可读介质。
【具体实施方式】
[0016]在示例性实施例中,指令流中的分支预测阻止指令避免了对阻止指令之后的预定数量的分支指令执行分支预测功能。
[0017]图1示出了根据本公开的实施例的分支预测阻止系统100的功能框图。系统100可以包括指令编译组合件110和指令执行组合件120。指令编译组合件110可以接收高级计算机编程语言的计算机代码作为输入并可以将计算机代码转换为可执行指令。指令编译组合件Iio可以包括阻止指令插入模块112,其将分支预测阻止指令插入到计算机代码或可执行指令的指令流中。阻止指令插入模块112可被用户或计算机程序控制。例如,指令编译组合件110可以包括条件检测模块111,其被配置为识别高级编程代码、中间编程代码或可执行指令中的一个或多个中的预定条件。如果检测到该条件,条件检测模块111可以将信号或指令发送到阻止指令插入模块112,以指示阻止指令插入模块将分支预测阻止指令插入到指令流中。
[0018]尽管图1示出了条件检测模块111和阻止指令插入模块112,本公开的实施例包括在指令流中提供分支预测阻止指令的任何手段。例如,用户可以将阻止指令插入到编程代码或可执行指令中,且指令执行组合件120可以执行指令流中的阻止指令。换句话说,阻止指令的插入可以基于指令编译组合件的分析,或基于用户的分析,该用户使用指令编译组合件110以在编写编程代码、编写中间代码或编写处理器可执行指令的阶段将阻止指令插入到指令流中。
[0019]可被条件检测模块111检测的条件可以包括检测到特定类型的分支指令,检测到分支指令所在的特定类型的代码,检测到分支指令存取的特定地址、操作符或寄存器,检测到分支指令是特定的预指定的分支指令,或任何其他条件。例如,特定的分支指令可以解决为(resolve in)分支在60%的时间不被采用,而执行分支预测将产生10%的预测正确率。该特定的分支指令可被识别为难以预测或不可预测,且用户或条件检测模块111可以将阻止指令插入到该不可预测指令的指令流上游。结果,在执行指令流时,该不可预测指令不会使得执行分支预测。
[0020]指令执行组合件120通过获取、解码、发出并执行指令来执行指令流。指令执行组合件120还可包括条件检测模块121,其检测指令流中的条件,以及阻止指令插入模块122,其基于条件检测模块121对条件的检测来将阻止指令插入到指令流中。指令检测模块111和121以及阻止指令插入模块112和122用虚线来表示,以指示本公开的实施例涵盖了选择性分支预测阻止系统100包括条件检测模块111和121以及阻止指令插入模块112和122的全部、仅包括条件检测模块111和阻止指令插入模块112、仅包括条件检测模块121和阻止指令插入模块122、或者不包括条件检测模块111和121以及阻止指令插入模块112和122中的任何一个。在这样的例子中,用户可以用编程语言来编写代码,该代码可被指令编译组合件110正常执行并被提供给指令执行组合件120来执行,而没有被指令编译组合件110或指令执行组合件120检测条件。
[0021]可被条件检测模块121检测的条件可以包括检测到特定类型的分支指令,检测到分支指令所在的特定类型的代码,检测到分支指令存取的特定地址、操作符或寄存器,检测到分支指令是特定的预指定的分支指令,或任何其他条件。
[0022]指令执行组合件包括阻止指令检测模块123,用于检测指令流中的阻止指令。在检测到阻止指令时,阻止指令检测模块123控制分支预测阻止模块124来跳过或阻止该阻止指令之后的预定数量的分支指令的分支预测。阻止指令检测模块123可以控制分支预测阻止模块124来阻止每个分支指令、每个条件分支指令、特定类别或类型的分支指令、或具有特定目标地址的特定分支指令。
[0023]一旦已经跳过或阻止预定数量的分支指令,分支预测阻止模块124可自动恢复对阻止指令指定的分支指令执行的分支预测操作。在一个实施例中,分支指令的预定数量是可编程的或可改变的。例如,阻止指令可以包括表示要跳过或阻止分支预测操作的分支指令数量的整数。在另一实施例中,阻止指令可以不包含与要跳过或阻止的分支指令数量相关的显式信息,且阻止指令检测模块123可以提供要跳过的分支指令的默认数量,其中,该默认数量是有限的数字。
[0024]例如,条件检测模块111可以在编译时检测到特定的分支指令,其中,该特定的分支指令被定义为不应执行分支预测的分支指令。条件检测模块111可以向阻止指令插入模块112指示已检测到特定的分支指令,且阻止指令插入模块112可以在该特定分支指令的上游的可执行指令中插入分支预测阻止指令。分支预测阻止指令可以包括整数“1”,以向指令执行组合件指示后面只有一条分支指令应跳过分支预测操作。
[0025]在另一例子中,条件检测模块111可检测到正在编译特定类型的代码,例如被指定为“敏感”的代码,对该代码不应执行分支预测。条件检测模块111可以向阻止指令插入模块112指示已检测到特定类型的代码,且阻止指令插入模块112可以在该特定类型代码上游的可执行代码中插入分支预测阻止指令。阻止指令插入模块112可以确定位于敏感代码中的分支指令的数量,并可以产生分支预测阻止指令,以向指令执行组合件指示只有与敏感代码中的分支指令数量相对应的数量的分支指令应跳过分支预测操作。阻止指令插入模块112可以在敏感代码上游的预定数量的指令处插入阻止指令,从而在指令执行组合件120执行该阻止指令时,敏感代码还没有在指令执行流水线中,由此通过在获取敏感代码的分支时避免分支预测来避免处理时间损失。
[0026]尽管上面为了说明的目的描述了 “敏感”代码的例子,可以理解,本公开的实施例涵盖基于对任何预定或预指定类型的指令或指令块的检测来插入指令以阻止分支预测。
[0027]在另一例子中,指令执行组合件120可以基于已执行的分支操作的历史来确定特定类型的分支指令是不可预测的,或者具有比预定阈值少的成功分支预测。指令执行组合件120可以指示条件检测模块121来检测特定类型的分支指令。例如可以通过识别分支指令的地址和作为分支指令的目标的下一指令的地址,来识别特定的分支指令。当条件检测模块121检测到特定类型的分支指令时,条件检测模块121控制阻止指令插入模块122将指令插入到被执行的指令流中,以跳过或阻止特定指令的分支预测。阻止指令插入模块122可以在指令中提供整数例如“1”,以向分支预测阻止模块124指示后面只有一条分支指令应跳过或阻止分支预测功能。
[0028]在一个实施例中,特定的分支指令位于代码流中,且阻止指令插入模块122在特定分支指令的代码流上游插入阻止指令。阻止指令可以被插入到特定分支指令上游足够远的地方,从而在将指令流提供给指令执行流水线时,在阻止指令执行时该特定的分支指令还没有被解码。
[0029]阻止指令检测模块123检测到包含整数的阻止指令,该整数指示应跳过或阻止分支预测的分支指令的数量。分支预测阻止模块124阻止预定数量的分支指令执行分支预测,并且在阻止指令所指示的预定数量的分支指令已被跳过或阻止分支预测的执行之后,清除阻止指令以在指令流中的特定类型的分支指令上执行分支预测。
[0030]图2示出了根据本公开的实施例的指令执行组合件200的框图。指令执行组合件200可对应于图1的指令执行组合件120。例如,在某些实施例中,指令获取单元202、分支预测单元206和执行单元205中的一个或多个可以对应于阻止指令检测模块123和分支预测阻止模块124。此外,获取单元202和分支预测单元206可以对应于图1中的条件检测模块121和阻止指令插入模块122。尽管图2示出了指令执行组合件200的一个实施例,可以理解,本公开的实施例包括检测阻止指令以及基于检测到的阻止指令来阻止或跳过预定数量的分支预测操作的任何指令执行组合件。
[0031]指令执行组合件200可以包括多线程处理器中的多个处理核心中的一个处理核心。指令执行组合件200包括存储程序指令的一级指令高速缓存(LI Icache)201,以及从LI Icache201获取指令的执行获取单元202。特别地,Lllcache201与指令获取单元202结合来提供指令流的载入。
[0032]指令解码单元(IDU)203将获取的指令解码为指令处理数据。IDU203向发出单元204提供指令,该发出单元控制指令发出到各个执行单元205,例如用于执行一般运算的一个或多个定点单元以及用于执行浮点运算的一个或多个浮点单元。
[0033]指令执行组合件200包括与指令获取单元202通信的分支预测单元206,用于预测分支指令的目标地址。例如,分支预测单元206可以包括分支目标缓冲器(BTB) 207,用于存储与预测的分支相关的分支目标地址。分支预测单元206还可以包括分支历史单元208,用于存储先前解决的分支指令中采用或未采用分支结果的模式(pattern)。分支历史单元208可被实现为BTB207的一部分。在一个实施例中,分支预测单元206包括分支预测控制单元209,其可以使用预测阻止模块210来开启或关闭分支预测功能,可以分析分支历史来确定不可预测分支,并可以执行与分支预测功能相关的任何其他的控制或分析功能。
[0034]尽管分支预测单元206被描述为与指令获取单元202分离的功能块,本公开的实施例包括这样的指令获取单元202,其在指令执行单元202中包含分支预测单元206。例如,一个或多个处理器、存储器、逻辑和程序代码可以在指令获取单元202和分支预测单元206之间共享。此外,尽管分支预测控制单元209被描述为与执行单元205分离,本公开的实施例包括这样的执行单元205,其执行阻止指令来阻止指令获取单元202和分支预测单元206执行分支预测操作。
[0035]在操作中,指令流流过指令执行组合件200。指令获取单元202可以基于先前的指令以预定的顺序从LI Icache 201获取指令。指令获取单元202可以一次地从LI Icache201获取指令块,并可以将该指令块和来自先前的获取操作的任何未解码的指令一起存储在指令存储装置210中。
[0036]在一个实施例中,指令流包括用户或编译器已提供的分支预测阻止指令。分支预测阻止指令可以流过流水线并且可被执行单元205执行。基于阻止指令的执行,执行单元205可以向预测阻止单元210提供控制信号,以阻止之后预定数量的的分支指令的分支预测操作。例如,可以通过阻止指令获取单元202存取分支目标缓冲器207来阻止预测操作。此外,在执行单元205执行预定数量的分支指令时,可以通过阻止指令来阻止指令执行单元205向分支历史单元208提供预定数量的分支指令的分支信息。
[0037]在另一实施例中,指令获取单元202可以识别特定的分支指令、分支指令类型或围绕分支指令的指令类型。被识别的特定分支指令可以对应于被识别为不执行分支预测操作的分支指令类型。一串指令可以包括例如下列:
[0038]Load, add, store, store, multiply, branch, load, load, add, store
[0039]例如可以通过确定分支指令的地址以及作为分支指令目标的地址来识别特定分支指令或分支指令类型。在指令获取单元202或分支预测单元206识别出特定分支指令、分支指令类型或围绕分支指令的指令类型时,分支预测控制单元209可以生成指令,该指令将被插入到所识别的分支指令的指令流上游。在执行阻止指令时,执行单元205可以向预测阻止单元210提供控制信号,以阻止之后的预定数量的分支指令的分支预测操作。例如,可以通过阻止指令获取单元202存取分支目标缓冲器207来阻止预测操作。此外,在执行单元205执行预定数量的分支指令时,阻止指令可以阻止执行单元205向分支历史单元208提供预定数量的分支指令的分支信息。
[0040]在一个实施例中,分支预测控制单元209可以分析分支预测历史来确定不可预测的或者具有低于预定阈值的成功预测水平的特定分支指令。分支预测控制单元209可以存储识别的分支指令信息,且可以将识别的分支指令信息与获取的分支指令进行比较,以确定是否生成阻止指令。
[0041]下面是插入分支预测阻止指令的例子:
[0042]Load, add, store, blk—bpl_branch_l,store, multiply, branch, load, load, add, store
[0043]在以上的示例性指令串中,指令blk_bpl_branch_l指示分支预测单元206和/或指令获取单元202跳过一个分支预测操作。换句话说,当在指令串中检测到下一分支时,指令获取单元202不会从分支预测单元206的BTB207获得分支预测信息。
[0044]当指令串中的分支指令被识别时,分支预测控制单元209可以确定是否应执行分支预测操作,且指令获取单元202可以查询分支目标缓冲器207来预测在该分支指令之后应获取那条指令来解码。特别地,分支目标缓冲器207可以向指令获取单元202提供与指令获取单元202所识别的分支指令相对应的预测分支指令的预测目标地址,从而允许指令获取单元202获取预测目标地址处的指令。
[0045]获取的指令被指令解码单元203解码,并基于该指令执行的运算类型被发出单元204发出到合适的执行单元205。执行单元205确定条件分支指令的分支条件是否被满足,以及是否采用条件分支指令的分支还是无条件分支。执行单元205可以将与是否已采用分支相关的信息提供给分支历史单元208,该信息可被用于预测未来的分支。[0046]在本公开的实施例中,可由分支预测控制单元209提供的分支预测阻止指令可以包括一整数值,该整数值表示分支预测功能应被跳过或阻止的分支指令的数量。该整数可以是任何整数,包括I并达到任何想要的整数。在阻止了与该整数值相等的数量的分支指令的分支预测时,分支预测单元206和指令获取单元202可以恢复对指令流中的分支指令的分支预测操作。分支预测控制单元209提供的指令还可以包括诸如分支类型的信息,对于该类型的分支应跳过或阻止分支预测功能。换句话说,该指令可以阻止预定数量的一种类型的分支指令的分支预测,而允许所有其他类型的分支指令的分支预测操作。
[0047]图3示出了根据本公开的实施例的指令编译组合件300的框图。例如,指令编译组合件300可以对应于图1中的指令编译组合件110。
[0048]指令编译组合件300包括存储器310和编译器320。存储器311可以存储编程代码311,例如用户或计算机程序生成的高级编程代码。编程代码311被提供给编译器323的代码分析器321,其可以分析该编程代码,并且基于该分析,可执行指令生成器322可以将编程代码转换为可执行指令312,所述可执行指令可被存储在存储器310中。可执行指令可被处理器(例如图2中的指令执行组合件200)读取,以执行所述指令来控制计算机执行可执行指令312所指示的功能。
[0049]在一个实施例中,编程代码包括用于阻止分支预测的指令。阻止指令可以包括在该阻止指令之后应跳过或阻止分支预测的分支指令的预定数量。阻止指令还可以包括关于分支指令的信息,例如应阻止或跳过分支预测功能的分支指令类型或特定分支指令。代码分析器321可以分析编程代码311,并可以向可执行指令生成器322指示该编程代码的阻止指令对应于将由该可执行指令生成器322生成的阻止指令。可执行指令生成器322生成包含阻止指令的可执行指令312。可执行指令312可被生成,并作为可顺序执行的指令流来存储。
[0050]在另一实施例中,代码分析器321被配置或编程为分析编程代码311并对将编程代码的分析提供给可执行指令生成器322和阻止指令插入单元323。当代码分析器321分析与一个或多个预定义或预确定的条件相对应的代码时,阻止指令插入单元323可以控制代码分析器321将与分支预测阻止指令对应的指令插入到编程代码311中。或者,阻止指令插入单元323可以控制可执行指令生成器322将可执行分支预测阻止指令插入到可执行指令串312中。例如,代码分析器321可以分析编程代码321并识别编程代码中的特定分支指令。阻止指令插入单元323可以将特定分支指令识别为应跳过或阻止分支预测的分支指令类型,并且可以指示代码分析器321或可执行指令生成器322在特定分支指令的上游提供分支预测阻止指令,以在可执行指令312的处理期间避免特定分支指令的分支预测。阻止指令可被插入到上游的预定数量的指令处,从而在处理期间,可以最小化指令执行流水线的中断。例如,阻止指令可被插入到足够上游,从而在执行阻止指令时,特定的分支指令还没有被解码。
[0051]尽管图1-3示出了由指令执行组合件200和指令编译组合件300来基于指令流检测条件,本公开的实施例包括基于指令流检测条件的任何装置。例如,在一个实施例中,指令执行组合件200外部的计算机程序可以监视分支指令的执行,并可以识别应阻止分支预测的分支指令。计算机程序可以在处理特定的分支指令之前向指令执行组合件200或存储器提供分支预测阻止指令。[0052]图4示出了根据本公开的一个实施例的方法的流程图。在框401中,确定在执行指令流时是否遇到了分支预测阻止指令。例如,指令执行流水线的执行单元可以执行分支预测阻止指令。在框402中,阻止指令使得分支预测阻止被设置。例如,执行单元可以向指令获取单元提供指令,来控制指令获取单元不要针对阻止指令之后的预定数量的分支指令执行分支预测操作。被阻止的分支预测操作的数量是I或更大的有限数字。在一个实施例中,该数字在阻止指令中定义。在一个实施例中,阻止指令还指定了应跳过分支预测的分支指令类型。
[0053]在框403中,确定是否遇到了与不执行分支预测的分支指令类型相对应的分支指令。如果在框403中检测到禁止的分支指令,则在框404中阻止该指令的分支预测功能。例如,阻止分支预测可以包括阻止获取单元存取分支目标缓冲器以及阻止来自分支指令的信息进入到分支目标缓冲器和分支历史单元。
[0054]在框405中,确定是否已遇到分支预测阻止指令所指定的数量N的分支指令。例如,分支预测阻止指令可以包括从I到大于I的任何数字的整数值,以指示要跳过或阻止分支预测操作的分支指令的数量。
[0055]如果在框405中确定已遇到指定数量N的分支指令,在框406中清除分支预测阻止指令,且后续的分支指令可进行正常的分支预测操作。
[0056]图5示出了根据本公开的另一实施例的方法的流程图。在框501中,确定分支预测阻止条件是否被满足。阻止条件可以基于在获取的指令的流中识别的分支指令、基于指令流中其他指令的特征、基于与何时执行分支预测或应该对哪类分支指令执行分支预测相关的预编程指令、基于对前面的分支指令的分析(例如确定某些分支指令不可预测)、或基于任何其他想要的条件。
[0057]如果在框501中检测到该条件,则在框502中分支预测阻止指令被插入到指令流中。例如,如果该条件与指令流中被识别的分支指令相关,则阻止指令可被插入到识别的分支指令的上游,以避免该识别的分支指令的分支预测。分支预测阻止指令可以指定要跳过分支预测的分支指令的非常窄的范围,或者分支预测指令可以阻止任何类型的条件分支指令的分支预测。
[0058]在框503中,确定是否遇到了与不执行分支预测的分支指令类型相对应的分支指令。如果在框503中检测到禁止的分支指令,则在框504中阻止针对该指令的分支预测功能。例如,阻止分支预测可以包括阻止获取单元存取分支目标缓冲器或者阻止来自分支指令的信息进入到分支目标缓冲器和分支历史单元。
[0059]在框505中,确定是否已遇到分支预测阻止指令所指定的数量N的分支指令。例如,分支预测阻止指令可以包括从I到大于I的任何数字的整数值,以指示要跳过或阻止分支预测操作的分支指令的数量。
[0060]如果在框505中确定已遇到指定数量N的分支指令,在框506中清除分支预测阻止指令,且后续的分支指令可进行正常的分支预测操作。
[0061]图6示出了根据一个实施例的用于选择性地阻止分支预测操作的系统600的框图。这里描述的方法可以用硬件、软件(例如固件)或其组合来实现。在一个示例性实施例中,这里描述的方法在硬件中实现,所述硬件作为专用或通用数字计算机(例如个人计算机、工作中、小型机或大型机的微处理器)的一部分。系统600因此包括通用计算机601。[0062]在示例性实施例中,如图6所示,在硬件架构方面,计算机601包括处理器605,其可以是多线程处理器605,被配置为同时或无次序地执行指令;耦合到存储控制器615的存储器610 ;以及一个或多个输入和/或输出(I/O)装置640、645 (或外围),其通过本地输入/输出控制器635来通信地耦合。输入/输出控制器635可以是例如但不限于本领域中已知的一种或多种总线或其他有线或无线连接。输入/输出控制器635可以具有为了简单起见而被省略的其他元件,例如控制器、缓冲器(高速缓存)、驱动器、中继器和接收器,以使能通信。此外,本地接口可以包括地址、控制和/或数据连接,以使能在上述组件之间的合适的通信。
[0063]处理器605是用于执行软件的硬件装置,所述软件特别是存储在存储装置620(例如高速缓存存储或存储器610)中的软件。处理器605可以是任何定制的或市场上可获得的处理器、中央处理单元(CPU)、与计算机601相关的若干个处理器中的辅助处理器、基于半导体的微处理器(采用微芯片或芯片组的形式)、宏处理器、或一般的用于执行指令的任何装置。处理器605可以包括图2的指令执行组合件200的部分,例如分支预测单元206、指令获取单元202以及分支预测阻止单元210。
[0064]存储器610可以包括易失性存储器元件(例如随机存取存储器(RAM,例如DRAM、SRAM、SDRAM等))和非易失性存储器元件(例如ROM、可擦除可编程只读存储器(EPR0M)、电可擦除可编程只读存储器(EEPR0M)、可编程只读存储器(PR0M)、磁带、光盘只读存储器(⑶-ROM)、磁盘、软磁盘、卡盘、盒式磁带等)中的任何一个或组合。此外,存储器610可以包含电子、磁、光以及/或其他类型的存储介质。注意到存储器610可以具有分布式结构,其中,各个组件互相位于远端,但可被处理器605存取。
[0065]存储器610中的指令可以包括一个或多个单独的程序,其中每个包括用于实现逻辑功能的可执行指令的有序列表。在图6的例子中,存储器610中的指令是合适的操作系统(OS) 611。操作系统611基本上控制其他计算机程序的执行并提供调度、输入-输出控制、文件和数据管理、存储器管理、以及通信控制和相关服务。
[0066]在不例性实施例中,传统的键盘650和鼠标655可被稱合到输入/输出控制器635。其他的输出装置例如I/O装置640、645可以包括输入装置,例如但不限于打印机、扫描仪、麦克风等。最后,I/O装置640、645还可以包括传送输入和输出两者的装置,例如但不限于网络接口卡(NIC)或调制器/解调器(用于存取其他文件、装置、系统或网络)、射频(RF)或其他收发器、电话接口、网桥、路由器等。系统600还可以包括耦合到显示器630的显示控制器625。在示例性实施例中,系统600还可以包括用于耦合到网络665的网络接口 660。网络665可以是基于IP的网络,用于计算机601和任何外部服务器、客户机等经宽带连接的通信。网络665在计算机601和外部系统之间发送和接收数据。在示例性实施例中,网络665可以是服务提供商管理的受管理IP网络。网络665可以用无线的方式来实现,例如使用诸如WiF1、WiMax等的无线协议和技术。网络665还可以是包交换网络,例如局域网、广域网、城域网、因特网或其他相似类型的网络环境。网络665可以是固定的有限网络、无线局域网(LAN)、无线广域网(WAN)、个域网(PAN)、虚拟专用网(VPN)、内部网或其他合适的网络系统,并且包括用于接收和发送信号的设备。
[0067]如果计算机601是PC、工作站、智能设备等,存储器610中的指令还可包括基本输入输出系统(BIOS)(为简单起见被省略)。BIOS是一组基本软件例程,其在启动时初始化并测试硬件、启动0S611、支持硬件设备之间的数据传输。BIOS被存储在ROM中,从而在激活计算机601时可以执行BIOS。
[0068]当计算机601在运行中时,处理器605被配置为执行存储器610中存储的指令,以向/从存储器601传送数据,并根据指令来一般地控制计算机601的运行。
[0069]在示例性实施例中,这里描述的选择性分支预测方法可以用下列技术(其中每个在本领域中都是熟知的)中的任一个或组合来实现:用于针对数据信号实现逻辑功能的具有逻辑门的离散逻辑电路、具有合适的组合逻辑门的专用集成电路(ASIC)、可编程门阵列(PGA)、现场可编程门阵列(FPGA)等。
[0070]所属【技术领域】的技术人员知道,本发明的一个或多个方面可以实现为系统、方法或计算机程序产品。因此,本发明的一个或多个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的一个或多个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0071]可以采用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读存储介质。计算机可读存储介质例如可以是一但不限于一电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0072]现在参考图7,在一个例子中,计算机程序产品710包括例如一个或多个存储介质712,其中,该介质可以是有形的和/或非暂时的介质,其上存储有计算机可读程序代码装置或逻辑714,以提供或促进这里描述的实施例的一个或多个方面。
[0073]当被创建和在有形介质(包括但不限于电子存储器模块(RAM)、闪存、高密度磁盘(CD)、DVD、磁带等)上存储时,程序代码通常被称为“计算机程序产品”。计算机程序产品介质典型地可被优选地在计算机系统中的处理电路读取,以由该处理电路来执行。这样的程序代码例如可以用汇编指令的编译器或汇编器来创建,当该指令被执行时,执行实施例的方面。
[0074]实施例包括用于执行选择性分支预测的计算机系统、方法、计算机程序产品和任何其他装置或设备。实施例包括检测指令流中的分支预测阻止指令,以及基于对分支预测阻止指令的检测来阻止预定数量的分支指令的分支预测。该检测和阻止可以由处理器来执行。
[0075]在一个实施例中,该预定数量在分支预测阻止指令中指定。另一实施例包括避免与预定数量的分支操作相关的信息被存储以用于后续的分支预测操作。该避免可以由处理器来执行。
[0076]另一实施例包括检测基于指令流的预定条件,并基于对预定条件的检测将分支预测阻止指令插入到指令流中。在一个实施例中,该指令流是处理器的处理流水线中的指令流,预定的条件包括确定所获取的分支指令对应于预定类型的分支指令,并且将分支预测阻止指令插入到指令流中包括在获取的分支指令的上游插入分支预测阻止指令。
[0077]在一个实施例中,预定的条件是基于过去的分支预测来确定指令流中的分支指令难以被预测。在一个实施例中,预定的条件是指令流中的非分支指令的特征。另一实施例包括基于确定已阻止了预定数量的分支预测操作,允许分支指令的分支预测操作。
[0078]技术效果和好处包括通过阻止可能产生较低处理效率的分支指令(例如具有不可预测的历史的分支指令)的分支预测,来提升处理性能。此外,通过提供用于仅阻止预定数量的分支预测(包括仅阻止下一预测操作)的指令,分支预测可被选择性地阻止。因此,在具有大量分支操作(或者其中只有较小数量的已知分支指令是不可预测的)的指令流中,可最大化执行的分支预测的数量,而仅针对想要的分支指令来阻止分支预测的执行。
[0079]尽管上面通过示例的方式针对分支指令的预测和阻止来描述本公开的实施例,可以理解,本公开的实施例包括检测任何预定类型的指令以及将阻止指令插入到指令流中以阻止任何类型的预测方案被执行。
[0080]此处使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括多数形式,除非上下文另有清楚的规定。还将理解,当在本说明中使用时,术语“包括”和/或“包含”明确说明存在所陈述的特点、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其他的特点、整体、步骤、操作、元件、组件和/或其组。
[0081]以下权利要求中的所有装置或步骤加功能性元件相应的结构、材料、操作和等价物旨在包括用于结合在权利要求中特意阐明的其他元件而执行该功能任何结构、材料或操作。本发明的说明已出于解释和描述的目的被展示,但不旨在是穷尽性的或将本发明限制在公开的形式。许多修改和变化对于本领域普通技术人员来说是明显的,且不脱离本发明的精神和范围。选择并描述实施例是为了最好地解释本发明的原理和实际应用,且使得本领域普通技术人员能针对具有适用于所打算的特定用途的各种修改的各种实施例理解本发明。
[0082]可以以一种或多种程序设计语言的任何组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言一诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任何种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0083]参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。[0084]也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)0
[0085]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置或其他装置上,使得在计算机、其它可编程数据处理装置或其他装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机、其它可编程装置或其他装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0086]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
【权利要求】
1.一种用于执行选择性分支预测的计算机系统,该系统包括: 存储器,其被配置为存储指令;以及 处理器,其被配置为执行指令,以控制计算机系统来执行指令所指示的功能,该系统被配置为执行方法,该方法包括: 通过处理器来检测指令流中的分支预测阻止指令;以及 基于对分支预测阻止指令的检测,通过处理器来阻止分支预测阻止指令之后的预定数量的分支指令的分支预测。
2.如权利要求1所述的计算系统,其中,所述预定数量在分支预测阻止指令中指定。
3.如权利要求1所述的计算机系统,该方法还包括: 通过处理器来避免与预定数量的分支操作相关的信息被存储以用于以后的分支预测操作。
4.如权利要求1所述的计算机系统,所述方法还包括: 通过处理器来检测基于指令流的预定条件; 基于对预定条件的检测,通过处理器将分支预测阻止指令插入到指令流中。
5.如权利要求4所述的计算机系统,其中,所述指令流是处理器的处理流水线中的指令流, 所述预定条件包括确定获取的分支指令对应于预定类型的分支指令,并且 将分支预测阻止指令插入到指令流中包括在获取的分支指令的上游插入分支预测阻止指令。
6.如权利要求4所述的计算机系统,其中,所述预定条件是基于过去的分支预测确定指令流中的分支指令难以被预测。
7.如权利要求4所述的计算机系统,其中,所述预定条件是指令流中的非分支指令的特征。
8.如权利要求1所述的计算机系统,所述方法还包括: 基于确定已经阻止了预定数量的分支预测操作,允许分支指令的分支预测操作。
9.一种计算机实现的用于执行选择性分支预测的方法,该方法包括: 通过处理器来检测指令流中的分支预测阻止指令;以及 基于对分支预测阻止指令的检测,通过处理器来阻止分支预测阻止指令之后的预定数量的分支指令的分支预测。
10.如权利要求9所述的方法,还包括: 避免与预定数量的分支操作相关的信息被存储以用于以后的分支预测操作。
11.如权利要求9所述的方法,还包括: 通过处理器来检测基于指令流的预定条件; 基于对预测条件的检测、通过处理器将分支预测阻止指令插入到指令流中。
12.如权利要求11所述的方法,其中,所述预定条件包括确定获取的分支指令对应于预定类型的分支指令。
13.如权利要求12所述的方法,其中,将分支预测阻止指令插入到指令流中包括在获取的分支指令的上游插入分支预测阻止指令。
14.如权利要求11所述的方法,其中,所述预定条件是基于分支预测历史确定获取的分支指令难以被预测。
15.如权利要求9所述的方法,还包括: 基于确定已阻止了预定数量的分支预测操作,允许用于分支指令的分支预测操作。
【文档编号】G06F9/38GK103513963SQ201310235141
【公开日】2014年1月15日 申请日期:2013年6月14日 优先权日:2012年6月15日
【发明者】J·J·博南诺, U·迈尔, A·萨珀里托, 岑中龙, T·J·斯利格尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1