CN108475194A - 在片上网络架构中的寄存器通信 - Google Patents
在片上网络架构中的寄存器通信 Download PDFInfo
- Publication number
- CN108475194A CN108475194A CN201680076219.7A CN201680076219A CN108475194A CN 108475194 A CN108475194 A CN 108475194A CN 201680076219 A CN201680076219 A CN 201680076219A CN 108475194 A CN108475194 A CN 108475194A
- Authority
- CN
- China
- Prior art keywords
- register
- data
- processing element
- address
- operand
- 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
Links
- 238000004891 communication Methods 0.000 title claims description 32
- 230000015654 memory Effects 0.000 claims abstract description 289
- 238000012545 processing Methods 0.000 claims abstract description 206
- 238000000034 method Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 19
- 238000000605 extraction Methods 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 claims description 11
- 238000012546 transfer Methods 0.000 claims description 10
- 239000003550 marker Substances 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 239000004065 semiconductor Substances 0.000 claims description 2
- 230000006399 behavior Effects 0.000 description 11
- 230000008859 change Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000003139 buffering effect Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004064 recycling Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007306 turnover Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System 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/7825—Globally asynchronous, locally synchronous, e.g. network on chip
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
片上网络处理器对常规内存和操作数寄存器都使用统一寻址。处理器包含大量处理元素(例如256个)。每个处理元素都有若干(例如200个)操作数寄存器,它对其具有直接、高速(例如单个时钟周期)的访问。这些操作数寄存器中的每一个也被分配一个全局内存地址,所以其他处理元素可以读写这些操作数寄存器,就好像它们位于主内存中一样。期望处理元素之间经由内存进行通信的软件可以使用基于内存的读取/写入,但是通过将数据直接写入用于由目标处理器执行指令的操作数寄存器来获得实质的速度。
Description
相关申请资料的交叉引用
本申请要求于2015年10月23日提交的美国专利申请No.14/921,377号的优先权,其全部内容通过引用合并于此。
背景技术
能够并行计算操作的多处理器计算机架构最初是为超级计算机开发的。今天,随着现代微处理器包含多个处理器“内核”,并行计算的原理已经变得与片上和分布式计算环境相关。
附图说明
为了更完整地理解本公开,现在参考结合附图进行的以下描述。
图1是概念性地示出支持元素间寄存器通信的片上网络架构的示例的框图。
图2是概念性地示出图1中的架构的处理元素的示例组件的框图。
图3示出了图2中的处理器内核执行指令的示例。
图4示出了图2中处理器内核的管线阶段的流程示例。
图5示出了用于支持元素间寄存器通信的数据包标头的示例。
图6A示出来自图2的操作数寄存器的配置的示例,包括排列成邮箱队列用以通过写入事务接收数据的寄存器组。
图6B是如何在循环邮箱队列中访问和回收寄存器内存库的抽象表示。
图7A至图7F示出来自图6A的队列的写入和读取事务操作。
图8是示出将写入和读取事务操作定向到用作邮箱队列的内存库的操作数寄存器集的电路示例的示意图。
图9是示出将写入和读取事务操作定向到用作邮箱队列的内存库的操作数寄存器集的电路示例的另一示意图。
具体实施方式
常规并行处理系统中处理器之间通信的一种广泛使用的方法是一个处理元素(例如,处理器内核和相关联的外围组件)将数据写入共享通用内存中的位置,另一处理元素则从该内存读取该数据。在这样的系统中,处理元素通常彼此很少或没有直接通信。相反,进程通过让源处理器将数据存储在共享内存中,并让目标处理器将共享内存中的数据复制到其自己的内部寄存器中进行处理来交换数据。
这种方法在软件中实现起来简单而直接,但是会产生大量的开销。内存读取和写入需要大量的时间和能量来执行。此外,通用主内存通常针对在流中读取/写入大量数据时的最大带宽进行优化。当只有少量数据需要写入内存时,向内存传输数据会带来相对较高的延迟。而且,由于网络开销,这样的小事务可以不成比例地减少可用带宽。
在可以被扩展到包括数百个(或更多)处理器内核的并行处理系统中,所需要的是一种用于在一个处理元素上运行的软件将数据直接通信给在另一个处理元素上运行的软件的方法,同时继续遵循已建立的编程模型,使得(例如)在典型的编程语言中,数据传输看起来像是一个简单的任务。
图1是概念性地示出支持元素间寄存器通信的片上网络架构的示例的框图。处理器芯片100可以由大量处理元素170(例如,256个)组成,其经由类似于在计算机网络中通常看到的交换或路由结构在芯片上连接在一起。图2是概念性地示出图1中的架构的处理元素170的示例组件的框图。
每个处理元素170可以直接访问其他处理元素的一些(或全部)操作数寄存器284,使得每个处理元素170可以直接读取和写入数据到由其他处理元素执行的指令使用的操作数寄存器284中,从而允许一个处理元素的处理器内核290直接操纵由另一个处理器内核使用的操作数来执行操作码。
“操作码”指令是指定要由执行处理器内核290执行的操作的机器语言指令。除了操作码本身之外,指令还可以以操作数的形式指定要处理的数据。从中检索操作数的寄存器的地址标识符可以被直接编码为与指令集中定义的指令(即永久映射到特定操作数寄存器的指令)相关联的固定位置,或者可以是与指令一起指定的变量地址位置。
每个操作数寄存器284可以被分配一个全局内存地址,该全局内存地址包括其相关联的处理元素170的标识符和单独的操作数寄存器284的标识符。读取/写入事务的源处理元素170不需要采取特殊的动作或使用特殊的协议来读取/写入另一个处理元素的操作数寄存器,而是可以访问另一个处理元素的寄存器,就像它在源处理元素外部的任何其他内存位置一样。类似地,包含由另一处理元素正在读取或写入的寄存器的处理元素170的处理内核290在操作数寄存器与另一处理元素之间的事务期间不需要采取任何动作。
传统的处理元素通常包括两种类型的寄存器:既可以在内部也可以在外部访问的寄存器,以及只能在内部访问的寄存器。图2中的硬件寄存器276示出了在处理元素内部和外部都可访问的传统寄存器的示例,诸如当初始“启动”处理元素时使用的配置寄存器277、输入/输出寄存器278和各种状态寄存器279。这些硬件寄存器中的每一个都是全局映射,并且由与硬件寄存器相关联的处理器内核通过执行加载或存储指令来访问。
传统处理元素中的内部可访问寄存器包括处理器内核本身内部的指令寄存器和操作数寄存器。这些寄存器通常专用于执行操作的内核,其中指令寄存器存储当前正在执行的指令,操作数寄存器存储当前执行指令所需的从硬件寄存器276或其他内存中提取的数据。这些内部可访问寄存器直接连接到指令执行管线的组件(例如,指令解码组件、操作数提取组件,指令执行组件等),使得没有理由为它们分配全局地址。而且,由于这些寄存器专门由处理器内核使用,因此它们是单个“端口”的,因为数据访问是管线专用的。
相比之下,图2中的处理器内核290的执行寄存器280可以每一个都是双端口的,其中一个端口直接连接到内核的微定序器291,而另一个端口连接到处理元素170的数据事务接口272,可以使用全局寻址经由该另一个端口访问操作数寄存器284。作为双端口寄存器,数据可以在同一时钟周期内从寄存器读取两次(例如,一次由微定序器291读取,一次由数据事务接口272读取)。
如下面将进一步描述的,处理元素170之间的通信可以使用数据包来执行,每个数据事务接口272连接到一个或多个总线,其中每条总线包括至少一条数据线。每个数据包可以包括目标寄存器的地址(即,接收者的地址)和数据有效载荷。总线可以被布置到网络中,诸如图1所示的总线分层网络。目标寄存器的地址可以是全局分层地址,诸如识别多个互连多核芯片之中的多核芯片100,芯片上的内核簇150的超级簇130,包含目标处理元素170的内核簇150,以及目标处理元素170内的个体操作数寄存器284的唯一标识符。
例如,参照图1,每个芯片100包括四个超级簇130a-130d,每个超级簇130包括八个簇150a-150h,并且每个簇150包括八个处理元素170a-170h。如果每个处理元素170包括256个操作数寄存器284,则在芯片100内,每个操作数寄存器可以用16位地址分别寻址:两位识别超级簇,三位识别簇,三位来识别处理元素,八位识别寄存器。全局地址可以包括附加位,诸如用于识别处理器芯片100的位,使得处理元素170可以直接访问跨芯片的处理元素的寄存器。全局地址还可以涵盖芯片100的所有处理元素170可访问的主内存、由处理元素170本地共享的分层内存(例如,簇内存162)等的物理和/或虚拟地址。尽管处理元素170外部的组件使用全局寻址来寻址另一个处理元素的寄存器284,但是包含操作数寄存器284的处理器内核290可以使用寄存器的个体标识符(例如,识别256个寄存器的八个比特)。
其他寻址方案也可以使用,并且可以使用不同的寻址层次。处理器内核290可以使用地址线和数据线直接访问其自己的执行寄存器280,而处理元素之间通过数据事务接口272的通信则可能经由各种不同的总线架构。例如,处理元素和其他可寻址部件之间的通信可以经由共享的基于并行总线的网络(例如,包括地址线和数据线的总线,经由地址线传送地址以及经由数据线传送数据)。作为另一个示例,处理元素和其他部件之间的通信可以经由一个或多个共享串行总线进行。
可寻址元素/组件之间的寻址可以是基于数据包的,消息交换的(例如,没有数据包的存储和转发网络),电路交换的(例如,使用矩阵开关来建立通信元素/组件之间的直接通信信道/电路),直接的(即没有交换的端到端通信),或其组合。相比之下,相对于消息交换、电路交换和直接寻址,基于数据包的寻址会经由数据线在数据包标头中传送目的地地址和在数据包主体中传送数据有效载荷。
作为使用多于一种总线类型和多于一种协议的架构示例,簇间通信可以是经由串行总线的基于数据包的,而簇内通信可以是消息交换的或者电路交换的,其使用簇内路由器(L4)160、在簇内的处理元素170a至170h、以及其他簇内组件(例如,簇内存162)之间的并行总线。另外,在簇内,处理元素170a到170h可以经由使用直接寻址的共享总线或多个处理元素专用和/或共享资源专用的总线(未示出)互连到簇内的共享资源(例如簇内存162)。
数据包的来源不仅限于操纵与另一处理器内核290相关联的操作数寄存器284的处理器内核290,而可以是任何操作元素,诸如内存控制器114、数据馈送器164(将在下面进一步讨论)、连接到芯片100的外部主处理器、现场可编程门阵列或可通信地连接到能够以数据包格式进行通信的处理器芯片100的任何其他元素。
数据馈送器164可以执行控制何处以及何时将数据推送至个别处理元素170的编程指令。数据馈送器164还可以用于将可执行指令推送至处理元素170的程序内存274以供该处理元素的指令管线来执行。
任何操作元素除了能够直接写入处理元素170的操作数寄存器284之外,每个操作元素还可以直接从处理元素170的操作数寄存器284读取,诸如通过发送读取事务数据包来指示要被读取的目标寄存器的全局地址,以及包括目标寄存器的内容的应答将被复制到的目的地地址的全局地址。
与每个处理元素相关联的数据事务接口272可以执行这样的读取、写入和应答操作,而不需要与被访问的寄存器相关联的处理器内核290的动作。因此,如果读取事务的目的地地址是发起事务的处理元素170的操作数寄存器284,则可以将该应答置于目的地寄存器中,而无需发起读取请求的处理器内核290的进一步动作。也可以进行三向读取事务,其中第一处理元素170x发起位于第二处理元素170y中的寄存器的读取事务,其中应答的目的地地址是位于第三处理元素170z中的寄存器。
包括处理器芯片100的系统内的内存也可以是分层的。每个处理元素170可以具有包含指令的本地程序内存274,所述指令将由微定序器291根据程序计数器293来提取。簇150内的处理元素170还可以共享簇内存162,诸如服务于包括八个处理器内核290的簇150的共享内存。尽管处理器内核290当访问其自己的执行寄存器280时可以没有经历延迟(或者经历控制指令管线292的时序的时钟的一个或两个周期的延迟),但访问处理元素170外部的全局地址可能由于(除其他之外)处理元素170之间的物理距离而经历更长的延迟。由于这个额外的延迟,处理器内核访问外部主内存、共享簇内存162以及其他处理元素的寄存器所需的时间可能大于内核290访问其自己的程序内存274和执行寄存器280所需的时间。
处理元素170外部的数据事务可以利用在基于路由器或基于交换机的片上网络上携带的基于数据包的协议来实现。图1中的芯片100示出了基于路由器的示例。架构层级结构中的每一层都可以包含路由器。例如,在顶层中,芯片级路由器(L1)110经由一个或多个高速串行总线112a、112b在芯片之间路由数据包,路由去往以及来自为芯片管理主通用内存的内存控制器114的数据包,路由去往以及来自下层路由器的数据包。
超级簇130a-130d可以经由超级簇间路由器(L2)120互连,该超级簇间路由器(L2)120在超级簇之间和超级簇与芯片级路由器(L1)110之间路由事务。每个超级簇130可以包括簇间路由器(L3)140,其在超级簇130中的每个簇150之间以及簇150与超级簇间路由器(L2)之间路由事务。每个簇150可以包括簇内路由器(L4)160,其在簇150中的每个处理元素170之间以及处理元素170和簇间路由器(L3)之间路由事务。级别4(L4)簇内路由器160还可以在簇的处理元素170和簇内存162之间引导数据包。层级还可以包括在架构的同一层级的元素之间的交叉连接(未示出)以路由数据包。处理器内核290可以直接访问其自己的操作数寄存器284而不使用全局地址。
不同层级的内存可以是物理上不同类型的内存。操作数寄存器284可以是计算系统中较快类型的内存,而外部通用内存通常可以具有较高的延迟。为了提高执行事务的速度,在处理器内核290需要操作数指令之前,操作数指令可以从较慢的内存中预取并存储在较快的程序内存(例如,图2中的程序内存274)中。
参照图2和图3,处理器内核290的微定序器291可以根据由程序计数器293指定的内存地址来提取(320)供指令执行管线292执行的指令流。内存地址可以是对应于处理元素自己的程序内存274中的地址的本地地址。除了从本地程序内存274提取指令之外,或者作为从本地程序内存274提取指令的替换,程序计数器293可以被配置为支持更广泛的架构的分级寻址,生成地址到内存层级中处理元素170外部的位置,诸如导致一个或多个读取请求被发布到簇内存162、到不同处理元素170内的程序内存274、到主内存(未示出,但连接到图1中的内存控制器114)、到另一处理器芯片100上的内存中的位置(例如,经由串行总线112)等的全局地址。微定序器291还控制指令管线292的时序。
程序计数器293可以将在程序内存274中的下一条指令的地址呈现以便进入指令执行管线292以供执行,由微定序器291根据所呈现的地址进行指令提取320。微定序器291利用指令寄存器282来处理由指令执行管线292处理的指令。在时钟的下一个时钟周期读取指令后,程序计数器可以递增(322)。指令执行管线292的解码阶段可以解码(330)要执行的下一个指令,并且指令寄存器282可以用于存储解码的指令。实现解码阶段的相同逻辑还可以将要提取的任何源操作数的操作数寄存器284的一个或多个地址呈现给操作数提取阶段。
操作数指令可能需要零个、一个或多个源操作数。源操作数可以通过指令执行管线292的操作数提取阶段从操作数寄存器284中提取(340),并且在下一个时钟周期呈现给处理器内核290的算术逻辑单元(ALU)294。算术逻辑单元(ALU)可以被配置为使用源操作数来执行算术和逻辑操作。处理器内核290还可以包括用于执行操作的附加组件,例如浮点单元(FPU)296。复杂算术运算也可以经由专用高速总线被发送到簇的处理元素170a-170h之间共享的一个或多个组件,诸如用于执行浮点除法的共享组件(未示出),由其执行。
指令执行管线292的指令执行阶段可以使ALU 294(和/或FPU 296等)执行(350)解码的指令。ALU 294的执行可能需要单个时钟周期,扩展指令需要两个或更多个周期。可以在单个时钟周期内将指令分派给FPU 296和/或共享组件以进行复杂的算术运算,尽管可能需要几个周期来执行。
如果操作数写入(360)将出现存储所执行的操作的结果,则操作数寄存器284中的寄存器的地址可由执行管线292的操作数写入阶段在执行期间同时设定。在执行之后,可以通过指令管线292的操作数写入阶段接收结果以写回到一个或多个寄存器284。可以将结果提供给处理器内核290的操作数写回单元298,其执行写回(362),数据存储在一个或多个操作数寄存器284中。取决于所得操作数的大小和寄存器的大小,比单个寄存器更长的扩展操作数需要多于一个时钟周期写入。
寄存器转发也可以用于将操作数结果转发回指令管线292中的下一个或后续指令的执行阶段,以用作该指令的源操作数执行。例如,比较电路可以将下一条指令的寄存器源地址与先前指令的寄存器结果目的地地址进行比较,如果它们匹配,则可以在管线阶段之间转发执行结果操作数以用作源操作数执行下一条指令,使得下一条指令的执行不需要从寄存器284提取操作数。
为了保持数据一致性,由指令管线292主动用作工作寄存器的操作数寄存器284的一部分可以被数据事务接口272保护为只读,阻止或延迟源自处理元素170外部的写入事务,处理元素170指向受保护的寄存器。这种保护措施防止了由指令管线292主动写入的寄存器在执行中被重写,同时仍允许外部组件/处理元素读取那些受保护寄存器中的数据的当前状态。
图4示出了根据图3中的处理的微定序器/指令管线阶段的示例执行处理流程400。如在图3的讨论中所指出的那样,管线流程的每个阶段可以占用用于控制时序的时钟的一个周期。尽管所示的管线流程是标量,但是处理器内核290可以实现超标量并行,诸如其中在每个时钟周期提取并处理两条指令的并行管线。
图5示出了用于使用全局寻址来支持元素间寄存器通信的数据包标头502的示例。处理器内核170可以直接访问其自己的操作数寄存器284,而不用全局地址或使用数据包。例如,如果每个处理器内核具有256个操作数寄存器284,则内核290可以经由寄存器的8位唯一标识符访问每个寄存器。相比之下,全局地址可以是(例如)64位。类似地,如果每个处理器内核具有其自己的程序内存274,则该程序内存274还可以由关联内核290使用特定地址的本地标识符来访问,而不使用全局地址或数据包。相比之下,可以使用位置的全局地址来寻址共享内存和内存及其他处理元素的寄存器中的可访问位置,该全局地址可以包括该地址的本地标识符和该层的标识符(例如,设备ID 512,簇ID 514)。
例如,如图5所示,数据包标头502可以包括全局地址。有效载荷大小504可以指示与标头相关联的有效载荷的大小。如果不包括有效载荷,则有效载荷大小504可以是零。数据包操作码506可以指示由标头502传送的事务的类型,诸如指示写入指令或读取指令。内存层“M”508可以指示正在寻址什么层的设备内存,诸如主内存(连接到内存控制器114)、簇内存162或程序内存274、硬件寄存器276、或处理元素170内的执行寄存器280。
数据包标头502中的物理地址510的结构可以基于正被寻址的内存层而变化。例如,在顶层(例如,M=1),设备级地址510a可以包括识别处理器芯片100的唯一设备标识符512和与主内存中的位置相对应的地址520a。在下一层(例如,M=2),簇级地址510b可以包括设备标识符512、簇标识符514(识别超级簇130和簇150两者),以及对应于簇内存162中的位置的地址520b。在处理元素级(例如,M=3),处理元素级地址510c可以包括设备标识符512、簇标识符514、处理元素标识符516、事件标记掩码518、以及处理元素的操作数寄存器284和程序内存274中的特定位置的地址520c等。
事件标记掩码518可以被数据包用来在到达其目的地时设置“事件”标记。每个处理元素的执行寄存器280内的专用寄存器286可以包括一个或多个事件标记寄存器288,其可以用于指示特定数据事务何时发生。因此,例如,指定另一个处理元素170的操作数寄存器284的数据包标头可以指示在到达目的地处理元素时设置事件标记。但单个事件标记可以与所有寄存器或与一组寄存器相关联。每个处理元素170可以具有多个能以这种方式改变的事件标记位。哪个标记被触发可以由软件配置,在到达的数据包内指定被触发的标记。如果数据包事件标记掩码518未指示改变事件标记位,则数据包还可以在不设置事件标记的情况下写入操作数寄存器284。
事件标记可以向微定序器291/指令管线292提供电路——以及在其中执行的操作码指令——通过该装置可以确定新操作数是否已经从操作数寄存器284写入或读取。事件标记是否应该被设置可以取决于例如操作数是否是时间敏感的。如果数据包标头502指定与处理器内核的程序内存274、簇内存162或其他更高层级的内存相关联的地址,则指示设置事件标记的数据包标头502事件标记掩码518可以没有影响,因为其他级别的内存通常不会与执行寄存器280具有相同的时间敏感度。
事件标记也可以与增量或减量计数器相关联。处理元素的计数器(未示出)可以递增或递减专用寄存器286中的位以跟踪某些事件并触发动作。例如,当处理器内核290等待五个操作数被写入操作数寄存器284时,计数器可以被设置为跟踪数据被写入操作数寄存器284多少次,在第五个操作数被写入之后触发事件标记或其他“事件”。当达到指定的计数时,耦合到专用寄存器286的电路可以触发事件标记,可以改变状态机的状态等。处理器内核290可以例如设置计数器并进入减少功率睡眠状态,在恢复正常功率操作之前一直等待,直到计数器达到指定值为止(例如,解锁微定序器291直到计数器递减到零)。
可能出现的一个问题是如果多个处理元素170试图写入相同的寄存器地址。在那种情况下,存储的操作数可能会被与寄存器相关联的处理器内核所动作之前被远程处理器内核重写。为了防止这种情况,如图6A所示,每个处理器内核290可以将操作数寄存器686的块配置为充当用作处理器内核的“邮箱”的循环队列的内存库。可以使用邮箱启用标记(例如专用寄存器286内的标记)启用和禁用邮箱。当邮箱被禁用时,寄存器686的块用作普通操作数寄存器284(例如,与通用操作数寄存器685相同)。
当邮箱被启用时,处理元素170可以基于邮箱事件标记寄存器(例如图7A至图9中的789)确定邮箱中是否有可用的数据。在处理元素170已经读取数据之后,将通过设置邮箱清除标记(例如,图8和图9中891)来发出信号,表示邮箱中的寄存器内存库(例如,686a,686b)已经被读取并且准备好被重新用来存储新数据。清除之后,寄存器内存库可以用来接收更多的邮箱数据。如果没有邮箱寄存器内存库被清除,可以在系统中备份数据直到激活的内存库变为可用。处理元素170可以进入“睡眠”状态以减少功率消耗,同时其等待从另一个处理元素传送操作数,当操作数被传送到其邮箱时唤醒(例如,在等待时解锁微定序器291,并且当邮箱事件标记指示数据可用时重新锁定微定序器291)。
如上所述,每个操作数寄存器284可以与全局地址相关联。通用操作数寄存器685对于读取和写入事务,可以使用该寄存器的全局地址被单独寻址。相比之下,外部处理元素对形成邮箱队列的寄存器686的事务可能限于只写事务。而且,当被布置为邮箱队列时,与形成队列的寄存器686相关联的任何全局地址的写入事务可以被重定向到队列的尾部。
图6B是如何以循环方式访问邮箱内存库以读取和写入的抽象表示。每个邮箱600可以包括多个寄存器内存库(例如,内存库686a到686h),其中这些内存库作为循环队列进行操作。在循环队列中,“尾部”(604)是指已准备好接收数据的邮箱的下一个激活内存库,经由数据事务接口272可将新数据写入(如图6B所示686d),与数据下一步将被指令管线292读取的“标头”(602)形成比较(如图6B所示的686a)。在通过指令管线292从队列的头602处的内存库中读取数据且该内存库被清除(或就绪被清除/重写)之后,该内存库围绕环形邮箱队列回绕直到其到达尾部604并且被事务接口272再次写入。
如图6B所示,包含数据(686a,686b,686c)的寄存器内存库各自包含不同数量的数据(填充寄存器用“X”表示,而空白寄存器中不出现“X”)。这是为了示出写入邮箱的数据包的数据有效载荷的大小可以不同,其中某些数据包包含大量有效载荷,而其他数据包含小型有效载荷。每个内存库686a-686h的大小可以等于数据包可以承载的最大有效载荷(根据数据包通信协议)。在替代方案中,内存库大小可以独立于最大有效载荷,并且如果数据包包含对于单个内存库来说太大的有效载荷,则可以按顺序填充多个内存库直到有效载荷已经被转移到邮箱中。而且,尽管图6B中的每个内存库被示出为每个内存库具有八个寄存器,但内存库不受此限制。例如,每个内存库可以有十六个寄存器,三十二个寄存器,六十四个寄存器等。
邮箱事件标记可以指示何时将数据写入邮箱600的内存库中。与由数据包事件标记掩码518设置的事件标记不同,当由头602指向的内存库包含数据时(即,当由图7A至图9中的读指针722/922指定的寄存器内存库686a-686h包含数据时),可以设置邮箱事件标记(例如,图7A至9中的789)。例如,在执行开始时,头602和尾部604指向空的内存库A(686a)。在数据写入内存库A完成后,邮箱事件标记被设置。在邮箱事件标记被处理器内核290清除之后,头602指向内存库B(686b)。尾部604可以指向或可以不指向内存库B,取决于已经到达的数据包的数量。如果内存库B有数据,邮箱事件标记再次被设置。如果内存库B没有数据,邮箱事件标记在数据写入内存库B完成之前不会被设置。
当远程处理元素试图将操作数写入被阻止的寄存器(例如,由于本地处理器内核290当前正使用该寄存器执行指令)时,写入操作可以替代地被存入邮箱600中。与邮箱600相关联的地址指针可将输入数据重定向到寄存器或在与邮箱的当前尾部604(例如,图6B中的686d)对应的下一激活内存库的地址范围内的寄存器。如果邮箱600被打开并且外部处理器试图直接写入与包括在邮箱600中的寄存器相关联的中间地址,但其不在循环队列的尾部604处,则邮箱的写入地址指针可以将写入重定向至尾部604处的下一个激活内存库,使得尝试对邮箱600中的中间地址进行外部写入实际上与写入分配给邮箱的当前尾部604的全局地址相同。
通过翻转配置寄存器中的启用/禁用位,本地处理器内核可以选择性地启用和禁用邮箱600。当邮箱被禁用时,分配的寄存器686可以恢复为通用操作数寄存器685。邮箱配置寄存器可以是例如专用寄存器286。
远程处理元素使用多个数据包传送数据时邮箱可以提供缓冲。一个示例是具有邮箱的处理器内核,其中每个内存库686被分配64个寄存器。每个寄存器可以保存一个“字”。“字”是固定大小的数据片段,诸如由指令集和/或处理器内核290作为单元处理的数据量。然而,每个数据包的有效载荷可以受到限制,诸如限于32个字。如果操作需要使用全部64个寄存器来传送操作数,则在远程处理器经由第一数据包加载第一内存库的前32个寄存器之后,第二个数据包发送接下来的32个字。当远程处理器将下一个32字加载到下一个内存库中时,处理器内核可以访问第一内存库中的前32个字。
例如,执行的软件指令能够从第一内存库读取前32个字,将前32个字写入(复制/移动)到第一系列通用操作数寄存器685中,从第二内存库读取第二32个字,将第二32个字写入(复制/移动)到第二系列通用操作数寄存器685中,从而第一和第二32个字形成为(为了寻址的目的)在64个通用寄存器的连续系列中布置,通用操作数寄存器685中对接收数据的最终处理是连续数据的形式。这种布置可根据需要进行放大,诸如使用四个64个寄存器内存库,每个接收128个字,作为四个数据包的32个字有效载荷接收。
除了在收到的字到达邮箱的头602时复制所接收的字之外,还可以设置计数器(例如,递减计数器)以确定等待的数据的整体何时被加载到邮箱600中(例如,每接收四个数据包中的一个时递减,直到达到零,指示整个128个字在邮箱中等待读取)。然后,在所有数据已被加载到邮箱中之后,可以通过软件操作将数据复制/移动到一系列通用操作数寄存器685中,从中处理它们。
处理元素170可以同时支持多个邮箱600。例如,第一远程处理元素可以被指示写入第一邮箱,第二远程处理元素可以被指示写入第二邮箱等。每个邮箱都具有其自己的寄存器标记,标头(602)地址,从该地址它被读取,以及它被写入的尾部(604)地址。这样,当数据被写入邮箱600时,管线指令和接收数据之间的关联是清楚的,因为它简单取决于邮箱事件标记和每个邮箱的头602的地址。
由于邮箱600被配置为循环队列,尽管处理器内核可以单独读取队列的寄存器,但是处理器不需要知道32个字被加载的位置,相反可以从与队列的头602相关联的地址读取。例如,在指令管线292从邮箱队列的头602处的第一内存库寄存器读取第一32个操作数并且指示第一内存库寄存器可以被清除之后,地址指针将把头602的位置改变为包含接下来的32个操作数的下一个寄存器内存库,使得处理器可以在不知道写入操作数的特定邮箱寄存器的地址的情况下访问加载的操作数,而是使用与邮箱的头602相关联的地址。
例如,在双内存库邮箱队列中,由单个位构成的指针可以用作读指针,以在内存库之间将地址重定向到处于交替高低样式的头602处的当前任何内存库。类似地,可以使用单个位作为写指针,以将内存库之间的地址重定向到尾部604的当前任何内存库。如果一半队列(例如32个字)被指定为内存库“A”而另一半被指定为内存库“B”,当第一个数据包到达时(例如,32个字),它可以写入“A”。当下一个数据包(例如,另外32个字)到达时,它可以写入“B”。一旦指令管线指示完成读取“A”,则接下来的32个字可以写入“A”。依此类推。这种安排对于包括更多寄存器内存库的邮箱是可扩展的,简单地通过为读和写指针使用更多位(例如,对于具有四个内存库的邮箱,2个位用于读指针和2个位用于写指针,对于具有八个内存库的邮箱,每个指针使用3个位,对于具有16个内存库的邮箱,每个指针使用4个位,等等)。
默认情况下,当处理器内核通电时,写指针可以指向邮箱队列600的寄存器内存库中的一个。在数据被写入到第一内存库后,写指针可以切换到第二内存库。当邮箱600的每个内存库都包含数据时,可以设置一个标记,指示处理器内核不能接受邮箱写入,这可以备份整个系统的操作。
例如,在两个内存库已满的双内存库邮箱中,在处理器内核290完成从两个邮箱寄存器内存库中的一个中读取操作数之后,处理器内核可以清除邮箱标记,允许新的操作数被写入邮箱,写指针在内存库A和内存库B之间根据哪个内存库已被清除而切换。
虽然内存库之间的切换可以自动执行,但邮箱标记的清除可以通过指令管线292的相关操作数提取或指令执行阶段来执行,使得由处理器内核执行的指令能够控制是否释放在用于接收新数据的邮箱的头602处的内存库。因此,例如,如果程序执行包括处理在头602处的当前内存库中的操作数的一系列指令,则最后的指令(或释放指令)可以指定何时完成操作,允许内存库被释放和重写。这可以最小化将数据移出操作寄存器的需要,因为输入和输出操作数两者可以使用相同的寄存器来执行多个操作,在头602处的邮箱内存库被释放以被回收之前,最终结果被移动到寄存器的其他位置或内存位置。
通用操作数寄存器685可以经由数据包被读取和写入,并且由相关联的处理元素170的处理器内核290执行的指令来寻址操作数寄存器685。对于数据包访问,数据包操作码506可以用于确定访问类型。操作数寄存器685的基于数据包访问的定时可以独立于由相关处理器内核290利用相同的操作数寄存器执行的操作码指令执行的定时。基于数据包的写入可以对通用操作数寄存器685具有更高的优先级,并且因此可以不被阻止。
参考图6A,邮箱寄存器被分成两个内存库:内存库A邮箱指定寄存器686a和内存库B邮箱指定寄存器686b。操作数寄存器284可以被分成两个以上的内存库,但是为了简化说明,首先将讨论两个内存库邮箱示例。
用作头602和尾部604的邮箱地址范围可以是第一内存库“A”686a的,对应于图6A中的十六进制地址0xC0到0xDF。邮箱寄存器可以经由数据包写入尾部604,但可能无法经由数据包读取。邮箱寄存器可以经由处理器内核290执行的指令从头602读取。由于所有指向邮箱的数据包被假定为写入,所以数据包操作码506可以被忽略。只有当邮箱缓冲区为空或已被指令管线292释放用于回收时,才允许对邮箱进行数据包写入。如果两个寄存器内存库都包含数据,则邮箱队列的数据包写入可能被事务接口272阻止。
如图6A所示,使用位于操作数寄存器十六进制地址0xC0-0xFF处的64个寄存器来实现双内存库邮箱队列的示例。这64个寄存器被分成两个32寄存器内存库686a和686b以产生双缓冲实现。邮箱队列的头602和尾部604的地址被固定在地址0xC0-0xDF(192-223)处,读指针将这些地址的读取指向当前为头602的内存库,并且写指针将到这些地址的写入指向当前为尾部604的内存库。处理器内核290对这些地址的读取因此表现为“虚拟”地址。该邮箱地址范围可以物理地访问内存库“A”686a中的寄存器0xC0-0xDF,或者当双缓冲器“翻转”时,可以物理地访问内存库“B”686b中的寄存器0xE0-0xFF(224-255)。地址0xE0-0xFF处的寄存器686b是物理地址并且不被“翻转”。
数据可以从耦合到级别4路由器160的事务接口272流入邮箱队列,并且随后可以被关联的指令管线292使用。两个内存库设计的双缓冲特性可以通过允许下一个数据包有效载荷分期而不停顿或覆盖当前数据而优化邮箱队列。增加内存库的数量可以增加可以排队的数据量,并且减少在数据事务接口272等待空的内存库出现在尾部604接收数据时停顿写入邮箱的风险。
图7A至图7F示出了使用图6A所示的寄存器范围的双内存库邮箱示例的写入和读取事务操作。写指针720和读指针722可以指示两个内存库686a/686b中的哪一个用于该功能。如果读指针722是零(0),则处理器内核290正从内存库A读取。如果读指针722是一(1),则处理器内核290正在从内存库B读取。同样,如果写指针720是零(0),则事务接口272将写入指向到内存库A。如果写指针720是一(1),则事务接口272将写入指向到内存库B。这些写指针720和读指针722的位控制着如何解释邮箱地址(0xC0-0xDF),将写入地址(例如,图8中的830)重定向到尾部604,并将读取地址(例如,图8中的812)重定向到头602。
每个缓冲器内存库具有“就绪”标记(内存库A就绪标记787a,内存库B就绪标记787b)以指示相应的缓冲器是否包含数据。事件标记寄存器288包括邮箱事件标记789。邮箱事件标记789用于两个目的。首先,当设置此标记时,有效数据仅存在于邮箱中。其次,清除邮箱事件标记789将导致内存库交换。
图7A至7F示出这些状态的进展。在图7A中,在邮箱队列首先被激活或被复位之后显示第一状态。读指针722和写指针720都被设置为零。邮箱内存库686a、686b是空的,并且邮箱事件标记789未被声明。因此,在邮箱事件标记789指示队列中存在有效数据之后,第一个数据包写入将填充寄存器或内存库A 686a中寄存器,并且处理器内核290将从内存库A686b中读取。邮箱事件标记789可能是处理器内核290用以确定邮箱600中是否存在有效数据的唯一手段。
在第二步中,如图7B所示,在一个或多个数据包已被写入到内存库A686a之后,内存库A 686a的就绪标记787a指示数据可用,并且写指针720切换为指向内存库B 686b,向事务接口272指示下一个数据包写入的目标。
由处理器内核执行的软件指令可以轮询邮箱事件标记789以确定数据何时可用。作为替代,微定序器291可以设置使能寄存器和/或计数器并进入低功率休眠状态直到数据到达。低功率状态可以包括例如切断到指令管线292的时钟信号直到数据可用(例如,解锁微定序器291直到计数器达到零或者使能寄存器改变状态)。
该示例序列继续在图7C中。处理器内核290在另一个数据包到达之前结束使用内存库A 686a中的数据,并将有效载荷写入邮箱。由处理器内核290执行的指令清除邮箱事件标记789,这导致内存库A 686a被清除(或就绪被重写),将就绪标记787a从1改变到0。读指针722也切换到指向内存库B 686b。此时,两个内存库都是空的,并且读指针722和写指针720都指向内存库B。
重要的是处理器内核290一定不能清除邮箱事件标记789,直到使用位于头602处的当前内存库中的数据完成,否则该数据将丢失并且读指针722将切换。
在图7D中,另一个数据包到达并被写入内存库B 787b。数据包的到达导致内存库B的就绪标记787b指示数据可用,并且写指针720再次切换以指向空内存库A686a。邮箱事件标记789被设置为向处理器内核290指示在准备从头602读取的邮箱中存在有效数据。处理器内核290现在可以从缓冲器内存库B 686b读取有效数据。
双缓冲行为允许将下一个邮箱数据写入一个内存库,而处理器内核290正在处理另一内存库中的数据,不需要处理器内核290改变其邮箱寻址方案。换句话说,不考虑读指针722是否指向内存库A 686a或内存库B 686b,可以使用相同范围的地址(例如,0xC0至0xDF)来读取当前是头602的活动内存库。当指令管线操作码指令已经完成对当前在头602处的内存库的内容的处理时,邮箱可以“翻转”读指针722并立即从相同的一组地址(从处理器内核290的角度来看)获得下一个邮箱数据(假设下一个内存库已经被写入)。
图7E显示了这将如何发生的示例。捡起图7B剩下的,内存库A 686a包含数据并且处理器内核290正在使用该数据。此时,另一个数据包进入,其有效载荷置于内存库B 686b中。如图7E所示,内存库B 686b现在也包含数据。
如图7F所示,这导致写指针720被切换为指向内存库A686a(其仍被处理器内核290使用)。在这种情况下,两个内存库都包含数据,因此无法放置新数据包。因此,任何额外的数据包可以被事务接口272阻止并且将保持在入站路由器路径中(例如,由级别4路由器160保持),直到处理器内核290清除其邮箱事件标记789标记,这将切换读指针722使其指向到内存库B 686b,并且回收内存库A686a,使得内存库A可以接收未决入站数据包的有效载荷。在这种状态下,当处理器内核290最终清除邮箱事件标记789时,读指针722切换而指向到包含数据的内存库B 686b,并且邮箱事件标记789被立即再次设置。
图8是说明指示在如图7A至7F所描述的两个操作数寄存器内存库之间进行写入和读取事务操作的队列电路的示例的高级示意图,参考图2,状态机840和相关逻辑可以被包括在(其他地方)数据事务接口272中或处理器内核290中,尽管异或门814通常将被包括在处理器内核290中。
事件标记寄存器清除寄存器890(例如,另一事件标记寄存器288)的邮箱清除标记位891被连接到与门802的输入。邮箱清除标记891由处理器内核290输出的清除信号810设置用于清除邮箱清除寄存器890。与门802的另一个输入连接到多路复用器(“mux”)808的输出,该多路复用器808将其输出在存储库A就绪标记787a和存储库B就绪标记787b之间切换,设置邮箱事件标记789。
当事件标记清除寄存器890转变为高电平(二进制“1”)(例如,指示指令管线292在头602处的内存库完成),并且邮箱事件标记789也是高电平(二进制“1”)时,与门802的输出转变为高电平,生成读取完成脉冲872(“RD完成”)。RD完成脉冲872被输入到T触发器806中。如果T输入为高电平,无论何时当时钟输入选通时,T触发器改变状态(“切换”)。时钟信号线在图8中未示出,但可以输入到电路中的每个触发器(每个时钟输入由触发器上的小三角形表示)。如果T输入为低电平,则触发器保持先前的值。
T触发器的输出(“Q”)是在邮箱内存库之间切换的读指针722,如图7A至7F所示。读指针722作为控制信号被输入,该控制信号在内存库A就绪标记位787a和内存库B就绪标记位787b之间切换多路复用器808。当读指针722为低电平(二进制“0”)时,多路复用器808输出内存库A就绪标记787a。当读指针为高电平时,多路复用器808输出内存库B就绪标记787b。除了被输入到与门802之外,多路复用器808的输出设置邮箱事件标记789。
读指针722也被输入到异或门814。另一个输入到异或门814的是指令管线292的操作数提取阶段340输出的8位邮箱读地址812的第六位(R0到R7的R5)。异或门814的输出然后被替换回读取地址。第六位的翻转将物理地址812从内存库A地址改变为内存库B地址(例如,十六进制C0变为E0,并且DF变为FF),使得读指针位722控制哪个内存库被读取,将读取地址812重定向到头602。
读指针722被输入到与门858b中,并且被反相器856反转并输入到与门858a中。与门858a的另一个输入连接到RD完成872,并且与门858b的另一个输入也连接到RD完成872。与门858a的输出连接到J-K触发器862a的“K”输入,其作为内存库A就绪标记787a的复位。JK触发器的“J”输入设置输出的状态,“K”输入用作复位。与门858b的输出连接到J-K触发器862b的“K”输入,其作为内存库B就绪标记787b的复位。再一次,时钟信号线可以连接到触发器,但是在图8中未示出。
内存库A就绪标记位787a和内存库B就绪标记787b也被输入到多路复用器864,多路复用器864基于写指针720的状态有选择地输出这些标记中的一个。如果写指针720为低电平,则多路复用器864输出内存库A就绪标记位787a。如果写指针为高电平,则多路复用器864输出内存库B就绪标记位787b。多路复用器864的输出被输入到邮箱队列状态机840。
在状态机840复位之后,写指针720是“0”。一旦数据包到达,状态机840将检查邮箱就绪标记888(多路复用器864的输出)。如果邮箱就绪标记888是“1”,则状态机将等待直到其变为“0”。当读指针722为“0”并且事件标记清除寄存器逻辑生成RD完成脉冲872时,邮箱就绪标记888将变为“0”。这表示邮箱内存库已经被读取并且现在可以被状态机840写入。当状态机840已经完成了对该内存库的所有数据写入时,它将发出写入脉冲844,该写入脉冲将JK触发器862a设置并触发邮箱事件标记789。
写入脉冲844被输入到与门854a和与门854b。与门854a的输出连接到J-K触发器862a的“J”输入,其设置内存库A就绪标记787a。与门854b的输出连接到J-K触发器862b的“J”输入,其设置内存库B就绪标记787b。状态机840的输出还连接到T触发器850的输入“T”。T触发器850的输出“Q”是写指针720。写脉冲844将触发T触发器850,推进写指针720,使得下一个数据包将被写入到作为尾部604的内存库B。
除了控制多路复用器864之外,写指针720被输入到与门854b中,并且被反相器852反相并且被输入到与门854a中。写指针720也连接到异或门832的输入。异或门832的另一输入接收从事务接口272接收的写地址830的第六位(W0到W7的W5)。异或门932的输出然后与写入地址的其他位重新结合,以控制是否将数据包有效载荷操作数写入到内存库A寄存器686a或内存库B寄存器686b中,将写入地址830重定向到尾部604。地址可以从数据包标头取出(例如,通过数据事务接口272和/或状态机840)并被加载到事务接口272内的计数器中。每次写入有效载荷字时,计数器递增到内存库的下一个寄存器目前被指定为尾部604。
每个处理元素170的这种设计允许对内存库A寄存器686a(地址0xC0-0xDF)和内存库B寄存器686b(地址0xE0-0xFF)的写入操作。由处理器内核290写入这两个寄存器范围具有不同的结果。不管邮箱读指针722的值如何,处理器内核290写入寄存器地址范围0xC0-0xDF(内存库A)将总是映射到范围为0xE0-0xFF的内存库B 686b的寄存器。处理器内核290被防止写入物理地址范围为0xC0-0xDF的寄存器,以防止由于数据包的数据覆盖和/或混淆这些写入的影响而导致损坏的风险。
处理器内核290写入内存库B寄存器686b(地址范围0xE0-0xFF)将物理映射到该范围。在这个范围内的写操作与在地址范围0x00-0xBF中的通用操作数寄存器685的写入完全相同,其中写地址总是写寄存器的物理地址。邮箱双内存库“翻转”行为对此地址范围的写入访问没有影响。但是,当邮箱被禁用时,建议只允许处理器内核290写入该范围。
图9是示出将写入和读取事务操作引导到充当邮箱队列的内存库的操作数寄存器集合的电路的示例的另一示意图。在图9的示例中,该邮箱包括四个寄存器内存库686a至686d,但该电路可容易地扩展到两个内存库或在2n个内存库(n>1)的向上迭代中。
在图9中,图8的T型触发器806和反相器856被2位二进制计数器906和2至4行解码器907的结合所代替。响应于每个RD完成脉冲872,计数器906递增,输出2位读指针922。读指针922连接到选择内存库就绪信号787a到787d中的一个的4对1多路复用器908。多路复用器908的输出,如图8中多路复用器808的输出一样,连接到与门802的输入并设置邮箱事件标记789。
读指针922也连接到异或门814a和814b。其他输入到异或门814a和814b的是由指令管线292的操作数提取阶段340输出的八位邮箱读取地址812的第五和第六位(R0至R7的R4和R5)。异或门814a和814b的输出被替换回读取地址,将读取地址812重定向到当前指定为头602的寄存器。
读指针922也被输入到2至4行解码器907中。基于输入A0至A1处的读指针值,解码器907将其四个输出中的一个设为高电平,其余为低电平。将解码器907的每个输出Y0至Y3连接到与门858a至858d之一,858a至858d中的每一个都与相应J-K触发器862a至862d的“K”复位输入相连。如图8所示,J-K触发器862a至862d输出内存库就绪信号787a至787d。
T触发器850和反相器852被2位二进制计数器950和2至4行解码器951的结合所代替。响应于每个写入脉冲844,计数器950递增,输出2位写指针920。写指针920连接到选择内存库就绪信号787a至787d中的一个的4对1多路复用器964。多路复用器964的输出,如图8中多路复用器864的输出一样,是输入到状态机840中的邮箱就绪信号888。
写指针920也连接到异或门832a和832b。其他输入到异或门832a和832b的是由事务接口272输出的八位邮箱写入地址830的第五和第六位(W0至W7的W4和W5)。异或门832a和832b的输出被替换回写入地址,将写入地址830重定向到尾部604。
写指针920也被输入到2至4行解码器951。基于输入A0至A1的写指针值,解码器951将其四个输出中的一个设为高电平,其余为低电平。解码器951的每个输出Y0到Y3连接到与门854a到854d之一,854a到854d中每一个连接到相应的J-K触发器862a到862d的“J”置位输入端。
二进制计数器922和950循环计数,基于在“Cnt”处的信号输入的转变递增并且当计数超过其最大值时复位。可以通过控制2位二进制计数器906和950设置读指针922和写指针920的范围来设置要包括在邮箱中的内存库的数量。例如,专用寄存器286可以指定多少位将被用于读指针922和写指针920(未示出),邮箱600中的内存库的数量可以设置为2到2n(例如,在图9中,n=2,因为有四个并行内存库就绪电路)。
读和写指针的上限可以通过检测进行复位计数器906/950的“翻转”值来设置,计数器被分别加载为零。例如,为了仅写入图9中的两个内存库686,可以使用2位二进制计数器950的Q1输出或2至4行解码器951的Y2输出来触发写指针920的“翻转”。当写脉冲844将计数(作为计数器950的输出)推进到“2”(在序列0、1、2中)时,这将导致Q1位和Y2位变高电平,这可用于将计数器950复位为零。有效的结果是写指针920在0与1之间交替。为了触发该翻转,可以使用简单的逻辑,诸如将与门的一个输入连接到计数器950的Q1输出或解码器951的Y2输出,将与门的另一个输入连接到其中包含与计数限制相对应的解码值的专用寄存器。与门的输出变为“高电平”用于复位计数器950,使得当写指针920超过计数限制时,与门输出变高电平,并且计数器950被复位为零。
类似地,为了仅从两个内存库中读取,可以使用2位二进制计数器906的Q1输出或2至4行解码器907的Y2输出来触发读指针922的“翻转”。当RD完成脉冲872将计数(作为计数器906的输出)推进到“2”(在序列0,1,2中)时,这将导致Q1位和Y2位变为高电平,这可用于将计数器906复位为零。为了触发翻转,可以使用简单的逻辑,例如将与门的一个输入端连接到计数器906的Q1输出端或解码器907的Y2输出端,将与门的另一个输入端连接到包含对应于计数限制的解码值的寄存器。使用相同的解码值来在两个计数器906和950上设置限制。与门变为“高”的输出用于复位计数器906,使得当读指针922超过计数限制时,与门输出变高,并且计数器906被复位为零。
这种自适应地设置对使用多少个寄存器内存库686的限制的能力可以用图9中的电路进行扩展。例如,如果需要支持8个寄存器内存库的能力,将使用3位二进制计数器和3至8行解码器(替换906、907、950和951),则将有8组与门854/854和JK触发器862,多路复用器908和964将是八对一的,并且第三对异或门814/832将被添加用于地址转换。为了支持16个寄存器内存库,将使用4位二进制计数器和4至16行解码器,将有16组与门854/854和JK触发器862,多路复用器908和964将是16对1的,并且第三对和第四对异或门814/832将被添加用于地址转换。
为了复位电路的扩展版本中的计数器,将使用多个与门来自适应地配置电路以支持不同的计数限制。例如,如果电路配置为支持多达16个寄存器内存库,则第一个与门将具有连接到计数器的Q1输出或解码器的Y2输出的输入,第二个与门将具有连接到计数器的Q2输出或解码器的Y4输出的输入,第三个与门将具有连接到计数器的Q3输出或解码器的Y8输出的输入。第一、第二和第三与门中的每一个的另一个输入将被连接到包含对应于计数极限的解码值的寄存器的不同位。
第一、第二和第三与门的输出将被输入到3输入或门,其中或门的输出用于复位计数器(当任何与门输出变为“高电平”时,或门的输出将变为“高电平”)。因此,例如,如果只使用两个内存库,则计数限制设置为当计数达到“二”(在序列零、一、二中)时计数器将翻转。如果只使用四个内存库,则计数限制被设置为当计数达到“四”(在序列零、一、二、三、四)时计数器将翻转。如果仅使用八个内存库,则计数限制被设置为当计数达到“八”时计数器将翻转。为了使用全部十六个内存库,将与计数限制相对应的解码值设置为全零,以使当计数器达到其最大计数限制时计数器将复位,在循环回零之前指针920/922从零到十五计数。所描述的逻辑电路将被复制读写计数电路,读写使用相同的计数限制。通过这种方式,邮箱内使用的内存库数量可以自适应地设置。
如何使用直接寄存器操作的示例是当处理器内核290正在处理进程并将计算操作分发给另一处理元素170时。处理器内核290可以向另一个处理器发送指示操作的数据包,种子操作数,与其自己的一个操作数寄存器或多个操作数寄存器相对应的返回地址,以及当写入结果操作数时是否触发标记的指示(以及可能触发哪个标记)。
处理器芯片100的不同处理元素170使用的时钟信号可以彼此不同。例如,不同的簇150可以被独立计时。作为另一个示例,每个处理元素可以具有其自己的独立时钟。
直接到寄存器数据传输方法可以比直接内存访问(DMA)更快和更有效,其中由远程处理器写入由处理元素170使用的通用内存。在其他差异中,DMA方案可能需要写入内存,然后让目标处理器将来自内存的操作数加载到操作寄存器中,以便使用操作数执行指令。内存和操作数寄存器之间的这种传输需要时间和电力。而且,高速缓存通常与通用内存一起使用以加速数据传输。当外部处理器对另一个处理器的内存执行DMA写入,但本地处理器的高速缓存仍包含较旧的数据时,会出现高速缓存一致性问题。通过将操作数直接发送到操作寄存器,可以避免这种一致性问题。
处理器芯片100的编译器或汇编程序可以不需要特殊的指令或功能来促进处理元素到另一个处理元素的操作数寄存器284的数据传输。对表面上正常的变量的正常分配实际上可以仅基于分配给变量的地址将数据传输到目标处理元素。
可选地,处理器芯片100可以包括主要或专门用于这种处理元素间通信目的的多个高级操作数寄存器。这些寄存器可以被划分为多个部分以有效地创建进入目标处理器芯片100的数据的队列,进入超级簇130或进入簇160。这样的寄存器可以例如集成到各种路由器110、120、140和160。因为它们可以用作队列,所以这些寄存器可以仅供其它处理元素用于写入,并且仅供目标处理元素用于读取。另外,一个或多个事件标记寄存器可以与这些操作数寄存器相关联,以在数据已经写入这些寄存器时提醒目标处理器。
作为进一步的选择,处理器芯片100可以提供用于有效地将数据传输到邮箱的特殊指令。由于每个处理元素可能仅包含少量的邮箱寄存器,因此每个处理元素可以使用比寻址主内存时所需的更小的地址字段寻址(并且如果每个处理元素中只提供一个这样的邮箱,则可能根本没有地址字段)。
本公开的以上方面意在说明性的。他们被选择来解释本公开的原理和应用,并且不旨在穷举或限制本公开。所公开的方面的许多修改和变化对于本领域技术人员来说可以是显而易见的。计算机、微处理器设计和网络架构领域的普通技术人员应该认识到,这里描述的部件和步骤可以与其他部件或步骤或其组合互换,并且仍然实现了本发明公开的有益效果和优点。此外,对于本领域技术人员而言显而易见的是,可以在没有本文公开的一些或全部特定细节和步骤的情况下实践本公开。
如在本公开中所使用的,除非另有特别说明,否则术语“一”或“一个”可以包括一个或多个项目。此外,短语“基于”旨在表示“至少部分地基于”,除非另有特别说明。
本公开的实施方式可以参考以下条款进行描述:
1.一种集成在半导体芯片上的多处理器,包括:
与第一标识符相关联的第一处理元素,该第一处理元素包括包含第一操作数寄存器的第一处理器内核;以及
与第二标识符相关联的第二处理元素,该第二处理元素包括包含第二操作数寄存器的第二处理器内核;以及
通信路径,可通信地互连第一处理元素和第二处理元素,
其中:
第一操作数寄存器与第一寄存器地址相关联,并且第二处理元素可以使用第一标识符和第一寄存器地址经由通信路径访问第一操作数寄存器,以及
第二操作数寄存器与第二寄存器地址相关联,并且第一处理元素可以使用第二标识符和第二寄存器地址经由通信路径访问第二操作数寄存器。
2.根据条款1所述的多处理器,该通信路径包括数据包路由器,该数据包路由器被配置为使用包括标头以指示每个数据包的目标地址的数据包格式,其中:
第二处理元素向第一操作数寄存器的读取和写入事务的第一目标地址包括第一标识符和第一寄存器地址,以及
第一处理元素向第二操作数寄存器的读取和写入事务的第二目标地址包括第二标识符和第二寄存器地址。
3.根据条款1或2所述的多处理器,该第一处理元素还包括事务接口,所述事务接口将通信路径耦合到第一操作数寄存器,
其中经由通信路径的操作数寄存器读取事务处于一种格式,该格式指定将从其读取数据的目标寄存器的目标地址以及数据将要写入到的目的地地址,以及
事务接口,响应于接收到具有指定第一处理元素的第一操作数寄存器的第一目标地址并具有指定第二处理元素的第二操作数寄存器的第一目的地地址的第一读取事务,从第一操作数寄存器读取数据,并经由通信路径将数据传输到第一目的地地址。
4.根据条款1、2或3所述的多处理器,其中该第一处理器内核还包括:
指令执行管线;
包括多个寄存器内存库的队列,包括:
第一寄存器内存库,其包括与多个第三寄存器地址相关联的多个第三操作数寄存器,每个第三操作数寄存器与一个第三寄存器地址相关联;以及
第二寄存器内存库,其包括与多个第四寄存器地址相关联的多个第四操作数寄存器,每个第四操作数寄存器与一个第四寄存器地址相关联;
事件标记标识符,当数据被写入到队列中时,该标识符被设置以向指令执行管线指示数据可用,
第一逻辑电路,响应于第一内存库包含要由指令执行管线读取的数据,而将从第二处理元素到队列的写入事务定向到第二内存库;以及
第二逻辑电路,响应于第二内存库包含要由指令执行管线读取的数据、以及第一内存库中的数据已经被指令执行管线读取并清除,而将队列的指令执行管线的读取定向到第二内存库,
其中对于经由通信路径的写入事务,第二处理元素可以访问队列。
5.根据条款1、2或3所述的多处理器,该第一处理器内核还包括:
多个操作数寄存器,该多个操作数寄存器包括第一操作数寄存器;
指令执行管线,其被配置为解码指令,根据解码的指令从多个操作数寄存器中取出操作数,并且使用取出的操作数执行解码的指令;
微定序器,其提供由指令执行管线来执行的每个指令并基于时钟信号控制指令执行管线的定时;以及
算术逻辑单元(ALU),被配置为根据解码的指令使用存储在多个操作数寄存器中的操作数来执行指令执行管线的算术和逻辑操作,
其中该多个操作数寄存器中的每一操作数寄存器具有第一端口和第二端口,该第一端口可经由通信路径被访问,并且该第二端口可直接被指令执行管线访问,以及
指令执行管线提取存储在多个操作数寄存器中的操作数的延迟不长于时钟信号的两个周期。
6.根据条款5所述的多处理器,其中该指令执行管线被配置为对第一指令进行解码,该第一指令如在指令集中所定义的那样,直接编码为从第一操作数寄存器中取出第一源操作数,该指令集永久地将第一指令映射到第一操作数寄存器。
7.一种片上网络处理器,包括多个处理元素,每个所述处理元素包括:
算术逻辑单元;
第一多个操作数寄存器,该第一多个操作数寄存器中的每一个操作数寄存器具有全局地址,该片上网络处理器上的每个全局地址不同;
指令执行管线,其被配置为对指令进行解码,根据解码的指令直接从第一多个操作数寄存器读取数据,以及使用算术逻辑单元执行解码的指令;以及
微定序器,其被配置为向指令执行管线提供用于执行的指令流,
其中处理元素可以使用对该操作数寄存器的全局地址的读取或写入来读取并写入其他处理元素的第一多个操作数寄存器的每个操作数寄存器。
8.根据条款7所述的片上网络处理器,还包括:
可通信地互连多个处理元素中的每一个的网络,该网络是基于总线的网络或基于数据包的网络,
其中由一个处理元素对另一个处理元素的操作数寄存器的读取或写入的数据经由该网络传送,
该基于总线的网络包括地址线和第一数据线,该基于总线的网络被配置为经由地址线传送操作数寄存器的全局地址,并且经由第一数据线传送数据,以及
该基于数据包的网络包括第二数据线,该基于数据包的网络被配置为经由第二数据线在数据包标头中传送操作数寄存器的全局地址以及经由第二数据线在数据包主体中传送数据。
9.根据条款7所述的片上网络处理器,还包括:
可通信地互连多个处理元素中的每一个的网络,该网络是基于数据包的网络,
其中由另一个处理元素的第一多个操作数寄存器的第一操作数寄存器的一个处理元素的读取通过数据包经由网络传送,第一操作数寄存器的第一全局地址在数据包的标头中被指定,该数据包还包括从第一操作数寄存器读取的数据将被写入的位置的第二全局地址。
10.根据条款7、8或9所述的片上网络处理器,所述处理元素中的每一个还包括:
包括多个操作数寄存器内存库的队列,指令执行管线直接从队列中读取数据,如指令流中所指定的;
第一地址转换开关电路,其将指令执行管线的读取重定向到在包含要通过指令执行管线读取的第一数据的队列的标头处的多个内存库的一个内存库,在指令执行管线指示已经完成第一数据的读取后,将标头前进到包含第二数据的多个内存库的下一个内存库;以及
第二地址转换开关电路,其将另一处理元素向队列关联的全局地址的写入重定向到就绪接受数据的队列尾部处的多个内存库中的一个内存库,对应于空内存库或者指令执行管线已经指示完成了读取的内存库,
其中在指令执行管线从队列标头处的内存库读取数据并且指示它已完成该内存库的读取之后,该内存库被队列回收以就绪接受数据。
11.根据条款10所述的片上网络处理器,所述处理元素中的每一个还包括标记寄存器,所述标记寄存器包括事件标记位,所述事件标记位当数据存储在要被指令管线读取的队列中时被设置,事件标记位指示数据在队列中可用。
12.根据条款10所述的片上网络处理器,其中多个操作数寄存器的内存库包括2n个内存库,其中n大于1。
13.一种多处理器系统中的方法,包括:
由第一处理元素经由总线使用第一操作数寄存器的第一地址将第一数据写入第二处理元素的第一操作数寄存器;
由第二处理元素的指令管线解码第一指令;
由指令管线通过直接访问第一操作数寄存器来提取第一数据;以及
由指令管线使用第一数据执行第一指令。
14.根据条款13所述的方法,还包括:
由第一处理元素使用第一地址从第二处理元素的第一操作数寄存器读取第二数据,包括:
由第一处理元素经由所述总线发送指定第一地址的读取,并且还包括第一处理元素的第二操作数寄存器的第二地址以接收存储在第一操作数寄存器中的第二数据;
由第二处理元素经由所述总线发送指定第二地址的应答,并且包括存储在第一操作数寄存器中的第二数据;以及
将第二数据存储在第一处理元素的第二操作数寄存器中。
15.根据条款13所述的方法,还包括:
由第一处理元素经由所述总线将包括第二数据的第一写入发送到第二处理元素的第二操作数寄存器的第二地址;
在第二处理元素处接收第一写入;
将第二数据存储在第二操作数寄存器中;
设置标记位以向指令管线指示第二数据已被存储在第二操作数寄存器中;
由第一处理元素经由所述总线在发送第一写入之后向第二地址发送包括第三数据的第二写入;
在第二处理元素处接收第二写入;
响应于第二操作数寄存器包含将被指令管线读取的第二数据,将第二写入重定向到第二处理元素的第三操作数寄存器的第三地址;
在设置标记位之后由指令管线经由第二地址提取第二数据;
由指令管线使用第二数据执行第二指令;
由指令管线指示第二数据已被读取;
由指令管线经由第二地址将下一次提取重定向到第三操作数寄存器中的第三数据;
由指令管线使用第三数据执行第三指令;以及
由指令管线指示第三数据已被读取。
16.根据条款15所述的方法,还包括:
由第一处理元素经由所述总线在发送第二写入之后向第二地址发送包括第四数据的第三写入;
在指示第二数据已被读取之后,在第二处理元素处接收第三写入;
将第四数据存储在第二操作数寄存器中;
在指示第三数据已被读取之后,通过指令管线经由第二地址提取第四数据;以及
由指令管线使用第四数据执行第四指令。
17.根据条款13所述的方法,其中以数据包格式经由总线写入第一数据,第一地址在数据包的标头中指定,并且第一数据是数据包的有效载荷。
18.根据条款13所述的方法,还包括响应于第一数据被写入到第一操作数寄存器,设置标记位,其中所述提取响应于标记位的设置。
19.根据条款13所述的方法,还包括:
由第二处理元素经由所述总线,将第二指令以及第二指令的结果所要写入的第一地址一起发送给第一处理元素;以及
由第一处理元素执行第二指令,结果是将第一数据写入第二处理元素的第一操作数寄存器。
20.根据条款19所述的方法,其中当将第二指令的结果写入第一地址时,第二处理元素指示第一处理元素设置第二处理元素的标记位,该方法还包括:
在将第二指令传输到第一处理元素之后,由第二处理元素切断控制指令管线的操作的时序的时钟信号;
由第一处理元素设置第二处理元素的标记位以指示第一数据写入第一操作数寄存器;以及
响应于标记位的设置,由第二处理元素恢复时钟信号。
Claims (15)
1.一种集成在半导体芯片上的多处理器,包括:
与第一标识符相关联的第一处理元素,该第一处理元素包括包含第一操作数寄存器的第一处理器内核;以及
与第二标识符相关联的第二处理元素,该第二处理元素包括包含第二操作数寄存器的第二处理器内核;以及
通信路径,可通信地互连第一处理元素和第二处理元素,
其中:
第一操作数寄存器与第一寄存器地址相关联,并且第二处理元素可以使用第一标识符和第一寄存器地址经由通信路径访问第一操作数寄存器,以及
第二操作数寄存器与第二寄存器地址相关联,并且第一处理元素可以使用第二标识符和第二寄存器地址经由通信路径访问第二操作数寄存器。
2.如权利要求1所述的多处理器,该通信路径包括数据包路由器,该数据包路由器被配置为使用包括标头以指示每个数据包的目标地址的数据包格式,其中:
第二处理元素向第一操作数寄存器的读取和写入事务的第一目标地址包括第一标识符和第一寄存器地址,以及
第一处理元素向第二操作数寄存器的读取和写入事务的第二目标地址包括第二标识符和第二寄存器地址。
3.如权利要求1所述的多处理器,该第一处理元素还包括事务接口,所述事务接口将通信路径耦合到第一操作数寄存器,
其中经由通信路径的操作数寄存器读取事务处于一种格式,该格式指定将从其读取数据的目标寄存器的目标地址以及数据将要写入到的目的地地址,以及
该事务接口,响应于接收到具有指定第一处理元素的第一操作数寄存器的第一目标地址并具有指定第二处理元素的第二操作数寄存器的第一目的地地址的第一读取事务,从第一操作数寄存器读取数据,并经由通信路径将数据传输到第一目的地地址。
4.如权利要求1所述的多处理器,其中该第一处理器内核还包括:
指令执行管线;
包括多个寄存器内存库的队列,包括:
第一寄存器内存库,其包括与多个第三寄存器地址相关联的多个第三操作数寄存器,每个第三操作数寄存器与一个第三寄存器地址相关联;以及
第二寄存器内存库,其包括与多个第四寄存器地址相关联的多个第四操作数寄存器,每个第四操作数寄存器与一个第四寄存器地址相关联;
事件标记标识符,当数据被写入到队列中时,该标识符被设置以向指令执行管线指示数据可用,
第一逻辑电路,响应于第一内存库包含要由指令执行管线读取的数据,而将从第二处理元素到队列的写入事务定向到第二内存库;以及
第二逻辑电路,响应于第二内存库包含要由指令执行管线读取的数据、以及第一内存库中的数据已经被指令执行管线读取并清除,而将队列的指令执行管线的读取定向到第二内存库,
其中对于经由通信路径的写入事务,第二处理元素可以访问队列。
5.如权利要求1所述的多处理器,该第一处理器内核还包括:
多个操作数寄存器,该多个操作数寄存器包括第一操作数寄存器;以及
指令执行管线,其被配置为解码指令,根据解码的指令从多个操作数寄存器中取出操作数,并且使用取出的操作数执行解码的指令,
其中该多个操作数寄存器中的每一操作数寄存器具有第一端口和第二端口,该第一端口可经由通信路径访问,并且该第二端口可直接被指令执行管线访问,以及
指令执行管线提取存储在多个操作数寄存器中的操作数的延迟不长于时钟信号的两个周期。
6.一种片上网络处理器,包括多个处理元素,每个所述处理元素包括:
算术逻辑单元;
第一多个操作数寄存器,该第一多个操作数寄存器中的每一个操作数寄存器具有全局地址,该片上网络处理器上的每个全局地址不同;
指令执行管线,其被配置为对指令进行解码,根据解码的指令直接从第一多个操作数寄存器读取数据,以及使用算术逻辑单元执行解码的指令;以及
微定序器,其被配置为向指令执行管线提供用于执行的指令流,
其中处理元素可以使用对该操作数寄存器的全局地址的读取或写入来读取并写入其他处理元素的第一多个操作数寄存器的每个操作数寄存器。
7.如权利要求6所述的片上网络处理器,还包括:
可通信地互连多个处理元素中的每一个的网络,该网络是基于总线的网络或基于数据包的网络,
其中由一个处理元素对另一个处理元素的操作数寄存器的读取或写入数据经由该网络传送,
该基于总线的网络包括地址线和第一数据线,该基于总线的网络被配置为经由地址线传送操作数寄存器的全局地址,并且经由第一数据线传送数据,以及
该基于数据包的网络包括第二数据线,该基于数据包的网络被配置为经由第二数据线在数据包标头中传送操作数寄存器的全局地址以及在数据包主体中传送数据。
8.如权利要求6所述的片上网络处理器,还包括:
可通信地互连多个处理元素中的每一个的网络,该网络是基于数据包的网络,
其中由另一个处理元素的第一多个操作数寄存器的第一操作数寄存器的一个处理元素的读取通过数据包经由网络传送,第一操作数寄存器的第一全局地址在数据包的标头中被指定,该数据包还包括从第一操作数寄存器读取的数据将被写入的位置的第二全局地址。
9.根据权利要求6所述的片上网络处理器,所述处理元素中的每一个还包括:
包括多个操作数寄存器内存库的队列,指令执行管线直接从队列中读取数据,如指令流中所指定的;
第一地址转换开关电路,其将指令执行管线的读取重定向到在包含要由指令执行管线读取的第一数据的队列的标头处的多个内存库的一个内存库,在指令执行管线指示已经完成第一数据的读取后,将标头前进到包含第二数据的多个内存库的下一个内存库;以及
第二地址转换开关电路,其将另一处理元素向队列关联的全局地址的写入重定向到就绪接受数据的队列尾部处的多个内存库中的一个内存库,对应于空内存库或者指令执行管线已经指示完成了读取的内存库,
其中在指令执行管线从队列标头处的内存库读取数据并且指示它已完成该内存库的读取之后,该内存库被队列回收以就绪接受数据。
10.根据权利要求9所述的片上网络处理器,所述处理元素中的每一个还包括标记寄存器,其包括事件标记位,所述事件标记位当数据存储在要被指令管线读取的队列中时被设置,事件标记位指示数据在队列中可用。
11.一种多处理器系统中的方法,包括:
由第一处理元素经由总线使用第一操作数寄存器的第一地址将第一数据写入第二处理元素的第一操作数寄存器;
由第二处理元素的指令管线解码第一指令;
由指令管线通过直接访问第一操作数寄存器来提取第一数据;以及
由指令管线使用第一数据执行第一指令。
12.根据权利要求11所述的方法,其中以数据包格式经由总线写入第一数据,第一地址在数据包的标头中指定,并且第一数据是数据包的有效载荷。
13.如权利要求11所述的方法,还包括响应于第一数据被写入第一操作数寄存器,设置标记位,其中所述提取是响应于标记位的设置。
14.如权利要求11所述的方法,还包括:
由第二处理元素经由所述总线,将第二指令与第二指令的结果所要写入的第一地址一起传输给第一处理元素;和
由第一处理元素执行第二指令,结果是将第一数据写入第二处理元素的第一操作数寄存器。
15.如权利要求14所述的方法,其中,当将第二指令的结果写入第一地址时,第二处理元素指示第一处理元素设置第二处理元素的标记位,该方法还包括:
在将第二指令传输到第一处理元素之后,由第二处理元素切断控制指令管线的操作的时序的时钟信号;
由第一处理元素设置第二处理元素的标记位以指示将第一数据写入第一操作数寄存器;以及
响应于标记位的设置由第二处理元素恢复时钟信号。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/921,377 US20170116154A1 (en) | 2015-10-23 | 2015-10-23 | Register communication in a network-on-a-chip architecture |
US14/921,377 | 2015-10-23 | ||
PCT/US2016/055402 WO2017069948A1 (en) | 2015-10-23 | 2016-10-05 | Register communication in a network-on-a-chip architecture |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108475194A true CN108475194A (zh) | 2018-08-31 |
Family
ID=58557929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680076219.7A Pending CN108475194A (zh) | 2015-10-23 | 2016-10-05 | 在片上网络架构中的寄存器通信 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20170116154A1 (zh) |
EP (1) | EP3365769A4 (zh) |
CN (1) | CN108475194A (zh) |
WO (1) | WO2017069948A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290856A (zh) * | 2020-03-23 | 2020-06-16 | 优刻得科技股份有限公司 | 数据处理装置和方法 |
CN111782271A (zh) * | 2020-06-29 | 2020-10-16 | Oppo广东移动通信有限公司 | 一种软硬件交互方法及装置、存储介质 |
CN112181493A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 寄存器网络架构和寄存器访问方法 |
CN114328323A (zh) * | 2021-12-01 | 2022-04-12 | 北京三快在线科技有限公司 | 一种数据中转单元及基于数据中转单元的数据传输方法 |
CN117130668A (zh) * | 2023-10-27 | 2023-11-28 | 南京沁恒微电子股份有限公司 | 一种处理器取指重定向时序优化电路 |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10157060B2 (en) | 2011-12-29 | 2018-12-18 | Intel Corporation | Method, device and system for control signaling in a data path module of a data stream processing engine |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US10511353B2 (en) * | 2017-07-12 | 2019-12-17 | Micron Technology, Inc. | System for optimizing routing of communication between devices and resource reallocation in a network |
US10516606B2 (en) | 2017-07-12 | 2019-12-24 | Micron Technology, Inc. | System for optimizing routing of communication between devices and resource reallocation in a network |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US11277455B2 (en) | 2018-06-07 | 2022-03-15 | Mellanox Technologies, Ltd. | Streaming system |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator |
US11200186B2 (en) * | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US11099778B2 (en) * | 2018-08-08 | 2021-08-24 | Micron Technology, Inc. | Controller command scheduling in a memory system to increase command bus utilization |
US20200106828A1 (en) * | 2018-10-02 | 2020-04-02 | Mellanox Technologies, Ltd. | Parallel Computation Network Device |
US11163528B2 (en) | 2018-11-29 | 2021-11-02 | International Business Machines Corporation | Reformatting matrices to improve computing efficiency |
US10956361B2 (en) * | 2018-11-29 | 2021-03-23 | International Business Machines Corporation | Processor core design optimized for machine learning applications |
CN111260045B (zh) * | 2018-11-30 | 2022-12-02 | 上海寒武纪信息科技有限公司 | 译码器和原子指令解析方法 |
US11625393B2 (en) | 2019-02-19 | 2023-04-11 | Mellanox Technologies, Ltd. | High performance computing system |
EP3699770A1 (en) | 2019-02-25 | 2020-08-26 | Mellanox Technologies TLV Ltd. | Collective communication system and methods |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11750699B2 (en) | 2020-01-15 | 2023-09-05 | Mellanox Technologies, Ltd. | Small message aggregation |
US11252027B2 (en) | 2020-01-23 | 2022-02-15 | Mellanox Technologies, Ltd. | Network element supporting flexible data reduction operations |
US11876885B2 (en) | 2020-07-02 | 2024-01-16 | Mellanox Technologies, Ltd. | Clock queue with arming and/or self-arming features |
CN112379928B (zh) * | 2020-11-11 | 2023-04-07 | 海光信息技术股份有限公司 | 指令调度方法以及包括指令调度单元的处理器 |
US11556378B2 (en) | 2020-12-14 | 2023-01-17 | Mellanox Technologies, Ltd. | Offloading execution of a multi-task parameter-dependent operation to a network device |
CN113282240A (zh) * | 2021-05-24 | 2021-08-20 | 深圳市盈和致远科技有限公司 | 存储空间数据读写方法、设备、存储介质及程序产品 |
US11922237B1 (en) | 2022-09-12 | 2024-03-05 | Mellanox Technologies, Ltd. | Single-step collective operations |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5329630A (en) * | 1988-03-23 | 1994-07-12 | Dupont Pixel Systems Limited | System and method using double-buffer preview mode |
US5848276A (en) * | 1993-12-06 | 1998-12-08 | Cpu Technology, Inc. | High speed, direct register access operation for parallel processing units |
US20040010652A1 (en) * | 2001-06-26 | 2004-01-15 | Palmchip Corporation | System-on-chip (SOC) architecture with arbitrary pipeline depth |
CN1599899A (zh) * | 2001-11-30 | 2005-03-23 | 快闪银科技公司 | 用于具有固定、专用计算元件的自适应集成电路的配置的装置、系统及方法 |
US20090122703A1 (en) * | 2005-04-13 | 2009-05-14 | Koninklijke Philips Electronics, N.V. | Electronic Device and Method for Flow Control |
CN104050028A (zh) * | 2013-03-13 | 2014-09-17 | 英特尔公司 | 用于触发和跟踪初级可调节结构内的片上系统结构事务的方法和装置 |
CN104081722A (zh) * | 2012-01-13 | 2014-10-01 | 英特尔公司 | SoC构造中的高效对等通信支持 |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4974169A (en) * | 1989-01-18 | 1990-11-27 | Grumman Aerospace Corporation | Neural network with memory cycling |
CA2073185A1 (en) * | 1990-01-05 | 1991-07-06 | Won S. Kim | Parallel processor memory system |
US5161156A (en) * | 1990-02-02 | 1992-11-03 | International Business Machines Corporation | Multiprocessing packet switching connection system having provision for error correction and recovery |
US5867501A (en) * | 1992-12-17 | 1999-02-02 | Tandem Computers Incorporated | Encoding for communicating data and commands |
US6157967A (en) * | 1992-12-17 | 2000-12-05 | Tandem Computer Incorporated | Method of data communication flow control in a data processing system using busy/ready commands |
US5659785A (en) * | 1995-02-10 | 1997-08-19 | International Business Machines Corporation | Array processor communication architecture with broadcast processor instructions |
US6092174A (en) * | 1998-06-01 | 2000-07-18 | Context, Inc. | Dynamically reconfigurable distributed integrated circuit processor and method |
US6513108B1 (en) * | 1998-06-29 | 2003-01-28 | Cisco Technology, Inc. | Programmable processing engine for efficiently processing transient data |
US6983350B1 (en) * | 1999-08-31 | 2006-01-03 | Intel Corporation | SDRAM controller for parallel processor architecture |
US7158520B1 (en) * | 2002-03-22 | 2007-01-02 | Juniper Networks, Inc. | Mailbox registers for synchronizing header processing execution |
US7653912B2 (en) * | 2003-05-30 | 2010-01-26 | Steven Frank | Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations |
US8296550B2 (en) * | 2005-08-29 | 2012-10-23 | The Invention Science Fund I, Llc | Hierarchical register file with operand capture ports |
US20070083735A1 (en) * | 2005-08-29 | 2007-04-12 | Glew Andrew F | Hierarchical processor |
US7793074B1 (en) * | 2006-04-14 | 2010-09-07 | Tilera Corporation | Directing data in a parallel processing environment |
US7882307B1 (en) * | 2006-04-14 | 2011-02-01 | Tilera Corporation | Managing cache memory in a parallel processing environment |
US7577820B1 (en) * | 2006-04-14 | 2009-08-18 | Tilera Corporation | Managing data in a parallel processing environment |
JP2008276331A (ja) * | 2007-04-25 | 2008-11-13 | Toshiba Corp | マルチプロセッサの制御装置及び方法 |
JP2009301101A (ja) * | 2008-06-10 | 2009-12-24 | Nec Corp | プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法 |
US20100191814A1 (en) * | 2008-12-23 | 2010-07-29 | Marco Heddes | System-On-A-Chip Employing A Network Of Nodes That Utilize Receive Side Flow Control Over Channels For Messages Communicated Therebetween |
EP2273378B1 (en) * | 2009-06-23 | 2013-08-07 | STMicroelectronics S.r.l. | Data stream flow controller and computing system architecture comprising such a flow controller |
JP5150591B2 (ja) * | 2009-09-24 | 2013-02-20 | 株式会社東芝 | 半導体装置及びホスト機器 |
US8250260B2 (en) * | 2009-12-15 | 2012-08-21 | International Business Machines Corporation | Method, arrangement, data processing program and computer program product for exchanging message data in a distributed computer system |
US8738860B1 (en) * | 2010-10-25 | 2014-05-27 | Tilera Corporation | Computing in parallel processing environments |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
EP2696289B1 (en) * | 2011-04-07 | 2016-12-07 | Fujitsu Limited | Information processing device, parallel computer system, and computation processing device control method |
US9448940B2 (en) * | 2011-10-28 | 2016-09-20 | The Regents Of The University Of California | Multiple core computer processor with globally-accessible local memories |
US9021237B2 (en) | 2011-12-20 | 2015-04-28 | International Business Machines Corporation | Low latency variable transfer network communicating variable written to source processing core variable register allocated to destination thread to destination processing core variable register allocated to source thread |
EP2894568B1 (en) * | 2012-09-07 | 2018-03-28 | Fujitsu Limited | Information processing device, parallel computer system and information processing device control method |
KR20150064197A (ko) * | 2012-12-26 | 2015-06-10 | 인텔 코포레이션 | 인접한 수집/분산 연산들의 통합 |
US9552288B2 (en) * | 2013-02-08 | 2017-01-24 | Seagate Technology Llc | Multi-tiered memory with different metadata levels |
US9330432B2 (en) * | 2013-08-19 | 2016-05-03 | Apple Inc. | Queuing system for register file access |
GB2519801A (en) * | 2013-10-31 | 2015-05-06 | Ibm | Computing architecture and method for processing data |
US9319232B2 (en) * | 2014-04-04 | 2016-04-19 | Netspeed Systems | Integrated NoC for performing data communication and NoC functions |
KR20150127914A (ko) * | 2014-05-07 | 2015-11-18 | 에스케이하이닉스 주식회사 | 복수의 프로세서들을 포함하는 반도체 장치 및 그것의 동작 방법 |
US10678544B2 (en) * | 2015-09-19 | 2020-06-09 | Microsoft Technology Licensing, Llc | Initiating instruction block execution using a register access instruction |
-
2015
- 2015-10-23 US US14/921,377 patent/US20170116154A1/en not_active Abandoned
-
2016
- 2016-10-05 EP EP16857989.4A patent/EP3365769A4/en not_active Withdrawn
- 2016-10-05 CN CN201680076219.7A patent/CN108475194A/zh active Pending
- 2016-10-05 WO PCT/US2016/055402 patent/WO2017069948A1/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5329630A (en) * | 1988-03-23 | 1994-07-12 | Dupont Pixel Systems Limited | System and method using double-buffer preview mode |
US5848276A (en) * | 1993-12-06 | 1998-12-08 | Cpu Technology, Inc. | High speed, direct register access operation for parallel processing units |
US20040010652A1 (en) * | 2001-06-26 | 2004-01-15 | Palmchip Corporation | System-on-chip (SOC) architecture with arbitrary pipeline depth |
CN1599899A (zh) * | 2001-11-30 | 2005-03-23 | 快闪银科技公司 | 用于具有固定、专用计算元件的自适应集成电路的配置的装置、系统及方法 |
US20090122703A1 (en) * | 2005-04-13 | 2009-05-14 | Koninklijke Philips Electronics, N.V. | Electronic Device and Method for Flow Control |
CN104081722A (zh) * | 2012-01-13 | 2014-10-01 | 英特尔公司 | SoC构造中的高效对等通信支持 |
CN104050028A (zh) * | 2013-03-13 | 2014-09-17 | 英特尔公司 | 用于触发和跟踪初级可调节结构内的片上系统结构事务的方法和装置 |
Non-Patent Citations (1)
Title |
---|
刘有耀: "片上网络拓扑结构与通信方法研究", 《中国博士学位论文全文数据库 (信息科技辑)》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290856A (zh) * | 2020-03-23 | 2020-06-16 | 优刻得科技股份有限公司 | 数据处理装置和方法 |
CN111290856B (zh) * | 2020-03-23 | 2023-08-25 | 优刻得科技股份有限公司 | 数据处理装置和方法 |
CN111782271A (zh) * | 2020-06-29 | 2020-10-16 | Oppo广东移动通信有限公司 | 一种软硬件交互方法及装置、存储介质 |
CN112181493A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 寄存器网络架构和寄存器访问方法 |
CN114328323A (zh) * | 2021-12-01 | 2022-04-12 | 北京三快在线科技有限公司 | 一种数据中转单元及基于数据中转单元的数据传输方法 |
CN117130668A (zh) * | 2023-10-27 | 2023-11-28 | 南京沁恒微电子股份有限公司 | 一种处理器取指重定向时序优化电路 |
CN117130668B (zh) * | 2023-10-27 | 2023-12-29 | 南京沁恒微电子股份有限公司 | 一种处理器取指重定向时序优化电路 |
Also Published As
Publication number | Publication date |
---|---|
EP3365769A4 (en) | 2019-06-26 |
US20170116154A1 (en) | 2017-04-27 |
EP3365769A1 (en) | 2018-08-29 |
WO2017069948A1 (en) | 2017-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108475194A (zh) | 在片上网络架构中的寄存器通信 | |
US11113057B2 (en) | Streaming engine with cache-like stream data storage and lifetime tracking | |
CN103620555B (zh) | 抑制不正确的推测性执行路径上的控制转移指令 | |
US11994949B2 (en) | Streaming engine with error detection, correction and restart | |
CN104025060B (zh) | 支持近存储器和远存储器访问的存储器通道 | |
CN103257933B (zh) | 无序处理器中的事务存储器执行的方法、设备和系统 | |
CN103221918B (zh) | 具有分开的数据总线和消息总线的ic集群处理设备 | |
EP0927936B1 (en) | A microprocessor with configurable on-chip memory | |
CN103218208B (zh) | 用于实施成形的存储器访问操作的系统和方法 | |
US7797503B2 (en) | Configurable memory system and method for providing atomic counting operations in a memory device | |
CN109558168A (zh) | 低等待时间加速器 | |
US20180365122A1 (en) | Streaming engine with deferred exception reporting | |
CN103635877B (zh) | 乱序处理器中的分支目标存储与检索 | |
CN107851020A (zh) | 用于指令存储器效率的设备和处理架构 | |
US20060143415A1 (en) | Managing shared memory access | |
CN103729306B (zh) | 高速缓存块无效的方法和数据处理设备 | |
CN107239413A (zh) | 处理存储器请求 | |
CN103092782A (zh) | 用于闪存器件的闪存控制器硬件架构 | |
US20210349635A1 (en) | Streaming engine with fetch ahead hysteresis | |
CN109508206A (zh) | 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统 | |
US6539457B1 (en) | Cache address conflict mechanism without store buffers | |
CN107038125A (zh) | 具有加速预取请求的独立流水线的处理器高速缓存 | |
CN108845829A (zh) | 一种系统寄存器访问指令的执行方法 | |
US10275392B2 (en) | Data processing device | |
CN110603521B (zh) | 超线程处理器 |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180831 |