使用硬件队列设备的多核心通信加速的制作方法

文档序号:14958888发布日期:2018-07-18 00:07阅读:148来源:国知局

核心对核心(“c2c”)通信现今在诸如分组处理、高性能计算、机器学习和数据中心/云工作负荷之类的许多计算机应用中是至关重要的。在芯片多处理器(“cmp”)架构中,由于核心的数量增加,c2c通信经常在工作负荷共享数据时变成性能增减的限制因素。在通用平台上,经常采用核心之间的共享存储器空间来实现有效的c2c通信。然而,对由软件来来仔细管理共享存储器空间的需要连同硬件一致性通信量上的增加趋向于引发大量的开销。因此,共享一致性高速缓存的cpu核心和片上网络(“noc”)设计通常实质上经历更长的等待时间和更高的数据通信量,同时消耗可观的资源来实行通信相关的工作。这阻止了cpu核心和noc实行它们所意图的数据处理任务。

一般而言,通常在cmp平台上使用诸如经典兰伯特(lamport)算法之类的软件队列来实现c2c通信。存在两种类型的在传统软件队列中生成的开销。第一种包括由队列结构维护和同步以及由共享存储器的流控制和管理所消耗的循环。这种类型的开销被称为控制层面开销。第二种类型的开销包含在将数据从一个核心移动到另一个核心时花费的循环。这种类型的开销被称为数据层面开销。控制层面开销和数据层面开销的总和构成跨核心传输数据所需要的总开销。存在软件优化和硬件优化两者可用于减轻这些开销。来自dpdk库的rte环代码(软件优化)和利用飞思卡尔(freescale)的dpaa技术的硬件加速排队(硬件优化)是当今现有的优化技术的示例。然而,这些现有的优化在减少核心对核心通信开销上都不是理想。当涉及同时减少控制层面开销和数据层面开销两者时尤其如此。

附图说明

本发明的前述方面和许多伴随的优点将变得更容易理解,因为通过参考下面的详细描述并结合附图可以更好地理解本发明,其中相同的附图标记在各个视图中指代相同的部分,除非另有说明:

图1是图示了包括各种硬件部件的示例性队列管理设备的示意图;

图2图示了配置队列管理设备内部的内部存储单元的示例性方式;

图3图示了通过队列管理设备构成队列条目的示例性方式;

图4图示了队列管理设备中的队列条目的示例性元数据字段;

图5是图示了示例性信誉度控制系统的示意图;

图6是图示了信誉度管理系统的示例性信誉度分发和补充过程的流程图;

图7a是图示了生产方/用户方软件与队列管理设备之间的交互的框图;

图7b是图示了硬件生产方/用户方设备与队列管理设备之间的交互的框图;

图8是示出了利用集中式队列管理设备来管理管道阶段之间的队列的示例性无线核心网络的示图;

图9是图示了虚拟化队列管理设备来支持多个虚拟机的框图;

图10a是图示了根据本发明的实施例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线二者的框图;

图10b是图示了根据本发明的实施例的要被包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名、无序发出/执行架构核心二者的框图;

图11是根据本发明的实施例的单核心处理器和具有集成存储器控制器和图形控制器的多核心处理器的框图;

图12图示了根据本发明的一个实施例的系统的框图;

图13图示了根据本发明的实施例的第二系统的框图;

图14图示了根据本发明的实施例的第三系统的框图;

图15图示了根据本发明的实施例的片上系统(soc)的框图;以及

图16图示了根据本发明的实施例的对比软件指令转换器的使用的框图,该软件指令转换器用以将源指令集中的二进制指令转换成目标指令集中的二进制指令。

具体实施方式

本文中描述了实现用于减少核心对核心通信开销的硬件队列设备的实施例。在以下描述中,阐述了许多具体细节来提供对本发明的实施例的透彻理解。然而,相关领域的技术人员将意识到的是,可以在不具有所述具体细节中的一个或多个的情况下,或者利用其它方法、部件、材料等等来实践本发明。在其它实例中,没有详细示出或描述公知的结构、材料或操作,以避免使本发明的方面晦涩难懂。

遍及本说明书对“一个实施例”或“实施例”的引用意指将结合实施例所描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在遍及本说明书的各个位置中的短语“在一个实施例中”或“在实施例中”的出现不一定都指代相同的实施例。此外,可以将特定的特征、结构或特性以任何适合的方式组合在一个或多个实施例中。为清楚起见,本文附图中的各个部件可以由它们在附图中的标号、而不是由特定附图标记来指代。

图1是示出了根据实施例的利用队列管理设备(qmd)的示例性硬件系统的示意图。将qmd100附接到高速互连或片上网络(“noc”)互连。在附图中将环102示出为该互连,但是也可以使用诸如网状网之类的其他网络形式。高速互连将cpu核心106-112和l3高速缓存104与qmd100连接。虽然没有在图中图示,但是可以存在附加的cpu核心、l3高速缓存和/或连接到高速互连的其他设备。cpu核心106-112、l3高速缓存104与qmd100之间的连接可以是特殊的专用互连或现有的共享互连。由cpu核心发出的入列(enqueue)和出列(dequeue)请求将要被路由到qmd。在其中要求确认的一个实施例中,qmd将会在每个成功的入列或出列操作之后向请求核心发送回响应以确认该请求的完成。在其中不要求确定的另一实施例中,请求核心与qmd之间的路径允许在不向请求核心发送回确认的情况下提交请求,所以提供或保留了长的足够的请求资源。还在图1中示出了qmd100的各种部件。qmd100包括一个或多个缓冲器(共同地被标注为114)、调度器116、入列引擎118、出列引擎120、信誉度池控制器122和内部存储单元124。

从请求cpu核心发送的入列和出列请求首先由qmd100接收并且存储到缓冲器114之一中。缓冲器114暂时地存储传入请求,因为qmd100可能不具有足够的资源或带宽来在所有传入请求被接收到的时刻服务所述所有传入请求。缓冲器是先入先出(fifo)队列,其中第一个进入缓冲器的请求将是第一个离开缓冲器的请求。在一个实施例中,分配缓冲器的一个子集来存储仅仅入列请求,同时为仅仅出列请求保留另一子集。还可以使用其他方式来分配缓冲器,诸如通过核心、通过线程、通过请求类型等等。可以在所有缓冲器中指派单个优先级等级以简化实施并且将吞吐量最大化。可替换地,可以实现多个优先级等级来支持细粒度的服务质量(qos)特征。例如,给定n个优先级,可以给每个入列和出列缓冲器对指派不同的优先级,使得为入列请求分配n个缓冲器以及为出列请求分配n个缓冲器。每个传入请求具有由请求核心/线程预先指派的或者在被qmd收到时由qmd所指派的优先级。然后将每个请求存储在对应于请求的优先级(1-n)和/或类型(入列或出列)的缓冲器中。

调度器116挑选缓冲器并且从缓冲器的头部选择一个或多个请求。根据调度策略来挑选缓冲器。可以实现各种调度策略,诸如轮询(roundrobin)、加权轮询、抢占优先以及这些和其他策略的组合。例如在轮询策略中,简单地按顺序挑选缓冲器,即,最低缓冲器id到最高的,或相反。如果所挑选的缓冲器是空的,则调度器116从不同的缓冲器来选择。在加权轮询策略中,调度器116基于它们相关联的优先级顺序地挑选和服务每个缓冲器。控制服务缓冲器的顺序的能力被称为请求级流控制。在挑选缓冲器并且从所挑选的缓冲器的头部选择一个或多个请求之后,调度器116根据请求类型调度每个所选择的请求以由入列引擎118或出列引擎120执行。

入列引擎电路118和出列引擎电路120通过专用端口读取和写入qmd的内部存储单元124。由入列引擎118执行的入列请求使一个数据项被插入到内部存储单元124中。由出列引擎120执行的出列请求使一个数据项被从内部存储单元124取回并且被发送到输出队列。如果请求不能被入列或出列引擎执行,则该请求可以被插回到缓冲器的尾部以便稍后处理。这减少了死锁请求核心或请求设备的机会。

内部存储单元124被用于存储队列和队列条目。该内部存储单元124可以包含静态随机访问存储器(“sram”)、动态随机访问存储器(“dram”)或任何其他适合的存储器技术。内部存储单元124可配置成支持任何数量的队列以及不同的队列大小。图2图示了内部存储单元可以被配置成支持不同队列和数据大小的方式中的几个实施例。在一个实施例中,内部存储单元200是10kb的sram块,其全部被分配给单个队列202,该单个队列202包含640个每个为16b的队列条目。当然,可以使用除10kb之外的其他大小。在另一实施例中,将10kb的sram块在两个队列212和214之中平均地划分,使得每个队列包含320个每个为16b的条目。可替换地,根据实施例,10kb的sram块可以被配置为支持两个不同大小的队列,其中一个队列包含150个每个为64b的条目,并且另一个队列具有40个每个为16b的条目。要注意的是,这些示例仅出于说明的目的而呈现于此,并且这些示例绝不是限制性的。队列数量和条目大小的任何组合都可以在这里被替代以满足数据存储需求。

图3提供了图示灵活的队列条目格式的实施例,该灵活的队列条目格式用于支持不同长度和大小的队列条目。虽然示出了大小为16b到64b的队列条目,但是也可以使用其他队列条目大小。每个队列条目由两个部分组成——元数据和“不透明数据”。元数据包含涉及诸如队列id、优先级、格式和长度之类的队列条目本身的信息。包含在每个队列条目的元数据中的信息被qmd用来在该条目上实行入列和出列相关的操作。不透明数据部分包含要经由出列请求来与用户方核心、线程、设备等共享的实际数据或对实际数据的指针。不透明数据部分通常被qmd忽略并且未被qmd动过。

图4根据实施例详细地图示了示例性队列条目的元数据。队列条目的元数据部分包含描述队列条目应当如何被qmd处置的参数。这些参数提供有关重新排序要求、原子性、负载平衡、分片、排序等等的信息。重新排序信息被用来指示当条目被发送到输出队列时,是否需要基于序列号的重新排序。原子性信息描述是否要将条目一次提交到单个核心。负载平衡信息指示是否可以采用跨多个输出队列的负载平衡。在判定是否为了通信量整形而拆分数据时使用分片字段。请注意,每个参数的实际定义和功能在每个实施例中可以不同于在此描述的。参数字段的大小和排列方式也可以与在图中所示的不同。可以将新的参数或字段添加到元数据,以用于实现qmd可以在队列条目上实行的附加功能性。

在一些实施例中,信誉度管理系统操作信誉度池控制器122来管理和跟踪信誉度池的数量。通过控制每个信誉度池中的信誉度,信誉度管理系统可以调节请求核心和线程发送传入请求的速率和频率。这阻止了可能引起核心停机(stall)或请求丢弃的传入请求的溢出。这反过来又改善了请求核心和线程二者以及qmd的效率。

当核心或线程想要向qmd100发送入列或出列请求时,该核心或线程首先从信誉度池控制器122获得适当的信誉度。由qmd接收到的不具有适当信誉度的请求将被qmd拒绝接受和/或丢弃。在一个实施例中,信誉度池控制器122维持全局入列信誉度池和全局出列信誉度池。这些全局信誉度池的大小分别对应于用于处置传入的入列和出列请求的qmd的总容量。信誉度池控制器122还为每个核心或线程维持一对局部入列和出列信誉度池。每对局部入列和出列信誉度池的大小对应于被分配到该特定核心或线程的qmd的容量的量。局部信誉度池可以由每个核心或线程来维持或者可替换地由信誉度池控制器122来中心地跟踪。通过控制每个局部信誉度池的大小和局部信誉度池被补充的速率,信誉度池控制器122在由每个核心或线程发送的入列/出列请求的数量上具有细粒度控制。例如,信誉度池控制器122可以实现诸如轮询或加权轮询之类的信誉度补充策略,以判定何时补充每个局部信誉度池以及要补充多少。信誉度池控制器722还可以保留信誉度以使所有的局部信誉度池匮乏(starve),并且因此减慢核心/线程发送请求以帮助qmd赶上未决操作的速率。图5是图示了信誉度控制系统504的概念的高级示图。信誉度控制系统504将信誉度从全局信誉度池502分发到一个或多个局部信誉度池506。每个核心/线程可以具有其自己的局部信誉度池,或者可以与其他核心/线程共享局部信誉度池。信誉度控制系统504根据信誉度补充策略用可用的信誉度补充每个局部信誉度池。

图6是图示了根据实施例的示例性信誉度分发和补充过程的流程图。最初,将所有可用的入列和出列信誉度输入到全局信誉度池。在602处,信誉度池控制器122确定在全局信誉度池中可用的总入列和出列信誉度,并且然后在604处,根据信誉度分发策略将入列/出列信誉度从全局信誉度池分发到每个局部入列/出列信誉度池。信誉度分发策略确定要分发和补充每个局部信誉度池的速率和频率。信誉度分发策略可以是轮询、加权轮询等等。

从这里,如果核心或线程想要向qmd发送入列请求,则该核心或线程将首先必须向信誉度池控制器请求入列信誉度,如在步骤606中那样。在608处,信誉度池控制器确定是否存在在局部入列信誉度池中可用的、对应于请求核心/线程的入列信誉度。如果没有入列信誉度可用,则请求核心或线程必须等待直到其局部入列信誉度池被补充为止。该请求核心或线程可以通过重新发送入列信誉度请求来这么做。另一方面,如果入列信誉度在局部入列信誉度池中是可用的,则在610处将入列信誉度从信誉度池控制器发送到请求核心/线程。局部入列信誉度池中的信誉度计数然后被减一。核心或线程可以在每次其想要发送请求时请求单个信誉度。可替换地,核心或线程可以一次请求几个信誉度并且将它们保存供以后使用。

在接收到来自信誉度控制器的所请求的入列信誉度之后,在步骤612处,核心/线程向qmd提交入列请求连同入列信誉度。在614处,qmd查看传入的入列请求是否伴随适当的入列信誉度。如果发送了没有所请求的入列信誉度的入列请求,则该请求被qmd丢弃。在一个实施例中,除了丢弃请求之外,qmd还将向请求核心/线程返回消息来通知其入列请求没有被处理。另一方面,如果回到614处qmd确定传入的入列请求被与适当的入列信誉度一起提交,则在616处入列引擎将处理该请求。接着,将从入列引擎向信誉度池控制器发送通知来补充全局出列信誉度池一个信誉度。

在出列请求的情况下,类似的过程将适用。从622开始,请求核心/线程首先向信誉度池控制器请求出列信誉度。在624处,信誉度池控制器确定出列信誉度在对应于请求核心/线程的适当的局部出列信誉度池中是否是可用的。如果没有出列信誉度是可用的,则请求核心/线程将在向信誉度池控制器发送另一信誉度请求之前等待一定时间。另一方面,如果出列信誉度在局部信誉度池中是可用的,则出列信誉度请求被兑现。在626处,信誉度池控制器向请求核心/线程发送所请求的出列信誉度,并且然后相应地降低局部出列信誉度池中的信誉度计数。在628处,核心/线程向qmd发送具有出列信誉度的出列请求。在630处,qmd检查传入的出列请求是否与所要求的出列信誉度一起被提交。如果没有找到所要求的出列信誉度,则该传入的出列请求被丢弃。然而,如果找到了适当的出列信誉度,则在632处由qmd的出列引擎处理该请求。在进行处理之后,出列引擎通知信誉度池控制器,该信誉度池控制器补充全局入列信誉度池一个信誉度。要注意的是,在出列操作完成时补充入列信誉度池,并且在入列操作发生之后补充出列信誉度池。通过经由信誉度补充策略来控制信誉度补充速度,该信誉度管理系统能够根据每个线程/核心的优先级来调节和影响它们的速度。

在一个实施例中,信誉度管理系统被禁用。当系统被禁用时,在可以由每个请求核心或线程发送的入列和出列请求的数量上没有限制。因此,每个请求核心/线程可以发送尽可能多的请求直到qmd到达其最大容量并且开始丢弃后续请求为止。这创建了反向压力并且可能使核心/线程在其等待接收来自qmd的所请求的数据时发生停机。最终,当qmd赶上处理和响应请求时,核心/线程将自己解除停机。因此对于软件应用而言不必跟踪qmd的可用资源。当信誉度管理系统被禁用时,qmd可以实现最大吞吐量,但是失去了控制每个核心/线程的速度或维持稳定吞吐量的能力。

为了使得请求核心/线程与qmd之间的通信更有效率,在一些实施例中使用三个指令中的一个。这些指令可以帮助加速出列、入列和数据移动操作。这些指令是:

●enqueue[reg][addr]:在该指令中,reg是包含要入列的数据的64位运算对象(operand)/寄存器。addr是用来识别特定队列或缓冲器的qmd的内部地址。

●dequeue[reg][addr]:在该指令中,reg是持有从qmd返回的返回值的目的地寄存器。addr是用来识别特定队列或缓冲器的qmd的内部地址。

●enqueue_opt[reg][addr]:该指令表现得像上面的新的入列指令,但是具有附加步骤,该附加步骤为将寄存器中的数据的拷贝推送到llc(即,经由cldemote指令将数据从l1/l2高速缓存移动到末级高速缓存)。

由cpu核心来执行enqueue、dequeue和enqueue_opt指令以与qmd通信。这些指令经过存储队列,但是要被非推测性地执行。虽然在存储队列中,但是可以将其他存储指令重新排序以在早前的入列或出列指令之前执行。因此,较晚的存储不需要等待早前的入列或出列指令完成而是可以“插队”。这些指令在它们到达头部存储队列时被发出,并且仅当从qmd返回响应时才从存储队列退休。与正常的存储指令相对比,出列指令的执行包括回写阶段来将数据写入目的地寄存器。

此外,在执行enqueue_opt指令时,除了实行入列操作之外,该执行还将生成存储器请求,即“预推”,该存储器请求表现得像逆预提取请求。替代于将高速缓存块从较低级高速缓存提取到较高级高速缓存,附加的存储器请求将把高速缓存块推送到全局共享的高速缓存并且使其私有的高速缓存中的副本无效。因此,当另一核心请求读取或写入该高速缓存块时,该请求核心可以从全局共享的高速缓存读取该高速缓存块,而不是触发数据转发或无效请求。这节约了大量循环和noc带宽。被推送的高速缓存块将与回写块使用相同的路径。要注意的是,块的地址由reg运算对象指定。因此,reg的内容必须是有效的指针并且在执行阶段中被mmu翻译。在一些实施例中还预推独立的指令,允许该指令像软件预提取指令那样被单独调用。

在图7a中根据实施例示出软件线程与qmd之间的交互的简化图。箭头指示共享数据的流动。在图7a中,生产方软件线程702向qmd提交包含数据项的入列请求。该请求被路由通过共享或专用互连704。qmd的输入队列或缓冲器706之一接收和暂时存储该传入请求。该请求然后由仲裁/调度逻辑708处理,并且伴随的数据项被存储在内部存储装置710中。由仲裁/调度逻辑708处理来自用户方软件线程716的后续出列请求使得数据项被从内部存储710装置取回并且被放置到qmd的输出队列712之一中。然后将数据项通过共享/专用互连714路由到用户方软件716。共享/专用互连704和714可以是相同的互连或者可以不是不同的互连。

在图7b中示出了图示生产方/用户方硬件设备与qmd之间的交互的类似示图。生产方设备722通过共享或专用互连724向qmd提交包含数据项的入列请求。在qmd的输入队列726中接收到并且存储该请求。仲裁/调度逻辑728从输入队列选择该请求、处理该请求并且然后将伴随的数据项存储在内部存储装置730中。随后,对qmd的用户方出列请求使数据项被从内部存储单元730取回并且放置到qmd的输出队列732之一中。然后通过共享或专用互连734将该请求路由到消费者设备736。共享/专用互连724和734可以是或可以不是相同的互连。还要注意的是,虽然在这些附图中图示了利用qmd的软件对软件和设备对设备数据通信,但是qmd不仅限于这些应用。例如,qmd可以被用来管理诸如核心对核心、核心对设备、线程对线程、线程对设备等等的其他类型的通信。

图8图示了根据实施例作为集中式高性能设备的qmd的高级使用,所述集中式高性能设备用于管理网络分组处理管线中的每个相邻步骤之间的队列。在穿过管线中的每个阶段之后,网络分组在被取回和发送到下一阶段之前被暂时存储在由qmd维持的队列中。例如,在核心对用户方(下游)管线中,qmd充当nic与接收核心之间的、接收核心与路由核心之间的、路由核心与通信量管理核心之间的、通信量管理核心与传输核心之间的、以及最终传输核心与接收nic之间的中间步骤。通过将分组的管理从传统软件队列移动到诸如qmd之类的硬件加速器,大大地减少了管理网络分组的流所需要的软件开销。此外,随着管线处理阶段的数量增加,将队列管理任务卸载到qmd的益处被进一步放大。

图9提供了根据实施例的通过应用单根i/o虚拟化(“sr-iov”)类型技术将qmd虚拟化为客户操作系统的示例。虽然上文描述了sr-iov,但是也可以使用其他虚拟化方法和技术。提供虚拟机监视器(“vmm”)或管理程序910接口以在物理qmd902之上操作多个虚拟qmd。vmm/管理程序910管理qmd的物理功能(即,资源)908并且将其划分到n个虚拟功能的集合(q912和914)中,并且将虚拟功能的一个集合分配到每个客户操作系统(924和926)。对客户os而言,每个虚拟功能的集合作为其自己的qmd来操作。在客户操作系统924上运行的想要向用户方软件930发送数据的生产方软件928将首先向虚拟qmd的输入队列916之一发送包含数据的入列请求。qmd虚拟功能然后通过管理程序利用qmd的物理功能908来处理该入列请求。然后由仲裁/调度逻辑906调度和处理该队列请求,这使得数据被存储在内部存储装置904中。接着,从在客户操作系统924上运行的用户方软件930发送的出列请求被发送到虚拟qmd的输入队列916之一。然后由利用qmd物理功能908的qmd虚拟功能912处理该出列请求。仲裁/调度逻辑906执行出列请求并且使数据被从内部存储装置904取回并且被发送到输出队列918。然后该数据被路由到客户操作系统924上的用户方软件930。

图10a是图示了根据本发明实施例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线二者的框图。图10b是图示了根据本发明实施例的要被包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名、无序发出/执行架构核心二者的框图。图10a-b中的实线框图示了有序管线和有序核心,同时虚线框的可选添加图示了寄存器重命名、无序发送/执行管线和核心。考虑到有序方面是无序方面的子集,所以将描述无序方面。

在图10a中,处理器管线1000包括提取阶段1002、长度解码阶段1004、解码阶段1006、分配阶段1008、重命名阶段1010、调度(也被已知为分发或发出)阶段1012、寄存器读取/存储器读取阶段1014、执行阶段1016、回写/存储器写入阶段1018、异常处理阶段1022以及提交阶段1024。

图10b示出了包括耦合到执行引擎硬件1050的前端硬件1030的处理器核心1090,并且执行引擎硬件1050和前端硬件1030二者都耦合到存储器硬件1070。核心1090可以是精简指令集计算(risc)核心、复杂指令集计算(cisc)核心、超长指令字(vliw)核心或混合的或可替换的核心类型。作为另外又一个选项,核心1090可以是特殊用途核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(gpgpu)核心、图形核心等等。

前端硬件1030包括耦合到指令高速缓存硬件1034的分支预测硬件1032,该指令高速缓存硬件1034被耦合到指令翻译旁视缓冲器(tlb)1036,该指令翻译旁视缓冲器1036被耦合到指令提取硬件1038,该指令提取硬件1038被耦合到解码硬件1040。该解码硬件1040(或解码器)可以对指令进行解码并且作为输出生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,它们是根据原始指令被解码的或者以其他方式反映原始指令或者从原始指令中得出。可以使用各种不同的机制来实现解码硬件1040。适合的机构的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等等。在一个实施例中,核心1090包括微代码rom或存储用于某些宏指令的微代码的其他介质(例如,在解码硬件1040中或另外在前端硬件1030内)。解码硬件1040被耦合到执行引擎硬件1050中的重命名/分配器硬件1052。

执行引擎硬件1050包括耦合到退休硬件(retirementhardware)1054和一个或多个调制器硬件1056的集合的重命名/分配器硬件1052。调度器硬件1056表示任何数量的不同调度器,包括保留站、中央指令窗口等等。调度器硬件1056被耦合到(一个或多个)物理寄存器文件硬件1058。该(一个或多个)物理寄存器文件硬件1058中的每一个表示一个或多个物理寄存器文件,其中不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封包整数、封包浮点、向量整数、向量浮点、状态(例如,作为要被执行的下一个指令的地址的指令指针)等等。在一个实施例中,(一个或多个)物理寄存器文件硬件1058包括向量寄存器硬件、写掩码寄存器硬件以及标量寄存器硬件。这些寄存器硬件可以提供架构向量寄存器、向量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器文件硬件1058被退休硬件1054重叠以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)退休寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器以及(一个或多个)退休寄存器文件;使用寄存器图和寄存器池等等)。退休硬件1054和(一个或多个)物理寄存器文件硬件1058被耦合到(一个或多个)执行集群1060。(一个或多个)执行集群1060包括一个或多个执行硬件1062的集合以及一个或多个存储器访问硬件1064的集合。执行硬件1062可以在各种类型的数据(例如,标量浮点、封包整数、封包浮点、向量整数、向量浮点)上实行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的许多执行硬件,但是其他实施例可以仅包括一个执行硬件或者全部都实行所有功能的多个执行硬件。调度器硬件1056、(一个或多个)物理寄存器文件硬件1058以及(一个或多个)执行集群1060被示出为可能复数的,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线;标量浮点/封包整数/封包浮点/向量整数/向量浮点管线;和/或均具有它们自己的调度器硬件、(一个或多个)物理寄存器文件硬件和/或执行集群的存储器访问管线——以及在单独的存储器访问管线的情况下,某些实施例被实现为其中仅该管线的执行集群具有存储器访问硬件1064)。还应当理解的是,在使用单独的管线的情况下,这些管线中的一个或多个可以是无序发出/执行,并且其余的管线是有序发出/执行。

存储器访问硬件1064的集合被耦合到存储器硬件1070,该存储器硬件1070包括耦合到数据高速缓存硬件1074的数据tlb硬件1072,该数据高速缓存硬件1074耦合到二级(l2)高速缓存硬件1076。在一个示例性实施例中,存储器访问硬件1064可包括负载硬件、存储地址硬件和存储数据硬件,它们中的每一个都被耦合到存储器硬件1070中的数据tlb硬件1072。指令高速缓存硬件1034被进一步耦合到存储器硬件1070中的二级(l2)高速缓存硬件1076。l2高速缓存硬件1076被耦合到高速缓存的一个或多个其他级并且最终耦合到主存储器。

举例来说,示例性寄存器重命名、无序发出/执行核心架构可以如下实现管线1000:1)指令提取1038实行提取阶段1002和长度解码阶段1004;2)解码硬件1040实行解码阶段1006;3)重命名/分配器硬件1052实行分配阶段1008和重命名阶段1010;4)调度器硬件1056实行调度阶段1012;5)(一个或多个)物理寄存器文件硬件1058和存储器硬件1070实行寄存器读取/存储器读取阶段1014;执行集群1060实行执行阶段1016;6)存储器硬件1070和(一个或多个)物理寄存器文件硬件1058实行回写/存储器写入阶段1018;7)各种硬件可以包含在异常处理阶段1022中;以及8)退休硬件1054和(一个或多个)物理寄存器文件硬件1058实行提交阶段1024。

核心1090可以支持一个或多个指令集(例如,x86指令集(具有已经被添加有更新版本的一些扩展);加利福尼亚州森尼维尔(sunnyvale)市的mips科技的mips指令集;加利福尼亚州森尼维尔市的arm控股的arm指令集(具有诸如neon之类的可选的附加扩展)),包括本文中所描述的(一个或多个)指令。在一个实施例中,核心1090包括用以支持封包数据指令集扩展的逻辑(例如,下文描述的avx1、avx2和/或某种形式的通用向量友好的指令格式(u=0和/或u=1)),从而允许使用封包数据来实行由许多多媒体应用使用的操作。

应当理解的是,核心可以支持多线程(执行操作或线程的两个或更多并行集合)并且可以以各种方式这么做,所述各种方式包括时间片多线程、同时多线程(在单个物理核心为线程中的每一个提供逻辑核心的情况下,该物理核心同时是多线程)或它们的组合(例如,其后诸如在英特尔®超线程技术中的时间片提取和解码以及同时多线程)。

虽然在无序执行的情境下描述了寄存器重命名,但是应当理解的是,可以在有序架构中使用寄存器重命名。虽然处理器的所图示的实施例还包括单独的指令高速缓存硬件1034和数据高速缓存硬件1074以及共享的l2高速缓存硬件1076,但是可替换的实施例还可以具有用于指令和数据两者的单个内部高速缓存,诸如例如一级(l1)内部高速缓存或多级的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器之外的外部高速缓存的组合。可替换地,所有高速缓存都可以在核心和/或处理器之外。

图11是根据本发明的实施例的处理器1100的框图,该处理器1100可以具有多于一个核心、可以具有集成存储器控制器以及可以具有集成图形控制器。图11中的实线框图示了具有单个核心1102a、系统代理1110、一个或多个总线控制器硬件1116的集合的处理器1110,同时虚线框的可选添加图示了具有多个核心1102a-n、系统代理硬件1110中的一个或多个集成存储器控制器硬件1114的集合以及特殊用途逻辑1108的可替换的处理器1100。

因此,处理器1100的不同实现方式可以包括:1)具有特殊用途逻辑1108和核心1102a-n的cpu,所述特殊用途逻辑1108是集成的图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心),所述核心1102a-n是一个或多个通用核心(例如,通用有序核心、通用无序核心、二者的组合);2)具有核心1102a-n的协处理器,所述核心1102a-n是大量的特殊用途核心,主要意图用于图形和/或科学(吞吐量);以及3)具有核心1102a-n的协处理器,所述核心1102a-n是大量的通用有序核心。因此,处理器1100可以是通用处理器、协处理器或特殊用途处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量多集成核心(mic)协处理器(包括30个或更多个核心)、嵌入式处理器等等。处理器可以在一个或多个芯片上实现。处理器1100可以是使用诸如例如bicmos、cmos或nmos之类的多种处理技术中的任何处理技术的一个或多个衬底的一部分和/或可以被实现在所述一个或多个衬底上。

存储器层级结构包括核心内的一级或多级高速缓存、共享高速缓存硬件1106的集合或者一个或多个共享高速缓存硬件1106、以及耦合到集成存储器控制器硬件1114的集合的外部存储器(未示出)。共享高速缓存硬件1106的集合可以包括一个或多个中级高速缓存,诸如二级(l2)、三级(l3)、四级(l4)或其他级高速缓存、末级高速缓存(llc)和/或它们的组合。虽然在一个实施例中基于环的互连硬件1112将集成图形逻辑1108、共享高速缓存硬件1106的集合以及系统代理硬件1110/集成存储器控制器硬件1114互连,但是可替换的实施例可以使用用于将这样的硬件互连的任何数量的公知技术。在一个实施例中,在一个或多个高速缓存硬件1106与核心1102-a-n之间维持一致性。

在一些实施例中,核心1102a-n中的一个或多个核心有多线程的能力。系统代理1110包括协调和操作核心1102a-n的那些部件。系统代理硬件1110可以包括例如功率控制单元(pcu)和显示硬件。pcu可以是或者可以包括调节核心1102a-n和集成图形逻辑1108的功率状态所需要的逻辑和部件。显示硬件用于驱动一个或多个外部连接的显示器。

核心1102a-n就架构指令集而言可以是同构的或异构的;也就是,核心1102a-n中的两个或更多个核心有执行相同指令集的能力,而其他的核心可以有执行该指令集的仅一个子集或不同指令集的能力。在一个实施例中,核心1102a-n是异构的并且包括下文所描述的“小”核心和“大”核心两者。

图12-15是示例性计算机架构的框图。用于膝上型计算机、台式计算机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的本领域已知的其他系统设计和配置也是适合的。一般而言,如本文中公开的有结合处理器和/或其他执行逻辑的能力的种类庞杂的系统或电子设备通常是适合的。

现在参照图12,示出的是根据本发明的一个实施例的系统1200的框图。系统1200可以包括耦合到控制器集线器1220的一个或多个处理器1210、1215。在一个实施例中,控制器集线器1220包括图形存储器控制器集线器(gmch)1290和输入/输出集线器(ioh)1250(其可以在单独的芯片上);gmch1290包括耦合到存储器1240和协处理器1245的存储器和图形控制器;ioh1250将输入/输出(i/o)设备1260耦合到gmch1290。可替换地,存储器和图形控制器中的一个或两个被集成到处理器中(如本文中描述的),存储器1240和协处理器1245被直接耦合到处理器1210,并且控制器集线器1220与ioh1250在单个芯片中。

在图12中利用虚线表示了附加处理器1215的可选性质。每个处理器1210、1215可以包括本文中描述的处理核心中的一个或多个,并且可以是某个版本的处理器1100。

存储器1240可以是例如动态随机访问存储器(dram)、相变存储器(pcm)或二者的组合。对至少一个实施例而言,控制器集线器1220经由多点分支总线与(一个或多个)处理器1210、1215通信,该多点分支总线诸如前端总线(fsb)、点对点接口或类似的连接1295。

在一个实施例中,协处理器1245是特殊用途处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。在一个实施例中,控制器集线器1220可以包括集成图形加速器。

就包括架构特性、微架构特性、热特性、功率消耗特性等等的一系列的价值指标而言,物理资源1210、1215之间可以存在各种不同。

在一个实施例中,处理器1210执行控制一般类型的数据处理操作的指令。嵌入到指令中的可以是协处理器指令。处理器1210将这些协处理器指令识别为应该由所附接的协处理器1245执行的类型。因此,处理器1210在协处理器总线或其他互连上向协处理器1245发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1245接受并且执行所接收到的协处理器指令。

现在参照图13,示出的是根据本发明实施例的第一个更具体的示例性系统1300的框图。如在图13中示出的,多处理器系统1300是点对点互连系统,并且包括经由点对点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每一个可以是某个版本的处理器1100。在本发明的一个实施例中,处理器1370和1380分别是处理器1210和1215,同时协处理器1338是协处理器1245。在另一个实施例中,处理器1370和1380分别是处理器1210、协处理器1245。

处理器1370和1380被示出分别包括集成存储器控制器(imc)硬件1372和1382。处理器1370还包括作为其总线控制器硬件的部分的点对点(p-p)接口1376和1378;类似地,第二处理器1380包括p-p接口1386和1388。处理器1370、1380可以使用p-p接口电路1378、1388经由点对点(p-p)接口1350来交换信息。如在图13中示出的,imc1372和1382将处理器耦合到各自的存储器,也就是存储器1332和存储器1334,这些存储器可以是本地附接到各自处理器的主存储器的部分。

处理器1370、1380每个都可以使用点对点接口电路1376、1394、1386、1398经由单独的p-p接口1352、1354来与芯片集1390交换信息。芯片集1390可以可选地经由高性能接口1339与协处理器1338交换信息。在一个实施例中,协处理器1338是特殊用途处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。

可以将共享高速缓存(未示出)包括在任一处理器中或者在两个处理器之外,还可以经由p-p互连与处理器连接,以使得如果将处理器置于低功率模式中,则可以将任一或两个处理器的本地高速缓存信息存储在共享高速缓存中。

芯片集1390可以经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围部件互连(pci)总线,或者诸如pci快速总线或另一第三代i/o互连总线之类的总线,虽然本发明的范围不如此限定。

如在图13中示出的,各种i/o设备1314可以耦合到第一总线1316,连同将第一总线1316耦合到第二总线1320的总线桥1318一起。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)硬件)、现场可编程门阵列或任何其他处理器之类的一个或多个附加的处理器1315耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(lpc)总线。在一个实施例中,各种设备可以耦合到第二总线1320,所述各种设备包括例如键盘和/或鼠标1322、通信设备1327以及可以包括指令/代码和数据1330的诸如磁盘驱动器或其他大容量存储设备之类的存储硬件1328。此外,音频i/o1324可以耦合到第二总线1320。要注意的是,其他架构也是可能的。例如,替代于图13的点对点架构,系统可以实现多点分支总线或其他这样的架构。

现在参照图14,示出的是根据本发明实施例的第二个更具体的示例性系统1400的框图。图13和14中的相似元件拥有相似的附图标记,并且已经从图14中省略了图13的某些方面,以免使图14的其他方面晦涩难懂。

图14图示了处理器1370、1380可以分别包括集成存储器和i/o控制逻辑(“cl”)1372和1382。因此,cl1372、1382包括集成存储器控制器硬件并且包括i/o控制逻辑。图14图示了不仅存储器1332、1334耦合到cl1372、1382,而且i/o设备1414也耦合到控制逻辑1372、1382。传统的i/o设备1415耦合到芯片集1390。

现在参照图15,示出的是根据本发明实施例的soc1500的框图。图11中的类似元件拥有相似的附图标记。而且,虚线框是在更先进的soc上的可选特征。在图15中,互连硬件1502耦合到:应用处理器1510,其包括一个或多个核心1102a-n的集合和共享高速缓存硬件1106;系统代理硬件1110;总线控制器硬件1116;集成存储器控制器硬件1114;一个或多个协处理器1520的集合或一个或多个协处理器1520,所述协处理器1520可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(sram)硬件1530;直接存储器访问(dma)硬件1532;以及用于耦合到一个或多个外部显示器的显示硬件1540。在一个实施例中,(一个或多个)协处理器1520包括特殊用途处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等等。

可以将本文中公开的机制的实施例在硬件、软件、固件或这样的实现方式的组合中实现。可以将本发明的实施例实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。

可以将诸如图13中图示的代码1330之类的程序代码应用到输入指令来实行本文中描述的功能以及生成输出信息。可以以已知方式将输出信息应用到一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(dsp)、微控制器、特定用途集成电路(asic)或微处理器。

程序代码可以以高级过程编程语言或面向对象的编程语言来实现以与处理系统进行通信。如果期望的话,还可以以汇编语言或机器语言来实现程序代码。实际上,本文中描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是编译语言或解释型语言。

可以由存储在表示处理器内的各种逻辑的机器可读介质上的代表性指令来实现至少一个实施例的一个或多个方面,所述代表性指令当由机器读取时使机器构建逻辑来实行本文中所描述的技术。被已知为“ip核心”的这样的表达可以存储在有形的、机器可读介质上,并且被供给给各种用户方或制造设施来加载到实际上制作逻辑或处理器的制造机器中。

这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非暂时性、有形的布置,包括存储介质,该存储介质诸如硬盘;任何其他类型的磁盘,包括软盘、光盘、压缩盘只读存储器(cd-rom)、可重写式压缩盘(cd-rw)和磁光盘;半导体设备,诸如只读存储器(rom)、随机访问存储器(ram)(诸如动态随机访问存储器(dram)、静态随机访问存储器(sram))、可擦除可编程只读存储器(eprom)、闪速存储器、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm)、磁性卡或光学卡;或者适用于存储电子指令的任何其他类型的介质。

因此,本发明的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(hdl))的非暂时性、有形的机器可读介质,该机器可读介质定义了本文中所描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以被称为程序产品。

在一些情况下,指令转换器可以被用来将指令从源指令集转换到目标指令集。例如,指令转换器可以翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其他方式将指令转换成要由核心处理的一个或多个其他指令。指令转换器可以以软件、硬件、固件或它们的组合来实现。指令转换器可以在处理器上、处理器外、或部分在处理器上部分在处理器外。

图16是根据本发明实施例的对比使用软件指令转换器将源指令集中的二进制指令转换到目标指令集中的二进制指令的框图。在图示的实施例中,指令转换器是软件指令转换器,尽管可替换地可以以软件、固件、硬件或它们的各种组合来实现指令转换器。图16示出了使用x86编译器1604编译高级语言1602形式的程序以生成x86二进制代码1606,该x86二进制代码1606可以由具有至少一个x86指令集核心的处理器1616本机地执行。该具有至少一个x86指令集核心的处理器1616表示可以执行与具有至少一个x86指令集核心的英特尔处理器基本上相同的功能的任何处理器,所通过的方式是兼容地执行或以其他方式处理(1)英特尔x86指令集核心的指令集的很大一部分或者(2)目标为在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,以便达到与具有至少一个x86指令集核心的英特尔处理器基本相同的结果。x86编译器1604表示可操作生成x86二进制代码1606(例如,目标代码)的编译器,该x86二进制代码1606可以在有或没有附加的链接处理的情况下在具有至少一个x86指令集核心1616的处理器上执行。类似地,图16示出了可以使用可替换的指令集编译器1608来编译高级语言1602形式的程序以生成可替换的指令集二进制代码1610,该指令集二进制代码1610可以由不具有至少一个x86指令集核心的处理器1614(例如,具有执行加利福尼亚州森尼维尔市的mips科技的mips指令集和/或执行加利福尼亚州森尼维尔市的arm控股的arm指令集的核心的处理器)本机地执行。指令转换器1612被用来将x86二进制代码1606转换成可以由不具有x86指令集核心的处理器1614本机地执行的代码。这种经转换的代码不太可能与可替换的指令集二进制代码1610相同,因为有这种能力的指令转换器是难以制作的;然而,经转换的代码将完成一般性操作并且由来自可替换的指令集的指令组成。因此,指令转换器1612表示允许不具有x86指令集处理器或核心的处理器或其他电子设备通过仿真、模拟或任何其他过程来执行x86二进制代码1606的软件、固件、硬件或它们的组合。

虽然已经关于特定的实现方式描述了一些实施例,但是根据一些实施例,其他实现方式也是可能的。此外,不需要以图示和所描述的特定方式来布置附图中图示的和/或本文中所描述的布置和/或元件或其他特征的顺序。根据一些实施例,许多其他布置是可能的。

在附图中示出的每个系统中,在一些实例中的元件可以每个都具有相同的附图标记或不同的附图标记来暗示所表示的元件可以是不同的和/或类似的。然而,元件可以足够灵活来具有不同的实现方式并且与本文中示出或描述的系统中的一些或所有系统一起工作。附图中示出的各种元件可以是相同的或不同的。哪一个被称为第一元件以及哪个被叫做第二元件是任意的。

在说明书和权利要求中,可以使用术语“耦合的”和“连接的”连同它们的衍生词。应当理解的是,这些术语不意图作为对于彼此的同义词。更确切地说,在特定实施例中,“连接的”可以被用来指示两个或更多个元件彼此处于直接的物理或电学接触。“耦合的”可以意指两个或更多个元件直接物理或电学接触。然而,“耦合的”还可以意指两个或更多个元件不彼此直接接触,但是还仍彼此合作或相互作用。

实施例是本发明的实现方式或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或“其他实施例”的提及意指结合实施例所描述的特定特征、结构或特性被包括在本发明的至少一些实施例而不一定所有实施例中。各种出现“实施例”、“一个实施例”或“一些实施例”不一定都指代相同的实施例。

不需要将本文中描述和图示的所有部件、特征、结构、特性等等都包括在特定的一个或多个实施例中。如果例如说明书陈述了“可以”、“可能”、“能”或“能够”包括部件、特征、结构或特性,则该特定部件、特征、结构或特性不要求被包括。如果说明书或权利要求提到“一”或“一个”元件,则不意指仅存在一个该元件。如果说明书或权利要求书提到“附加的”元件,则并不排除存在多于一个该附加的元件。

本发明所图示的实施例的以上描述(包括摘要中所描述的)不意图是详尽的或者要将本发明限制成所公开的精确形式。虽然出于说明的目的在本文中描述了本发明的具体实施例和针对本发明的示例,但是在本发明的范围内,各种等价修改也是可能的,如本领域技术人员将意识到的那样。

可以鉴于以上详细描述对本发明作出这些修改。所附权利要求中使用的术语不应当被解释为将本发明限制成说明书和附图中所公开的具体实施例。更确切地说,完全由所附权利要求来确定本发明的范围,要根据权利要求解释的已确立原则来对本发明的范围进行解释。

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