CN114756502A - 片上原子事务引擎 - Google Patents

片上原子事务引擎 Download PDF

Info

Publication number
CN114756502A
CN114756502A CN202210542976.6A CN202210542976A CN114756502A CN 114756502 A CN114756502 A CN 114756502A CN 202210542976 A CN202210542976 A CN 202210542976A CN 114756502 A CN114756502 A CN 114756502A
Authority
CN
China
Prior art keywords
atomic transaction
transaction engine
processor core
ate
engine instance
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210542976.6A
Other languages
English (en)
Inventor
R·贾恩
E·M·施朗格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of CN114756502A publication Critical patent/CN114756502A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7825Globally asynchronous, locally synchronous, e.g. network on chip
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Abstract

本发明涉及片上原子事务引擎。一种硬件辅助的分布式存储器***可以在多个处理器核心中的每个的本地存储器中包括软件可配置的共享存储器区域。对于这些共享存储器区域的访问可以经由将片上ATE实例连接在一起的私有互连矩阵上通过片上ATE实例的网络来进行,每个核心一个ATE实例。例如,每个ATE实例可以将具有或没有响应的RPC发布给与远程处理器核心相关联的ATE实例以便执行以由远程处理器核心控制的存储器位置为目标的操作。每个ATE实例可以(原子地)处理从其它ATE实例接收的或者在本地产生的RPC。对于一些操作类型,ATE实例可以自己使用专用的硬件来执行RPC中标识的操作。对于其它操作类型,ATE实例可以中断其本地处理器核心来执行操作。

Description

片上原子事务引擎
本申请是申请号为201680055397.1、申请日为2016年9月21日、发明名称为“片上原子事务引擎”的发明专利申请的分案申请。
技术领域
本公开总体上涉及分布式共享存储器***,更具体地涉及用于利用专用的片上硬件来对附近的数据执行原子事务的***和方法。
背景技术
随着***中的处理器的数量持续增长,维持数据一致性和硬件可扩展性是关键的。然而,传统的共享存储器***(例如,虚拟存储器***)和传统的分布式存储器***不能满足这些要求,特别是在有多个进程在共享存储器上运行的多处理器***中。旨在解决这两个问题的分布式共享存储器(DSM)***通常由多个独立的处理节点(每个均具有本地存储器模块)组成,这多个独立的处理节点直接地或使用通用的互连网络间接地互相交谈。在典型的DSM中,共享数据是使用复制策略或迁移策略分布的。复制允许多份相同的数据项驻存在不同的本地存储器或高速缓存中。一旦数据项已经被复制在请求者的本地存储器中,该方法就允许请求者在本地访问这些数据项。
相比之下,迁移允许在任何给定时间仅存在单份数据。因此,在迁移策略下,数据项必须被移到请求者的本地存储器以便独占使用。因为复制和迁移这两者都涉及将数据移动至更靠近想要对它进行操作的处理器,所以为了跨越所有处理节点都维持数据一致性,它们都引发大量的开销。该开销主要是由于所涉及的硬件的复杂性而导致的。例如,这些***通常包括诸如同步或相干高速缓存、相干构架和/或探听逻辑(snoop logic)之类的硬件机构。另外,与以本地存储器为目标的数据访问相比,访问DSM中的共享数据通常涉及显著的延时。这些延时可能是由于将目标数据项迁移到本地存储器并更新对应的目录结构以反映该移动所涉及的步骤而导致的,或者可能是由于高速缓存刷新而导致的并且使维持***中的数据一致性所需的操作无效。
发明内容
在各种实施例中,本文所描述的***可以包括硬件辅助的分布式存储器***(DSM),在该DSM中,分布式共享存储器的不同的软件可配置部分由多个处理器核心中的相应处理器核心控制。在一些实施例中,对于这些共享存储器区域的所有访问都可以通过片上原子事务引擎(ATE)实例的网络来进行。例如,每个核心可以有一个ATE实例,并且所有的ATE实例都可以通过专用的低延时互连矩阵相互通信。
在一些实施例中,在每个处理器流水线内的每个处理器核心或硬件上执行的软件可以被配置为确定分布式应用的给定操作是否应由另一个处理器核心使用远程过程调用(RPC)执行。例如,如果操作的目标是存储器中由不同处理器控制的位置,则关于该操作的信息可以被传递给本地ATE实例。ATE实例可以针对有或没有响应的RPC产生和发布与所述操作相对应的RPC帧。RPC帧可以包括指示操作类型的描述符、所述操作的目标地址以及有效载荷信息(例如,操作的操作数),如果适用的话。如果目标位置由远程处理器核心控制,则本地ATE实例可以将RPC帧发送给与远程处理器核心相关联的ATE实例,该远程处理器核心可以将关于所接收的RPC帧的信息放在其本地接收队列中。如果目标位置由本地处理器核心控制,则本地ATE实例可以将关于RPC的信息放在本地接收队列中以用于后续处理。
在至少一些实施例中,每个ATE实例可以从其本地接收队列检索RPC,并且对它们进行处理(原子地),而不管它们是从其它ATE实例接收的、还是在本地产生的。对于一些操作类型,ATE实例可以使用专用硬件来执行它自己从其本地队列检索的RPC中标识的操作。例如,ATE可以包括用于在没有本地处理器核心的干预的情况下执行一些相对简单的操作(例如,读、写、递增、相加或比较并互换)。对于其它操作类型,ATE实例可以中断其本地处理器核心以执行操作。
在一些实施例中,如果RPC需要响应(例如,如果它是RPCWR),则操作将代表其被执行的处理器核心可以在将操作传递给其本地ATE实例以用于处理之后执行一个或多个其它操作。在某个点(例如,当处理器核心需要响应数据时),它可以发布“wait for event”指令,在该指令中,事件是RPC响应包从与执行操作的远程核心相关联的ATE实例的返回。例如,在一些实施例中,ATE实例可以针对所接收的RPCWR产生RPC响应帧,并且将它返回给起源ATE实例。在一些实施例中,当ATE实例接收到RPC响应帧时,它可以将响应数据返回给其本地处理器核心,或者可以将它写到本地核心期望从中检索它的存储器位置中。
在至少一些实施例中,与全高速缓存相干网络相比,利用ATE网络(如本文所述)的分布式共享存储器***可以是更轻量级的且更不复杂的。例如,通过将操作移动至更靠近它们操作的数据(而不是将数据移动至接近发起这些操作的处理器),本文所描述的***可以实现更高的总体性能,和/或可以比现有的DSM更灵活。
附图说明
图1是例示了用于在分布式计算***中利用原子事务引擎的方法的一个实施例的流程图。
图2是例示了根据至少一些实施例的原子事务引擎(ATE)实例的一个实施例的框图。
图3是例示了用于产生和处理RPC帧的方法的一个实施例的流程图。
图4A和4B是例示了根据至少一些实施例的示例性RPC帧结构的框图。
图5是例示了用于使用软件来确定是否将RPC帧发送给ATE实例的方法的一个实施例的流程图。
图6是例示了用于使用硬件来确定是否将RPC帧发送给ATE实例的方法的一个实施例的流程图。
图7是例示了用于处理ATE实例所接收的RPC帧的方法的一个实施例的流程图。
图8是例示了用于处理对于所接收的RPC请求帧的中断的方法的一个实施例的流程图。
图9是例示了用于在分布式计算***中实现广播或多播RPC的方法的一个实施例的流程图。
图10是例示了根据至少一些实施例的分布式计算***的一部分中的全交叉开关互连(full crossbar interconnect)的使用的框图。
图11是例示了根据至少一些实施例的关于四集群ATE***的示例性连接性的框图。
图12是例示了根据至少一些实施例的包括共享的多联组存储器(multiplebanked memory)并且利用原子事务引擎实例来管理和执行以共享的多联组存储器为目标的操作的***的一部分的框图。
图13例示了根据各种实施例的被配置为实现本文所描述的方法中的至少一些方法的计算节点。
虽然本公开在本文中是以举例的方式针对几个实施例和说明性附图来描述的,但是本领域技术人员将认识到本公开不限于所描述的实施例或附图。应理解,附图及其详细描述并非意图使本公开限于所公开的特定形式,而是相反,本公开涵盖落在如由所附权利要求书限定的精神和范围内的所有修改、等同和替代。本文所使用的任何标题仅仅是用于组织目的,而非意在于限制说明书或权利要求书的范围。如本文所使用的,词语“可以”是以容许的意义(即,意指具有可能性)、而不是强制的意义(即,意指必须)使用的。类似地,词语“包括”、“包含”意指包括但不限于。
具体实施方式
如上面所指出的,在传统的分布式存储器***中,共享数据是要么使用复制策略、要么使用迁移策略分布的。复制策略和迁移策略这两者都涉及将数据移动至更靠近想要对它进行操作的处理器,并且为了维持所有处理节点上的数据一致性,这两个策略都引发大量的开销。在各种实施例中,本文所描述的硬件辅助的分布式存储器***可以在每个个体核心的本地存储器中以及在主***存储器中包括软件可配置的共享存储器区域。在这些***中,对于共享存储器区域的访问可以通过片上原子事务引擎(ATE)实例(例如,每个处理器核心一个AET实例)的网络以及将所有的ATE实例连接在一起的私有互连矩阵。对于其中操作的目标地址落在另一个核心的本地存储器中的操作,每个ATE实例可以向其它ATE实例发布远程过程调用(RPC)。另外,每个ATE实例可以对从其它ATE接收的RPC进行处理。注意,在至少一些实施例中,从直到当前RPC的执行完成为止ATE将不再接受指令(RPC发布的请求)的意义上来说,正被ATE实例处理的RPC可以被认为是封锁指令。
与(通过迁移或复制)移动共享数据以使它更靠近想对它进行操作的处理器的传统DSM相反,本文所描述的***采取如下方法:使共享数据保留在原处,并且使用已经在靠近该数据的位置处的处理能力(要么以本地处理器核心的形式,要么以相关联的ATE实例的形式)来对该数据进行操作。例如,在一些实施例中,每个ATE实例可以管控对分布式共享存储器的相应部分的访问,而不管是哪个处理器想要对驻存在分布式共享存储器的该部分中的数据进行操作。在一些实施例中,每个ATE实例可以提供简单的指令集,并且可以在硬件中对使用这些指令并且以共享存储器的由该ATE实例管控的部分中的地址为目标的RPC执行RPC操作。对于其它操作,ATE可以谋取其本地处理器核心的帮助来执行以共享存储器的由该ATE实例管控的部分中的地址为目标的RPC操作。
在一些实施例中,本文所描述的方法可以缓解移动共享数据的需要,同时仍保证数据一致性。在其它实施例中,尽管可能不能保证数据相干性,但是可以通过ATE实例提供的构造的组合并且通过提供软件遵循的简单规则来显著地降低对硬件实施的数据相干性的需要。例如,这些构造可以用来模拟相干性,并且如果它们按照期望被使用,则所述***可以表现出相干性。注意,在一些实施例中,包括在使用分布式共享存储器存储用于同步(例如,在信号量和互斥量中)或用于消息传递的变量的那些实施例中,该混合方法当与早期的方法相比时可以显著地降低硬件成本(例如,不需要相干高速缓存网络),而软件复杂性仅有略微增加。
如本文更详细地描述的,如果一个处理器想要访问在分布式共享存储器的由另一个处理器控制的部分中的数据,则发起请求的处理器(或者,更具体地说,与发起请求的处理器相关联的ATE实例)可以通过专用的ATE网络将RPC帧发送给控制分布式共享存储器的目标部分的处理器(或者,更具体地说,与目的地处理器相关联的ATE实例),而不是将期望数据移动至更靠近发起请求的处理器。在至少一些实施例中,RPC帧可以在执行数据迁移或者执行高速缓存刷新并且使对复制的数据保持数据一致性所需的操作无效将花费的时间短得多的时间内经过专用的ATE网络。
在一些实施例中,当RPC帧到达目的地处理器时,与目的地处理器相关联的ATE实例可以要么通过该处理器的本地数据存储器(DMEM)、要么通过访问主***存储器(例如,DDR存储器)的数据高速缓存来访问由该处理器控制的共享存储器空间。在一些情况下,ATE实例可以包括允许它独自对一些RPC进行处理(例如,在不中断处理器的情况下)的功能性。在这些情况下,在ATE实例访问作为目标的存储器位置并且执行所接收的RPC帧中指示的操作的同时,处理器可以做其它的工作(例如,执行它自己的指令或者执行它自己的任务)。换句话说,当ATE接收到RPC请求帧时,它可以被配置为确定RPC请求帧中描述的RPC操作是否是它可以用硬件处理(例如,独自地)的事情。如果它可以,则它可以通过它自己的与分布式共享存储器的本地可访问部分(在本文中有时被称为DMEM)或本地数据高速缓存的接口来访问目标地址,对(如RPC请求帧中指定的)数据进行处理,并且将响应送回给原始请求者(或者它的ATE实例),如果需要的话。
在本文所描述的***的一些实施例中,ATE实例可以提供飞速地对共享数据执行简单操作的能力。在这些***中,共享数据的最新副本无需在可以对它执行逻辑、算术或其它操作之前被移到远程核心。相反,存在于该数据附近的处理能力可以用于执行操作,并且可以避免与试图保持高速缓存相干相关联的大量开销。
在至少一些实施例中,ATE实现可以限定RPC操作的框架(其中一些RPC操作在ATE实例内用硬件实现,而其它的RPC操作可以由软件限定和/或可能需要本地处理器核心的动作)。该框架可以允许共享数据在它被发送给发起请求的核心之前***作。换句话说,不是将用于操作的操作数运送到发起请求的核心,而是可以将操作的描述从发起请求的核心发送给控制目标数据的核心。各个RPC可能需要或者可能不需要数据被返回。在一些实施例中,对于一些RPC,作为RPC响应帧的一部分返回的数据可以被存储为新的本地变量的值(例如,存储在特殊用途的寄存器中或者发起请求的核心的本地存储器中)以供进一步的处理。
虽然由ATE硬件自动处理的RPC请求中的一些RPC请求可以是相对简单的操作,但是在一些实施例中,ATE实例可以能够处理更复杂的操作(例如,与将大的消息从一个核心传递给另一个核心相关的操作、由相对简单的操作的组合或序列组成的操作、或ATE实例为了特定功能而已经包括专用硬件的其它操作)。在一些实施例中,ATE实例可以知道具有在特定的RPCID值范围内的RPC标识符(RPCID)的RPC是它可以独自处理(例如,在不中断处理器核心的情况下)的RPC。另一方面,为了对具有位于该范围之外的RPCID值的RPC进行处理,ATE实例可能需要中断本地处理器核心。在这些情况下,本地处理器核心可以采取中断,并且适当地对RPC帧进行处理。在一些实施例中,在本地处理器上执行的软件可以直接地发布RPC,和/或可以对关于是否发布RPC的决策具有控制权。
如上面所指出的,对于共享地址空间的所有访问都可以在ATE私有互连上转出去。这可以帮助减少访问共享数据的延时、同时仍保持硬件成本下降(当与基于高速缓存相干性的DSM相比时)。在这样的实施例中,ATE实例网络可以充当DMEM(或至少DMEM的共享部分)内的共享地址空间的单个接入点。例如,给定核心可以控制共享存储器的特定区域,并且共享存储器的该部分应在它自己的DMEM中。然而,所有其它的处理器核心也可以能够访问共享存储器的该特定区域。在该例子中,可能不希望的是造成在本地核心直接访问其DMEM并修改该位置上的数据时本地ATE实例代表另一个核心正对共享存储器的特定区域中的位置进行操作的情形,因为这将破坏原子性保证(原子性保证在分布式共享存储器***中是重要的)。因此,在一些实施例中,对于共享存储器的特定区域的任何访问,即使是由已经具有通过其DMEM接口、其数据高速缓存接口或任何其它接口对该存储器位置的直接访问权的本地处理器核心进行的任何访问,可能需要请求ATE实例发出RPC帧。在这种情况下,ATE实例可以实际上将RPC帧发送给它自己,指示它想要执行该操作。注意,一般来说,共享存储器区域可以在本地DMEM中或者在主存储器中(在这种情况下,它可以被ATE通过处理器核心的数据高速缓存访问)。因此,在一些情况下,在本文的描述中对于DMEM的引用也适用于数据高速缓存。
如本文更详细地描述的,在ATE实例向它自己发送RPC帧的情况下,ATE实例可以将RPC帧识别为它需要处理的事情,并且可以将它排在本地RPC接收队列中。注意,在至少一些实施例中,操作可能不混合在接收队列中(例如,ATE实例对RPC边界进行操作)。在这样的实施例中,一旦ATE实例开始处理对于特定处理器核心(例如,本地处理器核心或远程处理器核心)的操作,它就可能不能停止并开始为另一个核心做事,直到它完成了它正在对所述特定处理器核心做的事为止。换句话说,ATE实例可以将每个RPC帧看作它好像表示原子事务一样,并且可以在前一个操作完成之前不从RPC接收队列拾取另一个操作。这样,所述***可以保证,如果本地核心试图访问共享存储器的由它控制的部分,则它不能覆写或以其它方式涂改另一个核心可能同时正在访问的数据。
图1中的流程图例示了用于在分布式计算***中利用原子事务引擎的方法的一个实施例。如110处所示,在该例子中,所述方法可以包括将对于分布式共享存储器的各个不同部分的控制分配给分布式计算***中的每个处理器核心。所述方法还可以包括在分布式共享存储器的不同部分上分布用于分布式应用的数据并且开始该应用的执行,如120中所示。
如图1所示,所述方法可以包括处理器核心之一遇到以分布式共享存储器中的地址为目标的操作,如130中所示。如果目标地址由该核心控制(被示为从140肯定退出),所述方法可以包括本地ATE实例或该处理器核心执行操作(如150中所示)。然而,如果目标地址不是由该核心控制(被示为从140否定退出),则所述方法可以包括控制分布式共享存储器的目标部分的处理器核心(或其ATE实例)执行操作(如160中所示)。在任何一种情况下,所述方法可以包括继续分布式应用的执行(例如,不必等待操作被远程处理器核心完成),如170中所示。注意,如图1中的从170到130的虚线所示,当分布式计算***中的任何处理器核心遇到这样的操作时,可以重复130-160中所示的操作。
如上面所指出的,在至少一些实施例中,ATE实例可以充当其本地处理器核心的数据存储器(DMEM)中的共享地址空间以及主***存储器的被标记为共享并且被分配给本地核心的部分的单个接入点,以用于把关。在这样的实施例中,即使本地核心对共享区域具有直接访问权(要么是因为共享区域驻存在其本地DMEM中,要么是通过其数据高速缓存),对于该区域的所有访问都必须通过相关联的ATE实例。在至少一些实施例中,ATE实例可以被给予对于其本地核心的数据高速缓存(在本文中有时被表示为D$)和DMEM的直接访问权,这可以允许它在不中断本地原生处理器核心的情况下对共享数据进行操作。在一些实施例中,取决于DMEM和D$组织,可以使ATE实例与其本地核心的正常执行并行地对共享数据进行操作,这可以提高所述***的总体性能。在一些实施例中,对于所述***中的每个处理器芯片(或其处理器核心)可以有ATE实例,并且这些ATE实例可以通过与正常的总线结构分离的专用低延时互连相互连接(和通信)。在其它实施例中,ATE实例可以通过***互连相互通信。
图2中的框图例示了ATE实例的一个实施例。图2中所示的原子事务引擎(ATE)实例230可以实现本文所描述的用于对分布式共享存储器***中的附近数据执行原子事务(或者管理这些原子事务的性能)的功能性中的一些或全部。ATE实例230可以包括被配置为代表给定的处理器核心实现该功能性中的至少一些的专用电路。如图2中所示,ATE实例230内的帧构造器逻辑/电路200可以从处理器的流水线地址解码级(被示为202)和/或从处理器的流水线指令解码级(被示为204)接收输入。如果流水线检测到它需要对位于共享存储器中的数据项执行简单的操作(例如,加载、存储或递增操作),则帧构造器逻辑/电路200的一个子组件(被示为自动RPC帧构造器+地址转译和目的地核心解析方框210)可以发布RPC。注意,不管目标数据项是否驻存在属于本地处理器核心的存储器位置上,都可以通过ATE实例230来管理该操作。
在一些实施例中,如果流水线检测到它需要对位于共享存储器中的数据项执行简单的操作,则处理器核心可以将关于该操作的信息提供给ATE实例230,该信息包括要对其执行操作的数据项的地址以及对共享存储器中包括目标地址的部分/区域具有控制权的核心的标识符或其它指示。在一些情况下(例如,对于更复杂的操作),处理器核心还可以包括指示有索引的负载的信息或指定加载、存储和/或返回的元素的数量的其它信息。ATE实例230然后可以获取该信息,产生描述符,并且适当地填充描述符的字段(例如,至少部分基于从处理器核心接收的信息),然后将描述符发送给与对共享存储器中包括该目标地址的部分/区域具有控制权的处理器核心相关联的ATE实例。注意,如果共享存储器中包括该目标地址的部分/区域由本地处理器核心控制,则ATE实例230可以实际上将描述符发送给它自己。然而,如果共享存储器中包括该目标地址的部分/区域不是由本地处理器核心控制,则ATE实例230可以通过专用的ATE网络在RPC帧内将描述符(以及任何相关联的有效载荷信息)发送给与控制共享存储器的该部分/区域的处理器核心相关联的ATE实例。
如该例子中所示,当在本地处理器核心上执行的软件发布具有返回/响应的RPC(例如,RPCWR)或没有返回/响应的RPC(RPCNR)时,例如当软件显式地包括远程过程调用时,帧构造器逻辑/电路200的另一个子组件(被示为SW RPC有效载荷提取+帧构造器212)可以被访问。例如,在一些实施例中,处理器核心可以用特殊的RPCWR和RPCNR指令来支持远程过程调用。在这种情况下,子组件212内的逻辑/电路可以组装包括适当形成的描述符(如本文所描述的)和任何相关联的有效载荷信息的RPC帧(基于例如由软件进行的调用中的信息和/或基于帧构造器逻辑/电路200的其它输入),并且ATE实例230可以将描述符发送给与对共享存储器中包括该目标地址的部分/区域具有控制权的处理器核心相关联的ATE实例。如上面所指出的,如果共享存储器中包括该目标地址的部分/区域由本地处理器核心控制,则ATE实例230可以实际上将描述符发送给它自己。然而,如果共享存储器中包括该目标地址的部分/区域不是由本地处理器核心控制,则ATE实例230可以通过专用的ATE网络在RPC帧内将描述符发送给与对共享存储器的该部分/区域具有控制权的处理器核心相关联的ATE实例。
如该例子中所示,ATE实例230可以包括RPC发布/响应逻辑214,RPC发布/响应逻辑214可以包括响应队列,并且被配置为管理ATE实例230和总线接口单元240之间的流量,例如,当ATE实例230将RPC帧发送给其它ATE实例时。在一些情况下,ATE实例230可以将RPC帧发给另一个ATE实例,并且(大约同时)ATE逻辑/电路的另一个部分可以正在对它从与另一个处理器核心相关联的ATE实例接收的RPC帧进行处理。例如,ATE实例230可以与处理器核心0相关联。当试图将RPC请求帧发送给与处理器核心1相关联的ATE实例时,ATE 230可以正在对它先前从与处理器核心1相关联的ATE实例接收的RPC请求帧进行处理。如果先前接收的RPC帧中指定的命令要求向核心1送回响应,则RPC响应帧将遵循与RPC请求帧被从ATE230发送到与处理器核心1相关联的ATE实例的相同路径。换句话说,从ATE 230发送到与处理器核心1相关联的ATE实例的RPC请求帧和RPC响应帧这二者可以穿过RPC发布/响应逻辑214。
在一些实施例中,RPC发布/响应逻辑214可以被配置为管理最后一条数据何时经过RPC发布/响应逻辑214并且使帧保持在一起。在一些实施例中,RPC发布/响应逻辑214还可以被配置为在将各种RPC帧传递给总线接口单元240之前对它们执行一些例行功能。如该例子中所示,如图2中的234处所示,从ATE 230发送到其它ATE实例的RPC请求帧和RPC响应帧这二者是经由全交叉开关互连250(私有ATE互连)发送(通过总线接口单元240的主接口242)的。如图2中所示,总线接口单元240还可以包括(经由全交叉开关互连250)从与其它核心相关联的ATE实例接收ATE请求帧以供ATE实例230处理所通过的从接口244。另外,由其它核心针对ATE实例230发布的RPC请求而产生的RPC响应帧也可以通过从接口244接收。通过从接口244接收的RPC请求帧和RPC响应帧可以被传递给ATE实例230内的RPC接收逻辑216。该RPC接收逻辑216可以被配置为确定所接收的RPC帧是表示RPC请求、还是表示RPC响应,并且将它们转发给ATE实例230的适当的子组件。例如,当RPC响应帧被接收时,响应数据可以被写回到DMEM中的如下位置:在该位置处,它需要被写入以被返回给处理器核心(例如,通过复用器224和DMEM接口220)以使得处理器核心可以继续进行。另一方面,当RPC请求帧被接收时,RPC接收逻辑216可以将RPC请求帧放在RPC接收队列(未示出)中以供后续处理。例如,在一些实施例中,在DMEM的本地核心的部分内可以存在少量存储,从其它处理器核心(或它们的相关联的ATE实例)接收的RPC请求帧在被处理之前被缓冲在该少量存储中。
如图2中所示,ATE实例230可以包括硬件RPC执行单元226,硬件RPC执行单元226可以被配置为执行在所接收的RPC请求帧中指示的操作。例如,在一些实施例中,硬件RPC执行单元226可以被配置为将RPC请求帧拉出RPC接收队列,而且还开始对它们进行解码和处理,并且确定它们应被如何处理。如本文所描述的,硬件RPC执行单元226可以包括用于执行以本地控制的存储器位置及其中存储的数据项为目标的各种相对简单的操作(诸如读、写和递增操作,有和没有返回)。如果硬件RPC执行单元226确定它可以独自处理RPC请求帧(执行RPC请求帧中指示的操作),则它可以这样做。例如,ATE实例230的硬件RPC执行单元226可以提取RPC帧的第一个字,该字可以包括关于RPC帧的描述符。如下面更详细地描述的,描述符可以包含指示RPC的类型(例如,待执行的操作)的信息。通过对描述符进行处理,ATE 230的硬件RPC执行单元226可以确定它是否可以独自继续进行。
在一些实施例中,如果硬件RPC执行单元226不支持RPC请求帧的描述符中指示的(一个或多个)操作,和/或如果硬件RPC执行单元226确定对RPC请求帧进行处理需要软件干预,则它可以对本地处理器核心提出中断,本地处理器核心随后将对RPC请求帧进行处理。ATE实例230的该输出在图2中被示为232。更具体地说,在一些实施例中,响应于这样的中断,处理器核心可以通过发布POP和PEEK指令(被示为ATE实例230的输入208)来访问RPC请求帧的内容。例如,处理器核心可以发布用于将RPC请求帧弹出ATE的接收队列的POP指令。另一方面,如果处理器核心需要返回对于RPC请求的响应,则它可以使用PUSH接口(被示为ATE实例230的输入206)来将响应数据发送给ATE实例230(此后,如上所述,ATE实例230内的RPC发布/响应逻辑214可以在将它发送给目的地ATE实例之前形成适当的响应帧)。
在一些实施例中,当ATE实例230的硬件RPC执行单元226对将由本地处理器核心处理的RPC帧的描述符进行处理时,它还可以将从RPC请求帧(例如,从其描述符)提取的控制信息写到它自己的配置寄存器228中(例如,在中断处理器核心之前),并且处理器核心可以(响应于中断)读取这些寄存器以确定它需要做什么来处理该RPC。例如,配置寄存器中的信息可以指示处理器核心需要从接收队列弹出多少个字以读取整个RPC请求帧,可以指示处理器核心是否需要将响应送回给请求的发起者,并且(如果是这样的话)可以指示处理器核心需要在对应的RPC响应帧中送回多少个字。在一些实施例中,在处理器核心正在对RPC请求帧进行处理时(例如,在它执行RPC请求帧中指示的一个或多个操作时),并且当它通过执行这些操作而产生响应数据时,处理器核心可以使用RPC响应PUSH接口来将响应数据移到ATE实例230以便随后包含在RPC响应帧中。
如图2中所示,被示为与DMEM的接口的逻辑/电路(220)管理ATE实例230和DMEM的本地可访问部分之间的读写流量(被示为236)。例如,该接口可以用于对分布式共享存储器的由本地处理器核心控制的部分和/或可被本地处理器核心访问的其它存储器位置进行读写。类似地,被示为与数据高速缓存的接口的逻辑/电路(222)管理ATE实例230和本地处理器核心的数据高速缓存之间的读写流量(被示为238)。在一些实施例中,分布式共享存储器中将由ATE实例230或本地处理器核心操作的(一个或多个)数据项可以在这两个地方之一中找到。如上面所指出的,在一些实施例中,RPC接收队列也可以驻存在DMEM(未示出)中。在这样的实施例中,对于RPC接收队列的所有访问都可以通过DMEM接口220来进行。注意,将RPC接收队列放在DMEM(其可以包括相对大量的本地存储器)中可以允许软件基于预期或工作负荷来配置该块本地存储器内的RPC接收队列的尺寸。允许ATE实例230缓冲大量RPC帧可以防止整个网络在ATE实例230正在处理RPC请求帧时被停顿。在一些实施例中,可以基于工作负荷来动态地改变RPC接收队列的尺寸。在其它实施例中,软件可以为RPC接收队列分配特定量的空间,并且可以将这传达给ATE实例230,以使得ATE实例230知道它有多少存储器一起工作。再次注意,在一些实施例中,DMEM和ATE实例230之间的接口可以包括相对较快的互连。例如,在一些实施例中,在ATE实例和DMEM之间可以存在直接连接。
在一个实施例中,上述原子事务引擎配置寄存器(其也可以被称为控制和状态寄存器)可以包括下面的表1所示的寄存器中的一个或多个。在其它实施例中,原子事务引擎中可以包括更多的、更少的或不同的控制和状态寄存器。注意,在不同的实施例中,ATE控制和状态寄存器可以按任何次序布置(并且在地址空间中可以是相连安置的或者不相连安置的)。
Figure BDA0003648796460000151
表1.示例性ATE控制和状态寄存器
在一些实施例中,ATE控制和状态寄存器还可以包括用于为ATE接收队列指定DMEM中的起始地址的字段、用于指定接收队列的尺寸(例如,以字为单位)的字段、和/或用于指定当前接收队列中的字的数量的字段(例如,一个字段可以指定接收队列中存在的字的数量,另一个字段可以指定已经从接收队列预提取的字的数量),这些字段中的任何一个或全部可以是软件能配置的以控制各种ATE功能。
在一些实施例中,ATE可以在任何给定时间从接收队列预提取一个或多个字(例如,在一个实施例中,最多两个字)。在一些实施例中,可以按接收队列中的字的数量加上已经从接收队列预提取的字的数量来计算所缓冲的RPC字的总数。在一些实施例中,短RPC接收缓冲器的尺寸可以假定为8个字,这是RPC响应帧的最大尺寸。
在至少一些实施例中,当软件创建用于与没有返回的RPC指令(RPCNR)和具有返回的RPC指令(RPCWR)一起使用的描述符时,它可以填充描述符的各种字段以指定RPC类型标识符(在本文中有时被称为RPCID)、源核心标识符(SRCID)、目的地核心标识符(或DESTID)、有效载荷的长度(例如,以字为单位)、和/或返回有效载荷的长度(例如,字),如果适用的话。在一些实施例中,硬件可以填充SRCID字段(例如,自动地)。
在一些实施例中,特定的RPCID值(例如,在一个实施例中,0-15)可以被预留给以硬件实现且不需要软件支持的RPC。如上所述,可以让处理器核心向它自己发送RPC(例如,DESTID字段可以指示本地处理器核心)。事实上,在一些实施例中,当对共享数据(例如,分布式共享存储器内的任何位置)进行操作时,软件必须使用上述RPC机制来执行操作(而不是直接加载和存储)以便避免相干性问题。
在各种实施例中,中断寄存器可以包括表示以下中的一个或多个的字段:当ATE从ATE接收队列拉出需要被软件服务的RPC帧时发生的中断、当ATE接收队列和预提取缓冲器这二者都变满时发生的中断、或当ATE接收队列和预提取缓冲器这二者都变空时发生的中断。在一些实施例中,这些中断可以通过写入这些字段而被清除。
中断启用寄存器可以包括表示以下中的一个或多个的字段:用于启用当ATE从ATE接收队列拉出需要被软件服务的RPC帧时发生的中断的比特、用于启用当ATE接收队列和预提取缓冲器这二者都变满时发生的中断的比特、或用于启用当ATE接收队列和预提取缓冲器这二者都变空时发生的中断的比特。在一些实施例中,对应的中断可以在这些比特之一被设置时被启用,并且可以在这些比特之一被清除时被掩蔽。
在一些实施例中,当软件在中断寄存器中写入表示当ATE从ATE接收队列拉出需要被软件服务的RPC帧时发生的中断的字段时,硬件可以检查接收队列中的下一个字作为RPC描述符。如果该描述符是基于软件的RPC,则该比特可以在下一个循环中被设置,并且当正在被处理时可能需要被软件显式地清除。如果中断被掩蔽,则软件可能需要轮询该比特以确定软件RPC是否可用。在该例子中,软件可以将1写到中断寄存器中的该字段以清除中断。在该例子中,当软件写入表示当ATE接收队列和预提取缓冲器这二者变满时发生的中断的字段时,硬件可以再次检查接收队列状态。如果队列仍然是满的,则该中断可以在下一个循环中被再次设置。在一些实施例中,软件可以将1写到该字段以清除中断。在该例子中,当软件写入表示当ATE接收队列和预提取缓冲器这二者变空时发生的中断的字段时,硬件可以再次检查接收队列状态。如果队列仍然是空的,则该中断可以在下一个循环中被再次设置。在一些实施例中,软件可以将1写到该字段以清除中断。
在一个示例性实施例中,从每个处理器核心(例如,每个通用或专用处理器核心)的视角来说,可以将数据空间分为三个高级区域:
·作为可高速缓存的主***存储器空间的区域
·作为核心特定的私有空间
·对应于外部的***空间的区域
在该例子中,核心特定的私有空间可以是每个处理器核心独有的。它可能不是外部可见的,也不是除了其相应的处理器核心和对应的ATE实例之外的组件可访问的。
如上面所指出的,与每个处理器核心相关联的ATE实例可以充当用于所述***中的所有共享存储器访问的网关。在各种实施例中,它可以从其本地核心接收RPC发送请求,构造对应的RPC帧,并且将它们发送给各种远程核心(或送回给本地核心)以供处理。如本文所描述的,在一些实施例中,对于共享存储器区域的访问可以由核心以显式RPC指令执行的形式或者由核心流水线基于软件可配置的共享地址解码逻辑/电路隐式地进行。例如,在一些实施例中,一旦本地核心的地址解码级确定操作数是共享存储器位置,RPC就可以被本地核心自动地发布。在一些实施例中,这些自动发布的RPC操作可以限于相对简单的指令,诸如LOAD、STORE、ADD、INC和比较并交换(Compare-and-Swap)。在一些实施例中,ATE实例可以提供小的指令集,该指令集可以被软件用来描述RPC帧的结构及其标识符(例如,其RPCID),以使得ATE硬件自己可以标识并执行该RPC(而不是向本地处理器核心提出RPC中断并请求本地处理器核心用软件来执行RPC)。在一些实施例中,这可以导致***中的总延时降低。
在一些实施例中,RPC也可以在软件控制下通过使用处理器核心的RPC指令之一被显式地发布。在不同的实施例中,这些RPC中的操作的类型的范围可以为从简单的读或写到消息传递。在发布显式RPC指令之前,软件可以将RPC有效载荷组装在其本地DMEM或通用/专用寄存器中,然后可以将指向该位置的指针与其它控制信息一起作为RPC指令的一部分传递给本地ATE实例。RPC指令可以包括描述符,该描述符包含控制信息,诸如RPCID或操作标识符、正被发送的字的数量、和/或响应帧中期望返回的字的数量、目的地核心以及指向早先构造的RPC帧有效载荷的指针。本地ATE实例然后可以通过从DMEM提取有效载荷数据来组装实际的RPC帧,并且可以通过私有的ATE互连网络来发送该帧。
如前面所指出的,处理器核心请求的RPC可以期望或者可以不期望执行请求的操作的远程处理器核心返回数据(例如,它可以是RPCWR或RPCNR)。例如,处理器核心可以发布RPCNR以告诉另一个处理器核心执行发起请求的核心不需要(或不期望)返回值的某个操作。这样的操作可以用于例如创建登记点(check-in-point),其中所述***中的处理器核心之一充当主核心,其它核心(例如,充当从核心)可以周期性地向该核心登记。在该例子中,每一个从核心在它达到某个点时可以向主核心发布指示它已经达到登记点的RPC。该RPC可以执行简单的操作,诸如写到特定的地址位置、或使地址位置的值递增1以指示核心中有多少个已经达到同步点。在该例子中,在将该RPC发送给主核心之后,从核心可以在该点(自它已经达到同步点起)等待。当所有的从核心都已经登记时,主核心可以(向所有从核心)送出另一个RPCNR以指示例如从核心应重新开始执行或者发起新的一组操作的执行。
在一些实施例中,当发起请求的处理器核心需要(或期望接收)一个或多个返回值时,处理器核心可以发布RPCWR以告诉另一个处理器核心对共享数据执行某个操作。在一个例子中,发起请求的核心可能想要执行由另一个核心控制的存储器位置的读取。在这种情况下,发起请求的核心可以将RPCWR发给所述另一个核心,所述另一个核心将读取所述存储器位置,并且在响应RPC帧中将所读取的数据发送回发起请求的核心。在另一个例子中,RPCWR可以用于创建信号量(semaphore)。在该例子中,如果一个核心想要访问共享资源,则它可以将指定比较并交换(CAS)类型操作的RPCWR发给控制指示共享资源是否可用的共享存储器位置(信号量位置)的远程核心。如本文所描述的,ATE实例可以包括用硬件执行这种CAS指令的电路。在该例子中,核心可以将特定值(例如,值1)发给控制指示共享资源是否可用的共享存储器位置的远程核心。如果信号量位置的值指示共享资源可用,则远程核心可以返回某个值(例如,值0或指示共享资源可用的某个其它值)。如果远程核心返回了指示共享资源可用的值,则发起请求的核心可以继续进行。在该例子中,因为CAS指令被用于更新远程核心所控制的共享存储器位置,所以想要访问共享资源的任何其它核心将必须等待(例如,因为信号量位置具有指示资源当前不可用(即,它正被使用)的值)。
在一些实施例中,如果发起请求的处理器期望返回(例如,如果RPC是RPCWR),则与发起请求的处理器相关联的ATE实例还可以捕捉从远程处理器核心回来的RPC响应帧,并且直接将它递送给本地核心的流水线(例如,如果它被停止等待该数据)或者可以将响应数据移到本地DMEM中的当核心发布RPC时该核心指定的位置。
在一些实施例中,如果处理器核心发布具有返回的RPC,则它可以在该时刻停止,等待响应。然而,其它实施例可以利用“wait for event”构造来避免在该时刻停止。在这样的实施例中,在发布RPC事务之后,如果发起请求的核心需要等待响应,则在发布RPC和收回响应之间可以存在有限的时间量(例如,本地ATE实例通过ATE网络将RPC发送到另一个ATE实例、远程ATE实例或远程核心执行RPC中指示的操作、以及远程ATE实例将响应返回给本地ATE实例所花费的时间)。在一些实施例中,发起请求的核心可以在这发生的同时执行一个或多个其它的指令(例如,不依赖于响应数据的指令),而不是等待所有这一切发生。在稍后的某个时刻(例如,在发起请求的核心需要响应的时刻),发起请求的核心可以发布“waitfor event”指令(例如,在发起请求的核心上执行的软件中),并且可以指定与本地或远程ATE实例相关联的事件ID。在该例子中,一旦“wait for event”指令已经被发布,它就可以创建屏障点,核心不会越过该屏障点继续进行直到等待的事件已经发生。在一些实施例中,等待的事件可以是远程ATE已经返回对于先前的RPCWR的响应数据或者本地ATE已经将响应数据写回到发起请求的核心在发布RPC时指向的位置。
图3中的流程图例示了用于产生并且处理RPC帧的方法的一个实施例。如310处所示,在该例子中,所述方法可以包括处理器流水线检测到以分布式共享存储器中的地址为目标的操作并且将关于该操作的信息发送给其本地ATE实例。所述方法可以包括本地ATE实例产生包括该操作的描述以及(如果适用的话)有效载荷信息的RPC帧,如320中所示。注意,取决于操作,RPC帧可以指定具有返回的RPC或没有返回的RPC。
如该例子中所示,如果目标地址由该核心控制(被示为从330肯定退出),所述方法可以包括本地ATE实例将关于所述操作的信息放在本地接收队列中,如335中所示。所述方法还可以包括本地处理器核心(或其ATE实例)将RPC帧作为原子事务进行处理(如340中所示),此后包括所述操作的应用的执行继续进行(如350中所示)。另一方面,如果目标地址不是由该核心控制(被示为从330否定退出),则所述方法可以包括本地ATE实例将RPC帧发送给控制目标地址的处理器的ATE实例以供处理,如355中所示。
如本文所描述的,在一些实施例中,RPC帧可以经由专用的ATE互连从本地ATE实例被发送到其它的ATE实例。如果RPC帧是关于具有返回的RPC的(被示为从360肯定退出),则所述方法可以包括本地处理器核心在期待其ATE实例接收RPC响应时发布“wait forevent”屏障,如365中所示。然而,注意,如果本地处理器核心有不依赖于响应的其它工作要做的话,则它可以在RPC帧被发送给其它ATE实例的时刻和它发布“wait for event”屏障的时刻之间执行一个或多个操作。如该例子中所示,一旦等待事件发生,所述方法就可以包括本地处理器核心检索RPC响应(如370中所示),此后包括所述操作的应用的执行继续进行(如350中所示)。注意,如图3中所示,如果RPC帧是关于没有返回的RPC的(被示为从360否定退出),则在350处执行继续进行之前可能无需等待响应。
图4A和4B例示了根据至少一些实施例的示例性RPC帧结构。更具体地说,图4A例示了示例性RPC请求帧400,图4B例示了示例性RPC响应帧450。在这些例子中,请求帧400包括RPC描述符402(其可以包括本文所描述的示例性描述符信息和/或其它信息中的任何一个或全部)以及数据起始地址404(其可以标识操作的(一个或多个)目标的起始地址),并且可以(可选地)还包括一个或多个有效载荷数据元素(被示为404-410)。注意,在一些情况下,有效载荷数据元素中的一个或多个可以表示地址。在这些例子中,响应帧420包括至少一个响应数据元素(被示为422),并且可以(可选地)包括一个或多个附加的响应数据元素(被示为424-426)。
如前面所指出的,可以直接被ATE实例自己处理的RPC中的一些可以被硬编码(例如,在ATE实例的专用电路中实现),而其它的RPC则可以由本地处理器核心使用一组配置寄存器和由ATE实例提供的小的指令集来编程。在一些实施例中,这可以允许实现相对简单的软件例程,使得它们完全由本地ATE实例处理而无需中断核心。这可以继而降低***的总体延时,并且提高总体***吞吐量(例如,MIPS)。在一个示例性实施例中,可以在ATE实例中用硬件实现的RPC命令可以包括下面的表2中所示的那些。在其它实施例中,在ATE实例中可以用硬件来实现更多的、更少的或不同的RPC命令。
命令 RPCID 描述
DataRead 0 从指定的存储器地址读数据
DataWrite 1 从指定的存储器地址写数据
AtomicAdd 2 将值加到存储器
AtomicAddRtn 3 将值加到存储器,具有返回
CmpAndSwap 4 原子比较并交换
表2.示例性的硬件实现的ATE RPC命令
注意,这些操作的目标地址可以在数据高速缓存中,或者在数据存储器(DMEM)中。在一些实施例中,作为RPC的一部分发送的地址可以被填充零以形成尺寸适当的地址,而不管它们是位于数据高速缓存中,还是位于数据存储器空间中。这些命令中的一些可以将数据返回给RPC发起者(发布RPC命令的处理器核心)。那些响应数据值可以被写到对应的RPC响应帧的有效载荷区域中,从有效载荷区域的第一个字开始。根据至少一些实施例,下面更详细地描述上面列出的示例性命令。
在该例子中,DataRead命令(RPCID=0)可以被用于从存储器读数据并且返回一个或多个数据字。在一些实施例中,DataRead类型的RPC可以要么作为RPCWR被发送,要么作为更短的RPCWRS被发送。用于该命令的有效载荷(即,操作数)可以包括分别指定目标地址的一个或多个字。用于该命令的返回有效载荷可以包括其描述符中指定的字的数量。例如,在一个实施例中,对于RPCWR,返回有效载荷可以包括1-8个字,而对于更短的RPCWRS,返回有效载荷可以包括1-6个字。注意,ATE可以在每次访问之后自动地递增存储器地址,其中地址的递增量取决于有效载荷的尺寸。
在该例子中,DataWrite命令(RPCID=1)可以被用于执行顺序的数据存储器写入。在一些实施例中,DataWrite类型的RPC可以要么作为RPCNR被发送,要么作为更短的RPCNRS被发送。用于该命令的有效载荷(即,操作数)可以包括指定目标地址的一个或多个字以及多达其描述符中指定的字的数量的一个或多个附加字(包含待写入的数据)。例如,在一个实施例中,对于写入1-6个数据项的RPCNR命令,有效载荷可以包括3-8个字,或者对于写入1-4个数据项的更短的RPCNRS命令,有效载荷可以包括3-6个字。因为对于该命令没有返回值,所以描述符可以指示返回有效载荷长度为0。注意,ATE可以在每次访问之后自动地递增存储器地址,其中地址的递增量取决于有效载荷的尺寸。
在该例子中,AtomicAdd命令(RPCID=2)可以被用于使用原子加法或减法运算来改变分布式共享存储器(例如,DMEM)或数据高速缓存(D$)中的值。换句话说,该命令可以被用于从目标存储器位置读取数据值、将32位值加到所读取的内容、并且将所得值写回到相同的存储器位置。在一些实施例中,多达六个这样的修改值可以通过使用该命令被写到存储器。在一些实施例中,AtomicAdd类型的RPC可以要么作为RPCNR被发送,要么作为更短的RPCNRS被发送。用于该命令的有效载荷(即,操作数)可以包括指定目标地址的一个或多个字以及多达其描述符中指定的字的数量的一个或多个附加字(包含待写入的数据)。例如,在一个实施例中,对于写入1-6个数据项的RPCNR命令,有效载荷可以包括3-8个字,或者对于写入1-4个数据项的更短的RPCNRS命令,有效载荷可以包括3-6个字。因为对于该命令没有返回值,所以描述符可以指示返回有效载荷长度为0。注意,ATE可以在每次访问之后自动地递增存储器地址,其中地址的递增量取决于有效载荷的尺寸。
在该例子中,AtomicAddRtn命令(RPCID=3)可以被用于使用原子加法或减法运算来改变分布式共享存储器(例如,DMEM)或数据高速缓存(D$)中的值。换句话说,该命令可以被用于从目标存储器位置读取数据值、将32位值加到所读取的内容、并且将所得值写回到相同的存储器位置。在一些实施例中,有效载荷可以包括多达六个相加值,并且第一个返回值可以作为有效载荷的第一个字被写到相同的地址。在一些实施例中,AtomicAddRtn类型的RPC可以要么作为RPCWR被发送,要么作为更短的RPCWRS被发送。用于该命令的有效载荷(即,操作数)可以包括指定目标地址的一个或多个字以及多达其描述符中指定的字的数量的一个或多个附加字(包含待写入的数据)。例如,在一个实施例中,对于写入1-6个数据项的RPCNR命令,有效载荷可以包括3-8个字,或者对于写入1-4个数据项的更短的RPCNRS命令,有效载荷可以包括3-6个字。在一些实施例中,返回有效载荷长度可以等于返回的加法结果值的数量,该数量也是有效载荷中的相加值的数量。在这种实施例中,描述符可以指示返回有效载荷具有比有效载荷少两个的元素。注意,ATE可以在每次访问之后自动地递增存储器地址,其中地址的递增量取决于有效载荷的尺寸。
在该例子中,CmpAndSwap命令(RPCID=4)可以被用于将存储器值与有效载荷值进行比较、然后基于存储器值与指定的比较值的比较来执行交换操作。整个操作可以被认为是原子的。例如,CmpAndSwap命令可以被用于执行与以下伪码所例示的操作类似的操作:
Figure BDA0003648796460000241
在一些实施例中,CmpAndSwp类型的RPC可以要么作为RPCWR被发送,要么作为更短的RPCWRS被发送。用于该命令的有效载荷(即,操作数)可以包括指定目标地址的一个或多个字,接着是一个或多个比较和交换值对(对于每个比较和交换值对,比较值占据一个字,交换值占据一个字)。例如,如果有效载荷中仅包括单个比较和交换值对,则有效载荷可以包括四个字,但是如果有效载荷中包括三个比较和交换值对,则有效载荷可以包括八个字。在该例子中,对于执行1个、2个或3个比较和交换操作的RPCWR命令,有效载荷可以包括4个、6个或8个字,或者对于执行1个或2个比较和交换操作的更短你的RPCWRS命令,有效载荷可以包括4个或6个字。在该例子中,返回有效载荷长度可以等于比较和交换值对的数量(例如,对于RPCWR命令为1个、2个或3个,对于更短的RPCWRS命令为1个或2个)。注意,ATE可以在每次比较和交换操作之后自动地递增存储器地址,其中地址的递增量取决于有效载荷的尺寸。
在不同的实施例中,确定是否(或何时)发布RPC帧来执行原子事务可以有不同的方式,其中一些方式主要用硬件实现,而其它方式可以用(或结合)在给定节点上执行的软件来实现。图5中的流程图例示了用于使用软件来确定是否向ATE实例发送RPC帧的方法的一个实施例。如图510处所示,在该例子中,所述方法可以包括在分布式计算***中的给定处理器核心上执行的软件遇到以存储器中的地址为目标的操作。如果所述软件确定目标地址是分布式共享存储器中的位置的地址(被示为从520肯定退出),则所述方法可以包括所述软件形成描述符以及(可选地)用于以共享存储器为目标的对应RPC的有效载荷数据,如530中所示。在这种情况下,所述方法还可以包括所述软件进行显式RPC调用(具有或没有返回),该显式RPC调用包括描述符以及(如果适用的话)指向存储器中的有效载荷数据的指针,如540中所示。
另一方面,如果所述软件确定目标地址不是分布式共享存储器中的位置的地址(被示为从520否定退出),则所述方法可以包括所述软件在给定处理器核心上执行操作,如525中所示。在任何一种情况下,所述方法可以包括所述软件在给定处理器核心上继续执行(例如,在处理器核心执行操作之后或者在ATE对RPC进行处理的同时),如550中所示。如从560的肯定退出到520的反馈所示,在该例子中,如果另一个操作以存储器中的地址为目标(被示为从560肯定退出),则所述方法可以包括对每个附加的这种操作重复520-550中所示的操作。
如图5所示并且如上所述,在一些实施例中,在给定处理器核心上执行的软件可以能够确定它是否应进行RPC调用来对共享存储器位置上的数据执行操作。在其它实施例中,可以使用处理器核心内的专用硬件来做出(或支持)这种确定。例如,在一些实施例中,可以在处理器核心中的共享区域解码器逻辑/电路内构建转译表结构,并且流水线逻辑/电路可以能够确定指令是否是共享区域事务。如果是,则可以将它移交给本地ATE实例进行处理,而不是在流水线中促进指令。换句话说,在一些实施例中,可以在每个处理器核心的内部(例如,在地址解码级内)构建地址解码表,该地址解码表确定操作(例如,加载或存储)是否以分布式共享存储器为目标。如果是,则流水线可以通过针对对应的RPC帧将各种控制参数供给本地ATE实例来自动地发起ATE事务,并且本地ATE实例可以将其发送给远程ATE实例(或它自己)以供处理。不管是使用软件还是硬件来确定是否发布RPC,至少对于执行应用的一些较简单的操作,使用ATE实例网络对RPC进行处理可以大大地减少所需的软件干预。
图6中的流程图例示了用于使用硬件来确定是否向ATE实例发送RPC帧的方法的一个实施例。如610处所示,在该例子中,所述方法可以包括在分布式计算***中的给定处理器核心上执行的软件遇到以存储器中的地址为目标的操作。所述方法可以包括处理器核心内的地址解码级将目标地址与地址解码表中的条目进行比较,如620中所示。如果目标地址是分布式共享存储器中的位置的地址(被示为从630肯定退出),则所述方法可以包括在640中处理器流水线自动地将操作参数供给处理器核心内的ATE实例,从而发起ATE事务。
另一方面,如果目标地址不是分布式共享存储器中的位置的地址(被示为从630否定退出),则所述方法可以包括给定处理器核心执行操作,如635中所示。在任何一种情况下,所述方法可以包括继续给定处理器核心上的执行(例如,在处理器核心执行操作之后或者在ATE对RPC进行处理的同时),如650中所示。如从660的肯定退出到620的反馈所示,在该例子中,如果另一个操作以存储器中的地址为目标(被示为从660肯定退出),则所述方法可以包括对每个附加的这种操作重复620-650所示的操作。
如前面所指出的,除了将RPC帧发送给其它ATE实例之外,每个ATE实例还可以服务想要访问由该特定ATE实例管理的共享存储器空间的其它核心发布的RPC帧。在一些实施例中,这些RPC可以经由ATE实例的互连从接口来接收,并且可以在接收缓冲器(例如,位于ATE自己的内部缓冲空间中或者位于如由所述软件通过写到ATE的配置寄存器而指定的在DMEM内部形成的硬件管理的FIFO中的接收缓冲器)中排队以供处理。ATE实例可以随后从该接收队列弹出RPC帧以用于处理(例如,按照它们被接收的顺序,或者根据一些其它的优先级政策或方案)。如图4A中所示并且如本文所描述的,每个RPC请求帧可以包括描述符头部,该描述符头部后面接着是目标存储器位置地址和任何可选的有效载荷字。该描述符可以包含关于RPCID、有效载荷数据的尺寸、将被返回的数据(如果有的话)的量等的信息。如本文所描述的,ATE可以使用描述符中的RPCID信息来确定它是否可以独自地处理并发送对于所接收的RPC的响应(如果被请求的话)或者它是否需要停止并中断本地处理器核心来对RPC进行处理。
在一些实施例中,ATE实例可以监视它的接收队列(其在本文中有时被称为“ATE接收队列”或“RPC接收队列”),并且当RCP出现在队列的顶部时,它可以立即从队列被拉出并且被处理(例如,被执行)。在一些实施例中,ATE实例可以基于RPCID来确定它是否是可以被ATE实例内的硬件执行的RPC或者在处理器核心上执行的软件是否必须执行该RPC。例如,在一个实施例中,范围0-15内的RPCID可以被预留给用硬件执行的操作。如果操作是这种基于硬件的RPC,则它可以被ATE实例执行,ATE实例可以将任何响应数据返回给发起请求的核心的ATE实例(根据需要)。
在该例子中,如果RPC不是硬件RPC(例如,如果其RPCID>15),则ATE可以用信号向本地处理器核心通知中断。用于处理器核心的中断服务例程可以读取RPC描述符寄存器,并且基于RPCID的值,可以调用适当的中断句柄。如前面所提及的,软件可以能够用RPC来传递操作数。这些操作数可以被接收处理器侧的软件通过对ATE接收队列使用PEEK和POP指令来访问。然而,软件可能需要注意不从队列弹出比实际发送的数据多的数据。如上面所指出的,RPC描述符寄存器中的值可以指示有效载荷的尺寸。
在至少一些实施例中,如果RPC要求数据被返回(例如,如果RPC是RCPWR),则软件可以产生该响应数据,并且通过对RPC发布/响应逻辑内的ATE响应队列使用PUSH指令来将它传递给硬件。这里再次重申,软件可能需要注意不推送多于被允许返回的最大数据量的数据。例如,一旦推送到ATE接收队列中的字的数量与描述符中指定的返回有效载荷长度值匹配,ATE实例就可以产生回到始发处理器核心的响应。在一些实施例中,例如,为了最佳性能,软件可以在退出RPC软件中断服务例程之前检查并且执行任何其它的基于软件的RPC。在这样的实施例中,当基于硬件的RPC存在时,或者当队列为空时,软件可以退出RPC软件中断服务例程。
在一些实施例中,如果核心被中断以处理RPC,则它可以通过清除RPC中断状态寄存器来向ATE实例通知它完成了对RPC的处理。ATE实例然后可以将响应数据以RPC响应帧(诸如图4B中所示的RPC响应帧)的形式发送给发起请求的核心。
图7中的流程图例示了用于处理由ATE实例接收的RPC帧的方法的一个实施例。如710处所示,在该例子中,所述方法可以包括分布式计算***中的给定核心的ATE实例从另一个ATE实例或者从给定核心自己接收到ATE帧。如果ATE帧是RPC请求帧(被示为从720肯定退出),则所述方法可以包括ATE实例将RPC请求帧放在接收队列中,如730中所示。在稍后的某个点,所述方法可以包括ATE实例的RPC执行单元从接收队列检索RPC请求帧并且检查其描述符(或其描述符的一部分,比如第一个字),如750中所示。
如果ATE实例(基于检查的描述符或者其部分)确定它自己可以对RPC请求进行处理(被示为从760肯定退出),则所述方法可以包括RPC执行单元将请求作为原子事务进行处理并且(如果适用的话)在ATE帧中产生并返回RPC响应,如780中所示。然而,如果ATE实例(基于检查的描述符或者其一部分)确定它自己不能对RPC请求进行处理(被示为从760否定退出),则所述方法可以包括ATE实例将关于请求的信息放到ATE实例内的一个或多个配置寄存器中并且向处理器核心发布中断以处理RPC请求,如770中所示。图8中的流程图例示了用于处理这种中断的方法的一个实施例。在该例子中,如果ATE帧不是RPC请求(例如,如果它是从RPC请求帧先前被发送到的另一个ATE实例接收的RPC响应帧),则所述方法可以包括ATE实例将返回的响应写到分布式共享存储器以供处理器核心随后检索。这在图7中用720的否定退出和元素740例示。
图8中的流程图例示了用于处理对于接收的RPC请求帧的中断的方法的一个实施例。如810处所示,在该例子中,所述方法可以包括给定处理器核心的ATE实例将关于在其接收队列中的RPC请求的控制信息放到各种配置寄存器中并且向给定处理器核心发布中断。在稍后的某个时刻,所述方法可以包括处理器核心从配置寄存器读取控制信息以确定如何对RPC请求进行处理,如820中所示。例如,在不同的实施例中,控制信息可以指定操作的类型、将从接收队列中的RPC帧读取的字的数量、将包括在响应中的字的数量(如果适用的话)、和/或其它信息。所述方法还可以包括处理器核心使用POP/PEEK接口来从接收队列弹出指定数量的字以完成RPC帧(如830中所示),并且处理器核心将RPC帧作为原子事务进行处理,产生响应数据,如果适用的话(如840中所示)。
如该例子中所示,如果RPC请求是没有返回的RPC请求(被示为从850否定退出),则该RCP请求的处理可以完成,如880中所示。然而,如果RPC请求是具有返回的RPC请求(被示为从850肯定退出),则所述方法可以包括处理器核心使用PUSH接口来将响应数据移到ATE实例,如860中所示。在这种情况下,所述方法还可以包括ATE实例组装响应帧并将它发送给从其接收RPC请求的ATE实例,如870中所示,此后如880中所示,该RCP请求的处理可以完成。
在一些实施例中,可以发布广播RPC操作或多播RPC操作以使得相同的消息或操作请求可以被同时发送给多个处理器核心(例如,用于同步目的、作为信号量、或者在多个处理器核心上发起例程的开始),此后它们可以基本上并行地被每个接收者处理。虽然可能没有所有的接收ATE实例都将完全同时看见并且处理这些RPC的任何保证,但是在至少一些实施例中,可以保证它们都将最终看见并且处理RPC。在一个例子中,发布单个RPC的核心可以对RPC请求进行配置以使得一旦它到达本地ATE实例,ATE实例就可以将对应的RPC帧发布给***中的每个处理器核心或***中的处理器核心的子集。使用该方法,不是在处理器核心上执行的软件必须发布多个个体RPC,本地ATE实例可以自动地处理发送广播或多播操作,这可以减小处理器核心引起的开销。
在一些实施例中,处理器核心发布的广播RPC可以包括被本地ATE实例解释的广播指示符。当这样的请求由处理器核心发布时,ATE实例将向***中的所有的处理器核心发布相同的RPC。在一些实施例中,处理器核心发布的多播RPC可以包括RPC应被多播的指示以及RPC将被发送到的处理器核心的标识符。例如,请求可以包括比特矢量、指向接收者处理器核心的列表的指针、或目标接收者的某个其它的指示符,并且本地ATE实例可以对该信息进行解释,并将RPC发送给被指定为请求的接收者的处理器核心。在使用比特矢量标识接收者核心的实施例中,本地ATE实例可以对该比特矢量进行检查以确定哪些核心应接收RPC,并且当它通过比特矢量工作时,可以将RPC发送给每个核心(例如,一次一个)。在其它实施例中,ATE实例可以首先确定所有的接收者处理器核心,然后可以大致同时地将RPC帧发送给它们全部。例如,在一些实施例中,所述***可以在互连中提供广播功能性以使得RPC帧可以以分支或瀑布的方式广播。
图9中的流程图例示了用于在分布式计算***中实现广播或多播RPC的方法的一个实施例。如910处所示,在该例子中,所述方法可以包括在给定处理器核心上执行的软件遇到以分布式共享存储器中的多个地址为目标的操作,其中每个地址与不同的核心相关联(或者由不同的核心控制)。例如,操作可以是写操作,该写操作充当信号量或将被广播到分布式计算***中的所有处理节点或将被多播到分布式计算***中的一些(但不是所有)处理节点的另一类型的消息。所述方法可以包括所述软件(或处理器流水线内的硬件)向本地ATE实例发送关于操作的信息,包括哪些处理器核心应接收对应的RPC帧的指示,如920中所示。例如,提供给本地ATE实例的信息可以包括RPC应被广播到所有处理器核心的指示或多播操作的目标处理器核心的指示(例如,表示目标核心的比特矢量、指向其元素标识目标核心的列表结构的指针、或接收者处理器核心的另一个标识符)。
如图9中所示,所述方法可以包括本地ATE实例对接收的信息进行解释并且产生包括操作的描述和任何适用的有效载荷信息的RPC帧,如930中所示。如果接收的信息指示该RPC应被广播到分布式计算***中的所有处理器核心(被示为从940肯定退出),则所述方法可以包括本地ATE实例将RPC帧发送给***中的所有处理器核心的ATE实例(例如,连续地或大约同时地),如960中所示。然而,如果该RPC请求意图被多播到分布式计算***中的处理器核心的子集,而不是被广播到它们全部(被示为从940否定退出),则所述方法可以包括本地ATE实例将RPC帧发送给所标识的核心的ATE实例(例如,连续地,或大约同时地,如果互连中支持广播的话),如950中所示。注意,在RPC帧的广播或多播之后,给定处理器(即,发布广播或多播RPC的处理器核心)上的执行可以在其它核心的ATE实例处理给定处理器核心送出的RPC帧的同时继续进行。在一些情况下,如果广播或多播RPC是具有返回的RPC,则给定处理器核心可以随后从接收到RPC帧的每个处理器核心(这在一些情况下可以包括自己)接收(或者从DMEM检索)响应并且对这些响应进行检查。
在至少一些实施例中,不同于传统的DSM中那样,本文所描述的ATE子***可以组合核心之间的消息传递/过程间通信与共享数据访问。例如,为了将消息传递给远程核心,本地核心可以使用RPC构造来将消息作为用于RPC的有效载荷发送(对于送往远程核心的短消息)。可替代地,本地核心可以使用一个或多个ATE硬件写RPC来将消息组装在远程核心的共享存储器区域中,此后它可以发布ATE消息通知RPC(其可以包括消息的地址和尺寸)以向远程核心通知消息准备好被读取。
注意,在各种实施例中,本文所述的用于利用原子事务引擎的硬件和软件机制可以被应用于在单个芯片上实现的并且在同一个芯片上包括多个处理器(每个处理器具有一个或多个处理器核心)的***中。然而,它们可以被用在包括在一个板上的不同处理器芯片上的或者在***中的多个板上的多个处理器(每个处理器具有一个或多个处理器核心)的***中。在这些情况中的任何一种情况下,每个处理器芯片的每个处理器核心可以与不同的ATE实例相关联,并且所有的ATE实例都可以经由专用的ATE网络(其可以被实现为私有的低延时总线)相互连接。
在一些实施例中,ATE网络可以包括互连矩阵组件的一个或多个集群,其中每个集群可以实现全交叉开关互连(诸如图2中所示的全交叉开关互连250)。每个矩阵可以将几个物理上靠近的ATE连接在一起(例如,与同一个芯片上的处理器核心相对应的ATE实例),并且还可以提供与其它这样的片上互连集群的连接路径。该布置可以在允许一个集群内的高带宽连接路径以及到所有其它的集群的较低聚合带宽路径的同时最小化硬件成本。例如,在包括大量核心的一个实施例中,可以将核心分组成多个集群,其中每个集群包括八个处理器核心(以及对应的ATE实例)。
图10是例示了根据至少一些实施例的分布式计算***的一部分中的全交叉开关互连矩阵的使用的框图。更具体地说,图10是例示了***1000的一部分中的互连矩阵1002的使用的框图。在该例子中,互连矩阵1002将单个集群内的n个ATE实例的ATE主接口0-n(在图10中被示为元件1004-1014)和ATE从接口0-n(被示为1016-1026)连接在一起。在一些实施例中,主接口1004-1014中的每个可以类似于图2所示的主接口242,并且从接口1016-1026中的每个可以类似于图2所示的从接口244。
在该例子中,互连矩阵1002可以在n个ATE实例的这个集群内具有全交叉开关连接性。另外,如果由互连矩阵1002连接的n个ATE实例中的一个ATE实例想要访问该集群外部的ATE实例(例如,将RPC请求帧或RPC响应帧发送给ATE实例的另一个集群中的ATE实例),则它可以通过互连矩阵1002的接口端口(IS0-ISn)之一(被示为主接口1050)与远程ATE实例(或者,更具体地说,用于远程ATE实例连接到的集群的互连矩阵)进行通信。更具体地说,它可以通过主接口1040之一将RPC请求帧或RPC响应帧发送给用于另一个这样的集群的互连矩阵的从接口。另一个互连矩阵的从接口可以类似于图10所示的互连矩阵1002的从接口1050。类似地,该集群中的n个ATE实例中的任何一个ATE实例都可以通过互连矩阵1002的从接口1040之一从远程ATE实例(不同集群中的ATE实例)接收RPC请求帧或RPC响应帧。换句话说,在该例子中,ATE主接口M0-Mn可以连接到互连矩阵1002的从端口,并且互连矩阵1002的主端口可以连接到ATE从端口S0-Sn。一般来说,互连矩阵1002可以从本地ATE实例(同一个集群内的一个)的主接口和/或另一个集群的类似的全交叉开关互连的主接口接收RPC帧,并且可以向本地ATE接口的从接口(在同一个集群内的一个)和/或另一个集群的类似的全交叉开关互连的从接口送出RPC帧。
如该例子中所示,互连矩阵1002可以包括多个仲裁器,诸如仲裁器1030和仲裁器1052。这些仲裁器可以被用于在可以在任何给定时间试图将RPC帧发给另一个处理器核心(或者其ATE实例)的多个处理器核心(或者其ATE实例)之间选择。例如,在每个集群中包括八个处理器核心的***中,可能的是,这些核心中的七个可能试图将向同一个(第八个)核心发送东西。在一些实施例中,甚至可能的是所有八个核心都向一个核心发送东西(例如,如果ATE试图向它自己发送东西)。在这些情况中的任何一种情况下,仲裁器可以被配置为确定处理器核心能够将它们的RPC帧递送给ATE实例中的给定一个的次序。在一些实施例中,这些仲裁器可以被配置为当来自特定核心的每个给定RPC帧通过互连矩阵1002时试图保持该帧完整(例如,阻止RPC帧混合)。通过避免RPC帧之间的混合和相互作用,每个RPC帧可以作为连续的原子块被处理。注意,在一些实施例中,可以在不必经过互连的情况下使ATE向它自己发送东西。然而,在其它实施例中,即使目的地是ATE自己,也可能要求每个ATE通过互连发送所有的RPC。
图11是例示了根据至少一些实施例的用于四集群ATE***的示例连接性的框图。在该例子中,每个集群具有全交叉开关互连,诸如图10中所示的互连矩阵1002,并且这些互连矩阵通过主接口和从接口端口相互通信以提供所有对所有的连接性(all-to-allconnectivity)。更具体地说,四集群ATE***1100包括四个互连集群0-3(在图11中被示为元素1102、1104、1106和1008),其中每个集群均包括互连矩阵。在该例子中,除了用于在集群内的ATE实例之间交换消息的主接口和从接口之外,每个互连矩阵还包括三个矩阵间主接口(IM0-IM2)和三个矩阵间从接口(IS0-IS2)。
例如,总线1101可以在互连集群0(1102)和互连集群1(1104)的主接口和从接口之间传载消息,以为了这些集群内的ATE实例的利益。类似地,总线1103可以在互连集群0(1102)和互连集群3(1108)的主接口和从接口之间传载消息;总线1105可以在互连集群1(1104)和互连集群2(1106)的主接口和从接口之间传载消息;总线1107可以在互连集群2(1106)和互连集群3(1108)的主接口和从接口之间传载消息;总线1109可以在互连集群0(1102)和互连集群2(1106)的主接口和从接口之间传载消息;总线1110可以在互连集群1(1104)和互连集群3(1108)的主接口和从接口之间传载消息。
注意,虽然在几个例子中,ATE实例被描述为与作为FIFO队列的接收队列一起工作(或者包括作为FIFO队列的接收队列),但是在其它实施例中,接收队列可以具有不同的结构或排序方案。例如,在一些实施例中,ATE实例可以针对它们接收的RPC维护多个队列,并且可以基于它们从其被接收的核心来将RPC放在各个接收队列上。在一些实施例中,可以按基于它们从其被接收的核心的次序来对放在一个或多个接收队列中的RPC进行处理。在一些这样的实施例中,ATE实例可以向来自不同核心的RPC给予不同的优先级。在其它实施例中,对于每个源处理器或者对于源处理器集合可以存在多个接收队列,其中每个接收队列存储具有类似优先级的RPC。例如,对于高优先级RPC可以有一个接收队列,对于低优先级RPC可以有另一个接收队列。在其它实施例中,可以实现用于将RPC放在不同的接收队列中和/或用于确定它们将被处理的次序的其它方案。
一般来说,本文所描述的ATE子***可以允许共享数据保留在本地的低访问延时的数据存储器中,而不是将它移到高延时的(并且可能负荷繁重的)主***存储器(比如DDR存储器)。另外,在一些实施例中,本文所描述的ATE子***可以允许对共享区域的尺寸有细粒度的控制,并且该尺寸可以在运行时期间被软件动态地配置。
示例***
如本文所描述的用于利用原子事务引擎的技术可以进一步通过包括多联组存储器的示例***来例示。在各种实施例中,这样的***可以包括多个请求者(例如,一个或多个通用处理器核心或专用处理器核心、一个或多个直接存储器存取(DMA)控制器、一个或多个ATE实例(诸如本文所描述的那些)、网络接口组件和/或***设备),其中每个请求者可以不时请求访问一个或多个存储器组以便执行任务。在各种实施例中,如本文所描述的,多联组存储器可以被配置为交织存储器或非交织存储器,并且存储器分配组件可以被配置为仲裁对于多联组存储器内的各个组的访问。在一个例子中,所述***内的多个子***中的每个子***可以包括执行用于查询处理的软件的低功率处理器核心。在该例子中,查询处理可以是可并行的任务,并且在所述***中可以有多个处理器核心,每个处理器核心对数据的独立分区(例如,分布式共享存储器的由处理器核心控制的部分中的数据)执行相同的代码。
图12是例示了根据至少一些实施例的包括共享的多联组存储器的***的一部分的框图,该***利用原子事务引擎实例来管理并且执行以共享的多联组存储器为目标的操作。在该例子中,除了别的之外,所述***的该部分(被示为子***1200)包括在多个请求者之间共享的并且可以被统称为DMEM的四个存储器组(被示为存储器组1210a-1210d)、存储器分配/仲裁组件1220(其可以是流水线型仲裁器)、以及存储器接口1230(除了别的之外,其可以包括和/或执行数据总线、时钟信号、字地址选择、芯片选择、行/列选择和/或组选择的功能)。在该例子中,对于共享存储器组1210的潜在请求者包括多个DMA组件/控制器1250、通用或专用核心(被示为处理器核心1240)、与处理器核心1240相关联的ATE实例1270以及可以是类似的或不同的组件类型的一个或多个其它的请求者1260。如本文所描述的,ATE实例1270可以实现消息传递接口(例如,消息可以在处理器核心和对应的直接存取存储器之间或者在两个处理器核心之间传递通过的消息传递接口)。
在该例子中,DMA组件/控制器1250中的每个可以是被配置为预加载存储器组1210a-1210d中具有处理器核心1240想要操作的数据的特定存储器组的DMA引擎。一旦数据已经被预加载,DMA引擎就可以告诉处理器核心它可以继续对该数据进行操作。当处理器核心完成对数据的操作时,它可以告诉DMA引擎,此后DMS引擎可以被配置为从DMEM卸载(一个或多个)结果。在该例子中,处理器核心1240可以是专用核心(例如,数据库处理器),其具有所述***内的特殊状态和/或就对于DMEM资源的请求来说比其它请求者(例如,DMA组件/控制器1250、ATE实例1270和/或其它请求者1260)中的一个或多个更高的优先级。注意,在一些实施例中,存储器接口1230和/或存储器分配/仲裁组件1220可以包括一个或多个请求缓冲器,这些请求缓冲器可以被配置为保持对于DMEM资源的请求,直到它们已经被存储器分配/仲裁组件1220处理和/或行事(例如,通过授予或拒绝请求)。在一些实施例中,ATE实例1270可以与处理器核心1240相关联,并且处理器核心1240可以控制DMEM内的存储器位置的一部分。如本文所描述的,ATE实例1270可以经由专用的低延时ATE互连与其它ATE实例(例如,单独的子***中的ATE实例)通信。
在该例子中,并非所有的请求者都可以能够将请求引导至所有的存储器组1210。例如,DMA组件/控制器1250中的每个都可以与存储器组1210a-1210d中的相应的一个相关联,并且可以不是对于存储器组1210a-1210d中的任何其它存储器组的潜在请求者。然而,存储器分配/仲裁组件1220可以被配置为基于从(或代表)处理器核心1240、ATE实例1270以及其它请求者1260中的一些或全部接收的资源请求中指定的地址来将这些请求引导至任何给定组。因此,对于存储器组1210a-1210d中的每个,可以存在多个请求者,包括处理器核心1240、DMA组件/控制器1250中的一个或多个(其中每个可以是对于存储器组1210a-1210d中的单独一个存储器组的请求者)、ATE实例1270以及其它请求者1260中的一个或多个。注意,在一些实施例中,处理器核心1240可以能够提交要求访问存储器组1210a-1210d中的单独一个存储器组的32位请求或要求访问存储器组1210a-1210d中的两个存储器组的64位请求。
在该例子中,从逻辑观点来讲,每个存储器组可以被存储器分配/仲裁组件1220独立地处理,并且每个组可能不知道其它组。这里,对于可以请求多个组的请求者,存储器分配/仲裁组件可以使用每个请求中指定的地址来将它引导至适当的存储器组。在一些实施例中,ATE实例1270可以被配置为对由处理器核心1240发布的被引导至存储器组1210(或者其部分)的RPC或者从代表希望访问存储器组1210(或者其部分)的远程处理器核心的另一个ATE实例(未示出)接收的RPC进行处理。
图13例示了根据各种实施例的被配置为实现本文所描述的方法中的一些或全部的计算节点。计算节点1300可以是各种类型的设备中的任何一个,包括但不限于:个人计算机***、台式计算机、膝上型或笔记本计算机、大型计算机***、手持计算机、工作站、网络计算机、消费者设备、应用服务器、存储设备、***设备(诸如开关、调制解调器、路由器等)、或者一般来说任何类型的计算设备。
如本文所描述的用于利用原子事务引擎(或者其实例)的机制的功能性中的一些可以被提供为计算机程序产品或软件(或者被计算机程序产品或软件调用),计算机程序产品或软件可以包括其上存储有指令的非暂时性计算机可读存储介质,所述指令可以被用于将计算机***(或其它电子设备)编程为执行根据各种实施例的过程。计算机可读存储介质可以包括用于以机器(例如,计算机)可读的形式(例如,软件、处理应用)存储信息的任何机制。机器可读存储介质可以包括但不限于:磁性存储介质(例如,软盘);光学存储介质(例如,CD-ROM);磁光存储介质;只读存储器(ROM);随机存取存储器(RAM);可擦除可编程存储器(例如,EPROM和EEPROM);闪存;适合于存储程序指令的电气或其它类型的介质。另外,程序指令可以使用光学、声学或其它形式的传播信号(例如,载波、红外信号、数字信号等)来传送。
在各种实施例中,计算节点1300可以包括一个或多个处理器1370;每个处理器1370可以包括多个核心,其中任何一个核心可以是单线程或多线程。例如,多个处理器核心可以被包括在单个处理器芯片(例如,单个处理器1370)中,并且多个处理器芯片可以被包括在CPU板上,其中的两个或更多个可以被包括在计算节点1300中。在各种实施例中,每个处理器1370可以包括高速缓存层级1375。例如,每个处理器1370(或处理器芯片)可以包括一个或多个本地高速缓存(例如,每个处理器核心一个L1高速缓存和/或被单个处理器芯片上的多个处理器核心共享的一个或多个高速缓存,诸如L2高速缓存和/或末级高速缓存)。如该例子中所示,计算节点1300可以包括存储器控制器1348和/或网络接口1346。计算节点1300还可以包括一个或多个共享资源1342、一个或多个ATE实例1355(例如,每个处理器核心一个)、一个或多个其它的请求者1344、以及共享资源仲裁器1380(在不同的实施例中,其可以是流水线型仲裁器或非流水线型仲裁器)。在各种实施例中,处理器1370中的一个或多个可以是(或包括)专用处理器核心,诸如本文所描述的数据库核心,并且处理器1370中的任何一个或全部可以是对于计算节点1300的各个共享资源1342和/或对于共享存储器位置1335的请求者。在一些实施例中,共享存储器位置1335可以包括诸如上述DMEM之类的多联组存储器,处理器1370、ATE实例1355和/或其它请求者1344中的任何一个或多个可以请求对于该多联组存储器的访问。ATE 1355可以被配置为实现本文所描述的用于控制并且执行从其它ATE实例1355和/或处理器1370接收的对于共享存储器位置1335的访问的技术中的一些或全部。仲裁器1380可以被配置为控制从ATE实例1355或其它请求者1344和/或处理器1370中的多个接收的对于其它共享资源1342的访问。
如图13中所示,计算节点1300还可以包括或具有对一个或多个持久性存储设备1350(例如,计算节点1300外部的、但是可被计算节点1300访问的光学储存器、磁性储存器、硬盘驱动器、带驱动器、固态存储器等)以及一个或多个***存储器1310(例如,高速缓存、SRAM、DRAM、RDRAM、EDO RAM、DDR 10RAM、SDRAM、Rambus RAM、EEPROM等)的访问权。在一些实施例中,***存储器1310可以存储用于处理器(一个或多个)1370可以在本地对其进行操作(例如,在一些情况下,通过使用如本文所描述的那样产生的RPC)的应用的数据集的一部分。例如,计算节点1300上的存储器1310可以包括用于数据结构的本地储存器(例如,在私有存储器位置1330或共享存储器位置1335内),数据结构的元素可以是应用的各种功能的目标。在一些实施例中,存储器1310可以包括持久性存储(例如,用于存储对于给定的计算节点或给定的一组配置寄存器固定的固件或配置参数值)。在其它实施例中,存储在***存储器1300中的配置寄存器或配置参数可以包括图13中未例示的更少的或附加的组件(例如,视频卡、音频卡、附加的网络接口、***设备、网络接口(诸如ATM接口、以太网接口、帧中继接口)等)。
在该例子中,一个或多个处理器1370、存储器控制器1348(其可以提供对于存储装置1350的访问)、共享资源1342、ATE实例1355、其它请求者1344、仲裁器1380、网络接口1346以及***存储器1310可以耦合到***互连1340。***存储器1310中的一个或多个可以包含程序指令1320。程序指令1320可以是可执行为实现一个或多个应用1322(其可以包括访问共享存储器以便执行其功能的应用的全部或一部分)、共享库1324或操作***1326。程序指令1320可以用平台原生二进制、任何解释语言(诸如JavaTM字节代码)编码,或者用任何其它的语言(诸如C/C++、JavaTM等)编码,或者用它们的任何组合编码。程序指令1320可以包括如本文所描述的用于执行各种RPC或发起各种RPC的执行的功能、操作和/或其它过程。在各种实施例中,这样的支持和功能可以存在于共享库1324、操作***1326或应用1322中的一个或多个中。***存储器1310可以进一步包括其中可以存储数据(包括用于应用1322的数据集的部分和/或各种配置参数值)的私有存储器位置1330和/或共享存储器位置1335。例如,在各种实施例中,私有存储器位置1330和/或共享存储器位置1335可以存储可访问来同时执行线程、过程或事务的数据。另外,***存储器1310和/或(一个或多个)处理器1370的高速缓存中的任何一个可以在各种时间存储已经被(或者代表)在计算节点1300上执行的应用从***存储器1310之一和/或从存储装置1350提取(或预提取)的数据。注意,***存储器1310和/或(一个或多个)处理器1370的高速缓存中的任何一个可以在各种时间存储可用于实现本文所描述的技术的任何其它数据,其中一些可以包括可由程序员或用户配置的值。
尽管已经相当详细地描述了上面的实施例,但是一旦上面的公开内容被充分领会,许多变型和修改对于本领域技术人员就将变得显而易见。例如,尽管许多实施例是依照特定类型的存储器、处理器核心和/或请求者描述的,但是应注意,本文所公开的用于利用原子事务引擎(或者其实例)的技术和机制可以适用于其中多个处理器对共享存储器进行操作的其它上下文中。所附权利要求意在被解释为包含所有这样的变型和修改。

Claims (20)

1.一种方法,包括:
在多个处理器核心中的处理器核心上执行指令,其中,各个处理器核心经由存储器接口耦合到原子事务引擎实例和不同于所述原子事务引擎实例的存储器仲裁组件,所述执行包括:
识别所述指令包括以分布式随机存取存储器中的位置作为目标的访问操作;
响应于所述识别,经由相应的存储器接口向相应的原子事务引擎实例发送用于所述访问操作的参数;
通过所述原子事务引擎实例基于接收到的参数来确定所述分布式共享随机存取存储器中的作为目标的位置由另一原子事务引擎实例控制,并且响应于所述确定:
通过所述原子事务引擎实例经由互连向所述另一原子事务引擎实例发送执行所述访问操作的请求;
通过所述另一原子事务引擎实例执行所述访问操作,或者通过所述另一原子事务引擎实例发起所述多个处理器核心中的另一处理器核心对所述访问操作的执行,其中,所述执行包括经由所述另一处理器核心的相应的存储器仲裁组件访问存储器。
2.根据权利要求1所述的方法,其中,所述确定进一步包括:
在所述处理器核心上执行附加指令;或
通过所述处理器核心内的流水线电路确定所述分布式共享随机存取存储器的作为目标的位置受另一原子事务引擎实例控制。
3.根据权利要求1所述的方法,进一步包括:
通过所述原子事务引擎实例从所述另一原子事务引擎实例接收对于所述请求的响应数据;以及响应于所述接收:
通过所述原子事务引擎实例向所述处理器核心返回所述响应数据;或
通过所述原子事务引擎实例将所述响应数据写到所述处理器核心期望从中检索响应数据的存储器中的位置。
4.根据权利要求1所述的方法,
其中,所述访问操作以分布式共享存储器的多个部分作为目标,每个部分受耦合到所述多个处理器核心中的不同处理器核心的原子事务引擎实例控制;
其中,发送执行所述访问操作的请求包括向耦合到所述多个处理器核心中的不同处理器核心的相应的原子事务引擎实例发送请求;并且
其中,执行所述访问操作包括执行所述访问操作或者发起耦合到所述多个处理器核心中的不同处理器核心的相应的原子事务引擎实例对所述访问操作的执行。
5.根据权利要求1所述的方法,
其中,通过所述另一原子事务引擎实例执行所述访问操作,或者通过所述另一原子事务引擎实例发起所述另一处理器核心对所述访问操作的执行包括:
确定在没有所述另一处理器核心的干预的情况下所述访问操作是否能被所述另一原子事务引擎实例内的电路执行;
响应于确定在没有所述另一处理器核心的干预的情况下所述访问操作能被所述另一原子事务引擎实例内的电路执行,通过所述另一原子事务引擎实例执行所述访问操作;以及
响应于确定在没有所述另一处理器核心的干预的情况下所述访问操作不能被所述另一原子事务引擎实例内的电路执行,通过所述另一原子事务引擎实例发起所述多个处理器核心中的另一处理器核心对所述访问操作的执行。
6.根据权利要求1所述的方法,
其中,通过所述另一原子事务引擎实例发起所述多个处理器核心中的另一处理器核心对所述访问操作的执行包括:
将关于所述访问操作的信息写到所述另一处理器核心能访问的一个或多个存储位置;以及
向所述另一处理器核心发布指示所述访问操作应被所述另一处理器核心执行的中断。
7.一种***,包括:
多个处理器核心,每个处理器核心经由存储器接口耦合到原子事务引擎实例和不同于所述原子事务引擎实例的存储器仲裁组件;
其中,所述多个处理器核心中的处理器核心被配置为执行分布式应用的指令,其中,为了执行所述指令,所述处理器核心被配置为:
识别所述指令包括以分布式随机存取存储器中的位置作为目标的访问操作;以及
响应于所述识别,经由相应的存储器接口向相应的原子事务引擎实例发送用于所述访问操作的参数;
其中,所述原子事务引擎实例被配置为:
基于接收到的参数,确定所述分布式共享随机存取存储器中的作为目标的位置由另一原子事务引擎实例控制;以及
响应于所述确定,经由互连向所述另一原子事务引擎实例发送执行所述访问操作的请求;并且
其中,所述另一原子事务引擎实例被配置为:
经由互连从所述原子事务引擎实例接收执行所述访问操作的请求;以及
执行所述访问操作或发起所述多个处理器核心中的另一处理器核心对所述访问操作的执行,所述执行包括经由所述另一处理器核心的相应的存储器仲裁组件访问存储器。
8.根据权利要求7所述的***,其中,在执行所述访问操作期间,所述另一原子事务引擎实例被配置为收集与被标识的操作的执行相关联的响应数据。
9.根据权利要求7所述的***,
其中,所述另一原子事务引擎实例包括被配置为执行多种操作类型的访问操作的电路;并且
其中,为了确定在没有所述另一处理器核心的干预的情况下所述访问操作是否能被所述另一原子事务引擎实例内的电路执行,所述另一原子事务引擎实例被配置为确定所述访问操作的类型是否是能被所述另一原子事务引擎实例内的电路执行的所述多种操作类型之一。
10.根据权利要求9所述的***,其中,所述访问操作包括由接收到的请求中的信息标识的一系列操作,其中所述一系列操作中的每个操作是能被所述另一原子事务引擎实例内的电路执行的操作类型。
11.根据权利要求7所述的***,
其中,所述另一原子事务引擎实例被配置为响应于确定在没有所述另一处理器核心的干预的情况下所述访问操作不能被所述另一原子事务引擎实例内的电路执行,发起所述另一处理器核心对所述访问操作的执行;并且
其中,为了发起所述另一处理器核心对所述访问操作的执行,所述一个原子事务引擎实例被配置为:
将关于所述访问操作的信息写到能被所述另一处理器核心访问的一个或多个存储位置中;以及
向所述另一处理器核心发布指示所述访问操作应由所述另一处理器核心执行的中断。
12.根据权利要求11所述的***,其中,响应于所述中断,所述另一处理器核心被配置为执行所述访问操作。
13.根据权利要求7所述的***,其中,所述另一原子事务引擎实例被进一步配置为:
产生与所述访问操作的执行相关联的响应;以及
将所述响应返回给所述原子事务引擎实例。
14.一种***,包括:
多个处理器核心,每个处理器核心经由存储器接口耦合到原子事务引擎实例和不同于所述原子事务引擎实例的存储器仲裁组件;以及
分布式共享存储器,其中所述多个处理器核心中的每个处理器核心控制所述分布式共享存储器的相应部分;
其中,耦合到所述多个处理器核心中的处理器核心的原子事务引擎实例包括被配置为执行以下操作的电路:
从所述原子事务引擎实例本地的接收队列检索请求,其中,所述请求标识以所述分布式共享存储器中由耦合到所述原子事务引擎实例的处理器核心控制的位置作为目标的操作;
执行被标识的操作,所述执行包括经由耦合到所述原子事务引擎实例的处理器核心的相应的存储器仲裁组件对存储器的访问。
15.根据权利要求14所述的***,其中,所述请求是由另一原子事务引擎实例代表所述多个处理器核心中耦合到所述另一原子事务引擎实例的处理器核心产生的,并且被所述另一原子事务引擎实例传送给所述原子事务引擎实例。
16.根据权利要求14所述的***,其中,所述请求是由所述原子事务引擎实例代表耦合到所述原子事务引擎实例的处理器核心产生的,并且被所述原子事务引擎实例放在所述接收队列中。
17.根据权利要求14所述的***,
其中,所述接收队列是在所述原子事务引擎实例本地的多个接收队列之一;并且
其中,所述多个接收队列中的每个接收队列存储从所述多个原子事务引擎实例中的各个不同的原子事务引擎实例接收的请求,或者存储包括不同类型的或具有不同优先级的操作的请求。
18.根据权利要求14所述的***,
其中,耦合到所述多个处理器核心中的相应处理器核心的原子事务引擎实例经由专用的低延时互连相互通信。
19.根据权利要求14所述的***,
其中,所述***包括处理器核心的两个或更多个集群,每个集群包括多个处理器核心和相应的交叉开关,与所述多个处理器核心中的每个处理器核心相关联的相应原子事务实例经由所述交叉开关相互通信;并且
其中,耦合到每个集群中的处理器核心的相应原子事务实例经由相应的交叉开关之间的互连和耦合到其它集群中的处理器核心的原子事务实例进行通信。
20.根据权利要求14所述的***,
其中,耦合到所述原子事务引擎实例的处理器核心包括地址解码电路,该地址解码电路被配置为确定操作是否以所述分布式共享存储器中的位置作为目标;并且
其中,耦合到所述原子事务引擎实例的处理器核心被配置为:
在分布式应用的执行期间,确定所述分布式应用的操作以所述分布式共享存储器中的位置作为目标;以及
响应于确定所述分布式应用的操作以所述分布式共享存储器中的位置作为目标:
制止在耦合到所述原子事务引擎实例的处理器核心的流水线电路内使所述操作前进;以及
将关于所述分布式应用的操作的信息提供给能用于对所述分布式应用的操作进行处理的所述原子事务引擎实例。
CN202210542976.6A 2015-09-23 2016-09-21 片上原子事务引擎 Pending CN114756502A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14/863,354 US10732865B2 (en) 2015-09-23 2015-09-23 Distributed shared memory using interconnected atomic transaction engines at respective memory interfaces
US14/863,354 2015-09-23
PCT/US2016/052968 WO2017053488A1 (en) 2015-09-23 2016-09-21 On-chip atomic transaction engine
CN201680055397.1A CN108027804B (zh) 2015-09-23 2016-09-21 片上原子事务引擎

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201680055397.1A Division CN108027804B (zh) 2015-09-23 2016-09-21 片上原子事务引擎

Publications (1)

Publication Number Publication Date
CN114756502A true CN114756502A (zh) 2022-07-15

Family

ID=57124116

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202210542976.6A Pending CN114756502A (zh) 2015-09-23 2016-09-21 片上原子事务引擎
CN201680055397.1A Active CN108027804B (zh) 2015-09-23 2016-09-21 片上原子事务引擎

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201680055397.1A Active CN108027804B (zh) 2015-09-23 2016-09-21 片上原子事务引擎

Country Status (4)

Country Link
US (4) US10732865B2 (zh)
EP (1) EP3353673B1 (zh)
CN (2) CN114756502A (zh)
WO (1) WO2017053488A1 (zh)

Families Citing this family (134)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10732865B2 (en) 2015-09-23 2020-08-04 Oracle International Corporation Distributed shared memory using interconnected atomic transaction engines at respective memory interfaces
US10706447B2 (en) 2016-04-01 2020-07-07 OneTrust, LLC Data processing systems and communication systems and methods for the efficient generation of privacy risk assessments
US11004125B2 (en) 2016-04-01 2021-05-11 OneTrust, LLC Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design
US20220164840A1 (en) 2016-04-01 2022-05-26 OneTrust, LLC Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design
US11244367B2 (en) 2016-04-01 2022-02-08 OneTrust, LLC Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design
US11636171B2 (en) 2016-06-10 2023-04-25 OneTrust, LLC Data processing user interface monitoring systems and related methods
US11277448B2 (en) 2016-06-10 2022-03-15 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11416590B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11520928B2 (en) 2016-06-10 2022-12-06 OneTrust, LLC Data processing systems for generating personal data receipts and related methods
US10997315B2 (en) 2016-06-10 2021-05-04 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US10885485B2 (en) 2016-06-10 2021-01-05 OneTrust, LLC Privacy management systems and methods
US11301796B2 (en) 2016-06-10 2022-04-12 OneTrust, LLC Data processing systems and methods for customizing privacy training
US10585968B2 (en) 2016-06-10 2020-03-10 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US10592648B2 (en) 2016-06-10 2020-03-17 OneTrust, LLC Consent receipt management systems and related methods
US11438386B2 (en) 2016-06-10 2022-09-06 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11416109B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Automated data processing systems and methods for automatically processing data subject access requests using a chatbot
US10783256B2 (en) 2016-06-10 2020-09-22 OneTrust, LLC Data processing systems for data transfer risk identification and related methods
US10242228B2 (en) 2016-06-10 2019-03-26 OneTrust, LLC Data processing systems for measuring privacy maturity within an organization
US11157600B2 (en) 2016-06-10 2021-10-26 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11418492B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing systems and methods for using a data model to select a target data asset in a data migration
US11366909B2 (en) 2016-06-10 2022-06-21 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11341447B2 (en) 2016-06-10 2022-05-24 OneTrust, LLC Privacy management systems and methods
US10796260B2 (en) 2016-06-10 2020-10-06 OneTrust, LLC Privacy management systems and methods
US11675929B2 (en) 2016-06-10 2023-06-13 OneTrust, LLC Data processing consent sharing systems and related methods
US11227247B2 (en) 2016-06-10 2022-01-18 OneTrust, LLC Data processing systems and methods for bundled privacy policies
US11222139B2 (en) 2016-06-10 2022-01-11 OneTrust, LLC Data processing systems and methods for automatic discovery and assessment of mobile software development kits
US10896394B2 (en) 2016-06-10 2021-01-19 OneTrust, LLC Privacy management systems and methods
US10565236B1 (en) 2016-06-10 2020-02-18 OneTrust, LLC Data processing systems for generating and populating a data inventory
US11200341B2 (en) 2016-06-10 2021-12-14 OneTrust, LLC Consent receipt management systems and related methods
US10853501B2 (en) 2016-06-10 2020-12-01 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11151233B2 (en) 2016-06-10 2021-10-19 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11336697B2 (en) 2016-06-10 2022-05-17 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11222142B2 (en) 2016-06-10 2022-01-11 OneTrust, LLC Data processing systems for validating authorization for personal data collection, storage, and processing
US10169609B1 (en) 2016-06-10 2019-01-01 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US11295316B2 (en) 2016-06-10 2022-04-05 OneTrust, LLC Data processing systems for identity validation for consumer rights requests and related methods
US10685140B2 (en) 2016-06-10 2020-06-16 OneTrust, LLC Consent receipt management systems and related methods
US10846433B2 (en) 2016-06-10 2020-11-24 OneTrust, LLC Data processing consent management systems and related methods
US11138242B2 (en) 2016-06-10 2021-10-05 OneTrust, LLC Data processing systems and methods for automatically detecting and documenting privacy-related aspects of computer software
US11188862B2 (en) 2016-06-10 2021-11-30 OneTrust, LLC Privacy management systems and methods
US10592692B2 (en) 2016-06-10 2020-03-17 OneTrust, LLC Data processing systems for central consent repository and related methods
US10944725B2 (en) 2016-06-10 2021-03-09 OneTrust, LLC Data processing systems and methods for using a data model to select a target data asset in a data migration
US11038925B2 (en) 2016-06-10 2021-06-15 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11328092B2 (en) 2016-06-10 2022-05-10 OneTrust, LLC Data processing systems for processing and managing data subject access in a distributed environment
US10740487B2 (en) 2016-06-10 2020-08-11 OneTrust, LLC Data processing systems and methods for populating and maintaining a centralized database of personal data
US11416798B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing systems and methods for providing training in a vendor procurement process
US10803200B2 (en) 2016-06-10 2020-10-13 OneTrust, LLC Data processing systems for processing and managing data subject access in a distributed environment
US11586700B2 (en) 2016-06-10 2023-02-21 OneTrust, LLC Data processing systems and methods for automatically blocking the use of tracking tools
US10607028B2 (en) 2016-06-10 2020-03-31 OneTrust, LLC Data processing systems for data testing to confirm data deletion and related methods
US11392720B2 (en) 2016-06-10 2022-07-19 OneTrust, LLC Data processing systems for verification of consent and notice processing and related methods
US10848523B2 (en) 2016-06-10 2020-11-24 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11562097B2 (en) 2016-06-10 2023-01-24 OneTrust, LLC Data processing systems for central consent repository and related methods
US11366786B2 (en) 2016-06-10 2022-06-21 OneTrust, LLC Data processing systems for processing data subject access requests
US10503926B2 (en) 2016-06-10 2019-12-10 OneTrust, LLC Consent receipt management systems and related methods
US11727141B2 (en) 2016-06-10 2023-08-15 OneTrust, LLC Data processing systems and methods for synching privacy-related user consent across multiple computing devices
US11057356B2 (en) 2016-06-10 2021-07-06 OneTrust, LLC Automated data processing systems and methods for automatically processing data subject access requests using a chatbot
US10510031B2 (en) 2016-06-10 2019-12-17 OneTrust, LLC Data processing systems for identifying, assessing, and remediating data processing risks using data modeling techniques
US10909488B2 (en) 2016-06-10 2021-02-02 OneTrust, LLC Data processing systems for assessing readiness for responding to privacy-related incidents
US11461500B2 (en) 2016-06-10 2022-10-04 OneTrust, LLC Data processing systems for cookie compliance testing with website scanning and related methods
US10873606B2 (en) 2016-06-10 2020-12-22 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11210420B2 (en) * 2016-06-10 2021-12-28 OneTrust, LLC Data subject access request processing systems and related methods
US11134086B2 (en) 2016-06-10 2021-09-28 OneTrust, LLC Consent conversion optimization systems and related methods
US11410106B2 (en) 2016-06-10 2022-08-09 OneTrust, LLC Privacy management systems and methods
US11354435B2 (en) 2016-06-10 2022-06-07 OneTrust, LLC Data processing systems for data testing to confirm data deletion and related methods
US11100444B2 (en) 2016-06-10 2021-08-24 OneTrust, LLC Data processing systems and methods for providing training in a vendor procurement process
US11222309B2 (en) 2016-06-10 2022-01-11 OneTrust, LLC Data processing systems for generating and populating a data inventory
US11087260B2 (en) 2016-06-10 2021-08-10 OneTrust, LLC Data processing systems and methods for customizing privacy training
US11416589B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11481710B2 (en) 2016-06-10 2022-10-25 OneTrust, LLC Privacy management systems and methods
US11475136B2 (en) 2016-06-10 2022-10-18 OneTrust, LLC Data processing systems for data transfer risk identification and related methods
US11238390B2 (en) 2016-06-10 2022-02-01 OneTrust, LLC Privacy management systems and methods
US11343284B2 (en) 2016-06-10 2022-05-24 OneTrust, LLC Data processing systems and methods for performing privacy assessments and monitoring of new versions of computer code for privacy compliance
US11146566B2 (en) 2016-06-10 2021-10-12 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US10282700B2 (en) 2016-06-10 2019-05-07 OneTrust, LLC Data processing systems for generating and populating a data inventory
US10284604B2 (en) 2016-06-10 2019-05-07 OneTrust, LLC Data processing and scanning systems for generating and populating a data inventory
US11403377B2 (en) 2016-06-10 2022-08-02 OneTrust, LLC Privacy management systems and methods
US10878127B2 (en) * 2016-06-10 2020-12-29 OneTrust, LLC Data subject access request processing systems and related methods
US10606916B2 (en) 2016-06-10 2020-03-31 OneTrust, LLC Data processing user interface monitoring systems and related methods
US10997318B2 (en) 2016-06-10 2021-05-04 OneTrust, LLC Data processing systems for generating and populating a data inventory for processing data access requests
US10909265B2 (en) 2016-06-10 2021-02-02 OneTrust, LLC Application privacy scanning systems and related methods
US11354434B2 (en) 2016-06-10 2022-06-07 OneTrust, LLC Data processing systems for verification of consent and notice processing and related methods
US11228620B2 (en) 2016-06-10 2022-01-18 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US10565161B2 (en) 2016-06-10 2020-02-18 OneTrust, LLC Data processing systems for processing data subject access requests
US10678945B2 (en) 2016-06-10 2020-06-09 OneTrust, LLC Consent receipt management systems and related methods
US10282559B2 (en) 2016-06-10 2019-05-07 OneTrust, LLC Data processing systems for identifying, assessing, and remediating data processing risks using data modeling techniques
US11025675B2 (en) 2016-06-10 2021-06-01 OneTrust, LLC Data processing systems and methods for performing privacy assessments and monitoring of new versions of computer code for privacy compliance
US11651104B2 (en) 2016-06-10 2023-05-16 OneTrust, LLC Consent receipt management systems and related methods
US11651106B2 (en) 2016-06-10 2023-05-16 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US11625502B2 (en) 2016-06-10 2023-04-11 OneTrust, LLC Data processing systems for identifying and modifying processes that are subject to data subject access requests
US10839102B2 (en) 2016-06-10 2020-11-17 OneTrust, LLC Data processing systems for identifying and modifying processes that are subject to data subject access requests
US11544667B2 (en) 2016-06-10 2023-01-03 OneTrust, LLC Data processing systems for generating and populating a data inventory
US10949565B2 (en) 2016-06-10 2021-03-16 OneTrust, LLC Data processing systems for generating and populating a data inventory
US11074367B2 (en) 2016-06-10 2021-07-27 OneTrust, LLC Data processing systems for identity validation for consumer rights requests and related methods
US11144622B2 (en) 2016-06-10 2021-10-12 OneTrust, LLC Privacy management systems and methods
US10467432B2 (en) 2016-06-10 2019-11-05 OneTrust, LLC Data processing systems for use in automatically generating, populating, and submitting data subject access requests
US11188615B2 (en) 2016-06-10 2021-11-30 OneTrust, LLC Data processing consent capture systems and related methods
US10949170B2 (en) 2016-06-10 2021-03-16 OneTrust, LLC Data processing systems for integration of consumer feedback with data subject access requests and related methods
US11138299B2 (en) 2016-06-10 2021-10-05 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11294939B2 (en) 2016-06-10 2022-04-05 OneTrust, LLC Data processing systems and methods for automatically detecting and documenting privacy-related aspects of computer software
US10318761B2 (en) 2016-06-10 2019-06-11 OneTrust, LLC Data processing systems and methods for auditing data request compliance
US11023842B2 (en) 2016-06-10 2021-06-01 OneTrust, LLC Data processing systems and methods for bundled privacy policies
US10686729B2 (en) 2017-03-29 2020-06-16 Fungible, Inc. Non-blocking any-to-any data center network with packet spraying over multiple alternate data paths
CN110741356B (zh) 2017-04-10 2024-03-15 微软技术许可有限责任公司 多处理器***中的中继一致存储器管理
US10013577B1 (en) 2017-06-16 2018-07-03 OneTrust, LLC Data processing systems for identifying whether cookies contain personally identifying information
WO2019014268A1 (en) 2017-07-10 2019-01-17 Fungible, Inc. DATA PROCESSING UNIT FOR FLOW PROCESSING
US11303472B2 (en) 2017-07-10 2022-04-12 Fungible, Inc. Data processing unit for compute nodes and storage nodes
US10803202B2 (en) 2018-09-07 2020-10-13 OneTrust, LLC Data processing systems for orphaned data identification and deletion and related methods
US11544409B2 (en) 2018-09-07 2023-01-03 OneTrust, LLC Data processing systems and methods for automatically protecting sensitive data within privacy management systems
US11144675B2 (en) 2018-09-07 2021-10-12 OneTrust, LLC Data processing systems and methods for automatically protecting sensitive data within privacy management systems
EP4179435A1 (en) 2020-07-08 2023-05-17 OneTrust LLC Systems and methods for targeted data discovery
EP4189569A1 (en) 2020-07-28 2023-06-07 OneTrust LLC Systems and methods for automatically blocking the use of tracking tools
US20230289376A1 (en) 2020-08-06 2023-09-14 OneTrust, LLC Data processing systems and methods for automatically redacting unstructured data from a data subject access request
US11436373B2 (en) 2020-09-15 2022-09-06 OneTrust, LLC Data processing systems and methods for detecting tools for the automatic blocking of consent requests
WO2022061270A1 (en) 2020-09-21 2022-03-24 OneTrust, LLC Data processing systems and methods for automatically detecting target data transfers and target data processing
US11586439B2 (en) 2020-10-20 2023-02-21 Micron Technology, Inc. Detecting infinite loops in a programmable atomic transaction
US11403023B2 (en) 2020-10-20 2022-08-02 Micron Technology, Inc. Method of organizing a programmable atomic unit instruction memory
US12020062B2 (en) 2020-10-20 2024-06-25 Micron Technology, Inc. Method of executing programmable atomic unit resources within a multi-process system
US11693690B2 (en) 2020-10-20 2023-07-04 Micron Technology, Inc. Method of completing a programmable atomic transaction by ensuring memory locks are cleared
US11436187B2 (en) 2020-10-20 2022-09-06 Micron Technology, Inc. Method of notifying a process or programmable atomic operation traps
US11740929B2 (en) 2020-10-20 2023-08-29 Micron Technology, Inc. Registering a custom atomic operation with the operating system
US11397819B2 (en) 2020-11-06 2022-07-26 OneTrust, LLC Systems and methods for identifying data processing activities based on data discovery results
CN112395242B (zh) * 2020-11-30 2024-01-30 重庆紫光华山智安科技有限公司 多芯片控制方法、装置、电子设备和计算机可读存储介质
CN112231018B (zh) * 2020-12-15 2021-03-16 北京壁仞科技开发有限公司 用于卸载数据的方法、计算设备和计算机可读存储介质
CN112559496B (zh) * 2020-12-24 2024-06-18 百果园技术(新加坡)有限公司 一种分布式数据库事务原子性实现方法及装置
US11687528B2 (en) 2021-01-25 2023-06-27 OneTrust, LLC Systems and methods for discovery, classification, and indexing of data in a native computing system
CN112506847B (zh) * 2021-02-04 2021-04-30 上海励驰半导体有限公司 多处理器通信方法及***
WO2022170047A1 (en) 2021-02-04 2022-08-11 OneTrust, LLC Managing custom attributes for domain objects defined within microservices
EP4288889A1 (en) 2021-02-08 2023-12-13 OneTrust, LLC Data processing systems and methods for anonymizing data samples in classification analysis
WO2022173912A1 (en) 2021-02-10 2022-08-18 OneTrust, LLC Systems and methods for mitigating risks of third-party computing system functionality integration into a first-party computing system
US11775348B2 (en) 2021-02-17 2023-10-03 OneTrust, LLC Managing custom workflows for domain objects defined within microservices
US11546661B2 (en) 2021-02-18 2023-01-03 OneTrust, LLC Selective redaction of media content
US11533315B2 (en) 2021-03-08 2022-12-20 OneTrust, LLC Data transfer discovery and analysis systems and related methods
US11562078B2 (en) 2021-04-16 2023-01-24 OneTrust, LLC Assessing and managing computational risk involved with integrating third party computing functionality within a computing system
CN114328309A (zh) * 2021-12-03 2022-04-12 南京风兴科技有限公司 一种存储器管理电路及共享存储器方法
US11620142B1 (en) 2022-06-03 2023-04-04 OneTrust, LLC Generating and customizing user interfaces for demonstrating functions of interactive user environments

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0614139A3 (en) 1993-03-04 1995-05-03 Ibm External procedure call for a distributed processing environment.
US5617570A (en) * 1993-11-03 1997-04-01 Wang Laboratories, Inc. Server for executing client operation calls, having a dispatcher, worker tasks, dispatcher shared memory area and worker control block with a task memory for each worker task and dispatcher/worker task semaphore communication
US5987506A (en) * 1996-11-22 1999-11-16 Mangosoft Corporation Remote access and geographically distributed computers in a globally addressable storage environment
US6629152B2 (en) 1998-06-29 2003-09-30 International Business Machines Corporation Message passing using shared memory of a computer
US6721898B1 (en) 1999-02-03 2004-04-13 William H. Gates, III Method and system for tracking software components
US20020161848A1 (en) * 2000-03-03 2002-10-31 Willman Charles A. Systems and methods for facilitating memory access in information management environments
AU2001247324A1 (en) * 2000-03-08 2001-09-17 Sun Microsystems, Inc. Vliw computer processing architecture with on-chip dynamic ram
EP1363187A1 (en) 2002-05-15 2003-11-19 Sony International (Europe) GmbH Dispatching application steps in a client/server environment
US8037224B2 (en) 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US7380039B2 (en) 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US7415704B2 (en) * 2004-05-20 2008-08-19 Sap Ag Sharing objects in runtime systems
US7546335B2 (en) 2004-09-02 2009-06-09 Broadway Technology, Llc System and method for a data protocol layer and the transfer of data objects using the data protocol layer
US7984248B2 (en) * 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US9043454B2 (en) 2009-08-26 2015-05-26 Red Hat Israel, Ltd. Auto suspense of virtual machine on client disconnection
EP2499576A2 (en) * 2009-11-13 2012-09-19 Richard S. Anderson Distributed symmetric multiprocessing computing architecture
US8832216B2 (en) * 2011-08-31 2014-09-09 Oracle International Corporation Method and system for conditional remote direct memory access write
US9178833B2 (en) * 2011-10-25 2015-11-03 Nicira, Inc. Chassis controller
JP5598493B2 (ja) * 2012-03-30 2014-10-01 富士通株式会社 情報処理装置、演算装置および情報転送方法
US9003037B2 (en) 2012-07-25 2015-04-07 Vmware, Inc. Dynamic allocation of physical computing resources amongst virtual machines
US9213649B2 (en) * 2012-09-24 2015-12-15 Oracle International Corporation Distributed page-table lookups in a shared-memory system
GB2507779A (en) 2012-11-09 2014-05-14 Ibm Terminating a virtual machine in response to user inactivity in a cloud computing environment
US9218204B2 (en) 2012-12-21 2015-12-22 Advanced Micro Devices, Inc. Processing engine for complex atomic operations
US9606922B2 (en) 2013-03-01 2017-03-28 International Business Machines Corporation Selection of post-request action based on combined response and input from the request source
US9276827B2 (en) 2013-03-15 2016-03-01 Cisco Technology, Inc. Allocating computing resources based upon geographic movement
US20150019705A1 (en) 2013-06-26 2015-01-15 Amazon Technologies, Inc. Management of computing sessions
US10140149B1 (en) * 2015-05-19 2018-11-27 Pure Storage, Inc. Transactional commits with hardware assists in remote memory
US9792248B2 (en) * 2015-06-02 2017-10-17 Microsoft Technology Licensing, Llc Fast read/write between networked computers via RDMA-based RPC requests
US10732865B2 (en) 2015-09-23 2020-08-04 Oracle International Corporation Distributed shared memory using interconnected atomic transaction engines at respective memory interfaces

Also Published As

Publication number Publication date
WO2017053488A1 (en) 2017-03-30
US11868628B2 (en) 2024-01-09
EP3353673A1 (en) 2018-08-01
US20200363967A1 (en) 2020-11-19
CN108027804A (zh) 2018-05-11
EP3353673B1 (en) 2024-05-15
US20240111441A1 (en) 2024-04-04
CN108027804B (zh) 2022-06-03
US20170083257A1 (en) 2017-03-23
US11334262B2 (en) 2022-05-17
US10732865B2 (en) 2020-08-04
US20220276794A1 (en) 2022-09-01

Similar Documents

Publication Publication Date Title
CN108027804B (zh) 片上原子事务引擎
US7047322B1 (en) System and method for performing conflict resolution and flow control in a multiprocessor system
US8407451B2 (en) Method and apparatus for enabling resource allocation identification at the instruction level in a processor system
US20030145136A1 (en) Method and apparatus for implementing a relaxed ordering model in a computer system
US6088771A (en) Mechanism for reducing latency of memory barrier operations on a multiprocessor system
US9372805B2 (en) Operating on translation look-aside buffers in a multiprocessor environment
US8255591B2 (en) Method and system for managing cache injection in a multiprocessor system
US20100293420A1 (en) Cache coherent support for flash in a memory hierarchy
TW201734758A (zh) 使用硬體佇列裝置的多核心通訊加速
CN108268385B (zh) 具有集成目录高速缓存的优化的高速缓存代理
US8117389B2 (en) Design structure for performing cacheline polling utilizing store with reserve and load when reservation lost instructions
JP2012038293A (ja) マシンビジョン用マルチプロセッサシステムオンチップ
JP2012038293A5 (zh)
US10983833B2 (en) Virtualized and synchronous access to hardware accelerators
CN116134475A (zh) 计算机存储器扩展设备及其操作方法
US20090083496A1 (en) Method for Improved Performance With New Buffers on NUMA Systems
CN116057514A (zh) 可扩展高速缓存一致性协议
US9983874B2 (en) Structure for a circuit function that implements a load when reservation lost instruction to perform cacheline polling
US10901691B2 (en) System, method and apparatus for inter-process communication
US10754791B2 (en) Software translation prefetch instructions
US7650483B2 (en) Execution of instructions within a data processing apparatus having a plurality of processing units
JP2002198987A (ja) ハブおよびポート付き転送コントローラのアクティブ・ポート
CN111723025A (zh) 电子设备和电子***
KR20230151031A (ko) I/o 에이전트
Gupta Multiple Protocol Engines for a Directory based Cache Coherent DSM Multiprocessor

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination