CN1123826C - 预取由转移历史引导的指令/数据的方法和装置 - Google Patents
预取由转移历史引导的指令/数据的方法和装置 Download PDFInfo
- Publication number
- CN1123826C CN1123826C CN00135055A CN00135055A CN1123826C CN 1123826 C CN1123826 C CN 1123826C CN 00135055 A CN00135055 A CN 00135055A CN 00135055 A CN00135055 A CN 00135055A CN 1123826 C CN1123826 C CN 1123826C
- Authority
- CN
- China
- Prior art keywords
- instruction
- transfer
- data
- looking ahead
- information
- 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.)
- Expired - Fee Related
Links
- 238000012546 transfer Methods 0.000 claims description 281
- 238000000034 method Methods 0.000 claims description 64
- 230000009471 action Effects 0.000 claims description 52
- 230000008569 process Effects 0.000 claims description 24
- 230000032683 aging Effects 0.000 claims description 12
- 230000007704 transition Effects 0.000 claims description 4
- 230000007246 mechanism Effects 0.000 abstract description 38
- 230000015654 memory Effects 0.000 description 46
- 230000000875 corresponding effect Effects 0.000 description 26
- 230000015572 biosynthetic process Effects 0.000 description 24
- 238000005516 engineering process Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 230000008878 coupling Effects 0.000 description 9
- 238000010168 coupling process Methods 0.000 description 9
- 238000005859 coupling reaction Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 230000002596 correlated effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 230000001351 cycling effect Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- YOILXOMTHPUMRG-JSGCOSHPSA-N (4as,10bs)-4-propyl-3,4a,5,10b-tetrahydro-2h-chromeno[4,3-b][1,4]oxazin-9-ol Chemical compound C1=C(O)C=C2[C@@H]3OCCN(CCC)[C@H]3COC2=C1 YOILXOMTHPUMRG-JSGCOSHPSA-N 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 206010027476 Metastases Diseases 0.000 description 1
- 241001647769 Mirza Species 0.000 description 1
- 241000220317 Rosa Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000013277 forecasting method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000009401 metastasis Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
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/3824—Operand accessing
- G06F9/383—Operand 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/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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- 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
-
- 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
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
本发明的机制采用转移指令作为预取触发,把预取的指令和数据送到高速缓冲器。如果在转移指令之后预测的执行路经匹配前面经历的执行路经,预取被起动。执行路经的匹配用转移历史队列来确定,队列中记录了程序中各转移的转移结果。对该队列中的每个转移,一转移历史屏蔽记录下面N个转移结果及当作跟随转移指令之后的执行路经的编码。转移指令同屏蔽一起同预取地址(指令或数据地址)相关,并且在将来当转移再次被执行时,用来触发预取。
Description
技术领域
本发明涉及从存储器中预取指令和数据的一种方法和装置。特别是公开了一种方法和设备,通过用转移预测信息,有选择地发布预取来改进高速缓存性能。
背景技术
当前计算机系统技术的状况是处理器速度的提高比主存储器速度提高要快得多。这种处理器速度和主存储器速度的不匹配,现在正被处理器和主存储器之间越来越大的随机存取“缓冲区”或“高速缓存”所遮掩。
数据在计算机系统的存储层中被典型地传递。在这体系中最上面是处理器,最下面是I/O存储设备。处理器与一个或者多个高速缓存(随机存取缓冲区)相连接。一类高速缓存是指令高速缓存,用来以最小延迟为处理器提供指令。另一类高速缓存是高速缓冲区,用来保留即将可能用到的数据。
两类高速缓存可以被连接到其它高速缓存或者存储器层中的主存储器。当一个程序被执行时,处理器取出并执行来自主存储器(或者一个指令高速缓存)中的程序指令。这样使得处理器请求一个高速缓存入口或者修改或者重写高速缓存入口及主存储器部分。
图1显示了根据现有技术的数据处理系统100。这个数据处理系统100有一个高速缓存,它可只由单个高速缓存单元或者多个高速缓存单元组成。这个高速缓存可以被分为数据高速缓存145和指令高速缓存110,这样指令和数据可以以最小的延迟同时提供给数据处理系统100。数据处理系统100还包含存储数据和指令的主存储器150、允许指令高速缓存110和数据高速缓存145与主存储器150通信的存储器系统接口105、检索执行程序指令的取指单元115。数据处理器系统中还包含一个解码和调度单元120,它用来解译由取指单元115所检索的指令,并把解译信息同一个或者多个执行单元相连,及包含转移单元125,功能单元130和存储器单元140的很多执行单元,用来解译信息并执行指令。转移单元125负责执行程序转移,根据程序执行修改程序计数器计算。通用功能单元130表示一个或者多个执行单元,这些单元能根据要求对不同类型的数据实施如加法、减法、乘法、除法、移位和浮点运算操作。典型地,一个处理器将有多个执行单元来改进性能。在这个说明中,所有的转移都被送到转移单元125。所有其它指令都送到通用功能单元130。所选择的这个配置具有简明性,并显示出清楚的设计。很明显,许多其他执行单元的配置被使用了通用的或者特殊目的的计算器件。与每一个执行单元相关的是一个执行队列(没有表示出)。这个执行队列保存等待执行的解码指令。存储器单元140负责计算被解码指令指定的存储器地址。寄存器堆135也被包含在数据处理系统100中,用来暂时保存数据。当然,除寄存器堆135外,其它存储结构也可以被用来代替,如那些被用做处理推测执行和明确中断执行的存储结构。样例寄存器堆135被描述为可被使用的存储结构的例。
当一个程序被执行时,程序计数器或者序列预算机制把指令地址和取指令115连接。取指令115依次把指令地址和指令高速缓存110相连,如果和指令地址相对应的指令已经存在于指令高速缓存110中,指令高速缓存返回这个指令到取指令115。否则,指令高速缓存110送这个指令地址到存储器系统接口105。存储器系统接口105在主存储器150中定位这个指令地址,并检索该地址中存储的指令。然后,该指令被送到指令高速缓存110,最后从此返回取指令115。当该指令到达取指令115时,如果在解码和调度单元120中具有可以用来存放这种指令的缓冲区空间,则该指令被送到解码和调度单元120。然后该解码和调度单元120从被送来的指令中译码信息,并确定每一个指令和相关的译码信息是否被放在一个执行单元的执行队列中。相称的执行单元接受该指令和来自译码和调度单元120的任何被译码的信息,然后应用译码信息存取寄存器堆135中数据值来执行指令。当指令被执行后,结果被写入寄存器堆135。
除了计算存储器地址的通用功能外,存储器单元140负责执行两种特殊类型的指令:加载和存储。
加载指令是请求在寄存器堆135中被检索和存储特别的数据。存储器单元140通过向数据高速缓存发送一个请求而执行一个加载指令。如果这个数据在数据高速缓存145并且有效,则数据高速缓存把该数据返回给存储单元。如果这个数据没有在数据高速缓存145中或者无效,则根据加载指令指示,经主存储器接口105,数据高速缓存145存取主存储器150中特别数据的存储地址。该数据从主存储器150被返回到数据高速缓存145,从此被最后返回到存储器单元140。存储器单元140存储该数据到寄存器堆135中,并可能传递该数据到其他功能单元130或者转移单元125。存储指令是把数据写入主存储器150中一个特殊存储地址的请求。为了存储,一个请求被存储单元140发送到数据高速缓存145,指定一个数据存储地址和特殊的数据来写入到那个数据存储地址。如果和指定的数据存储地址相对应的数据在数据高速缓存中被定位,并且有合适的存取许可,则该数据被用由存储器单元140指定的特殊数据复写。然后数据高速缓存145通过存储系统接口105存取主存储器中的特殊的存储地址,并把该数据写入该地址。
高速缓存的核心是一个数据高速缓存145,一个指令高速缓存110,或者是一个组合的高速缓存,该高速缓存在执行一个程序时被重复查询存在或者不存在数据。特别是数据高速缓存145被存储单元140查询,并不考虑是否存储单元140执行一个加载或者存储指令。与此相似的,指令高速缓存110被取指令115重复查询来获取一个特殊的指令。
一个高速缓存有许多“块”,分别存储各种指令和数据值。在高速缓存中的块被分成一个或者多个叫做“同余类(congruence classes)”的块组。根据预先设置的变换函数,对于任一给定的存储块有唯一的同余类,在高速缓存中,每一个块可以被影射。在一个同余类中块的数量被叫做该高速缓存的结合性,例如,2-路设置连接意思是对于任何给定的存储块,高速缓存中有两个块,存储块可以被影射入;然而,在下一级存储器中,几个不同的块可以被影射到任何给定同余类。
图例的高速缓存线(块)包含一个地址标记域、一个状态位域、一个包含性位域、和一个存储实际指令或者数据的值域。状态位域和包含位域被用来保持高速缓存在一个多处理器数据处理系统中的结合性。地址标记是相应存储块的全地址的一个子集。用地址标记域中的一个标记比较输入地址的匹配,指示一个高速缓存的“命中”。在另一方面,如果请求的标记不存在于高速缓存,或者该标记存在于高速缓存中,但有一个错误的“存取许可”,则一个高速缓存“未命中”发生。如果当请求时数据正在被数据处理系统中的另一个数据处理器读或者写,则数据可能有错误的存取许可。在高速缓存中所有地址标记的集合和状态位和包含域被称作为目录,且所有值域的集合是高速缓存入口阵列。
如果一个高速缓存发生未命中,所请求的数据从主存储器被检索并插入到高速缓存中,该数据可替代其他被存放在高速缓存中的数据。有关从主存储器中取数据的延迟通常远大于数据已存在于高速缓存中情况,因为主存储器没有高速缓存的高速度存取的能力。与存储器数据存取相关的延迟通常被叫做“存取等待时间”或者“等待时间”。在所有的情况下,高速缓存的大小是限定的。当高速缓存已满,因确定那一个数据应该用高速缓存。当一个同余类中所有的块都已满,并且高速缓存接收到请求影射到同余类的存储位置时,该高速缓存必须“驱逐”当前同余类中的一个块。高速缓存通过一个算法选择一个要被驱逐的块(例如,近来最少使用的(LRU),随机,假-LRU等)。如果被选择的块中的数据被修改,这些数据被写到可以是其他高速缓存(如最初情况或者板上高速缓存)存储器层的下一级。根据包含原理,层中下面的层面将已有一个块可以存储被写入的修改数据。但是,如果所选择块中的数据没有被修改,该块只是简单的被重写。这个从层中的一个层面去掉一个块的过程被叫做“驱逐”。在这个过程结束时,高速缓存不再保留一个被驱逐块的付本。
由于到一个存储器或者高速缓存层中下一个层面的等待时间通常比存取高速缓存的时间要显著的长,许多技术被提出以隐藏或者减少这个等待时间。预取指就是这样一个技术。预取指机制试图预测存储器中那一些部分将被程序使用,并在处理器正常请求它们之前,将其取到高速缓存中。如果该预取机制成功,那么存储器的一行足够前和及时地被送入高速缓存,从而避免了由高速缓存未命中而造成的任何处理失速。
预取技术分属于两类即基于硬件和基于软件。基于软件预取技术包含在程序中插入一个预指令。例如,在1991年4月的编程语言和操作系统体系结构支持第四次国际会议会刊中,Callahan等的文章“Software Prefetch”,(pp40-52),描述了在指令集中加一条新指令来实现预取。同样,IBM/6000和PowerPC处理器有一个指令,Data-Cache-Block-Touch(dcbt)指令(通常称为touch指令)预取存储器中的一行到高速缓存中。编译器(或者程序员)可以在真正用到该数据前插入这些预取指令到程序中,确保当程序中后面的指令被执行时存储器的行将在高速缓存中。touch指令可以被用来预取指令和数据。例如,touch指令可以被插入到程序中,在即将到来的转移之前,预取位于转移目标上的指令。同样,一个touch指令可以被放置在加载指令之前,来预取数据到高速缓存中。
基于硬件预取技术基于以前的模式,来预测将来存储器的存取模式。这些技术不须改变现存的程序,所以无须对程序员或者编译器的干涉。如在1992年10月的编程语言和操作系统体系结构支持第五次国际会议会刊中,Chen和Bear的文章“Reducing Memory Latency viaNon-blocking and Preferching Catches”(pp51-61)中提出了一个详细的方法称为“Lookahead Data Prefetching””。该技术要求对传统的数据高速缓存有一个支持单元。该支持单元是基于预测指令流的执行和参考加载/存储指令中相关的操作数。后者及他们的参考模式,被保存在一个参考预测表(RPT)中,该表被组织成一个有规则的高速缓存。RPT中的入口由指令地址、上次存取产生的操作码地址、用来编码有限状态机的两个状态位组成,状态机用来记录存取模式和确定随后的预取是否被击活或者禁止。该RPT由先前的程序计数器(LA-PC),先于常规程序计数器被存取。该LA-PC用动态预测器帮助,以PC相同方式增加和保持。该LA-PC/RPT组合被用来检查RPT中常规数据存取和产生预取请求。该预取数据块将被放入数据高速缓存中。支持单元并没有在关键的路径上。这种方式除增加总线通信量外并没有增加循环时间和数据存取等待时间。这项技术成功工作的关键是程序计数器和LA-PC之间的距离,以至被预取的数据正好在需要它之前到达。不正确的转移预测限制了距离以防其增长太大。
为增加预取数据和用到该数据时之间的时间,在High PerformanceComputing,Lecture Notes in Computer Science V.1336,1997中(pp51-70),Veidenbaum在他的文章“Instruction Cache PrefetchingUsing Multilevel Branch Prediction”提出一种方法。在这个方法中,转移指令的目标是用多层转移预测器(具备在同一时间预测多于一个转移的能力)来预取。该预测器由转移历史寄存器(BHR)、预测表(PT)、和一个相关的控制逻辑组成。BHR包含一个程序计数器、目标地址和当前发生/未发生前面K个转移加当前转移的历史。该发生/未发生历史以一位被存储,并在每次转移时左移使当前转移信息移入。一个PT入口保留有2K的目标地址和2位饱和计数器来使预取可能或者不可能。当当前指令是一个转移时,程序计数器被用来选择一个PT入口。计数器用2K计数中的最大值标识,和计数器相关的目标地址被作为预测返回。无论何时当预取行在高速缓存中被用时计数器被增加,如果在高速缓存中没有被使用计数器被减小。PT入口在每当K转移被装入BHR时被更新。本技术依靠转移预测器的准确性和只预取目标地址。它仅被应用于指令高速缓存。
Liu和Kaeli在他们的文章中,“Branch-Directed andStride-Baswd Data Catche Prefetching”在International Conference OnComputer Design会刊(pp225-229),1996,提出了一种与数据预取相似的技术。在这项工作中,目标路径中下一个未命中数据地址伴随目标地址存储在转移目标缓冲区中。每当被预测“发生”转移指令,数据地址被预取。该方法也用到跨距预取,其中每一数据地址有一个2位的计数器来检测跨距存取模式。在这项技术中预测未来距离仅是一个转移,所以能补偿的等待时间比本专利提出的技术为小。
有许多涉及预取机制的专利,每一个都有一定的长处和不足。
例如,有几项专利叙述的预取数据在程序循环中。
授权于Santhanam的美国专利5,704,053叙述了一种机制,其中的预取指令被加到程序循环中。该技术通过以前应用操作中执行轨迹,来决定在循环中的何处插入预取指令。
授权于Hsu的美国专利5,843,934确定在循环中程序的存储器存取模式。预取在循环体中均匀被调度。该技术避免了预取簇,特别是当一个预取因替代一个以前更新的高速缓存行要抹掉或者回写时。根据循环重复的次数和在每个循环重复上执行的预取的次数,预取被调度。
授权于Widigen的美国专利5,919,256叙述了一种机制,这里的数据是从一个操作码高速缓存而不是从参考存储器中被预取的。从操作码高速缓存中取得的数据值然后被用于预测执行指令。如果从操作码高速缓存中获得的数据值等于实际的操作码值,则该预测执行被允许完成。如果这两个值不相等,那么所有的预测执行被放弃。
授权于Mirza的美国专利5,357,618中,根据跨距1或者N或者跨距值的一个组合行确定预取长度。跨距寄存器被用来计算程序的参考模式,而特殊的指令被用来在通用目的寄存器和跨距寄存器之间传送值。编译器应用这些新指令来控制在循环内的预取。
更通常的预取技术包括美国专利5,896,517(Wilson),应用后台存储移动(Background Memory Move BMM)机制来改善一个程序的性能。BMM机制在存储器层的不同层面之间执行后台存储移动操作,与平常处理器并行操作。
美国专利5,838,945(Emberson),描述一个预取机制,这里可变尺寸的行被预取入高速缓存。一个特殊的指令被用来指示被预取的高速缓存行的长度。高速缓存设置预加载预取数据的位置和预取的类型(指令或者数据)。
美国专利5,918,246(Goodnow),描述一种预取方法,该方法应用编译器产生一个程序影射表。该程序影射表将被用来预取合适的指令和数据信息到高速缓存中。该程序影射表包含转移地址位置和转移目标,及被该程序所用数据的位置。
美国专利5,778,435(Berenbaum),描述一种基于历史的预取机制,这里的高速缓存未命中地址被保存在缓冲区中。该缓冲区被前面的发出N次循环的一个指令地址变址。该缓冲区的值然后被用作预取地址来企图避免高速缓存未命中。
美国专利5,732,242(Mowry),描述一种机制,这里的预取指令包含“提示(hint)”位。该提示位指示那一个预取操作被执行,也就是该预取是专用的或者是只读,及设置行的那一个高速缓存被加载入(最少是近期被用到的或者上次被用到的)。
美国专利5,305,389(Palmer),描述一种预取机制,该机制存储了模式存储器中的一个程序的存取模式。通过比较当前一组对象(存取)和保存在模式存储器中的对象,预取候选者被获得。模式匹配不须证明存储在模式存储器中的对象完全匹配来产生一个预取候选。预取是企图保留每一个匹配模式对象。
美国专利5,774,685(Dubey),使用编码转移路径的预取指令,由编译器在预取指令和使用该数据的指令之间决定,在此处转移路径表示干预转移的动作(发生或未发生)。每一个预取行用包含在预取指令中的预测转移路径信息所标记。特殊的硬件来比较一个被预取的行的标记信息和处理器所执行的转移所起的实际动作。当被标记的信息不同于实际的转移动作,则预取行被提前放弃,而当具有标记预取行和实际转移动作相同时,则预取行被较长的保留在高速缓存中。
与此相似,美国专利5,742,804(Yeh)描述了仅预取指令的机制。在转移将到来前,转移预测指令被插入程序中。每一个转移预测指令充当一个预取指令,并包含预测即将到来的转移的方向的预测域(发生或未发生)、一个预取地址、预取的字节数和一个轨迹矢量,它指示即将到来的转移的转移路径。该轨迹矢量通过比较即将到来的转移动作和轨迹矢量所预测的动作,用来取消发布预取。这里不存在预取数据机制。
此外,Puzak的美国专利(申请号Y0995-225)描述了有条件执行预取指令的一个方法。该机制应用一个历史表,该表记录了以前执行的预取信息的预取指令是否真实地被处理器利用。该表被叫做Touch-History_Table。该表中包含的信息被用来只执行那些预取有用数据的预取指令和放弃的(没被执行)预取的没有用的数据的预取指令。
发明内容
本发明的一个目的是说明以足够的领先时间,用转移历史将指令和数据预取到高速缓存的方法,来覆盖等待时间。在本发明中,我们始终注意紧接转移指令的控制流路径,及该路径上发生的高速缓存未命中。如果在程序执行中重复相同的转移指令,我们把预测路径和与该转移相关的每个未命中地址最近联系的路径比较。当路径匹配时,我们预取数据(如果没有存在)。预取的有用性是由计数器饱和状态确定,并且如果发现没使用,该预取可以被关掉。
本发明的另一个目的是增加发布一个预取和随后使用该数据之间的时间。为了达到这个目的,和未命中地址相关的转移指令在查看到预取“时效性”后可以被动态被改变。指令和数据都可以应用这个机制来被预取。
根据本发明的一个方面,提供了一种方法,用以在一包含逻辑上连接在存储器和至少一个处理器单元之间的高速缓冲器的系统中,把预取信息送入高速缓冲器以由至少一个处理器单元在处理指令流时使用该预取信息,该方法包括下列步骤:
产生第一路径数据,其中该第一路径数据表示一条第一路径,该第一路径包含一个预取触发指令和使用通过与该预取触发指令相关的一个预取操作所预取的信息的一个指令;
产生第二路径数据,其中该第二路径数据表示一条预测的执行路径;及
比较第一路径数据和第二路径数据,以判断所述第一路径是否落在所述预测的路径中,以执行预取操作。
根据本发明的另一个方面,提供了一种装置,用于在一包含逻辑上连接在存储器和至少一个处理器单元之间的高速缓冲器的数据处理系统中,把预取信息送入高速缓冲以由至少一个处理器单元在处理指令流时使用该预取信息,该装置包括:
用于产生第一路径数据的预取逻辑,其中第一路径数据表示一条第一路径,该第一路径包含一个预取触发指令和使用通过与该预取触发指令相关的一个预取操作所预取的信息的指令;
用于产生第二路径数据的转移路径预测逻辑,其中该第二路径数据表示一条预测的执行路径;及
预取执行逻辑,用于比较所述第一路径数据和所述第二路径数据以判断所述第一路径是否落在所述预测的第二路径中,以执行预取操作。
本发明的新颖的特征在附加的权利说明书中被阐明。该发明本身,及优选的使用方式、更进一步的目标、及其优点,结合附图,参照实施例的详细说明将非常好理解。其中:
附图说明
图1是根据现有技术的一个数据处理系统的方块图。
图2是根据本发明实施例的一个数据处理系统的方块图。
图3是一个程序控制流程图的举例。
图4(A)是根据本发明中图2的转移单元的功能性方块图。
图4(B)描述了存储在图4(A)转移预测逻辑中的一个表入口的内容。
图5是根据本发明中图4转移历史队列的一个功能性方块图。
图6是根据本发明中图4预取指表的一个功能性方块图。
图7是根据本发明中图4中挂起转移预测逻辑的一个功能性方块图。
图8是根据本发明中图7挂起转移预测队列的一个功能性方块图。
图9是根据本发明解释图7的转移预测命中逻辑操作的一个流程图。
图10是根据本发明解释图7的转移解码逻辑操作的一个流程图。
图11是根据本发明解释图7的转移执行逻辑操作的一个流程图表。
图12是根据本发明举例描述了L1高速缓存目录入口的内容。
图13是根据本发明举例描述了L2高速缓存目录入口的内容。
图14是根据本发明的实施例解释的预取运算法的一个流程图。
图15是根据本发明图例的实施例解释了L1高速缓存未命中动作的流程图。
图16是根据本发明的实施例解释的L1高速缓存上命中预取指线动作的流程图。
图17是根据本发明的实施例解释的从L1高速缓存上替代预取线的动作的流程图。
具体实施方式
现在开始陈述预取机制操作的一般说明,及更详细说明如下。图2是根据本发明的优先实施例的数据处理系统200的一个方块图。尽管数据处理器200和数据处理器100有一些相似之处,但在一些关键方面不同。
根据本发明的方法和设备一个预取单元255被加入到200中。预取单元255和转移单元225、数据高速缓存245及指令高速缓存210相联系。就其功能,预取单元255负责保留和执行程序的预取请求。特别是,预取单元保留一个预取请求的一个预取“触发”。该触发相应于一个与转移指令相关的程序计数器值。此外,预取单元保留被预取的指令/数据的存储器地址。
概括的说,预取单元255在下述情况被存取(i)当转移单元225执行一个程序转移时,(ii)当一个加载或者存储指令(由存储单元240执行)引起一个高速缓存未命中时,(iii)当一个加载或者存储指令(由存储单元240执行)引起一个高速缓存命中一个预取行时,(iv)预取行被没有被用的高速缓存替代时。预取单元在解释了本发明的优选事实例的操作方法之后,作更详细描述。
我们以通过图3所示的程序的控制流程图来开始描述我们的专利申请。本例的目的,我们定义一个基本块作为从一个转移目标到转移指令的程序段。图3中B1-B7是7个基本的块。在基本块B1,B2和B4的末尾的转移指令被分别命名为Br1,Br2和Br4。在基本块B7中数据A(301)未命中。预取包含数据A的存储器块的最早时机是在转移Br1的结果被知道之后。每一个转移的未发生的路径如树叉的左边所示,而发生路经如树叉的右边所示。如果Br1是未发生(即控制流到基本块B2),则数据A被明确需要。但是如果Br1被发生(即控制流到基本块B3),则预取包含数据A的块是没有用的。
本发明的要点是记住这个事实,如果控制流路径是B1-B2-B4(303)或者B1-B2-B5(304),则预取包含数据A的块是有用的,即A、转移Br1和它的控制流路径之间的关系被保持。当一个程序的执行流被重复时,该转移动作也被重复,当基本块B在程序执行流中递归时,我们能利用该信息。我们的预取机制用转移预测器来预测从B1发出的可能的控制流路径,并当B1是与上次未命中数据A有关时,预测和随后的控制流路径比较。当被预测的路径是303或者是304,如果数据A包含行还没有存在于高速缓存,则我们对数据A包含行发布一个预取请求。因而,转移指令B1为未命中数据A作预取触发。
图4A显示了支持该预取机制的转移单元225的主要要素。在技术上转移可以很准确的预测是众所周知。用现代转移预测运算,对转移预测机制来说,通常获得预测准确率达90%或者更高。转移这个可被观测的预测性表示了这个潜在的规则,允许转移预测机制记录和预测有用的预取。我们现在详细描述转移单元225的子单元。
转移预测逻辑(BPL)(403)
转移预测逻辑(BPL)(403)为以前被执行的转移记录转移动作信息(发生或未发生)。同时也通过发生或未发生转移序列指导预取指机制,和从转移执行单元(402)和转移历史队列(404)中接受更新。典型的转移预测逻辑和预取指逻辑,在预取指之前,通过预测即将到来的转移和转移预测结合工作。如果预测转移未发生,则取指令机制将用转移预测信息去预取连续的指令,或若预测转移发生则跳到一个新的取指令地址。当正常工作时,转移预测机制可以检测(预测)发生转移足够的早和及时,以使取指令机制可以在流水线出现任何停止前,取转移目标。该转移预测机制的功能类似于在美国专利4,678,141中所描述的转移历史表(BHT),但包含了在BPL中每个入口的额外信息(发生或未发生)。该额外信息描述了以前被该处理器所遇到的,后面N个连续的转移的预测转移动作。该信息从转移历史队列(404)可以得到,并将送到挂起转移预测逻辑(401)。在挂起转移预测逻辑中,该信息将被用来和预取表(405)中所含的转移屏蔽比较。这些机制的操作将在下面被描述。
如上面所提到的,BPL记录在转移表(BT)中转移信息,它类似于在转移历史表中所包含的转移信息。图4B给出了转移预测逻辑中预测表(BT)的更详细的描述。该BT被按排为一个入口阵列,这里的每一入口由目录部分(450)和数据部分(460)组成。每一入口的目录部分识别转移地址,该转移地址被处理器在前面执行,与此相对应的数据部分识别转移(461)的目标地址(TA)、转移屏蔽和表示该信息有效的有效位。注意,所有由处理器执行的转移(发生或未发生)都将在这个阵列中有入口。转移屏蔽(462)是N位宽,第一位标识由相应的目录入口标识转移动作(发生或未发生),该转移屏蔽剩余的N-1位标识转移之后处理器遇到的N-1位转移动作。转移屏蔽的信息将在下面进一步描述。
除了阵列中的块入口不是指令块外,BT目录/阵列的操作非常象一个高速缓存,但含有阵列发生或未发生转移的信息。认为处转移的入口在地址X处。BT目录/阵列被通过一个取指令地址存取,并且该存取地址和目录中的所有地址比较。如果有一个匹配发生(取指令块包含转移在地址X上),那么相应的目标地址、转移屏蔽随同这个匹配的转移地址一起被送到挂起转移预测逻辑(401)。如果没有匹配(“未命中”),则没有信息被送到挂起转移预测逻辑。转移历史队列(404)
对于每一个被处理器执行的转移,转移历史队列(BHQ)(404)暂时记录随后被对该转移执行的发生或未发生的转移动作。BHQ的功能是在BPL(403)中为每一个入口建立转移历史屏蔽。这个屏蔽被随后用来和预取表(405)的转移屏蔽比较。图5显示了转移历史队列的基本特征。该图显示出BHQ被安排成由一个转移地址信息域(501)和一个转移历史屏蔽域(502)组成的一个阵列入口。转移地址信息域包含N个转移地址入口(503)。与每一个转移地址入口相连系的是由N位组成的转移历史屏蔽(504)。N位中的每位代表该转移的动作(被发生或未发生),N-1个随后的转移被处理器遇到,并且和预取表的转移屏蔽中的N个子域相对应。
转移历史队列可以用先进先出(FIFO)队列实现,每一个被处理器遇到的新的转移被放在BHQ的第一个位置。当一个转移被处理器执行时,四个动作同时发生。第一,所有现存的转移地址入口,与它们相应的转移屏蔽信息从下进入这个队列中的一个位置。为新的转移地址的进入,释放该队列的上面的第一个位置。第二,所有的转移历史屏蔽被左移一位,为刚刚进入队列的新转移留出转移动作空间。第三,转移的地址被放入BHQ的branch_address_1中,转移历史屏蔽域被清空。第四,然后新的转移动作被加到在转移历史队列中所有转移历史屏蔽中最右端的位。以这种方式创建转移历史屏蔽来调整每一个转移动作域和在预取表中找到的转移屏蔽中的N个子域的匹配顺序。
例如,图5只显示了由BHQ定义的第一个入口最右边的位。这里,Xn代表转移动作。实际上,每一个转移历史屏蔽的第n位代表在转移历史队列的第一个位置找到的转移动作。该队列的第二个入口,branch_address_2仅有两个最右边的位被填写。这里Xn-1代表在它的转移地址域中被标识的转移动作,Xn代表下一个被执行的转移动作。
注意,这是BHQ的第一个位置的转移。最后,BHQ上最后一个入口显示了一个转移历史屏蔽是N位宽并且被完全填写。这些位标号为X1,X2,…Xn-2,Xn-1,Xn。这里X1描述由branch_address域标识的转移动作。值1表示该转移发生,值为0意味着该转移未发生。位X2描述由标记Xn-2,Xn-1,Xn执行的动作,最后三个转移在branch_address域等识别转移之后执行的转移动作。这些标识转移的动作分别在BHQ的第三,第二和第一位置。
对于每一个进入BHQ的新的转移,一个转移必须从BHQ的底部离去(忽略启动条件)。当一个转移离开BHQ时,它的转移屏蔽被完成。然后该转移屏蔽被保存在BPL中以备将来参考。这个过程包括为离开BHQ的转移地址查找BHL。如果匹配被找到,那么该转移屏蔽替代在匹配BPL入口的这个。如果匹配没有被找到,那么为这个转移地址,形成一新的入口,并且转移屏蔽与其一起被保存。这个转移屏蔽代表被处理器执行的N个连续转移(从相应的转移开始)的程序路径。
预取表(405)
对于程序中每个高速缓存未命中,通过从一个转移指令开始,到引起未命中指令结束,编码一个执行路径在预取表中形成入口。该未命中地址与这个执行路径相关。在优选实施例中,执行路径中的转移指令的数量是可以改变的。在执行路径中每一个转移的结果(发生或未发生)被编码一位(例如,0表示未发生,1表示发生),并且在转移路径中所有的转移的结果被结合,在预取表中形成入口编码屏蔽域。
图6给出了PT更详细的说明。PT被安排成一个高速缓存更适宜,该高速缓存用转移地址信息域601查找。组成PT入口的其它域包括未命中地址信息域(602)、转移历史屏蔽域(603)、屏蔽域(604)位数和确认位(605)。转移地址信息域包含独立的转移地址入口606,这里转移地址入口识别转移地址,该转移的方向由转移预测机制预测。注意每一个被保存在转移地址域的地址可以被简写或者截短。在每个PT入口仅仅保存一个组成完整转移地址位的子集是可能的。在PT中与每一个转移地址入口相关的是一个或者多个未命中地址入口607,每一个有一个转移历史屏蔽608入口、“屏蔽位数”(609)和确认位610。未命中地址信息域识别与转移地址域相关的以前未命中指令/数据高速缓存地址。转移历史屏蔽包含N位,每一个位代表被该处理器遇到的N个连续转移(从入口与转移地址域606相对应的转移地址开始)的预测动作(发生或未发生)。例如,转移历史屏蔽608的第一个位代表在入口相应转移地址域606中识别的转移预测动作。第二个位代表转移的预测动作,该转移在相应的转移地址域被找到转移后,由处理器执行,等等。由于屏蔽的有效位可以在1到N之间,该“屏蔽位”(609)域时常注意域608中总的屏蔽有效位的数量。与每一未命中地址域相关的确认位表示未命中地址的预取是否有用或者预取在使用前被更替。零(0)表示最近一次预取没有用,1表示该预取是有用的。确认位起初设置为0以禁止预取。注意初始化确认位为0是一个执行过程的决定,并不影响这里描述的系统的操作。尽管预取表可以包含很多未命中地址和与转移地址入口605相关的屏蔽,图6结构被选择用来简化和表示一个明确的设计。
L1高速缓存未命中时,一个新的入口通过编码从一个转移指令开始执行路径,并使未命中地址和这个执行路径相连系。这使将来用转移指令作为预取触发预取该未命中的地址成为可能。由处理器执行每一个转移(Br)的调用,BHQ(404)临时记录在Br之后执行发生或者未发生的转移动作,这样形成从Br开始编码执行路径的转移历史屏蔽。如果该未命中地址在程序执行时还没有被预取,那么转移地址和BHQ最顶部的入口的屏蔽和该未命中地址相关,并且被作为一个新的入口加入预取表。如果在过去已经有一个未命中地址预取,则从BHQ中读转移地址和屏蔽来和未命中地址联系,以确定在BHQ中“位置”的方法和设备在图15中详细描述。如果PT已满,则PT的一个入口用任何已经知道的替换策略(至少最近使用、随机的、假LRU)收回。
转移执行单元(402)
所有的程序转移被送到解码逻辑单元701。挂起转移预测逻辑(401)提供转移执行单元(402)转移预测信息。在转移指令被执行后,转移执行单元送转移指令的发生或者未发生结果到BHQ(404)。此外,转移执行单元提供转移结果给转移预测机制来与被预测的结果比较。
挂起转移预测逻辑(401)
挂起转移预测逻辑(401)在图7中详细描述。挂起转移预测逻辑包含4个子单元:转移解码逻辑701、挂起转移预测队列(PBPQ)702、转移执行逻辑703和转移预测命中逻辑704。
PBPQ通过转移预测机制403(图4)检测每个转移,保留描述N个转移动作的预测信息。这个信息通过挂起转移预测逻辑中的其它三个子单元使用或者修改。如果该解码器为转移指令发送指令解码信息,控制流去到转移解码逻辑单元701。该转移解码逻辑提供给转移执行单元402转移预测信息,并在一个解码转移之后重新设置解码器(220)地址顺序信息。转移执行逻辑703检查转移预测信息与该转移的实际执行结果。当预测错误被检测出,PBPQ被清除,取指令单元(215)和解码器(220)被重新启动。转移预测命中逻辑704在PBPQ中保存转移预测信息。这个信息被转移单元(225)中的其它子单元所利用。
应注意,在挂起转移预测逻辑中描述的许多功能通常集成在解码器、转移预测机制、或者处理器的执行单元中。典型地,循环时间限制将要求在这些逻辑的某些部分放置在这些单元内。但是,为了叙述简单,它们被在下面分别说明。
挂起转移预测队列(PBPO)(702)
在图8中PBPQ被详细描述。当一个转移被转移预测逻辑机制检测,由转移地址、预测目标地址和转移历史屏蔽组成的入口被保存在PBPQ中。图8给出了PBPQ更加详细的描述。PBPQ被安排成入口阵列,包含转移地址信息域801、目标地址信息域802、转移历史屏蔽域803和有效位域804。转移地址信息域包含相互独立的转移地址入口805,每一个转移地址入口识别一个转移的地址,该转移的方向被转移预测机制预测。应注意,保存在转移地址域中的每一个地址可以被缩短或者被截尾。在每一个PBPQ入口,只保存组成整个转移地址位的子集是可能的。在PBPQ中与每一个转移地址相关的是转移目标入口608、转移历史屏蔽807入口和有效位808。转移目标域识别被转移域标识有关的转移的预测目标地址。转移历史屏蔽包含N位,每位表示被处理器遇到的连续N个转移(从与PBPQ入口的转移地址域801相对应的转移开始)的预测动作(发生或者未发生)。例如,转移历史屏蔽的第一个位表示在相对应的转移地址域中被标识的转移预测动作。第二个位表示转移的预测动作,该转移由处理器执行其后的转移在它对应的转移地址域等找到。与每个转移地址域相关的有效位表示转移地址入口是否有效。零(0)表示无效,一(1)表示有效。这N位与PT入口转移屏蔽中的N位相对应。
认为PBPQ是与最早的入口一样的第一入口(最顶部)的队列是方便的。新的入口被加到从该队列的顶部开始搜索到队列的末尾的第一个可利用空闲入口。在处理入口期间,从队列的顶部移去,所有的有效子入口向上推一个位置。这就保证了当需要时总有一个空闲位置。
转移预测命中逻辑(704)
图9表示出转移预测命中逻辑的操作的细节。由转移地址、目标地址组成的转移预测入口,由转移预测逻辑(403)提供。在步骤901,PBPQ被查找第一个可用的位置。在步骤902,PBPQ用转移预测信息被更新。
转移解码逻辑(701)
图10表示了转移解码逻辑操作的详细描述。每次一个转移被解码,PBPQ(702)最早的入口被检查。提醒一下,PBPQ的第一个入口是最早的入口。在步骤1001,确定第一个入口是否有效。如果该入口有效,在步骤1002,正在被解码的转移地址与PBPQ的最早的入口的转移地址域相比较。在步骤1003,如果该转移地址与PBPQ中最早的入口匹配,那么被预测的程序路径准确的紧跟该程序的实际路径,并且转移历史屏蔽域第一个转移预测位(PBPQ最早的入口的)被检查,在步骤1004,判断该转移的预测是否发生或者未发生。如果该转移被预测发生,在步骤1005,解码器的程序计数器被设置给转移指令的被预测目标地址。如步骤1006所示,返回步骤1004,如果该转移被预测未发生,解码器程序计数器被设置给紧接转移指令的地址。
在步骤1007,被预测的转移结果(被发生或者未发生)和被预测的目标地址被送到转移执行单元(402)。最后,PBPQ的第一个入口被移去,并且所有其它入口被上推一个位置,在PBPQ中得到一个可用位置。
返回到步骤1002,如果正被解码的地址与在PBPQ最早入口中被预测的转移的地址不匹配,则一个转移预测错误发生。该程序不紧接被转移预测机制所预测的路径。当这种情况发生,在步骤1008,PBPQ被清除。在步骤1009,取指令逻辑(215)通过清除指令缓冲区和以紧接刚在被解码的地址再启动而被再启动。
返回到步骤1001,如果PBPQ的最早的入口无效,转移预测机制也没有预测一个转移。特别是,当处理器第一次正在执行一程序转移时或者当BPL(403)中存在的转移信息已经超过时效后这种事件发生。当这个事件发生时,BPL(403)无任何的转移信息,并且不能提供有关即将到来的转移信息。在这种情况下,一个静态预测被产生。例如,在步骤1011,该转移的条件码被检验。如果该转移是有条件的,在步骤1011,假设转移未发生,解码器继续解码紧接该转移的指令。如果该转移是无条件的,在步骤1102,该目标地址被计算,解码器的程序计数器同目标地址被设置。
转移执行逻辑(703)
转移执行逻辑的操作如图11中所示。转移执行逻辑从转移执行单元(402)接收下面的信息:
(a)被预测的转移的结果(发生或者没发生);
(b)实际的转移结果;
(c)被预测的目标地址;及
(d)实际的目标地址。
在步骤1101,被预测的转移结果和实际的结果相比较。如果被预测的结果和实际的结果相等,在步骤1102,它们被比较来确定是否转移结果和实际的结果两者都没被发生。如果它们两者都没被发生,那么没有动作被请求。如果被预测的结果和实际的结果都被发生,那么被预测的和实际的目标地址在步骤1103被比较。如果地址匹配没有动作被请求。当转移结果和实际的结果地址不匹配,则清除PBPQ重新启动流水线,重新开始取指令和解码逻辑。
返回到步骤1101,如果被预测的结果和实际的结果不同,则预测错误,我们直接返回到步骤1104。
根据本发明的另一个实施例,图12和图13分别表示了L1和L2高速缓存系统的高速缓存目录入口。L1高速缓存目录入口1200由有效位1201、奇偶校验位1202、错误校正码(ECC)1203、状态(修改的、专用的、共享的、无效的)1204和类似于现有技术100中高速缓存的标记1207域。这项发明的附加域是:
预取指位(1205):具有1位域,如果该行被预取,并且因为它已被预取还没有被引用,该位被设置为1。一旦该行被引用,该位被设置为0。很明显,通常高速缓存未命中时,设置预取位为0。
加载位(1206):具有1位域,当一个未命中高速缓存行正被从存储器(或者L2)传送给L1高速缓存时,该位被设置为1位。一旦传送完成并且该位已完全到达L1高速缓存,该位被设置为0。
L2高速缓存目录入口1300有一个包含位1301、有效位1302、奇偶校验位1303、错误校正码(ECC)1304、状态(修改的、专用的、共享的、无效的)1305和类似于现有技术100的高速缓存的标记域1310。本发明的附加域是:
●使用位(1306):使用位域指示当它被预取后,在L1中是否该行被引用。如果它被预取后在L1中该行被引用,那么这个行的预取是有用的。如果它被预取到L1后没有被引用,则该行的预取是没有用的。当上次被预取时,该行在L1中被引用,该位域被设置为1。当该预取行在L1中没有被引用,该-位域被设置为0。
●滞后位(1307):滞后位域指示当该行被预取进L1高速缓存时,在它完全到达L1高速缓存前被引用。这意味着预取“滞后”。如果是一个“滞后”预取,这就意味着该预取没有足够早的及时被发布来遮掩延迟,因此该行以后预取的时效性应被合适地调整到使它及时到达L1要早。如果在L1中的预取行在它完全到达前被引用,-该位域被设置为1。如果该被预取行在它完全到达L1中后被引用,该位域被设置为0。在本优先实施例中,滞后位被如下设置为1:在L1中对一个预取行的初次引用(通过预取位(1205)为1指示),在L1目录中的加载位(1206)被读出。如果该加载位被设置为1,这意味着正在被引用的行没有完全到达L1。在这种情况下,在L2目录中相应行的滞后位被设置为1。
●屏蔽位数(1308):当相应的行被上次预取入L1高速缓存时,该域记录所用的屏蔽位数的。当确定预取应该被发布时,这个域指示屏蔽位数,用于比较PT中转移屏蔽域和BPL(403)的转移屏蔽域。为随后预取该行,这个域的值根据上次预取的时效性被增加、减少或者保持原来不变。
●转移地址(1309):在上次预取进入L1高速缓存时,这个域记录转移指令,转移指令充当该行预取触发。
我们现在充分描述本发明的动作。很容易认为这个机制是4个独立的但同步的过程,每一个过程被一个特殊的事件触发。表1列出了在这个处理过程中触发事件、处理过程、和描述该动动作的示图。
触发事件 | 处理过程 | 图 |
转移指令解码 | 预取初始化 | 14 |
L1高速缓存未命中 | 在PT中建一个新的入口和更新L2 | 15 |
预取缓冲区行命中 | 预取转移和确认 | 16 |
预取缓冲区行替代 | 将来预取禁止 | 17 |
表1:触发事件和相关的处理过程
每一处理过程在下面被更详细的描述。
事件-转移指令解码
在解码处理过程中,所有的转移指令也被送到挂起转移预测机制。再调用图4,在解码循环中所有的转移指令被送到转移解码逻辑(701)。转移指令地址通过转移单元(225)与预取单元(255)相连系,以确定是否预取应该被启动。根据这项发明的实施例,预取数据到高速缓存的方法被描述在图14。在步骤1401,确定正被解码的指令是否是一个转移。如果该指令不是一个转移,则没有预取被启动。如果该指令是一个转移,在步骤1402,包含转移地址和相应的屏蔽的BHQ的底部入口被移去并加入到BPL(403),从而释放BHQ的一个入口。在步骤1403,BHQ中所有的转移被下推一个位置,及当前正被解码的转移被加入到BHQ的顶部。注意每一个进入BHQ的新的转移,必须从BHQ的底部离去(忽略启动条件)。当一个转移离开BHQ时,它的转移屏蔽完成。然后该转移屏蔽被保存在BPL(403)中以备将来参考。在步骤1404,判断相对应于当前转移指令地址的入口是否存在于BPL(403)中。如果不存在,没有预取被启动。
返回到步骤1404,如果和当前转移地址相对应的入口存在于BPL(403)中,在步骤1405,相对应入口的屏蔽域462从BPL中被读出。为了说明起见,这个入口的屏蔽域被标记为ML。在步骤1406,判断对应于当前转移指令地址的一个入口是否存在于PT中。如果不存在,则没有预取被启动。这种情况典型发生在(i)当转移在程序中正被第一次解码,(ii)当转移在PT中已经过时,因此对它没有转移指令的入口,或者(iii)没有和这个转移相关的未命中。
返回到步骤1406,如果和当前转移地址相对应的入口存在于PT中,则在步骤1407,屏蔽(M)、确认位(C)、被用的屏蔽位数(n)、和相应入口的预取地址(mA)被从PT中读出。在步骤1408,来自PT的屏蔽M和来自BPL的ML中最高有效的“n”位对匹配比较。转移屏蔽被逐位比较,这里每根据发生或者不发生,每位指示是否预测将来的转移。如果没有匹配,没有预取被启动。这就意味着当该转移与预取地址(mA)相连系时与该转移相关的程序的最近的控制流程(如BPL中屏蔽ML)不同于所观测的控制流程(如PT中的屏蔽M)。
返回到步骤1408,如果屏蔽匹配,在步骤1409,判断是否该确认位C(来自PT)被设置为1。如果该PT入口的确认位C被设置为1,意味着上一次(mA)被预取入L1,并被利用。如果确认位(C)没有被设置为1,没有预取被启动。
返回到步骤1409,如果确认位被设置为1,在步骤1410,用相应于PT入口的地址mA启动一个预取(如果该不在L1高速缓存,最好启动包含数据mA行的预取)。在步骤1411,为L1的目录入口mA,加载位被设置为1并保持到包含数据mA的行完全到达L1高速缓存的同余类。在步骤1412,L1目录入口mA预取位被设置为1来指示它为一个预取行。仅当这个行在L1高速缓存中且被引用时,预取位被设置为0。
应注意,如果与当前预取触发相连系的未命中地址已经存在于高速缓存中,则一种用来改进预取时效性的另一种方法涉及在PT中定位下一个预取(或下一个预取触发)。这可按如下获得:可以增加BPL(403)的每个入口来保存后继转移地址。当一个转移指令被解码时,将决定是否可以应用图14所描述的运算法则来起动预取。如果与指令相关的预取地址所标识的数据已经存在于高速缓存,那么当前转移的BPL入口的后继转移地址能被用来作为下一个预取触发,并且图14中该运算法则的其他执行可被实现以起动使用这个新触发的预取。这个预取触发链可以持续直到我们找到一个预取触发其预取地址还没有存在于高速缓存,然后一个预取可以被开始。因为我们预测未来一个可能的预取,并发布一个预取,并发布一预取,这样就改善了预取的时效性。
事件-L1高速缓存未命中
对应于高速缓存未命中的本发明实施例的状态描述如图15所示。当一个高速缓存未命中被检测出时,需要下面两个动作:(i)在PT中加入一个新的入口;和(ii)更新L2高速缓存目录入口的字段。我们现在详细描述这两个动作。
在步骤1501,确定mA是否存在于L2中。如果mA不存在于L2中,它将从存储器中取出并放入L2中。由于我们没有关于包含数据mA的行是否在以前被预取进L1的任何信息,我们设置使用位和滞后位为0,对于mA在L2目录入口中包含屏蔽位数域设置为1,并进入步骤1502。返回到步骤1501,如果mA存在,我们直接进入步骤1502。返回参看图13,如果在L2目录入口中使用位(1305)被设置为1,这意味包含数据mA的行在程序执行期间已被预取,并随后曾被引用(使用过)。在步骤1502,如果使用位被设置为1,在步骤1503判定是否滞后位(图13中1306)被设置为1(是否滞后位被设置为1,这意味着上一次包含数据mA的行被预取入L1,在它完全到达L1同余类前被引用)。如果这个滞后位也被设置为1,被预取的包含mA的上次用的行包含屏蔽位数(n)的域在步骤1504被读出。
如果滞后位和使用位都被设置为1,这意味着利用包含数据mA的上一次行被预取入L1。但是该行是在它完全到达L1高速缓存同余类前被引用。要增加预取和应用这被预取数据之间的时间,我们给与包含mA的行相关的屏蔽位数增加1。这意味着如果该行的上一次预取通过预测未来“n”转移发布,则后继预取(如果需要)将通过预测未来“n+1”转移发布。
返回到步骤1502,如果在L2高速缓存目录入口使用位被设置为0,这意味着包含mA的行在此以前从来没有被预取或者它被预取并且在被替代前没被使用。如果包含屏蔽位数(n)的域是1,这意味着该行在此以前从来没有被预取。否则,n>1,这意味着上一次该行被预取,在L1中没有被利用并且已经过时。这种情况可能是因为该行的预取比它需求早。因此,我们对n减1,以至如果上一次对行的预取通过预测未来“n”转移而被发布,将来的预取(即使有)被通过预测未来“n-1”转移发布。
如图6所述,在步骤1505,一个新的入口被加入预取表(405)。L2高速缓存目录入口屏蔽域(n)的位数,提供在BHQ转移地址的“位置”,从那里转移地址和屏蔽必需被读出。BHQ按FIFO保存,并且每一个被该程序执行的新的转移通过把BHQ中是所有入口下推1个位置而加在BHQ的顶部。因此,从BHQ顶部的第n个入口提供包含“n”转移的执行路径,并且预取单元从包含该转移地址(Br)和“n”位转移屏蔽(M)的BHQ的顶部读第n个入口。在步骤1506,转移指令(Br)和屏蔽(M)被与地址mA一起加入预取表。这个入口的确认位(C)被设置为1,使预取mA在将来可用。包含mA的行将来的预取用转移地址(Br)和在屏蔽(M)中编码的执行路径所触发。
由于一个新的入口被加入PT,L2高速缓存目录必须被更新以反映这个新的入口。在步骤1507,L2高速缓存目录入口的使用位和滞后位被设置为0,指示没有关于这个被加入到PT的新预取地址的有用性信息。此外,在PT中与mA有关的转移地址(Br)也被加入到L2高速缓存目录入口。如果包含mA的行在将来被预取入L1,这些域将被用来记录这个预取的有用性。
事件-被预取的高速缓存行命中
本发明实施例状态描述的有关根据命中预取行如图16所示。根据命中的包含数据mA的行,下面实现对L1和L2高速缓存目录所做的更新。返回参考图12,如果预取位(1205)被设置为1,这意味着包含数据mA的行在它被被预取入L1高速缓存后第一次被引用。在步骤1601,如果预取位被设置为0,则它在步骤1602被设置为0。加载位在步骤1603被检查,以判断是否包含数据mA的行已经完全到达高速缓存或者仍然在被装入高速缓存的过程中。如果加载位被设置为1,意味着包含数据mA的行没有完全到达。这意味着在被发布的预取和预取数据的利用之间没有足够的时间。在这种情况下,要使将来mA预取被更早的启动,随后对L2目录完成更新。如果对包含mA行的上一次预取通过预测未来“n”转移发布,则将来的预取(即使有)被通过预测未来“n+1”转移发布。这个过程被如下完成:L2寻找包含mA的目录入口。如果找到,则相应的转移地址入口从匹配的目录入口读出,并且在步骤1604被和转移单元相连系。(值得注意的是由于L1包含在L2中,该查询通常是成功的。)用Branch_address_1表示转移指令。注意该地址触发包含数据mA的行的预取。
转移单元在BHQ中查找Branch_address_1。如果匹配存在,则转移单元返回该转移,在如步骤1605和1606所示程序执行中先于Branch_address_1出现。用Branch_address_0表示该转移先于Branch_address_1出现。参看图5我们知道如果Branch_address_1是从BHQ顶部开始的第K个入口,Branch_address_0将根据本发明的优先实施例将从BHQ顶部开始的第(K+1)个入口。注意如果Branch_address_1是BHQ最底部的入口,则没有转移地址的移动可能。转移单元把Branch_address_0和与Branch_address_0相连系的屏蔽的第一位连到预取单元。
在步骤1607,该预取单元在预取表中查找Branch_address_1。如步骤1608所示,如果Branch_address_1的入口存在于预取表中,则在这个入口中与地址mA相关的屏蔽(M)与和转移单元连通的1位屏蔽相连接(与转移Branch_address_0相关)来创建一个新的屏蔽(M2)和转移地址Branch_address_0相关。注意这个新的屏蔽长度为“n+1”位。
参看图6,预取表被(405)被如下更新。如步骤1609所示,转移(Branch_address_0)、屏蔽(M2)和屏蔽M2的位数与地址mA一起被加入该预取表,并且Branch_address_1的入口被使无效。如步骤1610所示,对mAL2目录入口如下更新:Branch_address_1被转址地址Branch_address_0更替换,并且所使用的屏蔽位数被增加1。
返回到步骤1603,如果加载位被设置为0,预取的包含数据mA的行在它应用前到达L1高速缓存。因此包含mA的行的L2目录中的使用位被设置为1。这个使用位指示这个预取是有用的。此外,在步骤1610,转移指令,Branch_address_1,触发的该预取从L2高速缓存目录读出,并与预取单元联系。在步骤1611,预取单元在预取表中查询转移指令(Branch_address_1)。如果入口被找到,在步骤1612,与地址(mA)相连系的确认位被设置为1。
返回到步骤1605,如果该转移(Branch_address_1)在BHQ中没有被找到,则先于它执行的转移将也不存在于BHQ中。在这种情况下,该转移单元送信号到L2高速缓存目录来设置滞后位(与包含数据mA的行相关)为1,并使转移地址Branch_address_1无效,以致将来对mA的预取将与Branch_address_1无关。
事件-预取高速缓存行替代
本发明的相对应于高速缓存行替代实施例的性能如图17所示。如果包含数据mA的高速缓存行被替代来适应另一个从L2高速缓存被取的行,则下面的动作发生为更新包含数据mA的行的L2高速缓存目录。在步骤1701,该被替代行的预取位从L1高速缓存目录读出。如果该位被设置为1,这意味着该被替代的行被预取入L1中,并且在被预取后还没有被使用。如果该位没有被设置为1,则没有动作发生。
返回到步骤1701,如果该预取位被设置为1,该高速缓存控制器发送一个信号到L2高速缓存目录,以检索包含数据mA的行。在步骤1702,如果mA存在于L2中,则该入口的使用位被设置为0。如图15所描述,当mA的一个新的入口被加入到PT中时,这在将来被使用。L2目录中的转移地址(Br)与预取单元相连系。在步骤1703,预取单元在预取表中查找转移地址(Br)。如果该转移地址不存在于预取表中,没有动作发生。
返回到步骤1703,如果转移地址(Br)存在于预取表中,则与这个入口的mA相关的确认位被设置为0。这意味着将来对mA的预取将不再被该转移(Br)所触发。
本发明的优选实施例已经在这里被展示和描述,人们将会懂得这些实施例仅仅以例子的方式被提供。对熟悉本领域技术的人来说,许多的变化、改变和替换将是很明显的没有脱离这项发明的精神。从而,这意味着附加的权利要求涉及在本发明的精神和范围内的所有这种变化。
Claims (34)
1.一种方法,用以在一包含逻辑上连接在存储器和至少一个处理器单元之间的高速缓冲器的系统中,把预取信息送入高速缓冲器以由至少一个处理器单元在处理指令流时使用该预取信息,该方法包括下列步骤:
产生第一路径数据,其中该第一路径数据表示一条第一路径,该第一路径包含一个预取触发指令和使用通过与该预取触发指令相关的一个预取操作所预取的信息的一个指令;
产生第二路径数据,其中该第二路径数据表示一条预测的执行路径;及
比较第一路径数据和第二路径数据,以判断所述第一路径是否落在所述预测的路径中,以执行预取操作。
2.按照权利要求1的方法,其中第一路径数据从第一入口表输出,其中的每个入口标识:
1)至少一个包含一给定的预取触发指令的路径,及
2)与给定的预取触发操作相关的一给定预取操作。
3.按照权利要求2的方法,其中第一表的每个入口标识至少一个路径,它包含具有地址域,屏蔽域和位域给定的预取触发指令,其中的地址域标识给定的预取触发指令,屏蔽域标识关于跟在预取触发指令之后预定数目的连续转移指令的转移动作,而位域标识了在屏蔽域中一些相应的转移动作。
4.按照权利要求2的方法,其中第二路径数据从第二个入口表输出,其中的每一个入口标识了至少一个预测的执行路径。
5.按照权利要求4的方法,其中第二个表的每个入口,标识至少一个带有地址域和屏蔽域的预测的执行路径,其中的地址域标识给定的指令,而屏蔽域标识关于跟在预取触发指令之后预定数目的连续转移指令的转移动作。
6.按照权利要求1的方法,其中所述预取触发指令是从所述指令流在以前的执行导出的。
7.按照权利要求6的方法,其中所述预取操作响应于高速缓冲器中的一个未命中而与所述预取触发指令相关,在该未命中之中从高速缓冲器请求了被所说指令所使用的所述信息但却不能在高速缓冲器中访问到该信息。
8.按照权利要求7的方法,还包括识别所述指令流中领先于未命中一个预定数目的转移指令的一个特定转移指令的步骤,且其中同所述预取操作相关的所述预取触发指令就是所述特定转移指令。
9.按照权利要求8的方法,其中预取触发指令基于指令流的执行而得到调整。
10.按照权利要求9的方法,还包括存储时效性数据的步骤,当所说指令使用的这种信息是从高速缓冲器请求的时,以表征预取操作预取的信息的可存取性。
11.按照权利要求10的方法,其中的时效性数据编码第一状态和第二状态之一,其中的第一状态表示由预取操作预取的这些信息没有完全加载到高速缓冲器,其中的第二状态表示由预取操作预取的这些信息完全加载到高速缓冲器。
12.按照权利要求11的方法,还包括下列步骤:
提供第一个入口表,其中的每个入口标识:
1)至少一个路径从给定的预取触发指令启动,及
2)一给定的预取操作与给定的预取触发操作相关;
为所说信息响应向高速缓冲器的请求,判断是否时效性数据编码所说的第一状态;及
如果判定时效性数据编码了所说的第一状态,标识的是指令流中给出的转移指令,这些指令领先于向高速缓冲器发出对所说信息请求的预取操作有关的预取触发指令,
更新第一路径数据,以表示一新的第一路径从给定的转移指令到使用所说信息的指令,及
在第一表中存储一入口,以标识1)新的第一路径,及2)向高速缓冲器发出请求所说信息的预取操作。
13.按照权利要求1的方法,还包括当这些信息存储在所说的高速缓冲器时,存储有用数据,表征通过预取操作预取的信息有用的步骤,以及根据所说的有用数据,执行预取操作的步骤。
14.按照权利要求1的方法,其中第二路径数据同转移指令相关,并且其中的第二路径数据包括一屏蔽,表示至少一个预测的执行路径跟随在相关转移指令之后。
15.按照权利要求14的方法,其中预取触发指令包括指令流中的一个转移指令,及其中第一路径数据包含一屏蔽,以表示至少一条执行路径,从预取触发指令到达使用由预取触发指令预取的信息的指令。
16.按照权利要求1的方法,其中的预取操作预取至少一条指令。
17.按照权利要求1的方法,其中的预取操作预取被指令流中至少一条指令操作的数据。
18.一种装置,用于在一包含逻辑上连接在存储器和至少一个处理器单元之间的高速缓冲器的数据处理系统中,把预取信息送入高速缓冲器以由至少一个处理器单元在处理指令流时使用该预取信息,该装置包括:
用于产生第一路径数据的预取逻辑,其中第一路径数据表示一条第一路径,该第一路径包含一个预取触发指令和使用通过与该预取触发指令相关的一个预取操作所预取的信息的一个指令;
用于产生第二路径数据的转移路径预测逻辑,其中该第二路径数据表示一条预测的执行路径;及
预取执行逻辑,用于比较所述第一路径数据和所述第二路径数据以判断所述第一路径是否落在所述预测的第二路径中,以执行预取操作。
19.按照权利要求18的装置,其中第一路径数据从第一入口表输出,其中的每个入口标识1)包含一给定的预取触发指令的至少一个路径,及2)与给定的预取触发操作相关的一给定预取操作。
20.按照权利要求19的装置,其中第一表的每个入口标识至少一个路径,它包含具有地址域,屏蔽域和位域给定的预取触发指令,其中的地址域标识给定的预取触发指令,屏蔽域标识关于跟在预取触发指令之后预定数目的连续转移指令的转移动作,而位域标识了在屏蔽域中一些相应的转移动作。
21.按照权利要求19的装置,其中第二路径数据从第二个入口表输出,其中的每一个入口标识了至少一个预测的执行路径。
22.按照权利要求21的装置,其中第二个表的每个入口,标识至少一个带有地址域和屏蔽域的预测的执行路径,其中的地址域标识给定的指令,而屏蔽域标识关于跟在预取触发指令之后预定数目的连续转移指令的转移动作。
23.按照权利要求18的装置,其中的预取触发指令根据前面指令流的执行而得到。
24.按照权利要求23的装置,其中预取操作与高速缓冲器未命中的预取触发指令相关,其中被所说指令使用的信息从高速缓冲器请求而不能在高速缓冲器中访问。
25.按照权利要求24的装置,还包括标识指令流中领先于未命中前预定数目转移指令的特定转移指令的装置,而且其中同预取操作相关的预取触发指令是特定的转移指令。
26.按照权利要求25的装置,其中的预取触发指令是基于指令流的执行而得到调整。
27.按照权利要求26的装置,还包括存储时效性数据的装置,当所说指令使用的这种信息是从高速缓冲器请求的时,以表征预取操作预取的信息的可存取性。
28.按照权利要求27的装置,其中时效性数据编码第一状态和第二状态之一,其中的第一状态表示由预取操作预取的这些信息没有完全加载到高速缓冲器,其中的第二状态表示由预取操作预取的这些信息完全加载到高速缓冲器。
29.按照权利要求28的装置,还包括:
第一个入口表,其中的每个入口标识1)至少一个路径从给定的预取触发指令启动,及2)一给定的预取操作与给定的预取触发操作相关;
一种为所说信息响应向高速缓冲器对的请求用以判断是否时效性数据编码所说的第一状态的装置;及
一种在判定时效性数据编码了所说的第一状态时用于进行以下操作的装置:
标识指令流中给出的转移指令,这些指令领先于与向高速缓冲器发出对所说信息请求的预取操作有关的预取触发指令,
更新第一路径数据,以表示一新的第一路径从给定的转移指令到使用所说信息的指令,及
在第一表中存储一入口,以标识1)新的第一路径,及2)向高速缓冲器发出请求所说信息的预取操作。
30.按照权利要求18的装置,还包括用于当这些信息存储在所说的高速缓冲器时存储表征通过预取操作预取的信息有用的有用数据的装置,其中根据所说的有用数据,执行预取操作。
31.按照权利要求18的装置,其中第二路径数据同转移指令相关,并且其中的第二路径数据包括一屏蔽,表示至少一个预测的执行路径跟随在相关转移指令之后。
32.按照权利要求31的装置,其中预取触发指令包括指令流中的一个转移指令,及其中第一路径数据包含一屏蔽,以表示至少一条执行路径,从预取触发指令到达使用由预取触发指令预取的信息的指令。
33.按照权利要求18的装置,其中的预取操作预取至少一条指令。
34.按照权利要求18的装置,其中的预取操作预取被指令流中至少一条指令操作的数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/459,739 | 1999-12-10 | ||
US09/459,739 US6560693B1 (en) | 1999-12-10 | 1999-12-10 | Branch history guided instruction/data prefetching |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1306246A CN1306246A (zh) | 2001-08-01 |
CN1123826C true CN1123826C (zh) | 2003-10-08 |
Family
ID=23825961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00135055A Expired - Fee Related CN1123826C (zh) | 1999-12-10 | 2000-12-07 | 预取由转移历史引导的指令/数据的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6560693B1 (zh) |
CN (1) | CN1123826C (zh) |
Families Citing this family (113)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US8127121B2 (en) * | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US6954923B1 (en) * | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US6763452B1 (en) | 1999-01-28 | 2004-07-13 | Ati International Srl | Modifying program execution based on profiling |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US6546481B1 (en) * | 1999-11-05 | 2003-04-08 | Ip - First Llc | Split history tables for branch prediction |
JP2001273138A (ja) * | 2000-03-24 | 2001-10-05 | Fujitsu Ltd | プログラム変換装置および方法 |
US6829702B1 (en) * | 2000-07-26 | 2004-12-07 | International Business Machines Corporation | Branch target cache and method for efficiently obtaining target path instructions for tight program loops |
US7191430B2 (en) * | 2001-09-24 | 2007-03-13 | Hewlett-Packard Development Company, L.P. | Providing instruction execution hints to a processor using break instructions |
US6959435B2 (en) * | 2001-09-28 | 2005-10-25 | Intel Corporation | Compiler-directed speculative approach to resolve performance-degrading long latency events in an application |
US20030204840A1 (en) * | 2002-04-30 | 2003-10-30 | Youfeng Wu | Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs |
US6760818B2 (en) * | 2002-05-01 | 2004-07-06 | Koninklijke Philips Electronics N.V. | Memory region based data pre-fetching |
US7058936B2 (en) * | 2002-11-25 | 2006-06-06 | Microsoft Corporation | Dynamic prefetching of hot data streams |
US7140008B2 (en) * | 2002-11-25 | 2006-11-21 | Microsoft Corporation | Dynamic temporal optimization framework |
US7155575B2 (en) * | 2002-12-18 | 2006-12-26 | Intel Corporation | Adaptive prefetch for irregular access patterns |
US7343598B2 (en) | 2003-04-25 | 2008-03-11 | Microsoft Corporation | Cache-conscious coallocation of hot data streams |
US6871246B2 (en) * | 2003-05-07 | 2005-03-22 | Freescale Semiconductor, Inc. | Prefetch control in a data processing system |
US7139878B2 (en) * | 2003-06-20 | 2006-11-21 | Freescale Semiconductor, Inc. | Method and apparatus for dynamic prefetch buffer configuration and replacement |
US6925928B2 (en) * | 2003-09-18 | 2005-08-09 | Anthony Fox | Trash compactor for fast food restaurant waste |
US7395527B2 (en) * | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US7937691B2 (en) * | 2003-09-30 | 2011-05-03 | International Business Machines Corporation | Method and apparatus for counting execution of specific instructions and accesses to specific data locations |
US20050071608A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for selectively counting instructions and data accesses |
US7373637B2 (en) * | 2003-09-30 | 2008-05-13 | International Business Machines Corporation | Method and apparatus for counting instruction and memory location ranges |
US20050071609A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically take an exception on specified instructions |
US20050071610A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for debug support for individual instructions and memory locations |
US20050071611A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for counting data accesses and instruction executions that exceed a threshold |
US20050071612A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus for generating interrupts upon execution of marked instructions and upon access to marked memory locations |
US20050071821A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically select instructions for selective counting |
US20050071516A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically profile applications |
US8381037B2 (en) * | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
US7421681B2 (en) * | 2003-10-09 | 2008-09-02 | International Business Machines Corporation | Method and system for autonomic monitoring of semaphore operation in an application |
US20050086455A1 (en) * | 2003-10-16 | 2005-04-21 | International Business Machines Corporation | Method and apparatus for generating interrupts for specific types of instructions |
US7587709B2 (en) * | 2003-10-24 | 2009-09-08 | Microsoft Corporation | Adaptive instrumentation runtime monitoring and analysis |
US7308681B2 (en) * | 2003-10-28 | 2007-12-11 | International Business Machines Corporation | Control flow based compression of execution traces |
US7257657B2 (en) * | 2003-11-06 | 2007-08-14 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses for specific types of instructions |
US7895382B2 (en) * | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
US7415705B2 (en) | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
US7526757B2 (en) * | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7421684B2 (en) | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7477255B1 (en) * | 2004-04-12 | 2009-01-13 | Nvidia Corporation | System and method for synchronizing divergent samples in a programmable graphics processing unit |
US7324112B1 (en) | 2004-04-12 | 2008-01-29 | Nvidia Corporation | System and method for processing divergent samples in a programmable graphics processing unit |
US7434004B1 (en) * | 2004-06-17 | 2008-10-07 | Sun Microsystems, Inc. | Prefetch prediction |
US7185178B1 (en) | 2004-06-30 | 2007-02-27 | Sun Microsystems, Inc. | Fetch speculation in a multithreaded processor |
US8443171B2 (en) | 2004-07-30 | 2013-05-14 | Hewlett-Packard Development Company, L.P. | Run-time updating of prediction hint instructions |
JP2006048132A (ja) * | 2004-07-30 | 2006-02-16 | Fujitsu Ltd | 分岐予測装置、分岐予測装置の制御方法、情報処理装置 |
US8028143B2 (en) * | 2004-08-27 | 2011-09-27 | Qualcomm Incorporated | Method and apparatus for transmitting memory pre-fetch commands on a bus |
US7716424B2 (en) * | 2004-11-16 | 2010-05-11 | International Business Machines Corporation | Victim prefetching in a cache hierarchy |
JP4134179B2 (ja) * | 2005-02-04 | 2008-08-13 | 株式会社ソニー・コンピュータエンタテインメント | ソフトウエアによる動的予測方法および装置 |
US7607119B2 (en) * | 2005-04-26 | 2009-10-20 | Microsoft Corporation | Variational path profiling |
US7506105B2 (en) | 2005-05-02 | 2009-03-17 | Freescale Semiconductor, Inc. | Prefetching using hashed program counter |
US20060248280A1 (en) * | 2005-05-02 | 2006-11-02 | Al-Sukhni Hassan F | Prefetch address generation implementing multiple confidence levels |
US7912877B2 (en) * | 2005-05-20 | 2011-03-22 | Microsoft Corporation | Leveraging garbage collection to dynamically infer heap invariants |
US7770153B2 (en) * | 2005-05-20 | 2010-08-03 | Microsoft Corporation | Heap-based bug identification using anomaly detection |
US8079031B2 (en) * | 2005-10-21 | 2011-12-13 | Intel Corporation | Method, apparatus, and a system for dynamically configuring a prefetcher based on a thread specific latency metric |
US20070101100A1 (en) * | 2005-10-28 | 2007-05-03 | Freescale Semiconductor, Inc. | System and method for decoupled precomputation prefetching |
US7962901B2 (en) | 2006-04-17 | 2011-06-14 | Microsoft Corporation | Using dynamic analysis to improve model checking |
US7926043B2 (en) * | 2006-06-20 | 2011-04-12 | Microsoft Corporation | Data structure path profiling |
KR100817056B1 (ko) * | 2006-08-25 | 2008-03-26 | 삼성전자주식회사 | 분기이력 길이표시기, 분기예측 시스템 및 분기 예측 방법 |
US20080088619A1 (en) * | 2006-10-17 | 2008-04-17 | Robert Allen Shearer | Branch Prediction for Acceleration Data Structure Traversal |
GB2445965B (en) * | 2007-01-26 | 2011-05-04 | Advanced Risc Mach Ltd | Entry replacement within a data store |
US20080222393A1 (en) * | 2007-03-09 | 2008-09-11 | On Demand Microelectronics | Method and arrangements for pipeline processing of instructions |
US20080222392A1 (en) * | 2007-03-09 | 2008-09-11 | On Demand Microelectronics | Method and arrangements for pipeline processing of instructions |
US7640400B2 (en) * | 2007-04-10 | 2009-12-29 | International Business Machines Corporation | Programmable data prefetching |
US8122195B2 (en) | 2007-12-12 | 2012-02-21 | International Business Machines Corporation | Instruction for pre-fetching data and releasing cache lines |
US7966453B2 (en) | 2007-12-12 | 2011-06-21 | International Business Machines Corporation | Method and apparatus for active software disown of cache line's exlusive rights |
US7870371B2 (en) * | 2007-12-17 | 2011-01-11 | Microsoft Corporation | Target-frequency based indirect jump prediction for high-performance processors |
US8166277B2 (en) * | 2008-02-01 | 2012-04-24 | International Business Machines Corporation | Data prefetching using indirect addressing |
US8209488B2 (en) * | 2008-02-01 | 2012-06-26 | International Business Machines Corporation | Techniques for prediction-based indirect data prefetching |
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 |
US8458170B2 (en) * | 2008-06-30 | 2013-06-04 | Yahoo! Inc. | Prefetching data for document ranking |
US8312442B2 (en) * | 2008-12-10 | 2012-11-13 | Oracle America, Inc. | Method and system for interprocedural prefetching |
US8156286B2 (en) * | 2008-12-30 | 2012-04-10 | Advanced Micro Devices, Inc. | Processor and method for using an instruction hint to prevent hardware prefetch from using certain memory accesses in prefetch calculations |
US10338923B2 (en) * | 2009-05-05 | 2019-07-02 | International Business Machines Corporation | Branch prediction path wrong guess instruction |
US8533437B2 (en) * | 2009-06-01 | 2013-09-10 | Via Technologies, Inc. | Guaranteed prefetch instruction |
US8521999B2 (en) * | 2010-03-11 | 2013-08-27 | International Business Machines Corporation | Executing touchBHT instruction to pre-fetch information to prediction mechanism for branch with taken history |
US8533572B2 (en) * | 2010-09-24 | 2013-09-10 | Intel Corporation | Error correcting code logic for processor caches that uses a common set of check bits |
US8886920B2 (en) * | 2011-05-13 | 2014-11-11 | Oracle International Corporation | Associating tag to branch instruction to access array storing predicted target addresses for page crossing targets for comparison with resolved address at execution stage |
US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
US9811341B2 (en) * | 2011-12-29 | 2017-11-07 | Intel Corporation | Managed instruction cache prefetching |
US9135011B2 (en) * | 2012-04-30 | 2015-09-15 | The Regents Of The University Of Michigan | Next branch table for use with a branch predictor |
US9146739B2 (en) * | 2012-06-14 | 2015-09-29 | International Business Machines Corporation | Branch prediction preloading |
US9430241B2 (en) | 2012-06-15 | 2016-08-30 | International Business Machines Corporation | Semi-exclusive second-level branch target buffer |
US9280351B2 (en) * | 2012-06-15 | 2016-03-08 | International Business Machines Corporation | Second-level branch target buffer bulk transfer filtering |
US9298465B2 (en) | 2012-06-15 | 2016-03-29 | International Business Machines Corporation | Asynchronous lookahead hierarchical branch prediction |
US9348599B2 (en) | 2013-01-15 | 2016-05-24 | International Business Machines Corporation | Confidence threshold-based opposing branch path execution for branch prediction |
KR102069857B1 (ko) | 2013-02-28 | 2020-01-23 | 삼성전자주식회사 | 자체-학습을 통해 원래 이미지를 회전하는 방법과 상기 방법을 수행할 수 있는 장치들 |
US9792120B2 (en) * | 2013-03-05 | 2017-10-17 | International Business Machines Corporation | Anticipated prefetching for a parent core in a multi-core chip |
CN103608768B (zh) * | 2013-04-01 | 2017-03-01 | 华为技术有限公司 | 一种数据预取方法、相关装置及系统 |
GB2515076B (en) * | 2013-06-13 | 2020-07-15 | Advanced Risc Mach Ltd | A data processing apparatus and method for handling retrieval of instructions from an instruction cache |
US9652233B2 (en) * | 2013-08-20 | 2017-05-16 | Apple Inc. | Hint values for use with an operand cache |
US9459869B2 (en) * | 2013-08-20 | 2016-10-04 | Apple Inc. | Intelligent caching for an operand cache |
US9442725B2 (en) * | 2013-08-21 | 2016-09-13 | Airwatch Llc | Branch trace compression |
US9563430B2 (en) | 2014-03-19 | 2017-02-07 | International Business Machines Corporation | Dynamic thread sharing in branch prediction structures |
US10055350B2 (en) * | 2014-05-06 | 2018-08-21 | Google Llc | Controlled cache injection of incoming data |
JP6457836B2 (ja) * | 2015-02-26 | 2019-01-23 | ルネサスエレクトロニクス株式会社 | プロセッサおよび命令コード生成装置 |
US10733099B2 (en) | 2015-12-14 | 2020-08-04 | Arizona Board Of Regents On Behalf Of The University Of Arizona | Broadening field specialization |
US9507598B1 (en) * | 2015-12-15 | 2016-11-29 | International Business Machines Corporation | Auxiliary branch prediction with usefulness tracking |
US10296463B2 (en) * | 2016-01-07 | 2019-05-21 | Samsung Electronics Co., Ltd. | Instruction prefetcher dynamically controlled by readily available prefetcher accuracy |
US10521350B2 (en) | 2016-07-20 | 2019-12-31 | International Business Machines Corporation | Determining the effectiveness of prefetch instructions |
US10621095B2 (en) | 2016-07-20 | 2020-04-14 | International Business Machines Corporation | Processing data based on cache residency |
US10169239B2 (en) | 2016-07-20 | 2019-01-01 | International Business Machines Corporation | Managing a prefetch queue based on priority indications of prefetch requests |
US10452395B2 (en) | 2016-07-20 | 2019-10-22 | International Business Machines Corporation | Instruction to query cache residency |
US20210279105A1 (en) * | 2017-06-22 | 2021-09-09 | Dataware Ventures, Llc | Field specialization to reduce memory-access stalls and allocation requests in data-intensive applications |
US10430198B2 (en) * | 2018-01-12 | 2019-10-01 | Intel Corporation | Dynamic detection and prediction for store-dependent branches |
US10467141B1 (en) * | 2018-06-18 | 2019-11-05 | International Business Machines Corporation | Process data caching through iterative feedback |
US11461101B2 (en) * | 2019-09-27 | 2022-10-04 | Arm Technology (China) Co. LTD | Circuitry and method for selectively controlling prefetching of program instructions |
CN110806990A (zh) * | 2019-10-15 | 2020-02-18 | 四川豪威尔信息科技有限公司 | 一种存储器集成电路及其预取方法 |
US20220091852A1 (en) * | 2020-09-22 | 2022-03-24 | Intel Corporation | Instruction Set Architecture and Microarchitecture for Early Pipeline Re-steering Using Load Address Prediction to Mitigate Branch Misprediction Penalties |
US11928472B2 (en) | 2020-09-26 | 2024-03-12 | Intel Corporation | Branch prefetch mechanisms for mitigating frontend branch resteers |
US11630670B2 (en) | 2021-07-21 | 2023-04-18 | Apple Inc. | Multi-table signature prefetch |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5357618A (en) | 1991-04-15 | 1994-10-18 | International Business Machines Corporation | Cache prefetch and bypass using stride registers |
US5305389A (en) | 1991-08-30 | 1994-04-19 | Digital Equipment Corporation | Predictive cache system |
US5732242A (en) | 1995-03-24 | 1998-03-24 | Silicon Graphics, Inc. | Consistently specifying way destinations through prefetching hints |
US5774685A (en) | 1995-04-21 | 1998-06-30 | International Business Machines Corporation | Method and apparatus for biasing cache LRU for prefetched instructions/data based upon evaluation of speculative conditions |
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 |
EP0752645B1 (en) | 1995-07-07 | 2017-11-22 | Oracle America, Inc. | Tunable software control of Harvard architecture cache memories using prefetch instructions |
US6055621A (en) | 1996-02-12 | 2000-04-25 | International Business Machines Corporation | Touch history table |
US5919256A (en) | 1996-03-26 | 1999-07-06 | Advanced Micro Devices, Inc. | Operand cache addressed by the instruction address for reducing latency of read instruction |
US5778435A (en) | 1996-05-30 | 1998-07-07 | Lucent Technologies, Inc. | History-based prefetch cache including a time queue |
US5860017A (en) * | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
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 |
US5809566A (en) * | 1996-08-14 | 1998-09-15 | International Business Machines Corporation | Automatic cache prefetch timing with dynamic trigger migration |
US5854934A (en) | 1996-08-23 | 1998-12-29 | Hewlett-Packard Company | Optimizing compiler having data cache prefetch spreading |
US5918246A (en) | 1997-01-23 | 1999-06-29 | International Business Machines Corporation | Apparatus and method for prefetching data based on information contained in a compiler generated program map |
US5896517A (en) | 1997-08-18 | 1999-04-20 | Bull Hn Information Systems Inc. | High performance processor employing background memory move mechanism |
US6212603B1 (en) * | 1998-04-09 | 2001-04-03 | Institute For The Development Of Emerging Architectures, L.L.C. | Processor with apparatus for tracking prefetch and demand fetch instructions serviced by cache memory |
-
1999
- 1999-12-10 US US09/459,739 patent/US6560693B1/en not_active Expired - Fee Related
-
2000
- 2000-12-07 CN CN00135055A patent/CN1123826C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US6560693B1 (en) | 2003-05-06 |
CN1306246A (zh) | 2001-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1123826C (zh) | 预取由转移历史引导的指令/数据的方法和装置 | |
CN1191524C (zh) | 预取指令的执行方法和设备 | |
CN1147794C (zh) | 具有静态转移预测支持的去耦取指令-执行引擎 | |
US9875106B2 (en) | Computer processor employing instruction block exit prediction | |
US6697932B1 (en) | System and method for early resolution of low confidence branches and safe data cache accesses | |
US7657726B2 (en) | Context look ahead storage structures | |
EP2204741B1 (en) | Processor and method for using an instruction hint to prevent hardware prefetch from using certain memory accesses in prefetch calculations | |
CN106030516B (zh) | 一种处理器和用于在处理器中执行分支预测的方法 | |
US7055023B2 (en) | Apparatus and method for branch prediction where data for predictions is selected from a count in a branch history table or a bias in a branch target buffer | |
US7493480B2 (en) | Method and apparatus for prefetching branch history information | |
JP5089186B2 (ja) | データ・キャッシュ・ミス予測およびスケジューリング | |
US11687343B2 (en) | Data processing apparatus and method for providing candidate prediction entries | |
CN1127899A (zh) | 具有推测指令取指的数据处理器及操作方法 | |
CN101449238A (zh) | 本地和全局分支预测信息存储 | |
WO2006118667A2 (en) | Prefetching across a page boundary | |
JP2007207246A (ja) | 命令ラインのための自己プリフェッチl2キャッシュ機構 | |
JPH06242949A (ja) | キュー管理式命令キャッシュ | |
CN107992331A (zh) | 处理器及操作处理器的方法 | |
US5842008A (en) | Method and apparatus for implementing a branch target buffer cache with multiple BTB banks | |
US7103757B1 (en) | System, circuit, and method for adjusting the prefetch instruction rate of a prefetch unit | |
KR101049319B1 (ko) | 분기 타겟 어드레스 캐시에서 룩업들을 감소시키는 방법 및장치 | |
US5938761A (en) | Method and apparatus for branch target prediction | |
US20020078061A1 (en) | Set address correlation address predictors for long memory latencies | |
KR100985239B1 (ko) | 인스트럭션 캐시 관리 방법, 캐시 메모리, 집적 회로 및저장 매체 | |
US10922082B2 (en) | Branch predictor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |