CN111566623A - 用于可配置空间加速器中的集成性能监视的装置、方法和系统 - Google Patents
用于可配置空间加速器中的集成性能监视的装置、方法和系统 Download PDFInfo
- Publication number
- CN111566623A CN111566623A CN201980006885.7A CN201980006885A CN111566623A CN 111566623 A CN111566623 A CN 111566623A CN 201980006885 A CN201980006885 A CN 201980006885A CN 111566623 A CN111566623 A CN 111566623A
- Authority
- CN
- China
- Prior art keywords
- network
- data
- circuit
- processing elements
- value
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3404—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3024—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/10—Requirements analysis; Specification techniques
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
Abstract
描述了关于可配置空间加速器中的集成性能监视的系统、方法和装置。在一个实施例中,可配置空间加速器包括:第一性能监视电路,该第一性能监视电路由网络耦合至处理元件的第一适当子集,以接收来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值,基于来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值生成第一经聚合的监视值,并且当第一阈值被第一经聚合的监视值超过时,在不同网络上将第一经聚合的监视值发送到性能管理器电路;以及性能管理器电路,该性能管理器电路用于基于第一经聚合的监视值执行动作。
Description
关于联邦资助的研发的声明
本发明是在由国防部授予的合同号H98230-13-D-0124的政府支持下进行的。政府具有本发明的某些权益。
技术领域
本公开总体上关于电子学,更具体地,本公开的实施例关于可配置空间加速器中的集成性能监视电路。
背景技术
处理器或处理器集合执行来自指令集(例如,指令集架构(ISA))的指令。指令集是计算机架构的关于编程的部分,并且一般包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应当注意,术语“指令”在本文中可以指宏指令或指微指令,该宏指令例如提供给处理器供执行的指令,该微指令例如由处理器的解码器对宏指令解码所产生的指令。
附图说明
在所附附图中以示例方式而非限制方式图示本公开,在附图中,类似的附图标记指示类似的要素,其中:
图1图示根据本公开的实施例的加速器片。
图2图示根据本公开的实施例的耦合至存储器的硬件处理器。
图3A图示根据本公开的实施例的程序源。
图3B图示根据本公开的实施例的针对图3A的程序源的数据流图。
图3C图示根据本公开的配置成用于执行图3B的数据流图的具有多个处理元件的加速器。
图4图示根据本公开的实施例的数据流图的示例执行。
图5图示根据本公开的实施例的程序源。
图6图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列。
图7A图示根据本公开的实施例的可配置数据路径网络。
图7B图示根据本公开的实施例的可配置流控制路径网络。
图8图示根据本公开的实施例的包括加速器的硬件处理器片。
图9图示根据本公开的实施例的处理元件。
图10图示根据本公开的实施例的请求地址文件(RAF)电路。
图11图示根据本公开的实施例的耦合在多个加速器片与多个高速缓存区块之间的多个请求地址文件(RAF)电路。
图12图示根据本公开的实施例的具有包括多个性能监视电路的处理元件的空间阵列的系统。
图13图示根据本公开的实施例的处理元件。
图14图示根据本公开的实施例的性能监视电路。
图15图示根据本公开的实施例的加速器中的耦合至性能管理器电路的性能监视电路。
图16图示根据本公开的实施例的具有将经聚合的监视值传播给性能管理器电路的处理元件的空间阵列的性能监视电路的系统。
图17图示根据本公开的实施例的流程图。
图18图示根据本公开的实施例的伪代码函数调用的数据流图。
图19图示根据本公开的实施例的具有多个网络数据流端点电路的处理元件的空间阵列。
图20图示根据本公开的实施例的网络数据流端点电路。
图21图示根据本公开的实施例的用于发送操作和接收操作的数据格式。
图22图示根据本公开的实施例的用于发送操作的另一数据格式。
图23图示根据本公开的实施例的配置电路元件(例如,网络数据流端点电路)数据格式以配置用于发送(例如,switch(切换))操作和接收(例如,pick(挑选))操作的电路元件(例如,网络数据流端点电路)。
图24图示根据本公开的实施例的配置数据格式,其用于利用标注在电路上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于发送操作的电路元件(例如,网络数据流端点电路)。
图25图示根据本公开的实施例的配置数据格式,其用于利用标注在电路上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于所选择操作的电路元件(例如,网络数据流端点电路)。
图26图示根据本公开的实施例的配置数据格式,其用于利用标注在电路上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于Switch(切换)操作的电路元件(例如,网络数据流端点电路)。
图27图示根据本公开的实施例的配置数据格式,其用于利用标注在电路上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于SwitchAny(切换任何)操作的电路元件(例如,网络数据流端点电路)。
图28图示根据本公开的实施例的配置数据格式,其用于利用标注在电路上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于Pick操作的电路元件(例如,网络数据流端点电路)。
图29图示根据本公开的实施例的配置数据格式,其用于利用标注在电路上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于PickAny(挑选任何)操作的电路元件(例如,网络数据流端点电路)。
图30图示根据本公开的实施例的对由用于执行的网络数据流端点电路进行的操作的选择。
图31图示根据本公开的实施例的网络数据流端点电路。
图32图示根据本公开的实施例的当执行pick(挑选)操作时接收输入零(0)的网络数据流端点电路。
图33图示根据本公开的实施例的当执行pick(挑选)操作时接收输入一(1)的网络数据流端点电路。
图34图示根据本公开的实施例的当执行pick(挑选)操作时输出所选择的输入的网络数据流端点电路。
图35图示根据本公开的实施例的流程图。
图36图示根据本公开的实施例的分区为三个区域(结果区域、三个潜在的进位区域和门控区域)的浮点乘法器。
图37图示根据本公开的实施例的具有多个处理元件的加速器的运行中(in-flight)配置。
图38图示根据本公开的实施例的运行中流水线式提取的快照。
图39图示根据本公开的实施例的用于加速器的编译工具链。
图40图示根据本公开的实施例的用于加速器的编译器。
图41A图示根据本公开的实施例的序列化汇编代码。
图41B图示根据本公开的实施例的针对图41A的序列化汇编代码的数据流汇编代码。
图41C图示根据本公开的实施例的针对用于加速器的图41B的数据流汇编代码的数据流图。
图42A图示根据本公开的实施例的C源代码。
图42B图示根据本公开的实施例的针对图42A的C源代码的数据流汇编代码。
图42C图示根据本公开的实施例的针对用于加速器的图42B的数据流汇编代码的数据流图。
图43A图示根据本公开的实施例的C源代码。
图43B图示根据本公开的实施例的针对图43A的C源代码的数据流汇编代码。
图43C图示根据本公开的实施例的用于加速器的针对图43B的数据流汇编代码的数据流图。
图44A图示根据本公开的实施例的流程图。
图44B图示根据本公开的实施例的流程图。
图45图示根据本公开的实施例的吞吐量相对于每个操作的能量的图表。
图46图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列和本地配置控制器。
图47A-图47C图示根据本公开的实施例的配置数据路径网络的本地配置控制器。
图48图示根据本公开的实施例的配置控制器。
图49图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列、配置高速缓存和本地配置控制器。
图50图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列以及具有重配置电路的配置和异常处置控制器。
图51图示根据本公开的实施例的重配置电路。
图52图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列以及具有重配置电路的配置和异常处置控制器。
图53图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列以及耦合至片级异常聚合器的夹层异常聚合器。
图54图示根据本公开的实施例的具有异常生成器的处理元件。
图55图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列和本地提取控制器。
图56A-图56C图示根据本公开的实施例的配置数据路径网络的本地提取控制器。
图57图示根据本公开的实施例的提取控制器。
图58图示根据本公开的实施例的流程图。
图59图示根据本公开的实施例的流程图。
图60A是根据本公开的实施例的系统的框图,该系统采用插入在存储器子系统与加速硬件之间的存储器排序电路。
图60B是根据本公开的实施例的图60A中的系统的框图,但是该系统采用多个存储器排序电路。
图61是图示根据本公开的实施例的进入加速硬件以及离开加速硬件的存储器操作的一般运行的框图。
图62是图示根据本公开的实施例的存储操作的空间依赖性流的框图。
图63是根据本公开的实施例的图60中的存储器排序电路的详细框图。
图64是根据本公开的实施例的图60中的存储器排序电路的微架构的流示图。
图65是根据本公开的实施例的可执行确定器电路的框图。
图66是根据本公开的实施例的优先级编码器的框图。
图67是根据本公开的实施例的逻辑和二进制两种形式的示例性加载操作的框图。
图68A是图示根据本公开的实施例的示例代码的逻辑执行的流示图。
图68B是图示根据本公开的实施例的示例代码的展开版本中的存储器级并行性的图68A的流示图。
图69A是根据本公开的实施例的用于加载操作以及用于存储操作的示例性存储器自变量(argument)的框图。
图69B是图示根据本公开的实施例的、通过图64中的存储器排序电路的微架构进行加载操作和存储操作(诸如,图69A中的那些操作)的流的框图。
图70A、图70B、图70C、图70D、图70E、图70F、图70G和图70H是图示根据本公开的实施例的通过图70B中的微架构的队列对示例性程序进行的加载操作和存储操作的功能流的框图。
图71是根据本公开的实施例的用于对加速硬件与乱序存储器子系统之间的存储器操作进行排序的方法的流程图。
图72A是图示根据本公开的实施例的通用向量友好指令格式及其A类指令模板的框图。
图72B是图示根据本公开的实施例的通用向量友好指令格式及其B类指令模板的框图。
图73A是图示根据本公开的实施例的用于图72A和图72B中的通用向量友好指令格式的字段的框图。
图73B是图示根据本公开的一个实施例的构成完整操作码字段的图73A中的专用向量友好指令格式的字段的框图。
图73C是图示根据本公开的一个实施例的构成寄存器索引字段的图73A中的专用向量友好指令格式的字段的框图。
图73D是图示根据本公开的一个实施例的构成扩充操作字段7250的图73A中的专用向量友好指令格式的字段的框图。
图74是根据本公开的一个实施例的寄存器架构的框图。
图75A是图示根据本公开的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线两者的框图。
图75B是图示根据本公开的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。
图76A是根据本公开的实施例的单个处理器核以及其到管芯上互连网络的连接以及它的第2级(L2)高速缓存的本地适当子集的框图。
图76B是根据本公开的实施例的图76A中的处理器核的一部分的展开图。
图77是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的框图。
图78是根据本公开的一个实施例的系统的框图。
图79是根据本公开的实施例的更具体的示例性系统的框图。
图80所示的是根据本公开的实施例的第二更具体的示例性系统的框图。
图81示出的是根据本公开的实施例的芯片上系统(SoC)的框图。
图82是根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,陈述了多个具体细节。然而,应当理解,可不通过这些具体细节来实施本公开的实施例。在其他实例中,未详细示出公知的电路、结构以及技术,以免模糊对本描述的理解。
说明书中对“一个实施例”、“实施例”、“示例实施例”等等的引用表明所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例不一定都包括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
(例如,具有一个或多个核的)处理器可执行指令(例如,指令线程)以对数据操作,从而例如执行算术、逻辑或其他功能。例如,软件可请求操作,并且硬件处理器(例如,该硬件处理器的一个或多个核)可响应于该请求而执行该操作。操作的一个非限制性示例是输入多个向量元素并输出具有经混合的多个元素的向量的混合操作。在某些实施例中,多个操作利用对单条指令的执行来完成。
例如由美国能源部定义的百亿亿次级性能可要求系统级浮点性能在给定的(例如,20MW)功率预算内超过每秒1018次浮点操作(exaFLOP)或更多。本文中的某些实施例涉及针对例如处理器的高性能计算(HPC)的处理元件的空间阵列(例如,可配置空间加速器(CSA))。处理元件的空间阵列(例如,CSA)的本文中的某些实施例针对数据流图的直接执行以实现远超常规路线图架构的计算密集但高能效的空间微架构。本文中的某些实施例例如除了通信网络在处理元件、存储器等之间路由数据和/或通信网络执行其他通信(例如,非数据处理)操作之外,还将(例如,高基)数据流操作叠加在通信网络上。本文中的某些实施例例如除了通信网络在处理元件、存储器等之间路由数据或通信网络执行其他通信操作之外,还涉及(例如,耦合到)处理元件的空间阵列(例如,CSA)的通信网络(例如,分组交换型网络)执行某些数据流操作。本文中的某些实施例涉及(例如,各自)执行例如数据流图的(例如,部分或全部)一个或多个数据流操作(例如,pick(挑选)数据流操作或switch(切换)数据流操作)的网络数据流端点电路。本文中的某些实施例包括扩充的网络端点(例如,网络数据流端点电路),这些扩充的网络端点例如利用网络端点来执行(例如,数据流)操作而不是处理元件(例如,核)或(例如,用于执行算术和逻辑操作的)算术逻辑单元执行那个(例如,数据流)操作来支持对(例如,多个)数据流操作(或数据流操作的适当子集)的控制。在一个实施例中,网络数据流端点电路与空间整列(例如,互连或互连的结构)和/或处理元件分开。
下文也包括对处理元件的空间阵列(例如,CSA)及其某些特征的实施例的架构理念的描述。如同任何革命性的架构那样,可编程性可能是风险。为了缓解该问题,已利用编译工具链(其也在下文中讨论)对CSA架构的实施例进行共同设计。
引论
百亿亿次级计算目标可要求在急剧的功率预算(例如,20MW)内的巨量系统级浮点性能(例如,1个ExaFLOP)。然而,利用经典的冯·诺依曼(von Neumann)架构来同时改善程序执行的性能和能效已变得困难:乱序调度、同时多线程操作、复杂寄存器堆和其他结构提供性能,但是以高能量成本来提供。本文中的某些实施例同时实现性能和能量要求。百亿亿次级计算功率-性能目标可针对每次操作既要求高吞吐量又要求低能耗。本文中的某些实施例通过提供大量低复杂度、高能效的处理(例如,计算)元件来提供此,这些低复杂度、高能效的处理元件极大地消除了先前处理器设计的控制开销。受此观察结果引导,本文中的某些实施例包括处理元件的空间阵列,例如,可配置空间加速器(CSA),该CSA例如包括由轻量型回压式(例如,通信)网络连接的处理元件(PE)的阵列。CSA片的一个示例在图1中描绘。处理(例如,计算)元件的某些实施例是数据流操作器,例如,当既满足(i)输入数据已到达数据流操作器,又满足(ii)具有可用于存储输出数据的空间(例如,否则没有处理正在发生)时仅处理输入数据的多重数据流操作器。(例如,加速器或CSA的)某些实施例不利用被触发的指令。
图1图示根据本公开的实施例的处理元件的空间阵列的加速器片100实施例。加速器片100可以是较大的片的部分。加速器片100执行一个或多个数据流图。数据流图一般可以指在对序列化代码的编译时出现的显式并行的程序描述。本文中的某些实施例(例如,CSA)允许数据流图被直接配置到CSA阵列上,例如,不是被变换为序列化的指令流。本文中的某些实施例允许由空间阵列的一个或多个处理元件(PE)执行第一(例如,类型的)数据流操作,附加地或替代地,允许由该空间阵列的网络通信电路(例如,端点)中的一个或多个执行第二(例如,不同类型的)数据流操作。
数据流图从序列化的编译流的导出允许CSA的实施例支持熟悉的编程模型并(例如,不使用工作表)直接执行现有的高性能计算(HPC)代码。CSA处理元件(PE)可以是高能效的。在图1中,存储器接口102可耦合至存储器(例如,图2中的存储器202)以允许加速器片100向(例如,管芯外)存储器访问(例如,加载和/或存储)数据。所描绘的加速器片100是由经由互连网络104耦合在一起的若干种类的PE组成的异构阵列。加速器片100可将以下一者或多者例如包括为处理元件101的空间阵列的部分:整数算术PE、浮点算术PE、通信电路(例如,网络数据流端点电路)和结构中存储。数据流图(例如,经编译的数据流图)可叠加在加速器片100上供执行。在一个实施例中,对于特定的数据流图,每一个PE仅处置图中的一个或两个(例如,数据流)操作。PE阵列可以是异构的,例如使得没有PE支持完整的CSA数据流架构和/或一个或多个PE被编程(例如,定制)以执行仅一些但高度高效的操作。本文中的某些实施例因此实现具有相比路线图架构为计算密集型的处理元件的阵列的处理器或加速器,并相对于现有的HPC供应在能效和性能方面实现大约数量级增益。
本文中的某些实施例提供从在处理元件的(例如,密集的)空间阵列(例如,CSA)内的并行执行的性能提升,在该处理元件的(例如,密集的)空间阵列(例如,CSA)中,例如,如果输入数据是可用的,则所利用的每个PE和/或网络数据流端点电路可同时执行其操作。效率提升可源于每一个PE和/或网络数据流端点电路的效率,例如,其中每一个PE的操作(例如,行为)对于每一个配置(例如,映射)步骤被固定一次,并且执行在本地数据到达PE时发生(例如,不考虑其他结构活动),和/或其中每个网络数据流端点电路的操作(例如,行为)当被配置(例如,映射)时是可变的(例如,不是固定的)。在某些实施例中,PE和/或网络数据流端点电路是数据流操作器(例如,每一个PE是单个数据流操作器),例如,当既满足(i)输入数据已到达数据流操作器,又满足(ii)具有可用于存储输出数据的空间(例如,否则没有处理正在发生)时仅对输入数据进行操作的数据流操作器。
本文中的某些实施例包括处理元件的空间阵列作为加速用户应用的高能效且高性能的方法。在一些实施例中,以极度并行的方式映射应用。例如,可展开内循环多次以改善并行性。例如,当展开的代码的占用(例如,使用)为高时,该方式可提供高性能。然而,如果在展开的循环体内存在较少使用的代码路径(例如,异常代码路径,像浮点去标准化模式),则可能浪费处理元件的空间阵列(的例如结构面积),结果可能损失吞吐量。
用于(例如,在利用不足的代码段的情况下)降低对处理元件的空间阵列(的例如结构面积)的压力的本文中的一个实施例是时间复用。在该模式中,可在若干循环体之间共享较少使用的(例如,较冷的)代码的单个实例,例如,与共享库中的函数调用类似。在一个实施例中,(例如,处理元件的)空间阵列支持经复用代码的直接实现。然而,例如当空间阵列中的复用或解复用涉及在许多遥远的目标(例如,共享方)之间进行选择时,使用数据流操作器(例如,使用处理元件)的直接实现在等待时间、吞吐量、实现面积和/或能量方面可能是低效的。本文中的某些实施例描述了支持(例如,高基)复用或解复用的硬件机制(例如,网络电路)。本文中的(例如,网络数据流端点电路的)某些实施例准许以很小的硬件开销或性能影响聚合许多目标(例如,共享方)。本文中的某些实施例允许将(例如,传统)序列化代码编译为空间阵列中的并行架构。
在一个实施例中,多个网络数据流端点电路组合为单个数据流操作器,例如,如下文参照图19所讨论。作为非限制性示例,下文列举某些(例如,高(例如,4-6)基)数据流操作器。
“Pick(挑选)”数据流操作器的实施例用于从多个输入通道选择数据(例如,令牌),并且根据控制数据将那个数据提供为该“Pick”数据流操作器的(例如,单个)输出。用于Pick的控制数据可包括输入选择器值。在一个实施例中,所选择的输入通道用于使其数据(例如,令牌)被移除(例如,被丢弃),以便例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。在一个实施例中,附加地,那些非选择的输入通道也用于使其数据(例如,令牌)被移除(例如,被丢弃),以便例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。
“PickSingleLeg(挑选单支路)”数据流操作器的实施例用于从多个输入通道选择数据(例如,令牌),并且根据控制数据将那个数据提供为该PickSingleLeg数据流操作器的(例如,单个)输出,但是在某些实施例中,非选择输入通道被忽略,例如,那些非选择输入通道不使它们的数据(例如,令牌)被移除(例如,被丢弃)以例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。用于PickSingleLeg的控制数据可包括输入选择器值。在一个实施例中,所选择的输入通道也用于使其数据(例如,令牌)被移除(例如,被丢弃),以便例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。
“PickAny(挑选任何)”数据流操作器的实施例用于从多个输入通道选择(例如,对于执行操作的电路)第一可用的数据(例如,令牌),并且将那个数据提供为该PickAny数据流操作器的(例如,单个)输出。在一个实施例中,如果PickSingleLeg的数据已被选择,则PickSingleLeg也用于输出(例如,指示多个输入通道中的哪个通道的)索引。在一个实施例中,所选择的输入通道用于使其数据(例如,令牌)被移除(例如,被丢弃),以便例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。在某些实施例中,(例如,具有或不具有输入数据的)非选择输入通道被忽略,例如,那些非选择输入通道不用于使其数据(例如,令牌)被移除(例如,被丢弃)以例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。用于PickAny的控制数据可包括与PickAny对应的值,例如,无需输入选择器值。
“Switch(切换)”数据流操作器的实施例用于引导(例如,单个)输入数据(例如,令牌),从而根据控制数据将那个输入数据提供给一个或多个(例如,少于全部)输出。用于Switch的控制数据可包括一个或多个(多)输出选择器值。在一个实施例中,(例如,来自输入通道的)输入数据用于使其数据(例如,令牌)被移除(例如,被丢弃),以便例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。
“SwitchAny(切换任何)”数据流操作器的实施例用于引导(例如,单个)输入数据(例如,令牌),从而例如根据控制数据将那个输入数据提供给可接收那个数据的一个或多个(例如,少于全部)输出。在一个实施例中,SwitchAny可将输入数据提供给在该SwitchAny的入口缓冲器(例如,图20中的网络入口缓冲器)中具有可用性(例如,可用的存储空间)的任何耦合的输出通道。用于SwitchAny的控制数据可包括与SwitchAny对应的值,例如,无需一个或多个(多)输出选择器值。在一个实施例中,(例如,来自输入通道的)输入数据用于使其数据(例如,令牌)被移除(例如,被丢弃),以便例如完成那个数据流操作(或数据流操作的该输入通道的部分)的执行。在一个实施例中,SwitchAny也用于输出该SwitchAny将输入数据提供(例如,发送)到的(例如,指示多个输出通道中的哪个输出通道的)索引。。可利用SwitchAny来管理空间阵列中的经复制的子图,例如,展开的循环。
本文中的某些实施例因此跨广泛类别的现有单流和并行程序(例如,所有程序)提供性能的范式转移(paradigm-shifting)等级和极大的能效改善,同时保持熟悉的HPC编程模型。本文中的某些实施例可针对HPC,使得浮点能效是极其重要的。本文中的某些实施例不但获得令人瞩目的性能改善和能量减少,还将这些增益传递至以主流HPC语言编写的且用于主流HPC框架的现有HPC程序。本文中的架构的某些实施例(例如,具有想到的编译)在对由现代编译器生成的控制数据流内部表示的直接支持中提供若干扩展。本文中的某些实施例涉及CSA数据流编译器(例如,其可接受C、C++和Fortran编程语言)以针对CSA架构。
图2图示根据本公开的实施例的耦合至(例如,连接至)存储器202的硬件处理器200。在一个实施例中,硬件处理器200和存储器202是计算系统201。在某些实施例中,加速器中的一个或多个是根据本公开的CSA。在某些实施例中,处理器中的核中的一个或多个核是本文中公开的那些核。硬件处理器200(例如,其每一个核)可包括硬件解码器(例如,解码单元)和硬件执行单元。硬件处理器200可包括寄存器。注意,本文中的附图可能没有描绘所有的数据通信耦合(例如,连接)。本领域技术人员将认识到,这样做是为了不使附图中的某些细节模糊。注意,附图中的双向箭头可以不要求双向通信,例如,它可以指示单向通信(例如,去往或来自那个组件或设备)。通信路径中的任一路径或所有组合可用于本文中的某些实施例。所描绘的硬件处理器200包括根据本公开的多个核(0至N,其中,N可以是1或更大)和硬件加速器(0至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的实施例也可包括辅助程序图中的数据流令牌管理的丰富的控制操作器的集合。这些控制操作器的示例包括“pick”操作器(例如,其将两个或更多个逻辑输入通道复用为单个输出通道)和“switch”操作器(例如,其操作为通道解复用器)(例如,从两个或更多个逻辑输入通道输出单个通道)。这些操作器可使编译器实现控制范式(诸如,条件表达式)。CSA的某些实施例可包括(例如,相对于较小数量的操作的)有限的数据流操作器集以实现密集且高能效的PE微架构。某些实施例可包括用于HPC代码中常见的复杂操作的数据流操作器。CSA数据流操作器架构对于部署特定的扩展是高度地可改变的。例如,更多复杂的数学数据流操作器(例如,三角函数)可被包括在某些实施例中以使某些数学密集型HPC工作负荷加速。类似地,神经网络调整的扩展可包括用于向量化、低精度算术的数据流操作器。
图3A图示根据本公开的实施例的程序源。程序源代码包括乘法函数(func)。图3B图示根据本公开的实施例的针对图3A的程序源的数据流图300。数据流图300包括pick节点304、switch节点306和乘法节点308。沿通信路径中的一条或多条通信路径,缓冲器可任选地可被包括。所描绘的数据流图300可执行以下操作:利用pick节点304来选择输入X,将X与Y相乘(例如,乘法节点308),且随后从switch节点306的左侧输出输出结果。图3C图示根据本公开的实施例的加速器(例如,CSA),该加速器具有配置成用于执行图3B的数据流图的多个处理元件301。更具体地,数据流图300被叠加到处理元件301的阵列(以及例如其间的(多个)(例如,互连)网络)中,使得例如数据流图300中的每一个节点被表示为处理元件301的阵列中的数据流操作器。例如,某些数据流操作可以利用处理元件来实现,和/或某些数据流操作可以利用通信网络(例如,其网络数据流端点电路)来实现。例如,Pick、PickSingleLeg、PickAny、Switch和/或SwitchAny操作可以利用通信网络(例如,其网络数据流端点电路)的一个或多个组件来实现,例如,与处理元件形成对照。
在一个实施例中,处理元件301的阵列中的处理元件中的一个或多个用于通过存储器接口302来访问存储器。在一个实施例中,数据流图300的pick节点304因此对应于pick操作器304A(例如,由pick操作器304A表示),数据流图300的switch节点306因此对应于switch操作器306A(例如,由switch操作器306A表示),并且数据流图300的乘法器节点308因此对应于乘法器操作器308A(例如,由乘法器操作器308A表示)。另一处理元件和/或流控制路径网络可将控制信号(例如,控制令牌)提供给pick操作器304A和switch操作器306A以执行图3A中的操作。在一个实施例中,处理元件301的阵列配置成用于在执行开始之前执行图3B的数据流图300。在一个实施例中,编译器执行从图3A到图3B的转换。在一个实施例中,进入处理元件的阵列的数据流图节点的输入在逻辑上将数据流图嵌入到处理元件的阵列中(例如,如下文中进一步所讨论),使得输入/输出路径经配置以产生所需的结果。
1.2等待时间不敏感的通道
通信弧(arc)是数据流图的第二主组件。CSA的某些实施例将这些弧描述为等待时间不敏感的通道,例如,有序、回压式(例如,直到有用于存储输出的空间才产生或发送输出)、点对点通信通道。如同数据流操作器那样,等待时间不敏感的通道在根本上是异步的,从而给予了组合许多类型的网络来实现特定图的通道的自由。等待时间不敏感的通道可具有任意长的等待时间,并仍忠实地实现CSA架构。然而,在某些实施例中,在性能和能量方面具有强烈的动机来使等待时间尽可能小。本文中的第2.2公开了网络微架构,其中,以流水线方式、在不多于一个周期等待时间的情况下实现数据流图通道。等待时间不敏感的通道的实施例提供关键的抽象层,该关键的抽象层可与CSA架构一起利用以向应用编程器提供许多运行时服务。例如,CSA可在实现CSA配置(将程序加载到CSA阵列上)时利用等待时间不敏感的通道。
图4图示根据本公开的实施例的数据流图400的示例执行。在步骤1,输入值(例如,针对图3B中的X的1以及针对图3B中的Y的2)可被加载在数据流图400中以执行1*2乘法操作。数据输入值中的一个或多个在操作中可以是静态的(例如,恒定的)(例如,参照图3B,X为1及Y为2)或在操作期间被更新。在步骤2,(例如,流控制路径网络上的)处理元件或其他电路将0输出至pick节点404的控制输入(例如,多路复用器控制信号)(例如,从端口获得“1”作为源送至其输出),并输出0以控制switch节点406的输入(例如,多路复用器控制信号)(例如,以便使其输入离开端口“0”向外提供至目的地(例如,下游处理元件))。在步骤3,数据值1从pick节点404(并且例如在pick节点404处消耗其控制信号“0”)输出到乘法器节点408,以便在步骤4处与数据值2相乘。在步骤4,乘法器节点408的输出到达switch节点406,例如,其使switch节点406消耗控制信号“0”以在步骤5处从switch节点406的端口“0”输出值2。随后,该操作完成。因此可相应地对CSA编程,使得每一个节点的对应数据流操作器执行图4中的操作。虽然在该示例中执行被串行化,但是原则上所有数据流操作可并行地执行。在图4中使用步骤以便将数据流执行与任何物理微架构表现形式区分开。在一个实施例中,下游处理元件用于(例如,在流控制路径网络上)将信号(或不将就绪信号)发送至切换装置406,以使来自切换装置406的输出停止,直到下游处理元件为输出做好准备(例如,具有存储空间)。
1.3存储器
数据流架构总体上聚焦通信和数据操纵,较不关注状态。然而,启用实际的软件、尤其是以传统序列化语言编写的程序要求非常关注与存储器的对接。CSA的某些实施例将架构存储器操作用作它们对(例如,大型)状态化存储的主接口。从数据流图的视角看,存储器操作类似于其他数据流操作,例外在于,存储器操作具有更新共享存储的副作用。具体地,本文中的某些实施例的存储器操作具有与每一个其他数据流操作器相同的语义,例如,当它们的操作数(例如,地址)可用且在一些等待时间之后响应被产生时,这些存储器操作“执行”。本文中的某些实施例显式地将操作数输入与结果输出解耦,使得存储器操作器本质上是流水线式的并具有产生许多同时的待决请求的潜力,从而例如使存储器操作器非常适应存储器子系统的等待时间和带宽特性。CSA的实施例提供基本存储器操作,诸如,加载和存储,该加载取得地址通道,并以对应于该地址的值填充响应通道。CSA的实施例也提供更高级的操作(诸如,存储器内原子和一致性操作器)。这些操作可具有与其对等的冯·诺依曼操作类似的语义。CSA的实施例可对使用序列化语言(诸如,C和Fortran)描述的现有程序进行加速。支持这些语言模型的结果是对程序存储器顺序进行寻址,例如,对典型地由这些语言规定的存储器操作的串行排序。
图5图示根据本公开的实施例的程序源(例如,C代码)500。根据C编程语言的存储器语义,存储器复制(memcpy)应当被串行化。然而,如果已知阵列A与阵列B不相交,则memcpy可利用CSA的实施例来并行化。图5进一步图示程序顺序的问题。一般而言,编译器不能够证明阵列A与阵列B不同,例如,无论对于相同索引值还是对于跨循环体的不同索引值。这被称为指针或存储器别名(aliasing)。由于编译器用于生成静态地正确的代码,因此它们经常被迫地使存储器访问串行化。典型地,针对序列化的冯·诺依曼架构的编译器将指令排序用作实施程序顺序的自然手段。然而,CSA的实施例没有如程序计数器所定义的指令排序或基于指令的程序排序的概念。在某些实施例中,传入依赖性令牌(例如,其不包含架构可见信息)像所有其他数据流令牌,并且存储器操作直到它们接收到依赖性令牌才可以执行。在某些实施例中,一旦存储器操作的操作对逻辑上后续的依赖性存储器操作可见,这些存储器操作就产生传出依赖性令牌。在某些实施例中,依赖性令牌类似于数据流图中的其他数据流令牌。例如,由于存储器操作在有条件上下文中发生,因此依赖性令牌也可使用在第1.1节中所述的控制操作器来操纵(例如,像任何其他令牌那样)。依赖性令牌可具有使存储器访问串行化的效果,从而例如向编译器提供在架构上定义存储器访问的顺序的手段。
1.4运行时服务
对CSA的实施例的主要的架构方面考虑涉及用户级程序的实际执行,但是提供巩固该执行的若干支持机制也是理想的。这其中的首要因素是配置(其中,数据流图被加载到CSA中)、提取(其中,执行图的状态被移动到存储器)和异常(其中,结构中的数学、软性和其他类型的错误可能由外部实体检测到并处置)。以下第2.9节讨论用于实现这些功能的高效、高度流水线化的实现方式的CSA的实施例的等待时间不敏感的数据流架构的属性。从概念上说,配置可将数据流图的状态(例如,一般从存储器)加载到互连(和/或通信网络(例如,其网络数据流端点电路))和处理元件(例如,结构)中。在该步骤期间,CSA中的所有结构可被加载有新数据流图,并且任何数据流令牌存活于那个图中例如作为上下文切换的结果。CSA的等待时间不敏感语义可准许结构的分布式异步初始化,例如,PE一经配置,它们就可立即开始执行。未经配置的PE可回压它们的通道,直到这些PE被配置,从而例如防止经配置元件与未经配置元件之间的通信。CAS配置可被分区为特权级和用户级状态。此类两级分区可使结构的主配置在不调用操作系统的情况下发生。在提取的一个实施例中,数据流图的逻辑示图被捕捉并被提交到存储器中,例如,包括图中的所有实况的控制和数据流令牌和状态。
提取也可在通过创建结构检查点来提供可靠性保证时发挥作用。CSA中的异常一般可由导致处理器中的异常相同的事件导致,这些事件诸如,非法操作器自变量或可靠性、可用性和耐用性(RAS)事件。在某些实施例中,在(例如,校验自变量值的)数据流操作器的级别上或通过模块化算术方案检测异常。在检测到异常后,数据流操作器(例如,电路)可停止并发射异常消息,该异常消息例如包含操作标识符和已发生的问题的性质的一些细节两者。在一些实施例中,数据流操作器将保持停止,直到它已被重配置。随后,异常消息可被传递至相关联的处理器(例如,核)以用于服务(例如,其可包括提取图供软件分析)。
1.5片级架构
CSA计算机架构(例如,针对HPC和数据中心用途)的实施例是分片的。图6和图8示出CSA的片级部署。图8示出CSA的全片实现方式,例如,其可以是具有核的处理器的加速器。该架构的主要优势可以是降低的设计风险,例如使得CSA与核在制造时被完全解耦。除了允许更好的组件重新使用之外,这还可允许组件(像CSA高速缓存)仅考虑CSA,而不是例如需要并入对核的更严格的等待时间要求。最终,分开的片可允许CSA与小型核或大型核集成。CSA的一个实施例捕捉大多数向量并行的工作负荷,使得大多数向量型工作负荷直接在CSA上运行,但是在某些实施例中,核中的向量型指令可被包括以例如支持传统的二进制。
2.微架构
在一个实施例中,CSA微架构的目的是提供由CAS架构指定的每一个数据流操作器的高质量实现方式。CSA微架构的实施例提供了:微架构的每一个处理元件(和/或通信网络(例如,其网络数据流端点电路))都对应于架构数据流图中的大约一个节点(例如,实体)。在一个实施例中,数据流图中的节点分布在多个网络数据流端点电路中。在某些实施例中,这导致不仅紧凑而且高能效的架构元件,紧凑导致密集的计算阵列,高能效则例如处理元件(PE)既简单又高度地未经复用(例如,针对CSA的配置(例如,编程)执行单个数据流操)。为了进一步减小能量和实现面积,CSA可包括可配置异构结构样式,其中,其每一个PE仅实现数据流操作器的适当子集(例如,利用以(多个)网络数据流端点电路实现的数据流操作器的分开的适当子集)。可供应外围和支持子系统(诸如,CSA高速缓存)以支持主CSA处理结构自身中的分布式并行性现状。CSA微架构的实现方式可实现存在于架构中的数据流和等待时间不敏感的通信抽象。在某些实施例中,在编译器生成的图中的节点与CSA中的数据流操作器(例如,数据流操作器计算元件)之间(例如,实质上)存在一对一对应关系。
以下是对示例CSA的讨论,随后是对微架构的更详细讨论。本文中的某些实施例提供允许容易的编译的CSA,例如,与现有的FPGA编译器形成对照,现有的FPGA编译器处置编程语言(例如,C或C++)的小的适当子集,并且编译小型程序甚至都需要许多小时。
CSA架构的某些实施例准许像双精度浮点这样的异构粗粒度操作。程序能以较不粗糙粒度的操作表达,例如使得所公开的编译器比传统的空间编译器运行得更快。某些实施例包括具有新处理元件的结构来支持像程序排序的存储器访问这样的序列化概念。某些实施例实现用于支持粗粒度数据流型通信通道的硬件。这种通信模型是抽象的,并且非常接近由编译器使用的控制数据流表示。本文中的某些实施例包括支持单周期等待时间通信的网络实现方式,例如,利用支持单控制数据流操作的(例如,小型)PE。在某些实施例中,这不仅改善能效和性能,而且还简化了编译,因为编译器在在高级数据流构造与结构之间进行一对一映射。本文中的某些实施例因此简化了将现有的(例如,C、C++或Fortran)程序编译至CSA(例如,结构)的任务。
能效可以是现代计算机系统中的首要考虑。本文中的某些实施例提供高能效空间架构的新模式。在某些实施例中,这些架构形成结构,该结构具有小型、高能效、面向数据流的处理元件(PE)(和/或分组交换型通信网络(例如,其网络数据流端点电路))与轻量电路交换型通信网络(例如,互连)的异构混合的独特组成,例如,该结构具有对流控制的加强的支持。由于每一者的能量优势,这些组件的组合可形成适用于以极其高能效方式来执行编译器生成的并行程序的空间加速器(例如,作为计算机的部分)。由于该结构是异构的,可通过引入新的域特定的PE来为不同的应用域定制某些实施例。例如,用于高性能计算的结构可包括针对双精度、融合乘-加的某种定制,而针对深度神经网络的结构可包括低精度浮点操作。
空间架构模式的实施例(例如,如图6中所例示)是由处理元件(PE)间网络连接的轻量型PE的组成。一般而言,PE可包括数据流操作器,例如,其中一旦(例如,所有的)输入操作数到达数据流操作器,某个操作(例如,微指令或微指令的集合)就被执行,并且结果被转发到下游操作器。因此,控制、调度和数据存储可在多个PE之间分布,从而例如去除主导经典处理器的集中式结构的开销。
程序可通过配置PE和网络而被转换为数据流图以表达该程序的控制数据流图,该数据流图被映射到架构上。通信通道可以是流受控且完全回压的,使得例如如果源通信通道没有数据或者目的地通信通道为满,则PE将停止。在一个实施例中,在运行时,数据流过已被配置成用于实现操作(例如,经加速的算法)的PE和通道。例如,数据可从存储器通过结构而流入,并且随后向外回到存储器。
此类架构的实施例相对于传统多核处理器可实现卓越的性能效率:(例如,以PE形式的)计算相比在较大核中可以更简单、能效更高且更丰富,并且与例如像在典型的多核处理器中那样在宽的全芯片网络上进行形成对照,通信可以是直接的且主要是短途的。此外,由于架构的实施例是极度并行的,因此在不严重影响吞吐量的情况下,许多强大的电路和器件级优化是可能的,例如,低泄漏器件和低工作电压。这些较低级别的优化可实现相对于传统核的甚至更大的性能优势。这些实施例的在架构级、电路级和器件级产出的效率的组合是引人注目的。随着晶体管密度继续增加,该架构的实施例可实现更大的有效区域。
本文中的实施例提供数据流支持和电路交换的独特组合以使结构相比先前的架构能够更小,能效更高,并提供更高的聚合性能。FPGA一般朝着细粒度位操纵来调整,而本文中的实施例朝着HPC应用中发现的双精度浮点操作来调整。本文中的某些实施例除根据本公开的CSA之外还可包括FPGA。
本文中的某些实施例将轻量型网络与高能效数据流处理元件(和/或通信网络(例如,其网络数据流端点电路))组合以形成高吞吐量、低等待时间、高能效HPC结构。该低等待时间网络允许以更少的功能(例如,仅一条或两条指令,并也许只有一个架构可见寄存器,因为将多个PE聚集在一起来形成完整的程序是高效的)来实现处理元件(和/或通信网络(例如,其网络数据流端点电路))的建立。
相对于处理器核,本文中的CSA实施例可提供更多计算密度和能效。例如,当PE(例如,相比核)非常小时,CSA可比核执行多得多的操作,并且可具有比核多得多的计算并行性,例如,也许多达作为向量处理单元(VPU)的FMA的数量的16倍。为了利用所有这些计算元件,在某些实施例中,每个操作的能量非常低。
本申请的数据流架构的实施例的能量优势有许多。并行性在数据流图中是显式的,并且CSA架构的实施例不花费能量或花费最小的能量来提取该并行性,例如,不像乱序处理器,该乱序处理器每当指令被执行时就必须重新发现并行性。在一个实施例中,由于每一个PE负责单个操作,因此寄存器组和端口计数可以是小的,例如经常仅为一个,并因此比在核中的它们的对等物使用更少的能量。某些CSA包括许多PE,这些PE中的每一个保存实况程序值,从而给予传统架构中的巨型寄存器组的聚合效应,这显著地减少了存储器访问。在其中存储器是多端口且分布式的实施例中,CSA相比核可维持多得多的待决存储器请求并利用更多带宽。这些优势可组合以实现现对于裸算术电路的成本仅为小百分比的每瓦能量等级。例如,在整数相乘的情况下,CSA可消耗不比底层乘法电路多25%的能量。相对于核的一个实施例,那个CSA结构中的整数操作消耗每个整数操作能量的小于1/30。
从编程的角度来看,CSA架构的实施例的应用特定的顺应性实现相比向量处理单元(VPU)的显著优势。在传统的非灵活性架构中,像浮点除法或各种超越数学函数这样的功能单元的数量必须在设计时基于一些期望的用例来选择。在CSA架构的实施例中,此类函数可(例如,由用户而非制造商)基于每一个应用的要求配置到结构中。应用吞吐量可由此进一步增加。同时,通过避免固化此类函数并转而供应像浮点乘法那样的基元函数的更多实例,CSA的实施例的计算密度得以改善。这些优势在HPC工作负荷中可以是显著的,HPC工作负荷中的一些在超越函数中花费浮点执行时间的75%。
CSA的某些实施例将显著的进展表示为面向数据流的空间架构,例如,本公开的PE可以更小,但也能效也更高。这些改善可直接源于面向数据流的PE与轻量、电路交换型互连的组合,轻量、电路交换型互连例如具有单周期等待时间,这例如与(例如具有高至少300%的等待时间的)分组交换型网络形成对照。PE的某些实施例支持32位或64位操作。本文中的某些实施例准许引入新的应用特定的PE,例如,用于机器学习或安全,并且不仅是同构组合。本文中的某些实施例将轻量、面向数据流的处理元件与轻量、低等待时间网络组合以形成高能效计算结构。
为使某些空间架构能够成功,编程者将花相对而言很少的功夫来配置它们,例如,同时获得相对于序列化核的显著的功率和性能优越性。本文中的某些实施例提供易于(例如,由编译器)编程、高功率效率且高度并行的CSA(例如,空间结构)。本文中的某些实施例提供实现这三个目标的(例如,互连)网络。从可编程性的角度看,网络的某些实施例提供流受控的通道,该流受控的通道例如对应于编译器中使用的执行的控制数据流图(CDFG)模型。某些网络实施例利用专用电路交换型链路,使得程序性能更易于由人和编译器两者推导出,因为性能是可预测的。某些网络实施例提供高带宽和低等待时间两者。某些网络实施例(例如,静态的、电路交换)提供0至1周期的等待时间(例如,取决于传输距离)。某些网络实施例通过并行地(并例如在低级金属中)布置若干网络来提供高带宽。某些网络实施例在低级金属中且通过短距离来通信,因此功率效率非常高。
网络的某些实施例包括用于流控制的架构支持。例如,在由小型处理元件(PE)组成的空间加速器中,通信等待时间和带宽对于总体程序性能可以是关键的。本文中的某些实施例提供轻量、电路交换型网络以及支持该网络所需的微架构控制特征,该轻量、电路交换型网络促进空间处理阵列(诸如,图6中所示的空间阵列)中的PE之间的通信。网络的某些实施例实现点对点、流受控通信通道的构造,该点对点、流受控通信通道支持面向数据流的处理元件(PE)的通信。除了点对点通信之外,本文中的某些网络还支持多播通信。通信通道可通过静态配置网络以形成PE之间的虚拟电路来形成。本文中的电路交换技术可减小通信等待时间并相应地使网络缓冲最小化,从而例如产生高性能和高能效两者。在网络的某些实施例中,PE间等待时间可低至零个周期,这意味着下游PE可在数据被产生后在该周期内操作该数据。为了获得甚至更高的带宽,并且为了准许更多程序,多个网络可并行地布置,例如,如图6中所示。
空间架构(诸如,图6中所示的空间架构)可以是由PE间网络(和/或通信网络(例如,其网络数据流端点电路))连接的轻量型处理元件的组成。被视为数据流图的程序可通过配置PE和网络而被映射到架构上。一般而言,PE可被配置为数据流操作器,并且一旦(例如,所有的)输入操作数到达PE,随后一些操作就可发生,并且结果被转发到所需的下游PE。PE可通过专用虚拟电路进行通信,该专用虚拟电路通过静态地配置电路交换型通信网络而形成。这些虚拟电路可以是流受控且完全被回压(back pressure)的,使得例如如果源没有数据或目的地为满,则PE将停止。在运行时,数据可流经实现经映射算法的PE。例如,数据可从存储器通过结构而流入,随后向外回到存储器。该架构的实施例相对于传统多核处理器可实现卓越的性能效率:例如,其中,与扩展存储器系统相反,以PE形式的计算比较大的核更简单且更多,并且通信是直接的。
图6图示根据本公开的实施例的加速器片600,该加速器片600包括处理元件(PE)的阵列。互连网络被描绘为电路交换型、静态配置的通信通道。例如,通道的集合通过切换装置(例如,第一网络中的切换装置610和第二网络中的切换装置620)被耦合在一起。第一网络和第二网络可以是分开的或可以耦合在一起。例如,切换装置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图示根据本公开的实施例的(例如,参照图6所讨论的网络一或网络二中的)可配置数据路径网络700。网络700包括多个多路复用器(例如,多路复用器702、704、706),这些多路复用器可(例如,经由它们相应的控制信号)经配置以将(例如,来自PE的)一个或多个数据路径连接在一起。图7B图示根据本公开的实施例的(例如,参照图6所讨论的网络一或网络二中的)可配置流控制路径网络701。网络可以是轻量PE至PE网络。网络的某些实施例可视为用于构建分布式点对点数据通道的组成基元的集合。图7A示出使两个通道(粗体黑线和点状黑线)被启用的网络。粗体黑线通道是多播的,例如,单个输入被发送到两个输出。注意,即便专用的电路交换型路径形成在通道端点之间,通道也可在单个网络内的一些点处交叉。此外,该交叉不会引入两个通道之间的结构危害,使得每一个独立地且以全带宽操作。
实现分布式数据通道可包括图7A-图7B中所示的两个路径。前向或数据路径将数据从产生方携带到消耗方。多路复用器可配置成引导数据和有效位从产生方到消耗方,例如,如图7A中所示。在多播的情况下,数据将被引导到多个消耗方端点。网络的该实施例的第二部分是流控制或回压路径,其与前向数据路径相反地流动,例如,如图7B中所示。消耗方端点可断言它们何时准备好接受新数据。随后,可使用可配置的逻辑结(在图7B中标记为(例如,回流)流控制功能)将这些信号往回引导到产生方。在一个实施例中,每一个流控制功能电路可以是多个切换装置(例如,多个mux),例如,与图7A类似。流控制路径可处置控制数据从消耗方返回到产生方。结可启用多播,例如,其中在产生方假定数据已被接收之前,每一个消耗方准备好接收数据。在一个实施例中,PE是具有作为其架构接口的数据流操作器的PE。附加地或替代地,在一个实施例中,PE可以是(例如,结构中的)任何种类的PE,例如但不限于具有指令指针、经触发指令或基于状态机的架构接口的PE。
除了例如PE被静态地配置之外,网络也可被静态地配置。在该配置步骤期间,配置位可在每一个网络组件处被设置。这些位控制例如多路复用器选择和流控制功能。网络可包括多个网络,例如,数据路径网络和流控制路径网络。网络或多个网络可利用不同宽度(例如,第一宽度以及更窄或更宽的宽度)的路径。在一个实施例中,数据路径网络具有比流控制路径网络的宽度更宽的(例如,位传输)宽度。在一个实施例中,第一网络和第二网络中的每一个都包括它们自身的数据路径网络和流控制路径网络,例如,数据路径网络A和流控制路径网络A以及更宽的数据路径网络B和流控制路径网络B。
网络的某些实施例是无缓冲的,并且数据用于在单个周期中在产生方与消耗方之间移动。网络的某些实施例也是无边界的,即,网络跨越整个结构。在一个实施例中,一个PE用于在单个周期中与任何其他PE通信。在一个实施例中,为了改善路由带宽,可在PE的行之间并行地布置若干网络。
相对于FPGA,本文中的网络的某些实施例具有三个优势:面积、频率和程序表达。本文中的网络的某些实施例以粗粒度操作,其例如减少配置位的数量并由此减小网络的面积。网络的某些实施例还通过在电路(例如,硅)中直接实现流控制逻辑来获得面积减小。强化的网络实现方式的某些实施例也享有相对于FPGA的频率优势。由于面积和频率优势,当在吞吐量奇偶校验处使用较低电压的情况下,功率优势可存在。最后,网络的某些实施例提供比FPGA线更好的高级语义,尤其是相对于可变时序方面,因此,那些实施例更容易由编译器针对。本文中的网络的某些实施例可视为用于构建分布式点对点数据通道的组成基元的集合。
在某些实施例中,多播源可能无法断言其数据有效,除非该多播源从每一个接收器(sink)接收到就绪信号。因此,在多播情况下,可利用额外的结和控制位。
像某些PE那样,网络可被静态地配置。在该步骤期间,配置位在每一个网络组件处被设置。这些位控制例如多路复用器选择和流控制功能。本申请的网络的前向路径要求一些位以使该前向路径的mux摇摆。在图7A中示出的示例中,要求每一跳(hop)四个位:东mux和西mux中的每一个利用一个位,而向南的多路复用器利用两个位。在该实施例中,四个位可用于数据路径,但是7个位可用于(例如,流控制路径网络中的)流控制功能。如果例如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组成,这些PE中的每一个仅实现数据流操作器的适当子集。作为示例,图9示出能够实现宽泛的整数和控制操作集的PE的暂定的实现方式。其他PE(包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些PE)也可具有类似的实现样式,例如,用适当的(数据流操作器)电路替代ALU。在执行开始之前,CSA的PE(例如,数据流操作器)可经配置(例如,编程)以实现来自PE支持的集合中的特定的数据流操作。配置可包括一个或两个控制字,这一个或两个控制字指定控制ALU的操作码、引导PE内的各种多路复用器,并驱使数据流进入PE通道以及离开PE通道。数据流操作器可通过对这些配置位进行微编码来实现。图9中的所描绘的整数PE 900被组织成从顶部流动到底部的单级逻辑流水线。数据从本地网络集合中的一个本地网络进入PE900,在PE 900中,该数据被寄存在输入缓冲器中用于后续操作。每一个PE可支持多个宽的面向数据的通道以及窄的面向控制的通道。所供应的通道的数量可基于PE的功能而有所变化,但是面向整数的PE的一个实施例具有2个宽的以及1-2个窄的输入和输出通道。虽然整数PE被实现为单周期流水线,但是可利用其他流水线式选择。例如,乘法PE可具有多个流水线级。
PE执行可按数据流样式继续进行。基于配置微代码,调度器可检查PE入口和出口缓冲器的状态,并且当用于经配置操作的所有输入都已到达且操作的出口缓冲器可用时,安排由(例如,ALU上的)数据操作器对操作的实际执行。所得到的值可被放置在经配置的出口缓冲器中。当缓冲变得可用时,一个PE的出口缓冲器与另一PE的入口缓冲器之间的传送可异步地发生。在某些实施例中,提供PE使得对于每个周期至少一个数据流操作完成。第2节讨论了涵盖基元操作(诸如,加(add)、异或(xor)或pick)的数据流操作器。某些实施例可提供在能量、面积、性能和等待时间方面的优势。在一个实施例中,凭借对PE控制路径的扩展,可启用更多融合组合。在一个实施例中,处理元件的宽度为64位,例如用于对HPC中的双精度浮点计算的高度利用,并用于支持64位存储器寻址。
2.2通信网络
CSA微架构的实施例提供多个网络的层次结构,该多个网络一起提供跨多个通信比例的等待时间不敏感的通道的架构抽象的实现方式。CSA通信层次结构的最低级可以是本地网络。本地网络可以是静态地进行电路交换的,例如,使用配置寄存器来使本地网络数据路径中的(多个)多路复用器摇摆,以便在通信PE之间形成固定的电路径。在一个实施例中,对于每个数据流图(例如,在PE配置的同时),对本地网络的配置设置一次。在一个实施例中,静态的电路交换针对能量进行优化,例如,其中CSA通信流量中的绝大多数(也许是大于95%)将跨越本地网络。程序可包括在多个表达式中使用的术语。为了对这种情况进行优化,本文中的实施例提供对本地网络内的多播的硬件支持。若干本地网络可被聚集在一起以形成路由通道,这些路由通道例如在PE的行和列之间散布(为网格)。作为优化,若干本地网络可被包括以携带控制令牌。相比FPGA互连,CSA本地网络能以数据路径的粒度被路由,并且另一区别可以是CSA对控制的处理。CSA本地网络的一个实施例是显式地流受控的(例如,回压)。例如,对于每一个前向数据路径和多路复用器集合,CSA用于提供在物理上与前向数据路径配对的后向流动流控制路径。两个微架构路径的组合可提供等待时间不敏感的通道抽象的低等待时间、低能量、小面积、点对点实现方式。在一个实施例中,CSA的流控制线对于用户程序不是可见的,但是这些流控制线可由维护用户程序的架构操纵。例如,第1.2节中描述的异常处置机制可通过以下方式来实现:在检测到异常条件后,将流控制线拉到“不存在”状态。该动作不仅可温和地停止冒犯性计算中所涉及的流水线的那些部分,而且还可保持机器状态先于异常,以便例如进行诊断分析。第二网络层(例如,夹层网络)可以是共享的分组交换型网络。夹层网络可包括多个分布式网络控制器、网络数据流端点电路。夹层网络(例如,由图46中的虚线框示意性地指示的网络)能以例如等待时间、带宽和能量为代价来提供更一般的长距离通信。在一些程序中,多数通信可在本地网路上发生,因此相比而言,夹层网络供应将显著地减少,例如,每一个PE可连接至多个本地网络,但是CSA针对PE的每一个逻辑邻域将仅供应一个夹层端点。由于夹层实际上是共享网络,因此每一个夹层网络可携带多个逻辑上独立的通道,并例如以多个虚拟通道来供应。在一个实施例中,夹层网络的主要功能是用于提供PE间以及PE与存储器间的宽范围通信。除了该能力之外,夹层还可包括例如用于某些数据流操作的(多个)网络数据流端点电路。除了该能力之外,夹层还可操作为运行时支持网络,例如,通过该运行时支持网络,各种服务能以用户-程序透明的方式来访问完整的结构。在该能力方面,夹层端点可在例如CSA配置期间充当用于其本地邻域的控制器。为了形成跨越CSA片的通道,可利用三个子通道和两个本地网络通道(其携带至夹层网络中的单个通道以及来自夹层网络中的单个通道的流量)。在一个实施例中,利用一个夹层通道,例如,一个夹层和两个本地=总共3个网络跳。
通道跨网络层的可组成性能以片间(inter-tile)、管芯间以及结构粒度被扩展到更高级别的网络层。
图9图示根据本公开的实施例的处理元件900。在一个实施例中,操作配置寄存器919在配置(例如,映射)期间被加载,并且指定该处理(例如,计算元件)将执行的特定操作(或多个操作)。寄存器920的活动可由那个操作控制(多路复用器916的输出,例如,由调度器914控制)。例如,当输入数据和控制输入到达时,调度器914可调度处理元件900的一个或多个操作。控制输入缓冲器922连接至本地网络902(例如,并且本地网络902可包括如图7A中的数据路径网络和如图7B中的流控制路径网络),并且当值到达(例如,网络具有(多个)数据位和(多个)有效位)时,以该值加载该控制输入缓冲器922。控制输出缓冲器932、数据输出缓冲器934和/或数据输出缓冲器936可接收处理元件900的输出(例如,如由操作(多路复用器916的输出)控制)。每当ALU 918执行(也由多路复用器916的输出控制)时,状态寄存器938可被加载。控制输入缓冲器922和控制输出缓冲器932中的数据可以是单个位。多路复用器921(例如,操作数A)和多路复用器923(例如,操作数B)可作为输入的源。
例如,假设该处理(例如,计算)元件的操作是(或包括)在图3B中被称为调用pick的操作。则处理元件900用于从数据输入缓冲器924或数据输入缓冲器926选择数据,以便例如去往数据输出缓冲器934(例如,默认情况)或数据输出缓冲器936。因此,如果从数据输入缓冲器924选择,则922中的控制位可指示0,或者如果从数据输入缓冲器926选择,则922中的控制位可指示1。
例如,假设该处理(例如,计算)元件的操作是(或包括)在图3B中被称为调用switch的操作。处理元件900用于例如从数据输入缓冲器924(例如,默认情况)或数据输入缓冲器926将数据输出到数据输出缓冲器934或数据输出缓冲器936。因此,如果输出到数据输出缓冲器934,则922中的控制位可指示0,或者如果输出到数据输出缓冲器936,则922中的控制位可指示1。
多个网络(例如,互连)(例如,(输入)网络902、904、906以及(输出)网络908、910、912)可连接至处理元件。连接可以是例如参照图7A和图7B所讨论的切换装置。在一个实施例中,每一个网络包括两个子网络(或网络上的两个通道),例如,一个用于图7A中的数据路径网络,一个用于图7B中的流控制(例如,回压)路径网络。作为一个示例,本地网络902(例如,建立为控制互连)被描绘为被切换(例如,连接)到控制输入缓冲器922。在该实施例中,数据路径(例如,图7A中的网络)可携带控制输入值(例如,一个或多个位)(例如,控制令牌),并且流控制路径(例如,网络)可携带来自控制输入缓冲器922的回压信号(例如,回压或无回压令牌),以便例如向上游产生方(例如,PE)指示直到回压信号指示在控制输入缓冲器922中具有用于(例如,来自上游产生方的控制输出缓冲器的)新控制输入值的空间,该新控制输入值才将被加载到(例如,发送到)控制输入缓冲器922。在一个实施例中,直到同时满足(i)上游产生方从“控制输入”缓冲器922接收到“空间可用”回压信号;以及(ii)新控制输入值从上游产生方被发送,该新控制输入值才可进入控制输入缓冲器922,例如,并且这可使处理元件900停止,直到那种情况发生(并且(多个)目标、输出缓冲器中的空间可用)。
数据输入缓冲器924和数据输入缓冲器926能以类似方式执行,例如,本地网络904(例如,被建立为数据(与控制相对照)互连)被描绘为被切换(例如,连接)到数据输入缓冲器924。在该实施例中,数据路径(例如,图7A中的网络)可携带数据输入值(例如,一个或多个位)(例如,数据流令牌),并且流控制路径(例如,网络)可携带来自数据输入缓冲器924的回压信号(例如,回压或无回压令牌),以便例如向上游产生方(例如,PE)指示直到回压信号指示在数据输入缓冲器924中具有用于(例如,来自上游产生方的数据输出缓冲器的)新数据输入值的空间,该新数据输入值才将被加载到(例如,发送到)数据输入缓冲器924。在一个实施例中,直到同时满足(i)上游产生方从“数据输入”缓冲器924接收到“空间可用”回压信号;以及(ii)新数据输入值从上游产生方被发送,该新数据输入值才可进入数据输入缓冲器924,例如,并且这可使处理元件900停止,直到那种情况发生(并且(多个)目标、输出缓冲器中的空间可用)。控制输出值和/或数据输出可在它们相应的输出缓冲器(例如,932、934、936)中被停止,直到回压信号指示在输入缓冲器中具有用于(多个)下游处理元件的可用空间。
处理元件900可停止执行,直到其操作数(例如,控制输入值以及该控制输入值的一个或多个对应的数据输入值)被接收和/或直到处理元件900的(多个)输出缓冲器中具有用于将通过执行对那些操作数的操作而产生的数据的空间。
2.3存储器接口
请求地址文件(RAF)电路(在图10中示出简化版本)可负责执行存储器操作,并充当CSA结构与存储器层次结构之间的中介。由此,RAF的主要微架构任务可以是用于以CSA结构的有序语义使乱序存储器子系统合理化。在该能力方面,RAF电路可供应有完成缓冲器(例如,队列状结构),这些完成缓冲器对存储器响应重排序,并按请求顺序将这些存储器请求返回至结构。RAF电路的第二主要功能可以是用于以地址转换和页遍历器(walker)的形式提供支持。传入虚拟地址可使用通道关联的转换后备缓冲器(TLB)被转换为物理地址。为了提供充足的存储器带宽,每一个CSA片可包括多个RAF电路。像结构的各种PE那样,RAF电路可通过以下方式以数据流样式操作:在选择要执行的存储器操作之前,检查输入自变量和输出缓冲(如果需要)的可用性。然而,与一些PE不同,RAF电路在若干共同定位的存储器操作之间被复用。经复用的RAF电路可用于使其各个子组件的面积开销最小化,从而例如共享加速器高速缓存互连(ACI)网络(如第2.4节中更详细地所描述)、共享虚拟存储器(SVM)支持硬件、夹层网络接口和其他硬件管理设施。然而,具有也促进该选择的一些程序特性。在一个实施例中,(例如,有效的)数据流图用于轮循共享虚拟存储器系统中的存储器。存储器等待时间受约束程序(像图遍历)可利用许多分开的存储器操作,以便由于依赖于存储器的控制流而使存储器带宽饱和。虽然每一个RAF都可被复用,但是CAS可包括片粒度的多个(例如,在8个与32个之间)RAF以确保足够的高速缓存带宽。RAF可经由本地网络和夹层网络两者来与结构的其余部分通信。在RAF被复用的情况下,每一个RAF可与若干端口一起被供应到本地网络中。这些端口可充当至存储器的最低等待时间、高度确定性路径,供由等待时间敏感的或高带宽存储器操作使用。此外,RAF可被供应有夹层网络端点,例如,该夹层网络端点将存储器访问提供给运行时服务以及远端用户级存储器访问方。
图10图示根据本公开的实施例的请求地址文件(RAF)电路1000。在一个实施例中,在配置时,已经在数据流图中的存储器加载和存储操作在寄存器1010中被指定。随后,至数据流图中的那些存储器操作的弧可连接至输入队列1022、1024和1026。来自那些存储器操作的弧因此用于离开完成缓冲器1028、1030或1032。依赖性令牌(其可以是多个单个的位)到达队列1018和1020。依赖性令牌将从队列1016离开。依赖性令牌计数器1014可以是队列的紧凑表示,并且可跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器1014饱和,则没有附加的依赖性令牌可被生成用于新的存储器操作。相应地,存储器排序电路(例如,图11中的RAF)会停止调度新存储器操作,直到依赖性令牌计数器1014变成不饱和。
作为加载的示例,地址到达队列1022,调度器1012将队列1022与1010中的加载匹配。用于该加载的完成缓冲器槽按地址到达的顺序被指派。假定图中的该特定加载没有指定的依赖性,则由调度器(例如,经由存储器命令1042)将该地址和完成缓冲器槽派遣到存储器系统。当结果返回到多路复用器1040时(示意性地示出),该结果被存储到它指定的完成缓冲器槽中(例如,由于该结果沿着通过存储器系统全程都携带着目标槽)。完成缓冲器按地址到达的顺序将结果往回发送到本地网络(例如,本地网络1002、1004、1006或1008)中。
存储可以是类似的,例外在于,在任何操作被派遣到存储器系统之前,地址和数据两者必须到达。
2.4高速缓存
数据流图可能能够并行地生成大量(例如,字粒度)请求。因此,CSA的某些实施例将足够的带宽提供给高速缓存子系统以维护CSA。可利用高度区块化的高速缓存微架构(例如,如图11中所示)。图11图示根据本公开的实施例的电路1100,该电路1100具有耦合在多个加速器片1108、1110、1112、1114与多个高速缓存区块(例如,高速缓存区块1102)之间的多个请求地址文件(RAF)电路(例如,RAF电路(1))。在一个实施例中,RAF和高速缓存区块的数量可以按1:1或1:2的比率。高速缓存区块可包含完整的高速缓存行(例如,与按字切分形成对照),其中每一行具有在该高速缓存中的确切的一个原位(home)。高速缓存行可经由伪随机函数被映射至高速缓存区块。CSA可采用共享虚拟存储器(SVM)模型以与其他分片架构集成。某些实施例包括将RAF连接到高速缓存区块的加速器高速缓存互连(ACI)网络。该网络可在RAF与高速缓存之间承载地址和数据。ACI的拓扑可以是级联的交叉开关,例如,作为等待时间与实现复杂度之间的折中。所描绘的加速器高速缓存互连还耦合至高速缓存归属地代理(CHA)和/或下一级高速缓存1116。在一个实施例中,高速缓存归属地代理充当局部一致性和高速缓存控制器(例如,高速缓存代理)和/或也充当全局一致性和存储器控制器接口(例如,归属地代理)。请求地址文件电路可以如本文中所讨论,例如,在第2.2节中。
2.5集成性能监视电路
本文中的某些实施例包括处理元件的空间阵列作为加速用户应用的高能效且高性能的方法。空间架构的主要目标之一可以是针对高度复杂的应用传递(例如,非常)高的性能,并且那些应用可以包括性能调整的多次迭代以决定最优数据流操作器结合、放置、路由、存储器/高速缓存层次结构中的数据放置、数据表示/布局、动态功率/频率工作点选择等以便提取空间架构的完全性能潜力。在高度复杂的性能调整运用的某些实施例中,挑战可能在于决定要测量什么以及在必要硬件中投资什么以测量那些性能度量。仅软件检测方法可能向系统引入过多开销和/或过多扰动以至于性能监视数据不能作为准确的性能监视数据而被完全依赖。在一个实施例中,未使用的(例如,对于特定数据流图)(例如,整数)执行元件(PE)可以用于构造性能监视器(例如,逻辑)。然而,可能没有足够的未使用的(例如,整数)PE来提供性能监视和/或没有足够的本地网络资源来将数据从那些先前未使用的(例如,整数)PE路由,例如,那些PE基本上变成对于构造性能监视器是不可到达的。在其中(例如,所有)数据流操作器被再次放置和路由以使那些先前未使用的(例如,整数PE)可到达的一个实施例中,这冒着过多地扰乱数据流图以至于不能信任来自那些性能监视器的数据的风险。
本文中的某些实施例提供用于空间阵列中的性能监视的具有成本效益的方法。本文中的某些实施例提供不要求用户找到未使用的(例如,对于数据流图)(例如,整数)PE的具有成本效益的方法。本文中的某些实施例避免了由于需要再次放置和路由各种数据流操作器以便适应先前未使用的、被重新用作性能监视器的PE而产生的图扰动问题。某些实施例通过将轻量型性能监视电路注入到空间阵列中并且例如将这些性能监视电路连结为(多个)结构内网络来实现以上各项中的一个或多个。
本文中的某些实施例提供包括性能监视电路的空间阵列(例如,CSA)。在一个实施例中,性能监视电路是被设置(例如,构建)在空间结构中的轻量型特制灵活电路。在一个实施例中,性能监视电路被编程(例如,配置)为监视(例如,邻近的和/或活跃的)处理元件或其他电路,以提供关于被映射到给定空间结构上的应用(例如,数据流图)的性能特性的关键洞见。性能监视电路的某些实施例包括(例如,小的)计数器(例如,各自包括约8个位到约16个位),这些计数器跟踪相关联的PE的活动。在某些实施例中,在阈值被超过(例如,或与阈值相等)(例如,溢出)时或在转储清除时,计数器信息被转发给性能管理器电路。在一个实施例中,(例如,单个)性能管理器电路包括并且维护较高分辨率的计数器和/或至外部(例如,与数据流图分开的)软件的接口。本文中的某些实施例提供性能调整,例如,其对于释放空间阵列(例如,空间结构)的执行能力可能是至关重要的。本文中的某些实施例允许以分布式的非常低的成本以及从无扰动到微量扰动或无能量成本到微量能量成本来监视贯穿空间阵列(例如,CSA)的许多硬件事件的灵活性。本文中的某些实施例提供数据值以指示数据流操作器映射(例如,放置和路由)对于应用最优到什么程度。因此,某些实施例极大地改善空间结构编译器技术和放置和/或路由软件技术。
在某些实施例中,分散在处理元件的空间阵列(例如,CSA)中的多个性能监视电路(例如,作为与空间阵列的处理元件分开的组件)在允许被映射到空间结构上的程序或应用(例如,被视为数据流图的、通过配置PE和/或网络被映射到架构上的程序)不利用处理资源(例如,PE)来执行性能监视或考虑性能监视,例如,但替代地利用专用性能监视资源。在某些实施例中,(例如,几乎)没有对图执行的干扰,因此其收集的性能监视数据是可信的。在某些实施例中,性能数据的高保真度给予(例如,用户)不是仅追赶各种性能提高想法以完全优化应用的信心和动机,各种性能提高想法例如,打印功能(例如,printf)、模拟、仿真、基于软件的性能数据检测方面、或其他精细的或更复杂的性能提高想法。在一个实施例中,与模拟、仿真、或基于软件的性能数据检测不同,包括一个或多个性能监视电路的空间结构以全速或接近全速操作,并且允许例如在短时间内(例如,与每分钟执行新试验并测量数据一样快)的性能数据收集和调整的许多迭代。在某些实施例中,通过贯穿空间结构分布多个性能监视电路,每个性能监视电路要监视的原始值的数量(例如,来自每个PE的一个值)是相当小并且接近的(例如,用于单个性能监视电路的所有PE)。本文中的某些实施例提供(多个)性能监视电路,该性能监视电路在其控制电路和存储要求方面是轻量型的。本文中的某些实施例提供(多个)性能监视电路,该性能监视电路使用于将原始性能数据值从被监视的(例如,操作的)PE传输到性能监视电路和相关联的布线和定时开销的能量最小化。在某些实施例中,包括较高分辨率计数器和/或空间外部的(例如,在性能管理器电路中的)软件接口避免利用空间(例如,PE)阵列内的(例如,硅中的)(例如,任何)物理面积。
图12图示根据本公开的实施例的具有包括多个性能监视电路1204的处理元件的空间阵列1202的系统1200。在某些实施例中,空间阵列是任何空间阵列,例如,本文中所讨论的任何CSA。在某些实施例中,处理元件(PE)是任何PE,例如,本文中所讨论的任何PE。根据本公开的实施例,系统1200(例如,电路)包括耦合在处理元件的空间阵列1202(例如,形成为单个加速器片的系统1200)与多个高速缓存区块(例如,高速缓存区块(1)1210)之间的多个请求地址文件(RAF)电路(例如,RAF电路(1)1208)。在一个实施例中,RAF和高速缓存区块的数量可以按1:1或1:2的比率。高速缓存区块可包含完整的高速缓存行(例如,与按字切分形成对照),其中每一行具有在该高速缓存中的确切的一个原位。高速缓存行可经由伪随机函数被映射至高速缓存区块。CSA可采用共享虚拟存储器(SVM)模型以与其他分片架构集成。某些实施例包括将RAF连接到高速缓存区块的加速器高速缓存互连1212(例如,本文中所讨论的加速器高速缓存互连(ACI)网络)。加速器高速缓存互连1212可在RAF与高速缓存之间承载地址和数据。加速器高速缓存互连1212的拓扑可以是级联的交叉开关,例如,作为等待时间与实现复杂度之间的折中。所描绘的加速器高速缓存互连1212还耦合至高速缓存归属地代理(CHA)和/或下一级高速缓存1216。在一个实施例中,高速缓存归属地代理充当局部一致性和高速缓存控制器(例如,高速缓存代理)和/或也充当全局一致性和存储器控制器接口(例如,归属地代理)。请求地址文件电路可以如本文中所讨论,例如,在第2.2节中。
所描绘的系统1200包括贯穿处理元件的空间阵列1202设置的多个性能监视电路1204。在一个实施例中,单个(例如,每个)性能监视电路用于接收来自多个处理元件(PE)的监视值。例如,性能监视电路1204可以接收来自(例如,八个)相邻PE中的每一个PE的一个或多个监视值。在一个实施例中,(例如,每个)性能监视电路接收来自2个、3个、4个、5个、6个、7个、8个、9个、10个、20个、30个、32个、40个等PE中的每一个PE的一个或多个监视值。在一个实施例中,(例如,每个)性能监视电路用于接收来自邻接性能监视电路(例如,如图12所示)的PE中的一个或多个(例如,全部)PE的一个或多个监视值。PE可以是图13中的PE。性能监视电路可以是图14中的性能监视电路。性能监视电路可以将性能监视消息(例如,包括性能监视值)聚合为经聚合的性能监视消息(例如,经聚合的监视值)。性能监视电路可以例如直接地或经由RAF和ACI 1212将经聚合的性能监视消息(例如,经聚合的监视值)发送到性能管理器电路。
(例如,每个)RAF可以任选地包括异常管理器电路,例如,所描绘的RAF 1208包括异常管理器电路1214。异常管理器电路可以对从性能监视电路接收的异常消息贴标签(例如,通过添加一个或多个引导位)并(例如,经由ACI 1212)将它们向前转发给(例如,中央)性能管理器电路1206。在一个实施例中,这允许异常管理器电路立即将数据转发给计数器管理器,例如,转发给性能管理器电路。任选地,异常管理器电路将性能监视消息(例如,包括性能监视值)聚合为经聚合的性能监视消息(例如,经聚合的监视值)以减少到计数器管理器的通信量,例如,其中(例如,每个)异常管理器电路被提供用于该能力的电路(例如,计数器)。
性能管理器电路1206可以接收来自一个或多个性能监视电路1204(例如,其适当子集)的(例如,经聚合的)性能监视消息(例如,包括一个或多个监视值)。性能管理器电路1206可以基于(例如,经聚合的)性能监视消息(例如,包括一个或多个监视值)(的例如接收)执行各种动作。在一个实施例中,性能管理器电路用于基于(例如,经聚合的)性能监视消息(例如,包括一个或多个监视值)采取纠正动作。纠正动作可以是将电压和/或频率增加到比其他PE更慢地执行的PE,其他PE例如是执行相同数据流图的一部分的PE。
性能管理器电路1206可以聚合计数器中的消息。性能管理器电路1206可以被设置(例如,编程)为触发异常(例如,将消息发送到CSA设备驱动器),该异常指示事件已经发生或者阈值已经被穿过或满足。在某些实施例中,性能监视电路被设置(例如,编程)为当单个事件被观察到时发布消息。
图13图示根据本公开的实施例的处理元件1300。处理元件1300可以包括本文中讨论的PE组件中的一个或多个(例如,任一个)。处理元件1300可以包括监视路径(例如,线)中的一个或多个(例如,任一个)。在图13中,某些路径被示为虚线。在某些实施例中,监视路径用于将监视值从所连接的组件发送到目的地电路,例如,发送到性能监视电路。在一个实施例中,监视路径是用于承载单个监视值(例如,高值或低值,例如,分别为二进制一或二进制零)的单条线,该单个监视值例如来自PE的单个组件的监视值。
在一个实施例中,操作配置寄存器1319在配置(例如,映射)期间被加载,并且指定该处理(例如,计算)元件将执行的特定操作(或多个操作)。寄存器1320的活动可由那个操作(多路复用器1316的输出)控制(例如,由调度器1314控制)。例如,当输入数据和控制输入到达时,调度器1314可调度处理元件1300的一个或多个操作。控制输入缓冲器1322连接至本地网络1302(例如,并且本地网络1302可包括如图7A中的数据路径网络和如图7B中的流控制路径网络),并且当值到达(例如,网络具有(多个)数据位和(多个)有效位)时,以该值加载该控制输入缓冲器1322。控制输出缓冲器1332、数据输出缓冲器1334和/或数据输出缓冲器1336可接收处理元件1300的输出(例如,如由操作(多路复用器1316的输出)控制)。每当ALU 1318执行(也由多路复用器1316的输出控制)时,状态寄存器1338可被加载。控制输入缓冲器1322和控制输出缓冲器1332中的数据可以是单个位。多路复用器1321(例如,操作数A)和多路复用器1323(例如,操作数B)可作为输入的源。
例如,假设该处理(例如,计算)元件的操作是(或包括)在图3B中被称为调用pick的操作。则处理元件1300用于从数据输入缓冲器1324或数据输入缓冲器1326选择数据,以便例如去往数据输出缓冲器1334(例如,默认情况)或数据输出缓冲器1336。因此,如果从数据输入缓冲器1324选择,则1322中的控制位可指示0,或者如果从数据输入缓冲器1326选择,则1322中的控制位可指示1。
例如,假设该处理(例如,计算)元件的操作是(或包括)在图3B中被称为调用switch的操作。处理元件1300用于例如从数据输入缓冲器1324(例如,默认情况)或数据输入缓冲器1326将数据输出到数据输出缓冲器1334或数据输出缓冲器1336。因此,如果输出到数据输出缓冲器1334,则1322中的控制位可指示0,或者如果输出到数据输出缓冲器1336,则1322中的控制位可指示1。
多个网络(例如,互连)(例如,(输入)网络1302、1304、1306以及(输出)网络1308、1310、1312)可连接至处理元件。连接可以是例如参照图7A和图7B所讨论的切换。在一个实施例中,每个网络包括两个子网络(或网络上的两个通道),例如,一个用于图7A中的数据路径网络,一个用于图7B中的流控制(例如,回压)路径网络。作为一个示例,本地网络1302(例如,建立为控制互连)被描绘为被切换(例如,连接)到控制输入缓冲器1322。在该实施例中,数据路径(例如,如图7A中的网络)可承载控制输入值(例如,一个或多个位)(例如,控制令牌),并且流控制路径(例如,网络)可承载来自控制输入缓冲器1322的回压信号(例如,回压或无回压令牌),以便例如向上游产生方(例如,PE)指示直到回压信号指示在控制输入缓冲器1322中具有用于(例如,来自上游产生方的控制输出缓冲器的)新控制输入值的空间,该新控制输入值才将被加载到(例如,发送到)控制输入缓冲器1322。在一个实施例中,直到同时满足(i)上游产生方从“控制输入”缓冲器1322接收到“空间可用”回压信号;以及(ii)新控制输入值从上游产生方被发送,该新控制输入值才可进入控制输入缓冲器1322,例如,并且这可使处理元件1300停止,直到那种情况发生(并且(多个)目标、输出缓冲器中的空间可用)。
数据输入缓冲器1324和数据输入缓冲器1326能以类似方式执行,例如,本地网络1304(例如,被建立为数据(与控制相对照)互连)被描绘为被切换(例如,连接)到数据输入缓冲器1324。在该实施例中,数据路径(例如,如图7A中的网络)可承载数据输入值(例如,一个或多个位)(例如,数据流令牌),并且流控制路径(例如,网络)可承载来自数据输入缓冲器1324的回压信号(例如,回压或无回压令牌),以便例如向上游产生方(例如,PE)指示直到回压信号指示在数据输入缓冲器1324中具有用于(例如,来自上游产生方的数据输出缓冲器的)新数据输入值的空间,该新数据输入值才将被加载到(例如,发送到)数据输入缓冲器1324。在一个实施例中,直到同时满足(i)上游产生方从“数据输入”缓冲器1324接收到“空间可用”回压信号;以及(ii)新数据输入值从上游产生方被发送,该新数据输入值才可进入数据输入缓冲器1324,例如,并且这可使处理元件1300停止,直到那种情况发生(并且(多个)目标、输出缓冲器中的空间可用)。控制输出值和/或数据输出值可在它们相应的输出缓冲器(例如,1332、1334、1336)中被停止,直到回压信号指示在用于(多个)下游处理元件的输入缓冲器中具有可用空间。
处理元件1300可被停止执行,直到其操作数(例如,控制输入值以及该控制输入值的一个或多个对应的数据输入值)被接收和/或直到处理元件1300的(多个)输出缓冲器中具有用于将通过执行对那些操作数的操作而产生的数据的空间。
处理元件可以包括以下各项中的一个或多个(例如,任何组合):来自控制输入缓冲器1322的监视路径1322A(例如,用于当控制输入缓冲器1322不为空时提供第一值(例如,一)和/或当控制输入缓冲器1322为空时提供第二值(例如,零)),来自数据输入缓冲器1324的监视路径1324A(例如,用于当数据输入缓冲器1324不为空时提供第一值(例如,一)和/或当数据输入缓冲器1324为空时提供第二值(例如,零)),来自数据输入缓冲器1326的监视路径1326A(例如,用于当数据输入缓冲器1326不为空时提供第一值(例如,一)和/或当数据输入缓冲器1326为空时提供第二值(例如,零)),来自控制输出缓冲器1332的监视路径1332A(例如,用于当控制输出缓冲器1332不为空时提供第一值(例如,一)和/或当控制输出缓冲器1332为空时提供第二值(例如,零)),来自数据输出缓冲器1334的监视路径1334A(例如,用于当数据输出缓冲器1334不为空时提供第一值(例如,一)和/或当数据输出缓冲器1334为空时提供第二值(例如,零)),来自数据输出缓冲器1336的监视路径1336A(例如,用于当数据输出缓冲器1336不为空时提供第一值(例如,一)和/或当数据输出缓冲器1336为空时提供第二值(例如,零)),来自状态寄存器1338的监视路径1338A(例如,其中状态寄存器被加载有用于指示处理元件1300(例如,ALU 1318)执行的值,并且监视路径1338A用于当处理元件1300执行(或在先前紧接的周期中执行)时提供第一值(例如,一)并且当处理元件1300未执行(或在先前紧接的周期中未执行)时提供第二值(例如,零),来自多路复用器1316的监视路径1316A(例如,其中处理元件1300用于执行多个不同操作(例如,如在操作配置寄存器1319的要素中所指示),并且监视路径1316A用于当被执行(或在先前紧接的周期中被执行)的操作是第一操作时提供第一值(例如,一)和/或当被执行(或在先前紧接的周期中被执行)的操作是第二不同操作时提供第二值(例如,零)),或者来自调度器1314的监视路径1314A(例如,调度器1314可以调度处理元件1300的一个或多个操作(例如,当输入数据和控制输入到达时),并且监视路径1314A用于:(i)当操作被处理元件1300完成时提供第一值(例如,一)和/或当(例如,进行中的)操作还未被处理元件1300完成时提供第二值(例如,零),(ii)当在(例如,输入)缓冲器上不存在回压并且数据已经到达缓冲器中时提供第一值(例如,一)和/或当在(例如,输入)缓冲器上存在回压或者数据还未到达缓冲器中时提供第二值(例如,零),或(iii)当数据被PE 1300存储在(例如,输出)缓冲器中并且在(例如,输出)缓冲器上不存在回压(例如,来自耦合的PE的回压)时提供第一值(例如,一))和/或当数据未被PE 1300存储在(例如,输出)缓冲器中或者在(例如,输出)缓冲器上存在回压(例如,来自耦合的PE的回压)时提供第二值(例如,零))。
在某些实施例中,处理元件包括停止路径,用于当停止值被接收时停止PE的操作(例如,执行)。在所描绘的实施例中,停止值经由停止值输入路径1314B被发送到处理元件1300(例如,发送到调度器1314)以停止PE的操作(例如,执行)。停止值可以在停止路径上例如从性能监视电路被发送。
在一个实施例中,第一值与第二值不同。在一个实施例中,缓冲器具有多个存储槽,并且空指示存储槽都不包括(例如,活跃)值。
在某个实施例中,包括至少一个监视路径的一个或多个处理元件使它们的(多个)监视路径耦合至(例如,单个)性能监视电路(例如,图14中的性能监视电路1400)。附加地或替代地,可以包括停止路径的一个或多个处理元件可以使它们的(多个)停止路径耦合至(例如,单个)性能监视电路(例如,图14中的性能监视电路1400)。图13中的监视路径可以是它们自己的(例如,监视)网络,例如,与任何数据网络和/或配置网络(例如,(输入)网络1302、1304、1306和(输出)网络1308、1310、1312)分开。
图14图示根据本公开的实施例的性能监视电路1400。在某些实施例中,性能监视电路1400用于接收来自一个或多个处理元件的一个或多个监视值,例如,参考图13讨论的监视值中的一个或多个。性能监视值可以到达例如与任何数据网络和/或配置网络分开的一个或多个监视路径。在所描绘的实施例中,配置值1404被发送并且被存储在性能监视电路1400中的存储中。在一个实施例中,按照PE在配置时被配置(例如,如本文中所讨论)的相同方式,配置值1404在数据网络和/或配置网络(例如,图13中的(输入)网络1302、1304、1306中的一个或多个)上被发送到(例如,每个)性能监视电路1400。在一个实施例中,配置值包括性能监视选择值(例如,要被存储在性能监视数据选择存储1408中)、掩码值(例如,要被存储在掩码存储1410中)、和阈值(例如,要被存储在阈值存储1412中)中的一个或多个(例如,任何组合)。
在某些实施例中,用于单个PE的(例如,所有)性能监视值在单个路径上被发送(例如,1406A可以是用于发送来自第一PE的性能监视值的监视路径,1406B可以是用于发送来自第二PE的性能监视值的监视路径,1406C可以是用于发送来自第三PE的性能监视值的监视路径,并且1406D可以是用于发送来自第四PE的性能监视值的监视路径)。尽管在图14中描绘四个(例如,经聚合的)监视路径,但是可以利用单个或任意多个监视路径(例如,其中来自每个PE的单个经聚合的监视路径由性能监视电路监视,例如,如图15中)。在一个实施例中,性能监视值是紧缩数据,其中该紧缩数据的多个元素中的每个元素包括用于PE的组件的相应值,例如,如参考图13所讨论的。
在一个实施例中,性能监视数据选择存储1408存储性能监视选择值。性能监视选择值可以是用于选择从切换装置(例如,多路复用器)1414输出性能监视值1402中的哪一些的控制值。在一个实施例中,性能监视选择值用于选择哪些PE(例如,其适当子集)将使它们的监视值从切换装置1414输出至匹配电路1416,例如,以选择耦合的监视路径1406A、1406B、1406C和1406D中的哪一些将被耦合至切换装置1414的输出(例如,以输出(例如,单个)值(例如,具有位宽N位))。在一个实施例中,匹配电路1416使用来自掩码存储1410的掩码以提供监视值(例如,其适当子集)的输出。例如,如果性能监视值是紧缩数据,其中该紧缩数据的多个元素中的每个元素包括用于PE的组件的相应值,例如,如参考图13所讨论,则掩码可以掩码掉(例如,用零覆写)用于在当前监视中将不被监视的组件的监视值。作为参考图13和图14的一个示例,图14的(例如,经聚合的)监视路径1406A可以耦合至图13的PE1300并且包括(例如,多个)监视路径(描绘为虚线),并且掩码可以用于掩码掉将不被监视的值。例如,(例如,经聚合的)监视路径1406A可以包括来自以下各项中的每一个的监视值:来自控制输入缓冲器1322的监视路径1322A、来自数据输入缓冲器1324的监视路径1324A、来自数据输入缓冲器1326的监视路径1326A。在该示例中,掩码可以具有三个位,其中每个位被设置为用于掩码三个监视值(例如,元素)中的相应值(例如,元素)的第一值(例如,零)或用于不对该相应值掩码的第二值(例如,一)。该示例的一个用途可以是掩码掉用于控制输入缓冲器1322的监视值并且仅监视数据输入缓冲器1324和数据输入缓冲器1326。被掩码的监视值然后可以被输出至累加器1418,以对(例如,自累加器上一次被清除以来)所监视的值(例如,在一个周期中)已经发生了多少次计数。该累加值然后可以通过阈值比较电路1420来与阈值存储1412中的阈值比较。在一个实施例中,如果阈值被累加值超过(或者等于累加值),则阈值比较电路1420用于输出经聚合的监视值1422(例如,阈值警告)(例如,并且然后清除累加器1418中的值),并且如果阈值未被累加值超过(或者等于累加值),则阈值比较电路1420不用于输出经聚合的监视值1422。任选地,性能监视电路1400(例如,阈值比较电路1420)可以输出停止值1424以停止其性能监视值正由性能监视电路1400监视和/或其监视路径耦合至性能监视电路1400的PE。例如,当经聚合的监视值1422正被发送和/或累加器1418正被清除时,停止值1424(例如,被设置为一)可以被发送到PE以停止该PE。例如,停止值1424可以(例如,在停止路径上)被发送到处理元件1300的停止值输入路径1314B(例如,发送到调度器1314)以停止PE的操作(例如,执行)。在一个实施例中,经聚合的监视值例如经由RAF电路被发送到性能管理器电路。在一个实施例中,性能管理器电路用于经由转储清除路径1418A将转储清除值发送到性能监视电路以清除累加器1418中的累加值。
在某个实施例中,性能监视电路用于收集(例如,数量M个)PE的(例如,原始)性能监视值,并且(例如,多达N个)值可以在任何给定时间被进一步处理。那N个被过滤的监视值可以任选地经历匹配电路的层以生成感兴趣的交叉乘积。例如,仅当(i)输入A为有效的(例如,图13中的数据输入缓冲器1324具有数据)并且输入B为有效的(例如,图13中的数据输入缓冲器1326具有数据)时计数,或(ii)当输入A(例如,图13中的数据输入缓冲器1324具有数据)或输入C为有效的(例如,图13中的控制输入缓冲器1322具有数据)时计数。累加器1418可以对(例如,在给定时间段中)发生的所监视事件的数量计数,并且阈值比较电路1420将该数量与预编程阈值(例如,其中在空间结构的配置阶段期间该阈值被初始化)进行比较,并且当阈值被超过或匹配时,阈值警告(例如,经聚合的监视值ABC22)被生成。在某些实施例中,阈值警告通过异常网络(例如,如图15、图50和图53所讨论)被发送至例如性能管理器电路。在一个实施例中,消息通过其从性能监视电路(例如,经由RAF电路)发送至性能管理器电路的网络(例如,异常网络)的网络可能由于争用而不可用。性能监视电路可以任选地(例如,经由停止值1424)用信号通知相关联的被监视的PE以阻止它们执行。在某些实施例中,这确保在要求绝对保真度的情况下,可以获得绝对保真度。在一个实施例中,性能监视电路用于对特定PE的执行的次数计数。在这种情况下,累加器1418可以周期性地达到阈值(例如,溢出),并且将经聚合的监视值(例如,更新分组)发送到(例如,集中式)性能管理器电路(例如,以基于该经聚合的监视值采取动作和/或将该经聚合的监视值与先前接收的经聚合的监视值累加)。在一个实施例中,性能监视电路利用(例如,低于)30个位的状态以及加法器电路来实现。
图15图示根据本公开的实施例的加速器1500中的耦合至性能管理器电路1526的性能监视电路1504。加速器1500包括由(例如,电路切换型)网络耦合在一起的处理元件的阵列。所描绘的处理元件的阵列包括处理元件1506、处理元件1508、处理元件1510、处理元件1512、处理元件1514、处理元件1516、处理元件1518、和处理元件1520。每个处理元件可以如本文中所讨论,例如,每个处理元件可以是图13中的PE 1300的实例。
在所描绘的实施例中,将由性能监视电路监视的每个处理元件包括监视路径,例如,该监视路径在与将处理元件耦合在一起的(例如,电路切换型)网络分开的和/或与将性能监视电路耦合至性能管理器电路的网络(例如,网络1524)分开的网络中。监视路径在图15中被描绘为虚线。如所描绘,监视路径1506A用于将性能监视值从PE 1506发送至性能监视电路1504,监视路径1508A用于将性能监视值从PE 1508发送至性能监视电路1504,监视路径1510A用于将性能监视值从PE 1510发送至性能监视电路1504,监视路径1512A用于将性能监视值从PE 1512发送至性能监视电路1504,监视路径1514A用于将性能监视值从PE1514发送至性能监视电路1504,监视路径1516A用于将性能监视值从PE 1516发送至性能监视电路1504,监视路径1518A用于将性能监视值从PE 1518发送至性能监视电路1504,并且监视路径1520A用于将性能监视值从PE 1520发送至性能监视电路1504。附加地或替代地,虚线可以图示停止路径(例如,用于将停止值从性能监视电路发送至PE中的一个或多个)。
加速器1500可包括存储器/高速缓存层次结构接口1528,以便例如将加速器1500与存储器和/或高速缓存对接。在一个实施例中,存储器/高速缓存层次结构接口1528耦合至图12中的ACI 1212。在一个实施例中,存储器/高速缓存层次结构接口1528是RAF电路,例如,是图12中的RAF电路1208(例如,如本文中所讨论)。
在一个实施例中,性能监视电路1504用于接收来自被监视的PE(例如,处理元件1506、处理元件1508、处理元件1510、处理元件1512、处理元件1514、处理元件1516、处理元件1518、和处理元件1520)的监视值作为输入。其他PE可以由一个或多个其他性能监视电路监视。在一个实施例中,性能监视电路1504基于从PE接收的监视值生成并且输出经聚合的监视值(例如,如参考图14所讨论)。在所描绘的实施例中,性能监视电路可以耦合至(例如,异常)网络1524。在一个实施例中,(例如,异常)网络1524与用于PE之间的数据流的(例如,电路切换型)网络分开。网络1524被示出为虚线框。
在一个实施例中,网络1524(例如,异常网络)包括网络控制器1522,用于将数据从性能监视电路和/或夹层异常聚合器(例如,图53中的夹层异常聚合器5304)路由到期望的目的地。在一个实施例中,网络控制器1522用于将经聚合的监视值从(多个)性能监视电路发送至性能管理器电路1526和/或将异常数据发送至片级异常聚合器(例如,图53中的片级异常聚合器5302)。网络控制器1522可以利用经聚合的监视值自身的唯一ID(例如,标签)来预先考虑该经聚合的监视值,例如,从而确保聚合监视消息是明确的。
在一个实施例中,使用性能监视电路是对加速器(例如,CSA)的计算机功能的改善,因为其允许被映射到空间结构上的应用(例如,数据流图)不考虑性能监视,而是替代地利用专用资源。在一个实施例中,使用性能监视电路是对加速器(例如,CSA)的计算机功能的改善,因为其将用于将原始性能数据值从被监视的(例如,操作的)PE传输至性能监视电路的能量以及相关联的布线和定时开销最小化。在一个实施例中,网络控制器1522通过(例如,异常)(例如,共享)网络耦合至性能监视电路,并且网络控制器1522通过另一(例如,共享)网络(例如,ACI网络)耦合至性能管理器电路。
附加地或替代地,性能管理器电路1526可以例如经由网络1524(例如,异常网络)和/或网络控制器1522将停止信号发送到性能监视电路1504。在一个实施例中,当性能监视电路将经聚合的监视值发送至性能管理器电路1526和/或网络控制器1522时,性能监视电路1504用于在停止路径(例如,图15中的虚线)上将停止值发送至(例如,八个)耦合的处理元件中的每一个,以停止那些处理元件中的每一个。在一个实施例中,当转储清除发生时(例如,在上下文切换或来自外部软件的对性能计数器的访问期间),性能管理器电路1526用于将转储清除值发送到性能监视电路1504以使性能监视电路1504在停止路径(例如,虚线)上将停止值发送至(例如,八个)耦合的处理元件中的每一个以停止那些处理元件中的每一个,例如,以停止PE。
图16图示根据本公开的实施例的具有将经聚合的监视值传播给性能管理器电路1606的处理元件的空间阵列1602的性能监视电路1604A的系统1600。在某些实施例中,空间阵列是任何空间阵列,例如,本文中所讨论的任何CSA。在某些实施例中,处理元件(PE)是任何PE,例如,本文中所讨论的任何PE。根据本公开的实施例,系统1600(例如,电路)包括耦合在处理元件的空间阵列1602(例如,形成于一个或多个加速器片)与多个高速缓存区块(例如,高速缓存区块(1)1610)之间的多个请求地址文件(RAF)电路(例如,RAF电路(1)1608)。在一个实施例中,RAF和高速缓存区块的数量可以按1:1或1:2的比率。高速缓存区块可包含完整的高速缓存行(例如,与按字切分形成对照),其中每一行具有在该高速缓存中的确切的一个原位。高速缓存行可经由伪随机函数被映射至高速缓存区块。CSA可采用共享虚拟存储器(SVM)模型以与其他分片架构集成。某些实施例包括将RAF连接到高速缓存区块的加速器高速缓存互连1612(例如,加速器高速缓存互连(ACI)网络)。加速器高速缓存互连1612可在RAF与高速缓存之间承载地址和数据。加速器高速缓存互连1612的拓扑可以是级联的交叉开关,例如,作为等待时间与实现复杂度之间的折中。所描绘的加速器高速缓存互连1612还耦合至高速缓存归属地代理(CHA)和/或下一级高速缓存1616。在一个实施例中,高速缓存归属地代理充当局部一致性和高速缓存控制器(例如,高速缓存代理)和/或也充当全局一致性和存储器控制器接口(例如,归属地代理)。请求地址文件电路可以如本文中所讨论,例如,在第2.2节中。
所描绘的系统1600包括贯穿处理元件的空间阵列1602设置的多个性能监视电路1604。在一个实施例中,单个(例如,每个)性能监视电路用于接收来自多个处理元件(PE)的监视值。例如,性能监视电路1604可以接收来自相邻PE(例如,八个到三十四个,或那些相邻PE的适当子集)中的每一个的一个或多个监视值。在一个实施例中,(例如,每个)性能监视电路接收来自2个、3个、4个、5个、6个、7个、8个、9个、10个、20个、30个、40个、50个等PE中的每一个的一个或多个监视值。在一个实施例中,(例如,每个)性能监视电路用于接收来自邻接性能监视电路(例如,如图16所示)的PE中的一个或多个(例如,全部)PE的一个或多个监视值。PE可以是图13中的PE。性能监视电路可以是图14中的性能监视电路。性能监视电路可以将性能监视消息(例如,包括性能监视值)聚合为经聚合的性能监视消息(例如,经聚合的监视值)。性能监视电路可以例如直接地或经由RAF和ACI 1612将经聚合的性能监视消息(例如,经聚合的监视值)发送到性能管理器电路。
(例如,每个)RAF可以任选地包括异常管理器电路,例如,所描绘的RAF电路1608包括异常管理器电路1614。异常管理器电路可以对从性能监视电路接收的异常消息贴标签(例如,通过添加一个或多个引导位)并(例如,经由ACI 1612)将它们向前转发给(例如,中央)性能管理器电路1606。在一个实施例中,这允许异常管理器电路直接转发给例如性能管理器电路。任选地,异常管理器电路将性能监视消息(例如,包括性能监视值)聚合为经聚合的性能监视消息(例如,经聚合的监视值),以减少到计数器管理器的通信量,例如,其中(例如,每个)异常管理器电路被提供用于该能力的电路(例如,计数器)。
性能管理器电路1606可以接收来自一个或多个性能监视电路1604(例如,其适当子集)的(例如,经聚合的)性能监视消息(例如,包括一个或多个监视值)。性能管理器电路1606可以基于(例如,经聚合的)性能监视消息(例如,包括一个或多个监视值)(的例如接收)执行各种动作。性能管理器电路1606可以聚合计数器中的消息。性能管理器电路1606可以被设置(例如,编程)为触发异常(例如,将消息发送到CSA设备驱动器),该异常指示事件已经发生或者阈值已经被穿过或满足。在某些实施例中,性能监视电路被设置(例如,编程)为当单个事件被观察到时发布消息。在一个实施例中,性能管理器电路用于基于(例如,经聚合的)性能监视消息(例如,包括一个或多个监视值)采取纠正动作。纠正动作可以是将电压和/或频率增加到比其他PE更慢地执行的PE,其他PE例如是执行相同数据流图的一部分的PE。
作为一个示例,在时间t1处(由带圆圈的1指示),诸如PE1602A的溢出之类的事件由性能监视电路1604A检测到,在时间t2处(由带圆圈的2指示),该事件通过(例如,异常)网络被传播到RAF电路1608,并且在时间t3处(由带圆圈的3指示),事件消息(例如,监视值)被发送至性能管理器电路1606,该性能管理器电路1606可以维护计数器的较大的、经聚合的视图(例如,具有软件可见性)。
作为另一示例,在时间t1处(由带圆圈的1指示)处理元件1602A经历事件(例如,溢出),并且性能监视电路1604A检测到该事件(例如,并且将用于该事件的监视值与在先监视值聚合)。在某些实施例中,在时间t2处(由带圆圈的2指示),性能监视电路1604A然后将监视值(例如,经聚合的监视值)发送到(例如,最近的)RAF电路(例如,图16中的RAF电路1608)。在某些实施例中,在时间t3处(由带圆圈的3指示),性能管理器电路1606然后可以基于监视值(例如,经聚合的监视值)采取(例如,纠正和/或监视)动作。在一个实施例中,与RAF电路通信的特定PE是电路设计的一部分,并且在制造后不可改变,例如,每个RAF电路将与PE的已知集合(例如,与每个RAF电路直接相邻的一个或多个列)通信。
在一个实施例中,单个空间结构(例如,处理元件的空间阵列1602)中的多个RAF电路是对加速器(例如,CSA)的计算机功能的改善,因为其允许来自多个性能监视电路的分布的和并发的(例如,并行的)性能数据处理。对于(例如,非常)复杂的全局性能监视事件和/或交叉乘积,所有RAF电路(例如,其异常管理器电路)可以进一步将其接收的性能数据/事件传播给其中可以发生附加处理的(例如,片级)性能管理器电路。在这一点上应用软件和/或操作系统(OS)也可以被利用以在必要时提供实时调整和/或反馈或者允许进行更复杂的离线分析。性能管理器电路可以被实现为例如包含累加寄存器的硬件资源。性能管理器可以被实现为微控制器上的固件功能。在一个实施例中,固件参与改善了要被跟踪的计数器集合的可缩放性。在某些实施例中,性能管理器将接收更新消息(例如,监视值或经聚合的监视值),并且根据需要将它们附到经聚合的计数器或者用信号通知更高级事件。在一个实施例中,性能管理器利用只读共享虚拟存储器(SVM)存储来表示性能计数器,例如,从而消除设备请求-响应模型的开销和/或某些微小分辨率损失的成本。在某些实施例中(例如,在某些系统级事件期间),监视值将被转储清除以获得准确的遥测,例如,在上下文切换或从外部软件对性能监视值的访问期间。在这种情况下,性能管理器可以被提供消息以转储清除各种性能监视电路。
图17图示根据本公开的实施例的流程图1700。所描绘的流程1700包括:将包括多个节点的数据流图的输入叠加到包括第一网络的处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作器1702;当相应的传入操作数集到达数据流操作器中的每个数据流操作器时,利用处理元件的空间阵列执行操作1704;在第二网络上将至少一个监视值从处理元件中的第一多个处理元件中的每个处理元件发送到第一性能监视电路1706;由第一性能监视电路基于来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值生成第一经聚合的监视值1708;当第一阈值被第一经聚合的监视值超过时,在第三网络上将第一经聚合的监视值发送到性能管理器电路1710;以及由性能管理器电路基于第一经聚合的监视值执行动作1712。
2.6用于执行(例如,数据流)操作的网络资源(例如,电路)
在某些实施例中,处理元件(PE)使用通过静态地配置(例如,电路交换型)通信网络而形成的专用虚拟电路来进行通信。这些虚拟电路可以是流受控且完全被回压的,使得例如如果源没有数据或PE的目的地为满,则该PE将停止。在运行时,数据可流过实现经映射数据流图(例如,经映射算法)的PE。例如,可通过处理元件的空间阵列(的例如结构区域)使数据从存储器流入,随后使数据向外返回至存储器。
此类架构相对于传统多核处理器可实现卓越的性能效率:例如与存储器系统的扩展形成对照,例如以PE形式计算可以比核更简单且更多,并且通信可以是直接的。然而,处理元件的空间阵列(的例如结构区域)可针对编译器生成的表达树的实现方式进行调整,编译器生成的表达树的实现方式特征可以是很少的复用操作或解复用操作。本文中的某些实施例(例如,经由网络资源,该网络资源诸如但不限于网络数据流端点电路)将架构扩展为例如尤其在函数调用的上下文中支持(例如,高基)复用操作和/或解复用操作。
诸如图1中的处理元件的空间阵列101之类的空间阵列可将(例如,分组交换型)网络用于通信。本文中的某些实施例提供用于将高基数据流操作叠加在这些网络上以进行通信的电路。例如,本文中的某些实施例利用用于通信的现有网络(例如,参考图1描述的互连网络104)以提供空间阵列的处理元件与其他组件之间的数据路由能力,并且还(例如,在不利用处理元件来执行那些数据流操作的情况下)将网络(例如,网络端点)扩充为支持数据流操作中的一些(例如,少于全部)数据流操作的执行和/或控制。在一个实施例中,利用空间阵列内的特殊硬件结构(例如,网络数据流端点电路),例如,在不消耗处理资源或不使(例如,处理元件的)性能降级的情况下支持(例如,高基)数据流操作。
在一个实施例中,两个点之间(例如,数据的产生方和消耗方)的电路交换型网络包括那两个点之间的专用通信线,例如,其中这两个点之间的(例如,物理)切换转置设置成创建这两个点之间的(例如,排他的)物理电路。在一个实施例中,两个点之间的电路交换型网络在开始使用这两个点之间的连接时被建立,并且贯穿该连接的使用被维护。在另一实施例中,分组交换型网络包括两个(例如,或更多个)点之间的共享通信线(例如,通道),例如,其中来自不同连接的分组共享那个通信线(例如,根据每个分组的数据被路由,例如,在包括头部和有效载荷的分组的头部中)。下文例如参考夹层网络讨论分组交换型网络的示例。
图18图示根据本公开的实施例的伪代码函数调用1801的数据流图1800。函数调用1801用于加载(例如,分别由指针*a和*b指示的)两个输入数据操作数,并且将它们乘在一起,并返回结果数据。该函数或其他函数可(例如,在数据流图中)被执行多次。图18中的数据流图图示用于执行以下操作的PickAny数据流操作器1802:(例如,从调用地点1802A)选择控制数据(例如,索引),并且利用复制数据流操作器1804将该控制数据(例如,索引)复制到第一Pick数据流操作器1806、第二Pick数据流操作器1808和Switch数据流操作器1816中的每个数据流操作器。在一个实施例中,(例如,来自PickAny的)索引因此将数据输入和输出到例如[0,1...M]的相同索引位置,其中,M是整数。第一Pick数据流操作器1806随后可根据控制数据拉取多个输入数据元素1806A中的一个输入数据元素,并且将这个输入数据元素用作(*a),以便随后利用加载数据流操作器1810加载存储在*a处的输入数据值。第二Pick数据流操作器1808随后可根据控制数据拉取多个输入数据元素1808A中的一个输入数据元素,并且将这个输入数据元素用作(*b),以便随后利用加载数据流操作器1812加载存储在*b处的输入数据值。随后可由(例如,作为处理元件的部分的)乘法数据流操作器1814将那两个输入数据值相乘。随后可由Switch数据流操作器1816例如根据去往Switch数据流操作器1816的控制数据(例如,索引)将该乘法的结果数据路由(到例如下游处理元件或其他组件)到例如调用地点1816A。
图18是函数调用的示例,其中,用于管理数据(例如,令牌)的引导的数据流操作器的数量可以是非常大的以例如引导数据去往调用地点和/或从调用地点引导数据。在一个实施例中,例如当存在多个(例如,许多)调用地点时,可利用PickAny数据流操作器1802、第一Pick数据流操作器1806、第二Pick数据流操作器1806和Switch数据流操作器1816中的一个或多个来路由(例如,引导)数据。在其中引入被复用和/或解复用的函数调用的(例如,主要)目的是减小特定数据流图的实现面积的实施例中,(例如,微架构的)本文中的某些实施例减小数据流图的此类被复用和/或解复用的(例如,多个部分)的面积开销。
图19图示根据本公开的实施例的具有多个网络数据流端点电路1902、1904、1906的处理元件的空间阵列1901。处理元件的空间阵列1901可包括在例如如本文中所讨论的组件之间的通信(例如,互连)网络。在一个实施例中,通信网络是一个或多个分组交换型通信网络(例如,一个或多个分组交换型通信网络的通道)。在一个实施例中,通信网络是一个或多个电路交换型、静态配置的通信通道。例如,通道的集合通过切换装置(例如,第一网络中的切换装置1910和第二网络中的切换装置1911)被耦合在一起。第一网络和第二网络可以是分开的或可以耦合在一起。例如,切换装置1910可将其中的多个(例如,四个)数据路径中的一个或多个数据路径耦合在一起,例如,经配置以执行根据数据流图的操作。在一个实施例中,数据路径的数量是任意多个。处理元件(例如,处理元件1908)可如本文中所公开,例如,如图9中那样。加速器片1900包括存储器/高速缓存层次结构接口1912,以便例如将加速器片1900与存储器和/或高速缓存对接。数据路径可延伸至另一片或可终止于例如片的边缘处。处理元件可包括输入缓冲器(例如,缓冲器1909)和输出缓冲器。
操作可基于这些操作的输入的可用性以及PE的状态来执行。PE可从输入通道获取操作数,并且可将结果写至输出通道,但是也可使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好型PE。图9示出一个此类PE的详细框图:整数PE。该PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器组成。对于每一个周期,调度器可基于输入缓冲器和输出缓冲器的可用性以及PE的状态来选择供执行的指令。随后,可将操作的结果写至输出寄存器,或写至(例如,PE本地的)寄存器。被写至输出缓冲器的数据可被传输到下游PE用于进一步处理。这种PE样式可以是极其高能效的,例如,与从复杂的多端口寄存器堆读取数据不同,PE从寄存器读取该数据。类似地,指令可被直接存储在寄存器中,而不是被存储在虚拟化的指令高速缓存中。
指令寄存器可在特殊的配置步骤期间被设置。在该步骤期间,除PE间网络之外,辅助的控制线和状态也可用于跨包含结构的若干PE使配置流入。作为并行性的结果,此类网络的某些实施例可提供快速的重配置,例如,片尺寸的结构可在小于约10微秒内被配置。
此外,所描绘的加速器片1900包括例如作为例如下文所描述的夹层网络的部分的分组交换型通信网络1914。本文中的某些实施例允许(例如,分布式)数据流操作(例如,仅路由数据的操作)在通信网络上(例如,在通信网络内)(例如,并且不在(多个)处理元件中)被执行。作为示例,在图19中描绘数据流图的分布式Pick数据流操作。具体而言,使用对三个单独的网络(例如,全局)端点(例如,网络数据流端点电路1902、1904、1906)的三个单独配置来实现分布式pick。可分布数据流操作,例如,其中若干端点以协调方式被配置。例如,编译工具可理解协调的需求。端点(例如,网络数据流端点电路)可在若干分布式操作之间被共享,例如,数据流操作(例如,pick)端点可与同数据流操作(例如,pick)有关的若干send(发送)进行核对。分布式数据流操作(例如,pick)可生成与非分布式数据流操作(例如,pick)相同的结果。在某些实施例中,分布式数据流操作与非分布式数据流操作之间的差异在于,分布式数据流操作例如利用相关联的流控制和分布式协调通过分组交换型通信网络具有其数据(例如,要路由的、但可能不包括控制数据的数据)。虽然示出不同尺寸的处理元件(PE),但是在一个实施例中,每个处理元件具有相同尺寸(例如,硅面积)。在一个实施例中,用于对数据进行缓冲的缓冲器元件也可被包括,例如,与处理元件分开。
作为一个示例,pick数据流操作可具有多个输入,并且引导(例如,路由)这些输入中的一个输入作为输出,例如,如图18中那样。与利用处理元件来执行pick数据流操作不同,可利用网络通信资源(例如,网络数据流端点电路)中的一个或多个来实现此。附加地或替代地,网络数据流端点电路可在处理元件之间路由数据,以便例如使处理元件执行对数据的处理操作。本文中的实施例因此可利用通信网络来执行(例如,引导)数据流操作。附加地或替代地,网络数据流端点电路可作为下文讨论的夹层网络来执行。
在所描绘的实施例中,分组交换型通信网络1914可处置某些(例如,配置)通信,以例如对处理元件和/或电路交换型网络(例如,可包括切换装置的网络1913)编程。在一个实施例中,电路交换型网络被配置(例如,编程)为用于执行一个或多个操作(例如,数据流图的数据流操作)。
分组交换型通信网络1914包括多个端点(例如,网络数据流端点电路1902、1904、1906)。在一个实施例中,每个端点包括用于允许数据例如根据数据分组(的例如头部)被路由到那个端点和/或从那个端点被路由的地址或其他指示符值。
附加于或替代于执行上文中的一项或多项,分组交换型通信网络1914可执行数据流操作。网络数据流端点电路1902、1904、1906可被配置(例如,编程)为用于执行数据流图的(例如,分布式pick)操作。组件(例如,电路)的编程在本文中描述。参考图20讨论配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。
作为分布式pick数据流操作的示例,图19中的网络数据流端点电路1902、1904、1906可配置(例如,编程)为执行数据流图的分布式pick操作。参考图20讨论配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。附加于或替代于配置远程端点电路,还可根据本公开配置本地端点电路。
网络数据流端点电路1902可配置成用于从多个源(例如,网络数据流端点电路1904和网络数据流端点电路1906)接收数据,并用于例如根据控制数据来(例如,如图18中那样)输出结果数据。网络数据流端点电路1904可配置成例如在从处理元件1922接收到输入数据后将该输入数据提供(例如,发送)到网络数据流端点电路1902。这在图19中可称为输入0。在一个实施例中,电路交换型网络被配置(例如,编程)为用于沿路径1924在处理元件1922与网络数据流端点电路1904之间提供专用通信线。网络数据流端点电路1906可配置成例如在从处理元件1920接收到输入数据后将该输入数据提供(例如,发送)到网络数据流端点电路1902。这在图19中可称为输入1。在一个实施例中,电路交换型网络被配置(例如,编程)为用于沿路径1916在处理元件1920与网络数据流端点电路1906之间提供专用通信线。
当网络数据流端点电路1904用于将输入数据传送到网络数据流端点电路1902(例如,当网络数据流端点电路1902具有用于数据的可用的存储空间和/或网络数据流端点电路1904具有其输入数据时),网络数据流端点电路1904可生成(例如,包括该输入数据和头部的)分组,以在分组交换型通信网络1914上(例如,作为在那个(例如,环形)网络1914上的站点)将那个数据引导到网络数据流端点电路1902。这在图19中以虚线1926示意性地图示。虽然图19中示出的示例利用两个源(例如,两个输入),但是可利用单个或任何多个(例如,多于两个)源(例如,输入)。
当网络数据流端点电路1906用于将输入数据传送到网络数据流端点电路1902(例如,当网络数据流端点电路1902具有用于数据的可用的存储空间和/或网络数据流端点电路1906具有其输入数据时),网络数据流端点电路1904可生成(例如,包括该输入数据和头部的)分组,以在分组交换型通信网络1914上(例如,作为在那个(例如,环形)网络1914上的站点)将那个数据引导到网络数据流端点电路1902。这在图19中以虚线1918示意性地图示。虽然示出网格网络,但是可使用其他网络拓扑。
网络数据流端点电路1902(例如,在从网络数据流端点电路1904接收到输入0后,在从网络数据流端点电路1906接收到输入1后,和/或在接收到控制数据后)随后可执行所编程的数据流操作(例如,该示例中的Pick操作)。在图19中,网络数据流端点电路1902随后可将来自操作的对应的结果数据输出到例如处理元件1908。在一个实施例中,电路交换型网络被配置(例如,编程)为用于沿路径1928在处理元件1908(例如,其缓冲器)与网络数据流端点电路1902之间提供专用通信线。下文参考图32-图34讨论分布式Pick操作的进一步的示例。
在一个实施例中,用于执行操作(例如,pick操作)的控制数据来自空间阵列的其他组件(例如,处理元件)或通过网络。下文参考图20讨论其示例。注意,在端点1902中示意性地示出Pick操作器,并且该Pick操作器可以不是多路复用器电路,例如,参见下文对图20中的网络数据流端点电路2000的讨论。
在某些实施例中,数据流图可具有由处理元件执行的某些操作以及由通信网络(例如,一个或多个网络数据流端点电路)执行的某些操作。
图20图示根据本公开的实施例的网络数据流端点电路2000。虽然在网络数据流端点电路2000中图示多个组件,但是可在单个网络数据流端点电路中利用每个组件的一个或多个实例。网络数据流端点电路的实施例可包括图20中的组件中的任何(例如,非全部)组件。
图20描绘示出主数据路径(实线)和控制数据路径(虚线)的实施例的(例如,夹层)网络接口的微架构。该微架构提供用于启用(例如,高基)数据流操作器的配置存储和调度器。本文中的某些实施例包括至调度器的数据路径以启用支路选择和描述。图20示出网络(例如,夹层)端点(例如,站点)的高级别微架构,该网络(例如,夹层)端点(例如,站点)可以是用于上下文的环形网络的成员。为了支持(例如,高基)数据流操作,端点(例如,操作配置存储2026)的配置包括检查多个网络(例如,虚拟)通道(例如,与在基线实现方式中的单个虚拟通道形成对照)的配置。网络数据流端点电路2000的某些实施例包括来自入口以及去往出口的数据路径,以控制(例如,pick型操作和switch型操作的)选择,和/或在PickAny数据流操作器或SwitchAny数据流操作器的情况下描述由调度器作出的选择。可在每个通信通道,例如,在(例如,分组交换型通信)网络和(例如,电路交换型)网络(例如,处理元件的空间阵列的结构)中利用流控制和回压行为。
作为微架构的实施例的一种描述,pick数据流操作器可运作以例如基于控制数据从输入数据的多个输入挑选结果数据的一个输出。网络数据流端点电路2000可配置成用于考虑电路2000的(多个)空间阵列入口缓冲器2002中的一个空间阵列入口缓冲器(例如,来自结构的、作为控制数据的数据),以在存储在电路2000的(多个)网络入口缓冲器2024中的多个输入数据元素之中进行选择,从而将结果数据引导到电路2000的空间阵列出口缓冲器2008。因此,(多个)网络入口缓冲器2024可被认为是至虚拟mux(多路复用器)的输入,空间阵列入口缓冲器2002可被认为是多路复用器选择,并且空间阵列出口缓冲器2008可被认为是多路复用器输出。在一个实施例中,当(例如,控制数据)值被检测到和/或到达空间阵列入口缓冲器2002时,调度器2028(例如,如由存储2026中的操作配置编程)被敏化为检查对应的网络入口通道。当数据在那个通道中可用时,该数据从网络入口缓冲器2024被移除,并且被移动到空间阵列出口缓冲器2008。入口和出口两者的控制位随后可被更新以反映数据的传送。这可导致控制流令牌或信用在相关联的网络中传播。在某些实施例中,所有输入(例如,控制或数据)可在本地或通过网络产生。
最初,使用分组交换型网络来实现经复用和/或解复用代码的(例如,高基分级式)操作器可能似乎妨碍性能。例如,在一个实施例中,分组交换型网络一般地被共享,并且调用方数据流图和被调用方数据流图可能彼此远离。然而,回想一下,在某些实施例中,支持复用操作和/或解复用操作的意图在于减小由数据流操作器内的不频繁的代码路径(例如,由空间阵列)消耗的面积。因此,本文中的某些实施例例如在(基本上)不影响各个PE的面积和效率以支持那些(例如,不频繁的)操作的情况下减小了面积并避免了更昂贵的结构资源(例如,像PE)的消耗。
现在转到图20的进一步的细节,所描绘的网络数据流端点电路2000包括空间阵列(例如,结构)入口缓冲器2002,其例如用于从(例如,电路交换型)网络输入数据(例如,控制数据)。如上文所述,虽然描绘了单个空间阵列(例如,结构)入口缓冲器2002,但是多个空间阵列(例如,结构)入口缓冲器可处于网络数据流端点电路中。在一个实施例中,空间阵列(例如,结构)入口缓冲器2002用于从空间阵列(例如,处理元件的空间阵列)的通信网络,例如从网络2004和网络2006中的一个或多个接收数据(例如,控制数据)。在一个实施例中,网络2004是图19中的网络1913的部分。
所描绘的网络数据流端点电路2000包括空间阵列(例如,结构)出口缓冲器2008,其例如用于向(例如,电路交换型)网络输出数据(例如,控制数据)。如上文所述,虽然描绘了单个空间阵列(例如,结构)出口缓冲器2008,但是多个空间阵列(例如,结构)出口缓冲器可处于网络数据流端点电路中。在一个实施例中,空间阵列(例如,结构)出口缓冲器2008用于将数据(例如,控制数据)发送(例如,传送)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如,发送(例如,传送)到网络2010和网络2012中的一个或多个上。。在一个实施例中,网络2010是图19中的网络1913的部分。
附加地或替代地,网络数据流端点电路2000可耦合至另一网络(例如,分组交换型网络)。另一网络2014(例如,分组交换型网络)可用于将(例如,输入和/或结果)数据传送(例如,发送或接收)到空间阵列的处理元件或其他组件,和/或用于传送输入数据或结果数据中的一个或多个。在一个实施例中,网络2014是图19中的分组交换型通信网络1914(例如,时间复用型网络)的部分。
网络缓冲器2018(例如,(多个)寄存器)可以是(例如,环形)网络2014上的站点,以便例如从网络2014接收数据。
所描绘的网络数据流端点电路2000包括网络出口缓冲器2022,其例如用于向(例如,分组交换型)网络输出数据(例如,结果数据)。如上所述,虽然描绘了单个网络出口缓冲器2022,但是多个网络出口缓冲器可处于网络数据流端点电路中。在一个实施例中,网络出口缓冲器2022用于将数据(例如,结果数据)发送(例如,传送)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如,发送(例如,传送)到网络2014上。在一个实施例中,网络2014是图19中的分组交换型网络1914的部分。在某些实施例中,网络出口缓冲器2022用于将(例如,来自空间阵列入口缓冲器2002的)数据输出到(例如,分组交换型)网络2014,以便被路由(例如,引导)到其他组件(例如,(多个)其他网络数据流端点电路)。
所描绘的网络数据流端点电路2000包括网络入口缓冲器2022,其例如用于从(例如,分组交换型)网络输入数据(例如,被输入的数据)。如上所述,虽然描绘了单个网络入口缓冲器2024,但是多个网络入口缓冲器可处于网络数据流端点电路中。在一个实施例中,网络入口缓冲器2024用于从空间阵列(例如,处理元件的空间阵列)的通信网络(例如,从网络2014)接收(例如,传送)数据(例如,输入数据)。在一个实施例中,网络2014是图19中的分组交换型网络1914的部分。在某些实施例中,网络入口缓冲器2024用于从(例如,分组交换型)网络2014(例如,从空间阵列入口缓冲器2002)输入数据,以便在那里从其他组件(例如,(多个)其他网络数据流端点电路)被路由(例如,引导)(例如,到空间阵列出口缓冲器2008中)。
在一个实施例中,(例如,网络2014上的数据的)数据格式包括具有数据和(例如,具有那个数据的目的地)头部的分组。在一个实施例中,(例如,网络2004和/或2006上的数据的)数据格式仅包括数据(例如,不是具有数据和(例如,具有那个数据的目的地的)头部的分组)。网络数据流端点电路2000可将头部(或其他数据)添加到分组(例如,来自电路2000的数据输出)或从分组移除头部(或其他数据)(例如,进入电路2000的数据输入)。耦合装置2020(例如,线)可将从网络2014(例如,从网络缓冲器2018)接收的数据发送到网络入口缓冲器2024和/或多路复用器2016。多路复用器2016可(例如,经由来自调度器2028的控制信号)输出来自网络缓冲器2018或来自网络出口缓冲器2022的数据。在一个实施例中,多路复用器2016或网络缓冲器2018中的一个或多个是来自网络数据流端点电路2000的分开的组件。缓冲器可包括多个(例如,分立的)条目,例如,多个寄存器。
在一个实施例中,操作配置存储2026(例如,一个或多个寄存器)在配置(例如,映射)期间被加载,并且指定该网络数据流端点电路2000(例如,不是空间阵列的处理元件)要执行的特定操作(或多个操作)(例如,与逻辑和/或算术操作形成对照的数据引导操作)。(多个)缓冲器(例如,2002、2008、2022和/或2024)活动可由那个操作控制(例如,由调度器2028控制)。例如,当(例如,所有)输入(例如,有效载荷)数据和/或控制数据到达时,调度器2028可调度网络数据流端点电路2000的一个或多个操作。去往和来自调度器2028的虚线指示可用于例如去往和/或来自调度器2028的控制数据的路径。调度器还可控制多路复用器2016,以例如将数据引导到网络数据流端点电路2020和网络2014和/或从网络数据流端点电路2020和网络2014引导数据。
参考上文在图19中的分布式pick操作,网络数据流端点电路1902(例如,作为如图20中的其操作配置寄存器2026中的操作)可配置成用于从网络数据流端点电路1904和网络数据流端点电路1906中的每一个(例如,在如图20中的该网络数据流端点电路1902的网络入口缓冲器2024(中的例如两个存储位置)中)接收输入数据,并用于例如根据(例如,在如图20中的该网络数据流端点电路1902的空间阵列入口缓冲器2002中的)控制数据(例如,从如图20中的该网络数据流端点电路1902的空间阵列出口缓冲器2008)输出结果数据。网络数据流端点电路1904(例如,作为如图20中的其操作配置寄存器2026中的操作)可配置成用于例如在从处理元件1922(例如,在如图20中的电路1904的空间阵列入口缓冲器2002中)接收到输入数据后,将输入数据提供给(例如,经由如图20中的电路1904的网络出口缓冲器2022将输入数据发送到)网络数据流端点电路1902。这在图19中可称为输入0。在一个实施例中,电路交换型网络被配置(例如,编程)为用于沿路径1924在处理元件1922与网络数据流端点电路1904之间提供专用通信线。网络数据流端点电路1904(例如,在如图20中的其网络出口缓冲器2022中)将头部分组与所接收的数据包括(例如,添加)在一起,以将分组(例如,输入数据)引导到网络数据流端点电路1902。网络数据流端点电路1906(例如,作为如图20中的其操作配置寄存器2026中的操作)可配置成用于例如在从处理元件1920(例如,在如图20中的电路1906的空间阵列入口缓冲器2002中)接收到输入数据后,将输入数据提供给(例如,经由如图20中的电路1906的网络出口缓冲器2022将输入数据发送到)网络数据流端点电路1902。这在图19中可称为输入1。在一个实施例中,电路交换型网络被配置(例如,编程)为用于沿路径1916在处理元件1920与网络数据流端点电路1906之间提供专用通信线。网络数据流端点电路1906(例如,在如图20中的其网络出口缓冲器2022中)将头部分组与所接收的数据包括(例如,添加)在一起,以将分组(例如,输入数据)引导到网络数据流端点电路1902。
当网络数据流端点电路1904用于将输入数据传送到网络数据流端点电路1902(例如,当网络数据流端点电路1902具有用于数据的可用的存储空间和/或网络数据流端点电路1904具有其输入数据时),网络数据流端点电路1904可生成(例如,包括该输入数据和头部的)分组,以在分组交换型通信网络1914上(例如,作为在那个(例如,环形)网络上的站点)将那个数据引导到网络数据流端点电路1902。这在图19中以虚线1926示意性地图示。在图19中,网络1914以多个虚线框示意性地示出。网络1914可包括网络控制器1914A,其例如用于管理网络1914A上的数据的入口和/或出口。
当网络数据流端点电路1906用于将输入数据传送到网络数据流端点电路1902时(例如,当网络数据流端点电路1902具有用于数据的可用的存储空间和/或网络数据流端点电路1906具有其输入数据时),网络数据流端点电路1904可生成(例如,包括该输入数据和头部的)分组,以在分组交换型通信网络1914上(例如,作为在那个(例如,环形)网络上的站点)将那个数据引导到网络数据流端点电路1902。这在图19中以虚线1918示意性地图示。
网络数据流端点电路1902(例如,当在电路1902的(多个)网络入口缓冲器中从网络数据流端点电路1904接收到输入0后,在电路1902的(多个)网络入口缓冲器中从网络数据流端点电路1906接收到输入1后,和/或在电路1902的空间阵列入口缓冲器中从处理元件1908接收到控制数据后)随后可执行所编程的数据流操作(例如,该示例中的Pick操作)。在图19中,网络数据流端点电路1902随后可将来自操作的对应的结果数据输出到例如处理元件1908。在一个实施例中,电路交换型网络被配置(例如,编程)为用于沿路径1928在处理元件1908(例如,其缓冲器)与网络数据流端点电路1902之间提供专用通信线。下文参考图32-图34讨论分布式Pick操作的进一步的示例。图19中的缓冲器可以是在每个PE中的小的、未标记的框。
以下图21-图8包括示例数据格式,但是可使用其他数据格式。一个或多个字段可被包括在数据格式中(例如,被包括在分组中)。数据格式可由网络数据流端点电路使用,以例如在第一组件之间(例如,在第一网络数据流端点电路和第二网络数据流端点电路、空间阵列的组件等之间)传送(例如,发送和/或接收)数据。
图21图示根据本公开的实施例的用于发送操作的数据格式2102和用于接收操作的数据格式2104。在一个实施例中,发送操作2102和接收操作2104是在分组交换型通信网络上传送的数据的数据格式。所描绘的发送操作2102数据格式包括(例如,指示数据要发送到的网络中的哪个组件的)目的地字段2102A、(例如,指示数据要在网络上的哪个通道上发送的)通道字段2102B、以及输入字段2102C(例如,要发送的有效载荷或输入数据)。所描绘的接收操作2104包括输出字段,例如,该接收操作也可包括目的地字段(未描绘)。可使用这些数据格式(例如,用于(多个)分组)以处置将数据移入和移出组件。这些配置可以是可分开的和/或可并行地发生。这些配置可使用单独的资源。术语通道一般指与请求相关联的(例如,管理硬件中的)通信资源。配置与队列管理硬件的关联性可以是显式的。
图22图示根据本公开的实施例的用于发送操作2202的另一数据格式。在一个实施例中,发送操作2202是在分组交换型通信网络上传送的数据的数据格式。所描绘的发送操作2202数据格式包括(例如,用于标注特殊控制分组(诸如但不限于配置分组、提取分组或异常分组)的)类型字段、(例如,指示数据要发送到网络中的哪个组件的)目的地字段2202B、(例如,指示数据要在网络上的哪个通道上发送的)通道字段2202C、以及输入字段2202D(例如,要发送的有效载荷或输入数据)。
图23图示根据本公开的实施例的用于配置用于发送(例如,switch)操作2302的电路元件(例如,网络数据流端点电路)的配置数据格式、以及用于配置用于接收(例如,pick)操作2304的电路元件(例如,网络数据流端点电路)的配置数据格式。在一个实施例中,发送操作2302和接收操作2304是用于要在例如网络数据流端点电路之间的分组交换型通信网络上传送的数据的配置数据格式。所描绘的发送操作配置数据格式2302包括(例如,指示(输入)数据要发送到网络中的哪个(些)组件的)目的地字段2302A、(例如,指示(输入)数据要在网络上的哪个通道上发送的)通道字段2302B、输入字段2302C(例如,用于发送输入数据的(多个)组件的标识符,例如,该元件对其敏感的(例如,结构入口)缓冲器中的输入的集合)、以及(例如,指示要执行多个操作中的哪个操作的)操作字段2302D。在一个实施例中,(例如,传出)操作是例如与数据流图的(例如,相同的)数据流操作器对应的Switch数据流操作或SwitchAny数据流操作中的一个数据流操作。
所描绘的接收操作配置数据格式2304包括(例如,指示(结果)数据要发送到网络中的哪个(些)组件的)输出字段2304A、输入字段2304B(例如,用于发送输入数据的(多个)组件的标识符)、以及(例如,指示要执行多个操作中的哪个操作的)操作字段2304C。在一个实施例中,(例如,传入)操作是例如与数据流图的(例如,相同的)数据流操作器对应的Pick数据流操作、PickSingleLeg数据流操作、PickAny数据流操作或Merge(合并)数据流操作中的一个数据流操作。在一个实施例中,merge数据流操作是需要所有操作数并(例如,利用接收控制的出口端点)使所有操作数出列的pick。
本文中利用的配置数据格式可包括例如按任何顺序的本文中描述的字段中的一个或多个字段。
图24图示根据本公开的实施例的配置数据格式2402,其用于利用标注在电路2400上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于发送操作的电路元件(例如,网络数据流端点电路)。所描绘的发送操作配置数据格式2402包括(例如,指示数据要发送到的网络中的哪个组件的)目的地字段2402A、(例如,指示数据要在(分组交换型)网络上的哪个通道上发送的)通道字段2402B、以及输入字段2102C(例如,用于发送输入数据的(多个)组件的标识符)。在一个实施例中,电路2400(例如,网络数据流端点电路)用于接收按发送操作配置数据格式2402的数据格式的数据的分组,该发送操作配置数据格式2402例如具有指示结果要发送到多个电路中的哪个电路的目的地、指示数据要在(分组交换型)网络的哪个通道上发送的通道、以及输入,该输入为要从多个电路中的哪个电路接收输入数据。“与(AND)”门2404用于:当输入数据是可用的且信用状态为指示存在用于要存储的输出数据的空间的“是”(例如,依赖性令牌指示)时,允许操作被执行,例如,在目的地的缓冲器内。在某些实施例中,每个操作标注有其要求(例如,输入、输出和控制),并且如果满足所有要求,则配置是电路(例如,网络数据流端点电路)“可执行的”。
图25图示根据本公开的实施例的配置数据格式2502,其用于利用标注在电路2500上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于所选择的(例如,发送)操作的电路元件(例如,网络数据流端点电路)。所描绘的(例如,发送)操作配置数据格式2502包括(例如,指示(输入)数据要发送到的网络中的哪个(些)组件的)目的地字段2502A、(例如,指示(输入)数据要在网络上的哪个通道上发送的)通道字段2502B、输入字段2502C(例如,用于发送输入数据的(多个)组件的标识符)、以及(例如,指示要执行多个操作中的哪个操作和/或用于那个操作的控制数据的源的)操作字段2502D。在一个实施例中,(例如,传出)操作是例如与数据流图的(例如,相同的)数据流操作器对应的发送数据流操作、Switch数据流操作或SwitchAny数据流操作中的一个数据流操作。
在一个实施例中,电路2500(例如,网络数据流端点电路)用于接收按(例如,发送)操作配置数据格式2502的数据格式的数据的分组,该(例如,发送)操作配置数据格式2502例如具有输入和操作字段,该输入是有效载荷(例如,输入数据)的(多个)源,该操作字段指示要执行哪个操作(例如,示意性地示出为Switch或SwitchAny)。所描绘的多路复用器2504可例如基于操作字段2502D中的值从多个可用的操作选择要执行的操作。在一个实施例中,电路2500用于:当数据是可用的且信用状态为指示(例如,在目的地的缓冲器中)存在用于要存储的输出数据的空间的“是”(例如,依赖性令牌指示)时,执行那个操作。
在一个实施例中,发送操作不利用超出检查其(多个)输入可用于发送的控制。这可使切换装置在无需在所有支路上具有信用的情况下执行操作。在一个实施例中,Switch和/或SwitchAny操作包括多路复用器,该多路复用器由存储在操作字段2502D中的、用于选择正确的队列管理电路的值控制。
存储在操作字段2502D中的值可在控制选项之中进行选择,例如,如在图26-图29中那样,具有针对每个操作的不同的控制(例如,逻辑)电路。在一些实施例中,信用(例如,网络上的信用)状态是另一输入(例如,如此处在图26-图27中所描绘)。
图26图示根据本公开的实施例的配置数据格式,其用于利用标注在电路2600上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于Switch操作配置数据格式2602的电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段2502D中的(例如,传出)操作值用于例如与数据流图的Switch数据流操作器对应的Switch操作。在一个实施例中,电路2600(例如,网络数据流端点电路)用于接收按Swtich操作的数据格式2602的数据的分组,该Swtich操作的数据格式2602例如具有输入字段2602A和操作字段2602B,该输入字段2602A是(多个)什么组件用于发送数据,该操作字段2602B指示要执行哪个操作(例如,示意性地示出为Switch)。所描绘的电路2600可基于操作字段2602B从多个可用的操作选择要执行的操作。在一个实施例中,电路2500用于:当输入数据(例如,根据输入状态,例如,在(多个)目的地中存在用于数据的空间)是可用的且信用状态(例如,选择操作(OP)状态)为“是”(例如,网络信用指示在网络上存在将那个数据发送到(多个)目的地的可用性)时,执行那个操作。例如,多路复用器2610、2612、2614可与针对(例如,在switch操作中,输出数据要发送到的所在之处的)每个输入的相应的输入状态和信用状态一起使用,以便例如防止输入显示为可用,直到输入状态(例如,目的地中用于数据的空间)和信用状态(例如,在网络上存在用于到达目的地的空间)两者为“真”(例如,“是”)。在一个实施例中,输入状态是如下指示:例如在目的地的缓冲器中存在或不存在用于要存储的(输出)数据的空间。在某些实施例中,“与”门2606用于:当输入数据是可用的(例如,如从多路复用器2604输出)且选择操作(例如,控制数据)状态是例如指示选择操作(例如,输入要发送到多个输出中的哪个输出,参见例如图18)的“是”时,允许操作被执行。在某些实施例中,利用控制数据(例如,选择操作)对操作的执行用于使来自输入中的一个输入的输入数据根据来自多路复用器2608的多路复用器选择位在(例如,如由控制数据指示的)一个或多个(例如,多个)输出上被输出在一个实施例中,选择操作选择switch输出的哪个支路将被使用,和/或选择解码器创建多路复用器选择位。
图27图示根据本公开的实施例的配置数据格式,其用于利用标注在电路2700上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于SwitchAny操作配置数据格式2702的电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段2502D中的(例如,传出)操作值用于例如与数据流图的SwitchAny数据流操作器对应的SwitchAny操作。在一个实施例中,电路2700(例如,网络数据流端点电路)用于接收按SwtichAny操作配置数据格式2702的数据格式的数据的分组,该SwtichAny操作配置数据格式2702例如具有输入字段2702A中的输入和操作字段2702B,该输入字段2702A中的输入是(多个)什么组件用于发送数据,该操作字段2702B指示要执行哪个操作(例如,示意性地示出为SwitchAny)和/或用于那个操作的控制数据的源。在一个实施例中,电路2500用于:当输入数据中的任何输入数据(例如,根据输入状态,例如,在(多个)目的地中存在用于数据的空间)是可用的且信用状态为是“是”(例如,网络信用指示在网络上存在将那个数据发送到(多个)目的地的可用性)时,执行那个操作。例如,多路复用器2710、2712、2714可与针对(例如,在SwitchAny操作中,输出数据要发送到的所在之处的)每个输入的相应的输入状态和信用状态一起使用,以便例如防止输入显示为可用,直到输入状态(例如,目的地中用于数据的空间)和信用状态(例如,在网络上存在用于到达目的地的空间)两者为“真”(例如,“是”)。在一个实施例中,输入状态是如下指示:例如在目的地的缓冲器中存在或不存在用于要存储的(输出)数据的空间。在某些实施例中,“或(OR)”门2704用于:当输出中的任一输出可用时,允许操作被执行。在某些实施例中,操作的执行用于使来自输入中的一个输入的第一可用的输入数据例如根据来自多路复用器2706的多路复用器选择位在一个或多个(例如,多个)输出上被输出。在一个实施例中,任何输出信用一可用,SwitchAny就发生(例如,与利用选择操作的Switch形成对照)。多路复用器选择位可用于将输入引导到网络数据流端点电路的(例如,网络)出口缓冲器。
图28图示根据本公开的实施例的配置数据格式,其用于利用标注在电路2800上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于Pick操作配置数据格式2802的电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段2802C中的(例如,传入)操作值用于例如与数据流图的Pick数据流操作器对应的Pick操作。在一个实施例中,电路2800(例如,网络数据流端点电路)用于接收按Pick操作配置数据格式2802的数据格式的数据的分组,该Pick操作配置数据格式2802例如具有输入字段2802B中的数据、输出字段2802A中的数据和操作字段2802C,该输入字段2802B中的数据是(多个)什么组件用于发送输入数据,该输出字段2802A中的数据是(多个)什么组件用于被发送输入数据,该操作字段2802C指示要执行哪个操作(例如,示意性地示出为Pick)和/或用于那个操作的控制数据的源。所描绘的电路2800可基于操作字段2802C从多个可用的操作选择要执行的操作。在一个实施例中,电路2800用于:当(例如,根据输入(例如,网络入口缓冲器)状态,例如,全部输入数据已到达)输入数据是可用的,信用状态(例如,输出状态)为指示例如在(多个)目的地的缓冲器中存在用于要存储的输出数据的空间的“是”(例如,空间阵列出口缓冲器),并且选择操作(例如,控制数据)状态为“是”时,执行那个操作。在某些实施例中,“与”门2806用于:当输入数据是可用的(例如,如从多路复用器2804输出),输出空间是可用的,并且选择操作(例如,控制数据)状态是例如指示选择操作(例如,输入要发送到多个输出中的哪个输出,参见例如图18)的“是”时,允许操作被执行。在某些实施例中,利用控制数据(例如,选择操作)对操作的执行用于使来自(例如,由控制数据指示的)多个输入中的一个输入的输入数据例如根据来自多路复用器2808的多路复用器选择位在一个或多个(例如,多个)输出上被输出。在一个实施例中,选择操作选择pick的哪个支路将被使用,和/或选择解码器创建多路复用器选择位。
图29图示根据本公开实施例的用于利用标注在电路2900上的电路元件(例如,网络数据流端点电路)的输入、输出和控制数据来配置用于PickAny操作的电路元件(例如,网络数据流端点电路)的配置数据格式2902。在一个实施例中,存储在操作字段2902C中的(例如,传入)操作值用于例如与数据流图的PickAny数据流操作器对应的PickAny操作。在一个实施例中,电路2900(例如,网络数据流端点电路)用于接收按PickAny操作配置数据格式2902的数据格式的数据的分组,该PickAny操作配置数据格式2902例如具有输入字段2902B中的数据、输出字段2902A中的数据和操作字段2902C,该输入字段2902B中的数据是(多个)什么组件用于发送输入数据,该输出字段2902A中的数据是(多个)什么组件用于被发送输入数据,该操作字段2902C指示要执行哪个操作(例如,示意性地示出为PickAny)。所描绘的电路2900可基于操作字段2902C从多个可用的操作选择要执行的操作。在一个实施例中,电路2900用于:当(例如,根据输入(例如,网络入口缓冲器)状态,例如,输入数据中的任何输入数据已到达)输入数据中的任何输入数据(的例如首次到达)是可用的且信用状态(例如,输出状态)为指示例如(多个)目的地的缓冲器中存在用于要存储的输出数据的空间的“是”时,执行那个操作。在某些实施例中,“与”门2906用于当输入数据中的任何输入数据是可用的(例如,如从多路复用器2904输出)且输出空间是可用的时允许操作被执行。在某些实施例中,操作的执行用于使来自多个输出中的一个输出的(例如,首个到达的)输入数据例如根据来自多路复用器2908的多路复用器选择位在一个或多个(例如,多个)输出上被输出。
在一个实施例中,PickAny在任何数据存在时执行,和/或选择解码器创建多路复用器选择位。
图30图示根据本公开的实施例的对由用于执行的网络数据流端点电路3000进行的操作3002、3004、3006的选择。(例如,图20中的调度器2028中的)待决操作存储3001可例如根据本文中讨论的(多种)格式存储一个或多个数据流操作。调度器(例如,基于例如具有其所有操作数的操作的固定优先级或操作中的最旧操作)来调度用于执行的操作。例如,调度器可选择操作3002,并且根据存储在操作字段中的值发送来自多路复用器3008和/或多路复用器3010的对应控制信号。作为示例,若干操作在单个网络数据流端点电路中可以是同时可执行的。假定所有数据在那里,则“可执行”信号(例如,如在图24-图29中所示)可被输入为进入多路复用器3012中的信号。多路复用器3012可发送用于所选择操作(例如,操作3002、3004和3006中的一个操作)的控制信号作为输出,这些控制信号使多路复用器3008配置网络数据流端点电路中的连接以执行所选择操作(例如,以从(多个)缓冲器源送数据或向(多个)缓冲器发送数据)。多路复用器3012可发送用于所选择操作(例如,操作3002、3004和3006中的一个操作)的控制信号作为输出,这些控制信号使多路复用器3010配置网络数据流端点电路中的连接以从(多个)队列移除数据(例如,被消耗的数据)。作为示例,参见下文关于使数据(例如,令牌)被移除的讨论。图30中的“PE状态”可以是来自PE的控制数据,例如,队列的空指示符和满指示符(例如,回压信号和/或网络信用)。在一个实施例中,例如在本文中的图20中,PE状态针对所有缓冲器和/或数据路径可包括空位或满位。图30图示用于本文中的实施例的通用调度,例如,其中用于实施例的专用调度参考图26-图29进行讨论。
在一个实施例中,(例如,对于调度)出列的选择由操作和该操作的动态行为确定,以便例如在执行后使操作出列。在一个实施例中,电路用于使用操作数选择位来使数据(例如,输入、输出和/或控制数据)出列。
图31图示根据本公开的实施例的网络数据流端点电路3100。与图20相比,网络数据流端点电路3100已将配置和控制拆分到两个单独的调度器中。在一个实施例中,出口调度器3128A用于调度对以下数据的操作:要(例如,在自变量队列3102(例如,如图20中的空间阵列入口队列2002)处)(例如,从被耦合到的电路交换型通信网络)进入数据流网络端点电路3100、以及要(例如,在网络出口缓冲器3122(例如,如图20中的网络出口缓冲器2022)处)(例如,从被耦合到的分组交换型通信网络)输出数据流端点电路3100的数据。在一个实施例中,入口调度器3128B用于调度对以下数据的操作:要(例如,在网络入口缓冲器3124(例如,如图20中的网络入口缓冲器3024)处)(例如,从被耦合到的分组交换型通信网络)进入数据流网络端点电路3100、以及要(例如,在出口缓冲器3108(例如,如图20中的空间阵列出口缓冲器3008)处)(例如,从被耦合到的电路交换型通信网络)输出数据流端点电路3100的数据。调度器3128A和/或调度器3128B可包括电路3100的(例如,操作)状态作为输入,该电路3100的(例如,操作)状态例如,输入(例如,缓冲器3102A、3102)的充满级别、输出(例如,缓冲器3108)的充满级别、值(例如,3102A中的值)等。调度器3128B可包括信用返回电路,其例如用于例如当在电路3100的网络入口缓冲器3124中接收到时标注信用被返回到发送方。
网络3114可以是例如如本文中所讨论的电路交换型网络。附加地或替代地,也可利用(例如,如本文中所讨论的)分组交换型网络,例如,耦合至网络出口缓冲器3122、网络入口缓冲器3124、或本文中的其他组件。自变量队列3102可包括控制缓冲器3102A,其例如用于指示相应的输入队列(例如,缓冲器)何时包括(新)数据项,例如,作为单个位。现在转到图32-图34,在一个实施例中,这些附图渐增地示出用于创建分布式pick的配置。
图32图示根据本公开的实施例的、例如如上文中参考图19所讨论的当执行pick操作时接收输入零(0)的网络数据流端点电路3200。在一个实施例中,出口配置3226A(例如,在配置步骤期间)被加载有pick操作的用于将数据发送到不同的网络数据流端点电路(例如,图34中的电路3400)的部分。在一个实施例中,出口调度器3228A用于针对(例如,来自处理元件的)输入数据来监测自变量队列3202(例如,数据队列)。根据所描绘的数据格式的实施例,“发送”(例如,用于其的二进制值)指示要根据字段X、Y来发送数据,其中,X是指示特定的目标网络数据流端点电路的值(例如,0是图34中的网络数据流端点电路3400),并且Y是指示值要存储在哪个网络入口缓冲器(例如,缓冲器3424)位置的值。在一个实施例中,Y是指示多通道(例如,分组交换型)网络的特定通道的值(例如,0是图34中的网络数据流端点电路3400的通道0和/或缓冲器元件0)。当输入数据到达时,该输入数据随后由网络数据流端点电路3200(例如,从网络出口缓冲器3222)发送到不同的网络数据流端口电路(例如,图34中的网络数据流端点电路3400)。
图33图示根据本公开的实施例的、例如如上文中参考图19所讨论的当执行pick操作时接收输入一(1)的网络数据流端点电路3300。在一个实施例中,出口配置3326A(例如,在配置步骤期间)被加载有pick操作的用于将数据发送到不同的网络数据流端点电路(例如,图34中的电路3400)的部分。在一个实施例中,出口调度器3328A用于针对(例如,来自处理元件的)输入数据来监测自变量队列3320(例如,数据队列3302B)。根据所描绘的数据格式的实施例,“发送”(例如,用于其的二进制值)指示要根据字段X、Y来发送数据,其中,X是指示特定的目标网络数据流端点电路的值(例如,0是图34中的网络数据流端点电路3400),并且Y是指示值要存储在哪个网络入口缓冲器(例如,缓冲器3424)位置的值。在一个实施例中,Y是指示多通道(例如,分组交换型)网络的特定通道的值(例如,1是图34中的网络数据流端点电路3400的通道1和/或缓冲器元件1)。当输入数据到达时,该输入数据随后由网络数据流端点电路3300(例如,从网络出口缓冲器3222)发送到不同的网络数据流端口电路(例如,图34中的网络数据流端点电路3400)。
图34图示根据本公开的实施例的、例如如上文中参考图19所讨论的当执行pick操作时输出所选择输入的网络数据流端点电路3400。在一个实施例中,其他网络数据流端点电路(例如,电路3200和电路3300)用于将它们的输入数据发送到电路3400的网络入口缓冲器3424。在一个实施例中,入口配置3426B(例如,在配置步骤期间)被加载有pick操作的用于例如根据控制值来挑选被发送到网络数据里端点电路3400的部分。在一个实施例中,控制值用于在入口控制3432(例如,缓冲器)中被接收。在一个实施例中,入口调度器3328A用于(例如,在网络入口缓冲器3424中)监测控制值和输入值的接收。例如,如果控制值表明从网络入口缓冲器3424的缓冲器元件A(例如,该示例中的0或1)(例如,从通道A)挑选,则例如当输出缓冲器具有存储空间时(例如,如由回压信号所指示),存储在那个缓冲器元件A中的值随后作为由电路3400进行的操作的结果被输出到例如输出缓冲器3408中。在一个实施例中,当出口缓冲器具有令牌(例如,输入数据和控制数据)且接收方断言该接收方具有缓冲器(例如,指示存储可用,但是其他资源指派方式是可能的,该示例仅是说明性的)时,电路3400的输出数据被向外发送。
图35图示根据本公开的实施例的流程图3500。所描绘的流程3500包括:3502:提供处理元件的空间阵列;3504:利用分组交换型通信网络根据数据流图在空间阵列内在处理元件之间路由数据;3506:利用处理元件执行数据流图的第一数据流操作;以及3508:利用分组交换型通信网络的多个网络数据流端点电路执行数据流图的第二数据流操作。
再次参见图8,加速器(例如,CSA)802可执行(例如,或请求执行)向多个高速缓存区块(例如,高速缓存区块808)中的一个或多个高速缓存区块的对数据的访问(例如,加载和/或存储)。例如,如本文中所讨论,存储器接口电路(例如,(多个)请求地址文件(RAF)电路)可被包括以提供存储器(例如,高速缓存区块)与加速器802之间的访问。再次参见图11,作出请求的电路(例如,处理元件)可执行(例如,或请求执行)向多个高速缓存区块(例如,高速缓存区块1102)中的一个或多个高速缓存区块的对数据的访问(例如,加载和/或存储)。例如,如本文中所讨论,存储器接口电路(例如,(多个)请求地址文件(RAF)电路)可被包括以提供存储器(例如,高速缓存存储器的一个或多个区块)与加速器(例如,加速器片1108、1110、1112、1114中的一个或多个加速器片)之间的访问。再次参见图19和/或图20,作出请求的电路(例如,处理元件)可执行(例如,或请求执行)向多个高速缓存区块中的一个或多个高速缓存区块的对数据的访问(例如,加载和/或存储)。例如,如本文中所讨论,存储器接口电路(例如,(多个)请求地址文件(RAF)电路,例如,RAF/高速缓存接口1912)可被包括以提供存储器(例如,高速缓存存储器的一个或多个区块)与加速器(例如,处理元件和/或网络数据流端点电路(例如,电路1902、1904、1906)中的一个或多个)之间的访问。
在某些实施例中,加速器(例如,其PE)通过以下网络耦合至RAF电路或多个RAF电路:(i)电路交换型网络(例如,如本文中所讨论,例如,参考图6-图11);或(ii)分组交换型网络(例如,如本文中所讨论,例如,参考图18-图35)。
在某些实施例中,电路(例如,请求地址文件(RAF)电路)(例如,多个RAF电路中的每个RAF电路)包括转换后备缓冲器(TLB)(例如,TLB电路)。TLB可接收虚拟地址的输入,并且可输出与虚拟地址至物理地址的映射(例如,地址映射)(例如,与数据流图至硬件的任何映射不同)对应的物理地址。虚拟地址可以是如由在电路上(例如,在加速器和/或处理器上)运行的程序所见的地址。物理地址可以是存储器硬件中的(例如,与虚拟地址不同的)地址。TLB可包括数据结构(例如,表),该数据结构(例如,表)用于存储(例如,最近使用的)虚拟至物理存储器地址转换,例如使得不必对存在的每个虚拟地址执行转换以获得与那个虚拟地址对应的物理存储器地址。如果虚拟地址条目不在TLB中,则电路(例如,TLB管理电路)可执行页遍历以确定虚拟至物理存储器地址转换。在一个实施例中,电路(例如,RAF电路)用于经由(例如,如图6-图11中那样的)电路交换型网络从作出请求的实体(例如,PE或其他硬件组件)接收用于在TLB(例如,RAF电路中的TLB)中的转换的虚拟地址的输入。附加地或替代地,电路(例如,RAF电路)可经由(例如,如图18-图35中那样的)分组交换型网络从作出请求的实体(例如,PE、网络数据流端点电路、或其他硬件组件)接收用于在TLB(例如,RAF电路中的TLB)中的转换的虚拟地址的输入。在某些实施例中,针对存储器(例如,高速缓存)访问请求接收的数据是存储器命令。存储器命令可包括要访问的虚拟地址、要执行的操作(例如,加载或存储)、和/或(例如,针对存储的)有效载荷数据、和/或用于将存储器命令相对于其他存储器命令排序的依赖性消息。
在某些实施例中,针对存储器(例如,高速缓存)访问请求接收的请求数据由例如可配置空间加速器的一个或多个请求地址文件电路接收。空间架构的某些实施例是加速用户应用的高能效且高性能的方法。(多个)空间加速器可以实现能效的方法之一是通过空间分布,例如,与存在于核中的高能耗、集中式结构不同,空间架构通常可以使用小的非聚合的结构(例如,这些结构更简单并且更高能效)。例如,图11的电路(例如,空间阵列)可以跨若干RAF分散其加载和存储操作。这种组织可以产生每个RAF处的地址转换缓冲器(例如,TLB)的尺寸的减小(例如,与在RAF中使用更少的(或单个)TLB相比)。例如,与局部管理电路相对照,本文中的某些实施例为分布式结构(例如,分布式TLB)提供分布式协调。如下文进一步讨论,本文中的实施例包括例如用于共享虚拟存储器的统一转换后备缓冲器(TLB)管理硬件或分布式转换后备缓冲器(TLB)管理硬件。
本文中的某些实施例提供共享虚拟存储器微架构,例如,该微架构通过提供加速器中的存储器范式来促进编程。本文中的某些实施例不针对每个加速器利用单片(例如,单个)转换机制(例如,TLB)。本文中的某些实施例利用分布式TLB,例如,这些TLB不在加速器中(例如,不在加速器的结构中)。本文中的某些实施例提供要在硬件中实现的共享虚拟存储器控制(例如,其复杂部分)。本文中的某些实施例提供用于加速器虚拟存储器转换机制的微架构。在该微架构的某些实施例中,一组分布式TLB被使用,例如,使得对存储器的许多并行访问被同时转换。为了简化对分布式TLB的实现,本文中的某些实施例利用集中式管理硬件(例如,TLB管理器电路)以处理某些(例如,更复杂的)操作,例如,但不限于否决和页遍历(例如,集中式页遍历器)。为了避免伪事务,本文中的某些实施例(例如,在TLB管理器电路处)引入过滤器以跟踪底层TLB。本文中的某些实施例提供已经被直接提供虚拟地址管理硬件的加速器架构,例如,而不使用在多个(例如,具有区域意识的)加速器之间共享的远程管理硬件(例如,输入-输出存储器管理单元(IOMMU))。本文中的某些实施例提供具有紧密耦合的转换硬件的完全共享虚拟存储器微架构。本文中的某些实施例包括针对低能耗被调整并且支持相对少的条目(例如,每个(例如,L1)TLB有2个、3个、4个、5个、6个、7个或8个条目)的(例如,L1)TLB。在某些实施例中,一些转换可以在L1 TLB之间共享(例如,存在于多个L1 TLB中),并且单个L2 TLB或多个L2 TLB(例如,用于单个加速器和/或加速器片)可以消除伪请求。本文中的某些实施例提供减少被发送以处置(例如,大多数)转换事务的消息的数量的统一第二级TLB。本文中的某些实施例极大地简化用于实现多级TLB层次结构的硬件。本文中的某些实施例减少完成未命中(例如,涉及页遍历的未命中)的等待时间。
2.7转换后备缓冲器(TLB)管理硬件
本文中的某些实施例包括与RAF电路和(例如,单个)TLB管理器电路一起定位的多个TLB。本文中的某些实施例包括多个L1 TLB,但是作为单个第二级TLB以平衡对L1 TLB处的低能量利用和减少的页遍历(例如,对于L1 TLB中的未命中)的期望。本文中的某些实施例提供统一L2 TLB微架构,该统一L2 TLB微架构具有位于TLB管理器电路(例如,硬件块)内的单个L2 TLB。例如,当未命中发生时,L1 TLB(例如,多个L1 TLB中的每一个)可以首先参考L2 TLB(例如,引起对L2 TLB的访问),并且L2 TLB中的未命中可以产生对页遍历的唤起。本文中的某些实施例提供分布式多(例如,两)级TLB微架构。该微架构的某些实施例通过减少高能效的L1 TLB的TLB未命中损失来改善加速器的性能。消息(例如,命令)可以由网络在两级TLB(例如,以及页遍历器)之间承载,其也可以与其他(例如,非转换或非TLB相关的)存储器请求共享。页遍历器可以是有特权的,例如,与使用模式相对照,以有特权模式操作,例如,页遍历器可以访问是有特权数据的页表。在具有多个(例如,L2)高速缓存的一个实施例中,相应的页遍历器可以被包括在每个高速缓存处。
2.8浮点支持
某些HPC应用由它们对于显著的浮点带宽的需求来表征。为了满足该需求,例如取决于片配置,CSA的实施例可被供应有多个(例如,每个可被供应有128个与256个之间的)浮点加法和乘法PE。CSA可提供一些其他扩展精度模式,以便例如简化数学库实现方式。CSA浮点PE可支持单精度和双精度两者,但是较低精度的PE可支持机器学习工作负荷。CSA可提供比处理核高一数量级的浮点性能。在一个实施例中,除了增加浮点带宽之外,为了驱动所有浮点单元,浮点操作中消耗的能量减少。例如,为了减少能量,CSA可选择性地对浮点乘法器阵列的低阶位门控。在检查浮点算术的行为时,乘法阵列的低阶位可能不会经常影响最终经舍入的积。图36图示根据本公开的实施例的分区为三个区域(结果区域、三个潜在的进位区域3602、3604、3606和门控区域)的浮点乘法器3600。在某些实施例中,进位区域可能影响结果区域,而门控区域不太可能影响结果区域。考虑g位的门控区域,最大进位可以是:
给定该最大进位,如果进位区域的结果小于2c–g(其中,进位区域为c位宽),则门控区域可被忽略,因为该门控区域不影响结果区域。增加g意味着更有可能将需要门控区域,而增加c意味着在随机假定下,该门控区域将不被使用,并且可被禁用以避免能耗。在CSA浮点乘法PE的实施例中,利用两级流水线式方式,其中,首先确定进位区域,随后,如果发现门控区域影响结果,则确定该门控区域。如果知晓关于乘法的上下文的更多信息,则CSA更激进地调整门控区域的尺寸。在FMA中,乘法结果可被加到累加器,该累加器经常比被乘数中的任一者大得多。在这种情况下,可在乘法前提前观察加数指数,并且CSDA可相应地调整门控区域。CSA的一个实施例包括一方案,其中,上下文值(其约束计算的最小结果)被提供给相关的乘法器以选择最低能量门控配置。
2.9运行时服务
在某些实施例中,CSA包括异构的分布式结构,因此,运行时服务实现方式用于以并行的分布式方式适应若干种类的PE。虽然CSA中的运行时服务可能是关键的,但是它们相对于用户级计算可能是较不频繁的。因此,某些实施例聚焦于将服务叠加在硬件资源上。为了满足这些目的,CSA运行时服务可构造为层次结构,例如,每一层对应于CSA网络。在片级,单个面向外部的控制器可接受服务命令,或者可将服务命令发送到与CSA片相关联的核。片级控制器可服务以(例如,使用ACI网络)协调RAF处的区域控制器。区域控制器可转而协调某些夹层网络站(例如,网络数据流端点电路)处的本地控制器。在最低级,服务特定的微协议可(例如,在通过夹层控制器控制的特殊模式期间)在本地网络上执行。微协议可准许每一个PE(例如,通过类型划分的PE类)根据其自身的需求来与运行时服务交互。因此,并行性在该层次结构组织中是隐式的,并且在最低级处的操作可同时发生。例如取决于CSA片的配置尺寸以及CSA片在存储器层次结构中的位置,该并行性可实现在几百纳秒到几微秒之间的对CSA片的配置。因此,CSA的实施例利用数据流图的属性来改善每一个运行时服务的实现方式。一项关键的观察是运行时服务可能仅需要维持数据流图的合法逻辑视图(例如,可通过对数据流操作器执行的某种排序而产生的状态)。服务一般可不需要保证数据流图的时态视图(例如,在给定时刻数据流图在CSA中的状态)。例如,假设服务被安排以维持数据流图的逻辑示图,则这可准许CSA以分布式、流水线式的并行方式进行大多数运行时服务。本地配置微协议可以是叠加在本地网络上的基于分组的协议。配置目标可被组织为配置链,例如,该配置链在微架构中固定。结构(例如,PE)目标可以一次被配置一个,例如,对于每一个目标使用单个额外寄存器来实现分布式协调。为了开始配置,控制器可驱动带外信号,该带外信号将其邻域内的所有结构目标置入未经配置的、暂停状态,并且将本地网络中的多路复用器摇摆到预定义的构造。当结构(例如,PE)目标被配置(即,它们完全接收到它们的配置分组)时,它们可设置它们的配置微协议寄存器,从而向下一目标(例如,PE)通知该下一目标可使用后续分组来继续进行配置。对于配置分组的尺寸没有限制,并且分组可具有动态可变的长度。例如,配置恒定操作数的PE可具有长度设定为包括恒定字段(例如,图3B-图3C中的X和Y)的配置分组。图37图示根据本公开的实施例的具有多个处理元件(例如,PE 3702、3704、3706、3708)的加速器3700的运行中配置。一旦经配置,PE就可受制于数据流约束来执行。然而,涉及未经配置的PE的通道可由微架构禁用,从而例如防止任何未定义的操作发生。这些属性允许CSA的实施例以分布式方式初始化和执行,而一点也没有集中式控制。来自未经配置的状态,配置可完全并行地发生(例如,也许在短至200纳秒内)。然而,由于对CSA的实施例的分布式初始化,PE可能变得活跃,以便例如当整个结构被配置好之前很久就将请求发送到存储器。提取能以与配置几乎相同的方式继续进行。本地网络可被遵守,以便一次从一个目标提取数据,并且提取用于实现分布式协调的状态位。CSA可将提取安排为是非破坏性的,即,在提取的完成时,每一个可提取目标已返回到其起始状态。在该实现方式中,目标中的所有状态可被传播至以类扫描方式连至本地网络的出口寄存器。然而可通过引入寄存器传送级(RTL)的新路径或使用现有的线以便以更低开销来提供相同功能来实现原位(in-place)提取。类似的配置、层次结构提取并行地实现。
图38图示根据本公开的实施例的运行中流水线式提取的快照3800。在提取的一些用例(诸如,检查点操作)中,只要结构吞吐量可被维持,等待时间就可以不是关注的问题。在这些情况下,提取能以流水线方式来安排。图38中示出的这种布置准许结构中的大多数继续执行,而窄区域被禁用于提取。配置和提取可被协调和组成以实现流水线式上下文切换。定性地讲,异常可与配置和提取不同,体现在与发生在指定时间不同,异常在运行时期间的任何时刻在结构中的任何地方发生。因此,在一个实施例中,异常微协议可能无法叠加在本地网络上,并利用其自身的网络,该本地网络在运行时由用户程序占据。然而,从本质上说,异常是稀少的,并且对等待时间和带宽不敏感。因此,CSA的某些实施例利用分组交换型网络将异常携带至本地夹层站,例如,在该本地夹层站处,这些异常被继续沿服务层次结构向上被转发(例如,如图53中所示)。本地异常网络中的分组可以是极小的。在许多情况下,仅2至8位的PE标识(ID)作为完整的分组就足够了,例如因为当分组遍历异常服务层次结构时,CSA可创建唯一的异常标识符。此类方案可以是所期望的,因为它减少了在每一个PE处产生异常的面积开销。
3.编译
将以高级语言编写的程序编译到CSA上的能力对于产业应用可能是必要的。这一节给出用于CSA的实施例的编译策略的高级概览。首先是CSA软件框架的提议,该CSA软件框架说明理想的生产质量工具链的期望属性。其次,讨论了原型编译器框架。接着讨论“控制-数据流转换”,其例如用于将普通的序列化控制流代码转换为CSA数据流汇编代码。
3.1示例生产框架
图39图示根据本公开的实施例的用于加速器的编译工具链3900。该工具链将高级语言(诸如,C、C++和Fortran)编译为用于将被加速的特定区域的主代码(LLVM)中介表示(IR)的组合。该编译工具链的CSA特定的部分将LLVM IR作为其输入,将该IR优化并编译为CSA汇编,从而例如在等待时间不敏感的通道上增加适当的缓冲以用于性能。随后,它将CSA汇编放置并路由在硬件结构上,并配置PE和网络以用于执行。在一个实施例中,工具链支持CSA特定的编译作为及时(JIT)编译,从而并入来自实际执行的潜在运行时反馈。框架的关键设计特性之一是编译(LLVM)IR以获得CSA,而不是将较高级语言用作输入。虽然以专门为CSA设计的高级编程语言编写的程序可实现最高性能和/或能效,但是采用新的高级语言或编程框架可能由于转换现有代码基础的困难在实践中是慢的且受限的。将(LLVM)IR用作输入使广泛范围的现有程序能够潜在地在CSA上执行,从而例如不需要创建新语言,也不需要显著地修改想要在CSA上运行的新语言的前端。
3.2原型编译器
图40图示根据本公开的实施例的用于加速器的编译器4000。编译器4000最初聚焦于通过(例如,Clang)前端对C或C++的提前编译。为了编译(LLVM)IR,编译器利用三个主要的级在LLVM内实现CSA后端目标。首先,CSA后端将LLVM IR降低为用于序列化单元的目标特定的机器指令,该序列化单元实现大多数CSA操作以及传统的类RISC控制流架构(例如,利用分支和程序计数器)。工具链中的序列化单元可充当对编译器和应用开发器两者有用的辅助,因为该序列化单元允许从控制流(CF)到数据流(DF)的递增式变换,例如,将某时刻的一个代码段从控制流转换到数据流,并且验证程序正确性。序列化单元也可提供用于处置在空间阵列中不适配的代码的模型。随后,编译器将这些控制流指令转换为用于CSA的数据流操作器(例如,代码)。这一阶段稍后在第3.3节中描述。随后,CSA后端可对数据流指令运行其自身的优化轮次。最后,编译器可转储(dump)CSA汇编格式的指令。该汇编格式被取为对后级工具的输入,该后级工具将数据流指令放置并路由在实际的CSA硬件上。
3.3控制至数据流转换
编译器的关键部分可在控制-数据流转换轮次(或简称数据流转换轮次)中实现。该轮次吸收以控制流形式表示的函数,并将该函数转换为数据流函数,该以控制流形式表示的函数例如是具有对虚拟寄存器进行操作的序列化机器指令的控制流图(CFG),该数据流函数在概念上是由等待时间不敏感的通道(LIC)连接的数据流操作(指令)的图。本章节给出对该轮次的高级描述,从而描述在某些实施例中,该轮次如何在概念上处理存储器操作、分支和循环。
直线代码
图41A图示根据本公开的实施例的序列化汇编代码4102。图41B图示根据本公开的实施例的针对图41A的序列化汇编代码4102的数据流汇编代码4104。图41C图示根据本公开的实施例的针对用于加速器的图41B的数据流汇编代码4104的数据流图4106。
首先,考虑将直线序列化代码转换为数据流的简单情况。数据流转换轮次可将基本的序列化代码块(诸如,图41A中示出的代码)转换为图41B中示出的CSA汇编代码。从概念上讲,图41B中的CSA汇编表示图41C中的数据流图。在该示例中,每一条序列化指令被转换为匹配的CSA汇编。(例如,用于数据的).lic声明宣称与序列化代码中的虚拟寄存器(例如,Rdata)相对应的等待时间不敏感的通道。在实践中,对数据流转换轮次的输入可以在经编号的虚拟寄存器中。然而,为清楚起见,本节使用描述性的寄存器名称。注意,在该实施例中,加载和存储操作在CSA架构中受支持,从而相比仅支持纯数据流的架构允许多得多的程序运行。由于对编译器的序列化代码输入是SSA(单静态指派)形式的,因此对于简单的基本块,控制-数据流轮次可将每一个虚拟寄存器定义转换为在等待时间不敏感的通道上的单个值的产生。SSA形式允许对虚拟寄存器(诸如,在Rdata2中)的单个定义的多次使用。为了支持该模型,CSA汇编代码支持对同一LIC(例如,data2)的多次使用,并且模拟器隐式地创建LIC的必要的副本。序列化代码与数据流代码之间的一个关键区别在于对存储器操作的处理。图41A中的代码在概念上是串行的,这意味着在addr和addr3地址重叠的情况下,addr3的load32(ld32)应当显得在addr的st32之后发生。
分支
为了将具有多个基本块和条件语句的程序转换为数据流,编译器生成特殊的数据流操作器来替换分支。更具体地,编译器使用switch操作器以在原始的CFG中的基本块的结尾处引导传出数据,并使用pick操作器以在基本块的开始处从适当的传入通道中选择值。作为具体的示例,考虑图42A-图42C中的代码和对应的数据流图,该代码和对应的数据流图有条件地基于以下若干输入来计算y的值:a、i、x和n。在计算了分支条件测试之后,则数据流代码使用switch操作器(例如,参见图3B-图3C)以:如果测试为0,则将通道x中的值引导到通道xF,或者如果测试为1,则将通道x中的值引导到通道xT。类似地,pick操作器(例如,参见图3B-图3C)用于:如果测试为0,则将通道yF发送到y,或者如果测试为1,则将通道yT发送到y。在该示例中,证明了即便a的值仅用于条件语句的真分支中,CSA也将包括switch操作器,该switch操作器在测试为1时将该a的值引导到通道aT,并且当测试为0时消耗(吞噬)该值。后一种情况通过将switch装置的假输出设置为%ign来表达。简单地将通道直接连接到真路径可能不是正确的,因为在执行实际上采用假路径的情况下,该“a”的值将被留在图中,从而导致对于该函数的下一次执行的不正确的a值。该示例突出了控制等效的属性,该属性是正确的数据流转换的实施例中的关键属性。
控制等效:考虑具有两个基本块A和B的单入口单出口控制流图G。如果通过G的所有完成控制流路径都对A和B访问相同次数,则A和B是控制等效的。
LIC替换:在控制流图G中,假定基本块A中的操作定义虚拟寄存器x以及在基本块B中的使用x的操作。那么只有在A和B是控制等效的时,正确的控制-数据流变换才可用等待时间不敏感的通道来替换x。控制等效关系将CFG的基本块分区为强控制依赖性区域。图42A图示根据本公开的实施例的C源代码4202。图42B图示根据本公开的实施例的针对图42A的C源代码4202的数据流汇编代码4204。图42C图示根据本公开的实施例的针对图42B的数据流汇编代码4204的数据流图4206。在图42A-图42C的示例中,在条件语句之前和之后的基本块是彼此控制等效的,但是在真路径和假路径中的基本块各自位于它们的控制依赖性区域中用于将CFG转换为数据流的一个正确算法用于使编译器:(1)插入switch以对在不是控制等效的基本块之间流动的任何值补偿执行频率的失配;以及(2)在基本块的开始处插入pick以便正确地从任何传入值选择到基本块。生成用于这些pick和switch的适当的控制信号可以是数据流转换的关键部分。
循环
数据流转换中的另一重要的CFG类别是用于单入口单出口循环的CFG,这是(LLVM)IR中生成的循环的常见形式。这些循环除了从循环的结尾往回到循环头部块的单个后沿以外,可以是几乎非循环的。数据流转换轮次可使用相同的高级策略来像对于分支那样转换循环,例如,数据流转换轮次在循环的结尾插入switch以将值引导出循环(要么离开循环出口,要么围绕后沿到循环的开始),并且在循环的开始处插入pick以在进入循环的初始值与通过后沿到来的值之间进行选择。图43A图示根据本公开的实施例的C源代码4302。图43B图示根据本公开的实施例的针对图43A的C源代码4304的数据流汇编代码4302。图43C图示根据本公开的实施例的针对图43B的数据流汇编代码4304的数据流图4306。图43A-图43C示出用于将循环归纳变量i的值加起来的示例do-while循环的C和CSA汇编代码以及对应的数据流图。对于从概念上讲围绕循环进行循环的每一个变量(i和sum),该图具有控制这些值的流动的对应的pick/switch对。注意,即便n是循环不变量,该示例也使用pick/switch对使n的值围绕循环进行循环。这种n的重复使n的虚拟寄存器能够转化到LIC中,因为它匹配循环外部的n的概念性定义与循环内部对n的一次或多次使用之间的执行频率。一般而言,为了获得正确的数据流转换,当寄存器被转换到LIC中时,对于循环体内部的每一次迭代,登入(live-in)循环的寄存器将被重复一次。类似地,在循环内被更新且从循环登出(live-out)的寄存器将被消耗(例如,利用被发送出循环的单个最终值)。循环将褶皱引入到数据流转换过程中,即,用于循环的顶部处的pick的控制以及用于循环底部的switch是偏移的。例如,如果图42A中的循环执行三个迭代并退出,则对挑选器的控制应当是0、1、1,而对切换器的控制应当是1、1、0。该控制通过以下方式实现:当函数在循环0(其在汇编中由指示.value 0和.avail 0指定)上开始时,以初始的额外0启动挑选器通道,随后将输出切换器复制到挑选器中。注意,切换器中的最后一个0将最终的0恢复到挑选器中,从而确保数据流图的最终状态匹配其初始状态。
图44A图示根据本公开的实施例的流程图4400。所描绘的流程4400包括:4402:利用处理器的核的解码器将指令解码为经解码指令;4404:利用处理器的核的执行单元执行经解码指令以执行第一操作;4406:接收包括多个节点的数据流图的输入;4408:将数据流图叠加到处理器的多个处理元件以及处理器的多个处理元件之间的互连网络中,并且每一个节点被表示为多个处理元件中的数据流操作器;以及4410:当相应的传入操作数集到达多个处理元件的数据流操作器中每一个时,利用互连网络和多个处理元件执行数据流图的第二操作。
图44B图示根据本公开的实施例的流程图4401。所描绘的流程4401包括:4403:接收包括多个节点的数据流图的输入;4405:将数据流图叠加到处理器的多个处理元件、多个处理元件之间的数据路径网络以及多个处理元件之间的流控制路径网络中,并且每一个节点被表示为多个处理元件中的数据流操作器。
在一个实施例中,核将命令写入到存储器队列中,并且CSA(例如,多个处理元件)监测该存储器队列且当该命令被读取时开始执行。在一个实施例中,核执行程序的第一部分,并且CSA(例如,多个处理元件)执行该程序的第二部分。在一个实施例中,当CSA正在执行操作时,核进行其他工作。
4.CSA优势
在某些实施例中,CSA架构和微架构提供相对于路线图处理器架构和FPGA深远的能量、性能、可用性优势。在本节中,这些架构与CSA的实施例进行比较,并且强调CSA在加速并行数据流图中相对于每一者的优越性。
4.1处理器
图45图示根据本公开的实施例的吞吐量相对于每个操作的能量的图表4500。如图45中所示,小型核一般比大型核能效更高,并且在一些工作负荷中,该优势可通过更高的核计数而转换为绝对性能。CSA微架构遵循这些观察结果至它们的结论,并且去除与冯·诺依曼架构相关联的(例如,大多数)能量饥饿型控制结构(包括指令侧微架构中的大多数)。通过去除这些开销并实现简单的单操作PE,CSA的实施例获得密集、高效的空间阵列。与通常非常串行化的小型核不同,CSA可例如经由电路交换型本地网络将其PE聚集在一起以形成显式并行的聚合数据流图。该结果为不仅在并行应用中、而且也在串行应用中的性能。与在面积和能量方面花大代价的核不同,CSA在其原生执行模型中已经是并行的。在某些实施例中,CSA既不需要推测来提升性能,也不需要反复地从序列化程序表示中重新提取并行性,由此避免了冯·诺依曼架构中主要能量税负中的两项。CSA的实施例中的大多数结构是分布式、小型且高能效的,这与核中发现的集中式、庞大的能量饥饿型结构形成对照。考虑CSA中的寄存器的情况:每一个PE可具有一些(例如,10个或更少)存储寄存器。单独而言,这些寄存器可比传统的寄存器组更高效。在聚合时,这些寄存器可提供大型结构中寄存器组的效果。作为结果,CSA的实施例避免由经典架构导致的栈溢出和填满中的大多数,同时对于每一次状态访问使用少得多的能量。当然,应用可仍访问存储器。在CSA的实施例中,存储器访问请求和响应是架构上解耦的,从而使工作负荷对于每个面积和能量单位维持多得多的待决存储器访问。该属性对高速缓存约束的工作负荷实现显著更高的性能,并且减少使存储器约束的工作负荷中的主存储器饱和所需的面积和能量。CSA的实施例暴露对非冯·诺依曼架构而言独一无二的新的能效形式。在(例如,大多数)PE处执行单个操作(例如,指令)的一个结果是减少的操作数熵。在递增式操作的情况下,每一次执行会导致少数电路级切换和非常少的能耗,这是在第5.2节中详细检验的情况。相比之下,冯·诺依曼经复用,从而导致大量位转变。CSA的实施例的异步样式也实现微架构优化,诸如,难以在被严格地调度的核流水线中实现的在第2.7节中描述的浮点优化。由于PE可以是相对简单的,并且在特定数据流图中的PE的行为可静态地被知晓,因此时钟门控和功率门控技术可以比在更粗糙架构中更高效地被采用。CSA、PE和网络的实施例的图执行样式、小尺寸和可延展性共同实现了对许多种类并行性的表达:指令、数据、流水线、向量、存储器、线程和任务并行性全都可被实现。例如,在CSA的实施例中,一个应用可使用算术单元来提供高的地址带宽等级,而另一应用可将那些相同的单元用于计算。在许多情况下,多种并行性可被组合以实现甚至更高的性能。许多关键的HPC操作可既被复制又被流水线化,从而导致多个数量级的性能增益。相比之下,冯·诺依曼核典型地针对由架构师仔细选择的一种并行性样式进行优化,从而导致不能够捕捉所有重要的应用内核。正因为CSA的实施例暴露并促进并行性的许多形式,因此它不命令特定的并行性形式,或者更糟糕地,特定的子例程存在于应用中以受益于CSA。例如即便当不进行修改就被编译时,许多应用(包括单流应用)也可从CSA的实施例获得性能和能量益处两者。这与要求大量的编程器努力获得单流应用中的显著性能增益的长期趋势相反。实际上,在一些应用中,相比从已备受煎熬来针对向量指令的其复杂的当代对等代码,CSA的实施例从功能上等效的但较不“现代化的”代码中获得更多性能。
4.2CSA实施例与FPGA的比较
将数据流操作器选作CSA的实施例的基本架构这一选择将那些CSA与FPGA区分开,具体地,CSA作为用于从传统编程语言产生的HPC数据流图的优越的加速器。数据流操作器在根本上是异步的。这使CSA的实施例不仅能够具有在微架构中的实现自由,而且还使CSA的实施例能够简单且简洁地适应抽象架构概念。例如,CSA的实施例利用简单的加载-存储接口自然地适应许多存储器微架构,这些许多存储器微架构基本上是异步的。人们仅需要检查FPGA DRAM控制器来领会复制度的区别。CSA的实施例也利用异步性来提供像配置和提取这样的更快且功能更全的运行时服务,人们相信这比FPGA块4-6个数量级。通过收窄架构接口,CSA的实施例在微架构级提供对大多数时序路径的控制。这允许CSA的实施例以比在FPGA中提供的更一般的控制机制高得多的频率来操作。类似地,在架构上对于FPGA而言可能是根本性的时钟和重置在CSA中是微架构的,从而例如消除了对将时钟和重置作为可编程实体来支持的需求。数据流操作器对于大多数部分可以是粗粒度的。通过仅在粗糙的操作器中进行处理,CSA的实施例改善结构的密度及其能耗两者。CSA直接执行操作而不是利用查找表来对操作进行仿真。粗糙性的第二个结果是简化了放置和路由问题。CSA数据流图比FPGA网络表小许多数量级,并且在CSA的实施例中,放置和路由时间相应减少。CSA的实施例与FPGA之间的显著区别使得CSA作为例如用于从传统编程语言产生的数据流的加速器是优越的。
5.评估
CSA是新颖的计算机架构,具有提供相对于路线图处理器的巨大的性能和能量优势。考虑对于跨阵列遍历计算单跨步地址的情况。这种情况在HPC应用(例如,其在计算地址偏移时花费大量整数工作)中可能是重要的。在地址计算、尤其是跨步地址计算中,对于每次计算,一个自变量是恒定的,并且另一个自变量仅略微变化。因此,在大多数情况下,每个周期仅少数位切换。实际上,使用与第2.7节中描述的对浮点进位位的约束类似的派生,可以显示出对于跨步计算平均而言每次计算少于两个输入位切换,从而对于随机切换分布减少50%能量。如果使用时间复用方式,则这些能量节省中的许多能量节省会丢失。在一个实施例中,CSA实现相对于核的大约3x(3倍)能效,同时获得8x(8倍)性能增益。由CSA的实施例获得的并行性增益会导致减少的程序运行时间,从而实现相应的显著的泄漏能量减少。在PE级,CSA的实施例是极其高能效的。对于CSA的第二个重要问题是CSA是否在片级小号合理量的能量。由于CSA的实施例在每个周期在结构中能够演练每一个浮点PE,引起它充当能量和功率消耗的合理上界,例如使得能量中的大部分进入浮点乘法和加法。
6.进一步的CSA细节
本节讨论配置和异常处置的进一步细节。
6.1用于配置CSA的微架构
本节公开了如何配置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位结构具有更低的成本。
图46图示根据本公开的实施例的加速器片4600,该加速器片4600包括处理元件(PE)的阵列和本地配置控制器4602、4606。每一个PE、每一个网络控制器(例如,网络数据流端点电路)和每一个切换装置可以是可配置结构元件(CFE),例如,该CFE由CSA架构的实施例配置(例如,编程)。
CSA的实施例包括提供对异构空间结构的高效、分布式、低等待时间配置的硬件。这可以根据四项技术来实现。首先,利用硬件实体(本地配置控制器(LCC)),例如,如图46-48中所示。LCC可从(例如,虚拟)存储器取出配置信息的流。其次,配置数据路径可被包括,例如,该配置数据路径与PE结构的原生宽度一样宽,并且可被叠加在PE结构的顶部上。第三,新控制信号可被接收到安排配置过程的PE结构中。第四,状态元件可位于(例如,在寄存器中)跟踪相邻CFE的状态的每一个可配置端点处,从而允许每一个CFE无需额外的控制信号来明确地自配置。这四个微架构特征可允许CSA配置其CFE的链。为了获得低的配置等待时间,可通过建立许多LCC和CFE链来对配置分区。在配置时,这些可独立地操作以便并行地加载结构,从而例如动态地降低等待时间。作为这些组合的结果,使用CSA架构的实施例配置的结构可以(例如,在几百纳秒内)被完全配置。在下文中,公开了CSA配置网络的实施例的各种组件的详细操作。
图47A-图47C图示根据本公开的实施例的配置数据路径网络的本地配置控制器4702。所描绘的网络包括多个多路复用器(例如,多路复用器4706、4708、4710),这些多路复用器可(例如,经由它们相应的控制信号)经配置以将(例如,来自PE的)一个或多个数据路径连接在一起。图47A图示为一些先前的操作或程序配置(例如,设置)的网络4700(例如,结构)。图47B图示选通配置信号的本地配置控制器4702(例如,包括用于发送和/或接收信号的网络接口电路4704),并且本地网络被设置为允许LCC将配置数据发送到所有可配置结构元件(CFE)(例如,mux)的默认配置(例如,如图中所描绘)。图47C图示LCC,该LCC跨网络选通配置信息,从而以预定的(例如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时,它们可立即开始操作。在另一实施例中,CFE等待开始操作,直到结构已被完全配置(例如,对于每一个本地配置控制器,由配置终止器(例如,图49中的配置终止器4904和配置终止器4908)用信号通知)。在一个实施例中,LCC通过发送特殊消息或驱动一信号来获得对网络结构的控制。随后,它(例如,在许多周期的时间段内)将配置数据选通到结构中的CFE。在这些附图中,多路复用器网络与在某些附图(例如,图6)中示出的“切换装置”类似。
本地配置控制器
图48图示根据本公开的实施例的(例如,本地)配置控制器4802。本地配置控制器(LCC)可以是负责以下各项的硬件实体:加载结构程序的(例如,在片的适当子集中或其他位置的)本地部分;解释这些程序部分;随后通过在各种配置线上驱动适当的协议将这些程序部分加载到结构中。在该能力方面,LCC可以是专用序列化微控制器。
当LCC操作接收到指向代码段的指针时,它可以开始。取决于LCB微架构,(例如,存储在指针寄存器4806中的)该指针要么通过(例如,来自CSA(结构)自身内的)网络要么通过存储器系统访问来到LCC。当LCC接收到此类指针时,它可任选地从用于上下文存储的结构的其部分耗尽相关状态,并随后继续进展以立即重配置该结构该LCC所负责的部分。由LCC加载的程序可以是用于结构的配置数据和用于LCC的控制命令的组合,例如,该配置数据和该控制命令被轻度编码。当LCC使程序部分流入时,它可将该程序解释为命令流,并执行适当的经编码动作以配置(例如,加载)结构。
在图46中示出用于LCC的两个不同的微架构,例如,其中之一或两者用于CSA中。第一个微架构将LCC 4602放置在存储器接口处。在这种情况下,LCC可向存储器系统做出加载数据的直接请求。在第二种情况下,LCC 4606被放置在存储器网络上,在存储器网络中,LCC4606可仅间接地向存储器作出请求。在这两种情况下,LCB的逻辑操作不改变。在一个实施例中,例如由(例如,OS可见的)控制状态寄存器的集合向LCC通知要加载的程序,该控制状态寄存器的集合将用于向各个LCC通知新程序指针等。
额外的带外控制通道(例如,线)
在某些实施例中,配置依赖于2-8个额外的带外控制通道来改善配置速度,如下文所定义。例如,配置控制器4802可包括以下控制通道:例如,CFG_START控制通道4808、CFG_VALID控制通道4810以及CFG_DONE控制通道4812,每一者的示例在以下表2中讨论
表2:控制通道
一般而言,对配置信息的处置可以被留给特定CFE的实现器。例如,可选择功能CFE可具有供应以便使用现有数据路径来设置寄存器,而固定功能CFE可简单地设置配置寄存器。
由于在对CFE的大型集合编程时的长的线延迟,因此CFG_VALID信号可视为对CFE组件的时钟/锁存启用。由于该信号被用作时钟,因此在一个实施例中,该线的占空比最多为50%。作为结果,配置吞吐量大约减半。可任选地,第二CFG_VALID信号可被添加以允许连续编程。
在一个实施例中,仅CFG_START在独立耦合装置(例如,线)上被严格地传递,例如,CFG_VALID和CFG_DONE可被叠加在其他网络耦合装置的顶部上。
网络资源的重新使用
为了减少配置的开销,CSA的某些实施例利用现有的网络基础结构来传递配置数据。LCC可利用芯片级存储器层次结构和结构级通信网络两者来将数据从存储移动到结构中。作为结果,在CSA的某些实施例中,配置基础结构向总结构面积和功率增加不多于2%。
在CSA的某些实施例中的网络资源的重新使用可使网络具有对配置机制的某种硬件支持。CSA的实施例的电路交换型网络使LCC在‘CFG_START’信号被断言时以特定的方式来设置这些电路交换型网络的多路复用器以进行配置。分组交换型网络不要求扩展,但是LCC端点(例如,配置终止器)使用分组交换型网络中的特定地址。网络重新使用是可任选的,并且一些实施例可发现专用配置总线是更方便的。
每个CFE状态
每一个CFE可维护表明它是否已经被配置的位(例如,参见图37)。当配置开始信号被驱动时,该位可被解除断言,随后,一旦特定的CFE已被配置,就断言该位。在一个配置协议中,CFE被布置成链,CFE并且配置状态位确定该链的拓扑。CFE可读取紧邻CFE的配置状态位。如果该相邻CFE被配置且当前CFE未被配置,则CFE和确定任何当前的配置数据针是对当前CFE的。当‘CFG_DONE’信号被断言时,CFE可设置其配置位,以便例如使上游CFE能够进行配置。作为配置过程的基本情况,断言其被配置的配置终止器(例如,在图46中的用于LCC4602的配置终止器4604或用于LCC 4606的配置终止器4608)可被包括在链的结尾处。
在CFE内部,该位可用于驱动流控制就绪信号。例如,当配置位被解除断言时,网络控制信号可被自动地箝位为防止数据流动的值,同时在PE内,没有操作或其他动作将被调度。
处理高延迟配置路径
LCC的一个实施例可例如通过许多多路复用器且利用许多加载以在长距离上驱动信号。因此,信号在短时钟周期内到达远端CFE可能是困难的。在某些实施例中,配置信号处于主(例如,CSA)时钟信号的某个分频(例如,分数)以确保配置时的数字时序规则。时钟分频可用于带外信令协议中,并且不要求对主时钟树的任何修改。
确保配置期间一致的结构行为
由于某些配置方案是分布式的且由于程序和存储器效应具有非确定性时序,因此结构的不同部分可在不同时间被配置。作为结果,CSA的某些实施例提供用于防止经配置以及未经配置的CFE之间的不一致操作的机制。总体而言,一致性被视为由CFE自身例如使用内部CFE状态所要求并维持的属性。例如,当CFE处于未经配置状态时,它可宣称其输入缓冲器为满,且其输出为无效。当被配置时,这些值将被设置为缓冲器的真状态。随着结构的足够的部分从配置中出来,这些技术可准许该结构开始操作。例如,如果长等待时间存储器请求在早期被发布,则这具有进一步降低上下文切换等待时间的效果。
可变宽度配置
不同的CFE可具有不同的配置字宽度。对于较小的CFE配置字,实现器可通过跨网络线公平地指派CFE配置加载来使延迟平衡。为了平衡在网络线上的加载,一个选项是将配置位指派给网络线的不同部分以限制任何一根线上的净延迟。宽数据字可通过使用串行化/解串行化技术来处置。这些决策可逐结构地采用以优化特定CSA(例如,结构)的行为。网络控制器(例如,网络控制器4610和网络控制器4612中的一个或多个)可与CSA(例如,结构)的每一个域(例如,适当子集)通信,以便例如将配置信息发送至一个或多个LCC。网络控制器可以是(例如,与电路交换型网络分开的)通信网络的部分。网络控制器可包括网络数据流端点电路。
6.2用于CSA的低等待时间配置以及用于CSA的配置数据的及时取出的微架构
CSA的实施例可以是对用户应用进行加速的高能效且高性能手段。当考虑程序(例如,程序的数据流图)是否可由加速器成功地加速时,用于配置加速器的时间以及用于运行程序的时间两者可被考虑。如果运行时间为短,则配置时间在确定成功的加速时将发挥大的作用。因此,为了使可加速程序的域最大化,在一些实施例中,使配置时间尽可能短。一个或多个配置高速缓存可被包括在CSA中,例如使得高带宽、低等待时间存储实现快速重配置。接下来是对配置高速缓存的若干实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可任选地访问配置高速缓存以获得新配置信息。配置高速缓存要么可操作为传统的基于地址的高速缓存,要么可处于OS管理的模式,在OS管理的模式中,配置被存储在本地地址空间中,并且通过参引那个地址空间被寻址。如果配置状态位于高速缓存中,则在某些实施例中,没有对后备存储的请求将被进行。在某些实施例中,该配置高速缓存与存储器层次结构中的任何(例如,较低级)共享高速缓存分开。
图49图示根据本公开的实施例的加速器片4900,该加速器片4900包括处理元件的阵列、配置高速缓存(例如,4918或4920)和本地配置控制器(例如,4902或4906)。在一个实施例中,配置高速缓存4914与本地配置控制器4902位于一起。在一个实施例中,配置高速缓存4918位于本地配置控制器4906的配置域中,例如,第一域结束于配置终止器4904,并且第二域结束于配置终止器4908。配置高速缓存可允许本地配置控制器在配置期间可参引配置高速缓存,以便例如希望以比参引存储器更低的等待时间来获得配置状态。配置高速缓存(存储)要么可以是专用的,要么可作为结构内存储元件(例如,本地高速缓存4916)的配置模式来访问。
高速缓存模式
1.需求型高速缓存(Demand Caching)-在该模式中,配置高速缓存作为真高速缓存进行操作。配置控制器发布基于地址的请求,该基于地址的请求被对照着高速缓存中的标签来校验。未命中可被加载到高速缓存中,并且随后可在未来的重新编程期间被重新参引。
2.结构内存储(暂存器)高速缓存——在该模式中,配置高速缓存接收对其自身的小地址空间而不是主机的较大的地址空间中的配置序列的参引。这可改善存储器密度,因为高速缓存的用于存储标签的部分可替代地用于存储配置。
在某些实施例中,配置高速缓存可具有(例如,通过外部指示或内部指示)被预加载到其中的配置数据。这可允许用于加载程序的等待时间的减少。本文中的某些实施例提供至配置高速缓存的结构,该接口例如即便在配置已经正在结构中运行时也准许将新配置状态加载到高速缓存中。该加载的发起可从内部或外部源发生。预加载机制的实施例通过去除来自配置路径的高速缓存加载的等待时间来进一步减小等待时间。
预取模式
1.显式预取——以新命令ConfigurationCachePrefetch(配置高速缓存预取)来扩充配置路径。与对结构编程不同,该命令简单地使相关程序配置加载到配置高速缓存中而无需对结构编程。由于该机制背负在现有的配置基础结构上,因此它既在结构内被暴露,又在例如访问存储器空间的核和其他实体外部被暴露。
2.隐式预取——全局配置控制器可维护预取预测器,并使用它来(例如,以自动化方式)发起对配置高速缓存的显式预取。
6.3用于响应于异常对CSA进行快速重配置的硬件
CSA(例如,空间结构)的某些实施例包括大量指令和配置状态,例如,该配置状态在CSA的操作期间很大程度上是静态的。因此,配置状态可能易受软错误影响。对这些软错误的快速且无错的恢复对于空间系统的长期可靠性和性能可能是关键的。
本文中的某些实施例提供快速配置恢复循环,例如,在该快速配置恢复循环中,配置错误被检测,并且结构的多个部分立即被重配置。本文中的某些实施例包括例如具有可靠性、可用性和耐用性(RAS)重编程特征的配置控制器。CSA的某些实施例包括用于在空间结构内进行高速配置、错误报告和奇偶校验的电路。使用这三个特征以及可任选的配置高速缓存的组合,配置/异常处置电路可从配置中的软错误恢复。当被检测到时,软错误可被传送到配置高速缓存,该配置高速缓存发起对结构(例如,结构的那个部分)的立即重配置。某些实施例提供专用重配置电路,例如,该专用重配置电路比将被间接地实现在结构中的任何解决方案快。在某些实施例中,位于一起的异常和配置电路协作,以便在配置错误检测时对结构重新加载。
图50图示根据本公开的实施例的加速器片5000,该加速器片5000包括处理元件的阵列以及具有重配置电路5018、5022的配置和异常处置控制器5002、5006。在一个实施例中,当PE通过其RAS特征检测到配置错误时,它通过其异常生成器将(例如,配置错误或重配置错误)消息发送到配置和异常处置控制器(例如,5002或5006)。在接收到该消息时,配置和异常处置控制器(例如,5002或5006)启动位于一起的重配置电路(例如,分别为5018或5022)以重新加载配置状态。配置微架构继续进行并(例如,仅)重新加载配置状态,并且在某些实施例中,仅重新加载用于PE的报告RAS错误的配置状态。在重配置完成后,结构可恢复正常操作。为了减少等待时间,由配置和异常处置控制器(例如,5002或5006)使用的配置状态可从配置高速缓存源送。作为配置或重配置过程的基本情况,断言其被配置(或重配置)的配置终止器(例如,图50中用于配置和异常处置控制器5002的配置终止器5004或用于配置和异常处置控制器5006的配置终止器5008)可被包括在链的结尾处。
图51图示根据本公开的实施例的重配置电路5118。重配置电路5118包括用于存储配置状态(或指向该配置状态的指针)的配置状态寄存器5120。
6.4用于对CSA进行的结构发起的重配置的硬件
针对CSA(例如,空间阵列)的应用的一些部分可被不频繁地运行,或者相对于程序的其他部分可以是互斥的。为了节约面积,为了改善性能和/或减小功率,在程序数据流图的若干不同部分之间对空间结构的多个部分进行时间复用可能是有用的。本文中的某些实施例包括接口,通过该接口,CSA(例如,经由空间程序)可请求结构的那个部分被重编程。这可使CSA能够根据动态控制流来动态地改变其自身。本文中的某些实施例可允许结构发起的重配置(例如,重编程)。本文中的某些实施例提供用于从结构内触发配置的接口的集合。在一些实施例中,PE基于程序数据流图中的某个决策发布重配置请求。该请求可行进通过网络到我们的新配置接口,在我们的新配置接口处,该请求触发重配置。一旦重配置完成,通知该完成的消息可以可任选地被返回。CSA的某些实施例因此提供程序(例如,数据流图)引导的重配置能力。
图52图示根据本公开的实施例的加速器片5200,该加速器片5200包括处理元件的阵列以及具有重配置电路5218的配置和异常处置控制器5206。在此,结构的部分将对(重)配置的请求发布至例如配置和异常处置控制器5206和/或重配置电路5218的配置域。该域(重)配置其自身,并且当请求已被满足时,配置和异常处置控制器5206和/或重配置电路5218将响应发布至结构,以向该结构通知(重)配置完成。在一个实施例中,配置和异常处置控制器5206和/或重配置电路5218在(重)配置正在进行期间禁用通信,因此在操作期间,程序没有一致性问题。
配置模式
通过地址配置——在该模式中,结构做出从特定地址加载配置数据的直接请求。
通过参引配置——在该模式中,结构例如通过预定义的参引ID做出加载新配置的请求。这可简化对要加载的代码的确定,因为该代码的位置已被抽象。
配置多个域
CSA可包括较高级配置控制器以支持多播机制,从而(例如,经由虚线框所指示的网络)将配置请求播到多个(例如,分布式或本地)配置控制器。这可使单个配置请求跨结构的多个较大部分被复制,从而例如触发宽的重配置。
6.5异常聚合器
CSA的某些实施例也会经历异常(例如,异常条件),例如,浮点下溢(underflow)。当这些条件发生时,特殊的处置程序可被调用,以便要么修正程序,要么终止该程序。本文中的某些实施例提供用于在空间结构中处置异常的系统级架构。由于某些空间结构强调面积效率,本文中的实施例在提供通用异常机制的同时使总面积最小化。本文中的某些实施例提供用信号通知发生在CSA(例如,空间阵列)中的异常条件的低面积手段。本文中的某些实施例提供用于传递此类异常以及PE级异常语义的接口和信令协议。本文中的某些实施例是专用异常处置能力,并且例如不要求由编程者进行的显式处置。
CSA异常架构的一个实施例由四个部分组成,例如在图53-图54中示出。这些部分可被布置在层次结构中,在该层次结构中,异常从产生方流出,并最终向上流到片级异常聚合器(例如,处置程序),该片级异常聚合器可与例如核的异常维护器会和。这四个部分可以是:
1.PE异常生成器
2.本地异常网络
3.夹层异常聚合器
4.片级异常聚合器
图53图示根据本公开的实施例的加速器片5300,该加速器片5300包括处理元件的阵列以及耦合至片级异常聚合器5304的夹层异常聚合器5302。图54示出根据本公开的实施例的具有异常生成器5444的处理元件5400。
PE异常生成器
处理元件5400可包括来自图9的处理元件900,例如,类似的编号是类似的组件,例如,本地网络902和本地网络5402。附加的网络5413(例如,通道)可以是异常网络。PE可实现至异常网络(例如,图54上的异常网络5413(例如,通道))的接口。例如,图54图示此类接口的微架构,其中,PE具有异常生成器5444(例如,发起异常有限状态机(FSM)5440以将异常分组(例如,BOXID 5442)向外选通到异常网络上)。BOXID 5442可以是用于本地异常网络内的异常产生实体(例如,PE或块)的唯一标识符。当异常被检测时,异常生成器5444感测异常网络,并且当发现网络是空闲的时向外选通BOXID。异常可由许多条件导致,这些条件例如但不限于算术错误、对状态的失败的ECC校验等,然而,情况也可能是这样:利用支持像断点这样的构造的想法,引入异常数据流操作。
异常的发起可以要么通过编程者提供的指令显式地发生,要么当强化的错误条件(例如,浮点下溢)被检测到时隐式地发生。在异常发生时,PE 5400可进入等待状态,在该等待状态中,PE 5400等待由例如该PE5400外部的最终异常处置程序来维护。异常分组的内容取决于特定PE的实现方式,如下文所述。
本地异常网络
(例如,本地)异常网络将异常分组从PE 5400引导至夹层异常网络。异常网络(例如,5413)可以是串行分组交换型网络,该串行分组交换型网络由例如以例如用于PE的适当子集的环形或树形拓扑组织的(例如,单个控制线)和一个或多个数据线组成。每一个PE在(例如,本地)异常网络中可具有(例如,环形)站,例如,在该站处,PE可仲裁以将消息注入到异常网络中。
需要注入异常分组的PE端点可观察它们的本地异常网络出口点。如果控制信号指示忙碌,则PE将等待开始注入该PE的分组。如果网络不繁忙,即,下游站没有分组要转发,则PE将继续开始注入。
网络分组可以具有可变或固定长度。每一个分组能以标识该分组的源PE的固定长度的头部字段开始。该头部字段随后可以是包含信息的可变数量的PE特定的字段,这些信息例如包括错误代码、数据值或其他有用的状态信息。
夹层异常聚合器
夹层异常聚合器5304负责将本地异常网络组装为较大的分组,并且将这些较大的分组发送到片级异常聚合器5302。夹层异常聚合器5304可利用本地异常分组自身的唯一ID来预先考虑该本地异常分组,从而例如确保异常消息是明确的。夹层异常聚合器5304可对接至夹层网络中的特殊的仅用于异常的虚拟通道,从而例如确保异常无死锁。
夹层异常聚合器5304也可能能够直接维护异常的某些类别。例如,使用在夹层网络站本地的高速缓冲,来自结构的配置请求可从夹层网络向外分发。
片级异常聚合器
异常系统的最终级是片级异常聚合器5302。片级异常聚合器5302负责从各种夹层级异常聚合器(例如,5304)收集异常,并将这些异常转发到适当的维护硬件(例如,核)。由此,片级异常聚合器5302可包括一些用于将特定的消息与处置程序例程相关联的内部表和控制器。这些表可被直接索引或能以小型状态机进行索引,从而引导特定的异常。
像夹层异常聚合器那样,片级异常聚合器可维护一些异常请求。例如,它可以响应于特定的异常而发起对PE结构的大部分的重新编程。
6.6提取控制器
CSA的某些实施例包括用于从结构提取数据的(多个)提取控制器。下文讨论如何快速实现该提取以及如何使数据提取的资源开销最小化的实施例。数据提取可用于诸如异常处置和上下文切换之类的关键任务。本文中的某些实施例通过引入允许具有可变以及动态可变数量的要提取的状态的可提取结构元件(EFE)(例如,PE、网络控制器和/或切换装置)的特征来从异构空间结构提取数据。
CSA的实施例包括分布式数据提取协议和微架构来支持此协议。CSA的某些实施例包括多个本地提取控制器(LEC),这些LEC使用控制信号的(例如,小)集合和结构提供的网络的组合来使程序数据从它们在空间结构中的本地区域中流出。状态元件可在每一个可提取结构元件(EFE)处被使用以形成提取链,从而例如允许各个EFE自提取而无需全局寻址。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例包括例如用于形成提取链的特定硬件支持(例如,提取控制器),并且不依赖于软件(例如,以增加提取时间为代价)动态地建立这些链。CSA的实施例不纯粹是分组交换型的,并且确实包括额外的带外控制线(例如,控制不通过数据路径被发送,从而要求额外的周期来选通此信息并使该信息重新串行化)CSA的实施例通过固定提取排序并通过提供显式的带外控制来减小提取等待时间(例如,减小至少一半),同时不显著地增加网络复杂度。
CSA的实施例不将串行机制用于其中使用类JTAG协议从结构逐位地流送数据的数据提取。CSA的实施例利用粗粒度结构方式。在某些实施例中,将一些控制线或状态元件加到面向64位或32位的CSA结构相对于将那些相同的控制机制加到4位或6位结构具有更低的成本。
图55图示根据本公开的实施例的加速器片5500,该加速器片5500包括处理元件的阵列和本地提取控制器5502、5506。每一个PE、每一个网络控制器和每一个切换装置可以是可提取结构元件(EFE),例如,该EFE由CSA架构的实施例配置(例如,编程)。
CSA的实施例包括提供对异构空间结构的高效、分布式、低等待时间提取的硬件。这可以根据四项技术来实现。首先,利用硬件实体(本地提取控制器(LEC)),例如,如图55-57中所示。LEC可接受来自主机(例如,处理器核)的命令,例如从空间阵列提取数据流,并将该数据往回写入到虚拟存储器供由该主机检查。其次,提取数据路径可被包括,例如,该提取数据路径与PE结构的原生宽度一样宽,并且可被叠加在PE结构的顶部上。第三,新控制信号可被接收到安排提取过程的PE结构中。第四,状态元件可位于(例如,在寄存器中)跟踪相邻EFE的状态的每一个可配置端点处,从而允许每一个EFE无需额外的控制信号来明确地输出其状态。这四个微架构特征可允许CSA从EFE的链提取数据。为了获得低的数据提取等待时间,某些实施例可通过将多个(例如,许多)LEC和EFE链包括在结构中来将提取问题分区。在提取时,这些链可独立地操作以便并行地从结构提取数据,从而例如动态地降低等待时间。作为这些组合的结果,CSA可(例如,在几百纳秒内)执行完整的状态转储。
图56A-图56C图示根据本公开的实施例的配置数据路径网络的本地提取控制器5602。所描绘的网络包括多个多路复用器(例如,多路复用器5606、5608、5610),这些多路复用器可(例如,经由它们相应的控制信号)经配置以将(例如,来自PE的)一个或多个数据路径连接在一起。图56A图示为一些先前的操作程序配置(例如,设置)的网络5600(例如,结构)。图56B图示选通提取信号的本地提取控制器5602(例如,包括用于发送和/或接收信号的网络接口电路5604),并且由LEC控制的所有PE进入提取模式。提取链中的最后一个PE(或提取终止器)可主控提取通道(例如,总线),并且根据(1)来自LEC的信号或(2)内部(例如,从PE)产生的信号发送数据。一旦被完成,PE可设置其完成标记,,从而例如使下一个PE能够提取其数据。图56C图示最远的PE已完成提取过程,并且作为结果,该最远的PE已设置其一个或多个提取状态位,例如,该一个或多个提取状态位使mux摇摆到相邻网络以使下一个PE能够开始提取过程。被提取的PE可恢复正常操作。在一些实施例中,PE可保持禁用,直到其他动作被采取。在这些附图中,多路复用器网络与在某些附图(例如,图6)中示出的“切换装置”类似。
下一节描述提取网络的实施例的各种组件的操作。
本地提取控制器
图57图示根据本公开的实施例的提取控制器5702。本地提取控制器(LEC)可以是负责接受提取命令、协调EFE的提取过程和/或将被提取数据存储到例如虚拟存储器的硬件实体。在该能力方面,LEC可以是专用序列化微控制器。
当LEC接收到指向结构状态将被写入的缓冲器(例如,在虚拟存储器中)的指针以及可任选地接收到控制结构中的多少将被提取的命令时,LEC操作可以开始。取决于LEC微架构,(例如,存储在指针寄存器5704中的)该指针可以要么通过网络要么通过存储器系统访问来到LEC。当LEC接收到此类指针(例如,命令)时,它继续从结构中它所负责的部分提取状态。LEC可将该被提取的数据流送出结构而流送到由外部调用器提供的缓冲器中。
在图55中示出用于LEC的两种不同的微架构。第一个将LEC5502放置在存储器接口处。在这种情况下,LEC可向存储器系统做出写入被提取的数据的直接请求。在第二种情况下,LEC 5506被放置在存储器网络上,在存储器网络中,LCC 5506可仅间接地向存储器作出请求。在这两种情况下,LEC的逻辑操作可以不改变。在一个实施例中,例如由(例如,OS可见的)控制状态寄存器的集合向LEC通知要从结构提取数据的期望,该控制状态寄存器的集合将用于向各个LEC通知新命令。
额外的带外控制通道(例如,线)
在某些实施例中,提取依赖于2-8个额外的带外信号来改善配置速度,如下文所定义。由LEC驱动的信号可被标记为LEC。由EFE(例如,PE)驱动的信号可被标记为EFE。配置控制器5702可包括以下控制通道,例如,LEC_EXTRACT控制通道5806、LEC_START控制通道5708、LEC_STROBE控制通道5710和EFE_COMPLETE控制通道5712,每一者的示例在以下表3中讨论。
表3:提取通道
一般而言,对提取的处置可以被留给特定EFE的实现器。例如,可选择功能EFE可具有供应以便使用现有数据路径来转储寄存器,而固定功能EFE可简单地具有多路复用器。
由于在对EFE的大型集合编程时的长的线延迟,因此LEC_STROBE信号可视为对EFE组件的时钟/锁存启用。由于该信号被用作时钟,因此在一个实施例中,该线的占空比最多为50%。作为结果,提取吞吐量大约减半。可任选地,第二LEC_STROBE信号可被添加以实现连续提取。
在一个实施例中,仅LEC_START在独立耦合装置(例如,线)上被严格地传递,例如,其他控制通道可被叠加在现有网络(例如,线)上。
网络资源的重新使用
为了减少数据提取的开销,CSA的某些实施例利用现有的网络基础结构来传递提取数据。LEC可利用芯片级存储器层次结构和结构级通信网络两者来将数据从结构移动到存储中。作为结果,在CSA的某些实施例中,提取基础结构向总结构面积和功率增加不多于2%。
在CSA的某些实施例中的网络资源的重新使用可使网络具有对提取协议的某种硬件支持。电路交换型网络要求CSA的某些实施例使LEC在“LEC_START”信号被断言时以特定的方式来设置这些电路交换型网络的多路复用器以进行配置。分组交换型网络可不要求扩展,但是LEC端点(例如,提取终止器)使用分组交换型网络中的特定地址。网络重新使用是可任选的,并且一些实施例可发现专用配置总线是更方便的。
每个EFE状态
每一个EFE可维护表明它是否已输出其状态的位。当提取开始信号被驱动时,该位可被解除断言,随后,一旦特定的EFE已完成提取,就断言该位。在一个提取协议中,EFE被布置成以形成链,并且EFE提取状态位确定该链的拓扑。EFE可读取紧邻EFE的提取状态位。如果该相邻的EFE已使其提取位被设置并且当前的EFE没有使其提取位被设置,则该EFE可确定它拥有提取总线。当EFE转储其最后的数据值时,它可驱动“EFE_DONE”信号并设置其提取位,从而例如使上游EFE能够配置用于提取。相邻于该EFE的网络可观察该信号,并且也调整其状态以处置该转变。作为提取过程的基本情况,断言提取完成的提取终止器(例如,在图46中的用于LEC 5502的提取终止器5504或用于LEC 5506的提取终止器5508)可被包括在链的结尾处。
在EFE内部,该位可用于驱动流控制就绪信号。例如,当提取位被解除断言时,网络控制信号可被自动地箝位为防止数据流动的值,同时在PE内,没有操作或动作将被调度。
处理高延迟路径
LEC的一个实施例可例如通过许多多路复用器且利用许多加载以在长距离上驱动信号。因此,信号在短时钟周期内到达远端EFE可能是困难的。在某些实施例中,提取信号处于主(例如,CSA)时钟信号的某个分频(例如,分数)以确保提取时的数字时序规则。时钟分频可用于带外信令协议中,并且不要求对主时钟树的任何修改。
确保提取期间一致的结构行为
由于某些提取方案是分布式的且由于程序和存储器效应具有非确定性时序,因此结构的不同成员可在不同时间处于提取状态。当LEC_EXTRACT被驱动时,所有网络流控制信号可被驱动为逻辑低,例如,由此冻结结构的特定段的操作。
提取过程可以是非破坏性的。因此,一旦提取已完成,PE的集合可认为是运行的。对提取协议的扩展可允许PE在提取后可任选地被禁用。或者,在实施例中,在提取过程期间开始配置将具有类似效果。
单个PE提取
在一些情况下,提取单个PE可能是权宜之计。在该情况下,作为提取过程的开始的部分,可任选的地址信号可被驱动。这可使该PE针对将被直接启用的提取。一旦该PE已被提取,提取过程就伴随着LEC_EXTRACT信号的降低而终止。以此方式,单个PE可例如由本地提取控制器选择性地提取。
处置提取回压
在其中LEC将被提取的数据写入到存储器(例如,对于后处理,例如,在软件中)的实施例中,它可能受制于有限的存储器带宽。在LEC耗尽其缓冲容量或预期它将耗尽其缓冲容量的情况下,该LEC可停止选通LEC_STROBE,直到缓冲问题已被解决。
注意,在某些附图(例如,图46、49、50、52、53和55中),示意性地示出通信。在某些实施例中,那些通信可通过(例如,互连)网络发生。
6.7流程图
图58图示根据本公开的实施例的流程图5800。所描绘的流程5800包括:5802:利用处理器的核的解码器将指令解码为经解码指令;5804:利用处理器的核的执行单元执行经解码指令以执行第一操作;5806:接收包括多个节点的数据流图的输入;5808:将数据流图叠加到处理器的处理元件的阵列中,并且每一个节点被表示为处理元件的阵列中的数据流操作器;以及5810:当传入操作数集到达处理元件的阵列处时,利用处理元件的阵列执行数据流图的第二操作。
图59图示根据本公开的实施例的流程图5900。所描绘的流程5900包括:5902:利用处理器的核的解码器将指令解码为经解码指令;5904:利用处理器的核的执行单元执行经解码指令以执行第一操作;5906:接收包括多个节点的数据流图的输入;5908:将数据流图叠加到处理器的多个处理元件以及处理器的多个处理元件之间的互连网络中,并且每一个节点被表示为多个处理元件中的数据流操作器;以及5910:当传入操作数集到达多个处理元件时,利用互连网络和多个处理元件执行数据流图的第二操作。
6.8存储器
图60A是根据本公开的实施例的系统6000的框图,该系统6000采用插入在存储器子系统6010与加速硬件6002之间的存储器排序电路6005。存储器子系统6010可包括已知的存储器组件,包括与基于处理器的架构相关联的高速缓存、存储器以及一个或多个存储器控制器。加速硬件6002可以是由通过处理元件(PE)间网络或另一类型的组件间网络连接的轻量型处理元件(或其他类型的处理组件)组成的粗粒度空间架构。
在一个实施例中,被视为控制数据流图的程序可通过配置PE和通信网络而被映射到空间架构上。一般而言,PE被配置为数据流操作器,类似于处理器中的功能单元:一旦输入操作数到达PE,某个操作发生,并且结果被以流水线形式转发到下游PE。数据流操作器(或其他类型的操作器)可选择逐操作器地消耗传入数据。简单操作器(像处置算术表达式的无条件求值的那些操作)常消耗所有传入数据。然而,有时操作器维持状态(例如,在累加中)是有用的。
PE使用专用虚拟电路进行通信,该专用虚拟电路通过静态地配置电路交换型通信网络而形成。这些虚拟电路是流受控且完全被回压(back pressure)的,使得如果源没有数据或目的地为满,则PE将停止。在运行时,根据数据流图实现映射算法的通过PE的数据流在本文中也被称为子程序。例如,数据可从存储器通过加速硬件6002而流入,随后向外回到存储器。此类架构相对于传统多核处理器可实现卓越的性能效率:与扩展存储器子系统6010相反,以PE形式计算比较大的核更简单且更多,并且通信是直接的。然而,存储器系统并行性帮助支持并行PE计算。如果存储器访问被串行化,则高并行性可能不可实现。为了促进存储器访问的并行性,所公开的存储器排序电路6005包括如将详细解释的存储器排序架构和微架构。在一个实施例中,存储器排序电路6005是请求地址文件电路(或“RAF”)或其他存储器请求电路。
图60B是根据本公开的实施例的图60A中的系统6000的框图,但是该系统6000采用多个存储器排序电路6005。每一个存储器排序电路6005可充当存储器子系统6010与加速硬件6002(例如,处理元件或片的空间阵列)的部分之间的接口。存储器子系统6010可包括多个高速缓存片12(例如,在图60B的实施例中,高速缓存片12A、12B、12C和12D)以及某个数量的(在该实施例中为四个)存储器排序电路6005可用于每个高速缓存片12。交叉开关6004(例如,RAF电路)可将存储器排序电路6005连接至构成每一个高速缓存片12A、12B、12C和12D的高速缓存的区块。例如,在一个实施例中,每一个高速缓存片中可以有八个存储器的区块。系统6000可实例化在单个管芯上,例如,实例化为芯片上系统(SoC)。在一个实施例中,SoC包括加速硬件6002。在替代实施例中,加速硬件6002是外部可编程芯片(诸如,FPGA或CGRA),并且存储器排序电路6005通过输入/输出中枢等与加速硬件6002对接。
每一个存储器排序电路6005可将读取和写入请求接受到存储器子系统6010。来自加速硬件6002的请求到达用于发起读取或写入访问(在本文中也称为加载或存储访问)的数据流图的每一个节点的分开的通道中的存储器排序电路6005。也提供缓冲,使得对加载的处理将会将被请求的数据按其被请求的顺序返回到加速硬件6002。换言之,迭代六的数据在迭代七的数据之前被返回,以此类推。此外,注意从存储器排序电路6005到特定高速缓冲区块的请求通道可实现为经排序通道,并且在第二请求之前离开的任何第一请求将在该第二请求之前到达高速缓存区块。
图61是图示根据本公开的实施例的进入加速硬件6002以及离开加速硬件6002的存储器操作的一般运行的框图6100。在加速硬件6002的顶部外发生的操作被理解为去往以及离开存储器子系统6010的存储器而进行。注意,作出两个加载请求,随后是对应的加载响应。当加速硬件6002执行对来自加载响应的数据的处理时,第三加载请求和响应发生,这触发附加的加速硬件处理。随后,加速硬件对这三个加载操作的处理的结果被传递到存储操作,因此,最终结果被往回存储到存储器。
通过考虑该操作序列,空间阵列更自然地映射至通道可以是明显的。此外,加速硬件6002在请求和响应通道以及可能发生的固有并行处理方面是等待时间不敏感的。当与存储器的对接发生在与由加速硬件6002进行的多个处理步骤分开的离散时刻时,加速硬件也可将对程序的执行从存储器子系统6010的实现方式(图60A)解耦。例如,对存储器的加载请求以及来自于存储器的加载响应是分开的动作,并且在不同情况下取决于存储器操作的依赖流能以不同方式被调度。将空间结构用于例如处理指令促进了对此类加载请求和加载响应的空间分离和分布。
图62是图示根据本公开的实施例的存储操作6201的空间依赖性流的框图6200。参照存储操作是示例性的,因为相同的流可应用于加载操作(但是没有传入数据),或者可应用于其他操作符(诸如,围栏)。围栏是用于存储器子系统的、确保一类型的所有在先存储器操作(诸如,所有存储或所有加载)已完成的排序操作。存储操作6201可接收从加速硬件6002接收的(存储器的)地址6202和数据6204。存储操作6201还可接收传入依赖性令牌6208,并且响应于这三项的可用性,存储操作6201可生成传出依赖性令牌6212。传入依赖性令牌(其可以例如是程序的初始依赖性令牌)可在程序的编译器供应的配置中提供,或者可通过执行存储器映射的输入/输出(I/O)来提供。替代地,如果程序已经运行,则传入依赖性令牌6208可从加速硬件6002接收,例如,与存储操作6201所依赖的在先存储器操作相关联。传出依赖性令牌6212可基于正由程序后续的存储器操作要求的地址6202和数据6204来生成。
图63是根据本公开的实施例的图60A中的存储器排序电路6005的详细框图。存储器排序电路6005可耦合至乱序存储器子系统6010,如所讨论的,乱序存储器子系统6010可包括高速缓存12和存储器18以及(多个)相关联的乱序存储器控制器。存储器排序电路6005可包括或可耦合至通信网络接口20,该通信网络接口20可以是片间网络接口或片内(intra-tile)网络接口,并且可以是电路交换型网络接口(如图所示),且因此包括电路交换型互连。替代地或附加地,通信网络接口20可包括分组交换型互连。
存储器排序电路6005可进一步包括但不限于存储器接口6310、操作队列6312、(多个)输入队列6316、完成队列6320、操作配置数据结构6324以及操作管理器电路6330,该操作管理器电路6330可进一步包括调度器电路6332和执行电路6334。在一个实施例中,存储器接口6310可以是电路交换型的,在另一实施例中,存储器接口6310可以是分组交换型的,或者这两者可同时存在。操作队列6312可对正为请求进行处理并因此可对应于进入输入队列6316的地址和数据的(具有对应自变量的)存储器操作进行缓冲。
更具体地,输入队列6316可以是至少以下各项的聚合:加载地址队列、存储地址队列、存储数据队列以及依赖性队列。当将输入队列6316实现为被聚合时,存储器排序电路6005可提供对逻辑队列的共享,并且附加的控制逻辑用于在逻辑上将队列分开,这些队列是存储器排序电路的各个通道。这可使输入队列的使用最大化,但是也会要求附加的复杂度和空间供逻辑电路管理被聚合队列的逻辑分离。替代地,如将参照图64所讨论,输入队列6316能以分离方式来实现,其中每一个输入队列具有分开的硬件逻辑。无论是聚合的(图63)还是非聚合的(图64),为本公开目的的实现方式基本上相同,前者使用附加的逻辑来从逻辑上将单个共享硬件队列中的队列分开。
当被共享时,输出队列6316和完成队列6320可实现为固定大小的环形缓冲器。环形缓冲器是具有先入先出(FIFO)数据特性的循环队列的高效实现方式。因此,这些队列可实施存储器操作正被请求所针对的程序的语义顺序。在一个实施例中,(诸如,用于存储地址队列的)环形缓冲器可具有与以相同速率流过相关联的队列(诸如,存储数据队列或依赖性队列)的条目相对应的条目。以此方式,存储地址可保持与对应的存储数据相关联。
更具体地,加载地址队列可对存储器18从中检索数据的传入地址进行缓冲。存储地址队列可对将会向其写入数据的存储器18的传入地址进行缓冲,该数据被缓冲在存储数据队列中。依赖性队列可对与加载地址队列和存储地址队列的地址相关联的依赖性令牌进行缓冲。表示分开的通道的每一个队列能以固定或动态数量的条目来实现。当为固定数量时,越多的条目可用,就可进行越高效的复杂循环处理。但是,具有过多条目花费了要实现的更多面积和能量。在一些情况下(例如,对于聚合式架构),所公开的输入队列6316可共享队列槽。对队列中的槽的使用可静态地分配。
完成队列6320可以是用于响应于由加载操作发布的存储器命令而对从存储器接收的数据进行缓冲的分开的队列集。完成队列6320可用于保存已被调度但用于其的数据还未被接收到的(且因此还未完成)加载操作。因此,完成队列6320可用于对数据和操作流重排序。
操作管理器电路6330(将参照图64至图28更详细地解释)可提供逻辑以用于当将用于提供存储器操作的正确排序的依赖性令牌考虑在内时调度并执行经排队的存储器操作。操作管理器6330可访问操作配置数据结构6324以确定哪些队列被分组在一起来形成给定的存储器操作。例如,操作配置数据结构6324可包括特定的依赖性计数器(或队列)、输入队列、输出队列和完成队列全都分组在一起用于特定的存储器操作。由于每一个连续的存储器操作可被指派不同的队列组,因此对不同队列的访问会跨存储器操作的子程序而交织。知晓所有这些队列,操作管理器电路6330可与操作队列6312、(多个)输入队列6316、(多个)完成队列6320和存储器子系统6010对接,以便最初当连续的存储器操作变得“可执行”时将存储器操作发布至存储器子系统6010,并随后完成具有来自存储器子系统的某个确收的存储器操作。该确收可例如是响应于加载操作命令的数据或对响应于存储操作命令而被存储在存储器中的数据的确收。
图64是根据本公开的实施例的图60A中的存储器排序电路6005的微架构6400的流程图。存储器子系统6010可允许由于C语言(以及其他面向对象的程序语言)的语义而对其中存储器操作的排序是错误的程序的非法执行。微架构6400可实施存储器操作(从存储器加载以及向存储器存储的序列)的排序,使得加速硬件6002执行的指令的结果被适当地排序。图示许多本地网络50以表示加速硬件6002中耦合至微架构6400的部分。
从架构的视角看,至少具有两个目的:首先,为了正确地运行总体上顺序的代码;其次,为了在由微架构6400执行的存储器操作中获得高性能。为了确保程序正确性,编译器以某种方式将存储操作与加载操作之间的依赖性表达为阵列p,这将通过将进行解释的依赖性令牌来表达。为了改善性能,微架构6400发现并且并行地发布相对于程序顺序合法的尽可能多的阵列的加载命令。
在一个实施例中,微架构6400可包括上文中参照图63所讨论的操作队列6312、输入队列6316、完成队列6320和操作管理器电路6330,其中各个队列可称为通道。微架构6400可进一步包括多个依赖性令牌计数器6414(例如,每个输入队列一个)、依赖性队列6418的集合(例如,每个输入队列一个)、地址多路复用器6432、存储数据多路复用器6434、完成队列索引多路复用器6436以及加载数据多路复用器6438。在一个实施例中,操作管理器电路6330可指示这些不同的多路复用器生成(将发送至存储器子系统6010)的存储器命令6450以及从存储器子系统6010往回接收加载命令的响应,如将要解释的那样。
如提及的那样,输入队列6316可包括加载地址队列6422、存储地址队列6424和存储数据队列6426。(小标数字0、1、2是通道标记,并且稍后将在图67和图70A中被引用。)在各种实施例中,这些输入队列可增殖以包含附加通道,从而处理存储器操作处理的附加的并行性。每一个依赖性队列6418可与输入队列6316中的一个相关联。更具体地,标记为B0的依赖性队列6418可与加载地址队列6422相关联,并且标记为B1的依赖性队列可与存储地址队列6424相关联。如果提供了输入队列6316的附加通道,则依赖性队列6418可包括附加的对应通道。
在一个实施例中,完成队列6320可包括输出缓冲器6444和6446的集合,用于从存储器子系统6010和完成队列6442接收加载数据以便对地址和数据进行缓冲而根据由操作管理器电路6330维护的索引进行加载操作。操作管理器电路6330可管理索引以确保加载操作的有序执行,并标识被接收到输出缓冲器6444和6446中的、可被移动到完成队列6442中的经调度的加载操作的数据。
更具体地,由于存储器子系统6010是乱序的,但是加速硬件6002有序地完成操作,因此微架构6400可利用完成队列6442对存储器操作重排序。可相对于完成队列6442执行三个不同的子操作,即,分配、入列和出列。为了进行分配,操作管理器电路6330可将索引分配到完成队列6442中的完成队列的按顺序的下一个槽中。操作管理器电路可将此索引提供给存储器子系统6010,存储器子系统6010随后可知晓将用于加载操作的数据写入到其中的槽。为了入列,存储器子系统6010可将数据作为条目写入完成队列6442(像随机存取存储器(RAM))中的经索引的按顺序的下一个槽,从而将该条目的状态位置位为有效。为了出列,操作管理器电路6330可呈现存储在该按顺序的下一个槽中的数据以完成加载操作,从而将该条目的状态位置位为无效。无效条目随后可用于新的分配。
在一个实施例中,状态信号6348可以指输入队列6316、完成队列6320、依赖性队列6418和依赖性令牌计数器6414的状态。这些状态例如可包括输入状态、输出状态和控制状态,控制状态可以指与输入或输出相关联的依赖性令牌的存在或缺失。输入状态可包括地址的存在或缺失,而输出状态可包括存储值和可用的完成缓冲器槽的存在或缺失。依赖性令牌计数器6414可以是队列的紧凑表示,并且可跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器6414饱和,则没有附加的依赖性令牌可被生成用于新的存储器操作。相应地,存储器排序电路6005会停止调度新存储器操作,直到依赖性令牌计数器6414变成不饱和。
再参照图65,图65是根据本公开的实施例的可执行确定器电路6500的框图。存储器排序电路6005能以若干不同种类的存储器操作(例如,加载和存储)来建立:
ldNo[d,x]result.outN,addr.in64,order.in0,order.out0
stNo[d,x]addr.in64,data.inN,order.in0,order.out0
可执行确定器电路6500可集成为调度器电路6332的部分,并且其可执行逻辑操作以确定给定的存储器操作是否是可执行的以及是否因此准备好被发布至存储器。当对应于队列的存储器自变量的队列具有数据且相关联的依赖性令牌存在时,可执行存储器操作。这些存储器自变量可包括例如(指示输入队列6316的通道的)输入队列标识符6510、(指示完成队列6320的通道的)输出队列标识符6520、依赖性队列标识符6530(例如,应当参考什么依赖性队列或计数器)和操作类型指示符6540(例如,加载操作或存储操作)。
这些存储器自变量可在操作队列6312内被排队,并且用于对与来自存储器和加速硬件6002的传入地址和数据相关联的存储器操作的发布进行调度。(参见图66。)传入状态信号6348可与这些标识符逻辑地组合,随后结果可(例如,通过”与”门6550)相加以输出可执行信号,例如,当存储器操作为可执行时,该可执行信号被断言。传入状态信号6348可包括用于输入队列标识符6510的输入状态6512、用于输出队列标识符6520的输出状态6522以及用于依赖性队列标识符6530的控制状态6532(与依赖性令牌相关)。(例如,存储器请求的)字段可例如被包括在上述格式中,上述格式存储用于指示来使用危险检测硬件的一个或多个位。
为了进行加载操作,作为示例,当加载操作具有用于对完成队列6442中的加载结果(输出状态)进行缓冲的地址(输入状态)和空间时,存储器排序电路6005可发布加载命令。类似地,当存储操作既具有地址又具有数据值(输入状态)时,存储器排序电路6005可发布用于存储操作的存储命令。相应地,状态信号6348可传递这些状态信号所涉及的队列的空(或满)等级。随后,操作类型可取决于什么地址和数据应当可用以表明逻辑是否产生可执行信号。
为了实现依赖性排序,调度器电路6332可扩展存储器操作以包括在示例加载和存储操作中的上述划线的依赖性令牌。控制状态6532可指示依赖性令牌在由依赖性队列标识符6530标识的依赖性队列内是否可用,该依赖性队列可以是依赖性队列6418(对于传入存储器操作)或依赖性令牌计数器6414(对于完成的存储器操作)中的一个。在此构想下,依赖性存储器操作在该存储器操作完成时要求附加的排序令牌来执行并生成附加的排序令牌,其中,完成意味着来自存储器操作的结果的数据已变得可用于程序后续的存储器操作。
在一个实施例中,进一步参照图64,取决于当前正在调度加载操作还是存储操作供执行,操作管理器电路6330可指示地址多路复用器6432选择在加载地址队列6422或存储地址队列6424中被缓冲的地址自变量。如果它是存储操作,则操作管理器电路6330也可指示存储数据多路复用器6434从存储数据队列6426选择对应数据。操作管理器电路6330也可指示完成队列索引多路复用器6436检索完成队列6320内的根据队列状态和/或程序顺序经索引的加载操作条目,从而完成加载操作。操作管理器电路6330也可指示加载数据多路复用器6438将从存储器子系统6010接收的数据选到完成队列6320中,用于正等待完成的加载操作。以此方式,操作管理器电路6330可指示对着手形成存储器命令6450(例如,加载命令或存储命令)或执行电路6334正等待的用于完成存储器操作的输入的选择。
图66是根据本公开的一个实施例的执行电路6334的框图,该执行电路6334可包括优先级编码器6606、选择电路6608,该选择电路6608生成(多个)输出控制线6610。在一个实施例中,执行电路6334可访问已确定为可执行的(图65)(操作队列6312中的)经排队的存储器操作。执行电路6334也可接收调度6604A、6604B、6604C,这些调度6604A、6604B、6604C用于已排好队且也指示为准备好发布至存储器的多个经排队的存储器操作。优先级编码器6606因此可接收已经被调度的可执行存储器操作的标识,并且执行某些规则(或遵循特定逻辑)以从进入的具有要首先被执行的优先级的那些存储器操作中选择存储器操作。优先级编码器6606可输出选择器信号6607,该选择器信号6607标识具有最高优先级且因此已被选择的经调度的存储器操作。
优先级编码器6606例如可以是将多个二进制输入压缩为较少数量的输出(包括可能仅是一个输出)的电路(诸如,状态机或更简单的转换器)。优先级编码器的输出是从最高有效输出位的零开始的原始号码的二进制表示。因此,在一个实施例中,当存储器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)是可执行的且被调度时,分别对应于6604A、6604B和6604C。优先级编码器6606可配置成用于将选择器信号6607输出至选择电路6608,该选择器信号6607将存储器操作零指示为具有最高优先级的存储器操作。在一个实施例中,选择电路6608可以是多路复用器,并且可配置成用于响应于来自优先级编码器6606的选择器信号(且指示对最高优先级的存储器操作的选择)将其(例如,对存储器操作零的)选择输出到控制线6610上作为控制信号。该控制信号可去往如参照图64所讨论的多路复用器6432、6434、6436和/或6438以填充下一个将发布(被发送)到存储器子系统6010的存储器命令6450。存储器命令的传输可理解为向存储器子系统6010发布存储器操作。
图67是根据本公开的实施例的逻辑和二进制两种形式的示例性加载操作6700的框图。往回参照图65,加载操作6700的逻辑表示可包括作为输入队列标识符6510的(对应于加载地址队列6422的)通道零(“0”)以及作为输出队列标识符6520的(对应于输出缓冲器6444的)完成通道一(“1”)。依赖性队列标识符6530可包括两个标识符:用于传入依赖性令牌的(对应于依赖性队列6418中的第一个的)通道B0以及用于传出依赖性令牌的计数器C0。操作类型6540具有“加载”指示(其也可以是数值指示符)以指示存储器操作是加载操作。在逻辑存储器操作的逻辑表示下方的是出于示例性目的的二进制表示,例如其中加载由“00”来指示。图67中的加载操作可被扩展以包括其他配置,诸如,存储操作(图69A)或其他类型的存储器操作(诸如,围栏)。
出于解释的目的,参照图68A-68B、69A-69B和70A-70G,将利用简化的示例来说明由存储器排序电路6005进行的存储器排序的示例。对于此示例,以下代码包括阵列p,该阵列p通过索引i和i+2来访问:
对于此示例,假设阵列p包含0、1、2、3、4、5、6,并且在循环执行的结束时,阵列p将包含0、1、0、1、0、1、0。该代码可通过将循环展开来变化,如图68A和图68B中所示。真实的地址依赖性由图68A中的箭头标注,即,在每一种情况下,加载操作依赖于向相同地址的存储操作。例如,对于此类依赖性中的第一个,向p[2]的存储(例如,写入)需要在从p[2]的加载(例如,读取)之前发生,对于此类依赖性中的第二个,向p[3]的存储需要在从p[3]的加载之前发生,以此类推。由于编译器将是悲观型的,因此编译器标注两个存储器操作load p[i]与store[i+2]之间的依赖性。注意,仅在有些时候读取和写入才确实发生冲突。微架构6400设计成在当没有至相同地址的冲突的同时存储器操作可向前移动的情况下提取存储器级并行性。加载操作尤其是这种情况,由于要等待在先的依赖性存储操作完成,加载操作在代码执行中暴露等待时间。在图68B中的示例代码中,安全的重排序由展开代码左边的箭头标注。
微架构可执行此重排序的方式参照图69A-69B和70A-70G来讨论。注意,此方式不是尽可能最优化的,因为微架构6400可能无法每个周期将存储器命令发送至存储器。然而,利用最少的硬件,微架构通过当操作数(例如,对于存储的地址和数据,或对于加载的地址)和依赖性令牌可用时执行存储器操作来支持依赖性流。
图69A是根据本公开的实施例的用于加载操作6902和存储操作6904的示例性存储器自变量的框图。已参照图67讨论的这些或类似的存储器自变量,并且在此将不再重复。然而,要注意,存储操作6904不具有用于输出队列标识符的指示符,因为数据正在被输出到加速硬件6002。相反,如输入队列标识符存储器自变量中所指示,输入队列6316的通道1中的存储地址和通道2中的数据将被调度,以便在存储器命令中传输至存储器子系统6010,从而完成存储操作6904。此外,依赖性队列的输入通道和输出通道两者都以计数器来实现。由于图68A和图68B中所显示的加载操作和存储操作是互相依赖的,因此计数器可在代码流内的加载操作与存储操作之间轮转。
图69B是图示根据本公开的实施例的、通过图64中的存储器排序电路的微架构6400进行加载操作和存储操作(诸如,图68A中的加载操作6902和存储操作6904)的流的框图。为了简化解释,不是所有组件都被显示,但是可往回引用图64中显示的附加组件。指示加载操作6902的“加载”和存储操作6904的“存储”的各个椭圆形叠加在微架构的组件中的一些组件上,作为对队列的各通道如何正被用作存储器操作,如何通过微架构6400被排队和排序的指示。
图70A、70B、70C、70D、70E、70F、70G和70H是图示根据本公开的实施例的通过图69B中的微架构的队列对图68A和图68B中的示例性程序进行的加载操作和存储操作的功能性流的框图。每一个图可对应于由微架构6400进行的下一处理周期。斜体的值是(进入队列的)传入值,而粗体的值是(离开队列的)传出值。普通字体的所有其他所有值是已经存在于队列中的保留值。
在图70A中,地址p[0]正传入加载地址队列6422,并且地址p[2]正传入存储地址队列6424,从而开始控制流过程。注意,用于加载地址队列的依赖性输入的计数器C0为“1”,而用于依赖性输出的计数器C1为零。相比之下,C0的“1”对于存储操作指示依赖性出值(outvalue)。这指示了对于p[0]的加载操作的传入依赖性以及对于p[2]的存储操作的传出依赖性。然而,这些值还不是活跃的,并且将在图70B中以此方式变得活跃。
在图70B中,地址p[0]是粗体的以指示它在该周期中正传出。新地址p[1]正传入加载地址队列,并且新地址p[3]正传入存储地址队列。完成队列6442中的零(“0”)值位也正传入,其指示针对那个经索引条目存在的任何数据都是无效的。如所提及的那样,计数器C0和C1的值现在被指示为传入,并且因此现在对于该周期是活跃的。
在图70C中,传出地址p[0]现在已离开加载地址队列,并且新地址p[2]正传入加载地址队列。并且数据(“0”)正传入地址p[0]的完成队列。有效性位被置位为“1”以指示完成队列中的数据是有效的。此外,新地址p[4]正传入存储地址队列。计数器C0的值被指示为传出,并且计数器C1的值被指示为传入。C1的值“1”指示向地址p[4]的存储操作的传入依赖性。
注意,用于最新加载操作的地址p[2]依赖于首先需要由针对地址p[2]的存储操作存储的值,其在存储地址队列的顶部。此后,用于从地址p[2]进行的加载操作的完成队列中的经索引条目可保持被缓冲,直到来自向地址p[2]的存储操作的数据完成(参见图70F-70H)。
在图70D中,数据(“0”)正从用于地址p[0]的完成队列传出,因此它正被向外发送到加速硬件6002。此外,新地址p[3]正传入加载地址队列,并且新地址p[5]正传入存储地址队列。计数器C0和C1的值保持不变。
在图70E中,用于地址p[2]的值(“0”)正传入存储数据队列,同时新地址p[4]进入加载地址队列且新地址p[6]进入存储地址队列。计数器C0和C1的值保持不变。
在图70F中,存储数据队列中用于地址p[2]的值(“0”)和存储地址队列中的地址p[2]两者都是传出值。类似地,计数器C1的值被指示为传出,而计数器C0的值(“0”)保持不变。此外,新地址p[5]正传入加载地址队列,并且新地址p[7]正传入存储地址队列。
在图70G中,值(“0”)正传入以指示在完成队列6442中的经索引的值是无效的。地址p[1]是粗体的以指示它正从加载地址队列传出,同时新地址p[6]正传入加载地址队列。新地址p[8]也正传入存储地址队列。计数器C0的值正作为“1”传入,这对应于针对地址p[6]的加载操作的传入依赖性以及针对地址p[8]的存储操作的传出依赖性。计数器C1的值现在是“0”,并且被指示为传出。
在图70H中,数据值“1”正传入完成队列6442,同时有效性位也作为“1”传入,这意味着经缓冲的数据是有效的。这是完成针对地址p[2]的加载操作所需的数据。回忆一下,该数据必须首选被存储到地址p[2],这在图70F中发生。计数器C0的值“0”正传出,而计数器C1的值“1”正传入。此外,新地址p[7]正传入加载地址队列,并且新地址p[9]正传入存储地址队列。
在当前实施例中,凭借用于加载操作和存储操作的“0”和“1”之间的弹跳的(bouncing)依赖性令牌,执行图68A和图68B的代码的过程可继续进行。这是由于p[i]与p[i+2]之间紧密的依赖性。具有较不频繁依赖性的其他代码能以较慢速率生成依赖性令牌,并因此以较慢速率重置计数器C0和C1,从而导致(对应于进一步语义分离的存储器操作的)较高值的令牌的生成。
图71是根据本公开的实施例的用于对加速硬件与乱序存储器子系统之间的存储器操作进行排序的方法7100的流程图。方法7100可由包括硬件(例如,电路、专用逻辑和/或可编程逻辑)、软件(例如,在计算机系统上可执行以执行硬件仿真的指令)或硬件和软件的组合的系统来执行。在说明性示例中,方法7100可由存储器排序电路6005以及该存储器排序电路6005的各子组件执行。
更具体地,参照图71,方法7100可开始于:7110:存储器排序电路在该存储器排序电路的操作队列中对存储器操作排队。存储器操作和控制自变量可构成如经排队的存储器操作,其中,如先前所讨论,存储器操作和控制自变量被映射至存储器排序电路内的某些队列。存储器排序电路可运作以将存储器操作发布至与加速硬件相关联的存储器,从而确保这些存储器操作按程序顺序完成。方法7100可继续进行以下步骤:7120:存储器排序电路在输入队列的集合中从加速硬件接收与存储器操作中的第二存储器操作相关联的存储器的地址。在一个实施例中,输入队列的集合中的加载地址队列是用于接收该地址的通道。在另一实施例中,输入队列的集合中的存储地址队列是用于接收该地址的通道。方法7100可继续进行以下步骤:7130:存储器排序电路从加速硬件接收与该地址相关联的依赖性令牌,其中,该依赖性令牌指示对由存储器操作中的第一存储器操作生成的数据的依赖性,该第一存储器操作先于第二存储器操作。在一个实施例中,依赖性队列的通道用于接收该依赖性令牌。第一存储器操作可以是加载操作或存储操作。
方法7100可继续进行以下步骤:7140:存储器排序电路响应于接收到该依赖性令牌和与该依赖性令牌相关联的地址而调度第二存储器操作向存储器的发布。例如,当加载地址队列接收用于加载操作的地址自变量的地址且依赖性队列接收用于加载操作的控制自变量的依赖性令牌时,存储器排序电路可将第二存储器操作的发布调度为加载操作。方法7100可继续进行以下步骤:7150:存储器排序电路响应于第一存储器操作的完成而(例如,在命令中)将第二存储器操作发布至存储器。例如,如果第一存储器操作是存储,则完成可通过输入队列的集合中的存储数据队列中的数据已被写入存储器中的地址的确收来验证。类似地,如果第一存储器操作是加载操作,则完成可通过针对加载操作的从存储器接收到数据来验证。
7.总结
ExaFLOP规模的超级计算可能是高性能计算中的挑战,该挑战可能无法由常规的冯·诺依曼架构满足。为了实现ExaFLOP,CSA的实施例提供异构空间阵列,该异构空间阵列针对(例如,编译器产生的)数据流图的直接执行。除了布置CSA的实施例的架构原理之外,上文还描述并评估了CSA的实施例,这些CSA的实施例显示出相比现有产品的高10x(10倍)的性能和能量。编译器生成的代码相比路线图架构可具有显著的性能和能量增益。作为异构的参数化架构,CSA的实施例可易于适配于所有计算用例。例如,CSA的移动版本可调整为32位,而聚焦机器学习的阵列的特征可以是显著数量的向量化8位乘法单元。CSA的实施例的主要优势是与从超级计算和数据中心到物联网的所有形式的计算有关的高性能、极其高能效且具有特性的。
在一个实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换型通信网络,用于根据数据流图在空间阵列内在用于执行数据流图的第一数据流操作的处理元件之间路由数据,其中,分组交换型通信网络进一步包括多个网络数据流端点电路,用于执行数据流图的第二数据流操作。多个网络数据流端点电路中的网络数据流端点电路可包括:网络入口缓冲器,用于从分组交换型通信网络接收输入数据;以及空间阵列出口缓冲器,用于根据对输入数据的第二数据流操作来将结果数据输出到处理元件的空间阵列。空间阵列出口缓冲器可基于监测分组交换型通信网络的网络数据流端点电路内的调度器来输出结果数据。空间阵列出口缓冲器可基于监测分组交换型通信网络的多个网络虚拟通道中的所选择通道的网络数据流端点电路内的调度器来输出结果数据。多个网络数据流端点电路中的网络数据流端点电路可包括用于从空间阵列接收控制数据的空间阵列入口缓冲器,该控制数据使网络数据流端点电路的、从分组交换型通信网络接收输入数据的网络入口缓冲器根据对输入数据的第二数据流操作和控制数据来将结果数据输出到处理元件的空间阵列。当来自处理元件的空间阵列的下游处理元件的回压信号指示下游处理元件中的存储不可用于网络数据流端点电路的输出时,多个网络数据流端点电路中的网络数据流端点电路可停止从网络数据流端点电路的空间阵列出口缓冲器输出第二数据流操作的结果数据。当网络入口缓冲器不可用时,多个网络数据流端点电路中的网络数据流端点电路可发送回压信号,以使源停止将分组交换型通信网络上的输入数据发送到网络数据流端点电路的网络入口缓冲器中。处理元件的空间阵列可包括:多个处理元件,以及多个处理元件之间的互连网络,该互连网络用于接收包括多个节点的数据流图的输入,其中,该数据流图用于被叠加到互连网络、多个处理元件、以及多个网络数据流端点电路中,其中每个节点被表示为多个处理元件或多个网络数据流端点电路中的数据流操作器,并且当传入操作数集到达多个处理元件和多个网络数据流端点电路的数据流操作器中的每个数据流操作器时,多个处理元件和多个网络数据流端点电路用于执行操作。处理元件的空间阵列可包括电路交换型网络,用于根据数据流图在空间阵列内在处理元件之间传输数据。
在另一实施例中,一种方法包括:提供处理元件的空间阵列;以及利用分组交换型通信网络根据数据流图在空间阵列内在处理元件之间路由数据;利用处理元件执行数据流图的第一数据流操作;以及利用分组交换型通信网络的多个网络数据流端点电路执行数据流图的第二数据流操作。执行第二数据流操作可包括:利用多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器从分组交换型通信网络接收输入数据;以及根据对输入数据的第二数据流操作将结果数据从网络数据流端点电路的空间阵列出口缓冲器输出到处理元件的空间阵列。输出可包括:基于监测分组交换型通信网络的网络数据流端点电路内的调度器来输出结果数据。输出可包括:基于监测分组交换型通信网络的多个网络虚拟通道中的所选择通道的网络数据流端点电路内的调度器来输出结果数据。执行第二数据流操作可包括:利用多个网络数据流端点电路中的网络数据流端点电路的空间阵列入口缓冲器从空间阵列接收控制数据;以及将网络数据流端点电路配置成使网络数据流端点电路的从分组交换型通信网络接收输入数据的网络入口缓冲器根据对输入数据的第二数据流操作和控制数据来将结果数据输出到处理元件的空间阵列。执行第二数据流操作可包括:当来自处理元件的空间阵列的下游处理元件的回压信号指示下游处理元件中的存储不可用于网络数据流端点电路的输出时,使来自多个网络数据流端点电路中的网络数据流端点电路的空间阵列出口缓冲器的第二数据流操作的输出停止。执行第二数据流操作可包括:当网络入口缓冲器不可用时,从多个网络数据流端点电路中的网络数据流端点电路发送回压信号,以使源停止将分组交换型通信网络上的输入数据发送到网络数据流端点电路的网络入口缓冲器中。路由、执行第一数据流操作、以及执行第二数据流操作可包括:接收包括多个节点的数据流图的输入;将数据流图叠加到处理元件的空间阵列和多个网络数据流端点中,其中每个节点被表示为处理元件或多个网络数据流端点电路中的数据流操作器;以及当传入操作数集到达处理元件和多个网络数据流端点电路的数据流操作器中的每个数据流操作器时,利用处理元件执行第一数据流操作,并且利用多个网络数据流端点电路执行第二数据流操作。该方法可包括:根据数据流图,利用空间阵列的电路交换型网络在空间阵列内在处理元件之间传输数据。
在又一实施例中,一种非暂态机器可读介质,其存储有代码,该代码当由机器执行时使该机器执行包括以下步骤的方法:提供处理元件的空间阵列;以及利用分组交换型通信网络根据数据流图在空间阵列内在处理元件之间路由数据;利用处理元件执行数据流图的第一数据流操作;以及利用分组交换型通信网络的多个网络数据流端点电路执行数据流图的第二数据流操作。执行第二数据流操作可包括:利用多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器从分组交换型通信网络接收输入数据;以及根据对输入数据的第二数据流操作将结果数据从网络数据流端点电路的空间阵列出口缓冲器输出到处理元件的空间阵列。输出可包括:基于监测分组交换型通信网络的网络数据流端点电路内的调度器来输出结果数据。输出可包括:基于监测分组交换型通信网络的多个网络虚拟通道中的所选择通道的网络数据流端点电路内的调度器来输出结果数据。执行第二数据流操作可包括:利用多个网络数据流端点电路中的网络数据流端点电路的空间阵列入口缓冲器从空间阵列接收控制数据;以及将网络数据流端点电路配置成使网络数据流端点电路的从分组交换型通信网络接收输入数据的网络入口缓冲器根据对输入数据的第二数据流操作和控制数据来将结果数据输出到处理元件的空间阵列。执行第二数据流操作可包括:当来自处理元件的空间阵列的下游处理元件的回压信号指示下游处理元件中的存储不可用于网络数据流端点电路的输出时,使来自多个网络数据流端点电路中的网络数据流端点电路的空间阵列出口缓冲器的第二数据流操作的输出停止。执行第二数据流操作可包括:当网络入口缓冲器不可用时,从多个网络数据流端点电路中的网络数据流端点电路发送回压信号,以使源停止将分组交换型通信网络上的输入数据发送到网络数据流端点电路的网络入口缓冲器中。路由、执行第一数据流操作、以及执行第二数据流操作可包括:接收包括多个节点的数据流图的输入;将数据流图叠加到处理元件的空间阵列和多个网络数据流端点中,其中每个节点被表示为处理元件或多个网络数据流端点电路中的数据流操作器;以及当传入操作数集到达处理元件和多个网络数据流端点电路的数据流操作器中的每个数据流操作器时,利用处理元件执行第一数据流操作,并且利用多个网络数据流端点电路执行第二数据流操作。该方法可包括:根据数据流图,利用空间阵列的电路交换型网络在空间阵列内在处理元件之间传输数据。
在另一实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换型通信网络,用于根据数据流图在空间阵列内在用于执行数据流图的第一数据流操作的处理元件之间路由数据,其中,分组交换型通信网络进一步包括用于执行数据流图的第二数据流操作的装置。
在一个实施例中,一种处理器包括:核,该核具有解码器和执行单元,该解码器用于将指令解码为经解码指令,该执行单元用于执行经解码指令以执行第一操作;多个处理元件;以及互连网络,在多个处理元件之间,互连网络用于接收包括多个节点的数据流图的输入,其中,数据流图用于被叠加到互连网络和多个处理元件中,并且每一个节点被表示为多个处理元件中的数据流操作器,并且多个处理元件用于当相应的传入操作数集到达多个处理元件的数据流操作器中的每一个时执行第二操作。当来自下游处理元件的回压信号指示下游处理元件中的存储不可用于多个处理元件中的一处理元件时,该处理元件可停止执行。处理器可包括流控制路径网络,流控制路径网络用于根据数据流图携带回压信号。数据流令牌可使来自接收数据流令牌的数据流操作器的输出被发送到多个处理元件中的特定处理元件的输入缓冲器。第二操作可包括存储器访问,并且多个处理元件包括存储器访问数据流操作器,存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行存储器访问。多个处理元件可包括第一类型的处理元件以及第二不同类型的处理元件。
在另一实施例中,一种方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用处理器的核的执行单元执行经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将数据流图叠加到处理器的多个处理元件以及处理器的多个处理元件之间的互连网络中,并且每一个节点被表示为多个处理元件中的数据流操作器;以及当相应的传入操作数集到达多个处理元件的数据流操作器中每一个时,利用互连网络和多个处理元件执行数据流图的第二操作。该方法可包括:当来自下游处理元件的回压信号指示下游处理元件中的存储不可用于多个处理元件中的一处理元件的输出时,停止由该处理元件进行的执行。该方法可包括:根据数据流图,在流控制路径上发送回压信号。数据流令牌可使来自接收数据流令牌的数据流操作器的输出被发送到多个处理元件中的特定处理元件的输入缓冲器。该方法可包括:直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌,才执行存储访问,其中,第二操作包括存储器访问,并且多个处理元件包括存储器访问数据流操作器。该方法可包括:提供多个处理元件中的第一类型的处理元件以及第二不同类型的处理元件。
在又一实施例中,一种装置包括:在多个处理元件之间的数据路径网络;以及在多个处理元件之间的流控制路径网络,其中,数据路径网络和流控制路径网络用于接收包括多个节点的数据流图的输入,数据流图用于被叠加到数据路径网络、流控制路径网络和多个处理元件中,并且每一个节点被表示成多个处理元件中的数据流操作器,并且多个处理元件用于当相应的传入操作数集到达多个处理元件的数据流操作器中的每一个处时执行第二操作。流控制路径网络可根据数据流图将回压信号携带到多个数据流操作器。在数据路径网络上被发送到数据流操作器的数据流令牌可使来自数据流操作器的输出在数据路径网络上被发送到多个处理元件中的特定处理元件的输入缓冲器。数据路径网络可以是用于根据数据流图来将相应的输入操作数集携带到数据流操作器中的每一个的静态电路交换型网络。流控制路径网络可根据数据流图从下游处理元件传输回压信号以指示下游处理元件中的存储不可用于处理元件的输出。数据路径网络的至少一个数据路径和流控制路径网络的至少一个流控制路径可形成具有回压控制的通道化电路。流控制路径网络可在多个处理元件中的至少两个处理元件处串行地流水线化。
在另一实施例中,一种方法包括:接收包括多个节点的数据流图的输入;将数据流图叠加到处理器的多个处理元件、多个处理元件之间的数据路径网络以及多个处理元件之间的流控制路径网络中,并且每一个节点被表示为多个处理元件中的数据流操作器。该方法可包括:根据数据流图,利用流控制路径网络将回压信号携带到多个数据流操作器。该方法可包括:在数据路径网络上将数据流令牌发送到数据流操作器,以使来自数据流操作器的输出在数据路径网络上被发送到多个处理元件中的特定处理元件的输入缓冲器。该方法可包括:根据数据流图设置数据路径网络的多个切换装置和/或流控制路径网络的多个切换装置以将相应的输入操作数集携带到数据流操作器中的每一个,其中,数据路径网络是静态电路交换型网络。该方法可包括:根据数据流图,利用流控制路径网络从下游处理元件传输回压信号,以指示下游处理元件中的存储不可用于处理元件的输出。该方法可包括:利用数据路径网络的至少一个数据路径和流控制路径网络的至少一个流控制路径来形成具有回压控制的通道化电路。
在又一实施例中,一种处理器包括:核,该核具有解码器和执行单元,该解码器用于将指令解码为经解码指令,该执行单元用于执行经解码指令以执行第一操作;多个处理元件;以及网络装置,在多个处理元件之间,网络装置用于接收包括多个节点的数据流图的输入,其中,数据流图用于被叠加到网络装置和多个处理元件中,并且每一个节点被表示为多个处理元件中的数据流操作器,并且多个处理元件用于当相应的传入操作数集到达多个处理元件的数据流操作器中的每一个时执行第二操作。
在另一实施例中,一种设备包括:在多个处理元件之间的数据路径装置;以及在多个处理元件之间的流控制路径装置,其中,数据路径装置和流控制路径装置用于接收包括多个节点的数据流图的输入,数据流图用于被叠加到数据路径装置、流控制路径装置和多个处理元件中,并且每一个节点被表示成多个处理元件中的数据流操作器,并且多个处理元件用于当相应的传入操作数集到达多个处理元件的数据流操作器中的每一个处时执行第二操作。
在一个实施例中,一种处理器包括:核,该核具有解码器和执行单元,该解码器用于将指令解码为经解码指令,该执行单元用于执行经解码指令以执行第一操作;以及处理元件的阵列,处理元件的阵列用于接收包括多个节点的数据流图的输入,其中,数据流图用于被叠加到处理元件的阵列,并且每一个节点被表示为处理元件的阵列中的数据流操作器,并且处理元件的阵列用于当传入操作数集到达处理元件的阵列时执行第二操作。处理元件的阵列可以直到传入操作数集到达处理元件的阵列且处理元件的阵列中的存储可用于第二操作的输出时才执行第二操作。处理元件的阵列可包括用于将数据流令牌和控制令牌携带到多个数据流操作器的网络(或(多个)通道)。第二操作可包括存储器访问,并且处理元件的阵列可包括存储器访问数据流操作器,存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行存储器访问。每一个处理元件可仅执行数据流图的一个或两个操作。
在另一实施例中,一种方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用处理器的核的执行单元执行经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将数据流图叠加到处理器的处理元件的阵列中,并且每一个节点被表示为处理元件的阵列中的数据流操作器;以及当传入操作数集到达处理元件的阵列处时,利用处理元件的阵列执行数据流图的第二操作。处理元件的阵列可以直到传入操作数集到达处理元件的阵列且处理元件的阵列中的存储可用于第二操作的输出时才执行第二操作。处理元件的阵列可包括将数据流令牌和控制令牌携带到多个数据流操作器的网络。第二操作可包括存储器访问,并且处理元件的阵列包括存储器访问数据流操作器,存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行存储器访问。每一个处理元件可仅执行数据流图的一个或两个操作。
在又一实施例中,一种非暂态机器可读介质存储有代码,该代码当由机器执行时使机器执行方法,该方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用处理器的核的执行单元执行经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将数据流图叠加到处理器的处理元件的阵列中,并且每一个节点被表示为处理元件的阵列中的数据流操作器;以及当传入操作数集到达处理元件的阵列处时,利用处理元件的阵列执行数据流图的第二操作。处理元件的阵列可以直到传入操作数集到达处理元件的阵列且处理元件的阵列中的存储可用于第二操作的输出时才执行第二操作。处理元件的阵列可包括将数据流令牌和控制令牌携带到多个数据流操作器的网络。第二操作可包括存储器访问,并且处理元件的阵列包括存储器访问数据流操作器,存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行存储器访问。每一个处理元件可仅执行数据流图的一个或两个操作。
在另一实施例中,一种处理器包括:核,该核具有解码器和执行单元,该解码器用于将指令解码为经解码指令,该执行单元用于执行经解码指令以执行第一操作;以及用于接收包括多个节点的数据流图的输入的装置,其中,数据流图用于被叠加到装置,并且每一个节点被表示为装置中的数据流操作器,并且装置用于当传入操作数集到达装置时执行第二操作。
在一个实施例中,处理器包括:核,该核具有解码器和执行单元,该解码器用于将指令解码为经解码指令,该执行单元用于执行经解码指令以执行第一操作;多个处理元件;以及互连网络,在多个处理元件之间,互连网络用于接收包括多个节点的数据流图的输入,其中,数据流图用于被叠加到互连网络和多个处理元件中,并且每一个节点被表示为多个处理元件中的数据流操作器,并且多个处理元件用于当传入操作数集到达多个处理元件时执行第二操作。处理器可进一步包括多个配置控制器,每一个配置控制器耦合到多个处理元件的相应适当子集,并且每一个配置控制器用于从存储加载配置信息并且引起多个处理元件的相应适当子集根据配置信息耦合。处理器可包括多个配置高速缓存,每一个配置控制器耦合至相应的配置高速缓存以取出用于多个处理元件的相应适当子集的配置信息。由执行单元执行的第一操作可以将配置信息预取到多个配置高速缓存中的每一个中。多个配置控制器中的每一个可包括重配置电路,该重配置电路用于:在从多个处理元件的相应适当子集中的至少一个处理元件接收到配置错误消息时引起对至少一个处理元件的重配置。多个配置控制器中的每一个可包括重配置电路,该重配置电路用于:在接收到重配置请求消息时引起对多个处理元件的相应适当子集的重配置;以及禁用与多个处理元件的相应适当子集的通信,直到重配置完成。处理器可包括多个异常聚合器,并且每一个异常聚合器耦合至多个处理元件的相应适当子集,从便从多个处理元件的相应适当子集收集异常并将异常转发至核以用于维护。处理器可包括多个提取控制器,每一个提取控制器耦合至多个处理元件的相应适当子集,并且每一个提取控制器用于使来自多个处理元件的相应适当子集的状态数据被保存到存储器。
在另一实施例中,一种方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用处理器的核的执行单元执行经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将数据流图叠加到处理器的多个处理元件以及处理器的多个处理元件之间的互连网络中,并且每一个节点被表示为多个处理元件中的数据流操作器;以及当传入操作数集到达多个处理元件时,利用互连网络和多个处理元件执行数据流图的第二操作。该方法可包括:从存储加载用于多个处理元件的相应适当子集的配置信息;以及根据配置信息引起针对多个处理元件的每一个相应适当子集的耦合。该方法可包括:从多个配置高速缓存中的相应配置高速缓存取出用于多个处理元件的相应适当子集的配置信息。由执行单元执行的第一操作可以是将配置信息预取到多个配置高速缓存中的每一个中。该方法可包括:在从多个处理元件的相应适当子集中的至少一个处理元件接收到配置错误消息时,引起对至少一个处理元件的重配置。该方法可包括:在接收到重配置请求消息时引起对多个处理元件的相应适当子集的重配置;以及禁用与多个处理元件的相应适当子集的通信,直到重配置完成。该方法可包括:从多个处理元件的相应适当子集收集异常;以及将异常转发至核以用于维护。该方法可包括:使来自多个处理元件的相应适当子集的状态数据被保存到存储器。
在又一实施例中,一种非暂态机器可读介质存储有代码,该代码当由机器执行时使机器执行方法,该方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用处理器的核的执行单元执行经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将数据流图叠加到处理器的多个处理元件以及处理器的多个处理元件之间的互连网络中,并且每一个节点被表示为多个处理元件中的数据流操作器;以及当传入操作数集到达多个处理元件时,利用互连网络和多个处理元件执行数据流图的第二操作。该方法可包括:从存储加载用于多个处理元件的相应适当子集的配置信息;以及根据配置信息引起针对多个处理元件的每一个相应适当子集的耦合。该方法可包括:从多个配置高速缓存中的相应配置高速缓存取出用于多个处理元件的相应适当子集的配置信息。由执行单元执行的第一操作可以是将配置信息预取到多个配置高速缓存中的每一个中。该方法可进一步包括:在从多个处理元件的相应适当子集中的至少一个处理元件接收到配置错误消息时,引起对至少一个处理元件的重配置。该方法可包括:在接收到重配置请求消息时引起对多个处理元件的相应适当子集的重配置;以及禁用与多个处理元件的相应适当子集的通信,直到重配置完成。该方法可包括:从多个处理元件的相应适当子集收集异常;以及将异常转发至核以用于维护。该方法可包括:使来自多个处理元件的相应适当子集的状态数据被保存到存储器。
在另一实施例中,一种处理器包括:核,该核具有解码器和执行单元,该解码器用于将指令解码为经解码指令,该执行单元用于执行经解码指令以执行第一操作;多个处理元件;以及在多个而处理元件之间的装置,该装置用于接收包括多个节点的数据流图的输入,其中,数据流图用于被叠加到装置和多个处理元件中,并且每一个节点被表示为多个处理元件中的数据流操作器,并且多个处理元件用于当传入操作数集到达多个处理元件时执行第二操作。
在一个实施例中,一种装置(例如,系统)包括:处理元件的空间阵列,该处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的第一网络,其中,数据流图用于被叠加到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作器,并且处理元件的空间阵列用于当相应的传入操作数集到达数据流操作器中的每个数据流操作器时执行操作;第一性能监视电路,该第一性能监视电路由第二网络(例如,硬连线的直接连接)耦合至处理元件中的第一多个处理元件(例如,其第一适当子集),以接收来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值,基于来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值生成第一经聚合的监视值(例如,单个数字),并且当第一阈值被第一经聚合的监视值超过(例如,或满足)时在第三(例如,异常)网络上将第一经聚合的监视值发送到性能管理器电路;以及性能管理器电路,该性能管理器电路用于基于第一经聚合的监视值执行(例如,纠正)动作。装置可包括第二性能监视电路,该第二性能监视电路由第四网络耦合至处理元件中的不同的第二多个处理元件(例如,其第二适当子集),以接收来自处理元件中的不同的第二多个处理元件中的每个处理元件的至少一个监视值,基于来自处理元件中的不同的第二多个处理元件中的每个处理元件的至少一个监视值生成第二经聚合的监视值(例如,单个数字),并且当第二阈值被第二经聚合的监视值超过(例如,或满足)时在第三网络上将第二经聚合的监视值发送到性能管理器电路,其中性能管理器电路用于基于第一经聚合的监视值和第二经聚合的监视值执行(例如,纠正)动作。第一性能监视电路可包括匹配电路,该匹配电路耦合至第二网络,以提供来自处理元件中的第一多个处理元件中的每个处理元件的多个监视值的适当子集,并且基于多个监视值的适当子集生成第一经聚合的监视值。第一性能监视电路可包括寄存器,该寄存器用于存储用于耦合至处理元件中的第一多个处理元件中的每个处理元件的切换装置(例如,多路复用器)的控制值,以使切换装置基于控制值选择适当子集。第一性能监视电路可包括到处理元件中的第一多个处理元件中的每个处理元件的停止路径,该停止路径用于:当第一性能监视电路将第一经聚合的监视值发送到性能管理器电路时,停止处理元件中的第一多个处理元件中的每个处理元件。第一性能监视电路可包括到处理元件中的第一多个处理元件中的每个处理元件的停止路径,该停止路径用于:当第一性能监视电路接收到来自性能管理器电路的转储清除值时,停止处理元件中的第一多个处理元件中的每个处理元件(例如,并且不停止其他PE中的任何一个PE)。装置可包括请求地址文件电路,该请求地址文件电路耦合至处理元件的空间阵列和高速缓存存储器,该请求地址文件电路用于:响应于来自处理元件的空间阵列的对数据访问的请求,经由第三网络访问高速缓存存储器中的数据,并且响应于从第一性能监视电路接收到第一经聚合的监视值在第三网络上将第一经聚合的监视值发送到性能管理器电路。请求地址文件电路可包括异常管理器电路,该异常管理器电路用于用标签标记第一经聚合的监视值,该标签指示第一经聚合的监视值要被发送至性能管理器电路。
在另一实施例中,一种方法包括:将包括多个节点的数据流图的输入叠加到包括第一网络的处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作器;当相应的传入操作数集到达数据流操作器中的每个数据流操作器时,利用处理元件的空间阵列执行操作;在第二网络上将至少一个监视值从处理元件中的第一多个处理元件中的每个处理元件发送到第一性能监视电路;由第一性能监视电路基于来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值生成第一经聚合的监视值;当第一阈值被第一经聚合的监视值超过时,在第三网络上将第一经聚合的监视值发送到性能管理器电路;以及由性能管理器电路基于第一经聚合的监视值执行动作。方法可包括:在第四网络上将至少一个监视值从处理元件中的不同的第二多个处理元件中的每个处理元件发送到第二性能监视电路;由第二性能监视电路基于来自处理元件中的不同的第二多个处理元件中的每个处理元件的至少一个监视值生成第二经聚合的监视值;当第二阈值被第二经聚合的监视值超过时,在第三网络上将第二经聚合的监视值发送到性能管理器电路;以及由性能管理器电路基于第一经聚合的监视值和第二经聚合的监视值执行动作。方法可包括:由第一性能监视电路的匹配电路提供来自处理元件中的第一多个处理元件中的每个处理元件的多个监视值的适当子集,其中生成包括基于多个监视值的适当子集生成第一经聚合的监视值。方法可包括:将用于耦合至处理元件中的第一多个处理元件中的每个处理元件的切换装置的控制值存储在第一性能监视电路的寄存器中,以使切换装置基于控制值选择适当子集。方法可包括:当第一性能监视电路将第一经聚合的监视值发送到性能管理器电路时,在停止路径上将停止值从第一性能监视电路发送到处理元件中的第一多个处理元件中的每个处理元件以停止处理元件中的第一多个处理元件中的每个处理元件。方法可包括:当第一性能监视电路接收到来自性能管理器电路的转储清除值时,在停止路径上将停止值从第一性能监视电路发送到处理元件中的第一多个处理元件中的每个处理元件,以停止处理元件中的第一多个处理元件中的每个处理元件。方法可包括:将请求地址文件电路耦合至处理元件的空间阵列和高速缓存存储器;响应于来自处理元件的空间阵列的对数据访问的请求,利用请求地址文件电路经由第三网络访问高速缓存存储器中的数据;以及响应于从第一性能监视电路接收到第一经聚合的监视值,由请求地址文件电路在第三网络上将第一经聚合的监视值发送到性能管理器电路。方法可包括:由请求地址文件电路的异常管理器电路用标签标记第一经聚合的监视值,该标签指示第一经聚合的监视值要被发送至性能管理器电路。
在又一实施例中,一种非暂态机器可读介质,其存储有代码,该代码当由机器执行时使该机器执行包括以下步骤的方法:将包括多个节点的数据流图的输入叠加到包括第一网络的处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作器;当相应的传入操作数集到达数据流操作器中的每个数据流操作器时,利用处理元件的空间阵列执行操作;在第二网络上将至少一个监视值从处理元件中的第一多个处理元件中的每个处理元件发送到第一性能监视电路;由第一性能监视电路基于来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值生成第一经聚合的监视值;当第一阈值被第一经聚合的监视值超过时,在第三网络上将第一经聚合的监视值发送到性能管理器电路;以及由性能管理器电路基于第一经聚合的监视值执行动作。方法可包括:在第四网络上将至少一个监视值从处理元件中的不同的第二多个处理元件中的每个处理元件发送到第二性能监视电路;由第二性能监视电路基于来自处理元件中的不同的第二多个处理元件中的每个处理元件的至少一个监视值生成第二经聚合的监视值;当第二阈值被第二经聚合的监视值超过时,在第三网络上将第二经聚合的监视值发送到性能管理器电路;以及由性能管理器电路基于第一经聚合的监视值和第二经聚合的监视值执行动作。方法可包括:由第一性能监视电路的匹配电路提供来自处理元件中的第一多个处理元件中的每个处理元件的多个监视值的适当子集,其中生成包括基于多个监视值的适当子集生成第一经聚合的监视值。方法可包括:将用于耦合至处理元件中的第一多个处理元件中的每个处理元件的切换装置的控制值存储在第一性能监视电路的寄存器中,以使切换装置基于控制值选择适当子集。方法可包括:当第一性能监视电路将第一经聚合的监视值发送到性能管理器电路时,在停止路径上将停止值从第一性能监视电路发送到处理元件中的第一多个处理元件中的每个处理元件,以停止处理元件中的第一多个处理元件中的每个处理元件。方法可包括:当第一性能监视电路接收到来自性能管理器电路的转储清除值时,在停止路径上将停止值从第一性能监视电路发送到处理元件中的第一多个处理元件中的每个处理元件,以停止处理元件中的第一多个处理元件中的每个处理元件。方法可包括:将请求地址文件电路耦合至处理元件的空间阵列和高速缓存存储器;响应于来自处理元件的空间阵列的对数据访问的请求,利用请求地址文件电路经由第三网络访问高速缓存存储器中的数据;以及响应于从第一性能监视电路接收到第一经聚合的监视值,由请求地址文件电路在第三网络上将第一经聚合的监视值发送到性能管理器电路。方法可包括:由请求地址文件电路的异常管理器电路用标签标记第一经聚合的监视值,该标签指示第一经聚合的监视值要被发送至性能管理器电路。
在又一实施例中,一种设备(例如,系统)包括:处理元件的空间阵列,该处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的第一网络,其中,数据流图用于被叠加到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作器,并且处理元件的空间阵列用于当相应的传入操作数集到达数据流操作器中的每个数据流操作器时执行操作;由第二网络(例如,硬连线的直接连接)耦合至处理元件中的第一多个处理元件(例如,其第一适当子集)的装置,用于接收来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值,基于来自处理元件中的第一多个处理元件中的每个处理元件的至少一个监视值生成第一经聚合的监视值(例如,单个数字),并且当第一阈值被第一经聚合的监视值超过(例如,或满足)时在第三(例如,异常)网络上将第一经聚合的监视值发送到性能管理器电路;以及性能管理器电路,该性能管理器电路用于基于第一经聚合的监视值执行(例如,纠正)动作。
在另一实施例中,一种装置包括数据存储设备,该数据存储设备存储代码,该代码当由硬件处理器执行时使硬件处理器执行本文中公开的任何方法。装置可以如在具体实施方式中所描述。方法可以如在具体实施方式中所描述。
在又一实施例中,一种存储代码的非暂态机器可读介质,该代码当由机器执行时使机器执行包括本文中公开的任何方法的方法。
(例如,用于由核执行的)指令集可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定将要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的位的位置,因为较少的字段被包括)的不同适当子集,和/或定义为具有以不同方式进行解释的给定字段。由此,ISA的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该ADD指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。已经推出和/或发布了被称为高级向量扩展(AVX)(AVX1和AVX2)和利用向量扩展(VEX)编码方案的SIMD扩展集(参见例如2016年6月的 64和IA-32架构软件开发者手册;并且参见2016年2月的架构指令集扩展编程参考)。
示例性指令格式
本文中所描述的(多条)指令的实施例能以不同的格式体现。另外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。
通用向量友好指令格式
向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量操作。
图72A-图72B是图示根据本公开的实施例的通用向量友好指令格式及其指令模板的框图。图72A是图示根据本公开的实施例的通用向量友好指令格式及其A类指令模板的框图;而图72B是图示根据本公开的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式7200定义A类和B类指令模板,这两者都包括无存储器访问7205的指令模板和存储器访问7220的指令模板。在向量友好指令格式的上下文中的术语“通用”是指不束缚于任何特定指令集的指令格式。
尽管将描述其中向量友好指令格式支持以下情况的本公开的实施例:64字节向量操作数长度(或尺寸)与32位(4字节)或64位(8字节)数据元素宽度(或尺寸)(并且由此,64字节向量由16个双字尺寸的元素组成,或者替代地由8个四字尺寸的元素组成);64字节向量操作数长度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸);32字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或尺寸);以及16字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸);但是替代实施例可支持更大、更小和/或不同的向量操作数尺寸(例如,256字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
图72A中的A类指令模板包括:1)在无存储器访问7205的指令模板内,示出无存储器访问的完全舍入控制型操作7210的指令模板、以及无存储器访问的数据变换型操作7215的指令模板;以及2)在存储器访问7220的指令模板内,示出存储器访问的时效性7225的指令模板和存储器访问的非时效性7230的指令模板。图72B中的B类指令模板包括:1)在无存储器访问7205的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作7212的指令模板以及无存储器访问的写掩码控制的vsize型操作7217的指令模板;以及2)在存储器访问7220的指令模板内,示出存储器访问的写掩码控制7227的指令模板。
通用向量友好指令格式7200包括以下列出的按照在图72A-72B中图示的顺序的如下字段。
格式字段7240——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
基础操作字段7242——其内容区分不同的基础操作。
寄存器索引字段7244——其内容直接或者通过地址生成来指定源或目的地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。尽管在一个实施例中N可多达三个源寄存器和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源中的一个源还用作目的地;可支持多达三个源,其中这些源中的一个源还用作目的地;可支持多达两个源和一个目的地)。
修饰符(modifier)字段7246——其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问7205的指令模板与存储器访问7220的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段7250——其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本公开的一个实施例中,该字段被分成类字段7268、α字段7252和β字段7254。扩充操作字段7250允许在单条指令而非2条、3条或4条指令中执行多组共同的操作。
比例字段7260——其内容允许用于存储器地址生成(例如,用于使用(2比例*索引+基址)的地址生成)的索引字段的内容的按比例缩放。
位移字段7262A——其内容用作存储器地址生成的一部分(例如,用于使用(2比例*索引+基址+位移)的地址生成)。
位移因数字段7262B(注意,位移字段7262A直接在位移因数字段7262B上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;它指定将按比例缩放存储器访问的尺寸(N)的位移因数——其中N是存储器访问中的字节数量(例如,用于使用(2比例*索引+基址+按比例缩放的位移)的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总尺寸(N)以生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段7274(稍后在本文中描述)和数据操纵字段7254C确定。位移字段7262A和位移因数字段7262B不用于无存储器访问7205的指令模板和/或不同的实施例可实现这两者中的仅一个或不实现这两者中的任一个,在这个意义上,位移字段7262A和位移因数字段7262B是任选的。
数据元素宽度字段7264——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中只用于指令中的一些指令)。如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上,该字段是任选的。
写掩码字段7270——其内容逐数据元素位置地控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码,而B类指令模板支持合并-写掩码和归零-写掩码两者。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功能的适当子集是控制正被执行的操作的向量长度的能力(即,从第一个到最后一个正被修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段7270允许部分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段7270的内容选择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此,写掩码字段7270的内容间接地标识要执行的掩码)的本公开的实施例,但是替代实施例替代地或附加地允许掩码写字段7270的内容直接指定要执行的掩码。
立即数字段7272——其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上,该字段是任选的。
类字段7268——其内容在不同类的指令之间进行区分。参考图72A-图72B,该字段的内容在A类和B类指令之间进行选择。在图72A-图72B中,圆角方形用于指示特定的值存在于字段中(例如,在图72A-图72B中分别用于类字段7268的A类7268A和B类7268B)。
A类指令模板
在A类非存储器访问7205的指令模板的情况下,α字段7252被解释为其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作7210和无存储器访问的数据变换型操作7215的指令模板分别指定舍入7252A.1和数据变换7252A.2)的RS字段7252A,而β字段7254区分要执行所指定类型的操作中的哪一种。在无存储器访问7205的指令模板中,比例字段7260、位移字段7262A和位移比例字段7262B不存在。
无存储器访问的指令模板——完全舍入控制型操作
在无存储器访问的完全舍入控制型操作7210的指令模板中,β字段7254被解释为其(多个)内容提供静态舍入的舍入控制字段7254A。尽管在本公开的所述实施例中舍入控制字段7254A包括抑制所有浮点异常(SAE)字段7256和舍入操作控制字段7258,但是替代实施例可支持这两个概念,可将这两个概念编码为同一字段,或仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段7258)。
SAE字段7256——其内容区分是否禁用异常事件报告;当SAE字段7256的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序。
舍入操作控制字段7258——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段7258允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段7250的内容覆盖(override)该寄存器值。
无存储器访问的指令模板-数据变换型操作
在无存储器访问的数据变换型操作7215的指令模板中,β字段7254被解释为数据变换字段7254B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
在A类存储器访问7220的指令模板的情况下,α字段7252被解释为驱逐提示字段7252B,其内容区分要使用驱逐提示中的哪一个(在图72A中,对于存储器访问时效性7225的指令模板和存储器访问非时效性7230的指令模板分别指定时效性的7252B.1和非时效性的7252B.2),而β字段7254被解释为数据操纵字段7254C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换以及目的地的向下转换)。存储器访问7220的指令模板包括比例字段7260,并任选地包括位移字段7262A或位移比例字段7262B。
向量存储器指令使用转换支持来执行来自存储器的向量加载以及向存储器的向量存储。如同寻常的向量指令,向量存储器指令以数据元素式的方式从/向存储器传输数据,其中实际被传输的元素由被选为写掩码的向量掩码的内容规定。
存储器访问的指令模板——时效性的
时效性的数据是可能足够快地被重新使用以从高速缓存操作受益的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
存储器访问的指令模板——非时效性的
非时效性的数据是不太可能足够快地被重新使用以从第一级高速缓存中的高速缓存操作受益且应当被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段7252被解释为写掩码控制(Z)字段7252C,其内容区分由写掩码字段7270控制的写掩码应当是合并还是归零。
在B类非存储器访问7205的指令模板的情况下,β字段7254的一部分被解释为RL字段7257A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的写掩码控制部分舍入控制类型操作7212的指令模板和无存储器访问的写掩码控制VSIZE型操作7217的指令模板分别指定舍入7257A.1和向量长度(VSIZE)7257A.2),而β字段7254的其余部分区分要执行所指定类型的操作中的哪一种。在无存储器访问7205的指令模板中,比例字段7260、位移字段7262A和位移比例字段7262B不存在。
在无存储器访问的写掩码控制部分舍入控制型操作7210的指令模板中,β字段7254的其余部分被解释为舍入操作字段7259A,并且禁用异常事件报告(给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序)。
舍入操作控制字段7259A——正如舍入操作控制字段7258,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段7259A允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段7250的内容覆盖该寄存器值。
在无存储器访问的写掩码控制VSIZE型操作7217的指令模板中,β字段7254的其余部分被解释为向量长度字段7259B,其内容区分要执行多个数据向量长度中的哪一个(例如,128字节、256字节或512字节)。
在B类存储器访问7220的指令模板的情况下,β字段7254的一部分被解释为广播字段7257B,其内容区分是否要执行广播型数据操纵操作,而β字段7254的其余部分被解释为向量长度字段7259B。存储器访问7220的指令模板包括比例字段7260,并任选地包括位移字段7262A或位移比例字段7262B。
针对通用向量友好指令格式7200,示出完整操作码字段7274包括格式字段7240、基础操作字段7242和数据元素宽度字段7264。尽管示出了其中完整操作码字段7274包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段7274包括少于所有的这些字段。完整操作码字段7274提供操作代码(操作码)。
扩充操作字段7250、数据元素宽度字段7264和写掩码字段7270允许逐指令地以通用向量友好指令格式指定这些特征。
写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本公开的一些实施例中,不同处理器或处理器内的不同核可支持仅A类、仅B类、或者可支持这两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可仅支持A类,并且旨在用于通用计算和图形和/或科学(吞吐量)计算两者的核可支持A类和B类两者(当然,具有来自这两类的模板和指令的一些混合、但是并非来自这两类的所有模板和指令的核在本公开的范围内)。同样,单个处理器可包括多个核,这多个核全部都支持相同的类,或者其中不同的核支持不同的类。举例而言,在具有单独的图形核和通用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核。当然,在本公开的不同实施例中,来自一类的特征也可在其他类中实现。将使以高级语言编写的程序成为(例如,及时编译或静态编译)各种不同的可执行形式,这些可执行形式包括:1)仅具有由用于执行的目标处理器支持的(多个)类的指令的形式;或者2)具有替代例程并具有控制流代码的形式,该替代例程使用所有类的指令的不同组合来编写,该控制流代码选择这些例程以基于由当前正在执行代码的处理器支持的指令来执行。
示例性专用向量友好指令格式
图73是图示根据本公开的实施例的示例性专用向量友好指令格式的框图。图73示出专用向量友好指令格式7300,其指定各字段的位置、尺寸、解释和次序、以及那些字段中的一些字段的值,在这个意义上,该专用向量友好指令格式7300是专用的。专用向量友好指令格式7300可用于扩展x86指令集,并且由此字段中的一些字段与如在现有的x86指令集及其扩展(例如,AVX)中所使用的那些字段类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示来自图72的字段,来自图73的字段映射到来自图72的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式7200的上下文中参考专用向量友好指令格式7300描述了本公开的实施例,但是本公开不限于专用向量友好指令格式7300,除非另有声明。例如,通用向量友好指令格式7200构想了各种字段的各种可能的尺寸,而专用向量友好指令格式7300示出为具有特定尺寸的字段。作为具体示例,尽管在专用向量友好指令格式7300中数据元素宽度字段7264被图示为一位字段,但是本公开不限于此(即,通用向量友好指令格式7200构想数据元素宽度字段7264的其他尺寸)。
通用向量友好指令格式7200包括以下列出的按照图73A中图示的顺序的如下字段。
EVEX前缀(字节0-3)7302——以四字节形式进行编码。
格式字段7240(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段7240,并且它包含0x62(在本公开的一个实施例中,为用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
REX字段7305(EVEX字节1,位[7-5])——由EVEX.R位字段(EVEX字节1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)以及(7257BEX字节1,位[5]–B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,由此可通过增加EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段7210——这是REX’字段7210的第一部分,并且是用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段(EVEX字节1,位[4]–R’)。在本公开的一个实施例中,该位与以下指示的其他位一起以位反转的格式存储以(在公知x86的32位模式下)与BOUND指令进行区分,该BOUND指令的实操作码字节是62,但是在MODR/M字段(在下文中描述)中不接受MOD字段中的值11;本公开的替代实施例不以反转的格式存储该指示的位以及以下其他指示的位。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.R’、EVEX.R以及来自其他字段的其他RRR来形成R’Rrrr。
操作码映射字段7315(EVEX字节1,位[3:0]–mmmm)——其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段7264(EVEX字节2,位[7]–W)——由记号EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
EVEX.vvvv 7320(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作数进行编码,并且对具有两个或更多个源操作数的指令有效;2)EVEX.vvvv对针对特定向量位移以1补码的形式指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被预留,并且应当包含1111b。由此,EVEX.vvvv字段7320对以反转(1补码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将指定符尺寸扩展到32个寄存器。
EVEX.U 7268类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段7325(EVEX字节2,位[1:0]-pp)——提供了用于基础操作字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SIMD前缀的益处(EVEX前缀仅需要2位,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码成SIMD前缀编码字段;并且在运行时在被提供给解码器的PLA之前被扩展成传统SIMD前缀(因此,在无需修改的情况下,PLA既可执行传统格式的这些传统指令又可执行EVEX格式的这些传统指令)。虽然较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是为了一致性,特定实施例以类似的方式扩展,但允许由这些传统SIMD前缀指定的不同含义。替代实施例可重新设计PLA以支持2位SIMD前缀编码,并且由此不需要扩展。
α字段7252(EVEX字节3,位[7]–EH,也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α图示)——如先前所述,该字段是针对上下文的。
β字段7254(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,还以βββ图示)——如前所述,此字段是针对上下文的。
REX’字段7210——这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写掩码字段7270(EVEX字节3,位[2:0]-kkk)——其内容指定写掩码寄存器中的寄存器的索引,如先前所述。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线到所有对象的写掩码或绕过掩码硬件的硬件来实现)。
实操作码字段7330(字节4)还被称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段7340(字节5)包括MOD字段7342、Reg字段7344和R/M字段7346。如先前所述的,MOD字段7342的内容将存储器访问操作和非存储器访问操作区分开。Reg字段7344的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或者被视为操作码扩展,并且不用于对任何指令操作数进行编码。R/M字段7346的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)——如先前所述的,比例字段5450的内容用于存储器地址生成。SIB.xxx 7354和SIB.bbb 7356——先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段7262A(字节7-10)——当MOD字段7342包含10时,字节7-10是位移字段7262A,并且它与传统32位位移(disp32)一样地工作,并且以字节粒度工作。
位移因数字段7262B(字节7)——当MOD字段7342包含01时,字节7是位移因数字段7262B。该字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段7262B是disp8的重新解释;当使用位移因数字段7262B时,通过将位移因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。此类经压缩的位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移的冗余低阶位不需要被编码。换句话说,位移因数字段7262B替代传统x86指令集8位位移。由此,位移因数字段7262B以与x86指令集8位位移相同的方式被编码(因此,在ModRM/SIB编码规则中没有变化),唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度方面没有变化,而仅在有硬件对位移值的解释方面有变化(这需要将位移按比例缩放存储器操作数的尺寸以获得字节式地址偏移)。立即数字段7272如先前所述地操作。
完整操作码字段
图73B是图示根据本公开的一个实施例的构成完整操作码字段7274的具有专用向量友好指令格式7300的字段的框图。具体地,完整操作码字段7274包括格式字段7240、基础操作字段7242和数据元素宽度(W)字段7264。基础操作字段7242包括前缀编码字段7325、操作码映射字段7315和实操作码字段7330。
寄存器索引字段
图73C是图示根据本公开的一个实施例的构成寄存器索引字段7244的具有专用向量友好指令格式7300的字段的框图。具体地,寄存器索引字段7244包括REX字段7305、REX’字段7310、MODR/M.reg字段7344、MODR/M.r/m字段7346、VVVV字段7320、xxx字段7354和bbb字段7356。
扩充操作字段
图73D是图示根据本公开的一个实施例的构成扩充操作字段7250的具有专用向量友好指令格式7300的字段的框图。当类(U)字段7268包含0时,它表明EVEX.U0(A类7268A);当它包含1时,它表明EVEX.U1(B类7268B)。当U=0且MOD字段7342包含11(表明无存储器访问操作)时,α字段7252(EVEX字节3,位[7]–EH)被解释为rs字段7252A。当rs字段7252A包含1(舍入7252A.1)时,β字段7254(EVEX字节3,位[6:4]–SSS)被解释为舍入控制字段7254A。舍入控制字段7254A包括一位SAE字段7256和两位舍入操作字段7258。当rs字段7252A包含0(数据变换7252A.2)时,β字段7254(EVEX字节3,位[6:4]–SSS)被解释为三位数据变换字段7254B。当U=0且MOD字段7342包含00、01或10(表明存储器访问操作)时,α字段7252(EVEX字节3,位[7]–EH)被解释为驱逐提示(EH)字段7252B,并且β字段7254(EVEX字节3,位[6:4]–SSS)被解释为三位数据操纵字段7254C。
当U=1时,α字段7252(EVEX字节3,位[7]–EH)被解释为写掩码控制(Z)字段7252C。当U=1且MOD字段7342包含11(表明无存储器访问操作)时,β字段7254的一部分(EVEX字节3,位[4]–S0)被解释为RL字段7257A;当它包含1(舍入7257A.1)时,β字段7254的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为舍入操作字段7259A,而当RL字段7257A包含0(VSIZE7257.A2)时,β字段7254的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段7259B(EVEX字节3,位[6-5]–L1-0)。当U=1且MOD字段7342包含00、01或10(表明存储器访问操作)时,β字段7254(EVEX字节3,位[6:4]–SSS)被解释为向量长度字段7259B(EVEX字节3,位[6-5]–L1-0)和广播字段7257B(EVEX字节3,位[4]–B)。
示例性寄存器架构
图74是根据本公开的一个实施例的寄存器架构7400的框图。在所图示的实施例中,有32个512位宽的向量寄存器7410;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较低阶256个位叠加(overlay)在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)叠加在寄存器xmm0-15上。专用向量友好指令格式7300对这些被叠加的寄存器堆操作,如在以下表格中所图示。
换句话说,向量长度字段7259B在最大长度与一个或多个其他较短长度之间进行选择,其中每一个此类较短长度是前一长度的一半,并且不具有向量长度字段7259B的指令模板在最大向量长度上操作。此外,在一个实施例中,专用向量友好指令格式7300的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置要么保持与在指令之前相同,要么归零。
写掩码寄存器7415——在所图示的实施例中,存在8个写掩码寄存器(k0至k7),每一写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器7415的尺寸是16位。如先前所述,在本公开的一个实施例中,向量掩码寄存器k0无法用作写掩码;当将正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地禁止写掩码用于那条指令。
通用寄存器7425——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用以对存储器操作数寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器堆(x87栈)7445,在其上面重叠了MMX紧缩整数平坦寄存器堆7450——在所图示的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器来对64位紧缩整数数据执行操作,以及为在MMX与XMM寄存器之间执行的一些操作保存操作数。
本公开的替代实施例可以使用更宽的或更窄的寄存器。另外,本公开的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图75A是图示根据本公开的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图75B是示出根据本公开的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图75A-图75B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的适当子集,将描述乱序方面。
在图75A中,处理器流水线7500包括取出级7502、长度解码级7504、解码级7506、分配级7508、重命名级7510、调度(也被称为指派或发布)级7512、寄存器读取/存储器读取级7514、执行级7516、写回/存储器写入级7518、异常处置级7522和提交级7524。
图75B示出处理器核7590,该处理器核7590包括前端单元7530,该前端单元7530耦合到执行引擎单元7550,并且前端单元7530和执行引擎单元7550两者都耦合到存储器单元7570。核7590可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核7590可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元7530包括分支预测单元7532,该分支预测单元7532耦合到指令高速缓存单元7534,该指令高速缓存单元7534耦合到指令转换后备缓冲器(TLB)7536,该指令转换后备缓冲器7536耦合到指令取出单元7538,该指令取出单元7538耦合到解码单元7540。解码单元7540(或解码器或解码单元)可对指令(例如,宏指令)解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元7540可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核7590包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元7540中,或以其他方式在前端单元7530内)。解码单元7540耦合到执行引擎单元7550中的重命名/分配器单元7552。
执行引擎单元7550包括重命名/分配器单元7552,该重命名/分配器单元7552耦合到引退单元7554和一个或多个调度器单元的集合7556。(多个)调度器单元7556表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元7556耦合到(多个)物理寄存器堆单元7558。(多个)物理寄存器堆单元7558中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元7558包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元7558由引退单元7554重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元7554和(多个)物理寄存器堆单元7558耦合到(多个)执行集群7560。(多个)执行集群7560包括一个或多个执行单元的集合7562以及一个或多个存储器访问单元的集合7564。执行单元7562可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元7556、(多个)物理寄存器堆单元7558和(多个)执行集群7560示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元7564的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合7564耦合到存储器单元7570,该存储器单元7570包括数据TLB单元7572,该数据TLB单元7572耦合到数据高速缓存单元7574,该数据高速缓存单元7574耦合到第二级(L2)高速缓存单元7576。在一个示例性实施例中,存储器访问单元7564可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元7570中的数据TLB单元7572。指令高速缓存单元7534还耦合到存储器单元7570中的第二级(L2)高速缓存单元7576。L2高速缓存单元7576耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线7500:1)指令取出7538执行取出级7502和长度解码级7504;2)解码单元7540执行解码级7506;3)重命名/分配器单元7552执行分配级7508和重命名级7510;4)(多个)调度器单元7556执行调度级7512;5)(多个)物理寄存器堆单元7558和存储器单元7570执行寄存器读取/存储器读取级7514;执行集群7560执行执行级7516;6)存储器单元7570和(多个)物理寄存器堆单元7558执行写回/存储器写入级7518;7)各单元可牵涉到异常处置级7522;以及8)引退单元7554和(多个)物理寄存器堆单元7558执行提交级7524。
核7590可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核7590包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如英特尔超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元7534/7574以及共享的L2高速缓存单元7576,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图76A-图76B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图76A是根据本公开的实施例的单个处理器核以及它至管芯上互连网络7602的连接及其第二级(L2)高速缓存的本地适当子集7604的框图。在一个实施例中,指令解码单元7600支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存7606允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元7608和向量单元7610使用分开的寄存器集合(分别为标量寄存器7612和向量寄存器7614),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)高速缓存7606读回,但是本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地适当子集7604是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地适当子集,每个处理器核一个本地适当子集。每个处理器核具有到其自身的L2高速缓存的本地适当子集7604的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存适当子集7604中,并且可以与其他处理器核访问其自身的本地L2高速缓存适当子集并行地被快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存适当子集7604中,并在必要的情况下从其他适当子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图76B是根据本公开的实施例的图76A中的处理器核的一部分的展开图。图76B包括L1高速缓存7604的L1数据高速缓存7606A部分,以及关于向量单元7610和向量寄存器7614的更多细节。具体地,向量单元7610是16宽向量处理单元(VPU)(见16宽ALU 7628),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元7620支持对寄存器输入的混合,通过数值转换单元7622A-B支持数值转换,并且通过复制单元7624支持对存储器输入的复制。写掩码寄存器7626允许掩蔽所得的向量写入。
图77是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器7700的框图。图77中的实线框图示具有单个核7702A、系统代理7710、一个或多个总线控制器单元的集合7716的处理器7700,而虚线框的任选增加图示具有多个核7702A-N、系统代理单元7710中的一个或多个集成存储器控制器单元的集合7714以及专用逻辑7708的替代处理器7700。
因此,处理器7700的不同实现可包括:1)CPU,其中专用逻辑7708是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核7702A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核7702A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核7702A-N是大量通用有序核。因此,处理器7700可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器7700可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元的集合7706、以及耦合到集成存储器控制器单元的集合7714的外部存储器(未示出)。共享高速缓存单元的集合7706可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元7712将集成图形逻辑7708、共享高速缓存单元的集合7706以及系统代理单元7710/(多个)集成存储器控制器单元7714互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元7706与核7702A-N之间维持一致性。
在一些实施例中,一个或多个核7702A-N能够实现多线程化。系统代理7710包括协调和操作核7702A-N的那些部件。系统代理单元7710可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核7702A-N以及集成图形逻辑7708的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核7702A-N在架构指令集方面可以是同构的或异构的;即,核7702A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅适当子集或不同的指令集。
示例性计算机架构
图78-81是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图78,所示出的是根据本公开一个实施例的系统7800的框图。系统7800可以包括一个或多个处理器7810、7815,这些处理器耦合到控制器中枢7820。在一个实施例中,控制器中枢7820包括图形存储器控制器中枢(GMCH)7890和输入/输出中枢(IOH)7850(其可以在分开的芯片上);GMCH 7890包括存储器和图形控制器,存储器7840和协处理器7845耦合到该存储器和图形控制器;IOH 7850将输入/输出(I/O)设备7860耦合到GMCH7890。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器7840和协处理器7845直接耦合到处理器7810,并且控制器中枢7820与IOH 7850处于单个芯片中。存储器7840可包括编译器模块7840A,其例如用于存储代码,该代码当被执行时使处理器执行本公开的任何方法。
附加的处理器7815的任选性在图78中通过虚线来表示。每一处理器7810、7815可包括本文中描述的处理核中的一个或多个,并且可以是处理器7700的某一版本。
存储器7840可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢7820经由诸如前端总线(FSB)之类的多分支总线、诸如快速路径互连(QPI)之类的点对点接口、或者类似的连接7895来与(多个)处理器7810、7815进行通信。
在一个实施例中,协处理器7845是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢7820可包括集成图形加速器。
在物理资源7810、7815之间可以存在包括架构、微架构、热、功耗特性等的一系列品质度量方面的各种差异。
在一个实施例中,处理器7810执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器7810将这些协处理器指令识别为具有应当由附连的协处理器7845执行的类型。因此,处理器7810在协处理器总线或其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器7845。(多个)协处理器7845接受并执行所接收的协处理器指令。
现在参考图79,所示为根据本公开的实施例的更具体的第一示例性系统7900的框图。如图79中所示,多处理器系统7900是点对点互连系统,并且包括经由点对点互连7950耦合的第一处理器7970和第二处理器7980。处理器7970和7980中的每一个可以是某个版本的处理器7700。在本公开的一个实施例中,处理器7970和7980分别是处理器7810和7815,而协处理器7938是协处理器7845。在另一实施例中,处理器7970和7980分别是处理器7810、协处理器7845。
处理器7970和7980示出为分别包括集成存储器控制器(IMC)单元7972和7982。处理器7970还包括作为其总线控制器单元的部分的点对点(P-P)接口7976和7978;类似地,第二处理器7980包括P-P接口7986和7988。处理器7970、7980可经由使用点对点(P-P)接口电路7978、7988的P-P接口7950来交换信息。如图79中所示,IMC 7972和7982将处理器耦合至相应的存储器,即存储器7932和存储器7934,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器7970、7980可各自经由使用点对点接口电路7976、7994、7986、7998的各个P-P接口7952、7954来与芯片组7990交换信息。芯片组7990可以任选地经由高性能接口7939来与协处理器7938交换信息。在一个实施例中,协处理器7938是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组7990可以经由接口7996耦合到第一总线7916。在一个实施例中,第一总线7916可以是外围部件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明公开的范围不限于此。
如图79中所示,各种I/O设备7914可连同总线桥7918一起耦合到第一总线7916,该总线桥7918将第一总线7916耦合到第二总线7920。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器7915耦合到第一总线7916。在一个实施例中,第二总线7920可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线7920,这些设备包括例如键盘和/或鼠标7922、通信设备7927以及存储单元7928,该存储单元7928诸如可包括指令/代码和数据7930的盘驱动器或者其他大容量存储设备。此外,音频I/O 7924可以被耦合到第二总线7920。注意,其他架构是可能的。例如,代替图79的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图80,示出的是根据本发明公开的实施例的第二更具体的示例性系统8000的框图。图79和80中的类似元件使用类似的附图标记,并且从图80中省略了图79的某些方面以避免混淆图80的其他方面。
图80图示处理器7970、7980可分别包括集成存储器和I/O控制逻辑(“CL”)7972和7982。因此,CL 7972、7982包括集成存储器控制器单元,并包括I/O控制逻辑。图80图示不仅存储器7932、7934耦合到CL 7972、7982,而且I/O设备8014也耦合到控制逻辑7972、7982。传统I/O设备8015被耦合到芯片组7990。
现在参考图81,示出的是根据本发明公开的实施例的SoC 8100的框图。图77中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的任选的特征。在图81中,(多个)互连单元8102被耦合到:应用处理器8110,其包括一个或多个核的集合202A-N的集合以及(多个)共享高速缓存单元7706;系统代理单元7710;(多个)总线控制器单元7716;(多个)集成存储器控制器单元7714;一个或多个协处理器的集合8120,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元8130;直接存储器访问(DMA)单元8132;以及用于耦合到一个或多个外部显示器的显示单元8140。在一个实施例中,(多个)协处理器8120包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的(例如,机制的)各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明公开的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图79中图示的代码7930)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明公开的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图82是根据本发明公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图82示出可使用x86编译器8204来编译高级语言8202形式的程序,以生成可由具有至少一个x86指令集核的处理器8216原生执行的x86二进制代码8206。具有至少一个x86指令集核的处理器8216表示通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的实质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器8204表示可操作用于生成x86二进制代码8206(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器8216上执行。类似地,图82示出可以使用替代的指令集编译器8208来编译高级语言8202形式的程序,以生成可以由不具有至少一个x86指令集核的处理器8214(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码8210。指令转换器8212用于将x86二进制代码8206转换成可以由不具有x86指令集核的处理器8214原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码8210相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器8212通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码8206的软件、固件、硬件或其组合。
Claims (24)
1.一种装置,包括:
处理元件的空间阵列,所述处理元件的空间阵列包括用于接收包括多个节点的数据流图的输入的第一网络,其中,所述数据流图用于被叠加到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列用于当相应的传入操作数集到达所述数据流操作器中的每个数据流操作器时执行操作;
第一性能监视电路,所述第一性能监视电路由第二网络耦合至所述处理元件中的第一多个处理元件,以接收来自所述处理元件中的所述第一多个处理元件中的每个处理元件的至少一个监视值,基于来自所述处理元件中的所述第一多个处理元件中的每个处理元件的所述至少一个监视值生成第一经聚合的监视值,并且当第一阈值被所述第一经聚合的监视值超过时在第三网络上将所述第一经聚合的监视值发送到性能管理器电路;以及
所述性能管理器电路,所述性能管理器电路用于基于所述第一经聚合的监视值执行动作。
2.如权利要求1所述的装置,进一步包括第二性能监视电路,所述第二性能监视电路由第四网络耦合至所述处理元件中的不同的第二多个处理元件,以接收来自所述处理元件中的所述不同的第二多个处理元件中的每个处理元件的至少一个监视值,基于来自所述处理元件中的所述不同的第二多个处理元件中的每个处理元件的至少一个监视值生成第二经聚合的监视值,并且当第二阈值被所述第二经聚合的监视值超过时在所述第三网络上将所述第二经聚合的监视值发送到所述性能管理器电路,其中所述性能管理器电路用于基于所述第一经聚合的监视值和所述第二经聚合的监视值执行动作。
3.如权利要求1所述的装置,其中,所述第一性能监视电路包括匹配电路,所述匹配电路耦合至所述第二网络,以提供来自所述处理元件中的所述第一多个处理元件中的每个处理元件的多个监视值的适当子集,并且基于所述多个监视值的所述适当子集生成所述第一经聚合的监视值。
4.如权利要求3所述的装置,其中,所述第一性能监视电路包括寄存器,所述寄存器用于存储用于耦合至所述处理元件中的所述第一多个处理元件中的每个处理元件的切换装置的控制值,以使所述切换装置基于所述控制值选择所述适当子集。
5.如权利要求1所述的装置,其中,所述第一性能监视电路包括到所述处理元件中的所述第一多个处理元件中的每个处理元件的停止路径,所述停止路径用于当所述第一性能监视电路将所述第一经聚合的监视值发送到所述性能管理器电路时,停止所述处理元件中的所述第一多个处理元件中的每个处理元件。
6.如权利要求1所述的装置,其中,所述第一性能监视电路包括到所述处理元件中的所述第一多个处理元件中的每个处理元件的停止路径,所述停止路径用于当所述第一性能监视电路接收到来自所述性能管理器电路的转储清除值时,停止所述处理元件中的所述第一多个处理元件中的每个处理元件。
7.如权利要求1所述的装置,进一步包括请求地址文件电路,所述请求地址文件电路耦合至所述处理元件的空间阵列和高速缓存存储器,所述请求地址文件电路用于:
响应于来自所述处理元件的空间阵列的对数据访问的请求,经由所述第三网络访问所述高速缓存存储器中的数据,并且
响应于从所述第一性能监视电路接收到所述第一经聚合的监视值,在所述第三网络上将所述第一经聚合的监视值发送到所述性能管理器电路。
8.如权利要求7所述的装置,其中,所述请求地址文件电路包括异常管理器电路,所述异常管理器电路用于用标签标记所述第一经聚合的监视值,所述标签指示所述第一经聚合的监视值要被发送至所述性能管理器电路。
9.一种方法,包括:
将包括多个节点的数据流图的输入叠加到包括第一网络的处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器;
当相应的传入操作数集到达所述数据流操作器中的每个数据流操作器时,利用所述处理元件的空间阵列执行操作;
在第二网络上将至少一个监视值从所述处理元件中的第一多个处理元件中的每个处理元件发送到第一性能监视电路;
由所述第一性能监视电路基于来自所述处理元件中的所述第一多个处理元件中的每个处理元件的所述至少一个监视值生成第一经聚合的监视值;
当第一阈值被所述第一经聚合的监视值超过时,在第三网络上将所述第一经聚合的监视值发送到性能管理器电路;以及
由所述性能管理器电路基于所述第一经聚合的监视值执行动作。
10.如权利要求9所述的方法,进一步包括:
在第四网络上将至少一个监视值从所述处理元件中的不同的第二多个处理元件中的每个处理元件发送到第二性能监视电路;
由所述第二性能监视电路基于来自所述处理元件中的所述不同的第二多个处理元件中的每个处理元件的所述至少一个监视值生成第二经聚合的监视值;
当第二阈值被所述第二经聚合的监视值超过时,在所述第三网络上将所述第二经聚合的监视值发送到所述性能管理器电路;以及
由所述性能管理器电路基于所述第一经聚合的监视值和所述第二经聚合的监视值执行动作。
11.如权利要求9所述的方法,进一步包括:
由所述第一性能监视电路的匹配电路提供来自所述处理元件中的所述第一多个处理元件中的每个处理元件的多个监视值的适当子集,其中所述生成包括基于所述多个监视值的所述适当子集生成所述第一经聚合的监视值。
12.如权利要求11所述的方法,进一步包括:将用于耦合至所述处理元件中的所述第一多个处理元件中的每个处理元件的切换装置的控制值存储在所述第一性能监视电路的寄存器中,以使所述切换装置基于所述控制值选择所述适当子集。
13.如权利要求9所述的方法,进一步包括:当所述第一性能监视电路将所述第一经聚合的监视值发送到所述性能管理器电路时,在停止路径上将停止值从所述第一性能监视电路发送到所述处理元件中的所述第一多个处理元件中的每个处理元件,以停止所述处理元件中的所述第一多个处理元件中的每个处理元件。
14.如权利要求9所述的方法,进一步包括:当所述第一性能监视电路接收到来自所述性能管理器电路的转储清除值时,在停止路径上将停止值从所述第一性能监视电路发送到所述处理元件中的所述第一多个处理元件中的每个处理元件,以停止所述处理元件中的所述第一多个处理元件中的每个处理元件。
15.如权利要求9所述的方法,进一步包括:
将请求地址文件电路耦合至所述处理元件的空间阵列和高速缓存存储器;
响应于来自所述处理元件的空间阵列的对数据访问的请求,利用所述请求地址文件电路经由所述第三网络访问所述高速缓存存储器中的数据;以及
响应于从所述第一性能监视电路接收到所述第一经聚合的监视值,由所述请求地址文件电路在所述第三网络上将所述第一经聚合的监视值发送到所述性能管理器电路。
16.如权利要求15所述的方法,进一步包括:由所述请求地址文件电路的异常管理器电路用标签标记所述第一经聚合的监视值,所述标签指示所述第一经聚合的监视值要被发送至所述性能管理器电路。
17.一种存储代码的非暂态机器可读介质,所述代码当由机器执行时使所述机器执行方法,所述方法包括:
将包括多个节点的数据流图的输入叠加到包括第一网络的处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器;
当相应的传入操作数集到达所述数据流操作器中的每个数据流操作器时,利用所述处理元件的空间阵列执行操作;
在第二网络上将至少一个监视值从所述处理元件中的第一多个处理元件中的每个处理元件发送到第一性能监视电路;
由所述第一性能监视电路基于来自所述处理元件中的所述第一多个处理元件中的每个处理元件的所述至少一个监视值生成第一经聚合的监视值;
当第一阈值被所述第一经聚合的监视值超过时,在第三网络上将所述第一经聚合的监视值发送到性能管理器电路;以及
由所述性能管理器电路基于所述第一经聚合的监视值执行动作。
18.如权利要求17所述的非暂态机器可读介质,其中,所述方法进一步包括:
在第四网络上将至少一个监视值从所述处理元件中的不同的第二多个处理元件中的每个处理元件发送到第二性能监视电路;
由所述第二性能监视电路基于来自所述处理元件中的所述不同的第二多个处理元件中的每个处理元件的所述至少一个监视值生成第二经聚合的监视值;
当第二阈值被所述第二经聚合的监视值超过时,在所述第三网络上将所述第二经聚合的监视值发送到所述性能管理器电路;以及
由所述性能管理器电路基于所述第一经聚合的监视值和所述第二经聚合的监视值执行动作。
19.如权利要求17所述的非暂态机器可读介质,其中,所述方法进一步包括:
由所述第一性能监视电路的匹配电路提供来自所述处理元件中的所述第一多个处理元件中的每个处理元件的多个监视值的适当子集,其中所述生成包括基于所述多个监视值的所述适当子集生成所述第一经聚合的监视值。
20.如权利要求19所述的非暂态机器可读介质,其中,所述方法进一步包括:将用于耦合至所述处理元件中的所述第一多个处理元件中的每个处理元件的切换装置的控制值存储在所述第一性能监视电路的寄存器中,以使所述切换装置基于所述控制值选择所述适当子集。
21.如权利要求17所述的非暂态机器可读介质,其中,所述方法进一步包括:当所述第一性能监视电路将所述第一经聚合的监视值发送到所述性能管理器电路时,在停止路径上将停止值从所述第一性能监视电路发送到所述处理元件中的所述第一多个处理元件中的每个处理元件,以停止所述处理元件中的所述第一多个处理元件中的每个处理元件。
22.如权利要求17所述的非暂态机器可读介质,其中,所述方法进一步包括:当所述第一性能监视电路接收到来自所述性能管理器电路的转储清除值时,在停止路径上将停止值从所述第一性能监视电路发送到所述处理元件中的所述第一多个处理元件中的每个处理元件,以停止所述处理元件中的所述第一多个处理元件中的每个处理元件。
23.如权利要求17所述的非暂态机器可读介质,其中,所述方法进一步包括:
将请求地址文件电路耦合至所述处理元件的空间阵列和高速缓存存储器;
响应于来自所述处理元件的空间阵列的对数据访问的请求,利用所述请求地址文件电路经由所述第三网络访问所述高速缓存存储器中的数据;以及
响应于从所述第一性能监视电路接收到所述第一经聚合的监视值,由所述请求地址文件电路在所述第三网络上将所述第一经聚合的监视值发送到所述性能管理器电路。
24.如权利要求23所述的非暂态机器可读介质,其中,所述方法进一步包括:由所述请求地址文件电路的异常管理器电路用标签标记所述第一经聚合的监视值,所述标签指示所述第一经聚合的监视值要被发送至所述性能管理器电路。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/941,888 US20190303263A1 (en) | 2018-03-30 | 2018-03-30 | Apparatus, methods, and systems for integrated performance monitoring in a configurable spatial accelerator |
US15/941,888 | 2018-03-30 | ||
PCT/US2019/019965 WO2019190687A1 (en) | 2018-03-30 | 2019-02-28 | Apparatus, methods, and systems for integrated performance monitoring in a configurable spatial accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111566623A true CN111566623A (zh) | 2020-08-21 |
Family
ID=68055018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980006885.7A Pending CN111566623A (zh) | 2018-03-30 | 2019-02-28 | 用于可配置空间加速器中的集成性能监视的装置、方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20190303263A1 (zh) |
EP (1) | EP3776216A4 (zh) |
CN (1) | CN111566623A (zh) |
WO (1) | WO2019190687A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117892252A (zh) * | 2024-03-18 | 2024-04-16 | 浙江威星电子系统软件股份有限公司 | 基于大数据的智慧园区运营管理平台 |
Families Citing this family (37)
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 |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
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 |
US10565134B2 (en) | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast 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 |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US11277455B2 (en) | 2018-06-07 | 2022-03-15 | Mellanox Technologies, Ltd. | Streaming system |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US20200106828A1 (en) * | 2018-10-02 | 2020-04-02 | Mellanox Technologies, Ltd. | Parallel Computation Network Device |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
US11625393B2 (en) | 2019-02-19 | 2023-04-11 | Mellanox Technologies, Ltd. | High performance computing system |
EP3699770A1 (en) | 2019-02-25 | 2020-08-26 | Mellanox Technologies TLV Ltd. | Collective communication system and methods |
WO2020198566A1 (en) * | 2019-03-27 | 2020-10-01 | F0Cal, Inc. | Systems and methods for analyzing computational architectures |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
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 |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11475183B1 (en) * | 2019-07-29 | 2022-10-18 | Rockwell Collins, Inc. | Simulation environment with dynamic optimization of fidelity |
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 |
US11750699B2 (en) | 2020-01-15 | 2023-09-05 | Mellanox Technologies, Ltd. | Small message aggregation |
US11252027B2 (en) | 2020-01-23 | 2022-02-15 | Mellanox Technologies, Ltd. | Network element supporting flexible data reduction operations |
US12001929B2 (en) * | 2020-04-01 | 2024-06-04 | Samsung Electronics Co., Ltd. | Mixed-precision neural processing unit (NPU) using spatial fusion with load balancing |
US11876885B2 (en) | 2020-07-02 | 2024-01-16 | Mellanox Technologies, Ltd. | Clock queue with arming and/or self-arming features |
US12086080B2 (en) | 2020-09-26 | 2024-09-10 | Intel Corporation | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits |
US11429590B2 (en) * | 2020-10-15 | 2022-08-30 | International Business Machines Corporation | Protecting against invalid memory references |
US11556378B2 (en) | 2020-12-14 | 2023-01-17 | Mellanox Technologies, Ltd. | Offloading execution of a multi-task parameter-dependent operation to a network device |
US11983532B2 (en) | 2020-12-30 | 2024-05-14 | International Business Machines Corporation | Optimize bound information accesses in buffer protection |
US11966331B2 (en) | 2020-12-30 | 2024-04-23 | International Business Machines Corporation | Dedicated bound information register file for protecting against out-of-bounds memory references |
US11126574B1 (en) | 2021-02-12 | 2021-09-21 | SambaNova Systems, Inc. | Instrumentation profiling for reconfigurable processors |
US11922237B1 (en) | 2022-09-12 | 2024-03-05 | Mellanox Technologies, Ltd. | Single-step collective operations |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6725364B1 (en) * | 2001-03-08 | 2004-04-20 | Xilinx, Inc. | Configurable processor system |
US7200735B2 (en) * | 2002-04-10 | 2007-04-03 | Tensilica, Inc. | High-performance hybrid processor with configurable execution units |
US8078839B2 (en) * | 2007-12-13 | 2011-12-13 | Wave Semiconductor | Concurrent processing element system, and method |
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 |
US9727438B2 (en) * | 2010-08-25 | 2017-08-08 | Ab Initio Technology Llc | Evaluating dataflow graph characteristics |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
-
2018
- 2018-03-30 US US15/941,888 patent/US20190303263A1/en not_active Abandoned
-
2019
- 2019-02-28 CN CN201980006885.7A patent/CN111566623A/zh active Pending
- 2019-02-28 WO PCT/US2019/019965 patent/WO2019190687A1/en active Application Filing
- 2019-02-28 EP EP19776406.1A patent/EP3776216A4/en not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117892252A (zh) * | 2024-03-18 | 2024-04-16 | 浙江威星电子系统软件股份有限公司 | 基于大数据的智慧园区运营管理平台 |
Also Published As
Publication number | Publication date |
---|---|
EP3776216A4 (en) | 2021-12-29 |
EP3776216A1 (en) | 2021-02-17 |
WO2019190687A1 (en) | 2019-10-03 |
US20190303263A1 (en) | 2019-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111566623A (zh) | 用于可配置空间加速器中的集成性能监视的装置、方法和系统 | |
CN108268278B (zh) | 具有可配置空间加速器的处理器、方法和系统 | |
CN109215728B (zh) | 用于分布式存储器危险检测和错误恢复的存储器电路和方法 | |
US10445250B2 (en) | Apparatus, methods, and systems with a configurable spatial accelerator | |
US10515046B2 (en) | Processors, methods, and systems with a configurable spatial accelerator | |
US10387319B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features | |
US10445234B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features | |
CN111767236A (zh) | 用于可配置空间加速器中的存储器接口电路分配的装置、方法和系统 | |
US10469397B2 (en) | Processors and methods with configurable network-based dataflow operator circuits | |
CN111868702A (zh) | 用于可配置空间加速器中的远程存储器访问的装置、方法和系统 | |
CN111512298A (zh) | 用于可配置空间加速器中的条件队列的装置、方法和系统 | |
US10891240B2 (en) | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator | |
CN111512292A (zh) | 用于可配置空间加速器中的非结构化数据流的装置、方法和系统 | |
US20190205284A1 (en) | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator | |
US20190095383A1 (en) | Processors, methods, and systems for debugging a configurable spatial accelerator | |
US20190005161A1 (en) | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features | |
US11029958B1 (en) | Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator | |
US12086080B2 (en) | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits | |
US10459866B1 (en) | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator | |
US10853073B2 (en) | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator | |
US10678724B1 (en) | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator | |
CN111767080A (zh) | 用于可配置空间加速器中的操作的设备、方法和系统 | |
CN112148647A (zh) | 用于存储器接口电路仲裁的装置、方法和系统 | |
CN112148664A (zh) | 用于可配置空间加速器中的时间复用的装置、方法和系统 | |
US11907713B2 (en) | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |