CN103635877B - 乱序处理器中的分支目标存储与检索 - Google Patents

乱序处理器中的分支目标存储与检索 Download PDF

Info

Publication number
CN103635877B
CN103635877B CN201280031316.6A CN201280031316A CN103635877B CN 103635877 B CN103635877 B CN 103635877B CN 201280031316 A CN201280031316 A CN 201280031316A CN 103635877 B CN103635877 B CN 103635877B
Authority
CN
China
Prior art keywords
cti
instruction
target address
address
processor
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.)
Active
Application number
CN201280031316.6A
Other languages
English (en)
Other versions
CN103635877A (zh
Inventor
C·H·奥尔森
M·K·沙
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.)
Oracle International Corp
Original Assignee
Oracle International 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 Oracle International Corp filed Critical Oracle International Corp
Publication of CN103635877A publication Critical patent/CN103635877A/zh
Application granted granted Critical
Publication of CN103635877B publication Critical patent/CN103635877B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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, 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, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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, 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

Abstract

一种处理器,配置为方便用于控制转移指令(CTI)的预测目标的传输与存储。在某些实施例中,处理器可以是多线程的并且支持用于多个线程的预测目标的存储。在有些实施例中,CTI分支目标可以由处理器的一个元件存储并且标签可以指示所存储目标的位置。标签可以与CTI关联,而不是把完整的目标地址与CTI关联。当CTI到达处理器的执行阶段时,标签可以用于检索预测目标地址。在利用标签检索预测目标的有些实施例中,来自不同处理器线程的CTI指令可以在不影响预测目标检索的情况下交错。

Description

乱序处理器中的分支目标存储与检索
技术领域
本公开内容涉及处理器,并且更具体地说涉及在多线程处理器中存储和检索(retrieve)分支目标地址。
背景技术
现代超标量微处理器通过并行并且不按程序次序地执行多条指令获得高性能。诸如在程序中非常普遍的分支、调用和返回之类的控制转移指令(CTI)会造成流水线式微处理器拖延(stall),因为要在给定控制转移指令之后执行的指令在执行该控制转移指令之前一直是未知的。这些拖延会导致显著的性能损失。
现代微处理器采用分支预测技术来越过CTI推测性地提取(fetch)并执行指令。分支预测涉及预测CTI的方向与目标。如果由于方向预测或目标预测不正确而使得CTI预测错误,则越过CTI推测性提取出的所有指令都被扔掉(清洗),并且由指令提取单元(IFU)从正确的路径提取新的指令。并且,一旦检测到预测错误的CTI,分支预测器一般就利用CTI的实际结果来更新,以确保其未来预测的准确性。
现代微处理器通常实现芯片级的多线程(CMT),以提高性能。在CMT处理器中,多个软件线程在处理器中同时处于活动状态,并且每个活动的线程都具有存储其状态的专用硬件资源。来自多个软件线程的指令的有效执行可能涉及预测来自不同线程的CTI的能力。多个线程在CMT处理器上的执行可能造成来自不同线程的CMT的执行交错。
发明内容
本公开内容涉及配置为执行控制转移指令(CTI)的处理器。在有些实施例中,公开了一种方便用于由处理器执行的控制转移指令的预测目标的有效传输和存储的机制。在某些实施例中,处理器可以是多线程的并且该机制可以支持对多个线程的预测目标的存储。
在有些实施例中,预测的CTI目标地址可以由处理器的元件存储并且标签可以指示所存储的目标地址的位置。标签可以与CTI关联,而不是把完整的目标地址与CTI关联。当CTI到达执行阶段时,该标签可以用于检索预测目标地址。在有些实施例中,来自不同处理器线程的CTI指令可以交错并且不同线程可以共享相同的存储元件。
在一种示例性实施例中,分支目标阵列(BTA)用于为CTI存储预测目标地址。在提取出CTI之后,分支预测单元为CTI预测目标地址和方向。预测目标地址存储在BTA中,并且对应于该目标地址在BTA中的位置的标签与CTI关联。标签连同CTI一起通过执行流水线的阶段。当CTI与标签到达分支执行单元时,分支执行单元利用该标签从BTA检索预测目标地址。分支执行单元还为CTI计算实际目标地址,并且比较实际地址与预测的地址,以便解析分支目标。在有些实施例中,BTA和标签可以是用于预测目标的有效存储与传输机制。在其它实施例中,其它元件可以执行上述示例性实施例的一个或多个功能性。
附图说明
图1是多核处理器的一种实施例的框图。
图2是处理器内核的一种实施例的框图。
图3是包括分支单元在内的处理器内核的更具体实施例的框图。
图4是分支目标阵列和分支执行单元的一种实施例的框图。
图5是说明利用分支目标阵列来存储CTI预测目标的一种实施例的流程图。
图6是说明利用分支目标阵列来存储CTI预测目标的更具体实施例的流程图。
图7是说明示例性系统实施例的框图。
具体实施例
本说明书包括对“一种实施例”和“一个实施例”的引用。短语“在一种实施例中”或“在一个实施例中”的出现不一定指相同的实施例。特定的特征、结构或特点可以按与本公开内容一致的任何合适方式组合。
术语。以下段落提供了对本公开内容(包括所附权利要求在内)中可以找到的术语的定义和/或上下文:
“包括”。这个术语是开放式的。如在所附权利要求中所使用的,这个术语不排除附加的结构或步骤。考虑陈述“一种包括一个或多个处理器单元的装置……”的权利要求。这种权利要求不排除该装置包括附加的组件(例如,网络接口单元、图形电路系统,等等)。
“配置为”。各种单元、电路或其它组件可以描述或阐述成“配置为”执行一个任务或多个任务。在这种上下文中,“配置为”用于通过指示这些单元/电路/组件包括在操作过程中执行那些任务的结构(例如,电路结构)来暗示结构。照此,即使当规定的单元/电路/组件当前不可操作(例如,没有开启)时,这些单元/电路/组件也可以被说成配置为执行任务。与“配置为”语言一起使用的单元/电路/组件包括硬件——例如,存储可以为了实现操作而执行的程序指令的电路、存储器,等等。陈述一个单元/电路/组件“配置为”执行一个或多个任务是明确地要对那个单元/电路/组件引用美国法典第35章112条第6段。
“基于”。如本文所使用的,这个术语用于描述影响决定的一个或多个因素。这个术语不排除可能影响一个决定的附加因素。即,一个决定可以仅仅基于那些因素或者至少部分地基于那些因素。考虑短语“基于B确定A”。虽然B可能是影响A的决定的一个因素,但是这个短语不排除A的决定还基于C。在其它情况下,A可以仅仅基于B来确定。
“执行”。这个术语具有其在本领域中普通和被接受的意义,并且包括可以由处理器为了实现指令的完成而执行的所有动作,包括提取、解码、发布及实际计算指令的结果。当一个功能单元在本文中被描述为“执行”一条特定指令时,这个术语指计算该特定指令的结果(例如,计算两个寄存器的内容之和)。类似地,当一条指令被描述为到达一个处理器流水线的“执行阶段”时,这个术语指该指令到达用于计算该特定指令的结果的功能单元。
“线程”。这个术语具有其在本领域中普通和被接受的意义,并且包括程序中可以由处理器执行的指令集合。例如,术语“线程”可以指作为“派生(fork)”或其它类似操作的结果在处理器上执行的一组指令。本文中描述为“处于”线程“中”的指令是用于一个线程的指令集合的一部分。
“并发存储/同时存储”。如本文所使用的,这些短语指存储项目(例如,用于不同线程的分支目标信息)某个重叠的周期。应当指出,这些术语不一定暗示两个并发存储的项目的存储同时开始或者两个项目被存储相同的时间长度。
介绍
本公开内容描述了涉及方便控制转移指令的处理的电路系统的各种实施例。图1和2给出了其中可以包括这种电路系统的示例性多线程处理器的概述。图3和4给出了用于分支目标存储的处理器元件的示例性实施例。图5和6给出了用于分支目标存储的示例性方法。图7给出了其中可以使用这种处理器的计算机系统的概述。
处理器概述
现在转向图1,示出了说明处理器10的一种实施例的框图。在某些实施例中,处理器10可以是多线程的。在所说明的实施例中,处理器10包括多个处理器内核100a-n,这些处理器内核也被指定为“内核0”至“内核n”。如本文所使用的,术语处理器可以指具有单个处理器内核的装置或者包括两个或多个处理器内核的装置。处理器10的各种实施例可以包括变化数量的内核100,例如8个、16个或者任何其它合适的数量。每个内核100都耦合到对应的L2高速缓存105a-n,L2高速缓存105a-n又经交叉开关110耦合到L3高速缓存120。内核100a-n和L2高速缓存105a-n可以总起来或者单独地分别一般性地被称为内核100和L2高速缓存105。
经交叉开关110和L3高速缓存120,内核100可以耦合到可以位于处理器10外面的各种设备。在所说明的实施例中,一个或多个存储器接口130可以配置为耦合到一排或多排系统存储器(未示出)。一个或多个一致性处理器接口140可以配置为把处理器10耦合到其它处理器(例如,在采用处理器10的多个单元的多处理器环境中)。此外,系统互连125把内核100耦合到一个或多个外围设备接口150和网络接口160。如以下更具体描述的,这些接口可以配置为把处理器10耦合到各种外围设备和网络。
内核100可以配置为执行指令并根据特定的指令集体系架构(ISA)处理数据。例如,在一种实施例中,内核100可以配置为实现ISA的一个版本,诸如V9、UltraSPARC体系架构2005、UltraSPARC体系架构2007或者UltraSPARC体系架构2009。但是,例如,在其它实施例中,预期可以采用任何期望的ISA,诸如x86(32位或64位版本)、
在所说明的实施例中,每个内核100都可以配置为与其它内核独立地操作,使得所有内核100都可以并行地(即,并发地)操作。此外,如以下结合图2的描述所描述的,在有些实施例中,每个内核100都可以配置为并发地执行多个线程,其中给定线程可以包括可以与来自另一个线程的指令独立地执行的指令集合。(例如,一个个别软件过程,诸如应用,可以包括一个或多个线程,这些线程可以被调度,以便让操作系统执行。)这种内核100也可以被称为多线程(MT)内核。在一种实施例中,每个内核100可以配置为并发地执行来自可变数量线程,至多八个并发执行的线程,的指令。在16内核的实现中,处理器10因此可以并发地执行至多128个线程。但是,在其它实施例中,预期可以提供其它数量的内核100,并且内核100可以并发地处理不同数量的线程。
此外,如以下更具体描述的,在有些实施例中,每个内核100可以配置为不按程序次序执行某些指令,在本文中这也被称为乱序(out-of-order)执行,或者简单地说是OOO。作为乱序执行的一个例子,对于一个特定的线程,可能存在按程序次序在一条给定指令后面但是不依赖于该给定指令的指令。如果给定指令的执行由于某种原因(例如,由于高速缓存未命中)而延迟,则后面的指令可以在该给定指令完成之前执行,这可以提高执行的线程的整体性能。
如图1中所示,在一种实施例中,每个内核100可以具有专用的对应L2高速缓存105。在一种实施例中,L2高速缓存105可以配置为作为完全包括一级高速缓存状态的组相联、回写式高速缓存(例如,内核100中的指令和数据高速缓存)。为了维护与一级高速缓存的一致性,L2高速缓存105的实施例可以实现维护一级高速缓存标签的虚拟拷贝的反向目录。L2高速缓存105可以实现一致性协议(例如,MESI协议),以便维持与处理器10中其它高速缓存的一致性。在一种实施例中,L2高速缓存105可以强制实施执行的总存储排序(TSO)模型,其中来自相同线程的所有存储指令都必须按程序次序完成。
在各种实施例中,L2高速缓存105可以包括配置为支持高速缓存功能性与性能的各种结构。例如,L2高速缓存105可以包括配置为存储未命中L2的请求的未命中缓冲区、配置为临时存储从L3高速缓存120返回的数据的填充缓冲区、配置为临时存储脏的被驱逐数据并探听回拷数据的回写缓冲区,和/或配置为存储从L3高速缓存120接收到的探听请求的探听缓冲区。在一种实施例中,L2高速缓存105可以实现基于历史的预提取器,它可以尝试分析L2未命中行为并且对应地生成对L3高速缓存120的预提取请求。
交叉开关110可以配置为管理L2高速缓存105和共享的L3高速缓存120之间的数据流。在一种实施例中,交叉开关110可以包括允许任何L2高速缓存105访问L3高速缓存120的任何排(bank)并且反过来允许数据从任何L3排返回到任何L2高速缓存105的逻辑(例如,诸如多路复用器或开关架构)。即,交叉开关110可以配置为作为允许一般化的点到点通信的M到N交叉开关。但是,在其它实施例中,在L2高速缓存105与L3高速缓存120之间可以采用其它互连方案。例如,可以利用网格、环或者其它合适的拓扑结构。
交叉开关110可以配置为并发地处理从L2高速缓存105到L3高速缓存120的数据请求及从L3高速缓存120到L2高速缓存105的数据响应。在有些实施例中,交叉开关110可以包括给数据请求和/或响应排队的逻辑,使得请求和响应可能不会在等待服务的同时阻塞其它活动。此外,在一种实施例中,交叉开关110可以配置为仲裁在多个L2高速缓存105尝试访问L3高速缓存120的单排或者反过来的时候可能发生的冲突。
L3高速缓存120可以配置为高速缓存供内核100使用的指令和数据。在所说明的实施例中,L3高速缓存120可以组织成八个可单独寻址的排,每排都可以被单独访问,使得,在没有冲突的情况下,每排可以并发地把数据返回到对应的L2高速缓存105。在有些实施例中,每个个别排可以利用组相联或直接映射技术实现。例如,在一种实施例中,L3高速缓存120可以是8兆字节(MB)高速缓存,其中每个1MB的排是具有64字节行尺寸的16路组相联。在有些实施例中,L3高速缓存120可以实现为回写式高速缓存,其中写过的(脏)数据在对应的高速缓存行被驱逐之前可能不能写到系统存储器。但是,在其它实施例中,预期L3高速缓存120可以按任何合适的方式配置。例如,L3高速缓存120可以利用更多或更少的排实现,或者以不采用可独立访问的排的方案;它可以采用其它排尺寸或者高速缓存几何结构(例如,不同的行尺寸或者组相联程度);它可以采用直写来代替回写行为;并且它可以或者可以不对写未命中进行分配。L3高速缓存120配置的其它变体是有可能的和预期的。
在有些实施例中,L3高速缓存120可以实现用于从交叉开关110到达的请求和要发送到其的结果的队列。此外,在有些实施例中,L3高速缓存120可以实现配置为存储从存储器接口130到达的填充数据的填充缓冲区、配置为存储要写到存储器的脏的被驱逐数据的回写缓冲区,和/或配置为存储不能作为单个高速缓冲命中来处理的L3高速缓存访问(例如,L3高速缓存未命中、匹配较老未命中的高速缓存访问、诸如可能需要多次高速缓存访问的原子操作的访问,等等)的未命中缓冲区。L3高速缓存120可以不同地实现为单端口或多端口(即,能够处理多个并发的读和/或写访问)。在任一情况下,L3高速缓存120都可以实现在各个高速缓存读和写请求当中优先化高数缓存访问的仲裁逻辑。
不是来自内核100的所有外部访问都有必要通过L3高速缓存120。在所说明的实施例中,不可高速缓存单元(NCU)122可以配置为处理来自内核100的对不可高速缓存数据的请求,不可高速缓存数据诸如是以下关于外围设备接口150和网络接口160所描述的来自I/O设备的数据。
存储器接口130可以配置为,例如响应高速缓存填充请求与数据驱逐,管理L3高速缓存120与系统存储器之间的数据转移。在有些实施例中,可以实现存储器接口130的多个实例,每个实例配置为控制系统存储器的对应排。例如,存储器接口130可以配置为接口到任何合适类型的系统存储器,诸如全缓冲双列直插内存模块(FB-DIMM)、双数据率或双数据率2、3或4同步动态随机存取存储器(DDR/DDR2/DDR3/DDR4SDRAM)或者DRAM在有些实施例中,存储器接口130可以配置为支持到多个不同类型的系统存储器的接口。
在所说明的实施例中,处理器10还可以配置为从除系统存储器之外的其它源接收数据。系统互连125可以配置为为这种源提供与内核100、L2高速缓存105和/或L3高速缓存120交换数据的中心接口。在有些实施例中,系统互连125可以配置为协调数据到系统存储器和数据从系统存储器的直接存储器访问(DMA)传输。例如,经存储器接口130,系统互连125可以协调系统存储器与经网络接口160附连的网络设备之间或者系统存储器与经外围接口150附连的外围设备之间的DMA传输。
处理器10可以配置为在具有处理器10的其它实例或者其它兼容处理器的多处理器环境中使用。在所说明的实施例中,以保留各个处理器之间存储器一致性的方式(例如,根据掌管存储器事务的一致性协议),一致性处理器接口140可以配置为实现不同处理器之间高带宽、直接芯片到芯片的通信。
外围设备接口150可以配置为协调处理器10与一个或多个外围设备之间的数据传输。例如但不作为限制,这种外围设备可以包括存储设备(例如,基于磁或光介质的存储设备,包括硬驱、带驱动器、CD驱动器、DVD驱动器等)、显示设备(例如,图形子系统)、多媒体设备(例如,音频处理子系统)或者任何其它合适类型的外围设备。在一种实施例中,外围设备接口150可以实现标准外围设备接口的一个或多个实例。例如,利用任何合适数量的I/O道,外围设备接口150的一个实施例可以实现根据1.x、2.0、3.0代的快速外围组件接口(PCI ExpressTM或者PCIe)标准或者那个标准的其它合适变体。但是,预期任何合适的接口标准或标准组合都可以采用。例如,在有些实施例中,除PCI ExpressTM之外或者代替之,外围设备接口150可以配置为实现通用串行总线(USB)协议或IEEE1394协议的一个版本。
网络接口160可以配置为协调处理器10与经网络耦合到处理器10的一个或多个网络设备(例如,联网的计算机系统或外围设备)之间的数据传输。在一个实施例中,网络接口160可以配置为执行实现以太网(IEEE802.3)联网标准,诸如像千兆字节以太网或10千兆字节以太网,所必需的数据处理。但是,预期任何合适的联网标准都可以实现,包括诸如即将出现的40千兆以太网和100千兆以太网标准。在有些实施例中,网络接口160可以配置为实现其它类型的联网协议,诸如光纤通道、经以太网的光纤通道(FCoE)、数据中心以太网、Infiniband和/或其它合适的联网协议。在有些实施例中,网络接口160可以配置为实现多个离散的网络接口端口。
动态多线程处理器内核的概述
如以上所提到的,在一种实施例中,每个内核100可以配置为用于多线程的乱序执行。更具体地说,在一种实施例中,每个内核100可以配置为执行动态多线程。总的来说,在动态多线程下,内核100的执行资源可以配置为有效地处理呈现不同性能特点与资源需求的变化类型的计算工作负载。这种工作负载可能跨强调个别线程与多线程性能的不同组合的一个连续区域而变化。
在这个连续区域的一端,计算工作负载可以包括多个独立的任务,其中在某个性能标准内完成总的任务集合(例如,每秒钟的任务总数)是系统性能中比任何特定任务完成的速率更显著的一个因素。例如,在某些类型的服务器或事务处理环境中,可以有大量个别的客户端或消费者请求(诸如web页面请求或文件系统访问)。在这种上下文中,个别请求对于处理器性能可能不是特别敏感。例如,请求可以是I/O绑定而不是处理器绑定的–个别请求的完成可能需要(例如,对相对慢的存储器、网络或存储设备的)I/O访问,相对于所涉及的处理器工作,这种访问支配完成请求所需的总时间。因而,能够并发地处理许多这种任务的处理器(例如,就像独立地执行线程一样)可能对这种工作负载呈现出比只强调一个或少量并发任务的性能的处理器更好的性能。
在这个连续区域的另一端,计算工作负载可以包括其性能高度处理器敏感的个别任务。例如,涉及显著数学分析和/或转换(例如,加密、图形处理、科学计算)的任务会比I/O绑定更处理器绑定。这种任务可能会得益于强调单任务性能的处理器,例如通过指令级并行化的推测执行和开发。
动态多线程代表以灵活地适应沿上述连续区域变化的工作负载的方式分配处理器资源的尝试。在一种实施例中,内核100可以配置为实现细粒度的多线程,其中每个内核可以从对应于多个线程的指令池中选择要执行的指令,使得来自不同线程的指令可以被调度成相邻地执行。例如,在采用细粒度多线程的内核100的流水线实施例中,来自不同线程的指令可以占用相邻的流水线阶段,使得来自几个线程的指令在一个给定的内核处理循环中可能处于不同执行阶段中。通过细粒度多线程的使用,内核100可以配置为有效地处理依赖并发线程处理比个别线程性能更多的工作负载。
在一种实施例中,内核100还可以配置为实现乱序处理、推测执行、寄存器重命名和/或提高依赖处理器的工作负载的性能的其它特征。并且,内核100可以配置为在给定时间活动地执行的线程当中动态地分配各种硬件资源,使得,如果较少的线程在执行,则每个个别线程可能能够利用更大份额的可用硬件资源。这可能导致在较少线程在执行的时候提高的个别线程性能,同时保留支持呈现在其性能中更少依赖处理器的更大量线程的工作负载的灵活性。在各种实施例中,可以在变化数量的线程当中动态分配的给定内核100的资源可以包括分支资源(例如,分支预测器结构)、负载/存储资源(例如,负载/存储缓冲区和队列)、指令完成资源(例如,重新排序缓冲区结构与提交逻辑)、指令发布资源(例如,指令选择和调度结构)、寄存器重命名资源(例如,寄存器映射表)和/或存储器管理单元资源(例如,转译后备缓冲区、页面移动(page walk)资源)。
配置为执行动态多线程的内核100的一种实施例在图2中说明。在所说明的实施例中,内核100包括指令提取单元(IFU)200,该IFU200包括指令高速缓存205。IFU200耦合到存储器管理单元(MMU)270、L2接口265和陷阱逻辑单元(TLU)275。IFU200附加地耦合到以选择单元210开始并且又继续通过解码单元215、重命名单元220、拣取单元225和发布单元230的指令处理流水线。发布单元230耦合成向多个指令执行资源中任意一个发布指令,这些指令执行资源是:执行单元0(EXU0)235、执行单元1(EXU1)240、包括数据高速缓存250的负载存储单元(LSU)245,和/或浮点/图形单元(FGU)255。这些指令执行资源耦合到工作寄存器文件260。此外,LSU245耦合到L2接口265和MMU270。
在以下讨论中,描述了所说明的内核100实施例的每个结构的示例性实施例。但是,应当指出,所说明的资源分区仅仅是内核100可以如何实现的一个例子。备用配置和变体是可能的和预期的。
指令提取单元200可以配置为向内核100的剩余部分提供要执行的指令。在一种实施例中,IFU200可以配置为选择要提取的线程、从指令高速缓存205为选定的线程提取指令并且为了下游处理而缓冲它们、响应于指令高速缓存未命中而从L2高速缓存105请求数据并且预测控制转移指令的方向与目标(例如,分支)。在有些实施例中,除了指令高速缓存205,IFU200还可以包括多个数据结构,诸如指令转译后备缓冲区(ITLB)、指令缓冲区和/或配置为存储与线程选择和处理相关的状态的结构。
在一种实施例中,在内核100的每个执行循环期间,IFU200可以配置为选择一个将进入IFU处理流水线的线程。线程选择可以考虑各种因素与条件,一些特定于线程而其它的特定于IFU。例如,某些指令高速缓存活动(例如,高速缓存填充)、ITLB活动或者诊断活动可能会抑制线程选择,如果这些活动在给定执行循环期间发生的话。此外,个别线程可能处于影响其选择资格的具体准备就绪状态。例如,对其存在未完成的指令高速缓存未命中的线程在该未命中被解决之前可能没有资格供选择。在有些实施例中,有资格参与线程选择的那些线程可以通过优先级分成组,例如依赖于线程的状态或者IFU流水线处理线程的能力。在这种实施例中,多级仲裁可以被用来执行线程选择:选择首先通过组优先级,然后在选定的组中根据合适的仲裁算法(例如,最近最少提取算法)发生。但是,应当指出,用于线程选择的任何合适方案都可以采用,包括比这里提到的那些更复杂或更简单的仲裁方案。
一旦线程已经被IFU200选择用于提取,就可以为选定的线程实际提取指令。为了执行提取,在一种实施例中,IFU200可以配置为生成要提供给指令高速缓存205的提取指令。在各种实施例中,提取地址可以根据与选定线程关联的程序计数器、预测分支目标地址或者以某种其它方式(例如,通过测试或诊断模式)提供的地址生成。然后,所生成的提取地址可以应用到指令高速缓存205,以便确定是否存在高速缓存命中。
在有些实施例中,访问指令高速缓存205可以包括执行提取地址翻译(例如,在物理加索引和/或加标签的高速缓存的情况下)、访问高速缓存标签阵列并且比较检索出的高速缓存标签与所请求的标签,以确定高速缓存命中状态。如果存在高速缓存命中,则IFU200可以在缓冲区中存储检索出的指令,让指令流水线的随后阶段使用。如果存在高速缓存未命中,则IFU200可以协调从L2高速缓存105对未命中的高速缓存数据的检索。在有些实施例中,IFU200还可以配置为在实际需要提取指令之前把指令预先提取到指令高速缓存205中。例如,假定跟在后面的地址有可能在不久的将来要提取,在高速缓存未命中的情况下,IFU200可以配置为针对所请求的提取地址及顺序跟在该所请求的提取地址之后的地址检索未命中的数据。
在许多ISA中,指令执行根据指令地址顺序前进(例如,如由一个或多个程序计数器所反映的)。但是,诸如分支、调用/返回或其它类型指令的控制转移指令(CTI)可能造成执行从当前提取地址转移到一个非顺序的地址。如以上所提到的,IFU200可以配置为预测CTI(或者,在有些实施例中,为ISA定义的CTI的一个子集)的方向与目标,以便减少由于一直等到确切知道CTI的效果所造成的延迟。虽然任何合适类型的分支预测器都可以采用,但是,在一种实施例中,IFU200可以配置为实现基于感知器的动态分支预测器。
为了实现分支预测,在各种实施例中,IFU200可以实现多种控制和数据结构,诸如跟踪先前分支历史的历史寄存器、反映预测的相对权重或强度的权重表和/或存储预测要成为CTI目标的提取地址的目标数据结构。并且,在有些实施例中,IFU200可以进一步配置为部分解码(或者预先解码)所提取出的指令,以方便分支预测。当给定线程被IFU200选择用于提取时,为该给定线程预测的提取地址可以用作提取地址。当CTI实际执行的时候(例如,如果CTI是条件指令,或者如果CTI本身在另一个预测CTI的路径中),预测的结果可以得到验证。如果预测不正确,则沿着被提取和发布的预测路径的指令可以被取消。
通过以上讨论的操作,IFU200可以配置为从一个或多个线程提取并维护缓冲的指令池,以便馈送到指令流水线的剩余部分中来执行。总的来说,选择单元210可以配置为选择并调度线程来执行。虽然在其它实施例中可以选择不同数量的线程和指令,但是,在一种实施例中,在内核100的任何给定执行循环期间,选择单元210可以配置为从内核100并发支持的最大数量线程(例如,8个线程)中选择至多一个准备就绪的线程,并且可以从选定的线程中选择至多两条指令由解码单元215解码。在各种实施例中,不同的条件可能会影响一个线程是否准备好被选择单元210选择,诸如分支预测失误、不可用的指令或者其它条件。为了确保线程选择中的公平性,选择单元210的有些实施例可以在准备就绪的线程当中采用仲裁(例如,最近最少使用算法)。
被选择单元210选择进行解码的特定指令可以接受解码单元215的解码约束;因而,在任何给定的循环中,可以选择比最大可能的指令数少的指令。此外,在有些实施例中,选择单元210可以配置为把内核100的某些执行资源分配给选定的指令,使得所分配的资源在其被释放之前将不再用于另一条指令。例如,选择单元210可以为重新排序缓冲区、负载/存储缓冲区或者可以在指令执行过程中被利用的其它下游资源的条目分配资源标签。
总的来说,解码单元215可以配置为准备由选择单元210选择用于进一步处理的指令。解码单元215可以配置为识别指令的(例如,如由其操作码所规定的)特定本质并且,如果有的话,确定在指令中编码的源和接收(即,目的地)寄存器。在有些实施例中,解码单元215可以配置为检测指令之间的某些依赖性、把体系架构寄存器重新映射到扁平寄存器空间和/或把某些复杂指令转换成两条或更多条较简单的指令来执行。此外,在有些实施例中,解码单元215可以配置为把指令指定给时隙,供后续调度。在一种实施例中,可以定义两个时隙0-1,其中时隙0包括在负载/存储单元245或执行单元235-240中可以执行的指令,而时隙1包括在执行单元235-240、浮点/图形单元255中可以执行的指令及任何分支指令。但是,在其它实施例中,可以采用其它数量的时隙和时隙指定类型,或者时隙可以完全被略去。
寄存器重命名可以方便指令之间某些依赖性(例如,读后写或者“假”依赖性)的消除,这又会防止不必要的指令执行串行化。在一种实施例中,重命名单元220可以配置为通过把由指令规定的逻辑(即,体系架构)目的地寄存器映射到物理寄存器空间、在这个过程中解决假依赖性,来重命名它们。在有些实施例中,重命名单元220可以维护反映逻辑寄存器和它们所映射到的物理寄存器之间的关系的映射表。
一旦被解码和重命名,指令就准备好被调度执行了。在所说明的实施例中,拣取单元225可以配置为拣取准备好执行的指令并且把所拣取的指令发送到发布单元230。在一种实施例中,拣取单元225可以配置为维护存储多条解码且重命名的指令及关于所存储指令的相对年龄与状态的信息的拣取队列。在每个执行循环期间,拣取单元225的这种实施例可以每个时隙最多拣取一条指令。例如,考虑指令依赖性和年龄信息,对于给定的时隙,拣取单元225可以配置为为该给定的时隙拣取准备好执行的最老指令。
在有些实施例中,拣取单元225可以配置为通过在拣取推测性负载/存储指令(和,在有些情况下,它们的从属指令)之后保留它们来支持负载/存储推测。这可以方便在负载/存储推测失误的情况下指令的重演。此外,在有些实施例中,拣取单元225可以配置为通过使用拖延故意把“洞”插入到流水线中,例如,以便管理诸如某些负载/存储的同步或长等待时间FGU指令的下游流水线危险因素。
发布单元230可以配置为向用于拣取出的指令的各种执行单元提供指令源和数据。在一种实施例中,发布单元230可以配置为从适当的源读取源操作数,这可以依赖于流水线的状态而变化。例如,如果源操作数依赖于仍然处于执行流水线中的先前指令,则该操作数可以从适当的执行单元结果总线被直接绕过。结果也可以源自代表体系架构(即,用户可见的)及非体系架构状态的寄存器文件。在所说明的实施例中,内核100包括可以配置为存储还没有提交到体系架构状态并且可以充当某些操作数的源的指令结果(例如,整数结果、浮点结果和/或条件码结果)的工作寄存器文件260。各种执行单元还可以维护操作数可以源自其中的体系架构整数、浮点和条件码状态。
从发布单元230发布的指令可以前进到一个或多个所说明的执行单元来执行。在一种实施例中,EXU0235和EXU1240中的每一个都可以类似地或者完全相同地配置为执行在所实现的ISA中定义的某些整数类型指令,诸如算术、逻辑和移位指令。在所说明的实施例中,EXU0235可以配置为执行从时隙0发布的整数指令,并且还可以执行地址计算并且用于由LSU245执行的负载/存储指令。EXU1240可以配置为执行从时隙1发布的整数指令,及分支指令。虽然这些指令中的一些实际上可以在其它功能单元中执行,但是,在一种实施例中,FGU指令和多循环整数指令可以作为通过EXU1240流水线的时隙1指令来处理。
在有些实施例中,体系架构与非体系架构的寄存器文件可以在执行单元235-240中或者其附近物理实现。在有些实施例中,预期内核100可以包括多于或少于两个的整数执行单元,并且执行单元的功能性可以是或者可以不是对称的。并且,在有些实施例中,执行单元235-240可以不绑定到具体的发布时隙,或者可以与刚刚描述的不同地绑定。
负载存储单元245可以配置为处理数据存储器引用,诸如整数与浮点负载和存储指令及其它类型的存储器引用指令。LSU245可以包括配置为检测数据高速缓存未命中并且作为响应从L2高速缓存105请求数据的数据高速缓存250及逻辑。在一种实施例中,数据高速缓存250可以配置为组相联、直写式高速缓存,其中所有存储都写到L2高速缓存105,而不管它们是否在数据高速缓存250中命中。虽然在其它实施例中,LSU245可以实现专用的地址生成逻辑,但是,如以上所指出的,用于负载/存储指令的地址的实际计算可以在一个整数执行单元中发生。在有些实施例中,LSU245可以实现配置为预测并预先提取有可能在将来被使用的数据的自适应性、依赖历史的硬件预提取器,以便增加在需要的时候这种数据将驻留在数据高速缓存250中的可能性。
在各种实施例中,LSU245可以实现配置为方便存储器操作的多种结构。例如,为了一致性探听和依赖性检查,LSU245可以实现高速缓存虚拟数据地址翻译的数据TLB,及配置为存储已发布但还没有提交的负载和存储指令的负载和存储缓冲区。LSU245可以包括配置为存储例如由于高速缓存未命中而还不能完成的未完成负载和存储的未命中缓冲区。在一种实施例中,LSU245可以实现配置为存储用于已经提交的存储的地址和数据信息的存储队列,以方便负载依赖性检查。LSU245还可以包括配置为支持原子负载-存储指令、存储器相关的异常检测及对专用寄存器(例如,控制寄存器)的读和写访问的硬件。
浮点/图形单元255可以配置为执行和提供用于在所实现的ISA中定义的某些浮点和面向图形的指令的结果。例如,在一种实施例中,FGU255可以实现与IEEE754-1985浮点标准兼容的单精度和双精度浮点运算指令,诸如加、减、乘、除,以及某些超越功能。并且,在一种实施例中,FGU255可以实现由视觉指令集(VISTM)体系架构的一个版本诸如VISTM2.0或VISTM3.0所定义的分区算术和面向图形的指令。在有些实施例中,FGU255可以实现融合与不融合的浮点乘-加指令。此外,在一种实施例中,FGU255可以实现某些整数指令,诸如整数乘、除,以及人口计数指令。依赖于FGU255的实现,有些指令(例如,有些超越或者扩展精度指令)或者指令操作数或者结果场景(例如,某些不正常的操作数或预期的结果)可以被软件俘获和处理或者仿真。
在一种实施例中,FGU255可以为浮点加/乘、除/平方根以及图形操作实现独立的执行流水线,而在其它实施例中,FGU255实现的指令可以不同地分区。在各种实施例中,依赖于指令类型,FGU255实现的指令可以完全流水线化(即,FGU255可能能够每个执行循环开始一条新指令)、部分流水线化或者可以在完成之前一直阻塞发布。例如,在一种实施例中,浮点加和乘运算可以完全流水线化,而浮点除运算可以在完成之前一直阻塞其它除/平方根运算。
FGU255的实施例还可以配置为实现硬件加密支持。例如,FGU255可以包括配置为支持加密/解密算法的逻辑,诸如高级加密标准(AES)、数据加密标准/三重数据加密标准(DES/3DES)、Kasumi分组密码算法,和/或Camellia分组密码算法。FGU255还可以包括实现哈希或校验和算法的逻辑,诸如安全哈希算法(SHA-1、SHA-256、SHA-384、SHA-512)或者消息摘要5(MD5)。FGU255还可以配置为实现模块化的算术,诸如模块化的乘法、减少与幂运算,及各种类型的伽罗瓦(Galois)域运算。在一种实施例中,FGU255可以配置为利用浮点乘法器阵列用于模块化乘法。在各种实施例中,FGU255可以实现以上提到的算法及未具体描述的其它算法中的几种。
对于不同的实施例,FGU255提供的各种加密与模块化算术运算可以按不同的方式被调用。在一种实施例中,例如,通过使用经由特殊寄存器或存储器映射的寄存器的使用来定义的控制字队列,这些特征可以经可以间接地通过软件编程的离散协处理器来实现。在另一种实施例中,ISA可以利用可以允许软件直接执行这些运算的特殊指令来扩增。
如前面所描述的,指令和数据存储器访问可能涉及把虚拟地址翻译成物理地址。在一种实施例中,这种翻译可以在页面级粒度发生,其中某个数量的地址位包括到给定地址页中的偏移量,并且剩余的地址位包括页号。例如,在采用4MB页、64位虚拟地址和40位物理地址的实施例中,22个地址位(对应于4MB的地址空间,并且一般是最不显著的地址位)可以构成页偏移量。虚拟地址剩余的42位可以对应于那个地址的虚拟页号,并且物理地址剩余的18位可以对应于那个地址的物理页号。在这种实施例中,虚拟到物理地址的翻译可以通过把虚拟页号映射到特定的物理页号来发生,留下页偏移量不被修改。
这种翻译映射可以存储在ITLB或DTLB中,用于指令高速缓存205或数据高速缓存250的查找过程期间的虚拟地址的快速翻译。在用于给定虚拟页号的翻译在适当的TLB中没有找到的情况下,存储器管理单元270可以配置为提供翻译。在一种实施例中,MMU270可以配置为管理存储在系统存储器中的一个或多个翻译表并且响应于对地址翻译的请求,诸如由于ITLB或DTLB未命中,而遍历这种表(在有些实施例中,这些表可能是分层组织的)。(这种遍历也被称为页表移动或者硬件表移动。)在有些实施例中,如果MMU270不能导出有效的地址翻译,例如如果其中一个包括必需页表的存储器页面不驻留在物理存储器中(即,页面未命中),则MMU270可以配置为生成陷阱,以允许存储器管理软件例程处理翻译。在各种实施例中,预期可以采用任何期望的页面尺寸。另外,在有些实施例中,可以并发地支持多个页面尺寸。
如以上所指出的,所说明的内核100实施例中的几个功能单元可以配置为生成离核的存储器请求。例如,IFU200和LSU245每个都可以响应于它们各自的高速缓存未命中而生成对L2高速缓存105的访问请求。此外,MMU270可以配置为例如在执行页表移动的同时生成存储器请求。在所说明的实施例中,L2接口265可以配置为代表可以生成L2访问的各种功能单元,向与特定内核100关联的L2高速缓存105提供一个集中式接口。在一种实施例中,L2接口265可以配置为维护未决L2请求的队列并且在未决请求当中进行仲裁,以确定哪个请求或哪些请求可以在给定的执行循环期间传送到L2高速缓存105。例如,L2接口265可以实现最近最少使用或其它算法,以便在L2请求者当中进行仲裁。在一种实施例中,L2接口265还可以配置为接收从L2高速缓存105返回的数据,并且把这种数据指引到适当的功能单元(例如,指引到数据高速缓存250,用于由于未命中造成的数据高速缓存填充)。
在内核100的有些实施例的操作过程中,异常事件可能发生。例如,来自由选择单元210选择要执行的给定线程的指令对于内核100实现的ISA来说可能不是有效指令(例如,该指令可能具有非法操作码),浮点指令可能产生需要在软件中进一步处理的结果,MMU270可能由于页面未命中而不能够完成页表移动,可能检测到硬件错误(诸如高速缓存或寄存器文件中不可纠正的数据损坏)或者各种其它可能的体系架构定义或特定于实现的异常事件中的任意一者都有可能发生。在一种实施例中,陷阱逻辑单元275可以配置为管理这种事件的处理。例如,TLU275可以配置为接收特定线程执行过程中发生的异常事件的通知,并且使那个线程的执行控制被引导到对应于所检测到的事件的监管员模式软件处理器(即,陷阱处理器)。这种处理器可以包括,例如,配置为向与俘获线程关联的应用返回错误状态指示并且有可能终止该应用的非法操作码陷阱处理器、配置为修复不精确结果的浮点陷阱处理器,等等。
在一种实施例中,TLU275可以配置为,在不破坏其它非俘获线程执行的情况下,从内核100中的任何处理阶段清洗来自俘获线程的所有指令。在有些实施例中,当来自给定线程的特定指令造成陷阱时(相对于独立于指令执行的陷阱造成条件,诸如硬件中断请求),TLU275可以把这种陷阱实现为精确陷阱。即,TLU275可以确保来自在俘获指令之前发生的给定线程的所有指令(以程序次序)都完成并且更新体系架构状态,同时没有来自在俘获指令之后发生的给定线程的指令(以程序次序)完成或更新体系架构状态。
此外,在缺少异常或陷阱请求的情况下,TLU275可以配置为启动和监视工作结果向体系架构状态的提交。例如,TLU275可以包括协调推测结果到体系架构状态的转移的重新排序缓冲区(ROB)。TLU275还可以配置为协调由于分支预测失误造成的线程清洗。对于没有由于预测失误或异常而被清洗或以别的方式取消的指令,指令处理可以在指令结果已被提交的时候结束。
在各种实施例中,图2中所说明的单元中的任何一个都可以实现为一个或多个流水线阶段,以便形成当线程提取在IFU200中发生时开始并且以TLU275的结果提交结束的指令执行流水线。依赖于图2的各种单元的功能性被分区和实现的方式,不同的单元可能需要不同数量的循环来完成它们的指令处理部分。在有些情况下,某些单元(例如,FGU255)可能需要可变数量的循环来完成某些类型的操作。
与在线程或过程之间切换时一般需要流水线清洗的以往处理器实现形成对比,通过动态多线程的使用,在有些情况下,内核100的指令流水线的每个阶段都有可能保持来自不同执行阶段中的不同线程的指令。在有些实施例中,由于资源冲突或其它调度危险因素造成的清洗和拖延可能造成某些流水线阶段在给定的循环中没有指令。但是,在所说明的内核100的实施例采用的细粒度多线程处理器实现中,这种清洗和拖延可以指向流水线中的单个线程,留下其它线程不被干扰。此外,即使内核100处理的一个线程(例如,由于L2高速缓存未命中)拖延显著的时间长度,来自另一个线程的指令也可以已经准备好被选择发布,从而增加了整体的线程处理吞吐量。
但是,如前所述,支持细粒度多线程执行的内核100的各种资源也可以被动态地重新分配,以便提高具有更少量线程的工作负载的性能。在这些情形下,有些线程可以被分配更大的执行资源份额,而其它线程被分配相应较少的资源。但是,即使当较少的线程共享相比而言较大的执行资源份额时,内核100也仍然呈现出上述灵活的、特定于线程的清洗与拖延行为。
分支目标阵列
在各种实施例中,处理器10或处理器内核100可以包括为CTI预测目标的指令提取单元或分支预测单元。在有些情况下,指令提取单元或分支预测单元有可能在CTI执行之前明确地确定实际的目标,诸如当目标不跨越页面边界(例如,8K边界)的时候。但是,在其它情况下,预测的目标可能是不正确的并且实际的目标可能需要在执行阶段对照预测的目标进行检查。在有些实施例中,提供了分支目标阵列,用于在CTI目标预测和CTI执行之间的时间段期间的预测CTI目标地址的存储。
现在转向图3,示出了包括分支单元380的内核100的实施例。分支单元380可以部分地位于指令提取单元(IFU)200中。例如,分支预测单元385可以位于IFU200中,或者如图3中所示那样耦合到IFU200。在其它实施例中,分支单元380可以位于内核100中其它地方。图3是一种示例性实施例而不是意味着要限定分支单元380的位置或连接性。在所说明的实施例中,分支单元380包括:分支预测单元385、分支目标阵列390以及分支执行单元395。在其它实施例中,分支单元380可以包括更多的元件和/或储存器。在有些实施例中,处理器10配置为关于来自同一线程的其它CTI按顺序执行CTI,但是配置为跨线程不考虑先提取谁的任何次序执行CTI。
在一种实施例中,分支执行单元395确定给定线程中最老CTI的实际方向与目标,并且随后比较该CTI的实际方向和目标与预测的方向和目标,以确定该CTI是否预测失误。如果检测到预测失误,则不正确的推测路径上该CTI后面所有较年轻的指令都被清洗,指令提取单元被重定向以从正确的目标地址提取指令,并且分支预测单元385基于CTI的实际方向和目标被更新。应当指出,在有些实施例中,预测的目标可以等效于预测的目标地址,并且这些术语可以在本公开内容中互换使用。
如以上所指出的,在执行时,CTI重定向在有些实现中会发生,或者是因为预测的方向不正确或者是因为预测的目标不正确。关于这些问题中的第二个,分支执行需要访问预测的目标,以便与实际目标进行比较。(如以上所指出的,CTI可以按与它们被预测的次序不同的次序执行。)例如,简单地把50位目标地址附连到沿流水线向下的任何指令是极其昂贵的。另一种方法将是添加线程化的结构,其中每个线程都具有它自己专用的条目。随着线程个数增加(例如,支持多达八个线程的处理器),如果每个线程都保留合理数量的条目的话,则该结构将增长得太大,或者它具有太少条目以至于当其条目满了的时候线程可能饥饿。
在有些实施例中,分支目标阵列(BTA)390可以用于方便由分支执行单元对CTI预测目标的访问。BTA390可以位于分支单元380中或者内核100中其它地方。出于以下所述的原因,在有些实施例中,BTA390可以具有2至128个条目,以方便对BTA390中条目的访问。在一种特定的实施例中,BTA有32个条目。如前面所指出的,在处理器10的有些实现中,只有某些CTI可能关于预测目标是否正确而具有不确定性(例如,其目标跨越8K页面边界的那些指令),而其它CTI可能具有可以明确确定的目标。换种方式说,在到达处理器的执行阶段之前,被明确确定的CTI目标在由分支预测器和指令提取单元预测时就知道是正确的。出于各种原因,在其它实施例中,预测目标可能或者可能不能明确确定。在有些实施例中,BTA条目只分配给具有“预测”目标(即,在预测时不能明确确定的目标)的那些CTI。在有些情况下,所有CTI都可能具有预测的目标。
在有些实施例中,BTA条目可以动态分配给处理器10上执行的多个线程中的任意一个。在一种实施例中,当它预测CTI时(即,遇到其目标不能明确确定的CTI,诸如当存在对跨8K页面边界的CTI目标的预测时),分支预测单元385把一个条目分配到BTA390中。在其它实施例中,BTA条目可以被分配用于任何CTI指令。当分配一个条目时,标签可以用于识别该条目(例如,5位的标签可以用于识别32个条目的BTA中的一个条目)。条目数从2到128变化的BTA需要从1位到7位变化的标签来唯一地识别所有BTA条目。在有些实施例中,可以使用包含范围在2至128的多个条目的BTA,以保持标签尺寸相对于所存储的目标地址的尺寸是小的。对应于所分配条目的标签可以连同CTI一起通过处理器流水线传递到分支执行单元395。管道化标签和指令自动地处理线程之间CTI的乱序处理,因为预测的目标是可以利用标签访问的,而不管CTI的次序如何。在执行时,分支执行单元395可以使用连同CTI一起传递的标签来从BTA中指示的条目读取预测的目标。然后,分支执行单元395配置为比较预测目标与实际目标。因而,BTA可以提供允许分支执行单元访问用于给定CTI的预测目标的低成本机制。
现在转向图4,示出了BTA390的具体实施例。BTA390可以包括用于存储预测目标地址的多个条目412a-412n。分支执行单元395可以连同标签430一起接收CTI425(标签可能已经被分支预测单元385或者某个其它处理器元件与CTI关联)。在所说明的实施例中,标签用于索引到BTA390中,以便检索对应于CTI的所存储的预测目标地址。使用标签在BTA中定位条目的其它方法是预期的。BTA390可以对每个条目使用一位或者其它手段来指示该条目是否可用于分配或者在使用中。当从BTA390检测到预测目标地址时,指示器可以变成显示对应的条目不再被使用,或者可以使用其它手段来指示可用的条目。在有些实施例中,BTA条目可以在活动的线程当中静态分配。这种布置考虑到了服务的质量并且防止一个线程“扰乱”BTA并且因此不利地影响其它线程的性能。
现在转向图5,示出了说明利用BTA的一种实施例的方法500的流程图。用于CTI的预测目标地址存储在BTA中(方框510)。对应于该目标地址在BTA中的位置的标签被生成,并且与该CTI关联(方框515)。计算该CTI的实际目标地址(方框520)。利用标签从BTA检索预测的目标地址(方框525)。比较预测目标地址与实际目标地址(方框530)。因为只有标签的位随CTI一起传递,所以方法500的使用防止把整个预测目标地址都沿着处理器流水线向下传递。
现在转向图6,示出了方法600的流程图,方法600是利用BTA的另一种实施例。预测CTI方向与目标(方框605)。在各种实施例中,这种预测可以由指令提取单元和/或分支预测单元执行。如前面所讨论的,有些目标预测可以在执行之前被明确确定(相对于跨页面边界或者在预测时以别的方式依赖于不可用信息或不完整指令的目标预测)。如果目标被明确确定(如在决定方框610所确定的),则处理器可以继续处理器流水线中指令的执行,至少直到确定预测方向是否正确。如果预测目标没有明确确定(例如,跨8K页面边界的目标),则预测目标存储在BTA中(方框615)。对应于该BTA条目的标签与CTI关联(方框620)。这种关联在各种实施例中可以采取不同的形式。例如,CTI或流水线元件的位可以为标签保留。然后,如前面所描述的那样,CTI沿指令流水线向下传递(这可以包括选择单元210、解码单元215、重命名单元220、拣取单元225和/或发布单元230)。在流水线中的某个点,从BTA检索预测目标并且计算实际目标地址(方框630)。如果实际目标与检索出的预测目标匹配,则处理器可以继续执行流水线中的指令(方框645)。如果预测目标与实际目标不匹配,则处理器可以清洗流水线中不正确的推测路径上该CTI后面所有更年轻的指令(方框640)。更年轻的指令对应于按程序次序跟在该CTI之后(并且在该CTI之后提取)的指令,这些指令可能或者可能不能在乱序处理器中在该CTI之前执行。
在一种实施例中,BTA可以是统一的,从而允许其有限的资源根据需要在线程之间动态且并发地分配。因而,当内核以单线程模式运行时,可以使所有条目都让那个线程获得。在有些体系架构中,具有预测目标的CTI(例如,具有跨8K页面边界的目标的那些)可能是非常罕见的,因此对于在八个线程上运行的大多数应用来说,32条目的BTA就足够了。在其中一个线程具有不寻常的大量预测目标的罕见情况下,如果其它线程碰巧具有较少的预测目标,则在多个线程之间动态分配目标阵列条目的能力可以提供更好的性能。在多个线程可能具有大量预测目标的实施例中,BTA可以动态调整大小,以便包含适当数量的条目。
示例性系统实施例
如上所述,在有些实施例中,图1的处理器10可以配置为与多个外部设备接口。包括处理器10的系统700的一种实施例在图7中说明。在所说明的实施例中,系统700包括耦合到系统存储器710、外围存储设备720和引导设备730的处理器10的实例,示为处理器10a。系统700耦合到网络740,网络740又耦合到另一个计算机系统750。在有些实施例中,系统700可以包括所示设备的多于一个实例。在各种实施例中,系统700可以配置为可机架安装的服务器系统、独立系统或者以任何其它合适的形式因子。在有些实施例中,系统700可以配置为客户端系统而不是服务器系统。
在有些实施例中,系统700可以配置为多处理器系统,其中处理器10a可以可选地耦合到处理器10的一个或多个其它实例,在图10中示为处理器10b。例如,处理器10a-b可以耦合成经它们各自的一致处理器接口160通信。
在各种实施例中,系统存储器710可以包括如上所述任何合适类型的系统存储器,诸如FB-DIMM、DDR/DDR2/DDR3/DDR4SDRAM、闪存存储器及各种类型的ROM等。在提供多个存储器接口130的处理器10的实施例中,系统存储器710可以包括由离散存储器接口控制的离散的多排存储器。并且,在有些实施例中,系统存储器710可以包括多种不同类型的存储器。
在各种实施例中,外围存储设备720可以包括对磁、光或固态存储介质的支持,诸如硬驱、光盘、非易失性RAM设备等。在有些实施例中,外围存储设备720可以包括更复杂的存储设备,诸如盘阵列或存储区域网络(SAN),其中SAN可以经标准的小型计算机系统接口(SCSI)、光纤通道接口、(IEEE1394)接口或者另一种合适的接口耦合到处理器10。此外,在其它实施例中,预期任何合适的外围设备,诸如多媒体设备、图形/显示设备、标准输入/输出设备等,都可以耦合到处理器10。在一种实施例中,外围存储设备720可以经图1的外围设备接口150耦合到处理器10。
如前面所描述的,在一种实施例中,引导设备730可以包括配置为,诸如从上电复位状态,协调处理器10的初始化和引导的设备,诸如FPGA或ASIC。此外,在有些实施例中,引导设备730可以包括配置为允许对管理功能,诸如处理器10的调试或测试模式,进行访问的辅助计算机系统。
例如,网络740可以包括用于互连计算机系统的任何合适的设备、介质和/或协议,诸如有线或无线以太网。在各种实施例中,网络740可以包括局域网(LAN)、广域网(WAN)、电信网络或者其它合适类型的网络。在有些实施例中,计算机系统750的配置可以与所说明的系统700类似或者完全相同,而在其它实施例中,计算机系统750可以基本上不同地配置。例如,计算机系统750可以是服务器系统、基于处理器的客户端系统、无状态“瘦”客户端系统、移动设备等。在有些实施例中,处理器10可以配置为经图1的网络接口160与网络740通信。
虽然以上已经描述了具体的实施例,但是,这些实施例也不是要限定本公开内容的范围,即便关于特定的特征只描述了单个实施例。除非另外声明,否则本公开内容中提供的特征的例子旨在是说明性的而不是约束性的。以上描述旨在覆盖对受益于本公开内容的本领域技术人员显而易见的此类替换例、修改例和等同例。
本公开内容的范围包括本文所公开的任何特征或特征的组合(明确地或者隐含地),或者其任何一般化,不管它是否减轻了本文要解决的问题中的任何一个或全部。相应地,对于特征的任何此类组合,可以在本申请(或者要求其优先权的申请)审查期间形成新的权利要求。特别地,参考所附权利要求,来自从属权利要求的特征可以与独立权利要求的那些特征组合,并且来自各自独立权利要求的特征可以按任何适当的方式组合而不仅仅是以所附权利要求中列举中的具体组合。

Claims (17)

1.一种用于控制转移指令CTI的处理的装置,包括:
指令提取单元,配置为提取包括第一CTI的指令;
分支预测单元,配置为为CTI生成预测目标地址,其中,所述预测目标地址中的一个或多个是明确地确定的,并且所述预测目标地址中的一个或多个不是明确地确定的;以及
具有多个条目的分支目标阵列;
其中,所述装置被配置为:
响应于确定第一CTI的预测目标地址不是明确地确定的,将第一CTI的预测目标地址存储在分支目标阵列的条目中并将可用于访问该条目的标签与第一CTI相关联,
执行第一CTI来确定实际目标地址;
使用所述标签来检索第一CTI的预测目标地址并将第一CTI的预测目标地址与该实际目标地址比较来确定第一CTI的预测目标地址是否被正确地预测;
其中,所述装置被配置为仅为其预测目标地址不是明确地确定的CTI存储预测目标地址。
2.如权利要求1所述的装置,其中所述标签的位数小于所述预测目标地址的位数。
3.如权利要求1所述的装置,其中该装置配置为响应于确定第一CTI的预测目标地址与该实际目标地址不匹配而清洗流水线中的一个或多个指令。
4.如权利要求1所述的装置,其中,所述装置被配置为基于确定第一CTI的预测目标地址跨页面边界而确定第一CTI的预测目标地址不是明确地确定的。
5.如权利要求1所述的装置,其中该装置配置为支持指令的乱序执行,并且其中该装置配置为支持多个线程。
6.如权利要求5所述的装置,其中该装置配置为对所述多个线程中的任意一个分配所述多个条目中的任意一个。
7.如权利要求5所述的装置,其中该装置配置为对所述多个线程中的一个或多个静态分配所述多个条目的至少一部分。
8.如权利要求1所述的装置,其中第一CTI的预测目标地址是具有至少32位的虚拟地址,并且其中分支目标阵列具有2至128个条目。
9.如权利要求1所述的装置,其中第一CTI的预测目标地址跨页面边界。
10.一种用于控制转移指令的处理的装置,包括:
分支执行单元;
分支目标阵列;以及
分支预测单元,被配置为为控制转移指令生成预测目标地址;
其中,所述装置被配置为响应于该预测目标地址跨页面边界而将标签与控制转移指令相关联并且将该预测目标地址存储在分支目标阵列中由该标签指示的位置处;
其中分支执行单元配置为确定用于控制转移指令的实际目标地址,使用标签从分支目标阵列中检索预测目标地址,以及比较预测目标地址与实际目标地址。
11.如权利要求10所述的装置,其中所述装置进一步配置为响应于确定实际目标地址与预测目标地址不匹配而清洗不正确的推测路径上的更年轻的指令,其中不正确的推测路径是由该装置基于预测目标地址提取的,其中更年轻的指令按程序次序跟在该控制转移指令后面。
12.如权利要求10所述的装置,还包括具有多个阶段的执行流水线,其中,在到达分支执行单元之前,标签连同控制转移指令一起传递通过所述多个阶段。
13.一种用于控制转移指令的处理的方法,包括:
由处理器为控制转移指令预测目标地址;
确定预测目标地址不是明确地确定的;
响应于确定预测目标地址不是明确地确定的,在分支目标阵列的一个条目中存储预测目标地址,其中分支目标阵列包括多个条目;
处理器把标签与控制转移指令关联,其中条目是可利用该标签访问的;
执行控制转移指令来确定实际目标地址;
处理器使用标签从条目中检索预测目标地址;以及
处理器比较预测目标地址和实际目标地址。
14.如权利要求13所述的方法,其中分支目标阵列配置为存储来自多个处理器线程的控制转移指令的预测目标地址。
15.如权利要求13所述的方法,其中预测目标地址是虚拟地址,并且所述确定预测目标地址不是明确地确定的步骤是基于预测目标地址跨页面边界的确定结果。
16.如权利要求13所述的方法,其中标签是条目在分支目标阵列中的索引,并且标签的位数小于预测目标地址的位数。
17.如权利要求13所述的方法,还包括响应于确定实际目标地址与预测目标地址不同而清洗处理器流水线中的一条或多条指令。
CN201280031316.6A 2011-05-13 2012-05-14 乱序处理器中的分支目标存储与检索 Active CN103635877B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161485905P 2011-05-13 2011-05-13
US61/485,905 2011-05-13
US13/228,347 2011-09-08
US13/228,347 US8886920B2 (en) 2011-05-13 2011-09-08 Associating tag to branch instruction to access array storing predicted target addresses for page crossing targets for comparison with resolved address at execution stage
PCT/US2012/037807 WO2012158629A1 (en) 2011-05-13 2012-05-14 Branch target storage and retrieval in an out-of-order processor

Publications (2)

Publication Number Publication Date
CN103635877A CN103635877A (zh) 2014-03-12
CN103635877B true CN103635877B (zh) 2016-08-31

Family

ID=47142688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280031316.6A Active CN103635877B (zh) 2011-05-13 2012-05-14 乱序处理器中的分支目标存储与检索

Country Status (4)

Country Link
US (1) US8886920B2 (zh)
EP (1) EP2707792B1 (zh)
CN (1) CN103635877B (zh)
WO (1) WO2012158629A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10331891B2 (en) * 2012-02-06 2019-06-25 Microsoft Technology Licensing, Llc Branch target computation in secure start-up using an integrity datum and an adjustment datum
US9804969B2 (en) * 2012-12-20 2017-10-31 Qualcomm Incorporated Speculative addressing using a virtual address-to-physical address page crossing buffer
US9489204B2 (en) * 2013-03-15 2016-11-08 Qualcomm Incorporated Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process
US9626279B2 (en) 2013-07-01 2017-04-18 Nxp Usa, Inc. Debug method and device for providing indexed trace messages
US9626280B2 (en) * 2013-07-01 2017-04-18 Nxp Usa, Inc. Debug method and device for handling exceptions and interrupts
US20160011876A1 (en) * 2014-07-11 2016-01-14 Cavium, Inc. Managing instruction order in a processor pipeline
US9483272B2 (en) * 2014-09-30 2016-11-01 Freescale Semiconductor, Inc. Systems and methods for managing return stacks in a multi-threaded data processing system
CN105138309B (zh) * 2015-07-09 2018-07-17 西安交通大学 基于cmp的推测多线程机制下的多推测路径线程划分方法
US10423330B2 (en) * 2015-07-29 2019-09-24 International Business Machines Corporation Data collection in a multi-threaded processor
CN108134691B (zh) * 2017-12-18 2019-10-01 Oppo广东移动通信有限公司 模型构建方法、网络资源预加载方法、装置、介质及终端
US10740104B2 (en) * 2018-08-16 2020-08-11 International Business Machines Corporation Tagging target branch predictors with context with index modification and late stop fetch on tag mismatch
CN110780925B (zh) * 2019-09-02 2021-11-16 芯创智(北京)微电子有限公司 一种指令流水线的预译码系统及方法
CN115113934B (zh) * 2022-08-31 2022-11-11 腾讯科技(深圳)有限公司 指令处理方法、装置、程序产品、计算机设备和介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1196522A (zh) * 1997-03-26 1998-10-21 国际商业机器公司 带转移模式字段的转移历史表
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5265213A (en) * 1990-12-10 1993-11-23 Intel Corporation Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction
JP3637920B2 (ja) 1992-05-01 2005-04-13 セイコーエプソン株式会社 スーパースケーラマイクロプロセサに於て命令をリタイアさせるシステム及び方法
US5442756A (en) * 1992-07-31 1995-08-15 Intel Corporation Branch prediction and resolution apparatus for a superscalar computer processor
US5586278A (en) 1994-03-01 1996-12-17 Intel Corporation Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor
US6721876B1 (en) * 2000-05-25 2004-04-13 Advanced Micro Devices, Inc. Branch predictor index generation using varied bit positions or bit order reversal
US6678815B1 (en) * 2000-06-27 2004-01-13 Intel Corporation Apparatus and method for reducing power consumption due to cache and TLB accesses in a processor front-end
US6785804B2 (en) 2001-05-17 2004-08-31 Broadcom Corporation Use of tags to cancel a conditional branch delay slot instruction
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
US7120784B2 (en) 2003-04-28 2006-10-10 International Business Machines Corporation Thread-specific branch prediction by logically splitting branch history tables and predicted target address cache in a simultaneous multithreading processing environment
US7363477B2 (en) 2003-12-03 2008-04-22 Intel Corporation Method and apparatus to reduce misprediction penalty by exploiting exact convergence
US7152155B2 (en) 2005-02-18 2006-12-19 Qualcomm Incorporated System and method of correcting a branch misprediction
US7949861B2 (en) 2005-06-10 2011-05-24 Qualcomm Incorporated Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline
US7711934B2 (en) 2005-10-31 2010-05-04 Mips Technologies, Inc. Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US7624254B2 (en) 2007-01-24 2009-11-24 Qualcomm Incorporated Segmented pipeline flushing for mispredicted branches
US8281110B2 (en) * 2009-07-15 2012-10-02 Via Technologies, Inc. Out-of-order microprocessor with separate branch information circular queue table tagged by branch instructions in reorder buffer to reduce unnecessary space in buffer
US8667258B2 (en) * 2010-06-23 2014-03-04 International Business Machines Corporation High performance cache translation look-aside buffer (TLB) lookups using multiple page size prediction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1196522A (zh) * 1997-03-26 1998-10-21 国际商业机器公司 带转移模式字段的转移历史表
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching

Also Published As

Publication number Publication date
EP2707792A1 (en) 2014-03-19
US20120290817A1 (en) 2012-11-15
EP2707792B1 (en) 2018-10-24
CN103635877A (zh) 2014-03-12
US8886920B2 (en) 2014-11-11
WO2012158629A1 (en) 2012-11-22

Similar Documents

Publication Publication Date Title
CN103635877B (zh) 乱序处理器中的分支目标存储与检索
CN103620555B (zh) 抑制不正确的推测性执行路径上的控制转移指令
US9122487B2 (en) System and method for balancing instruction loads between multiple execution units using assignment history
Ghose et al. Enabling the adoption of processing-in-memory: Challenges, mechanisms, future research directions
US8516196B2 (en) Resource sharing to reduce implementation costs in a multicore processor
US8832415B2 (en) Mapping virtual addresses to different physical addresses for value disambiguation for thread memory access requests
US9690625B2 (en) System and method for out-of-order resource allocation and deallocation in a threaded machine
US8429386B2 (en) Dynamic tag allocation in a multithreaded out-of-order processor
US8904156B2 (en) Perceptron-based branch prediction mechanism for predicting conditional branch instructions on a multithreaded processor
US8335912B2 (en) Logical map table for detecting dependency conditions between instructions having varying width operand values
US8595744B2 (en) Anticipatory helper thread based code execution
US10338928B2 (en) Utilizing a stack head register with a call return stack for each instruction fetch
US20130024647A1 (en) Cache backed vector registers
CN102640124A (zh) 用于数据流的储存感知预取
CN103197953A (zh) 推测执行和回滚
CN108710582A (zh) 用于基于局部性的指令处理的选择性启用的系统、设备和方法
US11188341B2 (en) System, apparatus and method for symbolic store address generation for data-parallel processor
US10896141B2 (en) Gather-scatter cache architecture having plurality of tag and data banks and arbiter for single program multiple data (SPMD) processor
US9507656B2 (en) Mechanism for handling unfused multiply-accumulate accrued exception bits in a processor
CN106415483A (zh) 具有对可变长度数的支持的浮点单元
US9304767B2 (en) Single cycle data movement between general purpose and floating-point registers
Dublish Managing the memory hierarchy in GPUs
US20200019405A1 (en) Multiple Level History Buffer for Transaction Memory Support
Ghose Criticality-Aware Memory Systems

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant