首页 / 国际专利分类库 / 物理 / 信息存储 / 处理器及其操作方法、计算机可读存储介质

处理器及其操作方法、计算机可读存储介质

申请号 CN201480065192.2 申请日 2014-11-26 公开(公告)号 CN105793833B 公开(公告)日 2019-08-06
申请人 上海兆芯集成电路有限公司; 发明人 罗德尼·E·虎克; 史蒂芬·嘉斯金斯; 道格拉斯·R·瑞德; 杰森·陈;
摘要 一种处理器,包含具有多个快取项目的一快取 存储器 。各快取项目存有一快取列的数据、该快取列的一状态与一标签。该快取存储器包含一引擎。该引擎包含一个或多个有限状态机。该处理器亦包含用以连接一总线的一 接口 。响应于一架构回写与无效指令,该处理器通过该总线自该快取存储器回写多个 修改 过的快取列至该系统存储器,并无效该快取存储器的该多个快取项目的状态。响应于被指示针对该多个快取项目中的各快取项目执行一快取诊断操作,该引擎将该些快取项目的状态与标签写至该总线且并未无效该些快取项目的状态。
权利要求

1.一种处理器,用于具有位于该处理器外的系统存储器的系统,该处理器包含:
快取存储器,具有多个快取项目,其中该多个快取项目中的各快取项目存有快取列的数据、该快取列的状态与该快取列的标签,该快取存储器包含引擎,该引擎包含一个或多个有限状态机;以及
接口,用以连接至总线,响应于架构回写与无效指令,该处理器通过该总线自该快取存储器回写多个修改过的快取列至该系统存储器,其中响应于该架构回写与无效指令,该处理器还无效该快取存储器的该多个快取项目的状态;
其中响应于被指示针对该多个快取项目中的各快取项目执行快取诊断操作,该引擎将该快取项目的状态与标签写至该总线且不无效该快取项目的状态。
2.根据权利要求1所述的处理器,其中,
该总线包含地址部分与数据部分;以及
响应于被指示针对该多个快取项目中的各快取项目执行该快取诊断操作,该引擎将该快取项目的状态与标签写至该总线的该地址部分,并将该快取项目的数据写至该总线的该数据部分。
3.根据权利要求2所述的处理器,其中,
该快取存储器被设置为具有多个集合的相联式快取存储器,该多个集合依该快取项目的该快取列的地址的索引部分被编排,其中该快取列的该地址的该索引部分并未被储存于该快取存储器;以及
当该引擎将该快取项目的状态与标签写至该总线的该地址部分并将该快取项目的数据写至该总线的该数据部分时,该引擎依预先决定的顺序将所有的该多个快取项目写至该总线,其中该快取列的该地址的该索引部分根据该预先决定的顺序能被无疑异地决定。
4.根据权利要求3所述的处理器,其中,
该快取存储器被进一步设置为具有多个关联路的集合相联快取存储器;以及当该引擎将该快取项目的状态与标签写至该总线的该地址部分并将该快取项目的数据写至该总线的该数据部分时,该引擎依预先决定的顺序将所有的该多个快取项目写至该总线,其中该快取列的该地址的该索引部分以及该快取项目的关联路根据该预先决定的顺序能被无疑异地决定。
5.根据权利要求2所述的处理器,进一步包含:
储存区域,存有较高地址位的值;
其中当该引擎将该快取项目的状态与标签写至该总线的该地址部分时,该引擎还将该储存区域所存有的该较高地址位的值写至该总线的该地址部分中未被该快取项目的状态与标签的写入所占用的相应较高位。
6.根据权利要求1所述的处理器,其中,
该总线包含地址部分与数据部分;以及
响应于被指示针对该多个快取项目中的各快取项目执行该快取诊断操作,该引擎将该快取项目的状态与标签写至该总线的该数据部分。
7.根据权利要求6所述的处理器,其中,
响应于被指示针对该多个快取项目中的各快取项目执行该快取诊断操作,该引擎将该快取列的地址写至该总线的该地址部分。
8.根据权利要求1所述的处理器,其中,
通过架构指令来指示该处理器执行该快取诊断操作。
9.根据权利要求1所述的处理器,进一步包含:
微指令,用以指示该引擎执行该快取诊断操作。
10.根据权利要求9所述的处理器,其中,
该微指令通过设定该引擎的控制暂存器中的控制位来指示该引擎执行该快取诊断操作。
11.根据权利要求1所述的处理器,进一步包含:
多个处理核,共用该快取存储器。
12.根据权利要求11所述的处理器,其中,快取列的状态包含指定该快取列相对于该快取存储器的、以及相对于该多个处理核中各处理核的非共用快取存储器的状态的状态信息。
13.根据权利要求1所述的处理器,其中,该引擎以作为该总线实际上能传送数据的最高速率的速率将所有的该多个快取项目的状态与标签写至该总线。
14.根据权利要求1所述的处理器,其中,
该快取存储器被设置为具有多个集合与多个关联路的集合相联快取存储器;
该多个集合中的各集合包含取代信息,该取代信息用以决定在将一个快取项目安排至该集合中时应将该多个关联路中哪一个关联路取代;以及
响应于被指示执行该快取诊断操作,该引擎还将该取代信息写至该总线。
15.一种适用于处理器的操作方法,该处理器用于具有位于该处理器外的系统存储器的系统,该处理器具有包括多个快取项目的快取存储器,其中该多个快取项目中的各快取项目存有快取列的数据、该快取列的状态与该快取列的标签,该处理器还具有针对总线的接口,该操作方法包含:
响应于架构回写与无效指令,通过该总线自该快取存储器回写多个修改过的快取列至该系统存储器,并无效该快取存储器的该多个快取项目的状态;以及
响应于被指示针对该多个快取项目中的各快取项目执行快取诊断操作,将该快取项目的状态与标签写至该总线且不无效该快取项目的状态。
16.根据权利要求15所述的操作方法,其中,
该总线包含地址部分与数据部分;以及
将该快取项目的状态与标签写至该总线包含:将该快取项目的状态与标签写至该总线的该地址部分,并将该快取项目的数据写至该总线的该数据部分。
17.根据权利要求16所述的操作方法,其中,
该快取存储器被设置为具有多个集合的相联式快取存储器,该多个集合依该快取项目的该快取列的地址的索引部分被编排,其中该快取列的该地址的该索引部分并未被储存于该快取存储器;以及
将该快取项目的状态与标签写至该总线的该地址部分并将该快取项目的数据写至该总线的该数据部分包含:依预先决定的顺序将所有的该多个快取项目写至该总线,其中该快取列的该地址的该索引部分根据该预先决定的顺序能被无疑异地决定。
18.根据权利要求17所述的操作方法,其中,
该快取存储器被进一步设置为具有多个关联路的集合相联快取存储器;以及将该快取项目的状态与标签写至该总线的该地址部分并将该快取项目的数据写至该总线的该数据部分包含:依预先决定的顺序将所有的该多个快取项目写至该总线,其中该快取列的该地址的该索引部分以及该快取项目的关联路根据该预先决定的顺序能被无疑异地决定。
19.根据权利要求16所述的操作方法,进一步包含:
利用该处理器的储存区域储存较高地址位的值;
其中将该快取项目的状态与标签写至该总线包含:将该储存区域所存有的该较高地址位的值写至该总线的该地址部分中未被该快取项目的状态与标签的写入所占用的相应较高位。
20.根据权利要求15所述的操作方法,其中,
该总线包含地址部分与数据部分;以及
将该快取项目的状态与标签写至该总线包含:将该快取项目的状态与标签写至该总线的该数据部分。
21.根据权利要求20所述的操作方法,其中,
将该快取项目的状态与标签写至该总线包含:将该快取列的地址写至该总线的该地址部分。
22.一种计算机可读存储介质,其上记录有计算机程序,其中,该计算机程序被处理器执行时实现根据权利要求15所述的操作方法的步骤。

说明书全文

处理器及其操作方法、计算机可读存储介质

[0001] 交叉引用相关的申请
[0002] 本申请主张申请日为2014年9月18日的美国专利第62/052,387号临时申请的国际优先权。该优先权的全文并入本申请以供参考。

技术领域

[0003] 本发明关于一种处理器及其操作方法,以及一种计算机程序产品,特别是关于一种适用于诊断快取存储器回写的处理器及其操作方法,以及利用其操作方法控制处理器的计算机程序产品。

背景技术

[0004] 近年来,随着快取存储器快取空间规格的增加,执行快取存储器管理操作所需要的时间愈来愈长。举例而言,对快取空间规格为四百万字节的大型快取存储器执行一个回写无效(writeback invalidation)操作所需要的时间可能长到对该快取存储器的处理器的其他运作带来干扰。在由多个处理核共用一快取存储器的情况下,若该些处理核在短时间内提出多个快取存储器管理操作请求,上述干扰会更加恶化。
[0005] 此外,对现行处理器来说,诊断错误非常的困难,要诊断与快取存储器相关的错误尤其困难。原因在于,快取存储器中可能储存有大量且相当复杂的数据,尤其是在多个处理核共用快取存储器的情况。
[0006] 一般而言,开发人员可用的主要除错工具为设计处理器时所用的模拟软件模拟器。开发人员可将处理器(包含快取存储器)的初始状态提供给模拟器。根据此初始处理器状态,模拟器开始执行一目标程序,直到出现程序漏洞。开发人员得以回顾模拟器的执行历史记录来判断何时发生错误,以及是哪一个元件导致错误。

发明内容

[0007] 本发明的一范畴在于提供一种处理器。该处理器用于一系统。该系统具有位于该处理器外的一系统存储器。该处理器包含一快取存储器。该快取存储器具有多个快取项目。该多个快取项目中的各快取项目存有一快取列的数据、该快取列的一状态与该快取列的一标签。该快取存储器包含一引擎。该引擎包含一个或多个有限状态机。该处理器亦包含用以连接一总线的一接口。响应于一架构回写与无效指令,该处理器通过该总线自该快取存储器回写多个修改过的快取列至该系统存储器。响应于该架构回写与无效指令,该处理器亦无效该快取存储器的该多个快取项目的状态。响应于被指示针对该多个快取项目中的各快取项目执行一快取诊断操作,该引擎将该多个快取项目的状态与标签写至该总线且并未无效该快取项目的状态。
[0008] 本发明的另一范畴在于提供一种适用于一处理器的操作方法。该处理器用于一系统。该系统具有位于该处理器外的一系统存储器。该快取存储器具有多个快取项目。该多个快取项目中的各快取项目存有一快取列的数据、该快取列的一状态与该快取列的一标签。该处理器亦具有用以连接一总线的一接口。该操作方法包含响应于一架构回写与无效指令,通过该总线自该快取存储器回写多个修改过的快取列至该系统存储器,并无效该快取存储器的该多个快取项目的状态。该操作方法亦包含响应于被指示针对该多个快取项目中的各快取项目执行一快取诊断操作,将该多个快取项目的状态与标签写至该总线且不无效该快取项目的状态。
[0009] 本发明的另一范畴在于提供一种计算机程序产品,编码于供一运算装置使用的至少一非暂态计算机可使用介质中。该计算机程序产品包含储存于该介质中的计算机可使用程序码,用以控制一处理器。该处理器用于具有一系统存储器的一系统,且该系统存储器位于该处理器之外。该计算机可使用程序码包含一第一程序码,用以控制具有多个快取项目的一快取存储器。该多个快取项目中的各快取项目存有一快取列的数据、该快取列的一状态与该快取列的一标签。该快取存储器包含一引擎。该引擎包含一个或多个有限状态机。该计算机可使用程序码亦包含一第二程序码,用以控制连接一总线的一接口。响应于一架构回写与无效指令,该处理器通过该总线自该快取存储器回写多个修改过的快取列至该系统存储器。响应于该架构回写与无效指令,该处理器亦无效该快取存储器的该多个快取项目的状态。响应于被指示针对该多个快取项目中的各快取项目执行一快取诊断操作,该引擎将该多个快取项目的状态与标签写至该总线且并未无效该快取项目的状态。附图说明
[0010] 图1呈现一处理器的功能方图。
[0011] 图2呈现图1中的系统总线的局部功能方块图。
[0012] 图3呈现图1中的末级快取存储器中的一快取项目的示意图。
[0013] 图4根据一集合相联实施例呈现图1中的末级快取存储器中的一集合的示意图。
[0014] 图5为图1中的末级快取存储器呈现一个更详细的功能方块图。
[0015] 图6呈现图5中的合并引擎请求表的一示意图。
[0016] 图7呈现图1中的处理器的一操作流程图
[0017] 图8呈现图1中的处理器在另一实施例中的操作流程图。
[0018] 图9呈现图1中的处理器于执行图7、图8中步骤706的诊断回写程序其流程的更多操作细节。
[0019] 图10呈现图1中的处理器于一实施例中将末级快取存储器的一快取项目写至总线的操作细节。
[0020] 图11呈现图1中的处理器于另一实施例中将末级快取存储器的一快取项目写至总线的操作细节。
[0021] 图12呈现图1中的处理器自一核/服务处理器接收一请求并可能将该请求与来自其他核/服务处理器的请求进行合并的操作流程图。
[0022] 图13呈现图1中的处理器于执行一请求时的操作流程图。
[0023] 图14呈现图1中的处理器于一处理核取消一合并引擎请求时的操作流程图。
[0024] 图15为当一处理核取消所有对于合并引擎的请求时图1中的处理器的运作流程图。

具体实施方式

[0025] 以下将以实施例说明根据本发明的处理器如何执行一诊断回写程序,其中,该处理器的一快取存储器在未令其快取列状态无效的状况下将其所有的标签与快取列状态写出至一系统总线。此程序有助于为处理器(尤其是快取存储器)除错及/或增进其效能。
[0026] 图1呈现一处理器100的功能方块图。处理器100为一多核处理器,其中包含多个处理核102、一总线接口单元108与一共用的末级快取存储器106。于图1的实施例中,处理器100包含四个处理核,分别被标示为处理核0 102-0、处理核1 102-1、处理核2 102-2、处理核3 102-3,以下统称处理核102。处理核0 102-0、1 102-1、2 102-2、3 102-3各自通过接口
112-0、112-1、112-2、112-3(统称接口112)存取末级快取存储器106。总线接口单元108则是通过接口112-4存取末级快取存储器106。处理器100为一较大运算系统(未绘示)的一部分,该运算系统可包含系统存储器与周边装置(亦未绘示);末级快取存储器106可通过总线接口单元108、系统总线124与该运算系统沟通。虽然图1所绘示的处理器100包含四个处理核
102,本发明的概念可应用于包含其他数量的处理核102的实施例,并令该些处理核102皆共用末级快取存储器106。
[0027] 处理核0 102-0、1 102-1、2 102-2、3 102-3各自包含一私有快取存储器104-0、104-1、104-2、104-3(统称私有快取存储器104)。在一实施例中,私有快取存储器104小于末级快取存储器106且具有相对较短的存取延迟。于一实施例中,私有快取存储器104包含一第一级(level-1)指令快取存储器与一第一级数据快取存储器。处理核102可包含但不限于下列功能单元:指令取得单元、分支指令预测单元、指令解码器、指令转译器、微指令/结构式/非结构式暂存器集合、重新命名单元、重新排序暂存器、保留站、指令发送器,以及多个执行单元。该多个执行单元可包含整数运算单元、浮点运算单元、介质单元、分支单元、载入单元与储存单元。多种微架构可被包含在处理核102内。举例而言,处理核102可为超纯量(superscalar)处理器或纯量处理器,可依序或不依序执行指令。于一实施例中,处理核102大致符合x86指令集架构。须说明的是,处理核102不限于特定指令集架构,且可包含其他存储器请求代理电路,例如绘图处理单元(GPU)或可规划化逻辑阵列(field programmable gate array,FPGA)。
[0028] 各处理核102的微指令包含除错程序,以下称追踪程序。追踪程序可响应于多种事件针对各处理核102启动,例如:(1)一处理核102停止响应,亦即该处理核102被占用但经过多个时脉周期皆未响应任何指令;(2)一处理核102自存储器中的不可快取的区域载入数据;(3)处理器100发生温度变化;(4)操作系统请求改变处理器100的总线速率及/或电压;(5)处理器100主动改变其总线速率及/或电压,例如为了减少耗电量或提高效能;(6)一处理核102中的内部计时器过期;(7)一快取存储器窥探(snoop)命中一修改过的快取列,导致该快取列被写回存储器;(8)处理器100的温度、电压或总线速率超过特定范围;(9)使用者或处理器100的外部接脚产生一外部触发信号;(10)发生例外状况;以及(11)侦测到内部错误。一种使用追踪程序的方式是定期启动它。举例而言,一追踪程序查核点(checkpoint)可每隔N个时脉周期被触发,其中N为一特定数字,例如100,000。耦接至系统总线124的一逻辑分析器可于两个查核点之间监控系统总线124上的活动并加以记录。当查核点被触发,追踪程序将处理器100的大量状态输出至系统总线124。该逻辑分析器亦取得系统总线124上的状态输出,并将它们储存至一档案中。处理器100随后被重新启动。此程序持续进行,直到程序漏洞出现。
[0029] 上述查核点对于找出多种类型的漏洞(包含快取存储器漏洞)是有效的。一种有效的方法为配合一软件模拟器。在该软件模拟器中,处理器100的初始状态可被载入为该逻辑分析器对应于某一个查核点所储存的处理器100状态,例如程序漏洞出现前的最后一个查核点。该模拟器接着开始进行模拟,直到程序漏洞出现。
[0030] 一种典型的方法是设定一旗标,以控制追踪程序于输出处理器100状态时执行一回写无效操作,借此迫使末级快取存储器106进入一已知状态,亦即令末级快取存储器106中所有的快取项目都被设定为无效。相对应地,于软件模拟器中,末级快取存储器106的快取项目也被设定为无效,以使于该查核点之后重新开始时,软件模拟器的初始状态与处理器100的实际状态相符。然而,此现有技术的缺点之一是,由于所有的快取项目都被设定为无效,末级快取存储器106的状态会因此被扰乱。这种状况的坏处在于可能会使得程序漏洞要经过较久才出现(若存在程序漏洞),尤其当程序漏洞是在快取存储器中。
[0031] 相对地,本发明的诊断回写程序并未将末级快取存储器106的快取列状态设定为无效。此外,末级快取存储器106中所有快取项目的快取列状态,例如其标签以及修改/专有/共享/无效状态(以下称MESI状态),会被写入系统总线124,使逻辑分析器能取得该些状态,供后续载入软件模拟器作为其初始状态。更有利地,末级快取存储器106的一合并引擎504(参见图5)可利用能最小化查核点时间的系统总线124速度来写入末级快取存储器106状态。
[0032] 须说明的是,虽然在上述实施例中使用该诊断回写程序的快取存储器是末级快取存储器,但采用其他快取存储器层级的处理器亦可运用上述诊断回写程序。此外,虽然上述实施例中的处理器100为多核处理器,但其他配合一个或多个快取存储器的单核处理器亦可运用上述诊断回写程序。
[0033] 图2呈现图1中的系统总线124的局部功能方块图。总线124包含一数据部分202、一地址部分204与一控制部分206。更明确地说,数据部分202包含一预先决定的位数量,地址部分204包含一预先决定的位数量,控制部分206包含一预先决定的位数量。系统总线124可被实现为一平行总线型态以令该些位被同时传递,亦可被实现为一串流型态以令该些位被依序传递,或者亦可被实现为两种型态的组合。控制部分206用以指出系统总线124上正在执行的操作的类型,例如为一读取操作或一写入操作。地址部分204用以指出一系统地址。举例而言,于一实施例中,地址部分204的位数量为36,因而可对应于236个字节(亦即六十四亿字节)的位置。一般而言,一装置,例如具有存储器位置及/或控制/状态暂存器的存储器装置或周边装置,位于地址部分204能指出的地址,并且会响应于指定地址,接收或提供由数据部分202传递的数据。为了增进诊断处理器100中的漏洞的能,于根据本发明的实施例中,一部分或全部的地址部分204被用以传递末级快取存储器106的中继数据,亦即末级快取存储器106中各快取项目300的标签304与状态306(参见图3),而非单纯传递一装置中特定位置的地址。于另一实施例中,一部分或全部的数据部分202被用以传递末级快取存储器106的中继数据304/306,而非单纯传递数据。
[0034] 图3呈现末级快取存储器106中的一快取项目300的示意图。末级快取存储器106包含许多快取项目,图3呈现的快取项目300仅作为代表。各快取项目300包含一快取列的数据302、该快取列的标签304及该快取列的一状态306。若状态306指出快取项目300是无效的,则数据302和标签304都是无效的。于一实施例中,状态306根据一种被广泛使用的快取存储器一致性协定被设定,例如前述MESI状态中的修改状态/专有状态/共享状态/无效状态。须说明的是,其他采用不同快取存储器一致性协定的实施例亦涵盖于本发明的范畴内。在一实施例中,末级快取存储器106包含图1所示的处理核102中的私有快取存储器104,且状态
306包含与私有快取存储器104中各快取列状态相关的信息。于一实施例中,各处理核102包含一第一级指令快取存储器与一第一级数据快取存储器,且MESI状态306包含十二个位。位[11:10]用以指出末级快取存储器106的MESI状态。位[7:0]中的各个位于当各处理核102的第一级指令/数据快取存储器存有该快取列的一复本时被设定。位[9:8]用以指出私有快取存储器104的一整体MESI状态。若没有任何私有快取存储器104存有该快取列的复本,该整体MESI状态为无效状态;若只有一个私有快取存储器存有该快取列的复本,该整体MESI状态为专有状态;否则,该快取列的整体MESI状态为共用状态。
[0035] 通过图1中的接口112,一地址被提供给末级快取存储器106。随后,末级快取存储器106根据该地址进行查找,以决定该地址是否命中末级快取存储器106。末级快取存储器106可为一直接快取存储器、一集合相联(set-associative)快取存储器或一完全相联(fully associative)快取存储器。在一实施例中,末级快取存储器106为一集合相联快取存储器,具有NUM_SET个集合,且为NUM_WAYS关联路,如同图1绘示的实施例。末级快取存储器106根据一待查找地址的中间地址位(例如[16:6])选择一集合,该待查找地址的较高地址位(例如[35:17])被拿来比较被选择的集合中的NUM_WAYS关联路的各快取项目300的标签304,以决定是否发生一快取命中。末级快取存储器106的快取项目300的标签304和MESI状态306可被写至总线124,以协助除错及/或效能调整。
[0036] 图4根据一集合相联实施例呈现末级快取存储器106中的一集合400的示意图。在一实施例中,末级快取存储器106包含多个集合,图4呈现的集合400仅作为代表。各集合400包含末级快取存储器106中各关联路的快取项目300以及一置换方案位402。于一实施例中,该置换方案为最近最少使用(least-recently used,LRU)方案,但采用其他取代方案的实施例亦涵盖于本发明的范畴内,例如伪最近最少使用(pseudo-LRU)方案、循环(round-robin)方案、随机方案等等。于一实施例中,NUM_WAYS等于十六。
[0037] 图5为末级快取存储器106呈现一个更详细的功能方块图。末级快取存储器106包含请求队列502,用以接收处理核102、总线接口单元108及服务处理器509对于存取末级快取存储器106的请求532。
[0038] 服务处理器509用以除错、效能监控/加强以及动态解决漏洞。服务处理器509能存取末级快取存储器暂存器526、非核私有随机存取存储器(PRAM)524、标签阵列514以及LRU阵列516。服务处理器509包含一程序处理器,用以辅助处理核102但不同于处理核102。处理核102于架构上可见地执行处理核102的指令集架构(例如x86指令集架构)的指令,服务处理器509则是并未于架构上可见地执行处理核102的指令集架构的指令。举例而言,操作系统无法运行于服务处理器509上,亦不能安排处理核102的指令集架构(例如x86指令集架构)的程序于服务处理器509上运行。换句话说,服务处理器509并非由操作系统管理的系统资源。相对地,服务处理器509负责执行用以为处理器100(包含末级快取存储器106)除错的操作。此外,服务处理器509可协助量测处理核102的效能或提供其他功能。在一实施例中,相较于处理核102,服务处理器509较小、复杂度较低、较省电。于一实施例中,服务处理器509包含内建时脉门控。于一实施例中,服务处理器509包含一FORTH中央处理器核。
[0039] 末级快取存储器106亦包含一合并引擎504。合并引擎504自请求队列502接收请求。合并引擎504亦耦合至一进行中暂存器507(功用容后详述)。此外,合并引擎504亦自较高地址位暂存器508接收较高地址位,并存取一合并引擎请求表506(细节容后配合图6详述)。在一实施例中,较高地址位暂存器508的预设值是可配置的,例如通过熔断处理器100的熔丝来进行设定。在一实施例中,较高地址位暂存器508为可程序化的,例如通过处理器100的微指令或是服务处理器509改变其预设值。在一实施例中,较高地址位暂存器508的预设值的设定响应于一架构指令,例如x86指令集架构写入模型设定暂存器(write model specific register,WRMSR)指令。于一实施例中,较高地址位暂存器508为四个位宽且负责保存一数值;该数值于一诊断回写程序中代表总线124中地址部分204的四个较高位。合并引擎504执行的诊断回写程序的细节随后会再说明。
[0040] 以下说明较高地址位暂存器508的使用范例。假设该系统配置有八十亿字节的系统存储器,且操作系统被告知(例如通过基本输入输出系统)仅四十亿字节的系统存储器为可用的。也就是说,在该四十亿字节之外的存储器为不可快取的存储器空间。较高地址位暂存器508存有一数值0x1(可能为预设值或被编写而成),用以指出系统存储器在四十亿字节与八十亿字节之间的范围。当一诊断回写程序被执行,末级快取存储器106的中继数据304/306被写至存储器在四十亿字节与八十亿字节之间的范围内的位置,不影响操作系统使用的系统存储器(亦即低于四十亿字节),但允许一逻辑分析器为了除错目的检视总线124,以取得末级快取存储器106的中继数据304/306,例如利用处理器100的一软件模拟器来重现程序漏洞或进行效能分析。
[0041] 末级快取存储器106包含一数据阵列529,用以存放图3中的快取项目300的快取列数据302。末级快取存储器106亦包含一标签/MESI阵列514(简称标签阵列514),用以存放快取项目300的标签304和MESI状态306。标签阵列514负责在共用末级快取存储器106的处理核102之间保持数据一致性。末级快取存储器106亦包含一LRU阵列516(或称取代信息阵列516),用以存放图4呈现的LRU位402。末级快取存储器106亦包含一非核私有随机存取存储器(PRAM)524与一末级快取存储器暂存器526,用以设置操作型态并记录末级快取存储器
106的状态。非核PRAM 524由处理核102共用,可被用以执行核间通信并作为处理核102的微指令的私有暂用空间等等。
[0042] 末级快取存储器106亦包含数据输送线522与标签输送线512。数据输送线522可存取数据阵列529、非核PRAM 524与末级快取存储器暂存器526,并读取及/或更新其内容。数据输送线522自数据阵列529、非核PRAM 524、末级快取存储器暂存器526取得数据302,并将数据提供给处理核102与总线接口单元108。数据输送线522亦接收来自请求队列502与合并引擎504的请求中的数据,并将数据写入至数据阵列529、非核PRAM 524与末级快取存储器暂存器526。标签输送线512可存取标签阵列514与LRU阵列516,并可读取及/或更新其内容。标签输送线512产生响应或动作,以更新请求队列502与合并引擎504中的请求。这些请求亦可更新标签阵列514中的MESI状态306,并可间接地更新LRU阵列516中的LRU位402。于一实施例中,末级快取存储器106包含两个数据输送线522与两个标签输送线512。
[0043] 仲裁逻辑528负责仲裁来自请求队列502与合并引擎504对于数据输送线522的存取请求。相似地,仲裁逻辑518负责仲裁来自请求队列502与合并引擎504对于标签输送线512的存取请求。
[0044] 在一实施例中,合并引擎504能使用总线124的整个频宽,以使上述诊断回写程序能以相较于传统方法更快速的方式被执行。此外,不同于传统的回写无效操作(例如x86WBINVD指令),该诊断回写程序并未令末级快取存储器106中快取项目300的MESI状态306为无效。该诊断回写程序的这两个特色都有利于令程序漏洞较快出现,进而有利于较快地找到并修复程序漏洞。在一实施例中,合并引擎504包含两个状态机,用以执行诊断回写程序。须说明的是,虽然以上说明主要描述利用一模拟器的除错方案,根据本发明的诊断回写程序可利用其他方案来除错。举例而言,除错者/工程人员可仅检查诊断回写程序的输出,例如仅检视诊断回写程序的输出及/或通过计算机软件分析该输出,尤其是当不需要使用快取列数据,而是使用快取列状态来寻找程序漏洞的情况,例如根据图11的实施例。
[0045] 图6呈现图5中的合并引擎请求表506的一示意图。合并引擎请求表506包含针对多个类型的快取存储器管理请求(亦称为合并引擎请求或仅称为请求)各自设有一排的位;该些请求可能接收自处理核102与服务处理器509。图6的实施例中的请求类型包含:诊断回写请求602、回写无效请求604、回写无效私有请求606以及调整大小请求(resize request)608。合并引擎请求表506亦包含与调整大小请求608相关的一尺寸暂存器(size register)
612,以及与回写无效私有请求606相关的一位遮罩暂存器614。位遮罩暂存器614对应于各处理核102分别包含一位。
[0046] 响应于一诊断回写请求602,合并引擎504执行一诊断回写程序。响应于一回写无效请求604,合并引擎504执行一回写无效操作,以回写末级快取存储器106的修改过的快取列至系统存储器,并令末级快取存储器106的所有快取项目300无效。于一实施例中,在将修改过的快取列回写至系统存储器与无效末级快取存储器106的快取列之前,合并引擎504首先自私有快取存储器104将所有正确的快取列搬移至末级快取存储器106,并令私有快取存储器104的所有快取项目为无效。于一实施例中,合并引擎504探访末级快取存储器106的快取项目的关联路/集合顺序相似于后续图9与表1所述的回写无效操作中的顺序。
[0047] 由一处理核102或服务处理器509发出的各个回写无效私有请求606包含一位遮罩。该位遮罩包含对应于各处理核102的一位。如后续与图12的步骤1208有关的说明,当处理核102或服务处理器509发出一回写无效私有请求606,合并引擎504(例如通过布林运算的OR)将该些位遮罩合并,产生合并引擎请求表506中位遮罩暂存器614的数值。合并引擎504针对一回写无效私有请求606执行一回写无效私有操作时,检查位遮罩暂存器614中的位来决定哪些处理核102有设定该位。若各处理核102皆于位遮罩暂存器614中设定该位,合并引擎504会自该些私有快取存储器104将所有正确的快取列搬移至末级快取存储器106,并令位遮罩暂存器614指出的处理核102的私有快取存储器104为无效。因此,当该回写无效私有请求606已完成,针对位遮罩暂存器614指出的处理核102,末级快取存储器106会反映出处理器中的最新版本可快取数据。于一实施例中,合并引擎504探访末级快取存储器106的快取项目的关联路/集合顺序相似于后续图9与表1所述的回写无效私有操作中的顺序。
[0048] 来自一处理核102或服务处理器509的各调整大小请求608会指定一快取空间规格,也就是末级快取存储器106被启用的关联路的数量。针对一调整大小请求608,合并引擎504执行一重设快取空间规格操作,以将末级快取存储器106的快取空间规格重设为尺寸暂存器612指定的关联路数量。也就是说,合并引擎504会停用Q关联路的末级快取存储器106,其中Q等于NUM_WAYS减去尺寸暂存器612中指定的数值。在一实施例中,合并引擎504为了降低处理器100的耗电量,通过停止其时脉信号及/或停止其供电来停用Q关联路的末级快取存储器106。若尺寸暂存器612中指定的数值大于目前使用中的关联路数量,则合并引擎504会启用先前被停用的关联路,例如通过启用其电力与时脉信号。在一实施例中,合并引擎
504依图9的步骤902与表1呈现的顺序停用Q关联路的末级快取存储器106,并依相反顺序启用关联路。
[0049] 针对各类型的请求,合并引擎请求表506为每一处理核102与服务处理器509皆各自设有一个位。当某一处理核102或服务处理器509有一个未完成的请求,对应于该请求类型的那一个位会被设定;直到该请求被完成或取消,该位才会被清除。合并引擎请求表506可协助分别合并四个类型的请求,做法详述如下。若一特定类型的一请求正在等待中–如同合并引擎请求表506对应于该操作类型的位列中的一个或多个设定位所显示者–当另一处理核102/服务处理器509发出相同类型的请求,则相关请求于合并引擎请求表506中的对应位被设定。随后,合并引擎504开始将合并后请求递送至标签输送线512与数据输送线522,以执行合并引擎请求表506指出的请求。当合并引擎504已完成执行被请求的操作,合并引擎504便清空该请求类型所对应的位列中的所有位。于一实施例中,合并引擎504首先将合并后请求递送至标签输送线512,并响应于标签输送线512的动作,将请求提交给请求队列502(例如填充队列及/或查询队列),以进行后续与数据输送线522相关的仲裁。
[0050] 举例而言,若一处理核102提出一回写无效请求604,且另一处理核102在第一个请求开始前提出一回写无效请求604,则合并引擎504将执行一单一回写无效操作,以满足所有提出回写无效请求604的处理核102。针对一调整大小请求608,最新被请求的快取空间规格会被储存在尺寸暂存器612并被合并引擎504据以执行合并后调整大小请求608。针对多个处理核102提出的回写无效私有请求606的合并,合并引擎504对末级快取存储器106进行一次整体浏览(亦即查看各快取项目300的MESI状态306,其中包含各私有快取存储器104的MESI状态),并窥探回写无效私有请求606位被设定的各处理核102的快取列。这种做法优于令合并引擎504对末级快取存储器106依序进行多次整体浏览,亦即为各个回写无效私有请求606位被设定的处理核102分别对末级快取存储器106进行一次整体浏览。
[0051] 合并请求(稍后将配合图12~图15进一步说明)在多方面是有利的。首先,这种做法可增加处理器100的效能。由于快取存储器管理请求通常需要相当长的时间才能完成,通过合并请求并执行单一快取存储器管理操作来满足多个快取存储器管理请求,整体而言可减少完成多个快取存储器管理请求的时间。上述合并的执行不为处理核102所知。也就是说,一处理核102并不会知道其快取存储器管理请求被合并。其次,这种做法可简化实现快取存储器管理请求的微指令。尤其,这种做法可减少处理核102内部通信的复杂度。
[0052] 诊断回写
[0053] 图7呈现图1中的处理器100的一操作流程图。该流程开始于步骤702。
[0054] 于步骤702中,发生启动一处理核102的追踪程序微指令的触发事件。该微指令侦测到一旗标被设定为指出应以追踪程序执行一诊断回写程序。该流程随后执行步骤704。
[0055] 于步骤704,该微指令编写一控制暂存器,以设定合并引擎请求表506中的诊断回写请求602位。或者,响应于启动服务处理器509去请求诊断回写程序的一触发事件,服务处理器509编写该控制暂存器,以设定该诊断回写请求602位。该流程随后执行步骤706。
[0056] 于步骤706,合并引擎504侦测到诊断回写请求602位中的一个或多个位被设定,并响应于此,执行一诊断回写程序(随后将配合图9详述)。当合并引擎504开始进行诊断回写程序时,合并引擎504清除所有的诊断回写请求602位。该流程结束于步骤706。
[0057] 图8呈现图1中的处理器100在另一实施例中的操作流程图。该流程开始于步骤802。
[0058] 于步骤802,一个处理核102执行一诊断回写指令。在一实施例中,该诊断回写指令为一架构指令,亦即处理器100的指令集架构中的一个指令,可由系统软件(例如操作系统)执行。于一范例中,该系统软件可响应一最佳化编辑器的请求而执行该架构诊断回写指令,其中该最佳化编辑器为了一效能最佳化程序产生对于末级快取存储器106的中继数据304/306的需求。于另一范例中,一软件诊断程序可执行该架构诊断回写指令,以诊断末级快取存储器106是否正在正常运作。于另一范例中,该系统软件可为了除错目的执行该架构诊断回写指令。在一实施例中,诊断回写指令包含一参数,用以在诊断回写程序开始之前指定被写入较高地址位暂存器508的一数值。该流程随后执行步骤804。
[0059] 于步骤804,处理核102编写一控制暂存器,以于合并引擎请求表506中设定其诊断回写请求602位。该流程随后执行步骤706,令合并引擎504执行如图7所示的一诊断回写程序。该流程结束于步骤706。
[0060] 图9呈现图1中的处理器100于执行图7、图8中步骤706的诊断回写程序其流程的更多操作细节。该流程开始于步骤902。
[0061] 于步骤902,一静态阵列“way_order[]依一预先决定的顺序被初始化;该预先决定的顺序为末级快取存储器106的一集合中的关联路被写出至总线124的顺序。表1中的虚拟程序码以十六个关联路为例呈现一顺序实施例。然而,其他预先决定的顺序亦涵盖于本发明的范畴内。下述实施例对应于当对末级快取存储器106执行一调整大小请求608时将关联路停用的顺序。于一实施例中,该顺序基于LRU位402的组态预先决定。该流程随后执行步骤904。
[0062] 于步骤904,一变数“N”被初始化为零。变数N的数值用以作为静态阵列way_order[]的索引值(步骤906)。于一实施例中,若末级快取存储器106中的某些关联路被停用(例如由于一先前执行的调整大小请求608),则N被设定为被停用的关联路数量。举例而言,若有四个关联路被停用(例如图9的实施例中的关联路15、7、11、3),则这些关联路不会被造访,其快取项目亦不会被写至系统总线124。在一实施例中,末级快取存储器106被启用的关联路数量被记录在末级快取存储器106的一控制暂存器中,且其数值会被被写至总线124,借此让除错者能得知在诊断回写程序中末级快取存储器106将有多少快取项目300被写至系统总线124。该流程随后执行步骤906。
[0063] 于步骤906,一变数“way”被指派为way_order[N]的数值。变数way的数值用以决定目前的集合中是哪一个关联路的快取项目300将要被写至总线124。该流程随后执行步骤908。
[0064] 于步骤908,一变数“set”被初始化为零。变数set的数值用以决定末级快取存储器106中的哪一个集合的快取项目300将要被写至系统总线124。该流程随后执行步骤912。
[0065] 于步骤912,变数set与变数way的目前数值指定的快取项目300的中继数据304/306被写至总线124(细节容后配合图10、图11详述)。该流程随后执行步骤914。
[0066] 值得注意的是,于步骤914,合并引擎504并未于步骤912无效被写至总线124的快取项目300。通过不将快取项目300的MESI状态设定为无效,该诊断回写程序有利于令程序漏洞较快出现。该流程随后执行步骤916。
[0067] 于步骤916,变数set的数值被递增。该流程执行判断步骤918。
[0068] 步骤918为判断变数set的数值是否小于NUM_SETS-1。若是,该流程回到步骤912,以写出目前关联路的下一个快取项目300;否则,该流程随后执行步骤922。
[0069] 于步骤922,变数N的数值被递增。该流程执行判断步骤924。
[0070] 步骤924为判断变数N的数值是否小于NUM_WAYS-1。若是,该流程回到步骤906,以写出下一个关联路的快取项目300;否则,此流程结束。
[0071] 表1中的虚拟程序码为图9所示的操作程序的另一种表示法。须说明的是,图9中的流程图与表1中的虚拟程序码仅为一种实施例,呈现合并引擎504于进行一诊断回写程序时可执行的动作;合并引擎504的有限状态机可根据其他实施例来设计。举例而言,虽然以上范例采用了way_order、set、N、way几个变数,合并引擎504的有限状态机实际上仍可以在不采用该些变数的情况下,实现相同的功效,亦即依预先决定的顺序将多个快取项目300的中继数据304/306写至总线124。于一实施例中,有两个标签输送线512,其中一个标签输送线512负责执行与偶数编号的集合有关的虚拟程序码操作,同时,另一个标签输送线512负责执行与奇数编号的集合有关的虚拟程序码操作。
[0072] way_order[]={15,7,11,3,13,5,9,1,14,6,10,2,12,4,8,0};
[0073] for(n=0;n
[0074] {
[0075] way=way_order[n];
[0076] for(set=0;set
[0077] {
[0078] write_项目_to_bus(set,way);
[0079] }
[0080] }
[0081] 表1
[0082] 由图9的流程图以及表1的虚拟程序码可看出,在诊断回写程序中,各快取项目300的索引值与其信息被提供至系统总线124的顺序具有明确的关系。如此一来,除错者通过重建索引值与标签304便得以明确地决定快取项目300的快取列地址。假设在诊断回写程序中,J为一从零开始递增的数值,用以表示一特定快取项目300于步骤912被写至总线124的顺序。更明确地说,第一个快取项目300对应的数值J为零,而第二个快取项目300对应的数值J为一。依此类推,J=(NUM_SETS*NUM_WAYS)–1。除错者可得知中继数据304/306被写至系统总线124的一特定快取项目300的索引值为J模数NUM_WAYS。此外,于步骤912被写至系统总线124的各中继数据304/306所属的快取项目300的关联路,亦可明确地对应其信息在诊断回写程序中被写至总线124的顺序与预先决定的way_order[]。更明确地说,被写至系统总线124的中继数据304/306的第一个NUM_SETS数字来自关联路15;被写至系统总线124的中继数据304/306的第二个NUM_SETS数字来自关联路7;被写至系统总线124的中继数据304/306的第三个NUM_SETS数字来自关联路11;依此类推。
[0083] 于一实施例中,早于一诊断回写请求602,指定所有处理核102的一回写无效私有请求606被执行,以将所有修改过的快取列数据搬移至末级快取存储器106,以令最新的快取列数据(根据图10的实施例)能在总线124上被取得。这种做法有助于载入最新的快取列数据至模拟器的末级快取存储器106。须说明的是,这会使得私有快取存储器104被无效(模拟器载入被无效的私有快取存储器104)。如此一来,可能会扰乱程序漏洞的出现。然而相较于执行传统的回写无效请求604,这种做法可能有助于令某些程序漏洞更容易重现。或者,为了决定私有快取存储器104中修改过的数据,一第一诊断回写请求602被执行,借此取得快取列数据与中继数据304/306的一第一集合。接着,指定所有处理核102的一回写无效私有请求606被执行。随后,一第二诊断回写请求602被执行,以取得快取列数据与中继数据304/306的一第二集合。除错者可比较上述第一集合和第二集来决定私有快取存储器104中的哪些快取列存有修改过的数据,并取得该些数据。
[0084] 于一实施例中,合并引擎504亦能自处理核102/服务处理器509接收一诊断回写私有请求。于一实施例中,为执行一诊断回写私有操作,合并引擎504窥探到该些私有快取存储器104为可共用的;也就是说,该些私有快取存储器104放弃将修改过的快取列的数据搬移至末级快取存储器106,但保持该些快取列为共用状态,而非无效该快取列。在这个情况下,最新的快取列数据在该诊断回写程序中会出现在总线124上;有利地,对于私有快取存储器104和末级快取存储器106的扰乱数量被最小化,且模拟器的末级快取存储器106与私有快取存储器104皆可载入与硬件处理器100相符的快取列数据。于另一实施例中,合并引擎504窥探到该些私有快取存储器104为可专有的;也就是说,该些私有快取存储器104放弃将修改过的快取列的数据搬移至末级快取存储器106,但保持该些快取列为一专有状态,而非无效该快取列。在这个情况下,扰乱可被进一步减少。因为,接下来若希望修改该快取列,私有快取存储器104可不需在修改之前取得该快取列的专有权。
[0085] 图10呈现处理器100于一实施例中将末级快取存储器106的一快取项目300写至总线124(图9的步骤912)的操作细节。于步骤1002,合并引擎504传送一请求至总线接口单元108,以针对末级快取存储器106的一快取项目300于总线124上执行一相关动作。该请求提供快取项目300的数据302给总线124的数据部分202。
[0086] 该请求亦提供较高地址位暂存器508中的数值给总线124的地址部分204中的较高位。于一实施例中,较高位指位[35:32]。此外,该请求亦提供快取项目300的标签304和MESI状态306给总线124的地址部分204。于一实施例中,标签304被提供至位[33:15],MESI状态306被提供至位[13:3]。
[0087] 于一实施例中,该请求亦提供一个位至地址部分204的其他位,用以指出两个标签输送线512中是哪一个标签输送线512负责处理快取项目300。于一实施例中,此位为位[14]。于一实施例中,一标签输送线512负责处理末级快取存储器106中为偶数编号的快取项目300,另一标签输送线512负责处理为奇数编号的快取项目300,借此令标签输送线512在诊断回写程序中可被明确地依照预定顺序分派以将被写至总线124的快取项目300。
[0088] 于一实施例中,MESI状态306以缩减后的11位的形式被提供。如图3所示,快取项目300中的MESI状态306可具有一12位结构,且细节如下:
[0089] [11:10]=LLC_MESI(M,E,S,or I)
[0090] [9:8]=Global_L1_MESI(E,S,or I)
[0091] [7:0]=L1_Bitmap(core0 L1D,core0 L1I,core1 L1D,core1 L1I,[0092] core2 L1D,core2 L1I,core3 L1D,core3 L1I)
[0093] 位8是多余的,因此可被移除,以产生一个11位的缩减值。位8在逻辑上为多余的原因在于,位8和位9永远都不会同时被设定。若位8和位9同时被设定,表示有一修改过的快取列在一第一级快取存储器104中;这是末级快取存储器106不会为Global_L1_MESI位设定的状态。此外,只有在位[7:0]中的一个或多个位被设定时,位8才会被设定。因此,根据被写至总线124的11个位,除错者便能根据下列关系重建原始MESI状态306中的位8:
[0094] Global_L1_MESI[0]=~Global_L1_MESI[1]&(L1_位遮罩[7:0]!=0)[0095] 须说明的是,在以上说明中,Global_L1_MESI[0]对应于快取项目300的MESI状态306的位8,Global_L1_MESI[1]对应于快取项目300的MESI状态306的位9。
[0096] 于一实施例中,LRU位402亦被提供于总线124的地址部分204。于一实施例中,LRU位402的位数量为十五,其中每一个位对应于一集合的十六个关联路中的一个关联路。针对一特定集合,除错者能够根据被写至总线124的快取项目300重建LRU位402的十五个位。如先前所述,这是根据快取项目300被写至总线124的预先决定的顺序可明确得知的。
[0097] 图11呈现处理器100于另一实施例中,将末级快取存储器106的一快取项目300写至总线124(图9的步骤912)的操作细节。于步骤1102,合并引擎504传送一请求至总线接口单元108,以针对末级快取存储器106的一快取项目300于总线124上执行一相关动作。该请求提供快取项目300的标签304和MESI状态306给总线124的数据部分202。于一实施例中,快取项目300的数据302的一部分亦被被写至总线124的数据部分202(与标签304和MESI状态306不同的位)。由以上说明可看出,与快取存储器最相关的漏洞不会受到末级快取存储器
106的快取项目300中的实际数据302影响。此实施例即利用此潜在优点。
[0098] 该请求亦提供较高地址位暂存器508中的数值给总线124的地址部分204中的较高位。于一实施例中,针对第一个被写至总线124的快取项目300,较低地址部分204(亦即非对应于较高地址位508的地址部分204)被初始化为零(或其他预先决定的值),并且在随后每次有一快取项目300被该诊断回写程序写至总线124时逐次增加。在这个情况下,若该诊断回写程序所执行的位置(亦即被诊断回写程序写至总线124的地址范围)为未被操作系统用于一般操作的系统存储器(例如未被分派给操作系统辖下的程序),则中继数据304/306可被储存于系统存储器的此区域,供系统软件后续撷取与分析之用。
[0099] 根据本发明的实施例的一个优点在于,不同于传统的回写与无效操作,该诊断回写程序并未导致快取存储器中的信息遗失。由于在无效程序之后需要很长的时间通过正常程序载入、储存、预取(prefetch)重新搬移快取存储器;传统的回写与无效操作会大幅延长模拟时间。更明确地说,模拟器可能会将大部分的时间运用在重新安置快取存储器,尤其是针对一大型的快取存储器(例如一末级快取存储器),始能令程序漏洞出现。
[0100] 合并引擎的请求合并
[0101] 图12呈现图1中的处理器100自一核/服务处理器102/509接收一请求并可能将该请求与来自其他核/服务处理器102/509的请求进行合并的操作流程图。该流程开始于步骤1202。
[0102] 于步骤1202,一处理核102或服务处理器509传送一请求至合并引擎504,以执行一请求。该请求所属的请求类型合并引擎504所支持的,例如诊断回写请求602、回写无效请求604、回写无效私有请求606或调整大小请求608。该流程随后执行步骤1204。
[0103] 于步骤1204,合并引擎504根据提出请求的处理核102或服务处理器509,以及该请求相关的请求类型602/604/606/608,设定合并引擎请求表506中相对应的位。这个请求随后可能会与其他核/服务处理器102/509提出的类型相同的一个或多个请求合并。更明确地说,当合并引擎504处于闲置状态,亦即当无请求正在进行中(如图13的步骤1302所决定者),若多于一个核/服务处理器102/509对应于一特定请求类型602/604/606/608的位被设定,则合并引擎504将针对该请求类型602/604/606/608执行一单一操作,并于操作完成时通知所有位被设定的处理核/服务处理器102/509其个别请求已完成(图13中的步骤1312、1314)。该流程执行判断步骤1206。
[0104] 于判断步骤1206,合并引擎504判断该请求是否为一回写无效私有请求606。若是,该流程随后执行步骤1208;否则,该流程执行判断步骤1212。
[0105] 于步骤1208,合并引擎504对该回写无效私有请求606中指定的处理核位遮罩数值与位遮罩暂存器614中目前的数值进行布林OR运算。该流程结束于步骤1208。
[0106] 于判断步骤1212,合并引擎504决定该请求是否为一调整大小请求608。若是,该流程随后执行步骤1214;否则,此流程结束。
[0107] 于步骤1214,合并引擎504根据调整大小请求608中指定的快取空间规格更新尺寸暂存器612。该流程结束于步骤1214。
[0108] 图13呈现图1中的处理器100于执行一请求时的操作流程图(该请求可为一合并后请求)。该流程开始于判断步骤1302。
[0109] 于判断步骤1302,合并引擎504判断是否有一请求正在进行中。也就是说,合并引擎504会判断是否它正在响应来自一个或多个核/服务处理器102/509的请求602/604/606/608执行相关于末级快取存储器106的一操作。于一实施例中,合并引擎504根据进行中暂存器507中是否有任何位被设定来判断是否有一请求正在进行中。若一请求正在进行中,该流程回到判断步骤1302;否则,该流程继续执行步骤1304。
[0110] 于步骤1304,合并引擎504将合并引擎请求表506中与请求类型602/604/606/608相关的位(例如图6中的一个位)储存至进行中暂存器507,并将相关数值储存至尺寸暂存器612与位遮罩暂存器614。于一实施例中,合并引擎504采用固定的优先顺序来选择接着要服务四种请求类型602/604/606/608中的哪一种。于另一实施例中,合并引擎504依循环(round-robin)顺序选择这四种请求类型602/604/606/608。该流程随后执行步骤1306。
[0111] 于步骤1306,合并引擎504清除步骤1304中所选择的请求类型602/604/606/608在合并引擎请求表506中的相关位。此外,合并引擎504亦清除位遮罩暂存器614与尺寸暂存器612。该流程随后执行判断步骤1308。
[0112] 于判断步骤1308,合并引擎504判断在进行中暂存器507中是否有任何在步骤1304中被存入的位是被设定的。也就是说,合并引擎504决定是否有任一个核/服务处理器102/509有一等待中的请求属于目前选择的请求类型602/604/606/608。若否,则该流程回到判断步骤1302,以针对下一种请求类型602/604/606/608检查等待中的请求。若是,则该流程随后执行步骤1312。
[0113] 于步骤1312,合并引擎504为进行中暂存器507所指出的所有核/服务处理器102/509,针对目前选择的请求类型602/604/606/608执行一单一操作。针对一调整大小请求608或回写无效私有请求606,合并引擎504会分别根据尺寸暂存器612或位遮罩暂存器614中目前储存的数值执行该操作。更明确地说,若目前选择的请求类型在合并引擎请求表506中有多于一个核/服务处理器102/509位被设定,则该些个别请求会被合并为一合并后请求。该合并后请求将通过针对目前选择的请求类型的单一操作来完成。举例而言,若处理核1 
102-1与处理核3 102-3皆设定了其回写无效私有请求606位,则合并引擎504将执行一单一回写无效私有操作,以窥探处理核1 102-1和处理核3 102-3的私有快取存储器104,而非两个回写无效私有操作。于另一范例中,若处理核0 102-0、处理核1 102-1、处理核3 102-3皆设定了其回写无效请求604位,则合并引擎504将执行一单一回写无效操作,而非三个回写无效操作。于另一范例中,若处理核2 102-2与处理核3 102-3皆设定了其诊断回写请求602位,则合并引擎504将执行一单一诊断回写程序,而非两个诊断回写程序。于另一范例中,若处理核0 102-0与处理核3 102-3皆设定了其调整大小请求608位,则合并引擎504将执行一单一重设快取空间规格操作,以将末级快取存储器106重设快取空间规格为尺寸暂存器612中指定的快取空间规格(亦即最后一个发送至合并引擎504的请求所指定的快取空间规格),而非两个重设快取空间规格操作。该流程随后执行步骤1314。
[0114] 于步骤1314,当步骤1312所执行的操作已完成,合并引擎504通知进行中暂存器507中所记录的各核/服务处理器102/509,其请求已经完成。合并引擎504亦清空进行中暂存器507。该流程结束于步骤1314。
[0115] 后续范例将说明快取存储器管理请求的合并及其优点。如先前所述,一回写无效私有操作的执行通过整体浏览末级快取存储器106中各个被启用的集合/关联路,并寻找位遮罩暂存器614所指定的处理核102中的正确的快取列,无论有多少位在位遮罩暂存器614中被设定(只要有至少一个位被设定)。假设依渐增的处理核编号顺序,各处理核102给传送合并引擎504一个指定自己的回写无效私有请求606。在这个情况下,后续事件的发生顺序将如下所述。
[0116] 在时间点0,处理核0传送一回写无效私有请求606给合并引擎504(例如于步骤702或802或1202)。响应于此,合并引擎504为处理核0设定合并引擎请求表506中对应于回写无效私有请求606的该位(于步骤1204),并将回写无效私有请求606中指定的处理核位遮罩(仅指向处理核0)与先前被清空的位遮罩暂存器614合并,令对应于处理核0的该位被设定(于步骤1208)。
[0117] 由于没有其他等待中的请求(决定于步骤1302),合并引擎504将合并引擎请求表506中对应于回写无效私有请求606的位存至进行中暂存器507,同时亦储存仅指向处理核0的处理核位遮罩(于步骤1304),并清除合并引擎请求表506中对应于回写无效私有请求606的位、清除位遮罩暂存器614(于步骤1306)。合并引擎504随后开始针对处理核0的回写无效私有请求606进行回写无效私有操作(于步骤1312),亦即检查末级快取存储器106中各个被启用的集合/关联路、寻找处理核0的私有快取存储器104中正确的快取列,并将它们搬移至末级快取存储器106。
[0118] 稍后,处理核1传送一回写无效私有请求606给合并引擎504。合并引擎504(于步骤1302)判定一回写无效私有请求606(来自处理核0)正在进行中,因此不会立即开始另一个回写无效私有操作,但会设定合并引擎请求表506中对应于回写无效私有请求606以及处理核1的位(于步骤1204),并将处理核1的回写无效私有请求606中指定的处理核位遮罩(仅指向处理核1)与先前被清空的位遮罩暂存器614合并,令对应于处理核1的该位被设定(于步骤1208)。
[0119] 稍后,处理核2传送一回写无效私有请求606给合并引擎504。合并引擎504判定(于步骤1302)针对处理核0的回写无效私有请求606仍在进行中,因此不会立即开始另一回写无效私有操作,但会设定合并引擎请求表506中对应于回写无效私有请求606以及处理核2的位(于步骤1204),并将处理核2的回写无效私有请求606中指定的处理核位遮罩(仅指向处理核2)与先前仅设定处理核1的位的位遮罩暂存器614合并,借此令对应于处理核1、2的位都被设定(于步骤1208)。这种做法有效地合并了来自处理核1与处理核2的请求606。
[0120] 稍后,处理核3传送一回写无效私有请求606给合并引擎504。合并引擎504判定针对处理核0的回写无效私有请求606仍在进行中,因此不会立即开始另一回写无效私有操作,但会设定合并引擎请求表506中对应于回写无效私有请求606以及处理核3的位,并将处理核3的回写无效私有请求606中指定的处理核位遮罩(仅指向处理核3)与先前仅设定处理核1、2的位的位遮罩暂存器614合并,借此令对应于处理核1、2、3的位都被设定。这种做法有效地合并了来自处理核1、2、3的请求606。
[0121] 在数百或数千个时脉周期之后,合并引擎504完成了处理核0的回写无效私有请求606,并通知处理核0其请求606已完成,随后清空进行中暂存器507(于步骤1314)。
[0122] 接着,合并引擎504侦测到(于步骤1302)没有请求正在进行中,并开始步骤1304至步骤1314中的程序,以执行一相对于处理核1、2、3的合并后的回写无效私有操作(例如于步骤1312)。
[0123] 由先前的说明可看出,合并引擎504能在针对四个处理核102的两个回写无效私有操作的时间内完成针对四个处理核102的四个回写无效私有请求606。更明确地说,合并引擎504仅对末级快取存储器106中所有的集合/关联路组合的所有快取项目300进行两次整体浏览。合并请求可将满足四个请求606所需要的时间大致减半。此外,若当处理核0、1、2、3依序传送其请求606至合并引擎504时,合并引擎504正在工作中(例如执行一重设快取空间规格操作),则合并引擎504将合并四个请求606为单一回写无效私有操作,借此节省更多时间,亦即将满足四个请求606的所需时间减少为大致四分之一。
[0124] 后续范例用以说明快取存储器管理请求的合并及其优点。假设处理核0传送一调整大小请求608给合并引擎504,请求重设快取空间规格为十个关联路。假设末级快取存储器106的目前快取空间规格大于十个关联路。假设有另一请求(例如诊断回写请求602)正在进行中,则合并引擎504会将调整大小请求608送入合并引擎请求表506排队等候。更明确地说,合并引擎504会设定处理核0的调整大小请求608位,并将十个关联路的数值写入尺寸暂存器612。随后,处理核1亦传送一调整大小请求608给合并引擎504,请求重设快取空间规格为六个关联路。合并引擎504可看出处理核0的等待中的请求为十个关联路。合并引擎504将设定处理核1的调整大小请求608位(处理核0的调整大小请求608位先前已设定),并将尺寸暂存器612的数值更新为六(于步骤1214),借此合并处理核0与处理核1的请求。当合并后调整大小请求608开始被执行(亦即合并引擎504状态机传送合并后仲裁请求至标签与数据输送线512/522,以开始执行该合并后重设快取空间规格操作),合并引擎504将末级快取存储器106重设快取空间规格为六个关联路,并通知处理核0、处理核1其调整大小请求608已完成。有利地,上述将请求合并的动作不为处理核0与处理核1所知,可减少所需时间。
[0125] 图14呈现图1中的处理器100于一处理核102取消一合并引擎504请求时的操作流程图。该流程开始于步骤1402。
[0126] 于步骤1402,一处理核102(以下称处理核X),传送一通知至合并引擎504,以取消请求类型602/604/606/608中的一种请求(以下称请求Y)。请求Y先前由某个处理核102传递至合并引擎504。在一实施例中,处理核102通过编写末级快取存储器106的一控制暂存器来实现此动作。该流程执行判断步骤1404。
[0127] 于判断步骤1404,合并引擎504判断请求Y是否正在进行中,亦即合并引擎504目前是否正在执行相关于请求Y的操作。于一实施例中,合并引擎504通过检查进行中暂存器507来决定请求Y是否正在进行中。若请求Y正在进行中,该流程执行判断步骤1408;否则,该流程随后执行步骤1406。
[0128] 于步骤1406,合并引擎504为处理核X清除其于合并引擎请求表506中对应于请求Y的所属类型602/604/606/608的位。此外,合并引擎504会通知处理核X,告知其请求Y已被取消。若合并引擎504仍然在执行相关于请求Y的操作,它将不会针对处理核X。也就是说,若处理核X是唯一一个送出等待中的请求Y的处理核102,则合并引擎504将不会执行相关于请求Y的操作。然而,若有其他处理核102送出等待中的请求Y,亦即若合并引擎请求表506中有其他一个或多个其他处理核102(或服务处理器509)对应于与请求Y同类型请求的位被设定,则合并引擎504将会针对其他一个或多个处理核102执行相关于请求Y的操作,但不是针对处理核X。举例而言,若请求Y为一回写无效私有请求606,则合并引擎504会针对其他一个或多个处理核102执行一回写无效私有操作,但不是针对处理核X。该流程结束于步骤1406。
[0129] 于判断步骤1408,合并引擎504决定请求Y是否正在仅针对处理核X进行中,亦即仅针对处理核X而未针对任何其他处理核102。若是,该流程随后执行步骤1414;否则,该流程随后执行步骤1412。
[0130] 于步骤1412,合并引擎504为处理核X清除其于合并引擎请求表506中对应于请求Y的所属类型602/604/606/608的位。此外,合并引擎504会通知处理核X,告知其请求Y已被取消,相似于步骤1406。然而,合并引擎504会继续执行进行中的请求Y操作。在一实施例中,合并引擎504会继续针对处理核X执行进行中的请求Y操作(如同针对任何其他于进行中暂存器507中有位被设定的处理核102)。举例而言,若一回写无效私有操作正在针对处理核1、3进行中,且处理核3取消其回写无效私有请求606,则合并引擎504将继续针对处理核1、3执行该回写无效私有操作,除非是处理核1取消其回写无效私有请求606,合并引擎504才会停止执行该回写无效私有操作(步骤1414)。该流程结束于步骤1412。
[0131] 于步骤1414,合并引擎504停止执行相关于请求Y的操作,并通知处理核X已将请求Y取消。也就是说,合并引擎504停止传送仲裁请求至标签输送线512及/或数据输送线522,用以存取标签/MESI阵列514、数据阵列529、非核PRAM 524及/或末级快取存储器暂存器526、及/或传送窥探请求至私有快取存储器104、及/或传送请求至总线接口单元108,以回写快取列及/或中继数据304/306至总线124、及/或停用/启用末级快取存储器106的关联路。该流程结束于步骤1414。
[0132] 图14(或图15)所述的快取存储器管理请求的取消,尤其有利于调整大小请求608。于一实施例中,或许是响应于操作系统所执行的一架构指令,或是由于侦测到处理器100工作负担较低,处理核102的微指令传送一调整大小请求608给合并引擎504,要求减少末级快取存储器106的快取空间规格(亦即减少启用的关联路数量以节省电力)。举例而言,假设末级快取存储器106原本总共有十六个关联路被启用,而调整大小请求608指定的快取空间规格为六个关联路。假设当该微指令传送通知给合并引擎504要求取消调整大小请求608时,合并引擎504已经回写修改过的数据并停用四个关联路(亦即已将末级快取存储器106的快取空间规格缩减为十二个关联路)。该微指令要求取消调整大小请求608的原因可能是由于它侦测到一个等待中、且不能等到调整大小请求608完成后才处理的中断请求。然而,有利地,末级快取存储器106中已经被停用四个关联路,当该微指令再次传送指定快取空间规格为六个关联路的调整大小请求608时,合并引擎504将能够自快取空间规格为十二个关联路开始,亦即合并引擎504将仅需再回写并停用六个关联路,而不需自十六个关联路开始回写与停用十个关联路。如此一来,可达成棘轮效果(ratcheting-down effect),且先前的调整大小请求608的进程被保留。
[0133] 图15为当一处理核102取消所有对于合并引擎504的请求时处理器100的运作流程图。该流程开始于步骤1502。
[0134] 于步骤1502,一处理核102传送一指示至合并引擎504,以取消所有的请求。在一实施例中,处理核102通过编写末级快取存储器106的一控制暂存器来完成此动作。该流程随后执行步骤1504。
[0135] 于步骤1504,合并引擎504清除合并引擎请求表506中对应于请求Y类型602/604/606/608所有被设定的位,并清空进行中暂存器507。接着,合并引擎504通知所有在进行中暂存器507或合并引擎请求表506中有相关于请求Y类型602/604/606/608的位被设定的处理核102,其请求Y已被取消。该流程结束于步骤1414。
[0136] 通过以上具体实施例的详述,希望能更加清楚描述本发明的特征与精神,而并非以上述所揭露的具体实施例来对本发明的范畴加以限制。本发明所属技术领域的技术人员可理解,在形式与细节上有多种变化型可在不脱离本发明范畴的情况下可被实现。举例而言,软件能实现前述装置与方法的功能、制造、建立模型、模拟、描述及/或测试,通过通用的程序语言(例如C、C++)、硬件描述语言(包含Verilog HDL、VHDL等等)或其他可用程序。此软件可被存放于任何已知的计算机可使用介质,例如磁带、半导体、磁盘或光盘(例如CD-ROM、DVD-ROM等等)、网路、有线、无线或其他通信介质。前述装置与方法的实施例可被包含于一半导体产品中,例如一处理器处理核(例如嵌入式或专用处理器)或是集成电路产品中的硬件。此外,前述装置与方法可被实现为一硬件与软件的组合。因此,本发明不受限于前述各实施例。尤其,本发明可被实现于一通用计算机所使用的处理器装置中。最后,本发明所属技术领域的技术人员可运用以上揭露的观念及实施例作为基础,来设计或修改其他架构,在不背离本发明精神的情况下达成相同的目的。各种改变及具相等性的安排皆涵盖于本发明所欲申请的权利要求书的范畴内。
QQ群二维码
意见反馈