首页 / 专利库 / 电脑零配件 / 微码 / 微处理器及其执行方法

微处理器及其执行方法

阅读:284发布:2020-05-15

专利汇可以提供微处理器及其执行方法专利检索,专利查询,专利分析的服务。并且本 发明 提供一种 微处理器 及其执行方法。微处理器包括多个处理核,其中每一处理核实例化一各自架构上可见储存资源。上述多个处理核的一第一处理核遇到一架构指令,其使用由上述架构指令所 指定 的一值指示上述第一处理核更新上述第一处理核的上述各自架构上可见储存资源。为响应遇到上述架构指令,上述第一处理核将上述数值提供给上述多个处理核的每一处理核及使用上述值更新上述第一处理核的上述各自架构上可见储存资源。除了上述第一处理核外的每一处理核在不遇到上述架构指令的情况下使用上述第一处理核所提供的上述值,更新上述第一处理核的上述各自架构上可见储存资源。,下面是微处理器及其执行方法专利的具体信息内容。

1.一种微处理器,其特征在于,包括:
多个处理核,其中上述多个处理核的每一处理核实例化各自架构上可见储存资源;
其中,上述多个处理核的第一处理核被配置为:
遇到架构指令,其中上述架构指令指示上述第一处理核使用由上述架构指令所指定的值更新上述第一处理核的上述各自架构上可见储存资源;以及
响应于遇到上述架构指令,将上述值提供给上述多个处理核的其它处理核的每一处理核,并且使用上述值更新上述第一处理核的上述各自架构上可见储存资源,上述多个处理核的除上述第一处理核外的每一处理核被配置为在没遇到上述架构指令的情况下使用上述第一处理核所提供的上述值,更新该处理核的上述各自架构上可见储存资源;
其中,上述架构上可见储存资源包括x86架构存储器类型范围暂存器;
上述存储器类型范围暂存器包括含有基址暂存器及遮蔽暂存器的x86架构上可变范围的存储器类型范围暂存器,其中上述遮蔽暂存器包括有效位;
响应于遇到上述架构指令,上述第一处理核还被配置为:
如果上述架构指令指定上述遮蔽暂存器,则提供上述第一处理核的上述基址暂存器的目前值至上述多个处理核的其它处理核的每一处理核,并设置能由上述多个处理核的其它处理核的每一处理核所读取的旗标;
如果上述架构指令指定上述基址暂存器并且上述第一处理核的上述遮蔽暂存器的上述有效位目前被设置,则提供上述第一处理核的上述遮蔽暂存器的目前值至上述多个处理核的其它处理核的每一处理核,并设置上述旗标;以及
否则,清除上述旗标,
其中,为了更新上述值,如果上述旗标被设置,则上述多个处理核的每一处理核更新上述基址暂存器及上述遮蔽暂存器这两者,否则,仅更新由上述架构指令所指定的上述遮蔽暂存器或上述基址暂存器。
2.根据权利要求1所述的微处理器,其特征在于,
上述第一处理核还被配置为响应于遇到上述架构指令,产生中断请求至上述多个处理核的其它处理核的每一处理核;以及
上述多个处理核的除上述第一处理核之外的每一处理核被配置为响应于来自上述第一处理核的上述中断请求,使用上述第一处理核所提供的上述值更新该处理核的上述各自架构上可见储存资源。
3.根据权利要求2所述的微处理器,其特征在于,
上述第一处理核被配置为响应于遇到上述架构指令,停用中断,直到在所有上述多个处理核使用上述值已更新上述各自架构上可见储存资源之后为止;以及上述多个处理核的其它处理核的每一处理核被配置为响应于来自上述第一处理核的上述中断请求,停用中断,直到在所有上述多个处理核使用上述值已更新上述各自架构上可见储存资源之后为止。
4.根据权利要求2所述的微处理器,其特征在于,上述中断请求包括非架构中断请求。
5.根据权利要求1所述的微处理器,其特征在于,还包括:
由上述多个处理核所共享的硬件信号量,
其中,上述第一处理核还被配置为在提供上述值之前取得上述硬件信号量的所有权。
6.根据权利要求1所述的微处理器,其特征在于,上述多个处理核的每一处理核包括微码,其中上述第一处理核的上述微码被配置为提供上述值,上述多个处理核的其它处理核的每一处理核的微码被配置为使用上述值更新该处理核的上述各自架构上可见储存资源。
7.根据权利要求1所述的微处理器,其特征在于,还包括:
存储器,由上述多个处理核所共享,
其中,为了提供上述值,上述第一处理核被配置为将上述值写入至上述存储器。
8.根据权利要求1所述的微处理器,其特征在于,还包括:
非核控制单元,由上述多个处理核所共享,
其中,上述多个处理核的每一处理核被配置为在使用上述值更新该处理核的上述各自架构上可见储存资源之前,产生同步请求至上述非核控制单元。
9.根据权利要求1所述的微处理器,其特征在于,还包括:
非核控制单元,由上述多个处理核所共享,
其中,上述多个处理核的每一处理核被配置为在使用上述值更新该处理核的上述各自架构上可见储存资源之后,产生同步请求至上述非核控制单元;以及
上述多个处理核的每一处理核被配置为等待启用中断,直到所有上述多个处理核产生上述同步请求。
10.根据权利要求1所述的微处理器,其特征在于,上述存储器类型范围暂存器包括x86架构系统管理范围暂存器。
11.根据权利要求1所述的微处理器,其特征在于,上述各自架构上可见储存资源包括x86架构特殊模组暂存器。
12.根据权利要求1所述的微处理器,其特征在于,上述多个处理核的每一处理核被配置为作为上述第一处理核及上述多个处理核的其它处理核之一这两者来进行操作。
13.一种在微处理器中所执行的方法,其特征在于,上述微处理器具有多个处理核,其中上述多个处理核的每一处理核实例化各自架构上可见储存资源,上述方法包括:
由上述多个处理核的第一处理核遇到架构指令,其中上述架构指令指示上述第一处理核使用由上述架构指令所指定的值更新上述第一处理核的上述各自架构上可见储存资源;
响应于遇到上述架构指令,由上述第一处理核提供上述值给上述多个处理核的其它处理核的每一处理核;
响应于遇到上述架构指令,由上述第一处理核使用上述值更新上述第一处理核的上述各自架构上可见储存资源;以及
由上述多个处理核的除上述第一处理核之外的每一处理核在没遇到上述架构指令的情况下使用上述第一处理核所提供的上述值,更新该处理核的上述各自架构上可见储存资源;
其中,上述架构上可见储存资源包括x86架构存储器类型范围暂存器;
上述存储器类型范围暂存器包括含有基址暂存器及遮蔽暂存器的x86架构上可变范围的存储器类型范围暂存器,其中上述遮蔽暂存器包括有效位;
响应于遇到上述架构指令,上述第一处理核进行以下操作:
如果上述架构指令指定上述遮蔽暂存器,则提供上述第一处理核的上述基址暂存器的目前值至上述多个处理核的其它处理核的每一处理核,并设置能由上述多个处理核的其它处理核的每一处理核所读取的旗标;
如果上述架构指令指定上述基址暂存器并且上述第一处理核的上述遮蔽暂存器的上述有效位目前被设置,则提供上述第一处理核的上述遮蔽暂存器的目前值至上述多个处理核的其它处理核的每一处理核,并设置上述旗标;以及
否则,清除上述旗标,
其中,更新上述值包括:如果上述旗标被设置,则由上述多个处理核的每一处理核更新上述基址暂存器及上述遮蔽暂存器这两者,否则,仅更新由上述架构指令所指定的上述遮蔽暂存器或上述基址暂存器。
14.根据权利要求13所述的方法,其特征在于,还包括:
响应于遇到上述架构指令,由上述第一处理核产生中断请求至上述多个处理核的其它处理核的每一处理核;以及
响应于接收上述中断请求,由上述多个处理核的除上述第一处理核之外的每一处理核使用上述第一处理核所提供的上述值更新该处理核的上述各自架构上可见储存资源。
15.根据权利要求14所述的方法,其特征在于,还包括:
响应于遇到上述架构指令,由上述第一处理核停用中断,直到在所有上述多个处理核使用上述值已更新上述各自架构上可见储存资源之后为止;以及
响应于从上述第一处理核接收上述中断请求,由上述多个处理核的其它处理核的每一处理核停用中断,直到在所有上述多个处理核使用上述值已更新上述各自架构上可见储存资源之后为止。
16.根据权利要求13所述的方法,其特征在于,上述微处理器还包括由上述多个处理核所共享的硬件信号量,上述方法还包括:
在提供上述值至上述多个处理核的其它处理核的每一处理核之前,由上述第一处理核取得上述硬件信号量的所有权。
17.根据权利要求13所述的方法,其特征在于,上述提供上述值的步骤由上述第一处理核的微码所执行,以及由上述多个处理核的其它处理核的每一处理核的微码使用上述值更新该处理核的上述各自架构上可见储存资源。
18.根据权利要求13所述的方法,其特征在于,上述微处理器还包括由上述多个处理核所共享的存储器,其中上述提供上述值的步骤包括:
由上述第一处理核将上述值写入至上述所共享的存储器。
19.根据权利要求13所述的方法,其特征在于,上述微处理器还包括由上述多个处理核所共享的非核控制单元,上述方法还包括:
由上述多个处理核的每一处理核在使用上述值更新该处理核的上述各自架构上可见储存资源之前,产生同步请求至上述非核控制单元。
20.一种计算机可读存储介质,其上记录有计算机程序,其中,该计算机程序被处理器执行时实现根据权利要求13至19中任一项所述的方法的步骤。

说明书全文

微处理器及其执行方法

技术领域

[0001] 本发明有关于一微处理器,且特别有关于每一核即时架构可视储存更新传播。

背景技术

[0002] 多核微处理器的增加,主要是因为其提供了在性能上的优势。可能主要是由于半导体装置几何维度大小迅速的减少,从而增加了晶体管密度。在一微处理器中多核的存在已产生与一核与其它核通信的需求,以完成各种功能,例如电源管理、高速缓冲存储器管理、除错及与更多核相关的配置。
[0003] 传统上,运行在多核处理器上架构的程序(例如,操作系统或应用程序)已使用位于由所有核架构上可寻址的一系统存储器中的信号量进行通信。这可能足够用于许多目的,但可能无法提供其它所需的速度、准确度及/或系统层级透明度。

发明内容

[0004] 本发明提供一种微处理器。上述微处理器包括多个处理核,其中上述多个处理核的每一处理核实例化一各自架构上可见储存资源。上述多个处理核的一第一处理核被配置为遇到一架构指令,其使用由上述架构指令所指定的一值指示上述第一处理核更新上述第一处理核的上述各自架构上可见储存资源。作为遇到上述架构指令的响应,上述第一处理核还被配置为将上述数值提供给上述多个处理核的每一处理核及使用上述值更新上述第一处理核的上述各自架构上可见储存资源。除了上述第一处理核外的上述多个处理核的每一处理核被配置为在不遇到上述架构指令的情况下使用上述第一处理核所提供的上述值,更新上述第一处理核的上述各自架构上可见储存资源。
[0005] 本发明由一种在微处理器中所执行的方法,上述微处理器具有多个处理核,其中上述多个处理核的每一处理核实例化一各自架构上可见储存资源。上述方法包括:由上述多个处理核的一第一处理核遇到一架构指令,其使用由上述架构指令所指定的一值指示上述第一处理核更新上述第一处理核的上述各自架构上可见储存资源;由上述第一处理核将上述数值提供给上述多个处理核的每一处理核,以作为遇到上述架构指令的响应;由上述第一处理核使用上述值更新上述第一处理核的上述各自架构上可见储存资源,以作为遇到上述架构指令的响应;以及,由除了上述第一处理核外的上述多个处理核的每一处理核在不遇到上述架构指令的情况下使用上述第一处理核所提供的上述值,更新上述第一处理核的上述各自架构上可见储存资源。
[0006] 本发明提供一种在用于一计算机装置中至少一非暂态计算机可用介质所编码的计算机程序产品,上述计算机程序产品包括指示一微处理器的计算机可用程序码。上述计算机可用程序码包括用以指示多个处理核的第一程序码,其中上述多个处理核的每一处理核实例化一各自架构上可见储存资源。上述多个处理核的一第一处理核被配置为遇到一架构指令,其使用由上述架构指令所指定的一值指示上述第一处理核更新上述第一处理核的上述各自架构上可见储存资源。作为遇到上述架构指令的响应,上述第一处理核还被配置为将上述数值提供给上述多个处理核的每一处理核,并使用上述值更新上述第一处理核的上述各自架构上可见储存资源。除了上述第一处理核外的上述多个处理核的每一处理核被配置为在不遇到上述架构指令的情况下使用上述第一处理核所提供的上述值,更新上述第一处理核的上述各自架构上可见储存资源。
[0007] 本发明具有更少的功率消耗。附图说明
[0008] 图1是显示一多核微处理器的方图。
[0009] 图2是显示一控制字、一状态字及一配置字的方块图。
[0010] 图3是显示一控制单元操作的流程图
[0011] 图4是显示另一实施例的微处理器的一方块图。
[0012] 图5是显示一微处理器操作以转储调试信息的流程图。
[0013] 图6是显示一根据图5流程图中微处理器的操作示例时序图。
[0014] 图7A~7B是显示一微处理器执行跨核高速缓冲控制操作的流程图。
[0015] 图8是显示根据图7A~7B流程图的微处理器操作例子的时序图。
[0016] 图9是显示微处理器进入一低功率封装C-状态的操作流程图。
[0017] 图10是显示根据图9流程图一微处理器操作例子的时序图。
[0018] 图11是根据本发明另一实施例的微处理器进入一低功率封装C-状态的操作流程图。
[0019] 图12是显示根据图11流程图的微处理器操作一例子的时序图。
[0020] 图13是显示根据图11流程图的微处理器操作另一例子的时序图。
[0021] 图14是显示微处理器的动态重新配置的流程图。
[0022] 图15是显示根据另一实施例中微处理器动态重新配置的流程图。
[0023] 图16是显示根据图15流程图的微处理器操作一例子的时序图。
[0024] 图17是显示在图1中硬件信号量118的一方块图。
[0025] 图18是显示当一核102读取硬件信号量118的操作流程图。
[0026] 图19是显示当一核写入硬件信号量的操作流程图。
[0027] 图20是显示当微处理器使用硬件信号量以执行需一资源独占所有权的操作流程图。
[0028] 图21是显示根据图3流程图的核发出非睡眠同步请求操作一例子的时序图。
[0029] 图22是显示配置微处理器的一程序流程图。
[0030] 图23是显示根据另一实施例中配置微处理器的一程序流程图。
[0031] 图24是显示根据另一实施例的一多核微处理器的方块图。
[0032] 图25是显示一微码修补架构的方块图。
[0033] 图26A~26B是显示图24中该微处理器以传播图25的一微码修补至该微处理器的多核的一操作流程图。
[0034] 图27是显示根据图26A~26B流程图的一微处理器操作的一例子的时序图。
[0035] 图28是显示根据另一实施例的一多核微处理器的方块图。
[0036] 图29A~29B是显示根据另一实施例的图28中该微处理器用以传播一微码修补至该微处理器的多个核的一操作流程图。
[0037] 图30是显示图24的微处理器用以修补一服务处理器程序码的流程图。
[0038] 图31是显示根据另一实施例的一多核微处理器的方块图。
[0039] 图32是显示图31中该微处理器用以传播一MTRR更新至该微处理器的多个核的一操作流程图。
[0040] 其中,附图中符号的简单说明如下:
[0041] 100:多核微处理器;102A、102B、102N:核A、核B、核N;103:非核;104:控制单元;106:状态暂存器;108A、108B、108C、108D、108N:同步暂存器;108E、108F、108G、108H:影子同步暂存器;114:熔断器;116:专用随机存取存储器;118:硬件信号量;119:共享高速缓冲存储器;122A、122B、122N:时脉信号;124A、124B、124N:中断信号;126A、126B、126N:数据信号;
128A、128B、128N:电能控制信号;202:控制字;204:唤醒事件;206:同步控制;208:电源闸;
212:睡眠;214:选择性唤醒;222:S;224:C;226:同步状态或C-状态;228:核集合;232:强迫同步;234:选择性同步中止;236:停用核;242:状态字;244:唤醒事件;246:最低常用C-状态;248:错误码;252:配置字;254-0~254-7:致能;256:本地核数量;258:晶体数量;302、
304、305、306、312、314、316、318、322、326、328、332、334、336:步骤;402A、402B:晶体间总线单元A、晶体间总线单元B;404:晶体间总线;406A、406B:晶体A、晶体B;502、504、505、508、
514、516、518、524、526、528、532:步骤;702、704、706、708、714、716、717、718、724、726、727、
728、744、746、747、748、749、752:步骤;902、904、906、907、908、909、914、916、919、921、924:
步骤;1102、1104、1106、1108、1109、1121、1124、1132、1134、1136、1137:步骤;1402、1404、
1406、1408、1412、1414、1416、1417、1418、1422、1424、1426:步骤;1502、1504、1506、1508、
1517、1518、1522、1524、1526、1532:步骤;1702:拥有位;1704:所有者位;1706:状态机1802、
1804、1806、1808:步骤;1902、1904、1906、1908、1912、1914、1916、1918:步骤;2002、2004、
2006、2008:步骤;2202、2203、2204、2205、2206、2208、2212、2214、2216、2218、2222、2224:步骤;2302、2304、2305、2306、2312、2315、2318、2324:步骤;2404:核微码只读存储器;2408:非核微码修补随机存取存储器;2423:服务处理单元;2425:非核微码只读存储器;2439:修补可定址内容存储器;2497:服务处理单元起始地址暂存器2499:核随机存取存储器;2500:微码修补;2502:标头;2504:即时修补;2506:校对和;2508:CAM数据;2512:核PRAM修补;2514:
校对和;2516:RAM修补;2518:非核PRAM修补;2522:校对和;2602、2604、2606、2608、2611、
2612、2614、2616、2618、2621、2622、2624、2626、2628、2631、2632、2634、2652:步骤;2808:核修补RAM;2912、2916、2922、2932:步骤;3002、3004、3006:步骤;3102:存储器类型范围暂存器;3202、3204、3206、3208、3211、3212、3214、3216、3218、3252:步骤。

具体实施方式

[0042] 下文为介绍本发明的最佳实施例。各实施例用以说明本发明的原理,但非用以限制本发明。本发明的范围当以权利要求书为准。
[0043] 请参照图1,其是显示一多核微处理器100的方块图。微处理器100包括多个处理核,标示为102A、102B至102N,其统称为多个处理核102,或简称多个核102,且被单独称为处理核102或简称核102。更佳地说,每一核102包括一或多个功能单元的管线(图未示出),其包括一指令高速缓冲存储器(instruction cache)、一指令转换单元或指令解码器,更佳地包括一微码(microcode)单元、暂存换名单元、保留站(Reservation station)、高速缓冲存储器、执行单元、存储器子系统及包括一排序缓冲器的引退单元(retire unit)。更佳地说,多个核102包括一超纯量(Superscalar)、非顺序执行(out-of-order execution)微体架构。在一实施例中,微处理器100是一x86架构微处理器,但在其它实施例中,微处理器100符合其它指令集的架构。
[0044] 微处理器100也包括一耦接至上述多个核102的不同于上述多个核102的非核103。非核103包括一控制单元104、熔断器114、一专用随机存取存储器116(Private Random Access Memory,PRAM)以及一共享高速缓冲存储器119(Shared Cache Memory),例如,由多个核102所共享的一第二级(level-2,L2)和/或第三级(level-3,L3)高速缓冲存储器。每一核102配置用以通过一各自的地址/数据总线126从非核103读取数据/写入数据至非核103,核102提供一非架构地址空间(也视为专用或微架构地址空间)至非核103的共享资源。专用随机存取存储器116为专用或非架构的,也就是说其未在微处理器100的架构使用者程序地址空间中。在一实施例中,非核103包括仲裁逻辑(Arbitration Logic),其通过多个核102仲裁请求存取非核103的资源。
[0045] 每一熔断器114是一电子装置,其可被烧断或不被烧断;当熔断器114不被烧断时,熔断器114具有低阻抗且易传导电流;当熔断器114被烧断时,熔断器114具有高阻抗且不容易传导电流。一检测电路与每一熔断器114相关联,以评估该熔断器114,例如,检测该熔断器114是否传导一高电流或电压(不烧断,例如,逻辑为零、或清除(clear))或一低电流或高电压(烧断,例如,逻辑为一、或设置(set))。该熔断器114可在微处理器100的制造期间内被烧断,且在一些实施例中,一未烧断的熔断器114可在微处理器100制造后被烧断。更佳地说,一烧断的熔断器114是不可逆的。一熔断器114的例子为一多晶熔丝,其可在装置间施加一足够高的电压而烧断。一熔断器114的另一例子为镍–铬熔丝,其可使用一激光而烧断。更佳地说,感测电路电开启感测熔断器114,并提供其评估至微处理器100的保存暂存器(Holding Register)中的一相应位。当微处理器100被重置解除时,多个核102(例如,微码)读取保存暂存器以决定所感测的熔断器114的值。在一实施例中,在微处理器100被重置解除前,已更新的值可经由一边界扫描输入扫描至保存暂存器,举例来说,像是一联合测试行为组织(Joint Test Action Group,JTAG)输入,以实质更新熔断器114的值。此用于测试和/或侦错目的,如在下方描述与图22和图23相关的实施例中特别有用。
[0046] 另外,在一实施例中,微处理器100包括与每一核102相关不同的本地高级可编程中断控制器(Advanced Programmable Interrupt Controller,APIC)(图未示出)。在一实施例中,本地高级可编程中断控制器架构地遵守加利福尼亚州(California)圣塔克拉拉(Santa Clara)的Intel公司在2012年5月Intel64及IA-32架构软件开发人员手册3A中一本地高级可编程中断控制器的说明,特别是在第10.4节中。尤其是本地高级可编程中断控制器包括一高级可编程中断控制器ID及一包括导引处理器(Bootstrap Processor,BSP)旗标的高级可编程中断控制器基址暂存器,其产生及用途将更详细地描述的如下,尤其是与图14至图16有关的实施例。
[0047] 控制单元104包括硬件、软件、或硬件和软件的组合。控制单元104包括一硬件信号量(Hardware Semaphore)118(详细地描述如下图17至图20)、一状态暂存器106、一配置暂存器112、和与每一核102各自对应的一同步暂存器108。更佳地说,每一非核103的实体在非架构地址空间内不同地址中可由每一核102所寻址,其该非架构地址空间能使微码读取及写入核102。
[0048] 每一同步暂存器108可由各自对应的核102写入。状态暂存器106由每一核102读取。配置暂存器112可(经由如下所述的图2的停用核位236)由每一核102读取及间接写入。控制单元104还可包括中断逻辑(图未示出),该中断逻辑生成至每一核102的对应的中断信号(interrupt signal,INTR)124,该中断信号由控制单元104产生以中断对应的核102。中断源响应该控制单元104产生至一核102的一中断信号124,且中断源可包括外部中断源(例如x86架构INTR、SMI、NMI中断来源)或总线事件(例如,x86架构式的总线信号STPCLK确立(assertion)或解除确立(de-assertion))。此外,每一核102可通过写入控制单元104传送一核间中断信号124至其它每一核102。更佳地说,除非另有说明,否则本文中所描述的核间中断信号为一核102的微码经由一微指令(microinrstuction)请求非架构核间中断信号,其不同于由系统软件经由一架构指令所请求的传统架构核间中断信号。最后,当一同步情况(Synchronization Condition)已经发生时,如下文所述(例如,请参阅图21及图3中的方块334),控制单元104可产生一中断信号124至核102(一同步中断信号)。控制单元104也产生一对应的时脉信号(CLOCK)122至每一核102,其中控制单元104可以选择性地关闭,且有效地使对应的核102进入睡眠并开启以唤醒核102来备份。控制单元104还产生一对应核的电能控制信号(PWR)128至每一核102,其选择性地控制对应的核102接收或不接收电能。因此,控制单元104可经由对应的电能控制信号128选择性地使一核102进入一更深的睡眠状态以关闭该核的电能,并重新开启电能至该核102以唤醒该核102。
[0049] 一核102可写入与其相应的、具有同步位集合(请参阅图2的S位222)的同步暂存器108中,上述操作被视为一同步请求(Synchronization Request)。更详细的说明描述如下,在一实施例中,该同步请求请求控制单元104使核102进入睡眠状态,并当一同步情况发生时和/或当一特定的唤醒事件发生时唤醒该核102。一同步情况发生在微处理器100中所有可启用(请参阅图2中的致能位254)的核102或可启用核102的一特定子集合(请参阅图2中的核集合栏位228)已写入相同的同步情况(详细说明于图2中C位224、同步情况或C-状态栏位226的一组合及核集合栏位228,S位222更详细地描述如下)至其对应的同步暂存器108时。为了响应一同步情况的发生,控制单元104同时唤醒正等待该同步情况的所有核102,即,已请求同步情况。在另一描述如下的实施例中,核102可以请求仅最后写入该同步请求的一核102被唤醒(请参阅图2的选择性唤醒位214)。在另一实施例中,同步请求不请求核
102进入睡眠状态,相反地,同步请求请求控制单元104当同步情况发生时中断核102,更详细地描述如下,特别是图3和图21。
[0050] 更佳地说,当控制单元104侦测一同步情况已发生时(由于最后写入同步请求至同步暂存器108中的最后核102),控制单元104使最后核102进入睡眠状态,例如,关闭传送至最后写入核102的时脉信号122,接着同时唤醒所有核102,例如,开启传送至所有核102的时脉信号122。在此方法中,所有核102皆精确地在相同的时钟周期(clock cycles)中被唤醒,例如,使其时脉信号122被开启。对于某些操作,例如除错(debugging),是特别有益的(请参阅图5中的实施例),其对于精确地在同一时钟周期唤醒核102是有益的。在一实施例中,非核103包括一单一相回路(Phase-locked Loop,PLL),其产生提供给核102的时脉信号122。在其它实施例中,微处理器100包括多个锁相回路,其产生提供至核102的时脉信号
122。
[0051] 控制、状态及配置字
[0052] 请参照图2,其显示一控制字202、状态字242及一配置字252的一方块图。一核102写入控制字202的一值至图1的控制单元104的同步暂存器108,以产生一原子请求(atomic request),以请求进入睡眠状态和/或与微处理器100中所有其它核102或一特定子集合同步化(同步)。一核102读取该控制单元104中状态暂存器106所传送的该状态字242的一值,以决定本文所描述的状态信息。一核102读取该控制单元104中配置暂存器112所传送的该配置字252的一值,并使用该值,描述如下。
[0053] 控制字202包括一唤醒事件栏位204、一同步控制栏位206以及一电源闸(Power Gate,PG)位208。该同步控制栏位206包括各种位或子栏位,其控制核102的睡眠和/或核102与其它核102的同步。同步控制栏位206包括一睡眠位212、一选择性唤醒(SEL WAKE)位214、一S位222、一C位224、一同步状态或C-状态栏位226、一核集合栏位228、一强迫同步位232、一选择性同步中止(kill)位234,以及核停用核位236。状态字242包括一唤醒事件栏位244、一最低常用C-状态栏位246及一错误码栏位248。该配置字252包括微处理器100的每一核102的一致能位254、一本地核数量栏位256及一晶体数量栏位258。
[0054] 该控制字202的唤醒事件栏位204包括多个对应于不同事件的位。如果核102设置一位在唤醒事件栏位204中,当事件发生对应该位时,控制单元104将唤醒该核102(例如,开启时脉信号122至该核102)。当该核102已与在核集合栏位228中所指定的所有其它核同步时,则发生一唤醒事件。在一实施例中,核集合栏位228可指定微处理器100中所有核102;所有核102与即时(instant)核102共享一高速缓冲存储器(例如,一第二级(L2)高速缓冲及/或第三级(L3)高速缓冲);在相同半导体晶体中,所有核102为即时核102(参阅图4中描述一多晶体、多核微处理器100的实施例的一例子);或在其它半导体晶体中的所有核102为即时核102。一共享高速缓冲存储器的核集合102可视为一晶片(Slice)。其它唤醒事件的其它例子包括,但不局限于,一x86INTR、SMI、NMI、STPCLK的确立(assertion)或解除确立(de-assertion)及一核间中断(inter-core interrupt)。当一核102被唤醒时,其可读取在状态字242中的唤醒事件栏位244以决定该正活动唤醒事件。
[0055] 如果核102设置该PG位208时,该控制单元104使核102进入睡眠状态后关闭至核102的电能(例如,经由该电能控制信号128)。当控制单元104随后恢复供电至核102时,控制单元104清除PG位208。PG位208的使用在如下图11至图13将有更详细地描述。
[0056] 如果该核102设定睡眠位212或选择性唤醒位214时,控制单元104在核102写入使用指定在唤醒事件栏位204唤醒事件的同步暂存器108后,使核102进入睡眠状态。该睡眠位212和选择性唤醒位214互斥。当一同步情况发生时,它们之间的差别与控制单元104所采取的行动有关。若核102设置睡眠位212,当一同步情况发生时,则控制单元104将唤醒所有核
102。反之,若一核102设置选择性唤醒位214,当一同步情况发生时,控制单元104将仅唤醒最后写入同步情况至其同步暂存器的核102。
[0057] 如果核102并未置睡眠位212,也未设置选择性唤醒位214时,虽然控制单元104不会使核102进入睡眠状态,但当一同步情况发生时,控制单元104将不会唤醒核102。控制单元104仍将设置在指示一同步情况为正活动的唤醒事件栏位204的位,因此核102可以侦测该同步情况已经发生。许多可指定于该唤醒事件栏位204中的唤醒事件也可中断由该控制单元104所产生一中断信号至核102的来源。然而,若有要求,则核102的微码可遮蔽中断来源。如此,当核102被唤醒时,该微码可读取状态暂存器106决定一同步情况或一唤醒事件或两者是否发生。
[0058] 如果核102设置S位222,其请求控制单元104在一同步情况中同步。该同步情况在C位224、同步情况或C-状态栏位226的一些组合中及核集合栏位228中被指定。若C位224被设置时,C-状态栏位226指定一C-状态值;若C位224是清除的,同步情况栏位226指定一非C-状态同步情况。更佳地说,同步状态或C-状态栏位226的值包括一非负整数的有界集合。在一实施例中,该同步情况或C-状态栏位226为4位。当C位224为清除(clear)时,一同步情况发生在:一特定的核集合栏位228中的所有核102已经写入S位222集合和同步情况栏位226的相同值至同步暂存器108中。在一实施例中,同步情况栏位226的值对应一唯一的同步情况,例如,在下方所描述示范的实施例中各种的同步情况。当C位224被设置时,同步情况发生在在一特定的核集合栏位228中所有核102不论是否已写入该C-状态栏位226中相同的值、皆写入各自S位222集合至同步暂存器108中。在此情况下,控制单元104分发(post)该C-状态栏位226中的最低写入值至该状态暂存器106中的最低常用C-状态栏位246,该最低写入值可由一核102所读取,例如,通过在方块908中的主要核102或通过方块1108中最后写入/选择性地被唤醒核102所读取。在一实施例中,若核102在同步情况栏位226中指定一预设值(例如,所有位集合),此指示控制单元104以匹配即时核102与其它核102所指定的任一同步情况栏位226值。
[0059] 若核102设定强迫同步位232时,控制单元104将强迫所有正进行的同步请求被立即匹配。
[0060] 一般来说,若任一核102因在唤醒事件栏位204中所指定的一唤醒事件所唤醒时,控制单元104通过清除在同步暂存器108中S位222来中止(kill)所有正进行的同步请求。然而,若核102设定该选择性同步中止位234时,控制单元104将中止只有因(非同步情况发生)唤醒事件所唤醒的核102所正进行的同步请求。
[0061] 若两或多个核102在不同的同步情况下请求同步时,控制单元104认为这为一停顿(deadlock)情况。若两或多个核102将一值为设置(set)的S位222、一值为清除(clear)的C位224及同步情况栏位226中的不同值写入各自的同步暂存器108中时,两或多个核102则在不同的同步情况下请求同步。举例来说,若一核102将一值为设置(set)的S位222、一值为清除(clear)的C位224及一同步情况226的值7写入至同步暂存器108中,且另一核102将一值为设置(set)的S位222、一值为清除(clear)的C位224及一同步情况226值9写入至同步暂存器108中时,控制单元104则认为此为一停顿情况。此外,若一核102将一值为清除的C位224写入至其同步暂存器108中、而另一核102将一值为设置(set)的C位224写入至其同步暂存器108中,则控制单元104认为此为一停顿情况。为了响应一停顿情况,控制单元104中止所有正进行的同步请求,并唤醒所有在睡眠状态中的核102。控制单元104也分发(post)在状态暂存器106的错误码栏位248中的值,其状态暂存器106为可由核102读取以决定该停顿原因并采取适当行动的状态暂存器。在一实施例中,错误码248表示每一核102所写入的同步情况,该同步情况使每一核决定是否继续执行其动作的预定路线或延迟至另一核102。举例来说,若一核102写入一同步情况以执行一电源管理操作(例如,执行一x86MWAIT指令)以及另一核102写入一同步情况以执行一高速缓冲管理操作(例如,x86WBINVD指令),则计划执行该MWAIT指令的核102因MWAIT是一可选择的操作,而WBINVD是一强制性的操作而取消MWAIT指令,以延迟至另一正执行WBINVD指令的核102。在举另一例子,若一核102写入一同步情况以执行一除错操作(例如,转储除错状态(Dump debug state))以及另一核102写入一同步情况以执行一高速缓冲管理操作(例如,WBINVD指令)时,则计划进行WBINVD的核102通过储存WBINVD状态,等待转储除错发生及恢复WBINVD状态并执行WBINVD指令,以延迟至执行转储除错的核102。
[0062] 在一单一晶体的实施例中晶体数量栏位258为零。在一多个晶体的实施例(例如,图4中),晶体数量栏位258指示哪一晶体由读取配置暂存器112的该核102所驻留。举例来说,在一二晶体的实施例中,该晶体被指定为0和1以及该晶体数量栏位258具有0或1的值。在一实施例中,举例来说,熔断器114选择性地被烧断以指定一晶体为0或1。
[0063] 本地核数量栏位256指示本地到正读取配置暂存器112的核102的晶体中核的数量。更佳地说,虽然具有一由所有核102所共享的单一配置暂存器112,然而控制单元104知道哪个核102正读取配置暂存器112,并根据一读取器在本地核数量栏位256中提供正确的值。这使得核102的微码知道位于同一晶体中其它核102间的本地核数量。在一实施例中,在微处理器100的非核103部分的一多路复用器选择适当的值,该适当的值可基于核102读取配置暂存器112而在配置字252的本地核数量栏位256中恢复。在一实施例中,选择性地烧断熔断器114操作与多路复用器一起恢复本地核数量栏位256的值。更佳地说,本地核数量栏位256的值是固定独立的,其在晶体中的核102为可使用的,如以下所描述的致能位254所指示。也就是说,即使在该晶体的一或多个核102被停用时,本地核数量栏位256的值维持固定。另外,核102的微码计算核102的整体核数量,该核102的整体核数量为一与配置相关的值,其用途详细描述如下。整体核数量指示微处理器100整体核102的核数量。核102通过使用晶体数量栏位258的值计算其整体核数量。例如,在一实施例中,微处理器100包括8个核
102,平均分至两个具有晶体值0及1的晶体中,在每一晶体中,本地核数量栏位256恢复一0、
1、2或3的值;在晶体值为1的核加上4即恢复本地核数量栏位256的值以计算其整体核数量。
[0064] 微处理器100的每一核102具有一配置字252对应致能位254,配置字252指示该核102是否被启用或停用。在图2中,致能位254分别用致能位254-x表示,其中x是该对应核102的整体核数量。图2中的例子假设微处理器100中具有八个核102,在图2及图4的例子中,致能位254-0指示具有整体核数量0的核102(例如,核A)是否被启用,致能位254-1指示具有整体核数量1的核102(例如,核B)是否被启用,致能位254-2指示具有整体核数量2的核102(例如,核C)是否被启用等等。因此,通过了解整体核数量,一核102的微码可由配置字252中决定微处理器100的哪一核102被停用以及哪一核102被启用。更佳地说,若该核102被启用时,则一致能位254被设定,若核102被停用时,则致能位254被清除。当该微处理器100被重新设定时,硬件自动地填入(populate)该致能位254。更佳地说,当微处理器100被制造指示一已给定的核102是否为启用,若是停用时,该硬件基于熔断器114选择性地被烧断而填入致能位254。举例来说,如果一已给定的核102被测试并发现其为故障时,一熔断器114可被烧断以清除该核102的致能位254。在一实施例中,一被烧断的熔断器114指示一核102为停用,并防止来自被提供至停用的核102的时脉信号。每一核102可将该停用核位236写入至其同步暂存器108中,以清除其致能位254,更多与图14至图16相关的细节将详细描述如下。更佳地说,清除致能位254不会阻止该核102执行指令,但会更新该配置暂存器112,并且,该核102必须设定一不同的位(图未示出),以防止该核本身执行指令,例如,使其电源被移除和/或关闭其时脉信号。对于一多晶体配置微处理器100(例如,图4),该配置暂存器112包括该微处理器100中所有核102的一致能位254,例如,所有核102不仅可是该本地晶体的核102,而且也可为该远端晶体的核102。更佳地说,在一多晶体配置的微处理器100中,当一核102写入至其同步暂存器108时,同步暂存器108的值被传递至对应另一晶体中的影子同步暂存器
108的核102(请参阅图4),其中,若该停用核位236被设置,将造成一更新被传送至远端晶体配置暂存器112,使得本地和远端晶体配置暂存器112皆具有相同的值。
[0065] 在一实施例中,配置暂存器112无法直接由一核102写入。然而,由一核102写入至该配置暂存器112将造成本地致能位254的值被传播到在一多晶体微处理器100中其它晶体的配置暂存器112中,例如,如图14中方块1406中的描述。
[0066] 控制单元
[0067] 请参考图3,是显示一描述该控制单元104的流程图。流程开始于方块302。在方块302中,一核102写入一同步请求,例如,写入一控制字202至其同步暂存器108,其中该同步请求由控制单元104接收。在一多晶体配置微处理器100的情况下(例如,请参见图4),当一控制单元104的影子同步暂存器108接收由其它晶体406所传送的已传播同步暂存器108的值,该控制单元104根据图3有效地操作,例如,当该控制单元104从其本地核102其中之一接收一同步请求(方块302),除了该控制单元104使核102进入睡眠(例如,方块314)、或唤醒(在方块306、328或336)、或中断(在方块334)、或阻止核102在其本地晶体406的唤醒事件(方块326),还填入其本地状态暂存器106(方块318)。流程进行到方块304。
[0068] 在方块304中,该控制单元104检查在方块302中的该同步情况,以决定一停顿(deadlock)情况是否已发生,如上图2所描述。若是,则流程行进至方块306;否则,流程进行到判断方块312。
[0069] 在方块305中,该控制单元104侦测在同步暂存器108其中之一的唤醒事件栏位204的一唤醒事件的发生(除了在方块316中被侦测的一同步情况的发生之外)。如下方方块326中所描述,控制单元104可自动地阻止唤醒事件。控制单元104可以侦测该唤醒事件发生为一事件不同步(Event Asynchronous)时在方块302中写入一同步请求。流程也由方块305进行至方块306。
[0070] 在方块306中,该控制单元104填入状态暂存器106,中止正进行的同步请求,并且唤醒任一睡眠的核102。如上所述,唤醒睡眠核102可包括恢复其功率。该核102接着可读取该状态暂存器106,特别是错误码248,以决定停顿的原因,并根据该冲突同步请求对应的优先顺序处理它,如上所描述。此外,该控制单元104中止所有正进行的同步请求(例如,清除在每一核102的同步暂存器105中的S位222),除非方块306是由方块305后达成且该选择性同步中止位234被设定时,在此种情况下,该控制单元104会中止仅由该唤醒事件所唤醒的核102正进行的同步请求。若方块306是由方块305后达成,则该核102可读取唤醒事件244栏位以决定所发生的唤醒事件。此外,若该唤醒事件是一未遮蔽(unmasked)的中断来源,则控制单元104将通过该中断信号124产生一中断请求至该核102。流程在方块306中结束。
[0071] 在判断方块312中,该控制单元104决定睡眠位212或选择性唤醒位214是否被设定。若有,则流程进行至方块314;否则,流程进行至判断方块316。
[0072] 在方块314中,控制单元104使该核102进入睡眠状态。如上所述,使一核102进入睡眠状态可包括移除其电源。在一实施例中,作为一最佳化的例子,即使该PG位208被设定,若此为最后写入的核102(例如,将造成同步情况的发生),在方块314中,该控制单元104不移除该核102的电源,并且因该控制单元104将在方块328中即时唤醒最后写入的核102备份,因此该选择性唤醒位214被设定。在一实施例中,该控制单元104包括同步逻辑及睡眠逻辑,两者互相分开,但互相通信;此外,该每一同步逻辑和睡眠逻辑包括该同步暂存器108的一部分。有利的是,写入至该同步暂存器108的同步逻辑部分和写入到该同步暂存器108的睡眠逻辑部分是原子的(atomic),即不可分割的。也就是说,如果一部分写入发生时,其同步逻辑部分及睡眠逻辑部分皆保证会发生。更佳地说,该核102的管线阻塞,不允许任何更多的写入发生,直到其被保证写入至该同步暂存器108中的两个部分皆已发生为止。写入一同步请求并立即进入睡眠状态的优点是其不需要该核102(例如,微码)连续地运转以决定该同步情况是否已经发生。由于可以节省电力且不消耗其它资源,例如总线及/或存储器频宽,因此非常有益。值得注意的是,为了进入睡眠状态但无需请求与其它核102同步(例如,方块924和方块1124),该核102可以写入S位222为清除(Clear)及睡眠位212为设定(Set),在本文中称为一睡眠请求,至该同步暂存器108中;若在唤醒事件栏位204中所指定一未遮蔽的唤醒事件发生时(例如,方块305),但未寻找此核102一同步情况的发生(例如,方块316)时,在此种情况下,该控制单元104唤醒该核102(例如,方块306)。流程进行到判断方块
316。
[0073] 在判断方块316中,该控制单元104决定一同步情况是否发生。若是,流程进行至方块318。如上所述,一同步情况可仅在S位222被设定时发生。在一实施例中,该控制单元104使用图2中该致能位254,其指示该微处理器100中哪些核102被启用,以及哪些核102被停用。该控制单元104仅寻找被启用的核102,以决定一同步情况是否发生。一核102可因其被测试且发现在生产时间中有缺陷而被停用。因此,一熔断器被烧断以使该核102无法操作并指示该核102被停用。一核102可因该核102所请求的软件而被停用(例如,请参阅图15)。举例来说,在一使用者请求时,BIOS写入一特殊模组暂存器(Model Specific Register,MSR)以请求该核102被停用,以响应该核102停止使用其本身(例如,通过该停用核位236),并通知其它核102读取其它核102决定停用该核102的配置暂存器112。一核102还可经由一微码来修补(patch)(例如,请参阅图14),该微码可通过烧断熔断器114产生和/或从系统存储器(例如一FLASH存储器)载入。除了决定一同步情况是否发生之外,该控制单元104检查该强迫同步位232。若为设置(set),流程则进行至方块318。若该强迫同步位232为清除(clear)且一同步情况尚未发生,则流程结束于方块316中。
[0074] 在方块318中,该控制单元104填入该状态暂存器106。明确的说,如果发生同步情况为所有核102请求一C-状态的同步时,如上所述,该控制单元104填入最低常用C-状态栏位246。流程进行至判断方块322。
[0075] 在判断方块322中,该控制单元104检查选择性唤醒(SEL WAKE)位214。如果该位为设置(set)时,流程进行至方块326;否则,流程进行至判断方块322。
[0076] 在方块326中,该控制单元104阻止除了即时核(instant core)外所有其它核102的所有唤醒事件,其中该即时核为在方块302中最后写入同步请求至其同步暂存器108的核102,因此使该同步情况发生。在一实施例中,如果欲阻止唤醒事件及其它方面为真(True)时,该控制单元104的逻辑简单地布尔(Boolean)AND运算具有一为假(False)信号的唤醒情况。阻止所有核的所有唤醒事件的用途被更详细地描述如下,特别是图11至图13。流程进行至方块328。
[0077] 在方块328中,该控制单元104仅唤醒该即时核102,但不唤醒请求该同步的其它核。此外,该控制单元104通过清除该S位222中止该即时核102正进行的同步请求,但不中止其它核102正进行的同步请求,例如,离开其它核102的S位222设置。因此有利的是,如果当即时核102在其被唤醒后写入另一同步请求时,其将会再次造成同步情况的发生(假设其它核102的同步请求尚未被中止),一例子将在下方图12及图13中描述。流程结束于方块328。
[0078] 在判断方块332中,该控制单元104检查该睡眠位212。如果该位为设置(set)时,则流程前进到方块336;否则,流程前进到方块334。
[0079] 在方块334中,该控制单元104传送一中断信号(同步中断)至所有核102。图21的时序图是说明一非睡眠同步请求的例子。每一核102可读取该唤醒事件栏位244并侦测一同步情况的发生是中断的原因。流程已进行到方块334,在此情况下,当核102写入其同步请求时,核102选择不进入睡眠状态。虽然此种情况并未使核102获得与进入睡眠状态时同样的益处(例如,同时唤醒),但其具有使核102在等待最后写入其同步要求的核102在无需同时唤醒的情况下,继续处理指令的潜在优势。流程结束于方块334。
[0080] 在方块336中,该控制单元104同时被所有核102唤醒。在一实施例中,该控制单元104在同一时钟周期准确地开启至所有核102的该时脉信号122。在另一实施例中,该控制单元104以一交错方式开启该时脉信号122至所有核102。也就是说,该控制单元104在开启时脉信号122至每一核间引入一时钟周期的预定数量(例如,时钟顺序为十或一百)。然而,时脉信号122交错(staggering)开启被同时考虑于本发明中。为降低所有核102被唤醒时的一电力耗损尖峰的可能性,时脉信号122交错开启是有益的。在又另一实施例中,为了降低电力耗损尖峰的可能性时,该控制单元104在同一时钟周期开启至所有核102的时脉信号122,但通过初始在一已减少的频率中提供时脉信号122并提高频率至目标频率下,在一断断续续(stuttering)、或压制(throttled)方式中执行。在一实施例中,该同步请求作为该核102的微码指令的执行结果被发出,并且该微码被设计用于至少一些同步情况值,且指定该同步情况值的该微码位置为唯一的。举例来说,在微码中仅一地方包括一同步x请求,在微码中仅一地方包括一同步y请求,依此类推。在这些情况下,因所有核102在完全相同的地方被唤醒,其可使得微码设计人员设计出更有效率且无缺陷的程序码,因此同时唤醒是有益的。
此外,当尝试重新建立和修复因多核相互作用而出现错误,但当单一核运行时则不出现错误时,以除错为目的同时唤醒可能是特别有益的。图5及图6是显示此一例子。此外,该控制单元104中止所有正进行的同步请求(例如,清除在每一核102的同步暂存器108中的S位
222)。流程结束于方块336。
[0081] 本文所描述实施例的一优点为其可显著减少在一微处理器中微码的数量,因比起循环(looping)或执行其它检查以同步多核间的操作,在每一核中的微码可简单地写入同步请求,进入睡眠状态,并且知道何时在微码中同一地方唤醒所有核。该同步请求机制的微码用途将描述于下方。
[0082] 多晶体微处理器
[0083] 请参照图4,是显示另一实施例微处理器100的一方块图。图4中的微处理器100在许多方面类似于图1的微处理器100,其中一多核处理器及核102均相似。然而,图4的实施例是一多晶体配置。也就是说,该微处理器100包括安装在一共同封装体(common package)内并经由一晶体内总线404与另一晶体通信的多半导体晶体406。图4的实施例包括两个晶体406,标记为晶体A406A和通过晶体间总线404所耦接的晶体B406B。此外,每一晶体406包括一晶体间总线单元402,晶体间总线单元402联系各自的晶体406至该晶体间总线404。更进一步地,每一晶体406包括耦接至各自核102及晶体间总线单元402的非核103中的控制单元
104。在图4的实施例中,晶体A406A包括四个核102—核A102A、核B102B、核C102C和核D102D,其中上述四个核102耦接至一耦接于一晶体间总线单元A402A的控制单元A104A;同样地,晶体B406B包括四个核102—核E102E、核F102F、核G102G和核H102H,其中上述四个核102耦接至一耦接于一晶体间总线单元B402B的控制单元B104B。最后,每一控制单元104不仅包括在包括本身的该晶体406中每一核的一同步暂存器108,也包括另一晶体406中每一核的一同步暂存器108,其中,上述另一晶体406中的同步暂存器108为图4中所示的影子暂存器
(Shadow register)。因此,图4所示实施例中的每一控制单元包括八个同步暂存器108,表示为108A、108B、108C、108D、108E、108F、108G和108H。在控制单元A104A,同步暂存器108E、
108F、108G和108H为影子暂存器,而在控制单元B104B中,同步暂存器108A、108B、108C、108D为影子暂存器。
[0084] 当一核102将一值写入到其同步暂存器108时,在核102的晶体406中的控制单元104,经由晶体间总线单元402及晶体间总线404,写入该值至另一晶体406中对应的影子暂存器108。此外,如果停用核位236被设定于传播至影子同步暂存器108的该值中时,该控制单元104还更新在配置暂存器112中对应的致能位254。在此种方式下,即使是在微处理器
100核配置是动态变化的情形下(例如,图14至图16),一同步情况的发生(包括一跨晶体(trans-die)同步情况的发生)可以被侦测。在一实施例中,晶体间总线404是一相对低速的总线,且该传播可采用为一预定数量100核的时钟周期顺序,并且每一控制单元104包括一状态机制,其取用一预定数量的时间以侦测该同步情况的发生,并开启该时脉信号至各自晶体406中的所有核102。更佳地说,在控制单元104开始写入值至另一晶体406后(例如,被授予的晶体间总线404),在本地晶体406中的控制单元104(例如,包括写入核102的晶体
406)被配置为延迟更新该本地同步暂存器直到一预定数量的时间为止(例如,传播时间数量与状态机制同步情况发生侦测时间数量的总和)。在此种方式中,在两个晶体中的控制单元104同时侦测一同步情况的发生,并且同时在两个晶体406中开启至所有核102的时脉信号。当尝试重新建立及修复仅因多核相互作用而出现,但不在一单一核正运行时出现的错误时,以除错为目的而言可能特别地有益。图5和图6描述了可能利用此功能优势的实施例。
[0085] 调试操作
[0086] 微处理器100的核102被配置用以执行单独的调整操作,例如指令执行及数据存取的断点(Breakpoint)。此外,微处理器100被配置用以执行为跨核(trans-core)的调试操作,例如,该调试操作与该微处理器100一个以上的核102相关。
[0087] 请参阅图5,其是显示微处理器100操作以转储(dump)调试(debug)信息的流程图。该操作是从一单一核的度所描述,但微处理器100中每一核102根据其描述操作共同转储微处理器100的状态。更具体地说,图5描述了一核接收请求以转储调试信息的操作,其流程开始于方块502,且其它核102的操作流程开始于方块532。
[0088] 在方块502中,核102其中之一接收一请求以转储调试信息。更佳地说,上述调整信息包括该核102或其一子集的状态。更佳地说,调整信息被转储至系统存储器或一可通过调整设备监控的外部总线,像是一逻辑分析器。响应该请求,核102传送一调试转储信息至其它核102并传送其它核102一核间中断信号。更佳地说,在此时间中断被停用的期间内(例如,该微码不允许本身被中断),核102阻止微码以响应该请求以转储调试信息(在方块502中),或响应上述中断信号(在方块532),并保持在微码中,直到方块528为止。在一实施例中,核102只需当其处于睡眠状态且位于架构指令边界时中断。在一实施例中,本文所描述的各种核间信息(像是在方块502及其它像是在方块702、1502、2606和3206中的信息)经由同步暂存器108控制字的该同步情况或C-状态栏位226被传送及接收。在其它实施例中,核间信息经由非核专用随机存取存储器116被传送及接收。流程从方块502前进到方块504。
[0089] 在方块532中,其它核102的其中之一(例如,在方块502中接收该调试转储请求核102之外的一核102)由于在方块502中传送的核间中断信号及信息被中断并接收该调试转储信息。如上所述,虽然在方块532中的流程由单一核102的角度所描述,但每一其它核102(例如,不在方块502中的核102)在方块532被中断并接收该信息,且执行方块504至528的步骤。流程由方块532前进到方块504。
[0090] 在方块504中,核102写入一同步情况1(在图5中标示为SYNC1)的同步请求至其同步暂存器108中。因此,该控制单元104使核102进入睡眠状态。流程进行到方块506。
[0091] 在方块506中,当所有核已写入SYNC1时,核102由控制单元104所唤醒。流程进行到方块508。
[0092] 在方块508中,核102转储其状态至存储器中。流程进行到方块514。
[0093] 在方块514中,核102写入一SYNC2,其造成控制单元104使核102进入睡眠状态。流程进行到方块516。
[0094] 在方块516中,当所有核已写入SYNC2时,核102由控制单元104所唤醒。流程进行到方块518。
[0095] 在方块518中,核102转储在方块508中调试信息的该存储器地址设定一旗标(flag),通过一重置(Reset)信号维持,接着重置其本身。核102重置微码,该微码侦测该旗标并由所储存的存储器地址重新载入其状态。流程进行到方块524。
[0096] 在方块524中,核102写入一SYNC3,其造成控制单元104使核102进入睡眠状态。流程进行到方块526。
[0097] 在方块526中,当所有核已写入SYNC3时,核102由控制单元104所唤醒。流程进行到方块528。
[0098] 在方块528中,该核102基于该在方块518中被重新载入的状态移除重置,并开始提取架构(例如,x86)指令。流程结束于方块528。
[0099] 请参照图6,其是显示一根据图5流程图中微处理器100的操作示例时序图。在此例子中,微处理器100配置具有三个核102,标示为核0、核1及核2,如图所示。然而,应可理解的是,在其它实施例中,微处理器100可包括不同数量的核102。在此时序图中,事件时序的过程如下所述。
[0100] 核0接收一调试转储请求,并传送一调试转储信息和中断信息至核1及核2(每一方块502)以作为响应。该核0接着写入一SYNC1,并进入睡眠状态(每一方块504)。
[0101] 每一核1和核2最后由其目前任务中被中断并读取其信息(每一方块532)。作为响应,每一核1和核2写入一SYNC1并进入睡眠状态(每一方块504)。如图所示,每一核写入SYNC1的时间可能不同,例如,由于该指令当该中断被确立时正在执行。
[0102] 当所有核已写入SYNC1时,控制单元104同时唤醒所有核(每一方块506)。每一核接着转储其状态至存储器(每一方块508),写入一SYNC2并进入睡眠状态(每一方块514)。需转储该状态的时间量可能不同;因此,在每一核写入SYNC2的时间可能不同,如图所示。
[0103] 当所有核已写入SYNC2时,控制单元104同时唤醒所有核(每一方块516)。每一核接着重置其本身并由存储器中重新载入其状态(每一方块518),写入SYNC3并进入睡眠状态(每一方块524)。如图所示,需重置并重新载入状态的时间量可能会有所不同;因此,在每一核写入SYNC3的时间可能不同。
[0104] 当所有核已写入SYNC3时,控制单元104同时唤醒所有核(每一方块526)。每一核接着开始在被中断的时间点提取架构指令(每一方块528)。
[0105] 传统在多处理器之间同步操作的解决方法是使用软件信号量(semaphore)。然而,传统的解决方法缺点是其无法提供时间等级同步(Clock-level Synchronization)。本文所描述实施例的优点是控制单元104可同时开启时脉信号122至所有的核102。
[0106] 在如上所述的方法中,一调整微处理器100的工程师可配置核102其中之一以周期性地产生检查时间点,其用以产生调试转储请求,举例来说,在一预定数量的指令已经执行后。当微处理器100在运行时,工程师取得在一记录档中微处理器100外部总线上的所有活动。接近总线被察觉已发生时间的记录档部分可提供至一软件模拟器,其模拟该微处理器100以帮助工程师调试。该模拟器模拟执行由每一核102所指示的指令,并模拟外部微处理器100总线使用纪录信息的执行。在一实施例中,所有核102的模拟器从同时由一重置点启动。因此,该微处理器100的所有核102实际上在同一时间停止重置(例如,在SYNC2之后)是具有较高的效果。此外,通过在所有其它核102已经停止其当前的任务(例如,在SYNC1之后)之前,等待转储其状态时,由一核102转储其状态不会与其它核执行调试(例如,共享存储器总线或高速缓冲相互影响)的程序码及/或硬件互相干扰,其可增加重新产生错误并判断其原因的可能性。同样地,直到所有核102已经完成重新载入其状态之前(例如,在SYNC3之后),等待以开始提取架构指令,通过一核102重新载入状态不会与其它核执行调试的程序码及/或硬件互相干扰,其可增加重新产生错误并判断其原因的可能性。
[0107] 这些好处提供比现有方法更多的优点,其现有方法如美国专利US8,370,684,其从所有目的整体上作为参考被引用于此,其无法享有能够取得该同步请求核的好处。
[0108] 高速缓冲控制操作
[0109] 微处理器100的核102被配置用以执行独立的高速缓冲控制操作,像是在本地高速缓冲存储器,例如,不由两个或更多核102所共享的高速缓冲器。此外,微处理器100被配置用以执行为跨核(Trans-core)的高速缓冲控制操作,例如,与微处理器100一个以上的核102相关,以及例如,因其与一共享高速缓冲存储器119相关。
[0110] 请参阅图7A~7B,其是显示微处理器100用以执行跨核高速缓冲控制操作的流程图。图7A~7B的实施例描述微处理器100如何执行一x86架构写回无效缓冲(Write Back and Invalidate Cache,WBINVD)指令。一WBINVD指令指示执行指令的核102写回在微处理器100高速缓存存储器中所有的修改行至系统存储器并使高速缓存存储器失效,或清空(Flush)。该WBINVD指令还指示该核102发布特别的总线周期以将任意高速缓存存储器外部直接指入微处理器100中,以写回其已修改的数据,并使上述数据失效。上述操作是以一单一核的角度所描述,但微处理器100的每一核102根据本说明书操作共同写回已修改高速缓冲线(Modified cache line)并使微处理器100的高速缓冲存储器无效。更具体地说明,图7A~7B描述一核遇到WBINVD指令的操作,其流程开始于方块702,并且其它核102的流程开始于方块752。
[0111] 在方块702中,核102其中之一遇到一WBINVD指令。作为响应,核102传送一WBINVD指令信息至其它核102并且传送一核间中断信号至上述其它核102。更佳地说,直到流程进行至方块748/749之前,核102在时间中断信号被停用的期间内(例如,该微码不允许其本身被中断),阻止微码以作为WBINVD指令的响应(在方块702中),或以作为该中断信号(在方块752中)的响应,并维持在微码中。流程从方块702进行到方块704。
[0112] 在方块752中,其它核102其中之一(例如,除了在方块702中所遇到该WBINVD指令核102之外的一核)由于在方块702中被传送的该核间中断信号而被中断并接收该WBINVD指令信息。如上所述,虽然流程在方块752是由单一核102的角度所描述,但每一其它核102(例如,不为在方块702中的核102)在方块752中被中断并接收该信息,且执行方块704至方块749的步骤。流程由方块752进行到方块704。
[0113] 在方块704中,该核102写入一同步情况4的同步请求(在图7A~7B中标示为SYNC4)至其同步暂存器108中。因此,控制单元104使核102进入睡眠状态。流程进行到方块706。
[0114] 在方块706中,当所有核102已写入SYNC4时,该核102由控制单元104所唤醒。流程进行到方块708。
[0115] 在方块708中,核102写回并使得本地高速缓冲存储器失效,例如,不由核102与其它核102共享的第1级(Level-1,L1)高速缓冲存储器。流程进行到框714。
[0116] 在方块714中,核102写入一SYNC5,其造成控制单元104使核102进入睡眠状态。流程进行到方块716。
[0117] 在方块716中,当所有核102已写入SYNC5时,核102由控制单元104所唤醒。流程进行到判断方块717。
[0118] 在判断方块717中,核102判断其是否为在方块702中所遇到该WBINVD指令的核102(与在方块752中所接收该WBINVD指令信息的核102相对照)。若是,则流程进行到方块718;否则,流程前进到方块724。
[0119] 在方块718中,核102写回并使共享高速暂存器119失效。在一实施例中,微处理器100包括多个晶片在多个核但并非全部核中,微处理器100的核102共享一高速缓冲存储器,如上所述。在此一实施例中,类似于方块717至方块726中的中间操作(图未示出)被执行,其为由在晶片中核102其中之一执行写回及使共享缓冲存储器失效,而该晶片的其它(多个)核回到类似于方块724中的睡眠状态以等待直到该高速缓冲存储器失效为止。流程进行到方块724。
[0120] 在方块724中,核102写入一SYNC6,其造成控制单元104使核102进入睡眠状态。流程进行到方块726。
[0121] 在方块726中,当所有核102已写入SYNC6时,核102由控制单元104所唤醒。流程进行到判断方块727。
[0122] 在判断方块727中,核102判断其是否为在方块702中遇到WBINVD指令的核102(与在方块752中所接收该WBINVD指令信息的核102相对照)。若是,则流程进行到方块728;否则,流程前进到方块744。
[0123] 在方块728中,核102发布特定的总线周期以造成外部高速缓冲器被写回并使外部高速缓冲器失效。流程进行到方块744。
[0124] 在方块744中,写入一SYNC13,其造成控制单元104使核102进入睡眠状态。流程进行到方块746。
[0125] 在方块746中,当所有核102已写入SYNC13时,核102由控制单元104所唤醒。流程进行到判断方块747。
[0126] 在判断方块747中,核102判断其是否为在方块702中遇到WBINVD指令的核102(与在方块752中所接收该WBINVD指令信息的核102相对照)。若是,则流程进行到方块748;否则,流程前进到方块749。
[0127] 在方块748中,核102完成WBINVD指令,其包括引退(retire)的WBINVD指令,且可包括放弃一硬件信号量的所有权(见图20)。流程结束于方块748。
[0128] 在方块749,在核102在方块752中被中断之前,核102在方块749恢复继续其正执行的任务102。流程结束于方块749。
[0129] 参阅图8,其是显示根据图7A~7B流程图的微处理器100的操作时序图。在此例子中,微处理器100配置具有三个核102,标示为核0、核1及核2,如图所示。然而,应可理解的是,在其它实施例中,微处理器100可包括不同数量的核102。
[0130] 核0遇到一WBINVD指令并响应传送一WBINVD指令信息,且中断核1及核2(每一方块702)。核0接着写一SYNC4并进入睡眠状态(每一方块704)。
[0131] 每一核1及核2最后从其当前任务中被中断并读取该信息(每一方块752)。作为响应,每一核1及核2写入一SYNC4并进入睡眠状态(每一方块704)。如图所示,每一核写入SYNC4的时间可能不同。
[0132] 当所有核已经写入SYNC4时,控制单元104同时唤醒所有核(每一方块706)。每一核接着写回并使其特定的高速缓冲存储器失效(每一方块708),写入SYNC5并进入睡眠状态(每一方块714)。需写回及使高速缓冲存储器失效的时间量可能不同,因此,在每一核写入SYNC5的时间可能不同,如图所示。
[0133] 当所有核已写入SYNC5时,控制单元104同时唤醒所有核(每一方块716)。仅遇到WBINVD指令的核写回并使共享高速缓冲存储器119失效(每一方块718),以及所有核写入SYNC6并进入睡眠状态(每一方块724)。由于仅一核写回并使共享高速缓冲存储器119失效,因此每一核写入SYNC6的时间可能不同。
[0134] 当所有核已写入SYNC6时,控制单元104同时唤醒所有核(每一方块726)。仅遇到WBINVD指令的核完成WBINVD指令(每一方块748),以及所有其它核恢复中断前的处理。
[0135] 应可理解的是,虽然高速缓冲控制指令为一x86WBINVD指令的实施例已被描述,但其它实施例可以假设同步请求被用以执行其它高速缓冲指令。例如,微处理器100可执行类似的动作,以使无需写回高速缓冲数据(在方块708和718)而执行一x86INVD指令并简单地使高速缓冲器失效。再举另一例子来说,高速缓冲控制指令可由比x86架构更不相同的指令集架构得到。
[0136] 电源管理操作
[0137] 在微处理器100的核102被配置用以执行各个功率减少的操作,例如,但不局限于,停止执行指令、请求控制单元104停止传送时脉信号至核102、请求控制单元104由移除核102的电源,写回并使核102的本地(例如,非共享)高速缓冲存储器失效及储存核102的状态至一外部存储器,如专用随机存取存储器116。当一核102已执行一或多个核指定的功率减少操作时,其已进入一“核”C-状态(也被称为一核闲置状态或核睡眠状态)。在一实施例中,C-状态值可大致对应到已知高级配置和电源接口(Advanced Configuration and Power Interface,ACPI)规格处理器状态,但也可包括更精细的粒度(Granularity)。一般而言,一核102将进入一核C-状态以响应来自上述操作系统的请求。举例来说,x86架构监视等待(MWAIT)指令是一电源管理指令,其提供一提示,即一目标C-状态,至执行指令的核102以允许微处理器100进入一最佳化状态,像是一较低功率耗损状态。在一MWAIT指令的情况下,目标C-状态是专属的(proprietary)而非ACPI C-状态。核C-状态0(C0)对应于核102的运行状态并且C-状态逐渐增加的值对应逐渐减少的活动或响应状态(如C1、C2、C3等状态)。一逐渐减少的响应或活动状态是指相对于一更多活动或响应状态节省更多功率的配置或操作状态,或由于某种原因而相对减少响应的配置或操作状态(例如,具有一较长的唤醒延迟、较少完全启用)。一核102可能节省功率操作的例子为停止指令的执行、停止传送时脉信号、降低电压、和/或移除核的部分(例如,功能单元和/或本地高速缓冲器)或整个核的电源。
[0138] 此外,微处理器100被配置用以执行跨核的功率减少操作。跨核功率减少操作牵连或影响微处理器100的多个核102。举例来说,共享高速缓冲存储器119可以是大的且相对消耗大量的功率。因此,显著的功率节省可通过移除传送至共享高速缓冲存储器119的时脉信号和/或电源来达成。然而,为了移除至共享高速缓冲存储器119的时脉信号和/或电源,所有共享高速缓冲存储器的核102必须同意以使数据的一致性得到维持。实施例考虑该微处理器100包括其它共享电源相关的资源,像是共享时脉和电源。在一实施例中,微处理器100被耦接至包括一存储器控制器、外围控制器和/或电源管理控制器的系统晶片组。在其它实施例中,一或多个控制器被整合至微处理器100中。系统省电可由微处理器100通知控制器使控制器采取省电的动作来达成。举例来说,微处理器100可以通知控制器使微处理器的高速缓冲存储器失效并关闭,以使其无须被侦查。
[0139] 除了一核C-状态的概念外,微处理器100一般来说具有一“封装”的C-状态(也被称为一封装闲置状态或封装睡眠状态)。封装C-状态对应核102的最低(例如,最高功率消耗)共同核C-状态(例如,请参阅图2中的栏位246及图3的方块318)。然而,除了核特定的功率减少操作外,封装C-状态涉及到执行一或多个跨核功率减少操作的微处理器100。与封装C-状态相关的跨核省电操作例子包括关闭一产生时脉信号的锁相回路(Phase-locked-loop,PLL),并清空该共享高速缓冲存储器119,且停止其时脉和/或电源,其使存储器/外部控制器避免侦查微处理器100的本地共享高速缓冲存储器。其它例子为改变电压、频率和/或总线时脉比、减少高速缓冲存储器的大小,如共享高速缓冲存储器119,并以一半的速度运行共享高速缓冲存储器119。
[0140] 在许多情况下,操作系统被有效地用以执行在单独核102中的指令,因此可令单独核进入睡眠状态(例如,至一核C-状态),但不具有直接令微处理器100进入睡眠状态(例如,至封装C-状态)的方式。有益地,在实施例中描述微处理器100的核102在控制单元104的帮助下互相合作地工作,以侦测当所有核102已进入核C-状态并准备使跨核的省电操作发生。
[0141] 请参阅图9,其是显示微处理器100进入一低功率封装C-状态的操作流程图。图9的实施例描述微处理器100耦接至一晶片组并使用MWAIT指令执行的例子。然而,应可理解的是,在其它实施例中,操作系统采用其它电源管理指令以及主要核102与整合至微处理器100内的控制器互相通信,并使用一不同的握手(Handshake)协议来描述。
[0142] 此操作是以一单一核的角度来描述,但该微处理器100的每一核102可能会遇到MWAIT指令并根据本说明书操作共同使微处理器100进入最佳状态。流程开始于方块902。
[0143] 在方块902中,一核102遇到一用于指定目标C-状态的MWAIT指令,在图9中标示为Cx,其中x是一非负整数值。流程进行到方块904。
[0144] 在方块904中,核102写入一C位224集合及一C-状态栏位226值为x(在图9中标示为SYNC Cx)的同步请求至其同步暂存器108。此外,同步请求在其唤醒事件栏位204中指定核102在所有唤醒事件中被唤醒。因此,控制单元104令核102进入睡眠状态。更佳地说,核102在写入SYNC Cx之前,核102先写回并使其写入的本地高速缓冲存储器失效。流程进行到方块906。
[0145] 在方块906中,当所有核102已写入一SYNC Cx信号时,核102被控制单元104唤醒。如上所述,由其它核102写入的x值可能不同,并且控制单元104发出最低常用C-状态值至状态暂存器106状态字242的最低常用C-状态栏位246中(每一方块318)。在方块906之前,而核
102处于睡眠状态时,其可由一唤醒事件所唤醒,像是一中断信号(例如,方块305和306)。更具体地说,但不保证该操作系统将执行所有核102的MWAIT指令,其可允许在一唤醒事件发生(例如,中断)指示核102其中之一有效地取消MWAIT指令之前,微处理器100执行与封装C-状态相关的省电操作。然而,在方块906中,一旦核102被唤醒,在时脉中断停用的期间内(例如,微码不允许其本身被中断),核102(事实上,所有的核102)由于(在方块902中)的MWAIT指令仍执行微码,并维持在微码中,直到方块924为止。换句话说,虽然所有核102中少部分已接收MWAIT指令以进入睡眠状态,单独的核102可处于睡眠状态中,但作为一封装的微处理器100不会指示该晶片集其已准备进入一封装睡眠状态。然而,一旦所有核102已同意进入一封装睡眠状态,其由在方块906中同步情况的发生有效地指示,主要核102被允许与晶片组完成一封装睡眠状态握手协议(例如,方块908、909和以下921),且未被中断及未有任何其它核102被中断。流程进行到判断方块907。
[0146] 在判断方块907中,核102判断其是否为微处理器100的主要核102。更佳地说,若判断在重设时间其为BSP时,一核102为主要核102。若该核为主要核时,流程前进到方块908;否则,流程前进到方块914。
[0147] 在方块908中,主要核102写回并使共享高速缓冲存储器119失效,接着与可以采取适当行动以减少功率消耗的该晶片集通信。举例来说,由于当微处理器100处于封装C-状态时,存储器控制器和/或外部控制器皆维持失效,因此存储器控制器和/或外部控制器可避免侦测微处理器100的本地和共享高速缓冲存储器。举另一例子说明,该晶片组可传输信号至微处理器100使微处理器100采取省电操作(例如,如下所述的确立x86-style STPCLK、SLP、DPSLP、NAP、VRDSLP信号)。更佳地说,核102基于最低常用的C-状态栏位246值进行功率管理信息的通信。在一实施例中,核102发布一I/O读取总线周期至一提供晶片组相关的电源管理信息,例如,封装C-状态值的I/O地址。流程进行到方块909。
[0148] 在方块909中,主要核102等待晶片组确立(assert)STPCLK信号。更佳地说,若STPCLK信号在一预定数亮的时脉周期后未被确立时,控制单元104在中止其正进行的同步请求后,侦测此情况,唤醒所有核102并在错误码栏位248中指示该错误。流程前进到方块914。
[0149] 在方块914中,该核102写入一SYNC14。在一实施例中,该同步请求在其唤醒事件栏位204中指定该核102未在任何唤醒事件中被唤醒。因此,控制单元104令核102进入睡眠状态。流程进行到方块916。
[0150] 在方块916中,当所有核102已写了一SYNC14时,核102由控制单元104所唤醒。流程进行到判断方块919。
[0151] 在判断方块919中,核102判断其是否为微处理器100的主要核102。若是,则流程前进到方块921;否则,流程前进到方块924。
[0152] 在方块921中,主要核102在微处理器100总线中发出一停止允许(grant)周期以通知该晶片组其可能采取跨核(例如,封装周边)与微处理器100整体相关的省电操作,像是避免微处理器100高速缓冲存储器的侦查、移除总线时脉(例如,x86-型BCLK)至微处理器100,并确立其它在总线中的信号(例如,x86-型SLP、DPSLP、NAP、VRDSLP),以使微处理器100移除时脉和/或电源至微处理器100的各个部分。虽然描述于本文中的实施例涉及到微处理器100及一与I/O读取相关的晶片集间的一握手协议(在方块908中),STPCLK的确立(在方块
909中),并停止允许周期的发布(在方块921中),其与x86基础架构系统有历史相关,应可理解的是,其它实施例假设与其它具有不同协议指令集基础架构系统相关,但也可节省电能、提高性能和/或降低复杂度。流程进行到方块924。
[0153] 在方块924中,核102写入一睡眠请求(例如,睡眠位212为设置(set)及S位222为清除(clear)的睡眠请求)至同步暂存器108。此外,同步请求在其唤醒事件栏位204指示核102仅在STPCLK非确立唤醒事件(wakeup event of the de-assertion of STPCLK,即,解除确立的STPCLK的唤醒事件)中被唤醒。因此,控制单元104令核102进入睡眠状态。流程结束于方块924。
[0154] 请参阅图10,其是显示根据图9流程图微处理器100操作实施例的时序图。在此例子中,微处理器100配置具有三个核102,标示为核0、核1及核2,如图所示。然而,应可理解的是,在其它实施例中,微处理器100可包括不同数量的核102。
[0155] 核0遇到一指定C-状态4的MWAIT指令(MWAIT C4)(每一方块902)。核0接着写一SYNC C4并进入睡眠状态(每一方块904)。核1遇到一指定C-状态3的MWAIT指令(MWAIT C3)(每一方块902)。核1接着写一SYNC C3并进入睡眠状态(每一方块904)。核2遇到一指定C-状态2的MWAIT指令(MWAIT C2)(每一方块902)。核2接着写一SYNC C2并进入睡眠状态(每一方块904)。如图所示,在每一核写入SYNC Cx的时间可能不同。事实上,在一些其它事件发生之前,例如一中断,一或多个核可能不会遇到一MWAIT指令。
[0156] 当所有核已经写入SYNC Cx时,控制单元104同时唤醒所有核(每一方块906)。主要核接着发出I/O读取总线周期(每一方块908),并等待STPCLK的确立(每方块909)。所有的核写入一SYNC14,并进入睡眠状态(每一方块914)。由于只有主要核清空(Flush)共享高速缓冲存储器119,发出I/O读取总线周期并等待STPCLK确立,因此每一核写入SYNC14的时间可能不同,如图所示。事实上,主要核在其它核后可以几百微秒的顺序写入SYNC14。
[0157] 当所有核写入SYNC14时,控制单元104同时唤醒所有核(每一方块916)。仅一主要核发出停止允许周期(Stop grant cycle)(每一方块921)。所有核写入在STPCLK非确立信号(~STPCLK)中等待的一睡眠请求并进入睡眠状态(每一方块924)。由于仅主要核发出停止允许周期,因此每一核写入睡眠请求的时间可能不同,如图所示。
[0158] 当STPCLK信号被解除确立(de-asserted)时,控制单元104唤醒所有核。
[0159] 由图10可观察到,当核0执行握手协议时,核1和核2有益地可休眠一段有效的时间。然而,应当注意的是,需将微处理器100从封装睡眠状态中唤醒所需的时间通常与休眠时间长度成正比(例如,在睡眠状态时节省多大的功率)。因此,在封装睡眠状态相对较久的情况下(或者甚至其中一单独的核102睡眠状态时间是较长的),希望能进一步减少唤醒的发生及/或与握手协议相关所需唤醒的时间。图11描述单一核102处理的握手协议,而另一核102继续处于睡眠状态的一实施例。此外,根据图11的实施例中,节省功率进一步可通过降低响应一唤醒事件而被唤醒的核102数量而取得。
[0160] 请参阅图11,其是根据本发明另一实施例的微处理器100进入一低功率封装C-状态的操作流程图。图11的实施例使用微处理器100耦接至晶片组中MWAIT指令执行的例子进行说明。然而,应可理解的是,在其它实施例中,操作系统采用其它电源管理指令,并且最后同步的核102与整合至微处理器100中,且采用与描述不同握手协议的控制器通信。
[0161] 图11的实施例在一些方面与图9的实施例相似。然而,在现存操作系统请求微处理器100进入非常低的功率状态并容忍与其相关延迟的环境中,图11的实施例被设计以便于节省潜在更大的功率。更具体地,图11的实施例有利于控制至核的功率并在必要时,如处理中断时,唤醒核中仅一核。实施例考虑在该微处理器100支持在图9及图11中两个模式的操作。此外,模式是可配置的,无论是在制造(例如,通过熔断器114)和/或经由软件控制或由微处理器100依据由MWAIT指令所指定的特定C-状态而自动决定。流程开始于方块1102。
[0162] 在方块1102中,核102遇到用于指定目标C-状态的MWAIT指令(MWAIT Cx),其在图11中表示为Cx,流程进行到方块1104。
[0163] 在方块1104中,核102写入一C位224为set及一C-状态栏位226值为x(其在图11中标示为SYNC Cx)的同步请求至其同步暂存器108中。同步请求也设置了选择性唤醒(SEL WAKE)位214及PG位208。此外,同步请求在其唤醒事件栏位204中指示核102在所有唤醒事件中被唤醒,除了STPCLK的确立和STPCLK的非确立(~STPCLK,即,STPCLK的解除确立)之外。(更佳地说,有其它唤醒事件,如AP启动时,该同步请求指定核102不被唤醒)。因此,控制单元104令核102进入睡眠状态,其包括因PG位208被设置而阻止提供功率至核102。此外,核
102写回及使本地高速缓冲存储器无效,并在写入同步请求之前储存(最好为专用随机存取存储器116)其核102的状态。当随后核102被唤醒时(例如,在方块1137,1132或1106),核102将(例如,从PRAM116)恢复其状态。如上所述,特别是相对于图3,当最后核102写入一具有选择性唤醒位214设置的同步请求时,除了最后写入核102外,该控制单元104会自动阻止所有核102的所有唤醒事件(每一方块326)。流程进行到方块1106。
[0164] 在方块1106中,当所有核102已经写入一SYNC Cx时,控制单元104唤醒最后写入的核102。如上所述,控制单元104维持其它核102的S位222设置,即使控制单元104唤醒最后写入的核102并清除S位。在方块1106之前,当核102处于睡眠状态时,其可由一唤醒事件被唤醒,如一中断。然而,一旦核102在方块1106中被唤醒时,核102因MWAIT指令(方块1102)仍执行微码,并在中断被停用的期间内(例如,该微码不允许其本身被中断)保持在微码中,直到方块1124为止。换句话说,虽然不超过所有核102已收到一MWAIT指令以进入睡眠状态,仅单独的核102会休眠,但作为封装的微处理器100不指示该晶片组其已准备好进入一封装睡眠状态。然而,一旦所有核102已同意进入一封装睡眠状态时,其通过在方块1106的同步状态发生所指示,在方块906中被唤醒的核102(最后写入的核102,其造成同步情况发生)被允许与晶片组完成封装睡眠状态握手协议(例如,如下所示的方块1108、1109和1121)而不会被中断,且没有任何其它的核102被中断。流程进行到方块1108。
[0165] 在方块1108中,核102写回并使共享高速缓冲存储器119失效,接着与晶片组通信,其可能会采取适当的行动,以减少功率消耗。流程进行到方块1109。
[0166] 在方块1109中,核102等待晶片组以确立STPCLK信号。更佳地说,如果STPCLK信号在一时脉周期预定数量后未确立时,控制单元104侦测此情况,并在终止其正进行的同步请求后唤醒所有核102,且在错误码栏位248中指示该错误。流程进行到方块1121。
[0167] 在方块1121中,核102发出一停止允许周期至总线上的晶片组。流程进行到方块1124。
[0168] 在方块1124中,核102写入一睡眠请求,例如,具有睡眠位212为设置(set)及S位222为清除(clear)及PG位208为设置(set),至同步暂存器108中。此外,同步请求在其唤醒事件栏位204中指定该核102仅在解除确立STPCLK的唤醒事件中被唤醒。因此,控制单元104令核102进入睡眠状态。流程进行到方块1132。
[0169] 在方块1132中,控制单元104侦测STPCLK非确立并唤醒核102。应注意的是,先前控制单元104唤醒核102,控制单元104也未限制电源至核102。有益的是,此时核102是唯一正在运作的核,这提供核102机会以使其执行任何必须被执行的动作,而没有其它核102正在运作。流程进行到方块1134。
[0170] 在方块1134中,核102写入至控制单元104的一暂存器(图未示出)中以解开在其对应同步暂存器108的唤醒事件栏位204中所指定每一其它核102的唤醒事件。流程进行到方块1136。
[0171] 在方块1136中,核102处理任何正进行指定该核102的唤醒事件。举例来说,在一实施例中,包括微处理器100的系统允许有向(both directed)的中断(例如,指向微处理器100一特定核的中断)和非向(non-directed)的中断(例如,当微处理器100选择时,可由微处理器100的任一核102所处理的中断)。一非向中断的例子通常被称为一“低优先级中断”。
在一实施例中,微处理器100最好指向非向中断至在方块1132的解除确立STPCLK中被唤醒的单一核102,由于它已被唤醒,并能处理该中断以期望其它核102不具有任何正进行的唤醒事件,因此可以继续睡眠并限制电源。流程返回到方块1104。
[0172] 当唤醒事件在方块1134中被解除(unblcked)时,除了在方块1132中已被唤醒的核102之外,如果核102没有指定的唤醒事件正在进行,则有利于核102继续处于睡眠状态,并在每一方块1104中限制电源。然而,当唤醒事件在方块1134中被解除时,如果一指定的唤醒事件正由核102处理,则核将不限制电源(un-power-gated),并由控制单元104唤醒。在此情况下,不同的流程开始于图11中的方块1137。
[0173] 在方块1137中,在唤醒事件在方块1134中被解除后,另一核102(例如,除了在方块1134中解除唤醒事件核102之外的核102)被唤醒。其它核102处理任何正进行并指向其它核
102的唤醒事件,例如,处理一中断。流程从方块1137进行到方块1104。
[0174] 请参阅图12,其是显示根据图11流程图的微处理器100操作一例子的时序图。在此例子中,微处理器100配置具有三个核102,标示为核0、核1和核2,如图所示。然而,应可理解的是,在其它实施例中,微处理器100可包括不同数量的核102。
[0175] 核0遇到一指定C-状态7的MWAIT指令(MWAIT C7)(每一方块1102)。在此例子中,C-状态7允许限制电源。核0接着写入一选择性唤醒位214为设置(set)(如图12中所示的“选择性唤醒”)及PG位208为设置(set)的SYNC C7,并进入睡眠状态及限制电源(每一方块1104)。核1遇到一指定C-状态为7的MWAIT指令(每一方块1102)。核1接着写入选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态及限制电源(每一方块
1104)。核2遇到一指定C-状态为7的MWAIT指令(每一方块1102)。核2接着写入具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态及限制电源(每一方块1104)。(然而,在描述于方块314一最佳的实施例中,最后写入的核无法限制电源)。如图所示,每一核的写入同SYNC C7的时间可能不同。
[0176] 当最后写入的核写入具有选择性唤醒位214为设置(set)的SYNC C7时,该控制单元104阻挡(block off)所有最后写入核的唤醒事件(每一方块326),在图12的例子为核2。此外,控制单元104仅唤醒最后写入的核(每一方块1106),因其它核持续睡眠且限制电源,而核2与晶片组执行握手协议,因此可节省功率。核2接着发出I/O读取总线周期(每一方块
1108),并等待STPCLK的确立(每一方块1109)。为了响应STPCLK,核2发出停止允许周期(每一方块1121),并写入一具有在STPCLK解除中等待PG位208为设置(set)的睡眠请求并进入睡眠状态及限制功率(每一方块1124)。上述核可以休眠并限制功率一段相对长的时间。
[0177] 当STPCLK无法确立时,控制单元104仅唤醒核2(每一方块1132)。在图12的例子中,该晶片组无法确立STPCLK以响应一非向中断的接收,其转发至微处理器100。微处理器100指示非向中断至核2,其因其它核继续处于睡眠状态及限制电源而节省功率。核解除其它核(每一方块1134)的唤醒事件并服务非向中断(每一方块1136)。核2接着重新写入一具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态且限制电源(每一方块1104)。
[0178] 当核2写入具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7时,由于其它核的同步请求仍正在进行,例如,其它核的S位222并非由核2唤醒所清除,因此该控制单元104阻挡(block off)除了核2之外所有核的唤醒事件,例如,最后写入核(每一方块326)。此外,控制单元104仅唤醒核102(每一方块1106)。核2接着发出I/O读取总线周期(每一方块1108),并等待STPCLK的确立(每一方块1109)。为了响应STPCLK,核2发出停止允许周期(每一方块1121),并写入一具有在STPCLK无法确立中等候的PG位208为设置(set)的睡眠请求,并进入睡眠状态且限制功率(每一方块1124)。
[0179] 当STPCLK无法确立时,控制单元104仅唤醒核2(每一方块1132)。在图12的例子中,STPCLK因其它非向中断而被解除确立。因此,微处理器100指示该中断至核2,这可节省功率。核2再解除其它核的唤醒事件(每一方块1134)并服务该非向中断(每一方块1136)。核2接着再写入一具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态且限制功率(每一方块1104)。
[0180] 此周期可持续相当长的时间,即仅非向中断被产生。图13是显示一指示一除了最后写入核之外不同核中断处理的例子。
[0181] 可通过比较图10和图12知道,在图12中的实施例较为有利,一旦核102开始进入睡眠状态(在图12的例子中写入SYNC C7之后),仅一核102被再次唤醒以与晶片组执行握手协议,且其它核102保持睡眠,若核102处在一相当长的睡眠状态下,则可为一显著的优点。功率节省可能非常显著,特别是在操作系统识别在系统中对于单一核102处理工作负载非常小的情况下。
[0182] 此外,有利的是,只要没有唤醒事件被指示到其它核102,则仅一核102被唤醒(以提供服务非向事件,像是一低优先级中断)。再来,若核102处于一相当长的睡眠状态,则可能具有显著的优势。除了相对不频繁的非向中断,如USB中断,尤其是在系统中不具有有效负载的情况下,功率节省可以是显著的。更进一步地,即使一唤醒事件发生被指示到另一核102时(例如,中断操作系统指示至一单一核102,像是操作系统定时器中断),实施例可有利地动态切换单一核102,其执行封装睡眠状态协议及服务非向唤醒事件,如图13所示,以便享有唤醒仅一单一核102的好处。
[0183] 请参阅图13,其是显示根据图11流程图的微处理器100操作一例子的时序图。图13的例子在许多方面与图12的例子相似。然而,在STPCLK被解除确立的第一实例中,该中断是一指向核1的中断(而不是图12例子中的一非向中断)。因此,控制单元104唤醒核2(每一方块1132),并接着在唤醒事件由核2解除(每一方块1134)后唤醒核1。核2接着再写入一具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态且限制功率(每一方块1104)。
[0184] 核1服务定向中断(每一区块1137)。核1接着再次写入具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态且限制功率(每一方块1104)在此例子中,核2在核1写入SYNC C7前写入其SYNCC7。因此,虽然核0在其写入初始SYNC C7时仍具有其S位222set,但核1当其被唤醒时S位222仍被清除。因此,当核2在解除唤醒事件后写入SYNC C7时,并非最后核写入同步C7请求,相反地,核1成为最后的核写同步C7请求。
[0185] 当核1写入一具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7时,因核0的同步请求仍正在进行(例如,其没有被核1及核2的唤醒所清除),而核2(在此例中)已写入SYNC14请求,所以该控制单元104阻挡除了核1之外所有核的唤醒事件,例如,最后写入核(每一方块326)。此外,控制单元104仅唤醒核1(每一方块1106)。核1接着发出I/O读取总线周期(每一方块1108),并等待STPCLK确立(每一方块1109)。为了响应STPCLK,核1发出停止允许周期(每一方块1121),并写入具有等待STPCLK解除确立的PG位208为设置(set)的睡眠请求,并进入睡眠状态且限制功率(每一方块1124)。
[0186] 当STPCLK被解除确立时,控制单元104仅唤醒核1(每一方块1132)。在图12的例子中,STPCLK由于一非向中断而解除确立;因此,微处理器100指示非向中断至核1,其可节省功率。由核1处理非向中断的周期可持续相当长的时间,即,仅非向中断被产生。在此种方式中,微处理器100可有利地通过指示非向中断至核102使最近的中断被指示以节省功率,其示于与切换至一不同核相关图13的例子中。核1再次解除其它核的唤醒事件(每一方块1134)并服务非向中断(每一方块1136)。核1接着再次写入一具有选择性唤醒位214为设置(set)及PG位208为设置(set)的SYNC C7,并进入睡眠状态且限制功率(每一方块1104)。
[0187] 应可理解的是,虽然电源管理指令为一x86MWAIT指令的实施例已被描述,但其它同步请求被使用以执行电源管理指令的实施例可以被考虑。举例来说,微处理器100可执行类似操作以响应由一组具有不同C-状态相关的预设I/O端口地址的读取。在举另一例子,功率管理指令可由与x86架构不同的指令集架构得到。
[0188] 多核处理器的动态重新配置
[0189] 微处理器100的每一核102基于微处理器100每一核102的配置产生配置相关的值。更佳地说,每一核102的微码产生、储存并使用配置相关的值。实施例描述配置相关值的产生可以是动态且有益的,其描述如下。配置相关值的例子包括,但不局限于以下内容。
[0190] 每一核102产生一与上述图2相关的整体核数量。与仅在核102中驻留晶体406的核102相关的核102的本地核数量256相比,整体核数量是指与微处理器100所有核102相关的整体核102的核数量。在一实施例中,核102产生整体核数量,其整体核数量为核102晶体数量258与每一晶体的核102数量的乘积及其本地核数量256的总和,如下所示:
[0191] 整体核数量=(晶体数×每一晶体的核数量)+本地核数量。
[0192] 每一核102还产生一虚拟核数量。该虚拟核数量为整体核数量减去具有一低于即时核102的整体核数量的整体核数量的停用核102数量。因此,在该微处理器100的所有核102可用的情况下,整体核数量与虚拟核数量是相同的。然而,若一或多个核102停用、有缺陷时,一核102的虚拟核数量可能不同于其整体核数量。在一实施例中,每一核102填入其虚拟核数量至其对应的APIC ID暂存器的APIC ID栏位。然而,根据另一实施例(例如,图22和图23),则不属于此种情况。此外,在一实施例中,操作系统可更新在APIC ID暂存器中的APIC ID。
[0193] 每个核102还产生一BSP旗标,其指示该核102是否为BSP。在一实施例中,一般来说(例如,当在图23中“所有核BSP”的功能停用时)一核102指定本身为引导序列处理器(Bootstrap Processor,BSP)且每一其它核102指定其本身为一应用处理器(Application Processor,AP)。在重设之后,AP核102进行初始化,接着进入睡眠状态等待BSP通知开始读取并执行指令。相反地,在AP核102初始化之后,BSP核102立即开始读取并执行系统固件的指令,例如,BIOS启动码,其用以初始化系统(例如,验证系统存储器及周边设备是否正常工作并初始化和/或配置它们)并引导操作系统,例如,载入操作系统(例如,从磁盘中载入),并将控制转移至操作系统。在引导操作系统之前,BSP决定系统配置(例如,核102或逻辑处理器在系统中的数量),并将其储存在存储器中,以使操作系统可在系统配置启动后读取。
在操作系统在被引导后,指示AP核102开始读取并执行操作系统指令。在一实施例中,一般来说(例如,当图22和图23中“修改BSP”和“所有核的BSP”的功能,分别停用时),一核102若其虚拟核数量为0时,则指定本身为BSP,而所有其它核102指定本身为一AP核102。最佳地,一核102填入其BSP旗标相关配置值至对应其APIC的APIC基底地址暂存器中的BSP旗标位。
根据一实施例中,如上所述,BSP为方块907及919中的主要核102,其执行图9的封装睡眠状态握手协议。
[0194] 每一核102还产生用于填入APIC基底暂存器的一APIC基值。APIC基底地址基于核102的APIC ID而产生。在一实施例中,操作系统可更新在APIC基底地址暂存器中的APIC基底地址。
[0195] 每一核102还产生一晶体主要指示,其指示该核102是否为包括该核102的晶体406的主要核102。
[0196] 每一核102还产生一晶片主要指示,其指示该核102是否为包括即时核102晶片的主要核,其中假设该微处理器100被配置有晶片,其详细描述如上。
[0197] 每一核102计算配置相关值并操作使用该配置相关值,使得包括微处理器100的系统正常运作。举例来说,系统基于其相关的APIC ID指示中断请求至核102。APIC ID决定核102应响应哪个中断请求。更具体地说明,每一中断请求包括一目地识别符,并且一核102仅当目地识别符与核102的APIC ID匹配时响应一中断请求(或若该中断请求识别符为一用以指示其为一请求所有核102的特殊值)。在举另一例子,每一核102必须知道其是否为BSP,以使其执行初始BIOS码并引导操作系统,且在一实施例中执行如图9所描述的封装睡眠状态握手协议。实施例描述如下(参阅图22和23),其中BSP旗标和APIC ID可因特定目的而由其正常的值中作修改,像是用于测试和/或调试。
[0198] 请参阅图14,其是显示微处理器100动态重新配置的流程图。在图14的说明中,以图4的多晶体微处理器100作为参考,其包括两个晶体406和八个核102。然而,应可理解的是,所描述的动态重新配置可使用具有不同配置的微处理器100,即具有多于两个晶体或单个晶体,且多或少于八个核102但至少两个核102。此操作是从一单一核的角度所描述,但微处理器100的每一核102根据该描述以整体动态地操作并重新配置该微处理器100。流程开始于方块1402。
[0199] 在方块1402中,微处理器100被重置,且微处理器100的硬件基于可用核102的数量及驻留于核104的晶体数量填入合适的值至每一核102的配置暂存器112中。在一实施例中,本地核数量256及晶体数量258被硬连线(hardwired)。如上所述,硬件可决定是否由熔断器114烧断或未烧断的状态启用或停用一核102。流程进行到方块1404。
[0200] 在方块1404中,核102由配置暂存器112中读取配置字252。核102接着基于在方块1402中所读取的配置字252值产生其相关值。在多晶体微处理器100配置的情况下,在方块
1404中所产生的配置相关值将不考虑其它晶体406的核102。然而,在方块1414及1424中(以及图15中方块1524)所产生的配置相关值将考虑其它晶体406的核102,如下所述。流程进行到方块1406。
[0201] 在方块1406中,核102使在本地配置暂存器112中的本地核102的致能位254值被传播至远端晶体406配置暂存器112对应的致能位254。举例来说,请参考图4的配置,一在晶体A406A中的核102使与在晶体A406A(本地晶体)的配置暂存器112中核A、B、C及D(本地核)相关的致能位254被传播至与在晶体B406B(远端晶体)的配置暂存器112中核A、B、C及D相关的致能位254。相反地,一在晶体B406B中的核102使与在晶体B406B(本地晶体)的配置暂存器112中核E、F、G及H(本地核)相关的致能位254被传播至与在晶体A406A(远端晶体)的配置暂存器112中核E、F、G及H相关的致能位254。在一实施例中,核102通过写入本地配置暂存器
112传播至其它晶体406。更佳地说,通过核102写入至本地配置暂存器112使本地配置暂存器没有发生改变,但会造成本地控制单元104传播本地致能位254值至远端晶体406中。流程进行至方块1408。
[0202] 在方块1408中,核102写入一同步情况8(在图8中标示为SYNC8)的同步请求至其同步暂存器108中。因此,控制单元104令核102进入睡眠状态。流程进行到方块1412。
[0203] 在方块1412中,当在由核集合栏位228指定的核集合中所有可用核102已写入一SYNC8时,控制单元104唤醒核102。值得注意的是,在一多晶体406微处理器100配置的情况下,同步情况发生可为一多晶体同步情况发生。也就是说,控制单元104将等待以唤醒(或在核102未设置睡眠位212从而决定不睡眠的情况下中断)核102,直到在核集合栏位228(其可以包括在晶体406中的核102)写入其同步请求为止。流程进行到方块1414。
[0204] 在方块1414中,核102再次读取配置暂存器112并基于包括由远端晶体所传送致能位254的正确值的配置字252新值产生其配置相关值,流程前进到判断方块1416。
[0205] 在判断方块1416中,核102决定其是否应停用其本身。在一实施例中,熔断器114因该微码在其重置处理中读取(判断方块1416之前),以指示核102应停用其本身而被烧断,故核102决定其需停用其本身。熔断器114可在微处理器100的制造期间或之后被烧断。在另一实施例中,更新的熔断器114值可被扫描至保持暂存器中,如上所述,并且被扫描的值指示该核102应被停用。图15是描述核102由不同的方式判断其应被停止使用的另一实施例。若核102决定其应被停用时,流程进行到方块1417;否则,流程进行到方块1418。
[0206] 在方块1417中,核102写入停用核位236以使其本身由可用核102的列表中移除,例如,清除在配置暂存器112的配置字252中其对应的致能位254。此后,核102可防止其本身执行任何更多的指令,更佳地通过设置一或多个位来以关闭其时脉信号,并移除其电源。流程在方块1417中结束。
[0207] 在方块1418中,核102写入一同步情况9(在图14中标示为SYNC9)的同步请求至同步暂存器108中。因此,控制单元104令核102进入睡眠状态。流程进行到方块1422。
[0208] 在方块1422中,当所有启用的核102已写入一SYNC9时,核102由控制单元104所唤醒。此外,在一多晶体406微处理器100配置的情况下,同步情况发生基于在配置暂存器112中的已更新值可能为一晶体同步情况发生。再者,当控制单元104决定一同步情况是否发生时,控制单元104将排除考虑在方块1417中停用其本身的核102。更详细地说明,在一情况中,在未停用其本身的核102在方块1417中写入同步暂存器108之前,所有其它核102(除了停用其本身的核102之外)写入一SYNC9,接着当未停用其本身的核102在方块1417中的停用核位设置写入同步暂存器108时,控制单元104将侦测同步情况的发生(在方块316中)。当控制单元104因停用核102的致能位254为清除的(clear)而决定同步情况已经发生时,控制单元104不再考虑停用核102。也就是说,由于所有启用核102,但不包括停用核102,已经写入SYNC9,无论停用核102是否已经写入SYNC9,因此控制单元104判断同步情况已经发生。流程进行到方块1424。
[0209] 在方块1424中,如果一核102由另一核102在方块1417中的操作而被停用时,核102再次读取配置暂存器112,并且配置字252的新值反映了一停用核102。核102则根据配置字252的新值再次产生其配置相关值,其类似于在方块1414中的方式。一停用核的存在102可能会造成一些配置相关值不同于在方块1414中所产生的新值。例如,如上所述,虚拟核数量、APIC ID、BSP旗标、BSP基址、主要晶体主要晶片可因停用核102的存在而改变。下一实施例中,在产生配置相关值后,核102其中之一(例如,BSP)将微处理器100所有核102整体的一些配置相关值写入非核专用随机存取存储器116,使其可随后被所有核102读取。举例来说,在一实施例中,整体的配置相关值由核102读取以执行一架构指令(例如,x86CPUID指令),其指令请求微处理器100有关的整体信息,像是微处理器100的核102数量。流程进行到判断方块1426。
[0210] 在方块1426中,核102移除重置并开始提取架构指令。流程结束于方块1426。
[0211] 请参阅图15,其是显示根据另一实施例中微处理器100动态重新配置的流程图。在图15的说明中,以图4的多晶体微处理器100作为参考,其包括两个晶体406和八个核102。然而,应可理解的是,所描述的动态重新配置可使用具有不同配置的微处理器100,即具有多于两个晶体或单个晶体,且多或少于八个核102但至少两个核102。此操作是从一单一核的角度所描述,但微处理器100的每一核102根据该描述以整体动态地操作并重新配置该微处理器100。更具体地说明,图15描述了一核102遇到核停用指令的操作,其流程开始于方块1502,而另一核102操作,其操作流程开始于方块1532。
[0212] 在方块1502中,核102其中之一遇到一用以指示核102停用其本身的指令。在一实施例中,该指令为一x86WRMSR指令。作为响应,核102传送一重新配置信息至其它核102并传送其一核间中断信号。更佳地说,在时间中断被停用的期间内(例如,该微码不允许其自身被中断),核102阻止微码以响应该指令,以停用其本身(在方块1502中),或响应该中断(在方块1532中),并维持在微码中,直到方块1526为止。流程由方块1502进行到方块1504。
[0213] 在方块1532中,其它核102其中之一(例如,除了在方块1502中遇到停用指令的核102之外的核)由于在方块1502中所传送的核间中断而被中断并接收重新配置信息。如上所述,虽然在方块1532中的流程由一单一核102的角度所描述,但每一其它核102(例如,并非在方块1502中的核102)在方块1532中被中断并接收该信息且执行方块1504至1526中的步骤。流程由方块1532进行到方块1504。
[0214] 在方块1504中,核102写入一同步请况10(在图15中标示为SYNC10)的同步请求至其同步暂存器108中。因此,控制单元104令核102进入睡眠状态。流程进行到方块1506。
[0215] 在方块1506中,当所有可用核102已写入一SYNC10时,核102由控制单元102所唤醒。值得注意的是,在一多晶体406微处理器100配置的情况下,同步情况发生可为一多晶体同步情况发生。也就是说,控制单元104将等待以唤醒(或在核102尚未决定进入睡眠状态的情况下中断)核102,直到在核集合栏位228(其可以包括在晶体406中的核102)所指定且可启用(其由致能位所指示)的核102写入其同步请求为止。流程进行到判断方块1508。
[0216] 在判断方块1508中,核102判断其是否为一在方块1502中被指示以停用其本身的核102。若是,流程进行到方块1517;否则,流程进行到方块1518。
[0217] 在方块1517中,核102写入停用核位236以使其本身由可用核102的列表中移除,例如,清除在配置暂存器112的配置字252中其对应的致能位254。此后,核102可防止其本身执行任何更多的指令,更佳地通过设置一或多个位来以关闭其时脉信号,并移除其电源。流程在方块1517中结束。
[0218] 在方块1518中,核102写入一同步情况11(在图15中标示为SYNC11)的同步请求至同步暂存器108中。因此,控制单元104令核102进入睡眠状态。流程进行到方块1522。
[0219] 在方块1522中,当所有启用的核102已写入一SYNC11时,核102由控制单元104所唤醒。此外,在一多晶体406微处理器100配置的情况下,同步情况发生基于在配置暂存器112中的已更新值可能为一多晶体同步情况发生。再者,当控制单元104决定一同步情况是否发生时,控制单元104将排除考虑在方块1517中停用其本身的核102。更详细地说明,在一情况中,在未停用其本身的核102在方块1517中写入同步暂存器108之前,所有其它核102(除了停用其本身的核102之外)写入一SYNC11,接着当因停用核102的致能位254为清除的(clear)而决定同步情况是否已经发生时,因控制单元104不再考虑停用核102,因此当未停用其本身的核102在方块1517中写入同步暂存器108时,控制单元104将侦测同步情况的发生(在方块316中)(请参阅图16)。也就是说,由于所有启用核102已写入一SYNC11,无论停用核102是否已写入SYNC11,控制单元104则判断同步情况已经发生。流程进行到方块1524。
[0220] 在方块1524中,核102读取配置暂存器112,其配置字252将反映在方块1517中被停用的停用核102。该核102根据配置字252的新值接着产生其配置相关的值。更佳地说,在方块1502中停用指令由系统固件(例如,BIOS设置)所执行,以及在核102停用后,系统固件执行系统的重新启动,例如,在方块1526中之后。在重新启动期间内,微处理器100可以进行不同于在方块1524中先前配置相关值产生的操作。举例来说,在重新启动期间内BSP可为一不同于产生配置相关值前的核102。再举另一例子说明,在引导操作系统之前由BSP所决定与储存至存储器以使操作系统能读取的该系统配置信息(例如,在系统中核102及逻辑处理器的数量)可不相同。举另一例子说明,仍使用的核102的APIC ID不同于产生配置相关值前的APIC ID,在此情况下,操作系统将指示中断请求且核102将响应不同于先前配置相关值产生的中断请求。再举另一例子说明,在方块907及919中执行图9封装睡眠状态握手协议的主要核102可为一不同于先前配置相关值产生的核102。流程进行到判断方块1526。
[0221] 在方块1526中,核102在方块1526中被中断之前恢复其执行的任务。流程结束于方块1526。
[0222] 在本文中所描述动态地重新配置微处理器100可用于在各种应用中。举例来说,动态重新配置可在微处理器100的开发过程用于测试和/或模拟,和/或用于现场测试中。另外,一使用者可能想知道仅使用一核102子集运行一特定的应用程序时系统的性能和/或功率消耗的总量。在一实施例中,在一核102被停用时,其可使其时脉停止及/或移除电源,以使其基本上没有消耗电源。此外,在高可靠性的系统中,每一核102可周期性地检查其它核102及核102所选择的特定核102是否发生故障,未故障的核可停用故障的核102并使剩余的核102执行如上描述的动态重新配置。在此一实施例中,控制字202可包括一附加栏位,其使写入核102指定该核102被停用并且修改在图15中所描述的操作使得一核在方块1517中可停用一不同于核102本身的核102。
[0223] 请参阅图16,其是显示根据图15流程图的微处理器100操作一例子的时序图。在此例子中,微处理器100配置具有三个核102,标示为核0、核1和核2,如图所示。然而,应可理解的是,在其它实施例中,微处理器100可包括不同数量的核102且可为单一晶体或多晶体微处理器100。在此时序图中,事件的时序向下前进。
[0224] 核1遇到一停用其本身的指令并作为响应传送一重新配置信息且中断核0和核2(每一方块1502)。核1接着写入SYNC10并进入睡眠状态(每一方块1504)。
[0225] 每一核0和核2最终从其目前的任务中被中断并阅读该信息(每一方块1532)。作为响应,每一核0和核2的写入SYNC10并进入睡眠状态(每一方块1504)。如图所示,每一核的写入同SYNC10的时间可能不同。举例来说,由于该指令的延迟,因此该指令当中断被确立时而执行。
[0226] 当所有核102写入SYNC10时,控制单元104同时唤醒所有核(每一方块1506)。核0及核2接着决定其不会停用其本身(每一判断方块1508),并写入一SYNC11并进入睡眠状态(每一方块1518)。然而,因核1决定其停用其本身,所以其写入其停用核位236(每一方块1517)。在此例子中,核1在核0及核2写入各自的SYNC11后写入其停用核位236,如图所示。然而,由于控制单元104决定S位222对于每一致能位254被设置的核102而设置,因此控制单元104侦测该同步情况发生。也就是说,即使核1的S位222未设置,其致能位254在方块1517核1的同步暂存器108写入时被清除。
[0227] 当所有可用核已写入SYNC11时,控制单元104同时唤醒所有核(每一方块1522)。如上所述,在一个多晶体微处理器100的情况下,当核1写入其停用核位236,并且本地控制单元104分别清除核1的本地致能位254,本地控制单元104也传播本地致能位254至远端晶体406。因此,远端控制单元104也侦测同步状态的发生且同时唤醒其晶体406所有可用的核。
核0和核2基于已更新配置暂存器112的值接着产生其配置相关值(每一方块1524),并恢复其中断前的活动(每一方块1526)。
[0228] 硬件信号量(HARDWARE SEMAPHORE)
[0229] 请参考图17,其是显示在图1中硬件信号量118的一方块图。硬件信号量118包括一拥有位(owned bit)1702、所有者位(owner bit)1704及一状态机1706,其状态机1706用以更新拥有位1702及所有者位1704以响应由核102读取及写入的硬件信号量118。更佳地说,为了辨识核目前拥有的硬件信号量118,所有者位1704的数量为log以2为底的微处理器100配置的核102数量。在另一实施例中,所有者位1704包括微处理器100每一核102一对应的位。值得注意的是,尽管一组拥有位1702、所有者位1704及状态机1706被描述以一硬件信号量118实现,但微处理器100可包括多个硬件信号量118,其中每一硬件信号量118都包括上述的一套硬件。更佳地说,为了执行需要独占读取共享资源的操作,在每一核102中运行的微码读取并写入该硬件信号量118以取得一由核102所共享资源的所有权,其详细描述于下方的例子中。该微码可将每一多个硬件信号量118与微处理器100不同的共享资源所有权联系在一起。更佳地说,硬件信号量118通过核102在核102的一非架构地址空间内一预设地址中所读取及写入。该非架构地址空间仅可由一核102的微码所读取,但无法直接由使用者程序码读取(例如,x86架构的程序指令)。用以更新硬件信号量118的拥有位1702及所有者位1704的状态机1706操作被描述如图18及19中,并且硬件信号量118的使用也在之后描述。
[0230] 请参阅图18,其是显示当一核102读取硬件信号量118的操作流程图。流程开始于方块1802。
[0231] 在方块1802中,一核102,标示为核x,读取硬件信号量118。如上所述,更佳地说,核102的微码读取该硬件信号量118所驻留在非架构地址空间内的预定地址。流程进行到判断方块1804。
[0232] 在判断方块1804中,状态机1706检查该所有者位1704,以决定核102是否为硬件信号量118的所有者。若是,则流程进行到方块1808;否则,流程进行到方块1806。
[0233] 在方块1806中,该硬件信号量118返回并读取核102中的一零值以指示该核102不拥有硬件信号量118,流程在方块1806中结束。
[0234] 在方块1808,该硬件信号量118返回并读取核102中的一值,以指示该核102拥有硬件信号量118,流程在方块1808中结束。
[0235] 如上所述,微处理器100可包括多个硬件信号量118。在一实施例中,微处理器100包括16个硬件信号量118,并且当一核102读取预定地址时,其接收一16位数据值,其每一位对应16个硬件信号量118其中之一不同的硬件信号量118,并指示该读取预定地址的核102是否拥有对应的硬件信号量118。
[0236] 请参阅图19,其是显示当一核102写入硬件信号量118的操作流程图。流程开始于方块1902。
[0237] 在方块1902中,一核102,标示为核x,写入硬件信号量118,例如,如上所述的在非架构的预设地址。流程进行到判断方块1804。
[0238] 在判断方块1904中,状态机1706检查该拥有位1702,以决定硬件信号量118是否为任一核102所拥有或未被占有(free)。若已被拥有,则流程进行到判断方块1914;否则,流程进行到判断方块1906。
[0239] 在判断方块1906中,状态机1706检查写入的值。若该值为1,其表示核102欲获取硬件信号量118的所有权,则流程前进到方块1908。然而,若该值为0,其表示核102欲放弃硬件信号量118的所有权,则流程进行到方块1912。
[0240] 在方块1908中,状态机1706更新拥有位1702至1,并设置所有者位1704指示核x现在拥有的硬件信号量118。流程在方块1908中结束。
[0241] 在方块1912中,该状态机1706未执行拥有位1702的更新,也未执行所有者位1704的更新,流程结束于方块1912中。
[0242] 在判断方块1914中,状态机1706检查该所有者位1704,以决定核x是否为硬件信号量118的所有者。若是,则流程进行到判断方块1916;否则,流程进行到方块1912。
[0243] 在判断方块1916中,状态机1706检查所写入的值。如果该值为1,其表示该核102欲获取硬件信号量118的所有权,则流程前进到方块1912(其中因此核102已拥有硬件信号量118,所以未有更新发生,如判断方块1914中所判断)。然而,若该值为0,其表示该核102欲放弃硬件信号量118的所有权,则流程进行到方块1918。
[0244] 在方块1918中,该状态机1706更新拥有位1702为零,以表示现在未有核102拥有硬件信号量118,流程结束于方块1918。
[0245] 如上所述,在一实施例中,微处理器100包括16个硬件信号量118。当一核102写入该预定地址时,其写入一16位数据值,其每一位对应16个硬件信号量118其中之一不同的硬件信号量118,并指示该写入预定地址的核102是否请求拥有(值为1)或放弃对应硬件信号量118的所有权(值为零)。
[0246] 在一实施例中,仲裁逻辑仲裁由核102所请求存取该硬件信号量118,以使核102由硬件信号量118序列化(Serialize)读取/写入硬件信号量118。在一实施例中,仲裁逻辑在核102间使用一循环控制公平演算法(Round-Robin Fairness Algorithm)以存取硬件信号量118。
[0247] 请参阅图20,其是显示当微处理器100使用硬件信号量118以执行需一资源独占所有权的操作流程图。更具体地说明,硬件信号量118用以在两或多个核102已分别遇到一写回且使共享高速缓冲存储器119失效指令的情况下确保在某一时间仅一核102执行一写回,并使共享高速缓冲存储器119失效。该操作是以一单一核的角度所描述,但微处理器100的每一核102根据本发明以整体确保一核102执行写回且使其它核102的操作无效。也就是说,图20的操作确保WBINVD指令过程被序列化(Serialize)。在一实施例中,图20的操作可在一微处理器100中执行,其根据图7A~7B中的实施例执行一WBINVD指令。流程开始于方块2002。
[0248] 在方块2002中,一核102遇到一高速缓冲控制指令,像是一WBINVD指令。流程进行到方块2004。
[0249] 在方块2004中,核102写入1至WBINVD硬件信号量118中。在一实施例中,该微码已分配硬件信号量118其中之一至WBINVD操作中。该核102接着读取WBINVD硬件信号量118以决定其是否获得所有权。流程进行到判断方块2006。
[0250] 在判断方块2006中,若核102决定其取得WBINVD硬件信号量118的所有权时,则流程进行到方块2008;否则,流程返回至方块2004以再次尝试获取所有权。应注意的是当即时核102的微码经由方块2004至2006间循环,其最终会由拥有WBINVD硬件信号量118的核102所中断,因为该核102正于图7A~7B中方块702中执行WBINVD指令并且传送一中断至即时核102。更佳地说,经由每次循环,即时核102的微码检查中断状态暂存器,以观察其它核102其中之一(例如,拥有该WBINVD硬件信号量118的核102)是否发送一中断至即时核102。该即时核102接着将执行图7A~7B的操作,并在方块749中根据图20恢复操作以试图获得硬件信号量118的所有权,以执行其WBINVD指令。
[0251] 在方块2008中,核102已获得所有权且流程进行到图7A~7B中的方块702以执行WBINVD指令。由于部分的WBINVD指令操作,在图7A~7B方块748中,该核102写入零至WBINVD硬件信号量118中以放弃其所有权。流程结束于方块2008。
[0252] 一类似于图20所描述的操作可由该微码执行,以获得的其它共享资源独占的所有权。一核102可获得通过使用一硬件信号量118所使用的独占所有权的其它资源为非核103的暂存器,其由核102所共享。在一实施例中,非核103暂存器包括一控制暂存器,其包括每一核102各自的栏位。该栏位控制各个核102的操作方面。由于栏位位于相同的暂存器中,当一核102欲更新其各自的栏位但无法更新其它核102的栏位时,该核102必须读取该控制暂存器、修改所读取的值,接着写回已修改的值至控制暂存器。举例来说,微处理器100可以包括一非核103性能控制暂存器(Performance Control Register,PCR),其用于控制核102的总线时脉比。为了更新其总线时脉比,一特定的核102必须读取、修改并写回PCR。因此,在一实施例中,微码被配置为当核102拥有与PCR相关的硬件信号量118时,执行一PCR的有效原子读取/修改/写回。总线时脉比经由一外部总线决定单一核102时脉频率为该支持微处理器100的时脉频率的倍数。
[0253] 另一资源是一可信赖平台模组(Trusted Platform Module,TPM)。在一实施例中,微处理器100执行运作在核102中微码的一可信赖平台模组。在一给定的即时时间中,运行在一核102及核102其中之一的微码实施TPM。然而,实施TPM的核102可能随时间而改变。通过使用与TPM相关联的硬件信号量118,核102的微码可确保仅一核102在一时间实施TPM。更具体地说明,目前正执行TPM的核102在放弃实施该TPM之前写入TPM状态至专用随机存取存储器116,并且该接管实施TPM的核102从专用随机存取存储器116中读取TPM的状态。在每一核102的微码被配置为使当核102欲成为执行TPM的核102时,核102在由专用随机存取存储器116中读取TPM状态之前首先取得TPM硬件信号量118的所有权,并开始执行TPM。在一实施例中,TPM大致符合由可信赖运算组织(Trusted Computing Group)所发布的TPM规范,像是ISO/IEC11889规范。
[0254] 如上所述,传统对多个处理器之间资源竞争的解决方法是采用在系统存储器中的软件信号量(software semaphore)。本文所描述的硬件信号量118的潜在优点是其可避免在额外存储器总线上额外传输量的产生,并且其存取速度快于存取系统的存储器。
[0255] 中断、非睡眠同步请求
[0256] 请参阅图21,其是显示根据图3流程图的核102发出非睡眠同步请求操作一例子的时序图。在此例子中,微处理器100配置具有三个核102,标示为核0、核1和核2,如图所示。然而,应可理解的是,在其它实施例中,该微处理器100可包括不同数量的核102。
[0257] 核0写入一SYNC14,其不被设置于睡眠位212中,也非设置于选择性唤醒位214(例如,一非睡眠同步请求)中。因此,控制单元104允许核0保持运行(每一判断方块312的分支“否”)。
[0258] 核1最终也写入一非睡眠SYNC14且控制单元104允许核1保持运行。最后,核2写入一非睡眠SYNC14。如图所示,每一核写入SYNC14的时间可能不同。
[0259] 当所有核已写入非睡眠同步14时,控制单元104同时发送一同步中断至每一核0、核1及核2。每一核接着接收同步中断并服务同步中断(除非该同步中断被遮蔽,在这种情况下,该微码一般会轮询(poll)该同步中断)。
[0260] 导引处理器的指定
[0261] 在一实施例中,如上所述,通常(例如,当图23“所有核BSP”的功能被停用时)一核102指定本身为引导处理器(BSP)并执行指定的任务,像是引导工作系统。在一实施例中,通常(例如,当图22及23“修改BSP”及“所有核BSP”的功能分别被停用时)虚拟核的数量由核
102BSP预设为0。
[0262] 然而,本发明人已经观察到BSP以一不同的方式被指定有可能是有利的,实施例将在下面进行描述。例如,部分微处理器100的许多测试,特别是在制造测试中,是由引导操作系统和运行程序码来执行,以确保该部分微处理器100正常进行工作。因BSP核102执行系统初始化并启动该操作系统,因此BSP核102可以AP核无法运行的方式运行。此外,由观察可知,即使是在多执行绪(Multithreaded)的操作环境中,BSP通常较AP负担该处理负荷较大的部分,因此,AP核102无法与BSP核102一样作全面的测试。最后,可能有某些动作其仅需由该BSP核102代表微处理器100作为一整体来执行,像是如图9描述的封装睡眠状态握手协议。
[0263] 因此,实施例描述任一核102可被指定为BSP。在一实施例中,在微处理器100的测试期间内,运行测试N次,其中N为微处理器100核102的数量,并在测试的每一个运行中微处理器100被重新配置以使BSP为不同的核102。这在制造过程中可以有利地提供更好的测试覆盖率,并且也有利地在微处理器100的设计过程中揭露在微处理器100中的错误。另一优点是在不同的运行中每一核102可具有一不同的APIC ID,从而响应不同的中断请求,其可提供更广泛的测试覆盖率。
[0264] 请参阅图22,其是显示配置微处理器100的一程序流程图。在图22的描述参考图4中的多晶体微处理器100,其包括两个晶体406和八个核102。然而,应可理解的是,描述于此的动态重新配置可使用具有不同配置的一微处理器100,即具有多于两个晶体或单个晶体,且多或少于八个核102但至少两个核102。此操作是从一单一核的角度所描述,但微处理器100的每一核102根据该描述以整体动态地操作并重新配置该微处理器100。流程开始于方块2202。
[0265] 在方块2202中,微处理器100被重置,并执行其初始化的初始部分,更佳地一方式其类似于上面图14所描述的方式。然而,配置相关值的产生,像是图14中的方块1424,尤其是该APIC ID和BSP旗标,以方块2203至2204中所描述的方式执行。流程进行到方块2203。
[0266] 在方块2203中,核102产生其虚拟核数量,更佳地描述于图14中。流程进行到判断方块2204。
[0267] 在判断方块2204中,核102取样一指示以决定一功能是否可启用。该功能在本文中称为“修改BSP”功能。在一实施例中,烧断一熔断器114可修改BSP的功能。更佳地说,在测试过程中,并非烧断修改BSP功能的熔断器114,而是一真值(True)被扫描至与修改BSP功能熔断器114相关的保存暂存器位中,如上述图1中所示,以使该修改BSP功能可启用。在此方式中,该修改BSP功能在部分微处理器100中并非永久可启用,但却在供电(power-up)后停用。更佳地说,在方块2203至2214中的操作由核102的微码所执行。若该修改BSP功能被启用时,流程进行到方块2205。否则,流程进行到方块2206。
[0268] 在方块2205中,核102修改在方块2203中所产生的虚拟核数量。在一实施例中,核102修改虚拟核数量以产生在方块2203中所产生虚拟核数量的一循环函数(Rotate 
function)的结果及一循环量,如下所示:
[0269] 虚拟核数量=循环(循环量,虚拟核数量)。
[0270] 循环函数,在一个实施例中,通过循环数在核102之间循环虚拟核数。循环量为烧断熔断器114的一值,或更佳地说,其在测试过程中被扫描至保持暂存器中。表1显示每一核102的虚拟核数,其序对(晶体数量258、本地核数量256)是显示在一示范配置的左侧行中,而每一循环量是显示在顶行中,其晶体数量406为二且每一晶体406的核102数量为4,以及所有核102可被启用。在此种方式中,测试器被授权使核102产生其虚拟核数、及例如任何有效值的APIC ID。虽然用于修改虚拟核数描述于的一实施例中,但其它实施例也可被预期。
例如,循环方向可以相反表示于表格1中。流程进行到方块2206。
[0271] 表1
[0272]  0 1 2 3 4 5 6 7
(0,0) 0 7 6 5 4 3 2 1
(0,1) 1 0 7 6 5 4 3 2
(0,2) 2 1 0 7 6 5 4 3
(0,3) 3 2 1 0 7 6 5 4
(1,0) 4 3 2 1 0 7 6 5
(1,1) 5 4 3 2 1 0 7 6
(1,2) 6 5 4 3 2 1 0 7
(1,3) 7 6 5 4 3 2 1 0
[0273] 在方块2206中,核102将在方块2203中产生的预设虚拟核数量或在方块2203中产生的已修改的值填入本地APIC ID暂存器中。在一实施例中,APIC ID暂存器可由该核102在存储器地址0x0FEE00020中从其本身中读取(例如,通过通过BIOS和/或操作系统)。然而,在另一实施例中,APIC ID暂存器可通过核102在MSR地址0x802读取。流程进行到判断方块2208。
[0274] 在判断方块2208中,核102决定其在方块2208所填入的APIC ID是否为零。若是,则流程进行到方块2212;否则,流程进行到方块2214。
[0275] 在方块2212中,核102将其BSP旗标设置为真(true),以表示核102为BSP。在一实施例中,BSP旗标为该核102的x86APIC基址暂存器(IA32_APIC_BASE MSR)的一位。流程进行到判断方块2216。
[0276] 在方块2214中,核102将BSP旗标设置为假(false),以表示核102不为BSP,例如,在一AP中。流程进行到判断方块2216。
[0277] 在判断方块2216中,核102判断其是否为BSP,例如,是否指定本身为在方块2212中的BSP核102,而非指定本身为在方块2214中的AP核102。若是,则流程进行到方块2218;否则,流程进行到方块2222。
[0278] 在方块2218中,核102开始提取并执行系统初始化固件(例如,BSP BIOS引导程序码)。这可包括与BSP旗标和APIC ID相关的指令,例如,读取APIC ID暂存器或APIC基址暂存器的指令,在此情况下,核102恢复在方块2206及2212/2214写入的值。其还可包括作为微处理器100唯一核102代表微处理器100作为一整体以执行操作,像是图9描述的封装睡眠状态握手协议。更佳地说,BSP核102在一已定义架构重置向量中开始获取并执行系统初始化固件。例如,在x86架构中,重置向量指向0xFFFFFFF0。更佳地说,执行系统初始化固件包括引导该操作系统,例如,载入该操作系统并转变为控制操作系统。流程进行到方块2224。
[0279] 在方块2222中,核102中止其本身并等待来自BSP的启动序列以开始提取并执行指令。在一实施例中,从BSP所接收的启动序列包括到AP系统初始化固件的一中断向量(例如,AP BIOS程序码)。这可包括与BSP旗标及APIC ID相关的指令,在此种情况下,核102恢复在方块2206及2212/2214中所写入的值。流程进行到方块2224。
[0280] 在方块2224中,当核102执行指令时,该核102基于在方块2206中写在其APIC ID暂存器的APIC ID接收中断请求并响应所述中断请求。流程结束于方块2224。
[0281] 如上所述,根据一实施例中,虚拟核数为零的核102预设为BSP。然而,发明人已经观察到,可能具有对所有核102被指定为BSP有利的情况,实施例将描述于下方。举例来说,微处理器100开发人员已投入显著大量的时间和成本来研发一设计用以在单一执行绪(single-threaded)的一单核中运行的庞大测试主体,并且开发人员想使用单核测试以测试多核微处理器100。例如,该测试可能在x86实际模式老旧且知名的DOS操作系统中运行。
[0282] 在每一核102运行这些测试可以在一使用图22中所描述的该修改BSP功能以连续的方式中完成及/或通过烧断熔断器或扫描至保持暂存器修改熔断器值以停用所有核102,但一核102用来进行测试。然而,发明人已经理解这将比在所有核102中同时运行测试需要更多的时间(例如,在一4核微处理器100的情况下大约为4倍),此外,所需测试每一单独微处理器100部分的时间是宝贵的,尤其是当制造数十万或更多的微处理器100部分,特别是当许多测试在非常昂贵的测试设备中被测试。
[0283] 此外,其它可能为当在同一时间运行一个以上的核102(或所有核102)时,由于其会产生更多的热能及/或吸引更多的能量,在微处理器100逻辑中的一速度路径将被施加更多压力的情况。在此连续的方式中运行的测试可能不会产生额外的压力并揭露该速度路径。
[0284] 因此,实施例描述所有核102可被动态指定该BSP核102以使所有核102可同时执行一测试。
[0285] 请参阅图23,其是显示根据另一实施例中配置微处理器100的一程序流程图。在图23的描述参考图4中的多晶体微处理器100,其包括两个晶体406和八个核102。然而,应可理解的是,描述于此的动态重新配置可使用具有不同配置的一微处理器100,即具有多于两个晶体或单个晶体,且多或少于八个核102但至少两个核102。此操作是从一单一核的角度所描述,但微处理器100的每一核102根据该描述以整体动态地操作并重新配置该微处理器
100。流程开始于方块2302。
[0286] 在方块2302中,微处理器100被重置,并执行其初始化的初始部分,更佳地一方式其类似于上面图14所描述的方式。然而,配置相关值的产生,像是图14中的方块1424,尤其是该APIC ID和BSP旗标,以方块2304至2312中所描述的方式执行。流程进行到判断方块2304。
[0287] 在判断方块2304中,核102侦测一功能可被启用。该功能在本文中称为“所有核BSP”功能。更佳地说,烧断熔断器114能使所有核BSP功能被启用。更佳地说,在测试过程中,并非烧断所有核BSP功能的熔断器114,而是一真值(True)被扫描至与所有核BSP功能熔断器114相关的保存暂存器位中,如上述图1中所示,以使该所有核BSP功能可启用。在此方式中,该所有核BSP功能在部分微处理器100中并非永久可启用,但却在供电(power-up)后停用。更佳地说,在方块2304至2312中的操作由核102的微码所执行。若该所有核BSP功能被启用时,流程进行到方块2305。否则,流程进行到图22中方块2203。
[0288] 在方块2305中,无论本地核数量256及核102的晶体258数量为何,核102设定其虚拟核数量为零。流程进行到方块2306。
[0289] 在方块2306中,核102将在方块2305中所设置值为零的虚拟核数量填入本地APIC ID暂存器。流程进行到方块2312。
[0290] 在方块2312中,无论本地核数量256及核102的晶体258数量为何,核102设置其BSP旗标为真(True)以表示该核102为BSP。流程进行至方块2315。
[0291] 在方块2315中,每当一核102执行一存储器存取请求时,微处理器100分别修改每一核102存储器存取请求地址的较高地址位,使得每一核102存取其单独的存储器空间。也就是说,根据产生存储器存取请求的核102,微处理器100修改较高地址位,以使较高地址位具有每一核102一独特的值。在一实施例中,微处理器100修改由烧断熔断器114的值所指示的较高地址位。在另一实施例中,微处理器100基于本地核数量256及核102的晶体数量258修改较高地址位。举例来说,在一微处理器100中核数量为4的实施例中,微处理器100修改该存储器地址较高的两个位,并在每一核102较高的两个位中产生一独特的值。实际上,可由微处理器100寻址的存储器空间被分成N个子空间,其中N是核102的数量。测试程序的开发使得其限制自己本身以指定在N个子空间中最低子空间的地址。例如,假设微处理器100能找寻存储器64GB的地址以及微处理器100包括四个核102。该测试被研发仅存取存储器最低的8GB。当核0执行存取存储器地址A(在存储器中较低的8GB)的指令时,微处理器100在存储器总线A(未修改)中产生一地址;当核1执行存取相同存储器地址A的指令时,该微处理器100在存储器总线A+8GB中产生一地址;当核2执行存取相同存储器地址A的指令时,该微处理器100在存储器总线A+16GB中产生一地址;以及当核3执行存取相同存储器地址A的指令时,该微处理器100在存储器总线A+32GB中产生一地址。在此种方式中,有利地,核102将不会在其存取存储器中相冲突,其可使测试正确地执行。更佳地说,单一执行绪测试被执行于一独立测试机器中,其能够单独测试该微处理器100。该微处理器100开发人员开发测试数据并由测试机器提供给该微处理器100,相反地,该微处理器100开发人员研发结果数据,其为由测试机器在一存储器写入存取期间内比较该微处理器100所写入的数据结果,以确保该微处理器100写入正确的数据。在一实施例中,共享高速缓冲存储器119(例如,最高级高速缓冲存储器,其产生用于外部总线处理中的地址)为微处理器100的一部分,其配置用以当所有核BSP功能启用时修改较高地址位。流程进行到方块2318。
[0292] 在方块2318中,核102开始提取并执行系统初始化固件(例如,BSP BIOS引导程序码)。这可包括与该BSP旗标和APIC ID相关的指令,例如,读取该APIC ID暂存器或APIC基址暂存器的指令,在此情况下,该核102恢复在方块2306中所写入的零值。更佳地说,该BSP核102在一架构定义的重置向量(Architecturally-defined reset vector)中开始读取并执行系统初始化固件。例如,在x86架构中,重置向量指向0xFFFFFFF0地址。更佳地说,执行该系统初始化固件包括引导操作系统,例如,载入该操作系统并且变更为控制该操作系统。流程进行到方块2324。
[0293] 在方块2324中,当核102执行指令时,该核102基于在方块2306中写在其APIC ID暂存器值为零的APIC ID值接收中断请求并响应所述中断请求。流程结束于方块2324。
[0294] 虽然一所有核102被指定为该BSP的实施例中已被描述于图23中,但其它实施例可以考虑多个但少于所有核102被指定为该BSP。
[0295] 虽然实施例以一x86型系统内容被描述,其系统中每一核102使用一本地APIC且具有在本地APIC ID及BSP指定之间的一关联性,应可理解的是,该引导处理器的指定并不局限于x86的实施例,但可在具有不同系统架构的系统中使用。
[0296] 用于多核的微码修补(PATCH)的传播
[0297] 如先前所观察,有可能主要由微处理器的微码执行的许多重要的功能,且特别地,其需在执行于该微处理器多核中的该微码实例间正确的通信及协调。由于微码的复杂性,因此一显著的机率显示错误将存在于需修正的微码中。这可经由使用新微码指令取代造成该错误的旧微码指令的微码修补来完成。也就是说,该微处理器包括益于微码修补的特定硬件。在一般情况下,理想是将该微修改应用到该微处理器的所有核。传统上,其已通过在每一核中单独执行一架构指令以执行修补。然而,传统的方法可能会有问题。
[0298] 首先,该修补与使用微码例子(例如,核同步、硬件信号量使用)的核间通信相关或与需微码核间通信的功能(例如,跨核调整请求、高速缓冲控制操作或电源管理,或动态多核微处理器配置)相关。分别在每一核上架构修补应用程序的执行可能会产生一时间视窗,其微码修补应用到一些核中但并非用应用到其它核中(或一先前修补应用在一些核以及新的修补应用到其它核)。这可能会造成核间一通信失败及该微处理器不正确的操作。如果该微处理器的所有核使用相同的微码修补,其它可预期及不可预期的问题也可能产生。
[0299] 其次,该微处理器的架构指定许多功能,其在某些实例(instance)中可由该微处理器所支持,且不被其它微处理器支持。在操作期间中,微处理器能够与支持该特定功能的系统软件进行通信。例如,在一x86体系架构微处理器的情况下,x86CPUID指令可由系统软件执行以决定所支持的功能设置。然而,决定功能设置的指令(例如,CPUID)分别在该微处理器的每一核中执行。在一些情况下,一功能可因一存在于该时间中的错误而被停用,并解除该微处理器。然而,随后一修复此错误的微码修补可被开发出,以使此功能可在修补应用后被启用。然而,如果修补是以传统的常规实施(例如,通过在每一核中应用修补指令的个别指令,分别实施于每一核),不同的核可取决于该修补是否已经应用在核中,在一给定的时间点指示不同的功能配置。这可能是有问题的,尤其是当该系统软件(如操作系统,例如,帮助核间执行绪迁移),期望该微处理器的所有核具有相同的功能设置。尤其是,已观察到一些系统软件仅获得一核的功能配置,并假设其它核芯具有相同的功能配置。
[0300] 再者,每一核控制和/或与核所共享的非核资源(例如,同步相关的硬件、硬件信号量、共享PRAM、共享高速缓冲器或服务处理单元)通信的微码实例。因此,由于在核中其中之一具有使用微码修补而其它核并无使用(或两个核具有不同的微码修补),一般来说,两种不同核的微码同时以两种不同的方式进行控制或与非核资源进行通信可能是有问题的。
[0301] 最后,在该微处理器的该微码修补硬件也可以使用传统方式的修补,但其可能造成其它核修补应用及由一核修补操作的干扰,例如,若修补硬件的部分在核间共享。
[0302] 更佳地说,在架构指令级以一原子(atomic)方式应用微码修补至一多核微处理器的实施例以解决描述于本文中的问题。首先,将修补应用在整体微处理器100中以响应在单一核102中一架构指令的执行。即,实施例无须要求系统软件在每一核102中执行一应用微码修补指令(如下所描述)。更具体地说,遇到该应用微码修补指令的单一核102将传送信息并中断其它核102以引起其微码用于修补部分的实例,及所有微码实例与另一微码合作使得该微码修补应用至每一核102的微码修补软件中,并当在所有核102中停用中断时,共享该微处理器100的修补硬件。其次,在所有核102中运行并实现该原子修补应用机制的微码实例与另一微码相合作,以使其避免执行任一的架构指令(除了一应用微码修补指令外)在该微处理器100的所有核102已同意应用此修补后,直到所有核102完成为止。也就是说,当任一核102使用该微码修补时,没有核102执行一架构指令。此外,在一更佳的实施例中,所有核102到达该微码相同的地方以执行具有停用中断的修补应用,并在之后核102仅执行用于修补的该微码指令直到该微处理器100的所有核确认该修补已被使用为止。也就是说,当该微处理器100的任一核102正使用该修补时,核102除了使用微码修补的微码指令外,没有核102执行微码指令。
[0303] 请参照图24,其是显示根据另一实施例的一多核微处理器100的方块图。该微处理器100在许多方面相似于图1的微处理器100。然而,图24的微处理器100还包括在其非核103中的服务处理单元(Service Processing Unit,SPU)2423、服务处理单元(SPU)起始地址暂存器2497、一非核微码只读存储器(Read Only Memory,ROM)2425及一非核微码修补随机存取存储器(Random Access Memory,RAM)2408。此外,每一核102包括一核PRAM2499、一修补可定址内容存储器(Content Addressable Memory,CAM)2439及一核微码ROM2404。
[0304] 微码包括微码指令。该微码指令为储存在该微处理器100一或多个存储器(例如,非核微码ROM2425、非核微码修补RAM2408及/或核微码ROM2404)中的非架构指令,其中该微码指令由一核102基于储存在该非架构微程序计数器(Micro-program Counter,Micro-PC)中一提取(fetch)地址所提取,并且由该核102使用以实现该微处理器100指令集结构的指令。更佳地说,该微码指令由一微转译器(Microtranslator)转译成微指令,其微指令由该核102的执行单元所执行,或在另一实施例中,该微码指令直接由执行单元所执行,在此情况下,微码指令为微指令。该微码指令为非架构指令意指其并非该微处理器100的指令集架构(Instruction Set Architecture,ISA)的指示,但其根据一不同于该架构指令集的指令集而被编码。该非架构微程序计数器不由该微处理器100的指令集架构所定义,并且不同于该核102的架构定义(Architecturally-defined)程序计数器。该微码用以实现如下该微处理器的ISA指令集的一些或所有指令。为了响应解码一微码执行ISA指令,该核102转变为控制一与该ISA相关的一微码例行程序(Routine)。该微码例行程序包括微码指令。该执行单元执行该微码指令,或根据较佳的实施例,该微码指令进一步被转译为由该执行单元所执行的微指令。该微码指令(或由该微码指令所转译的微指令)由该执行单元所执行的执行结果为由该ISA指令所定义的结果。因此,与该ISA指令相关的微码(或从该微码例行程序指令转译的微指令)例行程序的共同执行是由该执行单元“实施(Implement)”该ISA指令。也就是说,通过执行微码指令(或从该微码指令转译的微指令)的执行单元所执行的共同执行完成由在该ISA指令所指定的输入中的该ISA指令所指定的操作,以产生一由该ISA指令所定义的结果。此外,当该微处理器为了配置该微处理器而重置时,该微码指令可以被执行(或转译为被执行的微指令)。
[0305] 该核微码ROM2404拥有由包括该核微码ROM2404的特定核102所执行的微码。该非核微码ROM2425也拥有由该核102所执行的微码。然而,与核微码ROM2404相比,该非核ROM2425由核102所共享。更佳地说,由于该非核ROM2425的存取时间大于该核ROM2404,因此该非核ROM2425拥有需较少性能及/或较不频繁地执行的微码例行程序。此外,该非核ROM2425拥有由该SPU2423所提取并执行的程序码。
[0306] 该非核微码修补RAM2408也由核102所共享。该非核微码修补RAM2408拥有由核102所执行的微码指令。当该提取地址与该修补CAM2439中项目(entry)其中之一的内容相匹配时,则该修补CAM2439拥有为响应一微码提取地址而由该修补CAM2439所输出至一微序列器(Microsequencer)的修补地址。在此情况下,该微序列器输出的该修补地址为该微码提取地址,而非下一顺序的提取指地址(或在分支型指令情况下的目标地址),以作为该非核修补RAM2408输出一修补微码指令的回复。例如,因为修补微码指令和/或在其之后的微码指令为一错误来源,因此一修补微码指令由在非核修补RAM2408中提取实行,而非从该非核ROM2425或该核ROM2404中提取的一微码指令。因此,该修补微码指令有效地替换、或修补在该原始微码提取地址中驻留在该核ROM2404或该非核微码ROM2425非预期的微码指令。更佳地说,该修补CAM2439及修补RAM2408被载入以响应包含在系统软件中的架构指令,像是BIOS或在该微处理器100中运行的操作系统。
[0307] 在其它事件中,该非核PRAM116被该微码用以储存该微码所使用的值。这些值的一部分有效函数为常数
[0308] 除可能经由一修补或为响应一明确修改该值的指令(例如,一WRMSR指令)的执行之外,当该微处理器100被重置且在该微处理器100的操作期间内不被修改时,由于其为储存于该核微码ROM2404或该非核微码ROM2425的立即值(immediate value)或在该微处理器100被制造或由该微码写入至该非核PRAM116的时间点烧断该熔断器114。有利的是,这些值可经由本文中所描述的修补机制而修改,无需改变成本可能非常昂贵的该核微码ROM2404或该非核微码ROM2425,且也无需一或多个未烧断的熔断器114。
[0309] 此外,该非核PRAM116用以保存由该SPU2423所提取并执行的修补码,如本文所述。
[0310] 该核PRAM2499,其类似于该非核PRAM116,为专用(private)的,或非架构的,其意指该核PRAM2499并不位于该微处理器100架构使用者程序地址空间中。然而,不像该非核PRAM116,每一PRAM2499仅由其各自的核102所读取且不由其它核102所共享。像该非核PRAM116一样,该核PRAM2499也由该微码使用以储存由该微码所使用的值。有利的是,这些值可经由本文中所描述的修补机制而修改,并无需改变该核微码ROM2404或非核微码ROM2425。
[0311] 该SPU2423包括一已储存程序处理器,其为一附属且不同于每一核102的附属物(adjunct)。虽然所述核102结构上可执行所述核102的该ISA的指令(例如,x86的ISA指令),但该SPU2423在结构上无法这样做。因此,举例来说,该操作系统无法在该SPU2423中运行,也无法使所述核102的ISA操作系统调度程序(例如,x86的ISA指令)在该SPU2423中运行。换言之,该SPU2423不为由该操作系统所管理的一系统资源。更确切地说,该SPU2423执行用于调整该微处理器100的操作。此外,该SPU2423可帮助测量所述核102的性能及其它功能。更佳地说,该SPU2423比所述核102较小、较不复杂并且具有更少的功率消耗(例如,在一实施例中,该SPU2423包括内建的时脉控(Clock Gating))。在一实施例中,SPU2423包括一FORTH CPU核。
[0312] 可与由所述核102所执行的除错指令一起发生的非同步事件可能无法处理得很好。然而,有利的是,该SPU2423可以由一核102命令以侦测该事件,并执行操作,像是建立一纪录档(log)或修改该核102各方面的行为和/或该微处理器100外部总线接口,以作为侦测此事件的响应。该SPU2423可提供该纪录档信息到该使用者,并且其也可以与追踪器互动以请求该追踪器提供该纪录档信息或请求胎追踪器执行其它动作。在一实施例中,该SPU2423能够访问控制该存储器子系统的暂存器及每一核102的可编程中断控制器,以及该共享高速缓冲暂存器119的控制暂存器。
[0313] 该SPU2423可侦测事件的例子包括如下:(1)一核102正运作,例如,该核102在一数量的时钟周期中尚未引退(retire)可编程的任何指令;(2)一核102载入由存储器中一非高速缓冲区域内的数据;(3)在该微处理器100中温度发生改变;(4)该操作系统请求在该微处理器100总线时脉比的一变化及/或请求在该微处理器100电压平的一变化;(5)符合本身的该微处理器100改变电压水平和/或总线时脉比,例如,以达成省电及改善性能;(6)一核102的一内部计时器逾时;(7)一高速缓冲窥探(snoop),其碰撞到一修改后的高速暂存行(Cache line),而导致该高速暂存行被写回至存储器中;(8)该微处理器100的温度、电压、总线时脉比超出一各自的范围;(9)一外部触发信号在该微处理器100的一外部管脚(pin)中由一使用者所确立。
[0314] 有利的是,因该SPU2423独立运行所述核102的程序码132,其不具有像是在该核102中执行追踪器微码(tracer code)相同的限制。因此,该SPU2423可侦测或被通知独立于该核102指令执行边界的事件并且不中断该核102的状态。
[0315] 该SPU2423具有其执行本身的程序码。该SPU2423可以从非核微码ROM2425或从非该核PRAM116中提取其程序码。即,更佳地说,该SPU2423与该非核ROM2425和该非核PRAM116共享运行于该核102中的微码。该SPU2423使用该非核PRAM116以储存其数据,包括该纪录档。在一实施例中,该SPU2423还包括其本身的序列端口接口,其可传送该纪录档至一外部装置。有利的是,该SPU2423也可指示在一核102中运行的追踪器以将该纪录档信息由非核PRAM116储存至系统存储器中。
[0316] 该SPU2423通过状态暂存器及控制暂存器与所述核102通信。该SPU状态暂存器包括对应描述于上方且该SPU2423可侦测每一事件的一位。为了通知该SPU2423一事件,该核102在对应该事件的SPU状态暂存器中设置一位。一些事件位由该微处理器100的硬件所设置以及一些由所述核102的微码所设置。该SPU2423读取该状态暂存器以决定已发生的事件的列表。一控制暂存器包括对应每一操作的位,其每一操作为该SPU2423响应侦测在状态暂存器中指定事件其中之一的一操作。也就是说,对于在该状态暂存器每个可能的事件,一组操作位存在于该控制暂存器中。在一实施例中,每一事件有16个动作位。在一实施例中,当该状态暂存器被写入以指示一事件时,其会造成该SPU2423中断,以作为该SPU2423读取该状态暂存器的响应,以决定哪些事件已经发生。有利的是,如此可通过减少该SPU2423轮询该状态暂存器的需求以节省电源。该状态暂存器及控制暂存器也可由执行指令(例如,RDMSR和WRMSR指令)的使用者程序读取和写入。
[0317] 该SPU2423可执行作为侦测一事件响应的该组操作包括以下各项。(1)将该纪录档信息写入该非核PRAM116。对于每一写入纪录档的操作,多个的操作位存在以使程序设计人员指定该仅特定纪录档信息的子集应被写入。(2)由该非核PRAM116中写入该纪录档信息至该序列端口接口。(3)写入控制暂存器其中之一以设定追踪器的一事件。也就是说,该SPU2423可中断一核102并导致该追踪器微码需执行一组与该事件相关的操作。该操作可通过先前的使用者所指定。在一实施例中,当该SPU2423写入该控制暂存器以设置该事件时,这会造成该核102一机器检查异常,并且该机器检查异常处理机检查以查看追踪器是否被启动。若是,则机器检查异常处理机转换控制至该追踪器。该追踪器读取该控制暂存器并且若设置在该控制暂存器中的事件为使用者已启用该追踪器的事件时,该追踪器通过与事件相关的使用者执行先前所描述的操作。例如,该SPU2423可设置一事件以造成该追踪器将储存在非核PRAM116中的纪录档信息写入系统存储器中。(4)写入一控制暂存器,以造成该微码分支到由该SPU2423所指定的一微码地址。这是特别有助于如果该微码在一无限循环中,使得该追踪器不能执行任何有意义的操作,但该核102仍执行并退回(retire)该指令,其意指该处理器正执行的事件将不会发生。(5)写入一控制暂存器以使一核102重置。如上面所提到,该SPU2423可侦测一正进行的核102(例如,对一些时间可编程量而言,尚未退回(retire)任何指令)并重置该核。该重置微码会检查以查看该重置是否由该SPU2423所发起,若是,在初始化该核102的过程中,有助于在清除该纪录档信息前写出该纪录档信息至系统存储器中。(6)连续记录档事件。在此种模式下,并非等待一事件被中断,而是该SPU2423在一检查该状态暂存器的循环(loop)中旋转(spin),并连续地记录信息至表示于此与事件相关的该非核PRAM116,且可选择额外将该纪录档信息写入该序列端口接口。(7)写入一控制暂存器,以停止一核102发出请求到该共享高速缓冲存储器119,及/或停止该共享高速缓冲存储器119确认请求至核102。这在移除存储器子系统相关的设计错误特别有用,像是页面转换表(tablewalk)硬件错误,甚至可在该微处理器100操作期间内修改该错误,像是通过一修补修改该SPU2423程序码,如下所述。(8)写入到该微处理器100一外部总线接口控制器的控制暂存器,以执行在外部系统总线中的处理,像是特定的周期或存储器读取/写入周期。(9)写入至一核102可编程中断控制器的一控制暂存器,例如,产生一中断到另一核102或模拟一I/O装置到核102或固定修复在该中断控制器中的一错误。(10)写入一该共享高速缓冲存储器119的一控制暂存器以控制其大小,例如,以不同方式停用或启用相关的共享高速缓冲存储器119。(11)写入核102各种功能单元的控制暂存器以配置不同的性能特征,像是分支预测(branch prediction)和数据预提取(prefetch)演算法。如下所述,该SPU2423程序码可有助于被修补,即使在完成该微处理器100的设计且已制造出该微处理器100之后,使该SPU2423执行如本文所述的动作修补设计的缺陷或执行其它功能。
[0318] 该SPU起始地址暂存器2497保持当该SPU2423移除重置时,开始提取指令的该地址。该SPU起始地址暂存器由核102写入。该地址可位于非核PRAM116或非核微码ROM2425中。
[0319] 请参阅图25,其是显示根据本发明一实施例一微码修补2500的架构方块图。在图25的实施例中,该微码修补2500包括下列部分:一标头2502;一即时修补2504;该即时修补
2504的校对和(Checksum)2506;一CAM数据2508;一核PRAM修补2512;该CAM数据2508及核PRAM修补2512的一校对和2514;一RAM修补2516;一非核PRAM修补2518;该核PRAM修补2512及RAM修补2516的一校对和2522。校对和2506/2514/2522在被载入至该微处理器100之后,使该微处理器100核对修补各个部分的完整性。更佳地说,该微码修补2500由系统存储器和/或一非挥发性(Non-volatile)系统所读取,举例来说,像是从具有一系统BIOS或可扩展固件的ROM或FLASH存储器中。标头2502描述该修补2500的各部分,像是其大小、在其载入修补部分各自修补相关存储器中的位置、及一指示该部分是否包含一应用于该微处理器100有效修补的一有效旗标。
[0320] 该即时修补2504包括程序码(例如,指令、较佳的微码指令)以被载入至图24的非核微码修补RAM2408(例如,在图26A~26B的方块2612),接着由每一核102所执行(例如,在图26A~26B的方块2616)。该修补2500还指定该即时修补2504被载入至该修补RAM2408中的地址。更佳地说,该即时修补2504码修改由该重置微码所写入的预设值,像是被写入影响该微处理器100配置的配置暂存器的值。在即时修补2504由在该修补RAM2408外的每一核所执行后,并不会再次被执行。此外,后续该RAM修补2516载入至该修补RAM2408的过程(例如,在图26A~26B中的方块2632)可能会覆盖在该修补RAM2408的即时修补2504。
[0321] 该RAM修补2516包括用以取代在核ROM2404或需修补的非核ROM2425中的修补微码指令。该RAM修补2516还包括在当该修补2500被使用时,该修补微码指令被写入至该修补RAM2408中该位置的地址(例如,在图26A~26B的方块2632)。该CAM数据2508被载入至每一核102的该修补CAM2439(例如,在图26A~26B的方块2626)。以上是以该修补CAM2439的操作角度所描述,该CAM数据2508包括一或多个项目,每一项目包括一对微码提取地址。该第一地址是被提取的微码指令以及由该提取地址匹配的内容。该第二地址是指向在该修补RAM2408中的地址,其该修补RAM2408具有取代被修补微码指令而被执行的该修补微码指令。
[0322] 不同于该即时修补2504,该RAM修补2516维持在该修补RAM2408中,并(与根据修补CAM数据2508的该修补CAM2439操作一起)继续运作以修补该核微码ROM2404和/或该非核微码ROM2425,直到由另一修补2500或该微处理器100重置为止。
[0323] 该核PRAM修补2512包括被写入至每一核102的该核PRAM2499的数据及在该数据每一项目被写入该核PRAM2499内的地址(例如,在图26A~26B的方块2626)。该非核PRAM修补2518包括被写入至该非核PRAM116的数据及在该数据每一项目被写入该非核PRAM116内的地址(例如,在图26A~26B的方块2632)。
[0324] 请参阅图26A~26B,其是显示图24中该微处理器100的一操作以传播图25的一微码修补2500至该微处理器100的多个核102的一流程图。该操作是以一单一和新的角度所描述,但该微处理器100每一核102根据本发明操作以共同传播该微码修补至该微处理器100的所有核102。图26A~26B描述一遇到该指令的核使用一修改至该微码的操作,其流程开始于方块2602,而其它核102的操作,其流程开始于方块2652。应可理解的是,多个修补2500可在该微处理器100操作期间内的不同时间中应用至该微处理器100。例如一第一修补2500当包括该微处理器100的该系统被引导时,像是在BIOS初始化期间内,根据描述于本文中原子的实施例而被使用,以及一第二修补2500在该操作系统运行后而被使用,其对以清除该处理器100错误的目的而言特别有用。
[0325] 在方块2602中,核102其中之一遇到一指示其应用该微码修补在该微处理器100中的指令。更佳地说,该微码修补类似于上面所述的微码修补。在一实施例中,该应用微码修补指令是一x86WRMSR指令。为响应该应用微码修补指令,该核102停用中断并阻止执行该应用微码修补指令的微码。应可理解的是,包括该应用微码修补指令的该系统软件可包括一多指令序列,以作为该微码修补应用的准备。然而,更佳地说,其作为该序列单一架构指令的响应,而该微码修补在该架构指令级中以一原子方式被传播至所有核。也就是说,一旦中断在该第一核102中被停用(例如,在方块2602中,该核102遇到该应用微码修补指令),当执行的微码传播该微码修补且应用至该微处理器100所有核102时(例如,直到在方块2652后为止),中断仍维持停用;再者,一旦在其它核102中被停用(例如,在方块2652),其仍被停用直到该微码修补已被应用到该微处理器100所有核102中为止(例如,直到方块2634后为止)。因此,有利的是,该微码修补在该架构指令级以一原子方式被传播并应用于该微处理器100的所有核102中。流程进行到方块2604。
[0326] 在方块2604中,该核102获得图1中该硬件信号量118的所有权。更佳地说,该微处理器100包括一与修补微码相关的硬件信号量118。更佳地说,该核102以一方式获得硬件信号量118的所有权,其方式类似上方图20所描述,更具体地说为方块2004和2006。该硬件信号量118被使用由于有可能核102其中之一使用一修补2500以作为遇到一应用微码修补指令的响应,而一第二核102遇到一应用微码修补指令,以作为该第二核将开始使用该第二修补2500,其可能会造成不正确的执行,举例来说,由于该第一修补2500的误用。流程进行到方块2606。
[0327] 在方块2606中,该核102传送一修补信息至其它核102并且传送一核间中断至其它核102。更佳地说,该核102在时间中断被停用的期间内(例如,该微码不允许其本身被中断)阻止该微码以响应该应用微码修补指令(方块2602),或响应该中断(方块2652),并保持该微码中,直到方块2634为止。流程由方块2606进行到方块2608。
[0328] 在方块2652中,其它核102之一(例如,在方块2602中除了遇到该应用微码修补指令的该核102之外的一核)被中断并且因在方块2606中所传送的该核间中断而接收该修补信息。在一实施例中,该核102在下一架构指令边界中(例如,在下一x86指令边界中)取得该中断。为了响应该中断,该核102停用中断且阻止处理该修补信息的微码。如上所述,虽然在方块2652中的流程是以一单一核102的角度所描述,但每一其它核102(例如,没在方块2602中的核102)在方块2652中被中断并接收该信息,且执行在方块2608至方块2634的步骤。流程由方块2652进行到方块2608。
[0329] 在方块2608中,该核102写入一同步情况21的同步请求(在图26A~26B中标示为SYNC21)至其同步暂存器108中,并由该控制单元104令该核102进入睡眠状态,并随后当所有核102已写入SYNC21时,由该控制单元104唤醒。流程进行到判断方块2611。
[0330] 在判断方块2611中,该核102判断其是否为遇见方块2602中的该微码修补的核102(与在方块2652中接收该修补信息的一核102相比较)。若是,则流程进行到方块2612;否则,流程进行到方块2614。
[0331] 在方块2612中,该核102将该微码修补2500的即时修补2504的一部分载入至该非核修补RAM2408。此外,该核102产生该载入即时修补2504的一检查和并验证其与该校对和2506相匹配。更佳地说,该核102也传送信息至其它核102,其指示该即时修补2504的长度及该即时修补2504被载入在非核修补RAM2408内的位置。有利的是,因所有核102已知执行实行该微码修补应用的相同微码,因此当一先前RAM修补2516存在于该非核修补RAM2408时,则由于在这段期间内(假设实行于该微码修补应用的微码并不被修补)在该修补CAM2439中将不具有碰撞(hit),故使用该新修补覆盖该非核修补RAM2408是安全的。在另一实施例中,该核102将该即时修补2504载入到该非核PRAM116,并在方块2616中的该即时修补2504执行之前,核102将该立即修补2504从该非核PRAM116复制到该非核修补RAM2408。更佳地说,该核102将该立即修补载入至被保留用于此目的的该非核PRAM116的一部分,例如,不被用于其它目的的该非核PRAM116的一部分,像是持有由该微码所使用的值(例如,如上所述的核
102状态、TPM状态、或有效微码常数),并且该非核PRAM116的一部分可以被修补(例如,在方块2632),以使任一先前非核PRAM修补2518不被破坏(clobber)。在一实施例中,载入该非核PRAM116或由该非核PRAM116所复制的动作在多个阶段中执行,以减少该已保留部分所需的大小。流程进行到方块2614。
[0332] 在方块2614中,该核102写入一同步情况22(在图26A~26B中标示为SYNC22)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC22时,由控制单元104所唤醒。流程进行到方块2616。
[0333] 在方块2616中,该核102执行该非核修补RAM2408中的该即时修补2504。如上所述,在一实施例中,在该核102执行该即时修补2504之前,该核102将该即时修补2504由该非核修补RAM116复制至该非核修补RAM2408。流程进行至方块2618。
[0334] 在方块2618中,该核102写入一同步情况23(在图26A~26B中标示为SYNC23)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC23时,由控制单元104所唤醒。流程进行到判断方块2621。
[0335] 在判断方块2621中,该核102决定该核102是否为遇到在方块2602中的该应用微码修补指令的核102(与在方块2652中接收该修补信息的一核102相比较)。若是,则流程进行到方块2622;否则,流程进行到方块2624。
[0336] 在方块2622中,该核102将该CAM数据2508及核PRAM修补2512载入至该非核PRAM116。此外,该核102产生该载入CAM数据2508及核PRAM修补2512的一检查和并验证其与该校对和2514相匹配。更佳地说,该核102也传送信息至其它核102,其指示该CAM数据2508及核PRAM修补2512的长度,以及该CAM数据2508及核PRAM修补2512被载入在非核PRAM116内的位置。更佳地说,该核102将该CAM数据2508及核PRAM修补2512载入至该非核PRAM116的一已保留部分,以使任一先前非核PRAM修补2518不被破坏(clobber),其类似于方块2612中所描述的方式。流程前进至方块2624。
[0337] 在方块2624中,该核102写入一同步情况24(在图26A~26B中标示为SYNC24)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC24时,由控制单元104所唤醒。流程进行到方块2626。
[0338] 在方块2626中,该核102将该CAM数据2508由该非核PRAM116载入至其修补CAM2439。此外,该核102将该核PRAM修补2512由该非核PRAM116载入至其核PRAM2499。有利的是,由于所有核已知正执行实行于该微码修补应用中相同的微码,即使该对应RAM修补
2516尚未被写入该非核修补RAM2408(其将在方块2632中发生),由于在这段期间内(假设实行于该微码修补应用的微码并不被修补)在该修补CAM2439中将不具有碰撞(hit),故使用该CAM数据2508载入该修补CAM2439是安全的。此外,由于所有核102已知正执行实行于该微码修补应用中相同的微码,并且中断将不在任一核102中使用直到该修补2500被传播至所有核102为止,因此由该核PRAM修补2512所执行至该核PRAM2499的任一更新,其包括用以改变可能影响该核102操作的值的更新(例如,功能设置),保证不会在架构中看见,直到该修补2500已被传播到所有核102为止。流程进行到方块2628。
[0339] 在方块2628中,该核102写入一同步情况25(在图26A~26B中标示为SYNC25)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC25时,由控制单元104所唤醒。流程进行到判断方块2631。
[0340] 在判断方块2631中,该核102决定该核102是否为遇到在方块2602中的该应用微码修补指令的核102(与在方块2652中接收该修补信息的一核102相比较)。若是,则流程进行到方块2632;否则,流程进行到方块2634。
[0341] 在方块2632中,该核102载入该RAM修补2516至该非核修补RAM2408。此外,该核102载入该非核PRAM修补2518至该非核PRAM116。在一实施例中,该非核PRAM修补2518包括由该SPU2423所执行的程序码。在一实施例中,该非核PRAM修补2518包括该微码所使用值的更新,如上所述。在一实施例中,该非核PRAM修补2518包括该SPU2423程序码以及该微码所使用值的更新。有利的是,由于所有核102已知正执行实行于该微码修补应用中相同的微码,更具体地说,所有核102的该修补CAM2439已被载入该新CAM数据2508(例如,在方块2626中),以及在这段期间内(假设实行于该微码修补应用的微码并不被修补)在该修补CAM2439中将不具有碰撞(hit)。此外,由于所有核102已知正执行实行于该微码修补应用中相同的微码,并且中断将不在任一核102中使用直到该修补2500被传播至所有核102为止,由该非核PRAM修补2518所执行至该非核PRAM116的任一更新,包括用以改变可能影响该核102操作的值的更新(例如,功能设置),保证不会在架构中看见,直到该修补2500已被传播到所有核102为止。流程进行到方块2634。
[0342] 在方块2634中,该核102写入一同步情况26(在图26A~26B中标示为SYNC26)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC26时,由控制单元104所唤醒。流程结束于方块2634。
[0343] 在方块2634之后,如果程序码被载入至用于该SPU2423的该非核PRAM116时,该修补核102也接着开始执行该程序码,如图30所述。此外,在方块2634后,该修补核102释放在方块2634中所取得的硬件信号量118。更进一步地说,在方块2634之后,该核102重新启动上述中断。
[0344] 请参阅图27,其是显示根据图26A~26B流程图的一微处理器操作的一例子的时序图。在此例子中,一微处理器100配置具有三个核102,标示为核0、核1和核2,如图所示。然而,应可理解的是,在其它实施例中,该微处理器100可包括不同数量的核102。在此时序图中,事件进行的时序如下方所述。
[0345] 核0接收到一请求修补微码的请求(每一方块2602)并以响应取得该硬件信号量118(每一方块2604)。核0接着传送一微码修补信息及中断至核1及核2(每一方块2606)。核0接着写入一SYNC21并进入睡眠状态(每一方块2608)。
[0346] 每一核1及核2最终由其目前的任务中被中断并读取该信息(每一方块2652)。对此,每一核1及核2写入一SYNC21并并进入睡眠状态(每一方块2608)。如图所示,例如,由于当该中断被确立时,正执行该指令延迟的因素,每一核写入SYNC21的时间可能不同。
[0347] 当所有核已写入SYNC21时,该控制单元104同时将所有核唤醒(每一方块2608)。核0接着将该即时修补2504载入至该非核PRAM116(每一方块2612),并写入一SYNC22,并进入睡眠状态(每一方块2614)。每一核1及核2写入一SYNC22,并进入睡眠状态(每一方块2614)。
[0348] 当所有核已写入该SYNC22时,该控制单元104同时将所有核唤醒(每一方块2614)。每一核执行该即时修补2504(每一方块2616)并写入一SYNC23,且进入睡眠状态(每一方块
2618)。
[0349] 当所有核已写入该SYNC23时,该控制单元104同时将所有核唤醒(每一方块2618)。核0接着将该CAM数据2508及核PRAM修补2512载入至非核PRAM116(每一方块2622),并写入一SYNC24,且进入睡眠状态(每一方块2624)。
[0350] 当所有核已写入该SYNC24时,该控制单元104同时将所有核唤醒(每一方块2624)。每一核接着使用该CAM数据2508载入其修补CAM2439,并使用该核PRAM修补2512(每一方块
2626)载入其核PRAM2499,且写入一SYNC25,并进入睡眠状态(每一方块2628)。
[0351] 当所有核已写入该SYNC25时,该控制单元104同时将所有核唤醒(每一方块2628)。核0接着将该RAM修补2516载入至该非核修补RAM2408,并将该非核PRAM修补2518载入至该非核PRAM116,以及写入一SYNC26,并进入睡眠状态(每一方块2634)。
[0352] 当所有核已写入该SYNC26时,该控制单元104同时将所有核唤醒(每一方块2634)。如上所述,若程序码已被载入至用于该SPU2423中的该非核PRAM116以方块2632的步骤时,该核102也接着开始执行该程序码,如以下图30所描述。
[0353] 请参照图28,其是显示根据另一实施例的一多核微处理器100的方块图。该微处理器100在许多方面相似于图24的微处理器100。然而,图28的微处理器100未包括一非核修补RAM,但包括一核修补RAM2808在每一核102中,其提供与图24该非核修补RAM2408类似的功能。然而,在每一核102中的核修补RAM2808由其各自核102所专用并且不与其它核102所共享。
[0354] 请参阅图29A~29B,其是显示根据另一实施例的图28中该微处理器100用以传播一微码修补至该微处理器100的多个核102的一操作流程图。在图28及图29A~29B的另一实施例中,图25的修补2500可以被修改,使得该校对和2514采用该RAM修补2516,而非采用该核PRAM修补2512,并在该CAM数据2508的完整性、该核PRAM修补2512及该RAM修补2516载入该微处理器100(例如,在图29A~29B中的方块2922)后,启用该微处理器100来验证该CAM数据2508的完整性、该核PRAM修补2512及该RAM修补2516。图29A~29B的流程图在许多方面类似于图26A~26B的流程图,且同样编号的方块也相似。然而,方块2912替换方块2612、方块2916替换方块2616、方块2922替换方块2622、方块2926替换方块2626以及方块2932替换方块2632。在方块2912中,该核102将该即时修补2504载入至该非核PRAM116(而非载入至一非核修补RAM)。在方块2916中,该核102在执行该即时修补2504之前,将该即时修补2504从非核PRAM116复制到该核修补RAM2808。在方块2922中,除了该CAM数据2508及该核PRAM修补
2512之外,该核102将该RAM修补2516载入至该非核PRAM116。在方块2926中,该核102除了将该CAM数据2508由该非核PRAM116载入至其修补CAM2439及将该核PRAM修补2512由该非核PRAM116载入至其核PRAM2499之外,该核102还将该RAM修补2516从该非核PRAM116载入至其修补RAM2808。在方块2932中,不同于图26A~26B的方块2632,该核102不将该RAM修补2516载入至一非核修补RAM。
[0355] 可由上述实施例中观察,益于传播至该微处理器100核102每一相关存储器2439/2499/2808及至相关非核存储器2408/116的该微码修补2500的原子传播以一方式进行以确保该修补2500的完整性及有效性,即使存在多个同时执行的核102,其核102能共享资源,否则当应用于传统方式时,核102可能会破坏(clobber)另一核修补的各部分。
[0356] 修补服务处理器程序码
[0357] 请参阅图30,其是显示图24的微处理器100用以修补一服务处理器程序码的流程图。流程开始于方块3002。
[0358] 在方块3002中,该核102将由该SPU2423执行的程序码载入至在一修补所指定一修补地址中的该非核PRAM116,如上面图26A~26B方块2632中所述。流程进入该方块3004。
[0359] 在方块3004中,该核102控制该SPU2423以执行在修补地址的程序码,例如,该SPU2423的程序码在方块3002中被写入于非核PRAM116中的地址。在一实施例中,该SPU2423配置用以从起始地址暂存器2497提取其重置向量(例如,该SPU2423移除重置后开始提取指令的地址),以及该核102将该修补地址写入该起始地址暂存器2497,接着写入至一使该SPU2423被重置的控制暂存器中。流程进行到方块3006。
[0360] 在方块3006中,该SPU2423开始在该修补地址提取程序码(例如,提取其第一指令),例如,在方块3002中写入该SPU2423程序码至非核PRAM116中的地址。一般来说,驻留在该非核PRAM116中的SPU2423修补程序码将执行一跳转(jump)至驻留在该非核ROM2425中的SPU2423程序码。流程结束于方块3006。
[0361] 修补该SPU2423程序码的功能可能特别有用。例如,该SPU2423可被用于本质上短暂的性能测试,举例来说,其可能不欲使该性能测试SPU2423程序码成为该微处理器100永久的一部分,而仅成为发展部分的一部分,例如,对于制造部分而言,仅成为发展部分的一部分。在另一例子中,该SPU2423可用以找寻和/或修复错误。在另一例子中,该SPU2423可用以配置该微处理器100。
[0362] 更新为每一核即时架构可视储存资源的原子传播
[0363] 请参照图31,其是显示根据另一实施例的一多核微处理器100的方块图。该微处理器100在许多方面相似于图24的微处理器100。然而,图31的微处理器100每一核102还包括架构上可见的存储器类型范围暂存器(Memory Type Range Registers,MTRRs)3102。也就是说,每一核102实例化架构上可见的MTRR3102,即使系统软件要求MTRR3102在所有核102中是一致的(更详细的描述如下)。MTRR3102为每一核实例化架构上可见的储存资源的例子,以及其它每一核实例化架构上可见的储存资源实施例描述如下。(虽然图并未示出,但每一核102还包括图24中的该核PRAM2499、核微码ROM2404、修补CAM2439,以及在一实施例中,图28的核微码修补RAM2808)。
[0364] MTRR3102提供一种系统软件,以使一存储器类型与在该微处理器100系统存储器地址空间中多个不同的实体地址范围相关。不同存储器类型的例子包括强不可缓冲的(strong uncacheable)、不可缓冲的(uncacheable)、写入结合(write-combining)、写入通过(write through)、写回(write back)及写入保护(write protected)。每一MTRR3102(明确地或隐含地)指定一存储器范围及其存储器类型。各MTRR3102的共同值定义一存储器映射,其指定不同的存储器范围的存储器类型。在一实施例中,MTRR3102类似于在Intel64以及IA-32架构软件开发人员手册,第3册:系统编程指南,2013年9月,特别是在第11.11节的描述,其在本文中被引用并构成本说明书的一部分。
[0365] 希望由MTRR3102所定义的存储器映射在用于该微处理器100所有核中为相同的,以使在该微处理器100中运作的该软件具有一存储器一致性。然而,在传统的处理器中,并无硬件支持以维持在一多核处理器核间MTRRs的一致性。如先前提到Intel手册第3册第11-20页底部注解描述,“P6及更多最近的处理器家族提供并无提供用以维持[MTRRs值的一致性]的硬件支持”。因此,系统软件则负责维持跨核MTRR的一致性。上方引用Intel手册第
11.11.8节描述系统软件的一演算法,其用以维持与更新与其MTRRs多核处理器每一核相关的一致性,例如,所有核执行更新其各自MTRRs的指令。
[0366] 相反地,该系统软件可在该核102其中之一中更新该MTRR3102各自请求(instance),以及在一原子方式中利于该核102传播该更新至该微处理器100所有核102中MTRR3102的各自请求的实施例描述于本文中(类似于描述在上方图24至图30中实施例所执行的一微码修补的方式)。其提供一种用以维持在不同核102的MTRR3102间架构指令级一致性的方法。
[0367] 请参阅图32,其是显示图31中该微处理器100用以传播一MTRR3102更新至该微处理器100的多个核102之一的操作流程图。该操作从一单一核的角度所描述,但该微处理器100的每一核102根据共同传播该MTRR3102更新至该微处理器100所有核102的描述来进行操作。更具体的说,图32描述遇到更新该MTRR3102指令的核的操作,其流程开始于方块
3202,而其它核102的操作,其流程开始于方块3252。
[0368] 在方块3202中,核102其中之一遇到一指示该核更新其MTRR3102的指令。也就是说,该MTRR更新指令包括一MTRR3102识别符及一被写入至该MTRR3102的更新值。在一实施例中,该MTRR更新指令是一x86WRMSR指令,其用以指定在EAX:EDX暂存器中的该更新值及在该ECX暂存器的该MTRR3102识别符,其为在该核102的MSR地址空间内的一MSR地址。为了响应该MTRR更新指令,该核102停用中断并阻止执行该MTRR更新指令的微码。应可理解的是,包括该MTRR更新指令的该系统软件可包括一多指令序列,以作为该MTRR3102更新的准备。然而,更佳地说,其作为该序列单一架构指令的响应,所有核102的MTRR3102在该架构指令级中以一原子方式被更新。也就是说,一旦中断在该第一核102中被停用(例如,在方块3202中,该核102遇到该MTRR更新指令),当执行的微码传播新MTRR3102值至该微处理器100所有核102时(例如,直到在方块3218后为止),中断仍维持停用。再者,一旦在其它核102中被停用(例如,在方块3252),其仍被停用直到该微处理器100所有核102的该MTRR3102已更新为止(例如,直到方块2634后为止)。因此,有利的是,该新MTRR3102值在该架构指令级中以一原子方式被传播至该微处理器100的所有核102中。流程进行到方块3204。
[0369] 在方块3204中,该核102获得图1中该硬件信号量118的所有权。更佳地说,该微处理器100包括与一MTRR3102相关的一硬件信号量118。更佳地说,该核102以一方式获得硬件信号量118的所有权,其方式类似上方图20所描述,更具体地说为方块2004和2006。该硬件信号量118被使用由于有可能核102其中之一执行一MTRR3102更新,以作为遇到一MTRR更新指令的响应,而一第二核102遇到一MTRR更新指令,以作为该第二核将开始更新该MTRR3102的响应,这可能会造成不正确的执行。流程进行到方块3206。
[0370] 在方块3206中,一核102传送一MTRR更新信息至其它核102并传送其它核102一核间中断。更佳地说,在时间中断被停用的期间内(例如,该微码不允许其本身被中断),该核102阻止该微码以响应该MTRR更新指令(在方块3202中)或响应该中断(在该方块3252中),并维持于该微码中,直到方块3218为止。流程进行到方块3208。
[0371] 在方块3252中,其它核102之一(例如,在方块3202中除了遇到该MTRR更新指令的该核102之外的一核)被中断并且因在方块3206中所传送的该核间中断而接收该MTRR更新信息。在一实施例中,该核102在下一架构指令边界中(例如,在下一x86指令边界中)取得该中断。为了响应该中断,该核102停用中断且阻止处理该MTRR更新信息的微码。如上所述,虽然在方块3252中的流程是以一单一核102的角度所描述,但每一其它核102(例如,没在方块3202中的核102)在方块3252中被中断并接收该信息,且执行在方块3208至方块3234的步骤。流程由方块3252进行到方块3208。
[0372] 在方块3208中,该核102写入一同步情况31的同步请求(在图32中标示为SYNC31)至其同步暂存器108中,并由该控制单元104令该核102进入睡眠状态,并随后当所有核102已写入SYNC31时,由该控制单元104唤醒。流程进行到判断方块3211。
[0373] 在判断方块3211中,该核102判断其是否为遇见在方块3202中该MTRR更新指令的核102(与在方块3252中接收该MTRR更新信息的一核102相比较)。若是,则流程进行到方块3212;否则,流程进行到方块3214。
[0374] 在方块3212中,该核102将由该MTRR更新指令所指定的该MTRR识别符及该MTRR被更新使得所有其它核102可看见的一MTRR更新值载入至该非核PRAM116。在一x86实施例的情况下,MTRR3102包括:(1)已修复范围MTRR,其包括一经由单一WRMSR指令更新的单一64位MSR以及(2)不同范围MTRR,其包括两个64位MSR,每一MSR通过一不同WRMSR指令被写入,例如,这两个WRMSR指令指定不同MSR地址。对于不同范围MTRRs,该MSR其中之一(该PHYSBASE暂存器)包括该存储器范围的一基址及一用以指定该存储器类型的一类型栏位,以及其它的MSR(该PHYSMASK暂存器)包括一有效位及一设置该范围遮蔽(mask)的遮蔽栏位。更佳地说,该核102载入至该非核PRAM116的该MTRR更新值如下。
[0375] 1、若该MSR确定为该PHYSMASK暂存器时,则该核102载入该非核PRAM116一128位更新值,该更新值包括由该WRMSR指令所指定的新64位值(其包括该有效位及遮蔽值)以及该PHYSBASE暂存器的当前值(其包括基值及类型值)。
[0376] 2、若该MSR确定为该PHYSBASE暂存器时:
[0377] a、若在该PHYSMASK暂存器中有效位正被设置,则该核102载入至该非核PRAM116一128位的更新值,该更新值包括由该WRMSR指令所指定该新的64位值(该64位值包括该基值及类型值)以及该PHYSMASK暂存器的当前值(该当前值包括该有效位及遮蔽值)。
[0378] b、若在该PHYSMASK暂存器中有效位正被设置,则该核102载入至该非核PRAM116一64位的更新值,该更新值仅包括由该WRMSR指令所指定该新的64位值(该64位值包括该基值及类型值)。
[0379] 此外,若该写入的更新值是一128位的值,该核102在该非核PRAM116中设置一旗标,并且,若该更新值是一64位的值时,则该核102清除该旗标。流程由方块3212进行到方块3214。
[0380] 在方块3214中,该核102写入一同步情况32(在图32中标示为SYNC32)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC32时,由控制单元104所唤醒。流程进行到方块3216。
[0381] 在方块3216中,该核102从该非核PRAM116读取在方块3212中写入的该MTRR3102识别符及该MTRR更新值。有利的是,该MTRR更新值传播以一原子方式执行,使得任何可能会影响各自核102操作的MTRR3102的更新保证在架构上不可见,直到该更新值已被传播至所有核102的MTRR3102为止,由于所有核已知正执行实行于该MTRR更新指令中相同的微码,并且中断将不在任一核102中使用,直到该更新值被传播至所有核102各自的MTRR3102为止。如以上本实施例中方块3212所述,若该旗标在方块3212中被设置时,则该核102也更新(除了已确定的MSR之外)该PHYSMASK或PHYSBASE暂存器;否则,若该旗标为清除(clear)时,则该核102仅更新已确定的MSR。流程进行到方块3218。
[0382] 在方块3218中,该核102写入一同步情况33(在图32中标示为SYNC33)的同步请求到其同步暂存器108,并由该控制单元104使该核102进入睡眠状态,随后当所有核102写入一SYNC33时,由控制单元104所唤醒。流程结束于方块3218。
[0383] 在方块3218之后,该MTRR核102释放在方块3204中所获得的该硬件信号量118。更进一步地,在方块3218之后,该核102重新启动中断。
[0384] 从图31和图32观察可知,运行在图31微处理器100中的系统软件可利于执行在该微处理器100单一核102中执行一MTRR更新指令以完成更新该微处理器100所有核102的指定MTRR3102,而非单独在每一核102中执行一MTRR更新指令,其可以提供系统的完整性。
[0385] 一实例化在每一核102中特定MTRR3102是一系统管理范围暂存器(System Management Range Register,SMRR)3102。由于该SMRR3102拥有程序码及与系统管理模式(System Management Mode,SMM)相关的数据的操作,如一系统管理中断(System 
Management Interrupt,SMI)处理器,因此由该SMRR3102所指定的该存储器范围被称为SMRAM区域。当在一核102中运行的程序码尝试存取该SMRAM区域时,若该核102运行于SMM中,则该核102仅允许此存取;否则,该核102忽略写入该SMRAM区域的一写入,并恢复由该SMRAM区域中所读取每一位的一固定值。此外,如果一运行在该SMM中的一核102尝试在该SMRAM区域外执行程序码,则该核102将确立一机器检查异常。此外,当该核102运行在SMM中时,该核102仅允许程序码写入该SMRR3102中。这有利于在该SMRAM区域中SMM程序码和数据的保护。在一实施例中,该SMRR3102类似于在Intel64和IA-32架构软件开发人员手册第3册:系统编程指南,2013年9月,特别是在第11.11.2.4和34.4.2.1节描述,其在本文中被引用并构成本说明书的一部分。
[0386] 一般来说,每一核102具有其自身在存储器中SMM程序码和数据的例子。期望的是每一核102的SMM程序码和数据受到保护以避免不仅来自于在本身中运行的程序码,而且还来自另一核102中运行的程序码。为了使用SMRRs3102来完成,系统软件通常将多个SMM程序码和数据实例放置于存储器中相邻的区块。即,该SMRAM区域是一单一包括所有SMM程序码和数据实例的邻近存储器区域。如果该微处理器100所有核102的该SMRR3102具有指定包括所有SMM代程序码和数据实例的该单一邻近存储器区域全体的值时,这可以阻止在非SMM中一核运行的程序码更新另一核102的SMM程序码及数据实例。当一时间窗口存在于核102中SMRR3102值不相同时,例如,该微处理器100不同核102中SMRRs3102具有不同的值,其任一值明确小于包括所有SMM程序码和数据实例的单一邻近存储器区域的整体,则系统可能易受到一安全攻击,对于给定SMM的性质而言,其可能是严重的。因此,描述原子传播更新至SMRRs3102的实施例可以是特别有利的。
[0387] 此外,其它实施例可预期该微处理器100其它每一核实例化架构上可见储存资源的更新以类似上述方法的一原子方式被传播。例如,在一实施例中,每一核102实例化该x86IA32_MISC_ENABLE MSR的某些位栏位,并且在一核102中所执行的一WRMSR以类似如上所述的一方式被传播至该微处理器100中的所有核102。此外,实施例也可预期在一WRMSR的一核102中的执行至在该微处理器100所有核102中被实例化的其它MSR,其皆为架构上及专用的及/或当前和未来的,以类似如上所述的一方式被传播至该微处理器100中的所有核102。
[0388] 此外,尽管实施例描述该每一核实例化架构上可见的储存资源为MTRRs,其它实施例预期为该每一核实例化资源为不同于x86ISA指令集架构的资源、及其它除了MTRRs之外的资源。举例来说,其它除了MTRRs之外的资源包括CPUID值及回报功能的MSR,像是向量多媒体扩展(Vectored Multimedia eXtensions,VMX)功能。
[0389] 虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,本领域技术人员在不脱离本发明的精神和范畴内,当可做些许更动与润饰,因此本发明的保护范围当以本申请权利要求所界定的为准。例如,软件可致能,例如,功能、制造、模型化、模拟、描述及/或测试本发明所述的装置以及方法。上述可通过使用一般程序语言(例如:C、C++)、硬件描述语言(Hardware Description Languages,HDL)包括Verilog HDL、VHDL等等来实现。此类软件可以以程序码的型态包含于实体介质中,例如任何其它机器可读取(如计算机可读取)储存介质如半导体、磁盘、硬盘或光盘(例如:CD-ROM、DVD-ROM等等),其中,当程序码被机器,如计算机载入且执行时,此机器变成用以实施本发明的装置。本发明的方法与装置也可以以程序码型态通过一些传送介质,如电线或电缆、光纤、或是任何传输型态进行传送,其中,当程序码被机器,如计算机接收、载入且执行时,此机器变成用以实施本发明的装置。当在一般用途处理器实作时,程序码结合处理器提供一操作类似于应用特定逻辑电路的独特装置。本发明所述的装置以及方法可包含于一半导体智能产权核例如一微处理器核(嵌入于HDL),并转换成集成电路的硬件产品。此外,本发明所述的装置以及方法可包含具有硬件以及软件的组合实体实施例。因此本发明的保护范围当视本申请权利要求所界定的为准。最后,本领域技术人员可基于本发明所揭露的概念以及特定实施例,在不脱离本发明的精神和范围内可做些许更动与润饰以达到本发明的相同目的。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈