CN112148664A - 用于可配置空间加速器中的时间复用的装置、方法和*** - Google Patents

用于可配置空间加速器中的时间复用的装置、方法和*** Download PDF

Info

Publication number
CN112148664A
CN112148664A CN202010466831.3A CN202010466831A CN112148664A CN 112148664 A CN112148664 A CN 112148664A CN 202010466831 A CN202010466831 A CN 202010466831A CN 112148664 A CN112148664 A CN 112148664A
Authority
CN
China
Prior art keywords
data
network
configuration
processing element
input
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
CN202010466831.3A
Other languages
English (en)
Inventor
克尔敏·乔夫莱明
西蒙·C·小斯蒂利
米切尔·戴蒙
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN112148664A publication Critical patent/CN112148664A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/82Architectures of general purpose stored program computers data or demand driven
    • G06F15/825Dataflow computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Advance Control (AREA)

Abstract

描述了用于可配置空间加速器中的时间复用的装置、方法和***。在一个实施例中,一种可配置空间加速器(CSA)包括多个处理元件;以及多个处理元件之间的时间复用电路交换互连网络。在另一实施例中,一种可配置空间加速器(CSA)包括多个时间复用处理元件;以及多个时间复用处理元件之间的时间复用电路交换互连网络。

Description

用于可配置空间加速器中的时间复用的装置、方法和***
技术领域
本公开概括而言涉及电子设备,更具体而言,本公开的实施例涉及可 配置空间加速器的网络或处理元件的时间复用。
背景技术
处理器或者处理器的集合执行来自指令集的指令,例如指令集体系结 构(instruction set architecture,ISA)。指令集是与编程有关的计算机体系 结构的一部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻 址模式、存储器体系结构、中断和异常处理以及外部输入和输出(I/O)。 应当注意,这里的术语指令可以指宏指令,例如提供到处理器以便执行的 指令,或者指微指令,例如由处理器的解码器对宏指令解码而产生的指令。
发明内容
根据本公开的实施例的一方面,提供了一种处理器。该处理器包括: 核心,其具有解码器来将指令解码成解码后指令,并且具有执行单元来执 行解码后指令以执行第一操作;多个处理元件;以及多个处理元件之间的 互连网络,用来接收包括多个节点的数据流图的输入,其中数据流图将被 覆盖到互连网络和多个处理元件中,其中每个节点被表示为多个处理元件 中的数据流操作器,并且多个处理元件:将在互连网络的第一配置在时钟的第一时间段中活跃时通过相应传入操作对象集合到达多个处理元件的数 据流操作器处而执行数据流图的第二操作,并且将在互连网络的第二配置 在时钟的第二时间段中活跃时通过相应传入操作对象集合到达多个处理元 件的数据流操作器处而执行数据流图的第三操作。
根据本公开的实施例的另一方面,提供了一种装置。该装置包括:多 个处理元件之间的数据路径网络;以及多个处理元件之间的流控制路径网 络,其中数据路径网络和流控制路径网络将接收包括多个节点的数据流图 的输入,数据流图将被覆盖到数据路径网络、流控制路径网络和多个处理 元件中,其中每个节点被表示为多个处理元件中的数据流操作器,并且多 个处理元件:将在数据路径网络和流控制路径网络的第一配置在时钟的第一时间段中活跃时通过相应传入操作对象集合到达多个处理元件的数据流 操作器处而执行数据流图的第一操作,并且当数据路径网络和流控制路径 网络的第二配置在时钟的第二时间段中活跃时通过相应传入操作对象集合 到达多个处理元件的数据流操作器处而执行数据流图的第二操作。
根据本公开的实施例的另一方面,提供了一种方法。该方法包括:利 用处理器的核心的解码器将指令解码成解码后指令;利用处理器的核心的 执行单元执行解码后指令以执行第一操作;接收包括多个节点的数据流图 的输入;将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元 件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操 作器;当互连网络的第一配置在时钟的第一时间段中活跃时,通过相应传 入操作对象集合到达多个处理元件的数据流操作器处,利用互连网络和多 个处理元件执行数据流图的第二操作;并且当互连网络的第二配置在时钟 的第二时间段中活跃时,通过相应传入操作对象集合到达多个处理元件的 数据流操作器处,利用互连网络和多个处理元件执行数据流图的第三操作。
附图说明
在附图的各个图中以示例而非限制方式图示了本公开,附图中相似的 标记指示类似的要素并且其中:
图1图示了根据本公开的实施例的加速器分片(tile)。
图2图示了根据本公开的实施例的耦合到存储器的硬件处理器。
图3A图示了根据本公开的实施例的程序源。
图3B图示了根据本公开的实施例的图3A的程序源的数据流图。
图3C图示了根据本公开的实施例的具有被配置为执行图3B的数据流 图的多个处理元件的加速器。
图4图示了根据本公开的实施例的数据流图的示例执行。
图5图示了根据本公开的实施例的程序源。
图6图示了根据本公开的实施例的包括处理元件的阵列的加速器分片。
图7A图示了根据本公开的实施例的可配置数据路径网络。
图7B图示了根据本公开的实施例的可配置流控制路径网络。
图8图示了根据本公开的实施例的电路交换网络。
图9图示了根据本公开的实施例的包括加速器的硬件处理器分片。
图10图示了根据本公开的实施例的处理元件。
图11图示了根据本公开的实施例的请求地址文件(RAF)电路。
图12图示了根据本公开的实施例的耦合在多个加速器分片和多个缓存 堆(cachebank)之间的多个请求地址文件(RAF)电路。
图13图示了根据本公开的实施例的多个处理元件之间的时间复用网络。
图14A图示了根据本公开的实施例的多个处理元件之间的处于第一阶 段中的时间复用网络。
图14B图示了根据本公开的实施例的图14A中的多个处理元件之间的 处于第二阶段中的时间复用网络。
图15图示了根据本公开的实施例的多个处理元件之间的时间复用网络 内存储元件。
图16图示了根据本公开的实施例的用于带宽分配来控制多个处理元件 之间的时间复用网络的电路。
图17图示了根据本公开的实施例的用于投标来控制多个处理元件之间 的时间复用网络的电路。
图18A图示了根据本公开的实施例的处于第一阶段中的多个时间复用 处理元件之间的处于第二阶段中的时间复用网络。
图18B图示了根据本公开的实施例的图18A中的处于第二阶段中的多 个时间复用处理元件之间的处于第一阶段中的时间复用网络。
图19A图示了根据本公开的实施例的处于第一阶段中的上游处理元件 和处于第二阶段中的多个下游处理元件之间的时间复用网络内存储元件, 其中上游部分处于第二阶段中并且下游部分处于第一阶段中。
图19B图示了根据本公开的实施例的处于第二阶段中的上游处理元件 和处于第一阶段中的多个下游处理元件之间的图19A中的时间复用网络内 存储元件,其中上游部分处于第一阶段中并且下游部分处于第二阶段中。
图20图示了根据本公开的实施例的有和没有时间复用的可复用有状态 图流。
图21图示了根据本公开的实施例的描绘由时间复用处理元件进行的复 用操作的流程。
图22图示了根据本公开的实施例的流程图。
图23图示了根据本公开的实施例的流程图。
图24图示了根据本公开的实施例的处理元件的数据路径和控制路径。
图25图示了根据本公开的实施例的图24中的处理元件的输入控制器 和/或输入控制器的输入控制器电路。
图26图示了根据本公开的实施例的图25中的输入控制器和/或输入控 制器的入队电路。
图27图示了根据本公开的实施例的图24中的输入控制器和/或输入控 制器的状态确定器。
图28图示了根据本公开的实施例的头部确定器状态机。
图29图示了根据本公开的实施例的尾部确定器状态机。
图30图示了根据本公开的实施例的计数确定器状态机。
图31图示了根据本公开的实施例的入队确定器状态机。
图32图示了根据本公开的实施例的未满确定器状态机。
图33图示了根据本公开的实施例的非空确定器状态机。
图34图示了根据本公开的实施例的有效确定器状态机。
图35图示了根据本公开的实施例的图24中的处理元件的输出控制器 和/或输出控制器的输出控制器电路。
图36图示了根据本公开的实施例的图25中的输出控制器和/或输出控 制器的入队电路。
图37图示了根据本公开的实施例的图24中的输出控制器和/或输出控 制器的状态确定器。
图38图示了根据本公开的实施例的头部确定器状态机。
图39图示了根据本公开的实施例的尾部确定器状态机。
图40图示了根据本公开的实施例的计数确定器状态机。
图41图示了根据本公开的实施例的入队确定器状态机。
图42图示了根据本公开的实施例的未满确定器状态机。
图43图示了根据本公开的实施例的非空确定器状态机。
图44图示了根据本公开的实施例的有效确定器状态机。
图45图示了根据本公开的实施例的伪代码函数调用的数据流图。
图46图示了根据本公开的实施例的具有多个网络数据流端点电路的处 理元件的空间阵列。
图47图示了根据本公开的实施例的网络数据流端点电路。
图48图示了根据本公开的实施例的发送操作和接收操作的数据格式。
图49图示了根据本公开的实施例的发送操作的另一数据格式。
图50图示了根据本公开的实施例的配置电路元件(例如,网络数据流 端点电路)数据格式来针对发送(例如,切换)操作和接收(例如,拾取) 操作配置电路元件(例如,网络数据流端点电路)。
图51图示了根据本公开的实施例的配置数据格式,该配置数据格式在 其输入、输出和控制数据被注释在电路上的情况下针对发送操作配置电路 元件(例如,网络数据流端点电路)。
图52图示了根据本公开的实施例的配置数据格式,该配置数据格式在 其输入、输出和控制数据被注释在电路上的情况下针对选中操作配置电路 元件(例如,网络数据流端点电路)。
图53图示了根据本公开的实施例的配置数据格式,该配置数据格式在 其输入、输出和控制数据被注释在电路上的情况下针对Switch(切换)操 作配置电路元件(例如,网络数据流端点电路)。
图54图示了根据本公开的实施例的配置数据格式,该配置数据格式在 其输入、输出和控制数据被注释在电路上的情况下针对SwitchAny(切换 任何)操作配置电路元件(例如,网络数据流端点电路)。
图55图示了根据本公开的实施例的配置数据格式,该配置数据格式在 其输入、输出和控制数据被注释在电路上的情况下针对Pick(拾取)操作 配置电路元件(例如,网络数据流端点电路)。
图56图示了根据本公开的实施例的配置数据格式,该配置数据格式在 其输入、输出和控制数据被注释在电路上的情况下针对PickAny(拾取任 何)操作配置电路元件(例如,网络数据流端点电路)。
图57图示了根据本公开的实施例的网络数据流端点电路选择操作来执 行。
图58图示了根据本公开的实施例的网络数据流端点电路。
图59图示了根据本公开的实施例的网络数据流端点电路在执行拾取操 作的同时接收输入零(0)。
图60图示了根据本公开的实施例的网络数据流端点电路在执行拾取操 作的同时接收输入一(1)。
图61图示了根据本公开的实施例的网络数据流端点电路在执行拾取操 作的同时输出选中输入。
图62图示了根据本公开的实施例的流程图。
图63图示了根据本公开的实施例的被划分成三个区域(结果区域、三 个潜在进位区域和门控区域)的浮点乘法器。
图64图示了根据本公开的实施例的具有多个处理元件的加速器的运行 中配置。
图65图示了根据本公开的实施例的运行中管线式提取的快照。
图66图示了根据本公开的实施例的加速器的编译工具链。
图67图示了根据本公开的实施例的加速器的编译器。
图68A图示了根据本公开的实施例的循序汇编代码。
图68B图示了根据本公开的实施例的图68A的循序汇编代码的数据流 汇编代码。
图68C图示了根据本公开的实施例的针对加速器的图68B的数据流汇 编代码的数据流图。
图69A图示了根据本公开的实施例的C源代码。
图69B图示了根据本公开的实施例的图69A的C源代码的数据流汇编 代码。
图69C根据本公开的实施例对于加速器图示了图69B的数据流汇编代 码的数据流图。
图70A图示了根据本公开的实施例的C源代码。
图70B图示了根据本公开的实施例的图70A的C源代码的数据流汇编 代码。
图70C图示了根据本公开的实施例的针对加速器图70B的数据流汇编 代码的数据流图。
图71A图示了根据本公开的实施例的流程图。
图71B图示了根据本公开的实施例的流程图。
图72图示了根据本公开的实施例的吞吐量对每操作能量图。
图73图示了根据本公开的实施例的包括处理元件的阵列和本地配置控 制器的加速器分片。
图74A-74C图示了根据本公开的实施例的本地配置控制器配置数据路 径网络。
图75图示了根据本公开的实施例的配置控制器。
图76图示了根据本公开的实施例的包括处理元件的阵列、配置缓存和 本地配置控制器的加速器分片。
图77图示了根据本公开的实施例的包括处理元件的阵列和具有重配置 电路的配置和异常处理控制器的加速器分片。
图78图示了根据本公开的实施例的重配置电路。
图79图示了根据本公开的实施例的包括处理元件的阵列和具有重配置 电路的配置和异常处理控制器的加速器分片。
图80图示了根据本公开的实施例的包括处理元件的阵列和耦合到分片 级异常聚合器的夹层异常聚合器的加速器分片。
图81图示了根据本公开的实施例的具有异常生成器的处理元件。
图82图示了根据本公开的实施例的包括处理元件的阵列和本地提取控 制器的加速器分片。
图83A-83C图示了根据本公开的实施例的本地提取控制器配置数据路 径网络。
图84图示了根据本公开的实施例的提取控制器。
图85图示了根据本公开的实施例的流程图。
图86图示了根据本公开的实施例的流程图。
图87A是根据本公开的实施例的采用介于存储器子***和加速硬件之 间的存储器排序电路的***的框图。
图87B是根据本公开的实施例的图87A的***的框图,但采用了多个 存储器排序电路。
图88是根据本公开的实施例图示出进出加速硬件的存储器操作的一般 功能的框图。
图89是根据本公开的实施例图示出存储操作的空间依从流的框图。
图90是根据本公开的实施例的图87的存储器排序电路的详细框图。
图91是根据本公开的实施例的图87的存储器排序电路的微体系结构 的流程图。
图92是根据本公开的实施例的可执行确定器电路的框图。
图93是根据本公开的实施例的优先级编码器的框图。
图94是根据本公开的实施例的逻辑的和二进制的示范性加载操作的框 图。
图95A是根据本公开的实施例图示出示例代码的逻辑执行的流程图。
图95B是根据本公开的实施例的图95A的流程图,其图示出示例代码 的展开版本中的存储器级并行性。
图96A是根据本公开的实施例的加载操作和存储操作的示范性存储器 参量的框图。
图96B是根据本公开的实施例的图示出例如图96A的那些那样的加载 操作和存储操作通过图91的存储器排序电路的微体系结构的流程的框图。
图97A、97B、97C、97D、97E、97F、97G和97H是根据本公开的实 施例的图示出示范性程序的加载操作和存储操作通过图97B的微体系结构 的队列的功能流程的框图。
图98是根据本公开的实施例用于在加速硬件和无序存储器子***之间 对存储器操作排序的方法的流程图。
图99A是根据本公开的实施例图示出通用向量友好指令格式及其类别 A指令模板的框图。
图99B是根据本公开的实施例图示出通用向量友好指令格式及其类别 B指令模板的框图。
图100A是根据本公开的实施例图示出图99A和99B中的通用向量友 好指令格式的字段的框图。
图100B是根据本公开的一个实施例的图示出构成完整操作码字段的 图100A中的特定向量友好指令格式的字段的框图。
图100C是根据本公开的一个实施例的图示出构成寄存器索引字段的 图100A中的特定向量友好指令格式的字段的框图。
图100D是根据本公开的一个实施例的图示出构成增强操作字段9950 的图100A中的特定向量友好指令格式的字段的框图。
图101是根据本公开的一个实施例的寄存器体系结构的框图。
图102A是根据本公开的实施例图示出示范性有序管线和示范性寄存 器重命名、无序发出/执行管线两者的框图。
图102B是根据本公开的实施例的图示出要被包括在处理器中的有序 体系结构核心的示范性实施例和示范性寄存器重命名、无序发出/执行体系 结构核心两者的框图。
图103A是根据本公开的实施例的单个处理器核心及其与晶粒上互连 网络以及与其第2级(L2)缓存的本地子集的连接的框图。
图103B是根据本公开的实施例的图103A中的处理器核心的一部分的 扩展视图。
图104是根据本公开的实施例的可具有多于一个核心、可具有集成的 存储器控制器并且可具有集成的图形的处理器的框图。
图105是根据本公开的一个实施例的***的框图。
图106是根据本公开的实施例的更具体示范性***的框图。
图107是根据本公开的实施例的第二更具体示范性***的框图。
图108是根据本公开的实施例的片上***(SoC)的框图。
图109是根据本公开的实施例与使用软件指令转换器来将源指令集中 的二进制指令转换成目标指令集中的二进制指令对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些 具体细节也可实践本公开的实施例。在其他情况下,没有详细示出公知的 电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等 等表明描述的实施例可包括特定的特征、结构或特性,但每个实施例可不 一定包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。 此外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他 实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技 术人员的知识范围内的。
处理器(例如,具有一个或多个核心)可执行指令(例如,指令的线 程)以对数据进行操作,例如以执行算术、逻辑或者其他功能。例如,软 件可请求操作并且硬件处理器(例如,其一个或多个核心)可响应于该请 求而执行该操作。操作的一个非限制性示例是混合操作,其输入多个向量 元素并且输出具有混合多个元素的向量。在某些实施例中,通过单个指令 的执行实现多个操作。
例如由(美国)能源部定义的百万兆级性能可要求***级浮点性能在 给定的(例如,20MW)功率预算内超过10^18浮点操作每秒(exaFLOP) 或更多。这里的某些实施例针对的是例如处理器的处理元件(例如,以高 性能计算(high performance computing,HPC)为目标的可配置空间加速 器(configurable spatial accelerator,CSA))的空间阵列。这里的处理元件 (例如,CSA)的空间阵列的某些实施例以数据流图的直接执行为目标以 产生远超过传统路线图体系结构的计算上密集然而能量高效的空间微体系 结构。例如,除了通信网络在处理元件、存储器等等之间路由数据和/或通 信网络执行其他通信(例如,非数据处理)操作以外,这里的某些实施例 还将(例如,高基数)数据流操作覆盖在通信网络上。例如,除了通信网 络在处理元件、存储器等等之间路由数据或者通信网络执行其他通信操作以外,这里的某些实施例还针对的是处理元件(例如,CSA)的空间阵列 的(例如,耦合到它的)通信网络(例如,封包交换网络)来执行某些数 据流操作。这里的某些实施例针对的是(例如,各自)执行例如数据流图 的一个或多个数据流操作(例如,其一部分或全部)的网络数据流端点电 路,例如拾取或切换数据流操作。这里的某些实施例包括增强型网络端点(例如,网络数据流端点电路)来支持对于(一个或多个)数据流操作 (例如,多个数据流操作或者其子集)的控制,例如利用网络端点来执行 (例如,数据流)操作,而不是处理元件(例如,核心)或者算术-逻辑单 元(例如,执行算术和逻辑操作)执行该(例如,数据流)操作。在一个 实施例中,网络数据流端点电路与空间阵列(例如,其互连或架构)和/或 处理元件是分离的。
下面还包括对处理元件(例如,CSA)的空间阵列的实施例的体系结 构原理及其某些特征的描述。与任何革新性体系结构一样,可编程性可能 是一个风险。为了缓和这个问题,CSA体系结构的实施例是与编译工具链 共同设计的,这也在下文论述。
介绍
百万兆级计算目标可要求激进的功率预算(例如,20MW)内的巨大 ***级浮点性能(例如,1ExaFLOP)。然而,利用经典的冯·诺依曼体系 结构同时改善程序执行的性能和能量效率已变得困难:无序调度、同时多 线程处理、复杂寄存器文件和其他结构提供了性能,但是具有高能量成本。 这里的某些实施例同时实现性能和能量要求。百万兆级计算功率-性能目标 可既要求高吞吐量也要求每操作的低能量消耗。这里的某些实施例通过支持大量的低复杂度、能量高效的处理(例如,计算)元件来提供这一点, 这些处理元件很大程度上消除了先前处理器设计的控制开销。以这个观察 为指导,这里的某些实施例包括处理元件的空间阵列,例如可配置空间加 速器(CSA)的空间阵列,例如包括由一组轻量级、背压式(例如,通信) 网络连接的处理元件(processing element,PE)的阵列。在图1中描绘了CSA分片的一个示例。处理(例如,计算)元件的某些实施例是数据流操 作器,例如只在(i)输入数据已到达了数据流操作器并且(ii)有空间可 用于存储输出数据时才处理输入数据的多个数据流操作器,例如,否则不 发生处理。(例如,加速器或CSA)的某些实施例不利用触发的指令。
图1图示了根据本公开的实施例的处理元件的空间阵列的加速器分片 100实施例。加速器分片100可以是更大的分片的一部分。加速器分片100 执行一个或多个数据流图(dataflow graph)。数据流图一般可以指在循序 代码的编译中出现的显式并行程序描述。这里的某些实施例(例如,CSA) 允许数据流图被直接配置到CSA阵列上,而不是被变换成循序指令流。这 里的某些实施例允许第一(例如,类型的)数据流操作被空间阵列的一个 或多个处理元件(PE)执行,并且额外地或者替换地,允许第二(例如, 不同类型的)数据流操作被空间阵列的网络通信电路(例如,端点)中的 一个或多个执行。从循序编译流得出数据流图允许了CSA的实施例支持常 见的编程模型并且直接(例如,在不使用工作表的情况下)执行现有的高 性能计算(HPC)代码。CSA处理元件(PE)可以是能量高效的。在图1 中,存储器接口102可耦合到存储器(例如,图2中的存储器202)以允许 加速器分片100对(例如,晶粒外)存储器访问(例如,加载和/或存储) 数据。所描绘的加速器分片100是由经由互连网络104耦合在一起的若干 种类的PE构成的异质阵列。加速器分片100可包括整数算术PE、浮点算 术PE、通信电路(例如,网络数据流端点电路)和架构中存储中的一个或 多个,例如作为处理元件101的空间阵列的一部分。数据流图(例如,编 译的数据流图)可被覆盖在加速器分片100上以便执行。在一个实施例中, 对于特定的数据流图,每个PE只处理该图的一个或两个(例如,数据流) 操作。PE的阵列可以是异质的,例如使得没有PE支持完全CSA数据流体 系结构和/或一个或多个PE被编程(例如,定制)为只支持几个、但是高 效的操作。这里的某些实施例从而产生了如下处理器或加速器,其具有处 理元件的阵列,该阵列与路线图体系结构相比是计算上密集的,然而相对 于现有的HPC产品却实现了能量效率和性能上的大约一个量级的增益。
这里的某些实施例从处理元件(例如,CSA)的(例如,密集)空间 阵列内的并行执行提供了性能增长,其中利用的每个PE和/或网络数据流 端点电路可同时执行其操作,例如如果输入数据可用的话。效率提高可起 因于每个PE和/或网络数据流端点电路的效率,例如其中每个PE的操作 (例如,行为)在每个配置(例如,映射)步骤中被固定一次并且执行发 生在本地数据到达PE时,例如不考虑其他架构活动,和/或每个网络数据 流端点电路的操作(例如,行为)在被配置(例如,映射)时是可变的 (例如,不固定)。在某些实施例中,PE和/或网络数据流端点电路是数 据流操作器(例如,每者是单个数据流操作器),例如仅在(i)输入数据 已到达数据流操作器并且(ii)有空间可用于存储输出数据时才对输入数 据进行操作的数据流操作器,例如否则没有操作发生。
这里的某些实施例包括处理元件的空间阵列作为加速用户应用的一种 能量高效且高性能的方式。在一个实施例中,应用被以极为并行的方式来 映射。例如,内循环可被展开多次以改善并行性。此方案可提供高性能, 例如当展开的代码的占用率(例如,使用)较高时。然而,如果在循环体 中有较少使用的代码路径被展开(例如,像浮点去正规化模式这样的异常 代码路径),则处理元件的空间阵列(例如,其架构区域)可被浪费并且 吞吐量因此蒙受损失。
这里的降低处理元件的空间阵列(例如,其架构区域)上的压力(例 如,在未充分利用的代码段的情况下)的一个实施例是时间复用。在此模 式中,较少使用的(例如,较冷的)代码的单个实例可在若干个循环体之 间被共享,例如类似于共享库中的函数调用。在一个实施例中,(例如, 处理元件的)空间阵列支持复用代码的直接实现。然而,例如,当空间阵 列中的复用或解复用涉及在许多遥远的目标(例如,共享者)之间进行选 择时,使用数据流操作器(例如,使用处理元件)的直接实现就时延、吞 吐量、实现面积和/或能量而言可能是效率低下的。这里的某些实施例描述 了支持(例如,高基数)复用或解复用的硬件机制(例如,网络电路)。 这里的某些实施例(例如,网络数据流端点电路的实施例)允许在只有很 少硬件开销或性能影响的情况下对许多目标(例如,共享者)的聚合。这 里的某些实施例允许了将(例如,传统的)循序代码编译到空间阵列中的 并行体系结构。
在一个实施例中,多个网络数据流端点电路组合为单个数据流操作器, 例如如下文参考图46所述。作为非限制性示例,在下面列出某些(例如, 高(例如,4-6)基数)数据流操作器。
“Pick(拾取)”数据流操作器的实施例将从多个输入通道选择数据 (例如,令牌)并且根据控制数据提供该数据作为其(例如,单个)输出。 用于Pick的控制数据可包括输入选择器值。在一个实施例中,选中的输入 通道的数据(例如,令牌)会被去除(例如,丢弃),以例如完成该数据 流操作(或者它的那部分数据流操作)的执行。在一个实施例中,此外,那些未选中的输入通道的数据(例如,令牌)也会被去除(例如,丢弃), 以例如完成该数据流操作(或者它的那部分数据流操作)的执行。
“PickSingleLeg(拾取单分腿)”数据流操作器的实施例是从多个输 入通道选择数据(例如,令牌)并且根据控制数据提供该数据作为其(例 如,单个)输出,但在某些实施例中,未选中的输入通道被忽略,例如, 那些未选中的输入通道的数据(例如,令牌)不会被去除(例如,丢弃), 以例如完成该数据流操作(或者它的那部分数据流操作)的执行。用于PickSingleLeg的控制数据可包括输入选择器值。在一个实施例中,选中的 输入通道的数据(例如,令牌)也会被去除(例如,丢弃),以例如完成 该数据流操作(或者它的那部分数据流操作)的执行。
“PickAny(拾取任何)”数据流操作器的实施例从多个输入通道选 择第一可用(例如,对于执行该操作的电路而言可用)数据(例如,令牌) 并且提供该数据作为其(例如,单个)输出。在一个实施例中, PickSingleLeg也将输出使得其数据被选中的索引(例如,指出多个输入通 道中的哪一个)。在一个实施例中,选中的输入通道的数据(例如,令牌) 会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数 据流操作)的执行。在某些实施例中,未选中的输入通道(例如,具有或 不具有输入数据)被忽略,例如那些未选中的输入通道的数据(例如,令 牌)不会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那 部分数据流操作)的执行。PickAny的控制数据可包括与PickAny相对应 的值,例如没有输入选择器值。
“Switch(切换)”数据流操作器的实施例将引导(例如,单个)输 入数据(例如,令牌)以便根据控制数据将该输入数据提供到一个或多个 (例如,少于全部)输出。Switch的控制数据可包括一个或多个输出选择 器值。在一个实施例中,输入数据(例如,来自输入通道)的数据(例如, 令牌)会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那 部分数据流操作)的执行。
“SwitchAny(切换任何)”数据流操作器的一个实施例将引导(例 如,单个)输入数据(例如,令牌)以便例如根据控制数据将该输入数据 提供到一个或多个(例如,少于全部)可接收该数据的输出。在一个实施 例中,SwitchAny可将输入数据提供到在其入口缓冲器(例如,图47中的 网络入口缓冲器)中具有可用性(例如,可用存储空间)的任何耦合的输出通道。SwitchAny的控制数据可包括与SwitchAny相对应的值,例如没 有一个或多个输出选择器值。在一个实施例中,输入数据(例如,来自输 入通道)的数据(例如,令牌)会被去除(例如,丢弃),以例如完成该 数据流操作(或者它的那部分数据流操作)的执行。在一个实施例中, SwitchAny也将输出其将输入数据提供(例如,发送)到的索引(例如, 指出多个输出通道中的哪一个)。SwitchAny可被利用来管理空间阵列中 的复制子图,例如展开的循环。
这里的某些实施例从而在广泛类别的现有单流和并行程序上提供了颠 覆水平的性能和能量效率的巨大改善,例如所有这些都同时保留了常见的 HPC编程模型。这里的某些实施例可针对HPC,从而使得浮点能量效率极 为重要。这里的某些实施例不仅实现性能的引人注目的改善和能量的降低, 而且也将这些增益递送到以主流HPC语言编写的以及用于主流HPC框架 的现有HPC程序。这里的体系结构的某些实施例(例如,考虑到编译)提 供了若干个扩展,直接支持由现代编译器生成的控制-数据流内部表示。这 里的某些实施例针对的是CSA数据流编译器,例如其可接受C、C++和 Fortran编程语言,从而面向CSA体系结构。
图2图示了根据本公开的实施例的耦合到(例如,连接到)存储器202 的硬件处理器200。在一个实施例中,硬件处理器200和存储器202是计算 ***201。在某些实施例中,加速器中的一个或多个是根据本公开的CSA。 在某些实施例中,处理器中的核心中的一个或多个是本文公开的那些核心。 硬件处理器200(例如,其每个核心)可包括硬件解码器(例如,解码单 元)和硬件执行单元。硬件处理器200可包括寄存器。注意这里的附图可 不描绘所有数据通信耦合(例如,连接)。本领域普通技术人员将会明白, 这是为了不模糊附图中的某些细节。注意附图中的双箭头可不要求双向通 信,例如,其可指示单向通信(例如,去往或来自该组件或设备)。在这 里的某些实施例中可利用通信路径的任何或所有组合。描绘的硬件处理器 200根据本公开的实施例包括多个核心(O到N,其中N可以是1或更多) 和硬件加速器(O到M,其中M可以是1或更多)。硬件处理器200(例 如,其(一个或多个)加速器和/或核心)可耦合到存储器202(例如,数 据存储设备)。硬件解码器(例如,核心的硬件解码器)可接收(例如, 单个)指令(例如,宏指令)并且对该指令解码,例如解码成微指令和/或 微操作。硬件执行单元(例如,核心的硬件执行单元)可执行解码的指令 (例如,宏指令)以执行一个或多个操作。
下面的第1节公开了CSA体系结构的实施例。具体地,公开了将存储 器集成在数据流执行模型内的新颖实施例。第2节深入研究了CSA的实施 例的微体系结构细节。在一个实施例中,CSA的主要目标是支持编译器产 生的程序。下面的第3节考查了CSA编译工具链的实施例。在第4节中在 编译代码的执行中比较了CSA的实施例与其他体系结构相比的优点。最后, 在第5节中论述了CSA微体系结构的实施例的性能,在第6节中论述了进 一步的CSA细节,并且在第7节中提供了总结。
1.CSA体系结构
CSA的某些实施例的目标是迅速且高效地执行程序,例如由编译器产 生的程序。CSA体系结构的某些实施例提供了支持编译器技术和编程范式 的需求的编程抽象。CSA的实施例执行数据流图,例如十分类似编译器自 己对编译的程序的内部表示(internalrepresentation,IR)的程序表征。在 这个模型中,程序被表示为数据流图,该数据流图由从一组在体系结构上 定义的(例如,涵盖计算和控制操作两者的)数据流操作器得出的节点 (例如,顶点)和表示数据在数据流操作器之间的传送的边缘构成。执行 可通过将数据流令牌(例如,是或者表示数据值的数据流令牌)注入到数 据流图中来进行。令牌可在每个节点(例如,顶点)之间流动并且在每个 节点处被变换,例如形成完整的计算。在图3A-3C中示样本数据流图及其 从高级别源代码的得出出,并且图5示出了数据流图的执行的示例。
通过恰好提供编译器要求的那些数据流图执行支持来针对数据流图执 行配置CSA的实施例。在一个实施例中,CSA是加速器(例如,图2中的 加速器)并且其不追求提供通用处理核心(例如,图2中的核心)上可用 的一些必要但不常使用的机制,例如***调用。因此,在此实施例中, CSA可执行许多代码,但不是所有代码。作为交换,CSA获得了显著的性能和能量优点。为了使得以通常使用的循序语言编写的代码的加速成为可 能,这里的实施例还引入了若干个新颖的体系结构特征来辅助编译器。一 个特别的新颖之处是CSA对存储器的对待,这是一个先前被忽略或者被不 充分解决的主题。CSA的实施例在使用数据流操作器而不是查找表 (lookup table,LUT)作为其基本体系结构接口方面也是独特的。
转到CSA的实施例,接下来论述数据流操作器。
1.1数据流操作器
加速器(例如,CSA)的实施例的关键体系结构接口是数据流操作器, 例如作为数据流图中的节点的直接表示。从操作角度来看,数据流操作器 以流式或数据驱动的方式运转。数据流操作器一旦其传入操作对象变得可 用就可执行。CSA数据流执行可取决于(例如,仅取决于)高度本地化的 状态,例如产生了具有分布式异步执行模型的高度可缩放的体系结构。数 据流操作器可包括算术数据流操作器,例如浮点加法和乘法、整数加法、 减法和乘法、各种形式的比较、逻辑操作器和移位中的一个或多个。然而, CSA的实施例也可包括辅助程序图中的数据流令牌的管理的控制操作器的 丰富集合。这些的示例包括“拾取”操作器,例如,其将两个或更多个逻 辑输入通道复用成单个输出通道,以及“切换”操作器,例如其作为通道 解复用器操作(例如,从两个或更多个逻辑输入通道输出单个通道)。这 些操作器可使得编译器能够实现控制范式,例如条件表达式。CSA的某些 实施例可包括有限数据流操作器集合(例如,限于相对少量的操作)以产 生密集且能量高效的PE微体系结构。某些实施例可包括用于HPC代码中 常见的复杂操作的数据流操作器。CSA数据流操作器体系结构是高度服从 依部署而定的扩展的。例如,更复杂的数学数据流操作器,例如三角函数, 可被包括在某些实施例中以加速某些数学密集的HPC工作负荷。类似地, 神经网络调谐的扩展可包括用于向量化的低精度算术的数据流操作器。
图3A图示了根据本公开的实施例的程序源。程序源代码包括乘法函 数(func)。图3B图示了根据本公开的实施例的图3A的程序源的数据流 图300。数据流图300包括拾取节点304、切换节点306和乘法节点308。 沿着通信路径中的一个或多个可以可选地包括缓冲器。描绘的数据流图 300可执行利用拾取节点304选择输入X、将X乘以Y(例如,乘法节点308)、并且随后从切换节点306的左输出输出结果的操作。图3C图示了 根据本公开的实施例的具有被配置为执行图3B的数据流图的多个处理元 件301的加速器(例如,CSA)。更具体而言,数据流图300被覆盖到处 理元件301(例如,以及其间的(一个或多个)(例如,互连)网络)的 阵列中,例如,以使得数据流图300的每个节点被表示为处理元件301的 阵列中的数据流操作器。例如,某些数据流操作可利用处理元件来实现和/ 或某些数据流操作可利用通信网络(例如,其网络数据流端点电路)来实 现。例如,Pick、PickSingleLeg、PickAny、Switch和/或SwitchAny操作可 利用通信网络的一个或多个组件(例如,其网络数据流端点电路)来实现, 例如而不是利用处理元件来实现。
在一个实施例中,处理元件301的阵列中的处理元件中的一个或多个 将通过存储器接口302访问存储器。在一个实施例中,数据流图300的拾 取节点304从而对应于拾取操作器304A(例如,由拾取操作器304A表 示),数据流图300的切换节点306从而对应于切换操作器306A(例如, 由切换操作器306A表示),并且数据流图300的乘法器节点308从而对应于乘法器操作器308A(例如,由乘法器操作器308A表示)。另一处理元 件和/或流控制路径网络可向拾取操作器304A和切换操作器306A提供控制 信号(例如,控制令牌)以执行图3A中的操作。在一个实施例中,处理 元件301的阵列被配置为在执行开始之前执行图3B的数据流图300。在一 个实施例中,编译器执行从图3A-3B的转换。在一个实施例中,数据流图节点到处理元件的阵列中的输入逻辑上将数据流图嵌入到处理元件的阵列 中,例如如下文进一步论述,以使得输入/输出路径被配置为产生期望的结 果。
1.2时延非敏感通道
通信弧是数据流图的第二个主要组分。CSA的某些实施例将这些弧描 述为时延不敏感通道,例如,按序背压式(例如,不产生或发送输出,直 到有地方存储输出为止)点到点通信通道。与数据流操作器一样,时延不 敏感通道根本上是异步的,给出了构成许多类型的网络来实现特定图的通 道的自由。时延不敏感通道可具有任意长的时延并且仍忠实地实现CSA体 系结构。然而,在某些实施例中,就性能和能量而言有强烈的动机使得时 延尽可能小。这里的2.2节公开了一种网络微体系结构,其中数据流图通 道是以管线方式实现的,具有不多于一个周期的时延。时延不敏感通道的 实施例提供了关键抽象层,该关键抽象层可结合CSA体系结构被利用来向 应用编程者提供数个运行时服务。例如,CSA在CSA配置(将程序加载到 CSA阵列中)的实现中可利用时延不敏感通道。
图4图示了根据本公开的实施例的数据流图400的示例执行。在步骤 1,输入值(例如,对于图3B中的X是1并且对于图3B中的Y是2)可 被加载在数据流图400中以执行1*2乘法操作。数据输入值中的一个或多 个在操作中可以是静态的(例如,恒定的)(例如,参考图3B对于X是1 并且对于Y是2)或者可在操作期间被更新。在步骤2,处理元件(例如, 流控制路径网络上的处理元件)或者其他电路输出零到拾取节点404的控 制输入(例如,复用器控制信号)(例如,从端口“0”源发(source)一 到其输出)并且输出零到切换节点406的控制输入(例如,复用器控制信 号)(例如,从端口“0”提供其输入到目的地(例如,下游处理元 件))。在步骤3,数据值1被从拾取节点404输出(例如,并且在拾取节 点404处消耗其控制信号“0”)到乘法器节点408以在步骤4与数据值2 相乘。在步骤4,乘法器节点408的输出到达切换节点406,例如这使得切 换节点406消耗控制信号“0”以在步骤5从切换节点406的端口“0”输 出值2。该操作于是完成。CSA从而可被相应地编程,使得用于每个节点 的相应数据流操作器执行图4中的操作。虽然在此示例中执行是串行化的, 但原则上所有数据流操作可并行执行。在图4中使用步骤来区分数据流执 行与任何物理微体系结构表征。在一个实施例中,下游处理元件将发送信 号(或者不发送准备就绪信号)(例如,在流控制路径网络上)到切换节 点406以暂缓从切换406的输出,例如,直到下游处理元件为输出准备就 绪(例如,有存储空间)为止。
1.3存储器
数据流体系结构一般聚焦于通信和数据操纵,而较少关注状态。然而, 使得真实的软件,尤其是以传统循序语言编写的程序成为可能要求倍加关 注与存储器的接口。CSA的某些实施例使用体系结构式存储器操作作为其 到(例如,大的)有状态存储的主要接口。从数据流图的角度来看,存储 器操作与其他数据流操作类似,只不过它们具有更新共享存储的副作用。 具体地,这里的某些实施例的存储器操作具有与每个其他数据流操作器相同的语义,例如它们在其操作对象(例如地址)可用时“执行”,并且在 某个时延之后,响应被产生。这里的某些实施例显式地将操作对象输入和 结果输出解除耦合,以使得存储器操作器天然就是管线式的并且具有产生 许多同时待处理请求的潜力,例如,使得它们格外适合于存储器子***的 时延和带宽特性。CSA的实施例提供基本存储器操作,例如取得地址通道 并且利用与地址相对应的值填充响应通道的加载,以及存储。CSA的实施 例也可提供更高级的操作,例如存储器内原子和一致性操作器。这些操作 可具有与其冯·诺伊曼对应物相似的语义。CSA的实施例可加速利用诸如C 和Fortran之类的循序语言描述的现有程序。支持这些语言模型的一个后果 是提出程序存储器顺序,例如这些语言通常规定的存储器操作的串行排序。
图5图示了根据本公开的实施例的程序源(例如,C代码)500。根据 C编程语言的存储器语义,存储器拷贝(memcpy)应当被串行化。然而, 如果已知阵列A和B是不相交的,则memcpy可利用CSA的实施例来并行 化。图5还图示了程序顺序的问题。一般地,编译器无法证明阵列A不同 于阵列B,例如无论对于循环体间的相同值的索引还是不同值的索引无法证明。这被称为指针或存储器别名化(aliasing)。由于编译器将会生成静 态正确的代码,所以它们通常被强迫串行化存储器访问。通常,针对循序 冯·诺伊曼体系结构的编译器使用指令排序作为强制执行程序顺序的天然手 段。然而,CSA的实施例没有由程序计数器定义的指令或者基于指令的程 序排序的概念。在某些实施例中,例如不包含体系结构上可见的信息的传 入依从性令牌像所有其他数据流令牌一样,并且存储器操作可不执行,直 到它们接收到了依从性令牌为止。在某些实施例中,存储器操作一旦其操 作对于所有逻辑上后续的依从存储器操作可见就产生传出依从性令牌。在 某些实施例中,依从性令牌与数据流图中的其他数据流令牌类似。例如, 由于存储器操作在条件情境中发生,所以例如像任何其他令牌一样,也可 利用1.1节中描述的控制操作器来操纵依从性令牌。依从性令牌可具有串 行化存储器访问的效果,例如向编译器提供从体系结构上定义存储器访问 的顺序的手段。
1.4运行时服务
CSA的实施例的一个主要的体系结构考虑涉及用户级程序的实际执行, 但可能也希望提供巩固此执行的若干个支持机制。这些之中首要的是配置 (其中数据流图被加载到CSA中)、提取(其中执行图的状态被移动到存 储器)以及异常(其中架构中的数学上的、软的和其他类型的差错被检测 并处理,这可能由外部实体进行)。下面的2.9节论述了CSA的实施例的 时延不敏感数据流体系结构的属性以产生这些功能的高效的、很大程度上 管线式的实现方式。从概念上来说,配置可将数据流图的状态加载到互连 (和/或通信网络(例如,其网络数据流端点电路))和处理元件(例如, 架构)中,例如一般从存储器加载。在此步骤期间,CSA中的所有结构可 被加载以新的数据流图以及该图中活跃的任何数据流令牌,这例如是作为 情境切换的结果而发生的。CSA的时延不敏感语义可允许架构的分布式异步初始化,例如,一旦PE被配置,它们就可立即开始执行。未配置的PE 可背压其通道,直到它们被配置为止,例如防止配置的和未配置的元件之 间的通信。CSA配置可被划分成特权状态和用户级状态。这种两级别划分 可使得架构的主要配置能够在不调用操作***的情况下发生。在提取的一 个实施例期间,数据流图的逻辑视图被捕捉并且被提交到存储器中,例如 包括图中的所有活跃控制和数据流令牌和状态。
提取也可通过架构检验点的创建来起到提供可靠性保证的作用。CSA 中的异常一般可由引起处理器中的异常的同样事件引起,例如非法操作器 参量或者可靠性、可用性和可服务性(reliability,availability,and serviceability,RAS)事件。在某些实施例中,在数据流操作器的级别检测 异常,例如检查参量值或者通过模块化算术方案来检测。在检测到异常后, 数据流操作器(例如,电路)可停止并且发出异常消息,例如该消息既包 含操作标识符也包含发生了的问题的性质的一些细节。在一个实施例中, 数据流操作器将保持停止,直到其已被重配置为止。异常消息随后可被传 达到服务的关联的处理器(例如,核心)以便检修,例如这可包括提取图 来进行软件分析。
1.5分片级体系结构
CSA计算机体系结构(例如,针对HPC和数据中心使用)的实施例是 分片式的。图6和图9示出了CSA的分片级部署。图9示出了CSA的完全 分片实现方式,例如其可以是具有核心的处理器的加速器。此体系结构的 主要优点可能是降低的设计风险,例如使得CSA和核心在制造中是完全解 除耦合的。除了允许更好的组件再利用以外,这还可允许像CSA缓存这样 的组件的设计只考虑CSA,例如而不是需要包含核心的更严格时延要求。 最后,分开的分片可允许CSA与小核心或大核心的集成。CSA的一个实施 例捕捉大多数向量并行工作负荷,以使得大多数向量风格工作负荷直接在 CSA上运行,但在某些实施例中可包括核心中的向量风格指令,以例如支 持传统二进制。
2.微体系结构
在一个实施例中,CSA微体系结构的目标是提供由CSA体系结构指定 的每个数据流操作器的高质量实现。CSA微体系结构的实施例规定微体系 结构的每个处理元件(和/或通信网络(例如,其网络数据流端点电路)) 对应于体系结构数据流图中的大约一个节点(例如,实体)。在一个实施 例中,数据流图中的节点分布在多个网络数据流端点电路中。在某些实施 例中,这产生了如下微体系结构元件:它们不仅是紧凑的,产生了密集的 计算阵列,而且是能量高效的,例如其中处理元件(PE)既简单又很大程 度上是非复用的,例如对于CSA的配置(例如,编程)执行单个数据流操 作器。为了进一步降低能量和实现面积,CSA可包括可配置的异质架构风 格,其中其每个PE只实现数据流操作器的子集(例如,利用(一个或多 个)网络数据流端点电路实现的数据流操作器的单独子集)。诸如CSA缓 存之类的***和支持子***可被配设来支持主要CSA处理架构本身中现有 的分布式并行性。CSA微体系结构的实现可利用体系结构中存在的数据流 和时延不敏感通信抽象。在某些实施例中,在编译器生成的图中的节点和 CSA中的数据流操作器(例如,数据流操作器计算元件)之间存在(例如, 基本上)一对一的对应关系。
下面是对示例CSA的论述,然后是对微体系结构的更详细论述。这里 的某些实施例提供了允许容易的编译的CSA,例如与现有的FPGA编译器 形成对照,现有的FPGA编译器处理编程语言(例如,C或C++)的小子 集并且即使编译很小的程序也需要许多个小时。
CSA体系结构的某些实施例容许像双精度浮点那样的异质粗颗粒操作。 程序可被表达为更少的粗颗粒操作,例如使得公开的编译器比传统的空间 编译器运行得更快。某些实施例包括具有新处理元件的架构来支持像程序 排序的存储器访问这样的循序概念。某些实施例实现硬件来支持粗颗粒数 据流风格通信通道。这个通信模型是抽象的,并且非常接近编译器所使用 的控制-数据流表示。这里的某些实施例包括支持单周期时延通信的网络实 现方式,例如利用支持单个控制-数据流操作的(例如,小)PE。在某些 实施例中,这不仅改善了能量效率和性能,而且其简化了编译,因为编译 器在高级别数据流构造和架构之间形成一对一映射。这里的某些实施例从 而简化了将现有(例如,C、C++或Fortran)程序编译到CSA(例如,架 构)的任务。
能量效率可能是现代计算机***中的首要关注点。这里的某些实施例 提供了能量高效的空间体系结构的新模式。在某些实施例中,这些体系结 构形成具有小的能量高效的面向数据流的处理元件(PE)(和/或封包交 换通信网络(例如,其网络数据流端点电路))与轻量级电路交换通信网 络(例如,互连)(例如具有对流控制的加固支持)的异质混合的独特组 成的架构。由于每一者的能量优点,这些组分的组合可形成适用于以极为 能量高效的方式执行编译器生成的并行程序的空间加速器(例如,作为计 算机的一部分)。由于这个架构是异质的,所以通过引入新的域特定PE可 为不同的应用域定制某些实施例。例如,用于高性能计算的架构可包括用 于双精度融合乘法-加法的某种定制,而以深度神经网络为目标的架构可包 括低精度浮点运算。
例如如图6中例示的空间体系结构模式的实施例是由处理元件(PE) 间网络连接的轻量级PE的组成。一般而言,PE可包括数据流操作器,例 如其中一旦(例如,所有)输入操作对象到达数据流操作器处,某个操作 (例如,微指令或者微指令的集合)就被执行,并且结果被转发到下游操 作器。控制、调度和数据存储因此可分布在PE间,例如去除了主导经典 处理器的集中式结构的开销。
程序可被转换成数据流图,这些数据流图通过配置PE和网络来表达 程序的控制-数据流图而被映射到体系结构上。通信通道可以是流控制的并 且完全背压式的,例如以使得如果源通信通道没有数据或者目的地通信通 道已满则PE将会暂缓。在一个实施例中,在运行时,数据流经已被配置 为实现操作(例如,加速的算法)的PE和通道。例如,数据可从存储器 中流入、经过架构然后退出到存储器。
这种体系结构的实施例相对于传统的多核处理器可实现显著的性能效 率:计算(例如,以PE的形式)与更大的核心中相比可以更简单、更能 量高效并且更丰富,并且通信可以是直接的并且主要是短途的,例如与典 型的多核处理器中那样的在宽的全芯片网络上发生不同。另外,因为体系 结构的实施例是极为并行的,所以若干个强大的电路和设备级优化是可能 的,而不会严重地影响吞吐量,例如,低泄漏设备和低操作电压。这些更 低级别的优化相对于传统的核心可使得甚至更大的性能优点成为可能。这 些实施例的体系结构、电路和设备级效率产出的组合是引人注目的。随着 晶体管密度持续增大,这个体系结构的实施例可使得更大的活跃面积成为 可能。
这里的实施例提供了数据流支持和电路切换的独特组合来使得架构与 先前的体系结构相比能够更小、更能量高效并且提供更高的聚合性能。 FPGA一般是朝着细颗粒比特操纵来调谐的,而这里的实施例是朝着存在 于HPC应用中的双精度浮点运算来调谐的。这里的某些实施例除了根据本 公开的CSA以外还可包括FPGA。
这里的某些实施例将轻量级网络与能量高效的数据流处理元件(和/或 通信网络(例如,其网络数据流端点电路))相组合以形成高吞吐量、低 时延、能量高效的HPC架构。这个低时延网络可使得能够构建具有更少功 能的处理元件(和/或通信网络(例如,其网络数据流端点电路)),例如 只有一个或两个指令并且可能只有一个体系结构上可见的寄存器,因为将 多个PE聚集起来形成完整的程序是高效的。
相对于处理器核心,这里的CSA实施例可提供更大的计算密度和能量 效率。例如,当PE非常小时(例如,与核心相比),CSA与核心相比可 执行多得多的操作并且具有大得多的计算并行性,例如FMA的数目可能 是向量处理单元(vector processing unit,VPU)的16倍那么多。为了利用 所有这些计算元件,每操作的能量在某些实施例中是非常低的。
这个数据流体系结构的实施例的能量优点有许多。并行性在数据流图 中是显式的并且CSA体系结构的实施例不花费或者只花费最低限度的能量 来提取它,例如不像每次执行指令时必须重新发现并行性的无序处理器那 样。由于在一个实施例中每个PE负责单个操作,所以寄存器文件和端口 计数可以很小,例如经常只有一个,并且因此与其在核心中的对应物相比 使用更少的能量。某些CSA包括许多PE,每个PE保持活跃程序值,给出 了传统体系结构中的巨大寄存器文件的聚合效果,这急剧减少了存储器访 问。在存储器是多端口且分布式的实施例中,CSA可比核心支持多得多的 待处理存储器请求并且利用更多带宽。这些优点可以组合起来以产生只是 裸算术电路的成本的一个小百分比的每瓦能量级。例如,在整数乘法的情 况下,CSA与底层乘法电路相比可多消耗不大于25%的能量。相对于核心 的一个实施例,该CSA架构中的整数操作消耗少于每整数操作能量的1/30。
从编程的角度来看,CSA体系结构的实施例的应用特定可延展性相对 于向量处理单元(VPU)产生了显著优点。在传统的非灵活体系结构中, 像是浮点除法或者各种超越数学函数这样的功能单元的数目必须在设计时 基于某个预期用例来选择。在CSA体系结构的实施例中,这种函数可(例 如,由用户而不是制造者)基于每个应用的要求来配置到架构中。应用吞 吐量从而可被进一步增大。同时,CSA的实施例的计算密度通过避免固化 这种函数、改为配设像浮点乘法这样的基元函数的更多实例来改善。这些 优点在HPC工作负荷中可能是显著的,一些HPC工作负荷将75%的浮点 执行时间花费在超越函数中。
CSA的某些实施例代表作为面向数据流的空间体系结构的显著进步, 例如,本公开的PE可以更小,但也是更能量高效的。这些改善可直接起 因于面向数据流的PE与轻量级电路交换互连的组合,该轻量级电路交换 互连例如具有单周期时延,例如与封包交换网络(例如具有至少高300% 的时延)形成对照。PE的某些实施例支持32比特或64比特操作。这里的 某些实施例允许引入新的应用特定PE,例如用于机器学习或者安全性,而 不只是同质的组合。这里的某些实施例将轻量级面向数据流的处理元件与 轻量级低时延网络相组合以形成能量高效的计算架构。
为了让某些空间体系结构成功,编程者将会以相对少的精力来配置它 们,例如同时相对于循序核心获得显著的功率和性能优越性。这里的某些 实施例提供了容易编程(例如,由编译器编程)、功率高效并且高度并行 的CSA(例如,空间架构)。这里的某些实施例提供了实现这三个目标的 (例如,互连)网络。从可编程性的角度来看,网络的某些实施例提供了 流控制的通道,这例如对应于编译器中使用的执行的控制-数据流图 (control-dataflow graph,CDFG)模型。某些网络实施例利用专用的电路 交换链路,使得程序性能对于人类和编译器来说都更容易推测出,因为性 能是可预测的。某些网络实施例既提供高带宽也提供低时延。某些网络实 施例(例如,静态的电路交换)提供0到1周期的时延(例如,取决于传 输距离)。某些网络实施例通过并行地并且例如在低级别金属中布置若干 个网络来提供高带宽。某些网络实施例在低级别金属中在短距离上通信, 从而是非常功率高效的。
网络的某些实施例包括对流控制的体系结构支持。例如,在由小的处 理元件(PE)构成的空间加速器中,通信时延和带宽对于整体程序性能可 能是关键的。这里的某些实施例提供了促进空间处理阵列(例如图6中所 示的空间阵列)中的PE之间的通信的轻量级电路交换网络,以及支持此 网络所必要的微体系结构控制特征。网络的某些实施例使得能够构造支持 面向数据流的处理元件(PE)的通信的点到点流控制通信通道。除了点到 点通信以外,这里的某些网络还支持多播通信。可通过静态地配置网络以 在PE之间形成虚拟电路来形成通信通道。这里的电路交换技术可减小通 信时延并且相应地使网络缓冲达到最低限度,例如既带来了高性能也带来 了高能量效率。在网络的某些实施例中,PE间时延可低到零周期,意味着 下游PE可在数据被产生之后的周期中在数据上操作。为了获得甚至更高的带宽,以及允许更多程序,可并行布置多个网络,例如如图6中所示。
空间体系结构,例如图6中所示的那种,可以是由PE间网络(和/或 通信网络(例如,其网络数据流端点电路))连接的轻量级处理元件的组 成。被视为数据流图的程序可通过配置PE和网络来映射到体系结构上。 一般而言,PE可被配置为数据流操作器,并且一旦(例如,所有)输入操 作对象到达PE处,某个操作于是就可发生,并且结果就被转发到期望的 下游PE。PE可通过专用的虚拟电路通信,这些专用虚拟电路是通过静态 配置电路交换通信网络来形成的。这些虚拟电路可以是流控制的并且完全 背压式的,例如使得如果源没有数据或者目的地已满则PE将会停转。在 运行时,数据可流经实现映射的算法的PE。例如,数据可从存储器中流入、 经过架构然后退出到存储器。这个体系结构的实施例相对于传统的多核处 理器可实现显著的性能效率:例如,其中以PE形式的计算与更大的核心 相比更简单并且更众多,并且通信是直接的,例如与存储器***的扩展不 同。
图6图示了根据本公开的实施例的包括处理元件(PE)的阵列的加速 器分片600。互连网络被描绘为电路交换的静态配置的通信通道。例如, 由交换机(例如,第一网络中的交换机610和第二网络中的交换机611) 耦合在一起的一组通道。第一网络和第二网络可以是分开的或者被耦合在 一起。例如,交换机610可将例如被配置为根据数据流图执行操作的四个 数据路径(612、614、616、618)中的一个或多个耦合在一起。在一个实 施例中,数据路径的数目可以是任意多个。处理元件(例如,处理元件 604)可如本文公开,例如如图10中公开。加速器分片600包括存储器/缓 存层次体系接口602,以例如将加速器分片600与存储器和/或缓存接口连 接。数据路径(例如,618)可延伸到另一分片或者端接于例如分片的边缘处。处理元件可包括输入缓冲器(例如,缓冲器606)和输出缓冲器 (例如,缓冲器608)。
操作可基于其输入的可用性和PE的状态而被执行。PE可从输入通道 获得操作对象并且将结果写入到输出通道,但是内部寄存器状态也可被使 用。这里的某些实施例包括可配置的数据流友好PE。图10示出了一个这 种PE的详细框图:整数PE。此PE由若干个I/O缓冲器、ALU、存储寄存 器、一些指令寄存器和调度器构成。在每个周期,调度器可基于输入和输 出缓冲器的可用性和PE的状态来选择指令来执行。操作的结果随后可被 写入到输出缓冲器或者写入到(例如,PE本地的)寄存器。写入到输出缓 冲器的数据可被传输到下游PE以便进一步处理。这种风格的PE可能是极 为能量高效的,例如PE从寄存器读取数据,而不是从复杂的多端口寄存 器文件读取数据。类似地,指令可被直接存储在寄存器中,而不是虚拟化 指令缓存中。
可在特殊的配置步骤期间设置指令寄存器。在此步骤期间,除了PE间 网络以外,辅助控制线和状态也可用于在构成架构的若干个PE间流入配 置。由于并行性,这种网络的某些实施例可提供迅速的重配置,例如可在 少于大约10微秒中配置分片大小的架构。
图10表示处理元件的一个示例配置,例如其中所有体系结构元件的大 小被设置到最小。在其他实施例中,处理元件的每个组分被独立地缩放以 产生新的PE。例如,为了处理更复杂的程序,可以引入PE可执行的更大 数目的指令。可配置性的第二维度在PE算术逻辑单元(arithmetic logic unit, ALU)的功能中。在图10中,描绘了整数PE,其可支持加法、减法和各 种逻辑操作。通过将不同种类的功能单元替代到PE中可创建其他种类的 PE。例如,整数乘法PE可没有寄存器、具有单个指令并且具有单个输出 缓冲器。PE的某些实施例将融合乘加(fused multiply add,FMA)分解成 分开的、但紧密耦合的浮点乘法和浮点加法单元以改善对乘加繁重的工作 负荷的支持。在下文进一步论述PE。
图7A图示了根据本公开的实施例的(例如,参考图6论述的网络一或 网络二的)可配置数据路径网络700。网络700包括多个复用器(例如, 复用器702、704、706),这些复用器可(例如,经由其各自的控制信号) 被配置为将一个或多个数据路径(例如,来自PE)连接在一起。图7B图 示了根据本公开的实施例的可配置流控制路径网络701(例如,参考图6论 述的网络一或网络二)。网络可以是轻量级PE到PE网络。网络的某些实 施例对于分布式点到点数据通道的构造可被认为是一组可组合的基元。图 7A示出了有两个通道被使能的网络,粗黑线和黑色虚线。粗黑线通道是多 播,例如单个输入被发送到两个输出。注意通道在单个网络内的一些点处 可交叉,即使在通道端点之间形成了专用的电路交换路径。此外,这个交 叉可不在两个通道间引入结构化危害,使得每一者独立地并且以完全带宽 操作。
实现分布式数据通道可包括图7A-7B中图示的两个路径。前向或者数 据路径将数据从生产者运载到消耗者。复用器可被配置为将数据和有效比 特从生产者引导到消耗者,例如像图7A中那样。在多播的情况下,数据 将被引导到多个消耗者端点。网络的这个实施例的第二部分是流控制或背 压路径,其在前向数据路径的相反方向上流动,例如像图7B中那样。消 耗者端点可在其准备好接受新数据时断言。这些信号随后可利用可配置逻 辑联接被引导回到生产者,这些可配置逻辑联接在图7B中被标注为(例 如,回流)流控制功能。在一个实施例中,每个流控制功能电路可以是多 个交换机(例如,复用器),例如与图7A类似。流控制路径可处理从消 耗者到生产者的返回控制数据。联接可使得多播成为可能,例如其中每个 消耗者在生产者假定数据已被接收之前准备好接收该数据。在一个实施例中,PE是具有数据流操作器作为其体系结构接口的PE。额外地或者替换 地,在一个实施例中,PE可以是任何种类的PE(例如,架构中的),例 如但不限于是具有指令指针、触发指令或者基于状态机的体系结构接口的 PE。
网络可被静态配置,例如除了PE被静态配置以外。在配置步骤期间, 配置比特可在每个网络组件处被设置。这些比特例如控制复用器选择和流 控制功能。网络可包括多个网络,例如数据路径网络和流控制路径网络。 一网络或多个网络可利用不同宽度(例如,第一宽度,和更窄或更宽的宽 度)的路径。在一个实施例中,数据路径网络比流控制路径网络的宽度具 有更宽的(例如,比特传输)宽度。在一个实施例中,第一网络和第二网 络的每一者包括其自己的数据路径网络和流控制路径网络,例如数据路径 网络A和流控制路径网络A和更宽的数据路径网络B和流控制路径网络 B。
网络的某些实施例是无缓冲的,并且数据将在单个周期中在生产者和 消耗者之间移动。网络的某些实施例也是无边际的,也就是说网络跨越整 个架构。在一个实施例中,一个PE将在单个周期中与任何其他PE通信。 在一个实施例中,为了改善路由带宽,在PE的行之间可并行布置若干个 网络。
相对于FPGA,这里的网络的某些实施例具有三个优点:面积、频率 和程序表达。这里的网络的某些实施例按粗颗粒操作,这例如减少了配置 比特的数目,从而减小了网络的面积。网络的某些实施例还通过直接在电 路(例如,硅)中实现流控制逻辑来获得面积减小。加固的网络实现的某 些实施例相对于FPGA还享有频率优点。因为面积和频率优点,功率优点 可存在于在同等吞吐量下使用更低电压之处。最后,网络的某些实施例与 FPGA线路相比提供了更好的高级别语义,尤其是对于可变定时而言,从 而那某些实施例更容易被编译器作为目标。这里的网络的某些实施例对于 分布式点到点数据通道的构造可被认为是一组可组合的基元。
在某些实施例中,多播源可不断言其数据有效,除非其接收到了来自 每个信宿(sink)的准备就绪信号。因此,在多播情况中可利用额外的联 接和控制比特。
与某些PE一样,网络可被静态配置。在此步骤期间,配置比特在每 个网络组件处被设置。这些比特例如控制复用器选择和流控制功能。我们 网络的前向路径要求一些比特来摆动其复用器。在图7A中所示的示例中, 要求每跳四个比特:东复用器和西复用器各自利用一个比特,而往南的复 用器利用两个比特。在这个实施例中,对于数据路径可利用四个比特,但 对于流控制功能(例如,在流控制路径网络中)可利用7个比特。其他实 施例可利用更多比特,例如如果CSA进一步利用北-南方向的话。流控制 功能可对于流控制可来自的每个方向利用一配置比特。这可使得能够静态 地设置流控制功能的敏感性。下面的表格1对于图7B中的网络总结了流控 制功能的布尔代数实现,其中配置比特被大写。在此示例中,利用了七个 比特。
表格1:流实现
Figure BDA0002512929450000311
对于图7B中从左侧起的第三流控制框,EAST_WEST_SENSITIVE和 NORTH_SOUTH_SENSITIVE被描绘为分别被设置来为粗线和虚线通道实 现流控制。
图8图示了根据本公开的实施例的电路交换网络800。电路交换网络 800耦合到CSA组件(例如,处理元件(PE))802,并且可类似地耦合 到(一个或多个)其他CSA组件(例如,PE),例如通过从交换机(例如, 复用器)804-828创建的一个或多个通道来耦合。这可包括水平(H)交换 机和/或垂直(V)交换机。描绘的交换机可以是图6中的交换机。交换机 可包括一个或多个寄存器804A-828A来存储控制值(例如,配置比特)以 控制对交换机的(一个或多个)输入和/或(一个或多个)输出的选择来允 许值从(一个或多个)输入传递到(一个或多个)输出。在一个实施例中, 交换机选择性地耦合到网络830(例如,向右(东(E))发送数据)、832(例如,向下(南(S))发送数据)、834(例如,向左(西(W)) 发送数据)和/或836(例如,向上(北(N))发送数据)中的一个或多 个。网络830、832、834和/或836可耦合到图8中的组件(或者组件的子 集)的另一实例,以例如创建支持可配置空间加速器(例如,如本文所述 的CSA)的组件(例如,PE)之间的通信的流控制通信通道(例如,路 径)。在一个实施例中,网络(例如,网络830、832、834和/或836或者 一单独的网络)从源(例如,核心)接收控制值(例如,配置比特)并且 使得该控制值(例如,配置比特)被存储在寄存器804A-828A中以使得相 应的交换机804-828形成期望的通道(例如,根据数据流图)。处理元件 802也可包括(一个或多个)控制寄存器802A,例如作为图9中的操作配 置寄存器919。交换机和其他组件从而在某些实施例中可被设置为创建处 理元件之间的一个或多个数据路径和/或这些数据路径的背压路径,例如如 本文所述。在一个实施例中,这些(控制)寄存器804A-828A中的值(例 如,配置比特)被描绘为具有指代对于输入的复用选择的可变名称,例如 这些值具有指代端口号的数字和指代数据所来自的方向或PE输出的字母, 例如其中806A中的E1指代来自网络的东侧的端口号1。
(一个或多个)网络可被静态配置,例如除了在对数据流图的配置期 间PE被静态配置以外。在配置步骤期间,可在每个网络组件处设置配置 比特。这些比特可控制例如复用器选择以控制数据流令牌(例如,在数据 路径网络上)及其相应的背压令牌(例如,在流控制路径网络上)的流动。 网络可包括多个网络,例如数据路径网络和流控制路径网络。一网络或多 个网络可利用不同宽度(例如,第一宽度,和更窄或更宽的第二宽度)的 路径。在一个实施例中,数据路径网络比流控制路径网络的宽度具有更宽 的(例如,比特传输)宽度。在一个实施例中,第一网络和第二网络的每 一者包括其自己的数据路径和流控制路径,例如数据路径A和流控制路径 A和更宽的数据路径B和流控制路径B。例如,生产者PE的单个输出缓冲 器的数据路径和流控制路径耦合到消耗者PE的多个输入缓冲器。在一个 实施例中,为了改善路由带宽,在PE的行之间并行布置若干个网络。与 某些PE一样,网络可被静态配置。在此步骤期间,可在每个网络组件处 设置配置比特。这些比特控制例如数据路径(例如,复用器创建的数据路 径)和/或流控制路径(例如,复用器创建的流控制路径)。前向(例如, 数据)路径可利用控制比特来摆动其交换机和/或逻辑门。
图9图示了根据本公开的实施例的包括加速器902的硬件处理器分片 900。加速器902可以是根据本公开的CSA。分片900包括多个缓存堆(例 如,缓存堆908)。可包括请求地址文件(request address file,RAF)电路 910,例如如下面在第2.2节中论述的。ODI可以指晶粒上互连,例如在遍 及整个晶粒、连接起所有分片的互连。OTI可以指分片上互连,例如遍及 整个分片、例如将分片上的缓存堆连接在一起。
2.1处理元件
在某些实施例中,CSA包括异质PE的阵列,其中架构由若干种类型 的PE组成,每个PE只实现数据流操作器的子集。作为示例,图10示出 了能够实现广泛的一组整数和控制操作的PE的临时实现方式。其他PE, 包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些,可具有类似 的实现风格,例如用适当的(数据流操作器)电路替代ALU。CSA的PE (例如,数据流操作器)可在执行开始之前被配置(例如,编程)来实现 PE支持的集合之中的特定数据流操作。配置可包括一个或两个控制字,这 些控制字指定控制ALU的操作码、引导PE内的各种复用器并且驱动数据 流进出PE通道。可通过对这些配置比特进行微编码来实现数据流操作器。 图10中描绘的整数PE 1000被组织为从上向下流动的单级逻辑管线。数据 从一组本地网络之一进入PE 1000,在这里其被注册在输入缓冲器中以便 后续操作。每个PE可支持若干个宽的面向数据的和窄的面向控制的通道。 配设的通道的数目可基于PE功能而变化,但面向整数的PE的一个实施例 具有2个宽的和1-2个窄的输入和输出通道。虽然整数PE被实现为单周期 管线,但可利用其他管线化选择。例如,乘法PE可具有多个管线级。
PE执行可按数据流风格进行。基于配置微代码,调度器可检查PE入 口和出口缓冲器的状态,并且在配置的操作的所有输入都已到达并且该操 作的出口缓冲器可用时,协调数据流操作器(例如,ALU上的)对该操作 的执行。所得到的值可被放置在配置的出口缓冲器中。一个PE的出口缓 冲器和另一PE的入口缓冲器之间的传送可随着缓冲变得可用而异步发生。 在某些实施例中,PE被配设成使得每个周期完成至少一个数据流操作。第 2节论述了涵盖基元操作的数据流操作器,例如加法、异或、或者拾取。 某些实施例可在能量、面积、性能和时延方面提供优点。在一个实施例中, 利用到PE控制路径的扩展,可使得更融合的组合成为可能。在一个实施 例中,处理元件的宽度是64比特,例如针对HPC中的双精度浮点计算的 大量利用并且为了支持64比特存储器寻址。
2.2通信网络
CSA微体系结构的实施例提供了一起在多个通信尺度上提供时延不敏 感通道的体系结构抽象的实现方式的网络的层次体系。CSA通信层次体系 的最低级别可以是本地网络。本地网络可以是静态电路交换的,例如利用 配置寄存器来摆动本地网络数据路径中的(一个或多个)复用器以形成通 信的PE之间的固定电路径。在一个实施例中,本地网络的配置对于每个 数据流图被设置一次,例如与PE配置同时。在一个实施例中,静态电路 交换针对能量优化,例如其中CSA通信流量的绝大部分(可能大于95%) 将会穿过本地网络。程序可包括在多个表达式中使用的项。为了针对此情 况进行优化,这里的实施例提供了对于本地网络内的多播的硬件支持。若 干个本地网络可被聚集在一起以形成路由通道,这些路由通道例如(作为 网格)散布在PE的行和列之间。作为优化,可包括若干个本地网络来运 载控制令牌。与FPGA互连相比,可在数据路径的粒度上路由CSA本地网 络,并且另一个差异可以是CSA对控制的对待。CSA本地网络的一个实施 例是显式流控制的(例如,背压式的)。例如,对于每个前向数据路径和 复用器集合,CSA将会提供与前向数据路径物理上配对的向后流动的流控 制路径。两个微体系结构路径的组合可提供时延不敏感通道抽象的低时延、低能量、低面积、点到点实现。在一个实施例中,CSA的流控制线路对于 用户程序而言是不可见的,但是它们可由为用户程序服务的体系结构所操 纵。例如,第1.2节中描述的异常处理机制可通过在检测到异常状况时将 流控制线路拉到“不存在”状态来实现。此动作不仅可以优雅地暂缓在犯 规的计算中涉及的管线的那些部分,而且也可保持导致异常的机器状态, 例如用于诊断分析。第二网络层,例如夹层网络,可以是共享的封包交换 网络。夹层网络可包括多个分布式网络控制器,即网络数据流端点电路。 夹层网络(例如,由图73中的虚线框示意性指示的网络)可提供更一般的 长程通信,例如以时延、带宽和能量为代价。在一些程序中,大多数通信 可在本地网络上发生,从而夹层网络配设比较起来将会大幅减少,例如每 个PE可连接到多个本地网络,但CSA对于PE的每个逻辑邻域将只配设一 个夹层端点。由于夹层实际上是共享网络,所以每个夹层网络可运载多个 逻辑上独立的通道,并且例如被配设有多个虚拟通道。在一个实施例中, 夹层网络的主要功能是提供PE之间以及PE和存储器之间的宽范围通信。 除了这个能力以外,夹层还可包括(一个或多个)网络数据流端点电路, 例如用来执行某些数据流操作。除了这个能力以外,夹层还可作为运行时 支持网络操作,例如由此各种服务可以按用户程序透明的方式访问完整架 构。在这个身份上,夹层端点可例如在CSA配置期间为其本地邻域充当控 制器。为了形成跨越CSA分片的通道,可利用三个子通道和两个本地网络 通道(其向和从夹层网络中的单个通道运载流量)。在一个实施例中,利 用一个夹层通道,例如一个夹层和两个本地=总共3个网络跳。
网络层上的通道的可组合性可在分片间、晶粒间和架构粒度上被扩展 到更高级别的网络层。
图10图示了根据本公开的实施例的处理元件1000。在一个实施例中, 操作配置寄存器1019在配置(例如,映射)期间被加载并且指定此处理 (例如,计算)元件将要执行的特定操作(或者多个特定操作)。寄存器 1020活动可被该操作(复用器1016的输出,例如被调度器1014控制)所 控制。调度器1014可例如在输入数据和控制输入到达时调度处理元件1000 的一个或多个操作。控制输入缓冲器1022连接到本地网络1002(并且例 如本地网络1002可包括如图7A中的数据路径网络和如图7B中的流控制 路径网络)并且在值到达时被加载以该值(例如,网络具有(一个或多个) 数据比特和(一个或多个)有效比特)。控制输出缓冲器1032、数据输出 缓冲器1034和/或数据输出缓冲器1036可接收处理元件1000的输出,例如 由操作(复用器1016的输出)所控制的输出。每当ALU 1018执行时(也 由复用器1016的输出控制),状态寄存器1038就可被加载。控制输入缓 冲器1022和控制输出缓冲器1032中的数据可以是单个比特。复用器1021 (例如,操作对象A)和复用器1023(例如,操作对象B)可源发输入。
例如,假定此处理(例如,计算)元件的操作是(或者包括)在图3B 中被称为拾取的东西。处理元件1000于是将从数据输入缓冲器1024或者 数据输入缓冲器1026选择数据,以例如去到数据输出缓冲器1034(例如, 默认)或者数据输出缓冲器1036。1022中的控制比特从而如果从数据输入 缓冲器1024选择则可指示0,或者如果从数据输入缓冲器1026选择则可指 示1。
例如,假定此处理(例如,计算)元件的操作是(或者包括)在图3B 中被称为切换的东西。处理元件1000将向数据输出缓冲器1034或者数据 输出缓冲器1036输出数据,例如从数据输入缓冲器1024(例如,默认) 或者数据输入缓冲器1026输出。1022中的控制比特从而如果向数据输出 缓冲器1034输出则可指示0,或者如果向数据输出缓冲器1036输出则可指示1。
多个网络(例如,互连)可连接到处理元件,例如(输入)网络1002、 1004、1006和(输出)网络1008、1010、1012。这些连接可以是交换机, 例如如参考图7A和7B所述。在一个实施例中,每个网络包括两个子网络 (或者网络上的两个通道),例如一个用于图7A中的数据路径网络,并 且一个用于图7B中的流控制(例如,背压)路径网络。作为一个示例, 本地网络1002(例如,设置为控制互连)被描绘为被切换(例如,连接) 到控制输入缓冲器1022。在这个实施例中,数据路径(例如,如图7A中 的网络)可运载控制输入值(例如,一个或多个比特)(例如,控制令牌) 并且流控制路径(例如,网络)可从控制输入缓冲器1022运载背压信号 (例如,背压或非背压令牌),以例如向上游生产者(例如,PE)指出新 的控制输入值不会被加载到(例如,发送到)控制输入缓冲器1022中,直 到背压信号指出在控制输入缓冲器1022中有用于(例如,来自上游生产者 的控制输出缓冲器的)新控制输入值的空间为止。在一个实施例中,新的 控制输入值可不进入控制输入缓冲器1022,直到(i)上游生产者接收到 来自“控制输入”缓冲器1022的“空间可用”背压信号并且(ii)新的控 制输入值被从上游生产者发送为止,并且例如这可暂缓处理元件1000,直 到这种情况发生(并且(一个或多个)目标输出缓冲器中的空间可用)为 止。
数据输入缓冲器1024和数据输入缓冲器1026可类似地执行,例如本 地网络1004(例如,被设置为数据(而不是控制)互连)被描绘为被切换 (例如,连接)到数据输入缓冲器1024。在这个实施例中,数据路径(例 如,如图7A中的网络)可运载数据输入值(例如,一个或多个比特) (例如,数据流令牌)并且流控制路径(例如,网络)可从数据输入缓冲 器1024运载背压信号(例如,背压或非背压令牌),以例如向上游生产者 (例如,PE)指出新的数据输入值不会被加载到(例如,发送到)数据输 入缓冲器1024中,直到背压信号指出在数据输入缓冲器1024中有用于 (例如,来自上游生产者的数据输出缓冲器的)新数据输入值的空间为止。 在一个实施例中,新的数据输入值可不进入数据输入缓冲器1024,直到 (i)上游生产者接收到来自“数据输入”缓冲器1024的“空间可用”背 压信号并且(ii)新的数据输入值被从上游生产者发送为止,并且例如这 可暂缓处理元件1000,直到这种情况发生(并且(一个或多个)目标输出 缓冲器中的空间可用)为止。控制输入值和/或数据输出值可被暂缓在其各 自的输出缓冲器(例如,1032、1034、1036)中,直到背压信号指出对于 (一个或多个)下游处理元件在输入缓冲器中有可用空间为止。
处理元件1000可被暂缓执行,直到其操作对象(例如,控制输入值及 其对应的一个或多个数据输入值)被接收到和/或直到在处理元件1000的 (一个或多个)输出缓冲器中对于由对这些操作对象的操作的执行要产生 的数据有空间为止。
在某些实施例中,面积和能量减少的重大来源是对每种类型的处理元 件所支持的数据流操作的定制。在一个实施例中,适当子集(例如,大多 数)处理元件只支持几个操作(例如,一个、两个、三个或者四个操作类 型),例如一种实现选择,其中浮点PE只支持浮点乘法或浮点加法之一, 但不同时支持两者。
2.3存储器接口
在某些实施例中,数据请求(例如,加载请求或者存储请求)被可配 置空间加速器的存储器接口电路(例如,RAF电路)发送和接收。在一个 实施例中,与请求(例如,加载请求或存储请求)相对应的数据被返回到 发出了请求的那同一个存储器接口电路(例如,RAF电路)。请求地址文 件(RAF)电路——其一个版本在图11中示出——可负责执行存储器操作并且充当CSA架构和存储器层次体系之间的媒介。这样一来,RAF的主要 微体系结构任务可以是用CSA架构的有序语义使无序存储器子***合理化。 在这个身份上,RAF电路可被配设有完成缓冲器,例如对存储器响应重排 序并且按请求顺序将它们返回到架构的数据存储结构。RAF电路的第二个 主要功能可以是以地址转化和页游走器的形式提供支持。传入虚拟地址可 利用(例如,通道可关联的)转化后备缓冲器(translation lookaside buffer,TLB)被转化成物理地址。为了提供充足的存储器带宽,每个CSA分片可 包括多个RAF电路。与架构的各种PE一样,RAF电路可通过在选择存储 器操作来执行之前检查输入参量和输出缓冲(如果要求的话)的可用性来 以数据流风格操作。在某些实施例中,单个RAF电路(例如,其到存储器 中的端口)被复用在若干个共位的(co-located)存储器操作之间(例如,如RAF电路的存储器操作寄存器中存储的值所指示)。复用的RAF电路 可用于最小化其各种子组件的面积开销,以例如共享加速器缓存互连 (Accelerator Cache Interconnect,ACI)网络(例如,如下文更详细描述)、 共享虚拟存储器(shared virtual memory,SVM)支持硬件、夹层网络接口 和/或其他硬件管理设施。然而,有一些程序特性也可激发这个选择。在一 个实施例中,(例如,有效)数据流图将会轮循共享虚拟存储器***中的 存储器。像是图遍历这样的存储器时延受限程序可利用许多分开的存储器 操作而由于存储器依从控制流而饱和存储器带宽。虽然每个RAF可被复用, 但CSA在分片粒度上可包括多个(例如,8到32之间)RAF以确保充足 的缓存带宽。RAF可经由本地网络和夹层网络两者与架构的其余部分通信。 在RAF被复用的情况下,每个RAF可配设有到本地网络中的若干个端口。 这些端口可充当到存储器的最小时延、高度确定性路径以供时延敏感或者 高带宽存储器操作使用。此外,RAF可配设有夹层网络端点,该夹层网络 端口例如向运行时服务和遥远的用户级存储器访问者提供存储器访问。
图11图示了根据本公开的实施例的请求地址文件(RAF)电路1100。 在一个实施例中,在配置时,在(一个或多个)寄存器1110中指定曾在数 据流图中的存储器加载和存储操作。数据流图中到这些存储器操作的弧随 后可连接到输入队列1122、1124和1126。来自那些存储器操作的弧从而 在某些实施例中离开完成缓冲器1128、1130或1132。依从性令牌(其可 以是单个比特)在某些实施例中到达队列1118和1120中。依从性令牌在 某些实施例中将会从队列1116离开。依从性令牌计数器1114可以是队列 的紧凑表示并且跟踪用于任何给定输入队列的依从性令牌的数目。如果依 从性令牌计数器1114饱和,则在某些实施例中对于新的存储器操作可不生 成额外的依从性令牌。因此,存储器排序电路(例如,图12中的RAF) 可暂缓调度新的存储器操作,直到依从性令牌计数器1114变得不饱和为止。 在一个实施例中,操作的组分是(i)单个输入队列1122、1124或1126 (例如,对于PE请求的经由端口1101从存储器(例如,缓存)的加载操 作从PE接收地址数据)和相应的完成缓冲器1128、1130或1132(例如, 接收对于已从存储器完成了加载操作的指示)或者(ii)(i)来自1122、 1124或1126的一对输入队列(例如,一个接收要存储的数据(例如,有 效载荷数据)并且一个接收指出从PE经由端口1101向存储器(例如,缓 存)中何处存储该数据的地址)和相应的完成缓冲器1128、1130或1132 (例如,接收对于已在存储器中完成了该存储操作的指示)。作为加载的 示例,地址到达队列1122中,调度器1112在寄存器1110中将其匹配为被编程为是加载操作。在某些实施例中,用于此加载的完成缓冲器槽位例如 是按地址到达的顺序来指派的。假定图中的这个特定加载没有被指定依从 性,则在某些实施例中地址和完成缓冲器槽位被调度器(例如,经由存储 器命令1142)派遣到存储器***。当结果返回到复用器1140(示意性示出) 时,在某些实施例中其被存储到其指定的完成缓冲器槽位中(例如,因为 其在存储器***中始终携带着目标槽位)。在某些实施例中完成缓冲器按 地址到达的顺序将结果发送回到本地网络(例如,本地网络1102、1104、1106或1108)中。
存储可以是类似的,例如除了在某些实施例中地址和数据两者都必须 在任何操作被派遣到存储器***之前到达(例如,从一个或多个PE到达) 以外。
本地网络1102、1104、1106或1108可以是电路交换网络,例如如参 考图6-图8所论述的。在某些实施例中,当RAF电路1100的输入队列已 满时,RAF电路1110将经由网络向生产者(例如,发送器)组件(例如, PE)发送背压值。背压值可使得生产组件(例如,PE)暂缓发出或发送额 外的存储器请求(例如,向该特定的输入队列),直到在RAF电路的输入 队列中有存储空间可用为止。在某些实施例中,接收组件(例如,PE)将 经由网络向RAF电路1110发送背压值以暂缓从完成缓冲器1128、1130或 1132发送数据,直到在接收组件(例如,PE)的输入队列中有存储空间可 用为止。
可选地,可包括转化后备缓冲器(TLB)1146来将从输入队列1122、 1124或1126接收的逻辑地址转化成存储器(例如,缓存)的物理地址。 在一个实施例中,访问的存储器是本文论述的缓存堆中的一个或多个。
数据流图可能够并行生成大量的(例如,字粒度)请求。从而,CSA 的某些实施例提供了具有充分的带宽来服务CSA的缓存子***。可利用例 如如图12中所示的大量成堆的缓存微体系结构。图12图示了根据本公开 的实施例的电路1200,其中多个请求地址文件(RAF)电路(例如,RAF 电路(1))耦合在多个加速器分片(1208、1210、1212、1214)和多个 缓存堆(例如,缓存堆1202)之间。在一个实施例中,RAF和缓存堆的数 目可处于1:1或1:2的比率。缓存堆可包含完全缓存线(例如,而不是按字 分区),其中每条线在缓存中恰好有一个归属地。缓存线可经由伪随机函 数被映射到缓存堆。CSA可采用共享虚拟存储器(SVM)模型来与其他分 片体系结构集成。某些实施例包括加速器缓存互连(ACI)网络1240(将 RAF连接到缓存堆和/或将PE连接到分片管理器1230,例如如本文公开的 管理时间复用的分片管理器)。这个网络可在RAF和缓存之间运载地址和 数据。ACI的拓扑可以是级联的交叉开关(crossbar),例如作为时延和实 现复杂度之间的折衷。分片管理器1230可耦合到处理器的核心,例如图2 中的核心之一。核心可向分片管理器发送开始分片管理操作的指示。PE可例如如本文所述经由电路交换网络与RAF电路通信。
在某些实施例中,加速器-缓存网络还耦合到包括缓存归属代理和/或 下一级缓存的电路1220。在某些实施例中,加速器-缓存网络(例如,互 连)与加速器(例如,加速器分片)的任何(例如,电路交换或封包交换) 网络分离,例如,RAF是处理元件和缓存归属代理和/或下一级缓存之间的 接口。在一个实施例中,缓存归属代理将连接到存储器(例如,与缓存堆 分离)以从该存储器(例如,图2中的存储器202)访问数据,以例如在 缓存堆和(例如,***)存储器之间移动数据。在一个实施例中,下一级 缓存是(例如,单个)更高级缓存,例如使得针对在更低级缓存(例如, 缓存堆)中没有找到(例如,错失)的数据检查下一级缓存(例如,更高 级缓存)。在一个实施例中,此数据是有效载荷数据。在另一实施例中, 此数据是物理地址到虚拟地址映射。在一个实施例中,CHA将对错失(例 如,更高级缓存中的错失)执行对(例如,***)存储器的搜索并且对于 命中(例如,请求的数据在被搜索的缓存中)不执行搜索。
2.4CSA的时间复用
在CSA的某些实施例中,最优使用是在每个周期(例如,在例如时钟 边缘上驱动执行的时钟的每个周期)中执行与(例如,主)内循环相关联 的操作。然而,可存在如下支持操作(例如,外循环):这些支持操作不 在每个周期执行并且可以共享相同的CSA资源,而不会损害整体程序性能。 减少这些更冷的代码段所要求的资源允许了更多的资源被专用于热的内循 环,有益于性能。
这里的某些实施例提供了空间阵列(例如,CSA)中的时间复用,其 允许了不那么频繁执行的操作共享空间阵列(例如,架构)资源。这减少 了执行一些代码所需要的资源的整体数目并且改善了每单位面积的性能和 每单位功率(例如,瓦特)的性能。这里的某些实施例允许了共享发送和/ 或接收(例如,物理上相邻的)处理元件以减小这些处理元件之间的距离。
这里的某些实施例允许了数据流图的较少利用的部分使用更少的资源。 例如,在一组多种多样的数据流图上,PE网络的大部分(例如,时延不敏 感通道(latency-insensitive channel,LIC))可在没有性能损失的情况下 被复用,从而利用具有更少资源的硬件,从而增大每面积的性能。
这里的某些实施例提供了网络时间复用和/或处理元件时间复用,以例 如节省实现面积。这里的某些实施例包括投标来避免复用的阶段之间的伪 切换(例如,每个周期)和/或容许没有能量开销的基线全吞吐量兼容性。 这里的某些实施例允许了可选的时间复用,同时仍容许没有能量开销的基 线全吞吐量兼容性。这里的某些实施例允许了针对服务质量(QoS)的切 换的更细划分,而不是使用要求固定大小复用槽位的定时复用关闭。
这里的某些实施例允许了复用PE间通信网络,例如包括数据路径网 络和流控制(例如,背压)路径网络。这里的某些实施例在CSA(例如, 其电路交换网络)的复用器控制内引入了新的配置。这里的某些实施例引 入了低开销QoS机制来扩展PE网络的适用性。这里的某些实施例引入了 调度机制来改善PE网络的性能。
这里的某些实施例向复用的网络中引入了新的配置状态。图13示出了 用于实现时间复用网络的硬件的示例。新配置包括对于多个配置(例如, 一个或多个发送PE到一个或多个接收PE的多个映射)的存储。这里的某 些实施例包括控制网络的逻辑阶段的单个复用器(或者一组复用器)的多 个配置。在某些实施例中,在每个阶段(例如,在时钟的周期之间交替选 中的阶段)期间,一个配置被选择。从全局CSA的角度来看,这个选项将 设置两个或更多个处理元件之间的路径(例如,前向数据路径和后向的流 控制(背压)路径),这些处理元件随后将着手在该周期中通信,例如在 架构的流控制之后。在某些实施例中,状态机(例如,在分片管理器中) 被用于控制对于哪个配置在给定周期中活跃的选择。在一些情况下,这个 控制可被在相邻网络复用器之间共享。这里的某些实施例不(例如,大幅) 更改CSA设计中的定时路径,其中所有时间复用的复用器路径在时钟周期 中同时提早摆动。在一个实施例中,网络的数据路径部分和网络的流控制 路径部分(例如,流控制激活)两者的阶段之间的时间复用切换是由与前 向路径相同的配置比特和状态机来控制的,因此没有招致额外的硬件开销。
时间复用的这里的某些实施例是与非时间复用网络完全性能兼容的, 例如其中基线性能是简单地通过将配置寄存器设置为静态地使用相同的路 径(例如,相同的阶段)(这具有提供专用链路的效果)来实现的。在一 个实施例中,对于处理元件没有变化。在一个实施例中(例如,如下文进 一步论述的),处理元件包括时间复用功能,例如其中处理元件的每个输 入和输出将根据特定的时间复用方案理解其可在其上通信的周期。这里的 某些实施例允许了利用时间复用动态切换CSA的任何路径。在一个实施例 中,通过利用共享(例如,全局)控制指示(例如,时钟)一次切换所有 链路,在通信的端点(例如,PE、RAF等等)之间形成了一致的链路。在 某些实施例中,时间复用只被用在CSA的网络的适当子集上,例如其中网 络本质上是分离的。这允许了通过混合时间复用和非时间复用网络进行更 好的设计调谐来满足某些设计实施例的需求。
图13图示了根据本公开的实施例的多个处理元件1301、1303之间的 时间复用网络1300。在一个实施例中,每个PE是根据本公开的。在一个 实施例中,每个PE经由数据路径网络(例如,经由复用器形成)和流控 制路径网络(例如,经由复用器形成)耦合到另一PE。在一个实施例中, 包括下文参考图24-图44论述的组件(例如,数据路径和控制路径)。图示了时间复用网络1300,其中有复用器1314的放大视图,该复用器1314 被控制(例如,被电路的时钟控制)来允许时间复用。应当理解,网络中 使用的每个复用器可包括示出的电路或者控制(例如,复用器1310的输出) 可被广播到时间复用的每个复用器。作为一个示例,发送PE 1301通过经 由复用器形成的数据路径网络1302和经由复用器形成的流控制路径网络 1304耦合到另一PE 1303以从PE 1301向PE 1303发送结果数据(例如, 由PE 1301中的操作形成的结果数据)。在一个实施例中,每个复用器是 复用器1314的实例。描绘的复用器1314包括多个输入(例如,其中PE 1301的多个缓冲器或者其他PE的缓冲器可被选择为输入)和单个输出, 该单个输出基于来自控制复用器1310的输出来源发期望的输入。在一个实 施例中,控制复用器1310源发配置零1306或者(例如,不同的)配置一 1308值之一并且这些值被作为控制值传递(例如,00、01、10或11来唯 一地标识四个输入的每一者)。在某些实施例中,配置零1306和配置一 1308经由CSA的配置被存储在其中(例如,存储为寄存器),例如经由如 本文所述的网络。在一个实施例中,控制指示(例如,时钟)值1312被提 供作为对复用器1310的控制,例如使得在控制指示(例如,时钟)1312的 第一时间段中输出配置零1306并且在控制指示(例如,时钟)1312的第 二时间段中输出(例如,不同的)配置一1308。在一个实施例中,控制指 示(例如,时钟)循环来引起配置零1306和(例如,不同的)配置一1308 的交替输出以分别创建第一阶段和第二阶段。
图14A图示了根据本公开的实施例的耦合到第三处理元件(PE) 1400C的第一处理元件(PE)1400A和第二处理元件(PE)1400B之间的 处于第一阶段中的时间复用网络1410。在一个实施例中,网络1410是时 间复用的电路交换网络,例如被配置为从第一PE 1400A和第二PE 1400B 向第三PE 1400C发送值。
在某些实施例中,电路交换网络1410包括用于配置零1450和配置一 1452的存储。在一个实施例中,控制指示(例如,时钟)值1456被提供 作为对复用器1454的控制,例如使得在控制指示(例如,时钟)1456的 第一时间段中输出配置零1450并且在控制指示(例如,时钟)146的第二 时间段中输出(例如,不同的)配置一1452到网络1410的复用器。在描 绘的实施例中,配置零1450(例如,阶段)将使得PE 1400A的数据输出 缓冲器1 1436A耦合到PE 1400C的数据输入缓冲器0 1424C,并且例如也 使得PE 1400C的流控制(例如,背压)路径输出1408C耦合到PE 1400A 的流控制(例如,背压)路径输入1408A。
在一个实施例中,电路交换网络1410包括(i)数据路径来从第一PE 1400A向第三PE 1400C发送数据以及从第二PE 1400B到第三PE 1400C的 数据路径,以及(ii)流控制路径来发送第二控制值,该第二控制值控制 (或者用于控制)该数据从第一PE 1400A和第二PE 1400B到第三PE 1400C的发送。数据路径可在如下情况发生时发送数据(例如,有效)值:当数据在输出队列(例如,缓冲器)中时(例如,当数据在第一PE 1400A 的控制输出缓冲器1432A、第一数据输出缓冲器1434A或者第二数据输出 队列(例如,缓冲器)1436A中时,以及当数据在第二PE 1400B的控制输 出缓冲器1432B、第一数据输出缓冲器1434B或者第二数据输出队列(例 如,缓冲器)1436B中时)。在一个实施例中,每个输出缓冲器包括其自 己的数据路径,例如用于从生产者PE到消耗者PE的其自己的数据值,并 且此数据路径可以是时间复用的。PE中的组件是示例,例如PE可只包括 单个(例如,数据)输入缓冲器和/或单个(例如,数据)输出缓冲器。流 控制路径可发送控制数据,该控制数据控制(或者被用于控制)从第一PE 1400A和第二PE 1400B到第三PE 1400C的相应数据的发送。流控制数据 可包括来自每个消耗者PE(或者例如利用与(AND)逻辑门从所有消耗 者PE聚合)的背压值。流控制数据可包括背压值,例如指出将要接收输 入值的第三PE 1400C的缓冲器已满。
转到描绘的PE,处理元件1400A-C包括操作配置寄存器1419A-C,它 们可在配置(例如,映射)期间被加载并且指定一个或多个特定操作(例 如,指出是否启用网络内拾取模式)。在一个实施例中,只有接收PE 1400C的操作配置寄存器1419C被加载以用于网络内拾取的操作配置值。
多个网络(例如,互连)可连接到处理元件,例如网络1402、1404、 1406和1410。这些连接可以是交换机(例如,复用器)。在一个实施例中, PE和电路交换网络1410被配置(例如,控制设置被选择)成使得电路交 换网络1410为期望的操作提供路径。
处理元件(例如,或者在网络自身中)可包括如本文所述的有条件队 列(例如,只具有单个槽位,或者在每个有条件队列中有多个槽位)。在 一个实施例中,单个缓冲器(例如,或者队列)包括其自己的相应的有条 件队列。在描绘的实施例中,对于控制输入缓冲器1422C包括有条件队列 1413,对于第一数据输入缓冲器1424C包括有条件队列1415,并且对于PE 1400C的第二数据输入缓冲器1426C包括有条件队列1417。在一些实施例 中,接收者PE(例如,1400C)的任何有条件队列可用作本文描述的操作 的一部分。有条件队列的耦合也可以是时间复用的。
图14B图示了根据本公开的实施例的图14A中的多个处理元件之间的 处于第二阶段中的时间复用网络1410。在描绘的实施例中,配置一1452 (例如,阶段)将使得PE 1400B的数据输出缓冲器1 1436B耦合到PE 1400C的数据输入缓冲器1 1426C,并且例如还将使得PE 1400C的流控制 (例如,背压)路径输出1408C耦合到PE 1400B的流控制(例如,背压) 路径输入1435B。
在某些实施例中,空间体系结构的关键性能和能量效率促成因素是专 用的点到点通信。在一个实施例中,这种通信是本地的并且在单个周期中 发生。然而,更遥远的通信可花费多个周期来发生。为了容适这个多周期 通信并且简化编译,空间通信网络的某些实施例包括网络内存储资源(例 如,元件)。网络内存储可要求复用的通道彼此分离以防止死锁。为了解 决此问题,这里的某些实施例利用了网络内存储资源(例如,元件)内的 时间复用。例如,在一个实施例中为了实现完全吞吐量,架构内存储元件 被配设有两个槽位,这两个槽位可被划分在两个复用的阶段(例如,流) 之间以形成虚拟通道。
图15图示了根据本公开的实施例的多个处理元件1500A-1500C之间的 时间复用网络内存储元件1500。虽然从网络内存储元件1501的某些路径 被示为连接到两个下游PE1500B-C,但在其他实施例中,网络存储元件 1501可连接在单个上游PE(例如,PE 1500A)和单个下游PE(例如,PE 1500B或PE 1500C)之间。
描绘的网络内存储元件1501包括缓冲器1542。缓冲器1542中具有多 个槽位。在一个实施例中,为了支持时间复用,取代共享多个槽位(例如, 作为先进先出缓冲器),缓冲器1542包括相应的一个或多个槽位来用于时 间复用中的多阶段执行的每个特定阶段(例如,A或B,等等)。在某些 实施例中,配置存储1556(例如,寄存器)中存储有配置值(例如,在配置时间期间),并且当配置值包括第一值时,对于网络内存储元件1501使 能时间复用(例如,仅为特定阶段的数据预留槽位),而当配置值包括第 二值时,对于网络内存储元件1501禁用时间复用(例如,仅为特定阶段的 数据预留槽位)。额外地或者替换地,当配置值包括第三值时,来自上游 路径1550的数据值被存储到缓冲器1542的槽位中(和/或被从缓冲器1542 的槽位发送到输出路径1552,例如在接下来的周期中),并且当配置值包 括第四第二值时,来自上游路径1550的数据值被经由旁路路径1544向下 游引导(例如,延迟不大于由物理路径引起的延迟)到下游路径1552(例 如,到下游PE(例如,接收者PE)),例如不被存储在网络内存储元件 1501内(和/或被其所修改)。在某些实施例中,控制器1540基于存储在配置存储1556中的配置值来控制对(i)利用旁路路径1544的旁路模式或 者(ii)利用缓冲器1542存储的缓冲器模式的选择。在某些实施例中,数 据值可包括数据本身(例如,有效载荷)以及指出数据本身对于缓冲器存 储是有效的“有效输出”值。在某些实施例中,“有效输出”值与流控制 值一起被例如从PE 1500A的端口1508A发送到PE 1500B的端口1508B或 者PE 1500C的端口1508C。如本文进一步论述的,端口(例如,上游(TX) PE 1500A的端口1508A到下游(RX)PE 1500B的端口1508B或者下游 (RX)PE 1500C的端口1508C)可用于向PE和/或网络内元件(例如,网 络内元件1501)发送准备就绪、有效输入和/或有效输出值。在一个实施 例中,从缓冲器1532A延伸的路径1550运载“有效输出”值和数据值本身 (例如,路径1550可包括两条相应的导线)。在某些实施例中,PE 1500A 的端口1508A、PE 1500B的端口1508B和/或PE 1500C的端口1508C可发 送和接收数据。例如,PE 1500A的端口1508A可(i)从下游组件(例如, 网络内存储元件1501、PE 1500B或者PE 1500C)接收(一个或多个)流控制值(例如,背压值)和/或(ii)向下游组件发送“有效输出”值。
在某些实施例中,(i)当在旁路模式中时,在下游路径1548上接收 的(一个或多个)流控制值(例如,背压值)被控制器1540向上游引导到 上游路径1546(例如,到上游PE(例如,发送者PE)),例如而不被网 络内存储元件1501修改,或者(ii)当在缓冲器模式中时,控制器1540将 基于缓冲器1542的状态(例如,当在缓冲器1542中存储空间可用时的“队列准备就绪”值)把流控制值发送到上游路径1546(例如,到上游 PE(例如,发送者PE))。
作为一个示例,当在特定阶段中时,第一(例如,作为生产者)PE 1500A包括耦合到网络1510的(例如,输入)端口1508A(1-6),以例 如从第二(例如,作为消耗者)PE 1500B或第三(例如,作为消耗者)PE 1500C接收背压值。在一个电路交换配置中,(例如,输入)端口1508A (1-6)(例如,具有多个并行输入(1)、(2)、(3)、(4)、(5) 和(6))将从控制输入缓冲器1522B、第一数据输入缓冲器1524B和第二 数据输入缓冲器1526B和/或控制输入缓冲器1522C、第一数据输入缓冲器 1524C和第二数据输入缓冲器1526C的每一者接收相应的背压值。
在一个实施例中(例如,当在特定阶段中时),通过如下方式形成电 路交换背压路径(例如,通道):设置耦合到端口1508A的输入(例如, 输入1、2或3)和端口1508B的输出(例如,输出1、2或3)之间的导线 的交换机为第二PE 1500B的控制输入缓冲器1522B、第一数据输入缓冲器 1524B或第二数据输入缓冲器1526B之一发送背压令牌(例如,指出在输 入缓冲器/队列中没有存储可用的值)。额外地或者替换地,通过如下方式 形成(例如,不同的)电路交换背压路径(例如,通道):设置耦合到端 口1508A的输入(例如,输入1、2或3中的不同输入(或者另一实施例中 的多于3个输入之一))和端口1508C的输出(例如,输出1、2或3)之 间的导线的交换机为第三PE 1500C的控制输入缓冲器1522C、第一数据输 入缓冲器1524C或第二数据输入缓冲器1526C之一发送背压令牌(例如, 指出在输入缓冲器/队列中没有存储可用的值)。
在某些实施例中(例如,当在特定阶段中时),PE 1500A的输出缓冲 器1532A耦合到网络内存储元件,并且(i)当配置存储1556中的配置值 是某个值时,存储在PE 1500A的输出缓冲器1532A中的数据值通过上游 路径1550被发送(例如,从网络内存储元件1501向上游发送)并且经由 旁路路径1544被(例如,以不大于由物理路径引起的延迟的延迟)向下游 引导到下游路径1552(例如,从网络内存储元件1501向下游引导)到下 游PE(例如,PE1500B或PE 1500C)的输入缓冲器,例如而不被存储在 网络内存储元件1501内(和/或被其所修改),并且当(ii)配置存储1556 中的配置值是不同的值时,存储在缓冲器1532A中的(例如,不同的)数 据值通过上游路径1550被发送到网络内存储元件1501的缓冲器1542的槽 位中。在一个实施例中,例如当下游PE的输入缓冲器具有可用存储空间 (例如,槽位)时,存储在缓冲器1542中的那个(例如,不同)值被发送 到下游PE(例如,PE 1500B或PE1500C)。
图16图示了根据本公开的实施例的用于带宽分配来控制多个处理元件 之间的时间复用网络的电路1600。电路1600包括移位寄存器1620(例如, 其可包括任意多个槽位)来在细颗粒上实现带宽分配。在一个实施例中, 每个控制指示(例如,时钟)周期将使得不同的元素(A7-A0)是作为对 复用器1610的控制的输入1612,并且此过程随后重复。每个元素可对应 于选择存储1606或存储1608中的配置之一,从而选择到网络复用器1614 的输入1616中的相应一个作为从网络复用器1614(例如,作为图13中的 网络复用器1314的实例)的输出。例如,元素A7和A3可存储(例如, 作为配置CSA的一部分)如下值(例如,两比特),该值在该值被输出到 复用器1610时从存储1608选择配置一,并且元素A4可存储(例如,作为配置CSA的一部分)一不同的值,该值在B被输出到复用器1610时从存 储1608选择配置一,并且其他元素可包括不引起从存储1606或从存储 1608输出配置的值。
描绘的复用器1614包括多个输入(例如,其中PE的多个缓冲器或者 其他PE的缓冲器可被选择为输入)以及单个输出,该单个输出基于来自 控制复用器1610的输出而源发期望的输入。在一个实施例中,控制复用器 1610源发配置零1606或者(例如,不同的)配置一1606值之一并且这些 值被作为控制值传递(例如,00、01、10或11来唯一地标识四个输入的每一者)。在某些实施例中,配置零1606和配置一1606经由CSA的配置 被存储在其中(例如,作为寄存器),例如经由如本文所述的网络。在描 绘的实施例中,控制值1612是从移位寄存器1620提供的。通过提供根据 定义的模式在配置的LIC之间进行选择的状态机可获得额外的粒度。在具 有移位寄存器和两个潜在配置的一个实施例中,对移位寄存器中的每个复用元素(例如,槽位)只使用单个比特。对带宽分配的使用(例如,而不 只是在每个周期在两个阶段之间来回切换)可减少伪动态切换。例如,在 两个低利用率通信路径在共享链路的情况中,一个阶段可被指派槽位之一 并且另一个阶段被指派剩余的槽位,以使得在更少的周期中招致任何切换 惩罚,例如即使没有投标发生。
在某些实施例中,时间复用的主要能量成本是由于切换网络复用器而 引起的数据翻转。可减少切换量的一个方案是引入通信设立步骤(例如, 投标)。在此情况下,构造多个流控制网络,以使得每个点可看到两个通 信端点(例如,PE)的流控制状态。在通信要发生的周期之前,通信端点 流控制被考查以确定通信是否将实际发生(例如,输出数据可用并且数据 的输入存储空间可用)。在一个实施例中,如果通信将会发生,则这被记 录在“投标”寄存器中,这允许了配置复用器切换,而如果没有通信可发 生,则复用器不被切换。参考图24-图44论述数据和流控制的示例。
在CSA网络的时间复用的一个实施例中,在两个通信路径之间将以50% 占空比等同地共享特定网络。然而,这可将能够复用的LIC限制到具有小 于0.5令牌每周期的吞吐量的那些,并且在复用的LIC具有低于0.5令牌每 周期的占空比的情况下也仍然是对带宽的浪费。通过改善复用的粒度有可 能可以容适更多LIC。一个方案是简单地增加特定网络使用的配置,例如 具有K个配置,而不只是两个。在少于K个路径穿过切换点的情况下,可 通过向一个通信路径指派更多槽位来分配带宽。
图17图示了根据本公开的实施例的用于投标来控制多个处理元件之间 的时间复用网络的电路1700。电路1700包括被控制(例如,由电路的时 钟和阶段寄存器1728控制)来允许复用的复用器1714(例如,作为图13 中的网络复用器1314的实例)。应当理解,网络中使用的每个复用器可包 括示出的电路,或者控制(例如,复用器1310的输出)可被广播到时间复 用的每个复用器。作为一个示例,经由LIC耦合到另外的(一个或多个) PE的每组(一个或多个)发送PE中的多个被配置,其中该LIC包括经由 复用器形成的数据路径网络和经由复用器形成的流控制路径网络。在某些 实施例中,构造多个LIC,使得每个点可看到两个通信端点(例如,PE) 的数据状态和流控制状态。例如,在通信要发生的周期之前,通信端点流 控制被考查以确定通信是否将实际发生(例如,输出数据可用并且数据的 输入存储空间可用)。在一个实施例中,如果通信将会发生,则相应的值 被记录在投标寄存器1720中,这允许了配置复用器1714来切换,而如果 没有通信可发生,则复用器1740不被切换。阶段存储1728可存储或以其 他方式提供控制指示(例如,时钟)值。
描绘的复用器1714包括多个输入(例如,其中PE的多个缓冲器或者 其他PE的缓冲器可被选择为输入)以及单个输出,该单个输出基于来自 控制复用器1710的输出而源发期望的输入。在一个实施例中,控制电路 1710源发配置零1706或者(例如,不同的)配置一1708值之一并且这些 值被作为要生成的控制值(例如,00、01、10或11来唯一地标识四个输入的每一者)传递。在某些实施例中,配置零1706和配置一1708经由 CSA的配置被存储在其中(例如,存储为寄存器),例如经由如本文所述 的网络。在一个实施例中,阶段1728(例如,时钟值)被提供作为对控制 电路1710的控制,例如使得在投标1720指出相应的数据和存储可用时在 第一阶段(例如,时间段)中输出配置零1306并且在投标1720指出相应 的数据和存储可用时在第二阶段(例如,时间段)中输出(例如,不同的) 配置一1308。在一个实施例中,阶段1728是时钟,该时钟循环来在投标 为真时引起配置零1306和(例如,不同的)配置一1308的交替输出以分 别创建第一阶段和第二阶段。在某些实施例中,投标接收器(RX)复用器 1726和投标发送器(TX)复用器1724被包括来对接收者PE的“未满”值 (例如,来自输入控制器2500)和发送者PE的“有效”(例如,“非 空”)值(例如,来自输出控制器3500)进行检查。从而,在一个实施例 中,在给定的阶段中(例如,在第一时钟周期中),复用器1712使得来自 存储1706(或者在不同的时钟周期中是来自存储1708)的配置作为控制被 输出到投标接收器(RX)复用器1726和投标发送器(TX)复用器1724以 源发指出RX PE是否有存储空间可用以及TX PE是否有数据要发送到该存 储空间的值,并且当这两个值都指示“是”时,与门1722输出值到投标寄 存器1720。投标寄存器1720随后使得来自控制电路1710的相应输出源发 配置零1706或者(例如,不同的)配置一1708值之一并且这些值被作为 控制值(例如,00、01、10或11来唯一地标识四个输入的每一者)传递, 以输出1718赢得当前投标的输入1716。
作为CSA网络的时间复用的附加或替换,处理元件可被时间复用。在 一个实施例中,当PE被时间复用时,其输入和输出缓冲器(例如,队列) 被硬划分在时间复用的阶段之间(例如,作为情境)。这个划分创建了一 对虚拟通道,对于每个阶段有一个,这确保了情境之间的无死锁。当与情 境相关联的操作对象变得可用时,对于该情境发生执行。真实的时间复用 也是可接受的。对于有状态数据流操作器,例如重复(repeat,repeato)或 者流比较(scmp),在某些实施例中对于每个情境复制操作的状态。
在一个实施例中,本地网络上的数据传输以时间复用方式发生。在一 个实施例中,PE具有在PE间(例如,在分片中)共享的已知阶段。在一 个实施例中,只有与该阶段相关联的情境可发送,从而处理元件为适当的 阶段断言适当的流控制状态。在一个实施例中,阶段被逐周期地切换,允 许了复用的阶段共享网络带宽。然而,在某些实施例中网络路径不需要被 切换。时分或空分网络复用与此方案是兼容的,但不是必需的。
有可能在时间复用方案中引入额外的配置来允许每个操作具有其自己 的ALU或逻辑操作。这是一个更一般的方案,但在一个实施例中使用了将 被配设在每个处理元件处的额外配置状态。在一个实施例中,对配置的选 择是基于操作对象可用性作出的,并且对于情境的执行可能是在每当情境 的操作对象可用时发生的。
下面论述了两个复用的阶段(例如,作为情境),但是PE的任意多 个时间复用是可能的,例如倘若有足够的缓冲来为每个情境建立虚拟通道 的话。这里的某些实施例允许了有状态数据流图的复用,例如其中引入了 微体系结构内的虚拟通道和新的数据流操作来将令牌注入到复用的子图中。
在某些实施例中,在提供虚拟通道时的一个问题是每通道的缓冲量被 减小。从而,如果缓冲器被减少到一,则同步的时间复用可导致吞吐量损 失,这是由于需要在还没有消耗来自下游PE的先前数据的情况下从上游 PE加载新数据。为了修复此问题,这里的某些实施例使用偏移分阶段执行, 其中一阶段的PE执行和网络传送在紧接的周期中发生,如下文参考图 18A-18B所述。从而,单个复用情境可实现完全吞吐量(受制于时分复 用)。
图18A图示了根据本公开的实施例的处于第一阶段中的多个时间复用 处理元件1800A-C之间的处于第二阶段中的时间复用网络1810。图18B图 示了根据本公开的实施例的图18A中的处于第二阶段中的多个时间复用处 理元件1800A-C之间的处于第一阶段中的时间复用网络1810。
注意在一个实施例中,PE切换阶段(例如,A到B),而网络不切换 阶段。在一个实施例中,(例如,由配置值编程并且由调度器实现的)阶 段A中的PE实现第一操作,并且当被控制指示(例如,时钟)切换到阶 段B时(例如,在接连的周期中),(例如,由配置值编程并且由调度器 实现的)阶段B中的同样那些PE实现不同的第二操作。在一个实施例中, 对于特定的阶段预留输入缓冲器和输出缓冲器的单独槽位,例如对于输入 缓冲器和输出缓冲器的每一者如图所示的上方槽位被预留用于阶段A的PE 输出,并且输入缓冲器和输出缓冲器的每一者的下方槽位被预留用于阶段 B的PE输出。在一个实施例中,在同一周期中,PE在阶段A数据上(例 如,不在阶段B数据上)操作,并且网络传输阶段B数据(而不传输阶段 A数据),例如,并且在下一周期中,PE在阶段B数据上(例如,不在阶 段A数据上)操作,并且网络传输阶段A数据(而不传输阶段B数据), 并且这可被重复。
图18A(例如,根据本公开的实施例)图示了各自处于第一阶段中的 耦合到第三处理元件(PE)1800C的第一处理元件(PE)1800A和第二处 理元件(PE)1800B之间的处于第二阶段中的时间复用网络1810。在一个 实施例中,网络1810是时间复用的电路交换网络,例如被配置为从第一 PE 1800A和第二PE 1800B向第三PE 1800C发送值。
在某些实施例中,电路交换网络1810包括用于配置零1850和配置一 1852的存储。在一个实施例中,控制指示(例如,时钟)值1856被提供 作为对复用器1854的控制,以例如使得在控制指示(例如,时钟)1856的 第一时间段中输出配置零1850并且在控制指示(例如,时钟)1856的第 二时间段中输出(例如,不同的)配置一1852到网络1810的复用器。在描绘的实施例中,配置零1850(例如,阶段)将使得PE 1800A的数据输 出缓冲器1 1836B耦合到PE 1800C的数据输入缓冲器0 1824C,并且例如 还将使得PE 1800C的流控制(例如,背压)路径输出1808C耦合到PE 1800A的流控制(例如,背压)路径输入1808A。
在一个实施例中,电路交换网络1810包括(i)用来从第一PE 1800A 向第三PE1800C发送数据的数据路径以及从第二PE 1800B到第三PE 1800C的数据路径,以及(ii)流控制路径,用来发送控制(或者被用于控 制)从第一PE 1800A和第二PE 1800B发送该数据到第三PE 1800C的控制 值。数据路径可在数据在输出队列(例如,缓冲器)中时(例如,当数据 在第一PE 1800A的控制输出缓冲器1832A、第一数据输出缓冲器1834A或 者第二数据输出队列(例如,缓冲器)1836A中时以及当数据在第二PE 1800B的控制输出缓冲器1832B、第一数据输出缓冲器1834B或者第二数 据输出队列(例如,缓冲器)1836B中时)发送数据(例如,有效)值。 在一个实施例中,每个输出缓冲器包括其自己的数据路径,例如用于从生 产者PE到消耗者PE的其自己的数据值,并且此数据路径可以是时间复用 的。PE中的组件是示例,例如PE可只包括单个(例如,数据)输入缓冲 器和/或单个(例如,数据)输出缓冲器。流控制路径可发送控制数据,该 控制数据控制(或者被用于控制)从第一PE 1800A和第二PE1800B到第 三PE 1800C的相应数据的发送。流控制数据可包括来自每个消耗者PE (或者例如利用与逻辑门从所有消耗者PE聚合)的背压值。流控制数据 可包括背压值,例如指出将要接收输入值的第三PE 1800C的缓冲器已满。
转到描绘的PE,处理元件1800A-C包括操作配置寄存器1819A-C,这 些操作配置寄存器1819A-C可在配置(例如,映射)期间被加载并且指定 一个或多个特定操作(例如,指出是否启用网络内拾取模式)。在一个实 施例中,只有接收PE 1800C的操作配置寄存器1819C被加载以用于网络内 拾取的操作配置值。
多个网络(例如,互连)可连接到处理元件,例如网络1802、1804、 1806和1810。这些连接可以是交换机(例如,复用器)。在一个实施例中, PE和电路交换网络1810被配置(例如,控制设置被选择)成使得电路交 换网络1810为期望的操作提供路径。
处理元件(例如,或者在网络自身中)可包括如本文所述的有条件队 列(例如,只具有单个槽位,或者在每个有条件队列中有多个槽位)。在 一个实施例中,单个缓冲器(例如,或者队列)包括其自己的相应的有条 件队列。在描绘的实施例中,对于控制输入缓冲器1822C包括有条件队列 1813,对于第一数据输入缓冲器1824C包括有条件队列1815,并且对于PE 1800C的第二数据输入缓冲器1826C包括有条件队列1817。在一些实施例 中,接收者PE(例如,1800C)的任何有条件队列可用作本文描述的操作 的一部分。有条件队列的耦合也可以是时间复用的。
图18B图示了根据本公开的实施例的处于第二阶段中的图18A中的多 个处理元件之间的处于第一阶段中的时间复用网络1810(例如,用来在用 于阶段A数据的缓冲器之间传输数据)。在描绘的实施例中,配置一1852 (例如,阶段)将使得PE 1800B的数据输出缓冲器1 1836B耦合到PE 1800C的数据输入缓冲器1 1826C,并且例如还将使得PE 1800C的流控制 (例如,背压)路径输出1808C耦合到PE 1800B的流控制(例如,背压) 路径输入1835B。
在某些实施例中,有三种基本类型的实体可以是CSA操作的(例如, 输入和/或输出)操作对象:(i)时延不敏感通道(LIC),(ii)寄存器, 以及(iii)字面值。在一个实施例中,字面值的大小是在PE或其他数据流 单元上支持的操作对象的大小,例如具有完全64比特(64b)字面值的64b 操作对象。
接下来的描述中的操作的格式(例如,签名)使用以下形式:[{名 称}.]{操作对象类型}{u|d}.{数据类型}[={默认值}]。第一部分是可选的操 作对象命令(例如,对于结果是“res.”,或者对于控制序列是 “ctlseq.”)。接下来是操作对象类型,其中字符C(通道)、R(寄存器) 或者L(字面)指定什么操作对象类型有效。如果有d后缀,则操作对象 是定义的输出,而u后缀的意思是使用的是输入。接下来是数据类型,其 反映操作中的使用。
例如,res.CRd.s32的意思是操作对象是调用的res,其可以是通道(C) 或寄存器(R),其由操作定义(d)(例如,其是输出),并且使用32比 特的输入,它在操作内将其视为带正负号的。注意这不意味着小于32比特 的输入通道被正负号扩展,但是可以可选地包括符号扩展。
操作对象可具有默认值,由={默认值}表示,允许了在汇编代码中省 略各种拖尾操作对象。这对于给定的操作对象描述用=带着默认值示出。 值可以是:(i)数值,这是那个值(例如,op2.CRLu.i1=1的意思是默认 值为1),(ii)字母I的意思是%ign–忽略/读作0,(iii)字母N的意思 是%na–从未可用,作为输入或输出(例如,字段中的%na意思是该字段 未被用于该操作),(iv)字母R的意思是舍入模式字面 ROUND_NEAREST,以及(v)字母T的意思是存储器级别字面 MEMLEVEL_T0(例如,最近缓存)。
在操作码描述语义中,分号暗示着定序。如果操作对象单独出现,则 操作等待该值可用,例如for memrefs:op2;write(op0,op1);op3=0的意思是 该操作等待op2可用,执行其访问,然后定义op3。以下修饰语对于操作 对象可出现:非消耗使用(在汇编代码中经由“*”前缀指定)。这适用 于具有空/满语义的任何存储(例如,LIC,和/或寄存器),并且指定该操 作对象在未来将被再使用。
为了使用这些新的复用处理元件,操作状态体系结构被扩展到反映这 些设施的使用。在一个实施例中,有两个关键扩展。首先,在这个实施例 中,每个操作被扩展有新的字段,该字段表示该操作是否被复用。此外, 在此实施例中,包括允许复用和非复用的图部分之间的转变的两个新的操 作:复用和解复用。
在一个实施例中,CSA体系结构包括配置值,该配置值当被存储到配 置存储(例如,寄存器)中时使得CSA(例如,其PE)根据以下(例如, 语义和/或描述)执行Multiplex(复用)操作。
Figure BDA0002512929450000561
Figure BDA0002512929450000571
在一个实施例中,CSA体系结构包括配置值,该配置值当被存储到配 置存储(例如,寄存器)中时,使得CSA(例如,其PE)根据以下(例 如,语义和/或描述)执行Demultiplex(解复用)操作。
Figure BDA0002512929450000572
Figure BDA0002512929450000581
在某些实施例中,在提供虚拟通道时的一个问题是每通道的缓冲量被 减小。从而,如果缓冲器被减少到一,则同步的时间复用将导致吞吐量损 失,这是由于需要在还没有消耗来自下游PE的先前数据的情况下从上游 PE加载新数据。为了修复此问题,这里的某些实施例使用偏移分阶段执行, 其中一阶段的PE执行和网络传送在紧接的周期中发生,如图19A-19B中 所示。从而,单个复用情境可实现完全吞吐量(受制于时分复用)。
图19A图示了根据本公开的实施例的处于第一阶段中的上游处理元件 和处于第二阶段中的多个下游处理元件之间的时间复用网络内存储元件 1901,其中上游部分(缓冲器1942的上游)处于第二阶段中并且下游部分 (缓冲器1942的下游)处于第一阶段中。图19B图示了根据本公开的实施 例的处于第二阶段中的上游处理元件和处于第一阶段中的多个下游处理元 件之间的图19A中的时间复用网络内存储元件,其中上游部分(缓冲器1942的上游)处于第一阶段中并且下游部分(缓冲器1942的下游)处于 第二阶段中。
图19A-19B图示了根据本公开的实施例的多个处理元件1900A-1900C 之间的时间复用网络内存储元件1900。虽然从网络内存储元件1901的某 些路径被示为连接到两个下游PE 1900B-C,但在其他实施例中,网络存储 元件1901可连接在单个上游PE(例如,PE1900A)和单个下游PE(例如, PE 1900B或PE 1900C)之间。
描绘的网络内存储元件1901包括缓冲器1942。缓冲器1942中具有多 个槽位。在一个实施例中,为了支持时间复用,取代共享多个槽位(例如, 作为先进先出缓冲器),缓冲器1942包括相应的一个或多个槽位来用于时 间复用中的多阶段执行的每个特定阶段(例如,A或B,等等)。在某些 实施例中,配置存储1956(例如,寄存器)中存储有配置值(例如,在配置时间期间),并且当配置值包括第一值时,对于网络内存储元件1901使 能时间复用(例如,仅为特定阶段的数据预留槽位),而当配置值包括第 二值时,对于网络内存储元件1901禁用时间复用(例如,仅为特定阶段的 数据预留槽位)。额外地或者替换地,当配置值包括第三值时,来自上游 路径1950的数据值被存储到缓冲器1942的槽位中(和/或例如在接下来的 周期中被从缓冲器1942的槽位发送到输出路径1952),并且当配置值包 括第四第二值时,来自上游路径1950的数据值被经由旁路路径1944向下 游引导(例如,延迟不大于由物理路径引起的延迟)到下游路径1952(例 如,到下游PE(例如,接收者PE)),例如不被存储在网络内存储元件 1901内(和/或被其所修改)。在某些实施例中,控制器1940基于存储在配置存储1956中的配置值来控制对(i)利用旁路路径1944的旁路模式或 者(ii)利用缓冲器1942存储的缓冲器模式的选择。在某些实施例中,数 据值可包括数据本身(例如,有效载荷)以及指出数据本身对于缓冲器存 储是有效的“有效输出”值。在某些实施例中,“有效输出”值与流控制 值一起例如从PE 1900A的端口1908A被发送到PE 1900B的端口1908B或 者PE 1900C的端口1908C。如本文进一步论述的,端口(例如,上游(TX) PE 1900A的端口1908A到下游(RX)PE 1900B的端口1908B或者下游 (RX)PE 1900C的端口1908C)可用于向PE和/或网络内元件(例如,网 络内元件1901)发送准备就绪、有效输入和/或有效输出值。在一个实施 例中,从缓冲器1932A延伸的路径1950运载“有效输出”值和数据值本身 (例如,路径1950可包括两条相应的导线)。在某些实施例中,PE 1900A 的端口1908A、PE 1900B的端口1908B和/或PE 1900C的端口1908C可发 送和接收数据。例如,PE 1900A的端口1908A可(i)从下游组件(例如, 网络内存储元件1901、PE 1900B或者PE 1900C)接收(一个或多个)流控制值(例如,背压值)和/或(ii)向下游组件发送“有效输出”值。
在某些实施例中,(i)当在旁路模式中时,在下游路径1948上接收 的(一个或多个)流控制值(例如,背压值)被控制器1940向上游引导到 上游路径1946(例如,到上游PE(例如,发送者PE)),例如不被网络 内存储元件1901修改,或者(ii)当在缓冲器模式中时,控制器1940将基 于缓冲器1942的状态(例如,当在缓冲器1942中存储空间可用时的“队 列准备就绪”值)把流控制值发送到上游路径1946(例如,到上游PE (例如,发送者PE))。
作为一个示例,当在特定阶段中时,第一(例如,作为生产者)PE 1900A包括耦合到网络1910的(例如,输入)端口1908A(1-6),以例 如从第二(例如,作为消耗者)PE 1900B或第三(例如,作为消耗者)PE 1900C接收背压值。在一个电路交换配置中,(例如,输入)端口1908A (1-6)(例如,具有多个并行输入(1)、(2)、(3)、(4)、(5) 和(6))将从控制输入缓冲器1922B、第一数据输入缓冲器1924B和第二 数据输入缓冲器1926B和/或控制输入缓冲器1922C、第一数据输入缓冲器 1924C和第二数据输入缓冲器1926C的每一者接收相应的背压值。
在一个实施例中(例如,当在特定阶段中时),通过如下方式形成电 路交换背压路径(例如,通道):设置耦合到端口1908A的输入(例如, 输入1、2或3)和端口1908B的输出(例如,输出1、2或3)之间的导线 的交换机为第二PE 1900B的控制输入缓冲器1922B、第一数据输入缓冲器 1924B或第二数据输入缓冲器1926B之一发送背压令牌(例如,指出在输 入缓冲器/队列中没有存储可用的值)。额外地或者替换地,通过如下方式 形成(例如,不同的)电路交换背压路径(例如,通道):设置耦合到端 口1908A的输入(例如,输入1、2或3中的不同输入(或者另一实施例中 的多于3个输入之一))和端口1908C的输出(例如,输出1、2或3)之 间的导线的交换机为第三PE 1900C的控制输入缓冲器1922C、第一数据输 入缓冲器1924C或第二数据输入缓冲器1926C之一发送背压令牌(例如, 指出在输入缓冲器/队列中没有存储可用的值)。
在某些实施例中(例如,当在特定阶段中时),PE 1900A的输出缓冲 器1932A耦合到网络内存储元件,并且(i)当配置存储1956中的配置值 是某个值时,存储在PE 1900A的输出缓冲器1932A中的数据值通过上游 路径1950被发送(例如,从网络内存储元件1901向上游发送)并且经由 旁路路径1944被(例如,以不大于由物理路径引起的延迟的延迟)向下游 引导到下游路径1952(例如,从网络内存储元件1901向下游引导)到下 游PE(例如,PE1900B或PE 1900C)的输入缓冲器,例如不被存储在网 络内存储元件1901内(和/或被其所修改),并且当(ii)配置存储1956中 的配置值是不同的值时,存储在缓冲器1932A中的(例如,不同的)数据 值通过上游路径1950被发送到网络内存储元件1901的缓冲器1942的槽位中。在一个实施例中,存储在缓冲器1942中的那个(例如,不同)值被发 送到下游PE(例如,PE 1900B或PE 1900C),例如当下游PE的输入缓冲 器具有可用存储空间(例如,槽位)时。
图20图示了根据本公开的实施例的有和没有时间复用的可复用有状态 图流。图20包括第一操作2002(例如,经由第一组PE)和第二操作2004 (例如,经由第二组PE)被同时执行,但引起串行瓶颈2006。处理元件 的时间复用2010(例如,基于时钟周期在阶段之间切换)改善了整体操作 2012,并且结果被解复用2014以减小输出2016中的任何瓶颈。
图21图示了根据本公开的实施例的描绘由时间复用处理元件进行的复 用操作的流程。这里,计算A和B被2102和2104复用成由PE通过2106 进行的共享计算,并且结果随后在2108处被解复用并且结果分别被发送到 计算A和计算B。图21图示了两个独立计算共享共同子图的情况。到共同 子图的进入和退出点借由本文论述的所提出的新操作发生。如果操作器被 配设为描述多个不同的复用的操作,则共享的PE可实现两个不同的计算。
图22图示了根据本公开的实施例的流程图2200。描绘的流程2200包 括利用处理器的核心的解码器将指令解码成解码后指令2202;利用处理器 的核心的执行单元执行解码后指令以执行第一操作2204;接收包括多个节 点的数据流图的输入2206;将数据流图覆盖到处理器的多个处理元件和处 理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理 元件中的数据流操作器2208;当互连网络的第一配置在控制指示(例如, 时钟)的第一时间段中活跃时通过相应传入操作对象集合到达多个处理元 件的数据流操作器处利用互连网络和多个处理元件执行数据流图的第二操 作2210;并且当互连网络的第二配置在控制指示(例如,时钟)的第二时 间段中活跃时通过相应传入操作对象集合到达多个处理元件的数据流操作 器处利用互连网络和多个处理元件执行数据流图的第三操作2212。
图23图示了根据本公开的实施例的流程图2300。描绘的流程2300包 括接收包括多个节点的数据流图的输入2302;将数据流图覆盖到处理器的 多个处理元件、多个处理元件之间的数据路径网络和多个处理元件之间的 流控制路径网络中,其中每个节点被表示为多个处理元件中的数据流操作 器2304;当数据路径网络和流控制路径网络的第一配置在控制指示(例如, 时钟)的第一时间段中活跃时通过相应传入操作对象集合到达多个处理元 件的数据流操作器处执行数据流图的第一操作2306;并且当数据路径网络 和流控制路径网络的第二配置在控制指示(例如,时钟)的第二时间段中 活跃时通过相应传入操作对象集合到达多个处理元件的数据流操作器处执 行数据流图的第二操作2308。
本文详述了其中可使用上述内容的示范性体系结构、***等等。例如, 指令当被解码和执行时可引起本文公开的任何方法的执行。
可考虑到以下示例来描述公开的技术的至少一些实施例:
示例1.一种处理器,包括:
核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行 单元来执行所述解码后指令以执行第一操作;
多个处理元件;以及
所述多个处理元件之间的互连网络,用来接收包括多个节点的数据流 图的输入,其中所述数据流图将被覆盖到所述互连网络和所述多个处理元 件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且 所述多个处理元件:将在所述互连网络的第一配置在时钟的第一时间段中 活跃时通过相应传入操作对象集合到达所述多个处理元件的数据流操作器 处而执行所述数据流图的第二操作,并且将在所述互连网络的第二配置在 所述时钟的第二时间段中活跃时通过相应传入操作对象集合到达所述多个 处理元件的数据流操作器处而执行所述数据流图的第三操作。
示例2.如示例1所述的处理器,其中,所述互连网络在所述时钟的接 连周期中在所述第一配置、所述第二配置、和所述第一配置之间交替。
示例3.如示例1所述的处理器,其中,所述互连网络的第一配置将第 一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处 理元件耦合到第四处理元件。
示例4.如示例1所述的处理器,其中,所述互连网络的第一配置将第 一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处 理元件耦合到所述第二处理元件。
示例5.如示例1所述的处理器,其中,所述互连网络包括流控制路径 来根据所述数据流图运载背压信号以在来自下游处理元件的背压信号指出 所述下游处理元件中的存储不可用于所述多个处理元件中的一处理元件的 输出时暂缓该处理元件的执行。
示例6.如示例1所述的处理器,其中,所述多个处理元件中的一处理 元件包括第一操作配置和第二操作配置,并且所述处理元件:在所述处理 元件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作 配置执行所述第二操作,并且在所述处理元件的第二操作配置在所述时钟 的第二时间段中活跃时根据所述第二操作配置执行所述第三操作。
示例7.一种方法,包括:
利用处理器的核心的解码器将指令解码成解码后指令;
利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操 作;
接收包括多个节点的数据流图的输入;
将所述数据流图覆盖到所述处理器的多个处理元件和所述处理器的多 个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件 中的数据流操作器;
当所述互连网络的第一配置在时钟的第一时间段中活跃时,通过相应 传入操作对象集合到达所述多个处理元件的数据流操作器处,利用所述互 连网络和所述多个处理元件执行所述数据流图的第二操作;并且
当所述互连网络的第二配置在所述时钟的第二时间段中活跃时通过相 应传入操作对象集合到达所述多个处理元件的数据流操作器处,利用所述 互连网络和所述多个处理元件执行所述数据流图的第三操作。
示例8.如示例7所述的方法,其中,所述互连网络在所述时钟的接连 周期中在所述第一配置、所述第二配置和所述第一配置之间交替。
示例9.如示例7所述的方法,其中,所述互连网络的第一配置将第一 处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处理 元件耦合到第四处理元件。
示例10.如示例7所述的方法,其中,所述互连网络的第一配置将第 一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处 理元件耦合到所述第二处理元件。
示例11.如示例7所述的方法,其中,所述互连网络包括流控制路径 来根据所述数据流图运载背压信号以在来自下游处理元件的背压信号指出 所述下游处理元件中的存储不可用于所述多个处理元件中的一处理元件的 输出时暂缓该处理元件的执行。
示例12.如示例7所述的方法,其中,所述多个处理元件中的一处理 元件包括第一操作配置和第二操作配置,并且所述方法还包括在所述处理 元件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作 配置执行所述第二操作,并且在所述处理元件的第二操作配置在所述时钟 的第二时间段中活跃时根据所述第二操作配置执行所述第三操作。
示例13.一种装置,包括:
多个处理元件之间的数据路径网络;以及
所述多个处理元件之间的流控制路径网络,其中所述数据路径网络和 所述流控制路径网络将接收包括多个节点的数据流图的输入,所述数据流 图将被覆盖到所述数据路径网络、所述流控制路径网络和所述多个处理元 件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且 所述多个处理元件:将在所述数据路径网络和所述流控制路径网络的第一 配置在时钟的第一时间段中活跃时通过相应传入操作对象集合到达所述多 个处理元件的数据流操作器处而执行所述数据流图的第一操作,并且当所 述数据路径网络和所述流控制路径网络的第二配置在所述时钟的第二时间 段中活跃时通过相应传入操作对象集合到达所述多个处理元件的数据流操 作器处而执行所述数据流图的第二操作。
示例14.如示例13所述的装置,其中,所述数据路径网络和所述流控 制路径网络在所述时钟的接连周期中在所述第一配置、所述第二配置和所 述第一配置之间交替。
示例15.如示例13所述的装置,其中,所述数据路径网络和所述流控 制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数 据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到第四 处理元件。
示例16.如示例13所述的装置,其中,所述数据路径网络和所述流控 制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数 据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到所述 第二处理元件。
示例17.如示例13所述的装置,其中,所述流控制路径网络根据所述 数据流图运载背压信号以在来自下游处理元件的背压信号指出所述下游处 理元件中的存储不可用于所述多个处理元件中的一处理元件的输出时暂缓 该处理元件的执行。
示例18.如示例13所述的装置,其中,所述多个处理元件中的一处理 元件包括第一操作配置和第二操作配置,并且所述处理元件在所述处理元 件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作配 置执行所述第一操作,并且在所述处理元件的第二操作配置在所述时钟的 第二时间段中活跃时根据所述第二操作配置执行所述第二操作。
示例19.一种方法,包括:
接收包括多个节点的数据流图的输入;
将所述数据流图覆盖到处理器的多个处理元件、所述多个处理元件之 间的数据路径网络和所述多个处理元件之间的流控制路径网络中,其中每 个节点被表示为所述多个处理元件中的数据流操作器;
当所述数据路径网络和所述流控制路径网络的第一配置在时钟的第一 时间段中活跃时,通过相应传入操作对象集合到达所述多个处理元件的数 据流操作器处而执行所述数据流图的第一操作;并且
当所述数据路径网络和所述流控制路径网络的第二配置在所述时钟的 第二时间段中活跃时,通过相应传入操作对象集合到达所述多个处理元件 的数据流操作器处而执行所述数据流图的第二操作。
示例20.如示例19所述的方法,其中,所述数据路径网络和所述流控 制路径网络在所述时钟的接连周期中在所述第一配置、所述第二配置和所 述第一配置之间交替。
示例21.如示例19所述的方法,其中,所述数据路径网络和所述流控 制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数 据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到第四 处理元件。
示例22.如示例19所述的方法,其中,所述数据路径网络和所述流控 制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数 据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到所述 第二处理元件。
示例23.如示例19所述的方法,其中,所述流控制路径网络根据所述 数据流图运载背压信号以在来自下游处理元件的背压信号指出所述下游处 理元件中的存储不可用于所述多个处理元件中的一处理元件的输出时暂缓 该处理元件的执行。
示例24.如示例19所述的方法,其中,所述多个处理元件中的一处理 元件包括第一操作配置和第二操作配置,并且所述方法包括:所述处理元 件在所述处理元件的第一操作配置在所述时钟的第一时间段中活跃时根据 所述第一操作配置执行所述第一操作,并且在所述处理元件的第二操作配 置在所述时钟的第二时间段中活跃时根据所述第二操作配置执行所述第二 操作。
在另外一个实施例中,一种装置包括存储代码的数据存储设备,所述 代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。 一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
在某些实施例中,面积和能量减少的重大来源是对每种类型的处理元 件所支持的数据流操作的定制。在一个实施例中,适当子集(例如,大多 数)处理元件只支持几个操作(例如,一个、两个、三个或者四个操作类 型),例如一种实现选择,其中浮点PE只支持浮点乘法或浮点加法之一, 但不同时支持两者。
图24描绘了支持(例如,仅)两个操作的处理元件(PE)2400,但 是以下论述同样适用于支持单个操作或者多于两个操作的PE。在一个实施 例中,处理元件2400支持两个操作,并且被设置的配置值选择单个操作来 执行,例如对于该配置执行单个操作类型的一个或多个实例。
图24图示了根据本公开的实施例的处理元件2400的数据路径和控制 路径。处理元件可包括本文论述的组件中的一个或多个,例如,如参考图 10所论述的。处理元件2400包括操作配置存储2419(例如,寄存器)来 存储操作配置值,该操作配置值在其要求得到满足时使得PE执行选中的 操作,例如当传入操作对象变得可用时(例如,从输入存储2424和/或输 入存储2426)以及当有空间可用于存储一个或多个输出(结果)操作对象 时(例如,在输出存储2434和/或输出存储2436中)。在某些实施例中, 操作配置值(例如,对应于数据流图到该(一个或多个)PE的映射)被加 载(例如,存储)在操作配置存储2419中,如本文所述,例如在以下第3 节中所述。
操作配置值可以是(例如,唯一)值,例如根据以下第3.5节中论述 的格式,例如用于以下第3.6节中论述的操作。在某些实施例中,操作配 置值包括多个比特,这些比特使得处理元件2400执行期望的(例如,预选 择的)操作,例如当传入操作对象变得可用时(例如,在输入存储2424和 /或输入存储2426中)并且当有空间可用于存储输出一个或多个(结果)操作对象时(例如,在输出存储2434和/或输出存储2436中)时执行期望 的(例如,预选择的)操作。描绘的处理元件2400例如包括两组操作电路 2425和2427,以各自执行不同的操作。在某些实施例中,PE包括状态 (例如,状况)存储,例如在操作电路或状态寄存器内。状态存储可在执 行的过程中在操作期间被修改。可在若干个操作之间共享状态存储于。参见例如图10中的状态寄存器1038、存储在图3.6AGA-3.6AGF中的调度器 中的状态或者存储在图3.6AIA-3.6AIG中的调度器中的状态。
描绘的处理元件2400包括操作配置存储2419(例如,(一个或多个) 寄存器)来存储操作配置值。在一个实施例中,(例如,单个)操作配置 值的全部或适当子集被从操作配置存储2419(例如,(一个或多个)寄存 器)发送到处理元件2400的复用器(例如,复用器2421和复用器2423) 和/或解复用器(例如,解复用器2441和解复用器2443)以根据配置引导 数据。
处理元件2400包括耦合到(例如,电路交换)网络2402的第一输入 存储2424(例如,输入队列或缓冲器)和耦合到(例如,电路交换)网络 2404的第二输入存储2426(例如,输入队列或缓冲器)。网络2402和网 络2404可以是相同网络(例如,相同网络的不同电路交换路径)。虽然描 绘了两个输入存储,但是可利用单个输入存储或者多于两个输入存储(例如,任何整数或者整数的适当子集)(例如,具有其自己的相应输入控制 器)。可经由输入存储2424和/或输入存储2426耦合到的同一网络来发送 操作配置值。
描绘的处理元件2400包括输入控制器2401、输入控制器2403、输出 控制器2405和输出控制器2407(例如,一起为处理元件2400形成调度 器)。参考图25-图34来论述输入控制器的实施例。参考图35-图44来论 述输出控制器的实施例。在某些实施例中,操作电路(例如,图24中的操 作电路2425或操作电路2427)包括到调度器的耦合来执行某些动作,以例如基于从调度器提供的控制来激活操作电路中的某个逻辑电路。
在图24中,操作配置值(例如,根据要执行的操作设置)或者少于所 有操作配置值的子集使得处理元件2400执行编程的操作,例如当传入操作 对象变得可用时(例如,从输入存储2424和/或输入存储2426)并且当有 空间可用于存储一个或多个输出(结果)操作对象时(例如,在输出存储 2434和/或输出存储2436中)。在描绘的实施例中,输入控制器2401和/或 输入控制器2403将引起对(一个或多个)输入操作对象的提供并且输出控 制器2405和/或输出控制器2407将引起对对(一个或多个)输入操作对象 的操作的结果的存储。在一个实施例中,多个输入控制器被组合成单个输 入控制器。在一个实施例中,多个输出控制器被组合成单个输出控制器。
在某些实施例中,输入数据(例如,一个或多个数据流令牌)被网络 2402或网络2402发送到输入存储2424和/或输入存储2426。在一个实施例 中,输入数据被暂缓,直到在将被用于该输入数据的存储中有可用存储为 止(例如,在目标存储输入存储2424或输入存储2426中)。在描绘的实 施例中,操作配置值(或者其一部分)被发送到处理元件2400的复用器 (例如,复用器2421和复用器2423)和/或解复用器(例如,解复用器 2441和解复用器2443),作为(一个或多个)控制值来根据该配置引导数 据。在某些实施例中,输入操作对象选择交换机2421和2423(例如,复 用器)允许来自输入存储2424和输入存储2426的数据(例如,数据流令 牌)作为到操作电路2425或操作电路2427的任一者的输入。在某些实施 例中,结果(例如,输出操作对象)选择交换机2437和2439(例如,复 用器)允许来自操作电路2425或操作电路2427的任一者的数据去到输出 存储2434和/或输出存储2436中。存储可以是队列(例如,先进先出 (first-in-first-out,FIFO)队列)。在某些实施例中,操作取得一个输入 操作对象(例如,从输入存储2424和输入存储2426的任一者)并且产生 两个结果(例如,存储在输出存储2434和输出存储2436中)。在某些实 施例中,操作取得两个或更多个传入操作对象(例如,从每个输入存储队 列取得一个,例如从输入存储2424和输入存储2426的每一者取得一个) 并且产生单个(或者多个)结果(例如,存储在输出存储中,例如输出存 储2434和/或输出存储2436)。
在某些实施例中,处理元件2400被暂缓执行,直到在输入存储中有输 入数据(例如,一个或多个数据流令牌)并且在输出存储中对于结果数据 有存储空间可用(例如,由发送的指出输出存储未满的背压值指出)为止。 在描绘的实施例中,来自路径2409的输入存储(队列)状态值(例如,通 过断言“非空”指示值或者“空”指示值)指出输入存储2424何时包含 (例如,新的)输入数据(例如,一个或多个数据流令牌)并且来自路径 2411的输入存储(队列)状态值(例如,通过断言“非空”指示值或者 “空”指示值)指出输入存储2426何时包含(例如,新的)输入数据(例 如,一个或多个数据流令牌)。在一个实施例中,来自路径2409的关于输 入存储2424的输入存储(队列)状态值和来自路径2411的关于输入存储2426的输入存储(队列)状态值被复用器2421和复用器2423引导到操作 电路2425和/或操作电路2427(例如,与要***作的来自(一个或多个) 输入存储的输入数据一起)。
在描绘的实施例中,来自路径2413的输出存储(队列)状态值(例如, 通过断言“未满”指示值或者“满”指示值)指出输出存储2434何时有可 用存储用于(例如,新的)输出数据(例如,由一个或多个背压令牌指出) 并且来自路径2415的输出存储(队列)状态值(例如,通过断言“未满” 指示值或者“满”指示值)指出输出存储2436何时有可用存储用于(例如, 新的输出数据)(例如,由一个或多个背压令牌指出)。在描绘的实施例 中,操作配置值(或者其一部分)被发送到复用器2441和复用器2443两 者以从输出控制器2405和/或2407源发(一个或多个)输出存储(队列) 状态值。在某些实施例中,操作配置值包括一个或多个比特来使得第一输 出存储状态值被断言,其中第一输出存储状态值指出输出存储(队列)未 满,或者使得不同的第二输出存储状态值被断言,其中第二输出存储状态 值指出输出存储(队列)已满。第一输出存储状态值(例如,“未满”) 或者第二输出存储状态值(例如,“满”)可被从输出控制器2405和/或 输出控制器2407输出,例如如下所述。在一个实施例中,第一输出存储状 态值(例如,“未满”)被发送到操作电路2425和/或操作电路2427以分别使得操作电路2425和/或操作电路2427在输入值在输入存储(队列)中 可用时执行编程的操作,并且第二输出存储状态值(例如,“满”)被发 送到操作电路2425和/或操作电路2427以分别使得操作电路2425和/或操 作电路2427即使在输入值在输入存储(队列)中可用时也不执行编程的操 作。
在描绘的实施例中,包括出队(例如,有条件出队)复用器2429和 2431来例如基于操作电路2425和/或操作电路2427的操作完成而使得从相 应的输入存储(队列)中将值(例如,令牌)出队(例如,去除)。操作 配置值包括一个或多个比特来使得出队(例如,有条件出队)复用器2429 和2431将值(例如,令牌)从相应的输入存储(队列)出队(例如,去 除)。在描绘的实施例中,包括入队(例如,有条件入队)复用器2433和 2435来例如基于操作电路2425和/或操作电路2427的操作完成而使得将值 (例如,令牌)入队(例如,***)到相应的输出存储(队列)中。操作 配置值包括一个或多个比特来使得入队(例如,有条件入队)复用器2433 和2435将值(例如,令牌)入队(例如,***)到相应的输出存储(队列) 中。
这里的某些实施例允许了对发送到这些队列的控制值的操纵,例如基 于在PE中计算和/或存储的本地值。
在一个实施例中,出队复用器2429和2431是有条件出队复用器2429 和2431,它们在编程的操作被执行时,有条件地执行从输入存储(队列) 消耗(例如,出队)输入值。在一个实施例中,入队复用器2433和2435 是有条件入队复用器2433和2435,它们在编程的操作被执行时,有条件 地执行将编程的操作的输出值存储(例如,入队)到输出存储(队列)中。
例如,如本文所述,某些操作可有条件地(例如,基于令牌值)为输 入存储(队列)作出出队(例如,消耗)决策和/或有条件地(例如,基于 令牌值)为输出存储(队列)作出入队(例如,输出)决策。有条件入队 操作的一个示例是PredMerge操作,其有条件地写入其输出,因此(一个 或多个)有条件入队复用器将被摆动,以例如存储或不存储predmerge结 果到适当的输出队列中。有条件出队操作的一个示例是PredProp操作,其 有条件地读取其输入,因此(一个或多个)有条件出队复用器将被摆动, 以例如存储或不存储predprop结果到适当的输入队列中。
在某些实施例中,控制输入值(例如,一个或多个比特)(例如,控 制令牌)被输入到相应的输入存储(例如,队列)中,例如输入到如本文 所述的控制输入缓冲器中(例如,图10中的控制输入缓冲器1022)。在 一个实施例中,控制输入值被用于基于控制输入值有条件地为输入存储 (队列)作出出队(例如,消耗)决策和/或基于控制输入值有条件地为输出存储(队列)作出入队(例如,输出)决策。在某些实施例中,控制输 出值(例如,一个或多个比特)(例如,控制令牌)被输出到相应的输出 存储(例如,队列)中,例如输出到如本文所述的控制输出缓冲器中(例 如,图10中的控制输出缓冲器1032)。
输入控制器
图25图示了根据本公开的实施例的图24中的处理元件2400的输入控 制器2401和/或输入控制器2403的输入控制器电路2500。在一个实施例 中,每个输入队列(例如,缓冲器)包括输入控制器电路2500的其自己的 实例,例如输入控制器电路2500的2、3、4、5、6、7、8或更多个(例如, 任何整数个)实例。描绘的输入控制器电路2500包括队列状态寄存器2502 来存储表示该队列的当前状态的值(例如,队列状态寄存器2502存储表示 存储在队列中的数据的头部(开头)的头部值(例如,指针)、表示存储 在队列中的数据的尾部(末尾)的尾部值(例如,指针)和表示存储在队 列中的(例如,有效)值的数目的计数值的任何组合)。例如,计数值可 以是整数(例如,二),其中队列存储着由该整数指示的数目的值(例如, 在队列中存储两个值)。队列中的数据的容量(例如,数据的存储槽位, 例如用于数据元素)可以是预先选择的(例如,在编程期间),例如取决 于队列的总比特容量和每个元素中的比特的数目。队列状态寄存器2502可 被用初始值更新,例如在配置时间期间。
描绘的输入控制器电路2500包括状态确定器2504、未满确定器2506 和非空确定器2508。确定器可以用软件或硬件实现。硬件确定器可以是电 路实现,例如被编程为基于到下文论述的(一个或多个)状态机中的输入 来产生输出的逻辑电路。描绘的(例如,新)状态确定器2504包括耦合到 队列状态寄存器2502的端口来从输入队列状态寄存器2502读取和/或向其 写入。
描绘的状态确定器2504包括第一输入来从发送组件(例如,上游PE) 接收有效值(例如,指示有效的值),该值指出是否(例如,何时)有数 据(有效数据)将被发送到包括输入控制器电路2500的PE。有效值可被 称为数据流令牌。描绘的状态确定器2504包括第二输入来从队列状态寄存 器2502接收表示输入控制器电路2500正在控制的输入队列的当前状态的 一个或多个值。可选地,状态确定器2504包括第三输入来(从包括输入控 制器电路2500的PE内)接收指出是否(何时)有例如来自图24中的操作 电路2425和/或操作电路2427的有条件出队的值。
如下文进一步论述的,描绘的状态确定器2504包括第一输出来在路径 2510上发送值,该值将使得(被发送到输入控制器电路2500在控制的输 入队列的)的输入数据被入队到输入队列中或者不被入队到输入队列中。 描绘的状态确定器2504包括第二输出来发送将被存储在队列状态寄存器 2502中的更新后值,例如其中更新后值表示输入控制器电路2500正在控 制的输入队列的更新后状态(例如,头部值、尾部值、计数值或其任何组合)。
输入控制器电路2500包括未满确定器2506,其确定未满(例如,准 备就绪)值并且将未满值输出到发送组件(例如,上游PE)以指出是否 (例如,何时)在被输入控制器电路2500控制的输入队列中有存储空间可 用于输入数据。未满(例如,准备就绪)值可被称为背压令牌,例如从接 收PE发送到发送PE的背压令牌。
输入控制器电路2500包括非空确定器2508,其确定输入存储(队列) 状态值并且(例如,在图24中的路径2409或路径2411上)输出输入存储 (队列)状态值,该值(例如,通过断言“非空”指示值或“空”指示值) 指出被控制的输入队列何时包含(例如,新的)输入数据(例如,一个或 多个数据流令牌)。在某些实施例中,输入存储(队列)状态值(例如, 是指出输入队列非空的值)是两个控制值中的一者(另一者是指出用于结 果的存储未满的值),该值将暂停PE(例如,图24中的操作电路2425和 /或操作电路2427),直到两个控制值都指出PE可着手执行其编程的操作 为止(例如,向PE提供输入的(一个或多个)输入队列的非空值和要为 PE操作存储(一个或多个)结果的(一个或多个)输出队列的未满值)。 在下面参考图35论述为输出队列确定未满值的示例。在某些实施例中,输 入控制器电路包括本文论述的任何一个或多个输入和任何一个或多个输出。
例如,假设要执行的操作是从图24中的两个输入存储2424和输入存 储2426源发数据。可包括输入控制器电路2500的两个实例来使得相应的 输入值被入队到图24中的输入存储2424和输入存储2426中。在这个示例 中,每个输入控制器电路实例可在包含输入存储2424和输入存储2426的 PE内发送非空值(例如,到操作电路)以使得PE在输入值上操作(例如, 当用于结果的存储也未满时)。
图26图示了根据本公开的实施例的图25中的输入控制器2401和/或输 入控制器2403的入队电路2600。描绘的入队电路2600包括队列状态寄存 器2602来存储表示输入队列2604的当前状态的值。输入队列2604可以是 任何输入队列,例如图24中的输入存储2424或输入存储2426。入队电路 2600包括耦合到队列寄存器使能端口2608的复用器2606。入队输入2610 将接收指出是否将输入值入队(例如,存储)到输入队列2604中的值。在 一个实施例中,入队输入2610耦合到使得(例如,发送到输入控制器电路 2500在控制的输入队列2604的)输入数据被入队到其中的输入控制器的 路径2510。在描绘的实施例中,来自队列状态寄存器2602的尾部值被用 作控制值来控制输入数据是被存储在输入队列2604的第一槽位2604A还是 第二槽位2604B中。在一个实施例中,输入队列2604包括三个或更多个槽位,例如,队列寄存器使能端口的数目与槽位的数目相同。入队电路2600 包括耦合到输入队列2604的复用器2612,其使得来自输入队列2604的特 定位置(例如,槽位)的数据被输出到处理元件中。在描绘的实施例中, 来自队列状态寄存器2602的头部值被用作控制值来控制输出数据是从输入 队列2604的第一槽位2604A还是第二槽位2604B源发的。在一个实施例 中,输入队列2604包括三个或更多个槽位,例如,复用器2612的输入端 口的数目与槽位的数目相同。“数据输入”值可以是用于输入存储的输入 数据(例如,有效载荷),例如与有效值不同,有效值可(例如,只)指 出(例如,通过单个比特指出)输入数据正被发送或者准备好被发送,但 不包括输入数据本身。“数据输出”值可被发送到图24中的复用器2421 和/或复用器2423。
队列状态寄存器2602可存储表示存储在队列中的数据的头部(开头) 的头部值(例如,指针)、表示存储在队列中的数据的尾部(末尾)的尾 部值(例如,指针)和表示存储在队列中的(例如,有效)值的数目的计 数值的任何组合。例如,计数值可以是整数(例如,二),其中队列存储 着由该整数指示的数目的值(例如,在队列中存储两个值)。队列中的数据的容量(例如,数据的存储槽位,例如对于数据元素)可以是预先选择 的(例如,在编程期间),例如取决于队列的总比特容量和每个元素中的 比特的数目。队列状态寄存器2602可被更新以初始值,例如在配置时间期 间。队列状态寄存器2602可如参考图25所述来被更新。
图27图示了根据本公开的实施例的图24中的输入控制器2401和/或输 入控制器2403的状态确定器2700。状态确定器2700可用作图25中的状态 确定器2504。描绘的状态确定器2700包括头部确定器2702、尾部确定器 2704、计数确定器2706和入队确定器2708。状态确定器可包括头部确定 器2702、尾部确定器2704、计数确定器2706或者入队确定器2708中的一 个或多个(例如,任何组合)。在某些实施例中,头部确定器2702提供表 示存储在输入队列中的输入数据的当前头部(例如,开始)位置的头部值, 尾部确定器2704提供表示存储在该输入队列中的输入数据的当前尾部(例 如,结束)位置的尾部值(例如,指针),计数确定器2706提供表示存储 在输入队列中的(例如,有效)值的数目的计数值,并且入队确定器提供 指出是否要将输入数据(例如,输入值)入队(例如,存储)到输入队列 中的入队值。
图28图示了根据本公开的实施例的头部确定器状态机2800。在某些 实施例中,图27中的头部确定器2702根据状态机2800操作。在一个实施 例中,图27中的头部确定器2702包括被编程为根据状态机2800执行的逻 辑电路。状态机2800包括用于输入队列的以下值的输入队列的输入:当前 头部值(例如,来自图25中的队列状态寄存器2502或者图26中的队列状 态寄存器2602)、容量(例如,固定数目)、有条件出队值(例如,从图 24中的有条件出队复用器2429和2431输出)以及非空值(例如,来自图 25中的非空确定器2508)。状态机2800基于这些输入来输出更新后的头 部值。&&符号指示逻辑与操作。<=符号指示新值的指派,例如head<=0 将零值指派为更新后的头部值。在图26中,(更新后的)头部值被用作到 复用器2612的控制输入以从输入队列2604选择头部值。
图29图示了根据本公开的实施例的尾部确定器状态机2900。在某些 实施例中,图27中的尾部确定器2704根据状态机2900操作。在一个实施 例中,图27中的尾部确定器2704包括被编程为根据状态机2900执行的逻 辑电路。状态机2900包括用于输入队列的以下值的输入队列的输入:当前 尾部值(例如,来自图25中的队列状态寄存器2502或者图26中的队列状 态寄存器2602)、容量(例如,固定数目)、准备就绪值(例如,从图25 中的未满确定器2506输出)以及有效值(例如,如参考图25或图34所述 来自发送组件(例如,上游PE))。状态机2900基于这些输入来输出更 新后的尾部值。&&符号指示逻辑与操作。<=符号指示新值的指派,例如 tail<=tail+1将先前尾部值加一的值指派为更新后的尾部值。在图26中,(更新后的)尾部值被用作到复用器2606的控制输入以选择输入队列2604 的尾部槽位来存储新的输入数据到其中。
图30图示了根据本公开的实施例的计数确定器状态机3000。在某些 实施例中,图27中的计数确定器2706根据状态机3000操作。在一个实施 例中,图27中的计数确定器2706包括被编程为根据状态机3000执行的逻 辑电路。状态机3000包括用于输入队列的以下值的输入队列的输入:当前 计数值(例如,来自图25中的队列状态寄存器2502或者图26中的队列状 态寄存器2602)、准备就绪值(例如,从图25中的未满确定器2506输 出)、有效值(例如,如参考图25或图34所述来自发送组件(例如,上 游PE))、有条件出队值(例如,从图24中的有条件出队复用器2429和 2431输出)以及非空值(例如,来自图25中的非空确定器2508)。状态 机3000基于这些输入来输出更新后的计数值。&&符号指示逻辑与操作。 +符号指示加法操作。-符号指示减法操作。<=符号指示新值的指派,例如 指派到图25中的队列状态寄存器2502或者图26中的队列状态寄存器2602 的计数字段。注意星号指示将布尔值真转换成整数1并且将布尔值假转换 成整数0。
图31图示了根据本公开的实施例的入队确定器状态机3100。在某些 实施例中,图27中的入队确定器2708根据状态机3100操作。在一个实施 例中,图27中的入队确定器2708包括被编程为根据状态机3100执行的逻 辑电路。状态机3100包括用于输入队列的以下值的输入队列的输入:准备 就绪值(例如,从图25中的未满确定器2506输出),以及有效值(例如, 如参考图25或图34所述来自发送组件(例如,上游PE))。状态机3100 基于这些输入来输出更新后的入队值。&&符号指示逻辑与操作。=符号指 示新值的指派。在图26中,(更新后的)入队值被用作到复用器2606的 路径2610上的输入以使得输入队列2604的尾部槽位在其中存储新的输入 数据。
图32图示了根据本公开的实施例的未满确定器状态机3200。在某些 实施例中,图25中的未满确定器2506根据状态机3200操作。在一个实施 例中,图25中的未满确定器2506包括被编程为根据状态机3200执行的逻 辑电路。状态机3200包括用于输入队列的计数值(例如,来自图25中的 队列状态寄存器2502或者图26中的队列状态寄存器2602)和容量(例如, 指示出输入队列的总容量的固定数目)的输入队列的输入。<符号指示小 于操作,使得只要输入队列的当前计数小于输入队列的容量,指出输入队 列未满的准备就绪值(例如,布尔一)就被断言。在图25中,(例如,更 新后)准备就绪(例如,未满)值被发送到发送组件(例如,上游PE)以 指出是否(例如,何时)在输入队列中有存储空间可用于额外的输入数据。
图33图示了根据本公开的实施例的非空确定器状态机3300。在某些 实施例中,图25中的非空确定器2508根据状态机3300操作。在一个实施 例中,图25中的非空确定器2508包括被编程为根据状态机3300执行的逻 辑电路。状态机3300包括用于输入队列的计数值(例如,来自图25中的 队列状态寄存器2502或者图26中的队列状态寄存器2602)的输入队列的 输入。<符号指示小于操作,使得只要输入队列的当前计数大于零(或者 指示空输入队列的无论什么数字),指出输入队列非空的非空值(例如, 布尔一)就被断言。在图25中,(例如,更新后的)非空值将使得PE (例如,包括输入队列的PE)在(一个或多个)输入值上操作,例如当用 于该操作的结果的存储也未满时。
图34图示了根据本公开的实施例的有效确定器状态机3400。在某些 实施例中,图35中的非空确定器3508根据状态机3400操作。在一个实施 例中,图35中的非空确定器3508包括被编程为根据状态机3400执行的逻 辑电路。状态机3500包括用于输出队列的计数值(例如,来自图35中的 队列状态寄存器3502或者图36中的队列状态寄存器3602)的输出队列的 输入。<符号指示小于操作,使得只要输出队列的当前计数大于零(或者 指示空输出队列的无论什么数字),指出输出队列非空的非空值(例如, 布尔一)就被断言。在图25中,(例如,更新后的)有效值被从发送(例 如,上游)PE发送到接收PE(例如,包括正被图25中的输入控制器2500 控制的输入队列的接收PE),并且例如该有效值被用作状态机2900、 3000和/或3100中的有效值。
输出控制器
图35图示了根据本公开的实施例的图24中的处理元件2400的输出控 制器2405和/或输出控制器2407的输出控制器电路3500。在一个实施例 中,每个输出队列(例如,缓冲器)包括输出控制器电路3500的其自己的 实例,例如输出控制器电路3500的2、3、4、5、6、7、8或更多个(例如, 任何整数个)实例。描绘的输出控制器电路3500包括队列状态寄存器3502 来存储表示该队列的当前状态的值(例如,队列状态寄存器3502存储表示 存储在队列中的数据的头部(开头)的头部值(例如,指针)、表示存储 在队列中的数据的尾部(末尾)的尾部值(例如,指针)、和表示存储在 队列中的(例如,有效)值的数目的计数值的任何组合)。例如,计数值 可以是整数(例如,二),其中队列存储着由该整数指示的数目的值(例如,在队列中存储两个值)。队列中的数据的容量(例如,数据的存储槽 位,例如用于数据元素)可以是预先选择的(例如,在编程期间),例如 取决于队列的总比特容量和每个元素中的比特的数目。队列状态寄存器 3502可被用初始值更新,例如在配置时间期间。计数值可在初始化期间被 设置在零。
描绘的输出控制器电路3500包括状态确定器3504、未满确定器3506 和非空确定器3508。确定器可以用软件或硬件实现。硬件确定器可以是电 路实现,例如被编程为基于到下文论述的(一个或多个)状态机中的输入 来产生输出的逻辑电路。描绘的(例如,新)状态确定器3504包括耦合到 队列状态寄存器3502的端口来从输出队列状态寄存器3502读取和/或向其 写入。
描绘的状态确定器3504包括第一输入来从接收组件(例如,下游PE) 接收准备就绪值,该值指出是否(例如,何时)有空间(例如,在其输入 队列中)用于要发送到PE的新数据。在某些实施例中,来自接收组件的 准备就绪值是由包括图25中的输入控制器电路2500的输入控制器发送的。 准备就绪值可被称为背压令牌,例如从接收PE发送到发送PE的背压令牌。 描绘的状态确定器3504包括第二输入来从队列状态寄存器3502接收表示 输出控制器电路3500正在控制的输出队列的当前状态的一个或多个值。可 选地,状态确定器3504包括第三输入来(从包括输出控制器电路2500的 PE内)接收指出是否(何时)有例如来自图24中的操作电路2425和/或操 作电路2427的有条件入队的值。
如下文进一步论述的,描绘的状态确定器3504包括第一输出来在路径 3510上发送值,该值将使得(被发送到输出控制器电路3500在控制的输 出队列的)的输出数据被入队到输出队列中或者不被入队到输出队列中。 描绘的状态确定器3504包括第二输出来发送将被存储在队列状态寄存器 3502中的更新后值,例如其中更新后值表示输出控制器电路3500在控制 的输出队列的更新后状态(例如,头部值、尾部值、计数值或其任何组 合)。
输出控制器电路3500包括未满确定器3506,其确定未满(例如,准 备就绪)值并且输出未满值,例如在包括输出控制器电路3500的PE内, 以指出是否(例如,何时)在被输出控制器电路3500控制的输出队列中有 存储空间可用于输出数据。在一个实施例中,对于PE的输出队列,指出 在该输出队列中没有存储空间可用的未满值将引起PE的执行的暂缓(例如,暂缓将会使得结果被存储到存储空间中的执行),直到存储空间可用 为止(并且例如当在(一个或多个)输入队列中有可用数据正被从该PE中 源发时)。
输出控制器电路3500包括非空确定器3508,其确定输出存储(队列) 状态值并且(例如,在图24中的路径2445或路径2447上)输出输出存储 (队列)状态值,该值(例如,通过断言“非空”指示值或“空”指示值) 指出被控制的输出队列何时包含(例如,新的)输出数据(例如,一个或 多个数据流令牌),例如使得输出数据可被发送到接收PE。在某些实施例中,输出存储(队列)状态值(例如,是指出发送PE的输出队列非空的 值)是两个控制值中的一者(另一者是指出耦合到输出存储的接收PE的 输入存储未满的值),该值将暂缓从发送PE发送该数据到接收PE,直到 两个控制值都指出组件(例如,PE)可着手发送该(例如,有效载荷)数 据为止(例如,带有将要从发送PE接收数据的(一个或多个)输入队列 的准备就绪值和将要存储数据的接收PE中的(一个或多个)输出队列的 有效值)。在上文参考图25论述了为输入队列确定准备就绪值的示例。在 某些实施例中,输出控制器电路包括本文论述的任何一个或多个输入和任 何一个或多个输出。
例如,假设要执行的操作是将数据发送(沉降(sink))到图24中的 输出存储2434和输出存储2436两者中。可包括输出控制器电路3500的两 个实例来使得(一个或多个)相应输出值被入队到图24中的输出存储2434 和输出存储2436中。在这个示例中,每个输出控制器电路实例可在包含输 出存储2434和输出存储2436的PE内发送未满值(例如,到操作电路)以 使得PE在其输入值上操作(例如,当源发(一个或多个)操作输入的输 入存储也非空时)。
图36图示了根据本公开的实施例的图25中的输出控制器2405和/或输 出控制器2407的入队电路3600。描绘的入队电路3600包括队列状态寄存 器3602来存储表示输出队列3604的当前状态的值。输出队列3604可以是 任何输出队列,例如图24中的输出存储2434或输出存储2436。入队电路 3600包括耦合到队列寄存器使能端口3608的复用器3606。入队输入3610 将接收指出是否将输出值入队(例如,存储)到输出队列3604中的值。在 一个实施例中,入队输入3610耦合到使得(例如,被发送到输出控制器电 路3600在控制的输出队列3604的)输出数据被入队到其中的输出控制器 的路径3510。在描绘的实施例中,来自队列状态寄存器3602的尾部值被 用作控制值来控制输出数据是被存储在输出队列3604的第一槽位3604A还 是第二槽位3604B中。在一个实施例中,输出队列3604包括三个或更多个槽位,例如,队列寄存器使能端口的数目与槽位的数目相同。入队电路 3600包括耦合到输出队列3604的复用器3612,其使得来自输出队列3604 的特定位置(例如,槽位)的数据被输出到网络(例如,到下游处理元 件)。在描绘的实施例中,来自队列状态寄存器3602的头部值被用作控制 值来控制输出数据是从输出队列3604的第一槽位3604A还是第二槽位3604B源发的。在一个实施例中,输出队列3604包括三个或更多个槽位, 例如,复用器3612的输出端口的数目与槽位的数目相同。“数据输入”值 可以是用于输出存储的输出数据(例如,有效载荷),例如与有效值不同, 有效值可(例如,只)指出(例如,通过单个比特指出)输出数据正被发 送或者准备好被发送,但不包括输出数据本身。“数据输出”值可被发送 到图24中的复用器2421和/或复用器2423。
队列状态寄存器3602可存储表示存储在队列中的数据的头部(开头) 的头部值(例如,指针)、表示存储在队列中的数据的尾部(末尾)的尾 部值(例如,指针)和表示存储在队列中的(例如,有效)值的数目的计 数值的任何组合。例如,计数值可以是整数(例如,二),其中队列存储 着由该整数指示的数目的值(例如,在队列中存储两个值)。队列中的数据的容量(例如,数据的存储槽位,例如对于数据元素)可以是预先选择 的(例如,在编程期间),例如取决于队列的总比特容量和每个元素中的 比特的数目。队列状态寄存器3602可被更新以初始值,例如在配置时间期 间。队列状态寄存器3602可如参考图35所述来被更新。
图37图示了根据本公开的实施例的图24中的输出控制器2405和/或输 出控制器2407的状态确定器3700。状态确定器3700可用作图35中的状态 确定器3504。描绘的状态确定器3700包括头部确定器3702、尾部确定器 3704、计数确定器3706和入队确定器3708。状态确定器可包括头部确定 器3702、尾部确定器3704、计数确定器3706或者入队确定器3708中的一 个或多个(例如,任何组合)。在某些实施例中,头部确定器3702提供表 示存储在输出队列中的输出数据的当前头部(例如,开始)位置的头部值, 尾部确定器3704提供表示存储在该输出队列中的输出数据的当前尾部(例 如,结束)位置的尾部值(例如,指针),计数确定器3706提供表示存储 在输出队列中的(例如,有效)值的数目的计数值,并且入队确定器提供 指出是否要将输出数据(例如,输出值)入队(例如,存储)到输出队列 中的入队值。
图38图示了根据本公开的实施例的头部确定器状态机3800。在某些 实施例中,图37中的头部确定器3702根据状态机3800操作。在一个实施 例中,图37中的头部确定器3702包括被编程为根据状态机3800执行的逻 辑电路。状态机3800包括用于以下值的输出队列的输入:当前头部值(例 如,来自图35中的队列状态寄存器3502或者图36中的队列状态寄存器 3602)、容量(例如,固定数目)、准备就绪值(例如,从接收组件(例 如,下游PE)为其输入队列从图25中的未满确定器2506输出)以及有效 值(例如,如参考图35或图43所述来自PE的非空确定器)。状态机3800 基于这些输入来输出更新后的头部值。&&符号指示逻辑与操作。<=符号 指示新值的指派,例如head<=0将零值指派为更新后的头部值。在图36 中,(更新后的)头部值被用作到复用器3612的控制输入以从输出队列 3604选择头部值。
图39图示了根据本公开的实施例的尾部确定器状态机3900。在某些 实施例中,图37中的尾部确定器3704根据状态机3900操作。在一个实施 例中,图37中的尾部确定器3704包括被编程为根据状态机3900执行的逻 辑电路。状态机3900包括用于以下值的输出队列的输入:当前尾部值(例 如,来自图35中的队列状态寄存器3502或者图36中的队列状态寄存器 3602)、容量(例如,固定数目)、未满值(例如,如参考图35或图42 所述来自PE的未满确定器)以及有条件入队值(例如,从图24中的有条 件入队复用器2433和2435输出)。状态机3900基于这些输入来输出更新 后的尾部值。&&符号指示逻辑与操作。<=符号指示新值的指派,例如tail <=tail+1将先前尾部值加一的值指派为更新后的尾部值。在图36中,(更 新后的)尾部值被用作到复用器3606的控制输入以选择输出队列3604的 尾部槽位来存储新的输出数据到其中。
图40图示了根据本公开的实施例的计数确定器状态机4000。在某些 实施例中,图37中的计数确定器3706根据状态机4000操作。在一个实施 例中,图37中的计数确定器3706包括被编程为根据状态机4000执行的逻 辑电路。状态机4000包括用于以下值的输出队列的输入:当前计数值(例 如,来自图35中的队列状态寄存器3502或者图36中的队列状态寄存器 3602)、准备就绪值(例如,从接收组件(例如,下游PE)为其输入队列 从图25中的未满确定器2506输出)、有效值(例如,如参考图35或图43 所述来自PE的非空确定器)、有条件入队值(例如,从图24中的有条件 入队复用器2433和2435输出)以及未满值(例如,如参考图35或图42 所述来自PE的未满确定器)。状态机4000基于这些输入来输出更新后的 计数值。&&符号指示逻辑与操作。+符号指示加法操作。-符号指示减法 操作。<=符号指示新值的指派,例如指派到图35中的队列状态寄存器 3502或者图36中的队列状态寄存器3602的计数字段。注意星号指示将布 尔值真转换成整数1并且将布尔值假转换成整数0。
图41图示了根据本公开的实施例的入队确定器状态机4100。在某些 实施例中,图37中的入队确定器3708根据状态机4100操作。在一个实施 例中,图37中的入队确定器3708包括被编程为根据状态机4100执行的逻 辑电路。状态机4100包括用于以下值的输出队列的输入:准备就绪值(例 如,从接收组件(例如,下游PE)为其输入队列从图25中的未满确定器 2506输出),以及有效值(例如,如参考图35或图43所述来自PE的非 空确定器)。状态机4100基于这些输入来输出更新后的入队值。&&符号 指示逻辑与操作。=符号指示新值的指派。在图36中,(更新后的)入队 值被用作到复用器3606的路径3610上的输入以使得输出队列3604的尾部 槽位在其中存储新的输出数据。
图42图示了根据本公开的实施例的未满确定器状态机4200。在某些 实施例中,图25中的未满确定器3506根据状态机4200操作。在一个实施 例中,图35中的未满确定器3506包括被编程为根据状态机4200执行的逻 辑电路。状态机4200包括用于输出队列的计数值(例如,来自图35中的 队列状态寄存器3502或者图36中的队列状态寄存器3602)和容量(例如, 指示出输出队列的总容量的固定数目)的输出队列的输入。<符号指示小 于操作,使得只要输出队列的当前计数小于输出队列的容量,指出输出队 列未满的准备就绪值(例如,布尔一)就被断言。在图35中,(例如,更 新后的)未满值在PE内被产生并使用来指出是否(例如,何时)在输出 队列中有存储空间可用于额外的输出数据。
图43图示了根据本公开的实施例的非空确定器状态机4300。在某些 实施例中,图25中的非空确定器2508根据状态机4300操作。在一个实施 例中,图25中的非空确定器2508包括被编程为根据状态机4300执行的逻 辑电路。状态机4300包括用于输入队列的计数值(例如,来自图25中的 队列状态寄存器2502或者图26中的队列状态寄存器2602)的输入队列的 输入。<符号指示小于操作,使得只要输入队列的当前计数大于零(或者 指示空输入队列的无论什么数字),指出输入队列非空的非空值(例如, 布尔一)就被断言。在图25中,(例如,更新后的)非空值将使得PE (例如,包括输入队列的PE)在(一个或多个)输入值上操作,例如当用 于该操作的结果的存储也未满时。
图44图示了根据本公开的实施例的有效确定器状态机4400。在某些 实施例中,图35中的非空确定器3508根据状态机4400操作。在一个实施 例中,图35中的非空确定器3508包括被编程为根据状态机4400执行的逻 辑电路。状态机3500包括用于输出队列的计数值(例如,来自图35中的 队列状态寄存器3502或者图36中的队列状态寄存器3602)的输出队列的 输入。<符号指示小于操作,使得只要输出队列的当前计数大于零(或者 指示空输出队列的无论什么数字),指出输出队列非空的非空值(例如, 布尔一)就被断言。在图35中,(例如,更新后的)有效值被从发送(例 如,上游)PE发送到接收PE(例如,由包括正被图25中的输出控制器 2500控制的输出队列的发送PE发送),并且例如该有效值被用作状态机3800、4000和/或4100中的有效值。
在某些实施例中,状态机包括多个单比特宽度输入值(例如,0或者 1),并且产生具有单比特宽度的单个输出值(例如,0或1)。
在某些实施例中,第一LIC通道可形成于第一PE的输出到第二PE的 输入之间,并且第二LIC通道可形成于第二PE的输出和第三PE的输入之 间。作为示例,准备就绪值可被接收PE在LIC通道的第一路径上发送到 发送PE,并且有效值可被发送PE在LIC通道的第二路径上发送到接收PE。 作为示例,参见图25和图35。此外,某些实施例中的LIC通道可包括用 于例如在准备就绪值和有效值被断言之后发送的(例如,有效载荷)数据 的传输的第三路径。
2.5执行(例如,数据流)操作的网络资源,例如电路
在某些实施例中,处理元件(PE)利用通过静态配置(例如,电路交 换)通信网络而形成的专用虚拟电路来通信。这些虚拟电路可以是流控制 的并且完全背压式的,例如使得如果源没有数据或者其目的地已满则PE将 会暂缓。在运行时,数据可流经实现映射的数据流图(例如,映射的算法) 的PE。例如,数据可从存储器流入,经过处理元件的空间阵列(例如,其 架构区域),然后返回到存储器。
这种体系结构相对于传统的多核处理器可实现显著的性能效率:例如 PE形式的计算与核心相比可以更简单并且更众多,并且通信可以是直接的, 例如与存储器***的扩展不同。然而,处理元件的空间阵列(例如,其架 构区域)可能是针对编译器生成的表达树的实现来调节的,其以很少的复 用或解复用为特征。这里的某些实施例(例如,经由网络资源,例如但不 限于网络数据流端点电路)扩展该体系结构以支持(例如,高基数)复用 和/或解复用,例如尤其是在函数调用的情境中。
空间阵列,例如图1中的处理元件101的空间阵列,可使用(例如, 封包交换)网络来通信。这里的某些实施例提供了电路来将高基数数据流 操作覆盖在这些网络上以便通信。例如,这里的某些实施例利用了现有的 网络来通信(例如,参考图1描述的互连网络104)以在处理元件和空间 阵列的其他组件之间提供数据路由能力,但也增强网络(例如,网络端点) 以支持一些(例如,少于全部)数据流操作的执行和/或控制(例如,不利 用处理元件来执行这些数据流操作)。在一个实施例中,利用空间阵列内 的硬件结构(例如,网络数据流端点电路)支持(例如,高基数)数据流 操作,例如而不消耗处理资源或劣化性能(例如,处理元件的性能)。
在一个实施例中,两个点之间(例如,数据的生产者和消耗者之间) 的电路交换网络包括这两个点之间的专用通信线路,例如其中两个点之间 的(例如物理)交换机被设置为创建两个点之间的(例如,专属)物理电 路。在一个实施例中,两个点之间的电路交换网络在两个点之间的连接的 使用开始时被设立并且在该连接的整个使用期间被维持。在另一实施例中, 封包交换网络包括两个(例如,或者更多个)点之间的共享通信线路(例 如,通道),例如其中来自不同连接的封包共享该通信线路(例如,根据 每个封包的数据进行路由,例如包括头部和有效载荷的封包的头部中的数 据)。下面例如参考夹层网络论述封包交换网络的示例。
图45图示了根据本公开的实施例的伪代码函数调用4501的数据流图 4500。函数调用4501将加载两个输入数据操作对象(例如,分别由指针*a 和*b指示),并且将它们乘在一起,并且返回结果数据。这个或其他函数 可被执行多次(例如,在数据流图中)。图45中的数据流图图示了 PickAny数据流操作器4502来执行选择控制数据(例如,索引)的操作 (例如,从调用点4502A选择)并且利用拷贝数据流操作器4504将该控制 数据(例如,索引)拷贝到第一Pick数据流操作器4506、第二Pick数据 流操作器4506和Switch数据流操作器4516的每一者。在一个实施例中, 索引(例如,来自PickAny)从而将数据输入和输出到相同的索引位置, 例如[0,1...M]的相同索引位置,其中M是整数。第一Pick数据流操作器 4506随后可根据控制数据拉取多个输入数据元素4506A中的一个输入数据 元素,并且使用该一个输入数据元素作为(*a)来随后利用加载数据流操作 器4510加载存储在*a处的输入数据值。第二Pick数据流操作器4508随后 可根据控制数据拉取多个输入数据元素4508A中的一个输入数据元素,并 且使用该一个输入数据元素作为(*b)来随后利用加载数据流操作器4512加 载存储在*b处的输入数据值。这两个输入数据值随后可被乘法数据流操作 器4514(例如,作为处理元件的一部分)相乘。乘法的结果数据随后可被 Switch数据流操作器4516路由(例如,路由到下游处理元件或其他组件), 例如路由到调用点4516A,例如根据到Switch数据流操作器4516的控制数 据(例如,索引)来路由。
图45是函数调用的示例,其中用于管理数据(例如,令牌)的引导的 数据流操作器的数目可能是巨大的,例如用来引导数据去到和/或来自调用 点。在一个示例中,PickAny数据流操作器4502、第一Pick数据流操作器 4506、第二Pick数据流操作器4506和Switch数据流操作器4516中的一个 或多个可被利用来路由(例如,引导)数据,例如当存在多个(例如,许 多)调用点时。在引入复用和/或解复用的函数调用的(例如,主要)目标 是减小特定数据流图的实现面积的实施例中,这里的某些实施例(例如, 微体系结构的实施例)减小这种复用和/或解复用的数据流图(例如,复用 和/或解复用的部分)的面积开销。
图46图示了根据本公开的实施例的具有多个网络数据流端点电路 (4602、4604、4606)的处理元件(PE)的空间阵列4601。处理元件的空 间阵列4601可包括组件之间的通信(例如,互连)网络,例如如本文所述。 在一个实施例中,通信网络是一个或多个封包交换通信网络(例如,其一 个或多个通道)。在一个实施例中,通信网络是一个或多个电路交换的静 态配置通信通道。例如,由交换机(例如,第一网络中的交换机4610和第 二网络中的交换机4611)耦合在一起的一组通道。第一网络和第二网络可 以是分开的或者被耦合在一起。例如,交换机4610可将其中的例如被配置 为根据数据流图执行操作的多个(例如,四个)数据路径中的一个或多个 耦合在一起。在一个实施例中,数据路径的数目可以是任意多数。处理元 件(例如,处理元件4608)可如本文例如在图10中公开的。加速器分片 4600包括存储器/缓存层次体系接口4612,以例如将加速器分片4600与存 储器和/或缓存接口连接。数据路径可延伸到另一分片或者端接于例如分片 的边缘处。处理元件可包括输入缓冲器(例如,缓冲器4609)和输出缓冲 器。
操作可基于其输入的可用性和PE的状态而被执行。PE可从输入通道 获得操作对象并且将结果写入到输出通道,虽然也可使用内部寄存器状态。 这里的某些实施例包括可配置的数据流友好的PE。图10示出了一个这种 PE的详细框图:整数PE。此PE由若干个I/O缓冲器、ALU、存储寄存器、 一些指令寄存器和调度器构成。在每个周期,调度器可基于输入和输出缓 冲器的可用性和PE的状态来选择指令来执行。操作的结果随后可被写入 到输出缓冲器或者写入到(例如,PE本地的)寄存器。写入到输出缓冲器 的数据可被传输到下游PE以便进一步处理。这种风格的PE可能是极为能 量高效的,例如PE而是从寄存器读取数据,而不是从复杂的多端口寄存 器文件读取数据。类似地,指令可被直接存储在寄存器中,而不是虚拟化 指令缓存中。
可在特殊的配置步骤期间设置指令寄存器。在此步骤期间,除了PE间 网络以外,辅助控制线和状态也可用于在构成架构的若干个PE间流入配 置。作为并行化的结果,这种网络的某些实施例可提供迅速的重配置,例 如可在少于大约10微秒中配置分片大小的架构。
另外,描绘的加速器分片4600包括封包交换通信网络4614,例如作 为夹层网络的一部分,例如如下所述的。这里的某些实施例允许了在通信 网络上(例如,在通信网络内)(例如,而不是在(一个或多个)处理元 件中)执行(例如,分布式)数据流操作(例如,只路由数据的操作)。 作为示例,在图46中描绘了数据流图的分布式Pick数据流操作。具体地, 利用三个分开的网络(例如,全局)端点(例如,网络数据流端点电路 (4602、4604、4606))上的三个分开的配置来实现分布式拾取。数据流 操作可以是分布式的,例如其中若干个端点被以协调方式来配置。例如, 编译工具可理解对于协调的需求。端点(例如,网络数据流端点电路)可 被共享于若干个分布式操作之间,例如可就与数据流操作(例如,拾取) 有关的若干个发送核对数据流操作(例如,拾取)端点。分布式数据流操 作(例如,拾取)可生成与非分布式数据流操作(例如,拾取)相同的结 果。在某些实施例中,分布式和非分布式数据流操作之间的差别在于分布 式数据流操作使得其数据(例如,要路由的数据,但可不包括控制数据) 通过封包交换通信网络,例如具有关联的流控制和分布式协调。虽然示出 了不同大小的处理元件(PE),但在一个实施例中,每个处理元件具有相 同大小(例如,硅面积)。在一个实施例中,也可包括缓冲数据的缓冲器 元件,例如与处理元件分开。
作为一个示例,拾取数据流操作可具有多个输入并且引导(例如,路 由)其中之一作为输出,例如如图45中所示。取代利用处理元件来执行拾 取数据流操作,其可利用网络通信资源(例如,网络数据流端点电路)中 的一个或多个来实现。额外地或者替换地,网络数据流端点电路可在处理 元件之间路由数据,例如以便处理元件在数据上执行处理操作。这里的实 施例从而可利用到通信网络来执行(例如,引导)数据流操作。额外地或 者替换地,网络数据流端点电路可表现得像下文所述的夹层网络一样。
在描绘的实施例中,封包交换通信网络4614可处理某些(例如,配置) 通信,以例如对处理元件和/或电路交换网络(例如,网络4613,其可包 括交换机)编程。在一个实施例中,电路交换网络被配置(例如,编程) 为执行一个或多个操作(例如,数据流图的数据流操作)。
封包交换通信网络4614包括多个端点(例如,网络数据流端点电路 (4602、4604、4606))。在一个实施例中,每个端点包括地址或其他指 示值来允许数据被路由到该端点和/或从该端点路由,例如根据数据封包 (例如,数据封包的头部)来路由。
作为执行上述的一个或多个的附加或替换,封包交换通信网络4614还 可执行数据流操作。网络数据流端点电路(4602、4604、4606)可被配置 (例如,编程)为执行数据流图的(例如,分布式拾取)操作。在本文描 述了组件(例如,电路)的编程。参考图47论述配置网络数据流端点电路 (例如,其操作配置寄存器)的实施例。
作为分布式拾取数据流操作的示例,图46中的网络数据流端点电路 (4602、4604、4606)可被配置(例如,编程)为执行数据流图的分布式 拾取操作。参考图47论述配置网络数据流端点电路(例如,其操作配置寄 存器)的实施例。作为配置远程端点电路的附加或替换,根据本公开也可 配置本地端点电路。
网络数据流端点电路4602可被配置为从多个源(例如,网络数据流端 点电路4604和网络数据流端点电路4606)接收输入数据,并且例如根据 控制数据输出结果数据,例如如图45中所示。网络数据流端点电路4604 可被配置为将输入数据提供(例如,发送)给网络数据流端点电路4602, 例如在从处理元件4622接收到输入数据时。这在图46中可被称为输入0。 在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径4624在 处理元件4622和网络数据流端点电路4604之间提供专用通信线路。网络 数据流端点电路4606可被配置为将输入数据提供(例如,发送)给网络数 据流端点电路4602,例如在从处理元件4620接收到输入数据时。这在图 46中可被称为输入1。在一个实施例中,电路交换网络被配置(例如,编 程)为沿着路径4616在处理元件4620和网络数据流端点电路4606之间提 供专用通信线路。
当网络数据流端点电路4604要向网络数据流端点电路4602发送输入 数据时(例如,当网络数据流端点电路4602对于该数据具有可用存储空间 和/或网络数据流端点电路4604具有其输入数据时),网络数据流端点电 路4604可生成封包(例如,包括输入数据和头部)以将该数据引导到封包 交换通信网络4614上的网络数据流端点电路4602(例如,作为该(例如, 环状)网络4614上的一站)。这在图46中用虚线4626示意性图示。虽然 图46中所示的示例利用了两个源(例如,两个输入),但可利用单个或者 任意多个(例如,大于两个)源(例如,输入)。
当网络数据流端点电路4606要向网络数据流端点电路4602发送输入 数据时(例如,当网络数据流端点电路4602对于该数据具有可用存储空间 和/或网络数据流端点电路4606具有其输入数据时),网络数据流端点电 路4604可生成封包(例如,包括输入数据和头部)以将该数据引导到封包 交换通信网络4614上的网络数据流端点电路4602(例如,作为该(例如, 环状)网络4614上的一站)。这在图46中用虚线4618示意性图示。虽然 示出了网状网络,但可使用其他网络拓扑结构。
网络数据流端点电路4602(例如,在接收到来自网络数据流端点电路 4604的输入0、来自网络数据流端点电路4606的输入1和/或控制数据时) 于是可执行编程的数据流操作(例如,在此示例中是Pick操作)。网络数 据流端点电路4602随后可从该操作输出相应的结果数据,例如输出到图46 中的处理元件4608。在一个实施例中,电路交换网络被配置(例如,编程) 为沿着路径4628在处理元件4608(例如,其缓冲器)和网络数据流端点 电路4602之间提供专用通信线路。在下文参考图59-图61论述分布式Pick 操作的另一示例。
在一个实施例中,执行操作(例如,拾取操作)的控制数据来自于空 间阵列的其他组件,例如处理元件或者通过网络。其一个示例在下文参考 图47论述其示例。注意,Pick操作器在端点4602中示意性示出,并且可 不是复用器电路,例如参见下文对于图47中的网络数据流端点电路4700 的论述。
在某些实施例中,数据流图可以使得某些操作由处理元件执行并且某 些操作由通信网络(例如,一个或多个网络数据流端点电路)执行。
图47图示了根据本公开的实施例的网络数据流端点电路4700。虽然 在网络数据流端点电路4700中图示了多个组件,但在单个网络数据流端点 电路中可利用每个组件的一个或多个实例。网络数据流端点电路的实施例 可包括图47中的任何(例如,不是所有)组件。
图47描绘了(例如,夹层)网络接口的微体系结构,示出了主要数据 (实线)和控制数据(虚线)路径的实施例。这个微体系结构提供了配置 存储和调度器来使得(例如,高基数)数据流操作器成为可能。这里的某 些实施例包括到调度器的数据路径来使得分腿选择和描述成为可能。图47 示出了网络(例如,夹层)端点(例如,站)的高级别微体系结构,其对于情境可以是环状网络的成员。为了支持(例如,高基数)数据流操作, 端点(例如,操作配置存储4726)的配置包括考查多个网络(例如,虚拟) 通道(例如,而不是基线实现方式中的单个虚拟通道)的配置。网络数据 流端点电路4700的某些实施例包括来自入口和去到出口的数据路径以控制 对操作(例如,操作的拾取和切换类型)的选择,和/或在PickAny数据流操作器或者SwitchAny数据流操作器的情况下描述由调度器做出的选择。 在每个通信通道中,例如在(例如,封包交换通信)网络和(例如,电路 交换)网络(例如,处理元件的空间阵列的架构)中,可利用流控制和背 压行为。
作为对该微体系结构的实施例的一个描述,拾取数据流操作器可起到 如下作用:从输入数据的多个输入中拾取结果数据的一个输出,例如基于 控制数据来拾取。网络数据流端点电路4700可被配置为考虑电路4702的 (一个或多个)空间阵列入口缓冲器4700之一(例如,来自架构的数据是 控制数据)作为在存储在电路4700的(一个或多个)网络入口缓冲器4724 中的多个输入数据元素之间进行选择以将结果数据引导到电路4700的空间 阵列出口缓冲器4708。从而,(一个或多个)网络入口缓冲器4724可被 认为是到虚拟复用器的输入,空间阵列入口缓冲器4702被认为是复用器选 择,并且空间阵列出口缓冲器4708被认为是复用器输出。在一个实施例中, 当(例如,控制数据)值被检测到和/或到达空间阵列入口缓冲器4702中 时,调度器4728(例如,由存储4726中的操作配置所编程)被激活来考 查相应的网络出口通道。当在该通道中有数据可用时,其被从网络入口缓 冲器4724去除并且被移动到空间阵列出口缓冲器4708。入口和出口两者 的控制比特随后都可被更新来反映数据的传送。这可导致在关联的网络中 传播控制流令牌或信用。在某些实施例中,所有输入(例如,控制或数据) 可在本地或者在网络上出现。
最初,可能看起来使用封包交换网络来实现复用和/或解复用的代码的 (例如,高基数分段)操作器会防碍性能。例如,在一个实施例中,封包 交换网络一般是被共享的并且调用者和被调用者数据流图可能相互远离。 然而,回想起在某些实施例中,支持复用和/或解复用的意图是减小由数据 流操作器内的非频繁代码路径(例如,由空间阵列)消耗的面积。从而, 这里的某些实施例减小面积并且避免了消耗例如像PE这样的更昂贵的架 构资源,例如,而不会(大幅)影响个体PE支持这些(例如,非频繁) 操作的面积和效率。
现在转到图47的进一步细节,描绘的网络数据流端点电路4700包括 空间阵列(例如,架构)入口缓冲器4702,以例如从(例如,电路交换) 网络输入数据(例如,控制数据)。如上所述,虽然描绘了单个空间阵列 (例如,架构)入口缓冲器4702,但在网络数据流端点电路中可以有多个 空间阵列(例如,架构)入口缓冲器。在一个实施例中,空间阵列(例如, 架构)入口缓冲器4702将从空间阵列(例如,处理元件的空间阵列)的通 信网络,例如从网络4704和网络4706中的一个或多个,接收数据(例如, 控制数据)。在一个实施例中,网络4704是图46中的网络4613的一部分。
描绘的网络数据流端点电路4700包括空间阵列(例如,架构)出口缓 冲器4708,以例如输出数据(例如,控制数据)到(例如,电路交换)网 络。如上所述,虽然描绘了单个空间阵列(例如,架构)出口缓冲器4708, 但在网络数据流端点电路中可以有多个空间阵列(例如,架构)出口缓冲 器。在一个实施例中,空间阵列(例如,架构)出口缓冲器4708将把数据(例如,控制数据)发送(例如,传输)到空间阵列(例如,处理元件的 空间阵列)的通信网络上,例如发送到网络4710和网络4712中的一个或 多个上。在一个实施例中,网络4710是图46中的网络4613的一部分。
额外地或者替换地,网络数据流端点电路4700可耦合到另一网络4714, 例如封包交换网络。另一网络4714,例如封包交换网络,可用于传输(例 如,发送或接收)(例如,输入和/或结果)数据到处理元件或者空间阵列 的其他组件和/或用于传输输入数据或结果数据中的一个或多个。在一个实 施例中,网络4714是图46中的封包交换通信网络4614(例如时间复用网 络)的一部分。
网络缓冲器4718(例如,(一个或多个)寄存器)可以是(例如,环 状)网络4714上的一站,以例如从网络4714接收数据。
描绘的网络数据流端点电路4700包括网络出口缓冲器4722,以例如 输出数据(例如,结果数据)到(例如,封包交换)网络。如上所述,虽 然描绘了单个网络出口缓冲器4722,但在网络数据流端点电路中可以有多 个网络出口缓冲器。在一个实施例中,网络出口缓冲器4722将把数据(例 如,结果数据)发送(例如,传输)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如发送到网络4714上。在一个实施例中,网络 4714是图46中的封包交换网络4614的一部分。在某些实施例中,网络出 口缓冲器4722将把数据(例如,来自空间阵列入口缓冲器4702)输出到 (例如,封包交换)网络4714,以例如被路由(例如,引导)到其他组件 (例如,(一个或多个)其他网络数据流端点电路)。
描绘的网络数据流端点电路4700包括网络入口缓冲器4722,以例如 从(例如,封包交换)网络输入数据(例如,输入的数据)。如上所述, 虽然描绘了单个网络入口缓冲器4724,但在网络数据流端点电路中可以有 多个网络入口缓冲器。在一个实施例中,网络入口缓冲器4724将从空间阵 列(例如,处理元件的空间阵列)的通信网络,例如从网络4714,接收(例如,传输)数据(例如,输入数据)。在一个实施例中,网络4714是 图46中的封包交换网络4614的一部分。在某些实施例中,网络入口缓冲 器4724将从(例如,封包交换)网络4714输入数据(例如,来自空间阵 列入口缓冲器4702),以例如被从其他组件(例如,(一个或多个)其他 网络数据流端点电路)路由(例如,引导)到该处(例如,到空间阵列出 口缓冲器4708中)。
在一个实施例中,数据格式(例如,网络4714上的数据的数据格式) 包括具有数据和头部(例如,具有该数据的目的地)的封包。在一个实施 例中,数据格式(例如,网络4704和/或4706上的数据的数据格式)只包 括数据(例如,不是具有数据和头部(例如,具有该数据的目的地)的封 包)。网络数据流端点电路4700可向封包添加头部(或其他数据)(例如,从电路4700输出的数据)或者从封包去除头部(或其他数据)(例如,输 入到电路4700中的数据)。耦合4720(例如,导线)可以把从网络4714 (例如,从网络缓冲器4718)接收的数据发送到网络入口缓冲器4724和/ 或复用器4716。复用器4716可(例如,经由来自调度器4728的控制信号) 从网络缓冲器4718或者从网络出口缓冲器4722输出数据。在一个实施例 中,复用器4716或网络缓冲器4718中的一个或多个是与网络数据流端点 电路4700分开的组件。缓冲器可包括多个(例如,离散)条目,例如多个 寄存器。
在一个实施例中,操作配置存储4726(例如,一个或多个寄存器)在 配置(例如,映射)期间被加载并且指定此网络数据流端点电路4700(例 如,不是空间阵列的处理元件)要执行的特定操作(或者多个操作)(例 如,数据引导操作,与逻辑和/或算术操作形成对照)。(一个或多个)缓 冲器(例如,4702、4708、4722和/或4724)活动可由该操作控制(例如, 由调度器4728控制)。调度器4728可调度网络数据流端点电路4700的一 个或多个操作,例如当(例如,所有)输入(例如,有效载荷)数据和/或 控制数据到达时。去到和来自调度器4728的虚线指示可被用于例如去到和 /或来自调度器4728的控制数据的路径。调度器也可控制复用器4716,以 例如引导去到和/或来自网络数据流端点电路4700和网络4714的数据。
参考以上的图46中的分布式拾取操作,网络数据流端点电路4602可 被配置为(例如,如图47中所示作为其操作配置寄存器4726中的操作) 从网络数据流端点电路4604和网络数据流端点电路4606的每一者接收 (例如,如图47中所示在其网络入口缓冲器4724(中的两个存储位置) 中)输入数据,并且例如根据(例如,如图47中所示其空间阵列入口缓冲器4702中的)控制数据输出结果数据(例如,如图47中所示从其空间阵 列出口缓冲器4708输出)。网络数据流端点电路4604可被配置为(例如, 如图47中所示作为其操作配置寄存器4726中的操作)向网络数据流端点 电路4604提供(例如,如图47中所示经由电路4604的网络出口缓冲器 4722发送)输入数据,例如在从处理元件4622接收到输入数据时(例如, 如图47中所示在电路4604的空间阵列入口缓冲器4702中接收到)。这在 图46中可被称为输入0。在一个实施例中,电路交换网络被配置(例如, 编程)为沿着路径4624在处理元件4622和网络数据流端点电路4604之间 提供专用通信线路。网络数据流端点电路4604可在(例如,如图47中所 示在其网络出口缓冲器4722中的)接收数据中包括(例如,添加)头部封 包以将该封包(例如,输入数据)引导到网络数据流端点电路4602。网络 数据流端点电路4606可被配置为(例如,如图47中所示作为其操作配置 寄存器4726中的操作)向网络数据流端点电路4602提供(例如,如图47 中所示经由电路4606的网络出口缓冲器4722发送)输入数据,例如在从 处理元件4620接收到输入数据时(例如,如图47中所示在电路4606的空 间阵列入口缓冲器4702中接收到)。这在图46中可被称为输入1。在一个 实施例中,电路交换网络被配置(例如,编程)为沿着路径4616在处理元 件4620和网络数据流端点电路4606之间提供专用通信线路。网络数据流 端点电路4606可在(例如,如图47中所示在其网络出口缓冲器4722中的) 接收数据中包括(例如,添加)头部封包以将该封包(例如,输入数据) 引导到网络数据流端点电路4602。
当网络数据流端点电路4604要向网络数据流端点电路4602发送输入 数据时(例如,当网络数据流端点电路4602对于该数据具有可用存储空间 和/或网络数据流端点电路4604具有其输入数据时),网络数据流端点电 路4604可生成封包(例如,包括输入数据和头部)以将该数据引导到封包 交换通信网络4614上的网络数据流端点电路4602(例如,作为该(例如, 环状)网络上的一站)。这在图46中用虚线4626示意性图示。网络4614 在图46中用多个虚线框来示意性图示。网络4614可包括网络控制器4614A, 以例如管理网络4614A上的数据的进入和/或外出。
当网络数据流端点电路4606要向网络数据流端点电路4602发送输入 数据时(例如,当网络数据流端点电路4602对于该数据具有可用存储空间 和/或网络数据流端点电路4606具有其输入数据时),网络数据流端点电 路4604可生成封包(例如,包括输入数据和头部)以将该数据引导到封包 交换通信网络4614上的网络数据流端点电路4602(例如,作为该(例如, 环状)网络上的一站)。这在图46中用虚线4618示意性图示。
网络数据流端点电路4602(例如,当在电路4602的(一个或多个) 网络入口缓冲器中接收到来自网络数据流端点电路4604的输入0、在电路 4602的(一个或多个)网络入口缓冲器中接收到来自网络数据流端点电路 4606的输入1和/或在电路4602的空间阵列入口缓冲器中接收到来自处理 元件4608的控制数据时)于是可执行编程的数据流操作(例如,在此示例 中是Pick操作)。网络数据流端点电路4602随后可从该操作输出相应的 结果数据,例如输出到图46中的处理元件4608。在一个实施例中,电路 交换网络被配置(例如,编程)为沿着路径4628在处理元件4608(例如, 其缓冲器)和网络数据流端点电路4602之间提供专用通信线路。在下文参 考图59-图61论述分布式Pick操作的另一示例。图46中的缓冲器可以是 每个PE中的小的未标注框。
下面的图48-8包括示例数据格式,但可利用其他数据格式。在数据格 式中(例如,在封包中)可包括一个或多个字段。数据格式可被网络数据 流端点电路使用,例如用来在第一组件之间(例如,在第一网络数据流端 点电路和第二网络数据流端点电路、空间阵列的组件等等之间)传输(例 如,发送和/或接收)数据。
图48图示了根据本公开的实施例的发送操作4802和接收操作4804的 数据格式。在一个实施例中,发送操作4802和接收操作4804是在封包交 换通信网络上传输的数据的数据格式。描绘的发送操作4802数据格式包括 目的地字段4802A(例如,指出数据将被发送到网络中的哪个组件)、通 道字段4802B(例如,指出数据将在网络上的哪个通道上被发送)以及输 入字段4802C(例如,要发送的有效载荷或输入数据)。描绘的接收操作 4804包括输出字段,例如其也可包括目的地字段(未描绘)。这些数据格 式可被用于(例如,用于(一个或多个)封包)来处理将数据移入和移出 组件。这些配置可以是可分离的和/或并行发生。这些配置可使用分开的资 源。术语通道一般可以指与请求相关联的通信资源(例如,在管理硬件 中)。配置和队列管理硬件的关联可以是显式的。
图49图示了根据本公开的实施例的发送操作4902的另一数据格式。 在一个实施例中,发送操作4902是在封包交换通信网络上传输的数据的数 据格式。描绘的发送操作4902数据格式包括类型字段(例如,用于注释特 殊控制封包,例如但不限于配置、提取或异常封包)、目的地字段4902B (例如,指出数据要被发送到网络中的哪个组件)、通道字段4902C(例 如,指出数据要在网络上的哪个通道上被发送)以及输入字段4902D(例 如,要发送的有效载荷或输入数据)。
图50图示了根据本公开的实施例的配置数据格式来针对发送(例如, 切换)操作5002和接收(例如,拾取)操作5004配置电路元件(例如, 网络数据流端点电路)。在一个实施例中,发送操作5002和接收操作5004 是要在封包交换通信网络上,例如在网络数据流端点电路之间传输的数据 的配置数据格式。描绘的发送操作配置数据格式5002包括目的地字段 5002A(例如,指出(输入)数据要被发送到网络中的哪个(哪些)组 件)、通道字段5002B(例如,指出(输入)数据要在网络上的哪个通道 上被发送)、输入字段5002C(例如,要发送输入数据的(一个或多个) 组件的标识符,例如,此元件对其敏感的(例如,架构入口) 缓冲器中的输入的集合)以及操作字段5002D(例如,指出多个操作中的哪些要被执 行)。在一个实施例中,(例如,外出)操作是Switch或SwitchAny数据 流操作之一,例如对应于数据流图的(例如,同一)数据流操作器。
描绘的接收操作配置数据格式5004包括输出字段5004A(例如,指出(结果)数据要被发送到网络中的哪个(哪些)组件)、输入字段5004B (例如,要发送输入数据的(一个或多个)组件的标识符)以及操作字段 5004C(例如,指出多个操作中的哪些要被执行)。在一个实施例中, (例如,进入)操作是Pick、PickSingleLeg、PickAny或者Merge(合并) 数据流操作之一,例如对应于数据流图的(例如,同一)数据流操作器。 在一个实施例中,合并数据流操作是要求所有操作对象并且将所有操作对 象出队的拾取(例如,利用出口端点接收控制)。
本文利用的配置数据格式可包括本文描述的字段中的一个或多个,例 如按任何顺序。
图51图示了根据本公开的实施例的配置数据格式5102来在其输入、 输出和控制数据被注释在电路5100上的情况下针对发送操作配置电路元件 (例如,网络数据流端点电路)。描绘的发送操作配置数据格式5102包括 目的地字段5102A(例如,指出数据将被发送到网络中的哪个组件)、通 道字段5102B(例如,指出数据将在(封包交换)网络上的哪个通道上被 发送)以及输入字段4802C(例如,要发送输入数据的(一个或多个)组 件的标识符)。在一个实施例中,电路5100(例如,网络数据流端点电路) 将接收采取发送操作配置数据格式5102的数据格式的数据的封包,例如其 中目的地指出结果要被发送到多个电路中的哪个电路,通道指出要在(封 包交换)网络的哪个通道上发送数据,并且输入是要从多个电路中的哪个 电路接收输入数据。与门5104将在以下两个情况都成立时允许操作被执行:输入数据可用,而且信用状态是“是”(例如,依从性令牌指出),指出 例如在目的地的缓冲器中对于要存储的输出数据有空间。在某些实施例中, 每个操作被注释有其要求(例如,输入、输出和控制)并且如果所有要求 都得到满足,则该配置是电路(例如,网络数据流端点电路)“可执行” 的。
图52图示了根据本公开的实施例的配置数据格式5202来在其输入、 输出和控制数据被注释在电路5200上的情况下针对选中(例如,发送)操 作配置电路元件(例如,网络数据流端点电路)。描绘的(例如,发送) 操作配置数据格式5202包括目的地字段5202A(例如,指出(输入)数据 要被发送到网络中的哪个(哪些)组件)、通道字段5202B(例如,指出要在网络上的哪个通道上发送(输入)数据)、输入字段5202C(例如, 要发送输入数据的(一个或多个)组件的标识符)以及操作字段5202D (例如,指出多个操作中的哪些要被执行和/或该操作的控制数据的源)。 在一个实施例中,(例如,外出)操作是发送、Switch或SwitchAny数据 流操作之一,例如对应于数据流图的(例如,同一)数据流操作器。
在一个实施例中,电路5200(例如,网络数据流端点电路)将接收采 取(例如,发送)操作配置数据格式5202的数据格式的数据的封包,例如 其中输入是有效载荷(例如,输入数据)的(一个或多个)源并且操作字 段指出要执行哪个操作(例如,示意性地示为Switch或SwitchAny)。描 绘的复用器5204可从多个可用操作中选择要执行的操作,例如基于操作字 段5202D中的值来选择。在一个实施例中,电路5200将在以下两个情况都 成立时执行该操作:输入数据可用,而且信用状态是“是”(例如,依从 性令牌指出),指出例如在目的地的缓冲器中对于要存储的输出数据有空 间。
在一个实施例中,发送操作不利用超出检查其(一个或多个)输入可 用于发送之外的控制。这可使得切换能够在不是所有分腿上都有信用的情 况下执行操作。在一个实施例中,Switch和/或SwitchAny操作包括由存储 在操作字段5202D中的值控制的复用器来选择正确的队列管理电路。
存储在操作字段5202D中的值可在控制选项之间进行选择,例如对于 每个操作有不同的控制(例如,逻辑)电路,例如如图53-图56中所示。 在一些实施例中,信用(例如,网络上的信用)状态是另一输入(例如, 如这里的图53-图54中所描绘)。
图53图示了根据本公开的实施例的配置数据格式来在其输入、输出和 控制数据被注释在电路5300上的情况下针对Switch操作配置数据格式5302 配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在 操作字段5202D中的(例如,外出)操作值是针对Switch操作的,例如对 应于数据流图的Switch数据流操作器。在一个实施例中,电路5300(例如, 网络数据流端点电路)将接收采取Switch操作5302的数据格式的数据的 封包,例如其中输入字段5302A中的输入是哪个(哪些)组件要被发送数 据并且操作字段5302B指出要执行哪个操作(例如,示意性地示为 Switch)。描绘的电路5300可基于操作字段5302B从多个可用操作中选择 要执行的操作。在一个实施例中,电路5200在输入数据可用(例如,根据 输入状态,例如在(一个或多个)目的地中有用于数据的空间)而且信用 状态(例如,选择操作(OP)状态)是“是”(例如,网络信用指出在网 络上有可用性来将该数据发送到(一个或多个)目的地)时执行该操作。 例如,复用器5310、5312、5314可结合每个输入(例如,在切换操作中输 出数据将被发送到该处)的相应输入状态和信用状态使用,以例如防止输 入显示为可用,直到输入状态(例如,目的地中用于数据的空间)和信用 状态(例如,在网络上有空间来到达目的地)两者都为真(例如,“是”) 为止。在一个实施例中,输入状态是对于例如在目的地的缓冲器中有或者 没有空间用于要存储的(输出)数据的指示。在某些实施例中,与门5306 将在输入数据可用(例如,从复用器5304输出的)而且选择操作(例如, 控制数据)状态为“是”(例如,指示选择操作(例如,输入将被发送到 多个输出中的哪个,例如参见图45)时允许操作被执行。在某些实施例中, 利用控制数据(例如,选择op)对操作的执行将使得来自输入之一的输入 数据在一个或多个(例如,多个)输出上被输出(例如,如控制数据所指 示),例如根据来自复用器5308的复用器选择比特。在一个实施例中,选 择op选择切换输出的哪个分腿将被使用和/或选择解码器创建复用器选择 比特。
图54图示了根据本公开的实施例的配置数据格式来在其输入、输出和 控制数据被注释在电路5400上的情况下针对SwitchAny操作配置数据格式 5402配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存 储在操作字段5202D中的(例如,外出)操作值是针对例如对应于数据流 图的SwitchAny数据流操作器的SwitchAny操作的。在一个实施例中,电 路5400(例如,网络数据流端点电路)将接收采取SwitchAny操作配置数 据格式5402的数据格式的数据的封包,例如其中输入字段5402A中的输入 是哪个(哪些)组件要被发送数据并且操作字段5402B指出要执行哪个操 作(例如,示意性地示为SwitchAny)和/或该操作的控制数据的源。在一 个实施例中,电路5200在输入数据的任何一者可用(例如,根据输入状态, 例如在(一个或多个)目的地中有用于数据的空间)并且信用状态是“是” (例如,网络信用指出在网络上有可用性来将该数据发送到(一个或多个) 目的地)时执行该操作。例如,复用器5410、5412、5414可结合每个输入 (例如,在SwitchAny操作中输出数据将被发送到该处)的相应输入状态 和信用状态使用,以例如防止输入在输入状态(例如,目的地中用于数据 的空间)和信用状态(例如,在网络上有空间来到达目的地)两者都为真 (例如,“是”)之前就显示为可用。在一个实施例中,输入状态是对于 例如在目的地的缓冲器中有空间或者没有空间用于要存储的(输出)数据 的指示。在某些实施例中,(OR)或门5404将在输出的任何一者可用时 允许操作被执行。在某些实施例中,操作的执行将使得来自输入之一的第 一可用输入数据在一个或多个(例如,多个)输出上被输出,例如根据来 自复用器5406的复用器选择比特。在一个实施例中,一旦任何输出信用可 用,SwitchAny就发生(例如,不同于利用选择op的Switch)。复用器选 择比特可用于将输入引导到网络数据流端点电路的(例如,网络)出口缓 冲器。
图55图示了根据本公开的实施例的配置数据格式来在其输入、输出和 控制数据被注释在电路5500上的情况下针对Pick操作配置数据格式5502 配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在 操作字段5502C中的(例如,进入)操作值是针对Pick操作的,例如对应 于数据流图的Pick数据流操作器。在一个实施例中,电路5500(例如,网 络数据流端点电路)将接收采取Pick操作配置数据格式5502的数据格式 的数据的封包,例如其中输入字段5502B中的数据是哪个(哪些)组件将 要发送输入数据,输出字段5502A中的数据是哪个(哪些)组件将被发送 输入数据,并且操作字段5502C指出要执行哪个操作(例如,示意性地示 为Pick)和/或该操作的控制数据的源。描绘的电路5500可基于操作字段 5502C从多个可用操作中选择要执行的操作。在一个实施例中,电路5500 将在以下都成立时执行该操作:输入数据可用(例如,根据输入(例如, 网络入口缓冲器)状态,例如所有输入数据已到达),信用状态(例如, 输出状态是“是”(例如,空间阵列出口缓冲器),指出例如在(一个或 多个)目的地的缓冲器中对于要存储的输出数据有空间,并且选择操作 (例如,控制数据)状态是“是”。在某些实施例中,与门5506将在输入 数据可用(例如,从复用器5504输出的)、输出空间可用而且选择操作 (例如,控制数据)状态为“是”(例如,指示选择操作(例如,输入将 被发送到多个输出中的哪个,例如参见图45)时允许该操作被执行。在某 些实施例中,利用控制数据(例如,选择op)对操作的执行将使得来自多 个输入之一的输入数据(例如,由控制数据指示)在一个或多个(例如, 多个)输出上被输出,例如根据来自复用器5508的复用器选择比特。在一 个实施例中,选择op选择拾取的哪个分腿将被使用和/或选择解码器创建 复用器选择比特。
图56图示了根据本公开的实施例的配置数据格式来在其输入、输出和 控制数据被注释在电路5600上的情况下针对PickAny操作5602配置电路 元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段 5602C中的(例如,进入)操作值是针对PickAny操作的,例如对应于数 据流图的PickAny数据流操作器。在一个实施例中,电路5600(例如,网 络数据流端点电路)将接收采取PickAny操作配置数据格式5602的数据格 式的数据的封包,例如其中输入字段5602B中的数据是哪个(哪些)组件 将要发送输入数据,输出字段5602A中的数据是哪个(哪些)组件将被发 送输入数据,并且操作字段5602C指出要执行哪个操作(例如,示意性地 示为PickAny)。描绘的电路5600可基于操作字段5602C从多个可用操作 中选择要执行的操作。在一个实施例中,电路5600将在以下情况成立时执 行该操作:任何(例如,第一个到达的)输入数据可用(例如,根据输入 (例如,网络入口缓冲器)状态,例如任何输入数据已到达),并且信用 状态(例如,输出状态)是“是”(例如,空间阵列出口缓冲器指出), 指出例如在(一个或多个)目的地的缓冲器中对于要存储的输出数据有空间。在某些实施例中,与门5606将在任何输入数据可用(例如,从复用器 5604输出的)并且输出空间可用时允许操作被执行。在某些实施例中,操 作的执行将使得来自多个输入之一的(例如,第一个到达的)输入数据在 一个或多个(例如,多个)输出上被输出,例如根据来自复用器5608的复 用器选择比特。
在一个实施例中,PickAny在任何数据存在时执行和/或选择解码器创 建复用器选择比特。
图57图示了根据本公开的实施例的网络数据流端点电路5700选择操 作(5704、5706、5700)来执行。未决操作存储5701(例如,在图47中 的调度器4728中)可存储一个或多个数据流操作,例如根据本文论述的 (一个或多个)格式存储一个或多个数据流操作。调度器(例如,基于固 定优先级或者例如具有其所有操作对象的操作中最老旧的)可调度操作来 执行。例如,调度器可选择操作5702,并且根据存储在操作字段中的值, 从复用器5708和/或复用器5710发送相应的控制信号。作为示例,若干个 操作在单个网络数据流端点电路中可以是同时可执行的。假设所有数据都 在那里,则“可执行”信号(例如,如图51-图56中所示)可作为信号被 输入到复用器5712中。复用器5712可发送对于选中的操作(例如,操作 5702、5704和5706之一)的控制信号作为输出,这些控制信号使得复用 器5708配置网络数据流端点电路中的连接来执行选中的操作(例如,从 (一个或多个)缓冲器源发数据或者向(一个或多个)缓冲器发送数据)。 复用器5712可发送对于选中的操作(例如,操作5702、5704和5706之一) 的控制信号作为输出,这些控制信号使得复用器5710配置网络数据流端点 电路中的连接来从(一个或多个)队列去除数据,例如消耗的数据。作为 示例,参见本文关于让数据(例如,令牌)被去除的论述。图57中的“PE 状态”可以是来自PE的控制数据,例如队列的空指示符和满指示符(例 如,背压信号和/或网络信用)。在一个实施例中,PE状态对于所有的缓 冲器和/或数据路径可包括空或满比特,例如在本文的图47中。图57图示 了对于本文的实施例的一般化调度,例如参考图53-图56来论述对于实施 例的特殊化调度。
在一个实施例中,(例如,与调度一样)出队的选择是由操作及其动 态行为来决定的,例如在执行之后使操作出队。在一个实施例中,电路将 使用操作对象选择比特来使数据(例如,输入、输出和/或控制数据)出队。
图58图示了根据本公开的实施例的网络数据流端点电路5800。与图 47相比,网络数据流端点电路5800将配置和控制分割成了两个分开的调 度器。在一个实施例中,出口调度器5828A将调度对如下数据的操作:该 数据将进入数据流端点电路5800(例如,从耦合到数据流端点电路5800的 电路交换通信网络进入)(例如,在参量队列5802处,例如如图47中所 示的空间阵列入口缓冲器4702)以及输出数据流端点电路5800(例如,从 耦合到数据流端点电路5800的封包交换通信网络输出)(例如,在网络出 口缓冲器5822处,例如如图47中所示的网络出口缓冲器4722)。在一个 实施例中,入口调度器5828B将调度对如下数据的操作:该数据将进入数 据流端点电路5800(例如,从耦合到数据流端点电路5800的封包交换通 信网络进入)(例如,在网络入口缓冲器5824处,例如如图47中所示的 网络入口缓冲器5724)以及输出数据流端点电路5800(例如,从耦合到数 据流端点电路5800的电路交换通信网络输出)(例如,在输出缓冲器5808 处,例如如图47中所示的空间阵列出口缓冲器5708)。调度器5828A和/ 或调度器5828B可包括电路5800的(例如,操作)状态作为输入,例如输 入(例如,缓冲器5802A、5802)的充满水平、输出(例如,缓冲器5808) 的充满水平、值(例如,5802A中的值),等等。调度器5828B可包括信 用返回电路,以例如表示信用被返回到发送者,例如在电路5800的网络入 口缓冲器5824中接收之后。
网络5814可以是电路交换网络,例如如本文所述。额外地或者替换地, 也可利用封包交换网络(例如,如本文所述),例如耦合到网络出口缓冲 器5822、网络入口缓冲器5824或者这里的其他组件。参量队列5802可包 括控制缓冲器5802A,以例如指出各输入队列(例如,缓冲器)何时包括 (新的)数据项,例如以单个比特的形式。现在转到图59-图61,在一个 实施例中,这些累积示出了创建分布式拾取的配置。
图59图示了根据本公开的实施例的网络数据流端点电路5900在执行 拾取操作的同时接收输入零(0),例如如上文参考图46所述。在一个实 施例中,出口配置5926A(例如,在配置步骤期间)被加载以要向不同的 网络数据流端点电路(例如,图61中的电路6100)发送数据的拾取操作 的一部分。在一个实施例中,出口调度器5928A将针对输入数据(例如,来自处理元件)监视参量队列5902(例如,数据队列)。根据描绘的数据 格式的实施例,“发送”(例如,其二进制值)根据字段X、Y指出数据 将被发送,其中X是指示特定目标网络数据流端点电路的值(例如,0是 图61中的网络数据流端点电路6100)并且Y是指出该值将被存储在哪个 网络入口缓冲器(例如,缓冲器6124)位置的值。在一个实施例中,Y是 指示多通道(例如,封包交换)网络的特定通道的值(例如,0是图61中 的网络数据流端点电路6100的通道0和/或缓冲器元素0)。当输入数据到 达时,其随后被网络数据流端点电路5900(例如,从网络出口缓冲器5922) 发送到不同的网络数据流端点电路(例如,图61中的网络数据流端点电路 6100)。图60图示了根据本公开的实施例的网络数据流端点电路6000在 执行拾取操作的同时接收输入一(1),例如如上文参考图46所述。在一 个实施例中,出口配置6026A(例如,在配置步骤期间)被加载以要向不 同的网络数据流端点电路(例如,图61中的电路6100)发送数据的拾取 操作的一部分。在一个实施例中,出口调度器6028A将针对输入数据(例 如,来自处理元件)监视参量队列6020(例如,数据队列6002B)。根据 描绘的数据格式的实施例,“发送”(例如,其二进制值)根据字段X、 Y指出数据将被发送,其中X是指示特定目标网络数据流端点电路的值 (例如,0是图61中的网络数据流端点电路6100)并且Y是指出该值将被 存储在哪个网络入口缓冲器(例如,缓冲器6124)位置的值。在一个实施例中,Y是指示多通道(例如,封包交换)网络的特定通道的值(例如,1 是图61中的网络数据流端点电路6100的通道1和/或缓冲器元素1)。当 输入数据到达时,其随后被网络数据流端点电路6000(例如,从网络出口 缓冲器5922)发送到不同的网络数据流端点电路(例如,图61中的网络 数据流端点电路6100)。
图61图示了根据本公开的实施例的网络数据流端点电路6100在执行 拾取操作的同时输出选中的输入,例如如上文参考图46所述。在一个实施 例中,其他网络数据流端点电路(例如,电路5900和电路6000)将把其 输入数据发送到电路6100的网络入口缓冲器6124。在一个实施例中,入 口配置6126B(例如,在配置步骤期间)被利用拾取操作的一部分来加载, 该拾取操作将例如根据控制值拾取被发送到网络数据流端点电路6100的数 据的拾取操作的一部分。在一个实施例中,将在入口控制6132(例如,缓 冲器)中接收控制值。在一个实施例中,入口调度器6028A将监视对控制 值和输入值的接收(例如,在网络入口缓冲器6124中)。例如,如果控制 值说从网络入口缓冲器6124的缓冲器元素A(例如,此示例中是0或1) (例如,从通道A)拾取,则存储在该缓冲器元素A中的值随后作为该操 作的结果被电路6100输出,例如输出到输出缓冲器6108中,例如当输出 缓冲器有存储空间时(例如,如背压信号所指示)。在一个实施例中,电 路6100的输出数据在出口缓冲器具有令牌(例如,输入数据和控制数据) 并且接收器断言其具有缓冲器(例如,指出存储可用,但是资源的其他指 派是可能的,这个示例只是说明性的)被发送出。
图62图示了根据本公开的实施例的流程图6200。描绘的流程6200包 括:提供处理元件的空间阵列6202;利用封包交换通信网络根据数据流图 在所述空间阵列内在处理元件之间路由数据6204;利用所述处理元件执行 所述数据流图的第一数据流操作6206;并且利用所述封包交换通信网络的 多个网络数据流端点电路执行所述数据流图的第二数据流操作6208。
再次参考图9,加速器(例如,CSA)902可对多个缓存堆(例如,缓 存堆908)中的一个或多个执行(例如,或者请求执行)数据的访问(例 如,加载和/或存储)。可包括存储器接口电路(例如,(一个或多个)请 求地址文件(RAF)电路),例如如本文所述,以提供存储器(例如,缓 存堆)和加速器902之间的访问。再次参考图12,请求电路(例如,处理 元件)可对多个缓存堆(例如,缓存堆1202)中的一个或多个执行(例如, 或者请求执行)数据的访问(例如,加载和/或存储)。可包括存储器接口 电路(例如,(一个或多个)请求地址文件(RAF)电路),例如如本文 所述,以提供存储器(例如,缓存存储器的一个或多个堆)和加速器(例如,加速器分片(1208、1210、1212、1214)中的一个或多个)之间的访 问。再次参考图46和/或图47,请求电路(例如,处理元件)可对多个缓 存堆中的一个或多个执行(例如,或者请求执行)数据的访问(例如,加 载和/或存储)。可包括存储器接口电路(例如,(一个或多个)请求地址 文件(RAF)电路,例如RAF/缓存接口4612),例如如本文所述,以提 供存储器(例如,缓存存储器的一个或多个堆)和加速器(例如,处理元 件和/或网络数据流端点电路(例如,电路4602、4604、4606)中的一个 或多个)之间的访问。
在某些实施例中,加速器(例如,其PE)通过(i)电路交换网络 (例如,如本文所述,例如参考图6-图12所述)或者(ii)通过封包交换 网络(例如,如本文所述,例如参考图45-图62所述)耦合到RAF电路或 多个RAF电路。
在某些实施例中,电路(例如,请求地址文件(RAF)电路)(例如, 多个RAF电路的每一者)包括转化后备缓冲器(TLB)(例如,TLB电 路)。TLB可接收虚拟地址的输入并且输出与虚拟地址到物理地址的映射 (例如,地址映射)(例如,不同于数据流图到硬件的任何映射)相对应 的物理地址。虚拟地址可以是在电路上(例如,在加速器和/或处理器上) 运行的程序所看到的地址。物理地址可以是存储器硬件中的(例如,不同 于虚拟的)地址。TLB可包括数据结构(例如,表格)来存储(例如,最 近使用的)虚拟到物理存储器地址转化,例如使得不必对存在的每个虚拟 地址执行转化来获得与该虚拟地址相对应的物理存储器地址。如果虚拟地 址条目不在TLB中,则电路(例如,TLB管理器电路)可执行页游走来确 定虚拟到物理存储器地址转化。在一个实施例中,电路(例如,RAF电路) 将例如如图6-图12中所示经由电路交换网络从请求实体(例如,PE或其 他硬件组件)接收用于在TLB(例如,RAF电路中的TLB)中转化的虚拟 地址的输入。额外地或者替换地,电路(例如,RAF电路)将例如如图45-图62中所示经由封包交换网络从请求实体(例如,PE、网络数据流端 点电路或其他硬件组件)接收用于在TLB(例如,RAF电路中的TLB)中 转化的虚拟地址的输入。在某些实施例中,为存储器(例如,缓存)访问 请求接收的数据是存储器命令。存储器命令可包括要访问的虚拟地址、要 执行的操作(例如,加载或存储)和/或有效载荷数据(例如,对于存储)。
2.6浮点支持
某些HPC应用以其对大量浮点带宽的需求为特征。为了满足此需求, CSA的实施例可配设有多个(例如,每个在128到256个之间)浮点加法 和乘法PE,这例如取决于分片配置。CSA可提供几个其他扩展精度模式, 以例如简化数学库实现。CSA浮点PE可支持单精度和双精度两者,但更 低精度的PE可支持机器学习工作负荷。CSA与处理器核心相比可提供大 一个量级的浮点性能。在一个实施例中,除了增大浮点带宽以外,为了为 所有浮点单元供能,浮点操作中消耗的能量被降低。例如,为了降低能量, CSA可选择性地门控浮点乘法器阵列的低阶比特。在考查浮点算术的性能 时,乘法阵列的低阶比特可能经常不影响最终的舍入的乘积。图63图示了 根据本公开的实施例的被划分成三个区域(结果区域、三个潜在进位区域 (6302、6304、6306)和门控区域)的浮点乘法器6300。在某些实施例中, 进位区域有可能影响结果区域并且门控区域不太可能影响结果区域。考虑 g个比特的门控区域,最大进位可以是:
Figure BDA0002512929450001081
给定这个最大进位,如果进位区域的结果小于2c–g,其中进位区域为 c比特宽,则门控区域可被忽略,因为其不影响结果区域。增大g意味着更 有可能将会需要门控区域,而增大c意味着,在随机假设下,门控区域将 不被使用并且可被禁用来避免能量消耗。在CSA浮点乘法PE的实施例中, 利用两级管线式方案,其中首先确定进位区域,然后如果发现门控区域影 响结果则确定门控区域。如果已知关于乘法的情境的更多信息,则CSA更 激进地调节门控区域的大小。在FMA中,乘法结果可被添加到累加器, 这经常比任一被乘数都大得多。在此情况下,在乘法之前可观察加数指数 并且CSDA可相应地调整门控区域。CSA的一个实施例包括一种方案,其 中约束计算的最小结果的情境值被提供给相关乘法器,以便选择最小能量 门控配置。
2.7运行时服务
在某些实施例中,CSA包括异质且分布式的架构,并且因此,运行时 服务实现方式将以并行且分布式的方式容适若干种PE。虽然CSA中的运 行时服务可能是关键的,但它们相对于用户级计算而言可能是不频繁的。 某些实现方式因此聚焦于将服务覆盖在硬件资源上。为了满足这些目标, CSA运行时服务可被投射为层次体系,例如其中每一层对应于一CSA网 络。在分片级,单个面向外部的控制器可接受或发送服务命令到与CSA分 片相关联的核心。分片级控制器可用来协调RAF处的区域控制器,例如利 用ACI网络。进而,区域控制器可协调某些夹层网络站(例如,网络数据 流端点电路)处的本地控制器。在最低级别,服务特定微协议可在本地网 络上执行,例如在通过夹层控制器控制的特殊模式期间执行。微协议可允 许每个PE(例如,按类型的PE类别)根据其自己的需求与运行时服务交 互。并行性从而在这个层次组织中是隐式的,并且最低级别的操作可同时 发生。这个并行性可使得能够在数百纳秒到几微秒之间配置CSA分片,这 例如取决于配置大小及其在存储器层次体系中的位置。CSA的实施例从而 利用了数据流图的属性来改善每个运行时服务的实现。一个关键观察是运 行时服务可能只需要保持数据流图的合法逻辑视图,这例如是可通过对数 据流操作器执行的某种排序产生的状态。服务一般可能不需要保证数据流 图的暂态视图,这例如是在特定时间点CSA中的数据流图的状态。这可允 许CSA以分布式、管线式且并行的方式进行大多数运行时服务,例如假定 服务被编排为保持数据流图的逻辑视图的话。本地配置微协议可以是覆盖 在本地网络上的基于封包的协议。配置目标可被组织到配置链中,配置链 例如是固定在微体系结构中的。架构(例如,PE)目标可被一次一个地配 置,例如每个目标利用单个额外寄存器以实现分布式协调。为了开始配置, 控制器可驱动带外信号,该带外信号将其邻域中的所有架构目标放置到未 配置的暂停状态中并且将本地网络中的复用器摆动到预定的构象。随着架 构(例如,PE)目标被配置,也就是说它们完全接收到其配置封包,它们 可设置其配置微协议寄存器,通知紧随其后的目标(例如,PE)其可着手 利用后续封包来进行配置。对于配置封包的大小没有限制,并且封包可具 有动态可变的长度。例如,配置常数操作对象的PE可具有长度被设定为 包括常数字段(例如,图3B-3C中的X和Y)的配置封包。图64图示了 根据本公开的实施例的具有多个处理元件(例如,PE6402、6404、6406、 6408)的加速器6400的运行中配置。一旦被配置了,PE就可在服从数据流约束的情况下执行。然而,涉及未配置的PE的通道可被微体系结构禁 用,例如防止任何未定义的操作发生。这些属性允许了CSA的实施例以分 布式方式初始化和执行,而没有任何集中化控制。根据未配置状态,配置 可完全并行地发生,例如可能在200纳秒那么短的时间内发生。然而,由 于CSA的实施例的分布式初始化,PE可早在整个架构被配置之前就变得活跃,例如向存储器发送请求。提取可按与配置几乎相同的方式进行。本 地网络可遵守一次从一个目标提取数据,以及用于实现分布式协调的状态 比特。CSA可将提取编排为非破坏性的,也就是说,在执行完成时,每个 可提取的目标已返回到其开始状态。在这个实现方式中,目标中的所有状 态可按类似扫描的方式被流转到关联到本地网络的出口寄存器。虽然通过 在寄存器传送级(register-transfer level,RTL)引入新的路径可实现就地 提取,或者使用现有的线路来以更低的开销提供相同的功能。与配置一样, 并行实现层次化提取。
图65图示了根据本公开的实施例的运行中管线式提取的快照6500。 在提取的一些用例中(例如检查点技术),只要维持了架构吞吐量,时延 就可以不是要担心的事。在这些情况下,可以按管线方式来编排提取。图 65中所示的这个布置允许了在狭窄的区域被禁用来提取的同时继续执行架 构的大部分。配置和提取可被协调并且组成来实现管线式情境切换。异常 可与配置和提取从定性上不同,因为它们不是在指定的时间发生,而是在 运行时期间的任何时点在架构中的任何地方出现。从而,在一个实施例中, 异常微协议可不被覆盖在运行时被用户程序占用的本地网络上,并且利用 其自己的网络。然而,从性质上来说,异常是罕见的并且对于时延和带宽 不敏感。从而,CSA的某些实施例利用了封包交换网络来将异常运载到本 地夹层站点,例如在这里它们被向服务层次体系上方转发(例如,如图80 中所示)。本地异常网络中的封包可以是极小的。在许多情况下,仅两到 八比特的PE标识(ID)就足够作为完整封包了,例如,因为随着封包穿 过异常服务层次体系,CSA可创建唯一异常标识符。这种方案可能是合乎 需要的,因为其也减小了在每个PE处产生异常的面积开销。
3.编译
将用高级别语言编写的程序编译到CSA上的能力对于业界采用可能是 必要的。这一节对于CSA的实施例给出了编译策略的高级别概览。首先是 CSA软件框架的提案,其例示了理想的生产质量工具链的期望属性。接下 来,论述了原型编译器框架。然后论述了“控制到数据流转换”,例如将 普通循序控制流代码转换成CSA数据流汇编代码。
3.1示例生产框架
图66图示了根据本公开的实施例的加速器的编译工具链6600。这个 工具链将高级别语言(例如,C、C++和Fortran)对于要加速的特定区域 编译成主机代码(LLVM)中间表示(intermediate representation,IR)的 组合。这个编译工具链的CSA特定部分将LLVMIR作为其输入,优化并 将此IR编译到CSA汇编中,例如在时延不敏感通道上添加适当的缓冲来 获得性能。其随后在硬件架构上放置并路由CSA汇编,并且配置PE和网 络以便执行。在一个实施例中,工具链以适时生产(just-in-time,JIT)的 形式支持CSA特定编译,包含了来自实际执行的潜在运行时反馈。该框架 的关键设计特性之一是对于CSA编译(LLVM)IR,而不是使用更高级别 语言作为输入。虽然用为CSA特别设计的高级别编译语言编写的程序可实 现最大性能和/或能量效率,但是因为转换现有代码库的困难,采用新的高 级别语言或编程框架在实践中可能是缓慢且受限的。使用(LLVM)IR作 为输入使得各种各样的现有程序能够可能在CSA上执行,例如不需要创建 新的语言或者大幅修改希望在CSA上运行的新语言的前端。
3.2原型编译器
图67图示了根据本公开的实施例的加速器的编译器6700。编译器 6700最初聚焦于通过(例如,Clang)前端对C和C++的预先编译。为了 编译(LLVM)IR,编译器利用三个主要阶段在LLVM内实现CSA后端目 标。首先,CSA后端对于循序单元将LLVM IR减低成目标特定机器指令, 这实现了与传统的RISC状控制流体系结构(例如,具有分支和程序计数 器)相结合的大多数CSA操作。工具链中的循序单元对于编译器和应用开 发者两者都可充当有用的辅助,因为其使能了程序从控制流(control flow, CF)到数据流(dataflow,DF)的递增式变换,例如一次将一段代码从控 制流转换到数据流并且验证程序正确性。循序单元也可提供一种用于处理 不适合于空间阵列中的代码的模型。接下来,编译器将这些控制流指令为 CSA转换成数据流操作器(例如,代码)。稍后在第3.3节中描述这个阶 段。然后,CSA后端可在数据流指令上运行其自己的优化道次(pass)。 最后,编译器可按CSA汇编格式转储指令。这个汇编格式被取作到后期工 具的输入,后期工具在实际CSA硬件上布局并路由数据流指令。
3.3控制到数据流转换
编译器的一个关键部分可实现在控制到数据流转换道次中,或者简称 为数据流转换道次。这个道次取入以控制流形式表示的函数,例如控制流 图(control-flow graph,CFG),其中有在虚拟寄存器上操作的循序机器 指令,并且将其转换成数据流函数,数据流函数在概念上是由时延不敏感 通道(latency-insensitive channel,LIC)连接的数据流操作(指令)的图。 这一节给出了对这个道次的高级别描述,描述了其在概念上如何应对存储 器操作、分支以及某些实施例中的循环。
直线代码
图68A图示了根据本公开的实施例的循序汇编代码6802。图68B图示 了根据本公开的实施例的图68A的循序汇编代码6802的数据流汇编代码 6804。图68C图示了根据本公开的实施例针对加速器的图68B的数据流汇 编代码6804的数据流图6806。
首先,考虑将直线循序代码转换成数据流的简单情况。数据流转换道 次可将循序代码的基本块,例如图68A中所示的代码,转换成图68B中所 示的CSA汇编代码。从概念上,图68B中的CSA汇编表示图68C中所示 的数据流图。在这个示例中,每个循序指令被转化成匹配的CSA汇 编。.lic语句(例如,对于数据)声明了与循序代码中的虚拟寄存器(例如,Rdata)相对应的时延不敏感通道。在实践中,到数据流转换道次的输入可 在编号的虚拟寄存器中。然而,为了清晰,本节使用了描述性寄存器名称。 注意在此实施例中在CSA体系结构中支持加载和存储操作,与只支持纯数 据流的体系结构相比允许了多得多的程序运行。由于输入到编译器的循序 代码是采取SSA(singlestatic assignment,单静态指派)形式的,所以对于 简单的基本块,控制到数据流道次可将每个虚拟寄存器定义转换成时延不敏感通道上的单个值的产生。SSA形式允许了对虚拟寄存器的单个定义的 多次使用,例如像Rdata2中那样。为了支持此模型,CSA汇编代码支持对 同一LIC的多次使用(例如,data2),其中模拟器隐式地创建LIC的必要 拷贝。循序代码和数据流代码之间的一个关键差别在于对存储器操作的对 待。图68A中的代码概念上是串行的,这意味着在addr和addr3地址重叠 的情况下addr3的load32(ld32)应当看起来发生在addr的st32之后。
分支
为了将具有多个基本块和条件语句的程序转换成数据流,编译器生成 特殊的数据流操作器来替换分支。更具体而言,编译器使用切换操作器来 引导原始CFG中的基本块的末尾处的传出数据,并且使用拾取操作器来在 基本块的开头处从适当的传入通道选择值。作为具体示例,考虑图69A- 69C中的代码和相应的数据流图,其基于如下的若干个输入附条件地计算 y的值:i、x和n。在计算分支条件测试之后,数据流代码使用切换操作器 (例如,参见图3B-3C)来在测试为0的情况下将通道x中的值引导到通 道xF,并且在测试为1的情况下引导到通道xT。类似地,拾取操作器(例 如,参见图3B-3C)被用于在测试为0的情况下将通道yF发送到y,或者 在测试为1的情况下将通道yT发送到y。在此示例中,结果是即使a的值 只被用在条件语句的真分支中,CSA也将包括切换操作器,其在测试为1 时将其引导到通道aT,并且在测试为0时消耗(吃掉)该值。这后一种情 况是通过将切换的假输出设置为%ign来表达的。简单地将通道直接连接到 真路径可能是不正确的,因为在执行实际走的是假路径的情况下,“a” 的这个值将被留在图中,对于函数的下一次执行导致a的不正确值。这个 示例突出了控制等价的属性,这是正确数据流转换的实施例中的一个关键 属性。
控制等价:考虑具有两个基本块A和B的单入口单出口控制流图G。 如果经过G的所有完整控制流路径访问A和B相同次数的话,则A和B是 控制等价的。
LIC替换:在控制流图G中,假定基本块A中的操作定义虚拟寄存器 x,并且基本块B中的操作使用x。于是仅当A和B是控制等价的情况下, 正确的控制到数据流变换才可利用时延不敏感通道来替换x。控制等价关 系将CFG的基本块划分成强控制依从区域。图69A图示了根据本公开的实 施例的C源代码6902。图69B图示了根据本公开的实施例的图69A的C源 代码6902的数据流汇编代码6904。图69C图示了根据本公开的实施例的 针对加速器的图69B的数据流汇编代码6904的数据流图6906。在图69A- 69C中的示例中,条件语句之前和之后的基本块与彼此是控制等价的,但 真和假路径中的基本块各自在其自己的控制依从区域中。用于将CFG转换 成数据流的一个正确算法是让编译器(1)***切换以对于在不控制等价 的基本块之间流动的任何值对执行频率中的不匹配进行补偿,以及(2) 在基本块的开头处***拾取以从到基本块的任何传入值中正确地选择。对 于这些拾取和切换生成适当的控制信号可以是数据流转换的关键部分。
循环
数据流转换中的CFG的另一个重要类别是用于单入口单出口循环的 CFG,这是在(LLVM)IR中生成的循环的一种常见形式。这些循环可以 是几乎非循环的,除了从循环的末尾返回到循环头部块的单个返回边缘以 外。数据流转换道次可使用与分支相同的高级别策略来转换循环,例如其 在循环的末尾处***切换以指导值离开循环(或者从循环出口离开或者沿 着返回边缘去到循环的开头),并且在循环的开头处***拾取以在进入循 环的初始值和来自返回边缘的值之间进行选择。图70A图示了根据本公开 的实施例的C源代码7002。图70B图示了根据本公开的实施例的图70A的 C源代码7002的数据流汇编代码7004。图70C图示了根据本公开的实施 例的针对加速器的图70B的数据流汇编代码7004的数据流图7006。图 70A-70C示出了将循环归纳变量i的值加起来的示例do-while循环的C和 CSA汇编代码,以及相应的数据流图。对于在概念上绕着该循环轮转的每 个变量(i和sum),此图具有控制这些值的流动的相应拾取/切换对。注 意此示例也使用了拾取/切换对来使n的值绕着该循环轮转,即使n是循环 不变的。n的这个重复使得能够将n的虚拟寄存器转换成LIC,因为其匹配 n在循环外部的概念定义和n在循环内部的一个或多个使用之间的执行频率。一般而言,对于正确的数据流转换,住进循环中的寄存器在该寄存器 被转换成LIC时对于循环体内部的每个迭代将被重复一次。类似地,在循 环内部被更新并住在循环外面的寄存器将被消耗,例如有单个最终值被发 送出循环。循环向数据流转换过程中引入了皱褶,即对于循环顶部的拾取 的控制和循环底部的切换是偏移的。例如,如果图69A中的循环执行三个 迭代和退出,则到拾取器的控制应当为0、1、1,而到切换器的控制应当 为1、1、0。这个控制是通过如下方式实现的:当函数在周期0(这在汇编 中是由指令.value 0和.avail0指定的)上开始时以初始额外0开始拾取器通 道,然后将输出切换器拷贝到拾取器中。注意,切换器中的最后的0将最 终0恢复到拾取器中,确保了数据流图的最终状态匹配其初始状态。
图71A图示了根据本公开的实施例的流程图7100。描绘的流程7100 包括:利用处理器的核心的解码器将指令解码成解码后指令7102;利用处 理器的核心的执行单元执行解码后指令以执行第一操作7104;接收包括多 个节点的数据流图的输入7106;将数据流图覆盖到处理器的多个处理元件 和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个 处理元件中的数据流操作器7108;并且利用互连网络和多个处理元件、通过相应传入操作对象集合到达多个处理元件的数据流操作器的每一者处来 执行数据流图的第二操作7110。
图71B图示了根据本公开的实施例的流程图7101。描绘的流程7101 包括:接收包括多个节点的数据流图的输入7103;并且将数据流图覆盖到 处理器的多个处理元件、多个处理元件之间的数据路径网络和多个处理元 件之间的流控制路径网络中,其中每个节点被表示为多个处理元件中的数 据流操作器7105。
在一个实施例中,核心将命令写入到存储器队列中并且CSA(例如, 多个处理元件)监视存储器队列并且在该命令被读取时开始执行。在一个 实施例中,核心执行程序的第一部分并且CSA(例如,多个处理元件)执 行程序的第二部分。在一个实施例中,核心在CSA执行其操作的同时进行 其他工作。
4.CSA优点
在某些实施例中,CSA体系结构和微体系结构相对于路线图处理器体 系结构和FPGA提供了深远的能量、性能和可使用性优点。在这一节中, 将这些体系结构与CSA的实施例相比较并且突出CSA相对于每一者在加 速并行数据流图方面的优越性。
4.1处理器
图72图示了根据本公开的实施例的吞吐量对每操作能量图7200。如 图72中所示,小核心一般比大核心更能量高效,并且在一些工作负荷中, 这个优点可通过更高的核心计数来转化成绝对性能。CSA微体系结构循着 这些观察得出其结论,并且去除了与冯·诺伊曼体系结构相关联的(例如, 大部分)耗能多的控制结构,包括大多数指令侧微体系结构。通过去除这 些开销并且实现简单的单操作PE,CSA的实施例获得了密集、高效的空间 阵列。与通常颇为串行的小核心不同,CSA可例如经由电路交换本地网络 将其PE聚集在一起,以形成显式并行的聚合数据流图。结果不仅是并行 应用中的性能,而且也是串行应用中的性能。与就面积和能量而言可为性 能支付昂贵代价的核心不同,CSA在其原生执行模型中已经是并行的。在 某些实施例中,CSA既不要求投机来增大性能,也不需要从循序程序表示中反复地重提取并行性,从而避免了冯·诺伊曼体系结构中的两个主要能量 赋税。CSA的实施例中的大多数结构是分布式的、小的且能量高效的,这 与存在于核心中的集中式、笨重的、耗能多的结构不同。考虑CSA中的寄 存器的情况:每个PE可具有几个(例如,10个或更少)存储寄存器。个 体来看,这些寄存器可比传统的寄存器文件更高效。综合来看,这些寄存 器可提供大的、架构内寄存器文件的效果。结果,CSA的实施例避免了经 典体系结构所招致的大部分堆栈溢出和填满,同时对每状态访问使用少得 多的能量。当然,应用仍可访问存储器。在CSA的实施例中,存储器访问 请求和响应在体系结构上被解除耦合,使得工作负荷在每单位面积和能量 中能够支持多得多的未决存储器访问。这个属性对于受缓存约束的工作负 荷产生高得多的性能并且减小了在受存储器约束的工作负荷中使主存储器饱和所需要的面积和能量。CSA的实施例暴露了非冯·诺伊曼体系结构所特 有的能量效率的新形式。在(例如,大多数)PE处执行单个操作(例如, 指令)的一个后果是降低的操作对象熵。在递增操作的情况下,每个执行 可导致少量的电路级翻转和很少的能量消耗,这是在第5.2节中详细考查 的情况。与之不同,冯·诺伊曼体系结构是复用的,导致大量的比特转变。 CSA的实施例的异步风格也使得微体系结构优化成为可能,例如第2.6节 中描述的浮点优化,这在严密调度的核心管线中是难以实现的。因为PE是 相对简单的并且其在特定数据流图中的行为是静态已知的,所以与更粗的 体系结构中相比时钟门控和功率门控技术可被更有效地应用。CSA PE的 实施例的图执行风格、小尺寸和可延展性和网络一起使得许多种类的并行 性的表达成为可能:指令、数据、管线、向量、存储器、线程和任务并行 性全都可被实现。例如,在CSA的实施例中,一个应用可使用算术单元来 提供高程度的地址带宽,而另一应用可将同样的这些单元用于计算。在许 多情况下,多个种类的并行性可被组合来实现甚至更高的性能。许多关键 HPC操作可能既是复制的也是管线式的,导致了若干个量级的性能增益。 与之不同,冯·诺伊曼风格核心通常针对由架构师仔细选择的一种风格的并 行性进行优化,导致未能捕捉所有重要应用内核。正是因为CSA的实施例 暴露并且促进许多形式的并行性,其并不强制特定形式的并行性或者更坏 情况下特定的子例程存在于应用中以便受益于CSA。包括单流应用在内的 许多应用可从CSA的实施例获得性能和能量益处,例如即使当在没有修改 的情况下被编译时。这逆转了要求大量编程者精力来在单流应用中获得实 质性性能增益的长期趋势。实际上,在一些应用中,与被折磨来针对以向 量指令为目标的其复杂的、同时代的表亲相比,CSA的实施例从功能上等 同的、但不那么“现代”的代码中获得更多性能。
4.2CSA实施例和FGPA的比较
选择数据流操作器作为CSA的实施例的基本体系结构将这些CSA与 FGPA相区分,并且具体地尤其CSA对于来自传统编程语言的HPC数据流 图是一种优越的加速器。数据流操作器根本上是异步的。这使得CSA的实 施例不仅能够在微体系结构的实现中具有很大自由,而且其也使得它们能 够简单且简洁地容适抽象的体系结构概念。例如,CSA的实施例利用简单 的加载-存储接口天然地容适许多存储器微体系结构,这些存储器微体系结 构本质上是异步的。我们只需要考查FPGA DRAM控制器来明白复杂度的 差别。CSA的实施例还利用了异步性来提供像配置和提取这样的更快且更 功能全面的运行时服务,它们据信比FPGA快四到六个量级。通过缩窄体 系结构接口,CSA的实施例在微体系结构级提供了对大多数定时路径的控 制。这允许了CSA的实施例与FPGA中提供的更一般控制机制相比以高得多的频率操作。类似地,对于FPGA可能是体系结构上根本的时钟和重置, 在CSA中是微体系结构的,例如消除了将它们作为可编程实体来支持的需 要。数据流操作器在很大程度上可以是粗颗粒的。通过只在粗糙操作器中 进行处理,CSA的实施例既改善了架构的密度也改善了其能量消耗:CSA 直接执行操作,而不是用查找表来模拟它们。粗糙性的第二个后果是布局 及路由问题的简化。CSA数据流图比FPGA网表小很多个量级并且布局及 路由时间在CSA的实施例中相应地减小了。CSA的实施例和FPGA之间的 显著差别使得CSA作为加速器是优越的,例如对于来自于传统编程语言的 数据流图而言。
5.评估
CSA是一种新颖的计算机体系结构,有潜力提供相对于路线图处理器 的巨大性能和能量优点。考虑计算用于跨阵列游走的单个跨步地址的情况。 这个情况在HPC应用中可能是重要的,HPC应用例如花费大量整数工作来 计算地址偏移量。在地址计算中,尤其是跨步地址计算中,一个参量是恒 定的并且其他的对于每个计算只略微变化。从而,大多数情况下每个周期 只有少量比特翻转。事实上,可以显示,利用与第2.6节中描述的浮点进 位比特上的限制类似的推导,即对于步幅计算平均起来每个计算有少于两 个比特的输入翻转,相对于随机翻转分布将能量减小了50%。在使用时间 复用方案的情况下,可能会失去很多这种能量节省。在一个实施例中, CSA相对于核心实现大约3倍能量效率,同时递送8倍性能增益。CSA的 实施例实现的并行性增益可带来减少的程序运行时间,产生泄漏能量的成 比例的大幅减小。在PE级,CSA的实施例是极为能量高效的。CSA的第 二个重要问题是CSA在分片级是否消耗合理量的能量。由于CSA的实施 例能够在每个周期运用架构中的每个浮点PE,所以其对于能量和功率消耗 充当合理的上限,例如使得大多数能量进入到浮点乘法和加法中。
6.更多CSA细节
这一节论述了配置和异常处理的更多细节。
6.1用于配置CSA的微体系结构
这一节公开了如何配置CSA(例如,架构)、如何迅速地实现此配置 以及如何最小化配置的资源开销的示例。迅速地配置架构在加速更大算法 的小部分以及因此拓宽CSA的可应用性方面可具有超群的重要性。本节进 一步公开了允许CSA的实施例被编程以不同长度的配置的特征。
CSA(例如,架构)的实施例与传统核心的不同之处可在于其利用这 样的配置步骤:其中架构的一些(例如,大的)部分在程序执行之前被加 载以程序配置。静态配置的优点可以是非常少的能量在运行时被花费在配 置上,例如不同于几乎每个周期都花费能量来取得配置信息(指令)的循 序核心。配置的先前缺点是它是具有可能很大时延的粗颗粒步骤,这由于 情境切换的成本而在架构中可加速的程序的大小上施加了下限。本公开描述了一种可缩放的微体系结构,用于以分布式方式迅速地配置空间阵列, 其例如避免了先前的缺点。
如上所述,CSA可包括由PE间网络连接的轻量级处理元件。随后通 过配置可配置架构元素(configurable fabric element,CFE),例如PE和互 连(架构)网络,被视为控制-数据流图的程序被映射到体系结构上。一般 而言,PE可被配置为数据流操作器,并且一旦所有的输入操作对象到达PE处,一些操作就发生,并且结果被转发到另一个或多个PE以便消耗或 输出。PE可通过专用的虚拟电路通信,这些专用虚拟电路是通过静态配置 电路交换通信网络来形成的。这些虚拟电路可以是流控制的并且完全背压 式的,例如使得如果源没有数据或者目的地已满则PE将会暂缓。在运行 时,数据可流经实现映射的算法的PE。例如,数据可从存储器中流入、经 过架构然后退出到存储器。这种空间体系结构相对于传统的多核处理器可 实现显著的性能效率:PE形式的计算与更大的核心相比可以更简单并且更 众多,并且通信可以是直接的,与存储器***的扩展不同。
CSA的实施例可不利用(例如,软件控制的)封包交换,例如要求大 量的软件辅助来实现的封包交换,这会减慢配置。CSA的实施例包括网络 中的带外信令(例如,只有2-3比特,取决于支持的特征集合)和固定的 配置拓扑来避免对大量软件支持的需要。
CSA的实施例和FPGA中使用的方案之间的一个关键差别在于CSA方 案可使用宽数据字、是分布式的、并且包括机制来直接从存储器取得程序 数据。CSA的实施例可不利用为了面积效率好处的JTAG风格单比特通信, 例如因为它们可要求若干毫秒来完全配置大的FPGA架构。
CSA的实施例包括分布式配置协议和微体系结构来支持此协议。最初, 配置状态可存在于存储器中。多个(例如,分布式)本地配置控制器(框) (local configurationcontroller,LCC)可将整个程序的一些部分流入到其 空间架构的本地区域中,例如利用一小组控制信号和架构提供的网络的组 合来流入。状态元素可在每个CFE处被用于形成配置链,例如允许了个体 CFE在没有全局寻址的情况下自编程。
CSA的实施例包括对于配置链的形成的特定硬件支持,例如不是以增 大配置时间为代价由软件动态地建立这些链路。CSA的实施例不是纯封包 交换的,并且确实包括额外的带外控制线(例如,控制不是通过数据路径 被发送的,该数据路径要求额外的周期来选通此信息和重串行化此信息)。 CSA的实施例通过固定配置排序并且通过提供显式的带外控制来减小配置 时延(例如,减小至少二倍),同时不会显著地增大网络复杂度。
CSA的实施例不使用配置的串行机制,其中数据被利用类似JTAG的 协议逐比特地流入到架构中。CSA的实施例利用粗颗粒的架构方案。在某 些实施例中,向面向64或32比特的CSA架构添加几个控制线或状态元素 相对于将同样的这些控制机制添加到4或6比特架构具有更低的成本。
图73图示了根据本公开的实施例的包括处理元件(PE)的阵列和本 地配置控制器(7302、7306)的加速器分片7300。每个PE、每个网络控 制器(例如,网络数据流端点电路)和每个交换机可以是可配置架构元素 (CFE),它们例如被CSA体系结构的实施例所配置(例如,编程)。
CSA的实施例包括提供异质空间架构的高效、分布式、低时延配置的 硬件。这可根据四个技术来实现。首先,利用一种硬件实体,本地配置控 制器(LCC),例如如图73-图75中所示。LCC可从(例如,虚拟)存储 器取得配置信息的流。第二,可包括配置数据路径,其例如像PE架构的 原生宽度那样宽并且可被覆盖在PE架构之上。第三,新的控制信号可被 接收到PE架构中,这些控制信号编排配置过程。第四,状态元素可位于 每个可配置端点处(例如,在寄存器中),其跟踪相邻CFE的状态,允许 每个CFE在没有额外控制信号的情况下明确地自配置。这四个微体系结构 特征可允许CSA配置其CFE的链路。为了获得低配置时延,可通过构建 许多LCC和CFE链来划分配置。在配置时,这些可独立地操作以并行地 加载架构,例如大幅减小时延。作为这些组合的结果,利用CSA体系结构 的实施例配置的架构可被完全配置(例如,在数百纳秒中)。在下文中, 公开了CSA配置网络的实施例的各种组件的详细操作。
图74A-74C图示了根据本公开的实施例的本地配置控制器7402配置数 据路径网络。描绘的网络包括多个复用器(例如,复用器7406、7408、 7410),这些复用器可(例如,经由其各自的控制信号)被配置为将一个 或多个数据路径(例如,来自PE)连接在一起。图74A图示了对于一些先 前的操作或程序配置(例如,设置)的网络7400(例如,架构)。图74B 图示了本地配置控制器7402(例如,包括网络接口电路7404来发送和/或 接收信号)选通配置信号并且本地网络被设置到默认配置(例如,如图所 示),该默认配置允许LCC发送配置数据到所有可配置架构元素(CFE), 例如复用器。图74C图示了LCC在网络上选通配置信息,以预定的(例 如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时,它们 可立即开始操作。在另外的实施例中,CFE等待开始操作,直到架构已被 完全配置为止(例如,由每个本地配置控制器的配置终止器(例如,图76 中的配置终止器7604和配置终止器7608来发信号通知)。在一个实施例 中,LCC通过发送特殊消息,或者驱动信号,来获得对网络架构的控制。 其随后向架构中的CFE选通配置数据(例如,在许多周期的时段中)。在 这些图中,复用器网络与某些图(例如,图6)中所示的“交换机”类似。
本地配置控制器
图75图示了根据本公开的实施例的(例如,本地)配置控制器7502。 本地配置控制器(LCC)可以是硬件实体:其负责加载架构程序的本地部 分(例如,在分片的子集中或者其他),解读这些程序部分,并且随后通 过驱动各种配置线上的适当协议来将这些程序部分加载到架构中。在这个 身份上,LCC可以是专用的循序微控制器。
LCC操作可在其接收到指向代码段的指针时开始。取决于LCB微体系 结构,这个指针(例如,存储在指针寄存器7506中)可通过网络(例如, 来自CSA(架构)本身内)或者通过对LCC的存储器***访问到来。当其 接收到这种指针时,LCC可选地从它的那部分架构中排空相关状态以用于 情境存储,然后着手立即重配置它所负责的那部分架构。LCC加载的程序 可以是用于架构的配置数据和用于LCC的控制命令的组合,这些控制命令 例如是轻微编码的。随着LCC在程序部分中流动,其可将程序解读为命令 流并且执行适当的编码动作以配置(例如,加载)架构。
在图73中示出LCC的两个不同微体系结构,例如其中一者或两者被 利用在CSA中。第一个将LCC 7302放置在存储器接口处。在此情况下, LCC可向存储器***作出直接请求来加载数据。在第二情况中,LCC 7306 被放置在存储器网络上,在其中它只可间接地向存储器作出请求。在两种 情况下,LCB的逻辑操作都不变。在一个实施例中,LCC被告知要加载的 程序,例如由一组(例如,OS可见的)控制状态寄存器来告知,这些寄存 器将用于将新程序指针等等告知个体LCC。
额外带外控制通道(例如,导线)
在某些实施例中,配置依赖于2-8个额外的带外控制通道来改善配置 速度,如下面所定义。例如,配置控制器7502可包括以下控制通道, CFG_START控制通道7508、CFG_VALID控制通道7510和CFG_DONE 控制通道7512,其中每一者的示例在下面的表格2中论述。表格2:控制 通道
Figure BDA0002512929450001231
一般而言,控制信息的处理可被留给特定CFE的实现者。例如,可选 择功能CFE可具有利用现有数据路径来设置寄存器的配设,而固定功能 CFE可简单地设置配置寄存器。
由于在对一大组CFE编程时的长导线延迟,CFG_VALID信号可被视 为CFE组件的时钟/锁存使能。由于此信号被用作时钟,所以在一个实施例 中线路的占空比最多为50%。结果,配置吞吐量大约减半。可选地,可以 添加第二CFG_VALID信号来使得连续编程成为可能。
在一个实施例中,只有CFG_START是严格地在独立的耦合(例如, 导线)上传达的,例如,CFG_VALID和CFG_DONE可被覆盖在其他网络 耦合之上。
网络资源的再利用
为了降低配置的开销,CSA的某些实施例利用现有的网络基础设施来 传达配置数据。LCC可利用芯片级存储器层次体系和架构级通信网络两者 来将数据从存储移动到架构中。结果,在CSA的某些实施例中,配置基础 设施向整体架构面积和功率添加不多于2%。
CSA的某些实施例中的网络资源的再利用可使得网络对于配置机制具 有一些硬件支持。CSA的实施例的电路交换网络使得LCC在 “CFG_START”信号被断言时以特定方式设置其复用器以便配置。封包 交换网络不要求扩展,虽然LCC端点(例如,配置终止器)在封包交换网 络中使用特定的地址。网络再利用是可选的,并且一些实施例可发现专用 的配置总线更方便。
每CFE状态
每个CFE可维护一比特,表示其是否已被配置(例如参见图64)。这 个比特可在配置开始信号被驱动时被解除断言,然后一旦特定的CFE已被 配置就可被断言。在一个配置协议中,CFE被布置为形成链路,其中CFE 配置状态比特确定链路的拓扑结构。CFE可读取紧邻的CFE的配置状态比 特。如果这个邻近CFE已被配置并且当前CFE未被配置,则CFE可确定任何当前的配置数据是针对当前CFE的。当“CFG_DONE”信号被断言时, CFE可设置其配置比特,例如使得上游CFE能够配置。作为配置过程的基 本情况,断言其已被配置的配置终止器(例如,图73中的针对LCC 7302 的配置终止器7304或者针对LCC 7306的配置终止器7308)可被包括在链 路的末尾处。
在CFE内部,这个比特可用于驱动流控制准备就绪信号。例如,当配 置比特被解除断言时,网络控制信号可自动被钳位到防止数据流动的值, 同时在PE内没有操作或其他动作将被调度。
应对高延迟配置路径
LCC的一个实施例可在长距离上驱动信号,例如经过许多复用器并且 具有许多负载。从而,信号要在短时钟周期内到达遥远的CFE可能是困难 的。在某些实施例中,配置信号是按主(例如,CSA)时钟频率的某个分 频(例如,某个分数)的以确保配置时的数字定时纪律。时钟分频可被用 在带外信令协议中,并且不要求对主时钟树的任何修改。
在配置期间确保一致架构行为
由于某些配置方案是分布式的并且由于程序和存储器效果而具有非确 定性定时,所以架构的不同部分可在不同的时间被配置。结果,CSA的某 些实施例提供了机制来防止配置的和未配置的CFE之间的不一致操作。一 般而言,一致性被视为对CFE要求的并且由CFE自身维持的一种属性,例 如利用内部CFE状态来维持。例如,当CFE处于未配置状态中时,其可声 称其输入缓冲器已满,以及声称其输出是无效的。当已配置时,这些值将 被设置到缓冲器的真实状态。由于足够的架构出自配置,所以这些技术可 允许它开始操作。这具有进一步减小情境切换时延的效果,例如如果长时 延存储器请求被提早发出的话。
可变宽度配置
不同的CFE可具有不同的配置字宽度。对于较小的CFE配置字,实现 者可通过公平地在网络线上指派CFE配置负载来平衡延迟。为了平衡网络 线上的负载,一个选项是将配置比特指派到网络线的不同部分以限制任何 一条线上的净延迟。通过利用串行化/去串行化技术可处理宽数据字。这些 决策可基于每个架构来做出以优化特定CSA(例如,架构)的行为。网络 控制器(例如,网络控制器7310和网络控制器7312中的一个或多个)可 与CSA(例如,架构)的每个域(例如,子集)通信,以例如向一个或多 个LCC发送配置信息。网络控制器可以是通信网络的一部分(例如,与电 路交换网络分离)。网络控制器可包括网络数据流端点电路。
6.2用于CSA的低时延配置和用于为CSA适时取得配置数据的微体系结构
CSA的实施例可以是加速用户应用的能量高效且高性能的手段。当考 虑程序(例如,其数据流图)是否可被加速器成功加速时,配置加速器的 时间和运行程序的时间都可被考虑。如果运行时间较短,则配置时间可在 确定成功加速中起到很大作用。因此,为了最大化可加速程序的域,在一 些实施例中使配置时间尽可能短。一个或多个配置缓存可被包括在CSA中, 例如使得高带宽、低时延存储使迅速重配置成为可能。接下来是对配置缓 存的几个实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可选地访问 配置缓存以获得新的配置信息。配置缓存可作为传统的基于地址的缓存来 操作,或者在OS管理模式中操作,在此模式中配置被存储在本地地址空 间中并且是通过对该地址空间的引用来寻址的。如果配置状态位于缓存中, 则在某些实施例中不会作出对后备存储的请求。在某些实施例中,这个配 置缓存与存储器层次体系中的任何(例如,更低级别)共享缓存是分离的。
图76图示了根据本公开的实施例的包括处理元件的阵列、配置缓存(例如,7618或7620)和本地配置控制器(例如,7602或7606)的加速 器分片7600。在一个实施例中,配置缓存7614与本地配置控制器7602是 共位的。在一个实施例中,配置缓存7618位于本地配置控制器7606的配 置域中,例如其中第一域结束于配置终止器7604处并且第二域结束于配置终止器7608处。配置缓存可允许本地配置控制器可在配置期间参考配置缓 存,例如以期与参考存储器相比以更低的时延获得配置状态。配置缓存 (存储)或者可以是专用的,或者可作为架构内存储元件(例如本地缓存 7616)的配置模式被访问。
缓存模式
需求缓存——在此模式中,配置缓存作为真实缓存操作。配置控制器 发出基于地址的请求,这些请求被对照缓存中的标签来进行检查。错失被 加载到缓存中,然后可在未来的重编程期间被重引用。
架构内存储(便笺)缓存——在此模式中,配置缓存接收对其自己的 小地址空间中的配置序列的引用,而不是主机的更大地址空间。这可改善 存储器密度,因为用于存储标签的缓存部分可改为用于存储配置。
在某些实施例中,配置缓存可以让配置数据被预加载到其中,例如按 外部方向或者内部方向。这可允许加载程序的时延的减小。这里的某些实 施例提供了到配置缓存的接口,例如即使某个配置已经在架构中运行该接 口也准许将新的配置状态加载到缓存中。此加载的发起可发生自内部或者 外部来源。预加载机制的实施例还通过从配置路径中去除缓存加载的时延 来减小时延。
预取模式
显式预取——用新的命令ConfigurationCachePrefetch来增强配置路径。 取代对架构编程,此命令简单地使得将相关的程序配置加载到配置缓存中, 而不对架构编程。由于此机制捎带在现有的配置基础设施上,所以其既被 暴露于架构内也被暴露于外部,例如暴露给核心和访问存储器空间的其他 实体。
隐式预取——全局配置控制器可维护预取预测器,并且使用这个来发 起到配置缓存的显式预取,例如以自动化方式。
6.3用于响应于异常对CSA迅速重配置的硬件
CSA(例如,空间架构)的某些实施例包括大量的指令和配置状态, 它们例如在CSA的操作期间很大程度上是静态的。从而,配置状态可能对 于软差错是脆弱的。这些软差错的迅速且无差错的恢复对于空间***的长 期可靠性和性能可能是关键的。
这里的某些实施例提供了迅速配置恢复环路,例如其中配置差错被检 测到并且架构的一些部分被立即重配置。这里的某些实施例包括配置控制 器,例如具有可靠性、可用性和可服务性(reliability,availability,and serviceability,RAS)重编程特征。CSA的某些实施例包括用于空间架构内 的高速配置、差错报告和奇偶校验的电路。利用这三个特征的组合,并且 可选地,利用配置缓存,配置/异常处理电路可从配置中的软差错恢复。当 被检测到时,软差错可被传达到配置缓存,配置缓存发起架构(例如,架 构的该部分)的立即重配置。某些实施例提供了专用重配置电路,其例如 比在架构中将会间接实现的任何解决方案更快。在某些实施例中,共位的 异常和配置电路合作来在配置差错检测时重加载架构。
图77图示了根据本公开的实施例的包括处理元件的阵列和具有重配置 电路(7702、7706)的配置和异常处理控制器(7718、7722)的加速器分 片7700。在一个实施例中,当PE通过其本地RAS特征检测到配置差错时, 其通过其异常生成器向配置和异常处理控制器(例如,7702或7706)发送 (例如,配置差错或重配置差错)消息。在接收到此消息时,配置和异常 处理控制器(例如,7702或7706)发起共位的重配置电路(例如,分别是 7718或7722)来重加载配置状态。配置微体系结构继续进行并且重加载 (例如,仅)配置状态,并且在某些实施例中,仅为报告RAS差错的PE 重加载配置状态。在重配置完成时,架构可重新开始正常操作。为了减小 时延,被配置和异常处理控制器(例如,7702或7706)使用的配置状态可 源发自配置缓存。作为配置或重配置过程的基本情况,断言其已被配置 (或重配置)的配置终止器(例如,图77中的配置和异常处理控制器7702 的配置终止器7704或者配置和异常处理控制器7706的配置终止器7708) 可被包括在链路的末尾处。
图78图示了根据本公开的实施例的重配置电路7818。重配置电路 7818包括配置状态寄存器7820来存储配置状态(或者指向其的指针)。
用于CSA的架构发起重配置的硬件
针对CSA(例如,空间阵列)的应用的一些部分可能被运行得不频繁 或者可能与程序的其他部分是相互排斥的。为了节省面积、改善性能和/或 降低功率,在程序数据流图的若干个不同部分之间对空间架构的一些部分 进行时间复用,可能是有用的。这里的某些实施例包括接口,通过该接口, CSA(例如,经由空间程序)可请求架构的该部分被重编程。这可使得 CSA能够根据动态控制流动态地改变其自身。这里的某些实施例允许了架 构发起的重配置(例如,重编程)。这里的某些实施例提供了一组接口来 从架构内触发配置。在一些实施例中,PE基于程序数据流图中的一些决策 来发出重配置请求。此请求可行经网络到我们的新配置接口,在这里它触 发重配置。一旦重配置完成,就可以可选地返回消息,来通知该完成。 CSA的某些实施例从而提供了程序(例如,数据流图)指导的重配置能力。
图79图示了根据本公开的实施例的包括处理元件的阵列和具有重配置 电路7918的配置和异常处理控制器7906的加速器分片7900。这里,架构 的一部分发出对(重)配置的请求到,例如配置和异常处理控制器7906和 /或重配置电路7918的配置域。域(重)配置自身,并且当该请求已得到 满足时,配置和异常处理控制器7906和/或重配置电路7918向架构发出响 应,以通知架构(重)配置完成。在一个实施例中,配置和异常处理控制 器7906和/或重配置电路7918在(重)配置正在进行的时间期间禁用通信, 因此程序在操作期间没有一致性问题。
配置模式
按地址配置——在此模式中,架构作出从特定地址加载配置数据的直 接请求。
按引用配置——在此模式中,架构例如按预定的引用ID作出加载新配 置的请求。这可简化对要加载的代码的确定,因为代码的位置已被抽象。
配置多个域
CSA可包括更高级别的配置控制器来支持多播机制以(例如,经由用 虚线框指示的网络)将配置请求播送到多个(例如,分布式或本地)配置 控制器。这可使得单个配置请求能够被复制在架构的更大部分上,以例如 触发广泛重配置。
6.5异常聚合器
CSA的某些实施例也可经历异常(例如,异常状况),例如浮点下溢。 当这些状况发生时,可调用特殊的处理程序来纠正程序或者终止它。这里 的某些实施例提供了用于处理空间架构中的异常的***级体系结构。由于 某些空间架构强调面积效率,所以这里的实施例在提供一般异常机制的同 时最小化了总面积。这里的某些实施例提供了通知在CSA(例如,空间阵 列)内发生的异常状况的低面积手段。这里的某些实施例提供了接口和信 令协议来传达这种异常,以及PE级异常语义。这里的某些实施例是专用 的异常处理能力,并且例如不要求由编程者进行的显式处理。
CSA异常体系结构的一个实施例由四个部分构成,例如在图80-图81 中示出。这些部分可被布置在层次体系中,其中异常从生产者流出,最终 到达分片级异常聚合器(例如,处理程序)处,其可与例如核心的异常服 务者会合。这四个部分可以是:
1.PE异常生成器
2.本地异常网络
3.夹层异常聚合器
4.分片级异常聚合器
图80图示了根据本公开的实施例的包括处理元件的阵列和耦合到分片 级异常聚合器8004的夹层异常聚合器8002的加速器分片8000。图81图示 了根据本公开的实施例的具有异常生成器8144的处理元件8100。
PE异常生成器
处理元件8100可例如包括来自图10的处理元件1000,其中类似的号 码是类似的组件,例如本地网络1002和本地网络8102。附加网络8113 (例如,通道)可以是异常网络。PE可实现到异常网络(例如,图81上 的异常网络8113(例如通道))的接口。例如,图81示出了这种接口的 微体系结构,其中PE具有异常生成器8144(例如,发起异常有限状态机(finitestate machine,FSM)8140来将异常封包(例如BOXID 8142)选 通输出到异常网络。BOXID8142可以是本地异常网络内的异常产生实体 (例如,PE或框)的唯一标识符。当检测到异常时,异常生成器8144感 测异常网络并且在发现该网络空闲时选通输出BOXID。异常可由许多状况 引起,例如但不限于算术差错、对状态的ECC检查失败,等等。然而,也 可能是引入了异常数据流操作,存着支持像断点这样的构造的念头。
异常的发起可以显式地由编程者提供的指令的执行而发生,或者在检 测到硬差错状况(例如,浮点下溢)时隐式地发生。在异常时,PE 8100 可进入等待状态,在该状态中它等待被例如在PE 8100外部的最终异常处 理程序所服务。异常封包的内容取决于特定PE的实现方式,如下所述。
本地异常网络
(例如,本地)异常网络将异常封包从PE 8100引导到夹层异常网络。 异常网络(例如,8113)可以是例如对于PE的子集由例如组织成环状或 树状拓扑的(例如单条)控制线和一条或多条数据线构成的串行封包交换 网络。每个PE可在(例如,本地)异常网络中具有(例如,环状)站点, 例如在这里它可仲裁向异常网络中注入消息。
需要注入异常封包的PE端口可观察其本地异常网络出口点。如果控 制信号指示繁忙,则PE将等待开始注入其封包。如果网络不忙,也就是 说,下游站点没有封包要转发,则PE将着手开始注入。
网络封包可具有可变或固定的长度。每个封包可开始于标识封包的源 PE的固定长度头部字段。这之后可以是可变数目的PE特定字段,包含例 如包括差错码、数据值或其他有用状态信息在内的信息。
夹层异常聚合器
夹层异常聚合器8004负责将本地异常网络组装成更大的封包并且将它 们发送到分片级异常聚合器8002。夹层异常聚合器8004可以将其自己的 唯一ID附加在本地异常封包前面,以例如确保异常消息是无歧义的。夹层 异常聚合器8004可接口连接到夹层网络中的特殊的仅限异常虚拟通道,例 如确保异常的无死锁。
夹层异常聚合器8004也可能够直接服务某些类别的异常。例如,可利 用夹层网络站点本地的缓存在夹层网络之外为来自架构的配置请求服务。
分片级异常聚合器
异常***的最终阶段是分片级异常聚合器8002。分片级异常聚合器 8002负责从各种夹层级异常聚合器(例如,8004)收集异常并且将它们转 发到适当的服务硬件(例如,核心)。这样一来,分片级异常聚合器8002 可包括一些内部表格和控制器来将特定的消息与处理程序例程相关联。这 些表格可被直接索引或者用小的状态机来索引以便引导特定的异常。
与夹层异常聚合器一样,分片级异常聚合器可服务一些异常请求。例 如,其可响应于特定的异常而发起PE架构的大部分的重编程。
6.6提取控制器
CSA的某些实施例包括(一个或多个)提取控制器来从架构提取数据。 下面论述了如何迅速地实现此提取以及如何最小化数据提取的资源开销的 实施例。数据提取可被利用于诸如异常处理和情境切换这样的关键任务。 这里的某些实施例通过引入允许具有可变和动态可变量的状态的可提取架 构元素(extractable fabric element,EFE)(例如,PE、网络控制器和/或 交换机)被提取的特征来从异质空间架构提取数据。
CSA的实施例包括分布式数据提取协议和微体系结构来支持此协议。 CSA的某些实施例包括多个本地提取控制器(local extraction controller, LEC),它们利用一组(例如,一小组)控制信号和架构提供网络的组合 来将程序数据流出空间架构的其本地区域。状态元素可在每个可提取架构 元素(EFE)处被用于形成提取链,例如允许了个体EFE在没有全局寻址 的情况下自提取。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例例如对 于提取链的形成包括特定的硬件支持(例如,提取控制器),并且不依赖 于软件来动态建立这些链路,例如以增大提取时间为代价。CSA的实施例 不是纯封包交换的,并且确实包括额外的带外控制线(例如,控制不是通 过数据路径被发送的,要求额外的周期来选通和重串行化此信息)。CSA 的实施例通过固定提取排序并且通过提供显式的带外控制来减小提取时延 (例如,减小至少二倍),同时不会显著地增大网络复杂度。
CSA的实施例对于数据提取不使用串行机制,其中数据被利用类似 JTAG的协议逐比特地从架构流出。CSA的实施例利用粗颗粒的架构方案。 在某些实施例中,向面向64或32比特的CSA架构添加几个控制线或状态 元素相对于将同样的这些控制机制添加到4或6比特架构具有更低的成本。
图82图示了根据本公开的实施例的包括处理元素的阵列和本地提取控 制器(8202、8206)的加速器分片8200。每个PE、每个网络控制器和每 个交换机可以是可提取架构元素(EFE),它们例如被CSA体系结构的实 施例所配置(例如,编程)。
CSA的实施例包括提供从异质空间架构的高效、分布式、低时延提取 的硬件。这可根据四个技术来实现。首先,利用一种硬件实体,本地提取 控制器(LEC),例如如图82-图84中所示。LEC可接受来自主机(例如, 处理器核心)的命令,例如从空间阵列提取数据的流,并且将此数据写回 到虚拟存储器中以供主机检查。第二,可包括提取数据路径,其例如像PE 架构的原生宽度那样宽并且可被覆盖在PE架构之上。第三,新的控制信 号可被接收到PE架构中,这些控制信号编排提取过程。第四,状态元素 可位于每个可配置端点处(例如,在寄存器中),其跟踪相邻EFE的状态, 允许每个EFE在没有额外控制信号的情况下明确地导出其状态。这四个微 体系结构特征可允许CSA从EFE的链路提取数据。为了获得低数据提取时 延,某些实施例可通过在架构中包括多个(例如,许多)LEC和EFE链来 划分提取问题。在提取时,这些链路可独立地操作以并行地从架构中提取 数据,例如大幅减小时延。作为这些组合的结果,CSA可执行完整的状态 转储(例如,在数百纳秒内)。
图83A-83C图示了根据本公开的实施例的本地提取控制器8302配置数 据路径网络。描绘的网络包括多个复用器(例如,复用器8306、8308、 8310),这些复用器可(例如,经由其各自的控制信号)被配置为将一个 或多个数据路径(例如,来自PE)连接在一起。图83A图示了对于一些先 前的操作或程序配置(例如,设置)的网络8300(例如,架构)。图83B 图示了本地提取控制器8302(例如,包括网络接口电路8304来发送和/或 接收信号)选通提取信号并且由该LEC控制的所有PE进入提取模式中。 提取链中的最末PE(或者提取终止器)可主控提取通道(例如,总线)并 且在根据(1)来自LEC的信号或者(2)内部产生的信号(例如,来自 PE)发送数据。一旦完成,PE就可设置其完成标志,例如使得下一个PE 能够提取其数据。图83C图示了最遥远的PE已完成提取过程,并且作为 结果,其已设置其一个或多个提取状态比特,这些比特例如将复用器摆动 到相邻网络中以使得下一个PE能够开始提取过程。提取的PE可继续开始 正常操作。在一些实施例中,PE可保持被禁用,直到采取其他动作为止。 在这些图中,复用器网络与某些图(例如,图6)中所示的“交换机”类 似。
下面的章节描述了提取网络的实施例的各种组件的操作。
本地提取控制器
图84图示了根据本公开的实施例的提取控制器8402。本地提取控制 器(LEC)可以是负责接受提取命令、协调与EFE的提取过程和/或例如向 虚拟存储器存储提取的数据的硬件实体。在这个身份上,LEC可以是一种 专用的循序微控制器。
LEC操作可开始于其接收到指向其中将写入架构状态的缓冲器(例如, 在虚拟存储器中)的指针,以及可选地,控制将提取多少架构的命令时。 取决于LEC微体系结构,这个指针(例如,存储在指针寄存器8404中) 可通过网络或者通过对LEC的存储器***访问到来。当其接收到这种指针 (例如,命令)时,LEC着手从其所负责的那部分架构提取状态。LEC可 将这个提取的数据从架构流出到由外部调用者提供的缓冲器中。
在图82中示出LEC的两个不同的微体系结构。第一个将LEC 8202放 置在存储器接口处。在此情况下,LEC可向存储器***作出直接请求来写 入提取的数据。在第二情况中,LEC 8206被放置在存储器网络上,在其中 它只可间接地向存储器作出请求。在两种情况下,LEC的逻辑操作都可以 不变。在一个实施例中,LEC被告知要从架构提取数据的愿望,例如通过 一组(例如,OS可见的)控制状态寄存器来告知,这些寄存器将用于将新 命令告知个体LEC。
额外带外控制通道(例如,导线)
在某些实施例中,提取依赖于2-8个额外的带外信号来改善配置速度, 如下面所定义。由LEC驱动的信号可被标注为LEC。由EFE(例如,PE) 驱动的信号可被标注为EFE。配置控制器8402可包括以下控制通道,例如 LEC_EXTRACT控制通道8506、LEC_START控制通道8408、 LEC_STROBE控制通道8410以及EFE_COMPLETE控制通道8412,其中 每一者的示例在下面的表格3中论述。
表格3:提取通道
Figure BDA0002512929450001341
一般而言,对提取的处理可被留给特定EFE的实现者。例如,可选择 功能EFE可具有利用现有数据路径来转储寄存器的配设,而固定功能EFE 可简单地具有复用器。
由于在对一大组EFE编程时的长导线延迟,LEC_STROBE信号可被视 为EFE组件的时钟/锁存使能。由于此信号被用作时钟,所以在一个实施例 中线路的占空比最多为50%。结果,提取吞吐量大约减半。可选地,可以 添加第二LEC_STROBE信号来使得连续提取成为可能。
在一个实施例中,只有LEC_START是严格地在独立的耦合(例如, 导线)上传达的,例如,其他控制通道可被覆盖在现有网络(例如,导线) 上。
网络资源的再利用
为了降低数据提取的开销,CSA的某些实施例利用现有的网络基础设 施来传达提取数据。LEC可利用芯片级存储器层次体系和架构级通信网络 两者来将数据从架构移动到存储中。结果,在CSA的某些实施例中,提取 基础设施向整体架构面积和功率添加不多于2%。
CSA的某些实施例中的网络资源的再利用可使得网络对于提取协议具 有一些硬件支持。CSA的某些实施例要求的电路交换网络使得LEC在 “LEC_START”信号被断言时以特定方式设置其复用器以便配置。虽然 LEC端点(例如,提取终止器)在封包交换网络中使用特定的地址,但封 包交换网络可不要求扩展。网络再利用是可选的,并且一些实施例可发现 专用的配置总线更方便。
每EFE状态
每个EFE可维护一比特,表示其是否已输出其状态。这个比特可在提 取开始信号被驱动时被解除断言,然后一旦特定的EFE完成了提取就可被 断言。在一个提取协议中,EFE被布置为形成链路,其中EFE提取状态比 特确定链路的拓扑结构。EFE可读取紧邻的EFE的提取状态比特。如果这 个邻近EFE的提取比特被设置并且当前EFE没有,则EFE可确定其拥有 提取总线。当EFE转储其最后数据值时,其可驱动“EFE_DONE”信号并 且设置其提取比特,例如使得上游EFE能够为提取而进行配置。与EFE相 邻的网络可观察此信号并且也调整其状态来应对该转变。作为提取过程的 基本情况,断言提取完成的提取终止器(例如,图73中的LEC 8202的提 取终止器8204或者LEC 8206的提取终止器8208)可被包括在链路的末尾 处。
在EFE内部,这个比特可用于驱动流控制准备就绪信号。例如,当提 取比特被解除断言时,网络控制信号可自动被钳位到防止数据流动的值, 同时在PE内没有操作或动作将被调度。
应对高延迟路径
LEC的一个实施例可在长距离上驱动信号,例如经过许多复用器并且 具有许多负载。从而,信号要在短时钟周期内到达遥远的EFE可能是困难 的。在某些实施例中,提取信号是按主(例如,CSA)时钟频率的某个分 频(例如,某个分数)的以确保提取时的数字定时纪律。时钟分频可被利 用在带外信令协议中,并且不要求对主时钟树的任何修改。
确保提取期间的一致架构行为
由于某些提取方案是分布式的并且由于程序和存储器效果而具有非确 定性定时,所以架构的不同成员可在不同的时间处于提取过程中。在 LEC_EXTRACT被驱动的同时,所有网络流控制信号可被驱动为逻辑低, 从而例如冻结架构的特定区段的操作。
提取过程可以是非破坏性的。因此,一旦提取完成了,一组PE就可 被认为是可操作的。对提取协议的扩展可允许PE可选地在提取后被禁用。 可替换地,在提取过程期间开始配置在实施例中将具有类似的效果。
单个PE提取
在一些情况下,提取单个PE可能是方便的。在此情况下,可选的地 址信号可作为提取过程的开始的一部分被驱动。这可使得作为提取目标的 PE被直接使能。一旦此PE已被提取,提取过程就可停止,同时降低 LEC_EXTRACT信号。以此方式,单个PE可被选择性提取,例如由本地 提取控制器提取。
处理提取背压
在LEC将提取的数据写入到存储器(例如,为了例如在软件中的后期 处理)的实施例中,其可受制于有限的存储器带宽。在LEC耗尽其缓冲容 量,或者预期其将会耗尽其缓冲容量的情况下,其可停止选通 LEC_STROBE信号,直到缓冲问题已解决为止。
注意在某些图(例如,图73、图76、图77、图79、图80和图82) 中,通信是示意性示出的。在某些实施例中,这些通信可在(例如,互连) 网络上发生。
6.7流程图
图85图示了根据本公开的实施例的流程图8500。描绘的流程8500包 括利用处理器的核心的解码器将指令解码成解码后指令8502;利用处理器 的核心的执行单元执行解码后指令以执行第一操作8504;接收包括多个节 点的数据流图的输入8506;将数据流图覆盖到处理器的处理元件的阵列中, 其中每个节点被表示为处理元件的阵列中的数据流操作器8508;并且当传 入操作对象集合到达处理元件的阵列时利用处理元件的阵列执行数据流图 的第二操作8510。
图86图示了根据本公开的实施例的流程图8600。描绘的流程8600包 括利用处理器的核心的解码器将指令解码成解码后指令8602;利用处理器 的核心的执行单元执行解码后指令以执行第一操作8604;接收包括多个节 点的数据流图的输入8606;将数据流图覆盖到处理器的多个处理元件和处 理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理 元件中的数据流操作器8608;并且当传入操作对象集合到达多个处理元件 时利用互连网络和多个处理元件执行数据流图的第二操作8610。
6.8存储器
图87A是根据本公开的实施例的采用介于存储器子***8710和加速硬 件8702之间的存储器排序电路8705的***8700的框图。存储器子*** 8710可包括已知的存储器组件,包括缓存、存储器以及与基于处理器的体 系结构相关联的一个或多个存储器控制器。加速硬件8702可以是由被处理 元件(PE)间网络或者另一类型的组件间网络连接的轻量级处理元件(或 者其他类型的处理组件)构成的粗颗粒空间体系结构。
在一个实施例中,被视为控制数据流图的程序通过配置PE和通信网 络被映射到空间体系结构上。一般而言,PE被配置为数据流操作器,类似 于处理器中的功能单元:一旦输入操作对象到达PE处,一些操作就发生, 并且结果被以管线方式转发到下游PE。数据流操作器(或者其他类型的操 作器)可基于每个操作器选择消耗传入数据。简单操作器,像是处理算术 表达式的无条件评估的那些,经常消耗所有传入数据。然而,例如在累加 中让操作器维持状态有时是有用的。
PE利用专用的虚拟电路通信,这些专用虚拟电路是通过静态配置电路 交换通信网络来形成的。这些虚拟电路是流控制的并且完全背压式的,使 得如果源没有数据或者目的地已满则PE将会暂缓。在运行时,数据流经 根据数据流图实现映射的算法的PE,数据流图在本文中也被称为子程序。 例如,数据可被从存储器流入,经过加速硬件8702,然后退出到存储器。 这种体系结构相对于传统的多核处理器可实现显著的性能效率:PE形式的 计算与更大的核心相比更简单并且更众多,并且通信是直接的,与存储器 子***8710的扩展不同。然而,存储器***并行性帮助支持并行PE计算。 如果存储器访问被串行化,则高并行性有可能是无法实现的。为了促进存 储器访问的并行性,公开的存储器排序电路8705包括存储器排序体系结构 和微体系结构,如将会详细说明的。在一个实施例中,存储器排序电路 8705是请求地址文件电路(或者“RAF”)或者其他存储器请求电路。
图87B是根据本公开的实施例的图87A的***8700的框图,但采用 了多个存储器排序电路8705。每个存储器排序电路8705可充当存储器子 ***8710和加速硬件8702的一部分(例如,处理元件的空间阵列或分片) 之间的接口。存储器子***8710可包括多个缓存切片12(例如,图87B 的实施例中的缓存切片12A、12B、12C和12D),并且一定数目的存储器排序电路8705(在此实施例中是四个)可被用于每个缓存切片12。交叉开 关8704(例如,RAF电路)可将存储器排序电路8705连接到构成每个缓 存切片12A、12B、12C和12D的缓存的堆。例如,在一个实施例中在每 个缓存切片中可以有八堆存储器。***8700可被实例化在单个晶粒上,例 如作为片上***(system on a chip,SoC)。在一个实施例中,该SoC包括 加速硬件8702。在替换实施例中,加速硬件8702是诸如FPGA或CGRA 之类的外部可编程芯片,并且存储器排序电路8705通过输入/输出集线器 之类的与加速硬件8702相接口。
每个存储器排序电路8705可接受到存储器子***8710的读取和写入 请求。来自加速硬件8702的请求对于发起读取或写入访问的数据流图的每 个节点在单独的通道中到达存储器排序电路8705,读取或写入访问在本文 中也被称为加载或存储访问。提供缓冲以使得加载的处理将以其被请求的 顺序把请求的数据返回到加速硬件8702。换言之,迭代六数据在迭代七数 据之前被返回,依此类推。此外,注意从存储器排序电路8705到特定缓存堆的请求通道可实现为排序的通道并且在第二请求之前离开的任何第一请 求将在第二请求之前到达缓存堆。
图88是根据本公开的实施例图示出进出加速硬件8702的存储器操作 的一般功能的框图8800。在加速硬件8702的顶部外面发生的操作被理解 为是向和从存储器子***8710的存储器作出的。注意作出了两个加载请求, 然后是相应的加载响应。在加速硬件8702对来自加载响应的数据执行处理 的同时,第三加载请求和响应发生,这触发额外的加速硬件处理。对这三 个加载操作的加速硬件处理的结果随后被传递到存储操作中,从而最终结 果被存储回到存储器。
通过考虑操作的这个序列,可明显看出空间阵列更自然地映射到通道。 此外,加速硬件8702就请求和响应通道以及可发生的固有并行处理而言是 时延不敏感的。加速硬件也可将程序的执行与存储器子***8710(图87A) 的实现解除耦合,因为与存储器的接口发生在与加速硬件8702采取的多个 处理步骤分离的离散时刻。例如,去到存储器的加载请求和来自存储器的 加载响应是分离的动作,并且在不同的情况中取决于存储器操作的依从流 可被不同地调度。使用空间架构来例如处理指令促进了这种加载请求和加 载响应的空间分离和分布。
图89是根据本公开的实施例图示出存储操作8901的空间依从流的框 图8900。提及存储操作是示范性的,因为相同的流程可适用于加载操作 (但没有传入数据),或者诸如防护之类的其他操作器。防护是对于存储 器子***的排序操作,其确保某个类型的所有在先存储器操作(例如所有 存储或者所有加载)已完成。存储操作8901可接收从加速硬件8702接收 的(存储器)地址8902和数据8904。存储操作8901也可接收传入依从性 令牌8908,并且响应于这三项的可用性,存储操作8912可生成传出依从 性令牌8912。可例如是程序的初始依从性令牌的传入依从性令牌可在对程 序的编译器提供配置中提供,或者可由存储器映射输入/输出(I/O)的执 行来提供。可替换地,如果程序已经在运行,则传入依从性令牌8908可以 是从加速硬件8702接收的,例如与存储操作8901所依从于的先前存储器 操作相关联地接收的。可基于程序后续存储器操作所要求的地址8902和数 据8904来生成传出依从性令牌6512。
图90是根据本公开的实施例的图87A的存储器排序电路8705的详细 框图。存储器排序电路8705可耦合到无序存储器子***8710,该无序存 储器子***8710如前所述可包括缓存12和存储器18,以及关联的(一个 或多个)无序存储器控制器。存储器排序电路8705可包括或者耦合到通信 网络接口20,该通信网络接口20可以是分片间或者分片内网络接口,并 且可以是电路交换网络接口(如图所示),从而包括电路交换互连。替换 地或者额外地,通信网络接口20可包括封包交换互连。
存储器排序电路8705还可包括但不限于:存储器接口9010、操作队 列9012、(一个或多个)输入队列9016、完成队列9020、操作配置数据 结构9024以及操作管理器电路9030,该操作管理器电路9030可进一步包 括调度器电路9032和执行电路9034。在一个实施例中,存储器接口9010 可以是电路交换的,而在另一实施例中,存储器接口9010可以是封包交换的,或者两者可同时存在。操作队列9012可缓冲正被针对请求处理的存储 器操作(带有相应的参量),并且因此可对应于进入到输入队列9016中的 地址和数据。
更具体而言,输入队列9016可以是至少以下各项的聚合:加载地址队 列、存储地址队列、存储数据队列和依从性队列。当将输入队列9016实现 为聚合的时,存储器排序电路8705可提供逻辑队列的共享,有额外的控制 逻辑来从逻辑上分离队列,这些队列是与存储器排序电路的个体通道。这 可最大化输入队列使用,但也可要求额外的复杂度和空间来供逻辑电路管 理聚合队列的逻辑分离。可替换地,正如将参考图91论述的,输入队列 9016可以按隔离的方式实现,对于每一者有一单独的硬件队列。无论是聚 合的(图90)还是分解的(图91),对于本公开的目的而言的实现都是基 本上相同的,前者使用额外的逻辑来在单个共享的硬件队列内从逻辑上分 离队列。
当被共享时,输入队列9016和完成队列9020可实现为固定大小的环 形缓冲器。环形缓冲器是具有先入先出(first-in-first-out,FIFO)数据特 性的循环队列的一种高效实现方式。这些队列因此可强制实施为其请求存 储器操作的程序的语义顺序。在一个实施例中,环形缓冲器(例如用于存 储地址队列)可具有与按相同速率流经关联的队列(例如,存储数据队列 或者依从性队列)的条目相对应的条目。这样,存储地址可保持与相应的 存储数据相关联。
更具体而言,加载地址队列可缓冲从中取回数据的存储器18的传入地 址。存储地址队列可缓冲向其写入数据的存储器18的传入地址,该数据被 缓冲在存储数据队列中。依从性队列可与加载地址队列和存储地址队列的 地址相关联地缓冲依从性令牌。表示单独通道的每个队列可实现有固定的 或者动态数目的条目。当固定时,可用的条目越多,就可以进行越高效的 复杂循环处理。但是,具有太多的条目会花费更多的面积和能量来实现。在一些情况下,例如对于聚合的体系结构,公开的输入队列9016可共享队 列槽位。队列中的槽位的使用可以是静态分配的。
完成队列9020可以是单独的一组队列来响应于由加载操作发出的存储 器命令而缓冲从存储器接收的数据。完成队列9020可用于扣留已被调度但 是尚未为其接收到数据(从而尚未完成)的加载操作。完成队列9020因此 可用于对数据和操作流重排序。
将参考图91至图55更详细说明的操作管理器电路9030可提供用于在 考虑到用于提供存储器操作的正确排序的依从性令牌时调度和执行排队的 存储器操作的逻辑。操作管理器9030可访问操作配置数据结构9024以确 定哪些队列被分组在一起以形成给定的存储器操作。例如,操作配置数据 结构9024可包括特定的依从性计数器(或队列)、输入队列、输出队列和 完成队列全都对于特定的存储器操作被分组在一起。由于每个相继的存储 器操作可被指派不同的队列群组,所以对不同的队列的访问在存储器操作 的子程序间可以是交织的。在知道所有这些队列的情况下,操作管理器电 路9030可与操作队列9012、(一个或多个)输入队列9016、(一个或多 个)完成队列9020和存储器子***8710接口连接以最初在相继的存储器 操作变得“可执行时”向存储器子***8710发出存储器操作,并且接下来在有来自存储器子***的某种确认的情况下完成存储器操作。这个确认可 例如是响应于加载操作命令的数据或者对于数据响应于存储操作命令被存 储在存储器中的确认。
图91是根据本公开的实施例的图87A的存储器排序电路8705的微体 系结构9100的流程图。由于C语言(以及其他面向对象的程序语言)的语 义,存储器子***8710可允许其中存储器操作的排序错误的程序的非法执 行。微体系结构9100可强制实施存储器操作的排序(从存储器加载和向存 储器存储的序列),使得加速硬件8702执行的指令的结果被恰当地排序。 图示了若干个本地网络50来表示耦合到微体系结构9100的加速硬件8702 的一部分。
从体系结构的角度来看,有至少两个目标:第一,正确地运行一般循 序代码,以及第二,在由微体系结构9100执行的存储器操作中获得高性能。 为了确保程序正确性,编译器以某种方式将存储操作和加载操作之间的依 从性表达到阵列p,正如将会说明的,该阵列是经由依从性令牌来表达的。 为了改善性能,微体系结构9100在就程序顺序而言合法的情况下并行发现 并且发出阵列的尽可能多的加载命令。
在一个实施例中,微体系结构9100可包括上文参考图90论述的操作 队列9012、输入队列9016、完成队列9020和操作管理器电路9030,其中 个体队列可被称为通道。微体系结构9100还可包括多个依从性令牌计数器 9114(例如,每个输入队列一个)、一组依从性队列9118(例如,每个输 入队列一个)、地址复用器9132、存储数据复用器9134、完成队列索引复 用器9136和加载数据复用器9138。操作管理器电路9030在一个实施例中 可指导这些各种复用器生成存储器命令9150(将被发送到存储器子*** 8710)以及接收从存储器子***8710返回的对加载命令的响应,如将会说 明的。
如前所述的输入队列9016可包括加载地址队列9122、存储地址队列 9124和存储数据队列9126。(小的数字0、1、2是通道标签并且稍后在图 94和图97A中将被引用。)在各种实施例中,这些输入队列可被倍增以包 含额外的通道,来应对存储器操作处理的额外并行化。每个依从性队列 9118可与输入队列9016之一相关联。更具体而言,标注为B0的依从性队 列9118可与加载地址队列9122相关联并且标注为B1的依从性队列可与存 储地址队列9124相关联。如果提供了输入队列9016的额外通道,则依从 性队列9118可包括额外的相应通道。
在一个实施例中,完成队列9020可包括一组输出缓冲器9144和9146, 用于接收来自存储器子***8710的加载数据,以及完成队列9142,用来 根据由操作管理器电路9030维护的索引为加载操作缓冲地址和数据。操作 管理器电路9030可管理索引来确保加载操作的按序执行,并且识别被接收 到输出缓冲器9144和9146中的数据,这些数据可被移动到完成队列9142 中的调度的加载操作。
更具体而言,因为存储器子***8710是无序的,但加速硬件8702按 序完成操作,所以微体系结构9100可通过使用完成队列9142对存储器操 作重排序。关于完成队列9142可执行三个不同的子操作,即分配、入队和 出队。对于分配,操作管理器电路9030可在完成队列的按序下一个槽位中 分配到完成队列9142中的索引。操作管理器电路可将此索引提供到存储器 子***8710,存储器子***8710随后可知道对于加载操作向其写入数据 的槽位。为了入队,存储器子***8710可像随机访问存储器(RAM)那 样将数据作为条目写入到完成队列9142中的被编制索引的按序下一个槽位, 将该条目的状态比特设置为有效。为了出队,操作管理器电路9030可呈现 存储在这个按序下一个槽位中的数据来完成加载操作,将该条目的状态比 特设置为无效。无效条目随后可用于新的分配。
在一个实施例中,状态信号9048可以指输入队列9016、完成队列 9020、依从性队列9118和依从性令牌计数器9114的状态。这些状态例如 可包括输入状态、输出状态和控制状态,它们可以指与输入或输出相关联 的依从性令牌的存在与否。输入状态可包括地址的存在与否并且输出状态 可包括存储值和可用完成缓冲器槽位的存在与否。依从性令牌计数器9114 可以是队列的紧凑表示并且跟踪用于任何给定输入队列的依从性令牌的数 目。如果依从性令牌计数器9114饱和,则对于新的存储器操作可不生成额 外的依从性令牌。因此,存储器排序电路8705可暂缓调度新的存储器操作, 直到依从性令牌计数器9114变得不饱和为止。
另外参考图92,图92是根据本公开的实施例的可执行确定器电路 9200的框图。存储器排序电路8705可被设置有若干不同种类的存储器操 作,例如加载和存储:
ldNo[d,x]result.outN,addr.in64,order.in0,order.out0
stNo[d,x]addr.in64,data.inN,order.in0,order.out0
可执行确定器电路9200可被集成为调度器电路9032的一部分并且其 可执行逻辑操作来确定给定的存储器操作是否是可执行的,并从而准备好 被发出到存储器。当与其存储器参量相对应的队列具有数据并且关联的依 从性令牌存在时,存储器操作可被执行。这些存储器参量可包括例如输入 队列标识符9210(指示输入队列9016的通道)、输出队列标识符9220 (指示完成队列9020的通道)、依从性队列标识符9230(例如,应当参 考什么依从性队列或计数器)以及操作类型指示符9240(例如,加载操作 或存储操作)。可包括(例如,存储器请求)字段,例如按上述格式,其 存储一个或多个比特来指示使用风险检查硬件。
这些存储器参量可在操作队列9012内被排队,并且用于与来自存储器 和加速硬件8702的传入地址和数据相关联地调度存储器操作的发出。(参 见图93。)传入状态信号9048可在逻辑上与这些标识符相组合,然后结 果可被相加(例如,通过与门9250)来输出可执行信号,其例如在存储器 操作可执行时被断言。传入状态信号9048可包括输入队列标识符9210的 输入状态9212、输出队列标识符9220的输出状态9222以及依从性队列标 识符9230的控制状态9232(与依从性令牌有关)。
对于加载操作,作为示例,当加载操作具有地址(输入状态)和空间 来在完成队列9142中缓冲加载结果(输出状态)时,存储器排序电路8705 可发出加载命令。类似地,当存储操作既有地址也有数据值(输入状态) 时,存储器排序电路8705可为存储操作发出存储命令。因此,状态信号 9048可传达状态信号所关于的队列的空(或满)的水平。操作类型于是可 依据什么地址和数据应当可用来指示该逻辑是否导致可执行信号。
为了实现依从性排序,调度器电路9032可扩展存储器操作来包括依从 性令牌,如上文在示例加载和存储操作中加下划线的。控制状态9232可指 出在由依从性队列标识符9230标识的依从性队列内依从性令牌是否可用, 该依从性队列可以是依从性队列9118(对于传入存储器操作)或者依从性 令牌计数器9114(对于完成的存储器操作)之一。在这个规划下,依从的 存储器操作要求额外的排序令牌来执行并且在该存储器操作完成时生成额外的排序令牌,其中完成意味着来自该存储器操作的结果的数据对于程序 后续存储器操作已变得可用。
在一个实施例中,进一步参考图91,取决于是加载操作还是存储操作 当前正被调度来执行,操作管理器电路9030可指导地址复用器9132选择 缓冲在加载地址队列9122或者存储地址队列9124内的地址参量。如果其 是存储操作,则操作管理器电路9030也可指导存储数据复用器9134从存 储数据队列9126中选择相应的数据。操作管理器电路9030也可指导完成 队列索引复用器9136取回完成队列9020内的根据队列状态和/或程序顺序 来编制索引的加载操作条目,以完成加载操作。操作管理器电路9030也可 指导加载数据复用器9138对于正等待完成的加载操作将从存储器子*** 8710接收的数据选择到完成队列9020中。以此方式,操作管理器电路 9030可指导对进入形成存储器命令9150(例如,加载命令或存储命令)或 者执行电路9034等待来完成存储器操作的输入的选择。
图93是根据本公开的实施例的可包括优先级编码器9306和选择电路 9308并且生成(一个或多个)输出控制线9310的执行电路9034的框图。 在一个实施例中,执行电路9034可访问已被确定为可执行的排队存储器操 作(在操作队列9012中)(图92)。执行电路9034也可为已被排队并且 也被指示为准备好发出到存储器的多个排队存储器操作接收调度9304A、 9304B、9304C。优先级编码器9306从而可接收已被调度的可执行存储器 操作的身份并且执行某些规则(或者遵循特定逻辑)来从进入的那些中选 择具有被首先执行的优先级的存储器操作。优先级编码器9306可输出选择 器信号9307,该信号标识具有最高优先级并从而已被选择的调度的存储器 操作。
优先级编码器9306例如可以是将多个二进制输入压缩成更小数目的输 出(包括可能仅一个输出)的电路(例如状态机或更简单的转换器)。优 先级编码器的输出是从最高有效输入比特的零开始的原始数字的二进制表 示。因此,在一个示例中,当分别对应于9304A、9304B和9304C的存储 器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)可执行并且被调度时。优先级编码器9306可被配置为输出选择器信号9307 到选择电路9308,指出存储器操作零作为具有最高优先级的存储器操作。 选择电路9308在一个实施例中可以是复用器,并且被配置为响应于来自优 先级编码器9306(并且指示对最高优先级的存储器操作的选择)的选择器 信号将其选择(例如,对存储器操作零的选择)作为控制信号输出到控制 线9310上。这个控制信号可去到复用器9132、9134、9136和/或9138,如 参考图91所述,以填充接下来要发出(被发送)到存储器子***8710的 存储器命令9150。存储器命令的传输可被理解为发出存储器操作到存储器 子***8710。
图94是根据本公开的实施例的逻辑和二进制形式的示范性加载操作 9400的框图。返回参考图92,加载操作9400的逻辑表示可包括作为输入 队列标识符9210的通道零(“0”)(对应于加载地址队列9122)和作为 输出队列标识符9220的完成通道一(“1”)(对应于输出缓冲器9144)。 依从性队列标识符9230可包括两个标识符,用于传入依从性令牌的通道 B0(对应于第一依从性队列9118)和用于传出依从性令牌的计数器C0。 操作类型9240具有“加载”的指示,这也可以是数值指示符,以指示出存 储器操作是加载操作。下面,逻辑存储器操作的逻辑表示是用于示范性目 的的二进制表示,例如其中加载由“00”指示。图94的加载操作可被扩展 到包括其他配置,例如存储操作(图96A)或者其他类型的存储器操作, 例如防护。
将联系图95A-95B、图96A-96B和图97A-97G出于说明目的利用简化 的示例来图示存储器排序电路8705进行的存储器排序的示例。对于此示例, 以下代码包括阵列p,其通过索引i和i+2来访问:
Figure BDA0002512929450001461
对于此示例,假设阵列p包含0,1,2,3,4,5,6,并且在循环执行结束时, 阵列p将包含0,1,0,1,0,1,0。通过展开循环可变换此代码,如图95A和95B 中所示。真实地址依从性由图95A中的箭头来注释,其中在每种情况中, 加载操作依从于到相同地址的存储操作。例如,对于这种依从性中的第一 个,存储(例如,写入)到p[2]需要在从p[2]加载(例如,读取)之前发 生,并且对于这种依从性中的第二个,到p[3]的存储需要在从p[3]的加载 之前发生,依此类推。由于编译器将是悲观的,所以编译器注释两个存储 器操作加载p[i]和存储p[i+2]之间的依从性。注意读取和写入只是有时冲突。 微体系结构9100被设计为提取存储器级并行性,其中当对相同地址没有冲 突时存储器操作可同时向前移动。对于加载操作尤其是这样,加载操作由 于等待在前依从存储操作完成而暴露代码执行中的时延。在图95B中的示 例代码中,安全重排序由展开的代码左侧的箭头来注释。
参考图96A-96B和图97A-97G来论述微体系结构可执行此重排序的方 式。注意此方案不是尽可能最优的,因为微体系结构9100可不在每个周期 向存储器发送存储器命令。然而,利用最低限度的硬件,微体系结构通过 在操作对象(例如,对于存储是地址和数据,或者对于加载是地址)和依 从性令牌可用时执行存储器操作来支持依从性流程。
图96A是根据本公开的实施例的加载操作9602和存储操作9604的示 范性存储器参量的框图。已联系图94论述这些或者类似的存储器参量,并 且在这里将不再重复。然而,注意存储操作9604对于输出队列标识符没有 指示符,因为没有数据在被输出到加速硬件8702。反而,如输入队列标识 符存储器参量中所标识的,输入队列9016的通道1中的存储地址和通道2 中的数据将被调度来在存储器命令中传输到存储器子***8710以完成存储 操作9604。此外,依从性队列的输入通道和输出通道都是用计数器实现的。 因为如图95A和95B中显示的加载操作和存储操作是独立的,所以可在代 码的流程内在加载操作和存储操作之间循环计数器。
图96B是根据本公开的实施例图示出例如图95A的加载操作9602和 存储操作9604那样的加载操作和存储操作通过图91的存储器排序电路的 微体系结构9100的流程的框图。为了说明的简单,没有显示所有组件,但 可返回参考图91中显示的额外组件。对于加载操作9602指示“加载”以 及对于存储操作9604指示“存储”的各种椭圆被覆盖在微体系结构9100 的一些组件上,作为对于随着存储器操作通过微体系结构9100被排队和排 序,队列的各种通道如何被使用的指示。
图97A、97B、97C、97D、97E、97F、97G和97H是根据本公开的实 施例图示出图95A和95B的示范性程序的加载操作和存储操作通过图96B 的微体系结构的队列的功能流程的框图。每幅图可对应于微体系结构9100 进行的处理的下一周期。斜体的值是传入值(传入到队列中)并且粗体的 值是传出值(传出队列)。具有正常字体的所有其他值是已经存在于队列 中的保留值。
在图97A中,地址p[0]正传入到加载地址队列9122中,并且地址p[2] 正传入到存储地址队列9124中,开始控制流过程。注意,用于加载地址队 列的依从性输入的计数器C0是“1”,并且用于依从性输出的计数器C1是 零。与之不同,C0的“1”指示存储操作的依从性输出值。这指示了p[0] 的加载操作的传入依从性和p[2]的存储操作的传出依从性。然而,这些值 尚未活跃,但在图97B中以这种方式将变得活跃。
在图97B中,地址p[0]是加粗的以指示其在此周期中是传出的。新的 地址p[1]正传入到加载地址队列中并且新的地址p[3]正传入到存储地址队 列中。完成队列9142中的零(“0”)值比特也是传入的,这指出对于该 索引条目存在的任何数据是无效的。如前所述,计数器C0和C1的值现在 被指示为传入,从而现在在此周期中是活跃的。
在图97C中,传出地址p[0]现在已离开了加载地址队列并且新的地址 p[2]正传入到加载地址队列中。并且,数据(“0”)对于地址p[0]正传入 到完成队列中。有效性比特被设置到“1”以指出完成队列中的数据是有 效的。此外,新的地址p[4]正传入到存储地址队列中。计数器C0的值被指 示为传出并且计数器C1的值被指示为传入。C1的值“1”指示到地址p[4] 的存储操作的传入依从性。
注意最新的加载操作的地址p[2]依从于存储操作对于地址p[2]首先需 要存储的值,其在存储地址队列的顶部。稍后,对于从地址p[2]的加载操 作在完成队列中编制索引的条目可保持被缓冲,直到来自到地址p[2]的存 储操作的数据完成为止(参见图97F-97H)。
在图97D中,对于地址p[0]数据(“0”)在从完成队列传出,因此其 正被送出到加速硬件8702。此外,新的地址p[3]正传入到加载地址队列中 并且新的地址p[5]正传入到存储地址队列中。计数器C0和C1的值保持不 变。
在图97E中,地址p[2]的值(“0”)正传入到存储数据队列中,而新 的地址p[4]进入到加载地址队列中并且新的地址p[6]进入到存储地址队列 中。C0和C1的计数器值保持不变。
在图97F中,存储数据队列中的地址p[2]的值(“0”)和存储地址队 列中的地址p[2]都是传出值。类似地,计数器C1的值被指示为传出,而计 数器C0的值(“0”)保持不变。此外,新的地址p[5]正传入到加载地址 队列中并且新的地址p[7]正传入到存储地址队列中。
在图97G中,值(“0”)是传入的以指示出完成队列9142内的编制 索引的值是无效的。地址p[1]是加粗的以指示出其在从加载地址队列传出, 而新的地址p[6]正传入到加载地址队列中。新的地址p[8]也正传入到存储 地址队列中。计数器C0的值正作为“1”传入,对应于地址p[6]的加载操 作的传入依从性和地址p[8]的存储操作的传出依从性。计数器C1的值现在 是“0”,并且被指示为传出。
在图97H中,数据值“1”正传入到完成队列9142中,而有效性比特 也正作为“1”传入,意味着缓冲的数据是有效的。这是完成对于p[2]的加 载操作所需要的数据。回忆起此数据必须首先被存储到地址p[2],这在图 97F中发生。计数器C0的值“0”是传出的,并且计数器C1的值“1”是 传入的。此外,新的地址p[7]正传入到加载地址队列中并且新的地址p[9] 正传入到存储地址队列中。
在本实施例中,执行图95A和95B的代码的过程可在依从性令牌对于 加载操作和存储操作在“0”和“1”之间弹跳的情况下继续。这是由于p[i] 和p[i+2]之间的紧密依从性。具有不那么频繁的依从性的其他代码可以更 慢的速率生成依从性令牌,从而以更慢的速率重置计数器C0和C1,引起 更高值的令牌的生成(对应于进一步语义分离的存储器操作)。
图98是根据本公开的实施例用于在加速硬件和无序存储器子***之间 对存储器操作排序的方法9800的流程图。方法9800可由可包括硬件(例 如,电路、专用逻辑和/或可编程逻辑)、软件(例如,在计算机***上可 执行来执行硬件仿真的指令)或者这些的组合的***执行。在说明性示例 中,方法9800可由存储器排序电路8705和存储器排序电路8705的各种子 组件执行。
更具体而言,参考图98,方法9800可开始于存储器排序电路将存储 器操作排队在存储器排序电路的操作队列中(9810)。存储器操作和控制 参量可构成排队的存储器操作,其中存储器操作和控制参量如前所述被映 射到存储器排序电路内的某些队列。存储器排序电路可工作来与加速硬件 相关联地发出存储器操作到存储器,以确保存储器操作按程序顺序完成。 方法9800可继续由存储器排序电路在一组输入队列中从加速硬件接收与存储器操作中的第二存储器操作相关联的存储器的地址(9820)。在一个实 施例中,该组输入队列的加载地址队列是接收地址的通道。在另一实施例 中,该组输入队列的存储地址队列是接收地址的通道。方法9800可继续由 存储器排序电路从加速硬件接收与地址相关联的依从性令牌,其中依从性 令牌指示出对由存储器操作之中的在第二存储器操作之前的第一存储器操 作生成的数据的依从性(9830)。在一个实施例中,依从性队列的通道将 接收依从性令牌。第一存储器操作可以是加载操作或者存储操作。
方法9800可继续由存储器排序电路响应于接收到依从性令牌和与依从 性令牌相关联的地址而调度向存储器发出第二存储器操作(9840)。例如, 当加载地址队列对于加载操作的地址参量接收到地址并且依从性队列对于 加载操作的控制参量接收到依从性令牌时,存储器排序电路可调度将第二 存储器操作作为加载操作发出。方法9800可继续由存储器排序电路响应于 第一存储器操作的完成而向存储器发出第二存储器操作(例如,在命令中) (9850)。例如,如果第一存储器操作是存储,则完成可由对于该组输入 队列的存储数据队列中的数据已被写入到存储器中的该地址的确认来验证。 类似地,如果第一存储器操作是加载操作,则完成可由对于该加载操作从 存储器接收到数据来验证。
7.总结
在ExaFLOP尺度上的超级计算可能是高性能计算中的一个挑战,这是 传统的冯·诺伊曼体系结构不太可能满足的挑战。为了实现ExaFLOP,CSA的实施例提供了以(例如,由编译器产生的)数据流图的直接执行为 目标的异质空间阵列。除了提出CSA的实施例的体系结构原理以外,上文 还描述和评估了表现出大于现有产品的10倍的性能和能量的CSA的实施 例。编译器生成的代码相对于路线图体系结构可具有显著的性能和能量增 益。作为一种异质的、参数化的体系结构,CSA的实施例可容易适应于所 有计算使用。例如,CSA的移动版本可被调节到32比特,而聚焦于机器学 习的阵列可以大量的向量化8比特乘法单元为特征。CSA的实施例的主要 优点是高性能和极度的能量效率,这是与从超级计算和数据中心到物连网 的所有形式的计算相关的特性。
在一个实施例中,一种处理器包括处理元件的空间阵列;以及封包交 换通信网络,来根据数据流图在所述空间阵列内在处理元件之间路由数据 以执行所述数据流图的第一数据流操作,其中所述封包交换通信网络还包 括多个网络数据流端点电路来执行所述数据流图的第二数据流操作。所述 多个网络数据流端点电路中的一网络数据流端点电路可包括网络入口缓冲 器来从所述封包交换通信网络接收输入数据;以及空间阵列出口缓冲器来 根据对所述输入数据的所述第二数据流操作将结果数据输出到所述处理元 件的空间阵列。所述空间阵列出口缓冲器可基于所述网络数据流端点电路 内的调度器监视所述封包交换通信网络来输出所述结果数据。所述空间阵 列出口缓冲器可基于所述网络数据流端点电路内的所述调度器监视所述封 包交换通信网络的多个网络虚拟通道中的选中通道来输出所述结果数据。 所述多个网络数据流端点电路中的一网络数据流端点电路可包括空间阵列 入口缓冲器来从所述空间阵列接收控制数据,该控制数据使得从所述封包 交换通信网络接收到输入数据的所述网络数据流端点电路的网络入口缓冲 器根据对所述输入数据的所述第二数据流操作和所述控制数据向所述处理 元件的空间阵列输出结果数据。所述多个网络数据流端点电路中的一网络 数据流端点电路可在来自所述处理元件的空间阵列的下游处理元件的背压 信号指出所述下游处理元件中的存储不可用于所述网络数据流端点电路的 输出时暂缓从所述网络数据流端点电路的空间阵列出口缓冲器输出所述第 二数据流操作的结果数据。所述多个网络数据流端点电路中的一网络数据 流端点电路可在所述网络数据流端点电路的网络入口缓冲器不可用时发送 背压信号来暂缓源在所述封包交换通信网络上发送输入数据到所述网络入 口缓冲器中。所述处理元件的空间阵列可包括多个处理元件;以及所述多 个处理元件之间的互连网络来接收包括多个节点的所述数据流图的输入, 其中所述数据流图将被覆盖到所述互连网络、所述多个处理元件和所述多 个网络数据流端点电路中,其中每个节点被表示为所述多个处理元件和所 述多个网络数据流端点电路的任一者中的数据流操作器,并且所述多个处 理元件和所述多个网络数据流端点电路将通过传入操作对象集合到达所述 多个处理元件和所述多个网络数据流端点电路的每个所述数据流操作器处 来执行操作。所述处理元件的空间阵列可包括电路交换网络来根据所述数 据流图在所述空间阵列内在处理元件之间传输所述数据。
在另一实施例中,一种方法包括提供处理元件的空间阵列;利用封包 交换通信网络根据数据流图在所述空间阵列内在处理元件之间路由数据; 利用所述处理元件执行所述数据流图的第一数据流操作;并且利用所述封 包交换通信网络的多个网络数据流端点电路执行所述数据流图的第二数据 流操作。所述执行所述第二数据流操作可包括利用所述多个网络数据流端 点电路中的一网络数据流端点电路的网络入口缓冲器从所述封包交换通信 网络接收输入数据;并且根据对所述输入数据的所述第二数据流操作从所 述网络数据流端点电路的空间阵列出口缓冲器向所述处理元件的空间阵列 输出结果数据。所述输出可包括基于所述网络数据流端点电路内的调度器 监视所述封包交换通信网络来输出所述结果数据。所述输出可包括基于所 述网络数据流端点电路内的所述调度器监视所述封包交换通信网络的多个 网络虚拟通道中的选中通道来输出所述结果数据。所述执行所述第二数据 流操作可包括利用所述多个网络数据流端点电路中的一网络数据流端点电路的空间阵列入口缓冲器从所述空间阵列接收控制数据;并且配置所述网 络数据流端点电路来使得从所述封包交换通信网络接收到了输入数据的所 述网络数据流端点电路的网络入口缓冲器根据对所述输入数据的所述第二 数据流操作和所述控制数据向所述处理元件的空间阵列输出结果数据。所 述执行所述第二数据流操作可包括当来自所述处理元件的空间阵列的下游 处理元件的背压信号指出所述下游处理元件中的存储不可用于所述多个网 络数据流端点电路中的一网络数据流端点电路的输出时暂缓从所述网络数 据流端点电路的空间阵列出口缓冲器的所述第二数据流操作的输出。所述 执行所述第二数据流操作可包括在所述多个网络数据流端点电路中的一网 络数据流端点电路的网络入口缓冲器不可用时从所述网络数据流端点电路 发送背压信号来暂缓源在所述封包交换通信网络上发送输入数据到所述网 络入口缓冲器中。所述路由、执行所述第一数据流操作和执行所述第二数 据流操作可包括接收包括多个节点的数据流图的输入;将所述数据流图覆 盖到所述处理元件的空间阵列和所述多个网络数据流端点电路中,其中每 个节点被表示为所述处理元件和所述多个网络数据流端点电路的任一者中 的数据流操作器;并且在传入操作对象集合到达所述处理元件和所述多个 网络数据流端点电路的每个所述数据流操作器时利用所述处理元件执行所 述第一数据流操作并且利用所述多个网络数据流端点电路执行所述第二数 据流操作。所述方法可包括利用所述空间阵列的电路交换网络根据所述数据流图在所述空间阵列内在处理元件之间传输所述数据。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代 码当被机器执行时使得所述机器执行一种方法,该方法包括提供处理元件 的空间阵列;利用封包交换通信网络根据数据流图在所述空间阵列内在处 理元件之间路由数据;利用所述处理元件执行所述数据流图的第一数据流 操作;并且利用所述封包交换通信网络的多个网络数据流端点电路执行所 述数据流图的第二数据流操作。所述执行所述第二数据流操作可包括利用 所述多个网络数据流端点电路中的一网络数据流端点电路的网络入口缓冲 器从所述封包交换通信网络接收输入数据;并且根据对所述输入数据的所 述第二数据流操作从所述网络数据流端点电路的空间阵列出口缓冲器向所 述处理元件的空间阵列输出结果数据。所述输出可包括基于所述网络数据 流端点电路内的调度器监视所述封包交换通信网络来输出所述结果数据。 所述输出可包括基于所述网络数据流端点电路内的所述调度器监视所述封 包交换通信网络的多个网络虚拟通道中的选中通道来输出所述结果数据。 所述执行所述第二数据流操作可包括利用所述多个网络数据流端点电路中 的一网络数据流端点电路的空间阵列入口缓冲器从所述空间阵列接收控制 数据;并且配置所述网络数据流端点电路来使得从所述封包交换通信网络 接收到输入数据的所述网络数据流端点电路的网络入口缓冲器根据对所述 输入数据的所述第二数据流操作和所述控制数据向所述处理元件的空间阵 列输出结果数据。所述执行所述第二数据流操作可包括当来自所述处理元 件的空间阵列的下游处理元件的背压信号指出所述下游处理元件中的存储 不可用于所述多个网络数据流端点电路中的一网络数据流端点电路的输出 时暂缓从所述网络数据流端点电路的空间阵列出口缓冲器的所述第二数据 流操作的输出。所述执行所述第二数据流操作可包括在所述多个网络数据 流端点电路中的一网络数据流端点电路的网络入口缓冲器不可用时从所述 网络数据流端点电路发送背压信号来暂缓源在所述封包交换通信网络上发 送输入数据到所述网络入口缓冲器中。所述路由、执行所述第一数据流操 作和执行所述第二数据流操作可包括接收包括多个节点的数据流图的输入; 将所述数据流图覆盖到所述处理元件的空间阵列和所述多个网络数据流端 点电路中,其中每个节点被表示为所述处理元件和所述多个网络数据流端 点电路的任一者中的数据流操作器;并且在传入操作对象集合到达所述处 理元件和所述多个网络数据流端点电路的每个所述数据流操作器时利用所 述处理元件执行所述第一数据流操作并且利用所述多个网络数据流端点电 路执行所述第二数据流操作。所述方法可包括利用所述空间阵列的电路交 换网络根据所述数据流图在所述空间阵列内在处理元件之间传输所述数据。
在另一实施例中,一种处理器包括处理元件的空间阵列;以及封包交 换通信网络,来根据数据流图在所述空间阵列内在处理元件之间路由数据 以执行所述数据流图的第一数据流操作,其中所述封包交换通信网络还包 括用于执行所述数据流图的第二数据流操作的装置。
在一个实施例中,一种处理器包括核心,所述核心具有解码器来将指 令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一 操作;多个处理元件;以及所述多个处理元件之间的互连网络来接收包括 多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述互连网络 和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数 据流操作器,并且所述多个处理元件将通过相应传入操作对象集合到达所 述多个处理元件的每个所述数据流操作器处而执行第二操作。所述多个处 理元件中的一处理元件可在来自下游处理元件的背压信号指出所述下游处 理元件中的存储不可用于所述处理元件的输出时暂缓执行。所述处理器可 包括流控制路径网络来根据所述数据流图运载所述背压信号。数据流令牌 可使得来自接收到所述数据流令牌的数据流操作器的输出被发送到所述多 个处理元件中的特定处理元件的输入缓冲器。所述第二操作可包括存储器 访问并且所述多个处理元件包括存储器访问数据流操作器,该存储器访问 数据流操作器将不执行所述存储器访问,直到从逻辑上在前的数据流操作 器接收到存储器依从性令牌为止。所述多个处理元件可包括第一类型的处 理元件和不同的第二类型的处理元件。
在另一实施例中,一种方法包括利用处理器的核心的解码器将指令解 码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令 以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图 覆盖到所述处理器的多个处理元件和所述处理器的多个处理元件之间的互 连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器; 并且利用所述互连网络和所述多个处理元件通过相应传入操作对象集合到 达所述多个处理元件的每个所述数据流操作器处而执行所述数据流图的第 二操作。所述方法可包括当来自下游处理元件的背压信号指出所述下游处 理元件中的存储不可用于所述多个处理元件中的一处理元件的输出时暂缓 所述处理元件的执行。所述方法可包括根据所述数据流图在流控制路径网 络上发送所述背压信号。数据流令牌可使得来自接收到所述数据流令牌的 数据流操作器的输出被发送到所述多个处理元件中的特定处理元件的输入 缓冲器。所述方法可包括直到从逻辑上在前的数据流操作器接收到存储器依从性令牌才执行存储器访问,其中所述第二操作包括所述存储器访问并 且所述多个处理元件包括存储器访问数据流操作器。所述方法可包括提供 所述多个处理元件中的第一类型的处理元件和不同的第二类型的处理元件。
在另外一个实施例中,一种装置包括多个处理元件之间的数据路径网 络;以及所述多个处理元件之间的流控制路径网络,其中所述数据路径网 络和所述流控制路径网络将接收包括多个节点的数据流图的输入,所述数 据流图将被覆盖到所述数据路径网络、所述流控制路径网络和所述多个处 理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器, 并且所述多个处理元件将通过相应传入操作对象集合到达所述多个处理元 件的每个所述数据流操作器处而执行第二操作。所述流控制路径网络可根 据所述数据流图将背压信号运载到多个数据流操作器。在所述数据路径网 络上发送到数据流操作器的数据流令牌可使得来自所述数据流操作器的输 出在所述数据路径网络上被发送到所述多个处理元件中的特定处理元件的 输入缓冲器。所述数据路径网络可以是静态的电路交换网络以根据所述数 据流图将相应输入操作对象集合运载到每个所述数据流操作器。所述流控 制路径网络可根据所述数据流图从下游处理元件发送背压信号以指出所述 下游处理元件中的存储不可用于所述处理元件的输出。所述数据路径网络 的至少一个数据路径和所述流控制路径网络的至少一个流控制路径可形成 具有背压控制的通道化电路。所述流控制路径网络可将所述多个处理元件 中的至少两个串联管线化。
在另一实施例中,一种方法包括接收包括多个节点的数据流图的输入; 并且将所述数据流图覆盖到处理器的多个处理元件、所述多个处理元件之 间的数据路径网络、和所述多个处理元件之间的流控制路径网络中,其中 每个节点被表示为所述多个处理元件中的数据流操作器。所述方法可包括 利用所述流控制路径网络根据所述数据流图将背压信号运载到多个数据流 操作器。所述方法可包括在所述数据路径网络上将数据流令牌发送到数据 流操作器以使得来自所述数据流操作器的输出在所述数据路径网络上被发 送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可包括 设置所述数据路径网络的多个交换机和/或所述流控制路径网络的多个交换 机来根据所述数据流图将相应的输入操作对象集合运载到每个所述数据流 操作器,其中所述数据路径网络是静态的电路交换网络。所述方法可包括 利用所述流控制路径网络根据所述数据流图从下游处理元件发送背压信号 以指出所述下游处理元件中的存储不可用于所述处理元件的输出。所述方 法可包括利用所述数据路径网络的至少一个数据路径和所述流控制路径网 络的至少一个流控制路径形成具有背压控制的通道化电路。
在另外一个实施例中,一种处理器包括核心,所述核心具有解码器来 将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行 第一操作;多个处理元件;以及所述多个处理元件之间的网络装置,用来 接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述 网络装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元 件中的数据流操作器,并且所述多个处理元件将通过相应传入操作对象集 合到达所述多个处理元件的每个所述数据流操作器处而执行第二操作。
在另一实施例中,一种装置包括多个处理元件之间的数据路径装置; 以及所述多个处理元件之间的流控制路径装置,其中所述数据路径装置和 所述流控制路径装置将接收包括多个节点的数据流图的输入,所述数据流 图将被覆盖到所述数据路径装置、所述流控制路径装置和所述多个处理元 件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且 所述多个处理元件将通过相应传入操作对象集合到达所述多个处理元件的 每个所述数据流操作器处而执行第二操作。
在一个实施例中,一种处理器包括核心,所述核心具有解码器来将指 令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一 操作;以及处理元件的阵列来接收包括多个节点的数据流图的输入,其中 所述数据流图将被覆盖到所述处理元件的阵列中,其中每个节点被表示为 所述处理元件的阵列中的数据流操作器,并且所述处理元件的阵列将在传 入操作对象集合到达所述处理元件的阵列时执行第二操作。所述处理元件 的阵列可直到所述传入操作对象集合到达所述处理元件的阵列并且所述处 理元件的阵列中的存储可用于所述第二操作的输出才执行所述第二操作。 所述处理元件的阵列可包括网络(或者(一个或多个)通道)来将数据流 令牌和控制令牌运载到多个数据流操作器。所述第二操作可包括存储器访 问并且所述处理元件的阵列可包括存储器访问数据流操作器,该存储器访 问数据流操作器将直到从逻辑上在前的数据流操作器接收到存储器依从性 令牌才执行所述存储器访问。每个处理元件可只执行所述数据流图的一个 或两个操作。
在另一实施例中,一种方法包括利用处理器的核心的解码器将指令解 码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令 以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图 覆盖到所述处理器的处理元件的阵列中,其中每个节点被表示为所述处理 元件的阵列中的数据流操作器;并且当传入操作对象集合到达所述处理元 件的阵列时利用所述处理元件的阵列执行所述数据流图的第二操作。所述 处理元件的阵列可直到所述传入操作对象集合到达所述处理元件的阵列并 且所述处理元件的阵列中的存储可用于所述第二操作的输出才执行所述第 二操作,。所述处理元件的阵列可包括将数据流令牌和控制令牌运载到多 个数据流操作器的网络。所述第二操作可包括存储器访问并且所述处理元 件的阵列包括存储器访问数据流操作器,该存储器访问数据流操作器将直 到从逻辑上在前的数据流操作器接收到存储器依从性令牌才执行所述存储 器访问。每个处理元件可只执行所述数据流图的一个或两个操作。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代 码当被机器执行时使得所述机器执行一种方法,该方法包括利用处理器的 核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单 元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的 输入;将所述数据流图覆盖到所述处理器的处理元件的阵列中,其中每个 节点被表示为所述处理元件的阵列中的数据流操作器;并且当传入操作对 象集合到达所述处理元件的阵列时利用所述处理元件的阵列执行所述数据 流图的第二操作。所述处理元件的阵列可直到所述传入操作对象集合到达 所述处理元件的阵列并且所述处理元件的阵列中的存储可用于所述第二操 作的输出为止才执行所述第二操作。所述处理元件的阵列可包括将数据流 令牌和控制令牌运载到多个数据流操作器的网络。所述第二操作可包括存 储器访问并且所述处理元件的阵列包括存储器访问数据流操作器,该存储 器访问数据流操作器将直到从逻辑上在前的数据流操作器接收到存储器依 从性令牌为止才执行所述存储器访问。每个处理元件可只执行所述数据流 图的一个或两个操作。
在另一实施例中,一种处理器包括核心,所述核心具有解码器来将指 令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一 操作;以及用于接收包括多个节点的数据流图的输入的装置,其中所述数 据流图将被覆盖到所述装置中,其中每个节点被表示为所述装置中的数据 流操作器,并且所述装置将在传入操作对象集合到达所述装置时执行第二 操作。
在一个实施例中,一种处理器包括核心,所述核心具有解码器来将指 令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一 操作;多个处理元件;以及所述多个处理元件之间的互连网络来接收包括 多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述互连网络 和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数 据流操作器,并且所述多个处理元件将在传入操作对象集合到达所述多个 处理元件时执行第二操作。所述处理器还可包括多个配置控制器,每个配 置控制器耦合到所述多个处理元件的相应子集,并且每个配置控制器将从 存储加载配置信息并且根据所述配置信息引起所述多个处理元件的相应子 集的耦合。所述处理器可包括多个配置缓存,并且每个配置控制器耦合到 相应的配置缓存以为所述多个处理元件的相应子集取得所述配置信息。由 所述执行单元执行的所述第一操作可将配置信息预取到所述多个配置缓存 的每一者中。所述多个配置控制器的每一者可包括重配置电路来在从所述 多个处理元件的相应子集的至少一个处理元件接收到配置差错消息时为所 述至少一个处理元件引起重配置。所述多个配置控制器的每一者可包括重 配置电路来在接收到重配置请求消息时为所述多个处理元件的相应子集引 起重配置,并且禁止与所述多个处理元件的相应子集的通信,直到所述重 配置完成为止。所述处理器可包括多个异常聚合器,并且每个异常聚合器 耦合到所述多个处理元件的相应子集以从所述多个处理元件的相应子集收集异常并且将所述异常转发到所述核心以便检修。所述处理器可包括多个 提取控制器,每个提取控制器耦合到所述多个处理元件的相应子集,并且 每个提取控制器将使得来自所述多个处理元件的相应子集的状态数据被保 存到存储器。
在另一实施例中,一种方法包括利用处理器的核心的解码器将指令解 码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令 以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图 覆盖到所述处理器的多个处理元件和所述处理器的多个处理元件之间的互 连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器; 并且当传入操作对象集合到达所述多个处理元件时利用所述互连网络和所 述多个处理元件执行所述数据流图的第二操作。所述方法可包括为所述多 个处理元件的相应子集从存储加载配置信息并且根据所述配置信息为所述 多个处理元件的每个相应子集引起耦合。所述方法可包括为所述多个处理 元件的相应子集从多个配置缓存中的相应配置缓存取得所述配置信息。由 所述执行单元执行的所述第一操作可以是将配置信息预取到所述多个配置 缓存的每一者中。所述方法可包括在从所述多个处理元件的相应子集的至 少一个处理元件接收到配置差错消息时为所述至少一个处理元件引起重配置。所述方法可包括在接收到重配置请求消息时为所述多个处理元件的相 应子集引起重配置;并且禁止与所述多个处理元件的相应子集的通信,直 到所述重配置完成为止。所述方法可包括从所述多个处理元件的相应子集 收集异常;并且将所述异常转发到所述核心以便检修。所述方法可包括使 得来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代 码当被机器执行时使得所述机器执行一种方法,该方法包括利用处理器的 核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单 元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的 输入;将所述数据流图覆盖到所述处理器的多个处理元件和所述处理器的 多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元 件中的数据流操作器;并且当传入操作对象集合到达所述多个处理元件时 利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所 述方法可包括为所述多个处理元件的相应子集从存储加载配置信息并且根 据所述配置信息为所述多个处理元件的每个相应子集引起耦合。所述方法 可包括为所述多个处理元件的相应子集从多个配置缓存中的相应配置缓存 取得所述配置信息。由所述执行单元执行的所述第一操作可以是将配置信 息预取到所述多个配置缓存的每一者中。所述方法可包括在从所述多个处 理元件的相应子集的至少一个处理元件接收到配置差错消息时为所述至少 一个处理元件引起重配置。所述方法可包括在接收到重配置请求消息时为 所述多个处理元件的相应子集引起重配置;并且禁止与所述多个处理元件 的相应子集的通信,直到所述重配置完成为止。所述方法可包括从所述多 个处理元件的相应子集收集异常;并且将所述异常转发到所述核心以便检 修。所述方法可包括使得来自所述多个处理元件的相应子集的状态数据被 保存到存储器。
在另一实施例中,一种处理器包括核心,所述核心具有解码器来将指 令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一 操作;多个处理元件;以及所述多个处理元件之间的装置来接收包括多个 节点的数据流图的输入,其中所述数据流图将被覆盖到所述装置和所述多 个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作 器,并且所述多个处理元件将在传入操作对象集合到达所述多个处理元件 时执行第二操作。
在一个实施例中,一种装置(例如,一种处理器)包括:处理元件的 空间阵列,包括通信网络来接收包括多个节点的数据流图的输入,其中所 述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示 为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间 阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操 作;耦合到所述处理元件的空间阵列和缓存存储器的多个请求地址文件电 路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自 所述处理元件的空间阵列的对数据访问的请求而访问所述缓存存储器中的 数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中 的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及转 化后备缓冲器管理器电路,包括比所述多个转化后备缓冲器更高级别的转 化后备缓冲器,所述转化后备缓冲器管理器电路将为到第一转化后备缓冲 器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失在所述 缓存存储器中执行第一页游走以确定映射到所述虚拟地址的物理地址,将 来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述更 高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理 地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述转 化后备缓冲器管理器电路可与所述第一页游走同时地在所述缓存存储器中 执行第二页游走,其中所述第二页游走是对于到第二转化后备缓冲器中和 到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映 射到所述虚拟地址的物理地址,将来自所述第二页游走的所述虚拟地址到 所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更 高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的 所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物理 地址可使得所述第一请求地址文件电路在所述缓存存储器中在所述物理地址上为来自所述处理元件的空间阵列的所述对数据访问的请求执行数据访 问。所述转化后备缓冲器管理器电路可为所述第一转化后备缓冲器和所述 更高级别转化后备缓冲器中的所述虚拟地址的输入的错失在所述更高级别 转化后备缓冲器中***指示符以防止在所述第一页游走期间对于所述虚拟 地址的输入的额外页游走。所述转化后备缓冲器管理器电路对于物理地址 到虚拟地址的映射可从请求实体接收击落消息,在所述更高级别转化后备 缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中的在相 应的转化后备缓冲器中包括所述映射的拷贝的那些发送击落消息,其中所 述多个请求地址文件电路中的那些之中的每一者将向所述转化后备缓冲器 管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有 确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述转化 后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收 击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且向所 有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件 电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所 述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求 实体发送击落完成确认消息。
在另一实施例中,一种方法包括将包括多个节点的数据流图的输入覆 盖到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为所述 处理元件的空间阵列中的数据流操作器;将多个请求地址文件电路耦合到 所述处理元件的空间阵列和缓存存储器,其中所述多个请求地址文件电路 中的每个请求地址文件电路响应于来自所述处理元件的空间阵列的对数据 访问的请求而访问所述缓存存储器中的数据;对于到多个转化后备缓冲器 中的一转化后备缓冲器的虚拟地址的输入提供物理地址的输出,所述多个 转化后备缓冲器包括所述多个请求地址文件电路的每一者中的转化后备缓 冲器;将包括比所述多个转化后备缓冲器更高级别的转化后备缓冲器的转 化后备缓冲器管理器电路耦合到所述多个请求地址文件电路和所述缓存存 储器;并且利用所述转化后备缓冲器管理器电路为到第一转化后备缓冲器 中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失在所述缓 存存储器中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述更高 级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地 址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述方法 可包括利用所述转化后备缓冲器管理器电路与所述第一页游走同时地在所 述缓存存储器中执行第二页游走,其中所述第二页游走是对于到第二转化 后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错 失的,以确定映射到所述虚拟地址的物理地址,并且将来自所述第二页游 走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓 冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第二请 求地址文件电路中的所述第二转化后备缓冲器。所述方法可包括响应于在 所述第一转化后备缓冲器中接收到所述物理地址而使得所述第一请求地址 文件电路在所述缓存存储器中在所述物理地址上为来自所述处理元件的空 间阵列的所述对数据访问的请求执行数据访问。所述方法可包括利用所述 转化后备缓冲器管理器电路为所述第一转化后备缓冲器和所述更高级别转 化后备缓冲器中的所述虚拟地址的输入的错失在所述更高级别转化后备缓 冲器中***指示符以防止在所述第一页游走期间对于所述虚拟地址的输入 的额外页游走。所述方法可包括利用所述转化后备缓冲器管理器电路对于 物理地址到虚拟地址的映射从请求实体接收击落消息,在所述更高级别转 化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中的在相应的转化后备缓冲器中包括所述映射的拷贝的那些发送击落消息, 其中所述多个请求地址文件电路中的那些之中的每一者将向所述转化后备 缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将 在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所 述方法可包括利用所述转化后备缓冲器管理器电路对于物理地址到虚拟地 址的映射从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使 所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其 中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电 路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息 都被接收到时向所述请求实体发送击落完成确认消息。
在另一实施例中,一种装置包括处理元件的空间阵列,所述处理元件 的空间阵列包括通信网络来接收包括多个节点的数据流图的输入,其中所 述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示 为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间 阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操 作;耦合到所述处理元件的空间阵列和多个缓存存储器堆的多个请求地址 文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应 于来自所述处理元件的空间阵列的对数据访问的请求而访问所述多个缓存 存储器堆(例如,其每一者)中的数据;多个转化后备缓冲器,包括所述 多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的 输入提供物理地址的输出;多个比所述多个转化后备缓冲器更高级别的转 化后备缓冲器,包括所述多个缓存存储器堆的每一者中的更高级别转化后 备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及转化后备缓 冲器管理器电路,来为到第一转化后备缓冲器中和到第一更高级别转化后 备缓冲器中的虚拟地址的输入的错失在所述多个缓存存储器堆中执行第一 页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的 所述虚拟地址到所述物理地址的映射存储在所述第一更高级别转化后备缓 冲器中以使得所述第一更高级别转化后备缓冲器将所述物理地址发送到第 一请求地址文件电路中的所述第一转化后备缓冲器。所述转化后备缓冲器 管理器电路可与所述第一页游走同时地在所述多个缓存存储器堆中执行第 二页游走,其中所述第二页游走是对于到第二转化后备缓冲器中和到第二 更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所 述虚拟地址的物理地址,将来自所述第二页游走的所述虚拟地址到所述物 理地址的映射存储在所述第二更高级别转化后备缓冲器中以使得所述第二 更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物 理地址可使得所述第一请求地址文件电路在所述多个缓存存储器堆中在所 述物理地址上为来自所述处理元件的空间阵列的所述对数据访问的请求执 行数据访问。所述转化后备缓冲器管理器电路可为所述第一转化后备缓冲 器和所述第一更高级别转化后备缓冲器中的所述虚拟地址的输入的错失在 所述第一更高级别转化后备缓冲器中***指示符以防止在所述第一页游走 期间对于所述虚拟地址的输入的额外页游走。所述转化后备缓冲器管理器 电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在存储 所述映射的更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多 个请求地址文件电路中的在相应的转化后备缓冲器中包括所述映射的拷贝 的那些发送击落消息,其中所述多个请求地址文件电路中的那些之中的每 一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后 备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送 击落完成确认消息。所述转化后备缓冲器管理器电路对于物理地址到虚拟 地址的映射可从请求实体接收击落消息,在存储所述映射的更高级别转化 后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发 送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备 缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将 在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另外一个实施例中,一种方法包括:将包括多个节点的数据流图的 输入覆盖到包括通信网络的处理元件的空间阵列中,其中每个节点被表示 为所述处理元件的空间阵列中的数据流操作器;将多个请求地址文件电路 耦合到所述处理元件的空间阵列和多个缓存存储器堆,其中所述多个请求 地址文件电路中的每个请求地址文件电路响应于来自所述处理元件的空间 阵列的对数据访问的请求而访问所述多个缓存存储器堆中的数据;
对于到多个转化后备缓冲器中的一转化后备缓冲器的虚拟地址的输入 提供物理地址的输出,所述多个转化后备缓冲器包括所述多个请求地址文 件电路的每一者中的转化后备缓冲器;对于到多个更高级别转化后备缓冲 器中的比所述多个转化后备缓冲器更高级别的转化后备缓冲器的虚拟地址 的输入提供物理地址的输出,所述多个更高级别转化后备缓冲器包括所述 多个缓存存储器堆的每一者中的更高级别转化后备缓冲器;将转化后备缓 冲器管理器电路耦合到所述多个请求地址文件电路和所述多个缓存存储器 堆;并且利用所述转化后备缓冲器管理器电路为到第一转化后备缓冲器中 和到第一更高级别转化后备缓冲器中的虚拟地址的输入的错失在所述多个 缓存存储器堆中执行第一页游走以确定映射到所述虚拟地址的物理地址, 将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述 第一更高级别转化后备缓冲器中以使得所述第一更高级别转化后备缓冲器 将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述方法可包括利用所述转化后备缓冲器管理器电路与所述第一页游 走同时地在所述多个缓存存储器堆中执行第二页游走,其中所述第二页游 走是对于到第二转化后备缓冲器中和到第二更高级别转化后备缓冲器中的 虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,并且 将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述 第二更高级别转化后备缓冲器中以使得所述第二更高级别转化后备缓冲器 将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲 器。所述方法可包括响应于在所述第一转化后备缓冲器中接收到所述物理 地址而使得所述第一请求地址文件电路在所述多个缓存存储器堆中在所述 物理地址上为来自所述处理元件的空间阵列的所述对数据访问的请求执行 数据访问。所述方法可包括利用所述转化后备缓冲器管理器电路为所述第 一转化后备缓冲器和所述第一更高级别转化后备缓冲器中的所述虚拟地址 的输入的错失在所述第一更高级别转化后备缓冲器中***指示符以防止在 所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述方法可 包括利用所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射 从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中 使所述映射无效,并且仅向所述多个请求地址文件电路中的在相应的转化 后备缓冲器中包括所述映射的拷贝的那些发送击落消息,其中所述多个请 求地址文件电路中的那些之中的每一者将向所述转化后备缓冲器管理器电 路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息 都被接收到时向所述请求实体发送击落完成确认消息。所述方法可包括利 用所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射从请求 实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述 映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所 述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发 送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被 接收到时向所述请求实体发送击落完成确认消息。
在另一实施例中,一种***包括核心,所述核心具有解码器来将指令 解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操 作;处理元件的空间阵列,包括通信网络来接收包括多个节点的数据流图 的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中 每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述 处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操 作器处而执行第二操作;耦合到所述处理元件的空间阵列和缓存存储器的 多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文 件电路将响应于来自所述处理元件的空间阵列的对数据访问的请求而访问 所述缓存存储器中的数据;多个转化后备缓冲器,包括所述多个请求地址 文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理 地址的输出;以及转化后备缓冲器管理器电路,包括比所述多个转化后备 缓冲器更高级别的转化后备缓冲器,所述转化后备缓冲器管理器电路将为 到第一转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址 的输入的错失在所述缓存存储器中执行第一页游走以确定映射到所述虚拟 地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址 的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后 备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化 后备缓冲器。所述转化后备缓冲器管理器电路可与所述第一页游走同时地 在所述缓存存储器中执行第二页游走,其中所述第二页游走是对于到第二 转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入 的错失的,以确定映射到所述虚拟地址的物理地址,将来自所述第二页游 走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓 冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第二请 求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物理地址可使得所述第一请求地址文件电路在所述缓存存 储器中在所述物理地址上为来自所述处理元件的空间阵列的所述对数据访 问的请求执行数据访问。所述转化后备缓冲器管理器电路可为所述第一转 化后备缓冲器和所述更高级别转化后备缓冲器中的所述虚拟地址的输入的 错失在所述更高级别转化后备缓冲器中***指示符以防止在所述第一页游 走期间对于所述虚拟地址的输入的额外页游走。所述转化后备缓冲器管理 器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在所 述更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地 址文件电路中的在相应的转化后备缓冲器中包括所述映射的拷贝的那些发 送击落消息,其中所述多个请求地址文件电路中的那些之中的每一者将向 所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器 管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成 确认消息。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映 射可从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述 映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所 述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发 送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被 接收到时向所述请求实体发送击落完成确认消息。
在另外一个实施例中,一种***包括核心,所述核心具有解码器来将 指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第 一操作;处理元件的空间阵列,包括通信网络来接收包括多个节点的数据 流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中, 其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且 所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据 流操作器处而执行第二操作;耦合到所述处理元件的空间阵列和多个缓存 存储器堆的多个请求地址文件电路,所述多个请求地址文件电路中的每个 请求地址文件电路将响应于来自所述处理元件的空间阵列的对数据访问的 请求而访问所述多个缓存存储器堆(例如,其每一者)中的数据;多个转 化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓 冲器,用来为虚拟地址的输入提供物理地址的输出;多个比所述多个转化 后备缓冲器更高级别的转化后备缓冲器,包括所述多个缓存存储器堆的每 一者中的更高级别转化后备缓冲器,用来为虚拟地址的输入提供物理地址 的输出;以及转化后备缓冲器管理器电路,来为到第一转化后备缓冲器中 和到第一更高级别转化后备缓冲器中的虚拟地址的输入的错失在所述多个 缓存存储器堆中执行第一页游走以确定映射到所述虚拟地址的物理地址, 将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述 第一更高级别转化后备缓冲器中以使得所述第一更高级别转化后备缓冲器 将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲 器。所述转化后备缓冲器管理器电路可与所述第一页游走同时地在所述多 个缓存存储器堆中执行第二页游走,其中所述第二页游走是对于到第二转 化后备缓冲器中和到第二更高级别转化后备缓冲器中的虚拟地址的输入的 错失的,以确定映射到所述虚拟地址的物理地址,将来自所述第二页游走 的所述虚拟地址到所述物理地址的映射存储在所述第二更高级别转化后备缓冲器中以使得所述第二更高级别转化后备缓冲器将所述物理地址发送到 第二请求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后 备缓冲器中接收到所述物理地址可使得所述第一请求地址文件电路在所述 多个缓存存储器堆中在所述物理地址上为来自所述处理元件的空间阵列的 所述对数据访问的请求执行数据访问。所述转化后备缓冲器管理器电路可 为所述第一转化后备缓冲器和所述第一更高级别转化后备缓冲器中的所述 虚拟地址的输入的错失在所述第一更高级别转化后备缓冲器中***指示符 以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所 述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实 体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映 射无效,并且仅向所述多个请求地址文件电路中的在相应的转化后备缓冲 器中包括所述映射的拷贝的那些发送击落消息,其中所述多个请求地址文 件电路中的那些之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收 到时向所述请求实体发送击落完成确认消息。所述转化后备缓冲器管理器 电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在存储 所述映射的更高级别转化后备缓冲器中使所述映射无效,并且向所有所述 多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的 每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化 后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发 送击落完成确认消息。
在另一实施例中,一种装置(例如,一种处理器)包括:处理元件的 空间阵列,包括通信网络来接收包括多个节点的数据流图的输入,其中所 述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示 为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间 阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操 作;耦合到所述处理元件的空间阵列和缓存存储器的多个请求地址文件电 路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自 所述处理元件的空间阵列的对数据访问的请求而访问所述缓存存储器中的 数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中 的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及包 括比所述多个转化后备缓冲器更高级别的转化后备缓冲器的装置,所述装 置将为到第一转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚 拟地址的输入的错失在所述缓存存储器中执行第一页游走以确定映射到所 述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物 理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别 转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第 一转化后备缓冲器。
在另外一个实施例中,一种装置包括处理元件的空间阵列,所述处理 元件的空间阵列包括通信网络来接收包括多个节点的数据流图的输入,其 中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被 表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的 空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执 行操作;耦合到所述处理元件的空间阵列和多个缓存存储器堆的多个请求 地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将 响应于来自所述处理元件的空间阵列的对数据访问的请求而访问所述多个 缓存存储器堆(例如,其每一者)中的数据;多个转化后备缓冲器,包括 所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地 址的输入提供物理地址的输出;多个比所述多个转化后备缓冲器更高级别 的转化后备缓冲器,包括所述多个缓存存储器堆的每一者中的更高级别转 化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及用于进 行以下操作的装置:为到第一转化后备缓冲器中和到第一更高级别转化后 备缓冲器中的虚拟地址的输入的错失在所述多个缓存存储器堆中执行第一 页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的 所述虚拟地址到所述物理地址的映射存储在所述第一更高级别转化后备缓 冲器中以使得所述第一更高级别转化后备缓冲器将所述物理地址发送到第 一请求地址文件电路中的所述第一转化后备缓冲器。
在另一实施例中,一种装置包括存储代码的数据存储设备,所述代码 当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一 种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代 码当被机器执行时使得所述机器执行一种方法,该方法包括本文公开的任 何方法。
指令集(例如,供核心执行)可包括一个或多个指令格式。给定的指 令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行 的操作(例如,操作码)和要对其执行该操作的(一个或多个)操作对象 和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式 通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通 常是按相同顺序的,但至少一些可具有不同的比特位置,因为包括的字段 更少)和/或被定义为使得给定的字段被以不同方式解读。从而,ISA的每 个指令被利用给定的指令格式来表达(并且如果定义了的话,被以该指令 格式的指令模板中的给定一个来表达)并且包括用于指定操作和操作对象 的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令 格式包括操作码字段来指定该操作码和操作对象字段来选择操作对象(源 1/目的地和源2);并且此ADD指令在指令流中的出现在选择特定操作对 象的操作对象字段中将具有特定内容。被称为高级向量扩展(Advanced Vector Extensions,AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extensions,VEX)编码方案的一组SIMD扩展已被发布和/或发表(例如, 参见2016年6月发布的
Figure BDA0002512929450001721
64和IA-32体系结构软件开发者指南;以及 参见2016年2月发布的
Figure BDA0002512929450001722
体系结构指令集扩展编程参考)。
示范性指令格式
本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外, 下文详述了示范性***、体系结构和管线。(一个或多个)指令的实施例 可被在这种***、体系结构和管线上执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定 于向量操作的字段)。虽然描述了其中通过向量友好指令格式支持向量和 标量操作两者的实施例,但替换实施例只使用向量操作向量友好指令格式。
图99A-99B是图示出根据本公开的实施例的通用向量友好指令格式及 其指令模板的框图。图99A是根据本公开的实施例图示出通用向量友好指 令格式及其类别A指令模板的框图;而图99B是图示出根据本公开的实施 例的图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言, 对于通用向量友好指令格式9900定义了类别A和类别B指令模板,这两 个指令模板都包括无存储器访问9905指令模板和存储器访问9920指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被 绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下项目的本公开的实施例: 64字节向量操作对象长度(或大小),具有32比特(4字节)或64比特 (8字节)数据元素宽度(或大小)(从而,64字节向量由16个双字大小 元素或者8个四字大小元素构成);64字节向量操作对象长度(或大小), 具有16比特(2字节)或8比特(1字节)数据元素宽度(或大小);32 字节向量操作对象长度(或大小),具有32比特(4字节)、64比特(8 字节)、16比特(2字节)或者8比特(1字节)数据元素宽度(或大小); 以及16字节向量操作对象长度(或大小),具有32比特(4字节)、64 比特(8字节)、16比特(2字节)或者8比特(1字节)数据元素宽度 (或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度 (例如,128比特(16字节)数据元素宽度)的更多、更少和/或不同的向 量操作对象大小(例如,256字节向量操作对象)。
图99A中的类别A指令模板包括:1)在无存储器访问9905指令模板 内,示出了无存储器访问、完全舍入控制型操作9910指令模板和无存储器 访问、数据变换型操作9915指令模板;以及2)在存储器访问9920指令模 板内,示出了存储器访问、暂态9925指令模板和存储器访问、非暂态9930 指令模板。图99B中的类别B指令模板包括:1)在无存储器访问9905指 令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作 9912指令模板和无存储器访问、写入掩码控制、vsize型操作9917指令模 板;以及2)在存储器访问9920指令模板内,示出了存储器访问、写入掩 码控制9927指令模板。
通用向量友好指令格式9900包括下面按图99A-99B中所示的顺序列出 的以下字段。
格式字段9940–此字段中的特定值(指令格式标识符值)唯一地标识 向量友好指令格式,从而标识采取向量友好指令格式的指令在指令流中的 出现。这样一来,此字段是可选的,因为它对于只具有通用向量友好指令 格式的指令集是不需要的。
基本操作字段9942–其内容区分不同的基本操作。
寄存器索引字段9944–其内容直接地或者通过地址生成指定源和目的 地操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分 数目的比特来从P×Q(例如,32×512、16×128、32×1024、64×1024)寄存 器文件中选择N个寄存器。虽然在一个实施例中N可最多达三个源和一个 目的地寄存器,但替换实施例可支持更多或更少的源和目的地寄存器(例 如,可支持最多达两个源,其中这些源之一也充当目的地,可支持最多达三个源,其中这些源之一也充当目的地,可支持最多达两个源和一个目的 地)。
修饰字段9946–其内容区分通用向量指令格式中的指定存储器访问的 指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访 问9905指令模板和存储器访问9920指令模板。存储器访问操作读取和/或 写入到存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目的 地地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如, 源和目的地是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同 的方式来执行存储器地址计算。
增强操作字段9950–其内容区分除了基本操作以外还要执行多种不同 操作中的哪一种。此字段是依情境而定的。在本公开的一个实施例中,此 字段被划分成类别字段9968、阿尔法(α)字段9952和贝塔(β)字段 9954。增强操作字段9950允许了在单个指令而不是2、3或4个指令中执 行共同操作群组。
缩放比例字段9960–其内容允许了缩放索引字段的内容以进行存储器 地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段9962A–其内容被用作存储器地址生成的一部分(例如,对 于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段9962B(注意将位移字段9962A并置在位移因子字段 9962B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一 部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存 储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+缩放的 位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的 最终位移。N的值由处理器硬件在运行时基于完整操作码字段9974(本文 中稍后描述)和数据操纵字段9954C来确定。位移字段9962A和位移因子 字段9962B是可选的,因为它们不被用于无存储器访问9905指令模板,和 /或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段9964–其内容区分若干个数据元素宽度中的哪一个 将被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令 中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或利 用操作码的某个方面来支持数据元素宽度则不需要它。
写入掩码字段9970–其内容基于每个数据元素位置控制目的地向量操 作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A 指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归 零-写入掩蔽两者。当合并时,向量掩码允许了目的地中的任何元素集合被 保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在 另外一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,归零向量掩码允许了目的地中的任何元素集合在任何操作 (由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目 的地中的元素在相应的掩码比特具有0值时被设置到0。此功能的子集是 控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最 后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码 字段9970允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然 描述了其中写入掩码字段9970的内容选择若干个写入掩码寄存器中包含要 使用的写入掩码的那一个(从而写入掩码字段9970的内容间接标识要执行 的掩蔽)的本公开的实施例,但替换实施例作为替代或附加允许掩码写入 字段9970的内容直接指定要执行的掩蔽。
即时字段9972–其内容允许对即时(immediate)的指定。此字段是可 选的,因为在不支持即时的通用向量友好格式的实现方式中其不存在并且 在不使用即时的指令中其不存在。
类别字段9968–其内容区分指令的不同类别。参考图99A-99B,此字 段的内容在类别A和类别B指令之间进行选择。在图99A-99B中,圆角方 形用于指示特定的值存在于一字段中(例如,图99A-99B中分别用于类别 字段9968的类别A 9968A和类别B 9968B)。
类别A的指令模板
在类别A的非存储器访问9905指令模板的情况下,阿尔法字段9952 被解读为RS字段9952A,其内容区分不同的增强操作类型中的哪一个要 被执行(例如,对于无存储器访问舍入型操作9910和无存储器访问数据变 换型操作9915指令模板分别指定舍入9952A.1和数据变换9952A.2),而 贝塔字段9954区分指定类型的操作中的哪一个要被执行。在无存储器访问 9905指令模板中,缩放比例字段9960、位移字段9962A和位移缩放比例字 段9962B不存在。
无存储器访问指令模板–完全舍入控制型操作
在无存储器访问完全舍入控制型操作9910指令模板中,贝塔字段9954 被解读为舍入控制字段9954A,其(一个或多个)内容提供静态舍入。虽 然在本公开的描述实施例中舍入控制字段9954A包括抑制所有浮点异常 (suppress all floating pointexceptions,SAE)字段9956和舍入操作控制字 段9958,但替换实施例可支持可将这两个概念都编码到同一字段中或者可 只具有这些概念/字段中的一者或另一者(例如,可只具有舍入操作控制字 段9958)。
SAE字段9956–其内容区分是否禁用异常事件报告;当SAE字段9956 的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并 且不引发任何浮点异常处理程序。
舍入操作控制字段9958–其内容区分要执行一组舍入操作中的哪一个 (例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操 作控制字段9958允许了基于每个指令改变舍入模式。在处理器包括用于指 定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段 9950的内容重写该寄存器值。
无存储器访问指令模板–数据变换型操作
在无存储器访问数据变换型操作9915指令模板中,贝塔字段9954被 解读为数据变换字段9954B,其内容区分若干个数据变换中的哪一个要被 执行(例如,无数据变换、调配(swizzle)、广播)。
在类别A的存储器访问9920指令模板的情况下,阿尔法字段9952被 解读为逐出提示字段9952B,其内容区分要使用逐出提示中的哪一个(在 图99A中,对于存储器访问暂态9925指令模板和存储器访问非暂态9930 指令模板分别指定暂态9952B.1和非暂态9952B.2),而贝塔字段9954被 解读为数据操纵字段9954C,其内容区分若干个数据操纵操作(也称为基 元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目 的地的向下转换)。存储器访问9920指令模板包括缩放比例字段9960, 并且可选地包括位移字段9962A或者位移缩放比例字段9962B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带 有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式 从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量 掩码的内容来规定。
存储器访问指令模板–暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而, 这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略 该提示。
存储器访问指令模板–非暂态
非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓 存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提 示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段9952被解读为写入掩码控 制(Z)字段9952C,其内容区分由写入掩码字段9970控制的写入掩蔽应 当是合并还是归零。
在类别B的非存储器访问9905指令模板的情况下,贝塔字段9954的 一部分被解读为RL字段9957A,其内容区分不同的增强操作类型中的哪 一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制 型操作9912指令模板和无存储器访问、写入掩码控制、VSIZE型操作9917 指令模板分别指定舍入9957A.1和向量长度(VSIZE)9957A.2),而贝塔 字段9954的其余部分区分指定类型的操作中的哪一个要被执行。在无存储 器访问9905指令模板中,缩放比例字段9960、位移字段9962A和位移缩 放比例字段9962B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作9910指令模板 中,贝塔字段9954的其余部分被解读为舍入操作字段9959A并且异常事件 报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何 浮点异常处理程序)。
舍入操作控制字段9959A–正如舍入操作控制字段9958一样,其内容 区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零 舍入和朝最近舍入)。从而,舍入操作控制字段9959A允许了在逐指令的 基础上改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本 公开的一个实施例中,舍入操作控制字段9950的内容重写该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作9917指令模板中,贝 塔字段9954的其余部分被解读为向量长度字段9959B,其内容区分要在若 干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问9920指令模板的情况下,贝塔字段9954的一 部分被解读为广播字段9957B,其内容区分是否要执行广播型数据操纵操 作,而贝塔字段9954的其余部分被解读为向量长度字段9959B。存储器访 问9920指令模板包括缩放比例字段9960,并且可选地包括位移字段9962A 或者位移缩放比例字段9962B。
对于通用向量友好指令格式9900,完整操作码字段9974被示为包括 格式字段9940、基本操作字段9942和数据元素宽度字段9964。虽然示出 了其中完整操作码字段9974包括所有这些字段的一个实施例,但完整操作 码字段9974在不支持所有这些字段的实施例中并不包括所有这些字段。完 整操作码字段9974提供操作代码(操作码)。
增强操作字段9950、数据元素宽度字段9964和写入掩码字段9970允 许了在通用向量友好指令格式中在逐指令的基础上指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它 们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。 在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持 类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高 性能通用无序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量) 计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者(当 然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别 的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可 包括多个核心,所有这些核心都支持相同类别或者其中不同的核心支持不 同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用 于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一 个或多个可以是具有只支持类别B的打算用于通用计算的具有无序执行和 寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可 包括支持类别A和类别B两者的一个或多个通用有序或无序核心。当然, 在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。 以高级别语言编写的程序将被置于(例如,被即时编译或静态编译到)多 种不同的可执行形式中,包括:1)只具有由目标处理器支持的(一个或 多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的 不同组合编写的替换例程并且具有基于当前正执行代码的处理器所支持的 指令来选择要执行的例程的控制流程代码的形式。
示范性特定向量友好指令格式
图100是根据本公开的实施例图示出示范性特定向量友好指令格式的 框图。图100示出了在如下意义上特定的特定向量友好指令格式10000: 其指定字段的位置、大小、解读和顺序,以及这些字段中的一些字段的值。 特定向量友好指令格式10000可被用于扩展x86指令集,从而字段中的一 些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。 此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。图示出了 来自图100的字段所映射到的来自图99的字段。
应当理解,虽然出于说明目的在通用向量友好指令格式9900的情境中 参考特定向量友好指令格式10000描述了本公开的实施例,但除非有声明, 否则本公开不限于特定向量友好指令格式10000。例如,通用向量友好指 令格式9900对于各种字段设想了多种可能的大小,而特定向量友好指令格 式10000被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度 字段9964在特定向量友好指令格式10000中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式9900设想了数据元素宽度字 段9964的其他大小)。
通用向量友好指令格式9900包括按图100A中所示的顺序的下面列出 的以下字段。
EVEX前缀(字节0-3)10002–被编码为四字节形式。
格式字段9940(EVEX字节0,比特[7:0])-第一字节(EVEX字节0) 是格式字段9940并且其包含0x62(在本公开的一个实施例中用于区分向 量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字 段。
REX字段10005(EVEX字节1,比特[7-5])-由EVEX.R比特字段 (EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特 [6]–X)和9957BEX字节1,比特[5]–B)构成。EVEX.R、EVEX.X和 EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码(1的补码)形式来编码,即ZMM0被编码为1211B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个 比特编码(rrr、xxx和bbb),从而可通过添加EVEX.R、EVEX.X和 EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段9910–这是REX’字段9910的第一部分并且是用于对扩展 32寄存器集合的高16或低16编码的EVEX.R’比特字段(EVEX字节1, 比特[4]-R’)。在本公开的一个实施例中,此比特以及如下所示的其他比 特被以比特反转格式来存储以与BOUND指令相区分(在公知的x86 32比 特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字 段(下文描述)中接受MOD字段中的值11;本公开的替换实施例不以反 转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器编 码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其 他RRR形成的。
操作码映射字段10015(EVEX字节1,比特[3:0]–mmmm)–其内容 编码了暗示的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段9964(EVEX字节2,比特[7]–W)-由符号 EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数 据元素或64比特数据元素)。
EVEX.vvvv 10020(EVEX字节2,比特[6:3]-vvvv)-EVEX.vvvv的作 用可包括以下的:1)EVEX.vvvv编码了以反转(反码)形式指定的第一 源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效 的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目的地寄 存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被保留并且应当包含1211b。从而,EVEX.vvvv字段10020编码了以反转(反码) 形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的 不同EVEX比特字段被用于将指定符大小扩展到32寄存器。
EVEX.U 9968类别字段(EVEX字节2,比特[2]-U)–如果EVEX.U= 0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B或者 EVEX.U1。
前缀编码字段10025(EVEX字节2,比特[1:0]-pp)–为基本操作字段 提供额外比特。除了对于采取EVEX前缀格式的传统SSE指令提供支持以 外,这还具有使SIMD前缀紧凑的益处(不同于要求一字节来表达SIMD 前缀,EVEX前缀只要求2个比特)。在一个实施例中,为了支持采取传 统格式和采取EVEX前缀格式两者的使用SIMD前缀(66H、F2H、F3H) 的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中; 并且在运行时被扩展成传统SIMD前缀,然后才被提供到解码器的PLA (因此PLA可执行这些传统指令的传统和EVEX格式两者,而无需修改)。 虽然更新的指令可直接使用EVEX前缀编码字段的内容作为操作码扩展, 但某些实施例为了一致性以类似的方式扩展,但允许这些传统SIMD前缀 指定不同的含义。替换实施例可重设计PLA来支持2比特SIMD前缀编码, 从而不要求扩展。
阿尔法字段9952(EVEX字节3,比特[7]–EH;也称为EVEX.EH、 EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示) –如前所述,此字段是依情境而定的。
贝塔字段9954(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、 EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)–如前 所述,此字段是依情境而定的。
REX’字段9910–这是REX’字段的剩余部分并且是可用于对扩展32寄 存器集合的高16或低16编码的EVEX.V’比特字段(EVEX字节3,比特 [3]-V’)。此比特被以比特反转格式来存储。值1被用于对低16寄存器编 码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写入掩码字段9970(EVEX字节3,比特[2:0]-kkk)-其内容指定如前 所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特 定值EVEX.kkk=000具有暗示对于特定指令没有使用写入掩码的特殊行为 (这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕 过掩蔽硬件的硬件)。
真实操作码字段10030(字节4)也被称为操作码字节。在此字段中指 定操作码的一部分。
MOD R/M字段10040(字节5)包括MOD字段10042、Reg字段10044 和R/M字段10046。如前所述,MOD字段10042的内容区分存储器访问和 非存储器访问操作。Reg字段10044的作用可被总结成两个情形:编码目 的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对 待并且不被用于编码任何指令操作对象。R/M字段10046的作用可包括以下的:编码引用存储器地址的指令操作对象,或者编码目标寄存器操作对 象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)-如 前所述,缩放比例字段5450的内容被用于存储器地址生成。SIB.xxx 10054 和SIB.bbb 10056–先前已对于寄存器索引Xxxx和Bbbb提及了这些字段的 内容。
位移字段9962A(字节7-10)-当MOD字段10042包含10时,字节 7-10是位移字段9962A,并且其工作方式与传统32比特位移(disp32)相 同并且在字节粒度上工作。
位移因子字段9962B(字节7)-当MOD字段10042包含01时,字节 7是位移因子字段9962B.此字段的位置与传统x86指令集8比特位移(disp8) 的相同,其在字节粒度上工作。由于disp8被正负号扩展,所以其只能在- 128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比 特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和64;由于 经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与 disp8和disp32不同,位移因子字段9962B是对disp8的重解读;当使用位 移因子字段9962B时,实际位移由位移因子字段的内容乘以存储器操作对 象访问的大小(N)来确定。这种类型的位移被称为disp8*N。这减小了平 均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的 位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此, 地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段9962B 代替了传统x86指令集8比特位移。从而,位移因子字段9962B被按与x86 指令集8比特位移相同的方式编码(因此在ModRM/SIB编码规则中没有 变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码 长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储 器操作对象的大小来缩放位移以获得按字节地址偏移量)。即时字段9972 如前所述那样操作。
完整操作码字段
图100B是根据本公开的一个实施例的图示出构成完整操作码字段 9974的特定向量友好指令格式10000的字段的框图。具体而言,完整操作 码字段9974包括格式字段9940、基本操作字段9942和数据元素宽度(W) 字段9964。基本操作字段9942包括前缀编码字段10025、操作码映射字段 10015和真实操作码字段10030。
寄存器索引字段
图100C是根据本公开的一个实施例的图示出构成寄存器索引字段 9944的特定向量友好指令格式10000的字段的框图。具体而言,寄存器索 引字段9944包括REX字段10005、REX’字段10010、MODR/M.reg字段 10044、MODR/M.r/m字段10046、VVVV字段10020、xxx字段10054和 bbb字段10056。
增强操作字段
图100D是根据本公开的一个实施例的图示出构成增强操作字段9950 的特定向量友好指令格式10000的字段的框图。当类别(U)字段9968包 含0时,其表示EVEX.U0(类别A9968A);当其包含1时,其表示 EVEX.U1(类别B 9968B)。当U=0并且MOD字段10042包含11时(表 示无存储器访问操作),阿尔法字段9952(EVEX字节3,比特[7]–EH) 被解读为rs字段9952A。当rs字段9952A包含1时(舍入9952A.1),贝 塔字段9954(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段 9954A。舍入控制字段9954A包括一比特SAE字段9956和两比特舍入操作 字段9958。当rs字段9952A包含0时(数据变换9952A.2),贝塔字段 9954(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段9954B。 当U=0并且MOD字段10042包含00、01或10时(表示存储器访问操 作),阿尔法字段9952(EVEX字节3,比特[7]–EH)被解读为逐出提示 (eviction hint,EH)字段9952B并且贝塔字段9954(EVEX字节3,比特 [6:4]-SSS)被解读为三比特数据操纵字段9954C。
当U=1时,阿尔法字段9952(EVEX字节3,比特[7]–EH)被解读为 写入掩码控制(Z)字段9952C。当U=1并且MOD字段10042包含11时 (表示无存储器访问操作),贝塔字段9954的一部分(EVEX字节3,比 特[4]–S0)被解读为RL字段9957A;当其包含1(舍入9957A.1)时,贝 塔字段9954的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操 作字段9959A,而当RL字段9957A包含0(VSIZE 9957.A2)时,贝塔字 段9954的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字 段9959B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段10042 包含00、01或10时(表示存储器访问操作),贝塔字段9954(EVEX字 节3,比特[6:4]-SSS)被解读为向量长度字段9959B(EVEX字节3,比特 [6-5]-L1-0)和广播字段9957B(EVEX字节3,比特[4]-B)。
示范性寄存器体系结构
图101是根据本公开的一个实施例的寄存器体系结构10100的框图。 在图示的实施例中,存在32个512比特宽的向量寄存器10110;这些寄存 器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄 存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶 128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式10000如以下表格中所示对这些覆盖的寄存器文件操作。
Figure BDA0002512929450001851
Figure BDA0002512929450001861
换言之,向量长度字段9959B在最大长度和一个或多个其他更短长度 之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量 长度字段9959B的指令模板在最大向量长度上操作。另外,在一个实施例 中,特定向量友好指令格式10000的类别B指令模板对紧缩或标量单/双精 度浮点数据和紧缩或标量整数数据操作。标量操作是在zmm/ymm/xmm寄 存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被 保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器10115–在图示的实施例中,有8个写入掩码寄存器 (k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器 10115的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码 寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码 时,其选择硬连线的写入掩码0xFFFF,实际上对于该指令禁用了写入掩蔽。
通用寄存器10125–在图示的实施例中,有十六个64比特通用寄存器, 它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器 被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至 R15来引用。
标量浮点栈寄存器文件(x87栈)10145,其上别名化了MMX紧缩整 数平坦寄存器文件10150–在图示的实施例中,x87栈是用于利用x87指令 集扩展在对32/64/80比特浮点数据执行标量浮点操作的八元素栈;而 MMX寄存器被用于对64比特紧缩整数数据执行操作,以及为在MMX和 XMM寄存器之间执行的一些操作保持操作对象。
本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替 换实施例可使用更多、更少或不同的寄存器文件和寄存器。
示范性核心体系结构、处理器和计算机体系结构
处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实 现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有 序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用于 图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用 计算的一个或多个通用无序核心的CPU;以及2)包括主要打算用于图形 和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理 器导致不同的计算机***体系结构,这些体系结构可包括:1)协处理器 在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶 粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有 时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为 专用核心);以及4)片上***,其可在同一晶粒上包括描述的CPU(有 时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述 的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对 示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和无序核心框图
图102A是根据本公开的实施例图示出示范性有序管线和示范性寄存 器重命名、无序发出/执行管线两者的框图。图102B是根据本公开的实施 例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范 性寄存器重命名、无序发出/执行体系结构核心两者的框图。图102A-102B 中的实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存 器重命名、无序发出/执行管线和核心。考虑到有序方面是无序方面的子集, 将描述无序方面。
在图102A中,处理器管线10200包括取得级10202、长度解码级 10204、解码级10206、分配级10208、重命名级10210、调度(也称为调 遣或发出)级10212、寄存器读取/存储器读取级10214、执行级10216、回 写/存储器写入级10218、异常处理级10222和提交级10224。
图102B示出了处理器核心10290包括耦合到执行引擎单元10250的前 端单元10230,并且两者都耦合到存储器单元10270。核心10290可以是精 简指令集计算(reducedinstruction set computing,RISC)核心、复杂指令 集计算(complex instruction setcomputing,CISC)核心、超长指令字 (very long instruction word,VLIW)核心或者混合或替换核心类型。作为 另外一个选项,核心10290可以是专用核心,例如网络或通信核心、压缩 引擎、协处理器核心、通用计算图形处理单元(general purpose computinggraphics processing unit,GPGPU)核心、图形核心,等等。
前端单元10230包括分支预测单元10232,其耦合到指令缓存单元 10234,指令缓存单元10234耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)10236,该TLB 10236耦合到指令取得单元10238, 该指令取得单元10238耦合到解码单元10240。解码单元10240(或者解码 器或解码器单元)可对指令(例如,宏指令)解码,并且生成一个或多个 微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这 些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指 令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。 解码单元10240可利用各种不同的机制来实现。适当机制的示例包括但不 限于查找表、硬件实现方式、可编程逻辑阵列(programmablelogic array, PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实 施例中,核心10290包括微代码ROM或其他介质,其为某些宏指令存储 微代码(例如,在解码单元10240中或者以其他方式在前端单元10230 内)。解码单元10240耦合到执行引擎单元10250中的重命名/分配器单元 10252。
执行引擎单元10250包括耦合到引退单元10254和一个或多个调度器 单元10256的集合的重命名/分配器单元10252。(一个或多个)调度器单 元10256表示任何数目的不同调度器,包括保留站、中央指令窗口等等。 (一个或多个)调度器单元10256耦合到(一个或多个)物理寄存器文件 单元10258。物理寄存器文件单元10258的每一者表示一个或多个物理寄 存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个 不同的数据类型,例如标量整数、标量浮点数、紧缩整数、紧缩浮点数、 向量整数、向量浮点数、状态(例如,作为要执行的下一指令的地址的指 令指针),等等。在一个实施例中,物理寄存器文件单元10258包括向量 寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可 提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多 个)物理寄存器文件单元10258与引退单元10254重叠以例示出可用来实 现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排 序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文 件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用 寄存器映射图和寄存器的池;等等)。引退单元10254和(一个或多个) 物理寄存器文件单元10258耦合到(一个或多个)执行集群10260。(一 个或多个)执行集群10260包括一个或多个执行单元10262的集合和一个 或多个存储器访问单元10264的集合。执行单元10262可在各种类型的数 据(例如,标量浮点数、紧缩整数、紧缩浮点数、向量整数、向量浮点数)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可 包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包 括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个) 调度器单元10256、(一个或多个)物理寄存器文件单元10258和(一个 或多个)执行集群10260被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点数/紧缩整 数/紧缩浮点/向量整数/向量浮点数管线和/或存储器访问管线,它们各自具 有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独 的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行 集群具有(一个或多个)存储器访问单元10264)。还应当理解,在使用 分开管线的情况下,这些管线中的一个或多个可以是无序发出/执行,其余 的是有序的。
存储器访问单元10264的集合耦合到存储器单元10270,存储器单元 10270包括数据TLB单元10272,数据TLB单元10272耦合到数据缓存单 元10274,数据缓存单元10274耦合到第2级(L2)缓存单元10276。在一 个示范性实施例中,存储器访问单元10264可包括加载单元、存储地址单 元和存储数据单元,其中每一者耦合到存储器单元10270中的数据TLB单元10272。指令缓存单元10234进一步耦合到存储器单元10270中的第2级 (L2)缓存单元10276。L2缓存单元10276耦合到一个或多个其他级别的 缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、无序发出/执行核心体系结构可实现 管线10200如下:1)指令取得10238执行取得和长度解码级10202和10204; 2)解码单元10240执行解码级10206;3)重命名/分配器单元10252执行 分配级10208和重命名级10210;4)(一个或多个)调度器单元10256执 行调度级10212;5)(一个或多个)物理寄存器文件单元10258和存储器 单元10270执行寄存器读取/存储器读取级10214;执行集群10260执行执 行级10216;6)存储器单元10270和(一个或多个)物理寄存器文件单元 10258执行回写/存储器写入级10218;7)在异常处理级10222中可涉及各 种单元;并且8)引退单元10254和(一个或多个)物理寄存器文件单元 10258执行提交级10224。
核心10290可支持一个或多个指令集(例如,x86指令集(带有已随 着更新版本添加的一些扩展);加州森尼维耳市(Sunnyvale,CA)的 MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM 指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个 或多个)指令。在一个实施例中,核心10290包括逻辑来支持紧缩数据指 令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的 操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个 并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线 程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多 线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片 式取得和解码,然后是同时多线程处理,例如像
Figure BDA0002512929450001901
Hyperthreading技术 中那样)。
虽然寄存器重命名是在无序执行的情境中描述的,但应当理解寄存器 重命名可用于有序体系结构中。虽然处理器的图示实施例还包括单独的指 令和数据缓存单元10234/10274和共享的L2缓存单元10276,但替换实施 例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存, 或者多级别的内部缓存。在一些实施例中,***可包括内部缓存和在核心 和/或处理器外部的外部缓存的组合。可替换地,所有缓存都可在核心和/ 或处理器外部。
具体示范性有序核心体系结构
图103A-103B图示出更具体的示范性有序核心体系结构的框图,该核 心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心) 之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻 辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。
图103A是根据本公开的实施例的单个处理器核心及其与片上互连网 络10302以及与第2级(L2)缓存10304的其本地子集的连接的框图。在 一个实施例中,指令解码单元10300支持具有紧缩数据指令集扩展的x86 指令集。L1缓存10306允许低时延访问以将存储器缓存到标量和向量单元 中。虽然在一个实施例中(为了简化设计),标量单元10308和向量单元 10310使用分开的寄存器集合(分别是标量寄存器10312和向量寄存器 10314)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1) 缓存10306读回,但本公开的替换实施例可使用不同的方案(例如,使用 单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入 和读回的通信路径)。
L2缓存的本地子集10304是全局L2缓存的一部分,全局L2缓存被划 分成单独的本地子集,每个处理器核心有一个本地子集。每个处理器核心 具有到其自己的L2缓存的本地子集10304的直接访问路径。处理器核心读 取的数据被存储在其L2缓存子集10304中并且可被迅速访问,与其他处理 器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储 在其自己的L2缓存子集10304中并且在必要时被从其他子集冲出。环状网 络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、 hf缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径 在每个方向上是1012比特宽的。
图103B是根据本公开的实施例的图103A中的处理器核心的一部分的 扩展视图。图103B包括L1缓存10304的L1数据缓存10306A部分,以及 关于向量单元10310和向量寄存器10314的更多细节。具体而言,向量单 元10310是16宽向量处理单元(vector processingunit,VPU)(参见16宽ALU 10328),其执行整数、单精度浮点数和双精度浮点数指令中的一个 或多个。VPU支持利用调配单元10320调配寄存器输入,利用数值转换单 元10322A-B进行的数值转换,以及利用复制单元10324对存储器输入的复 制。写入掩码寄存器10326允许断言结果向量写入。
图104是根据本公开的实施例的可具有多于一个核心、可具有集成的 存储器控制器并且可具有集成的图形的处理器10400的框图。图104中的 实线框图示了具有单个核心10402A、***代理10410和一个或多个总线控 制器单元10416的集合的处理器10400,而虚线框的可选添加图示了具有 多个核心10402A-N、***代理单元10410中的一个或多个集成存储器控制 单元10414的集合和专用逻辑10408的替换处理器10400。
从而,处理器10400的不同实现方式可包括:1)其中专用逻辑10408 是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核 心10402A-N是一个或多个通用核心(例如,通用有序核心、通用无序核 心或者两者的组合)的CPU;2)其中核心10402A-N是主要打算用于图形 和/或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心10402A-N是大量的通用有序核心的协处理器。从而,处理器10400可以是 通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、 图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器, 等等。处理器可实现在一个或多个芯片上。处理器10400可以是一个或多个基片的一部分和/或利用若干个工艺技术中的任何一者实现在一个或多个 基片上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个 共享缓存单元10406、以及耦合到该组集成存储器控制器单元10414的外 部存储器(未示出)。该组共享缓存单元10406可包括一个或多个中间级 别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓 存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元10412互连集成图形逻辑10408、该组共享 缓存单元10406和***代理单元10410/(一个或多个)集成存储器控制器 单元10414,但替换实施例也可使用任何数目的公知技术来互连这种单元。 在一个实施例中,在一个或多个缓存单元10406和核心10402A-N之间维 持一致性。
在一些实施例中,核心10402A-N中的一个或多个能够进行多线程处 理。***代理10410包括协调和操作核心10402A-N的那些组件。***代 理单元10410可包括例如功率控制单元(power control unit,PCU)和显示 单元。PCU可以是或者可以包括调控核心10402A-N和集成图形逻辑10408 的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接 的显示器。
核心10402A-N就体系结构指令集而言可以是同质的或者异质的;也 就是说,核心10402A-N中的两个或更多个可能够执行同一指令集,而其 他的可只能够执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图105-图108是示范性计算机体系结构的框图。本领域中已知的用于 膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服 务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器 (digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微 控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的 其他***设计和配置也是适当的。总之,能够包含本文公开的处理器和/或 其他执行逻辑的许多种***或电子设备一般是适当的。
现在参考图105,示出了根据本公开的一个实施例的***10500的框 图。***10500可包括一个或多个处理器10510、10515,它们耦合到控制 器中心10520。在一个实施例中,控制器中心10520包括图形存储器控制 器中心(graphics memory controller hub,GMCH)10590和输入/输出中心 (Input/Output Hub,IOH)10550(它们可在分开的芯片上);GMCH 10590包括与存储器10540和协处理器10545耦合的存储器和图形控制器; IOH 10550将输入/输出(I/O)设备10560耦合到GMCH 10590。可替换地, 存储器和图形控制器的一者或两者被集成在处理器内(如本文所述),存 储器10540和协处理器10545直接耦合到处理器10510,并且控制器中心10520与IOH 10550在单个芯片中。存储器10540例如可包括编译器模块 10540A,以存储代码,该代码当被执行时使得处理器执行本公开的任何方 法。
在图105中用虚线表示额外的处理器10515的可选本性。每个处理器 10510、10515可包括本文描述的处理核心中的一个或多个并且可以是处理 器10400的某个版本。
存储器10540可例如是动态随机访问存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者 的组合。对于至少一个实施例,控制器中心10520经由多点分支总线(例 如前端总线(frontside bus,FSB))、点到点接口(例如QuickPath互连 (QuickPath Interconnect,QPI))或者类似的连接10595与(一个或多个) 处理器10510、10515通信。
在一个实施例中,协处理器10545是专用处理器,例如高吞吐量MIC 处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处 理器,等等。在一个实施例中,控制器中心10520可包括集成的图形加速 器。
在物理资源10510、10515之间,就包括体系结构特性、微体系结构特 性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差 异。
在一个实施例中,处理器10510执行控制一般类型的数据处理操作的 指令。嵌入在这些指令内的可以是协处理器指令。处理器10510将这些协 处理器指令识别为应当由附接的协处理器10545执行的类型。因此,处理 器10510在协处理器总线或其他互连上向协处理器10545发出这些协处理 器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器 10545接受和执行接收到的协处理器指令。
现在参考图106,其中示出了根据本公开的实施例的第一更具体示范 性***10600的框图。如图106中所示,多处理器***10600是点到点互 连***,并且包括经由点到点互连10650耦合的第一处理器10670和第二 处理器10680。处理器10670和10680的每一者可以是处理器10400的某个 版本。在本公开的一个实施例中,处理器10670和10680分别是处理器 10510和10515,而协处理器10638是协处理器10545。在另一实施例中, 处理器10670和10680分别是处理器10510和协处理器10545。
处理器10670和10680被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元10672和10682。处理器10670还包括点到 点(P-P)接口10676和10678作为其总线控制器单元的一部分;类似地, 第二处理器10680包括P-P接口10686和10688。处理器10670、10680可 利用点到点(P-P)接口电路10678、10688经由P-P接口10650交换信息。 如图106中所示,IMC 10672和10682将处理器耦合到相应的存储器,即 存储器10632和存储器10634,存储器10632和存储器10634可以是在本地 附接到相应处理器的主存储器的一部分。
处理器10670、10680可各自利用点到点接口电路10676、10694、 10686、10698经由个体P-P接口10652、10654与芯片集10690交换信息。 芯片集10690可以可选地经由高性能接口10639与协处理器10638交换信 息。在一个实施例中,协处理器10638是专用处理器,例如高吞吐量MIC 处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处 理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之 外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地 缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片集10690可经由接口10696耦合到第一总线10616。在一个实施例 中,第一总线10616可以是***组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连 总线之类的总线,虽然本公开的范围不限于此。
如图106中所示,各种I/O设备10614可耦合到第一总线10616,以及 总线桥10618,该总线桥10618将第一总线10616耦合到第二总线10620。 在一个实施例中,一个或多个额外的处理器10615,例如协处理器、高吞 吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理 (DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总 线10616。在一个实施例中,第二总线10620可以是低引脚数(low pin count,LPC)总线。各种设备可耦合到第二总线10620,例如包括键盘和/ 或鼠标10622、通信设备10627和存储单元10628,例如盘驱动器或者其他 大容量存储设备,它们在一个实施例中可包括指令/代码和数据10630。另 外,音频I/O 10624可耦合到第二总线10620。注意其他体系结构是可能的。例如,取代图106的点到点体系结构,***可实现多点分支总线或者其他 这种体系结构。
现在参考图107,其中示出了根据本公开的实施例的第二更具体示范 性***10700的框图。图106和图107中的相似元素带有相似的标号,并 且图106的某些方面被从图107中省略以避免模糊图107的其他方面。
图107图示出处理器10670、10680可分别包括集成存储器和I/O控制 逻辑(“CL”)10672和10682。从而,CL 10672、10682包括集成存储器 控制器单元并且包括I/O控制逻辑。图107图示出不仅存储器10632、 10634耦合到CL 10672、10682,而且I/O设备10714也耦合到控制逻辑 10672、10682。传统I/O设备10715耦合到芯片集10690。
现在参考图108,其中示出了根据本公开的实施例的SoC 10800的框 图。图104中的相似元素带有相似的标号。另外,虚线框是更高级SoC上 的可选特征。在图108中,(一个或多个)互连单元10802耦合到:应用 处理器10810,其包括一个或多个核心202A-N的集合,和(一个或多个) 共享缓存单元10406;***代理单元10410;(一个或多个)总线控制器单元10416;(一个或多个)集成存储器控制器单元10414;一组或一个或多 个协处理器10820,其可包括集成图形逻辑、图像处理器、音频处理器和 视频处理器;静态随机访问存储器(static random access memory,SRAM) 单元10830;直接存储器访问(direct memoryaccess,DMA)单元10832; 以及显示单元10840,用于耦合到一个或多个外部显示器。在一个实施例 中,(一个或多个)协处理器10820包括专用处理器,例如网络或通信处 理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的(例如,机制的)实施例可以用硬件、软件、固件或者这 种实现方案的组合来实现。本公开的实施例可实现为在包括至少一个处理 器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个 输入设备和至少一个输出设备的可编程***上执行的计算机程序或程序代 码。
程序代码,例如图106中所示的代码10630,可被应用到输入指令以 执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用 到一个或多个输出设备。对于本申请而言,处理***包括任何具有处理器 的***,例如;数字信号处理器(digitalsignal processor,DSP)、微控制 器、专用集成电路(application specific integratedcircuit,ASIC)或者微处 理器。
可以用高级过程式或面向对象的编程语言实现程序代码来与处理*** 通信。如果希望,也可以用汇编或机器语言实现程序代码。实际上,本文 描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言 可以是经编译或者解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示 处理器内的各种逻辑的代表性指令实现,该逻辑当被机器读取时使得该机 器制造逻辑来执行本文描述的技术。这种被称为“IP核”的表示可被存储 在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制 作该逻辑或处理器的制造机器中。
这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物 品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包 括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD- ROM)、可写入致密盘(compact diskrewritable,CD-RW)和磁光盘,半 导体设备,例如只读存储器(read-only memory,ROM),随机访问存储 器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可 编程只读存储器(electrically erasable programmable read-onlymemory, EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡, 或者适合用于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令 或者包含定义本文描述的结构、电路、装置、处理器和/或***特征的设计 数据,例如硬件描述语言(Hardware Description Language,HDL)。这种 实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令 集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括 动态编译的动态二进制转化)、变形、仿真或以其他方式转换到要被核心 处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或者其 组合来实现。指令转换器可以在处理器上、在处理器外或者一部分在处理 器上一部分在处理器外。
图109是根据本公开的实施例与使用软件指令转换器来将源指令集中 的二进制指令转换成目标指令集中的二进制指令对比的框图。在图示的实 施例中,指令转换器是软件指令转换器,但是可替换地,指令转换器可以 用软件、固件、硬件或者其各种组合来实现。图109示出了高级别语言 10902的程序可被利用x86编译器10904来编译以生成x86二进制代码 10906,x86二进制代码10906可由具有至少一个x86指令集核心的处理器 10916原生地执行。具有至少一个x86指令集核心10916的处理器表示任何 这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)英 特尔x86指令集核心的指令集的实质部分或者(2)以在具有至少一个x86 指令集核心的英特尔处理器上运行为目标的应用或其他软件的目标代码版 本,来执行与具有至少一个x86指令集核心的英特尔处理器基本上相同的功能,从而实现与具有至少一个x86指令集核心的英特尔处理器基本上相 同的结果。x86编译器10904表示可操作来生成x86二进制代码10906(例 如,目标代码)的编译器,x86二进制代码10906在带有或不带有额外的 可链接处理的情况下可被在具有至少一个x86指令集核心的处理器10916 上执行。类似地,图109示出了高级别语言10902的程序可被利用替换指令集编译器10908来编译以生成替换指令集二进制代码10910,替换指令 集二进制代码10910可由没有至少一个x86指令集核心的处理器10914(例 如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行 加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执 行。指令转换器10912用于将x86二进制代码10906转换成可由没有x86 指令集核心的处理器10914原生地执行的代码。这个转换后的代码不太可 能与替换指令集二进制代码10910相同,因为能够做到这一点的指令转换 器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指 令集的指令构成。从而,指令转换器10912表示通过仿真、模拟或任何其 他处理允许不具有x86指令集处理器或核心的处理器或其他电子设备执行 x86二进制代码10906的软件、固件、硬件或者其组合。

Claims (24)

1.一种处理器,包括:
核心,所述核心具有解码器来将指令解码成解码后指令,并且具有执行单元来执行所述解码后指令以执行第一操作;
多个处理元件;以及
所述多个处理元件之间的互连网络,用来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件:将在所述互连网络的第一配置在时钟的第一时间段中活跃时通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处而执行所述数据流图的第二操作,并且将在所述互连网络的第二配置在所述时钟的第二时间段中活跃时通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处而执行所述数据流图的第三操作。
2.如权利要求1所述的处理器,其中,所述互连网络在所述时钟的接连周期中在所述第一配置、所述第二配置、和所述第一配置之间交替。
3.如权利要求1所述的处理器,其中,所述互连网络的第一配置将第一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处理元件耦合到第四处理元件。
4.如权利要求1所述的处理器,其中,所述互连网络的第一配置将第一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处理元件耦合到所述第二处理元件。
5.如权利要求1所述的处理器,其中,所述互连网络包括流控制路径来根据所述数据流图运载背压信号,以在来自下游处理元件的所述背压信号指出所述下游处理元件中的存储不能用于所述多个处理元件中的一处理元件的输出时暂缓该处理元件的执行。
6.如权利要求1所述的处理器,其中,所述多个处理元件中的一处理元件包括第一操作配置和第二操作配置,并且所述处理元件:在所述处理元件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作配置执行所述第二操作,并且在所述处理元件的第二操作配置在所述时钟的第二时间段中活跃时根据所述第二操作配置执行所述第三操作。
7.一种方法,包括:
利用处理器的核心的解码器将指令解码成解码后指令;
利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操作;
接收包括多个节点的数据流图的输入;
将所述数据流图覆盖到所述处理器的多个处理元件和所述处理器的多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器;
当所述互连网络的第一配置在时钟的第一时间段中活跃时,通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处,利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作;并且
当所述互连网络的第二配置在所述时钟的第二时间段中活跃时,通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处,利用所述互连网络和所述多个处理元件执行所述数据流图的第三操作。
8.如权利要求7所述的方法,其中,所述互连网络在所述时钟的接连周期中在所述第一配置、所述第二配置和所述第一配置之间交替。
9.如权利要求7所述的方法,其中,所述互连网络的第一配置将第一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处理元件耦合到第四处理元件。
10.如权利要求7所述的方法,其中,所述互连网络的第一配置将第一处理元件耦合到第二处理元件,并且所述互连网络的第二配置将第三处理元件耦合到所述第二处理元件。
11.如权利要求7所述的方法,其中,所述互连网络包括流控制路径来根据所述数据流图运载背压信号,以在来自下游处理元件的所述背压信号指出所述下游处理元件中的存储不能用于所述多个处理元件中的一处理元件的输出时暂缓该处理元件的执行。
12.如权利要求7到11中任一项所述的方法,其中,所述多个处理元件中的一处理元件包括第一操作配置和第二操作配置,并且所述方法还包括:在所述处理元件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作配置执行所述第二操作,并且在所述处理元件的第二操作配置在所述时钟的第二时间段中活跃时根据所述第二操作配置执行所述第三操作。
13.一种装置,包括:
多个处理元件之间的数据路径网络;以及
所述多个处理元件之间的流控制路径网络,其中所述数据路径网络和所述流控制路径网络将接收包括多个节点的数据流图的输入,所述数据流图将被覆盖到所述数据路径网络、所述流控制路径网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件:将在所述数据路径网络和所述流控制路径网络的第一配置在时钟的第一时间段中活跃时通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处而执行所述数据流图的第一操作,并且当所述数据路径网络和所述流控制路径网络的第二配置在所述时钟的第二时间段中活跃时通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处而执行所述数据流图的第二操作。
14.如权利要求13所述的装置,其中,所述数据路径网络和所述流控制路径网络在所述时钟的接连周期中在所述第一配置、所述第二配置、和所述第一配置之间交替。
15.如权利要求13所述的装置,其中,所述数据路径网络和所述流控制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到第四处理元件。
16.如权利要求13所述的装置,其中,所述数据路径网络和所述流控制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到所述第二处理元件。
17.如权利要求13所述的装置,其中,所述流控制路径网络根据所述数据流图运载背压信号以在来自下游处理元件的所述背压信号指出所述下游处理元件中的存储不能用于所述多个处理元件中的一处理元件的输出时暂缓该处理元件的执行。
18.如权利要求13到17中任一项所述的装置,其中,所述多个处理元件中的一处理元件包括第一操作配置和第二操作配置,并且所述处理元件:在所述处理元件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作配置执行所述第一操作,并且在所述处理元件的第二操作配置在所述时钟的第二时间段中活跃时根据所述第二操作配置执行所述第二操作。
19.一种方法,包括:
接收包括多个节点的数据流图的输入;
将所述数据流图覆盖到处理器的多个处理元件、所述多个处理元件之间的数据路径网络和所述多个处理元件之间的流控制路径网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器;
当所述数据路径网络和所述流控制路径网络的第一配置在时钟的第一时间段中活跃时,通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处而执行所述数据流图的第一操作;并且
当所述数据路径网络和所述流控制路径网络的第二配置在所述时钟的第二时间段中活跃时,通过相应传入操作对象集合到达所述多个处理元件的所述数据流操作器处而执行所述数据流图的第二操作。
20.如权利要求19所述的方法,其中,所述数据路径网络和所述流控制路径网络在所述时钟的接连周期中在所述第一配置、所述第二配置和所述第一配置之间交替。
21.如权利要求19所述的方法,其中,所述数据路径网络和所述流控制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到第四处理元件。
22.如权利要求19所述的方法,其中,所述数据路径网络和所述流控制路径网络的第一配置将第一处理元件耦合到第二处理元件,并且所述数据路径网络和所述流控制路径网络的第二配置将第三处理元件耦合到所述第二处理元件。
23.如权利要求19所述的方法,其中,所述流控制路径网络根据所述数据流图运载背压信号以在来自下游处理元件的所述背压信号指出所述下游处理元件中的存储不能用于所述多个处理元件中的一处理元件的输出时暂缓该处理元件的执行。
24.如权利要求19到23中任一项所述的方法,其中,所述多个处理元件中的一处理元件包括第一操作配置和第二操作配置,并且所述方法包括:所述处理元件在所述处理元件的第一操作配置在所述时钟的第一时间段中活跃时根据所述第一操作配置执行所述第一操作,并且在所述处理元件的第二操作配置在所述时钟的第二时间段中活跃时根据所述第二操作配置执行所述第二操作。
CN202010466831.3A 2019-06-29 2020-05-28 用于可配置空间加速器中的时间复用的装置、方法和*** Pending CN112148664A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/458,032 2019-06-29
US16/458,032 US20200409709A1 (en) 2019-06-29 2019-06-29 Apparatuses, methods, and systems for time-multiplexing in a configurable spatial accelerator

Publications (1)

Publication Number Publication Date
CN112148664A true CN112148664A (zh) 2020-12-29

Family

ID=69845919

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010466831.3A Pending CN112148664A (zh) 2019-06-29 2020-05-28 用于可配置空间加速器中的时间复用的装置、方法和***

Country Status (3)

Country Link
US (1) US20200409709A1 (zh)
EP (1) EP3757814A1 (zh)
CN (1) CN112148664A (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4083803A4 (en) * 2019-12-23 2023-10-04 Nippon Telegraph And Telephone Corporation INTRA-SERVER DELAY CONTROL DEVICE AND METHOD, AND PROGRAM
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US20220100680A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
US11392513B2 (en) * 2020-10-15 2022-07-19 Dell Products L.P. Graph-based data flow control system
CN117616407A (zh) * 2021-12-23 2024-02-27 英特尔公司 计算架构
CN118170553A (zh) * 2022-12-09 2024-06-11 中科寒武纪科技股份有限公司 一种执行片间通信任务的方法和相关产品

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990452B2 (en) * 2011-07-26 2015-03-24 International Business Machines Corporation Dynamic reduction of stream backpressure
US10467183B2 (en) * 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10445098B2 (en) * 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array

Also Published As

Publication number Publication date
US20200409709A1 (en) 2020-12-31
EP3757814A1 (en) 2020-12-30

Similar Documents

Publication Publication Date Title
US11593295B2 (en) Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US11307873B2 (en) Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10565134B2 (en) Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10445250B2 (en) Apparatus, methods, and systems with a configurable spatial accelerator
US10417175B2 (en) Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
US10387319B2 (en) Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10515046B2 (en) Processors, methods, and systems with a configurable spatial accelerator
US10380063B2 (en) Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10445451B2 (en) Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
CN111868702A (zh) 用于可配置空间加速器中的远程存储器访问的装置、方法和***
US10915471B2 (en) Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US10891240B2 (en) Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US10817291B2 (en) Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
CN111566623A (zh) 用于可配置空间加速器中的集成性能监视的装置、方法和***
US11029958B1 (en) Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator
US10459866B1 (en) Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
US10853073B2 (en) Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator
US10678724B1 (en) Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US20220100680A1 (en) Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
CN112148664A (zh) 用于可配置空间加速器中的时间复用的装置、方法和***
CN112148647A (zh) 用于存储器接口电路仲裁的装置、方法和***
US11907713B2 (en) Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator

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