CN110018850A - 用于可配置空间加速器中的多播的设备、方法和系统 - Google Patents
用于可配置空间加速器中的多播的设备、方法和系统 Download PDFInfo
- Publication number
- CN110018850A CN110018850A CN201811623622.4A CN201811623622A CN110018850A CN 110018850 A CN110018850 A CN 110018850A CN 201811623622 A CN201811623622 A CN 201811623622A CN 110018850 A CN110018850 A CN 110018850A
- Authority
- CN
- China
- Prior art keywords
- processing element
- data flow
- input buffer
- data
- path
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Multi Processors (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
描述了与可配置空间加速器中的多播有关的系统、方法和设备。在一个实施例中,一种加速器包括耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器的第一处理元件的第一输出缓冲器;并且当所述第一处理元件针对所述第二处理元件和所述第三处理元件两者观察到推测值被设置为用于指示数据流令牌被存储在其输入缓冲器中的值(例如,如通过接受值(例如,比特)所指示的)或者反压值被设置为用于指示在使所述数据流令牌从所述第一输出缓冲器中出队之前储存器将在其输入缓冲器中可用的值时,所述第一处理元件确定它能够在先前周期中完成传输。
Description
有关联邦赞助研究和开发的声明
本发明是根据由国防部授予的合同编号H98230A-13-D-0124-0207在政府支持下做出的。政府对本发明享有某些权利。
技术领域
本公开一般地涉及电子装置,并且更具体地,本公开的实施例涉及可配置空间加速器中的多播。
背景技术
处理器或处理器集执行来自指令集(例如,指令集架构(ISA))的指令。指令集是与编程有关的计算机架构的一部分,并且一般地包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。应该注意的是,本文术语指令可以指代宏指令,例如,被提供给处理器以供执行的指令,或者指代微指令,例如,由处理器的解码器对宏指令进行解码产生的指令。
附图说明
本公开作为示例而非限制被图示在附图的各图中,在附图中相似的附图标记指示类似的元素,并且在附图中:
图1图示了根据本公开的实施例的加速器块片(tile)。
图2图示了根据本公开的实施例的耦合到存储器的硬件处理器。
图3A图示了根据本公开的实施例的程序源。
图3B图示了根据本公开的实施例的图3A的程序源的数据流图。
图3C图示了根据本公开的实施例的具有被配置成执行图3B的数据流图的多个处理元件的加速器。
图4图示了根据本公开的实施例的数据流图的示例执行。
图5图示了根据本公开的实施例的程序源。
图6图示了根据本公开的实施例的包括处理元件阵列的加速器块片。
图7A图示了根据本公开的实施例的可配置数据路径网络。
图7B图示了根据本公开的实施例的可配置流控制路径网络。
图8图示了根据本公开的实施例的包括加速器的硬件处理器块片。
图9图示了根据本公开的实施例的处理元件。
图10A图示了根据本公开的实施例的可配置数据路径网络。
图10B图示了根据本公开的实施例的可配置流控制路径网络。
图11A图示了根据本公开的实施例的通过网络耦合到第二处理元件和第三处理元件的第一处理元件。
图11B图示了根据本公开的实施例的图11A的被配置成为控制缓冲器提供缩减多播关键路径的电路交换网络。
图11C图示了根据本公开的实施例的图11A的被配置成为第一组缓冲器提供缩减多播关键路径的电路交换网络。
图11D图示了根据本公开的实施例的图11A的被配置成为第二组缓冲器提供缩减多播关键路径的电路交换网络。
图11E-11L图示了根据本公开的实施例的图11A的多播系统上的八个不同的周期。
图12图示了根据本公开的实施例的用于在生产者PE处设置并清除成功值的示例代码。
图13图示了根据本公开的实施例的用于在消费者PE处设置并清除接受值的示例代码。
图14图示了根据本公开的实施例的流程图。
图15图示了根据本公开的实施例的请求地址堆(RAF)电路。
图16图示了根据本公开的实施例的耦合在多个加速器块片与多个高速缓存存储体之间的多个请求地址堆(RAF)电路。
图17图示了根据本公开的实施例的伪代码函数调用的数据流图。
图18图示了根据本公开的实施例的具有多个网络数据流端点电路的处理元件的空间阵列。
图19图示了根据本公开的实施例的网络数据流端点电路。
图20图示了根据本公开的实施例的用于发送操作和接收操作的数据格式。
图21图示了根据本公开的实施例的用于发送操作的另一数据格式。
图22图示来根据本公开的实施例将电路元件(例如,网络数据流端点电路)数据格式配置成配置用于发送(例如,开关)操作和接收(例如,拾取)操作的电路元件(例如,网络数据流端点电路)。
图23图示了根据本公开的实施例的用于配置用于发送操作的电路元件(例如,网络数据流端点电路)的配置数据格式,同时在电路上注释其输入、输出和控制数据。
图24图示了根据本公开的实施例的用于配置用于所选操作的电路元件(例如,网络数据流端点电路)的配置数据格式,同时在电路上注释其输入、输出和控制数据。
图25图示了根据本公开的实施例的用于配置用于开关操作的电路元件(例如,网络数据流端点电路)的配置数据格式,同时在电路上注释其输入、输出和控制数据。
图26图示了根据本公开的实施例的用于配置用于SwitchAny操作的电路元件(例如,网络数据流端点电路)的配置数据格式,同时在电路上注释其输入、输出和控制数据。
图27图示了根据本公开的实施例的用于配置用于拾取操作的电路元件(例如,网络数据流端点电路)的配置数据格式,同时在电路上注释其输入、输出和控制数据。
图28图示了根据本公开的实施例的用于配置用于PickAny操作的电路元件(例如,网络数据流端点电路)的配置数据格式,同时在电路上注释其输入、输出和控制数据。
图29图示了根据本公开的实施例的由网络数据流端点电路为了性能而对操作的选择。
图30图示了根据本公开的实施例的网络数据流端点电路。
图31图示了根据本公开的实施例的在执行拾取操作的同时接收输入零(0)的网络数据流端点电路。
图32图示了根据本公开的实施例的在执行拾取操作的同时接收输入一(1)的网络数据流端点电路。
图33图示了根据本公开的实施例的在执行拾取操作的同时输出所选输入的网络数据流端点电路。
图34图示了根据本公开的实施例的流程图。
图35图示了根据本公开的实施例的分割成三个区域(结果区域、三个潜在进位区域和选通区域)的浮点乘法器。
图36图示了根据本公开的实施例的具有多个处理元件的加速器的进行中(in-flight)配置。
图37图示了根据本公开的实施例的进行中管线提取的快照。
图38图示了根据本公开的实施例的用于加速器的编译工具链。
图39图示了根据本公开的实施例的用于加速器的编译器。
图40A图示了根据本公开的实施例的顺序汇编代码。
图40B图示了根据本公开的实施例的图40A的顺序汇编代码的数据流汇编代码。
图40C图示了根据本公开的实施例的用于加速器的图40B的数据流汇编代码的数据流图。
图41A图示了根据本公开的实施例的C源代码。
图41B图示了根据本公开的实施例的图41A的C源代码的数据流汇编代码。
图41C图示了根据本公开的实施例的用于加速器的图41B的数据流汇编代码的数据流图。
图42A图示了根据本公开的实施例的C源代码。
图42B图示了根据本公开的实施例的图42A的C源代码的数据流汇编代码。
图42C图示了根据本公开的实施例的用于加速器的图42B的数据流汇编代码的数据流图。
图43A图示了根据本公开的实施例的流程图。
图43B图示了根据本公开的实施例的流程图。
图44图示了根据本公开的实施例的吞吐量对每操作能量图。
图45图示了根据本公开的实施例的包括处理元件阵列和本地配置控制器的加速器块片。
图46A-46C图示了根据本公开的实施例的配置数据路径网络的本地配置控制器。
图47图示了根据本公开的实施例的配置控制器。
图48图示了根据本公开的实施例的包括处理元件阵列、配置高速缓存和本地配置控制器的加速器块片。
图49图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路的配置和异常处理控制器的加速器块片。
图50图示了根据本公开的实施例的重配置电路。
图51图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路的配置和异常处理控制器的加速器块片。
图52图示了根据本公开的实施例的包括处理元件阵列和耦合到块片级异常集合器的夹层异常集合器的加速器块片。
图53图示了根据本公开的实施例的具有异常生成器的处理元件。
图54图示了根据本公开的实施例的包括处理元件阵列和本地提取控制器的加速器块片。
图55A-55C图示了根据本公开的实施例的配置数据路径网络的本地提取控制器。
图56图示了根据本公开的实施例的提取控制器。
图57图示了根据本公开的实施例的流程图。
图58图示了根据本公开的实施例的流程图。
图59A是根据本公开的实施例的采用插置在存储器子系统与加速硬件之间的存储器排序电路的系统的框图。
图59B是图59A的但是采用根据本公开的实施例的多个存储器排序电路的系统的框图。
图60是图示了根据本公开的实施例的进出加速硬件的存储器操作的一般功能的框图。
图61是图示了根据本公开的实施例的用于存储操作的空间依赖性流程的框图。
图62是根据本公开的实施例的图59的存储器排序电路的详细框图。
图63是根据本公开的实施例的图59的存储器排序电路的微架构的流程图。
图64是根据本公开的实施例的可执行确定器电路的框图。
图65是根据本公开的实施例的优先级编码器的框图。
图66是根据本公开的实施例的逻辑和二进制的示例性加载操作的框图。
图67A是图示了根据本公开的实施例的示例代码的逻辑执行的流程图。
图67B是图示了根据本公开的实施例的示例代码的展开版本中的存储器级并行性的图67A的流程图。
图68A是根据本公开的实施例的用于加载操作和用于存储操作的示例性存储器变元的框图。
图68B是图示了根据本发明的实施例的通过图63的存储器排序电路的微架构的加载操作和存储操作(诸如图68A的那些操作)的流程的框图。
图69A、图69B、图69C、图69D、图69E、图69F、图69G和图69H是图示了根据本公开的实施例的通过图69B的微架构的队列用于示例性程序的加载操作和存储操作的功能流程的框图。
图70是根据本公开的实施例的用于对加速硬件与乱序存储器子系统之间的存储器操作进行排序的方法的流程图。
图71A是图示了根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图。
图71B是图示了根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。
图72A是图示了根据本公开的实施例的图71A和图71B中的通用矢量友好指令格式的字段的框图。
图72B是图示了根据本公开的一个实施例的组成完整操作码字段的图72A中的具体矢量友好指令格式的字段的框图。
图72C是图示了根据本公开的一个实施例的组成寄存器索引字段的图72A中的具体矢量友好指令格式的字段的框图。
图72D是图示了根据本公开的一个实施例的组成扩增操作字段7150的图72A中的具体矢量友好指令格式的字段的框图。
图73是根据本公开的一个实施例的寄存器架构的框图。
图74A是图示了根据本公开的实施例的示例性顺序管线和示例性寄存器重命名、乱序发射/执行管线的框图。
图74B是图示了根据本公开的实施例的要包括在处理器中的顺序架构核心和示例性寄存器重命名、乱序发射/执行架构核心的示例性实施例的框图。
图75A是根据本公开的实施例的单个处理器核心的框图以及其到管芯上互连网络且与其第2级(L2)高速缓存的本地子集的连接。
图75B是根据本公开的实施例的图75A中的处理器核心的一部分的展开图。
图76是根据本公开的实施例的可以具有多于一个核心、可以具有集成存储器控制器并且可以具有集成显卡的处理器的框图。
图77是依照本公开的一个实施例的系统的框图。
图78是依照本公开的实施例的更具体示例性系统的框图。
图79示出的是依照本公开的实施例的第二更具体示例性系统的框图。
图80示出的是依照本公开的实施例的片上系统(SoC)的框图。
图81是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了许多具体细节。然而,应理解的是,可以在没有这些具体细节的情况下实践本公开的实施例。在其他实例中,尚未详细地示出众所周知的电路、结构和技术,以免使对此描述的理解混淆。
在本说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每一实施例可能不一定包括该特定特征、结构或特性。而且,此类短语不一定参考同一实施例。进一步地,当结合实施例对特定特征、结构或特性进行描述时,认为结合其他实施例实现这种特征、结构或特性在本领域的技术人员的知识内,而无论是否被明确地描述。
处理器(例如,具有一个或多个核心)可以执行指令(例如,指令线程)以对数据进行操作,例如,以执行算术、逻辑或其他功能。例如,软件可以请求操作并且硬件处理器(例如,其一个或多个核心)可以响应于请求而执行操作。操作的一个非限定示例是用于输入多个矢量元素并且输出具有混合的多个元素的矢量的混合操作。在某些实施例中,多个操作是用单个指令的执行来完成的。例如,如由能源部定义的百亿亿次性能可能要求系统级浮点性能在给定(例如,20MW)功率预算内超过每秒10^18次浮点运算(exaFLOP)或更多。本文中的某些实施例致力于把例如处理器的高性能计算(HPC)作为目标的处理元件(例如,可配置空间加速器(CSA))的空间阵列。处理元件(例如,CSA)的空间阵列的本文中的某些实施例把直接执行数据流图以产生远超过常规路线图架构的计算密集的但高能效的空间微架构作为目标。例如,除了通信网络在处理元件、存储器等之间路由数据和/或通信网络执行其他通信(例如,不是数据处理)操作之外,本文中的某些实施例还覆盖通信网络上的(例如,高基数)数据流操作。本文中的某些实施例致力于处理元件(例如,CSA)的空间阵列的(例如,耦合到其的)电路交换网络中的多播。本文中的某些实施例提供用于实现加速器的框架。例如,允许构建具有较窄位宽的较小加速器(例如,密码加速器)的参数架构。在某些实施例中,通过并入为特定加速目标的计算而调谐的专用PE来进一步改进加速器的性能。下面还包括对处理元件(例如,CSA)的空间阵列的实施例的架构基本原理及其某些特征的描述。与任何革命性架构一样,可编程性可能是风险。为了减轻此问题,CSA架构的实施例已被与编译工具链协同设计,同样在下面对编译工具链进行讨论。
引言
百亿亿次计算目标可能在进取功率预算(例如,20 MW)内要求巨大系统级浮点性能(例如,1个ExaFLOP)。然而,利用经典冯诺依曼架构同时地改进程序执行的性能和能量效率已变得困难:乱序调度、同时多线程处理、复杂寄存器堆和其他结构提供性能,但是以高能量为代价。本文中的某些实施例同时地实现性能和能量需求。百亿亿次计算功率性能目标可能要求高吞吐量和每操作低能耗两者。本文中的某些实施例通过提供大大地消除先前处理器设计的控制开销的大量低复杂度、高能效处理(例如,计算)元件来提供这个。受此观察结果指导,本文中的某些实施例包括处理元件(例如,可配置空间加速器(CSA))的空间阵列,例如,包括通过一组轻量级反压(例如,通信)网络连接的处理元件(PE)阵列。在图1中描绘了CSA块片的一个示例。处理(例如,计算)元件的某些实施例是数据流操作符,例如,当(i)输入数据已到达数据流操作符且(ii)存在可用于存储输出数据的空间(例如,否则没有处理在发生)时仅处理输入数据的多个数据流操作符。某些实施例(例如,加速器或CSA的)不利用触发的指令。
图1图示了根据本公开的实施例的处理元件的空间阵列的加速器块片100实施例。加速器块片100可以是更大块片的一部分。加速器块片100执行一个或多个数据流图。数据流图一般地可以指代在顺序代码的编译中出现的显式并行程序描述。例如,本文中的某些实施例(例如,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)存在可用于存储输出数据的空间时仅对输入数据进行操作(例如,否则不会发生操作)的数据流操作符。
本文中的某些实施例包括处理元件的空间阵列作为使用户应用加速的高能效和高性能方式。在一个实施例中,应用被以极端并行方式映射。例如,内循环可以被展开多次以改进并行性。例如,当展开代码的占用(例如,使用)高时,此方法可以提供高性能。然而,如果在展开的循环体中有不太使用的代码路径(例如,像浮点非规范化模式一样的异常代码路径),则处理元件的空间阵列(例如,其结构区域)可能被浪费并且吞吐量因此丢失。
在本文中用于(例如,在未充分利用的代码段的情况下)减少处理元件的空间阵列(例如,其结构区域)上的压力的一个实施例是时间复用。在此模式下,可以在若干循环体之间共享不太使用的(例如,较冷的)代码的单个实例,例如,类似于共享库中的函数调用。在一个实施例中,(例如,处理元件的)空间阵列支持复用代码的直接实现。然而,例如,当在空间阵列中复用或解复用涉及在许多且远目标(例如,共享器)当中选取时,使用数据流操作符(例如,使用处理元件)的直接实现在等待时间、吞吐量、实现面积和/或能量方面可能是效率低的。本文中的某些实施例描述了支持(例如,高基数)复用或解复用的硬件机制(例如,网络电路)。(例如,网络数据流端点电路的)本文中的某些实施例许可许多目标(例如,共享器)的聚合而几乎没有硬件开销或性能影响。本文中的某些实施例允许将(例如,传统)顺序代码编译为空间阵列中的并行架构。
在一个实施例中,多个网络数据流端点电路组合为单个数据流操作符,例如,如在下面参考图18所讨论的。作为非限定示例,在下面列举了某些(例如,高(例如,4-6)基数)数据流操作符。
“Pick(拾取)”数据流操作符的实施例是为了从多个输入通道中选择数据(例如,令牌)并且根据控制数据将该数据作为其(例如,单个)输出来提供。用于Pick的控制数据可以包括输入选择器值。在一个实施例中,所选择的输入通道将使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。在一个实施例中,附加地,那些未选择的输入通道也将使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。
“PickSingleLeg”数据流操作符的实施例是为了从多个输入通道中选择数据(例如,令牌)并且根据控制数据将该数据作为其(例如,单个)输出来提供,但是在某些实施例中,未选择的输入通道被忽视,例如,那些未选择的输入通道将不使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。用于PickSingleLeg的控制数据可以包括输入选择器值。在一个实施例中,所选择的输入通道也将使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。
“PickAny(拾取任何)”数据流操作符的实施例是为了从多个输入通道中选择第一可用(例如,可供执行操作的电路使用)数据(例如,令牌)并且将该数据作为其(例如,单一)输出来提供。在一个实施例中,PickSingleLeg也将输出索引(例如,指示多个输入通道中的哪一个)使其数据被选择。在一个实施例中,所选择的输入通道将使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。在某些实施例中,未选择的输入通道(例如,具有或没有输入数据)被忽视,例如,那些未选择的输入通道将不使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。用于PickAny的控制数据可以包括与PickAny相对应的值,例如,而没有输入选择器值。
“Switch(开关)”数据流操作符的实施例是为了引导(例如,单个)输入数据(例如,令牌)以便根据控制数据将该输入数据提供给一个或多个(例如,少于全部)输出端。用于Switch的控制数据可以包括一个或多个输出选择器值。在一个实施例中,输入数据(例如,来自输入通道)将使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。
“SwitchAny(开关任何)”数据流操作符的实施例是为了引导(例如,单个)输入数据(例如,令牌)以便例如根据控制数据将该输入数据提供给可以接收该数据的一个或多个(例如,少于全部)输出端。在一个实施例中,SwitchAny可以将输入数据提供给在其入口缓冲器(例如,图19中的网络入口缓冲器)中具有可用性(例如,可用存储空间)的任何耦合输出通道。用于SwitchAny的控制数据可以包括与SwitchAny相对应的值,例如,而没有一个或多个输出选择器值。在一个实施例中,输入数据(例如,来自输入通道)将使其数据(例如,令牌)被移除(例如,丢弃),例如,以完成对该数据流操作(或其数据流操作的部分)的执行。在一个实施例中,SwitchAny也将输出它将输入数据提供(例如,发送)给的索引(例如,指示多个输出通道中的哪一个)。可以利用SwitchAny来管理空间阵列中的复制子图,例如,展开的循环。
本文中的某些实施例因此跨越一类广泛的现有单流和并行程序提供颠覆传统水平的性能和能量效率方面的巨大改进,例如,完全同时保存熟悉的HPC编程模型。本文中的某些实施例可以把HPC作为目标,使得浮点能量效率极其重要。本文中的某些实施例不仅交付令人瞩目的性能改进和能量减少,它们也将这些收益交付给用主流HPC语言并且为主流HPC框架编写的现有HPC程序。本文中的架构的某些实施例(例如,在编译时)提供若干扩展以直接支持由现代编译器生成的控制数据流内部表示。本文中的某些实施例涉及例如可接受C、C++和Fortran编程语言的CSA数据流编译器,以把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的实施例执行数据流图,例如,与编译程序的编译器自己的内部表示(IR)很类似的程序表现形式。在此模型中,程序被表示为由从一组架构定义的数据流操作符(例如,其包含计算和控制操作两者)中汲取的节点(例如,顶点)和表示数据在数据流操作符之间的转移的边组成的数据流图。执行可以通过将数据流令牌(例如,其是或者表示数据值)注入到数据流图中继续进行。令牌可以在每个节点(例如,顶点)之间流动并且在每个节点(例如,顶点)处被变换,例如,形成完整计算。在图3A-3C中示出了样本数据流图及其从高级源代码的导出,并且图5示出了数据流图的执行的示例。
CSA的实施例通过确切地提供编译器所需要的那些数据流图执行支持被配置用于数据流图执行。在一个实施例中,CSA是加速器(例如,图2中的加速器)并且它不设法提供在通用处理核心(例如,图2中的核心)上可用的一些必要的但不经常使用的机制,诸如系统调用。因此,在此实施例中,CSA可执行许多代码,但并非全部代码。作为交换,CSA赢得显著的性能和能量优势。为了使得能实现用常用顺序语言编写的代码的加速,本文中的实施例也引入若干新颖架构特征来协助编译器。一个特别新颖性是CSA对存储器的处理,这是先前已被忽视或者解决得不好的主题。CSA的实施例在数据流操作符的使用方面也是独特的,例如,与查找表(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处,可以在数据流图400中加载输入值(例如,在图3B中对于X来说为1并且在图3B中对于Y来说为2)以执行1 * 2乘法运算。这些数据输入值中的一个或多个在运算中可以是静态的(例如,恒定的)(例如,参考图3B对于X来说为1并且对于Y来说为2)或者在运算期间被更新。在步骤2处,处理元件(例如,在流控制路径网络上)或其他电路向拾取节点404的控制输入端(例如,复用器控制值)输出零(例如,以寻找从端口“0”到其输出端的一的来源)并且向开关节点406的控制输入端(例如,复用器控制值)输出零(例如,以从端口“0”中向目的地(例如,下游处理元件)提供其输入)。在步骤3处,数据值1被从拾取节点404输出(例如,并且在拾取节点404处消费其控制值“0”)到乘法器节点408以在步骤4处与数据值2相乘。在步骤4处,乘法器节点408的输出到达开关节点406,例如,这使开关节点406在步骤5处消费控制值“0”以从开关节点406的端口“0”输出值2。运算然后完成。CSA因此可以被相应地编程为使得用于每个节点的对应数据流操作符执行图4中的运算。尽管在此示例中执行是序列化的,然而原则上所有数据流操作可以并行地执行。这些步骤在图4中用于将数据流执行与任何物理微架构表现形式区分开。在一个实施例中下游处理元件将向开关406发送值(或者不发送就绪值)(例如,在流控制路径网络上)以停止来自开关406的输出,例如,直到下游处理元件为输出做好准备(例如,具有存储空间)为止。
1.3存储器
数据流架构一般地集中于通信和数据操纵,而对状态不太关注。然而,启用真实软件尤其是用传统顺序语言编写的程序需要重点关注与存储器对接。CSA的某些实施例将架构存储器操作用作其到(例如,大)有状态储存器的主要接口。从数据流图的角度来看,存储器操作与其他数据流操作类似,只是它们具有更新共享暂存器的副作用。特别地,本文中的某些实施例的存储器操作具有与每个其他数据流操作符相同的语义,例如,它们在其操作数(例如,地址)可用时“执行”,并且在一些等待时间之后,响应被产生。本文中的某些实施例显式地使操作数输入和结果输出解耦,使得存储器操作符自然地管线化并且有可能产生许多同时未完成的请求,例如,使它们例外地非常适于存储器子系统的等待时间和带宽特性。CSA的实施例提供诸如加载和存储之类的基本存储器操作,所述加载取地址通道并利用与地址相对应的值填充响应通道。CSA的实施例也可以提供更高级的操作,诸如存储器中原子和一致性操作符。这些操作可以具有与其冯诺依曼对应部分类似的语义。CSA的实施例可以使使用诸如C和Fortran之类的顺序语言描述的现有程序加速。支持这些语言模型的结果是解决程序存储器排序,例如,通常通过这些语言规定的存储器操作的串行排序。
图5图示了根据本公开的实施例的程序源(例如,C代码)500。根据C编程语言的存储器语义,存储器拷贝(memcpy)应该被序列化。然而,如果已知数组A和B不相交,则可以用CSA的实施例使memcpy并行化。图5还图示了程序排序的问题。一般而言,例如,对于索引的相同值或索引跨越循环体的不同值来说,编译器不能证明数组A与数组B不同。这被称为指针或存储器混叠。因为编译器将生成静态正确的代码,所以它们通常被迫使存储器访问串行化。通常,把顺序冯诺依曼架构作为目标的编译器将指令排序用作实施程序排序的自然手段。然而,CSA的实施例没有如由程序计数器定义的指令或基于指令的程序排序的观念。在某些实施例中,例如不包含架构可见的信息的传入依赖性令牌和所有其他数据流令牌一样并且存储器操作可以不执行直到它们已接收到依赖性令牌为止。在某些实施例中,一旦其操作对所有逻辑上后续的从属存储器操作可见,存储器操作就产生传出依赖性令牌。在某些实施例中,依赖性令牌与数据流图中的其他数据流令牌类似。例如,因为存储器操作发生在条件上下文中,所以也可以使用部分2.1中描述的控制操作符来操纵依赖性令牌,例如,像任何其他令牌一样。依赖性令牌可以具有使存储器访问串行化(例如,给编译器提供在架构上定义存储器访问的顺序的手段)的效果。
1.4运行时服务
CSA的实施例的主要架构考虑事项涉及用户级程序的实际执行,但是它也可能期望提供从下面支持此执行的若干支持机制。这些当中最主要的是配置(其中数据流图被加载到CSA中)、提取(其中执行图的状态被移动到存储器)和异常(其中结构中的数学、软和其他类型的错误被检测和处理,可能由外部实体处理)。下面的部分2.8讨论用于产生这些功能的高效大部分管线实施方式的CSA的实施例的等待时间不敏感数据流架构的性质。概念上,配置可以将数据流图的状态加载到互连(和/或通信网络(例如,其网络数据流端点电路))和处理元件(例如,结构)中,例如,一般地从存储器加载。在此步骤期间,例如,作为上下文切换的结果,CSA中的所有结构可以被加载有新数据流图并且任何数据流令牌出现在该图中。CSA的等待时间不敏感语义可以许可结构的分布式异步初始化,例如,一旦PE被配置,它们就可以立即开始执行。未配置的PE可以对其通道进行反压处理直到它们被配置成止,例如,阻止配置的元件与未配置的元件之间的通信。可以将CSA配置分割成特许状态和用户级状态。这种两级分割可以使得结构的主要配置能够在不调用操作系统的情况下发生。在提取的一个实施例期间,数据流图的逻辑视图被捕获并提交到存储器中,例如,将所有实时控制及数据流令牌和状态包括在图中。
提取也可以在通过创建结构检查点来提供可靠性保证时起作用。CSA中的异常一般地可以是由在处理器中引起异常的相同事件引起的,所述事件诸如非法操作符变元或可靠性、可用性和可服务性(RAS)事件。在某些实施例中,在数据流操作符级下检测异常,例如,检查变元值或者通过模块化算术方案。在检测到异常时,数据流操作符(例如,电路)可以暂停并发出异常消息,例如,其包含操作标识符和已经发生的问题的性质的一些细节两者。在一个实施例中,数据流操作符将保持暂停直到它已被重配置为止。然后可以将异常消息传送给用于服务的关联处理器(例如,核心),例如,所述服务可以包括提取图以用于软件分析。
1.5块片级架构
CSA计算机架构的实施例(例如,把HPC和数据中心使用作为目标)被平铺。图6和图8示出了CSA的块片级部署。图8示出了CSA的全块片实施方式,例如,其可以是具有核心的处理器的加速器。此架构的主要优势是可以降低设计风险,例如,使得CSA和核心在制造时被完全解耦。除了允许更好的组件重用之外,这还可以允许像CSA高速缓存这样的组件的设计仅考虑CSA,例如,而不是需要结合核心的更严格的等待时间要求。最后,单独的块片可以允许CSA与小或大核心的集成。CSA的一个实施例捕获大多数矢量并行工作负载,使得大多数矢量样式工作负载直接在CSA上运行,但是在某些实施例中可以包括核心中的矢量样式指令,例如,以支持传统二进制文件。
2. 微架构
在一个实施例中,CSA微架构的目标是为了提供由CSA架构指定的每个数据流操作符的高质量实施方式。CSA微架构的实施例假设微架构的每个处理元件(和/或通信网络(例如,其网络数据流端点电路))对应于架构数据流图中的大致一个节点(例如,实体)。在一个实施例中,数据流图中的节点分布在多个网络数据流端点电路中。在某些实施例中,这产生不仅紧凑从而产生密集计算阵列而且高能效(例如,在处理元件(PE)既简单又大部分未复用的情况下,例如,针对CSA的配置(例如,编程)执行单个数据流操作符)的微架构元件。为了进一步减少能量和实现区域,CSA可以包括可配置异构结构样式,其中其每个PE仅实现数据流操作符的子集(例如,其中数据流操作符的单独的子集用(一个或多个)网络数据流端点电路实现)。外设和支持子系统(诸如CSA高速缓存)可以被提供来在主要CSA处理结构它本身中支持现任分布式并行机制。CSA微架构的实施方式可以利用存在于架构中的数据流和等待时间不敏感通信抽象。在某些实施例中,在编译器生成的图中的节点与CSA中的数据流操作符(例如,数据流操作符计算元件)之间存在(例如,实质上)一对一对应。
下面是对示例CSA的讨论,后面是对微架构的更详细讨论。本文中的某些实施例提供允许容易编译实现的CSA,例如,与处理编程语言(例如,C或C++)的小子集并且需要许多小时来编译甚至小程序的现有FPGA编译器形成对照。
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可以执行更多的操作并且具有比一核心更多的计算并行性,例如,可以和作为矢量处理单元(VPU)的FMA的数量的16倍一样多。为了利用所有这些计算元件,在某些实施例中每操作能量非常低。
我们的这种数据流架构的实施例的能量优势很多。并行性在数据流图中是显式的并且CSA架构的实施例不花费或者花费最少能量来提取它,例如,与每次指令被执行时必须重新发现并行性的乱序处理器不同。因为在一个实施例中每个PE负责单个操作,所以寄存器堆和端口计数可以是小的,例如,常常仅一个,并且因此使用比其在核心中的对应部分更少的能量。某些CSA包括许多PE,其中的每一个保持实时程序值,从而在传统架构中给出巨大寄存器堆的集合效果,这显著地减少存储器访问。在其中存储器是多端口和分布式的实施例中,CSA与一核心相比可以保持更多未完成的存储器请求并且利用更多的带宽。这些优势可以组合以产生仅占仅有算术电路的成本小百分比的每瓦能量水平。例如,在整数乘法的情况下,与底层乘法电路相比,CSA可能消耗的能量最多不超过底层乘法电路消耗的能量的25%。相对于一核心的一个实施例,该CSA结构中的整数运算消耗每整数运算能量的不到1/30。
从编程角度来看,CSA架构的实施例的应用特定可塑性对矢量处理单元(VPU)产生显著的优势。在传统不灵活的架构中,必须基于某个预期用例在设计时选取功能单元(例如浮点除法或各种超越数学函数)的数量。在CSA架构的实施例中,可以基于每个应用的要求将此类功能配置(例如,由用户而非制造商)配置到结构中。从而可以进一步增加应用吞吐量。同时地,CSA的实施例的计算密度通过避免强化此类函数而改进,并且替代地提供像浮点乘法这样的原函数的更多实例。这些优势在HPC工作负载方面可能是重要的,所述HPC工作负载中的一些在超越函数中花费浮点执行时间的75%。
CSA的某些实施例将显著进步表示为面向数据流的空间架构,例如,本公开的PE可以更小,但是也更高能效。这些改进可以由面向数据流的PE与例如具有单周期等待时间的轻量级电路交换互连的组合直接产生,例如,与分组交换网络形成对照(例如,具有最低限度300%以上等待时间)。PE的某些实施例支持32位或64位运算。本文中的某些实施例许可引入新的专用PE,例如,以用于机器学习或安全,而不仅仅是同质组合。本文中的某些实施例将轻量级面向数据流的处理元件与轻量级、低等待时间网络组合以形成高能效的计算架构。
为让某些空间架构成功,程序设计员将用相对少的努力配置它们,例如,同时获得优于顺序核心的显著功率和性能优越性。本文中的某些实施例提供被容易地编程(例如,通过编译器)、功率高效的且高度并行的CSA(例如,空间结构)。本文中的某些实施例提供实现这三个目标的(例如,互连)网络。从可编程性角度来看,网络的某些实施例提供流控制通道,例如,其对应于编译器中使用的执行的控制数据流图(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)可以如本文中所公开的那样,例如,如在图9中一样。加速器块片600包括存储器/高速缓存层次接口602,例如,以将加速器块片600与存储器和/或高速缓存对接。数据路径(例如,618)可以延伸到另一块片或者例如在块片的边缘处终止。处理元件可以包括输入缓冲器(例如,缓冲器606)和输出缓冲器(例如,缓冲器608)。
操作可以基于其输入的可用性和PE的状态被执行。PE可以从输入通道获得操作数并且将结果写入到输出通道,但是也可以使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好的PE。图9示出了一个这种PE(整数PE)的详细框图。此PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器构成。每个周期,调度器可以基于输入和输出缓冲器的可用性以及PE的状态选择用于执行的指令。操作的结果然后可以被写入到输出缓冲器或者到(例如,PE本地的)寄存器。写入到输出缓冲器的数据可以被传输到下游PE以用于进一步处理。这种样式的PE可以是极其高能效的,例如,不是从复杂的多端口寄存器堆读取数据,而是PE从寄存器读取数据。类似地,指令可以被直接地存储在寄存器中,而不是存储在虚拟化指令高速缓存中。
可以在特殊配置步骤期间设置指令寄存器。在此步骤期间,除了PE间网络之外的辅助控制线和状态可以用于按照配置跨越包括结构的若干PE流式传输。作为并行性的结果,这种网络的某些实施例可以提供快速重配置,例如,可以在不到大约10微秒内配置块片大小的结构。
图9表示处理元件的一个示例配置,例如,其中所有架构元件是最小尺寸的。在其他实施例中,处理元件的组件中的每一个被独立地定标以产生新PE。例如,为了处理更复杂的程序,可以引入可由PE执行的更大数量的指令。可配置性的第二维度在PE算术逻辑单元(ALU)的功能中。在图9中,描绘了可以支持加法、减法和各种逻辑运算的整数PE。可以通过将不同种类的功能单元代入PE来创建其他种类的PE。例如,整数乘法PE可能没有寄存器、单指令和单输出缓冲器。PE的某些实施例将融合乘加(FMA)分解成单独的但紧耦合的浮点乘和浮点加单元以改进针对乘加重工作负载的支持。在下面进一步对PE进行讨论。
图7A图示了根据本公开的实施例的可配置数据路径网络700(例如,参考图6所讨论的网络一或网络二的)。网络700包括可以(例如,经由其相应的控制值)被配置成将一个或多个数据路径(例如,从PE起)连接在一起的多个复用器(例如,复用器702、704、706)。图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线更好的高级语义,并且因此那些特定实施例更容易被编译器作为目标。本文中的网络的某些实施例可以被认为是用于构造分布式点对点数据通道的一组可组成的基元。
在某些实施例中,多播源可以不断言其数据有效,除非它从每个接收器接收到就绪值。因此,可以在多播情况下使用额外的合取和控制比特。
像某些PE一样,可以静态地配置网络。在此步骤期间,在每个网络组件处设置配置比特。这些比特控制例如复用器选择和流控制功能。我们的网络的正向路径需要一些比特来摆动其复用器。在图7A中所示的示例中,每跳需要四个比特:东西复用器各自利用一个比特,然而南向复用器利用两个比特。在此实施例中,四个比特可以被用于数据路径,但是七个比特可以被用于流控制功能(例如,在流控制路径网络中)。例如,如果CSA进一步利用南北方向,则其他实施例可以利用更多的比特。流控制功能可以针对流控制可能来自的每个方向利用控制比特。这可以使得能够静态地设置流控制功能的灵敏度。下表1概括了针对图7B中的网络的流控制功能的布尔代数实现,其中配置比特被大写。在此示例中,利用了七个比特。
表1:流实施方式
对于图7B中从左边起的第三流控制框,EAST_WEST_SENSITIVE和NORTH_SOUTH_SENSITIVE分别被描绘为设置来为粗线和虚线通道实现流控制。
图8图示了根据本公开的实施例的包括加速器802的硬件处理器块片800。加速器802可以是根据本公开的CSA。块片800包括多个高速缓存存储体(例如,高速缓存存储体808)。可以包括请求地址堆(RAF)电路810,例如,如在下面在部分2.2中所讨论的。ODI可以指代管芯上互连,例如,跨越将所有块片连接在一起的整个管芯展开的互连。OTI可以指代块片上互连,例如,跨越块片展开,例如,将块片上的高速缓存存储体连接在一起。
2.1处理元件
在某些实施例中,CSA包括异构PE的阵列,其中结构由各自仅实现数据流操作符的子集的若干类型的PE组成。作为示例,图9示出了能够实现一大组整数和控制操作的PE的临时实施方式。其他PE(包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些PE)可以具有类似的实施方式样式,例如,其中适当的(数据流操作符)电路取代ALU。CSA的PE(例如,数据流操作符)可以在开始执行之前被配置(例如,编程)以实现来自PE支持的集合当中的特定数据流操作。配置可以包括一个或两个控制字,所述控制字指定控制ALU的操作码,引导PE内的各个复用器,并且使数据流进入和离开PE通道。可以通过对这些配置比特进行微编码来实现数据流操作符。图9中描绘的整数PE 900被组织为自顶向下流动的单级逻辑管线。数据从本地网络集中的一个进入PE 900,其中它被注册在输入缓冲器中以供后续操作。每个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中描述的异常处理机制。此动作可以不仅优雅地停止管线的在违规计算中涉及的那些部分,而且也可以保存导致异常的机器状态,例如,以用于诊断分析。第二网络层(例如,夹层网络)可以是共享分组交换网络。夹层网络可以包括多个分布式网络控制器、网络数据流端点电路。夹层网络可以包括多个分布式网络控制器、网络数据流端点电路。夹层网络(例如,通过图45中的虚线框示意性地指示的网络)可以例如以等待时间、带宽和能量为代价提供更一般的长距离通信。在一些程序中,大多数通信可以发生在本地网络上,并且因此相比之下将相当大地减少夹层网络提供,例如,每个PE可能连接到多个本地网络,但是CSA将提供每PE的逻辑邻域仅一个夹层端点。因为夹层实际上是共享网络,所以每个夹层网络可以承载多个逻辑上独立的通道,例如,并且被提供有多个虚拟通道。在一个实施例中,夹层网络的主要功能是为了在PE中间并在PE与存储器之间提供宽范围通信。除了这种能力之外,夹层还可以包括(一个或多个)网络数据流端点电路,例如,以执行某些数据流操作。除了这种能力之外,夹层也可以作为运行时支持网络来操作,例如,通过所述运行时支持网络,各种服务可以以用户程序透明的方式访问完整结构。在这种能力下,夹层端点可以例如在CSA配置期间充当其本地邻域的控制器。为了形成横跨CSA块片的通道,可以利用三个子通道和两个本地网络通道(其承载到和来自夹层网络中的单个通道的业务)。在一个实施例中,利用一个夹层通道,例如,一个夹层和两个本地=3个总网络跳数。
跨越网络层的通道的可组合性可以被以块片间、管芯间和结构粒度扩展到更高级网络层。
图9图示了根据本公开的实施例的处理元件900。在一个实施例中,操作配置寄存器919在配置(例如,映射)期间被加载并且指定此处理(例如,计算)元件将执行的(一个或多个)特定操作。寄存器920活动可以通过该操作(复用器916的输出,例如,由调度器914控制)来控制。例如,当输入数据和控制输入到达时,调度器914可以对处理元件900的一个或多个操作进行调度。控制输入缓冲器922连接到本地网络902(例如,并且本地网络902可以包括如在图7A中一样的数据路径网络和如在图7B中一样的流控制路径网络)并且在它到达(例如,网络具有(一个或多个)数据比特和(一个或多个)有效比特)时被加载值)。控制输出缓冲器932、数据输出缓冲器934和/或数据输出缓冲器936可以接收例如如通过操作(复用器916的输出)所控制的处理元件900的输出。每当ALU 918执行(也通过复用器916的输出来控制),可以加载状态寄存器938。控制输入缓冲器922和控制输出缓冲器932中的数据可以是单个比特。复用器921(例如,操作数A)和复用器923(例如,操作数B)可以寻找输入的来源。
例如,假设在图3B中此处理(例如,计算)元件的操作是(或者包括)所谓的调用拾取。处理元件900然后将从数据输入缓冲器924或数据输入缓冲器926中选择数据,例如,以去往数据输出缓冲器934(例如,默认)或数据输出缓冲器936。922中的控制比特因此可以在从数据输入缓冲器924中选择的情况下指示0,或者在从数据输入缓冲器926中选择的情况下指示1。
例如,假设在图3B中此处理(例如,计算)元件的操作是(或者包括)所谓的调用开关。处理元件900将例如从数据输入缓冲器924(例如,默认)或数据输入缓冲器926向数据输出缓冲器934或数据输出缓冲器936输出数据。922中的控制比特因此可以在向数据输出缓冲器934输出的情况下指示0,或者在向数据输出缓冲器936输出的情况下指示1。
多个网络(例如,互连)可以连接到处理元件,例如(输入)网络902、904、906和(输出)网络908、910、912。连接可以是开关,例如,如参考图7A和图7B所讨论的。在一个实施例中,每个网络包括两个子网络(或网络上的两个通道),例如,一个用于图7A中的数据路径网络并且一个用于图7B中的流控制(例如,反压)路径网络。作为一个示例,本地网络902(例如,设置为控制互连)被描绘为切换(例如,连接)到控制输入缓冲器922。在此实施例中,数据路径(例如,如在图7A中一样的网络)可以承载控制输入值(例如,一个或多个比特)(例如,控制令牌),并且流控制路径(例如,网络)可以承载来自控制输入缓冲器922的反压值(例如,反压或非反压令牌),例如,以向上游生产者(例如,PE)指示新控制输入值将未被加载到(例如,发送到)控制输入缓冲器922中,直到反压值指示在控制输入缓冲器922中存在用于新控制输入值(例如,来自上游生产者的控制输出缓冲器)的空间。在一个实施例中,新控制输入值可以不进入控制输入缓冲器922直到(i)上游生产者从“控制输入”缓冲器922接收到“空间可用”反压值并且(ii)新控制输入值被从上游生产者发送为止,例如,并且这可以停止处理元件900直到那发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。
数据输入缓冲器924和数据输入缓冲器926可以类似地执行,例如,本地网络904(例如,设置为数据(与控制相反)互连)被描绘为切换(例如,连接)到数据输入缓冲器924。在此实施例中,数据路径(例如,如在图7A中一样的网络)可以承载数据输入值(例如,一个或多个比特)(例如,数据流令牌),并且流控制路径(例如,网络)可以承载来自数据输入缓冲器924的反压值(例如,反压或非反压令牌),例如,以向上游生产者(例如,PE)指示新数据输入值将未被加载到(例如,发送到)数据输入缓冲器924中,直到反压值指示在数据输入缓冲器924中存在用于新数据输入值(例如,来自上游生产者的数据输出缓冲器)的空间为止。在一个实施例中,新数据输入值可以不进入数据输入缓冲器924直到(i)上游生产者从“数据输入”缓冲器924接收到“空间可用”反压值并且(ii)新数据输入值被从上游生产者发送为止,例如,并且这可以停止处理元件900直到那发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。可以在其相应的输出缓冲器(例如,932、934、936)中停止控制输出值和/或数据输出值,直到反压值指示在输入缓冲器中存在用于(一个或多个)下游处理元件的可用空间为止。
可以从执行起停止处理元件900直到其操作数(例如,控制输入值和/或其对应的一个或多个数据输入值)被接收到为止和/或直到在处理元件900的(一个或多个)输出缓冲器中存在用于将通过对那些操作数执行操作而产生的数据的空间为止。
多播
为了让空间架构的某些实施例成功,它们将包括多播,例如,单个数据值被(例如,同时地)发送到两个或更多个组件。在一个实施例中,生产者(例如,传送)处理元件(PE)向多个消费者(例如,接收)处理元件(PE)(例如,其中的每一个的相应的输入缓冲器)发送输出(例如,来自其输出缓冲器),例如,在电路交换网络上发送(例如,如在图6-16中一样)。本文中的某些实施例提供用于在分布式电路交换网络中实现多播的硬件和方法。本文中的某些实施例通过例如在每个周期开始或结束时经由协议进行通信来提供高速多播,在所述协议中分布式协定使用在生产者PE与消费者PE(例如,其相应的缓冲器)之间发送(例如,从其启动)的值来实现。
本文中的某些实施例提供较低等待时间(例如,尤其是在多播情况下),例如,和50%一样多。本文中的某些实施例允许多播操作例如在单个周期中横跨空间加速器(例如,结构)中的更大(例如,通信)距离。
在构建由小处理元件(PE)组成的空间加速器时,通信等待时间和带宽可能对整体程序性能至关重要。本文中的某些实施例提供方便空间阵列(诸如图6中所示的空间阵列)中的PE之间的通信的轻量级电路交换网络,以及支持此网络所必需的微架构控制特征。本文中的某些实施例提供使得能够构建支持面向数据流的处理元件(PE)的通信的点对点流控制的通信通道(例如,路径)的电路交换网络。附加地或可替换地对于点对点通信(例如,单个PE到另一单个PE)而言,本文中的某些网络支持多播通信(例如,单个PE向多个其他PE发送数据项)。通信通道(例如,线)可以通过静态地(例如,在PE的运行时间之前)配置(例如,像本文中所讨论的那样)网络以在PE之间形成虚拟电路来形成。这些虚拟电路可以是流控制的并且是完全反压的,例如,使得如果来源没有数据或者目的地满了则PE将停止。在一个实施例中,多播要求所有消费者PE准备好在来自生产者PE的单个广播开始之前接收数据,例如,等待直到消费者PE谁都不在驱动使能信号以启动来自生产者PE的传输之前使反压值被断言。注意的是,PE和/或网络例如对于每个通道来说可以包括传送器和/或接收器。本文中的某些实施例提供用于电路交换网络中的多播通信的可扩展的完全分布式协议。多播可能要求分布式协定,其中所有消费者PE将接收(例如,在多槽缓冲器中)数据的恰好一个副本(例如,一个副本是多槽缓冲器中的任何槽中的唯一副本)。本文中的某些实施例允许数据(例如,控制值或数据值)到所有消费者PE的推测传输实现(例如,根据数据流图)。在一个实施例中,一些消费者PE可以接收数据(例如,进入到缓冲器中)而一些消费者PE可以不接收数据。本文中的某些实施例使用来自每个消费者PE的推测值(例如,和反压值)(例如,作为一对值)来修复消费者PE和生产者PE之间的错误推测。在一个实施例中,数据被重新传送直到所有消费者PE被发现在其缓冲器中已经(或者将在下一个周期中)接收到数据(例如,要由PE在执行操作时利用的控制值或数据值)为止。
图10A图示了根据本公开的实施例的可配置数据路径网络1000(例如,参考图6所讨论的网络一或网络二的)。网络1000包括多个复用器(例如,复用器1002、1004、1006)(并且可以包括与、或、异或、与非、或非或其他逻辑门),所述多个复用器可以被配置(例如,经由它们相应的控制值)成一起形成一个或多个数据路径(例如,从PE起),例如,以从产生数据的PE向消费数据的PE发送数据(和/或指示数据可用于从输出缓冲器发送的“有效数据”值)。图10B图示了根据本公开的实施例的可配置流控制路径网络1001(例如,参考图6所讨论的网络一或网络二)。网络1001可以包括多个复用器(并且可以包括与、或、异或、与非、或非或其他逻辑门)。网络可以是轻量级PE到PE网络。网络的某些实施例可以被认为是用于构建分布式点对点数据通道的一组组合式基元。
实现分布式数据通道可以包括图10A-10B中所图示的两个路径。前向或数据路径将数据从生产者承载到一个或多个消费者。复用器可以被配置成将数据和/或有效比特(例如,指示数据可用)从生产者引导到消费者,例如,如在图10A中一样。在多播的情况下,数据将被引导到多个消费者端点。网络的此实施例的第二部分是流控制(例如,反压)路径,其在前向数据路径的反向上流动,例如,如在图10B中一样。消费者端点可以在它们准备好接受新数据时断言。然后可以使用可配置逻辑连接(在图10B中标记为(例如,回流)流控制功能)将这些值导回到生产者。在一个实施例中,每个流控制功能电路是多个开关(例如,复用器),例如,如在图10A中一样。流控制路径可以处理从消费者到生产者的返回控制数据。连接可以使得能实现多播,例如,在生产者假定数据已被接收之前每个消费者准备好接收数据的情况下。在一个实施例中,PE是具有数据流操作符作为其架构接口的PE。附加地或可替换地,在一个实施例中PE可以是任何种类的PE(例如,在结构中),例如但不限于具有指令指针、触发的指令或基于状态机的架构接口的PE。
例如,除了PE被静态地配置之外,还可以静态地配置(一个或多个)网络。在配置步骤期间,可以在每个网络组件处设置配置比特。这些比特控制例如复用器选择和流控制功能。网络可以包括多个网络,例如数据路径网络和流控制路径网络。网络或多个网络可以利用不同的宽度(例如,第一宽度和更窄或更宽的第二宽度)的路径。在一个实施例中,数据路径网络具有比流控制路径网络的宽度更宽的(例如,比特传输)宽度。在一个实施例中,第一网络和第二网络中的每一个均包括它们自己的数据路径和流控制路径,例如数据路径A和流控制路径A以及更宽的数据路径B和流控制路径B。例如,用于耦合到消费者PE的多个输入缓冲器的生产者PE的单个输出缓冲器的数据路径和流控制路径。在一个实施例中,为了改进路由带宽,可以在PE的行之间并行布置多个网络。
像某些PE一样,可以静态地配置网络。在此步骤期间,在每个网络组件处设置配置比特。这些比特控制例如数据路径(例如,复用器选择)和流控制路径(例如,流控制功能)。前向(例如,数据)路径可以利用控制比特来使其复用器和/或逻辑门摆动。在图10A中所示的示例中,可以使用每跳四个比特:东西复用器各自利用一个比特,然而向南复用器利用两个比特。在此实施例中,对于数据路径可以利用四个比特,但是对于流控制功能(例如,在流控制路径网络中)可以利用七个比特。其他实施例可以利用更多的比特,例如,如果CSA进一步利用南北方向(或每个方向上的多个路径)的话。流控制路径可以利用控制比特来使其复用器和/或逻辑门摆动。流控制功能可以针对流控制可来自于的每个方向利用控制比特。这可以使得能够静态地设置流控制功能的灵敏度,例如,并且上表1概括了用于图10B中的网络的流控制功能的布尔代数实施方式,其中配置比特大写。在此示例中,利用了七个比特。在一个实施例中,网络1000和网络1001是相同的网络,例如,但是在其中形成不同的数据路径和流控制路径。
在某些实施例中,多播PE生产者不发送其数据(例如,或者断言其数据有效值),除非它从每个消费者PE接收到就绪(例如,无反压)值。例如,虚黑线示意性地图示了多播操作,所述多播操作对于多播要求每个消费PE(例如,第一消费者PE 1005和第二消费者PE1007)经由其在网络1001中的流控制路径(例如,流控制功能)断言在从生产者PE 1003(例如,同时地)向第一消费者PE 1005和第二消费者PE 1007发送数据(或有效值)之前,每个消费者PE准备好从生产者PE 1003接收(例如,在该消费者PE中有空间)数据。在所描绘的实施例中,网络1001中的流控制路径可以聚合来自第一消费者PE 1005和第二消费者PE 1007的就绪值(例如,反压值),例如,并且将该聚合值发送到生产者PE 1003。在一个实施例中,多播关键路径包括在从生产者PE向消费者PE发送数据(或指示数据可用的有效值)之前对流控制功能(例如,网络)进行采样以确保接收器会取数据。在一个实施例中,数据(或指示数据可用的有效值)通过数据路径,例如,如在图10A中一样。在一个实施例中,反压值(例如,准备接收数据值)通过流控制功能路径,例如,如在图10B中一样。
在图10A-10B中,粗黑线示意性地图示了缩减多播关键路径,例如,以便单个数据值被从生产者PE 1003(例如,同时地)发送到两个或更多个组件(例如,第一消费者PE 1005和第二消费者PE 1007)。缩减多播关键路径的某些实施例利用推测路径(例如,以传输推测值)。附加地或可听替换地,缩减多播关键路径的某些实施例利用成功路径(例如,以传输成功值)。在一个实施例中,成功路径遵循(例如,平行于)数据路径,例如,被从生产者PE发送到消费者PE。在一个实施例中,推测路径遵循(例如,平行于)流控制(例如,反压)路径,例如,被从消费者PE发送到生产者PE。在一个实施例中,推测值反映传送数据的PE和(一个或多个)网络的当前和先前周期中的行为。在一个实施例中,成功值反映传送数据的PE和(一个或多个)网络的先前周期中的行为。周期可以通过(例如,上升或下降)时钟边缘来定义。在一个实施例中,新周期从上升时钟边缘开始(例如,并且包括上升时钟边缘)。在一个实施例中,值在(例如,上升)时钟边缘上根据其断言值被锁定。在一个实施例中,在第一周期中设置值,并且在第二(例如,下一个)周期中开始通过该值被设置而引起的动作。本文中的某些实施例包括在PE和/或网络中用于存储接受值的储存器(例如,寄存器),例如,每个消费者PE中的储存器。本文中的某些实施例包括在PE和/或网络中用于存储成功值(例如,来自成功路径)的储存器(例如,寄存器),例如,生产者PE中的储存器。在一个实施例中,储存器是每个PE中(例如,用于每组缓冲器)的一比特寄存器。
图11A图示了根据本公开的实施例的通过网络1110耦合到第二处理元件(PE)1100B和第三处理元件(PE) 1100C的第一处理元件(PE) 1100A。在一个实施例中,网络1110是电路交换网络,例如,被配置成执行多播以从第一PE 1100A向第二PE 1100B和第三PE1100C两者发送数据。
在一个实施例中,电路交换网络1110包括(i)用于从第一PE 1100A向第二PE1100B和第三PE 1100C两者发送数据的数据路径,例如,用于要由第二PE 1100B和第三PE1110C对该数据执行的操作,以及(ii)用于发送控制数据的流控制路径,所述控制数据控制(或者用于控制)该数据从第一PE 1100A到第二PE 1100B和第三PE 1100C两者的发送。当数据在输出缓冲器中时(例如,当数据在第一PE 1100A的控制输出缓冲器1132A、第一数据输出缓冲器1134A或第二数据输出缓冲器1136A中时),数据路径可以发送数据(例如,有效)值。在一个实施例中,每个输出缓冲器包括它自己的数据路径,例如,用于它自己的从生产者PE到消费者PE的数据值。PE中的组件是示例,例如,PE可以仅包括单个(例如,数据)输入缓冲器和/或单个(例如,数据)输出缓冲器。流控制路径可以发送控制数据,所述控制数据控制(或者用于控制)对应数据从第一PE 1100A(例如,其控制输出缓冲器1132A、第一数据输出缓冲器1134A或第二数据输出缓冲器1136A)到第二PE 1100B和第三PE 1100C两者的发送。流控制数据可以包括来自每个消费者PE的(或者例如用与逻辑门从所有消费者PE聚合的)反压值。流控制数据可以包括反压值,例如,指示数据(例如,来自第一PE 1100A的控制输出缓冲器1132A、第一数据输出缓冲器1134A或第二数据输出缓冲器1136A)(例如,在当前周期中)将被存储在的第二PE 1100B的缓冲器(例如,控制输入缓冲器1122B、第一数据输入缓冲器1124B或第二数据输入缓冲器1126B)和/或第三PE 1100B的缓冲器(例如,控制输入缓冲器1122C、第一数据输入缓冲器1124C或第二数据输入缓冲器1126C)满了或者具有空槽(例如,在当前周期或下一个周期中是空的)(例如,传输尝试)。流控制数据可以包括推测值和/或成功值。网络1110可以包括推测路径(例如,以传输推测值)和/或成功路径(例如,以传输成功值)。在一个实施例中,成功路径遵循(例如,平行于)数据路径,例如,被从生产者PE发送到消费者PE。在一个实施例中,推测路径遵循(例如,平行于)反压路径,例如,被从消费者PE发送到生产者PE。在一个实施例中,每个消费者PE具有它自己的流控制路径,例如,在电路交换网络1110中,到其生产者PE。在一个实施例中,每个消费者PE流控制路径被组合成用于其生产者PE的聚合流控制路径。
转向所描绘的PE,处理元件1100A-C包括可以在配置(例如,映射)期间被加载并且指定处理(例如,计算)元件将执行的一个或多个特定操作(例如,并且指示是否启用非阻塞(例如,减少的关键路径)多播模式(例如,启用阻塞来自生产者PE的传输直到所有消费者PE就绪为止的多播模式))的操作配置寄存器1119A-C。寄存器1120A-C活动可以通过该操作(复用器1116A-C的输出,例如,由调度器1114A-C控制)来控制。例如,当数据流令牌到达(例如,输入数据和/或控制输入)时,调度器1114A-C可以分别对处理元件1100A-C的一个或多个操作进行调度。控制输入缓冲器1122A、第一数据输入缓冲器1124A和第二数据输入缓冲器1126A连接到用于第一PE 1100A的本地网络1102。在一个实施例中,控制输出缓冲器1132A连接到用于第一PE 1100A的网络1110,控制输入缓冲器1122B连接到用于第二PE1100B的本地网络1110,并且控制输入缓冲器1122C连接到用于第三PE 1100C的本地网络1110(例如,并且每个本地网络可以包括如在图10A中一样的数据路径和如在图10B中一样的流控制路径)并且在它到达时被加载有一值(例如,网络具有(一个或多个)数据比特和(一个或多个)有效比特)。在一个实施例中,第一数据输出缓冲器1134A连接到用于第一PE1100A的网络1110,第一数据输入缓冲器1124B连接到用于第二PE 1100B的本地网络1110,并且第一数据输入缓冲器1124C连接到用于第三PE 1100C的本地网络1110(例如,并且每个本地网络可以包括如在图10A中一样的数据路径和如在图10B中一样的流控制路径)并且在它到达时被加载有一值(例如,网络具有(一个或多个)数据比特和(一个或多个)有效比特)。在一个实施例中,第二数据输出缓冲器1136A连接到用于第一PE 1100A的网络1110,第二数据输入缓冲器1126B连接到用于第二PE 1100B的本地网络1110,并且第二数据输入缓冲器1126C连接到用于第三PE 1100C的本地网络1110(例如,并且每个本地网络可以包括如在图10A中一样的数据路径和如在图10B中一样的流控制路径)并且在它到达时被加载有一值(例如,网络具有(一个或多个)数据比特和(一个或多个)有效比特)。控制输出缓冲器1132A-C、数据输出缓冲器1134A-C和/或数据输出缓冲器1136A-C可以例如像通过操作(复用器1116A-C的输出)所控制的那样(分别)接收处理元件1100A-C的输出。每当ALU 1118A-C执行(例如,还通过复用器1116A-C的输出来控制)时,可以加载状态寄存器1138A-C。控制输入缓冲器1122A-C和控制输出缓冲器1132A-C中的数据可以是单个比特。复用器1121A-C(例如,操作数A)和复用器1123A-C(例如,操作数B)可以寻找输入的来源。
例如,假设第一处理(例如,计算)元件1100A的操作是(或者包括)在图3B中被称作调用拾取的东西。处理元件1100A然后将从数据输入缓冲器1124A或数据输入缓冲器1126A中选择数据,例如,以转到数据输出缓冲器1134A(例如,默认)或数据输出缓冲器1136A。1122A中的控制比特因此可以在从数据输入缓冲器1124A中选择的情况下指示0或者在从数据输入缓冲器1126A中选择的情况下指示1。
例如,假设第一处理(例如,计算)元件1100A的操作是(或者包括)在图3B中被称作调用开关的东西。处理元件1100A将例如从数据输入缓冲器1124A(例如,默认)或数据输入缓冲器1126A向数据输出缓冲器1134A或数据输出缓冲器1136A输出数据。1122A中的控制比特因此可以在输出到数据输出缓冲器1134A的情况下指示0或者在输出到数据输出缓冲器1136A的情况下指示1。在某些实施例中输出数据可以是由ALU进行操作的结果。
多个网络(例如,互连)可以连接到处理元件,例如网络1102、1104、1106和1110。连接可以是开关,例如,如参考图10A和图10B所讨论的。在一个实施例中,PE和电路交换网络1110被配置(例如,控制设置被选择)为使得电路交换网络1110包括(i)用于从第一PE1100A向第二PE 1100B和第三PE 1100C两者发送数据的数据路径,例如,用于要由第二PE1100B和第三PE 1100C对该数据执行的操作,以及(ii)用于发送控制数据的流控制路径,所述控制数据控制(或者用于控制)数据从第一PE 1100A到第二PE 1100B和第三PE 1100C两者的发送。第一PE 1100A包括调度器1114A。调度器或其他PE和/或网络电路可以包括用于例如根据在下面讨论的示例状态机来控制多播操作的控制电路。流控制数据可包括反压值、推测值和/或成功值。
在一个实施例中,反压值和推测值(例如,以及成功值)允许PE和网络(例如,累积地系统)处理分布式协调情况,例如,其中所有消费者PE(例如,接收器)必须在它可以由生产者PE(例如,传送器)出队(例如,丢弃)之前接收多播数据项。本文中的某些实施例允许目标接收器推测地接收数据,例如,即使不知道所有接收器将接收(例如,存储)数据(例如,在该周期中)。因此,在某些实施例中数据它本身不是推测性的并且它最终将被发送。这里推测可以一般地指代生产者PE(例如,传送器)假定消费者PE(例如,接收器)(例如,其中的至少一些)可能接收所传送的数据(例如,在该周期中)。例如,与等待来自所有多播消费者PE的反压值以指示它们具有可用于该数据的储存器相反。在一个实施例中,如果任何接收器未就绪,则反压(例如,就绪)值将例如通过流控制功能被拉到指示在消费者PE中储存器不可用的值(例如,二进制低),并且生产者PE(例如,传送器)也会将其数据流(例如,传送有效)值拉到一值(例如,二进制低),使得将不会传送数据。
在缩减多播关键路径实施例中,生产者PE(例如,传送器)可以将其数据流(例如,有效)信号驱动到一值(例如,二进制高)以指示它具有待传送的数据。(一个或多个)推测值和/或成功值可以解析并非所有消费者PE(例如,接收器)都准备好(例如,在该周期中)接收数据(例如,具有可用于该数据的储存器)的情况。在一个实施例中,当生产者PE(例如,传送器)能够成功地完成在先前周期中针对数据流令牌的传输(例如,数据流令牌被存储在所有多播消费者PE中)时,例如,如通过像本文中所讨论的那样设置成功值(例如,成功比特)所指出的那样,成功信号(例如,单个比特)由生产者PE(例如,传送器)驱动到指示成功(例如,二进制高)的值。在一个实施例中,当生产者PE(例如,传送器)针对所有多播接收器PE观察到推测值被设置为用于指示数据流令牌被存储在缓冲器中的值(例如,二进制高)(例如,如通过接受值(例如,比特)所指示的那样)或者反压值(例如,就绪值)被设置为用于指示储存器将在消费者PE的缓冲器中(例如,在下一个周期(例如,传输尝试)中)可用于数据流令牌的值(二进制高)时,生产者PE(例如,传送器)确定它能够在先前周期中完成数据流令牌的传输。在某些实施例中,当生产者PE(例如,传送器)确定成功值已经处于指示生产者PE能够成功地完成在先前周期中到多播消费者PE的传输的值(例如,二进制高)时,然后生产者PE(例如,传送器)忽视(一个或多个)推测值(例如,单个比特),例如,因为已知它指代完成事务。在一个实施例中,在成功被驱动为高的所有周期中,生产者PE(例如,传送器)也使其数据出队,例如,从其输出缓冲器中出队(例如,从第一PE 1100A的控制输出缓冲器1132A、第一数据输出缓冲器1134A或第二数据输出缓冲器1136A中移除)。在某些实施例中,在生产者PE的储存器中设置成功值(以指示成功)使成功值被发送(例如,在设置成功值之后的下一个周期中或者在设置成功值的相同周期中)到消费者PE以清除其接受值(例如,比特)(例如,在成功值被发送的相同周期中)。在某些实施例中,成功值在多播传输完成的任何周期之后被设置,否则被清除,例如,并且成功可以在背对背周期中发生。在一个实施例中,(一个或多个)接受比特在数据流令牌从输出缓冲器中出队之后的周期中被清除。
在一个实施例中,推测值(例如,单个比特)由消费者PE(例如,接收器)驱动到一值,所述值指示消费者PE(例如,接收器)是否已接受由生产者PE(例如,传送器)发送的数据,例如,如通过如本文中所讨论的那样(例如,在该周期中)设置接受值(例如,接受比特)所指出的那样,或者接收器是否准备好无论用什么方法接收(例如,反压值指示储存器可用或者将在下一个周期时可用,例如,该PE正在消费将在当前周期结束时被从缓冲器中清除的数据流令牌)。在一个实施例中,反压值(例如,就绪值)和接受值被逻辑“或”(例如,如果任何一个或两个输入操作数为真则返回布尔值真(例如,二进制高,例如,1),否则返回假(例如,二进制低,例如,0))以一起形成推测值。在一个实施例中,当观察到成功值(例如,值)时(例如,紧跟观察到成功值的任何周期之后)接受值(例如,值)被清除,例如,指示生产者PE能够成功地完成在前一个周期中到多播消费者PE的传输。本文中的某些实施例允许推测地传送的数据通过管线进行。在一个实施例中,一旦已经获得了数据流令牌(例如,值)就可以使用它,例如,不停止它。在一个实施例中,每个消费者PE(例如,接收器)将驱动其推测值直到在它观察到生产者PE(例如,传送器)驱动其成功值以指示成功之后的周期为止。这可以改进某些数据流图的性能。在一个实施例中,具有两个反压值(例如,就绪)和推测值使得能够以完全管线方式传送数据以得到多播。可以在推测值由于先前传输已在先前周期中完成而不可用的周期中使用反压(例如,就绪)值。在一个实施例中,PE在每个输入缓冲器中被提供有至少两个输入缓冲器槽以允许获得完全管线操作。
在某些实施例中,消费者(例如,PE)的分布式协定允许缩减多播关键路径,例如,在传输尝试之后的下一个周期中检查到成功的情况下,例如,而不是生产者(例如,PE)等待所有反压为来自消费者的清除(例如,就绪)值。在一个实施例中,生产者发送数据(例如,在第一周期开始时),然后消费者检查他们是否接收到该数据(例如,同时地,在第一周期结束或第二周期开始时),例如,如果数据被存储在该消费者的目标缓冲器中。如果所有传输都成功,则在一个实施例中(例如,在时钟边缘处),生产者将设置成功比特并且然后将成功值驱动到消费者(例如,在下一个周期中)。如果不是,则可以在另一周期内发送数据直到所有消费者都通过数据被接收到的检查为止。在一个实施例中,第一值(例如,来自消费者与生产者之间的第一线)指示数据是否就绪(例如,在其输出缓冲器中)并且第二值(例如,来自消费者与生产者之间的第二线)指示数据就绪,但它是重传(例如,不是新数据)。第二值(例如,来自第二线)因此可以防止在消费者中具有两个相同的数据,例如,以避免对于来自生产者PE的被传送多次的输出值的相同实例在消费者PE的输入缓冲器中具有两个或更多个副本。本文中的某些实施例在每个消费者处添加状态元素,例如接受比特。流控制可以指示满或空(例如,反压)并且指示消费者是否在先前周期中取到数据。生产者可以使用(i)消费者是否取到数据以及(ii)消费者是否可以取更多数据来控制其数据的输出的知识。消费者PE可以将推测值发送回给生产者。消费者PE可以指示其目标缓冲器满了,但是生产者PE可以利用本文中的实施例来确定对于消费者PE来说目标缓冲器满了,并且消费者PE取到数据(而不是从针对来自生产者PE的输出值的不同实例的先前传输起取数据并且满了)。在某些实施例中,利用以下聚合值中的一个或多个:(1)所有消费者PE是满还是空,以及(2)消费者PE(例如,所有多播消费者PE)是否在在前周期中取到数据,例如,如此反压值指示储存器不可用,因为它在该周期中取到当前数据或者因为存在和/或没有用于数据的空间。
在一个实施例中,第一PE 1100A包括针对控制输出缓冲器1132A的成功值(例如,比特)的第一储存器1101、针对第一数据输出缓冲器1134A的成功值(例如,比特)的第二储存器1103以及针对第二数据输出缓冲器1136A的成功值(例如,比特)的第三储存器1105。描绘的调度器1114A耦合到第一储存器1101以设置或在清除在其中针对控制输出缓冲器1132A的成功值(例如,比特),耦合到第二储存器1103以设置或者清除在其中针对第一数据输出缓冲器1134A的成功值(例如,比特),并且耦合到第三储存器1105以设置或者清除在其中针对第二数据输出缓冲器1136A的成功值(例如,比特)。在一个实施例中,调度器1114A基于来自第二PE 1100B的流控制数据和来自第三PE 1100C的流控制数据来设置成功值。可以将流控制数据中的一些或全部聚合成单个值,例如,发送到第一(例如,作为生产者)PE1100A。第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1108A(1-3),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE1100C接收反压值。在一个电路交换配置中,(例如,输入)端口1108A(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将从控制输入缓冲器1122B、第一数据输入缓冲器1124B和第二数据输入缓冲器1126B和/或控制输入缓冲器1122C、第一数据输入缓冲器1124C和第二数据输入缓冲器1126C中的每一个接收相应的反压值。在一个实施例中,(例如,输入)端口1108A(1-3)将接收以下各项中的每一个的聚合(例如,单个)相应的反压值:(i)与来自控制输入缓冲器1122C(例如,在输入端1108A(1)上)的反压值逻辑与(例如,如果两个输入操作数为真则它返回布尔值真(例如,二进制高,例如,二进制1),否则返回假(例如,二进制0))的来自控制输入缓冲器1122B的反压值,(ii)与来自第一数据输入缓冲器1124C(例如,在输入端1108A(2)上)的反压值逻辑与的来自第一数据输入缓冲器1124B的反压值,以及(iii)与来自第二数据输入缓冲器1126C(例如,在输入端1108A(3)上)的反压值逻辑与的来自第二数据输入缓冲器1126B的反压值。在一个实施例中,标记为(1)、(2)或(3)的输入端或输出端是它自己的相应的线或其他耦合。
第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1112A(1-3),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE1100C接收推测值。在一个电路交换配置中,(例如,输入)端口1112A(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将接收针对控制输入缓冲器1122B、第一数据输入缓冲器1124B和第二数据输入缓冲器1126B和/或控制输入缓冲器1122C、第一数据输入缓冲器1124C和第二数据输入缓冲器1126C中的每一个的相应的推测值。在一个实施例中,(例如,输入)端口1112A(1-3)将接收针对以下各项中的每一个的聚合(例如,单个)推测值:(i)与针对控制输入缓冲器1122C(例如,在输入端1108A(1)上)的推测值逻辑与的针对控制输入缓冲器1122B的推测值,(ii)与针对第一数据输入缓冲器1124C(例如,在输入端1108A(2)上)的推测值逻辑与的针对第一数据输入缓冲器1124B的推测值,以及(iii)与针对第二数据输入缓冲器1126C(例如,在输入端1108A(3)上)的推测值逻辑与的针对第二数据输入缓冲器1126B的推测值。
在一个电路交换配置中,从(i)控制输出缓冲器1132A到控制输入缓冲器1122B和控制输入缓冲器1122C、(ii)第一数据输出缓冲器1134A到第一数据输入缓冲器1124B和第一数据输入缓冲器1124C、(iii)第二数据输出缓冲器1136A到第二数据输入缓冲器1126B和第二数据输入缓冲器1126C或其任何组合的多播数据路径被形成。数据路径可以用于从生产者PE向消费者PE发送数据令牌。在所描绘的实施例中,第二PE 1100B包括针对控制输入缓冲器1122B的接受值(例如,比特)的第一储存器1107、针对第一数据输入缓冲器1124B的接受值(例如,比特)的第二储存器1109以及针对第二数据输入缓冲器1126B的接受值(例如,比特)的第三储存器1111,例如,由调度器1114B设置。在所描绘的实施例中,第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输出)端口1108B(1-3),例如,以从第二(例如,作为消费者)PE 1100B向第一(例如,作为生产者)PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108B(1-3)将例如由调度器1114B发送针对控制输入缓冲器1122B(例如,在输出端1108B(1)上)、第一数据输入缓冲器1124B(例如,在输出端1108B(2)上)和第二数据输入缓冲器1126B(例如,在输出端1108B(3)上) 中的每一个的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112B(1-3),例如,以从第一(例如,作为生产者)PE 1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112B(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将接收针对控制输入缓冲器1122B(例如,在输入端1112B(1)上)、第一数据输入缓冲器1124B(例如,在输入端1112B(2)上)和第二数据输入缓冲器1126B(例如,在输入端1112B(3)上)中的每一个的相应的成功值。
在所描绘的实施例中,第三PE 1100C包括针对控制输入缓冲器1122C的接受值(例如,比特)的第一储存器1113、针对第一数据输入缓冲器1124C的接受值(例如,比特)的第二储存器1115以及针对第二数据输入缓冲器1126C的接受值(例如,比特)的第三储存器1117,例如,由调度器1114C设置。第三(例如,作为消费者)PE 1100C包括耦合到网络1110的(例如,输出)端口1108C(1-3),例如,以从第三(例如,作为消费者)PE 1100C向第一(例如,作为生产者)PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108C(1-3)将例如由调度器1114C发送针对控制输入缓冲器1122C(例如,在输出端1108C(1)上)、第一数据输入缓冲器1124C(例如,在输出端1108C(2)上)和第二数据输入缓冲器1126C(例如,在输出端1108C(3)上)中的每一个的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112C(1-3),例如,以从第一(例如,作为生产者)PE 1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112C(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将接收针对控制输入缓冲器1122C(例如,在输入端1112C(1)上)、第一数据输入缓冲器1124C(例如,在输入端1112C(2)上)和第二数据输入缓冲器1126C(例如,在输入端1112C(3)上)中的每一个的相应的成功值。
如本文中所指出的,可以通过对接受比特(例如,其中二进制低值指示缓冲器自它被最后清除以来未取到输入而二进制高值指示缓冲器自它被最后清除以来取到输入,例如,通过成功值)和反压比特(例如,其中二进制低值指示没有反压而二进制高值指示存在反压)进行逻辑或来形成推测值。端口可包括多个输入端和/或输出端。处理元件可以包括进入网络1110的单个端口,或任何多个端口。尽管图11B-11D图示了三个示例配置,然而所有三个或其任何组合可以被同时地使用和存在(例如,在网络1110中)。在一个实施例中,开关(例如,复用器)被配置(例如,经由其控制线)以形成图11B-11D中的三个示例配置。在一个实施例中,非可配置静态线用于形成如图11B-11D中所图示的三个示例配置。
第一PE 1100A可以包括针对控制输入缓冲器1122A的接受值(例如,比特)的第一储存器1129、针对第一数据输入缓冲器1124A的接受值(例如,比特)的第二储存器1131以及针对第二数据输入缓冲器1126A的接受值(例如,比特)的第三储存器1133,例如,由调度器1114A设置。第一(例如,作为消费者)PE 1100A可以包括耦合到网络1102的(例如,输出)端口1125(1-3),例如,以从第一(例如,作为消费者)PE 1100A向上游(例如,作为生产者)PE发送反压值。在一个电路交换配置中,(例如,输出)端口1125(1-3)将例如由调度器1114A发送针对控制输入缓冲器1122A(例如,在输出端1125(1)上)、第一数据输入缓冲器1124A(例如,在输出端1125(2))和第二数据输入缓冲器1126A(例如,在输出端1125(3)上)中的每一个的相应的反压值。第一(例如,作为消费者)PE 1100A包括耦合到网络1102的(例如,输入)端口1127(1-3),例如,以从上游(例如,作为生产者)PE接收成功值。在一个电路交换配置中,(例如,输入)端口1127(1-3)(例如,具有多个并行输入端(1)、(2)和(3)))将接收针对控制输入缓冲器1122A(例如,在输入端1127(1)上)、第一数据输入缓冲器1124A(例如,在输入端1127(2)上)和第二数据输入缓冲器1126A(例如,在输入端1127(3)上)中的每一个的相应的成功值。
第二(例如,作为生产者)PE 1100B可以包括耦合到网络1104(例如,其可以是与网络1106相同的网络)的(例如,输入)端口1135(1-3),例如,以从一个或多个下游(例如,作为消费者)PE接收反压值。在一个电路交换配置中,(例如,输入)端口1135(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将从第一下游PE的控制输入缓冲器、第一数据输入缓冲器和第二数据输入缓冲器和/或第二下游PE的控制输入缓冲器、第一数据输入缓冲器和第二数据输入缓冲器中的每一个接收相应的反压值。在一个实施例中,(例如,输入)端口1135(1-3)将接收以下各项中的每一个的聚合(例如,单个)相应的反压值:(i)与来自用于第二下游PE的控制输入缓冲器(例如,在输入端1135(1)上)的反压值逻辑与(例如,如果两个输入操作数为真则它返回布尔值真(例如,二进制高,例如,二进制1),否则返回假(例如,二进制0))的来自用于第一下游PE的控制输入缓冲器的反压值,(ii)与来自用于第一下游PE的第一数据输入缓冲器(例如,在输入端1135(2)上)的反压值逻辑与的来自用于第一下游PE的第一数据输入缓冲器的反压值,以及(iii)与来自用于第一下游PE的第二数据输入缓冲器(例如,在输入端1135(3)上)的反压值逻辑与的来自用于第一下游PE的第二数据输入缓冲器的反压值。在一个实施例中,标记为(1)、(2)或(3)的输入端或输出端是它自己的相应的线或其他耦合。在一个实施例中,每个PE包括相同的电路和/或组件。
第二PE 1100B包括针对控制输出缓冲器1132B的成功值(例如,比特)的第一储存器1139、针对第一数据输出缓冲器1134B的成功值(例如,比特)的第二储存器1141以及针对第二数据输出缓冲器1136B的成功值(例如,比特)的第三储存器1143。描绘的调度器1114B耦合到第一储存器1139以设置或者清除在其中控制输出缓冲器1132B的成功值(例如,比特),耦合到第二储存器1141以设置或者清除在其中针对第一数据输出缓冲器1134B的成功值(例如,比特),并且耦合到第三储存器1143以设置或者清除在其中针对第二数据输出缓冲器1136B的成功值(例如,比特)。在一个实施例中,在储存器1139中设置成功值使成功值在从储存器1139通过网络1104到(例如,作为消费者)第一下游PE的(例如,输入)端口并且到(例如,作为消费者)第二下游PE的(例如,输入)端口的路径上发送。在一个实施例中,由第一下游PE或第二下游PE从第二PE 1100B(例如,从其储存器1139)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。在一个实施例中,在储存器1141中设置成功值使成功值在从储存器1141通过网络1104到(例如,作为消费者)第一下游PE的(例如,输入)端口并且到(例如,作为消费者)第二下游PE的(例如,输入)端口的路径上发送。在一个实施例中,由第一下游PE或第二下游PE从第二PE 1100B(例如,从其储存器1141)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。在一个实施例中,由第一下游PE或第二下游PE从第二PE 1100B(例如,从其储存器1143)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。在一个实施例中,在储存器1143中设置成功值使成功值在从储存器1143通过网络1104到(例如,作为消费者)第一下游PE的(例如,输入)端口并且到 (例如,作为消费者)第二下游PE的(例如,输入)端口的路径上发送。在一个实施例中,由第一下游PE或第二下游PE从第二PE 1100B(例如,从其储存器1143)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。
第二(例如,作为生产者)PE 1100B可以包括耦合到网络1104的(例如,输入)端口1137(1-3),例如,以从第一下游(例如,作为消费者)PE和/或第二下游(例如,作为消费者)PE接收推测值。在一个电路交换配置中,(例如,输入)端口1137(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将接收针对用于第一下游PE的控制输入缓冲器、用于第一下游PE的第一数据输入缓冲器和用于第一下游PE的第二数据输入缓冲器和/或用于第二下游PE的控制输入缓冲器、用于第二下游PE的第一数据输入缓冲器和用于第二下游PE的第二数据输入缓冲器中的每一个的相应的推测值。在一个实施例中,(例如,输入)端口1137(1-3)将接收针对以下各项中的每一个的聚合(例如,单个)推测值:(i)与针对用于第二下游PE的控制输入缓冲器(例如,在输入端1137(1)上)的推测值逻辑与的针对用于第一下游PE的控制输入缓冲器的推测值,(ii)与针对用于第二下游PE的第一数据输入缓冲器(例如,在输入端1137(2)上)的推测值逻辑与的针对用于第一下游PE的第一数据输入缓冲器的推测值,以及(iii)与针对用于第二下游PE的第二数据输入缓冲器(例如,在输入端1137(3)上)的推测值逻辑与的针对用于第一下游PE的第二数据输入缓冲器的推测值。
第二(例如,作为生产者)PE 1100B可以包括耦合到网络1104(例如,其可以是与网络1106相同的网络)的(例如,输入)端口1135(1-3),例如,以从一个或多个下游(例如,作为消费者)PE接收反压值。在一个电路交换配置中,(例如,输入)端口1135(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将从第一下游PE的控制输入缓冲器、第一数据输入缓冲器和第二数据输入缓冲器和/或第二下游PE的控制输入缓冲器、第一数据输入缓冲器和第二数据输入缓冲器中的每一个接收相应的反压值。在一个实施例中,(例如,输入)端口1135(1-3)将接收以下各项中的每一个的聚合(例如,单个)相应的反压值:(i)与来自用于第二下游PE的控制输入缓冲器(例如,在输入端1135(1)上)的反压值逻辑与(例如,如果两个输入操作数为真则它返回布尔值真(例如,二进制高,例如,二进制1),否则返回假(例如,二进制0))的来自用于第一下游PE的控制输入缓冲器的反压值,(ii)与来自用于第一下游PE的第一数据输入缓冲器(例如,在输入端1135(2)上)的反压值逻辑与的来自用于第一下游PE的第一数据输入缓冲器的反压值,以及(iii)与来自用于第一下游PE的第二数据输入缓冲器(例如,在输入端1135(3)上)的反压值逻辑与的来自用于第一下游PE的第二数据输入缓冲器的反压值。在一个实施例中,标记为(1)、(2)或(3)的输入端或输出端是它自己的相应的线或其他耦合。在一个实施例中,每个PE包括相同的电路和/或组件。
第二(例如,作为生产者)PE 1100B可以包括耦合到网络1104的(例如,输入)端口1137(1-3),例如,以从第一下游(例如,作为消费者)PE和/或第二下游(例如,作为消费者)PE接收推测值。在一个电路交换配置中,(例如,输入)端口1137(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将接收针对用于第一下游PE的控制输入缓冲器、用于第一下游PE的第一数据输入缓冲器和用于第一下游PE的第二数据输入缓冲器和/或用于第二下游PE的控制输入缓冲器、用于第二下游PE的第一数据输入缓冲器和用于第二下游PE的第二数据输入缓冲器中的每一个的相应的推测值。在一个实施例中,(例如,输入)端口1137(1-3)将接收针对以下各项中的每一个的聚合(例如,单个)推测值:(i)与针对用于第二下游PE的控制输入缓冲器(例如,在输入端1137(1)上)的推测值逻辑与的针对用于第一下游PE的控制输入缓冲器的推测值,(ii)与针对用于第二下游PE的第一数据输入缓冲器(例如,在输入端1137(2)上)的推测值逻辑与的针对用于第一下游PE的第一数据输入缓冲器的推测值,以及(iii)与针对用于第二下游PE的第二数据输入缓冲器(例如,在输入端1137(3)上)的推测值逻辑与的针对用于第一下游PE的第二数据输入缓冲器的推测值。
第三(例如,作为生产者)PE 1100C可以包括耦合到网络1106(例如,其可以是与网络1104相同的网络)的(例如,输入)端口1145(1-3),例如,以从一个或多个下游(例如,作为消费者)PE接收反压值。在一个电路交换配置中,(例如,输入)端口1145(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将从第一下游PE的控制输入缓冲器、第一数据输入缓冲器和第二数据输入缓冲器和/或第二下游PE的控制输入缓冲器、第一数据输入缓冲器和第二数据输入缓冲器中的每一个接收相应的反压值。在一个实施例中,(例如,输入)端口1145(1-3)将接收以下各项中的每一个的聚合(例如,单个)相应的反压值:(i)与来自用于第二下游PE的控制输入缓冲器(例如,在输入端1145(1)上)的反压值逻辑与(例如,如果两个输入操作数为真则它返回布尔值真(例如,二进制高,例如,二进制1),否则返回假(例如,二进制0))的来自用于第一下游PE的控制输入缓冲器的反压值,(ii)与来自用于第一下游PE的第一数据输入缓冲器(例如,在输入端1145(2)上)的反压值逻辑与的来自用于第一下游PE的第一数据输入缓冲器的反压值,以及(iii)与来自用于第一下游PE的第二数据输入缓冲器(例如,在输入端1145(3)上)的反压值逻辑与的来自用于第一下游PE的第二数据输入缓冲器的反压值。在一个实施例中,标记为(1)、(2)或(3)的输入端或输出端是它自己的相应的线或其他耦合。在一个实施例中,每个PE包括相同的电路和/或组件。
第三(例如,作为生产者)PE 1100C可以包括耦合到网络1106的(例如,输入)端口1147(1-3),例如,以从第一下游(例如,作为消费者)PE和/或第二下游(例如,作为消费者)PE接收推测值。在一个电路交换配置中,(例如,输入)端口1147(1-3)(例如,具有多个并行输入端(1)、(2)和(3))将接收针对用于第一下游PE的控制输入缓冲器、用于第一下游PE的第一数据输入缓冲器和用于第一下游PE的第二数据输入缓冲器和/或用于第二下游PE的控制输入缓冲器、用于第二下游PE的第一数据输入缓冲器和用于第二下游PE的第二数据输入缓冲器中的每一个的相应的推测值。在一个实施例中,(例如,输入)端口1147(1-3)将接收针对以下各项中的每一个的聚合(例如,单个)推测值:(i)与针对用于第二下游PE的控制输入缓冲器(例如,在输入端1147(1)上)的推测值逻辑与的针对用于第一下游PE的控制输入缓冲器的推测值,(ii)与针对用于第二下游PE的第一数据输入缓冲器(例如,在输入端1147(2)上)的推测值逻辑与的针对用于第一下游PE的第一数据输入缓冲器的推测值,以及(iii)与针对用于第二下游PE的第二数据输入缓冲器(例如,在输入端1147(3)上)的推测值逻辑与的针对用于第一下游PE的第二数据输入缓冲器的推测值。
第三PE 1100C包括针对控制输出缓冲器1132C的成功值(例如,比特)的第一储存器1149、针对第一数据输出缓冲器1134C的成功值(例如,比特)的第二储存器115以及针对第二数据输出缓冲器1136C的成功值(例如,比特)的第三储存器1153。描绘的调度器1114C耦合到第一储存器1149以设置或者清除在其中针对控制输出缓冲器1132C的成功值(例如,比特),耦合到第二储存器1151以设置或者清除在其中针对第一数据输出缓冲器1134C的成功值(例如,比特),并且耦合到第三储存器1153以设置或者清除在其中针对第二数据输出缓冲器1136C的成功值(例如,比特)。在一个实施例中,在储存器1149中设置成功值使成功值在从储存器1149通过网络1104到(例如,作为消费者)第一下游PE的(例如,输入)端口并且到(例如,作为消费者)第二下游PE的(例如,输入)端口的路径上发送。在一个实施例中,由第一下游PE或第二下游PE从第三PE 1100C(例如,从其储存器1149)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。在一个实施例中,在储存器1151中设置成功值使成功值在从储存器1151到网络1104到(例如,作为消费者)第一下游PE的(例如,输入)端口并且到(例如,作为消费者)第二下游PE的(例如,输入)端口的路径上发送。在一个实施例中,由第一下游PE或第二下游PE从第三PE 1100C(例如,从其储存器1151)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。在一个实施例中,由第一下游PE或第二下游PE从第三PE 1100C(例如,从其储存器1153)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。在一个实施例中,在储存器1153中设置成功值使成功值在从储存器1153通过网络1104到(例如,作为消费者)第一下游PE的(例如,输入)端口并且到(例如,作为消费者)第二下游PE的(例如,输入)端口的路径上发送。在一个实施例中,由第一下游PE或第二下游PE从第三PE 1100C(例如,从其储存器1143)接收成功值是为了导致其在用于该输入缓冲器的储存器中的接受比特的清除。
处理元件可以包括两个子网络(或网络上的两个通道),例如,一个用于数据路径并且一个用于流控制路径。处理元件(例如,PE 1100A、PE 1100B和PE 1100C)可以起作用和/或包括如在本文公开的任一个中一样的组件。处理元件可以被停止执行直到其操作数(例如,在其(一个或多个)输入缓冲器中)被接收为止和/或直到在处理元件的(一个或多个)输出缓冲器中存在用于将通过对这些操作数执行操作而产生的数据的空间为止。接下来,讨论三个缩减多播关键路径实施例。
作为第一示例,图11B图示了根据本公开的实施例的图11A的被配置成为控制缓冲器提供缩减多播关键路径的电路交换网络1110(例如,其开关和逻辑门)。调度器1114A耦合到第一储存器1101以设置或者清除针对控制输出缓冲器1132A的成功值(例如,比特)。在一个实施例中,调度器1114A基于来自第二PE 1100B的流控制数据和来自第二PE 1100C的流控制数据来设置成功值。可以将流控制数据中的一些或全部聚合成单个值,例如,发送到第一(例如,作为生产者)PE 1100A。第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1108A(1),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE 1100C接收反压值。在一个电路交换配置中,(例如,输入)端口1108A(1)将从控制输入缓冲器1122B和控制输入缓冲器1122C中的每一个接收相应的反压值。在所描绘的实施例中,(例如,输入)端口1108A(1)将接收通过与逻辑门1152与来自控制输入缓冲器1122C的反压值逻辑与(例如,如果两个输入操作数为真则它返回布尔值真(例如,二进制高,例如,二进制1),否则返回假(例如,二进制低,例如,二进制0))的来自控制输入缓冲器1122B的反压值的聚合(例如,单个)相应的反压值。
第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1112A(1),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE 1100C接收推测值。在一个电路交换配置中,(例如,输入)端口1112A(1)将接收针对控制输入缓冲器1122B和控制输入缓冲器1122C中的每一个的相应的推测值。在所描绘的实施例中,(例如,输入)端口1112A(1)将接收通过与逻辑门150与针对控制输入缓冲器1122C的推测值逻辑与的针对控制输入缓冲器1122B的推测值的聚合(例如,单个)推测值。在所描绘的实施例中,针对控制输入缓冲器1122B的推测值是通过由或逻辑门1154对推测路径的接受比特(例如,来自储存器1107的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108B(1))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在所描绘的实施例中,针对控制输入缓冲器1122C的推测值是通过由或逻辑门1156对推测路径的接受比特(例如,来自储存器1113的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108C(1))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在一个实施例中,PE (例如,其调度器)将设置接受值(例如,接受比特)(例如,到二进制高)以指示值被存储在该缓冲器中(例如,第二PE 1100B在储存器1107中设置接受比特以指示数据流令牌被存储(例如,自接受比特被最后清除以来)在控制输入缓冲器1122B中和/或第三PE 1100C在储存器1113中设置接受比特以指示存储数据流令牌被存储(例如,自接受比特被最后清除以来)在控制输入缓冲器1122C中)。在本文中的某些实施例中,通过使用与非/或非电路设计来实现逻辑门功能性。
在一个电路交换配置中,从控制输出缓冲器1132A到控制输入缓冲器1122B和控制输入缓冲器1122C的多播数据路径被形成。数据路径可以用于从生产者PE向消费者PE发送数据令牌。在所描绘的实施例中,第二PE 1100B包括用于针对控制输入缓冲器1122B的接受值(例如,比特)的第一储存器1107。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输出)端口1108B(1),例如,以从第二(例如,作为消费者)PE 1100B向第一(例如,作为生产者) )PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108B(1)将发送针对控制输入缓冲器1122B的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112B(1),例如,以从第一(例如,作为生产者)PE1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112B(1)将接收针对控制输入缓冲器1122B的相应的成功值。
在所描绘的实施例中,第三PE 1100C包括用于针对控制输入缓冲器1122C的接受值(例如,比特)的第一储存器1113。第三(例如,作为消费者)PE 1100C包括耦合到网络1110的(例如,输出)端口1108C(1),例如,以从第三(例如,作为消费者)PE 1100C向第一(例如,作为生产者) )PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108C(1)将发送针对控制输入缓冲器1122C的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112C(1),例如,以从第一(例如,作为生产者)PE1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112C(1)将接收针对控制输入缓冲器1122C的相应的成功值。
在一个实施例中,在控制输出缓冲器1132A中接收使第一示例的缩减多播关键路径开始操作的数据令牌,例如,如在下面参考图11A-11L所讨论的那样。在一个实施例中,数据令牌在其中的接受使生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从控制输出缓冲器1132A到控制输入缓冲器1122B的路径(例如,通过网络 1110)和从控制输出缓冲器1132A到控制输入缓冲器1122C的路径(例如,通过网络1110)上)驱动到一值(例如,二进制高)以指示它具有待传送的数据。在一个实施例中,数据流值(例如,有效的)是数据流令牌(例如,有效负荷数据)它本身的传送。在一个实施例中,通过网络1110从生产者PE到(例如,每个)消费者PE的第一路径被包括用于数据流令牌并且通过网络1110从生产者PE到(例如,每个)消费者PE的第二路径被包括用于数据流值以指示该数据流令牌(例如,在耦合到第一路径的储存器中)是有效的还是无效的。(一个或多个)推测值和/或成功值可以解析并非所有消费者PE(例如,接收器)都准备好接收数据流令牌(例如,具有可用于该数据流令牌的储存器)的情况。
在针对此数据流令牌的第一传输尝试中,如果从第二PE 1100B的端口1108B(1)到第一PE 1100A的端口1108A(1)的路径上的反压值(例如,就绪值)和从第三PE 1100C的端口1108C(1)到第一PE 1100A的端口1108A(1)的路径上的反压值(例如,就绪值)都指示(例如,作为来自与逻辑门1152的输出)没有反压(例如,在控制输入缓冲器1122B和控制输入缓冲器1122C中的每一个中存在可用的储存器),则第一PE(例如,调度器1114A)确定此传输尝试将是成功的,例如,并且数据流令牌将被从第一PE 1100A的控制输出缓冲器1132A中出队(例如,在下一个周期中)和/或第一储存器1101中的成功值(例如,成功比特)被设置(例如,在下一个周期中)以指示成功传输。在针对此数据令牌的第一传输尝试中,如果从第二PE1100B的端口1108B(1)到第一PE 1100A的端口1108A(1)的路径上的反压值(例如,就绪值)或从第三PE 1100C的端口1108C(1)到第一PE 1100A的端口1108A(1)的路径上的反压值(例如,就绪值)指示(例如,作为来自与逻辑门1152的输出)存在反压(例如,分别在控制输入缓冲器1122B和控制输入缓冲器1122C中的两个(例如,全部)中没有可用的储存器),则将发生该数据流令牌的一次或多次重传直到来自第二(例如,作为消费者)PE 1100B和第三(例如,作为消费者)PE 1100C中的每一个的推测值指示推测为真为止,例如,直到推测值由第二(例如,作为消费者)PE 1100B和第三(例如,作为消费者)PE 1100C中的每一个驱动到指示消费者PE(例如,接收器)已经(i)接受由生产者PE 1100A发送的数据(例如,如通过接受值(例如,接受比特)被设置(例如,在先前周期中)(例如,分别在储存器1107或储存器1113中)所指出的那样)或者(ii)消费者准备好(例如,到下一个周期)接收数据流令牌(例如,反压值指示储存器当前可用)的值为止。例如,在针对控制输入缓冲器1122B的推测值是通过由或逻辑门1154对推测路径的接受比特(例如,来自储存器1107的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108B(1))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在一个实施例中,一旦推测值(例如,来自推测路径)指示数据流令牌将被存储(例如,在下一个周期中)在控制输入缓冲器1122B和控制输入缓冲器1122C中,成功值(例如,单个比特)就由生产者PE 1100A驱动到生产者PE能够在先前周期中成功地完成传输的值(例如,值被存储在所有多播消费者PE中),例如,如通过在储存器1101中设置成功值(例如,成功比特)(例如,二进制高,例如,二进制1)所指出的那样。在一个实施例中,在储存器1101中设置成功值使成功值在从储存器1101通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(1)并且到(例如,作为消费者)第三PE 1100C的(例如,输入)端口1112C(1)的路径上发送。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1101)接收成功值将导致例如由调度器1114B对储存器1107中的接受比特的清除。在一个实施例中,由第三PE 1100C从第一PE 1100A(例如,从其储存器1101)接收成功值将导致例如由调度器1114C对储存器1113中的接受比特的清除。
作为第二示例,图11C图示了根据本公开的实施例的图11A的被配置成为第一组缓冲器提供缩减多播关键路径的电路交换网络1110(例如,其开关和逻辑门)。调度器1114A耦合到第二储存器1103以设置或者清除针对第一数据输出缓冲器1134A的成功值(例如,比特)。在一个实施例中,调度器1114A基于来自第二PE 1100B的流控制数据和来自第三PE1100C的流控制数据来设置成功值。可以将流控制数据中的一些或全部聚合成单个值,例如,发送到第一(例如,作为生产者)PE 1100A。第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1108A(2),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE 1100C接收反压值。在一个电路交换配置中,(例如,输入)端口1108A(2)将从第一数据输入缓冲器1124B和第一数据输入缓冲器1124C中的每一个接收相应的反压值。在一个实施例中,(例如,输入)端口1108A(2)将接收通过与逻辑门1160与来自第一数据输入缓冲器1124C的反压值逻辑与的来自第一数据输入缓冲器1124B的反压值的聚合(例如,单个)相应的反压值。
第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1112A(2),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE 1100C接收推测值。在一个电路交换配置中,(例如,输入)端口1112A(2)将接收针对第一数据输入缓冲器1124B和第一数据输入缓冲器1124C中的每一个的相应的推测值。在一个实施例中,(例如,输入)端口1112A(2)将接收通过与逻辑门1158与针对第一数据输入缓冲器1124C的推测值逻辑与的针对第一数据输入缓冲器1124B的推测值的聚合(例如,单个)推测值。在所描绘的实施例中,针对第一数据输入缓冲器1124B的推测值是通过由或逻辑门1162对推测路径的接受比特(例如,来自储存器1109的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108B(2))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在所描绘的实施例中,针对第一数据输入缓冲器1124C的推测值是通过由或逻辑门1164对推测路径的接受比特(例如,来自储存器1115的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108C(2))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在一个实施例中,PE(例如,其调度器)将设置接受值(例如,接受比特)(例如,到二进制高)以指示值被存储在该缓冲器中(例如,第二PE 1100B在储存器1109中设置接受比特以指示数据流令牌被存储(例如,自接受比特被最后清除以来)在第一数据输入缓冲器1124B中和/或第三PE 1100C在储存器1115中设置接受比特以指示数据流令牌被存储(例如,自接受比特被最后清除以来)在第一数据输入缓冲器1124C中)。
在一个电路交换配置中,从第一数据输出缓冲器1134A到第一数据输入缓冲器1124B和第一数据输入缓冲器1124C的多播数据路径被形成。数据路径可以用于从生产者PE向消费者PE发送数据令牌。在所描绘的实施例中,第二PE 1100B包括用于针对第一数据输入缓冲器1124B的接受值(例如,比特)的第二储存器1109。第二(例如,作为消费者)PE1100B包括耦合到网络1110的(例如,输出)端口1108B(2),例如,以从第二(例如,作为消费者)PE 1100B向第一(例如,作为生产者) )PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108B(2)将发送针对第一数据输入缓冲器1124B的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112B(2),例如,以从第一(例如,作为生产者)PE 1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112B(2)将接收针对第一数据输入缓冲器1124B的相应的成功值。
在所描绘的实施例中,第三PE 1100C包括用于针对第一数据输入缓冲器1124C的接受值(例如,比特)的第二储存器1115。第三(例如,作为消费者)PE 1100C包括耦合到网络1110的(例如,输出)端口1108C(2),例如,以从第三(例如,作为消费者)PE 1100C向第一(例如,作为生产者)PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108C(2)将发送针对第一数据输入缓冲器1124C的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112C(2),例如,以从第一(例如,作为生产者)PE1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112C(2)将接收针对第一数据输入缓冲器1124C的相应的成功值。
在一个实施例中,在第一数据输出缓冲器1134A中接收使第一示例的缩减多播关键路径开始操作的数据令牌,例如,如在下面参考图11A-11L所讨论的那样。在一个实施例中,数据令牌在其中的接受使生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从第一数据输出缓冲器1134A到第一数据输入缓冲器1124B(例如,通过网络1110)的路径和从第一数据输出缓冲器1134A到第一数据输入缓冲器1124C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它具有待传送的数据。在一个实施例中,数据流值(例如,有效的)是数据流令牌(例如,有效负荷数据)它本身的传送。在一个实施例中,通过网络1110从生产者PE到(例如,每个)消费者PE的第一路径被包括用于数据流令牌并且通过网络1110从生产者PE到(例如,每个)消费者PE的第二路径被包括用于数据流值以指示该数据流令牌(例如,在耦合到第一路径的储存器中)是有效的还是无效的。(一个或多个)推测值和/或成功值可以解析并非所有消费者PE(例如,接收器)都准备好接收数据流令牌(例如,具有可用于该数据流令牌的储存器)的情况。
在针对此数据流令牌的第一传输尝试中,如果从第二PE 1100B的端口1108B(2)到第一PE 1100A的端口1108A(2)的路径上的反压值(例如,就绪值)和从第三PE 1100C的端口1108C(2)到第一PE 1100A的端口1108A(2)的路径上的反压值(例如,就绪值)两者都指示(例如,作为来自与逻辑门1160的输出)没有反压(例如,在第一数据输入缓冲器1124B和第一数据输入缓冲器1124C中的每一个中存在可用的储存器),则第一PE(例如,调度器1114A)确定此传输尝试将是成功的,例如,并且数据流令牌将被从第一PE 1100A的第一数据输出缓冲器1134A中出队(例如,在下一个周期中)和/或第二储存器1103中的成功值(例如,成功比特)被设置(例如,在下一个周期中)以指示成功传输。在针对此数据令牌的第一传输尝试中,如果从第二PE 1100B的端口1108B(2)到第一PE 1100A的端口1108A(2)的路径上的反压值(例如,就绪值)或从第三PE 1100C的端口1108C(2)到第一PE 1100A的端口1108A(2)的路径上的反压值(例如,准备值)指示(例如,作为来自与逻辑门1160的输出)存在反压(例如,分别在第一数据输入缓冲器1124B和第一数据输入缓冲器1124C中的两个(例如,全部)中没有可用的储存器),则将发生该数据流令牌的一次或多次重传直到来自第二(例如,作为消费者)PE 1100B和第三(例如,作为消费者)PE 1100C中的每一个的推测值指示推测为真为止,例如,直到推测值由第二(例如,作为消费者)PE 1100B和第三(例如,作为消费者)PE1100C中的每一个驱动到指示消费者PE(例如,接收器)已经(i)接受由生产者PE 1100A发送的数据(例如,如通过接受值(例如,接受比特)被设置(例如,在先前周期中)(例如,分别在储存器1109或储存器1115中)所指出的那样)或者(ii)消费者准备好(例如,到下一个周期)接收数据流令牌(例如,反压值指示储存器当前可用)的值为止。例如,在针对第一数据输入缓冲器1124B的推测值是通过由或逻辑门1162对推测路径的接受比特(例如,来自储存器1109的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108B(2))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在一个实施例中,一旦推测值(例如,来自推测路径)指示数据流令牌将被存储(例如,在下一个周期中)在第一数据输入缓冲器1124B和第一数据输入缓冲器1124C中,成功值(例如,单个比特)就由生产者PE 1100A驱动到生产者PE能够在先前周期中成功地完成传输的值(例如,值被存储在所有多播消费者PE中),例如,如通过在储存器1103中设置成功值(例如,成功比特)(例如,二进制高,例如,二进制1)所指出的那样。在一个实施例中,在储存器1103中设置成功值使成功值在从储存器1103通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(2)并且到(例如,作为消费者)第三PE1100C的(例如,输入)端口1112C(2)的路径上发送。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1103)接收成功值将导致储存器1109中的接受比特的清除。在一个实施例中,由第三PE 1100C从第一PE 1100A(例如,从其储存器1103)接收成功值将导致储存器1115中的接受比特的清除。
作为第三示例,图11D图示了根据本公开的实施例的图11A的被配置成为第二组缓冲器提供缩减多播关键路径的电路交换网络1110(例如,其开关和逻辑门)。调度器1114A耦合到第三储存器1105以设置或者清除针对第二数据输出缓冲器1136A的成功值(例如,比特)。在一个实施例中,调度器1114A基于来自第二PE 1100B的流控制数据和来自第三PE1100C的流控制数据来设置成功值。可以将流控制数据中的一些或全部聚合成单个值,例如,发送到第一(例如,作为生产者)PE 1100A。第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1108A(3),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE 1100C接收反压值。在一个电路交换配置中,(例如,输入)端口1108A(3)将从第二数据输入缓冲器1126B和第二数据输入缓冲器1126C接收相应的反压值。在一个实施例中,(例如,输入)端口1108A(3)将接收通过与逻辑门1168与来自第二数据输入缓冲器1126C的反压值逻辑与的来自第二数据输入缓冲器1126B的反压值的聚合(例如,单个)相应的反压值。在所描绘的实施例中,针对第二数据输入缓冲器1126B的推测值是通过由或逻辑门11670对推测路径的接受比特(例如,来自储存器1111的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108B(3))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在所描绘的实施例中,针对第二数据输入缓冲器1126C的推测值是通过由或逻辑门1172对推测路径的接受比特(例如,来自储存器1117的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108C(3))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在一个实施例中,PE(例如,其调度器)将设置接受值(例如,接受比特)(例如,到二进制高)以指示值被存储在该缓冲器中(例如,第二PE 1100B在储存器1111中设置接受比特以指示数据流令牌被存储(例如,自接受比特被最后清除以来)在第二数据输入缓冲器1126B中和/或第三PE 1100C在储存器1117中设置接受比特以指示数据流令牌被存储(例如,自接受比特被最后清除以来)在第二数据输入缓冲器1126C中)。
第一(例如,作为生产者)PE 1100A包括耦合到网络1110的(例如,输入)端口1112A(3),例如,以从第二(例如,作为消费者)PE 1100B和/或第三(例如,作为消费者)PE 1100C接收推测值。在一个电路交换配置中,(例如,输入)端口1112A(3)将接收针对第二数据输入缓冲器1126B和第二数据输入缓冲器1126C的相应的推测值。在一个实施例中,(例如,输入)端口1112A(3)将接收通过与逻辑门1166与针对第二数据输入缓冲器1126C的推测值逻辑与的针对第二数据输入缓冲器1126B的推测值的聚合(例如,单个)推测值。
在一个电路交换配置中,从第二数据输出缓冲器1136A到第二数据输入缓冲器1126B和第二数据输入缓冲器1126C的多播数据路径被形成。数据路径可以用于从生产者PE向消费者PE发送数据令牌。在所描绘的实施例中,第二PE 1100B包括用于针对第二数据输入缓冲器1126B的接受值(例如,比特)的第三储存器1111。第二(例如,作为消费者)PE1100B包括耦合到网络1110的(例如,输出)端口1108B(3),例如,以从第二(例如,作为消费者)PE 1100B向第一(例如,作为生产者) )PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108B(3)将发送针对第二数据输入缓冲器1126B的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112B(3),例如,以从第一(例如,作为生产者)PE 1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112B(3)将接收针对第二数据输入缓冲器1126B的相应的成功值。
在所描绘的实施例中,第三PE 1100C包括用于针对第二数据输入缓冲器1126C的接受值(例如,比特)的第三储存器1117。第三(例如,作为消费者)PE 1100C包括耦合到网络1110的(例如,输出)端口1108C(3),例如,以从第三(例如,作为消费者)PE 1100C向第一(例如,作为生产者)PE 1100A发送反压值。在一个电路交换配置中,(例如,输出)端口1108C(3)将发送针对第二数据输入缓冲器1126C的相应的反压值。第二(例如,作为消费者)PE 1100B包括耦合到网络1110的(例如,输入)端口1112C(3),例如,以从第一(例如,作为生产者)PE1100A接收成功值。在一个电路交换配置中,(例如,输入)端口1112C(3)将接收针对第二数据输入缓冲器1126C的相应的成功值。
在一个实施例中,在第二数据输出缓冲器1136A中接收使第一示例的缩减多播关键路径开始操作的数据令牌,例如,如在下面参考图11A-11L所讨论的那样。
在针对此数据流令牌的第一传输尝试中,如果从第二PE 1100B的端口1108B(3)到第一PE 1100A的端口1108A(3)的路径上的反压值(例如,就绪值)和从第三PE 1100C的端口1108C(3)到第一PE 1100A的端口1108A(3)的路径上的反压值(例如,就绪值)两者都指示(例如,作为来自与逻辑门1168的输出)没有反压(例如,在第二数据输入缓冲器1126B和第二数据输入缓冲器1126C中的每一个中存在可用的储存器),则第一PE(例如,调度器1114A)确定此传输尝试将是成功的,例如,并且数据流令牌将被从第一PE 1100A的第二数据输出缓冲器1136A中出队(例如,在下一个周期中)和/或第三储存器1105中的成功值(例如,成功比特)被设置(例如,在下一个周期中)以指示成功传输。在针对此数据令牌的第一传输尝试中,如果从第二PE 1100B的端口1108B(3)到第一PE 1100A的端口1108A(3)的路径上的反压值(例如,就绪值)或从第三PE 1100C的端口1108C(3)到第一PE 1100A的端口1108A(3)的路径上的反压值(例如,就绪值)指示(例如,作为来自与逻辑门1168的输出)存在反压(例如,分别在第二数据输入缓冲器1126B和第二数据输入缓冲器1126C中的两个(例如,全部)中没有可用的储存器),则将发生该数据流令牌的一次或多次重传直到来自第二(例如,作为消费者)PE 1100B和第三(例如,作为消费者)PE 1100C中的每一个的推测值指示推测为真为止,例如,直到推测值由第二(例如,作为消费者)PE 1100B和第三(例如,作为消费者)PE1100C中的每一个驱动到指示消费者PE(例如,接收器)已经(i)接受由生产者PE 1100A发送的数据(例如,如通过接受值(例如,接受比特)被设置(例如,在先前周期中)(例如,分别在储存器1111或储存器1117中)所指出的那样)或者(ii)消费者准备好(例如,到下一个周期)接收数据流令牌(例如,反压值指示储存器当前可用)的值为止。例如,在针对第二数据输入缓冲器1126B的推测值是通过由或逻辑门1170对推测路径的接受比特(例如,来自储存器1111的接受比特)(例如,其中二进制低值指示缓冲器自它被最后清除以来确实未存储输入)和来自反压路径(例如,来自端口1108B(3))的反压比特(例如,其中二进制低值指示没有反压)进行“或”来形成的。在一个实施例中,一旦推测值(例如,来自推测路径)指示数据流令牌将被存储(例如,在下一个周期中)在第二数据输入缓冲器1126B和第二数据输入缓冲器1126C中,成功值(例如,单个比特)就由生产者PE 1100A驱动到生产者PE能够在先前周期中成功地完成传输的值(例如,值被存储在所有多播消费者PE中),例如,如通过在储存器1105中设置成功值(例如,成功比特)(例如,二进制高,例如,二进制1)所指出的那样。在一个实施例中,在储存器1105中设置成功值使成功值在从储存器1105通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(3)并且到(例如,作为消费者)第三PE1100C的(例如,输入)端口1112C(3)的路径上发送。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1105)接收成功值将导致储存器1111中的接受比特的清除。在一个实施例中,由第三PE 1100C从第一PE 1100A(例如,从其储存器1105)接收成功值将导致储存器1117中的接受比特的清除。
在某些实施例中,消费者PE在数据流令牌被存储在其输入缓冲器中时消费它(例如,假设在处理元件的(一个或多个)输出缓冲器中存在用于将通过对该数据流令牌执行操作而产生的数据的空间),例如,只要针对该数据流令牌的接受比特仅由生产者PE清除从而指示成功即可。在一个实施例示例中,在处理元件的储存器中设置接受比特也不会停止处理元件对其(一个或多个)输入缓冲器中的先前接收到的(例如,不是针对当前传输过程,其可以包括多个周期)数据流令牌的执行。
图11E-11L图示了根据本公开的实施例的图11A的多播系统上的八个不同的周期。注意的是,这些图利用针对控制缓冲器的缩减多播关键路径的以上第一示例(例如,控制输出缓冲器1132A将数据多播到控制输入缓冲器1122B和控制输入缓冲器1122C,例如,具有如在图11B中一样的配置),但是同样地适用于针对第一组缓冲器的缩减多播关键路径的以上第二示例(例如,第一输出缓冲器1134A将数据多播到第一数据输入缓冲器1124B和第一数据输入缓冲器1124C,例如,具有如在图11C中一样的配置),并且针对第二组缓冲器的缩减多播关键路径的以上第三示例(例如,第二输出缓冲器1136A将数据多播到第二数据输入缓冲器1126B和第二数据输入缓冲器1126C,例如,具有如在图11D中一样的配置)。换句话说,参考图11E-11L所讨论的具有缓冲器的多播可以是用于控制类型的数据流令牌、数据(例如,有效负荷)类型的数据流令牌或任何其他类型的数据流令牌的缓冲器。
尽管生产者被示出为多播到两个消费者PE,但是三个或更多个消费者PE还可以包括缩减多播关键路径(例如,通过像在图11A中一样为每个附加消费者PE添加相应的路径,例如,并且向逻辑门添加附加输入端口)。图11E-11L中所图示的七个不同的周期仅仅是示例。在某些实施例中不要求它们按那顺序。带圆圈数字指示数据流令牌实例(例如,而不一定是该数据流令牌的值)。图11E-11L中的电路交换网络1110包括图示为框的多个开关(例如,复用器)和逻辑门(例如,如在下面所讨论的)。这些仅仅是示例配置。图11A-11D中的网络1110还可以是包括多个开关(例如,复用器)和所描绘的逻辑门的电路交换网络。网络1110可以是如参考图6所讨论的网络一或网络二。图11E-11L中的网络1110中的实线可以指代值(例如,在相应的路径上)是有效值(例如,是二进制高值)并且虚线可以指代值(例如,在相应的路径上)是无效值(例如,是二进制低值)。
图11E图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径的周期(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)。
带圆圈一指代准备好被传送的数据流令牌,例如,它已由第一PE 1100A提供到输出缓冲器1132A中,例如,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它具有待传送的数据(例如,并且正在周期零中传送数据)。
带圆圈零指代已在先前周期中从输出缓冲器1132A接收在输入缓冲器1122B和输入缓冲器1122C中的先前数据流令牌(例如,其可以是32比特或64比特值),并且周期零图示了第一PE 1100A在储存器1101中设置成功比特(例如,当在先前周期中发生了通过带圆圈零所指示的数据流令牌到消费者PE的所有输入缓冲器的存储完成时)。带圆圈减号一指代比被存储在输入缓冲器1122C中的带圆圈零的数据流令牌更先前的数据流令牌。在所描绘的实施例中,输入缓冲器1122B包括两个槽,并且储存器是可用的(例如,在此周期中),因为槽一正在存储标记有带圆圈零的数据流令牌,但是槽二是可用的(例如,它是空的)以用于存储数据流令牌。在所描绘的实施例中,输入缓冲器1122C包括两个槽,并且没有储存器可用(例如,在此周期中),因为槽一正在存储标记有带圆圈减号一的数据流令牌并且槽二正在存储标记有带圆圈零的数据流令牌。因此,来自从用于输入缓冲器1122C的端口1108C(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122C中储存器不可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中不可用)的值(例如,二进制低,例如二进制0)。来自从用于输入缓冲器1122B的端口1108B(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122B中储存器可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中可用)的值(例如,二进制高,例如,二进制1)。
与逻辑门1152包括来自从用于输入缓冲器1122C的端口1108C(1)起的反压路径和来自从用于输入缓冲器1122B的端口1108B(1)起的反压路径的输入,并且在所描绘的实施例中输出二进制低(例如,二进制0),因为从用于输入缓冲器1122C的端口1108C(1)起的反压路径上的反压值是二进制低(例如,二进制0)。第一PE 1100A的端口(例如,输入端口)1108A(1)接收二进制低(例如,二进制0)的输出作为聚合(例如,单个)相应的反压值并且确定消费者PE中的至少一个 (即,在所描绘的示例中第二PE 1100B)将例如在下一个周期中不接收数据流令牌(例如,在第一PE 1100A的输出缓冲器1132A中带圆圈一的数据流令牌)。在一个实施例中,不利用推测路径(例如,推测值)(例如,在此周期零中),因为这是针对通过带圆圈一所指示的此数据令牌的第一传输尝试。在一个实施例中,周期零包括第一PE1100A在储存器1101中设置成功比特以指示在先前周期中发生了通过带圆圈零所指示的数据流令牌到消费者PE的所有输入缓冲器的存储完成。在所描绘的实施例中,在储存器1101中设置为高的成功比特使成功值(例如,二进制1)在从储存器1101通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(1)并且到(例如,作为消费者)第三PE1100C的(例如,输入)端口1112C(1)的路径上发送。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1101)接收成功值是为了导致第二PE 1100B的储存器1107中的接受比特的清除,例如,在从周期零到周期一的转变时。在一个实施例中,由第三PE1100C从第一PE 1100A(例如,从其储存器1101)接收成功值是为了例如在从周期零到周期一的转变时导致第三PE 1100C的储存器1113中的接受比特的清除。在一个实施例中,第一PE 1100A(例如,调度器1114A)例如在从周期零到周期一的转变时清除储存器1101中的数据流令牌(带圆圈零)的成功比特。
图11F图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期一图示了通过带圆圈一所指示的数据流令牌被传送(例如,但不一定存储在消费者中的储存器中)并且输入缓冲器1122B已取到标记有带圆圈一的数据流令牌并且将它存储在输入缓冲器1122B的第二槽中。当第一PE 1100A在周期零中检测到指示了反压(例如,二进制零)的反压值时,针对标记有带圆圈一的数据流令牌的第一传输尝试尚未能到达第二PE 1100B和第三PE 1100C中的至少一个并且第一PE 1100A将在储存器1101中设置成功值(例如,到二进制零)以指示多播传输的失败(例如,周期零中的失败),例如,并且因此通过带圆圈一的数据流令牌所指示的数据流令牌将仍未被出队。通过带圆圈一所指示的数据流令牌保持准备好被传送,例如,它仍然在第一PE 1100A的输出缓冲器1132A中,例如,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它仍然具有待传送的数据。
在所描绘的实施例中,第二PE 1100B在储存器1107中设置(例如,改变)其接受比特以指示在输入缓冲器1122B中(例如,在该先前周期中)取得数据流令牌(通过带圆圈一来指示),这使接受值(例如,二进制1)将被发送到或逻辑门1154的一个输入端(例如,同时或逻辑门1154的第二输入端耦合到从端口1108B(1)起的反压路径(例如,在此图中二进制零)),这使或逻辑门1154向与逻辑门1150发送推测值(例如,二进制1)。在所描绘的实施例中,(例如,在此周期中)在输入缓冲器1122B中储存器不可用,因为槽一仍然在存储标记有带圆圈零的数据流令牌并且槽二现正在存储标记有带圆圈一的数据流令牌,例如,所以第二PE 1100B在从第二PE 1100B的端口1108B(1)到与逻辑门1152的路径上发送反压值(例如,二进制零以指示它未就绪)。在所描绘的实施例中,(例如,在此周期中)在输入缓冲器1122C中没有储存器可用,因为槽一仍然在存储标记有带圆圈减号一的数据流令牌并且槽二仍然在存储标记有带圆圈零的数据流令牌(例如,第三PE 1100C尚未消费标记有带圆圈减号一的数据流令牌),所以第二PE 1100B在从第二PE 1100B的端口1108B(1)到与逻辑门1152的路径上发送反压值(例如,二进制零以指示它未就绪)。因为与逻辑门1152取到两个二进制零,所以它将二进制零作为聚合反压值输出到第一PE 1100A的(例如,输入)端口1108A(1)以指示第二PE 1100B的输入缓冲器1122B或第三PE 1100C的输入缓冲器1122C不可用于存储数据流令牌(例如,在此周期中)。
在所描绘的实施例中,第三PE 1100C在储存器1113中设置(例如,维持)其接受比特以指示未在输入缓冲器1122C中(例如,在该先前周期中)取到数据流令牌,这使接受值(例如,二进制零)被发送到或逻辑门1154的第一输入端,同时或逻辑门1154的第二输入端耦合到从端口1108C(1)起的反压路径(例如,在此图中二进制零),这使或逻辑门1154例如向与逻辑门1150发送指示没有推测的推测值(例如,二进制零)。在所描绘的实施例中,与逻辑门1150取两个二进制零,所以它将二进制零作为聚合推测值输出到第一PE 1100A的(例如,输入)端口1112A(1)以指示第二PE 1100B的输入缓冲器1122B或第三PE 1100C的输入缓冲器1122C在此周期或(一个或多个)先前周期中确实未存储数据流令牌(例如,并且将不在下一个周期中取数据流令牌(例如,在第二PE 1100B的输入缓冲器1122B或第三PE 1100C的输入缓冲器1122C中的一个或两个中在下一个周期内没有储存器可用))。在一个实施例中,在针对相同数据流令牌的第二和任何后续传输尝试(例如,周期)中,生产者PE 1100A将仅检查推测值(或聚合推测值)。在一个实施例中,在针对相同数据流令牌的第二和任何后续传输尝试(例如,周期)中,生产者PE 1100A将检查反压(例如,聚合反压)值和接受值(例如,接受比特),例如,以确定用于多播的所有输入缓冲器是否已收到数据流令牌或者将在下一个周期中接收数据流令牌。
在一个实施例中,被设置成指示值被接收(例如,针对相同数据流令牌)的接受比特是为了防止相同(例如,任何)数据流令牌的另一实例被存储在所对应的输入缓冲器中直到接受比特被例如生产者PE清除为止。
图11G图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期二图示了通过带圆圈减号一所指示的数据流令牌在此周期中被第三PE 1100C消费,并且在此周期中(例如,在从周期一到周期二的转换时)正在被从输入缓冲器1122C中出队(例如,移除)。所描绘的输入缓冲器1122C中的槽一现在可用于存储数据流令牌,因为当通过带圆圈减号一所指示的数据流令牌被出队时来自槽二的数据流令牌(通过带圆圈零来指示)已移动到槽一中。在某些实施例中,可以利用其他队列实施方式,例如,其中在从槽一中消费数据时数据未从槽二移动到槽一中,但是两个槽都由PE使用。
当第一PE 1100A在周期一中检测到指示缺少推测的推测值(例如,二进制零)时,针对标记有带圆圈一的数据流令牌的第二传输尝试尚未能到达第二PE 1100B和第三PE1100C中的至少一个并且第一PE 1100A将在储存器1101中设置(例如,保留)成功值(例如,到二进制零)以指示多播传输的失败(例如,周期一中的失败),例如,并且因此通过带圆圈一所指示的数据流令牌将仍未被出队。
在所描绘的实施例中,第三PE 1100C将其反压值(例如,从用于输入缓冲器1122C的端口1108C(1)起的反压路径上的反压值)设置(例如,改变)为二进制高(例如,二进制1)以指示输入缓冲器1122C中的存储空间将在下一个周期时可用。在所描绘的实施例中,针对输入缓冲器1122C的二进制1的反压值被发送到或逻辑门1156的一个输入端(例如,同时或逻辑门1156的第二输入端耦合到储存器1113中的接受比特以通过逻辑0来指示未在输入缓冲器1122C中(例如,在该先前周期中)取到数据流令牌),这使或逻辑门1156向与逻辑门1150发送推测值(例如,二进制1)。在所描绘的实施例中,与逻辑门1150取两个二进制一,所以它将二进制一作为聚合推测值输出到第一PE 1100A的(例如,输入)端口1112A(1)以指示第二PE 1100B的输入缓冲器1122B和第三PE 1100C的输入缓冲器1122C两者都在此周期中(例如,在从周期二到周期三的转变时)已存储或者将会存储通过带圆圈一所指示的数据流令牌。第一PE 1100A因此可以确定将在下一个周期中(例如,在到下一个周期的转变时)发生成功,并且第一PE 1100A然后在储存器1101中设置成功比特(例如,当在先前周期中发生了通过带圆圈一所指示的数据流令牌到消费者PE的所有输入缓冲器的存储完成时)。
图11H图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期三图示了通过带圆圈一所指示的数据流令牌在先前周期中多播并且从输出缓冲器1132A中出队(例如,在从周期二到周期三的转变时)。在一个实施例中,周期三包括第一PE 1100A在储存器1101中设置成功比特以指示在先前周期中发生了通过带圆圈一所指示的数据流令牌到消费者PE的所有输入缓冲器的存储完成。在所描绘的实施例中,在储存器1101中设置为高的成功比特使成功值(例如,二进制一)在从储存器1101通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(1)并且到(例如,作为消费者)第三PE 1100C的(例如,输入)端口1112C(1)的路径上发送以指示第三传输尝试对于消费者PE中的尚未能存储数据流令牌的最后一个来说是成功。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1101)接收成功值是为了例如在从周期三到周期四的转变时导致第二PE1100B的储存器1107中的接受比特的清除。在一个实施例中,由第三PE 1100C从第一PE1100A(例如,从其储存器1101)接收成功值是为了例如在从周期三到周期四的转变时导致第三PE 1100C的储存器1113中的接受比特的清除。在一个实施例中,第一PE 1100A(例如,调度器1114A)例如在从周期三到周期四的转变时清除储存器1101中的数据流令牌(带圆圈一)的成功比特。
周期三进一步描绘了未准备好从输出缓冲器1132A传送数据流令牌(例如,它尚未由第一PE 1100A提供到输出缓冲器1132A中)。在所描绘的实施例中,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它没有待传送的数据。周期三进一步描绘了通过带圆圈零所指示的数据流令牌由第二PE 1100B在先前周期中(例如,在从周期二到周期三的转变时)从输入缓冲器1122B中消费并且由第三PE 110C从输入缓冲器1122C中消费,并且从输入缓冲器1122B和输入缓冲器1122C中出队(例如,在从周期二到周期三的转变时)。
图11I图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期四图示了通过带圆圈二所指示的数据流令牌准备好被传送,例如,它已由第一PE 1100A提供到输出缓冲器1132A中,例如,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它具有待传送的数据(例如,并且正在周期四中传送数据)。第一PE 1100A将在储存器1101中设置成功值(例如,到二进制零)以在这里指示多播传输的失败(例如,周期三中的失败),因为未准备好在周期三中从输出缓冲器1132A传送数据流令牌,例如,以使成功(例如,失败)值(例如,二进制一)在从储存器1101通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(1)并且到(例如,作为消费者)第三PE 1100C的(例如,输入)端口1112C(1)的路径上发送。
在所描绘的实施例中,输入缓冲器1122B和输入缓冲器1122C中的每一个均包括两个槽,并且储存器是可用的(例如,在此周期中),因为两个输入缓冲器中的槽一正在存储标记有带圆圈一的数据流令牌但是槽二是可用的(例如,它是空的)以用于存储新的数据流令牌。
来自从用于输入缓冲器1122B的端口1108B(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122B中储存器可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中可用)的值(例如,二进制高,例如,二进制1)。来自从用于输入缓冲器1122C的端口1108C(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122C中存储器可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中可用)的值(例如,二进制高,例如,二进制1)。与逻辑门1152包括从用于输入缓冲器1122C的端口1108C(1)起的反压路径和从用于输入缓冲器1122B的端口1108B(1)起的反压路径两者的输入,并且在所描绘的实施例中输出二进制高(例如,二进制1)作为聚合反压值,因为从用于输入缓冲器1122B的端口1108B(1)起的反压路径上的反压值是二进制高(例如,二进制1)并且从用于输入缓冲器1122C的端口1108C(1)起的反压路径上的反压值是二进制高(例如,二进制1)。在一个实施例中,反压值(例如,端口1108A(1)上的聚合反压值)为二进制高指示储存器在下一个周期中在输入缓冲器1122B和输入缓冲器1122C两者中可用,并且因此针对通过带圆圈二所指示的数据流令牌的第一传输尝试将成功。
图11J图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期五图示了通过带圆圈二所指示的数据流令牌被多播到消费者PE,并且通过带圆圈三所指示的数据流令牌准备好被传送,例如,它已由第一PE 1100A提供到输出缓冲器1132A中,例如,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它具有待传送的数据(例如,并且正在周期五中传送数据)。
在一个实施例中,周期五包括第一PE 1100A在储存器1101中设置成功比特以指示在先前周期中发生了通过带圆圈二所指示的数据流令牌到消费者PE的所有输入缓冲器的多播传输完成。在一个实施例中,在周期五中,标记有带圆圈二的数据流令牌被从输出缓冲器1132A中出队(例如,在从周期四到周期五的转变时)。
在所描绘的实施例中,在储存器1101中设置为高的成功比特使成功值(例如,二进制一)在从储存器1101通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(1)并且到(例如,作为消费者)第三PE 1100C的(例如,输入)端口1112C(1)的路径上发送。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1101)接收成功值是为了例如在从周期五到周期六的转变时导致第二PE 1100B的储存器1107中的接受比特的清除。在一个实施例中,由第三PE 1100C从第一PE 1100A(例如,从其储存器1101)接收成功值是为了例如从周期五到周期六的转变时导致第三PE 1100C的储存器1113中的接受比特的清除。在一个实施例中,第一PE 1100A(例如,调度器1114A)例如在从周期五到周期六的转变时清除储存器1101中的数据流令牌(带圆圈二)的成功比特。
周期五进一步描绘了通过带圆圈一所指示的数据流令牌由第二PE 1100B在先前周期中(例如,在从周期四到周期五的转变时)从输入缓冲器1122B中消费并且由第三PE1100C从输入缓冲器1122C中消费,并且从输入缓冲器1122B和输入缓冲器1122C中出队(例如,在从周期四到周期五的转变时)。
在所描绘的实施例中,输入缓冲器1122B和输入缓冲器1122C中的每一个均包括两个槽,并且储存器是可用的(例如,在此周期中),因为两个输入缓冲器中的槽一正在存储标记有带圆圈二的数据流令牌,但是槽二是可用的(例如,它是空的)以用于存储新的数据流令牌。
从用于输入缓冲器1122B的端口1108B(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122B中储存器可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中可用)的值(例如,二进制高,例如,二进制1)。从用于输入缓冲器1122C的端口1108C(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122C中储存器可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中可用)的值(例如,二进制高,例如,二进制1)。与逻辑门1152包括从用于输入缓冲器1122C的端口1108C(1)起的反压路径和从用于输入缓冲器1122B的端口1108B(1)起的反压路径两者的输入,并且在所描绘的实施例中输出二进制高(例如,二进制1)作为聚合反压值,因为从用于输入缓冲器1122B的端口1108B(1)起的反压路径上的反压值是二进制高(例如,二进制1)并且从用于输入缓冲器1122C的端口1108C(1)起的反压路径上的反压值是二进制高(例如,二进制1)。在一个实施例中,反压值(例如,端口1108A(1)上的聚合反压值)为二进制高指示储存器在下一个周期中在输入缓冲器1122B和输入缓冲器1122C两者中是可用的,并且因此针对通过带圆圈三所指示的数据流令牌的第一传输尝试将成功。
图11K图示了根据本公开的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期六图示了通过带圆圈三所指示的数据流令牌在周期五中被多播到消费者PE,并且通过带圆圈四所指示的数据流令牌准备好被传送,例如,它已由第一PE 1100A提供到输出缓冲器1132A中,但是输入缓冲器1122B和输入缓冲器1122C满了(例如,在周期五中没有消费标记有带圆圈二的数据流令牌)。
带圆圈四指代准备好被传送的数据流令牌,例如,它已由第一PE 1100A提供到输出缓冲器1132A中,例如,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它具有待传送的数据(例如,并且正在周期六中传送数据,例如,但是不一定在储存器中接收到)。
带圆圈三指代已在先前周期中从输出缓冲器1132A接收在输入缓冲器1122B和输入缓冲器1122C中的先前数据流令牌(例如,其可以是32比特或64比特值),并且周期六图示了第一PE 1100A在储存器1101中设置成功比特(例如,当在先前周期中发生了通过带圆圈三所指示的数据流令牌到消费者PE的所有输入缓冲器的存储完成时)。带圆圈二指代比被存储在输入缓冲器1122C中带圆圈三的数据流令牌更先前的数据流令牌。在所描绘的实施例中,输入缓冲器1122B包括两个槽,并且储存器是不可用的(例如,在此周期中),因为槽一正在存储标记有带圆圈二的数据流令牌并且槽二正在存储标记有带圆圈三的数据流令牌。在所描绘的实施例中,输入缓冲器1122C包括两个槽,并且没有储存器可用(例如,在此周期中),因为槽一正在存储标记有带圆圈二的数据流令牌并且槽二正在存储标记有带圆圈三的数据流令牌。因此,对于针对标记有带圆圈四的数据流令牌的第一传输尝试来说来自从用于输入缓冲器1122B的端口1108C(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122B中储存器不可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中不可用)的值(例如,二进制低,例如,二进制0)。对于针对标记有带圆圈四的数据流令牌的第一传输尝试来说来自从用于输入缓冲器1122C的端口1108C(1)起的反压路径的反压值(例如,反压比特)被驱动到指示在输入缓冲器1122C中储存器不可用(例如,当PE花费至少一个周期来处理并清除输入缓冲器的槽时在下一个周期中不可用)的值(例如,二进制低,例如,二进制0)。
与逻辑门1152包括从用于输入缓冲器1122C的端口1108C(1)起的反压路径和从用于输入缓冲器1122B的端口1108B(1)起的反压路径两者的输入,并且在所描绘的实施例中输出二进制低(例如,二进制0),因为从用于输入缓冲器1122B的端口1108B(1)起的反压路径上的反压值是二进制低(例如,二进制0)并且从用于输入缓冲器1122C的端口1108C(1)起的反压路径上的反压值是二进制低(例如,二进制0)。第一PE 1100A的端口(例如,输入端口)1108A(1)接收二进制低(例如,二进制0)的输出作为聚合(例如,单个)相应的反压值并且确定消费者PE中的至少一个 (即,在所描绘的示例中第二PE 1100B和第三PE 1100C)例如在下一个周期中将不接收数据流令牌(例如,在第一PE 1100A的输出缓冲器1132A中带圆圈四的数据流令牌)。在一个实施例中,(例如,在此周期六中)不利用推测路径(例如,推测值),因为这是针对通过带圆圈四所指示的此数据令牌的第一传输尝试。在一个实施例中,周期六包括第一PE 1100A在储存器1101中设置成功比特以指示在先前周期中发生了通过带圆圈三所指示的数据流令牌到消费者PE的所有输入缓冲器的存储完成。在所描绘的实施例中,在储存器1101中设置为高的成功比特使成功值(例如,二进制一)在从储存器1101通过网络1110到(例如,作为消费者)第二PE 1100B的(例如,输入)端口1112B(1)并且到(例如,作为消费者)第三PE 1100C的(例如,输入)端口1112C(1)的路径上发送。在一个实施例中,由第二PE 1100B从第一PE 1100A(例如,从其储存器1101)接收成功值是为了例如在从周期六到周期七的转变时导致第二PE 1100B的储存器1107中的接受比特的清除。在一个实施例中,由第三PE 1100C从第一PE 1100A(例如,从其储存器1101)接收成功值是为了例如在从周期六到周期七的转变时导致第三PE 1100C的储存器1113中的接受比特的清除。在一个实施例中,第一PE 1100A(例如,调度器1114A)例如在从周期六到周期七的转变时清除储存器1101中的数据流令牌(带圆圈零)的成功比特。
图11L图示了根据本发明的实施例的针对缓冲器的缩减多播关键路径(例如,输出缓冲器1132A将数据多播到输入缓冲器1122B和输入缓冲器1122C)的下一个周期。周期七图示了通过带圆圈四所指示的数据流令牌未被存储在输入缓冲器1122B或输入缓冲器1122C中的任何一个中。当第一PE 1100A在周期六中检测到指示了反压(例如,二进制零)的反压值时,针对标记有带圆圈四的数据流令牌的第一传输尝试尚未能到达第二PE 1100B和第三PE 1100C中的至少一个并且第一PE 1100A将在储存器1101中设置成功值(例如,到二进制零)以指示多播传输的失败(例如,周期六中的失败),例如,并且因此通过带圆圈四所指示的数据流令牌将仍未被出队(例如,在时钟周期转变时未发生出队)。通过带圆圈四所指示的数据流令牌保持准备好被传送,例如,它仍然在第一PE 1100A的输出缓冲器1132A中,例如,因此生产者PE 1100A(例如,传送器)将其数据流(例如,有效)值(例如,在从输出缓冲器1132A到输入缓冲器1122B(例如,通过网络1110)的路径和从输出缓冲器1132A到输入缓冲器1122C(例如,通过网络1110)的路径上)驱动到一值(例如,二进制高)以指示它仍然具有待传送的数据。
在所描绘的实施例中,第二PE 1100B在储存器1107中设置(例如,维持)其接受比特以指示在输入缓冲器1122B中(例如,在该先前周期中)未取到数据流令牌,这使接受值(例如,二进制零的)被发送到或逻辑门1154的第一输入端,同时或逻辑门1154的第二输入端耦合到从端口1108B(1)起的反压路径(例如,在此图中二进制零),这使或逻辑门1154例如向与逻辑门1150发送指示没有推测的推测值(例如,二进制零的)。在所描绘的实施例中,第三PE 1100C在储存器1113中设置(例如,维持)其接受比特以指示在输入缓冲器1122C中(例如,在该先前周期中)未取到数据流令牌,这使接受值(例如,二进制零的)被发送到或逻辑门1154的第一输入端,同时或逻辑门1154的第二输入端耦合到从端口1108C(1)起的反压路径(例如,在此图中二进制零),这使或逻辑门1154例如向与逻辑门1150发送表示没有推测的推测值(例如,二进制零的)。在所描绘的实施例中,与逻辑门1150取两个二进制零,所以它将二进制零作为聚合推测值输出到第一PE 1100A的(例如,输入)端口1112A(1)以指示第二PE 1100B的输入缓冲器1122B或第三PE 1100C的输入缓冲器1122C在此周期中确实未存储数据流令牌并且将不在下一个周期中取数据流令牌(例如,没有存储器将在第二PE1100B的输入缓冲器1122B或第三PE 1100C的输入缓冲器1122C的一个或两个中在下一个周期中可用)。在一个实施例中,在针对相同数据流令牌的第二和任何后续传输尝试(例如,周期)中,生产者PE 1100A将仅检查推测值(或聚合推测值)。在一个实施例中,在针对相同数据流令牌的第二和任何后续传输尝试(例如,周期)中,生产者PE 1100A将检查反压(例如,聚合反压)值和接受值,例如,以确定用于多播的所有输入缓冲器是否已接收到数据流令牌或者将在下一个周期中接收数据流令牌。
在一个实施例中,接受比特被设置为指示值被接收(例如,针对相同数据流令牌)是为了防止相同(例如,任何)数据流令牌的另一实例被存储在所对应的输入缓冲器中直到接受比特被例如生产者PE清除为止。
图12图示了根据本公开的实施例的用于在生产者(例如,传送器)PE处设置并清除成功值(例如,比特)的示例代码1200。&&是逻辑与操作符的符号,||是用于逻辑或操作符的符号,<=是用于存储操作符的符号,并且!是逻辑非操作符。有效值在这里指示生产者(例如,传送器)PE具有(例如,在其输出缓冲器中)可用于传送的数据流令牌(例如,在此周期中),例如,当有效值为高(例如,二进制一))时。在一个实施例中,每个消费者PE将根据相应地标记的代码段来设置并清除本地推测值(例如,SpeculationPerPE)。在一个实施例中,如果就绪值(例如,如通过反压值所指示的那样在相应PE的输入缓冲器中存在可用槽,例如,其中值为高指示相应的消费者PE具有可用于接收数据流令牌的缓冲器(例如,在此周期中))或接受值(例如,接受比特在缓冲器接收到数据流令牌时被设置)中的任何一个被设置为高则本地推测值被设置为高(例如,二进制一)。在一个实施例中,本地推测值被聚合以形成聚合推测值,所述聚合推测值用于根据代码的聚合推测部分在生产者PE处设置并清除成功值(例如,比特)。图13图示了根据本公开的实施例的用于在(例如,每个)消费者(例如,接收器)PE处设置并清除接受值(例如,比特)的示例代码1300。在一个实施例中,当既有效值为高(例如,如通过有效值所指示的那样在生产者PE的输出缓冲器中存在可用的数据流令牌)且就绪值为高时接受值被设置为高(例如,二进制一)。就绪值在这里指示相应的接收器PE在此周期中具有可用于接收数据流令牌的缓冲器,例如,即它没有反压。在一个实施例中,调度器(例如,调度器1114A、1114B和/或调度器1114C)包括根据代码1200和/或代码1300(例如,其中的任一个)操作的硬件状态机。在一个实施例中,生产者PE 1100A中的调度器1114A包括根据代码1200(例如,其中的任一个)操作的硬件状态机。在一个实施例中,消费者PE 1100B中的调度器1114B或消费者PE 1100C中的调度器1114C中的任何一个或两个包括(例如,他们自己的)根据代码1200和/或代码1300(例如,其中的任一个)操作的硬件状态机。
图14图示了根据本公开的实施例的流程图1400。描绘的流程1400包括:经由数据路径将第一处理元件的第一输出缓冲器耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器,当在第一处理元件1402的第一输出缓冲器中接收到数据流令牌时(例如,在它被接收到的同时)所述数据路径将向第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器发送数据流令牌;在从第二处理元件的第一输入缓冲器到第一处理元件的第一反压路径上发送第一反压值以向第一处理元件指示储存器何时在第二处理元件1404的第一输入缓冲器中不可用;在从第三处理元件的第二输入缓冲器到第一处理元件的第二反压路径上发送第二反压值以向第一处理元件指示储存器何时在第三处理元件1406的第二输入缓冲器中不可用;在从第二处理元件的第一输入缓冲器到第一处理元件的第一推测路径上发送第一推测值以向第一处理元件指示数据流令牌何时将被存储(例如,在下一个周期中)在第二处理元件1408的第一输入缓冲器中;在从第三处理元件的第二输入缓冲器到第一处理元件的第二推测路径上发送第二推测值以向第一处理元件指示数据流令牌何时将被存储(例如,在下一个周期中)在第三处理元件1410的第二输入缓冲器中(例如,可选地);在第一反压路径上的第一反压值和第二反压路径上的第二反压值指示储存器可用于第一传输尝试1412时使数据流令牌从第一处理元件的第一输出缓冲器中出队以用于数据流令牌的第一传输尝试;以及当第一反压路径上的第一反压值指示了储存器在第一输入缓冲器中不可用于数据流令牌的第一传输尝试并且第二反压路径上的第二反压值指示了储存器在第二输入缓冲器中可用于数据流令牌的第一传输尝试时,在第一推测路径上的第一推测值指示要存储数据流令牌将被存储在第二处理元件1414的第一输入缓冲器中时使数据流令牌从第一处理元件的第一输出缓冲器中出队以用于数据流令牌的第二传输尝试。
2.3 存储器接口
请求地址堆(RAF)电路(其简化版本被示出在图15中)可以负责执行存储器操作并且用作CSA结构与存储器层次之间的媒介。因此,RAF的主要微架构任务可以是为了使具有CSA结构的顺序语义的乱序存储器子系统合理化。在这种能力下,RAF电路可以被提供有完整缓冲器,例如,对存储器响应进行重排序并且按照请求顺序将它们返回给结构的类似队列的结构。RAF电路的第二主要功能性可以是为了以地址转换和页面漫游器的形式提供支持。可以使用通道关联转换后备缓冲器(TLB)来将传入虚拟地址转换为物理地址。为了提供足够的存储器带宽,每个CSA块片可以包括多个RAF电路。像结构的各个PE一样,RAF电路可以在选择要执行的存储器操作之前通过在需要的情况下检查输入变元和输出缓冲的可用性来以数据流样式操作。然而,与一些PE不同,RAF电路在若干共址存储器操作之间复用。可以使用复用的RAF电路来使其各个子组件的面积开销最小化,例如,以共享加速器高速缓存接口(ACI)网络(在部分2.4中更详细地描述)、共享虚拟存储器(SVM)支持硬件、夹层网络接口和其他硬件管理设施。然而,存在也可以推动此选择的一些程序特性。在一个实施例中,(例如,有效的)数据流图将轮询共享虚拟存储器系统中的存储器。存储器等待时间绑定程序(例如图遍历)可以由于存储器相关控制流而利用许多单独的存储器操作以使存储器带宽饱和。尽管每个RAF可以被复用,然而CSA可以在块片粒度下包括多个(例如,在8与32之间)RAF以确保适当的高速缓存带宽。RAF可以经由本地网络和夹层网络两者与结构的其余部分进行通信。在RAF被复用的情况下,每个RAF可以被提供有到本地网络中的若干端口。这些端口可以用作到存储器的最小等待时间、高度确定性路径以用于由等待时间敏感或高带宽内存操作使用。此外,RAF可以被提供有夹层网络端点,例如,其提供对运行时服务和远程用户级存储器访问器的存储器访问。
图15图示了根据本公开的实施例的请求地址堆(RAF)电路1500。在一个实施例中,在配置时间,在数据流图中的存储器加载和存储操作在寄存器1510中被指定。到数据流图中的那些存储器操作的弧然后可以连接到输入队列1522、1524和1526。从那些存储器操作起的弧因此将离开完成缓冲器1528、1530或1532。依赖性令牌(其可以是单个比特)到达到队列1518和1520中。依赖性令牌将从队列1516离开。依赖性令牌计数器1514可以是队列的紧凑表示并且跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器1514饱和,则可以不为新存储器操作生成附加依赖性令牌。因此,存储器排序电路(例如,图16中的RAF)可以停止对新存储器操作进行调度,直到依赖性令牌计数器1514变得不饱和为止。
作为加载的示例,地址到达调度器1512在1510中与加载相配的队列1522中。用于此加载的完成缓冲器槽被按照地址到达的顺序指派。假定图中的这个特定加载没有指定的依赖性,地址和完成缓冲器槽由调度器(例如,经由存储器命令1542)发送到存储器系统。当结果返回到复用器1540(示意性地示出)时,它被存储到它指定的完成缓冲器槽中(例如,随着它贯穿存储器系统承载目标槽)。完成缓冲器按照地址到达的顺序将结果发送回到本地网络(例如,本地网络1502、1504、1506或1508)中。
除了地址和数据两者必须在任何操作被发送到存储器系统之前到达之外,存储器可以是类似的。
2.4 高速缓存
数据流图可以能够并行地生成大量(例如,字粒度)请求。因此,CSA的某些实施例给高速缓存子系统提供足够的带宽来为CSA服务。可以利用例如如图16中所示的重度堆积的高速缓存微架构。图16图示了根据本公开的实施例的具有耦合在多个加速器块片(1608、1610、1612、1614)与多个高速缓存存储体(例如,高速缓存存储体1602)之间的多个请求地址堆(RAF)电路(例如,RAF电路(1))的电路1600。在一个实施例中,RAF和高速缓存存储体的数量可以是1:1或1:2的比率。高速缓存存储体可以包含全高速缓存行(例如,与按字共享相比),其中每行在高速缓存中确切地具有一个起始位置。可以经由伪随机函数将高速缓存行映射到高速缓存存储体。CSA可以采纳共享虚拟存储器(SVM)模型来与其他块片架构集成。某些实施例包括将RAF连接到高速缓存存储体的加速器高速缓存接口(ACI)网络。此网络可以在RAF与高速缓存之间承载地址和数据。ACI的拓扑可以是级联交叉开关,例如,作为等待时间与实现复杂度之间的折中。
2.5 用于执行(例如,数据流)操作的网络资源(例如,电路)
在某些实施例中,处理元件(PE)使用通过静态地配置(例如,电路交换)通信网络而形成的专用虚拟电路来通信。这些虚拟电路可以是流控制的且完全反压的,例如,使得如果源没有数据或者其目的地满了则PE将停止。在运行时,数据可以流过实现映射数据流图(例如,映射算法)的PE。例如,数据可以通过处理元件的空间阵列(例如,其结构区域)从存储器流入,然后返回到存储器。
这种架构相对于传统多核心处理器可以实现显著的性能效率:计算(例如,形式为PE)可以比核心更简单且更多并且通信可以是直接的,例如,与存储器系统的扩展相反。然而,可以调谐处理元件的空间阵列(例如,其结构区域)以用于实现编译器生成的表达树,其可以特征是较少的复用或解复用。本文中的某些实施例(例如,经由网络资源,诸如但不限于网络数据流端点电路)扩展架构以支持(例如,高基数)复用和/或解复用,例如,尤其是在函数调用的上下文中。
空间阵列(诸如图1中的处理元件101的空间阵列)可以使用用于通信的(例如,分组交换)网络。本文中的某些实施例提供用于在用于通信的这些网络上覆盖高基数数据流操作的电路。例如,本文中的某些实施例利用用于通信的现有网络(例如,参考图1所描述的互连网络104)以在处理元件与空间阵列的其他组件之间提供数据路由能力,但是也扩增网络(例如,网络端点)以支持一些(例如,不到全部)数据流操作的执行和/或控制(例如,而不利用处理元件来执行那些数据流操作)。在一个实施例中,(例如,高基数)数据流操作用空间阵列内的特殊硬件结构(例如网络数据流端点电路)来支持,例如,而不消费处理资源或者使(例如,处理元件的)性能降级。
在一个实施例中,两个点之间(例如,数据的生产者和消费者之间)的电路交换网络包括这两个点之间的专用通信线路,例如,其中两个点之间的(例如,物理)开关被设置成在两个点之间创建(例如,排他性)物理电路。在一个实施例中,两个点之间的电路交换网络在两个点之间的连接的使用开始时被建立并且在连接的使用中自始至终被维持。在另一实施例中,分组交换网络包括两个(例如,或多个)点之间的共享通信线路(例如,通道),例如,其中来自不同连接的分组共享该通信线路(例如,根据每个分组的数据来路由,例如,在包括报头和有效负荷的分组的报头中)。例如参考夹层网络在下面讨论分组交换网络的示例。
图17图示了根据本公开的实施例的伪代码函数调用1701的数据流图1700。函数调用1701将加载两个输入数据操作数(例如,分别通过指针*a和*b来指示),并且将它们相乘在一起,并且返回结果数据。可以执行这个或其他函数多次(例如,在数据流图中)。图17中的数据流图图示了用于执行(例如,从调用站点1702A中)选择控制数据(例如,索引)并且利用控制数据(例如,索引)的复制数据流操作符1704复制到第一Pick数据流操作符1706、第二Pick数据流操作符1706和Switch数据流操作符1716中的每一个的操作的PickAny数据流操作符1702。在一个实施例中,索引(例如,来自PickAny)因此将数据输入并输出到例如[0,1 ... M]的相同索引位置,其中M是整数。第一Pick数据流操作符1706然后可以根据控制数据拉出多个输入数据元素1706A中的一个输入数据元素,并且使用该一个输入数据元素作为(*a)以然后利用加载数据流操作符1710加载存储在*a处的输入数据值。第二Pick数据流操作符1708然后可以根据控制数据拉出多个输入数据元素1708A中的一个输入数据元素,并且使用该一个输入数据元素作为(*b)以然后利用加载数据流操作符1712加载存储在*b处的输入数据值。然后可以将这两个输入数据值乘以乘法数据流操作符1714(例如,作为处理元件的一部分)。然后可以通过Switch数据流操作符1716将乘法的结果数据路由(例如,到下游处理元件或其他组件),例如,到调用站点1716A,例如,根据控制数据(例如,索引)到Switch数据流操作符1716。
图17是用于管理数据(例如,令牌)的引导的数据流操作符的数量可能是显著的函数调用的示例,例如,以引导到和/或来自调用站点的数据。在一个示例中,可以利用PickAny数据流操作符1702、第一Pick数据流操作符1706、第二Pick数据流操作符1706和Switch数据流操作符1716中的一个或多个来路由(例如,引导)数据,例如,当存在多个(例如,许多)调用站点时。在其中引入多路复用和/或解复用函数调用的(例如,主要)目标是为了减少特定数据流图的实现面积的实施例中,本文中的某些实施例(例如,微架构的)减少数据流图的此类复用/或解复用(例如,部分)的面积开销。
图18图示了根据本公开的实施例的具有多个网络数据流端点电路(1802、1804、1806)的处理元件(PE)的空间阵列1801。处理元件的空间阵列1801可以包括组件之间的通信(例如,互连)网络,例如,如本文中所讨论的。在一个实施例中,通信网络是一个或多个分组交换通信网络(例如,其通道)。在一个实施例中,通信网络是一个或多个电路交换静态地配置的通信通道。例如,通过开关(例如,第一网络中的开关1810和第二网络中的开关1811)耦合在一起的一组通道。第一网络和第二网络可以是单独的或者耦合在一起。例如,开关1810可以将其中的多个(例如,四个)数据路径中的一个或多个耦合在一起,例如,如被配置成根据数据流图来执行操作那样。在一个实施例中,数据路径的数量是任何多个。处理元件(例如,处理元件1808)可以如本文中所公开的那样,例如,如在图9中一样。加速器块片1800包括存储器/高速缓存层次接口1812,例如,以将加速器块片1800与存储器和/或高速缓存对接。数据路径可以延伸到另一块片或者终止,例如,在块片的边缘处。处理元件可以包括输入缓冲器(例如,缓冲器1809)和输出缓冲器。
操作可以基于其输入的可用性和PE的状态被执行。PE可以从输入通道获得操作数并且将结果写入到输出通道,但是也可以使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好的PE。图9示出了一个这种PE:整数PE的详细框图。此PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器构成。每个周期,调度器可以基于输入和输出缓冲器的可用性以及PE的状态来选择用于执行的指令。然后可以将操作的结果写入到输出缓冲器或者到(例如,在PE本地的)寄存器。可以将写入到输出缓冲器的数据传输到下游PE以便进一步处理。这种样式的PE可以是极其高能效的,例如,不是从复杂多端口寄存器堆读取数据,而是PE从寄存器读取数据。类似地,可以将指令直接地存储在寄存器中,而不是在虚拟化指令高速缓存中。
可以在特殊配置步骤期间设置指令寄存器。在此步骤期间,可以使用除PE间网络之外的辅助控制线和状态来跨越包括结构的若干PE流入配置。作为并行性的结果,这种网络的某些实施例可以提供快速重配置,例如,可以在不到大约10微秒内配置块片大小的结构。
此外,描绘的加速器块片1800包括分组交换通信网络1814,例如,作为夹层网络的一部分,例如,如下所述。本文中的某些实施例允许在通信网络上(例如,在通信网络内)(例如,而不是在(一个或多个)处理元件中)执行(例如,分布式)数据流操作(例如,仅路由数据的操作)。作为示例,在图18中描绘了数据流图的分布式Pick数据流操作。特别地,在三个单独的网络(例如,全局)端点(例如,网络数据流端点电路(1802、1804、1806))上使用三个单独的配置来实现分布式拾取。可以例如利用要以协调方式配置的若干端点分发数据流操作。例如,编译工具可以理解对协调的需要。可以在若干分布式操作当中共享端点(例如,网络数据流端点电路),例如,数据流操作(例如,拾取)端点可以与和数据流操作(例如,拾取)有关的若干发送对照。分布式数据流操作(例如,拾取)可以生成与非分布式数据流操作(例如,拾取)相同的相同结果。在某些实施例中,分布式数据流操作与非分布式数据流操作之间的差异在于分布式数据流操作在分组交换通信网络上具有其数据(例如,要路由的数据,但是其可以不包括控制数据),例如,具有相关联的流控制和分布式协调。尽管示出了不同大小的处理元件(PE),但是在一个实施例中,每个处理元件具有相同的大小(例如,硅面积)。在一个实施例中,还可以包括用于缓冲数据的缓冲器元件,例如,与处理元件分开。
作为一个示例,拾取数据流操作可以具有多个输入并且将它们中的一个作为输出来引导(例如,路由),例如,如在图17中一样。不是利用处理元件来执行拾取数据流操作,而是可以利用一个或多个网络通信资源(例如,网络数据流端点电路)实现它。附加地或可替换地,网络数据流端点电路可以在处理元件之间路由数据,例如,以便处理元件对数据执行处理操作。本文中的实施例因此可以利用通信网络来执行(例如,引导)数据流操作。附加地或可替换地,网络数据流端点电路可以作为在下面讨论的夹层网络来执行。
在所描绘的实施例中,分组交换通信网络1814可以处理某些(例如,配置)通信,例如,以对处理元件和/或电路交换网络(例如,网络1813,其可以包括交换机)进行编程。在一个实施例中,电路交换网络被配置(例如,编程)以执行一个或多个操作(例如,数据流图的数据流操作)。
分组交换通信网络1814包括多个端点(例如,网络数据流端点电路(1802、1804、1806)。在一个实施例中,每个端点包括地址或其他指示符值以允许数据例如根据数据分组(例如,其报头)被路由到该端点和/或从该端点路由。
附加地或可替换地为了执行上述中的一个或多个,分组交换通信网络1814可以执行数据流操作。网络数据流端点电路(1802、1804、1806)可以被配置(例如,编程)以执行数据流图的(例如,分布式拾取)操作。在本文中对组件(例如,电路)的编程进行描述。参考图19讨论配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。
作为分布式拾取数据流操作的示例,图18中的网络数据流端点电路(1802、1804、1806)可以被配置(例如,编程)以执行数据流图的分布式拾取操作。参考图19讨论配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。附加地或可替换地为了配置远程端点电路,还可以根据本公开来配置本地端点电路。
网络数据流端点电路1802可以被配置成从多个源(例如,网络数据流端点电路1804和网络数据流端点电路1806)接收输入数据并且例如根据控制数据来输出结果数据,例如,如在图17中一样。网络数据流端点电路1804可以被配置成例如在从处理元件1822接收到输入数据时向网络数据流端点电路1802提供(例如,发送)输入数据。这可以被称为图18中的输入0。在一个实施例中,电路交换网络被配置(例如,编程)以沿着路径1824在处理元件1822与网络数据流端点电路1804之间提供专用通信线路。网络数据流端点电路1806可以被配置成例如在从处理元件1820接收到输入数据时向网络数据流端点电路1802提供(例如,发送)输入数据。这可以被称为图18中的输入1。在一个实施例中,电路交换网络被配置(例如,编程)以沿着路径1816在处理元件1820与网络数据流端点电路1806之间提供专用通信线路。
当网络数据流端点电路1804将向网络数据流端点电路1802传送输入数据时(例如,当网络数据流端点电路1802具有用于数据的可用存储空间和/或网络数据流端点电路1804具有其输入数据时),网络数据流端点电路1804可以生成分组(例如,包括输入数据和报头以将该数据引导到分组交换通信网络1814上的网络数据流端点电路1802(例如,作为该(例如,环形)网络1814上的站点)。这在图18中用虚线1826示意性地图示。尽管图18中示出的示例利用两个源(例如,两个输入),然而可以利用单个或任何多个(例如,大于两个)源(例如,输入)。
当网络数据流端点电路1806将向网络数据流端点电路1802传送输入数据时(例如,当网络数据流端点电路1802具有用于数据的可用存储空间和/或网络数据流端点电路1806具有其输入数据时),网络数据流端点电路1804可以生成分组(例如,包括输入数据和报头以将该数据引导到分组交换通信网络1814上的网络数据流端点电路1802(例如,作为该(例如,环形)网络1814上的站点)。这在图18中用虚线1818示意性地图示。尽管示出了网状网络,然而可以使用其他网络拓扑。
网络数据流端点电路1802(例如,在接收到来自网络数据流端点电路1804的输入0、来自网络数据流端点电路1806的输入1和/或控制数据时)然后可以执行已编程的数据流操作(例如,在此示例中为Pick操作)。网络数据流端点电路1802然后可以输出来自操作的相应结果数据,例如,到图18中的处理元件1808。在一个实施例中,电路交换网络被配置(例如,编程)以沿着路径1828在处理元件1808(例如,其缓冲器)与网络数据流端点电路1802之间提供专用通信线路。在下面参考图31-33讨论分布式Pick操作的另一个示例。
在一个实施例中,用于执行操作(例如,拾取操作)的控制数据来自空间阵列的其他组件,例如,处理元件或者通过网络。在下面参考图19讨论这个的示例。注意的是,Pick操作符被示意性地示出在端点1802中,并且可以不是复用器电路,例如,参见在下面对图19中的网络数据流端点电路1900的讨论。
在某些实施例中,数据流图可以具有由处理元件执行的某些操作和由通信网络(例如,一个或多个网络数据流端点电路)执行的某些操作。
图19图示了根据本公开的实施例的网络数据流端点电路1900。尽管在网络数据流端点电路1900中图示了多个组件,然而可以在单个网络数据流端点电路中利用每个组件的一个或多个实例。网络数据流端点电路的实施例可以包括图19中的组件中的任一个(例如,不是全部)。
图19描绘了示出主要数据(实线)和控制数据(点线)路径的实施例的(例如,夹层)网络接口的微架构。此微架构提供配置储存器和调度器以启用(例如,高基数)数据流操作符。本文中的某些实施例包括到调度器以启用支线选择和描述的数据路径。图19示出了网络(例如,夹层)端点(例如,站点)的高级微架构,所述网络端点可以是用于上下文的环形网络的成员。为了支持(例如,高基数)数据流操作,端点(例如,操作配置储存器1926)的配置将包括检查多个网络(例如,虚拟)通道的配置(例如,与基线实施方式中的单个虚拟通道相反)。网络数据流端点电路1900的某些实施例包括从入口起和到出口的数据路径以控制对(例如,拾取和切换类型的操作)的选择,和/或以描述在PickAny数据流操作符或SwitchAny数据流操作符的情况下由调度器做出的选择。可以在每个通信通道中(例如,在(例如,分组交换通信)网络和(例如,电路交换)网络(例如,处理元件的空间阵列的结构)中)利用流控制和反压行为。
作为微架构的实施例的一个描述,拾取数据流操作符可以用来例如基于控制数据从输入数据的多个输入中拾取结果数据的一个输出。网络数据流端点电路1900可以被配置成将电路1900的(一个或多个)空间阵列入口缓冲器1902中的一个(例如,来自结构的数据是控制数据)认为是在存储在电路1900的(一个或多个)网络入口缓冲器1924中的多个输入数据元件当中选择以将结果数据引导到电路1900的空间阵列出口缓冲器1908。因此,(一个或多个)网络入口缓冲器1924可以被认为是虚拟复用器的输入,空间阵列入口缓冲器1902被认为是复用器选择,并且空间阵列出口缓冲器1908被认为是复用器输出。在一个实施例中,当(例如,控制数据)值被检测到和/或到达空间阵列入口缓冲器1902时,调度器1928(例如,如通过储存器1926中的操作配置所编程的)对检查所对应的网络入口通道敏感。当数据在该通道中可用时,它被从网络入口缓冲器1924中移除并移动到空间阵列出口缓冲器1908。然后可以更新入口和出口两者的控制比特以反映数据的转移。这可以导致控制流令牌或信用在相关联的网络中被传播。在某些实施例中,所有输入(例如,控制或数据)可以在本地或在网络上出现。
最初,似乎使用分组交换网络来实现复用和/或解复用代码的(例如,高基数分级)操作符妨碍性能。例如,在一个实施例中,分组交换网络一般地被共享并且调用者和被调用者数据流图可以彼此远离。然而,回想一下在某些实施例中,支持复用和/或解复用的意图是为了减少由数据流操作符内的不频繁的代码路径(例如,由空间阵列)所消费的面积。因此,本文中的某些实施例减少面积并且避免对更昂贵的结构资源的消费,例如如同PE,例如,而不(基本上)影响个别PE的面积和效率以支持那些(例如,不频繁的)操作。
现在转向图19的进一步细节,描绘的网络数据流端点电路1900包括空间阵列(例如,结构)入口缓冲器1902,例如,以从(例如,电路交换)网络输入数据(例如,控制数据)。如上面所指出的,尽管描绘了单个空间阵列(例如,结构)入口缓冲器1902,然而多个空间阵列(例如,结构)入口缓冲器可以在网络数据流端点电路中。在一个实施例中,空间阵列(例如,结构)入口缓冲器1902将从空间阵列(例如,处理元件的空间阵列)的通信网络(例如,从网络1904和网络1906中的一个或多个)接收数据(例如,控制数据)。在一个实施例中,网络1904是图18中的网络1813的一部分。
描绘的网络数据流端点电路1900包括空间阵列(例如,结构)出口缓冲器1908,例如,以将数据(例如,控制数据)输出到(例如,电路交换的)网络。如上面所指出的,尽管描绘了单个空间阵列(例如,结构)出口缓冲器1908,但是多个空间阵列(例如,结构)出口缓冲器可以在网络数据流端点电路中。在一个实施例中,空间阵列(例如,结构)出口缓冲器1908是为了将数据(例如,控制数据)发送(例如,传送)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如,到网络1910和网络1912中的一个或多个上。在一个实施例中,网络1910是图18中的网络1813的一部分。
附加地或可替换地,网络数据流端点电路1900可以耦合到另一网络1914,例如,分组交换网络。另一网络1914(例如,分组交换网络)可以用于将(例如,输入和/或结果)数据传送(例如,发送或者接收)到空间阵列的处理元件或其他组件和/或传送输入数据或结果数据中的一个或多个。在一个实施例中,网络1914是图18中的分组交换通信网络1814(例如,时分复用网络)的一部分。
网络缓冲器1918(例如,(一个或多个)寄存器)可以是(例如,环形)网络1914上的站点,例如,以从网络1914接收数据。
描绘的网络数据流端点电路1900包括网络出口缓冲器1922,例如,以将数据(例如,结果数据)输出到(例如,分组交换)网络。如上面所指出的,尽管描绘了单个网络出口缓冲器1922,然而多个网络出口缓冲器可以在网络数据流端点电路中。在一个实施例中,网络出口缓冲器1922是为了将数据(例如,结果数据)发送(例如,传送)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如,到网络1914上。在一个实施例中,网络1914是图18中的分组交换网络1814的一部分。在某些实施例中,网络出口缓冲器1922是为了将数据(例如,从空间阵列入口缓冲器1902)输出到(例如,分组交换)网络1914,例如,以被路由(例如,引导)到其他组件(例如,(一个或多个)其他网络数据流端点电路)。
描绘的网络数据流端点电路1900包括网络入口缓冲器1922,例如,以从(例如,分组交换)网络输入数据(例如,输入的数据)。如上面所指出的,尽管描绘了单个网络入口缓冲器1924,然而多个网络入口缓冲器可以在网络数据流端点电路中。在一个实施例中,网络入口缓冲器1924是为了从空间阵列(例如,处理元件的空间阵列)的通信网络(例如,从网络1914)接收(例如,传送)数据(例如,输入数据)。在一个实施例中,网络1914是图18中的分组交换网络1814的一部分。在某些实施例中,网络入口缓冲器1924是为了从(例如,分组交换)网络1914输入数据(例如,来自空间阵列入口缓冲器1902),例如,以被从其他组件(例如,其他网络数据流端点电路)路由(例如,引导)到那里(例如,到空间阵列出口缓冲器1908中)。
在一个实施例中,(例如,网络1914上的数据的)数据格式包括具有数据和报头(例如,带该数据的目的地)的分组。在一个实施例中,(例如,网络1904和/或1906上的数据的)数据格式仅包括数据(例如,不是包括具有数据和报头(例如,带该数据的目的地)的分组)。网络数据流端点电路1900可以向分组添加(例如,来自电路1900的数据输出)或者从分组中移除(例如,进入到电路1900中的数据输入)报头(或其他数据)。耦合1920(例如,线)可以将从网络1914(例如,从网络缓冲器1918)接收到的数据发送到网络入口缓冲器1924和/或复用器1916。复用器1916可以(例如,经由来自调度器1928的控制值)输出来自网络缓冲器1918或来自网络入口缓冲器1922的数据。在一个实施例中,复用器1916或网络缓冲器1918中的一个或多个是与网络数据流端点电路1900分开的组件。缓冲器可以包括多个(例如,分立)条目,例如,多个寄存器。
在一个实施例中,操作配置储存器1926(例如,一个或多个寄存器)在配置(例如,映射)期间被加载并且指定此网络数据流端点电路1900(例如,不是空间阵列的处理元件)将执行的特定操作(或这些操作)(例如,与逻辑和/或算术操作相反的数据引导操作)。(一个或多个)缓冲器(例如,1902、1908、1922和/或1924)活动可以通过该操作来控制(例如,由调度器1928控制)。例如,当(例如,所有)输入(例如,有效负荷)数据和/或控制数据到达时,调度器1928可以对网络数据流端点电路1900的一个或多个操作进行调度。到和来自调度器1928的虚线指示可以被用于控制数据的路径,例如,到和/或来自调度器1928。调度器还可以控制复用器1916,例如,以将引导到和/或来自网络数据流端点电路1900和网络1914的数据。
参考上图18中的分布式拾取操作,网络数据流端点电路1802可以被配置(例如,如在图19中一样作为其操作配置寄存器1926中的操作)以接收(例如,如在图19中一样在其网络入口缓冲器1924(中的两个存储位置)中)来自网络数据流端点电路1804和网络数据流端点电路1806中的每一个的输入数据,并且例如根据控制数据(例如,如在图19中一样在其空间阵列入口缓冲器1902中)输出结果数据(例如,如在图19中一样从其空间阵列出口缓冲器1908)。网络数据流端点电路1804可以被配置(例如,如在图19中一样作为其操作配置寄存器1926中的操作)以向网络数据流端点电路1802提供(例如,如在图19中一样经由电路1804的网络出口缓冲器1922发送)输入数据,例如,在从处理元件1822接收到(例如,如在图19中一样在电路1804的空间阵列入口缓冲器1902中)输入数据时。这可以被称为图18中的输入0。在一个实施例中,电路交换网络被配置(例如,编程)以沿着路径1824在处理元件1822与网络数据流端点电路1804之间提供专用通信线路。网络数据流端点电路1804可以包括(例如,添加)具有所接收到的数据的报头分组(例如,如在图19中一样在其网络出口缓冲器1922中)以将分组(例如,输入数据)引导到网络数据流端点电路1802。网络数据流端点电路1806可以被配置(例如,如在图19中一样作为其操作配置寄存器1926中的操作)以提供(例如,如图19中的经由电路1806的网络出口缓冲器1922)向网络数据流端点电路1802提供(例如,如在图19中一样经由电路1806的网络入口缓冲器1922发送)输入数据,例如,在从处理元件1820接收到(例如,如在图19中一样在电路1806的空间阵列入口缓冲器1902中)输入数据时。这可以被称为图18中的输入1。在一个实施例中,电路交换网络被配置(例如,编程)以沿着路径1816在处理元件1820与网络数据流端点电路1806之间提供专用通信线路。网络数据流端点电路1806可以包括(例如,添加)具有所接收到的数据的报头分组(例如,如在图19中一样在其网络出口缓冲器1922中)以将分组(例如,输入数据)引导到网络数据流端点电路1802。
当网络数据流端点电路1804将向网络数据流端点电路1802传送输入数据时(例如,当网络数据流端点电路1802具有用于数据的可用存储空间和/或网络数据流端点电路1804具有其输入数据时),网络数据流端点电路1804可以生成分组(例如,包括输入数据和报头以将该数据引导到分组交换通信网络1814上的网络数据流端点电路1802(例如,作为该(例如,环形)网络上的站点)。这在图18中用虚线1826示意性地示出。网络1814在图18中用多个虚线框示意性地示出。网络1814可以包括网络控制器1814A,例如,以管理网络1814A上的数据的入口和/或出口。
当网络数据流端点电路1806将向网络数据流端点电路1802传送输入数据时(例如,当网络数据流端点电路1802具有用于数据的可用存储空间和/或网络数据流端点电路1806具有其输入数据时),网络数据流端点电路1804可以生成分组(例如,包括输入数据和报头以将该数据引导到分组交换通信网络1814上的网络数据流端点电路1802(例如,作为该(例如,环形)网络上的站点)。这在图18中用虚线1818示意性地示出。
网络数据流端点电路1802(例如,在接收到来自电路1802的(一个或多个)网络入口缓冲器中的网络数据流端点电路1804的输入0、来自电路1802的(一个或多个)网络入口缓冲器中的网络数据流端点电路1806的输入1和/或来自电路1802的空间阵列入口缓冲器中的处理元件1808的控制数据时)然后可以执行已编程的数据流操作(例如,在此示例中为Pick操作)。网络数据流端点电路1802然后可以输出来自操作的相应结果数据,例如,到图18中的处理元件1808。在一个实施例中,电路交换网络被配置(例如,编程)以沿着路径1828在处理元件1808(例如,其缓冲器)与网络数据流端点电路1802之间提供专用通信线路。在下面参考图31-33讨论分布式Pick操作的另一示例。图18中的缓冲器可以是每个PE中的小的无标记框。
下图20-8包括示例数据格式,但是可以利用其他数据格式。一个或多个字段可以被包括在数据格式中(例如,在分组中)。数据格式可以由网络数据流端点电路使用,例如,以在第一组件之间(例如,在第一网络数据流端点电路与第二网络数据流端点电路之间、在空间阵列的组件之间等)传送(例如,发送和/或接收)数据。
图20图示了根据本公开的实施例的用于发送操作2002和接收操作2004的数据格式。在一个实施例中,发送操作2002和接收操作2004是在分组交换通信网络上传送的数据的数据格式。描绘的发送操作2002数据格式包括目的地字段2002A(例如,指示数据将被发送到网络中的哪一个组件)、通道字段2002B(例如,指示将在网络上的哪一个通道上发送数据)和输入字段2002C(例如,将被发送的有效负荷或输入数据)。描绘的接收操作2004包括输出字段,例如,其还可以包括目的地字段(未描绘)。可以(例如,针对(一个或多个)分组)使用这些数据格式来处理移入和移出组件的数据。这些配置可以是可分开的和/或并行发生。这些配置可以使用单独的资源。术语通道一般地可以指代与请求相关联的通信资源(例如,在管理硬件中)。配置和队列管理硬件的关联可以是显式的。
图21图示了根据本公开的实施例的用于发送操作2102的另一数据格式。在一个实施例中,发送操作2102是在分组交换通信网络上传送的数据的数据格式。描绘的发送操作2102数据格式包括类型字段(例如,用于注释特殊控制分组,诸如但不限于配置、提取或异常分组)、目的地字段2102B(例如,指示数据将被发送到网络中的哪一个组件)、通道字段2102C(例如,指示将在网络上的哪一个通道上发送数据)和输入字段2102D(例如,将被发送的有效负荷或输入数据)。
图22图示了根据本公开的实施例的用于为发送(例如,切换)操作2202和接收(例如,拾取)操作2204配置电路元件(例如,网络数据流端点电路)的配置数据格式。在一个实施例中,发送操作2202和接收操作2204是用于要在分组交换通信网络上(例如,在网络数据流端点电路之间)传送的数据的配置数据格式。描绘的发送操作配置数据格式2202包括目的地字段2202A(例如,指示(输入)数据将被发送到网络中的哪一个(或哪些)组件)、通道字段2202B(例如,指示将在网络上的哪一个通道上发送(输入)数据)、输入字段2202C(例如,将发送输入数据(例如,此元件敏感的(例如,结构入口)缓冲器中的输入集)的(一个或多个)组件的标识符和操作字段2202D(例如,指示多个操作中的哪一个将被执行)。在一个实施例中,(例如,出站)操作是Switch或SwitchAny数据流操作中的一个,例如,与数据流图的(例如,相同的)数据流操作符相对应。
描绘的接收操作配置数据格式2204包括输出字段2204A(例如,指示(结果)数据将被发送到的网络中哪一个(或哪些)组件)、输入字段2204B(例如,将发送输入数据的(一个或多个)组件的标识符)和操作字段2204C(例如,指示多个操作中的哪一个操作将被执行)。在一个实施例中,(例如,入站)操作是Pick、PickSingleLeg、PickAny或Merge数据流操作中的一个,例如,与数据流图的(例如,相同的)数据流操作符相对应。在一个实施例中,合并数据流操作是要求并使所有操作数出队的拾取(例如,具有出口端点接收控制)。
本文中所使用的配置数据格式可以例如以任何顺序包括本文中所描述的字段中的一个或多个。
图23图示了根据本公开的实施例的用于为发送操作配置电路元件(例如,网络数据流端点电路)同时在电路2300上注释其输入、输出和控制数据的配置数据格式2302。描绘的发送操作配置数据格式2302包括目的地字段2302A(例如,指示数据将被发送到网络中的哪一个组件)、通道字段2302B(例如,指示将在(分组交换)网络上的哪一个通道上发送数据)和输入字段2002C(例如,将发送输入数据的(一个或多个)组件的标识符)。在一个实施例中,电路2300(例如,网络数据流端点电路)将以发送操作配置数据格式2302的数据格式接收数据的分组,例如,其中目的地指示结果将被发送到多个电路中的哪一个电路,通道指示将在(分组交换)网络的哪一个通道发送数据,并且输入是将从其接收输入数据的多个电路的哪一个电路。与门2304将允许在输入数据既可用且信用状态为指示例如在目的地的缓冲器中存在用于要存储的输出数据的空间的是(例如,依赖性令牌指示)时执行操作。在某些实施例中,每个操作被按其要求(例如,输入、输出和控制)注释,并且如果满足所有要求,则配置可由电路(例如,网络数据流端点电路)“执行”。
图24图示了根据本公开的实施例的用于为所选(例如,发送)操作配置电路元件(例如,网络数据流端点电路)同时在电路2400上注释其输入、输出和控制数据的配置数据格式2402。描绘的(例如,发送)操作配置数据格式2402包括目的地字段2402A(例如,指示(输入)数据将被发送到网络中的哪一个(或哪些)组件),通道字段2402B(例如,指示将在网络上的哪一个通道上发送(输入)数据),输入字段2402C(例如,将发送输入数据的(一个或多个)组件的标识符)和操作字段2402D(例如,指示多个操作中的哪一个将被执行和/或用于该操作的控制数据的源)。在一个实施例中,(例如,出站)操作是发送、Switch或SwitchAny数据流操作中的一个,例如,与数据流图的(例如,相同的)数据流操作符相对应。
在一个实施例中,电路2400(例如,网络数据流端点电路)将以(例如,发送)操作配置数据格式2402的数据格式接收数据分组,例如,其中输入是有效负荷(例如,输入数据)的(一个或多个)源并且操作字段指示哪一个操作将被执行(例如,示意性地示为Switch或SwitchAny)。描绘的复用器2404可以例如基于操作字段2402D中的值从多个可用操作中选择要执行的操作。在一个实施例中,当输入数据既可用且信用状态为指示例如在目的地的缓冲器中存在用于要存储的输出数据的空间的是(例如,依赖性令牌指示)时电路2400将执行该操作。
在一个实施例中,发送操作除检查其(一个或多个)输入可用于发送之外不利用控制。这可以使得开关能够在没有信用的情况下对所有支线执行操作。在一个实施例中,Switch和/或SwitchAny操作包括通过存储在操作字段2402D中的值来控制以选择正确的队列管理电路的复用器。
存储在操作字段2402D中的值可以在控制选项当中选择,例如,其中每个操作各有不同的控制(例如,逻辑)电路,例如,如在图25-28中一样。在一些实施例中,信用(例如,网络上的信用)状态是另一输入(例如,如这里在图25-26中所描绘的)。
图25图示了根据本公开的实施例的用于为Switch操作配置数据格式2502配置电路元件(例如,网络数据流端点电路)同时在电路2500上注释其输入、输出和控制数据的配置数据格式。在一个实施例中,存储在操作字段2402D中的(例如,出站)操作值用于Switch操作,例如,与数据流图的Switch数据流操作符相对应。在一个实施例中,电路2500(例如,网络数据流端点电路)将以Switch操作2502的数据格式接收数据的分组,例如,其中输入字段2502A中的输入是(一个或多个)什么组件将发送数据并且操作字段2502B指示哪一个操作将被执行(例如,示意性地示为Switch)。描绘的电路2500可以基于操作字段2502B从多个可用操作中选择要执行的操作。在一个实施例中,当输入数据(例如,根据输入状态,例如,在(一个或多个)目的地中存在用于数据的空间)既可用且信用状态(例如,选择操作(OP)状态)为是(例如,网络信用指示在网络上存在将该数据发送到(一个或多个)目的地的可用性)时电路2400将执行该操作。例如,复用器2510、2512、2514可以与每个输入(例如,输出数据将在交换操作中被发送到的地方)的相应的输入状态和信用状态一起使用,例如,以防止输入示出为可用的直到既输入状态(例如,在目的地中用于数据的空间)且信用状态(例如,在网络上存在到达目的地的空间)为真(例如,是)为止。在一个实施例中,输入状态是例如在目的地的缓冲器中存在或不存在用于要存储的(输出)数据的空间的指示。在某些实施例中,与门2506将允许在输入数据既可用(例如,作为来自复用器2504的输出)且选择操作(例如,控制数据)状态为是(例如,指示选择操作(例如,输入将被发送到多个输出中的哪一个,参见例如图17))时执行操作。在某些实施例中,利用控制数据(例如,选择操作)执行操作是为了使来自这些输入中的一个的输入数据例如根据来自复用器2508的复用器选择比特在一个或多个(例如,多个)输出上被输出(例如,如通过控制数据所指示的)。在一个实施例中,选择操作选取开关输出的哪一个支线将被使用和/或选择解码器创建复用器选择比特。
图26图示了根据本公开的实施例的用于为SwitchAny操作配置数据格式2602配置电路元件(例如,网络数据流端点电路)同时在电路2600上注释其输入、输出和控制数据的配置数据格式。在一个实施例中,存储在操作字段2402D中的(例如,出站)操作值用于SwitchAny操作,例如,与数据流图的SwitchAny数据流操作符相对应。在一个实施例中,电路2600(例如,网络数据流端点电路)将以SwitchAny操作配置数据格式2602的数据格式接收数据的分组,例如,其中输入字段2602A中的输入是(一个或多个)什么组件将发送数据并且操作字段2602B指示哪一个操作将被执行(例如,示意性地示为SwitchAny)和/或用于该操作的控制数据的源。在一个实施例中,当输入数据中的任一个(例如,根据输入状态,例如,在(一个或多个)目的地中存在用于数据的空间)可用并且信用状态为是(例如,网络信用指示在网络上存在将该数据发送到(一个或多个)目的地的可用性)时电路2400将执行该操作。例如,复用器2610、2612、2614可以与每个输入(例如,输出数据将在SwitchAny操作中被发送到的地方)的相应的输入状态和信用状态一起使用,例如,以防止输入示出为可用的直到既输入状态(例如,在目的地中用于数据的空间)且信用状态(例如,在网络上存在到达目的地的空间)为真(例如,是)为止。在一个实施例中,输入状态是例如在目的地的缓冲器中存在空间或者不存在用于要存储的(输出)数据的空间的指示。在某些实施例中,或门2604将允许在输出中的任一个可用时执行操作。在某些实施例中,操作的执行是为了使来自这些输入中的一个的第一可用输入数据例如根据来自复用器2606的复用器选择比特在一个或多个(例如,多个)输出上被输出。在一个实施例中,任何输出信用一可用就发生SwitchAny(例如,与利用选择操作的Switch相反)。复用器选择比特可以用于将输入引导到网络数据流端点电路的(例如,网络)出口缓冲器。
图27图示了根据本公开的实施例的用于为Pick操作配置数据格式2702配置电路元件(例如,网络数据流端点电路)同时在电路2700上注释其输入、输出和控制数据的配置数据格式。在一个实施例中,存储在操作字段2702C中的(例如,入站)操作值用于Pick操作,例如,与数据流图的Pick数据流操作符相对应。在一个实施例中,电路2700(例如,网络数据流端点电路)将以Pick操作配置数据格式2702的数据格式接收数据的分组,例如,其中输入字段2702B中的数据是(一个或多个)什么组件将发送输入数据,输出字段2702A中的数据是(一个或多个)什么组件将发送输入数据,并且操作字段2702C指示哪一个操作将被执行(例如,示意性地示为Pick)和/或用于该操作的控制数据的源。描绘的电路2700可以基于操作字段2702C从多个可用操作中选择要执行的操作。在一个实施例中,当输入数据(例如,根据输入(例如,网络入口缓冲器)状态,例如,所有输入数据已到达)既可用且信用状态(例如,输出状态)为指示例如在(一个或多个)目的地的缓冲器中存在用于要存储的输出数据的空间的是(例如,空间阵列出口缓冲器)以及选择操作(例如,控制数据) )状态为是时电路2700将执行该操作。在某些实施例中,与门2706将允许在输入数据既可用(例如,作为来自复用器2704的输出)、输出空间可用并且选择操作(例如,控制数据)状态为是(例如,指示选择操作(例如,输入将被发送到的多个输出中的哪一个,参见例如图17))时执行该操作。在某些实施例中,利用控制数据(例如,选择操作)执行操作是为了使来自多个输入中的一个(例如,通过控制数据来指示)的输入数据例如根据来自复用器2708的复用器选择比特在一个或多个(例如,多个)输出上被输出。在一个实施例中,选择操作选取拾取的哪一个支线将被使用和/或选择解码器创建复用器选择比特。
图28图示了根据本公开的实施例的用于为PickAny操作2802配置电路元件(例如,网络数据流端点电路)同时在电路2800上注释其输入、输出和控制数据的配置数据格式。在一个实施例中,存储在操作字段2802C中的(例如,入站)操作值用于PickAny操作,例如,与数据流图的PickAny数据流操作符相对应。在一个实施例中,电路2800(例如,网络数据流端点电路)将以PickAny操作配置数据格式2802的数据格式接收数据的分组,例如,其中输入字段2802B中的数据是(一个或多个)什么组件将发送输入数据,输出字段2802A中的数据是(一个或多个)什么组件将发送输入数据,并且操作字段2802C指示哪一个操作将被执行(例如,示意性地示为PickAny)。描绘的电路2800可以基于操作字段2802C从多个可用操作中选择要执行的操作。在一个实施例中,电路2800将在任何输入数据(例如,首先到达)(例如,根据输入(例如,网络入口缓冲器)状态,例如,输入数据中的任一个已到达)可用并且信用状态(例如,输出状态)为指示例如在(一个或多个)目的地的缓冲器中存在用于要存储的输出数据的空间的是(例如,空间阵列出口缓冲器指示)时执行该操作。在某些实施例中,与门2806将允许在输入数据中的任一个可用 (例如,作为来自复用器2804的输出)并且输出空间可用时执行操作。在某些实施例中,操作的执行是为了使来自多个输入中的一个的(例如,首先到达)输入数据例如根据来自复用器2808的复用器选择比特在一个或多个(例如,多个)输出上被输出。
在一个实施例中,PickAny在存在任何数据时执行和/或选择解码器创建复用器选择比特。
图29图示了根据本公开的实施例的对由网络数据流端点电路2900执行的操作(2902、2904、2906)的选择。未决操作储存器2901(例如,在图19中的调度器1928中)可以例如根据本文中所讨论的(一个或多个)格式存储一个或多个数据流操作。调度器(例如,基于例如具有其所有操作数的操作的固定优先级或最旧者)可以对操作进行调度以供执行。例如,调度器可以选择操作2902,并且根据存储在操作字段中的值,从复用器2908和/或复用器2910发送对应的控制值。作为示例,可以在单个网络数据流端点电路中同时地执行若干操作。假定所有数据都在那里,“可执行”值(例如,如图23-28中所示)可以作为值被输入到复用器2912中。复用器2912可以作为用于所选操作(例如,操作2902、2904和2906中一个)的输出控制值发送,所述输出控制值使复用器2908配置网络数据流端点电路中的连接以执行所选操作(例如,源自于(一个或多个)缓冲器或者向(一个或多个)缓冲器发送数据)。复用器2912可以作为用于所选操作(例如,操作2902、2904和2906中的一个)的输出控制值发送,所述输出控制值使复用器2910配置网络数据流端点电路中的连接以从(一个或多个)队列中移除数据,例如,消费数据。作为示例,参见本文中关于使数据(例如,令牌)被移除的讨论。图29中的“PE状态”可以是来自PE的控制数据,例如,队列的空指示符和满指示符(例如,反压值和/或网络信用)。在一个实施例中,PE状态可以包括用于例如本文中的图19中的所有缓冲器和/或数据路径的空或满比特。图29图示了针对本文中的实施例的一般化调度,例如,其中参考图25-28讨论针对实施例的专门调度。
在一个实施例中,(例如,与调度一样)出队的选择通过操作及其动态行为来确定,例如,以在执行之后使操作出队。在一个实施例中,电路将使用操作数选择比特来使数据(例如,输入、输出和/或控制数据)出队。
图30图示了根据本公开的实施例的网络数据流端点电路3000。与图19相比较,网络数据流端点电路3000已将配置和控制分割成两个单独的调度器。在一个实施例中,出口调度器3028A将对将进入(例如,从耦合到数据流端点电路3000的电路交换通信网络)数据流端点电路3000的数据上的操作进行调度(例如,在变元队列3002(例如,如在图19中一样的空间阵列入口缓冲器1902)处),并且输出(例如,从耦合到数据流端点电路3000的分组交换通信网络)数据流端点电路3000(例如,在网络出口缓冲器3022(例如,如在图19中一样的网络出口缓冲器1922)处)。在一个实施例中,入口调度器3028B将对将进入(例如,从耦合到数据流端点电路3000的分组交换通信网络)数据流端点电路3000的数据上的操作进行调度(例如,在网络入口缓冲器3024(例如,如在图19中一样的网络入口缓冲器2924)处),并且输出(例如,从耦合到数据流端点电路3000的电路交换通信网络)数据流端点电路3000(例如,在输出缓冲器3008(例如,如在图19中一样的空间阵列出口缓冲器2908)处)。调度器3028A和/或调度器3028B可以包括电路3000的(例如,操作)状态作为输入,例如,输入(例如,缓冲器3002A、3002)的满度水平、输出(例如,缓冲器3008)的满度水平、值(例如,3002A中的值)等。调度器3028B可以包括信用返回电路,例如,以表示信用例如在电路3000的网络入口缓冲器3024中接收之后被返回给发送器。
网络3014可以是例如如本文中所讨论的电路交换网络。附加地或可替换地,还可以利用分组交换网络(例如,如本文中所讨论的),例如,耦合到网络出口缓冲器3022、网络入口缓冲器3024或本文中的其他组件。变元队列3002可以包括控制缓冲器3002A,例如,以指示相应的输入队列(例如,缓冲器)何时包括(新)数据项,例如,作为单个比特。现在转向图31-33,在一个实施例中,这些累积地示出了用于创建分布式拾取的配置。
图31图示了根据本公开的实施例的在执行拾取操作的同时接收输入零(0)的网络数据流端点电路3100,例如,如上面参考图18所讨论的。在一个实施例中,出口配置3126A利用将向不同的网络数据流端点电路(例如,图33中的电路3300)发送数据的拾取操作的一部分来加载(例如,在配置步骤期间)。在一个实施例中,出口调度器3128A将监视变元队列3102(例如,数据队列)以得到输入数据(例如,来自处理元件)。根据所描绘的数据格式的实施例,“发送”(例如,用于其的二进制值)指示数据将根据字段X、Y被发送,其中X是指示特定目标网络数据流端点电路的值(例如,0是图33中的网络数据流端点电路3300)并且Y是指示值将被存储在哪一个网络入口缓冲器(例如,缓冲器3324)位置上的值。在一个实施例中,Y是指示多通道(例如,分组交换)网络的特定通道的值(例如,0是图33中的网络数据流端点电路3300的通道0和/或缓冲器元件0)。当输入数据到达时,它然后将由网络数据流端点电路3100(例如,从网络出口缓冲器3122)发送到不同的网络数据流端点电路(例如,图33中的网络数据流端点电路3300)。
图32图示了根据本公开的实施例的在执行拾取操作的同时接收输入一(1)的网络数据流端点电路3200,例如,如上面参考图18所讨论的。在一个实施例中,出口配置3226A利用将向不同的网络数据流端点电路(例如,图33中的电路3300)发送数据的拾取操作的一部分来加载(例如,在配置步骤期间)。在一个实施例中,出口调度器3228A将监视变元队列3220(例如,数据队列3202B)以得到输入数据(例如,来自处理元件)。根据所描绘的数据格式的实施例,“发送”(例如,用于其的二进制值)指示数据将根据字段X、Y被发送,其中X是指示特定目标网络数据流端点电路的值(例如,0是图33中的网络数据流端点电路3300)并且Y是指示值将被存储在哪一个网络入口缓冲器(例如,缓冲器3324)位置上的值。在一个实施例中,Y是指示多通道(例如,分组交换)网络的特定通道的值(例如,1是图33中的网络数据流端点电路3300的通道1和/或缓冲器元件1)。当输入数据到达时,它然后将由网络数据流端点电路3200(例如,从网络出口缓冲器3122)发送到不同的网络数据流端点电路(例如,图33中的网络数据流端点电路3300)。
图33图示了根据本公开的实施例的在执行拾取操作的同时输出所选输入的网络数据流端点电路3300,例如,如上面参考图18所讨论的。在一个实施例中,其他网络数据流端点电路(例如,电路3100和电路3200)将向电路3300的网络入口缓冲器3324发送其输入数据。在一个实施例中,入口配置3326B利用例如根据控制值来拾取发送到网络数据流端点电路3300的数据的拾取操作的一部分来加载(例如,在配置步骤期间)。在一个实施例中,将在入口控制3332(例如,缓冲器)中接收控制值。在一个实施例中,入口调度器3228A将监视控制值和输入值的接收(例如,在网络入口缓冲器3324中)。例如,如果控制值说从网络入口缓冲器3324的缓冲器元件A(例如,在此示例中为0或1)(例如,从通道A)拾取,则存储在该缓冲器元件A中的值然后作为由电路3300进行的操作的结果被输出,例如,进入到输出缓冲器3308中,例如,当输出缓冲器具有存储空间(例如,如通过反压值所指示的)时。在一个实施例中,当出口缓冲器具有令牌(例如,输入数据和控制数据)并且接收器断言它具有缓冲器(例如,指示储存器可用,但是资源的其他指派是可能的,此示例只是说明性的)时,电路3300的输出数据被发出。
图34图示了根据本公开的实施例的流程图3400。描绘的流程3400包括:提供处理元件3402的空间阵列;利用分组交换通信网络来根据数据流图3404在处理元件之间的空间阵列内路由数据;利用处理元件3406来执行数据流图的第一数据流操作;以及利用分组交换通信网络3408的多个网络数据流端点电路来执行数据流图的第二数据流操作。
2.7 浮点支持
某些HPC应用通过它们对显著的浮点带宽的需要来表征。为了满足此需要,例如,取决于块片配置,可以给CSA的实施例提供多个(例如,各自在128与256之间)浮点加法和乘法PE。CSA可以提供几个其他扩展精度模式,例如,以简化数学库实施方式。CSA浮点PE可以支持单精度和双精度两者,但是更低精度PE可以支持机器学习工作负载。CSA可以提供比处理器核心高一个数量级的浮点性能。在一个实施例中,除了增加浮点带宽之外,为了给所有的浮点单元供电,在浮点运算中消耗的能量被减少。例如,为了减少能量,CSA可以选择性地选通浮点乘法器阵列的低位比特。在检查浮点算术的行为时,乘法数组的低位比特常常可能不影响最终舍入乘积。图35图示了根据本公开的实施例的分割成三个区域(结果区域、三个潜在进位区域(3502、3504、3506)和选通区域)的浮点乘法器3500。在某些实施例中,进位区域很可能影响结果区域并且选通区域不太可能影响结果区域。考虑g个比特的选通区域,最大进位(carry)可以是:
。
给定此最大进位,如果进位区域的结果小于2c-g,其中进位区域是c个比特宽,则可以忽略选通区域,因为它不影响结果区域。增加g意味着更可能将需要选通区域,然而增加c意味着在随机假定下,选通区域将不使用并且可以被禁用以避免能量消耗。在CSA浮点乘法PE的实施例中,利用了两级管线方法,其中首先进位区域被确定,然后在它被发现影响结果的情况下选通区域被确定。如果关于乘法的上下文的更多信息已知,则CSA更积极地调谐选通区域的大小。在FMA中,乘法结果可以被加到累加器,所述累加器常常比被乘数中的任何一个大得多。在这种情况下,可以在乘法之前观察加数指数并且CSDA可以相应地调整选通区域。CSA的一个实施例包括界定计算的最小结果的上下文值被提供给相关乘法器以便选择最小能量选通配置的方案。
2.8 运行时服务
在某些实施例中,CSA包括异构和分布式结构,并且因此,运行时服务实施方式将以并行和分布方式容纳若干种类的PE。尽管CSA中的运行时服务可能是关键的,然而它们相对于用户级计算可以是不频繁的。某些实施方式因此集中于在硬件资源上叠加服务。为了满足这些目标,可以将CSA运行时服务转换为层次,例如,其中每个层对应于CSA网络。在块片级别下,单个面向外部控制器可以接受服务命令或者向具有CSA块片的关联核心发送服务命令。块片级控制器可以用来例如使用ACI网络来协调RAF处的区域控制器。进而,区域控制器可以协调某些夹层网络站点处的本地控制器(例如,网络数据流端点电路)。在最低级别下,服务特定微协议可以例如在通过夹层控制器控制的特殊模式期间在本地网络上执行。微协议可以许可每个PE(例如,按类型的PE类)根据它自己的需要来与运行时服务交互。并行性因此在此分层组织中是隐含的,并且在最低级别下的操作可以同时地发生。例如,取决于配置大小及其在存储器层次中的位置,此并行性可以使得能够在数百纳秒至几微秒之间配置CSA块片。CSA的实施例因此利用数据流图的性质来改进每个运行时服务的实施方式。一个关键观察结果是运行时服务可能仅需要保存数据流图的合法逻辑视图,例如,可通过数据流操作符执行的某种排序来产生的状态。服务一般地可能不需要保证数据流图的时间视图,例如,在特定时间点的CSA中的数据流图的状态。这可以许可CSA以分布式、管线和并行方式执行大多数运行时服务,例如,假设服务被编排以保存数据流图的逻辑视图。本地配置微协议可以是叠加在本地网络上的基于分组的协议。配置目标可以被组织到配置链中,例如,所述配置链被固定在微架构中。结构(例如,PE)目标可以被一次配置一个,例如,使用每目标的单个额外寄存器来实现分布式协调。为了开始配置,控制器可以驱动带外值,所述带外值将其邻域中的所有结构目标置于未配置的暂停状态中并且将本地网络中的复用器摆动到预定义形态。随着结构(例如,PE)目标被配置,即它们完全接收到它们的配置分组,它们可以设置它们的配置微协议寄存器,通知紧接在前的目标(例如,PE)它可以继续使用后续分组来配置。对配置分组的大小没有限制,并且分组可以具有动态可变长度。例如,配置常数操作数的PE可以具有被加长以包括常数字段(例如,图3B-3C中的X和Y)的配置分组。图36图示了根据本公开的实施例的具有多个处理元件(例如,PE 3602、3604、3606、3608)的加速器3600的进行中配置。一旦被配置,PE就可以执行经受数据流约束。然而,涉及未配置的PE的通道可以由微架构禁用,例如,阻止任何未定义操作发生。这些性质允许CSA的实施例以分布式方式初始化和执行,而无论如何无需集中式控制。从未配置状态起,配置可以完全并行地发生,例如,可能和200纳秒一样少。然而,由于CSA的实施例的分布式初始化,PE可以变得活跃,例如在整个架构被配置之前很久向存储器发送请求。提取可以以与配置几乎相同的方式进行。本地网络可以遵照一次从一个目标中提取数据,并且提取用于实现分布式协调的状态比特。CSA可以将提取编排为非破坏性的,即,在提取完成时每个可提取目标已返回到其开始状态。在此实施方式中,目标中的所有状态可以以类似扫描的方式传播到束缚于本地网络的出口寄存器。但是可以通过在寄存器转移级(RTL)处引入新路径或者使用现有线路来以更低开销提供相同的功能性来实现就地提取。像配置一样,分层提取被并行地实现。
图37图示了根据本公开的实施例的进行中管线提取的快照3700。在提取的一些用例(诸如检查点)中,只要结构吞吐量被维持等待时间就可能不是问题。在这些情况下,可以以管线方式编排提取。图37中所示的这种布置许可大部分结构继续执行,然而窄区域为了提取而被禁用。可以协调和组成配置和提取以实现管线上下文切换。异常可以在性质上与配置和提取不同的原因在于,不是在指定的时间发生,而是它们在运行时期间的任何时间点出现在结构中的任何对方。因此,在一个实施例中,异常微协议可以未被叠加在被用户程序在运行时占用的本地网络上,并且利用它自己的网络。然而,就性质而言,异常对等待时间和带宽而言是稀少的且不敏感的。因此,CSA的某些实施例利用分组交换网络来将异常承载到本地夹层站点,例如,在它们被向服务层次上转发(例如,如在图52中一样)的地方。本地异常网络中的分组可能极其小。在许多情况下,仅两个至八个比特的PE标识(ID)足以作为完整分组,例如,因为CSA可以随着分组遍历异常服务层次而创建唯一异常标识符。这种方案可能是所希望的,因为它也减少在每个PE处产生异常的面积开销。
3. 编译
将用高级语言编写的程序编译到CSA上的能力对于行业采用来说可能是必要的。此部分给出用于CSA的实施例的编译策略的高级概述。首先是针对图示了理想的生产质量工具链的期望性质的CSA软件框架的提议。接下来,对原型编译器框架进行讨论。然后对“控制到数据流转换”进行讨论,例如,以将普通顺序控制流代码转换成CSA数据流汇编代码。
3.1示例生产框架
图38图示了根据本公开的实施例的用于加速器的编译工具链3800。此工具链将高级语言(诸如C、C++和Fortran)编译成要加速的特定区域的主机代码(LLVM)中间表示(IR)的组合。此编译工具链的CSA特定部分取LLVM IR作为其输入,优化并将此IR编译成CSA汇编,例如,为了性能在等待时间不敏感通道上添加适当的缓冲。它然后在硬件结构上放置并路由CSA汇编,并且配置PE和网络以用于执行。在一个实施例中,工具链支持CSA特定编译作为即时(JIT),结合来自实际执行的潜在运行时反馈。框架的关键设计特性之一是用于CSA的(LLVM)IR的编译,而不是使用更高级语言作为输入。虽然用专门为CSA设计的高级编程语言编写的程序可能实现最大性能和/或能量效率,但是由于转换现有代码库的困难,新的高级语言或编程框架的采纳可能在实践中慢且受限制。使用(LLVM)IR作为输入使得各式各样的现有程序能够可能在CSA上执行,例如,而无需创建新语言或者显著地修改想要在CSA上运行的新语言的前端。
3.2原型编译器
图39图示了根据本公开的实施例的用于加速器的编译器3900。编译器3900最初集中于通过(例如,Clang)前端对C和C++的提前编译。为了编译(LLVM)IR,编译器利用三个主要阶段在LLVM内实现CSA后端目标。首先,CSA后端将LLVM IR降低成用于顺序单元的目标特定机器指令,所述顺序单元实现与类似传统RISC的控制流架构(例如,具有分支和程序计数器)组合的大多数CSA操作。工具链中的顺序单元可以用作针对编译器和应用开发者两者的有用帮助,因为它使得能实现程序从控制流(CF)到数据流(DF)的增量变换,例如,一次将一段代码从控制流转换为数据流程并且验证程序正确性。顺序单元也可以提供用于处理在空间数组中不适合的代码的模型。接下来,编译器将这些控制流指令转换成用于CSA的数据流操作符(例如,代码)。稍后在部分3.3中对此阶段进行描述。然后,CSA后端可以在数据流指令上运行它自己的优化遍数。最后,编译器可以以CSA汇编格式转储指令。此汇编格式被视为后级工具的输入,所述后级工具在实际的CSA硬件上放置并路由数据流指令。
3.3对数据流转换的控制
可以在控制到数据流转换遍数或简称数据流转换遍数中实现编译器的关键部分。此遍数采用以控制流程形式表示的功能,例如,具有在虚拟寄存器上操作的顺序机器指令的控制流程图(CFG),并且将它转换成在概念上为通过等待时间不敏感通道(LIC)连接的数据流操作(指令)的图的数据流功能。此部分给出此遍数的高级描述,描述了在某些实施例中它在概念上如何处理存储器操作、分支和循环。
直线代码
图40A图示了根据本公开的实施例的顺序汇编代码4002。图40B图示了根据本公开的实施例的图40A的顺序汇编代码4002的数据流汇编代码4004。图40C图示了根据本公开的实施例的用于加速器的图40B的数据流汇编代码4004的数据流图4006。
首先,考虑将直线顺序代码转换为数据流的简单情况。数据流转换遍数可以将顺序代码(诸如图40A中所示的代码)的基本块转换成CSA汇编代码,如图40B中所示。在概念上,图40B中的CSA汇编表示图40C中所示的数据流图。在此示例中,每个顺序指令被转换成匹配CSA汇编。.lic语句(例如,用于数据)声明对应于顺序代码中的虚拟寄存器(例如,Rdata)的等待时间不敏感通道。在实践中,数据流转换遍数的输入可以在编号的虚拟寄存器中。然而,为了清楚,此部分使用描述性寄存器名称。注意的是,在此实施例中在CSA架构支持加载和存储操作,从而与仅支持纯数据流的架构相比允许更多的程序运行。因为输入到编译器的顺序代码采用SSA(单静态指派)形式,所以对于简单的基本块来说,控制到数据流遍数可以将每个虚拟寄存器定义转换成等待时间不敏感通道上的单个值的产生。SSA形式允许虚拟寄存器的单个定义的多次使用,诸如在Rdata2中。为了支持此模型,CSA汇编代码支持相同LIC(例如,data2)的多次使用,同时模拟器隐式地创建LIC的必要副本。顺序代码与数据流代码之间的一个关键差异是在对存储器操作的处理中。图40A中的代码在概念上是串行的,这意味着addr3的load32 (ld32)应该似乎在addr的st32之后发生,以防addr和addr3地址重叠。
分支
为了将具有多个基本块和条件的程序转换为数据流,编译器生成特殊数据流操作符来替换分支。更具体地,编译器使用开关操作符来在原始CFG中的基本块的末尾引导传出数据,并且使用拾取操作符来在基本块的开头从适当的传入通道中选择值。作为具体示例,考虑基于若干输入a、i、x和n有条件地计算y的值的图41A-41C中的代码和对应数据流图。在计算分支条件测试之后,数据流代码使用开关操作符(例如,参见图3B-3C)来在测试为0的情况下将通道x中的值引导到通道xF,或者在测试为1的情况下引导到通道xT。类似地,拾取操作符(例如,参见图3B-3C)用于在测试为0的情况下将通道yF发送到y,或者在测试为1的情况下将通道yT发送到y。在此示例中,事实证明即使在条件的真分支中仅使用a的值,CSA也将包括开关操作符,其在测试为1时将它引导到通道aT,并且在测试为0时消费(吃)该值。此后者情况通过将开关的假输出设置为%ign来表达。简单地将通道a直接地连接到真路径可能不正确,因为在执行实际上取假路径的情况下,“a”的这个值将留在图中,从而导致a的不正确值用于功能的下一次执行。此示例突出了控制等价的性质,这是正确数据流转换的实施例中的关键性质。
控制等价:考虑具有两个基本块A和B的单入口单出口控制流程图G。如果通过G的所有完整控制流程路径访问A和B相同的次数,则A和B是控制等价的。
LIC替换:在控制流程图G中,假设基本块A中的操作定义虚拟寄存器x,并且基本块B中的操作使用x。然后只有当A和B是控制等价的时候,正确的控制到数据流变换才可用等待时间不敏感通道替换x。控制等价关系将CFG的基本块分割成强控制相关区域。图41A图示了根据本公开的实施例的C源代码4102。图41B图示了根据本公开的实施例的图41A的C源代码4102的数据流汇编代码4104。图41C图示了根据本公开的实施例的用于加速器的图41B的数据流汇编代码4104的数据流图4106。在图41A-41C中的示例中,在条件之前和之后的基本块彼此是控制等价的,但是真路径和假路径中的基本块各自在它们自己的控制相关区域中。用于将CFG转换为数据流的一个正确算法是使编译器插入(1)开关以补偿在不是控制等价的基本块之间流动的任何值的执行频率方面的失配,并且(2)在基本块的开头拾取以从基本块的任何传入值中正确地选择。为这些拾取和开关生成适当的控制值可以是数据流转换的关键部分。
循环
数据流转换中的另一类重要的CFG是用于单入口单出口循环的CFG,这是在(LLVM)IR中生成的常见形式的循环。除了从循环的末尾回到循环头部块的单回边之外,这些循环可能是几乎非循环的。数据流转换遍数可以在分支方面使用相同的高级策略来转换循环,例如,它在循环的末尾插入开关以将值从循环中(在循环出口外或在到循环的开头的回边附近)导出值,并且在循环的开头插入拾取以在进入循环的初始值与通过回边进来的值之间选择。图42A图示了根据本公开的实施例的C源代码4202。图42B图示了根据本公开的实施例的图42A的C源代码4202的数据流汇编代码4204。图42C图示了根据本公开的实施例的用于加速器的图42B的数据流汇编代码4204的数据流图4206。图42A-42C示出了把循环归纳变量i的值以及所对应的数据流图加起来的示例do-while循环的C和CSA汇编代码。对于在概念上围绕着循环(i和总和)的每个变量,此图有控制这些值的流动的对应拾取/开关对。注意的是,即使n是循环不变的,此示例也使用拾取/开关对来在循环附近使n的值循环。n的这种重复使得能够将n的虚拟寄存器转换成LIC,因为它和n在循环外部的概念定义与n在循环内部的一个或多个使用之间的执行频率匹配。一般而言,为了正确的数据流转换,当寄存器被转换成LIC时住进循环中的寄存器将针对循环体内部的每次迭代被重复一次。类似地,在循环内被更新并且从循环中移出的寄存器将被消费,例如,同时从循环中发送单个最终值。循环将折痕(wrinkle)引入到数据流转换过程中,即针对在循环顶部的拾取和循环的底部的开关的控制偏移。例如,如果图41A中的循环执行三次迭代并退出,则对拾取器的控制应该是0、1、1,然而对转换开关的控制应该是1、1、0。这种控制是通过在函数于周期0(其在汇编中通过指令.value 0和.avail 0来指定)开始时按初始额外0启动拾取器通道并且然后将输出转换开关复制到拾取器中来实现的。注意的是,转换开关中的最后0使最终0恢复到拾取器中,从而确保数据流图的最终状态与其初始状态匹配。
图43A图示了根据本公开的实施例的流程图4300。描绘的流程4300包括:利用处理器的核心的解码器将指令解码成解码的指令4302;利用处理器的核心的执行单元执行经解码的指令以执行第一操作4304;接收包括多个节点的数据流图的输入4306;将数据流图叠加到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符4308;以及通过到达多个处理元件的数据流操作符中的每一个的相应的传入操作数集来与互连网络和多个处理元件一起执行数据流图的第二操作4310。
图43B图示了根据本公开的实施例的流程图4301。描绘的流程4301包括:接收包括多个节点的数据流图的输入4303;以及将数据流图叠加到处理器的多个处理元件、多个处理元件之间的数据路径网络和多个处理元件之间的流控制路径网络中,其中每个节点被表示为多个处理元件中的数据流操作符4305。
在一个实施例中,核心将命令写入到存储器队列中并且CSA(例如,多个处理元件)监视存储器队列并且在命令被读取时开始执行。在一个实施例中,核心执行程序的第一部分并且CSA(例如,多个处理元件)执行程序的第二部分。在一个实施例中,核心在CSA正在执行其操作的同时做其他工作。
4. CSA优势
在某些实施例中,CSA架构和微架构提供优于路线图处理器架构和FPGA的极深的能量、性能和可用性优势。在此部分中,这些架构被与CSA的实施例相比较并且突出CSA在相对于每个使并行数据流图加速时的优越性。
4.1处理器
图44图示了根据本公开的实施例的吞吐量对每操作能量图4400。如图44中所示,小核心一般地比大核心更高能效,并且,在一些工作负载中,可以通过更高核心计数将此优势转化为绝对性能。CSA微架构遵循这些观察结果到其结论并且去除(例如,大多数)与冯诺依曼架构相关联的耗能多的控制结构,包括大多数的指令侧微架构。通过去除这些开销并且实现简单的单操作PE,CSA的实施例获得密集的高效空间阵列。与通常相当串行的小核心不同,CSA可以例如经由电路交换本地网络将其PE结成在一起,以形成显式并行的聚合数据流图。结果是不仅在并行应用中而且在串行应用中也有性能。与可以在面积和能量方面为性能付出高昂代价的核心不同,CSA在其本机执行模式中已经是并行的。在某些实施例中,CSA既不需要推测来提高性能,它也不需要从顺序程序表示中重复地重新提取并行性,从而避免冯诺依曼架构中的两个主要能量税。CSA的实施例中的大多数结构是分布式的、小的且高能效的,与在核心中找到的集中式、庞大的耗能多的结构相反。考虑CSA中的寄存器的情况:每个PE可以具有几个(例如,10个或更少)存储寄存器。单独来看,这些寄存器可以比传统寄存器堆更高效。总的来说,这些寄存器可以提供大结构内寄存器堆的效果。结果,CSA的实施例避免由经典架构引发的大多数堆栈溢出和填充,同时每状态访问使用少得多的能量。当然,应用可以仍然访问存储器。在CSA的实施例中,存储器访问请求和响应在架构上解耦,使得工作负载能够每单位面积和能量保持更多未完成的存储器访问。这个性质为受高速缓存限制的工作负载产生基本上更高的性能并且减少在受存储器限制的工作负载中使主存储器饱和所需的面积和能量。CSA的实施例暴露了能量效率的非冯诺依曼架构独有的新形式。在(例如,大多数)PE处执行单个操作(例如,指令)的一个结果是操作数熵降低。在增量操作的情况下,每次执行可以导致少量的电路级切换和很少的能量消耗,在部分5.2中详细地检查的情况。相比之下,冯诺依曼架构是复用的,导致大量的比特转换。CSA的实施例的异步样式也使得能实现微架构优化,诸如在部分2.7中描述的难以在严格调度的核心管线中实现的浮点优化。因为PE可以是相对简单的并且它们在特定数据流图中的行为是静态已知的,所以与在更粗糙的架构中相比,可以更有效地应用时钟门控和功率门控技术。CSA PE和网络的实施例的图执行样式、小尺寸和可塑性一起使得能够表达许多种类的并行性:指令、数据、管线、矢量、存储器、线程和任务并行性可以全部被实现。例如,在CSA的实施例中,一个应用可以使用算术单元来提供高度的地址带宽,然而另一应用可以将那些相同的单元用于计算。在许多情况下,可以组合多种并行性以获得甚至更高的性能。许多的关键HPC操作可以既被复制又被管线化,从而导致数量级性能增益。相比之下,冯诺依曼样式核心通常针对由架构师精心选取的一种样式的并行性进行优化,导致不能捕获所有重要的应用内核。正如CSA的实施例暴露并方便许多形式的并行性一样,它不强制特定形式的并行性,或者更糟糕的是,为了从CSA中受益特定子例行程序存在于应用中。例如,即使当在没有修改的情况下编译时,许多应用(包括单流应用)也可以从CSA的实施例获得性能和能量益处两者。这扭转了需要大量程序设计员努力以在单流应用中获得实质上性能增益的长期趋势。实际上,在一些应用中,CSA的实施例从功能上等效的但更少的“现代”代码获得与从它们复杂的当代同辈表亲(cousin)相比更多的性能,所述同辈表亲已被折磨为以矢量指令为目标。
4.2 CSA实施例和FGPA的比较
作为CSA的实施例的基本架构的数据流操作符的选择将那些CSA与FGPA区分开,并且特别地CSA是用于由传统编程语言产生的HPC数据流图的优越加速器。数据流操作符是基本上异步的。这使得CSA的实施例不仅能够在微架构中具有大实现自由度,而且还使得它们能够简单地且简洁地适应抽象架构概念。例如,CSA的实施例自然地适应具有简单加载-存储接口的基本上异步的许多存储器微架构。一个人仅需要检查FPGA DRAM控制器以了解复杂度的差异。CSA的实施例也利用异步来像配置和提取一样提供更快且更全功能的运行时服务,这被认为比FPGA快4到6个数量级。通过使架构接口变窄,CSA的实施例在微架构级别下提供对大多数定时路径的控制。这允许CSA的实施例以比在FPGA中提供的更一般控制机制高得多的频率操作。类似地,时钟和复位(其对FPGA而言可能是架构上基本的)在CSA中是微架构的,例如,消除将它们作为可编程实体来支持的需要。数据流操作符对于大部分来说可以是粗粒度的。通过仅处理粗操作符,CSA的实施例改进结构的密度及其能耗两者:CSA直接地执行操作,而不是用查找表模拟它们。粗糙的第二结果是布局和布线问题的简化。在CSA的实施例中,CSA数据流图比FPGA网络表小许多数量级并且布局和布线时间相应地减少。例如,对于由传统编程语言产生的数据流图来说,CSA和FPGA的实施例之间的显著差异使CSA作为加速器变得更优越。
5.评估
CSA是相对于路线图处理器具有提供许多的性能和能量优势的潜力的新颖计算机架构。考虑计算单步幅地址以便跨越阵列漫游的情况。这种情况在HPC应用中可能是重要的,例如,HPC应用在计算地址偏移时花费大量整数努力。在地址计算以及特别是步幅地址计算中,一个变元是恒定的并且另一仅每计算略微变化。因此,在大多数情况下每周期仅少量比特切换。实际上,可以使用与对部分2.7中描述的浮点进位比特的限制类似的推导来示出,输入的不到两个比特平均对于步幅核算来说每计算切换,从而在随机切换分布上将能量减少50%。如果使用时分复用方法,则此能量节约的大部分可能丢失。在一个实施例中,CSA在核心上实现约3倍能量效率,同时递送8倍性能增益。通过CSA的实施例实现的并行性增益可以导致程序运行时间减少,从而产生泄漏能量的成比例的实质减少。在PE级别下,CSA的实施例是极其高能效的。CSA的第二重要问题是CSA是否在块片级别下消耗合理量的能量。因为CSA的实施例能够在每一周期在结构中执行每一浮点PE,所以它用作用于能量和功率消耗的合理上限,例如,使得大多数能量进入浮点乘法和加法。
6.另外的CSA细节
此部分讨论配置和异常处理的另外的细节。
6.1用于配置CSA的微架构
此部分公开了如何配置CSA(例如,结构)、如何快速地实现此配置并且如何使配置的资源开销最小化的示例。快速地配置结构可能在使更大算法的小部分加速时并且因此在扩大CSA的适用性时具有卓越重要性。该部分还公开了允许CSA的实施例被编程有不同长度的配置的特征。
CSA(例如,结构)的实施例可以不同于传统核心的原因在于它们利用配置步骤,其中结构的(例如,大)部分在程序执行之前被加载有程序配置。静态配置的优势可以是在运行时在配置上花费非常少的能量,例如,与几乎每周期花费能量取出配置信息(指令)的顺序核心相反。配置的先前的缺点是它是具有潜在大的等待时间的粗粒度步骤,这由于上下文切换的成本而对可在结构中加速的程序的大小设置底限。本公开描述了用于以分布式方式快速地配置空间阵列的可伸缩微架构,例如,其避免了先前的缺点。
如上面所讨论的,CSA可以包括通过PE间网络连接的轻量级处理元件。被视为控制数据流图的程序然后通过配置可配置结构元件(CFE)(例如,PE和互连(结构)网络)被映射到架构上。一般地,PE可以被配置成数据流操作符,并且一旦所有输入操作数到达PE,就发生某个操作,并且结果被转发给另一或多个PE以供消费或输出。这些PE可以通过专用虚拟电路来通信,该专用虚拟电路通过静态地配置电路交换通信网络而形成。这些虚拟电路可以是流控制的且完全反压的,例如,使得如果源没有数据或者目的地是满的则PE将停止。在运行时,数据可以流经实现所映射的算法的PE。例如,数据可以从存储器流入,通过结构,然后返回到存储器。这种空间架构可以相对于传统多核心处理器实现显著的性能效率:形式为PE的计算可以比更大核心更简单且更多并且通信可以是直接的,与存储器系统的扩展相反。
CSA的实施例可以不利用(例如,软件控制的)分组交换,例如,需要大量软件协助来实现的分组交换,这使配置变慢。CSA的实施例包括网络中的带外评估(例如,仅2-3个比特,取决于所支持的特征集)和固定配置拓扑以避免对于大量软件支持的需要。
CSA的实施例与FPGA中使用的方法之间的一个关键差异是CSA方法可以使用宽数据字,是分布式的,并且包括用于直接地从存储器取出程序数据的机制。CSA的实施例可以为了面积效率不利用JTAG样式单比特通信,例如,因为可能需要几毫秒来完全配置大FPGA结构。
CSA的实施例包括分布式配置协议和用于支持此协议的微架构。最初,配置状态可能驻留在存储器中。多个(例如,分布式)本地配置控制器(框)(LCC)可以例如使用一小组控制值和结构提供的网络的组合来将整个程序的各部分流式传输到空间结构的其本地区域中。可以在每个CFE处使用状态元素来形成配置链,例如,允许个别CFE在没有全局寻址的情况下自我编程。
CSA的实施例包括用于形成配置链的特定硬件支持,例如,不是以增加配置时间为代价动态地建立这些链的软件。CSA的实施例不是纯粹分组交换的并且确实包括额外带外控制线(例如,不通过需要额外周期的数据路径来发送控制以选通此信息并且使此信息重新序列化)。CSA的实施例通过固定配置排序并且通过提供显式带外控制(例如,按至少两倍)来减小配置等待时间,同时不显著地增加网络复杂度。
CSA的实施例不将串行机制用于配置,其中数据使用类似JTAG的协议被逐比特流式传输到结构中。CSA的实施例利用粗粒度结构方法。在某些实施例中,将几条控制线或状态元素添加到面向64或32位CSA结构相对于将那些相同的控制机制添加到4或6位结构具有更低的成本。
图45图示了根据本公开的实施例的包括处理元件(PE)阵列和本地配置控制器(4502、4506)的加速器块片4500。每个PE、每个网络控制器(例如,网络数据流端点电路)和每个开关可以是例如通过CSA架构的实施例来配置(例如,编程)的可配置结构元件(CFE)。
CSA的实施例包括提供异构空间结构的高效、分布式、低等待时间配置的硬件。可以根据四种技术来实现这个。首先,例如,如在图45-47中一样,硬件实体本地配置控制器(LCC)被利用。LCC可以从(例如,虚拟)存储器取出配置信息的流。第二,可以包括配置数据路径,例如,其和PE结构的本机宽度一样宽并且其可以被叠加在PE结构之上。第三,可以将新控制值接收到编排配置过程的PE结构中。第四,状态元素可以位于(例如,在寄存器中)每个可配置端点处,所述每个可配置端点跟踪相邻CFE的状态,从而允许每个CFE在没有额外控制值的情况下不含糊地自我配置。这四种微架构特征可以允许CSA配置其CFE的链。为了获得低配置等待时间,可以通过构建许多LCC和CFE链来分割配置。在配置时间,这些可以独立地操作以并行地加载结构,例如,大幅地减少等待时间。作为这些组合的结果,可以(例如,在几百纳秒中)完全配置使用CSA架构的实施例所配置的结构。在下文中,公开了CSA配置网络的实施例的各种组件的详细操作。
图46A-46C图示了根据本公开的实施例的配置数据路径网络的本地配置控制器4602。描绘的网络包括多个复用器(例如,复用器4606、4608、4610),其可以被(例如,经由其相应的控制值)配置成将一个或多个数据路径(例如,来自PE)连接在一起。图46A图示了为某个先前的操作或程序而配置(例如,设置)的网络4600(例如,结构)。图46B图示了选通配置值的本地配置控制器4602(例如,包括用于发送和/或接收值的网络接口电路4604)并且本地网络被设置为允许LCC向所有可配置结构元件(CFE)(例如,复用器)发送配置数据的默认配置(例如,如所描绘的)。图46C图示了LCC跨越网络选通配置信息,从而按照预定(例如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时它们可以立即开始操作。在另一实施例中,CFE等待开始操作直到结构已被完全配置(例如,如由配置终端器(例如,图48中的配置终端器4804和配置终端器4808)针对每个本地配置控制器所评估的那样)为止。在一个实施例中,LCC通过发送特殊消息或者驱动值来获得对网络结构的控制。它然后将配置数据选通(例如,在许多周期时期内)给结构中的CFE。在这些图中,复用器网络是某些图(例如,图6)中所示的“开关”的类似物。
本地配置控制器
图47图示了根据本公开的实施例的(例如,本地)配置控制器4702。本地配置控制器(LCC)可以是硬件实体,其负责加载结构程序的本地部分(例如,在块片的子集在或以其他方式),解释这些程序部分,然后通过在各种配置线上驱动适当的协议将这些程序部分加载到结构中。在这种能力下,LCC可能是专用顺序微控制器。
LCC操作可以在它接收到代码段的指针时开始。取决于LCB微架构,此指针(例如,存储在指针寄存器4706中)可以在网络上(例如,从CSA(结构)它本身内)或者通过对LCC的存储器系统访问而出现。当它接收到这种指针时,LCC可选地从结构的用于上下文存储的其部分中抽取相关状态,然后继续立即重配置它负责的结构的部分。由LCC加载的程序可以是用于结构的配置数据和用于LCC的控制命令的组合,例如,所述控制命令被轻编码。随着LLC在程序部分中流式传输,它可以将程序解释为命令流并且执行适当的编码动作来配置(例如,加载)结构。
在图45中示出了用于LCC的两个不同的微架构,例如,其中在CSA中利用一个或两个。第一将LCC 4502放置在存储器接口处。在这种情况下,LCC可以对存储器系统做出要加载数据的直接请求。在第二种情况下LCC 4506被放置在存储器网络上,其中它可以仅间接地对存储器做出请求。在两种情况下,LCB的逻辑操作不变。在一个实施例中,LCC例如通过一组(例如,OS可见的)控制状态寄存器被通知要加载的程序,所述控制状态寄存器将用于向个别LCC通知新程序指针等。
额外带外控制通道(例如,线)
在某些实施例中,配置依靠2-8个额外带外控制通道来像在下面所定义的那样改进配置速度。例如,配置控制器4702可以包括以下控制通道,例如,CFG_START控制通道4708、CFG_VALID控制通道4710和CFG_DONE控制通道4712,其中在下表2中对每个的示例进行讨论。
表2:控制通道
CFG_START | 在配置的开头被断言。设置每个CFE处的配置状态并且设置配置总线。 |
CFG_VALID | 表示配置总线上的值的有效性。 |
CFG_DONE | 可选。表示特定CFE的配置的完成。这允许配置在CFE不需要附加配置的情况下短路。 |
一般地,配置信息的处理可以被留给特定CFE的实施者。例如,可选功能CFE可以具有用于使用现有数据路径来设置寄存器的预防措施,然而固定功能CFE可能简单地设置配置寄存器。
由于当对一大组CFE进行编程时的长线延迟,CFG_VALID值可以被视为用于CFE组件的时钟/锁存使能。因为此值被用作时钟,所以在一个实施例中线路的占空比最多为50%。结果,配置吞吐量近似地减半。可选地,可以添加第二CFG_VALID值以使得能实现连续编程。
在一个实施例中,在独立耦合(例如,线)上严格地传送仅CFG_START,例如,CFG_VALID和CFG_DONE可以被叠加在其他网络耦合之上。
网络资源的重用
为了减少配置的开销,CSA的某些实施例利用现有网络基础设施来传送配置数据。LCC可以利用芯片级存储器层次和结构级通信网络来将数据从储存器移动到结构中。结果,在CSA的某些实施例中,配置基础设施对总体结构面积和功率增加不多于2%。
CSA的某些实施例中的网络资源的重用可以使网络对于配置机制具有某种硬件支持。当‘CFG_START’值被断言时,CSA的实施例的电路交换网络使LCC针对配置以特定方式设置它们的复用器。分组交换网络确实不需要扩展,但是LCC端点(例如,配置终端器)在分组交换网络中使用特定地址。网络重用是可选的,并且一些实施例可以发现专用配置总线是更方便的。
每CFE状态
每个CFE可以维护表示它是否已被配置的比特(参见例如图36)。此比特在当配置启动值被驱动时可以被取消断言,然后一旦特定CFE已被配置就被断言。在一种配置协议中,CFE被布置成形成链,同时CFE配置状态比特确定该链的拓扑结构。CFE可以读取紧邻CFE的配置状态比特。如果此相邻CFE被配置并且当前CFE未被配置,则CFE可以确定任何当前配置数据针对当前CFE。当‘CFG_DONE’值被断言时,CFE可以设置其配置比特,例如,使得上游CFE能够配置。作为配置过程的基本情况,可以在链的末尾包括断言它被配置的配置终端器(例如,图45中的用于LCC 4502的配置终端器4504或用于LCC 4506的配置终端器4508)。
在CFE内部,此比特可以用于驱动流控制就绪值。例如,当配置比特被取消断言时,网络控制值可以自动地被钳位到防止数据流动的值,然而,在PE内,将不对操作或其他动作进行调度。
处理高等待时间配置路径
LCC的一个实施例可以在长距离上驱动值,例如,通过许多复用器并且利用许多负载。因此,值可能难以在短时钟周期内到达遥远的CFE。在某些实施例中,配置值处于主(例如,CSA)时钟频率的某个分频(例如,分数)下以在配置时确保数字定时规程。时钟分频可以被用在带外评估协议中,而不需要对主时钟树进行任何修改。
在配置期间确保一致结构行为
因为某些配置方案是分布式的并且由于程序和存储器效果而具有非确定性定时,所以可以在不同的时间配置结构的不同的部分。结果,CSA的某些实施例提供用于防止配置的CFE和未配置的CFE之间的不一致操作的机制。一般地,一致性被视为CFE本身所需要的并且由CFE本身维护的性质,例如,使用内部CFE状态。例如,当CFE处于未配置状态时,它可以宣称其输入缓冲器满,并且其输出无效。当被配置时,这些值将被设置为缓冲器的真实状态。随着足够的结构由配置产生,这些技术可以许可它开始操作。这具有进一步减少上下文切换等待时间的效果,例如,如果长等待时间存储器请求被很早发出的话。
可变宽度配置
不同的CFE可以具有不同的配置字宽度。对于较小的CFE配置字,实施者可以通过跨越网络线公正地指派CFE配置加载来使等待时间平衡。为了使网络线上的加载平衡,一个选项是将配置比特指派给网络线的不同部分以限制任何一条线上的净延迟。可以通过使用序列化/反序列化技术来处理宽数据字。可以在每结构基础上进行这些决定以优化特定CSA(例如,结构)的行为。网络控制器(例如,网络控制器4510和网络控制器4512中的一个或多个)可以与CSA(例如,结构)的每个域(例如,子集)进行通信,例如,以向一个或多个LCC发送配置信息。网络控制器可以是通信网络的一部分(例如,与电路交换网络分开)。网络控制器可以包括网络数据流端点电路。
6.2用于CSA的低等待时间并且用于为CSA及时地取出配置数据的微架构
CSA的实施例可以是使用户应用加速的高能效且高性能手段。当考虑程序(例如,其数据流图)是否可以被加速器成功地加速时,可以考虑用于配置加速器的时间和用于运行程序的时间两者。如果运行时间短,则配置时间可以在确定成功加速时起到大作用。因此,为了使可加速程序的域最大化,在一些实施例中配置时间变得尽可能短。可以在CSA中包括一个或多个配置高速缓存,例如,使得高带宽、低等待时间存储使得能实现快速重配置。接下来是配置高速缓存的若干实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可选地访问配置高速缓存以获得新配置信息。配置高速缓存可以作为传统基于地址的高速缓存或者在OS管理模式下操作,在所述OS管理模式下配置被存储在本地地址空间中并且通过参考该地址空间来寻址。如果配置状态位于高速缓存中,则在某些实施例中将不对后备暂存器做出请求。在某些实施例中,此配置高速缓存与存储器层次中的任何(例如,更低级)共享高速缓存分离。
图48图示了根据本公开的实施例的包括处理元件阵列、配置高速缓存(例如,4818或4820)和本地配置控制器(例如,4802或4806)的加速器块片4800。在一个实施例中,配置高速缓存4814与本地配置控制器4802位于一处。在一个实施例中,配置高速缓存4818位于本地配置控制器4806的配置域中,例如,其中第一域以配置终端器4804结束并且第二域以配置终端器4808结束)。配置高速缓存可以允许本地配置控制器可以在配置期间参考配置高速缓存,例如,以期与参考存储器相比以更低等待时间获得配置状态。配置高速缓存(储存器)可以是专用的或者可以作为结构内存储元件(例如,本地高速缓存4816)的配置模式被访问。
高速缓存模式
1. 需求高速缓存 - 在这种模式下,配置高速缓存作为真实高速缓存来操作。配置控制器发出基于地址的请求,其对照高速缓存中的标记被检查。未命中被加载到高速缓存中,然后可以在将来的重新编程期间被重新引用。
2. 结构内存储(便笺式存储器)高速缓存 - 在这种模式下配置高速缓存在它自己的小地址空间而不是主机的更大地址空间中接收对配置序列的引用。这可以提高存储器密度,因为用于存储标记的高速缓存的部分可以替代地用于存储配置。
在某些实施例中,配置高速缓存可以具有例如通过外部方向或内部方向预先加载到它中的配置数据。这可以允许减少加载程序的等待时间。本文中的某些实施例提供到配置高速缓存的接口,例如,即使配置已经正在结构中运行,所述接口也许可将新配置状态加载到高速缓存中。此加载的发起可以从内部或外部源发生。预先加载机制的实施例通过从配置路径中去除高速缓存加载的等待时间来进一步减少等待时间。
预取模式
1.显式预取 - 配置路径被扩增有新命令ConfigurationCachePrefetch。不是对结构进行编程,而是此命令简单地将相关程序配置加载到配置高速缓存中,而无需对结构进行编程。因为此机制搭载在现有的配置基础设施上,所以它既在结构内也在外部暴露,例如,暴露给访问存储器空间的核心和其他实体。
2. 隐式预取 - 全局配置控制器可以维护预取预测器,并且使用这个来例如以自动方式发起对配置高速缓存的显式预取。
6.3用于响应于异常对CSA快速重配置的硬件
CSA(例如,空间结构)的某些实施例包括大量的指令和配置状态,例如,其在CSA的操作期间大半是静态的。因此,配置状态可能易受软错误的影响。对这些软错误的快速无误恢复对于空间系统的长期可靠性和性能而言可能是至关重要的。
本文中的某些实施例提供快速配置恢复回路,例如,其中配置错误被检测并且结构的各部分立即重配置。本文中的某些实施例包括例如具有可靠性、可用性和可服务性(RAS)重新编程特征的配置控制器。CSA的某些实施例包括用于空间结构内的高速配置、错误报告和奇偶校验的电路。使用这三个特征的组合以及可选地配置高速缓存,配置/异常处理电路可以从配置中的软错误恢复。当被检测到时,软错误可以被传达给配置高速缓存,所述配置高速缓存发起对结构的(例如,该部分)的立即重配置。某些实施例提供专用重配置电路,例如,其比将在结构中间接地实现的任何解决方案快。在某些实施例中,位于一处的异常和配置电路协作以在配置错误检测时重新加载结构。
图49图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路(4918、4922)的配置和异常处理控制器(4902、4906)的加速器块片4900。在一个实施例中,当PE通过其本地RAS特征检测到配置错误时,它通过其异常生成器来向配置和异常处理控制器(例如,4902或4906)发送(例如,配置错误或重配置错误)消息。在接收到此消息时,配置和异常处理控制器(例如,4902或4906)发起位于一处的重配置电路(例如,分别为4918或4922)以重新加载配置状态。配置微架构继续并重新加载(例如,仅)配置状态,并且在某些实施例中,仅针对报告RAS错误的PE的配置状态。在重配置完成时,结构可以恢复正常操作。为了减小等待时间,由配置和异常处理控制器(例如,4902或4906)使用的配置状态可以源自配置高速缓存。作为配置或重配置过程的基本情况,可以在链的末尾包括断言它被配置(或者重配置)的配置终端器(例如,图49中的用于配置和异常处理控制器4902的配置终端器4904或用于配置和异常处理控制器4906的配置终端器4908)。
图50图示了根据本公开的实施例的重配置电路5018。重配置电路5018包括用于存储配置状态(或到其的指针)的配置状态寄存器5020。
7.4 用于结构发起的对CSA重配置的硬件
把CSA(例如,空间阵列)作为目标的应用的一些部分可以被不频繁地运行或者可以与程序的其他部分相互排斥。为了节省面积,为了改进性能和/或降低功率,在程序数据流图的若干不同部分之间时间复用空间结构的各部分可以是有用的。本文中的某些实施例包括CSA(例如,经由空间程序)可以用来请求对结构的一部分进行重新编程的接口。这可以使得CSA能够根据动态控制流动态地改变它自己。本文中的某些实施例允许结构发起的重配置(例如,重新编程)实现。本文中的某些实施例提供用于从结构内触发配置的一组接口。在一些实施例中,PE基于程序数据流图中的某个决定发出重配置请求。此请求可以游遍网络到我们的新配置界面,在那里它触发重配置。一旦重配置完成,就可以可选地返回通知完成的消息。CSA的某些实施例因此提供程序(例如,数据流图)定向重配置能力。
图51图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路5118的配置和异常处理控制器5106的加速器块片5100。这里,结构的一部分向例如配置和异常处理控制器5106和/或重配置电路5118的配置域发出对(重)配置的请求。域(重)配置它自己,并且当已经满足请求时,配置和异常处理控制器5106和/或重配置电路5118向结构发出响应,以通知结构(重)配置完成。在一个实施例中,配置和异常处理控制器5106和/或重配置电路5118在(重)配置正在进行的时间期间禁用通信,所以程序在操作期间没有一致性问题。
配置模式
按地址配置 - 在这种模式下,结构做出要从特定地址加载配置数据的直接请求。
按参考配置 - 在这种模式下,结构例如通过预先确定的参考ID来做出要加载新配置的请求。这可以简化要加载的代码的确定,因为代码的位置已被抽象。
配置多个域
CSA可以包括更高级配置控制器以支持多播机制(例如,如本文中所讨论的)来将配置请求投射(例如,经由通过虚线框指示的网络)到多个(例如,分布式或本地)配置控制器。这可以使得能够跨越结构的更大部分复制单个配置请求,例如,触发广泛的重配置。
6.5异常聚合器
CSA的某些实施例也可能经历异常(例如,异常状况),例如,浮点下溢。当发生这些状况时,可以调用特殊处理程序来校正程序或者终止程序。本文中的某些实施例提供用于处理空间结构中的异常的系统级架构。因为某些空间结构强调面积效率,所以本文中的实施例使总面积最小化,同时提供一般异常机制。本文中的某些实施例提供评估在CSA(例如,空间阵列)内发生的异常状况的低面积手段。本文中的某些实施例提供用于传达此类异常的接口和评估协议以及PE级异常语义。本文中的某些实施例是专用异常处理能力,例如并且不需要由程序设计员显式处理。
CSA异常架构的一个实施例由例如图52-53中所示的四个部分构成。这些部分可以被按层次布置,其中异常从生产者流出,并且最终到达可以与例如核心的异常服务程序会合的块片级异常聚合器(例如,处理程序)。四个部分可以是:
1. PE异常生成器
2. 本地异常网络
3. 夹层异常聚合器
4. 块片级异常聚合器。
图52图示了根据本公开的实施例的包括处理元件阵列和耦合到块片级异常聚合器5204的夹层异常聚合器5202的加速器块片5200。图53图示了根据本公开的实施例的具有异常生成器5344的处理元件5300。
PE异常生成器
处理元件5300可以包括来自图9的处理元件900,例如,其中类似的数字是类似的组件,例如,本地网络902和本地网络5302。附加网络5313(例如,通道)可以是异常网络。PE可以实现到异常网络(例如,图53上的异常网络5313(例如,通道))的接口。例如,图53示出了这种接口的微架构,其中PE具有异常生成器5344(例如,发起异常有限状态机(FSM)5340以将异常分组(例如,BOXID 5342)选通输出到异常网络。BOXID 5342可以是本地异常网络内的异常产生实体(例如,PE或盒)的唯一标识符。当检测到异常时,异常生成器5344感测异常网络并且在网络被发现为空闲时选通输出BOXID。异常可以是由许多状况引起的,例如但不限于算术错误、对状态的失败ECC校验等。然而,也可能是异常数据流操作被引入,其想法是支持像断点这样的构造。
异常的发起可以通过执行程序设计员供应的指令来显式地发生,或者在检测到硬化错误状况(例如,浮点下溢)时隐式地发生。在异常时,PE 5300可以进入等待状态,在所述等待状态下它等待被例如在PE 5300外部的最终异常处理程序服务。如下所述,异常分组的内容取决于特定PE的实施方式。
本地异常网络
(例如,本地)异常网络将异常分组从PE 5300引导到夹层异常网络。异常网络(例如,5313)可以是由(例如,单条)控制线和一条或多条数据线构成的串行分组交换网络,例如,按照环形或树形拓扑组织,例如,针对PE的子集。每个PE可以在(例如,本地)异常网络中具有(例如,环形)站点,例如,其中它可仲裁以将消息注入到异常网络中。
需要注入异常分组的PE端点可以观察其本地异常网络出口点。如果控制值指示忙,则PE将等待开始注入其分组。如果网络不忙,也就是说,下游站点没有分组要转发,则PE将继续开始注入。
网络分组可以是可变或固定长度的。每个分组可以以标识该分组的源PE的固定长度报头字段开始。这个后面是可变数量的包含信息的PE特定字段,例如,包括错误代码、数据值或其他有用的状态信息。
夹层异常聚合器
夹层异常聚合器5204负责将本地异常网络组装成更大分组并且将它们发送到块片级异常聚合器5202。夹层异常聚合器5204可以预先挂起具有它自己的唯一ID的本地异常分组,例如,确保异常消息是不含糊的。夹层异常集合器5204可以与夹层网络中的特殊仅异常虚拟通道对接,例如,确保异常的死锁自由度。
夹层异常聚合器5204也可以能够直接地为某些类别的异常服务。例如,可以使用夹层网络站点本地的高速缓存来从夹层网络中服务来自结构的配置请求。
块片级异常聚合器
异常系统的最后级是块片级异常聚合器5202。块片级异常聚合器5202负责收集来自各种夹层级异常聚合器(例如,5204)的异常并且将它们转发到适当的服务硬件(例如,核心)。因此,块片级异常聚合器5202可以包括一些内部表和控制器以使特定消息与处理程序例行例程相关联。可以直接地或者利用小型状态机为这些表编索引以便引导特定异常。
像夹层异常聚合器一样,块片级异常聚合器可以为一些异常请求服务。例如,它可以响应于特定异常而发起对PE结构的大部分的重新编程。
6.6提取控制器
CSA的某些实施例包括用于从结构中提取数据的(一个或多个)提取控制器。下面讨论如何快速地实现这种提取并且如何使数据提取的资源开销最小化的实施例。数据提取可以被用于如异常处理和上下文切换这样的关键任务。本文中的某些实施例通过引入允许提取具有可变且动态可变量的状态的可提取结构元件(EFE)(例如,PE、网络控制器和/或开关)的特征来从异构空间结构中提取数据。
CSA的实施例包括分布式数据提取协议和用于支持此协议的微架构。CSA的某些实施例包括多个本地提取控制器(LEC),其使用一(例如,小)组控制值和结构提供的网络的组合来从空间结构的其本地区域中流式传输程序数据。可以在每个可提取结构元件(EFE)处使用状态元素来形成提取链,例如,允许个别EFE在没有全局寻址的情况下自我提取。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例包括例如用于形成提取链的特定硬件支持(例如,提取控制器),而不依靠软件来动态地建立这些链,例如,以增加提取时间为代价。CSA的实施例不是纯粹分组交换的并且确实包括额外的带外控制线(例如,不通过需要额外周期的数据路径来发送控制以选通此信息并使其重新序列化)。CSA的实施例通过固定提取顺序并且通过提供显式带外控制(例如,按至少两倍)来减小提取等待时间,然而不显著地增加网络复杂度。
CSA的实施例不将串行机制用于数据提取,其中数据使用类似JTAG的协议来从结构逐比特流式传输。CSA的实施例利用粗粒度结构方法。在某些实施例中,将几条控制线或状态元素添加到面向64或32位CSA结构相对于将那些相同的控制机制添加到4或6位结构具有更低的成本。
图54图示了根据本公开的实施例的包括处理元件阵列和本地提取控制器(5402、5406)的加速器块片5400。每个PE、每个网络控制器和每个开关可以是例如通过CSA架构的实施例来配置(例如,编程)的可提取结构元件(EFE)。
CSA的实施例包括从异构空间结构提供高效的、分布式、低等待时间提取的硬件。可以根据四种技术来实现这个。首先,例如,如在图54-56中一样,硬件实体本地提取控制器(LEC)被利用。LEC可以接受来自主机(例如,处理器核心)的命令,例如,从空间阵列中提取数据的流,并且将此数据写回到虚拟存储器以供由主机检查。第二,可以包括提取数据路径,例如,其和PE结构的本机宽度一样宽并且可以被叠加在PE结构之上。第三,可以将新控制值接收到编排提取过程的PE结构中。第四,状态元素可以位于(例如,在寄存器中)每个可配置端点处,所述每个可配置端点跟踪相邻EFE的状态,允许每个EFE在没有额外的控制值的情况下不含糊地导出其状态。这四种微架构特征可以允许CSA从EFE的链中提取数据。为了获得低数据提取等待时间,某些实施例可以通过在结构中包括多个(例如,许多)LEC和EFE链来分割提取问题。在提取时间,这些链可以独立地操作以并行地从结构中提取数据,例如,大幅地减少等待时间。作为这些组合的结果,CSA可以执行完整状态转储(例如,在几百纳秒中)。
图55A-55C图示了根据本公开的实施例的配置数据路径网络的本地提取控制器5502。描绘的网络包括可以(例如,经由其相应的控制值)被配置成将一个或多个数据路径(例如,从PE起)连接在一起的多个复用器(例如,复用器5506、5508、5510)。图55A图示了为某个先前的操作或程序而配置(例如,设置)的网络5500(例如,结构)。图55B图示了选通提取值的本地提取控制器5502(例如,包括发送和/或接收值的网络接口电路5504)并且由LEC控制的所有PE进入提取模式。提取链(或提取终端器)中的最后PE可以根据(1)来自LEC的值或(2)在内部产生的值(例如,来自PE )来控制提取通道(例如,总线)和正在发送的数据。一旦完成,PE就可以设置其完成标志,例如,使得下一个PE能够提取其数据。图55C图示了最遥远的PE已完成提取过程并且结果它已设置其一个或多个提取状态比特,例如,其将复用器摆动到相邻网络中以使得下一个PE能够开始提取过程。所提取的PE可以恢复正常操作。在一些实施例中,PE可以保持被禁用直到采取了其他动作为止。在这些图中,复用器网络是某些图(例如,图6)中所示的“开关”的类似物。
以下部分描述提取网络的实施例的各种组件的操作。
本地提取控制器
图56图示了根据本公开的实施例的提取控制器5602。本地提取控制器(LEC)可以是负责接受提取命令、与EFE一起协调提取过程和/或存储提取的数据到(例如,到虚拟存储器)的硬件实体。在这个能力中,LEC可以是专用顺序微控制器。
LEC操作可以在它接收到将写入结构状态的缓冲器(例如,在虚拟存储器中)的指针以及可选地控制多少结构将被提取的命令时开始。取决于LEC微架构,此指针(例如,存储在指针寄存器5604中)可以在网络上或者通过对LEC的存储器系统访问而出现。当它接收到这种指针(例如,命令)时,LEC继续从它负责的结构的部分中提取状态。LEC可以将此从结构中提取的数据流式传输到由外部调用者提供的缓冲器中。
在图54中示出了用于LEC的两个不同的微架构。第一将LEC 5402放置在存储器接口处。在这种情况下,LEC可以对存储器系统做出要写入提取的数据的直接请求。在第二种情况下LEC 5406被放置在存储器网络上,在所述存储器网络中它可以仅间接地对存储器做出请求。在两种情况下,LEC的逻辑操作可以不变。在一个实施例中,例如,通过一组(例如,OS可见的)控制状态寄存器,LEC被通知要从结构中提取数据的期望,所述控制状态寄存器将用于向个别LEC通知新命令。
额外的带外控制通道(例如,线)
在某些实施例中,提取依靠2-8个额外的带外值来改进配置速度,如在下面所定义的那样。由LEC驱动的值可以被标记为LEC。由EFE(例如,PE)驱动的值可以被标记为EFE。配置控制器5602可以包括以下控制通道,例如,LEC_EXTRACT控制通道5706、LEC_START控制通道5608、LEC_STROBE控制通道5610和EFE_COMPLETE控制通道5612,其中在下表3中对每个的示例进行讨论。
表3:提取通道
LEC_EXTRACT | 由LEC在提取过程期间断言的可选信号。降低此信号使正常操作恢复。 |
LEC_START | 表示提取的开始的信号,允许建立本地EFE状态。 |
LEC_STROBE | 用于控制EFE处的提取相关状态机的可选选通信号。EFE可以在一些实施方式中在内部生成此信号。 |
EFE_COMPLETE | 当EFE已完成转储状态时选通的可选信号。这帮助LEC标识个别EFE转储的完成。 |
一般地,提取的处理可以被留给特定EFE的实施者。例如,可选功能EFE可以具有用于使用现有数据路径来转储寄存器的预防措施,然而固定功能EFE可能简单地具有复用器。
由于当对一大组EFE进行编程时的长线延迟,LEC_STROBE值可以被视为用于EFE组件的时钟/锁存使能。因为此值被用作时钟,所以在一个实施例中线路的占空比最多为50%。结果,提取吞吐量近似地减半。可选地,可以添加第二LEC_STROBE值以使得能实现连续提取。
在一个实施例中,在独立耦合(例如,线)上严格地传送仅LEC_START,例如,其他控制通道可以被叠加在现有网络(例如,线)上。
网络资源的重用
为了减少数据提取的开销,CSA的某些实施例利用现有网络基础设施来传送提取数据。LEC可以利用芯片级存储器层次和结构级通信网络将数据两者来将数据从结构移动到存储器中。结果,在CSA的某些实施例中,提取基础设施对总体结构面积和功率添加不多于2%。
CSA的某些实施例中的网络资源的重用可以使网络对于提取协议具有某种硬件支持。当‘LEC_START’值被断言时,CSA的某些实施例的电路交换网络需要使LEC针对配置以特定方式设置其复用器。分组交换网络可能不需要扩展,但是LEC端点(例如,提取终端器)在分组交换网络中使用特定地址。网络重用是可选的,并且一些实施例可以发现专用配置总线是更方便的。
每EFE状态
每个EFE可以维护表示它是否已导出其状态的比特。此比特可以在提取开始值被驱动时取消断言,然后一旦特定EFE结束提取就断言。在一个提取协议中,EFE被布置成形成链,同时EFE提取状态比特确定该链的拓扑结构。EFE可以读取紧邻EFE的提取状态比特。如果此相邻EFE使其提取比特置位并且当前EFE未使其提取比特置位,则EFE可以确定它拥有提取总线。当EFE转储其最后数据值时,它可以驱动‘EFE_DONE’值并且设置其提取比特,例如,使得上游EFE能够配置用于提取。与EFE相邻的网络可以观察此值并且也调整其状态以处理转变。作为提取过程的基本情况,可以在链的末尾包括断言提取完成的提取终端器(例如,图45中的用于LEC 5402的提取终端器5404或用于LEC 5406的提取终端器5408)。
在EFE内部,此比特可以用于驱动流控制就绪值。例如,当提取比特被取消断言时,网络控制值可以自动地被钳位到防止数据流动的值,然而,在PE内,将不对操作或动作进行调度。
处理高延迟路径
LEC的一个实施例可以例如通过许多复用器并且利用许多负载来在长距离上驱动值。因此,值可能难以在短时钟周期内到达遥远的EFE。在某些实施例中,提取值处于主(例如,CSA)时钟频率的某个分频(例如,分数)下以在提取时确保数字定时规程。时钟分频可以被用在带外评估协议中,并且不需要对主时钟树进行任何修改。
在提取期间确保一致结构行为
因为某些提取方案是分布式的并且由于程序和存储器效果而具有非确定性定时,所以结构的不同成员在不同的时间在提取之下。在LEC_EXTRACT被驱动的同时,所有网络流控制值可以被驱动为逻辑低,例如,从而冻结结构的特定分段的操作。
提取过程可以是非破坏性的。因此一旦提取已完成,一组PE就可以被认为是可操作的。对提取协议的扩展可以允许PE可选地在提取后被禁用。可替选地,在提取过程期间开始配置在实施例中将具有类似的效果。
单个PE提取
在一些情况下,提取单个PE可能是有利的。在这种情况下,可选地址值可以作为提取过程的开始的一部分被驱动。这可以使得针对提取的PE能够被直接地启用。一旦此PE已被提取,提取过程就可以随着LEC_EXTRACT值的降低而停止。以这种方式,可以例如通过本地提取控制器来选择性地提取单个PE。
处理提取反压
在其中LEC将提取的数据写入到存储器(例如,以用于后处理,例如,在软件中)的实施例中,它可以经受有限的存储器带宽。在LEC耗尽其缓冲容量或者预期它将耗尽其缓冲能力的情况下,它可能停止选通LEC_STROBE值直到缓冲问题已解决为止。
注意的是,在某些图 (例如,图45、图48、图49、图51、图52和图54)中示意性地示出了通信。在某些实施例中,那些通信可以发生在(例如,互连)网络上。
6.7流程图
图57图示了根据本公开的实施例的流程图5700。描绘的流程5700包括:利用处理器的核心的解码器将指令解码成解码的指令5702;利用处理器的核的执行单元执行经解码的指令以执行第一操作5704;接收包括多个节点的数据流图的输入5706;将数据流图叠加到处理器的处理元件阵列中,其中每个节点被表示为处理元件阵列中的数据流操作符5708;以及当传入操作数集到达处理元件阵列时利用处理元件阵列执行数据流图的第二操作5710。
图58图示了根据本公开的实施例的流程图5800。描绘的流程5800包括:利用处理器的核心的解码器将指令解码成解码的指令5802;利用处理器的核心的执行单元执行经解码的指令以执行第一操作5804;接收包括多个节点的数据流图的输入5806;将数据流图叠加到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符5808;以及当传入操作数集到达多个处理元件时利用互连网络和多个处理元件执行数据流图的第二操作5810。
6.8 存储器
图59A是根据本公开的实施例的采用插置在存储器子系统5910与加速硬件5902之间的存储器排序电路5905的系统5900的框图。存储器子系统5910可以包括已知的存储器组件,包括高速缓存、存储器以及与基于处理器的架构相关联的一个或多个存储器控制器。加速硬件5902可以是由通过处理元件(PE)间网络或另一类型的组件间网络连接的轻量级处理元件(或其他类型的处理组件)组成的粗粒度空间架构。
在一个实施例中,通过配置PE和通信网络将被视为控制数据流图的程序的映射到空间架构上。一般地,PE被配置为数据流操作符,与处理器中的功能单元类似:一旦输入操作数到达PE,就会发生某个操作,并且结果被以管线方式转发到下游PE。数据流操作符(或其他类型的操作符)可以选择在每操作符基础上消费传入数据。简单的操作符(例如处理算术表达式的无条件评估的那些操作符)常常消费所有传入数据。然而,对于操作符来说维持状态(例如,在累加中)有时是有用的。
PE使用专用虚拟电路来通信,所述专用虚拟电路是通过静态地配置电路交换通信网络而形成的。这些虚拟电路是流控制的且完全反压的,使得如果源没有数据或目的地满了则PE将停止。在运行时,数据流过根据数据流图(在本文中也称为子程序)来实现映射算法的PE。例如,数据可以从存储器流入,通过加速硬件5902,然后返回到存储器。这种架构相对于传统多核心处理器可实现显著的性能效率:形式为PE的计算比较大的核心更简单且更多并且通信是直接的,与存储器子系统5910的扩展相反。然而,存储器系统并行性有助于支持并行PE计算。如果存储器访问被串行化,则高并行性很可能无法实现。为了促进存储器访问的并行性,所公开的存储器排序电路5905包括存储器排序架构和微架构,如将详细地说明的。在一个实施例中,存储器排序电路5905是请求地址堆电路(或“RAF”)或其他存储器请求电路。
图59B是根据本公开的实施例的图59A的但是采用多个存储器排序电路5905的系统5900的框图。每个存储器排序电路5905可以充当存储器子系统5910与加速硬件5902的一部分之间的接口(例如,块片或处理元件的空间阵列)。存储器子系统5910可以包括多个高速缓存块片12(例如,图59B的实施例中的高速缓存块片12A、12B、12C和12D),并且一定数量的存储器排序电路5905(在此实施例中为四个)可以被用于每个高速缓存块片12。交叉开关5904(例如,RAF电路)可以将存储器排序电路5905连接到高速缓存的组成每个高速缓存块片12A、12B、12C和12D的存储体。例如,在一个实施例中在每个高速缓存块片中可以有存储器的八个存储体。系统5900可以被实例化在单个管芯上,例如,作为片上系统(SoC)。在一个实施例中,SoC包括加速硬件5902。在替代实施例中,加速硬件5902是诸如FPGA或CGRA之类的外部可编程芯片,并且存储器排序电路5905通过输入/输出集线器等与加速硬件5902对接。
每个存储器排序电路5905可以接受对存储器子系统5910的读取和写入请求。来自加速硬件5902的请求在用于数据流图的发起读取或写入访问(在本文中也称为加载或存储访问)的每个节点的单独的通道中到达存储器排序电路5905。缓冲被提供为使得加载的处理将按照它被请求的顺序将所请求的数据返回到加速硬件5902。换句话说,迭代六数据在迭代七数据之前被返回,依此类推。此外,注意的是,可以将从存储器排序电路5905到特定高速缓存存储体的请求通道实现为有序通道,并且在第二请求之前离开的任何第一请求将在第二请求之前到达高速缓存存储体。
图60是图示了根据本公开的实施例的进出加速硬件5902的存储器操作的一般功能的框图6000。在加速硬件5902之上发生的操作被理解为往返存储器子系统5910的存储器。注意的是,两个加载请求被做出,后面是对应的加载响应。在加速硬件5902对来自加载响应的数据执行处理的同时,发生第三加载请求和响应,其触发附加加速硬件处理。针对这三个加载操作的加速硬件处理的结果然后被传递到存储操作中,并且因此最终结果被存储回到存储器。
通过考虑此操作序列,可能显然的是空间阵列更自然地映射到通道。此外,加速硬件5902在请求和响应通道以及可能发生的固有并行处理方面是等待时间不敏感的。加速硬件还可以使程序的执行与存储器子系统5910(图59A)的实现解耦,因为与存储器对接发生在与由加速硬件5902采取的多个处理步骤分开的离散时刻。例如,到存储器的加载请求和来自存储器的加载响应是单独的动作,并且可以取决于存储器操作的依赖性流程在不同的情况下被不同地调度。空间结构的使用(例如,用于处理指令)促进这种加载请求和加载响应的空间分离和分布。
图61是图示了根据本公开的实施例的针对存储操作6101的空间依赖性流程的框图6100。对存储操作的引用是示例性的,因为相同的流程可以适用于加载操作(但是没有传入数据),或者适用于诸如栅栏(fence)的其他操作符。栅栏是针对存储器子系统的排序操作,其确保一种类型的所有在先存储器操作(诸如所有存储或所有加载)已完成。存储操作6101可以接收从加速硬件5902接收到的(存储器的)地址6102和数据6104。存储操作6101还可以接收传入依赖性令牌6108,并且响应于这三个项目的可用性,存储操作6101可以生成传出依赖性令牌6112。传入依赖性令牌(其例如可以是程序的初始依赖性令牌)可以在用于程序的编译器供应的配置中提供,或者可以通过执行存储器映射的输入/输出(I/O)来提供。可替换地,如果程序已经在运行,则可以例如与存储操作6101取决于的在前存储器操作相关联地从加速硬件5902接收传入依赖性令牌6108。可以基于程序后续存储器操作所需要的地址6102和数据6104来生成传出依赖性令牌6112。
图62是根据本公开的实施例的图59A的存储器排序电路5905的详细框图。存储器排序电路5905可以耦合到乱序存储器子系统5910,其如所讨论的,可以包括高速缓存12和存储器18,以及相关联的(一个或多个)乱序存储器控制器。存储器排序电路5905可以包括或者耦合到通信网络接口20,所述通信网络接口20可以是块片间或块片内网络接口,并且可以是电路交换网络接口(如所图示的),并且因此包括电路交换互连。可替换地或附加地,通信网络接口20可以包括分组交换互连。
存储器排序电路5905可以进一步包括但不限于存储器接口6210、操作队列6212、(一个或多个)输入队列6216、完成队列6220、操作配置数据结构6224和操作管理器电路6230,所述操作管理器电路6230可以进一步包括调度器电路6232和执行电路6234。在一个实施例中,存储器接口6210可以是电路交换的,而在另一实施例中,存储器接口6210可以是分组交换的,或者两者可以同时地存在。操作队列6212可以缓冲正在针对请求被处理的存储器操作(具有对应的变元),并且因此可以对应于进入输入队列6216中的地址和数据。
更具体地,输入队列6216可以是至少下列的聚合:加载地址队列、存储地址队列、存储数据队列和依赖性队列。当将输入队列6216实现为聚合的时,存储器排序电路5905可以提供用于与附加控制逻辑共享逻辑队列以在逻辑上使队列分离,所述队列是具有存储器排序电路的个别通道。这可以使输入队列使用最大化,但是也可能要求附加复杂性和空间以便逻辑电路管理聚合队列的逻辑分离。可替换地,如将参考图63所讨论的,可以以隔离方式实现输入队列6216,其中每个各有单独的硬件队列。无论是聚合的(图62)还是分解的(图63),用于本公开的目的的实施方式是基本上相同的,其中前者使用附加逻辑来在逻辑上使单个共享硬件队列内的队列分离。
当被共享时,可以将输入队列6216和完成队列6220实现为固定大小的环形缓冲器。环形缓冲器是具有先进先出(FIFO)数据特性的循环队列的高效实施方式。这些队列因此可以实施正在请求存储器操作的程序的语义顺序。在一个实施例中,环形缓冲器(诸如用于存储地址队列)可以具有与以相同的速率流过相关联的队列(诸如存储数据队列或依赖性队列)的条目相对应的条目。以这种方式,存储地址可以保持与对应的存储数据相关联。
更具体地,加载地址队列可以缓冲从中检索数据的存储器18的传入地址。存储地址队列可以缓冲要将数据写入到的存储器18的传入地址,所述数据被缓冲在存储数据队列中。依赖性队列可以与加载地址队列和存储地址队列的地址相关联地缓冲依赖性令牌。表示单独的通道的每个队列可以用固定或动态数量的条目加以实现。当固定时,可用的条目越多,可以进行更高效复杂的循环处理。但是,具有太多条目实现起来花费更多的面积和能量。在一些情况下,例如,利用聚合架构,所公开的输入队列6216可以共享队列槽。可以静态地分配队列中的槽的使用。
完成队列6220可以是用于响应于通过加载操作发出的存储器命令而缓冲从存储器接收到的数据的一组单独的队列。完成队列6220可以用于保持已被调度但是仍然尚未接收到数据(并且因此仍然尚未完成)的加载操作。完成队列6220因此可以用于对数据和操作流程进行重排序。
将参考图63至图27更详细地说明的操作管理器电路6230可以提供用于在考虑到用于提供存储器操作的正确排序的依赖性令牌时对排队的存储器操作进行调度和执行的逻辑。操作管理器6230可以访问操作配置数据结构6224以确定哪些队列被分组在一起以形成给定存储器操作。例如,操作配置数据结构6224可以包括具体依赖性计数器(或队列),输入队列、输出队列和完成队列被全部分组在一起以用于特定存储器操作。因为每个连续的存储器操作可以被指派不同组的队列,所以可以跨越存储器操作的子程序交织对变化队列的访问。在知道所有这些队列后,操作管理器电路6230可以与操作队列6212、(一个或多个)输入队列6216、(一个或多个)完成队列6220和存储器子系统5910对接以最初在连续的存储器操作变成“可执行的”时向存储器子系统5910发出存储器操作,并且以接下来利用来自存储器子系统的某个确认完成存储器操作。此确认可以是例如响应于加载操作命令的数据或响应于存储操作命令而存储在存储器中的数据的确认。
图63是根据本公开的实施例的图59A的存储器排序电路5905的微架构6300的流程图。由于C语言(和其他面向对象程序语言)的语义,存储器子系统5910可以允许存储器操作的排序错误的程序的非法执行。微架构6300可以实施存储器操作的排序(从存储器加载和存储到存储器的序列),使得加速硬件5902执行的指令的结果被适当地排序。许多本地网络50被图示以表示耦合到微架构6300的加速硬件5902的一部分。
从架构视角来看,存在至少两个目标:第一,为了正确地运行一般顺序代码,以及第二,为了在由微架构6300执行的存储器操作中获得高性能。为了确保程序正确性,编译器以某种方式表达对数组p的存储操作和加载操作之间的依赖性,其经由如将被说明的依赖性令牌来表达。为了改进性能,微架构6300并行查找并发出阵列的如相对于程序顺序合法的许多加载命令。
在一个实施例中,微架构6300可以包括上面参考图62所讨论的操作队列6212、输入队列6216、完成队列6220和操作管理器电路6230,其中个别队列可以被称为通道。微架构6300可以进一步包括多个依赖性令牌计数器6314(例如,每输入队列各一个)、一组依赖性队列6318(例如,每输入队列各一个)、地址复用器6332、存储数据复用器6334、完成队列索引复用器6336和加载数据复用器6338。在一个实施例中,操作管理器电路6230可以在生成存储器命令6350(要发送到存储器子系统5910)时并且在从存储器子系统5910接收加载命令的响应时指示这些各种复用器,如将被说明的那样。
如所提及的输入队列6216可以包括加载地址队列6322、存储地址队列6324和存储数据队列6326。(小数字0、1、2是通道标签并且将稍后在图66和图69A中被参考)。在各种实施例中,可以复用这些输入队列以包含附加通道,以处理存储器操作处理的附加并行化。每个依赖性队列6318可以与输入队列6216中的一个相关联。更具体地,标记为B0的依赖性队列6318可以与加载地址队列6322相关联并且标记为B1的依赖性队列可以与存储地址队列6324相关联。如果提供了输入队列6216的附加通道,则依赖性队列6318可以包括附加对应的通道。
在一个实施例中,完成队列6220可以包括用于从存储器子系统5910接收加载数据的一组输出缓冲器6344和6346以及用于根据由操作管理器电路6230所维护的索引来缓冲用于加载操作的地址和数据的完成队列6342。操作管理器电路6230可管理索引以确保加载操作的有序执行,并且以标识接收到输出缓冲器6344和6346中的数据,所述数据可以被移动到完成队列6342中的调度加载操作。
更具体地,因为存储器子系统5910是乱序的,但是加速硬件5902按顺序完成操作,所以微架构6300可以利用完成队列6342对存储器操作进行重排序。可以相对于完成队列6342执行三个不同的子操作,即以分配、入队和出队。对于分配,操作管理器电路6230可以在完成队列的有序下一个槽中将索引分配到完成队列6342中。操作管理器电路可以将此索引提供给存储器子系统5910,所述存储器子系统5910然后可以知道要将用于加载操作的数据写入到的槽。为了入队,存储器子系统5910可以像随机存取存储器(RAM)一样将数据作为条目写入到完成队列6342中的经索引的有序下一个槽,从而将条目的状态比特设置为有效的。为了出队,操作管理器电路6230可以呈现存储在此有序下一个槽中的数据以完成加载操作,从而将条目的状态比特设置为无效的。无效的条目然后可用于新分配。
在一个实施例中,状态值6248可以指代输入队列6216、完成队列6220、依赖性队列6318和依赖性令牌计数器6314的状态。这些状态例如可以包括输入状态、输出状态和控制状态,其可以指代与输入或输出相关联的依赖性令牌的存在或不存在。输入状态可以包括地址的存在或不存在并且输出状态可以包括存储值和可用的完成缓冲器槽的存在或不存在。依赖性令牌计数器6314可以是队列的紧凑表示并且跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器6314饱和,则可以不为新存储器操作生成附加依赖性令牌。因此,存储器排序电路5905可以停止对新存储器操作进行调度直到依赖性令牌计数器6314变得不饱和为止。
附加地参考图64,图64是根据本公开的实施例的可执行确定器电路6400的框图。可以利用若干不同种类的存储器操作(例如加载和存储)来设置存储器排序电路5905:
可执行确定器电路6400可以被集成为调度器电路6232的一部分并且可以执行逻辑操作以确定给定存储器操作是否是可执行的,并且因此准备好被发出到存储器。存储器操作可以在与其存储器变元相对应的队列具有数据并且相关联的依赖性令牌存在时被执行。这些存储器变元可以包括例如输入队列标识符6410(指示输入队列6216的通道)、输出队列标识符6420(指示完成队列6220的通道)、依赖性队列标识符6430(例如,应该引用什么依赖性队列或计数器)以及操作类型指示符6440(例如,加载操作或存储操作)。可以例如以上述格式包括字段(例如,存储器请求的),所述字段存储用于指示要使用危险检查硬件的一个或多个比特。
这些存储器变元可以在操作队列6212内被排队,并且用于对与来自存储器和加速硬件5902的传入地址和数据相关联的存储器操作的发出进行调度。(参见图65。)传入状态值6248可以在逻辑上与这些标识符组合,然后可以加上结果(例如,通过与门6450)以输出可执行值,例如,所述可执行值在存储器操作是可执行的时被断言。传入状态值6248可以包括用于输入队列标识符6410的输入状态6412、用于输出队列标识符6420的输出状态6422以及用于依赖性队列标识符6430的控制状态6432(与依赖性令牌有关)。
对于加载操作,并且作为示例,存储器排序电路5905可以在加载操作具有地址(输入状态)以及用于在完成队列6342(输出状态)中缓冲加载结果的空间时发出加载命令。类似地,当存储操作具有地址和数据值(输入状态)两者时存储器排序电路5905可以发出用于存储操作的存储命令。因此,状态值6248可以传送状态值所属于的队列的空虚(或满度)的水平。操作类型然后可以取决于什么地址和数据应该是可用的而指示逻辑是否产生可执行值。
为了实现依赖性排序,调度器电路6232可以扩展存储器操作以包括如上面在示例加载和存储操作中加下划线的依赖性令牌。控制状态6432可以指示依赖性令牌是否在通过依赖性队列标识符6430所标识的依赖性队列中可用,所述依赖性队列标识符6430可能是依赖性队列6318(用于传入存储器操作)或依赖性令牌计数器6314(用于完成存储器操作)中的一个。在此系统阐述下,相关存储器操作要求附加排序令牌来在存储器操作完成时执行并生成附加排序令牌,其中完成意味着来自存储器操作的结果的数据已变得可供程序后续存储器操作使用。
在一个实施例中,进一步参考图63,操作管理器电路6230可以取决于是否当前正在对加载操作或存储操作进行调度以用于执行而指示地址复用器6332选择在加载地址队列6322或存储地址队列6324内缓冲的地址变元。如果它是存储操作,则操作管理器电路6230还可以指示存储数据复用器6334从存储数据队列6326中选择对应的数据。操作管理器电路6230还可以指示完成队列索引复用器6336在完成队列6220内检索根据队列状态和/或程序顺序索引的加载操作条目,以完成加载操作。操作管理器电路6230还可以指示加载数据复用器6338为正在等待完成的加载操作选择从存储器子系统5910接收到完成队列6220中的数据。以这种方式,操作管理器电路6230可以指示选择进入形成存储器命令6350(例如,加载命令或存储命令)或者执行电路6234正在等待以完成存储器操作的输入。
图65是根据本公开的一个实施例的可以包括优先级编码器6506和选择电路6508并且生成(一条或多条)输出控制线6510的执行电路6234的框图。在一个实施例中,执行电路6234可以访问(在操作队列6212中)已被确定为可执行的排队存储器操作(图64)。执行电路6234还可以接收已被排队并且还指示为准备好发出到存储器的多个排队存储器操作的时间表6504A、6504B、6504C。优先级编码器6506因此可以接收已被调度的可执行存储器操作的标识并且执行某些规则(或者遵循特定逻辑)以从进入的那些存储器操作中选择优先被首先执行的存储器操作。优先级编码器6506可以输出选择器值6507,所述选择器值6507标识具有最高优先级并且因此已被选择的已调度存储器操作。
优先级编码器6506例如可以是将多个二进制输入压缩成较少数量的输出(包括可能仅一个输出)的电路(诸如状态机或更简单的转换器)。优先级编码器的输出是从最高有效输入比特的零开始的原始数字的二进制表示。所以,在一个示例中,当存储器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)是可执行的并且被调度时,分别对应于6504A、6504B和6504C。优先级编码器6506可以被配置成将选择器值6507输出到选择电路6508,该选择器值6507将存储器操作零指示为具有最高优先级的存储器操作。选择电路6508在一个实施例中可以是复用器,并且被配置成响应于来自优先级编码器6506(并且指示对最高优先级的存储器操作的选择)的选择器值而将(例如,对存储器操作零的)其选择作为控制值输出到控制线6510上。此控制值可以转向复用器6332、6334、6336和/或6338,如参考图63所讨论的,以填充紧接着发出(被发送)到存储器子系统5910的存储器命令6350。存储器命令的传送可以被理解为向存储器子系统5910发出存储器操作。
图66是根据本公开的实施例的既为逻辑且二进制形式的示例性加载操作6600的框图。返回参考图64,加载操作6600的逻辑表示可以包括作为输入队列标识符6410的通道零(“0”)(与加载地址队列6322相对应)和作为输出队列标识符6420的完成通道一(“1”)(与输出缓冲器6344相对应)。依赖性队列标识符6430可以包括两个标识符:用于传入依赖性令牌的通道B0(与依赖性队列6318中的第一个相对应)和用于传出依赖性令牌的计数器C0。操作类型6440具有“加载”的指示,其也可能是数值指示符,以指示存储器操作是加载操作。在逻辑存储器操作的逻辑表示下方是用于示例性目的的二进制表示,例如,其中加载通过“00”来指示。图66的加载操作可以被扩展成包括其他配置,诸如存储操作(图68A)或其他类型的存储器操作,诸如栅栏。
出于关于图67A-67B、图68A-68B和图69A-69G的说明的目的,将用简化示例图示由存储器排序电路5905进行的存储器排序的示例。对于此示例,以下代码包括数组p,其通过索引i和i+2来访问:
对于此示例,假定数组p包含0、1、2、3、4、5、6,并且在循环执行结束时,数组p将包含0、1、0、1、0、1、0。可以通过展开循环来变换此代码,如图67A和67B中所图示的。真实地址依赖性通过图67A中的箭头来标注,在每种情况下,加载操作依赖于对相同地址的存储操作。例如,对于此类依赖性中的第一个,存储(例如,写入)到p[2]需要在从p[2]加载(例如,读取)之前发生,并且此类依赖性中的第二个存储到p[3]需要在从p[3]加载之前发生,依此类推。当编译器将是封闭式时,编译器注释两个存储器操作(加载p[i]和存储p[i+2])之间的依赖性。注意的是,有时仅做读取和写入冲突。微架构6300被设计成提取存储器级并行性,其中存储器操作可以在当对相同地址而言不存在冲突的相同时间向前移动。对加载操作来说情况尤其如此,所述加载操作由于等待在前相关存储操作完成而使代码执行中的等待时间暴露。在图67B中的示例代码中,安全重排序通过在展开代码左侧的箭头来指出。
参考图68A-68B和图69A-69G讨论微架构可以执行此重排序的方式。注意的是,此方法不尽可能是最优的,因为微架构6300可以不每周期向存储器发送存储器命令。然而,利用最小硬件,微架构通过在操作数(例如,用于存储的地址和数据或用于加载的地址)和依赖性令牌可用时执行存储器操作来支持依赖性流。
图68A是根据本公开的实施例的用于加载操作6802和用于存储操作6804的示例性存储器变元的框图。关于图66讨论这些或类似的存储器变元,并且将不在这里重复。然而,注意的是,存储操作6804没有用于输出队列标识符的指示符,因为没有数据正被输出到加速硬件5902。替代地,通道1中的存储地址和输入队列6216的通道2中的数据(如在输入队列标识符存储器变元中所标识的)将被调度以用于在存储器命令中传送到存储器子系统5910以完成存储操作6804。此外,依赖性队列的输入通道和输出通道都用计数器来实现。因为如图67A和图67B中所显示的加载操作和存储操作是相互依赖的,所以可以在代码的流程内使计数器在加载操作与存储操作之间循环。
图68B是图示了根据本公开的实施例的通过图63的存储器排序电路的微架构6300进行的加载操作和存储操作(诸如图67A的加载操作6802和存储操作6804)的流程的框图。为了说明的简单,并未显示所有组件,但是可以往回参考图63中显示的附加组件。指示用于加载操作6802的“加载”和用于存储操作6804的“存储”的各种椭圆被覆盖在微架构6300的一些组件上作为队列的各种通道如何随着存储器操作通过微架构6300来排队和排序而被使用的指示。
图69A、图69B、图69C、图69D、图69E、图69F、图69G和图69H是图示了根据本公开的实施例的通过图68B的微架构的队列进行的针对图67A和67B的示例性程序的加载操作和存储操作的功能流程的框图。每个图可以对应于由微架构6300处理的下一个周期。斜体的值是传入值(进入到队列中),并且粗体的值是传出值(离开队列)。具有正常字体的所有其他值是已经存在于队列中的保留值。
在图69A中,地址p[0]正在传入到加载地址队列6322中,并且地址p[2]正在传入到存储地址队列6324中,从而开始控制流程过程。注意的是,用于加载地址队列的依赖性输入的计数器C0是“1”并且用于依赖性输出的计数器C1是零。相比之下,C0的“1”指示用于存储操作的依赖性输出值。这指示用于p[0]的加载操作的传入依赖性和用于p[2]的存储操作的传出依赖性。然而,这些值尚不是活动的,但是在图69B中将以这种方式变成活动的。
在图69B中,地址p[0]被加粗以指示它在此周期中传出。新地址p[1]正在此传入到加载地址队列中并且新地址p[3]正在传入到存储地址队列中。完成队列6342中的零(“0”)值比特也在传入,这指示对该索引条目来说存在的任何数据是无效的。如所提及的,计数器C0和C1的值现在被指示为传入,并且因此现在在此周期中活动。
在图69C中,传出地址p[0]现在已离开加载地址队列并且新地址p[2]正在传入到加载地址队列中。另外,数据(“0”)正在传入到用于地址p[0]的完成队列中。有效比特被设置为“1”以指示完成队列中的数据是有效的。此外,新地址p[4]正在传入到存储地址队列中。计数器C0的值被指示为传出并且计数器C1的值被指示传入。C1的值“1”指示存储操作对地址p[4]的传入依赖性。
注意的是,用于最新加载操作的地址p[2]依赖于首先需要通过用于地址p[2]的存储操作所存储的值,所述地址p[2]在存储地址队列的顶部。稍后,来自地址p[2]的用于加载操作的完成队列中的索引条目可以保持被缓冲,直到从存储操作到地址p[2]的数据完成为止(参见图69F-69H)。
在图69D中,数据(“0”)正在从用于地址p[0]的完成队列传出,所述地址p[0]因此正在被发出到加速硬件5902。此外,新地址p[3]正在传入到加载地址队列中并且将新地址p[5]正在传入到存储地址队列中。计数器C0和C1的值保持不变。
在图69E中,用于地址p[2]的值(“0”)正在传入到存储数据队列中,然而新地址p[4]正在传入到加载地址队列中并且新地址p[6]进入到存储地址队列中。C0和C1的计数器值保持不变。
在图69F中,存储数据队列中的地址p[2]和存储地址队列中的地址p[2]的值(“0”)都是传出值。同样地,计数器C1的值被指示为传出,然而计数器C0的值(“0”)保持不变。此外,新地址p[5]正在传入到加载地址队列中并且新地址p[7]正在传入到存储地址队列中。
在图69G中,值(“0”)正在传入以指示完成队列6342内的索引值是无效的。地址p[1]被加粗以指示它正在从加载地址队列传出,然而新地址p[6]正在传入到加载地址队列中。新地址p[8]也正在传入到存储地址队列中。计数器C0的值正在作为“1”传入,与针对地址p[6]的加载操作的传入依赖性和针对地址p[8]的存储操作的传出依赖性相对应。计数器C1的值现在是“0”,并且被指示为传出。
在图69H中,数据值“1”正在传入到完成队列6342中,然而有效性比特也正在作为“1”传入,意味着经缓冲的数据是有效的。这是针对p[2]完成加载操作所需的数据。回想一下,此数据必需首先被存储到地址p[2],这在图69F中发生过。计数器C0的值“0”正在传出,并且计数器C1的值“1”正在传入。此外,新地址p[7]正在传入到加载地址队列中并且新地址p[9]正在传入到存储地址队列中。
在本实施例中,图67A和图67B的执行代码的过程可以在针对加载操作和存储操作使依赖性令牌在“0”与“1”之间跳动情况下继续。这是由于p[i]与p[i+2]之间的紧密依赖性而导致的。具有不太频率的依赖性的其他代码可以以较慢的速率生成依赖性令牌,并且因此以较慢的速率重置计数器C0和C1,从而导致较高值的令牌的生成(与进一步在语义上分离的存储器操作相对应)。
图70是根据本公开的实施例的用于对加速硬件与乱序存储器子系统之间的存储器操作进行排序的方法7000的流程图。方法7000可以由可以包括硬件(例如,电路、专用逻辑和/或可编程逻辑)、软件(例如,可在计算机系统上执行以执行硬件模拟的指令)或其组合的系统来执行。在说明性示例中,方法7000可以由存储器排序电路5905和存储器排序电路5905的各种子组件来执行。
更具体地,参考图70,方法7000可以从存储器排序电路在存储器排序电路的操作队列中使存储器操作排队开始(7010)。存储器操作和控制变元可以组成如排队的存储器操作,其中存储器操作和控制变元像先前所讨论的那样被映射到存储器排序电路内的某些队列。存储器排序电路可以工作来与加速硬件相关联地向存储器发出存储器操作,以确保存储器操作按照程序顺序完成。方法7000可以继续存储器排序电路在输入队列组中从加速硬件接收与存储器操作中的第二储存器操作相关联的存储器的地址(7020)。在一个实施例中,输入队列组的加载地址队列是用于接收地址的通道。在另一实施例中,输入队列组的存储地址队列是用于接收地址的通道。方法7000可以继续存储器排序电路从加速硬件接收与地址相关联的依赖性令牌,其中依赖性令牌指示对由存储器操作中的在第二储存器操作之前的第一储存器操作所生成的数据的依赖性(7030)。在一个实施例中,依赖性队列的通道将接收依赖性令牌。第一储存器操作可以是加载操作或存储操作。
方法7000可以继续存储器排序电路响应于接收到依赖性令牌和与依赖性令牌相关联的地址而对向存储器发出第二储存器操作进行调度(7040)。例如,当加载地址队列接收到用于加载操作的地址变元的地址并且依赖性队列接收到用于加载操作的控制变元的依赖性令牌时,存储器排序电路可以将第二储存器操作的发出作为加载操作进行调度。方法7000可以继续存储器排序电路响应于第一储存器操作的完成而(例如,在命令中)向存储器发出第二储存器操作(7050)。例如,如果第一储存器操作是存储,则可以通过输入队列组的存储数据队列中的数据已被写入到存储器中的地址的确认来验证完成。类似地,如果第一存储器操作是加载操作,则可以通过从存储器接收用于加载操作的数据来验证完成。
7. 概要
ExaFLOP规模的超级计算可能是高性能计算中的挑战,这是不可能通过传统冯诺依曼架构满足的挑战。为了实现ExaFLOP,CSA的实施例提供把(例如,编译器产生的)数据流图的直接执行作为目标的异构空间阵列。除了展示CSA的实施例的架构原理之外,上文也描述并评估示出了优于现有产品的大于10倍的性能和能量的CSA的实施例。编译器生成的代码可以具有优于路线图架构的显著性能和能量收益。作为异构参数架构,CSA的实施例可以容易地适于所有计算用途。例如,CSA的移动版本可能被调谐到32比特,然而机器学习集中阵列可能以大量的矢量化8位乘法单元为特色。CSA的实施例的主要优势是高性能和极端的能量效率、与范围从超级计算和数据中心到物联网的所有形式的计算相关的特性。
在一个实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换通信网络,所述分组交换通信网络用于根据数据流图在处理元件之间的所述空间阵列内路由数据以执行所述数据流图的第一数据流操作,其中,所述分组交换通信网络还包括用于执行所述数据流图的第二数据流操作的多个网络数据流端点电路。所述多个网络数据流端点电路中的一网络数据流端点电路可以包括:用于从所述分组交换通信网络接收输入数据的网络入口缓冲器;以及空间阵列出口缓冲器,所述空间阵列出口缓冲器用于根据对所述输入数据的所述第二数据流操作来向所述处理元件的空间阵列输出结果数据。所述空间阵列出口缓冲器可以基于所述网络数据流端点电路内的调度器监视所述分组交换通信网络来输出所述结果数据。所述空间阵列出口缓冲器可以基于所述网络数据流端点电路内的所述调度器监视所述分组交换通信网络的多个网络虚拟通道中的所选通道来输出所述结果数据。所述多个网络数据流端点电路中的一网络数据流端点电路可以包括用于从所述空间阵列接收控制数据的空间阵列入口缓冲器,所述控制数据使从所述分组交换通信网络接收到输入数据的所述网络数据流端点电路的网络入口缓冲器根据对所述输入数据的所述第二数据流操作和所述控制数据来向所述处理元件的空间阵列输出结果数据。当来自所述处理元件的空间阵列的下游处理元件的反压值指示所述下游处理元件中的储存器不可用于所述网络数据流端点电路的所述输出时,所述多个网络数据流端点电路中的一网络数据流端点电路可以从所述网络数据流端点电路的空间阵列出口缓冲器停止所述第二数据流操作的结果数据的输出。所述多个网络数据流端点电路中的一网络数据流端点电路可以发送反压值以在网络入口缓冲器不可用时停止源将所述分组交换通信网络上的输入数据发送到所述网络数据流端点电路的网络入口缓冲器中。所述处理元件的空间阵列可以包括:多个处理元件;以及用于接收包括多个节点的所述数据流图的输入的所述多个处理元件之间的互连网络,其中,所述数据流图将被叠加到所述互连网络、所述多个处理元件和所述多个网络数据流端点中,其中每个节点被表示为所述多个处理元件和所述多个网络数据流端点电路中的任何一个中的数据流操作符,并且所述多个处理元件和所述多个网络数据流端点电路将通过到达所述多个处理元件和所述多个网络数据流端点电路的所述数据流操作符中的每一个的传入操作数集来执行操作。所述处理元件的空间阵列可以包括用于根据所述数据流图在处理元件之间的所述空间阵列内传输所述数据的电路交换网络。
在另一实施例中,一种方法包括:提供处理元件的空间阵列;利用分组交换通信网络路来根据数据流图在处理元件之间的所述空间阵列内路由数据;利用所述处理元件来执行所述数据流图的第一数据流操作;以及利用所述分组交换通信网络的多个网络数据流端点电路来执行所述数据流图的第二数据流操作。所述执行所述第二数据流操作可以包括:利用所述多个网络数据流端点电路中的一网络数据流端点电路的网络入口缓冲器从所述分组交换通信网络接收输入数据;以及根据对所述输入数据的所述第二数据流操作来从所述网络数据流端点电路的空间阵列出口缓冲器向所述处理元件的空间阵列输出结果数据。所述输出可以包括基于所述网络数据流端点电路内的调度器监视所述分组交换通信网络来输出所述结果数据。所述输出可以包括基于所述网络数据流端点电路内的所述调度器监视所述分组交换通信网络的多个网络虚拟通道中的所选通道来输出所述结果数据。所述执行所述第二数据流操作可以包括:利用所述多个网络数据流端点电路中的一网络数据流端点电路的空间阵列入口缓冲器从所述空间阵列接收控制数据;以及将所述网络数据流端点电路配置成使从所述分组交换通信网络接收到输入数据的所述网络数据流端点电路的网络入口缓冲器根据对所述输入数据的所述第二数据流操作和所述控制数据来向所述处理元件的空间阵列输出结果数据。所述执行所述第二数据流操作可以包括:当来自所述处理元件的空间阵列的下游处理元件的反压值指示所述下游处理元件中的储存器不可用于所述网络数据流端点电路的所述输出时从所述多个网络数据流端点电路中的一网络数据流端点电路的空间阵列出口缓冲器停止所述第二数据流操作的输出。所述执行所述第二数据流操作可以包括从所述多个网络数据流端点电路中的一网络数据流端点电路发送反压值以在网络入口缓冲器不可用时停止源将所述分组交换通信网络上的输入数据发送到所述网络数据流端点电路的网络入口缓冲器中。所述路由、执行所述第一数据流操作和执行所述第二数据流操作可以包括:接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理元件的空间阵列和所述多个网络数据流端点电路中,其中每个节点被表示为所述处理元件和所述多个网络数据流端点电路中的任何一个中的数据流操作符;以及当传入操作数集到达所述处理元件和所述多个网络数据流端点电路的所述数据流操作符中的每一个时利用所述处理元件来执行所述第一数据流操作并且利用所述多个网络数据流端点电路来执行所述第二数据流操作。所述方法可以包括利用所述空间阵列的电路交换网络来根据所述数据流图在处理元件之间的所述空间阵列内传输所述数据。
在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:提供处理元件的空间阵列;利用分组交换通信网络路来根据数据流图在处理元件之间的所述空间阵列内路由数据;利用所述处理元件来执行所述数据流图的第一数据流操作;以及利用所述分组交换通信网络的多个网络数据流端点电路来执行所述数据流图的第二数据流操作。所述执行所述第二数据流操作可以包括:利用所述多个网络数据流端点电路中的一网络数据流端点电路的网络入口缓冲器从所述分组交换通信网络接收输入数据;以及根据对所述输入数据的所述第二数据流操作来从所述网络数据流端点电路的空间阵列出口缓冲器向所述处理元件的空间阵列输出结果数据。所述输出可以包括基于所述网络数据流端点电路内的调度器监视所述分组交换通信网络来输出所述结果数据。所述输出可以包括基于所述网络数据流端点电路内的所述调度器监视所述分组交换通信网络的多个网络虚拟通道中的所选通道来输出所述结果数据。所述执行所述第二数据流操作可以包括:利用所述多个网络数据流端点电路中的一网络数据流端点电路的空间阵列入口缓冲器从所述空间阵列接收控制数据;以及将所述网络数据流端点电路配置成使从所述分组交换通信网络接收到输入数据的所述网络数据流端点电路的网络入口缓冲器根据对所述输入数据的所述第二数据流操作和所述控制数据来向所述处理元件的空间阵列输出结果数据。所述执行所述第二数据流操作可以包括:当来自所述处理元件的空间阵列的下游处理元件的反压值指示所述下游处理元件中的储存器不可用于所述网络数据流端点电路的所述输出时从所述多个网络数据流端点电路中的一网络数据流端点电路的空间阵列出口缓冲器停止所述第二数据流操作的输出。所述执行所述第二数据流操作可以包括从所述多个网络数据流端点电路中的一网络数据流端点电路发送反压值以在网络入口缓冲器不可用时停止源将所述分组交换通信网络上的输入数据发送到所述网络数据流端点电路的网络入口缓冲器中。所述路由、执行所述第一数据流操作和执行所述第二数据流操作可以包括:接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理元件的空间阵列和所述多个网络数据流端点电路中,其中每个节点被表示为所述处理元件和所述多个网络数据流端点电路中的任何一个中的数据流操作符;以及当传入操作数集到达所述处理元件和所述多个网络数据流端点电路的所述数据流操作符中的每一个时利用所述处理元件来执行所述第一数据流操作并且利用所述多个网络数据流端点电路来执行所述第二数据流操作。所述方法可以包括利用所述空间阵列的电路交换网络来根据所述数据流图在处理元件之间的所述空间阵列内传输所述数据。
在另一实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换通信网络,所述分组交换通信网络用于根据数据流图在处理元件之间的所述空间阵列内路由数据以执行所述数据流图的第一数据流操作,其中,所述分组交换通信网络还包括用于执行所述数据流图的第二数据流操作的装置。
在一个实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;多个处理元件;以及用于接收包括多个节点的数据流图的输入的所述多个处理元件之间的互连网络,其中,所述数据流图将被叠加到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行第二操作。
当来自下游处理元件的反压值指示所述下游处理元件中的储存器不可用于所述处理元件的输出时,所述多个处理元件中的处理元件可以停止执行。所述处理器可以包括流控制路径网络以根据所述数据流图承载所述反压值。数据流令牌可以使来自接收到所述数据流令牌的数据流操作符的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述第二操作可以包括存储器访问并且所述多个处理元件包括将在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前不执行所述存储器访问的存储器访问数据流操作符。所述多个处理元件可以包括第一类型的处理元件和第二不同类型的处理元件。在另一实施例中,一种方法:利用处理器的核心的解码器来将指令解码成解码的指令;利用所述处理器的所述核心的执行单元来执行所述解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的多个处理元件和所述处理器的所述多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符;以及通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。
所述方法可以包括:当来自下游处理元件的反压值指示所述下游处理元件中的储存器不可用于所述处理元件的输出时,停止通过所述多个处理元件中的处理元件的执行。所述方法可以包括根据所述数据流图在流控制路径网络上发送所述反压值。数据流令牌可以使来自接收到所述数据流令牌的数据流操作符的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可以包括:在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前不执行存储器访问,其中,所述第二操作包括所述存储器访问并且所述多个处理元件包括存储器访问数据流操作符。所述方法可以包括提供所述多个处理元件的第一类型的处理元件和第二不同类型的处理元件。在又一个实施例中,一种设备包括:多个处理元件之间的数据路径网络;以及所述多个处理元件之间的流控制路径网络,其中,所述数据路径网络和所述流控制路径网络将接收包括多个节点的数据流图的输入,所述数据流图将被叠加到所述数据路径网络、所述流控制路径网络以及每个节点被表示为多个处理元件中的数据流操作符的所述多个处理元件中,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行第二操作。
所述流控制路径网络可以根据所述数据流图向多个数据流操作符承载反压值。在所述数据路径网络上发送到数据流操作符的数据流令牌可以使来自所述数据流操作符的输出被发送到所述数据路径网络上的所述多个处理元件中的特定处理元件的输入缓冲器。所述数据路径网络可以是静态电路交换网络以根据所述数据流图将所述相应的输入操作数集承载到所述数据流操作符中的每一个。所述流控制路径网络可以从下游处理元件根据所述数据流图来传送反压值以指示所述下游处理元件中的储存器不可用于所述处理元件的输出。所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径可以形成具有反压控制的通道化电路。所述流控制路径网络可以串行地使所述多个处理元件中的至少两个管线化。在另一实施例中,一种方法包括:接收包括多个节点的数据流图的输入;以及将所述数据流图叠加到处理器的多个处理元件、所述多个处理元件之间的数据路径网络和所述多个处理元件之间的流控制路径网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符。
所述方法可以包括根据所述数据流图来利用所述流控制路径网络将反压值承载到多个数据流操作符。所述方法可以包括在所述数据路径网络上向数据流操作符发送数据流令牌以使来自所述数据流操作符的输出被发送到所述数据路径网络上的所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可以包括设置所述数据路径网络的多个开关和/或所述流控制路径网络的多个开关以根据所述数据流图将所述相应的输入操作数集承载到所述数据流操作符中的每一个,其中,所述数据路径网络是静态电路交换网络。所述方法可以包括从下游处理元件根据所述数据流图来利用所述流控制路径网络传送反压值以指示所述下游处理元件中的储存器不可用于所述处理元件的输出。所述方法可以包括利用所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径形成具有反压控制的通道化电路。
在又一个实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;多个处理元件;以及用于接收包括多个节点的数据流图的输入的所述多个处理元件之间的网络装置,其中,所述数据流图将被叠加到所述网络装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行第二操作。
在另一实施例中,一种设备包括:多个处理元件之间的数据路径装置;以及所述多个处理元件之间的流控制路径装置,其中,所述数据路径装置和所述流控制路径装置将接收包括多个节点的数据流图的输入,所述数据流图将被叠加到所述数据路径装置、所述流控制路径装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行第二操作。在一个实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;以及用于接收包括多个节点的数据流图的输入的处理元件阵列,其中,所述数据流图将被叠加到所述处理元件阵列中,其中每个节点被表示为所述处理元件阵列中的数据流操作符,并且所述处理元件阵列将在传入操作数集到达所述处理元件阵列时执行第二操作。
在所述传入操作数集到达所述处理元件阵列并且所述处理元件阵列中的储存器可用于所述第二操作的输出之前,所述处理元件阵列可以不执行所述第二操作。所述处理元件阵列可以包括用于将数据流令牌和控制令牌承载到多个数据流操作符的网络(或(一个或多个)通道)。所述第二操作可以包括存储器访问,并且所述处理元件阵列可以包括在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前将不执行所述存储器访问的存储器访问数据流操作符。每个处理元件可以执行所述数据流图的仅一个或两个操作。在另一实施例中,一种方法包括:利用处理器的核心的解码器来将指令解码成解码的指令;利用所述处理器的所述核心的执行单元来执行所述解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的处理元件阵列中,其中每个节点被表示为所述处理元件阵列中的数据流操作符;以及当传入操作数集到达所述处理元件阵列时利用所述处理元件阵列执行所述数据流图的第二操作。
在所述传入操作数集到达所述处理元件阵列并且所述处理元件阵列中的储存器可用于所述第二操作的输出之前,所述处理元件阵列可以不执行所述第二操作。所述处理元件阵列可以包括将数据流令牌和控制令牌承载到多个数据流操作符的网络。所述第二操作可以包括存储器访问,并且所述处理元件阵列可以包括在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前将不执行所述存储器访问的存储器访问数据流操作符。每个处理元件可以执行所述数据流图的仅一个或两个操作。在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:利用处理器的核心的解码器来将指令解码成解码的指令;利用所述处理器的所述核心的执行单元来执行所述解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的处理元件阵列中,其中每个节点被表示为所述处理元件阵列中的数据流操作符;以及当传入操作数集到达所述处理元件阵列时利用所述处理元件阵列执行所述数据流图的第二操作。
在所述传入操作数集到达所述处理元件阵列并且所述处理元件阵列中的储存器可用于所述第二操作的输出之前,所述处理元件阵列可以不执行所述第二操作。所述处理元件阵列可以包括将数据流令牌和控制令牌承载到多个数据流操作符的网络。所述第二操作可以包括存储器访问,并且所述处理元件阵列包括在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前将不执行所述存储器访问的存储器访问数据流操作符。每个处理元件可以执行所述数据流图的仅一个或两个操作。
在另一实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;以及用于接收包括多个节点的数据流图的输入的装置,其中,所述数据流图将被叠加到所述装置中,其中每个节点被表示为所述装置中的数据流操作符,并且所述装置将在传入操作数集到达所述装置时执行第二操作。在一个实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;多个处理元件;以及用于接收包括多个节点的数据流图的输入的所述多个处理元件之间的互连网络,其中,所述数据流图将被叠加到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将在传入操作数集到达所述多个处理元件时执行第二操作。
所述处理器还可以包括多个配置控制器,每个配置控制器耦合到所述多个处理元件的相应子集,并且每个配置控制器将从储存器加载配置信息并且根据所述配置信息来引起所述多个处理元件的相应子集的耦合。所述处理器可以包括多个配置高速缓存,并且每个配置控制器耦合到相应的配置高速缓存以取出用于所述多个处理元件的相应子集的所述配置信息。由所述执行单元执行的所述第一操作可以将配置信息预取到所述多个配置高速缓存中的每一个中。所述多个配置控制器中的每一个可以包括用于在从至少一个处理元件接收到配置错误消息时引起针对所述多个处理元件的相应子集中的至少一个处理元件的重配置的重配置电路。所述多个配置控制器中的每一个可以是用于在接收到重配置请求消息时引起针对所述多个处理元件的相应子集的重配置的重配置电路,并且禁用与所述多个处理元件的相应子集的通信直到所述重配置完成为止。所述处理器可以包括多个异常聚合器,并且每个异常聚集器耦合到所述多个处理元件的相应子集以从所述多个处理元件的相应子集收集异常并且将所述异常转发到所述核心以便服务。所述处理器可以包括多个提取控制器,每个提取控制器耦合到所述多个处理元件的相应子集,并且每个提取控制器将使来自所述多个处理元件的相应子集的状态数据被保存到存储器。在另一实施例中,一种方法包括:利用处理器的核心的解码器将指令解码成解码的指令;利用所述处理器的所述核心的执行单元执行经解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的多个处理元件和所述处理器的所述多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符;以及当传入操作数集到达所述多个处理元件时利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。
所述方法可以包括:从储存器为所述多个处理元件的相应子集加载配置信息并且根据所述配置信息来引起针对所述多个处理元件的每个相应子集的耦合。所述方法可以包括从多个配置高速缓存中的相应的配置高速缓存取出用于所述多个处理元件的相应子集的所述配置信息。由所述执行单元执行的所述第一操作可以是将所述配置信息预取到所述多个配置高速缓存的每一个中。所述方法可以包括在从至少一个处理元件接收到配置错误消息时引起针对所述多个处理元件的相应子集中的至少一个处理元件的重配置。所述方法可以包括:在接收到重配置请求消息时引起针对所述多个处理元件的相应子集的重配置;以及禁用与所述多个处理元件的相应子集的通信直到所述重配置完成为止。所述方法可以包括:从所述多个处理元件的相应子集收集异常;以及将所述异常转发到所述核心以便服务。所述方法可以包括使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:利用处理器的核心的解码器将指令解码成解码的指令;利用所述处理器的所述核心的执行单元执行经解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的多个处理元件和所述处理器的所述多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符;以及当传入操作数集到达所述多个处理元件时利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述方法可以包括:从储存器中为所述多个处理元件的相应的子集加载配置信息并且根据所述配置信息引起针对所述多个处理元件的每个相应的子集的耦合。所述方法可以包括从多个配置高速缓存中的相应的配置高速缓存中为所述多个处理元件的相应的子集取出所述配置信息。由所述执行单元执行的所述第一操作可以是将所述配置信息预取到所述多个配置高速缓存中的每一个中。所述方法可以包括在从所述至少一个处理元件接收到配置错误消息时引起针对所述多个处理元件的所述相应的子集中的至少一个处理元件的重配置。所述方法可以包括:在接收到重配置请求消息时引起针对所述多个处理元件的所述相应的子集的重配置;以及禁用与所述多个处理元件的所述相应的子集的通信直到所述重配置完成为止。所述方法可以包括:从所述多个处理元件的相应的子集收集异常;以及将所述异常转发到所述核心以用于服务。所述方法可以包括使来自所述多个处理元件的相应的子集的状态数据被保存到存储器。
在另一实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;多个处理元件;用于接收包括多个节点的数据流图的输入的多个处理元件之间的装置,其中所述数据流图将被叠加到所述装置和所述多个处理元件中,其中每个节点表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将在传入操作数集到达所述多个处理元件时执行第二操作。
在一个实施例中,一种设备(例如,处理器)包括:处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的通信网络,其中,所述数据流图将被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符,并且所述处理元件的空间阵列将通过到达所述数据流操作符中的每一个的相应的传入操作数集来执行操作;耦合到所述处理元件的空间阵列和高速缓存存储器的多个请求地址堆电路,所述多个请求地址堆电路中的每个请求地址堆电路将响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述高速缓存存储器中的数据;多个转换后备缓冲器,所述多个转换后备缓冲器包括所述多个请求地址堆电路的每一个中的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;以及包括比所述多个转换后备缓冲器更高级别的转换后备缓冲器的转换后备缓冲器管理器电路,所述转换后备缓冲器管理器电路用于在所述高速缓存存储器中执行第一页面漫游以得到虚拟地址到所述第一转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。所述转换后备缓冲器管理器电路可以与所述第一页面漫游同时地在所述高速缓存存储器中执行第二页面漫游,其中,所述第二页面漫游用于虚拟地址到第二转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述更高级别的转换后备缓冲器中存储来自所述第二页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第二请求地址堆电路中的所述第二转换后备缓冲器。在所述第一转换后备缓冲器中接收所述物理地址可以使所述第一请求地址堆电路在所述高速缓存存储器中的所述物理地址上针对对来自所述处理元件的空间阵列的数据访问的请求执行数据访问。所述转换后备缓冲器管理器电路可以在所述更高级别的转换后备缓冲器中插入针对所述虚拟地址在所述第一转换后备缓冲器和所述更高级别的转换后备缓冲器中的输入的未命中的指示符以在所述第一页面漫游期间防止针对所述虚拟地址的输入的附加页面漫游。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使所述更高级别的转换后备缓冲器中的所述映射无效,并且向仅所述多个请求地址堆电路的包括相应的转换后备缓冲器中的所述映射的副本的那些发送否决消息,其中,所述多个请求地址堆电路的那些中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使所述更高级别的转换后备缓冲器中的所述映射无效,并且向所述多个请求地址堆电路中的全部发送否决消息,其中,所述多个请求地址堆电路中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。
在另一实施例中,一种方法包括:将包括多个节点的数据流图的输入叠加到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符;将多个请求地址堆电路耦合到所述处理元件的空间阵列和高速缓存存储器,其中所述多个请求地址堆电路中的每个请求地址堆电路响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述高速缓存存储器中的数据;将针对虚拟地址的输入的物理地址的输出提供到多个转换后备缓冲器中的一转换后备缓冲器中,所述多个转换后备缓冲器包括所述多个请求地址堆电路中的每一个中的转换后备缓冲器;将包括比所述多个转换后备缓冲器更高级别的转换后备缓冲器的转换后备缓冲器管理器电路耦合到所述多个请求地址堆电路和所述高速缓存存储器;以及利用所述转换后备缓冲器管理器电路在所述高速缓存存储器中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。所述方法可以包括与所述第一页面漫游同时地利用所述转换后备缓冲器管理器电路在所述高速缓存存储器中执行第二页面漫游,其中,所述第二页面漫游用于虚拟地址到第二转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,并且在所述更高级别的转换后备缓冲器中存储来自所述第二页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第二请求地址堆电路中的所述第二转换后备缓冲器。所述方法可以包括:使所述第一请求地址堆电路响应于在所述第一转换后备缓冲器中接收到所述物理地址而在所述高速缓存存储器中的所述物理地址上针对对来自所述处理元件的空间阵列的数据访问的请求执行数据访问。所述方法可以包括利用所述转换后备缓冲器管理器电路在所述更高级别的转换后备缓冲器中插入针对所述虚拟地址在所述第一转换后备缓冲器和所述更高级别的转换后备缓冲器中的输入的未命中的指示符以在所述第一页面漫游期间防止针对所述虚拟地址的输入的附加页面漫游。所述方法可以包括利用所述转换后备缓冲器管理器电路从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使所述更高级别的转换后备缓冲器中的所述映射无效,并且向仅所述多个请求地址堆电路的包括相应的转换后备缓冲器中的所述映射的副本的那些发送否决消息,其中,所述多个请求地址堆电路的那些中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。所述方法可以包括利用所述转换后备缓冲器管理器电路从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使所述更高级别的转换后备缓冲器中的所述映射无效,以及向所述多个请求地址堆电路中的全部发送否决消息,其中,所述多个请求地址堆电路中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。
在另一实施例中,一种设备包括:处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的通信网络,其中,所述数据流图将被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符,并且所述处理元件的空间阵列将通过到达所述数据流操作符中的每一个的相应的传入操作数集来执行操作;耦合到所述处理元件的空间阵列和多个高速缓存存储器存储体的多个请求地址堆电路,所述多个请求地址堆电路中的每个请求地址堆电路将响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述多个高速缓存存储器存储体(例如,中的每一个)中的数据;多个转换后备缓冲器,所述多个转换后备缓冲器包括所述多个请求地址堆电路的每一个中的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;多个比所述多个转换后备缓冲器更高级别的转换后备缓冲器,其包括所述多个高速缓存存储器存储体中的每一个中的更高级别的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;以及转换后备缓冲器管理器电路,所述转换后备缓冲器管理器电路用于在所述多个高速缓存存储器存储体中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到第一更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第一更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述第一更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。所述转换后备缓冲器管理器电路可以与所述第一页面漫游同时地在所述多个高速缓存存储器存储体中执行第二页面漫游,其中,所述第二页面漫游用于虚拟地址到第二转换后备缓冲器中并到第二更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第二更高级别的转换后备缓冲器中存储来自所述第二页面漫游的所述虚拟地址到所述物理地址的映射以使所述第二更高级别的转换后备缓冲器将所述物理地址发送到第二请求地址堆电路中的所述第二转换后备缓冲器。在所述第一转换后备缓冲器中接收所述物理地址可以使所述第一请求地址堆电路在所述多个高速缓存存储器存储体中的所述物理地址上针对对来自所述处理元件的空间阵列的数据访问的请求执行数据访问。所述转换后备缓冲器管理器电路可以在所述第一更高级别的转换后备缓冲器中插入针对所述虚拟地址在所述第一转换后备缓冲器和所述第一更高级别的转换后备缓冲器中的输入的未命中的指示符以在所述第一页面漫游期间防止针对所述虚拟地址的输入的附加页面漫游。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使存储所述映射的更高级别的转换后备缓冲器中的所述映射无效,并且向仅所述多个请求地址堆电路的包括相应的转换后备缓冲器中的所述映射的副本的那些发送否决消息,其中,所述多个请求地址堆电路的那些中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使存储所述映射的更高级别的转换后备缓冲器中的所述映射无效,并且向所述多个请求地址堆电路中的全部发送否决消息,其中,所述多个请求地址堆电路中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。
在又一个实施例中,一种方法包括:将包括多个节点的数据流图的输入叠加到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符;将多个请求地址堆电路耦合到所述处理元件的空间阵列和多个高速缓存存储器存储体,其中所述多个请求地址堆电路中的每个请求地址堆电路响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述多个高速缓存存储器存储体中的数据。
将针对虚拟地址的输入的物理地址的输出提供到包括所述多个请求地址堆电路中的每一个中的转换后备缓冲器的多个转换后备缓冲器中的转换后备缓冲器中;将针对虚拟地址的输入的物理地址的输出提供到包括所述多个高速缓存存储器存储体中的每一个中的更高级别的转换后备缓冲器的比所述多个转换后备缓冲器更高级别的多个更高级别的转换后备缓冲器中的更高级别的转换后备缓冲器中;将转换后备缓冲器管理器电路耦合到所述多个请求地址堆电路和所述多个高速缓存存储器存储体;以及利用所述转换后备缓冲器管理器电路在所述多个高速缓存存储器存储体中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到第一更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第一更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述第一更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。所述方法可以包括与所述第一页面漫游同时地利用所述转换后备缓冲管理器电路在所述多个高速缓存存储器存储体中执行第二页面漫游,其中,所述第二页面漫游用于虚拟地址到第二转换后备缓冲器中并到第二更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第二更高级别的转换后备缓冲器中存储来自所述第二页面漫游的所述虚拟地址到所述物理地址的映射以使所述第二更高级别的转换后备缓冲器将所述物理地址发送到第二请求地址堆电路中的所述第二转换后备缓冲器。所述方法可以包括使所述第一请求地址堆电路响应于在所述第一转换后备缓冲器中接收到所述物理地址而在所述多个高速缓存存储器存储体中的所述物理地址上针对对来自所述处理元件的空间阵列的数据访问的请求执行数据访问。所述方法可以包括利用所述转换后备缓冲器管理器电路在所述第一更高级别的转换后备缓冲器中插入针对所述虚拟地址在所述第一转换后备缓冲器和所述第一更高级别的转换后备缓冲器中的输入的未命中的指示符以在所述第一页面漫游期间防止针对所述虚拟地址的输入的附加页面漫游。所述方法可以包括利用所述转换后备缓冲器管理器电路从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使存储所述映射的更高级别的转换后备缓冲器中的所述映射无效,并且向仅所述多个请求地址堆电路的包括相应的转换后备缓冲器中的所述映射的副本的那些发送否决消息,其中,所述多个请求地址堆电路的那些中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。所述方法可以包括利用所述转换后备缓冲器管理器电路从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使存储所述映射的更高级别的转换后备缓冲器中的所述映射无效,并且向所述多个请求地址堆电路中的全部发送否决消息,其中,所述多个请求地址堆电路中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。
在另一实施例中,一种系统包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的通信网络,其中,所述数据流图将被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符,并且所述处理元件的空间阵列将通过到达所述数据流操作符中的每一个的相应的传入操作数集来执行第二操作;耦合到所述处理元件的空间阵列和高速缓存存储器的多个请求地址堆电路,所述多个请求地址堆电路中的每个请求地址堆电路将响应于对来自所述处理元件的空间数组的数据访问的请求而访问所述高速缓存存储器中的数据;多个转换后备缓冲器,所述多个转换后备缓冲器包括所述多个请求地址堆电路的每一个中的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;以及包括比所述多个转换后备缓冲器更高级别的转换后备缓冲器的转换后备缓冲器管理器电路,所述转换后备缓冲器管理器电路用于在所述高速缓存存储器中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。所述转换后备缓冲器管理器电路可以与所述第一页面漫游同时地在所述高速缓存存储器中执行第二页面漫游,其中,所述第二页面漫游用于虚拟地址到第二转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述更高级别的转换后备缓冲器中存储来自所述第二页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第二请求地址堆电路中的所述第二转换后备缓冲器。在所述第一转换后备缓冲器中接收所述物理地址可以使所述第一请求地址堆电路在所述高速缓存存储器中的所述物理地址上针对对来自所述处理元件的空间阵列的数据访问的请求执行数据访问。所述转换后备缓冲器管理器电路可以在所述更高级别的转换后备缓冲器中插入针对所述虚拟地址在所述第一转换后备缓冲器和所述更高级别的转换后备缓冲器中的输入的未命中的指示符以在所述第一页面漫游期间防止针对所述虚拟地址的输入的附加页面漫游。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使所述更高级别的转换后备缓冲器中的所述映射无效,并且向仅所述多个请求地址堆电路的包括相应的转换后备缓冲器中的所述映射的副本的那些发送否决消息,其中,所述多个请求地址堆电路的那些中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使所述更高级别的转换后备缓冲器中的所述映射无效,并且向所述多个请求地址堆电路中的全部发送否决消息,其中,所述多个请求地址堆电路中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。
在又一个实施例中,一种系统包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的通信网络,其中,所述数据流图将被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符,并且所述处理元件的空间阵列将通过到达所述数据流操作符中的每一个的相应的传入操作数集来执行第二操作;耦合到所述处理元件的空间阵列和多个高速缓存存储器存储体的多个请求地址堆电路,所述多个请求地址堆电路中的每个请求地址堆电路将响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述多个高速缓存存储器存储体(例如,中的每一个)中的数据;多个转换后备缓冲器,所述多个转换后备缓冲器包括所述多个请求地址堆电路的每一个中的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;多个比所述多个转换后备缓冲器更高级别的转换后备缓冲器,其包括所述多个高速缓存存储器存储体中的每一个中的更高级别的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;以及转换后备缓冲器管理器电路,所述转换后备缓冲器管理器电路用于在所述多个高速缓存存储器存储体中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到第一更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第一更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述第一更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。所述转换后备缓冲器管理器电路可以与所述第一页面漫游同时地在所述多个高速缓存存储器存储体中执行第二页面漫游,其中,所述第二页面漫游用于虚拟地址到第二转换后备缓冲器中并到第二更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第二更高级别的转换后备缓冲器中存储来自所述第二页面漫游的所述虚拟地址到所述物理地址的映射以使所述第二更高级别的转换后备缓冲器将所述物理地址发送到第二请求地址堆电路中的所述第二转换后备缓冲器。在所述第一转换后备缓冲器中接收所述物理地址可以使所述第一请求地址堆电路在所述多个高速缓存存储器存储体中的所述物理地址上针对对来自所述处理元件的空间阵列的数据访问的请求执行数据访问。所述转换后备缓冲器管理器电路可以在所述第一更高级别的转换后备缓冲器中插入针对所述虚拟地址在所述第一转换后备缓冲器和所述第一更高级别的转换后备缓冲器中的输入的未命中的指示符以在所述第一页面漫游期间防止针对所述虚拟地址的输入的附加页面漫游。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使存储所述映射的更高级别的转换后备缓冲器中的所述映射无效,并且向仅所述多个请求地址堆电路的包括相应的转换后备缓冲器中的所述映射的副本的那些发送否决消息,其中,所述多个请求地址堆电路的那些中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。所述转换后备缓冲器管理器电路可以从请求实体接收针对物理地址到虚拟地址的映射的否决消息,使存储所述映射的更高级别的转换后备缓冲器中的所述映射无效,并且向所述多个请求地址堆电路中的全部发送否决消息,其中,所述多个请求地址堆电路中的每一个将向所述转换后备缓冲器管理器电路发送确认消息,并且所述转换后备缓冲器管理器电路将在接收到所有确认消息时向所述请求实体发送否决完成确认消息。
在另一实施例中,一种设备(例如,处理器)包括:处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的通信网络,其中,所述数据流图将被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符,并且所述处理元件的空间阵列将通过到达所述数据流操作符中的每一个的相应的传入操作数集来执行操作;耦合到所述处理元件的空间阵列和高速缓存存储器的多个请求地址堆电路,所述多个请求地址堆电路中的每个请求地址堆电路将响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述高速缓存存储器中的数据;多个转换后备缓冲器,所述多个转换后备缓冲器包括所述多个请求地址堆电路的每一个中的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;以及包括比所述多个转换后备缓冲器更高级别的转换后备缓冲器的装置,所述装置用于在所述高速缓存存储器中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到所述更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器。
在又一个实施例中,一种设备包括处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的通信网络,其中,所述数据流图将被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作符,并且所述处理元件的空间阵列将通过到达所述数据流操作符中的每一个的相应的传入操作数集来执行操作;耦合到所述处理元件的空间阵列和多个高速缓存存储器存储体的多个请求地址堆电路,所述多个请求地址堆电路中的每个请求地址堆电路将响应于对来自所述处理元件的空间阵列的数据访问的请求而访问所述多个高速缓存存储器存储体(例如,中的每一个)中的数据;多个转换后备缓冲器,所述多个转换后备缓冲器包括所述多个请求地址堆电路的每一个中的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;多个比所述多个转换后备缓冲器更高级别的转换后备缓冲器,其包括所述多个高速缓存存储器存储体中的每一个中的更高级别的转换后备缓冲器以提供针对虚拟地址的输入的物理地址的输出;以及用于在所述多个高速缓存存储器存储体中执行第一页面漫游以得到虚拟地址到第一转换后备缓冲器中并到第一更高级别的转换后备缓冲器中的输入的未命中以确定映射到所述虚拟地址的物理地址,在所述第一更高级别的转换后备缓冲器中存储来自所述第一页面漫游的所述虚拟地址到所述物理地址的映射以使所述第一更高级别的转换后备缓冲器将所述物理地址发送到第一请求地址堆电路中的所述第一转换后备缓冲器的装置。
在一个实施例中,一种设备包括:经由数据路径耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器的第一处理元件的第一输出缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用的第一反压路径;从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用的第二反压路径;从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中的第一推测路径;从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中的第二推测路径(例如,可选地);以及所述第一处理元件的调度器,其用于:为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,以及在所述第一反压路径指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。当所述第一反压路径和所述第二反压路径两者指示了储存器不可用于所述数据流令牌的所述第一传输尝试时,所述第一处理元件的所述调度器可以为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中并且所述第二推测路径指示所述数据流令牌将被存储在所述第三处理元件的所述第二输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。当所述数据流令牌被存储在所述第二处理元件的所述第一输入缓冲器中时,所述第二处理元件可以在所述第二处理元件的储存器中设置接受比特。在所述数据流令牌被从所述第一处理元件的所述第一输出缓冲器中出队之后,所述第一处理元件的所述调度器可以在所述第二处理元件的所述储存器中清除所述接受比特。从所述第二处理元件的所述第一输入缓冲器起的所述第一推测路径可以包括第一(例如,或)逻辑门,其中第一输入端耦合到所述第一反压路径并且第二输入端耦合到所述接受比特的所述第二处理元件的所述储存器以从所述第二处理元件向所述第一处理元件的所述调度器输出推测值。从所述第三处理元件的所述第二输入缓冲器起的所述第二推测路径可以包括第二(例如,或)逻辑门,其中第一输入端耦合到所述第二反压路径并且第二输入端耦合到所述接受比特的所述第三处理元件的储存器以从所述第三处理元件向所述第一处理元件的所述调度器输出推测值。在所述第二处理元件的所述储存器中设置所述接受比特可以不停止所述第二处理元件对在所述第一输入缓冲器中先前接收的所述数据流令牌的执行。所述第一处理元件的所述调度器可以为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器是可用的并且独立于所述第一推测路径或所述第二推测路径上的任何值时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
在另一实施例中,一种方法包括:经由数据路径将第一处理元件的第一输出缓冲器耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一反压路径上发送第一反压值以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用;在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二反压路径上发送第二反压值以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用;在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一推测路径上发送第一推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中;在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二推测路径上发送第二推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中(例如,可选地);为了所述数据流令牌的第一传输尝试而在所述第一反压路径上的所述第一反压值和所述第二反压路径上的所述第二反压值指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队;以及当所述第一反压路径上的所述第一反压值指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径上的所述第二反压值指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径上的所述第一推测值指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。所述方法可以包括当所述第一反压路径和所述第二反压路径两者都指示了储存器不可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中并且所述第二推测路径指示所述数据流令牌将被存储在所述第三处理元件的所述第二输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。所述方法可以包括在所述数据流令牌被存储在所述第二处理元件的所述第一输入缓冲器中时在所述第二处理元件的储存器中设置接受比特。所述方法可以包括在所述数据流令牌被从所述第一处理元件的所述第一输出缓冲器中出队之后在所述第二处理元件的所述储存器中清除所述接受比特。所述方法可以包括在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的所述第一推测路径上发送所述第一推测值包括将第一(例如,或)逻辑门的第一输入端耦合到所述第一反压路径,将所述第一(例如,或)逻辑门的第二输入端耦合到所述接受比特的所述第二处理元件的所述储存器,并且将所述第一(例如,或)逻辑门的输出端耦合到所述第一处理元件以将所述第一推测值从所述第二处理元件输出到所述第一处理元件。所述方法可以包括,其中所述在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径上发送所述第二推测值包括将第二(例如,或)逻辑门的第一输入端耦合到所述第二反压路径,将所述第二(例如,或)逻辑门的第二输入端耦合到接受比特的所述第三处理元件的储存器,并且将所述第二(例如,或)逻辑门的输出端耦合到所述第一处理元件以将所述第二推测值从所述第三处理元件输出到所述第一处理元件。所述方法可以包括,其中在所述第二处理元件的所述储存器中设置所述接受比特不停止所述第二处理元件对所述第一输入缓冲器中的所述数据流令牌的执行。所述方法可以包括为了所述数据流令牌的所述第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器是可用的并且独立于所述第一推测路径或所述第二推测路径上的任何值时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:经由数据路径将第一处理元件的第一输出缓冲器耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一反压路径上发送第一反压值以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用;在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二反压路径上发送第二反压值以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用;在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一推测路径上发送第一推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中;在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二推测路径上发送第二推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中(例如,可选地);为了所述数据流令牌的第一传输尝试而在所述第一反压路径上的所述第一反压值和所述第二反压路径上的所述第二反压值指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队;以及当所述第一反压路径上的所述第一反压值指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径上的所述第二反压值指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径上的所述第一推测值指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。所述方法可以包括当所述第一反压路径和所述第二反压路径两者都指示了储存器不可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中并且所述第二推测路径指示所述数据流令牌将被存储在所述第三处理元件的所述第二输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。所述方法可以包括在所述数据流令牌被存储在所述第二处理元件的所述第一输入缓冲器中时在所述第二处理元件的储存器中设置接受比特。所述方法可以包括在所述数据流令牌被从所述第一处理元件的所述第一输出缓冲器中出队之后在所述第二处理元件的所述储存器中清除所述接受比特。所述方法可以包括在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的所述第一推测路径上发送所述第一推测值包括将第一(例如,或)逻辑门的第一输入端耦合到所述第一反压路径,将所述第一(例如,或)逻辑门的第二输入端耦合到所述接受比特的所述第二处理元件的所述储存器,并且将所述第一(例如,或)逻辑门的输出端耦合到所述第一处理元件以将所述第一推测值从所述第二处理元件输出到所述第一处理元件。所述方法可以包括,其中所述在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径上发送所述第二推测值包括将第二(例如,或)逻辑门的第一输入端耦合到所述第二反压路径,将所述第二(例如,或)逻辑门的第二输入端耦合到接受比特的所述第三处理元件的储存器,并且将所述第二(例如,或)逻辑门的输出端耦合到所述第一处理元件以将所述第二推测值从所述第三处理元件输出到所述第一处理元件。所述方法可以包括,其中在所述第二处理元件的所述储存器中设置所述接受比特不停止所述第二处理元件对所述第一输入缓冲器中的所述数据流令牌的执行。所述方法可以包括为了所述数据流令牌的所述第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器是可用的并且独立于所述第一推测路径或所述第二推测路径上的任何值时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
在另一实施例中,一种系统包括:处理器核心,所述处理器核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行操作的执行单元;以及耦合到所述处理器核心的加速器,所述加速器包括经由数据路径耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器的第一处理元件的第一输出缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用的第一反压路径;从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用的第二反压路径;从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中的第一推测路径;从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中的第二推测路径(例如,可选地);以及所述第一处理元件的调度器,其用于:为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,以及在所述第一反压路径指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
在又一个实施例中,一种设备包括:经由数据路径耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器的第一处理元件的第一输出缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用的第一反压路径;从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用的第二反压路径;从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中的第一推测路径;从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中的第二推测路径(例如,可选地);并且用于进行以下步骤的装置:为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,以及在所述第一反压路径指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
在另一实施例中,一种设备包括数据存储装置,其存储当由硬件处理器执行时使所述硬件处理器执行本文中所公开的任何方法的代码。设备可以如详细描述中所描述的。方法可以如详细描述中所描述的。
在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括本文中所公开的任何方法的方法。
指令集(例如,用于由核心执行)可以包括一种或多种指令格式。除了别的之外,给定指令格式可以定义用于指定要执行的操作(例如,操作码)和将对其执行操作的(一个或多个)操作数的各种字段(例如,比特的数量、比特的位置)和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常处于相同的顺序,但是至少一些具有不同的比特位置,因为包括有更少的字段)和/或定义成具有不同地解释的给定字段。因此,ISA的每条指令均使用给定指令格式(并且如果被定义,则在该指令格式的指令模板中的给定一个中)来表达并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码以及包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地和源2)的操作数字段的指令格式;并且在指令流中出现ADD指令将在选择特定操作数的操作数字段中具有特定内容。被称为高级矢量扩展(AVX)(AVX1和AVX2)并且使用矢量扩展(VEX)编码方案的SIMD扩展集已被释放和/或发布(例如,参见Intel® 64 and IA-32 Architectures Software DevelopeR’s Manual(架构软件开发者指南), 2017年10月;并且参见Intel® Architecture Instruction Set ExtensionsProgramming Reference(架构指令集扩展编程参考),2017年4月)。
示例性指令格式
可以按照不同的格式具体实现本文中所描述的(一个或多个)指令的实施例。附加地,在下面对示例性系统、架构和管线进行详述。(一个或多个)指令的实施例可以在此类系统、架构和管线上被执行,但是不限于详述的那些。
通用矢量友好指令格式
矢量友好指令格式是适于矢量指令的指令格式(例如,存在特定于矢量运算的某些字段)。虽然描述了通过矢量友好指令格式来支持矢量运算和标量运算的实施例,但是替代实施例仅使用矢量友好指令格式的矢量运算。
图71A-71B是图示了根据本公开的实施例的通用矢量友好指令格式及其指令模板的框图。图71A是图示了根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图;然而图71B是图示了根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。具体地,通用矢量友好指令格式7100是为A类和B类指令模板而定义的,其两者都不包括存储器访问7105指令模板和存储器访问7120指令模板。在矢量友好指令格式的上下文中通用的术语指代不束缚于任何特定指令集的指令格式。
虽然将描述其中矢量友好指令格式支持下列的本公开的实施例:具有32比特(4字节)或64比特(8字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小)(并且因此,64字节矢量由16个双字大小元素或者替换地8个四字大小元素构成);具有16比特(2字节)或8比特(1字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小);具有32比特(4字节)、64比特(8字节)、16比特(2字节)或8比特(1字节)数据元素宽度(或大小)的32字节矢量操作数长度(或大小);以及具有32比特(4字节)、64比特(8字节)、16比特(2字节)或8比特(1字节)数据元素宽度(或大小)的16字节矢量操作数长度(或大小);替代实施例可以支持具有更多的、更少的或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多的、更少的和/或不同的矢量操作数大小(例如,256字节矢量操作数)。
图71A中的A类指令模板包括:1)在无存储器访问7105指令模板内示出了无存储器访问完全舍入控制类型运算7110指令模板和无存储器访问数据变换类型运算7115指令模板;并且2)在存储器访问7120指令模板内示出了存储器访问临时7125指令模板和存储器访问非临时7130指令模板。图71B中的B类指令模板包括:1)在无存储器访问7105指令模板内示出了无存储器访问写入掩码控制、部分舍入控制类型运算7112指令模板和无存储器访问写入掩码控制VSIZE类型运算7117指令模板;并且2)在存储器访问7120指令模板内示出了存储器访问写入掩码控制7127指令模板。
通用矢量友好指令格式7100包括在下面按照图71A-71B中所图示的顺序列举的以下字段。
格式字段7140—此字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,并且因此唯一地标识指令流中的矢量友好指令格式的指令的出现。因此,此字段在对于仅有通用矢量友好指令格式的指令集来说它是不需要的意义上是可选的。
基础运算字段7142—其内容区分不同的基础运算。
寄存器索引字段7144—其内容直接地或者通过地址生成来指定源操作数和目的地操作数的位置,而无论它们在寄存器中还是在存储器中。这些包括足够数量的比特以从PxQ(例如32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。虽然在一个实施例中N可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多的或更少的源和目的地寄存器(例如,可以支持其中这些源中的一个也作为目的地的多达两个源,可以支持其中这些源中的一个也作为目的地的多达三个源,可以支持多达两个源和一个目的地)。
修饰符字段7146—其内容区分指定存储器访问的通用矢量指令格式的指令的出现和不指定存储器访问的那些;也就是说,在无存储器访问7105指令模板与存储器访问7120指令模板之间。存储器访问操作读取和/或写入到存储器层次(在一些情况下使用寄存器中的值来指定源和/或目的地地址),然而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中此字段也在三种不同的方式之间进行选择以执行存储器地址计算,但是替代实施例可以支持更多的、更少的或不同的方式来执行存储器地址计算。
扩增运算字段7150—其内容区分除了基础运算之外还要执行各种不同运算中的哪一个运算。此字段是上下文特定的。在本公开的一个实施例中,此字段被划分成类字段7168、α字段7152和β字段7154。扩增运算字段7150允许在单个指令而不是2、3或4个指令中执行公共组运算。
定标字段7160—其内容允许用于存储器地址生成(例如,用于使用2scale * 索引+基址的地址生成)的索引字段的内容的定标实现。
位移字段7162A—其内容被用作存储器地址生成(例如,用于使用2scale * 索引+基址+位移的地址生成)的一部分。
位移因子字段7162B(注意的是,位移字段7162A直接在位移因子字段7162B上的并置指示一个或另一个被使用)—其内容被用作地址生成的一部分;它指定将按存储器访问的大小(N)来定标的位移因子—其中N是存储器访问中(例如,用于使用2scale * 索引+基址+定标位移的地址生成)的字节的数量。冗余低位比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(N)以便生成要在计算有效地址时使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段7174(稍后在本文中描述)和数据操纵字段7154C来确定。位移字段7162A和位移因子字段7162B在它们未被用于无存储器访问7105指令模板和/或不同的实施例可以仅实现这两个中的一个或者都不实现的意义上是可选的。
数据元素宽度字段7164—其内容区分许多数据元素宽度中的哪一个将被使用(在一些实施例中用于所有指令;在其他实施例中用于仅一些指令)。此字段在如果支持仅一个数据元素宽度和/或使用操作码的某个方面来支持数据元素宽度则它是不需要的意义上是可选的。
写入掩码字段7170—其内容在每数据元素位置基础上控制目的地矢量操作数中的数据元素位置是否反映基础运算和扩增运算的结果。A类指令模板支持合并写入掩码处理,然而B类指令模板支持合并写入掩码处理和归零写入掩码处理两者。当合并时,矢量掩码允许目的地中的任何元素集在任何操作(由基础运算和扩增运算指定)的执行期间被保护免于更新;在其他一个实施例中,保存对应掩码比特具有0的目的地的每个元素的旧值。相比之下,当归零时矢量掩码允许目的地中的任何元素集在任何操作(由基础运算和扩增运算指定)的执行期间被归零;在一个实施例中,当对应掩码比特具有0值时目的地的元素被设置为0。这个功能性的子集是用于控制正在执行的操作的矢量长度(即,从第一个到最后一个的正在修改的元素的跨度)的能力;然而,被修改的元素不一定是连续的。因此,写入掩码字段7170允许部分矢量运算,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段7170的内容选择许多写入掩码寄存器中的包含要使用的写入掩码的一个(并且因此写入掩码字段7170的内容间接地标识要执行的那个掩码处理)的本公开的实施例,但是替代实施例替代地或附加地允许掩码写入字段7170的内容直接地指定要执行的掩码处理。
立即数字段7172—其内容允许立即数的指定。此字段在它不存在于不支持立即数的通用矢量友好格式的实施方式中并且它不存在于不使用立即数的指令中的意义上是可选的。
类字段7168—其内容区分不同类的指令。参考图71A-B,此字段的内容在A类指令和B类指令之间选择。在图71A-B中,圆角正方形用于指示在字段中存在特定值(例如,分别在图71A-B中用于类字段7168的类别A 7168A和类别B 7168B)。
A类的指令模板
在A类的非存储器访问7105指令模板的情况下,α字段7152被解释为RS字段7152A,其内容区分不同的扩增运算类型中的哪一种类型将被执行(例如,舍入7152A.1和数据变换7152A.2分别被指定用于无存储器访问、舍入类型运算7110和无存储器访问、数据变换类型运算7115指令模板),然而β字段7154区分所指定的类型的运算中的哪一个将被执行。在无存储器访问7105指令模板中,定标字段7160、位移字段7162A和位移定标字段7162B不存在。
无存储器访问指令模板—完全舍入控制类型运算
在无存储器访问完全舍入控制类型运算7110指令模板中,β字段7154被解释为舍入控制字段7154A,其(一个或多个)内容提供静态舍入。虽然在所描述的本公开的实施例中舍入控制字段7154A包括抑制所有浮点异常(SAE)字段7156和舍入运算控制字段7158,但是替代实施例可以支持可以将这些概念两者编码到相同字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入运算控制字段7158)。
SAE字段7156—其内容区分是否禁用异常事件报告;当SAE字段的7156的内容指示抑制被启用时,给定指令不报告任何种类的浮点异常标志并且不产生任何浮点异常处理程序。
舍入运算控制字段7158—其内容区分要执行一组舍入运算中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,舍入运算控制字段7158允许在每指令基础使舍入模式改变。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入运算控制字段7150的内容重载该寄存器值。
无存储器访问指令模板—数据变换类型运算
在无存储器访问数据变换类型运算7115指令模板中,β字段7154被解释为数据变换字段7154B,其内容区分许多数据变换中的哪一个将被执行(例如,无数据变换、混合(swizzle)、广播)。
在A类的存储器访问7120指令模板的情况下,α字段7152被解释为驱逐提示字段7152B,其内容区分驱逐提示中的哪一个将被使用(在图71A中,临时7152B.1和非临时7152B.2是分别为存储器访问临时7125指令模板和存储器访问非临时7130指令模板而指定的),然而β字段7154被解释为数据操纵字段7154C,其内容区分许多数据操纵运算(也被称为基元)中的哪一个将被执行(例如,不操纵;广播;对源的上转换;以及对目的地的下转换)。存储器访问7120指令模板包括定标字段7160,并且可选地包括位移字段7162A或位移定标字段7162B。
矢量存储器指令利用转换支持来执行从存储器的矢量加载和到存储器的矢量存储。与规则矢量指令一样,矢量存储器指令以逐数据元素方式转移来自/到存储器的数据,其中被实际地转移的元素通过被选择作为写入掩码的矢量掩码的内容来规定。
存储器访问指令模板—临时
临时数据是很可能被足够快重用以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
存储器访问指令模板—非临时
非临时数据是不太可能被足够快重用以受益于在第一级高速缓存中高速缓存的数据并且应该被优先考虑驱逐。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
B类的指令模板
在B类的指令模板的情况下,α字段7152被解释为写入掩码控制(Z)字段7152C,其内容区分通过写入掩码字段7170控制的写入掩码处理应该是合并还是归零。
在B类的非存储器访问7105指令模板的情况下,β字段7154的一部分被解释为RL字段7157A,其内容区分不同的扩增运算类型中的哪一种将被执行(例如,舍入7157A.1和矢量长度(VSIZE)7157A.2是分别为无存储器访问、写入掩码控制、部分舍入控制类型运算7112指令模板和无存储器访问、写入掩码控制、VSIZE类型运算7117指令模板而指定的),然而β字段7154的其余部分区分所指定的类型的运算中的哪一个将被执行。在无存储器访问7105指令模板中,定标字段7160、位移字段7162A和位移定标字段7162B不存在。
在无存储器访问、写入掩码控制、部分舍入控制类型运算7110指令模板中,β字段7154的其余部分被解释为舍入运算字段7159A并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不产生任何浮点异常处理程序)。
舍入运算控制字段7159A—就像舍入运算控制字段7158一样,其内容区分要执行一组舍入运算中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,舍入运算控制字段7159A允许在每指令基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入运算控制字段7150的内容重载该寄存器值。
在无存储器访问、写入掩码控制、VSIZE类型运算7117指令模板中,β字段7154的其余部分被解释为矢量长度字段7159B,其内容区分许多数据矢量长度中的哪一个将被执行(例如,128、256或512字节)。
在B类的存储器访问7120指令模板的情况下,β字段7154的一部分被解释为广播字段7157B,其内容区分广播类型数据操纵运算是否将被执行,然而β字段7154的其余部分被解释为矢量长度字段7159B。存储器访问7120指令模板包括定标字段7160,并且可选地包括位移字段7162A或位移定标字段7162B。
关于通用矢量友好指令格式7100,完整操作码字段7174被示出为包括格式字段7140、基础运算字段7142和数据元素宽度字段7164。虽然示出了其中完整操作码字段7174包括所有这些字段的一个实施例,但是完整操作码字段7174在不支持所有这些字段的实施例中包括不到所有这些字段的字段。完整操作码字段7174提供操作码(操作码)。
扩展运算字段7150、数据元素宽度字段7164和写入掩码字段7170允许以通用矢量友好指令格式在每指令基础上指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建键入指令,因为它们允许基于不同的数据元素宽度应用掩码。
在A类和B类内找到的各种指令模板在不同情形下是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同的核心可以支持仅A类、仅B类或两类。例如,意在供通用计算使用的高性能通用乱序核心可以支持仅B类,主要意在供图形和/或科学(吞吐量)计算使用的核心可支持仅A类,并且意在供两者使用的核心可以支持两者(当然,具有来自两类的模板和指令而非来自两类的所有模板和指令的某种混合的核心在本发明的范围内)。另外,单个处理器可以包括多个核心,其中的全部都支持相同的类或者其中不同的核心支持不同的类。例如,在具有单独的图形和通用核心的处理器中,主要意在供图形和/或科学计算使用的图形核心中的一个可以支持仅A类,然而通用核心中的一个或多个可以是具有意在供支持仅B类的通用计算使用的乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可以包括支持A类和B类两者的一个以上通用顺序或乱序核心。当然,也可在本公开的不同实施例中以其它类实现来自一个类的特征。用高级语言编写的程序将被转换(例如,及时编译或静态地编译)成各种不同的可执行形式,包括:1)仅具有由目标处理器支持以供执行的(一个或多个)类的指令的形式;或者2)具有使用所有类的指令的不同组合编写的替代例行程序并且具有选择要基于由当前正在执行代码的处理器所支持的指令执行的例行程序的控制流代码的形式。
示例性具体矢量友好指令格式
图72是图示了根据本公开的实施例的示例性具体矢量友好指令格式的框图。图72示出了在它指定字段的位置、大小、解释和顺序以及用于那些字段中的一些的值的意义上特定的具体矢量友好指令格式7200。具体矢量友好指令格式7200可以用于扩展x86指令集,并且因此一些字段与在现有x86指令集及其扩展(例如,AVX)中使用的那些字段类似或相同。这种格式保持与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示了来自图71的字段映射到来自图72的字段中。
应该理解的是,尽管出于说明性目的在通用矢量友好指令格式7100的上下文中参考具体矢量友好指令格式7200对本公开的实施例进行描述,然而除非在要求的情况下,否则本公开不限于具体矢量友好指令格式7200。例如,通用矢量友好指令格式7100为各种字段设想了各种可能的大小,同时具体矢量友好指令格式7200被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段7164被图示为具体矢量友好指令格式7200中的一个比特字段,但是本公开不受如此限制(即,通用矢量友好指令格式7100设想了数据元素宽度字段7164的其他大小)。
通用矢量友好指令格式7100包括在下面按照图72A中图示的顺序列举的以下字段。
EVEX前缀(字节0-3)7202—被以四字节形式编码。
格式字段7140(EVEX字节0,比特[7:0])—第一字节(EVEX字节0)是格式字段7140并且它包含0x62(用于在本公开的一个实施例中区分矢量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的许多比特字段。
REX字段7205(EVEX字节1,比特[7-5])—由EVEX.R比特字段(EVEX字节1,比特[7]-R)、EVEX.X比特字段(EVEX字节1,比特[6]-X)和7157BEX字节1、比特[5]-B)构成。EVEX.R、EVEX.X和EVEX.B比特字段提供与所对应的VEX比特字段相同的功能性,并且使用1s补码形式来编码,即ZMM0被编码为1611B,ZMM15被编码为0000B。指令的其他字段对如本领域已知的寄存器索引的低三个比特(rrr,xxx和bbb)进行编码,使得可以通过加上EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段7110—这是REX’字段7110的第一部分并且是用于对扩展32寄存器集的上部16个或下部16个进行编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在本公开的一个实施例中,这个比特以及如在下面所指示的其他比特被以比特反转格式存储以(在众所周知的x86 32位模式下)与BOUND指令区分开,所述BOUND指令的真实操作码字节是62,但是在MOD R/M字段(在下面描述)中不接受MOD字段中的值11;本公开的替代实施例不以反转格式存储这个比特和在下面的其他指示的比特。值1用于对低16个寄存器进行编码。换句话说,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR而形成的。
操作码映射字段7215(EVEX字节1,位[3:0]-mmmm)—其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段7164(EVEX字节2,比特[7]-W)—通过表示法EVEX.W来表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。
EVEX.vvvv 7220(EVEX字节2,比特[6:3]-vvvv)—EVEX.vvvv的作用可以包括下列的:1)EVEX.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码并且对于具有2个或更多个源操作数的指令来说有效;2)EVEX.vvvv对以1s补码形式为某些矢量移位指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被保留并且应该包含1611b。因此,EVEX.vvvv字段7220对以反转(1s补码)形式存储的第一源寄存器说明符的4个低位比特进行编码。取决于指令,额外不同的EVEX比特字段用于将说明符大小扩展到32个寄存器。
EVEX.U 7168类字段(EVEX字节2,比特[2]-U)—如果EVEX.U = 0,则它指示A类或EVEX.U0;如果EVEX.U = 1,则它指示B类或EVEX.U1。
前缀编码字段7225(EVEX字节2,比特[1:0]-pp)—为基础运算字段提供附加比特。除了以EVEX前缀格式为传统SSE指令提供支持之外,这也具有压缩SIMD前缀的好处(不是需要一字节来表达SIMD前缀,而是EVEX前缀仅需要2个比特)。在一个实施例中,为了支持既以传统格式又以EVEX前缀格式使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时在被提供给解码器的PLA之前被扩展成传统SIMD前缀(所以PLA可在没有修改的情况下执行这些传统指令的传统格式和EVEX格式两者)。尽管较新的指令能直接地使用EVEX前缀编码字段的内容作为操作码扩展,然而某些实施例以类似的方式扩展以得到一致性,但是允许通过这些传统SIMD前缀来指定不同的含义。替代实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
α字段7152(EVEX字节3,比特[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制和EVEX.N;也用α图示)—如先前所描述的,此字段是上下文特定的。
β字段7154(EVEX字节3,比特[6:4]-SSS,也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ图示)—如先前所描述的,此字段是上下文特定的。
REX’字段7110—这个是REX’字段的剩余部分并且是可以用于对扩展32个寄存器集的上部16个或下部16个进行编码的EVEX.V’比特字段(EVEX字节3,比特[3]-V’)。此比特被以比特反转格式存储。值1用于对下部16个寄存器进行编码。换句话说,V’VVVV是通过组合EVEX.V’、EVEX.vvvv而形成的。
写入掩码字段7170(EVEX字节3,比特[2:0]-kkk)—其内容像先前所描述的那样指定写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示写入掩码未被用于特定指令的特殊行为(可以以包括使用硬连线到全一的写入掩码或绕过掩码处理硬件的硬件的各种方式实现这个)。
真实操作码字段7230(字节4)也被称为操作码字节。在此字段中指定操作码的一部分。
MOD R/M字段7240(字节5)包括MOD字段7242、Reg字段7244和R/M字段7246。如先前描述的,MOD字段7242的内容区分存储器访问操作和非存储器访问操作。Reg字段7244的作用可被概括为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展并且不用于对任何指令操作数进行编码。R/M字段7246的作用可以包括下列的:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
定标、索引、基址(SIB)字节(字节6)—如先前描述的,定标字段5450的内容被用于存储器地址生成。SIB.xxx 7254和SIB.bbb 7256—先前已经关于寄存器索引Xxxx和Bbbb参考了这些字段的内容。
位移字段7162A(字节7-10)—当MOD字段7242包含10时,字节7-10是位移字段7162A,并且它工作与传统32位位移(disp32)相同并且以字节粒度工作。
位移因子字段7162B(字节7)—当MOD字段7242包含01时,字节7是位移因子字段7162B。此字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。因为disp8是符号扩展的,所以它仅可在-128字节偏移与127字节偏移之间寻址;在64字节高速缓存行方面,disp8使用可被设置为仅4个真正有用的值-128、-64、0和64的8个比特;因为经常需要更大范围,所以使用disp32;然而,disp32需要4个字节。同disp8和disp32相比,位移因子字段7162B是disp8的重新解释;当使用位移因子字段7162B时,实际位移通过位移因子字段乘以存储器操作数访问的大小(N)的内容来确定。这种类型的位移被称为disp8*N。这减小平均指令长度(用于位移的单个字节但具有大得多的范围)。这种压缩位移基于有效位移是存储器访问的粒度的倍数的假设,并且因此,地址偏移的冗余低位比特不需要被编码。换句话说,位移因子字段7162B取代传统x86指令集8位位移。因此,位移因子字段7162B被以与x86指令集8位移位相同的方式编码(所以ModRM/SIB编码规则没有变化),唯一例外是disp8被重载为disp8*N。换句话说,在编码规则或编码长度方面没有变化,而是仅在由硬件对位移值的解释方面存在变化(这需要按存储器操作数的大小对位移定标以获得逐字节地址偏移)。立即数字段7172像先前所描述的那样操作。
完整操作码字段
图72B是图示了根据本公开的一个实施例的组成完整操作码字段7174的具体矢量友好指令格式7200的字段的框图。具体地,完整操作码字段7174包括格式字段7140、基础运算字段7142和数据元素宽度(W)字段7164。基础运算字段7142包括前缀编码字段7225、操作码映射字段7215和真实操作码字段7230。
寄存器索引字段
图72C是图示了根据本公开的一个实施例的组成寄存器索引字段7144的具体矢量友好指令格式7200的字段的框图。具体地,寄存器索引字段7144包括REX字段7205、REX’字段7210、MODR/M.reg字段7244、MODR/M.r/m字段7246、VVVV字段7220、xxx字段7254和bbb字段7256。
扩增运算字段
图72D是图示了根据本公开的一个实施例的组成扩展运算字段7150的具体矢量友好指令格式7200的字段的框图。当类(U)字段7168包含0时,它表示EVEX.U0(A类7168A);当它包含1时,它表示EVEX.U1(B类7168B)。当U=0并且MOD字段7242包含11(表示无存储器访问操作)时,α字段7152(EVEX字节3,比特[7]-EH)被解释为rs字段7152A。当rs字段7152A包含1(舍入7152A.1)时,β字段7154(EVEX字节3,比特[6:4]-SSS)被解释为舍入控制字段7154A。舍入控制字段7154A包括一位SAE字段7156和二位舍入运算字段7158。当rs字段7152A包含0(数据变换7152A.2)时,β字段7154(EVEX字节3,比特[6:4]-SSS)被解释为三位数据变换字段7154B。当U=0并且MOD字段7242包含00、01或10(表示存储器访问操作)时,β字段7152(EVEX字节3,比特[7]-EH)被解释为驱逐提示(EH)字段7152B并且β字段7154(EVEX字节3,比特[6:4]-SSS)被解释为三位数据操纵字段7154C。
当U=1时,α字段7152(EVEX字节3,比特[7]-EH)被解释为写入掩码控制(Z)字段7152C。当U=1并且MOD字段7242包含11(表示无存储器访问操作)时,β字段7154的一部分(EVEX字节3,比特[4]-S0)被解释为RL字段7157A;当它包含1(舍入7157A.1)时,β字段7154的其余部分(EVEX字节3,比特[6-5]-S2-1)被解释为舍入运算字段7159A,然而当RL字段7157A包含0(VSIZE7157.A2)时β字段7154的其余部分(EVEX字节3,比特[6-5]-S2-1)被解释为矢量长度字段7159B(EVEX字节3,比特[6-5])-L1-0)。当U=1并且MOD字段7242包含00、01或10(表示存储器访问操作)时,β字段7154(EVEX字节3,比特[6:4]-SSS)被解释为矢量长度字段7159B(EVEX字节3,比特[6-5]-L1-0)和广播字段7157B(EVEX字节3,比特[4]-B)。
示例性寄存器架构
图73是根据本公开的一个实施例的寄存器架构7300的框图。在所图示的实施例中,存在为512位宽的32个矢量寄存器7310;这些寄存器被称为zmm0至zmm31。低16个zmm寄存器的低位256个比特被叠加在寄存器ymm0-16上。低16个zmm寄存器的低位128个比特(ymm寄存器的低位128个比特)被叠加在寄存器xmm0-15上。具体矢量友好指令格式7200像如下表所图示的那样在这些叠加寄存器堆上操作。
换句话说,矢量长度字段7159B在最大长度与一个或多个其他较短长度之间选择,其中每个这样的较短长度是前一长度的长度的一半;并且没有矢量长度字段7159B的指令模板在最大矢量长度上操作。进一步地,在一个实施例中,具体矢量友好指令格式7200的B类指令模板在封包或标量单/双精度浮点数据和封包或标量整数数据上操作。标量运算是对zmm/ymm/xmm寄存器中的最低位数据元素位置执行的运算;较高位数据元素位置保持与它们在指令之前相同或者取决于该实施例被归零。
写入掩码寄存器7315—在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每个大小为64位。在供替换的实施例中,写入掩码寄存器7315的大小是16位。如先前描述的,在本公开的一个实施例中,矢量掩码寄存器k0不能被用作写入掩码;当将通常指示k0的编码被用于写入掩码时,它选择0xFFFF的硬连线写入掩码,从而针对该指令有效地禁用写入掩码。
通用寄存器7325—在所图示的实施例中,存在连同现有x86寻址模式一起使用来对存储器操作数进行寻址的十六个64位通用寄存器。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来引用。
上面混叠了MMX封包整数平面寄存器堆7350的标量浮点堆栈寄存器堆(x87堆栈)7345—在所图示的实施例中,x87堆栈是用于对使用x87指令集扩展的32/64/80位浮点数据执行标量浮点运算的八元素堆栈;然而MMX寄存器用于对64位封包整数数据执行运算,以及用于为在MMX寄存器与XMM寄存器之间执行的一些运算保持操作数。
本公开的替代实施例可以使用更宽或更窄的寄存器。附加地,本公开的替代实施例可以使用更多的、更少的或不同的寄存器堆和寄存器。
示例性核心架构、处理器和计算机架构
可以以不同的方式、出于不同的目的并且在不同的处理器中实现处理器核心。例如,此类核心的实施方式可以包括:1)意在供通用计算使用的通用顺序核心;2)意在供通用计算使用的高性能通用乱序核心;3)主要意在供图形和/或科学(吞吐量)计算使用的专用核心。不同的处理器的实施方式可以包括:1)CPU,其包括意在供通用计算使用的一个或多个通用顺序核心和/或意在供通用计算使用的一个或多个通用乱序核心;以及2)协处理器,其包括主要意在供图形和/或科学(吞吐量)使用的一个或多个专用核心。此类不同的处理器导致不同的计算机系统架构,其可以包括:1)与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中的单独的芯片上的协处理器;3)与CPU相同的管芯上的协处理器(在此情况下,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者称为专用核心)。以及4)片上系统,其可以在同一管芯上包括所描述的CPU(有时被称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能性。接下来对示例性核心架构进行描述,后面是示例性处理器和计算机架构的描述。
示例性核心架构
顺序和乱序核心框图
图74A是图示了根据本公开的实施例的示例性顺序管线和示例性寄存器重命名乱序发射/执行管线两者的框图。图74B是图示了根据本公开的实施例的要包括在处理器中的顺序架构核心和示例性寄存器重命名乱序发射/执行架构核心两者的示例性实施例的框图。图74A-B中的实线框图示了顺序管线和顺序核心,然而虚线框的可选添加图示了寄存器重命名乱序发射/执行管线和核心。鉴于顺序方面是乱序方面的子集,将描述乱序方面。
在图74A中,处理器管线7400包括取出级7402、长度解码级7404、解码级7406、分配级7408、重命名级7410、调度(也被称为分派或发射)级7412、寄存器读取/存储器读取级7414、执行级7416、写回/存储器写入级7418、异常处理级7422和提交级7424。
图74B示出了包括耦合到执行引擎单元7450的前端单元7430的处理器核心7490,并且前端单元7430和执行引擎单元7450两者都耦合到存储器单元7470。核心7490可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、甚长指令字(VLIW)核心或者混合或替代核心类型。作为又一个选项,核心7490可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元7430包括耦合到指令高速缓存单元7434的分支预测单元7432,所述指令高速缓存单元7434耦合到指令转换后备缓冲器(TLB) 7436,所述指令转换后备缓冲器(TLB) 7436耦合到指令取出单元7438,所述指令取出单元7438耦合到解码单元7440。解码单元7440(或解码器或解码器单元)可以对指令(例如,宏指令)进行解码,并且生成从原始指令解码或者以其他方式反映原始指令或者从原始指令得到的一个或多个微运算、微码入口点、微指令、其他指令或其他控制值作为输出。可以使用各种不同的机制来实现解码单元7440。适合的机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核心7490包括微码ROM或存储用于某些宏指令的微码的其他介质(例如,在解码单元7440中或者以其他方式在前端单元7430内)。解码单元7440耦合到执行引擎单元7450中的重命名/分配器单元7452。
执行引擎单元7450包括耦合到收回单元7454和一组一个或多个调度器单元7456的重命名/分配器单元7452。(一个或多个)调度器单元7456表示任何数量的不同的调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元7456耦合到(一个或多个)物理寄存器堆单元7458。(一个或多个)物理寄存器堆单元7458中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封包整数、封包浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元7458包括矢量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元7458与收回单元7454重叠以图示可以实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)收回寄存器堆;使用(一个或多个)将来堆、(一个或多个)历史缓冲器和(一个或多个)收回寄存器堆;使用寄存器映射和寄存器池等)。收回单元7454和(一个或多个)物理寄存器堆单元7458耦合到(一个或多个)执行集群7460。(一个或多个)执行集群7460包括一组一个或多个执行单元7462和一组一个或多个存储器访问单元7464。执行单元7462可以执行各种运算(例如,移位、加法、减法、乘法)并且可以对各种类型的数据(例如,标量浮点、封包整数、封包浮点、矢量整数、矢量浮点)执行各种运算(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集的许多执行单元,但是其他实施例可以仅包括一个执行单元或全部执行所有功能的多个执行单元。(一个或多个)调度器单元7456、(一个或多个)物理寄存器堆单元7458和(一个或多个)执行集群7460被示为可能是多个,因为某些实施例为某些类型的数据/运算创建单独的管线(例如,标量整数管线、标量浮点/封包整数/封包浮点/矢量整数/矢量浮点管线,和/或各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群的存储器访问管线—并且在单独的存储器访问管线的情况下,实现了其中仅此管线的执行集群具有(一个或多个)存储器访问单元7464的某些实施例)。也应该理解的是,在使用单独的管线的情况下,这些管线中的一个或多个可以是乱序发射/执行而其余部分是顺序发射/执行。
该组存储器访问单元7464耦合到存储器单元7470,所述存储器单元7470包括耦合到数据高速缓存单元7474的数据TLB单元7472,数据高速缓存单元7474耦合到第2级(L2)高速缓存单元7476。在一个示例性实施例中,存储器访问单元7464可以包括加载单元、存储地址单元和存储数据单元,其中的每一个都耦合到存储器单元7470中的数据TLB单元7472。指令高速缓存单元7434还耦合到存储器单元7470中的第2级(L2)高速缓存单元7476。L2高速缓存单元7476耦合到一个或多个其他级高速缓存并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、乱序发射/执行核心架构可以实现管线7400如下:1)指令取出7438执行取出级7402和长度解码级7404;2)解码单元7440执行解码级7406;3)重命名/分配器单元7452执行分配级7408和重命名级7410;4)(一个或多个)调度器单元7456执行调度级7412;5)(一个或多个)物理寄存器堆单元7458和存储器单元7470执行寄存器读取/存储器读取级7414;执行集群7460执行执行级7416;6)存储器单元7470和(一个或多个)物理寄存器堆单元7458执行写回/存储器写入级7418;7)各种单元可能涉及异常处理级7422;以及8)收回单元7454和(一个或多个)物理寄存器堆单元7458执行提交级7424。
核心7490可以支持一个或多个指令集(例如,x86指令集(具有已被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集;加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集(具有诸如NEON的可选附加扩展),包括本文中所描述的(一个或多个)指令。在一个实施例中,核心7490包括用于支持封包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用封包数据来执行由许多多媒体应用使用的运算。
应该理解的是,核心可以支持多线程处理(执行两个或多个并行的运算或线程集),并且可以以各种方式这样做,所述各种方式包括时间分片多线程处理、同时多线程处理(其中单个物理核心为物理核心正在同时多线程处理的线程中的每一个提供逻辑核心)或其组合(例如,此后诸如Intel®超线程技术中的时间分片取出和解码及同时多线程处理)。
虽然在乱序执行的上下文中对寄存器重命名进行描述,但是应该理解的是,可以在顺序架构中使用寄存器重命名。尽管所图示的处理器的实施例也包括单独的指令和数据高速缓存单元7434/7474和共享L2高速缓存单元7476,然而替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级( L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核心和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存可以在核心和/或处理器外部。
具体示例性顺序核心架构
图75A-B图示了更具体示例性顺序核心架构的框图,所述核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与某个固定功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图75A是根据本公开的实施例的单个处理器核心的框图以及其到管芯上互联网络7502和与第2级(L2)高速缓存7504的其本地子集的连接。在一个实施例中,指令解码单元7500支持具有封包数据指令集扩展的x86指令集。L1高速缓存7506允许对存储器高速缓存到标量和矢量单元中的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元7508和矢量单元7510使用单独的寄存器集(分别为标量寄存器7512和矢量寄存器7514)并且在它们之间转移的数据被写入到存储器以及然后从第1级(L1)高速缓存7506读回来,然而本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集或者包括允许在两个寄存器堆之间转移数据而不用被写入和读回的通信路径)。
L2高速缓存7504的本地子集是全局L2高速缓存的被划分成单独的本地子集的一部分,每处理器核心各一个。每个处理器核心具有到它自己的L2高速缓存7504的本地子集的直接访问路径。由处理器核心读取的数据被存储在其L2高速缓存子集7504中并且可与其他处理器核心访问它们自己的本地L2高速缓存子集并行地被快速地访问。由处理器核心写入的数据被存储在它自己的L2高速缓存子集7504中并且必要时被从其他子集刷新。环形网络对于共享数据确保一致性。环形网络是双向的以允许诸如处理器核心、hf高速缓存和其他逻辑块之类的代理在芯片内相互通信。每个环形数据路径是每方向1012位宽。
图75B是根据本公开的实施例的图75A中的处理器核心的一部分的展开图。图75B包括L1高速缓存7504的L1数据高速缓存7506A部分以及有关矢量单元7510和矢量寄存器7514的更多细节。具体地,矢量单元7510是16宽矢量处理单元(VPU)(参见16宽ALU 7528),其执行整数指令、单精度浮点指令和双精度浮点指令中的一种或多种。VPU支持利用混合单元7520混合寄存器输入、利用数字转换单元7522A-B进行数值转换以及利用复制单元7524对存储器输入进行复制。写入掩码寄存器7526允许预测结果得到的矢量写入。
图76是根据本公开的实施例的处理器7600的框图,所述处理器7600可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成显卡。图76中的实线框图示了具有单个核心7602A、系统代理7610、一组一个或多个总线控制器单元7616的处理器7600,然而虚线框的可选添加图示了具有多个核心7602A-N、系统代理单元7610中的一组一个或多个集成存储器控制器单元7614和专用逻辑7608的替代处理器7600。
因此,处理器7600的不同的实施方式可以包括:1)CPU,其具有作为集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心)的专用逻辑7608,以及作为一个或多个通用核心(例如,通用顺序核心、通用乱序核心、两者的组合)的核心7602A-N;2)具有为主要意在供图形和/或科学(吞吐量)使用的大量专用核心的核心7602A-N的协处理器;以及3)具有作为大量通用顺序核心的核心7602A-N的协处理器。因此,处理器7600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元),高吞吐量多集成核心(MIC)协处理器(包括30个或更多个核心)、嵌入式处理器等。可以在一个或多个芯片上实现处理器。处理器7600可以是使用许多工艺技术中的任一种(诸如例如BiCMOS、CMOS或NMOS)的一个或多个衬底的一部分,和/或可以被实现在使用许多工艺技术中的任一种(诸如例如BiCMOS、CMOS或NMOS)的一个或多个衬底上。
存储器层次包括核心内的一级或多级高速缓存、一组一个或多个共享高速缓存单元7606以及耦合到该组集成存储器控制器单元7614的外部存储器(未示出)。该组共享高速缓存单元7606可以包括一个或多个中级高速缓存,诸如第2级(L2)、第3级(L3)、第4级(L4)或其他级别的高速缓存、最后级高速缓存(LLC)和/或其组合。虽然在一个实施例中基于环的互连单元7612互连集成图形逻辑7608、该组共享高速缓存单元7606和系统代理单元7610/(一个或多个)集成存储器控制器单元7614,但是替代实施例可以使用任何数量的众所周知的技术用于互连这些单元。在一个实施例中,在一个或多个高速缓存单元7606与核心7602-A-N之间维持一致性。
在一些实施例中,核心7602A-N中的一个或多个能够多线程处理。系统代理7610包括协调并操作核心7602A-N的那些组件。系统代理单元7610可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括用于调节核心7602A-N和集成图形逻辑7608的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。
核心7602A-N在架构指令集方面可以是同质的或异构的;也就是说,核心7602A-N中的两个或更多个可以能够执行相同的指令集,然而其他核心可以能够仅执行该指令集的子集或不同的指令集。
示例性计算机架构
图77-80是示例性计算机架构的框图。本领域已知用于膝上型计算机、台式机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、开关、嵌入式处理器、数字值处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、手机、便携式媒体播放器、手持装置和各种其他电子装置的其他系统设计和配置也是适合的。一般而言,能够并入如本文中所公开的处理器和/或其他执行逻辑的各种系统或电子装置通常是适合的。
现在参考图77,示出的是依照本公开的一个实施例的系统7700的框图。系统7700可以包括耦合到控制器集线器7720的一个或多个处理器7710、7715。在一个实施例中控制器集线器7720包括图形存储器控制器集线器(GMCH) 7790和输入/输出集线器(IOH) 7750(其可以在单独的芯片上);GMCH 7790包括耦合到存储器7740和协处理器7745的存储器和图形控制器;IOH 7750将输入/输出(I/O)装置7760耦合到GMCH 7790。可替换地,存储器和图形控制器中的一个或两个被集成在处理器内(如本文中所描述的),存储器7740和协处理器7745直接地耦合到处理器7710,并且控制器集线器7720与IOH 7750一起在单个芯片中。存储器7740可以包括编译器模块7740A,例如,以存储当被执行时使处理器执行本公开的任何方法的代码。
附加处理器7715的可选性质在图77中用虚线表示。每个处理器7710、7715可以包括本文中所描述的处理核心中的一个或多个并且可以是处理器7700的某个版本。
存储器7740可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器集线器7720经由多跳总线(诸如前端总线(FSB))、诸如QuickPath 互连(QPI)之类的点对点接口或类似的连接7795与(一个或多个)处理器7710、7715进行通信。
在一个实施例中,协处理器7745是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器7720可以包括集成图形加速器。
就包括架构、微架构、热、功耗特性等的指标的一系列度量而言,在物理资源7710、7715之间可以存在各种差异。
在一个实施例中,处理器7710执行控制一般类型的数据处理运算的指令。嵌入在指令内的可以是协处理器指令。处理器7710将这些协处理器指令识别为应该由附连协处理器7745执行的类型。因此,处理器7710在协处理器总线或其他互连上向协处理器7745发出这些协处理器指令(或表示协处理器指令的控制值)。(一个或多个)协处理器7745接受并执行所接收到的协处理器指令。
现在参考图78,示出的是依照本公开的实施例的第一更具体示例性系统7800的框图。如图78中所示,多处理器系统7800是点对点互连系统,并且包括经由点对点互连7850耦合的第一处理器7870和第二处理器7880。处理器7870和7880中的每一个可以是处理器7600的某个版本。在本公开的一个实施例中,处理器7870和7880分别是处理器7710和7715,然而协处理器7838是协处理器7745。在另一实施例中,处理器7870和7880分别是处理器7710和协处理器7745。
处理器7870和7880被示出为分别包括集成存储器控制器(IMC)单元7872和7882。处理器7870也包括点对点(P-P)接口7876和7878作为其总线控制器单元的一部分;类似地,第二处理器7880包括P-P接口7886和7888。处理器7870、7880可以使用P-P接口电路7878、7888来经由点对点(P-P)接口7850交换信息。如图78中所示,IMC 7872和7882将处理器耦合到相应的存储器,即存储器7832和存储器7834,其可以是在本地附连到相应的处理器的主存储器的各部分。
处理器7870、7880可以各自使用点对点接口电路7876、7894、7886、7898来经由单独的P-P接口7852、7854与芯片组7890交换信息。芯片组7890可以可选地经由高性能接口7839与协处理器7838交换信息。在一个实施例中,协处理器7838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以被包括在任何一个处理器中或者在两个处理器外部,仍然经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中,则任何一个或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组7890可以经由接口7896耦合到第一总线7816。在一个实施例中,第一总线7816可以是外围组件互连(PCI)总线或者诸如PCI Express总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不受如此限制。
如图78中所示,各种I/O装置7814可连同将第一总线7816耦合到第二总线7820的总线桥接器7818一起耦合到第一总线7816。在一个实施例中,一个或多个附加处理器7815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字值处理(DSP)单元)、现场可编程门阵列或任何其他处理器)耦合到第一总线7816。在一个实施例中,第二总线7820可以是低引脚数(LPC)总线。在一个实施例中,各种装置可以耦合到第二总线7820,所述各种装置包括例如键盘和/或鼠标7822、通信装置7827以及诸如磁盘驱动器之类的存储单元7828或可以包括指令/代码和数据7830的其他大容量存储装置。进一步地,音频I/O 7824可以耦合到第二总线7820。注意的是,其他架构是可能的。例如,代替图78的点对点架构,系统可以实现多跳总线或其他这样的架构。
现在参考图79,示出的是依照本公开的实施例的第二更具体示例性系统7900的框图。图78和79中的相似的元件具有相似的附图标记,并且已从图79中省略了图78的某些方面以便避免使图79的其他方面混淆。
图79图示了处理器7870、7880分别可以包括集成存储器和I/O控制逻辑(“CL”)7872和7882。因此,CL 7872、7882包括集成存储器控制器单元并且包括I/O控制逻辑。图79图示了不仅存储器7832、7834耦合到CL 7872、7882,而且I/O装置7914也耦合到控制逻辑7872、7882。传统I/O装置7915耦合到芯片组7890。
现在参考图80,示出的是依照本公开的实施例的SoC 8000的框图。图76中的类似的元件具有相似的附图标记。另外,虚线框是更先进SoC上的可选特征。在图80中,(一个或多个)互连单元8002耦合到:包括一组一个或多个核心202A-N和(一个或多个)共享高速缓存单元7606的应用处理器8010;系统代理单元7610;(一个或多个)总线控制器单元7616;(一个或多个)集成存储器控制器单元7614;可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器的一组一个或多个协处理器8020;静态随机存取存储器(SRAM)单元8030;直接存储器存取(DMA)单元8032;以及用于耦合到一个或多个外部显示器的显示单元8040。在一个实施例中,(一个或多个)协处理器8020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文中所公开的实施例(例如,机制的)可以用硬件、软件、固件或此类实施方式方法的组合加以实现。本公开的实施例可以作为在可编程系统上执行的计算机程序或程序代码被实现,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
程序代码(诸如图78中图示的代码7830)可以被应用于输入指令以执行本文中所描述的功能并且生成输出信息。可以将输出信息以已知方式应用于一个或多个输出装置。出于本申请的目的,处理系统包括具有诸如例如数字值处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级过程或面向对象编程语言加以实现以与处理系统进行通信。视需要,程序代码也可以用汇编或机器语言加以实现。实际上,本文中所描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可能是编译或解释语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,所述代表性指令当由机器读取时使机器制作逻辑以执行本文中所描述的技术。被称为“IP核心”的此类表示可以被存储在有形机器可读介质上并且供应给各种客户或制造设施以加载到实际地做出逻辑或处理器的制作机器中。
此类机器可读存储介质可以包括而不限于由机器或装置制造或形成的物品的非暂时性有形布置,包括诸如硬盘之类的存储介质、包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)和磁光盘的任何其他类型的盘、诸如只读存储器(ROM)之类的半导体装置、诸如动态随机存取存储器(DRAM)之类的随机存取存储器(RAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁或光学卡,或适合于存储电子指令的任何其他类型的介质。
因此,本公开的实施例也包括包含指令或者包含设计数据(诸如硬件描述语言(HDL))的非暂时性有形机器可读介质,所述设计数据定义本文中所描述的结构、电路、设备、处理器和/或系统特征。此类实施例也可以被称为程序产品。
仿真(包括二进制转换、代码变形等)
在一些情况下,可以使用指令转换器来将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或者以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合加以实现。指令转换器可以在处理器上,在处理器外,或者部分在处理器上并且部分在处理器外。
图81是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是可替换地指令转换器可以用软件、固件、硬件或其各种组合加以实现。图81示出了可以使用x86编译器8104来编译高级语言8102的程序以生成可以由具有至少一个x86指令集核心8116的处理器在本机执行的x86二进制代码8106。具有至少一个x86指令集核心8116的处理器表示可通过兼容地执行或者以其他方式处理以下各项来执行与具有至少一个x86指令集核心的Intel处理器基本上相同的功能以便实现与具有至少具有一个x86指令集核心的Intel处理器基本上相同的结果的任何处理器:(1)Intel x86指令集核心的指令集的基本部分或者(2)目标旨在在具有至少一个x86指令集核心的Intel处理器上运行的应用或其他软件的目标代码版本。x86编译器8104表示可操作来生成x86二进制代码8106(例如,目标代码)的编译器,所述x86二进制代码8106可在有或没有附加链接处理的情况下在具有至少一个x86指令集核心8116的处理器上被执行。类似地,图81示出了可以使用替代指令集编译器8108来编译采用高级语言8102的程序以生成替代指令集二进制代码8110,所述替代指令集二进制代码8110可以由没有至少一个x86指令集核心8114的处理器(例如,具有执行加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集的核心的处理器)在本机执行。指令转换器8112用于将x86二进制代码8106转换成可由没有x86指令集核心8114的处理器在本机执行的代码。这种转换的代码不大可能与替代指令集二进制代码8110相同,因为能够做这一点的指令转换器难以制造;然而,经转换的代码将完成一般运算并且由来自替代指令集的指令组成。因此,指令转换器8112表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他过程,允许不具有x86指令集处理器或核心的处理器或其他电子装置执行x86二进制代码8106。
Claims (25)
1.一种设备,其包括:
经由数据路径耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器的第一处理元件的第一输出缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;
从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用的第一反压路径;
从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用的第二反压路径;
从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中的第一推测路径;以及
所述第一处理元件的调度器,其用于:
为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,以及
当所述第一反压路径指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
2.根据权利要求1所述的设备,还包括从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中的第二推测路径,其中,所述第一处理元件的所述调度器将在所述第一反压路径和所述第二反压路径两者都指示了储存器不可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中并且所述第二推测路径指示所述数据流令牌将被存储在所述第三处理元件的所述第二输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
3.根据权利要求2所述的设备,其中,当所述数据流令牌被存储在所述第二处理元件的所述第一输入缓冲器中时,所述第二处理元件将在所述第二处理元件的储存器中设置接受比特。
4.根据权利要求3所述的设备,其中,在所述数据流令牌被从所述第一处理元件的所述第一输出缓冲器中出队之后所述第一处理元件的所述调度器将在所述第二处理元件的所述储存器中清除所述接受比特。
5.根据权利要求3所述的设备,其中,从所述第二处理元件的所述第一输入缓冲器起的所述第一推测路径包括第一逻辑门,其中第一输入端耦合到所述第一反压路径并且第二输入端耦合到所述接受比特的所述第二处理元件的所述储存器以从所述第二处理元件向所述第一处理元件的所述调度器输出推测值。
6.根据权利要求5所述的设备,其中,从所述第三处理元件的所述第二输入缓冲器起的所述第二推测路径包括第二逻辑门,其中第一输入端耦合到所述第二反压路径并且第二输入端耦合到所述接受比特的所述第三处理元件的储存器以从所述第三处理元件向所述第一处理元件的所述调度器输出推测值。
7.根据权利要求3所述的设备,其中,在所述第二处理元件的所述储存器中设置所述接受比特不停止所述第二处理元件对所述第一输入缓冲器中的所述数据流令牌的执行。
8.根据权利要求1至7中的任一项所述的设备,其中,所述第一处理元件的所述调度器将为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器是可用的并且独立于所述第一推测路径或所述第二推测路径上的任何值时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,其中,从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中。
9.一种方法,其包括:
经由数据路径将第一处理元件的第一输出缓冲器耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;
在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一反压路径上发送第一反压值以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用;
在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二反压路径上发送第二反压值以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用;
在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一推测路径上发送第一推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中;
为了所述数据流令牌的第一传输尝试而在所述第一反压路径上的所述第一反压值和所述第二反压路径上的所述第二反压值指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队;以及
当所述第一反压路径上的所述第一反压值指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径上的所述第二反压值指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径上的所述第一推测值指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
10.根据权利要求9所述的方法,还包括在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二推测路径上发送第二推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中,以及,当所述第一反压路径和所述第二反压路径两者都指示了储存器不可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中并且所述第二推测路径指示所述数据流令牌将被存储在所述第三处理元件的所述第二输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
11.根据权利要求10所述的方法,还包括在所述数据流令牌被存储在所述第二处理元件的所述第一输入缓冲器中时在所述第二处理元件的储存器中设置接受比特。
12.根据权利要求11所述的方法,还包括在所述数据流令牌被从所述第一处理元件的所述第一输出缓冲器中出队之后在所述第二处理元件的所述储存器中清除所述接受比特。
13.根据权利要求11所述的方法,其中,所述在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的所述第一推测路径上发送所述第一推测值包括将第一逻辑门的第一输入端耦合到所述第一反压路径,将所述第一逻辑门的第二输入端耦合到所述接受比特的所述第二处理元件的所述储存器,并且将所述第一逻辑门的输出端耦合到所述第一处理元件以将所述第一推测值从所述第二处理元件输出到所述第一处理元件。
14.根据权利要求13所述的方法,其中,所述在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径上发送所述第二推测值包括将第二逻辑门的第一输入端耦合到所述第二反压路径,将所述第二逻辑门的第二输入端耦合到所述接受比特的所述第三处理元件的所述储存器,并且将所述第二逻辑门的输出端耦合到所述第一处理元件以将所述第二推测值从所述第三处理元件输出到所述第一处理元件。
15.根据权利要求11所述的方法,其中,在所述第二处理元件的所述储存器中设置所述接受比特不停止所述第二处理元件对所述第一输入缓冲器中的所述数据流令牌的执行。
16.根据权利要求9至15中的任一项所述的方法,还包括为了所述数据流令牌的所述第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器是可用的并且独立于所述第一推测路径或所述第二推测路径上的任何值时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,其中,从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中。
17.一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:
经由数据路径将第一处理元件的第一输出缓冲器耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;
在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一反压路径上发送第一反压值以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用;
在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二反压路径上发送第二反压值以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用;
在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的第一推测路径上发送第一推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中;
为了所述数据流令牌的第一传输尝试而在所述第一反压路径上的所述第一反压值和所述第二反压路径上的所述第二反压值指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队;以及
当所述第一反压路径上的所述第一反压值指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径上的所述第二反压值指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径上的所述第一推测值指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
18.根据权利要求17所述的非暂时性机器可读介质,其中,所述方法还包括在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的第二推测路径上发送第二推测值以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中,以及,当所述第一反压路径和所述第二反压路径两者都指示了储存器不可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中并且所述第二推测路径指示所述数据流令牌将被存储在所述第三处理元件的所述第二输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
19.根据权利要求18所述的非暂时性机器可读介质,其中,所述方法还包括在所述数据流令牌被存储在所述第二处理元件的所述第一输入缓冲器中时在所述第二处理元件的储存器中设置接受比特。
20.根据权利要求19所述的非暂时性机器可读介质,其中,所述方法还包括在所述数据流令牌被从所述第一处理元件的所述第一输出缓冲器中出队之后在所述第二处理元件的所述储存器中清除所述接受比特。
21.根据权利要求19所述的非暂时性机器可读介质,其中,所述在从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件的所述第一推测路径上发送所述第一推测值包括将第一逻辑门的第一输入端耦合到所述第一反压路径,将所述第一逻辑门的第二输入端耦合到所述接受比特的所述第二处理元件的所述储存器,并且将所述第一逻辑门的输出端耦合到所述第一处理元件以将所述第一推测值从所述第二处理元件输出到所述第一处理元件。
22.根据权利要求21所述的非暂时性机器可读介质,其中,所述在从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径上发送所述第二推测值包括将第二逻辑门的第一输入端耦合到所述第二反压路径,将所述第二逻辑门的第二输入端耦合到所述接受比特的所述第三处理元件的所述储存器,并且将所述第二逻辑门的输出端耦合到所述第一处理元件以将所述第二推测值从所述第三处理元件输出到所述第一处理元件。
23.根据权利要求19所述的非暂时性机器可读介质,其中,在所述第二处理元件的所述储存器中设置所述接受比特不停止所述第二处理元件对所述第一输入缓冲器中的所述数据流令牌的执行。
24.根据权利要求17至23中的任一项所述的非暂时性机器可读介质,其中,所述方法还包括为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器是可用的并且独立于所述第一推测路径或所述第二推测路径上的任何值时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,其中,从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件的所述第二推测路径向所述第一处理元件指示所述数据流令牌何时将被存储在所述第三处理元件的所述第二输入缓冲器中。
25.一种设备,其包括:
经由数据路径耦合到第二处理元件的第一输入缓冲器和第三处理元件的第二输入缓冲器的第一处理元件的第一输出缓冲器,所述数据路径将当在所述第一处理元件的所述第一输出缓冲器中接收到数据流令牌时将所述数据流令牌发送到所述第二处理元件的所述第一输入缓冲器和所述第三处理元件的所述第二输入缓冲器;
从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第二处理元件的所述第一输入缓冲器中不可用的第一反压路径;
从所述第三处理元件的所述第二输入缓冲器到所述第一处理元件以向所述第一处理元件指示储存器何时在所述第三处理元件的所述第二输入缓冲器中不可用的第二反压路径;
从所述第二处理元件的所述第一输入缓冲器到所述第一处理元件以向所述第一处理元件指示所述数据流令牌何时将被存储在所述第二处理元件的所述第一输入缓冲器中的第一推测路径;以及
用于进行以下步骤的装置:
为了所述数据流令牌的第一传输尝试而在所述第一反压路径和所述第二反压路径指示储存器可用于所述第一传输尝试时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队,以及
当所述第一反压路径指示了储存器在所述第一输入缓冲器中不可用于所述数据流令牌的所述第一传输尝试并且所述第二反压路径指示了储存器在所述第二输入缓冲器中可用于所述数据流令牌的所述第一传输尝试时,为了所述数据流令牌的第二传输尝试而在所述第一推测路径指示所述数据流令牌将被存储在所述第二处理元件的所述第一输入缓冲器中时使所述数据流令牌从所述第一处理元件的所述第一输出缓冲器中出队。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/859,473 US10565134B2 (en) | 2017-12-30 | 2017-12-30 | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US15/859473 | 2017-12-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110018850A true CN110018850A (zh) | 2019-07-16 |
Family
ID=66817024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811623622.4A Pending CN110018850A (zh) | 2017-12-30 | 2018-12-28 | 用于可配置空间加速器中的多播的设备、方法和系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10565134B2 (zh) |
CN (1) | CN110018850A (zh) |
DE (1) | DE102018126150A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110807046A (zh) * | 2019-10-31 | 2020-02-18 | 浪潮云信息技术有限公司 | 一种新型分布式newsql数据库智能事务优化方法 |
CN110806897A (zh) * | 2019-10-29 | 2020-02-18 | 中国人民解放军战略支援部队信息工程大学 | 面向多代码粒度的向量并行性发掘方法 |
CN118519960A (zh) * | 2024-07-19 | 2024-08-20 | 深存科技(无锡)有限公司 | 基于阵列结构的融合缓冲架构 |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US11120329B2 (en) * | 2016-05-07 | 2021-09-14 | Intel Corporation | Multicast network and memory transfer optimizations for neural network hardware acceleration |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10474375B2 (en) | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10445451B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator |
US10565134B2 (en) * | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US10445250B2 (en) | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US20190318229A1 (en) * | 2018-04-12 | 2019-10-17 | Advanced Micro Devices, Inc. | Method and system for hardware mapping inference pipelines |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator |
US10459866B1 (en) | 2018-06-30 | 2019-10-29 | Intel Corporation | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10963172B2 (en) * | 2018-08-09 | 2021-03-30 | Apple Inc. | Systems and methods for providing a back pressure free interconnect |
KR102655094B1 (ko) * | 2018-11-16 | 2024-04-08 | 삼성전자주식회사 | 메모리를 공유하는 이종의 프로세서들을 포함하는 스토리지 장치 및 그것의 동작 방법 |
US10761822B1 (en) * | 2018-12-12 | 2020-09-01 | Amazon Technologies, Inc. | Synchronization of computation engines with non-blocking instructions |
US10678724B1 (en) * | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US10860301B2 (en) | 2019-06-28 | 2020-12-08 | Intel Corporation | Control speculation in dataflow graphs |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11900156B2 (en) * | 2019-09-24 | 2024-02-13 | Speedata Ltd. | Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays |
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 |
US12086080B2 (en) | 2020-09-26 | 2024-09-10 | Intel Corporation | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits |
US11126574B1 (en) * | 2021-02-12 | 2021-09-21 | SambaNova Systems, Inc. | Instrumentation profiling for reconfigurable processors |
US11336287B1 (en) | 2021-03-09 | 2022-05-17 | Xilinx, Inc. | Data processing engine array architecture with memory tiles |
US11520717B1 (en) * | 2021-03-09 | 2022-12-06 | Xilinx, Inc. | Memory tiles in data processing engine array |
US12067406B2 (en) | 2021-08-20 | 2024-08-20 | Xilinx, Inc. | Multiple overlays for use with a data processing array |
US11848670B2 (en) * | 2022-04-15 | 2023-12-19 | Xilinx, Inc. | Multiple partitions in a data processing array |
US12079158B2 (en) | 2022-07-25 | 2024-09-03 | Xilinx, Inc. | Reconfigurable neural engine with extensible instruction set architecture |
Family Cites Families (257)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US672177A (en) | 1900-02-08 | 1901-04-16 | William H Metcalf | Inhaler. |
GB8717689D0 (en) | 1987-07-25 | 1987-09-03 | British Petroleum Co Plc | Computers |
US5655096A (en) | 1990-10-12 | 1997-08-05 | Branigin; Michael H. | Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution |
EP1526446A3 (en) | 1991-07-08 | 2007-04-04 | Seiko Epson Corporation | Extensible RISC microprocessor architecture |
JPH0713945A (ja) | 1993-06-16 | 1995-01-17 | Nippon Sheet Glass Co Ltd | 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造 |
US6460131B1 (en) | 1993-08-03 | 2002-10-01 | Xilinx Inc. | FPGA input output buffer with registered tristate enable |
US5574944A (en) | 1993-12-15 | 1996-11-12 | Convex Computer Corporation | System for accessing distributed memory by breaking each accepted access request into series of instructions by using sets of parameters defined as logical channel context |
US5787029A (en) | 1994-12-19 | 1998-07-28 | Crystal Semiconductor Corp. | Ultra low power multiplier |
US5734601A (en) | 1995-01-30 | 1998-03-31 | Cirrus Logic, Inc. | Booth multiplier with low power, high performance input circuitry |
US6020139A (en) | 1995-04-25 | 2000-02-01 | Oridigm Corporation | S-adenosyl methionine regulation of metabolic pathways and its use in diagnosis and therapy |
US5805827A (en) | 1996-03-04 | 1998-09-08 | 3Com Corporation | Distributed signal processing for data channels maintaining channel bandwidth |
US6088780A (en) | 1997-03-31 | 2000-07-11 | Institute For The Development Of Emerging Architecture, L.L.C. | Page table walker that uses at least one of a default page size and a page size selected for a virtual address space to position a sliding field in a virtual address |
US5840598A (en) | 1997-08-14 | 1998-11-24 | Micron Technology, Inc. | LOC semiconductor assembled with room temperature adhesive |
US6604120B1 (en) | 1997-09-04 | 2003-08-05 | Cirrus Logic, Inc. | Multiplier power saving design |
US5930484A (en) * | 1997-09-18 | 1999-07-27 | International Business Machines Corporation | Method and system for input/output control in a multiprocessor system utilizing simultaneous variable-width bus access |
US6212623B1 (en) | 1998-08-24 | 2001-04-03 | Advanced Micro Devices, Inc. | Universal dependency vector/queue entry |
US6141747A (en) | 1998-09-22 | 2000-10-31 | Advanced Micro Devices, Inc. | System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word |
US6314503B1 (en) | 1998-12-30 | 2001-11-06 | Emc Corporation | Method and apparatus for managing the placement of data in a storage system to achieve increased system performance |
US6295571B1 (en) | 1999-03-19 | 2001-09-25 | Times N Systems, Inc. | Shared memory apparatus and method for multiprocessor systems |
AU3829500A (en) | 1999-04-09 | 2000-11-14 | Clearspeed Technology Limited | Parallel data processing apparatus |
EP1093611A1 (en) | 1999-05-06 | 2001-04-25 | Koninklijke Philips Electronics N.V. | Data processing device, method for executing load or store instructions and method for compiling programs |
US6393536B1 (en) | 1999-05-18 | 2002-05-21 | Advanced Micro Devices, Inc. | Load/store unit employing last-in-buffer indication for rapid load-hit-store |
US6205533B1 (en) | 1999-08-12 | 2001-03-20 | Norman H. Margolus | Mechanism for efficient data access and communication in parallel computations on an emulated spatial lattice |
US7911960B1 (en) | 1999-08-13 | 2011-03-22 | International Business Machines Corporation | Delayed-start method for minimizing internal switch congestion |
US6507947B1 (en) | 1999-08-20 | 2003-01-14 | Hewlett-Packard Company | Programmatic synthesis of processor element arrays |
JP2001109661A (ja) | 1999-10-14 | 2001-04-20 | Hitachi Ltd | キャッシュメモリの割当方法及びオペレーティングシステム及びそのオペレーティングシステムを有するコンピュータシステム |
US6601126B1 (en) | 2000-01-20 | 2003-07-29 | Palmchip Corporation | Chip-core framework for systems-on-a-chip |
US6877044B2 (en) * | 2000-02-10 | 2005-04-05 | Vicom Systems, Inc. | Distributed storage management platform architecture |
US7210025B1 (en) | 2000-04-19 | 2007-04-24 | Uht Augustus K | Automatic and transparent hardware conversion of traditional control flow to predicates |
IL156146A0 (en) | 2000-11-28 | 2003-12-23 | Seachange International Inc | Content/service handling and delivery |
GB2370381B (en) | 2000-12-19 | 2003-12-24 | Picochip Designs Ltd | Processor architecture |
JP2004524617A (ja) | 2001-02-14 | 2004-08-12 | クリアスピード・テクノロジー・リミテッド | クロック分配システム |
US6728945B1 (en) | 2001-02-26 | 2004-04-27 | Cadence Design Systems, Inc. | Behavioral level observability analysis and its applications |
US6553448B1 (en) | 2001-03-01 | 2003-04-22 | 3Com Corporation | Method for unit distance encoding of asynchronous pointers for non-power-of-two sized buffers |
US6725364B1 (en) | 2001-03-08 | 2004-04-20 | Xilinx, Inc. | Configurable processor system |
GB2374242B (en) * | 2001-04-07 | 2005-03-16 | Univ Dundee | Integrated circuit and related improvements |
AU2002344288A1 (en) | 2001-05-25 | 2002-12-09 | Annapolis Micro Systems, Inc. | Method and apparatus for modeling dataflow systems and realization to hardware |
US20020184291A1 (en) | 2001-05-31 | 2002-12-05 | Hogenauer Eugene B. | Method and system for scheduling in an adaptable computing engine |
US7305492B2 (en) | 2001-07-06 | 2007-12-04 | Juniper Networks, Inc. | Content service aggregation system |
US20030023830A1 (en) | 2001-07-25 | 2003-01-30 | Hogenauer Eugene B. | Method and system for encoding instructions for a VLIW that reduces instruction memory requirements |
US6874079B2 (en) | 2001-07-25 | 2005-03-29 | Quicksilver Technology | Adaptive computing engine with dataflow graph based sequencing in reconfigurable mini-matrices of composite functional blocks |
US6834383B2 (en) | 2001-11-26 | 2004-12-21 | Microsoft Corporation | Method for binary-level branch reversal on computer architectures supporting predicated execution |
US8412915B2 (en) | 2001-11-30 | 2013-04-02 | Altera Corporation | Apparatus, system and method for configuration of adaptive integrated circuitry having heterogeneous computational elements |
US20030105799A1 (en) | 2001-12-03 | 2003-06-05 | Avaz Networks, Inc. | Distributed processing architecture with scalable processing layers |
JP3912091B2 (ja) * | 2001-12-04 | 2007-05-09 | ソニー株式会社 | データ通信システム、データ送信装置、データ受信装置、および方法、並びにコンピュータ・プログラム |
US7047374B2 (en) | 2002-02-25 | 2006-05-16 | Intel Corporation | Memory read/write reordering |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
JP4193990B2 (ja) | 2002-03-22 | 2008-12-10 | ディーリング,マイケル,エフ. | スケーラブルな高性能3dグラフィックス |
US7987479B1 (en) | 2002-03-28 | 2011-07-26 | Cisco Technology, Inc. | System and method for distribution of content over a network |
US7200735B2 (en) | 2002-04-10 | 2007-04-03 | Tensilica, Inc. | High-performance hybrid processor with configurable execution units |
JP2004005249A (ja) | 2002-05-31 | 2004-01-08 | Fujitsu Ltd | 負荷分散型マルチプロセッサに対する信号振分装置 |
US6986131B2 (en) | 2002-06-18 | 2006-01-10 | Hewlett-Packard Development Company, L.P. | Method and apparatus for efficient code generation for modulo scheduled uncounted loops |
US20040001458A1 (en) | 2002-06-27 | 2004-01-01 | Motorola, Inc. | Method and apparatus for facilitating a fair access to a channel by participating members of a group communication system |
US7486678B1 (en) | 2002-07-03 | 2009-02-03 | Greenfield Networks | Multi-slice network processor |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
US6986023B2 (en) | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
US7181578B1 (en) | 2002-09-12 | 2007-02-20 | Copan Systems, Inc. | Method and apparatus for efficient scalable storage management |
US6983456B2 (en) | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
US7047370B1 (en) | 2003-01-14 | 2006-05-16 | Cisco Technology, Inc. | Full access to memory interfaces via remote request |
WO2004114577A2 (en) | 2003-06-18 | 2004-12-29 | Centillium Communications, Inc. | Event scheduling for multi-port xdsl transceivers |
US7714870B2 (en) | 2003-06-23 | 2010-05-11 | Intel Corporation | Apparatus and method for selectable hardware accelerators in a data driven architecture |
US7088371B2 (en) | 2003-06-27 | 2006-08-08 | Intel Corporation | Memory command handler for use in an image signal processor having a data driven architecture |
US20130111188A9 (en) | 2003-07-24 | 2013-05-02 | Martin Vorbach | Low latency massive parallel data processing device |
JP4700611B2 (ja) | 2003-08-28 | 2011-06-15 | ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト | データ処理装置およびデータ処理方法 |
US7257665B2 (en) * | 2003-09-29 | 2007-08-14 | Intel Corporation | Branch-aware FIFO for interprocessor data sharing |
US20050138323A1 (en) | 2003-12-18 | 2005-06-23 | Intel Corporation, A Delaware Corporation | Accumulator shadow register systems and methods |
JP4104538B2 (ja) | 2003-12-22 | 2008-06-18 | 三洋電機株式会社 | リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路 |
TWI323584B (en) | 2003-12-26 | 2010-04-11 | Hon Hai Prec Ind Co Ltd | Method and system for burning mac address |
US7490218B2 (en) | 2004-01-22 | 2009-02-10 | University Of Washington | Building a wavecache |
JP4502650B2 (ja) | 2004-02-03 | 2010-07-14 | 日本電気株式会社 | アレイ型プロセッサ |
US20050223131A1 (en) | 2004-04-02 | 2005-10-06 | Goekjian Kenneth S | Context-based direct memory access engine for use with a memory system shared by devices associated with multiple input and output ports |
JP4546775B2 (ja) | 2004-06-30 | 2010-09-15 | 富士通株式会社 | 時分割多重処理可能なリコンフィギュラブル回路 |
US7509484B1 (en) | 2004-06-30 | 2009-03-24 | Sun Microsystems, Inc. | Handling cache misses by selectively flushing the pipeline |
US7890735B2 (en) | 2004-08-30 | 2011-02-15 | Texas Instruments Incorporated | Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture |
US7877748B2 (en) | 2004-11-19 | 2011-01-25 | The United States Of America As Represented By The Secretary Of The Air Force | Method and apparatus for timing information flow in a distributed system |
US7594102B2 (en) | 2004-12-15 | 2009-09-22 | Stmicroelectronics, Inc. | Method and apparatus for vector execution on a scalar machine |
US7613886B2 (en) | 2005-02-08 | 2009-11-03 | Sony Computer Entertainment Inc. | Methods and apparatus for synchronizing data access to a local memory in a multi-processor system |
US7546331B2 (en) | 2005-03-17 | 2009-06-09 | Qualcomm Incorporated | Low power array multiplier |
US8694589B2 (en) | 2005-03-31 | 2014-04-08 | Google Inc. | Methods and systems for saving draft electronic communications |
US7373444B2 (en) * | 2005-04-15 | 2008-05-13 | Kabushiki Kaisha Toshiba | Systems and methods for manipulating entries in a command buffer using tag information |
US7793040B2 (en) | 2005-06-01 | 2010-09-07 | Microsoft Corporation | Content addressable memory architecture |
JP4536618B2 (ja) | 2005-08-02 | 2010-09-01 | 富士通セミコンダクター株式会社 | リコンフィグ可能な集積回路装置 |
US20160098279A1 (en) | 2005-08-29 | 2016-04-07 | Searete Llc | Method and apparatus for segmented sequential storage |
US8275976B2 (en) | 2005-08-29 | 2012-09-25 | The Invention Science Fund I, Llc | Hierarchical instruction scheduler facilitating instruction replay |
US8099556B2 (en) | 2005-09-13 | 2012-01-17 | Arm Limited | Cache miss detection in a data processing apparatus |
JP2007079958A (ja) | 2005-09-14 | 2007-03-29 | Hitachi Ltd | 記憶制御装置、データ処理方法、及びコンピュータプログラム |
US7472299B2 (en) | 2005-09-30 | 2008-12-30 | Intel Corporation | Low power arbiters in interconnection routers |
US8620623B2 (en) | 2005-11-14 | 2013-12-31 | Globaltrak, Llc | Hierarchical and distributed information processing architecture for a container security system |
US20070143546A1 (en) | 2005-12-21 | 2007-06-21 | Intel Corporation | Partitioned shared cache |
EP1808774A1 (en) | 2005-12-22 | 2007-07-18 | St Microelectronics S.A. | A hierarchical reconfigurable computer architecture |
JP4795025B2 (ja) | 2006-01-13 | 2011-10-19 | キヤノン株式会社 | ダイナミックリコンフィギャラブルデバイス、制御方法、及びプログラム |
US8595279B2 (en) | 2006-02-27 | 2013-11-26 | Qualcomm Incorporated | Floating-point processor with reduced power requirements for selectable subprecision |
US7817652B1 (en) | 2006-05-12 | 2010-10-19 | Integrated Device Technology, Inc. | System and method of constructing data packets in a packet switch |
CN101438232B (zh) | 2006-05-16 | 2015-10-21 | 英特尔公司 | 不同浮点格式的浮点加法 |
EP2021921A2 (en) | 2006-05-17 | 2009-02-11 | Nxp B.V. | Multi-processing system and a method of executing a plurality of data processing tasks |
US7594055B2 (en) | 2006-05-24 | 2009-09-22 | International Business Machines Corporation | Systems and methods for providing distributed technology independent memory controllers |
US8456191B2 (en) | 2006-06-21 | 2013-06-04 | Element Cxi, Llc | Data-driven integrated circuit architecture |
US20080072113A1 (en) * | 2006-08-30 | 2008-03-20 | Siukwin Tsang | Method of locating packet for resend from retry buffer |
US9946547B2 (en) | 2006-09-29 | 2018-04-17 | Arm Finance Overseas Limited | Load/store unit for a processor, and applications thereof |
US8095699B2 (en) | 2006-09-29 | 2012-01-10 | Mediatek Inc. | Methods and apparatus for interfacing between a host processor and a coprocessor |
US8010766B2 (en) | 2006-10-12 | 2011-08-30 | International Business Machines Corporation | Increasing buffer locality during multiple table access operations |
US7660911B2 (en) | 2006-12-20 | 2010-02-09 | Smart Modular Technologies, Inc. | Block-based data striping to flash memory |
WO2008087779A1 (ja) | 2007-01-19 | 2008-07-24 | Nec Corporation | アレイ型プロセッサおよびデータ処理システム |
JP4933284B2 (ja) | 2007-01-25 | 2012-05-16 | 株式会社日立製作所 | ストレージ装置及び負荷分散方法 |
US8543742B2 (en) | 2007-02-22 | 2013-09-24 | Super Talent Electronics, Inc. | Flash-memory device with RAID-type controller |
US8321597B2 (en) | 2007-02-22 | 2012-11-27 | Super Talent Electronics, Inc. | Flash-memory device with RAID-type controller |
US7843215B2 (en) | 2007-03-09 | 2010-11-30 | Quadric, Inc. | Reconfigurable array to compute digital algorithms |
US7613909B2 (en) | 2007-04-17 | 2009-11-03 | Xmos Limited | Resuming thread to service ready port transferring data externally at different clock rate than internal circuitry of a processor |
US7779298B2 (en) | 2007-06-11 | 2010-08-17 | International Business Machines Corporation | Distributed job manager recovery |
US9648325B2 (en) | 2007-06-30 | 2017-05-09 | Microsoft Technology Licensing, Llc | Video decoding implementations for a graphics processing unit |
US8347312B2 (en) | 2007-07-06 | 2013-01-01 | Xmos Limited | Thread communications |
US7822951B2 (en) | 2007-08-01 | 2010-10-26 | Advanced Micro Devices, Inc. | System and method of load-store forwarding |
US20090063747A1 (en) | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Application network appliances with inter-module communications using a universal serial bus |
JP5089776B2 (ja) | 2007-09-11 | 2012-12-05 | コア ロジック,インコーポレイテッド | 浮動小数点演算のための再構成アレイプロセッサ |
KR101312281B1 (ko) | 2007-11-06 | 2013-09-30 | 재단법인서울대학교산학협력재단 | 프로세서 및 메모리 제어 방법 |
US7936753B1 (en) * | 2007-11-30 | 2011-05-03 | Qlogic, Corporation | Method and system for reliable multicast |
US8078839B2 (en) | 2007-12-13 | 2011-12-13 | Wave Semiconductor | Concurrent processing element system, and method |
US8160975B2 (en) | 2008-01-25 | 2012-04-17 | Mcafee, Inc. | Granular support vector machine with random granularity |
US8356162B2 (en) | 2008-03-18 | 2013-01-15 | International Business Machines Corporation | Execution unit with data dependent conditional write instructions |
EP2278873B1 (en) | 2008-03-19 | 2015-05-06 | Cryo-Save AG | Improved cryopreservation of adipose tissue for the isolation of mesenchymal stem cells |
RU2374684C1 (ru) | 2008-05-04 | 2009-11-27 | Государственное образовательное учреждение высшего профессионального образования Курский государственный технический университет | Параллельно-конвейерное устройство для векторизации аэрокосмических изображений земной поверхности |
US8316252B2 (en) | 2008-05-30 | 2012-11-20 | Advanced Micro Devices, Inc. | Distributed clock gating with centralized state machine control |
US8843691B2 (en) | 2008-06-25 | 2014-09-23 | Stec, Inc. | Prioritized erasure of data blocks in a flash storage device |
JP5056644B2 (ja) | 2008-07-18 | 2012-10-24 | 富士通セミコンダクター株式会社 | データ変換装置、データ変換方法及びプログラム |
US8001510B1 (en) | 2008-09-05 | 2011-08-16 | Xilinx, Inc. | Automated method of architecture mapping selection from constrained high level language description via element characterization |
US20100191814A1 (en) | 2008-12-23 | 2010-07-29 | Marco Heddes | System-On-A-Chip Employing A Network Of Nodes That Utilize Receive Side Flow Control Over Channels For Messages Communicated Therebetween |
US8078848B2 (en) | 2009-01-09 | 2011-12-13 | Micron Technology, Inc. | Memory controller having front end and back end channels for modifying commands |
US8086783B2 (en) | 2009-02-23 | 2011-12-27 | International Business Machines Corporation | High availability memory system |
US8248936B2 (en) * | 2009-04-01 | 2012-08-21 | Lockheed Martin Corporation | Tuning congestion control in IP multicast to mitigate the impact of blockage |
US8055816B2 (en) | 2009-04-09 | 2011-11-08 | Micron Technology, Inc. | Memory controllers, memory systems, solid state drives and methods for processing a number of commands |
US8910168B2 (en) | 2009-04-27 | 2014-12-09 | Lsi Corporation | Task backpressure and deletion in a multi-flow network processor architecture |
US8576714B2 (en) * | 2009-05-29 | 2013-11-05 | Futurewei Technologies, Inc. | System and method for relay node flow control in a wireless communications system |
GB2471067B (en) | 2009-06-12 | 2011-11-30 | Graeme Roy Smith | Shared resource multi-thread array processor |
US20110004742A1 (en) | 2009-07-06 | 2011-01-06 | Eonsil, Inc. | Variable-Cycle, Event-Driven Multi-Execution Flash Processor |
US8650240B2 (en) | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
US8301803B2 (en) | 2009-10-23 | 2012-10-30 | Samplify Systems, Inc. | Block floating point compression of signal data |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
US8578117B2 (en) | 2010-02-10 | 2013-11-05 | Qualcomm Incorporated | Write-through-read (WTR) comparator circuits, systems, and methods use of same with a multiple-port file |
US8495341B2 (en) | 2010-02-17 | 2013-07-23 | International Business Machines Corporation | Instruction length based cracking for instruction of variable length storage operands |
EP2553815A1 (en) | 2010-04-02 | 2013-02-06 | Tabula, Inc. | System and method for reducing reconfiguration power usage |
WO2011133030A1 (en) | 2010-04-23 | 2011-10-27 | Vector Fabrics B.V. | Improved embedded system performance |
US9285860B2 (en) | 2010-05-03 | 2016-03-15 | Qualcomm Incorporated | Apparatus and methods employing variable clock gating hysteresis for a communications port |
KR101751045B1 (ko) | 2010-05-25 | 2017-06-27 | 삼성전자 주식회사 | 3d 반도체 장치 |
US8438341B2 (en) | 2010-06-16 | 2013-05-07 | International Business Machines Corporation | Common memory programming |
US8719455B2 (en) | 2010-06-28 | 2014-05-06 | International Business Machines Corporation | DMA-based acceleration of command push buffer between host and target devices |
US9201801B2 (en) | 2010-09-15 | 2015-12-01 | International Business Machines Corporation | Computing device with asynchronous auxiliary execution unit |
TWI425357B (zh) | 2010-09-27 | 2014-02-01 | Silicon Motion Inc | 用來進行區塊管理之方法以及記憶裝置及控制器 |
KR101735677B1 (ko) | 2010-11-17 | 2017-05-16 | 삼성전자주식회사 | 부동 소수점의 복합 연산장치 및 그 연산방법 |
US9274962B2 (en) | 2010-12-07 | 2016-03-01 | Intel Corporation | Apparatus, method, and system for instantaneous cache state recovery from speculative abort/commit |
US9026769B1 (en) | 2011-01-31 | 2015-05-05 | Marvell International Ltd. | Detecting and reissuing of loop instructions in reorder structure |
TWI432987B (zh) | 2011-03-15 | 2014-04-01 | Phison Electronics Corp | 記憶體儲存裝置、其記憶體控制器與病毒掃描方法 |
US9170846B2 (en) | 2011-03-29 | 2015-10-27 | Daniel Delling | Distributed data-parallel execution engines for user-defined serial problems using branch-and-bound algorithm |
US8799880B2 (en) | 2011-04-08 | 2014-08-05 | Siemens Aktiengesellschaft | Parallelization of PLC programs for operation in multi-processor environments |
US9817700B2 (en) | 2011-04-26 | 2017-11-14 | International Business Machines Corporation | Dynamic data partitioning for optimal resource utilization in a parallel data processing system |
US10078620B2 (en) | 2011-05-27 | 2018-09-18 | New York University | Runtime reconfigurable dataflow processor with multi-port memory access module |
US9116634B2 (en) | 2011-06-10 | 2015-08-25 | International Business Machines Corporation | Configure storage class memory command |
US9727827B2 (en) | 2011-06-24 | 2017-08-08 | Jobvite, Inc. | Method and system for referral tracking |
US8990452B2 (en) | 2011-07-26 | 2015-03-24 | International Business Machines Corporation | Dynamic reduction of stream backpressure |
US9148495B2 (en) | 2011-07-26 | 2015-09-29 | International Business Machines Corporation | Dynamic runtime choosing of processing communication methods |
US9201817B2 (en) | 2011-08-03 | 2015-12-01 | Montage Technology (Shanghai) Co., Ltd. | Method for allocating addresses to data buffers in distributed buffer chipset |
US8694754B2 (en) | 2011-09-09 | 2014-04-08 | Ocz Technology Group, Inc. | Non-volatile memory-based mass storage devices and methods for writing data thereto |
US8966457B2 (en) | 2011-11-15 | 2015-02-24 | Global Supercomputing Corporation | Method and system for converting a single-threaded software program into an application-specific supercomputer |
US8898505B2 (en) | 2011-12-01 | 2014-11-25 | International Business Machines Corporation | Dynamically configureable placement engine |
US8892914B2 (en) | 2011-12-08 | 2014-11-18 | Active-Semi, Inc. | Programmable fault protect for processor controlled high-side and low-side drivers |
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
KR101968512B1 (ko) | 2012-02-21 | 2019-04-12 | 삼성전자주식회사 | Nfc를 이용한 멀티미디어 데이터 송수신 장치 및 방법 |
US9146775B2 (en) | 2012-04-26 | 2015-09-29 | International Business Machines Corporation | Operator graph changes in response to dynamic connections in stream computing applications |
US9128725B2 (en) | 2012-05-04 | 2015-09-08 | Apple Inc. | Load-store dependency predictor content management |
US8995410B2 (en) | 2012-05-25 | 2015-03-31 | University Of Southern California | Airsync: enabling distributed multiuser MIMO with full multiplexing gain |
US9213571B2 (en) | 2012-06-06 | 2015-12-15 | 2236008 Ontario Inc. | System and method for changing abilities of a process |
US9110713B2 (en) | 2012-08-30 | 2015-08-18 | Qualcomm Incorporated | Microarchitecture for floating point fused multiply-add with exponent scaling |
US9292569B2 (en) | 2012-10-02 | 2016-03-22 | Oracle International Corporation | Semi-join acceleration |
US9632787B2 (en) | 2012-10-23 | 2017-04-25 | Ca, Inc. | Data processing system with data characteristic based identification of corresponding instructions |
CN104813277B (zh) | 2012-12-19 | 2019-06-28 | 英特尔公司 | 用于处理器的功率效率的向量掩码驱动时钟门控 |
US9104474B2 (en) | 2012-12-28 | 2015-08-11 | Intel Corporation | Variable precision floating point multiply-add circuit |
US10467010B2 (en) | 2013-03-15 | 2019-11-05 | Intel Corporation | Method and apparatus for nearest potential store tagging |
US9268528B2 (en) | 2013-05-23 | 2016-02-23 | Nvidia Corporation | System and method for dynamically reducing power consumption of floating-point logic |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
US9715389B2 (en) | 2013-06-25 | 2017-07-25 | Advanced Micro Devices, Inc. | Dependent instruction suppression |
US9424079B2 (en) | 2013-06-27 | 2016-08-23 | Microsoft Technology Licensing, Llc | Iteration support in a heterogeneous dataflow engine |
US9524164B2 (en) | 2013-08-30 | 2016-12-20 | Advanced Micro Devices, Inc. | Specialized memory disambiguation mechanisms for different memory read access types |
US9292076B2 (en) | 2013-09-16 | 2016-03-22 | Intel Corporation | Fast recalibration circuitry for input/output (IO) compensation finite state machine power-down-exit |
US9996490B2 (en) | 2013-09-19 | 2018-06-12 | Nvidia Corporation | Technique for scaling the bandwidth of a processing element to match the bandwidth of an interconnect |
US9244827B2 (en) | 2013-09-25 | 2016-01-26 | Intel Corporation | Store address prediction for memory disambiguation in a processing device |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US9594720B2 (en) | 2013-10-21 | 2017-03-14 | Xmos Limited | Interface between a bus and a inter-thread interconnect |
JP6446995B2 (ja) | 2013-10-29 | 2019-01-09 | 株式会社リコー | 情報処理システム及び情報処理方法 |
US10591983B2 (en) | 2014-03-14 | 2020-03-17 | Wisconsin Alumni Research Foundation | Computer accelerator system using a trigger architecture memory access processor |
US20150268963A1 (en) | 2014-03-23 | 2015-09-24 | Technion Research & Development Foundation Ltd. | Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware |
KR20150126484A (ko) | 2014-05-02 | 2015-11-12 | 삼성전자주식회사 | 소스 코드를 머신 코드로 변환하는 전자 장치 및 방법 |
US9696927B2 (en) | 2014-06-19 | 2017-07-04 | International Business Machines Corporation | Memory transaction having implicit ordering effects |
WO2016003646A1 (en) | 2014-06-30 | 2016-01-07 | Unisys Corporation | Enterprise management for secure network communications over ipsec |
US9330433B2 (en) | 2014-06-30 | 2016-05-03 | Intel Corporation | Data distribution fabric in scalable GPUs |
DE102014113430A1 (de) | 2014-09-17 | 2016-03-17 | Bundesdruckerei Gmbh | Verteilte Datenspeicherung mittels Berechtigungstoken |
US9836473B2 (en) | 2014-10-03 | 2017-12-05 | International Business Machines Corporation | Hardware acceleration for a compressed computation database |
US9473144B1 (en) | 2014-11-25 | 2016-10-18 | Cypress Semiconductor Corporation | Integrated circuit device with programmable analog subsystem |
US9851945B2 (en) | 2015-02-16 | 2017-12-26 | Advanced Micro Devices, Inc. | Bit remapping mechanism to enhance lossy compression in floating-point applications |
US9658676B1 (en) * | 2015-02-19 | 2017-05-23 | Amazon Technologies, Inc. | Sending messages in a network-on-chip and providing a low power state for processing cores |
US9594521B2 (en) | 2015-02-23 | 2017-03-14 | Advanced Micro Devices, Inc. | Scheduling of data migration |
US9946719B2 (en) | 2015-07-27 | 2018-04-17 | Sas Institute Inc. | Distributed data set encryption and decryption |
US10216693B2 (en) | 2015-07-30 | 2019-02-26 | Wisconsin Alumni Research Foundation | Computer with hybrid Von-Neumann/dataflow execution architecture |
US10108417B2 (en) | 2015-08-14 | 2018-10-23 | Qualcomm Incorporated | Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor |
US20170062075A1 (en) | 2015-08-31 | 2017-03-02 | Sandisk Technologies Inc. | Apparatus including core and clock gating circuit and method of operating same |
US20170083313A1 (en) | 2015-09-22 | 2017-03-23 | Qualcomm Incorporated | CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs) |
US10121553B2 (en) | 2015-09-30 | 2018-11-06 | Sunrise Memory Corporation | Capacitive-coupled non-volatile thin-film transistor NOR strings in three-dimensional arrays |
US9847783B1 (en) | 2015-10-13 | 2017-12-19 | Altera Corporation | Scalable architecture for IP block integration |
US9762563B2 (en) | 2015-10-14 | 2017-09-12 | FullArmor Corporation | Resource access system and method |
CN105512060B (zh) * | 2015-12-04 | 2018-09-14 | 上海兆芯集成电路有限公司 | 输入/输出电路以及数据传输控制方法 |
US9923905B2 (en) | 2016-02-01 | 2018-03-20 | General Electric Company | System and method for zone access control |
US9959068B2 (en) * | 2016-03-04 | 2018-05-01 | Western Digital Technologies, Inc. | Intelligent wide port phy usage |
KR20170105353A (ko) | 2016-03-09 | 2017-09-19 | 삼성전자주식회사 | 전자장치 및 그 제어방법 |
US20170286169A1 (en) | 2016-03-31 | 2017-10-05 | National Instruments Corporation | Automatically Mapping Program Functions to Distributed Heterogeneous Platforms Based on Hardware Attributes and Specified Constraints |
WO2017189933A1 (en) | 2016-04-27 | 2017-11-02 | Krypton Project, Inc. | System, method, and apparatus for operating a unified document surface workspace |
US20170315812A1 (en) | 2016-04-28 | 2017-11-02 | Microsoft Technology Licensing, Llc | Parallel instruction scheduler for block isa processor |
US10110233B2 (en) | 2016-06-23 | 2018-10-23 | Altera Corporation | Methods for specifying processor architectures for programmable integrated circuits |
US20180081834A1 (en) | 2016-09-16 | 2018-03-22 | Futurewei Technologies, Inc. | Apparatus and method for configuring hardware to operate in multiple modes during runtime |
US20180081806A1 (en) | 2016-09-22 | 2018-03-22 | Qualcomm Incorporated | Memory violation prediction |
US10168758B2 (en) | 2016-09-29 | 2019-01-01 | Intel Corporation | Techniques to enable communication between a processor and voltage regulator |
US10402168B2 (en) | 2016-10-01 | 2019-09-03 | Intel Corporation | Low energy consumption mantissa multiplication for floating point multiply-add operations |
US10037267B2 (en) * | 2016-10-21 | 2018-07-31 | Advanced Micro Devices, Inc. | Instruction set architecture and software support for register state migration |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10474375B2 (en) | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US20180189675A1 (en) | 2016-12-31 | 2018-07-05 | Intel Corporation | Hardware accelerator architecture and template for web-scale k-means clustering |
US10180928B2 (en) | 2016-12-31 | 2019-01-15 | Intel Corporation | Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions |
US10490251B2 (en) | 2017-01-30 | 2019-11-26 | Micron Technology, Inc. | Apparatuses and methods for distributing row hammer refresh events across a memory device |
US10754829B2 (en) | 2017-04-04 | 2020-08-25 | Oracle International Corporation | Virtual configuration systems and methods |
CN108694014A (zh) | 2017-04-06 | 2018-10-23 | 群晖科技股份有限公司 | 用来进行内存空间保留及管理的方法与装置 |
US10452452B2 (en) | 2017-04-17 | 2019-10-22 | Wave Computing, Inc. | Reconfigurable processor fabric implementation using satisfiability analysis |
US10778767B2 (en) * | 2017-04-28 | 2020-09-15 | International Business Machines Corporation | Persistent memory replication in RDMA-capable networks |
US10645448B2 (en) * | 2017-05-15 | 2020-05-05 | Omnivision Technologies, Inc. | Buffer-aware transmission rate control for real-time video streaming system |
US10191871B2 (en) * | 2017-06-20 | 2019-01-29 | Infineon Technologies Ag | Safe double buffering using DMA safe linked lists |
US10346145B2 (en) | 2017-06-23 | 2019-07-09 | Intel Corporation | Loop execution with predicate computing for dataflow machines |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US20190004878A1 (en) | 2017-07-01 | 2019-01-03 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10387319B2 (en) | 2017-07-01 | 2019-08-20 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features |
US10445451B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
US10461747B2 (en) | 2017-09-20 | 2019-10-29 | Apple Inc. | Low power clock gating circuit |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US10380063B2 (en) | 2017-09-30 | 2019-08-13 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US20190101952A1 (en) | 2017-09-30 | 2019-04-04 | Intel Corporation | Processors and methods for configurable clock gating in a spatial array |
US10402176B2 (en) | 2017-12-27 | 2019-09-03 | Intel Corporation | Methods and apparatus to compile code to generate data flow code |
US10565134B2 (en) * | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US10445250B2 (en) | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with a configurable spatial accelerator |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator |
US20190303263A1 (en) | 2018-03-30 | 2019-10-03 | Kermin E. Fleming, JR. | Apparatus, methods, and systems for integrated performance monitoring in a configurable spatial accelerator |
US20190303297A1 (en) | 2018-04-02 | 2019-10-03 | Intel Corporation | Apparatus, methods, and systems for remote memory access in a configurable spatial accelerator |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10776087B2 (en) | 2018-06-25 | 2020-09-15 | Intel Corporation | Sequence optimizations in a high-performance computing environment |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
-
2017
- 2017-12-30 US US15/859,473 patent/US10565134B2/en not_active Expired - Fee Related
-
2018
- 2018-10-22 DE DE102018126150.0A patent/DE102018126150A1/de not_active Withdrawn
- 2018-12-28 CN CN201811623622.4A patent/CN110018850A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110806897A (zh) * | 2019-10-29 | 2020-02-18 | 中国人民解放军战略支援部队信息工程大学 | 面向多代码粒度的向量并行性发掘方法 |
CN110807046A (zh) * | 2019-10-31 | 2020-02-18 | 浪潮云信息技术有限公司 | 一种新型分布式newsql数据库智能事务优化方法 |
CN110807046B (zh) * | 2019-10-31 | 2022-06-07 | 浪潮云信息技术股份公司 | 一种新型分布式newsql数据库智能事务优化方法 |
CN118519960A (zh) * | 2024-07-19 | 2024-08-20 | 深存科技(无锡)有限公司 | 基于阵列结构的融合缓冲架构 |
Also Published As
Publication number | Publication date |
---|---|
DE102018126150A1 (de) | 2019-07-04 |
US10565134B2 (en) | 2020-02-18 |
US20190205269A1 (en) | 2019-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110018850A (zh) | 用于可配置空间加速器中的多播的设备、方法和系统 | |
CN109597646A (zh) | 具有可配置空间加速器的处理器、方法和系统 | |
CN109213723A (zh) | 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统 | |
US11593295B2 (en) | Apparatuses, methods, and systems for operations in a configurable spatial accelerator | |
CN109215728B (zh) | 用于分布式存储器危险检测和错误恢复的存储器电路和方法 | |
US11307873B2 (en) | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging | |
CN109992306A (zh) | 用于可配置空间加速器存储器一致性的装置、方法和系统 | |
CN108268278B (zh) | 具有可配置空间加速器的处理器、方法和系统 | |
CN109597459A (zh) | 用于空间阵列中的特权配置的处理器和方法 | |
CN109597458A (zh) | 用于空间阵列中的可配置时钟门控的处理器和方法 | |
CN109213523A (zh) | 具有存储器系统性能、功率减小和原子支持特征的可配置空间加速器的处理器、方法和系统 | |
US10515046B2 (en) | Processors, methods, and systems with a configurable spatial accelerator | |
CN111868702A (zh) | 用于可配置空间加速器中的远程存储器访问的装置、方法和系统 | |
CN111767236A (zh) | 用于可配置空间加速器中的存储器接口电路分配的装置、方法和系统 | |
CN111512298A (zh) | 用于可配置空间加速器中的条件队列的装置、方法和系统 | |
CN111566623A (zh) | 用于可配置空间加速器中的集成性能监视的装置、方法和系统 | |
US10459866B1 (en) | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator | |
CN111767080A (zh) | 用于可配置空间加速器中的操作的设备、方法和系统 | |
DE102018005169A1 (de) | Prozessoren und verfahren mit konfigurierbaren netzwerkbasierten datenflussoperatorschaltungen | |
US12086080B2 (en) | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits | |
US10678724B1 (en) | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator | |
CN107250993A (zh) | 向量缓存行写回处理器、方法、系统和指令 | |
CN110119362A (zh) | 存储器写日志存储处理器、方法、系统和指令 | |
CN112148647A (zh) | 用于存储器接口电路仲裁的装置、方法和系统 | |
CN112148664A (zh) | 用于可配置空间加速器中的时间复用的装置、方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |