CN102156676B - 高速缓存*** - Google Patents
高速缓存*** Download PDFInfo
- Publication number
- CN102156676B CN102156676B CN201110037745.1A CN201110037745A CN102156676B CN 102156676 B CN102156676 B CN 102156676B CN 201110037745 A CN201110037745 A CN 201110037745A CN 102156676 B CN102156676 B CN 102156676B
- Authority
- CN
- China
- Prior art keywords
- data
- unit
- address
- ram
- cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000015654 memory Effects 0.000 claims abstract description 157
- 238000006243 chemical reaction Methods 0.000 claims 3
- 230000009977 dual effect Effects 0.000 description 155
- 239000000872 buffer Substances 0.000 description 30
- 238000000034 method Methods 0.000 description 16
- 230000000052 comparative effect Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 238000012937 correction Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 4
- 101100498823 Caenorhabditis elegans ddr-2 gene Proteins 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- 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
-
- 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/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0851—Cache with interleaved addressing
-
- 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/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0853—Cache with multiport tag or data arrays
-
- 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/0877—Cache access modes
- G06F12/0886—Variable-length word access
-
- 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/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种高速缓存***,包括:一级高速缓冲存储器,其被配置为在计算单元之间输入和输出数据,一级高速缓冲存储器包括多端口存储器单元,多端口存储器单元中的每个包括:存储单元,其存储具有第一数据大小的单元数据;写入单元,其将顺序输入的多个单元数据同时写入到存储单元的连续位置;以及输出单元,其读出并输出被写入存储单元的单元数据,其中,当将具有作为第一数据大小的任意多倍的第二数据大小、并且被分割为单元数据的数据写入一级高速缓冲存储器中时,通过将顺序的单元数据写入到多端口存储器单元的子集中,并且将其它顺序的单元数据写入到多端口存储器单元的另一子集中,来将数据存储在不同的多端口存储器单元中。
Description
相关申请的交叉引用
本申请基于2010年2月10日提交的在先日本专利申请第2010-27111号并要求该申请的优先权,其全部内容通过引用合并于此。
技术领域
本发明的实施例涉及一种存储在计算中使用的数据的高速缓存***。
背景技术
在计算机***中,通常与主存储器分离地设置少量的快速高速缓冲存储器。设置多个级别的高速缓冲存储器,以减少在发生高速缓存命中失误时对主存储器的访问。例如,可以在一级高速缓存和主存储器之间设置能够比主存储器更快地被访问的二级高速缓存。
在相关技术中,通过根据被称为双数据速率2(DDR2)的标准工作的主存储器来实现加速与CPU的数据传输的技术。DDR2是在同步计算机内部的各个电路时使用时钟信号的上升沿和下降沿两者的技术。与仅使用时钟的上升沿或者仅使用时钟的下降沿来同步各个电路的情况相比,根据DDR2,能够使每单位时间的处理效率提高到两倍。在DDR2标准中,存储器访问的最小单元是64字节。根据该值,将存储在高速缓冲存储器中的数据大小(行大小)类似地设置为64字节,以匹配关于主存储器的最小存储器访问单元。
例如,在日本未审查专利申请公开第2002-278836号中公开了与高速缓冲存储器相关的技术。
此外,被称为DDR3的标准已作为DDR的第三代投入了使用。虽然关于主存储器的内部和外部频率比与DDR2相同,但是在DDR3中的单个周期从主存储器读取的内部数据大小倍增到128字节。为了获得这种DDR3的最完全的潜力,需要以DDR2双倍的数据大小访问主存储器。
如上所述,如果以128字节为单元访问主存储器,而高速缓冲存储器的行大小与DDR2类似地保持在64字节,则高速缓存一致性控制变得复杂。高速缓存一致性控制是指用于将主存储器中的记录信息与高速缓冲存储器中记录的信息同步的过程。因此,可以想到将高速缓存***的行大小扩展为128字节,即在访问主存储器时使用的相同字节数。
然而,如果将高速缓存***的行大小扩展到两倍,则花费两倍数量的周期来将数据寄存在高速缓冲存储器中或者移出要替换的行上的数据。随着高速缓存寄存和移出处理的次数增加,管道逐渐被针对高速缓冲存储器的寄存和移出处理占据。其结果是,用于关于高速缓冲存储器读取和写入数据的过程在管道上变得较不频繁。
发明内容
根据本发明的一方面,高速缓存***包括在计算单元之间输入/输出数据的一级高速缓冲存储器。一级高速缓冲存储器包括多端口存储器,每个多端口存储器包括:存储单元,其存储具有第一数据大小的单元数据;写入单元,其将顺序输入的多个单元数据同时写入到存储单元的连续位置;以及输出单元,其从存储单元读出并输出多个单元数据。当向一级高速缓冲存储器中写入具有作为第一数据大小的多倍的第二数据大小、并且被分割为单元数据的数据时,通过将顺序的单元数据写入到多端口存储器的子集中的输入端口寄存器中,并将顺序的单元数据写入到多端口存储器的另一子集中的输入端口寄存器中,来将数据存储在不同的多端口存储器中。
为了解决上述问题,高速缓存***如下地工作。当将具有作为第一数据大小的任意多倍的第二数据大小的数据分割为单元数据并写入一级高速缓冲存储器中时,至少进行第一写入操作和第二写入操作。在第一写入操作中,将顺序的多个单元数据写入多个多端口存储器单元的子集中的输入端口寄存器中。在第二写入操作中,将顺序的多个单元数据写入多个多端口存储器单元的另一子集中的输入端口寄存器中。这样,将数据存储在不同的多端口存储器单元中。另外,当从一级高速缓冲存储器读出数据时,至少进行第一读取操作和第二读取操作。在第一读取操作中,从多个多端口存储器单元的子集的输出端口寄存器读出顺序的多个单元数据。在第二读取操作中,从多个多端口存储器单元的剩余子集的输出端口寄存器中读出顺序的多个单元数据。这样,从不同的多端口存储器单元读出数据。
根据本发明的一个实施例的高速缓存***可以包括多个寄存器,用于同时将第一数据大小的数据输入到多个多端口存储器单元中。这样,将数据写入存储器中的连续位置。其结果是,能够将高速缓存***的一级高速缓存行大小从64字节扩展为128字节,而不改变二级高速缓存和一级高速缓存之间的数据总线宽度,同时仍然保持将在一级高速缓存中寄存(和刷新(flushing))数据所需的处理时间相同的处理时间。换句话说,即使在扩展一级高速缓存行大小之后,也能够保持高速缓存利用率相同。
将至少通过在权利要求中特别指出的单元、特征和组合来实现并获得本发明的目的和优点。
应当理解,前面的概括描述和下面的详细描述是示例性和说明性的,而不限制所要求保护的本发明。
附图说明
图1示出根据本发明实施例的CPU的配置;
图2示出根据实施例的CPU的功能配置;
图3A至3C示出根据实施例的一级数据高速缓存存储块的位置;
图4示出根据实施例的一级数据高速缓冲存储器的高速缓存路(way)配置;
图5示出包含在根据实施例的一级数据高速缓冲存储器中的双端口RAM的配置;
图6示出将数据写入根据实施例的一级数据高速缓冲存储器时的时序图;
图7示出向根据实施例的一级数据高速缓冲存储器写入数据的操作;
图8示出从根据实施例的一级数据高速缓冲存储器读取数据的操作;
图9示出向根据比较示例的一级数据高速缓冲存储器写入数据的操作;
图10示出在从根据实施例的一级数据高速缓冲存储器读出数据时如何对一级数据高速缓冲存储器赋予地址;
图11示出对生成的地址的转换;
图12示出双端口RAM的每个模块的提供的地址和块之间的关系;
图13示出通过生成的地址和转换的地址,针对各个双端口RAM模块读出数据的操作;
图14示出通过生成的地址和转换的地址,针对各个双端口RAM模块读出数据的操作;
图15示出通过生成的地址和转换的地址,针对各个双端口RAM读出数据的操作;
图16示出将16字节数据从多个双端口RAM模块提供到执行/指令单元的配置;以及
图17示出将16字节数据从多个双端口RAM模块提供到执行/指令单元的另一配置。
具体实施方式
下文中,将参考附图描述本发明的实施例。
根据本发明的实施例的高速缓存***被包含在图1所示的计算机的中央处理器(下文中称为“CPU”)1中。CPU 1包括指令单元(IU)2、执行单元(EU)3、一级数据高速缓冲存储器(L1D$)4、一级指令高速缓冲存储器(L1I$)5和二级高速缓冲存储器(L2$)6。
在图1所示的配置中,高速缓存***包括一级数据高速缓冲存储器4、一级指令高速缓冲存储器5和二级高速缓冲存储器6。高速缓存***将存储在主存储器(未在图1中示出)中的数据的一部分复制到一级数据高速缓冲存储器4和二级高速缓冲存储器6。通过以这种方式复制数据,在访问存储在高速缓冲存储器之一中的数据时,可以从高速缓冲存储器而不是主存储器读出数据,由此使得能够快速地读出信息。
图1示出了在CPU中设置了单个一级高速缓存和单个二级高速缓存的配置。然而,高速缓存级别的数量以及每个级别上的高速缓存的数量不限于图1所示的示例的数量。
一级数据高速缓冲存储器4和二级高速缓冲存储器6保持主存储器的副本。在CPU 1内部,在执行单元3和一级数据高速缓冲存储器4之间输入和输出数据。
二级高速缓冲存储器6针对一级数据高速缓冲存储器4输入和输出数据,并且针对主存储器输入和输出数据。二级高速缓冲存储器6从主存储器中读出要写入一级数据高速缓冲存储器4的数据,并且使得将该数据存储在一级数据高速缓冲存储器4中。
该一级数据高速缓冲存储器4和二级高速缓冲存储器6保持基本与主存储器中的数据相同的数据,并且还写回被计算重写的数据。换句话说,在存储数据时,将数据写回到主存储器。指令和数据以如下顺序流过部件:主存储器、二级高速缓冲存储器6、一级数据高速缓冲存储器4以及指令单元2或指令单元3。当通过存储数据而重写数据时,在称为回写的处理中将数据写回到主存储器。
下文中,描述一级高速缓存的作用。一级指令高速缓冲存储器5临时存储从主存储器读出的要处理的指令。将从主存储器中读出并且存储在一级指令高速缓冲存储器5中的指令发送到指令单元2并进行解码,然后由执行单元3进行处理。
一级数据高速缓冲存储器4临时存储从主存储器读出的数据,以读取和写入用于计算处理的数据。将存储在一级数据高速缓冲存储器4中的数据加载到执行单元3中。执行单元3使用所加载的数据执行计算过程,并使得所得到的数据被反映到主存储器中。将该过程称为回写。
图1中的CPU 1以固定数据大小为单元,针对主存储器输入和输出数据。例如,在主存储器内部在一个周期中读出的数据的宽度可以是128字节。该数据大小对应于在一个周期中读出的数据宽度。在本实施例中,在一个周期中读出的数据宽度基于称为DDR3的标准。在下文的描述中,将描述以128字节为单元在CPU 1和主存储器之间交换数据的示例。然而,下文中描述的高速缓存***的操作适用于其它数据宽度。
如图2所示,例如,针对在图1所示的CPU 1的各个部件之间传送的数据设置数据宽度。在包括指令单元2和执行单元3的执行/指令单元(EU/IU)11和一级数据高速缓冲存储器4之间,使用16字节数据宽度存储和加载数据。
此外,用于将数据从二级高速缓冲存储器6传送到一级数据高速缓冲存储器4的传送总线的宽度为32字节。当将数据从二级高速缓冲存储器6写入到一级数据高速缓冲存储器4时(在移入(move-in)期间),以32字节为单元从二级高速缓冲存储器6读出移入数据。
将从二级高速缓冲存储器6读出的移入数据提供到ECC校验/纠错/奇偶校验码生成器12。ECC校验/纠错/奇偶校验码生成器12针对从二级高速缓冲存储器6提供的移入数据检查纠错码(下文中称为“ECC”),并针对移入数据生成奇偶校验码。将具有从ECC校验/纠错/奇偶校验码生成器12生成的奇偶校验码的移入数据临时存储在移入数据寄存器(下文中称为“MIDR”)13中。
随后,将存储在移入数据寄存器13中的移入数据存储在一级数据高速缓冲存储器4中。在图2中,使用32字节传送总线宽度将存储在移入数据寄存器13中的移入数据传送到一级数据高速缓冲存储器4,并写入到一级数据高速缓冲存储器4。
类似地,当将存储在一级数据高速缓冲存储器4中的数据排空到二级高速缓冲存储器6时,或者换句话说,当来自一级数据高速缓冲存储器4的数据被写入到二级高速缓冲存储器6中时,使用32字节传送总线宽度从一级数据高速缓冲存储器4读出移出(move-out)数据(写入数据)。
将从一级数据高速缓冲存储器4读出的移出数据提供到ECC校验/纠错单元14。ECC校验/纠错单元14针对从一级数据高速缓冲存储器4发送到二级高速缓冲存储器6的移出数据进行ECC校验。在进行检错和纠错过程之后,将移出数据临时存储在移出数据寄存器(下文中称为“MODR”)15。
由二级高速缓冲存储器6读入存储在移出数据寄存器15中的移出数据,并将其存储在二级高速缓冲存储器6中。由于移出数据寄存器15和二级高速缓冲存储器6之间的传送总线的宽度为16字节,因此以16字节的单元将来自移出数据寄存器15的移出数据传送并写入到二级高速缓冲存储器6。
以这种方式,通过ECC保护在二级高速缓冲存储器6和一级数据高速缓冲存储器4之间传送的数据,同时通过奇偶校验码保护存储在一级数据高速缓冲存储器4中的数据。
在如上所述工作的CPU 1中,一级数据高速缓冲存储器4可以具有128字节的行大小,例如,可以采用2路组关联技术。组关联技术涉及将多个字(数据)作为单个块管理。另外,一级数据高速缓冲存储器4的行大小是128字节。
将一级数据高速缓冲存储器4中的行大小设置为128字节,以与CPU1以128字节为单元访问主存储器的方式匹配。换句话说,使一级数据高速缓冲存储器4的行大小同样为128字节,这与CPU 1和主存储器之间的数据宽度相同,以避免CPU 1和主存储器之间的复杂的高速缓存一致性控制。另外,由下文中描述的多端口RAM将128字节的数据输入到一级数据高速缓冲存储器4中,并将从多端口RAM输入的128字节的数据以例如8字节数据的预定数据单元写入一级数据高速缓冲存储器4中的连续位置。
将描述具有多个双端口RAM的一级数据高速缓冲存储器4的情况。双端口RAM是1W2R-RAM,其使得能够使用单个端口进行数据写入,以及同时使用两个端口进行数据读取。
在图3A至3C中示出了本实施例的一级数据高速缓冲存储器4。图3A示出了路(0)的数据排列,图3B示出了路(1)的数据排列,图3C示出了地址布局。
在图3A至3C中,RAM(0)、RAM(1)、RAM(2)和RAM(3)是各个双端口RAM模块。在图3A和3B所示的数据排列中,在RAM(0)和RAM(1)的对与RAM(2)和RAM(3)的对之间,每四个块路便交替一次。
图3A示出了路(0)的数据排列。将路(0)的块00至块03分配给RAM(0)和RAM(1)。此外,将路(0)的块04至块07分配给RAM(2)和RAM(3)。
图3B示出了路(1)的数据排列。与路(0)不同,将路(1)的块00至块03分配给RAM(2)和RAM(3),而将路(1)的块04至块07分配给RAM(0)和RAM(1)。
此外,在一级数据高速缓冲存储器4中的这种路配置中,将索引地址(0至n)分别分配给路(0)和路(1)中每个偶编号(evn)块或奇编号(odd)块,如图4所示。图4示出了分别对应于图3A和3B所示的双端口RAM(0)、双端口RAM(1)、双端口RAM(2)和双端口RAM(3)的索引地址。在图4中,“W0”和“w1”表示路编号,而“evn”和“odd”指示特定块编号是偶数还是奇数。
在以这种方式配置的一级数据高速缓冲存储器4中,在相邻的双端口RAM模块之间,或者换句话说,在RAM(0)和RAM(1)之间以及在RAM(2)和RAM(3)之间,形成连续的块编号。其结果是,在给定图3A至3C所示的块设置时,例如,能够从一个双端口RAM模块读出一路的块00和02,而能够从另一双端口RAM模块同时读出该路的块01和03。
包含在上述一级数据高速缓冲存储器4中的双端口RAM模块的配置例如可以如图5所示。图5中的双端口RAM 20包括第一输入端口寄存器21a和第二输入端口寄存器21b、存储器单元22以及第一输出端口寄存器23a和第二输出端口寄存器23b,其中从输入端口对第一输入端口寄存器21a和第二输入端口寄存器21b提供针对一级数据高速缓冲存储器4的移入数据。为了保持与相关技术中相同数量的高速缓存寄存过程,图5所示的双端口RAM 20是配备有16字节写入功能的RAM。
在图5中的双端口RAM 20中,以8字节为单元将数据输入并保持在第一输入端口寄存器21a和第二输入端口寄存器21b中。总共16字节的数据保持在两个输入端口寄存器21a和21b中,然后从输入端口寄存器21a和21b同时输出该数据,并将其写入存储器单元22。此外,在图5中的双端口RAM 20中的高速缓存移出期间,使用两个输出端口23a和23b读出保持在存储器单元22中的16字节数据,并将其作为输出数据输出。这样,能够同时有效地处理两个16字节加载指令(SIMD)。
将与在CPU 1和主存储器之间输入和输出的数据具有相同数据大小的数据(在该示例中为128字节的数据)输入到这些输入端口寄存器21a和21b以及其它双端口RAM 20的输入端口寄存器。随后,输入端口寄存器21a和21b同时将与图4所示的各个块相对应的单元数据写入到存储器单元22中的连续位置。在一级数据高速缓冲存储器4中包括四个这种双端口RAM 20的模块。因此,双端口RAM 20的每个模块起到包括存储器单元22、多个输入端口寄存器21a和21b以及多个输出端口的多端口存储器单元的作用。
当将8字节的移入数据顺序提供到图5中的双端口RAM 20时,将第一组8字节的移入数据存储在输入端口寄存器21a中,将下一组8字节的移入数据存储在输入端口寄存器21b中。随后,一旦将总共16字节的移入数据写入第一输入端口寄存器21a和第二输入端口寄存器21b,第一输入端口寄存器21a和第二输入端口寄存器21b同时将16字节的移入数据写入存储器单元22中的连续位置22a和22b。此时,对存储器单元22提供地址信息,该地址信息指示要写入移入数据的存储器单元22的连续位置22a和22b。
换句话说,当将对应于两个输入端口寄存器21a和21b的两个地址输入到双端口RAM 20中时,能够同时读取输入端口寄存器21a和21b中的数据。然而,不能同时执行写入操作和读取操作。通常,能够以8字节为单元将来自输入端口寄存器21a和21b的数据同时写入存储器单元22。然而,能够通过用于向内置锁存器进行写入的寄存器来将输入端口寄存器21a和21b扩展另外的8字节。这样,可以写入到存储器单元22中的连续的16字节位置。当在这种由输入端口寄存器21a和21b构成的扩展寄存器中寄存数据时,可以进行正常的RAM-RD操作。
当读出存储在存储器单元22中的数据时,向双端口RAM 20提供读取地址。基于预先提供的地址信息,双端口RAM 20将8字节移出数据从存储器单元22读出到第一输出端口寄存器23a中。基于接下来提供的地址信息,双端口RAM 20将8字节移出数据从存储器单元22读出到第二输出端口寄存器23b中。第二个8字节数据顺序地跟在上面读出的移出数据之后。一旦针对总共16字节的移出数据将8字节的数据分别写入第一输出端口寄存器23a和第二输出端口寄存器23b,第一输出端口寄存器23a和第二输出端口寄存器23b进行协作以各自输出8字节、总共输出16字节的移出数据。
一级数据高速缓冲存储器4中包括四个模块的图5所示的双端口RAM 20。当在CPU 1和主存储器之间发送和接收的128字节的移入数据被寄存在一级数据高速缓冲存储器4中时,一级数据高速缓冲存储器4进行图6的下部所示的操作。
在图6的第三周期中,将第一组移入数据MIRD(总共32字节)提供到四个双端口RAM模块20中的各个输入端口。在图6的第四周期中,将该移入数据写入到每个双端口RAM模块20的输入端口寄存器21a。此时,每个双端口RAM模块20处于针对移入数据的可读取(可RD)状态。
随后,在图6的第四周期中,将下一组移入数据MIRD(总共32字节)提供到四个双端口RAM模块20中的各个输入端口。然后,在图6的第五周期中,将该移入数据写入到每个输入端口寄存器21b。此时,每个双端口RAM模块20处于可写入(wt)状态,双端口RAM模块20能够共同将存储在各个输入端口寄存器21a和21b中的总共64字节的移入数据写入到存储器单元22中。
通过进行两次这种移入数据写入操作,一次在第三周期至第五周期,一次在第六周期至第八周期,一级数据高速缓冲存储器4能够写入总共128字节的移入数据。因此,在本实施例中,在六个周期中完成移入数据写入。
另一方面,在比较示例中,在输入和写入32字节的移入数据之间需要两个周期。由于只在已写入在前的32字节的移入数据之后输入之后的32字节的移入数据,因此在比较示例中,128字节的移入数据写入需要8个周期。
一级数据高速缓冲存储器4和二级高速缓冲存储器6之间的传送总线宽度是32字节。因此,当将128字节的移入数据写入一级数据高速缓冲存储器4时,进行两次写入操作,在每个写入操作过程中将32×2字节的移入数据写入移入数据寄存器13。此时,在第一写入操作过程中写入在前的64字节的移入数据,而在第二写入操作过程中写入之后的64字节的移入数据。
这里,用于将移入数据从移入数据寄存器13写入到一级数据高速缓冲存储器4的传送总线宽度也是32字节。当向四个双端口RAM模块20发出存储移入数据的指令时,四个双端口RAM模块20中的每个在第一输入端口寄存器21a和第二输入端口寄存器21b中存储8字节的数据,对于每个模块总共16字节。这样,将总共64字节的移入数据存储在四个双端口RAM模块20的输入端口寄存器中。
在写入指令之后,四个双端口RAM模块20各自将16字节写入存储器单元22,同时写入总共64字节的移入数据。针对之后的64字节的移入数据,再次进行这种用于同时写入64字节的移入数据的写入操作。这样,将128字节的数据写入一级数据高速缓冲存储器4。
图7示出了根据本实施例的一级高速缓存中的数据寄存。在图7中,从块00至块07的每个块的大小为8字节,八个块总共64字节。当在一级高速缓存中寄存128字节的数据时,执行两次64字节的数据寄存操作。
在图7中的一级数据高速缓冲存储器4包括四个双端口RAM模块RAM(0)至RAM(3)的情况下,通过第一写入操作将总共16字节的移入数据写入双端口RAM模块RAM(0)的块00和02。同时,将总共16字节的移入数据写入双端口RAM模块RAM(2)的块04和06。另外,通过针对第一组移入数据的接下来的写入操作,将总共16字节的移入数据写入双端口RAM模块RAM(1)的块01和03。同时,将总共16字节的移入数据写入双端口RAM模块RAM(3)的块05和07。这样,将总共64字节的移入数据写入一级高速缓存。
类似地,通过对应于之后的64字节的移入数据的第二写入操作,将总共16字节的移入数据写入双端口RAM模块RAM(0)的块00和02。同时,将总共16字节的移入数据写入双端口RAM模块RAM(2)的块04和06。另外,通过针对之后的移入数据的第二写入操作,将总共16字节的移入数据写入双端口RAM模块RAM(1)的块01和03。同时,将总共16字节的移入数据写入双端口RAM模块RAM(3)的块05和07。作为上述两个写入操作的结果,将总共128字节的移入数据写入一级高速缓存。
以这种方式,仅通过两个写入操作,一级数据高速缓冲存储器4能够写入128字节的数据。换句话说,能够在不改变二级高速缓存和一级高速缓存之间的数据总线宽度的情况下,将一级高速缓存的行大小从64字节扩展为128字节,同时保持高速缓存寄存和刷新所需的过程的数量相同。换句话说,即使在扩展一级高速缓存行大小之后,仍能保持高速缓存利用率相同。
当读出写入一级数据高速缓冲存储器4的数据并将其移出到二级高速缓冲存储器6时,使用双端口RAM 20的第一输出端口寄存器23a和第二输出端口寄存器23b。
图8是用于说明从一级高速缓存写回数据,或者换句话说移出操作的图。如图8所示,通过第一移出数据读取操作,从双端口RAM模块RAM(0)的块00和02读出总共16字节的移出数据。同时,从双端口RAM模块RAM(2)的块04和06读出总共16字节的移出数据。这样,从双端口RAM读出总共32字节的移出数据。另外,通过接下来的读取操作,从双端口RAM模块RAM(1)的块01和03读出总共16字节的移出数据。同时,从双端口RAM模块RAM(3)的块07和05读出总共16字节的移出数据。通过这两个读取操作,读出总共64字节的移出数据。
类似地,通过第二读取操作,从双端口RAM模块RAM(0)的块00和02读出总共16字节的移出数据。同时,从双端口RAM模块RAM(2)的块04和06读出总共16字节的移出数据。另外,通过接下来的第二读取操作,从双端口RAM模块RAM(1)的块01和03读出总共16字节的移出数据。同时,从双端口RAM模块RAM(3)的块07和05读出总共16字节的移出数据。通过这两个读取操作,读出总共128字节的移出数据。
这时,将从四个双端口RAM模块20读出的四组32字节的数据分别存储在每个双端口RAM模块20的第一输出端口寄存器23a中,而将接下来的四组32字节的数据分别存储在每个双端口RAM模块20的第二输出端口寄存器23b中。在两个操作中,将存储在输出端口寄存器中的这些32字节的大块(chunk)的数据作为移出数据读取到移出数据寄存器15中。通过进行两次这种移出数据读取操作,将总共128字节的移出数据提供到移出数据寄存器15。
另一方面,考虑图6的上部和图9所示的比较示例,其中,一级数据高速缓冲存储器具有64字节的行大小,其进行每次32字节的数据写入操作。当该比较示例中的一级数据高速缓冲存储器写入128字节的数据时,将32字节的移入数据写入移入数据寄存器。因此,总共四次将32字节的移入数据写入一级数据高速缓冲存储器。
在图6的上部所示的比较示例中,将128字节的高速缓存行寄存在一级高速缓存中包括发出四次移入请求以及将移入数据寄存在高速缓存中。因此,与实施例相比,移入请求的管道利用率翻倍。因此,针对双端口RAM 20设置用于同时写入连续位置(2索引)的功能(16字节写入功能)。这样,如在图6的下部中的本实施例中,能够使用四个双端口RAM模块20,通过单个移入请求写入64字节的数据。其结果是,在比较示例中,必须发出四次移入请求以寄存128字节的高速缓存行,而在本实施例中,这可以通过仅发出两次移入请求来实现同样功能。
另外,当在本实施例中发出移出请求时,从二级高速缓冲存储器6读出64字节的数据(行大小的一半)。读出的数据首先被寄存在输出端口寄存器中,然后以四次发送到移出数据寄存器15,每次发送32字节。高速缓存访问包括两次64字节的存取,因此与图9中的比较示例相比,移出请求的管道利用率不变。
根据上述高速缓存***,能够在不改变二级高速缓存和一级高速缓存之间的数据总线宽度的情况下,将一级高速缓存的行大小从64字节扩展为128字节,同时保持针对一级高速缓存的寄存和刷新操作的高速缓存利用率相同。换句话说,能够将128字节的数据写入一级数据高速缓冲存储器4,同时保持针对一级高速缓存的寄存和刷新操作的高速缓存利用率,并且不改变输送总线宽度。因此,根据本实施例的高速缓存***,即使CPU 1和主存储器之间的数据宽度增大,行大小也能够与该数据宽度匹配,并且能够由多个双端口RAM模块20进行数据读取和写入。
接下来,描述在CPU 1中使用特定数据大小的单元针对一级数据高速缓冲存储器4的数据的读取和写入。在下文中的描述中,描述如下示例,其中,加载到执行/指令单元11的指令是SIMD(单指令/多数据)指令,并且根据这些指令以特定数据大小为单元写入和读出数据。
如果使用SIMD指令,则CPU 1通过单个SIMD指令同时处理多个数据。例如,当出现单个SIMD指令时,可以将16字节的顺序的数据写入一级数据高速缓冲存储器4或从一级数据高速缓冲存储器4读出。这里,16字节被视为“数据大小”。
针对双端口RAM 20中的连续位置进行根据SIMD指令的16字节的数据到一级数据高速缓冲存储器4的写入。这时,包含在一级数据高速缓冲存储器4中的每个双端口RAM模块20分别在第一输入端口寄存器21a和第二输入端口寄存器21b存储了8字节的数据,并且将两组8字节的数据同时写入存储器单元22中的连续位置。这样,根据SIMD指令将16字节的数据写入每个双端口RAM模块20。
在遵照用于读出被写入双端口RAM 20的存储器单元22的16字节的数据的SIMD指令的情况下,针对一级数据高速缓冲存储器4,指定与每8个字节划界的块的边界相对应的地址。例如,在图4所示的路配置中,存储在双端口RAM模块RAM(0)中的数据和存储在双端口RAM模块RAM(1)中的数据构成顺序的16字节数据。然后,读出该顺序的16字节数据,该顺序的16字节数据由存储为路编号(0)、双端口RAM模块RAM(0)的索引地址(0)的数据,以及存储为路编号(0)、双端口RAM模块RAM(1)的索引地址(0)的数据构成。
以这种方式,当读出跨越两个块的16字节的数据时,将双端口RAM模块RAM(0)中的数据的读取地址从用于访问双端口RAM模块RAM(1)中的块的地址偏移开一个决。另外,在每个双端口RAM模块20中,需要读出跨越两个块(行交叉)的16字节的数据。
为了读出该顺序的16字节数据,高速缓存***包括图10所示的配置。根据图10,高速缓存***包括第一地址生成器30a和第一地址转换器31a以及第二地址生成器30b和第二地址转换器31b。第一地址生成器30a生成被分别读出到双端口RAM模块RAM(1)和RAM(3)的第一输入端口寄存器21a和第一输出端口寄存器23a的数据的地址信息。第二地址生成器30b生成被分别读出到双端口RAM模块RAM(1)和RAM(3)的第二输入端口寄存器21b和第二输出端口寄存器23b的数据的地址信息。
第一地址转换器31a生成被分别读出到双端口RAM模块RAM(0)和RAM(2)的第一输入端口寄存器21a和第一输出端口寄存器23a的数据的地址信息。第二地址转换器31b生成被分别读出到双端口RAM模块RAM(0)和RAM(2)的第二输入端口寄存器21b和第二输出端口寄存器23b的数据的地址信息。
遵循来自执行/指令单元11的指令,第一地址生成器30a和第二地址生成器30b生成要从一级数据高速缓冲存储器4读出的数据的地址。第一地址转换器31a和第二地址转换器31b采用由第一地址生成器30a和第二地址生成器30b生成的地址,并如下地对地址进行转换。
例如,可以如图11所示,对由第一地址生成器30a和第二地址生成器30b生成的虚拟地址VA(N[k字节])进行转换。图11示出了生成的地址和经转换的地址之间的关系。这里,采用虚拟地址以用于生成的地址和经转换的地址两者。另外,在图11中,使用十六进制表示每个地址。此外,生成的地址VA(1)是高位地址,而VA(2)是低位地址。类似地,经转换的地址VA(3)是高位地址,而VA(4)是低位地址。
在第一地址生成器30a和第二地址生成器30b生成地址[1000]的情况下,第一地址转换器31a和第二地址转换器31b将地址转换为地址[1008]。另外,在第一地址生成器30a和第二地址生成器30b生成地址[1008]的情况下,第一地址转换器31a和第二地址转换器31b将地址转换为地址[1010]。这是因为,要在图10所示的偶数侧访问的位置处在比要在奇数侧访问的位置高一个索引地址的地址位置。
在图10中的示例中,第一地址转换器31a和第二地址转换器31b通过将等同于一个索引地址的值的8与第一地址生成器30a和第二地址生成器30b生成的地址相加来转换地址。
当如在图10中那样一级数据高速缓冲存储器4包括四个双端口RAM模块时,提供用于在每个双端口RAM模块中针对第一输出端口寄存器23a和第二输出端口寄存器23b读出数据的地址。
随后,如图12所示,将第一地址生成器30a和第二地址生成器30b生成的地址提供到双端口RAM模块RAM(1)和RAM(3)。另外,将第一地址转换器31a和第二地址转换器31b输出的经转换的地址分别提供到双端口RAM模块RAM(0)和RAM(2),其存储在提供了由第一地址生成器30a和第二地址生成器30b生成的地址的双端口RAM模块RAM(1)和RAM(3)中存储的数据之后顺序继续的数据。
在图10中,第一地址生成器30a生成指定包含在双端口RAM模块RAM(1)中的任意块的地址。将第一地址生成器30a生成的地址提供到双端口RAM模块RAM(1)的第一端口寄存器21a和23a。另外,第一地址转换器31a将生成的地址转换为存储由第一地址生成器30a指定的双端口RAM模块RAM(1)的块中存储的数据之后顺序继续的数据的块的地址。将经转换的地址提供到双端口RAM模块RAM(0)的第一端口寄存器21a和23a。
类似地,第一地址生成器30a生成的地址指定双端口RAM模块RAM(3)中的任意块,并将其提供到双端口RAM模块RAM(3)的第一端口寄存器21a和23a。此外,由第一地址转换器31a输出的经转换的地址是存储由第一地址生成器30a指定的双端口RAM模块RAM(3)的块中存储的数据之后顺序继续的数据的块的地址。将经转换的地址提供到双端口RAM模块RAM(2)的第一端口寄存器21a和23a。
此外,第二地址生成器30b生成指定包含在双端口RAM模块RAM(1)中的任意块的地址。然后,将第二地址生成器30b生成的地址提供到双端口RAM模块RAM(1)。另外,第二地址转换器31b将生成的地址转换为存储由第二地址生成器30b指定的双端口RAM模块RAM(1)的块中存储的数据之后顺序继续的数据的块的地址。将该地址提供到双端口RAM模块RAM(0)的第二端口寄存器21b和23b。
类似地,由第二地址生成器30b生成的地址指定双端口RAM模块RAM(3)中的任意块,并且被提供到双端口RAM模块RAM(3)的第二端口寄存器21b和23b。此外,由第二地址转换器31b输出的经转换的地址是存储由第二地址生成器30b指定的双端口RAM模块RAM(3)的块中存储的数据之后顺序继续的数据的块的地址。将经转换的地址提供到双端口RAM模块RAM(2)的第二端口寄存器21b和23b。
其结果是,通过遵循SIMD指令,能够访问存储16字节的块。下面给出具体示例。
假设由第一地址生成器30a和第二地址生成器30b生成虚拟地址VA。
首先,给出如下示例,其中,VA=0x000。当将16字节的数据加载到第一输出端口寄存器23a中时,由第一地址生成器30a生成的地址是VA(2)=0,如图11所示。与之相比,当由第一地址转换器31a对地址进行转换时,经转换的地址是VA(4)=8。
其结果是,能够读出图13中的粗线指示的数据。换句话说,读出双端口RAM模块RAM(0)的块00和双端口RAM模块RAM(1)的块01中的顺序的16字节数据,而另外,读出双端口RAM模块RAM(2)的块00和双端口RAM模块RAM(3)的块01中的顺序的16字节数据。
这时,一旦第一地址生成器30a生成指定双端口RAM模块RAM(1)的块01的地址,则第一地址转换器31a对地址进行转换,以获得指定双端口RAM模块RAM(0)的块00的地址。例如,在生成的地址是[0]的情况下,经转换的地址变为[8]。此外,一旦第二地址生成器30b生成指定双端口RAM模块RAM(3)的块01的地址,则第二地址转换器31b对地址进行转换,以获得指定双端口RAM模块RAM(2)的块00的地址。这样,能够从一级数据高速缓冲存储器4中读出路(0)和路(1)的块00和01。
这里,图13中的“地址=000”等同于图11中的VA(1)和VA(3)。这类似地适用于之后的附图。
还考虑将16字节的数据加载到第一输出端口寄存器23a中VA=0x008的情况。在这种情况下,由第一地址生成器30a生成的地址是VA(1)=000,而由第一地址转换器31a输出的经转换的地址是VA(3)=001,如图11所示。
其结果是,能够读出图14中的粗线指示的数据。换句话说,读出双端口RAM模块RAM(1)的块01和双端口RAM模块RAM(0)的块02中的顺序的16字节数据,而另外,读出双端口RAM模块RAM(3)的块01和双端口RAM模块RAM(2)的块02中的顺序的16字节数据。
这时,一旦第一地址生成器30a生成指定双端口RAM模块RAM(1)的块01的地址,则第一地址转换器31a对地址进行转换,以获得指定双端口RAM模块RAM(0)的块02的地址。此外,一旦第二地址生成器30b生成指定双端口RAM模块RAM(3)的块01的地址,则第二地址转换器31b对地址进行转换,以获得指定双端口RAM模块RAM(2)的块02的地址。这样,能够从一级数据高速缓冲存储器4中读出路(0)和路(1)的块01和02。
另外,考虑将16字节的数据加载到第一输出端口寄存器23a中VA=0x018的情况。在这种情况下,由第一地址生成器30a生成的地址是VA(1)=001,而由第一地址转换器31a输出的经转换的地址是VA(3)=002,如图11所示。
其结果是,能够读出图15中的粗线指示的数据。换句话说,读出双端口RAM模块RAM(1)的块03和双端口RAM模块RAM(0)的块04中的顺序的16字节数据,而另外,读出双端口RAM模块RAM(3)的块03和双端口RAM模块RAM(2)的块04中的顺序的16字节数据。
这时,一旦第一地址生成器30a生成指定与双端口RAM模块RAM(1)的路(0)相对应的块03的地址,则第一地址转换器31a对地址进行转换,以获得指定与双端口RAM模块RAM(0)的路(1)相对应的块04的地址。此外,一旦第二地址生成器30b生成指定与双端口RAM模块RAM(3)的路(1)相对应的块03的地址,则第二地址转换器31b对地址进行转换,以获得指定与双端口RAM模块RAM(2)的路(0)相对应的块04的地址。这样,能够从一级数据高速缓冲存储器4中读出路(0)和路(1)的块03和04。
以这种方式,将给定数据大小的数据(16字节的数据)分开,并将其写入不同双端口RAM模块上的连续块。随后,能够使用地址生成器30a和30b生成的地址来读出给定数据大小的数据的各部分,而另外,能够使用地址转换器31a和31b输出的经转换的地址来读出给定数据大小的数据的剩余部分。因此,即使在通过遵循SIMD指令来加载顺序的16字节数据的情况下,也能够分别通过设置有具有8字节的块配置的存储器单元22的两个双端口RAM模块读出顺序的16字节数据。
接下来,描述如下配置,其中,从一级数据高速缓冲存储器4读出16字节的数据,并通过遵循SIMD指令将该数据输出到执行/指令单元11。
图16示出了如下配置,其中,选择按块编号划界的8字节单元数据,并将两组8字节数据顺序输出到执行/指令单元11。高速缓存***设置有选择器41a至41h,其将从双端口RAM模块RAM(0)至RAM(3)中的每个中的第一输出端口寄存器23a和第二输出端口寄存器23b输出的8字节数据作为输入接受。基于从第一地址生成器30a、第二地址生成器30b、第一地址转换器31a和第二地址转换器31b提供的地址,选择器41a至41h选择从连接到选择器41a至41h的双端口RAM输出的某个8字节数据。随后,选择器43a至43d选择存储在双端口RAM的存储器单元22中的8字节数据,并将其作为16字节数据顺序输出到执行/指令单元11。
更具体地,双端口RAM模块RAM(0)和RAM(1)中的第一输出端口寄存器23a分别连接到两个选择器41a和41b。类似地,双端口RAM模块RAM(2)和RAM(3)中的第一输出端口寄存器23a分别连接到两个选择器41c和41d。相似地,双端口RAM模块RAM(0)和RAM(1)中的第二输出端口寄存器23b分别连接到两个选择器41e和41f,而双端口RAM模块RAM(2)和RAM(3)中的第二输出端口寄存器23b分别连接到两个选择器41g和41h。
缓冲器42a连接到选择器41a,缓冲器42c连接到选择器41b,缓冲器42b连接到选择器41c,缓冲器42d连接到选择器41d。另外,缓冲器42e连接到选择器41e,缓冲器42g连接到选择器41f,缓冲器42f连接到选择器41g,缓冲器42h连接到选择器41h。
存储在缓冲器42a和缓冲器42b中的各组8字节数据由选择器43a以该顺序选择,并作为16字节数据经由数据输出单元44a提供到执行/指令单元11。类似地,分别存储在缓冲器42c和缓冲器42d中的8字节数据被选择器43b选择,并被提供到数据输出单元44b。
数据输出单元44b按照顺序的次序重新设置从选择器43b输出的数据,并将结果作为16字节数据提供到执行/指令单元11。类似地,将分别存储在缓冲器42e和缓冲器42f中的8字节数据作为16字节数据经由选择器43c和数据输出单元44c提供到执行/指令单元11。将分别存储在缓冲器42g和缓冲器42h中的8字节数据作为16字节数据经由选择器43d和数据输出单元44d提供到执行/指令单元11。
通过以这种方式配置高速缓存***,由选择器41a至41h选择分别从双端口RAM模块RAM(0)至RAM(3)的第一输出端口寄存器23a和第二输出端口寄存器23b输出的8字节数据。另外,由选择器43a至43d选择属于同一路、但是从不同的双端口RAM模块输出的数据。
这样,选择器41a和41h各自选择从双端口RAM模块RAM(0)或RAM(1)的第一输出端口寄存器23a输出的8字节数据。类似地,选择器41c和41d各自选择从双端口RAM模块RAM(2)或RAM(3)的第一输出端口寄存器23a输出的8字节数据。
来自双端口RAM模块RAM(0)或RAM(1)的数据被存储在缓冲器42a中,而来自双端口RAM模块RAM(2)或RAM(3)的数据被存储在缓冲器42b中。
选择器43a选择以下数据之一:从选择器41a输出的来自双端口RAM模块RAM(0)或RAM(1)的8字节数据;或者从选择器41c输出的来自双端口RAM模块RAM(2)或RAM(3)的8字节数据。连接到缓冲器42c和缓冲器42d的选择器43b与选择器43a类似地工作。另外,除了连接到各个双端口RAM模块的第二输出端口寄存器之外,选择器41e至41h基本上与选择器41a至41d类似地工作。选择器43c和选择器43d与选择器43a和43b类似地工作。
以这种方式,通过从不同的双端口RAM模块20读出8字节数据,实施例的高速缓存***能够生成要遵循SIMD指令而读出的16字节数据,然后将该数据输出到执行/指令单元11。另外,即使16字节数据被跨越不同路地存储,该高速缓存***也能够从所有双端口RAM模块的输出端口读出8字节数据,并且根据指定的地址选择8字节数据。这样,与在确定要读出的数据的路之后基于每个路选择数据的情况相比,该高速缓存***能够通过简单的模式布局输出16字节数据。
另外,使数据写入一级数据高速缓冲存储器4并输出到执行/指令单元11的配置也可以与图17所示的类似。
在包括图17所示的配置的高速缓存***中,以块为单元对存储在双端口RAM的存储器单元22中的单元数据进行划界,按照路区分各个块。为了根据SIMD指令将16字节数据输出到执行/指令单元11,图17所示的高速缓存***设置有选择器41a至41h和43a至43d。
基于从第一地址生成器30a、第二地址生成器30b、第一地址转换器31a和第二地址转换器31b提供的地址,选择器41a至41h分别选择从双端口RAM模块RAM(0)至RAM(3)的第一输出端口寄存器(在图17中标记为“1”)输出的8字节数据。随后,选择器43a至43d输入由选择器41a至41h选择的8字节数据,8字节数据的组数等于路数,并且根据路选择指令分别选择8字节数据中的一些。随后,将存储在由选择器43a至43d选择的双端口RAM的存储器单元22中的8字节数据作为16字节数据被顺序输出到执行/指令单元11。
如图17所示,双端口RAM模块RAM(0)至RAM(3)中的第一输出端口寄存器连接到选择器41a至41d。将从第一输出端口寄存器23a输出的四组数据提供到用于进行数据选择的四个选择器41a至41d。选择器41a至41d分别连接到用于进行路选择的8字节缓冲器42a至42d。通过遵循从执行/指令单元11提供的命令,选择器41a至41d分别取出从连接到选择器41a至41d的双端口RAM模块RAM(0)至RAM(3)的第一输出端口寄存器输出的数据中的一些。随后,从选择器41a至41d分别输出取出的数据,并将其存储在连接到选择器41a至41d的缓冲器42a至42d。
此外,选择器41e至41h连接到双端口RAM模块RAM(0)至RAM(3)的第二输出端口寄存器(在图17中标记为“2”)。将从四个第二输出端口寄存器输出的四组数据提供到用于进行数据选择的四个选择器41e至41h。选择器41e至41d分别连接到用于进行路选择的8字节缓冲器42e至42h。通过遵循从执行/指令单元11提供的命令,选择器41e至41h分别取出从连接到选择器41e至41h的双端口RAM模块RAM(0)至RAM(3)的第二输出端口寄存器输出的数据中的一些。随后,从选择器41e至41h分别输出取出的数据,并将其存储在连接到选择器41e至41h的缓冲器42e至42h中。
缓冲器42a至42d连接到用于从路(0)和路(1)中选择路的选择器43a和43b。选择器43a遵循从执行/指令单元11提供的路选择命令,并且从缓冲器42a或42b取出数据。选择器43b遵循从执行/指令单元11提供的路选择命令,并且从缓冲器42c或42d取出数据。将由选择器43a和43b取出的数据作为取得数据经由数据输出单元44a和44b提供到执行/指令单元11。
缓冲器42e至42h连接到用于从路(0)和路(1)中选择路的选择器43c和43d。选择器43c遵循从执行/指令单元11提供的路选择命令,并且从缓冲器42e或42f取出数据。选择器43d遵循从执行/指令单元11提供的路选择命令,并且从缓冲器42g或42h取出数据。将由选择器43c和43d取出的数据作为取得数据经由数据输出单元44c和44d提供到执行/指令单元11。
以这种方式,通过从不同的双端口RAM模块20读出8字节数据,高速缓存***能够生成要遵循SIMD指令而读出的16字节数据,然后将该数据输出到执行/指令单元11。另外,即使16字节数据跨越不同路地存储,该高速缓存***也能够从所有双端口RAM模块的输出端口读出8字节数据,并且根据指定的地址选择8字节数据。这样,与在确定要读出的数据的路之后基于每路选择数据的情况相比,该高速缓存***能够通过简单的模式布局输出16字节数据。
这里描述的所有示例和条件性语言旨在教导的目的,以帮助读者理解本发明以及由发明人贡献的概念以增进本技术,并且被解释为不限于这些具体描述的示例和条件。虽然详细描述了本发明的实施例,但是应当理解,可以对其进行各种改变、替换和更改,而不脱离本发明的精神和范围。
Claims (4)
1.一种高速缓存***,包括:
计算单元;
一级高速缓冲存储器,其被配置为在所述计算单元之间输入和输出数据;其中,
所述一级高速缓冲存储器包括多端口存储器单元,每个多端口存储器单元包括:
存储单元,其存储具有第一数据大小的单元数据;
写入单元,其将经由输入端口寄存器顺序输入的多个单元数据同时写入到所述存储单元的连续位置;
输出单元,其读出由所述写入单元写入所述存储单元的所述多个单元数据,并将其输出到多个输出端口寄存器;以及
二级高速缓冲存储器,其被配置为在所述一级高速缓冲存储器之间输入和输出数据,
其中,当将具有作为第一数据大小的任意多倍的第二数据大小并且被分割为单元数据的数据写入所述一级高速缓冲存储器中时,通过进行第一写入操作和第二写入操作将数据存储在不同的多端口存储器单元中,所述第一写入操作将顺序的单元数据写入到所述多端口存储器单元的子集中的所述输入端口寄存器中,所述第二写入操作将所述顺序的单元数据写入到所述多端口存储器单元的另一子集中的所述输入端口寄存器中;并且
当从所述一级高速缓冲存储器读出数据时,通过进行第一读取操作和第二读取操作,从不同的多端口存储器单元读出数据,所述第一读取操作从所述多端口存储器单元的子集的所述输出端口寄存器读取顺序的单元数据,所述第二读取操作从所述多端口存储器单元的剩余子集的所述输出端口寄存器读取顺序的单元数据。
2.根据权利要求1所述的高速缓存***,还包括:
地址生成单元,其生成用于读出所述第二数据大小的数据的地址,并且生成用于读出存储在所述多端口存储器单元中的单元数据的第一地址;以及
地址转换单元,其转换由所述地址生成单元生成的地址,并且将由所述地址生成单元生成的所述第一地址转换为用于读出接在所述多端口存储器单元中存储的所述单元数据之后的单元数据的第二地址。
3.根据权利要求2所述的高速缓存***,还包括:
选择器,其基于从所述地址生成单元或者所述地址转换单元提供的地址选择从各个多端口存储器单元中的输出端口输出的任意单元数据;
其中,将存储在所述多端口存储器单元中的、由所述选择器选择的所述单元数据以所述第二数据大小为单元顺序输出到所述计算单元。
4.根据权利要求2所述的高速缓存***,还包括:
第一选择器,其基于从所述地址生成单元或所述地址转换单元提供的地址选择从各个多端口存储器单元中的输出端口输出的特定单元数据;以及
第二选择器,其根据路选择指令选择与由任意所述第一选择器选择的路数相等的特定单元数据;
其中,将存储在所述多端口存储器单元中的、由所述第二选择器选择的所述单元数据以所述第二数据大小为单元顺序输出到所述计算单元。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010-027111 | 2010-02-10 | ||
JP2010027111A JP5493954B2 (ja) | 2010-02-10 | 2010-02-10 | キャッシュシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102156676A CN102156676A (zh) | 2011-08-17 |
CN102156676B true CN102156676B (zh) | 2014-10-08 |
Family
ID=44021964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110037745.1A Expired - Fee Related CN102156676B (zh) | 2010-02-10 | 2011-02-10 | 高速缓存*** |
Country Status (5)
Country | Link |
---|---|
US (1) | US8806102B2 (zh) |
EP (1) | EP2354954A1 (zh) |
JP (1) | JP5493954B2 (zh) |
KR (1) | KR101234183B1 (zh) |
CN (1) | CN102156676B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20180031412A (ko) * | 2016-09-20 | 2018-03-28 | 삼성전자주식회사 | 메모리 컨트롤러의 동작 방법과, 이를 포함하는 장치들의 동작 방법들 |
KR102490104B1 (ko) * | 2017-10-30 | 2023-01-19 | 삼성전자주식회사 | 데이터 보호를 사용하는 인-밴드 메모리에 액세스하기 위한 장치 및 방법 |
US11422702B2 (en) * | 2020-08-26 | 2022-08-23 | Dell Products, L.P. | Managing utilization of storage class memory (SCM) resources |
CN112905954A (zh) * | 2020-12-28 | 2021-06-04 | 北京计算机技术及应用研究所 | 一种利用fpga bram的cnn模型卷积运算加速计算方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5751989A (en) * | 1993-09-30 | 1998-05-12 | Apple Computer, Inc. | System for decentralizing backing store control of virtual memory in a computer |
CN1221150A (zh) * | 1997-10-08 | 1999-06-30 | 戴尔美国公司 | 模拟计算机存储装置的方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4905188A (en) | 1988-02-22 | 1990-02-27 | International Business Machines Corporation | Functional cache memory chip architecture for improved cache access |
US5442770A (en) | 1989-01-24 | 1995-08-15 | Nec Electronics, Inc. | Triple port cache memory |
JPH0437935A (ja) | 1990-06-01 | 1992-02-07 | Hitachi Ltd | キャッシュメモリを有する計算機 |
US5924117A (en) * | 1996-12-16 | 1999-07-13 | International Business Machines Corporation | Multi-ported and interleaved cache memory supporting multiple simultaneous accesses thereto |
JP2002278836A (ja) * | 2001-03-15 | 2002-09-27 | Oki Electric Ind Co Ltd | キャッシュメモリ |
JP4164371B2 (ja) * | 2003-01-16 | 2008-10-15 | キヤノン株式会社 | データ処理装置、データ処理方法、プログラム及び記憶媒体 |
US7219185B2 (en) * | 2004-04-22 | 2007-05-15 | International Business Machines Corporation | Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache |
JP4517741B2 (ja) * | 2004-06-23 | 2010-08-04 | 富士ゼロックス株式会社 | 記憶装置 |
JP4336848B2 (ja) * | 2004-11-10 | 2009-09-30 | 日本電気株式会社 | マルチポートキャッシュメモリ及びマルチポートキャッシュメモリのアクセス制御方式 |
-
2010
- 2010-02-10 JP JP2010027111A patent/JP5493954B2/ja not_active Expired - Fee Related
-
2011
- 2011-01-24 KR KR1020110006650A patent/KR101234183B1/ko not_active IP Right Cessation
- 2011-01-25 US US13/012,985 patent/US8806102B2/en not_active Expired - Fee Related
- 2011-02-07 EP EP11153588A patent/EP2354954A1/en not_active Withdrawn
- 2011-02-10 CN CN201110037745.1A patent/CN102156676B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5751989A (en) * | 1993-09-30 | 1998-05-12 | Apple Computer, Inc. | System for decentralizing backing store control of virtual memory in a computer |
CN1221150A (zh) * | 1997-10-08 | 1999-06-30 | 戴尔美国公司 | 模拟计算机存储装置的方法 |
Also Published As
Publication number | Publication date |
---|---|
US8806102B2 (en) | 2014-08-12 |
JP5493954B2 (ja) | 2014-05-14 |
JP2011164948A (ja) | 2011-08-25 |
CN102156676A (zh) | 2011-08-17 |
US20110197013A1 (en) | 2011-08-11 |
KR20110093625A (ko) | 2011-08-18 |
KR101234183B1 (ko) | 2013-02-18 |
EP2354954A1 (en) | 2011-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7694077B2 (en) | Multi-port integrated cache | |
CN102110058B (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
US6594728B1 (en) | Cache memory with dual-way arrays and multiplexed parallel output | |
US7836253B2 (en) | Cache memory having pipeline structure and method for controlling the same | |
TWI451330B (zh) | 快取記憶體系統以及快取資料取代之方法 | |
CN103810111A (zh) | 有源存储器件中的地址生成的方法及其处理元件 | |
US8145804B2 (en) | Systems and methods for transferring data to maintain preferred slot positions in a bi-endian processor | |
EP1087296A2 (en) | Word width selection for SRAM cache | |
CN102156676B (zh) | 高速缓存*** | |
CN107408076B (zh) | 数据处理装置 | |
US20160217079A1 (en) | High-Performance Instruction Cache System and Method | |
CN108139989B (zh) | 配备有存储器中的处理和窄访问端口的计算机设备 | |
JPH0792790B2 (ja) | ベクトル並列計算機 | |
CN109614145A (zh) | 一种处理器核心结构及数据访存方法 | |
EP1807767A1 (en) | A virtual address cache and method for sharing data stored in a virtual address cache | |
US20130332665A1 (en) | Memory with bank-conflict-resolution (bcr) module including cache | |
JPH0282330A (ja) | ムーブアウト・システム | |
US6704820B1 (en) | Unified cache port consolidation | |
CN102411557A (zh) | 多粒度并行fft计算装置 | |
US9606917B2 (en) | Arithmetic processing apparatus and method for controlling same | |
JPH06242925A (ja) | ソート処理装置 | |
JPS6194159A (ja) | メモリ装置 | |
US8316215B2 (en) | Vector processor with plural arithmetic units for processing a vector data string divided into plural register banks accessed by read pointers starting at different positions | |
KR20040007343A (ko) | 캐시 메모리 및 그 제어 방법 | |
US20200264803A1 (en) | Memory array element sparing |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141008 Termination date: 20150210 |
|
EXPY | Termination of patent right or utility model |