一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

节点间消息收发控制器的制作方法

2022-06-25 10:23:54 来源:中国专利 TAG:


1.本公开总体上涉及数据处理系统,并且具体地涉及用于在数据处理系统的节点之间传递数据的技术。


背景技术:

2.传统的数据处理系统可以包括一个或多个处理器,并且每个处理器可以包括一个或多个处理核。另外,每个处理核可以包括第一级高速缓存。出于本公开的目的,处理核可以简单地被称为“核”或“节点”,并且第一级高速缓存可以被称为“第一级高速缓存”或“l1高速缓存”。
3.具有多个核的传统数据处理系统可以并发地执行多个线程,其中每个线程在不同的核上执行。不同核上的线程(例如,第一核上的第一线程和第二核上的第二线程)可以使用共享存储器来将数据从一个线程传递到另一个线程。例如,当第一线程是数据的生产者,并且第二线程是消费者时,第一线程(“生产者线程”)可以使用存储指令将数据从第一核的寄存器保存到共享存储器中的存储器位置。然后,第二线程(”消费者线程”)可以使用加载指令将数据从共享存储器读取到第二核中的寄存器。
4.然而,由于高速缓存一致性要求,此类过程可能是低效的。例如,用于满足高速缓存一致性要求的操作可能涉及核对核的监听等待时间,并且这些等待时间可能导致流水线冒泡,使得数据在核之间进行传递时难以实现或不可能实现所需的性能水平。例如,可能难以实现或不可能实现足够高水平的核吞吐量和通信带宽,以及用于核之间消息收发的足够低水平的通信等待时间。因此,传统数据处理系统中的软件可能被设计为最小化核之间的通信。
附图说明
5.通过所附权利要求、以下对一个或多个示例实施例的详细描述、以及对应的附图,本发明的特征和优势将变得显而易见,其中:
6.图1是具有至少一个节点间消息收发控制器的数据处理系统的示例实施例的框图。
7.图2是描绘图1的数据处理系统的一些部分的附加细节的框图。
8.图3呈现出在图1和图2的数据处理系统的情境下,用于将数据从一个节点传递到另一个节点的过程的示例实施例的流程图。
9.图4是根据一个或多个实施例的系统的框图。
10.图5是根据一个或多个实施例的第一更具体的示例性系统的框图。
11.图6是根据一个或多个实施例的第二更具体的示例性系统的框图。
12.图7是根据一个或多个实施例的芯片上系统的框图。
具体实施方式
13.出于本公开的目的,“节点”是数据处理系统中的处理单元。许多不同种类的处理单元可被认为是节点,包括但不限于通用处理核和专用处理核,诸如图形处理单元(gpu)和其他类型的计算加速器。
14.传统的数据处理系统中的节点不支持原生消息收发模型。相反,这些节点可以将加载和存储指令用于不同节点上运行的线程之间的通信。然而,如上文所指示,普通的加载和存储指令在用于将消息或数据从现代高速缓存一致性系统中的一个节点传递到另一个节点时通常是低效的。
15.附加地或替代地,对于在不同核上运行的线程之间的通信,数据处理系统可以使用诸如题为“用于通过读取快照和就地写入更新执行数据移动操作的方法和系统(method and system for performing data movement operations with read snapshot and in place write update)”的美国专利第10,606,755号中描述的技术。该专利(
“’
755专利”)是基于在2017年06月30日提交并于2019年01月03日作为美国专利申请公开号第2019/0004958号公布的申请。
16.例如,'755专利公开了“movget指令”以及“movput指令”,“movget指令”在被执行时触发“读取快照操作”,“movput指令”在被执行时触发“就地写入更新操作”。此外,如’755专利所指示,“由消费者发起的读取快照操作使消费者能够从生产者读取或获得数据,而不会在操作完成后引起包含数据的高速缓存行的一致性状态或位置的改变。”类似地,如'755专利中进一步所指示,“由生产者发起的就地写入更新操作允许生产者更新或写入由消费者拥有的地址或高速缓存行,同时在操作完成后维持一致性状态和消费者的地址所有权”。例如,消费者可以使用movget指令从生产者拥有的具有“独占的”(e)或“修改的”(m)一致性状态的高速缓存行中读取,而不会引起高速缓存行的所有权或一致性状态的改变。
17.出于本公开的目的,术语“节点间获取”是指可由第一节点用于从由第二节点拥有的高速缓存行中读取数据,而不引起该高速缓存行的一致性状态(即使一致性状态是e或m)或位置的改变的操作或指令(例如movget指令)。例如,第一节点可以使用节点间获取指令以从第二节点的本地高速缓存中读取数据。该指令的执行可以触发读取快照操作。因此,读取快照操作也可以被称为“节点间获取操作”。此外,高速缓存行不需要具有独占所有者,多于一个的核可以具有高速缓存行的副本,并且该高速缓存行可以处于除“无效”(i)之外的任何一致性状态,包括e、m或“共享”(s)。在多个副本的情况下,对于这些副本中的任何一个副本而言,位置和一致性状态均不被改变。
18.类似地,出于本公开的目的,术语“节点间放置”是指可由第一节点用于将数据写入由第二节点拥有的高速缓存行,而不引起该高速缓存行的所有权的改变并且不改变该高速缓存行的一致性状态(除非该高速缓存行处于e状态)的操作或指令(例如movput指令)。例如,第一节点可以使用节点间放置指令将数据写入由第二节点拥有的共享高速缓存行。该指令的执行可以触发就地写入更新操作。因此,就地写入更新操作也可以被称为“节点间放置”操作。此外,在一个实施例中,高速缓存行必须由一个核独占地拥有,并且高速缓存行必须处于e状态或m状态。如果节点间放置操作发现高速缓存行处于e状态,那么节点间放置操作随后将在更新高速缓存行之后将一致性状态改变为m。
19.本公开描述了一种数据处理系统,该系统支持原生消息收发模型,该模型使得不
同节点上的线程能够更有效地共享数据。换句话说,本公开描述了一种具有对节点间消息收发(即,用于节点间的消息收发)的原生支持的数据处理系统。相对于用于在节点之间传递数据的传统方法,本文所述的原生消息收发模型可被许多类型的应用和功能用来实现改善的性能。这些应用和功能可以包括,例如,并行应用和运行时系统功能。例如,本文所述的原生消息收发模型可结合关键部分并且结合集体操作及同步来使用。该原生消息收发模型也可以与其他消息传递标准(诸如被称为“消息传递接口”(mpi)的名称或商标的标准)一起使用。它也可用于由使用“分区全局地址空间”(pgas)的名称或商标所指的编程模型的并行程序的通信。
20.本文所述的原生消息收发模型可由应用和运行时库软件容易地使用。该原生消息收发模型还可以使软件能够容易地实例化具有任意队列深度和任意队列项数据类型的任意数量的消息队列或信道。
21.在一个实施例中,数据处理系统使用至少一个节点间消息收发控制器(inmc)来实现该原生消息收发模型,如下文更详细地描述。inmc可以被认为是硬件中的状态机。在一个实施例或场景中,一个节点上的发送方线程通过使用inmc与另一个节点上的接收方线程进行通信,以将数据保存到由接收方线程监测的输入队列中。该输入队列(连同相关联的参数)可被称为“共享消息队列”,并且它可使用圆形环形缓冲器来实现,该圆形环形缓冲器包含多个不同的位置或“槽”,以用于接收来自一个或多个发送方线程的各个数据项,以及指示接下来要被读取的位置的头部索引和指向接下来要被写入的位置的尾部索引。因此,共享消息队列可以包括(a)具有用于接收数据项以及相关的参数的多个槽的数据缓冲器,相关的参数诸如(b)用于指示接收方线程接下来要读取哪个槽的头部索引,(c)用于指示发送方线程接下来要写入哪个槽的尾部索引,以及(d)相关联的参数或常量值,诸如(i)指向数据缓冲器的缓冲器指针和(ii)指示数据缓冲器包含多少槽的容量常量。共享消息队列可由接收方线程创建,共享消息队列可由发送方线程创建,或者共享消息队列可由其他“第三方”线程创建。然而,在一个实施例中,共享消息队列的一些或全部由接收方线程拥有,并且共享消息队列的数据缓冲器驻留在正在执行接收方线程的核的l1高速缓存中。
22.出于本公开的目的,要被保存到共享消息队列中的数据项可以被简称为“项”。此外,正在执行发送方线程的核可被称为“发送方核”,并且正在执行接收方线程的核可被称为“接收方核”。如下面更详细地描述,发送方核可以包括inmc,接收方核可以包括高速缓存一致性协议接口,并且发送方核可以使用该inmc和该高速缓存一致性协议接口来将项发送到接收方核。
23.而且,为了避免停止发送方核的执行流水线,数据处理系统使用inmc来从发送方线程迁移队列传输。因此,发送方线程可以使用单个快速指令(例如,“入列消息指令”)来发出入列命令以将消息发送到不同的核,并且随后发送方线程可以继续做其他工作,同时inmc在后台将消息发送到接收方线程。
24.此外,消息队列在主存储器中实现,在主存储器处它们可被软件访问。因此,可以在应用的数据结构中实例化任意数量的队列和队列尺寸。
25.此外,根据当前教导的数据处理系统可通过使用用于共享队列访问和数据传输的远程原子操作、读取快照操作、以及就地写入更新操作来提供高带宽和低接收方等待时间,如下文更详细地描述。例如,通过使用远程原子操作,inmc可以使多个发送方能够以高速率
正确地传送到同一队列,从而提供高带宽。并且通过使用读取快照操作和就地写入更新操作,inmc可以在接收方处提供低等待时间。
26.具有大的一致性域的数据处理系统可以使用当前教导来实现相对于传统方法减少的高速缓存一致性开销,从而改善某些并行应用和运行时系统的效率。根据当前教导的数据处理系统可以提供非常低的等待时间和高带宽核对核同步和消息收发。它还允许将非常细粒度的计算迁移到具有与正被处理的数据关联的高速缓存的远程核上。例如,在处理密钥-值存储(kvs)和类似的存储器中的数据库时,迁移此类工作可提供优点。此外,本发明可用于改善并行运行时系统中的集体通信(诸如屏障、约简和广播),并行运行时系统使用应用编程接口(api)(诸如开放式多处理(openmp))和消息收发标准(诸如mpi)。
27.图1是具有至少一个inmc的数据处理系统10的示例实施例的框图。具体而言,数据处理系统10包括多个处理核20a和20b,并且核20a包括核20a用于将消息或项发送到核20b的inmc 34。因此,inmc也可以被称为“消息通信单元”(mcu)。在图1的示例中,核20a和核20b驻留在处理器封装12中,该处理器封装12耦合到随机存取存储器(ram)14并且耦合到非易失性存储器(nvs)18。ram 14用作主存储器或系统存储器。处理器封装也可被简称为“处理器”。
28.如所图示,为了易于由在核20a上执行的指令访问,核20a还包括用于执行软件的处理器流水线26,以及用于包含主存储器的某些部分的高速缓存行的l1数据高速缓存(l1dc)22a。处理器流水线26可以包括用于取出、解码、和执行指令、用于从存储器读取和用于写入存储器的模块或级。用于执行指令的模块可以被称为“执行单元”,并且它们可以包括一个或多个算术逻辑单元(alu)、一个或多个浮点单元(fpu)等。核20a还包括可以驻留在核20a的存储器管理单元(mmu)中的页表遍历器30和转换后备缓冲器(tlb)32。inmc 34可以使用tlb 32和页表遍历器30在队列访问期间进行虚拟存储器地址转换。核20a还包括各种寄存器和其他处理资源。
29.如核20a内组件之间的实心箭头所指示,核20a包括用于使数据、地址、和控制信号能够在核20a的组件之间流动的至少一个互连。另外,如核20a内的组件之间的虚线箭头所指示,核20a包括用于使异常信号能够在处理器流水线26、页表遍历器30、tlb 32和inmc 34之间流动的至少一个互连。
30.此外,在图1的示例中,核20b包括与核20a相同种类的组件,包括l1dc 22b、和inmc。然而,inmc和核20b内的一些其他组件未被示出,以避免图示中的不必要的复杂性。然而,在其他实施例中,发送方核可以具有与接收方核不同的组件。此外,如上文所指示,在数据处理系统10中,核20a和核20b驻留在处理器封装12中。具体而言,核20a和核20b可以驻留在一个或多个集成电路或“芯片”中,这些集成电路或“芯片”被安装在处理器封装12内的衬底。数据处理系统10的硬件也可以包括耦合到处理器封装12的许多其他组件。此外,在其他实施例中,数据处理系统可以包括多个处理器封装,并且每个封装可以包括一个或多个核。此外,数据处理系统可以包括用于将核彼此连接的一致性处理器互连。此类互连可以提供存储器一致性。因此,核可以使用共享的地址空间。例如,在一个实施例中,系统可以包括由英特尔公司以超路径互连(upi)的名称或商标提供的处理器互连类型。然而,其他实施例可以使用其他类型的一致性处理器互连。
31.处理器封装12还包括系统代理40,系统代理40例如可以被实现为非核。系统代理
40包括诸如具有本地代理44的存储器控制器42、与存储器控制器42进行通信的高速缓存控制电路92、以及与高速缓存控制电路92进行通信的高速缓存一致性协议接口(ccpi)90之类的组件。如下文更详细的描述,inmc 34可以使用ccpi 90来执行诸如节点间获取和节点间放置之类的操作。高速缓存控制电路92包括由核20a和核20b共享的第3级(l3)高速缓存50。然而,其他实施例或场景可以包括处于不同级别的共享高速缓存。
32.有关ccpi的附加细节可在于2017年06月29日提交的标题为“用于远程原子操作的指令(instructions for remote atomic operations)”美国专利申请公开第2019/0004810号中找到。该公开(“810号公开”)还公开了被称为“远程原子操作”(rao)的操作类型。如下文更详细地所描述,数据处理系统10可以使用rao作为从发送方线程向接收方线程发送消息的过程的一部分。
33.nvs 18包括可被复制到ram 14中并且由处理器封装12执行的软件。在图1的示例中,该软件包括操作系统(os)60和应用62。例如,应用62可以是使用在不同核上运行的多个进程和/或线程的高性能计算(hpc)应用,其中这些进程和/或线程中的至少一些进程和/或线程之间的通信要使用根据本公开的原生消息收发协议。在另一个实施例或场景中,当前的教导可由单独的应用使用,这些应用程序在分开的核上运行并且彼此进行通信(例如,使用mpi)。附加地或替代地,os可使用在不同的核上运行的多个进程和/或线程,其中这些进程和/或线程中的至少一些进程和/或线程之间的通信要使用根据本公开的原生消息收发协议。
34.出于说明的目的,本公开讨论了涉及在核20a上运行的一个发送方线程64a和在核20b上运行的一个接收方线程64b的场景。然而,发送方线程64a使用足够稳健以处置多个发送方线程的进程。在另一个实施例或场景中,数据处理系统可以包括多于两个核,发送方线程可以在这些核中的两个核或多个核上运行,并且多个发送方线程可以将数据发送到单个共享消息队列。此外,在另一个实施例或场景中,软件可以使用发送方进程来替代发送方线程(或可以除了发送方线程之外使用发送方进程),和/或使用接收方进程来替代接收方线程(或可以除了接收方线程之外使用接收方进程)。
35.在一个场景中,如图1中的粗箭头所图示(并且如下文更详细地描述),核20a上的发送方线程64a使用inmc 34和ccpi 90以将消息或数据项(例如,项80)写入l1dc 22b中的共享消息队列数据缓冲器70,以便由核20b上的接收方线程64b处理。具体而言,inmc 34和ccpi 90使发送方线程64a能够将项80添加到l1dc 22b中,而不引起接收项80的高速缓存行的所有权的任何改变。例如,在发送方线程64a将项80写入l1dc 22b中的共享消息队列数据缓冲器70之前和之后,一个或多个相关联的高速缓存行可由接收方线程64b拥有。此外,如果初始一致性状态是m,inmc 34和ccpi 90使发送方线程64a能够将项80添加到l1dc 22b,而不改变接收项80的一个或多个高速缓存行的一致性状态。并且如果初始一致性状态是e,则inmc 34和ccpi 90使得一致性状态在项80被添加到l1dc 22b之后改变为m。
36.图2是描绘数据处理系统10的一些部分的附加细节的框图。此外,像图1一样,图2涉及这样的场景,其中发送方线程64a在核20a上运行,接收方线程64b在核20b上运行,共享消息队列已被实例化,并且共享消息队列数据缓冲器70驻留在l1dc 22b中的一个或多个高速缓存行中。l1dc 22b还包括共享消息队列的头部索引74。此外,l3高速缓存50包括共享消息队列的尾部索引76和常量79。
37.在一个实施例或场景中,核20b使用不同的高速缓存行来存储(a)头部索引74,(b)尾部索引76,以及(c)常数78(常数78包括诸如容量值和缓冲器指针之类的只读字段),以避免假共享。因此,缓冲器指针和容量值可以由所有参与者共享读取。如所图示,头部索引74可在接收方核20b处被高速缓存,因为它仅由接收方线程64b写入,并且inmc 34可以使用节点间获取指令来访问头部索引74。该方法允许数据处理系统10避免在接收方核20b处对行ping-pong和对应的流水线冒泡进行高速缓存。此外,尾部索引76可以驻留在共享的高速缓存(诸如l3高速缓存50)位置。因此,inmc 34可以使用rao来读取和更新尾部索引76,如下文更详细地描述。然而,在仅涉及一个发送方线程的实施例或场景中,发送方线程可以对尾部进行高速缓存,并且发送方线程可以在不使用rao的情况下使得尾部被递增。
38.图2还示出核20a中的由inmc 34用于存储头部索引的副本75和尾部索引的副本77的寄存器。在另一实施例中,这些寄存器可以驻留在inmc 34中。如图2中虚线箭头l1所指示,从逻辑角度看,在核20a中的处理器流水线26中执行的发送方线程64a将项80直接写入核20b中的l1dc 22b中的共享消息队列数据缓冲器70,以供接收方线程64b使用。然而,从物理角度来看,inmc 34执行各种操作以将项80写入共享消息队列数据缓冲器70,以供发送方线程64a使用。那些操作在图2中用粗箭头p1至p5.2图示出,如下文更详细地描述。
39.图3呈现出在数据处理系统10的情境下,用于将数据从一个节点传递到另一个节点的过程的示例实施例的流程图。具体而言,出于说明的目的,在发送方线程64a在核20a上执行和接收方线程64b在核20b上执行的情境下描述图3的过程,其中共享消息队列数据缓冲器70驻留在核20b的l1dc22b中,如上文所指示。如框302所示,图3的过程可以从inmc 34执行初始化操作开始,初始化操作诸如从共享l3高速缓存50读取缓冲器指针和容量常数,并将这些值的副本保存在核20a中。
40.如在框310所示,inmc 34随后可以确定inmc 34是否已经接收到要被保存到共享消息队列的项。例如,inmc 34可以在框310处响应于从发送方线程64a接收项80而做出肯定的判定,该发送方线程64a在与inmc 34相同的核上执行。换句话说,inmc 34可以在框310处确定inmc 34是否已经从本地线程接收到针对远程线程的消息,如图2中的箭头p1所图示。
41.例如,为了将消息发送到共享消息队列,发送方线程64a可以使用特殊的“入列消息(enqueue-message)”指令。该指令可采取指向本地消息队列24的第一参数或自变量,该本地消息队列24将用于缓冲最终去往共享消息队列数据缓冲器70的消息。因此,图2示出l1dc 22a中的本地消息队列24,该本地消息队列24由处理器流水线26和inmc 34共享。例如,发送方线程64a可以将64位标量寄存器用于第一自变量。入列消息指令也可以采取构成消息本身的第二自变量,第二自变量在处理器流水线26中被图示出为项80。例如,发送方线程64a可以使用1字节到64字节的标量或向量寄存器作为第二自变量,并且核20a可以支持具有不同数据宽度的不同操作码的入列消息指令。入列消息指令也可以采取指向共享消息队列数据缓冲器70的第三自变量。如下文更详细地描述,inmc 34可以连续地监测本地消息队列24,并且inmc 34可以将这些项从本地消息队列24出列并将它们入列到共享消息队列。在一个实施例中,所有的状态都被保持在软件可见的可高速缓存的存储器中。由于入列消息指令仅访问本地消息队列,并且由于该队列通常保持在本地l1高速缓存中,入列消息指令通常不会导致任何本地核流水线停止。
42.此外,核20a可以既支持入列消息指令的阻塞版本又支持入列消息指令的非阻塞
版本。如果本地消息队列已满,则非阻塞版本可立即返回失败指示(例如z状态标志中的0),这可以很容易地从本地消息队列的头部、尾部和容量值进行测试,本地消息队列也可能通常驻留在本地高速缓存中。
43.因此,再次参考图3,如果inmc 34已经从本地线程接收到远程线程的消息,则inmc 34将该消息保存到本地消息队列24,如框312所示并且如图2中箭头p2所指示。
44.如框320所示,inmc 34随后可以确定本地消息队列24是否是空的。如果本地消息队列24是空的,则该过程可以返回到框310。然而,如果本地消息队列24不是空的,则inmc 34随后可以使用rao(a)从共享高速缓存(例如,l3高速缓存50)获取共享消息队列的当前尾部索引的副本和(b)递增当前尾部索引,从而为来自本地消息队列24中的项保留共享消息队列数据缓冲器70中的相关联的槽。例如,再次参考图2,箭头p3.1和p3.2示出,当inmc 34使用rao从l3高速缓存50获取尾部索引76的副本并递增尾部索引76时,rao可能涉及ccpi 90。换句话说,inmc可以经由ccpi 90与尾部索引76交互。并且箭头p3.3示出inmc 34可将尾部索引77的副本保存到核20a中的寄存器。
45.如上文所指示,关于rao的附加细节可在'810公开中找到。
46.此外,如图3的框324所示,inmc 34可以使用节点间获取指令来从核20b中的l2dc 22b获取当前头部索引74的副本。再次参考图2,箭头p4.1和p4.2示出,当inmc 34使用节点间获取指令来获取头部索引74的副本时,节点间获取指令可涉及ccpi 90。换言之,inmc可以经由ccpi 90获得头部索引74的副本。并且箭头p4.3示出inmc 34可将头部索引75的副本保存到核20a中的寄存器。inmc 34还可以从本地消息队列24中选择“当前”项(例如,本地消息队列24的头部的项)来复制到共享消息队列数据缓冲器70。
47.如框330所示,inmc 34随后可以使用头部索引75的副本、尾部索引77的副本、和容量常数来确定共享消息队列是否是满的。例如,inmc 34可以从尾部索引中减去头部索引以计算所使用的槽的数量,并且如果所使用的槽的数量等于或大于容量,则inmc 34可以确定数据缓冲器70是满的。如果数据缓冲器70是满的,则inmc 34实际上可以等待槽打开,如返回到框324的箭头所指示。
48.然而,如果共享消息队列不是满的,则inmc 34可以使用节点间放置指令将项(例如,项80)从本地消息队列24复制到共享消息队列数据缓冲器70,如框332所示。具体而言,inmc可以将项写入到由尾部索引77的副本所指示的槽。再次参考图2,箭头p5.1和p5.2示出inmc 34经由ccpi 90将项80写入到l1dc 22b中的共享消息队列数据缓冲器70。如图3的框334所示,inmc 34随后可以从本地消息队列24中移除当前项。并且该过程随后可返回到框310,其中inmc 34从发送方线程64a接收附加的项并将这些项发送到共享消息队列,如上文所述。
49.因此,inmc 34使用rao指令或操作来获取尾部索引76的副本并使尾部索引76被递增。inmc 34还使用节点间获取指令或操作来读取头部索引74,以确定共享消息队列是否是满的。并且如果共享消息队列不是满的,则inmc34使用节点间放置指令或操作,以将项保存到共享消息队列数据缓冲器70。
50.下面的伪代码还描述了与将诸如项80之类的项保存到共享消息队列数据缓冲器70相关联的操作。它还描述了示例共享消息队列数据结构。//主存储器中的共享消息队列
22b中,以供接收方线程64b的低等待时间访问。
54.数据处理系统10因此支持本地消息收发模型,该模型使线程能够快速地且有效地进行通信。因此,数据处理系统10可以有效地执行被设计成用于在核之间转移工作的软件。例如,第一核可以使用该原生消息收发模型来快速且有效地将工作转移到第二核。该原生消息收发模型提供了核之间的低等待时间和高带宽的消息收发。它还提供了不会使发送核的流水线停止的高效的消息传输,并提供了接收方对消息的低等待时间访问。它还支持具有任意的队列深度和队列项数据类型的任意数量的消息队列。
55.在一个实施例中,inmc在每个核处被实现为硬件状态机。inmc可使用节点间获取、节点间放置、和rao指令来执行远程队列操作。共享消息队列的状态(例如,头部索引、尾部索引、和数据缓冲槽)驻留在可高速缓存的系统存储器中。为了发送消息,发送方线程(其可被称为“客户端软件”)提供队列描述符指针和要入列的数据。除了存储器的内容之外,inmc硬件可被认为是“无状态”的,因为当工作者线程迁移时,inmc不需要虚拟化或任何特殊处置(在核或inmc需求取出的普通高速缓存行转移之外)。将入列请求从本地队列转移到远程队列的本地等待时间保持在低水平上,因为inmc不需要共享关键的核流水线资源或引发昂贵的分支误预测和流水线重启。inmc仅与本地核的处理器流水线竞争l1dc带宽,并且inmc使用快速的硬件机制来快速检测核消息并且响应于核消息而发送请求(例如入列消息指令)和相关的系统代理事件(如核间获取和rao应答)。
56.不同类型的软件和/或不同场景可能涉及关于本地消息队列的尺寸的不同的需求。这些需求可能基于诸如要发送的数据项的尺寸等之类因素而不同。在一个实施例中,处理器通过提供对以2的幂(从1字节到64字节(即512位,或完整的缓存行))的项/有效载荷尺寸的硬件支持来为不同的时间的不同的需求(例如,大的或小的数据缓冲要求)提供支持。此外,可以使用指向存储器有效载荷缓冲器的8字节指针来容纳更大的有效载荷。
57.此外,如果inmc在处理入列消息指令时遇到异常(诸如页错误),inmc可能由于远程队列操作的潜在长等待时间而无法对入列消息指令及时引起异常。因此,inmc可以提供用于延迟的异常处置的机制。例如,在一个实施例中,inmc执行到存储器中的已知位置的转储,因此异常处理程序可以在解决页错误之后重放最后的请求(或出错请求与异常检测之间的最后n个请求)。被转储的数据可以是inmc的当前状态中的一些,诸如队列描述符数据结构的高速缓存行尺寸的部分。替代地,在另一个实施例中,inmc要求队列描述符和数据缓冲器完全驻留在同一页上,使得可以在初始描述符访问时提早检测和解决页错误。
58.附加实施例
59.图4是根据一个或多个实施例的系统1200的框图。系统1200可以包括一个或多个处理器1210、1215,这些处理器耦合到控制器中枢1220。在一个实施例中,控制器中枢1220包括图形存储器控制器中枢(gmch)1290和输入/输出中枢(ioh)1250(其可以在分开的芯片上);gmch 1290包括存储器控制器和图形控制器,存储器1240和协处理器1245耦合到该存储器控制器和图形控制器,该存储器控制器用于控制被耦合的存储器内的操作;ioh1250将输入/输出(i/o)设备1260耦合到gmch 1290。替代地,存储器和图形控制器中的一个或这两者被集成在处理器内,存储器1240和协处理器1245直接耦合到处理器1210,并且控制器中枢1220与ioh 1250处于单个芯片中。
60.附加的处理器1215的任选性在图4中通过虚线来表示。每个处理器1210、1215可包
括一个或多个处理核,并且可以是处理器12的某一版本。
61.存储器1240可以例如是动态随机存取存储器(dram)、相变存储器(pcm)或两者的组合。对于至少一个实施例,控制器中枢1220经由诸如前端总线(fsb)之类的多分支总线、诸如快速路径互连(qpi)之类的点对点接口、或者类似的连接1295来与(多个)处理器1210、1215进行通信。
62.在一个实施例中,协处理器1245是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理单元(gpu)、通用gpu(gpgpu)、嵌入式处理器,等等。在一个实施例中,控制器中枢1220可以包括集成图形加速器。
63.在物理资源1210、1215之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
64.在一个实施例中,处理器1210执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1210将这些协处理器指令识别为具有应当由附连的协处理器1245执行的类型。因此,处理器1210在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1245。(多个)协处理器1245接受并执行所接收的协处理器指令。
65.图5是根据一个或多个实施例的第一更具体的示例性系统1300的框图。如图5中所示,多处理器系统1300是点对点互连系统,并且包括经由点对点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每一者都可以是处理器12的某一版本。在一个实施例中,处理器1370和1380分别是处理器1210和1215,而协处理器1338是协处理器1245。在另一实施例中,处理器1370和1380分别是处理器1210和协处理器1245。
66.处理器1370和1380示出为分别包括集成存储器控制器(imc)单元1372和1382。处理器1370还包括作为其总线控制器单元的一部分的点对点(p-p)接口1376和1378;类似地,第二处理器1380包括p-p接口1386和1388。处理器1370、1380可经由使用p-p接口电路1378、1388的p-p接口1350来交换信息。如图5中所示,imc 1372和1382将处理器耦合到相应的存储器,即存储器1332和存储器1334,这些存储器可以是本地附连到相应处理器的主存储器的部分。
67.处理器1370、1380可各自经由使用点对点接口电路1376、1394、1386、1398的各个p-p接口1352、1354来与芯片组1390交换信息。芯片组1390可以任选地经由高性能接口1338来与协处理器1339交换信息。在一个实施例中,协处理器1338是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。
68.共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
69.芯片组1390可以经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围部件互连(pci)总线或诸如pci快速总线或另一第三代i/o互连总线之类的总线,但是本发明的范围不限于此。
70.如图5中所示,各种i/o设备1314可连同总线桥1318一起耦合到第一总线1316,该总线桥1318将第一总线1316耦合到第二总线1320。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编
程门阵列(fpga)或任何其他处理器的一个或多个附加处理器1315耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(lpc)总线。在一个实施例中,各种设备可耦合到第二总线1320,这些设备包括例如键盘和/或鼠标1322、通信设备1327以及存储单元1328,该存储单元1328诸如可包括指令/代码和数据1330的盘驱动器或者其他大容量存储设备。此外,音频i/o 1324可耦合到第二总线1320。注意,其他架构是可能的。例如,代替图6的点对点架构,系统可以实现多分支总线或其他此类架构。
71.图6是根据一个或多个实施例的第二更具体的示例系统1400的框图。为了避免模糊图6的其他方面,已从图6中省略图5的某些方面。
72.图6图示处理器1370、1380可分别包括集成存储器和i/o控制逻辑(“cl”)1372和1382。因此,cl 1372、1382包括集成存储器控制器单元,并包括i/o控制逻辑。图6图示不仅存储器1332、1334耦合到cl 1372、1382,而且i/o设备1414也耦合到控制逻辑1372、1382。传统i/o设备1415被耦合到芯片组1390。
73.图7是根据一个或多个实施例的芯片上系统(soc)1500的框图。虚线框是更先进的soc上的任选的特征。在图7中,(多个)互连单元1502被耦合到:应用处理器1510,其包括一个或多个核的集合1102a-n的集合(包括组成的高速缓存单元1104a-n)以及(多个)共享高速缓存单元1106,系统代理单元1110;(多个)总线控制器单元1116;(多个)集成存储器控制器单元1114;一个或多个协处理器的集合1520,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元1530;直接存储器存取(dma)单元1532;以及用于耦合到一个或多个外部显示器的显示单元1540。在一个实施例中,(多个)协处理器1520包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器、安全处理器,等等。
74.实施例还包括以下示例:
75.示例a1是一种处理器封装,包括第一核、第一核中的本地高速缓存、以及第一核中的inmc。inmc被配置成用于(a)接收来自在第一核上执行的发送方线程的节点间消息,其中该消息被引导至在第二核上执行的接收方线程;(b)响应于接收节点间消息,将来自节点间消息的有效载荷存储在第一核的本地高速缓存中的本地消息队列中;(c)在将来自节点间消息的有效载荷存储在本地消息队列中之后,使用rao来保留第二核的本地高速缓存中的共享消息队列的尾部处的位置;以及(d)在保留共享消息队列的尾部处的位置之后,使用节点间放置操作来将有效载荷直接写入第二核的本地高速缓存。
76.示例a2是根据示例a1的处理器封装,其中使用rao来保留第二核的本地高速缓存中的共享消息队列的尾部处的位置的操作包括:使用rao(a)从由第一核和第二核共享的共享高速缓存中读取当前尾部位置和(b)在共享高速缓存中递增当前尾部位置。
77.示例a3是根据示例a1的处理器封装,其中第一本地高速缓存包括l1高速缓存,第一核包括通用处理核,以及第二核包括专用处理核。示例a3还可包括示例a2的特征。
78.示例a4是根据示例a1的处理器封装,其中,inmc包括第一inmc,以及第二核包括第二inmc。示例a3还可以包括示例a2-a3中的任一项或多项的特征。
79.示例a5是根据示例a1的处理器封装,其中,使用节点间放置操作以将有效载荷直接写入第二核的本地高速缓存的操作包括:使得有效载荷被保存在第二核的本地高速缓存中,而第二核无需取出该有效载荷。示例a5还可包括示例a2-a4中的任一项或多项的特征。
80.示例a6是根据示例a1的处理器封装,其中,使用节点间放置操作以将有效载荷直接写入第二核的本地高速缓存的操作包括:经由高速缓存一致性互连将有效载荷写入第二核的本地高速缓存。示例a6还可包括示例a2-a5中的任一项或多项的特征。
81.示例a7是根据示例a6的处理器封装,进一步包括:与第一核和第二核进行通信的系统代理,以及系统代理中的ccpi。而且,经由高速缓存一致性互连将有效载荷写入第二核的本地高速缓存的操作包括经由ccpi将有效载荷写入第二核的本地高速缓存。
82.示例a8是根据示例a1的处理器封装,其中inmc进一步被配置成用于结合将有效载荷写入第二核的本地高速缓存来将有效载荷从来自第一核的本地高速缓存中的本地消息队列的节点间消息中移除。
83.示例b1是一种数据处理系统,包括处理器封装、处理器封装中的第一核、第一核中的本地高速缓存、以及第一核中的inmc。inmc被配置成用于(a)接收来自在第一核上执行的发送方线程的节点间消息,其中该消息被引导至在第二核上执行的接收方线程;(b)响应于接收节点间消息,将来自节点间消息的有效载荷存储在第一核的本地高速缓存中的本地消息队列中;(c)在将来自节点间消息的有效载荷存储在本地消息队列中之后,使用rao来保留第二核的本地高速缓存中的共享消息队列的尾部处的位置;以及(d)在保留共享消息队列的尾部处的位置之后,使用节点间放置操作来将有效载荷直接写入第二核的本地高速缓存。
84.示例b2是根据示例b1的数据处理系统,其中使用rao来保留第二核的本地高速缓存中的共享消息队列的尾部处的位置的操作包括:使用rao(a)从由第一核和第二核共享的共享高速缓存中读取当前尾部位置和(b)在共享高速缓存中递增当前尾部位置。
85.示例b3是根据示例b1的数据处理系统,其中第一本地高速缓存包括l1高速缓存,第一核包括通用处理核,以及第二核包括专用处理核。示例b3还可包括示例b2的特征。
86.示例b4是根据示例b1的数据处理系统,其中,inmc包括第一inmc,以及第二核包括第二inmc。示例b4还可包括示例b2-b3中的任一项或多项的特征。
87.示例b5是根据示例b1的数据处理系统,其中,使用节点间放置操作以将有效载荷直接写入第二核的本地高速缓存的操作包括:使得有效载荷被保存在第二核的本地高速缓存中,而第二核无需取出该有效载荷。示例b5还可包括示例b2-b4中的任一项或多项的特征。
88.示例b6是根据示例b1的数据处理系统,其中,使用节点间放置操作以将有效载荷直接写入第二核的本地高速缓存的操作包括:经由高速缓存一致性互连将有效载荷写入第二核的本地高速缓存。示例b6还可包括示例b2-b5中的任一项或多项的特征。
89.示例b7是根据示例b6的数据处理系统,进一步包括:与第一核和第二核进行通信的处理器封装中的系统代理,以及系统代理中的ccpi。而且,经由高速缓存一致性互连将有效载荷写入第二核的本地高速缓存的操作包括经由ccpi将有效载荷写入第二核的本地高速缓存。
90.示例c1是一种装置,包括计算机可读介质,以及计算机可读介质中的指令,该指令当由具有包括第一核和第二核的处理器封装的数据处理系统执行时,使得该数据处理系统用于:(a)在第一核的inmc处接收来自在第一核上执行的发送方线程的节点间消息,其中该消息被引导至在第二核上执行的接收方线程;(b)响应于接收节点间消息,将来自节点间消
息的有效载荷存储在第一核的本地高速缓存中的本地消息队列中;(c)在将来自节点间消息的有效载荷存储在本地消息队列中之后,使用rao来保留第二核的本地高速缓存中的共享消息队列的尾部处的位置;以及(d)在保留共享消息队列的尾部处的位置之后,使用节点间放置操作来将有效载荷直接写入第二核的本地高速缓存。
91.示例c2是根据示例c1的装置,其中指令包括入列消息指令,该入列消息指令将节点间消息的有效载荷与指向共享消息队列的指针一起发送到inmc。
92.示例c3是根据示例c1的装置,其中使用rao来保留第二核的本地高速缓存中的共享消息队列的尾部处的位置的操作包括:使用rao(a)从由第一核和第二核共享的共享高速缓存中读取当前尾部位置和(b)在共享高速缓存中递增当前尾部位置。示例c3还可包括示例c2的特征。
93.示例c4是根据示例c1的装置,其中,使用节点间放置操作以将有效载荷直接写入第二核的本地高速缓存的操作包括:使得有效载荷被保存在第二核的本地高速缓存中,而第二核无需取出该有效载荷。示例c4还可包括示例c2-c3中的任一项或多项的特征。
94.示例c5是根据示例c1的装置,其中,使用节点间放置操作以将有效载荷直接写入第二核的本地高速缓存的操作包括:经由高速缓存一致性互连将有效载荷写入第二核的本地高速缓存。示例c5还可包括示例c2-c4中的任一项或多项的特征。
95.示例c6是根据示例c5的装置,其中经由高速缓存一致性互连将有效载荷写入第二核的本地高速缓存的操作包括:经由处理器封装中的系统代理中的高速缓存一致性协议接口将有效载荷写入第二核的本地高速缓存。
96.鉴于本公开中通过文本和/或图示描述的原理和示例实施例,本领域技术人员将认识到,所描述的实施例可以在布置和细节方面进行修改而不背离本文中所描述的原理。此外,本公开使用诸如“一个实施例”和“另一实施例”之类的表达来描述实施例可能情况。然而,那些表达并非旨在将本公开的范围限于特定的实施例配置。例如,如本文中所使用,那些表达可引用相同的实施例或不同的实施例,并且那些不同的实施例可组合成其他实施例。
97.另外,当前教导可用于在许多不同种类的数据处理系统中取得优势。示例数据处理系统可包括但不限于,大型计算机、小型计算机、超级计算机、高性能计算系统、计算集群、分布式计算系统、个人计算机(pc)、工作站、服务器、客户机-服务器系统、便携式计算机、膝上型计算机、平板计算机、娱乐设备、音频设备、视频设备、音频/视频设备(例如,电视机和机顶盒)、手持设备、个人数字助理(pda)、可穿戴设备、车载处理系统、加速器、芯片上系统(soc)、以及用于处理或传输信息的其它设备。相应地,除非另外明确指定或者由上下文要求,否则对任何特定类型的数据处理系统(例如,pc)的引用都应当被理解为也包含其他类型的数据处理系统。数据处理系统也可被称为“装置”。数据处理系统的组件也可被称为“装置”。
98.而且,根据本公开,设备可包括指令和其他数据,这些指令和其他数据在由处理器访问时使设备执行特定操作。出于本公开的目的,使设备执行操作的指令或其他数据通常可被称为“软件”或“控制逻辑”。在引导进程期间使用的软件可被称为“固件”。被存储在非易失性存储器中的软件也可被称为“固件”。可使用任何合适的结构或结构的组合来组织软件。因此,像程序和模块之类的术语一般可用于涵盖广泛范围的软件构造,包括但不限于应
用程序、子程序、例程、函数、过程、驱动程序、库、数据结构、进程、微代码、以及其他类型的软件组件。同样,应当理解,软件模块可包括多于一个的组件,并且那些组件可协作以完成该模块的操作。而且,软件使设备执行的操作可包括创建操作上下文、使特定数据结构实例化等。而且,实施例可包括使用任何合适的操作环境和编程语言(或者操作环境和编程语言的组合)来实现的软件。例如,程序代码可采用编译语言、采用解释语言、采用过程语言、采用面向对象语言、采用汇编语言、采用机器语言、或采用任何其他合适的语言来实现。
99.包含数据并且允许另一组件获得此数据的介质可以被称为“机器可访问介质”或“机器可读介质”。相应地,实施例可包括机器可读介质,该机器可读介质包含用于执行本文中所描述的操作中的一些或全部的指令。此类介质总体上可被称为“装置”,并且具体地被称为“程序产品”。在一个实施例中,用于多个组件的软件可被存储在一个机器可读介质中。在其他实施例中,可以使用两个或更多个机器可读介质来存储用于一个或多个组件的软件。例如,用于一个组件的指令可被存储在一个介质中,并且用于另一组件的指令可被存储在另一介质中。或者,用于一个组件的指令的部分可被存储在一个介质中,而用于那个组件的指令的其余部分(以及用于其他组件的指令)可被存储在一个或多个其他介质中。类似地,上文在一个实施例中被描述为驻留在特定设备上的软件在其他实施例中可驻留在一个或多个其他设备上。例如,在分布式环境中,一些软件可在本地被存储,并且一些软件可在远程被存储。一些实施例的机器可读介质可包括但不限于有形的非瞬态存储组件以及处理器、控制器和包括数据存储设施的其他组件,有形的非瞬态存储组件诸如,磁盘、光盘、磁光盘、动态随机存取存储器(ram)、静态ram、非易失性ram(nvram)、只读存储器(rom)、固态驱动器(ssd)、相变存储器(pcm)等。为了本公开的目的,术语“rom”可一般地用于指代非易失性存储器设备,诸如可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪存rom、闪存等。
100.而且,在一个实施例中被描述为在一个特定设备上执行的操作在其他实施例中可由一个或多个其他设备执行。另外,虽然已经参照以特定顺序执行的特定操作描述了一个或多个示例过程,但可以对那些过程应用众多修改以得到本发明的众多替代实施例。例如,替代实施例可包括使用比所公开的全部操作更少的操作的过程、使用附加操作的过程以及在其中本文公开的各个操作被组合、细分、重排列或以其他方式更改的过程。
101.还应理解,本文中所描绘的硬件和软件组件表示功能元件,这些功能元件合理地自包含以使得每一个功能元件可以基本上独立于其他功能元件来设计、构造或更新。在替代实施例中,许多组件可被实现为用于提供本文中所描述和所图示的功能的硬件、软件或硬件和软件的组合。例如,在一些实施例中,用于实现所描述的功能的控制逻辑中的一些或全部可采用硬件逻辑电路系统来实现,诸如例如专用集成电路(asic)或利用可编程门阵列(pga)来实现。类似地,控制逻辑中的一些或全部可被实现为集成电路芯片中的微代码。而且,诸如“电路”和“电路系统”之类的术语在本文中可以可互换地使用。那些术语以及像“逻辑”之类的术语可用于指代模拟电路系统、数字电路系统、处理器电路系统、微控制器电路系统、硬件逻辑电路系统、硬连线电路系统、可编程电路系统、状态机电路系统、任何其他类型的硬件组件、或硬件组件的任何合适的组合。
102.另外,除非另外明确指定,否则被描述为彼此耦合、彼此通信、彼此响应等等的组件无需彼此持续通信并且无需彼此直接耦合。另外,当一个组件被描述为从另一组件接收
数据或者向另一组件发送数据时,除非另外明确指定,否则该数据可通过一个或多个中间组件被发送或被接收。此外,数据处理系统的一些组件可被实现为具有接口(例如,连接器)的适配器卡以用于与总线通信。替代地,可使用诸如可编程或不可编程逻辑器件或阵列、asic、嵌入式计算机、智能卡等等之类的组件将设备或组件实现为嵌入式控制器。出于本公开的目的,术语“总线”包括可由多于两个的设备共享的路径以及点对点路径。类似地,诸如“线”、“引脚”等之类的术语应被理解为指代导线、导线集合、或者任何其他合适的导体或导体集合。例如,总线可包括一个或多个串行链路,串行链路可包括一个或多个通道,通道可由一个或多个差分信令对组成,并且那些导体携载的电的改变的特性可被称为“信号”。另外,出于本公开的目的,术语“处理器”表示能够执行软件的硬件组件。例如,处理器可被实现为中央处理单元(cpu),或者被实现为任何其他合适类型的处理元件。cpu可包括一个或多个处理核。并且设备可包括一个或多个处理器。
103.其他实施例可被实现在数据中,并且可被存储在非瞬态存储介质上,该非瞬态存储介质如果被至少一个机器使用则使得该至少一个机器制造至少一个集成电路以执行根据本公开的一个或多个操作。更进一步的实施例可以在包括信息的计算机可读存储介质中实现,该计算机可读存储介质在被制造在soc或其他处理器中时用于将soc或其他处理器配置成用于执行根据本公开的一个或多个操作。至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器内的各种逻辑单元的代表性指令来实现,并且这些代表性指令在由机器读取时使得该机器制造用于执行本文中所描述的技术的逻辑单元。表示各种逻辑单元的指令可被称为“ip核”,并且它们可被存储在有形的机器可读介质上并且可被供应给各个消费者或制造设施以加载到实际制作该逻辑单元或处理器的制造机器中。至少一个实施例的一个或多个方面可包括机器可读介质,该机器可读介质包含指令或设计数据,该设计数据定义本文中所描述的结构、电路、装置、处理器和/或系统特征。例如,设计数据能以硬件描述语言(hdl)来格式化。
104.鉴于可以从本文描述的示例实施例中容易地导出的各种各样的有用排列,此具体实施方式旨在仅仅是说明性的,且不应被视为限制涵盖范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献