CN104050092A - 一种数据缓存系统及方法 - Google Patents
一种数据缓存系统及方法 Download PDFInfo
- Publication number
- CN104050092A CN104050092A CN201310086817.0A CN201310086817A CN104050092A CN 104050092 A CN104050092 A CN 104050092A CN 201310086817 A CN201310086817 A CN 201310086817A CN 104050092 A CN104050092 A CN 104050092A
- Authority
- CN
- China
- Prior art keywords
- data
- address
- instruction
- reading command
- base address
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6022—Using a prefetch buffer or dedicated prefetch cache
Abstract
本发明提供了一种数据缓存系统及方法。在本发明提供的数据缓存系统及方法中,利用在指令缓存或数据轨道表中存储相关信息提前对数据缓存进行填充,并提前控制数据缓存向处理器输出可能被访问的数据,从而部分或全部掩盖了数据缓存缺失造成的等待时间和/或对数据缓存的访问时延。
Description
技术领域
本发明涉及计算机架构技术领域,特别涉及一种数据缓存系统及方法。
背景技术
通常而言,缓存的作用是将内存中的一部分内容复制在其中,使这些内容能在短时间内由处理器核快速存取,以保证流水线的持续运行。
现行缓存的寻址都基于以下方式,首先用地址中的索引段寻址读出标签存储器中的标签。同时用地址中索引段与块内位移段共同寻址读出缓存中的内容。此外,将标签存储器中读出的标签与地址中的标签段进行匹配。如果从标签存储器中读出的标签与地址中的标签段相同,那么从缓存中读出的内容有效,称为缓存命中。否则,如果从标签存储器中读出的标签与地址中的标签段不相同,成为缓存缺失,从缓存中读出的内容无效。对于多路组相联的缓存,同时对各个路组并行进行上述操作,以检测哪个路组缓存命中。命中路组对应的读出内容为有效内容。若所有路组都为缺失,则所有读出内容都无效。缓存缺失之后,缓存控制逻辑将低级存储媒介中的内容填充到缓存中。
在现有缓存结构中,各种各样的缓存预取技术被用来减少缓存缺失的发生。对于指令缓存而言,预取技术能带来一定的性能提升。但是对于数据缓存,由于数据地址的不确定性,很难有效地对数据地址进行预测。因此,随着日渐扩大的处理器/存储器速度鸿沟,数据缓存缺失仍是制约现代处理器性能提升的最严重瓶颈。
发明内容
本发明的目的在于提供一种数据缓存系统及方法,根据事先记录的数据读取指令(LOAD指令)相关信息预测该指令的数据地址,从而提前从外部存储器预取相应数据块将对应数据块填充到数据缓存中,并在处理器执行到该数据读取指令之前向处理器提供对应数据,部分或全部掩盖了数据缓存缺失造成的等待时间和/或对数据缓存的访问时延,提高了指令处理系统的性能。对于数据存储指令(STORE指令),也可以用类似的方法提高性能。
为解决上述技术问题,本发明提供了一种数据缓存系统,所述数据缓存系统包括:处理器,所述处理器用以执行指令、读取数据;存储系统,所述存储系统用以存储指令和数据;指令轨道表,所述指令轨道表存储所述存储系统中存储的分支指令的相关信息;循迹器,所述循迹器指向处理器当前正在执行的指令之后的第一条数据读取指令;数据引擎,所述数据引擎用以在处理器执行所述循迹器指向的数据读取指令之前,提前计算出数据地址,并根据所述数据地址控制存储系统向处理器提供对应数据。
可选的,在所述的数据缓存系统中,所述存储系统进一步包含指令缓存,所述指令缓存用以存储供处理器执行的指令及数据读取指令的相关信息;所述相关信息表示该指令是否为数据读取指令。
可选的,在所述的数据缓存系统中,所述数据读取指令的相关信息为数据读取指令的类型信息;根据所述类型信息,可以直接得到基地址寄存器号、地址偏移量在该指令码中的位置信息。
可选的,在所述的数据缓存系统中,所述存储系统进一步包含数据轨道表,所述数据轨道表用以存储数据读取指令的相关信息;所述相关信息表示该指令是否为数据相关指令;且所述数据轨道表的行与指令轨道表的行一一对应。
可选的,在所述的数据缓存系统中,所述数据读取指令的相关信息为数据读取指令的类型信息;根据所述类型信息,可以直接得到基地址寄存器号、地址偏移量在该指令码中的位置信息。
可选的,在所述的数据缓存系统中,所述数据轨道表进一步存储了数据读取指令的基地址寄存器号和地址偏移量中的至少一项内容。
可选的,在所述的数据缓存系统中,所述数据引擎以基地址寄存器值加地址偏移量得到确定数据地址;或以基地址寄存器值作为确定数据地址;或以指令地址值加地址偏移量得到确定数据地址;或多个基地址寄存器值相加得到确定数据地址。
可选的,在所述的数据缓存系统中,所述数据缓存系统包含一个时间点检测模块;所述时间点检测模块用以判断是否到达向存储系统输出数据地址以读出数据并提供给处理器的时间点。
可选的,在所述的数据缓存系统中,所述数据引擎进一步包含判断模块,所述判断模块对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值;且当基地址寄存器的值被更新为该数据读取指令所需的基地址寄存器值时,用数据引擎计算得到的所述确定数据地址控制存储系统向处理器提供数据。
可选的,在所述的数据缓存系统中,所述数据引擎进一步包含基地址差值存储器,所述基地址差值存储器中的每一项对应一个基地址寄存器,用于存储对应基地址寄存器的变化差值。
可选的,在所述的数据缓存系统中,所述数据引擎还能够以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或以基地址寄存器值加对应基地址差值作为可能数据地址;或多个基地址寄存器值及对应的基地址差值相加得到可能数据地址。
可选的,在所述的数据缓存系统中,所述数据引擎进一步包含判断模块,所述判断模块对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值;且当基地址寄存器的值尚未被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据;当基地址寄存器的值已经被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述确定数据地址控制存储系统向处理器提供数据。
可选的,在所述的数据缓存系统中,所述数据引擎进一步包含比较器,在所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据的情况下,当处理器执行所述数据读取指令产生实际数据地址时,所述比较器对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
可选的,在所述的数据缓存系统中,对于任意数据读取指令,所述数据引擎在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
可选的,在所述的数据缓存系统中,所述数据引擎中的加法器对所述实际数据地址与对应基地址差值相加得到所述预测数据地址。
可选的,在所述的数据缓存系统中,所述数据引擎进一步包含基地址差值存储器,所述基地址差值存储器中的每一项对应一个基地址寄存器,用于存储对应基地址寄存器的变化差值;所述数据引擎在处理器执行所述数据读取指令之前,以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或以基地址寄存器值加对应基地址差值作为可能数据地址;或多个基地址寄存器值及对应的基地址差值相加得到可能数据地址。
可选的,在所述的数据缓存系统中,所述数据引擎进一步包含比较器,在所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据的情况下,当处理器执行所述数据读取指令产生实际数据地址时,所述比较器对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
可选的,在所述的数据缓存系统中,对于任意数据读取指令,所述数据引擎在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
可选的,在所述的数据缓存系统中,所述数据引擎中的加法器对所述实际数据地址与所述基地址差值相加得到所述预测数据地址。
可选的,在所述的数据缓存系统中,所述指令轨道表和数据轨道表的列数均可以少于指令块中指令个数;且所述指令轨道表的每个表项对应一条分支指令,其表项格式包含分支目标指令块上从分支目标指令开始的第一条分支指令在指令轨道表中的行地址和列地址,以及所述分支目标指令块上从所述分支目标指令开始的第一条数据读取指令在数据轨道表中的列地址;所述数据轨道表的每个表项对应一条数据读取指令。
可选的,在所述的数据缓存系统中,所述数据缓存系统进一步包括数据读缓冲,所述数据读缓冲存储当前指令之后的若干条数据读取指令可能用到的数据,供处理器读取。
可选的,在所述的数据缓存系统中,所述数据缓存系统进一步包括指令读缓冲,所述指令读缓冲存储了至少包括当前指令块在内的单数个或复数个指令块;且所述数据读缓冲中的表项数目与所述指令读缓冲中的指令数目相同,且一一对应;对于指令读缓冲中的任意数据读取指令,其在数据读缓冲中的对应表项用于存储该数据读取指令对应的数据。
可选的,在所述的数据缓存系统中,使用同一数据读取指令的指令地址或指令地址偏移量,能够从所述指令读缓冲和数据读缓冲中同时读出所述数据读取指令及对应数据。
可选的,在所述的数据缓存系统中,根据数据读取指令与该指令之前最后更新对应基地址寄存器值的指令之间的距离,对数据读取指令分类;根据所述分类,在不同的时间点控制数据缓存将不同类型的数据读取指令对应的数据存储到数据读缓冲中。
可选的,在所述的数据缓存系统中,记录指令读缓冲中的数据读取指令对应数据是否已经存储在数据读缓冲中的信息,并根据所述信息对相应数据尚未存储在数据读缓冲中的数据读取指令计算数据地址并控制数据缓存将对应的数据读取指令对应的数据存储到数据读缓冲中。
本发明还提供了一种数据缓存方法,所述数据缓存方法包括:提前找到处理器当前正在执行的指令之后的数据读取指令;在处理器执行所述数据读取指令之前,提前计算出数据地址,并根据所述数据地址控制存储系统向处理器提供对应数据。
可选的,所述的数据缓存方法进一步包括:以基地址寄存器值加地址偏移量得到确定数据地址;或以基地址寄存器值作为确定数据地址;或以指令地址值加地址偏移量得到确定数据地址;或多个基地址寄存器值相加得到确定数据地址。
可选的,所述的数据缓存方法进一步包括:通过对所述数据读取指令的地址与处理器当前执行的指令的地址进行比较,以判断是否到达向存储系统输出数据地址以读出数据并提供给处理器的时间点;且当基地址寄存器的值已经被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述确定数据地址控制存储系统向处理器提供数据。
可选的,所述的数据缓存方法进一步包括:记录所有基地址寄存器的变化差值。
可选的,所述的数据缓存方法进一步包括:以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或以基地址寄存器值加对应基地址差值作为可能数据地址;或多个基地址寄存器值及对应的基地址差值相加得到可能数据地址。
可选的,所述的数据缓存方法进一步包括:通过对所述数据读取指令的地址与处理器当前执行的指令的地址进行比较,以判断是否到达向存储系统输出数据地址以读出数据并提供给处理器的时间点。
可选的,所述的数据缓存方法进一步包括:对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值;且当基地址寄存器的值尚未被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据;当基地址寄存器的值已经被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述确定数据地址控制存储系统向处理器提供数据。
可选的,所述的数据缓存方法进一步包括:在选择所述可能数据地址控制存储系统向处理器提供数据的情况下,当处理器执行所述数据读取指令产生实际数据地址时,所述比较器对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
可选的,所述的数据缓存方法进一步包括:对于任意数据读取指令,在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
可选的,所述的数据缓存方法进一步包括:对所述实际数据地址与所述基地址差值相加得到所述预测数据地址。
可选的,所述的数据缓存方法进一步包括:记录所有基地址寄存器的变化差值;在处理器执行所述数据读取指令之前,以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或以基地址寄存器值加对应基地址差值作为可能数据地址;或多个基地址寄存器值及对应的基地址差值相加得到可能数据地址;根据所述可能数据地址控制存储系统向处理器提供数据;当处理器执行所述数据读取指令产生实际数据地址时,对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
可选的,所述的数据缓存方法进一步包括:对于任意数据读取指令,在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
可选的,所述的数据缓存方法进一步包括:对所述实际数据地址与所述基地址差值相加得到所述预测数据地址。
可选的,所述的数据缓存方法进一步包括:建立数据读取指令与对应数据之间的联系;使用同一数据读取指令的指令地址或指令地址偏移量,同时读出所述数据读取指令及对应数据。
可选的,所述的数据缓存方法进一步包括:根据数据读取指令与该指令之前最后更新对应基地址寄存器值的指令之间的距离,对数据读取指令分类;根据所述分类,在不同的时间点控制数据缓存输出不同类型的数据读取指令对应的数据。
可选的,所述的数据缓存方法进一步包括:记录数据读取指令对应数据是否已经由数据缓存输出的信息,并根据所述信息对相应数据尚未由数据缓存输出的数据读取指令计算数据地址并控制数据缓存输出对应的数据。
附图说明
图1是本发明实施例的数据缓存系统的一框结构示意图;
图2是本发明实施例的循迹器的一框结构示意图;
图3a是本发明实施例的数据引擎的一示意图;
图3b是本发明实施例的判断模块的一示意图;
图3c是本发明实施例的数据引擎的另一示意图;
图3d是本发明实施例的计算基地址差值的一示意图;
图4是本发明实施例的数据缓存系统的另一框结构示意图;
图5a是本发明实施例的数据引擎的另一示意图;
图5b是本发明实施例的判断模块的另一示意图;
图6是本发明实施例的数据缓存系统的另一框结构示意图;
图7是本发明实施例的压缩轨道表应用的示意图;
图8a是本发明实施例的指令读缓冲和数据读缓冲配合工作的一示意图;
图8b是本发明实施例的指令读缓冲和数据读缓冲配合工作的另一示意图;
图8c是本发明实施例的指令读缓冲和数据读缓冲配合工作的另一示意图。
具体实施方式
以下结合附图和具体实施例对本发明提出的数据缓存系统及方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
为了便于描述,在本说明书中,以数据读取指令为例对本发明技术方案进行说明。对于数据存储指令,也可以用类似方式实现。
请参考图1,其为本发明实施例的数据缓存系统的一框结构示意图。如图1所示,所述数据缓存系统包含处理器101、主动表109、数据块地址存储比较器127、扫描器111、指令轨道表107、循迹器119、指令缓存103、数据缓存113、数据引擎105和时间点检测模块148。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
在本发明中,处理器可以是包含指令缓存和数据缓存、能执行指令并对数据进行处理的处理单元,包括但不限于:通用处理器(General Processor)、中央处理器(CPU)、微控制器(MCU)、数字信号处理器(DSP)、图象处理器(GPU)、片上系统(SOC)、专用集成电路(ASIC)等。
在本发明中,存储器的层次指的是存储器与处理器101之间的接近程度。越接近处理器101的层次越高。此外,一个高层次的存储器(如指令缓存103和数据缓存113)通常比低层次的存储器速度快但容量小。“最接近处理器的存储器”指的是在存储层次中离处理器最近、通常也是速度最快的存储器,如本实施例中的指令缓存103和数据缓存113。此外,本发明中的各个层次的存储器具有包含关系,即层次较低的存储器含有层次较高的存储器中的全部存储内容。
在本发明中,分支指令指的是任何适当的能导致处理器101改变执行流(如:非按顺序执行一条指令)的指令形式。分支源指一条进行分支操作的指令(即:分支指令),分支源地址可以是分支指令本身的指令地址;分支目标指的是分支指令造成的分支转移所转向的目标指令,分支目标地址可以指当分支指令的分支转移成功发生时转移进入的地址,也就是分支目标指令的指令地址;数据读取指令指的是任何适当的能导致处理器101从存储器读数据的指令形式;所述数据读取指令的指令格式中通常包含基地址寄存器号和地址偏移量;数据读取指令所需的数据指的是处理器101执行数据读取指令时读的数据;数据读取指令的数据地址指的是处理器101执行数据读取指令进行读/写数据所用到的地址;当处理器核101执行一条数据读取指令时,可以用基地址加偏移量的方式计算数据地址;基地址寄存器更新指令指的是对数据读取指令可能用到的基地址寄存器中的任何一个的值进行更改的指令。当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块。
在本发明中,术语“填充”指的是在处理器执行到一条指令之前,提前从外部存储器取得相应指令或所需数据并存储到指令缓存或数据缓存。
在本发明中,指令轨道表107中的行与指令缓存103中的存储块一一对应。指令轨道表107含有复数个轨迹点。在此,一个轨迹点是指令轨道表107中的一个表项,可含有至少一条指令的信息,比如该指令的类型等。当一个轨迹点含有的信息表示该轨迹点至少对应一条分支指令时,该轨迹点为一个分支点,所述信息可以是分支目标地址等。轨迹点的循迹地址就是该轨迹点本身的指令轨道表地址,且所述循迹地址由一个行地址和一个列地址构成。轨迹点的循迹地址与该轨迹点所代表的指令的指令地址相对应,且对于分支点而言,每个分支点中含有该分支点所代表的分支指令的分支目标指令在指令轨道表107中的循迹地址,且该循迹地址与该分支目标指令的指令地址相对应。
在本实施例中,指令缓存103除了存储可能被处理器101执行的指令外,还存储有对应每条指令的指令类型信息,如该指令是否为数据读取指令的信息;所述指令类型信息还可以进一步表示对应指令是哪种类型的数据读取指令,从而包含了如何计算数据地址的信息,如基地址寄存器号及地址偏移量在该指令码中的位置信息等。
为便于表示,可以用BNX表示分支点循迹地址中的行地址,即BNX对应指令所在存储块的位置(存储块的行号),而循迹地址中的列地址就对应分支指令在其所在存储块中的位置(偏移量)。相应地,每组BNX及列地址对应指令轨道表107中的一个分支点,即可以根据一组BNX及列地址从指令轨道表107中找到对应的分支点。
进一步地,指令轨道表107的分支点中还存储了以循迹地址形式表示的该分支指令的分支目标指令在指令缓存103中的位置信息。根据该循迹地址,可以在指令轨道表107中找到该分支目标指令对应的轨迹点的位置。即对于指令轨道表107的分支点而言,其指令轨道表地址就是其分支源地址对应的循迹地址,其指令轨道表内容中包含了其分支目标地址对应的循迹地址。
在本实施例中,主动表109中的表项与指令缓存103中的存储块一一对应,即可以与指令轨道表107中的行一一对应。主动表109中的每个表项指明了该主动表行对应的指令缓存存储块存储在指令缓存103中的位置,并形成了BNX与指令缓存存储块的对应关系。主动表109中的每个表项存储了一个指令缓存存储块的块地址。这样,当用一个指令地址在主动表109中进行匹配时,可以得到匹配成功项中存储的BNX,或得到匹配不成功的结果。
数据缓存113中的每个存储块用一个存储块号表示。数据块地址存储比较器127中的表项与数据缓存113中的存储块一一对应,每个表项存储了数据缓存113中对应存储块的块地址,并形成了数据块地址与数据缓存存储块号的对应关系。这样,当用一个数据地址在数据块地址存储比较器127中进行匹配时,可以得到匹配成功项中存储的存储块号,或得到匹配不成功的结果。
扫描器111对从外部存储器送往指令缓存103的指令进行审查,一旦发现某条指令是分支指令,即计算该分支指令的分支目标地址。例如,将分支指令所在指令块的块地址、该分支指令在指令块中的偏移量和分支转移距离三者相加得到分支目标地址。
可以将扫描器111计算得到的分支目标指令地址与主动表109中存储的存储块行地址匹配。若匹配成功,表示该分支目标指令已经存储在指令缓存103中,则主动表109输出该BNX送往指令轨道表107填入所述分支指令的相应表项。若匹配不成功,则表示该分支目标指令尚未存储在指令缓存103中,此时,将该分支目标指令地址通过总线115送往外部存储器,同时在主动表109中分配一个表项存储对应块地址,并输出该BNX送往指令轨道表107填入所述分支指令的相应表项,并将外部存储器通过总线114送来的对应指令块填充到指令缓存103中与该BNX对应的存储块中,同时在指令轨道表107中相应行中建立对应的轨道。对于该指令块中的分支指令,其分支目标指令地址经主动表109匹配输出一个BNX,而该分支目标指令在其指令块中的位置(即该分支目标指令地址的块内偏移量部分)就是对应的轨迹点列号,从而得到了对应该分支目标指令的循迹地址,并将该循迹地址作为分支点内容存储到所述分支指令对应的分支轨迹点中。相应地,数据读取指令在其指令块中的位置(即该分支目标指令地址的偏移量部分)就是对应的数据点列号。此外,在扫描器111对指令块审查的过程中,可以发现数据读取指令,并将相应指令类型信息存储在指令缓存103中。如此,就可以在将指令块填充到指令缓存103中的同时,建立对应整个指令块的一条轨道,并记录数据访问相关信息。
在本发明中,循迹器119的读指针121可以从指令轨道表107中的当前指令对应的轨迹点开始不断移动直到指向第一个分支点。此时读指针121的值即为分支源指令的循迹地址,其中包含了BNX和对应的分支点列号。根据该循迹地址可以从指令轨道表107读出该分支源指令的分支目标指令循迹地址。这样,循迹器119的读指针121从指令轨道表107中处理器101当前执行的指令对应的轨迹点开始,提前移动到该轨迹点之后的第一个分支点,并可以根据该目标指令循迹地址从指令缓存103中找到该目标指令。循迹器119的读指针123与读指针123中的BNX一同构成对指令缓存103的循迹地址,从指令缓存103中当前指令对应的轨迹点开始,根据记录在指令缓存103中的指令类型信息,提前移动到该指令之后的第一条数据读取指令,并读出该数据读取指令对应基地址寄存器号137和地址偏移量138。
在本实施例中,指令缓存103支持多个端口的同时读写,从而能在根据指令地址253向处理器101提供指令251供译码执行的同时,输出读指针123指向的数据读取指令相关信息255。所述相关信息255包括该数据读取指令对应的基地址寄存器号137和地址偏移量138。由于读指针123指向的数据读取指令属于当前指令块,因此,也可以增加一个指令读缓冲(Instruction Read Buffer,IRB)用于存储包括当前指令块在内的至少一个指令块,供读指针123指向并读取相关信息。此时,可以由所述指令读缓冲向处理器101提供指令并向数据引擎提供数据读取指令相关信息;或由所述指令读缓冲向处理器101提供指令,并由指令缓存103向数据引擎提供数据读取指令相关信息;或由指令缓存103向处理器101提供指令,并由所述指令读缓冲向数据引擎提供数据读取指令相关信息。
请参考图2,其为本发明实施例的循迹器的一框结构示意图。在本实施例的循迹器119中,寄存器231、增量器233和选择器235共同对指令轨道表107中的轨迹点进行循迹,寄存器241、增量器243和选择器245共同对指令缓存103进行循迹。其中,寄存器231中存储的是对指令轨道表107的循迹地址,其输出为循迹器119的读指针121,该读指针121指向指令轨道表107中的一个轨迹点。当根据读指针121从指令轨道表121中读出的指令类型为非分支指令类型时,保持寄存器231中循迹地址的BNX部分不变,而列地址部分则通过增量器233增一后送往选择器235。由于此时表示分支转移是否发生的TAKEN信号125表示当前没有发生分支转移,因此选择器235选择该增一后的列地址写回寄存器231,使得读指针121移动并指向下一个轨迹点。
如此移动读指针121直到指向一个分支指令,即读指针121的值为分支源指令的循迹地址,并从指令轨道表107读出该分支源指令的分支目标指令循迹地址送往选择器235,而选择器235的另一个输入是读指针121输出经增一后的循迹地址(即指向该分支点之后的轨迹点的循迹地址)。这样,循迹器119的读指针121从处理器101当前执行的指令对应的轨迹点开始,提前移动到该轨迹点之后的第一个分支点。根据该目标指令循迹地址可以在指令缓存103中找到该目标指令。此时,寄存器231停止更新,等待处理器101产生对该分支指令的执行结果。
根据读指针121中的BNX和处理器101输出的指令地址的低位部分253,即可从指令缓存103中读出处理器101所需指令251。根据读指针121中的BNX和读指针123中的列地址,即可从指令缓存103中读出读指针123指向的数据读取指令的相关信息255。
当处理器101执行到所述分支指令时产生TAKEN信号125。若TAKEN信号125表示该分支转移没有发生,则选择器235选择读指针121增一后的循迹地址送往寄存器231。寄存器231受处理器101送来表示分支指令执行完毕的BRANCH信号126控制存储所述增一后的循迹地址,从而继续移动读指针121沿当前轨道继续移动到下一个分支点,而处理器101输出指令地址偏移量从读指针121指向的指令缓存103的存储块中读取相应的后续指令。
若TAKEN信号125表示该分支转移发生,则选择器135选择指令轨道表107输出的分支目标指令循迹地址送往寄存器231。寄存器231受处理器101送来表示分支指令执行完毕的BRANCH信号126控制存储所述分支目标指令循迹地址,使得读指针121指向指令轨道表107中该分支目标指令对应的轨迹点,且读指针121的BNX与处理器101输出的指令地址偏移量253共同指向指令缓存103中该分支目标指令,从而输出该分支目标指令供处理器101执行。此后,读指针121按之前所述方法沿该新的当前轨道(即原分支目标指令轨迹点所在的轨道)继续移动到下一个分支点,而处理器101输出指令地址偏移量从读指针121指向的指令缓存103的存储块中读取相应的后续指令。
需要说明的是,可以在指令轨道表107中每条轨道的最后一个轨迹点之后增加一个结束轨迹点,该结束轨迹点的类型为必定发生的分支转移,该结束轨迹点内容中的BNX就是该轨道对应的指令块按程序顺序的下一个指令块在指令轨道表107中的行地址(即BNX),该结束轨迹点中的存储的目标指令列地址为‘0’。这样,一旦循迹器119从该轨道的最后一个分支点开始移动,则会指向结束轨迹点,从而转移至顺序下一指令块。
寄存器241中存储的是对指令缓存103中数据访问相关信息的循迹地址中的列地址,其输出为循迹器119的读指针123,该读指针123指向指令缓存103中由读指针121中的BNX指向的指令块中的一条指令对应的指令类型信息。当根据读指针123从指令缓存103中读出的指令类型为非数据读取指令时,读指针123输出的列地址通过增量器243增一后送往选择器245。由于此时表示分支转移是否发生的TAKEN信号125无效,因此选择器245选择缺省输入,即该增一后的列地址写回寄存器241,使得读指针123移动并指向下一条指令。
如此移动读指针123直到指向一条数据读取指令。这样,循迹器119的读指针123从处理器101当前执行的指令开始,提前移动到该指令之后的第一条数据读取指令,并读出该数据读取指令对应的基地址寄存器号和地址偏移量。此时,寄存器241停止更新,等待处理器101产生对该数据读取指令的执行结果。
当处理器101执行完该数据读取指令时,产生LOAD信号128控制寄存器241更新为选择器245输出的经增一后的循迹地址,使得读指针123继续移动并按前述方法指向下一条数据读取指令。
此外,当处理器101执行分支指令产生的TAKEN信号125表示分支转移发生时,选择器245选择指令轨道表107输出的分支目标指令循迹地址并存储到寄存器241中,使得读指针123指向指令缓存103中所述分支目标指令。之后,按上述相同方法移动读指针123直到指向该分支目标指令之后的第一条数据读取指令,并从指令缓存103中读出该数据读取指令对应的基地址寄存器号和地址偏移量。
回到图1,数据引擎105根据从从指令缓存103中读出的基地址寄存器号可以在处理器101执行数据读取指令之前计算出数据地址146确定数据地址或可能数据地址,并控制数据缓存113输出对应数据供处理器101读取。此外,数据引擎105还计算出下次执行所述数据访问指令时可能用到的预测数据地址,并根据所述数据预测地址提前从外部存储器读取数据块填充到数据缓存113中,从而掩盖了对数据缓存113的部分或全部访问时延,或掩盖了因缓存缺失造成的部分或全部等待时间。
请参考图3a,其为本发明实施例的数据引擎的一个示意图。在图3a所示的数据引擎371中,加法器373的一个输入是来源于指令缓存103的所述数据读取指令的地址偏移量138,另一个输入是根据所述数据读取指令的基地址寄存器号从处理器101输出的基地址寄存器值142,其输出的数据地址146被送往数据块地址存储比较器127进行地址匹配。可以将数据缓存访问时延和执行基地址寄存器更新指令的操作产生新的基地址值所需时间相加得到所述提前的周期数。例如,对数据缓存的访问时延为2个周期,执行基地址寄存器更新指令产生新的基地址值需要1个周期,则所述提前的周期数为3。图1中的时间点检测模块148对读指针123的值与处理器101送出的当前指令地址253进行比较,当读指针123的值等于当前指令地址加‘3’时,即表示此时比处理器101执行所述数据读取指令的时间点提前了3个周期,开始计算数据地址并根据判断模块133的输出139控制数据缓存113向处理器101提供数据,以掩盖对数据缓存的访问时延。此时判断模块133的输出139表示了加法器373计算数据地址时所用的基地址寄存器值是否为更新后的值,从而决定是否可以按当时加法器373输出的数据地址146在数据块地址存储比较器127进行地址匹配以完成后续操作。
对于在分支目标指令块上的分支目标指令之后的数据读取指令,由于当分支转移发生使得指令地址指向分支目标指令时,该指令地址与所述数据读取指令地址之间的距离小于‘3’,依然可以用上述方法控制数据缓存113提前向处理器101提供指令,
判断模块133对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值。
请参考图3b,其为本发明实施例的判断模块的一种示意图。在本实施例中,以对数据读取指令及其之前三条指令的寄存器相关性进行判断为例进行说明,对于更多条指令的情况,可以用类似方法实现。
在图3b中,随着循迹器119读指针123的移动,读指针123经过的指令的目标寄存器号被依次通过总线135送往寄存器351,而寄存器351与寄存器353、寄存器355构成先入先出结构。这样,寄存器351、寄存器353和寄存器355分别存储了读指针123当前指向的指令之前第一条指令的目标寄存器号、之前第二条指令的目标寄存器号及之前第三条指令的目标寄存器号。这三个寄存器的输出分别被送到比较器361、比较器363和比较器365作为一个输入。读指针123当前指向的指令所需的源寄存器号通过总线137被分别送到这三个比较器作为另一个输入。当读指针123当前指向的指令为数据读取指令时,该源寄存器号就是基地址寄存器号。三个比较器分别对各自的两个输入进行比较,并将比较结果送到或门357进行或操作。若有任意一个比较器的输出结果为比较相等,即表示数据读取指令的基地址寄存器号与该比较器对应的寄存器所代表的那条指令的目标寄存器号相同,则在该指令完成对寄存器的更新之前由加法器373计算得到的确定数据地址很可能是错误的,此时,判断模块133的输出139表示还不能用当前的数据地址146在数据块地址存储比较器127进行地址匹配。若三个比较器的输出结果均为比较不相等,则表示数据读取指令的基地址寄存器号与三个比较器对应的寄存器分别代表的三条指令的目标寄存器号都不相同,即此时该基地址寄存器中值已经更新或不需更新,因此可以用当前的数据地址146在数据块地址存储比较器127进行地址匹配。在此判断模块133的输出139起到控制数据块地址存储比较器127是否进行地址匹配或数据缓存113是否输出对应数据的作用。
回到图1,结合图3a实施例所述数据引擎,当循迹器119的读指针123指向的数据读取指令与其之前若干条指令之间没有相关性(或有相关性的指令对基地址寄存器的更新都已完成)时,判断模块133的输出139指示数据块地址存储比较器127对数据地址146进行匹配。若匹配成功,表示该数据地址对应的数据已经存储在数据缓存113中,则可以在处理器101执行该数据读取指令之前就从数据缓存113中读出对应数据经总线155提供给处理器101;否则,表示该数据地址对应的数据尚未存储在数据缓存113中,则通过总线116将该数据地址送往外部存储器读取对应数据块,且在数据块地址存储比较器127中分配一个表项存储该数据地址中的块地址部分,并将通过总线112读取到的数据块存储在数据缓存113中的对应存储块中,同时将该数据地址对应的数据提供给处理器101。
这样,当处理器101需要读取指令时,对应指令已经通过总线251送往处理器101或正在往指令缓存103填充,同样地,当处理器101需要读取数据时,对应数据已经通过总线155送往处理器101或正在往数据缓存113填充,从而掩盖对缓存的全部或部分访问时延,提高指令处理系统的性能。
根据本发明技术方案,数据引擎还可以有其他的实现方式。请参考图3c,其为本发明实施例的数据引擎的另一示意图。在图3c所示数据引擎931中,基地址差值存储器131由多个寄存器组成,其中每个寄存器对应一个基地址寄存器,用于存储对应基地址寄存器的变化差值。当某个基地址寄存器的值发生变化时,即可计算出该基地址寄存器的差值并存储到基地址差值存储器131的相应寄存器中。
请参考图3d,其为本发明实施例的计算基地址差值的一示意图。如图3d所示,处理器101中的寄存器堆301有一个读端口,在更新寄存器堆301中某个寄存器值时,可以从该读端口读出寄存器中的原有值,并通过总线307送往减法器303。同时,即将被存储到该寄存器中的新值通过总线305被送往减法器303。减法器303对所述新值和原有值相减,即可得到基地址差值,并将所述基地址差值存储到基地址差值存储器131的相应寄存器中。
回到图3c,按上述方法,随着处理器101对基地址寄存器更新指令的执行,基地址差值存储器131中记录了所有基地址寄存器值最近一次改变时的变化差值。加法器383的第一个输入是来源于指令缓存103的由读指针123指向的数据读取指令地址偏移量138,第二个输入是来源于基地址差值存储器131的与所述数据读取指令基地址寄存器号137对应的基地址差值,第三个输入是根据所述数据读取指令的基地址寄存器号137从处理器101送来的基地址寄存器值142,其输出的数据地址被送往选择器145。
同样地,可以在处理器101执行到数据读取指令之前的若干个周期时,由加法器383计算产生可能数据地址并经选择器145选择后送往数据块地址存储比较器127进行地址匹配以完成数据读取操作。同时,该可能数据地址还被送到比较器147暂存。当处理器101执行所述数据读取指令所产生的实际数据地址144被送往比较器147与暂存在其中的可能数据地址进行比较。若比较结果相等,表示该可能数据地址是正确的,处理器101可以直接读取预先提供的数据,从而掩盖了对数据缓存113的部分或全部访问时延,或掩盖了因数据缓存缺失造成的部分或全部等待时间;否则,表示该可能数据地址是错误的,选择器145选择由处理器101送出的实际数据地址144作为输出的数据地址146送往数据块地址存储比较器127进行匹配以读出正确数据,之后的过程与前述方法相同,在此不再赘述。
当然,在根据本发明技术方案实现的其他实施例中,处理器101也可以不等待可能数据地址与实际数据地址比较结果产生,直接读取预先送来的数据并进行后续指令的执行,以更好地减少指令执行的时间。在这种情况下,若所述比较结果为相等,则处理器101可以继续执行后续指令;若所述比较结果为不相等,则处理器101根据该比较结果,清除对所述错误数据进行处理导致的执行结果,并按之前所述方法,重新读取正确数据并重新执行后续指令。
进一步地,处理器101执行数据读取指令时输出的实际数据地址144还被送到预测地址加法器143与从基地址差值存储器131送来的相应基地址差值140相加,得到下一次执行该数据读取指令时的预测数据地址,该预测数据地址经选择器145选择后作为数据地址146被送往数据块地址存储比较器127进行匹配。若匹配不成功,则将通过总线116将该数据地址送往外部存储器进行数据块预取,并在数据块地址存储比较器127中分配一个表项存储带数据地址中的块地址部分,且将预取来的数据块存储在数据缓存113的对应存储块中。如此,对再次执行到该数据读取指令时所需的数据进行预取,可以部分或全部掩盖因数据缓存缺失造成的等待时间。
根据本发明技术方案,可以使用将图3a实施例和图3c实施例结合起来的数据引擎实现数据缓存。请参考图4,其为本发明实施例的数据缓存系统的另一框结构示意图。
在本实施例中,以提前若干周期,用基地址寄存器值加地址偏移量得到的数据地址控制数据缓存提前向处理器101提供数据为例进行说明。可以根据从指令缓存103中读出的数据读取指令基地址寄存器号137从处理器101得到对应的基地址寄存器值142,并从基地址差值存储器131得到对应的基地址差值140。加法器129的第一个输入是从指令缓存103中读出的数据读取指令地址偏移量138,第二个输入是选择器141根据判断模块133的输出139从基地址差值140和‘0’中选择出的值,第三个输入是处理器101送来的基地址寄存器值142。这样,在计算数据地址时,若判断模块133的输出139为‘0’,则说明基地址寄存器值已经更新完毕,此时,选择器141选择‘0’输出作为加法器129的第二个输入,加法器129的输出就是由基地址寄存器值142与地址偏移量138相加得到的确定数据地址;若判断模块133的输出139为‘1’,则说明基地址寄存器值尚未更新完毕,此时,选择器141选择基地址差值140输出作为加法器129的第二个输入,加法器129的输出就是由基地址寄存器值142、基地址差值140与地址偏移量138相加得到的可能数据地址。所述确定数据地址或可能数据地址经总线146被送到数据块地址存储比较器127进行匹配以控制数据缓存113向处理器101提供数据。
在本实施例中,与图3c实施例类似,加法器129输出的可能数据地址被送到比较器147暂存。处理器101执行所述数据读取指令产生的实际数据地址144被送往比较器147与暂存在其中的可能数据地址进行比较。若比较结果相等,表示该可能数据地址是正确的,处理器101可以直接读取预先提供的数据,从而掩盖了对数据缓存113的部分或全部访问时延,或掩盖了因数据缓存缺失造成的部分或全部等待时间;否则,表示该可能数据地址是错误的,选择器145选择由处理器101送出的实际数据地址144作为输出的数据地址146送往数据块地址存储比较器127进行匹配以控制数据缓存113向处理器101提供正确的数据。
同样地,在根据本发明技术方案实现的其他实施例中,处理器101也可以不等待可能数据地址与实际数据地址比较结果产生,按之前所述方法直接读取预先送来的数据并进行后续指令的执行,再根据该比较结果,决定是否重新读取正确数据并重新执行后续指令。
此外,在本实施例中,由加法器143计算产生预测数据地址并进行数据块填充的过程与图3c实施例相同,在此不再赘述。
对于各种类型的数据读取指令,均可以采用类似图4实施例所述方法提前向处理器提供数据、预取并填充之后可能用到的数据,以取得性能的提高。在此,按数据地址的计算方法不同将数据读取指令分为:以基地址寄存器值加地址偏移量(BASE+OFFSET)得到数据地址的数据读取指令、以基地址寄存器值(BASE)作为数据地址的数据读取指令、以指令地址值加地址偏移量(PC+OFFSET)得到数据地址的数据读取指令和多个基地址寄存器值相加得到数据地址的数据读取指令。对于最后一种情况,本实施例中将以两个基地址寄存器值相加(BASE1+BASE2)为例进行说明,对于有更多个基地址寄存器相加的情况,也可以此类推。对于数据地址计算的其他方法,均可以用上述四种方法的组合或扩展即可实现,在此不再赘述。此外,对于多数据读取指令(即从多个数据地址读取对应的多个数据的指令),也可以有相应的处理方法。请参考图5a,其为本发明实施例的数据引擎的另一示意图。图5a所示的数据引擎501除了能实现上述四种数据地址计算方法,还支持多数据读取指令的数据地址的产生。
在图5a中,加法器509用于计算控制数据缓存113提前输出数据的数据地址517,加法器511用于计算预测数据地址或提供实际数据地址144,并通过总线519送往选择器521。寄存器513用于暂存数据地址517以根据数据地址517产生多数据读取指令的下一个数据地址。寄存器515用于暂存数据地址519,以根据数据地址519产生多数据读取指令的下一个数据地址。判断模块507的结构如图5b所示。
在图5b中,同样以对数据读取指令及其之前三条指令的寄存器相关性进行判断为例,与图3b实施例中的结构相比,增加了一组(三个)比较器和一个三输入逻辑或门551。其中寄存器351、寄存器353和寄存器355与图3b实施例中的对应部件相同,分别存储了读指针123当前指向的指令之前第一条指令的目标寄存器号、之前第二条指令的目标寄存器号及之前第三条指令的目标寄存器号。这三个寄存器的输出分别被送到比较器361、比较器363和比较器365作为一个输入,读指针123当前指向的指令缓存103中的指令所需的第一个基地址寄存器号通过总线137被分别送到这三个比较器作为另一个输入进行比较,三个结果都被送到三输入逻辑或门357进行逻辑或操作。同时,这三个寄存器的输出还分别被送到比较器471、比较器473和比较器475作为一个输入,读指针123当前指向的指令所需的第二个基地址寄存器号通过总线477被分别送到这三个比较器作为另一个输入进行比较。这三个比较器的输出被送到或门551进行逻辑或操作。这样,或门357输出对应于第一个基地址寄存器是否与之前的指令有相关性的控制信息139,而或门551输出对应于第二个基地址寄存器是否与之前的指令有相关性的控制信息535。
回到图5a,根据判断模块507输出的选择信号535和选择信号139分别对选择器531和选择器533控制,当所述两个基地址寄存器中的一个或全部的值尚未更新完毕时,可以选择对应的基地址差值作为对应选择器的输出,否则可以选择‘0’作为对应选择器的输出。
对于以基地址寄存器值加地址偏移量得到数据地址的数据读取指令,选择器523选择来源于指令缓存103的地址偏移量138作为加法器509的第一个输入;选择器533根据判断模块507的输出139选择基地址差值或‘0’作为输出经选择器529选择后作为加法器509的第二个输入;选择器525选择来源于处理器101的基地址寄存器值503作为加法器509的第三个输入,选择器531选择‘0’输出作为加法器509的第四个输入。这样,若所述基地址寄存器的值尚未更新完毕,则加法器509的四个输入分别是:地址偏移量、基地址差值、基地址寄存器值和‘0’;若所述基地址寄存器的值已经更新完毕,则加法器509的四个输入分别是:地址偏移量、‘0’、基地址寄存器值和‘0’。加法器509的输出经选择器521选择后作为数据地址146被送往数据块地址存储比较器127。这样就实现了与图4实施例功能相同的以基地址寄存器值加地址偏移量得到数据地址的地址计算。
对于以基地址寄存器值作为数据地址的数据读取指令,选择器523选择‘0’作为加法器509的第一个输入;选择器533根据判断模块507的输出139选择基地址差值或‘0’作为输出经选择器529选择后作为加法器509的第二个输入;选择器525选择来源于处理器101的基地址寄存器值503作为加法器509的第三个输入,选择器531选择‘0’输出作为加法器509的第四个输入。这样,若所述基地址寄存器的值尚未更新完毕,则加法器509的四个输入分别是:‘0’、基地址差值、基地址寄存器值和‘0’;若所述基地址寄存器的值已经更新完毕,则加法器509的四个输入分别是:‘0’、‘0’、基地址寄存器值和‘0’。加法器509的输出经选择器521选择后作为数据地址146被送往数据块地址存储比较器127。这样就实现了以基地址寄存器值作为数据地址的地址计算。
对于以指令地址值加地址偏移量得到数据地址的数据读取指令,可以在扫描时产生相应的指令类型信息,使得当读指针123指向该指令时,以读指针121中的BNX部分对主动表109进行索引读出对应的指令块地址,再将该指令块地址与指针123的值(即所述数据读取指令的列地址)相加即可得到该数据读取指令的指令地址。在本实施例中,选择器523选择地址偏移量作为加法器509的第一个输入;选择器533选择‘0’作为输出经选择器529选择后作为加法器509的第二个输入;选择器525选择所述数据读取指令的指令地址435作为加法器509的第三个输入,选择器531选择‘0’输出作为加法器509的第四个输入。这样,加法器509的四个输入分别是:地址偏移量、‘0’、数据读取指令地址和‘0’。加法器509的输出经选择器521选择后作为数据地址146被送往数据块地址存储比较器127。这样就实现了以指令地址值加地址偏移量得到数据地址的地址计算。
在本实施例中,对于上述三种情况,当处理器101执行该数据读取指令产生实际数据地址144时,选择器533选择基地址差值作为输出经选择器529选择后输出作为加法器511的第一个输入,选择器531选择‘0’输出作为加法器511的第二个输入,选择器527选择实际数据地址144作为加法器511的第三个输入。此时,加法器511的输出就是对应该数据读取指令的预测数据地址519。所述预测数据地址519经选择器521选择后被送往数据块地址存储比较器127以控制对数据缓存113的填充。
对于以两个基地址寄存器值相加得到数据地址的数据读取指令,选择器523选择来源于处理器101的第二个基地址寄存器值505作为加法器509的第一个输入;选择器533根据判断模块507的输出139选择第一个基地址差值或‘0’作为输出经选择器529选择后作为加法器509的第二个输入;选择器525选择来源于处理器101的第一个基地址寄存器值503作为加法器509的第三个输入,选择器531根据判断模块507的输出535选择第二个基地址差值或‘0’输出作为加法器509的第四个输入。这样,若所述两个基地址寄存器的值均尚未更新完毕,则加法器509的四个输入分别是:第二个基地址寄存器值、第一个基地址差值、第一个基地址寄存器值和第二个基地址差值;若所述第一个基地址寄存器的值已经更新完毕,但所述第二个基地址寄存器的值尚未更新完毕,则加法器509的四个输入分别是:第二个基地址寄存器值、‘0’、第一个基地址寄存器值和第二个基地址差值;若所述第二个基地址寄存器的值已经更新完毕,但所述第一个基地址寄存器的值尚未更新完毕,则加法器509的四个输入分别是:第二个基地址寄存器值、第一个基地址差值、第一个基地址寄存器值和‘0’;若所述两个基地址寄存器的值均已经更新完毕,则加法器509的四个输入分别是:第二个基地址寄存器值、‘0’、第一个基地址寄存器值和‘0’。加法器509的输出经选择器521选择后作为数据地址146被送往数据块地址存储比较器127。这样就实现了以两个基地址寄存器值相加以得到数据地址的计算。
此外,当处理器101执行该数据读取指令产生实际数据地址144时,选择器533选择第一个基地址差值作为输出经选择器529选择后输出作为加法器511的第一个输入,选择器531选择第二个基地址差值输出作为加法器511的第二个输入,选择器527选择实际数据地址144作为加法器511的第三个输入。此时,加法器511的输出就是对应该数据读取指令的预测数据地址519。所述预测数据地址519经选择器521选择后被送往数据块地址存储比较器127以控制对数据缓存113的填充。
对于以上任何一种在基地址寄存器值尚未更新完毕即计算可能数据地址的情况,当处理器执行所属数据读取指令产生实际数据地址144时,都需要由比较器147对所述计算得到的数据地址与实际数据地址144进行比较,以确定所述计算得到的数据地址的正确性。若比较结果为相等,则数据缓存113提前向处理器101提供的数据就已经是所需数据。若比较结果为不相等,则选择器533选择‘0’输出经选择器529选择后输出作为加法器511的第一个输入,选择器531选择‘0’输出作为加法器511的第二个输入,选择器527选择实际数据地址144输出作为加法器511的第三个输入。此时加法器511的输出519就是实际数据地址144的值,该数据地址519经选择器521选择后作为数据地址146被送往数据块地址存储比较器127,以控制数据缓存113输出处理器101实际需要的数据。
对于多数据读取指令,可以按上述方法计算得到第一个数据地址并根据该数据地址控制数据缓存113向处理器101提供数据。同时,该数据地址517被暂存在寄存器513中。之后选择器523选择‘0’作为加法器509的第一个输入,选择器529根据多个数据地址相应的变化方向选择‘1’或‘-1’作为加法器509的第二个输入。例如,若该多数据读取指令的数据地址是递增的,则选择器529选择‘1’作为输出;若该多数据读取指令的数据地址是递减的,则选择器529选择‘-1’作为输出。为了便于说明,在本实施例以‘1’和‘-1’作为地址递增、递减的变化量。对于不同的指令集体系结构,也可以用其他任何合适的值作为地址递增、递减的变化量。选择器525选择来源于寄存器513的数据地址作为加法器509的第三个输入,选择器531选择‘0’作为加法器509的第四个输入。这样,加法器509的输出就是第二个数据地址,该数据地址经选择器521选择后被送往数据块地址存储比较器127,以控制数据缓存113向处理器101输出第二个数据。如此反复,即可实现在处理器执行多数据读取指令之前,提前向处理器101提供多个数据。
同样地,若在多数据读取指令的基地址寄存器值尚未更新完毕即计算了数据地址,则需要由比较器147对所述计算得到的第一个数据地址与实际数据地址144进行比较,以确定所述计算得到的第一个数据地址的正确性。若比较结果为相等,则数据缓存113提前向处理器101提供的多个数据就已经是所需数据。若比较结果为不相等,则选择器533选择‘0’输出经选择器529选择后输出作为加法器511的第一个输入,选择器531选择‘0’输出作为加法器511的第二个输入,选择器527选择实际数据地址144输出作为加法器511的第三个输入。此时加法器511的输出519就是实际数据地址144的值,即实际的第一个数据地址的值,该数据地址519经选择器521选择后作为数据地址146被送往数据块地址存储比较器127,以控制数据缓存113输出处理器101实际需要的第一个数据。同时,该实际的第一个数据地址被暂存在寄存器515中。之后选择器529根据多个数据地址相应的变化方向选择‘1'或‘-1’作为加法器511的第一个输入,选择器531选择‘0’输出作为加法器511的第二个输入,选择器527选择暂存在寄存器515中的所述实际的第一个数据地址作为加法器511的第三个输入。这样,加法器511的输出就是实际的第二个数据地址,该数据地址经选择器521选择后被送往数据块地址存储比较器127,以控制数据缓存113向处理器101输出实际的第二个数据。如此反复,即可在根据所述可能数据地址从数据缓存113提前提供的数据不正确的情况下,用正确的多个数据地址向处理器101提供多个数据,以保证处理器101的正确运行。
除以上述各种情况外,其他数据地址的产生方式都可以视为这五种情况的特例或扩展,按类似的方法处理,在此不再赘述。
根据本发明技术方案,还可以增加一个数据轨道表。请参考图6,其为本发明实施例的数据缓存系统的另一框结构示意图。如图6所示,所述数据缓存系统包含处理器101、主动表109、数据块地址存储比较器127、扫描器111、指令轨道表107、数据轨道表607,循迹器119、指令缓存603、数据缓存113、数据引擎105和时间点检测模块148。同样的,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
在本实施例中,处理器101、主动表109、数据块地址存储比较器127、扫描器111、指令轨道表107、循迹器119、数据缓存113、数据引擎105和时间点检测模块148与图4实施例中的相应部件相同。指令缓存603则与普通的指令缓存相同,即只包含了指令,而没有包含对应每条指令的指令类型信息。
数据轨道表607中的行与指令缓存603中的存储块一一对应。数据轨道表607含有复数个轨迹点。在此,一个轨迹点是数据轨道表607中的一个表项,可含有至少一条指令的信息,比如该指令的类型等。所述信息还可以进一步表示对应指令是哪种类型的数据读取指令,从而包含了如何计算数据地址的信息,如基地址寄存器号及地址偏移量在该指令码中的位置信息等。当一个轨迹点含有的信息表示该轨迹点至少对应一条数据读取指令时,该轨迹点为一个数据点。
在本实施例中,循迹器119的读指针121提供的BNX与读指针123提供的列地址一起指向数据轨道表607中的一个轨迹点。根据从该轨迹点中读出的指令类型信息可以按图2实施例相同方法控制读指针123移动并指向当前指令之后的第一条数据读取指令。在本实施例中,数据轨道表607向数据引擎105提供由读指针123指向的数据点中包含的地址偏移量138、基地址寄存器号137,以及读指针123经过的所述数据点之前若干条指令的和目标寄存器号135。后续的数据地址和预测数据地址的计算、提前提供数据及预取数据的具体操作过程与图4实施例所述相同,在此不再赘述。
此外,也可以在数据轨道表的数据点中只存储指令类型信息。读指针123同时指向数据轨道表中的数据点及指令缓存103中对应的数据读取指令,并由指令缓存103提供所述地址偏移量和基地址寄存器号,以实现与图6实施例相同的功能。
进一步地,还可以将预先计算得到的数据地址存储在数据轨道表607的数据点中。这样,当循迹器119的读指针123指向一个数据点时,可以直接从该数据点中读出数据地址送往数据块地址存储比较器127进行匹配。
或者,可以将预先计算得到的数据地址经数据块地址存储比较器127匹配后得到的数据缓存113的存储块号及地址偏移量存储在数据点中。这样,当循迹器119的读指针123指向一个数据点时,可以根据从该数据点中读出的存储块号及地址偏移量直接在数据缓存113中找到所需数据。
需要说明的是,为了便于描述,本实施例同时包含了指令轨道表和数据轨道表。在实际应用中,显然也可以将指令轨道表与数据轨道表合并为一个轨道表。此时,该轨道表中既包含分支点,也包含数据点,循迹器119的读指针121和读指针123均对该轨道表寻址并读出相应的分支点信息及数据点信息。这种实施方法也应属于本说明书涵盖范围之内。
此外,在有数据轨道表或有同时包含分支点和数据点的轨道表的情况下,对于之前所述以基地址寄存器值作为数据地址的情况,可以直接将‘0’存储在相应的数据点中,当读指针123指向该数据点时,将所存储的‘0’作为地址偏移量输出送往加法器129进行地址计算。
对于之前所述以指令地址值加地址偏移量得到数据地址的情况,由于该数据读取指令本身的地址及地址偏移量都是固定不变的,因此可以在扫描器111扫描发现该指令时直接通过将指令地址与地址偏移量相加计算出数据地址,并存储在数据点中。当读指针123指向该数据点时,直接用所述数据地址送往数据块地址存储比较器127匹配。
此外,根据本发明技术方案,还可以将基地址差值存储在数据轨道表中。具体地,可以用与之前所述相同的方法产生对应于每条数据读取指令的基地址寄存器的差值,并将所述基地址差值存储在对应的数据点中。这样就可以省略基地址差值存储器,且对应每条数据读取指令都有一个相应的基地址差值,能够更准确地计算可能数据地址及预测数据地址。
在本发明中,由于一个指令块中只有部分指令是分支指令或数据读取指令,因此,还可以对指令轨道表107和/或数据轨道表607进行压缩,从而降低指令轨道表107和/或数据轨道表607对存储空间的需求。例如,压缩轨道表可以具有与原始轨道表相同的行,但列数少于原始轨道表,并由一个映射表存储压缩轨道表中的行与原始轨道表中的行之间的对应关系。请参考图7,其为本发明实施例的压缩轨道表应用的示意图。为了便于说明,在本实施例中只显示了相关模块,省略了其他部分。
如图7所示,所述轨道表存储结构包括:指令轨道表701、指令映射表703、数据轨道表705和数据映射表707。在本实施例中,指令轨道表701和数据轨道表705都是经过压缩的轨道表。指令轨道表701和数据轨道表705的行一一对应,且具有与原始轨道表相同的行数,即对指令轨道表701和数据轨道表705的循迹地址中的行地址依然是BNX。
在本实施例中,指令轨道表701(或数据轨道表705)中的每个表项均是一个分支点(或数据点),且按对应的分支指令(或数据读取指令)在指令块中的先后顺序依次对应。而指令映射表703(或数据映射表707)中的表项与指令轨道表701(或数据轨道表705)中的分支点(或数据点)一一对应,且存储了对应分支点(或数据点)在指令块中的块内偏移量。这样,可以将一条分支指令(或数据读取指令)在其所在指令块中的块内偏移量经指令映射表转换为列地址后,根据该列地址找到指令轨道表701(或数据轨道表705)中由所述分支指令(或数据读取指令)的BNX指向的行中找到对应的分支点(或数据点);对于指令轨道表701(或数据轨道表705)中任何一个分支点(或数据点),也可以在指令映射表703(或数据映射表707)的相应表项中找到该分支点(或数据点)对应的分支指令(或数据读取指令)的块内偏移量,并与所述分支点(或数据点)本身的BNX一同构成所述分支点(或数据点)在指令缓存中对应的分支指令(或数据读取指令)。
由于指令轨道表701和数据轨道表705的列数均小于原始轨道表,且指令轨道表701与数据轨道表705的列不一定对应,因此为了与原始轨道表中的循迹地址区分,在本实施例中,指令轨道表701的循迹地址中的列地址为IMBNY,且该IMBNY通过指令映射表703对应原始指令轨道表中的一个列地址;数据轨道表705的列地址为DMBNY,且该DMBNY通过数据映射表707对应原始数据轨道表中的一个列地址。此时,指令轨道表701中的表项内容包含了分支目标指令对应的BNX、IMBNY和DMBNY。其中,BNX和IMBNY共同表示该表项对应的分支指令的分支目标指令后的第一条分支指令在指令轨道表701中的分支点的循迹地址,而BNX和DMBNY共同表示该表项对应的分支指令的分支目标指令后的第一条数据读取指令在数据轨道表705中的分支点的循迹地址。
在本实施例中,分支指令地址711包含了该分支指令在轨道表中的行地址(即BNX),以及该分支指令在其所在指令块中的位置偏移量,即BNX和列地址。当根据一个指令块建立轨道表701中的一条新轨道时,所述分支指令地址711中的行地址部分(BNX)指出指令轨道表701中的一行,并以所述行中按顺序第一个空闲单元作为所述分支指令对应的分支点,同时,按之前实施例所述方法将分支指令地址711的块内偏移量(该分支指令在其所在指令块中的位置偏移量)存储到指令映射表703中的相应表项。
该分支指令的分支目标指令地址715的块内偏移量被送到指令映射表703中由指令地址715中的BNX指向的行中所有存储的块内偏移量比较,并以第一个大于等于指令地址715的块内偏移量的存储在该行内的块内偏移量的列地址作为指令地址715对应的列地址IMBNY,从而形成指令地址715在指令轨道表701的循迹地址(BNX、IMBNY)。该循迹地址721被存储在所述分支点(即所述分支指令在指令轨道表701中的对应表项)中。
同样地,从该分支指令的分支目标指令开始的第一条数据读取指令的指令地址717中的块内偏移量部分被送到数据映射表707按相同方法转换为数据轨道表705的列地址DMBNY,所述列地址与循迹地址721中的BNX部分共同构成所述数据读取指令在数据轨道表705中的循迹地址723。该数据读取指令的相应信息713被存储在所述数据轨道表705中由循迹地址723指向的表项中,即存储在相应的数据点中。循迹地址723中的DMBNY还被送往指令轨道表701存储在所述分支点中。这样,所述分支指令对应的分支点内容包括了BNX、IMBNY和DMBNY,其中BNX与IMBNY共同指向指令轨道表701中所述分支指令的目标指令后的第一个分支点,而BNX与DMBNY共同指向数据轨道表705中所述分支指令的目标指令后的第一个数据点。
这样,完成了对指令轨道表701中的一个表项内容的生成和存储。之后,当循迹器的读指针指向该表项时,可以从该表项中读出该分支指令的分支目标指令后的第一条分支指令在指令轨道表701中的循迹地址,从而直接在指令轨道表701中找到该分支目标指令所在的轨道及该分支目标指令后的第一个分支点;同时,也可以从该表项中读出从该分支指令的分支目标指令开始的第一条数据读取指令在数据轨道表705中的循迹地址,从而在该分支指令的分支转移发生后,能够直接利用该循迹地址从数据轨道表705中找到该数据读取指令对应的数据点,并从该数据点中读出数据读取指令的相关信息,如指令类型或数据地址等,以进行相应的后续操作。
在采用本实施例所述的轨道表压缩技术后,数据轨道表中的每个表项都是一个数据点,读指针123每经过一次增一就能指向一个数据点。因此还需要一个额外的增一逻辑,用于依次指向指令缓存103中所述数据读取指令之前的若干条指令,并将这些指令的目标寄存器值送往判断模块133进行相关性判断。所述增一逻辑与循迹器119中寄存器241、增量器243和选择器245构成的结构类似,在此不再说明。
根据本发明技术方案,还可以在前述实施例的基础上增加一个数据读缓冲(Data Read Buffer,DRB)以暂存提前从数据缓存113中读出的数据。所述数据读缓冲用于存储根据读指针123的值提前从数据缓存113中读出的多个数据,及这些数据对应的数据地址。当处理器101执行到数据读取指令并计算得到实际数据地址时,可采用与前述实施例相同的方法将该实际数据地址与数据读缓冲提供给处理器101的数据对应的数据地址进行比较,从而确定该数据是否就是该数据读取指令需要的数据。
这样,读指针123就可以不必等待当前指令之后的第一条数据读取指令被执行完毕后再移动到下一条数据读取指令,而可以在向数据读缓冲输出所述第一条数据读取指令所需数据后,即可移动到下一条数据读取指令,更早地对后续数据读取指令所需数据进行填充和获取,从而充分利用数据缓存113的输出带宽以进一步降低数据缓存缺失造成的等待时间及访问数据缓存所需的时间。
同样地,在本实施例中,数据读缓冲中也可以不存储完整的数据地址,而是只存储基地址寄存器值,当处理器101执行到数据读取指令时将产生的实际基地址寄存器值与数据读缓冲提供给处理器101的数据对应的基地址寄存器值进行比较,从而确定该数据是否就是该数据读取指令需要的数据。
此外,还可以在数据读缓冲中针对每个数据地址(或基地址寄存器值)增加一个标志位,表示该数据地址(或基地址寄存器值)是确定数据地址(或确定基地址寄存器值)还是可能数据地址(或可能基地址寄存器值)。在这种情况下,当处理器101执行到数据读取指令时,只将产生的实际数据地址(或实际基地址寄存器值)与数据读缓冲提供给处理器101的数据对应的可能数据地址(或可能基地址寄存器值)进行比较,以确定该数据是否就是该数据读取指令需要的数据,从而减少比较次数。
根据本发明技术方案,还可以如前述实施例所述增加一个指令读缓冲用于存储包括当前指令块在内的至少一个指令块,由指令地址253指向并输出指令供处理器101读取。此时,数据读缓冲可以与该指令读缓冲同步向处理器101提供相应数据,即当处理器101从指令读缓冲读取一条数据读取指令时,可以同时从数据读缓冲的对应位置读取该数据读取指令所需的数据。请参考图8a,其为本发明实施例的指令读缓冲和数据读缓冲配合工作的一个示意图。为了便于说明,在本实施例中只显示了相关模块,省略了其他部分。
在图8a中,指令缓存103与处理器101之间增加了一个指令读缓冲801,用于暂存处理器101当前执行的指令块,并根据处理器101送来的指令地址253通过总线809输出对应的指令供处理器101执行;数据读缓冲803中的数据表项数目与指令读缓冲801中的指令数目相同,且一一对应。即,若指令读缓冲801中的某条指令是数据读取指令,则其在数据读缓冲803中的对应表项用于存储该数据读取指令对应的数据;否则,在数据读缓冲803中的对应表项中的是无效信息。这样就建立了指令读缓冲与数据读缓冲之间的联系,即建立了数据读取指令与对应数据之间的联系。
在本实施例中,循迹器119的读指针123如之前实施例所述,可以在控制数据缓存113向数据读缓冲803输出当前指令之后的第一条数据读取指令所需数据后,即移动到下一条数据读取指令并控制数据缓存113向数据读缓冲803输出对应数据,同时在数据读缓冲803中的相应位置存储数据引擎105产生的数据地址146,直至当前指令块中所有数据读取指令对应的数据及对应数据地址都被输出并存储在数据读缓冲803中。这样,根据处理器101输出的指令地址253即可在数据读缓冲803中找到在指令读缓冲801中指令地址253指向的数据读取指令对应的数据。因此,指令地址253从指令读缓冲801中读出指令,且当该指令为数据读取指令时,可以根据同一指令地址253同时从数据读缓冲803中读出对应数据通过总线811送往处理器101供执行,并读出对应数据地址送往比较器807与处理器101执行到数据读取指令并计算得到实际数据地址进行比较,从而确定该数据是否就是该数据读取指令需要的数据。
进一步地,可以适当增加指令读缓冲和数据读缓冲的存储块数目,以达到更好的性能。请参考图8b,其为本发明实施例的指令读缓冲和数据读缓冲配合工作的另一个示意图。在本实施例中,指令轨道表107是未经压缩的轨道表。指令读缓冲由两个存储块构成,其中存储块851存储了当前指令块,存储块853存储了当前指令之后的第一个分支指令的目标指令块。数据读缓冲也由两个存储块构成,其中存储块861用于存储当前指令块中数据读取指令对应的数据,存储块863用于存储所述目标指令块中数据读取指令对应的数据。
循迹器819中的寄存器231、增量器233、选择器235、寄存器241、增量器243、选择器245与图2实施例中的对应部件相同,并产生对指令轨道表107当前轨道循迹的读指针121和对指令读缓冲中当前指令块(即存储块851)循迹的读指针123。不同之处在于循迹器819中增加了寄存器841、增量器843和选择器845,并产生对指令读缓冲中当前指令之后第一个分支指令的目标指令块(即存储块853)循迹的读指针823。
在本实施例中,由于存储块851中已经存储了当前指令块,因此指向指令缓存103的行地址不是来源于读指针121的BNX,而是读指针121指向的分支点中的目标指令轨迹点的行地址881。这样,一旦读指针121指向一个新的分支点,即可用该分支点的目标指令轨迹点的行地址881从指令缓存103中读出所述目标指令块存储在存储块853中。
在本实施例中,选择器871用于选择从存储块851及存储块853送出的地址偏移量中的一个作为地址偏移量138送往数据引擎;选择器873用于选择从存储块851及存储块853送来的基地址寄存器号中相应的一个作为基地址寄存器号137送往数据引擎及处理器101。与之前实施例所述类似,读指针123依次指向存储块851中的各条数据读取指令,由数据引擎105产生相应的数据地址146控制数据缓存113向存储块861的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块861的相应位置。当处理器101执行所述数据读取指令产生实际数据地址144时,由比较器807对实际数据地址144和存储块861输出的所述数据对应的数据地址进行比较,以确定所述数据的正确性。读指针823则从存储块853中的所述分支目标指令开始依次指向各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
在上述过程中,可以有一定的仲裁方法防止不同指令块同时输出基地址寄存器号和地址偏移量造成的冲突。例如,可以由选择器871和选择器873先选择存储块851中的数据读取指令对应的基地址寄存器号和地址偏移量送到数据引擎105进行数据地址计算,再选择存储块853中的数据读取指令对应的基地址寄存器号和地址偏移量送到数据引擎105进行数据地址计算。也可以有其他任何合适的仲裁方法。
这样,在数据读缓冲中预先存储了当前指令块和目标指令块中数据读取指令对应的数据。读指针121指向当前指令之后的第一个分支点,并根据从该分支点中读出分支目标指令循迹地址中的行地址881控制指令缓存103向存储块853存储所述分支指令的目标指令所在的指令块。
读指针123沿存储块851移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块861的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块861的相应位置。
选择器845选择所述目标指令循迹地址中的列地址883作为读指针823的新值,使得读指针823从所述分支目标指令开始沿存储块853移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
若处理器101执行所述当前指令之后的第一个分支指令且分支转移没有发生,则读指针121继续移动指向下一个分支点,并根据从该分支点中读出的目标指令循迹地址中的行地址881控制指令缓存103向存储块853存储所述分支指令的目标指令所在的指令块。读指针123继续沿存储块851移动直至完成将后续所有数据读取指令的对应数据存储在存储块861中相应位置的操作。
由于读指针121指向了一个新的分支点,选择器845选择所述目标指令循迹地址中的列地址883作为读指针823的新值,使得读指针823沿存储块853从所述分支目标指令开始移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
若处理器101执行所述当前指令之后的第一个分支指令且分支转移发生,则存储块853中的指令块被存储到存储块851中,以更新当前指令块。选择器245选择原分支目标指令循迹地址中的列地址883作为读指针123的新值。读指针123沿存储块851从所述新的当前指令开始移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块861的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块861的相应位置。
同时,读指针121从新的当前指令轨迹点(即原分支目标轨迹点)开始沿新的当前轨道移动,直到第一个分支点,并根据从该分支点中读出分支目标指令循迹地址中的行地址881控制指令缓存103向存储块853存储所述分支指令的目标指令所在的指令块。
由于读指针121指向了一个新的分支点,读指针选择器845选择新分支目标指令循迹地址中的列地址883作为读指针823的新值,使得读指针823沿存储块853从所述分支目标指令开始移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
由于在计算读指针823指向的数据读取指令的数据地址时,对应的基地址寄存器值很有可能尚未更新,因此存储在存储块863中的数据很可能是错误的。可以在分支转移发生,且存储块863中的数据被存储到存储块861中之后,由读指针123从存储块851中所述发生转移的分支指令的目标指令开始,按之前所述实施例相同方法再次移动到数据读取指令并由数据引擎105产生数据地址控制数据缓存113更新存储块,以提高数据读缓冲中预先存储的数据的准确性。
根据本发明技术方案,还可以根据数据读取指令与该指令之前最后改变对应基地址寄存器值的指令之间的距离,对数据读取指令分类。依然用图3a实施例中所述的3个周期为例,可以在读指针123或读指针823移动的过程中确定数据读取指令与其之前最后改变对应基地址寄存器值的指令之间的距离,并将与相应的改变基地址寄存器值的指令之间的距离大于‘3’的数据读取指令归为‘较远’的一类,且将与相应的改变基地址寄存器值的指令之间的距离小于等于‘3’的数据读取指令归为‘较近’的一类。对于‘较远’的一类指令,可以在处理器101实际执行到所述数据读取指令之前3条指令时再由数据引擎105计算出确定数据地址并控制数据缓存113向数据读缓冲输出对应数据,这样依然能完全掩盖对数据缓存113的访问时延。而对于‘较近’的一类指令,为了尽量完全掩盖对数据缓存113的访问时延,可以提前(即早于3条指令)由数据引擎105计算出可能数据地址并控制数据缓存113向数据读缓冲输出对应数据。
这样,在读指针823沿存储块853中的指令移动的过程中,若指向的是‘较远’的一类指令,则忽略该指令;若指向的是‘较近’的一类指令,则直接由数据引擎105计算出可能数据地址并控制数据缓存113向数据读缓冲输出对应数据。之后读指针823继续移动指向下一条数据读取指令。
对于读指针123,在沿存储块851中的指令移动的过程中,若指向的是‘较远’的一类指令,则等待直到处理器101执行到所述数据读取指令之前3条指令时再由数据引擎105计算出确定数据地址并控制数据缓存113向数据读缓冲输出对应数据,以掩盖数据缓存访问时延;若指向的是‘较近’的一类指令,由于之前已经根据可能数据地址从数据缓存113获取了对应数据,因此可以忽略该指令。之后读指针123继续移动指向下一条数据读取指令。
或者,在读指针823沿存储块853中的指令移动的过程中,只计算出‘较近’的一类指令对应的可能数据地址并控制数据缓存113向数据读缓冲输出对应数据。在读指针123沿存储块851中的指令移动的过程中,对所有数据读取指令计算数据地址并控制数据缓存113向数据读缓冲输出对应数据。
或者,在读指针823沿存储块853中的指令移动的过程中,只计算出‘较远’的一类指令对应的可能数据地址并控制数据缓存113向数据读缓冲输出对应数据。在读指针123沿存储块851中的指令移动的过程中,只计算出‘较近’的一类指令对应的可能数据地址并控制数据缓存113向数据读缓冲输出对应数据。
或者,在读指针823沿存储块853中的指令移动的过程中,只计算出‘较远’的一类指令对应的可能数据地址并控制数据缓存113向数据读缓冲输出对应数据。在读指针123沿存储块851中的指令移动的过程中,对所有数据读取指令计算数据地址并控制数据缓存113向数据读缓冲输出对应数据。
根据本发明技术方案,还可以对目标指令块中的每条数据读取指令增加一个标志位,以表示该数据读取指令对应的数据是否已经存储在数据读缓冲中。在这种情况下,当读指针123沿存储块851中的指令移动时,对所有的对应数据尚未存储在数据读缓冲中的数据读取指令计算数据地址并控制数据缓存113向数据读缓冲输出对应数据。
此外,还可以采用其他任何合适的策略控制数据缓存113向数据读缓冲存储数据,以提高数据读缓冲中数据的准确性,或减少错误数据的存储次数。
请参考图8c,其为本发明实施例的指令读缓冲和数据读缓冲配合工作的另一示意图。在图8c中,指令轨道表891是经过压缩的轨道表,即指令轨道表891中的每个表项均是一个分支点,且按对应的分支指令在指令块中的先后顺序依次对应。而指令映射表895中的表项与指令轨道表891中的分支点一一对应,且存储了对应分支点在指令块中的块内偏移量。因此,在本实施例中,指令轨道表891的循迹地址中的列地址为IMBNY,且该IMBNY通过指令映射表895对应原始指令轨道表中的一个列地址。此时,指令轨道表891中的表项内容包含了BNX、IMBNY和TOFFSET。其中,BNX和IMBNY共同表示该表项对应的分支指令的分支目标指令后的第一条分支指令在指令轨道表891中的分支点的循迹地址。而BNX和TOFFSET共同表示该表项对应的分支指令的分支目标指令轨迹点在原始轨道表中的循迹地址,其中TOFFEST表示所述分支目标指令在其所在指令块中的块内偏移量。这样,根据TOFFSET即可以在存储块853中找到所述分支目标指令。
在本实施例中,读指针121指向一个分支点,并根据从该分支点中读出的BNX 881控制指令缓存103向存储块853存储所述分支指令的目标指令所在的指令块。
读指针123沿存储块851移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块861的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块861的相应位置。
选择器845选择从所述分支点中读出的TOFFSET 893作为读指针823的新值,使得读指针823从所述分支目标指令开始沿存储块853移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
若处理器101执行所述当前指令之后的第一个分支指令且分支转移没有发生,则读指针121的IMBNY增一指向同一轨道中的下一个分支点,并根据从该分支点中读出的BNX 881控制指令缓存103向存储块853存储所述分支指令的目标指令所在的指令块。读指针123继续沿存储块851移动直至完成将后续所有数据读取指令的对应数据存储在存储块861中相应位置的操作。
由于读指针121指向了一个新的分支点,选择器845选择从所述分支点中读出的TOFFSET 893作为读指针823的新值,使得读指针823沿存储块853从所述分支目标指令开始移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
若处理器101执行所述当前指令之后的第一个分支指令且分支转移发生,则存储块853中的指令块被存储到存储块851中,以更新当前指令块。选择器245选择从原分支点中读出的TOFFSET 893作为读指针123的新值。读指针123沿存储块851从所述新的当前指令(即所述原分支点的分支目标指令)开始移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块861的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块861的相应位置。
同时,选择器235选择从所述分支点中读出的BNX 881和IMBNY 883作为读指针121的新值,使得读指针121直接指向新的分支点(即原分支目标指令之后的第一个分支点),根据从该新的分支点中读出的BNX 881控制指令缓存103向存储块853存储所述新的分支点对应的目标指令所在的指令块,并等待处理器101执行所述分支指令产生的分支转移判定结果。
由于读指针121指向了一个新的分支点,读指针选择器845选择从所述新的分支点中读出的TOFFSET 893作为读指针823的新值,使得读指针823沿存储块853从所述新的分支点的分支目标指令开始移动指向后续各条数据读取指令,并由数据引擎105产生相应的数据地址146控制数据缓存113向存储块863的对应位置存储所述数据读取指令的对应数据,并将所述数据对应的数据地址存储在存储块863的相应位置。
综上,在本发明提供的数据缓存系统和方法中,利用在指令缓存或数据轨道表中存储相关信息提前对数据缓存进行填充,并提前控制数据缓存向处理器输出可能被访问的数据,部分或全部掩盖了数据缓存缺失造成的等待时间和/或对数据缓存的访问时延,提高了指令处理系统的性能。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。
Claims (41)
1.一种数据缓存系统,其特征在于,包括:
处理器,所述处理器用以执行指令、读取数据;
存储系统,所述存储系统用以存储指令和数据;
指令轨道表,所述指令轨道表存储所述存储系统中存储的分支指令的相关信息;
循迹器,所述循迹器指向处理器当前正在执行的指令之后的第一条数据读取指令;
数据引擎,所述数据引擎用以在处理器执行所述循迹器指向的数据读取指令之前,提前计算出数据地址,并根据所述数据地址控制存储系统向处理器提供对应数据。
2.如权利要求1所述的数据缓存系统,其特征在于,所述存储系统进一步包含指令缓存,所述指令缓存用以存储供处理器执行的指令及数据读取指令的相关信息;所述相关信息表示该指令是否为数据读取指令。
3.如权利要求2所述的数据缓存系统,其特征在于,所述数据读取指令的相关信息为数据读取指令的类型信息;根据所述类型信息,可以直接得到基地址寄存器号、地址偏移量在该指令码中的位置信息。
4.如权利要求1所述的数据缓存系统,其特征在于,所述存储系统进一步包含数据轨道表,所述数据轨道表用以存储数据读取指令的相关信息;所述相关信息表示该指令是否为数据相关指令;且
所述数据轨道表的行与指令轨道表的行一一对应。
5.如权利要求4所述的数据缓存系统,其特征在于,所述数据读取指令的相关信息为数据读取指令的类型信息;根据所述类型信息,可以直接得到基地址寄存器号、地址偏移量在该指令码中的位置信息。
6.如权利要求4所述的数据缓存系统,其特征在于,所述数据轨道表进一步存储了数据读取指令的基地址寄存器号和地址偏移量中的至少一项内容。
7.如权利要求1所述的数据缓存系统,其特征在于,所述数据引擎以基地址寄存器值加地址偏移量得到确定数据地址;或
以基地址寄存器值作为确定数据地址;或
以指令地址值加地址偏移量得到确定数据地址;或
多个基地址寄存器值相加得到确定数据地址。
8.如权利要求7所述的数据缓存系统,其特征在于,所述数据缓存系统包含一个时间点检测模块;所述时间点检测模块用以判断是否到达向存储系统输出数据地址以读出数据并提供给处理器的时间点。
9.如权利要求8所述的数据缓存系统,其特征在于,所述数据引擎进一步包含判断模块,所述判断模块对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值;且
当基地址寄存器的值被更新为该数据读取指令所需的基地址寄存器值时,用数据引擎计算得到的所述确定数据地址控制存储系统向处理器提供数据。
10.如权利要求8所述的数据缓存系统,其特征在于,所述数据引擎进一步包含基地址差值存储器,所述基地址差值存储器中的每一项对应一个基地址寄存器,用于存储对应基地址寄存器的变化差值。
11.如权利要求10所述的数据缓存系统,其特征在于,所述数据引擎还能够以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或
以基地址寄存器值加对应基地址差值作为可能数据地址;或
多个基地址寄存器值及对应的基地址差值相加得到可能数据地址。
12.如权利要求11所述的数据缓存系统,其特征在于,所述数据引擎进一步包含判断模块,所述判断模块对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值;且
当基地址寄存器的值尚未被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据;
当基地址寄存器的值已经被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述确定数据地址控制存储系统向处理器提供数据。
13.如权利要求12所述的数据缓存系统,其特征在于,所述数据引擎进一步包含比较器,在所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据的情况下,当处理器执行所述数据读取指令产生实际数据地址时,所述比较器对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且
当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
14.如权利要求13所述的数据缓存系统,其特征在于,对于任意数据读取指令,所述数据引擎在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且
当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
15.如权利要求14所述的数据缓存系统,其特征在于,所述数据引擎中的加法器对所述实际数据地址与对应基地址差值相加得到所述预测数据地址。
16.如权利要求7所述的数据缓存系统,其特征在于,所述数据引擎进一步包含基地址差值存储器,所述基地址差值存储器中的每一项对应一个基地址寄存器,用于存储对应基地址寄存器的变化差值;
所述数据引擎在处理器执行所述数据读取指令之前,以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或
以基地址寄存器值加对应基地址差值作为可能数据地址;或
多个基地址寄存器值及对应的基地址差值相加得到可能数据地址。
17.如权利要求16所述的数据缓存系统,其特征在于,所述数据引擎进一步包含比较器,在所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据的情况下,当处理器执行所述数据读取指令产生实际数据地址时,所述比较器对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且
当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
18.如权利要求17所述的数据缓存系统,其特征在于,对于任意数据读取指令,所述数据引擎在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且
当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
19.如权利要求18所述的数据缓存系统,其特征在于,所述数据引擎中的加法器对所述实际数据地址与所述基地址差值相加得到所述预测数据地址。
20.如权利要求4所述的数据缓存系统,其特征在于,所述指令轨道表和数据轨道表的列数均可以少于指令块中指令个数;且
所述指令轨道表的每个表项对应一条分支指令,其表项格式包含分支目标指令块上从分支目标指令开始的第一条分支指令在指令轨道表中的行地址和列地址,以及所述分支目标指令块上从所述分支目标指令开始的第一条数据读取指令在数据轨道表中的列地址;
所述数据轨道表的每个表项对应一条数据读取指令。
21.如权利要求7所述的数据缓存系统,其特征在于,所述数据缓存系统进一步包括数据读缓冲,所述数据读缓冲存储当前指令之后的若干条数据读取指令可能用到的数据,供处理器读取。
22.如权利要求21所述的数据缓存系统,其特征在于,所述数据缓存系统进一步包括指令读缓冲,所述指令读缓冲存储了至少包括当前指令块在内的单数个或复数个指令块;且
所述数据读缓冲中的表项数目与所述指令读缓冲中的指令数目相同,且一一对应;
对于指令读缓冲中的任意数据读取指令,其在数据读缓冲中的对应表项用于存储该数据读取指令对应的数据。
23.如权利要求22所述的数据缓存系统,其特征在于,使用同一数据读取指令的指令地址或指令地址偏移量,能够从所述指令读缓冲和数据读缓冲中同时读出所述数据读取指令及对应数据。
24.如权利要求23所述的数据缓存系统,其特征在于,根据数据读取指令与该指令之前最后更新对应基地址寄存器值的指令之间的距离,对数据读取指令分类;
根据所述分类,在不同的时间点控制数据缓存将不同类型的数据读取指令对应的数据存储到数据读缓冲中。
25.如权利要求23所述的数据缓存系统,其特征在于,记录指令读缓冲中的数据读取指令对应数据是否已经存储在数据读缓冲中的信息,并根据所述信息对相应数据尚未存储在数据读缓冲中的数据读取指令计算数据地址并控制数据缓存将对应的数据读取指令对应的数据存储到数据读缓冲中。
26.一种数据缓存方法,其特征在于,所述方法包括;提前找到处理器当前正在执行的指令之后的数据读取指令;
在处理器执行所述数据读取指令之前,提前计算出数据地址,并根据所述数据地址控制存储系统向处理器提供对应数据。
27.如权利要求26所述的缓存方法,其特征在于,所述方法进一步包括:
以基地址寄存器值加地址偏移量得到确定数据地址;或
以基地址寄存器值作为确定数据地址;或
以指令地址值加地址偏移量得到确定数据地址;或
多个基地址寄存器值相加得到确定数据地址。
28.如权利要求27所述的数据缓存方法,其特征在于,所述方法进一步包括:通过对所述数据读取指令的地址与处理器当前执行的指令的地址进行比较,以判断是否到达向存储系统输出数据地址以读出数据并提供给处理器的时间点;且
当基地址寄存器的值已经被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述确定数据地址控制存储系统向处理器提供数据。
29.如权利要求27所述的数据缓存方法,其特征在于,所述方法进一步包括:记录所有基地址寄存器的变化差值。
30.如权利要求29所述的数据缓存方法,其特征在于,所述方法进一步包括:
以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或
以基地址寄存器值加对应基地址差值作为可能数据地址;或
多个基地址寄存器值及对应的基地址差值相加得到可能数据地址。
31.如权利要求30所述的数据缓存方法,其特征在于,所述方法进一步包括:通过对所述数据读取指令的地址与处理器当前执行的指令的地址进行比较,以判断是否到达向存储系统输出数据地址以读出数据并提供给处理器的时间点。
32.如权利要求31所述的数据缓存方法,其特征在于,所述方法进一步包括:对数据读取指令及其之前若干条指令的寄存器相关性进行判断,以确定相应基地址寄存器的值是否已经被更新为该数据读取指令所需的基地址寄存器值;且
当基地址寄存器的值尚未被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述可能数据地址控制存储系统向处理器提供数据;
当基地址寄存器的值已经被更新为该数据读取指令所需的基地址寄存器值时,所述判断模块选择所述确定数据地址控制存储系统向处理器提供数据。
33.如权利要求32所述的数据缓存方法,其特征在于,所述方法进一步包括:在选择所述可能数据地址控制存储系统向处理器提供数据的情况下,当处理器执行所述数据读取指令产生实际数据地址时,所述比较器对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且
当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
34.如权利要求33所述的数据缓存方法,其特征在于,所述方法进一步包括:对于任意数据读取指令,在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且
当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
35.如权利要求34所述的数据缓存方法,其特征在于,所述方法进一步包括:对所述实际数据地址与所述基地址差值相加得到所述预测数据地址。
36.如权利要求27所述的数据缓存方法,其特征在于,所述方法进一步包括:记录所有基地址寄存器的变化差值;
在处理器执行所述数据读取指令之前,以基地址寄存器值加地址偏移量,再加上对应基地址差值得到可能数据地址;或以基地址寄存器值加对应基地址差值作为可能数据地址;或多个基地址寄存器值及对应的基地址差值相加得到可能数据地址;
根据所述可能数据地址控制存储系统向处理器提供数据;
当处理器执行所述数据读取指令产生实际数据地址时,对所述可能数据地址与所述实际数据地址进行比较,以确定所述可能数据地址是否与所述实际数据地址一致;且
当两者不一致时,使用所述实际数据地址控制存储系统向处理器提供数据。
37.如权利要求36所述的数据缓存方法,其特征在于,所述方法进一步包括:对于任意数据读取指令,在处理器再次执行所述数据读取指令之前,提前计算出所述再次执行所述数据读取指令时的预测数据地址;且
当所述可能数据地址对应的数据尚未存储在所述存储系统中时,从外部存储器获取包含所述数据的数据块并填充在所述存储系统中。
38.如权利要求37所述的数据缓存方法,其特征在于,所述方法进一步包括:对所述实际数据地址与所述基地址差值相加得到所述预测数据地址。
39.如权利要求26所述的数据缓存方法,其特征在于,所述方法进一步包括:建立数据读取指令与对应数据之间的联系;
使用同一数据读取指令的指令地址或指令地址偏移量,同时读出所述数据读取指令及对应数据。
40.如权利要求39所述的数据缓存方法,其特征在于,所述方法进一步包括:根据数据读取指令与该指令之前最后更新对应基地址寄存器值的指令之间的距离,对数据读取指令分类;
根据所述分类,在不同的时间点控制数据缓存输出不同类型的数据读取指令对应的数据。
41.如权利要求39所述的数据缓存方法,其特征在于,所述方法进一步包括:记录数据读取指令对应数据是否已经由数据缓存输出的信息,并根据所述信息对相应数据尚未由数据缓存输出的数据读取指令计算数据地址并控制数据缓存输出对应的数据。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310086817.0A CN104050092B (zh) | 2013-03-15 | 2013-03-15 | 一种数据缓存系统及方法 |
PCT/CN2014/073445 WO2014139466A2 (en) | 2013-03-15 | 2014-03-14 | Data cache system and method |
US14/775,517 US9785443B2 (en) | 2013-03-15 | 2014-03-14 | Data cache system and method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310086817.0A CN104050092B (zh) | 2013-03-15 | 2013-03-15 | 一种数据缓存系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104050092A true CN104050092A (zh) | 2014-09-17 |
CN104050092B CN104050092B (zh) | 2018-05-01 |
Family
ID=51502976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310086817.0A Active CN104050092B (zh) | 2013-03-15 | 2013-03-15 | 一种数据缓存系统及方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9785443B2 (zh) |
CN (1) | CN104050092B (zh) |
WO (1) | WO2014139466A2 (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105900060A (zh) * | 2014-11-07 | 2016-08-24 | 华为技术有限公司 | 内存访问方法、装置和计算机设备 |
CN105893319A (zh) * | 2014-12-12 | 2016-08-24 | 上海芯豪微电子有限公司 | 一种多车道/多核系统和方法 |
WO2016155623A1 (zh) * | 2015-03-30 | 2016-10-06 | 上海芯豪微电子有限公司 | 基于信息推送的信息系统和方法 |
CN106155946A (zh) * | 2015-03-30 | 2016-11-23 | 上海芯豪微电子有限公司 | 基于信息推送的信息系统和方法 |
CN106155928A (zh) * | 2015-04-13 | 2016-11-23 | 上海芯豪微电子有限公司 | 一种存储层次预取系统和方法 |
WO2016188392A1 (zh) * | 2015-05-23 | 2016-12-01 | 上海芯豪微电子有限公司 | 一种数据地址产生系统和方法 |
CN109284129A (zh) * | 2017-07-21 | 2019-01-29 | 瑞昱半导体股份有限公司 | 用于处理器的资料存取装置与方法 |
TWI650640B (zh) * | 2017-07-14 | 2019-02-11 | 瑞昱半導體股份有限公司 | 用於處理器的資料存取裝置與方法 |
WO2020020175A1 (zh) * | 2018-07-27 | 2020-01-30 | 华为技术有限公司 | 一种数据预取方法及终端设备 |
CN111818295A (zh) * | 2019-04-10 | 2020-10-23 | 杭州海康威视数字技术股份有限公司 | 一种图像获取方法及装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536911B (zh) * | 2014-12-31 | 2018-01-02 | 华为技术有限公司 | 一种多路组相联的高速缓冲存储器及其处理方法 |
US10782973B2 (en) * | 2015-05-14 | 2020-09-22 | International Business Machines Corporation | Optimizing branch re-wiring in a software instruction cache |
US11687345B2 (en) | 2016-04-28 | 2023-06-27 | Microsoft Technology Licensing, Llc | Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers |
US10599583B2 (en) * | 2018-08-20 | 2020-03-24 | Macronix International Co., Ltd. | Pre-match system and pre-match method |
CN113419985A (zh) * | 2021-06-15 | 2021-09-21 | 珠海市一微半导体有限公司 | Spi系统自动读取数据的控制方法及spi系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5542109A (en) * | 1994-08-31 | 1996-07-30 | Exponential Technology, Inc. | Address tracking and branch resolution in a processor with multiple execution pipelines and instruction stream discontinuities |
CN1300006A (zh) * | 1999-12-10 | 2001-06-20 | 国际商业机器公司 | 利用从分支预测得出的未来分支路径信息进行预取 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002196981A (ja) | 2000-12-22 | 2002-07-12 | Fujitsu Ltd | データ処理装置 |
US7263585B2 (en) | 2002-09-19 | 2007-08-28 | Ip-First, Llc | Store-induced instruction coherency mechanism |
CN1957326B (zh) | 2004-05-27 | 2010-07-28 | Nxp股份有限公司 | 指令对齐的微处理器和方法 |
KR20080013993A (ko) * | 2005-05-04 | 2008-02-13 | 에이알엠 리미티드 | 데이터 처리장치 내의 데이터 엔진의 사용 |
CN103984637A (zh) * | 2013-02-07 | 2014-08-13 | 上海芯豪微电子有限公司 | 一种指令处理系统及方法 |
-
2013
- 2013-03-15 CN CN201310086817.0A patent/CN104050092B/zh active Active
-
2014
- 2014-03-14 WO PCT/CN2014/073445 patent/WO2014139466A2/en active Application Filing
- 2014-03-14 US US14/775,517 patent/US9785443B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5542109A (en) * | 1994-08-31 | 1996-07-30 | Exponential Technology, Inc. | Address tracking and branch resolution in a processor with multiple execution pipelines and instruction stream discontinuities |
CN1300006A (zh) * | 1999-12-10 | 2001-06-20 | 国际商业机器公司 | 利用从分支预测得出的未来分支路径信息进行预取 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105900060B (zh) * | 2014-11-07 | 2019-05-03 | 华为技术有限公司 | 内存访问方法、装置和计算机设备 |
CN105900060A (zh) * | 2014-11-07 | 2016-08-24 | 华为技术有限公司 | 内存访问方法、装置和计算机设备 |
CN105893319A (zh) * | 2014-12-12 | 2016-08-24 | 上海芯豪微电子有限公司 | 一种多车道/多核系统和方法 |
WO2016155623A1 (zh) * | 2015-03-30 | 2016-10-06 | 上海芯豪微电子有限公司 | 基于信息推送的信息系统和方法 |
CN106155946A (zh) * | 2015-03-30 | 2016-11-23 | 上海芯豪微电子有限公司 | 基于信息推送的信息系统和方法 |
CN106155928A (zh) * | 2015-04-13 | 2016-11-23 | 上海芯豪微电子有限公司 | 一种存储层次预取系统和方法 |
WO2016188392A1 (zh) * | 2015-05-23 | 2016-12-01 | 上海芯豪微电子有限公司 | 一种数据地址产生系统和方法 |
TWI650640B (zh) * | 2017-07-14 | 2019-02-11 | 瑞昱半導體股份有限公司 | 用於處理器的資料存取裝置與方法 |
CN109284129A (zh) * | 2017-07-21 | 2019-01-29 | 瑞昱半导体股份有限公司 | 用于处理器的资料存取装置与方法 |
CN109284129B (zh) * | 2017-07-21 | 2022-12-20 | 瑞昱半导体股份有限公司 | 用于处理器的资料存取装置与方法 |
WO2020020175A1 (zh) * | 2018-07-27 | 2020-01-30 | 华为技术有限公司 | 一种数据预取方法及终端设备 |
US11586544B2 (en) | 2018-07-27 | 2023-02-21 | Huawei Technologies Co., Ltd. | Data prefetching method and terminal device |
CN111818295A (zh) * | 2019-04-10 | 2020-10-23 | 杭州海康威视数字技术股份有限公司 | 一种图像获取方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US9785443B2 (en) | 2017-10-10 |
CN104050092B (zh) | 2018-05-01 |
US20160026469A1 (en) | 2016-01-28 |
WO2014139466A2 (en) | 2014-09-18 |
WO2014139466A3 (en) | 2015-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104050092A (zh) | 一种数据缓存系统及方法 | |
CN102841865B (zh) | 高性能缓存系统和方法 | |
CN103513957A (zh) | 高性能缓存系统和方法 | |
CN101256481B (zh) | 数据处理器以及存储器读激活控制方法 | |
US4725947A (en) | Data processor with a branch target instruction storage | |
US5093778A (en) | Integrated single structure branch prediction cache | |
JP5211514B2 (ja) | 更新装置、更新方法および更新プログラム | |
CN110059020B (zh) | 扩展内存的访问方法、设备以及系统 | |
CN103513958A (zh) | 高性能指令缓存系统和方法 | |
JP6467605B2 (ja) | 命令処理システムと方法 | |
US9753857B2 (en) | Two handed insertion and deletion algorithm for circular buffer | |
CN103176914B (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
CN101379481A (zh) | 处理元件、混合模式并行处理器系统、处理元件方法、混合模式并行处理器方法、处理元件程序、以及混合模式并行处理器程序 | |
WO2012127589A1 (ja) | マルチコアプロセッサシステム、および分岐予測方法 | |
US11301250B2 (en) | Data prefetching auxiliary circuit, data prefetching method, and microprocessor | |
CN104731719A (zh) | 一种缓存系统和方法 | |
CN112559049A (zh) | 用于指令高速缓存的路预测方法、访问控制单元以及指令处理装置 | |
CN108139981A (zh) | 一种页表缓存tlb中表项的访问方法,及处理芯片 | |
KR20180009217A (ko) | 데이터 저장 장치의 작동 방법과 이를 포함하는 데이터 처리 시스템의 작동 방법 | |
CN104657285A (zh) | 一种数据缓存系统和方法 | |
CN115269454A (zh) | 数据访问方法、电子设备和存储介质 | |
US20160217079A1 (en) | High-Performance Instruction Cache System and Method | |
US8578135B2 (en) | Apparatus for calculating and prefetching a branch target address | |
JP3628375B2 (ja) | 未参照先取りキャッシュを利用した命令語先取り方法およびその回路 | |
CN104424132A (zh) | 高性能指令缓存系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
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. |