CN102841865B - 高性能缓存系统和方法 - Google Patents
高性能缓存系统和方法 Download PDFInfo
- Publication number
- CN102841865B CN102841865B CN201110180079.7A CN201110180079A CN102841865B CN 102841865 B CN102841865 B CN 102841865B CN 201110180079 A CN201110180079 A CN 201110180079A CN 102841865 B CN102841865 B CN 102841865B
- Authority
- CN
- China
- Prior art keywords
- instruction
- track
- data
- address
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明给出了一个包含了一个处理器核和一个缓存控制单元数字系统。该处理器核连接一个包含数据的第一存储器和一个比第一存储器速度更快的第二存储器,且该处理器用于执行一段包含至少一条使用一个基地址寄存器在第二存储器中访问数据的指令。该缓存控制单元连接第一存储器、第二存储器和处理器核,用于在处理器核执行访问数据的指令前将数据从第一存储器填充到第二存储器中。此外,该缓存控制单元可进一步用于对指令段进行审查,从而提取出至少包含数据访问指令信息和最后更新寄存器指令信息的指令信息,并根据提取出的指令信息建立对应指令段的轨道,该缓存控制单元还可进一步用于在最后更新至少一条访问数据的指令所用的寄存器的指令执行后,根据指令段对应的轨道将第一存储器中的数据填充到第二存储器中。
Description
技术领域
本发明涉及集成电路及计算机领域。
背景技术
通常而言,缓存的作用是将内存中的一部分内容复制在其中,使这些内容能在短时间内由处理器核快速存取,以保证流水线的持续运行。
现行缓存的寻址都基于以下方式,首先用地址中的索引段寻址读出标签存储器中的标签。同时用地址中索引段与块内位移段共同寻址读出缓存中的内容。此外,将标签存储器中读出的标签与地址中的标签段进行匹配。如果从标签存储器中读出的标签与地址中的标签段相同,那么从缓存中读出的内容有效,称为缓存命中。否则,如果从标签存储器中读出的标签与地址中的标签段不相同,成为缓存缺失,从缓存中读出的内容无效。对于多路组相联的缓存,同时对各个路组并行进行上述操作,以检测哪个路组缓存命中。命中路组对应的读出内容为有效内容。若所有路组都为缺失,则所有读出内容都无效。缓存缺失之后,缓存控制逻辑将低级存储媒介中的内容填充到缓存中。
缓存缺失可分为三类状况:强制缺失、冲突缺失和容量缺失。在现有缓存结构中,除了预取成功的小部分内容外,强制缺失是不可避免的。但是,现有的预取操作会带来不小的代价。此外,虽然多路组相联缓存可以降低冲突缺失,但受制于功耗及速度限制(如因为多路组相联缓存结构要求将所有路组由同一索引寻址的内容及标签同时读出并比较),路组数难以超过一定数目。此外,为了使缓存的速度与处理器核的运行速度匹配,很难增加缓存的容量。所以有多层次缓存的设置,低层次的缓存比高层次的缓存容量大但速度慢。
因此,现代的缓存系统通常由多路组相连的多层次缓存构成。新的缓存结构,如:牺牲缓存、跟踪缓存以及预取(取一个缓存块时把下一个缓存块也取来放在缓存缓冲器或使用预取指令)等被用来弥补现有的某些缺陷。然而,随着日渐扩大的处理器/存储器速度鸿沟,现行体系结构,特别是多种多样的缓存缺失的可能性,仍是制约现代处理器性能提升的最严重瓶颈。
本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。
发明内容
本发明提出一种数字系统。所述数字系统包括一个处理器核和一个缓存控制单元。所述处理器核连接一个包含数据的第一存储器和一个比第一存储器速度更快的第二存储器,且所述处理器用于执行一段包含至少一条使用一个基地址在第二存储器中访问数据的指令。所述缓存控制单元连接第一存储器、第二存储器和处理器核,用于在处理器核执行访问数据的指令前将数据从第一存储器填充到第二存储器中。此外,所述缓存控制单元可进一步对指令段进行审查并提取出至少包含数据访问指令信息和最后更新寄存器指令信息的指令信息。此外,根据提取出的指令信息建立对应指令段的轨道,在最后更新至少一条访问数据的指令所用的寄存器的指令执行后,根据指令段对应的轨道将第一存储器中的数据填充到第二存储器中。
本发明还提出一种用于辅助连接一个包含可执行指令的第一存储器和一个比第一存储器速度更快的第二存储器的处理器核运行的方法。所述处理器核用于执行至少包含一条使用一个基地址寄存器访问第二存储器中数据的指令的指令段。所述方法包括对指令段进行审查,从而提取出至少包括数据访问指令信息和最后寄存器更新指令信息的指令信息。所述方法还包括根据提取出的指令信息建立对应该指令段的轨道。此外所述方法还包括在最后更新至少一条数据访问指令所用的寄存器的指令执行后且在处理器核执行该数据访问指令之前,根据指令段对应的轨道将第一存储器中的数据填充到第二存储器中。
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。
附图说明
图1是本发明所述的计算环境的一个实施例;
图2A是根据本发明所述方法实现地址树的一个实施例;
图2B是基于本发明所述地址树运行的的一个实施例;
图3A是本发明所述缓存系统的一个实施例;
图3B是本发明所述缓存系统的另一个实施例;
图4是本发明所述缓存系统的另一个实施例;
图5是本发明所述缓存系统的另一个实施例;
图6是本发明所述缓存系统的另一个实施例;
图7A是本发明所述缓存系统的另一个实施例;
图7B是本发明所述缓存系统中一个组成部分的实施例;
图8是本发明所述主动表的一个实施例;
图9是本发明所述建立新轨道的一个实施例;
图10A是本发明所述缓存系统的另一个实施例;
图10B是本发明所述缓存系统中一个组成部分的实施例;
图11A是本发明所述用于多层缓存结构的分配器或保留表的一个实施例;
图11B是本发明所述用于多层缓存结构的分配器或保留表的一个实施例;
图12是本发明所述建立新轨道的实施例;
图13是本发明所述交换器的一个实施例;
图14A是本发明所述缓存系统的另一个实施例;
图14B是本发明所述缓存系统中一个组成部分的实施例;
图15是本发明所述轨道表压缩的实施例;
图16A-16B是本发明所述分支判断结构的实施例;
图17是使用本发明所述高性能缓存结构的存储器结构的实施例;
图18A是基于本发明所述间接寻址的指令预填充的实施例;
图18B是基于本发明所述间接寻址的指令预填充的另一个实施例;
图19是本发明所述缓存系统的另一个实施例;
图20是数据操作和指令之间交互的实施例;
图21A是本发明所述的用于存储数据装载信息的轨道表结构的实施例;
图21B是本发明所述的基于轨道表结构的数据预填充的实施例;
图21C是实现了数据预填充结构缓存系统更多细节的实施例;
图22A是本发明所述的数据和指令轨道表的实施例;
图22B是本发明所述的指令轨道表和数据轨道表之间接口结构的实施例;
图22C是本发明所述的带有压缩功能的指令轨道表和数据轨道表之间接口结构的实施例;
图22D是本发明所述的带有压缩功能的指令轨道表和数据轨道表之间接口结构的实施例;
图23是轨道表的一行和信息类型的实施例;
图24是本发明所述缓存系统的一个实施例;
图25是本发明所述缓存系统的一个实施例;
图26是本发明所述缓存系统的一个实施例;
图27A是本发明所述实时缓存结构的一个实施例;
图27B是本发明所述实时缓存结构的一个实施例;
图28A-28B是本发明所述轨道表和相关表的实施例;和
图29是本发明所述缓存结构的一个实施例。
具体实施方式
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码也可以被用于所有附图以代表相同的或类似的部分。
图1是本发明所述的计算环境的一个实施例。如图1所示,计算环境1000包括一个处理器核125、一个高层次存储器124、一个填充/生成器123、一个低级存储器122和一个循迹引擎320。应当理解的是,图中所示的部件或设备仅仅是为了说明而不是限制,可以省略某些部件或设备,也可以增加其他的部件或设备。此外,本实施例仅对用于读取指令的装置进行描述,用于读取数据和存储数据的装置与之类似。
高层次存储器124和低级存储器122可以由任意合适的存储设备构成,例如静态存储器(SRAM)、动态存储器(DRAM)和闪存(flashmemory)。在本实施例中,存储器的层次表示其与处理器核在连接上的接近程度。越靠近处理器核的存储器层次越高。此外,通常一个较高层次的存储器在速度上越快,且面积越小。高层次存储器124可以作为系统的缓存或当有其他缓存存在时的一级缓存,也可以被分割为复数个被称为块(如:存储块)的存储片段,用于存储处理器核125要访问的数据(即:指令和数据)。
处理器核125可以是能以流水线方式并与缓存系统协同工作的任意合适的处理器。处理器核125可以使用分开的指令缓存与数据缓存,并可以包含一些用于缓存操作的指令。当处理器核125执行一条指令时,处理器核125首先需要从存储器中读入指令和/或数据。循迹引擎320和填充/生成器123用于将处理器核125将要执行到的指令填充到高层次存储器124中,使处理器核125能从高层次存储器124中以非常低的缓存缺失率读到所需的指令。在本实施例中,术语“填充”表示将数据/指令从较低层次的存储器移动到较高层次的存储器中,术语“访问存储器”表示处理器核125对最接近的存储器(即高层次存储器124或一级缓存)进行读或写。
循迹引擎320及诸如填充/生成器123其他部件可以作为处理器芯片的一部分实现在同一集成电路中,也可以是独立的芯片,或作为程序在处理器芯片中运行,或由软件和硬件组合构成。
在本实施例中,循迹引擎(trackingengine)320根据填充/生成器123和处理器核125发送来的信息,产生适当的地址用于获取所需指令或包含所需指令的指令块。循迹引擎320还可以向填充/生成器123提供适当的地址,使得填充/生成器123能利用该地址从低级存储器122中获取对应指令或包含对应指令的指令块,并将所述指令或指令块存储到存储器124中。此外,循迹引擎320还可以产生对高层次指令存储器124的块号。所述块号与处理器核125产生的块内偏移量可以一同构成指令寻址地址,在不发生缓存缺失的情况下,从高层次指令存储器124中取得对应的指令送往处理器核125。
具体来说,填充/生成器123包括一个生成器130和一个填充引擎132。填充引擎132可以根据适当的地址获取指令或指令块。生成器130可以对从低级存储器122中获取来的每一条指令进行审查,并提取出某些信息,如:指令类型、指令地址、分支指令的分支目标信息。所述指令以及包含分之目标信息的提取出的信息被送到循迹引擎320。在本实施例中一条分支指令或一个分支点指的是任何适当的能导致处理器核125改变执行流(如:非按顺序执行一条指令)的指令形式。循迹引擎320可以根据所述指令以及分支目标信息确定地址信息,如:指令类型、分支源地址和分支目标地址信息。举例而言,指令类型可以包括条件分支指令、无条件分支指令和其他指令等。具体地,可以认为无条件分支指令是条件分支指令的一种特例,即条件总是成立。因此,指令类型可以分为分支指令和其他指令等。分支源地址可以指分支指令本身的地址,分支目标地址可以指当分支成功发生时将被转移到的地址。此外,还可以包括其他信息。
此外,循迹引擎320可以根据所确定的信息提供的用于填充高层次存储器124的地址信息建立地址树或轨道表。图2A给出了根据本发明所述方法实现地址树的一个实施例。
如图2A所示,地址树300可以包括树节点310和312,树干301、302、304、305和307,以及树支303和306。一个树干对应一段固定或可变长度的指令序列。一个树节点可以是一条在该指令后可能发生转移的分支指令。如果分支转移成功发生,一个连接所述树节点和分支目标地址的树支就被建立起来。举例而言,301、302、304、305和307是对应树干的普通指令段;310和312是对应树节点的分支指令;311和313是分支目标,并能以此建立树支303和306。此外,其他可能的结构也可以被使用。
在程序执行过程中,地址树300或地址树300中的任意部分可以被用做处理器核125执行的一个指令序列的轨迹或轨道。所述指令序列的第一条指令可以被认为是轨迹头(HOL)或轨道头,且包括所述第一条指令的指令段被填充到高层次存储器124中,以被处理器核125使用。在执行过程中,当前指令可以成为正在执行的指令序列中的第一条指令,这样HOL就沿轨迹移动。此外,还可以产生一个或多个预测轨迹头(PHOL),用于指示处理器核125可能使用的指令序列。举例而言,在一个树节点(即,一条分支指令),根据分支是否发生,可能存在两个PHOL。在执行过程中,可以根据轨迹中的分支点移动所述PHOL,且PHOL通常领先于HOL。
根据分支节点的层数,地址树300可以提供不同深度。举例而言,一个一层地址树可以仅支持一层分支(如:下一个分支),一个两层地址树可以支持两层分支(如:当第一层分支没有发生时的所述第一层分支之后的分支,或当第一层分支发生时的所述第一层分支对应分支目标轨道上的分支);此外,一个多层地址树可以支持多层分支。
图2B是基于本发明所述地址树运行的的一个实施例。如图2B所示,直线表示程序,曲线表示转移路径,粗点表示分支指令,虚线表示对应程序按固定长度或近似长度指令段的划分(如:指令段)。
一开始,处理器核125执行程序段30,直到条件分支指令31。若分支指令31的分支转移条件不成立,则处理器核125执行程序段33,直到无条件分支指令36,之后沿转移路径34途径无条件分支转移至程序段37。另一方面,若在执行条件分支指令31时分支转移条件成立,则处理器核125执行沿转移路径32转移到的程序段35,之后再继续执行程序段37。
在执行完程序段37后,处理器核125执行程序段38直到用于循环的条件分支指令39。若条件分支指令39的循环条件成立,则沿转移路径40再次执行程序段38。重复多次执行38段直至循环条件不成立,之后处理器核125执行程序段41。
所述多个程序段可以由指令段11、12、13、14、15、16和17表示,且每个指令段可以包含相同数目的指令或在变长指令集时的不同数目的指令。举例而言,指令段11可以包括程序段30中的全部指令和程序段33中的一部分指令;指令段12可以包括程序段33中的另一部分指令;指令段13可以包括程序段35中的一部分指令;指令段14可以包括程序段35中的另一部分指令和程序段37中的一部分指令;指令段15可以包括对应程序段37中的另一部分指令;指令段16可以包括程序段38中的一部分指令;指令段17可以包括程序段38中的另一部分指令和程序段41中的一部分指令。可以根据应用目标或硬件资源确定每个指令段的大小。
为便于描述,在本实施例中假设对指令段的填充可以不采用交替填充的方法,都是在一个指令段填充完成后再将下一个待填充指令段填充到高层次指令存储器124中。此外,假设地址树300的深度为一层。即只有一层分支被用于将指令段填充到高层次存储器124中。其他配置方法也可以被类似使用。在处理器核125运行之初,填充/生成器123开始将指令段11填充到高层次存储器124中,并扫描被填充到高层次存储器124中的每条指令。在某些情况下,可以一次扫描两条或更多指令,执行一条指令,扫描到的指令领先于执行到的指令。举例而言,可以在一个时钟周期内审查两条指令,同时处理器核125执行一条指令;或在多发射处理器情况下,在一个时钟周期内审查八条指令,同时处理器核125执行四条指令。其他配置方法也可以被用于在执行前进行扫描。
此外,填充/生成器123扫描条件分支指令31后,填充/生成器123可以判断出条件分支指令31是一条分支指令,且能提取出分支指令31的位于程序段35中的目标地址。这样,循迹引擎320控制填充/生成器123将所述目标地址对应的指令段,即指令段13,填充到高层次存储器124中。这样,指令段13在条件分支指令31被执行前就被填充到高层次存储器124中。此外,分支指令31对应顺序执行的下一条指令所位于的指令段11已经被填充到高层次存储器124中,所以不需要额外填充操作。
此外,当执行到分支指令31时,假设分支转移条件不成立,则继续执行指令段11。当指令段11中的最后一条指令被执行时,后一指令段12已经被填充到高层次指令存储器124中,使得指令段11中最后一条指令执行完毕后能在不发生缓存缺失的情况下执行后一条指令。
在填充指令段12时,对正在填充的指令进行扫描。填充/生成器123可以发现指令段12的最后一条指令是分支指令(即无条件分支指令36)。这样,分支指令36目标地址对应的指令段(即指令段14)被填充到高层次指令存储器124中。
同样地,在指令段13中的最后一条指令被执行完之前就已经可以知道最后一条指令对应的下一指令在指令段14中。由于指令段14已被填充,因此不需要额外填充操作。同理,在处理器核125执行指令段15、16和17中的任意指令前,将指令段15、16和17填充到高层次指令存储器124中。
此外,当扫描到指令段17中用于循环的分支指令39时,由于目标指令段(即指令段16)和顺序执行下一指令地址对应的指令段都已经被填充到高层次存储器124中,因此不需要额外填充操作。当指令39的分支转移条件不再成立时,循环结束,继续执行指令段17中的后续指令。
综上所述,循迹引擎320和其他部件可以根据地址树的概念控制上述操作从而充分地降低缓存缺失率。循迹引擎320和其他部件(如:填充/生成器123)也可以是指类似缓存控制器的面向多种部件的接口,从而充分地降低缓存缺失率。图3A是本发明所述缓存系统的一个实施例2000。
如图3A所示,循迹引擎320包括一个轨道表126和一个循迹器170。轨道表可以包含处理器核125所需执行的指令的轨道,循迹器170可以根据轨道表126提供多个地址。在本实施例中,一条轨道代表一个将被执行的指令序列(如:一个指令段)。这种表示方式也可以包括任意合适的数据类型,如地址、块号,或其他数字。此外,当一条轨道包含一个具有可能改变程序流或处于另一个不同的指令段中的分支目标的分支点时建立一条新的轨道,所述分支目标的情况例如下一指令段中的一条指令,一个异常处理程序,以及不同的程序线程等。所述指令序列可以包含相同数目的指令,也可以在例如应用于变长指令集时包含不同数目的指令。
轨道表126可以包含复数条轨道,轨道表126中的每条轨道对应轨道表126中的一行,且具有一个对应于存储块的行号或块号。一条轨道可以包括复数个轨迹点,每个轨迹点对应一条单独的地址。此外,如同一条轨道对应轨道表126中的一个单独的行一样,一个轨迹点对应轨道表126中对应行的一个单独的表项(如:存储单元)。这样,轨道中的轨迹点总数可以等于轨道表126中一行的表项总数。此外,其他配置方法也可以被使用。
一个轨迹点(即表项中的单独一项)可以包含一条分支指令的信息,所述分支指令的分支目标可以在另一条轨道中。这样,轨迹点的内容可以包括轨迹点对应的指令的信息和分支目标地址的信息,所述分支目标地址的信息可以包括所述目标轨道的轨道号,以及用于定位表项在目标轨道中位置的偏移量。通过检查轨迹点内容,可以根据轨道号确定目标轨道,并根据偏移量确定目标轨道中的一个特定的表项。这样,轨道表就成为一个分支轨道表项地址对应分支源地址、表项内容对应分支目标地址的表。
例如,在图3A中,处理器核125使用(M+Z)位的指令地址读取指令并运行,其中M和Z都是整数。地址中M位部分可以被用于指示高位地址,Z位部分可以被只是偏移量。轨道表126可以包含2M行,即2M条轨道,且M位高位地址可以被用于对轨道表126中的轨道进行寻址。每个行可以包含2Z个轨道表项,即2Z个轨迹点,且偏移量(Z位)可以被用于在对应行中对一个特定的轨迹点(表项)进行寻址。
当新轨道被建立时,可以将新建轨道放置在轨道表中的一个有效行中。如果所述新轨道包含一个分支轨迹点(对应一条分支源指令),那么在所述行中的一个表项内建立一个分支轨迹点。可以根据分支源地址确定所述分支点在轨道表126中的行及表项的位置。举例而言,可以根据分支源地址的高位地址确定行,并根据分支源地址的偏移量确定表项。
此外,行中的每个表项或轨迹点可以包含一种内容格式,所述格式包括类型区域57、XADDR区域58和YADDR区域59。此外还可以包含其他区域。类型区域57可以表示轨迹点对应的指令的类型。如之前所述,指令类型可以包括条件分支指令、无条件分支指令和其他指令。XADDR区域58可以包含M位地址,也被称为第一维地址或简称为第一地址。YADDR区域59可以包含Z位地址,也被称为第二维地址或简称为第二地址。
此外,新轨迹点的内容可以对应分支目标指令。换句话说,分支轨迹点的内容存储了分支目标地址信息。举例而言,轨道表126中的对应与一条分支目标指令的特定的行的行号或块号被作为第一地址58存储到所述分支轨迹点的内容中。此外,所述分支目标的偏移量被作为第二地址59存储到所述分支轨迹点的内容中。所述偏移量可以根据分支源指令地址和分支转移位移(距离)计算得到。这样,在对分支目标进行寻址时,存储在分支轨迹点(即所述分支源指令)中的第一地址XADDR58被用做行地址,存储在分支轨迹点中的第二地址YADDR59被用做列地址。
指令存储器46可以是高层次存储器124的一部分,用于指令访问,并可以由任意合适的高性能存储器构成。指令存储器46可以包含2M个存储块,每个存储块包含2Z个字节或字。
循迹器170可以由多种部件或设备构成,如:寄存器、选择器、栈和/或其他存储模块,用于确定处理器核125执行的下一轨道。循迹器170可以根据轨道表126中的当前轨道、轨迹点信息和是否因处理器核125的执行发生分支转移等信息确定下一轨道。
举例而言,在运行过程中,总线55上传递了(M+Z)位的指令地址。M位地址通过总线56被作为第一地址或XADDR(或X地址)送到轨道表126,Z为地址通过总线53被作为第二地址或YADDR(或Y地址)送到轨道表126。根据所述第一地址和第二地址,可以找到轨道表中的一个表项,并将它的内容输出到总线51上。若所述表项对应一条分支指令(一个分支轨迹点或分支源指令),则表项内容通过总线51被用做分支的目标地址。
如果所述分支指令的分支转移条件不成立,那么分支转移不发生,且处理器核125发出的所述分支转移不发生信号控制选择器49选择总线53上的YADDR经增一逻辑48增加一(1)个字节或字后得到总线54上的值作为新的第二地址,并在总线52上输出所述新地址。寄存器50保持第一地址不变,由增一逻辑48不断增一(1)直至指向当前轨道上的下一个分支指令。此后,所述第一地址和第二地址被保持在寄存器50中并被提供到总线55上。
另一方面,如果所述分支指令的分支转移条件成立,那么分支转移发生,且处理器核125发出的所述分支转移繁盛信号控制选择器49选择总线51上的所述分支点对应的轨道表项的内容中存储的新目标地址作为输出送到总线52上。寄存器50保持所述改变后的第一地址,并将(M+Z)位的新地址提供到总线55上。处理器核125发出的用于控制选择器49的信号也被成为“发生(taken)”信号,用于表示分支是否发生
这样,当处理器核125仅提供偏移量的同时,循迹引擎320提供了一个总线56上的块地址,从而实现了对指令存储器46进行寻址的目的。处理器核125向循迹器170反馈分支指令执行情况(即“发生”信号),使得循迹器170能确定如何运行。
在新轨道被执行前,所述轨道对应的指令段已经被填充到指令存储器46中。这样的过程被反复执行,使得所有指令都能在不发生缓存缺失的情况下被处理器核125执行。此外,还可以使用两层的指针(PHOL),从而对第一个分支点之后的两个后续分至点进行审查,且循迹器170和/或填充/生成器123可以将所述两个分支点的两条轨道对应的指令段填充到指令存储器46中,从而更进一步隐藏填充缓存的时延。
图3B是本发明所述缓存系统的另一个实施例3000。本实施例省略了与图3A实施例相似的部件。如图3B所示,总线56上的用于对轨道表126和指令存储器46进行寻址的XADDR地址或块地址可以有多个不同的来源。这就是说,循迹器170可以从复数个地址源中选择轨道。举例而言,用多路选择器65代替了图3A中的选择器49,使得能从四个不同的来源中进行选择:总线51上的当前分支指令的目标地址(轨道表内容)、总线54上的第一地址不变且第二地址增一(1)产生的一个正常地址、在总线64上的来源于栈61的一个地址,以及在总线62上的对应于异常处理程序入口的轨道位置。
多路选择器65根据当前指令及运行状态选择一条轨道(当前轨道或新轨道)。举例而言,如果第二地址对应的轨迹点不是分支指令,那么第一地址保持不变,且增一逻辑48保持对第二地址的增一(1)直到下一分支指令。如果第二地址对应的轨迹点是分支指令或到达了一个分之指令,且分支条件不满足,那么第一地址仍然保持不变且第二地址增加直到下一个分支指令。另一方面,如果分支条件满足,或所述分支是无条件的,那么目标地址被用做新的第一地址从而到达一条新的轨道。最后,如果到达最后一条指令,之后也将进入下一指令段对应的一条新轨道。
一些特殊的程序,如异常处理程序,也可以被填充到高层次存储器124中并建立对应轨道。这些特殊程序入口对应的轨迹点地址可以被存储到一些特殊的寄存器(如:EXCP)中。当一个时间发生时(如:有一个异常发生),对应于一个特殊程序(如:一个异常处理程序)的轨迹点地址经总线62被选择器65选中,以进入所述特殊程序。
此外,栈61可以包含复数个单独的栈。每个单独的栈都可以提供栈操作,如将指令入栈,以及将指令出栈,从而保存线程内容或保存“调用(CALL)”的路径(routine)状态。当一个程序调用一个路径时,对应返回地址的轨迹点的地址和/或其他信息可以入栈,并且当从一个调用路径返回时,所述被保存的轨迹点地址和/或其他信息可以出栈并根据所述轨迹点强制改变轨道(由选择器65选择64)。在某些情况中,处理器核125可以执行一种“跳转并链接”类型的指令(即当路径执行完毕后分支转移或调用到返回地址)。同样地,一个栈可以用来保存这种类型指令的返回地址。此外,处理器核125可以执行复数层嵌套的“调用”或“跳转并链接”类型的指令。所述单独栈可以包含复数层从而在不同的栈层次保存多个返回地址。此外,所述复数个栈可以支持多线程程序。轨道表126可以包含对应于不同线程的复数个栈,且线程标识器63可以被用来标识当前程序线程。此外,线程标识器63指向支持当前线程的当前栈。其他的来源或排列也可以被用在本实施例中。
这样,通过使用复数个栈可以支持多线程程序,根据线程标识器63的标识,每个栈都可以被一个线程或程序单独使用。
图4是本发明所述缓存系统的另一个实施例4000。实施例4000与图3A中的实施例2000相似。然而,在本实施例中使用了指令存储器78代替指令存储器46。如图4所示,指令存储器78可以包含2N个存储块,其中N是整数且N≤M。这就是说,指令存储器78可以比指令存储器46包含更少的存储块。总线56上的第一地址也因此仅被用于对轨道表126寻址。
此外,一个映射单元79可以将第一地址映射到N位长的块号或块地址80。这样,送往高层次存储器的地址可以通过映射从而减小高层次存储器的大小。由于处理器核125几乎不可能用到整个地址空间中的全部指令地址,因此采用这种基于映射的方法可以不提供对应于全部地址空间的存储块,从而减小指令存储器78的大小。
图5是本发明所述缓存系统的另一个实施例5000。实施例5000与图4中的实施例4000相似。然而,轨道表126可以只包含2N个行。这就是说,总线56上的第一地址经映射单元82映射后同时对轨道表126和指令存储器78进行寻址,以减少对容量大小的要求。
此外,在轨道表126和指令存储器78中的总行数小于处理器核125全部可寻址空间的情况下,轨道表126中的行可以仍然使用M位作为第一地址并使用Z位作为第二地址,从而同时减少轨道表126和指令存储器78的存储器容量。
图6是本发明所述缓存系统的另一个实施例6000。实施例6000与图5中的实施例5000相似。然而,如图6所示,一个映射单元83被放置于轨道表126及指令存储器78的外部,使得M位的第一地址84被轨道表126及指令存储器78使用前被映射为N位的第一地址85。这样,送到轨道表126、指令存储器78和循迹器170的地址都经过了映射以减小容量。
这样,轨道表126中的行可以使用N位的第一地址和Z位的第二地址,轨道表126和指令存储器78中的总行数可以小于处理器核125可寻址的全部地址空间,从而同时减少轨道表126和指令存储器78的存储器容量。此外,较短的第一地址可以提高整个系统的性能。
虽然上述的映射方法可以减少缓存和轨道表的容量,每一个指令段仍然可以对应到一条轨道。额外的结构也可以被用于在不丢弃已建轨道信息的情况下防止重复建立已建轨道。图7A就是采用了上述一个或多个映射方法实现的本发明所述缓存系统的另一个实施例8000。
如图7A所示,缓存系统8000包含低级存储器122、高层次指令存储器124和处理器核125。此外,缓存系统8000还包含填充/生成器123、分配器1200、轨道表126和循迹器170。分配器1200、轨道表126和循迹器170构成了循迹引擎320(图中未显示)的主体部分。而且如之前所述,循迹引擎320、填充/生成器123和其他相关逻辑可以被用做一个缓存控制单元。应当理解的是,这里列出的多个部件只是为了便于描述,还可以包含其他部件,或某些部件可以被组合或省去。所述多个部件可以分布在多个系统中,可以是物理存在的或虚拟的,也可以用硬件实现(如集成电路)、用软件实现或由软硬件组合实现。
此外,填充/生成器123可以包含一个填充引擎132、一个生成器130和地址翻译单元131,且循迹器170可以包含一个多路选择器137、寄存器138、增一逻辑136和栈135。还可以包含其他部件,或某些部件可以被组合或省去。为便于描述,根据特定的应用和配置,高层次存储器124可以被视为一个一级(L1)缓存,且低级存储器122可以被视为一个二级(L2)缓存或主存储器。如之前所述,生成器130提取分支指令(源)地址(分支指令对应的轨道表地址)、分支类型,和分支目标地址(分支轨迹点对应的轨道表内容),用以建立轨道表126。
分配器1200可以被用于将存储轨道信息或分配后存储轨道信息以减少轨道表126和高层次存储器124的容量大小要求。举例而言,分配器1200可以包含一个主动表121。一个主动表可以存储一条已建立的轨道的信息,并建立一个地址(或地址的一部分)与一个诸如轨道在轨道表126中占据的有效行所表示的块号之间的映射。举例而言,当建立一条轨道时,所述轨道的地址信息被存储到主动表中。也可以采用其他的安置形式。
如图7A所示,主动表121可以被用于存储指令段在高层次存储器124中的块地址,且每个块地址对应一个块号(BNX)。对应一个特定地址的块号可以通过对地址和主动表121中的表项进行内容匹配得到。所述匹配成功内容所在位置可以被编码得到一个块号,所述块号可以被用于索引轨道表中的一个行以及高层次存储器124中的一个块。如果匹配不成功,则意味着所述地址对应的轨道还没有建立起来。对应所述地址的指令段被填充到高层次存储器124中,一个新的轨道被建立在轨道表126里由地址指针129通过总线153索引的行中,且主动表121里由地址指针129通过总线153索引的项被更新(写入)为对应的块地址。图8是本发明所述主动表的一个实施例。
如图8所示,主动表121可以包括一个地址/数据双向寻址单元100。在一个方向上,数据/地址双向寻址单元100可以根据一个输入的块地址输出一个BNX号。数据/地址双向寻址单元100通过匹配输入的块(高位)地址和数据/地址双向寻址单元100中的内容产生一个对应的BNX。在另一个方向上,数据/地址双向寻址单元100可以根据一个输入的BNX号输出一个对应的块地址。所述输入的BNX号可以索引到存储所述块地址的表项。此外,数据/地址双向寻址单元100可以包括复数个表项101,每个表项101包含一个寄存器、一个比较器、一个标志位111(即V位)、一个标志位112(即A位)和一个标志位113(即U位)。比较器的结果可以被送到编码器102用于产生一个匹配的表项号。
控制逻辑107可以被用于控制读/写状态。每一个表项101的V(有效)位可以被初始化为“0”,且每一个表项101的A(主动)位可以被写入信号线119上的一个主动信号。一个写指针105可以指向数据/地址双向寻址单元100中的一个表项,且所述指针由一个循环自增单元110(图7A中的129)产生。循环自增单元110能产生的最大值等于表项101的总数。当达到最大值后,循环自增单元110增一产生的下一个值从“0”重新开始,且不断自增直到再次达到最大值。
在运行过程中,当写指针105指向一个当前表项101时,检查当前表项101的V位和A位。如果V位和A位都是“0”,那么当前表项是空闲、可以被写入的。当写操作完成后,循环自增单元110可以将指针增加一(1)从而指向下一个表项。然而,如果V位和A位中有一个不为“0”,那么当前表项并不能被用于新的写入,循环自增单元110可以将指针增加一(1)从而指向下一个表项,并检查所述下一个表项的是否可以用于新的写入。
在匹配过程中,输入的块地址数据104和每个表项101的寄存器中的内容进行比较。所述寄存器中的内容仅包含(对应高层次存储器124中存储块的)地址的高位。如果匹配成功,那么编码器102将匹配结果编为一个表项号码并将所述表项号码送到匹配地址输出109。如果匹配不成功,那么所述输入的块地址被写入由指针105指向的表项里的寄存器101中,同时该表项里的V位被设为“1”,且所述表项号码被从到匹配地址输出109。所述输出的表项号码之后会被用于表示BNX(因为它索引了一个存储块,因此也就是块号)。所述输入地址的低位(即一个存储块中的偏移量)之后会被用于表示BNY。所述BNX和BNY一起用于表示BN,所述BN之后会被存储到一个轨道表项中,并被用于索引轨道表126、高层次存储器124,和主动表121。虽然这里使用的“BN”通常指包含BNX和BNY的“块号”,但在本领域技术人员能够理解的前提下,在某些特殊的情况里,它也可以仅指地址的高位部分,即相当于BNX。此外,循环自增单元110可以将指针BNY增加一(1)从而指向下一个表项。
对于读操作,读地址106被用于在多个表项101中选择一个表项,并将选中的表项里的寄存器的内容读出并送到数据输出108,以及将所述选中的表项101的V位设置为“1”。
一个表项101里的U位可以被用于表示存储状态。当写指针105指向一个表项101时,所述被指向的表项里的U位被设置为“0”。当读取一个表项101时,所述被读出的表项里的U位被设置为“1”。此外,当循环自增单元110产生一个写指针105指向一个新的表项时,检查所述新表项里的U位。如果所述U位是“0”,那么所述新表项是可以被用于替换的,且为了完成可能的数据写入操作,写指针105停留在所述新表项。然而,如果所述U位是“1”,那么指针105进一步指向下一个表项。
可选地,一个窗口指针116可以被用来将其指向的表项里的U位设置为“0”,且窗口(清除)指针116位于写指针105之前的N个表项的位置(N为一个整数)。可以通过使用加法器115将写指针105的值增加N得到窗口指针116的值。写指针105和窗口指针116之间的N个表项可以被认为是一个窗口。这样,清除指针可以将一个表项里的U位设置为“0”。之后,对该表项的任意一次读操作都会导致所述U位被设置为“1”。当写指针105指向所述表项时,检查所述U位。如果所述U位是“0”,即表示自从该表项被清除指针116清除后,该表项没有被使用过,因此写指针105停留在该表项并用于下一次的写入。在另一方面,如果所述U位是“1”,即表示该表项最近被使用过,那么写指针移动到下一个表项。可以通过改变窗口的大小(即改变N的值)改变表项101中的表项被替换的频率。这种方法可以被用做一种基于使用率的替换策略以替换主动表121中的表项。
可选地,所述U位可以超过一位,这样就有多位U位。所述多位U位可以被写指针105或窗口(清除)指针116清除,且每次读操作可以将对应的多位U位的值增加“1”。在写操作过程中,将当前表项里的U位与一个预先设定的数值。如果U位的值小于所述预先设定的数值,那么当前表项是可以被替换的。如果U位的值大于所述预先设定的数值,那么指针105移动到下一个表项。
回到图7A,当处理器核125开启时,一个重置信号(图中未显示)把主动表121中所有表项的有效位置为“0”。当重置信号释放时,一个重置向量(重置起点的指令地址)被放上总线141以送到主动表121进行匹配。因为在主动表121里表项的内容中未寻到匹配,主动表121就把所述地址的高位部分(即重置向量)写入指针129产生的WXADDR153指向的主动表121中的表项,将所述表项的有效位设置为“1”,并通过总线144将所述重置向量送到填充引擎132。
填充引擎132根据重置向量对应的指令地址通过总线154从低级存储器122获取所述指令。所述获取到的指令被填充到高层次存储器124中由指针129产生的WXADDR153索引的存储块中。同时,通过总线140从低级存储器122获取所述指令时,生成器130可以扫描并审查所述指令。此外,所述指令对应的轨迹信息被写入对应的表项或轨道表126中由WXADDR153指向的行里的轨迹点中。
当填充操作完成后,指针129移动到主动表121中的下一个可用表项。可选地,地址翻译单元131可以对虚地址和实地址进行翻译转换。地址翻译单元131也可以被放置在低级存储器122之外,从而减少从低级存储器122获取到高层次存储器124的时延。
生成器130扫描填充到高层次存储器124的指令块中每一条指令。当生成器130找到一条分支指令时,计算出分支指令的目标地址。所述目标地址可以由包含所述分支指令的指令段起始地址加上所述分支指令的偏移量,并再加上分支转移到目标指令的距离。所述目标地址的低位部分就是所述分支目标指令在其行中的偏移量(之后将用BNY表示)。所述计算得到的目标地址的高位部分被用于与主动表121中的内容匹配。如果匹配不成功,那么主动表121就把这个值通过总线144送到填充引擎132以实现填充操作。
在另一方面,如果匹配成功,那么表示包含所述分支目标的指令段已经存储在高层次存储器124中,且匹配成功的行号码(BNX)及分支目标指令在行(BNX)中的偏移量(BNY)(即合并称为BN)被送到总线149用于写入一个轨道表项。所述表项由WXADDR153(行地址)以及在总线143上的从生成器130(列地址)来的表示分支指令在其所在指令段中偏移量的值共同索引。这样,当指令段中所有指令都被扫描、处理后,在主动表121、轨道表126和高层次存储器124中对应同一指令段的表项被同一个WXADDR索引。
更特殊地,高层次存储器124包含了将被处理器核125使用的整个指令段,主动表121包含了将与后续指令段进行匹配的块(高位)地址,且轨道表126包含了所述指令段中的全部分支轨迹点,包括:它们在指令段中的位置和它们的目标地址的BN值。一个BN值包括一个行地址BNX和一个列地址BNY。
图9显示了根据本发明技术方案使用轨道表126建立新轨道的方法的一个实施例。如图9所示,一个已建立的轨道66(用BNX0表示)可以包含三条分支指令或分支点67、68和69。当审查分支点67时,一条新轨道70(用BNX1表示的下一个可用行)被建立起来用于存储分支点67的目标指令,且轨道表126中的所述轨道的号码或所述行号(即BNX1)被记录在分支点67中作为第一地址。类似地,当审查分支点68时,在轨道表126中另一条新轨道71(用BNX2)表示被建立起来,且轨道号码被记录在分支点68中;当审查分支点69时,在轨道表126中另一条新轨道72(用BNX3)表示被建立起来,且轨道号码被记录在分支点69中。
这样,单条轨道中对应全部分支点的新轨道可以被建立起来。此外,轨道表126可以足够大从而容纳全部块号,且新轨道的号码可以通过对已使用的轨道中最大的轨道号码加一(1)的方法得到。可选地,根据特定的轨道粒度,一条轨道对应的指令数目可以是多种的(较高粒度可以允许一个单独的轨道或行用较小的表项数目代表包含较大个数的指令的指令段)。
回到图7A,继续之前的操作,循迹器170可以输出一个BN151用于对轨道表126和高层次存储器124寻址。这就是说,循迹器170可以对轨道表126、高层次存储器124和处理器核125提供坐标操作。图7B显示了缓存系统8000中实现所述操作的一个组成部分的实施例。
如图7B所示,循迹器170包括一个栈135、一个自增器136、一个多路选择器137、一个寄存器138和一个异常处理程序地址寄存器139。在操作过程中,循迹器170控制轨道表126的一个读指针。也就是说,循迹器170输出一个地址(即BN151)用于对轨道表126和高层次存储器124进行寻址。BN151包含BNX152和BNY156。BNX152可以被用于对轨道表126中的一个行或一条轨道进行寻址,并对高层次存储器124中的一个存储块进行寻址,此时BNY156可以被用于对轨道表126中由BNX152指向的轨道或行中的一个表项进行寻址。
循迹器170可以通过多路选择器137选择从不同来源来的输出BN151。举例而言,多路选择器137可以有四个BN输入来源:通过总线164送来的存储在栈135中的一个BN、通过总线165送来的由当前BNX151和经自增器136对当前BNY156自增后的得到的BNY构成的一个新BN、通过总线150送来的来源于轨道表126的一个BN、以及来源于异常处理程序地址寄存器139的一个BN。还可以有其他的来源。如之前所述,存储在栈135中的BN可以是函数调用或返回时的程序地址对应的BN值,存储在异常处理程序地址寄存器139中的BN可以是异常处理程序的地址对应的BN值。多路选择器137输出的所有BN值均包含BNX和BNY。
此外,多路选择器137受来自处理器核125的信号381控制以选择一个特定的BN送到输出418。举例而言,当处理器核125发生异常时,多路选择器137受信号381控制,选择异常处理程序地址寄存器139送来的BN作为输出418;当处理器核125进行函数调用返回时,多路选择器137信号381控制,选择栈135送来的BN作为输出418;当处理器核125进行分支转移时(信号381成为一个分支转移信号),多路选择器137信号381控制,选择轨道表126送来的BN作为输出418;以及当处理器核125不进行分支转移或执行其他普通操作时,多路选择器137受信号381控制选择BN165,即BNX152保持不变、BNY经自增器136增一后的BN作为输出418。
从多路选择器137来的总线或输出418(即下一个BN)可以在处理器核125来的信号417的控制下被存储到寄存器138中并被用于更新循迹器输出的BN151。当寄存器138受信号417控制保持当前BN151不变时,寄存器138不会输出所述输出418。另一方面,当寄存器138受信号417控制更新当前BN151时,所述输出418被送到总线151上成为当前BN151,从而更新BNX152和BNY156。
循迹器170提供的BN151包含BNX152和BNY156。BNX152被用于对指令段寻址,处理器核125则使用PC的偏移量获取需要执行的指令。而且,BNX152和BNY156被送到轨道表126使得轨道表126能将下一个BN送到总线150上。
如图7B所示,为了描述轨道表126和循迹器170之间的相互关系,假设轨道表126包含了轨道(即:行)410、411和412。每条轨道可以包含从0号到15号的16个表项或轨迹点。此外,轨迹点413(轨道410中的第8项)可以是一个分支目标为轨迹点414(轨道411中的第2项)的分支点,以及轨迹点415(轨道411中的第14项)可以是另一个分支点,其分支目标是轨迹点416(轨道412中的第5项)。
假设轨道410对应的指令段已经被填充在高层次存储器124中,且处理器核125从轨道410的起始位置开始执行指令。这就是说,处理器核125的程序计数器(PC)从轨道410中的第0项对应的指令地址开始运行。
同时,假设循迹器170也送出一个包含BNX和BNY的指向轨道表126中轨道410的第0项的读指针151。轨道410中的其他表项也可以被用到。可以通过检查所述表项中的内容确定指令的类型信息和地址信息等。
正如之前所述,当从轨道410的第0项开始运行时,由于轨道410的第0项不是一个分支点,循迹器170保持BNX152不变并通过自增器136将BNY增加一,从而得到对应轨道表126中轨道410中的下一个表项的下一个BN。循迹器170不断增加BNY从而向轨道410中的下一表项移动,直到到达一个分支点,如:轨迹点413(轨道410中的第8项)。在这个过程中,由于BNX没有变化,因此指令段地址没有变化,处理器核125可以利用PC的偏移量从高层次存储器124中不断获取指令。
当循迹器170到达轨迹点413(轨道410中的第8项)后,由于轨迹点413是一个分支点,因此对源地址和目标地址都进行分析。如果包含所述分支点源地址的后一条指令的指令段和/或包含所述目标地址的指令段还没有被填充到高层次存储器124中,那么将所述可能被处理器核125执行的指令段填充到高层次存储器124中。
在某些情况下,由于是在建立轨道表行时才建立主动表121中的表项,因此在循迹器170到达轨迹点413时,包含所述源地址下一条指令的指令段和包含目标地址的指令段可能已经被填充到高层次存储器124中。这样,由于下一指令是轨道410中第9项,且轨道410对应的指令段已经被填充到高层次存储器124中,因此不需要对轨迹点413的下一条指令进行填充。此外,由于轨迹点414已经在轨道表126和主动表121中被建立起来,轨道411对应的包含分支目标(轨道411的第2项)的指令段已经被填充到高层次存储器124中。
由于处理器核125执行指令的速度比循迹器170沿对应所述指令在内的轨迹点移动的速度慢,循迹器170可以在分支点等待处理器核125或与处理器核125同步。此外,轨道表126可以将分支目标作为总线150上的下一个BN(轨道411的第2项),即BNX为411及BNY为2,信号381可以在处理器核125执行轨迹点413的分支指令时提供一个分支是否发生的标识。
如本实施例所示,当分支发生时,循迹器170将轨道表通过总线150送来得到下一个BN作为BN151,即BNX指向轨道411及BNY指向轨道411的第2项。BNX也被用于在高层次存储器124中对相应指令段进行寻址,这样处理器核125可以从轨道411的第2项对应的指令开始执行。然而,如果分支没有发生,将所述分支点简单视为非分支点,循迹器170向前移动。
类似地,从轨道411的第2项开始,循迹器170找到下一个分支目标为轨迹点416(轨道412的第5项)的分支轨迹点415(轨道411的第14项)。如之前所述,用类似的方法对轨迹点413进行操作。如果针对分支轨迹点415(轨道411的第14项)的分支发生,处理器核125从轨迹点416开始执行。另一方面,如果针对分支轨迹点415的分支不发生,循迹器170移动到轨道411的第15项,即轨道411的最后一项。
当所述表项不是一个分支点,但是所在轨道的最后一条指令时,从位于下一轨道中的下一指令对应的轨迹点开始运行,循迹器170保持BNX152不变并不断对BNY156增一(1),从而产生新的BNY直到一个新的BNY指向所述新轨道中的第一个分支点。
这样,可以在处理器核125实际执行指令前建立轨道表126,使得指令可以被填充到高层次存储器124中,从而避免或减少因缓存缺失造成的时延。其他的机制,如增加轨道表运行速度、增大BNY的粒度、通过用轨道表中一个表项代表多条指令等方式减少轨道表中表项的数目等方法,可以单独或组合应用在上述实施例中。
还可以在轨道表126中采用多层分支的方法进一步改善缓存缺失率。举例而言,当从轨道表126中的一个表行读取表项时,发现一个分支轨迹点并将包含所述分支轨迹点对应的分支目标指令的指令段填充到高层次存储器124中。同时在轨道表126中建立一条新轨道(一级)。此外,所述新轨道也被检测,找到新轨道中的第一个分支轨迹点并将包含新轨道中所述分支轨迹点对应的分支目标指令的指令段填充到高层次存储器124中。由此,在轨迹表126中建立另一条新轨道(二级)。这样,两级分支点被用于填充高层次存储器124,且对于处理器核125而言,所述填充操作被更进一步地隐藏了。也可以对一级轨道的所有可能的执行结果建立二级轨道。这样,所述两级轨道不单根据当前分支点对应的分支目标指令新轨道中的第一个分支点建立,也根据当前分支点之后的下一条指令对应的新轨道的第一个分支点建立。
此外,可以根据与当前程序计数器(PC)之间的距离,建立一层或多层的可变层数的轨道。所述距离可以用领先与当前处理器核125执行的指令的指令数目表示。也就是说,无论为了保证已填充的指令按一个预先设定的值领先于正在执行的指令而建立了多少层轨道,所述轨道都可以被建立起来以填充至少包含由所述距离决定的数目对应的全部指令的指令段。所述距离也可以用从当前分支点起的一个距离表示。也就是说,无论为了保证已填充的指令按一个预先设定的值领先于正在执行的指令并掩盖填充延迟而建立了多少层轨道,所述轨道都可以被建立起来以填充至少包含从分支点起对应所述距离的指令的指令段。另外也可以使用其他参数。
此外,在某些例子中,复数个存储块(如:指令段和数据段)可以同时被填充到高层次存储器124中。当填充所述复数个指令段或数据段时,每个段可以被分割为多个小片段,且可以对每个小片段设定一个优先级。这样,不需要一次性地填充整个单独的段。可以基于处理器核125对每个小片段的需求设置优先级,并根据每一个小片段的优先级采用交替机制对不同段的小片段进行填充。
举例而言,如果一个指令段为256个字(1024个字节)长,该指令段可以被分割为四个小片段,每个小片段包含64个字(256个字节)。这样,对于一个从地址0x1FC00000开始的指令段,四个小片段分别从0x1FC00000、0x1FC00100、0x1FC00200和0x1FC00300开始。如果处理器核125需要的指令位于第二个小片段0x1FC00100,那么这个小片段0x1FC00100的优先级就可以被设置为高。这样,填充所述指令段时的填充顺序就可以是0x1FC00100、0x1FC00200、0x1FC00300和0x1FC00000。此外,如果在填充所述从0x1FC00000开始的指令段时,还需要填充另一个或第二个从0x90000000开始的指令段,那么所述第二个指令段也可以被分割为四个小片段,分别从0x90000000、0x90000100、0x90000200和0x90000300开始。如果处理器核125需要的指令在第四个小片段(0x90000300)中,那么所述第四个小片段可以被设置一个高的优先级,且整个填充顺序可以以一种交替的方式依次为0x1FC00100、0x90000300、0x1FC00200、0x90000000、0x1FC00300、0x90000100、0x1FC00000和0x90000200。此外,可以采用更多的段和小片段对高层次存储器124进行填充,而且还可以使用其他配置方式。虽然上述实施例描述的是指令段填充,但数据段填充也可以使用类似的方法。此外,指令段和数据段也可以一起被分段交替填充。
图10A是本发明所述缓存系统的另一个实施例9000。缓存系统9000与图7A中的缓存系统8000类似。然而,如图10A所示,缓存系统9000包含一个交换器133,且缓存系统9000中的分配器1200除包含一个主动表121外,还包含一个保留表120。
保留表与主动表类似,并与主动表一同存储程序中所有分支指令的轨道信息,从而降低主动表121和一级缓存的容量大小。更特殊地,当一条对应一个分支点的轨道已经被建立时,所述分支点的分支目标可以被存储到保留表中。可以在执行流接近于所述分支点时,才根据存储在保留表中的信息建立所述分支目标轨道。
在某些例子中,主动表存储已建立的轨道(如:对应已经被填充到高层次存储器124中的指令段),而保留表存储将建立的轨道(如:对应尚未被填充到高层次存储器124中的指令段)。这样,当建立一条轨道时,一个轨迹点可以对应到主动表中的一个表项(如:一个BN)或保留表中的一个表项(一个TBN)。这里使用的“TBN”,指的是“临时块号”或“临时BN”,并代表了位于与BN所处的号码空间不同的号码空间中的一个号码,因此保留表使用的号码空间与主动表使用的号码空间是相对的。这样,就可以区分一个TBN和一个BN。举例而言,可以用号码的最高位区分一个TBN和一个BN。当轨迹点(如一个分支点)包含的内容是BN时,包含所述分支目标指令的指令段已经被填充到高层次存储器124中。另一方面,当轨迹点包含的内容是TBN时,包含所述分支目标指令的指令段尚未被填充到高层次存储器124中。这样,当一条轨道包含多个分支点时,由于一些分支点可能永远不会被访问到,因此使用TBN代替BN可以减少存储器的填充量并节省一级缓存空间。
这样,一个保留表可以被用于提高系统性能并降低存储容量要求。图12是使用轨道表126、保留表120和主动表121建立新轨道的实施例。
如图12所示,已建立的轨道66(BNX0)可以包含三个分支点67、68和69。为了便于描述,BNX号码被用于标记轨道表126中的轨道或行。当审查分支点67时,分支点67的目标指令的地址被存储到保留表120的表项73(标记为TBNX0)中,且表项73的号码(即TBNX0)被作为第一地址存储在分支点67中。当审查到分支点68和分支点69时,分支点68和分支点69的目标指令的地址也被存储到保留表120中(被标记为TBNX1和TBNX2)。类似地,这两个表项的号码作为第一地址被分别存储到分支点68和69中。
此外,当处理器核125即将执行分支指令67时,保留表120的表项73中的目标地址被转移到主动表121的表项74中。在某些实施例中,主动表121的表项总数等于轨道表126的总行数,使得主动表121的表项与轨道表126的行能有建立一个一一对应的关系。这样,基于对应关系75,可以根据主动表121中的对应表项(BNX1)在轨道表126中建立一条包含分支点67的分支目标新轨道70。分支点67中的TBNX0号码也被替换为BNX1,使得下次这条指令将被执行时,所述BNX1可以在不用到保留表的情况下直接索引到目标轨道以及相应的存储块。
因此,只有当分支指令即将被执行时才建立对应的新轨道。这样,在分支点67被执行前,分支点68和69的目标地址被存储到保留表120中,并不建立分支点68和69对应的新轨道。
回到图10A,当处理器核(125)开启时,重置信号(图中未显示)把主动表121中各表项的有效位置‘0’。当处理器核重置信号释放时,重置向量(重置起点的指令地址值)被放上总线141。因为在保留表120与主动表121中都未寻到匹配,保留表120就把所述地址值放到总线144上送到填充引擎132用于从低级存储器122经总线154获取指令段(如:重置向量)。
指针129通过总线153指向主动表121中当前表项,且指针129同时指向高层次存储器124中的一条指令或存储获取来的指令段的存储块。
生成器130提取出所述指令段中指令相关的轨道信息,并写入轨道表126中由指针129通过地址总线153指向的对应表项。当填充操作完成时,主动表121当前表项的有效位被置为‘1’。之后,指针129移向主动表121的下一个有效表项。
生成器130扫描被填充到高层次存储器124的指令块中每一条指令。当生成器130发现分支指令,则计算出所述分支指令的目标地址。所述目标地址可以表示为包含所述分支指令的指令段的起点地址(源指令段地址)加上所述转移相距所述起点的位移,再加上从源指令到目标指令的分支距离(通常就是分支偏移量)。计算得到的目标地址的高位被用于与保留表120和主动表121中的内容匹配。
若在保留表120和主动表121均匹配不成功,则将所述高位地址写入保留表120中由指针127所指示的表项,同时把指针127的值和目标地址的低位(目标偏移地址)(两者一同组成TBN)放入轨道表126中由总线153(分支源行地址)及由总线143(分支源偏移地址)指示的一个表项中。总线143可以提供一个对应所述分支指令在其所属指令段中偏移量的列地址。
若在保留表120中有匹配,则指向匹配项的指针127的值放和目标偏移量一同作为TBN被写入轨道表126中由总线153(行地址)及总线143(偏移量)确定的表项。若在主动表121中有匹配,则匹配的主动表项和偏移量一同作为BN被写入轨道表126中由总线153(行地址)及总线143(偏移量)指示的表项。以TBN形式出现的目标地址对应的指令尚未被填充到高层次存储器124中,而以BN形式出现的目标地址对应的指令已经被填充到高层次存储器中。
重复上述过程,直到整个指令段都被获取并填充到高层次存储器124中。这样,被动表120、主动表121和轨道表126包含了指令段有关信息,且高层次存储器124包含了整个指令段供处理器核125执行。主动表121包含了指令段的起始(段)地址值以供之后的指令段匹配,而轨道表126包含了该指令段中所有的分支点及对应的目标TBN或BN值。
当循迹器170输出一个BN151用于指示轨道表126中一个表项时,所述表项的内容经读口161被读出。如果所述内容显示不是一个分支点时,那么后续操作与图7A实施例中相应操作相同。然而,如果所述内容显示为一个分支点时,那么将分支目标地址(BN或TBN)读出送往交换器133。
因为分支目标地址可以对应保留表120中的一个表项(即一个TBN)或对应主动表121中的一个表项(即一个BN),因此可以用交换器133对保留表120和主动表121中的表项进行交换。交换器133将TBN通过总线180发送到保留表120以启动从低级存储器向高层次存储器124填充存储块的操作,并在交换完成后输出一个BN。这种预填充保证了当处理器需要执行指令时能在高层次存储器124中找到它们。
如图13所示,交换器133包含一个TBNX表190和一个BNX表191。TBNX表190中的表项对应主动表121中的表项,可以被用于映射从主动表121转移到保留表120中的表项。TBNX表190中每个表项的内容可以包括对应的表项在保留表120中的表项号和一个标志位G位。
BNX表191中的表项对应保留表120中的表项,可以被用于映射从保留表120中转移到主动表中121中的表项。BNX表191中每个表项的内容可以包括对应的表项在主动表121中的表项号(即BN)和一个有效位。
此外,从轨道表126输出到总线150上的轨道信息可以也包含一个与TBNX表190中的G位对应的G位192,用于表示BNX值在当前是真实存在于主动表中的,此时可以直接将所述BNX值输出;否则需要进行映射。
当主动表121中的一个表项被转移到保留表120中时,TBNX表190中对应表项被用于记录表项号(BN)172。类似地,当保留表120中的一个表项被转移到主动表121中时,BNX表191中对应表项被用于记录所述表项的表项号并将有效位置为有效。
当总线150上的轨迹点信息中包含的是保留表120的表项号时,所述表项号TBNX被用作索引从BNX表191中读出BNX值和有效位。若所述BNX值是有效的(即有效位被设为有效),则将所述BNX值输出作为下一BN166中的BNX,并送到循迹器。另一方面,若该BNX值是无效的,则所述TBNX被用作索引通过总线180从保留表120中读出内容,并启动从低级存储器122向高层次存储器124填充所述TBNX对应的存储块的操作。
当总线150上的轨迹点信息中包含的是主动表121的表项号(即BN)时,若总线150上的轨迹点信息中的G位与TBNX表190中对应表项的G位相等时,则将所述BNX值输出作为下一BN166中的BNX。另一方面,若总线150上的轨迹点信息中的G位与TBNX表190中对应表项的G位不等,则保留表120中的表项号从TBNX表190中读出并被用作索引从BNX表191中对应行读出BNX值和有效位。若该BNX值是有效的,则将所述BNX值输出作为下一BN166中的BNX。另一方面,若该BNX值是无效的,则将保留表120中的所述表项号作为索引通过总线180从保留表120中读出内容。
这样,只要TBNX表190和BNX表191中有有效的表项,一个替换模块193就保持对轨道表126的扫描,并从总线159上读入轨迹点信息。若一个轨迹点的轨迹点信息包含主动表121的一个表项号,且该表项号对应TBNX表190中的一个有效表项,则通过总线158输出保留表120的表项号,并将该轨迹点信息改为保留表120中的所述表项号。类似地,若一个轨迹点的轨迹点信息包含保留表120的一个表项号,且该表项号对应BNX表191中的一个有效表项,则通过总线158输出主动表121的表项号,并将该轨迹点信息改为主动表121中的所述表项号。
通过扫描整个轨道表,可以实现TBNX表190中表项与BNX表191中表项之间的交换。这样的交换可以在各种时刻进行。例如,如果主动表容量已满,即表示高层次存储器124容量已满。高层次存储器124中的某些存储块可以被替换,主动表中也是如此。主动表中被替换的表项可以被移动到保留表中,而轨道表中的BNX指引就需要被交换成新的TBNX指引。在交换过程完成后,TBNX表190和BNX表191中之前的表项可以被设为无效。
回到图10A,当分支点内容被送到交换器133,且交换器133完成对轨道表读口161的相应操作时,即意味着高层次存储器124中已有包含分支目标指令的指令段,那么结果BN就被直接输出到循迹器170。后续操作与图7A中的类似。图10B给出了缓存系统9000的一部分,显示了使用被动表120和主动表121操作轨道表126、高层次存储器124和处理器核125的实施例。
如图10B所示,与图7B类似,循迹器170包括自增器136、多路选择器137、和寄存器138。为便于描述省略了其他部件。在操作过程中,循迹器170输出一个地址(即BN151)用于对轨道表126和高层次存储器124进行寻址。BN151包含BNX152和BNY156。BNX152可以被用于对轨道表126中的一个行或一条轨道进行寻址,并对高层次存储器124中的一个存储块进行寻址,此时BNY156可以被用于对轨道表126中由BNX152指向的轨道或行中的一个表项进行寻址。
此外,多路选择器137受来自处理器核125的信号381控制以选择来源于交换器133的下一BN166或来源于自增器136的BN作为输出418。从多路选择器137来的输出418(即下一BN)可以在处理器核125来的信号417的控制下被存储到寄存器138中。当寄存器138受信号417控制保持当前BN151不变时,寄存器138不会更新输出418。另一方面,当寄存器138受信号417控制更新当前BN151时,所述输出418被送到总线151上成为当前BN151,从而更新BNX152和BNY156。
为了描述轨道表126与循迹器170间的相互关系,与图7B类似,假设轨道表126包含了轨道(即:行)410、411和412。每条轨道可以包含从0号到15号的16个表项或轨迹点。此外,轨迹点413(轨道410中的第8项)可以是一个分支目标为轨迹点414(轨道411中的第2项)的分支点,以及轨迹点415(轨道411中的第14项)可以是另一个分支点,其分支目标是轨迹点416(轨道412中的第5项)。
假设轨道410对应的指令段已经被填充在高层次存储器124中,且处理器核125从轨道410的起始位置开始执行指令。这就是说,处理器核125的程序计数器(PC)从轨道410中的第0项对应的指令地址开始运行。
同时,假设循迹器170也送出一个包含BNX和BNY的指向轨道表126中轨道410的第0项的读指针151。轨道410中的其他表项也可以被用到。可以通过检查所述表项中的内容确定指令的类型信息和地址信息等。
正如之前所述,当从轨道410的第0项开始运行时,由于轨道410的第0项不是一个分支点,循迹器170保持BNX152不变并通过自增器136将BNY增加一,从而得到对应轨道表126中轨道410中的下一个表项的下一个BN。循迹器170不断增加BNY从而向轨道410中的下一表项移动,直到到达一个分支点,如:轨迹点413(轨道410中的第8项)。在这个过程中,由于BNX没有变化,因此指令段地址没有变化。处理器核125可以利用PC的偏移量从高层次存储器124中不断获取指令。
当循迹器170提供的指针151到达轨迹点413(轨道410中的第8项)后,由于轨迹点413是一个分支点,因此对源地址(即指针151的值)和表项内容即目标地址都进行分析。交换器133可以按BN形式或TBN形式对目标地址进行检查。如果目标地址是一个BN,那么所述目标地址对应的指令段已经被填充到高层次存储器124中并准备被处理器核125读取。另一方面,如果目标地址是一个TBN,那么所述目标地址对应的指令段尚未被填充到高层次存储器124中。这样,如果TBN对应的指令段不在高层次存储器124中,那么所述指令段被填充到高层次存储器124中。而且如之前所述,交换器133将TBNX转换为BNX并将BNY的值设为TBNY的值。这样,交换器133就能提供一个BN,所述BN被送出作为下一BN166。无论表项内容是BN还是TBN,交换器133都能提供一个BN作为下一BN166。
此外,如果包含源地址下一指令的指令段尚未被填充到高层次存储器124中,那么该指令段也被填充到高层次存储器124中以供处理器核125可能的执行。然而,对于轨迹点413,由于下一指令是轨道410的第9表项且对应轨道410的指令段已经被填充到高层次存储器124中,因此轨迹点413的下一指令不需要填充。这样,只有当包含分支目标(轨道411的第2表项)的轨道411对应的指令段尚未填充时,才被填充到高层次存储器124中。
由于循迹器170沿所述指令轨迹点移动的速度比处理器核125执行指令的速度,处理器核125可能执行的两个指令段都能在处理器核125执行这两个指令段中任何指令之前被填充到高层次存储器124中。这样就不会发生缓存缺失。BNY156可以被视为领先指针的一部分(BNX在同一轨道中不变)以在处理器核125执行指令之前将处理器核125可能执行的指令填充到高层次存储器124中。
这样,由于保留表120中的TBNX不会自动填充高层次存储器124,因此可以在短时间内生成大量轨道或轨道表126中的表项。可以在执行流接近所述指令(如:分支目标指令)时才将所述指令填充到高层次存储器124中。
此外,当到达轨迹点413且相关指令段已经被填充到高层次存储器124中时,轨道表126或交换器133可以提供分支目标BNX为411及BNY为2作为下一BN166(轨道411的第2表项),且循迹器170可以等待轨迹点413的分支指令被处理器核125执行时送来的表示分支转移是否发生的信号381。
若如本实施例中发生分支转移,则轨道表126或交换器133将下一BN166作为BN151供循迹器170使用,其中BNX指向轨道411且BNY指向轨道411的第2个表项。同时BNX也被用做一个对应高层次存储器124中指令段的地址,这样处理器核125可以从轨道411的第2个表项开始执行指令。然而,如果分支转移没有发生,循迹器170或领先指针如同将分支点简单视为一个非分支点向前移动。
类似地,从轨道411的第2个表项开始,循迹器170找到下一个分支目标为轨迹点416(轨道412的第5个表项)的分支轨迹点415(轨道411的第14个表项)。接着,如果对应轨道412的指令段尚未被填充到高层次存储器124,则将该指令段填充到高层次存储器124中,且如上所述,领先指针等待轨迹点415分支指令执行。
此外,上述讨论基于的是一层的轨道操作。也就是说,领先指针听在第一个分支点,即对应第一个分支点的两个可能分支结果进行相应的填充操作。轨道表126也可以支持两层的轨道操作或多层的轨道操作。例如,在一个两层的轨道操作中,领先指针可以停在所述第一个分支点之后的第一个分支点。这样,所述两个分支点的四个可能结果对应的指令都被填充到高层次存储器124中。类似地,可以用多层的轨道操作填充更多的指令。
可以理解的是,虽然保留表120、主动表121和交换器133被用来实现更为灵活和高效的填充高层次存储器124的操作,但是正如之前所述,也可以用一个表或其他结构实现。
此外,回到图10A,在操作中,更多的轨道可以被添加到轨道表126中,且对应的指令被填充到高层次存储器124中。然而,轨道表126和/或高层次存储器124的容量是有限的。需要一个替换机制对轨道表126中的轨道和/或高层次存储器124中的指令段进行替换。例如,可以使用一个基于主动表121、保留表120和轨道表126的替换机制。具体地,可以确定主动表121中可被替换的表项。
假设轨道表126通过总线180送来的内容TBNX值‘118’被用于填充一个指令段到高层次存储器124中,所述TBNX值‘118’对应的指令段地址0x1FC0存储在保留表120中,且主动表121中总线153指向的表项存有一个BNX值‘006’,其对应的指令段地址为0x4000。这样,读出保留表120中的地址0x1FC0送到总线144用于替换主动表121中的地址0x4000,且地址0x1FC0被送到填充引擎132用于将从地址0x1FC0开始指令段填充到高层次存储器124中以替换从地址0x4000开始的指令段。此外,对应地址0x4000的含有BNX值‘006’的表项被移动到保留表120中由指针127指向的表项中。
也可以使用一种替换策略确定应该替换轨道表126中哪个表项或存储单元。例如可以采用最近最少使用策略或最少频繁使用策略。当采用最近最少使用策略时,每个轨道或轨迹点包含一个使用位(U位);当采用最少频繁使用策略时,每个轨道或轨迹点包含一个记录使用次数的计数器。
在某些情况下,可以使用超过一层的缓存结构。分配器1200或主动表121可以被用于支持超过一层的缓存结构。图11A显示了用于多层缓存结构的分配器或保留表的一个实施例。
本实施例以三层存储层次为例,分别为三级,二级与一级。为了便于说明,假设这三层存储器都被用做指令存储器(数据存储器也类似)。二级存储器的容量是一级存储器容量的两倍(即,一个二级存储器块可以包含两个一级存储器块),三级存储器容量是二级存储器容量的两倍(即,一个三级存储器块可以包含两个二级存储器块或四个一级存储器块)。一级存储器作为高层次存储器直接连接至处理器核125。对于更多存储层次的情况,也可用应用本发明所述方法。
此外,为便于描述,三级存储器包含了二级存储器和一级存储器中的所有内容,但二级存储器不一定包含一级存储器中的内容。虽然没有在图中显示,可以使用一个轨道表建立在这三层存储器中的指令的轨道,且每个轨迹点(如分支点)可以用图11A中所示的两种格式之一表示。一种格式包括两个部分,从高位到低位分别是一级存储器索引地址的块地址部分,和轨道内或存储块内的偏移量部分。另一种格式包括三个部分,分别是三级存储器索引地址的块地址部分、索引和偏移量部分。
如图11A所示,分配器1200或保留表120可以包含一个内容寻址存储器(CAM)87和一个随机访问存储器(RAM)98。CAM87包含一列表项,CAM中的每一个表项对应一个三级存储块号码BNX3。这样,每个表项可以包含一个对应特定的BNX3的三级存储器存储块的地址。
此外,RAM98可以包含6列,其中两列88用于存储对应特定三级存储块的两个二级存储块号BNX2及有效位,其他四列89用于对应所述三级存储块的四个一级轨道号BNX1及有效位。多路选择器93可以根据索引位97选择一个对应所述三级存储块的特定的一级存储块号码或轨道号。类似地,多路选择器92可以根据索引位97,更准确地说是索引位97中的高位LSB190选择一个对应所述三级存储块的特定的二级存储块号码或轨道号。
此表可以由两种方式访问。一种是利用存储地址(如:三级存储块地址)搜索CAM87。如果有地址匹配,那么选择CAM中的匹配表项,并将对应的RAM98中的内容读出。另一种是用三级存储块号TBN的第一地址BNX394在CAM87和RAM98中直接寻址,读出CAM87和/或RAM98中被选中的行的内容。
如之前例子所述,在将指令段从主存储器或任何外部存储器填充到这所有三级的存储器中时,扫描、检测所述被填充的指令。当检测到分支指令时,所述分支指令的分支目标地址被用来与CAM87中存的三级存储器块地址作比较。
如果没有找到匹配,这意味着在三级存储器中还未包含所述分支目标地址对应的指令段。这时根据某种准则,如替换策略,选定三级存储器中一个三级存储块,把分支目标所在的指令段填充到该存储块。同时,将所述选定的三级存储器中存储块地址信息作为轨迹点内容填入在一级轨道表中所述分支点的对应表项。所述选定的三级存储块的块号被用做第一地址BNX394,存储地址中的索引部分被用做索引号97,且存储地址中的偏移量部分被用做偏移量(BNY)96。此外,索引号97可以包含2位,其中的高位LSB190被用于区分二级存储器中的两个存储块,高位LSB1和低位LSB097一起被用于区分一级存储器中的四个存储块。
另一方面,如果找到匹配,则表明至少在三级存储器中存储有所需的指令块。这时将匹配到的BNX3和索引号、偏移量一同作为轨迹点内容填入轨道表项。
在运行过程中,当领先指针到达上述轨道表项时,所述轨道表项或轨迹点显示的分支目标地址是三级存储器的TBN。可以使用该TBN中的第一地址94到CAM87和/或RAM98寻址。
具体地,可以使用一级轨道的第一地址94(BNX3)对RAM98寻址并读出对应的两个二级轨道号和有效位以及四个一级轨道号和有效位。多路选择器93根据索引位97(即:LSB1、LSB0)和有效位V从四个一级块号中选出一个有效的一级轨道号。此外,多路选择器92根据索引高位90(即:LSB1)和有效位V从两个二级块号中选出一个有效的二级轨道号。
如果选出了一个有效的一级轨道号,说明所述目标地址对应的指令段已经被填充到一级存储器中,直接将所述有效的一级轨道号送到总线99以替换所述分支指令的第一地址。同时,抛弃相应的索引,块内偏移(BNY)不变。这样TBN就成为了BN。此外,由于一个三级存储块含有四个一级存储块,仅凭BNX394并不能确定一个一级存储块号。BNX3与索引97一起确定特定的一级存储块号。在四个一级存储块中,可以包含对应三级存储块的零个、一个、两个、三个或四个一级存储块。类似地,在两个二级存储块中,可以包含对应三级存储块中的零个、一个、或两个一级存储块。
另一方面,如果没有有效的一级轨道号被选出,说明所述目标地址对应的指令段尚未被填充到一级存储器中。如果一个有效的二级块号被选出,那么意味着目标地址对应的指令段已经被填充到二级存储器中,则可以将有效的二级块号送到总线91。这时可以从二级存储器中将与这个二级存储块号对应的指令段填充到一级存储器中,同时更新RAM98中相应的一级存储块的块号和有效位以对应所述填入的指令段。例如,可以更新RAM98中由BNX3和所述索引指向的表项中的一级块号(BNX1)及其有效位,并将所述轨道表项内容格式更新为使用一级轨道的BN号码。所述BN号码包含一个第一地址(即:BNX1)和一个第二地址(即:偏移量或BNY)。
如果没有有效的二级轨道号被选出,意味着目标地址对应的指令段尚未被填充到二级存储器中,那么从三级存储器中将所述三级轨道号对应的指令段填充到二级存储器与一级存储器中。RAM98中的相应部分也要被更新以对应一级存储器和二级存储器中的所述被填入的指令段。例如,可以更新RAM98中由BNX3和所述索引指向的表项中的一级块号(BNX1)及其有效位,并将所述轨道表项内容格式更新为使用一级轨道的BN号码。如果也填充了二级存储块,那么还可以更新RAM98中由BNX3和所述索引指向的表项中的二级块号(BNX2)及其有效位。
当指令段被填充时,所述指令段可以先从三级存储器填充到二级存储器,再从二级存储器填充到一级存储器。或者,在三级存储器与一级存储器之间有独立通路的情况下,可以在将所述指令段从三级存储器填充到二级存储器的同时,将所述指令段从三级存储器填充到一级存储器。此外,如果一级存储器中的轨迹点只包含一级轨道信息,也可以用与之前类似的方法进行操作。
图11B是图11A所述结构的一个运行实施例。如图11B所示,一个32位处理器核被用来描述该实施例,且该处理器核的指令地址空间为32位、每条指令长度为32位。此外,假设一级存储器中的每个指令段包含16条连续的指令,二级存储器中的每个指令段包含32条连续的指令,三级存储器中的每个指令段包含64条连续的指令。这样,三级存储器中的一个指令段对应二级存储器中连续的两个指令段或一级存储器中连续的四个指令段,以及二级存储器中的一个指令段对应一级存储器中连续的两个指令段。
此外,一个32位的地址(第0位到第31位)可以根据不同的目的被分割成不同的部分。例如,可以将最低的两位(LSBs),即第0位到第1位用于对指令中的单独一个字进行寻址。此外,第2位到第5位可以作为指令段中的偏移量,即图11A中的偏移量96,用于对指令段中的16条指令进行寻址;第6位到第7位可以作为一个索引,即图11A中的索引97,用于对三级存储器中的四个指令段进行寻址(第6位也可以被用于对二级存储器对应于一级存储器的两个指令段进行寻址,且第7位可以被用于对三级存储器对应于二级存储器的两个指令段进行寻址);第8位到第31位可以被用于对三级存储器中的指令段进行寻址,即CAM87中的地址。
CAM87中的表项号‘0’(424)包含一个有效地址0xD5A00B,表示指令段1、2、3、4这四个指令段已经被填充到三级存储器中。然而,RAM98中对应的6个表项都是无效的(这些表项的有效位都为‘0’),表示三级存储器中的这四个指令段并没有被填充到二级存储器和一级存储器中。
CAM87中的表项号‘2’(425)包含一个有效地址0xFFC000,表示四个指令段已经被填充到三级存储器中。此外,RAM98中对应的表项428是有效的,表示(四个指令段中的)指令段3、4已经被填充到二级存储器中,且对应的二级存储器轨道号‘2-11’被存储到表项428中。RAM98中对应的表项433也是有效的,表示指令段3已经被填充到一级存储器中,且对应的一级存储器轨道号‘1-25’被存储到表项433中。
CAM87中的表项号‘4’(426)包含一个有效地址0x387005,表示四个指令段已经被填充到三级存储器中。此外,RAM98中对应的表项430和表项429都是有效的,表示四个指令段已经被填充到二级存储器中,且对应的二级存储器轨道号‘2-23’和‘2-7’被分别存储到表项430和表项429中。RAM98中对应的表项432和表项434也是有效的,表示指令段4和指令段1已经被填充到一级存储器中,且对应的一级存储器轨道号‘1-60’和‘1-3’分别被存储到表项432和表项434中。
CAM87中的表项号‘5’(427)包含一个有效地址0x092001,表示四个指令段已经被填充到三级存储器中。此外,RAM98中对应的表项431是有效的,表示(四个指令段中的)指令段1、2已经被填充到二级存储器中,且对应的二级存储器轨道号‘2-43’被存储到表项431中。RAM98中对应的一级存储器表项是无效的,表示这四个指令段都没有被填充到一级存储器中。
可以用一条分支指令的目标地址作为与CAM87中内容进行匹配的输入,而CAM87和RAM98中的内容可以是三级轨道号(TBN)。当生成器186扫描并分析被填充的指令时,分支指令的目标地址被用于与CAM87中的内容进行匹配。具体地,目标地址的第8位到第31位被送到CAM87与CAM87中的所有内容进行匹配。如果匹配成功,表示目标地址对应的指令段已经被填充到三级存储器中。RAM98中对应的一级表项被读出,且目标地址中的索引位(即第6位到第7位)被送到选择器93以选出表项的轨道号及有效位。如果选出的表项是有效的(有效位为‘1’),被选出的一级轨道号被作为分支指令轨迹点内容中的第一维地址(如:实际地址)。如果该一级轨道号是无效的,那么这个指令段还没有被填充到一级存储器中。该三级轨道号(TBN)就被作为分支指令轨迹点内容中的第一维地址。
另一方面,如果匹配不成功,表示该指令段还没有被填充到三级存储器中。正如之前所述,可以根据特定算法,如LRU(最近最少使用)算法,生成一个新的三级轨道号(TBN),之后将这个刚生成的三级轨道号(TBN)作为分支指令轨迹点内容中的第一维地址。同时,根据这个三级轨道号(TBN)将指令段填充到三级存储器中。
当循迹器指针BNY指向分支指令轨迹点,且该轨迹点内容包含一个三级轨道号(TBN)时,这个三级轨道号(TBN)被用于对RAM98进行检索。例如,如果该三级轨道号(TBN)是‘4’且索引是‘1’,那么选择器92的输出91是表项430中的有效二级轨道号‘2-23’,而选择器93的输出99是表项435中的无效值。这就是说,已经填充到二级存储器中的指令段还没有被填充到一级存储器中。
这样,可以采用特定算法,如LRU算法,生成一个新的一级轨道号,并根据该新生成的轨道号BN将二级存储器中由二级轨道号‘2-23’标识的指令段填充到一级存储器中,而这个一级轨道号BN也被存储到表项435中。在填充指令段的同时,该指令段也被扫描并分析,从而在轨道表中建立一个对应的轨道。
再例如,如果三级轨道号(TBN)是‘4’且索引是‘0’,那么选择器93的输出99是表项434中的有效轨道号‘1-3’。这就是说,指令段已经被填充到一级存储器中,且选择器92的输出91可以被忽略。
再例如,如果三级轨道号(TBN)是‘0’且索引是‘2’,那么选择器93的输出99是表项437中的无效值。那么生成一个新的二级轨道号和一个新的一级轨道号,并将三级存储器中由三级轨道号(TBN)‘0’标识的指令段根据新生成的一级轨道号和二级轨道号填充到一级存储器和二级存储器中。此外,该一级轨道号和二级轨道号也被分别存储到对应的表项437和436中。
图14A是本发明所述缓存系统的另一个实施例10000。缓存系统10000与图10A中的缓存系统9000类似。然而,缓存系统10000包含了用于支持多线程程序的某些特征。
轨道表126中不同的轨道可以对应一个线程或多个线程。由于在线程内容切换时需要保存和恢复线程状态,因此使用了复数个栈135,用于分别保存线程压栈的信息。一个线程标识(PID)188存储了当前线程标识或线程号。当循迹器170使用栈135时,PID188提供一个指向所述栈的指针,从而进行正确的栈操作。
此外,可以在低级存储器122外提供一个第二填充/生成器187。填充/生成器187中的生成器186与填充生成器123中的生成器130类似,但比生成器130有更高的带宽。也就是说,生成器186可以一次对更多的指令进行扫描和审查。此外,填充/生成器187对保留表120的操作也与填充生成器123对主动表121的操作类似。这样,填充引擎185将对应于保留表120中地址的指令段从更低层次存储器(图中未显示)填充到低级存储器122中。这样,对应于保留表120中地址的指令段就存储在低级存储器122中,从而减少或消除了等待处理器核125取指的时间。
此外,不同的轨道可以对应同一个指令段(同一个指令段可以因具有不同的虚拟地址而被存储在不同的一级缓存存储块中)。填充/生成器187也可以包含一个位于填充引擎185之外的翻译转换缓冲(TLB)131,使得低级存储器122和高层次存储器124中的指令都处于物理地址模式,而处理器核125可以在不进行虚拟到物理地址转换的情况下直接从高层次存储器124获取指令。
图14B显示了缓存系统10000中一个组成部分。如图14B所示,主动表121中的每一个表项可以对应高层次存储器124中的一个存储块或指令段,并对应轨道表126中的一条轨道。这样,可以通过主动表121管理高层次存储器124。另一方面,低级存储器122也可以作为缓存使用,并可以通过保留表120管理低级存储器122。这样,保留表120中的每一个表项可以对应低级存储器122中的一个存储块或指令段。此外,为便于描述,假设高层次存储器124和低级存储器122是互不包含的。换句话说,任何一个存储地址对应的内容或存储块不会同时存在于高层次存储器124和低级存储器122中。
当指令被填充到高层次存储器124中时,生成器扫描并审查所述指令,并可能在轨道表126中建立一条包含分支点的轨道。将所述分支目标地址与主动表121中的表项进行匹配。如果匹配成功,表示已经有一个相应的存储块被填充到高层次存储器124中,那么在轨道表126中以BN格式将高层次存储器124中匹配成功的块号记录为分支目标地址。然而,如果匹配不成功,表示相应的存储块还没有被填充到高层次存储器124中,那么在保留表120中对分支目标地址进行匹配以开始填充过程。可选地,分支目标地址可能同时在保留表120和主动表121的表项中同时匹配成功。
如果在保留表120中匹配成功,表示相应的指令段已经被填充到低级存储器122中,那么在轨道表126中以TBN格式将低级存储器122中匹配成功的块号记录为分支目标地址。如果在保留表120和主动表121中都没有匹配成功,填充引擎185将相应指令段从外部存储器(图中未显示)通过总线423填充到低级存储器122中。虚拟到物理地址转换器131可以对虚拟地址和物理地址进行转换和翻译。这样,被填入低级存储器122中的存储块包含了相应的指令段,并在轨道表126中以TBN格式将低级存储器122中的被填充的存储块号记录为分支目标地址。
在运行过程中,当领先指针156到达轨道表126中的一个包含TBN格式的分支目标地址的分支轨迹点时,如之前所述,在主动表121中产生一个BN,并将相应指令段从低级存储器122填充到高层次存储器124中。此外,轨道表126中的TBN被替换为所述BN,并清除存储在保留表120中的对应所述TBN的TBNX。
这样,当对应保留表120中表项的一个指令段被填充到高层次存储器124中时,相关的TBN被替换成BN。类似地,当对应主动表121中表项的一个指令段被替换或回填到低级存储器122时,相关的BN就被替换成TBN。通过对保留表120和主动表121中表项的交换,可以实现高效率的多层次缓存运作。
虽然在不同的附图中分别给出了不同的实施例,这些实施例可以被独立地实现,也可以在某种组合的情况下被实现。这样,在不背离本发明原则的前提下,这些实施例中的不同部件可以被单独使用,也可以被组合使用。为便于描述,下面给出了一些具体的例子。
例如,生成器130可以被用于提取分支源地址,从而对轨道表126的写入做地址索引。一个源地址(如一个指令的地址)可以被分析得到两种格式。在一种格式中,用一个高位地址部分、一个索引部分和一个偏移量部分在具有多层缓存层次或存储层次的情况下代表所述地址,在另一种格式中,用一个高位或块地址部分和一个偏移量部分代表所述地址。在某些情况中,可以用一个高位地址部分、一个索引部分和一个偏移量部分代表所述分支源地址。此外,可以直接用BNY作为所述偏移量部分,而所述高位地址和索引被送到分配器1200转换为一个块号。生成器130也可以被用于提取指令类型(如:无条件分支、条件分支、非分支(包括装载、存储指令等))。
此外,生成器130可以被用来通过将分支源地址加上分支偏移的方法计算分支目标地址,其中所述分支源地址可以是包含所述分支源指令的指令段的块地址加上所述分支源指令在指令段中的偏移量,而所述分支偏移可以是一个跳转的量。所述分支目标地址的高位地址和索引被送到总线141与分配器1200(如:主动表121、保留表120)中CAM的内容进行匹配。所述偏移地址被送到总线143WYADDR作为轨道表126的Y写地址。一个针对轨道表126的写地址可以是一个用于在轨道表126中建立轨迹点表项的地址,包含一个对应于XADDR的行地址(X地址)和一个对应于YADDR的列地址(Y地址)。
这样,生成器130提供了所述分支源地址作为轨道表126的写地址,并提供了指令类型和分支目标地址作为轨道表126的写入内容。生成器130生成除写地址中X地址之外全部地址,而X地址由分配器1200修改或分配。所述X地址可以是一个对应特定高位地址的块号码(BN),该高位地址本身可能太长且不连续。例如,一个18位的高位地址对应了256K个不同的存储块,但用BNX号码将该高位地址分配到256个块则只需要8位即可。
轨道表126可以被配置成一中二维表结构,其中,由X地址或第一地址BNX对每一行索引,对应一个存储块或一个存储行,由Y地址或第二地址BNY对每一列索引,对应相应指令(数据)在存储块中的偏移量。简单来说,轨道表的写地址对应分支源指令地址。此外,对于一个特定的分支源地址(如:高位地址、索引、偏移量),分配器1200(即主动表121)根据所述高位地址和索引分配一个BNX到总线153,而BNY就等于所述偏移量。然后,所述BNX和BNY就可以组成一个指向被写表项的写地址。
此外,对于分支点,其分支目标地址(高位地址、偏移量)被送到主动表121对高位地址进行匹配,且主动表121可能分配一个BNX。所述分配的BNX与从生成器130来的指令类型和偏移量(BNY)一起,组成轨道表中所述分支源指令对应表项的内容。
轨道表126也可以被用来实现其他目的。例如,在一个系统中,轨道表126可以被用来实现对处理器核125的自动功耗管理。例如,可以指定轨道表126中的一条轨道用于存储一个当处理器核125处于空转状态时执行的空转任务(即一条空转轨道)。这样,所述系统可以记录空转轨道被使用或访问到的百分比。系统可以通过将该百分比与一个预先设置的值或一组预先设置的值比较,调整处理器核125和所述系统的功耗。调整方法可以包括改变时钟频率或调整对处理器核125及所述系统的供电电压。
循迹器170可以被用于向轨道表126提供一个读指针151。读指针151也可以是BNX和BNY的形式。由读指针指向的轨道表项的内容与所述表项的BNX和BNY(源BNX和源BNY)一起被读出并被交换器133检查。如果所述表项内容包含的是一个TBN,那么其中TBNX被送到分配器1200处理或转换为一个BNX并填充一级缓存,之后所述BN(BNY等于所述TBNY的值)被交换器133送到循迹器170。循迹器170可以根据所述内容进行多种不同步骤。例如,如果所述表项不是一个分支点,循迹器170可以用新BNX等于源BNX、新BNY等于源BNY加一的方法更新读指针。
如果所述表项是一个条件分支,循迹器170获取到目标BNX和BNY(即第一地址和第二地址),并将目标BNX和BNY送到分配器1200(即主动表121)以填充高层次存储器124或一级缓存。此外,循迹器170可以等待处理器核125送来的对应所述分支点的控制信号。如果所述控制信号表明该分支没有发生,循迹器170可以用新BNX等于源BNX、新BNY等于源BNY加一的方法更新读指针。然而,如果所述分支成功发生,循迹器170可以用新BNX等于目标BNX、新BNY等于目标BNY的方法更新读指针。
如果所述表项是一个无条件分支(或跳转),循迹器170可以将其视为一个条件成立的条件分支,也就是用新BNX等于目标BNX、新BNY等于目标BNY的方法更新读指针。
此外,如果所述表项是一条“调用”指令,循迹器170可以将当前指针的BNX和BNY对压入一个栈,读出表项内容或表示对应指令段已经存储在一级缓存中的目标BNX。此外,如果所述表项是一个“返回”指令(如:子程序的末尾),循迹器170可以从所述栈中弹出所述BNX和BNY对,并用新BNX等于出栈BNX、新BNY等于出栈BNY的方法更新读指针。在某些情况下,如果子程序要求返回到“调用”指令的后一条指令,则此时新BNY等于出栈BNY加一。
此外,如果所述表项是一个异常处理指令,循迹器170可以读出保存在异常BN寄存器(EXCP)中的块号BNX和偏移量BNY,并用新BNX等于异常BNX、新BNY等于异常BNY的方法更新读指针。特定处理器的异常处理程序的起始地址通常是固定的,可以将异常处理程序的起始段填充到一级缓存中并在轨道表中建立相应的轨道(两者都可以设置为不被替换)。
分配器1200可以由一个一维的多表项列表构成。每个表项包括一个含高位地址的CAM和一个含BN、有效位、U位及其他标志位的RAM。分配器1200包含一个自增器(APT)129和一个加法器以指向一个表项,所述列表可以被一个TBNX(如图10A)索引(寻址)。当需要进行缓存填充时,填充APT129指向的表项、其对应的存储块以及轨道表项。
在某些情况下,分配器1200(如:保留表120、主动表121等)可以被用于提供一个地址-BNX-TBNX的号码映射关系。例如,TBNX可以被用于索引高位地址或BNX,高位地址可以被用于通过高位地址匹配找到BNX或TBNX。当填充一级缓存时,生成器130计算出分支目标地址并将高位地址经总线141送到保留表120的CAM部分以进行高位地址匹配。如果匹配不成功,分配器1200可以将指针127指向的表项号码作为TBNX,并使用该TBNX作为轨道表内容。同时,分配器1200可以填充所述TBNX对应的二级缓存块。另一方面,如果匹配成功,分配器1200可以找到对应的TBNX,并将所述TBNX作为轨道表内容。
此外,在循迹器170的运行过程中,当轨道表读指针151指向一个含有TBN的轨道表项时,所述TBN被通过读口161读出并被送到总线180以索引保留表120(即,检查二级缓存中是否有相应的指令段)。如果不存在有效BN,将APT129指向的BNX存储到该TBN的RAM部分的表项中,且用所述BN替换轨道表126中的所述TBN。此外,二级缓存中相应的指令段被填充到一级缓存由BN索引的缓存块中。然而,如果存在有效BN,意味着在一级缓存中已经存在该表项对应的指令段,那么用所述有效的BN替换所述TBN。当然,当轨道表读指针151指向一个内容包含BN的表项时,因为所述相应的指令段已经存储在一级缓存中,因此分配器1200不需要进行检查。
此外,分配器1200也可以针对主动表121和保留表120支持不同的结构。例如,对于主动表121和保留表120中表项的包含关系,分配器1200可以有两种配置方式。
在一种配置方式中,如图13中描述的那样,主动表121和保留表120之间产生一种不包含的关系。为产生这种不包含关系,保留表120和主动表121各自拥有用于存储高位地址的CAM。从生成器130来的地址被同时送到主动表121和保留表120以匹配从而得到TBNX或BNX。然而,只可能在主动表121和保留表120中的一个匹配成功,而不可能在主动表121和保留表120中同时匹配成功,也就是说一条特定的指令只可能存在于一级缓存和二级缓存之一之中,而不可能同时存在于两者之中。如图11所示,保留表120由TBNX索引,其CAM存储了高位地址,其RAM存储了对应的BNX号码。可以用一个索引对同一行或表项中的多个BNX进行选择。此外,主动表121由BNX索引,其CAM存储了高位地址,其RAM存储了TBNX号码。
在一种配置方式中,主动表121和保留表120之间产生一种包含的关系。在这种关系下,只有保留表120的CAM中存储了高位地址,保留表120可以由图11中类似结构组成。然而,主动表121并不具有CAM部分,因此生成器送来的一个地址只在保留表120中进行匹配,这意味着如果一条特定的指令如果存在于一级缓存中,那么必然存在于二级缓存中。此外,主动表121由BNX索引,其内容仅仅是TBNX。当一个一级缓存块被清除(或被替换)时,所述旧的BNX被送到主动表121寻找一个TBNX以便存储到轨道表126中。对于数据存储器而言,一级缓存块必须被存储回保留表120对应的缓存存储器中。
在某些情况下,可以使用一个一层缓存系统。这样,保留表表项可以由对应主存储器而非缓存存储器中一个存储块的TBNX索引,所述主存储器地址的高位地址被存储到对应的CAM项中。与通常一样,RAM部分包含BNX。这样,TBNX被临时保存在轨道表项中直到轨道表126的读指针接近所述表项,使得所述高位地址对应的存储块可以被填充到缓存(一级缓存)中。之后,也可以指定一个BNX替换轨道表126中的所述TBNX。这个BNX也可以被保存在保留表项中由所述TBNX索引的RAM部分中。
此外,分配器1200可以被用于辅助一级缓存替换策略的实现。例如,分配器1200可以支持最近最少使用策略和最少频繁使用策略。
在最近最少使用策略情况下,分配器1200可以使用一个由主指针129(APT)和清除指针构成的最近最少使用窗口,以找到下一个可被替换的存储块。清除指针在主指针129(APT)之前N个表项的位置移动,其中N是可变量,清除指针用于清除指向的表项中的U位(设为‘0’)。另一方面,被访问到的表项对应的U位被重新设为‘1’。检查主指针129(APT)指向的表项的U位以决定是否替换该表项。如果U位为‘1’,表示该表项最近被访问过,并不是最近最少使用的,那么主指针129增加并检查下一个表项。如果U位为‘0’,主指针129可以停留在该表项进行替换。
在最少频繁使用策略情况下,分配器1200可以使用如上述一样的窗口,但使用一个记录存储访问次数(表示访问频率)的计数器代替U位。将主指针129指向的表项中的计数器的值与处理器核125或其他设备设定的一个调整值进行比较。如果计数结果小于调整值,主指针129可以停留在该表项进行替换。
交换器133可以被用于辅助轨道表126与分配器1200之间的交互。例如,在轨道表126中,当分配一个BN以替换TBN时(例如,当一个二级缓存块被填充到一个一级缓存块中时),或分配一个TBN以替换BN时(例如,当由于一级缓存空间不足,一个一级缓存块因并不存在与二级缓存中而被替换回二级缓存时),交换器133在旧的TBNX(BNX)被重新使用前,将轨道表126中所有旧的TBNX(BNX)替换为新的BNX(TBNX)。这样,同一个BNX就不会对应到两个不同的PC地址。
具体地,交换器133可以在分配操作开始的使用就存储一组旧TBNX和新BNX对,交换器133沿轨道表移动到底,再从轨道表126的顶部开始直至到达出发点,利用额外的读端口总线159和额外的写端口总线158,将所有旧的TBNX替换为新的BNX。同时,交换器133在将BN送到循迹器170之前,将每一个读出内容中旧的TBNX替换为新的BNX。
此外,轨道表126、主动表121和保留表120也可以被压缩以节省各个表的存储空间。图15显示了本发明所述的表压缩结构的实施例。如图15所示,轨道表126可以包含一个压缩的轨道表1262、一个映射表156和一个标志表153。轨道表1262可以存储分支目标信息,但表项比原始轨道表少得多,且轨道表1262中的表项可以具有与原始轨道表126中表项相同的结构。标志表153是存储了最后被写入的轨道表1262中表项的号码的表。表1262、156和153具有相同数目且互相对应的行。此外,轨道表1262中的每行具有一个大于或等于每行可能拥有的分支指令的最大数目的第一数目列数。映射表156具有一个对应于该行包含的指令总数加1的第二数目列数,即增加了一个结尾列,使得每行结束时能跳转到后续指令所在的行的起始。其中,标志表153只有一列。这三张表一起构成轨道表126。
在操作中,初始化标志表153的所有行使之为“1”。当轨道表1262被填充时,一个外部来源提供一个行地址BNX,一个列地址BNY和内容(如:分支目标信息)。选择表1262、156和153的相同行进行合适的填充。表153中被选择的行用于从表1262中选择一个列以存储分支信息,即,表1262中相关列的标志。表153中被选择的行的内容被用于从轨道表1262中选择一个列以存储分支目标信息(类型、目标BNX,目标BNY)。该列地址也被称为MBNY(映射BNY)。该MBNY也被写入表156被选择的行中以列地址BNY索引的位置。由表156中被选择的行的内容标志的轨道表1262中被选择的行的相关列被选出以存储分支目标信息(即,轨道表内容)。这样,可以由映射表156对BNY和轨道表1262中列号码之间的映射关系进行维护。表153中被选择的行的内容被增加‘1’以指向表1262中的下一个有效列。在读操作过程中,在表156中用BNX选择一个行,并用BNY选择一个列。表项中的内容MBNY指向表1262中的一个列,是分支指令的表项点。
当进行读操作时,BNX被用于从表1262、156和153中选择一行,而BNY被用于从映射表156中选择一个列。表156中由BNX和BNY指示的表项的内容被读出,该内容指向表1262中的一个相应的列。这样,轨道表1262中的表项被读出以获取需要的分支目标信息或之前存储的其他信息。由于分支指令通常占指令总数的1/6,而表156中的表项只需要保存一个简单的内容(即,只需要表1262的列号码),因此占用比表1262更少的存储空间。因此,整个轨道表126的存储大小可以被充分地减少,且由于领先指针直接从一个分支点到下一个分支点,因此领先指针也可以移动得更快。
在某些实施例中,轨道表1262中表项的内容可以是不同格式,以加强轨道表的循迹(如:通过循迹器170)。如图15所示,轨道表1262的表项可以有如下格式631,包含一个类型,一个BNX和一个MBNY。‘类型’部分可以表示一条指令的类型,如一条分支指令、一条跳转指令、一条读/写指令,或其他任何合适类型的指令。‘MBNY’部分可以表示一个映射的BNY,即,轨道表1262中的一个由映射表156映射的偏移量。与将分支目标偏移量直接以BNY的形式写入轨道表1262不同,目标BNX和偏移量被送到表156中以映射为一个MBNY。类型、目标BNX和MBNY一起构成轨道表1262的内容。当一个领先指针读出表1262的内容时,目标BNX和目标MBNY构成一个指向表1262中一个表项的地址。
这就是说,在填写操作中,BNX被用于选择表1262、156和153中的一行,而BNY被用于选择映射表156中的一列。读出表156中由BNX和BNY指向的表项的内容,该内容指向表1262中的一个对应列以存储分支目标信息。该列地址是一个MBNY,而这个MBNY也被写入表156中由列地址BNY索引的一个列中。表153的内容被增加1以指向轨道表1262中的下一个可用的列。
在读操作过程中,在映射表156中用BNX选择一个行,并用BNY选择一个列。该表项的内容是一个指向轨道表1262中一个列的MBNY,即分支指令的进入点。之后,轨道表1262中表项的MBNY就可以直接被用于在轨道表1262中寻找分支目标地址。
这就是说,该MBNY可以被替换为一个目标MBNY。这就是说,分支目标信息(即:轨道表1262中的一个表项的内容)可以包含类型、BNX和目标MBNY。换句话讲,与将分支目标偏移量直接作为BNY写入轨道表1262不同,BNX和分支目标偏移量被送到映射表156以读出映射表156中映射表项的内容,即一个MBNY。类型、BNX和该MBNY构成了轨道表1262中轨道表项的内容。当一个领先指针读出轨道表1262中的一个表项时,BNX和目标MBNY,构成了轨道表1262的一个地址。
如图15所示,表156中有些表项是空的,某种机制可用于解决分支目标是在两个分支源指令之间的问题。例如,如果一个分支的目标是在BNX=1,BNY=3,而表156中这个表项是空的,此时这种机制会求出这个表项的下一个分支源的映射地址MBNY等于3。又例如,如果一个分支的目标是在表156中BNX=2,BNY=4,此时这种机制会给出这个表项的下一个分支源的映射地址MBNY等于2。
此外,其他部件也可以被用于提供某些功能以支持上述实施例。例如,处理器核125可以提供一个控制信号‘TAKEN’以控制循迹器170中的选择器137。
处理器核125还可以提供一个控制信号“BRANCH/JUMP”以控制循迹器中的寄存器138。读指针151向前移动(如:增加BNY)直到读出的轨道表内容是一个分支/跳转类型,读指针151停止在此处等待处理器核125赶上。同时,根据该内容中包含的分支目标地址检查填充一级缓存的必要性。“BRANCH/JUMP”信号告诉循迹器170处理器核125已经到达该分支指令,而此时的“TAKEN”信号是程序执行产生的真实信号,并可以选择正确的下一地址。这样,通过检测该“BRANCH/JUMP”信号,循迹器170使寄存器138更新以允许新地址进入寄存器138并进而表现为BN151。
“TAKEN”信号或“BRANCH/JUMP”信号可以被用于表示分支或跳转是否发生,而这样的信号可以通过各种分支预测算法产生。图16A-B显示了本发明所述的分支判断结构。
如图16A所示,指令流3101包含一个指令序列,且执行的顺序为从左到右。具体地,指令3102可以是一条分支指令,而指令3103、3104和3105是改变分支指令3102的分支条件的指令。指令3105是最后改变分支指令3102的分支条件的指令。与当分支指令3102被执行时判断分支指令3102的分支条件是否满足不同,这样的判断可以在最后改变或影响该分支指令3102的分支条件的指令执行之后即进行。
具体地,如图16B所示,分支预测系统3200可以包含三个部分:一个指令缓冲3201、预检测控制单元3202和时间点测试单元3203。也可以包含其他设备。指令缓冲3201可以存储一个指令序列,如指令3205正在被执行,则其后续为指令3208、3209和3210等。时间点测试单元3203可以包含存储每条分支指令的分支条件判断时间点信息的本地寄存器,即,一个表示或被用于推导出一个分支条件是否满足的标志的值。根据处理器核执行的指令集的类型,分支条件判断时间点信息可以是一个通用寄存器、一个状态寄存器,或一个特殊寄存器的一个或多个标志位。可以根据分支条件判断时间点信息判断分支条件时候满足。例如,分支条件判断时间点信息的不同值可以相互比较或分支条件判断时间点信息可以与一个固定值进行比较。
预检测控制单元3202控制一个领先指针3204沿指令缓冲3201从当前指令3205以比处理器核程序计数器(PC)更快的速度移动。当领先指针3204沿指令缓冲3201移动时,扫描该指令缓冲3201中的每条指令,并停止在第一条分支指令3206。每条被扫描的指令可以被送到时间点测试单元203。由于对于一个处理器核中的分支条件判断时间点信息的总数是有限的,时间点测试单元3203可以包含一个译码器3207以确定一条指令是否会改变任何一个分支条件判断时间点信息的值。如果一条指令被确认为是改变分支条件判断时间点信息的指令,那么这个或这些分支条件判断时间点信息也可以被确定。此外,在扫描过程中,当一条由领先指针3204指向的指令被发现改变分支条件判断时间点信息值,那么这条指令的位置信息被写入时间点测试单元3203中对应该一个或多个分支条件判断时间点信息的一个或多个本地寄存器中。
为便于描述,在分支预测系统3200中只用到了两个分支条件判断时间点信息:‘COND1’和‘COND2’。分支条件判断时间点信息的任何号码都可以用类似的方法处理。
当指令缓冲3201被扫描之后,在当前指令3205和第一条分支指令3206之间有三条指令可以改变分支条件判断时间点信息值:指令3208、3209和3210。具体地,指令3208的位置是‘3’并改变分支条件判断时间点信息‘COND1’的值;指令3209的位置是‘4’并改变分支条件判断时间点信息‘COND2’的值;而指令3210的位置是‘7’并改变分支条件判断时间点信息‘COND2’的值。
当领先指针3204指向指令3208时,指令3208被读出并通过总线3211送到译码器3207。在译码之后,可以判定指令3208改变‘COND1’的值。位置信息‘3’被写入对应分支条件判断时间点信息‘COND1’的本地寄存器3212。类似地,当领先指针3204指向指令3209时,指令3209被读出并通过总线3211送到译码器3207。在译码之后,可以判定指令3209改变‘COND2’的值。位置信息‘4’被写入对应分支条件判断时间点信息‘COND2’的本地寄存器3213。此外,当领先指针3204指向指令3210时,指令3210被读出并通过总线3211送到译码器3207。在译码之后,可以判定指令3210改变‘COND2’的值。位置信息‘7’被写入对应分支条件判断时间点信息‘COND2’的本地寄存器3213。原先的写入值‘4’被替换为值‘7’。
这样,当领先指针3204到达第一条分支指令3206时,本地寄存器3212和3213在该第一条分支指令3206被执行前分别存储器了最后更新分支条件判断时间点信息值的指令的位置信息。此外,当领先指针3204到达分支指令3206时,分支指令3206被读出并被送到译码器3207。可以判定指令3206是一条分支指令,则产生一个停止信号并通过控制线3216被送到预检测控制单元3202,使得领先指针3204停止在分支指令3206。
与此同时,由于由领先指针3204指向的指令是分支指令,译码器3207可以通过控制线3215选择一个或多个对应分支指令用到的分支条件判断时间点信息值的本地寄存器,并将被选中的寄存器的值输出到比较器3218作为一个输入。比较器3218的另一个输入是处理器核正在执行的当前指令的位置信息3214。
这样,当处理器核正在执行的当前指令的位置信息3214大于或等于已存储的最后更新分支条件判断时间点信息值的指令的位置信息,它可以表示该分支条件判断时间点信息值已经准备好,可以进行判断分支条件是否满足。比较器3218可以输出一个“equal”结果到控制单元3219。当分支指令需要的全部分支条件判断时间点信息都更新后,控制单元3219可以发出一个“ready”信号3220以允许处理器核进行分支转移或跳转是否发生的判断,并确定分支目标(如:“TAKEN”信号或“BRANCH/JUMP”信号)。
虽然没有明示,时间点测试单元3202也可以从处理器核的寄存器、指令缓冲和其他合适的设备中获取其他信息以产生“ready”信号3220。此外,时间点测试单元3203还可以发送信息到处理器核以产生“ready”信号3220。
在某些实施例中,如当处理器核不对指令进行乱序执行时,并不是所有的对应分支条件判断时间点信息的本地寄存器都需要将它们的值发送到比较器3218。译码器3207可以产生一个控制信号在所有对应分支条件判断时间点信息的本地寄存器的值中选择一个最大的位置值。这样,当比较器3218输出“equal”信号到控制单元3219,或最大位置值小于或等于当前正在被执行的指令的位置值时,更新所有分支条件判断时间点信息的值。程序计数器(PC)也可以被用做当前正在被执行的指令的位置值。
此外,处理器核125还可以提供一个部分地址“OFFSET”到一级缓存124在一个由BN151中的BNX确定的指令段中索引指令。一级存储器124或更高级别存储器124可以被配置成由BNX索引的缓存块或存储块。一级存储器124可以包含一个写端口以接收来自总线140的数据。对于写地址,由分配器1200提供的X地址(WXADDR),由APT129生成并来源于总线153,而Y地址(WYADDR,偏移地址)由获取引擎提供(与被填充的数据同步)。一级存储器124可以包含一个读端口以输出数据到处理器核125。对于读地址,X地址(BNX)由循迹器170作为BN151提供,而Y地址由处理器核125作为偏移量提供。
图17是使用本发明所述高性能缓存结构实现存储结构的一个实施例。缓存结构可以与之前所述的缓存控制单元类似。如图17所示,处理器核201使用的存储设备依次包括(从高速到低速):第一层次存储器202、第二层次存储器203、主存储器204和硬盘存储器205。通常地,第一层次存储器202的容量比第二层次存储器203的容量小;第二层次存储器203的容量比主存储器204的容量小;主存储器204的容量比硬盘205的容量小。任何一个层次的存储设备都可以有任意大小。
此外,一个缓存结构206被放置在处理器核201和第一层次存储器202之间;一个缓存结构207被放置在第一层次存储器202和第二层次存储器203之间;一个缓存结构208被放置在第二层次存储器203和主存储器204之间;一个缓存结构209被放置在主存储器204和硬盘205之间。也可以使用其他的放置方法。这种多层的缓存结构可以提高处理器核201的性能。
例如,对于第一层次存储器202和第二层次存储器203之间的缓存结构207,由于处理器核201需要从第一层次存储器202中获取指令,而第一层次存储器202中的指令来源于第二层次存储器203。这样,当指令通过缓存结构207传递时,所述指令可以被扫描并分析,并在相关指令被执行前将它们也获取到第一层次存储器202中,从而同时提高指令和数据的缓存命中率。
缓存结构207可以与缓存结构206类似,缓存结构207与第一层次存储器的接口包括地址总线210、读数据总线212和写数据总线211,与第二层次存储器203的接口包括地址总线213、读数据总线214和写数据总线215。这样,缓存结构207可以提高第一层次存储器202的命中率。
类似地,位于第二层次存储器203和主存储器204之间的缓存结构208可以提高第二层次存储器203的命中率,而位于主存储器204和硬盘205之间的缓存结构209可以提高主存储器204的命中率。如果硬盘205包含了处理器核201所需的全部指令,那么通过这种多层次的缓存结构,处理器核201可以获得高的命中率或性能。
此外,较慢速度的存储器之间的缓存结构可以具有较宽的带宽,即能一次获取较多的指令或数据。例如,缓存结构209的带宽比缓存结构208的带宽更宽;缓存结构208的带宽比缓存结构207的带宽更宽;缓存结构207的带宽比缓存结构206的带宽更宽。也可以配置成其他形式。
此外,可以在缓存结构208和第一层次存储器202之间提供一条独立的旁路路径216。可以将主存储器204中的指令或数据同时填充到第二层次存储器203和第一层次存储器202,从而进一步提高整个系统的性能。
上述各个实施例采用直接寻址的方式计算分支目标地址并实现指令预取。然而,也可以使用间接寻址的方式。图18A显示了基于间接寻址的指令预取的一个实施例。当采样间接寻址方式时,需要首先确定寄存器值(如:基地址寄存器值),从而计算分支目标地址。这样,可以将对间接寻址用到的寄存器的任何更新都存储到轨道表的对应轨迹点中。
如图18A所示,轨道3501包含复数个轨迹点(0-14)。轨迹点14是一个使用寄存器R1进行间接寻址分支指令,其目标地址为寄存器R1的值加上偏移量。轨迹点3和12都会更新寄存器R1的值。在运行中,指令指针3551(如:BNY)从当前指令指针360开始沿轨道3501向前移动。当指针3551经过轨道3501上每一个轨迹点时,轨迹点的信息可以被读出,而解码器3641可以判断出该轨迹点是否为一个间接寻址分支指令,且诸如轨迹点号码和指令类型、基地址寄存器号、偏移量等指令信息的相关信息可以被存储在设备3631中。
指令指针3551继续移动直到到达第一个间接寻址分支指令轨迹点。如图18A所示,指针3551停止在轨迹点14(3541)。从指针3551移动到停止在轨迹点14的过程中,设备3631接收到更新该间接寻址分支指令所用基地址寄存器的轨迹点的信息。这样,当指针3551移动到轨迹点14(3541)时,可以确定轨迹点3541的间接寻址分支指令所用的基地址寄存器的寄存器号,也可以确定在此间接寻址分支指令之前最后一次更新该基地址寄存器的轨迹点的号码。例如,最后一次更新基地址寄存器R1的轨迹点是轨迹点12(3531)。
同时,当前指令指针360沿轨道3501移动,当前指令指针360的值是正在被处理器核执行的指令的轨迹点号码。设备3631对当前指令指针360和最后更新基地址寄存器轨迹点的轨迹点号码进行比较,并将比较结果输出到总线3651上。如果当前指令指针360的值大于或等于最后更新基地址寄存器轨迹点的轨迹点号码,那么可以表示该间接寻址分支指令所用的基地址寄存器已经被更新,该寄存器号可以被送到处理器核以获取该基地址寄存器更新后的值,用于计算分支目标(如:该基地址寄存器值加上偏移量)。根据实际分支指令的不同,分支目标地址可以通过将基地址寄存器值加上一个偏移量的方法计算得到,或通过直接使用该基地址寄存器值的方法得到。当分支目标计算完成后,可以如之前实施例所述将相应的指令段填充到高层次存储器中。
图18B显示了基于间接寻址的指令预取的另一个实施例。为便于描述,假设处理器核指令集使用两个基地址寄存器R1和R2进行指令的间接寻址,而单独一个基地址寄存器的值可以被用做任何间接寻址分支指令的基地址。具有更多基地址寄存器时的情况也类似。此外,虽然只讨论了间接寻址分支指令,其他分支指令也可以被包括进来并被使用,从而实现多样化的寻址模式。
如图18B所示,轨道3501存储了间接寻址分支指令和更新基地址寄存器的指令等信息的相关信息。轨迹点3621可以是轨道3501上的一个表项,且相关信息包括间接寻址分支指令所用基地址寄存器号、偏移量和更新基地址寄存器的指令等信息。
当程序流从表项3621进入轨道3501时当前指令指针360和指令指针3551都从表项3621开始移动,并将该表项的轨迹点号码(或YADDR)作为初始值存储到设备3631的相应寄存器中。
当前指令指针360按处理器核执行指令的速度沿轨道3501移动,同时指令指针3551以比当前指令指针360更快的速度移动。当指令指针3551沿着轨道3501移动时,检查经过的轨迹点对应的基地址寄存器相关信息。例如,如果一个轨迹点的指令会更新基地址相关寄存器(如:R1或R2),那么该轨迹点的轨迹点号码(或YADDR)被存储到设备3631的相应寄存器中。
这样,如图18B所示,寄存器3561存储了基地址寄存器R1相关的轨迹点号码,而寄存器3571存储了基地址寄存器R2相关的轨迹点号码。译码器3641可以接收由指令指针3551指向的轨迹点的内容,并根据该内容生成设备3631中各个寄存器的使能信号,及选择器3591的选择信号,用以控制对各个寄存器写入的值以及输出到比较器3611的值。
具体地,如图18B所示,指针3551从轨迹点号码‘1’开始移动,寄存器3561和寄存器3571存储了该轨迹点号码‘1’作为初始值。指针3551从左向右移动到轨迹点3(3511),首先将轨迹点3(3511)的内容读出并将轨迹点号码‘3’存储到R1寄存器3561中。然后指针355继续移动到轨迹点5(3521),将轨迹点5(3521)的内容读出并将轨迹点号码‘5’存储到R2寄存器3571中。此外,指针3551继续移动到轨迹点12(3531),将轨迹点12的内容读出并将轨迹点号码‘12’存储到R1寄存器3561中以替代原来的值‘3’。
此后,指针3551继续移动到位于轨迹点14(3541)的间接寻址分支指令,轨迹点14(3541)对应的内容表示基地址寄存器R1被用于间接寻址。这样,根据通过总线3581送来的轨迹点14(3541)的内容,选择器3591选择R1寄存器3561的值送到比较器3611。比较器3611的另一个输入是当前指令指针360的值(由当前指令指针360指向的轨迹点的号码)。
当比较器3611判断出当前指令指针360的值大于或等于R1寄存器3561的值时,表示该基地址寄存器R1已经更新为轨迹点14做需要的值,可以通过总线3651将一个信号送到另一个模块以计算完整的分支目标地址(如:该基地址加上一个偏移量)。其他的方法也可以被使用。
图19显示了本发明所述缓存系统的另一个实施例11000。与图10A中的缓存系统9000类似,缓存系统11000可以被用于获取数据而非指令。这样,可以不需要保留表120和交换器133。
用于数据存储的主动表195具有与主动表121相同的结构。主动表195中的每一个表项对应高层次存储器196中的一个数据段。此外,一个基地址指针存储器197被用于存储对应基地址的数据段号。基地址指针存储器197中的基地址指针数目与处理器核125用到的基地址数目相同,例如:8。也可以使用其他数目。此外,处理器核125可以用基地址加偏移量的方式对高层次存储器196寻址。所述偏移量可以保证地址数据不会超出基地址对应的数据段的范围。
也可以支持多线程程序。例如,如前所述,复数个栈135可以被用于在多线程程序情况下填充指令,且复数个基地址指针存储器197可以被用于在多线程程序情况下填充指令。这样,PID188可以指向一个当前栈135及一个当前基地址指针存储器197。然而,如果只支持一个线程,可以只使用一个栈135和一个基地址指针存储器197,可以不需要PID188。
当生成器130扫描、分析获取到的指令时,如果一条指令会改变数据的基地址,那么就要将对应的基地址、立即数和寄存器号等信息存储到轨迹表126的相应轨迹点中。此外,当处理器核125执行到所述指令时,所述基地址或修改后的基地址可以被送到主动表195与其中的内容进行匹配。
如果匹配成功,匹配成功项的表项号被作为基地址指针的内容送到基地址存储器197。由于主动表195中的表项对应于高层次存储器196中的数据段,因此当前基地址指针存储了对应数据段在高层次存储器196中的基地址。
另一方面,如果匹配不成功,所述基地址被送到填充引擎132用于填充相应数据段。当所述基地址对应的数据段被获取时,所述基地址被存储到主动表195内由指针198指向的一个表项中。主动表195中所述表项的表项号被存储到基地址指针存储器197内一个对应的基地址指针中。与填充指令类似,指针198移动到主动表195中的下一个有效表项。
当处理器核125执行一条访问高层次存储器196中某个数据的指令时,所述指令的基地址189被当作索引从基地址指针存储器197中读出数据段号(DBN)。此外,数据读写地址偏移量194被当作索引从所述数据段号(DBN)指向的数据段中找到一个数据项。处理器核125就可以对所述数据项进行读、写操作了。
此外,也可以在数据缓存上使用轨道表结构。在运行过程中,数据一直是与指令有关联的,即由指令引起数据的读取、处理或写回。这样,在某些情况下,可以将数据操作关联到某些指令,如读/写(装载/存储)指令和分支指令。为便于描述,以一种基地址加上偏移量的形式表示装载/存储指令和分支指令的目标地址,而其他的地址形式也可以用类似的方法实现。图18显示了数据操作和指令之间的交互。
如图20所示,一个指令段403可以包含16条指令,指令0到指令15(数字0、1、2……15与之前所述的BNY的值相等)。指令1(362)可以是进入指令段403的一条目标指令。指令7(352)是一条使用BP1作为基地址寄存器的装载指令。由于指令7使用基地址寄存器BP1读取数据,任何在指令7之前执行并改变BP1基地址寄存器值的指令与BP1基地址寄存器什么时候具有指令7所需的正确值是有关联的。这就是说,可以采用本发明所述的系统和方法确定指令7所需的数据何时可以被填充到缓存(高层次存储器)中。
这样,如图20所示,对于使用BP1基地址寄存器装载数据的指令7(352)而言,指令1(362)和指令3(351)是指令段403中在指令7(352)之前被执行的两条指令,且都会更新BP1基地址寄存器。此外,虽然指令1(362)会更新BP1基地址寄存器,但指令5(351)在指令1(362)之后再一次更新了BP1基地址寄存器。这样,执行指令7(352)时BP1基地址寄存器的值应该是执行指令5(351)之后的BP1基地址寄存器的值。
类似地,指令12(354)是一条使用BP2作为基地址寄存器的装载指令。指令2(383)和指令10(353)是指令段403中在指令12(354)之前被执行的两条指令,且都会更新BP2基地址寄存器。虽然指令2(383)会更新BP2基地址寄存器,但指令10(353)在指令2(383)之后再一次更新了BP2基地址寄存器。这样,执行指令12(354)时BP2基地址寄存器的值应该是执行指令10(353)之后的BP2基地址寄存器的值。
此外,指令14(380)是指令段403进入表项点之后的第一个分支指令,因此从进入表项点开始直到指令14的所有指令都会被执行。这样,当处理器核的执行流从这个进入指令段403的表项点(如:指令1(362))开始执行时,可以在指令7(352)和指令12(354)被执行之前将它们对应的数据段填充到高层次存储器124中。然而,必须在最后一次改变相应基地址寄存器值的指令之后进行预填充操作。
例如,虽然指令1、2、11和13(362、383、385、386)都更新了BP1或BP2基地址寄存器的值,但它们都不是最后一次改变BP1或BP2基地址寄存器值的指令。其他指令更新了BP2、BP4、BP5及其他寄存器但不更新BP1或BP2基地址寄存器的值。这样,为保证BP1基地址寄存器和BP2基地址寄存器中是正确的值,需要分析会更新基地址寄存器的指令,并识别出将基地址寄存器更新为正确值的指令。
由于存在上述数据操作与指令之间的关联,可以使用一个类似的轨道表结构用于数据操作。图21A显示了一个用于存储数据装载信息的轨道表结构。
如图21A所示,行350是轨道表中对应指令段403的一个行。可以在轨道表中加入多个轨迹点以记录数据预填充的相关信息。例如,可以将两类信息记录在一条相应轨道的轨迹点的内容中:
(1)读/写指令信息;
(2)最后更新寄存器的指令信息。最后更新寄存器的指令指的是在读/写指令被执行前最后一次更新该读/写指令所用的相应基地址寄存器的值的指令。
具体地,在轨道表行350中,存储了装载指令7(352)、装载指令12(354)、指令3(351)和指令10(353)的信息。在这些指令中,装载指令7(352)和装载指令12(354)是读/写指令,具有第一类信息,而指令3(351)和指令10(353)是最后更新寄存器的指令,具有第二类信息。
此外,可以用不同的格式存储不同类型信息。例如,对于第一类信息而言,表项格式402可以包含一个读/写标志395,一个基地址寄存器号394和一个偏移量392。此外,对于第二类信息而言,表项格式401可以包含一个最后更新寄存器指令标志393和一个基地址寄存器号394。其他格式也可以被使用。
当轨道表行350存储了上述的各类信息后,可以在相应指令被执行前使用这些信息进行数据段预填充。图21B显示了基于轨道表结构的数据预填充的实施例。
如图21B所示,轨道350对应的指令段403将要被执行。这就是说,轨道350已经被建立且指令段403已经被填充到高层次存储器中。此外,轨道350也被用于存储数据段信息(如:上面提到的信息类型)。例如,轨迹点362是进入轨道350的表项点,即,是另外一个轨迹点的目标地址。在本实施例中,当建立轨道350或分析任何一条读/写指令或间接寻址分支指令时,会使用一个反向的扫描以限制存储到轨道表350中或分析指令信息数量。例如,当一条或多条读/写指令用到了特定的基地址寄存器时,只有更新该特定基地址寄存器的指令的指令信息才会被存储。这就是说,会先扫描这些指令,而在之后或第二轮再扫描影响这些寄存器的指令。
此外,数据指针355被用于辅助相应数据段的预填充,而寄存器组363被用于记录基地址寄存器的值,如寄存器356和寄存器357(BP1基地址寄存器和BP2基地址寄存器)的值。当程序流从表项点362进入轨道350时,当前指令指针360和数据指针355一起从表项点362开始移动,寄存器356和357的值可以被设置为表项点362的轨迹点号码或一个默认值。
当前指令指针360按处理器执行速度沿轨道350移动,而数据指针355以比当前指令指针360快的速度移动。当数据指针355沿轨道350移动时,检查所经过的轨迹点的数据相关信息。例如,如果发现是第二类信息(最后更新寄存器指令),寄存器组363中的基地址寄存器值就可以被相应更新。这样,如图21B所示,当数据指针355经过轨迹点352和353时,寄存器356(BP1寄存器)被更新为‘12’,而寄存器357(BP2寄存器)被更新为‘5’。
具体地,如图21B所示,寄存器356存储了最后更新BP1基地址寄存器的轨迹点的轨道号(BN或BNY),而寄存器357存储了最后更新BP2基地址寄存器的轨迹点的轨道号(BN或BNY)。此外,根据从数据指针355指向的轨迹点354来的内容358,译码器364为寄存器组363产生写使能信号并为选择器359产生选择信号以控制寄存器组363的更新,并选择寄存器组363中的一个寄存器的值送往比较器361。
在执行之初,数据指针355从轨迹点1(362)开始移动,而寄存器356和寄存器357被初始化为数据指针355开始移动的轨迹点号码值‘1’。之后,数据指针355从左向右移动到轨迹点3(351),轨迹点3(351)的表项号被读出,BP1寄存器的值被更新为当前数据指针的值‘3’。
数据指针355继续移动到轨迹点5(352),轨迹点5(352)的表项号被读出,BP2寄存器的值被更新为当前数据指针的值‘5’。此外,数据指针355继续移动到轨迹点10(353),轨迹点10(353)的表项号被读出,BP1寄存器的值被更新为当前数据指针的值‘10’,以代替原来的值‘3’。
然后,数据指针355移动到位于轨迹点12(354)的第一条读/写指令,轨迹点12(354)对应表项表示BP1基地址寄存器被用来读取数据。这样,根据轨迹点12(354)的内容,译码器364选择对应BP1基地址寄存器的寄存器356并将寄存器356的值通过选择器359送到比较器361。比较器361的另一个输入是当前指令指针360的值(当前指令指针360指向的轨迹点的号码)。
当比较器361判断当前指令指针360的值大于或等于寄存器356的值时,表示基地址寄存器BP1已经更新为轨迹点12需要的值,可以将一个信号通过总线365发送到另外的一个相关单元以计算用于存储器读/写的完整地址(如:基地址加上偏移量)。可以使用这个完整地址在该读/写执行之前填充数据段。
图21C显示了一个实现了数据预填充结构的缓存系统的更多细节。如图21C所示,在轨道表1261中建立了轨道350。当进入轨道350时,即当处理器核执行进入轨迹点(如:轨迹点0(3801))时,数据指针355指向轨迹点3801。之后,数据指针355向右移动(即进入轨道350)并检查指针移动经过的轨迹点的内容。数据指针355停止在第一个读/写指令(轨迹点352)。
具体地,当数据指针355从轨迹点3801(即轨迹点0)开始移动时,号码‘0’被写入寄存器379。此外,寄存器379的值每次通过自增器408增加一并将该增加后的值写回寄存器379。这样,数据指针355(即寄存器379的输出值)可以每次增加一以向右移动。此外,寄存器379可以受信号407控制暂时停止写回(数据指针355停止),或受信号365控制恢复写回(数据指针355移动)。
此外,检测模块371包含寄存器356、寄存器357、选择器359、比较器361、加法器372和译码器364。检测模块371和寄存器379、选择器359、自增器408,以及主动表195共同将数据段填充到高层次数据存储器196中。
当数据指针355移动到轨迹点3801时,轨迹点3801的轨迹点号码‘0’被通过总线358写入到保存基地址相关的寄存器中,如:对应BP1基地址寄存器的寄存器356和对应BP2基地址寄存器的寄存器357。或者,可以将某个默认值作为初始值写入所有基地址相关的寄存器中。或不进行初始花以保持寄存器中现有值不变。
此外,当数据指针355在轨道350上移动时,检测出轨迹点1(362)是一条更新基地址寄存器BP1的指令。这样,当数据指针355指向轨迹点362时,轨迹点362的内容通过总线358被送到译码器364,而译码器364生成一个写使能信号387将轨迹点号码‘1’写入寄存器356。当数据指针355到达轨迹点2(383)时,检测到该轨迹点是一条更新基地址寄存器BP2的指令,轨迹点383的内容通过总线358被送到译码器364,而译码器364生成一个写使能信号387将轨迹点号码‘2’写入寄存器357中。
类似地,当数据指针355到达轨迹点3(351)时,检测到该轨迹点是一条更新基地址寄存器BP1的指令,轨迹点号码‘3’被写入寄存器356中以代替原先的值‘1’。当数据指针355到达轨迹点352,即一条读/写指令时,轨迹点352的内容通过总线358被送到译码器364,而译码器364生成一个控制信号407使得寄存器379停止更新(即数据指针355停止移动)。当数据指针355停止在轨迹点352时,译码器364生成一个选择信号388从选择器359中选出对应于基地址寄存器BP1的寄存器356的值。寄存器356的值通过总线389被送到比较器361。
与此同时,当前指令指针360随程序流移动。当前指令指针360表示指令段中正在被执行的指令的位置信息。例如,该位置信息可以是程序计数器(PC)的低地址。当前指针360指向的轨迹点的轨迹点号码也被送到比较器361。当比较器361判断当前指令指针360送来的号码大于或等于总线389送来的号码(即轨迹点号码‘3’)时,表示最后更新寄存器的指令已经被执行了,BP1基地址寄存器被更新为所需的值。此时从比较器361送往加法器372的使能信号365是有效的。
这样,轨迹点7(352)中的基地址寄存器信息可以通过总线374被送到处理器核125,获取来的基地址寄存器的值通过总线373被送到加法器372。轨迹点7(352)中的偏移量信息可以通过总线358也被送到加法器372中。加法器372可以在使能控制信号365保持有效的时候通过将基地址寄存器的值与偏移量相加的方式完成数据地址计算,并将计算得到的数据地址通过总线375送到主动表195。主动表195进行匹配操作。
如果匹配操作不成功,那么生成一个新的数据段号码(DBN),而数据地址通过总线1441被送到填充引擎132以从低级存储器122中获取相应的数据段。与此同时,新的DBN通过总线376被作为填充地址送到高层次存储器196,从而将获取来的数据段填充到高层次存储器196中根据该新DBN决定的位置中。该新DBN还被送到DBN队列370中。另一方面,如果匹配操作成功,那么可以直接将匹配到的DBN送到DBN队列370中。
当填充轨迹点7(352)对应的数据段时,寄存器379在控制信号365的控制下恢复更新。数据指针355继续向右移动直到数据指针355指向轨迹点12(354)。轨迹点12(354)的内容通过总线358被送到译码器364。译码器364生成控制信号407暂停寄存器379的更新。重复上述操作过程从而将轨迹点12(354)对应的数据段填充到高层次数据存储器196中,并将相应的DBN送到DBN队列370。
此外,轨迹点352读/写指令和轨迹点354读/写指令对应的DBN都在DBN队列370中,当处理器核125执行这些读/写指令时,可以通过总线377从DBN370队列中获一次取到一个对应的DBN,这样就可以确定对应的数据段。再使用从处理器核通过总线378送来的偏移量,就可以在数据段中定位所需的数据。
此外,如果从数据指针355进入到轨道350直到到达一个读/写指令的过程中保存基地址BP1和BP2的相关寄存器的值都没有被更新,那么表示读/写指令所需的基地址是已更新完毕的。此时,由于在数据指针355进入轨道350时保存基地址BP1和BP2的相关寄存器的值被写为‘0’,因此只要当前指令指针360指向的轨迹点号码大于‘0’,就可以进行数据段预填充。
在某些实施例中,用于数据的轨道表结构可以集成在用于指令的轨道表结构中。这就是说,单个的轨道表结构(如:轨道表126)可以同时用于数据和指令。在另外的实施例中,可以在有一个用于指令的轨道表以外,单独使用一个用于数据的轨道表。图22A显示了数据和指令轨道表的实施例。
如图22A所示,轨道表330用于指令,轨道表331用于数据。轨道表330中的每一行对应高层次指令存储器中的一个存储块,行中的每一表项对应存储块中的一条指令。该表项也是轨迹点,包含了诸如指令类型(即该指令是否为分支指令)和当该指令是分支指令时已经计算得到的目标地址等信息。
数据轨道表331可以有与指令轨道表330类似的大小。此外,数据轨道表331中的表项与指令轨道表330中的表项对应。为便于描述,轨道表330和331中相同位置表示轨道表330和331的对应表项。如之前所述,数据轨道表331中的一个表项包含指令类型(即该指令是否为读/写指令)和当该指令是读/写指令时用于计算数据地址的基地址寄存器和偏移量信息。
此外,当前程序计数器(PC)332同时指向轨道表330和331中的相同位置。如果当前程序计数器332指向轨道表330中的一个表行,那么该表行对应的指令段已经被填充到高层次指令存储器中,且每条指令的指令类型均已识别并被存储到轨道表330中。这样,可以找到当前程序计数器332之后的第一个分支指令,如分支指针333所指。
对于一层的轨道结构,分支指令目标地址对应的指令段被填充到高层次存储器中,并在轨道表330中建立相关轨道。然而,对于两层的轨道结构,需要有更多的指针指向分支指针333指向的分支指令之后的第一个分支指令,以及分支指针333指向的分支指令目标指令之后的第一个分支指令。之后,可以用类似方法填充高层次存储器,并相应地建立额外的轨道。还可以使用更多层次的轨道结构。
如果当前程序计数器332和分支指针333重合,那么分支指令被执行,且当前程序计数器332将根据分支指令的执行结果(即分支转移是否发生)移动到一个新的当前指令轨迹点。分支指针333也会随当前程序计数器332变化,指向新的当前指令之后的第一个分支指令。重复该过程可以在执行指令段之前将指令段填充到高层次存储器中。
类似地,当指令段被填充到高层次存储器中时,数据相关信息(指令是否为读/写指令)也被存储到轨道表331中。这样,可以找到分支指针333指向的分支指令之后的第一个读/写指令,如数据访问指针334所指。此外,轨道表331也存储了最后更新该读/写指令相应基地址寄存器的指令的信息。这样,可以找到位于当前程序计数器332之后且分支指针333指向的分支指令之前的那条最后更新寄存器指令,如基地址变化指针335所指。
随着当前轨道上指令的执行,如果当前程序计数器332移动到基地址变化指针335指向的位置,那么可以计算出由数据访问指针334指向的第一个读/写指令的读/写地址,并将该地址对应的数据段填充到高层次数据存储器中。与此同时,对应的基地址寄存器也被更新为新的值(如:基地址变化指针335指向的指令的执行结果)。
如果基地址变化寄存器335不在当前程序计数器332指向的轨迹点和数据访问指针334指向的轨迹点之间,那么数据访问指针334指向的读/写指令所需的基地址寄存器的值可以被认为是一个有效的值。可以立即计算出读/写地址并将计算得到的读/写地址对应的数据段填充到高层次数据存储器中。
此外,如果数据访问指针334指向的读/写指令位于分支指针333指向的分支指令之后,那么由于在该分支指令执行之前很难判断出该读/写指令是否会被执行,因此无论基地址变化指针335指向哪里,都不将数据段填充到高层次数据存储器中。
如果当前程序计数器332和数据访问指针334重合,那么表示该读/写指令正在被执行。之后数据访问指针334可以指向当前程序计数器332之后且分支指针333之前的下一条读/写指令。与此同时,基地址变化指针335也可以指向位于当前程序计数器332之后且分支指针333之前的最后更新该下一条读/写指令用到的基地址寄存器的指令(如果这样的指令不存在,那么数据访问指针334新指向的读/写指令所需的基地址寄存器的值可以被认为是一个有效的值)。可以重复该过程直到开始一条新的轨道,之后在此新轨道中同样在访问数据段的指令执行之前将数据段填充到高层次数据存储器中。
当然,如果基地址寄存器相应的数据段已经填充在高层次数据存储器中,那么不需要重复填充该数据段。在这种情况下,之前所述的主动表195被用于匹配高层次数据存储器中已存在的数据块。
此外,在操作过程中,指令轨道表330和数据轨道表331可能需要通过指令轨道表330和数据轨道表331之间的某种接口进行同步。图22B显示了指令轨道表330和数据轨道表331之间的接口结构的实施例。
如图22B所示,指令轨道表330可以具有内容格式630:分支类型、目标BNX和目标BNY。指令轨道表330也连接到数据轨道表331。此外,锁存器601、602和603连接在指令轨道表330和数据轨道表331之间。锁存器602和603还分别具有自增器604和605。
此外,指令轨道表330和数据轨道表331都使用相同的BNX,而指令轨道表330和数据轨道表331用到的BNY可以是不同的,分别被称为IBNY和DBNY。在操作过程中,BNX621和IBNY622被用于对指令轨道表330的表项进行索引,将该表项内容读出并放到总线606和总线607。具体地,目标BNX被输出到总线606,而目标BNY被输出到总线607(为简化起见,这里没有显示分支类型)。
此外,选择器611、612和613分别被用于提供锁存器601、602和603的输入,并受同一个分支发生判断信号(即:“TAKEN”信号)控制。BNX621和BNY623被用于对数据轨道表331的表项进行索引。
当分支转移发生时,所有选择器选择指令轨道表330来的输入。BNX621等于目标BNX,而IBNY622和DBNY623等于目标BNY。此外,总线606上的目标BNX被锁存到锁存器601中,总线607上的目标BNY被锁存到锁存器602和锁存器603中。这样,BNX621和IBNY622现在索引到一个指令轨道表项,该表项的地址由分支转移发生前的表项的内容指定。BNX621和DBNY623现在索引到一个数据轨道表项。
当分支转移发生后并从新的轨道开始时,选择器611和612都选择不从指令轨道表来的输入。BNX621停止在同一个BNX,而BNY622在每个时钟周期自增直到遇见包含下一条分支指令的表项。之后,BNY622可以停止在该下一条分支指令,使得当下一次分支发生信号通过选择器选择并输出到总线606和总线607上的分支目标就是该BNY622的表项内容,并将它们分别锁存在锁存器601、602和603中。或者,该分支目标可以被保存在一个临时存储器(为简便起见没有显示)中使分支可以正常进行,BNY622则可以进一步向前移动以保证程序很快将需要的指令能存在于一级缓存中(如之前所述)。
对于数据轨道表,可以对应指令分支进行类似的操作。当分支发生时,BNX621被设为目标BNX,DBNY623被设为目标BNY。从数据轨道表中该分支目标的表项开始,DBNY623指针进一步向前移动以保证程序需要的数据在不久之后能存在于一级缓存中(如之前所述)。
当然,轨道表压缩结构也可以应用在指令轨道表330和数据轨道表331上。图22C显示了一个带有压缩功能的指令轨道表330和数据轨道表331之间的接口结构的实施例。
图22C中的接口结构与图22B中的类似。然而,如图22C所示,指令轨道表330增加了一个独立的端口/总线608以从指令轨道表330中输出目标数据BNY,即目标DBNY。从BNY到MBNY的映射可以在填充轨道表330的表项时完成。图22C可以包含图22B和图15中的结构的组合。这就是说,映射表156和标志表153可以被用于对指令轨道表330进行表压缩,而映射表656和标志表653可以被用于对数据轨道表331进行表压缩。指令轨道表330的表项格式为格式632,包括:类型、目标BNX、目标IMBNY(指令映射BNY)和目标DMBNY(数据映射BNY)。
例如,假设指令轨道表330的轨道2正在被填充,且在行3、列2(BNX=3、BNY=2)的位置上有一条分支指令,该分支指令指向的分支目标在行1、列5(BNX=1、BNY=5)。在行3、列2的表项(即分支源)可以生成如下。
首先生成存放在指令轨道表330中的内容。来源于指令(即分支源指令)译码可以生成类型,目标BNX可以由分支目标地址高位与主动表121匹配得到(如:行1)。目标地址的低位部分(BNY)(如:5)和BNX一起索引到表156和表656中行1、列5的表项。表156表项的内容(如:2)是目标IMBNY,而表656表项的内容(如:4)是目标DMBNY。这样,目标列地址(目标BNY)5被映射到目标IMBNY2和目标DMBNY4。
下一个步骤是确定在哪里填充已生成的内容。由于分支源在行3、列2的表项中,因此检查表153的行3以分配一个表330中的列号码。在这里,表153的行3为1。因此,该内容被填充到表330的行3、列1中,而IMBNY1被填充到行3、列2。在上述操作完成后,表153的行3被增加为2。
如果主动表匹配操作没能在一级缓存中找到分支目标存储块,即可能表示在轨道表330中没有对应的行,那么该内容的类型部分可以被填充为“PC”以表示该链接在表项被作为一个分支目标读出时需要重新计算。在这种情况下,类型被标记为“PC”,BNX无效,IMBNY和DMBNY被填充为分支源地址偏移量BNY(注意这个不是目标BNY)。当该表项作为分支目标从表330中被读出时,该“PC”类型触发系统计算分支目标地址。用于计算分支目标地址的源指令可以由存储在IMBNY和DMBNY部分的BNY从当前存储块中索引得到。目标存储块及其相应信息被填充到一级缓存、表330、表156和表153中新分配的行中。当此完成后,标记为“PC”的表项被填充为更新后的分支目标信息。
表331的内容可以不包含分支目标信息。可以只根据指令译码结果生成该内容,而不需要通过如表330内容生成时的映射过程。此外,可以用填充表330类似的过程对表331进行填充。这就是说,表156被检查,表331和表656被填充。之后,表653中的表项值增加。
当指针621指向轨道表330的行3和列1时,输出对应内容。目标BNX622为1,目标IMBNY为2,而目标DMBNY为4。如果分支转移发生,那么表330中的行1、列2的内容被读出,而表331中的行1、列4的内容被读出。如果分支转移不发生,那么当前表项右侧的表项被读出。例如,表330中的行3、列2的表项被读出。
与图22B类似,当用于存储为分支而准备的分支目标信息的临时存储器存在时,指针622和623可以向前移动以保证很快可能要用到的指令和数据存在于一级缓存中。
或者,可以在从表330中读出内容的同时进行BNY到MBNY的映射,而不是在表330的表项被填充时进行该映射。在这种情况下,表330的内容只包含类型、目标BNX和目标BNY。当从表330中读出目标BNY时,该目标BNY与目标BNX一起被送到表156和表656,以分别产生IMBNY和DMBNY。之后,该IMBNY和DMBNY被送到选择器612和选择器613作为分支转移发生时被选择的输入,如图22D所示。格式633是表330的表项格式。
此外,在某些实施例中,两个轨道表330和331可以被集成到单独一个轨道表中(如:轨道表126)。这样,指令轨道表的相关信息和数据轨道表的相关信息就可以被存储到该集成轨道表中。图23显示了轨道表的一行和信息的类型。
如图23所示,行350是一个代码段对应的轨道表行。可以将多个种类的轨迹点添加到轨道表中以存储数据段相关的信息。例如:四种类型的信息可以被存储到相应轨道的轨迹点中:
(1)直接寻址分支指令信息;
(2)间接寻址分支指令信息;
(3)读/写指令信息;和
(4)最后更新寄存器指令信息。
具体地,在轨道表行350中,存储了分支指令14(380)、分支指令12(354)、装载指令7(352)、指令3(351)和指令10(353)的信息。在它们中,分支指令14(380)是一条具有第一类信息的直接寻址分支指令;分支指令12(354)是一条具有第二类信息的间接寻址分支指令;装载指令7(352)是一条具有第三类信息的读/写指令;而指令3(351)和指令10(353)是具有第四类信息的最后更新寄存器指令。
此外,在存储时不同类型信息可以具有不同的格式。例如,对于第一类信息,表项格式400可以包括一个分支指令标志391和一个BN或TBN形式(BN包括BNX和BNY)的目标地址404。对于第二类信息,表项格式4021可以包括一个间接寻址分支指令标志3951、一个基地址寄存器号394和一个偏移量392。对于第三类信息,表项格式402可以包括一个读/写指令标志395、一个基地址寄存器号394和一个偏移量392。此外,对于第四类信息,表项格式401可以包括最后更新寄存器指令标志393和一个基地址寄存器号394。也可以使用其他格式。
在上述的各种类型信息被存储到轨道表行350之后,可以在相应指令执行前使用这些信息填充数据段。图24显示了本发明所述的一个缓存系统实施例20000。图24可以基于前述的缓存系统和数据/指令轨道表结构。
如图24所示,缓存系统20000与图19中的缓存系统11000类似,如:交换器133和循迹器177被用于将指令填充到高层次存储器(如:存储器124和196)中,且指令和数据都存储在低级存储器122中。缓存系统20000还包括一个数据指针模块3791、一个检测模块371和一个数据块号码(DBN)队列370。此外,缓存系统20000使用一个单个的轨道表126存储指令和数据的轨道信息(即一个集成的轨道表)。
数据指针模块3791被用于控制数据指针355的移动。检测模块371可以包括图21C中所示的结构,如寄存器组363(如:寄存器356和357)、选择器359、译码器364和比较器361等。译码器364可以接收轨道表126中数据指针355指向的轨迹点的内容358。此外,处理器核125可以将基地址寄存器的值通过总线373送到操作单元372,轨道表126可以将偏移量的值通过总线374送到操作单元372。之后,操作单元372可以根据基地址寄存器值和偏移量值计算出读/写地址,并可以将该计算得到的读/写地址送到主动表195进行匹配操作。
主动表195可以对接收到的读/写地址和主动表195中的表项进行匹配。如果匹配成功,即数据段已经存储在高层次存储器196中,那么可以获取到对应的数据块号码(DBN),并通过总线376将该DBN送到DBN队列370。
另一方面,如果匹配不成功,即数据段尚未存储在高层次存储器中,那么与之前所述的指令填充操作类似,生成数据块号码(DBN)并将该新DBN更新到主动表195和轨道表126中。该DBN通过总线376也被送到DBN队列370,且该读/写地址被送到填充引擎132。之后将该读/写地址对应的数据段填充到高层次存储器196中。
由于循迹器170根据轨道表的内容决定执行顺序,因此DBN队列中的每个DBN可以被关联到该DBN地址对应的指令。当执行一条读/写指令时,可以从DBN队列中获取到正确的DBN从而通过总线377在高层次存储器196中选出正确的数据段。与此同时,使用从总线378来的该读/写地址的低地址(即偏移量)可以访问到该数据段中的所需数据,从而完成该读/写操作。
如果DBN队列中存储了一个对应第一条分支指令之后的读/写指令的DBN,那么当该第一条分支指令被执行并确定分支转移成功发生时,可以从DBN队列370中清除这条因分支转移发生而不会被执行的读/写指令的DBN。或者,DBN队列370可以只存储第一条分支指令之前的读/写指令对应的DBN,从而避免队列的清除操作。
此外,用于计算读/写地址的偏移量值可以作为指令的一部分被存储在高层次指令存储器(如高层次存储器124)中,而非存储在轨道表126中。当需要计算读/写地址时,可以将该偏移量值从高层次指令存储器中送到操作单元372。此外,在一个多线程程序环境中,当切换线程时,该DBN队列可以将旧线程对应的DBN清除并加入新线程对应的DBN。或者DBN队列中的DBN可以包含一个由PID188设置的正确线程标志。
或者,也可以省去DBN队列和主动表195。生成存储器读/写地址并读取该数据段后,可以在高层次存储器196中使用一个标签-存储器结构将该数据段填充到高层次存储器196中,并填充该地址标签。当一个读/写指令被执行时,可以使用标签匹配的方法找到数据段。此外,虽然上述例子是针对读/写指令的,但对于间接寻址分支指令等其他指令也可以用类似的方式处理。
图25显示了缓存系统20000的更多的细节和配置。如图25所示,轨道表126中建立了轨道350。当由于一条分支指令导致程序执行流通过轨迹点表项3801进入到轨道350时,BNX152指向轨道350及高层次指令存储器124中的相应指令块,BNY156指向轨迹点3801,而数据指针355也指向轨迹点3801。之后BNY指针156和数据指针355向右移动(即进入到轨道350中)并检查经过的轨迹点的内容。BNY指针156停止在第一条分支指令,而数据指针355停止在第一条读/写指令或间接寻址分支指令。
BNY指针156指向的轨迹点的内容被送到交换器133。交换器133更新BN/TBN和循迹器170运行的细节如之前所述,这里不再提及。BNY指针156向右移动停止在第一条分支指令轨迹点380。如果存储在轨迹点380中的信息包含一个BN,那么该第一条分支指令的目标地址对应的指令段已经被填充到高层次指令存储器124中。如果存储在轨迹点380中的信息包含一个TBN,那么该第一条分支指令的目标地址对应的指令段尚未被填充到高层次指令存储器124中,并在该第一条分支指令被执行前在低级存储器122中找到这个指令段填充到高层次指令存储器124中。在某些实施例中,当不使用保留表时,交换器133可以被省略。
与此同时,当BNY指针156移动时,数据指针355也向右移动并停止在第一条读/写指令轨迹点352。具体地,当BNY指针156从轨迹点表项362(即轨迹点0)开始移动时,BNY指针指向的号码‘0’被写入寄存器379中。此外,寄存器379的值通过自增器408每次增加一并将该增加后的值写回寄存器379。例如,如果轨道350包含16个轨迹点,那么自增器408可以使用一个模16加1的逻辑(即对于值‘15’增加一得到的结果为‘0’)。这样数据指针355(即寄存器379的输出值)可以每次增加一从而向右移动并在一条新的轨道重新开始。此外,寄存器379可以受信号407控制临时停止写回,或受信号365控制恢复写回。
如之前所示,当数据指针355移动到轨迹点7(352)时,寄存器356中已经存储了轨迹点351的轨迹点号码‘3’,轨迹点352的内容通过总线358被送到译码器364,译码器364生成控制信号407送到寄存器379从而停止更新寄存器379(即数据指针355停止移动)。此外,译码器364生成一个选择信号388从选择器359中选出对应基地址寄存器BP1(356)的寄存器356的值。寄存器356的值通过总线389被送到比较器361。
当比较器361判断当前指令指针360送来的号码大于或等于总线389送来的号码(即轨迹点号码‘3’)时,可以计算基地址寄存器值和偏移量,并使用之前例子所述方法进行匹配和数据填充。
当轨迹点7(352)对应的数据段已经被填充时,寄存器379在信号365的控制下恢复更新。数据指针355继续向右移动,并将轨迹点353的轨迹点号码‘10’存储到BP2基地址寄存器对应的寄存器357中。此外,数据指针355向右移动直到到达轨迹点12(354)。轨迹点12(354)的内容通过总线358被送到译码器364。译码器364生成控制信号407暂停寄存器379的更新。可以重复前述过程将轨迹点12(354)对应的数据段填充到高层次数据存储器中,并将相应的DBN送到DBN队列370。
图26显示了缓存系统20000与图25中不同的配置。如图26所示,大多数结构与图25中的相同,如轨道表126(包含轨道350)、主动表195、DBN队列370、高层次指令存储器124、高层次数据存储器196、交换器133、循迹器170等。然而,图26中的缓存系统20000并不包含自增器408、选择器409、数据指针355和其他的一些相关逻辑。这就是说,指针156同时用于指令和数据操作(如:预填充),这也会导致检测模块406与图25中的检测模块371有所不同。例如,检测模块406包含一个队列397。队列397可以被用于存储基地址寄存器更新信息,如更新基地址寄存器的指令的轨迹点号码、基地址寄存器号码和偏移量等。
在操作过程中,当执行流通过轨迹点表项3801进入轨道350时,BNX指针152指向轨道350,BNY指针156指向轨迹点表项3801。BNY指针156在循迹器170的控制下向右移动并检查经过的轨迹点的内容。如之前所述,BNY指针156停止在第一条分支指令轨迹点,并如之前所述那样进行指令段填充操作。对于数据,检测模块406和主动表195共同工作进行数据段的填充。检测模块406包含基地址位置寄存器组363(如:寄存器356和寄存器357)、队列397、选择器359、比较器361、加法器372和译码器364等。
当BNY指针156从轨迹点表项3801(即轨迹点0)开始移动时,BNY指针156指向的号码‘0’通过总线358被写入寄存器组363中的寄存器356和357中。此外,当BNY指针156沿轨道350移动时,可以检测到轨迹点3(351)是一条更新基地址寄存器BP1的指令。这样,当BNY指针156移动到轨迹点351时,轨迹点351的内容通过总线358被送到译码器364,译码器364生成一个写使能信号387将轨迹点号码‘3’写入基地址寄存器BP1对应的寄存器356。
BNY指针继续移动到轨迹点352,轨迹点352的内容通过总线358被送到译码器364,译码器364生成一个选择信号388从选择器359中选出基地址寄存器BP1对应的寄存器356的值。寄存器356的值通过总线398被送到队列397。与此同时,译码器364也将基地址寄存器BP1号码和轨迹点7(352)中的偏移量信息送到队列397。由于使用了队列397,BNY指针156不需要停留在轨迹点352,而是可以继续向右移动直到到达第一条分支指令。
当BNY指针156停止在第一条分支指令轨迹点14(380)时,BP1基地址寄存器对应的寄存器356的值已经被更新为‘3’,BP2基地址寄存器对应的寄存器357的值已经被更新为‘10’。队列397的第一个表项中的轨迹点号码通过总线389被送到比较器361,该第一个表项中的基地址寄存器号码(BP1)被送到处理器核125,该第一个表项中的偏移量通过总线382被送到加法器372。
与此同时,当前指令指针360随指令执行流移动。当前指令指针360表示指令段中正在被执行的指令的位置信息。例如,该位置信息可以是程序计数(PC)的低地址。当前指令指针360指向的轨迹点的轨迹号码也被送到比较器361。当比较器361判断从当前指令指针360来的号码大于或等于从队列397通过总线389送来的号码(即轨迹点号码‘3’)时,表示最后更新寄存器指令已经被执行,且BP1基地址寄存器已经被更新为所需要的值。从比较器361送到加法器372的使能信号365被设为有效。
这样,从处理器核125来的基地址寄存器的值可以通过总线373被送到加法器372。加法器372可以通过基地址值加上偏移量的方式完成数据地址的计算,并将计算得到的数据地址通过总线375送到主动表195。之后,主动表195可以进行匹配操作。后续的诸如数据填充等操作与之前所述类似。
因此,队列397被用于存储读/写指令相关轨迹点的信息,如:轨迹点3(351)、轨迹点7(352)、轨迹点10(353)和轨迹点12(354)等。也可以使用同一结构在按顺序完成相应的指令段和数据段填充操作后更新或清除队列397。在某些指令与/或数据缓存实施例中,轨道表126的尺寸可以是被大为缩小或者被完全取消,使得相关操作(比如扫描,匹配与预填充等)在需要用到时才实时进行(Realtime,onthefly)。图27A显示了一个实时(onthefly)缓存2700的实施例。
如图27A所示,缓存结构2700中包括主动表121,生成器130,分支判断单元502,缓冲器504,与选择器508。也可能包括更多器件。
高层次存储器124里可以填有来自低层次存储器或其他存储器通过总线140输入的指令。如前所述,高层次存储器124可以由BNX521寻址。高层次存储器124也可以输出一个存储块以填充缓冲器504或供处理器核125直接使用。高层次存储器124中的每个存储块可以与主动表121中的表项一一对应。
缓充器504可以是一个多口存储器。例如,缓冲器504可以有三个口,一个供高层次存储器124将多条指令写入缓冲器504的写口,一个供生成器130从缓冲器504读出指令以供扫描的第一读口,还有一个CPU核125经过选择器508从缓冲器504读指令的第二读口。缓冲器504有合适的尺寸。比如缓冲器504的大小与一个存储器块,或者说指令块相当。
处理器核125对从选择器508而来的指令译码并执行产生BNY532。处理器核125也可以产生是否分支与/或跳转信号528。选择器508由信号529控制来选择从高层次存储器124或者缓冲器504来的指令。
因为处理器核125正在执行的指令在缓冲器504中,生成器130可以在指令被处理器核125译码并执行之前就从缓冲器504的第一读口中扫描指令。因为缓冲器504中的内容是相应与高层次存储器124中的一个存储块,扫描操作与之前描述过的缓存结构相似,比如找出分支指令,计算分支目标地址,并将分支目标地址送往主动表121来进行匹配操作等等。
当生成器130找到一个分支指令,生成器130计算所找到分支指令的分支目标地址将分支目标地址送往主动表121。生成器130也将分支指令的类型(比如条件或非条件分支)送至分支判断单元502。
主动表121接收生成器130送来的分支目标地址,并将分支目标地址与主动表121的内容匹配以寻找相应的指令存储块号码BNX521。如果主动表121的内容与从生成器130送来的分支目标地址不匹配,分支目标地址被送往低级存储器(此处未显示)取相应的存储块并将取到的相应存储块填充到高层次存储器124。在主动表121中也新增与分支目标地址相应的一个表项。
另一方面如果主动表121的内容与从生成器130送来的分支目标地址有匹配,主动表就将相应的存储器块号BNX送往高层次存储器124以寻址一个存储器块。这个存储块的内容也可以被输出到缓冲器504与/或处理器核125。
处理器核125向高层次存储器124与缓冲器504提供块内偏移量BNY532来寻址块内的具体指令。处理器核125也提供信号528至分支判断单元502以传递分支与否信息。进一步,分支判断单元502基于分支类型信号527与分支与否信号528产生信号529用以控制选择器531,也选择是否用高层次存储器124输出的指令块替换缓冲器504的内容。
如果判断结果是不进行分支,那么信号509控制选择器508选择来自缓冲器504的输出(分支指令后的指令)也控制缓冲器504保持现有内容不变。在此情况下,处理器核125执行分支指令后的指令。
但是,如果判断结果是进行分支,那么信号509控制选择器508选择高层次存储器124的输出(分支目标)也控制缓冲器504用高层次存储器124的输出更新缓冲器504的内容。在这个情况下,处理器核125执行分支目标指令及分支目标指令后的指令。
在上述两种情况下,生成器130都在不断寻找下一条分支指令并重复上述过程。因为生成器130扫描指令的速度高于处理器核125执行指令的速度,分支目标指令可以在被执行到之前就被填入高层次存储器124。
结构2700可以被进一步优化。图27B显示了另外一个缓存结构2750的例子。缓存结构2750与图27A的缓存结构2700相似,但缓存结构2750可含有一个额外的缓冲器506和一个选择器507,如图27B所示。这就是缓冲器504上带有一个附加缓冲器506。缓冲器506可以存放一些有助于提高扫描速度的信息。
更具体地说,当主动表121找到一个匹配而产生一个相应的块号码BNX521时,BNX521不仅被用于寻址高层次存储器124,它也被存于缓冲器506中与原来的分支指令相应的一个表项。当下一次生成器130扫描到这个表项时,BNX可以直接从缓冲器506读出并通过总线523送至选择器507(由这一个BNX的有效性控制)通过地址总线525去高层次存储器124寻址。如此,减少了主动表121的匹配次数来降低功耗,降低延迟。另外,如果高层次存储器124本身是个多口的存储器,那么这里缓冲器504与高层次存储器124的功能可以由高层次存储器124单独完成。
在操作过程中,由于轨道表中的总行数是有限的,可能需要将已经存在的行替换为新的行。当判断哪个行被替换时,通常而言,轨道表601可以使用一个类似LRU或LFU的策略以决定一个或多个行被替换,这也表示在一级缓存中的对应指令/存储块和主动表121中的对应表项也要被更新或替换。
然而,当一个存储块(和对应的轨道表行)被替换时,其他的轨道表行可能具有以被替换掉的行作为分支目标的分支指令(轨道表中具有包含被替换掉的行的BNX的行)。在这种情况下,当替换发生时,以被替换掉的行作为分支目标的分支指令会转移到不同的指令块从而导致错误。可以实现某些机制以防止这样的错误发生。
图28A-B显示了根据本发明技术方法改进的轨道表601的实施例。如图28A所示,轨道表601可以包含:行‘0’-‘3’,列‘Y0’-‘Y7’和一个结尾列。轨道表601中的每个表项可以具有轨道表601能识别的各种类型中的一种类型。例如,包含对应条件分支指令的‘BR’类型和对应无条件分支指令的‘J’类型的各种类型,且分支指令类型‘BR’和‘J’都包含一个对应表项的BNX值以表示分支目标存储块号码。各种类型也包含‘Null’以对应非分支指令类型,和‘PC’表示尚没有对应表项的BNX的分支指令。
这就是说,‘PC’类型表示一个还没有被分配的BNX,且对应的存储块需要被读出以计算分支目标地址。其他类型也可以被包含以实现其他操作,如:数据缓存操作。当建立一行或一条轨道时,某些表项可以被标记为PC。轨道表601中每行的结尾列具有一个跳转类型及对应的BNX值以表示后续指令被存储在哪个存储块中。
具体地,行‘0’可以具有一个为‘BR2’的表项602,表示是一条具有目标BNX值‘2’的分支指令(即,行‘2’);一个为‘BR1’的表项603,表示是一条具有目标BNX值‘1’的分支指令;和一个为‘J1’的表项604,表示是一个后续指令在行‘1’的跳转。行‘1’可以具有一个为‘BR3’的表项605,表示一条目标BNX值为‘3’的分支指令;一个为‘BR2’的表项606;和一个为‘J2’的表项607。行‘2’可以具有一个为‘BR1’的表项608;一个为‘BR1’的表项609;和一个为‘J3’的表项610。此外,行‘3’可以具有一个为‘BR0’的表项611,表示是一条具有目标BNX值‘0’的分支指令和一个为‘BR1’的表项612。也可以包含其他类型。
相关表613可以具有与轨道表601中行数相同的行,而列数等于行数。这就是说,相关表613是一个N乘N的表,其中N对应轨道表601行的数目。相关表613中每行对应轨道表601中的每行。对于相关表613中的某一行,如果在轨道表601中的对应行中有分支指令,那么相关表613中该行中以该分支指令的目标BNX作为列地址的表项的值被设为‘1’。如果在轨道表601中的对应行中有超过一条分支指令,那么相关表项的值也被类似地设为‘1’。在该相关表上,行上所有‘1’的项代表一个分支源,列上的任意为‘1’的项代表以该列号码作为轨道表601中行号码的行是分支目标。
具体地,由于轨道表601中的行‘0’包含两条分支指令,‘BR2’和‘BR1’,相关表613中的两个表项614和615,(0,1)和(0,2)被设为‘1’。类似地,表项616(1,2),617(1,3),618(2,1),620(3,0),621(3,1)都被设为‘1’。把每个列上的各行值相加可以计算出一个总数,这个总数就是能转移进入以该列号码作为轨道表601中行号码的行的行的总数目。总数目622、623、624和625分别为列‘0’、‘1’、‘2’、‘3’的总数目,分别为‘1’、‘3’、‘2’和‘2’。该总数目可以被用于在超过一行可以被替换时,确定替换哪个行。此外,一个有效列626可以被用于表示相关表613中的行是否有效。该有效列626包含分别对应相关表613中各行的位627、位628、位629和位630。轨道表601中一个跳转到本行的行不必一定表示在相关表613中。
当轨道表601中的一个行需要被替换时(如:当轨道表601中的所有行都已经被填充,而新的内容需要被填充到一级缓存和轨道表601中时,根据LRU策略找到行‘0’。在行‘0’被替换前,或当行‘0’被替换时,访问相关表613以找到轨道表601中会受这个替换影响的任何行。这就是说,用将被替换的行的号码即‘0’)作为列号码在相关表613中查找。读出相关表613的列‘0’,该列上所有具有值‘1’的表项对应的行都会受该替换影响。
具体地,在这里列‘0’,行‘3’的表项为‘1’,表示行‘3’具有一条以行‘0’为分支目标的分支指令。检测轨道表601的行‘3’,将该行中任何以行‘0’为分支目标的表项替换为‘PC’,以表示此处没有已知的分支目标BNX值。当循迹器(如:领先指针)到达该表项时,“PC”会触发系统再次读出相应的分支指令块并重新计算其分支目标,从而重新分配一个新BNX到该“PC”轨道表项中(这也包括对一级缓存、主动表和轨道表等的相应填充)。
如图28B所示,当所有受影响的行都处理(如:替换为‘PC’)完毕之后,相关表613的行‘0’的表项被设为‘0’;相关表613中列‘0’的表项也被设为‘0’。此时,轨道表601的行‘0’可以被新的内容填充。
图29显示了使用了图28A-B中所述相关表的缓存结构2900。如图29所示,缓存结构2900与之前所述的缓存结构类似。然而,缓存结构2900包含一个连接在轨道表126和主动表121之间的相关表557。此外,当在轨道表126中到达一个‘PC’表项时,生成器130可以扫描对应的存储块而不是重新计算分支目标地址。
本发明所述系统和方法可以为数字系统使用的缓存结构提供基本的解决方案。与传统缓存系统仅在缓存缺失后才填充的机制不同,本发明所述的系统和方法在处理器执行一条指令或访问一个数据之前就对指令缓存和数据缓存进行填充,可以避免或充分地隐藏强制缺失。这就是说,本发明所述缓存系统集成了预取过程,并消除了传统缓存必须的标签比较过程。此外,本发明所述系统和方法在本质上提供了一个全相联的缓存结构,避免或充分隐藏了冲突缺失和容量缺失。此外,本发明所述的系统和方法支持同时搜索多层缓存结构,因此降低了多层缓存的缺失惩罚。本发明所述的系统和方法还因为避免了在访问缓存的时延关键路径上的标签匹配,所以能运行在较高的时钟频率。由于本发明所述的系统和方法需要的匹配操作较少,并有较低的缺失率,因此单位功耗下的效率也比传统缓存系统有显著提高。此外,本发明所述系统和方法可以使用一个独立的数据缓存控制结构或集成的指令/数据缓存控制结构在需要访问数据的指令执行前将该数据填充到数据缓存中。对于本领域专业人士而言,本发明的其他优点和应用是显见的。
Claims (20)
1.一个数字系统,包括:
一个处理器核,所述处理器核连接一个包含数据的第一存储器和一个比第一存储器速度更快的第二存储器,且所述处理器用于执行一段包含至少一条使用一个基地址在第二存储器中访问数据的指令,和
一个缓存控制单元,所述缓存控制单元连接第一存储器、第二存储器和处理器核,用于在处理器核执行访问数据的指令前将数据从第一存储器填充到第二存储器中,
其特征在于所述缓存控制单元可进一步用于:
对指令段进行审查,从而提取出至少包含数据访问指令信息和最后更新寄存器指令信息的指令信息,
根据提取出的指令信息建立对应指令段的轨道,
在最后更新至少一条访问数据的指令所用的寄存器的指令执行后,根据指令段对应的轨道将第一存储器中的数据填充到第二存储器中。
2.根据权利要求1所述数字系统,其特征在于:
所述轨道包含复数个轨迹点,每个对应指令段中的一条指令。
3.根据权利要求2所述数字系统,其特征在于:
数据寻址格式为基地址寄存器加上偏移量的方式。
4.根据权利要求3所述数字系统,其特征在于:
数据访问指令信息包含一个数据访问指令标志,一个基地址寄存器号和一个偏移量;和
寄存器更新指令信息包含一个寄存器更新指令标志和一个基地址寄存器号。
5.根据权利要求1所述数字系统,其特征在于缓存控制单元进一步包括:
一个数据指针沿指令段以比指向正被处理器核执行的指令的当前指令指针更快的速度移动,并停止在至少一条访问数据的指令处以提取该指令信息。
6.根据权利要求5所述数字系统,其特征在于缓存控制单元进一步用于:
将所有更新基地址寄存器的指令的位置信息存储到相应的基地址寄存器位置寄存器中;
对当前指令指针和存储在基地址寄存器位置寄存器中的对应至少一条访问数据指令的位置信息进行比较;和
如果当前指令指针大于或等于存储在基地址寄存器位置寄存器中的位置信息,那么生成一个信号从而基于基地址产生完整数据地址。
7.根据权利要求6所述数字系统,其特征在于缓存控制单元进一步用于:
根据完整的数据地址将数据从第一存储器填充到第二存储器。
8.根据权利要求6所述数字系统,其特征在于缓存控制单元进一步用于:
对该完整地址和一个主动表中的表项进行匹配以确定数据是否已经在第二存储器中;
当没有表项与该完整地址匹配成功时,在主动表中建立一个包含该数据的数据块号的新表项,并使用这个数据块号将数据填充到第二存储器中;和
当有一个表项与该完整地址匹配成功时,从该表项中获取该数据对应的数据块号。
9.根据权利要求6所述数字系统,其特征在于缓存控制单元进一步包括:
一个用于保存供处理器核按顺序访问复数个数据块的对应这复数个数据块的复数个数据块号的队列。
10.根据权利要求1所述数字系统,其特征在于:
所述轨道也被用做指令段的轨道,用以将指令段填充到与第二存储器中数据部分不同的部分。
11.根据权利要求10所述数字系统,其特征在于指令信息进一步包括分支指令信息,和缓存控制单元进一步包括:
一个数据指针沿指令段以比指向正被处理器核执行的指令的当前指令指针更快的速度移动,并停止在第一条分支指令处以提取该指令信息。
12.根据权利要求11所述数字系统,其特征在于:
所述分支指令信息包括直接寻址分支指令信息和间接寻址分支指令信息。
13.一种用于辅助处理器核运行的方法,所述处理器核连接一个包含可执行指令的第一存储器和一个比第一存储器速度更快的第二存储器,并用于执行至少包含一条使用一个基地址寄存器访问第二存储器中数据的指令的指令段;所述方法包括:
对指令段进行审查,从而提取出至少包括数据访问指令信息和最后寄存器更新指令信息的指令信息;
根据提取出的指令信息建立对应该指令段的轨道;
在最后更新至少一条数据访问指令所用的寄存器的指令执行后且在处理器核执行该数据访问指令之前,根据指令段对应的轨道将第一存储器中的数据填充到第二存储器中。
14.根据权利要求13所述方法,其特征在于:
所述轨道包含复数个轨迹点,每个对应指令段中的一条指令;和
数据的寻址格式为基地址寄存器加上偏移量。
15.根据权利要求14所述方法,其特征在于:
数据访问指令信息包含一个数据访问指令标志,一个基地址寄存器号和一个偏移量;和
寄存器更新指令信息包含一个寄存器更新指令标志和一个基地址寄存器号。
16.根据权利要求13所述方法,其特征在于进一步包括:
使用一个数据指针沿指令段以比指向当前正在被处理器核执行的当前指令指针更快速度移动,从而提取指令信息,并停止在至少一条访问数据的指令处。
17.根据权利要求16所述方法,其特征在于进一步包括:
将所有更新基地址寄存器的指令的位置信息存储到相应的基地址寄存器位置寄存器中;
对当前指令指针和存储在基地址寄存器位置寄存器中的对应至少一条数据访问指令的位置信息进行比较;和
如果当前指令指针大于或等于存储在基地址寄存器位置寄存器中的位置信息,那么生成一个信号从而基于基地址产生完整数据地址。
18.根据权利要求17所述方法,其特征在于进一步包括:
根据完整的数据地址将数据从第一存储器填充到第二存储器。
19.根据权利要求17所述方法,其特征在于进一步包括:
对该完整地址和一个主动表中的表项进行匹配以确定数据是否已经在第二存储器中;
当没有表项与该完整地址匹配成功时,在主动表中建立一个包含该数据的数据块号的新表项,并使用这个数据块号将数据填充到第二存储器中;和
当有一个表项与该完整地址匹配成功时,从该表项中获取该数据对应的数据块号。
20.根据权利要求13所述方法,其特征在于:
所述轨道也被用做指令段的轨道,用以将指令段填充到与第二存储器中数据部分不同的部分。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110180079.7A CN102841865B (zh) | 2011-06-24 | 2011-06-24 | 高性能缓存系统和方法 |
PCT/CN2012/077558 WO2012175058A1 (en) | 2011-06-24 | 2012-06-26 | High-performance cache system and method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110180079.7A CN102841865B (zh) | 2011-06-24 | 2011-06-24 | 高性能缓存系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102841865A CN102841865A (zh) | 2012-12-26 |
CN102841865B true CN102841865B (zh) | 2016-02-10 |
Family
ID=47369247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110180079.7A Active CN102841865B (zh) | 2011-06-24 | 2011-06-24 | 高性能缓存系统和方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102841865B (zh) |
WO (1) | WO2012175058A1 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103984637A (zh) * | 2013-02-07 | 2014-08-13 | 上海芯豪微电子有限公司 | 一种指令处理系统及方法 |
US20160217079A1 (en) | 2013-02-08 | 2016-07-28 | Shanghai Xinhao Microelectronics Co., Ltd. | High-Performance Instruction Cache System and Method |
US10067767B2 (en) * | 2013-08-19 | 2018-09-04 | Shanghai Xinhao Microelectronics Co., Ltd. | Processor system and method based on instruction read buffer |
CN104424128B (zh) * | 2013-08-19 | 2019-12-13 | 上海芯豪微电子有限公司 | 变长指令字处理器系统和方法 |
CN104424132B (zh) * | 2013-08-23 | 2019-12-13 | 上海芯豪微电子有限公司 | 高性能指令缓存系统和方法 |
CN104699627B (zh) * | 2013-12-06 | 2019-05-07 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN104731718A (zh) * | 2013-12-24 | 2015-06-24 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN104978282B (zh) * | 2014-04-04 | 2019-10-01 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
KR102106261B1 (ko) | 2014-06-17 | 2020-05-04 | 삼성전자주식회사 | 메모리 컨트롤러의 작동 방법과 이를 포함하는 장치들의 작동 방법들 |
CN104111901B (zh) * | 2014-08-07 | 2017-05-24 | 昆腾微电子股份有限公司 | 用于填充存储器的方法及装置 |
CN106330498B (zh) * | 2015-06-25 | 2019-08-27 | 华为技术有限公司 | 远程数据获取方法及装置 |
GB2547893B (en) * | 2016-02-25 | 2018-06-06 | Advanced Risc Mach Ltd | Combining part of an offset with a corresponding part of a base address and comparing with a reference address |
CN106936914B (zh) * | 2017-03-16 | 2020-06-19 | 宿州学院 | 一种基于节点位移和lfu记录的缓存更新方法及网络 |
CN109471671B (zh) * | 2017-09-06 | 2023-03-24 | 武汉斗鱼网络科技有限公司 | 一种程序冷启动方法和系统 |
CN109992529B (zh) * | 2018-01-03 | 2021-07-16 | 华为技术有限公司 | 虚拟地址确定方法及装置、处理器、存储介质 |
CN111290305B (zh) * | 2018-12-06 | 2021-05-04 | 航天科工惯性技术有限公司 | 多套惯导系统多路数字量采集与处理防冲突方法及系统 |
CN109726538B (zh) * | 2019-01-11 | 2020-12-29 | 李庆湧 | 一种声纹识别解锁的移动智能终端及其方法 |
WO2021128217A1 (zh) * | 2019-12-26 | 2021-07-01 | 华为技术有限公司 | 一种数据查找系统及数据查找方法 |
CN112130897A (zh) * | 2020-09-23 | 2020-12-25 | 上海兆芯集成电路有限公司 | 微处理器 |
CN112147931B (zh) * | 2020-09-22 | 2022-06-24 | 哲库科技(北京)有限公司 | 一种信号处理器的控制方法、装置、设备以及存储介质 |
CN112612728B (zh) * | 2020-12-17 | 2022-11-11 | 海光信息技术股份有限公司 | 缓存管理方法及装置、设备 |
CN113703832B (zh) * | 2021-09-10 | 2024-06-11 | 中国人民解放军国防科技大学 | 一种立即数转移指令的执行方法、装置及介质 |
CN116069439A (zh) * | 2021-11-02 | 2023-05-05 | 华为技术有限公司 | 数据处理方法、设备、系统及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1414467A (zh) * | 2002-06-18 | 2003-04-30 | 智慧第一公司 | 选择性执行预取指令的微处理器与方法 |
CN1497436A (zh) * | 2002-10-22 | 2004-05-19 | 富士通株式会社 | 信息处理单元和信息处理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7441110B1 (en) * | 1999-12-10 | 2008-10-21 | International Business Machines Corporation | Prefetching using future branch path information derived from branch prediction |
EP2517100B1 (en) * | 2009-12-25 | 2018-09-26 | Shanghai Xinhao Micro-Electronics Co. Ltd. | High-performance cache system and method |
-
2011
- 2011-06-24 CN CN201110180079.7A patent/CN102841865B/zh active Active
-
2012
- 2012-06-26 WO PCT/CN2012/077558 patent/WO2012175058A1/en active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1414467A (zh) * | 2002-06-18 | 2003-04-30 | 智慧第一公司 | 选择性执行预取指令的微处理器与方法 |
CN1497436A (zh) * | 2002-10-22 | 2004-05-19 | 富士通株式会社 | 信息处理单元和信息处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102841865A (zh) | 2012-12-26 |
WO2012175058A1 (en) | 2012-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102841865B (zh) | 高性能缓存系统和方法 | |
US7406569B2 (en) | Instruction cache way prediction for jump targets | |
CN105701033B (zh) | 取决于模式而可动态配置的高速缓存存储器 | |
CN105701031B (zh) | 处理器及其高速缓存存储器和高速缓存存储器的操作方法 | |
US5737750A (en) | Partitioned single array cache memory having first and second storage regions for storing non-branch and branch instructions | |
CN105701030B (zh) | 根据卷标比特的动态高速缓存置换路选择 | |
CN102855121B (zh) | 分支处理方法与系统 | |
US6351796B1 (en) | Methods and apparatus for increasing the efficiency of a higher level cache by selectively performing writes to the higher level cache | |
US20150186293A1 (en) | High-performance cache system and method | |
US5093778A (en) | Integrated single structure branch prediction cache | |
CN102110058B (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
CN104679481B (zh) | 一种指令集转换系统和方法 | |
CN104050092B (zh) | 一种数据缓存系统及方法 | |
US9753855B2 (en) | High-performance instruction cache system and method | |
CN103620547A (zh) | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 | |
KR100335672B1 (ko) | 메모리페이지크로싱예측주석을사용하는실제주소지정데이타기억구조로부터의빠른데이타검색 | |
JPH1074166A (ja) | 多重レベル・ダイナミック・セット予測方法および装置 | |
CN103984637A (zh) | 一种指令处理系统及方法 | |
CN104731719A (zh) | 一种缓存系统和方法 | |
CN103176914A (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
US7269825B1 (en) | Method and system for relative address translation | |
US5893146A (en) | Cache structure having a reduced tag comparison to enable data transfer from said cache | |
US20160217079A1 (en) | High-Performance Instruction Cache System and Method | |
CN103514107B (zh) | 高性能数据缓存系统和方法 | |
JP4254954B2 (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 201203 501, No. 14, Lane 328, Yuqing Road, Pudong New Area, Shanghai Patentee after: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. Address before: 200092, B, block 1398, Siping Road, Shanghai, Yangpu District 1202 Patentee before: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |