CN104220980B - 经管理的指令缓存预取 - Google Patents
经管理的指令缓存预取 Download PDFInfo
- Publication number
- CN104220980B CN104220980B CN201180076122.3A CN201180076122A CN104220980B CN 104220980 B CN104220980 B CN 104220980B CN 201180076122 A CN201180076122 A CN 201180076122A CN 104220980 B CN104220980 B CN 104220980B
- Authority
- CN
- China
- Prior art keywords
- instruction
- branch
- prefetched
- engine
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 22
- 238000003780 insertion Methods 0.000 claims description 10
- 230000037431 insertion Effects 0.000 claims description 10
- 238000003860 storage Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 5
- 238000000151 deposition Methods 0.000 claims description 2
- 230000001419 dependent effect Effects 0.000 claims 5
- 238000004422 calculation algorithm Methods 0.000 description 20
- 238000012545 processing Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 210000004027 cell Anatomy 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000010438 heat treatment Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 231100000241 scar Toxicity 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 210000000352 storage cell Anatomy 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/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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control 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/3017—Runtime instruction translation, e.g. macros
-
- 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
-
- 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/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
公开了一种用于管理从指令缓存中指令缓存预取的设备和方法。处理器可以包括:预取引擎;分支预测引擎,用于预测分支的结果;以及动态优化器。动态优化器可以用于控制:识别常见指令缓存未命中;以及将预取指令从预取引擎插入到指令缓存。
Description
背景技术
发明领域
本发明的实施例通常涉及一种用于管理指令缓存预取的方法和设备。
相关领域的说明
指令缓存是现代微处理器的基本组件。指令缓存的主要责任是为处理器流水线提供指令流。尽管,在很多情况下,指令缓存未命中导致的停顿对性能没有重大的影响,但是,对于很多情况,指令缓存未命中对性能确实有重大的影响。众所周知的具有负面影响性能的弱的指令缓存行为的这些情况的类型的示例是服务器工作量和硬件/软件联合设计虚拟机。
为了减少由于指令缓存未命中造成的性能下降,处理器可以使用较大的缓存(和/或较高结合性的缓存)和/或硬件预取器。硬件预取器可以用于预测指令流并授权未来指令的预取请求。然而,存在构建的硬件预取器方案不能正确预测未来流的情形。
典型地,硬件预取器预取通过分支预测引擎预测的指令地址。此分支预测引擎预测基于分支预测执行的未来指令。因为预取器紧紧地依赖于分支预测引擎,因此只要分支预测引擎不能正确预测分支的目标,预取器通常就不能授权适当的预取请求。因此,寻求一种改进的指令缓存预取技术。
附图说明
从结合下述附图的下述细节描述中,可以获得本发明的较好理解,其中:
图1说明了可与本发明的实施例一起利用的计算机系统结构。
图2说明了可与本发明的实施例一起利用的计算机系统结构。
图3是依据本发明的一个实施例的处理器核的框图,该处理器核包括使能指令缓存预取的动态优化器。
图4示出了依据本发明的一个实施例的表,其用于存储简档动态信息。
图5是依据本发明的一个实施例的实现动态优化器插入预取请求的预取算法处理的流程图。
细节描述
在下面的说明中,出于解释目的,为了提供下面描述的本发明的实施例的彻底的理解,提出了大量的特殊细节。然而显然,对于本领域技术人员而言,可以无需某些这些特殊细节来实现本发明的实施例。在其他例子中,在框图形式中示出了公知的结构和设备,以避免模糊本发明的实施例的基本原理。
以下是示例性的计算机系统,在此后的讨论中,其可以被本发明的实施例利用,并用于在此具体地执行指令。本领域公知的用于膝上型电脑,桌面电脑,手持PC,个人数字助理,工程工作站,服务器,网络设备,网络集线器,交换器,嵌入式处理器,数字信号处理器(DSP),图形设备,视频游戏设备,置顶盒,微控制器,蜂窝电话,便携媒体播放器,手持设备,以及各种其他电子设备的其他系统设计和配置也同样适用。通常,此处公开的能够结合处理器和/或其他执行逻辑的多种系统或电子设备通常是适用的。
现在参见图1,示出了依据本发明的一个实施例的计算机系统100的框图。系统100可以包括一个或多个处理元件110,115,其耦合到图形存储器控制器中枢(GMCH)120。附加的处理元件115的可选属性在图1中用虚线表示。每个处理元件可以是单独的核,或者可选地,包括多个核。处理器元件可以可选地包括除了处理核之外的其他片上元件,例如集成的存储器控制器和/或集成的I/O控制逻辑。同样,对于至少一个实施例,处理元件的核可以是多线程的,其中它们可以每个核包括多于一个的硬件线程上下文。
图1说明了GMCH 120可以耦合到存储器140,其可以是例如,动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性缓存关联。GMCH 120可以是芯片组,或者是芯片组的一部分。GMCH 120可以与处理器110,115通信,并控制处理器110,115以及存储器140之间的交互。GMCH 120还可以作为处理器110,115和系统100的其他元件之间的加速总线接口。对于至少一个实施例,GMCH 120通过多分支总线(例如,前端总线(FSB)195)与处理器110,115通信。此外,GMCH 120耦合到显示器140(例如平板显示器)。GMCH 120可以包括集成的图形加速器。GMCH 120进一步耦合到输入/输出(I/O)控制器中枢(ICH)150,其可以用于将各种外围设备耦合到系统100。例如在图1的实施例中所示的是外部图形设备160以及另一个外围设备170,外部图形设备可以是耦合到ICH 150的分立图形设备。
可替代地,附加的或不同的处理元件也可以出现在系统100中。例如,附加的处理元件115可以包括附加的处理器,其与处理器110相同,附加的处理器对处理器110,加速器(例如,图形加速器或数字信号处理(DSP)单元),现场可编程门阵列,或任何其他处理元件来说是异构的或不对称的。在包括体系结构,微体系结构,热力,电源消耗特性等一系列优点度量方面,在物理源110,115之间有各种不同。这些不同可以有效地表明它们在处理元件110,115之间的不对称性和异构性。对于至少一个实施例,各种处理元件110,115可以驻留在相同的管芯封装中。
现在参见附图2,示出了依据本发明的实施例的另一个计算机系统200的框图。如图2所示,多处理器系统200是点到点互连系统,且包括通过点到点互连250耦合的第一处理元件270以及第二处理元件280。如图2所示,每个处理元件270和280可以是多核处理器,包括第一和第二处理器核(即,处理器核274a和274b以及处理器核284a和284b)。可选择地,一或多个处理元件270,280可以是元件而不是处理器,例如加速器或现场可编程门阵列。当只用两个处理元件270,280示出时,应该理解的是,本发明的范围并不被这样限制。在其他实施例中,一或多个附加的处理元件可以存在于给定的处理器内。
第一处理元件270可以进一步包括存储器控制器中枢(MCH)272以及点到点(P-P,point-to-point)接口276和278。类似地,第二处理元件280可以包括MCH 282以及P-P接口286和288。处理器270,280可以通过使用PtP接口电路278,288的点到点(PtP,point-to-point)接口250交换数据。如图2所示,MCH的272和282将处理器耦合到各自的存储器,即存储器242和存储器244,其可以是本地的附属到各自的处理器的主存储器的部分。
处理器270,280可以用芯片组290通过使用点到点接口电路276,294,286,298的个别的PtP接口252,254彼此交换数据。芯片组290还可以与高性能图形电路238通过高性能图形接口239交换数据。本发明的实施例可以位于具有任意数量处理核的处理元件中。在一个实施例中,任意处理核可以包括或者否则与本地缓存存储器(未示出)相关联。此外,共享缓存(未示出)可以被包括在两个处理器之一或两个处理器之外,仍然通过p2p互连与处理器连接,因此,如果处理器在低电源模式下,处理器之一或者两个处理器的本地缓存信息可以存储在共享缓存中。第一处理元件270和第二处理元件280可以通过P-P互连276,286以及284分别耦合到芯片组290。如图2所示,芯片组290包括P-P接口294和298。此外,芯片组290包括接口292来将芯片组290与高性能图形引擎248耦合。在一个实施例中,总线249可以用于耦合图形引擎248到芯片组290。可替代地,点到点互连249可以耦合这些组件。进而,芯片组290可以通过接口296耦合到第一总线216。在一个实施例中,第一总线216可以是外围组件互连(PCI,Peripheral Component Interconnect)总线,或者是总线,例如PCI扩展(PCIExpress,Peripheral Component Interconnect Express)总线或者另一个第三代I/O互连总线,尽管本发明的范围并不被如此限制。
如图2所示,各种I/O设备214可以耦合到第一总线216,连同将第一总线216耦合到第二总线220的总线桥218一起。在一个实施例中,第二总线220可以是低引脚数(LPC,lowpin count)总线。各种设备可以耦合到第二总线220,包括,例如,键盘/鼠标222,通信设备226以及数据存储单元228,例如硬盘驱动或者其他海量存储设备,在一个实施例中,其可以包括代码230。进一步地,音频I/O 224可以耦合到第二总线220。注意其他的体系结构也是可能的。例如,替代点到点体系结构,系统可以实现多点总线或其他这种体系结构。
在一个实施例中,本发明的方面依赖新的指令和它的用法。这个指令可以称为“pref_i”,它的操作将发出用于特殊地址的到指令缓存中的预取请求。此指令的有益元素包括:将被预取的行的地址被标识的方式;以及执行或忽略预取请求的情况。
现在参见图3,说明了依据本发明的一个实施例的处理器核300的框图,处理器核300包括动态优化器310,其使能管理指令缓存预取。应该意识到的是,处理器核300可以是先前描述的计算机系统200的很多不同的处理器核274和284中的一个。动态优化器310可以回顾预取算法312以及表314。实现预取算法312的动态优化器310可以与处理器核300的内核320共同操作,使能管理指令缓存预取,如下文将要详细描述的。
内核320可以包括耦合到数据缓存324的后端322和耦合到指令缓存345的前端330。指令缓存345和数据缓存324耦合到MCH以及剩下的存储器层级326(如先前参见图1和2描述的),其进而耦合到主存储器,设备,以及系统组件350(如先前参见图1和2描述的)。前端330可以包括分支预测引擎或单元332,以及其他前端组件334,其耦合到预取引擎340,预取引擎340进而耦合到指令缓存345。
如已知的,指令缓存(IC,instruction cache)345用于将指令流提供给处理器。预取引擎340可以预测指令流,并基于来自分支预测引擎332的地址预测来发出用于来自IC345的未来指令的预取请求。不幸的是,分支预测引擎332经常做出错误的预测。
本发明的实施例涉及动态优化器310,其采用预取算法312和表314来提供一种方法和处理来通过预取引擎340精确地管理到IC 345的指令缓存预取。在一个实施例中,总是利用由动态优化器310和预取算法312控制的新指令,其命名为预取指令(此后称为pref_i),该指令发出用于特殊地址的到IC 345的预取请求。本发明的方面涉及如何标识将被预取的行的地址,以及在哪些情况下执行或者忽略预取请求。
在一个实施例中,实现预取算法312以及表314的动态优化器310可以是硬件及软件组合。例如,动态优化器310可以合并二进制翻译软件,其监控IC 345未命中并收集合并到表314的动态简档信息。然而,应该意识到的是,动态优化器310可以用硬件,软件,固件或它们的组合实现,来合并通过预取引擎340精确的管理指令缓存预取到IC 345的技术,如此后将描述的。同样,离线编译器还可以在用于简档目的(如,简档引导优化)的执行完成中收集信息。
此外简要地参见图4,表314存储简档动态信息,其包括经常未命中的IC地址,并促成可察觉的到处理器流水线的停顿(stalls)。例如,存储在表314中的此信息可以包括:未命中的请求的行地址402;用于未命中的该请求(即,代码请求未命中是归咎于直接还是间接的分支)的分支目标特性404;分支单元332对于直接分支的情况预测的对应的分支的置信度(强/弱)406;以及导致请求这个行408的分支的地址。如图4所示,表314可以包括很多与简档动态信息有关的条目。动态优化器310可以根据预取算法312访问表314来插入预取请求,如此后将详细描述的。
现在简要地参见图3,作为概观,处理器核300可以包括:预取引擎340;用于预测分支结果的分支预测引擎332;以及动态优化器310。尤其是,分支预测引擎332可以预测直接条件分支的结果以及间接分支的目标。动态优化器310可以控制:标识常见的指令缓存未命中,以及将来自预取引擎340的预取指令插入到指令缓存345。需要注意的是,是指令缓存345本身确定指令缓存未命中是否发生。动态优化器310仅使用这个信息来确定那些经常未命中的访问。如果发生了指令缓存未命中,那么动态优化器310就可以控制将来自预取引擎340的预取指令插入到指令缓存345,如稍后将更详细地描述的。
动态优化器310可以利用来自分支预测引擎332的关于采取的分支是否曾有强或弱的预测的信息,从预取引擎340插入的预取指令可以基于采取的分支是否曾有强预测或弱预测。进一步地,动态优化器310可以利用来自分支预测引擎332的关于未采取的分支是否有强或弱的预测的信息,从预取引擎340插入的预取指令可以基于未采取的分支是否曾有强预测或弱预测。尤其是,可在不考虑预测(强或弱)的情况下插入预取指令,因为指令的置信度(强或弱)定义了指令是否将在最后执行。尽管如此,如将描述的,这仅适用于指令的pref_i.P版本。总是执行pref_i,而pref_i.P基于预测置信度(如果强就忽略,如果弱就执行)。这些操作类型的例子可以参见下图5详细地讨论。
现在参见图5,图5是依据本发明的实施例的用于实现动态优化器310的预取算法312以插入预取请求的过程500的流程图。首先,指令缓存未命中发生502。尤其是,针对经常未命中的访问来执行过程500。作为示例,在程序执行中,处理器收集简档信息。然后动态优化器310参照这个动态信息并执行过程500。下一步,在决策方框504,过程500确定目标是用于直接分支或间接分支。预取指令(pref_i)的各种预取插入将在此后描述。
未采取的分支/强采取的预测之后的IC未命中
如果确定指令缓存(IC)345未命中已经发生,且过程500在决策方框506确定它是未采取的分支,并在决策方框508进一步确定分支预测引擎332表示强采取的路径预测,那么动态优化器310的预取算法312认为这个地址为循环的贯穿(fall-through)路径,其使分支预测引擎饱和。预取算法312导致预取指令(pref_i)在循环体中的插入,因此,请求在循环的最后迭代被发出。尤其是,预取贯穿地址指令(pref_i_fall_through_address)由前端330在用于分支的贯穿地址的预取请求中转换,因此,由预取引擎340插入的指令是:pref_i_fall_through_address(方框510)。
采取的分支/强未采取的预测之后的IC未命中
如果确定指令缓存(IC)345未命中已经发生,且过程500在决策方框506确定它不是未采取的分支但是被确定为是采取的分支(决策方框515),并在决策方框518进一步确定分支预测引擎332表示强未采取的预测(决策块518),那么动态优化器310的预取算法312认为分支预测引擎332对于预测这个分支无效。因此,预取算法312导致在分支的采取的路径的预取地址的预取指令(pref_i)的插入。尤其是,前端330将这个指令转换为用于在分支的采取的路径的地址的预取请求。在这种情况下,由预取引擎340插入的指令是对于在分支的采取的路径的地址的预取请求(pref_i_taken_path_addr)(方框520)。
未采取的分支/弱采取的预测之后的IC未命中
如果确定指令缓存(IC)345未命中已经发生,且过程500在决策方框506确定它是未采取的分支,并在决策方框508进一步确定分支预测引擎332不表示强采取的预测,而相反的是在决策块530被确定为是弱采取的预测,那么动态优化器310的预取算法312认为这个地址为非偏分支的目标。基于此,预取算法312为贯穿地址插入预测的预取指令(pref_i.P)。无论这个预测的pref_i指令(pref_i.P)何时从前端330传递,它将:
A)如果分支预测单元332提供对分支的强预测,则预测的pref_i指令(pref_i.P)被忽略——其基本原理是分支预测单元332具有高置信度,预取请求可以导致指令缓存被不可忽视的可能性污染。应该注意的是对于特殊的分支,分支预测单元的置信度可以在应用的执行期间改变;或者
B)如果分支预测单元332提供对分支的弱预测——那么pref_i.P指令被转换为针对贯穿地址的指令缓存预取请求。因此,由预取引擎340插入的指令是pref_i.P fall_thr_addr(方框532)。
应该注意的是,pref_i指令的.P标志表示其已被预测,即如果分支预测单元332以高置信度预测相应分支,那么前端330应该忽略它。在这种情况下,pref_i.P指令将被认为是pref_i指令的一个版本。
采取的分支/弱未采取的预测之后的IC未命中
如果确定指令缓存(IC)345未命中已经发生,且过程500在决策方框506确定它不是未采取的分支而是被确定为是采取的分支(决策方框515),并在决策方框518进一步确定分支预测引擎332不表示强未采取的预测(决策块518),但是相反表示弱未采取的分支,那么动态优化器310的预取算法312认为这是个与“未采取的分支/弱采取的预测之后的IC未命中”相同的算法,但是替代贯穿地址,它预取采取的路径地址。因此,在这种情况下,由预取引擎340插入的指令是用于采取的路径地址的预测预取指令(pref_i.P taken_path_addr)(方框542)。
间接分支之后的IC未命中
如果确定指令缓存(IC)345未命中已经发生,且过程500在决策方框504确定寻求的目标不是通过直接分支而是通过间接分支(决策方框550),那么动态优化器310的预取算法312认为间接分支预测器对于预测下一个地址无效。为了防止错误预测,预取算法312为这个分支检查它的目标表314并定义大部分常见共同的目标地址(方框552)。预取算法312为大部分常见共同目标插入pref_i指令。在这种情况下,由预取引擎340插入的指令可以包括诸如pref_i targetl,pref_i target2等指令(方框554)。
应该注意的是,对于所有的情况,在导致未命中的指令之前通过预取引擎340由动态优化器310的预取算法312插入pref_i指令。进一步地,需要注意的是,本发明的实施例通过触发指令缓存345中的预取来解决高未命中率的问题。尤其是,动态优化器310通过观察应用执行来使用预取算法312预测访问是否导致未命中并评估影响。如果预测代价为高(例如,当指令缓存345未命中遵循错误预测的分支),那么动态优化器310就导致特殊的预取指令(pref_i)的插入,该特殊的预取指令预取指令缓存345中的指令从而将未命中转换为命中。
此处公开的机制的实施例可以用硬件,软件,固件,或这些实现方法的组合来实现。本发明的实施例可以作为在可编程系统上执行的计算机程序或程序代码来实现,该可编程系统包括至少一个处理器,数据存储系统(包括易失性和非易失性存储器和/或存储元件),至少一个输入设备,以及至少一个输出设备。
程序代码可以提供输入数据以执行此处描述的功能,并生成输出信息。输出信息可以应用于一或多个输出设备,以已知的形式。为了本应用的目的,处理系统包括具有处理器的任意系统,处理器例如;数字信号处理器(DSP),微控制器,专用集成电路(ASIC),或微处理器。
程序代码可以用高级程序或面向对象程序语言来与处理系统通信实现。如果需要的话,程序代码还可以用汇编或机器语言实现。事实上,此处描述的机制不被限制到任何特定的编程语言的范围。在任何情况下,语言可以是编译语言或解释语言。
至少一个实施例的一或多个方面可以通过存储在机器可读介质上的代表性数据来实现,该机器可读介质代表处理器中的各种逻辑,其当被机器读取时,使得机器制造逻辑以执行此处描述的技术。这种代表性,已知为“IP核”可以存储在有形的机器可读介质上,并提供给各种客户或制造设备以加载到制造机器中,其实际上制造逻辑或处理器。这种机器可读存储介质可以包括,但不限制于,由机器或设备制造的或形成的颗粒的非易失性,有形的排列,该机器或设备包括存储介质例如,硬盘,任何其他类型的盘,包括软盘,光盘,只读存储器光盘(CD-ROM),可擦写光盘(CD-RW),磁光盘,半导体设备例如,只读存储器(ROM),随机存取存储器(RAM)例如,动态随机存取存储器(DRAM),静态随机存取存储器(SRAM),可擦写可编程只读存储器(EPROM),闪存,电可擦写可编程只读存储器(EEPROM),磁或光卡,或任何适用于存储电子指令的其他类型介质。
因此,本发明的实施例还可以包括非暂时性的,有形的机器可读介质,其包括用于执行本发明的操作实施例,或包括设计数据,例如HDL,其定义了结构,电路,装置,处理器和/或此处描述的系统特征。这种实施例还可以涉及程序产品。
此处公开的指令的某些操作可以由硬件组件执行,且可以嵌入到机器可执行指令中,其被用于促使或至少产生用执行操作的指令编程的电路或其他硬件组件。仅举几个例子,电路可以包括通用目的或特殊目的的处理器,或逻辑电路。操作还可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可以包括特殊的或特定的电路,或其他响应于机器指令或派生自机器指令的一或多个控制信号的逻辑,以存储指令特殊结果操作数。例如,此处公开的指令的实施例可以在图1和2的一或多个系统中执行,且指令的实施例可以存储在程序代码中以在系统中执行。此外,这些图的处理元件可以采用此处详细的具体的流水线和/或体系结构(例如,按顺序的体系结构以及不按顺序的体系结构)之一。例如,按顺序的体系结构的解码单元可以解码指令,将解码指令传递给向量或标量单元等。
出于解释目的,在全部上述描述中提出了大量的特殊细节,以提供对本发明的透彻理解。然而显然,对于本领域技术人员而言,本发明可以无需某些这些特殊细节来实现。因此,本发明的范围和精神应当由所附的权利要求来判断。
Claims (20)
1.一种用于管理从指令缓存中的指令缓存预取的处理器,包括:
预取引擎;
分支预测引擎,其耦合至所述预取引擎,并被配置为用于预测分支的结果;以及
动态优化器,其耦合至所述预取引擎,并被配置为用于控制:
识别常见指令缓存未命中;以及
将预取指令从预取引擎插入到指令缓存。
2.如权利要求1所述的处理器,其中,如果分支的类型是直接分支,那么从预取引擎插入到指令缓存的预取指令基于所采取的分支曾具有强预测还是弱预测。
3.如权利要求1所述的处理器,其中,如果分支的类型是直接分支,那么是否执行预取指令依赖于预测的置信度。
4.如权利要求1-3中的任一项所述的处理器,其中,动态优化器进一步包括表,用于存储简档信息,所述简档信息至少包括未命中的指令的地址。
5.一种计算机系统,包括:
存储器控制中枢,其耦合到存储器;以及
处理器,其耦合到所述存储器控制中枢,并被配置为用于管理指令缓存预取,包括:
预取引擎;
分支预测引擎,其耦合至所述预取引擎,并被配置为用于预测分支的结果;以及
动态优化器,其耦合至所述预取引擎,并被配置为用于控制:
识别常见指令缓存未命中;以及
将预取指令从预取引擎插入到指令缓存。
6.如权利要求5所述的计算机系统,其中,如果分支的类型是直接分支,那么从预取引擎插入到指令缓存的预取指令基于所采取的分支曾具有强预测还是弱预测。
7.如权利要求5所述的计算机系统,其中,如果分支的类型是直接分支,那么是否执行预取指令依赖于预测的置信度。
8.如权利要求5-7中的任一项所述的计算机系统,其中,动态优化器进一步包括表,用于存储简档信息,该简档信息至少包括未命中的指令的地址。
9.一种用于管理从指令缓存中指令缓存预取的方法,包括:
识别常见指令缓存未命中;
预测分支的结果;以及
将预取指令从预取引擎插入到指令缓存。
10.如权利要求9所述的方法,其中,如果分支的类型是直接分支,那么从预取引擎插入到指令缓存的预取指令基于所采取的分支曾具有强预测还是弱预测。
11.如权利要求9所述的方法,其中,如果分支的类型是直接分支,那么是否执行预取指令依赖于预测的置信度。
12.如权利要求9-11中的任一项所述的方法,进一步包括创建表以存储简档信息,所述简档信息至少包括未命中的指令的地址。
13.一种计算机程序产品,包括:
包括代码的计算机可读介质,所述代码用于:
识别常见指令缓存未命中;
预测分支的结果;以及
将预取指令从预取引擎插入到指令缓存。
14.如权利要求13所述的计算机程序产品,其中,如果分支的类型是直接分支,那么从预取引擎插入到指令缓存的预取指令基于所采取的分支曾具有强预测还是弱预测。
15.如权利要求13所述的计算机程序产品,其中,如果分支的类型是直接分支,那么是否执行预取指令依赖于预测的置信度。
16.如权利要求13-15中的任一项所述的计算机程序产品,进一步包括代码,所述代码用于创建表以存储简档信息,所述简档信息至少包括未命中的指令的地址。
17.一种用于管理从指令缓存中指令缓存预取的设备,包括:
识别装置,被配置为用于识别常见指令缓存未命中;
预测装置,被配置为用于预测分支的结果;以及
指令插入装置,被配置为用于将预取指令从预取引擎插入到指令缓存。
18.如权利要求17所述的设备,其特征在于,如果分支的类型是直接分支,那么从预取引擎插入到指令缓存的预取指令基于所采取的分支曾具有强预测还是弱预测。
19.如权利要求17所述的设备,其特征在于,如果分支的类型是直接分支,那么是否执行预取指令依赖于预测的置信度。
20.如权利要求17-19中的任一项所述的设备,其特征在于,进一步包括表创建装置,被配置为用于创建表以存储简档信息,所述简档信息至少包括未命中的指令的地址。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/067964 WO2013101121A1 (en) | 2011-12-29 | 2011-12-29 | Managed instruction cache prefetching |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104220980A CN104220980A (zh) | 2014-12-17 |
CN104220980B true CN104220980B (zh) | 2018-01-19 |
Family
ID=48698355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180076122.3A Active CN104220980B (zh) | 2011-12-29 | 2011-12-29 | 经管理的指令缓存预取 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9811341B2 (zh) |
EP (1) | EP2798470A4 (zh) |
CN (1) | CN104220980B (zh) |
TW (1) | TWI620123B (zh) |
WO (1) | WO2013101121A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10558437B1 (en) * | 2013-01-22 | 2020-02-11 | Altera Corporation | Method and apparatus for performing profile guided optimization for high-level synthesis |
US10154072B2 (en) * | 2014-09-17 | 2018-12-11 | Microsoft Technology Licensing, Llc | Intelligent streaming of media content |
US9891916B2 (en) | 2014-10-20 | 2018-02-13 | Via Technologies, Inc. | Dynamically updating hardware prefetch trait to exclusive or shared in multi-memory access agent system |
JP6457836B2 (ja) * | 2015-02-26 | 2019-01-23 | ルネサスエレクトロニクス株式会社 | プロセッサおよび命令コード生成装置 |
US20170083338A1 (en) * | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Prefetching associated with predicated load instructions |
US10719321B2 (en) | 2015-09-19 | 2020-07-21 | Microsoft Technology Licensing, Llc | Prefetching instruction blocks |
US10915446B2 (en) | 2015-11-23 | 2021-02-09 | International Business Machines Corporation | Prefetch confidence and phase prediction for improving prefetch performance in bandwidth constrained scenarios |
US10296463B2 (en) * | 2016-01-07 | 2019-05-21 | Samsung Electronics Co., Ltd. | Instruction prefetcher dynamically controlled by readily available prefetcher accuracy |
CN106383926A (zh) * | 2016-08-29 | 2017-02-08 | 北京中电华大电子设计有限责任公司 | 一种基于Cortex‑M系列处理器的指令预取方法及电路 |
US10191845B2 (en) | 2017-05-26 | 2019-01-29 | International Business Machines Corporation | Prefetch performance |
CN111209043B (zh) * | 2018-11-21 | 2022-07-12 | 华夏芯(北京)通用处理器技术有限公司 | 一种超前指针法实现前端流水线中指令预取的方法 |
CN110825442B (zh) * | 2019-04-30 | 2021-08-06 | 成都海光微电子技术有限公司 | 一种指令预取方法及处理器 |
US20210342134A1 (en) * | 2020-04-29 | 2021-11-04 | Intel Corporation | Code prefetch instruction |
US11561796B2 (en) * | 2020-07-15 | 2023-01-24 | International Business Machines Corporation | Linked miss-to-miss instruction prefetcher |
CN112579175B (zh) * | 2020-12-14 | 2023-03-31 | 成都海光微电子技术有限公司 | 分支预测方法、分支预测装置和处理器核 |
US11960893B2 (en) * | 2021-12-29 | 2024-04-16 | International Business Machines Corporation | Multi-table instruction prefetch unit for microprocessor |
US11822922B2 (en) | 2021-12-31 | 2023-11-21 | International Business Machines Corporation | Miss-driven instruction prefetching |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
CN1300006A (zh) * | 1999-12-10 | 2001-06-20 | 国际商业机器公司 | 利用从分支预测得出的未来分支路径信息进行预取 |
CN101147127A (zh) * | 2005-02-03 | 2008-03-19 | 高通股份有限公司 | 指令预取机构 |
CN101539853A (zh) * | 2008-03-21 | 2009-09-23 | 富士通株式会社 | 信息处理单元、程序和指令序列生成方法 |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5367703A (en) | 1993-01-08 | 1994-11-22 | International Business Machines Corporation | Method and system for enhanced branch history prediction accuracy in a superscalar processor system |
US5704053A (en) * | 1995-05-18 | 1997-12-30 | Hewlett-Packard Company | Efficient explicit data prefetching analysis and code generation in a low-level optimizer for inserting prefetch instructions into loops of applications |
US6055621A (en) * | 1996-02-12 | 2000-04-25 | International Business Machines Corporation | Touch history table |
US6029228A (en) * | 1996-12-31 | 2000-02-22 | Texas Instruments Incorporated | Data prefetching of a load target buffer for post-branch instructions based on past prediction accuracy's of branch predictions |
US5822790A (en) * | 1997-02-07 | 1998-10-13 | Sun Microsystems, Inc. | Voting data prefetch engine |
US6167506A (en) * | 1997-11-17 | 2000-12-26 | Advanced Micro Devices, Inc. | Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location |
US6401192B1 (en) * | 1998-10-05 | 2002-06-04 | International Business Machines Corporation | Apparatus for software initiated prefetch and method therefor |
US6611910B2 (en) * | 1998-10-12 | 2003-08-26 | Idea Corporation | Method for processing branch operations |
US6308322B1 (en) * | 1999-04-06 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints |
US6799263B1 (en) * | 1999-10-28 | 2004-09-28 | Hewlett-Packard Development Company, L.P. | Prefetch instruction for an unpredicted path including a flush field for indicating whether earlier prefetches are to be discarded and whether in-progress prefetches are to be aborted |
US6560693B1 (en) * | 1999-12-10 | 2003-05-06 | International Business Machines Corporation | Branch history guided instruction/data prefetching |
JP2001249846A (ja) * | 2000-03-03 | 2001-09-14 | Hitachi Ltd | キャッシュメモリ装置及びデータ処理システム |
US6751708B2 (en) * | 2002-01-09 | 2004-06-15 | International Business Machines Corporation | Method for ensuring that a line is present in an instruction cache |
US20030145314A1 (en) * | 2002-01-31 | 2003-07-31 | Khoa Nguyen | Method of efficient dynamic data cache prefetch insertion |
US6951015B2 (en) * | 2002-05-30 | 2005-09-27 | Hewlett-Packard Development Company, L.P. | Prefetch insertion by correlation of cache misses and previously executed instructions |
US7032097B2 (en) * | 2003-04-24 | 2006-04-18 | International Business Machines Corporation | Zero cycle penalty in selecting instructions in prefetch buffer in the event of a miss in the instruction cache |
US7177985B1 (en) * | 2003-05-30 | 2007-02-13 | Mips Technologies, Inc. | Microprocessor with improved data stream prefetching |
US20050154859A1 (en) * | 2004-01-14 | 2005-07-14 | Arm Limited | Branch prediction in a data processing apparatus |
US8135915B2 (en) * | 2004-03-22 | 2012-03-13 | International Business Machines Corporation | Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator |
US8443171B2 (en) * | 2004-07-30 | 2013-05-14 | Hewlett-Packard Development Company, L.P. | Run-time updating of prediction hint instructions |
US7669194B2 (en) * | 2004-08-26 | 2010-02-23 | International Business Machines Corporation | Fine-grained software-directed data prefetching using integrated high-level and low-level code analysis optimizations |
JP4134179B2 (ja) * | 2005-02-04 | 2008-08-13 | 株式会社ソニー・コンピュータエンタテインメント | ソフトウエアによる動的予測方法および装置 |
JP2007041837A (ja) * | 2005-08-03 | 2007-02-15 | Nec Electronics Corp | 命令プリフェッチ装置及び命令プリフェッチ方法 |
US7457923B1 (en) * | 2005-05-11 | 2008-11-25 | Sun Microsystems, Inc. | Method and structure for correlation-based prefetching |
US20070150660A1 (en) * | 2005-12-28 | 2007-06-28 | Marathe Jaydeep P | Inserting prefetch instructions based on hardware monitoring |
US20070186049A1 (en) | 2006-02-03 | 2007-08-09 | International Business Machines Corporation | Self prefetching L2 cache mechanism for instruction lines |
US8099724B2 (en) * | 2006-02-28 | 2012-01-17 | Oracle America, Inc. | Fast patch-based method calls |
US20070239940A1 (en) * | 2006-03-31 | 2007-10-11 | Doshi Kshitij A | Adaptive prefetching |
US8935517B2 (en) * | 2006-06-29 | 2015-01-13 | Qualcomm Incorporated | System and method for selectively managing a branch target address cache of a multiple-stage predictor |
US7640422B2 (en) * | 2006-08-16 | 2009-12-29 | Qualcomm Incorporated | System for reducing number of lookups in a branch target address cache by storing retrieved BTAC addresses into instruction cache |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
US8060701B2 (en) * | 2006-12-08 | 2011-11-15 | Qualcomm Incorporated | Apparatus and methods for low-complexity instruction prefetch system |
US8146064B2 (en) * | 2008-04-04 | 2012-03-27 | International Business Machines Corporation | Dynamically controlling a prefetching range of a software controlled cache |
US7984265B2 (en) * | 2008-05-16 | 2011-07-19 | Oracle America, Inc. | Event address register history buffers for supporting profile-guided and dynamic optimizations |
US8078852B2 (en) * | 2009-05-28 | 2011-12-13 | International Business Machines Corporation | Predictors with adaptive prediction threshold |
US8583894B2 (en) * | 2010-09-09 | 2013-11-12 | Advanced Micro Devices | Hybrid prefetch method and apparatus |
US8533422B2 (en) * | 2010-09-30 | 2013-09-10 | Intel Corporation | Instruction prefetching using cache line history |
US20130013867A1 (en) * | 2011-07-06 | 2013-01-10 | Advanced Micro Devices, Inc. | Data prefetcher mechanism with intelligent disabling and enabling of a prefetching function |
-
2011
- 2011-12-29 WO PCT/US2011/067964 patent/WO2013101121A1/en active Application Filing
- 2011-12-29 EP EP11878987.4A patent/EP2798470A4/en not_active Withdrawn
- 2011-12-29 CN CN201180076122.3A patent/CN104220980B/zh active Active
- 2011-12-29 US US13/995,649 patent/US9811341B2/en active Active
-
2012
- 2012-12-20 TW TW101148746A patent/TWI620123B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
CN1300006A (zh) * | 1999-12-10 | 2001-06-20 | 国际商业机器公司 | 利用从分支预测得出的未来分支路径信息进行预取 |
CN101147127A (zh) * | 2005-02-03 | 2008-03-19 | 高通股份有限公司 | 指令预取机构 |
CN101539853A (zh) * | 2008-03-21 | 2009-09-23 | 富士通株式会社 | 信息处理单元、程序和指令序列生成方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2013101121A1 (en) | 2013-07-04 |
EP2798470A1 (en) | 2014-11-05 |
TW201346757A (zh) | 2013-11-16 |
US9811341B2 (en) | 2017-11-07 |
US20140019721A1 (en) | 2014-01-16 |
TWI620123B (zh) | 2018-04-01 |
CN104220980A (zh) | 2014-12-17 |
EP2798470A4 (en) | 2015-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104220980B (zh) | 经管理的指令缓存预取 | |
US10999214B2 (en) | Secure memory with restricted access by processors | |
Yazdanbakhsh et al. | RFVP: Rollback-free value prediction with safe-to-approximate loads | |
CN103154908B (zh) | 用于事务存储器的最后分支记录的装置、方法和系统 | |
Mutlu et al. | Research problems and opportunities in memory systems | |
CN102640124B (zh) | 用于数据流的储存感知预取的计算系统、方法以及预取单元 | |
US8230172B2 (en) | Gather and scatter operations in multi-level memory hierarchy | |
KR20130062999A (ko) | 이종 멀티프로세서 컴퓨팅 플랫폼 내에서의 애플리케이션 스케줄링 | |
EP1983439B1 (en) | Prefetching based on streaming hints | |
US9251048B2 (en) | Memory page management | |
US8495307B2 (en) | Target memory hierarchy specification in a multi-core computer processing system | |
CN105074655A (zh) | 用于取消对循环的数据预取请求的方法和设备 | |
JP5852446B2 (ja) | 並列コンピュータ・システムの性能を改良するための装置、方法及びコンピュータ・プログラム | |
US8850123B2 (en) | Cache prefetch learning | |
US10514920B2 (en) | Dynamically updating hardware prefetch trait to exclusive or shared at program detection | |
US20100269118A1 (en) | Speculative popcount data creation | |
Lee et al. | Decoupled value prediction on trace processors | |
US20140282565A1 (en) | Processor Scheduling With Thread Performance Estimation On Core Of Different Type | |
TWI469047B (zh) | 使用儲存預先擷取來消減久存潛時之方法和裝置 | |
Chen et al. | An adaptive data prefetcher for high-performance processors | |
Saporito et al. | Design of the IBM z15 microprocessor | |
Chen et al. | Algorithm-level Feedback-controlled Adaptive data prefetcher: Accelerating data access for high-performance processors | |
Maldikar | Adaptive cache prefetching using machine learning and monitoring hardware performance counters | |
Weidendorfer | Cache Performance Analysis with Callgrind and KCachegrind | |
KR100282225B1 (ko) | 데이타 캐쉬 메모리의 제어장치 |
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 |