共享的运算对称的、更新敏感的变量的制作方法
【专利摘要】本公开总体上涉及共享的运算对称的更新敏感的变量。实施例包括多处理器系统,包括多核处理器系统,以及用于操作这种系统的方法,其中至少一个处理器或者处理器核被配置为接收指示该至少一个处理器核读取与存储器地址相关联的值的指令。响应于接收到该指令并且在该指令的执行之前,该至少一个处理器或者处理器核使多个相互通信地彼此耦合的处理器核中的处理器核提供多个本地存储的值,这些本地存储值被分别存储在相应的处理器核中并且与该存储器地址相关联。
【专利说明】共享的运算对称的、更新敏感的变量
[0001]相关申请交叉引用
[0002]本公开要求与2013年I月14日提交的美国临时专利申请N0.61/752,271的优先权,其通过整体引用并入本文。
【技术领域】
[0003]本发明的实施例涉及多处理器系统中的共享存储器地址,并且更具体地涉及处置共享的运算对称的(op-symmetric)、更新敏感(update-sensitive)的变量。
【背景技术】
[0004]在多处理器系统或多核(core)处理器系统中,一些变量由处理器的所有核或者由系统内的所有处理器共享。传统上,对共享变量的更新通过全局唯一序列化点进行。例如,硬件高速缓存相干性和信号量系统通常需要在读改写期间维持共享变量的一致性。对于特定类型的变量(诸如经常被更新但是很少被读取的变量),多个处理器彼此竞争以更新共享存储器中的变量。并且存储器竞争由于重试或者阻挡条件而导致降低的性能。例如,在第一处理器读取共享计数器时,第二处理器对共享计数器的访问被阻挡。第二处理器在完成其更新操作之前等待共享存储器变得可用。在其他示例中,诸如精简指令集计算(RISC)架构,软件读取变量并且随后尝试对相同变量进行写入。但是如果对变量的另一访问在第一读取之后发生,硬件将不执行后续写入。
【发明内容】
[0005]在各实施例中,本公开提供多处理器系统,其中至少一个处理器或者处理器核被配置为接收用以指示所述至少一个处理器核读取与存储器地址相关联的值的指令。响应于接收到所述指令并且在所述指令的执行之前,所述至少一个处理器或者处理器核使所述多个相互通信地彼此耦合的处理器核中的处理器核提供多个本地存储的值,所述本地存储的值被分别存储在相应的所述处理器核中并且与所述存储器地址相关联。
[0006]在一些实施例中,多核处理器系统包括将所述处理器核互连的处理器结构。所述至少一个处理器核被配置为使所述多个处理器核中的所述处理器核通过至少向所述处理器结构发出针对所述存储器地址的读取命令,而提供与所述存储器地址相关联的所述本地存储的值。所述处理器结构被配置为响应于所述读取命令的接收而:从多数多个处理器核请求与所述存储器地址相关联的所述本地存储的值;至少基于由所述多个处理器核提供的所述本地存储的值,确定与所述存储器地址相关联的所述值;以及向所述至少一个处理器核提供所述值。在一些实施例中,所述处理器结构还被配置为处理所述本地存储的值以确定所述值。在一些实施例中,所述至少一个处理器核还被配置为响应于所述处理器结构的请求,提供其自己的与所述存储器地址相关联的本地存储的值的拷贝。
[0007]在一些实施例中,所述至少一个处理器核还被配置为确定所述存储器地址是一组预定存储器地址之一,并且使所述多个处理器核响应于所述存储器地址是所述组之一的确定而使所述多个处理器核提供所述本地存储的值。在一些实施例中,所述至少一个处理器核还被配置为响应于用以向所述存储器地址进行写入的另一指令的接收,而响应于所述存储器地址是所述组之一的至少另一确定而更新其自己的与所述存储器地址相关联的本地存储的值。
[0008]在一些实施例中,所述至少一个处理器核被配置为使多个相互通信地彼此耦合的处理器核中的处理器核提供计数器值,所述计数器值与所述存储器地址相关联并且被本地存储在所述处理器核中相应的所述处理器核中。
[0009]在一些实施方式中,所述至少一个处理器核还被配置为使所述多个处理器核通过至少在处理器总线上发出针对所述存储器地址的读取命令,而提供与所述存储器地址相关联的所述本地存储的值。所述至少一个处理器核还被配置为经由所述总线接收与所述存储器地址相关联的值,所述值基于由所述多个处理器核提供的所述本地存储的值。
[0010]在一些实施例中,所述至少一个处理器核还被配置为响应于用以对所述存储器地址进行写入的另一指令的接收,更新其自己的与所述存储器地址相关联的本地存储的值。
[0011]在各实施例中,本公开提供用于在多核处理器系统中保持与共享存储器地址相关联的值的同步的方法。所述方法包括由所述多核处理器系统的多个互连的处理器核中的一个处理器核接收计算机指令,所述计算机指令用以读取与所述共享存储器地址相关联的所述值。响应于所述计算机指令的接收并且在所述计算机指令的执行之前,使得所述多核处理器系统的所述多个处理器核中的其他处理器核提供本地存储的值,所述本地存储的值与所述共享存储器地址相关联并且被本地存储在所述多个处理器核的各其他处理器核上
[0012]在一些实施例中,所述多个处理器核中的所述一个处理器核发出针对与所述共享存储器地址相关联的所述值的读取命令。处理器互连响应于所述读取命令的接收而向所述多核处理器系统的所述多个处理器核,发出针对与所述共享存储器地址相关联的所述本地存储的值的请求。在一些实施例中,所述发出所述请求包括向所述多个处理器核中的所述一个处理器核发出请求。在一些实施例中,所述方法还包括:由所述处理器互连确定所述共享存储器地址是一组预定存储器地址之一,并且其中向所述多个处理器核发出所述请求是响应于所述共享存储器地址是所述组之一的确定。
[0013]在一些实施例中,所述方法包括由处理器互连从所述多个处理器核接收所述本地存储的值。由所述处理器互连或所述多个处理器核中的所述一个处理器核之一,至少基于所述本地存储的值来确定与所述共享存储器地址相关联的所述值。在一些实施例中,所述确定包括:处理所述本地存储的值,以确定与所述共享存储器地址相关联的所述值。
[0014]在一些实施例中,所述方法包括:由所述至少一个处理器核接收与所述共享存储器地址相关联的所述值,所述值至少基于所述本地存储的值的结合。
[0015]在一些实施例中,所述方法包括:由所述处理器核中的所述一个处理器核,确定所述共享存储器地址是一组预定存储器地址之一;以及响应于所述共享存储器地址是所述组之一,使所述多个处理器核提供所述本地存储的值。
[0016]在一些实施例中,所述使得包括向处理器互连发出针对所述共享存储器地址的读取指令,所述处理器互连将所述多个处理器互连,并且其中所述方法还包括:从所述处理器互连接收与所述共享存储器地址相关联的所述值。
[0017]在一些实施例中,所述方法包括至少响应于以下项而由所述多个处理器中的所述一个处理器更新其自己的与所述共享存储器地址相关联的本地存储的值:接收到用以对所述存储器地址进行写入的另一计算机指令,以及所述共享存储器地址是一组预定存储器地址之一的确定。
[0018]在各实施例中,本公开提供多核处理器系统,包括:多个相互通信地彼此耦合的处理器核。所述多个处理器核中的至少一个处理器核被配置为:接收第一指令,所述第一指令指示所述至少一个处理器核读取与第一存储器地址相关联的第一值;并且接收第二指令,所述第二指令指示所述至少一个处理器核读取与第二存储器地址相关联的第二值。响应于确定所述第一存储器地址在预定的一组存储器地址中,并且在所述第一指令的执行之前,使所述多个相互通信地彼此耦合的处理器核中的处理器核提供多个本地存储的值,所述本地存储值被分别存储在相应的所述处理器核中并且与所述第一存储器地址相关联。响应于确定所述第二存储器地址不在所述预定的一组存储器地址中,并且在所述第二指令的执行之前,向共享存储器发出针对与所述第二存储器地址相关联的所述第二值的读取命令。在一些实施例中,所述多核处理器系统还包括将所述处理器核互连的处理器结构。在一些实施例中,所述至少一个处理器核被配置为使所述多个处理器核中的所述处理器核通过至少向所述处理器结构发出针对所述第一存储器地址的另一读取命令,来提供与所述第一存储器地址相关联的所述本地存储的值。所述处理器结构被配置为响应于所述另一读取命令的接收而:从所述多个处理器核请求与所述第一存储器地址相关联的所述本地存储的值;至少基于由所述多个处理器核提供的所述本地存储的值,确定与所述第一存储器地址相关联的所述第一值;以及向所述至少一个处理器核提供所述第一值。
[0019]在一些实施例中,所述处理器结构还被配置为:响应于接收到针对所述第一存储器地址的所述另一读取命令,从所述共享存储器读取与所述第一存储器地址相关联的临时值;以及至少基于由所述多个处理器核提供的所述本地存储的值以及所述临时值,确定与所述第一存储器地址相关联的所述第一值。
[0020]在一些实施例中,所述至少一个处理器核还被配置为响应于用以对所述第一存储器地址进行写入的另一指令的接收,并且响应于所述第一存储器地址是所述预定的一组存储器地址之一的确定,更新其自己的与所述第一存储器地址相关联的本地存储的值。
[0021]在一些实施例中,所述至少一个处理器核还被配置为使所述多个处理器核通过在处理器总线上发出针对所述存储器地址的第一读取命令而提供与所述第一存储器地址相关联的所述本地存储的值。所述至少一个处理器核经由所述总线接收与所述存储器地址相关联的所述第一值,所述第一值基于由所述多个处理器核提供的所述本地存储的值中的一个或多个值以及存储在所述临时存储器中的临时值。
[0022]在一些实施例中,所述多核处理器系统包括处理器结构,所述处理器结构将所述处理器核互连,并且被配置为利用信号量系统来保护所述共享存储器。在一些实施例中,所述至少一个处理器核被配置为使所述多个相互通信地彼此耦合的处理器核中的所述处理器核提供计数器值,所述计数器值与所述第一存储器地址相关联并且被本地存储在所述处理器核中相应的所述处理器核中。
【专利附图】
【附图说明】
[0023]通过结合附图进行的以下详细描述将容易理解本发明的实施例。为了辅助描述,相同的附图标记指代相同结构元素。本发明的实施例借由示例而非借由附图中的图中的限制进行图示。
[0024]图1示意性地示出被配置为同步共享的运算对称的更新敏感(SOSUS)的变量的多核处理器系统的不例。
[0025]图2是根据各实施例的处理器对针对共享存储器地址的存储器访问指令做出响应的方法的流程图。
[0026]图3是根据各实施例的处理器互连对用于读取共享存储器地址的指令做出响应的方法的流程图。
[0027]图4是根据各实施例的如下方法的流程图,在该方法中处理器确定用于对针对共享存储器地址的存储器访问指令做出响应的处理。
[0028]图5A至图5C是根据各实施例的如下方法的流程图,在该方法中处理器互连确定用于对针对共享存储器地址的存储器访问指令做出响应的处理。
【具体实施方式】
[0029]本发明描述了一种用于同步多处理器系统(包括多核处理器系统)中的变量的方法。用于更新某些变量(由查找表标识)的计算机指令(诸如软件指令)导致由处理器本地执行的写入——也就是说,对变量的存储于处理器上的本地的、非高速缓存拷贝执行写入。此外,对变量的软件读取由处理器全局执行,这导致向处理器核发出的针对它们的本地存储的值的探测(snoop)。更具体而言,请求处理器通过向共享存储器地址发出针对变量的读取命令来响应于软件指令而读取变量。处理器互连或者处理器结构接收读取指令并且确定特定读取请求是针对被指定为以本文所描述的方式进行读取的存储器地址。取代向共享存储器传送读取指令,处理器互连中的逻辑向处理器核发出探测命令,包括针对变量的本地存储的值请求处理器核。处理器互连接收来自处理器的本地存储的值,并且基于本地存储的值确定针对变量的全局值。在一些实施例中,处理器互连也执行针对临时(或者基线)全局值对共享存储器的读取,并且从本地存储的值以及存储于共享存储器中的基线/临时值来确定全局值。例如,在一些实施例中处理器互连对本地存储的值和来自共享存储器的临时值进行求和以确定针对变量的全局值。在其他实施例中,使用其他处理来确定针对变量的全局值,诸如按位OR运算。处理器互连随后向请求处理器核提供全局值,该请求处理器核随后使用全局值来执行软件指令。
[0030]某些类型的变量是遵循以本文所描述的方式的处理的类型的变量,本文被称作共享的运算对称的更新敏感(SOSUS)的变量。在一个实施例中,SOSUS变量由多个处理器共享。运算对称类型的变量是由结合的(associative)和对称的运算进行更新的变量。例如,计数器是运算对称的,因为(cnt+A)+B= (cnt+B)+A。在另一实施例中,按位OR是运算对称的运算,因为VIbIc=vI (ClB)。更新敏感指的是这样的事实:系统通常对这样的变量的更新延时敏感,而对这样的变量的观测(observational)延时不敏感。通过本地更新,更新延时与更新存储于共享存储器中的变量的全局值相比大大减少。尽管使用本文所描述的方式读取变量导致与从共享存储器简单读取相比而潜在地更高的读取延时(虽然并非必要),但是系统对于针对这些类型的变量的读取延时并不特别敏感,并且如果读取延时增大,则对性能产生很小影响或者不产生影响。[0031]图1示意性地示出被配置为同步SOSUS变量的多核处理器系统100的示例。系统100包括多个处理器102、104和106 (N个,在图1中也标记为PO至P (N-1))。在一些实施例中,处理器102-106是被配置为执行软件指令的处理器核或者多个单处理器核。在一些实施例中,处理器102-106是专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他硬件处理器类型。系统100包括处理器互连116和共享存储器150。处理器互连通信地互连处理器102-106。共享存储器150由所有处理器102-106共享,共享存储器150合适地包括各种类型的存储器(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存等)或者被包括在各种类型的存储器中。共享存储器150包括全局可寻址的存储器位置,该全局可寻址的存储器位置可由处理器102-106中的多个处理器访问(例如能够从其读取和/或向其写入)。在执行向共享存储器150内的共享存储器位置写入时,当存储器位置正在被更新时,处理器互连116采用基于信号量标志系统或者其他机构来将对共享存储器位置的访问锁定为其他处理。同样,如下文将更具体描述的那样,一些共享存储器地址与存储于处理器102-106上的本地存储的值相关联。处理器互连116针对其本地存储的值探测处理器112-116,而非从共享存储器150读取存储器地址或者除了从共享存储器150读取存储器地址之外。
[0032]处理器102、104和106分别存储本地存储的值120、124和128。在一些实施例中,本地存储的值120、124和128是存储于处理器102-106的硬件计数器中的计数器值。处理器102-106(静态地或者通过合适的计算机指令)被配置为关联本地存储的值120、124和128与特定的共享存储器地址。本地存储的值120、124和128中的每个值与相同的共享存储器地址相关联。
[0033]存储于处理器102-106上的查找表(“LUT”) 122、126和130标识一个或者多个共享存储器地址,针对该共享存储器地址将根据本文所描述的处理来处置软件指令(例如本地更新和全局读取)。LUT122U26和130也标识与将根据本文所描述的处理来处置的那些共享存储器地址相关联的本地存储变量。例如,LUT122U26和130标识SOSUS变量和/或其他类型的变量。在相同或不同实施例中,LUT122U24和126也或者备选地标识共享存储器地址,针对该共享存储器地址以其他方式处理软件指令,诸如通过对共享存储器的常规读取和写入。在图1中示出的示例实施例中,LUT122将值120标识为与特定的共享存储器地址相关联;LUT126将值124标识为与相同的特定的共享存储器地址相关联;并且LUT130将值128标识为与相同的特定的共享存储器地址相关联。
[0034]处理器102中的读取/写入逻辑执行与对共享存储器地址的读取和写入相关的各种功能。逻辑134至少基于对LUT122的查找来标识针对共享存储器地址的处理。例如,处理器102接收并且调度用于对在第一共享存储器地址处存储的值进行更新、增量和写入的软件指令。逻辑134例如从LUT122确定将本地执行对第一共享存储器地址的更新。在确定将本地执行对第一共享存储器地址的读取时,逻辑134更新或者以其他任何方式使处理器102更新本地存储于处理器102上的值120。在另一示例中,处理器102接收并且调度用于写入或者更新存储于第二存储器地址处的值的软件指令。逻辑134从LUT122确定将全局执行对第二共享存储器地址的更新。在确定将全局执行对第二共享存储器地址的读取时,逻辑134经由处理器总线108向处理器互连116发出或者以其他任何方式使处理器102发出写入指令,以在共享存储器150内的第二共享存储器地址处存储该值。[0035]在接收计算机指令或者调度计算机指令时,为了读取与第一存储器地址相关联的值,逻辑134经由处理器总线108向处理器互连116发出或者以其他任何方式使处理器102发出写入指令。同样,在接收软件指令或者调度软件指令时,为了读取与第二存储器地址相关联的值,逻辑134经由处理器总线108向处理器互连116发出或者以其他任何方式使处理器102发出写入指令。
[0036]处理器104包括读取/写入逻辑138,其与读取/写入逻辑134以相同或相似方式起作用。而且,处理器106包括读取/写入逻辑140,其与读取/写入逻辑134以相同或相似方式起作用。
[0037]处理器互连116经由处理器总线108、110和112通信地耦合至处理器102-106。在一个实施例中,处理器互连116支持处理器102-106彼此相互通信地彼此耦合以及将处理器102-106耦合至共享存储器150。在处理器互连116从处理器102-106之一接收读取指令时,处理器互连116的存储器读取逻辑118确定针对来自LUT132的读取指令的处理。
[0038]从请求处理器(例如,处理器102-106之一)接收到用以读取与第一共享存储器地址(即,由对LUT132的查找确定的与值120、124和128相关联的存储器地址)相关联的值的命令将导致存储器读取逻辑118从处理器102-106中的每一个请求与第一共享存储器地址相关联的本地存储的值120、124和128。例如,存储器读取逻辑118向处理器102-106发出指定第一共享存储器地址的探测命令,这将导致处理器102-106提供本地存储的值120,124 和 128。
[0039]在接收到本地存储的值120、124和128之后,存储器读取逻辑118根据本地存储的值120、124和128确定于第一共享存储器地址相关联的全局值,并且将全局值提供给请求处理器。在某些实施例中,除了从处理器102-106请求本地存储的值之外,处理器互连116还从共享存储器150读取临时值(例如,临时值152),并且根据本地存储的值120、124和128以及根据临时值152来确定全局值。在某些实施例中,处理器102-106将本地存储的值冲刷(flush)到共享存储器,以便在处理器102-106上给诸如其他计数器值的其他值腾出空间。在某些实施例中,冲刷本地存储的值包括清除本地存储的值(诸如本地计数器值),并且使其被写入共享存储器,诸如被写到临时值152,其也是经由与本地存储的值120、124和128相关联的共享存储器地址而可寻址的。在某些实施例中,将本地存储的值120、124和128冲刷到共享存储器150中包括确定变量的全局值(包括针对其相应的本地存储的值120、124和128而探测处理器102-106,并且从共享存储器150读取临时值152),将全局值作为读取-修改-写入存储到共享存储器150中的临时值152存储器位置,并且清除处理器102-106中的本地存储的值。
[0040]在某些实施例中,处理器102-106在进入低功率模式之前将其值120、124或128冲刷到共享存储器150,低功率模式诸如关机模式、节电模式或者其他模式。冲刷操作包括对临时值152的读取-修改-写入。在某些实施例中,本地存储的值120、124或128被冲刷到共享存储器150中而不对其他高速缓存进行探测,并且无需确定共享变量的全局值。对共享存储器150中的临时值152的写入是原子的或者是信号量保护的。在某些实施例中,针对每个处理器102-106而存储不同的临时值。在某些实施例中,处理器互连116跟踪处于低功率模式或者以因其他原因而将其本地存储的值临时存储在共享存储器150中的那些处理器,并且基于处理器是否将其计数器值临时存储在共享存储器150中而选择性地从共享存储器150读取临时值。
[0041]在某些实施例中,存储器读取逻辑118将本地存储的值120、124和128 (在某些实施例中,还有临时值152)相加以确定全局值。在其他实施例中,存储器读取逻辑执行某些结合的和对称的操作,诸如按位“或”(OR)操作。在某些实施例中,为了确定全局值而对本地址120、124和128 (在某些实施例中,还有临时值152)执行的操作可由对LUT132的查找确定,并且可以是软件可配置的或者是硬编码的。如上所述,与特定的共享存储器地址相关联的共享变量的值不存储在共享存储器150中;相反,值由逻辑118响应于接收到用以读取与共享变量相关联的共享存储器地址的命令而确定。因此,在某种意义上说,(与特定共享存储器地址相关联的)特定共享变量的全局值由处理器互连116和处理器102-106虚拟存储。
[0042]在特定实施例中,值120、124和128是计数器值,其与单个共享存储器地址相关联。处理器102-106被配置为本地更新计数器值120、124和128并且全局读取计数器。特别地,处理器102-106通过递增本地存储的计数器,而对针对与计数器值120、124和128相关联的共享存储器地址的存储操作做出响应。对与计数器值120、124和128相关联的共享存储器地址的读取执行将导致探测操作被发给每个处理器102-106 ;例如,请求处理器向处理器互连116发出针对相关联的共享存储器地址的读取命令,其继而向处理器102-106(包括请求处理器)发出探测命令。处理器102-106通过向处理器互连116提供其本地存储的值120、124和128对探测操作做出响应。处理器互连116使用值120、124和128来确定于计数器相关联的共享存储器地址的全局值,并继而将其提供给请求处理器。
[0043]接下来,描述系统100的一个特定实现示例。下面的事务通过总线108-112在处理器102-106以及处理器互连116之间传送(pBUS是指将处理器耦合至处理器互连116的处理器总线):
[0044]1.pBUS.READ(B):从处理器向互连的读取请求,其由于存储器地址B相关联的值来响应。
[0045]2.pBUS.SNOOP (B):从互连向处理器的探测请求,其由于存储器地址B相关联的本地存储的值的关联值来响应。
[0046]在LUT122、126和130 (以及LUT132)之内,isSOSUS (B)表示存储器地址B将要利用本地更新和全局读取来处理。与值120、124和128相关联的计数器对如下命令做出响应(pCNT指示处理器的私有计数器):
[0047]1.pCNT.pCNT使私有计数器返回其值,表示为pCNT.val。
[0048]2.pCNT.1NC⑶使计数器递增值D。
[0049]处理器102-106被配置为做出响应的软件指令包括:
[0050]1.STR (B, D)使处理器将与共享存储器地址B相关联的计数器递增值D。
[0051]2.LDR(B)使处理器读取存储在与共享存储器地址B相关联的计数器处的值。
[0052]处理器102-106的读取/写入逻辑134、138和140被配置为执行以下操作:
[0053]如果存在指令STR(B, D)和 isSOSUS⑶,则 pCNT.1NC(D);即,软件指令 STR(B, D)的接收使读取/写入逻辑134、138和140确定存储器地址B是否为SOSUS变量(或者更一般地说,它是否要被本地更新和全局读取),并且如果是,则它向计数器发出命令以将其自己递增值D。[0054]如果存在指令LDR⑶和isSOSUS⑶,则pBUS.READ⑶;即,软件指令LDR⑶的接收使读取/写入逻辑134、138和140确定存储器地址B是否为SOSUS变量(或者更一般地说,它是否要被本地更新和全局读取),并且如果是,则向总线发出针对与存储器地址B相关联的值的命令。
[0055]如果存在传入的探测pBUS.SNOOP (B)并且 i sSOSUS (B),则 pBUS.SN00P_RESP.DATA=pCNT.val ;即,当经由处理器总线接收到针对与存储器地址B相关联的值的探测操作时,处理器确定于存储器地址B相关联的变量将被作为SOSUS变量,并且利用本地计数器PCNT的值对探测操作做出响应。
[0056]处理器互连116的存储器读取逻辑118被配置为执行如下算法:
[0057]如果pBUS.READ (B)并且 isSOSUS (B),则:
[0058]1.向所有处理器发送具有地址B的探测命令(pBUS.SNOOP (B))。
[0059]2.从共享存储器150读取临时值152。
[0060]3.从所有处理器接收SN00P_RESP值Di (Di=来自处理器i的值)。
[0061]4.利用所有Di+临时值152的和对请求处理器做出响应。
[0062]由此,由处理器互连116从一个处理器接收到针对存储器地址B (其中B被指示为作为SOSUS变量)的读取命令将导致处理器互连向所有处理器(包括请求处理器)发出探测命令,接收计数器的本地值,读取临时值512 (例如,使用信号量),并且将所有本地值和临时值512相加以获得计数器的全局值,处理器互连继而将全局值提供给请求处理器。在某些实施例中,全局值还被写回共享存储器150的临时值152,并且本地计数器值被冲刷。
[0063]图2是根据各个实施例的对针对共享存储器地址的存储器访问指令做出响应的处理器的方法200的流程图。在202,多核或者多处理器系统的处理器,诸如处理器102-106之一,接收用以执行与共享存储器地址相关联的存储器访问操作的指令,其中该共享存储器地址将要被本地更新和全局读取,如本文中其他地方所详细描述的。共享存储器地址与处理器内的诸如计数器中的本地存储的值(例如,值120、124和128)相关联。
[0064]在204,处理器确定该存储器访问操作是读取操作还是写入操作。在确定存储器操作是写入操作时(诸如与用以递增计数器的软件命令相关联),在206,处理器更新该值的本地存储的拷贝。在确定存储器操作是读取命令时,在208,处理器向诸如处理器互连116的处理器互连发出读取命令。由处理器互连执行的后续操作参考图3,由翻页标号A表示。
[0065]在210,处理器从处理器互连接收与共享存储器地址相关联的全局值(翻页编号B,参考图3)。在212,处理器使用全局值来执行接收到的软件命令。例如,处理器可以将全局值存储到寄存器中或者其他存储器位置中,以便在后续软件指令中使用。
[0066]图3是根据各个实施例对用以读取共享存储器地址的命令做出响应的处理器互连的方法300的流程图。在302,诸如处理器互连116的处理器互连从请求处理器(例如,处理器102-106之一)接收用以读取与共享存储器地址相关联的值的命令(翻页标记A,参考图2)。
[0067]在304,处理器互连从包括请求处理器在内的多个处理器请求与共享存储器地址相关联的本地存储的值。在某些实施例中,请求本地存储的值包括向多个处理器发出针对与共享存储器地址相关联的本地存储的值的探测命令。
[0068]在306,处理器互连从诸如共享存储器150的共享存储器读取诸如临时值152的临时值。
[0069]在308,由处理器互连从处理器接收与共享存储器地址相关联的本地存储的值。本地存储的值经由处理器总线被返回。
[0070]在310,处理器互连根据接收到的本地存储的值、并且在某些实施例中还根据存储在共享存储器中的临时值,确定与共享存储器地址相关联的全局值。确定全局值包括执行与共享存储器地址相关联的某些操作,诸如对本地存储的值(例如计数器中的值)的求和、按位“或”操作或者其他结合性和对称性操作。
[0071]在312,处理器互连诸如经由处理器总线将全局值返回请求处理器。返回图2参考过程流的剩余部分。在某些实施例中,处理器互连还将确定的全局值写入共享存储器150,诸如对存储于其中的临时值的存储器位置使用读取-修改-写入。在这些实施例中,处理器还冲刷或者重置其本地计数器值。
[0072]图4是根据各个实施例的方法400的流程图,其中处理器确定用于对针对共享存储器地址的存储器访问执行做出响应的过程。在402,多核或者多处理器系统的处理器(诸如处理器102-106之一)接收用以执行与共享存储器地址相关联的存储器访问操作的软件指令。
[0073]在404,处理器执行对查找表(诸如查找表122、126或者130之一)的查找,以确定变量是否要本地更新和全局读取(换言之,它是否被当作SOSUS变量)。
[0074]当在406确定共享存储器地址将不被当作SOSUS变量(“否”分支)时,处理器在408确定存储器访问操作是读取指令还是写入指令。当确定指令是写入指令时,在410,处理器向诸如处理器互连116的处理器互连发出针对共享存储器地址的写入命令。在确定指令是读取指令时,在412,处理器向处理器互连发出针对共享存储器地址的读取命令。
[0075]当在406确定共享存储器地址与SOSUS变量相关联时(“是”分支),处理器在414确定该存储器访问操作是读取指令还是写入指令。当确定存储器操作是写入操作时(诸如与递增计数器的软件指令相关联),在416,处理器更新该值的本地存储的拷贝。在确定存储器操作是读取命令时,在418,处理器向处理器互连发出读取命令。由处理器互连执行的后续操作参看图5,由翻页标记C所示。
[0076]在420,处理器响应于读取命令而从处理器互连(翻页标记F,参考图5B和图5C)接收与共享存储器地址相关联的全局值。在422,处理器使用全局值来执行接收到的软件命令。例如,处理器可以将全局值存储在寄存器或者其他存储器位置,以便在后续软件指令中使用。
[0077]图5A-图5C包括根据各个实施例的方法500流程图,其中处理器互连确定用于对针对共享存储器地址的存储器访问指令做出响应的过程。参考图5A,在502,诸如处理器互连116的处理器互连从请求处理器(例如,处理器102-106之一)接收针对共享存储器地址的存储器访问命令(翻页标号C,参考图4)。
[0078]在504,处理器互连执行对查找表(诸如LUT132)的查找,以确定变量是否将被当作SOSUS变量。
[0079]当在506确定变量不被当作SOSUS变量时(“否”分支),处理器互连(或者备选地,共享存储器)在508 (图5B中示出,翻页标记D)确定与存储器地址写相关梁的共享存储器(例如,共享存储器150)中的存储器位置是否可用,或者说,当前是否被另一进程锁定。在某些实施例中,确定存储器位置的可用性包括参考信号量类型的标志,以确定存储器位置的可用性。处理器互连或者共享存储器等待存储器位置变为可用以便继续操作。
[0080]当在508确定共享存储器位置可用时(“是”分支),在510,处理器互连或者共享存储器锁定存储器位置,以防止其他进程访问共享存储器位置。在512,根据存储器访问命令来执行存储器访问操作。在各实施例中,存储器访问命令可以包括读取命令、写入命令、读取-修改-写入命令或者其他命令。
[0081]在514,解锁存储器位置。这包括设置信号量类型标志以指示共享存储器位置的可用性,由此释放其他进程对其的访问。
[0082]当存储器访问操作是读取时,在516,处理器互连向请求处理器提供从共享存储器读取的值。
[0083]返回图5A,当在506确定变量将被当作SOSUS变量时(“是”分支),处理器互连在518 (图5C中示出,表示为翻页标记E),处理器互连从包括请求处理器在内的多个处理器请求与共享存储器地址相关联的本地存储的值。在某些实施例中,请求本地存储的值包括向多个处理器发出针对与共享存储器地址相关联的本地存储的值的探测命令。
[0084]在520,处理器互连从诸如共享存储器150的共享存储器读取诸如临时值152的临时值。
[0085]在522,由处理器互连从处理接收与共享存储器地址相关联的本地值。本地存储的值经由处理器总线被返回。
[0086]在524,处理器互连根据接收到的本地值、以及在某些实施例中根据存储在共享存储器中的临时值,确定与共享存储器地址相关联的全局值。确定全局值包括执行与共享存储器地址相关联的某些操作,诸如对本地存储的值和临时值(例如在共享变量是计数器的情况下)的求和、按位“或”操作或者其他结合性和对称性操作。
[0087]在524,处理器互连诸如经由处理器总线将全局值返回请求处理器。在某些实施例中,处理器互连还使用信号量或者原子保护的读取-修改-写入操作将确定的全局值写到共享存储器,诸如对临时值已经存储于其中的存储器位置使用读取-修改-写入。在这些实施例中,处理器还冲刷或者重置本地计数器值。
[0088]尽管已经在此示出和描述了某些实施例,被计算以实现相同目的的各种备选和/或等效实施例或实现可以替换已经示出和描述的实施例,而不脱离本发明的范围。例如,在备选实施例中,在此描述的处理器互连116所执行的某些功能可由处理器102-106之一来执行(例如,处理器可被配置为直接发出探测命令,接收本地存储的值,并且确定将被用以执行软件指令的全局值)。本申请意在涵盖在此描述的实施例的各种应用或者变形。因此,根据本发明的实施例仅有权利要求书及其等效项限定。
【权利要求】
1.一种多核处理器系统,包括: 多个相互通信地彼此耦合的处理器核,所述多个处理器核中的至少一个处理器核被配置为: 接收用以指示所述至少一个处理器核读取与存储器地址相关联的值的指令;以及响应于接收到所述指令并且在所述指令的执行之前,使所述多个相互通信地彼此耦合的处理器核中的处理器核提供多个本地存储的值,所述本地存储的值被分别存储在相应的所述处理器核中并且与所述存储器地址相关联。
2.根据权利要求1所述的多核处理器系统,还包括:将所述处理器核互连的处理器结构。
3.根据权利要求2所述的多核处理器系统,其中所述至少一个处理器核还被配置为使所述多个处理器核中的所述处理器核通过至少向所述处理器结构发出针对所述存储器地址的读取命令,而提供与所述存储器地址相关联的所述本地存储的值,所述处理器结构被配置为响应于所述读取命令的接收而: 从多数多个处理器核请求与所述存储器地址相关联的所述本地存储的值; 至少基于由所述多个处理器核提供的所述本地存储的值,确定与所述存储器地址相关联的所述值;以及 向所述至少一个处理器核提供所述值。
4.根据权利要求3所述的多核处理器系统,其中所述处理器结构还被配置为处理所述本地存储的值以确定所述值。
5.根据权利要求3所述的多核处理器系统,其中所述至少一个处理器核还被配置为响应于所述处理器结构的请求,提供其自己的与所述存储器地址相关联的本地存储的值的拷贝。
6.根据权利要求1所述的多核处理器系统,其中所述至少一个处理器核还被配置为确定所述存储器地址是一组预定存储器地址之一,并且使所述多个处理器核响应于所述存储器地址是所述组之一的确定而使所述多个处理器核提供所述本地存储的值。
7.根据权利要求6所述的多核处理器系统,其中所述至少一个处理器核还被配置为响应于用以向所述存储器地址进行写入的另一指令的接收,而响应于所述存储器地址是所述组之一的至少另一确定而更新其自己的与所述存储器地址相关联的本地存储的值。
8.根据权利要求1所述的多核处理器系统,其中所述至少一个处理器核被配置为使多个相互通信地彼此耦合的处理器核中的处理器核提供计数器值,所述计数器值与所述存储器地址相关联并且被本地存储在所述处理器核中相应的所述处理器核中。
9.根据权利要求1所述的多核处理器系统,其中所述至少一个处理器核还被配置为: 使所述多个处理器核通过至少在处理器总线上发出针对所述存储器地址的读取命令,而提供与所述存储器地址相关联的所述本地存储的值;以及 经由所述总线接收与所述存储器地址相关联的值,所述值基于由所述多个处理器核提供的所述本地存储的值。
10.根据权利要求1所述的多核处理器系统,其中所述至少一个处理器核还被配置为响应于用以对所述存储器地址进行写入的另一指令的接收,更新其自己的与所述存储器地址相关联的本地存储的值。
11.一种用于在多核处理器系统中保持与共享存储器地址相关联的值的同步的方法,所述方法包括: 由所述多核处理器系统的多个互连的处理器核中的一个处理器核接收计算机指令,所述计算机指令用以读取与所述共享存储器地址相关联的所述值;以及 响应于所述计算机指令的接收并且在所述计算机指令的执行之前,使得所述多核处理器系统的所述多个处理器核中的其他处理器核提供本地存储的值,所述本地存储的值与所述共享存储器地址相关联并且被本地存储在所述多个处理器核的各其他处理器核上。
12.根据权利要求11所述的方法,其中所述使得包括: 由所述多个处理器核中的所述一个处理器核,发出针对与所述共享存储器地址相关联的所述值的读取命令;以及 响应于所述读取命令的接收,由处理器互连向所述多核处理器系统的所述多个处理器核,发出针对与所述共享存储器地址相关联的所述本地存储的值的请求。
13.根据权利要求12所述的方法,其中所述发出所述请求包括向所述多个处理器核中的所述一个处理器核发出请求。
14.根据权利要求12所述的方法,还包括:由所述处理器互连确定所述共享存储器地址是一组预定存储器地址之一,并且其中向所述多个处理器发出所述请求是响应于所述共享存储器地址是所述组之一的确定。
15.根据权利要求11所述的方法,还包括: 由处理器互连从所述多个处理器核接收所述本地存储的值; 由所述处理器互连或所述多个处理器核中的所述一个处理器核之一,至少基于所述本地存储的值来确定与所述共享存储器地址相关联的所述值。
16.根据权利要求15所述的方法,其中所述确定包括:处理所述本地存储的值,以确定与所述共享存储器地址相关联的所述值。
17.根据权利要求11所述的方法,还包括:由所述至少一个处理器核接收与所述共享存储器地址相关联的所述值,所述值至少基于所述本地存储的值的结合。
18.根据权利要求11所述的方法,还包括: 由所述处理器核中的所述一个处理器核,确定所述共享存储器地址是一组预定存储器地址之一;以及 响应于所述共享存储器地址是所述组之一,使所述多个处理器核提供所述本地存储的值。
19.根据权利要求11所述的方法,其中所述使得包括向处理器互连发出针对所述共享存储器地址的读取指令,所述处理器互连将所述多个处理器互连,并且其中所述方法还包括:从所述处理器互连接收与所述共享存储器地址相关联的所述值。
20.根据权利要求11所述的方法,还包括至少响应于以下项而由所述多个处理器中的所述一个处理器更新其自己的与所述共享存储器地址相关联的本地存储的值: 接收到用以对所述存储器地址进行写入的另一计算机指令,以及 所述共享存储器地址是一组预定存储器地址之一的确定。
21.—种多核处理器系统,包括: 多个相互通信地彼此耦合的处理器核,所述多个处理器核中的至少一个处理器核被配置为: 接收第一指令,所述第一指令指示所述至少一个处理器核读取与第一存储器地址相关联的第一值; 接收第二指令,所述第二指令指示所述至少一个处理器核读取与第二存储器地址相关联的第二值; 响应于确定所述第一存储器地址在预定的一组存储器地址中,并且在所述第一指令的执行之前,使所述多个相互通信地彼此耦合的处理器核中的处理器核提供多个本地存储的值,所述本地存储值被分别存储在相应的所述处理器核中并且与所述第一存储器地址相关联;以及 响应于确定所 述第二存储器地址不在所述预定的一组存储器地址中,并且在所述第二指令的执行之前,向共享存储器发出针对与所述第二存储器地址相关联的所述第二值的读取命令。
22.根据权利要求21所述的多核处理器系统,还包括将所述处理器核互连的处理器结构。
23.根据权利要求22所述的多核处理器系统,其中所述至少一个处理器核还被配置为使所述多个处理器核中的所述处理器核通过至少向所述处理器结构发出针对所述第一存储器地址的另一读取命令,来提供与所述第一存储器地址相关联的所述本地存储的值,所述处理器结构被配置为响应于所述另一读取命令的接收而: 从所述多个处理器核请求与所述第一存储器地址相关联的所述本地存储的值; 至少基于由所述多个处理器核提供的所述本地存储的值,确定与所述第一存储器地址相关联的所述第一值;以及 向所述至少一个处理器核提供所述第一值。
24.根据权利要求23所述的多核处理器系统,其中所述处理器结构还被配置为: 响应于接收到针对所述第一存储器地址的所述另一读取命令,从所述共享存储器读取与所述第一存储器地址相关联的临时值;以及 至少基于由所述多个处理器核提供的所述本地存储的值以及所述临时值,确定与所述第一存储器地址相关联的所述第一值。
25.根据权利要求21所述的多核处理器系统,其中所述至少一个处理器核还被配置为响应于用以对所述第一存储器地址进行写入的另一指令的接收,并且响应于所述第一存储器地址是所述预定的一组存储器地址之一的确定,更新其自己的与所述第一存储器地址相关联的本地存储的值。
26.根据权利要求21所述的多核处理器系统,其中所述至少一个处理器核还被配置为: 使所述多个处理器核通过在处理器总线上发出针对所述存储器地址的第一读取命令而提供与所述第一存储器地址相关联的所述本地存储的值,去往所述共享存储器的针对与所述第二存储器地址相关联的所述第二值的所述读取命令是第二读取命令;以及 经由所述总线接收与所述存储器地址相关联的所述第一值,所述第一值基于由所述多个处理器核提供的所述本地存储的值中的一个或多个值以及存储在所述临时存储器中的临时值。
27.根据权利要求21所述的多核处理器系统,还包括处理器结构,所述处理器结构将所述处理器核互连,并且被配置为利用信号量系统来保护所述共享存储器。
28.根据权利要求21所述的多核处理器系统,其中所述至少一个处理器核被配置为使所述多个相互通信地彼此耦合的处理器核中的所述处理器核提供计数器值,所述计数器值与所述第一存储器 地址相关联并且被本地存储在所述处理器核中相应的所述处理器核中。
【文档编号】G06F15/167GK103984671SQ201410016223
【公开日】2014年8月13日 申请日期:2014年1月14日 优先权日:2013年1月14日
【发明者】E·乔舒亚, N·米兹拉希 申请人:马维尔国际贸易有限公司