基于访存历史学习的处理器Cache写失效处理方法转让专利

申请号 : CN201010034334.2

文献号 : CN101751245B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 汪文祥李祖松郝守青徐翠萍

申请人 : 龙芯中科技术有限公司

摘要 :

基于访存历史学习的处理器Cache写失效处理方法,包括以下步骤:(1)Cache失效预处理步骤;(2)Cache写分配策略设定步骤:设定每组的立即写分配或延迟写分配策略;(3)对于属于立即写分配的组,立即访问内存对应的Cache块,将该组缺失的数据读回,并与该组的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中;对于属于延迟写分配的组,收集地址落在该组内的Cache写失效操作的待写入数据,当某组内的待写入数据收集满整个Cache块时,将该组的待写入数据直接写入对应的Cache块中。本发明在对Cache写失效的处理过程中,可以减少大量不必要的从内存读取Cache块的操作,从而减少了处理器带宽浪费,并且进一步提升应用程序的性能。

权利要求 :

1.一种基于访存历史学习的处理器Cache写失效处理方法,其特征在于包括以下步骤:(1)Cache失效预处理步骤:根据Cache命中判定逻辑的结果对访存操作进行初步处理,整理出Cache失效操作类型、失效地址和待写入数据,并根据Cache失效操作的地址对Cache失效操作进行分组;

(2)Cache写分配策略设定步骤:设定每组的写分配策略,所述写分配策略包括立即写分配和延迟写分配;

(3)Cache写分配策略执行步骤:

对于属于所述立即写分配策略的组,立即访问内存对应的Cache块,将该组缺失的数据读回,并与该组的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中;

对于属于所述延迟写分配策略的组,收集地址落在该组内的Cache写失效操作的待写入数据,当某组内的待写入数据收集满整个Cache块时,将该组的待写入数据直接写入对应的Cache块中;

在所述步骤(2)中,当属于延迟写分配的组的数量与Cache块总数的比例超过一设定的阈值时,从延迟写分配的组中挑选出一些组,将其写分配策略设置为立即写分配;或者,在所述步骤(2)中,当属于延迟写分配的组占整个Cache失效预处理缓存空间的比例超过一设定的阈值时,从延迟写分配的组中挑选出一些组,将其写分配策略设置为立即写分配。

2.根据权利要求1所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:所述步骤(1)中以Cache块大小为单位对失效操作进行分组,根据地址将Cache失效操作分入对应的Cache块的组中,每个组通过一唯一标号区分;

所述唯一标号为Cache块的索引。

3.根据权利要求1至2中任一权利要求所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:在所述步骤(1)中,对于任一Cache写失效操作,判断其地址,若其落在任一已有分组上,则将该Cache写失效操作对应的待写入数据写入该分组对应的地址中;若其不落在任何已有分组上,则建立针对该Cache失效操作的分组,在所述步骤(2)中设定该组的写分配策略为延迟写分配。

4.根据权利要求1所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:对于每个立即写分配组和每个延迟写分配组均暂时存在缓冲中。

5.根据权利要求4所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:在所述步骤(1)中,对于任一Cache读失效操作,判断其地址,若其落在任一已有分组上,在所述步骤(2)中设定该组的写分配策略为立即写分配;若其不落在任何已有分组上,则建立针对该Cache读失效操作的分组,在所述步骤(2)中设定该组的写分配策略为立即写分配。

6.根据权利要求5所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于具体包括以下步骤:步骤(10),Cache失效操作进入准备;

步骤(11),等待新的Cache失效;

步骤(12),判断是否存在新的Cache失效,如果是,进入步骤(13),如果否,转步骤(11);

步骤(13),加入新的Cache失效操作;

步骤(14),判断新加入的Cache失效操作,判断其地址是否落在已有分组上,如果是,转步骤(20),如果否,进入步骤(15);

步骤(15),判断该Cache失效操作是否为Cache读失效操作,如果是,进入步骤(16),如果否,转步骤(17);

步骤(16),建立针对该Cache失效操作的分组,设定该组的写分配策略为立即写分配,立即访存取回数据,转步骤(11);

步骤(17),建立针对该Cache失效操作的分组,设定该组的写分配策略为延迟写分配;

步骤(18),判断延迟写分配的组比例是否超过阈值,如果是,进入步骤(19),如果否,转步骤(11);

步骤(19),选择部分组,设定其写分配策略为立即写分配,转步骤(22);

步骤(20),判断该Cache失效操作是否为Cache写失效操作,如果是,转步骤(23),如果否,说明该Cache失效操作为落入已有分组的Cache读失效操作,进入步骤(21);

步骤(21),设定该组的写分配策略为立即写分配;

步骤(22),立即访问内存对应的Cache块,将该组缺失的数据读回,并与该组的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中,转步骤(11);

步骤(23),将该Cache失效操作的待写入数据写入该分组对应的地址中;

步骤(24),判断待写入数据是否收集满整个Cache块,如果是,则进入步骤(25);如果否,转步骤(11);

步骤(25),将该组的待写入数据直接写入对应的Cache块中,转步骤(11)。

7.根据权利要求6所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:采用访存失效队列对组进行管理;

访存失效队列的每一项为一分组,并对应一个Cache块;每一项具有地址域、数据域和掩码字节屏蔽域,其中:地址域,用于记录Cache块索引;

数据域,与处理器中Cache块的大小一致,用于记录Cache失效操作的待写入数据,且记录的位置与该Cache失效操作的地址对应;

掩码字节屏蔽域,用于标识数据域中的每一字节是否被写入待写入的数据。

8.根据权利要求7所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:对于任一Cache写失效操作,判断其地址,若其落在任一已有项的地址域范围内,则将该Cache写失效操作对应的待写入数据写入该项对应的数据域中,对应地修改其掩码字节屏蔽域;若其不落在任何已有项的地址域范围内,则在访存失效队列中分配针对该Cache失效操作的新的项,对应地修改该新项的掩码字节屏蔽域。

9.根据权利要求8所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:在访存失效队列中为Cache失效操作分配新的项时,若访存失效队列尚留有空项,则立即分配;否则延迟该Cache失效操作的进入访存失效队列中的操作,并阻塞后续的分配新的项操作,直至访存失效队列出现空项。

10.根据权利要求9所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:在访存失效队列中新分配的项时,设置该新分配的项为延迟写分配,并将其它延迟写分配的项修改为立即写分配。

11.根据权利要求10所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:访存失效队列中为立即写分配的项,立即访问内存对应的Cache块,将其数据域缺失的数据读回,与该数据域的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中;

当访存失效队列中为延迟写分配的项的数据域收集满整个Cache块时,该项立即发起Cache填充操作请求,当Cache响应该请求后,该项的数据域的内容写入对应的Cache块中。

12.根据权利要求11所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:对于属于立即写分配的组,在完成立即写分配操作后,清空其对应的项。

13.根据权利要求7所述的基于访存历史学习的处理器Cache写失效处理方法,其特征在于:访存失效队列中每一项还包括延迟域,延迟域用于标识该项所采用的Cache写分配策略;

对于地址相同的多次Cache写失效操作,访存失效队列的数据域只保存其最新写入的待写入数据。

说明书 :

基于访存历史学习的处理器Cache写失效处理方法

技术领域

[0001] 本发明属于计算机处理器技术领域,更具体来说,涉及处理器高速缓存(Cache)写失效处理方法。

背景技术

[0002] 计算机体系结构设计领域为弥补处理器与内存的性能差距提出了许多访存优化技术,包括非阻塞Cache、预取、访存指令相关预测等,这些技术重点多关注如何降低或容忍访存的延时,但通常是以牺牲访存带宽为代价。在同时多线程、片上多核的处理器结构中,处理器所能提供的有效带宽成为影响多线程多核对处理器加速程度的重要因素。因此,仅从延时入手优化处理器的访存性能是不够的,还必须兼顾带宽的优化。带宽优化技术是现代处理器性能提高的关键。
[0003] 带宽优化技术主要有两种,一种是增加处理器的传输带宽的峰值;另一种是减少处理器不必要的数据传输,提高带宽利用率。处理器中写操作与读操作在访存性质上有所区别,写操作并不需要被操作地址原先的值。因此,当存数指令访问Cache不命中时,对Cache写失效的处理策略进行优化,减少不必要的数据传输,能够有效提高处理器带宽利用率。
[0004] 目前针对Cache写失效处理的策略主要包括写分配(write allocate)策略、非写分配(non-write allocate)策略以及对这两种策略的改进。不同的应用其访存特性也各不相同,固定的写分配策略难以同时高效支持这些不同的访存特性。因此需要有新的机制能够有效区分这些不同的访存特性,对不同类别以及调整写分配策略,以降低处理器带宽利用率,提升程序性能。

发明内容

[0005] 本发明的目的在于,提供一种基于访存历史学习的处理器Cache写失效处理方法,以充分利用了不同写分配策略各自的优点,降低应用的内存带宽需求,提高程序性能。
[0006] 为实现上述目的,本发明采用如下技术方案:
[0007] 一种基于访存历史学习的处理器Cache写失效处理方法,包括以下步骤:
[0008] (1)Cache失效预处理步骤:根据Cache命中判定逻辑的结果对访存操作进行初步处理,整理出Cache失效操作类型、失效地址和待写入数据,并根据Cache失效操作的地址对Cache失效操作进行分组;
[0009] (2)Cache写分配策略设定步骤:设定每组的写分配策略,所述写分配策略包括立即写分配和延迟写分配;
[0010] (3)Cache写分配策略执行步骤:
[0011] 对于属于立即写分配的组,立即访问内存对应的Cache块,将该组缺失的数据读回,并与该组的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中;
[0012] 对于属于延迟写分配的组,收集地址落在该组内的Cache写失效操作的待写入数据,当某组内的待写入数据收集满整个Cache块时,将该组的待写入数据直接写入对应的Cache块中。
[0013] 进一步地,所述步骤(1)中以Cache块大小为单位对失效操作进行分组,将根据地址将Cache失效操作分入对应的Cache块的组中,每个组通过一唯一标号区分。
[0014] 进一步地,所述唯一标号为Cache块的索引。
[0015] 进一步地,在所述步骤(1)中,对于任一Cache写失效操作,判断其地址,若其落在任一已有分组上,则将该Cache写失效操作对应的待写入数据写入该分组对应的地址中;若其不落在任何已有分组上,则建立针对该Cache失效操作的分组,在所述步骤(2)中设定该组的写分配策略为延迟写分配。
[0016] 进一步地,在所述步骤(2)中,当属于延迟写分配的组的数量与Cache块总数的比例超过一设定的阈值时,从延迟写分配的组中挑选出一些组,将其写分配策略设置为立即写分配。
[0017] 进一步地,在所述步骤(2)中,当属于延迟写分配的组的占整个Cache失效预处理缓存空间的比例超过一设定的阈值时,从延迟写分配的组中挑选出一些组,将其写分配策略设置为立即写分配。
[0018] 进一步地,对于每个组都暂时存在缓冲中。
[0019] 进一步地,在所述步骤(1)中,对于任一Cache读失效操作,判断其地址,若其落在任一已有分组上,在所述步骤(2)中设定该组的写分配策略为立即写分配;若其不落在任何已有分组上,则建立针对该Cache读失效操作的分组,在所述步骤(2)中设定该组的写分配策略为立即写分配。
[0020] 进一步地,采用访存失效队列对组进行管理。
[0021] 进一步地,访存失效队列的每一项为一分组,并对应一个Cache块;每一项具有地址域、数据域和掩码字节屏蔽域,其中:
[0022] 地址域,用于记录Cache块索引;
[0023] 数据域,与处理器中Cache块的大小一致,用于记录Cache失效操作的待写入数据,且记录的位置与该Cache失效操作的地址对应;
[0024] 掩码字节屏蔽域,用于标识数据域中的每一字节是否被写入待写入的数据。
[0025] 进一步地,对于属于立即写分配的组,在完成立即写分配操作后,清空其对应的项。
[0026] 进一步地,对于任一Cache写失效操作,判断其地址,若其落在任一已有项的地址域范围内,则将该Cache写失效操作对应的待写入数据写入该项对应的数据域中,对应地修改其掩码字节屏蔽域;若其不落在任何已有项的地址域范围内,则在访存失效队列中分配针对该Cache失效操作的新的项,对应地修改该新项的掩码字节屏蔽域。
[0027] 进一步地,在访存失效队列中为Cache失效操作分配新的项时,若访存失效队列尚留有空项,则立即分配;否则延迟该Cache失效操作的进入访存失效队列中的操作,并阻塞后续的分配新的项操作,直至访存失效队列出现空项。
[0028] 进一步地,在访存失效队列中新分配的项时,设置该新分配的项为延迟写分配,并将其它延迟写分配的项修改为立即写分配。
[0029] 进一步地,访存失效队列中每一项还包括延迟域,延迟域用于标识该项所采用的Cache写分配策略。
[0030] 进一步地,对于地址相同的多次Cache写失效操作,访存失效队列的数据域只保存其最新写入的待写入数据。
[0031] 进一步地,访存失效队列中为立即写分配的项,立即访问内存对应的Cache块,将其数据域缺失的数据读回,与该数据域的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中。
[0032] 进一步地,当访存失效队列中为延迟写分配的项的数据域收集满整个Cache块时,该项立即发起Cache填充操作请求,当Cache响应该请求后,该项的数据域的内容写入对应的Cache块中。
[0033] 本发明在对Cache写失效的处理过程中,可以减少大量不必要的从内存读取Cache块的操作,从而减少了处理器带宽浪费,并且进一步提升应用程序的性能。
[0034] 以下结合附图及实施例进一步说明本发明。

附图说明

[0035] 图1为本发明基于访存历史学习的处理器Cache写失效处理方法实施例流程图;
[0036] 图2为本发明基于访存历史学习的处理器Cache写失效处理方法实例流程图。

具体实施方式

[0037] 如图1所示,一种基于访存历史学习的处理器Cache写失效处理方法,包括步骤:
[0038] (1)Cache失效预处理步骤1:
[0039] 根据Cache命中判定逻辑的结果对访存操作进行初步处理,整理出Cache失效操作类型、失效地址和待写入数据,并根据Cache失效操作的地址对Cache失效操作进行分组。其中,失效操作类型有读失效操作和写失效操作;失效地址为Cache失效操作的地址,分组的依据为失效地址。本实施例中,以Cache块大小为单位对失效操作进行分组,将失效地址分入对应的Cache块分组中。每个组通过一唯一标号区分。本实施例中该唯一标号为Cache块索引。
[0040] (2)Cache写分配策略设定步骤2:
[0041] 设定每组的写分配策略,所述写分配策略包括立即写分配和延迟写分配;写分配策略设定的依据可以是失效操作类型、延迟写分配的组所占的比例统计等。具体的写分配策略可以根据处理器性能、Cache容量等情况进行灵活选择设定;
[0042] (3)Cache写分配策略执行步骤3:
[0043] 对于属于立即写分配的组,立即访问内存对应的Cache块,将该组缺失的数据读回,并与该组的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中;
[0044] 对于属于延迟写分配的组,并不立即访问内存读取缺失的Cache块的数据,而是尽可能的延迟该操作,以尽可能多收集地址落在该组内的Cache写失效操作的待写入数据,当某组内的待写入数据收集满整个Cache块时,将该组的待写入数据直接写入对应的Cache块中。在某组收集满整个Cache块的数据的过程中,对于写失效操作,除要求其地址落在同一Cache块地址范围内,无其它特殊限定。鉴于大量程序行为的统计,后续Cache写操作会以较大概率落在当前写失效同一Cache块地址范围内,故延迟该写失效操作直至收集满整个Cache块,这样可减少大量不必要的从内存读取Cache块的操作,减少了处理器带宽浪费,提升应用程序的性能。
[0045] 进一步地,在所述步骤(1)中,对于任一Cache写失效操作,判断其地址,若其落在任一已有分组上,则将该Cache写失效操作对应的待写入数据写入该分组对应的地址中,在所述步骤(2),不改变该组的写分配策略;若其不落在任何已有分组上,则建立针对该Cache失效操作的分组,在所述步骤(2)中设定该组的写分配策略为延迟写分配。
[0046] 进一步地,在所述步骤(2)中,当属于延迟写分配的组的数量与Cache块总数的比例超过一设定的阈值时,从延迟写分配的组中随机或顺序挑选出一些组,将其写分配策略设置为立即写分配。
[0047] 进一步地,对于每组,无论其写分配策略是立即写分配还是延迟写分配,都暂时存在缓冲中。
[0048] 进一步地,在所述步骤(2)中,当属于延迟写分配的组的占整个Cache失效预处理缓存空间的比例超过一设定的阈值时,从延迟写分配的组中随机或顺序挑选出一些组,将其写分配策略设置为立即写分配。
[0049] 进一步地,在所述步骤(1)中,对于任一Cache读失效操作,判断其地址,若其落在任一已有分组上,在所述步骤(2)中设定该组的写分配策略为立即写分配;若其不落在任何已有分组上,则建立针对该Cache读失效操作的分组,在所述步骤(2)中设定该组的写分配策略为立即写分配。
[0050] 上述步骤(1)至步骤(3)中,cache失效分为是读失效和写失效两种情况,根据落在和不落在已有分组上又进一步分为如下四种组合情况:
[0051] i)为读失效但不落在已有分组上:建立针对该失效的分组,其分配策略为立即写分配,立即访存取回数据;
[0052] ii)为读失效且落在已有分组上:将对应组的写分配策略改为立即写分配,立即访存取回数据;
[0053] iii)为写失效但不落在已有分组上:建立针对该失效的分组,确定其写分配策略为延迟写分配,暂缓其访存取回数据;同时对“延迟写分配”策略分组的比例进行判断,若超过一阈值,则在已有的延迟写分配策略分组中选取一组,将其写分配策略改为立即写分配;
[0054] iv)为写失效且落在已有分组上:保持对应组的写分配策略不变,将失效的写操作数据记录至对应组的缓冲中,当待写入数据收集满整个Cache块时,将其写分配策略改为立即写分配。
[0055] 针对上述四种组合情况,本实施例提供如图2所示的一个实例,应当理解的是,该流程图实例仅仅是为了更好地理解本发明并据以实施而提供的,并非对本发明的限定。本领域技术人员根据上述步骤(1)至步骤(3)的技术方案可以设计出多种等同变换,这些等同变换均在本发明的范围之内。该实例具体描述如下:
[0056] 步骤10,Cache失效操作进入准备;
[0057] 步骤11,等待新的Cache失效;
[0058] 步骤12,判断是否存在新的Cache失效,如果是,进入步骤13,如果否,转步骤11;
[0059] 步骤13,加入新的Cache失效操作;
[0060] 步骤14,判断新加入的Cache失效操作,判断其地址是否落在已有分组上,如果是,转步骤20,如果否,进入步骤15;
[0061] 步骤15,判断该Cache失效操作是否为Cache读失效操作,如果是,表明该Cache失效操作为Cache读失效操作并且也未落入已有分组上,进入步骤16,如果否,转步骤17;
[0062] 步骤16,建立针对该Cache失效操作的分组,设定该组的写分配策略为立即写分配,立即访存取回数据,转步骤11;
[0063] 步骤17,建立针对该Cache失效操作的分组,设定该组的写分配策略为延迟写分配;
[0064] 步骤18,判断延迟写分配的组比例是否超过阈值,如果是,进入步骤19,如果否,转步骤11;
[0065] 步骤19,选择部分组,设定其写分配策略为立即写分配,转步骤22;
[0066] 步骤20,判断该Cache失效操作是否为Cache写失效操作,如果是,转步骤23,如果否,说明该Cache失效操作为落入已有分组的Cache读失效操作,进入步骤21;
[0067] 步骤21,设定该组的写分配策略为立即写分配;
[0068] 步骤22,立即访问内存对应的Cache块,将该组缺失的数据读回,并与该组的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中,转步骤11;
[0069] 步骤23,将该Cache失效操作的待写入数据写入该分组对应的地址中;
[0070] 步骤24,判断待写入数据是否收集满整个Cache块,如果是,则进入步骤25;如果否,转步骤11;
[0071] 步骤25,将该组的待写入数据直接写入对应的Cache块中,转步骤11。
[0072] 进一步地,本发明中Cache失效操作,可采用队列技术实现对组的管理。
[0073] Cache命中判定逻辑采用现有技术,即对于所有Cache读或写操作,在经过标签(Tag)比较之后判定出其为Cache命中或Cache失效。Cache命中的写操作可以将其数据直接写入Cache中,而对于Cache失效操作,经过分组后,暂存在访存失效队列中。访存失效队列的每一项为一分组,并对应一个Cache块。每一项具有地址域(Addr)、数据域(data)和掩码字节屏蔽域(bytemask)。其中:
[0074] 地址域,用于记录Cache块索引,即Cache失效操作地址对应的Cache块索引;
[0075] 数据域,与处理器中Cache块的大小一致,用于记录Cache失效操作的待写入数据,且记录的位置与该Cache失效操作的地址对应;
[0076] 掩码字节屏蔽域,用于标识数据域中的每一字节是否被写入待写入的数据,即数据域的每个字节与掩码字节屏蔽域的每一位一一对应。
[0077] 以Cache块大小为32字节的处理器为例,则其访存失效队列的数据域为256比特,掩码字节屏蔽域为32位。Cache写失效操作进入访存失效队列时,根据其Cache块内地址偏移将待写入的数据写入到数据域的相应位置,同时将掩码字节屏蔽域的对应位置1。
[0078] 进一步地,对于属于立即写分配的组,在完成所述步骤(3)的立即写分配操作后,清空其对应的项。
[0079] 对应地,在所述步骤(1)中,对于任一Cache写失效操作,判断其地址,若其落在任一已有项的地址域范围内,则将该Cache写失效操作对应的待写入数据写入该项对应的数据域中,对应地修改其掩码字节屏蔽域;若其不落在任何已有项的地址域范围内,则在访存失效队列中分配针对该Cache失效操作的新的项,即在访存失效队列创建一新项分配给该Cache失效操作,对应地修改该新项的掩码字节屏蔽域。
[0080] 进一步地,在访存失效队列中为Cache失效操作分配新的项时,若访存失效队列尚留有空项,则立即分配;否则延迟该Cache失效操作的进入访存失效队列中的操作,并阻塞后续的分配新的项操作,直至访存失效队列出现空项。
[0081] 进一步地,访存失效队列中每一项还包括延迟域(Delay),延迟域(Delay)用于标识该项所采用的Cache写分配策略,在所述步骤(2)中设定该延迟域的值。例如,延迟域为0表示这一项采用的是立即写分配,为1表示这一项采用的是延迟写分配。
[0082] 进一步地,对于地址相同的多次Cache写失效操作,访存失效队列的数据域只保存其最新写入的待写入数据。
[0083] 进一步地,在访存失效队列中新分配的项时,在所述步骤(2)中,设置该新分配的项为延迟写分配,并将其它延迟写分配的项修改为立即写分配。
[0084] 进一步地,访存失效队列中为立即写分配的项,立即访问内存对应的Cache块,将其数据域缺失的数据读回,与该数据域的待写入数据拼接成完整的Cache块数据后,写入到对应的Cache块中。
[0085] 进一步地,当访存失效队列中为延迟写分配的项的数据域收集满整个Cache块时,该项立即发起Cache填充操作请求,当Cache响应该请求后,该项的数据域的内容写入对应的Cache块中。下面举三个具体的实施例子,通过Cache写失效数据的收集、访存失效队列为Cache写失效分配新项以及读失效改变访存失效队列处理策略的例子来进一步具体说明本发明基于访存历史学习的处理器Cache写失效处理方法。
[0086] 例1、假定访存失效队列共有以下3个项,其中第0项与第1项有效,其地址分别为0x0401000、0x001f00c0,两项中第0项为延迟写分配,第1项为立即写分配。其中第0项中已经存放了0x0401000至0x0401000f的16个字节的数据。随后进入访存部件的四个字与操作的地址分别为0x0401001c、0x04010010、0x04010014、0x04010018。这四个操作将会Cache缺失,进入访存失效队列。经地址比较,这四个操作都落在队列的第0项的范围内,因此这四个操作也继承了第0项的延迟写分配。内存读请求被一直延迟,直到第4个写操作也进入访存失效队列。此时第0项已经收集满整个Cache块,因此不需要再发起内存读请求,而是直接向Cache发起填入请求,将收集的数据写入Cache中。同时访存失效队列第0项清空。
[0087] 例2、假定访存失效队列共有3项,其中第0项与第2项有效,其地址分别为0x04000000、0x007f0040,两项中第2项为延迟写分配,延迟域设为1,第0项为立即写分配,即延迟域设为0。此时有一地址为0x007f00c8的字节写操作进入访存部件,经查找其在Cache中不命中,故需进入访存失效队列。通过与访存队列中已有的两项进行地址比较,新的写失效并不落在任一项中,所以在访存失效队列中为其分配一个新项。因此第1项置为有效,地址域设为0x007f00c0,数据域的64至71位存放该写操作的需要写入的数值,同时掩码字节屏蔽域的第8位置为1。因其是新分配的项,故其延迟域设为1,同时将第2项的延迟域置为0。
[0088] 例3、假定访存失效队列共有3项,其中第0项与第2项有效,其地址分别为0x04000000、0x007f0040,两项中第2项为延迟写分配,第0项为立即写分配。第2项中仅存放了0x0400000c地址的一个字的数据。此时一地址为0x04000004的字节读操作进入访存部件,经查找其在Cache中不命中,故需进入访存失效队列。通过与访存队列中已有的两项进行地址比较,判断出其落在第0项中,但进一步查找发现其所需数据当前并不在数据域中,故第0项的延迟域置为0,立即发起内存读访问。
[0089] 以上所述的实施例仅用于说明本发明的技术思想及特点,其目的在于使本领域内的技术人员能够了解本发明的内容并据以实施,不能仅以本实施例来限定本发明的专利范围,即凡依本发明所揭示的精神所作的同等变化或修饰,仍落在本发明的专利范围内。