CN104335168A - 分支预测预加载 - Google Patents
分支预测预加载 Download PDFInfo
- Publication number
- CN104335168A CN104335168A CN201380028320.1A CN201380028320A CN104335168A CN 104335168 A CN104335168 A CN 104335168A CN 201380028320 A CN201380028320 A CN 201380028320A CN 104335168 A CN104335168 A CN 104335168A
- Authority
- CN
- China
- Prior art keywords
- branch
- instruction
- address
- predicting
- instructions
- 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.)
- Granted
Links
- 230000036316 preload Effects 0.000 claims abstract description 73
- 238000000034 method Methods 0.000 claims abstract description 54
- 239000000872 buffer Substances 0.000 claims abstract description 42
- 238000004590 computer program Methods 0.000 claims description 28
- 238000006073 displacement reaction Methods 0.000 claims description 18
- 239000000284 extract Substances 0.000 claims description 12
- 238000012545 processing Methods 0.000 abstract description 17
- 230000006870 function Effects 0.000 description 29
- 238000004088 simulation Methods 0.000 description 26
- 238000010586 diagram Methods 0.000 description 21
- 238000003860 storage Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 14
- 230000033228 biological regulation Effects 0.000 description 9
- 238000013519 translation Methods 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000007774 longterm Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 230000005291 magnetic effect Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- VIKNJXKGJWUCNN-XGXHKTLJSA-N norethisterone Chemical compound O=C1CC[C@@H]2[C@H]3CC[C@](C)([C@](CC4)(O)C#C)[C@@H]4[C@@H]3CCC2=C1 VIKNJXKGJWUCNN-XGXHKTLJSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
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)
Abstract
实施例涉及分支预测预加载。一个方面包括用于分支预测预加载的系统。该系统包括:耦接到处理电路的指令高速缓存和分支目标缓冲器(BTB),配置该处理电路以执行方法。该方法包括:从指令高速缓存提取指令流中的多个指令;以及对指令流中的分支预测预加载指令解码。根据分支预测预加载指令,确定预测分支指令的地址。根据分支预测预加载指令,确定预测目标地址;在分支预测预加载指令中识别掩蔽字段;以及根据该掩蔽字段,确定分支指令长度。根据执行分支预测预加载指令,向BTB预加载预测分支指令的地址、分支指令长度、分支类型和预测目标地址。
Description
技术领域
本发明总的来说涉及计算机处理系统,并且更具体地涉及分支预测预加载。
背景技术
计算机处理器中的指令流水线通过利用大量流水线阶段处理指令,改善指令执行吞吐量,其中多个阶段能够并行作用于指令流中的不同指令。如果在流水线的指令提取阶段提取下一个指令之前,处理器等待直到在流水线的执行阶段消解条件分支指令为止,则指令流中的该条件分支指令可能导致流水线停滞。分支预测器可以尝试推测是否取条件分支。分支预测器还可以包括分支目标预测,该分支目标预测尝试在通过解码和执行指令本身来计算其之前,推测所取条件分支或者无条件分支的目标。分支目标可以通过寄存器的基于偏移量和/或者间接引用的计算地址。
分支目标缓冲器(BTB)能够用于根据分支指令的地址预测的所取的分支指令的目标。预测分支指令的目标通过不等待分支指令到达流水线的执行阶段以计算分支目标地址而能够防止流水线停滞。通过执行分支目标预测,可以在该周期或者分支指令之后的周期,代替在分支指令与预测的所取的分支指令的目标之间具有多个气泡/空周期,执行分支的目标指令解码。可以包括在BTB中的或者独立实现的其他分支预测分量包括分支历史表和模式历史表。分支历史表能够作为分支地址的函数地预测分支(取与不取)的方向。模式历史表能够支持作为所遇到的引导到要预测的给定分支的分支的模式的函数的分支的方向预测。
发明内容
实施例包括用于分支预测预加载的系统、方法以及计算机程序产品。用于分支预测预加载的系统包括:耦接到处理电路的指令高速缓存和分支目标缓冲器。配置该处理电路以执行方法。该方法包括:从指令高速缓存提取指令流中的多个指令;以及对指令流中的分支预测预加载指令解码。该方法还包括:由处理电路,根据分支预测预加载指令,确定预测分支指令的地址;以及由处理电路,根据分支预测预加载指令,确定预测分支指令的预测目标地址。该方法还包括:识别分支预测预加载指令中的掩蔽字段;以及由处理电路,根据该掩蔽字段,确定预测分支指令的分支指令长度。根据执行分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关联的预测目标地址。
用于分支预测预加载的方法包括:提取指令流中的多个指令;以及对指令流中的分支预测预加载指令解码。该方法还包括:由处理电路,根据分支预测预加载指令,确定预测分支指令的地址;以及由处理电路,根据分支预测预加载指令,确定预测分支指令的预测目标地址。该方法还包括:识别分支预测预加载指令中的掩蔽字段;以及由处理电路,根据该掩蔽字段,确定预测分支指令的分支指令长度。根据执行分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关联的预测目标地址。
计算机程序产品包括有形存储介质,可由处理电路读取该有形存储介质,并且该有形存储介质存储用于由处理电路执行方法而执行的指令。该方法包括:提取指令流中的多个指令;以及对指令流中的分支预测预加载指令解码。该方法还包括:由处理电路,根据分支预测预加载指令,确定预测分支指令的地址;以及由处理电路,根据分支预测预加载指令,确定预测分支指令的预测目标地址。该方法还包括:识别分支预测预加载指令中的掩蔽字段;以及由处理电路,根据该掩蔽字段,确定预测分支指令的分支指令长度。根据执行分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关联的预测目标地址。
附图说明
在概括说明中特别指出并且在权利要求书中明确要求保护本发明的主题。根据下面结合附图所做的详细描述,本实施例的上述以及其他特征和优点显而易见,其中:
图1A是示出实施例中的典型主计算机系统的示意图;
图1B是示出实施例中的典型模拟主计算机系统的示意图;
图1C是示出实施例中的典型计算机系统的示意图;
图2是示出实施例中的典型计算机网络的示意图;
图3是示出实施例中的计算机系统的元件的示意图;
图4A-4C是示出实施例中的计算机系统的详细元件;
图5示出根据实施例的用于分支预测预加载指令的指令格式;
图6示出根据实施例的用于分支预测预加载指令的另一指令格式;
图7示出根据实施例的用于分支预测预加载的处理流程;以及
图8示出根据实施例的计算机程序产品。
具体实施方式
典型实施例使能分支预测预加载。在代码重复执行并且突遇分支时,通常随着时间推移学习分支预测,将仅通过解码处理知晓的那些分支安装在分支目标缓冲器(BTB)中。一旦BTB填有指出分支地址、目标地址和方向信息,例如取与未取的项,因为在消解了分支预测后,对BTB进行更新,所以预测准确性升高。典型实施例利用分支预测预加载指令提供分支预测预加载,使得在取相关联的分支之前,能够将分支指令地址和目标地址插入BTB中。当写软件或者编译软件时,能够分析代码,以寻找分支指令。能够将分支预测预加载指令附加到分支前面的代码,使得可以准确预测后续分支,并且避免突遇分支(surprise branch)。避免突遇分支缩短了流水线停滞,否则可能发生流水线停滞而同时等待要消解的突遇分支。因为非预加载的内容的准确性和命中率初始确定BTB的大小,所以实际上,在基本上保持相同性能的情况下,可以物理地减小利用分支预测预加载指令填入的BTB的大小。例如,与不支持分支预测预加载指令的BTB相比,可以使用分支预测预加载指令以4:1的比例缩小BTB的大小。
图1A示出实施例中的主计算机系统50的代表性部件。在计算机系统中也可以采用其他部件布置。说明性主计算机系统50包括与主存储设备(计算机存储器)2通信的一个或者多个处理器1和到存储装置11和网络10以用于与其他计算机或者存储区域网络(SAN)等通信的I/O接口。处理器1依照具有架构指令集和架构功能性的架构。处理器1可以具有动态地址转换(DAT)3,用于将程序地址(虚拟地址)转换为存储器内的实际地址。DAT3通常包括用于高速缓存转换的转换备用缓冲器(TLB)7,使得之后对计算机存储器2的块的存取不需要地址转换的延迟。通常,在计算机存储器2与处理器1之间采用高速缓存9。高速缓存9可以是分层结构的,具有对一个以上CPU可用的大高速缓存和位于大高速缓存与每个CPU之间的小型快速(低级)高速缓存。在一些实施例中,划分低级高速缓存,以提供分离低级高速缓存,用于指令提取和数据存取。在实施例中,由指令提取单元4通过高速缓存9从计算机存储器2提取指令。指令在指令解码单元6中解码并且被分派到(在一些实施例中与其他指令一起)指令执行单元8。通常,采用几个指令执行单元8,例如,算术执行单元、浮点执行单元以及分支指令执行单元。在需要时,由指令执行单元8执行指令,从指令专用寄存器或者计算机存储器2存取操作数。如果从计算机存储器2存取(加载或者存储)操作数,则负荷存储单元5通常在被执行的指令的控制下处理存取。指令可以在硬件电路或者在内部微码(固件)中执行,或者由二者的组合执行。
在图1B中,示出了模拟主计算机系统21,假定该模拟主计算机系统21模拟主架构的主计算机系统,诸如图1所示的主计算机系统50。在模拟主计算机系统21中,主处理器(CPU)1是模拟主处理器(或者虚拟主处理器)29,并且包括本机处理器27,该本机处理器27与主计算机系统50的处理器1具有不同的本机指令集架构。模拟主计算机系统21具有本机处理器27可访问的存储器22。在实施例中,将存储器22划分为计算机存储器2部分和模拟例程存储器23部分。根据主计算机架构,计算机存储器2可用于模拟主计算机系统21的程序。本机处理器27执行模拟处理器29的架构以外的架构的架构指令集的本机指令、从模拟例程存储器23获得的本机指令,并且通过采用在序列和存取/解码例程中获得的一个或者多个指令,可以在计算机存储器2中从程序存取用于执行的主指令,序列和存取/解码例程可以解码所存取的(各)主指令,以确定用于模拟所存取的主指令的功能的本机指令执行例程。例如,包括诸如通用寄存器、控制寄存器、动态地址转换以及输入/输出(I/O)子系统支持和处理器高速缓存的设施的架构设施例程可模拟限定用于主计算机系统50架构的其他设施。模拟例程还可以利用本机处理器27中可用的功能(诸如通用寄存器和虚拟地址的动态转换),以改善模拟例程的性能。还可以设置专用硬件和卸载引擎,以支持本机处理器27模拟主计算机系统50的功能。
在大型计算机中,由例如通常作为即时编译应用程序的编程器的编程器使用架构机器指令。自然,在z/架构IBM服务器或者替代地在执行其他架构的机器中可以执行存储在存储介质中的这些指令。在现有的和未来的IBM大型机服务器中和IBM的其他机器(例如,服务器和服务器)中能够模拟它们。在采用AMDTM、Oracle等制造的硬件的各种机器上,可以在运行Linux的机器中执行它们。除了在下的硬件上执行外,Linux也可以用作使用通过Hercules,UMX,FundamentalSoftware,Inc.(FSI)或者Platform Solutions,Inc.(PSI)的模拟的机器,通常在模拟模式下执行。在模拟模式下,本机处理器执行模拟软件,以模拟模拟处理器的架构。
“z/Architecture Principles of Operation”,Publication No.SA22-7832-08,第9版,2010年8月中进一步描述了模拟主计算机系统21的一个或者多个部件,在此通过引用合并该文献的全部内容。IBM是美国纽约州的阿蒙克市的国际商用机器公司的注册商标。在此使用的其他名字可以是国际商用机器公司或者其他公司的注册商标、商标或者产品名称。
本机处理器27通常执行存储在包括固件或者本机操作系统的模拟例程存储器23内的模拟软件,以执行模拟处理器的模拟。模拟软件负责提取和执行模拟处理器架构的指令。模拟软件保持模拟程序计数器,从而保持指令边界的跟踪。模拟软件一次可以提取一个或者多个模拟机器指令,并且将该一个或者多个模拟机器指令变换为相应的一组本机机器指令,供本机处理器27执行。可以高速缓存这些变换的指令,使得能够执行更快的变换。模拟软件保持模拟处理器架构的架构规则,以保证对模拟处理器写入的操作系统和应用程序正确运行。此外,模拟软件提供包括但并不局限于:控制寄存器、通用寄存器、浮点寄存器、例如包括分段表和页表的动态地址转换功能、中断机构、上下文切换机构、每日时间(TOD)时钟和到I/O系统的架构接口的模拟处理器架构识别的资源,使得为了运行于模拟处理器29上设计的操作系统或者应用程序能够运行于具有模拟软件的本机处理器27上。
对正模拟的特定指令解码,并且调用子例程,以执行各指令的功能。在理解了优选实施例的描述后,本技术领域内的技术人员明白,例如在“C”子例程或者驱动器中或者在对特定软件提供驱动器的某个其他方法中执行模拟模拟处理器29的功能的模拟软件功能。
实施例可以由软件实施(有时称为许可内码、固件、微码、毫码(milli-code)、微微码(pico-code)等,它们中的任何一个都符合实施例)。参考图1A,由也已知为主计算机系统50的CPU(中央处理单元)的处理器从诸如长期存储介质、CD-ROM驱动器、磁带驱动器或者硬盘驱动器的存储装置11存取软件程序代码。可以将软件程序代码具体表现在任何类型的各种介质上,与诸如磁盘、硬盘驱动器、CD-ROM、蓝光光盘或者通用串行总线(USB)闪速驱动器的数据处理系统一起使用。通过到其他计算机系统的网络10,可以将代码从一个计算机系统的计算机存储器2或者存储设备分布在这种介质上,或者分布到用户,供该其他系统的用户使用。
作为选择地,可以将程序代码具体表现在计算机系统2中,并且利用处理器总线(未示出)由处理器1存取程序代码。该程序代码包括操作系统,该操作系统控制各种计算机部件和一个或者多个应用程序的功能和交互。通常将程序代码从诸如存储装置11的致密介质寻呼到计算机存储器2,在计算机存储器2中,该程序代码可用于由处理器1执行。将软件程序代码具体表现在存储器中、在物理介质上和/或者通过网络的分布软件代码的技术和方法众所周知,并且在此不做进一步讨论。在包括但并不局限于电子存储器模块(RAM)、闪速存储器、压缩光盘(CD)、DVD、磁带等的有形介质上创建并且存储程序代码时,通常将程序代码称为“计算机程序产品”。通常,优选地位于计算机系统中的处理电路可读取计算机程序产品介质从而由该处理电路执行。
图1C示出典型实施例中的说明性工作站或者服务器硬件系统。图1C的系统100包括含有可选外围设备的说明性基本计算机系统101,诸如个人计算机、工作站或者服务器。基本计算机系统101包括一个或者多个处理器106和总线,根据公知技术,利用总线在一个或者多个处理器106与基本计算机系统101的其他部件之间进行连接并且使能通信。总线将处理器106连接到存储器105和长期存储设备107,例如,该长期存储设备107可以包括硬盘驱动器(例如包括磁介质、CD、DVD和闪速存储器中的任何一个)或者磁带驱动器。基本计算机系统101还可以包括用户接口适配器,通过总线,用户接口适配器将一个或者多个处理器104连接到一个或者多个接口装置,诸如键盘104、鼠标103、打印机/扫描仪110和/或者其他接口装置,该其他接口装置可以是任何用户接口装置,诸如触摸屏、数字输入小键盘等。总线还通过显示适配器将一个或者多个处理器连接到显示装置102,诸如LCD屏幕或者监视器。
基本计算机系统101可以通过能够与网络109通信108的网络适配器与其他计算机或者计算机的网络通信。典型网络适配器是通信信道、令牌环、以太网或者调制解调器。作为选择,基本计算机系统101可以利用诸如蜂窝数字分组数据(CDPD)卡的无线接口进行通信。基本计算机系统101可以与局域网(LAN)或者广域网(WAN)内的该其他计算机相关联,在具有另一计算机等的客户机/服务器布置中,基本计算机系统101也可以是客户机。
图2示出可以实施实施例的数据处理网络200。数据处理网络200可以包括多个单独网络,诸如无线网和有线网,无线网和有线网中的每个都可以包括多个单独工作站201、202、203、204和/或者图1C的基本计算机系统101。此外,本技术领域内的技术人员明白,可以包括一个或者多个LAN,其中LAN可以包括耦接到主处理器的多个智能工作站。
利用处理器总线,可以将编程代码111具体表现在存储器105中,并且由处理器106存取该编程代码111。该编程代码包括操作系统,该操作系统控制各种计算机部件和一个或者多个应用程序112的功能和交互。通常,将程序代码从长期存储设备107寻呼到高速存储器105,在高速存储器105内,处理器106可以处理该程序代码。还可以将处理器106称为处理电路106。用于将软件编程代码具体表现在计算机内,物理介质上和/或者通过网络分布软件代码的技术和方法众所周知,并且在此不做进一步讨论。在包括但并不局限于电子存储器模块(RAM)、闪速存储器、压缩光盘(CD)、DVD、磁带等的有形介质上创建并且存储程序代码时,通常将程序代码称为“计算机程序产品”。通常,优选地位于计算机系统中的处理电路可以读取计算机程序产品介质从而由该处理电路执行。
处理器最容易使用的高速缓存(通常比处理器的其他高速缓存更快并且更小)是最低(L1或者1级)高速缓存,并且主存储器件(主存储器)是最高级高速缓存(如果有3级,则为L3)。通常,将最低级高速缓存划分为:指令高速缓存(I高速缓存),用于保存要执行的机器指令;和数据高速缓存(D高速缓存),用于保存数据操作数。
仍然参考图2,网络还可以包括大型机计算机或者服务器,诸如网关计算机(客户机服务器)206或者应用服务器(远程服务器)208,该网关计算机206和应用服务器208可以访问数据中心库,并且还可以从工作站205直接访问该网关计算机206和应用服务器208。网关计算机206用作到每个网络207中的进入点。当将一个联网协议连接到另一个联网协议时,需要网关。网关计算机206优选地通过通信链路耦连到另一个网络(例如,因特网207)。网关计算机206也可以利用通信链路直接耦连到一个或者多个工作站101、201、203和204。可以利用从国际商业机器公司获得的IBM zEnterprise 196服务器实现网关计算机。
在典型实施例中,基本计算机系统101的处理器106可以从诸如图1C所示的长期存储设备107的长期存储介质存取软件编程代码。可以将软件编程代码具体表现在与数据处理系统一起使用的各种介质中的任何一种介质上,诸如磁盘、硬盘驱动器或者CD-ROM。通过到其他计算机系统的网络,可以将代码从一个计算机系统的存储器或者存储设备分布在这种介质上,或者分布到用户210和211,供该其他系统的用户使用。
参考图3,对处理器106示出典型处理器实施例。为了改善处理器106的性能,对缓冲存储块采用一级或者多级高速缓存303。高速缓存303是保存很可能要使用的存储器数据的高速缓存行的高速缓冲器。典型高速缓存行是64、128或者256字节的存储器数据。在实施例中,采用分开的高速缓存用于高速缓存指令和高速缓存数据。在本技术领域内众所周知,高速缓存一致性(存储器内与高速缓存内行的复本的同步)通常由各种“窥探”算法提供。通常将诸如处理器系统的存储器105的主存储器称为高速缓存。在具有3级高速缓存303的处理器系统中,有时将存储器105称为4级(L4)高速缓存,因为其通常更快并且仅保存计算机系统可用的非易失性存储设备(DASD、磁带等)的一部分。存储器105“高速缓存”操作系统在存储器105之内和之外寻呼的数据页。
程序计数器(指令计数器)311对要执行的当前指令的地址保持跟踪。z/Architecture处理器中的程序计数器是64位的,并且可以将其截断为31位或者24位,以支持先前的寻址限制。通常,将程序计数器具体表现在计算机的程序状态字(PSW)中,使得其在上下文切换期间持续。因此,在进行中具有程序计数器值的程序可能被例如操作系统中断(即,当前上下文从程序环境切换到操作系统环境)。在该程序不活动时,程序的PSW保持该程序计数器值,而在操作系统正在执行时,使用操作系统的(PSW中的)程序计数器。在实施例中,程序计数器递增等于当前指令的字节数的量。在复杂指令集计算(CISC)指令通常具有可变长度时,精简指令集计算(RISC)指令通常是固定长度。IBM z/Architecture的指令是长度为2、4或者6字节的CISC指令。程序计数器311例如由上下文切换操作或者分支指令的分支取操作修改。在上下文切换操作中,将当前程序计数器值与关于正在执行的程序的其他状态信息(诸如条件代码)一起保存在PSW中,并且加载指向要执行的新程序模块的指令的新程序计数器值。通过将分支指令的结果加载到程序计数器311中,执行分支取操作,以允许程序进行判定或者在程序中循环。
在实施例中,利用指令提取单元305代表处理器106提取指令。指令提取单元305或者提取“下一序列指令”,即,分支取指令的目标指令,或者提取上下文切换之后的程序的第一指令。在实施例中,指令提取单元305利用预提取技术根据可以使用预提取指令的可能性推测性地预提取指令。例如,指令提取单元305可以提取16字节的指令,其包括下一顺序指令和进一步的顺序指令的额外字节。
然后,处理器106执行提取的指令。在实施例中,将(各)提取指令送到指令提取单元305的解码/分派单元306。解码/分派单元306解码(各)指令,并且将关于(各)解码指令的信息转发到适当的单元307、308和/或者310。各种单元(阶段)306、307、308、310之间的排序可以以流水线方式执行,以保持使用的单元306、307、308、310较大吞吐量。执行单元307从指令提取单元305接收关于解码算术指令的信息,并将根据该指令的操作代码(操作码)对操作数执行算术运算。将或者来自存储器105、架构寄存器309的,或者来自正在执行的指令的立即字段的操作数提供给执行单元307。当存储时,将执行结果或者存储在存储器105、架构寄存器309中,或者存储在其他机器硬件中(诸如控制寄存器、PSW寄存器等)。
处理器106通常具有一个或者多个单元307、308和310,用于执行指令的功能。参考图4A,执行单元307可以通过接口逻辑407与架构寄存器209、解码/分派单元306、加载/存储单元310以及其他处理单元401通信。执行单元307可以采用几个寄存器电路403、404和405以保存关于其算术逻辑单元(ALU)402将运行的信息。ALU 402执行诸如加、减、乘和除的算术运算和诸如“与”、“或”和“异或(xor)”、旋转以及位移的逻辑函数。在实施例中,ALU支持设计相关的专用运算。其他电路可以提供包括例如条件代码和恢复支持逻辑的其他架构设施408。通常,将ALU运算的结果保存在输出寄存器电路406中,该输出寄存器电路406能够将该结果转发到各种其他处理功能。在其他实施例中,处理单元有多种排列,本说明书仅有意提供用于理解一个实施例的代表性排列。
例如ADD指令将在具有算术和逻辑功能性的执行单元307内执行,而例如浮点指令将在具有专用浮点能力的浮点执行单元(未示出)内执行。优选地,通过关于操作数执行操作码定义函数,执行单元关于指令识别的操作数操作。例如,执行单元307可以关于在由指令的寄存器字段识别的两个架构寄存器309中找到的操作数执行ADD指令。
执行单元307关于两个操作数执行算术加,并且将结果存储在第三操作数中,该第三操作数可以是第三寄存器或者是两个资源寄存器中的一个。执行单元307优选地采用算术逻辑单元(ALU)402,该算术逻辑单元402能够执行诸如位移、旋转和“或”和“异或”的各种逻辑函数以及包括加、减、乘、除中的任何一个的各种代数函数。一些ALU 402设计用于比例运算,而一些用于浮点。在实施例中,根据架构,数据可以是big endian(最不重要字节处于最高字节地址)或者little endian(最不重要字节处于最低字节地址)。IBMz/Architecture是big endian。根据架构,带符号字段可以是符号和大小、1的补码和2的补码。2的补码数的优点在于,ALU不需要设计减能力,因为2的补码的负值或者正值仅要求在ALU内的加。通常以简写方式描述数,其中12位字段定义4,096字节块的地址,并且例如通常将12位字段描述为4K字节(千字节)块。
参考图4B,通常将执行分支指令的分支指令信息发送到分支单元308,利用诸如分支目标缓冲器(BTB)432的结构,分支单元308利用分支预测来在其他条件运算完成之前预测分支的结果。在条件运算完成之前,提取并且推测性地执行当前分支指令的目标。当条件运算完成时,根据条件运算的条件和推测结果,或者完成或者废弃推测性地执行的分支指令。典型分支指令可以测试条件代码,并且如果该条件代码满足分支指令的分支要求,则分支到目标地址,可以根据包括例如指令的寄存器字段中的或者立即字段中的数的几个数,计算目标地址。在实施例中,分支单元308可以采用ALU 426,该ALU 426具有多个输入寄存器电路427、428和429以及输出寄存器电路430。分支单元308可以与例如通用寄存器、解码/分派单元306或者其他电路425通信。
一组指令的执行可能因为各种原因被中断,包括例如操作系统引发的上下文切换、导致上下文切换的程序异常或者错误、导致上下文切换的I/O中断信号或者多个程序的多线程活动(多线程环境下)。在实施例中,上下文切换操作保存关于当前执行程序的状态信息,并且随后加载关于正被调用的另一程序的状态信息。状态信息可以保存在例如硬件寄存器中或者存储器中。状态信息包括指向要执行的下一个指令的程序计数器值、条件代码、存储器转换信息和架构寄存器内容。上下文切换操作可以由硬件电路、应用程序、操作系统程序或者固件代码(微码、微微码、或者许可内码)单独地或者组合地执行。
处理器根据指令定义方法存取操作数。该指令可以利用指令的一部分的值提供立即操作数,可以提供明确指向通用寄存器或者专用寄存器(例如,浮点寄存器)的一个或者多个寄存器字段。该指令可以将操作码字段识别的隐型寄存器用作操作数。该指令可以使用操作数的存储器位置。操作数的存储器位置可以由寄存器、立即字段或者寄存器和立即字段的组合提供,正如z/Architecture长位移设施所例示的,其中指令定义基本寄存器、索引寄存器和立即字段(位移字段),它们加在一起,以提供存储器内的操作数的地址。此处的位置指主存储器(主存储器)内的位置,除非另有说明。
参考图4C,处理器利用加载/存储单元310访问存储设备。通过高速缓存/存储器接口获得目标操作数在存储器内的地址并且将该操作数加载到架构寄存器309中或者另一个存储器位置,加载/存储单元310可以执行加载操作,或者通过获得目标操作数在存储器内的地址并且从架构寄存器309或者另一个存储器位置获得的数据存储在存储器内的目标操作数位置,加载/存储单元310可以执行存储操作。加载/存储单元310可以是推测性的,并且以相对于指令序列无序的顺序访问存储器,然而,加载/存储单元310将维持对程序呈现顺序执行指令的外观。加载/存储单元310可以与架构寄存器309、解码/分派单元306、高速缓存/存储器接口或者其他元件455通信,并且可以包括各种寄存器电路、ALU 458和控制逻辑463,以计算存储器地址并且提供为了使操作保持有序而排队的流水线。某些操作可以是无序的,但是加载/存储单元提供功能性,以使无序操作对程序看起来如已按顺序执行一样,如本技术领域内所公知的。
优选地,应用程序“看到”的地址通常被称为虚拟地址。有时将虚拟地址称为“逻辑地址”和“有效地址”。这些虚拟地址之所以是虚拟的,是因为它们利用诸如图3所示的DAT 312的各种DAT技术中的一种重定向到物理存储器位置,各种DAT技术包括但并不局限于以偏移值为虚拟地址的前缀,通过一个或者多个转换表转换虚拟地址,该转换表至少单独地或者组合地包括分段表和页表,优选地包括具有指向页表的项的分段表。在z/Architecture中,提供包括区域第一表、区域第二表、区域第三表、分段表和可选页表的转换分级结构。通常利用转换备用缓冲器(TLB)改善地址转换的性能,该转换备用缓冲器(TLB)包括将虚拟地址映射到相关联的物理存储器位置的项。当DAT 312利用转换表转换虚拟地址时,创建该项。然后,虚拟地址的后续使用能够使用快速TLB的项,而非慢速顺序转换表存取。TLB内容可以由包括最近最少使用(LRU)的各种位移算法来管理。
在处理器106是多处理器系统的处理器时,每个处理器都负有保持共享资源的责任,诸如为了一致性而互锁的I/O、高速缓存、TLB和存储器。在实施例中,为了保持高速缓存一致性,采用“窥探”技术。在窥探环境下,为了便于共享,每个高速缓存行都可以被标记为处于共享状态、独占状态、改变状态、无效状态等中的任何一个。
图3的I/O单元304为处理器106提供了用于附于包括例如磁带、磁盘、打印机、显示器和网络的外围设备的装置。I/O单元304通常由软件驱动器呈现给计算机程序。在诸如IBM公司的System z的大型计算机中,信道适配器和开放系统适配器是在操作系统与外围设备之间提供通信的大型计算机的I/O单元。
图5和图6示出分支预测预加载指令的典型指令格式500和600。指令格式500是分支预测预加载指令,该分支预测预加载指令包括:操作码502、掩蔽字段504、开始地址偏移量RI 506、目标地址基本寄存器508、以及目标地址位移510。指令格式500还可以包括保留的/未定义位512。同样,指令格式600是分支预测相对预加载指令,包括:操作码602、掩蔽字段604、开始地址偏移量RI2 606以及目标地址偏移量RI3 608。能够选择操作码502和602,从而相对于其他架构指令唯一地识别指令格式500和600。
开始地址偏移量RI 506或者开始地址偏移量RI2 606用于确定预测分支指令的开始地址。在典型实施例中,开始地址偏移量RI 506或者开始地址偏移量RI2 606是规定为了产生分支地址或者执行式指令而与当前分支预加载指令的地址相加的半字的数量的带符号二进制整数。在一个例子中,指令格式500的开始地址偏移量RI 506含有带符号的16位整数,并且指令格式600的开始地址偏移量RI2 606含有带符号的12位整数。当将开始地址偏移量RI506或者开始地址偏移量RI2 606中规定的半字的数量与当前分支预加载地址的地址相加时,结果经历当前寻址模式。即,将结果处理为24位寻址模式中的24位地址、31位寻址模式中的31位地址、或者64位寻址模式中的64位地址。
在掩蔽字段504或者掩蔽字段604内进行控制的情况下,将关于开始地址偏移量RI 506或者开始地址偏移量RI2 606指定的分支或者执行式指令的信息提供给处理器106。结合目标地址位移510或者目标地址偏移量RI3 608,目标地址基本寄存器508规定指定指令的预测目标地址。
在典型实施例中,掩蔽字段504和604分别含有4位无符号二进制整数,该4位无符号二进制整数用作以信号发送由开始地址偏移量指定的分支指令的CPU属性的代码。掩蔽字段504和604的代码的例子如下:
代码0-该指令是4字节长度的分支指令。该分支指令不用于呼叫链接或者返回链接,并且可以存在该分支指令的多个可能目标。
代码1-4-保留
代码5-该指令是2字节长度的分支指令。该分支指令用于呼叫链接,并且仅存在该分支指令的一个目标。
代码6-该指令是2字节长度的分支指令。该分支指令用于返回链接。
代码7-该指令是2字节长度的分支指令。该分支指令用于呼叫链接,并且可以存在该分支指令的多个可能目标。
代码8-该指令是4字节长度的分支指令。该分支指令不用于呼叫链接或者返回链接,并且仅存在该分支指令的一个目标。
代码9-该指令是4字节长度的分支指令。该分支指令用于呼叫链接,并且仅存在该分支指令的一个目标。
代码10-该指令是4字节长度的分支指令。该分支指令可以用于返回链接和无条件分支。
代码11-该指令是4字节长度的分支指令。该分支指令用于呼叫链接,并且可以存在该分支指令的多个可能目标。
代码12-该指令是6字节长度的分支指令。该分支指令不用于呼叫链接或者返回链接,并且仅存在该分支指令的一个目标。
代码13-该指令是6字节长度的分支指令。该分支指令用于呼叫链接,并且仅存在该分支指令的一个目标。
代码14-该指令是执行式指令,例如,EXECUTE。该执行式指令可以临时分支,以执行允许修改的指令,然后,如果该单指令不是将代码流重定向到其他地方的所取的分支,则立即返回。
代码15-该指令是执行式指令,例如,EXECUTE RELATIVE LONG。该执行式指令可以临时分支,以执行允许修改的指令,然后,如果该单指令不是将代码流重定向到其他地方的所取的分支,则立即返回。
关于指令格式500,当掩蔽字段504规定分支指令时,目标地址基本寄存器508与目标地址位移501结合形成的目标地址是由开始地址偏移量RI506指定的分支指令的预测分支目标地址。关于指令格式500,当掩蔽字段504规定执行式指令时,目标地址基本寄存器508与目标地址位移510结合形成的目标地址是由当前寻址模式下的开始地址偏移量RI 506指定的执行式指令的执行目标地址。即,将该结果处理为24位寻址模式下的24位地址,31位寻址模式下的31位地址或者64位寻址模式下的64位地址。
关于指令格式600,当掩蔽字段604规定分支指令时,目标地址偏移量RI3 608的内容是规定为了产生由开始地址偏移量RI2 606指定的分支地址的分支目标地址而与分支预测相对预加载指令的地址相加的半字的数量的24位带符号二进制整数。关于指令格式600,当掩蔽字段604规定执行式指令时,目标地址偏移量RI3 608的内容是规定为了产生由开始地址偏移量RI2 606指定的执行式指令的执行目标地址而与分支预测相对预加载指令的地址相加的半字的数量的24位带符号二进制整数。当将由目标地址偏移量RI3 608规定的半字的数量与分支预测相对预加载指令的地址相加时,结果处于当前寻址模式下。即,将该结果处理为24位寻址模式下的24位地址,31位寻址模式下的31位地址或者64位寻址模式下的64位地址。
根据该模型,处理器106可以不实现上面列出的所有分支属性代码。关于处理器106未识别的代码,以及关于保留代码,该指令可以作为无操作。在典型实施例中,指令格式500和600规定的分支/执行式地址和目标地址是虚拟地址。
图7示出在处理器106内能够实施的分支预测预加载的典型处理700。在方框702,提取指令流中的多个指令,其中指令流是可以执行的一系列指令。利用指令提取单元305,可以从高速缓存303中的指令高速缓存提取指令。在方框704,在指令流中,对分支预测预加载指令解码。指令解码可以由解码/分派单元306执行。
在方框706,根据分支预测预加载指令,确定要预加载的预测分支指令的地址。分支预测预加载指令可以是指令格式500、指令格式600或者它们的变型。要预加载的预测分支指令的地址可以是从分支预测预加载指令的地址的地址偏移量。关于指令格式500,地址能够是基于开始地址偏移量RI 506的开始地址。关于指令格式600,地址能够是基于开始地址偏移量RI2 606的开始地址。变型格式可以将结束地址,而非将开始地址用作地址。例如,偏移量RI 506和RI2 606能够实现为结束地址偏移量,而非开始地址偏移量。作为另一种变型,地址能够是基于开始地址偏移量RI 506或者开始地址偏移量RI2 606的结束地址加掩蔽字段504和604中每个的分支指令长度减一个或者多个可寻址单位(例如,字节),以对准地址。
在方框708,根据分支预测预加载指令,确定要预加载的预测分支指令的预测目标地址。关于指令格式500,能够结合目标地址位移510,根据目标地址基本寄存器508的内容,确定预测目标地址。关于指令格式600,能够根据目标地址偏移量RI3 608,确定预测目标地址。
在方框710,在分支预测预加载指令中识别掩蔽字段。在典型实施例中,指令格式500的掩蔽字段504和指令格式600的掩蔽字段604的解码基本上相同。掩蔽字段504和604定义用于预加载BTB 432的分支指令长度和分支类型。在方框712,根据掩蔽字段确定要预加载的预测分支指令的分支指令长度。根据掩蔽字段,还能够确定要预加载的预测分支指令的分支类型,并可以提供给BTB432。在方框714,根据执行分支预测预加载指令,向BTB 432预加载预测分支指令的地址、分支指令长度、分支类型以及与预测分支指令相关联的预测目标地址。其中,可以根据与分支预加载指令的地址相加的分支偏移量,确定预测分支指令的地址。预测分支指令的地址可以表示开始地址或者结束地址。通过知晓作为提供的指令长度的函数的结束地址,该指令长度也能够存储在BTB 432中,在BTB 432进行正在预测的预加载分支的未来预测时,知晓对于可变指令长度架构,顺序提取必须前进多远。
向BTB 432预加载预测分支指令的地址和与预测分支指令相关联的预测目标地址可以将预测分支指令的地址的一部分和预测目标地址的一部分存储到BTB 432。例如,存储在BTB 432内的地址标志可以包括比完整地址少的位,但是能够结合其他信息,例如,基本地址或者地址范围,根据地址标志,确定完整地址。
根据分支类型,能够执行各种操作。例如,根据确定预测分支指令的分支类型是呼叫分支,保存作为分支指令长度的函数的顺序地址,用于返回地址的未来预测。在从BTB 432的预测分支指令的预测时,能够将顺序地址保存在存储器105内的呼叫-返回堆栈,或者存储器的另一区域。根据确定预测分支指令的分支类型是返回分支,在作为目标预测从呼叫-返回堆栈,而非从BTB 432内的目标地址项进行预测时,能够检索顺序地址。分支类型是呼叫类型或者返回类型分支的指示与分支一起保存在BTB 432中。在呼叫类型的预测时,作为也存储在BTB 432内的分支指令长度的函数的顺序地址保存到基准堆栈中。在被称为返回的分支的预测时,对于返回地址参考堆栈。
根据确定预测分支指令的分支类型是地址模式改变分支,当在分支目标缓冲器中的预测目标地址的预测时,对应于分支类型,设定寻址模式。根据确定预测分支指令的分支类型是执行指令类型,在分支预测单元308的分支预测逻辑中,将执行指令类型处理为特定分支类型。例如,单个执行指令能够有效地产生两个顺序分支,以分支到要执行的指令,并且在指令执行后立即返回。
还能够将基于分支类型的附加信息存储在BTB 432内。例如,如果分支具有由掩蔽字段504、604指出的多个目标,则还可以将多目标指示器保存在BTB 432中,使得当预测分支并且因此还预测目标时,可以应用适当的预测结构。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在,参考图8,在一个例子中,计算机程序产品800包括例如一个或者多个存储介质802,其中该介质可以是有形的和/或者非临时的,以在其上存储计算机可读程序代码装置或者逻辑804,从而提供并且促进在此描述的实施例的一个或者多个方面。
在(包括但并不局限于电子存储器模块(RAM)、闪速存储器、压缩光盘(CD)、DVD、磁带等)的有形介质上创建并且存储程序代码时,通常将程序代码称为“计算机程序产品”。通常,优选地位于计算机系统中的处理电路可读取计算机程序产品介质以由该处理电路执行。可以利用例如编译程序或者汇编程序创建该程序代码以汇编指令,当执行该汇编指令时,该汇编指令执行本发明的方面。
实施例包括分支预测预加载的系统、方法和计算机程序产品。分支预测预加载的系统包括:耦接到处理电路的指令高速缓存和分支目标缓冲器。配置该处理电路,以执行方法。该方法包括从指令高速缓存提取指令流中的多个指令;以及对指令流中的分支预测预加载指令解码。该方法还包括:由处理电路,根据分支预测预加载指令,确定预测分支指令的地址;由处理电路,根据分支预测预加载指令,确定预测分支指令的预测目标地址。该方法还包括:识别分支预测预加载指令中的掩蔽字段;以及由处理电路,根据该掩蔽字段,确定预测分支指令的分支指令长度。根据指示分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关联的预测目标地址。
在实施例中,进一步配置系统的处理电路,以根据掩蔽字段,确定预测分支指令的分支类型,并且将该预测分支指令的分支类型提供给分支目标缓冲器。在实施例中,进一步配置系统的处理电路,以在从分支目标缓冲器的预测分支指令的预测时,根据确定预测分支指令的分支类型是呼叫分支,保存顺序地址,用于返回分支的未来预测。在实施例中,将顺序地址保存到呼叫-返回堆栈,并且根据确定预测分支指令的分支类型是返回分支,作为目标预测在预测时从呼叫-返回堆栈而非从分支目标缓冲器中的目标地址项检索顺序地址。在实施例中,根据确定预测分支指令的分支类型是地址模式改变分支,当在分支目标缓冲器中预测目标地址的预测时,对应于分支类型,设定寻址模式。在实施例中,根据确定预测分支指令的分支类型是执行指令类型,在分支预测逻辑中将执行指令类型处理为特定分支类型。
在实施例中,进一步配置系统的处理电路,以将预测分支指令的地址确定为与分支预测预加载指令的地址偏移量,并且将预测目标地址确定为与分支预测预加载指令的相对偏移量和与基本值的位移中的一个。预测分支指令的地址可以是预测分支指令的开始地址和结束地址中的一个。在实施例中,进一步配置该系统的处理电路,以向分支目标缓冲器预加载预测分支指令的地址和与预测分支指令相关联的预测目标地址,将预测分支指令的地址的一部分和预测目标地址的一部分存储到分支目标缓冲器。
技术效果和好处包括将分支预测预加载到分支目标缓冲器中。在分支预测预加载指令中定义分支或者执行式指令的指令长度使能准确预测可变长度指令的支持。将分支或者执行式指令的类型定义为分支预测预加载指令的一部分允许作为预测与预提取处理的一部分实现附加类型特定效率。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现实施例的说明是为了示出和描述的作用,但不是穷尽性的或局限于所公开的形式的实施例。许多修改和变型对本领域普通技术人员来说是明显的,且不脱离本发明的范围。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能理解适于考虑的特定用途而具有各种修改的实施例。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
计算机程序指令也可以加载到计算机、其他可编程数据处理设备或者其他装置上,以使得在计算机、其他可编程设备或者其他装置上执行一系列操作步骤,从而产生计算机实现处理,使得在计算机或者其他可编程设备上执行的指令提供用于实现流程图和/或者方框图的方框或者各方框规定的功能/操作的处理。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
Claims (20)
1.一种用于分支预测预加载的系统,所述系统包括:
指令高速缓存;
分支目标缓冲器;以及
处理电路,耦接到指令高速缓存和分支目标缓冲器,所述处理电路配置为执行方法,所述方法包括:
从指令高速缓存提取指令流中的多个指令;
解码指令流中的分支预测预加载指令;
由处理电路根据分支预测预加载指令确定预测分支指令的地址;
由处理电路根据分支预测预加载指令确定预测分支指令的预测目标地址;
识别分支预测预加载指令中的掩蔽字段;
由处理电路根据所述掩蔽字段确定预测分支指令的分支指令长度;以及
根据执行分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关的预测目标地址。
2.根据权利要求1所述的系统,还包括:
由处理电路根据所述掩蔽字段确定预测分支指令的分支类型;以及
将所述预测分支指令的分支类型提供给分支目标缓冲器。
3.根据权利要求2所述的系统,还包括:
根据确定预测分支指令的分支类型是呼叫分支,在从分支目标缓冲器的预测分支指令的预测时,保存顺序地址以用于返回分支的未来预测。
4.根据权利要求3所述的系统,其中将顺序地址保存到呼叫-返回堆栈,并且所述系统还包括:
根据确定预测分支指令的分支类型是返回分支,在预测时从呼叫-返回堆栈而非从分支目标缓冲器中的目标地址项检索顺序地址作为目标预测。
5.根据权利要求2所述的系统,还包括:
根据确定预测分支指令的分支类型是地址模式改变分支,当在分支目标缓冲器中预测目标地址的预测时,对应于分支类型设定寻址模式。
6.根据权利要求2所述的系统,还包括:
根据确定预测分支指令的分支类型是执行指令类型,在分支预测逻辑中将执行指令类型处理为特定分支类型。
7.根据权利要求1所述的系统,还包括:
将预测分支指令的地址确定为与分支预测预加载指令的地址偏移量;以及
将预测目标地址确定为与分支预测预加载指令的相对偏移量和与基本值的位移中的一个。
8.根据权利要求7所述的系统,其中预测分支指令的地址是预测分支指令的开始地址和结束地址中的一个;以及
向分支目标缓冲器预加载预测分支指令的地址和与预测分支指令相关联的预测目标地址将预测分支指令的地址的一部分和预测目标地址的一部分存储到分支目标缓冲器。
9.一种用于分支预测预加载的计算机实现的方法,所述方法包括:
提取指令流中的多个指令;
解码指令流中的分支预测预加载指令;
由处理电路根据分支预测预加载指令确定预测分支指令的地址;
由处理电路根据分支预测预加载指令确定预测分支指令的预测目标地址;
识别分支预测预加载指令中的掩蔽字段;
由处理电路根据该掩蔽字段确定预测分支指令的分支指令长度;以及
根据执行分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关联的预测目标地址。
10.根据权利要求9所述的方法,还包括:
由处理电路根据掩蔽字段确定预测分支指令的分支类型;以及
将该预测分支指令的分支类型提供给分支目标缓冲器。
11.根据权利要求10所述的方法,还包括:
根据确定预测分支指令的分支类型是呼叫分支,在从分支目标缓冲器的预测分支指令的预测时,保存顺序地址以用于返回分支的未来预测。
12.根据权利要求11所述的方法,其中将顺序地址保存到呼叫-返回堆栈,并且所述方法还包括:
根据确定预测分支指令的分支类型是返回分支,在预测时从呼叫-返回堆栈而非从分支目标缓冲器中的目标地址项检索顺序地址作为目标预测。
13.根据权利要求10所述的方法,还包括:
根据确定预测分支指令的分支类型是地址模式改变分支,当在分支目标缓冲器中预测目标地址的预测时,对应于分支类型设定寻址模式。
14.根据权利要求10所述的方法,还包括:
根据确定预测分支指令的分支类型是执行指令类型,在分支预测逻辑中将执行指令类型处理为特定分支类型。
15.根据权利要求9所述的方法,还包括:
将预测分支指令的地址确定为与分支预测预加载指令的地址偏移量;以及
将预测目标地址确定为与分支预测预加载指令的相对偏移量和与基本值的位移中的一个。
16.一种用于分支预测预加载的计算机程序产品,所述计算机程序产品包括:
有形存储介质,可由处理电路读取,并且存储用于由处理电路执行以用于执行包括如下的方法的指令:
提取指令流中的多个指令;
解码指令流中的分支预测预加载指令;
由处理电路根据分支预测预加载指令确定预测分支指令的地址;
由处理电路根据分支预测预加载指令确定预测分支指令的预测目标地址;
识别分支预测预加载指令中的掩蔽字段;
由处理电路根据该掩蔽字段确定预测分支指令的分支指令长度;以及
根据执行分支预测预加载指令,向分支目标缓冲器预加载预测分支指令的地址、分支指令长度以及与预测分支指令相关联的预测目标地址。
17.根据权利要求16所述的计算机程序产品,还包括:
由处理电路根据所述掩蔽字段确定预测分支指令的分支类型;以及
将所述预测分支指令的分支类型提供给分支目标缓冲器。
18.根据权利要求17所述的计算机程序产品,还包括:
根据确定预测分支指令的分支类型是呼叫分支,在从分支目标缓冲器的预测分支指令的预测时,将顺序地址保存到呼叫-返回堆栈以用于返回分支的未来预测;以及
根据确定预测分支指令的分支类型是返回分支,在预测时从呼叫-返回堆栈而非从分支目标缓冲器中的目标地址项检索顺序地址作为目标预测。
19.根据权利要求17所述的计算机程序产品,还包括:
根据确定预测分支指令的分支类型是地址模式改变分支,当在分支目标缓冲器中预测目标地址的预测时,对应于分支类型设定寻址模式。
根据确定预测分支指令的分支类型是执行指令类型,在分支预测逻辑中将执行指令类型处理为特定分支类型。
20.根据权利要求16所述的计算机程序产品,还包括:
将预测分支指令的地址确定为与分支预测预加载指令的地址偏移量;以及
将预测目标地址确定为与分支预测预加载指令的相对偏移量和与基本值的位移中的一个。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/517,779 US9146739B2 (en) | 2012-06-14 | 2012-06-14 | Branch prediction preloading |
US13/517,779 | 2012-06-14 | ||
PCT/EP2013/060328 WO2013186014A1 (en) | 2012-06-14 | 2013-05-20 | Branch prediction preloading |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104335168A true CN104335168A (zh) | 2015-02-04 |
CN104335168B CN104335168B (zh) | 2017-11-21 |
Family
ID=48446391
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380028320.1A Active CN104335168B (zh) | 2012-06-14 | 2013-05-20 | 分支预测预加载 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9146739B2 (zh) |
CN (1) | CN104335168B (zh) |
DE (1) | DE112013002956T5 (zh) |
GB (1) | GB2517876B (zh) |
WO (1) | WO2013186014A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106681695A (zh) * | 2015-11-09 | 2017-05-17 | 想象技术有限公司 | 提前取出分支目标缓冲器 |
CN107808359A (zh) * | 2016-09-02 | 2018-03-16 | 西门子保健有限责任公司 | 预加载的预测数据的显示 |
CN108780398A (zh) * | 2016-03-31 | 2018-11-09 | 高通股份有限公司 | 在基于处理器系统中基于负载路径历史使用地址预测表以提供负载地址预测 |
CN110442379A (zh) * | 2018-05-02 | 2019-11-12 | 美光科技公司 | 保护有条件的推测指令执行 |
CN110442537A (zh) * | 2018-05-02 | 2019-11-12 | 美光科技公司 | 用于不同等级的调用的单独分支目标缓冲区 |
CN111381869A (zh) * | 2018-12-28 | 2020-07-07 | 三星电子株式会社 | 使用预测分配的微操作高速缓存 |
CN111886580A (zh) * | 2018-03-29 | 2020-11-03 | Arm有限公司 | 用于控制分支预测的装置和方法 |
CN112543916A (zh) * | 2018-07-09 | 2021-03-23 | 超威半导体公司 | 多表分支目标缓冲器 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9921561B2 (en) * | 2015-03-17 | 2018-03-20 | Secure Cloud Systems, Inc. | Real time control of a remote device |
US10423418B2 (en) | 2015-11-30 | 2019-09-24 | International Business Machines Corporation | Method for maintaining a branch prediction history table |
CN105718241B (zh) * | 2016-01-18 | 2018-03-13 | 北京时代民芯科技有限公司 | 一种基于sparc v8体系结构的分类式混合分支预测系统 |
US10489296B2 (en) | 2016-09-22 | 2019-11-26 | International Business Machines Corporation | Quality of cache management in a computer |
US10691460B2 (en) | 2016-12-13 | 2020-06-23 | International Business Machines Corporation | Pointer associated branch line jumps for accelerated line jumps |
US10346558B2 (en) | 2017-06-22 | 2019-07-09 | International Business Machines Corporation | Integrated circuit buffering solutions considering sink delays |
US10387162B2 (en) | 2017-09-20 | 2019-08-20 | International Business Machines Corporation | Effective address table with multiple taken branch handling for out-of-order processors |
US11579886B2 (en) | 2018-01-09 | 2023-02-14 | International Business Machines Corporation | System and method for multi-level classification of branches |
US11113066B2 (en) | 2018-01-09 | 2021-09-07 | International Business Machines Corporation | Predicting a branch instruction classified as simple or hard to predict based on a confidence counter in a branch type table |
US11329963B2 (en) | 2018-02-22 | 2022-05-10 | Eclypses, Inc. | System and method for securely transferring data |
US11405203B2 (en) | 2020-02-17 | 2022-08-02 | Eclypses, Inc. | System and method for securely transferring data using generated encryption keys |
US11720693B2 (en) | 2021-03-05 | 2023-08-08 | Eclypses, Inc. | System and method for securely transferring data |
US11522707B2 (en) | 2021-03-05 | 2022-12-06 | Eclypses, Inc. | System and method for detecting compromised devices |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1555006A (zh) * | 2003-12-24 | 2004-12-15 | 智慧第一公司 | 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法 |
US6877089B2 (en) * | 2000-12-27 | 2005-04-05 | International Business Machines Corporation | Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program |
CN1667570A (zh) * | 2004-03-09 | 2005-09-14 | 国际商业机器公司 | 用最近条目队列补充分支目标缓冲器的方法和系统 |
US20090313462A1 (en) * | 2008-06-13 | 2009-12-17 | International Business Machines Corporation | Methods involving branch prediction |
US20110225401A1 (en) * | 2010-03-11 | 2011-09-15 | International Business Machines Corporation | Prefetching branch prediction mechanisms |
CN202133998U (zh) * | 2011-04-18 | 2012-02-01 | 江苏中科芯核电子科技有限公司 | 一种分支预测装置 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4679141A (en) * | 1985-04-29 | 1987-07-07 | International Business Machines Corporation | Pageable branch history table |
JPS6488844A (en) * | 1987-09-30 | 1989-04-03 | Takeshi Sakamura | Data processor |
US5226126A (en) * | 1989-02-24 | 1993-07-06 | Nexgen Microsystems | Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags |
US5287467A (en) * | 1991-04-18 | 1994-02-15 | International Business Machines Corporation | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit |
US5655115A (en) * | 1995-02-14 | 1997-08-05 | Hal Computer Systems, Inc. | Processor structure and method for watchpoint of plural simultaneous unresolved branch evaluation |
US5742804A (en) * | 1996-07-24 | 1998-04-21 | Institute For The Development Of Emerging Architectures, L.L.C. | Instruction prefetch mechanism utilizing a branch predict instruction |
US6092188A (en) * | 1997-12-23 | 2000-07-18 | Intel Corporation | Processor and instruction set with predict instructions |
US6223280B1 (en) * | 1998-07-16 | 2001-04-24 | Advanced Micro Devices, Inc. | Method and circuit for preloading prediction circuits in microprocessors |
US6119203A (en) * | 1998-08-03 | 2000-09-12 | Motorola, Inc. | Mechanism for sharing data cache resources between data prefetch operations and normal load/store operations in a data processing system |
US6073215A (en) * | 1998-08-03 | 2000-06-06 | Motorola, Inc. | Data processing system having a data prefetch mechanism and method therefor |
US6611910B2 (en) * | 1998-10-12 | 2003-08-26 | Idea Corporation | Method for processing branch operations |
US6446197B1 (en) | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US7441110B1 (en) * | 1999-12-10 | 2008-10-21 | International Business Machines Corporation | Prefetching using future branch path information derived from branch prediction |
US6560693B1 (en) * | 1999-12-10 | 2003-05-06 | International Business Machines Corporation | Branch history guided instruction/data prefetching |
US6895498B2 (en) | 2001-05-04 | 2005-05-17 | Ip-First, Llc | Apparatus and method for target address replacement in speculative branch target address cache |
US6886093B2 (en) | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US7493480B2 (en) * | 2002-07-18 | 2009-02-17 | International Business Machines Corporation | Method and apparatus for prefetching branch history information |
US20060179277A1 (en) | 2005-02-04 | 2006-08-10 | Flachs Brian K | System and method for instruction line buffer holding a branch target buffer |
US8490065B2 (en) * | 2005-10-13 | 2013-07-16 | International Business Machines Corporation | Method and apparatus for software-assisted data cache and prefetch control |
US9519480B2 (en) | 2008-02-11 | 2016-12-13 | International Business Machines Corporation | Branch target preloading using a multiplexer and hash circuit to reduce incorrect branch predictions |
US7882338B2 (en) | 2008-02-20 | 2011-02-01 | International Business Machines Corporation | Method, system and computer program product for an implicit predicted return from a predicted subroutine |
US7913068B2 (en) | 2008-02-21 | 2011-03-22 | International Business Machines Corporation | System and method for providing asynchronous dynamic millicode entry prediction |
US8131976B2 (en) * | 2009-04-13 | 2012-03-06 | International Business Machines Corporation | Tracking effective addresses in an out-of-order processor |
US10338923B2 (en) * | 2009-05-05 | 2019-07-02 | International Business Machines Corporation | Branch prediction path wrong guess instruction |
-
2012
- 2012-06-14 US US13/517,779 patent/US9146739B2/en active Active
-
2013
- 2013-03-05 US US13/784,888 patent/US9146740B2/en active Active
- 2013-05-20 DE DE112013002956.1T patent/DE112013002956T5/de active Pending
- 2013-05-20 GB GB1500043.3A patent/GB2517876B/en active Active
- 2013-05-20 CN CN201380028320.1A patent/CN104335168B/zh active Active
- 2013-05-20 WO PCT/EP2013/060328 patent/WO2013186014A1/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6877089B2 (en) * | 2000-12-27 | 2005-04-05 | International Business Machines Corporation | Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program |
CN1555006A (zh) * | 2003-12-24 | 2004-12-15 | 智慧第一公司 | 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法 |
CN1667570A (zh) * | 2004-03-09 | 2005-09-14 | 国际商业机器公司 | 用最近条目队列补充分支目标缓冲器的方法和系统 |
US20090313462A1 (en) * | 2008-06-13 | 2009-12-17 | International Business Machines Corporation | Methods involving branch prediction |
US8131982B2 (en) * | 2008-06-13 | 2012-03-06 | International Business Machines Corporation | Branch prediction instructions having mask values involving unloading and loading branch history data |
US20110225401A1 (en) * | 2010-03-11 | 2011-09-15 | International Business Machines Corporation | Prefetching branch prediction mechanisms |
CN202133998U (zh) * | 2011-04-18 | 2012-02-01 | 江苏中科芯核电子科技有限公司 | 一种分支预测装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106681695A (zh) * | 2015-11-09 | 2017-05-17 | 想象技术有限公司 | 提前取出分支目标缓冲器 |
CN108780398A (zh) * | 2016-03-31 | 2018-11-09 | 高通股份有限公司 | 在基于处理器系统中基于负载路径历史使用地址预测表以提供负载地址预测 |
CN108780398B (zh) * | 2016-03-31 | 2022-06-07 | 高通股份有限公司 | 在基于处理器系统中基于负载路径历史使用地址预测表以提供负载地址预测 |
US11709679B2 (en) | 2016-03-31 | 2023-07-25 | Qualcomm Incorporated | Providing load address predictions using address prediction tables based on load path history in processor-based systems |
CN107808359A (zh) * | 2016-09-02 | 2018-03-16 | 西门子保健有限责任公司 | 预加载的预测数据的显示 |
CN111886580A (zh) * | 2018-03-29 | 2020-11-03 | Arm有限公司 | 用于控制分支预测的装置和方法 |
CN110442379A (zh) * | 2018-05-02 | 2019-11-12 | 美光科技公司 | 保护有条件的推测指令执行 |
CN110442537A (zh) * | 2018-05-02 | 2019-11-12 | 美光科技公司 | 用于不同等级的调用的单独分支目标缓冲区 |
CN112543916A (zh) * | 2018-07-09 | 2021-03-23 | 超威半导体公司 | 多表分支目标缓冲器 |
US11416253B2 (en) | 2018-07-09 | 2022-08-16 | Advanced Micro Devices, Inc. | Multiple-table branch target buffer |
CN111381869A (zh) * | 2018-12-28 | 2020-07-07 | 三星电子株式会社 | 使用预测分配的微操作高速缓存 |
CN111381869B (zh) * | 2018-12-28 | 2024-05-17 | 三星电子株式会社 | 使用预测分配的微操作高速缓存 |
Also Published As
Publication number | Publication date |
---|---|
US9146739B2 (en) | 2015-09-29 |
US9146740B2 (en) | 2015-09-29 |
WO2013186014A1 (en) | 2013-12-19 |
GB2517876B (en) | 2017-03-22 |
DE112013002956T5 (de) | 2015-03-12 |
CN104335168B (zh) | 2017-11-21 |
GB2517876A (en) | 2015-03-04 |
US20130339697A1 (en) | 2013-12-19 |
US20130339691A1 (en) | 2013-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104335168A (zh) | 分支预测预加载 | |
US9921843B2 (en) | Predictive fetching and decoding for selected instructions | |
RU2565496C2 (ru) | Команда для загрузки данных до заданной границы памяти, указанной командой | |
US9535703B2 (en) | Predictor data structure for use in pipelined processing | |
RU2568920C2 (ru) | Способ выполнения машинной команды, компьютерная система и машиночитаемый носитель, обеспечивающие расчет расстояния от положения в основной памяти до границы блока основной памяти | |
TWI551986B (zh) | 用於自較低特殊權限狀態控制執行階段檢測設施之操作之電腦程式產品、方法及其系統 | |
CA1323940C (en) | Preprocessing implied specifiers in a pipelined processor | |
TWI533126B (zh) | 執行階段檢測報告 | |
US11080052B2 (en) | Determining the effectiveness of prefetch instructions | |
TWI731554B (zh) | 用於多層虛擬化之經引導中斷 | |
CN104937542A (zh) | 向量校验和指令 | |
CN102906694B (zh) | 用于与适配器进行通信的加载指令的方法和系统 | |
CN104956364A (zh) | 向量异常码 | |
KR20010075258A (ko) | 간접 분기 목적지 산출 방법 | |
US9361146B2 (en) | Predictive fetching and decoding for selected return instructions | |
CN105190572A (zh) | 用于防止未经授权的堆栈转移的系统和方法 | |
CN104956323A (zh) | 向量伽罗瓦域乘法求和与累加指令 | |
CN104956319A (zh) | 向量浮点测试数据类立即指令 | |
CN104252336A (zh) | 基于解码时间指令优化来形成指令组的方法和系统 | |
CN104937543A (zh) | 向量元素旋转和掩码下插入指令 | |
JP2021174513A (ja) | データ依存脆弱分岐の機会主義的再誘導のための命令セットアーキテクチャベース自動負荷追跡 | |
US20150106600A1 (en) | Execution of condition-based instructions | |
US11106466B2 (en) | Decoupling of conditional branches | |
US20190163492A1 (en) | Employing a stack accelerator for stack-type accesses |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |