CN103514107B - 高性能数据缓存系统和方法 - Google Patents

高性能数据缓存系统和方法 Download PDF

Info

Publication number
CN103514107B
CN103514107B CN201210228069.0A CN201210228069A CN103514107B CN 103514107 B CN103514107 B CN 103514107B CN 201210228069 A CN201210228069 A CN 201210228069A CN 103514107 B CN103514107 B CN 103514107B
Authority
CN
China
Prior art keywords
data
instruction
address
data access
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210228069.0A
Other languages
English (en)
Other versions
CN103514107A (zh
Inventor
林正浩
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.)
Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Original Assignee
Shanghai Xinhao Bravechips Micro Electronics Co Ltd
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 Shanghai Xinhao Bravechips Micro Electronics Co Ltd filed Critical Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Priority to CN201210228069.0A priority Critical patent/CN103514107B/zh
Priority to US14/411,062 priority patent/US20150193348A1/en
Priority to PCT/CN2013/077892 priority patent/WO2014000626A1/en
Publication of CN103514107A publication Critical patent/CN103514107A/zh
Application granted granted Critical
Publication of CN103514107B publication Critical patent/CN103514107B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (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

一种高性能数据缓存系统和方法,应用于处理器领域时能在处理器核访问数据前,将所述数据填充到所述处理器核能直接访问的高速存储器中,几乎使所述处理器核每次都能在所述高速存储器中获取到需要的数据,达到极高的缓存命中率。

Description

高性能数据缓存系统和方法
技术领域
本发明涉及计算机,通讯及集成电路领域。
背景技术
通常而言,缓存的作用是将内存中的一部分内容复制在其中,使这些内容能在短时间内由处理器核快速存取,以保证流水线的持续运行。
现行缓存的寻址都基于以下方式,首先用地址中的索引段寻址读出标签存储器中的标签。同时用地址中索引段与块内位移段共同寻址读出缓存中的内容。此外,将标签存储器中读出的标签与地址中的标签段进行匹配。如果从标签存储器中读出的标签与地址中的标签段相同,那么从缓存中读出的内容有效,称为缓存命中。否则,如果从标签存储器中读出的标签与地址中的标签段不相同,成为缓存缺失,从缓存中读出的内容无效。对于多路组相联的缓存,同时对各个路组并行进行上述操作,以检测哪个路组缓存命中。命中路组对应的读出内容为有效内容。若所有路组都为缺失,则所有读出内容都无效。缓存缺失之后,缓存控制逻辑将低级存储媒介中的内容填充到缓存中。
缓存缺失可分为三类状况:强制缺失、冲突缺失和容量缺失。在现有缓存结构中,除了预取成功的小部分内容外,强制缺失是不可避免的。但是,现有的预取操作会带来不小的代价。此外,虽然多路组相联缓存可以降低冲突缺失,但受制于功耗及速度限制(如因为多路组相联缓存结构要求将所有路组由同一索引寻址的内容及标签同时读出并比较),路组数难以超过一定数目。此外,为了使缓存的速度与处理器核的运行速度匹配,很难增加缓存的容量。所以有多层次缓存的设置,低层次的缓存比高层次的缓存容量大但速度慢。
因此,现代的缓存系统通常由多路组相连的多层次缓存构成。新的缓存结构,如:牺牲缓存、跟踪缓存以及预取(取一个缓存块时把下一个缓存块也取来放在缓存缓冲器或使用预取指令)等被用来弥补现有的某些缺陷。然而,随着日渐扩大的处理器/存储器速度鸿沟,现行体系结构,特别是多种多样的缓存缺失的可能性,仍是制约现代处理器性能提升的最严重瓶颈。
本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。
发明内容
本发明提出一种用于辅助处理器核运行的方法,所述处理器核连接一个包含数据的第一存储器和一个比第一存储器速度更快的第二存储器,且所述处理器核用于执行一段包含至少一条使用一个基地址在第二存储器中访问数据的指令。所述方法包括:对指令进行审查,生成每条数据访问指令对应的基地址寄存器值的变化步长;根据基地址寄存器值的变化步长计算下次执行该数据访问指令时可能的数据寻址地址;根据计算得到的下次执行该数据访问指令时可能的数据寻址地址预取数据并存储在第二存储器中。
本发明还提出一种用于辅助处理器核运行的方法,所述处理器核连接一个包含数据的第一存储器和一个比第一存储器速度更快的第二存储器,且所述处理器核用于执行一段包含至少一条使用一个基地址在第二存储器中数据访问指令。所述方法包括:对指令段进行审查,从而提取出至少包含数据访问指令信息和最后更新基地址寄存器指令信息的指令信息;在最后更新至少一条数据访问指令所用的基地址寄存器的指令执行后,根据指令段对应的轨道将第一存储器中的数据填充到第二存储器中。
本发明还提出一种用于辅助处理器核运行的方法,所述处理器核连接一个包含数据的第一存储器、一个比第一存储器速度更快的第二存储器和一个比第二存储器速度更快的第三存储器,且所述处理器核用于执行一段包含至少一条在第三存储器中数据访问指令。所述方法包括:对指令进行审查,生成每条数据访问指令对应的基地址寄存器值的变化步长;根据基地址寄存器值的变化步长计算下次执行该数据访问指令时可能的数据寻址地址;根据计算得到的下次执行该数据访问指令时可能的数据寻址地址预取数据并存储在第三存储器中;将第三存储器中因内容替换而被移出第三存储器的数据存储在第二存储器中;将第二存储器中因内容替换而被移出第二存储器的数据写回第一存储器。
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。
有益效果
本发明所述系统和方法可以为数字系统使用的缓存结构提供基本的解决方案。与传统缓存系统仅在缓存缺失后才填充的机制不同,本发明所述的系统和方法在处理器访问一个数据之前就对数据缓存进行填充,可以避免或充分地隐藏强制缺失。这就是说,本发明所述缓存系统集成了预取过程。此外,本发明所述的系统和方法还在数据缓存与处理器核之间提供了一个容量较小、速度较快的数据读缓冲,能运行在较高的时钟频率,并降低了访问缓存带来的功耗,在单位功耗下的效率也比传统缓存系统有显著提高。对于本领域专业人士而言,本发明的其他优点和应用是显见的。
附图说明
图1是本发明所述的数据预取的处理器环境。
图2A是本发明所述指令信息存储器的一个实施例。
图2B是本发明所述指令信息存储器的另一个实施例。
图3A是本发明所述数据预测器的实施例。
图3B是本发明所述数据预测器的另一个实施例。
图4是本发明所述数据预测器计算基地址寄存器值变化步长的另一个实施例。
图5A是本发明所述数据预测器的另一个实施例。
图5B是计算数据预取次数的实施例。
图6是本发明所述基于事先存储的指令进行数据预取的实施例。
图7A是本发明所述数据访问指令在基地址信息存储器中表项格式的实施例。
图7B是本发明所述超前预测模块中计算数据寻址地址的时间点的一个实施例。
图8A是本发明所述通过寄存器额外的读端口获得基地址寄存器值的实施例
图8B是本发明所述采用时间复用的方式获得基地址寄存器值的实施例。
图8C是本发明所述通过旁路路径获得基地址寄存器值的实施例。
图8D是本发明所述通过专供数据预取使用的额外寄存器堆获得基地址寄存器值的实施例。
图9是本发明所述带有数据读缓冲的数据预取实施例。
图10是本发明所述数据预取的一个完整实施例。
具体实施方式
以下结合附图和具体实施例对本发明提出的高性能缓存系统和方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
需说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码也可以被用于所有附图以代表相同的或类似的部分。
此外,在本说明书中以包含处理器核的缓存系统为例进行说明,但本发明技术方案也可以被应用于包含任何合适的处理器(Processor)的缓存系统。例如,所述处理器可以是通用处理器(General Processor)中央处理器(CPU)、微控制器(MCU)、数字信号处理器(DSP)、图象处理器(GPU)、片上系统(SOC)、专用集成电路(ASIC)等。
图1是本发明所述的数据预取的处理器环境100。如图1所示,处理器环境100包含一个填充器102、一个扫描器104、一个数据存储器106、一个指令信息存储器108、一个数据预测器110和一个处理器核112。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件也可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
数据存储器106和指令信息存储器108可以包含任何合适的存储设备,如:寄存器(register)或寄存器堆(register file)、静态存储器(SRAM)、动态存储器(DRAM)、闪存存储器(flash memory)、硬盘、固态磁盘(Solid State Disk)以及任何一种合适的存储器件或未来的新形态存储器。数据存储器106可以作为系统的一个缓存工作,或当有其他缓存存在时作为一级缓存工作,且可以被分割成复数个被称为块(如存储块)的用于存储处理器核112要访问的数据(如:在数据块中的数据)的存储片段。
处理器核112可以执行数据访问(data access)指令,如装载(load)指令或存储(store)指令。当处理器核112执行一条数据访问指令时,可以用基地址加偏移量的方式进行数据寻址。处理器核112首先需要从更低层次的存储器中读入指令。在这里,存储器的层次指的是存储器与处理器核112之间的接近程度。越接近处理器核112的层次越高。此外,一个高层次的存储器通常比低层次的存储器速度快但容量小。
处理器核112也可以执行分支(branch)指令。当处理器核112执行一条分支指令时,首先确定分支目标指令地址,再根据分支转移条件是否成立决定是否进行分支转移。处理器核112还可以执行其他合适的指令。
扫描器104、指令信息存储器108、数据预测器110和填充器102用于将处理器核112将要访问到的数据填充到数据存储器106中,使处理器核112能从数据存储器106中以非常低的缓存缺失率访问到所需的数据。在这里,术语“填充”表示将指令从较低层次的存储器移动到较高层次的存储器中,术语“存储器访问”(Memory Access)表示处理器核112对最接近的存储器(即数据存储器106)进行读或写。此外,填充器102可以根据适当的地址从更低层次的存储器获取数据或数据块以填充到数据存储器106中。
扫描器104可以对处理器核112执行的每一条指令进行审查,并提取出某些信息,如:指令类型、基地址寄存器号和地址偏移量等。指令类型可以包括装载指令、存储指令、分支指令和其他指令等。地址偏移量可以包括数据访问地址偏移量和分支转移目标地址偏移量等。这些提取到的信息与处理器核112输出的该数据访问指令对应的基地址寄存器值一同构成该指令的相关信息被送到指令信息存储器108中。
指令信息存储器108存储了处理器核112最近执行过的指令的信息。指令信息存储器108中的每一项存储了一个指令地址与该指令相关信息的匹配对。指令地址即该指令本身的地址。
当扫描器104审查到一条数据访问指令时,该指令的指令地址被送到指令信息存储器108进行匹配。若匹配不成功,则在指令信息存储器108中建立该指令地址与对应相关信息的匹配对。若匹配成功,则由数据预测器110计算本次基地址寄存器值与存储在指令信息存储器108中的原基地址寄存器值的差值,并将指令信息存储器108中存储的基地址寄存器值更新为本次基地址寄存器值。利用计算得到的差值即可预先计算下一次或之后更多次数据访问时可能的数据寻址地址,从而在处理器核112再次执行到该数据访问指令之前,由填充器102将该一个或更多个可能的数据寻址地址对应的数据预取到数据存储器106中。
此外,扫描器104还可以根据提取出的分支指令的分支转移目标地址偏移量计算分支目标指令地址,并判断出该分支转移是否为向回转移(即分支目标指令地址小于该分支指令地址)。例如,将分支指令的指令地址与分支转移目标地址偏移量相加即可计算出分支目标指令地址。又例如,分支转移目标地址偏移量为负值时,即可判定该分支转移为向回转移。这样,可以通过简单判断确定保存在指令信息存储器108中的匹配对对应的数据访问指令是否位于该分支转移的范围内。例如,当其中某条数据访问指令地址大于或等于分支目标指令地址且小于该分支指令地址时,即可判定该数据访问指令位于该分支转移的范围内。可以在处理器核112执行到该向回转移的分支指令时,只对位于该分支转移范围内的数据访问指令计算下一次或之后更多次数据访问时可能的数据寻址地址,并预取相应数据。
在某些情况下,如执行数据寻址地址变化步长不变的循环代码时,采用本发明技术方案预测得到的可能的数据寻址地址就是实际数据寻址地址,因此可以在处理器核112执行数据访问指令前将该所需数据填充到数据存储器106中,使得处理器核112在对该数据进行读或写操作时不需要等待,从而提高处理器性能。
根据本发明技术方案,指令信息存储器108至少由一个内容寻址存储器(CAM)构成。也可以由其他合适的存储单元构成,如能实现类似功能的寄存器。处理器核112实时运行时扫描器104对正被处理器核112获取的指令进行扫描,提取出指令类型,并将数据访问指令的指令地址送到指令信息存储器108进行匹配。若匹配成功,则输出表示匹配成功信号;若匹配不成功,则在指令信息存储器108中建立包含该指令地址的表项,并输出表示匹配不成功的信号。当需要建立匹配对但指令信息存储器108已满时,可以如最近最少使用(LRU)策略或最少频繁使用策略(LFU)等替换策略对指令信息存储器108的表项进行替换。
图2A是本发明所述指令信息存储器的一个实施例200。在本实施例中,指令信息存储器108的主体部分由内容寻址存储器202和随机访问存储器(RAM)204构成。也可以由其他合适的存储器构成。内容寻址存储器202中存储了数据访问指令的指令地址,而随机访问存储器204中存储了该指令对应的基地址寄存器值。
当扫描器104审查到处理器核112正在获取的指令是一条数据访问指令时,该数据访问指令本身的指令地址210被送到内容寻址存储器202,将该指令地址与存储在内容寻址存储器202中的每个指令地址表项(entry)进行匹配。一旦匹配成功(如表项216),则输出随机访问存储器204中对应的表项(如表项216)内容214(即该指令地址对应的数据访问指令上次执行时的基地址寄存器值)。
若匹配不成功,则将该指令地址存储到内容寻址存储器202中由写指针208指向的表项,同时将处理器核112送来的基地址寄存器值212存储到随机访问存储器204中由写指针208指向的表项,这样就构成了一个指令地址与该指令相关信息的匹配对。之后,自增器206将写指针208的值增加一,使之指向下一个表项。根据处理器体系结构的不同,处理器核112送来基地址寄存器值的时间点也会有所不同,但与处理器核112获取相应数据访问指令的时间间隔(或时钟周期间隔)是相对固定的,因此可以将正确的基地址寄存器值写入相应的表项。这样,当处理器核112再次执行到该数据访问指令,且该指令对应的指令地址还存储在指令信息存储器108中时,就可以匹配成功并输出相应的表项内容(即存储的基地址寄存器值)。
图2B是本发明所述指令信息存储器的另一个实施例250。在本实施例中,指令信息存储器108的主体部分由寄存器和比较器构成。以表项266为例,地址寄存器258中存储了指令地址;信息寄存器262中存储了该指令地址对应的数据访问指令上次执行时的基地址寄存器值;标志寄存器264中存储了一个标志信息,表示对应表项是否位于当前分支转移范围内(如:‘1’表示该表项对应的数据访问指令位于当前分支转移范围内,‘0’表示该表项对应的数据访问指令位于当前分支转移范围外);比较器260可以将输入值与寄存器258中的地址值进行比较,并输出比较结果,如:大于、小于或等于。
选择器268根据扫描器104提取出的指令类型对输入的指令地址210和分支目标指令地址254。当扫描器104提取出的指令类型显示该指令为数据访问指令时,选择器268选择指令地址210作为输出送到各个表项中的比较器进行比较,根据“等于”的比较结果,可以找到该数据访问指令在指令信息存储器108中的匹配对。若匹配成功,则将对应表项中信息寄存器的内容(即该指令地址对应的数据访问指令上次执行时的基地址寄存器值)输出到端口268。若匹配不成功,则将该指令地址存储到由写指针208指向的表项的地址寄存器中,同时将处理器核112送来的基地址寄存器值存储到同一表项的信息寄存器中,这样就构成了一个指令地址与基地址寄存器值的匹配对。之后,自增器206将写指针208的值增加一,使之指向下一个表项。
当扫描器104提取出的指令类型显示该指令为向回转移(loop back)的分支指令时,选择器268选择分支目标指令地址254作为输出送到各个表项中的比较器进行比较,根据“大于等于”或“小于等于”的比较结果,可以判定各个表项对应的数据访问指令是否位于该分支指令(即当前分支)的分支转移范围内(即分支目标地址小于等于数据访问指令地址小于等于分支指令地址),并将位于分支转移范围内的数据访问指令地址对应表项中的标志寄存器值置为‘1’,将位于分支转移范围外的数据访问指令地址对应表项中的标志寄存器值置为‘0’。此外,当扫描器104提取出的指令类型显示该指令为分支指令、但不是向回转移时,将所有表项中的标志寄存器值置为‘0’。
图3A是本发明所述数据预测器的实施例300。在本实施例中,数据预测器110的主体部分由加法器构成。如之前实施例所述,当扫描器104审查到一条数据访问指令时,将该指令的指令地址210送到指令信息存储器108中的内容寻址存储器202进行指令地址匹配,将匹配成功时存储在随机访问存储器204中对应的表项中的基地址寄存器值308送到数据预测器110。
数据预测器110中的加法器302实现减法功能,用于将处理器核112送来的当前基地址寄存器值306(即该数据访问指令对应的基地址寄存器值)减去指令信息存储器108送来的原基地址寄存器值308,得到基地址寄存器差值310。该差值310就是两次执行该数据访问指令时数据寻址地址变化的步长(stride)。在某些情况下,特别是执行数据寻址地址变化步长不变的循环代码时,下一次执行该数据访问指令时数据寻址地址值就等于本次数据寻址地址值加上该步长值。
数据预测器110中的加法器304用于将该差值与处理器核112送来的当前数据访问指令的数据寻址地址312相加,即可得到下一次执行该数据访问指令时可能的数据寻址地址314,并将该数据寻址地址314送往数据存储器106进行地址匹配。若地址匹配不成功,则由填充器102对该数据寻址地址进行预取,否则不需要预取。
图3B是本发明所述数据预测器的另一个实施例350。在本实施例中的数据预测器110与图3A实施例中的相同,不同的是指令信息存储器108采用的是图2B中的结构。如之前实施例所述,当扫描器104审查到一条数据访问指令时,将该指令的指令地址210送到指令信息存储器108的各个地址寄存器进行指令地址匹配,将匹配成功时存储在对应的信息寄存器中的基地址寄存器值308送到数据预测器110,并将对应的标志寄存器352中的标志值354送往填充器102。
数据预测器110中的加法器302和加法器304根据当前基地址寄存器值306、原基地址寄存器值308和当前数据寻址地址312计算出下一次执行该数据访问指令时可能的数据寻址地址314,并送往数据存储器106进行地址匹配,以确定该地址对应的数据是否已经存储在数据存储器106中。同时,数据寻址地址314也被送到填充器102。
填充器102根据接收到的标志值354以及数据存储器106中地址匹配的结果判断是否需要对接收到的数据寻址地址314对应的数据进行预取。若标志值354为‘1’且在数据存储器106中地址匹配不成功,则由填充器102对该数据寻址地址进行预取,否则不需要预取。由于标志值354为‘1’的表项对应的数据访问指令都位于当前分支转移范围内,因此在本实施例中,仅对当前分支转移范围内的数据访问指令的下一次可能数据寻址地址进行了预取,即只对可能再次被执行的数据访问指令进行数据预取,从而减少了数据污染(pollution)。
此外,也可以对图3B实施例进行改进,使得填充器102在接收到的标志值354以及数据存储器106中地址匹配的结果时,只暂存需要预取的数据寻址地址。而指令信息存储器108中除了存储数据访问指令的相关信息外,还存储了与当前分支转移范围对应的向回转移的分支指令的地址信息。这样当扫描器104审查发现当前指令是分支指令时,可以将该指令地址与指令信息存储器108中的向回转移分支指令的地址信息进行比较,若比较结果相等,则当前分支指令就是该向回转移的分支指令,此时再由填充器102对暂存的数据寻址地址进行数据预取,从而进一步减少了数据污染。
采用图3A或图3B实施例计算基地址寄存器值变化步长的方法,在第一次执行到某条数据访问指令时将基地址寄存器值存储到指令信息存储器108中,在第二次执行到该数据访问指令时将当前基地址寄存器值减去已存储的基地址寄存器值,从而推算出第三次执行该数据访问指令时的数据寻址地址。可以采用其他预测方法,在不需要存储基地址寄存器值的情况下,更早计算基地址寄存器值变化步长,使得在第一次执行某条数据访问指令时就能推算出第二次执行该数据访问指令时的数据寻址地址。图4是本发明所述数据预测器计算基地址寄存器值变化步长的另一个实施例400。
在本实施例中,数据预测器110包含一个提取器434、一个基地址寄存器值变化步长过滤器432和一个加法器304。提取器434包含译码器422和提取器424、426、428。提取器434对处理器核112正在获取的指令402进行审查,由译码器422译码得到指令类型410,再根据译码的结果从指令402中提取出寄存器更新指令中的目标寄存器号404,寄存器值的变化量406和数据访问指令的基地址寄存器号408。通常不同类型的指令中寄存器号、寄存器值的变化量等值可以位于指令字中不同的位置,因此可以根据指令类型的译码结果从指令字中的相应位置提取出这些信息。
一般地,数据访问指令用到的基地址寄存器也属于寄存器堆中的寄存器,通过记录寄存器堆中所有寄存器的变化值,就可以直接得到或推导出任何一个基地址寄存器的变化值。对于其他情况,如基地址寄存器不属于寄存器堆中的寄存器,也可以采用类似的方法,记录寄存器堆中所有寄存器及所有基地址寄存器的变化值,直接得到或推导出任何一个基地址寄存器的变化值。
在本实施例中,译码得到的指令类型可以包括数据访问指令和寄存器更新指令。其中寄存器更新指令指的是对寄存器堆中任何一个寄存器的值进行更改的指令。当寄存器更新指令中目标寄存器值的变化量是以立即数形式出现时,该立即数的值就是对应的寄存器值的变化量406;若以其他方式更新寄存器值,也可以推导出变化量406。
指令信息存储器108中没有存储基地址寄存器的值,只包含用于存储指令地址的寄存器(或存储单元)、用于对输入指令地址210进行匹配的比较器,和标志寄存器352。与之前实施例所述类似,本实施例中的指令信息存储器108可以对输入的指令地址进行匹配,从而确定对应的数据访问指令是否位于向回转移的分支转移范围内,从而只对位于该范围内的数据访问指令进行数据预取。当然,在具体实现中,也可以省略指令信息存储器108,从而对所有的数据访问指令都进行数据预取。
基地址寄存器值变化步长过滤器432包含了寄存器堆412、414和选择器416、418、420。其中,选择器416的输入包括寄存器更新指令中的目标寄存器号404和数据访问指令的基地址寄存器号408,选择信号则是指令类型410。若当前指令是寄存器更新指令,选择器416选择寄存器更新指令中的目标寄存器号404作为输出以控制选择器418;若当前指令是数据访问指令,选择器416选择数据访问指令的基地址寄存器号408作为输出以控制选择器418。
选择器418的输入为寄存器堆412和414的输出,其输出430被送到选择器420的一个输入端,而选择器420的另一个输入端为寄存器值的变化量406,选择信号则是指令类型410。若当前指令是寄存器更新指令,选择器420选择寄存器值的变化量406作为输出送往寄存器堆412和414;若当前指令是数据访问指令中的存储指令,选择器420选择从选择器418送来的输出430作为输出送往寄存器堆412和414。
寄存器堆412受提取器434送来的寄存器更新指令中的目标寄存器号404控制其中各个寄存器的写入选择器420的输出值,并受提取器434送来的数据访问指令的基地址寄存器号408控制各个寄存器的清零。寄存器堆414则提取器434送来的数据访问指令的基地址寄存器号408控制,以此信号作为写使能控制寄存器堆414中各个寄存器的写入选择器420的输出值。
以下根据扫描器审查得到的不同指令类型对基地址寄存器值变化步长过滤器432的操作进行说明。
当提取器434审查发现当前指令是一条寄存器更新指令时,提取出该指令中的寄存器值的变化量406,选择器420选择该变化量作为输出写入寄存器堆412中由该指令中目标寄存器号404寻址的相应目标寄存器中,从而将该寄存器值的变化步长保存在寄存器堆412中。
当提取器434审查发现当前指令是一条数据访问指令时,选择器416选择该指令中基地址寄存器号作为输出以控制选择器418,从寄存器堆412、414的寄存器输出中选择对应该基地址寄存器的输出作为该数据访问指令的寄存器值变化步长430,同时控制寄存器堆412中相应的寄存器内容清零。
此外,若该数据访问指令是一条将寄存器值存储到主存储器的指令时,还需要由选择器420选择寄存器堆412输出的寄存器值变化步长430作为输出写入寄存器堆414的相应寄存器中,从而暂存该变化步长值。若该数据访问指令是一条从主存储器中将数据装载到寄存器的指令时,还需要由选择器418选择寄存器堆414中相应暂存寄存器的输出作为输出430送到选择器420经选择后写入寄存器堆412中由该寄存器号寻址的寄存器中,从而将之前暂存的变化步长值恢复到相应寄存器中。
这样,寄存器堆412中存储了各个寄存器值的变化步长值,而寄存器堆414中暂存了被临时替换出寄存器的寄存器值对应的变化步长值。过滤器432保证了当处理器核112执行到数据访问指令时,能输出对应该数据访问指令的寄存器(即基地址寄存器)的变化步长值,实现了图3A、3B实施例中减法器302的功能。
此后,与之前实施例所述类似,加法器304对数据寻址地址312和基地址寄存器值变化步长430相加,即可得到下一次执行该数据访问指令时可能的数据寻址地址314。这样,采用过滤器432能更早计算出基地址寄存器值变化步长,使得在第一次执行某条数据访问指令时就能推算出第二次执行该数据访问指令时的数据寻址地址。之后的操作在此不再说明。
采用上述实施例计算基地址寄存器值变化步长的方法,可以在得到基地址寄存器值变化的步长之后,计算出下一次执行到某条数据访问指令时的数据寻址地址。此外,也可以在每次进行数据访问时除了将所需数据所在的数据段填充到数据存储器106中,预取下一数据段并填充到数据存储器106中,实现固定长度的数据预取。还可以对数据预测器110做改进,使得在得到基地址寄存器值变化的步长后能计算出之后多次执行到某条数据访问指令时的多个数据寻址地址,从而预取更多的数据,进一步提高处理器性能。图5A是本发明所述数据预测器的另一个实施例500。为了便于描述,只显示了与本实施例说明相关的内容,省略了其他部分或部件。
在本实施例中,数据预测器110中的过滤器432和加法器304与图4实施例中的相同,其中,过滤器432的输入524包括了图4实施例中过滤器432的输入404、406、408和410。不同之处在于,本实施例中增加了一个寄存器502用于锁存加法器304的输出,并用锁存值510代替图3A实施例中的数据寻址地址314输出,且图3A实施例中加法器304的另一个输入就是来源于处理器核112的当前数据访问指令的数据寻址地址312,而本实施例中加法器304的另一个输入512是经选择器514从数据寻址地址312和寄存器502的锁存值510中选择得到的值。
此外,本实施例中还增加了一个查找表504和一个带锁存功能的计数模块516。查找表504可以根据输入向回转移的当前分支转移范围大小506(即分支向回转移的指令条数或地址个数)及访问存储器的平均时延(即填充时延,Fill Latency)查找出对应该分支转移范围内所有数据访问指令的适合的数据预取次数,并将该次数送到计数模块516,对该分支转移范围内的数据访问指令给予一个数据预取次数。计数模块516根据填充器102送来的预取反馈信号进行计数,并输出相应的控制信号以控制锁存器502。该预取反馈信号可以是表示填充器102对某一数据已经开始预取的信号,也可以是表示填充器102对某一数据已经预取完成的信号,还可以是其他任何合适的信号。
通常而言,根据访问存储器的平均时延可以确定在一次访问存储器所需的等待时间内可以执行多少条指令。当分支转移范围内的指令数大于对应一次访问存储器可以执行的指令数时,只需要在执行数据访问指令时对下一次数据寻址地址进行预取就可以掩盖访问存储器的时延;当分支转移范围内的指令数大于对应一次访问存储器可以执行的指令数的一半时,只需要在执行数据访问指令时对之后两次数据寻址地址进行预取就可以掩盖访问存储器的延时;其他情况可以依此类推。这样,只需要在查找表504中存储了对应向回转移的当前分支转移范围不同大小的不同数据预取次数,就可以根据当前分支转移范围大小确定预取的次数。
图5B是计算数据预取次数的实施例550。在本实施例中,线段552表示填充时延的长度,弧线554表示对于某个向回转移的分支转移而言,当分支转移成功发生时,两次执行同一条指令的时间间隔。如图5B所示,在本实施例中,访问一次存储器完成填充所花费的时间大于三次执行同一分支转移范围内的指令且小于四次执行这些指令所需的时间,因此若能在执行到向回转移的分支指令前,对该分支转移范围内的数据访问指令预取四次数据,就可以准备好之后执行到该数据访问指令时所需的数据,从而完全掩盖数据访问指令因缓存缺失造成的等待。
当提取器434审查到一条相关信息已经存储在指令信息存储器108中的数据访问指令时,选择器514选择从处理器核112来的数据寻址地址312作为加法器304的输入512。这样,与图3A实施例所述相同,加法器304可计算得到下一次执行该数据访问指令时可能的数据寻址地址518并被锁存后作为数据寻址地址510的送往数据存储器106进行地址匹配,以确定该地址对应的数据是否已经存储在数据存储器106中,从而决定是否由填充器102对该数据寻址地址进行预取。若地址匹配不成功,则由填充器102对该数据寻址地址进行预取,否则不需要预取。
查找表504根据输入的当前分支转移范围大小506输出需要预取的次数到计数模块516。计数模块516初始值为‘0’,每次接收到填充器102送来的反馈信号508之后就增加‘1’,同时输出控制信号520控制寄存器502。选择器514选择寄存器502输出的数据寻址地址510作为输出512送到加法器304。此时输入310不变,因此加法器304的输出就是在上次(即第一次)预测的数据寻址地址的基础上再增加一个基地址寄存器变化步长,从而得到新的(即第二次)预测的数据寻址地址。在控制信号520的控制下该数据寻址地址被写入寄存器502并输出作为数据寻址地址510的送往数据存储器106进行地址匹配,以确定该地址对应的数据是否已经存储在数据存储器106中,从而决定是否由填充器102对该数据寻址地址进行预取。若地址匹配不成功,则由填充器102对该数据寻址地址进行预取,否则不需要预取。
计数模块516每次接收到填充器102送来的反馈信号508之后就增加‘1’,直到其值等于查找表504送来的预取次数,此时通过控制信号停止寄存器502的写入操作,停止该过程。这样,总共产生了查找表504输出的预取次数个数据寻址地址,预取了更多的数据。
之后提取器434再次审查到该数据访问指令时,若之前预取的数据还存储在数据存储器106中,则由于已经预取了多次数据,因此对于此次寄存器502输出的多个数据寻址地址,只有最后一个数据寻址地址对应的数据可能不在数据存储器106中,因此只需要预取一个数据即可。若之前预取的数据已经不存储在数据存储器106中,则按之前实施例所述进行预取即可。
这样,可以对不同大小的分支转移范围给予不同的预取次数。例如,在访问存储器时延固定的情况下,分支转移范围比较大意味着两次该分支转移范围内的同一条数据访问指令之间的间隔时间较长,因此可以用较少的预取次数掩盖访问存储器的时延;而分支转移范围比较小则意味着两次该分支转移范围内的同一条数据访问指令之间的间隔时间较短,因此需要用较多的预取次数掩盖访问存储器的时延。可以根据这个原则建立查找表504。
采用上述实施例所述技术可以对位于循环内的数据访问指令的数据寻址地址进行预测,在再次执行这些指令前对预测地址对应的数据进行预取,从而减少因数据缺失导致的等待时间,提高处理器性能。还可以利用一个指令缓冲,用于存储处理器可能即将执行的指令,并由扫描器104对这些指令进行审查,提前发现数据访问指令,提取出基地址寄存器号,在该数据访问指令执行前最后一次更新该基地址寄存器时就获取基地址寄存器值以计算该数据访问指令的数据寻址地址,从而在执行该数据访问指令前就对该数据寻址地址对应的数据进行预取,以掩盖因数据缺失导致的等待时间。图6是本发明所述基于事先存储的指令进行数据预取的实施例600。
在本实施例中,指令存储器602存储了处理器核可能即将执行的指令。对于不同的处理器体系结构和不同的应用情况,可以用不同的部件实现指令存储器602。例如,在某种处理器体系结构中,每次指令缓存对外取指,都会取回一个指令段,该指令段由包含所需指令在内的多条指令构成,这样,指令段中该所需指令之后的指令就是处理器核可能即将执行的指令,因此可以用指令缓存的一个行构成指令存储器602。又如,在某种处理器体系结构中,将刚执行过的循环的代码对应的指令段存储在专用的指令存储器(如循环代码存储器)中供下次执行该循环时使用,这样,当再次执行到该循环时,该循环代码存储器中的指令就是处理器核可能即将执行的指令,因此可以用循环代码存储器构成指令存储器602。此外,指令存储器602也可以是一个额外的存储器,用于存储经任何合适方法判定为可能即将执行的指令。为了不失一般性,本实施例中的指令存储器602就是一个独立的存储器,当用其他部件构成指令存储器602时,情况也类似。
指令扫描器604对指令存储器602中的指令进行审查,提取出指令信息并送到基地址信息存储器606保存。该提取出的指令信息至少包含数据访问指令的信息和最后更新寄存器指令的信息。超前预测模块608对基地址信息存储器606中的信息进行分析,对于每条数据访问指令,确定导致其基地址最后更新的指令的位置,并根据处理器核当前执行指令的地址,判断该基地址是否已经更新完毕。一旦该基地址已经更新完毕,则计算该数据访问指令的数据寻址地址,并送往数据存储器106进行匹配。若匹配不成功,数据存储器106将该数据寻址地址送往填充器102进行预取。若匹配成功,则不需要预取。
需要说明的是,虽然在本实施例中指令扫描器604是一个单独的部件,但根据应用情况的不同,指令扫描器604与之前实施例中的扫描器104可以是同一个扫描器。
根据本发明技术方案,可以对指令存储器602输出的指令进行扫描分析,得到数据访问指令的位置和最后更新该数据访问指令所用的基地址寄存器值的指令的位置,从而计算出该最后更新基地址寄存器值的指令与该数据访问指令之间的指令间隔数,并将该指令间隔数存储在基地址信息存储器606中,用于确定计算数据寻址地址的时间点。图7A是本发明所述数据访问指令在基地址信息存储器中表项格式的实施例700。
在本实施例中基地址信息存储器的表项格式只有一种,即对应数据访问指令的表项格式702。表项格式702可以包含一个装载/存储标志7044和一个数值706。其中装载/存储标志704是经扫描器604译码得到的指令类型,数值706则存储了之前所述的指令间隔数。例如,假设一个数据访问指令是指令块中的第7条指令,而最后更新其基地址寄存器的指令是该指令块中的第3条指令,那么,对于该数据访问指令而言,其数值706的值为‘-4’。这样,当处理器核112送出的程序计数器的值比该数据访问指令的地址小4个指令地址时,该基地址寄存器的值被更新,此时即可计算数据寻址地址。
当到达计算数据寻址地址的时间点时,可以通过基地址寄存器值加上地址偏移量的方法计算出数据寻址地址。其中,地址偏移量作为立即数形式出现在指令中,因此可以从指令存储器602中直接获得,也可以在由指令扫描器604审查时提取并存储在基地址信息存储器606中,使用时再从基地址信息存储器606中获得。还可以通过任何其他合适的方法获得。
图7B是本发明所述超前预测模块中计算数据寻址地址的时间点的一个实施例。在本实施例中,基地址信息存储器606输出该数据访问指令对应的指令间隔数766送到加法器754。加法器754的另一个输入就是数据访问指令在其指令块中的位置偏移量值。加法器754对指令间隔数766和数据访问指令所在的位置偏移量值相加就可以得到最后更新该基地址寄存器的指令的位置768。该位置768被送到比较器756。比较器756的另一个输入是处理器核112输出的指令地址770,其比较结果被送的到寄存器1560以控制其值的更新。
此外,基地址信息存储器606输出该数据访问指令中的地址偏移量774和基地址寄存器号778。该基地址寄存器号被送到处理器核112获取对应的寄存器值776,并将获取到寄存器值776送到加法器762;而该地址偏移量被直接送到加法器762。这样,加法器762可以计算产生数据寻址地址。
当位置768的值与处理器核112输出的指令地址770相等时,表示对应基地址寄存器的值正在(或已经)被更新,此时加法器762计算结果就是该数据访问指令所需的数据寻址地址,即被送到数据存储器106的本次数据寻址地址。
基地址寄存器的值是经处理器核112计算产生并存储在处理器核112内部的寄存器中,根据本发明技术方案,可以通过多种途径获得,如:通过处理器核112中寄存器额外的读端口获得、采用时分复用读口的方式从处理器核112中寄存器获得、通过处理器核112中的旁路(bypass)路径获得、或通过一个专供数据预取使用的额外寄存器堆获得。
现有处理器体系结构中一般由运算单元计算产生基地址寄存器值。在通常结构中,寄存器堆中存储了包含基地址寄存器在内的各个寄存器的值。寄存器堆输出的寄存器值或其他来源的数值构成处理器核中运算单元的一个输入值,而寄存器堆输出的寄存器值或其他来源的数值构成运算单元的一个输入值。运算单元对两个输入值进行运算并将结果写回寄存器堆。为了便于说明,本实施例以运算单元有两个输入和一个输出为例,对于更多或更少输入及更多输出的情况也类似。在这里,寄存器堆输出的两个寄存器值可以是同一个寄存器的值,也可以是不同寄存器的值。而运算结果可以写回与这两个寄存器值来源相同的寄存器,也可以写回不同的寄存器。
图8A是本发明所述通过寄存器额外的读端口获得基地址寄存器值的实施例800。在本实施例中,运算单元804对输入值806和808进行运算并将结果810写回寄存器堆822的过程与通常处理器体系结构相同。不同的是,寄存器堆822比通常体系结构中的寄存器堆多一个读端口824,这样,当到达计算数据寻址地址的时间点时就可以通过该额外的读端口将对应的基地址寄存器值经读端口824读出,以计算数据寻址地址。
图8B是本发明所述采用时分复用的方式获得基地址寄存器值的实施例820。在本实施例中,运算单元804对输入值806和808进行运算并将结果810写回寄存器堆的过程与通常处理器体系结构相同。不同的是,寄存器堆的输出806、808还被送到选择器842经选择后作为基地址寄存器值844输出。这样,当基地址寄存器值更新完成后,若运算单元804对应之后指令的操作数输入中至少有一个非来源于寄存器堆,则由输入值对应的寄存器读端口输出该基地址寄存器值,或若至少有一个输入就是该基地址寄存器的值,则寄存器值816或818就是该基地址寄存器的值。可以经选择器842选择该基地址寄存器值作为输出844,以计算数据寻址地址。
图8C是本发明所述通过旁路路径获得基地址寄存器值的实施例840。在本实施例中,运算单元804对输入值806和808进行运算并将结果810写回寄存器堆的过程与通常处理器体系结构相同。不同的是,运算结果810不但被写回寄存器堆,还被通过旁路路径862送出。这样,当运算单元804当前正在进行更新基地址寄存器值的运算时,其运算结果就是更新后的基地址寄存器值,因此通过旁路路径862送出的值就是所需的基地址寄存器值,从而用于计算数据寻址地址。此旁路方法需要知道运算结果810出现的正确时间点。这个时间点可以由图7A实施例中的数值774确定。以图7A所述情况为例,数值774的值为‘-4’,那么当处理器核112执行到该数据访问指令之前4条指令时,运算单元804输出的运算结果就是所需的基地址寄存器值。
图8D是本发明所述通过专供数据预取使用的额外寄存器堆获得基地址寄存器值的实施例860。在本实施例中,运算单元804对输入值806和808进行运算并将结果810写回寄存器堆的过程与通常处理器体系结构相同。不同的是,本实施例中增加了一个额外的寄存器堆882。寄存器堆882中包含了原有寄存器堆中全部基地址寄存器的值,是原有寄存器堆的影子(shadow)寄存器堆。所有对原有寄存器堆中基地址寄存器的写入值都会被同时写入寄存器堆882的对应寄存器中。这样,凡是对原有寄存器堆中基地址寄存器的更新操作都会反映到寄存器堆882中。因此,当到达计算数据寻址地址的时间点时,可以从寄存器堆882中读出该基地址寄存器值884,以计算数据寻址地址。在物理实现上,寄存器堆882可以位于处理器核内或处理器核外的任何合适的位置。
根据本发明所述技术方案,可以在数据存储器106和处理器核112之间增加一个数据读缓冲,用于暂存新预取进来的数据。当处理器核112执行数据访问指令时,首先在数据读缓冲中查找所需数据,若该数据不存在,则再到数据存储器112中查找。数据存储器112中存储的则是替换出该数据读缓冲的数据。图9是本发明所述带有数据读缓冲的数据预取实施例900。为了便于说明,在图9中只显示了与本实施例说明相关的内容,省略了其他部分或部件。
在图9中,数据存储器106和数据读缓冲902的主体部分都由存储地址标签的存储器和存储数据内容的存储器构成。其中,存储器904和906是随机访问存储器,用于存储处理器核112可能需要访问的数据。存储器904和906都被划分为多个数据存储块,每个数据存储块可以存储至少一个数据,或更多的连续数据(即数据块)。存储器908和910是内容寻址存储器,用于存储上述数据存储块对应的地址信息。所述地址信息可以是数据存储块中存储的数据块的起始地址,也可以是该起始地址的一部分(如高位部分),还可以是其他任何合适的地址信息。
存储器908和910也被划分为多个标签存储块,每个标签存储块存储了一个地址信息。存储器908中的标签存储块与存储器904中的数据存储块一一对应,而存储器910中的标签存储块与存储器906中的数据存储块一一对应。这样,通过对存储器908中的地址信息进行匹配,就能找到存储器904中对应的数据存储块,而通过对存储器910中的地址信息进行匹配,就能找到存储器906中对应的数据存储块。
在本实施例中,选择器914的一个输入为存储器904输出的数据块932,另一个输入为预取来的数据块934,选择信号为数据存储器106中地址匹配的结果,输出为送往选择器930的数据块936。对于选择器914而言,若送到数据存储器106进行匹配的地址944匹配成功,则选择存储器904输出的数据块932作为输出数据块936,否则选择预取来的数据块934作为输出数据块936。
选择器930的一个输入为选择器914的输出数据块936,另一个输入为处理器核112送来的用于存储操作的数据918,选择信号为表示当前操作是否为存储操作的信号,输出为送往存储器906的数据块938。对于选择器930而言,若当前为存储操作,则选择处理器核112送来的数据918作为输出数据块938,否则选择选择器914输出的数据块936作为输出数据块938。
此外,在本实施例中,数据填充单元942用于产生预取的数据寻址地址,可以是之前实施例所述的数据预测器110,也可以是之前实施例所述的超前预测模块608,还可以是这两者的结合,或任何其他合适的数据寻址地址预测模块。
当数据填充单元942输出一个用于预取的数据寻址地址912时,数据寻址地址912先被送到选择器920经选择后作为寻址地址922在数据读缓冲902中的标签存储器910进行地址信息的匹配。若匹配成功,则地址912对应的数据已经存储在数据读缓冲902的存储器906中,不需要预取。若匹配不成功,则将该地址作为输出地址944送到数据存储器106中的标签存储器908进行地址信息的匹配。同样地,若匹配成功,则地址944对应的数据已经存储在数据存储器106的存储器904中,不需要预取,而是从存储器904中读出包含该数据在内的数据块并经选择器914及选择器930选择后写入存储器906,使得该数据存储在数据读缓冲902中。若匹配不成功,则将该地址作为输出地址916送往填充器102进行预取,并在数据读缓冲902中分配一个可用的数据块存储位置及对应的地址信息存储位置。
若数据读缓冲902已满,则可以根据一定的替换策略将某个数据块及其相应地址信息移出数据读缓冲902并通过总线940存入数据存储器106中。同样地,若数据存储器106已满,则可以根据一定的替换策略将某个数据块及其相应地址信息移出数据存储器106并通过总线932送到填充器102写回主存储器。所述替换策略可以是最近最少使用(LRU)替换策略、最少频繁使用(LFU)替换策略或其他任何合适的替换策略。
预取来的包含该数据在内的数据块934经选择器914及选择器930选择后直接写入存储器906中所述分配的位置,使得该数据存储在数据读缓冲902中。这样,经预测得到的数据寻址地址对应的数据都被存放在数据读缓冲902中供处理器核112执行数据访问指令时读/写。
当执行数据装载指令时,可以根据处理器核112送出的数据寻址地址924经选择器920选择后作为寻址地址922在数据读缓冲902中进行匹配,若匹配成功,即该指令对应的数据已经存储在数据读缓冲902中,则可以找到相应的数据块,并由数据寻址地址924的低位从输出的该数据块926中选出所需数据928以完成数据装载操作。若匹配不成功,即该指令对应的数据尚未存储在数据读缓冲902中,则将该地址作为输出地址944送到数据存储器106中的标签存储器908进行地址信息的匹配。若匹配成功,则从存储器904中读出包含该数据在内的数据块并经选择器914及选择器930选择后写入存储器906,同时将其作为数据块926送往处理器核112,并由数据寻址地址924的低位从中选出所需数据928以完成数据装载操作。若匹配不成功,则将该地址作为输出地址916送往填充器102进行预取,预取来的包含该数据在内的数据块934经选择器914及选择器930选择后直接写入存储器906中,并作为数据块926送往处理器核112,并由数据寻址地址924的低位从中选出所需数据928以完成数据装载操作。根据本发明技术方案,该数据尚未存储在数据读缓冲902中的原因可以是之前的数据寻址地址预测错误(即尚未预取该数据),也可以是该数据已被替换出数据读缓冲902,还可以是其他任何合适的原因。
当执行数据存储指令时,可以根据处理器核112送出的数据寻址地址924经选择器920选择后作为寻址地址922在数据读缓冲902中进行匹配。若匹配成功,即该指令对应的数据已经存储在数据读缓冲902中,则可以根据匹配结果确定该数据在存储器906中的位置,从而将处理器核112送出的数据918经选择器930选择后写入存储器906中以完成数据存储操作。若匹配不成功,即该指令对应的数据尚未存储在数据读缓冲902中,则在数据读缓冲902中分配一个可用的数据块存储位置及对应的地址信息存储位置,并将处理器核112送出的数据918经选择器930选择后写入存储器906中以完成数据存储操作。
这样,最新预取来的数据都被存储在数据读缓冲902中供处理器核112访问,只有从数据读缓冲902中替换出的数据才被存储到数据存储器106中。在实际应用中,数据读缓冲902的容量可以比较小,以支持处理器核112的快速访问,而数据存储器106的容量可以比较大,以容纳更多处理器核112可能访问的数据。此外,由于处理器核112即将访问的数据大多被存储在数据读缓冲902中,因此可以减少对数据存储器106的访问次数,从而降低功耗。
图10是本发明所述数据预取的一个完整实施例1000。在本实施例中,处理器核112、指令存储器602、基地址信息存储器606、数据存储器106、数据读缓冲902的结构和功能与之前实施例所述相同。过滤器432的结构与图4实施例类似,用于保存各个基地址寄存器值的变化步长,并根据输入的基地址寄存器号选择、输出对应步长变化值1046。
扫描器1002能对指令存储器602中的指令进行审查,并提取出某些信息,如:指令类型、基地址寄存器号、基地址寄存器变化步长值等。指令类型可以包括装载指令、存储指令、最后更新寄存器指令、分支指令和其他指令等。指令类型信息以行的形式被存储在指令类型存储器1010中,而基地址寄存器号、变化步长值等信息被存储在基地址信息存储器606中。此外指令中以立即数形式出现的地址偏移量(如数据访问地址偏移量和分支转移目标地址偏移量等)被直接存储在指令信息存储器1008中。
循迹器1004根据指令类型存储器1010输出的指令类型,可以找到下一个数据访问指令,从而通过读指针1018输出该数据访问指令的地址对基地址信息存储器606和指令信息存储器1008进行寻址。在本实施例中,假设指令类型为‘1’代表数据访问指令,指令类型为‘0’代表非数据访问指令,这样指令类型存储器1010中存储的一行‘0’和‘1’就代表了对应指令的类型。此外,再假设指令地址小的指令类型排在左边,指令地址大的指令类型排在右边,即当按顺序执行这些指令时,各个指令类型的访问顺序为从左向右。
循迹器1004的主要包括了移位器1020、前导零计算器1022和加法器1024和寄存器1026。其中移位器1020将从指令类型存储器1010读出的代表复数条指令的复数个指令类型1028向左移位,其移动位数由循迹器1004中寄存器1026输出的读指针决定。移位器1020输出的移位后指令类型1030的最左边一位是步进位(STEP Bit)。该步进位的信号与从处理器核来的信号1032共同决定寄存器1026的更新。
指令类型1030被送到前导零计数器1022以计算下一个‘1’指令类型(代表相应指令为数据访问指令)前有多少个‘0’指令类型(代表相应指令为非数据访问指令),其中不管步进位是‘0’或‘1’都被计算为一位‘0’。得出的前导‘0’的数目1034(步进数STEP Number)则被送到加法器1024与寄存器1026输出的指针值1018相加以得出下一数据访问指令地址1016,在此下一数据访问指令之前的非数据访问指令则会被循迹器1004跳(Skip)过。
当循迹器1004读指针指向代表一条指令的表项时,受读指针控制的移位器也将存储器1010输出的复数条指令类型统一向左移位。此时代表存储器1010所读出指令的指令类型被移位到指令类型1030中的最左面的步进位。移位指令类型1030被送入前导零计数器1022计算下一条数据访问指令之前指令的条数。此时前导零计数器1022的输出1034即是循迹器1004应该前进的步长。此步长与寄存器1026的输出由加法器1024相加后即得出下一数据访问指令地址1018。
当移位后指令类型1030中的步进位信号为‘0’时,这表示循迹器1004读指针所指向的存储器1010中的表项为非数据访问指令,此时该步进位信号控制寄存器1026更新。此时新的读指针指向同一轨道中的下一条数据访问指令,此数据访问指令前的非数据访问指令均被越过。新的读指针控制移位器1020将指令类型1028移位,使代表此数据访问指令的指令类型位落到移位指令类型1030的步进位上供下一步操作。
当移位后指令类型1030中的步进位信号为‘1’时,这表示读指针所指向的存储器1010中的表项代表数据访问指令。此时该步进位信号不影响寄存器1026更新,寄存器1026由处理器核来的信号1032控制更新。此时加法器1024输出1016是当前数据访问指令同一轨道上的下一条数据访问指令的地址。如此周而复始,循迹器1004可以跳过轨道表中的非数据访问指令而总是指向数据访问指令。。
当处理器核112执行该数据访问指令时,指令信息存储器1008根据读指针1018寻址输出相应内容,即该数据访问指令对应的地址偏移量1036。地址偏移量1036与处理器核112送来的该基数据访问指令对应的地址寄存器值1038经加法器1012相加后即可得到本次数据访问所需的数据寻址地址1040。由于当前正在执行数据访问指令,因此选择器1016选择数据寻址地址1040作为输出地址1042送往数据读缓冲902进行地址信息的匹配。之后过程如之前实施例所述,可以获取到该数据寻址地址对应的数据,在此不再说明。
与此同时,数据寻址地址1040还被送到加法器1014,与过滤器432送来的基地址寄存器值变化步长值1046一同作为输入进行加法操作。这样,加法器1014输出下一次可能的数据寻址地址1050到选择器1016。当处理器核当前执行的指令不是数据访问指令时,选择器1016选择该可能的数据寻址地址1050送往数据读缓冲902进行地址信息的匹配,之后过程如之前实施例所述,可以预取到该数据寻址地址对应的数据,在此不再说明。
当该数据访问指令执行完毕时,处理器核112送到循迹器1004的控制信号1032表示该数据访问指令已经执行完毕,因此将已经加法器输出的再下一个(第二个)数据访问指令的位置写入寄存器1026中,使得读指针1018指向并停止在第二个数据访问指令处。之后的操作以此类推。
在本实施例中,执行数据访问指令时对应的数据寻址地址1040和下一次执行时可能的数据寻址地址1050均在处理器核112外即可产生,并由选择器1016选择后送往数据读缓冲902进行地址信息匹配,以获得包含相应的数据段1054。因此处理器核112只需要输出所需数据在数据段中的偏移地址1052(即数据寻址地址的低位)即可从数据段1054中选出所需指令。

Claims (30)

1.一种用于辅助处理器核运行的方法,所述处理器核连接一个数据存储器,且所述处理器核用于执行一段包含至少一条使用一个基地址加偏移量为地址在所述数据存储器中访问数据的指令;所述方法包括:
将处理器核执行的数据访问指令地址与第一记录中的各指令地址匹配;
若匹配不成功,则在第一记录中建立处理器核执行的数据访问指令地址与处理器核执行数据访问指令时的基地址寄存器中数值的匹配对;
若匹配成功,则求取本次处理器核执行数据访问指令时的本次基地址寄存器值与第一记录中的基地址寄存器值的差值,并将第一记录中存储的基地址寄存器值更新为本次基地址寄存器值;
利用所述求取得到的差值预先计算下一次或之后更多次同一条数据访问指令可能的数据寻址地址,在处理器核再次执行到该数据访问指令之前,将该下一次或之后更多次同一条数据访问指令可能的数据寻址地址对应的数据预取到数据存储器中。
2.根据权利要求1所述方法,其特征在于将处理器核送来的当前基地址寄存器值减去所述第一记录中的原基地址寄存器值,得到所述求取得到的差值。
3.根据权利要求1所述方法,其特征在于将求取得到的差值以该数据访问指令基地址寄存器号为地址存入第二记录;
所述数据访问指令以指令中含有的基地址寄存器号为地址读取第二记录中相应求取得到的差值供预先计算可能的数据寻址地址。
4.根据权利要求3所述方法,其特征在于当数据访问指令是一条将寄存器值存储到主存储器的指令时,将第二记录中存储的所述求取得到的差值以数据访问指令中基地址寄存器号为地址存入第三记录;
当数据访问指令是一条从主存储器中将数据装载到寄存器的指令时,以数据访问指令中基地址寄存器号为地址将第三记录中的所述求取得到的差值恢复到第二记录中。
5.根据权利要求1所述方法,其特征在于审查处理器核将要执行的分支指令是否为向回转移(loop back)的分支指令;
如果所述分支指令是向回转移的分支指令,则进一步将其分支目标指令地址与所述第一记录中各数据访问指令的地址比较以确定记录中各数据访问指令在向回转移的范围内;
根据所述第一记录中各处于向回转移的范围内的数据访问指令的后续可能数据寻址地址提前将数据预取到数据存储器中。
6.根据权利要求5所述方法,其特征在于根据输入向回转移的当前分支转移范围及访问存储器的平均时延求取对应该分支转移范围内所有数据访问指令的数据预取次数。
7.根据权利要求6所述方法,其特征在于所述数据预取次数由访问存储器平均时延除所述分支转移范围中的指令执行时间而获得。
8.根据权利要求1所述方法,其特征在于以所述求取得到的差值加上当前数据访问地址作为下次预取地址以预取数据存入所述数据存储器。
9.根据权利要求1所述方法,其特征在于在所述数据存储器和处理器核之间增加一个数据读缓冲,用于暂存新预取进来的数据;
当处理器核执行数据访问指令时,首先在数据读缓冲中查找所需数据,若所需数据不存在,则再到数据存储器中查找;
数据存储器中存储替换出该数据读缓冲的数据。
10.一种用于辅助处理器核运行的方法,所述处理器核连接到存储器;所述方法包括:
暂存处理器核即将执行的指令块,对这些指令进行审查,提前发现数据访问指令,提取出并记录其中基地址寄存器号信息;
在该数据访问指令执行前最后一次更新该基地址寄存器时就获取更新后的基地址寄存器值以计算该数据访问指令的数据寻址地址;
在执行该数据访问指令前就对该数据寻址地址对应的数据进行预取。
11.根据权利要求10所述方法,其特征在于进一步提取数据访问指令的地址和最后更新该数据访问指令所用的基地址寄存器值的指令的地址;
从而计算出该最后更新基地址寄存器值的指令与该数据访问指令之间的指令地址差值;
记录该指令地址差值。
12.根据权利要求11所述方法,其特征在于以存储的数据访问指令地址减去所述指令地址差值以获得最后更新该数据访问指令所用的基地址寄存器值的指令的地址。
13.根据权利要求11所述方法,其特征在于当处理器核输出的指令地址与所述数据访问指令所用的基地址寄存器值的更新指令的地址相同时,即以第一记录中与该数据访问指令对应的所述基地址寄存器号从处理器核获得更新后的基地址寄存器值;
以所述基地址寄存器值加上第一记录中该数据访问指令中含有的地址偏移量以计算出数据访问地址;
将所述数据访问地址送到存储器以预取数据。
14.根据权利要求10所述方法,其特征在于所述获取更新后的基地址寄存器值能够通过多种途径获得:
通过处理器核中寄存器额外的读端口获得;
或采用时分复用读口的方式从处理器核中寄存器获得;
或通过处理器核中的旁路路径获得;
或通过一个专供数据预取使用的额外寄存器堆获得。
15.根据权利要求10所述方法,其特征在于在所述存储器和处理器核之间增加一个数据读缓冲,用于暂存新预取进来的数据;
当处理器核执行数据访问指令时,首先在数据读缓冲中查找所需数据,若所需数据不存在,则再到存储器中查找;
存储器中存储替换出该数据读缓冲的数据。
16.一种处理器核系统,其中处理器核连接一个数据存储器,且所述处理器核用于执行一段包含至少一条使用一个基地址加偏移量为地址在所述数据存储器中访问数据的指令;
系统将处理器核执行的数据访问指令地址与指令信息存储器中的各指令地址匹配;
若匹配不成功,则在指令信息存储器中建立处理器核执行的数据访问指令地址与处理器核执行数据访问指令时的基地址寄存器中数值的匹配对;
若匹配成功,则求取本次处理器核执行数据访问指令时的本次基地址寄存器中数值与指令信息存储器中的基地址寄存器值的差值,并将指令信息存储器中存储的基地址寄存器值更新为本次基地址寄存器值;
利用所述求取得到的差值预先计算下一次或之后更多次同一条数据访问指令可能的数据寻址地址,在处理器核再次执行到该数据访问指令之前,将该下一次或之后更多次同一条数据访问指令可能的数据寻址地址对应的数据预取到数据存储器中。
17.根据权利要求16所述系统,其特征在于将处理器核送来的当前基地址寄存器值通过减法器减去指令信息存储器中的原基地址寄存器值,得到所述求取得到的差值。
18.根据权利要求16所述系统,其特征在于将每个寄存器的差值以寄存器号为地址存入基地址寄存器值变化步长过滤器中的主寄存器;
所述数据访问指令以指令中含有的寄存器号为地址读取基地址寄存器值变化步长过滤器中相应主寄存器中寄存器差值供预先计算可能的数据寻址地址。
19.根据权利要求18所述系统,其特征在于当数据访问指令是一条将寄存器值存储到主存储器的指令时,将基地址寄存器值变化步长过滤器中该主寄存器中寄存器差值以数据访问指令中基地址寄存器号为地址存入临时寄存器;
当数据访问指令是一条从主存储器中将数据装载到寄存器的指令时,以数据访问指令中基地址寄存器号为地址将临时寄存器中的该寄存器差值恢复到基地址寄存器值变化步长过滤器中的主寄存器。
20.根据权利要求16所述系统,其特征在于将向回转移分支指令的目标指令地址与指令信息存储器中各地址比较,根据比较结果判定指令信息存储器中各数据访问指令是否位于该分支指令的分支转移范围内;
根据所述指令信息存储器中各处于向回转移的范围内的数据访问指令的后续可能数据寻址地址提前将数据预取到数据存储器中。
21.根据权利要求20所述系统,其特征在于还有查找表以及计数模块;
以向回转移分支范围为输入读取查找表内容中的预取次数填入计数模块;
所述计数模块控制对处于向回转移的分支范围中的所有数据访问指令按计数模块中填入的预取次数预取数据存入数据存储器。
22.根据权利要求21所述系统,其特征在于所述查找表内容中所述预取次数由访问存储器平均时延除所述分支转移范围中的指令执行时间而获得。
23.根据权利要求16所述系统,其特征在于以所述求取得到的差值加上当前数据访问地址作为下次预取地址以预取数据存入所述数据存储器。
24.根据权利要求16所述系统,其特征在于在所述数据存储器和处理器核之间增加一个数据读缓冲器,用于暂存新预取进来的数据;
当处理器核执行数据访问指令时,首先在数据读缓冲器中查找所需数据,若所需数据不存在,则再到数据存储器中查找;
数据存储器中存储替换出该数据读缓冲的数据。
25.一种用于辅助处理器核运行的系统,所述处理器核连接到存储器;所述系统包括:
指令缓存器暂存处理器核即将执行的指令块,系统对指令缓存器中的指令进行审查,提前发现数据访问指令,提取出并记录其中基地址寄存器号信息;
在该数据访问指令执行前处理器核最后一次更新该基地址寄存器时就获取基地址寄存器值以计算该数据访问指令的数据寻址地址;
在处理器核执行该数据访问指令前就对该数据寻址地址对应的数据进行预取。
26.根据权利要求25所述系统,其特征在于进一步提取数据访问指令的地址和最后更新该数据访问指令所用的基地址寄存器值的指令的地址;
从而计算出该最后更新基地址寄存器值的指令与该数据访问指令之间的指令间隔数;
将该指令间隔数作为指令地址差值记录在基地址信息存储器。
27.根据权利要求26所述系统,其特征在于以所述指令缓存器中存储的数据访问指令地址减去所述指令间隔数以获得最后更新该数据访问指令所用的基地址寄存器值的指令的指令地址。
28.根据权利要求27所述系统,其特征在于当处理器核输出的指令地址与所述数据访问指令所用的基地址寄存器值的更新指令的地址相比较为相同时,即以所述指令缓存器中与该数据访问指令对应的基地址寄存器号从处理器核获得更新后的基地址寄存器值;
以所述基地址寄存器值加上指令缓存器中该数据访问指令中含有的地址偏移量以计算出数据访问地址;
将所述数据访问地址送到存储器以预取数据。
29.根据权利要求28所述系统,其特征在于所述获得更新后的基地址寄存器值能够通过多种途径获得:
通过处理器核中寄存器额外的读端口获得;
或采用时分复用读口的方式从处理器核中寄存器获得;
或通过处理器核中的旁路路径获得;
或通过一个专供数据预取使用的额外寄存器堆获得。
30.根据权利要求26所述系统,其特征在于在所述存储器和处理器核之间增加一个数据读缓冲,用于暂存新预取进来的数据;
当处理器核执行数据访问指令时,首先在数据读缓冲中查找所需数据,若所需数据不存在,则再到存储器中查找;
存储器中存储替换出该数据读缓冲的数据。
CN201210228069.0A 2012-06-27 2012-06-27 高性能数据缓存系统和方法 Active CN103514107B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201210228069.0A CN103514107B (zh) 2012-06-27 2012-06-27 高性能数据缓存系统和方法
US14/411,062 US20150193348A1 (en) 2012-06-27 2013-06-25 High-performance data cache system and method
PCT/CN2013/077892 WO2014000626A1 (en) 2012-06-27 2013-06-25 High-performance data cache system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210228069.0A CN103514107B (zh) 2012-06-27 2012-06-27 高性能数据缓存系统和方法

Publications (2)

Publication Number Publication Date
CN103514107A CN103514107A (zh) 2014-01-15
CN103514107B true CN103514107B (zh) 2018-04-06

Family

ID=49782239

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210228069.0A Active CN103514107B (zh) 2012-06-27 2012-06-27 高性能数据缓存系统和方法

Country Status (3)

Country Link
US (1) US20150193348A1 (zh)
CN (1) CN103514107B (zh)
WO (1) WO2014000626A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105868126B (zh) * 2016-03-23 2018-09-18 中国电子科技集团公司第三十八研究所 一种提高指令高速缓冲存储器命中率的装置及方法
WO2018205117A1 (zh) * 2017-05-08 2018-11-15 华为技术有限公司 一种多核系统内存访问方法、相关装置、系统及存储介质
KR102395477B1 (ko) * 2017-11-20 2022-05-09 삼성전자주식회사 호스트 메모리에 대한 메모리 액세스를 스케쥴링하는 장치 컨트롤러, 및 이를 포함하는 저장 장치
CN112579373B (zh) * 2020-12-08 2022-10-11 海光信息技术股份有限公司 用于分支预测器的验证方法、系统、设备以及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1776607A (zh) * 2005-12-02 2006-05-24 浙江大学 多地址空间的块传输指令的控制方法及其装置
EP2204741A1 (en) * 2008-12-30 2010-07-07 Advanced Micro Devices, Inc. Processor and method for using an instruction hint to prevent hardware prefetch from using certain memory accesses in prefetch calculations
CN102163144A (zh) * 2011-05-05 2011-08-24 浙江大学 嵌入式处理器的硬件数据预取方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6766441B2 (en) * 2001-01-19 2004-07-20 International Business Machines Corporation Prefetching instructions in mis-predicted path for low confidence branches
US6973078B2 (en) * 2001-04-20 2005-12-06 Sun Microsystems, Inc. Method and apparatus for implementing low latency crossbar switches with integrated storage signals
US7647196B2 (en) * 2007-08-08 2010-01-12 Dp Technologies, Inc. Human activity monitoring device with distance calculation
US8782348B2 (en) * 2008-09-09 2014-07-15 Via Technologies, Inc. Microprocessor cache line evict array
US8255633B2 (en) * 2009-11-13 2012-08-28 International Business Machines Corporation List based prefetch

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1776607A (zh) * 2005-12-02 2006-05-24 浙江大学 多地址空间的块传输指令的控制方法及其装置
EP2204741A1 (en) * 2008-12-30 2010-07-07 Advanced Micro Devices, Inc. Processor and method for using an instruction hint to prevent hardware prefetch from using certain memory accesses in prefetch calculations
CN102163144A (zh) * 2011-05-05 2011-08-24 浙江大学 嵌入式处理器的硬件数据预取方法

Also Published As

Publication number Publication date
US20150193348A1 (en) 2015-07-09
WO2014000626A1 (en) 2014-01-03
CN103514107A (zh) 2014-01-15

Similar Documents

Publication Publication Date Title
CN103513957B (zh) 高性能缓存方法
CN102841865B (zh) 高性能缓存系统和方法
US7707397B2 (en) Variable group associativity branch target address cache delivering multiple target addresses per cache line
Calder et al. Predictive sequential associative cache
JP3542021B2 (ja) セット予測によりセット連想キャッシュの遅延を少なくする方法及び装置
US8370575B2 (en) Optimized software cache lookup for SIMD architectures
CN104050092B (zh) 一种数据缓存系统及方法
US5353426A (en) Cache miss buffer adapted to satisfy read requests to portions of a cache fill in progress without waiting for the cache fill to complete
JP4027620B2 (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
US20080052488A1 (en) Method for a Hash Table Lookup and Processor Cache
CN104756090B (zh) 提供扩展的缓存替换状态信息
US9753855B2 (en) High-performance instruction cache system and method
CN107533461A (zh) 具有用于对存储器寻址的不同寄存器的计算机处理器
TW201447581A (zh) 預取單元、資料預取方法以及電腦程式產品
EP0796465A1 (en) Scalar data cache for a vector processor
TW201351145A (zh) 指令快取的減少耗能
CN102236541A (zh) 预加载指令控制
US10275358B2 (en) High-performance instruction cache system and method
US11301250B2 (en) Data prefetching auxiliary circuit, data prefetching method, and microprocessor
CN103176914B (zh) 一种低缺失率、低缺失惩罚的缓存方法和装置
CN103514107B (zh) 高性能数据缓存系统和方法
US20100250842A1 (en) Hybrid region cam for region prefetcher and methods thereof
CN104424132B (zh) 高性能指令缓存系统和方法
CN103765378B (zh) 2d收集指令和2d高速缓存
GB2426082A (en) Memory caching using separate instruction and data caches

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
CP02 Change in the address of a patent holder

Address after: 201203 501, No. 14, Lane 328, Yuqing Road, Pudong New Area, Shanghai

Patentee after: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd.

Address before: 200092, B, block 1398, Siping Road, Shanghai, Yangpu District 1202

Patentee before: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd.

CP02 Change in the address of a patent holder