一致性协议表的制作方法

文档序号:14437129阅读:266来源:国知局
一致性协议表的制作方法

本公开总体上涉及计算机开发领域,并且更具体地,涉及包括对相互依存的约束系统的协调的软件开发。



背景技术:

半导体处理和逻辑设计的发展已允许在集成电路设备上呈现的逻辑数量的增加。作为一个必然结果,计算机系统配置已从系统中的单个或多个集成电路演进为在个体集成电路上呈现的多个内核、多个硬件线程、和多个逻辑处理器,以及集成在这种处理器内的其它接口。处理器或集成电路通常包括单个物理处理器管芯,其中该处理器管芯可以包括任意数量的内核、硬件线程、逻辑处理器、接口、存储器、控制器集线器等。

作为在较小封装中的适应更强处理能力的更大能力的结果,更小的计算设备增加了流行度。智能电话、平板计算机、超薄笔记本计算机、以及其它用户设备已按指数级增长。然而,这些更小的设备依靠服务器以用于超出形状因子的数据存储和复杂处理。因此,也提高了对于高性能计算市场(即,服务器空间)的需求。例如,在现代服务器中,通常不但仅有具有多个内核的单个处理器,而且还有多个物理处理器(也被称为多个插口)以提高计算能力。但是随着处理能力随着计算系统中识别的数量的增加而增长,插口和其它设备之间的通信变得更加关键。

实际上,互连已从主要负责电通信的更为传统的多点分支总线成长为促成快速通信的完全成熟的互连架构。不幸的是,随着对于未来处理器的需求以按更高速率消耗,对应的需求被置于现有互连架构的能力上。

附图说明

图1示出了根据一个实施例的包括在计算机系统中连接I/O设备的点对点互连的系统的简化框图;

图2示出了根据一个实施例的分层协议栈的简化框图;

图3示出了事务描述符的实施例。

图4示出了串行点对点链路的实施例。

图5示出了潜在的高性能互连(HPI)系统配置的实施例。

图6示出了与HPI相关联的分层协议栈的实施例。

图7示出了示例协议状态表的表示。

图8示出了协议状态表的示例嵌套的表示。

图9示出了由示例测试引擎使用一组协议状态表的表示。

图10示出了由示例测试引擎使用一组协议状态表的表示。

图11示出了包括多核处理器的计算系统的框图的实施例。

图12示出了示例计算系统的框图的实施例。

在各个图中,相似的附图标记和名称表明相似元件。

具体实施方式

在以下描述中,阐述了许多具体细节,例如特定类型的处理器和系统配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定处理器管线级(pipeline stage)、特定互连层、特定分组/事务配置、特定事务名称、特定协议交换、特定链路宽度、特定实施方式、以及操作等的示例,以便提供对本发明的透彻理解。然而,对于本领域技术人员来说可以显而易见的是,不一定需要采用这些具体细节来实践本公开的主题。在其它实例中,已经避免了对已知组件或方法的非常详细的描述(例如,特定和替代处理器架构、针对所描述的算法的特定逻辑电路/代码、特定固件代码、低级互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实施方式、用代码对算法进行的特定表达、特定断电和门控技术/逻辑以及计算机系统的其它特定操作细节),以便避免不必要地模糊本公开。

尽管可以参照功率节约、功率效率、处理效率等在特定集成电路(例如计算平台或微处理器)中描述以下实施例,但是其它实施例可适用于其它类型的集成电路和逻辑器件。可以将本文中描述的实施例的类似技术和教导应用于也可以受益于这些特征的其它类型的电路或半导体设备。例如,所公开的实施例并不限于服务器计算机系统、台式计算机系统、膝上型计算机、超级本TM,而且还可以用于其它设备,例如手持设备、智能电话、平板计算机、其它薄笔记本计算机、片上系统(SoC)设备、以及嵌入式应用。手持设备的一些示例包括蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)、以及手持PC。在这里,可以应用用于高性能互连的类似技术以提高在低功率互连中的性能(或甚至节省功率)。嵌入式应用通常包括微处理器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或能够执行下文所教导的功能和操作的任何其它系统。另外,本文中描述的装置、方法、和系统并不限于物理计算设备,而且还可以与用于能量节约和效率的软件优化有关。如在下文描述中可以变得容易显而易见的,本文中描述的方法、装置、和系统的实施例(无论是否参照硬件、固件、软件或其组合)可以被认为是对用性能考量进行了平衡的“绿色技术”未来至关重要的。

随着计算系统的发展,其中的组件变得越来越复杂。在组件之间耦合并通信的互连架构也在复杂度上提高了,以确保满足应用最优组件操作的带宽需求。此外,不同市场区隔需要互连架构的不同方面以适应各自的市场。例如,服务器需要更高性能,但是移动生态系统有时为了省电能够牺牲总体性能。但是,对于大多数结构来说,提供可能的最高性能且具有最大的功率节约是单一的目的。此外,各种不同互连可以潜在地得益于本文中描述的主题。例如,根据本文中描述的一个或多个原理,以及其它示例,可以潜在地提高外围组件互连(PCI)快速(PCIe)互连结构架构和快速通道互连(QPI)结构架构等。

图1示出了由互连所示的一组组件的点对点链路组成的结构的一个实施例。系统100包括耦合到控制器集线器115的处理器105和系统存储器110。处理器105可以包括任何处理元件,例如微处理器、主机处理器、嵌入式处理器、协处理器、或其它处理器。处理器105通过前端总线(FSB)106耦合到控制器集线器115。在一个实施例中,如下文所示,FSB 106为串行点对点互连。在另一实施例中,FSB 106包括与不同互连标准兼容的串行、差分互连架构。

系统存储器110包括任意存储器设备,例如随机存取存储器(RAM)、非易失性(NV)存储器、或可由系统100中的设备访问的其它存储器。系统存储器110通过存储器接口116耦合到控制器集线器115。存储器接口的示例包括双倍数据速率(DDR)存储器接口、双通道DDR存储器接口、以及动态RAM(DRAM)存储器接口。

在一个实施例中,例如,在PCIe互连层级结构中,控制器集线器115可以包括根集线器、根组件(root complex)、或根控制器。控制器集线器115的示例包括芯片组、存储器控制器集线器(MCH)、北桥、互连控制器集线器(ICH)、南桥、和根控制器/集线器。术语芯片组通常是指两个物理上分离的控制器集线器,例如耦合到互连控制器集线器(ICH)的存储器控制器集线器(MCH)。应当注意,按照与下文所述类似的方式,当前系统通常包括与处理器105集成的MCH,而控制器集线器115与I/O设备通信。在一些实施例中,通过控制器集线器115可选地支持对等网络路由。

在这里,控制器集线器115通过串行链路119耦合到交换机/网桥120。输入/输出模块117和121(其也可以被称为接口/端口117和121)可以包括/实现分层协议栈以提供控制器集线器115与交换机/网桥120之间的通信。在一个实施例中,多个设备能够耦合到交换机/网桥120。

交换机/网桥120将分组/消息从设备125向上游(即,分层结构向上朝向根组件)路由到控制器集线器115并且从处理器105或系统存储器110向下游(即,分层结构向下远离根控制器)路由到设备125。在一个实施例中,交换机/网桥120被称为多个虚拟PCI对PCI网桥设备的逻辑组件。设备125包括要耦合到电子系统的任意内部或外部设备或组件,例如I/O设备、网络接口控制器(NIC)、插入卡(add-in card)、音频处理器、网络处理器、硬盘驱动器、存储设备、CD/DVD ROM、监视器、打印机、鼠标、键盘、路由器、便携式存储设备、固件设备、通用串行总线(USB)设备、扫描仪、和其它输入/输出设备。通常在PCIe术语中,例如设备被称为端点。尽管并未详细示出,但是设备125可以包括网桥(例如,PCIe到PCI/PCI-X网桥)以支持遗留设备或其它版本的设备或由这样的设备所支持的互连结构。

图形加速器130还可以通过串行链路132耦合到控制器集线器115。在一个实施例中,图形加速器耦合到MCH,MCH耦合到ICH。接着,交换机/网桥120,以及由此设备125耦合到ICH。I/O模块131和118还实现分层协议栈和相关联的逻辑以在图形加速器130和控制器集线器115之间通信。类似于上文的MCH讨论,图像控制器或图形加速器130自身可以集成在处理器105中。

转向图2,其示出了分层协议栈的实施例。分层协议栈200可以包括任何形式的分层通信栈,例如QPI栈、PCIe栈、下一代高性能计算互连(HPI)栈、或其它分层栈。在一个实施例中,分层协议栈200可以包括事务层205、链路层210、和物理层220。诸如图1中的接口117、118、121、122、126、和131这样的接口可以被表示为分层协议栈200。作为分层协议栈的表示还可以被称为模块或接口,该模块或接口实现/包括协议栈。

分组可以用来在组件之间通信消息。可以在事务层205和数据链路层210中形成分组以将信息从发送组件携带至接收组件。随着所发送的分组流过其它层,可以使用用于在那些层处处理分组的信息来扩展这些分组。在接收侧,发生相反的过程并且将分组从它们的物理层220表示变换为数据链路层210表示并且最终(对于事务层分组)变换为可以由接收设备的事务层205处理的形式。

在一个实施例中,事务层205可以提供设备的处理内核和互连架构(例如,数据链路层210和物理层220)之间的接口。在这方面,事务层205的主要责任可以包括组装和拆装分组(即,事务层分组,或TLP)。事务层205还可以管理对于TLP的基于信用(credit)的流控制。在一些实施方式中,在其它示例中,还可以利用分离事务(即,具有由时间所分离的请求和响应的事务),以在目标识别收集数据以用于响应时,允许链路携带其它业务。

基于信用的流控制可以用于利用互连结构来实现虚拟信道和网络。在一个示例中,设备可以对事务层205中的每个接收缓冲区广播初始信用额。在链路对端处的外部设备(例如,图1中的控制器集线器115)可以计数由每个TLP消耗的信用数。如果事务不超出信用限制,则可以传输该事务。在接收到响应时,恢复信用额。在其它潜在的优点当中,这种信用机制的优点的一个示例在于在没有达到信用限制的情况下,信用返回的时延并不影响性能。

在一个实施例中,四个事务地址空间可以包括配置地址空间、存储器地址空间、输入/输出地址空间、和消息地址空间。存储空间事务包括读请求和写请求中的一个或多个,以将数据传送到存储器映射的位置/从存储器映射的位置传送数据。在一个实施例中,存储空间事务能够使用两种不同的地址格式,例如短地址格式(例如,32比特地址),或长地址格式(例如,64比特地址)。配置空间事务可以用于访问连接到互连的各个设备的配置空间。到配置空间的事务可以包括读请求和写请求。消息空间事务(或,仅消息)还可以被定义为支持互连代理之间的带内通信。因此,在一个示例实施例中,事务层205可以组装分组头/有效负载206。

快速参考图3,其示出了事务层分组描述符的实施例。在一个实施例中,事务描述符300可以是用于携带事务信息的机制。在这方面,事务描述符300支持在系统中对事务的识别。其它潜在的用途包括追踪对默认事务顺序的修改和事务与信道的关联。例如,事务描述符300可以包括全局标识符字段302、属性字段304和信道标识符字段306。在所示的示例中,全局标识符字段302被描绘为包括本地事务标识符字段308和源标识符字段310。在一个实施例中,全局标识符字段302对于所有的未完成请求都是唯一的。

根据一个实施方式,本地事务标识符字段308为由请求代理所生成字段,并且其可以是对于要求完成该请求代理的所有未完成请求是唯一的。此外,在该示例中,源标识符310在互连层级结构内唯一地识别请求者代理。由此,本地事务标识符字段308与源ID 310一起在层级结构域内提供事务的全局标识。

属性字段304详细说明事务的特性和关系。在这方面,属性字段304潜在地用于提供允许对事务的默认处理的修改的额外信息。在一个实施例中,属性字段304包括优先级字段312、预留字段314、排序(ordering)字段316、和无监听(no-snoop)字段318。这里,优先级字段312可以由发起者修改以向事务分配优先级。预留字段314是为未来预留的、或为供应商定义的用途。可以使用预留的属性字段来实现使用优先级或安全属性的潜在使用模型。

在该示例中,排序字段316用于提供表达了可以修改默认排序规则的排序类型的可选信息。根据一个示例实施方式,排序属性“0”表示要应用默认排序规则,其中排序属性“1”表示乱序排序(relaxed ordering),其中写可以穿越过在同一方向上的写,而读取完成穿越过在同一方向上的写。利用无监听字段318来确定事务是否被监听。如图所示,信道ID字段306标识出与事务相关联的信道。

回到图2的讨论,链路层210(也被称为数据链路层210)可以作为事务层205和物理层220之间的中间级。在一个实施例中,数据链路层210的责任为在链路上提供用于在两个组件之间交换事务层分组(TLP)的可靠机制。数据链路层210的一侧接受由事务层205所组装的TLP、应用分组序列标识符211(即,标识号或分组号)、计算并应用错误检测码(即,CRC212)、并且将修改后的TLP提交到物理层220以用于跨物理传输到外部设备。

在一个示例中,物理层220包括逻辑子块221和电子块222以将分组物理地传输到外部设备。这里,逻辑子块221负责物理层220的“数字”功能。在这方面,逻辑子块可以包括传输部分以准备出去(outgoing)信息以用于由电子块222进行传输,以及接收器部分以在将接收到的信息传递到链路层210之前识别和准备该接收到的信息。

电子块222包括发射器和接收器。由逻辑子块221为发射器提供符号,发射器将该符号序列化并传输到外部设备。从外部设备为接收器提供序列化的符号,并且接收器将接收到的信号转换为比特流。将比特流反序列化(de-serialize)并且提供到逻辑子块221。在一个示例实施例中,采用8b/10b传输码,其中发送/接收十比特的符号。这里,使用特殊符号以使分组适合于帧223。另外,在一个实施例中,接收器还提供从进来的(incoming)串行流中恢复的符号时钟。

如上文所述,尽管参照协议栈的特定实施例(例如,PCIe协议栈)讨论了事务层205、链路层210、和物理层220,但是并不限于这样的分层协议栈。实际上,可以包括/实现任何分层协议栈并且采用本文中所讨论的特征。例如,被表示为分层协议的端口/接口可以包括:(1)用于组装分组的第一层(即,事务层);用于排序分组的第二层(即,链路层);以及用于传输分组的第三层(即,物理层)。作为特定示例,利用了如本文中所描述的高性能互连分层协议。

接下来参考图4,其示出了串行点对点结构的示例实施例。串行点对点链路400可以包括用于传输串行数据的任何传输通路。在所示的实施例中,链路可以包括两个低电压差分驱动信号对:发射对406/411和接收对412/407。由此,设备405包括传输逻辑406以将数据传输到设备410,以及接收逻辑407以从设备410接收数据。也就是说,两个传输通路(即,通路416和417)和两个接收通路(即,通路418和419)被包括在链路的一些实施方式中。

传输通路是指用于传输数据的任何通路,例如传输线、铜线、光学线、无线通信信道、红外通信链路、或其它通信通路。两个设备(例如,设备405和设备410)之间的连接被称为链路,例如链路415。链路可以支持一个通道——每个通道表示一组差分信号对(一对用于发送、一对用于接收)。为了调整(scale)带宽,链路可以聚合多个通道,用xN表示,其中N为任何支持的链路宽度,例如1、2、4、8、12、16、32、64、或更宽。

差分对可以指用于传输差分信号的两个传输通路,例如通路416和417。例如,当通路416从低电平切换为高电平时(即,上升沿),线路417从高逻辑电平驱动为低逻辑电平(即,下降沿)。除了其它示例优点,差分信号还潜在地示出了更好的电特性,例如更好的信号完整性,即交互耦合、电压过冲/下冲、震荡(ringing)。这允许更好的时间窗,其使能更宽的传输频率。

在一个实施例中,提供了新的高性能互连(HPI)。HPI可以包括下一代高速缓存一致性、基于链路的互连。例如,HPI可以在高性能计算平台(例如,工作站或服务器)中被利用,包括在通常使用PCIe或另一互连协议来连接处理器、加速器、I/O设备等的系统中被利用。然而,HPI并不限于此。相反,可以在本文中描述的任何系统或平台中利用HPI。此外,所开发的单个主意可以被应用于其它互连和平台,例如PCIe、MIPI、QPI等。

为了支持多个设备,在一个示例实施方式中,HPI可以包括指令集架构(ISA)无关(即,能够在多个不同设备中实现HPI)。在另一情况下,HPI还可以用于连接高性能I/O设备,不仅仅用于连接处理器或加速器。例如,高性能PCIe设备可以通过适当的转换桥(translation bridge)(即,HPI到PCIe)而耦合到HPI。另外,可以由许多基于HPI的设备(例如,处理器)以各种方式(例如,星形、环形、网等)利用HPI链路。图5示出了多个潜在的多插口配置的示例实施方式。如图所描绘的两插口配置505可以包括两个HPI链路;然而,在其它实施方式中,可以利用一个HPI链路。对于更大的拓扑,只要标识符(ID)是可分配的,则可以利用任意配置,并且除了其它附加或替换特征,还存在一些形式的虚拟通路。如图所示,在一个示例中,四插口配置510具有从每个处理器到另一处理器的HPI链路。但是在配置515中示出的八插口实施方式中,并不是每个插口都通过HPI链路直接相互连接。然而,如果处理器之间存在虚拟通路或信道,则支持该配置。一系列支持的处理器在本机域中包括2-32个。除了其它示例之外,还可以通过使用多个域或节点控制器之间的其它互连而达到更多数量的处理器。

HPI架构包括分层协议架构的定义,在一些实施例中包括协议层(一致性、非一致性、以及可选地其它基于存储器的协议)、路由层、链路层、以及包括相关联的I/O逻辑的物理层。此外,HPI还可以包括与功率管理有关的增强(例如,功率控制单元(PCU))、用于测试和调试的设计(DFT)、故障处理、寄存器、安全、以及其它示例。图6示出了示例HPI分层协议栈的实施例。在一些实施方式中,图6中所示的层中的至少一些可以是可选的。每层处理其自身层的信息粒度(granularity)或信息量子(协议层620a、b具有分组630、链路层610a、b具有微片(flit)635、并且物理层605a、b具有物理单元(phit)640)。应当注意在一些实施例中,基于实施方式,分组可以包括部分微片、单个微片或多个微片。

作为第一示例,一定宽度的物理单元640包括链路宽度到比特的1对1映射(例如,20比特的链路宽包括20比特的物理单元等)。微片可以具有更大的尺寸,例如184、192、或200比特。应当注意,如果物理单元640为20比特宽并且微片635的尺寸为184比特,则需要小数个物理单元640来传输一个微片635(例如,在20比特的情况下用9.2物理单元来传输184比特微片635或在20比特的情况下用9.6物理单元来传输192比特微片等)。应当注意,在物理层处的基础链路的宽度可以变化。例如,每个方向的通道数量可以包括2、4、6、8、10、12、14、16、18、20、22、24等。在一个实施例中,链路层610a、b能够将多个段不同事务嵌入到单个微片中,并且可以将一个或多个头(例如,1、2、3、4)嵌入到微片内。在一个示例中,HPI将头分为对应的时隙(slot)以使得微片中的多个消息能够以不同节点为目的地。

在一个实施例中,物理层605a、b可以负责信息在物理介质(电或光等)上的快速传输。物理链路可以是两个链路层实体(例如,链路层610a和610b)之间的点对点。链路层610a、b可以从上层中抽象(abstract)物理层605a、b并且提供可靠地传输数据(以及请求)的能力并且管理两个直接连接的实体之间的流控制。链路层还可以负责将物理信道虚拟化为多个虚拟信道和消息类别。协议层620a、b依靠链路层610a、b而在将协议消息传递到物理层605a、b以用于跨物理链路传输之前,将协议消息映射到适合的消息类别和虚拟信道中。链路层610a、b可以支持多个消息,例如请求、监听、响应、写回(writeback)、非一致性数据等。

如图6中所示,可以在电层(即,连接两个组件的电导体)之上和链路层610a、b之下实现HPI的物理层605a、b(或PHY)。物理层和对应的逻辑可以驻留在每个代理上并且将相互分离(例如,在链路的两侧上的设备上)的两个代理(A和B)上的链路层连接。本地和远程电层是通过物理介质(例如,导线、导体、光等)连接的。在一个实施例中,物理层605a、b具有两个主要阶段,初始化和操作。在初始化期间,连接对于链路层是不透明的并且信令可以包括定时的状态(timed state)和握手事件的组合。在操作期间,连接对于链路层是透明的并且信令处于一定速度,其中所有通道共同操作作为单个链路。在操作阶段期间,物理层将微片从代理A传送到代理B并且从代理B传送到代理A。连接也被称为链路并且从链路层中抽象包括介质、宽度和速度的一些物理方面,而同时与链路层交换微片和当前配置的控制/状态(例如,宽度)。初始化阶段包括次要阶段,例如轮询、配置。操作阶段也包括次要阶段(例如,链路功率管理状态)。

在一个实施例中,链路层610a、b可以被实现以便提供在两个协议或路由实体之间的可靠数据传送。链路层可以从协议层620a、b抽象物理层605a、b,并且可以负责两个协议代理(A、B)之间的流控制,并且提供虚拟信道服务给协议层(消息类别)和路由层(虚拟网络)。协议层620a、b和链路层610a、b之间的接口通常在分组层面处。在一个实施例中,在链路层处的最小传送单元被称为微片,微片为特定数量的比特,例如192比特或一些其它数额。链路层610a、b依靠物理层605a、b而将物理层605a、b的传送单元(物理单元)适配于链路层610a、b的传送单元(微片)中。另外,链路层610a、b可以在逻辑上被分解为两部分,发送器和接收器。在一个实体上的发送器/接收器对可以连接到另一实体上的接收器/发射器。通常以微片和分组为而基础执行流控制。还可以以微片层面为基础而执行错误检测和校正。

在一个实施例中,路由层615a、b可以提供用于将HPI事务从源路由到目的地的灵活且分布式的方法。该机制是灵活的,这是因为可以通过在每个路由器处的可编程路由表(在一个实施例中,该编程是通过固件、软件、或其组合而执行的)而规定用于多个拓扑的路由算法。该路由功能可以是分布式的;该路由可以通过一系列的路由步骤而完成,其中每个路由步骤通过在源、中间、或目的路由器处查询表格而定义。在源处的查询可以用于将HPI分组添加到HPI结构中。在中间路由器处的查询可以用于将HPI分组从输入端口路由到输出端口。在目的端口处的查询可以用于将目的HPI协议代理作为目标。应当注意,在一些实施方式中,路由层可以是薄的,这是因为路由表以及因此路由算法不是由规范所详细定义的。这允许灵活性和大量的使用模型,包括要由系统实施方式所定义的灵活平台架构拓扑。路由层615a、b依靠链路层610a、b以提供对多大三个(或更多)虚拟网络(VN)的使用——在一个示例中,两个无死锁VN(VN0、VN1),其中在每个虚拟网络中定义若干消息类别。可以在链路层中定义共享自适应虚拟网络(VNA),但是该自适应网络可以不在路由概念中直接暴露,这是因为每个消息类别和虚拟网络可以具有专用的资源和有保证的转发进度,以及其它特征和示例。

在一个实施例中,HPI可以包括一致性协议层a、b以支持缓存来自存储器的数据行的代理。想要缓存存储器数据的代理可以使用一致性协议以读取数据行来加载到代理的高速缓存中。想要修改在其高速缓存中的数据行的代理可以使用一致性协议,以在修改数据之前得到该行的所有权。在对行进行修改之后,代理可以遵循这样的协议要求:将该行保持在代理的高速缓存中,直到该代理将该行写回到存储器,或直到该代理将该行包括在对外部请求的响应中。最后,代理可以完成外部请求以使得在该代理的高速缓存中的行无效。该协议通过制定所有高速缓存代理可以遵循的规则而确保数据的一致性。该协议还可以提供用于代理的单元而无需高速缓存来一致地读和写存储器数据。

可以强制实施两个条件以支持利用HPI一致性协议的事务。第一,例如,该协议可以以每个地址为基础而维持在代理的高速缓存中的数据之间的数据一致,以及这些数据与存储器中的数据之间的数据一致。非正式地,数据一致可以指代在代理的高速缓存中的每个有效的数据行以表示数据的最新值,并且在一致性协议分组中传输的数据可以表示在该分组被发送时该数据的最新值。当在高速缓存或传输中不存在数据的有效副本时,协议可以确保数据的最新值驻留于存储器中。第二,协议可以提供针对请求的明确定义的提交点(commitment point)。针对读的提交点可以表明数据何时是可用的;并且针对写的提交点可以表明所写的数据何时是全局可观察的并且何时将由随后的读所加载。协议可以支持针对一致性存储空间中的可缓存请求和不可缓存(UC)请求的这些提交点。

HPI一致性协议还可以确保由到一致性存储空间中的地址的代理所做出的一致性请求的转发进度。当然,事务最终可以被满足并且可以退出以用于适当的系统操作。在一些实施例中,HPI一致性协议可以不具有重新尝试以解决资源分配冲突的概念。因此,协议其自身可以被定义以不包含循环资源依赖,并且实施方式可以在它们的设计中注意不引入可以导致死锁的依赖。另外,协议可以表明在什么情况下设计能够提供对协议资源的公平访问。

在一个实施例中,在逻辑上,HPI一致性协议可以包括三项:一致性(或“高速缓存”或“缓存”)代理、本地代理、和连接代理的HPI互连结构。一致性代理和本地代理可以共同工作,以通过在互连上交换消息而实现数据一致。链路层610a、b和其相关的描述可以提供互连结构的细节,所述细节包括该互连结构如何遵从一致性协议的要求(本文中所讨论的)。(可以注意到,分为一致性代理和本地代理是为了清楚的目的)。设计可以在插口内包含多个两种类型的代理,或者甚至将代理行为组合到单个设计单元中,以及其它示例。

在一个实施例中,本地代理可以被配置为防护物理存储器。每个本地代理可以负责一致性存储空间的一个区域。区域可以是非重叠的,这是因为由一个本地代理防护单个地址,并且在系统中的本地代理区域覆盖该一致性存储空间。例如,每个地址可以由至少一个本地代理防护。因此,在一个实施例中,在HPI系统的一致性存储空间中的每个地址可以正好映射到一个本地代理。

在一个实施例中,HPI一致性协议中的本地代理可以负责服务于对一致性存储空间的请求。对于读(Rd)请求,本地代理可以生成监听(Snp)、处理它们的响应、发送数据响应、并且发送完成响应。对于无效(Inv)请求,本地代理可以生成必要的监听、处理它们的响应、并且发送完成响应。对于写请求,本地代理可以将数据提交到存储器并且发送完成响应。

本地代理可以在HPI一致性协议中提供监听并且可以处理来自一致性代理监听响应。本地代理还可以处理来自一致性代理的转发请求(其为特殊的监听响应)以用于冲突解决。当本地代理接收到转发请求时,本地代理可以向生成该转发请求的一致性代理(即,检测到冲突监听请求的代理)发送转发响应。一致性代理可以使用这些转发请求的顺数和来自本地代理的完成响应的顺序来解决冲突。

一致性代理可以发出所支持的一致性协议请求。请求可以被发出到一致性存储空间中的地址。除了RdCur之外的接收到的用于读请求(Rd)的数据可以是一致的。当生成数据分组时,用于RdCur的数据可以已经是一致的(尽管数据在传递期间可能已经过期)。表1示出了潜在的所支持的请求的示例性的、非详尽的列表:

表1

HPI可以支持一致性协议利用MESI协议的原理。可以用一个或多个支持的状态(例如,在高速缓存行中所编码的)来标记每个高速缓存行。“M”或“修改(Modified)”状态可以表明已经将高速缓存行值从主存储器中的值进行了修改。处于M状态的行仅出现在特定或对应的高速缓存中,代理可以被要求例如在允许读取(不再有效的)主存储器状态之前,在未来某一时间将修改的数据写回到存储器。写回可以将该行从M状态转换到E状态。“E”或“专属(Exclusive)”状态可以表明该高速缓存行仅出现在当前高速缓存中,但是其值与主存储器中的值匹配。处于E状态的高速缓存行可以相应于读请求而在任何时间转换到S状态,或者可以通过对该行进行写而变为M状态。“S”或“共享(Shared)”状态可以表明该高速缓存行可以被存储在机器的其它高速缓存中并且具有与主存储器的值相匹配的值。可以在任意时间丢弃该行(变为I状态)。“I”或“无效(Invalid)”状态可以表明高速缓存行是无效的或未使用的。在HPI中还支持其它状态,例如“F”或“转发(Forward)”共享状态表明特定的共享状态要被转发到也要共享该行的其它高速缓存等。

表2包括一些一致性协议消息中可以包括的示例性信息,包括监听、读、和写请求等:

表2

监听消息可以由本地代理所生成并且被导向一致性代理。监听(SNP)虚拟信道可以用于监听,并且在一个实施例中,监听是使用该SNP虚拟信道的唯一消息。监听可以包括请求代理的NID,以及在监听结果导致数据被直接发送到请求代理的情况下请求代理所分配的针对请求的RTID。在一个实施例中,监听还可以包括由本地代理所分配的用于处理请求的HTID。处理监听的一致性代理可以将HTID包括在一致性代理发送回本地代理的监听响应中。在一些实例中,监听不包括本地代理的NID,这是因为其可以从所包括的地址中得到,这是目标一致性代理在发送其响应时所做的。扇出(fanout)监听(具有“SnpF”前缀的那些监听)可以不包括目的NID,这是因为路由层负责为扇出区域中的所有对等点(peer)生成适当的监听消息。监听信道消息的示例性列表如表3所列举:

表3

HPI还可以支持它们可以发出到地址的非监听请求,例如被实现为非一致性请求的那些请求。这样的请求的示例可以包括从存储器请求只读行的非监听读、根据掩码而将行写到存储器的非监听写、以及其它潜在的示例。

在一个示例中,可以在HPI一致性协议中定义四种通用类型的响应消息:数据、完成、监听、和转发。某些数据消息可以携带额外的完成指示,并且某些响应可以携带数据。响应消息可以使用RSP虚拟信道,并且通信结构可以维持有序的完成响应和转发响应之间的合适的消息传递顺序。

表4包括由示例HPI一致性协议支持的至少一些潜在的响应消息的列表:

表4

在一个示例中,数据响应可以将请求一致性代理作为目标。本地代理可以发送任何数据响应。一致性代理可以仅发送不包含有序的完成指示的数据响应。另外,作为处理监听请求的结果,一致性代理可以限于仅发送数据响应。组合的数据和完成响应可以总是有序的完成类型,并且可以保持与通过通信结构的转发响应顺序一致。

HPI一致性协议可以使用通用的无序的完成消息和一致性特定的有序的完成消息。本地代理可以将完成响应发送到一致性请求,并且完成响应通常可以以一致性代理作为目标。有序的完成响应可以保持与通过通信结构的转发响应顺序一致。

具体地响应于处理监听请求,监听响应可以由一致性代理发送,并且以负责该监听请求的本地代理作为目标。destNID通常为本地代理(根据监听请求中的地址确定)并且所包括的TID是针对本地代理的所分配的用于处理该请求的资源的。在命令中具有“Wb”的监听响应是针对修改的高速缓存行的隐含写回的,并且这些监听响应携带该高速缓存行数据(隐含写回可以包括由于另一代理的请求而由一致性代理做出的那些,然而其它请求是由一致性代理使用其请求资源而明确做出的)。

当监听请求与未完成请求发生冲突时,一致性代理可以生成转发请求。转发请求以生成该监听的本地代理作为目标,这是根据该监听请求中的地址所确定的。因此,destNID为本地代理。转发请求还可以包括针对本地代理的被分配以用于处理原始请求的资源的TID,以及生成该转发请求的一致性代理的NID。

HPI一致性协议可以支持单个转发响应,FwdCnfltO。本地代理可以针对接收到的每个转发请求而发送转发响应,并且发送到转发请求的peerNID字段中的一致性代理。转发响应携带高速缓存行地址,所以一致性代理可以将该消息与一致性代理所分配的转发资源匹配。转发响应消息可以携带请求代理的NID,但是在一些情况下,不携带请求代理的TID。如果一致性代理想要支持高速缓存对高速缓存(cache-to-cache)传输以用于转发响应,则其可以在处理监听时保存请求代理的TID并发送转发请求。为了支持冲突解决,通信结构可以维持转发响应于与在转发响应之前被发送到同一目的一致性代理的所有有序的完成之间的顺序。

在一些实施方式中,可以使用状态机来管理高速缓存行的状态转换。在一个实施方式中,状态机可以进一步由已被定义以详细描述以下的所有各种组合的状态表组或库来实施:命令、属性、之前的状态、以及可以影响如何发生状态转换、以及可以与状态转换相关联的消息类型、数据操作、掩码等。每个状态表可以与特定动作、或动作或状态的特定类别相对应。该组表可以包括多个表,每个表与特定动作或子动作相对应。该组表可以实施对协议(例如,一致性协议或HPI的(在任何堆栈层处的)另一协议)的正式规范。

状态表可以为人可读文件,例如可以由使用端点计算机设备而与状态表结构进行交互的人类用户容易地解释、修改和开发的状态表结构。其它用户可以利用状态表来容易地解释一致性协议(或HPI的任何其它协议)内的状态转换。此外,状态表可以为机器可读和可解析结构,其由计算机读取并解释以识别根据特定协议规范状态如何转换。

图7示出了针对动作“动作A”的一般化的状态表的简化表示。在一个示例中,协议状态表700可以包括与当前状态(或要从其进行转换的状态)有关的列(例如,705)以及与下一状态(或要转换到的状态)有关的其它列(例如,710)。在当前状态列中的列可以与状态的各个特性相对应,例如在响应消息中接收到的命令、监听消息、或其它消息、高速缓存行状态、出去请求缓冲区(ORB)状况(condition)、用于应用/预留的信用或资源、高速缓存行是否被部分地修改、转发状况等。表700中的每行可以与处于特定状态的高速缓存行的所检测到的状况组相对应。此外,在下一状态列(例如,710)内的行中的单元格可以基于在当前状态列(例如,705)中的行单元格中详细说明的当前状态状况来表明要进入到的下一状态及其状况。下一状态列(例如,710)可以与下一状态中的状况相对应,例如要发送(到对应的本地节点(HNID)、请求节点(RNID)、对等节点等)的消息、下一高速缓存行状态、转发状态等。

在一个实施例中,协议状态表可以使用跨行(row spanning)来表明多个行为或状态(行)对于某组当前状态状况是等同地允许的。例如在图7的示例中,当命令为Cmd1、第一状况为假、高速缓存行处于第二状态、并且第二状况也为假时(如由行715所表明的),多个潜在的下一状态状况是可能的并且可以是等同地允许的,每个潜在的下一状态状况由相应行表明。也就是说,可以基于对应的当前状态状况而触发这些等同地允许的转换中的任意一个。在一些实施方式中,除其它示例实施方式之外,附加的代理逻辑还可以选择要选择多个下一状态中的哪个。在一个示例性示例中,与本地代理发送请求响应相对应的状态表的当前状态部分可以包括多个状况(或输入和状态防护),其包括对于一致性代理在将完整M-行保存在其高速缓存中并且在处理到同一高速缓存行的SnpMigr时要执行的所有有效行为。除了其它示例之外,表行还可以与一致性代理可以响应于当前状态状况而进行的五个不同的并且等同地允许的下一状态行为相对应。

在其它系统中,偏置比特可以被包括在协议状态表中,其中对于特定当前状态,多个潜在的下一状态或状况是可能的。例如,在QPI中,“偏置”比特被包括在表中作为在行为中进行选择的机制。这样的偏置比特可以主要在对协议的状态机进行验证期间使用,但是这样的偏置比特引入额外的复杂度,并且在一些情况下引入不熟悉偏置比特的使用的混乱。在一些方面,偏置比特可以只不过是验证工作的伪影(artifact)。在HPI的一个示例中,通过使用潜在地跨多个行的行的协议表,偏置比特和其它特征可以被排除。在这样的实例中,HPI协议表可以强调明确的非确定性。

转到图8的示例,在一个实施例中,协议表可以通过使一个表在“下一状态”列中参照另一子表而进行嵌套,并且嵌套表可以具有额外的或细粒度的防护以指定哪些行(行为)是被允许的。如图8所示,示例协议状态表700可以包括对被包括在表组中的另一表800的嵌入引用805,所述表组实施协议规范,例如与被指定以针对表700的某些行的下一状态中所包括关于动作或行为的子动作有关的状态表。多个表(例如,700、810)可以引用嵌套的子动作表(例如,800)。例如,处理对协议响应的进来的响应的代理可以遵循动作表(例如,700、810)以及子动作表800。这里,表700可以包括具有嵌套在一个或多个其它协议表下的子动作表的下一状态。这种类型的嵌套可以应用于一致性协议和协议层状态表之外,但是还可以应用于任何已知或未来的协议响应/表。

在一个示例中,代理可以利用协议表(或从协议表构建的另一可解析结构)并且可以识别与特定动作或事件对应的特定状态表。此外,该代理可以识别应用到由该代理所负责或作为目标的缓冲行的行,并且从表中识别针对该缓冲行的状态信息。该确定可以包括识别对嵌套的子动作表的引用。由此,代理可以识别所链接到的嵌套表的对应结构并且进一步参考嵌套表以确定状态转换。

在一个特定示例中,协议表的集合组可以被定义并且表示协议中所有可能的、定义的状态转换。此外,每个表可以指定覆盖协议内的一组有关行为的一组转换(例如,一个表覆盖监听和更新高速缓存状态中所包括的所有行为,一个覆盖生成新请求的所有行为等)。当代理执行行为、处理事件、或检查是否应当采取一些其它动作时,代理可以识别覆盖状态表组内的特定行为的特定状态表。接着,代理可以识别系统的当前状态并且参照所选择的状态表来识别与当前状态相匹配的(如果有的话)行或行的组。如果没有行匹配,则在一些实例中,代理可以避免针对给定的当前状态而采取任何动作,并且在再次尝试之前等待一些其它事件/行为来改变该状态。此外,在一些实例中,如上文所述,如果多于一行与所识别的系统相匹配,则代理可以选择它们中的任何一个来执行,这是因为它们全都被认为是等同地允许的。此外,在嵌套的情况下,如果行参照嵌套表,则代理可以访问该嵌套表并且使用所标识的系统的当前状态以在嵌套表中搜索允许的行。

在一些示例中,在遍历了任何主要和嵌套表以确定对特定的标识的系统(或协议)状态的响应时,根据在对应状态表中所指定的“下一状态”,代理可以使得对应的动作被执行并且使得系统的状态被更新。

在一些实例中,多于一个状态表与一组行为有关或覆盖一组行为是可能的。例如,如一个示例性示例,可以提供两个表以用于处理监听,第一个表用于当存在发生冲突的活动请求时的情况,第二个表用于不存在这样的冲突时情况。由此,在一些实施方式中,代理可以调查多个表以确定哪个表包括与由代理所识别的特定状况和状态相关的行。在外,在一些情况下,代理可以负责同时发生的两个不相关或不同的事件,例如这样的示例:本地代理同时接收到监听响应和新请求。在多个事件被同时处理的实例中,代理可以同时识别和使用多个对应的表以确定如何处理这些事件。

现在转向图9和图10,其示出了用于验证协议的至少一部分而使用的测试或验证环境的示例的简化框图。例如,在图9的示例中,测试引擎900被提供以适应于验证协议的状态机。例如,在一个示例中,测试引擎900可以包括或可以基于Murphi工具或另一枚举(显式状态)模型检查器等。例如,其它规范语言可以被利用以代替所描述的Murphi示例,包括,如另一示例,TLA+或另一合适的语言或格式。在传统系统中,状态模型检查器已由尝试将状态机(例如,从所附状态表等)转化为接着被使用以生成能够检查该状态机的检查器的一组要求的人类开发员所构建。这不但是典型的劳动力和资源密集型过程,而且引入人为误差,这是因为由人类用户来转录和解释状态表的状态及状态转换。

在一个实施方式中,测试引擎900可以利用一组状态表(例如,905)以(从该状态表组)自动生成资源以在测试环境中对代理的行为进行建模。例如,在图9的示例中,测试引擎900可以利用状态表905作为用于对高速缓存代理或可以用于通过使用其它真实或仿真的代理(包括本地代理915)而仿真请求和响应(例如,912)以验证各种状态转换的其它代理(例如,910)进行建模。类似地,如图10的示例所示,测试引擎900可以利用状态表905来仿真本地代理(例如,920)的请求和响应(例如,918),并且可以与其它真实或仿真的代理(例如,925)接合以进一步验证并枚举协议的状态。例如,基于状态表905,测试引擎900可以对代理进行建模并且接收真实或建模的协议消息,例如HPI一致性协议消息,并且参照状态表905(或从状态表905生成的另一可解析结构)来自动生成适当响应,执行对应的状态转换等。

在一个特定实施方式中,测试引擎或另一基于软件或硬件的工具(utility)可以用于利用状态表(例如,905)以生成用于代码,该代码用于驱使采用特定协议(例如,HPI一致性协议)的设计或对该设计作出反应。在该特定示例中,通过将表或所包括的伪代码以及针对表值和伪代码元素的Murphi映射转换为适当的Murphi规则和过程格式,状态表可以被用作测试引擎的输入。测试引擎可以用于进一步生成Murphi代码以用于类型定义和支持功能。例如,可以使用转换器而将Murphi模型转换为C++或其它类别定义。确实,可以利用任何合适的编程语言。模型类别的子类别可以被进一步生成,并且这些模块可以用于作为采用或对齐到在状态表中实施的协议规范的仿真的或测试平台版本的代理。此外,内部API可以被生成或另外被提供,其对齐到在协议状态表中定义的消息生成和消息接收。例如,消息生成API可以被关联到链路分组类型,并且消息接收可以在单个接口点中被统一。在该示例中,整个正式的协议规范可以被转换为C++(或其它面向对象编程语言)类别。可以使用继承以截获所生成的消息,并且继承类别的实例可以被创建为功能性测试平台代理。一般地,正式的规范表可以用作用于验证或测试环境工具的功能引擎,而非使开发员基于他们对规范的解释而单独地创建他们自己的工具。

HPI可以被并入任何种类的计算设备和系统,包括大型计算机、服务器系统、个人计算机、移动计算机(例如,平板计算机、智能电话、个人数字系统等)、智能装置、游戏或娱乐控制台以及机顶盒等。例如,参照图11,描绘了包括多核处理器的计算系统的框图的实施例。处理器1100包括任何处理器或处理设备,例如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持处理器、应用程序处理器、协处理器、片上系统(SoC)、或其它设备以执行代码。在一个实施例中,处理器1100包括至少两个内核——内核1101和1102,其可以包括非对称内核或对称内核(所示出的实施例)。然而,处理器1100可以包括可以是对称或非对称的任意数量的处理元件。

在一个实施例中,处理元件是指支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽(thread slot)、线程、处理单元、上下文、上下文单元、逻辑处理器、硬件线程、内核、和/或任何其它元件,其能够保持处理器的状态,例如执行状态或架构状态。也就是说,在一个实施例中,处理元件是指能够独立地与代码(例如,软件线程、操作系统、应用程序、或其它代码)相关联的任何硬件。物理处理器(或处理器插口)通常是指集成电路,其潜在地包括任意数量的其它处理元件,例如内核或硬件线程。

内核通常是指位于集成电路上的能够维持独立的架构状态的逻辑,其中每个独立维持的架构状态与至少一些专用执行资源相关联。与内核不同,硬件线程通常是指位于集成电路上的能够维持独立的架构状态的任何逻辑,其中该独立维持的架构状态共享对执行资源的访问。可见,当某些资源被共享并且其它资源专用于架构状态时,硬件线程和内核的术语之间的线是重叠的。但往往,内核和硬件线程被操作系统视为个体逻辑处理器,其中操作系统能够个体地调度每个逻辑处理器上的操作。

如图11所示,物理处理器1100包括两个内核——内核1101和1102。这里,内核1101和1102被认为是对称内核,即具有相同配置、功能单元、和/或逻辑的内核。在另一实施例中,内核1101包括无序处理器内恶化,而内核1102包括有序处理器内核。然而,内核1101和1102可以是从以下任意类型的内核中单独选择的,例如:原生(native)内核、软件管理的内核、适应于执行原生指令集架构(ISA)的内核、适应于执行经转换的指令集架构(ISA)的内核、协同涉及的内核、或其它已知内核。在异构内核环境(即,非对称内核)中,可以利用一些形式的转换(例如,二进制转换)来调度或执行一个或两个内核上的代码。对于进一步的讨论,在下文中消息描述了在内核1101中示出的功能单元,在所描绘的实施例中,内核1102中的单元以类似方式操作。

如所描绘的,内核1101包括两个架构状态寄存器1101a和1101b,其还可以被称为硬件线程槽1101a和1101b。因此,在一个实施例中,软件实体(例如操作系统)潜在地将处理器1100视为四个单独处理器,即能够同时执行四个软件线程的逻辑处理器或处理元件。如上文所暗示的,第一线程与架构状态寄存器1101a相关联,第二线程与架构状态寄存器1101b相关联,第三线程可以与架构状态寄存器1102a相关联,并且第四线程可以与架构状态寄存器1102b相关联。这里,如上文所述,架构状态寄存器(1101a、1101b、1102a、和1102b)中的每个可以被称为处理元件、线程槽、或线程单元。如所示出的,在架构状态寄存器1101b中复制架构状态寄存器1101a,所以单个架构状态/上下文能够被存储以用于线程单元1101a和线程单元1101b。在内核1101中,其它较小的资源(例如,重命名/分配器1130中的指令指针和重命名逻辑)也可以被复制以用于线程单元1101a和1101b。可以通过分区而共享一些资源,例如重排序/退出单元1135中的重排序缓冲区、分支目标缓冲区和I-LTB 1120、加载/存储缓冲区、和队列。其它资源,例如通用内部寄存器、页-表基地址寄存器、较低层数据高速缓存和D-TLB1150、调度器/执行单元1140、以及重排序/退出单元1135的一部分可以潜在地被完全共享。

处理器1100通常包括其它资源,该其它资源可以被完全共享、通过分区而共享、或由处理元件专用/专用于处理元件。在图11中,示出了具有处理器的示例性逻辑单元/资源的纯示例性处理器的实施例。应当注意,处理器可以包括或省略这些功能单元中的任何功能单元,并且可以包括其它未示出的已知功能单元、逻辑或固件。如所示出的,内核1101包括简化的、代表性的无序(OOO)处理器内核。但是在不同实施例中可以利用有序处理器。OOO内核包括分支目标缓冲区和I-LTB 1120以预测要被执行/采用的分支,以及指令转换缓冲区以存储用于指令的地址转换实体。

内核1101还包括耦合到提取单元的解码器1125以解码所提取的元素。在一个实施例中,提取逻辑包括分别与线程槽1101a、1101b相关联的个体定序器(sequencer)。内核1101通常与第一ISA相关联,第一ISA定义/详细说明可在处理器1100上执行的指令。第一ISA的一部分的机器代码指令通常包括该指令(被称为操作码)的一部分,其引用/详细说明要执行的指令或操作。解码器1125包括这样的电路:从这些指令的操作码而识别这些指令并且将所解码的指令在管线中传递以用于如由第一ISA所定义的而进行处理。例如,如在下文中更加详细讨论的,在一个实施例中,解码器1125包括被设计或适用于识别特定指令(例如,事务指令)的逻辑。作为有解码器1125所进行的识别的结果,架构或内核1101采用特定的、预先定义的动作来执行与适当指令相关联的任务。重要的是要注意到,可以响应于单个或多个指令来执行本文中描述的任何任务、块、和方法;所述单个或多个指令中的一些可以是新的或旧的指令。在一个实施例中,应当注意解码器1126识别同一ISA(或其子集)。或者,在异构内核环境中,解码器1126识别第二ISA(第一ISA的子集或不同的ISA)。

在一个示例中,重命名/分配器1130包括分配器以保留资源(例如,寄存器堆(register file))来存储处理结果的指令。然而,线程单元1101a和1101b潜在地能够无序执行,其中重命名/分配器1130还保留其它资源(例如,重排序缓冲区)以追踪指令结果。重命名/分配器1130还可以包括寄存器重命名器以将程序/指令参考寄存器重命名为处理器1100内部的其它寄存器。重排序/退出单元1135包括组件,例如上文提到的重排序缓冲区、加载缓冲区、和存储缓冲区以支持无序执行以及之后的无序执行的指令的有序退出。

在一个实施例中,调度器/执行单元1140包括调度器单元以调度执行单元上的指令/操作。例如,浮点指令被调度到具有可用浮点执行单元的执行单元的端口上。还包括与该执行单元相关联的寄存器堆以存储信息指令处理结果。示例性执行单元包括浮点执行单元、整数执行单元、跳转(jump)执行单元、加载执行单元、存储执行单元、和其它已知执行单元。

较低层数据高速缓存和数据转换缓冲区(D-TLB)1150耦合到调度器/执行单元1140。数据高速缓存存储最近在元件上所使用/操作的(例如,数据操作数),其潜在地被保持在存储器一致性状态中。D-TLB存储最近的虚拟/线性地址到物理地址的转换。如一个特定示例,处理器可以包括页表结构以将物理存储器分解为多个虚拟页。

这里,内核1101和1102共享对较高层或较外部(further-out)高速缓存(例如与片上接口1110相关联的第二层高速缓存)的访问。应当注意,较高层或较外部是指增加或更加远离执行单元的高速缓存层。在一个实施例中,较高层高速缓存是最后一层数据高速缓存——在处理器1100上的存储器层级结构中的最后的高速缓存——例如第二或第三层数据高速缓存。然而,较高层高速缓存并不限于此,这时因为其可以与指令高速缓存相关联或包括指令高速缓存。追踪高速缓存——指令高速缓存的一种——相反可以在解码器1125之后耦合以存储最近所解码的追踪。这里,指令潜在地指代宏指令(即,由解码器识别的通用指令),其可以解码成多个宏指令(微操作)。

在所示的配置中,处理器1100还包括片上接口模块1110。历史上地,在下文中更详细描述的存储器控制器已被包括在处理器1100外部的计算系统中。在这种情况下,片上接口1110与处理器1100外部的设备进行通信,例如系统存储器1175、芯片组(通常包括存储器控制器集线器以连接到系统存储器1175,以及I/O操作器集线器以连接外围设备)、存储器控制器集线器、北桥、或其它集成电路。并且在该情况下,总线1105可以包括任何已知互连,例如多点分支总线、点对点互连、串行互连、并行总线、一致性(例如,高速缓存一致性)总线、分层协议架构、差分总线、以及GTL总线。

系统存储器1175可以专用于处理器1100或与系统中的其它设备共享。系统存储器1175的类型的常见示例包括DRAM、SRAM、非易失性存储器(NV存储器)、以及其它已知存储设备。应当注意设备1180可以包括耦合到存储器控制器集线器的图形加速器、处理器、或卡,耦合到I/O控制器集线器的数据存储设备,无线收发器、闪存设备、音频控制器、网络控制器、或其它已知设备。

然而近来,随着更多的逻辑和设备被集成到单个管芯上(例如SOC),这些设备中的每个可以被并入到处理器1100上。例如,在一个实施例中,存储器控制器集线器与处理器1100在同一封装和/或管芯上。这里,内核的一部分包括一个或多个控制器以用于与诸如系统存储器1175或设备1180这样的其它设备接合。包括用于与这种设备接合的互连和控制器的配置通常被称为内核上(on-core)(或无内核(un-core)配置)。例如,片上接口1110包括用于片上通信的环形互连和用于片外通信的高速串行点对点链路。但是在SOC环境中,甚至更多设备(例如网络接口、协处理器、系统存储器1175、设备1180、以及任何其它已知的计算机设备/接口)可以被集成在单个管芯或集成电路上,以提供具有高功能性和低功耗的小形状因子。

在一个实施例中,处理器1100能够执行编译器、优化、和/或翻译器代码1177以编译、翻译、和/或优化应用程序代码1176来支持本文中描述的装置和方法或与其接合。编译器通常包括程序或程序组以将源文本/代码翻译为目标文本/代码。通常,使用编译器对程序/应用程序代码的编译是在多个阶段和步骤内完成的,以将高级编程语言代码转换为低级机器或汇编语言代码。然而,单遍编译器仍可以用于简单编译。编译器可以利用任何已知的编译技术并且执行任何已知的编译操作,例如词法分析、预处理、解析、语义分析、代码生成、代码转换、和代码优化。

较大的编译器通常包括多个阶段,但是最经常时这些阶段被包括在两个一般阶段内:(1)前端,即,一般可以发生句法处理、语义处理、和一些转换/优化的地方,以及(2)后端,即一般发生分析、转换、优化和代码生成的地方。一些编译器指代中间,其示出了编译器的前端和后端之间的描画的模糊。因此,对编译器的插入、关联、生成、或其它操作的提及可以发生在上文所述的任意阶段或步骤中,以及编译器的任何其它已知的阶段或步骤中。如示例性示例,编译器潜在地将操作、调用、函数等插入到编译的一个或多个阶段中,例如将调用/操作插入到编译的前端阶段,并且接着在转换阶段期间将调用/操作转换为低级代码。应当注意在动态编译期间,编译器代码或动态优化代码可以插入这样的操作/调用,以及优化代码以用于在运行期间执行。如特定的示例性示例,二进制代码(已编译的代码)可以在运行期间被动态地优化。这里,程序代码可以包括动态优化代码、二进制代码、或其组合。

与编译器雷系,诸如二进制翻译器的翻译器将代码静态地或动态地翻译以优化和/或翻译代码。因此,对代码、应用程序代码、程序代码、或其它软件环境的执行的提及可以指代:(1)编译器程序、优化代码优化器、或翻译器的动态或静态执行,以编译程序代码、维持软件结构、执行其它操作来优化代码、或翻译代码;(2)包括操作/调用的主程序代码(例如,已被优化/编译的应用程序代码)的执行;(3)执行与主程序代码相关联的其它程序代码(例如,库)以维持软件结构、执行其它关于软件的操作、或优化代码;或(4)其组合。

HPI可以被并入任何种类的计算设备和系统,包括大型计算机、服务器系统、个人计算机、移动计算机(例如,平板计算机、智能电话、个人数字系统等)、智能装置、游戏或娱乐控制台以及机顶盒等。例如,图12示出了根据一些实施方式的示例计算机系统。如图12所示,多处理器系统1200为点对点互连系统,并且包括经由点对点互连1250耦合的第一处理器1270和第二处理器1280。处理器1270和1280中的每个可以为一些版本的处理器。在一个实施例中,1252和1254为串行点对点一致性互连结构(例如高性能架构)的一部分。因此,本发明可以在QPI架构内实施。

虽然仅示出两个处理器1270、1280,但是要理解的是本发明的范围并不限于此。在其它实施例中,在给定处理器中可以存在一个或多个额外的处理器。

示出了处理器1270和1280,其分别包括集成的存储器控制器单元(IMC)1272和1282。处理器1270还包括作为其总线控制器单元的一部分的点对点(P-P)接口电路1276和1278;类似地,第二处理器1280包括P-P接口电路1286和1288。处理器1270和1280可以使用P-P接口电路1278、1288经由点对点(P-P)互连1250交换信息。如图12所示,IMC 1272和1282将处理器耦合到相应存储器,即存储器1232和存储器1234,其可以为在本地附接到相应处理器的主存储器的一部分。

处理器1270和1280使用点对点接口电路1276、1294、1286、1298经由个体P-P互连1252、1254而与芯片组1290交换信息。芯片组1290还沿着高性能图形互连1239经由接口电路1292而与高性能图形电路1238交换信息。

共享高速缓存(未示出)可以被包括在每个处理器内或两个处理器外;但是经由P-P互连而与处理器相连,从而使得如果处理器被置于低功率模式,则每个或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。

芯片组1290可以经由接口电路1296而耦合到第一总线1216。在一个实施例中,第一总线1216可以是外围组件互连(PCI)总线、或诸如快速PCI总线或另一第三代I/O互连总线这样的总线,尽管本发明的范围不限于此。

如图12所示,各个I/O设备1214耦合到第一总线1216以及总线桥1218,总线桥1218将第一总线1216耦合到第二总线1220。在一个实施例中,第二总线1220包括低引脚数(LPC)总线。各种设备被耦合到第二总线1220,这包括例如键盘/鼠标1222、通信设备1227和数据存储设备1228(例如,在一个实施例中,磁盘驱动器或其它大容量存储设备,其通常包括指令/代码和数据1230)。此外,音频I/O 1224被示出为耦合到第二总线1220。应当注意,其它架构是可能的,其中所包括的组件和互连架构不同。例如,除了图12的点对点架构,系统可以实现多点分支总线或其它这样的架构。

虽然已关于有限数量的实施例描述了本发明,但是本领域技术人员将意识到对这些实施例的许多修改和变型。所附权利要求旨在覆盖落入本发明的真实精神和范围内的所有这些修改和变型。

设计可以经历各个阶段,从创建到仿真到制造。表示设计的数据可以以多种方式来表示设计。首先,如在仿真中实用的,可以使用硬件描述语言或另一功能性描述语言来表示硬件。另外,可以在设计过程的一些阶段生产具有逻辑和/或晶体管栅极的电路级模型。此外,大多数设计在一些阶段达到表示各个设备在硬件模型中的物理放置的数据等级。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以为详细说明在针对用于产生集成电路的掩膜的不同掩膜层上的各个特征的存在或不存在的数据。在设计的任意表示中,数据可以存储在任意形式的机器可读介质中。存储器或磁或光存储设备(例如,盘)可以为用于存储经由调制的或另外生成以传输信息的光或电波而传播的信息的机器可读介质。当传输了表明或携带代码或设计的电载波时,电信号的复制、缓冲、或重传被执行,做出新的副本。因此,通信提供商或网络提供商可以在有形、机器可读介质上(至少临时地)存储实施了本发明的实施例的技术的制品,例如被编码成载波的信息。

本文中所使用的模块是指硬件、软件、和/或固件的任意组合。例如,模块包括硬件(例如,微控制器),其与用于存储适用于由该微控制器执行的代码的非瞬时性介质相关联。因此,在一个实施例中,对模块的提及是指硬件,其具体地被配置为识别出和/或执行要保持在非瞬时性介质上的代码。此外,在另一实施例中,模块的使用是指包括代码的非瞬时性介质,该代码具体地适应于要被微控制器执行以进行预先确定的操作。并且如可以推断的,在又一实施例中,术语模块(在本实例中)可以指代微控制器和非瞬时性介质。通常,被示出为分离的模块边界一般不同并且潜在地重叠。例如,第一和第二模块可以共享硬件、软件、固件、或其组合,而潜在地保留一些独立硬件、软件、或固件。在一个实施例中,术语逻辑的使用包括硬件(例如,晶体管、寄存器)、或其它硬件(例如,可编程逻辑器件)。

在一个实施例中,短语“被配置为”的使用是指布置、装配、制造、提供销售、导入和/或设计装置、硬件、逻辑、或元件以执行特定的或确定的任务。在该示例中,为进行操作的装置或其元件仍然“被配置为”执行特定的任务,如果其被设计、耦合、和/或互连以执行所述特定的任务。如纯示例性示例,逻辑门可以在操作期间提供0或1。但是逻辑门“被配置为”向时钟提供使能信号并不包括可以提供1或0的每个潜在的逻辑门。相反,该逻辑门为以一些方式耦合从而在操作期间1或0输出要使能时钟的一个逻辑门。再一次注意,术语“被配置为”的使用并不要求操作,但是相反专注于装置、硬件、和/或元件的潜在状态,其中在潜在状态中,装置、硬件和/或元件被设计为当该装置、硬件、和/或元件在运行时执行特定任务。

此外,在一个实施例中,短语“以”、“能够”、和/或“可操作以”的使用是指以这样的方式而设计的一些装置、逻辑、硬件、和/或元件:以指定的方式而使能该装置、逻辑、硬件、和/或元件的使用。在一个实施例中,如上所述的以、能够、或可操作以的使用是指装置、逻辑、硬件、和/或元件的潜在状态,其中装置、逻辑、硬件、和/或元件并不运行但是以这样的方式被设计:以指定方式使能装置的使用。

如在本文中使用的,值包括数字、状态、逻辑状态、或二进制逻辑状态的任何已知表示。通常,逻辑水平、逻辑值、或逻辑的值也被称为1和0,其仅表示二进制逻辑状态。例如,1指代高逻辑水平而0指代低逻辑水平。在一个实施例中,存储单元(例如,晶体管或闪存单元)可以能够保持单个逻辑值或多个逻辑值。然而,还没使用计算机系统中的值的其他表示。例如,十进制数十还可以被表示为二进制值1010和十六进制字母A。因此,值包括能够被保持在计算机系统中的信息的任何表示。

另外,可以由值或值的一部分来表示状态。例如,第一值(例如,逻辑一)可以表示默认或初始状态,而第二值(例如,逻辑零)可以表示非默认状态。另外,在一个实施例中,术语重置和设置分别是指默认和更新的值或状态。例如,默认值潜在地包括高逻辑值,即重置,而更新的值潜在地包括低逻辑值,即设置。应当注意值的任意组合可以用于表示任意数量的状态。

可以经由存储在机器可访问、机器可读、计算机可访问、或计算机可读介质上的可由处理单元执行的指令或代码,实现上文阐述的方法、硬件、软件、固件或代码的实施例。非瞬时性机器可访问/可读介质包括以由机器(例如,计算机、或电子系统)可读的形式提供(即,存储和/或传输)信息的任何机制。例如,非瞬时性机器可访问介质包括随机存取存储器(RAM),例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪速存储器设备;电存储设备;光存储设备;声存储设备;用于保持从瞬时性(传播的)信号(例如,载波、红外信号、数字信号)接收到的信息的其它形式的存储设备;等,其区别于可以从其接收信息的非瞬时性介质。

用于编程逻辑以执行本发明的实施例的指令可以被存储在系统中的存储器内,例如DRAM、高速缓存、闪速存储器、或其它存储设备。此外,指令可以经由网络或通过其它计算机可读介质而分发。因此,计算机可读介质可以包括用于以由机器(例如,计算机)可读的形式存储或传输信息的任何机制,但不限于在经由电、光、声或其它形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网而传输信息中所使用的软盘、光盘、光盘只读存储器(CD-ROM)、磁-光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁或光卡、闪速存储器、或有形、机器可读存储设备。由此,计算机可读介质包括适用于以由机器(例如,计算机)可读的形式存储或传输点指令或信息的任意类型的有形机器可读介质。

以下示例关于根据本说明书的实施例。一个或多个实施例可以提供装置、系统、机器可读存储设备、机器可读介质、和方法来提供包括状态表存储设备的代理,其用于保持状态表组,所述状态表组表示多个一致性协议动作,其中所述状态表组包括至少一个嵌套状态表,以及与所述状态表存储设备相关联的协议逻辑,所述协议逻辑接收一致性协议消息,并且至少部分地基于所述一致性协议消息,从所述状态表组确定所述多个一致性协议动作中的一个一致性协议动作。

在至少一个示例中,所述嵌套状态表包括还在所述状态表组中的至少一个其它状态表中所链接到的特定状态表。

在至少一个示例中,其中,所述特定状态表与对应于所述其它状态表的动作的子动作相对应。

在至少一个示例中,其中,所述特定状态表是通过所述状态表组中的多个不同状态表被链接到的。

在至少一个示例中,协议层逻辑在所述状态表组中识别与该消息相对应的特定状态表,识别与所述特定状态表的与所述消息的属性相对应的行,并且在所述行中识别对所述嵌套状态表的引用,其中所述一致性协议动作是至少部分地基于所述嵌套状态表而确定的。

在至少一个示例中,所述特定状态表包括与当前状态相对应的一个或多个列以及与下一状态相对应的一个或多个列,并且对所述嵌套状态表的所述引用被包括在与下一状态相对应的列中。

在至少一个示例中,所述一致性协议动作包括转换到由与下一状态相对应的列中的一个或多个单元格所指定的另一状态。

在至少一个示例中,所述消息包括监听、数据消息、完成、和转发响应消息中的至少一个。

在至少一个示例中,该表组实施协议的正式规范。

在至少一个示例中,所述协议包括一致性协议。

在至少一个示例中,该表组为机器可解析表。

在至少一个示例中,该表组包括明确非确定性的表。

在至少一个示例中,该表组缺少偏置字段。

一个或多个实施例可以提供装置、系统、机器可读存储设备、机器可读介质、和方法来提供状态表存储设备,其用于保持状态表组,所述状态表组表示多个一致性协议动作,其中所述协议表组包括至少一个嵌套状态表,以及适用于验证特定协议的状态机的至少一部分的测试引擎,其中验证所述状态机包括仿真代理的一致性协议动作,并且所述状态表组被用于根据所述特定协议仿真所述代理的一致性协议动作。

在至少一个示例中,所述特定协议包括一致性协议。在至少一个示例中,测试平台代理是根据所述状态表组生成的。在至少一个示例中,生成测试平台代理包括根据所述状态表组生成至少一个Murphi模型。在至少一个示例中,生成所述测试平台代理还包括将Murphi模型转换为至少一个类别定义。在至少一个示例中,所述测试平台代理,当被执行时,仿真所述代理的请求和响应。

在至少一个示例中,所述状态表组包括至少一个嵌套状态表。在至少一个示例中,所述嵌套状态表包括在所述状态表组中的至少一个其它状态表中所链接到的特定状态表。在至少一个示例中,所述嵌套状态表与对应于所述其它状态表的动作的子动作相对应。

一个或多个实施例可以提供装置、系统、机器可读存储设备、机器可读介质、和方法来接收一致性协议消息,在状态表组中识别与该消息相对应的特定状态表,其中,所述状态表组包括一个或多个嵌套状态表,在特定状态表中识别对另一嵌套状态表的引用,并且至少部分地基于所述另一状态表的内容而确定对所述消息的响应。

在至少一个示例中,所述响应包括状态转换和响应消息中的一个或多个。在至少一个示例中,响应消息包括监听响应消息、写回消息、读消息、数据消息、和转发请求消息中的至少一个。

在至少一个示例中,所述响应在测试中对代理的响应进行建模。在至少一个示例中,所述测试包括对协议的至少一部分的验证。在至少一个示例中,所述状态表组是明确非确定性的。

本说明书中通篇提到的“一个实施例”或“实施例”意味着结合该实施例描述的特定特征、结构、或特性被包括在本发明的至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”在本说明书通篇中各处的出现并不一定指代同一实施例。此外,这些特定特征、结构、或特性可以以任何适当方式在一个或多个实施例中结合。

在前述说明书中,已经参照具体的示例性实施例给出了详细描述。然而,将会显而易见的是,可以对具体的示例性实施例进行各种修改和改变而不背离在所附权利要求中所阐述的本发明的宽泛精神和范围。由此,本说明书和图被认为在说明性的意义上而非在限制性的意义上。此外,实施例和其它示例性语言的前述使用并不一定指代同一实施例或同一示例,但是可以指代不同和独特的实施例,以及潜在地指代同一实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1