CN108932136A - 处理器设备 - Google Patents

处理器设备 Download PDF

Info

Publication number
CN108932136A
CN108932136A CN201810510152.4A CN201810510152A CN108932136A CN 108932136 A CN108932136 A CN 108932136A CN 201810510152 A CN201810510152 A CN 201810510152A CN 108932136 A CN108932136 A CN 108932136A
Authority
CN
China
Prior art keywords
branch
mask
destination
branch destination
prediction
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.)
Pending
Application number
CN201810510152.4A
Other languages
English (en)
Inventor
笹井政尚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Publication of CN108932136A publication Critical patent/CN108932136A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

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)
  • Executing Machine-Instructions (AREA)

Abstract

提供了能够提高分支目的地预测的命中率的处理器设备。每次对数据高速缓冲存储器的加载指令被生成时,等同值判断电路判断来自相应线的先前加载数据和当前加载数据的一致/不一致。判断历史记录电路在N位区域中将在条件分支指令被生成之前等同值判断电路的N次判断结果记录作为历史记录。当条件分支指令生成时,分支预测电路基于N位区域中的历史记录,预测与通过条件分支指令的先前执行结果得到的先前分支目的地相同的分支目的地,或者预测与先前目的地不同的分支目的地。此外,分支预测电路将所预测的分支目的地的指令获取方向发给处理器主体电路。

Description

处理器设备
相关申请的交叉引用
于2017年5月26日提交的日本专利申请No.2017-104652的公开内容通过引用整体并入本文,包括说明书、附图和摘要。
技术领域
本发明涉及处理设备,并且例如涉及一种具有分支目的地预测功能的处理器设备。
背景技术
日本未审专利公开No.2011-141619公开了一种遵从存储器引导指令、标志复位指令和标志参考分支指令的微处理器单元,所述存储器引导指令是具有标志设置的存储器引导指令并且当来自存储器的引导数据不同于高速缓冲数据时设置标志,标志复位指令使标志复位,标志参考分支指令基于标志的值来判断分支的存在和不存在。当根据当前处理与某个处理之前的输入值之间的比较结果来配置跳过处理的执行的程序时,变得可以适当地使用这些指令通过标志将输入值进行比较,从而提高以上处理的效率。
此外,在2014年3月18日由Shoeisha出版的由Hennessy和Patterson编写的“COMPUTER ARCHTECTURE,Quantitative Approach,5th Edition”中(第198至200页)公开了使用具有多个条目的分支目的地缓冲器执行分支目的地预测的系统。在每个条目中,注册了用作条件分支指令的地址的指令地址、用作被预测为条件分支指令的下一PC(程序计数器)的指令地址的预测PC(程序计数器)以及用作用于预测条件分支指令是否被建立的信息的分支成功/失败预测。当生成的条件分支指令存在于条目中时,预先获取(fetch)预测PC。随后,当实际分支结果与预测不同时,使已获取的指令无效。此外,获取新的(正确)指令并且还更新条目。
发明内容
通常已知具有分支目的地预测功能的处理器设备。分支目的地预测是一种技术,其能够在生成条件分支指令时预先预测条件分支指令的分支目的地地址和预先获取预测分支目的地(地址)的指令。当高精度命中预测时,变得可以有效地使用指令流水线。作为用于分支目的地预测的系统,例如,在2014年3月18日由Shoeisha出版的由Hennessy和Patterson编写的“COMPUTER ARCHTECTURE,Quantitative Approach,5th Edition”中(第198至200页)所示,使用分支目的地缓冲器的系统是已知的。简而言之,该系统是当生成条件分支指令时预测与条件分支指令的先前分支结果(即,分支目的地地址)相同的分支结果的系统。
例如,在诸如科学计算的矩阵计算中,许多情况下循环过程被执行多次。因此,通过使用诸如在2014年3月18日由Shoeisha出版的由Hennessy和Patterson编写的“COMPUTERARCHTECTURE,Quantitative Approach,5th Edition”中(第198至200页)所示的系统,变得可以提高分支目的地预测的命中率。但是,例如在通过有限自动机(状态机)的机械控制等中,根据外部控制信号来定义是否执行循环处理的情况较多。在这种情况下,并不总是执行多个循环过程。因此,在与2014年3月18日由Shoeisha出版的由Hennessy和Patterson编写的“COMPUTER ARCHTECTURE,Quantitative Approach,5th Edition”中(第198至200页)所示的方法类似的方法中,分支目的地预测的命中率可能会降低。
鉴于以上情况作出了稍后描述的实施例。通过对本说明书和附图的描述,本发明的其它目的和新颖特征将变得显而易见。
根据一个实施例的处理器设备包括:数据高速缓冲存储器;等同值判断电路;判断历史记录电路;分支预测电路;以及负责获取、译码和执行指令的处理器主体电路。每当生成对所述数据高速缓冲存储器的加载指令时,等同值判断电路判断来自对应线的先前加载数据和当前加载数据的一致/不一致。判断历史记录电路分别在N位区域中记录在生成条件分支指令之前所述等同值判断电路的N次判断结果作为历史记录。基于N位区域中的历史记录,分支预测电路预测与通过条件分支指令的先前执行结果获得的先前目的地相同的分支目的地或与先前分支目的地不同的分支目的地。此外,分支预测电路向处理器主体电路发出预测分支目的地的指令的获取方向。
根据上述实施例,变得可以提高分支目的地预测的命中率。
附图说明
图1是示出根据本发明的半导体设备的配置例子的示意图;
图2是示出图1的处理器单元的主要部分的简要配置例子和操作例子的图;
图3A是示出其中向图2的处理器单元添加了历史掩码功能的处理器单元的主要部分的简要配置例子和操作例子的图;
图3B是示出其中向图2的处理器单元添加了历史掩码功能的处理器单元的主要部分的简要配置例子和操作例子的图;
图3C是示出其中向图2的处理器单元中添加了历史掩码功能的处理器单元的主要部分的简要配置例子和操作例子的图;
图4是详细示出图1中的处理器单元的配置例子的框图;
图5是详细示出图4的数据高速缓冲存储器的配置例子的框图;
图6是详细示出图4的分支目的地缓冲器的外围的配置例子的框图;
图7是示出图5的存储控制电路的处理内容的一个例子的流程图;
图8是示出图5的加载控制电路的处理内容的一个例子的流程图;
图9是示出图5的等同值判断电路和判断历史记录电路的处理内容的一个例子的流程图;
图10是示出图6的分支预测电路的处理内容的一个例子的流程图;
图11是示出图6的分支执行电路和缓冲器更新电路的处理内容的例子的流程图;
图12是详细示出根据本发明第二实施例的处理器单元中的图4的数据高速缓冲存储器的配置例子的框图;
图13是示出图12的存储控制电路的处理内容的一个例子的流程图;
图14是示出图12的加载控制电路的处理内容的一个例子的流程图;
图15是详细示出根据本发明的第三实施例的处理器单元中的图4的分支目的地缓冲器的外围的配置例子的框图;
图16是示出图15中的分支预测电路的处理内容的一个例子的流程图;
图17是示出图15中的分支执行电路和缓冲器更新电路的处理内容的例子的流程图;
图18是示出图17中的掩码更新过程的处理内容的一个例子的流程图;
图19是图18的补充图,并且是示出用于消除与分支无关的变量的机制的解释图;
图20是示出使用图15的处理器单元的条件分支程序的执行过程的一个例子的图;
图21是示出作为本发明的比较例子的处理器单元的主要部分的配置例子的示意图;
图22是示出图21的处理器单元的操作例子的流程图;和
图23是示出由处理器单元执行的源代码和与其对应的指令代码的例子的图。
具体实施方式
在下面的实施例中,为方便起见必要时将通过把发明划分成多个部分或实施例来描述本发明。但是,除非另有特别指出,否则它们并非无关。其中之一是其它的一些或全部的修改、应用、细节、补充说明等。当在以下实施例中提及元件的数目等(包括件数、数值、数量、范围等)时,除非特别指出并且原则上明确限于特定数目,否则其数目不限于特定数目并且可以大于或小于或等于该特定数目。
此外,在下面的实施例中,除非另外特别指出并且原则上被认为是绝对必要的,否则组件(包括元件步骤等)并不总是必需的。类似地,例如,当在下面的实施例中对组件等的形状、位置关系等进行参考时,除非另外特别指出并且原则上肯定不认为如此,否则它们将包括与其形状等基本近似或相似的组件。这同样适用于上述数目等(包括件数、数值、数量、范围等)。
尽管包括在根据实施例的每个功能块中的电路元件不具体限制,但是它们通过诸如CMOS(互补MOS晶体管)的已知集成电路技术形成在诸如单晶硅的半导体衬底上方。
在下文中,将参照附图描述本发明的实施例。相同的元件由相同的附图标记表示,并且省略重复的说明。
第一实施例
<半导体设备的配置>
图1是示出根据本发明第一实施例的半导体设备的配置例子的示意图。例如,图1所示的半导体设备DEV是包括单个半导体芯片的微控制器等。半导体设备DEV包括:处理器电路PRC;具有指令高速缓冲存储器ICCH和数据高速缓冲存储器DCCH的处理器单元(处理器设备)PRU;存储器MEM;各种外围单元;以及控制这些单元之间的通信并具有总线以及其中介电路等的总线控制器BSC。各种外围单元包括例如定时器电路TMR、串行IO(输入输出)电路SIO、并行IO电路PIO、AD(模数)转换器ADC等等。
指令高速缓冲存储器ICCH和数据高速缓冲存储器DCCH包括高速存储器,例如SRAM(静态随机存取存储器)等。存储器MEM是诸如DRAM(动态随机存取存储器)等的易失性存储器或诸如闪速存储器等的非易失性存储器。而且,存储器MEM主要保持由处理器电路PRC执行的程序(指令)以及伴随的各种数据等。处理器电路PRC根据需要执行预定程序,同时将存储器MEM上的程序和各种数据取到指令高速缓冲存储器ICCT和数据高速缓冲存储器DCCH中。
定时器电路TMR基于来自程序等的指令测量预定时间。串行IO电路SIO负责在向设备的外部发送串行数据和从设备的外部接收串行数据时进行控制,并且并行IO电路PIO负责在向设备的外部发送并行数据和从设备的外部接收并行数据时进行控制。AD转换器ADC将从外部输入的模拟数据转换为数字数据。此外,存储器MEM可以设置在设备的外部。根据情况,包括指令高速缓冲存储器ICCH和数据高速缓冲存储器DCCH的存储器MEM可以被提供在设备外部。
上述半导体设备DEV通过例如有限自动机(状态机)在机器控制等中使用的情况很多。在图1的例子中,并行IO电路耦合到提供在外部的开关SW,并且AD转换器ADC耦合到提供在外部的传感器SEN。例如,并行IO电路PIO将开关SW的接通/断开状态存储在存储器映射IO等中,并且AD转换器ADC将基于传感器SEN的检测结果的数字数据存储在存储器映射IO等中。
众所周知,存储器映射IO是这样的系统,其中在从处理器单元PRU看去的存储器地址空间中,存储器MEM的地址空间和各种外围单元的地址空间共存。处理器单元PRU根据程序执行状态机的处理。具体而言,例如,处理器单元PRU执行程序,以切换与上述存储器映射IO的数据相对应的状态机的状态,并且当数据没有被改变时,停留在特定状态并执行循环处理。
<处理器单元的主要部分的概要(比较例子)>
首先,在解释实施例的处理器单元之前,将解释比较例子的处理器单元。图21是示出作为本发明的比较例子的处理器单元的主要部分的配置例子的示意图。处理器单元可以包括分支目的地预测功能。图21示出了用于实现分支目的地预测功能的典型示意配置。根据图21所示的例子,分支目的地预测功能是通过提供分支目的地缓冲器BRBF实现。分支目的地缓冲器BRBF包括多个条目(在该例子中,n个条目),并且每个条目包括指令地址区域IADR_AR、分支目的地寻址区域BRADR_AR以及分支成功/失败预测区域BRP_AR。
条件分支指令的指令地址IADR被寄存在指令地址区域IADR_AR中。在分支目的地地址区域BRADR_AR中,注册有被预测为条件分支指令的分支目的地的指令地址(在本说明书中,称为“分支目的地地址(预测)BRADRp”)。在分支成功/失败预测区域BRP_AR中,注册有关于将条件分支指令预测为分支建立或者预测为分支未建立的信息(在本说明书中,称为“分支成功/失败预测BRP”)。
图22是示出图21的处理器单元的操作例子的流程图。在图22中,首先,处理器单元向存储器发送用于指令的获取PC(程序计数器)(即,获取存储在指令获取PC中的指令)并将其也发送到分支目的地缓冲器BRBF(步骤S1100)。分支目的地缓冲器BRBF在指令地址区域IADR_AR中进行搜索,以检查是否存在注册了与所发送的PC相同的值(即,相同的指令地址IADR)的条目(步骤S1101)。
当没有条目时,处理器单元判断获取到的指令是否是条件分支指令(步骤S1102)。当它不是条件分支指令时,处理器单元正常执行该指令(步骤S1103)。另一方面,当指令是条件分支指令时,处理器单元将条件分支指令的指令地址IADR注册在分支目的地缓冲器BRBF中。另外,处理器单元分别将指令地址(在本说明书中称为“分支目的地地址(结果)BRADRr”)和由条件分支指令的执行结果获得的分支成功/失败结果注册为分支目的地地址(预测)BRADRp和分支成功/失败BRP(步骤S1104)。
另一方面,在步骤S1101中,当在分支目的地缓冲器BRBF中存在条目作为预测分支目的地时,分支目的地缓冲器BRBF发送要注册在条目中的分支目的地地址(预测)BRADRp(步骤S1105)。响应于上述,处理器单元预先获取分支目的地地址(预测)BRADRp的指令(步骤S1105)。随后,处理器单元判断在条件分支指令的执行结果处获得的分支目的地地址(结果)BRADRr是否与步骤S1105的分支目的地地址(预测)BRADRp一致(步骤S1106)。
当它们一致时,预测命中,并且处理器单元执行在步骤S1105中预先获取的指令而不停顿(步骤S1108)。另一方面,当它们不一致时,预测未命中。因此,处理器单元使在步骤S1105中预先获取的指令无效,并且重新获取存储在分支目的地地址(结果)BRADRr中的正确指令(步骤S1107)。此外,在步骤S1107中,处理器单元分别使用分支目的地地址(结果)BRADRr和分支成功/失败结果来更新条目中的分支目的地地址(预测)BRADRp和分支成功/失败预测BRP。
在这点上,当在步骤S1106中发生预测未命中时,在使用流水线来处理IF(指令获取)、ID(指令译码)和EX(执行)的处理器单元中,伴随着重新获取发生流水线的停顿,并且在执行下一指令之前需要几个时钟(例如,IF和Id的两个时钟)。因此,当预测未命中以高频发生时,伴随着流水线的停顿,处理器单元的执行速度(MIPS:每秒百万指令)减小。因此,希望提高分支目的地预测的命中率。
<处理器单元(比较例子)的问题>
图23示出处理器单元执行的源代码和与其对应的指令代码的一个例子。图23所示的源代码SCD持续获得存储器地址“IO1”的数据直到存储器地址“IO2”的数据变为0。源代码SCD由编译器变换为图23的指令代码ICD,然后,存储在图1的存储器MEM中。
例如,存储器地址“IO2”对应于保持图1所示的开关SW的O接通/断开状态的存储器映射IO,并且存储器地址“IO1”对应于保持图1所示的传感器SEN的检测结果的存储器映射IO。在这种情况下,基于图23的指令代码ICD,处理器单元执行处理,以便在开关SW的接通时段期间使用循环过程来顺序地接收传感器SEN的检测结果。备选地,当开关SW处于断开状态时,处理器单元执行处理而不使用循环过程。
在这方面,例如,假设开关SW从断开状态切换到接通状态并且接通周期保持足够长,假定处理器单元使用图21和图22所示的分支目的地预测功能来执行图23的指令代码ICD。在这种情况下,首先,根据第一循环过程,处理器单元将图23的指令代码ICD中的作为条件分支指令的指令地址IADR“4”注册在分支目的地缓冲器BRBF中,通过执行结果得到的分支目的地地址(结果)BRADRp(在这种情况下为“1”)和分支建立/未建立结果(在这种情况下,“建立”)被注册(步骤S1104)。
随后,当在第二循环过程中执行指令地址IADR“4”的条件分支指令时,基于分支目的地缓冲器BRBF,处理器单元预先获取分支目的地地址(预测)BRADRp“1”的指令(步骤S1105)。当开关SW的接通周期足够长时,通过条件分支指令的执行结果得到的分支目的地地址(结果)BRADRr与分支目的地地址(预测)BRADRp“1”一致。因此,通过使用预先获取到的指令,处理器单元执行第三循环过程而不会使流水线停顿(步骤S1106和S1108)。类似地,在下文中,处理器单元可以重复执行循环过程而不会使流水线停顿。
因此,图21和图22的分支目的地预测功能是如下的系统:当生成条件分支指令时,预测与条件分支指令的先前执行结果(即,分支目的地地址(结果)BRADRr)相同的执行结果。因此,当执行多个循环过程时,可以提高分支目的地预测的命中率。然而,例如,当在机器控制系统等中采用图1的半导体设备DEV时,取决于预期的用途,开关SW的接通/断开状态可以在短时段内频繁地改变。
在这样的情况下,例如,在上述的第二循环过程等中(即,分支目的地地址(结果)BRADRr是“5”)可能发生预测未命中。因此,根据对分支目的地地址(结果)BRADRr“5”的指令的重新获取,流水线处理停顿。例如,当处理器单元定期执行图23的指令代码ICD时,停顿发生得更频繁,这可能降低处理器单元的执行速度。
<处理器单元的主要部分的概要(第一实施例)>
图2是示出图1的处理器单元的主要部分的简要配置例子和操作例子的图。除了图1的处理器单元PRU中的处理器电路PRC和数据高速缓冲存储器DCCH的配置之外,图2示意性地示出了由处理器电路PRC执行的指令代码ICD1和指令代码ICD1的执行进度。
数据高速缓冲存储器DCCH包括多个条目,并且每个条目具有标签区域和行区域。存储器地址被注册在标签区域中,并且存储器地址的数据被注册在行区域中。例如,在图2的数据高速缓冲存储器DCCH中,基于存储器映射IO的存储器地址“IO1”和“IO2”被注册在标签区域中。在这种情况下,分别对应于“IO1”和“IO2”的行区域的数据可以在不经过处理器电路PRC的存储指令的情况下被实际改变。换句话说,可以在不涉及处理器电路PRC的情况下改变数据。
具体地说,例如,当基于存储器映射IO将数据写入存储器地址时,图1的并行IO电路PIO经由总线控制器BSC向数据高速缓冲存储器DCCH发出存储器地址的无效请求。在接收到无效请求时,当伴随无效请求的存储器地址被注册在标签区域中时,数据高速缓冲存储器存储器DCCH将对应的行区域设置为无效状态。当处理器电路PRC向无效状态的行区域发出加载指令时,使用从存储器MEM加载的最新数据重写行区域以处于有效状态。因此,“IO1”和“IO2”的每个行区域中的数据在没有经过处理器电路PRC的存储指令的情况下被改变。
根据指令代码ICD1,在循环过程中,下面的处理内容被定义。也就是说,顺序地加载存储器地址“IO1”和“IO2”的数据,计算以“IO1”和“IO2”的加载数据作为参数的函数“XX”,并且循环过程在计算结果不为零的同时被重复。详细地,例如,如图23中所示,根据情况指令代码ICD1也包括对电阻器等的访问,为了使说明易懂而将其省略。
处理器电路PRC包括等同值判断电路DJG、判断历史记录电路DJGHR、分支预测电路BRPC、处理器主体电路PRMC以及分支目的地缓冲器BRBF。每次生成对数据高速缓冲存储器DCCH的加载指令时,等同值判断电路DJG判断来自与加载指令对应的行区域的先前加载数据和当前加载数据的一致/不一致。判断历史记录电路DJGHR设置有包括例如N位(在本例中,N=2)的移位寄存器的历史位区域(N位区域)SREG。判断历史记录电路DJGHR在历史位区域SREG中将条件分支指令生成之前的等同值判断电路DJG的N次判断结果分别记录为历史记录HR。
在图2的例子中,等同值判断电路DJG判断伴随时间t1的指令地址IADR“1”的加载指令的先前加载数据(在该情况下为“D1”)与类似地伴随时间t5的指令地址IADR“1”的加载指令的当前加载数据(在该情况下为“D1”)的一致/不一致。而且,等同值判断电路DJG判断伴随时间t2的指令地址IADR“2”的加载指令的先前加载数据(在该情况下为“D2”)与类似地伴随时间t6的指令地址IADR“2”的加载指令的当前加载数据(在该情况下为“D2”)的一致/不一致。在这方面,在本说明书中,加载数据的指示(例如“IO1”、“IO2”)被称为变量,并且加载数据被称为变量值。
判断历史记录电路DJGHR分别在2位历史位区域SREG中记录等同值判断电路DJG的两个判断结果作为历史记录HR。在图2的例子中,历史位区域SREG中的2位历史记录HR全部表示'T'(与先前记录一致)。另外,可以根据需要决定历史位区域SREG的位数(即,记录关于在条件分支指令生成之前的加载指令的次数的等同值判断结果)。根据情况,可以决定位数,以便可以通过设置可变地控制位数。
当生成条件分支指令时,分支预测电路BRPC基于历史位区域SREG中的历史记录HR预测与通过条件分支指令的先前执行结果得到的先前目的地相同的分支目的地或与先前分支目的地不同的分支目的地,并且发出预测分支目的地的指令获取方向IFD。具体地,当历史位区域SREG中的历史记录全部指示'T'(与先前记录一致)时,分支预测电路BRPC预测与先前目的地相同的分支目的地。备选地,当历史记录HR中的任何一个指示'F'(与先前记录不一致)时,分支预测电路BRPC预测与先前目的地不同的分支目的地。
在图2的例子中,当在时间t8发生指令地址IADR“4”的条件分支指令时,分支预测电路BRPC参考历史位区域SREG。基于历史位区域SREG的历史记录HR两次都表示一致(即,(T,T))。因此,分支预测电路BRPC预测与通过指令地址IADR“4”的条件分支指令的先前执行结果得到的分支目的地相同的分支目的地(即,在时间t4处的分支目的地的指令地址IADR“1”)。然后,分支预测电路BRPC将预测的分支目的地的指令获取方向IFD发给处理器主体电路PRMC。
众所周知,处理器主体电路PRMC是对指令进行获取、译码、执行等的电路,并且也是通过流水线处理执行指令的电路。作为操作之一,当执行条件分支指令时,响应于来自分支预测电路BRPC的获取方向IFD,处理器主体电路PRMC预先获取预测的分支目的地的指令(这里为指令地址IADR“1”的指令)。在这点上,如果由条件分支指令的当前执行结果获得的分支目的地不同于预测的分支目的地,则处理器主体电路PRMC使预先获取的指令无效,并且重新获取正确的指令(例如,指令地址IADR“5”的指令)。
如图21的情况中那样,在分支目的地缓冲器BRBF中,基于处理器主体电路PRMC的条件分支指令的执行结果,注册有指令地址IADR与先前分支目的地的信息的相互关系。在该例子中,在分支目的地缓冲器BRBF中,基于在时间t4的条件分支指令的执行结果,注册有指令地址IADR“4”、分支目的地地址BRADR“1”和分支成功/失败预测BRP“建立”的相互关系。
结合在时间t8的条件分支指令,当预测与先前目的地相同的分支目的地时,分支预测电路BRPC从分支目的地缓冲器BRBF得到关于分支目的地的信息。然后,使用所得到的分支目的地地址BRADR作为分支目的地地址(预测)BRADRp,分支预测电路发出其获取方向IFD。另一方面,如果将预测与先前目的地不同的分支目的地,则分支预测电路BRPC单独地定义分支目的地地址(预测)BRADRp。
具体而言,当在分支预测地址BRADR“1”和分支成功/失败预测BRP“建立”被注册在分支目的地缓冲器BRBF中时并且当预测与先前目的地不同的分支目的地时,分支预测电路BRPC预测分支成功/失败(预测)为“未建立”并定义对应的分支目的地地址(预测)BRADRp(这里为“5”)。备选地,当在分支目的地缓冲器BRBF中注册了分支目的地地址BRADR“5”和分支成功/失败预测BRP“未建立”时并且当预测与先前目的地不同的分支目的地时,分支预测电路BRPC预测分支成功/失败为“建立”并定义对应的分支目的地地址(预测)BRADRp(这里为“1”)。
另外,在图2中,虽然未图示,但在时间t8后进行的循环处理中,等同值判断电路DJG根据循环处理中的加载指令和在时间t5和时间t6的每个变量值,判断每个变量值的一致/不一致。另外,在时间t8,如果在时间t8的执行结果与时间t4的执行结果不同,则分支目的地缓冲器BRBF的分支目的地地址BRADR和分支成功/失败预测BRP基于在时间t8的执行结果(分支目的地地址(结果)BRADRr)而被更新。
如上所述,当生成条件分支指令时,图2的处理器单元PRU在伴随加载指令到达的变量值和到达先前条件分支指令的变量值相同时,预测与先前的条件分支指令的分支目的地相同的分支目的地。而且,当它们不同时,处理器单元PRU预测与先前条件分支指令的分支目的地不同的分支目的地。另外,如图23所示,特别是在机械控制等的系统中,根据来自存储器地址的频繁切换的变量值,相当多地进行改变分支目的地的过程。
在这种情况下,通过使用图2的系统,可以根据变量值与存储器地址的不同来改变预测分支目的地。因此,如图21和图22所示,与图21和图22所示的其中与先前分支目的地相同的分支目的地被简单地预测的系统相比,变得可以提高分支目的地预测的命中率。例如,在图2的时间t6的变量值与时间t2的变量值不同的情况下,在时间t8,能够预先将与在时间t4的地址不同的分支目的地地址“5”设定为分支目的地地址(预测)BRADRp。然后,当在时间t7的运算结果根据在时间t6的值的变化而变为零时,通过在时间t8的条件分支指令的执行结果得到的分支目的地地址(结果)BRADRr也变为“5”,并且分支目的地预测变成命中。
在这方面,事实上,可以想象的是,用于定义分支目的地的变量不是一起到达条件分支指令的所有变量,而是部分变量。例如,在如图23所示的指令代码ICD的情况下,用于定义分支目的地的变量是“IO2”,并且“IO1”是不相关的。图2的系统确定包括无关变量的一致/不一致,并基于其判断结果预测分支目的地,这可以增加预测未命中。例如,在图2中,如果分支目的地单独由“IO2”确定,并且在时间t8频繁改变“IO1”的变量值,则预测与先前分支目的地不同的分支目的地。但是,实际分支目的地可以与先前分支目的地相同。
为了避免这种情况,使用如图3A、图3B和图3C所示的处理器单元是有益的。图3A、图3B和图3C是示出在图2的处理器单元中添加了历史掩码功能的处理器单元的主要部分的简要配置例子和操作例子的图。与图2的情况不同,在图3A和图3B中,提供了更新历史MSK的缓冲器更新电路UPBF。在图3C中,分支预测电路BRPC通过在历史位区域SREG中反映历史掩码MSK来预测分支目的地。
在图3A、图3B和图3C中,处理器电路PRC执行不同于图2中的指令代码ICD。与图2中的指令代码ICD1不同,指令代码ICD2仅使用存储器地址“IO2”的加载数据来计算指令地址IADR“3”中的函数“XX”。在图3A的例子中,在处理器电路PRC的指令执行过程中,“IO1”的变量值在时间t1和时间t5不同。然而,在时间t8的当前分支目的地中,“IO2”的变量值没有变化,并且分支目的地与时间t4处的先前分支目的地相同。
以这种方式,在当前分支目的地与上一分支目的地相同时,缓冲器更新电路UPBF将历史位区域SREG中其历史记录HR指示“F”(与先前情况不一致)的位视为与分支无关的位(变量),并将其定义为掩码目标位。具体地,在具有与历史位区域SREG的位数相同的位数的历史掩码MSK中,缓冲器更新电路UPBF将历史记录HR指示“F”的位设置为“0”(与分支无关),其意味着掩码目标位。在图3A的例子中,即使“IO1”的历史记录HR是“F”(换句话说,变量值被改变),分支目的地也变得与先前时间的分支目的地相同。因此,“IO1”被定义为掩码目标位。
结果,如图3C所示,针对作为预测目标位的从历史位区域SREG中排除了掩码目标位的位(即,历史掩码MSK是“1”(与分支有关)的位),分支预测电路BRPC执行分支目的地预测。具体地,当预测目标位的历史记录HR全部指示“T”(与先前情况一致)时,分支预测电路BRPC预测与先前分支目的地相同的分支目的地。另外,在预测目标位的历史记录HR中的任意一个指示“F”(与前面的情况不一致)时,分支预测电路BRPC预测与先前分支目的地不同的分支目的地。在图3C的例子中,对于作为预测目标位的“IO2”,只要“IO2”的变量值没有变化,就预测与上次相同的分支目的地。结果,此后,分支目的地预测将命中,由此变得可以提高分支目的地预测的命中率。
而且,根据图3B的例子,在处理器电路PRC的指令执行过程中,在时间t1和时间t5,“IO1”的变量值不改变。然而,由于“IO2”的变量值在时间t6已经改变,所以在时间t8处的当前分支目的地与在时间t4处的上一分支目的地不同。因此,当先前分支目的地与当前分支目的地不同时,在历史位区域SREG中,缓冲器更新电路UPBR将其历史记录HR指示“T”(根据先前情况)的位视为与分支无关的位(变量)并将其定义为掩码目标位。
在图3B的示例中,尽管“IO1”的历史记录HR是“T”(换句话说,变量值没有改变),但是分支目的地已经变得与上次不同。因此,“IO1”被定义为掩码目标位(历史掩码MSK=“0”的位)。结果,尽管没有示出,但是与图3C的情况一样,下次关于“IO2”作为预测目标位来执行分支预测。结果,之后,分支目的地预测将被命中,由此变得可以提高分支目的地预测的命中率。另外,尽管未示出,但缓冲器更新电路UPBF将关于历史掩码MSK的信息(即,掩码目标位和预测目标位)注册在分支目的地缓冲器BRBF中。当执行分支目的地预测时,分支预测电路BRPC参考分支目的地缓冲器BRBF的历史位区域SREG和历史掩码MSK。
<处理器单元的配置(第一实施例)>
图4是示出图1中的处理器单元的详细配置例子的框图。图4所示的处理器单元(处理器设备)PRU包括:处理器主体电路PRMC;数据高速缓冲存储器DCCH;指令高速缓冲存储器ICCH;等同值判断电路DJG;判断历史记录电路DJGHR;分支目的地缓冲器BRBF;分支预测电路BRPC;和缓冲器更新电路UPBF。处理器主体电路PRMC包括:指令获取电路IFC;指令译码器IDC;和指令执行电路EXC。等同值判断电路DJG、判断历史记录电路DJGHR、分支目的地缓冲器BRBF、分支预测电路BRPC和缓冲器更新电路UPBF基本上具有与如图3A至图3C描述相同的功能。
指令高速缓冲存储器ICCH缓存从图1的存储器MEM读取的指令代码。在这个例子中,处理器单元PRU被提供有指令高速缓冲存储器ICCH。然而,处理器单元PRU可以不具有指令高速缓冲存储器ICCH,并且其配置可以使得直接从存储器MEM读取指令代码。指令获取电路IFC获取从指令高速缓冲存储器ICCH和存储器MEM读出的指令代码,并且将其发送到指令译码器IDC。而且,指令获取电路IFC将获取到的指令地址(图2的IADR等)发送到分支预测电路BRPC。此外,指令获取电路IFC从分支预测电路BRPC接收分支目的地地址(预测)BRADRp的获取指令(图2的IFD等)。此外,指令获取电路IFC从分支执行电路BRE接收分支目的地地址(结果)BRADRr。
指令译码器IDC对从指令获取电路IFC接收到的指令代码进行译码,并指示指令执行电路EXC执行译码后的指令。指令执行电路EXC包括:加载执行电路LDE;存储执行电路STE;和分支执行电路BRE。指令执行电路EXC实际上包括其他各种执行电路。当由指令获取电路IFC指示的指令是加载指令时,指令执行电路EXC使用加载执行电路LDE执行处理。另外,如果是存储指令,则指令执行电路EXC使用存储执行电路STE执行处理,并且如果是条件分支指令,则执行使用分支执行电路BRE执行处理。
基于存储指令中的描述,存储执行电路STE将存储地址和存储数据发送到数据高速缓冲存储器DCCH。基于加载指令中的描述,加载执行电路LDE向数据高速缓冲存储器DCCH发送加载地址并从数据高速缓冲存储器DCCH接收加载数据。分支执行电路BRE执行条件分支指令并更新接下来要执行的指令的PC(程序计数器)。而且,当分支目的地预测是预测未命中时,分支执行电路BRE使获取到的指令无效。此外,分支执行电路BRE将更新后的PC发送到指令获取电路IFC作为分支目的地地址(结果)BRADRr(即,正确的指令获取地址)。此外,分支执行电路BRE将条件分支指令的指令地址IADR、分支目的地地址(结果)BRADRr以及分支成功/失败结果发送到缓冲器更新电路UPBF。
图5是示出图4中的数据高速缓冲存储器的详细配置例子的框图。图5所示的数据高速缓冲存储器DCCH包括作为存储区域的多个条目,每个条目具有标签区域TG_AR和行区域LN_AR。标签区域TG_AR存储对应于加载地址或存储地址的标签地址。行区域LN_AR包括:数据区域DT_AR,其存储加载数据(例如,与当前加载指令相对应的当前加载数据)或存储数据;以及最终加载数据区域LDT_AR,其存储最终加载数据(例如,与先前加载指令对应的先前加载数据)。另外,例如,当使用诸如直接映射的高速缓冲存储器系统时,标签区域TG_AR是不必要的。
此外,数据高速缓冲存储器DCCH包括作为相应条目的控制电路的加载控制电路LDC和存储控制电路STC。加载控制电路LDC从加载执行电路LDE接收加载地址。此外,加载控制电路LDC确定与加载地址对应的标签地址是否被存储在数据高速缓冲存储器DCCH中的任何一个条目的标签区域TG_AR中(即,高速缓冲存储器命中/高速缓冲存储器未命中)。在高速缓冲存储器未命中的情况下,加载控制电路LDC从存储器MEM中的与标签地址对应的区域读取用于行长度的存储器数据。此外,加载控制电路LDC使用标签地址和存储器数据将新条目注册在数据高速缓冲存储器DCCH中,并选择该条目。
而且,在高速缓冲存储器命中的情况下并且当命中条目的行区域LN_AR有效时(即,高速缓冲存储器数据是最新的),加载控制电路LDC简单地选择命中条目。另一方面,在高速缓冲存储器命中的情况下并且当命中条目的行区域LN_AR无效时(即,存储器数据是最新的),加载控制电路LDC从存储器MEM中的对应于标签地址的区域读取用于行长度的存储器数据。然后,加载控制电路LDC使用存储器数据重新填充命中条目并选择该条目。在这方面,无效的识别取决于高速缓冲存储器系统。例如,存在具有示出其是否有效的、在行LN_AR中的存储器区域的系统,并且其它电路获得对该区域的访问。此外,还有一些系统,如利用地址进行唯一标识的系统。
对于如此选择的条目,加载控制电路LDC从数据区域DT_AR中的与加载地址对应的区域读取加载数据DT,并将加载数据DT发送到加载执行电路LDE。在此,根据实施例,采用其中数据区域DT_AR的位宽度(即,行长度)是加载数据和存储数据的每个位宽度(即,加载大小或存储大小)的N倍(N是大于等于2的整数)的例子。以下,将与加载地址对应的区域称为“加载地址区域”,将与存储地址对应的区域称为“存储地址区域”。
此外,对于所选择的条目,加载控制电路LDC分别从数据区域DT_AR中的加载地址区域和上一加载数据区域LDT_AR中的加载地址区域读取加载数据DT和上一加载数据LDT,并将它们发送到等同值判断电路DJG。此外,加载控制电路LDC利用加载数据DT更新上一加载数据区域LDT_AR中的加载地址区域。
存储控制电路STC从存储执行电路STE接收存储地址和存储数据。此外,它判断与所关注的存储地址对应的标签地址是否被存储在数据高速缓冲存储器DCCH内的任何一个条目的标签区域TG_AR中(即,高速缓冲存储器命中/高速缓冲存储器未命中)。在高速缓冲存储器未命中的情况下,存储控制电路STC在数据高速缓冲存储器DCCH中注册对应于存储地址的新条目。然后,存储控制电路STC从与存储器MEM内的标签地址相对应的区域读取用于行长度的存储器数据。此外,存储控制电路STC将存储器数据存储在条目的数据区域DT_AR和上一加载数据区域LDT_AR中,并选择该条目。另一方面,在高速缓冲存储器命中的情况下,存储控制电路STC简单地选择命中条目。因此,关于所选择的条目,存储控制电路STC将存储数据存储在数据区域DT_AR中的存储地址区域中。
如在图3A至图3B中的情况那样,每当生成加载指令时,等同值判断电路DJG判断来自加载控制电路LDC的加载数据DT(即,当前加载数据)和上一加载数据LDT(即,先前加载数据)的一致/不一致。判断历史记录电路DJGHR在历史记录位区域SREG中分别记录在生成条件分支指令之前的等同值判断电路DJG的N次(在图3A至图3C图的例子中为2次)判断结果作为历史记录HR。
图6是详细示出图4的分支目的地缓冲器的外围的配置例子的框图。分支目的地缓冲器BRBF包括多个条目。在每个条目中,注册有条件分支指令的指令地址、关于先前分支目的地的信息和历史掩码的相互关系。具体地,每个条目包括:指令地址区域IADR_AR,其中存储条件分支指令的指令地址IADR;分支目的地地址区域BRADR_AR和分支成功/失败预测区域BRP_AR,其中存储关于先前分支目的地的信息;以及历史掩码区域MSK_AR,其中存储历史掩码MSK。
例如,条件分支指令建立时的分支目的地地址被存储在分支目的地寻址区域BRADR_AR中,作为分支目的地地址BRADR。例如,伴随先前条件分支指令的分支成功/失败结果BRPr作为分支成功/失败预测BRP被存储在分支成功/失败预测区域BRP_AR中。例如,分支成功/失败预测BRP包括用于将建立的条件分支表示为“1”(=“T”)以及将未建立的条件分支表示为“0”(=“F”)的位。如图3A等所述,历史掩码MSK包括逐位对应于历史位区域SREG中的位队列的位队列。例如,当与历史位区域SREG中的第K位相对应的变量与分支目的地预测相关时,则历史掩码MSK的第K位值被设置为“1”。另外,当变量不相关时,该值被设置为“0”。
此外,分支目的地缓冲器BRBF的条目的描述应当是其中可以理解在条件分支指令的建立和未建立时的分支目的地地址的描述,而不特别限于如图6所示的描述。例如,这里,可以从条件分支指令的指令地址IADR(例如,将作为下一指令地址)计算未建立的条件分支指令的分支目的地地址。但是,必要时,例如,每个条目还可以包括在条件分支指令未建立时保持分支目的地地址的区域。
分支目的地缓冲器BRBF从分支预测电路BRPC接收指令获取地址。此外,分支目的地缓冲器BRBR判断指令获取地址是否被存储在一个条目的指令地址区域IADR_AR中(即,条目命中/条目未命中)。作为条目命中存在/不存在信息EH,分支目的地缓冲器BRBF将确定结果发送到分支预测电路BRPC。而且,在条目命中的情况下,分支目的地缓冲器BRBF给分支预测电路BRPC发送条目的分支目的地地址BRADR、分支成功/失败预测BRP和历史掩码MSK。另一方面,在条目未命中的情况下,不发送上述信息。但是,该配置可以使得发送预先定义的无效值。
分支目的地缓冲器BRBF从缓冲器更新电路UPBF接收条件分支指令的指令地址IADR、分支目的地地址BRADR、分支成功/失败预测BRP以及历史掩码MSK。此外,基于来自缓冲器更新电路UPBF的指令,分支目的地缓冲器BRBF更新或新注册条目。在这点上,条件分支指令的指令地址IADR由分支执行电路BRE定义。基于来自分支执行电路BRE的分支目的地地址(结果)BRADRr和分支成功/失败结果BRPr来定义分支目的地地址BRADR和分支成功/失败预测BRP。历史掩码MSK由缓冲器更新电路UPBF计算。
分支预测电路BRPC从指令获取电路IFC接收指令获取地址,并将其发送到分支目的地缓冲器BRBF。响应于此,分支预测电路BRPC从分支目的地缓冲器BRBF接收条目命中存在/不存在信息EH、分支目的地地址BRADR、分支成功/失败预测BRP以及历史掩码MSK。就此而言,分支成功/失败预测BRP表示伴随上一条件分支指令的分支成功/失败结果BRPr。而且,分支预测电路BRPC从判断历史记录电路DJGHR接收历史记录HR。
在条目命中的情况下,分支预测电路BRPC使用接收到的历史记录HR、历史掩码MSK和分支成功/失败预测BRP来预测条件分支指令的成功或失败。分支预测电路BRPC根据预测结果来定义分支目的地地址(预测)BRADRp,并将其作为指令获取地址发送到指令获取电路IFC。也就是说,如图2等所示,分支预测电路BRPC将预测分支目的地的指令的获取指令IFD发给指令获取电路IFC。而且,分支预测电路BRPC向缓冲器更新电路UPBF发送所接收的历史记录HR、条目命中存在/不存在信息EH、分支成功/失败预测BRP以及历史掩码MSK。
当接收到的条目命中存在/不存在信息EH表示条目未命中时,使用来自分支执行电路BRE的条件分支指令的指令地址IADR、分支目的地地址(结果)BRADRr、分支成功/失败结果BRPr以及自身初始化的历史掩码MSK,缓冲器更新电路UPBF在分支目的地缓冲器BRBF中新注册条目。另一方面,当接收到的条目命中存在/不存在信息EH表示条目命中时,使用来自分支执行电路BRE的分支成功/失败结果BRPr和由其自身计算的历史掩码MSK,缓冲器更新电路UPBF更新分支目的地缓冲器BRBR所对应的条目。
<处理器单元的操作(第一实施例)>
如果因果关系相同,下面示出的过程则可以同时被执行。备选地,包括相同过程内容的那些过程可以作为一个过程来执行。此外,关于要接收和发送的值,当没有适用的值时,可以将任何值作为无效值发送和接收。此外,值可以与指示该值本身存在/不存在的信息一起发送和接收。
图7是示出图5的存储控制电路的处理内容的一个例子的流程图。存储控制电路STC搜索以检查在数据高速缓冲存储器DCCH的条目中任何一个条目的标签区域TG_AR中是否存在对应于存储地址的标签地址(步骤S101和S102)。换句话说,存储控制电路STC判断高速缓冲存储器命中/高速缓冲存储器未命中。
当搜索结果是命中(高速缓冲存储器命中)时,存储控制电路STC将存储数据存储在命中条目中的数据区域DT_AR中的存储地址区域中(步骤S103)。另一方面,当搜索结果是高速缓冲存储器未命中(高速缓冲存储器未命中)时,存储控制电路STC在数据高速缓冲存储器DCCH中新注册条目(步骤S104)。具体地说,存储控制电路STC将与存储地址对应的标签地址存储在新条目的标签区域TG_AR中。此外,存储控制电路STC从与标签地址相对应的存储器MEM中的区域读取用于行长度的存储器数据,并将该存储器数据存储在新条目的数据区域DT_AR和上一加载数据区域LDT_AR中。此外,存储控制电路STC将存储数据存储在新条目的数据区域DT_AR中的存储地址区域中。
图8是示出图5中的加载控制电路的处理内容的一个例子的流程图。加载控制电路LDC搜索以检查在数据高速缓冲存储器DCCH的任何一个条目的标签区域TG_AR中是否存储有与加载地址对应的标签地址(步骤S201和S202)。换句话说,加载控制电路LDC判断高速缓冲存储器命中/高速缓冲存储器未命中。
当搜索结果是命中(高速缓冲存储器命中)时,加载控制电路LDC判断命中条目的行区域LN_AR是否有效(步骤S203)。当它无效时,加载控制电路LDC通过步骤S204切换到步骤S206。当它不是无效时,加载控制电路LDC直接切换到步骤S206。在步骤S204中,加载控制电路LDC从对应于命中条目的标签地址的存储器MEM中的区域读取用于行长度的存储器数据,并将其存储在条目的数据区域DT_AR中。
另一方面,在步骤S202中,当搜索结果是未命中(高速缓冲存储器未命中)时,加载控制电路LDC在数据高速缓冲存储器DCCH中新注册条目(步骤S205)。具体而言,加载控制电路LDC将与加载地址对应的标签地址存储在新条目的标签区域TG_AR中。此外,加载控制电路LDC从存储器MEM中与标签地址相对应的区域读取用于行长度的存储器数据,并将该存储器数据存储在新条目的数据区域DT_AR和上一加载数据区域LDT_AR中。随后,过程切换到步骤S206。
在步骤S206中,在目标条目中,加载控制电路LDC从数据区域DT_AR中的加载地址区域读取用于行长度的加载数据DT,并将加载数据DT发送到加载执行电路LDE。然后,在目标条目中,加载控制电路LDC分别从在数据区域DT_AR和上一加载数据区域LDT_AR中的加载地址区域读取加载数据DT和上一加载数据LDT,并将它们发送到等同值判断电路DJG(步骤S207)。随后,加载控制电路LDC将读取的加载数据DT存储在上一加载数据区域LDT_AR中的加载地址区域中(步骤S208)。
图9是示出图5中的等同值判断电路和判断历史记录电路的处理内容的例子的流程图。等同值判断电路DJG将从加载控制电路LDVC接收的加载数据DT与上一加载数据LDT进行比较,并将比较结果发送到判断历史记录电路DJGHR(步骤S301和S302)。当接收到“T”的比较结果(一致)时,判断历史记录电路DJGHR将“T”(一致)存储在历史位区域(例如,移位寄存器)SREG的最新位中,并丢弃最老的位上的信息(步骤S303)。另一方面,在接收到“F”的比较结果(不一致)时,判断历史记录电路DJGHR将“F”(不一致)存储在历史位区域SREG的最新位中,并丢弃最老的位上的信息(步骤S304)。
<分支目的地预测方法(第一实施例)>
图10是示出图6中的分支预测电路的处理内容的一个例子的流程图。分支预测电路BRPC从判断历史记录电路DJGHR得到历史记录HR(步骤S401),并从指令获取电路IFC接收指令获取地址(步骤S402)。使用所接收的指令获取地址作为搜索关键字,分支预测电路BRPC搜索分支目的地缓冲器BRBF的指令地址区域IADR_AR(步骤S403和S404)。即,分支预测电路BRPC判断指令获取地址是否被存储在分支目的地缓冲器BRBF的任何条目的指令地址区域IADR_AR中(条目命中/条目未命中)。
在条目未命中的情况下并且当指令获取地址的指令是条件分支指令时(步骤S405),分支预测电路BRPC向缓冲更新电路UPBF发送历史记录HR、条目命中存在/不存在信息EH、分支成功/失败预测BRP和历史掩码MSK(步骤S413)。在该状态下,条目命中存在/不存在信息EH表示条目未命中,并且分支成功/失败预测BRP和历史掩码MSK表示例如无效值等
另一方面,在步骤S404中条目命中的情况下,分支预测电路BRPC从命中条目中得到分支目的地地址BRADR、分支成功/失败预测BRP和历史掩码MSK(步骤S406)。然后,分支预测电路BRPC使用历史记录HR和历史掩码MSK,对每个位计算步骤S407的公式,并判断位的所有计算结果是否都是“0”(步骤S408)。在这点上,当(HR,MSK)=(F,1)时,在步骤S407的公式中得到值“1”,并且在其余情况下,得到值“0”。因此,关于历史掩码MSK为“1”(与分支有关)的变量,在步骤S408中所有计算结果都示出为“0”的情况意味着变量的所有历史记录HR示出“T”的情况(与先前时间没有变化)。
在步骤S408中,计算结果不一定必须全部为“0”,并且例如可以根据“0”的位数进行判断。位的数量可以是例如通过实验统计得到的值或随机设置的值。另外,通过组合另一分支目的地预测方法,例如,当在步骤S408中计算结果不全为“0”时,通过使用上述另一分支目的地预测方法,可以进行进一步的判断。另外,可以不依赖于加载数据将历史掩码MSK全部为“0”的情况视为分支指令,并且使用上述另一分支目的地预测方法,可以添加进一步的判断。
当在步骤S408中的所有计算结果都是“0”时,分支预测电路BRPC判断在步骤S406中获得的分支成功/失败预测BRP(即,与先前条件分支指令有关的分支成功/失败结果)是“建立”还是“未建立”(步骤S409)。在分支成功/失败预测BRP是“建立”的情况下,分支预测电路BRPC预测“建立”时的分支目的地地址(即,在步骤S406中得到的分支目的地地址BRADR)(步骤S410)。另一方面,当分支成功/失败预测BRP是“未建立”时,分支预测电路BRPC预测在“未建立”时的分支目的地地址(步骤S412)。
关于“未建立”的分支目的地地址,它可以是例如当前指令获取地址之后的指令地址。备选地,在步骤S406中,进一步接收指令地址IADR,并且可以使用下一指令地址作为“未建立”时的分支目的地地址。此外,例如,当在分支目的地缓冲器BRBF的条目中提供“未建立”时的分支目的地地址的存储区域时,可以使用该区域中的信息。因此,在步骤S408中,在全部运算结果为“0”(即,预测目标位的变量没有变化)的情况下,分支预测电路BRPC预测与先前分支目的地相同的分支目的地。然后,分支预测电路BRPC向指令获取电路IFC发出作为预测的分支目的地地址(预测)BRADRp的指令的获取指令IFD。
另外,当所有的计算结果都不为“0”时,分支预测电路BRPC判断在步骤S406中获得的分支成功/失败预测BRP(即,伴随先前条件分支指令的分支成功/失败结果)是“建立”还是“未建立”(步骤S411)。在分支成功/失败预测BPR为“建立”的情况下,在步骤S412中,分支预测电路BRPC预测“未建立”时的分支目的地地址。备选地,当分支成功/失败预测BRP为“未建立”时,在步骤S410中,分支预测电路BRPC预测“建立”时的分支目的地地址。因此,在步骤S408中,当所有的计算结果都不为“0”(即,预测目标位的至少一个变量已经改变)时,分支预测电路BRPC预测与先前分支目的地不同的分支目的地。然后,分支预测电路BRPC向指令获取电路IFC发出作为预测的分支目的地地址(预测)BRADRp的指令的获取指令IFD。
在步骤S410或步骤S412之后,在步骤S413中,如上所述,分支预测电路BRPC将各种信息传送到缓冲器更新电路UPBF,并且其结束该过程。在这方面,假设历史掩码MSK的至少一位是“1”(与分支有关)。也就是说,如果历史掩码MSK的所有位都是“0”(与分支不相关),则步骤S407和S408中的过程可能变得基本上没有意义。因此,在这种情况下,可以改变图10的流程,使得可以采用另一分支目的地预测方法。
<分支执行方法和历史掩码更新方法(第一实施例)>
图11是示出图6中的分支执行电路和缓冲器更新电路的处理内容的例子的流程图。分支执行电路BRE执行条件分支指令,并更新PC(程序计数器)(步骤S501)。当分支预测电路BRPC的分支目的地预测是命中时,分支执行电路BRE执行分支目的地地址的指令而不执行指令流水线的停顿,并且切换到步骤S505中的过程。即,当分支预测电路BRPC的分支目的地地址(预测)BRADRp与分支执行电路BRE的分支目的地地址(结果)BRADRr一致时,由于分支目的地地址(预测)BRADRp的获取和译码已经根据获取指令IFD执行,所以指令流水线的停顿不会发生。
另一方面,当步骤S502中的分支目的地预测是预测未命中时,分支执行电路BRE禁用获取到的指令(步骤S503)。随后,在对分支目的地地址(结果)BRADRr的指令(即,在步骤S501中更新的PC的指令)的重新获取进行排序(步骤S504)之后,分支执行电路BRE切换到步骤S505。在这种情况下,会出现指令流水线的停顿。另外,当在分支目的地缓冲器BRBF中条目为错误命中时,其切换到步骤S505中的过程而不经历步骤S503和S504中的过程。
在步骤S505中,缓冲器更新电路UPBF从分支执行电路BRE接收条件分支指令的指令地址IADR、分支目的地地址(结果)BRADRr以及分支成功/失败结果BRPr。此外,缓冲器更新电路UPBF从分支预测电路BRPC接收伴随图10的步骤S401的历史记录HR、伴随步骤S403和S404的条目命中存在/不存在信息、伴随步骤S406的分支成功/失败预测BRP和历史掩码MSK(步骤S506)。
接着,在接收到的条目命中存在/不存在信息EH指示条目未命中时(步骤S507),缓冲器更新电路UPBF使用伴随步骤S505的指令地址IADR、分支目的地地址(结果)BRADRr和分支成功/失败结果BRPr,在分支目的地缓冲器BRBF中新注册条目(步骤S511)。此外,缓冲器更新电路UPBF将条目中的历史掩码MSK的每一位初始化为“1”(与分支有关)(步骤S511)。
另一方面,在步骤S507中,当条目命中存在/不存在信息EH指示命中时,缓冲器更新电路UPBF判断在步骤S506中接收到的分支成功/失败预测以及在步骤S505中接收到的分支成功/失败结果BRPr是否相同(步骤S508)。即,缓冲器更新电路UPBF判断先前分支目的地和当前分支目的地是否相同。
在步骤S508中,当先前分支目的地和当前分支目的地相同时,假定从先前时间改变的变量与分支无关。因此,缓冲器更新电路UPBF使用步骤S509中的公式来更新目标条目的历史掩码MSK,使得这次改变的变量(即,历史记录HR为“F”(不一致)的变量)可以成为掩码的目标位。根据步骤S509中的公式,当(HR,MSK)=(F,1)时,历史掩码MSK从“1”(与分支有关)变为“0”(与分支无关)。在其他情况下,当前历史掩码MSK的值保持原样。
另一方面,当在步骤S508中上一分支目的地不同于当前分支目的地时,假定从先前时间没有改变的变量与分支无关。然后,利用步骤S510的运算表达式,缓冲器更新电路UPBF更新目标条目的历史掩码MSK,使得这次没有改变的变量(即,其历史记录HR是“T”的变量(一致))可以成为掩码的目标位。根据步骤S510的运算表达式,当(HR,MSK)=(T,1)时,历史掩码MSK从“1”(与分支有关)变为“0”(与分支无关)。在其他情况下,当前历史掩码MSK的值保持原样。而且,在步骤S510中,缓冲器更新电路UPBF使用步骤S505中接收到的分支成功/失败结果BRPr来更新分支目的地高速缓冲存储器BRBF的目标条目的分支成功/失败预测BRP。
另外,作为图11的流程的改型,当步骤S502中的分支目的地预测是命中时,也可以结束该过程。在这种情况下,变得可以减少更新分支目的地缓冲器BRBF所需的处理负荷。
<第一实施例的主要效果>
如上所述,通过使用第一实施例的方法,典型地,变得可以提高分支目的地预测的命中率。结果,可以减少指令流水线中的停顿的发生频率。而且,变得可以减少程序的处理时间(并且进一步实现系统的高速控制)等。具体而言,根据图21至图23所描述的比较例子的系统,如在使用有限自动机等的机械控制中那样,当应用于期望难以继续相同分支目的地的系统时,会导致分支目的地预测的命中率降低。另一方面,根据第一实施例的系统,基于用作分支目的地的决定因素的变量(数据)来执行分支目的地预测。因此,即使在期望不能继续相同分支目的地的系统的情况下,也能够提高分支目的地预测的命中率。
第二实施例
<处理器单元的配置(第二实施例)>
在根据本发明第二实施例的处理器单元中,图12是示出图4中的数据高速缓冲存储器的详细配置例子的框图。图12的数据高速缓冲存储器4与图5的数据高速缓冲存储器DCCH2的不同之处在于,每个条目的行区域LN_A包括等同值判断结果区域DJR_AR,该等同值判断结果区域DJR_AR保持等同值判断结果DJR来代替上一加载数据区域LDT_AR。此外,与此相伴,与图5的数据高速缓冲存储器DCCH相比,在数据高速缓冲存储器DCCH2中,等同值判断电路DJG被去除,并且存储控制电路STC2和加载控制电路LDC2的处理内容也不同。
现在将主要解释与图5的数据高速缓冲存储器DCCH的不同。等同值判断结果DJR是在伴随着先前存储指令或加载指令的过程结束的点与伴随着当前存储指令或加载指令的过程结束的点之间的位队列,而不管数据区域DT_AR中的数据是否变化。因此,当根据存储指令更新数据区域DT_AR中的存储地址区域时,存储控制电路STC2判断更新前后的数据的一致/不一致,并将判断结果存储在等同值判断结果区域DJR_AR中。此外,当加载控制电路LDC2根据加载指令执行数据区域DT_AR的重新填充时,其以重新填充顺序判断数据的一致/不一致,并将判断结果存储在等同值判断结果区域DJR_AR中。
更具体地,每当生成加载指令时,加载控制电路LDC2判断高速缓冲存储器命中/高速缓冲存储器未命中。在高速缓冲存储器未命中的情况下,加载控制电路LDC2新注册条目。此外,加载控制电路DC2在条目的数据区域DT_AR中存储从与条目的标签地址相对应的存储器MEM中的区域读取的用于行长度的存储器数据。此外,加载控制电路LDC2将条目的等同值判断结果DJR的所有位初始化为“T”(没有改变)。
另外,在需要再填充而不管高速缓冲存储器命中(即,命中条目的行区域LN_AR无效)时,加载控制电路LDC2从存储器MEM中与标签地址对应的区域读取用于行长度的存储器数据。然后,加载控制电路LDC2例如按每个字节判断命中条目的数据区域DT_AR的数据和所读取的存储器数据的一致/不一致。如果判断结果相同,其中位阵列的值为“T”(无变化),以及如果判断结果不同,其中位阵列的值为“F”(变化),则加载控制电路LDC2更新等同值判断结果区域DJR_AR的等同值判断结果DJR。因此,在逐字节进行比较判断时,数据区域DT_AR的位宽度的八分之一对于等同值判断结果区域DJR_AR的位宽度而言是足够的。
之后,加载控制电路LDC2读取命中条目中的等同值判断结果区域DJR_AR中的加载地址区域的等同值判断结果DJR。然后,加载控制电路LDC2将等同值判断结果DJR替换为总等同值判断结果TDJR,并将其发送到判断历史记录电路DJGHR。当读取的等同值判断结果DJR的所有位为“T”(没有变化)时,加载控制电路LDC2将总等同值判断结果TDJR视为“T”(没有变化)。另外,在任何一个位具有“F”(有变化)时,加载控制电路LDC2将总等同值判断结果TDJR视为“F”(有变化)。然后,加载控制电路LDC2将总等同值判断结果TDJR发送到判断历史记录电路DJGHR,然后将等同值判断结果区域DJR_AR中的加载地址区域的所有位初始化为“T”(没有变化)。
此外,加载控制电路LDC2用存储器数据更新命中条目的数据区域DT_AR,并且将数据区域DT_AR中的加载地址区域的数据作为加载数据DT发送到加载执行电路LDE。
每次生成存储指令时,存储控制电路STC2判断高速缓冲存储器命中/高速缓冲存储器未命中。在高速缓冲存储器未命中的情况下,存储控制电路STC2新注册条目,并且在条目的数据区域DT_AR中存储从存储器MEM中与条目的标签地址对应的区域读取的用于行长度的存储器数据。此外,存储控制电路STC2将条目的等同值判断结果DJR的所有位初始化为“T”(没有变化)。
因此,无论高速缓冲存储器命中/高速缓冲存储器未命中,存储控制电路STC2都关于数据区域DT_AR中的存储地址区域的数据和目标条目中的存储数据逐字节地判断一致/不一致。当判断结果相同时,存储控制电路STC2将等同值判断结果区域DJR_AR中的存储地址的等同值判断结果DJR更新为“T”(没有变化)。另外,当它们不同时,存储控制电路STC2通过具有值“F”的位队列(具有改变)更新等同值判断结果DJR。
<处理器单元的操作(第二实施例)>
图13是示出图12中的存储控制电路的处理内容的一个例子的流程图。与图7的情况一样,存储控制电路STC2判断是高速缓冲存储器命中还是高速缓冲存储器未命中(步骤S101和S102)。在高速缓冲存储器命中的情况下,存储控制电路STC2切换到步骤S604。而且,在高速缓冲存储器未中的情况下,存储控制电路通过步骤S603切换到步骤S604。
在步骤S603中,存储控制电路STC2在数据高速缓冲存储器DCCH2中新注册条目。具体地说,存储控制电路STC2在新条目的标签区域TG_AR中存储与存储地址对应的标签地址。此外,存储控制电路STC2从存储器MEM中的与标签地址相对应的区域读取用于行长度的存储器数据,并将存储器数据存储在新条目的数据区域DT_AR中。此外,存储控制电路STC2将条目的等同值判断结果DJR的所有位初始化为“T”(没有变化)。
在步骤S604中,存储控制电路STC2将数据区域DT_AR中的存储地址区域中的数据与存储数据逐字节地进行比较。然后,当比较结果相同时,存储控制电路STC2用具有值“T”的位队列(没有变化)更新等同值判断结果区域DJR_AR中的存储地址区域,并且当比较结果不同时(步骤S605),用具有值“F”的位队列(有变化)更新。随后,存储控制电路STC2通过存储数据更新数据区域DT_AR中的存储地址区域(步骤S606)。
图14是示出图12中的加载控制电路的处理内容的一个例子的流程图。如在图7的情况下那样,加载控制电路LDC2判断高速缓冲存储器命中/高速缓冲存储器未命中(步骤S201和S202)。在高速缓冲存储器未命中的情况下,加载控制电路LDC2新注册条目(步骤S708)并切换到步骤S709。在高速缓冲存储器命中的情况下,在步骤S703至S707的处理之后,过程切换到步骤S709。
在步骤S708中,具体地,加载控制电路LDC2将与加载地址对应的标签地址存储在新条目的标签区域TG_AR中。此外,加载控制电路LDC2将从存储器MEM中的与标签地址对应的区域读取的用于行长度的存储器数据存储在新条目的数据区域DT_AR中。此外,加载控制电路LDC2将条目的等同值判断结果DJR的所有位初始化为“T”(没有变化)。
另一方面,在步骤S703中,加载控制电路LDC2判断命中条目的行区域LN_AR是否无效。当它无效时,在步骤S704到S707的处理之后,过程切换到步骤S709。当它不是无效时,过程直接进入步骤S709。
在步骤S704中,加载控制电路LDC2从存储器MEM中的对应于命中条目的标签地址的区域读取用于行长度的存储器数据。然后,加载控制电路LDC2将数据区域DT_AR中的数据与读取的存储器数据逐字节地进行比较(步骤S705)。如果加载控制电路LDC2的比较结果相同,则当比较结果相同时(步骤S706)加载控制电路LDC2利用具有值“T”的位队列(无变化)更新目标条目的等同值判断结果DJR(步骤S706),并且当比较结果不同时利用具有值“F”的位队列(有变化)更新目标条目的等同值判断结果DJR(步骤S706)。然后,加载控制电路LDC2将在步骤S704中读取的存储器数据存储在数据区域DT_AR中(步骤S707)。
在步骤S709中,加载控制电路LDC2将数据区域DT_AR中的加载地址区域中的数据作为加载数据DT发送到加载执行电路LDE。此外,加载控制电路LDC2读取等同值判断结果区域DJR_AR中的加载地址区域的等同值判断结果DJR,基于等同值判断结果DJR来确定总等同值判断结果TDJR,并将其发送给判断历史记录电路DJGHR(步骤S710)。具体而言,当加载地址区域中的等同值判断结果DJR的位全部为“T”(没有变化)时,加载控制电路LDC2将总等同值判断结果TDJR视为“T”(没有变化)。备选地,在位中的一个是“F”(有变化)时加载控制电路LDC2将总等同值判断结果TDJR视为“F”(有变化)。然后,在步骤S711中,加载控制电路LDC2将等同值判断结果区域DJR_AR中的加载地址区域的所有位初始化为“T”(没有变化)。
<第二实施例的主要效果>
如上所述,通过使用第二实施例的方法,除了第一实施例中描述的各种效果之外,变得可以减少数据高速缓冲存储器DCCH2的电路面积。即,根据第一实施例的系统,通过保持先前的加载数据,判断先前加载数据LDT和当前加载数据DT的相等性。因此,需要其数据宽度与数据区域DT_AR的数据宽度相同的上一加载数据区域LDT_AR。另一方面,根据第二实施例的系统,假定如果在先前指令(加载指令/存储指令)和当前指令之间存在数据的改变则先前加载数据和当前加载数据不同。在这种情况下,在存储和重新填充期间,预先保留等同值判断结果DJR。因此,例如,如上所述,当如上所述逐字节地进行等同值判断时,变得可以允许等同值判断结果区域DJR_AR的数据宽度为数据区域DT_AR的八分之一。而且,例如,当通过词单位进行等同判断时,其可以为十六分之一。因此,可以实现电路面积的减小。
第三实施例
<处理器单元的配置(第三实施例)>
图15是示出根据本发明第三实施例的处理器单元中的图4的分支目的地缓冲器的外围的详细配置例子的框图。与图6的分支目的地缓冲器BRBF相比,在图15所示的分支目的地缓冲器BRBF3中,保持历史掩码MSK的历史掩码区域MSK_AR被保持历史AND(与)掩码AMSK的历史AND掩码区域AMSK_AR以及保持历史OR(或)掩码OMSK的历史OR掩码区域OMSK_AR所替换。
此外,为了定义历史AND掩码AMSK和历史OR掩码OMSK的值,分支目的地缓冲器BRBF3还包括:建立侧无效AND掩码区域TDAMSK_AR、建立侧无效OR掩码区域TDOMSK_AR、未建立侧无效AND掩码区域EDAMSK_AR;以及未建立侧无效OR掩码区域EDOMSK_AR。四个区域(TDAMSK_AR、TDOMSK_AR、EDAMSK_AR和EDOMSK_AR)分别保持建立侧无效AND掩码TDAMSK、建立侧无效OR掩码TDOMSK、未建立侧无效AND掩码EDAMSK以及未建立侧无效OR掩码EDOMSK。此外,虽然稍后将描述细节,但是根据分支目的地缓冲器BRBF3的这种改变,分支预测电路BRPC3和缓冲器更新电路UPBF3的配置和操作也与图6中的配置和操作不同。
在这一点上,根据第一实施例中描述的系统,如图3A和图3B所示,当分支目的地与先前目的地不同时,没有变化的变量被用作掩码目标位,并且当分支目的地与先前目的地相同时,有变化的变量被用作掩码目标位。另一方面,例如,当分支目的地由两个变量A和B的OR计算结果定义时,除非变量A和B的变量值中的一个变化,否则保留相同的分支目的地。在这种情况下,当应用第一实施例的系统时,如果变量A和B中的另一个变化,则另一个变量变为掩码目标位。作为继续这种过程的结果,变量A和B都可以是掩码目标位。在这种情况下,分支目的地预测本身变得困难,这最终降低分支目的地预测的命中率。
鉴于以上,在第三实施例中提供了历史AND掩码AMSK和历史OR掩码OMSK。假设通过多个变量(例如,A至C)中的一些变量(例如,A,B)的AND关系来确定分支目的地的情况(例如,诸如“if(A&B)then xx else yy”的条件分支程序),并且历史AND掩码AMSK用于指定该一些变量(A,B)。在历史AND掩码AMSK中,理想地,分别与这些变量(A,B)的一部分相对应的掩码值被设置为“1”(具有AND关系),并且与剩余变量(C)相对应的掩码值被设置为“0”(没有AND关系)。
类似地,假设通过多个变量(例如,A到C)中的一些变量(例如,A,B)的OR关系来确定分支目的地的情况(例如,诸如“if(A|B))then xx else yy”的条件分支程序),并且历史OR掩码AMSK用于指定该一些变量(A,B)。在历史OR掩码OMSK中,理想地,分别与这些变量(A,B)的一部分对应的掩码值被设置为“1”(具有OR关系),并且与其余变量(C)对应的掩码值被设置为“0”(没有OR关系)。
<分支目的地预测方法(第三实施例)>
图16是表示图15的分支预测电路的处理内容的一个例子的流程图。与图10的流程相比,在图16的流程中,根据分支目的地缓冲器BRBF3的信息的变化,分别改变图10的步骤S406和S413中的过程用于图16的步骤S806和S813中的过程。此外,根据分支目的地预测方法的改变,改变步骤S407和S408中的过程用于步骤S807a、S807b、S808a和S808b中的过程。
在步骤S806中,当在步骤S404中存在条目命中时,分支预测电路BRPC3从命中条目得到分支目的地地址BRADR、分支成功/失败预测BRP、历史AND掩码AMSK以及历史OR掩码OMSK。此外,在步骤S813中,分支预测电路BRPC3将历史记录HR、条目命中存在/不存在信息EH、分支成功/失败预测BRP、历史AND掩码AMSK以及历史OR掩码OMSK发送到缓冲器更新电路UPBF3。即,步骤S406和S413的历史掩码MSK被步骤S806和S813中的历史AND掩码AMSK和历史OR掩码OMSK代替。
在步骤S807a、S807b、S808a和S808b中通过如下处理来执行分支目的地预测。首先,在步骤S807a和S807b中,当反映历史AND掩码AMSK的预测位的历史记录HR全部指示“T”(一致)时,分支预测电路BRPC3预测与先前目的地相同的分支目的地(保留当前状态)。另一方面,当它们中的至少一个表示“F”(不一致)时,过程进入步骤S808a和S808b。换句话说,对于其作为预测目标位的历史OR掩码OMSK是“1”(具有AND关系)的位的变量,基于AND关系的特性,分支预测电路BRP3预测与先前目的地相同的分支目的地,除非变量中的至少一个变量从先前时间变化。
如在图10的步骤S407的公式中那样,当(HR,AMSK)=(F,1)时,步骤S807a的公式被设置为“1”,在其余情况下被设置为“0”。因此,如在图10的步骤S408的情况下那样,在步骤S807b中计算结果全部为“0”的情况意味着其历史AND掩码AMSK为“1”(具有AND关系)的变量的历史记录都是“T”(与先前时间没有变化)。当运算的所有结果都为“0”时,与图10的情况类似,通过步骤S409、S410和S412的处理将与先前目的地相同的分支目的地定义为分支目的地地址(预测)BRADRp。
另一方面,在步骤S808a和S808b中,在反映历史OR掩码OMSK的预测目标位的历史记录HR中,当它们中的至少一个是“T”(一致)时,分支预测电路BRPC3预测与先前的目的地相同的分支目的地(当前状态保留)。备选地,当预测目标位的历史记录HR全部指示“F”(不一致)时,分支预测电路BRPC3预测与先前目的地不同的分支目的地。换句话说,对于其作为预测目标位的历史OR掩码OMSK是“1”(具有OR关系)的位的变量,基于OR关系的特性,除非变量中的至少一个变量从先前时间变化,否则分支预测电路BRPC3预测与先前目的地相同的分支目的地(保留当前状态)。
在步骤S808a的公式中,当(HR,OMSK)=(T,1)时,得到值“1”,并且在其余情况下,将其设置为“0”。因此,在步骤S808b中,对于计算结果具有为“1”的位的情况,历史OR掩码OMSK意味着至少一个或多个“T”(从先前时间没有变化)存在于为“1”(具有OR关系)的变量的历史记录HR中。当在计算结果中存在为“1”的位时,通过步骤S409、S410和S412中的过程,定义相同的分支目的地作为分支目的地地址(预测)BRADRp。另一方面,当在计算结果中没有为“1”的位时,如图10所示的情况那样,通过步骤S410、S411和S412中的过程,定义与先前目的地不同的分支目的地作为分支目的地地址(预测)BRADRp。
因此,当基于历史AND掩码AMSK的预测目标位的历史记录HR都指示一致时,分支预测电路BRPC3预测与先前目的地相同的目的地。备选地,在基于历史OR掩码OMSK的预测目标位的历史记录HR中,当它们中的至少一个也指示一致时,分支预测电路BRPC3预测与先前目的地相同的分支目的地。另一方面,当在使用历史AND掩码AMSK的分支目的地预测和使用历史OR掩码OMSK的分支目的地预测中都没有预测与先前目的地相同的分支目的地时,分支预测电路BRPC3预测与先前目的地不同的分支目的地。
<分支执行方法和历史掩码更新方法(第三实施例)>
图17是示出图15中的分支执行电路和缓冲器更新电路的处理内容的例子的流程图。图18是示出图17中的掩码更新处理的处理内容的一个例子的流程图。与图11的流程相比,在图17的流程中,根据分支目的地缓冲器BRF3的信息的变化,分别改变图11的步骤S506和S511中的过程用于图17的步骤S906和S911中的过程。此外,根据历史掩码的更新方法的改变,改变步骤S508至S510中的处理用于步骤S908中的处理(即,图18中的处理)。
在步骤S906中,缓冲器更新电路UPBF3从分支预测电路BRPC3接收历史记录HR、条目命中存在/不存在信息EH、分支成功/失败预测BRP、历史AND掩码AMSK以及历史OR掩码OMSK。也就是说,在步骤S906中,用步骤S906中的历史AND掩码AMSK和历史OR掩码OMSK替换步骤S506的历史掩码MSK。
在步骤S911中,当接收到的条目命中存在/不存在信息EH指示条目未命中时(步骤S507),缓冲器更新电路UPBF3使用伴随步骤S50505的指令地址IADR、分支目的地地址(结果)BRADRr和分支成功/失败结果BRPr,在分支目的地缓冲器BRBF3中新注册条目。此外,缓冲器更新电路UPBF3将条目中的历史AND掩码AMSK的每个位初始化为“1”(具有AND关系)。此外,缓冲器更新电路UPBF3将历史OR掩码OMSK的每个位初始化为“0”(无OR关系)。此外,缓冲器更新电路UPBF3将建立侧无效AND掩码TDAMSK、建立侧无效OR掩码TDOMSK、未建立侧无效AND掩码EDAMSK和未建立侧无效OR掩码EDOMSK的每个位初始化为“0”(无效禁用)。
在步骤S908(图18)中,实际上,首先,缓冲器更新电路UPBF3更新历史AND掩码AMSK和历史OR掩码OMSK,使得与分支无关的变量(即,不具有AND关系或OR关系的变量)可能被期望作为掩码目标位。为了定义这些掩码目标位,这里分别提供有四种无效掩码(建立侧无效AND掩码TDAMSK、未建立侧无效AND掩码EDAMSK、建立侧无效OR掩码TDOMSK和未建立侧无效OR掩码EDOMSK)。在每个无效掩码中,向怀疑与分支无关的变量连续记录“1”(无效启用)。利用这些无效掩码的组合,最终指定与分支无关的变量。
结果,对于在与分支无关的变量的消除之后留下的变量,缓冲器更新电路UPBF3进一步使用历史AND掩码AMSK将变量缩减成仅具有OR关系的变量。此外,缓冲器更新电路UPBR3使用历史OR掩码OMSK将变量缩减为仅具有OR关系的变量。因此,例如,期望:如果通过预定变量的AND关系来决定分支目的地,则与历史AND掩码AMSK中的预定变量相对应的值收敛于“1”(具有AND关系),并且全部历史OR掩码OMSK的值收敛于“0”(无OR关系)。另一方面,如果通过预定变量的OR关系确定分支目的地,则期望:对应于历史OR掩码OMSK中的预定变量的值收敛于“1”(具有OR关系),并且所有历史AND掩码AMSK的值收敛于“0”(没有AND关系)。
图19是图18的补充图,是用于说明用于消除与分支无关的变量的机制的图。例如,对于情况C1,假定在诸如“if(A&B(&C?))thenxx else yy”的条件分支程序中先前的分支成功/失败结果是分支建立(then)的情况。在这种情况下,验证变量C是否与变量A和B具有AND关系。当它具有AND关系并且变量C的变量值已变化时,分支目的地变得与先前分支目的地不同(else)。因此,当即使变量C的历史记录HR是“F”(从先前时间改变)、此时分支目的地也变得与先前目的地相同时(then),变量C变成与AND关系无关的变量。因此,变量C的建立侧无效AND掩码TDAMSK变为“1”(无效启用)。而且,在C1的情况下,变量C仍有可能存在OR关系,并且完全与分支无关。
关于情况C2,例如,在诸如“if(A|B(|C?))then xx else yy”的条件分支程序中,假定先前的成功/失败结果是分支建立(then)。在这种情况下,验证变量C是否与变量A和B具有OR关系。当它有OR关系并且变量C的变量值没有变化时,当前分支目的地可以是与先前分支目的地相同的分支目的地(then)。因此,当即使变量C的历史记录HR为“T”(与先前时间没有变化)、此时分支目的地也变得与先前分支目的地不同(else)时,变量C被视为与OR关系无关的变量。因此,变量C的建立侧无效OR掩码TDOMSK变为“1”(无效启用)。另外,在情况C2中,变量C仍有可能具有OR关系并且与分支完全无关。
关于情况C3,例如,在诸如“if(A|B(|C?))then xx else yy”的条件分支程序中,假定先前分支成功/失败结果是未建立的分支(else)。在类似这种的情况下,验证变量C是否与变量A和B具有OR关系。如果变量C具有OR关系并且变量C的变量值没有变化时,则分支目的地很可能与先前目的地相同(else)。因此,即使此时变量C的历史记录HR是“T”(与先前没有变化),当分支目的地变得不同于先前目的地时(then),变量C被认为是与OR关系无关的变量。因此,变量C的未建立侧无效OR掩码EDOMSK变为“1”(无效启用)。另外,在情况C3中,仍然存在变量C与AND关系相关的可能性以及完全与分支无关的可能性。
关于情况C4,例如,在诸如“if(A&B(&C?))then xx else yy”的条件分支程序中,假定先前分支成功/失败结果是分支未建立的情况(else)。在这种情况下,验证变量C是否与变量A和B具有AND关系。如果变量C具有AND关系并且变量C的变量值已经改变时,分支目的地很可能不同于上一次(then)。因此,即使此时变量C的历史记录HR是“F”(从先前改变),当分支目的地与先前目的地相同时(else),变量C被认为是与AND关系无关的变量。因此,变量C的未建立侧无效AND掩码EDAMSK的值被改变为“1”(无效启用)。另外,在情况C4,保留了变量C与OR关系相关的可能性以及完全与分支无关的可能性。
这里,例如,在情况C1和情况C4两者(即,分支建立(then)侧和分支未建立侧(else))都被判断为不相关的变量C和在情况C 2和情况C3两者(分支建立侧和分支未建立侧二者)都被判断为不相关的变量C,被认为是与分支无关的变量。此外,在情况C1和情况C2两者(即,AND关系和OR关系)中被判断为不相关的变量C和在情况C3和C4两者(AND关系和OR关系两者)中被判断为不相关的变量C也被认为是与分支无关的变量。
在图18的步骤S1001、S1002和S1006中,使用分支成功/失败预测BRP(即,先前分支成功/失败结果)和分支成功/失败结果BRPr(即,当前分支成功/失败结果),缓冲器更新电路UPBF3判断图19所示的情况C1至C4。图18中的步骤S1003和S1004是与图19中的情况C1和C4对应的处理以及用于记录与AND关系无关的C的处理。
根据步骤S1003和S1004的公式,当(HR,TDAMSK(或EDAMSK))=(F,0)时,建立侧无效AND掩码TDAMSK(或未建立侧无效AND掩码EDAMSK)的值为从“0”变为“1”。在剩余的情况下,当前状态被维持。也就是说,当即使某个变量C的历史记录HR是“F”(从先前时间改变)时分支目的地也与先前相同时,变量C被认为是与AND关系无关的变量。因此,建立侧无效AND掩码TDAMSK(或未建立侧无效AND掩码EDAMSK)的变量C的值被改变为“1”(无效启用)。
结合步骤S1001和S1002,当先前分支目的地和当前分支目的地都是分支建立时的分支目的地时(then),执行步骤S1003(情况C1)。在这种情况下,缓冲器更新电路UPBF3在建立侧无效AND掩码TDAMSK中累积记录其历史记录HR在历史位区域SREG中为“F”(不一致)的位。结合步骤S1001和S1002,当先前分支目的地和当前分支目的地都是分支未建立时的目的地时(else),执行步骤S1004(情况C4)。在这种情况下,缓冲器更新电路UPBF在未建立侧无效AND掩码EDAMSK中累积记录其历史记录位区域SREG中历史记录HR为“F”(不一致)的位。
图18的步骤S1007和S1008分别是对应于图19的情况C2和C3的处理,并且还是用于记录与OR关系无关的C的处理。根据在步骤S1007和S1008中的公式,当(HR,TDOMSK(或EDOMSK))=(T,0)时,建立侧无效OR掩码TDOMSK(或未建立侧无效OR掩码EDOMSK)的值从“0”改变为“1”。另外,在其余情况下,维持当前状态。也就是说,当即使某个变量C的历史记录HR是“T”(没有从先前时间改变)分支目的地也与先前不同时,变量C被认为是与OR关系无关的变量。因此,变量C的建立侧无效OR掩码TDOMSK(或未建立侧无效OR掩码(EDOMSK))的值被改变为“1”(无效使能)。
结合步骤S1001和S1006,当先前分支目的地是分支建立时的分支目的地(then)并且当前分支目的地是分支未建立时的分支目的地(else)时,执行步骤S1007(情况C2)。在这种情况下,在历史位区域SREG中,缓冲器更新电路UPBP3将历史记录HR为“T”(一致)的位累积地记录在建立侧无效OR掩码TDOMSK中。结合步骤S1001和S1006,当先前分支目的地是分支未建立时的分支目的地(else)并且当当前分支目的地是分支建立时的分支目的地(then)时,执行步骤S1008(情况C3)。在这种情况下,在历史位区域SREG中,缓冲器更新电路UPBF3将其历史记录HR为“T”(一致)的位累积地记录在未建立侧无效OR掩码EDOMSK上。
当执行了步骤S1003或步骤S1004的处理时,缓冲器更新电路UPBF3切换到步骤S1005。另外,在执行了步骤S1007或步骤S1008的处理的情况下,缓冲器更新电路UPBF3切换到步骤S1009。在步骤S1005中,为了排除与分支无关的变量C,使用公式F1,缓冲器更新电路UPBF3更新历史AND掩码AMSK和历史OR掩码OMSK二者。即,作为掩码目标位,缓冲器更新电路UPBF3分别将与历史AND掩码AMSK和历史OR掩码OMSK中的不相关变量C对应的位更新为“0”(无AND/OR关系)。如图19所示,与分支(目的地)无关的变量C对应的掩码目标位是满足以下四个条件中的至少一个条件的位。
满足第一个条件的位是在建立侧无效AND掩码TDAMSK和未建立侧无效AND掩码EDAMSK二者中都以重叠方式记录的位(在两者中都设置为“1”(禁止使能)的位)。满足第二个条件的位是在建立侧无效OR掩码TDOMSK和未建立侧无效OR掩码EDOMSK中二者都以重叠的方式记录的位。满足第三个条件的变量是在建立侧无效AND掩码TDAMSK和建立侧无效OR掩码TDOMSK二者中都以重叠方式记录的变量。满足第四个条件的变量是在未建立侧无效AND掩码EDAMSK和未建立侧无效OR掩码EDOMSK二者中都以重叠方式记录的变量。
此外,在步骤S1005中,如上所述,利用公式F1,缓冲器更新电路UPBF3决定历史AND掩码AMSK的掩码目标位。另外,还使用公式F2,缓冲器更新电路UPBF3决定历史AND掩码目标位AMSK的掩码目标。根据公式F2,当(HR,AMSK)=(F,1)时,历史AND掩码AMSK的值从“1”(具有AND关系)变为“0”(无AND关系)。而且,在其余情况下,保持当前状态。结果,基于步骤S1001,当先前分支目的地和当前分支目的地相同时,缓冲器更新电路UPBR3更新历史AND掩码AMSK,使得预测目标位中历史记录HR为“F”(不一致)的位可以成为下一掩码目标位。
这里,例如,在诸如“if(A&B)then xx else yy”的条件分支程序中,假设先前分支目的地和当前分支目的地都在分支建立侧(then)。在这种情况下,变量A和B的变量值在先前时间和这次都是“TRUE(真)”。结果,如果有这次改变的变量,则该变量变成与AND关系无关的变量。因此,通过根据公式2更新历史AND掩码AMSK,变量被变为下一掩码目标位(换句话说,从下一预测目标位排除)。在下一次,使用在图16的步骤S807a和S807b中的预测方法,对于与更新的预测目标位相对应的变量,只要两个变量都没有变化,就执行保留当前状态的预测(then)。
此外,在步骤S1005中,如所述,缓冲器更新电路UPBF3用公式F1定义历史OR掩码OMSK的掩码目标位。另外,缓冲器更新电路UPBF2也通过公式F3定义历史OR掩码OMSK的掩码目标位。根据公式F3,当(HR,OMSK)=(F,1)时,该值是历史OR掩码OMSK,且从“1”(OR相关)改变为“0”(OR不相关)。备选地,当(HR,OMSK)=(F,0)时,该值从“0”改变为“1”。同样,在剩余的情况下,当前状态被维持。
结果,基于步骤S1001,当先前分支目的地和当前分支目的地相同时,缓冲器更新电路UPBF3更新历史OR掩码OMSK,使得预测目标位中的历史记录HR为“F”(不一致)的位可以成为下一掩码目标位。另外,根据步骤S1001,在先前分支目的地与当前分支目的地相同时,在掩码目标位中,缓冲器更新电路UPBF3更新历史OR掩码OMSK,使得历史记录HR为“F”(不一致)的位可以成为下一预测目标位。
这里,在诸如“if(A|B)then xx else yy”的条件分支程序中,假定先前分支目的地和当前分支目的地二者都在分支建立侧上(then)。在这种情况下,在先前时间和这次,变量A和B中的至少一个的变量值是“TRUE”。这里,没有告诉变量中的哪个变量值在历史记录HR中的先前时间和这次中在“TRUE”和“FALSE(假)”之间变化。因此,具体地,不容易高精度地确定某个变量是否是OR相关。
因此,在该示例中,在预测目标位(其历史OR掩码OMSK为“1”的位)中,与当前历史记录HR为“F”的位相对应的变量(即,已经从先前时间改变的变量)被认为是与OR关系无关的变量,并且从下一预测目标位排除。此外,在本示例中,在掩码目标位(即,其历史OR掩码OMSK为“0”的位)中,对应于当前历史记录HR为“F”的位的变量被视为与OR关系相关的变量,并被定义为下一预测目标位。
对于后者,在先前分支目的地和当前分支目的地都在分支建立侧上(then)的状态下,很可能(HR,OMSK)=(F,0)的变量的变量值是“TRUE”。在这种情况下,通过从掩码目标位中排除变量并将其改变用于预测目标位,当变量实际上是与OR关系相关时,变得可以提高分支预测精度。即,下一次利用图16的步骤S808a和S808b的预测方法,对于预测目标位的变量,除非变量中的至少一个变量存在变化,否则执行保留当前状态的预测(then)。当与OR关系相关的变量的变量值是“TRUE”时,实际上,除非有变量的变化,否则分支目的地被原样保留(then)。另外,当被改变为预测目标位的变量实际上与OR关系无关时,在后续阶段中的一个阶段处,通过公式F3等将变量再次返回到掩码目标位。
在步骤S1009中,与步骤S1005的情况不同,缓冲器更新电路UPBF3通过分支成功/失败结果BRPr更新分支成功/失败预测BRP。因此,分支目的地预测(当前状态被保留时的分支目的地)的方向下次改变。此外,在步骤S1009中,如在步骤S1005中一样,通过公式F1,缓冲器更新电路UPBF3定义历史AND掩码AMSK的掩码目标位。另外,缓冲更新电路UPBF3也利用公式F4定义历史AND掩码AMSK的掩码目标位。
在公式F4中,当(HR,OMSK)=(T,1)时,历史AND掩码AMSK的值为“0”,而在其余情况下,该值变为“1”。结果,基于步骤S1001,当先前分支目的地和当前分支目的地不同时,缓冲器更新电路UPBF3更新历史AND掩码AMSK,使得基于历史OR掩码OMSK的掩码目标位(OMSK的位=“1”)成为基于下一历史AND掩码AMSK的预测目标位(AMSK的位=“1”)。此外,缓冲器更新电路UPBF3在基于历史OR掩码OMSK的预测目标位(OMSK的位=“1”)中更新历史AND掩码AMSK,以使历史记录HR为“F”(不一致)的位成为基于下一历史AND掩码AMSK的预测目标位(AMSK的位=“1”)。
在此,在诸如“if(A|B)then xx else yy”的条件分支程序中,假设先前分支目的地位于分支建立(then)侧,并且当前分支目的地位于分支未建立(else)侧。在这种情况下,作为变量A和B的变量值中的至少一个变量值这次变成“FALSE”的结果,变量A和B的变量值都是“FALSE”。在这种状态下,通过用AND关系来替换程序来执行分支预测是有益的,例如“只要变量A和B的变量值都保持为“FALSE”,就原样保持分支目的地(else)”。因此,在历史OR掩码OMSK的预测目标位中,历史记录HR是“F”(从上次改变)的变量的历史AND掩码AMSK被定义为“1”。
只要两个变量都没有变化,下次就利用图16中的步骤S807a和S807b的预测方法,对于与预测目标位相对应的变量,执行保留当前状态的预测(else)。因此,当先前分支目的地和当前分支目的地不同时,通过用AND关系来替换推定的预测,变得可以在具有OR关系的情况下高精度地执行预测。
此外,与步骤S1005的情况一样,缓冲器更新电路UPBF3根据公式F1定义历史OR掩码OMSK的掩码目标位,并且另外还由公式F5定义历史OR掩码OMSK的掩码目标位。在公式F5中,当HR=“T”时,历史OR掩码OMSK的值为“0”,并且当HR=“F”时,该值为“1”。结果,基于步骤S1001,当先前分支目的地和当前分支目的地不同时,在历史位区域SREG中,缓冲器更新电路UPBF3更新历史OR掩码OMSK,使得历史记录HR为“F”(不一致)的位可以成为下一预测目标位。
这里,在诸如“if(A&B)then xx else yy”的条件分支程序中,假定上一分支目的地在分支建立(then)侧,并且当前分支目的地是在分支未建立(else)侧。在这种情况下,对于变量A和B的变量值,这次它们中的至少一个变成“FALSE”。在这种情况下,只要变量A和B的变量值中的一个保持“FALSE”,分支目的地就保持在当前状态(else),这有利于通过用OR关系来替换它而执行分支预测,诸如“分支目的地保持原样(else)”。因此,对历史记录HR为“F”(从先前时间改变)的变量的历史OR掩码OMSK赋予“1”。
随后,使用图16的步骤S808a和S808b中所示的预测方法,对于预测目标位的变量,除非变量中的至少一个变量变化,否则执行保持当前状态的预测(else)。因此,当先前分支目的地和当前分支目的地不同时,通过将基于AND关系的预测替换为OR关系,则可以在AND关系的情况下高精度地执行预测。
<条件分支程序的执行示例>
图20是示出使用图15的处理器单元的条件分支程序的执行过程的一个例子的图。就此而言,执行与图2等中类似的指令代码。但是,与图2等的情况不同,历史位区域SREG(历史记录HRE)具有3位,并且对三个变量“IO1”、“IO2”和“IO3”给出等同值判断。另外,在这方面,执行如下这种处理:当变量“IO1”和变量“IO2”的OR计算结果不为零时,建立分支(执行循环处理)。换句话说,当对应于“IO1”和“IO2”的变量值(加载数据DT)中的至少一个变量值是“T”(=“1”)时,分支被建立。
当时间t=t1-t3时,(IO3,IO2,IO1)的加载数据DT为(F,T,T)。在时间t=t5(“bnz(XX)”)的条件分支指令中,不存在用于分支目的地缓冲器BRBF3的条目,并且不执行分支目的地预测。当时间t=t6时,由于对应于“IO1”和“IO2”的加载数据DT都是“T”,分支成功/失败结果BRPr被“建立”。与此对应,分支成功/失败预测BRP也被“建立”。此外,使用图17的步骤S911中描述的值来初始化每个历史掩码(AMSK、OMSK)和每个无效掩码(TDAMSK、TDOMSK、EDAMSK、EDOMSK)。
当时间t=t7到t9时,(IO3,IO2,IO1)的加载数据DT是(F,F,F)。因此,历史记录HR变成(T,F,F)。当存在时间t=t11(“bnz(XX)”)的条件分支指令时,与历史AND掩码AMSK为“1”(具有AND关系)的位对应的历史记录HR包括“F”(不一致)(图16的步骤S807a和S807b)。而且,历史OR掩码OMSK全部指示“0”(无OR关系)(步骤S808a和S808b)。因此,预测与先前分支目的地(由分支成功/失败预测BRP示出的“建立”)不同的分支目的地(“未建立”)(图16中的步骤S411→步骤S412)。
当时间t=t12时,对应于“IO1”和“IO2”的加载数据DT都是“F”。因此,分支成功/失败结果BRPr是“未建立”并且分支目的地预测是命中。而且,在图18中,由于BRP≠BRPr且BRP=“建立”,所以进行步骤S1007和S1009所示的处理。在步骤S1007中,将建立侧无效OR掩码TDOMSK更新为(1,0,0)。然而,由于其他无效掩码是(0,0,0),因此步骤S1009中的公式F1不记录与分支无关的变量。此外,在步骤S1009中,根据公式F5,将历史OR掩码OMSK更新为(0,1,1)。根据分支成功/失败预测BRPr,分支成功/失败预测BRP被更新为“未建立”。
当时间t=t13至t15时,(IO3,IO2,IO1)的加载数据DT为(F,F,T)。因此,历史记录HR变成(T,T,F)。在时间t=t17的条件分支指令(“bnz(XX)”)时,与历史AND掩码AMSK为“1”(具有AND关系)的位对应的历史记录HR中包括“F”(不一致)(步骤S807a和S807b)。此外,与历史OR掩码OMSK为“1”(具有OR关系)的位对应的历史记录RD中包括“T”(一致)(步骤S808a和S808b)。因此,预测与先前分支目的地(由分支成功/失败预测BRP示出的“未建立”)相同的分支目的地(“未建立”)(步骤S409→S412)。
当时间t=t18时,对应于“IO1”的加载数据DT是“T”。因此,分支成功/失败结果BRPr为“建立”,并且分支目的地预测变成预测未命中。而且,在图18中,BRP!=BRPr和BRP=“未建立”。因此,执行步骤S1008和S1009的处理。在步骤S1008中,未建立侧无效OR掩码EDOMSK被更新为(1,1,0)。
对应于在时间t=t12处更新的未建立侧无效OR掩码EDOMSK(1,1,0)和建立侧无效OR掩码TDOMSK(1,0,0),步骤S1009中的公式记录与分支无关的变量(对应于都是“1”的位的变量)。而且,在步骤S1009中,对应于公式F1和F4,历史AND掩码AMSK被更新为(0,0,1)。此外,根据公式F1和F5,历史OR掩码OMSK被更新为(0,0,1)。根据分支成功/失败结果BRPr将分支成功/失败预测BRP更新为“建立”。
当时间t=t19至t21时,(IO3,IO2,IO1)的加载数据DT为(T,T,F)。与此对应,历史记录HR变为(F,F,F)。在时间t=t23的条件分支指令(“bnz(XX)”)的场合下,与历史AND掩码AMSK为“1”(具有AND关系)的位对应的历史记录HR中包括“F”(不一致)(步骤S807a和S807b)。此外,与历史OR掩码OMSK为“1”(具有OR关系)的位对应的历史记录中不包括“T”(一致)(步骤S808a和S808b)。为此,预测与先前分支目的地(由分支成功/失败预测BRP示出的“建立”)不同的分支目的地(“未建立”)(步骤S411→S412)。
当时间t=t24时,对应于“IO2”的加载数据DT是“T”。因此,分支成功/失败结果BRPr变为“建立”,并且分支目的地预测变成预测未命中。而且,在图18中,BRP=BRPr且BRP=“建立”。因此,执行步骤S1003和S1005的处理。在步骤S1003中,建立侧无效AND掩码TDAMSK被更新为(1,1,1)。
因此,建立侧无效AND掩码TDAMSK被更新为(1,1,1)。但是,未建立侧无效AND掩码EDAMSK和建立侧无效OR掩码TDOMSK分别是(0,0,0)和(1,0,0)。因此,当时间t=t18时,与在步骤S1005中根据公式F1记录的分支无关的变量保持原样。此外,在步骤S1005中,根据公式F1和F2,将历史AND掩码AMSK更新为(0,0,0)。根据公式F1和F3,历史OR掩码OMSK被更新为(0,1,0)。
当时间t=t25至t27时,(IO3,IO2,IO1)的加载数据DT为(T,T,T)。对应于此,历史记录HR是(T,T,F)。当存在时间t=t29的条件分支指令(“bnz(XX)”)时,历史AND掩码AMSK全部为“0”(无AND关系)(步骤S807a和S807b)。而且,在与历史OR掩码OMSK为“1”(具有OR关系)的位相对应的历史记录HR中包括“T”(一致)(步骤S808a和S808b)。因此,预测与先前分支目的地(如分支成功/失败预测BRP所示的“建立”)相同的分支目的地(“建立”)(步骤S409→步骤S410)。
当时间t=t30时,对应于“IO1”和“IO2”的加载数据DT都是“T”。因此,分支成功/失败结果BRPr被“建立”并且分支目的地预测是预测命中。而且,在图18中,由于BRP=BRPr且BRP=“建立”,所以进行步骤S1003和S1005的处理。在步骤S1003中,建立侧无效AND掩码TDAMSK保持原样(1,1,1)。此外,在步骤S1005中,根据公式F1和F3,将历史OR掩码OMSK更新为(0,1,1)。
<第三实施例的主要效果>
如上所述,除了第一实施例中描述的各种效果之外,第三实施例的系统还可以实现以下效果。也就是说,由于考虑与分支目的地预测有关的变量的关系(AND关系和OR关系)来缩减与分支目的地相关的变量并且可以根据每个关系来执行分支目的地预测,从而变得可以进一步提高分支目的地预测的命中率。在图20的示例中,当时间t=t18时,与分支目的地无关的变量(“IO3”)被定义为历史AND掩码AMSK和历史OR掩码OMSK的掩码目标位。此外,当时间t=t30时,通过OR计算决定分支目的地的两个变量(“IO1”和“IO2”)被定义为历史OR掩码OMSK的预测目标位。此外,在另一方面,两个变量(“IO1”和“IO2”)被定义为历史AND掩码AMSK的掩码目标位。因此,此后,只要两个变量(“IO1”和“IO2”)中的任一个保持“T”,就执行保留当前状态的分支目的地预测,并且分支目的地预测也变成命中。
尽管已经基于优选实施例具体描述了以上由本发明人作出的本发明,但是本发明不限于上述实施例。不用说,在不脱离本发明主旨的范围内可以对其做出各种改变。例如,为了使本发明易于理解,对上述实施例进行了详细说明,但是本发明并不限于被提供有所述全部配置的实施例。而且,一个实施例的一部分配置可以用另一个实施例的配置替换。此外,一个实施例的配置可以附加地被提供有另一个实施例的配置。此外,关于每个实施例的配置的一部分,可以提供利用其他配置的添加、消除和替换。
例如,上述实施例1至3的附图中所示的公式(例如,图10中的步骤S407的公式等)不特别限于这些,并且可以根据需要进行修改,只要是将成为相同真值表的公式。此外,视情况而定,在图18的步骤S1005和S1009中,也可以采用成为其他真值表的公式。也就是说,虽然这些公式(特别是F3等)是基于假设的公式,但事实上,可以使用各种方法进行假设。此外,根据这些方法,公式可以可变地修改。此外,在步骤S1005和S1009中,作为公式F1至F5,可以不是采用全部而是采用其中一些。此外,例如,在公式F1中,不需要组合四个AND公式(每个公式都是包括两个无效掩码的AND公式),并且视情况而定,它们中的一些可以被组合。

Claims (19)

1.一种处理器设备,包括:
数据高速缓冲存储器;
等同值判断电路,每次对所述数据高速缓冲存储器的加载指令被生成时,所述等同值判断电路判断来自与所述加载指令对应的线的先前加载数据与当前加载数据的一致/不一致;
判断历史记录电路,在N位区域(N为1或更大的整数)中分别将在条件分支指令之前的所述等同值判断电路的N次判断结果记录作为历史记录;
分支预测电路,当所述条件分支指令被生成时,所述分支预测电路基于所述N位区域中的所述历史记录来预测第一分支目的地或第二分支目的地,并且发出所预测的分支目的地的指令获取方向,所述第一分支目的地是与通过所述条件分支指令的先前执行结果得到的先前分支目的地相同的分支目的地,所述第二分支目的地与所述先前目的地不同;以及
处理器主体电路,获取、译码和执行指令,所述处理器主体电路当执行条件分支指令时,响应于来自所述分支预测电路的获取方向而预先获取所预测的分支目的地的指令,并且当通过所述条件分支指令的当前执行结果得到的当前分支目的地与先前预测的分支目的地不同时,使得预先获取的所述指令无效。
2.根据权利要求1所述的处理器设备,
其中当所述N位区域中的所述历史记录都指示一致时,所述分支预测电路预测所述第一分支目的地,并且当所述N位区域中的所述历史记录中的任何一个指示不一致时,预测所述第二分支目的地。
3.根据权利要求1所述的处理器设备,
其中所述数据高速缓冲存储器包括存储所述当前加载数据的第一数据存储区域、以及存储所述先前加载数据的第二数据存储区域,根据所述加载指令从所述第一数据存储区域加载所述当前加载数据,并且使用加载数据更新所述第二数据存储区域,以及
其中,每次生成所述加载指令时,所述等同值判断电路判断所述第一数据存储区域的数据和所述第二数据存储区域的数据的一致/不一致。
4.根据权利要求1所述的处理器设备,还包括条件分支指令的指令地址和分支目的地缓冲器,在所述分支目的地缓冲器中注册了与关于所述先前分支目的地的信息的关系,
其中所述分支预测电路参考所述分支目的地缓冲器,并且定义所述第一分支目的地或所述第二分支目的地的指令地址。
5.根据权利要求4所述的处理器设备,还包括缓冲器更新电路,其在所述先前分支目的地与所述当前分支目的地相同时,将所述N位区域中的其历史记录上指示不一致的位定义为掩码目标位,并且在所述先前分支目的地和所述当前分支目的地不同时,将所述N位区域中的其历史记录上指示不一致的位定义为掩码目标位,并且将关于所述掩码目标位的信息注册在所述分支目的地缓冲器中,以及
其中,关于作为预测目标位的、所述N位区域中的排除了所述掩码目标位的位,当所述预测目标位的所述历史记录全部指示一致时,所述分支预测电路预测所述第一分支目的地,并且当所述预测目标位的所述历史记录中的任何一个指示不一致时,所述分支预测电路预测所述第二分支目的地。
6.一种处理器设备,包括:
数据高速缓冲存储器;
等同值判断电路,每次对所述数据高速缓冲存储器的加载指令被生成时,所述等同值判断电路判断来自与所述加载指令对应的线的当前加载数据和先前加载数据的一致/不一致;
判断历史记录电路,在N位区域(N为2或更大的整数)中分别将在条件分支指令被生成之前的所述等同值判断电路的N次判断结果记录作为历史记录;
分支预测电路,在条件分支指令被生成时,所述分支预测电路基于所述N位区域中的从中去除了由历史掩码决定的掩码目标位的预测目标位的所述历史记录,来预测第一分支目的地或第二分支目的地,并且发出所预测的分支目的地的指令获取方向,所述第一分支目的地与通过所述条件分支指令的先前执行结果得到的先前分支目的地相同,所述第二分支目的地与所述先前分支目的地不同;
分支目的地缓冲器,其中注册了条件分支指令的指令地址、关于所述先前分支目的地的信息和所述历史掩码的相互关系;
缓冲器更新电路,在所述条件分支指令被生成时,所述缓冲器更新电路更新所述分支目的地缓冲器;和
处理器主体电路,获取、译码并执行指令,并且当执行条件分支指令时,从所述分支预测电路预先获取与所述获取方向对应的所预测的分支目的地的指令,并且进一步,当通过所述条件分支指令的执行结果得到的所述当前分支目的地与所预测的分支目的地不同时,使得预先获取的所述指令无效。
7.根据权利要求6所述的处理器设备,
其中,所述历史掩码包括历史AND掩码,以及
其中,在反映所述历史AND掩码的所述预测目标位的历史记录全部指示一致时,所述分支预测电路预测所述第一分支目的地。
8.根据权利要求7所述的处理器设备,
其中,当所述先前分支目的地和所述当前分支目的地相同时,所述缓冲器更新电路更新所述历史AND掩码,使得所述预测目标位中的其历史记录上指示不一致的位成为下一掩码目标位。
9.根据权利要求6所述的处理器设备,
其中,所述历史掩码包括历史OR掩码,以及
其中,在基于所述历史OR掩码的预测目标位的历史记录中,当它们中的至少一个指示一致时,所述分支预测电路预测所述第一分支目的地。
10.根据权利要求9所述的处理器设备,
其中,当所述先前分支目的地和所述当前分支目的地相同时,所述缓冲器更新电路更新所述历史OR掩码,使得所述预测目标位中的其历史记录上指示不一致的位成为下一掩码目标位,并且所述掩码目标位中的其历史记录上指示不一致的位成为下一预测目标位。
11.根据权利要求9所述的处理器设备,
其中,当所述先前分支目的地和所述当前分支目的地不同时,所述缓冲器更新电路更新所述历史OR掩码,使得所述N位区域中的其历史记录上指示不一致的位成为下一预测目标位。
12.根据权利要求6所述的处理器设备,
其中,所述历史掩码包括历史AND掩码和历史OR掩码,以及
其中,当基于所述历史AND掩码的所述预测目标位的所述历史记录全部指示一致时,所述分支预测电路预测所述第一分支目的地,并且当基于所述历史OR掩码的所述预测目标位的所述历史记录中的至少一个指示一致时,预测所述第一分支目的地,并且进一步,当使用所述历史AND掩码和所述历史OR掩码的分支预测时,所述分支目的地电路预测所述第二分支目的地。
13.根据权利要求12所述的处理器设备,
其中,所述缓冲器更新电路更新所述历史AND掩码和所述历史OR掩码,以便将建立侧无效AND掩码和建立侧无效OR掩码两者中重复记录的位定义为所述历史AND掩码和所述历史OR掩码两者的掩码目标位,
其中,当所述先前分支目的地和所述当前分支目的地两者都是分支建立时的分支目的地时,在建立侧无效AND掩码中记录的位是所述N位区域中的其历史记录上指示不一致的位,以及
其中,当所述先前分支目的地是在分支建立时的分支目的地、并且所述当前分支目的地是分支未被建立时的分支目的地时,在建立侧无效OR掩码中记录的位是所述N位区域中的其历史记录上指示一致的位。
14.根据权利要求12所述的处理器设备,
其中,所述缓冲器更新电路更新所述历史AND掩码和所述历史OR掩码,以便将未建立侧无效AND掩码和未建立侧无效OR掩码二者中重复记录的位定义为所述历史AND掩码和所述历史OR掩码二者的所述掩码目标位,
其中,在所述先前分支目的地和所述当前分支目的地二者都是分支未被建立时的分支目的地时,在未建立侧无效AND掩码中记录的位是所述N位区域中的其历史记录指示不一致的位,以及
其中,当所述先前分支目的地是分支未被建立时的分支目的地、并且所述当前分支目的地是分支建立时的分支目的地时,在未建立侧无效OR掩码中记录的位是所述N位区域中的其历史记录上指示一致的位。
15.根据权利要求12所述的处理器设备,
其中,当所述先前分支目的地和所述当前分支目的地不同时,所述缓冲器更新电路更新所述历史AND掩码,使得基于所述历史OR掩码的所述预测目标位中的其历史记录上指示不一致的位下次可以成为基于所述历史AND掩码的所述预测目标位。
16.一种处理器设备,包括:
数据高速缓冲存储器,包括数据存储区域和值判断结果区域;
存储控制电路,每次对所述数据高速缓冲存储器的存储指令被生成时,所述存储控制电路判断伴随所述存储指令的存储数据与对应于所述存储指令的线的所述数据存储区域中的数据的一致/不一致,并将判断结果和所述存储数据分别存储在所述线的等同值判断结果区域和所述数据存储区域中;
加载控制电路,每次对所述数据高速缓冲存储器的加载指令被生成时,所述加载控制电路读取存储在与所述加载指令对应的所述线的等同值判断结果区域中的判断结果;
判断历史记录电路,在N位区域(N是1或更大的整数)中分别将在条件分支指令被生成之前来自所述加载控制电路的N次的判断结果记录作为历史记录;
分支预测电路,在条件分支指令被生成时,基于所述N位区域中的所述历史记录来预测第一分支目的地或第二分支目的地,并且发出所预测的分支目的地的指令获取方向,所述第一分支目的地与通过所述条件分支指令的先前执行结果得到的先前分支目的地相同,所述第二分支目的地与所述先前分支目的地不同;以及
处理器主体电路,获取、译码和执行指令,并且在执行条件分支指令时,预先获取与来自所述分支预测电路的获取方向对应的所预测的分支目的地的指令,并且进一步,当通过所述条件分支指令的当前执行结果得到的所述当前分支目的地与所预测的分支目的地不同时,使得预先获取的所述指令无效。
17.根据权利要求16所述的处理器设备,
其中,当所述N位区域中的所有历史记录指示一致时,所述分支预测电路预测所述第一分支目的地,并且当所述N位区域中的历史记录中的任何一个指示不一致时,所述分支预测电路预测所述第二分支目的地。
18.根据权利要求16所述的处理器设备,还包括分支目的地缓冲器,其中注册了条件分支指令的指令地址与关于所述先前分支目的地的信息的相互关系,
其中,所述分支预测电路参考所述分支目的地缓冲器,并且定义所述第一分支目的地或所述第二分支目的地的指令地址。
19.根据权利要求18所述的处理器设备,还包括缓冲器更新电路,其在所述先前分支目的地与所述当前分支目的地相同时,将所述N位区域中的其历史记录指示不一致的位定义为掩码目标位,并且当所述先前分支目的地和所述当前分支目的地不同时,将所述N位区域中的其历史记录指示一致的位定义为掩码目标位,并将关于所述掩码目标位的信息注册在所述分支目的地缓冲器中,
其中,关于作为预测目标位的、所述N位区域中排除了所述掩码目标位的位,当所述预测目标位的所述历史记录全部指示一致时,所述分支预测电路预测所述第一分支目的地,并且当所述预测目标位的所述历史记录中的任何一个指示不一致时,所述分支预测电路预测所述第二分支目的地。
CN201810510152.4A 2017-05-26 2018-05-24 处理器设备 Pending CN108932136A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2017-104652 2017-05-26
JP2017104652A JP2018200545A (ja) 2017-05-26 2017-05-26 プロセッサ装置

Publications (1)

Publication Number Publication Date
CN108932136A true CN108932136A (zh) 2018-12-04

Family

ID=64401653

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810510152.4A Pending CN108932136A (zh) 2017-05-26 2018-05-24 处理器设备

Country Status (3)

Country Link
US (1) US11126435B2 (zh)
JP (1) JP2018200545A (zh)
CN (1) CN108932136A (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2592661B (en) * 2020-03-05 2022-05-11 Advanced Risc Mach Ltd An apparatus and method for performing branch prediction
US11783050B2 (en) * 2020-11-13 2023-10-10 Centaur Technology, Inc. Spectre fixes with predictor mode tag

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5857104A (en) * 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
US7114063B1 (en) * 2000-12-01 2006-09-26 Unisys Corporation Condition indicator for use by a conditional branch instruction
US6779108B2 (en) * 2000-12-15 2004-08-17 Intel Corporation Incorporating trigger loads in branch histories for branch prediction
WO2010134330A1 (ja) * 2009-05-19 2010-11-25 パナソニック株式会社 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体
JP2011141619A (ja) 2010-01-05 2011-07-21 Renesas Electronics Corp マイクロプロセッサ
US9639368B2 (en) * 2014-06-13 2017-05-02 International Business Machines Corporation Branch prediction based on correlating events
US9495157B1 (en) * 2015-12-07 2016-11-15 International Business Machines Corporation Fingerprint-based branch prediction

Also Published As

Publication number Publication date
JP2018200545A (ja) 2018-12-20
US20180341492A1 (en) 2018-11-29
US11126435B2 (en) 2021-09-21

Similar Documents

Publication Publication Date Title
US4725947A (en) Data processor with a branch target instruction storage
CN105765541B (zh) 用于机动车的控制器
KR102465896B1 (ko) 집약성을 개선하기 위한 머신 학습 모델들의 수정
US5423048A (en) Branch target tagging
KR100440805B1 (ko) 소규모의 하드웨어로 높은 적중률의 분기 예측을 하는 정보 처리 장치
CN102124443A (zh) 在单指令多数据(simd)数据处理器中提供扩展寻址模式
JP3681647B2 (ja) キャッシュメモリシステム装置
JPH08505725A (ja) 命令実行を制御するため命令にタグを割り当てるシステム及び方法
CN110781016B (zh) 一种数据处理方法、装置、设备及介质
JP2010244435A (ja) キャッシュ制御装置及びキャッシュ制御方法
CN103676927A (zh) 半导体集成电路器件及微控制器
CN100378656C (zh) 具有非易失性存储器的集成电路以及用于从所述存储器中取数据的方法
CN108932136A (zh) 处理器设备
CN105930136B (zh) 处理器和指令码生成设备
JP2004151962A (ja) キャッシュメモリ、プロセッサ及びキャッシュ制御方法
KR102658600B1 (ko) 디바이스를 디버깅할 때 메타데이터에 액세스하기 위한 장치 및 방법
JP2006031710A (ja) データ処理システム、方法およびキャッシュシステム
US8484446B2 (en) Microprocessor saving data stored in register and register saving method
US20070260862A1 (en) Providing storage in a memory hierarchy for prediction information
JP2002278752A (ja) 命令の実行結果予測装置
JP6618941B2 (ja) 管理装置、情報処理装置および管理方法
KR100517765B1 (ko) 캐시 메모리 및 그 제어 방법
CN101826002B (zh) 记录式分支预测器的硬件实现方法
JP5237671B2 (ja) データプロセッサ
CN101419543B (zh) 预测高速寄存器的存取位置的方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20181204