CN1222870C - 根据未命中距离将数据预取到高速缓存器中的系统和方法 - Google Patents

根据未命中距离将数据预取到高速缓存器中的系统和方法 Download PDF

Info

Publication number
CN1222870C
CN1222870C CNB018216293A CN01821629A CN1222870C CN 1222870 C CN1222870 C CN 1222870C CN B018216293 A CNB018216293 A CN B018216293A CN 01821629 A CN01821629 A CN 01821629A CN 1222870 C CN1222870 C CN 1222870C
Authority
CN
China
Prior art keywords
miss
subclauses
clauses
instruction
field
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
Application number
CNB018216293A
Other languages
English (en)
Other versions
CN1484788A (zh
Inventor
M·阿布达拉
K·阿尔-达亚尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1484788A publication Critical patent/CN1484788A/zh
Application granted granted Critical
Publication of CN1222870C publication Critical patent/CN1222870C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch

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

根据未命中距离将数据预取 到高速缓存器中的系统和方法
发明领域
本发明的实施例涉及从存储器中预取数据。具体的,本发明涉及从存储器预取数据以供处理器使用的方法和装置。
背景
由处理器执行的指令经常使用存储在例如随机存取存储器(RAM)等存储器件中的数据。例如,处理器可能执行LOAD(加载)指令将存储在特定存储器地址中的数据加载到寄存器中。在许多系统中,因为系统存储器的存取时间相对较慢,所以频繁使用的数据元素要从系统存储器中拷贝到称作高速缓存器的较快速的存储器件中,并且只要有可能,处理器在需要存取(即,读入或写出)所述数据元素时,就可以使用在高速缓存器中的数据元素的拷贝。如果被指令访问的存储单元还没有拷贝到高速缓存器中,则指令对存储单元的访问会引起“高速缓存器未命中(cache miss)”,因为所需的数据不能从高速缓存器中获得。如果最小化高速缓存器未命中的数量,则计算机系统的操作更加有效。
一种减少等待访问RAM所花费的时间的方法是在需要数据之前,即,在高速缓存器未命中发生之前从RAM存储器中“预取”该数据。许多处理器具有这样的指令周期,在该指令周期中,在一步中从存储器中获得要执行的指令(即,取指令),并在另一步中执行。如果要执行的指令访问存储单元(例如,存储器LOAD),则在所述单元的数据必须从高速缓存器,或者如果高速缓存器未命中,从系统存储器中取出放在处理器的适当部分。高速缓存器预取器(prefetcher)尝试预测随后指令将访问哪些数据地址,并在需要数据之前从存储器中预取要访问的数据。该预取的数据可以存储在高速缓存器或缓冲器中,以供以后的使用。
现有的预取方案确定例如LOAD的存储器指令的“步幅(strid)”,然后用该步幅预取数据。在程序中指令的步幅可以定义为两个连续执行的指令加载的存储器地址之间的距离。如这里所用的,“指令”是指在程序中的指令的特定实例,每个指令由不同的指令指针(“IP”)值标识。基于步幅的预取方案的理论前提是,指令将访问一系列彼此间隔相同距离的存储单元。如果,例如,程序处在循环或嵌套循环中,或者步进通过表时(stepping though a table),该预测经常是准确的。
附图介绍
图1是根据本发明实施例的具有预取器的计算机系统的局部框图。
图2是根据本发明实施例的存储器和高速缓存器中的一系列地址的局部框图。
图3是根据本发明实施例的临界未命中预取表的局部框图。
图4是根据本发明实施例管理数据预取的方法的流程图。
图5是根据本发明另一个实施例的单次未命中表和临界未命中预取表的局部框图。
图6是根据本发明另一个实施例的具有临界未命中预取器的计算机系统的局部框图。
图7是根据本发明另一个实施例的前端表和后端表的局部框图。
图8是根据本发明另一个实施例的具有预取器的计算机系统的局部框图。
详细介绍
本发明的实施例涉及这样的预取器,所述预取器根据由指令引起的高速缓存器未命中之间的距离为指令预取数据。在实施例中,预取器建立记录指令的连续高速缓存器未命中之间的距离的预取表。该距离是高速缓存器未命中的步幅,并且可以称作指令的“未命中距离”。如果指令的未命中距离以某种模式出现,则根据该模式出现的未命中可以称作“临界高速缓存器未命中”。在指令引发“当前高速缓存器未命中”之后,本实施例的预取器可以请求预取位于与造成当前高速缓存器未命中的数据地址距离为未命中距离的数据。然后,该数据成为将来可用的。未命中距离可以存储在临界高速缓存器未命中预取表中。
所介绍的临界高速缓存器未命中的管理策略能够使用比以前的预取器中的更小的表尺寸,同时保持以前预取机构的大部分的性能优点。因为临界高速缓存器未命中预取器不保存通常不会引起未命中的LOAD指令的地址和步幅,所以可以实现这些高效的结果。此外,预取器不需要检查即使在步幅内通常也不会引起高速缓存器未命中的数据的高速缓存器未命中。
本发明的实施例通过滤掉不是未命中模式的部分的未命中获得进一步的性能改进。这种未命中可以称作“冷未命中”或“噪声未命中”。在实施例中,甚至不用记录指令导致未命中的地址,除非检测到该指令的至少两次未命中。在另一个实施例中,不为指令进行预取,直到确定未命中的距离。在又一个实施例中,不为指令重新计算存储在临界未命中预取表中的未命中距离,除非两次连续未命中发生的距离不同于所述的未命中距离。下面是对这些和其它实施例更详细的介绍。
图1是根据本发明实施例的具有预取器120的计算机系统100的局部框图。计算机系统100包括具有耦合到预取器120的译码器110的处理器101。计算机系统100还具有耦合到译码器110和预取器120的执行单元107。术语“耦合”包含直接连接、间接连接、间接通信等。处理器101可以是能够处理指令的任何微处理器,例如,INTELPENTIUM系列处理器中的通用处理器。执行单元107是执行指令的装置。译码器110是将一种类型代码改变为可以执行的另一种类型代码的装置或程序。例如,译码器110译码作为程序一部分的LOAD指令,然后,译码后的LOAD指令由执行单元107执行。处理器101耦合到高速缓存器130和随机存取存储器(RAM)140。RAM 140为系统存储器。在其它实施例中,可以在计算机系统100中使用不同于RAM的系统存储器类型,代替RAM 140或作为RAM 140的补充。高速缓存器130可以是静态随机存取存储器(SRAM)。在其它实施例中,高速缓存器130可以是处理器101的一部分。
预取器120包括预取管理器122和预取存储器125。预取管理器122包括根据由指令引起的高速缓存器未命中之间的距离预取指令数据的逻辑。如在本申请中所使用的,“逻辑”可以包括例如执行操作的布线电路的硬件逻辑,或者例如执行操作的固件的程序逻辑。预取存储器125可以存储含有包括由指令引起的高速缓存器未命中之间的距离的条目的临界未命中预取表。在一个实施例中,预取存储器125是内容可寻址存储器(CAM)。下面参考图3、5和7讨论临界未命中预取表的例子。预取管理器122可以根据在预取表中为指令记录的未命中距离确定要预取的数据元素的地址。
图2是根据本发明实施例的存储器和高速缓存器中的一系列地址的局部框图。图2示出了RAM 140和高速缓存器130的一部分。RAM 140包括每个具有唯一地址的一系列存储器单元或者存储单元。在图2中,在从1000到1100的一系列地址中每第十个地址用地址号标注。图2示出了在RAM 140的地址1010、1020、1040、1050、1070、1080和1100中的数据的拷贝存储在高速缓存器130中。
图2在这里用来说明由处理器101重复执行的指令的高速缓存器未命中模式。例如,指令可以是程序中特定的LOAD指令。该指令可以用通常为IP=XXXX的指令指针值来识别。在例子程序中,该指令由处理器101在较短的时间段中重复执行。这典型地出现在该指令是循环的一部分的情况下,但是在其它情况中也可能出现。在例子中所用的IP=XXXX的LOAD指令,可以在每次执行LOAD指令时加载在不同存储器地址存储的数据。在图2所示的例子中,假设指令从地址1000开始加载,并且指令的步幅201为10。即,在讨论的程序的相关部分期间,该例子中的指令首先从地址1000加载,然后从随后的每第十个存储单元加载(例如,1000、1010、1020、1030、1040、1050、1060、1070、1080、1090、1100、…)。
当本例子的LOAD指令经过执行周期时,处理器101将尝试从高速缓存器130中获得执行LOAD指令所需的数据。在图2所示的例子中,当从地址1010、1020、1040、1050、1070、1080和1100加载时,执行LOAD指令所需的数据在高速缓存器中。这些地址可以称作“被缓存的”。为了简化,在本例中,存储在高速缓存器中的地址的顺序与它们在RAM 140中的顺序相同,但是,当然它们可以以任何顺序存储在高速缓存器130中。图2显示出的地址1000、1030、1060和1090没有被缓存。因此,当LOAD指令从地址1000、1030、1060和1090加载时,将发生高速缓存器未命中。在本例子中,在导致高速缓存器未命中的一系列地址中的第一个地址与导致高速缓存器未命中的下一个地址之间的未命中距离202为30(即,1030-1000=30)。
根据本发明实施例的一个实施例的临界未命中预取器预取当执行在IP=XXXX的LOAD指令时会导致高速缓存器未命中的数据。在实施例中,该数据由预取根据来自存储在预取存储器125中的临界未命中预取表的信息加以预取。
图3是根据本发明实施例的临界未命中预取表300的局部框图。临界未命中预取表具有用条目编号310的1到8表示的八个条目,不过在本实施例中,条目编号只是为了说明的目的并且不是表中的字段。在另一个实施例中,临界未命中预取表300可以具有更多或更少的条目。每个条目可以包括一条指令的信息。如图3所示,临界未命中预取表300具有5个字段,但是在其它实施例中可以具有更多或更少的字段。在临界未命中预取表300中的第一个字段是指令IP字段301。该字段包括所述条目涉及的指令的指令指针。如图3所示,第一条目存储XXXX的指令指针值。在临界未命中预取表300中的下一个字段是上次未命中地址字段302。该字段存储指令上次高速缓存器未命中的地址。在图3中的例子包括上次未命中地址1030,表示当执行IP=XXXX的LOAD指令时上次未命中的地址为1030。在临界未命中预取表300中的下一个字段是未命中距离字段303。在实施例中,该字段存储指令最后的连续两次高速缓存器未命中之间的距离。例如,如果第一次高速缓存器未命中发生在加载地址1000时,并且下一次高速缓存器未命中发生在加载地址1030时,则在未命中距离字段303中存储未命中距离为30。
在临界未命中预取表300中的下一个字段是未命中重复字段304和确认字段305。这些字段可被包括噪声滤波器的本发明实施例使用,以防止由于噪声未命中弄脏临界未命中预取表300和/或未命中数据。在一个实施例中,这些字段中的每个为一位。下面参考图4讨论这些字段的操作、以及临界未命中预取器的一般操作。
图4是根据本发明实施例管理数据预取的方法的流程图。该流程图可以用来说明图1的预取器120如何预取图2中所示的数据集。对于本例,假设:临界未命中预取表300目前没有条目,处理器101第一次执行在IP=XXXX的指令,并且当指令IP=XXXX第一次执行时,它从地址1000以及随后的每第十个地址加载。还假设:高速缓存器处于图2所示的状态。
如图4所示,该方法包括确定在指令XXXX的执行循环期间当从第一地址加载时已经有高速缓存器未命中(图4的401)。根据图2所示的高速缓存器的状态,指令IP=XXXX将导致地址1000的高速缓存器未命中。然后,预取管理器122将确定临界未命中预取表300是否包含IP=XXXX的条目(图4的402)。对于第一次高速缓存器未命中,临界未命中预取表300将不包含IP=XXXX的条目。根据一个实施例,将在临界未命中预取表300中建立IP=XXXX的条目(图4的403)。在一个实施例中,建立新的条目包括在表中存储上次未命中的地址(这里是1000)。在本实施例中,当稍后发生该指令的第二次未命中时,预取管理器122将确定未命中距离等于30(1030-1000),并将该值存储到未命中距离字段303中。注意,在图2中,将不会发生针对地址1010和1020的未命中,因为这些地址被缓存了。
在使用噪声过滤技术的另一个实施例中,不存储上一次未命中地址,直到出现该指令的第二次未命中。在本实施例中,未命中重复字段304用来指示对应所述条目的指令是否已经出现至少两次未命中。在本实施例中,当在临界未命中预取表300中建立新的条目时,清除未命中重复位。当指令XXXX下一次未命中发生在地址=1030时,预取器检查临界未命中预取表300,确定表中已经有指令XXXX的条目,但是该条目的未命中重复位还没有置位,置位未命中重复位,然后只在上一次未命中地址字段302中保存值。在这种情况下,上一次未命中地址将是1030。根据该实施例,对于只发生一次的噪声未命中,将不会记录上一次未命中地址。
为了说明假设:不使用噪声过滤技术,第二次未命中已经发生了,并且由此条目包含作为未命中距离的值30和作为上一次未命中地址的值1030。当指令IP=XXXX下一次未命中发生在地址1060时,预取器将确定临界未命中预取表300是否已经有指令IP=XXXX的条目(图4的402)。然后,临界未命中预取器将确定上次未命中的地址(在本例中,在上次未命中地址字段中的值为1030)与当前未命中地址的未命中距离(图4的404)。因为新的未命中在预计的未命中距离,所以在本实施例中预取管理器122预取与当前未命中相距未命中距离的数据(图4的405)。由此,预取在地址1090的数据以备当后面执行IP=XXXX的指令时使用。
在本发明的实施例中,要预取的数据预取到高速缓存器130中,并作标记表示已经预取了。在实施例中,该标记用在数据元素的高速缓存器条目中的一位实现,该位可以被称作“虚拟位”。在另一个实施例中,虚拟位可以作为多用途位。为了保持在临界未命中预取表中的正确模式的目的,如果从高速缓存器加载的数据标记为已经预取,则这种加载定义为并被预取器理解为高速缓存器未命中。即,当在执行指令期间从高速缓存器130中请求这种标记过的数据时,将从高速缓存器130提供数据,但是预取管理器122将好像发生高速缓存器未命中那样动作。在另一个实施例中,预取的数据加载到缓冲器(未示出)中,而不是加载到高速缓存器中。该缓冲器充当预取数据的高速缓存器。在本实施例中,即使数据在缓冲器中也会发生高速缓存器未命中,但是因为可以从缓冲器中获得数据,而不从RAM加载,所以依然能够高效地执行指令。
发送预取数据请求之后,预取管理器122更新指令IP=XXXX的临界预取表条目300(图4的406)。例如,预取管理器将在上次未命中地址字段中存储当前高速缓存器未命中的地址。
如果存储在未命中距离字段303中的未命中距离不同于当前未命中的未命中距离(图4的404),则在实施例中,不预取数据。在本实施例中,预取管理器可以通过存储新的未命中距离和新的上次未命中地址来更新临界未命中预取表300的指令IP=XXXX条目(图4的407)。下面参考图5的失配字段514讨论包括这样的滤波器的实施例,所述滤波器用于根据噪声未命中防止重新计算未命中距离。
然后,对于每个高速缓存器未命中,可以重复图4所示的方法,包括在不使用本预取算法会是未命中的高速缓存器命中。
在使用噪声过滤技术的另一个实施例中,未命中距离不用来预取数据,直到它已被确认。在本实施例中,临界未命中预取表300的确认字段305可以用来指示在未命中距离上是否发生了指令的两次连续的未命中。在本实施例中,当在临界未命中预取表300中建立新的条目时,清除确认位。假设当指令XXXX发生第二次未命中时,未命中距离被存储在条目中。当指令XXXX发生第三次未命中时,预取器检查临界未命中预取表300,并确定第三次未命中的地址与上次未命中地址相距是否为未命中距离。如果存储在未命中距离字段303中的未命中地址距离被准确地预测为当前未命中的未命中距离,则置位确认位。如果第三次未命中的未命中距离不同于存储在条目中的未命中距离,则这次不置位确认位。根据本实施例,预取管理器122不会为该指令引发数据预取,除非在临界未命中预取表300中对应该指令的确认位被置位。
图5是根据本发明另一个实施例的单次未命中表520和临界未命中预取表510的局部框图。该局部框图说明在其他技术中的两种不同的噪声过滤技术。一种技术,通过使用单次未命中表520存储只有单次未命中的指令的IP,来限制在临界未命中预取表510中建立新条目。该技术(可以称作“二表法(two-table approach)”)允许更小的表尺寸。第二种技术使用失配字段514防止根据噪声未命中重新计算未命中距离。这些技术可以单独或组合使用。
现在介绍二表法。在所说明的实施例中,临界未命中预取表510允许四个条目,单次未命中表520允许多于四个条目。在单次未命中表520中的每个条目具有单个字段,指令IP字段521。因此,在单次未命中表520中的每个条目可以存储指令的指令指针(例如,XXXX、YYYY、ZZZZ等)。临界未命中预取表510类似于图3的临界未命中预取表300。临界未命中预取表510具有指令IP字段511、上次未命中地址字段512、未命中距离字段513、失配字段514和确认字段515。临界未命中预取表500没有临界未命中预取表300中的未命中重复字段304,因为未命中重复字段的功能由单次未命中表520实现。在本实施例中,当未命中出现时,预取器120确定临界未命中预取表510是否具有导致这次未命中的指令的条目。如果临界未命中预取表510没有该指令的条目,则预取器120确定单次未命中表520是否具有该指令的条目。如果单次未命中表520中也没有该指令的条目,则在单次未命中表520中建立该指令的条目。如果单次未命中表520具有有该指令的条目,则在临界未命中预取表510中建立该指令的条目。当使用本实施例的噪声过滤技术时,将不会在临界未命中预取表510中建立该指令的条目,除非该指令产生两次未命中。(更准确而言,将不会在临界未命中预取表510中建立该指令的条目,除非单次未命中表520具有该指令较早前出现的未命中的记录。)因此,如果指令只引起了单次噪声未命中,则不会在临界未命中预取表510中建立条目。
临界未命中预取表510的失配字段514用来根据噪声未命中防止重新计算未命中距离。如果已经确定指令的未命中距离,并且稍后出现的未命中不在未命中距离,这可能表示新的未命中模式的开始,在这种情况下应当重新计算未命中距离。但是,在新距离的未命中可能只是噪声未命中,在这种情况下不应当重新计算未命中距离。例如,如果我们修改图2所示的数据集,使得由于某些与该指令的未命中距离的真正模式不相关的原因导致地址1070没有存储在高速缓存器130中,则即使该指令的未命中距离的真正模式具有未命中距离30,地址1070的加载也会导致未命中距离为10(1070-1060=10)的未命中。根据实施例,每当在不同于存储在未命中距离字段513中的距离的距离发生未命中时,预取器就检查失配字段514中的匹配位。如果在这种情况下匹配位是没有置位的,则预取器置位匹配位,并且不在未命中距离字段513中存储新的距离。如果匹配位是置位的,则预取器在未命中距离字段513中存储新的距离,并清除匹配位。最后,每当未命中发生在未命中距离字段513中存储的距离时就清除未命中位。因此,在新的未命中距离的单次未命中被假设为噪声未命中,但是在不同于未命中距离的距离的两次连续的未命中将导致重新计算失配位。
图6是根据本发明另一个实施例的具有临界未命中预取器620的计算机系统600的局部框图。该局部框图示出了在其它物件中的可以结合临界未命中预取器620一起操作的第二预取器,分隔跨过两个存储器的临界未命中表,以及在临界未命中预取器中包含的逻辑。在其它实施例中,可以分别使用图6的这三个方面的一个或两个。
计算机系统600具有带译码器110和执行单元107的处理器601,类似于图1的计算机系统100。此外,计算机系统600具有高速缓存器130和RAM 140。高速缓存器130是处理器601的一部分,但在其它实施例中高速缓存器130可以在处理器601的外部。处理器601具有耦合到译码器110、执行单元107和RAM 140的第二预取器650。临界未命中预取器620具有条目建立逻辑621、未命中距离更新逻辑622、噪声过滤逻辑623和条目替换逻辑624。处理器601具有耦合到临界未命中预取器620并由其使用的存储器626和存储器628。
第二预取器650包括用来预取数据元素以供指令使用的预取逻辑。在实施例中,第二预取器650结合临界未命中预取器620一起操作,但使用不同的预取机制。例如,第二预取器650可以是线索缓冲器,并且临界未命中预取器和线索缓冲器(hint buffer)都能够同时预取程序的数据。在本实施例中,临界未命中预取器和线索缓冲器可以互相补充(compliment)。
在实施例中,条目建立逻辑621可以是电路,如果指令已经引起多于一次的高速缓存器未命中,则所述电路在临界未命中预取表中建立指令的条目。在另一个实施例中,条目建立逻辑621可以至少部分地根据单次未命中表的内容确定指令产生了不止一次高速缓存器未命中。在实施例中,未命中距离更新逻辑622包括用于将指令的未命中距离记录在预取表条目中的电路。在另一个实施例中,未命中距离更新逻辑622还包括用于记录对于指令的至少两次连续未命中已经确认未命中距离的电路。在实施例中,噪声过滤逻辑623可以是防止由于噪声未命中导致弄脏临界未命中预取表和/或未命中数据。
在实施例中,条目替换逻辑624是这样的电路,该电路通过使用存储在条目的未命中重复字段和确认字段中的信息选择在预取表中要替换的条目。例如,如果建立新的条目,但是表已经满了,则条目需要被替换。在另一个实施例中,临界未命中预取表具有未命中重复字段和确认字段,条目替换逻辑624首先选择替换表中未命中重复位没有置位的任何条目(即,未命中字段表示该条目没有出现两次未命中)。在又一个实施例中,条目替换逻辑624接着选择替换确认位没有置位的任何条目(即,确认字段表示未命中距离还没有确认)。在另一个实施例中,在每种类型中以先进先出(FIFO)的方式选择要替换的条目。
图7是根据本发明另一个实施例的前端表710和后端表720的局部框图。在实施例中,用索引方案通过将临界未命中预取表分为两部分,并使临界未命中表(前端表)的一部分位于处理器流水线的前端来改善临界未命中预取器的效率。在本实施例中,前端表710和后端表720都允许相同数量的条目,并且在前端表710中的每个条目对应于后端表720的条目。如前所述,在表中的每一个条目涉及一条指令。在实施例中,在前端表710中的条目包括在指令IP字段701中的指令指针的值。在本实施例中,后端表720包含上次未命中地址字段702、未命中距离字段703、未命中重复字段704和确认字段705。后端表720构成主预取表,但是不存储用于标识条目所涉及的指令的任何信息。预取器通过搜索前端表710中的指令的IP确定在后端表720中要读出或更新的条目的位置。例如,为了更新在后端表720中的XXXX的条目的上次未命中地址字段702,预取器通过在前端表710的第一条目中找到值XXXX确定在两个表中的第一条目都涉及IP=XXXX的指令。这样,前端表710和后端表720可以当作好像是一个表来加以处理。
在实施例中,图6的存储器626存储前端表710,而存储器628存储后端表720。在另一个实施例中,存储器628比译码器110更接近高速缓存器130,存储器626比高速缓存器130更接近译码器110。因此,可以是32位的IP不需要向下游传遍所有的流水线。
图8是根据本发明另一个实施例的具有预取器的计算机系统800的局部框图。计算机系统800具有带译码器110、执行单元107和预取表存储器125的处理器801,类似于图1的计算机系统100。此外,计算机系统800具有高速缓存器130和RAM 140。处理器801还具有包括预取器硬件822和机械可读介质823的预取器820。机械可读介质823可以存储这样的预取器指令824,所述预取器指令824可以是由预取器硬件822执行的以实现上述的一个或多个临界未命中预取技术的可执行指令。如在这里所用的,术语“可执行指令”的意思是包括:目标代码、源代码、固件、微码等,并包括以压缩和/或加密的格式存储的指令,以及在被处理器执行之前必须被编译或安装器加以安装的指令。
本发明的实施例涉及临界未命中预取器。临界未命中预取器根据指令的高速缓存器未命中之间的距离为指令预取数据。本发明利用未命中距离的可预测性确定要预取的地址。本发明的几个实施例在这里专门说明和/或介绍。但是,应当理解,本发明的修改和变型被上述说明所覆盖,并在附带的权利要求书的范围内,没有脱离本发明的精神和范围。例如,可以使用上述介绍的方面的一个或多个的任意组合。此外,本发明可以用于物理地址或线性地址。此外,当确定要预取的地址时,预取器可以使用多个未命中距离。

Claims (20)

1.一种预取器,包括:
第一存储器,用于存储具有多个条目的预取表,每个条目均包含涉及指令的信息,所述条目包括未命中距离字段,所述未命中距离字段用于存储引起了第一次高速缓存器未命中的第一地址和第二地址之间的距离,所述指令对第二地址的访问引起了第二次高速缓存器未命中,第二次高速缓存器未命中是第一次高速缓存器未命中之后所述指令的下一次高速缓存器未命中,其中所述预取表不存储任何标识所述条目所涉及的指令的信息;
第二存储器,用于存储具有多个条目的前端表,每个条目均包括指令指针,其中在所述前端表中的每个条目对应于一个在所述预取表中的条目;
预取管理器,被耦合到第一存储器,用于管理所述预取表。
2.如权利要求1所述的预取器,其中在所述预取表中的条目还包括一个未命中重复字段,所述未命中重复字段用于指示对于所述指令是否已经检测到了不止一次未命中。
3.如权利要求1所述的预取器,其中在所述预取表中的条目还包括一个确认字段,所述确认字段用于指示在所述未命中距离字段中所存储的距离是否也曾是所述第二地址和第三地址之间的距离,所述指令对第三地址的访问引起第三次高速缓存器未命中,第三次高速缓存器未命中是第二次高速缓存器未命中之后所述指令的下一次高速缓存器未命中。
4.如权利要求1所述的预取器,其中在所述预取表中的条目还包括一个失配字段,所述失配字段指示前一次未命中是否曾处于和所述未命中距离字段中所存储的距离相匹配的距离。
5.如权利要求1所述的预取器,其中:
在所述预取表中的条目还包括一个未命中重复字段,所述未命中重复字段指示对于所述指令是否已经检测到了不止一次未命中;
在所述预取表中的条目还包括一个确认字段,所述确认字段指示在所述未命中距离字段中的距离是否也曾是所述第二地址和第三地址之间的距离,所述第三地址曾是第一次高速缓存器未命中的主体,第三次高速缓存器未命中是第二次高速缓存器未命中之后所述指令的下一次高速缓存器未命中;以及
所述预取管理器包括替代逻辑,所述替代逻辑通过使用在所述条目的未命中重复字段和确认字段中所存储的信息来选择在所述预取表中要替代的条目。
6.如权利要求1所述的预取器,其中所述预取器是一个系统的一部分,所述系统包括一个高速缓存器和一个译码器,其中第一存储器定位在离所述高速缓存器近而离所述译码器远的位置,第二存储器定位在离所述译码器近而离所述高速缓存器远的位置。
7.如权利要求1所述的预取器,其中所述预取表仅仅包括一个对应于一条已经引起了至少两次高速缓存器未命中的指令的条目。
8.如权利要求1所述的预取器,其中在所述预取表中的条目还包括一个未命中重复字段,所述未命中重复字段用于指示对于所述指令是否已经检测到了不止一次未命中;还包括一个确认字段,所述确认字段用于指示在所述未命中距离字段中所存储的距离是否也曾是在所述第二地址和第三地址之间的距离,所述第三地址曾是较早的高速缓存器未命中的主体,其中所述预取器还包括替代逻辑,所述替代逻辑用于通过使用在所述条目的所述未命中重复字段和所述确认字段之中所存储的信息来选择在所述预取表中要加以替代的条目。
9.如权利要求1所述的预取器,其中所述预取器把预取的数据和一个表明所述数据已经被预取了的指示一起存储在一个高速缓存器之中。
10.一种处理器,包括:
预取器,用于根据一个记录的、由一条指令已经产生的高速缓存器未命中之间的距离来预取数据以供所述指令使用;
用于执行所述指令的执行单元;
高速缓存器;
译码器;
第一存储器,用于存储一个包括条目的预取表,所述条目存储涉及指令的预取信息,但是不存储标识所述条目所涉及的指令的信息,所述第一存储器耦合到所述预取器,并且定位在离所述高速缓存器近而离所述译码器远的位置;以及
第二存储器,用于存储包括条目的前端表,所述条目对应于在所述预取表中的条目,其中所述前端表条目存储所述条目所涉及的指令的信息,所述第二存储器耦合到所述预取器,并且定位在离所述译码器近而离所述高速缓存器远的位置。
11.如权利要求10所述的处理器,其中所述预取表中的条目还包括一个未命中重复字段,所述未命中重复字段用于指示对于所述指令是否已经检测到了不止一次未命中;还包括一个确认字段,所述确认字段用于指示在所述未命中距离字段中所存储的距离是否也曾是在较早的高速缓存未命中之间的距离,所述预取器还包括替代逻辑,所述替代逻辑用于通过使用在所述条目的所述未命中重复字段和所述确认字段之中所存储的信息来选择在所述预取表中要加以替代的条目。
12.如权利要求10所述的预取器,其中所述预取器把预取的数据和一个表明所述数据已经被预取了的指示一起存储在一个高速缓存器之中。
13.如权利要求10所述的处理器,其中所述预取器包括第一电路,所述第一电路用于在所述指令已经引起了不止一个次高速缓存器未命的情况下在预取表中为所述指令建立一个条目,其中对于所述指令已经引起了不止一次高速缓存器未命中的确定至少部分地是以单次未命中表的内容为基础的。
14.如权利要求10所述的处理器,其中所述处理器还包括第二预取器,所述第二预取器用于预取数据元素以供所述指令使用,其中第二预取器一种采用不同的预取机制并结合所述预取器来操作。
15.一种管理数据预取的方法,该方法包括:
确定在从第一地址加载的指令的执行周期期间是否已经存在了高速缓存器未命中;
确定第一预取表是否含有所述指令的条目,所述条目存储未命中距离,并且所述条目存储第二地址,所述指令对第二地址的访问上次引起了所述指令的高速缓存器未命中,并且所述条目存储一个确认字段,所述确认字段用于指示所存储的未命中距离已确认过了;以及
如果第一预取表含有所述指令的条目,则部分地根据在所述条目中所存储的信息来确定是否要预取数据;以及
如果第一预取表不包含所述指令的条目,则在第一预取表中为所述指令建立一个新条目,只有在所述预取表中的其它条目也具有一个指示在那些其它条目中所存储的未命中距已确认过的确认字段的情况下,所述新条目才会替代所述预取表中的具有一个指示在正被替代的那个条目中所存储的未命中距离已得到确认的确认字段的条目。
16.如权利要求15所述的方法,其中,所述第一预取表不存储任何标识所述条目所涉及的指令的信息。
17.如权利要求15所述的方法,其中确定是否要预取数据包括:确定在第一地址和第二地址之间的距离等于所存储的未命中距离的情况下是否应该发送一个预取请求。
18.如权利要求15所述的方法,其中在第一预取表中对所述指令的条目包括一个失配字段,并且所述失配字段指示在已经过处理上次未命中时所述指令的上次未命中是否在所述条目中所存储的未命中距离发生了。
19.如权利要求18所述的方法,其中方所述法还包括:
确定在第一地址和第二地址之间的距离是否不等于所述未命中距离;
如果所述失配字段指示上次未命中已经发生在所存储的未命中距离,则更新所述失配字段,以便指示所述指令的上次未命中没有发生在所存储的未命中距离;以及
如果所述失配字段指示上次未命中未曾发生在所存储的未命中距离,则把所述未命中距离存储在所述未命中距离字段中,并且更新所述失配字段,以便指示所述指令的上次未命中没有发生在所存储的未命中距离。
20.如权利要求15所述的方法,其中
仅仅在第一预取表不包含对所述指令的条目,并且第二预取表包含对所述指令的条目的情况下,才在第一预取表中为所述指令建立一个条目;以及
其中,所述方法还包括:在第一预取表不包含对所述指令的条目,并且第二预取表不包含对所述指令的条目的情况下,在第二预取表中为所述指令建立一个条目。
CNB018216293A 2000-12-29 2001-12-18 根据未命中距离将数据预取到高速缓存器中的系统和方法 Expired - Fee Related CN1222870C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/749,936 2000-12-29
US09/749,936 US6584549B2 (en) 2000-12-29 2000-12-29 System and method for prefetching data into a cache based on miss distance

Publications (2)

Publication Number Publication Date
CN1484788A CN1484788A (zh) 2004-03-24
CN1222870C true CN1222870C (zh) 2005-10-12

Family

ID=25015840

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB018216293A Expired - Fee Related CN1222870C (zh) 2000-12-29 2001-12-18 根据未命中距离将数据预取到高速缓存器中的系统和方法

Country Status (8)

Country Link
US (3) US6584549B2 (zh)
EP (1) EP1346281A2 (zh)
CN (1) CN1222870C (zh)
AU (1) AU2002241682A1 (zh)
HK (1) HK1064170A1 (zh)
RU (1) RU2260838C2 (zh)
TW (1) TW541498B (zh)
WO (1) WO2002054230A2 (zh)

Families Citing this family (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10116863A1 (de) * 2001-04-04 2002-10-17 Infineon Technologies Ag Schnittstelle
US8171266B2 (en) * 2001-08-02 2012-05-01 Hewlett-Packard Development Company, L.P. Look-ahead load pre-fetch in a processor
EP1304619A1 (en) * 2001-10-22 2003-04-23 STMicroelectronics Limited Cache memory operation
US20030084433A1 (en) * 2001-10-31 2003-05-01 Chi-Keung Luk Profile-guided stride prefetching
US6832296B2 (en) * 2002-04-09 2004-12-14 Ip-First, Llc Microprocessor with repeat prefetch instruction
US6983346B2 (en) * 2002-05-10 2006-01-03 Texas Instruments Incorporated Reducing tag-ram accesses and accelerating cache operation during cache miss
US7162588B2 (en) * 2002-08-23 2007-01-09 Koninklijke Philips Electronics N.V. Processor prefetch to match memory bus protocol characteristics
US7165146B2 (en) * 2003-01-28 2007-01-16 Sun Microsystems, Inc. Multiprocessing computer system employing capacity prefetching
CN1327353C (zh) * 2003-04-21 2007-07-18 智慧第一公司 可选择性撤回预取的微处理器装置
US7177985B1 (en) * 2003-05-30 2007-02-13 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
US7111126B2 (en) * 2003-09-24 2006-09-19 Arm Limited Apparatus and method for loading data values
US7487296B1 (en) * 2004-02-19 2009-02-03 Sun Microsystems, Inc. Multi-stride prefetcher with a recurring prefetch table
US7120753B2 (en) * 2004-04-20 2006-10-10 International Business Machines Corporation System and method for dynamically adjusting read ahead values based upon memory usage
US7313654B2 (en) * 2004-10-27 2007-12-25 Xiv Ltd Method for differential discarding of cached data in distributed storage systems
US7380065B2 (en) * 2005-03-30 2008-05-27 International Business Machines Corporation Performance of a cache by detecting cache lines that have been reused
US7421540B2 (en) * 2005-05-03 2008-09-02 International Business Machines Corporation Method, apparatus, and program to efficiently calculate cache prefetching patterns for loops
US20070239940A1 (en) * 2006-03-31 2007-10-11 Doshi Kshitij A Adaptive prefetching
US7681047B2 (en) * 2006-04-18 2010-03-16 International Business Machines Corporation Decryption of data in storage systems
US20090195542A1 (en) * 2006-05-16 2009-08-06 Panasonic Corporation Image processing apparatus
US7774578B2 (en) * 2006-06-07 2010-08-10 Advanced Micro Devices, Inc. Apparatus and method of prefetching data in response to a cache miss
US8060701B2 (en) * 2006-12-08 2011-11-15 Qualcomm Incorporated Apparatus and methods for low-complexity instruction prefetch system
US7873791B1 (en) * 2007-09-28 2011-01-18 Emc Corporation Methods and systems for incorporating improved tail cutting in a prefetch stream in TBC mode for data storage having a cache memory
US8166277B2 (en) * 2008-02-01 2012-04-24 International Business Machines Corporation Data prefetching using indirect addressing
US8161265B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for multi-level indirect data prefetching
US8161264B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for data prefetching using indirect addressing with offset
US8161263B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for indirect data prefetching
US8209488B2 (en) * 2008-02-01 2012-06-26 International Business Machines Corporation Techniques for prediction-based indirect data prefetching
US7925865B2 (en) * 2008-06-02 2011-04-12 Oracle America, Inc. Accuracy of correlation prefetching via block correlation and adaptive prefetch degree selection
US8166251B2 (en) * 2009-04-20 2012-04-24 Oracle America, Inc. Data prefetcher that adjusts prefetch stream length based on confidence
US8140769B2 (en) * 2009-04-20 2012-03-20 Oracle America, Inc. Data prefetcher
US8880844B1 (en) * 2010-03-12 2014-11-04 Trustees Of Princeton University Inter-core cooperative TLB prefetchers
US8433852B2 (en) * 2010-08-30 2013-04-30 Intel Corporation Method and apparatus for fuzzy stride prefetch
US8949522B1 (en) * 2011-06-21 2015-02-03 Netlogic Microsystems, Inc. Performance of a stride-based prefetcher on an out-of-order processing unit (CPU)
CN102253901B (zh) * 2011-07-13 2013-07-24 清华大学 一种基于相变内存的读写区分数据存储替换方法
US9009449B2 (en) * 2011-11-10 2015-04-14 Oracle International Corporation Reducing power consumption and resource utilization during miss lookahead
WO2013101138A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Identifying and prioritizing critical instructions within processor circuitry
US20130185515A1 (en) * 2012-01-16 2013-07-18 Qualcomm Incorporated Utilizing Negative Feedback from Unexpected Miss Addresses in a Hardware Prefetcher
US20140082324A1 (en) * 2012-09-14 2014-03-20 Reuven Elhamias Method and Storage Device for Using File System Data to Predict Host Device Operations
US9304932B2 (en) * 2012-12-20 2016-04-05 Qualcomm Incorporated Instruction cache having a multi-bit way prediction mask
US9792120B2 (en) 2013-03-05 2017-10-17 International Business Machines Corporation Anticipated prefetching for a parent core in a multi-core chip
US9223710B2 (en) * 2013-03-16 2015-12-29 Intel Corporation Read-write partitioning of cache memory
CN104750696B (zh) * 2013-12-26 2018-07-20 华为技术有限公司 一种数据预取方法及装置
US9971694B1 (en) * 2015-06-24 2018-05-15 Apple Inc. Prefetch circuit for a processor with pointer optimization
US9792224B2 (en) 2015-10-23 2017-10-17 Intel Corporation Reducing latency by persisting data relationships in relation to corresponding data in persistent memory
CN106776371B (zh) * 2015-12-14 2019-11-26 上海兆芯集成电路有限公司 跨距参考预取器、处理器和将数据预取到处理器的方法
US10180905B1 (en) 2016-04-07 2019-01-15 Apple Inc. Unified prefetch circuit for multi-level caches
US9904624B1 (en) 2016-04-07 2018-02-27 Apple Inc. Prefetch throttling in a multi-core system
CN106021128B (zh) * 2016-05-31 2018-10-30 东南大学—无锡集成电路技术研究所 一种基于步幅和数据相关性的数据预取器及其预取方法
US10621095B2 (en) * 2016-07-20 2020-04-14 International Business Machines Corporation Processing data based on cache residency
US10521350B2 (en) 2016-07-20 2019-12-31 International Business Machines Corporation Determining the effectiveness of prefetch instructions
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
US20180095884A1 (en) * 2016-09-30 2018-04-05 Intel Corporation Mass storage cache in non volatile level of multi-level system memory
US10303575B2 (en) * 2017-01-10 2019-05-28 International Business Machines Corporation Time-slice-instrumentation facility
US10331567B1 (en) 2017-02-17 2019-06-25 Apple Inc. Prefetch circuit with global quality factor to reduce aggressiveness in low power modes
US10606752B2 (en) * 2017-11-06 2020-03-31 Samsung Electronics Co., Ltd. Coordinated cache management policy for an exclusive cache hierarchy
US11099995B2 (en) 2018-03-28 2021-08-24 Intel Corporation Techniques for prefetching data to a first level of memory of a hierarchical arrangement of memory
US20190303037A1 (en) * 2018-03-30 2019-10-03 Ca, Inc. Using sequential read intention to increase data buffer reuse
US11281585B2 (en) 2018-08-30 2022-03-22 Micron Technology, Inc. Forward caching memory systems and methods
US11093248B2 (en) * 2018-09-10 2021-08-17 International Business Machines Corporation Prefetch queue allocation protection bubble in a processor
US11243884B2 (en) * 2018-11-13 2022-02-08 Advanced Micro Devices, Inc. Control flow guided lock address prefetch and filtering
US11442867B2 (en) 2018-12-20 2022-09-13 Micron Technology, Inc. Using a second content-addressable memory to manage memory burst accesses in memory sub-systems
US11294808B2 (en) 2020-05-21 2022-04-05 Micron Technology, Inc. Adaptive cache
US11409657B2 (en) 2020-07-14 2022-08-09 Micron Technology, Inc. Adaptive address tracking
US11422934B2 (en) 2020-07-14 2022-08-23 Micron Technology, Inc. Adaptive address tracking
US11853220B2 (en) * 2021-10-14 2023-12-26 Arm Limited Prefetcher training

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5093777A (en) 1989-06-12 1992-03-03 Bull Hn Information Systems Inc. Method and apparatus for predicting address of a subsequent cache request upon analyzing address patterns stored in separate miss stack
US5790823A (en) * 1995-07-13 1998-08-04 International Business Machines Corporation Operand prefetch table
US6055622A (en) 1997-02-03 2000-04-25 Intel Corporation Global stride prefetching apparatus and method for a high-performance processor
US6253306B1 (en) 1998-07-29 2001-06-26 Advanced Micro Devices, Inc. Prefetch instruction mechanism for processor
US6311260B1 (en) 1999-02-25 2001-10-30 Nec Research Institute, Inc. Method for perfetching structured data
US6574712B1 (en) * 1999-11-08 2003-06-03 International Business Machines Corporation Software prefetch system and method for predetermining amount of streamed data

Also Published As

Publication number Publication date
HK1064170A1 (en) 2005-01-21
US20030196046A1 (en) 2003-10-16
RU2003119149A (ru) 2005-01-10
EP1346281A2 (en) 2003-09-24
US6584549B2 (en) 2003-06-24
TW541498B (en) 2003-07-11
WO2002054230A2 (en) 2002-07-11
WO2002054230A3 (en) 2003-12-11
CN1484788A (zh) 2004-03-24
RU2260838C2 (ru) 2005-09-20
US6701414B2 (en) 2004-03-02
WO2002054230A8 (en) 2003-03-06
AU2002241682A1 (en) 2002-07-16
US20020087802A1 (en) 2002-07-04
US20020087800A1 (en) 2002-07-04

Similar Documents

Publication Publication Date Title
CN1222870C (zh) 根据未命中距离将数据预取到高速缓存器中的系统和方法
US10042643B2 (en) Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US11467839B2 (en) Unified register file for supporting speculative architectural states
US10241795B2 (en) Guest to native block address mappings and management of native code storage
US9542187B2 (en) Guest instruction block with near branching and far branching sequence construction to native instruction block
US6226715B1 (en) Data processing circuit with cache memory and cache management unit for arranging selected storage location in the cache memory for reuse dependent on a position of particular address relative to current address
US9753856B2 (en) Variable caching structure for managing physical storage
US9207960B2 (en) Multilevel conversion table cache for translating guest instructions to native instructions
US6668307B1 (en) System and method for a software controlled cache
JP2001236266A (ja) 高レベルキャッシュの効率改善方法
KR20040111361A (ko) 포인터 식별 및 자동 데이터 프리페치
US6687807B1 (en) Method for apparatus for prefetching linked data structures
US6990551B2 (en) System and method for employing a process identifier to minimize aliasing in a linear-addressed cache
EP1320801A2 (en) System and method for pre-fetching for pointer linked data structures

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1064170

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20051012

Termination date: 20171218

CF01 Termination of patent right due to non-payment of annual fee