CN103513957B - 高性能缓存方法 - Google Patents

高性能缓存方法 Download PDF

Info

Publication number
CN103513957B
CN103513957B CN201210228030.9A CN201210228030A CN103513957B CN 103513957 B CN103513957 B CN 103513957B CN 201210228030 A CN201210228030 A CN 201210228030A CN 103513957 B CN103513957 B CN 103513957B
Authority
CN
China
Prior art keywords
instruction
address
data
block
branch
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
CN201210228030.9A
Other languages
English (en)
Other versions
CN103513957A (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 CN201210228030.9A priority Critical patent/CN103513957B/zh
Priority to EP13809284.6A priority patent/EP2867778A4/en
Priority to PCT/CN2013/077963 priority patent/WO2014000641A1/en
Priority to US14/411,009 priority patent/US20150186293A1/en
Publication of CN103513957A publication Critical patent/CN103513957A/zh
Application granted granted Critical
Publication of CN103513957B publication Critical patent/CN103513957B/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/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
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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
    • 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
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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)

Abstract

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

Description

高性能缓存方法
技术领域
本发明涉及计算机,通讯及集成电路领域。
背景技术
通常缓存的作用是将更低级存储器中的部分内容复制在其中,使这些内容能被更高级存储器或处理器核快速存取,以保证流水线的持续运行。
现行缓存的寻址都基于以下方式,用地址中的索引段寻址读出标签存储器中的标签与地址中的标签段进行匹配;用地址中索引段与块内位移段共同寻址读出缓存中的内容。如果从标签存储器中读出的标签与地址中的标签段相同,那么从缓存中读出的内容有效,称为缓存命中。否则,如果从标签存储器中读出的标签与地址中的标签段不相同,称为缓存缺失,从缓存中读出的内容无效。对于多路组相联的缓存,同时对各个路组并行进行上述操作,以检测哪个路组缓存命中。命中路组对应的读出内容为有效内容。若所有路组都为缺失,则所有读出内容都无效。缓存缺失之后,缓存控制逻辑将低级存储媒介中的内容填充到缓存中。
缓存缺失可分为三类状况:强制缺失、冲突缺失和容量缺失。在现有缓存结构中,除了预取成功的小部分内容外,强制缺失是不可避免的。但是,现有的预取操作会带来不小的代价。此外,虽然多路组相联缓存可以降低冲突缺失,但受制于功耗及速度限制(如因为多路组相联缓存结构要求将所有路组由同一索引寻址的内容及标签同时读出并比较),路组数难以超过一定数目。
现代的缓存系统通常由多路组相连的多层次缓存构成。新的缓存结构,如:牺牲缓存、跟踪缓存以及预取等都是基于上述基本缓存结构并改善上述结构。然而,随着日渐扩大的处理器/存储器速度鸿沟,现行体系结构,特别是多种缓存缺失,已成为是制约现代处理器性能提升的最严重瓶颈。
本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。
发明内容
本发明提出一种用于辅助处理器核运行的方法,所述处理器核连接一个包含可执行指令的第一指令存储器、一个包含数据的第一数据存储器、一个比第一指令存储器速度更快的第二指令存储器、一个比第二指令存储器速度更快的第三指令存储器、一个比第一数据存储器速度更快的第二数据存储器和一个比 第二数据存储器速度更快的第三数据存储器。所述方法包括:对正被从第二指令存储器填充到第三指令存储器的指令进行审查,从而提取出至少包括分支信息的指令信息,并生成每条数据访问指令对应的基地址寄存器值的变化步长;根据提取出的指令信息建立复数条轨道;根据复数条指令轨道中的一条或多条轨道将至少一条或多条指令可能被处理器核执行的指令从第一指令存储器填充到第二指令存储器;根据复数条指令轨道中的一条或多条轨道将至少一条或多条指令在被处理器核执行前从第二指令存储器填充到第三指令存储器,使得处理器核能从第三指令存储器获取所述至少一条或多条指令;根据基地址寄存器值的变化步长计算下次执行该数据访问指令时可能的数据寻址地址;根据计算得到的下次执行该数据访问指令时可能的数据寻址地址将第一数据存储器中的数据填充到第三数据存储器中;将第三数据存储器中因内容替换而被移出第三数据存储器的数据存储在第二数据存储器中;并将第二数据存储器中因内容替换而被移出第二数据存储器的数据写回第一数据存储器。
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。
有益效果
本发明所述系统和方法可以为数字系统使用的缓存结构提供基本的解决方案。与传统缓存系统仅在缓存缺失后才填充的机制不同,本发明所述的系统和方法在处理器执行一条指令或访问一个数据之前就对指令缓存和数据缓存进行填充,可以避免或充分地隐藏强制缺失。本发明所述系统和方法在本质上提供了一个全相联的指令缓存结构,避免了或充分隐藏了冲突缺失和容量缺失。此外,本发明所述的系统和方法避免了在读取指令缓存的时延关键路径上的标签匹配,所以能运行在较高的时钟频率;由于本发明所述的系统和方法需要的匹配操作次数较少,并且缺失率较低,因此功耗也比传统缓存系统显著降低。此外,本发明所述的系统和方法还在数据缓存与处理器核之间提供了一个容量较小、速度较快的数据读缓冲,能运行在较高的时钟频率,并降低了访问缓存带来的功耗,在单位功耗下的效率也比传统缓存系统有显著提高。对于本领域专业人士而言,本发明的其他优点和应用是显见的。
附图说明
图1是本发明所述的指令预取的处理器环境。
图2A是本发明所述主动表的实施例。
图2B是本发明所述主动表的另一个实施例。
图3A是本发明所述指令存储器的实施例。
图3B是本发明所述指令行、指令块及相应存储单元之间关系的实施例。
图4A是本发明所述扫描器的一个实施例。
图4B是本发明所述扫描器的另一个实施例。
图4C是本发明所述扫描器对产生的地址进行筛选的一个实施例。
图4D是本发明所述扫描器中目标地址判断的实施例。
图4E是本发明所述判断逻辑的一个改进实施例。
图5A是本发明所述轨迹点格式的实施例。
图5B是根据本发明技术方案使用轨道表建立新轨道的方法的一个实施例。
图5C是本发明所述轨道表的一个实施例。
图5D是确定基地址寄存器值更新指令位置的实施例。
图5E是本发明所述包含微型主动表的轨道表实施例。
图6A是本发明所述指令循迹器读指针移动的实施例。
图6B是本发明所述数据循迹器读指针移动的实施例。
图7A是本发明所述相关表的一个实施例。
图7B是本发明所述相关表的一个实施例。
图8A是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个实施例。
图8B是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个改进实施例。
图8C是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的又一个改进实施例。
图9A是本发明所述同时为处理器核提供下一指令及分支目标指令的一个实施例。
图9B是本发明所述同时为处理器核提供下一指令及分支目标指令的另一个实施例。
图10是本发明所述包含用于存储特定程序的存储单元的指令存储器的实施例。
图11A是本发明所述用于选择指令块的匹配器的实施例。
图11B是本发明所述用于选择指令块的匹配器的另一个实施例。
图12是本发明所述预测数据寻址地址的一个实施例。
图13是本发明所述数据预测器计算基地址寄存器值变化步长的另一个实施例。
图14A是本发明所述数据预测器的另一个实施例。
图14B是计算数据预取次数的实施例。
图15A是本发明所述数据访问指令在轨道表中表项格式的实施例。
图15B是本发明所述计算数据寻址地址的时间点的一个实施例。
图16A是本发明所述通过寄存器额外的读端口获得基地址寄存器值的实施例。
图16B是本发明所述采用时分复用的方式获得基地址寄存器值的实施例。
图16C是本发明所述通过旁路路径获得基地址寄存器值的实施例。
图16D是本发明所述通过专供数据预取使用的额外寄存器堆获得基地址寄存器值的实施例。
图17是本发明所述带有数据读缓冲的数据预取实施例。
图18A是根据本发明所述技术方案进行指令和数据预取的实施例。
图18B是根据本发明技术方案对指令块操作的一个实施例。
图19A是根据本发明所述技术方案进行指令和数据预取的另一个实施例。
图19B是根据本发明技术方案对指令块操作的另一个实施例。
图20A是本发明所述地址信息匹配单元的一个实施例。
图20B是本发明所述地址信息匹配单元中可配置寄存器的一个实施例。
图20C是本发明所述地址信息匹配单元的一个实施例。
具体实施方式
以下结合附图和具体实施例对本发明提出的高性能缓存系统和方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
需说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码也可以被用于所有附图以代表相同的或类似的部分。
此外,在本说明书中以包含处理器核的缓存系统为例进行说明,但本发明技术方案也可以被应用于包含任何合适的处理器(Processor)的缓存系统。例如,所述处理器可以是通用处理器(General Processor)中央处理器(CPU)、微控制器(MCU)、数字信号处理器(DSP)、图象处理器(GPU)、片上系统(SOC)、专用集成电路(ASIC)等。
图1是本发明所述的指令预取的处理器环境100。如图1所示,处理器环境100包含一个填充器102、一个主动表(Active list)104、一个微型主动表(Mini active list)126、一个扫描器108、一个轨道表(Track table)110、一个指令循迹器(Instruction Tracker)114、一个指令存储器(Instruction Memory)106、一个指令读缓冲(Instruction ReadBuffer)112、一个数据循迹器(Data tracker)122、一个数据存储器118、一个数据读缓冲(Data Read Buffer)120、一个数据预测单元124和一个处理器核116。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
指令存储器106和指令读缓冲112可以包含任何合适的存储设备,如:寄存器(register)或寄存器堆(register file)、静态存储器(SRAM)、动态存储器(DRAM)、闪存存储器(flash memory)、硬盘、固态磁盘(Solid State Disk)以及任何一种合适的存储器件或未来的新形态存储器。指令存储器106可以作为系统的一个缓存工作,或当有其他缓存存在时作为一级缓存工作;且可以被分割成复数个被称为存储块(Memory Block)的存储片段的用于存储处理器核116要访问的数据(如:在指令块(Instruction Block)中的指令)。
数据存储器118和数据读缓冲120可以包含任何合适的存储设备,如:寄存器(register)或寄存器堆(register file)、静态存储器(SRAM)、动态存储器(DRAM)、闪存存储器(flash memory)、硬盘、固态磁盘(Solid State Disk)以及任何一种合适的存储器件或未来的新形态存储器。数据读缓冲120可以作为系统的一个数据缓存工作,或当有其他缓存存在时作为一级数据缓存工作,且可以被分割成复数个被称为块(如存储块)的用于存储处理器核116要访问的数据(如:在数据块中的数据)的存储片段。数据存储器118则用于存储被 替换出数据读缓冲120的数据。
处理器核116可以执行分支(branch)指令。当处理器核116执行一条分支指令时,首先确定分支目标指令地址,再根据分支转移条件是否成立决定是否进行分支转移。处理器核116也可以执行数据访问(data access)指令,如装载(load)指令或存储(store)指令。当处理器核116执行一条数据访问指令时,可以用基地址加偏移量的方式进行数据寻址。本发明所述的寻址或索引,指的都是直接用地址进行查找的操作。处理器核116还可以执行其他合适的指令。
当处理器核116执行一条指令时,处理器核116首先需要从更低层次的存储器中读入指令。在这里,存储器的层次指的是存储器与处理器核116之间的接近程度。越接近处理器核116的层次越高。此外,一个高层次的存储器通常比低层次的存储器速度快但容量小。
填充器102根据主动表104提供的地址从更低层次的存储器获取指令或指令块并填充到指令存储器106中,以备处理器核116读取。扫描器108、数据预测单元124、数据循迹器122和填充器102用于将处理器核116将要访问到的数据填充到数据读缓冲120中,使处理器核116能从数据读缓冲120中以非常低的缓存缺失率访问到所需的数据。在这里,术语“填充”(Fill)表示将指令或数据写入存储器中,术语“获取”(Fetch)表示从存储器中取得指令或数据,术语“存储器访问”(Memory Access)表示处理器核116对最接近的存储器(即指令存储器106或数据读缓冲120)进行读或写操作。
本发明所述的指令地址(Instruction Address)指的是指令在主存储器中的存储地址,即可以根据该地址在主存储器中找到这条指令;而数据地址(Data Address)指的是数据在主存储器中的存储地址,即可以根据该地址在主存储器中找到这个数据。在此为简单明了起见,均假设虚拟地址等于物理地址,对于需要进行地址映射的情况,本发明所述方法也可适用。主动表104中的表项与指令存储器106中的存储行(Memory Line)一一对应。主动表104中的每个表项存储了一个指令行地址(Instruction Line Address)与一个行号(Line Number,LN)的匹配对,指明了该指令行地址对应的指令行存储在指令存储器106中的哪个存储行中。本发明所述的行号指的就是存储行在指令存储器106中的位置。可以通过将扫描器108审查、计算得到的分支目标指令地址与主动表104中存储的指令行地址匹配确定该分支目标指令是否已经存储在指令存储器106中。如果分支目标信息所在的指令行尚未被填充到指令存储器106中,那么在将该指令行填充到指令存储器106中的同时,在主动表104中建立相应的指令行地址与行号码的匹配对。本发明所述的匹配(Match),指的是对两个值进行比较,当两者相同或相等时为‘匹配成功(Match)’,否则为‘匹配不成功(NotMatch)’。
在本发明中,分支指令(Branch Instrutrion)或分支点(Branch Point)指的是任何适当的能导致处理器核116改变执行流(Execution Flow)(如:非按顺序执行一条指令)的指令形式。分支指令或分支源(Branch Source)指一条进行分支操作的指令,分支源地址(Branch Souce Address)可以是分支指令本身的指令地址;分支目标(Branch Target)指的是分支指令造成的分支转移所转向的目标指令,分支目标地址(Branch TargetAddress)可以指当分支指令的分支转移成功发生时转移进入的地址,也就是分支目标指令的指令地址;当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块。
扫描器108可以对从指令存储器106填充到指令读缓冲112的每一条指令进行审查,并提取出某些信息,如:指令类型、指令源地址、分支指令的分支增量(Branch Offset)和基地址寄存器号、地址偏移量信息,并基于这些信息计算出分支指令的分支目标地址或数据访问指令的数据寻址地址。例如,指令类型可以包括条件分支指令、无条件分支指令和其他指令等。指令类别还可以包括条件分支指令的子类别,如相等时分支转移、大于时分支转移等。在某些情况下,可以认为无条件分支指令是条件分支指令的一种特例,即条件总是成立。地址偏移量可以包括数据访问地址偏移量和分支转移目标地址偏移量等。可以利用这些提取出的信息进行指令预取和数据预取。此外,还可以包括其他信息。扫描器108也将上述信息及地址送到其他模块,如主动表104和轨道表110。
指令读缓冲112中存储了至少一个包含当前指令在内的一段连续指令的指令块(Instruction Block)。每一个指令块有一个块号BNX(Block Number)。指令块与指令存储器116的指令行可以含有相同数目或不同数目条指令。如果指令块含有与存储器指令行同样数目的指令,即一个指令块等于一个指令行,则块号与行号相同。如果一个存储器指令行含有复数个指令块,则块号BNX是行号LN的最低位(Lsb)再低一位的位置处(lesssignificant)加上至少一个地址位;此地址位指出该指令块在一个指令行中的位置,也即同一行中的块地址。例如一个行号LN为‘111’的指令行含有两个指令块,其中占据低位地址的指令块的块号BNX为‘1110’;占据高位地址的指令块的块号BNX为‘1111’。若指令读缓冲112中存储了多个指令块,则指令读缓冲112中除了存储了当前指令块之外,还可存储当前指令块按顺序地址的下一指令块。
轨道表110含有复数个轨迹点(Track Point)。一个轨迹点是轨道表中的一个表项,可含有至少一条指令的信息,比如指令类别信息、分支目标地址等。在本发明中轨迹点本身的轨迹表地址与该轨迹点所代表指令的指令地址相关(Correspond);而分支指令轨迹点中含有分支目标的轨迹表地址,且该轨迹表 地址与分支目标指令地址相关。与指令缓冲中112一系列连续指令所构成的一个指令块相对应的复数个连续的轨迹点称为一条轨道。该指令块与相应的轨道由同一个块号指示。轨道表含有至少一条轨道。一条轨道中的总的轨迹点数可以等于轨道表110中一行中的表项总数。轨道表110也可以有其它的组织形式。可以用第一地址(BNX)和第二地址(BNY)来表示轨迹点(指令)在轨
道表中的位置信息;其中第一地址表示该轨迹点对应指令的块号(指向轨道表中一条轨道及指令缓冲器中相应的一个指令块),第二地址表示该轨迹点(及对应指令)在该轨道(存储块)中的相对位置(偏移量Adress Offset)。一套第一地址及第二地址对应轨道表中的一个轨迹点,即可以根据一套第一地址及第二地址从轨道表中找到对应的轨迹点。如果该轨迹点的类型代表一条分支指令,可以根据内容中含的第一地址(目标块号)确定分支目标的轨道,并根据第二地址(偏移量)确定目标轨道中的一个特定的轨迹点(表项)。这样,轨道表就成为一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表。
相应地,扫描器108将提取出存储到指令读缓冲112中指令的指令信息,并将这些信息存储到轨道表110由这些指令对应的第一地址指出的轨道中由第二地址指出的表项。如果该指令是分支指令时则计算其中分支指令的分支目标指令地址送到主动表104匹配以得到分支目标指令所在存储行的行号(LN)。如果分支目标地址未与存在主动表104中的任何地址匹配,则该分支目标地址被送到填充器102从低层存储器读出指令行。同时主动表中的存储行替换逻辑分配一个存储行号(LN)给该指令行;该指令地址高位被存进主动表104中该行号指示的表项,填充器102取得的指令行被填充到该行号指示的存储行,并将由该行号产生的第一地址及从指令地址抽取的第二地址写进轨道表。
轨道表110中的轨道和指令读缓冲112中的存储块一一对应,且都由同一指针指向。处理器核116将要执行的任何指令,都可以在执行前被填充到指令读缓冲112中。为了在一条轨道中建立与下一条轨道的联系,在每条轨道代表最后一条指令的轨迹点后再设一个结束轨迹点,其中存放顺序执行下一条轨道(指令块)的第一地址。如果指令读缓冲112中可以存储多个指令块,在当前指令块被执行时,把顺序执行下一个指令块也取到指令读缓冲中以备处理器核106读取执行。下一指令块的指令地址可以用当前指令块的指令地址加上一个指令块的地址长度来求得。该地址如前述被送到主动表104匹配,获得的指令块被填进指令缓冲112由指令缓冲112替换逻辑所指示的指令块;且该指令块及相应的轨道由匹配获得的BNX标示。同时该BNX被存进当前轨道的结束轨迹点。新存进指令读缓冲112的下一指令块中的指令也被扫描器108扫描,提取 信息填充由该BNX指出的轨道如前所述。
指令循迹器114的读指针指向轨道表110中当前指令所在轨道中位于当前指令之后的第一个分支指令轨迹点;或在该轨道上当前指令后没有分支轨迹点的情况下指向该轨道的结束轨迹点。指令循迹器114的读指针由第一地址指针和第二地址指针组成,其中第一地址指针的值为当前指令所在指令块的块号,第二指针指向该轨道上当前指令后的第一个分支指令轨迹点或结束轨迹点。由该读指针指示的轨迹点内容中的分支目标第一地址被用于对指令存储器106寻址,读出包含该分支目标指令在内的指令块,送到扫描器108进行审查。扫描器108对从指令存储器106送来的指令块进行审查,提取出相应指令信息、计算分支指令的分支目标地址并暂存。指令缓冲替换逻辑指定一个指令块及相应的轨道以备分支目标指令块填充。
若指令循迹器114指向的分支指令没有发生分支转移,则指令循迹器114的读指针指向该分支指令后的第一个分支指令轨迹点,或在该分支指令后的轨迹点中没有分支指令轨迹点的情况下指向该轨道的结束轨迹点。处理器核读取分支指令后的顺序指令执行。
若指令循迹器114指向的分支指令成功发生分支转移,则将上述从指令存储器106读出的分支目标指令块存储到指令读缓冲112中缓冲替换逻辑指定的指令块中,并在轨道表110的相应轨道中填入扫描器108已产生的新轨道信息。此时上述分支目标第一地址和第二地址成为新的指令循迹器地址指针,指向轨道表中的分支目标对应的轨迹点。该新指令循迹器地址指针也指向新填充的分支指令块,使其成为新的当前指令块。处理器核从新的当前指令块中用指令地址(PC)选出需要的指令。此后指令循迹器114移动读指针指向新的当前指令块对应轨道中该分支目标指令之后的第一个分支指令轨迹点,或在该分支目标指令后的轨迹点中没有分支指令轨迹点的情况下指向该轨道的结束轨迹点。
若指令循迹器114指向的是轨道中的结束轨迹点,指令循迹器114的读指针更新为该最后轨迹点中的位置内容值,即指向下一轨道的第一个轨迹点,从而指向新的当前指令块。之后指令循迹器114移动读指针指向新的当前指令块对应轨道中的第一个分支指令轨迹点,或在该轨道没有分支指令轨迹点的情况下指向该轨道的结束轨迹点。
对于数据预取,扫描器108对指令进行审查时,可以提前发现数据访问指令,提取出基地址寄存器号。扫描器108审查、提取到的信息与处理器核116输出的该数据访问指令对应的基地址寄存器值一同构成该指令的相关信息被存储在轨道表110中。数据循迹器122可以根据轨道表110当前指令位置找到其 所在轨道的下一数据访问指令对应的轨迹点位置,该位置由数据循迹器122的读指针所指向。也就是说,数据循迹器122的读指针指向指令循迹器114所指的当前轨道上当前轨迹点之后的第一个数据访问指令轨迹点。这样,数据循迹器122可以通过该读指针对轨道表110寻址,读出轨迹点内容,即基地址寄存器号信息。这样,只要该基地址寄存器的值更新完毕,数据预测单元124就可以在处理器核116执行到该数据访问指令之前计算出其数据寻址地址,从而在数据读缓冲120和数据存储器118中检查该地址对应的数据是否已存在,并预取尚未存储在其中的数据。此外,数据预测单元124可以根据基地址寄存器值变化的步长,推算出下一次执行该数据访问指令时可能的数据寻址地址,并根据该地址在数据读缓冲120和数据存储器118中检查对应的数据是否已存在,并预取尚未存储在其中的数据。
在某些情况下,如执行数据寻址地址变化步长不变的循环代码时,采用本发明技术方案预测得到的可能的数据寻址地址就是实际数据寻址地址,因此可以在处理器核116执行数据访问指令前将该所需数据填充到数据读缓冲120中,使得处理器核116在对该数据进行读或写操作时不需要等待,从而提高处理器性能。
依次重复上述过程,即可在处理器核116执行指令前将该指令填充到指令读缓冲112中,并在处理器核116执行数据访问指令前将所需数据填充到数据读缓冲120中,从而掩盖因指令缺失或数据缺失导致的等待时间。
根据本发明所述技术方案,主动表104和微型主动表126具有类似的结构,都存储了指令段地址与块号的匹配对,且微型主动表126是主动表104的一个子集。当从扫描器108送来需要匹配的地址,可以先在微型主动表126中进行匹配,若匹配不成功再在主动表104中进行匹配,以减少主动表104的访问次数,从而降低功耗。根据具体实现方式和应用领域的不同,也可以同时在主动表104和微型主动表126中进行地址匹配。下面以主动表104为例对内部结构进行说明,对于微型主动表126也类似。图2A是本发明所述主动表的实施例200。在本实施例中主动表的主体部分由数据地址寻址器202构成。
数据地址寻址器202中包含多个表项(entry)204。每个表项204包含一个存储器、标志位V位220、标志位A位222、标志位U位224和一个比较器。所有比较结果被送入编码器206产生匹配表项号,即块号。控制线214用于输入读写状态控制信号。所有V位220初始值均为零。所有A位222的值由外部激活(Active)信号通过A位信号输入线228写入。
写地址指针(Write Pointer)210指向的表项地址由循环自增装置(Wrap AroundIncrement)218产生,循环自增装置218的输出最大值为最大表项号,输出为此值时再自增一次则输出为零,循环自增继续。如果写地址指针210当前指向表项的V位和A位的值均为零,则表示该表项可以被新数据写入,待写入完成后,循环自增装置218的输出值增加一,写地址指针210指向下一个表项;如果这两个值中至少有一个为一,则表示该表项当前不能被新数据写入,此时写入循环自增装置218的输出值增加一,写地址指针210指向下一个表项,继续进行判断。
写入时,通过写入数据总线208输入的写入数据先与所有表项所存储的数据进行比较,如有匹配,则从匹配表项号输出线216输出匹配表项号,且不进行写入操作;如没有匹配,则写入数据被写入由写地址指针210指向的表项,同时该表项中V位值被置为‘0’,该表项的表项号通过匹配表项号输出线216输出,写地址指针210指向下一个表项;读出时,读地址线212指向的表项的内容通过读出数据总线230被读出,表项号通过匹配表项号输出线216输出,同时该表项中V位也被置为‘1’。
标志位U位224表示使用情况。当写地址指针210指向一个表项204时,该表项U位224被置零。当一个表项204被读取时,其U位224被置一。循环自增装置218产生的写地址指针210指向一个新的表项时,U位会先被读取,若此时U位为零,则该表项可被替换,写地址指针210停在该表项以备写入数据,若U位为一,则将写地址指针210指向下一个表项。一种置换方法是另增一窗口指针226负责将U位置零,所述窗口指针226所指表项比写地址指针210提前N个表项。通过写地址指针210的值模加N即可得到窗口指针226的值。这N个表项即成为一个窗口,该窗口指向写地址指针210与窗口指针226间的表项。在写地址指针210移动N个表项时间内所经过的未被读取之表项可被置换。改变N值即改变窗口大小,从而改变替换率。另外一个置换方法是U位为复数位。写地址指针210或窗口指针226将表项置零,每次读取给表项U位加一。每次写之前将U位读出与预设值做比较,若小于所述预设值,则该表项可被置换;若大于或等于所述预设值,则将写地址指针210移向下一个表项。
图2B是本发明所述主动表的另一个实施例250。根据本发明技术方案,可以将指令行地址与主动表中存储的行地址进行匹配,从而得到与该行地址匹配成功的行的行号。在本实施例中,该匹配被分为两部分进行,即主动表104由两部分组成。主动表104的第一部分258用于匹配指令行地址252中的高位254,第二部分260用于匹配指令行地址252中的低位256。这两部分都由内容寻址存储器构成。
主动表第一部分258的表项数目与主动表第二部分260的存储块数目相等, 两者一一对应。主动表第二部分260的每个存储块包含若干个表项,每个表项对应一个指令行。行地址的高位部分存储在主动表第一部分258中,行地址的低位部分存储在主动表第二部分260中。当完整的行地址与输入行地址相同时,才匹配成功。此外,将主动表第一部分258匹配输出的表项号与第二部分260匹配输出的表项号拼接,就可以得到与指令行地址对应行号。
在本实施例中,假设主动表第一部分258包含4个表项,那么主动表第二部分260中包含4个存储块,每个存储块与主动表第一部分258中的一个表项对应。对于主动表第一部分258包含其他数目的表项的情况也与此类似。此外,根据本发明技术方案,主动表第二部分260中的存储块与指令读缓冲106中的存储块一一对应,且对应存储块中的表项也一一对应。
当扫描器108计算得到分支目标地址或下一指令块地址时,相应的行地址252被送到主动表104进行匹配。首先将行地址高位254与主动表第一部分258中存储的行地址高位进行匹配。若在主动表第一部分258中匹配不成功,则表示该行地址对应的指令行尚未存储在指令存储器106中,因此根据图2A所述替换算法分配一个表项,并在主动表第二部分260中该表项对应的存储块中也根据图2A所述替换算法分配一个表项。将输入的行地址高位254存储到主动表第一部分258的所述表项中,并将输入的行地址低位256存储到主动表第二部分260的所述表项中,输出行号262送往轨道表110。同时,该行地址被送到填充器102进行指令行预取。等到取到该指令行后,将该指令行存储到指令存储器106中与主动表第二部分260所述表项对应的存储行中,完成指令填充。
若在主动表第一部分258中匹配成功,则将该行地址的低位送到主动表第二部分260中与该匹配成功的第一部分表项对应的存储块中进行匹配。若主动表第二部分260中匹配不成功,则表示该行地址对应的指令行尚未存储在指令存储器106中,因此根据图2A所述替换算法分配一个表项,并将输入的行地址低位256存储到主动表第二部分260的所述表项中,输出行号262送往轨道表110。同时,该行地址被送到填充器102进行指令行预取。等到取到该指令行后,将该指令行存储到指令存储器106中与主动表第二部分260所述表项对应的存储行中,完成指令填充。若在主动表第二部分260中也匹配成功,则表示该行地址对应的指令行已经存储在指令存储器106中,因此直接输出行号262送往轨道表110。
根据本发明技术方案,当指令循迹器114读指针指向一个分支轨迹点时,该分支轨迹点的分支目标指令块号(第一地址)被读出。与该块号对应的行号264被送到指令存储器106。行号264中与主动表第二部分260对应的行号部分266被用于从指令存储器106的各个存储块中寻址以选出对应的指令行,行号 264中与主动表第一部分258对应的行号部分268被用于从各个存储块输出的指令行中选出对应的指令行270。指令行270就是与输入行号264对应的指令行。
在具体实现中,也可以先由行号264中与主动表第一部分258对应的行号部分268将指令存储器106中对应的存储块激活,再由行号264中与主动表第二部分260对应的行号部分266从该存储块中选出指令行270,这样就不需要同时访问指令存储器106中的所有存储块,从而降低功耗。
为便于描述,此后实施例的主动表中均以图2A实施例中的主动表为例进行说明。需要说明的是,将这些实施例中的主动表替换成图2B实施例中的主动表,也可以实现同样的功能。
回到图1,当从扫描器108送来的地址在主动表104中匹配不成功时,该地址被送到填充器102等待从更低层次存储器取得该地址对应的指令行,同时在主动表104中分配一个表项存储该指令行对应的行地址,从而形成一个块号/地址对。本发明所述的指令行的行地址指的是该指令行起始指令的地址。本发明所述的指令存储器在逻辑上被分为复数个存储块,每个存储块对应主动表中的一个表项,存储了该表项中行地址对应的指令行。当该行地址对应的指令行被取来后,填充器102将其送到指令存储器106写入以该行地址对应的块号索引的存储块中。
图3A是本发明所述指令存储器的实施例300。在本实施例中指令存储器由指令存储单元302和输出寄存器304构成。当填充器102对指令存储单元302进行写操作时,从主动表104来的行号被送到写地址端口310用来索引被写入的存储行,指令行通过写端口306写入该存储行。指令循迹器114读指针指向的分支轨迹点中存储的分支目标轨迹点的第一地址(即块号)被送到指令存储单元302的读地址端口作为读地址,将对应存储行中的指令行中的一个指令块从读端口(Read port)308读出,该指令块即分支目标轨迹点对应指令所在的指令块。该指令块被存储在输出寄存器304中以供处理器核116访问。此时,指令存储单元302可以被指令循迹器114送来的其他块号进行索引。此时,指令存储单元302可以根据新的地址(可以是随机地址)进行寻址以找到对应的指令块,而输出寄存器304则可以根据顺序地址寻址,依次输出存储在其中的指令块中的指令。对于处理器核116送来的寻址地址而言,除了发生分支转移的情况下,下一指令的地址均是当前指令地址的顺序后一地址,因此采用图3A实施例的结构(一个单端口存储器配合一个能容纳一个指令块的输出寄存器)可以同时输出分支目标指令和顺序执行的下一指令,从而实现双端口存储器的功能。
根据本发明技术方案,由于一个指令行至少包含一个指令块,因此指令存储单元302中的存储行的容量也可以比输出寄存器304的容量大,而指令读缓冲112中的存储块的容量与输出寄存器304的容量一致。
图3B是本发明所述指令行、指令块及相应存储单元之间关系的实施例350。在图3B中,假设指令地址352的长度为32位,即最高位为第31位,最低位为第0位,且每一个指令地址对应一个字节(Byte)。因此,指令地址352的最低两位354(即第1、0位)对应一个指令字(Instruction Word)中的4个字节。在假设本实施例中,一个指令块包含了4条指令,因此偏移量356表示对应指令在指令块中的位置。这样,指令地址的高位358(即第31到第4位)表示了指令块的起始地址,即指令块地址。
为了便于说明,本实施例中一个指令行对应2个连续的指令块。这样,除去指令块地址358最低位362得到的指令块地址高位(即第31到第5位)就是指令行地址360,指令块地址358中的最低位362则可以表示该指令块位于对应指令行中的位置。
根据本发明技术方案,可以建立指令块地址与块号(BNX)、指令行地址与行号(LNX)的映射关系。在本实施例中,假设主动表中可以容纳64个行号,那么对应的行号364共有6位,即图中行号364显示的第10到第5位。需要注意的是,行号364的值并不一定等于指令地址352中第10到第5位的值。又因为64个指令行对应128个指令块,因此对应的块号368共有7位(即图中块号368显示的第10到第4位,其中第10到第5位的值与行号364的值相同)。在此,由于一个指令行中的两个指令块是连续的,因此一个行号对应的两个块号(即第一地址)也相应连续。这样,块号366的最低位368的值就是对应指令块地址358中的最低位362。同样地,本发明所述的第二地址370就是指令在指令块中的块内偏移量356,两者的值相同。
这样,由于每次从指令存储器106输出的指令块可以填满指令读缓冲112的一个存储块,因此当指令读缓冲112中包含某个指令块时,并不需要同时包含该指令块对应的整个指令行。即指令读缓冲112中可以包含对应于同一个指令行的两个指令块,也可以只包含其中的一个指令块,因此在存储空间方面具有更好的灵活性。此外,还可以将主动表104的容量减小至原来的1/2。对于一个指令行包含更多指令块的情况,也可以据此类推。
回到图1,扫描器108可以对从指令存储器106送来的每一条指令进行审查,并提取出某些信息,如:指令类型、指令地址、分支指令的分支目标信息。举例而言,指令类型可以包括条件分支指令、无条件分支指令和其他指令等。具 体地,可以认为无条件分支指令是条件分支指令的一种特例,即条件总是成立。因此,指令类型可以分为分支指令和其他指令等。分支源地址可以指分支指令本身的地址,分支目标地址可以指当分支指令的分支转移成功发生时将转移进入的地址。此外,还可以包括其他信息。
在本实施例中,从指令存储器106输出的所有指令都被扫描器108审查,提取出指令类型并输出到轨道表110,同时计算出分支指令的分支目标地址。所述目标地址可以由包含该分支指令的指令块起始地址加上该分支指令的偏移量,并再加上分支转移到目标指令的距离得到。该目标地址的高位部分(如:图3A中指令块地址358)被用于与主动表104中的内容匹配以获得该分支目标指令对应轨迹点的行号,并通过拼接指令块地址的最低位(如:图3A中指令块地址最低位362)形成第一地址或块号,低位部分(如:图3A中块内偏移量354)就是该分支目标指令对应轨迹点的第二地址,即该分支目标指令在其行中的偏移量。
对于结束轨迹点,则只需要将指令块地址加上指令块长度,就可以得到下一指令块的指令块地址,之后可以将该下一指令块地址视为目标地址按同样方法进行匹配。
如果该目标地址的高位部分在主动表104中匹配成功,那么主动表104输出该高位地址对应的块号到轨道表110;如果该目标地址的高位部分在主动表104中匹配不成功,那么主动表104就把这个值通过总线144送到填充器102以实现填充操作,同时分配一个块号给该高位地址,并输出到轨道表110。
在本发明中,扫描器108解析从指令存储器106输出的指令块,若判断所述指令块中包含分支指令,则计算该分支指令的目标地址,产生地址。具体的,所述扫描器108通过如下过程解析所述指令块:所述扫描器108获取指令块中的OP(指令类型信息,标示指令为分支指令还是非分支指令),得出是否包含分支指令的信息。若判断得到(或者说经过上述解析得出)所述指令块中包含分支指令,则计算该分支指令的目标地址。
此外,所述扫描器108还可以获取从指令存储器106输出的指令块的地址,在所述指令块的地址上增加一偏移量,产生地址。在此,所述偏移量为一固定值,优选的,其为相邻两个指令块的地址偏差量。由此,所述扫描器108所产生的地址将为与所述指令块相邻地址的指令块,特别的,为所述指令块下一地址的指令块。
这样,所述扫描器108产生的地址包括:所述扫描器108解析从指令存储器106输出的指令块,若判断所述指令块中包含分支指令,则计算该分支指令 的目标地址,产生一地址(其中用语“一”指代一个、一些或者一部分);及所述扫描器108获取所述指令块的地址,在所述指令块的地址上增加一偏移量,产生另一地址。
接下去,将提供实现上述多种方式产生地址的扫描器的具体实现方式。如图4A所示,所述扫描器具体通过如下方式产生地址:所述扫描器通过译码器判断当前指令为分支指令还是非分支指令,若判断得到所述指令为分支指令,则通过一加法器将当前指令地址加上分支转移距离,得到分支指令的目标地址;所述扫描器通过一加法器将当前指令所在的块地址加上块偏移量(即相邻两个信息块的地址偏差量),得到当前指令块的相邻指令块的地址。
图4B是本发明所述扫描器的另一个实施例400。在本实施例中,扫描器108对接收到的指令块404进行审查,提取出其中各条指令的指令类型并计算分支目标地址。为了便于说明,在此以一个指令块包含两条指令为例,即指令块404中包含指令406(对应较低的指令地址)和指令408(对应较高的指令地址)。一个指令块包含更多指令的情况也类似。扫描器108的主体部分402包含译码器410、412和加法器414、416。其中译码器410和加法器414对应指令406,译码器412和加法器416对应指令408。译码器对输入的指令进行译码,输出指令类型(如:指令类型432、434)和分支转移距离(Branch Offset)(如:分支转移距离420、422),其中指令类型被直接送往轨道表110写入相应位置,而分支指令对应的分支转移距离则被送到加法器进行加法操作。假设指令406和408都是分支指令,则以加法器414为例,其输入包括分支转移距离420、当前指令块地址418和常数‘0’。根据本发明技术方案,分支指令的分支目标地址等于该指令所在指令块的块地址、该指令在指令块中的偏移量和分支转移距离三者之和。而分支指令406是指令块中的第一条指令,其在指令块中的偏移量为‘0’,因此加法器414对这三个输入相加得到的输出结果就是对应分支指令406的分支目标地址424。同理,分支指令408是指令块中的第二条指令,且如图3B实施例所述,两条相邻指令间的地址相隔‘4’,因此加法器416的输入包括分支转移距离422、当前指令块地址418和常数‘4’,其输出就是对应分支指令408的分支目标地址426。分支目标地址424和426被送到选择器428经选择后依次送往主动表104进行匹配,从而得到对应的块号并通过总线430送往轨道表110依次写入相应位置。
在本实施例中用到的指令块地址418是从主动表104中读出并被直接送往扫描器108中加法器的。也可以在扫描器108中增加用于存储当前指令块地址的寄存器,这样就主动表104就不需要实时地送出指令块地址。
根据本发明技术方案,可以由扫描器108对从指令存储器106输出的指令 扫描,得到指令的类型和分支指令的分支目标地址。可以做一个简单判断,以确定分支目标是否位于分支指令(分支源)本身所处的指令块或相邻的指令块(这些指令块的块号已知),从而减少主动表104的匹配次数。
根据本发明技术方案,当得到一指令块地址(获取指令块时,便可很容易的得到该指令块的地址,关于此点,本说明书不再赘述)时,该指令块中每条指令的地址、该指令块的长度(即首条指令与末条指令之间地址偏差量)都是易于得到的。那么确认指令地址(在此,也就是产生的地址,或者更进一步的,指分支目标地址和下一指令块地址)是否指向被比对指令块(在此,也就是当前指令块和下一指令块)时,即可通过指令中的偏移量是否落入指令块中的长度来确定;也可通过指令中的地址是否为被比对指令块中的指令的地址来确定。当然,在本申请的其他实施例中还可通过其他方式予以确定,本申请不再赘述。
接下去,将提供实现上述多种方式产生地址的扫描器的具体实现方式。如图4C所示,所述扫描器通过如下方式进行筛选:所述扫描器通过一加法器将当前指令的块内偏移量(即当前指令地址相对于当前指令所在的块的地址的偏移量)加上分支指令的分支转移距离,得出一总偏移量,根据该总偏移量判断得到的分支指令目标地址是否指向当前指令块或者当前指令块的下一指令块,从而对产生的地址予以筛选。
此外,还可以与除当前指令块和下一指令块以外更多的指令块进行对比,从而对产生的地址进一步筛选。其方法是根据分支偏移量(Branch Offset)与分支源的第二地址(BNY)相加得到的和来选取寄存在容易读取的寄存器中的已知指令块块号。原理如下:将分支转移距离与第二地址之和中与第二地址等长的低位部分舍弃(truncate),剩余的高位部分就是分支目标所在指令块与当前指令块(分支源所在指令块)之间以块的数目为单位的距离。如高位为0,则分支目标在当前指令块;如高位为+1,则分支目标在当前指令块顺序后一指令块;如高位为-1,则分支目标在当前指令块顺序前一指令块;如此类推。在此当前指令块表示扫描正在扫描的指令块;顺序后一指令块表示一个指令块其指令地址比当前指令块的地址大一个指令块地址长度的地址;顺序前一指令块表示一个指令块其地址比当前指令块的地址小一个指令块地址长度的地址。
图4D是本发明所述扫描器中目标地址判断的实施例440。在图4D中,为了便于描述,扫描器108中只显示了与本实施例说明相关的内容,省略了其他部分或部件。在本实施例中,与图4B相同,假设扫描器108一次对输入的指令块404中的两条指令进行审查,因此一次最多可能计算得到两个分支目标地址,这两个分支目标地址被分别送到两个相同的判断逻辑442和444中进行判断。本实施例中扫描器108的模块402与图4B实施例中的模块402相同,输出的指 令类型被直接送往轨道表110写入相应位置,在图4D中没有显示。在此,仅对分支目标地址是否位于含当前指令块的连续三个指令块中的判断举例进行说明,对分支目标地址是否位于包含当前指令块在内的连续更多个指令块中的判断的方法也类似。
在图4D中,寄存器448存储了当前指令块对应的块号,寄存器446存储了当前指令块之前的一个指令块对应的块号,寄存器450存储了当前指令块之后的一个指令块对应的块号,块号本身不一定是连续的但相应指令块的地址是连续的。这样,只要扫描器108计算得到的分支目标地址位于这三个连续指令块的起止地址之间,就可以不需要访问主动表104,直接从寄存器446,448,与450得到对应的块号,而不在该起止地址之间的分支目标地址则需要被送到主动表104进行匹配操作。
以判断逻辑442为例,计算模块452的输入包括分支目标地址424和当前指令块的块地址418,输出为选择信号458。计算模块452可以由一个减法器实现。分支目标地址减去当前指令块块地址后得到的差值就是分支目标地址与当前指令块第一条指令之间间隔的地址差值。将该差值与第二地址等长的低位部分舍弃,以剩余的高位作为选择信号458控制选择器460来选择寄存在寄存器中的指令块块号。其连接方式是高位为-1选择寄存器446中的块号;高位为0选择寄存器448中的块号;高位为+1选择寄存器450中的块号;高位非以上的值则将分支目标地址经选择器446送往主动表104查找相应块号,同时选择器460选择主动表输出。选择器460输出的块号462被填充到轨道表中由分支源地址指定的轨迹点(表项)。
在本实施例中,假设主动表104每次只能对一个分支目标地址进行匹配,因此,如果扫描器108一次审查发现两条分支指令,且这两条分支指令的分支目标指令都不在上述连续三个指令块中,则需要通过选择器428选择,依次将分支目标地址送到主动表104匹配。而主动表104将匹配得到或分配的块号430依次送到这两个判断逻辑中的选择器460供选择。
需要注意的是,本实施例仅是根据本发明技术方案给出的分支目标地址归类的一种具体实现方式,判断逻辑442、444也可以由其他方式实现。例如,可以将分支目标地址计算功能也在计算模块中实现,如图4E所示。
图4E是本发明所述判断逻辑的一个改进实施例470。在本实施例中,主动表104、寄存器446、448、450与图4D实施例相同,也假设包含两个相同的归类逻辑472和474。以归类逻辑472为例,计算模块472的输入包括当前指令块的块地址418、分支指令在该指令块内的偏移量478和该分支指令分支转移到目 标指令的距离420。
与之前实施例所述相同,在计算模块476中,将当前指令块块地址418、当前分支指令在指令块中的地址偏移量(BNY)478和该分支指令分支转移到目标指令的距离(BranchOffset)420三者相加就可以得到分支目标地址424。将当前分支指令在指令块中的地址偏移量478和该分支指令分支转移到目标指令的距离420两者相加就可以得到图4D实施例中所述的地址差值。地址差值依前舍弃低位后作为选择信号458用于选择适当的指令块块号作为块号462输出。其余操作与上例同。
在图4D实施例中,寄存器446、448和450是移位寄存器。当指令循迹器第一地址指针指向一个新的当前指令块时,寄存器的内容必须从一个寄存器搬到另一个寄存器。可以用一个有多个表项的循环缓冲(circular buffer)实现本实施例中的存储器480,并增加一个当前指令块指针478、一个起点指针和一个终点指针。当前指令块指针478指向的表项含有当前指令块。当前指令块的位置改变时,各表项存储的内容不移动,而是指针478在移动。起点指针及终点指针指示地址连续的单数个或复数个指令块的起点与终点。
现假定循环缓冲480中的表项446,指针地址为‘-1’,存储了前一指令块块号;表项448,指针地址为‘0’,存储了当前指令块块号;表项450,指针地址为‘+1’,存储了下一指令块块号。现当前指令块指针478数值为0,指向表项448;起点指针数值为‘-1’,指向表项446;终点指针数值为‘+1’,指向表项450。在这个时刻,表项448含的指令块号代表的指令块被扫描。如果判断逻辑472判断器所检测的分支指令的目标在当前指令块(选择信号458为‘0’),控制选择器选择表项448的内容作为块号462输出。在下一时刻,假设此时表项450含的指令块号代表的指令块被扫描,则当前指令块指针478数值为‘+1’,指向表项450;如果判断逻辑472判断器所检测的分支指令的目标在当前指令块(选择信号458应该为‘0’),这时选择器460会仍如前选择表项448的内容作为块号462输出;但这是错的,因为现在当前块是由表项450代表,与前一时刻相比有了一个表项的偏差。将当前指令块指针478的值加到原来的选择器460的控制信号上就可以补偿这个偏差。即现在控制信号458是当前分支指令在指令块中的地址偏移量‘0’和该分支指令分支转移到目标指令的距离420两者相加所得的地址差值舍弃低位后,再在高位上加上当前指令块指针478数值作为选择信号458。选择信号458的值经上述补偿后为‘0+1’,即等于‘1’,该值选择表项450中的指令块块号作为块号462输出。此后当前指令块的下一个指令块的块号被填进表项446,终点指针指向新的终点表项446。由于起点指针原指向的表项的内容被替换成下一指令块的块号,因此起点指针下移一个表项指向 起点表项448。在其他的例子中,若起点指针原指向的表项的内容没有被替换,则可以保持起点指针不变。
假如当前指令块指针的移动距离或移动方向与上例不同,只要没有出起点指针及终点指针指示的范围(起点指针值<当前指令块指针478值<终点指针值),都可以依上例从循环缓冲480中获得需要的指令块块号作为块号462输出。如果超出了范围,则超范围检测逻辑(为明了起见图上未显现)会控制将指令块地址424送往主动表104查找相应的指令块块号;选择器460也会被控制将主动表104的输出作为块号462送往轨道表存储。
根据本发明所述技术方案,可以将目标指令块暂存在指令存储器106的输出寄存器304中,当分支转移成功发生、该目标指令块成为当前指令块时才将其填充到指令读缓冲112中;同样地,可以将扫描器108提取出的指令信息及主动表104输出的块号信息暂存在寄存器中,当分支转移成功发生时才将这些信息填充到轨道表110中。
当新轨道被建立时,可以将新建轨道放置在轨道表中的一个可被替换的行中。如果所述新轨道包含一个分支轨迹点(对应一条分支源指令),那么在所述行中的一个表项内建立一个分支轨迹点。可以根据分支源地址确定所述分支点在轨道表110中的行及表项的位置。举例而言,可以根据分支源地址的高位地址确定行,并根据分支源地址的偏移量确定该行中的一个表项。
此外,行中的每个表项或轨迹点可以包含一种内容格式,所述格式包括类型区域、第一地址(XADDR)区域和第二地址(YADDR)区域。此外还可以包含其他区域。类型区域可以表示轨迹点对应的指令的类型。如之前所述,指令类型可以包括条件分支指令、无条件分支指令和其他指令。XADDR区域也被称为第一维地址或简称为第一地址。YADDR区域也被称为第二维地址或简称为第二地址。
此外,新轨迹点的内容可以对应分支目标指令。换句话说,分支轨迹点的内容存储了分支目标地址信息。举例而言,轨道表110中的对应与一条分支目标指令的特定的行的相应块号被作为第一地址存储到所述分支轨迹点的内容中。此外,所述分支目标的在其所在的指令块中的偏移量被作为第二地址存储到所述分支轨迹点的内容中。所述偏移量可以根据分支源指令地址和分支转移位移(距离)计算得到。
轨道表中所有轨道的结束轨迹点都被标记为一个特殊的轨迹点,其内容包含了一个必定分支转移的类别信息,以及按顺序执行指令时的下一指令所在的下一轨道的位置信息。由于该下一指令对应于下一轨道的第一个轨迹点,因此 该特殊轨迹点的内容可以只包含类型区域和第一地址(XADDR)信息,或除了包含类型区域和第一地址(XADDR)信息,还包含一个常数(如:‘0’)。
图5A是本发明所述轨迹点格式的实施例500。在本实施例中,对于非结束轨迹点,其轨迹点格式可以包括指令类型502、第一地址504和第二地址506,其中一条轨道的至少两个轨迹点的指令类型能被同时读出。因此,在实际存储时,可以将轨道中所有非结束轨迹点的指令类型存储在一起,而将这些非结束轨迹点的第一地址和第二地址存储在一起。对于结束轨迹点,其轨迹点格式可以包括指令类型502、第一地址504和值为‘0’的常数508。同样地,结束轨迹点的指令类型502也可以和非结束轨迹点的指令类型存储在一起,而第一地址504和常数508则可以存储在该轨道所有非结束轨迹点的第一地址、第二地址之后。此外,由于结束轨迹点的第二地址就是常数508的值‘0’,因此可以不存储该常数,当指令循迹器114指向结束轨迹点时直接产生第二地址‘0’。
图5B是根据本发明技术方案使用轨道表建立新轨道的方法的一个实施例。在本实施例中,BNX代表指令块所在存储块的块号。由于指令读缓冲112是指令存储器106的一个子集,而轨道表110中的轨道与指令读缓冲112中的存储块一一对应,轨道表110中各个块号代表的指令块也是指令存储器106的子集,因此内容寻址存储器(CAM)536包含了每条轨道对应的块号信息。通过将块号在内容寻址存储器536中进行匹配就可以确定该块号对应的轨道号,从而在轨道表110中找到对应的轨道。
如图5B所示,一个已建立的轨道522(用块号BNX0表示)可以包含三条分支指令或分支点524、526和528。当审查分支点524时,主动表中匹配得到或分配的目标块号是BNX7,那么一条对应BNX7的新轨道530在下一个可用行被建立起来用于存储分支点524的目标指令,且轨道表110中的该块号(即块号BNX7)被记录在分支点524中作为第一地址。类似地,当审查分支点526时,主动表中匹配得到或分配的目标块号是BNX9,那么在轨道表110中另一条对应BNX9的新轨道532在下一个可用行被建立起来,且该块号(即块号BNX9)被记录在分支点526中;当审查分支点528时,主动表中匹配得到或分配的目标块号是BNX1,那么在轨道表110中又一条对应BNX1的新轨道534在下一个可用行被建立起来,且该块号(即块号BNX1)被记录在分支点528中。这样,单条轨道中对应全部分支点的新轨道可以被建立起来
根据本发明技术方案,每条分支指令的轨迹点中存储的第二地址就是该分支指令的分支目标指令在该分支目标指令所在指令块中的偏移量。
图5C是本发明所述轨道表的一个实施例。在图5C中,省略了与本实施例 说明内容无关的部分或部件。假设扫描器108可以一次对一个指令块中的全部指令进行审查以提取出指令类型554,但主动表104无法一次对所有分支指令的分支目标地址进行匹配,即无法将所有匹配得到或分配的目标块号552一起送到轨道表110内存储目标块号的存储器548中。为了减少对轨道表110中存储器的写次数,可以不将这些信息直接写入轨道表110内存储指令类型的存储器550和存储目标块号的存储器548中,而是先存储到临时寄存器542中。临时寄存器542的容量与轨道表110中一行(即一条轨道,包含存储器550与548的一行)的容量相同,等到临时寄存器542中内容写满后再一起写入轨道表110内的存储器550和548中。
在图5C中,从扫描器108来的指令块中所有指令的指令类型554被同时写入临时寄存器542中,目标块号552被依次写入临时寄存器542中。当该指令块全部指令的相关信息都被写入临时寄存器542后,再被一起写入存储器550和548中。根据本发明技术方案,若当前产生的是间接寻址分支指令的分支目标地址对应的块号,则该块号不需要被存储到轨道表110中,而是可以被直接旁路作为选择器544的输出。除此以外,如果指令循迹器114读指针的第一地址指针指向的块号所对应的轨道已经被存储在存储器550和548中,那么选择器546和选择器544分别选择存储器550和548输出的指令类型和目标块号送到指令循迹器114;否则选择器546和选择器544分别选择临时寄存器542输出的指令类型和目标块号送到指令循迹器114。这样,在一条轨道中的全部轨迹点的内容尚未写满时就可以根据需要读出其中的内容。
需要注意的是,在图5C中,存储器550和存储器548可以是完全独立的两个存储器,也可以是属于同一个物理存储器中的逻辑意义上的两个不同存储器。类似地,在具体实现中,临时寄存器542也可以与上述两个存储器一起位于在同一物理存储器中。此外,将临时寄存器542放置在轨道表110之内,仅仅是为了便于说明。在逻辑布局或物理实现上,临时寄存器542也可以被放置在轨道表110之外。这是本领域专业人士,在本发明的说明、权利要求和附图的启发下,能够理解、领会的。
上述各个实施例采用直接寻址的方式计算分支目标地址并实现指令预取。然而,也可以使用间接寻址的方式。当采用间接寻址方式时,需要首先确定寄存器值(如:基地址寄存器值),从而计算分支目标地址。由于寄存器的值是因指令执行的结果而改变的,因此对于一条间接寻址分支指令来说,在最后更新其基地址寄存器值的指令已计算得到新值、但尚未将该值写入基地址寄存器时可以根据需要通过旁路(bypass)路径取得该新值进行目标地址的计算及后续操作。图5D是确定基地址寄存器值更新指令位置的实施例560。
在图5D中,轨道562包含了由扫描器108和主动表104送来的信息所构成的一系列轨迹点。在本实施例中,一条轨道由16个轨迹点组成。一个轨迹点对应一条指令。假设第6号轨迹点566和第14号轨迹点574各对应一条直接寻址分支指令,第10号轨迹点570对应一条以BP1寄存器为基地址寄存器的间接寻址分支指令。在扫描器108对该指令块指令审查时,可以找到该指令块中所有更新BP1寄存器值的指令,即第3号轨迹点564、第8号轨迹点568和第12号轨迹点572对应的指令。因此可以确定在间接寻址分支指令570之前最后更新基地址寄存器BP1的指令对应轨迹点568,该轨迹点568与间接寻址分支指令570相隔两个轨迹点,即相隔两条指令。这样,可以将该相隔指令的条数(即数值‘-2’)记录在间接寻址分支轨迹点570的内容中。
根据本发明所述技术方案,当轨迹点566对应的分支指令未发生分支转移时,指令循迹器114的第二地址读指针指向轨迹点570。此时读出轨迹点570的内容,其中包含了相隔指令的条数‘2’。这样,当处理器当前执行的指令在该轨道中的位置值(即程序计数器PC的低位地址偏移量)比指令循迹器114的第二地址读指针的值小于等于‘2’时,该基地址寄存器的值被更新,可以通过旁路路径从处理器核116中取得基地址寄存器BP1的值,从而进行分支目标地址计算及后续操作。
根据本发明技术方案,可以通过多种途径获得该基地址寄存器值,如:通过处理器核116中寄存器额外的读端口获得、采用时分复用读口的方式从处理器核116中寄存器获得、通过处理器核116中的旁路路径获得、或通过一个专供数据预取使用的额外寄存器堆获得。
为改善访问主动表104的瓶颈并降低功耗,可将最近被使用过的指令块地址与对应的指令块号成对存储在被称为微型主动表中。微型主动表含有的所述匹配对是主动表104中的指令行地址与行号匹配对的子集。当扫描器108计算出需要匹配的分支目标地址时,可以先到微型主动表中进行匹配,若匹配不成功再到主动表104中进行匹配,从而减少主动表104的访问次数。微型主动表由内容匹配寻址器与数据存储器对组成。指令块地址存在内容匹配寻址器中,与其相应的指令块号存在同一行的数据存储器中。输入的指令块地址与微型主动表内容匹配寻址器存储的复数个指令块地址匹配,如果结果是‘匹配不成功’则微型主动表将输入的指令块地址送至主动表104匹配;如果结果是‘匹配成功’则从相应的数据存储器中读出并输出指令块号。微型主动表也可与主动表并行工作,同时提供多个地址匹配服务。
微型主动表可以是一个独立的单元,也可以与轨道表110/指令缓冲112的匹配器合并因为两者有相似的结构与存储数据。此时的微型主动表的指令块地 址存储部分以及指令块号存储部分都是内容匹配寻址器结构,并且互为对方的数据存储器。此时含有微型主动表的匹配器是一个双向寻址器,即输入指令地址块地址可输出相应的指令块号;输入指令地址块号地址可输出相应的指令地址块地址。这样,含有微型主动表的匹配器可以提供以下功能:从扫描器提供的指令地址块地址查找指令块号做为轨道表内容、从指令循迹器提供的指令块号匹配相应的轨道、指令块、从当前指令块查找相应的指令块地址,该指令块地址的下一个指令块地址做为下一顺序执行指令块的块地址以及从上述块地址查找相应的轨道/指令块。
图5E是本发明所述包含微型主动表的轨道表实施例。
根据本发明所述技术方案,轨道表110与指令缓冲112都需要存储指令块号。轨道表110中还可以包含每条轨道对应的指令块的块地址,因此,轨道表110中的每个块号及其对应地址就构成了一个指令块地址与块号的匹配对,这样,在轨道表110中就构成了一个微型主动表。在图5E中,省略了与本实施例说明内容无关的部分或部件。轨道表110的主体部分,即存储指令类型和分支目标块号及块内偏移量的存储器584与之前实施例所述相同,存储器584中可以包含或不包含临时寄存器。不同的是还增加了一个内容寻址存储器588用于存储每条轨道对应的块地址,而内容寻址存储器586中存储了这些块地址对应的块号。这样,内容寻址存储器586和内容寻址存储器588的相应行就形成了指令块地址与块号的匹配对。
当扫描器108计算出需要匹配的分支目标地址时,先将该目标地址通过总线590送到内容寻址存储器588进行匹配。若匹配成功,则以匹配成功的项为索引在内容寻址存储器586中的相应行内容(即该目标地址对应的块号)通过总线592输出到选择器598,经选择器598选择后写入轨道表主体部分存储器584中;若匹配不成功,则将该目标地址送到主动表104进行匹配,由主动表104将匹配得到或分配的块号通过总线596送到选择器598,此时选择器598选择从主动表104来的块号写入轨道表主体部分存储器584中。
当执行分支指令时该分支指令成功发生分支转移时,指令循迹器114将分支轨迹点中包含的分支目标块号通过总线594送到内容寻址存储器586中进行匹配。若匹配成功,则分支目标指令块对应的轨道已经建立,即分支目标指令块已经被存储在指令读缓冲112中,不需要进行填充操作;若匹配不成功,则分支目标指令块对应的轨道尚未建立,即分支目标指令块尚未存储在指令读缓冲112中,则需要将该分支目标块号通过总线594送到指令存储器106进行寻址,从指令存储器106中输出该目标指令块,再按之前实施例所述方法进行后续操作。
图6A是本发明所述指令循迹器读指针移动的实施例600。在本实施例中,指令循迹器读指针越过轨道表中的非分支指令,移动到轨道表中下一分支点并等待处理器核116分支判断结果。为便于说明,图6A中省略了与本实施例说明内容无关的部分或部件。在本实施例中,假设存储器550中存储的指令类型及存储器548中存储的指令信息均按指令地址从小到大从左到右排列,即当按顺序执行这些指令时,各个指令信息及相应指令类型的访问顺序为从左向右。另假设550中指令类型为‘0’代表548中相应的指令为非分支指令,指令类型为‘1’代表相应的指令为分支指令。任一时刻可以读出存储器548中由第一地址614(块号,BNX)指出的一条轨道中中由第二地址616(块内地址偏移量,BNY)指出的代表指令的表项。任一时刻可以读出存储器550中由第一地址614指出的一条轨道中代表指令类型的复数个表项甚至所有表项。其中如果轨道表中轨道数与第一地址所代表的总轨道数相等,则将第一地址译码寻址就可指向相应轨道。如果不等,则可以用内容寻址(Content Adress)的方法将轨道的轨道号存放在匹配器536中的存储器中,第一地址与匹配器536中的所有轨道号做并行比较,轨道号与第一地址匹配的轨道即为要选择的轨道。匹配器536、存储器550和548共同构成轨道表110。
在存储器550和548中每一行中指令地址最大的一条指令的表项的右方再增设一个结束表项以存放顺序执行下一条指令的地址。结束表项的指令类型总是被设定为‘1’。结束表项中指令信息的第一地址是下一条指令的指令块号,第二地址(BNY)恒定为零,指向该指令轨道的第一项。结束表项被定义为等同于一个无条件分支指令。当指令循迹器指向一个结束表项时总会产生一个内部控制信号使选择器608选择存储器548的输出630;也会产生一个内部控制信号使寄存器610更新。该内部信号可以由存储器550或存储器548中结束表项中含有的特殊位触发;也可以由第二地址616指向结束表项来触发。
在图6A中,指令循迹器114中主要包括了移位器602、前导零计数器604、加法器606、选择器608和寄存器610。其中移位器602将从存储器550读出的代表复数条指令的复数个指令类型618向左移位,其移动位数由寄存器610输出的第二地址指针616决定。移位器602输出的移位后指令类型624的最左边一位是步进位(STEP Bit)。该步进位的信号与从处理器核核来的BRANCH信号共同决定寄存器610的更新。选择器608由控制信号TAKEN控制,其输出632为下一地址(Next Address),其中含有第一地址部分及第二地址部分。当TAKEN为‘1’(分支成功)时,选择器608选择存储器548的输出630(含有分支目标的第一地址及第二地址)做为输出632。当TAKEN为‘0’(分支不成功)时,选择器608选择现第一地址614作为输出632第一地址部分,加法器 输出628做为输出632第二地址部分。指令类型624被送到前导零计数器604以计算下一个‘1’指令类型(代表相应指令为分支指令)前有多少个‘0’指令类型(代表相应指令为非分支指令),其中不管步进位是‘0’或‘1’都被计算为一位‘0’。得出的前导‘0’的数目626(步进数STEP Number)则被送到加法器606与寄存器610输出的第二地址616相加以得出下一分支源地址(Next Branch Address)628。请注意此下一分支源地址就是当前指令下一条分支指令的第二地址,而在此之前的非分支指令则会被指令循迹器114跳(Skip)过。
当第二地址指向代表一条指令的表项时,受第二地址控制的移位器也将存储器548输出的复数条指令类型统一向左移位。此时代表存储器550所读出指令的指令类型被移位到指令类型624中的最左面的步进位。移位指令类型624被送入前导零计数器计算下一条分支指令之前指令的条数。此时前导零计数器604的输出626即是指令循迹器应该前进的步长。此步长与第二地址616由加法器606相加后即得出下一分支指令地址628。
当移位后指令类型624中的步进位信号为‘0’时,这表示第二地址616所指向的存储器550中的表项为非分支指令,此时该步进位信号控制寄存器610更新,而选择器608在为‘0’的TAKEN信号622控制下选择下一分支源地址628成为第二地址616,第一地址614保持不变。此时新的第一第二地址指向同一轨道中的下一条分支指令,此分支指令前的非分支指令均被越过。新的第二地址控制移位器616将指令类型618移位,使代表此分支指令的指令类型位落到624的步进位上供下一步操作。
当移位后指令类型624中的步进位信号为‘1’时,这表示第二地址所指向的存储器550中的表项代表分支指令。此时该步进位信号不影响寄存器610更新,寄存器610由处理器核来的BRANCH信号634控制更新。此时加法器输出628是当前分支指令同一轨道上的下一条分支指令的地址,同时存储器输出630是当前分支指令的目标地址。
当BRANCH信号为‘1’时,选择器608的输出632更新寄存器610。如果此时处理器核来的TAKEN信号622为‘0’时,代表处理器核决定在这个分支点选择顺序执行,此时选择器608选择下一分支源地址628。此时寄存器610输出的第一地址614不变,下一分支源地址628成为新的第二地址616。此时新的第一第二地址指向同一轨道中的下一条分支指令。新的第二地址控制移位器616将指令类型618移位,使代表此分支指令的指令类型位落到624的步进位上供下一步操作。
如果此时处理器核来的TAKEN信号622为‘1’时,代表处理器核决定在这 个分支点选择程序跳转到分支目标,此时选择器选择从存储器548中读出的分支目标地址630成为由寄存器610输出的第一地址614及未来第二地址626。此时BRANCH信号634控制寄存器610锁存上述第一第二地址成为新的第一第二地址。该新的第一第二地址指向可能不在同一轨道上的分支目标地址。新的第二地址控制移位器616将指令类型618移位,使代表此分支指令的指令类型位落到624的步进位上供下一步操作。
当第二地址指向轨迹表结束表项(下一行表项)时,如前所述内部控制信号控制选择器608选择存储器548的输出530,并更新寄存器610。此时新的第一地址614为存储器548的结束表项中记载的下一轨道的第一地址,第二地址为零。此时第二地址控制控制移位器616将指令类型618移零位,开始下一步操作。如此周而复始,指令循迹器114与轨道表110配合,会跳过轨道表中的非分支指令而总是指向分支指令。
图6B是本发明所述数据循迹器读指针移动的实施例650。在本实施例中,假设与数据预取相关的指令类型也存储在指令类型存储器550中,且数据预取与指令预取共用同一张轨道表110。对于其他情况,如数据预取有专用的轨道表,也可进行类似操作。
数据循迹器122根据指令类型存储器550输出的指令类型,可以找到下一个数据访问指令,从而通过读指针668输出该数据访问指令的地址对轨道表110进行寻址以读取相应数据访问指令的相关信息。在本实施例中,与图6A相同,假设指令类型为‘1’代表数据访问指令,指令类型为‘0’代表非数据访问指令,这样指令类型存储器550中存储的一行‘0’和‘1’就代表了对应指令的类型。再假设指令地址小的指令类型排在左边,指令地址大的指令类型排在右边,即当按顺序执行这些指令时,各个指令类型的访问顺序为从左向右。
数据循迹器122的主要包括了移位器670、前导零计算器672和加法器674和寄存器676。其中移位器670将从指令类型存储器550读出的代表复数条指令的复数个指令类型向左移位,其移动位数由数据循迹器122中寄存器676输出的读指针决定。前导零计数器672采用与图6A实施例中相同方法得到步进位并计算步进数,将得出的前导‘0’的数目684(即步进数)送到加法器674与寄存器676输出的指针值668相加以得出下一数据访问指令地址666,在此下一数据访问指令之前的非数据访问指令则会被数据循迹器122跳过。与图6A中的寄存器610类似,寄存器676根据前导零计数器672输出的步进位和处理器核116送来的表示当前执行的指令是否为数据访问指令的信号692决定是否将其值更新为输入的下一数据访问指令地址666。如此周而复始,数据循迹器122可以跳过轨道表中的非数据访问指令而总是指向数据访问指令。
根据本发明所述技术方案,当主动表104表项已满且需要建立新的行地址/行号匹配对时,需要对主动表104进行替换,即从主动表104中移除一个已有的行地址/行号匹配对,代以新的行地址/行号匹配对;从指令存储器106中移除相应的指令块,代以新的指令块。轨道表110中每个分支轨迹点的内容包含了其分支目标轨迹点的块号(即第一地址)和块内偏移量(即第二地址)。如果尚在轨道表110中存储的分支目标轨迹点的块号对应的主动表104中匹配对及相应的指令缓存块被替换,则会产生块号未变、但块号所代表的存储内容已改变的情况,导致该轨迹点将指向错误的指令块。可以增加一个相关表(correlationtable),记录主动表104中每个匹配对是否在轨道表中作为轨迹点中分支目标的相关信息。
图7A是本发明所述相关表的一个实施例700。为便于说明,图7A中的相关表在逻辑上被归入主动表104。此外,图7A中还省略了与本实施例说明内容无关的部分或部件。
在本实施例中,主动表104除了包含数据地址寻址器202外,还包含一个相关表702。相关表702的表项数与数据地址寻址器202中的表项数相同,两者形成一一对应的关系。相关表702中每一个表项表示了与其相应的数据地址寻址器202匹配对中的行号在轨道表110中被引用(即作为目标块号出现)的次数。根据具体实现的不同,该次数可以是在轨道表110中以所述块号为目标块号的轨迹点的个数,也可以是包含这种轨迹点的轨道的条数。相关表702中每一个表项的初始值都为‘0’。
根据本发明所述技术方案,主动表104(或微型主动表)一旦匹配得到或分配得到一个块号,则可以将此块号作为索引708从相关表702中读出对应表项的值送到运算单元704,并输出表示该块号是有效块号的控制信号710到运算单元704,使得运算单元704对该值进行加‘1’操作,并将结果送回相关表702中的对应行,从而将该表项的值(即对应块号被引用的次数)增‘1’。根据本发明技术方案,控制信号710可以是如图2A实施例中的有效位220,也可以是其他存储在主动表104中的合适的信号。每当一条轨道被替换出轨道表110时,退出单元706对该轨道进行扫描,提取出所有目标块号,并以这些块号为索引712从相关表702中读出对应表项的值送到运算单元704,并输出控制信号714到运算单元704,使得运算单元704对该值进行减‘1’操作,并将结果送回相关表702中的对应行,从而将该表项的值(即对应块号被引用的次数)减少‘1’。如此,相关表702中值为‘0’的表项表示数据地址寻址器202中对应的匹配对未被轨道表110引用,所以这些匹配对可以被新的行地址/行号匹配对替换而不致产生错误。主动表/指令存储器替换逻辑只替换相关表中为‘0’的相应表项。
图7B是本发明所述相关表的一个实施例750。为便于说明,图7B中的相关表在逻辑上也被归入主动表104。此外,图7B中还省略了与本实施例说明内容无关的部分或部件。
在本实施例中,主动表104除了包含数据地址寻址器202外,还包含一个相关表752。相关表752的每个表项只包含一个标志位,对应数据地址寻址器202中的一个匹配对。该标志位为‘1’表示对应匹配对中的块号被轨道表110引用;该标志位为‘0’表示对应匹配对中的行(块)号没有被轨道表110引用。
此外,增加了一个扫描器754,其读指针758依次扫描轨道表110中每条轨道中的每个轨迹点。一旦读指针758指向了一个含有目标块号的轨迹点(如分支轨迹点或结束轨迹点),则将该目标块号读出并作为地址760对相关表752中的对应标志位进行置位操作(即将该标志位的值置为‘1’)。另有一循环指针756以比扫描器754读指针758更慢的移动速度依次移过相关表752中的每个标志位,并对移过的标志位进行清零操作(即将该标志位的值清为‘0’)。这样,只要读指针758的移动速度远大于循环指针756的移动速度,就可以将被轨道表110引用的块号对应的标志位全部置为‘1’,而没有被轨道表110引用的块号对应的标志位则被全部置为‘0’。标志位值为‘0’的匹配对可以被替换以容纳新的行地址/行号匹配对。
根据本发明所述技术方案,指令读缓冲112中存储了处理器核116将要执行的指令,使得处理器核116能以最少等待时间获取指令。图8A是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个实施例800。
在本实施例中指令读缓冲112由寄存器组802构成,该寄存器组的容量与一个指令块大小相同,含有处理器正在执行的当前指令块。为便于说明,假设一个指令块只有两条指令,即寄存器组802只包含了能存放两条指令的寄存器。包含更多指令的情况与此类似。
在本实施例中,包含处理器核116将要执行的指令在内的当前指令块都会被存储到寄存器组802中。一旦处理器核即将执行的指令不在当前指令块中,则根据指令循迹器114的第一地址指针614将该指令所在的指令块从指令存储器106中读出并存储到寄存器组802中,同时将扫描器108提取的指令信息以及主动表104输出的块号信息存储到轨道表110中以建立对应这个指令块的轨道。由于轨道表110中的轨道与指令读缓冲112中的指令块一一对应,因此本实施例的轨道表110中只有一条轨道,而指令循迹器114按之前实施例所述方式更新读指针。
当处理器核116正在执行的当前指令不是指令块的最后一条指令且处理器核116对顺序下一条指令取指时,该下一条指令已经存储在寄存器组802中。因此选择器804和806选择来源于寄存器组802的输入,而选择器808根据程序计数器的低位810(即该下一条指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。这样,处理器核116就能以最少等待时间获取指令。
当处理器核116正在执行的当前指令是指令块的最后一条指令且处理器核116对顺序下一条指令取指时,由于该指令位于下一指令块,因此尚未存储在寄存器组802中。根据本发明技术方案及之前实施例所述,该下一指令块正在被预取,或已经被预取并存储在指令存储器106中。若该指令块已存储在指令存储器106中,则可以由指令循迹器114的第一地址指针614(即该指令块的块号)索引到该指令块,该指令块被读出,并由选择器804和806选择输出到选择器808。选择器808再根据程序计数器的低位810(即该下一条指令在指令块中的偏移量,也就是第一条指令)从送来的指令块中选出处理器核116所需指令。若该指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将处理器核116所需指令选出。此外,也可以在指令存储器106处设置旁路径,使得一旦该指令块被预取进来就能选出所需指令。
当处理器核116执行分支指令发生分支转移、需对分支目标指令取指时,若该分支目标指令就在当前指令块中,则选择器804和806选择来源于寄存器组802的输入,而选择器808根据程序计数器的低位810(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。
若该分支目标指令不在当前指令块中,则根据本发明技术方案及之前实施例所述,包含该分支目标指令的指令块已经被预取并存储在指令存储器106中,或正在预取中。那么,若该指令块已存储在指令存储器106中,则可以由指令循迹器114的第一地址指针614(即该指令块的块号)索引、读出该指令块,并由选择器804和806选择输出到选择器808。选择器808再根据程序计数器的低位810(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。若该指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将处理器核116所需指令选出。此外,也可以在指令存储器106处设置旁路径,使得一旦该指令块被预取进行就能选出所需指令。
图8B是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的一个改进实施例830。在本实施例中,主动表104、指令存储器106、扫描器108和指令循迹器114与图8A实施例相同,不同之处在于指令读缓冲112 中包含一个存储器832,而非一个寄存器组。存储器832能够容纳至少两个指令块。相应地,轨道表110中也容纳了相应数目的轨道,这些轨道与存储器832中的指令块一一对应。
在本实施例中,一旦处理器核116执行到一个新的指令块,指令循迹器114就将该指令块对应轨道中结束轨迹点的内容(即顺序执行时的下一指令块的块号)读出,并通过第一地址指针614送到轨道表110和指令存储器106。该块号在轨道表110中与每条轨道对应的块号匹配,若匹配成功,则说明该下一指令块已经存储在存储器832中;若匹配不成功,则说明该下一指令块尚未存储在存储器832中,需要将其写入存储器832。
根据本发明技术方案及之前实施例所述,该下一指令块已经被预取并存储在指令存储器106中,或正在预取中。那么,若该下一指令块已存储在指令存储器106中,则可以由指令循迹器114的第一地址指针614(即该下一指令块的块号)索引、读出该指令块,并存储到指令读缓冲112的存储器832中。若该下一指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将其存储到存储器832中。若存储器832已满,则可以使用替换算法(如最近最少访问替换算法LRU或最少频繁访问替换算法LFU等)以该下一指令块覆盖一个已有指令块。同样地,在将该下一指令块写入存储器832的同时在轨道表110的相应位置建立对应轨道。
这样,当前指令块和下一指令块都被存储在指令读缓冲112中。无论处理器核116执行的当前指令的下一条指令是在同一指令块(即当前指令块),还是在下一指令块,都可以由指令循迹器114的第一地址指针614的值(即该下一条指令所在指令块对应的块号)经轨道表110中对应每条轨道的块号匹配后,根据匹配结果834在指令读缓冲112的存储器832中找到对应的指令块。之后,选择器804和806选择来源于存储器832的指令块,选择器808根据程序计数器的低位810(即该下一条指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。
当处理器核116执行分支指令发生分支转移、需对分支目标指令取指时,指令循迹器114将第一地址读指针614的值(即该分支指令的分支目标块号)送到轨道表110中与每条轨道的块号匹配。若匹配成功,则说明该分支目标指令所在的指令块已经存储在存储器832中,可以在存储器832中由匹配结果834索引,读出该指令块。之后,选择器804和806选择来源于存储器832的该指令块,选择器808根据程序计数器的低位(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。
若匹配不成功,则说明该分支目标指令所在的指令块尚未存储在存储器832中。根据本发明技术方案及之前实施例所述,该分支目标指令所在的目标指令块已经被预取并存储在指令存储器106中,或正在预取中。那么,若该目标指令块已存储在指令存储器106中,则可以由指令循迹器114的第一地址指针614
(即该目标指令块的块号)索引、读出该指令块。选择器804和806选择存储器832输出的该指令块到选择器808。选择器808再根据程序计数器的低位810
(即该分支目标指令在指令块中的偏移量)从送来的指令块中选出处理器核116所需指令。若该指令块正在预取中,则等待该指令块被取到并写入指令存储器106后,再按上述方法将处理器核116所需指令选出。此外,也可以在指令存储器106处设置旁路径,使得一旦该指令块被预取进来就能选出所需指令。
图8C是本发明所述指令读缓冲与指令存储器、轨道表等配合为处理器核提供指令的又一个改进实施例860。在本实施例中,主动表104、指令存储器106、扫描器108和指令循迹器114与图8B实施例相同,不同之处在于指令读缓冲112除了包含存储器832,还包含一个输出寄存器组862。输出寄存器组862的容量与一个指令块大小相同,包含了处理器正在执行的当前指令块。为便于说明,假设一个指令块只有两条指令,即寄存器组862只包含了能存放两条指令的寄存器。包含更多指令的情况与此类似。这样,当处理器核116从输出寄存器组862获取当前指令的同时,存储器832的端口可以被用于提供分支目标指令或不在当前指令块内的下一条指令。如此,单端口(port)的存储器结合寄存器可同时提供两条相互独立的指令。
具体来说,与之前实施例所述情况类似,输出寄存器组862可以直接提供当前指令块;存储器832可以根据指令循迹器114第一地址指针614在轨道表中的匹配结果834提供下一指令块或分支目标指令块;指令存储器106可以根据指令循迹器114第一地址指针614提供分支目标指令块。选择器864和866根据处理器核116所需指令所在的指令块在上述三个存储单元中的匹配结果进行选择。若该指令块在输出寄存器组862中(即该指令块就是当前指令块),则选择器864和866选择输出寄存器组862输出的指令块送到选择器808;否则,若该指令块在存储器832中(即该指令块是下一指令块,或是已存储在存储器832中的分支目标指令块),则选择器864和866选择存储器832输出的指令块送到选择器808;否则,选择器864和866选择指令存储器106输出的指令块,或预取完成后指令存储器106输出(或旁路输出)的指令块送到选择器808。选择器808按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出处理器核116所需指令。
根据本发明所述技术方案,对上述实施例进行改进,可以在处理器核116 取得分支指令的下一次取指时,同时向处理器核116输出该分支指令顺序执行的下一指令以及分支目标指令。图9A是本发明所述同时为处理器核提供下一指令及分支目标指令的一个实施例900。处理器核在同时取到分支指令之后顺序执行的下一指令和分支目标指令后,可以用两条流水线前若干流水线段(如:取指段、译码段)并行对这两条指令进行取指、译码等操作,等到分支转移是否发生确定后,再选择其中一条流水线的中间结果继续运行,完成之后的流水线段操作,从而提高处理器核的吞吐率,实现分支转移的零等待。
在本实施例中,主动表104、指令存储器106、扫描器108和指令循迹器114与图8C实施例相同,不同之处在于指令读缓冲112除了包含存储器832、输出寄存器组862外,还包含两套选择结构。选择器904、906和908用于选择输出下一指令902,选择器910、912和914用于选择输出分支目标指令916。
在本实施例中,输出寄存器组862可以提供当前指令块与相邻的下一指令块;存储器832可以根据指令循迹器114第一地址指针614在轨道表中的匹配结果834提供下一指令块或分支目标指令块;指令存储器106可以根据指令循迹器114的第一地址指针614提供分支目标指令块。选择器908受程序计数器810控制,从当前指令块内选出下一指令902;选择器910受从轨道表读出的分支轨迹点内容中的第二地址(即分支目标地址630中的第二地址)控制,从目标指令块中选出目标指令916。
若处理器核116当前执行的不是分支指令,且下一指令在当前指令块内,那么选择器904和906选择输出寄存器组862输出的指令块送到选择器908,再由选择器908按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出处理器核116所需的下一指令902。
若处理器核116当前执行的不是分支指令,且下一指令在下一指令块内(当前指令是指令块最后一条指令),那么由指令循迹器114的第一地址指针614的值(即该下一条指令所在的下一指令块对应的块号)经轨道表110中对应每条轨道的块号匹配后,根据匹配结果834在指令读缓冲112的存储器832中找到对应的下一指令块。选择器904和906选择存储器832输出的指令块送到选择器908,再由选择器908按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出处理器核116所需的下一指令902。
若处理器核116当前执行的是分支指令,则在按上述方法输出下一指令902的同时,由选择器910和912对来源于指令存储器106和存储器832的指令块进行选择,以选出分支目标指令块。此时,若下一指令在当前指令块内,则选择器910和912优先选择来源于存储器832的分支目标指令块(不对指令存储 器106进行读操作以节省功耗),仅当分支目标指令块不在832中时,才选择来源于指令存储器106的分支目标指令块;若下一指令在下一指令块内(当前指令是指令块最后一条指令)则选择器910和912选择来源于指令存储器106的分支目标指令块。选择器908如前实施例所述方法根据分支目标地址的低位(即分支目标指令在分支目标指令块中的偏移量)从送来的指令块中选出处理器核116所需的分支目标指令916。
图9B是本发明所述同时为处理器核提供下一指令及分支目标指令的另一个实施例950。在本实施例中,主动表104、指令存储器106、扫描器108、指令循迹器114、输出寄存器组862和选择器904、906、908、910、912、914都与图9A实施例相同,不同之处在于用一个双输出端口存储器952代替了图9A的单输出端口存储器832。存储器952的两个输出端口954和956可以根据不同的寻址958和834,分别输出下一指令块和分支目标指令块。
因此,输出寄存器组862可以直接提供当前指令块;存储器952可以同时提供下一指令块以及分支目标指令块;指令存储器106可以提供分支目标指令块。
若下一指令所在的指令块就在输出寄存器组862中(即该指令块就是当前指令块),则选择器904和906选择输出寄存器组862输出的指令块送到选择器908;否则,选择器904和906选择存储器952输出端口954输出的下一指令块送到选择器908。选择器908按之前实施例所述方法根据程序计数器的低位810从送来的指令块中选出该下一指令902送到处理器核116。
若分支目标指令所在的指令块在存储器952中,则选择器910和912选择存储器952输出端口956输出的分支目标指令块送到选择器914;否则,选择器910和912选择指令存储器106输出的分支目标指令块,或预取完成后指令存储器106输出(或旁路输出)的分支目标指令块送到选择器914。选择器914按之前实施例所述方法根据分支目标地址的低位从送来的指令块中选出该分支目标指令916送到处理器核116。
采用双输出端口存储器952同时提供下一指令块和分支目标指令块,能降低指令存储器106的访问次数,从而降低功耗。
根据本发明技术方案,可以将经常被执行到的特定程序固定存储在指令存储器106中的指定位置,并在主动表104中的特定位置建立对应的指令行地址/行号匹配对,以减少指令行替换次数。也可以在指令存储器106中增加至少一个额外的存储单元,用于存储这种特定程序,且所述存储单元存储特定的程序。也就是说,所述存储单元对应的指令的起始地址是特定的,不需要在主动表104 中匹配,可以减小主动表104的容量。图10是本发明所述包含用于存储特定程序的存储单元的指令存储器的实施例1000。为便于说明,图10中未显示指令存储器106中的寄存器304,且以一个额外的存储单元1002进行说明。对应包含更多额外存储单元的情况,也与此类似。
在图10中,指令存储器106中除了包含指令存储单元302以外(本实施例中未显示),还包含一个存储单元1002,用于存储特定的程序,如:异常处理程序(ExceptionHandling Program)等。主动表104中的匹配对与指令存储单元302中的指令行一一对应,而存储单元1002中的指令行是特定的,且对应特定的行号,因此不需要在主动表104中建立相应的匹配对。这些特定的行号与匹配对中的行号互不冲突。此外,存储单元1002中的每个存储行都有一个相应的有效位1004,用于表示对应的特定指令行是否已经存储在该存储行中。根据本发明技术方案,当处理器核116启动后,有效位1004均被设置为无效,填充器102利用取指的空闲时间,获取这些特定的指令行,写入存储器1002并将相应的有效位设置为有效
在本实施例中,扫描器除按之前实施例所述操作外,还优先将分支目标地址或下一指令块的地址与存储单元1002中指令行对应的地址进行匹配并检查对应的有效位,一旦匹配成功且该指令行有效,则表示所需指令行已经存储在存储单元1002中,不需要再到主动表104中进行匹配,即可直接输出上述特定行号。此外,当需要将指令块从指令存储器106填充到指令读缓冲112中时,若该指令块是这些特定行号对应的指令行所包含的指令块,则选择器1008受控制信号1006控制选择来源于存储单元1002的指令块送往指令读缓冲112;否则选择器1008受控制信号1006控制选择来源于指令存储单元302的指令块送往指令读缓冲112。
图11A是本发明所述用于选择指令块的匹配器的实施例1100。为了便于说明,假设本实施例中指令行、指令块、行号、块号之间的关系与图3B实施例相同。这样,指令块号(第一地址,BNX)比存储器块号多一位。指令块号的高位就是该指令块在存储器中的存储器块号。再假设指令块号的低位等同于32位指令地址的第4位,用以分辨同一存储器块中的两个不同指令块。这样,第二地址(BNY)就是32位指令地址的第3位至第2位,用于在指令块中对指令寻址,而第1位和第0位表示一条指令中的不同字节。
在本实施例中,如图3B实施例所述,假设指令存储器106中的一个指令行对应指令读缓冲112中的两个指令块且以指令地址中的第4位区分同一指令行中的不同指令块。根据本发明技术方案,指令读缓冲112中的每个指令块均有一个对应的匹配器。为了便于说明,在图11A中只显示了两个匹配器:匹配器 1102和匹配器1122。以匹配器1102为例,匹配器1102中的寄存器1104存储了一个指令块号(BNX),与指令读缓冲112中的一个指令块及轨道表中的一条轨道相对应。匹配器1102中的比较器1110用于将寄存器1104中的块号与指令循迹器114输出的第一地址614进行比较,并输出比较结果(‘匹配成功’或‘匹配不成功’)。寄存器1108的写使能受处理器核116输出的BRANCH信号634控制,当BRANCH信号634有效时,更新寄存器1108的值。寄存器1108的值和比较器1104的输出被送到或门1107进行逻辑或操作。匹配器1102中的比较器1106用于比较处理器核116输出的指令地址值中的第4位1119与存储在寄存器1104中的指令块号的第4位,其比较结果与或门1107的输出值一起送到与门1114中进行逻辑与操作。若该比较结果为‘匹配’且或门1107输出的值为‘有效’,则与门1114输出‘有效’,表示指令读缓冲112中对应的指令块是处理器核116所需的指令块,否则,与门1114输出‘无效’,表示指令读缓冲112中对应的指令块不是处理器核116所需的指令块。这样,就可以指出处理器核116所需的指令块。
此外,比较器1110的输出也被送到轨道表110用以指出当前轨道,该当前轨道被用于指令循迹器114读指针移动的相关操作。
匹配器1222中的寄存器1124、比较器1126、寄存器1128、比较器1130、或门1127、与门1134分别与匹配器1102中的寄存器1104、比较器1106、寄存器1108、比较器1110、或门1107、与门1114对应,执行类似的操作。
以下通过一个具体的例子对匹配器进行说明。为便于说明,在本实施例中,假设目标指令块已经被预取到指令存储器106中,且该目标指令块及其相邻的下一指令块均尚未被写入指令读缓冲112中。对于其他的情况,也可以参照之前实施例的说明进行类似操作,在此不再说明。本实施例中指令循迹器114的读指针停止在处理器核116正在执行的当前指令之后的第二个分支轨迹点处(结束轨迹点也被视为分支轨迹点)。此外,为清晰起见,在图11A中省略了扫描器108和主动表104。
假设当前分支指令的分支转移成功发生,则可以用从轨道表110中读出的分支轨迹点内容630中的第一地址(即块号)在指令存储器106中寻址,通过总线1117读出分支目标指令块。处理器核116接收并选择来源于总线1117的目标指令块中的指令作为下一步将被执行的指令。
按之前实施例所述技术方案,此时轨道表110和指令读缓冲112中的替换逻辑已经指出可以被替换的轨道(如:轨道1116)和指令块(如:指令块1118)。与轨道1116及指令块1118对应的匹配器是匹配器1102。
因此,经扫描器108审查、提取得到的指令类型及经主动表104匹配或分配产生的块号等指令信息被存储到轨道表110的轨道1116中,同时轨迹点内容630中的第一地址被存储到匹配器1102中的寄存器1104中,且总线1117上的目标指令块被存储到指令读缓冲112的指令块1118中。
之后,轨道表110和指令读缓冲112中的替换逻辑指向下一个可被替换的轨道(如:轨道1120)和指令块(如:指令块1138)。与轨道1120及指令块1138对应的匹配器是匹配器1122。
与此同时,可以计算出指令块1118相邻的下一个指令块的地址,从而在主动表104中匹配得到该下一指令块对应的块号,该块号(即第一地址)被存储在轨道1116的结束轨迹点中,并被送到指令存储器106寻址,通过总线1117从指令存储器106中读出指令块1118相邻的下一指令块。类似地,该下一指令块经扫描器108审查、提取得到的指令类型及经主动表104匹配或分配产生的块号等指令信息被存储到轨道表110的轨道1120中,同时轨迹点内容630中的第一地址(即该下一指令块对应的块号)被存储到匹配器1122中的寄存器1124中,且总线1117上的指令块(即该下一指令块)被存储到指令读缓冲112的指令块1138中。
由于上述分支指令的分支转移成功发生,选择器608受TAKEN信号622控制选择来自总线630的该分支指令的分支目标轨迹点位置信息作为输出,而寄存器610的值受BRANCH信号634控制更新为该分支目标轨迹点的第一地址和第二地址。各个匹配器中的相应寄存器(如匹配器1102中的寄存器1108、匹配器1122中的寄存器1128)的值也都受BRANCH信号634控制得以更新,将之前比较器(如匹配器1102中的比较器1110、匹配器1122中的比较器1130)的输出写入这些寄存器中。
当寄存器610的值更新完毕后,新的第一地址读指针614的值(即当前轨道的块号)被送到各个匹配器中与存储在寄存器(如寄存器1104、1124等)中的块号进行匹配,其中匹配器1102中的比较器1110输出匹配成功的比较结果,其他匹配器中的比较器均输出匹配不成功的比较结果,因此,比较器1110的输出选中轨道1116,使得轨道1116成为当前轨道。而新的第二地址读指针616则从轨道1116上与寄存器610中存储的第二地址相对应的轨迹点开始移动,直到停留在下一个分支轨迹点并通过总线630读出该分支轨迹点的内容。
此时,匹配器1102中的或门1107的两个输入中,来自比较器1110的输入为‘1’,来自寄存器1108的输入为‘0’,因此或门1107的输出为‘1’。而其他匹配器中的相应或门(如:匹配器1122中的或门1127等)的两个输入均为 ‘0’,其输出均为‘0’。由于处理器核116所需执行的指令在轨道1116对应的指令块内,如图3B实施例所述,处理器核116送出的指令地址的第4位1119与存储在寄存器1104中的块号最低位相同,因此比较器1106输出‘匹配成功’的结果(即输出‘1’),使得与门1114的两个输入均为‘1’,其输出也为‘1’,从而选中指令块1118作为当前指令块通过总线1115送往处理器核116。其他匹配器中的相应与门(如:匹配器1122中的与门1127等)的来自或门的输入均为‘0’,其输出也均为‘0’,因此不会选中其他指令块。
接下来假设当前轨道中没有分支轨迹点或有分支轨迹点但分支转移均不发生,则指令循迹器114的读指针继续移动直到结束轨迹点,通过总线630读出存储在该结束轨迹点中的下一轨道块号信息。
由于结束轨迹点被视为分支转移一定发生的分支轨迹点,因此TAKEN信号622选择来自总线630的下一轨道信息作为选择器608的输出,BRANCH信号634控制寄存器610的值更新为下一轨道的第一个轨迹点的第一地址和第二地址。与此同时,BRANCH信号634还控制各个匹配器中的相应寄存器(如:寄存器1108、1128等)值的更新,将比较器(如:比较器1110、1130等)原来的输出存储到这些寄存器中,从而保存了比较器的上一次比较结果。
当寄存器610的值更新完毕后,新的第一地址读指针614的值(即下一轨道的块号)被送到各个匹配器中与存储在寄存器(如寄存器1104、1124等)中的块号进行匹配,其中匹配器1122中的比较器1130输出匹配成功的比较结果,其他匹配器中的比较器均输出匹配不成功的比较结果,因此,比较器1130的输出选中轨道1120,使得轨道1120成为供指令循迹器114读指针移动的轨道。而新的第二地址读指针616则从轨道1120上与寄存器610中存储的第二地址相对应的轨迹点开始移动,直到停留在下一个分支轨迹点并通过总线630读出该分支轨迹点的内容。
此时,匹配器1102中的或门1107的两个输入中,来自比较器1110的输入为‘0’,来自寄存器1108的输入为‘1’,因此或门1107的输出为‘1’;匹配器1122中的或门1127的两个输入中,来自比较器1130的输入为‘1’,来自寄存器1128的输入为‘0’,因此或门1127的输出也为‘1’。这样,匹配器1102对应的指令块1118和匹配器1122对应的指令块1138均为可能被选中的指令块。而其他匹配器中的相应或门的两个输入均为‘0’,其输出均为‘0’。由于指令块1118和指令块1138是指令地址相邻的两个指令块,如图3B实施例所述,这两个指令块的块地址(及块号)最低位的值相反,因此,根据处理器核116所需执行的指令的指令地址的第4位1119可以使比较器1106和比较器1126中的一个输出‘匹配成功’的结果(即输出‘1’),从而使得与门1114和与门1134 中的一个输出‘1’,从指令块1118或指令块1138中选出一个指令块通过总线1115送往处理器核116,该指令块包含了处理器核所需执行的指令。这样,指令循迹器114读指针的移动与处理器核116的取指可以不必同步发生,即指令循迹器114读指针指向的轨道与处理器核116取指时读出的指令块可以不相互对应。
在后续的运行过程中,当寄存器610的值再次被更新且指向另外一条轨道
(该轨道非轨道1116或轨道1120之一)时,BRANCH信号634控制匹配器中相应寄存器(如:寄存器1108、1128等)值的更新,将比较器(如:比较器1110、1130等)原来的输出存储到这些寄存器中,并在寄存器610的值更新完毕后,将新的第一地址读指针614的值(即上述新轨道的块号)被送到各个匹配器中与存储在寄存器(如寄存器1104、1124等)中的块号进行匹配。这样,比较器1110的输出结果为‘匹配不成功’,且寄存器1108存储的值为‘0’,使得或门1107和与门1114的输出均为‘0’,即指令块1118不再是可能被选中的指令块。比较器1130的输出结果为‘匹配不成功’,但寄存器1128存储的值为‘1’,使得或门1127的输出为‘1’,即指令块1138依然是可能被选中的指令块。如之前所述,各个匹配器对第一地址读指针614的值(块号)匹配后,可以找到与该块号对应的一条轨道和一个可能被选中的指令块。同样地,可以根据处理器核116送出的指令地址第4位1119从这两个可能被选中的指令块中选出包含处理器核所需执行的指令在内的一个指令块。
图11B是本发明所述用于选择指令块的匹配器的另一个实施例。在本实施例中,指令读缓冲是双端口存储器,除第一端口1115外,还增加了第二端口1192。以匹配器1152为例,其中的寄存器1104、比较器1106、寄存器1108、或门1107和与门1114与图11A实施例中的相同。不同的是,匹配器1152中的比较器1110被称为第一比较器,此外还增加了一个第二比较器1150。其中,第二比较器1150用于对匹配器1152中存储的块号和通过总线630输入的目标块号进行比较,并以其输出作为字线对指令读缓冲112的第二端口进行寻址,从而通过总线1190读出目标指令段。此外,第二比较器1150的输出还指向了轨道表110中的目标轨道。
以下通过一个具体的例子对匹配器进行说明。为便于说明,在本实施例中,假设目标指令块已经被预取到指令存储器106中。对于其他的情况,也可以参照之前实施例的说明进行类似操作,在此不再说明。本实施例中指令循迹器114的读指针停止在处理器核116正在执行的当前指令之后的第二个分支轨迹点处(结束轨迹点也被视为分支轨迹点)。此外,为清晰起见,在图11B中省略了扫描器108和主动表104。
假设当前指令循迹器114的读指针指向一个分支轨迹点,则可以用从轨道表110中读出的分支轨迹点内容630中的第一地址(即块号)在各个匹配器的相应第二比较器(如:第二比较器1150、1160、1180等)中进行匹配。若匹配不成功,则按之前实施例所述方法,将该块号送到指令存储器106寻址,通过总线1194读出分支目标指令块,并由选择器1190选择后作为输出经总线1117送往处理器核116。若匹配成功,则可以根据这些第二比较器的匹配结果,从指令读缓冲112中通过总线1192从第二端口读出一个指令块(即分支目标指令块),并由选择器1190选择后作为输出经总线1117送往处理器核116。此外,与图11A实施例所述相同,当前指令块经总线1115被送往处理器核116。
若该分支轨迹点的分支转移没有发生,则处理器核116执行来源于总线1115的该分支指令顺序执行的后一条指令。指令循迹器114的读指针继续移动直到下一个分支轨迹点,读出该分支轨迹点的内容630中的第一地址(即块号)在各个匹配器的相应比较器中进行匹配,并按之前所述方法进行后续操作。
若该分支轨迹点的分支转移成功发生,则处理器核116执行来源于总线1117的该分支指令的分支目标指令。与图11A所述实施例相同,选择器608受TAKEN信号622控制选择来自总线630的该分支指令的分支目标轨迹点位置信息作为输出,而寄存器610的值受BRANCH信号634控制更新为该分支目标轨迹点的第一地址和第二地址。各个匹配器中的相应寄存器的值也都受BRANCH信号634控制得以更新,将之前第一比较器的输出写入这些寄存器中。当寄存器610的值更新完毕后,新的第一地址读指针614的值被送到各个匹配器中的第一比较器与存储在寄存器中的块号进行匹配。根据匹配结果,可以按图11A实施例所述方法确定两个可能被选中的指令块,并根据处理器核116送出的指令地址第4位1119从这两个可能被选中的指令块中选出包含处理器核所需执行的指令在内的一个指令块作为新的当前指令块通过总线1115送往处理器核116。之后的操作与之前实施例所述相同,在此不再说明。
根据本发明技术方案,可以在数据访问指令对应的轨迹点中存储该数据访问指令的基地址寄存器值和一个标志位。其中基地址寄存器值就是最近一次执行该数据访问指令时,其基地址寄存器的值;而标志位则记录了该数据访问指令有无被执行过的信息。例如,该标志位为‘1’,表示对应的数据访问指令已被处理器核116至少执行过一次,即相应的基地址寄存器值是有效的;该标志位为‘0’,表示对应的数据访问指令尚未被处理器核116执行过,即相应的基地址寄存器值是无效的。这样,就可以在第二次执行到某条数据访问指令时,用当前的基地址寄存器值减去存储在轨迹点中的上次执行该指令时的基地址寄存器值,得到数据寻址地址变化的步长(stride),从而预测下一次执行该指令时 可能的数据寻址地址。
图12是本发明所述预测数据寻址地址的一个实施例1200。在本实施例中,数据预测器1216的主体部分由加法器构成。如之前实施例所述,当扫描器108审查到一条数据访问指令时,将该指令的指令类型等信息存储在轨道表110的相应轨迹点中,并将标志位置为‘1’。在轨道被替换时对其中的所有标志位清‘0’。当处理器核116执行到该数据访问指令时,该数据访问指令对应的基地址寄存器值1206被送到数据预测器1216中,并根据具体实现方式的不同,将该基地址寄存器值1206送到轨道表110或专用的存储器中存储。在本实施例中,以在轨道表110中存储基地址寄存器值1206为例,对于在专用的存储器中存储基地址寄存器值1206的情况,也可采用类似方法操作。
数据预测器1216中的减法器1202用于将处理器核112送来的当前基地址寄存器值1206(即该数据访问指令对应的基地址寄存器值)减去轨道表110送来的原基地址寄存器值1208,得到基地址寄存器差值1210。该差值1210就是两次执行该数据访问指令时数据寻址地址变化的步长。在某些情况下,特别是执行数据寻址地址变化步长不变的循环代码时,下一次执行该数据访问指令时数据寻址地址值就等于本次数据寻址地址值加上该步长值。
数据预测器1216中的加法器1204用于将该差值与处理器核116送来的当前数据访问指令的数据寻址地址1212相加,即可得到下一次执行该数据访问指令时可能的数据寻址地址1214,并将该数据寻址地址1214送往数据读缓冲120进行地址匹配,以确定该地址对应的数据是否已经存储在数据读缓冲120中。若在数据读缓冲120中地址匹配成功,则不需要预取;否则将该数据寻址地址送往数据存储器118进行地址匹配。若在数据存储器118中地址匹配成功,则将该数据送到数据读缓冲120中存储;否则,由填充器102对该数据寻址地址进行预取,并将预取到的数据存储在数据读缓冲120中。
采用图12实施例计算基地址寄存器值变化步长的方法,在第一次执行到某条数据访问指令时将基地址寄存器值存储到轨道表110中,在第二次执行到该数据访问指令时将当前基地址寄存器值减去已存储的基地址寄存器值,从而推算出第三次执行该数据访问指令时的数据寻址地址。可以采用其他预测方法,在不需要存储基地址寄存器值的情况下,更早计算基地址寄存器值变化步长,使得在第一次执行某条数据访问指令时就能推算出第二次执行该数据访问指令时的数据寻址地址。图13是本发明所述数据预测器计算基地址寄存器值变化步长的另一个实施例1300。
在本实施例中,数据预测器1216包含一个提取器1334、一个基地址寄存器 值变化步长过滤器1332和一个加法器1204。提取器1334包含译码器1322和提取器1324、1326、1328。提取器1334对处理器核116正在获取的指令1302进行审查,由译码器1322译码得到指令类型1310,再根据译码的结果从指令1302中提取出寄存器更新指令中的目标寄存器号1304,寄存器值的变化量1306和数据访问指令的基地址寄存器号1308。通常不同类型的指令中寄存器号、寄存器值的变化量等值可以位于指令字中不同的位置,因此可以根据指令类型的译码结果从指令字中的相应位置提取出这些信息。此外,基地址寄存器号1336是从数据循迹器122读指针指向的数据访问指令轨迹点中读出的基地址寄存器号。
一般地,数据访问指令用到的基地址寄存器也属于寄存器堆中的寄存器,通过记录寄存器堆中所有寄存器的变化值,就可以直接得到或推导出任何一个基地址寄存器的变化值。对于其他情况,如基地址寄存器不属于寄存器堆中的寄存器,也可以采用类似的方法,记录寄存器堆中所有寄存器及所有基地址寄存器的变化值,直接得到或推导出任何一个基地址寄存器的变化值。在本实施例中,译码得到的指令类型可以包括数据访问指令和寄存器更新指令。其中寄存器更新指令指的是对寄存器堆中任何一个寄存器的值进行更改的指令。当寄存器更新指令中寄存器值的变化量是以立即数形式出现时,该立即数的值就是对应的寄存器值的变化量1306;若以其他方式更新寄存器值,也可以推导出变化量1306。
基地址寄存器值变化步长过滤器1332包含了寄存器堆1312、1314和选择器1316、1318、1320。选择器1316以基地址寄存器号1336作为选择信号,其输入为寄存器堆1312的输出,输出作为基地址寄存器值变化步长1330被送到加法器1204;选择器1318以提取得到的寄存器更新指令中的目标寄存器号1304作为选择信号,其输入为寄存器堆1312和1314的输出,输出被送到选择器1320的一个输入端;而选择器1320的另一个输入端为寄存器值的变化量1306,选择信号则是指令类型1310。若当前指令是寄存器更新指令,选择器1320选择寄存器值的变化量1306作为输出送往寄存器堆1312和1314;若当前指令是数据访问指令中的存储指令,选择器1320选择从选择器1318送来的输出作为输出送往寄存器堆1312和1314。
寄存器堆1312受提取器1334送来的寄存器更新指令中的目标寄存器号1304控制其中各个寄存器的写入选择器1320的输出值,并受提取器1334送来的数据访问指令的基地址寄存器号1308控制各个寄存器的清零。寄存器堆1314则受提取器1334送来的数据访问指令的基地址寄存器号1308控制,以此信号作为写使能控制寄存器堆1314中各个寄存器的写入选择器1320的输出值。
以下根据扫描器审查得到的不同指令类型对基地址寄存器值变化步长过滤 器1332的操作进行说明。
当提取器1334审查发现当前指令是一条寄存器更新指令时,提取出该指令中的寄存器值的变化量1306,选择器1320选择该变化量作为输出写入寄存器堆1312中由该指令中目标寄存器号1304寻址的相应目标寄存器中,从而将该寄存器值的变化步长保存在寄存器堆1312中。
当提取器1334审查发现当前指令是一条数据访问指令时,选择器1316选择该指令中基地址寄存器号作为输出以控制选择器1318,从寄存器堆1312、1314的寄存器输出中选择对应该基地址寄存器的输出作为该数据访问指令的寄存器值变化步长1330,同时控制寄存器堆1312中相应的寄存器内容清零。
此外,若该数据访问指令是一条将寄存器值存储到主存储器的指令时,还需要由选择器1320选择寄存器堆1312输出的寄存器值变化步长作为输出写入寄存器堆1314的相应寄存器中,从而暂存该变化步长值。若该数据访问指令是一条从主存储器中将数据装载到寄存器的指令时,还需要由选择器1318选择寄存器堆1314中相应暂存寄存器的输出作为输出送到选择器1320经选择后写入寄存器堆1312中由该寄存器号寻址的寄存器中,从而将之前暂存的变化步长值恢复到相应寄存器中。
这样,寄存器堆1312中存储了各个寄存器值的变化步长值,而寄存器堆1314中暂存了被临时替换出寄存器的寄存器值对应的变化步长值。过滤器1332保证了当处理器核116执行到数据访问指令时,能输出对应该数据访问指令的寄存器(即基地址寄存器)的变化步长值,实现了图12实施例中减法器1202的功能。
此后,与之前实施例所述类似,加法器1204对数据寻址地址1212和基地址寄存器值变化步长1330相加,即可得到下一次执行该数据访问指令时可能的数据寻址地址1214。这样,采用过滤器1332能更早计算出基地址寄存器值变化步长,使得在第一次执行某条数据访问指令时就能推算出第二次执行该数据访问指令时的数据寻址地址。之后的操作在此不再说明。
采用上述实施例计算基地址寄存器值变化步长的方法,可以在得到基地址寄存器值变化的步长之后,计算出下一次执行到某条数据访问指令时的数据寻址地址。此外,也可以在每次进行数据访问时除了将所需数据所在的数据行填充到数据读缓冲120中,预取下一数据行并填充到数据读缓冲120中,实现固定长度的数据预取。还可以对数据预测器1216做改进,使得在得到基地址寄存器值变化的步长后能计算出之后多次执行到某条数据访问指令时的多个数据寻址地址,从而预取更多的数据,进一步提高处理器性能。图14A是本发明所述 数据预测器的另一个实施例1400。为了便于描述,只显示了与本实施例说明相关的内容,省略了其他部分或部件。
在本实施例中,数据预测器1216中的过滤器1332和加法器1204与图13实施例中的相同,其中,过滤器1332的输入1424包括了图13实施例中过滤器1332的输入1304、1306、1308、1310和1336。不同之处在于,本实施例中增加了一个寄存器1402用于锁存加法器1204的输出,并用锁存值1410代替图12实施例中的数据寻址地址1214输出,且图12实施例中加法器1204的另一个输入就是来源于处理器核116的当前数据访问指令的数据寻址地址1212,而本实施例中加法器1204的另一个输入1412是经选择器1414从数据寻址地址1212和寄存器1402的锁存值1410中选择得到的值。
此外,本实施例中还增加了一个查找表1404和一个带锁存功能的计数模块1416。查找表1404可以根据输入向回转移的当前分支转移范围大小1406(即分支向回转移的指令条数或地址个数)及访问存储器的平均时延(即填充时延,Fill Latency)查找出对应该分支转移范围内所有数据访问指令的适合的数据预取次数,并将该次数送到计数模块1416,对该分支转移范围内的数据访问指令给予一个数据预取次数。计数模块1416根据填充器102送来的预取反馈信号进行计数,并输出相应的控制信号以控制锁存器1402。该预取反馈信号可以是表示填充器102对某一数据已经开始预取的信号,也可以是表示填充器102对某一数据已经预取完成的信号,还可以是其他任何合适的信号。
通常而言,根据访问存储器的平均时延可以确定在一次访问存储器所需的等待时间内可以执行多少条指令。当分支转移范围内的指令数大于对应一次访问存储器可以执行的指令数时,只需要在执行数据访问指令时对下一次数据寻址地址进行预取就可以掩盖访问存储器的时延;当分支转移范围内的指令数大于对应一次访问存储器可以执行的指令数的一半时,只需要在执行数据访问指令时对之后两次数据寻址地址进行预取就可以掩盖访问存储器的延时;其他情况可以依此类推。这样,只需要在查找表1404中存储了对应向回转移的当前分支转移范围不同大小的不同数据预取次数,就可以根据当前分支转移范围大小确定预取的次数。
图14B是计算数据预取次数的实施例1450。在本实施例中,线段1452表示填充时延的长度,弧线1454表示对于某个向回转移的分支转移而言,当分支转移成功发生时,两次执行同一条指令的时间间隔。如图14B所示,在本实施例中,访问一次存储器完成填充所花费的时间大于三次执行同一分支转移范围内的指令且小于四次执行这些指令所需的时间,因此若能在执行到向回转移的分支指令前,对该分支转移范围内的数据访问指令预取四次数据,就可以准备好 之后执行到该数据访问指令时所需的数据,从而完全掩盖数据访问指令因缓存缺失造成的等待。
当提取器1334审查到一条相关信息已经存储在轨道表110中的数据访问指令时,选择器1414选择从处理器核116来的数据寻址地址1212作为加法器1204的输入1412。这样,与图12实施例所述相同,加法器1204可计算得到下一次执行该数据访问指令时可能的数据寻址地址1418并被锁存后作为数据寻址地址1410的送往数据读缓冲120进行地址匹配,以确定该地址对应的数据是否已经存储在数据读缓冲120中,从而决定是否需要到数据存储器118中进行地址匹配及是否需要由填充器102对该数据寻址地址进行预取。该操作与之前实施例所述相同,在此不再说明。
查找表1404根据输入的当前分支转移范围大小1406输出需要预取的次数到计数模块1416。计数模块1416初始值为‘0’,每次接收到填充器102送来的反馈信号1408之后就增加‘1’,同时输出控制信号1420控制寄存器1402。选择器1414选择寄存器1402输出的数据寻址地址1410作为输出1412送到加法器1204。此时输入1210不变,因此加法器1204的输出就是在上次(即第一次)预测的数据寻址地址的基础上再增加一个基地址寄存器变化步长,从而得到新的(即第二次)预测的数据寻址地址。在控制信号1420的控制下该数据寻址地址被写入寄存器1402并输出作为数据寻址地址1410的送往数据读缓冲120进行地址匹配,以确定该地址对应的数据是否已经存储在数据读缓冲120中,从而决定是否需要到数据存储器118中进行地址匹配及是否需要由填充器102对该数据寻址地址进行预取。该操作与之前实施例所述相同,在此不再说明。
计数模块1416每次接收到填充器102送来的反馈信号1408之后就增加‘1’,直到其值等于查找表1404送来的预取次数,此时通过控制信号停止寄存器1402的写入操作,停止该过程。这样,总共产生了查找表1404输出的预取次数个数据寻址地址,预取了更多的数据。
之后提取器1334再次审查到该数据访问指令时,若之前预取的数据还存储在数据读缓冲120(或数据存储器118)中,则由于已经预取了多次数据,因此对于此次寄存器1402输出的多个数据寻址地址,只有最后一个数据寻址地址对应的数据可能不在数据读缓冲120(或数据存储器118)中,因此只需要预取一个数据即可。若之前预取的数据已经不存储在数据读缓冲120(或数据存储器118)中,则按之前实施例所述进行预取即可。
这样,可以对不同大小的分支转移范围给予不同的预取次数。例如,在访问存储器时延固定的情况下,分支转移范围比较大意味着两次该分支转移范围 内的同一条数据访问指令之间的间隔时间较长,因此可以用较少的预取次数掩盖访问存储器的时延;而分支转移范围比较小则意味着两次该分支转移范围内的同一条数据访问指令之间的间隔时间较短,因此需要用较多的预取次数掩盖访问存储器的时延。可以根据这个原则建立查找表1404。
采用上述实施例所述技术可以对位于循环内的数据访问指令的数据寻址地址进行预测,在再次执行这些指令前对预测地址对应的数据进行预取,从而减少因数据缺失导致的等待时间,提高处理器性能。还可以利用扫描器108对从指令存储器106存储到指令读缓冲112的指令进行审查,提前发现数据访问指令,提取出基地址寄存器号,在该数据访问指令执行前最后一次更新该基地址寄存器时就获取基地址寄存器值以计算该数据访问指令的数据寻址地址,从而在执行该数据访问指令前就对该数据寻址地址对应的数据进行预取,以掩盖因数据缺失导致的等待时间。
根据本发明技术方案,可以对存储到指令读缓冲112中的指令进行扫描分析,得到间接分支指令或数据访问指令的位置和最后更新该间接分支指令或数据访问指令所用的基地址寄存器值的指令的位置,从而计算出该最后更新基地址寄存器值的指令与该间接分支指令或数据访问指令之间的指令间隔数,并将该指令间隔数存储在该间接分支指令或数据访问指令的轨迹点中,用于确定计算数据寻址地址的时间点。图15A是本发明所述数据访问指令在轨道表中表项格式的实施例1500。对于间接分支指令而言,其格式也可与之类似,在本说明书中不再说明。
在本实施例中基地址信息存储器的表项格式只有一种,即对应数据访问指令的表项格式1502。表项格式1502可以包含一个装载/存储标志1504和一个数值1506。其中装载/存储标志1504是经扫描器108译码得到的指令类型,数值1506则存储了之前所述的指令间隔数。。例如,假设一个数据访问指令轨迹点位于轨道中的第7个表项点,而最后更新其基地址寄存器的指令的轨迹点位于该轨道中的第3个表项点,那么,对于该数据访问指令轨迹点而言,其数值1506的值为‘-4’。这样,当处理器核116送出的程序计数器的值比该数据访问指令的地址小4个指令地址时,该基地址寄存器的值被更新,此时即可计算数据寻址地址。
当到达计算数据寻址地址的时间点时,可以通过基地址寄存器值加上地址偏移量的方法计算出数据寻址地址。其中,地址偏移量作为立即数形式出现在指令中,因此可以从指令读缓冲112中直接获得,也可以在由扫描器108审查时提取并存储在轨道表110中,使用时再从轨道表110中获得。还可以通过任何其他合适的方法获得。
图15B是本发明所述确定计算数据寻址地址的时间点的一个实施例1550。对于间接分支指令而言,其实施方法也可与之类似,在本说明书中不再说明。
在本实施例中,轨道表110输出数据循迹器122读指针668指向的数据访问轨迹点中存储的指令间隔数1566送到加法器1554。加法器1554的另一个输入就是数据循迹器122读指针668的值,即数据访问指令所在的位置。加法器1554对指令间隔数1566和数据访问指令所在的位置相加就可以得到最后更新该基地址寄存器的指令的位置1568。该位置1568被送到比较器1556。比较器1556的另一个输入是处理器核116输出的指令地址1570,其比较结果被送的到寄存器1560以控制其值的更新。
此外,指令读缓冲112输出数据循迹器122读指针668指向的指令中的地址偏移量1574和基地址寄存器号1578。该基地址寄存器号被送到处理器核116获取对应的寄存器值1576,并将获取到寄存器值1576送到加法器1562;而该地址偏移量被直接送到加法器1562。这样,加法器1562可以计算产生数据寻址地址。
当位置1568的值与处理器核116输出的指令地址1570相等时,表示对应基地址寄存器的值正在(或已经)被更新,此时加法器1562计算结果就是该数据访问指令所需的数据寻址地址,该数据寻址地址被写入寄存器1560。
预测模块1564用于根据本次数据寻址地址及基地址寄存器值变化步长计算下一次数据寻址地址1214,其具体实现可以是之前实施例所述的任何一种合适的方案,在此不再说明。这样,寄存器1560的输出1572就是被送到数据读缓冲120(或数据存储器118)的本次数据寻址地址,而预测模块1564的输出1214就是送到数据读缓冲120(或数据存储器118)的预测数据寻址地址。
此外,由于事先计算了基地址寄存器值更新的时间点,并由指令读缓冲112事先提供了基地址寄存器号和地址偏移量,该时间提前量有可能比较大,即在处理器核116实际执行到对应数据访问指令之前,有可能已经对多条即将执行的数据访问指令都计算了上述时间点并提供了上述基地址寄存器号和地址偏移量。因此可以增加一个缓冲1558,用于暂存上述时间点、基地址寄存器号和地址偏移量等信息,依次在到达各条数据访问指令对应基地址寄存器值更新的时间点上计算数据寻址地址和预测数据寻址地址。
需要注意的是,正如在本实施例开头所述,也可以采用同样的技术方案对间接分支指令的分支目标地址进行计算,从而实现间接分支指令的分支目标指令预取。
与之前实施例中所述间接寻址分支指令的基地址寄存器值的获取方法类 似,数据访问指令的基地址寄存器的值也是经处理器核116计算产生并存储在处理器核116内部的寄存器中。根据本发明技术方案,也可以用与之前实施例所述类似的途径获得基地址寄存器值,如:通过处理器核116中寄存器额外的读端口获得、采用时分复用读口的方式从处理器核116中寄存器获得、通过处理器核116中的旁路(bypass)路径获得、或通过一个专供数据预取使用的额外寄存器堆获得。
现有处理器体系结构中一般由运算单元计算产生基地址寄存器值。在通常结构中,寄存器堆中存储了包含基地址寄存器在内的各个寄存器的值。寄存器堆输出的寄存器值或其他来源的数值构成处理器核中运算单元的一个输入值,而寄存器堆输出的寄存器值或其他来源的数值构成运算单元的一个输入值。运算单元对两个输入值进行运算并将结果写回寄存器堆。为了便于说明,本实施例以运算单元有两个输入和一个输出为例,对于更多或更少输入及更多输出的情况也类似。在这里,寄存器堆输出的两个寄存器值可以是同一个寄存器的值,也可以是不同寄存器的值。而运算结果可以写回与这两个寄存器值来源相同的寄存器,也可以写回不同的寄存器。
图16A是本发明所述通过寄存器额外的读端口获得基地址寄存器值的实施例1600。在本实施例中,运算单元1604对输入值1606和1608进行运算并将结果1610写回寄存器堆1622的过程与通常处理器体系结构相同。不同的是,寄存器堆1622比寄存器堆1602多一个读端口1624,这样,当到达计算数据寻址地址的时间点时就可以通过该额外的读端口将对应的基地址寄存器值经读端口1624读出,以计算数据寻址地址。
图16B是本发明所述采用时分复用的方式获得基地址寄存器值的实施例1620。在本实施例中,运算单元1604对输入值1606和1608进行运算并将结果1610写回寄存器堆1602的过程与通常处理器体系结构相同。不同的是,寄存器堆1602的输出1606、1608还被送到选择器1642经选择后作为基地址寄存器值1644输出。这样,当基地址寄存器值更新完成后,若运算单元1604对应之后指令的操作数输入中至少有一个非来源于寄存器堆1602,则由输入值对应的寄存器读端口输出该基地址寄存器值,或若至少有一个输入就是该基地址寄存器的值,则寄存器值1616或1618就是该基地址寄存器的值。可以经选择器1642选择该基地址寄存器值作为输出1644,以计算数据寻址地址。
图16C是本发明所述通过旁路路径获得基地址寄存器值的实施例1640。在本实施例中,运算单元1604对输入值1606和1608进行运算并将结果1610写回寄存器堆1602的过程与通常处理器体系结构相同。不同的是,运算结果1610不但被写回寄存器堆1602,还被通过旁路路径1662送出。这样,当运算单元 1604当前正在进行更新基地址寄存器值的运算时,其运算结果就是更新后的基地址寄存器值,因此通过旁路路径1662送出的值就是所需的基地址寄存器值,从而用于计算数据寻址地址。此旁路方法需要知道运算结果1610出现的正确时间点。
图16D是本发明所述通过专供数据预取使用的额外寄存器堆获得基地址寄存器值的实施例1660。在本实施例中,运算单元1604对输入值1606和1608进行运算并将结果1610写回寄存器堆1602的过程与通常处理器体系结构相同。不同的是,本实施例中增加了一个额外的寄存器堆1682。寄存器堆1682中包含了寄存器堆1602中全部基地址寄存器的值,是寄存器堆1602的影子(shadow)寄存器堆。所有对寄存器堆1602中基地址寄存器的写入值都会被同时写入寄存器堆1682的对应寄存器中。这样,凡是对寄存器堆1602中基地址寄存器的更新操作都会反映到寄存器堆1682中。因此,当到达计算数据寻址地址的时间点时,可以从寄存器堆1682中读出该基地址寄存器值1684,以计算数据寻址地址。在物理实现上,寄存器堆1682可以位于处理器核内或处理器核外的任何合适的位置。
根据本发明所述技术方案,当处理器核116执行数据访问指令时,首先在数据读缓冲120中查找所需数据,若该数据不存在,则再到数据存储器118中查找。数据存储器118中存储的则是替换出数据读缓冲120的数据。图17是本发明所述带有数据读缓冲的数据预取实施例1700。为了便于说明,在图17中只显示了与本实施例说明相关的内容,省略了其他部分或部件。
在图17中,数据存储器118和数据读缓冲120的主体部分都由存储地址标签的存储器和存储数据内容的存储器构成。其中,存储器1704和1706是随机访问存储器,用于存储处理器核116可能需要访问的数据。存储器1704和1706都被划分为多个数据存储块,每个数据存储块可以存储至少一个数据,或更多的连续数据(即数据块)。存储器1708和1710是内容寻址存储器,用于存储上述数据存储块对应的地址信息。所述地址信息可以是数据存储块中存储的数据块的起始地址,也可以是该起始地址的一部分(如高位部分),还可以是其他任何合适的地址信息。
存储器1708和1710也被划分为多个标签存储块,每个标签存储块存储了一个地址信息。存储器1708中的标签存储块与存储器1704中的数据存储块一一对应,而存储器1710中的标签存储块与存储器1706中的数据存储块一一对应。这样,通过对存储器1708中的地址信息进行匹配,就能找到存储器1704 中对应的数据存储块,而通过对存储器1710中的地址信息进行匹配,就能找到存储器1706中对应的数据存储块。
在本实施例中,选择器1714的一个输入为存储器1704输出的数据块1732,另一个输入为预取来的数据块1734,选择信号为数据存储器118中地址匹配的结果,输出为送往选择器1730的数据块1736。对于选择器1714而言,若送到数据存储器118进行匹配的地址1744匹配成功,则选择存储器1704输出的数据块1732作为输出数据块1736,否则选择预取来的数据块1734作为输出数据块1736。
选择器1730的一个输入为选择器1714的输出数据块1736,另一个输入为处理器核116送来的用于存储操作的数据1718,选择信号为表示当前操作是否为存储操作的信号,输出为送往存储器1706的数据块1738。对于选择器1730而言,若当前为存储操作,则选择处理器核116送来的数据1718作为输出数据块1738,否则选择选择器1714输出的数据块1736作为输出数据块1738。
此外,在本实施例中,数据填充单元1742用于产生预取的数据寻址地址,可以是之前实施例所述的数据预测器1216,也可以是任何其他合适的数据寻址地址预测模块。
当数据填充单元1742输出一个用于预取的数据寻址地址1712时,数据寻址地址1712先被送到选择器1720经选择后作为寻址地址1722在数据读缓冲120中的标签存储器1710进行地址信息的匹配。若匹配成功,则地址1712对应的数据已经存储在数据读缓冲120的存储器1706中,不需要预取。若匹配不成功,则将该地址作为输出地址1744送到数据存储器118中的标签存储器1708进行地址信息的匹配。同样地,若匹配成功,则地址1744对应的数据已经存储在数据存储器118的存储器1704中,不需要预取,而是从存储器1704中读出包含该数据在内的数据块并经选择器1714及选择器1730选择后写入存储器1706,使得该数据存储在数据读缓冲120中。若匹配不成功,则将该地址作为输出地址1716送往填充器102进行预取,并在数据读缓冲120中分配一个可用的数据块存储位置及对应的地址信息存储位置。
若数据读缓冲120已满,则可以根据一定的替换策略将某个数据块及其相应地址信息移出数据读缓冲120并通过总线1740存入数据存储器118中。同样地,若数据存储器118已满,则可以根据一定的替换策略将某个数据块及其相应地址信息移出数据存储器118并通过总线1732送到填充器102写回主存储器。所述替换策略可以是最近最少使用(LRU)替换策略、最少频繁使用(LFU)替换策略或其他任何合适的替换策略。
预取来的包含该数据在内的数据块1734经选择器1714及选择器1730选择后直接写入存储器1706中所述分配的位置,使得该数据存储在数据读缓冲120中。这样,经预测得到的数据寻址地址对应的数据都被存放在数据读缓冲120中供处理器核116执行数据访问指令时读/写。
当执行数据装载指令时,可以根据处理器核116送出的数据寻址地址1724经选择器1720选择后作为寻址地址1722在数据读缓冲120中进行匹配,若匹配成功,即该指令对应的数据已经存储在数据读缓冲120中,则可以找到相应的数据块,并由数据寻址地址1724的低位从输出的该数据块1726中选出所需数据1728以完成数据装载操作。若匹配不成功,即该指令对应的数据尚未存储在数据读缓冲120中,则将该地址作为输出地址1744送到数据存储器118中的标签存储器1708进行地址信息的匹配。若匹配成功,则从存储器1704中读出包含该数据在内的数据块并经选择器1714及选择器1730选择后写入存储器1706,同时将其作为数据块1726送往处理器核116,并由数据寻址地址1724的低位从中选出所需数据1728以完成数据装载操作。若匹配不成功,则将该地址作为输出地址1716送往填充器102进行预取,预取来的包含该数据在内的数据块1734经选择器1714及选择器1730选择后直接写入存储器1706中,并作为数据块1726送往处理器核116,并由数据寻址地址1724的低位从中选出所需数据1728以完成数据装载操作。根据本发明技术方案,该数据尚未存储在数据读缓冲120中的原因可以是之前的数据寻址地址预测错误(即尚未预取该数据),也可以是该数据已被替换出数据读缓冲120,还可以是其他任何合适的原因。
当执行数据存储指令时,可以根据处理器核116送出的数据寻址地址1724经选择器1720选择后作为寻址地址1722在数据读缓冲120中进行匹配。若匹配成功,即该指令对应的数据已经存储在数据读缓冲120中,则可以根据匹配结果确定该数据在存储器1706中的位置,从而将处理器核116送出的数据1718经选择器1730选择后写入存储器1706中以完成数据存储操作。若匹配不成功,即该指令对应的数据尚未存储在数据读缓冲120中,则在数据读缓冲120中分配一个可用的数据块存储位置及对应的地址信息存储位置,并将处理器核116送出的数据1718经选择器1730选择后写入存储器1706中以完成数据存储操作。
这样,最新预取来的数据都被存储在数据读缓冲120中供处理器核116访问,只有从数据读缓冲120中替换出的数据才被存储到数据存储器118中。在实际应用中,数据读缓冲120的容量可以比较小,以支持处理器核116的快速访问,而数据存储器118的容量可以比较大,以容纳更多处理器核116可能访问的数据。此外,由于处理器核116即将访问的数据大多被存储在数据读缓冲120中,因此可以减少对数据存储器118的访问次数,从而降低功耗。
图18A是根据本发明所述技术方案进行指令和数据预取的实施例1800。在本实施例中,填充器102、扫描器108、主动表104、微型主动表1802、指令存储器106、指令读缓冲112、数据存储器118、数据读缓冲120和处理器核116与之前实施例相同,指令循迹器114和数据循迹器122也与之前实施例中的类似。数据预测单元1332则与图13实施例中基地址寄存器值变化步长过滤器具有同样的结构。此外,为了便于显示,在本实施例中省略了图15B中用于判断基地址寄存器值更新时间点的模块。
在本实施例中,指令存储器106的每个存储块含有2个地址连续的指令块;其中每个指令块包含8条指令(8instructions),每条指令含4个字节(Byte)。指令读缓冲112包含了复数个独立的指令块;它们的指令地址可以是连续的,或不连续的;每一块都与轨道表110中的一条轨道相对应。轨道表110由匹配器536、分支指令类型存储器1808、数据访问指令类型存储器1810、轨迹点存储单元1812和1814构成。其中,匹配器536的结构与图11A中匹配器的结构相同,轨迹点存储单元1812存储的轨迹点包含了分支指令相关的信息,如:分支目标第一地址、分支目标第二地址和最后更新间接分支指令的寄存器的指令的位置信息(即指令间隔数),而轨迹点存储单元1814存储的轨迹点则包含了数据访问指令相关的信息,如最后更新数据访问指令的寄存器的指令的位置信息(即指令间隔数)。根据具体实现的不同,轨迹点存储单元1812和1814可以是属于同一个轨道表的两个独立的存储器,也可以是同一个存储器。为便于描述,在本实施例中以轨迹点存储单元1812和1814是各自独立的存储器为例进行说明。
在本实施例中,处理器核116同时从指令读缓冲112获取顺序执行下一指令1804和从指令存储器106获取分支目标指令1806。处理器核116可以根据分支指令执行结果从顺序执行下一指令1804和分支目标指令1806中选择正确的指令作为后续执行的指令。在本实施例中,指令读缓冲112是具有双输出端口的存储器。指令读缓冲112在指令循迹器114第一地址读指针614和指令地址高位(如图11A实施例中的指令地址1119)的共同作用下找到一个指令块,并根据处理器核116输出的指令地址的低位1824从该指令块中选择至少一条指令,从第一输出端口通过总线1804送往处理器核116;指令读缓冲112还根据指令循迹器114的第一地址读指针614和数据循迹器122的读指针668共同寻址从第二输出端口通过总线1832输出包含在指令中的基地址寄存器号和地址偏移量。在本实施例中,数据循迹器122的读指针668可以停留在间接分支轨迹点或数据访问轨迹点,因此这里的地址偏移量可以是间接分支指令用于计算分支目标地址的偏移量,也可以是数据访问指令用于计算数据寻址地址的偏移量。
根据本发明技术方案,过滤器1332通过接收处理器核116正在执行的指令实现对基地址寄存器值变化步长的过滤。在本实施例中,当分支转移成功发生时,选择指令1806送到过滤器1332,否则选择指令1804送到过滤器1332。这样,指令1806和1804经选择后被送到过滤器1332,并按之前实施例所述方法更新过滤器1332内部寄存器堆的值。过滤器1332还接收通过总线1832送来的基地址寄存器号,用于从其内部寄存器堆中选出所需的内容(即基地址寄存器值的变化步长)。此外,如图15B实施例所述,通过总线1832送来的基地址寄存器号还被送往处理器核116用于获取对应基地址寄存器值,通过总线1832送来的地址偏移量还被送往加法器1836计算间接分支指令的分支目标地址或数据访问指令的数据寻址地址。
下面将以图18B为例进行具体说明。图18B是根据本发明技术方案对指令块操作的一个实施例1850。在图18B中显示了存储在轨道表110中的两条轨道、存储在指令读缓冲112中的对应的两个指令块以及分别存储在分支指令类型存储器1808和数据访问指令类型存储器1810的对应指令类型。
轨道1860对应的轨道号为‘0’(即BNX0),其第2个轨迹点是一条直接分支指令,第6个轨迹点是一条数据访问指令,结束轨迹点1864中存储的顺序执行下一指令块对应的轨道号为‘3’(即BNX3)。轨道1860对应的指令块1868中的第6条指令可以提供该数据访问指令用到的基地址寄存器号和偏移量。相应地,在分支指令类型行1852中,第2条指令的对应指令类型为‘1’,表示这是一条分支指令(在本实施例中该分支指令的分支目标指令对应第7号轨道的第2个轨迹点),其他位置的指令类型为‘0’(为便于显示,在本实施例中没有显示指令类型中的‘0’),表示这些都不是分支指令;类似地,在数据访问指令类型行1856中,第6条指令对应的指令类型为‘1’,且分支指令类型1852的对应位置上的指令类型是‘0’,表示这是一条数据访问指令,其他位置的指令类型为‘0’,表示这些都不是数据访问指令。
轨道1862对应的轨道号为‘3’(即BNX3),其第2个轨迹点是一条间接分支指令,第6个轨迹点是一条数据访问指令,结束轨迹点1864中存储了顺序执行下一指令块对应的轨道号。轨道1862对应的指令块1870中的第2条指令可以提供对应的间接分支指令用到的基地址寄存器号和偏移量,第6条指令可以提供对应的数据访问指令用到的基地址寄存器号和偏移量。相应地,在分支指令类型行1854中,第2条指令的对应指令类型为‘1’,表示这是一条分支指令,其他位置的指令类型为‘0’(为便于显示,在本实施例中没有显示指令类型中的‘0’),表示这些都不是分支指令;在数据访问指令类型行1856中,第2条指令对应的指令类型为‘1’,由于分支指令类型1854的对应位置上的指令类型 也是‘1’,因此这是一条间接分支指令,而第6条指令对应的指令类型为‘1’,且分支指令类型1854的对应位置上的指令类型是‘0’,表示这是一条数据访问指令,其他位置的指令类型为‘0’,表示这些都不是数据访问指令。
这样,在轨道表110、指令类型存储器和指令读缓冲112中都存储了相应的信息,且指令块1868顺序执行的下一指令块就是指令块1870。下面将在图18A实施例中根据图18B中的例子对相关操作进行说明。本实施例中指令循迹器114的读指针停止在处理器核116正在执行的当前指令之后的第二个分支轨迹点处(结束轨迹点也被视为分支轨迹点)。
指令循迹器114从轨迹点‘00’(即第0号轨道的第0号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘0’)开始运行,指令循迹器114移动第二地址读指针616指向并停止在轨迹点‘02’(即第0号轨道的第2号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘2’)。根据指令循迹器114读指针的寻址,从轨道表中读出分支目标指令轨迹点位置‘75’(即第7号轨道的第5个轨迹点)并存储在寄存器1818中,同时以该轨迹点位置‘75’对指令存储器106进行寻址,从而通过总线1806将第7号轨道对应的指令块从指令存储器106中读出。
同时,数据循迹器122的读指针668在指令循迹器114第一地址读指针614指向的轨道上从第‘0’号轨迹点(即轨迹点‘00’)开始移动并停止在轨迹点‘06’(即第0号轨道的第6号轨迹点,此时指令循迹器114第一地址读指针614值为‘0’,数据循迹器122读指针668的值为‘6’)。根据数据循迹器读指针668的寻址,从轨道表110中读出指令间隔数‘-2’、从指令读缓冲112中读出基地址寄存器号和存储器访问偏移量,并将该基地址寄存器号送往处理器核116以获取基地址寄存器值,将该偏移量通过总线1832送到加法器1836。当程序计数器到达轨迹点‘04’(该轨迹点位置值由数据循迹器读指针668的值‘06’与指令间隔数‘-2’相加得到)对应的指令时,将处理器核116送出的基地址寄存器值1834作为加法器1836的另一个输入,从而计算产生数据寻址地址1838。该数据寻址地址1838经选择器选择后被送到数据读缓冲120的标签存储器中进行匹配。如果在数据读缓冲120中匹配不成功,数据寻址地址1838被进一步送到数据存储器118进行地址匹配。若在数据存储器118中匹配不成功,则将该数据寻址地址1838送到填充器102进行数据块预取。从外部存储器获取来的对应数据块被存储在数据读缓冲120中。如果在数据存储器118中匹配成功,则将对应数据块从数据存储器118读出并存储到数据读缓冲120中。如果在数据读缓冲120中匹配成功,则不需要进行任何操作。这样,数据读缓冲120中可以在处理器核116对所需数据进行访问之前准备好这些数据,供处理器核116送 出的数据寻址地址1840寻址。此外,按之前实施例所述,可以通过加法器1204计算产生预测的数据寻址地址1214用于数据预取操作。当轨迹点‘06’对应的数据访问指令执行完毕后(或将该数据访问指令对应的信息从轨道表110和指令读缓冲112存储到如图15B中的缓冲1558后),数据循迹器122读指针668移动到结束轨迹点‘08’(即第0号轨道的结束轨迹点,此时指令循迹器114的第一地址读指针614值为‘0’,数据循迹器122的读指针668值为‘8’)。
与此同时,指令循迹器114继续移动直至结束轨迹点‘08’,根据读出的轨道号‘3’直接将指令循迹器114的读指针指向轨迹点‘30’(即第3号轨道的第0号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘0’)。之后指令循迹器114进一步移动读指针停止在轨迹点‘32’(即第3号轨道的第2号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘2’)。当指令循迹器114的读指针指向轨迹点‘30’时,数据循迹器122的读指针668的值被重置为‘0’。由于此时指令循迹器114的第一地址读指针614值为‘3’,因此数据循迹器122的读指针668指向轨迹点‘30’并开始移动,直到也停止在轨迹点‘32’。
如果轨迹点‘02’对应的分支转移成功发生,那么处理器核116选择分支目标指令1806作为下一执行的指令。寄存器1818中存储的内容被更新到寄存器606和寄存器676中。此时,第一地址读指针614值为‘7’,第二地址读指针616的值为‘5’,指令循迹器114开始在第7号轨道上移动并从第5个轨迹点开始寻找下一个分支轨迹点。同时,数据循迹器122也从轨迹点‘75’开始在第7号轨道上移动并寻找下一个数据访问轨迹点。
如果轨迹点‘02’对应的分支转移不成功,指令循迹器114的第一读指针614和第二读指针616停留在分支轨迹点‘32’。此时,从轨道表110中可以读出指令间隔数‘-1’和基地址寄存器号。该基地址寄存器号被送到处理器核116以获取基地址寄存器值。此外还可以通过总线1832从指令读缓冲112中读出间接分支偏移量并送到加法器1836。当程序计数器到达轨迹点‘31’(该轨迹点位置值由指令循迹器读指针616的值‘32’与指令间隔数‘-1’相加得到)对应的指令时,将处理器核116送出的基地址寄存器值1834作为加法器1836的另一个输入,计算产生间接分支的分支目标地址1838。
该分支目标地址1838被送到主动表104进行匹配。需要说明的是,选择器1842仅在此时选择分支目标地址1838作为输出送往主动表104(或微型主动表1802)进行匹配(通过对分支指令类型存储器1808和数据访问指令类型存储器1810中读出的类型值进行逻辑与操作,即可判断出该时间点),其他时间均选择来自扫描器108的分支目标地址作为输出送往主动表104(或微型主动表1802)。 若在主动表104中匹配不成功(即对应指令块尚未存储在指令存储器106中),则由主动表104分配一个新的块号(BNX),并将该分支目标地址1838送到填充器102,从外部存储器获取该指令块并根据上述分配的块号填充指令存储器106。若在主动表104中匹配成功,则从主动表104中读出该地址对应的块号。
若该分支指令的分支转移没有发生,则指令循迹器114的读指针沿第3号轨道继续寻找下一个分支点,数据循迹器122的读指针也指向下一个数据访问轨迹点‘36’
若该分支指令的分支转移成功发生,前述块号不被填入轨道表110,而直接被旁路写入循迹器的相应寄存器(如指令循迹器114中的寄存器606和数据循迹器122中的寄存器676)中以更新指令循迹器114的读指针和数据循迹器122的读指针。更新后的指令循迹器114的第一地址读指针614被送到匹配器536中进行匹配,若在匹配器536中匹配成功,则该块号对应的轨道已在轨道表110,指令块已在指令读缓冲112中。若在匹配器536中匹配不成功,则表示轨道表110中尚未建立该块号对应的轨道,需要将该块号对应的指令从指令存储器106填充到指令读缓冲112中,并在轨道表110中建立该分支目标指令块对应的轨道。由指令循迹器114第一地址读指针614指出的该轨道中的由指令循迹器114第二地址读指针616指出的指令轨迹点及被数据循迹器122读指针668指出的数据轨迹点被从轨道表110中读出。指令循迹器114的读指针与数据循迹器122的读指针由此点出发分别移向下一个分支点以及下一个数据点。
后续操作与之前实施例所述相同,在此不再说明。
图19A是根据本发明所述技术方案进行指令和数据预取的另一个实施例1900。为了简明起见,图19A中没有显示处理器核116输出的程序计数器等总线,相关说明可见之前实施例。在本实施例中,填充器102、扫描器108、主动表104、微型主动表1802、指令存储器106、数据存储器118、数据读缓冲120、数据预测单元1332和处理器核116与图18A实施例相同。不同之处在于,在本实施例中,循迹器1902实现了指令循迹器114及数据循迹器122的功能,而轨道表110中的结构也做了相应的变化。循迹器1902中的选择器1926受当前读指针指向的指令类型控制。当该分支指令为间接分支指令或数据访问指令时,选择器1926选择第一地址读指针614的值作为输出1924,否则选择器1926选择存储在寄存器1818中的分支目标轨迹点信息作为输出1924。这样,当该指令是间接分支指令或数据访问指令时,所述分支目标轨迹点信息被强制置为该间接分支指令或数据访问指令的轨迹点位置信息,从而使指令读缓冲112能输出该间接分支指令或分支访问指令的基地址寄存器号和地址偏移量。这里的地址偏移量可以是间接分支指令用于计算分支目标地址的偏移量或数据访问指令用于计算数据地址的偏移量。
在本实施例中,轨道表110中只有一个指令类型存储单元550,其中存储了分支指令及数据访问指令的指令类型。轨迹点存储单元1904中同时包含了分支轨迹点和数据访问轨迹点。匹配器536的结构与图11B中匹配器的结构相同。
此外,指令读缓冲112的结构与图11B实施例中的相同,可以同时通过总线1804从第一输出端口提供当前指令块,并通过总线1806从第二输出端口提供目标指令块以及用于提前进行间接分支目标地址或数据寻址地址计算的基地址寄存器号和地址偏移量。
下面以图19B为例进行具体说明。图19B是根据本发明技术方案对指令块操作的一个实施例1950。在图19B中,轨道1860和1862与图18B中的轨道1860和1862相同,指令块1868和1870与图18B中的指令块1868和1870相同。不同的是,本实施例中的指令类型行1952和1954不但包含了分支指令类型信息,也包含了数据访问指令类型信息。其中,指令类型行1952中对应第2条指令的类型信息为‘10’,表示该指令为一条直接分支指令,对应第6条指令的类型信息为‘01’表示该指令为一条数据访问指令;指令类型行1954中对应第2条指令的类型信息为‘11’,表示该指令为一条间接分支指令,对应第6条指令的类型信息为‘01’表示该指令为一条数据访问指令;指令类型行1952和1954其他位置的指令类型均为‘00’(为便于显示,在本实施例中没有显示指令类型中的‘00’),表示这些指令都不是分支指令或数据访问指令。下面将在图19A实施例中根据图19B中的例子对相关操作进行说明。
循迹器1902从轨迹点‘00’(即第0号轨道的第0号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘0’,对应的指令类型为
‘00’,表示该指令不是分支指令也不是数据访问指令)开始移动,并停止在轨迹点‘02’(即第0号轨道的第2号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘2’,对应的指令类型为‘10’,表示该指令是直接分支指令)。根据指令循迹器1902读指针的寻址,从轨道表中读出分支目标指令轨迹点位置‘75’(即第7号轨道的第5个轨迹点)并存储在寄存器1818中,同时以该轨迹点位置‘75’中的第一地址‘7’送往匹配器536进行块号匹配。
若在匹配器536中匹配成功,则能找到第7号轨道,并通过总线1806从指令读缓冲112中读出包含分支目标指令在内的对应第7号轨道的指令块。
若在匹配器536中匹配不成功,该分支目标块号被送到指令存储器106寻址,读出包含分支目标指令在内的对应指令块,并按之前实施例所述方法存储到指令读缓冲112中,再通过总线1806送往处理器核116。
循迹器1902继续移动并停止在轨迹点‘06’(即第0号轨道的第6号轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针616的值为‘6’,对应的指令类型为‘01’,表示该指令是数据访问指令)。根据第二地址读指针616的寻址,从轨道表110中读出指令间隔数‘-2’、通过总线1806从指令读缓冲112中读出基地址寄存器号1908和存储器访问地址偏移量1910并送往装置1904。装置1904包含了图15B实施例中加法器1554、缓冲1558、比较器1556的功能,能接收轨道表110送来的指令间隔数1906、计算并存储最后更新基地址寄存器的指令的位置,接收并存储指令读缓冲112送来的基地址寄存器号1908和地址偏移量1910,并判断是否已经到达基地址寄存器值更新的时间点。装置1904将最先接收到的基地址寄存器号1908送往处理器核116以获取基地址寄存器值送到加法器1836,并将对应的地址偏移量1910也送到加法器1836。当该基地址寄存器号和地址偏移量对应的数据访问指令的数据预取完成后,从缓冲1558中删除该基地址寄存器号和地址偏移量,进而对下一组基地址寄存器号和地址偏移量进行如上操作,之后依此类推。这样,循迹器1902不需要等到该数据访问指令执行完,即可继续移动。当程序计数器到达轨迹点‘04’(该轨迹点位置值由第二地址读指针616的值‘06’与指令间隔数‘-2’相加得到)对应的指令时,将处理器核116送出的基地址寄存器值1834作为加法器1836的另一个输入,从而计算产生数据寻址地址1838。如图18A实施例所述,在数据读缓冲120中存储地址1838的相应数据,以供处理器核116根据送出的数据寻址地址1840取数据。此外,按之前实施例所述,可以通过加法器1204计算产生预测的数据寻址地址1214用于数据预取操作。
然后,循迹器1902继续移动直至位于位置‘08’(即第0号轨道的结束轨迹点,此时第一地址读指针614值为‘0’,第二地址读指针614值为‘8’)的结束轨迹点,根据读出的轨道号‘3’直接将循迹器1902的读指针指向轨迹点‘30’(即第3号轨道的第0号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘0’,对应的指令类型为‘00’,表示该指令不是分支指令也不是数据访问指令)。之后循迹器1902进一步移动读指针停止在轨迹点‘32’(即第3号轨道的第2号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘2’,对应的指令类型为‘11’,表示该指令是间接分支指令)。此时,从轨道表110中可以读出指令间隔数‘-1’和基地址寄存器号并存储在缓冲1558中。该基地址寄存器号被送到处理器核116以获取基地址寄存器值。此外还可以通过总线1832从指令读缓冲112中读出间接分支偏移量存储在缓冲1558中,并作为缓冲1558的输出送到加法器1836。
如果轨迹点‘02’对应的分支转移成功发生,目标指令块1806被写入指令 读缓冲112内可被置换的指令存储块中,并将轨道号‘7’存储在匹配器536中与指令读缓冲112中该指令存储块对应的位置中,同时寄存器1818中存储的内容被更新到寄存器606中。此时,第一地址读指针614值为‘7’,第二地址读指针616的值为‘5’,循迹器1902开始在第7号轨道上移动并从第5个轨迹点开始寻找下一个分支轨迹点或数据访问轨迹点。
如果轨迹点‘02’对应的分支转移不成功,则循迹器1902读指针继续移动直到停留在下一个数据访问轨迹点‘36’(即第3号轨道的第6号轨迹点,此时第一地址读指针614值为‘3’,第二地址读指针616的值为‘6’,对应的指令类型为‘01’,表示该指令是数据访问指令)。当程序计数器到达轨迹点‘31’(该轨迹点位置值由第二地址读指针616的值‘32’与指令间隔数‘-1’相加得到)对应的指令时,将处理器核116送出的基地址寄存器值1834作为加法器1836的另一个输入,从而计算产生间接分支的分支目标地址1838。
该分支目标地址1838被送到主动表104进行匹配。与图18A实施例相同,选择器1842仅在此时选择分支目标地址1838作为输出送往主动表(或微型主动表)进行匹配,其他时间均选择来自扫描器108的分支目标地址作为输出送往主动表(或微型主动表)。若在主动表104中匹配不成功(即对应指令块尚未存储在指令存储器106中),则由主动表104分配一个新的块号(BNX),并将该分支目标地址1838送到填充器102,从外部存储器获取该指令块并根据上述分配的块号填充指令存储器106。若在主动表104中匹配成功,则从主动表104中读出该地址对应的块号。
若该分支指令的分支转移没有发生,则循迹器1902的读指针停留在数据访问轨迹点‘36’等待该指令对应的基地址寄存器值更新。后续操作与之前所述相同,在此不再说明。
若该分支指令的分支转移成功发生,前述该块号被送到匹配器536中进行匹配,若在匹配器536中匹配不成功,则表示轨道表110中尚未建立该块号对应的轨道,需要将该块号对应的指令从指令存储器106填充到指令读缓冲112中,并在轨道表110中建立该分支目标指令块对应的轨道。该块号不填入轨道表110,而直接被旁路写入循迹器1902的相应寄存器606中以更新循迹器1902的读指针。后续操作与之前所述相同,在此不再说明。
需要注意的是,图18A、图18B、图19A及图19B的相关说明只是为了阐述本发明技术方案的若干具体实施例。除此以外,根据本发明的技术方案和构思,可以对该具体实施例作出相应的改动。例如。可以将结束轨迹点视为分支转移必定发生的分支轨迹点,且当结束轨迹点是当前指令之后的第二个分支轨迹点时,指令循迹器114或循迹器1902的读指针可以停留并指向该结束轨迹点, 直至第一个分支轨迹点执行完毕为止。根据本发明技术方案和构思,还可以有其他任何合适的改动。对于本领域普通技术人员来说,所有这些替换、调整和改进都应属于本发明所附权利要求的保护范围。
根据本发明技术方案,在主动表104(或微型主动表126)中对指令的地址信息进行匹配以确定所需指令是否已经存储在指令读缓冲112或指令存储器106中;在数据读缓冲120(或数据存储器118)的标签存储单元中对数据的地址信息(即数据地址)进行匹配(即用数据地址中的索引地址对各个标签地址存储器进行寻址,读出其中存储的标签地址并与数据地址中的标签地址进行匹配),以确定所需数据是否已经存储在数据读缓冲120(或数据存储器118)中。即指令块是按类似全相联的组织结构存储的,而数据块是按类似组相联的组织结构存储的。可以将主动表104(或微型主动表126)与所述标签存储单元合并为一个地址信息匹配单元,使得对指令和数据地址信息的匹配均能在该地址信息匹配单元中进行,实现一个同时兼容全相联与组相联的结构。图20A是本发明所述地址信息匹配单元的一个实施例2000。在本说明书中,为了便于描述,以寄存器作为地址信息匹配单元中地址信息的存储单元为例进行说明,也可以用任何其他合适的存储单元实现相应的功能。
在本实施例中,地址信息匹配单元2000包含用于地址译码的译码器2002、用于对比较结果编码的编码器2004,以及用于选择寄存器写指针2026及索引地址2028的选择器2020。此外,还包括用于存储地址信息的寄存器及每一个寄存器相应的比较器。
在本实施例中,写指针2026的值来源于自增器(如图2A实施例中的自增器218),用于指向下一个可用的指令块地址存储表项。索引地址2028是用于数据地址匹配的索引地址。选择器2020根据当前的操作类型选择写指针2026的值或索引地址2028作为地址输出送到译码器2002。具体地,当进行指令地址相关的操作时,选择器2020选择写指针2026的值作为地址输出;当进行数据地址相关的操作时,选择器2020选择索引地址2028作为地址输出。译码器2002对控制信号2018和输入的地址译码后向寄存器和比较器输出控制信号。在此,控制信号可以包括寄存器的写入使能信号和比较器的比较使能信号,以及其他任何合适的信号。
送到寄存器的输入地址2006是将被写入寄存器的地址,可以是指令地址或数据地址。送到比较器的匹配地址2012是用于与寄存器中存储的地址进行匹配的地址,可以是指令地址或数据地址。
编码器2004的输出2016是根据指令地址在所有存储指令地址的寄存器对 应的比较器中匹配得到的结果编码产生的指令块号(即第一地址,BNX)。而编码器2004的输出2014则是根据数据地址在索引地址对应的比较器中匹配得到的结果产生的命中信息,其产生方法可以是对这些比较器的输出做逻辑或操作。
为便于描述,在本实施例中,以地址信息匹配单元2000只包含2个寄存器和2个比较器为例进行说明,对于具有更多寄存器和比较器的情况,也可进行类似操作。此外,在本实施例中,地址信息匹配单元2000内用于存储行地址信息的寄存器及相应比较器与用于存储标签地址信息的寄存器及相应比较器都是固定的,因此译码器2002具有相应的固定结构,可以对输入的行号或索引地址进行译码以找到对应的寄存器及比较器,此时,编码器2004也具有相应的固定结构,可以对比较器的输出进行编码以产生对应的行号2016,以及匹配成功与否的信号2014。
当需要在地址信息匹配单元2000中建立新的行号/行地址匹配对时,根据替换策略(如之前实施例所述的主动表替换策略)确定可以被写入的位置作为写指针2026的值,并由选择器2020选择写指针2026的值作为输出送到译码器2002,而控制信号2018则被设置为允许寄存器被写入但不允许比较器进行匹配,则选择器2020的输出经译码器2002译码后选中一个寄存器(如:寄存器2010),并将该指令行地址作为输入地址2006写入该寄存器中。由此实现在主动表中表项建立的功能。
当需要在地址信息匹配单元2000中对计算得到的分支目标指令行地址匹配时,控制信号2018被设置为允许比较器进行匹配但不允许寄存器被写入,同时将该指令行地址作为匹配地址2012送到每个比较器,与相应寄存器输出的行地址比较,并将比较结果送到编码器2004经编码器2004编码后作为行号2016输出。由此实现在主动表中进行指令行地址匹配的功能。
当需要在地址信息匹配单元2000中写入数据地址的标签部分(即标签地址)时,控制信号2018则被设置为允许寄存器被写入但不允许比较器进行匹配,同时根据该数据地址的索引部分(即索引地址2028)经译码器2002译码后选中一个寄存器(如:寄存器2024),并将该标签地址作为输入地址2006写入该寄存器中。由此实现在标签存储单元中写入标签地址的功能。
当需要在地址信息匹配单元2000中匹配数据地址的标签部分(即标签地址)时,控制信号2018被设置为允许比较器进行匹配但不允许寄存器被写入,同时根据该数据地址对应的索引部分(即索引地址2028)经译码器2002译码后使能(Enable)一个比较器(如:比较器2022),其他未被译码选中的比较器都会输出未命中信号。并将该标签地址作为匹配地址2012送到所有比较器,只有经译 码使能的比较器会将其相应的寄存器内容与该标签地址值进行比较,并将比较结果(‘命中’或‘不命中’)送到编码器2004,并经编码器2004中的或逻辑将上述比较结果作为输出2014。由此实现在标签存储单元中匹配标签地址的功能。
当需要在地址信息匹配单元2000中读出某一行寄存器(如:寄存器2024)中存储的标签地址时,控制信号2018被设置为不允许比较器进行匹配且不允许寄存器被写入,同时选择器2020选择该寄存器的索引地址2028作为输出,经译码器2002译码后选中该寄存器,从而输出该寄存器中存储的标签地址值。由此实现在标签存储单元中标签地址读出的功能。
采用图20A实施例所述方法,可以实现固定结构的地址信息匹配单元。可以对该实施例进行改进,使得地址信息匹配单元中的寄存器能被配置为供行地址存储使用或供标签地址存储使用。图20B是本发明所述地址信息匹配单元中可配置寄存器的一个实施例2040。
在本实施例中,地址信息匹配单元中的寄存器及比较器被分为三个匹配模块2052、2054和2056,每个匹配模块至少包含一个寄存器及相应的比较器。地址信息配置模块2042中包含起始地址存储器2044、结束地址存储器2048、判决器2050、自增器2046和选择器2058。其中起始地址存储器2044和结束地址存储器2048中的表项一一对应,即一个起始地址表项对应一个结束地址表项。如图20A实施例所述,地址信息匹配单元中的每个寄存器都有一个地址,该地址可以由行号或索引地址映射得到。以确定这些寄存器中的哪些用于存储指令行地址为例,假设在匹配模块2052、2054和2056中有若干寄存器用于存储行地址,其中有些寄存器的地址是连续的,构成一组连续的寄存器组,而不同寄存器组之间的地址是不连续的。起始地址存储器2044中存储了每组所述寄存器组第一个寄存器的地址,而结束地址存储器2048中的对应表项则存储了该寄存器组之前的一个寄存器组中最后一个寄存器的地址。输入地址2060与结束地址存储器2048中的每个地址进行匹配,一旦匹配成功,则选择其始地址存储器2044中与该匹配成功表项对应的内容作为输出送到选择器2058。判决器2050具有逻辑或的功能,用于对结束地址存储器2048中所有地址的匹配结果做逻辑或操作,并将该逻辑或操作的结果作为控制信号送到选择器2058。
如图2A实施例所述,可以使用自增器产生的行号作为主动表中表项的写入地址,即按次序检查每个表项是否可以被写入(替换),如果该表项不可以被写入(替换),则经过自增器地址增一后到达下一表项。在本实施例的地址信息匹配单元中,可以通过将一个寄存器组最后一个寄存器的地址与下一寄存器组第一个寄存器的地址联系起来,在当前地址位于一个寄存器组最后一个寄存器时,能找到下一个寄存器组的第一个寄存器,从而实现类似主动表中地址增一的功 能。
具体地,当映射得到的寄存器地址2060指向一个寄存器组的非最后一个寄存器时,寄存器地址2060与结束地址存储器2048中的任何一个地址均不匹配;判决器2050输出表示匹配不成功的信号控制选择器2058选择自增器2046的输出,即选择对寄存器地址2060增一得到的新地址作为选择器2058的输出,从而实现地址增一,指向下一个寄存器。当映射得到的寄存器地址2060指向一个寄存器组的最后一个寄存器时,寄存器地址2060与结束地址存储器2048中的某个地址成功匹配,并将起始地址存储器2044中与该匹配成功表项对应的内容输出到选择器2058;判决器2050输出表示匹配成功的信号控制选择器2058选择起始地址存储器2044的输出,使得新的寄存器地址2060指向下一寄存器组的第一个寄存器。这样,在不连续的寄存器中实现了类似主动表中写指针移到下一个表项的功能。
特别地,可以将同一个匹配模块中的寄存器配置为全部用于存储指令地址或全部用于存储数据地址。在这种情况下,每个寄存器组的第一个寄存器的地址就是对应匹配模块中的第一个寄存器的地址,而每个寄存器组的最后一个寄存器的地址就是对应匹配模块中的最后一个寄存器的地址。由于此时每个寄存器组的起始地址和结束地址都是确定的,因此可以用一个译码器代替结束地址存储器2048和判决器2050,进一步简化地址信息配置模块2042。
图20C是本发明所述地址信息匹配单元的一个实施例2070。其中,地址信息配置模块2042采用不同的寄存器配置技术实现了图20B实施例中地址信息配置模块的相同功能。
在本实施例中,地址信息匹配单元中的寄存器及比较器被分为四个匹配模块2072、2074、2076和2078,分别对应于存储指令或数据的四个存储器2082、2084、2086和2088。可以通过配置,确定匹配模块2072、2074、2076和2078中的哪些寄存器用于存储指令行地址,哪些寄存器用于存储标签地址,并将存储器2082、2084、2086和2088中的相应位置用于存储指令或数据。
在本实施例中,与图20A实施例所述情况类似,送到各个匹配模块中寄存器的输入地址2006是将被写入寄存器的地址,可以是指令地址或数据地址。送到各个匹配模块中比较器的匹配地址2012是用于与寄存器中存储的地址进行匹配的地址,可以是指令地址或数据地址。
在本实施例的地址信息配置模块2042中不再使用自增器实现寄存器地址增一的操作,而使用加法器2094生成下一寄存器地址。存储匹配模块2092中存储了对应每个寄存器地址的地址增量,可以根据当前输入的寄存器地址2060输 出对应该地址的地址增量到加法器2094。与图20B实施例中所述的情况类似,在写指针2060没有指向寄存器组的最后一个寄存器时,加法器2094的一个输入为写指针2060的值,另一个输入为常数‘1’,从而实现写指针移到下一个寄存器的功能;当写2060指向寄存器组的最后一个寄存器时,加法器2094的一个输入为写指针2060的值,另一个输入为来自存储匹配模块2092的地址增量,加法器2094将寄存器地址2060与该地址增量相加得到新的寄存器地址2060。这样,就可以灵活地将各个匹配模块或匹配模块中的每个存储器配置为供行地址存储使用或供标签地址存储使用,从而实现图20B实施例中地址信息配置模块的功能。
当需要建立新的行号/行地址匹配并进行指令预取时,可以按上述方法找到下一个可用寄存器,将指令行地址作为输入地址2006存储在所述可用寄存器中,输出对应的行号2016,并在预取得到指令行后将该指令行通过总线2098存储在存储器2082、2084、2086和2088内对应的存储行中。由此实现在主动表中建立表项及预取指令行存储在指令存储器中的功能。
当需要对计算得到的分支目标指令行地址进行匹配时,将该指令行地址作为匹配地址2012送到匹配模块中的所有比较器,与相应寄存器输出的行地址比较,并将比较结果经编码后作为行号2016输出。由此实现在主动表中进行指令行地址匹配的功能。
当需要根据行号读出对应指令行内容时,由于匹配模块中的寄存器与存储器2082、2084、2086和2088中的存储行是一一对应的,因此可以根据该行号映射得到的寄存器地址2090的低位在存储器2082、2084、2086和2088中找到对应的存储行,读出这四个存储行的内容并由寄存器地址2090的高位选择后得到所需指令行。由此实现根据行号读出指令行内容的功能。
当需要根据数据地址读出对应数据行内容时,可以根据数据地址的索引部分(即索引地址)映射得到的寄存器地址2080在匹配模块2072、2074、2076和2078中找到对应的表项,并将数据地址中的标签部分(即标签地址)作为匹配地址2012与所有对应表项中存储的地址值匹配;同时根据寄存器地址2080在存储器2082、2084、2086和2088中找到对应的存储行,读出这四个存储行的内容并由数据地址的标签部分在匹配模块中的匹配结果2014,从这四个存储行的内容中进行选择。若标签地址匹配不成功,则表示数据缺失,需要从外部存储获取该数据行;若标签地址匹配成功,则表示数据命中,选出的数据行就是所需数据行。由此实现根据数据地址读出数据行的功能。
当需要向寄存器写入数据地址中的标签部分(即标签地址)及对应的数据 行时,根据数据地址中的索引部分(即索引地址)映射得到的寄存器地址2080选中匹配模块中的一个寄存器,将所述标签地址作为输入地址2006写入该寄存器中,并在预取得到数据行后将该数据行通过总线2098存储在存储器2082、2084、2086和2088内对应的存储行中。由此实现在标签存储单元中写入标签地址及预取数据行存储在数据存储器中的功能。
因此,指令存储器106和数据存储器118可以是同一个存储器,并通过地址信息匹配区分指令存储部分和数据存储部分。虽然在本说明书中仅该指令、数据共用一个存储器的技术应用于一级缓存的情况做了说明,将该技术应用于其他层次缓存的情况也类似。

Claims (34)

1.一种用于辅助处理器核运行的方法,所述处理器核连接一个包含可执行指令的第一指令存储器、一个包含数据的第一数据存储器、一个比第一指令存储器速度更快的第二指令存储器、一个比第二指令存储器速度更快的第三指令存储器、一个比第一数据存储器速度更快的第二数据存储器和一个比第二数据存储器速度更快的第三数据存储器;所述方法包括:
对正被从第二指令存储器填充到第三指令存储器的指令进行审查,从而提取出至少包括分支信息的指令信息,并生成每条数据访问指令对应的基地址寄存器值的变化步长;
根据提取出的指令信息建立复数条轨道;所述轨道含有复数个轨迹点,一个轨迹点含有至少一条指令的信息;
根据复数条轨道中的至少一条轨道将至少一条可能被处理器核执行的指令从第一指令存储器填充到第二指令存储器;
根据复数条轨道中的至少一条轨道将至少一条指令在被处理器核执行前从第二指令存储器填充到第三指令存储器,使得处理器核能从第三指令存储器获取所述至少一条指令;
在数据访问指令对应的轨迹点中存储该数据访问指令的基地址寄存器值或基地址寄存器号,用于计算数据寻址地址的变化步长,从而预测下一次执行该数据访问指令时可能的数据寻址地址;
所述预测下一次执行该数据访问指令时可能的数据寻址地址的方法是:根据基地址寄存器值的变化步长计算下次执行该数据访问指令时可能的数据寻址地址;其中:在得到基地址寄存器值的变化步长之后,计算出下一次执行到该数据访问指令时的数据寻址地址;或在得到基地址寄存器值的变化步长后计算出之后多次执行到该数据访问指令时的多个数据寻址地址;
根据计算得到的下次执行该数据访问指令时可能的数据寻址地址将第一数据存储器中的数据填充到第三数据存储器中;
将第三数据存储器中因内容替换而被移出第三数据存储器的数据存储在第二数据存储器中;并将第二数据存储器中因内容替换而被移出第二数据存储器的数据写回第一数据存储器。
2.根据权利要求1所述方法,其特征在于第一指令存储器和第一数据存储器是同一个存储器。
3.根据权利要求1所述方法,其特征在于所述复数条轨道中每一条轨道与第三指令存储器中的一个指令块对应。
4.根据权利要求1所述方法,其特征在于第二指令存储器和第三指令存储器均有输出寄存器,使得在保持输出值不变的情况下能进行新的存储器寻址。
5.根据权利要求1所述方法,其特征在于由扫描器对目标指令的地址进行判断,从而确定该目标指令是否属于第三指令存储器中的某个指令块。
6.根据权利要求1所述方法,其特征在于:
将所述复数条轨道组织为一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
所述轨道表表项的格式包括指令类型、第一地址和第二地址,结束轨迹点对应的表项格式包括指令类型、第一地址,结束轨迹点对应的第二地址为常数。
7.根据权利要求1所述方法,其特征在于:
将所述复数条轨道组织为一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
在轨道表外增加一个临时寄存器行用于存放正被建立的轨道的信息,使得整条轨道得以在建立完成后被一次写入轨道表。
8.根据权利要求1所述方法,其特征在于同一条轨道中的所有指令类型能够被一次读出。
9.根据权利要求8所述方法,其特征在于循迹器根据读出轨道中的指令类型,将读指针移动到当前指令后的第一条分支指令对应的轨迹点。
10.根据权利要求1所述方法,其特征在于将最后更新间接分支指令中基地址寄存器值的指令与该间接分支指令之间的距离记录在轨道表中该间接分支指令对应的表项中,以确定该基地址寄存器更新完毕的时间点。
11.根据权利要求1所述方法,其特征在于有一个对应轨道表中轨道块号与指令读缓冲中指令块地址的微型主动表。
12.根据权利要求1所述方法,其特征在于:
将所述复数条轨道组织为一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
用主动表存储了指令行地址与行号的匹配对;所述主动表中的表项与指令存储器中的存储行一一对应;
用计数器记录主动表中块号被轨道表引用的次数,使得当前被轨道表引用的块号不会被替换出主动表。
13.根据权利要求1所述方法,其特征在于:
将所述复数条轨道组织为一个轨道表,所述轨道表就是一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表;
用主动表存储了指令行地址与行号的匹配对;所述主动表中的表项与指令存储器中的存储行一一对应;
用一个读指针对轨道表进行扫描,一旦发现有对主动表块号的引用就将主动表对应块号的标志位置位;同时用一个循环指针依次将主动表中各个块号的标志位复位,从而用已置位的标志位表示当前被轨道表引用的块号,使之不会被替换出主动表;所述循环指针的移动速度比所述读指针的移动速度慢。
14.根据权利要求1所述方法,其特征在于由第三指令存储器提供当前指令块。
15.根据权利要求1所述方法,其特征在于由第三指令存储器提供下一指令块。
16.根据权利要求1所述方法,其特征在于由第三指令存储器或第二指令存储器提供目标指令块。
17.根据权利要求1所述方法,其特征在于由第三指令存储器提供当前指令块,且同时由第二指令存储器提供目标指令块。
18.根据权利要求1所述方法,其特征在于通过匹配,在第三指令存储器中同时找到当前指令块和下一指令块。
19.根据权利要求1所述方法,其特征在于通过匹配,在第三指令存储器中同时找到当前指令块、下一指令块和目标指令块。
20.根据权利要求18所述方法,其特征在于根据指令地址的部分位,从当前指令块和下一指令块中找到所需指令。
21.根据权利要求1所述方法,其特征在于只对再次被执行到的数据访问指令计算下次执行该数据访问指令时可能的数据寻址地址、将第一数据存储器中的数据填充到第二数据存储器中。
22.根据权利要求1所述方法,其特征在于在执行数据访问指令时将当前的基地址寄存器值减去上次执行该数据访问指令时的基地址寄存器值,从而得到基地址寄存器值的变化步长。
23.根据权利要求1所述方法,其特征在于针对每个基地址寄存器,都在审查指令时从每条更新该基地址寄存器值的指令中提取并累计基地址寄存器的变化量,从而得到两次执行同一条数据访问指令时该基地址寄存器值的变化步长。
24.根据权利要求1所述方法,其特征在于根据访问存储器的时延,针对数据访问指令所在的分支转移范围的不同大小,给予不同的预取次数。
25.根据权利要求1所述方法,其特征在于对正被从第二指令存储器填充到第三指令存储器的指令进行审查,从而提取出至少包含数据访问指令信息和最后更新基地址寄存器指令信息的指令信息;
在最后更新至少一条数据访问指令所用的基地址寄存器的指令执行后,根据指令段对应的轨道将第一数据存储器中的数据填充到第二数据存储器中。
26.根据权利要求25所述方法,其特征在于使用一个沿指令段以比指向当前正在被处理器核执行的当前指令的指针更快速度移动的用以提取指令信息的数据指针,并停止在至少一条数据访问指令处。
27.根据权利要求25所述方法,其特征在于将最后更新数据访问指令中基地址寄存器值的指令与该数据访问指令之间的距离记录在轨道表中该数据访问指令对应的表项中,以确定该基地址寄存器更新完毕的时间点。
28.根据权利要求25所述方法,其特征在于当到达计算数据寻址地址的时间点时,通过基地址寄存器值加上地址偏移量的方法计算出数据寻址地址。
29.根据权利要求28所述方法,其特征在于通过处理器核中寄存器额外的读端口获得基地址寄存器值。
30.根据权利要求28所述方法,其特征在于采用时分复用读口的方式从处理器核中寄存器获得基地址寄存器值。
31.根据权利要求28所述方法,其特征在于通过处理器核中的旁路路径获得基地址寄存器值。
32.根据权利要求28所述方法,其特征在于通过一个专供数据预取使用的额外寄存器堆获得基地址寄存器值。
33.根据权利要求1所述方法,其特征在于处理器核直接访问第三数据存储器中的数据。
34.根据权利要求1所述方法,其特征在于第二指令存储器和第二数据存储器是同一个存储器,并通过地址信息匹配区分指令存储部分和数据存储部分。
CN201210228030.9A 2012-06-27 2012-06-27 高性能缓存方法 Active CN103513957B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201210228030.9A CN103513957B (zh) 2012-06-27 2012-06-27 高性能缓存方法
EP13809284.6A EP2867778A4 (en) 2012-06-27 2013-06-26 POWERFUL INTERMEDIATE STORAGE SYSTEM AND METHOD
PCT/CN2013/077963 WO2014000641A1 (en) 2012-06-27 2013-06-26 High-performance cache system and method
US14/411,009 US20150186293A1 (en) 2012-06-27 2013-06-26 High-performance cache system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210228030.9A CN103513957B (zh) 2012-06-27 2012-06-27 高性能缓存方法

Publications (2)

Publication Number Publication Date
CN103513957A CN103513957A (zh) 2014-01-15
CN103513957B true CN103513957B (zh) 2017-07-11

Family

ID=49782248

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210228030.9A Active CN103513957B (zh) 2012-06-27 2012-06-27 高性能缓存方法

Country Status (4)

Country Link
US (1) US20150186293A1 (zh)
EP (1) EP2867778A4 (zh)
CN (1) CN103513957B (zh)
WO (1) WO2014000641A1 (zh)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
KR20150078003A (ko) * 2013-12-30 2015-07-08 삼성전자주식회사 캐시 메모리 시스템 및 그 동작방법
CN103870249B (zh) * 2014-04-01 2017-08-25 龙芯中科技术有限公司 指令地址获取方法和即时编译器
CN104978282B (zh) * 2014-04-04 2019-10-01 上海芯豪微电子有限公司 一种缓存系统和方法
CN103902502B (zh) * 2014-04-09 2017-01-04 上海理工大学 一种可扩展的分离式异构千核系统
CN104111901B (zh) * 2014-08-07 2017-05-24 昆腾微电子股份有限公司 用于填充存储器的方法及装置
US10353793B2 (en) 2014-11-05 2019-07-16 Oracle International Corporation Identifying improvements to memory usage of software programs
US10275154B2 (en) 2014-11-05 2019-04-30 Oracle International Corporation Building memory layouts in software programs
WO2016097794A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Prefetching with level of aggressiveness based on effectiveness by memory access type
JP6457836B2 (ja) * 2015-02-26 2019-01-23 ルネサスエレクトロニクス株式会社 プロセッサおよび命令コード生成装置
CN106293624A (zh) * 2015-05-23 2017-01-04 上海芯豪微电子有限公司 一种数据地址产生系统和方法
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10217254B2 (en) 2015-09-24 2019-02-26 Oracle International Corporation Graphical editing of memory layout rules for software programs
US10127136B2 (en) * 2015-09-24 2018-11-13 Oracle International Corporation Identifying and visualizing suboptimal memory layouts in software programs
US10489130B2 (en) 2015-09-24 2019-11-26 Oracle International Corporation Configurable memory layouts for software programs
US10146681B2 (en) * 2015-12-24 2018-12-04 Intel Corporation Non-uniform memory access latency adaptations to achieve bandwidth quality of service
CN105653472A (zh) * 2015-12-31 2016-06-08 北京中科晶上科技有限公司 缓存辅助的向量寄存器堆的缓冲方法
US10552152B2 (en) * 2016-05-27 2020-02-04 Arm Limited Method and apparatus for scheduling in a non-uniform compute device
US10725699B2 (en) * 2017-12-08 2020-07-28 Sandisk Technologies Llc Microcontroller instruction memory architecture for non-volatile memory
CN109033445B (zh) * 2018-08-18 2021-08-17 深圳市映花科技有限公司 在移动互联网内根据运行应用进行文件预取的方法及系统
CN110770699A (zh) * 2018-08-22 2020-02-07 深圳市大疆创新科技有限公司 数据指令处理方法、存储芯片、存储系统和可移动平台
CN111143242B (zh) * 2018-11-02 2022-05-10 华为技术有限公司 一种缓存预取方法和装置
CN109471732B (zh) * 2018-11-22 2021-06-01 山东大学 一种面向cpu-fpga异构多核系统的数据分配方法
US11169928B2 (en) * 2019-08-22 2021-11-09 Micron Technology, Inc. Hierarchical memory systems to process data access requests received via an input/output device
CN110704107B (zh) * 2019-09-30 2022-03-22 上海兆芯集成电路有限公司 预取器、预取器的运作方法及处理器
CN117971722B (zh) * 2024-03-28 2024-07-02 北京微核芯科技有限公司 一种取数指令的执行方法及其装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5243705A (en) * 1989-12-11 1993-09-07 Mitsubishi Denki K.K. System for rapid return of exceptional processing during sequence operation instruction execution
CN1165345A (zh) * 1996-03-22 1997-11-19 松下电器产业株式会社 信息处理设备和方法,及调度装置
US5717946A (en) * 1993-10-18 1998-02-10 Mitsubishi Denki Kabushiki Kaisha Data processor
EP0543366B1 (en) * 1991-11-20 1999-08-11 Hitachi, Ltd. Data processing method and apparatus
CN1354852A (zh) * 1997-10-23 2002-06-19 英特尔公司 基于跟踪的指令高速缓冲存储
CN102110058A (zh) * 2009-12-25 2011-06-29 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5210842A (en) * 1991-02-04 1993-05-11 Motorola, Inc. Data processor having instruction varied set associative cache boundary accessing
US5544327A (en) * 1994-03-01 1996-08-06 International Business Machines Corporation Load balancing in video-on-demand servers by allocating buffer to streams with successively larger buffer requirements until the buffer requirements of a stream can not be satisfied
GB2293670A (en) * 1994-08-31 1996-04-03 Hewlett Packard Co Instruction cache
EP0912928A1 (en) * 1996-07-16 1999-05-06 Advanced Micro Devices, Inc. A data address prediction structure utilizing a stride prediction method
CN1248109C (zh) * 2002-10-22 2006-03-29 富士通株式会社 信息处理单元和信息处理方法
US20070118696A1 (en) * 2005-11-22 2007-05-24 Intel Corporation Register tracking for speculative prefetching
JP2008186233A (ja) * 2007-01-30 2008-08-14 Toshiba Corp 命令キャッシュプリフェッチ制御方法及びその装置
US7890702B2 (en) * 2007-11-26 2011-02-15 Advanced Micro Devices, Inc. Prefetch instruction extensions
US8782348B2 (en) * 2008-09-09 2014-07-15 Via Technologies, Inc. Microprocessor cache line evict array
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
US20110010506A1 (en) * 2009-07-10 2011-01-13 Via Technologies, Inc. Data prefetcher with multi-level table for predicting stride patterns
CN102117198B (zh) * 2009-12-31 2015-07-15 上海芯豪微电子有限公司 一种分支处理方法
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
US8688915B2 (en) * 2011-12-09 2014-04-01 International Business Machines Corporation Weighted history allocation predictor algorithm in a hybrid cache
WO2013101026A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Multi-level tracking of in-use state of cache lines

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5243705A (en) * 1989-12-11 1993-09-07 Mitsubishi Denki K.K. System for rapid return of exceptional processing during sequence operation instruction execution
EP0543366B1 (en) * 1991-11-20 1999-08-11 Hitachi, Ltd. Data processing method and apparatus
US5717946A (en) * 1993-10-18 1998-02-10 Mitsubishi Denki Kabushiki Kaisha Data processor
CN1165345A (zh) * 1996-03-22 1997-11-19 松下电器产业株式会社 信息处理设备和方法,及调度装置
CN1354852A (zh) * 1997-10-23 2002-06-19 英特尔公司 基于跟踪的指令高速缓冲存储
CN102110058A (zh) * 2009-12-25 2011-06-29 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置

Also Published As

Publication number Publication date
EP2867778A1 (en) 2015-05-06
WO2014000641A1 (en) 2014-01-03
US20150186293A1 (en) 2015-07-02
CN103513957A (zh) 2014-01-15
EP2867778A4 (en) 2016-12-28

Similar Documents

Publication Publication Date Title
CN103513957B (zh) 高性能缓存方法
CN103513958B (zh) 高性能指令缓存系统和方法
US10282122B2 (en) Methods and systems of a memory controller for hierarchical immutable content-addressable memory processor
CN102841865B (zh) 高性能缓存系统和方法
CN102110058B (zh) 一种低缺失率、低缺失惩罚的缓存方法和装置
CN102141905B (zh) 一种处理器体系结构
CN105701033B (zh) 取决于模式而可动态配置的高速缓存存储器
CN105701022B (zh) 组相联高速缓存
CN104978282B (zh) 一种缓存系统和方法
CN102855121B (zh) 分支处理方法与系统
CN106569958A (zh) 以内存访问类型来分配的全关联快取内存
Ashkiani et al. GPU LSM: A dynamic dictionary data structure for the GPU
EP0221358B1 (en) Sort string generation in a staged storage system
TWI260503B (en) Memory accelerator for arm processors
US7530063B2 (en) Method and system for code modification based on cache structure
CN103514107B (zh) 高性能数据缓存系统和方法
CN104424132A (zh) 高性能指令缓存系统和方法
JPH08255079A (ja) コンピュータ・プロセッサ用のレジスタ・キャッシュ
CN102880559A (zh) 基于应用敏感的微处理器末端高速缓存控制方法及装置
JP4254954B2 (ja) データ処理装置
CN104239224B (zh) 一种基于渲染应用数据访问特点的数据管理方法
US7856529B2 (en) Customizable memory indexing functions
Tanaka et al. Highly Functional Memory Architecture for Large-Scale Data Applications
CN114116727A (zh) 一种基于协程的Cuckoo哈希优化方法
Knowles et al. The MU6-G virtual address cache

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