CN111868702A - 用于可配置空间加速器中的远程存储器访问的装置、方法和系统 - Google Patents
用于可配置空间加速器中的远程存储器访问的装置、方法和系统 Download PDFInfo
- Publication number
- CN111868702A CN111868702A CN201980020304.5A CN201980020304A CN111868702A CN 111868702 A CN111868702 A CN 111868702A CN 201980020304 A CN201980020304 A CN 201980020304A CN 111868702 A CN111868702 A CN 111868702A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- interface circuit
- memory interface
- network
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0853—Cache with multiport tag or data arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
- G06F13/1663—Access to shared memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
- G06F12/1063—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/68—Details of translation look-aside buffer [TLB]
- G06F2212/681—Multi-level TLB, e.g. microTLB and main TLB
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/68—Details of translation look-aside buffer [TLB]
- G06F2212/684—TLB miss handling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Advance Control (AREA)
Abstract
描述了与可配置空间加速器中的远程存储器访问有关的系统、方法和装置。在一个实施例中,一种可配置空间加速器包括:耦合到第一处理元件和缓存的第一存储器接口电路,第一存储器接口电路用于向缓存发出存储器请求,存储器请求包括字段来将第二存储器接口电路标识为针对存储器请求的数据的接收者;以及耦合到第二处理元件和缓存的第二存储器接口电路,第二存储器接口电路用于当针对存储器请求的数据到达第二存储器接口电路处并且第二存储器接口电路的完成配置寄存器被设置为远程响应值时,向第一存储器接口电路发送信用返回值,以使得第一存储器接口电路将存储器请求标记为完成。
Description
关于联邦政府赞助研究和开发的声明
本发明是根据国防部授予的合同号H98230-13-D-0124、在政府支持下作出的。政府对于本发明拥有某些权利。
技术领域
本公开概括而言涉及电子设备,更具体而言,本公开的实施例涉及用于在可配置空间加速器中提供远程存储器访问的电路。
背景技术
处理器或者处理器的集合执行来自指令集的指令,例如指令集体系结构(instruction set architecture,ISA)。指令集是与编程有关的计算机体系结构的一部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理以及外部输入和输出(I/O)。应当注意这里的术语指令可以指宏指令,例如提供到处理器以便执行的指令,或者指微指令,例如由处理器的解码器对宏指令解码而产生的指令。
附图说明
在附图中以示例而非限制方式图示了本公开,附图中相似的标记指示类似的要素,并且其中:
图1根据本公开的实施例图示了加速器分片。
图2根据本公开的实施例图示了耦合到存储器的硬件处理器。
图3A根据本公开的实施例图示了程序源。
图3B根据本公开的实施例图示了图3A的程序源的数据流图。
图3C根据本公开的实施例图示了具有被配置为执行图3B的数据流图的多个处理元件的加速器。
图4根据本公开的实施例图示了数据流图的示例执行。
图5根据本公开的实施例图示了程序源。
图6根据本公开的实施例图示了包括处理元件的阵列的加速器分片。
图7A根据本公开的实施例图示了可配置数据路径网络。
图7B根据本公开的实施例图示了可配置流控制路径网络。
图8根据本公开的实施例图示了包括加速器的硬件处理器分片。
图9根据本公开的实施例图示了处理元件。
图10根据本公开的实施例图示了请求地址文件(RAF)电路。
图11根据本公开的实施例图示了耦合在多个加速器分片和多个缓存堆之间的多个请求地址文件(RAF)电路。
图12根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路。
图13根据本公开的实施例图示了耦合在加速器分片和多个缓存堆之间的具有远程信用返回微体系结构的多个请求地址文件(RAF)电路。
图14根据本公开的实施例图示了耦合到具有远程信用返回微体系结构的第二请求地址文件(RAF)电路的具有远程信用返回微体系结构的第一请求地址文件(RAF)电路。
图15A至图15G根据本公开的实施例图示了图14的具有远程信用返回微体系结构的第一请求地址文件(RAF)电路和具有远程信用返回微体系结构的第二请求地址文件(RAF)电路执行操作的周期。
图16根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的控制电路。
图17根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的存储器请求的示例格式。
图18根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的接收者完成控制流寄存器的接收者完成控制流值的示例格式。
图19根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的接收者完成配置寄存器的响应值的示例格式。
图20根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的交换机配置寄存器和交换机。
图21根据本公开的实施例图示了由分组交换网络耦合到具有远程信用返回微体系结构的第二请求地址文件(RAF)电路的具有远程信用返回微体系结构的第一请求地址文件(RAF)电路。
图22根据本公开的实施例图示了流程图。
图23根据本公开的实施例图示了伪代码函数调用的数据流图。
图24根据本公开的实施例图示了具有多个网络数据流端点电路的处理元件的空间阵列。
图25根据本公开的实施例图示了网络数据流端点电路。
图26根据本公开的实施例图示了发送操作和接收操作的数据格式。
图27根据本公开的实施例图示了发送操作的另一数据格式。
图28根据本公开的实施例图示了配置电路元件(例如,网络数据流端点电路)数据格式来针对发送(例如,切换)操作和接收(例如,拾取)操作配置电路元件(例如,网络数据流端点电路)。
图29根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路上的情况下针对发送操作配置电路元件(例如,网络数据流端点电路)。
图30根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路上的情况下针对选中操作配置电路元件(例如,网络数据流端点电路)。
图31根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路上的情况下针对Switch操作配置电路元件(例如,网络数据流端点电路)。
图32根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路上的情况下针对SwitchAny操作配置电路元件(例如,网络数据流端点电路)。
图33根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路上的情况下针对Pick操作配置电路元件(例如,网络数据流端点电路)。
图34根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路上的情况下针对PickAny操作配置电路元件(例如,网络数据流端点电路)。
图35根据本公开的实施例图示了网络数据流端点电路选择操作来执行。
图36根据本公开的实施例图示了网络数据流端点电路。
图37根据本公开的实施例图示了网络数据流端点电路在执行拾取操作的同时接收输入零(0)。
图38根据本公开的实施例图示了网络数据流端点电路在执行拾取操作的同时接收输入一(1)。
图39根据本公开的实施例图示了网络数据流端点电路在执行拾取操作的同时输出选中输入。
图40根据本公开的实施例图示了流程图。
图41根据本公开的实施例图示了被划分成三个区域(结果区域、三个潜在进位区域、以及门控区域)的浮点乘法器。
图42根据本公开的实施例图示了具有多个处理元件的加速器的运行中配置。
图43根据本公开的实施例图示了运行中管线式提取的快照。
图44根据本公开的实施例图示了加速器的编译工具链。
图45根据本公开的实施例图示了加速器的编译器。
图46A根据本公开的实施例图示了循序汇编代码。
图46B根据本公开的实施例图示了图46A的循序汇编代码的数据流汇编代码。
图46C根据本公开的实施例对于加速器图示了图46B的数据流汇编代码的数据流图。
图47A根据本公开的实施例图示了C源代码。
图47B根据本公开的实施例图示了图47A的C源代码的数据流汇编代码。
图47C根据本公开的实施例对于加速器图示了图47B的数据流汇编代码的数据流图。
图48A根据本公开的实施例图示了C源代码。
图48B根据本公开的实施例图示了图48A的C源代码的数据流汇编代码。
图48C根据本公开的实施例对于加速器图示了图48B的数据流汇编代码的数据流图。
图49A根据本公开的实施例图示了流程图。
图49B根据本公开的实施例图示了流程图。
图50根据本公开的实施例图示了吞吐量对每操作能量图。
图51根据本公开的实施例图示了包括处理元件的阵列和本地配置控制器的加速器分片。
图52A-图52C根据本公开的实施例图示了本地配置控制器配置数据路径网络。
图53根据本公开的实施例图示了配置控制器。
图54根据本公开的实施例图示了包括处理元件的阵列、配置缓存和本地配置控制器的加速器分片。
图55根据本公开的实施例图示了包括处理元件的阵列和具有重配置电路的配置和异常处理控制器的加速器分片。
图56根据本公开的实施例图示了重配置电路。
图57根据本公开的实施例图示了包括处理元件的阵列和具有重配置电路的配置和异常处理控制器的加速器分片。
图58根据本公开的实施例图示了包括处理元件的阵列和耦合到分片级异常聚合器的夹层异常聚合器的加速器分片。
图59根据本公开的实施例图示了具有异常生成器的处理元件。
图60根据本公开的实施例图示了包括处理元素的阵列和本地提取控制器的加速器分片。
图61A-图61C根据本公开的实施例图示了本地提取控制器配置数据路径网络。
图62根据本公开的实施例图示了提取控制器。
图63根据本公开的实施例图示了流程图。
图64根据本公开的实施例图示了流程图。
图65A是根据本公开的实施例的采用介于存储器子系统和加速硬件之间的存储器排序电路的系统的框图。
图65B是图65A的系统的框图,但根据本公开的实施例采用了多个存储器排序电路。
图66是根据本公开的实施例图示出进出加速硬件的存储器操作的一般功能的框图。
图67是根据本公开的实施例图示出存储操作的空间依从流的框图。
图68是根据本公开的实施例的图65的存储器排序电路的详细框图。
图69是根据本公开的实施例的图65的存储器排序电路的微体系结构的流程图。
图70是根据本公开的实施例的可执行确定器电路的框图。
图71是根据本公开的实施例的优先级编码器的框图。
图72是根据本公开的实施例的逻辑的和二进制的示范性加载操作的框图。
图73A是根据本公开的实施例图示出示例代码的逻辑执行的流程图。
图73B是图73A的流程图,根据本公开的实施例图示出示例代码的展开版本中的存储器级并行性。
图74A是根据本公开的实施例的用于加载操作和存储操作的示范性存储器参量的框图。
图74B是根据本公开的实施例图示出例如图74A中那样的加载操作和存储操作通过图69的存储器排序电路的微体系结构的流程的框图。
图75A、图75B、图75C、图75D、图75E、图75F、图75G和图75H是根据本公开的实施例图示出示范性程序的加载操作和存储操作通过图75B的微体系结构的队列的功能流程的框图。
图76是根据本公开的实施例用于在加速硬件和无序存储器子系统之间对存储器操作排序的方法的流程图。
图77A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图。
图77B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。
图78A是根据本公开的实施例图示出图77A和图77B中的通用向量友好指令格式的字段的框图。
图78B是根据本公开的一个实施例图示出构成完整操作码字段的图78A中的特定向量友好指令格式的字段的框图。
图78C是根据本公开的一个实施例图示出构成寄存器索引字段的图78A中的特定向量友好指令格式的字段的框图。
图78D是根据本公开的一个实施例图示出构成增强操作字段7750的图78A中的特定向量友好指令格式的字段的框图。
图79是根据本公开的一个实施例的寄存器体系结构的框图。
图80A是根据本公开的实施例图示出示范性有序管线和示范性寄存器重命名、无序发出/执行管线两者的框图。
图80B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、无序发出/执行体系结构核心两者的框图。
图81A是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图。
图81B是根据本公开的实施例的图81A中的处理器核心的一部分的扩展视图。
图82是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。
图83是根据本公开的一个实施例的系统的框图。
图84是根据本公开的实施例的更具体示范性系统的框图。
图85是根据本公开的实施例的第二更具体示范性系统的框图。
图86是根据本发明的实施例的片上系统(SoC)的框图。
图87是根据本公开的实施例对使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令进行对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现本公开的实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但每个实施例可不一定包括该特定特征、结构或特性。而且,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。
处理器(例如,具有一个或多个核心)可执行指令(例如,指令的线程)以对数据进行操作,例如以执行算术的、逻辑的或者其他功能。例如,软件可请求操作,并且硬件处理器(例如,其一个或多个核心)可响应于该请求而执行该操作。操作的一个非限制性示例是混合操作来输入多个向量元素并且输出具有混合多个元素的向量。在某些实施例中,通过单个指令的执行实现多个操作。
例如由能源部定义的百万兆级性能可要求系统级浮点性能在给定的(例如,20MW)功率预算内超过10^18浮点操作每秒(exaFLOP)或更多。这里的某些实施例针对的是例如处理器的处理元件(例如,以高性能计算(high performance computing,HPC)为目标的可配置空间加速器(configurable spatial accelerator,CSA))的空间阵列。这里的处理元件(例如,CSA)的空间阵列的某些实施例以数据流图的直接执行为目标以产生远超过传统路线图体系结构的、计算上密集然而能量高效的空间微体系结构。例如,除了通信网络在处理元件、存储器等等之间路由数据和/或通信网络执行其他通信(例如,非数据处理)操作以外,这里的某些实施例还将(例如,高基数)数据流操作覆盖在通信网络上。例如,除了通信网络在处理元件、存储器等等之间路由数据或者通信网络执行其他通信操作以外,这里的某些实施例还针对的是处理元件(例如,CSA)的空间阵列的(例如,耦合到它的)通信网络(例如,分组交换网络)来执行某些数据流操作。这里的某些实施例针对的是(例如,各自)执行例如数据流图的一个或多个数据流操作(例如,其一部分或全部)的网络数据流端点电路,所述数据流操作例如可以是拾取(pick)或切换(switch)数据流操作。这里的某些实施例包括增强型网络端点(例如,网络数据流端点电路)来支持对于(一个或多个)数据流操作(例如,多个数据流操作或者其子集)的控制,例如利用网络端点来执行(例如,数据流)操作,而不是处理元件(例如,核心)或者算术-逻辑单元(例如,执行算术和逻辑操作)执行该(例如,数据流)操作。在一个实施例中,网络数据流端点电路与空间阵列(例如,其互连或架构)和/或处理元件是分离的。
下面还包括对处理元件(例如,CSA)的空间阵列的实施例的体系结构原理及其某些特征的描述。与任何革新性体系结构一样,可编程性可能是一个风险。为了缓和这个问题,CSA体系结构的实施例是与编译工具链共同设计的,这也在下文论述。
介绍
百万兆级计算目标可要求激进的功率预算(例如,20MW)内的巨大系统级浮点性能(例如,1ExaFLOP)。然而,利用经典的冯·诺依曼(von Neumann)体系结构同时改善程序执行的性能和能量效率已变得困难:无序调度、同时多线程处理、复杂寄存器文件和其他结构提供了性能,但是具有高能量成本。这里的某些实施例同时实现性能和能量要求。百万兆级计算功率-性能目标可既要求高吞吐量也要求每操作的低能量消耗。这里的某些实施例通过提供大量的低复杂度、能量高效的处理(例如,计算)元件来提供这一点,这些处理元件很大程度上消除了先前处理器设计的控制开销。以这个观察为引导,这里的某些实施例包括处理元件的空间阵列,例如可配置空间加速器(CSA)的空间阵列,例如包括由一组轻量级、背压式(例如,通信)网络连接的处理元件(processing element,PE)的阵列。CSA分片的一个示例在图1中描绘。处理(例如,计算)元件的某些实施例是数据流操作器,例如如下多个数据流操作器,其只在(i)输入数据已到达了数据流操作器并且(ii)有空间可用于存储输出数据时才处理输入数据,例如,否则不发生处理。(例如,加速器或CSA)的某些实施例不利用触发的指令。
图1根据本公开的实施例图示了处理元件的空间阵列的加速器分片100实施例。加速器分片100可以是更大的分片(tile)的一部分。加速器分片100执行一个或多个数据流图。数据流图(dataflow graph)一般可以指在循序代码的编译中出现的显式并行程序描述。这里的某些实施例(例如,CSA)允许数据流图被直接配置到CSA阵列上,而不是例如被变换成循序指令流。这里的某些实施例允许第一(例如,类型的)数据流操作被空间阵列中的一个或多个处理元件(PE)执行,并且额外地或者替换地,允许第二(例如,不同类型的)数据流操作被空间阵列的网络通信电路(例如,端点)中的一个或多个执行。
从循序编译流得出数据流图允许了CSA的实施例支持常见的编程模型并且直接(例如,在不使用工作表的情况下)执行现有的高性能计算(HPC)代码。CSA处理元件(PE)可以是能量高效的。在图1中,存储器接口102可耦合到存储器(例如,图2中的存储器202)以允许加速器分片100对(例如,片外)存储器访问(例如,加载和/或存储)数据。所描绘的加速器分片100是由经由互连网络104耦合在一起的若干种类的PE构成的异质阵列。加速器分片100可包括整数算术PE、浮点算术PE、通信电路(例如,网络数据流端点电路)和架构中(in-fabric)存储装置中的一个或多个,例如作为处理元件101的空间阵列的一部分。数据流图(例如,编译的数据流图)可被覆盖在加速器分片100上以便执行。在一个实施例中,对于特定的数据流图,每个PE只处理该图的一个或两个(例如,数据流)操作。PE的阵列可以是异质的,例如使得没有PE支持完全CSA数据流体系结构和/或一个或多个PE被编程(例如,定制)为只支持几个、但是非常高效的操作。这里的某些实施例从而产生了一种处理器或加速器,其具有处理元件的阵列,该阵列与路线图体系结构相比是计算上密集的,然而相对于现有的HPC产品却实现了能量效率和性能上的大约一量级的增益。
这里的某些实施例从处理元件(例如,CSA)的(例如,密集)空间阵列内的并行执行提供了性能增长,其中所利用的每个PE和/或网络数据流端点电路可同时执行其操作,例如如果输入数据可用的话。效率增大可起因于每个PE和/或网络数据流端点电路的效率,例如其中每个PE的操作(例如,行为)在每个配置(例如,映射)步骤中被固定一次并且执行发生在本地数据到达PE时,例如不考虑其他架构活动,和/或每个网络数据流端点电路的操作(例如,行为)在被配置(例如,映射)时是可变的(例如,不固定)。在某些实施例中,PE和/或网络数据流端点电路是数据流操作器(例如,每者是单个数据流操作器),例如如下数据流操作器:其仅在(i)输入数据已到达数据流操作器并且(ii)有空间可用于存储输出数据时才对输入数据进行操作,例如否则没有操作发生。
这里的某些实施例包括将处理元件的空间阵列作为加速用户应用的一种能量高效且高性能的方式。在一个实施例中,应用被以极为并行的方式来映射。例如,内循环可被展开多次以改善并行性。此方案可提供高性能,例如当展开的代码的占用率(例如,使用率)较高时。然而,如果在循环体中有较少使用的代码路径被展开(例如,像浮点去正规化(de-normalized)模式这样的异常代码路径),则处理元件的空间阵列(例如,其架构区域)可被浪费并且吞吐量因此丧失。
这里用于降低处理元件的空间阵列(例如,其架构区域)上的压力(例如,在未充分利用的代码段的情况下)的一个实施例是时间复用。在此模式中,较少使用的(例如,较冷的)代码的单个实例可在若干个循环体之间被共享,例如类似于共享库中的函数调用。在一个实施例中,(例如,处理元件的)空间阵列支持复用代码的直接实现。然而,例如,当空间阵列中的复用或解复用涉及在许多遥远的目标(例如,共享者)之间进行选择时,使用数据流操作器(例如,使用处理元件)的直接实现方式就时延、吞吐量、实现面积和/或能量而言可能是效率低下的。这里的某些实施例描述了支持(例如,高基数)复用或解复用的硬件机制(例如,网络电路)。这里的某些实施例(例如,网络数据流端点电路的实施例)允许在只有很少硬件开销或性能影响的情况下对许多目标(例如,共享者)的聚合。这里的某些实施例允许了将(例如,传统的)循序代码编译到空间阵列中的并行体系结构。
在一个实施例中,多个网络数据流端点电路组合为单个数据流操作器,例如如下文参考图24所述。作为非限制性示例,在下面列出某些(例如,高(例如,4-6)基数)数据流操作器。
“Pick”(拾取)数据流操作器的实施例将从多个输入通道选择数据(例如,令牌)并且根据控制数据提供该数据作为其(例如,单个)输出。用于Pick的控制数据可包括输入选择器值。在一个实施例中,选中的(selected)输入通道的数据(例如,令牌)会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。在一个实施例中,此外,那些未选中的(non-selected)输入通道的数据(例如,令牌)也会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。
“PickSingleLeg”(拾取单分腿)数据流操作器的一个实施例是从多个输入通道选择数据(例如,令牌)并且根据控制数据提供该数据作为其(例如,单个)输出,但在某些实施例中,未选中的输入通道被忽略,例如,那些未选中的输入通道的数据(例如,令牌)不会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。用于PickSingleLeg的控制数据可包括输入选择器值。在一个实施例中,选中的输入通道的数据(例如,令牌)也会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。
“PickAny”(拾取任何)数据流操作器的一个实施例从多个输入通道选择第一可用(例如,对于执行该操作的电路而言可用)数据(例如,令牌)并且提供该数据作为其(例如,单个)输出。在一个实施例中,PickSingleLeg也将输出其数据被选中的索引(例如,指出多个输入通道中的哪一个)。在一个实施例中,选中的输入通道的数据(例如,令牌)会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。在某些实施例中,未选中的输入通道(例如,具有或不具有输入数据)被忽略,例如那些未选中的输入通道的数据(例如,令牌)不会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。PickAny的控制数据可包括与PickAny相对应的值,例如没有输入选择器值。
“Switch”(切换)数据流操作器的一种实施例将会操控(例如,单个)输入数据(例如,令牌)以便根据控制数据将该输入数据提供到一个或多个(例如,少于全部)输出。Switch的控制数据可包括一个或多个输出选择器值。在一个实施例中,输入数据(例如,来自输入通道)的数据(例如,令牌)会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。
“SwitchAny”(切换任何)数据流操作器的一个实施例将会操控(例如,单个)输入数据(例如,令牌)以便例如根据控制数据将该输入数据提供到一个或多个(例如,少于全部)可接收该数据的输出。在一个实施例中,SwitchAny可将输入数据提供到在其入口缓冲器(例如,图25中的网络入口缓冲器)中具有可用性(例如,可用存储空间)的任何耦合的输出通道。SwitchAny的控制数据可包括与SwitchAny相对应的值,例如没有一个或多个输出选择器值。在一个实施例中,输入数据(例如,来自输入通道)的数据(例如,令牌)会被去除(例如,丢弃),以例如完成该数据流操作(或者它的那部分数据流操作)的执行。在一个实施例中,SwitchAny也将输出其将输入数据提供(例如,发送)到的索引(例如,指出多个输出通道中的哪一个)。SwitchAny可被利用来管理空间阵列中的复制子图,例如展开的循环。
这里的某些实施例从而在广泛类别的现有单流和并行程序上提供了颠覆水平的性能和能量效率的巨大改善,例如所有这些都同时保留了常见的HPC编程模型。这里的某些实施例可针对HPC,从而使得浮点能量效率极为重要。这里的某些实施例不仅实现性能的引人注目的改善和能量的降低,而且也将这些增益实现到以主流HPC语言编写的以及用于主流HPC框架的现有HPC程序。这里的体系结构的某些实施例(例如,考虑到编译)提供了若干个扩展,直接支持由现代编译器生成的控制-数据流内部表示。这里的某些实施例针对的是CSA数据流编译器,例如其可接受C、C++和Fortran编程语言,以针对CSA体系结构。
图2根据本公开的实施例图示了耦合到(例如,连接到)存储器202的硬件处理器200。在一个实施例中,硬件处理器200和存储器202是计算系统201。在某些实施例中,加速器中的一个或多个是根据本公开的CSA。在某些实施例中,处理器中的核心中的一个或多个是本文公开的那些核心。硬件处理器200(例如,其每个核心)可包括硬件解码器(例如,解码单元)和硬件执行单元。硬件处理器200可包括寄存器。注意这里的附图可不描绘所有数据通信耦合(例如,连接)。本领域普通技术人员将会明白,这是为了不模糊附图中的某些细节。注意附图中的双箭头可不要求双向通信,例如,其可指示单向通信(例如,去往或来自该组件或设备)。在这里的某些实施例中可利用通信路径的任何或所有组合。所描绘的硬件处理器200根据本公开的实施例包括多个核心(O到N,其中N可以是1或更多)和硬件加速器(O到M,其中M可以是1或更多)。硬件处理器200(例如,其(一个或多个)加速器和/或核心)可耦合到存储器202(例如,数据存储设备)。硬件解码器(例如,核心的硬件解码器)可接收(例如,单个)指令(例如,宏指令)并且对该指令解码,例如解码成微指令和/或微操作。硬件执行单元(例如,核心的硬件执行单元)可执行解码的指令(例如,宏指令)以执行一个或多个操作。
下面的第1节公开了CSA体系结构的实施例。具体地,公开了将存储器集成在数据流执行模型内的新颖实施例。第2节深入研究了CSA的实施例的微体系结构细节。在一个实施例中,CSA的主要目标是支持编译器产生的程序。下面的第3节考查了CSA编译工具链的实施例。在第4节中在编译代码的执行中比较了CSA的实施例与其他体系结构相比的优点。最后,在第5节中论述了CSA微体系结构的实施例的性能,在第6节中论述了进一步的CSA细节,并且在第7节中提供了总结。
1.CSA体系结构
CSA的某些实施例的目标是迅速且高效地执行程序,例如由编译器产生的程序。CSA体系结构的某些实施例提供了支持编译器技术和编程范式的需求的编程抽象。CSA的实施例执行数据流图,例如紧密类似于编译器自己对编译的程序的内部表示(internalrepresentation,IR)的程序表征。在这个模型中,程序被表示为数据流图,该数据流图包括从一组从体系结构上定义的(例如,涵盖计算和控制操作两者的)数据流操作器所描绘的节点(例如,顶点)和表示数据在数据流操作器之间的传送的边缘。执行可通过将数据流令牌(例如,是或者表示数据值的数据流令牌)注入到数据流图中来进行。令牌可在每个节点(例如,顶点)之间流动并且在每个节点处被变换,例如形成完整的计算。样本数据流图及其从高级别源代码的得出物在图3A-图3C中示出,并且图5示出了数据流图的执行的示例。
通过恰好提供编译器要求的那些数据流图执行支持,来针对数据流图执行配置CSA的实施例。在一个实施例中,CSA是加速器(例如,图2中的加速器)并且其不追求提供通用处理核心(例如,图2中的核心)上可用的、一些必要但不常使用的机制,例如系统调用。因此,在此实施例中,CSA可执行许多代码,但不是所有代码。作为交换,CSA赢得了显著的性能和能量优点。为了使得能够以通常使用的循序语言编写的代码的加速,这里的实施例还引入了若干个新颖的体系结构特征来辅助编译器。一个特别的新颖之处是CSA对存储器的对待,这是一个先前被忽略或者被不充分解决的主题。CSA的实施例在使用数据流操作器而不是查找表(lookup table,LUT)作为其基本体系结构接口方面也是独特的。
转到CSA的实施例,接下来论述数据流操作器。
1.1数据流操作器
加速器(例如,CSA)的实施例的关键体系结构接口是数据流操作器,例如作为数据流图中的节点的直接表示。从操作角度来看,数据流操作器以流式或数据驱动的方式运转。数据流操作器一旦其传入操作对象变得可用就可执行。CSA数据流执行可取决于(例如,仅取决于)高度本地化的状态,例如产生了具有分布式异步执行模型的高度可缩放的体系结构。数据流操作器可包括算术数据流操作器,例如浮点加法和乘法、整数加法、减法和乘法、各种形式的比较、逻辑操作器和移位中的一个或多个。然而,CSA的实施例也可包括控制操作器的丰富集合,其辅助程序图中的数据流令牌的管理。这些的示例包括“拾取”操作器,例如,其将两个或更多个逻辑输入通道复用成单个输出通道,以及“切换”操作器,例如其作为通道解复用器操作(例如,从两个或更多个逻辑输入通道输出单个通道)。这些操作器可使得编译器能够实现控制范式,例如条件表达式。CSA的某些实施例可包括有限数据流操作器集合(例如,限于相对少量的操作)以产生密集且能量高效的PE微体系结构。某些实施例可包括用于HPC代码中常见的复杂操作的数据流操作器。CSA数据流操作器体系结构是高度服从于依部署而定的扩展的。例如,更复杂的数学数据流操作器,例如三角函数,可被包括在某些实施例中以加速某些数学密集的HPC工作负荷。类似地,神经网络调节的扩展可包括用于向量化的低精度算术的数据流操作器。
图3A根据本公开的实施例图示了程序源。程序源代码包括乘法函数(func)。图3B根据本公开的实施例图示了图3A的程序源的数据流图300。数据流图300包括拾取节点304、切换节点306和乘法节点308。沿着通信路径中的一个或多个可以可选地包括缓冲器。所描绘的数据流图300可执行如下操作:利用拾取节点304选择输入X、将X乘以Y(例如,乘法节点308)并且随后从切换节点306的左输出输出结果。图3C根据本公开的实施例图示了具有被配置为执行图3B的数据流图的多个处理元件301的加速器(例如,CSA)。更具体而言,数据流图300被覆盖到处理元件301(例如,以及其间的(一个或多个)(例如,互连)网络)的阵列中,例如,使得数据流图300的每个节点被表示为处理元件301的阵列中的数据流操作器。例如,某些数据流操作可利用处理元件来实现和/或某些数据流操作可利用通信网络(例如,其网络数据流端点电路)来实现。例如,Pick、PickSingleLeg、PickAny、Switch和/或SwitchAny操作可利用通信网络的一个或多个组件(例如,其网络数据流端点电路)来实现,例如而不是利用处理元件来实现。
在一个实施例中,处理元件301的阵列中的处理元件中的一个或多个将通过存储器接口302访问存储器。在一个实施例中,数据流图300的拾取节点304从而对应于拾取操作器304A(例如,由拾取操作器304A表示),数据流图300的切换节点306从而对应于切换操作器306A(例如,由切换操作器306A表示),并且数据流图300的乘法器节点308从而对应于乘法器操作器308A(例如,由乘法器操作器308A表示)。另一处理元件和/或流控制路径网络可向拾取操作器304A和切换操作器306A提供控制信号(例如,控制令牌)以执行图3A中的操作。在一个实施例中,处理元件301的阵列被配置为在执行开始之前执行图3B的数据流图300。在一个实施例中,编译器执行从图3A-图3B的转换。在一个实施例中,数据流图节点到处理元件的阵列中的输入逻辑上将数据流图嵌入到处理元件的阵列中,例如如下文进一步论述,使得输入/输出路径被配置为产生期望的结果。
1.2时延不敏感通道
通信弧是数据流图的第二个主要成分。CSA的某些实施例将这些弧描述为时延不敏感通道,例如,按序背压式(例如,不产生或发送输出,直到有地方存储输出为止)点到点通信通道。与数据流操作器一样,时延不敏感通道根本上是异步的,从而给出了构成许多类型的网络来实现特定图的通道的自由。时延不敏感通道可具有任意长的时延并且仍忠实地实现CSA体系结构。然而,在某些实施例中,就性能和能量而言,有强烈的动机使得时延尽可能小。这里的2.2节公开了一种网络微体系结构,其中数据流图通道是以管线方式实现的,具有不多于一个周期的时延。时延不敏感通道的实施例提供了关键抽象层,该关键抽象层可结合CSA体系结构被利用来向应用编程者提供数个运行时(runtime)服务。例如,CSA在CSA配置(将程序加载到CSA阵列上)的实现中可利用时延不敏感通道。
图4根据本公开的实施例图示了数据流图400的示例执行。在步骤1,输入值(例如,对于图3B中的X是1并且对于图3B中的Y是2)可被加载在数据流图400中以执行1*2乘法操作。数据输入值中的一个或多个在操作中可以是静态的(例如,恒定的)(例如,参考图3B对于X是1并且对于Y是2)或者可在操作期间被更新。在步骤2,处理元件(例如,流控制路径网络上的处理元件)或者其他电路输出零到拾取节点404的控制输入(例如,复用器控制信号)(例如,从端口“0”源发(source)一到其输出)并且输出零到切换节点406的控制输入(例如,复用器控制信号)(例如,从端口“0”提供其输入到目的地(例如,下游处理元件))。在步骤3,数据值1被从拾取节点404输出(例如,并且在拾取节点404处消耗其控制信号“0”)到乘法器节点408以在步骤4与数据值2相乘。在步骤4,乘法器节点408的输出到达切换节点406,例如这使得切换节点406消耗控制信号“0”以在步骤5从切换节点406的端口“0”输出值2。该操作于是完成。CSA从而可被相应地编程,使得用于每个节点的相应数据流操作器执行图4中的操作。虽然在此示例中执行是串行化的,但原则上所有数据流操作可并行执行。在图4中使用步骤来区分数据流执行与任何物理微体系结构表征。在一个实施例中,下游处理元件将发送信号(或者不发送准备就绪信号)(例如,在流控制路径网络上)到切换节点406以暂缓从切换406的输出,例如,直到下游处理元件为输出准备就绪(例如,有存储空间)为止。
1.3存储器
数据流体系结构一般聚焦于通信和数据操纵,而较少关注状态。然而,使得真实的软件、尤其是以传统循序语言编写的程序成为可能要求倍加关注与存储器的接口。CSA的某些实施例使用体系结构式存储器操作作为其到(例如,大的)有状态存储的主要接口。从数据流图的角度来看,存储器操作与其他数据流操作类似,只不过它们具有更新共享存储的副作用。具体地,这里的某些实施例的存储器操作具有与每个其他数据流操作器相同的语义,例如它们在其操作对象(例如地址)可用时“执行”,并且在某个时延之后,响应被产生。这里的某些实施例显式地将操作对象输入和结果输出解除耦合,使得存储器操作器天然就是管线式的并且具有产生许多同时待处理请求的潜力,例如,使得它们格外适合于存储器子系统的时延和带宽特性。CSA的实施例提供基本存储器操作,例如取得地址通道并且利用与地址相对应的值填充响应通道的加载,以及存储。CSA的实施例也可提供更高级的操作,例如存储器内原子和一致性操作器。这些操作可具有与其冯·诺依曼对应物相似的语义。CSA的实施例可加速利用诸如C和Fortran之类的循序语言描述的现有程序。支持这些语言模型的一个后果是解决程序存储器顺序,例如这些语言通常规定的存储器操作的串行排序。
图5根据本公开的实施例图示了程序源(例如,C代码)500。根据C编程语言的存储器语义,存储器拷贝(memcpy)应当被串行化。然而,memcpy可利用CSA的实施例来并行化,如果已知阵列A和B是不相交的话。图5还图示了程序顺序的问题。一般地,编译器无法证明阵列A不同于阵列B,例如对于循环体间的相同值的索引或者不同值的索引无法证明。这被称为指针或存储器别名使用(aliasing)。由于编译器将会生成静态正确的代码,所以它们通常被强迫对存储器访问串行化。通常,针对循序冯·诺依曼体系结构的编译器使用指令排序作为强制执行程序顺序的天然手段。然而,CSA的实施例没有由程序计数器定义的指令或者基于指令的程序排序的概念。在某些实施例中,例如不包含体系结构上可见的信息的传入依从性令牌像所有其他数据流令牌一样,并且存储器操作可不执行,直到它们接收到了依从性令牌为止。在某些实施例中,存储器操作一旦其操作对于所有逻辑上后续的依从存储器操作可见就产生传出依从性令牌。在某些实施例中,依从性令牌与数据流图中的其他数据流令牌类似。例如,由于存储器操作在条件情境(context)中发生,所以例如像任何其他令牌一样,也可利用1.1节中描述的控制操作器来操纵依从性令牌。依从性令牌可具有串行化存储器访问的效果,例如向编译器提供从体系结构上定义存储器访问的顺序的手段。
1.4运行时服务
CSA的实施例的主要的体系结构考虑涉及用户级程序的实际执行,但可能也希望提供巩固此执行的若干个支持机制。这些之中首要的是配置(其中数据流图被加载到CSA中)、提取(其中执行图的状态被移动到存储器)以及异常(其中架构中的数学上的、软的和其他类型的差错被检测并处理,这可能由外部实体进行)。下面的2.7节论述了CSA的实施例的时延不敏感数据流体系结构的属性以产生这些功能的高效的、很大程度上管线式的实现方式。从概念上来说,配置可将数据流图的状态加载到互连(和/或通信网络(例如,其网络数据流端点电路))和处理元件(例如,架构)中,例如一般从存储器加载。在此步骤期间,CSA中的所有结构可被加载以新的数据流图以及该图中活跃的任何数据流令牌,这例如是作为情境切换的结果而发生的。CSA的时延不敏感语义可允许架构的分布式异步初始化,例如,一旦PE被配置,它们就可立即开始执行。未配置的PE可背压其通道,直到它们被配置为止,例如防止配置的和未配置的元件之间的通信。CSA配置可被划分成特权状态和用户级状态。这种两级别划分可使得架构的主要配置能够在不调用操作系统的情况下发生。在提取的一个实施例期间,数据流图的逻辑视图被捕捉并且被提交到存储器中,例如包括图中的所有活跃控制和数据流令牌和状态。
提取也可通过架构检验点的创建来起到提供可靠性保证的作用。CSA中的异常一般可由引起处理器中的异常的同样事件引起,例如非法操作器参量(argument)或者可靠性、可用性和可服务性(reliability,availability,and serviceability,RAS)事件。在某些实施例中,在数据流操作器的级别检测异常,例如检查参量值或者通过模块化算术方案来检测。在检测到异常后,数据流操作器(例如,电路)可停止并且发出异常消息,例如该消息既包含操作标识符也包含发生了的问题的性质的一些细节。在一个实施例中,数据流操作器将保持停止,直到其已被重配置为止。异常消息随后可被传达到关联的处理器(例如,核心)以便检修,例如这可包括提取图来进行软件分析。
1.5分片级体系结构
CSA计算机体系结构(例如,针对HPC和数据中心使用)的实施例是分片式的。图6和图8示出了CSA的分片级部署。图8示出了CSA的完全分片实现方式,例如其可以是具有核心的处理器的加速器。此体系结构的一个主要优点可能是降低的设计风险,例如使得CSA和核心在制造中是完全解除耦合的。除了允许更好的组件再利用以外,这还可允许像CSA缓存这样的组件的设计只考虑CSA,例如而不是需要包含核心的更严格时延要求。最后,分开的分片可允许CSA与小核心或大核心的集成。CSA的一个实施例捕捉大多数向量并行的工作负荷,使得大多数向量风格的工作负荷直接在CSA上运行,但在某些实施例中可包括核心中的向量风格的指令,以例如支持传统二进制。
2.微体系结构
在一个实施例中,CSA微体系结构的目标是提供由CSA体系结构指定的每个数据流操作器的高质量实现。CSA微体系结构的实施例规定微体系结构的每个处理元件(和/或通信网络(例如,其网络数据流端点电路))对应于体系结构数据流图中的大约一个节点(例如,实体)。在一个实施例中,数据流图中的节点分布在多个网络数据流端点电路中。在某些实施例中,这产生了这样的微体系结构元件:它们不仅是紧凑的,产生了密集的计算阵列,而且是能量高效的,例如其中处理元件(PE)既简单又很大程度上是非复用的,例如对于CSA的配置(例如,编程)执行单个数据流操作器。为了进一步降低能量和实现面积,CSA可包括可配置的异质架构风格,其中,其每个PE只实现数据流操作器的子集(例如,数据流操作器的单独子集用(一个或多个)网络数据流端点电路实现)。诸如CSA缓存之类的外围和支持子系统可被配设来支持主要CSA处理架构本身中现有的分布式并行性。CSA微体系结构的实现可利用体系结构中存在的数据流和时延不敏感通信抽象。在某些实施例中,在编译器生成的图中的节点和CSA中的数据流操作器(例如,数据流操作器计算元件)之间存在(例如,基本上)一对一的对应关系。
下面是对示例CSA的论述,然后是对微体系结构的更详细论述。这里的某些实施例提供了允许容易的编译的CSA,例如与现有的FPGA编译器形成对照,现有的FPGA编译器处理编程语言的小子集(例如,C或C++)并且即使编译很小的程序也要求许多个小时。
CSA体系结构的某些实施例容许异质粗颗粒操作,比如双精度浮点。程序可被表达为更少的粗颗粒操作,例如使得公开的编译器比传统的空间编译器运行得更快。某些实施例包括具有新处理元件的架构来支持像程序排序的存储器访问这样的循序概念。某些实施例实现硬件来支持粗颗粒数据流风格的通信通道。这个通信模型是抽象的,并且非常接近编译器使用的控制-数据流表示。这里的某些实施例包括支持单周期时延通信的网络实现,例如利用支持单个控制-数据流操作的(例如,小)PE。在某些实施例中,这不仅改善了能量效率和性能,而且其简化了编译,因为编译器在高级别数据流构造和架构之间形成一对一映射。这里的某些实施例从而简化了将现有(例如,C、C++或Fortran)程序编译到CSA(例如,架构)的任务。
能量效率可能是现代计算机系统中的首要关注点。这里的某些实施例提供了能量高效的空间体系结构的新模式。在某些实施例中,这些体系结构形成一种具有小的能量高效的面向数据流的处理元件(PE)(和/或分组交换通信网络(例如,其网络数据流端点电路))与轻量级电路交换通信网络(例如,互连)(例如具有对流控制的加固支持)的异质混合的独特组成的架构。由于每一者的能量优点,这些成分的组合可形成适用于以极为能量高效的方式执行编译器生成的并行程序的空间加速器(例如,作为计算机的一部分)。由于这个架构是异质的,所以通过引入新的域特定PE可为不同的应用域定制某些实施例。例如,用于高性能计算的架构可包括用于双精度融合乘法-加法的一些定制,而针对深度神经网络的架构可包括低精度浮点操作。
例如如图6中例示的空间体系结构模式的一个实施例是由PE间网络连接的轻量级处理元件(PE)的组成。一般而言,PE可包括数据流操作器,例如其中一旦(例如,所有)输入操作对象到达数据流操作器处,某个操作(例如,微指令或者微指令的集合)就被执行,并且结果被转发到下游操作器。控制、调度和数据存储因此可分布在PE间,例如去除了主导经典处理器的集中式结构的开销。
程序可被转换成数据流图,这些数据流图通过配置PE和网络来表达程序的控制-数据流图而被映射到体系结构上。通信通道可以是流控制的并且完全背压式的,例如使得如果源通信通道没有数据或者目的地通信通道已满,则PE将会暂缓。在一个实施例中,在运行时,数据流经已被配置为实现操作(例如,加速的算法)的PE和通道。例如,数据可从存储器中流入、经过架构然后退出到存储器。
这种体系结构的实施例相对于传统的多核处理器可实现显著的性能效率:计算(例如,以PE的形式)与更大的核心中相比可以更简单、更能量高效并且更丰富,并且通信可以是直接的并且主要是短途的,例如与典型的多核处理器中那样的在宽广的全芯片网络上发生不同。另外,因为体系结构的实施例是极为并行的,所以若干个强大的电路和设备级优化是可能的,而不会严重地影响吞吐量,例如,低泄漏设备和低操作电压。这些更低级别的优化相对于传统的核心可使得甚至更大的性能优点成为可能。这些实施例的体系结构、电路和设备级效率产出的组合是引人注目的。随着晶体管密度持续增大,这个体系结构的实施例可使得更大的活跃面积成为可能。
这里的实施例提供了数据流支持和电路交换的独特组合来使得架构与先前的体系结构相比能够更小、更能量高效并且提供更高的聚合性能。FPGA一般是朝着细颗粒比特操纵来调节的,而这里的实施例是朝着存在于HPC应用中的双精度浮点操作来调节的。这里的某些实施例除了根据本公开的CSA以外还可包括FPGA。
这里的某些实施例将轻量级网络与能量高效的数据流处理元件(和/或通信网络(例如,其网络数据流端点电路))相组合以形成高吞吐量、低时延、能量高效的HPC架构。这个低时延网络可使得能够构建具有更少功能的处理元件(和/或通信网络(例如,其网络数据流端点电路)),例如只有一个或两个指令并且可能只有一个体系结构上可见的寄存器,因为将多个PE聚集起来形成完整的程序是高效的。
相对于处理器核心,这里的CSA实施例可提供更大的计算密度和能量效率。例如,当PE非常小时(例如,与核心相比),CSA与核心相比可执行多得多的操作并且具有大得多的计算并行性,例如FMA的数目可能是向量处理单元(vector processing unit,VPU)的16倍那么多。为了利用所有这些计算元素,每操作的能量在某些实施例中是非常低的。
这个数据流体系结构的实施例的能量优点有许多。并行性在数据流图中是显式的,并且CSA体系结构的实施例不花费或者只花费最低限度的能量来提取它,例如不像每次执行指令时必须重新发现并行性的无序处理器那样。由于在一个实施例中每个PE负责单个操作,所以寄存器文件和端口计数可以很小,例如只有一个,并且因此与其在核心中的对应物相比使用更少的能量。某些CSA包括许多PE,每个PE保持活跃程序值,给出了传统体系结构中的巨大寄存器文件的聚合效果,这急剧减少了存储器访问。在存储器是多端口且分布式的实施例中,CSA可比核心支持多得多的待处理存储器请求并且利用更多带宽。这些优点可以组合起来以产生只是裸算术电路的成本的一个小百分比的每瓦能量级。例如,在整数乘法的情况下,CSA与底层乘法电路相比可消耗多不大于25%的能量。相对于核心的一个实施例,该CSA架构中的整数操作消耗少于每整数操作能量的1/30。
从编程的角度来看,CSA体系结构的实施例的特定于应用的可延展性相对于向量处理单元(VPU)产生了显著优点。在传统的非灵活体系结构中,像是浮点除法或者各种超越数学函数这样的功能单元的数目必须在设计时基于某个预期用例来选择。在CSA体系结构的实施例中,这种函数可(例如,由用户而不是制造者)基于每个应用的要求来配置到架构中。应用吞吐量从而可被进一步增大。同时,CSA的实施例的计算密度通过避免固化这种函数、改为配设像浮点乘法这样的基元函数的更多实例来改善。这些优点在HPC工作负荷中可能是显著的,一些HPC工作负荷将75%的浮点执行时间花费在超越函数中。
CSA的某些实施例代表作为面向数据流的空间体系结构的显著进步,例如,本公开的PE可以更小,但也是更能量高效的。这些改善可直接起因于面向数据流的PE与轻量级电路交换互连的组合,该轻量级电路交换互连例如具有单周期时延,例如与分组交换网络(例如具有至少高300%的时延)形成对照。PE的某些实施例支持32比特或64比特操作。这里的某些实施例允许引入新的特定于应用的PE,例如用于机器学习或者安全性,而不只是同质的组合。这里的某些实施例将轻量级面向数据流的处理元件与轻量级低时延网络相组合以形成能量高效的计算架构。
为了让某些空间体系结构成功,编程者将会以相对少的精力来配置它们,例如同时相对于循序核心获得显著的功率和性能优越性。这里的某些实施例提供了容易编程(例如,由编译器编程)、功率高效并且高度并行的CSA(例如,空间架构)。这里的某些实施例提供了实现这三个目标的(例如,互连)网络。从可编程性的角度来看,网络的某些实施例提供了流控制的通道,这例如对应于编译器中使用的执行的控制-数据流图(control-dataflowgraph,CDFG)模型。某些网络实施例利用专用的电路交换链路,使得程序性能对于人类和编译器来说都更容易推测出,因为性能是可预测的。某些网络实施例既提供高带宽也提供低时延。某些网络实施例(例如,静态的电路交换)提供0到1周期的时延(例如,取决于传输距离)。某些网络实施例通过并行地并且例如在低级别金属中布置若干个网络来提供高带宽。某些网络实施例在低级别金属中在短距离上通信,从而是非常功率高效的。
网络的某些实施例包括对流控制的体系结构支持。例如,在由小的处理元件(PE)构成的空间加速器中,通信时延和带宽对于整体程序性能可能是关键的。这里的某些实施例提供了促进空间处理阵列(例如图6中所示的空间阵列)中的PE之间的通信的轻量级电路交换网络,以及支持此网络所必要的微体系结构控制特征。网络的某些实施例使得能够构造支持面向数据流的处理元件(PE)的通信的点到点流控制通信通道。除了点到点通信以外,这里的某些网络还支持多播通信。可通过静态地配置网络以在PE之间形成虚拟电路来形成通信通道。这里的电路交换技术可减小通信时延并且相应地使网络缓冲达到最低限度,例如既带来了高性能也带来了高能量效率。在网络的某些实施例中,PE间时延可低到零周期,意味着下游PE可在数据被产生之后的周期中对数据进行操作。为了获得甚至更高的带宽,以及允许更多程序,可并行布置多个网络,例如如图6中所示。
空间体系结构,例如图6中所示的那种,可以是由PE间网络(和/或通信网络(例如,其网络数据流端点电路))连接的轻量级处理元件的组成。被视为数据流图的程序可通过配置PE和网络来映射到体系结构上。一般而言,PE可被配置为数据流操作器,并且一旦(例如,所有)输入操作对象到达PE处,某个操作于是就可发生,并且结果就被转发到期望的下游PE。PE可通过专用的虚拟电路通信,这些专用虚拟电路是通过静态配置电路交换通信网络来形成的。这些虚拟电路可以是流控制的并且完全背压式的,例如使得如果源没有数据或者目的地已满则PE将会停转。在运行时,数据可流经实现映射的算法的PE。例如,数据可从存储器中流入、经过架构然后退出到存储器。这个体系结构的实施例相对于传统的多核处理器可实现显著的性能效率:例如,其中以PE形式的计算与更大的核心相比更简单并且更众多,并且通信是直接的,例如与存储器系统的扩展不同。
图6根据本公开的实施例图示了包括处理元件(PE)的阵列的加速器分片600。互连网络被描绘为电路交换的静态配置的通信通道。例如,由交换机(例如,第一网络中的交换机610和第二网络中的交换机611)耦合在一起的一组通道。第一网络和第二网络可以是分开的或者被耦合在一起。例如,交换机610可将例如被配置为根据数据流图执行操作的四个数据路径(612、614、616、618)中的一个或多个耦合在一起。在一个实施例中,数据路径的数目可以是任意多数。处理元件(例如,处理元件604)可如本文公开,例如如图9中公开。加速器分片600包括存储器/缓存层次体系接口602,以例如将加速器分片600与存储器和/或缓存相接口。数据路径(例如,618)可延伸到另一分片或者端接于例如分片的边缘处。处理元件可包括输入缓冲器(例如,缓冲器606)和输出缓冲器(例如,缓冲器608)。
操作可基于其输入的可用性和PE的状态而被执行。PE可从输入通道获得操作对象并且将结果写入到输出通道,虽然内部寄存器状态也可被使用。这里的某些实施例包括可配置的数据流友好PE。图9示出了一个这种PE的详细框图:整数PE。此PE包括若干个I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器。在每个周期,调度器可基于输入和输出缓冲器的可用性和PE的状态来选择指令来执行。操作的结果随后可被写入到输出缓冲器或者写入到寄存器(例如,PE本地的寄存器)。写入到输出缓冲器的数据可被传输到下游PE以便进行进一步处理。这种风格的PE可能是极为能量高效的,例如不是从复杂的多端口寄存器文件读取数据,PE而是从寄存器读取数据。类似地,指令可被直接存储在寄存器中,而不是虚拟化指令缓存中。
可在特殊的配置步骤期间设置指令寄存器。在此步骤期间,除了PE间网络以外,辅助控制线和状态也可用于在包括架构的若干个PE间流入配置。由于并行性,这种网络的某些实施例可提供迅速的重配置,例如可在少于大约10微秒中配置分片大小的架构。
图9表示处理元件的一个示例配置,例如其中所有体系结构元件的大小被设置为最小。在其他实施例中,处理元件的每个成分被独立地缩放以产生新的PE。例如,为了处理更复杂的程序,可以引入PE可执行的更大数目的指令。可配置性的第二维度在PE算术逻辑单元(arithmetic logic unit,ALU)的功能中。在图9中,描绘了整数PE,其可支持加法、减法和各种逻辑操作。通过将不同种类的功能单元替代到PE中可创建其他种类的PE。例如,整数乘法PE可没有寄存器、具有单个指令并且具有单个输出缓冲器。PE的某些实施例将融合乘加(fused multiply add,FMA)分解成分开的、但紧密耦合的浮点乘法和浮点加法单元以改善对乘加繁重的工作负荷的支持。PE在下文进一步论述。
图7A根据本公开的实施例图示了(例如,参考图6论述的网络一或网络二的)可配置数据路径网络700。网络700包括多个复用器(例如,复用器702、704、706),这些复用器可(例如,经由其各自的控制信号)被配置为将(例如,来自PE的)一个或多个数据路径连接在一起。图7B根据本公开的实施例图示了可配置流控制路径网络701(例如,参考图6论述的网络一或网络二)。网络可以是轻量级PE到PE网络。网络的某些实施例对于分布式点到点数据通道的构造可被认为是一组可组合的基元。图7A示出了有两个通道被使能的网络,粗黑线和黑色虚线。粗黑线通道是多播,例如单个输入被发送到两个输出。注意通道在单个网络内的一些点处可交叉,即使在通道端点之间形成了专用的电路交换路径。此外,这个交叉可不在两个通道间引入结构化危害,使得每一者独立地并且以完全带宽操作。
实现分布式数据通道可包括图7A-图7B中图示的两个路径。前向或者说数据路径将数据从生产者运载到消耗者。复用器可被配置为将数据和有效比特从生产者操控到消耗者,例如像图7A中那样。在多播的情况下,数据将被操控到多个消耗者端点。网络的这个实施例的第二部分是流控制或背压路径,其在前向数据路径的相反方向上流动,例如像图7B中那样。消耗者端点可在其准备好接受新数据时断言。这些信号随后可利用可配置逻辑联接被操控回到生产者,这些可配置逻辑联接在图7B中被标注为(例如,回流)流控制功能。在一个实施例中,每个流控制功能电路可以是多个交换机(例如,复用器),例如与图7A类似。流控制路径可处理从消耗者到生产者的返回控制数据。联接可使得多播成为可能,例如其中每个消耗者在生产者假定数据已被接收之前准备好接收该数据。在一个实施例中,PE是具有数据流操作器作为其体系结构接口的PE。额外地或者替换地,在一个实施例中,PE可以是任何种类的PE(例如,架构中的),例如但不限于是具有指令指针、触发指令或者基于状态机的体系结构接口的PE。
网络可被静态配置,例如除了PE被静态配置以外。在配置步骤期间,配置比特可在每个网络组件处被设置。这些比特例如控制复用器选择和流控制功能。网络可包括多个网络,例如数据路径网络和流控制路径网络。一网络或多个网络可利用不同宽度(例如,第一宽度,和更窄或更宽的宽度)的路径。在一个实施例中,数据路径网络比流控制路径网络的宽度具有更宽的(例如,比特传输)宽度。在一个实施例中,第一网络和第二网络的每一者包括其自己的数据路径网络和流控制路径网络,例如数据路径网络A和流控制路径网络A和更宽的数据路径网络B和流控制路径网络B。
网络的某些实施例是无缓冲的,并且数据将在单个周期中在生产者和消耗者之间移动。网络的某些实施例也是无边际的,也就是说网络跨越整个架构。在一个实施例中,一个PE将在单个周期中与任何其他PE通信。在一个实施例中,为了改善路由带宽,在PE的行之间可并行布置若干个网络。
相对于FPGA,这里的网络的某些实施例具有三个优点:面积、频率和程序表达。这里的网络的某些实施例按粗颗粒操作,这例如减少了配置比特的数目,从而减小了网络的面积。网络的某些实施例还通过直接在电路(例如,硅)中实现流控制逻辑来获得面积减小。加固的网络实现的某些实施例相对于FPGA还享有频率优点。因为面积和频率优点,功率优点可存在于在同等吞吐量下使用更低电压之处。最后,网络的某些实施例与FPGA线路相比提供了更好的高级别语义,尤其是对于可变定时而言,从而那某些实施例更容易被编译器所针对。这里的网络的某些实施例对于分布式点到点数据通道的构造可被认为是一组可组合的基元。
在某些实施例中,多播源可不断言其数据有效,除非其接收到了来自每个信宿(sink)的准备就绪信号。因此,在多播情况中可利用额外的联接和控制比特。
与某些PE一样,网络可被静态配置。在此步骤期间,配置比特在每个网络组件处被设置。这些比特例如控制复用器选择和流控制功能。我们网络的前向路径要求一些比特来摆动其复用器。在图7A中所示的示例中,要求每跳四个比特:东复用器和西复用器各自利用一个比特,而往南的复用器利用两个比特。在这个实施例中,对于数据路径可利用四个比特,但对于流控制功能(例如,在流控制路径网络中)可利用7个比特。其他实施例可利用更多比特,例如如果CSA进一步利用北-南方向的话。流控制功能可对于流控制可来自的每个方向利用一配置比特。这可使得能够静态地设置流控制功能的敏感性。下面的表格1对于图7B中的网络总结了流控制功能的布尔代数实现,其中配置比特被大写。在此示例中,利用了七个比特。
表格1:流实现
对于图7B中从左侧起的第三流控制框,EAST_WEST_SENSITIVE和NORTH_SOUTH_SENSITIVE被描绘为分别被设置来为粗线和虚线通道实现流控制。
图8根据本公开的实施例图示了包括加速器802的硬件处理器分片800。加速器802可以是根据本公开的CSA。分片800包括多个缓存堆(cache bank)(例如,缓存堆808)。可包括请求地址文件(request address file,RAF)电路810,例如如下面在第2.2节中论述。ODI可以指晶粒上互连,例如遍及整个晶粒、连接起所有分片的互连。OTI可以指分片上互连,例如遍及整个分片、例如将分片上的缓存堆连接在一起。
2.1处理元件
在某些实施例中,CSA包括异质PE的阵列,其中架构由若干种类型的PE组成,每个PE只实现数据流操作器的子集。作为示例,图9示出了能够实现广泛的一组整数和控制操作的PE的临时实现方式。其他PE,包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些,可具有类似的实现风格,例如用适当的(数据流操作器)电路替代ALU。CSA的PE(例如,数据流操作器)可在执行开始之前被配置(例如,编程)来实现PE支持的集合之中的特定数据流操作。配置可包括一个或两个控制字,这些控制字指定控制ALU的操作码(opcode)、操控PE内的各种复用器并且驱动数据流进出PE通道。可通过对这些配置比特进行微编码来实现数据流操作器。图9中描绘的整数PE 900被组织为从上向下流动的单级逻辑管线。数据从一组本地网络之一进入PE 900,在这里其被注册在输入缓冲器中以便后续操作。每个PE可支持若干个宽的面向数据的和窄的面向控制的通道。配设的通道的数目可基于PE功能而变化,但面向整数的PE的一个实施例具有2个宽的和1-2个窄的输入和输出通道。虽然整数PE被实现为单周期管线,但可利用其他管线化选择。例如,乘法PE可具有多个管线级。
PE执行可按数据流风格进行。基于配置微代码,调度器可检查PE入口和出口缓冲器的状态,并且在配置的操作的所有输入都已到达并且该操作的出口缓冲器可用时,协调数据流操作器(例如,ALU上的)对该操作的实际执行。所得到的值可被放置在配置的出口缓冲器中。一个PE的出口缓冲器和另一PE的入口缓冲器之间的传送可随着缓冲变得可用而异步发生。在某些实施例中,PE被配设成使得每个周期至少一个数据流操作完成。第2节论述了涵盖基元操作的数据流操作器,例如加法、异或、或者拾取。某些实施例可在能量、面积、性能和时延方面提供优点。在一个实施例中,利用到PE控制路径的扩展,可使得更融合的组合成为可能。在一个实施例中,处理元件的宽度是64比特,例如为了大量利用HPC中的双精度浮点计算并且为了支持64比特存储器寻址。
2.2通信网络
CSA微体系结构的实施例提供了如下网络的层次体系,其一起在多个通信尺度上提供时延不敏感通道的体系结构抽象的一种实现方式。CSA通信层次体系的最低级别可以是本地网络。本地网络可以是静态电路交换的,例如利用配置寄存器来摆动本地网络数据路径中的(一个或多个)复用器以形成通信的PE之间的固定电路径。在一个实施例中,本地网络的配置对于每个数据流图被设置一次,例如与PE配置同时。在一个实施例中,静态电路交换针对能量优化,例如其中CSA通信流量的绝大部分(可能大于95%)将会穿过本地网络。程序可包括在多个表达式中使用的项。为了针对此情况进行优化,这里的实施例提供了对于本地网络内的多播的硬件支持。若干个本地网络可被聚集在一起以形成路由通道,这些路由通道例如(作为网格)散布在PE的行和列之间。作为优化,可包括若干个本地网络来运载控制令牌。与FPGA互连相比,可在数据路径的粒度上路由CSA本地网络,并且另一个差异可以是CSA对控制的对待。CSA本地网络的一个实施例是显式流控制的(例如,背压式的)。例如,对于每个前向数据路径和复用器集合,CSA将会提供与前向数据路径物理上配对的向后流动的流控制路径。两个微体系结构路径的组合可提供时延不敏感通道抽象的低时延、低能量、低面积、点到点实现。在一个实施例中,CSA的流控制线路对于用户程序而言是不可见的,但是它们可由为用户程序服务的体系结构所操纵。例如,第1.2节中描述的异常处理机制可通过在检测到异常状况时将流控制线路拉到“不存在”状态来实现。此动作不仅可以优雅地暂缓在犯规的计算中涉及的管线的那些部分,而且也可保持导致异常的机器状态,例如用于诊断分析。第二网络层,例如夹层网络,可以是共享的分组交换网络。夹层网络可包括多个分布式网络控制器,即网络数据流端点电路。夹层网络(例如,由图51中的虚线框示意性指示的网络)可提供更一般的长程通信,例如以时延、带宽和能量为代价。在一些程序中,大多数通信可在本地网络上发生,从而夹层网络配设比较起来将会大幅减少,例如每个PE可连接到多个本地网络,但CSA对于PE的每个逻辑邻域将只配设一个夹层端点。由于夹层实际上是共享网络,所以每个夹层网络可运载多个逻辑上独立的通道,并且例如被配设有多个虚拟通道。在一个实施例中,夹层网络的主要功能是提供PE之间以及PE和存储器之间的宽范围通信。除了这个能力以外,夹层还可包括(一个或多个)网络数据流端点电路,例如用来执行某些数据流操作。除了这个能力以外,夹层还可作为运行时支持网络进行操作,例如由此各种服务可以按用户程序透明的方式访问完整架构。以这个身份,夹层端点可例如在CSA配置期间为其本地邻域充当控制器。为了形成跨越CSA分片的通道,可利用三个子通道和两个本地网络通道(其向和从夹层网络中的单个通道运载流量)。在一个实施例中,利用一个夹层通道,例如一个夹层和两个本地=总共3个网络跳。
网络层上的通道的可组合性可在分片间、晶粒间和架构粒度上被扩展到更高级别的网络层。
图9根据本公开的实施例图示了处理元件900。在一个实施例中,操作配置寄存器919在配置(例如,映射)期间被加载并且指定此处理(例如,计算)元件将要执行的特定操作(或者多个特定操作)。寄存器920活动可被该操作(复用器916的输出,例如被调度器914控制)所控制。调度器914可例如在输入数据和控制输入到达时调度处理元件900的一个或多个操作。控制输入缓冲器922连接到本地网络902(并且例如本地网络902可包括如图7A中的数据路径网络和如图7B中的流控制路径网络)并且在值到达时被加载该值(例如,网络具有(一个或多个)数据比特和(一个或多个)有效比特)。控制输出缓冲器932、数据输出缓冲器934和/或数据输出缓冲器936可接收处理元件900的输出,例如由操作(复用器916的输出)所控制的输出。每当ALU 918执行时(也由复用器916的输出控制),状态寄存器938就可被加载。控制输入缓冲器922和控制输出缓冲器932中的数据可以是单个比特。复用器921(例如,操作对象A)和复用器923(例如,操作对象B)可源发输入。
例如,假定此处理(例如,计算)元件的操作是(或者包括)在图3B中被称为拾取的东西。处理元件900于是将从数据输入缓冲器924或者数据输入缓冲器926选择数据,以例如去到数据输出缓冲器934(例如,默认)或者数据输出缓冲器936。922中的控制比特从而如果从数据输入缓冲器924选择则可指示0,或者如果从数据输入缓冲器926选择则可指示1。
例如,假定此处理(例如,计算)元件的操作是(或者包括)在图3B中被称为切换的东西。处理元件900将向数据输出缓冲器934或者数据输出缓冲器936输出数据,例如从数据输入缓冲器924(例如,默认)或者数据输入缓冲器926输出。922中的控制比特从而如果向数据输出缓冲器934输出则可指示0,或者如果向数据输出缓冲器936输出则可指示1。
多个网络(例如,互连)可连接到处理元件,例如(输入)网络902、904、906和(输出)网络908、910、912。这些连接可以是交换机,例如如参考图7A和图7B所述。在一个实施例中,每个网络包括两个子网络(或者网络上的两个通道),例如一个用于图7A中的数据路径网络,并且一个用于图7B中的流控制(例如,背压)路径网络。作为一个示例,本地网络902(例如,设置为控制互连)被描绘为被切换(例如,连接)到控制输入缓冲器922。在这个实施例中,数据路径(例如,如图7A中的网络)可运载控制输入值(例如,一个或多个比特)(例如,控制令牌),并且流控制路径(例如,网络)可从控制输入缓冲器922运载背压信号(例如,背压或非背压令牌),以例如向上游生产者(例如,PE)指出新的控制输入值不会被加载到(例如,发送到)控制输入缓冲器922中,直到背压信号指出在控制输入缓冲器922中有用于(例如,来自上游生产者的控制输出缓冲器的)新控制输入值的空间为止。在一个实施例中,新的控制输入值可不进入控制输入缓冲器922,直到(i)上游生产者接收到来自“控制输入”缓冲器922的“空间可用”背压信号并且(ii)新的控制输入值被从上游生产者发送为止,并且例如这可暂缓处理元件900,直到这种情况发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。
数据输入缓冲器924和数据输入缓冲器926可类似地执行,例如本地网络904(例如,被设置为数据(而不是控制)互连)被描绘为被切换(例如,连接)到数据输入缓冲器924。在这个实施例中,数据路径(例如,如图7A中的网络)可运载数据输入值(例如,一个或多个比特)(例如,数据流令牌)并且流控制路径(例如,网络)可从数据输入缓冲器924运载背压信号(例如,背压或非背压令牌),以例如向上游生产者(例如,PE)指出新的数据输入值不会被加载到(例如,发送到)数据输入缓冲器924中,直到背压信号指出在数据输入缓冲器924中有用于(例如,来自上游生产者的数据输出缓冲器的)新数据输入值的空间为止。在一个实施例中,新的数据输入值可不进入数据输入缓冲器924,直到(i)上游生产者接收到来自“数据输入”缓冲器924的“空间可用”背压信号并且(ii)新的数据输入值被从上游生产者发送为止,并且例如这可暂缓处理元件900,直到这种情况发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。控制输出值和/或数据输出值可被暂缓在其各自的输出缓冲器(例如,932、934、936)中,直到背压信号指出对于(一个或多个)下游处理元件在输入缓冲器中有可用空间为止。
处理元件900可被暂缓执行,直到其操作对象(例如,控制输入值及其对应的一个或多个数据输入值)被接收到和/或直到在处理元件900的(一个或多个)输出缓冲器中对于对这些操作对象执行操作要产生的数据有空间为止。
2.3存储器接口
请求地址文件(RAF)电路(其简化版本在图10中示出)可负责执行存储器操作并且充当CSA架构和存储器层次体系之间的媒介。这样,RAF的主要微体系结构任务可以是用CSA架构的有序语义使无序存储器子系统合理化。以这个身份,RAF电路可被配设有完成缓冲器,例如对存储器响应重排序并且按请求顺序将它们返回到架构的队列状结构。RAF电路的第二个主要功能可以是以地址转化和页游走器(page walker)的形式提供支持。传入虚拟地址可利用通道关联的转化后备缓冲器(translation lookaside buffer,TLB)被转化成物理地址。为了提供充足的存储器带宽,每个CSA分片可包括多个RAF电路。与架构的各种PE一样,RAF电路可通过在选择存储器操作来执行之前检查输入参量和输出缓冲(如果要求的话)的可用性来以数据流风格进行操作。然而,与一些PE不同,RAF电路在若干个共位的存储器操作之间被复用。复用的RAF电路可用于最小化其各种子组件的面积开销,以例如共享加速器缓存互连(Accelerator Cache Interconnect,ACI)网络(在2.4节中更详细描述)、共享虚拟存储器(shared virtual memory,SVM)支持硬件、夹层网络接口和其他硬件管理设施。然而,有一些程序特性也可激发这个选择。在一个实施例中,(例如,有效)数据流图将会轮循共享虚拟存储器系统中的存储器。存储器时延受限程序(像图遍历那样)可利用许多分开的存储器操作而由于存储器依从控制流而饱和存储器带宽。虽然每个RAF可被复用,但CSA在分片粒度上可包括多个(例如,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将其与1010中的加载匹配。用于此加载的完成缓冲器槽位是按地址到达的顺序来指派的。假定图中的这个特定加载没有被指定依从性,则地址和完成缓冲器槽位被调度器(例如,经由存储器命令1042)派遣到存储器系统。当结果返回到复用器1040(示意性示出)时,其被存储到其指定的完成缓冲器槽位中(例如,因为其在存储器系统中始终携带着目标槽位)。完成缓冲器按地址到达的顺序将结果发送回到本地网络(例如,本地网络1002、1004、1006或1008)中。
存储可以是类似的,只不过地址和数据都必须在任何操作被派遣到存储器系统之前到达。
2.4缓存
数据流图可能够并行生成大量的(例如,字粒度)请求。从而,CSA的某些实施例提供了具有充分的带宽来服务CSA的缓存子系统。可利用例如如图11中所示的大量成堆的缓存微体系结构。图11根据本公开的实施例图示了电路1100,其中多个请求地址文件(RAF)电路(例如,RAF电路(1))耦合在多个加速器分片(1108、1110、1112、1114)和多个缓存堆(例如,缓存堆1102)之间。在一个实施例中,RAF和缓存堆的数目可处于1:1或1:2的比率。缓存堆可包含完全缓存线(例如,而不是按字分区),其中每条线在缓存中恰好有一个归属地。缓存线可经由伪随机函数被映射到缓存堆。CSA可采用共享虚拟存储器(SVM)模型来与其他分片体系结构集成。某些实施例包括将RAF连接到缓存堆的加速器缓存互连(ACI)网络。这个网络可在RAF和缓存之间运载地址和数据。ACI的拓扑可以是级联的交叉开关(crossbar),例如作为时延和实现复杂度之间的折衷。
这里的某些实施例(例如,空间体系结构的某些实施例)利用例如电路交换网络上的点到点通道来通信。在一个实施例中,存储器被视为特殊种类的通道,其中来自请求者(例如,来自请求方PE)的地址请求被转换成存储器处的数据响应并且被发送到接收者(例如,耦合到接收方PE),从而形成穿过存储器的通道。RAF电路可被利用来服务从一个或多个PE到存储器(例如,缓存)的请求。
这里的某些实施例针对的是用于实现更宽范围的穿过存储器(through-memory)的通信的电路。这里的某些实施例提供通信和存储器访问的组合。这里的某些实施例提供穿过存储器的通信,例如跨过存储器接口(例如,RAF电路)、跨过分片或者跨过芯片。这里的某些实施例允许了远程存储器访问,这种远程存储器访问例如通过经由时延降低改善性能和/或通过降低内部(例如,电路交换)网络上的压力来改善计算机(例如,加速器)的功能。这里的某些实施例包括远程信用返回微体系结构来例如通过经由时延降低改善性能和/或通过降低内部(例如,电路交换)网络上的压力来改善计算机(例如,加速器)的功能。
在某些实施例中,存储器系统中对请求(例如,加载请求或存储请求)的响应被返回到发出了该请求的那同一个存储器接口电路(例如,RAF电路)。额外地或者替换地,存储器系统中对请求(例如,加载请求或存储请求)的响应被返回到不同的存储器接口电路(例如,RAF电路)。在一个实施例中,电路(例如,存储器接口电路的远程信用返回微体系结构)允许响应被路由到与发出了请求的存储器接口不同的存储器接口。在一个实施例中,间接层允许响应被路由到与发出了请求的存储器接口不同的存储器接口。这里的某些实施例允许了一组存储器系统接口内的完成(例如,输出)缓冲器管理的解除聚合。在响应被缓冲的一个实施例中,额外的流控制被包括在存储器系统中,包括存储器接口之间的耦合(例如,网络)来分发信用(例如,信用返回值)。
在空间体系结构的某些实施例中,消息的重路由在存储器接口内发生。在某些实施例中,存储器接口是空间阵列(例如,CSA)(例如,空间阵列中的PE)的(例如,小)子集本地的。这里的某些实施例降低了存储器访问的时延,同时改善了映射的程序的物理实现。在某些实施例中,通过允许存储器消息在存储器子系统中重路由,这个路由就成本(例如,面积和功率)而言本质上是免费的,其中存储器子系统包括能够在所有端点之间路由请求的网络(例如,本文论述的ACI)。这里的某些实施例在大空间程序(例如,占用空间架构的很大部分(例如,大于50%)的那些)中是极为有益的。这里的某些实施例包括用于远程信用返回的电路,例如,该电路被添加到图10或图69中的电路中。
图12根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路1200。在一个实施例中,在配置时,在寄存器1210中指定曾在数据流图中的存储器加载和存储操作。数据流图中到这些存储器操作的弧随后可连接到输入队列1222、1224和1226。在一个实施例中,数据请求(例如,加载或存储)在输出1241处被发送到存储器(例如,经由网络),并且响应于该存储器请求发送的数据(例如,用于加载请求的新的有效载荷数据或者用于存储请求的其他数据(例如,存储确认值))在输入1243处被RAF电路1200接收和/或数据被从要接收针对该存储器请求的数据的RAF电路的完成缓冲器(例如,完成缓冲器1228、1230或1232)中的槽位读取(并且例如被消耗、排出或者删除)。在一个实施例中,输入队列(例如,输入队列1222、1224和1226)中存储存储器请求(例如,存储针对存储器请求的数据,例如针对加载来存储地址,或者针对存储来存储地址和要被存储在该地址处的数据)的一个或多个槽位在相应的存储器请求(例如,存储器命令)被发送到存储器时,例如被从输出端口1241发送时,被清除该数据。存储器命令1242(例如,存储器请求)可包括以下的一个或多个(例如,其任何组合):指示出哪个RAF电路是该存储器命令的请求者的标识(ID)值,指示出哪个RAF电路(例如,其可以是请求者RAF电路)将接收信用返回令牌(例如,信用返回值)作为对数据(例如,响应于存储器命令生成的来自存储器的数据)被接收者RAF电路接收到的接收确认的标识(ID)值,指示出哪个RAF电路是响应于存储器命令生成的、来自存储器的数据的接收者的标识(ID)值,指示出数据将被存储在接收者RAF电路的多个完成缓冲器(例如,1228、1230或1232)中的哪个完成缓冲器中的标识(ID)值,以及指示出数据将被存储在接收者RAF电路的多个完成缓冲器(例如,1228、1230或1232)中的该完成缓冲器的哪个(哪些)槽位中的标识(ID)值。存储器命令可通过调度器1212例如经由复用器标记地址(addr.)、数据和完成(comp.)缓冲器中的一个或多个从输入队列(例如,队列1222、1224或1226)源发值来形成。在一个实施例中,信用返回令牌目标ID(例如,识别目标RAF电路)被存储在接收者(例如,目的地)RAF电路的配置中。
信用返回令牌可以是如下值(例如,被相应地设置为一(或零)的单个比特),该值指示出来自输入队列(例如,队列1222、1224或1226)的存储器请求完成(例如,已被接收者RAF电路接收和/或数据被从要接收针对该存储器请求的该数据的RAF电路的完成缓冲器读取(并且例如被消耗、排出或删除))。调度器1212可在如下情形发出信用返回令牌:其RAF电路(例如,其完成缓冲器或队列)接收到响应于存储器请求(例如,RAF电路是接收者RAF电路的存储器请求)而生成的数据;和/或数据被从要接收针对该存储器请求的该数据的RAF电路的完成缓冲器读取(并且例如被消耗、排出或删除)。RAF电路1200包括允许远程信用返回的电路,以例如从接收者RAF电路发送针对存储器请求的信用返回令牌(例如,值),该接收者RAF电路接收响应于来自不同的请求者RAF电路的存储器请求的数据,和/或数据被从要接收针对存储器请求的该数据的RAF电路的完成缓冲器读取(并且例如被消耗、排出或删除)。在某些实施例中,接收者RAF电路在以下的一者或两者之后从接收者RAF电路向请求者RAF电路发送针对存储器请求的信用返回令牌(例如,值):(i)接收者RAF电路响应于来自(例如,不同的)请求者RAF电路的存储器请求而接收数据,以及(ii)数据被从接收到了数据的接收者RAF电路的完成缓冲器的槽位排出(例如,被PE所消耗)。此外,RAF电路1200也允许本地信用返回,例如在以下的一者或两者之后对于来自同一个RAF电路(例如来自其内)的存储器请求发送信用返回令牌(例如,值):(i)该同一个RAF电路响应于来自该同一个RAF电路的存储器请求而接收数据,以及(ii)数据被从接收到了该数据的同一个RAF电路的输出缓冲器的槽位排出(例如,被PE所消耗)。
RAF电路1200可被配置为是请求者RAF电路、接收者RAF电路或者这两者。在某些实施例中,RAF电路1200经由对完成(例如,完成缓冲器)流控制寄存器1244和/或完成(例如,完成缓冲器)配置寄存器1246的一个或多个中的控制值的设置而被配置为是请求者RAF电路和/或接收者RAF电路。作为一个实施例,完成(例如,完成缓冲器)流控制寄存器1244和/或完成(例如,完成缓冲器)配置寄存器1246在配置期间耦合到网络(例如,本地网络1202、1204、1206或1208)以提供这些控制值。在某些实施例中,本地网络是本文论述的电路交换网络,例如参考图6或图11论述的。在某些实施例中,PE(例如,在本地网络1202、1204、1206或1208上)向RAF电路发送数据(例如,使得存储器请求被输入到RAF电路(例如,输入队列1222、1224或1226的槽位)中)。在一个实施例中,同一PE将向同一输入队列发送其(相同)存储器请求(例如,利用该输入队列的槽位的任何一者)。当到时间服务存储器请求时(例如,当要接收针对该存储器请求的数据的完成缓冲器经由令牌(例如,信用返回令牌)指示出其有空间可用时),调度器1212可经由输出端口1241向存储器发送与存储在输入队列(例如,输入队列1222、1224或1226)中的输入数据(例如,地址)相对应的存储器请求。在一个实施例中,存储器请求是存储器命令1242并且至少包括接收者RAF电路的标识。在一个实施例中,当存储器命令1242被从(例如,请求者)RAF电路发送(或者被排队来发送)时,RAF电路随后将该请求标记为已发送(例如,通过从(一个或多个)输入队列的槽位或者多个(例如,并行)槽位中删除该请求的输入数据)。与存储器请求相对应的数据(例如,对于加载请求从存储器返回的数据)可被发送到接收者RAF电路(例如,到接收者RAF电路的完成缓冲器)。在某些实施例中,完成缓冲器是允许数据被无序插入的存储结构,例如通过调度器向数据生产者指派到该结构中的索引并且生产者于是可在数据变得可用时填充数据。在此实施例中数据可按索引顺序而不是到达顺序被排出。在某些实施例中,队列是这样的存储结构:在其中,数据被按到达顺序插入和排出。
在一个实施例中,与存储器请求相对应的数据被从存储器返回并且进入输入端口1243中。此数据可包括标识符来指示出信用返回令牌(例如,值)将被发送到不同的RAF电路或者在同一RAF电路内以将存储器请求标记为完成(例如,将该存储器请求从输入队列中去除)。此数据可在RAF电路配置数据中传达。在一个实施例中,标识符是上文论述的标识(ID)值中的一个或多个。在一个实施例中,标识符被对照完成(例如,完成缓冲器)配置寄存器1246中的指示出与标识符相对应的存储器请求是要被发送到远程RAF电路还是同一(例如,本地)RAF电路的值(例如,被设置为远程响应值或本地响应值)来进行检查。在一个实施例中,对于完成(例如,完成缓冲器)配置寄存器1246包括多个元素,其中每个元素对应于单个完成缓冲器(或者其槽位)。完成(例如,完成缓冲器)配置寄存器1246的每个元素从而可被设置来指示出何时检测到在输入端口1243上来自存储器的数据被接收到和/或数据被从对于该存储器请求接收到了该数据的相应完成缓冲器读取(并且例如被消耗、排出或删除)将使得相应的信用返回令牌(例如,值)被发送到不同的RAF电路或者同一RAF电路内以将该存储器请求标记为完成(例如,从输入队列中去除该存储器请求)。
远程响应模式
在一个这种实施例中,在完成(例如,完成缓冲器)配置寄存器1246中设置远程响应值将使得当在输入端口1243上接收到要被存储在特定的完成缓冲器(例如,或者其槽位)(例如,完成缓冲器1228、1230或1232)中的来自存储器的数据时和/或数据被从对于存储器请求接收到该数据的相应完成缓冲器读取(并且例如被消耗、排出或删除)时,信用返回令牌(例如,值)被发送到远程RAF电路(例如,经由输出端口1250到网络(例如,本地网络1202、1204、1206或1208)中)。在某些实施例中,RAF电路1200的第一实例可被利用作为接收者RAF电路并且RAF电路1200的另一实例可被利用作为请求者RAF电路,并且用于远程响应模式(例如,远程响应值被设置在接收者RAF电路的完成(例如,完成缓冲器)配置寄存器1246中)的信用返回令牌(例如,值)可被存储到请求者RAF电路的(例如,远程信用返回)输入队列1220中或者被直接发送到请求者RAF电路的调度器1212和/或(例如,令牌)计数器1214。
在远程响应模式中的一个实施例中,请求者RAF电路的完成(例如,完成缓冲器)流控制寄存器1244被设置以第一值以使得交换机1248(例如,复用器)从RAF电路的(例如,远程信用返回)输入队列1220源发信用返回令牌,而不是第二值,第二值将使得交换机1248(例如,复用器)从该RAF电路内源发信用返回令牌(例如,对于该特定的本地RAF电路的完成缓冲器)。在某些实施例中,请求者RAF电路(例如,在其输入队列1222、1224或1226中包括了存储器请求的请求者RAF电路)对于存储器请求接收到信用返回令牌(例如,值)将使得调度器将该存储器请求标记为完成,例如通过从输入队列1222、1224或1226中去除该存储器请求和/或通过递减计数器1214,该计数器1214指示出输入队列1222、1224或1226和/或完成缓冲器1228、1230或1232的多少个槽位(如果有的话)是空闲的。在一个实施例中,每个(例如,远程或本地)完成缓冲器1228、1230或1232包括其自己的计数器(例如,三个计数器)。在一个实施例中,每个输入队列1222、1224或1226包括其自己的计数器(例如,三个计数器)。在一个实施例中,调度器1212将暂缓从其输入队列1222、1224或1226发出另外的存储器请求,直到在目标(接收者)完成缓冲器中相应地有空间可用为止。空间可用可由信用返回令牌来表示。
本地响应模式
在一个这种实施例中,在完成(例如,完成缓冲器)配置寄存器1246中设置本地响应值将使得:当在输入端口1243上接收到要被存储在特定的完成缓冲器(例如,或者其槽位)(例如,完成缓冲器1228、1230或1232)中的、来自存储器的数据时和/或数据被从对于该存储器请求接收到该数据的相应完成缓冲器读取(并且例如被消耗、排出或删除)时,信用返回令牌(例如,值)被在该同一(例如,本地)RAF电路内发送(例如,经由路径1252,例如而不是在网络上(例如,本地网络1202、1204、1206或1208))。在某些实施例中,路径1252耦合到交换机1248的输入。
在本地响应模式中的一个实施例中,完成(例如,完成缓冲器)流控制寄存器1244不被设置以第一值以(例如,通过发送控制值)使得交换机1248(例如,复用器)从RAF电路的(例如,远程信用返回)输入队列1220源发信用返回令牌,而是被设置以第二值,该第二值将使得交换机1248(例如,复用器)从该RAF电路内源发信用返回令牌(例如,对于该特定的本地RAF电路的完成缓冲器)。在某些实施例中,RAF电路(该RAF电路在其输入队列1222、1224或1226中包括存储器请求)对于信用返回令牌(例如,值)的接收将使得调度器将该存储器请求标记为完成,例如通过从输入队列1222、1224或1226中去除该存储器请求(例如,如果针对该存储器请求的数据在将该存储器请求发出到存储器时未被去除的话)和/或通过递减计数器1214,该计数器1214指示出输入队列1222、1224或1226和/或完成缓冲器1228、1230或1232的多少个槽位是空闲的。在一个实施例中,每个(例如,远程或本地)完成缓冲器1228、1230或1232包括其自己的计数器(例如,三个计数器)。在一个实施例中,每个输入队列1222、1224或1226包括其自己的计数器(例如,三个计数器)。在一个实施例中,调度器1212将暂缓从其输入队列1222、1224或1226发出另外的存储器请求,直到在其(目标)完成缓冲器中相应地有空间可用为止。空间可用可由信用返回令牌来表示。
存储器操作的弧从而可离开完成缓冲器1228、1230或1232。可选地,依从性令牌(其每一者可以是单个比特(例如,单个一或单个零))可到达队列1218中。可选地,依从性令牌将从队列1216离开。令牌计数器1214也可以是这些队列的紧凑表示并且跟踪用于任何给定输入队列的(例如,依从性和/或信用返回)令牌的数目。如果依从性令牌计数器1214饱和,则对于新的存储器操作可不生成额外的依从性令牌。因此,存储器排序电路(例如,图11中的RAF)可暂缓调度新的存储器操作,直到依从性令牌计数器1214变得不饱和为止。
作为加载的示例,地址到达队列1222中,调度器1212将其与1210中的加载匹配。用于此加载的完成缓冲器槽位是按地址到达的顺序来指派的。假定图中的这个特定加载没有被指定依从性,则地址和完成缓冲器槽位被调度器(例如,经由存储器命令1242)派遣到存储器系统。当结果返回到复用器1240(示意性示出)时,其被存储到其指定的完成缓冲器槽位中(例如,因为其在存储器系统中始终携带着目标槽位)。完成缓冲器按地址到达的顺序将结果发送回到本地网络(例如,本地网络1202、1204、1206或1208)中。
存储可以是类似的,只不过在某些实施例中地址和数据都将在任何操作被派遣到存储器系统之前到达。
图12示出了RAF微体系结构的图示,其中覆盖了一个加载和一个存储操作(例如,对于要存储的数据有一个输入缓冲器,并且对于数据要被存储在的(例如,虚拟)地址有一个输入缓冲器),对于完成缓冲器状态有新的进入更新。完成(输出)缓冲器状态寄存器可包括(例如,外部)网络上的输入,以及到本地完成缓冲器的接口。此网络可使用PE到PE网络(例如,电路交换网络),或者单独的网络。
远程信用返回可包括远程队列管理。例如,在本地发出存储器请求(例如,来自和去到同一RAF电路)本质上可涉及对完成(输出)缓冲器和请求队列(例如,操作(op)参量(输入)队列)的管理。存储器请求可在请求队列中有请求可用并且在完成缓冲器中有槽位空闲用于接收响应时被发出。在某些实施例中,这些完成缓冲器条目被按序分发并且也被按序引退,虽然在其他实施例中完成可能是无序的。随着响应从完成缓冲器排出,槽位可被释放,从而允许新的请求发出。在某些实施例中,使得响应能够远程返回涉及对这个被管理的流的解除聚合:在请求者处决定向哪个槽位发送响应并且在远程响应引退时传达信用。在某些实施例中,对这些硬件结构的管理被解除聚合,例如完成缓冲器和调度器(例如,请求调度电路)只通过被完成缓冲器写入和被调度器读取的寄存器指示出完成缓冲器的充满来通信。这个通信可被扩展到包括在本地响应的情况下的直接寄存器更新,或者在远程响应的情况下的通过网络对更新的请求。
图13可被利用来示出穿过存储器接口(through-memory interface)的系统级体系结构。穿过存储器接口可涉及两个存储器接口(例如,RAF电路)的交互:“请求者”和“接收者”。请求可被从一个存储器接口,即请求者,发送到共享的缓存,在这里它们被服务。响应随后可被转发到另一存储器接口,即接收者,接收者起到利用其完成缓冲器硬件来对请求重排序的作用。最终,随着请求被从远程完成缓冲器排出,信用(例如,信用返回值)可被返回到请求者,例如允许其发送更多请求。
图13根据本公开的实施例图示了耦合在加速器分片1308和多个缓存堆(1)-(6)之间的具有远程信用返回微体系结构的多个请求地址文件(RAF)电路(例如,RAF电路1304和RAF电路1306)。在一个实施例中,多个(例如,每个)RAF电路是图12中的RAF电路1200的实例。在一个实施例中,多个请求地址文件(RAF)电路通过加速器-缓存网络1314(例如,互连)耦合到多个缓存堆。在一个实施例中,RAF电路1304是(存储器访问的)请求者RAF电路,并且RAF电路1306是(来自存储器访问的数据的)接收者RAF电路,例如对于特定(例如,特定类型的)存储器访问而言。在一个实施例中,RAF电路1304耦合到加速器分片1308中的PE的第一子集,例如包括PE 1310,并且RAF电路1306耦合到加速器分片1308中的PE的不同的第二子集,例如包括PE 1316。在一个实施例中,RAF电路1304将把(例如,由PE 1310生成的)存储器请求发送到加速器-缓存网络1314中(例如,如本文所述的ACI),以例如被缓存堆之一服务,并且针对存储器请求的相应数据(例如,针对加载请求的有效载荷数据)被操控到RAF电路1306(例如,数据(或者该数据的子集)将被发送到PE 1316)。带圈的数字指示出远程存储器操作的数据流的示例。在某些实施例中,加载的数据值可返回到存储器子系统中的若干个不同位置(例如,RAF电路)。作为一个非限制性示例,在1处,向量存储操作被从RAF电路1304发出(例如,并且其相应的数据被从其op参量(输入)队列去除)。在此示例中的2处,缓存堆经由加速器-缓存网络1314接收加载请求。在此示例中的3处,缓存堆向接收方RAF电路1306发送请求的值。在此示例中的4处,在读取请求的值后(并且例如在从接收到了请求的值的相应完成缓冲器消耗、排出或删除了请求的值后),远程RAF 1306向请求者RAF电路1304返回信用返回值(例如,流控制信用)。在此示例中的5处,请求方RAF电路1304从一个或多个远程RAF电路收集信用,例如使得新的存储器请求能够被释放。系统1300可作为单个分片。
在某些实施例中,加速器-缓存网络1314还耦合到缓存归属代理和/或下一级缓存1312。在某些实施例中,加速器-缓存网络1314与加速器(例如,加速器分片)的任何(例如,电路交换或分组交换)网络分离,例如,RAF是加速器(例如,加速器分片)和缓存之间的接口。在一个实施例中,缓存归属代理将连接到存储器(例如,与缓存堆分离)以从该存储器(例如,图2中的存储器202)访问数据,以例如在缓存堆和(例如,系统)存储器之间移动数据。在一个实施例中,下一级缓存是(例如,单个)更高级缓存,例如使得针对在更低级缓存(例如,图13中的缓存堆)中没有找到(例如,错失(miss))的数据检查下一级缓存(例如,更高级缓存1312)。在一个实施例中,此数据是有效载荷数据。在另一实施例中,此数据是物理地址到虚拟地址映射。在一个实施例中,CHA将对错失(例如,更高级缓存1312中的错失)执行对(例如,系统)存储器的搜索并且对于命中(例如,请求的数据在被搜索的缓存中)不执行搜索。
在一个实施例中,加速器(例如,加速器分片)1308的组件(例如,处理元件的分布式集合之一)发送存储器请求(例如,经由加速器的分组交换网络和/或电路交换网络)以访问存储器位置(例如,虚拟地址),例如与加速器(例如,加速器分片)分离的存储器位置。该请求可被发送到RAF电路(例如,RAF电路1304)。虽然RAF电路和缓存堆的数目被描绘为八个,但在这里的某些实施例中可利用任何一个或多个RAF电路和/或任何一个或多个缓存堆。RAF电路的数目可与缓存堆的数目相同或不同。RAF电路可耦合到缓存堆的任何一者,例如经由加速器-缓存网络1314。所描绘的组件的布置是一个示例并且其他布置是可能的,例如在某些实施例中可省略下一级缓存和/或缓存归属代理(CHA)。
图14根据本公开的实施例图示了耦合到具有远程信用返回微体系结构的第二请求地址文件(RAF)电路1400B的具有远程信用返回微体系结构的第一请求地址文件(RAF)电路1400A。在一个实施例中,在配置时,在系统的寄存器1410A中指定曾在数据流图中的存储器加载和/或存储操作。数据流图中到这些存储器操作的弧随后可连接到输入队列1422A、1424A和1426A,例如从PE 1454A中的一个或多个(例如,从其缓冲器)。在一个实施例中,数据请求(例如,加载或存储)被请求者RAF电路1400A在输出1441A处发送到存储器(例如,经由网络),并且响应于该存储器请求发送的数据(例如,针对加载请求的新的有效载荷数据或者针对存储请求的其他数据(例如,存储确认值))被接收者RAF电路1400B在输入1443B处接收,例如随后被转发到PE 1454B中的一个或多个上。存储器命令1442A(例如,存储器请求)可包括以下的一个或多个(例如,其任何组合):指示出哪个RAF电路是该存储器命令的请求者的标识(ID)值,指示出哪个RAF电路(例如,其可以是请求者RAF电路1400A)将接收信用返回令牌(例如,信用返回值)作为对数据(例如,响应于存储器命令生成的来自存储器的数据)被接收者RAF电路接收到的接收确认的标识(ID)值,指示出哪个RAF电路是响应于存储器命令生成的来自存储器的数据的接收者的标识(ID)值,指示出数据将被存储在接收者RAF电路1400B的多个完成缓冲器(例如,1428B、1430B或1432B)中的哪个完成缓冲器中的标识(ID)值,以及指示出数据将被存储在接收者RAF电路1400B的多个完成缓冲器(例如,1428B、1430B或1432B)中的该完成缓冲器的哪个(哪些)槽位中的标识(ID)值。在一个实施例中,信用返回令牌目标ID(例如,识别目标RAF电路)被存储在接收者(例如,目的地)RAF电路的配置中(例如,在初始配置时)。
信用返回令牌可以是指示出来自输入队列(例如,队列1422A、1424A或1426A)的存储器请求完成(例如,已被接收者RAF电路1400B接收和/或数据被从接收了针对该存储器请求的该数据的接收者RAF电路1400B的相应完成缓冲器读取(并且例如被消耗、排出或删除))的值(例如,被相应地设置为一(或零)的单个比特)。调度器1412B可在其RAF电路1400B(例如,其完成缓冲器或队列)接收到响应于存储器请求(例如其中RAF电路1400B是接收者RAF电路的存储器请求)生成的数据时发出信用返回令牌。RAF电路1400A和1400B包括允许远程信用返回的电路,以例如从接收者RAF电路1400B针对存储器请求发送信用返回令牌(例如,值),以指示出已实现一定的里程碑,例如接收者RAF电路1400B响应于来自不同的请求者RAF电路1400A的存储器请求而接收到了数据和/或数据被从接收者RAF电路1400B的相应完成缓冲器读取(并且例如被消耗、排出或删除)。此外,RAF电路1400A-B还允许本地信用返回,例如从单个RAF电路(例如,RAF电路1400A或RAF电路1400B)(例如,从其内)针对存储器请求发送信用返回令牌(例如,值),该信用返回令牌(例如,值)指示出已实现一定的里程碑,例如该单个RAF电路响应于来自同一个RAF电路的存储器请求而接收到了数据和/或数据被从对于该存储器请求接收到了数据的同一个RAF电路的相应完成缓冲器读取(并且例如被消耗、排出或删除)。
RAF电路1400A可被配置为是请求者RAF电路、接收者RAF电路或者这两者。RAF电路1400A可被配置为是请求者RAF电路、接收者RAF电路或者这两者。在所描绘的实施例中,对于示例存储器请求,RAF电路1400A被配置为是请求者RAF电路并且RAF电路1400A被配置为是接收者RAF电路。
在某些实施例中,RAF电路1400A-B经由对(一个或多个)完成(例如,完成缓冲器)流控制寄存器1444A、(一个或多个)完成(例如,完成缓冲器)流控制寄存器1444B、(一个或多个)完成(例如,完成缓冲器)配置寄存器1446A和/或(一个或多个)完成(例如,完成缓冲器)配置寄存器1446B的一个或多个中的控制值的设置而被配置为是请求者RAF电路和/或接收者RAF电路。作为一个示例,(一个或多个)完成(例如,完成缓冲器)流控制寄存器1444A、(一个或多个)完成(例如,完成缓冲器)流控制寄存器1444B、(一个或多个)完成(例如,完成缓冲器)配置寄存器1446A和/或(一个或多个)完成(例如,完成缓冲器)配置寄存器1446B在配置期间耦合到网络(例如,本地网络1402、1404、1406或1408)以提供这些控制值。在某些实施例中,本地网络是本文论述的电路交换网络,例如参考图6或图11论述的。在某些实施例中,PE(例如,PE 1454A中的PE)向RAF电路发送数据(例如,在本地网络1402、1404、1406或1408上)(例如,使得存储器请求被输入到RAF电路中(例如,输入队列1422A、1424A或1426A的槽位))。在某些实施例中,PE(例如,PE 1454B中的PE)从RAF电路接收数据(例如,在本地网络1402、1404、1406或1408上)(例如,使得针对存储器请求的期望数据被从RAF电路(例如,从输出完成缓冲器1428B、1430B或1432B的槽位)输入到PE中和/或数据被从RAF电路(例如,从输出完成缓冲器1428B、1430B或1432B的槽位)消耗、排出或删除)。在一个实施例中,同一PE将向同一输入队列发送其(相同)存储器请求(例如,利用该输入队列的槽位的任何一者)。当到时间服务存储器请求时(例如,当要接收针对该存储器请求的数据的完成缓冲器1428B、1430B或1432B中的某个完成缓冲器经由令牌(例如,信用返回令牌)指示出其有空间可用时),调度器1412A可经由输出端口1441A向存储器发送与输入队列(例如,输入队列1422A、1424A或1426A)中的输入数据相对应的存储器请求。在一个实施例中,发送存储器请求将使得该输入数据被从输入队列清除,例如在输入队列中为另一存储器请求打开槽位。在一个实施例中,存储器请求是存储器命令1442A并且至少包括接收者RAF电路1400B的标识。与存储器请求相对应的数据(例如,对于加载请求从存储器返回的数据)可被发送到接收者RAF电路1400B(例如,到接收者RAF电路的完成缓冲器)。在某些实施例中,完成缓冲器是允许数据被无序插入的存储结构,例如通过调度器向数据生产者指派到该结构中的索引并且生产者于是可在数据变得可用时填充数据。在此实施例中数据可按索引顺序而不是到达顺序被排出。在某些实施例中,队列是这样的存储结构:在其中,数据被按到达顺序插入和排出。
在一个实施例中,与存储器请求相对应的数据被从存储器返回并且进入输入端口1443B中。此数据可包括标识符来指示出信用返回令牌(例如,值)将被发送到不同的RAF电路(例如,请求者RAF电路1400A)或者在同一RAF电路内(例如,接收者RAF电路1400B)以将存储器请求标记为完成(例如,将该存储器请求从输入队列中去除)。此数据(例如,标识符)可在RAF电路配置数据中传达。在一个实施例中,标识符是上文论述的标识(ID)值中的一个或多个。在一个实施例中,标识符被对照完成(例如,完成缓冲器)配置寄存器1446B中的指示出与标识符相对应的存储器请求是要被发送到远程RAF电路还是同一(例如,本地)RAF电路的值(例如,被设置为远程响应值或本地响应值)来进行检查。在一个实施例中,对于完成(例如,完成缓冲器)配置寄存器1446B包括多个元素,其中每个元素对应于单个完成缓冲器(或者其槽位)。完成(例如,完成缓冲器)配置寄存器1446B的每个元素从而可被设置来指示出何时输入端口1443B上的来自存储器的数据被接收到,和/或何时数据被从要接收针对存储器请求的数据的RAF电路1400B的完成缓冲器(例如,完成缓冲器1428B、1430B或1432B)中的槽位读取(并且例如被消耗、排出或删除)将使得相应的信用返回令牌(例如,值)被发送到不同的RAF电路(例如,递减计数器1414A中的相应计数器值)或者同一RAF电路内以将该存储器请求标记为完成(例如,递减计数器1414B中的相应计数器值)。
远程响应模式
在一个这种实施例中,在完成(例如,完成缓冲器)配置寄存器1446B中设置远程响应值将使得当在输入端口1443B上接收到要被存储在特定的完成缓冲器(例如,或者其槽位)(例如,完成缓冲器1428B、1430B或1432B)中的、来自存储器的数据时,和/或当数据被从要接收针对存储器请求的数据的RAF电路1400B的完成缓冲器(例如,完成缓冲器1428B、1430B或1432B)中的槽位读取(并且例如被消耗、排出或删除)时,信用返回令牌(例如,值)被发送到远程RAF电路,例如,经由输出端口1450B到通道1401中(例如,本地网络1402、1404、1406或1408的路径)。在一个实施例中,通道1401耦合到请求者RAF电路1400A的(例如,远程信用返回)输入队列1220A。在一个实施例中,通道1401是接收者RAF电路1400B和请求者RAF电路1400A之间的专用(例如,一比特)链路。
在某些实施例中,来自图12的RAF电路1200的第一实例可被利用作为接收者RAF电路1400B,并且来自图12的RAF电路1200的另一实例可被利用作为请求者RAF电路1400A。远程响应模式(例如,远程响应值被设置在接收者RAF电路1400B的完成(例如,完成缓冲器)配置寄存器1446B中)的信用返回令牌(例如,值)可被存储到请求者RAF电路1400A的(例如,远程信用返回)输入队列1420A中或者被直接发送到调度器1412A和/或请求者RAF电路1400A的(例如,令牌)计数器1414A。
在远程响应模式中的一个实施例中,请求者RAF电路1400A的完成(例如,完成缓冲器)流控制寄存器1444A被设置以第一值以使得交换机1448A(例如,复用器)从RAF电路的(例如,远程信用返回)输入队列1420A源发信用返回令牌,而不是第二值,第二值将使得交换机1448A(例如,复用器)从该RAF电路内源发信用返回令牌(例如,对于该特定的本地RAF电路1400A的完成缓冲器)。在某些实施例中,(例如,在其输入队列1422A、1424A或1426A中包括了存储器请求的)请求者RAF电路1400A接收针对存储器请求的信用返回令牌(例如,值)将使得调度器将该存储器请求标记为完成,例如通过递减指示出(远程)完成缓冲器1428B、1430B或1432B的多少个槽位(如果有的话)可用(例如,空闲)(或者输入队列1422A、1424A或1426A空闲)的计数器1414A。在一个实施例中,每个输入队列1422A、1424A或1426A包括其自己的计数器(例如,三个计数器)。在一个实施例中,调度器1412A将暂缓从其输入队列1422A、1424A或1426A发出另外的存储器请求,直到在目标(接收者)完成缓冲器中相应地有空间(例如,槽位)可用为止。空间可用可由信用返回令牌来表示。
本地响应模式
在一个这种实施例中,在完成(例如,完成缓冲器)配置寄存器1446B中设置本地响应值将使得:当在输入端口1443B上接收到要被存储在特定的完成缓冲器(例如,或者其槽位)(例如,完成缓冲器1428B、1430B或1432B)中的、来自存储器的数据时和/或当数据被从接收到针对存储器请求的数据的RAF电路1400B的完成缓冲器(例如,完成缓冲器1428B、1430B或1432B)中的槽位读取(并且例如被消耗、排出或删除)时,信用返回令牌(例如,值)被在该同一(例如,本地)RAF电路1400B内发送(例如,经由路径1452B,并且例如不在网络(例如,本地网络1402、1404、1406或1408)上)。在某些实施例中,路径1452B耦合到交换机1448B的输入。
在本地响应模式中的一个实施例中,RAF电路1400B的完成(例如,完成缓冲器)流控制寄存器1444B不被设置以第一值来使得(例如,通过发送控制值)RAF电路1400B的交换机1448B(例如,复用器)将从RAF电路1400B的(例如,远程信用返回)输入队列1420B源发信用返回令牌,而是被设置以第二值,该第二值将使得交换机1448B(例如,复用器)从该RAF电路1400B内源发信用返回令牌(例如,对于该特定的本地RAF电路的完成缓冲器)。在某些实施例中,在其输入队列1422B、1424B或1426B中包括了存储器请求的RAF电路内对信用返回令牌(例如,值)的生成(并且例如接收)将使得调度器将该存储器请求标记为完成,例如通过递减指示出(本地)完成缓冲器1428B、1430B或1432B的多少个槽位空闲(或者输入队列1422B、1424B或1426B空闲)的计数器1414B。在一个实施例中,每个(本地)输入队列1422B、1424B或1426B包括其自己的计数器(例如,三个计数器)。在一个实施例中,调度器1412B将暂缓从其输入队列1422B、1424B或1426B发出另外的存储器请求,直到在其(目标)完成缓冲器中相应地有空间可用为止。空间可用可由信用返回令牌来表示。
存储器操作的弧从而可离开完成缓冲器1428B、1430B或1432B。可选地,依从性令牌(其可以是单个比特)可到达队列1418A中。可选地,依从性令牌将从队列1416A离开。令牌计数器1414A也可以是这些队列的紧凑表示并且跟踪用于任何给定输入队列的(例如,依从性和/或信用返回)令牌的数目。如果依从性令牌计数器1414A饱和,则对于新的存储器操作可不生成额外的依从性令牌。因此,存储器排序电路(例如,图11中的RAF)可暂缓调度新的存储器操作,直到依从性令牌计数器1414A变得不饱和为止。
作为加载的示例,地址到达队列1422A中,调度器1412A将其与1410A中的加载匹配。用于此加载的完成缓冲器槽位是按地址到达的顺序来指派的。假定图中的这个特定加载没有被指定依从性,则地址和完成缓冲器槽位被调度器(例如,经由存储器命令1442A)派遣到存储器系统。当结果返回到复用器1440B(示意性示出)时,其被存储到其指定的完成缓冲器槽位中(例如,因为其在存储器系统中始终携带着目标槽位)。完成缓冲器按地址到达的顺序将结果发送回到本地网络(例如,本地网络1402、1404、1406或1408)中。
存储可以是类似的,只不过在某些实施例中地址和数据都将在任何操作被派遣到存储器系统之前到达。
图15A至图15G根据本公开的实施例图示了图14的具有远程信用返回微体系结构的第一请求地址文件(RAF)电路1400A和具有远程信用返回微体系结构的第二请求地址文件(RAF)电路1400B执行操作的周期。具体地,图15A至图15G图示了信用返回值被从被配置为发送某些(例如,不是全部)信用返回值的接收者RAF电路1400B远程地发送到请求者RAF电路1400A的实施例。这里的带圈的数字图示了特定的存储器请求。如果RAF电路的输入队列是满的,则其可向请求方PE(例如,PE 1454A之一)断言背压信号(例如,如本文所述)(例如,经由背压令牌)以暂缓该PE向RAF电路发送存储器请求。如果目标PE的输入队列是满的(例如,PE 1454B之一),则其可向RAF电路1400B断言背压信号(例如,如本文所述)(例如,经由背压令牌)以暂缓RAF电路1400B从其完成缓冲器向目标PE发送数据。
图15A描绘了一种实施例,其中在周期零,存储器请求(例如,称为存储器请求“零”以进行标识)(例如,来自第一PE的加载请求)到达请求者RAF电路1400A的输入队列1422A中。这可基于用于输入队列1422A的背压令牌(例如,发送到第一PE)具有指示出在输入队列1422A中有空间可用的值。
图15B描绘了一种实施例,其中在周期一,存储器请求一(例如,来自第一PE的另一加载请求)到达请求者RAF电路1400A的输入队列1422A中,例如基于用于输入队列1422A的背压令牌(例如,发送到第一PE)具有指示出在输入队列1422A中有空间可用的值。在所描绘的周期一中,存储器请求零(例如,来自第一PE的加载请求)被发出到存储器(例如,缓存),例如存储器请求零被调度器1412A发出,因为计数器1414A的计数器值指示出(远程)完成缓冲器1430B的至少一个槽位(例如,如果一个槽位将被利用于将存储器请求输入到输入队列的话)对于要在该完成缓冲器中存储数据的所有未解决(例如,在存储器内)的存储器请求是可用的(例如,空闲)。存储器请求零随后可在该存储器命令被发出到存储器时被从输入队列1422A删除。
图15C描绘了一种实施例,其中在周期二,存储器请求二(例如,来自第一PE的另一加载请求)到达请求者RAF电路1400A的输入队列1422A中,例如基于用于输入队列1422A的背压令牌(例如,发送到第一PE)具有指示出在输入队列1422A中有空间可用的值。在所描绘的周期二中,存储器请求一(例如,来自第一PE的加载请求)被发出到存储器,例如被调度器1412A发出,因为计数器1414A的计数器值指示出(远程)完成缓冲器1430B的至少一个槽位(例如,如果一个槽位将被利用于将存储器请求输入到输入队列的话)对于要在该完成缓冲器中存储数据的所有未解决的存储器请求是可用的(例如,空闲)。存储器请求一随后可在该存储器命令被发出到存储器时被从输入队列1422A删除。
图15D描绘了一种实施例,其中在周期三,存储器请求二(例如,来自第一PE的加载请求)被暂缓发出到存储器,例如不被调度器1412A发出,因为计数器1414A的计数器值指示出(远程)完成缓冲器1430B没有另外的槽位(例如,如果一个槽位将被利用于将存储器请求输入到输入队列的话)可用(例如,空闲)来允许额外的存储器请求的发出。
在一个实施例中,在周期四中,存储器请求二(例如,来自第一PE的加载请求)保持被暂缓发出到存储器,因为计数器1414A的计数器值指示出(远程)完成缓冲器1430B没有槽位(例如,如果一个槽位将被利用于将存储器请求输入到输入队列的话)可用(例如,空闲)来允许额外的存储器请求的发出。
图15E描绘了一种实施例,其中在周期五,存储器请求二(例如,来自第一PE的加载请求)保持被暂缓发出到存储器,例如不被调度器1412A发出,因为计数器1414A的计数器值指示出(远程)完成缓冲器1430B没有槽位(例如,如果一个槽位将被利用于将存储器请求输入到输入队列的话)可用(例如,空闲)来允许额外的存储器请求的发出。另外,在所描绘的周期五中,存储器(例如,缓存)已返回了与存储器请求零相对应的数据,并且例如该数据被路由到适当的(远程)完成缓冲器1430B(例如,其槽位)中(例如,基于被作为字段与来自存储器的数据包括在一起的该缓冲器和/或槽位的标识数据)。
图15F描绘了一种实施例,其中在周期六,存储器请求二(例如,来自第一PE的加载请求)保持被暂缓发出到存储器,例如不被调度器1412A发出,因为计数器1414A的计数器值指示出(远程)完成缓冲器1430B没有槽位(例如,如果一个槽位将被利用于将存储器请求输入到输入队列的话)可用(例如,空闲)来允许额外的存储器请求的发出。另外,在所描绘的周期六中,对于存储器请求零的(例如,响应)数据被PE(例如,PE 1454B中的PE)从完成缓冲器1430B中的槽位读取(并且例如被消耗、排出或删除)。在某些实施例中,对(例如,响应)数据的这个读取(和/或消耗、排出或删除)使得RAF电路1400B(例如,根据完成配置寄存器1446B中对于该槽位的相应值被设置为远程响应值,而不是本地响应值)向RAF电路1400A发送信用返回值。在所描绘的实施例中,信用返回值(阴影圆圈)被从RAF电路1400B的输出端口1450B发送,沿着通道1401,到RAF电路1400A的(例如,远程信用返回)输入队列1420A中。
例如,在RAF电路1400A被设置为从远程RAF电路1400A接收信用返回值的情况下(例如,当(一个或多个)完成(例如,完成缓冲器)流控制寄存器1444A被设置为第二值以使得交换机1448A从远程RAF电路源发时),调度器1412A将执行计数器1414A的计数器值的递减。
另外,在所描绘的周期六中,存储器(例如,缓存)已返回了与存储器请求一相对应的数据,并且例如该数据被路由到适当的(远程)完成缓冲器1430B(例如,其槽位)中(例如,基于被作为字段与来自存储器的数据包括在一起的该缓冲器和/或槽位的标识数据)。
图15G描绘了一种实施例,其中在周期七,存储器请求二(例如,来自第一PE的加载请求)发出到存储器,因为计数器1414A的计数器值在调度器1412A从RAF电路1400A的输入队列1420A接收到信用返回值(图15F中对于存储器请求零的阴影圆圈)时被递减了,以指示出(远程)完成缓冲器1430B的至少一个槽位(例如,如果槽位将被利用于将存储器请求输入到输入队列的话)是可用的(例如,空闲)。信用返回值(图15F中的阴影圆圈)可被删除,例如基于计数器1414A递减。存储器请求二随后可在存储器命令被发出到存储器时(例如,因为存储器命令被发出到存储器)被从输入队列1422A删除,并且存储器请求三(例如,来自第一PE的另一加载请求)到达请求者RAF电路1400A的输入队列1422A中,例如基于用于输入队列1422A的背压令牌(例如,发送到第一PE)具有如下值:该值指示出由于从输入队列1422A删除存储器请求二,在输入队列1422A中有空间可用。另外,在周期七中,对于存储器请求一的(例如,响应)数据被PE(例如,PE 1454B中的PE)从完成缓冲器1430B中的槽位读取(并且例如被消耗、排出或删除)。在某些实施例中,对(例如,响应)数据的这个读取(和/或消耗、排出或删除)使得RAF电路1400B(例如,根据完成配置寄存器1446B中对于该槽位的相应值被设置为远程响应值,而不是本地响应值)向RAF电路1400A发送信用返回值。在所描绘的实施例中,信用返回值(图15G中对于存储器请求一的阴影圆圈)被从RAF电路1400A的输出端口1450B发送,沿着通道1401,到RAF电路1400A的(例如,远程信用返回)输入队列1420A中。操作可相应地继续。在一个实施例中,图15F和图15G中所描绘的信用返回值是信用返回值的不同实例。
图16根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的控制电路1600。控制电路1600包括完成流控制存储装置1644(例如,配置存储装置)来存储第一值以使得交换机(例如,复用器1648)从RAF电路的(例如,远程信用返回)输入队列1620源发信用返回令牌,或者存储第二值,该第二值将使得交换机(例如,复用器1648)从该RAF电路内源发信用返回令牌(例如,对于该特定的本地RAF电路的完成缓冲器)。在一个实施例中,图16中的完成流控制存储装置1644(例如,配置存储装置)是图14中的(一个或多个)完成(例如,完成缓冲器)流控制寄存器1444A。在一个实施例中,图16中的完成缓冲器状态存储1614是图14中的令牌计数器1414A。在一个实施例中,图16中的(例如,远程信用返回)输入队列1620是图14中的(例如,远程信用返回)输入队列1420A。复用器1648、与逻辑门1646和/或或逻辑门1645可以是调度器的一部分,例如图14中的调度器1412A。复用器1648可被利用来基于指示出本地完成缓冲器何时在被出队(例如,经由本地完成缓冲器出队值1652)的第一输入或者指示出本地完成缓冲器正在被出队(例如,被远程信用返回输入队列1620)的第二输入来修改存储在完成缓冲器状态存储1614(例如,令牌计数器)中的值。复用器1648可被控制为(i)在指示出本地响应模式活跃的第一值被存储在完成流控制存储装置1644(例如,配置存储装置)中时从第一输入源发(例如,该值被发送到复用器1648的控制输入),或者(ii)在指示出相反是远程响应模式活跃的第二值被存储在完成流控制存储装置1644(例如,配置存储装置)中时从第二输入源发(例如,其中该第一值和第二值被发送作为复用器1648的控制输入)。在一个实施例中,队列出队值1606(例如,被设置为一)将使得输入队列1620将存储在其中的值出队(例如,队列的顶部(头部)的值)。本地网络1602可以是这里的任何网络,例如电路交换的背压式网络。在一个实施例中,队列非空值1604(例如,被设置为一)指示出输入队列1620包括存储在其中的至少一个值。
在一个实施例中,存储器命令包括RAF电路ID和完成缓冲器号码(以及例如槽位号码)。在某些实施例中,存储器命令包括指示出该存储器响应将被发送到哪个RAF电路(例如,对于远程RAF电路)的字段。
图17根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的存储器请求的示例格式。DST可以是指示出目的地(例如,接收方)RAF电路的标识的值(例如,以将结果数据操控到该RAF电路),CMD可以是指示出接收方RAF电路要采取的动作是本地信用返回(例如,本地响应模式)或者远程信用返回(例如,远程响应模式)的命令值,并且OP ID可以是指示出RAF电路要执行(例如,可执行的多个操作中的)哪个操作的操作标识值。
图18根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的接收者完成控制流寄存器(例如,图14中的(一个或多个)完成流控制寄存器1444A或1444B)的接收者完成控制流值的示例格式。使能可以是当被设置(例如,为高)时指示出令牌计数器是否将被用于(例如,递增和/或递减)信用返回的值,并且复用选择可以是被设置来指示出其是否将为该信用返回源发值(例如,其将会源发本地信用返回还是源发远程信用返回)的值。
图19根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的接收者完成配置寄存器(例如,图14中的(一个或多个)完成配置寄存器1446A或1446B)的响应值的示例格式。使能可以是当被设置(例如,为高)时指示出完成缓冲器是否被使能(例如,和/或信用返回是将在该RAF电路中内部发送还是通过输出端口(例如,图14中的输出端口1450A或1450B)远程发送)的值。
图20根据本公开的实施例图示了具有远程信用返回微体系结构的请求地址文件(RAF)电路的交换机配置寄存器和交换机。例如,复用器(mux)配置寄存器2003可被利用来设置将(例如,电路交换)网络2002、2004、2006和2208耦合到队列2016、2018或2020的复用器2013。例如,复用器(mux)配置寄存器2005可被利用来设置将(例如,电路交换)网络2002、2004、2006和2208耦合到队列2022、2024或2026的复用器2015。例如,复用器(mux)配置寄存器2007可被利用来设置将(例如,电路交换)网络2002、2004、2006和2208耦合到完成缓冲器2028、2030或2032的复用器2017。在一个实施例中,每个缓冲器或队列在配置寄存器中包括各自的元素来设置该缓冲器或队列的耦合(例如,到CSA的另一组件)。在一个实施例中,例如,如图14中所示,复用器被设置来提供完成缓冲器1430B和PE 1454B中的PE、输入队列1422A和PE 1454A中的PE和/或端口输出端口1450B到(例如,远程信用返回)输入队列1420A之间的耦合以在RAF电路1400A和RAF电路1400B之间创建通道1401。
这里的某些实施例要求随着响应排出从远程接收者(例如,RAF电路)到请求者(例如,RAF电路)返回信用(例如,信用返回值)。在一个实施例中,在RAF电路之间提供通信(例如,为了信用的返回)的网络涉及对架构内资源的使用,其中请求者和接收者通过电路交换网络连接,例如如图14中所示。在某些实施例中,此网络涉及专用链路,并且可以较窄,例如一比特宽。从而,在实施例中,这些连接可在没有对电路交换网络的硬件修改的情况下做出,例如只涉及设置交换机来创建期望的(例如,静态)数据通道。或者,可配设共享的分组交换网络,例如以下的图21中所示。
图21根据本公开的实施例图示了由分组交换网络2150耦合到具有远程信用返回微体系结构的第二请求地址文件(RAF)电路2100B的具有远程信用返回微体系结构的第一请求地址文件(RAF)电路2100A。在某些实施例中,分组交换网络2150包括网络资源,例如但不限于网络数据流端点电路,来允许PE和/或RAF电路通信。分组交换网络2150包括与第一RAF电路2100A相关联的第一路由器2154,其耦合到与第二RAF电路2100B相关联的第二路由器2156。在分组交换网络2150的一个实施例中,接收者RAF电路(例如,第二RAF电路2100B)注入信用消息,这些信用消息被标记以信用返回值和目标RAF ID和请求者RAF电路ID(例如,第一RAF电路2100A)。这些消息随后可流到正确的RAF,其中请求者信用管理数据被更新。在请求者将始终排出信用请求的一个实施例中,不需要特殊的考虑来防止死锁。
在以上的两个网络拓扑示例中(例如,电路交换和分组交换网络拓扑),接收者配置数据可被扩展来指示出信用响应是本地的还是远程的。如果共享网络被使用,则RAF配置可被扩展来包括表示响应信用应当被发送到哪个RAF的注释。此外,信用消息也可包括与信用相关联的完成缓冲器槽位或接收者队列的某个标识。在专用网络中,例如如图14中所示,此标识基于点到点网络连接可以是隐式的。
图22根据本公开的实施例图示了流程图2200。所描绘的流程2200包括:从耦合到处理元件的空间阵列中的第一处理元件和缓存的第一存储器接口电路向该缓存发出存储器请求,该存储器请求包括字段来将第二存储器接口电路标识为针对该存储器请求的数据的接收者(2202);将第二存储器接口电路的完成配置寄存器设置为远程响应值(2204);并且当针对存储器请求的数据到达第二存储器接口电路处并且第二存储器接口电路的完成配置寄存器被设置为远程响应值时,从耦合到处理元件的空间阵列中的第二处理元件和缓存的第二存储器接口电路向第一存储器接口电路发送信用返回值,以使得第一存储器接口电路将存储器请求标记为完成(2206)。
2.5执行(例如,数据流)操作的网络资源,例如电路
在某些实施例中,处理元件(PE)利用专用虚拟电路来通信,该专用虚拟电路是通过静态配置(例如,电路交换)通信网络而形成的。这些虚拟电路可以是流控制的并且完全背压式的,例如使得如果源没有数据或者其目的地已满则PE将会暂缓。在运行时,数据可流经实现映射的数据流图(例如,映射的算法)的PE。例如,数据可从存储器流入,经过处理元件的空间阵列(例如,其架构区域),然后返回到存储器。
这种体系结构相对于传统的多核处理器可实现显著的性能效率:计算(例如PE形式的计算)与核心相比可以更简单并且更众多,并且通信可以是直接的,例如与存储器系统的扩展不同。然而,处理元件的空间阵列(例如,其架构区域)可能是针对编译器生成的表达树的实现来调节的,其以很少的复用或解复用为特征。这里的某些实施例(例如,经由网络资源,例如但不限于网络数据流端点电路)扩展该体系结构以支持(例如,高基数)复用和/或解复用,例如尤其是在函数调用的情境中。
空间阵列,例如图1中的处理元件101的空间阵列,可使用(例如,分组交换)网络来通信。这里的某些实施例提供了电路来将高基数数据流操作覆盖在这些网络上以便通信。例如,这里的某些实施例利用了现有的网络来通信(例如,参考图1描述的互连网络104)以在处理元件和空间阵列的其他组件之间提供数据路由能力,但也增强网络(例如,网络端点)以支持一些(例如,少于全部)数据流操作的执行和/或控制(例如,不利用处理元件来执行这些数据流操作)。在一个实施例中,利用空间阵列内的特殊硬件结构(例如,网络数据流端点电路)支持(例如,高基数)数据流操作,例如不消耗处理资源或劣化性能(例如,处理元件的性能)。
在一个实施例中,两个点之间(例如,数据的生产者和消耗者之间)的电路交换网络包括这两个点之间的专用通信线路,例如其中两个点之间的(例如物理)交换机被设置为创建两个点之间的(例如,专属)物理电路。在一个实施例中,两个点之间的电路交换网络在两个点之间的连接的使用开始时被设立并且在该连接的整个使用期间被维持。在另一实施例中,分组交换网络包括两个(例如,或者更多个)点之间的共享通信线路(例如,通道),例如其中来自不同连接的分组共享该通信线路(例如,根据每个分组的数据被路由,例如包括头部和有效载荷的分组的头部中的数据)。分组交换网络的示例在下面论述,例如参考夹层网络论述。
图23根据本公开的实施例图示了伪代码函数调用2301的数据流图2300。函数调用2301将加载两个输入数据操作对象(例如,分别由指针*a和*b指示),并且将它们乘在一起,并且返回结果数据。这个或其他函数可被执行多次(例如,在数据流图中)。图23中的数据流图图示了PickAny数据流操作器2302来执行如下操作:选择控制数据(例如,索引)(例如,从调用点(call site)2302A选择),并且利用拷贝数据流操作器2304将该控制数据(例如,索引)拷贝到第一Pick数据流操作器2306、第二Pick数据流操作器2306和Switch数据流操作器2316的每一者。在一个实施例中,索引(例如,来自PickAny)从而将数据输入和输出到相同的索引位置,例如[0,1...M]的相同索引位置,其中M是整数。第一Pick数据流操作器2306随后可根据控制数据拉取多个输入数据元素2306A中的一个输入数据元素,并且使用该一个输入数据元素作为(*a)来随后利用加载数据流操作器2310加载存储在*a处的输入数据值。第二Pick数据流操作器2308随后可根据控制数据拉取多个输入数据元素2308A中的一个输入数据元素,并且使用该一个输入数据元素作为(*b)来随后利用加载数据流操作器2312加载存储在*b处的输入数据值。这两个输入数据值随后可被乘法数据流操作器2314(例如,作为处理元件的一部分)相乘。乘法的结果数据随后可被Switch数据流操作器2316路由(例如,路由到下游处理元件或其他组件),例如路由到调用点2316A,例如根据到Switch数据流操作器2316的控制数据(例如,索引)来路由。
图23是函数调用的示例,其中用于管理数据(例如,令牌)的操控的数据流操作器的数目可能是巨大的,例如用来操控数据去到和/或来自调用点。在一个实施例中,PickAny数据流操作器2302、第一Pick数据流操作器2306、第二Pick数据流操作器2306和Switch数据流操作器2316中的一个或多个可被利用来路由(例如,操控)数据,例如当存在多个(例如,许多)调用点时。在一种实施例中。引入复用和/或解复用的函数调用的(例如,主要)目标是减小特定数据流图的实现面积,这里的某些实施例(例如,微体系结构的实施例)减小这种复用和/或解复用的数据流图(例如,复用和/或解复用的部分)的面积开销。
图24根据本公开的实施例图示了具有多个网络数据流端点电路(2402、2404、2406)的处理元件(PE)的空间阵列2401。处理元件的空间阵列2401可包括组件之间的通信(例如,互连)网络,例如如本文所述。在一个实施例中,通信网络是一个或多个分组交换通信网络(例如,其一个或多个通道)。在一个实施例中,通信网络是一个或多个电路交换的静态配置通信通道。例如,由交换机(例如,第一网络中的交换机2410和第二网络中的交换机2411)耦合在一起的一组通道。第一网络和第二网络可以是分开的或者被耦合在一起。例如,交换机2410可将其中的例如被配置为根据数据流图执行操作的多个(例如,四个)数据路径中的一个或多个耦合在一起。在一个实施例中,数据路径的数目可以是任意多数。处理元件(例如,处理元件2408)可如本文公开,例如如图9中公开。加速器分片2400包括存储器/缓存层次体系接口2412,以例如将加速器分片2400与存储器和/或缓存相接口。数据路径可延伸到另一分片或者端接于例如分片的边缘处。处理元件可包括输入缓冲器(例如,缓冲器2409)和输出缓冲器。
操作可基于其输入的可用性和PE的状态而被执行。PE可从输入通道获得操作对象并且将结果写入到输出通道,虽然也可使用内部寄存器状态。这里的某些实施例包括可配置的数据流友好的PE。图9示出了一个这种PE的详细框图:整数PE。此PE包括若干个I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器。在每个周期,调度器可基于输入和输出缓冲器的可用性和PE的状态来选择指令来执行。操作的结果随后可被写入到输出缓冲器或者写入到寄存器(例如,PE本地的寄存器)。写入到输出缓冲器的数据可被传输到下游PE以便进行进一步处理。这种风格的PE可能是极为能量高效的,例如不是从复杂的多端口寄存器文件读取数据,PE而是从寄存器读取数据。类似地,指令可被直接存储在寄存器中,而不是虚拟化指令缓存中。
可在特殊的配置步骤期间设置指令寄存器。在此步骤期间,除了PE间网络以外,辅助控制线和状态也可用于在包括架构的若干个PE间流入配置。作为并行化的结果,这种网络的某些实施例可提供迅速的重配置,例如可在少于大约10微秒中配置分片大小的架构。
另外,所描绘的加速器分片2400包括分组交换通信网络2414,例如作为夹层网络的一部分,例如如下所述。这里的某些实施例允许了在通信网络上(例如,在通信网络内)(例如,而不是在(一个或多个)处理元件中)执行(例如,分布式)数据流操作(例如,只路由数据的操作)。作为示例,在图24中描绘了数据流图的分布式Pick数据流操作。具体地,利用三个分开的网络(例如,全局)端点(例如,网络数据流端点电路(2402、2404、2406))上的三个分开的配置来实现分布式拾取。数据流操作可以是分布式的,例如其中若干个端点被以协调方式来配置。例如,编译工具可理解对于协调的需求。端点(例如,网络数据流端点电路)可被共享于若干个分布式操作之间,例如可就与数据流操作(例如,拾取)有关的若干个发送核对数据流操作(例如,拾取)端点。分布式数据流操作(例如,拾取)可生成与非分布式数据流操作(例如,拾取)相同的结果。在某些实施例中,分布式和非分布式数据流操作之间的差别在于分布式数据流操作的数据(例如,要路由的数据,但可不包括控制数据)通过分组交换通信网络,例如具有关联的流控制和分布式协调。虽然示出了不同大小的处理元件(PE),但在一个实施例中,每个处理元件具有相同大小(例如,硅面积)。在一个实施例中,也可包括缓冲数据的缓冲器元件,例如与处理元件分开。
作为一个示例,拾取数据流操作可具有多个输入并且操控(例如,路由)其中之一作为输出,例如如图23中所示。取代利用处理元件来执行拾取数据流操作,其可利用网络通信资源(例如,网络数据流端点电路)中的一个或多个来实现。额外地或者替换地,网络数据流端点电路可在处理元件之间路由数据,例如以便处理元件在数据上执行处理操作。这里的实施例从而可利用到通信网络来执行(例如,操控)数据流操作。额外地或者替换地,网络数据流端点电路可作为下文所述的夹层网络来执行。
在所描绘的实施例中,分组交换通信网络2414可处理某些(例如,配置)通信,以例如对处理元件和/或电路交换网络(例如,网络2413,其可包括交换机)编程。在一个实施例中,电路交换网络被配置(例如,编程)为执行一个或多个操作(例如,数据流图的数据流操作)。
分组交换通信网络2414包括多个端点(例如,网络数据流端点电路(2402、2404、2406))。在一个实施例中,每个端点包括地址或其他指示值来允许数据被路由到该端点和/或从该端点路由,例如根据数据分组(例如,数据分组的头部)来路由。
作为执行上述的一个或多个的附加或替换,分组交换通信网络2414还可执行数据流操作。网络数据流端点电路(2402、2404、2406)可被配置(例如,编程)为执行数据流图的(例如,分布式拾取)操作。组件(例如,电路)的编程在本文描述。参考图25论述配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。
作为分布式拾取数据流操作的示例,图24中的网络数据流端点电路(2402、2404、2406)可被配置(例如,编程)为执行数据流图的分布式拾取操作。参考图25论述配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。作为配置远程端点电路的附加或替换,根据本公开也可配置本地端点电路。
网络数据流端点电路2402可被配置为从多个源(例如,网络数据流端点电路2404和网络数据流端点电路2406)接收输入数据,并且例如根据控制数据输出结果数据,例如如图23中所示。网络数据流端点电路2404可被配置为将输入数据提供(例如,发送)到网络数据流端点电路2402,例如在从处理元件2422接收到输入数据时。这在图24中可被称为输入0。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径2424在处理元件2422和网络数据流端点电路2404之间提供专用通信线路。网络数据流端点电路2406可被配置为将输入数据提供(例如,发送)到网络数据流端点电路2402,例如在从处理元件2420接收到输入数据时。这在图24中可被称为输入1。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径2416在处理元件2420和网络数据流端点电路2406之间提供专用通信线路。
当网络数据流端点电路2404要向网络数据流端点电路2402发送输入数据时(例如,当网络数据流端点电路2402对于该数据具有可用存储空间和/或网络数据流端点电路2404具有其输入数据时),网络数据流端点电路2404可生成分组(例如,包括输入数据和头部)以将该数据操控到分组交换通信网络2414上的网络数据流端点电路2402(例如,作为该(例如,环状)网络2414上的一站)。这在图24中用虚线2426示意性图示。虽然图24中所示的示例利用了两个源(例如,两个输入),但可利用单个或者任意多个(例如,大于两个)源(例如,输入)。
当网络数据流端点电路2406要向网络数据流端点电路2402发送输入数据时(例如,当网络数据流端点电路2402对于该数据具有可用存储空间和/或网络数据流端点电路2406具有其输入数据时),网络数据流端点电路2404可生成分组(例如,包括输入数据和头部)以将该数据操控到分组交换通信网络2414上的网络数据流端点电路2402(例如,作为该(例如,环状)网络2414上的一站)。这在图24中用虚线2418示意性图示。虽然示出了网状网络,但可使用其他网络拓扑。
网络数据流端点电路2402(例如,在接收到来自网络数据流端点电路2404的输入0、来自网络数据流端点电路2406的输入1和/或控制数据时)于是可执行编程的数据流操作(例如,在此示例中是Pick操作)。网络数据流端点电路2402随后可从该操作输出相应的结果数据,例如输出到图24中的处理元件2408。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径2428在处理元件2408(例如,其缓冲器)和网络数据流端点电路2402之间提供专用通信线路。分布式Pick操作的另一示例在下文参考图37-图39论述。
在一个实施例中,执行操作(例如,拾取操作)的控制数据来自于空间阵列中的其他组件,例如处理元件或者通过网络。其一个示例在下文参考图25论述。注意,Pick操作器在端点2402中示意性示出,并且可不是复用器电路,例如参见下文对于图25中的网络数据流端点电路2500的论述。
在某些实施例中,数据流图可以有某些操作由处理元件执行并且某些操作由通信网络(例如,一个或多个网络数据流端点电路)执行。
图25根据本公开的实施例图示了网络数据流端点电路2500。虽然在网络数据流端点电路2500中图示了多个组件,但在单个网络数据流端点电路中可利用每个组件的一个或多个实例。网络数据流端点电路的实施例可包括图25中的任何(例如,不是所有)组件。
图25描绘了(例如,夹层)网络接口的微体系结构,示出了主要数据(实线)和控制数据(虚线)路径的实施例。这个微体系结构提供了配置存储装置和调度器来使得(例如,高基数)数据流操作器成为可能。这里的某些实施例包括到调度器的数据路径来使得分腿选择(leg selection)和描述成为可能。图25示出了网络(例如,夹层)端点(例如,站)的高级别微体系结构,其对于情境可以是环状网络的成员。为了支持(例如,高基数)数据流操作,端点(例如,操作配置存储装置2526)的配置包括考查多个网络(例如,虚拟)通道(例如,而不是基线实现方式中的单个虚拟通道)的配置。网络数据流端点电路2500的某些实施例包括来自入口和去到出口的数据路径以控制对操作(例如,操作的拾取和切换类型)的选择,和/或在PickAny数据流操作器或者SwitchAny数据流操作器的情况下描述由调度器做出的选择。在每个通信通道中,例如在(例如,分组交换通信)网络和(例如,电路交换)网络(例如,处理元件的空间阵列的架构)中,可利用流控制和背压行为。
作为对该微体系结构的实施例的一个描述,拾取数据流操作器可起到如下作用:从输入数据的多个输入中拾取结果数据的一个输出,例如基于控制数据来拾取。网络数据流端点电路2500可被配置为考虑电路2500的(一个或多个)空间阵列入口缓冲器2502之一(例如,来自架构的数据是控制数据)作为在存储在电路2500的(一个或多个)网络入口缓冲器2524中的多个输入数据元素之间进行选择以将结果数据操控到电路2500的空间阵列出口缓冲器2508。从而,(一个或多个)网络入口缓冲器2524可被认为是到虚拟复用器的输入,空间阵列入口缓冲器2502被认为是复用器选择,并且空间阵列出口缓冲器2508被认为是复用器输出。在一个实施例中,当(例如,控制数据)值被检测到和/或到达空间阵列入口缓冲器2502中时,调度器2528(例如,由存储2526中的操作配置所编程)被激活来考查相应的网络入口通道。当在该通道中有数据可用时,其被从网络入口缓冲器2524去除并且被移动到空间阵列出口缓冲器2508。入口和出口两者的控制比特随后都可被更新来反映数据的传送。这可导致在关联的网络中传播控制流令牌或信用。在某些实施例中,所有输入(例如,控制或数据)可在本地或者在网络上出现。
最初,可能看起来使用分组交换网络来实现复用和/或解复用的代码的(例如,高基数分段)操作器会防碍性能。例如,在一个实施例中,分组交换网络一般是被共享的并且调用者和被调用者数据流图可能相互远离。然而,回想起在某些实施例中,支持复用和/或解复用的意图是减小由数据流操作器内的非频繁代码路径(例如,由空间阵列)消耗的面积。从而,这里的某些实施例减小面积并且避免了消耗例如像PE这样的更昂贵的架构资源,例如,而不会(大幅)影响个体PE支持这些(例如,非频繁)操作的面积和效率。
现在转到图25的进一步细节,所描绘的网络数据流端点电路2500包括空间阵列(例如,架构)入口缓冲器2502,以例如从(例如,电路交换)网络输入数据(例如,控制数据)。如上所述,虽然描绘了单个空间阵列(例如,架构)入口缓冲器2502,但在网络数据流端点电路中可以有多个空间阵列(例如,架构)入口缓冲器。在一个实施例中,空间阵列(例如,架构)入口缓冲器2502将从空间阵列(例如,处理元件的空间阵列)的通信网络,例如从网络2504和网络2506中的一个或多个,接收数据(例如,控制数据)。在一个实施例中,网络2504是图24中的网络2413的一部分。
所描绘的网络数据流端点电路2500包括空间阵列(例如,架构)出口缓冲器2508,以例如输出数据(例如,控制数据)到(例如,电路交换)网络。如上所述,虽然描绘了单个空间阵列(例如,架构)出口缓冲器2508,但在网络数据流端点电路中可以有多个空间阵列(例如,架构)出口缓冲器。在一个实施例中,空间阵列(例如,架构)出口缓冲器2508将把数据(例如,控制数据)发送(例如,传输)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如发送到网络2510和网络2512中的一个或多个上。在一个实施例中,网络2510是图24中的网络2413的一部分。
额外地或者替换地,网络数据流端点电路2500可耦合到另一网络2514,例如分组交换网络。另一网络2514,例如分组交换网络,可用于传输(例如,发送或接收)(例如,输入和/或结果)数据到处理元件或者空间阵列中的其他组件和/或用于传输输入数据或结果数据中的一个或多个。在一个实施例中,网络2514是图24中的分组交换通信网络2414的一部分,例如时间复用网络。
网络缓冲器2518(例如,(一个或多个)寄存器)可以是(例如,环状)网络2514上的一站,以例如从网络2514接收数据。
所描绘的网络数据流端点电路2500包括网络出口缓冲器2522,以例如输出数据(例如,结果数据)到(例如,分组交换)网络。如上所述,虽然描绘了单个网络出口缓冲器2522,但在网络数据流端点电路中可以有多个网络出口缓冲器。在一个实施例中,网络出口缓冲器2522将把数据(例如,结果数据)发送(例如,传输)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如发送到网络2514上。在一个实施例中,网络2514是图24中的分组交换网络2414的一部分。在某些实施例中,网络出口缓冲器2522将把数据(例如,来自空间阵列入口缓冲器2502)输出到(例如,分组交换)网络2514,以例如被路由(例如,操控)到其他组件(例如,(一个或多个)其他网络数据流端点电路)。
所描绘的网络数据流端点电路2500包括网络入口缓冲器2522,以例如从(例如,分组交换)网络输入数据(例如,输入的数据)。如上所述,虽然描绘了单个网络入口缓冲器2524,但在网络数据流端点电路中可以有多个网络入口缓冲器。在一个实施例中,网络入口缓冲器2524将从空间阵列(例如,处理元件的空间阵列)的通信网络,例如从网络2514,接收(例如,传输)数据(例如,输入数据)。在一个实施例中,网络2514是图24中的分组交换网络2414的一部分。在某些实施例中,网络入口缓冲器2524将从(例如,分组交换)网络2514输入数据(例如,来自空间阵列入口缓冲器2502),以例如被从其他组件(例如,(一个或多个)其他网络数据流端点电路)路由(例如,操控)到该处(例如,到空间阵列出口缓冲器2508中)。
在一个实施例中,数据格式(例如,网络2514上的数据的数据格式)包括具有数据和头部(例如,具有该数据的目的地)的分组。在一个实施例中,数据格式(例如,网络2504和/或2506上的数据的数据格式)只包括数据(例如,不是具有数据和头部(例如,具有该数据的目的地)的分组)。网络数据流端点电路2500可向分组添加头部(或其他数据)(例如,从电路2500输出的数据)或者从分组去除头部(或其他数据)(例如,输入到电路2500中的数据)。耦合2520(例如,导线)可以把从网络2514(例如,从网络缓冲器2518)接收的数据发送到网络入口缓冲器2524和/或复用器2516。复用器2516可(例如,经由来自调度器2528的控制信号)从网络缓冲器2518或者从网络出口缓冲器2522输出数据。在一个实施例中,复用器2516或网络缓冲器2518中的一个或多个是与网络数据流端点电路2500分开的组件。缓冲器可包括多个(例如,离散)条目,例如多个寄存器。
在一个实施例中,操作配置存储装置2526(例如,一个或多个寄存器)在配置(例如,映射)期间被加载,并且指定此网络数据流端点电路2500(例如,不是空间阵列中的处理元件)要执行的特定操作(或者多个操作)(例如,数据操控操作,与逻辑和/或算术操作形成对照)。(一个或多个)缓冲器(例如,2502、2508、2522和/或2524)活动可由该操作控制(例如,由调度器2528控制)。调度器2528可调度网络数据流端点电路2500的一个或多个操作,例如当(例如,所有)输入(例如,有效载荷)数据和/或控制数据到达时。去到和来自调度器2528的虚线指示可被用于例如去到和/或来自调度器2528的控制数据的路径。调度器也可控制复用器2516,以例如操控去到和/或来自网络数据流端点电路2500和网络2514的数据。
参考以上的图24中的分布式拾取操作,网络数据流端点电路2402可被配置为(例如,如图25中所示作为其操作配置寄存器2526中的操作)从网络数据流端点电路2404和网络数据流端点电路2406的每一者接收(例如,如图25中所示在其网络入口缓冲器2524(中的两个存储位置)中)输入数据,并且例如根据(例如,如图25中所示其空间阵列入口缓冲器2502中的)控制数据输出结果数据(例如,如图25中所示从其空间阵列出口缓冲器2508输出)。网络数据流端点电路2404可被配置为(例如,如图25中所示作为其操作配置寄存器2526中的操作)向网络数据流端点电路2402提供(例如,如图25中所示经由电路2404的网络出口缓冲器2522发送)输入数据,例如在从处理元件2422接收到输入数据时(例如,如图25中所示在电路2404的空间阵列入口缓冲器2502中接收到)。这在图24中可被称为输入0。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径2424在处理元件2422和网络数据流端点电路2404之间提供专用通信线路。网络数据流端点电路2404可在(例如,如图25中所示在其网络出口缓冲器2522中的)接收数据中包括(例如,添加)头部分组以将该分组(例如,输入数据)操控到网络数据流端点电路2402。网络数据流端点电路2406可被配置为(例如,如图25中所示作为其操作配置寄存器2526中的操作)向网络数据流端点电路2402提供(例如,如图25中所示经由电路2406的网络出口缓冲器2522发送)输入数据,例如在从处理元件2420接收到输入数据时(例如,如图25中所示在电路2406的空间阵列入口缓冲器2502中接收到)。这在图24中可被称为输入1。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径2416在处理元件2420和网络数据流端点电路2406之间提供专用通信线路。网络数据流端点电路2406可在(例如,如图25中所示在其网络出口缓冲器2522中的)接收数据中包括(例如,添加)头部分组以将该分组(例如,输入数据)操控到网络数据流端点电路2402。
当网络数据流端点电路2404要向网络数据流端点电路2402发送输入数据时(例如,当网络数据流端点电路2402对于该数据具有可用存储空间和/或网络数据流端点电路2404具有其输入数据时),网络数据流端点电路2404可生成分组(例如,包括输入数据和头部)以将该数据操控到分组交换通信网络2414上的网络数据流端点电路2402(例如,作为该(例如,环状)网络上的一站)。这在图24中用虚线2426示意性图示。网络2414在图24中用多个虚线框来示意性图示。网络2414可包括网络控制器2414A,以例如管理网络2414A上的数据的进入和/或外出。
当网络数据流端点电路2406要向网络数据流端点电路2402发送输入数据时(例如,当网络数据流端点电路2402对于该数据具有可用存储空间和/或网络数据流端点电路2406具有其输入数据时),网络数据流端点电路2404可生成分组(例如,包括输入数据和头部)以将该数据操控到分组交换通信网络2414上的网络数据流端点电路2402(例如,作为该(例如,环状)网络上的一站)。这在图24中用虚线2418示意性图示。
网络数据流端点电路2402(例如,当在电路2402的(一个或多个)网络入口缓冲器中接收到来自网络数据流端点电路2404的输入0、在电路2402的(一个或多个)网络入口缓冲器中接收到来自网络数据流端点电路2406的输入1和/或在电路2402的空间阵列入口缓冲器中接收到来自处理元件2408的控制数据时)于是可执行编程的数据流操作(例如,在此示例中是Pick操作)。网络数据流端点电路2402随后可从该操作输出相应的结果数据,例如输出到图24中的处理元件2408。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径2428在处理元件2408(例如,其缓冲器)和网络数据流端点电路2402之间提供专用通信线路。分布式Pick操作的另一示例在下文参考图37-图39论述。图24中的缓冲器可以是每个PE中的小的未标注的框。
下面的图26-图28包括示例数据格式,但可利用其他数据格式。在数据格式中(例如,在分组中)可包括一个或多个字段。数据格式可被网络数据流端点电路使用,例如用来在第一组件之间(例如,在第一网络数据流端点电路和第二网络数据流端点电路、空间阵列中的组件等等之间)传输(例如,发送和/或接收)数据。
图26根据本公开的实施例图示了发送操作2602和接收操作2604的数据格式。在一个实施例中,发送操作2602和接收操作2604是在分组交换通信网络上传输的数据的数据格式。所描绘的发送操作2602数据格式包括目的地字段2602A(例如,指出数据将被发送到网络中的哪个组件)、通道字段2602B(例如,指出数据将在网络上的哪个通道上被发送)以及输入字段2602C(例如,要发送的有效载荷或输入数据)。所描绘的接收操作2604包括输出字段,例如其也可包括目的地字段(未描绘)。这些数据格式可被用来(例如,用于(一个或多个)分组)处理将数据移入和移出组件。这些配置可以是可分离的和/或并行发生。这些配置可使用分开的资源。术语通道一般可以指与请求相关联的通信资源(例如,在管理硬件中)。配置和队列管理硬件的关联可以是显式的。
图27根据本公开的实施例图示了发送操作2702的另一数据格式。在一个实施例中,发送操作2702是在分组交换通信网络上传输的数据的数据格式。所描绘的发送操作2702数据格式包括类型字段(例如,用于注释特殊控制分组,例如但不限于配置、提取或异常分组)、目的地字段2702B(例如,指出数据要被发送到网络中的哪个组件)、通道字段2702C(例如,指出数据要在网络上的哪个通道上被发送)以及输入字段2702D(例如,要发送的有效载荷或输入数据)。
图28根据本公开的实施例图示了配置数据格式来针对发送(例如,切换)操作2802和接收(例如,拾取)操作2804配置电路元件(例如,网络数据流端点电路)。在一个实施例中,发送操作2802和接收操作2804是要在分组交换通信网络上、例如在网络数据流端点电路之间传输的数据的配置数据格式。所描绘的发送操作配置数据格式2802包括目的地字段2802A(例如,指出(输入)数据要被发送到网络中的哪个(哪些)组件)、通道字段2802B(例如,指出(输入)数据要在网络上的哪个通道上被发送)、输入字段2802C(例如,要发送输入数据的(一个或多个)组件的标识符,例如此元件对其敏感的(例如,架构入口)缓冲器中的 输入的集合)以及操作字段2802D(例如,指出多个操作中的哪些要被执行)。在一个实施例中,(例如,外出)操作是Switch或SwitchAny数据流操作之一,例如对应于数据流图的(例如,同一)数据流操作器。
所描绘的接收操作配置数据格式2804包括输出字段2804A(例如,指出(结果)数据要被发送到网络中的哪个(哪些)组件)、输入字段2804B(例如,要发送输入数据的(一个或多个)组件的标识符)以及操作字段2804C(例如,指出多个操作中的哪些要被执行)。在一个实施例中,(例如,进入)操作是Pick、PickSingleLeg、PickAny或者Merge(合并)数据流操作之一,例如对应于数据流图的(例如,同一)数据流操作器。在一个实施例中,合并数据流操作是要求所有操作对象并且将所有操作对象出队的拾取(例如,出口端点接收控制)。
本文利用的配置数据格式可包括本文描述的字段中的一个或多个,例如按任何顺序。
图29根据本公开的实施例图示了配置数据格式2902来在其输入、输出和控制数据被注释在电路2900上的情况下针对发送操作配置电路元件(例如,网络数据流端点电路)。所描绘的发送操作配置数据格式2902包括目的地字段2902A(例如,指出数据将被发送到网络中的哪个组件)、通道字段2902B(例如,指出数据将在(分组交换)网络上的哪个通道上被发送)以及输入字段2602C(例如,要发送输入数据的(一个或多个)组件的标识符)。在一个实施例中,电路2900(例如,网络数据流端点电路)将接收采取发送操作配置数据格式2902的数据格式的数据的分组,例如其中目的地指出结果要被发送到多个电路中的哪个电路,通道指出要在(分组交换)网络的哪个通道上发送数据,并且输入是要从多个电路中的哪个电路接收输入数据。与门2904将在以下两个情况都成立时允许操作被执行:输入数据可用,而且信用状态是“是”(例如,依从性令牌指出),这指出例如在目的地的缓冲器中对于要存储的输出数据有空间。在某些实施例中,每个操作被注释有其要求(例如,输入、输出和控制)并且如果所有要求都得到满足,则该配置是电路(例如,网络数据流端点电路)“可执行”的。
图30根据本公开的实施例图示了配置数据格式3002来在其输入、输出和控制数据被注释在电路3000上的情况下针对选中(例如,发送)操作配置电路元件(例如,网络数据流端点电路)。所描绘的(例如,发送)操作配置数据格式3002包括目的地字段3002A(例如,指出(输入)数据要被发送到网络中的哪个(哪些)组件)、通道字段3002B(例如,指出要在网络上的哪个通道上发送(输入)数据)、输入字段3002C(例如,要发送输入数据的(一个或多个)组件的标识符)以及操作字段3002D(例如,指出多个操作中的哪些要被执行和/或该操作的控制数据的源)。在一个实施例中,(例如,外出)操作是发送、Switch或SwitchAny数据流操作之一,例如对应于数据流图的(例如,同一)数据流操作器。
在一个实施例中,电路3000(例如,网络数据流端点电路)将接收采取(例如,发送)操作配置数据格式3002的数据格式的数据的分组,例如其中输入是有效载荷(例如,输入数据)的(一个或多个)源并且操作字段指出要执行哪个操作(例如,示意性地示为Switch或SwitchAny)。所描绘的复用器3004可从多个可用操作中选择要执行的操作,例如基于操作字段3002D中的值来选择。在一个实施例中,电路3000将在以下两个情况都成立时执行该操作:输入数据可用,而且信用状态是“是”(例如,依从性令牌指出),这指出例如在目的地的缓冲器中对于要存储的输出数据有空间。
在一个实施例中,发送操作不利用超过检查其(一个或多个)输入可用于发送之外的控制。这可使得切换能够在不是所有分腿上都有信用的情况下执行操作。在一个实施例中,Switch和/或SwitchAny操作包括由存储在操作字段3002D中的值控制的复用器来选择正确的队列管理电路。
存储在操作字段3002D中的值可在控制选项之间进行选择,例如对于每个操作有不同的控制(例如,逻辑)电路,例如如图31-图34中所示。在一些实施例中,信用(例如,网络上的信用)状态是另一输入(例如,如这里的图31-图32中所描绘)。
图31根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路3100上的情况下针对Switch操作配置数据格式3102配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段3002D中的(例如,外出)操作值是针对Switch操作的,例如对应于数据流图的Switch数据流操作器。在一个实施例中,电路3100(例如,网络数据流端点电路)将接收采取Switch操作3102的数据格式的数据的分组,例如其中输入字段3102A中的输入是哪个(哪些)组件要被发送数据并且操作字段3102B指出要执行哪个操作(例如,示意性地示为Switch)。所描绘的电路3100可基于操作字段3102B从多个可用操作中选择要执行的操作。在一个实施例中,电路3000在输入数据可用(例如,根据输入状态,例如在(一个或多个)目的地中有用于数据的空间)而且信用状态(例如,选择操作(OP)状态)是“是”(例如,网络信用指出在网络上有可用性来将该数据发送到(一个或多个)目的地)时执行该操作。例如,复用器3110、3112、3114可结合每个输入(例如,在切换操作中输出数据将被发送到该处)的相应输入状态和信用状态使用,以例如防止输入显示为可用,直到输入状态(例如,目的地中用于数据的空间)和信用状态(例如,在网络上有空间来到达目的地)两者都为真(例如,“是”)为止。在一个实施例中,输入状态是对于例如在目的地的缓冲器中有或者没有空间用于要存储的(输出)数据的指示。在某些实施例中,与门3106将在输入数据可用(例如,从复用器3104输出的)而且选择操作(例如,控制数据)状态为“是”(例如,指示选择操作(例如,输入将被发送到多个输出中的哪个,例如参见图23)时允许操作被执行。在某些实施例中,利用控制数据(例如,选择op)对操作的执行将使得来自输入之一的输入数据在一个或多个(例如,多个)输出上被输出(例如,如控制数据所指示),例如根据来自复用器3108的复用器选择比特。在一个实施例中,选择op选择切换输出的哪个分腿将被使用和/或选择解码器创建复用器选择比特。
图32根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路3200上的情况下针对SwitchAny操作配置数据格式3202配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段3002D中的(例如,外出)操作值是针对SwitchAny操作的,例如对应于数据流图的SwitchAny数据流操作器。在一个实施例中,电路3200(例如,网络数据流端点电路)将接收采取SwitchAny操作配置数据格式3202的数据格式的数据的分组,例如其中输入字段3202A中的输入是哪个(哪些)组件要被发送数据并且操作字段3202B指出要执行哪个操作(例如,示意性地示为SwitchAny)和/或该操作的控制数据的源。在一个实施例中,电路3000在输入数据的任何一者可用(例如,根据输入状态,例如在(一个或多个)目的地中有用于数据的空间)并且信用状态是“是”(例如,网络信用指出在网络上有可用性来将该数据发送到(一个或多个)目的地)时执行该操作。例如,复用器3210、3212、3214可结合每个输入(例如,在SwitchAny操作中输出数据将被发送到该处)的相应输入状态和信用状态使用,以例如防止输入显示为可用,直到输入状态(例如,目的地中用于数据的空间)和信用状态(例如,在网络上有空间来到达目的地)两者都为真(例如,“是”)为止。在一个实施例中,输入状态是对于例如在目的地的缓冲器中有空间或者没有空间用于要存储的(输出)数据的指示。在某些实施例中,或门3204将在输出的任何一者可用时允许操作被执行。在某些实施例中,操作的执行将使得来自输入之一的第一可用输入数据在一个或多个(例如,多个)输出上被输出,例如根据来自复用器3206的复用器选择比特。在一个实施例中,一旦任何输出信用可用,SwitchAny就发生(例如,不同于利用选择op的Switch)。复用器选择比特可用于将输入操控到网络数据流端点电路的(例如,网络)出口缓冲器。
图33根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路3300上的情况下针对Pick操作配置数据格式3302配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段3302C中的(例如,进入)操作值是针对Pick操作的,例如对应于数据流图的Pick数据流操作器。在一个实施例中,电路3300(例如,网络数据流端点电路)将接收采取Pick操作配置数据格式3302的数据格式的数据的分组,例如其中输入字段3302B中的数据是哪个(哪些)组件将要发送输入数据,输出字段3302A中的数据是哪个(哪些)组件将被发送输入数据,并且操作字段3302C指出要执行哪个操作(例如,示意性地示为Pick)和/或该操作的控制数据的源。所描绘的电路3300可基于操作字段3302C从多个可用操作中选择要执行的操作。在一个实施例中,电路3300将在以下都成立时执行该操作:输入数据可用(例如,根据输入(例如,网络入口缓冲器)状态,例如所有输入数据已到达),信用状态(例如,输出状态是“是”(例如,空间阵列出口缓冲器),这指出例如在(一个或多个)目的地的缓冲器中对于要存储的输出数据有空间,并且选择操作(例如,控制数据)状态是“是”。在某些实施例中,与门3306将在输入数据可用(例如,从复用器3304输出的)、输出空间可用而且选择操作(例如,控制数据)状态为“是”(例如,指示选择操作(例如,输入将被发送到多个输出中的哪个,例如参见图23)时允许该操作被执行。在某些实施例中,利用控制数据(例如,选择op)对操作的执行将使得来自多个输入之一的输入数据(例如,由控制数据指示)在一个或多个(例如,多个)输出上被输出,例如根据来自复用器3308的复用器选择比特。在一个实施例中,选择op选择拾取的哪个分腿将被使用和/或选择解码器创建复用器选择比特。
图34根据本公开的实施例图示了配置数据格式来在其输入、输出和控制数据被注释在电路3400上的情况下针对PickAny操作3402配置电路元件(例如,网络数据流端点电路)。在一个实施例中,存储在操作字段3402C中的(例如,进入)操作值是针对PickAny操作的,例如对应于数据流图的PickAny数据流操作器。在一个实施例中,电路3400(例如,网络数据流端点电路)将接收采取PickAny操作配置数据格式3402的数据格式的数据的分组,例如其中输入字段3402B中的数据是哪个(哪些)组件将要发送输入数据,输出字段3402A中的数据是哪个(哪些)组件将被发送输入数据,并且操作字段3402C指出要执行哪个操作(例如,示意性地示为PickAny)。所描绘的电路3400可基于操作字段3402C从多个可用操作中选择要执行的操作。在一个实施例中,电路3400将在以下情况成立时执行该操作:任何(例如,第一个到达的)输入数据可用(例如,根据输入(例如,网络入口缓冲器)状态,例如任何输入数据已到达),并且信用状态(例如,输出状态)是“是”(例如,空间阵列出口缓冲器指出),这指出例如在(一个或多个)目的地的缓冲器中对于要存储的输出数据有空间。在某些实施例中,与门3406将在任何输入数据可用(例如,从复用器3404输出的)并且输出空间可用时允许操作被执行。在某些实施例中,操作的执行将使得来自多个输入之一的(例如,第一个到达的)输入数据在一个或多个(例如,多个)输出上被输出,例如根据来自复用器3408的复用器选择比特。
在一个实施例中,PickAny在任何数据存在时执行和/或选择解码器创建复用器选择比特。
图35根据本公开的实施例图示了网络数据流端点电路3500选择操作(3502、3504、3506)来执行。未决操作存储3501(例如,在图25中的调度器2528中)可存储一个或多个数据流操作,例如根据本文论述的(一个或多个)格式。调度器(例如,基于固定优先级或者例如具有其所有操作对象的操作中最老旧的)可调度操作来执行。例如,调度器可选择操作3502,并且根据存储在操作字段中的值,从复用器3508和/或复用器3510发送相应的控制信号。作为示例,若干个操作在单个网络数据流端点电路中可以是同时可执行的。假设所有数据都在那里,则“可执行”信号(例如,如图29-图34中所示)可作为信号被输入到复用器3512中。复用器3512可发送对于选中的操作(例如,操作3502、3504和3506之一)的控制信号作为输出,这些控制信号使得复用器3508配置网络数据流端点电路中的连接来执行选中的操作(例如,从(一个或多个)缓冲器源发数据或者向(一个或多个)缓冲器发送数据)。复用器3512可发送对于选中的操作(例如,操作3502、3504和3506之一)的控制信号作为输出,这些控制信号使得复用器3510配置网络数据流端点电路中的连接来从(一个或多个)队列去除数据,例如消耗的数据。作为示例,参见本文关于让数据(例如,令牌)被去除的论述。图35中的“PE状态”可以是来自PE的控制数据,例如队列的空指示符和满指示符(例如,背压信号和/或网络信用)。在一个实施例中,PE状态对于所有的缓冲器和/或数据路径可包括空或满比特,例如在本文的图25中。图35图示了对于本文的实施例的一般化调度,例如对于实施例的特殊化调度参考图31-图34来论述。
在一个实施例中,(例如,与调度一样)出队的选择是由操作及其动态行为来决定的,例如在执行之后使操作出队。在一个实施例中,电路将使用操作对象选择比特来使数据(例如,输入、输出和/或控制数据)出队。
图36根据本公开的实施例图示了网络数据流端点电路3600。与图25相比,网络数据流端点电路3600将配置和控制分割成了两个分开的调度器。在一个实施例中,出口调度器3628A将调度如下数据上的操作:该数据将进入数据流端点电路3600(例如,从耦合到数据流端点电路3600的电路交换通信网络进入)(例如,在参量队列3602处,例如如图25中所示的空间阵列入口缓冲器2502)以及输出数据流端点电路3600(例如,从耦合到数据流端点电路3600的分组交换通信网络输出)(例如,在网络出口缓冲器3622处,例如如图25中所示的网络出口缓冲器2522)。在一个实施例中,入口调度器3628B将调度如下数据上的操作:该数据将进入数据流端点电路3600(例如,从耦合到数据流端点电路3600的分组交换通信网络进入)(例如,在网络入口缓冲器3624处,例如如图25中所示的网络入口缓冲器3524)以及输出数据流端点电路3600(例如,从耦合到数据流端点电路3600的电路交换通信网络输出)(例如,在输出缓冲器3608处,例如如图25中所示的空间阵列出口缓冲器3508)。调度器3628A和/或调度器3628B可包括电路3600的(例如,操作)状态作为输入,例如输入(例如,缓冲器3602A、3602)的充满水平、输出(例如,缓冲器3608)的充满水平、值(例如,3602A中的值),等等。调度器3628B可包括信用返回电路,以例如表示信用被返回到发送者,例如在电路3600的网络入口缓冲器3624中接收之后。
网络3614可以是电路交换网络,例如如本文所述。额外地或者替换地,也可利用分组交换网络(例如,如本文所述),例如耦合到网络出口缓冲器3622、网络入口缓冲器3624或者这里的其他组件。参量队列3602可包括控制缓冲器3602A,以例如指出各输入队列(例如,缓冲器)何时包括(新的)数据项,例如以单个比特的形式。现在转到图37-图39,在一个实施例中,这些累积示出了创建分布式拾取的配置。
图37根据本公开的实施例图示了网络数据流端点电路3700在执行拾取操作的同时接收输入零(0),例如如上文参考图24所述。在一个实施例中,出口配置3726A(例如,在配置步骤期间)被加载要向不同的网络数据流端点电路(例如,图39中的电路3900)发送数据的拾取操作的一部分。在一个实施例中,出口调度器3728A将针对输入数据(例如,来自处理元件)监视参量队列3702(例如,数据队列)。根据所描绘的数据格式的实施例,“发送”(例如,其二进制值)指出数据将根据字段X、Y被发送,其中X是指示特定目标网络数据流端点电路的值(例如,0是图39中的网络数据流端点电路3900)并且Y是指出该值将被存储在哪个网络入口缓冲器(例如,缓冲器3924)位置的值。在一个实施例中,Y是指示多通道(例如,分组交换)网络的特定通道的值(例如,0是图39中的网络数据流端点电路3900的通道0和/或缓冲器元素0)。当输入数据到达时,其随后被网络数据流端点电路3700(例如,从网络出口缓冲器3722)发送到不同的网络数据流端点电路(例如,图39中的网络数据流端点电路3900)。
图38根据本公开的实施例图示了网络数据流端点电路3800在执行拾取操作的同时接收输入一(1),例如如上文参考图24所述。在一个实施例中,出口配置3826A(例如,在配置步骤期间)被加载要向不同的网络数据流端点电路(例如,图39中的电路3900)发送数据的拾取操作的一部分。在一个实施例中,出口调度器3828A将针对输入数据(例如,来自处理元件)监视参量队列3820(例如,数据队列3802B)。根据所描绘的数据格式的实施例,“发送”(例如,其二进制值)指出数据将根据字段X、Y被发送,其中X是指示特定目标网络数据流端点电路的值(例如,0是图39中的网络数据流端点电路3900)并且Y是指出该值将被存储在哪个网络入口缓冲器(例如,缓冲器3924)位置的值。在一个实施例中,Y是指示多通道(例如,分组交换)网络的特定通道的值(例如,1是图39中的网络数据流端点电路3900的通道1和/或缓冲器元素1)。当输入数据到达时,其随后被网络数据流端点电路3800(例如,从网络出口缓冲器3722)发送到不同的网络数据流端点电路(例如,图39中的网络数据流端点电路3900)。
图39根据本公开的实施例图示了网络数据流端点电路3900在执行拾取操作的同时输出选中的输入,例如如上文参考图24所述。在一个实施例中,其他网络数据流端点电路(例如,电路3700和电路3800)将把其输入数据发送到电路3900的网络入口缓冲器3924。在一个实施例中,入口配置3926B(例如,在配置步骤期间)被加载要例如根据控制值拾取被发送到网络数据流端点电路3900的数据的拾取操作的一部分。在一个实施例中,控制值将被接收在入口控制3932(例如,缓冲器)中。在一个实施例中,入口调度器3828A将监视对控制值和输入值的接收(例如,在网络入口缓冲器3924中)。例如,如果控制值说从网络入口缓冲器3924的缓冲器元素A(例如,此示例中是0或1)(例如,从通道A)拾取,则存储在该缓冲器元素A中的值随后作为该操作的结果被电路3900输出,例如输出到输出缓冲器3908中,例如当输出缓冲器有存储空间时(例如,如背压信号所指示)。在一个实施例中,电路3900的输出数据在出口缓冲器具有令牌(例如,输入数据和控制数据)并且接收器断言其具有缓冲器(例如,指出存储可用,虽然资源的其他指派是可能的,这个示例只是说明性的)被发送出。
图40根据本公开的实施例图示了流程图4000。所描绘的流程4000包括:提供处理元件的空间阵列(4002);利用分组交换通信网络、根据数据流图、在所述空间阵列内、在处理元件之间路由数据(4004);利用所述处理元件执行所述数据流图的第一数据流操作(4006);并且利用所述分组交换通信网络的多个网络数据流端点电路执行所述数据流图的第二数据流操作(4008)。
再次参考图8,加速器(例如,CSA)802可对多个缓存堆(例如,缓存堆808)中的一个或多个执行(例如,或者请求执行)数据的访问(例如,加载和/或存储)。可包括存储器接口电路(例如,(一个或多个)请求地址文件(RAF)电路),例如如本文所述,以提供存储器(例如,缓存堆)和加速器802之间的访问。再次参考图11,请求电路(例如,处理元件)可对多个缓存堆(例如,缓存堆1102)中的一个或多个执行(例如,或者请求执行)数据的访问(例如,加载和/或存储)。可包括存储器接口电路(例如,(一个或多个)请求地址文件(RAF)电路),例如如本文所述,以提供存储器(例如,缓存存储器的一个或多个堆)和加速器(例如,加速器分片(1108、1110、1112、1114)中的一个或多个)之间的访问。再次参考图24和/或图25,请求电路(例如,处理元件)可对多个缓存堆中的一个或多个执行(例如,或者请求执行)数据的访问(例如,加载和/或存储)。可包括存储器接口电路(例如,(一个或多个)请求地址文件(RAF)电路,例如RAF/缓存接口2412),例如如本文所述,以提供存储器(例如,缓存存储器的一个或多个堆)和加速器(例如,处理元件和/或网络数据流端点电路(例如,电路2402、2404、2406)中的一个或多个)之间的访问。
在某些实施例中,加速器(例如,其PE)通过(i)电路交换网络(例如,如本文所述,例如参考图6-图11所述)或者(ii)通过分组交换网络(例如,如本文所述,例如参考图23-图40所述)耦合到RAF电路或多个RAF电路。
在某些实施例中,针对存储器(例如,缓存)访问请求所接收的请求数据被例如可配置空间加速器的一个或多个请求地址文件电路接收。空间体系结构的某些实施例是加速用户应用的一种能量高效且高性能的方式。(一个或多个)空间加速器可实现能量效率的方式之一是通过空间分布,例如,取代存在于核心中的能量饥饿的集中式结构,空间体系结构一般可使用小的解除聚合的结构(例如,这些结构既是更简单的又是更能量高效的)。例如,图11的电路(例如,空间阵列)可将其加载和存储操作分散在若干个RAF间。
2.6浮点支持
某些HPC应用以其对大量浮点带宽的需求为特征。为了满足此需求,CSA的实施例可配设有多个(例如,每个在128到256个之间)浮点加法和乘法PE,这例如取决于分片配置。CSA可提供几个其他扩展精度模式,以例如简化数学库实现。CSA浮点PE可支持单精度和双精度两者,但更低精度的PE可支持机器学习工作负荷。CSA与处理器核心相比可提供大一量级的浮点性能。在一个实施例中,除了增大浮点带宽以外,为了为所有浮点单元供能,浮点操作中消耗的能量被降低。例如,为了降低能量,CSA可选择性地门控浮点乘法器阵列的低阶比特。在考查浮点算术的性能时,乘法阵列的低阶比特可能经常不会影响最终经舍入(rounded)的乘积。图41根据本公开的实施例图示了被划分成三个区域(结果区域、三个潜在进位(carry)区域(4102、4104、4106)、以及门控区域)的浮点乘法器4100。在某些实施例中,进位区域有可能影响结果区域并且门控区域不太可能影响结果区域。考虑g个比特的门控区域,最大进位可以是:
给定这个最大进位,如果进位区域的结果小于2c–g,其中进位区域为c比特宽,则门控区域可被忽略,因为其不影响结果区域。增大g意味着更有可能将会需要门控区域,而增大c意味着,在随机假设下,门控区域将不被使用并且可被禁用来避免能量消耗。在CSA浮点乘法PE的实施例中,利用两级管线式方案,其中首先确定进位区域,然后如果发现门控区域影响结果则确定门控区域。如果已知关于乘法的情境的更多信息,则CSA更激进地调节门控区域的大小。在FMA中,乘法结果可被添加到累加器,这经常比任一被乘数都大得多。在此情况下,在乘法之前可观察加数指数并且CSDA可相应地调整门控区域。CSA的一个实施例包括一种方案,其中约束计算的最小结果的情境值被提供到相关乘法器,以便选择最小能量门控配置。
2.7运行时服务
在某些实施例中,CSA包括异质且分布式的架构,并且因此,运行时服务实现方式将以并行且分布式的方式容适若干种PE。虽然CSA中的运行时服务可能是关键的,但它们相对于用户级计算而言可能是不频繁的。某些实现方式因此聚焦于将服务覆盖在硬件资源上。为了满足这些目标,CSA运行时服务可被投射为层次体系,例如其中每一层对应于一CSA网络。在分片级,单个面向外部的控制器可接受或发送服务命令到与CSA分片相关联的核心。分片级控制器可用来协调RAF处的区域控制器,例如利用ACI网络。进而,区域控制器可协调某些夹层网络站(例如,网络数据流端点电路)处的本地控制器。在最低级别处,服务特定微协议可在本地网络上执行,例如在通过夹层控制器控制的特殊模式期间执行。微协议可允许每个PE(例如,按类型的PE类别)根据其自己的需求与运行时服务交互。并行性从而在这个层次组织中是隐式的,并且最低级别的操作可同时发生。这个并行性可使得能够在数百纳秒到几微秒之间配置CSA分片,这例如取决于配置大小及其在存储器层次体系中的位置。CSA的实施例从而利用了数据流图的属性来改善每个运行时服务的实现。一个关键观察是运行时服务可能只需要保持数据流图的合法逻辑视图,这例如是可通过对数据流操作器执行的某种排序产生的状态。服务一般可能不需要保证数据流图的暂态视图,这例如是在特定时间点CSA中的数据流图的状态。这可允许CSA以分布式、管线式且并行的方式进行大多数运行时服务,例如如果服务被编排为保持数据流图的逻辑视图的话。本地配置微协议可以是覆盖在本地网络上的基于分组的协议。配置目标可被组织到配置链中,配置链例如是固定在微体系结构中的。架构(例如,PE)目标可被一次一个地配置,例如每个目标利用单个额外寄存器以实现分布式协调。为了开始配置,控制器可驱动带外信号,该带外信号将其邻域中的所有架构目标放置到未配置的暂停状态中,并且将本地网络中的复用器摆动到预定的构象。随着架构(例如,PE)目标被配置,也就是说它们完全接收到其配置分组,它们可设置其配置微协议寄存器,通知紧随其后的目标(例如,PE)可着手利用后续分组来配置。对于配置分组的大小没有限制,并且分组可具有动态可变的长度。例如,配置常数操作对象的PE可具有长度被设定为包括常数字段(例如,图3B-3C中的X和Y)的配置分组。图42根据本公开的实施例图示了具有多个处理元件(例如,PE 4202、4204、4206、4208)的加速器4200的运行中(in-flight)配置。一旦被配置了,PE就可在服从数据流约束的情况下执行。然而,涉及未配置的PE的通道可被微体系结构禁用,例如防止任何未定义的操作发生。这些属性允许了CSA的实施例以分布式方式初始化和执行,而没有任何集中化控制。从未配置状态,配置可完全并行地发生,例如可能在200纳秒那么短的时间内发生。然而,由于CSA的实施例的分布式初始化,PE可早在整个架构被配置之前就变得活跃,例如向存储器发送请求。提取可按与配置几乎相同的方式进行。本地网络可遵守一次从一个目标提取数据,以及用于实现分布式协调的状态比特。CSA可将提取编排为非破坏性的,也就是说,在执行完成时,每个可提取的目标已返回到其开始状态。在这个实现方式中,目标中的所有状态可按类似扫描的方式被流转到关联于本地网络的出口寄存器。虽然通过在寄存器传送级(register-transfer level,RTL)引入新的路径可实现就地提取,或者使用现有的线路来以更低的开销提供相同的功能。与配置一样,并行实现层次化提取。
图43根据本公开的实施例图示了运行中管线式提取的快照4300。在提取的一些用例中(例如检查点技术),只要维持了架构吞吐量,就可以不要担心时延。在这些情况下,可以按管线方式来编排提取。图43中所示的这个布置允许了在狭窄的区域针对提取被禁用的同时架构的大部分继续执行。配置和提取可被协调并且组成来实现管线式情境切换。异常可与配置和提取从定性上不同,因为它们不是在指定的时间发生,而是在运行时期间的任何时点在架构中的任何地方出现。从而,在一个实施例中,异常微协议可不被覆盖在运行时被用户程序占用的本地网络上,并且利用其自己的网络。然而,从性质上来说,异常是罕见的并且对于时延和带宽不敏感。从而,CSA的某些实施例利用了分组交换网络来将异常运载到本地夹层站点,例如在这里它们被向服务层次体系上方转发(例如,如图58中所示)。本地异常网络中的分组可以是极小的。在许多情况下,仅两到八比特的PE标识(ID)就足够作为完整分组了,例如,因为随着分组穿过异常服务层次体系,CSA可创建唯一异常标识符。这种方案可能是合乎需要的,因为其也减小了在每个PE处产生异常的面积开销。
3.编译
将用高级别语言编写的程序编译到CSA上的能力对于业界采用可能是必要的。这一节对于CSA的实施例给出了编译策略的高级别概览。首先是CSA软件框架的提案,其例示了理想的生产质量工具链的期望属性。接下来,论述了原型(prototype)编译器框架。然后论述了“控制到数据流转换”,例如将普通循序控制流代码转换成CSA数据流汇编代码。
3.1示例生产框架
图44根据本公开的实施例图示了加速器的编译工具链4400。对于要加速的特定区域,这个工具链将高级别语言(例如,C、C++和Fortran)编译成主机代码(LLVM)中间表示(intermediate representation,IR)的组合。这个编译工具链的CSA特定部分取得LLVM IR作为其输入,优化并将此IR编译到CSA汇编中,例如在时延不敏感通道上添加适当的缓冲来获得性能。其随后在硬件架构上放置并路由CSA汇编,并且配置PE和网络以便执行。在一个实施例中,工具链以适时生产(just-in-time,JIT)的形式支持CSA特定编译,包含了来自实际执行的潜在运行时反馈。该框架的关键设计特性之一是对于CSA编译(LLVM)IR,而不是使用更高级别语言作为输入。虽然用针对CSA特别设计的高级别编程语言编写的程序可实现最大性能和/或能量效率,但是因为转换现有代码库的困难,采用新的高级别语言或编程框架在实践中可能是缓慢且受限的。使用(LLVM)IR作为输入使得各种各样的现有程序能够可能在CSA上执行,例如不需要创建新的语言或者大幅修改希望在CSA上运行的新语言的前端。
3.2原型编译器
图45根据本公开的实施例图示了加速器的编译器4500。编译器4500最初聚焦于通过(例如,Clang)前端对C和C++的预先编译。为了编译(LLVM)IR,编译器利用三个主要阶段在LLVM内实现CSA后端目标。首先,CSA后端对于循序单元将LLVM IR减低成目标特定机器指令,这实现了与传统的RISC状控制流体系结构(例如,具有分支和程序计数器)相结合的大多数CSA操作。工具链中的循序单元对于编译器和应用开发者两者都可充当一个有用的辅助,因为其使能了程序从控制流(control flow,CF)到数据流(dataflow,DF)的递增式变换,例如一次将一段代码从控制流转换到数据流并且验证程序正确性。循序单元也可提供一种用于处理不适合于空间阵列中的代码的模型。接下来,编译器将这些控制流指令为CSA转换成数据流操作器(例如,代码)。这个阶段稍后在第3.3节中描述。然后,CSA后端可在数据流指令上运行其自己的优化道次(pass)。最后,编译器可按CSA汇编格式转储指令。这个汇编格式被取作到后期工具的输入,后期工具在实际CSA硬件上布局并路由数据流指令。
3.3控制到数据流转换
编译器的一个关键部分可实现在控制到数据流转换道次中,或者简称为数据流转换道次。这个道次取入以控制流形式表示的函数,例如控制流图(control-flow graph,CFG),其中有在虚拟寄存器上操作的循序机器指令,并且将其转换成数据流函数,数据流函数在概念上是由时延不敏感通道(latency-insensitive channel,LIC)连接的数据流操作(指令)的图。这一节给出了对这个道次的高级别描述,描述了其在概念上如何应对存储器操作、分支以及某些实施例中的循环。
直线代码
图46A根据本公开的实施例图示了循序汇编代码4602。图46B根据本公开的实施例图示了图46A的循序汇编代码4602的数据流汇编代码4604。图46C根据本公开的实施例对于加速器图示了图46B的数据流汇编代码4604的数据流图4606。
首先,考虑将直线循序代码转换成数据流的简单情况。数据流转换道次可将循序代码的基本块,例如图46A中所示的代码,转换成图46B中所示的CSA汇编代码。从概念上,图46B中的CSA汇编表示图46C中所示的数据流图。在这个示例中,每个循序指令被转化成匹配的CSA汇编。.lic语句(例如,对于数据)声明了与循序代码中的虚拟寄存器(例如,Rdata)相对应的时延不敏感通道。在实践中,到数据流转换道次的输入可在编号的虚拟寄存器中。然而,为了清晰,本节使用了描述性寄存器名称。注意在此实施例中在CSA体系结构中支持加载和存储操作,与只支持纯数据流的体系结构相比允许了多得多的程序运行。由于输入到编译器的循序代码是采取SSA(singlestatic assignment,单静态指派)形式的,所以对于简单的基本块,控制到数据流道次可将每个虚拟寄存器定义转换成时延不敏感通道上的单个值的产生。SSA形式允许了对虚拟寄存器的单个定义的多次使用,例如像Rdata2中那样。为了支持此模型,CSA汇编代码支持对同一LIC的多次使用(例如,data2),其中模拟器隐式地创建LIC的必要拷贝。循序代码和数据流代码之间的一个关键差别是对存储器操作的对待。图46A中的代码概念上是串行的,这意味着addr3的load32(ld32)应当看起来发生在addr的st32之后,如果addr和addr3地址重叠的话。
分支
为了将具有多个基本块和条件语句的程序转换成数据流,编译器生成特殊的数据流操作器来替换分支。更具体而言,编译器使用切换操作器来操控原始CFG中的基本块的末尾处的传出数据,并且使用拾取操作器来在基本块的开头处从适当的传入通道选择值。作为具体示例,考虑图47A-47C中的代码和相应的数据流图,其基于如下的若干个输入附条件地计算y的值:i、x和n。在计算分支条件测试之后,数据流代码使用切换操作器(例如,参见图3B-3C)来在测试为0的情况下将通道x中的值操控到通道xF,并且在测试为1的情况下操控到通道xT。类似地,拾取操作器(例如,参见图3B-3C)被用于在测试为0的情况下将通道yF发送到y,或者在测试为1的情况下将通道yT发送到y。在此示例中,结果是即使a的值只被用在条件语句的真分支中,CSA也将包括切换操作器,其在测试为1时将其操控到通道aT,并且在测试为0时消耗(吃掉)该值。这后一种情况是通过将切换的假输出设置为%ign来表达的。简单地将通道直接连接到真路径可能是不正确的,因为在执行实际走的是假路径的情况下,“a”的这个值将被留在图中,对于函数的下一次执行导致a的不正确值。这个示例突出了控制等价的属性,这是正确数据流转换的实施例中的一个关键属性。
控制等价:考虑具有两个基本块A和B的单入口单出口控制流图G。A和B是控制等价的,如果经过G的所有完整控制流路径拜访A和B相同次数的话。
LIC替换:在控制流图G中,假定基本块A中的操作定义虚拟寄存器x,并且基本块B中的操作使用x。于是仅当A和B是控制等价的情况下,正确的控制到数据流变换才可利用时延不敏感通道来替换x。控制等价关系将CFG的基本块划分成强控制依从区域。图47A根据本公开的实施例图示了C源代码4702。图47B根据本公开的实施例图示了图47A的C源代码4702的数据流汇编代码4704。图47C根据本公开的实施例对于加速器图示了图47B的数据流汇编代码4704的数据流图4706。在图47A-47C中的示例中,条件语句之前和之后的基本块与彼此是控制等价的,但真和假路径中的基本块各自在其自己的控制依从区域中。用于将CFG转换成数据流的一个正确算法是让编译器(1)插入切换以对于在不控制等价的基本块之间流动的任何值对执行频率中的不匹配进行补偿,以及(2)在基本块的开头处插入拾取以从到基本块的任何传入值中正确地选择。对于这些拾取和切换生成适当的控制信号可以是数据流转换的关键部分。
循环
数据流转换中的CFG的另一个重要类别是用于单入口单出口循环的CFG,这是在(LLVM)IR中生成的循环的一种常见形式。这些循环可以是几乎非循环的,除了从循环的末尾返回到循环头部块的单个返回边缘以外。数据流转换道次可使用与分支相同的高级别策略来转换循环,例如其在循环的末尾处插入切换以引导值离开循环(或者从循环出口离开或者沿着返回边缘去到循环的开头),并且在循环的开头处插入拾取以在进入循环的初始值和来自返回边缘的值之间进行选择。图48A根据本公开的实施例图示了C源代码4802。图48B根据本公开的实施例图示了图48A的C源代码4802的数据流汇编代码4804。图48C根据本公开的实施例对于加速器图示了图48B的数据流汇编代码4804的数据流图4806。图48A-48C示出了将循环归纳变量i的值加起来的示例do-while循环的C和CSA汇编代码,以及相应的数据流图。对于在概念上循环经过该循环的每个变量(i和sum),此图具有控制这些值的流动的相应拾取/切换对。注意此示例也使用了拾取/切换对来使n的值循环经过该循环,即使n是循环不变的。n的这个重复使得能够将n的虚拟寄存器转换成LIC,因为其匹配n在循环外部的概念定义和n在循环内部的一个或多个使用之间的执行频率。一般而言,对于正确的数据流转换,住进循环中的寄存器在该寄存器被转换成LIC时对于循环体内部的每个迭代将被重复一次。类似地,在循环内部被更新和住在循环外面的寄存器将被消耗,例如有单个最终值被发送出循环。循环向数据流转换过程中引入了皱褶,即对于循环顶部的拾取的控制和循环底部的切换是偏移的。例如,如果图47A中的循环执行三个迭代和退出,则到拾取器的控制应当为0、1、1,而到切换器的控制应当为1、1、0。这个控制是通过当函数在周期0(这在汇编中是由指令.value 0和.avail0指定的)上开始时以初始额外0开始拾取器通道,然后将输出切换器拷贝到拾取器中,来实现的。注意,切换器中的最后的0将最终0恢复到拾取器中,从而确保了数据流图的最终状态匹配其初始状态。
图49A根据本公开的实施例图示了流程图4900。所描绘的流程4900包括:利用处理器的核心的解码器将指令解码成解码后指令(4902);利用处理器的核心的执行单元执行解码后指令以执行第一操作(4904);接收包括多个节点的数据流图的输入(4906);将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作器(4908);并且通过相应传入操作对象集合到达多个处理元件的数据流操作器的每一者处,利用互连网络和多个处理元件执行数据流图的第二操作(4910)。
图49B根据本公开的实施例图示了流程图4901。所描绘的流程4901包括:接收包括多个节点的数据流图的输入(4903);并且将数据流图覆盖到处理器的多个处理元件、多个处理元件之间的数据路径网络、以及多个处理元件之间的流控制路径网络中,其中每个节点被表示为多个处理元件中的数据流操作器(4905)。
在一个实施例中,核心将命令写入到存储器队列中并且CSA(例如,多个处理元件)监视存储器队列并且在该命令被读取时开始执行。在一个实施例中,核心执行程序的第一部分并且CSA(例如,多个处理元件)执行程序的第二部分。在一个实施例中,核心在CSA执行其操作的同时进行其他工作。
4.CSA优点
在某些实施例中,CSA体系结构和微体系结构相对于路线图处理器体系结构和FPGA提供了深远的能量、性能和可使用性优点。在这一节中,将这些体系结构与CSA的实施例相比较并且突出CSA相对于每一者在加速并行数据流图方面的优越性。
4.1处理器
图50根据本公开的实施例图示了吞吐量对每操作能量图5000。如图50中所示,小核心一般比大核心更能量高效,并且在一些工作负荷中,这个优点可通过更高的核心计数来转化成绝对性能。CSA微体系结构循着这些观察得出其结论,并且去除了与冯·诺依曼体系结构相关联的(例如,大部分)能量饥饿控制结构,包括大多数指令侧微体系结构。通过去除这些开销并且实现简单的单操作PE,CSA的实施例获得了密集、高效的空间阵列。与通常颇为串行的小核心不同,CSA可例如经由电路交换本地网络将其PE聚集在一起,以形成显式并行的聚合数据流图。结果不仅是并行应用中的性能,而且也是串行应用中的性能。与就面积和能量而言可为性能支付昂贵代价的核心不同,CSA在其原生执行模型中已经是并行的。在某些实施例中,CSA既不要求投机来增大性能,也不需要从循序程序表示中反复地重提取并行性,从而避免了冯·诺依曼体系结构中的两个主要能量负担。CSA的实施例中的大多数结构是分布式的、小的且能量高效的,这与存在于核心中的集中式、笨重的、能量饥饿的结构不同。考虑CSA中的寄存器的情况:每个PE可具有几个(例如,10个或更少)存储寄存器。个体来看,这些寄存器可比传统的寄存器文件更高效。聚合起来,这些寄存器可提供大的、架构内寄存器文件的效果。结果,CSA的实施例避免了经典体系结构所招致的大部分堆栈溢出和填满,同时对每状态访问使用少得多的能量。当然,应用仍可访问存储器。在CSA的实施例中,存储器访问请求和响应在体系结构上被解除耦合,使得工作负荷在每单位面积和能量中能够支持多得多的未决存储器访问。这个属性对于去往缓存的工作负荷产生高得多的性能,并且减小了在去往存储器的工作负荷中使主存储器饱和所需要的面积和能量。CSA的实施例暴露了非冯·诺依曼体系结构所特有的能量效率的新形式。在(例如,大多数)PE处执行单个操作(例如,指令)的一个后果是降低的操作对象熵。在递增操作的情况下,每个执行可导致少量的电路级翻转和很少的能量消耗,这是在第5.2节中详细考查的一种情况。与之不同,冯·诺依曼体系结构是复用的,导致大量的比特转变。CSA的实施例的异步风格也使得微体系结构优化成为可能,例如第2.6节中描述的浮点优化,这在严密调度的核心管线中是难以实现的。因为PE是相对简单的并且其在特定数据流图中的行为是静态已知的,所以与更粗的体系结构中相比时钟门控和功率门控技术可被更有效地应用。CSA PE的实施例的图执行风格、小尺寸和可延展性和网络一起使得许多种类的并行性的表达成为可能:指令、数据、管线、向量、存储器、线程和任务并行性全都可被实现。例如,在CSA的实施例中,一个应用可使用算术单元来提供高程度的地址带宽,而另一应用可将同样的这些单元用于计算。在许多情况下,多个种类的并行性可被组合来实现甚至更高的性能。许多关键HPC操作可能既是复制的也是管线式的,导致了若干个量级的性能增益。与之不同,冯·诺依曼风格的核心通常针对由架构师仔细选择的一种风格的并行性进行优化,导致未能捕捉所有重要应用内核。正是因为CSA的实施例暴露并且促进许多形式的并行性,其并不强制特定形式的并行性,或者更坏情况下特定的子例程存在于应用中以便受益于CSA。许多应用——包括单流应用——可从CSA的实施例获得性能和能量益处,例如即使当在没有修改的情况下被编译时。这反转了要求大量编程者精力来在单流应用中获得实质性性能增益的长期趋势。实际上,在一些应用中,与被扭曲(tortured)来针对向量指令的其复杂的、同时代的表亲相比,CSA的实施例从功能上等同的、但不那么“现代”的代码中获得更多性能。
4.2CSA实施例和FGPA的比较
选择数据流操作器作为CSA的实施例的基本体系结构将这些CSA与FGPA相区分,并且尤其是对于来自传统编程语言的HPC数据流图而言,CSA是一种优越的加速器。数据流操作器根本上是异步的。这使得CSA的实施例不仅能够在微体系结构的实现中具有很大自由,而且其也使得它们能够简单且简洁地容适抽象的体系结构概念。例如,CSA的实施例利用简单的加载-存储接口天然地容适许多存储器微体系结构,这些存储器微体系结构本质上是异步的。我们只需要考查FPGA DRAM控制器来明白复杂度的差别。CSA的实施例还利用了异步性来提供像配置和提取这样的更快且更完全特征的运行时服务,它们据信比FPGA快四到六个量级。通过缩窄体系结构接口,CSA的实施例在微体系结构级提供了对大多数定时路径的控制。这允许了CSA的实施例与FPGA中提供的更一般控制机制相比以高得多的频率操作。类似地,时钟和重置对于FPGA可能是体系结构上根本的,其在CSA中是微体系结构的,例如消除了将它们作为可编程实体来支持的需要。数据流操作器在很大程度上可以是粗颗粒的。通过只处理粗糙循环,CSA的实施例既改善了架构的密度也改善了其能量消耗:CSA直接执行操作,而不是用查找表来模拟它们。粗糙性的第二个后果是布局及路由问题的简化。CSA数据流图比FPGA网表小很多个量级并且布局及路由时间在CSA的实施例中相应地减小了。CSA的实施例和FPGA之间的显著差别使得CSA作为加速器是优越的,例如对于来自于传统编程语言的数据流图而言。
5.评估
CSA是一种新颖的计算机体系结构,其有潜力提供相对于路线图处理器的巨大性能和能量优点。考虑为游走过阵列计算单个跨步地址的情况。这个情况在HPC应用中可能是重要的,HPC应用例如花费大量整数工作来计算地址偏移量。在地址计算中,尤其是跨步地址计算中,一个参量是恒定的并且其他的对于每个计算只略微变化。从而,大多数情况下每个周期只有少量比特翻转。事实上,可以显示,利用与第2.6节中描述的浮点进位比特上的限制类似的推导,即对于步幅计算平均起来每个计算有少于两个比特的输入翻转,相对于随机翻转分布将能量减小了50%。在使用时间复用方案的情况下,这个能量节省中的很多可能会失去。在一个实施例中,CSA相对于核心实现大约3x能量效率,同时递送8x性能增益。CSA的实施例实现的并行性增益可带来减少的程序运行时间,产生泄漏能量的成比例的大幅减小。在PE级,CSA的实施例是极为能量高效的。CSA的第二个重要问题是CSA在分片级是否消耗合理量的能量。由于CSA的实施例能够在每个周期运用架构中的每个浮点PE,所以其对于能量和功率消耗充当合理的上限,例如使得大多数能量进入到浮点乘法和加法中。
6.进一步CSA细节
这一节论述了配置和异常处理的进一步细节。
6.1用于配置CSA的微体系结构
这一节公开了如何配置CSA(例如,架构)、如何迅速地实现此配置、以及如何最小化配置的资源开销的示例。迅速地配置架构在加速更大算法的小部分以及因此拓宽CSA的可应用性方面可具有超群的重要性。本节进一步公开了允许CSA的实施例被编程以不同长度的配置的特征。
CSA(例如,架构)的实施例与传统核心的不同之处可在于其利用这样的配置步骤:其中架构的一些部分(例如,大部分)在程序执行之前被加载以程序配置。静态配置的优点可以是非常少的能量在运行时被花费在配置上,例如不同于几乎每个周期都花费能量来取得配置信息(指令)的循序核心。配置的先前缺点是它是具有可能很大时延的粗颗粒步骤,这由于情境切换的成本在架构中可加速的程序的大小上施加了下限。本公开描述了一种可缩放的微体系结构,用于以分布式方式迅速地配置空间阵列,其例如避免了先前的缺点。
如上所述,CSA可包括由PE间网络连接的轻量级处理元件。随后通过配置可配置架构元素(configurable fabric element,CFE),例如示例PE和互连(架构)网络,被视为控制-数据流图的程序被映射到体系结构上。一般而言,PE可被配置为数据流操作器,并且一旦所有的输入操作对象到达PE处,一些操作就发生,并且结果被转发到另一个或多个PE以便消耗或输出。PE可通过专用的虚拟电路通信,这些专用虚拟电路是通过静态配置电路交换通信网络来形成的。这些虚拟电路可以是流控制的并且完全背压式的,例如使得如果源没有数据或者目的地已满则PE将会暂缓。在运行时,数据可流经实现映射的算法的PE。例如,数据可从存储器中流入、经过架构然后退出到存储器。这种空间体系结构相对于传统的多核处理器可实现显著的性能效率:与更大的核心相比,PE形式的计算可以更简单并且更众多,并且通信可以是直接的,与存储器系统的扩展不同。
CSA的实施例可不利用(例如,软件控制的)分组交换,例如要求大量的软件辅助来实现的分组交换,这会减慢配置。CSA的实施例包括网络中的带外信令(例如,只有2-3比特,取决于支持的特征集合)和固定的配置拓扑来避免对大量软件支持的需要。
CSA的实施例和FPGA中使用的方案之间的一个关键差别在于:CSA方案可使用宽数据字,是分布式的,并且包括机制来直接从存储器取得程序数据。CSA的实施例可不利用为了面积效率好处的JTAG风格单比特通信,例如因为它们可要求若干毫秒来完全配置大的FPGA架构。
CSA的实施例包括分布式配置协议和微体系结构来支持此协议。最初,配置状态可存在于存储器中。多个(例如,分布式)本地配置控制器(框)(local configurationcontroller,LCC)可将整个程序的一些部分流入到其空间架构的本地区域中,例如利用一小组控制信号和架构提供的网络的组合来流入。状态元素可在每个CFE处被用于形成配置链,例如从而允许个体CFE在没有全局寻址的情况下自编程。
CSA的实施例包括对于配置链的形成的特定硬件支持,例如不是以增大配置时间为代价由软件动态地建立这些链条。CSA的实施例不是纯分组交换的,并且确实包括额外的带外控制线(例如,控制不是通过数据路径被发送的,要求额外的周期来选通此信息和重串行化此信息)。CSA的实施例通过固定配置排序并且通过提供显式的带外控制来减小配置时延(例如,减小至少二倍),同时不会显著地增大网络复杂度。
CSA的实施例不使用配置的串行机制,其中数据被利用类似JTAG的协议逐比特地流入到架构中。CSA的实施例利用粗颗粒的架构方案。在某些实施例中,向面向64或32比特的CSA架构添加几个控制线或状态元素相对于将同样的这些控制机制添加到4或6比特架构具有更低的成本。
图51根据本公开的实施例图示了包括处理元件(PE)的阵列和本地配置控制器(5102、5106)的加速器分片5100。每个PE、每个网络控制器(例如,网络数据流端点电路)和每个交换机可以是可配置架构元素(CFE),它们例如被CSA体系结构的实施例所配置(例如,编程)。
CSA的实施例包括提供异质空间架构的高效、分布式、低时延配置的硬件。这可根据四个技术来实现。首先,利用一种硬件实体,本地配置控制器(LCC),例如如图51-图53中所示。LCC可从(例如,虚拟)存储器取得配置信息的流。第二,可包括配置数据路径,其例如像PE架构的原生宽度那样宽并且可被覆盖在PE架构之上。第三,新的控制信号可被接收到PE架构中,这些控制信号编排配置过程。第四,状态元素可位于每个可配置端点处(例如,在寄存器中),其跟踪相邻CFE的状态,允许每个CFE在没有额外控制信号的情况下明确地自配置。这四个微体系结构特征可允许CSA配置其CFE的链条。为了获得低配置时延,可通过构建许多LCC和CFE链来划分配置。在配置时,这些可独立地操作以并行地加载架构,例如大幅减小时延。作为这些组合的结果,利用CSA体系结构的实施例配置的架构可被完全配置(例如,在数百纳秒中)。在下文中,公开了CSA配置网络的实施例的各种组件的详细操作。
图52A-图52C根据本公开的实施例图示了本地配置控制器5202配置数据路径网络。所描绘的网络包括多个复用器(例如,复用器5206、5208、5210),这些复用器可(例如,经由其各自的控制信号)被配置为将一个或多个数据路径(例如,来自PE)连接在一起。图52A图示了对于一些先前的操作或程序配置(例如,设置)的网络5200(例如,架构)。图52B图示了本地配置控制器5202(例如,包括网络接口电路5204来发送和/或接收信号)选通配置信号并且本地网络被设置为默认配置(例如,如图所示),该默认配置允许LCC发送配置数据到所有可配置架构元素(CFE),例如复用器。图52C图示了LCC在网络上选通配置信息,以预定的(例如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时,它们可立即开始操作。在另外的实施例中,CFE等待开始操作,直到架构已被完全配置为止(例如,由每个本地配置控制器的配置终止器(例如,图54中的配置终止器5404和配置终止器5408来通知)。在一个实施例中,LCC通过发送特殊消息,或者驱动信号,来获得对网络架构的控制。其随后向架构中的CFE选通配置数据(例如,在许多周期的时段中)。在这些图中,复用器网络与某些附图(例如,图6)中所示的“交换机”类似。
本地配置控制器
图53根据本公开的实施例图示了(例如,本地)配置控制器5302。本地配置控制器(LCC)可以是这样的硬件实体:其负责加载架构程序的本地部分(例如,在分片的子集中或者其他),解读这些程序部分,并且随后通过驱动各种配置线上的适当协议来将这些程序部分加载到架构中。以这个身份,LCC可以是一种专用的循序微控制器。
LCC操作可在其接收到指向代码段的指针时开始。取决于LCB微体系结构,这个指针(例如,存储在指针寄存器5306中)可通过网络(例如,来自CSA(架构)本身内)或者通过对LCC的存储器系统访问到来。当其接收到这种指针时,LCC可选地从它的那部分架构中排空相关状态以用于情境存储,然后着手立即重配置它所负责的那部分架构。LCC加载的程序可以是用于架构的配置数据和用于LCC的控制命令的组合,这些控制命令例如是轻微编码的。随着LCC在程序部分中流动,其可将程序解读为命令流并且执行适当的编码动作以配置(例如,加载)架构。
LCC的两个不同微体系结构在图51中示出,例如其中一者或两者被利用在CSA中。第一个将LCC 5102放置在存储器接口处。在此情况下,LCC可向存储器系统作出直接请求来加载数据。在第二情况中,LCC 5106被放置在存储器网络上,在其中它只可间接地向存储器作出请求。在两种情况下,LCB的逻辑操作都不变。在一个实施例中,LCC被告知要加载的程序,例如由一组(例如,OS可见的)控制状态寄存器来告知,这些寄存器将用于将新程序指针等等告知个体LCC。
额外带外控制通道(例如,导线)
在某些实施例中,配置依赖于2-8个额外的带外控制通道来改善配置速度,如下面所定义。例如,配置控制器5302可包括以下控制通道,CFG_START控制通道5308、CFG_VALID控制通道5310和CFG_DONE控制通道5312,其中每一者的示例在下面的表格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可维护一比特,表示其是否已被配置(例如参见图42)。这个比特可在配置开始信号被驱动时被解除断言,然后一旦特定的CFE已被配置就可被断言。在一个配置协议中,CFE被布置为形成链条,其中CFE配置状态比特确定链条的拓扑。CFE可读取紧邻的CFE的配置状态比特。如果这个邻近CFE已被配置并且当前CFE未被配置,则CFE可确定任何当前的配置数据是针对当前CFE的。当“CFG_DONE”信号被断言时,CFE可设置其配置比特,例如使得上游CFE能够配置。作为配置过程的基本情况,断言其已被配置的配置终止器(例如,图51中的LCC 5102的配置终止器5104或者LCC 5106的配置终止器5108)可被包括在链条的末尾处。
在CFE内部,这个比特可用于驱动流控制准备就绪信号。例如,当配置比特被解除断言时,网络控制信号可自动被钳位到防止数据流动的值,同时在PE内没有操作或其他动作将被调度。
应对高延迟配置路径
LCC的一个实施例可在长距离上驱动信号,例如经过许多复用器并且具有许多负载。从而,信号要在短时钟周期内到达遥远的CFE可能是困难的。在某些实施例中,配置信号是按主(例如,CSA)时钟频率的某个分频(例如,某个分数)的以确保配置时的数字定时纪律。时钟分频可被利用在带外信令协议中,并且不要求对主时钟树的任何修改。
在配置期间确保一致架构行为
由于某些配置方案是分布式的并且由于程序和存储器效果而具有非确定性定时,所以架构的不同部分可在不同的时间被配置。结果,CSA的某些实施例提供了机制来防止配置的和未配置的CFE之间的不一致操作。一般而言,一致性被视为对CFE要求的并且由CFE自身维持的一种属性,例如利用内部CFE状态来维持。例如,当CFE处于未配置状态中时,其可声称其输入缓冲器已满,以及声称其输出是无效的。当已配置时,这些值将被设置为缓冲器的真实状态。由于足够的架构出自配置,所以这些技术可允许它开始操作。这具有进一步减小情境切换时延的效果,例如如果长时延存储器请求被提早发出的话。
可变宽度配置
不同的CFE可具有不同的配置字宽度。对于较小的CFE配置字,实现者可通过公平地在网络线上指派CFE配置负载来平衡延迟。为了平衡网络线上的负载,一个选项是将配置比特指派到网络线的不同部分以限制任何一条线上的净延迟。通过利用串行化/去串行化技术可处理宽数据字。这些决策可基于每个架构来做出以优化特定CSA(例如,架构)的行为。网络控制器(例如,网络控制器5110和网络控制器5112中的一个或多个)可与CSA(例如,架构)的每个域(例如,子集)通信,以例如向一个或多个LCC发送配置信息。网络控制器可以是通信网络的一部分(例如,与电路交换网络分离)。网络控制器可包括网络数据流端点电路。
6.2用于CSA的低时延配置和用于为CSA适时取得配置数据的微体系结构
CSA的实施例可以是加速用户应用的一种能量高效且高性能的手段。当考虑程序(例如,其数据流图)是否可被加速器成功加速时,配置加速器的时间和运行程序的时间都可被考虑。如果运行时间较短,则配置时间可在确定成功加速中起到很大作用。因此,为了最大化可加速程序的域,在一些实施例中使配置时间尽可能短。一个或多个配置缓存可被包括在CSA中,例如使得高带宽、低时延存储使迅速重配置成为可能。接下来是对配置缓存的几个实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可选地访问配置缓存以获得新的配置信息。配置缓存可作为传统的基于地址的缓存来操作,或者在OS管理模式中操作,在此模式中配置被存储在本地地址空间中并且是通过对该地址空间的引用来寻址的。如果配置状态位于缓存中,则在某些实施例中不会作出对后备存储的请求。在某些实施例中,这个配置缓存与存储器层次体系中的任何(例如,更低级别)共享缓存是分离的。
图54根据本公开的实施例图示了包括处理元件的阵列、配置缓存(例如,5418或5420)和本地配置控制器(例如,5402或5406)的加速器分片5400。在一个实施例中,配置缓存5414与本地配置控制器5402是共位的。在一个实施例中,配置缓存5418位于本地配置控制器5406的配置域中,例如其中第一域结束于配置终止器5404处并且第二域结束于配置终止器5408处。配置缓存可允许本地配置控制器在配置期间可参考配置缓存,例如以期与参考存储器相比,以更低的时延来获得配置状态。配置缓存(存储)或者可以是专用的,或者可作为架构内存储元件(例如本地缓存5416)的配置模式被访问。
缓存模式
1.需求缓存——在此模式中,配置缓存作为真实缓存操作。配置控制器发出基于地址的请求,这些请求被对照缓存中的标签来进行检查。错失被加载到缓存中,然后可在未来的重编程期间被重引用。
2.架构内存储(便笺)缓存——在此模式中,配置缓存接收对其自己的小地址空间中的配置序列的引用,而不是主机的更大地址空间。这可改善存储器密度,因为用于存储标签的缓存部分可改为用于存储配置。
在某些实施例中,配置缓存可以让配置数据被预加载到其中,例如按外部方向或者内部方向。这可允许加载程序的时延的减小。这里的某些实施例提供了到配置缓存的一种接口,该接口允许了将新的配置状态加载到缓存中,例如即使某个配置已经在架构中运行。此加载的发起可发生自内部或者外部来源。预加载机制的实施例还通过从配置路径中去除缓存加载的时延来减小时延。
预取模式
1.显式预取——用新的命令ConfigurationCachePrefetch来增强配置路径。取代对架构编程,此命令简单地使得将相关的程序配置加载到配置缓存中,而不对架构编程。由于此机制捎带(piggyback)在现有的配置基础设施上,所以其既被暴露于架构内也被暴露于外部,例如暴露给核心和访问存储器空间的其他实体。
2.隐式预取——全局配置控制器可维护预取预测器,并且使用这个来发起到配置缓存的显式预取,例如以自动化方式。
6.3用于响应于异常对CSA迅速重配置的硬件
CSA(例如,空间架构)的某些实施例包括大量的指令和配置状态,它们例如在CSA的操作期间很大程度上是静态的。从而,配置状态可能对于软差错是脆弱的。这些软差错的迅速且无差错的恢复对于空间系统的长期可靠性和性能可能是关键的。
这里的某些实施例提供了一种迅速配置恢复环路,例如其中配置差错被检测到并且架构的一些部分被立即重配置。这里的某些实施例包括配置控制器,例如具有可靠性、可用性和可服务性(reliability,availability,and serviceability,RAS)重编程特征。CSA的某些实施例包括用于空间架构内的高速配置、差错报告和奇偶校验的电路。利用这三个特征的组合,并且可选地,利用配置缓存,配置/异常处理电路可从配置中的软差错恢复。当被检测到时,软差错可被传达到配置缓存,配置缓存发起架构(例如,架构的该部分)的立即重配置。某些实施例提供了专用重配置电路,其例如比在架构中将会间接实现的任何解决方案更快。在某些实施例中,共位的异常和配置电路合作来在配置差错检测时重加载架构。
图55根据本公开的实施例图示了包括处理元件的阵列和具有重配置电路(5518、5522)的配置和异常处理控制器(5502、5506)的加速器分片5500。在一个实施例中,当PE通过其本地RAS特征检测到配置差错时,其通过其异常生成器向配置和异常处理控制器(例如,5502或5506)发送(例如,配置差错或重配置差错)消息。在接收到此消息时,配置和异常处理控制器(例如,5502或5506)发起共位的重配置电路(例如,分别是5518或5522)来重加载配置状态。配置微体系结构继续进行并且重加载(例如,仅)配置状态,并且在某些实施例中,仅为报告RAS差错的PE重加载配置状态。在重配置完成时,架构可继续开始正常操作。为了减小时延,被配置和异常处理控制器(例如,5502或5506)使用的配置状态可源发自配置缓存。作为配置或重配置过程的基本情况,断言其已被配置(或重配置)的配置终止器(例如,图55中的配置和异常处理控制器5502的配置终止器5504或者配置和异常处理控制器5506的配置终止器5508)可被包括在链条的末尾处。
图56根据本公开的实施例图示了重配置电路5618。重配置电路5618包括配置状态寄存器5620来存储配置状态(或者指向其的指针)。
7.4用于CSA的架构发起重配置的硬件
应用中针对CSA(例如,空间阵列)的一些部分可能被运行得不频繁或者可能与程序的其他部分是相互排斥的。为了节省面积、改善性能和/或降低功率,在程序数据流图的若干个不同部分之间对空间架构的一些部分进行时间复用,这可能是有用的。这里的某些实施例包括接口,通过该接口,CSA(例如,经由空间程序)可请求架构的该部分被重编程。这可使得CSA能够根据动态控制流动态地改变其自身。这里的某些实施例允许了架构发起的重配置(例如,重编程)。这里的某些实施例提供了一组接口来从架构内触发配置。在一些实施例中,PE基于程序数据流图中的一些决策来发出重配置请求。此请求可行经网络到我们的新配置接口,在这里它触发重配置。一旦重配置完成,就可以可选地返回消息,通知该完成。CSA的某些实施例从而提供了程序(例如,数据流图)引导的重配置能力。
图57根据本公开的实施例图示了包括处理元件的阵列和具有重配置电路5718的配置和异常处理控制器5706的加速器分片5700。这里,架构的一部分发出对(重)配置的请求到配置域,例如配置和异常处理控制器5706和/或重配置电路5718。域(重)配置自身,并且当该请求已得到满足时,配置和异常处理控制器5706和/或重配置电路5718向架构发出响应,以通知架构(重)配置完成。在一个实施例中,配置和异常处理控制器5706和/或重配置电路5718在(重)配置正在进行的时间期间禁用通信,因此程序在操作期间没有一致性问题。
配置模式
按地址配置——在此模式中,架构作出从特定地址加载配置数据的直接请求。
按引用配置——在此模式中,架构例如按预定的引用ID作出加载新配置的请求。这可简化对要加载的代码的确定,因为代码的位置已被抽象。
配置多个域
CSA可包括更高级别的配置控制器来支持多播机制以(例如,经由用虚线框指示的网络)将配置请求播送到多个(例如,分布式或本地)配置控制器。这可使得单个配置请求能够被复制在架构的更大部分上,例如触发广泛重配置。
6.5异常聚合器
CSA的某些实施例也可经历异常(例如,异常状况),例如浮点下溢。当这些状况发生时,可调用特殊的处理程序来纠正程序或者终止它。这里的某些实施例提供了用于处理空间架构中的异常的系统级体系结构。由于某些空间架构强调面积效率,所以这里的实施例在提供一般异常机制的同时最小化了总面积。这里的某些实施例提供了通知在CSA(例如,空间阵列)内发生的异常状况的低面积手段。这里的某些实施例提供了一种接口和信令协议,用于传达这种异常,以及PE级异常语义。这里的某些实施例是专用的异常处理能力,并且例如不要求由编程者进行的显式处理。
CSA异常体系结构的一个实施例包括四个部分,例如在图58-图59中示出。这些部分可被布置在层次体系中,其中异常从生产者流出,最终到达分片级异常聚合器(例如,处理程序)处,其可与例如核心的异常服务者会合。这四个部分可以是:
1.PE异常生成器
2.本地异常网络
3.夹层异常聚合器
4.分片级异常聚合器
图58根据本公开的实施例图示了包括处理元件的阵列和耦合到分片级异常聚合器5804的夹层异常聚合器5802的加速器分片5800。图59根据本公开的实施例图示了具有异常生成器5944的处理元件5900。
PE异常生成器
处理元件5900可例如包括来自图9的处理元件900,其中类似的号码是类似的组件,例如本地网络902和本地网络5902。附加网络5913(例如,通道)可以是异常网络。PE可实现到异常网络(例如,图59上的异常网络5913(例如通道))的接口。例如,图59示出了这种接口的微体系结构,其中PE具有异常生成器5944(例如,发起异常有限状态机(finite statemachine,FSM)5940来将异常分组(例如BOXID 5942)选通出到异常网络)。BOXID 5942可以是本地异常网络内的异常产生实体(例如,PE或框)的唯一标识符。当检测到异常时,异常生成器5944感测异常网络并且在发现该网络空闲时选通出BOXID。异常可由许多状况引起,例如但不限于算术差错、对状态的ECC检查失败,等等。然而,也可能是引入了异常数据流操作,存着支持像断点这样的构造的念头。
异常的发起可以显式地由编程者提供的指令的执行而发生,或者在检测到硬差错状况(例如,浮点下溢)时隐式地发生。在异常时,PE 5900可进入等待状态,在该状态中它等待被例如在PE 5900外部的最终异常处理程序所服务。异常分组的内容取决于特定PE的实现,如下所述。
本地异常网络
(例如,本地)异常网络将异常分组从PE 5900操控到夹层异常网络。异常网络(例如,5913)例如对于PE的子集可以是串行分组交换网络,其包括例如组织成环状或树状拓扑的(例如单条)控制线和一条或多条数据线。每个PE可在(例如,本地)异常网络中具有(例如,环状)站点,例如在这里它可仲裁以向异常网络中注入消息。
需要注入异常分组的PE端点可观察其本地异常网络出口点。如果控制信号指示繁忙,则PE将等待开始注入其分组。如果网络不忙,也就是说,下游站点没有分组要转发,则PE将着手开始注入。
网络分组可具有可变或固定的长度。每个分组可开始于识别分组的源PE的固定长度头部字段。这之后可以是可变数目的PE特定字段,包含例如包括差错码、数据值或其他有用状态信息在内的信息。
夹层异常聚合器
夹层异常聚合器5804负责将本地异常网络组装成更大的分组并且将它们发送到分片级异常聚合器5802。夹层异常聚合器5804可以将其自己的唯一ID附加在本地异常分组前面,例如确保异常消息是无歧义的。夹层异常聚合器5804可接口到夹层网络中特殊的仅限异常虚拟通道,例如从而确保异常的无死锁。
夹层异常聚合器5804也可能够直接服务某些类别的异常。例如,可利用夹层网络站点本地的缓存在夹层网络之外为来自架构的配置请求服务。
分片级异常聚合器
异常系统的最终阶段是分片级异常聚合器5802。分片级异常聚合器5802负责从各种夹层级异常聚合器(例如,5804)收集异常并且将它们转发到适当的服务硬件(例如,核心)。这样,分片级异常聚合器5802可包括一些内部表格和控制器来将特定的消息与处理程序例程相关联。这些表格可被直接索引或者用小的状态机来索引以便操控特定的异常。
与夹层异常聚合器一样,分片级异常聚合器可服务一些异常请求。例如,其可响应于特定的异常而发起PE架构的大部分的重编程。
6.6提取控制器
CSA的某些实施例包括(一个或多个)提取控制器来从架构提取数据。下面论述了如何迅速地实现此提取以及如何最小化数据提取的资源开销的实施例。数据提取可被利用于诸如异常处理和情境切换这样的关键任务。这里的某些实施例通过引入允许具有可变和动态可变量的状态的可提取架构元素(extractable fabric element,EFE)(例如,PE、网络控制器和/或交换机)被提取的特征来从异质空间架构提取数据。
CSA的实施例包括分布式数据提取协议和微体系结构来支持此协议。CSA的某些实施例包括多个本地提取控制器(local extraction controller,LEC),它们利用一组(例如,一小组)控制信号和架构提供网络的组合来将程序数据流出空间架构的其本地区域。状态元素可在每个可提取架构元素(EFE)处被用于形成提取链,例如允许了个体EFE在没有全局寻址的情况下自提取。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例例如对于提取链的形成包括特定的硬件支持(例如,提取控制器),并且不依赖于软件来动态建立这些链条,例如以增大提取时间为代价。CSA的实施例不是纯分组交换的,并且确实包括额外的带外控制线(例如,控制不是通过数据路径被发送的,要求额外的周期来选通和重串行化此信息)。CSA的实施例通过固定提取排序并且通过提供显式的带外控制来减小提取时延(例如,减小至少二倍),同时不会显著地增大网络复杂度。
CSA的实施例对于数据提取不使用串行机制,其中数据被利用类似JTAG的协议逐比特地从架构流出。CSA的实施例利用粗颗粒的架构方案。在某些实施例中,向面向64或32比特的CSA架构添加几个控制线或状态元素相对于将同样的这些控制机制添加到4或6比特架构具有更低的成本。
图60根据本公开的实施例图示了包括处理元素的阵列和本地提取控制器(6002、6006)的加速器分片6000。每个PE、每个网络控制器和每个交换机可以是可提取架构元素(EFE),它们例如被CSA体系结构的实施例所配置(例如,编程)。
CSA的实施例包括如下硬件,该硬件提供从异质空间架构的高效、分布式、低时延提取。这可根据四个技术来实现。首先,利用一种硬件实体,本地提取控制器(LEC),例如如图60-图62中所示。LEC可接受来自主机(例如,处理器核心)的命令,例如从空间阵列提取数据的流,并且将此数据写回到虚拟存储器中以供主机检查。第二,可包括提取数据路径,其例如像PE架构的原生宽度那样宽并且可被覆盖在PE架构之上。第三,新的控制信号可被接收到PE架构中,这些控制信号编排提取过程。第四,状态元素可位于每个可配置端点处(例如,在寄存器中),其跟踪相邻EFE的状态,允许每个EFE在没有额外控制信号的情况下明确地导出其状态。这四个微体系结构特征可允许CSA从EFE的链条提取数据。为了获得低数据提取时延,某些实施例可通过在架构中包括多个(例如,许多)LEC和EFE链来划分提取问题。在提取时,这些链条可独立地操作以并行地从架构中提取数据,例如大幅减小时延。作为这些组合的结果,CSA可执行完整的状态转储(例如,在数百纳秒内)。
图61A-图61C根据本公开的实施例图示了本地提取控制器6102配置数据路径网络。所描绘的网络包括多个复用器(例如,复用器6106、6108、6110),这些复用器可(例如,经由其各自的控制信号)被配置为将一个或多个数据路径(例如,来自PE)连接在一起。图61A图示了对于一些先前的操作或程序配置(例如,设置)的网络6100(例如,架构)。图61B图示了本地提取控制器6102(例如,包括网络接口电路6104来发送和/或接收信号)选通提取信号并且由该LEC控制的所有PE进入提取模式中。提取链中的最末PE(或者提取终止器)可主控提取通道(例如,总线),并且根据或者(1)来自LEC的信号或者(2)内部产生的信号(例如,来自PE)来发送数据。一旦完成,PE就可设置其完成标志,例如使得下一个PE能够提取其数据。图61C图示了最遥远的PE已完成提取过程,并且作为结果,其已设置其一个或多个提取状态比特,这些比特例如将复用器摆动到相邻网络中以使得下一个PE能够开始提取过程。提取的PE可继续开始正常操作。在一些实施例中,PE可保持被禁用,直到其他动作被作出为止。在这些图中,复用器网络与某些附图(例如,图6)中所示的“交换机”类似。
下面的章节描述了提取网络的实施例的各种组件的操作。
本地提取控制器
图62根据本公开的实施例图示了提取控制器6202。本地提取控制器(LEC)可以是如下硬件实体,该硬件实体负责接受提取命令、协调与EFE的提取过程和/或例如向虚拟存储器存储提取的数据。以这个身份,LEC可以是一种专用的循序微控制器。
LEC操作可开始于其接收指向缓冲器(例如,在虚拟存储器中)的指针,在该缓冲器中将写入架构状态,以及可选地,控制将提取多少架构的命令。取决于LEC微体系结构,这个指针(例如,存储在指针寄存器6204中)可通过网络或者通过对LEC的存储器系统访问到来。当其接收到这种指针(例如,命令)时,LEC着手从其所负责的那部分架构提取状态。LEC可将这个提取的数据从架构流出到由外部调用者提供的缓冲器中。
LEC的两个不同的微体系结构在图60中示出。第一个将LEC 6002放置在存储器接口处。在此情况下,LEC可向存储器系统作出直接请求来写入提取的数据。在第二情况中,LEC 6006被放置在存储器网络上,在其中它只可间接地向存储器作出请求。在两种情况下,LEC的逻辑操作都可以不变。在一个实施例中,LEC被告知从架构提取数据的愿望,例如由一组(例如,OS可见的)控制状态寄存器来告知,这些寄存器将用于将新命令告知个体LEC。
额外带外控制通道(例如,导线)
在某些实施例中,提取依赖于2-8个额外的带外信号来改善配置速度,如下面所定义。由LEC驱动的信号可被标注为LEC。由EFE(例如,PE)驱动的信号可被标注为EFE。配置控制器6202可包括以下控制通道,例如LEC_EXTRACT控制通道6306、LEC_START控制通道6208、LEC_STROBE控制通道6210以及EFE_COMPLETE控制通道6212,其中每一者的示例在下面的表格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相邻的网络可观察此信号并且也调整其状态来应对该转变。作为提取过程的基本情况,断言提取完成的提取终止器(例如,图51中的LEC 6002的提取终止器6004或者LEC 6006的提取终止器6008)可被包括在链条的末尾处。
在EFE内部,这个比特可用于驱动流控制准备就绪信号。例如,当提取比特被解除断言时,网络控制信号可自动被钳位到防止数据流动的值,同时在PE内没有操作或动作将被调度。
应对高延迟路径
LEC的一个实施例可在长距离上驱动信号,例如经过许多复用器并且具有许多负载。从而,信号要在短时钟周期内到达遥远的EFE可能是困难的。在某些实施例中,提取信号按主(例如,CSA)时钟频率的某个分频(例如,某个分数)来确保提取时的数字定时纪律。时钟分频可被利用在带外信令协议中,并且不要求对主时钟树的任何修改。
在提取期间确保一致架构行为
由于某些提取方案是分布式的并且由于程序和存储器效果而具有非确定性定时,所以架构的不同成员可在不同的时间处于提取过程中。在LEC_EXTRACT被驱动的同时,所有网络流控制信号可被驱动为逻辑低,从而例如冻结架构的特定区段的操作。
提取过程可以是非破坏性的。因此,一旦提取完成了,一组PE就可被认为是可操作的。对提取协议的扩展可允许PE可选地在提取后被禁用。或者,在提取过程期间开始配置在实施例中将具有类似的效果。
单个PE提取
在一些情况下,提取单个PE可能是方便的。在此情况下,可选的地址信号可作为提取过程的开始的一部分被驱动。这可使得作为提取目标的PE被直接使能。一旦此PE已被提取,提取过程就可停止,同时降低LEC_EXTRACT信号。这样,单个PE可被选择性提取,例如由本地提取控制器提取。
处理提取背压
在LEC将提取的数据写入到存储器(例如,为了后期处理,例如在软件中后期处理)的实施例中,其可受制于有限的存储器带宽。在LEC耗尽其缓冲容量,或者预期其将会耗尽其缓冲容量的情况下,其可停止选通LEC_STROBE信号,直到缓冲问题已解决为止。
注意在某些附图(例如,图51、图54、图55、图57、图58和图60)中,通信是示意性示出的。在某些实施例中,这些通信可在(例如,互连)网络上发生。
6.7流程图
图63根据本公开的实施例图示了流程图6300。所描绘的流程6300包括:利用处理器的核心的解码器将指令解码成解码后指令(6302);利用处理器的核心的执行单元执行解码后指令以执行第一操作(6304);接收包括多个节点的数据流图的输入(6306);将数据流图覆盖到处理器的处理元件的阵列中,其中每个节点被表示为处理元件的阵列中的数据流操作器(6308);并且当传入操作对象集合到达处理元件的阵列时利用处理元件的阵列执行数据流图的第二操作(6310)。
图64根据本公开的实施例图示了流程图6400。所描绘的流程6400包括:利用处理器的核心的解码器将指令解码成解码后指令(6402);利用处理器的核心的执行单元执行解码后指令以执行第一操作(6404);接收包括多个节点的数据流图的输入(6406);将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作器(6408);并且当传入操作对象集合到达多个处理元件时利用互连网络和多个处理元件执行数据流图的第二操作(6410)。
6.8存储器
图65A是根据本公开的实施例的采用介于存储器子系统6510和加速硬件6502之间的存储器排序电路6505的系统6500的框图。存储器子系统6510可包括已知的存储器组件,包括缓存、存储器以及与基于处理器的体系结构相关联的一个或多个存储器控制器。加速硬件6502可以是粗颗粒空间体系结构,该粗颗粒空间体系结构由被处理元件(PE)间网络或者另一类型的组件间网络连接的轻量级处理元件(或者其他类型的处理组件)构成。
在一个实施例中,被视为控制数据流图的程序通过配置PE和通信网络被映射到空间体系结构上。一般而言,处理元件被配置为数据流操作器,类似于处理器中的功能单元:一旦输入操作对象到达PE处,一些操作就发生,并且结果被以管线方式转发到下游PE。数据流操作器(或者其他类型的操作器)可基于每个操作器来选择消耗传入数据。简单操作器,像是处理算术表达式的无条件评估的那些,经常消耗所有传入数据。然而,例如在累加中让操作器维持状态有时是有用的。
PE利用专用的虚拟电路通信,这些专用虚拟电路是通过静态配置电路交换通信网络来形成的。这些虚拟电路是流控制的并且完全背压式的,使得如果源没有数据或者目的地已满则PE将会暂缓。在运行时,数据流经根据数据流图实现映射的算法的PE,数据流图在本文中也被称为子程序。例如,数据可被从存储器流入,经过加速硬件6502,然后退出到存储器。这种体系结构相对于传统的多核处理器可实现显著的性能效率:PE形式的计算与更大的核心相比更简单并且更众多,并且通信是直接的,与存储器子系统6510的扩展不同。然而,存储器系统并行性帮助支持并行PE计算。如果存储器访问被串行化,则高并行性有可能是无法实现的。为了促进存储器访问的并行性,公开的存储器排序电路6505包括存储器排序体系结构和微体系结构,如将会详细说明的。在一个实施例中,存储器排序电路6505是请求地址文件电路(或者“RAF”)或者其他存储器请求电路。
图65B是图65A的系统6500的框图,但根据本公开的实施例采用了多个存储器排序电路6505。每个存储器排序电路6505可充当存储器子系统6510和加速硬件6502的一部分(例如,处理元件的空间阵列或分片)之间的接口。存储器子系统6510可包括多个缓存切片12(例如,图65B的实施例中的缓存切片12A、12B、12C和12D),并且一定数目的存储器排序电路6505(在此实施例中是四个)可被用于每个缓存切片12。交叉开关6504(例如,RAF电路)可将存储器排序电路6505连接到构成每个缓存切片12A、12B、12C和12D的缓存的堆。例如,在一个实施例中在每个缓存切片中可以有八堆存储器。系统6500可被实例化在单个晶粒上,例如作为片上系统(system on a chip,SoC)。在一个实施例中,该SoC包括加速硬件6502。在替换实施例中,加速硬件6502是诸如FPGA或CGRA之类的外部可编程芯片,并且存储器排序电路6505通过输入/输出集线器之类的与加速硬件6502相接口。
每个存储器排序电路6505可接受对于存储器子系统6510的读取和写入请求。来自加速硬件6502的请求对于发起读取或写入访问的数据流图的每个节点在单独的通道中到达存储器排序电路6505,读取或写入访问在本文中也被称为加载或存储访问。提供缓冲以使得加载的处理将以其被请求的顺序把所请求的数据返回到加速硬件6502。换言之,迭代六数据在迭代七数据之前被返回,等等依此类推。此外,注意从存储器排序电路6505到特定缓存堆的请求通道可实现为排序的通道,并且在第二请求之前离开的任何第一请求将在第二请求之前到达缓存堆。
图66是根据本公开的实施例图示出进出加速硬件6502的存储器操作的一般功能的框图6600。在加速硬件6502的顶部外面发生的操作被理解为是向和从存储器子系统6510的存储器作出的。注意作出了两个加载请求,然后是相应的加载响应。在加速硬件6502对来自加载响应的数据执行处理的同时,第三加载请求和响应发生,这触发额外的加速硬件处理。对这三个加载操作的加速硬件处理的结果随后被传递到存储操作中,从而最终结果被存储回到存储器。
通过考虑操作的这个序列,可明显看出空间阵列更自然地映射到通道。此外,加速硬件6502就请求和响应通道以及可发生的固有并行处理而言是时延不敏感的。加速硬件也可将程序的执行与存储器子系统6510(图65A)的实现解除耦合,因为与存储器的接口发生在与加速硬件6502采取的多个处理步骤分离的离散时刻。例如,去到存储器的加载请求和来自存储器的加载响应是分离的动作,并且在不同的情况中取决于存储器操作的依从流可被不同地调度。使用空间架构来例如处理指令促进了这种加载请求和加载响应的空间分离和分布。
图67是根据本公开的实施例图示出存储操作6701的空间依从流的框图6700。提及存储操作是示范性的,因为相同的流程可适用于加载操作(但没有传入数据),或者诸如防护之类的其他操作器。防护是针对存储器子系统的排序操作,其确保某个类型的所有在先存储器操作(例如所有存储或者所有加载)已完成了。存储操作6701可接收从加速硬件6502接收的地址6702(存储器的地址)和数据6704。存储操作6701也可接收传入依从性令牌6708,并且响应于这三项的可用性,存储操作6701可生成传出依从性令牌6712。传入依从性令牌可例如是程序的初始依从性令牌,该传入依从性令牌可在对程序的编译器提供配置中提供,或者可由存储器映射输入/输出(I/O)的执行来提供。或者,如果程序已经在运行,则传入依从性令牌6708可以是从加速硬件6502接收的,例如与存储操作6701所依从于的先前存储器操作相关联地接收的。传出依从性令牌6712可基于程序后续存储器操作所要求的地址6702和数据6704来生成。
图68是根据本公开的实施例的图65A的存储器排序电路6505的详细框图。存储器排序电路6505可耦合到无序存储器子系统6510,该无序存储器子系统6510如前所述可包括缓存12和存储器18,以及关联的(一个或多个)无序存储器控制器。存储器排序电路6505可包括或者耦合到通信网络接口20,该通信网络接口20可以是分片间或者分片内网络接口,并且可以是电路交换网络接口(如图所示),从而包括电路交换互连。替换地或者额外地,通信网络接口20可包括分组交换互连。
存储器排序电路6505还可包括但不限于,存储器接口6810、操作队列6812、(一个或多个)输入队列6816、完成队列6820、操作配置数据结构6824以及操作管理器电路6830,该操作管理器电路6830可进一步包括调度器电路6832和执行电路6834。在一个实施例中,存储器接口6810可以是电路交换的,而在另一实施例中,存储器接口6810可以是分组交换的,或者两者可同时存在。操作队列6812可缓冲正被针对请求处理的存储器操作(带有相应的参量),并且因此可对应于进入到输入队列6816中的地址和数据。
更具体而言,输入队列6816可以是至少以下各项的聚合:加载地址队列、存储地址队列、存储数据队列和依从性队列。当将输入队列6816实现为聚合的时,存储器排序电路6505可提供逻辑队列的共享,有额外的控制逻辑来从逻辑上分离队列,这些队列是与存储器排序电路的个体通道。这可最大化输入队列使用,但也可要求额外的复杂度和空间来供逻辑电路管理聚合队列的逻辑分离。或者,正如将参考图69论述的,输入队列6816可以按隔离的方式实现,对于每一者有一单独的硬件队列。无论是聚合的(图68)还是分解的(图69),对于本公开的目的而言的实现都是基本上相同的,前者使用额外的逻辑来在单个共享的硬件队列内从逻辑上分离队列。
当被共享时,输入队列6816和完成队列6820可实现为固定大小的环形缓冲器。环形缓冲器是具有先入先出(first-in-first-out,FIFO)数据特性的循环队列的一种高效实现方式。这些队列因此可强制实施为其请求存储器操作的程序的语义顺序。在一个实施例中,环形缓冲器(例如用于存储地址队列)可具有与按相同速率流经关联的队列(例如,存储数据队列或者依从性队列)的条目相对应的条目。这样,存储地址可保持与相应的存储数据相关联。
更具体而言,加载地址队列可缓冲从中取回数据的存储器18的传入地址。存储地址队列可缓冲向其写入数据的存储器18的传入地址,该数据被缓冲在存储数据队列中。依从性队列可与加载地址队列和存储地址队列的地址相关联地缓冲依从性令牌。表示单独通道的每个队列可实现有固定的或者动态数目的条目。当固定时,可用的条目越多,就可以进行越高效的复杂循环处理。但是,具有太多的条目会花费更多的面积和能量来实现。在一些情况下,例如对于聚合的体系结构,公开的输入队列6816可共享队列槽位。队列中的槽位的使用可以是静态分配的。
完成队列6820可以是单独的一组队列来响应于由加载操作发出的存储器命令而缓冲从存储器接收的数据。完成队列6820可用于扣留(hold)已被调度但是尚未针对其接收到数据(从而尚未完成)的加载操作。完成队列6820因此可用于对数据和操作流重排序。
将参考图69至图33更详细说明操作管理器电路6830,操作管理器电路6830可提供用于在考虑到用于提供存储器操作的正确排序的依从性令牌时调度和执行排队的存储器操作的逻辑。操作管理器6830可访问操作配置数据结构6824以确定哪些队列被分组在一起以形成给定的存储器操作。例如,操作配置数据结构6824可包括特定的依从性计数器(或队列)、输入队列、输出队列和完成队列全都对于特定的存储器操作被分组在一起。由于每个相继的存储器操作可被指派不同的队列群组,所以对不同的队列的访问在存储器操作的子程序间可以是交织的。在知道所有这些队列的情况下,操作管理器电路6830可与操作队列6812、(一个或多个)输入队列6816、(一个或多个)完成队列6820和存储器子系统6510相接口以最初在相继的存储器操作变得“可执行时”发出存储器操作到存储器子系统6510,并且接下来在有来自存储器子系统的某种确认的情况下完成存储器操作。这个确认可例如是响应于加载操作命令的数据,或者是对于数据响应于存储操作命令二被存储在存储器中的确认。
图69是根据本公开的实施例的图65A的存储器排序电路6505的微体系结构6900的流程图。由于C语言(以及其他面向对象的程序语言)的语义,存储器子系统6510可允许其中存储器操作的排序错误的程序的非法执行。微体系结构6900可强制实施存储器操作的排序(从存储器加载和向存储器存储的序列),使得加速硬件6502执行的指令的结果被恰当地排序。图示了若干个本地网络50来表示耦合到微体系结构6900的加速硬件6502的一部分。
从体系结构的角度来看,有至少两个目标:第一,正确地运行一般循序代码,以及第二,在由微体系结构6900执行的存储器操作中获得高性能。为了确保程序正确性,编译器以某种方式将存储操作和加载操作之间的依从性表达到阵列p,正如将会说明的,该阵列是经由依从性令牌来表达的。为了改善性能,在就程序顺序而言合法的情况下,微体系结构6900并行发现并且发出阵列的尽可能多的加载命令。
在一个实施例中,微体系结构6900可包括上文参考图68论述的操作队列6812、输入队列6816、完成队列6820和操作管理器电路6830,其中个体队列可被称为通道。微体系结构6900还可包括多个依从性令牌计数器6914(例如,每个输入队列一个)、一组依从性队列6918(例如,每个输入队列一个)、地址复用器6932、存储数据复用器6934、完成队列索引复用器6936和加载数据复用器6938。操作管理器电路6830在一个实施例中可指导这些各种复用器生成存储器命令6950(将被发送到存储器子系统6510)以及接收从存储器子系统6510返回的对加载命令的响应,如将会说明的。
输入队列6816如前所述可包括加载地址队列6922、存储地址队列6924和存储数据队列6926。(小的数字0、1、2是通道标签并且稍后在图72和图75A中将被引用。)在各种实施例中,这些输入队列可被倍增以包含额外的通道,以应对存储器操作处理的额外并行化。每个依从性队列6918可与输入队列6816之一相关联。更具体而言,标注为B0的依从性队列6918可与加载地址队列6922相关联,并且标注为B1的依从性队列可与存储地址队列6924相关联。如果提供了输入队列6816的额外通道,则依从性队列6918可包括额外的相应通道。
在一个实施例中,完成队列6820可包括一组输出缓冲器6944和6946,用于接收来自存储器子系统6510的加载数据,以及完成队列6942,用来根据由操作管理器电路6830维护的索引针对加载操作来缓冲地址和数据。操作管理器电路6830可管理索引来确保加载操作的按序执行,并且识别被接收到输出缓冲器6944和6946中的数据,这些数据可被移动到完成队列6942中的所调度的加载操作。
更具体而言,因为存储器子系统6510是无序的,但加速硬件6502按序完成操作,所以微体系结构6900可通过使用完成队列6942对存储器操作重排序。关于完成队列6942可执行三个不同的子操作,即分配、入队和出队。对于分配,操作管理器电路6830可在完成队列的按序下一个槽位中分配到完成队列6942中的索引。操作管理器电路可将此索引提供到存储器子系统6510,存储器子系统6510随后可知道对于加载操作向其写入数据的槽位。为了入队,存储器子系统6510可像随机访问存储器(RAM)那样将数据作为条目写入到完成队列6942中的被编制索引的按序下一个槽位,将该条目的状态比特设置为有效。为了出队,操作管理器电路6830可呈现存储在这个按序下一个槽位中的数据来完成加载操作,将该条目的状态比特设置为无效。无效条目随后可用于新的分配。
在一个实施例中,状态信号6848可以指输入队列6816、完成队列6820、依从性队列6918和依从性令牌计数器6914的状态。这些状态例如可包括输入状态、输出状态和控制状态,它们可以指与输入或输出相关联的依从性令牌的存在与否。输入状态可包括地址的存在与否,并且输出状态可包括存储值和可用完成缓冲器槽位的存在与否。依从性令牌计数器6914可以是队列的紧凑表示,并且跟踪用于任何给定输入队列的依从性令牌的数目。如果依从性令牌计数器6914饱和,则对于新的存储器操作可不生成额外的依从性令牌。因此,存储器排序电路6505可暂缓调度新的存储器操作,直到依从性令牌计数器6914变得不饱和为止。
额外参考图70,图70是根据本公开的实施例的可执行确定器电路7000的框图。存储器排序电路6505可被设置有若干不同种类的存储器操作,例如加载和存储:
ldNo[d,x]result.outN,addr.in64,order.in0,order.out0
stNo[d,x]addr.in64,data.inN,order.in0,order.out0
可执行确定器电路7000可被集成为调度器电路6832的一部分,并且其可执行逻辑操作来确定给定的存储器操作是否是可执行的,并从而准备好被发出到存储器。当与其存储器参量相对应的队列具有数据并且关联的依从性令牌存在时,存储器操作可被执行。这些存储器参量可包括例如输入队列标识符7010(指示输入队列6816的通道)、输出队列标识符7020(指示完成队列6820的通道)、依从性队列标识符7030(例如,应当参考什么依从性队列或计数器)以及操作类型指示符7040(例如,加载操作或存储操作)。可包括字段(例如,存储器请求的字段),例如按上述格式,其存储一个或多个比特来指示使用风险检查硬件。
这些存储器参量可被排队在操作队列6812内,并且用于与来自存储器和加速硬件6502的传入地址和数据相关联地调度存储器操作的发出。(参见图71。)传入状态信号6848可在逻辑上与这些标识符相组合,然后结果可被相加(例如,通过与门7050)来输出可执行信号,其例如在存储器操作可执行时被断言。传入状态信号6848可包括输入队列标识符7010的输入状态7012、输出队列标识符7020的输出状态7022以及依从性队列标识符7030的控制状态7032(与依从性令牌有关)。
对于加载操作,作为示例,当加载操作具有地址(输入状态)和空间来在完成队列6942中缓冲加载结果(输出状态)时,存储器排序电路6505可发出加载命令。类似地,当存储操作既有地址也有数据值(输入状态)时,存储器排序电路6505可为存储操作发出存储命令。因此,状态信号6848可传达状态信号所关于的队列的空(或满)的水平。操作类型于是可依据什么地址和数据应当可用来指示该逻辑是否导致可执行信号。
为了实现依从性排序,调度器电路6832可扩展存储器操作来包括依从性令牌,如上文在示例加载和存储操作中加下划线的部分。控制状态7032可指出在由依从性队列标识符7030所标识的依从性队列内依从性令牌是否可用,该依从性队列可以是依从性队列6918(对于传入存储器操作)或者依从性令牌计数器6914(对于完成的存储器操作)之一。在这个规划下,依从的存储器操作要求额外的排序令牌来执行并且在该存储器操作完成时生成额外的排序令牌,其中完成意味着来自该存储器操作的结果的数据对于程序后续存储器操作已变得可用。
在一个实施例中,进一步参考图69,取决于是加载操作还是存储操作当前正被调度来执行,操作管理器电路6830可指导地址复用器6932选择被缓冲在加载地址队列6922或者存储地址队列6924内的地址参量。如果其是存储操作,则操作管理器电路6830也可指导存储数据复用器6934从存储数据队列6926中选择相应的数据。操作管理器电路6830也可指导完成队列索引复用器6936取回完成队列6820内的根据队列状态和/或程序顺序来编制索引的加载操作条目,以完成加载操作。操作管理器电路6830也可指导加载数据复用器6938对于正等待完成的加载操作将从存储器子系统6510接收的数据选择到完成队列6820中。这样,操作管理器电路6830可指导对如下输入的选择,所述输入进入形成存储器命令6950(例如,加载命令或存储命令)或者执行电路6834正等待来完成存储器操作。
图71是根据本公开的一个实施例的执行电路6834的框图,该执行电路6834可包括优先级编码器7106和选择电路7108,并且生成(一个或多个)输出控制线7110。在一个实施例中,执行电路6834可访问已被确定为可执行的排队存储器操作(在操作队列6812中)(图70)。执行电路6834也可针对已被排队并且也被指示为准备好发出到存储器的多个排队存储器操作接收调度7104A、7104B、7104C。优先级编码器7106从而可接收已被调度的可执行存储器操作的身份并且执行某些规则(或者遵循特定逻辑),来从进入的那些中选择具有被首先执行的优先权的存储器操作。优先级编码器7106可输出选择器信号7107,该信号识别具有最高优先级并从而已被选择的调度的存储器操作。
优先级编码器7106例如可以是将多个二进制输入压缩成更小数目的输出(包括可能仅一个输出)的电路(例如状态机或更简单的转换器)。优先级编码器的输出是从最高有效输入比特零开始的原始数字的二进制表示。因此,在一个示例中,当分别对应于7104A、7104B和7104C的存储器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)可执行并且被调度时。优先级编码器7106可被配置为输出选择器信号7107到选择电路7108,指出存储器操作零作为具有最高优先级的存储器操作。选择电路7108在一个实施例中可以是复用器,并且被配置为响应于来自优先级编码器7106(并且指示对最高优先级的存储器操作的选择)的选择器信号将其选择(例如,对存储器操作零的选择)作为控制信号输出到控制线7110上。这个控制信号可去到复用器6932、6934、6936和/或6938,如参考图69所述,以填充接下来要发出(被发送)到存储器子系统6510的存储器命令6950。存储器命令的传输可被理解为发出存储器操作到存储器子系统6510。
图72是根据本公开的实施例的逻辑和二进制形式的示范性加载操作7200的框图。返回参考图70,加载操作7200的逻辑表示可包括作为输入队列标识符7010的通道零(“0”)(对应于加载地址队列6922)和作为输出队列标识符7020的完成通道一(“1”)(对应于输出缓冲器6944)。依从性队列标识符7030可包括两个标识符,用于传入依从性令牌的通道B0(对应于第一依从性队列6918)和用于传出依从性令牌的计数器C0。操作类型7040具有“加载”的指示,这也可以是数值指示符,以指示出存储器操作是加载操作。下面,逻辑存储器操作的逻辑表示是用于示范性目的的二进制表示,例如其中加载由“00”指示。图72的加载操作可被扩展到包括其他配置,例如存储操作(图74A)或者其他类型的存储器操作,例如防护。
将联系图73A-图73B、图74A-图74B和图75A-图75G出于说明目的,利用简化的示例来图示存储器排序电路6505进行的存储器排序的示例。对于此示例,以下代码包括阵列p,其由索引i和i+2访问:
对于此示例,假设阵列p包含0,1,2,3,4,5,6,并且在循环执行结束时,阵列p将包含0,1,0,1,0,1,0。通过展开循环可变换此代码,如图73A和73B中所示。真实地址依从性由图73A中的箭头来注释,其中在每种情况中,加载操作依从于到相同地址的存储操作。例如,对于这种依从性中的第一个,存储(例如,写入)到p[2]需要在从p[2]加载(例如,读取)之前发生,并且对于这种依从性中的第二个,到p[3]的存储需要在从p[3]的加载之前发生,等等依此类推。由于编译器将是悲观的,所以编译器注释两个存储器操作加载p[i]和存储p[i+2]之间的依从性。注意读取和写入只是有时冲突。微体系结构6900被设计为提取存储器级并行性,其中当对相同地址没有冲突时存储器操作可同时向前移动。对于加载操作尤其是这样,加载操作由于等待在前依从存储操作完成而暴露代码执行中的时延。在图73B中的示例代码中,安全重排序由展开的代码左侧的箭头来注释。
参考图74A-图74B和图75A-图75G来论述微体系结构可执行此重排序的方式。注意此方案不是尽可能最优的,因为微体系结构6900可不是每个周期向存储器发送存储器命令。然而,利用最低限度的硬件,微体系结构通过在操作对象(例如,对于存储是地址和数据,或者对于加载是地址)和依从性令牌可用时执行存储器操作来支持依从性流程。
图74A是根据本公开的实施例的用于加载操作7402和存储操作7404的示范性存储器参量的框图。这些或者类似的存储器参量已联系图72论述,并且在这里将不再重复。然而,注意存储操作7404对于输出队列标识符没有指示符,因为没有数据正在被输出到加速硬件6502。反而,如输入队列标识符存储器参量中所标识的,在存储器命令中,输入队列6816的通道1中的存储地址和通道2中的数据将被调度来传输到存储器子系统6510以完成存储操作7404。此外,依从性队列的输入通道和输出通道都是用计数器实现的。因为如图73A和图73B中显示的加载操作和存储操作是独立的,所以可在代码的流程内在加载操作和存储操作之间循环计数器。
图74B是根据本公开的实施例图示出例如图73A的加载操作7402和存储操作7404那样的加载操作和存储操作通过图69的存储器排序电路的微体系结构6900的流程的框图。为了说明的简单,没有显示所有组件,但可返回参考图69中显示的额外组件。对于加载操作7402指示“加载”以及对于存储操作7404指示“存储”的各种椭圆被覆盖在微体系结构6900的一些组件上,作为对于随着存储器操作通过微体系结构6900被排队和排序,队列的各种通道如何被使用的指示。
图75A、图75B、图75C、图75D、图75E、图75F、图75G和图75H是根据本公开的实施例图示出图73A和图73B的示范性程序的加载操作和存储操作通过图74B的微体系结构的队列的功能流程的框图。每幅图可对应于微体系结构6900进行的处理的下一周期。斜体的值是传入值(传入到队列中)并且粗体的值是传出值(传出队列)。具有正常字体的所有其他值是已经存在于队列中的保留值。
在图75A中,地址p[0]正传入到加载地址队列6922中,并且地址p[2]正传入到存储地址队列6924中,开始控制流过程。注意,用于加载地址队列的依从性输入的计数器C0是“1”,并且用于依从性输出的计数器C1是零。与之不同,C0的“1”指示存储操作的依从性输出值。这指示了p[0]的加载操作的传入依从性和p[2]的存储操作的传出依从性。然而,这些值尚未活跃,但在图75B中以这种方式将变得活跃。
在图75B中,地址p[0]是加粗的,用于指示其在此周期中是传出的。新的地址p[1]正传入到加载地址队列中,并且新的地址p[3]正传入到存储地址队列中。完成队列6942中的零(“0”)值比特也是传入的,这指出对于该索引条目存在的任何数据是无效的。如前所述,计数器C0和C1的值现在被指示为传入,从而现在在此周期中是活跃的。
在图75C中,传出地址p[0]现在已离开了加载地址队列,并且新的地址p[2]正传入到加载地址队列中。并且,数据(“0”)对于地址p[0]正传入到完成队列中。有效性比特被设置为“1”以指出完成队列中的数据是有效的。此外,新的地址p[4]正传入到存储地址队列中。计数器C0的值被指示为传出,并且计数器C1的值被指示为传入。C1的值“1”指示到地址p[4]的存储操作的传入依从性。
注意最新的加载操作的地址p[2]依从于首先需要存储操作对于地址p[2]进行存储的值,其在存储地址队列的顶部。稍后,对于从地址p[2]的加载操作、在完成队列中所编制索引的条目可保持被缓冲,直到根据到地址p[2]的存储操作的数据完成为止(参见图75F-75H)。
在图75D中,数据(“0”)对于地址p[0]正在从完成队列传出,因此其正被送出到加速硬件6502。此外,新的地址p[3]正传入到加载地址队列中,并且新的地址p[5]正传入到存储地址队列中。计数器C0和C1的值保持不变。
在图75E中,地址p[2]的值(“0”)正传入到存储数据队列中,而新的地址p[4]进入到加载地址队列中,并且新的地址p[6]进入到存储地址队列中。C0和C1的计数器值保持不变。
在图75F中,存储数据队列中的地址p[2]的值(“0”)和存储地址队列中的地址p[2]都是传出值。类似地,计数器C1的值被指示为传出,而计数器C0的值(“0”)保持不变。此外,新的地址p[5]正传入到加载地址队列中,并且新的地址p[7]正传入到存储地址队列中。
在图75G中,值(“0”)是传入的以指示出完成队列6942内被编制索引的值是无效的。地址p[1]是加粗的以指示出其正在从加载地址队列传出,而新的地址p[6]正传入到加载地址队列中。新的地址p[8]也正传入到存储地址队列中。计数器C0的值正作为“1”传入,对应于地址p[6]的加载操作的传入依从性和地址p[8]的存储操作的传出依从性。计数器C1的值现在是“0”,并且被指示为传出。
在图75H中,数据值“1”正传入到完成队列6942中,而有效性比特也正作为“1”传入,这意味着所缓冲的数据是有效的。这是完成对于p[2]的加载操作所需要的数据。回忆起此数据必须首先被存储到地址p[2],这在图75F中发生。计数器C0的值“0”是传出的,并且计数器C1的值“1”是传入的。此外,新的地址p[7]正传入到加载地址队列中,并且新的地址p[9]正传入到存储地址队列中。
在本实施例中,执行图73A和图73B的代码的过程可在依从性令牌对于加载操作和存储操作在“0”和“1”之间弹跳的情况下继续。这是由于p[i]和p[i+2]之间的紧密依从性。具有不那么频繁的依从性的其他代码可以更慢的速率生成依从性令牌,从而以更慢的速率重置计数器C0和C1,引起更高值的令牌的生成(对应于进一步语义分离的存储器操作)。
图76是根据本公开的实施例用于在加速硬件和无序存储器子系统之间对存储器操作排序的方法7600的流程图。方法7600可由可包括硬件(例如,电路、专用逻辑和/或可编程逻辑)、软件(例如,在计算机系统上可执行来执行硬件仿真的指令)或者这些的组合的系统执行。在说明性示例中,方法7600可由存储器排序电路6505和存储器排序电路6505的各种子组件执行。
更具体而言,参考图76,方法7600可开始于存储器排序电路将存储器操作排队在存储器排序电路的操作队列中(7610)。存储器操作和控制参量可构成所排队的存储器操作,其中存储器操作和控制参量如前所述被映射到存储器排序电路内的某些队列。存储器排序电路可工作来与加速硬件相关联地发出存储器操作到存储器,以确保存储器操作按程序顺序完成。方法7600可继续,由存储器排序电路在一组输入队列中从加速硬件接收与存储器操作中的第二存储器操作相关联的存储器的地址(7620)。在一个实施例中,该组输入队列的加载地址队列是接收地址的通道。在另一实施例中,该组输入队列的存储地址队列是接收地址的通道。方法7600可继续,由存储器排序电路从加速硬件接收与地址相关联的依从性令牌,其中依从性令牌指示出对由存储器操作中位于第二存储器操作之前的第一存储器操作所生成的数据的依从性(7630)。在一个实施例中,依从性队列的通道将接收依从性令牌。第一存储器操作可以是加载操作或者存储操作。
方法7600可继续,由存储器排序电路响应于接收到依从性令牌和与依从性令牌相关联的地址而调度向存储器发出第二存储器操作(7640)。例如,当加载地址队列对于加载操作的地址参量接收到地址并且依从性队列对于加载操作的控制参量接收到依从性令牌时,存储器排序电路可调度将第二存储器操作作为加载操作发出。方法7600可继续,由存储器排序电路响应于第一存储器操作的完成而向存储器发出第二存储器操作(例如,在命令中)(7650)。例如,如果第一存储器操作是存储,则完成可由如下确认来验证,该确认是该组输入队列的存储数据队列中的数据已被写入到存储器中的该地址。类似地,如果第一存储器操作是加载操作,则完成可由对于该加载操作从存储器接收到数据来验证。
7.发明内容
在ExaFLOP尺度上的超级计算可能是高性能计算中的一个挑战,这是一个由传统的冯·诺依曼体系结构不太可能满足的挑战。为了实现ExaFLOP,CSA的实施例提供了以(例如,由编译器产生的)数据流图的直接执行为目标的异质空间阵列。除了提出CSA的实施例的体系结构原理以外,上文还描述和评估了表现出大于现有产品的10x的性能和能量的CSA的实施例。编译器生成的代码相对于路线图体系结构可具有显著的性能和能量增益。作为一种异质的、参数化的体系结构,CSA的实施例可容易适应于所有计算使用。例如,CSA的移动版本可被调节到32比特,而聚焦于机器学习的阵列可以大量的向量化8比特乘法单元为特征。CSA的实施例的主要优点是高性能和极度的能量效率,这是与范围从超级计算和数据中心到物连网的所有形式的计算相关的特性。
在一个实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换通信网络,来根据数据流图在处理元件之间、在所述空间阵列内路由数据以执行所述数据流图的第一数据流操作,其中所述分组交换通信网络还包括多个网络数据流端点电路来执行所述数据流图的第二数据流操作。所述多个网络数据流端点电路中的网络数据流端点电路可包括网络入口缓冲器来从所述分组交换通信网络接收输入数据;以及空间阵列出口缓冲器来根据所述输入数据上的所述第二数据流操作将结果数据输出到所述处理元件的空间阵列。所述空间阵列出口缓冲器可基于所述网络数据流端点电路内的调度器监视所述分组交换通信网络来输出所述结果数据。所述空间阵列出口缓冲器可基于所述网络数据流端点电路内的所述调度器监视所述分组交换通信网络的多个网络虚拟通道中的选中通道来输出所述结果数据。所述多个网络数据流端点电路中的网络数据流端点电路可包括空间阵列入口缓冲器来从所述空间阵列接收控制数据,该控制数据使得从所述分组交换通信网络接收到了输入数据的所述网络数据流端点电路的网络入口缓冲器根据所述输入数据上的所述第二数据流操作和所述控制数据来向所述处理元件的空间阵列输出结果数据。所述多个网络数据流端点电路中的网络数据流端点电路可在来自所述处理元件的空间阵列中的下游处理元件的背压信号指出所述下游处理元件中的存储装置不可用于所述网络数据流端点电路的输出时,暂缓从所述网络数据流端点电路的空间阵列出口缓冲器输出所述第二数据流操作的结果数据。所述多个网络数据流端点电路中的网络数据流端点电路可在所述网络数据流端点电路的网络入口缓冲器不可用时,发送背压信号来暂缓源在所述分组交换通信网络上发送输入数据到所述网络入口缓冲器中。所述处理元件的空间阵列可包括多个处理元件;以及所述多个处理元件之间的互连网络来接收包括多个节点的所述数据流图的输入,其中所述数据流图将被覆盖到所述互连网络、所述多个处理元件和所述多个网络数据流端点电路中,其中每个节点被表示为所述多个处理元件和所述多个网络数据流端点电路的任一者中的数据流操作器,并且所述多个处理元件和所述多个网络数据流端点电路将通过传入操作对象集合到达所述多个处理元件和所述多个网络数据流端点电路的每个所述数据流操作器处来执行操作。所述处理元件的空间阵列可包括电路交换网络来根据所述数据流图、在处理元件之间、在所述空间阵列内传输所述数据。
在另一实施例中,一种方法包括:提供处理元件的空间阵列;利用分组交换通信网络、根据数据流图、在处理元件之间、在所述空间阵列内路由数据;利用所述处理元件执行所述数据流图的第一数据流操作;并且利用所述分组交换通信网络的多个网络数据流端点电路执行所述数据流图的第二数据流操作。所述执行所述第二数据流操作可包括利用所述多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器从所述分组交换通信网络接收输入数据;并且根据所述输入数据上的所述第二数据流操作从所述网络数据流端点电路的空间阵列出口缓冲器向所述处理元件的空间阵列输出结果数据。所述输出可包括基于所述网络数据流端点电路内的调度器监视所述分组交换通信网络来输出所述结果数据。所述输出可包括基于所述网络数据流端点电路内的所述调度器监视所述分组交换通信网络的多个网络虚拟通道中的选中通道来输出所述结果数据。所述执行所述第二数据流操作可包括:利用所述多个网络数据流端点电路中的网络数据流端点电路的空间阵列入口缓冲器从所述空间阵列接收控制数据;并且配置所述网络数据流端点电路来使得从所述分组交换通信网络接收到了输入数据的所述网络数据流端点电路的网络入口缓冲器根据所述输入数据上的所述第二数据流操作和所述控制数据向所述处理元件的空间阵列输出结果数据。所述执行所述第二数据流操作可包括:当来自所述处理元件的空间阵列中的下游处理元件的背压信号指出所述下游处理元件中的存储装置不可用于所述多个网络数据流端点电路中的网络数据流端点电路的输出时,暂缓从所述网络数据流端点电路的空间阵列出口缓冲器的所述第二数据流操作的输出。所述执行所述第二数据流操作可包括:在所述多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器不可用时,从所述网络数据流端点电路发送背压信号来暂缓源在所述分组交换通信网络上发送输入数据到所述网络入口缓冲器中。所述路由、执行所述第一数据流操作和执行所述第二数据流操作可包括:接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理元件的空间阵列和所述多个网络数据流端点电路中,其中每个节点被表示为所述处理元件和所述多个网络数据流端点电路的任一者中的数据流操作器;并且在传入操作对象集合到达所述处理元件和所述多个网络数据流端点电路的每个所述数据流操作器时,利用所述处理元件执行所述第一数据流操作并且利用所述多个网络数据流端点电路执行所述第二数据流操作。所述方法可包括:利用所述空间阵列的电路交换网络根据所述数据流图、在处理元件之间、在所述空间阵列内传输所述数据。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:提供处理元件的空间阵列;利用分组交换通信网络、根据数据流图、在处理元件之间、在所述空间阵列内路由数据;利用所述处理元件执行所述数据流图的第一数据流操作;并且利用所述分组交换通信网络的多个网络数据流端点电路执行所述数据流图的第二数据流操作。所述执行所述第二数据流操作可包括:利用所述多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器从所述分组交换通信网络接收输入数据;并且根据所述输入数据上的所述第二数据流操作从所述网络数据流端点电路的空间阵列出口缓冲器向所述处理元件的空间阵列输出结果数据。所述输出可包括:基于所述网络数据流端点电路内的调度器监视所述分组交换通信网络来输出所述结果数据。所述输出可包括:基于所述网络数据流端点电路内的所述调度器监视所述分组交换通信网络的多个网络虚拟通道中的选中通道来输出所述结果数据。所述执行所述第二数据流操作可包括:利用所述多个网络数据流端点电路中的网络数据流端点电路的空间阵列入口缓冲器从所述空间阵列接收控制数据;并且配置所述网络数据流端点电路来使得从所述分组交换通信网络接收到了输入数据的所述网络数据流端点电路的网络入口缓冲器根据所述输入数据上的所述第二数据流操作和所述控制数据向所述处理元件的空间阵列输出结果数据。所述执行所述第二数据流操作可包括:当来自所述处理元件的空间阵列中的下游处理元件的背压信号指出所述下游处理元件中的存储装置不可用于所述多个网络数据流端点电路中的网络数据流端点电路的输出时,暂缓从所述网络数据流端点电路的空间阵列出口缓冲器的所述第二数据流操作的输出。所述执行所述第二数据流操作可包括:在所述多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器不可用时从所述网络数据流端点电路发送背压信号来暂缓源在所述分组交换通信网络上发送输入数据到所述网络入口缓冲器中。所述路由、执行所述第一数据流操作和执行所述第二数据流操作可包括:接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理元件的空间阵列和所述多个网络数据流端点电路中,其中每个节点被表示为所述处理元件和所述多个网络数据流端点电路的任一者中的数据流操作器;并且在传入操作对象集合到达所述处理元件和所述多个网络数据流端点电路的每个所述数据流操作器时利用所述处理元件执行所述第一数据流操作并且利用所述多个网络数据流端点电路执行所述第二数据流操作。所述方法可包括:利用所述空间阵列的电路交换网络根据所述数据流图、在处理元件之间、在所述空间阵列内传输所述数据。
在另一实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换通信网络,来根据数据流图、在处理元件之间、在所述空间阵列内路由数据以执行所述数据流图的第一数据流操作,其中所述分组交换通信网络还包括用于执行所述数据流图的第二数据流操作的装置。
在一个实施例中,一种处理器包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;多个处理元件;以及所述多个处理元件之间的互连网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件将通过相应传入操作对象集合到达所述多个处理元件的每个所述数据流操作器处而执行第二操作。所述多个处理元件中的一处理元件可在来自下游处理元件的背压信号指出所述下游处理元件中的存储装置不可用于所述处理元件的输出时暂缓执行。所述处理器可包括流控制路径网络来根据所述数据流图运载所述背压信号。数据流令牌可使得来自接收到所述数据流令牌的数据流操作器的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述第二操作可包括存储器访问,并且所述多个处理元件包括存储器访问数据流操作器,该存储器访问数据流操作器将不执行所述存储器访问,直到从逻辑上在前的数据流操作器接收到存储器依从性令牌为止。所述多个处理元件可包括第一类型的处理元件和不同的第二类型的处理元件。
在另一实施例中,一种方法包括:利用处理器的核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的多个处理元件和所述处理器的多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器;并且利用所述互连网络和所述多个处理元件通过相应传入操作对象集合到达所述多个处理元件的每个所述数据流操作器处而执行所述数据流图的第二操作。所述方法可包括:当来自下游处理元件的背压信号指出所述下游处理元件中的存储装置不可用于所述多个处理元件中的一处理元件的输出时暂缓所述处理元件的执行。所述方法可包括根据所述数据流图在流控制路径网络上发送所述背压信号。数据流令牌可使得来自接收到所述数据流令牌的数据流操作器的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可包括不执行存储器访问,直到从逻辑上在前的数据流操作器接收到存储器依从性令牌为止,其中所述第二操作包括所述存储器访问并且所述多个处理元件包括存储器访问数据流操作器。所述方法可包括提供所述多个处理元件中的第一类型的处理元件和不同的第二类型的处理元件。
在另外一个实施例中,一种装置包括:多个处理元件之间的数据路径网络;以及所述多个处理元件之间的流控制路径网络,其中所述数据路径网络和所述流控制路径网络将接收包括多个节点的数据流图的输入,所述数据流图将被覆盖到所述数据路径网络、所述流控制路径网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件将通过相应传入操作对象集合到达所述多个处理元件的每个所述数据流操作器处而执行第二操作。所述流控制路径网络可根据所述数据流图将背压信号运载到多个数据流操作器。在所述数据路径网络上发送到数据流操作器的数据流令牌可使得来自所述数据流操作器的输出在所述数据路径网络上被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述数据路径网络可以是静态的电路交换网络以根据所述数据流图将相应输入操作对象集合运载到每个所述数据流操作器。所述流控制路径网络可根据所述数据流图从下游处理元件发送背压信号以指出所述下游处理元件中的存储装置不可用于所述处理元件的输出。所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径可形成具有背压控制的通道化电路。所述流控制路径网络可将所述多个处理元件中的至少两个串联管线化。
在另一实施例中,一种方法包括:接收包括多个节点的数据流图的输入;并且将所述数据流图覆盖到处理器的多个处理元件、所述多个处理元件之间的数据路径网络和所述多个处理元件之间的流控制路径网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器。所述方法可包括利用所述流控制路径网络根据所述数据流图将背压信号运载到多个数据流操作器。所述方法可包括在所述数据路径网络上将数据流令牌发送到数据流操作器以使得来自所述数据流操作器的输出在所述数据路径网络上被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可包括设置所述数据路径网络的多个交换机和/或所述流控制路径网络的多个交换机来根据所述数据流图将相应的输入操作对象集合运载到每个所述数据流操作器,其中所述数据路径网络是静态的电路交换网络。所述方法可包括利用所述流控制路径网络根据所述数据流图从下游处理元件发送背压信号以指出所述下游处理元件中的存储装置不可用于所述处理元件的输出。所述方法可包括利用所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径形成具有背压控制的通道化电路。
在另外一个实施例中,一种处理器包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;多个处理元件;以及所述多个处理元件之间的网络装置来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述网络装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件将通过相应传入操作对象集合到达所述多个处理元件的每个所述数据流操作器处而执行第二操作。
在另一实施例中,一种装置包括:多个处理元件之间的数据路径装置;以及所述多个处理元件之间的流控制路径装置,其中所述数据路径装置和所述流控制路径装置将接收包括多个节点的数据流图的输入,所述数据流图将被覆盖到所述数据路径装置、所述流控制路径装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件将通过相应传入操作对象集合到达所述多个处理元件的每个所述数据流操作器处而执行第二操作。
在一个实施例中,一种处理器包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;以及处理元件的阵列来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的阵列中,其中每个节点被表示为所述处理元件的阵列中的数据流操作器,并且所述处理元件的阵列将在传入操作对象集合到达所述处理元件的阵列时执行第二操作。所述处理元件的阵列可不执行所述第二操作,直到所述传入操作对象集合到达所述处理元件的阵列并且所述处理元件的阵列中的存储可用于所述第二操作的输出为止。所述处理元件的阵列可包括网络(或者(一个或多个)通道)来将数据流令牌和控制令牌运载到多个数据流操作器。所述第二操作可包括存储器访问并且所述处理元件的阵列可包括存储器访问数据流操作器,该存储器访问数据流操作器将不执行所述存储器访问,直到从逻辑上在前的数据流操作器接收到存储器依从性令牌为止。每个处理元件可只执行所述数据流图的一个或两个操作。
在另一实施例中,一种方法包括:利用处理器的核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的处理元件的阵列中,其中每个节点被表示为所述处理元件的阵列中的数据流操作器;并且当传入操作对象集合到达所述处理元件的阵列时利用所述处理元件的阵列执行所述数据流图的第二操作。所述处理元件的阵列可不执行所述第二操作,直到所述传入操作对象集合到达所述处理元件的阵列并且所述处理元件的阵列中的存储可用于所述第二操作的输出为止。所述处理元件的阵列可包括将数据流令牌和控制令牌运载到多个数据流操作器的网络。所述第二操作可包括存储器访问,并且所述处理元件的阵列包括存储器访问数据流操作器,该存储器访问数据流操作器将不执行所述存储器访问,直到从逻辑上在前的数据流操作器接收到存储器依从性令牌为止。每个处理元件可只执行所述数据流图的一个或两个操作。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:利用处理器的核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的处理元件的阵列中,其中每个节点被表示为所述处理元件的阵列中的数据流操作器;并且当传入操作对象集合到达所述处理元件的阵列时利用所述处理元件的阵列执行所述数据流图的第二操作。所述处理元件的阵列可不执行所述第二操作,直到所述传入操作对象集合到达所述处理元件的阵列并且所述处理元件的阵列中的存储可用于所述第二操作的输出为止。所述处理元件的阵列可包括将数据流令牌和控制令牌运载到多个数据流操作器的网络。所述第二操作可包括存储器访问并且所述处理元件的阵列包括存储器访问数据流操作器,该存储器访问数据流操作器将不执行所述存储器访问,直到从逻辑上在前的数据流操作器接收到存储器依从性令牌为止。每个处理元件可只执行所述数据流图的一个或两个操作。
在另一实施例中,一种处理器包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;以及用于接收包括多个节点的数据流图的输入的装置,其中所述数据流图将被覆盖到所述装置中,其中每个节点被表示为所述装置中的数据流操作器,并且所述装置将在传入操作对象集合到达所述装置时执行第二操作。
在一个实施例中,一种处理器包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;多个处理元件;以及所述多个处理元件之间的互连网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件将在传入操作对象集合到达所述多个处理元件时执行第二操作。所述处理器还可包括多个配置控制器,每个配置控制器耦合到所述多个处理元件的相应子集,并且每个配置控制器将从存储加载配置信息并且根据所述配置信息引起所述多个处理元件的相应子集的耦合。所述处理器可包括多个配置缓存,并且每个配置控制器耦合到相应的配置缓存以为所述多个处理元件的相应子集取得所述配置信息。由所述执行单元执行的所述第一操作可将配置信息预取到所述多个配置缓存的每一者中。所述多个配置控制器的每一者可包括重配置电路来在从所述多个处理元件的相应子集的至少一个处理元件接收到配置差错消息时为所述至少一个处理元件引起重配置。所述多个配置控制器的每一者可包括重配置电路来在接收到重配置请求消息时为所述多个处理元件的相应子集引起重配置,并且禁止与所述多个处理元件的相应子集的通信,直到所述重配置完成为止。所述处理器可包括多个异常聚合器,并且每个异常聚合器耦合到所述多个处理元件的相应子集以从所述多个处理元件的相应子集收集异常并且将所述异常转发到所述核心以便检修。所述处理器可包括多个提取控制器,每个提取控制器耦合到所述多个处理元件的相应子集,并且每个提取控制器将使得来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另一实施例中,一种方法包括:利用处理器的核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的多个处理元件和所述处理器的多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器;并且当传入操作对象集合到达所述多个处理元件时利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述方法可包括针对所述多个处理元件的相应子集从存储加载配置信息并且根据所述配置信息为所述多个处理元件的每个相应子集引起耦合。所述方法可包括针对所述多个处理元件的相应子集从多个配置缓存中的相应配置缓存取得所述配置信息。由所述执行单元执行的所述第一操作可以是将配置信息预取到所述多个配置缓存的每一者中。所述方法可包括在从所述多个处理元件的相应子集的至少一个处理元件接收到配置差错消息时为所述至少一个处理元件引起重配置。所述方法可包括:在接收到重配置请求消息时为所述多个处理元件的相应子集引起重配置;并且禁止与所述多个处理元件的相应子集的通信,直到所述重配置完成为止。所述方法可包括:从所述多个处理元件的相应子集收集异常;并且将所述异常转发到所述核心以便检修。所述方法可包括使得来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:利用处理器的核心的解码器将指令解码成解码后指令;利用所述处理器的核心的执行单元执行所述解码后指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的多个处理元件和所述处理器的多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作器;并且当传入操作对象集合到达所述多个处理元件时利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述方法可包括针对所述多个处理元件的相应子集从存储加载配置信息并且根据所述配置信息为所述多个处理元件的每个相应子集引起耦合。所述方法可包括针对所述多个处理元件的相应子集从多个配置缓存中的相应配置缓存取得所述配置信息。由所述执行单元执行的所述第一操作可以是将配置信息预取到所述多个配置缓存的每一者中。所述方法可包括在从所述多个处理元件的相应子集的至少一个处理元件接收到配置差错消息时为所述至少一个处理元件引起重配置。所述方法可包括:在接收到重配置请求消息时为所述多个处理元件的相应子集引起重配置;并且禁止与所述多个处理元件的相应子集的通信,直到所述重配置完成为止。所述方法可包括:从所述多个处理元件的相应子集收集异常;并且将所述异常转发到所述核心以便检修。所述方法可包括使得来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另一实施例中,一种处理器包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;多个处理元件;以及所述多个处理元件之间的装置来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件将在传入操作对象集合到达所述多个处理元件时执行第二操作。
在一个实施例中,一种装置(例如,一种处理器)包括:处理元件的空间阵列,包括通信网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操作;耦合到所述处理元件的空间阵列和缓存存储器的多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述缓存存储器中的数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及转化后备缓冲器管理器电路,包括比所述多个转化后备缓冲器更高级别的转化后备缓冲器,所述转化后备缓冲器管理器电路将针对到第一转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失,来在所述缓存存储器中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述转化后备缓冲器管理器电路可与所述第一页游走同时地在所述缓存存储器中执行第二页游走,其中所述第二页游走是针对到第二转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物理地址可使得所述第一请求地址文件电路在所述缓存存储器中、在所述物理地址上、针对来自所述处理元件的空间阵列的、对所述对数据访问的请求执行数据访问。所述转化后备缓冲器管理器电路可针对所述第一转化后备缓冲器和所述更高级别转化后备缓冲器中的所述虚拟地址的输入的错失,在所述更高级别转化后备缓冲器中插入指示符以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中、在相应的转化后备缓冲器中包括所述映射的拷贝的那些请求地址文件电路发送击落消息,其中所述多个请求地址文件电路中的那些请求地址文件电路之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另一实施例中,一种方法包括:将包括多个节点的数据流图的输入覆盖到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器;将多个请求地址文件电路耦合到所述处理元件的空间阵列和缓存存储器,其中所述多个请求地址文件电路中的每个请求地址文件电路响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述缓存存储器中的数据;对于到多个转化后备缓冲器中的一转化后备缓冲器的虚拟地址的输入提供物理地址的输出,所述多个转化后备缓冲器包括所述多个请求地址文件电路的每一者中的转化后备缓冲器;将包括比所述多个转化后备缓冲器更高级别的转化后备缓冲器的转化后备缓冲器管理器电路耦合到所述多个请求地址文件电路和所述缓存存储器;并且利用所述转化后备缓冲器管理器电路针对到第一转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述缓存存储器中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述方法可包括利用所述转化后备缓冲器管理器电路与所述第一页游走同时地在所述缓存存储器中执行第二页游走,其中所述第二页游走是针对到第二转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,并且将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。所述方法可包括响应于在所述第一转化后备缓冲器中接收到所述物理地址而使得所述第一请求地址文件电路在所述缓存存储器中、在所述物理地址上、针对来自所述处理元件的空间阵列的、对所述对数据访问的请求执行数据访问。所述方法可包括利用所述转化后备缓冲器管理器电路针对所述第一转化后备缓冲器和所述更高级别转化后备缓冲器中的所述虚拟地址的输入的错失,在所述更高级别转化后备缓冲器中插入指示符以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述方法可包括利用所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中、在相应的转化后备缓冲器中包括所述映射的拷贝的那些请求地址文件电路发送击落消息,其中所述多个请求地址文件电路中的那些请求地址文件电路之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述方法可包括利用所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另一实施例中,一种装置包括:处理元件的空间阵列,所述处理元件的空间阵列包括通信网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操作;耦合到所述处理元件的空间阵列和多个缓存存储器堆的多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述多个缓存存储器堆(例如,其每一者)中的数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;多个比所述多个转化后备缓冲器更高级别的转化后备缓冲器,包括所述多个缓存存储器堆的每一者中的更高级别转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及转化后备缓冲器管理器电路,来针对到第一转化后备缓冲器中和到第一更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述多个缓存存储器堆中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述第一更高级别转化后备缓冲器中以使得所述第一更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述转化后备缓冲器管理器电路可与所述第一页游走同时地在所述多个缓存存储器堆中执行第二页游走,其中所述第二页游走是针对到第二转化后备缓冲器中和到第二更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述第二更高级别转化后备缓冲器中以使得所述第二更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物理地址可使得所述第一请求地址文件电路在所述多个缓存存储器堆中、在所述物理地址上、针对来自所述处理元件的空间阵列的、对所述对数据访问的请求执行数据访问。所述转化后备缓冲器管理器电路可针对所述第一转化后备缓冲器和所述第一更高级别转化后备缓冲器中的所述虚拟地址的输入的错失,在所述第一更高级别转化后备缓冲器中插入指示符以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中、在相应的转化后备缓冲器中包括所述映射的拷贝的那些请求地址文件电路发送击落消息,其中所述多个请求地址文件电路中的那些请求地址文件电路之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另外一个实施例中,一种方法包括:将包括多个节点的数据流图的输入覆盖到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器;将多个请求地址文件电路耦合到所述处理元件的空间阵列和多个缓存存储器堆,其中所述多个请求地址文件电路中的每个请求地址文件电路响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述多个缓存存储器堆中的数据;
对于到多个转化后备缓冲器中的一转化后备缓冲器的虚拟地址的输入提供物理地址的输出,所述多个转化后备缓冲器包括所述多个请求地址文件电路的每一者中的转化后备缓冲器;对于到多个更高级别转化后备缓冲器中的比所述多个转化后备缓冲器更高级别的转化后备缓冲器的虚拟地址的输入提供物理地址的输出,所述多个更高级别转化后备缓冲器包括所述多个缓存存储器堆的每一者中的更高级别转化后备缓冲器;将转化后备缓冲器管理器电路耦合到所述多个请求地址文件电路和所述多个缓存存储器堆;并且利用所述转化后备缓冲器管理器电路针对到第一转化后备缓冲器中和到第一更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述多个缓存存储器堆中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述第一更高级别转化后备缓冲器中以使得所述第一更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述方法可包括利用所述转化后备缓冲器管理器电路与所述第一页游走同时地在所述多个缓存存储器堆中执行第二页游走,其中所述第二页游走是针对到第二转化后备缓冲器中和到第二更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,并且将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述第二更高级别转化后备缓冲器中以使得所述第二更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。所述方法可包括响应于在所述第一转化后备缓冲器中接收到所述物理地址而使得所述第一请求地址文件电路在所述多个缓存存储器堆中、在所述物理地址上、针对来自所述处理元件的空间阵列的、对所述对数据访问的请求执行数据访问。所述方法可包括利用所述转化后备缓冲器管理器电路针对所述第一转化后备缓冲器和所述第一更高级别转化后备缓冲器中的所述虚拟地址的输入的错失,在所述第一更高级别转化后备缓冲器中插入指示符以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述方法可包括利用所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中、在相应的转化后备缓冲器中包括所述映射的拷贝的那些请求地址文件电路发送击落消息,其中所述多个请求地址文件电路中的那些请求地址文件电路之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述方法可包括利用所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另一实施例中,一种系统包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;处理元件的空间阵列,包括通信网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行第二操作;耦合到所述处理元件的空间阵列和缓存存储器的多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述缓存存储器中的数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及转化后备缓冲器管理器电路,包括比所述多个转化后备缓冲器更高级别的转化后备缓冲器,所述转化后备缓冲器管理器电路将针对到第一转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述缓存存储器中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述转化后备缓冲器管理器电路可与所述第一页游走同时地在所述缓存存储器中执行第二页游走,其中所述第二页游走是针对到第二转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物理地址可使得所述第一请求地址文件电路在所述缓存存储器中、在所述物理地址上、针对来自所述处理元件的空间阵列的、对所述对数据访问的请求执行数据访问。所述转化后备缓冲器管理器电路可针对所述第一转化后备缓冲器和所述更高级别转化后备缓冲器中的所述虚拟地址的输入的错失,在所述更高级别转化后备缓冲器中插入指示符以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中、在相应的转化后备缓冲器中包括所述映射的拷贝的那些请求地址文件电路发送击落消息,其中所述多个请求地址文件电路中的那些请求地址文件电路之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在所述更高级别转化后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另外一个实施例中,一种系统包括:核心,所述核心具有解码器来将指令解码成解码后指令并且具有执行单元来执行所述解码后指令以执行第一操作;处理元件的空间阵列,包括通信网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行第二操作;耦合到所述处理元件的空间阵列和多个缓存存储器堆的多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述多个缓存存储器堆(例如,其每一者)中的数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;多个比所述多个转化后备缓冲器更高级别的转化后备缓冲器,包括所述多个缓存存储器堆的每一者中的更高级别转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及转化后备缓冲器管理器电路,来针对到第一转化后备缓冲器中和到第一更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述多个缓存存储器堆中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述第一更高级别转化后备缓冲器中以使得所述第一更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。所述转化后备缓冲器管理器电路可与所述第一页游走同时地在所述多个缓存存储器堆中执行第二页游走,其中所述第二页游走是针对到第二转化后备缓冲器中和到第二更高级别转化后备缓冲器中的虚拟地址的输入的错失的,以确定映射到所述虚拟地址的物理地址,将来自所述第二页游走的所述虚拟地址到所述物理地址的映射存储在所述第二更高级别转化后备缓冲器中以使得所述第二更高级别转化后备缓冲器将所述物理地址发送到第二请求地址文件电路中的所述第二转化后备缓冲器。在所述第一转化后备缓冲器中接收到所述物理地址可使得所述第一请求地址文件电路在所述多个缓存存储器堆中、在所述物理地址上、针对来自所述处理元件的空间阵列的、对所述对数据访问的请求执行数据访问。所述转化后备缓冲器管理器电路可针对所述第一转化后备缓冲器和所述第一更高级别转化后备缓冲器中的所述虚拟地址的输入的错失,在所述第一更高级别转化后备缓冲器中插入指示符以防止在所述第一页游走期间对于所述虚拟地址的输入的额外页游走。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映射无效,并且仅向所述多个请求地址文件电路中、在相应的转化后备缓冲器中包括所述映射的拷贝的那些请求地址文件电路发送击落消息,其中所述多个请求地址文件电路中的那些请求地址文件电路之中的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。所述转化后备缓冲器管理器电路对于物理地址到虚拟地址的映射可从请求实体接收击落消息,在存储所述映射的更高级别转化后备缓冲器中使所述映射无效,并且向所有所述多个请求地址文件电路发送击落消息,其中所述多个请求地址文件电路的每一者将向所述转化后备缓冲器管理器电路发送确认消息,并且所述转化后备缓冲器管理器电路将在所有确认消息都被接收到时向所述请求实体发送击落完成确认消息。
在另一实施例中,一种装置(例如,一种处理器)包括:处理元件的空间阵列,包括通信网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操作;耦合到所述处理元件的空间阵列和缓存存储器的多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述缓存存储器中的数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及包括比所述多个转化后备缓冲器更高级别的转化后备缓冲器的装置,所述装置将针对到第一转化后备缓冲器中和到所述更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述缓存存储器中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述更高级别转化后备缓冲器中以使得所述更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。
在另外一个实施例中,一种装置包括:处理元件的空间阵列,所述处理元件的空间阵列包括通信网络来接收包括多个节点的数据流图的输入,其中所述数据流图将被覆盖到所述处理元件的空间阵列中,其中每个节点被表示为所述处理元件的空间阵列中的数据流操作器,并且所述处理元件的空间阵列将通过相应传入操作对象集合到达每个所述数据流操作器处而执行操作;耦合到所述处理元件的空间阵列和多个缓存存储器堆的多个请求地址文件电路,所述多个请求地址文件电路中的每个请求地址文件电路将响应于来自所述处理元件的空间阵列的、对数据访问的请求而访问所述多个缓存存储器堆(例如,其每一者)中的数据;多个转化后备缓冲器,包括所述多个请求地址文件电路的每一者中的转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;多个比所述多个转化后备缓冲器更高级别的转化后备缓冲器,包括所述多个缓存存储器堆的每一者中的更高级别转化后备缓冲器,用来为虚拟地址的输入提供物理地址的输出;以及用于进行以下操作的装置:针对到第一转化后备缓冲器中和到第一更高级别转化后备缓冲器中的虚拟地址的输入的错失,在所述多个缓存存储器堆中执行第一页游走以确定映射到所述虚拟地址的物理地址,将来自所述第一页游走的所述虚拟地址到所述物理地址的映射存储在所述第一更高级别转化后备缓冲器中以使得所述第一更高级别转化后备缓冲器将所述物理地址发送到第一请求地址文件电路中的所述第一转化后备缓冲器。
在一个实施例中,一种装置(例如,一种硬件加速器)包括:处理元件的空间阵列中的第一处理元件;所述处理元件的空间阵列中的第二处理元件;缓存;耦合到所述第一处理元件和所述缓存的第一存储器接口电路,所述第一存储器接口电路将向所述缓存发出存储器请求(例如,加载或存储),所述存储器请求包括字段来将第二存储器接口电路标识为针对所述存储器请求的数据(例如,来自缓存)的接收者;以及耦合到所述第二处理元件(例如,并且不耦合到所述第一处理元件)和所述缓存的所述第二存储器接口电路,当针对所述存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成(例如,完成缓冲器)配置寄存器被设置为远程响应值时,所述第二存储器接口电路将向所述第一存储器接口电路发送信用返回值,以使得所述第一存储器接口电路将所述存储器请求标记为完成。当针对来自所述第二存储器接口电路的第二存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成配置寄存器被设置为本地响应值时,所述第二存储器接口电路可在所述第二存储器接口电路内发送第二信用返回值以使得所述第二存储器接口电路将所述第二存储器请求标记为完成。所述第一存储器接口电路可包括接收者完成流控制寄存器,该接收者完成流控制寄存器当被设置为第一值时使得交换机从耦合到所述第二存储器接口电路的输入(例如,耦合到该输入的输入缓冲器)源发信用返回值,并且当被设置为第二值时使得所述交换机从所述第一存储器接口电路源发信用返回值。所述第一存储器接口电路可不向所述缓存发出另一存储器请求,直到所述存储器请求被标记为完成为止。所述第二存储器接口电路可在为所述存储器请求存储所述数据的所述第二存储器接口电路的完成缓冲器的槽位被所述第二处理元件读取(例如,并且排出)时发送所述信用返回值。所述存储器请求可包括(例如,第二)字段来识别所述第二存储器接口电路的完成缓冲器的槽位来为所述存储器请求存储所述数据。所述存储器请求可包括(例如,第三)字段来将所述第一存储器接口电路标识为所述存储器请求的请求者。所述第二存储器接口电路可在所述处理元件的空间阵列的电路交换网络的通道上发送所述信用返回值。
在另一实施例中,一种方法包括:从耦合到处理元件的空间阵列中的第一处理元件和缓存的第一存储器接口电路向所述缓存发出存储器请求,所述存储器请求包括字段来将第二存储器接口电路标识为针对所述存储器请求的数据的接收者;将所述第二存储器接口电路的完成配置寄存器设置为远程响应值;并且当针对所述存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成配置寄存器被设置为远程响应值时,从耦合到所述处理元件的空间阵列中的第二处理元件和所述缓存的第二存储器接口电路向所述第一存储器接口电路发送信用返回值,以使得所述第一存储器接口电路将所述存储器请求标记为完成。所述方法可包括当针对来自所述第二存储器接口电路的第二存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成配置寄存器被设置为本地响应值时,所述第二存储器接口电路在所述第二存储器接口电路内发送第二信用返回值以使得所述第二存储器接口电路将所述第二存储器请求标记为完成。所述方法可包括将所述第一存储器接口电路的接收者完成流控制寄存器设置为第一值以使得交换机从耦合到所述第二存储器接口电路的输入源发信用返回值;并且将所述第一存储器接口电路的接收者完成流控制寄存器设置为第二值以使得所述交换机从所述第一存储器接口电路源发信用返回值。所述方法可包括所述第一存储器接口电路不向所述缓存发出另一存储器请求,直到所述存储器请求被标记为完成为止。所述方法可包括将针对所述存储器请求的数据存储在所述第二存储器接口电路的完成缓冲器的槽位中,其中所述发送包括当为所述存储器请求存储所述数据的所述第二存储器接口电路的完成缓冲器的槽位被所述第二处理元件读取时,所述第二存储器接口电路发送所述信用返回值。所述存储器请求可包括第二字段来识别所述第二存储器接口电路的完成缓冲器的槽位来为所述存储器请求存储所述数据。所述存储器请求可包括第三字段来将所述第一存储器接口电路标识为所述存储器请求的请求者。所述方法可包括所述第二存储器接口电路在所述处理元件的空间阵列的电路交换网络的通道上发送所述信用返回值。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:从耦合到处理元件的空间阵列中的第一处理元件和缓存的第一存储器接口电路向所述缓存发出存储器请求,所述存储器请求包括字段来将第二存储器接口电路标识为针对所述存储器请求的数据的接收者;将所述第二存储器接口电路的完成配置寄存器设置为远程响应值;并且当针对所述存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成配置寄存器被设置为远程响应值时,从耦合到所述处理元件的空间阵列中的第二处理元件和所述缓存的第二存储器接口电路向所述第一存储器接口电路发送信用返回值,以使得所述第一存储器接口电路将所述存储器请求标记为完成。所述方法可包括当针对来自所述第二存储器接口电路的第二存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成配置寄存器被设置为本地响应值时,所述第二存储器接口电路在所述第二存储器接口电路内发送第二信用返回值以使得所述第二存储器接口电路将所述第二存储器请求标记为完成。所述方法可包括将所述第一存储器接口电路的接收者完成流控制寄存器设置为第一值以使得交换机从耦合到所述第二存储器接口电路的输入源发信用返回值;并且将所述第一存储器接口电路的接收者完成流控制寄存器设置为第二值以使得所述交换机从所述第一存储器接口电路源发信用返回值。所述方法可包括所述第一存储器接口电路不向所述缓存发出另一存储器请求,直到所述存储器请求被标记为完成为止。所述方法可包括将针对所述存储器请求的数据存储在所述第二存储器接口电路的完成缓冲器的槽位中,其中所述发送包括当为所述存储器请求存储所述数据的所述第二存储器接口电路的完成缓冲器的槽位被所述第二处理元件读取时,所述第二存储器接口电路发送所述信用返回值。所述存储器请求可包括第二字段来识别所述第二存储器接口电路的完成缓冲器的槽位来为所述存储器请求存储所述数据。所述存储器请求可包括第三字段来将所述第一存储器接口电路标识为所述存储器请求的请求者。所述方法可包括所述第二存储器接口电路在所述处理元件的空间阵列的电路交换网络的通道上发送所述信用返回值。
在另一实施例中,一种装置(例如,一种硬件加速器)包括:处理元件的空间阵列中的第一处理元件;所述处理元件的空间阵列中的第二处理元件;缓存;耦合到所述第一处理元件和所述缓存的第一装置,所述第一装置将向所述缓存发出存储器请求,所述存储器请求包括字段来将第二装置标识为针对所述存储器请求的数据的接收者;以及耦合到所述第二处理元件和所述缓存的第二装置,当针对所述存储器请求的数据到达所述第二装置处并且所述第二装置的完成配置寄存器被设置为远程响应值时,所述第二装置将向所述第一装置发送信用返回值,以使得所述第一装置将所述存储器请求标记为完成。
在另一实施例中,一种装置包括存储代码的数据存储设备,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
在另外一个实施例中,一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括本文公开的任何方法。
指令集(例如,供核心执行)可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些可具有不同的比特位置,因为包括的字段更少)和/或被定义为不同地解读给定的字段。从而,ISA的每个指令被利用给定的指令格式来表达(并且如果定义了的话,被以该指令格式的指令模板中的给定一个来表达)并且包括用于指定操作和操作对象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码和操作对象字段来选择操作对象(源1/目的地和源2);并且此ADD指令在指令流中的出现在选择特定操作对象的操作对象字段中将具有特定内容。被称为高级向量扩展(Advanced Vector Extensions,AVX)(AVX1和AVX2)并且使用向量扩展(VectorExtensions,VEX)编码方案的一组SIMD扩展已被发布和/或发表(例如,参见2016年6月发布的64和IA-32体系结构软件开发者指南以及参见2016年2月发布的体系结构指令集扩展编程参考)。
示范性指令格式
本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外,下文详述了示范性系统、体系结构和管线。(一个或多个)指令的实施例可被在这种系统、体系结构和管线上执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但替换实施例只使用向量操作向量友好指令格式。
图77A-图77B是根据本公开的实施例图示出通用向量友好指令格式及其指令模板的框图。图77A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图77B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,对于通用向量友好指令格式7700定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问7705指令模板和存储器访问7720指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下项目的本公开的实施例:64字节向量操作对象长度(或大小),具有32比特(4字节)或64比特(8字节)数据元素宽度(或大小)(从而,64字节向量包括16个双字大小元素或者8个四字大小元素);64字节向量操作对象长度(或大小),具有16比特(2字节)或8比特(1字节)数据元素宽度(或大小);32字节向量操作对象长度(或大小),具有32比特(4字节)、64比特(8字节)、16比特(2字节)或者8比特(1字节)数据元素宽度(或大小);以及16字节向量操作对象长度(或大小),具有32比特(4字节)、64比特(8字节)、16比特(2字节)或者8比特(1字节)数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。
图77A中的类别A指令模板包括:1)在无存储器访问7705指令模板内,示出了无存储器访问、完全舍入控制型操作7710指令模板和无存储器访问、数据变换型操作7715指令模板;并且2)在存储器访问7720指令模板内,示出了存储器访问、暂态7725指令模板和存储器访问、非暂态7730指令模板。图77B中的类别B指令模板包括:1)在无存储器访问7705指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作7712指令模板和无存储器访问、写入掩码控制、vsize型操作7717指令模板;并且2)在存储器访问7720指令模板内,示出了存储器访问、写入掩码控制7727指令模板。
通用向量友好指令格式7700包括下面按图77A-图77B中所示的顺序列出的以下字段。
格式字段7740–此字段中的特定值(指令格式标识符值)唯一地识别向量友好指令格式,从而识别采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集是不需要的。
基本操作字段7742–其内容区分不同的基本操作。
寄存器索引字段7744–其内容直接地或者通过地址生成指定源和目的地操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可最多达三个源和一个目的地寄存器,但替换实施例可支持更多或更少的源和目的地寄存器(例如,可支持最多达两个源,其中这些源之一也充当目的地,可支持最多达三个源,其中这些源之一也充当目的地,可支持最多达两个源和一个目的地)。
修饰字段7746–其内容区分通用向量指令格式中的指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问7705指令模板和存储器访问7720指令模板。存储器访问操作读取和/或写入到存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目的地是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段7750–其内容区分除了基本操作以外还要执行多种不同操作中的哪一种。此字段是依情境而定的。在本公开的一个实施例中,此字段被划分成类别字段7768、阿尔法(alpha)字段7752和贝塔(beta)字段7754。增强操作字段7750允许了在单个指令而不是2、3或4个指令中执行共同操作群组。
缩放比例字段7760–其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段7762A–其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段7762B(注意将位移字段7762A并列在位移因子字段7762B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+缩放的位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段7774(本文中稍后描述)和数据操纵字段7754C来确定。位移字段7762A和位移因子字段7762B是可选的,因为它们不被用于无存储器访问7705指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段7764–其内容区分若干个数据元素宽度中的哪一个将被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或利用操作码的某个方面来支持数据元素宽度则不需要它。
写入掩码字段7770–其内容基于每个数据元素位置控制目的地向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目的地中的任何元素集合被保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在其他的一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,归零向量掩码允许了目的地中的任何元素集合在任何操作(由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目的地中的元素在相应的掩码比特具有0值时被设置为0。此功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段7770允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩码字段7770的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(从而写入掩码字段7770的内容间接识别要执行的该掩蔽)的本公开实施例,但替换实施例作为替代或附加允许掩码写入字段7770的内容直接指定要执行的掩蔽。
即时字段7772–其内容允许对即时(immediate)的指定。此字段是可选的,因为在不支持即时的通用向量友好格式的实现方式中其不存在并且在不使用即时的指令中其不存在。
类别字段7768–其内容区分指令的不同类别。参考图77A-77B,此字段的内容在类别A和类别B指令之间进行选择。在图77A-77B中,圆角方形用于指示特定的值存在于一字段中(例如,图77A-77B中分别用于类别字段7768的类别A 7768A和类别B 7768B)。
类别A的指令模板
在类别A的非存储器访问7705指令模板的情况下,阿尔法字段7752被解读为RS字段7752A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作7710和无存储器访问数据变换型操作7715指令模板分别指定舍入7752A.1和数据变换7752A.2),而贝塔字段7754区分指定类型的操作中的哪一个要被执行。在无存储器访问7705指令模板中,缩放比例字段7760、位移字段7762A和位移缩放比例字段7762B不存在。
无存储器访问指令模板–完全舍入控制型操作
在无存储器访问完全舍入控制型操作7710指令模板中,贝塔字段7754被解读为舍入控制字段7754A,其(一个或多个)内容提供静态舍入。虽然在本公开的描述实施例中舍入控制字段7754A包括抑制所有浮点异常(suppress all floating point exceptions,SAE)字段7756和舍入操作控制字段7758,但替换实施例可支持可将这两个概念都编码到同一字段中或者可只具有这些概念/字段中的一者或另一者(例如,可只具有舍入操作控制字段7758)。
SAE字段7756–其内容区分是否禁用异常事件报告;当SAE字段7756的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段7758–其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段7758允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段7750的内容超越该寄存器值。
无存储器访问指令模板–数据变换型操作
在无存储器访问数据变换型操作7715指令模板中,贝塔字段7754被解读为数据变换字段7754B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配(swizzle)、广播)。
在类别A的存储器访问7720指令模板的情况下,阿尔法字段7752被解读为逐出提示字段7752B,其内容区分要使用逐出提示中的哪一个(在图77A中,对于存储器访问暂态7725指令模板和存储器访问非暂态7730指令模板分别指定暂态7752B.1和非暂态7752B.2),而贝塔字段7754被解读为数据操纵字段7754C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问7720指令模板包括缩放比例字段7760,并且可选地包括位移字段7762A或者位移缩放比例字段7762B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量掩码的内容来规定。
存储器访问指令模板–暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板–非暂态
非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提示,并且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段7752被解读为写入掩码控制(Z)字段7752C,其内容区分由写入掩码字段7770控制的写入掩蔽应当是合并还是归零。
在类别B的非存储器访问7705指令模板的情况下,贝塔字段7754的一部分被解读为RL字段7757A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作7712指令模板和无存储器访问、写入掩码控制、VSIZE型操作7717指令模板分别指定舍入7757A.1和向量长度(VSIZE)7757A.2),而贝塔字段7754的其余部分区分指定类型的操作中的哪一个要被执行。在无存储器访问7705指令模板中,缩放比例字段7760、位移字段7762A和位移缩放比例字段7762B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作7710指令模板中,贝塔字段7754的其余部分被解读为舍入操作字段7759A并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段7759A–正如舍入操作控制字段7758一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段7759A允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段7750的内容超越该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作7717指令模板中,贝塔字段7754的其余部分被解读为向量长度字段7759B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问7720指令模板的情况下,贝塔字段7754的一部分被解读为广播字段7757B,其内容区分是否要执行广播型数据操纵操作,而贝塔字段7754的其余部分被解读为向量长度字段7759B。存储器访问7720指令模板包括缩放比例字段7760,并且可选地包括位移字段7762A或者位移缩放比例字段7762B。
对于通用向量友好指令格式7700,完整操作码字段7774被示为包括格式字段7740、基本操作字段7742和数据元素宽度字段7764。虽然示出了其中完整操作码字段7774包括所有这些字段的一个实施例,但完整操作码字段7774在不支持所有这些字段的实施例中只包括这些字段中的一些。完整操作码字段7774提供操作代码(操作码)。
增强操作字段7750、数据元素宽度字段7764和写入掩码字段7770允许了在通用向量友好指令格式中基于每个指令来指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高性能通用无序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可包括多个核心,所有这些核心都支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有无序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或无序核心。当然,在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被即时编译或静态编译到)多种不同的可执行形式中,包括:1)只具有由目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有基于当前执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。
示范性特定向量友好指令格式
图78是根据本公开的实施例图示出示范性特定向量友好指令格式的框图。图78示出了在如下意义上特定的特定向量友好指令格式7800:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式7800可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。图示出了来自图78的字段所映射到的来自图77的字段。
应当理解,虽然出于说明目的在通用向量友好指令格式7700的情境中参考特定向量友好指令格式7800描述了本公开的实施例,但除非有声明,否则本公开不限于特定向量友好指令格式7800。例如,通用向量友好指令格式7700对于各种字段设想了多种可能的大小,而特定向量友好指令格式7800被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段7764在特定向量友好指令格式7800中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式7700设想了数据元素宽度字段7764的其他大小)。
通用向量友好指令格式7700包括按图78A中所示的顺序的下面列出的以下字段。
EVEX前缀(字节0-3)7802–被编码为四字节形式。
格式字段7740(EVEX字节0,比特[7:0])-第一字节(EVEX字节0)是格式字段7740并且其包含0x62(在本公开的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字段。
REX字段7805(EVEX字节1,比特[7-5])-包括EVEX.R比特字段(EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特[6]–X)和7757BEX字节1,比特[5]–B)。EVEX.R、EVEX.X和EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特编码(rrr、xxx和bbb),从而Rrrr、Xxxx和Bbbb可通过添加EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段7710–这是REX’字段7710的第一部分并且是用于对扩展32寄存器集合的高16或低16编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在本公开的一个实施例中,此比特以及如下所示的其他比特被以比特反转格式来存储以与BOUND指令相区分(在公知的x86 32比特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;本公开的替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器编码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR形成的。
操作码映射字段7815(EVEX字节1,比特[3:0]–mmmm)–其内容编码了暗示的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段7764(EVEX字节2,比特[7]–W)-由符号EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。
EVEX.vvvv 7820(EVEX字节2,比特[6:3]-vvvv)-EVEX.vvvv的作用可包括以下的:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被保留并且应当包含1111b。从而,EVEX.vvvv字段7820编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同EVEX比特字段被用于将指定符大小扩展到32寄存器。
EVEX.U 7768类别字段(EVEX字节2,比特[2]-U)–如果EVEX.U=0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B或者EVEX.U1。
前缀编码字段7825(EVEX字节2,比特[1:0]-pp)–为基本操作字段提供额外比特。除了对于采取EVEX前缀格式的传统SSE指令提供支持以外,这还具有使SIMD前缀紧缩的益处(EVEX前缀只要求2个比特,而不是要求一字节来表达SIMD前缀)。在一个实施例中,为了支持采取传统格式和采取EVEX前缀格式两者的使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时被扩展成传统SIMD前缀,然后才被提供到解码器的PLA(因此PLA可执行这些传统指令的传统和EVEX格式两者,而无需修改)。虽然更新的指令可直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性以类似的方式扩展,但允许这些传统SIMD前缀指定不同的含义。替换实施例可重设计PLA来支持2比特SIMD前缀编码,从而不要求扩展。
阿尔法字段7752(EVEX字节3,比特[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示)–如前所述,此字段是依情境而定的。
贝塔字段7754(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)–如前所述,此字段是依情境而定的。
REX'字段7710–这是REX'字段的剩余部分并且是可用于对扩展32寄存器集合的高16或低16编码的EVEX.V'比特字段(EVEX字节3,比特[3]-V')。此比特被以比特反转格式来存储。值1被用于对低16寄存器编码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写入掩码字段7770(EVEX字节3,比特[2:0]-kkk)-其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示对于特定指令没有使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。
真实操作码字段7830(字节4)也被称为操作码字节。操作码的一部分在此字段中指定。
MOD R/M字段7840(字节5)包括MOD字段7842、Reg字段7844和R/M字段7846。如前所述,MOD字段7842的内容区分存储器访问和非存储器访问操作。Reg字段7844的作用可被总结成两个情形:编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待并且不被用于编码任何指令操作对象。R/M字段7846的作用可包括以下的:编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)-如前所述,缩放比例字段5450的内容被用于存储器地址生成。SIB.xxx7854和SIB.bbb 7856–先前已对于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段7762A(字节7-10)-当MOD字段7842包含10时,字节7-10是位移字段7762A,并且其工作方式与传统32比特位移(disp32)相同并且在字节粒度上工作。
位移因子字段7762B(字节7)-当MOD字段7842包含01时,字节7是位移因子字段7762B.此字段的位置与传统x86指令集8比特位移(disp8)的相同,其在字节粒度上工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置为仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段7762B是对disp8的重解读;当使用位移因子字段7762B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来确定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段7762B代替了传统x86指令集8比特位移。从而,位移因子字段7762B被按与x86指令集8比特位移相同的方式编码(因此在ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节地址偏移量)。即时字段7772如前所述那样操作。
完整操作码字段
图78B是根据本公开的一个实施例图示出构成完整操作码字段7774的特定向量友好指令格式7800的字段的框图。具体而言,完整操作码字段7774包括格式字段7740、基本操作字段7742和数据元素宽度(W)字段7764。基本操作字段7742包括前缀编码字段7825、操作码映射字段7815和真实操作码字段7830。
寄存器索引字段
图78C是根据本公开的一个实施例图示出构成寄存器索引字段7744的特定向量友好指令格式7800的字段的框图。具体而言,寄存器索引字段7744包括REX字段7805、REX'字段7810、MODR/M.reg字段7844、MODR/M.r/m字段7846、VVVV字段7820、xxx字段7854和bbb字段7856。
增强操作字段
图78D是根据本公开的一个实施例图示出构成增强操作字段7750的特定向量友好指令格式7800的字段的框图。当类别(U)字段7768包含0时,其表示EVEX.U0(类别A 7768A);当其包含1时,其表示EVEX.U1(类别B 7768B)。当U=0并且MOD字段7842包含11时(表示无存储器访问操作),阿尔法字段7752(EVEX字节3,比特[7]–EH)被解读为rs字段7752A。当rs字段7752A包含1时(舍入7752A.1),贝塔字段7754(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段7754A。舍入控制字段7754A包括一比特SAE字段7756和两比特舍入操作字段7758。当rs字段7752A包含0时(数据变换7752A.2),贝塔字段7754(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段7754B。当U=0并且MOD字段7842包含00、01或10时(表示存储器访问操作),阿尔法字段7752(EVEX字节3,比特[7]–EH)被解读为逐出提示(eviction hint,EH)字段7752B并且贝塔字段7754(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据操纵字段7754C。
当U=1时,阿尔法字段7752(EVEX字节3,比特[7]–EH)被解读为写入掩码控制(Z)字段7752C。当U=1并且MOD字段7842包含11时(表示无存储器访问操作),贝塔字段7754的一部分(EVEX字节3,比特[4]–S0)被解读为RL字段7757A;当其包含1(舍入7757A.1)时,贝塔字段7754的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操作字段7759A,而当RL字段7757A包含0(VSIZE 7757.A2)时,贝塔字段7754的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字段7759B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段7842包含00、01或10时(表示存储器访问操作),贝塔字段7754(EVEX字节3,比特[6:4]-SSS)被解读为向量长度字段7759B(EVEX字节3,比特[6-5]-L1-0)和广播字段7757B(EVEX字节3,比特[4]-B)。
示范性寄存器体系结构
图79是根据本公开的一个实施例的寄存器体系结构7900的框图。在图示的实施例中,存在32个512比特宽的向量寄存器7910;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式7800如以下表格中所示在这些覆盖的寄存器文件上操作。
换言之,向量长度字段7759B在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量长度字段7759B的指令模板在最大向量长度上操作。另外,在一个实施例中,特定向量友好指令格式7800的类别B指令模板对紧缩或标量单/双精度浮点数据和紧缩或标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器7915–在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器7915的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xFFFF,实际上对于该指令禁用了写入掩蔽。
通用寄存器7925–在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来引用。
标量浮点栈寄存器文件(x87栈)7945,其上化名了MMX紧缩整数平坦寄存器文件7950–在图示的实施例中,x87栈是用于利用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素栈;而MMX寄存器被用于在64比特紧缩整数数据上执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作对象。
本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。
示范性核心体系结构、处理器和计算机体系结构
处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用无序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一晶粒上包括描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和无序核心框图
图80A是根据本公开的实施例图示出示范性有序管线和示范性寄存器重命名、无序发出/执行管线两者的框图。图80B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、无序发出/执行体系结构核心两者的框图。图80A-80B中的实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存器重命名、无序发出/执行管线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。
在图80A中,处理器管线8000包括取得阶段8002、长度解码阶段8004、解码阶段8006、分配阶段8008、重命名阶段8010、调度(也称为调遣或发出)阶段8012、寄存器读取/存储器读取阶段8014、执行阶段8016、写回/存储器写入阶段8018、异常处理阶段8022和提交阶段8024。
图80B示出了处理器核心8090包括耦合到执行引擎单元8050的前端单元8030,并且两者都耦合到存储器单元8070。核心8090可以是精简指令集计算(reduced instructionset computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心或者混合或替换核心类型。作为另外一个选项,核心8090可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processingunit,GPGPU)核心、图形核心,等等。
前端单元8030包括分支预测单元8032,其耦合到指令缓存单元8034,指令缓存单元8034耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)8036,该TLB8036耦合到指令取得单元8038,该指令取得单元8038耦合到解码单元8040。解码单元8040(或者解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元8040可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心8090包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元8040中或者以其他方式在前端单元8030内)。解码单元8040耦合到执行引擎单元8050中的重命名/分配器单元8052。
执行引擎单元8050包括耦合到引退单元8054和一组一个或多个调度器单元8056的重命名/分配器单元8052。(一个或多个)调度器单元8056表示任何数目的不同调度器,包括保留站、中央指令窗口等等。(一个或多个)调度器单元8056耦合到(一个或多个)物理寄存器文件单元8058。物理寄存器文件单元8058的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元8058包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元8058与引退单元8054重叠以例示出可用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射图和寄存器的池;等等)。引退单元8054和(一个或多个)物理寄存器文件单元8058耦合到(一个或多个)执行集群8060。(一个或多个)执行集群8060包括一组一个或多个执行单元8062和一组一个或多个存储器访问单元8064。执行单元8062可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个)调度器单元8056、(一个或多个)物理寄存器文件单元8058和(一个或多个)执行集群8060被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元8064)。还应当理解,在使用分开管线的情况下,这些管线中的一个或多个可以是无序发出/执行,其余的是有序的。
存储器访问单元8064的集合耦合到存储器单元8070,存储器单元8070包括数据TLB单元8072,数据TLB单元8072耦合到数据缓存单元8074,数据缓存单元8074耦合到第2级(L2)缓存单元8076。在一个示范性实施例中,存储器访问单元8064可包括加载单元、存储地址单元和存储数据单元,其中每一者耦合到存储器单元8070中的数据TLB单元8072。指令缓存单元8034进一步耦合到存储器单元8070中的第2级(L2)缓存单元8076。L2缓存单元8076耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、无序发出/执行核心体系结构可实现管线8000如下:1)指令取得8038执行取得和长度解码阶段8002和8004;2)解码单元8040执行解码阶段8006;3)重命名/分配器单元8052执行分配阶段8008和重命名阶段8010;4)(一个或多个)调度器单元8056执行调度阶段8012;5)(一个或多个)物理寄存器文件单元8058和存储器单元8070执行寄存器读取/存储器读取阶段8014;执行集群8060执行执行阶段8016;6)存储器单元8070和(一个或多个)物理寄存器文件单元8058执行写回/存储器写入阶段8018;7)在异常处理阶段8022中可涉及各种单元;并且8)引退单元8054和(一个或多个)物理寄存器文件单元8058执行提交阶段8024。
核心8090可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心8090包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyperthreading技术中那样)。
虽然寄存器重命名是在无序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元8034/8074和共享的L2缓存单元8076,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
具体示范性有序核心体系结构
图81A-图81B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。
图81A是根据本公开的实施例的单个处理器核心及其与片上互连网络8102以及与第2级(L2)缓存8104的其本地子集的连接的框图。在一个实施例中,指令解码单元8100支持具有紧缩数据指令集扩展的x86指令集。L1缓存8106允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元8108和向量单元8110使用分开的寄存器集合(分别是标量寄存器8112和向量寄存器8114)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存8106读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集8104是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集8104的直接访问路径。处理器核心读取的数据被存储在其L2缓存子集8104中并且可被迅速访问,与其他处理器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储在其自己的L2缓存子集8104中并且在必要时被从其他子集冲出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、hf缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每个方向上是1012比特宽的。
图81B是根据本公开的实施例的图81A中的处理器核心的一部分的扩展视图。图81B包括L1缓存8104的L1数据缓存8106A部分,以及关于向量单元8110和向量寄存器8114的更多细节。具体而言,向量单元8110是16宽向量处理单元(vector processing unit,VPU)(参见16宽ALU 8128),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元8120调配寄存器输入,利用数值转换单元8122A-B进行的数值转换,以及利用复制单元8124对存储器输入的复制。写入掩码寄存器8126允许断言结果向量写入。
图82是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器8200的框图。图82中的实线框图示了具有单个核心8202A、系统代理8210和一组一个或多个总线控制器单元8216的处理器8200,而虚线框的可选添加图示了具有多个核心8202A-N、系统代理单元8210中的一组一个或多个集成存储器控制单元8214和专用逻辑8208的替换处理器8200。
从而,处理器8200的不同实现方式可包括:1)其中专用逻辑8208是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心8202A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心或者两者的组合)的CPU;2)其中核心8202A-N是主要打算用于图形和/或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心8202A-N是大量的通用有序核心的协处理器。从而,处理器8200可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器,等等。处理器可实现在一个或多个芯片上。处理器8200可以是一个或多个基片的一部分和/或利用若干个工艺技术中的任何一者实现在一个或多个基片上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元8206以及耦合到该组集成存储器控制器单元8214的外部存储器(未示出)。该组共享缓存单元8206可包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元8212互连集成图形逻辑8208、该组共享缓存单元8206和系统代理单元8210/(一个或多个)集成存储器控制器单元8214,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元8206和核心8202A-N之间维持一致性。
在一些实施例中,核心8202A-N中的一个或多个能够进行多线程处理。系统代理8210包括协调和操作核心8202A-N的那些组件。系统代理单元8210可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括调控核心8202A-N和集成图形逻辑8208的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心8202A-N就体系结构指令集而言可以是同质的或者异质的;也就是说,核心8202A-N中的两个或更多个可能够执行同一指令集,而其他的可只能够执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图83-图86是示范性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的许多种系统或电子设备一般是适当的。
现在参考图83,其中示出了根据本公开的一个实施例的系统8300的框图。系统8300可包括一个或多个处理器8310、8315,它们耦合到控制器中心8320。在一个实施例中,控制器中心8320包括图形存储器控制器中心(graphics memory controller hub,GMCH)8390和输入/输出中心(Input/Output Hub,IOH)8350(它们可在分开的芯片上);GMCH 8390包括与存储器8340和协处理器8345耦合的存储器和图形控制器;IOH8350将输入/输出(I/O)设备8360耦合到GMCH 8390。或者,存储器和图形控制器的一者或两者被集成在处理器内(如本文所述),存储器8340和协处理器8345直接耦合到处理器8310,并且控制器中心8320与IOH8350在单个芯片中。存储器8340例如可包括编译器模块8340A,以存储代码,该代码当被执行时使得一个或多个执行本公开的任何方法。
额外的处理器8315的可选性在图83中用虚线表示。每个处理器8310、8315可包括本文描述的处理核心中的一个或多个并且可以是处理器8200的某个版本。
存储器8340可例如是动态随机访问存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者的组合。对于至少一个实施例,控制器中心8320经由多点分支总线(multi-drop bus)(例如前端总线(frontside bus,FSB))、点到点接口(例如QuickPath互连(QuickPath Interconnect,QPI))或者类似的连接8395与(一个或多个)处理器8310、8315通信。
在一个实施例中,协处理器8345是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中心8320可包括集成的图形加速器。
在物理资源8310、8315之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。
在一个实施例中,处理器8310执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器8310将这些协处理器指令标识为应当由附接的协处理器8345执行的类型。因此,处理器8310在协处理器总线或其他互连上向协处理器8345发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器8345接受和执行接收到的协处理器指令。
现在参考图84,其中示出了根据本公开的实施例的第一更具体示范性系统8400的框图。如图84中所示,多处理器系统8400是点到点互连系统,并且包括经由点到点互连8450耦合的第一处理器8470和第二处理器8480。处理器8470和8480的每一者可以是处理器8200的某个版本。在本公开的一个实施例中,处理器8470和8480分别是处理器8310和8315,而协处理器8438是协处理器8345。在另一实施例中,处理器8470和8480分别是处理器8310和协处理器8345。
处理器8470和8480被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元8472和8482。处理器8470还包括点到点(P-P)接口8476和8478作为其总线控制器单元的一部分;类似地,第二处理器8480包括P-P接口8486和8488。处理器8470、8480可利用P-P接口电路8478、8488经由点到点(P-P)接口8450交换信息。如图84中所示,IMC 8472和8482将处理器耦合到各自的存储器,即存储器8432和存储器8434,存储器8432和存储器8434可以是在本地附接到各个处理器的主存储器的一部分。
处理器8470、8480可各自利用点到点接口电路8476、8494、8486、8498经由个体P-P接口8452、8454与芯片集8490交换信息。芯片集8490可以可选地经由高性能接口8439与协处理器8438交换信息。在一个实施例中,协处理器8438是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片集8490可经由接口8496耦合到第一总线8416。在一个实施例中,第一总线8416可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本公开的范围不限于此。
如图84中所示,各种I/O设备8414可耦合到第一总线8416,以及将第一总线8416耦合到第二总线8420的总线桥8418。在一个实施例中,一个或多个额外的处理器8415,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线8416。在一个实施例中,第二总线8420可以是低引脚数(low pin count,LPC)总线。各种设备可耦合到第二总线8420,例如包括键盘和/或鼠标8422、通信设备8427和存储单元8428,例如盘驱动器或者其他大容量存储设备,它们在一个实施例中可包括指令/代码和数据8430。另外,音频I/O 8424可耦合到第二总线8420。注意其他体系结构是可能的。例如,取代图84的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。
现在参考图85,其中示出了根据本公开的实施例的第二更具体示范性系统8500的框图。图84和图85中的相似元素带有相似的标号,并且图84的某些方面被从图85中省略以避免模糊图85的其他方面。
图85图示出处理器8470、8480可分别包括集成存储器和I/O控制逻辑(“CL”)8472和8482。从而,CL 8472、8482包括集成存储器控制器单元并且包括I/O控制逻辑。图85图示出不仅存储器8432、8434耦合到CL 8472、8482,而且I/O设备8514也耦合到控制逻辑8472、8482。传统I/O设备8515耦合到芯片集8490。
现在参考图86,其中示出了根据本公开的实施例的SoC 8600的框图。图82中的相似元素带有相似的标号。另外,虚线框是更高级SoC上的可选特征。在图86中,(一个或多个)互连单元8602耦合到:应用处理器8610,其包括一组一个或多个核心202A-N,和(一个或多个)共享缓存单元8206;系统代理单元8210;(一个或多个)总线控制器单元8216;(一个或多个)集成存储器控制器单元8214;一组或一个或多个协处理器8620,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(static random accessmemory,SRAM)单元8630;直接存储器访问(direct memory access,DMA)单元8632;以及显示单元8640,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器8620包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的(例如,机制的)实施例可以用硬件、软件、固件或者这种实现方案的组合来实现。本公开的实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码,例如图84中所示的代码8430,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digital signalprocessor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或者微处理器。
程序代码可以用高级过程式或面向对象的编程语言实现来与处理系统通信。如果希望,程序代码也可以用汇编或机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令实现,该逻辑当被机器读取时使得该机器制造逻辑来执行本文描述的技术。这种被称为“IP核”的表示可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制造机器中。
这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compact diskrewritable,CD-RW)和磁光盘,半导体设备,例如只读存储器(read-only memory,ROM),随机访问存储器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或以其他方式转换到要被核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者一部分在处理器上一部分在处理器外。
图87是根据本公开的实施例对使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令进行对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,指令转换器可以用软件、固件、硬件或者其各种组合来实现。图87示出了高级别语言8702的程序可被利用x86编译器8704来编译以生成x86二进制代码8706,x86二进制代码8706可由具有至少一个x86指令集核心8716的处理器原生执行。具有至少一个x86指令集核心8716的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)英特尔x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本来执行与具有至少一个x86指令集核心的英特尔处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的英特尔处理器基本上相同的结果。x86编译器8704表示可操作来生成x86二进制代码8706(例如,目标代码)的编译器,x86二进制代码8706在带有或不带有额外的链接处理的情况下可被在具有至少一个x86指令集核心的处理器8716上执行。类似地,图87示出了高级别语言8702的程序可被利用替换指令集编译器8708来编译以生成替换指令集二进制代码8710,替换指令集二进制代码8710可由没有至少一个x86指令集核心的处理器8714(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器8712用于将x86二进制代码8706转换成可由没有x86指令集核心的处理器8714原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码8710相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器8712表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码8706的软件、固件、硬件或者其组合。
Claims (25)
1.一种装置,包括:
处理元件的空间阵列中的第一处理元件;
所述处理元件的空间阵列中的第二处理元件;
缓存;
第一存储器接口电路,所述第一存储器接口电路耦合到所述第一处理元件和所述缓存,所述第一存储器接口电路用于向所述缓存发出存储器请求,所述存储器请求包括字段,所述字段用于将第二存储器接口电路标识为针对所述存储器请求的数据的接收者;以及
所述第二存储器接口电路,所述第二存储器接口电路耦合到所述第二处理元件和所述缓存,所述第二存储器接口电路用于:当针对所述存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的完成配置寄存器被设置为远程响应值时,向所述第一存储器接口电路发送信用返回值,以使得所述第一存储器接口电路将所述存储器请求标记为完成。
2.如权利要求1所述的装置,其中,所述第二存储器接口电路用于:当针对来自所述第二存储器接口电路的第二存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的所述完成配置寄存器被设置为本地响应值时,在所述第二存储器接口电路内发送第二信用返回值以使得所述第二存储器接口电路将所述第二存储器请求标记为完成。
3.如权利要求1所述的装置,其中所述第一存储器接口电路包括接收者完成流控制寄存器,该接收者完成流控制寄存器当被设置为第一值时,使得交换机从耦合到所述第二存储器接口电路的输入源发信用返回值,并且该接收者完成流控制寄存器当被设置为第二值时,使得所述交换机从所述第一存储器接口电路源发信用返回值。
4.如权利要求1所述的装置,其中所述第一存储器接口电路用于:在所述存储器请求被标记为完成之前,不向所述缓存发出另一存储器请求。
5.如权利要求1所述的装置,其中所述第二存储器接口电路用于:在存储针对所述存储器请求的数据的、所述第二存储器接口电路的完成缓冲器的槽位被所述第二处理元件读取时,发送所述信用返回值。
6.如权利要求1所述的装置,其中所述存储器请求包括第二字段,所述第二字段用于标识所述第二存储器接口电路的完成缓冲器的槽位以存储针对所述存储器请求的数据。
7.如权利要求6所述的装置,其中所述存储器请求包括第三字段,所述第三字段用于将所述第一存储器接口电路标识为所述存储器请求的请求者。
8.如权利要求1-7中任何一项所述的装置,其中所述第二存储器接口电路用于:在所述处理元件的空间阵列的电路交换网络的通道上发送所述信用返回值。
9.一种方法,包括:
从第一存储器接口电路向缓存发出存储器请求,所述第一存储器接口电路耦合到处理元件的空间阵列中的第一处理元件和所述缓存,所述存储器请求包括字段,所述字段用于将第二存储器接口电路标识为针对所述存储器请求的数据的接收者;
将所述第二存储器接口电路的完成配置寄存器设置为远程响应值;并且
当针对所述存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的所述完成配置寄存器被设置为所述远程响应值时,从所述第二存储器接口电路向所述第一存储器接口电路发送信用返回值,以使得所述第一存储器接口电路将所述存储器请求标记为完成,所述第二存储器接口电路耦合到所述处理元件的空间阵列中的第二处理元件和所述缓存。
10.如权利要求9所述的方法,还包括:当针对来自所述第二存储器接口电路的第二存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的所述完成配置寄存器被设置为本地响应值时,所述第二存储器接口电路在所述第二存储器接口电路内发送第二信用返回值以使得所述第二存储器接口电路将所述第二存储器请求标记为完成。
11.如权利要求9所述的方法,还包括:
将所述第一存储器接口电路的接收者完成流控制寄存器设置为第一值,以使得交换机从耦合到所述第二存储器接口电路的输入源发信用返回值;并且
将所述第一存储器接口电路的所述接收者完成流控制寄存器设置为第二值,以使得所述交换机从所述第一存储器接口电路源发信用返回值。
12.如权利要求9所述的方法,还包括:在所述存储器请求被标记为完成之前,所述第一存储器接口电路不向所述缓存发出另一存储器请求。
13.如权利要求9所述的方法,还包括将针对所述存储器请求的数据存储在所述第二存储器接口电路的完成缓冲器的槽位中,其中所述发送包括:当存储针对所述存储器请求的数据的、所述第二存储器接口电路的所述完成缓冲器的所述槽位被所述第二处理元件读取时,所述第二存储器接口电路发送所述信用返回值。
14.如权利要求9所述的方法,其中所述存储器请求包括第二字段,所述第二字段用于标识所述第二存储器接口电路的完成缓冲器的槽位以存储针对所述存储器请求的数据。
15.如权利要求14所述的方法,其中所述存储器请求包括第三字段,所述第三字段用于将所述第一存储器接口电路标识为所述存储器请求的请求者。
16.如权利要求9-15中任何一项所述的方法,还包括:所述第二存储器接口电路在所述处理元件的空间阵列的电路交换网络的通道上发送所述信用返回值。
17.一种存储代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:
从第一存储器接口电路向缓存发出存储器请求,所述第一存储器接口电路耦合到处理元件的空间阵列中的第一处理元件和所述缓存,所述存储器请求包括字段,该字段用于将第二存储器接口电路标识为针对所述存储器请求的数据的接收者;
将所述第二存储器接口电路的完成配置寄存器设置为远程响应值;并且
当针对所述存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的所述完成配置寄存器被设置为所述远程响应值时,从所述第二存储器接口电路向所述第一存储器接口电路发送信用返回值,以使得所述第一存储器接口电路将所述存储器请求标记为完成,所述第二存储器接口电路耦合到所述处理元件的空间阵列中的第二处理元件和所述缓存。
18.如权利要求17所述的非暂态机器可读介质,还包括:当针对来自所述第二存储器接口电路的第二存储器请求的数据到达所述第二存储器接口电路处并且所述第二存储器接口电路的所述完成配置寄存器被设置为本地响应值时,所述第二存储器接口电路在所述第二存储器接口电路内发送第二信用返回值,以使得所述第二存储器接口电路将所述第二存储器请求标记为完成。
19.如权利要求17所述的非暂态机器可读介质,还包括:
将所述第一存储器接口电路的接收者完成流控制寄存器设置为第一值,以使得交换机从耦合到所述第二存储器接口电路的输入源发信用返回值;并且
将所述第一存储器接口电路的所述接收者完成流控制寄存器设置为第二值,以使得所述交换机从所述第一存储器接口电路源发信用返回值。
20.如权利要求17所述的非暂态机器可读介质,还包括:在所述存储器请求被标记为完成之前,所述第一存储器接口电路不向所述缓存发出另一存储器请求。
21.如权利要求17所述的非暂态机器可读介质,还包括将针对所述存储器请求的数据存储在所述第二存储器接口电路的完成缓冲器的槽位中,其中所述发送包括:当存储针对所述存储器请求的数据的、所述第二存储器接口电路的所述完成缓冲器的所述槽位被所述第二处理元件读取时,所述第二存储器接口电路发送所述信用返回值。
22.如权利要求17所述的非暂态机器可读介质,其中所述存储器请求包括第二字段,所述第二字段用于标识所述第二存储器接口电路的完成缓冲器的槽位以存储针对所述存储器请求的数据。
23.如权利要求22所述的非暂态机器可读介质,其中所述存储器请求包括第三字段,所述第三字段用于将所述第一存储器接口电路标识为所述存储器请求的请求者。
24.如权利要求17-23中任何一项所述的非暂态机器可读介质,还包括:所述第二存储器接口电路在所述处理元件的空间阵列的电路交换网络的通道上发送所述信用返回值。
25.一种设备,包括:
处理元件的空间阵列中的第一处理元件;
所述处理元件的空间阵列中的第二处理元件;
缓存;
第一装置,所述第一装置耦合到所述第一处理元件和所述缓存,所述第一装置用于向所述缓存发出存储器请求,所述存储器请求包括字段,该字段用于将第二装置标识为针对所述存储器请求的数据的接收者;以及
所述第二装置,所述第二装置耦合到所述第二处理元件和所述缓存,所述第二装置用于:当针对所述存储器请求的数据到达所述第二装置处并且所述第二装置的完成配置寄存器被设置为远程响应值时,向所述第一装置发送信用返回值,以使得所述第一装置将所述存储器请求标记为完成。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/943,608 US20190303297A1 (en) | 2018-04-02 | 2018-04-02 | Apparatus, methods, and systems for remote memory access in a configurable spatial accelerator |
US15/943,608 | 2018-04-02 | ||
PCT/US2019/020270 WO2019194916A1 (en) | 2018-04-02 | 2019-03-01 | Apparatuses, methods, and systems for remote memory access in a configurable spatial accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111868702A true CN111868702A (zh) | 2020-10-30 |
Family
ID=68056298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980020304.5A Pending CN111868702A (zh) | 2018-04-02 | 2019-03-01 | 用于可配置空间加速器中的远程存储器访问的装置、方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20190303297A1 (zh) |
EP (1) | EP3776229A1 (zh) |
CN (1) | CN111868702A (zh) |
WO (1) | WO2019194916A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112541310A (zh) * | 2020-12-18 | 2021-03-23 | 广东高云半导体科技股份有限公司 | 逻辑综合控制方法及装置 |
Families Citing this family (50)
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 |
US11182315B2 (en) * | 2017-02-10 | 2021-11-23 | Intel Corporation | Apparatuses, methods, and systems for hardware control of processor performance levels |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | 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 |
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 |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
JP7046171B2 (ja) * | 2018-05-15 | 2022-04-01 | 三菱電機株式会社 | 演算装置 |
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 |
US11663312B2 (en) * | 2018-09-14 | 2023-05-30 | International Business Machines Corporation | Accelerator access control |
US11188497B2 (en) | 2018-11-21 | 2021-11-30 | SambaNova Systems, Inc. | Configuration unload of a reconfigurable data processor |
US10831507B2 (en) | 2018-11-21 | 2020-11-10 | SambaNova Systems, Inc. | Configuration load of a reconfigurable data processor |
US10761822B1 (en) * | 2018-12-12 | 2020-09-01 | Amazon Technologies, Inc. | Synchronization of computation engines with non-blocking instructions |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
US10698853B1 (en) | 2019-01-03 | 2020-06-30 | SambaNova Systems, Inc. | Virtualization of a reconfigurable data processor |
US10768899B2 (en) | 2019-01-29 | 2020-09-08 | SambaNova Systems, Inc. | Matrix normal/transpose read and a reconfigurable data processor including same |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11386038B2 (en) | 2019-05-09 | 2022-07-12 | SambaNova Systems, Inc. | Control flow barrier and reconfigurable data processor |
US11461127B2 (en) * | 2019-05-24 | 2022-10-04 | Texas Instruments Incorporated | Pipeline arbitration |
US11392498B2 (en) | 2019-05-24 | 2022-07-19 | Texas Instruments Incorporated | Aliased mode for cache controller |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11055141B2 (en) | 2019-07-08 | 2021-07-06 | SambaNova Systems, Inc. | Quiesce reconfigurable data processor |
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 |
US11443713B2 (en) | 2020-01-30 | 2022-09-13 | Apple Inc. | Billboard for context information sharing |
US11669473B2 (en) * | 2020-06-26 | 2023-06-06 | Advanced Micro Devices, Inc. | Allreduce enhanced direct memory access functionality |
CN111651378B (zh) * | 2020-07-06 | 2023-09-19 | Oppo广东移动通信有限公司 | 一种数据存储方法、SoC芯片及计算机设备 |
US11809908B2 (en) | 2020-07-07 | 2023-11-07 | SambaNova Systems, Inc. | Runtime virtualization of reconfigurable data flow resources |
US11782729B2 (en) | 2020-08-18 | 2023-10-10 | SambaNova Systems, Inc. | Runtime patching of configuration files |
US11467992B1 (en) | 2020-09-24 | 2022-10-11 | Amazon Technologies, Inc. | Memory access operation in distributed computing system |
US11409685B1 (en) * | 2020-09-24 | 2022-08-09 | Amazon Technologies, Inc. | Data synchronization operation at distributed computing system |
US20220100680A1 (en) * | 2020-09-26 | 2022-03-31 | Intel Corporation | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits |
US11354258B1 (en) | 2020-09-30 | 2022-06-07 | Amazon Technologies, Inc. | Control plane operation at distributed computing system |
US11443479B1 (en) | 2021-05-19 | 2022-09-13 | Apple Inc. | Snapshot arbitration techniques for memory requests |
US11556494B1 (en) | 2021-07-16 | 2023-01-17 | SambaNova Systems, Inc. | Defect repair for a reconfigurable data processor for homogeneous subarrays |
US11409540B1 (en) | 2021-07-16 | 2022-08-09 | SambaNova Systems, Inc. | Routing circuits for defect repair for a reconfigurable data processor |
US11327771B1 (en) | 2021-07-16 | 2022-05-10 | SambaNova Systems, Inc. | Defect repair circuits for a reconfigurable data processor |
US11989142B2 (en) | 2021-12-10 | 2024-05-21 | Samsung Electronics Co., Ltd. | Efficient and concurrent model execution |
US11487694B1 (en) | 2021-12-17 | 2022-11-01 | SambaNova Systems, Inc. | Hot-plug events in a pool of reconfigurable data flow resources |
US20230195478A1 (en) * | 2021-12-21 | 2023-06-22 | SambaNova Systems, Inc. | Access To Intermediate Values In A Dataflow Computation |
US20230289444A1 (en) * | 2022-03-14 | 2023-09-14 | Microsoft Technology Licensing, Llc | Data traffic characterization prioritization |
US20240037151A1 (en) * | 2022-07-28 | 2024-02-01 | Oxla sp. z o.o. | Channel based flow control of data during execution of database queries |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6295571B1 (en) * | 1999-03-19 | 2001-09-25 | Times N Systems, Inc. | Shared memory apparatus and method for multiprocessor systems |
EP1181648A1 (en) * | 1999-04-09 | 2002-02-27 | Clearspeed Technology Limited | Parallel data processing apparatus |
US7047370B1 (en) * | 2003-01-14 | 2006-05-16 | Cisco Technology, Inc. | Full access to memory interfaces via remote request |
US7136954B2 (en) * | 2005-01-31 | 2006-11-14 | International Business Machines Corporation | Data communication method and apparatus utilizing credit-based data transfer protocol and credit loss detection mechanism |
WO2009035185A1 (en) * | 2007-09-11 | 2009-03-19 | Core Logic Inc. | Reconfigurable array processor for floating-point operations |
US20100191911A1 (en) * | 2008-12-23 | 2010-07-29 | Marco Heddes | System-On-A-Chip Having an Array of Programmable Processing Elements Linked By an On-Chip Network with Distributed On-Chip Shared Memory and External Shared Memory |
-
2018
- 2018-04-02 US US15/943,608 patent/US20190303297A1/en not_active Abandoned
-
2019
- 2019-03-01 WO PCT/US2019/020270 patent/WO2019194916A1/en unknown
- 2019-03-01 EP EP19781525.1A patent/EP3776229A1/en not_active Withdrawn
- 2019-03-01 CN CN201980020304.5A patent/CN111868702A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112541310A (zh) * | 2020-12-18 | 2021-03-23 | 广东高云半导体科技股份有限公司 | 逻辑综合控制方法及装置 |
CN112541310B (zh) * | 2020-12-18 | 2021-10-29 | 广东高云半导体科技股份有限公司 | 逻辑综合控制方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20190303297A1 (en) | 2019-10-03 |
WO2019194916A1 (en) | 2019-10-10 |
EP3776229A1 (en) | 2021-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10445250B2 (en) | Apparatus, methods, and systems with a configurable spatial accelerator | |
US11307873B2 (en) | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging | |
CN111868702A (zh) | 用于可配置空间加速器中的远程存储器访问的装置、方法和系统 | |
US10417175B2 (en) | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator | |
US10565134B2 (en) | Apparatus, methods, and systems for multicast in a configurable spatial accelerator | |
CN109215728B (zh) | 用于分布式存储器危险检测和错误恢复的存储器电路和方法 | |
US10915471B2 (en) | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator | |
US10380063B2 (en) | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator | |
US10387319B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features | |
US10891240B2 (en) | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator | |
US10515046B2 (en) | Processors, methods, and systems with a configurable spatial accelerator | |
US10445234B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features | |
US20190303263A1 (en) | Apparatus, methods, and systems for integrated performance monitoring in a configurable spatial accelerator | |
US11029958B1 (en) | Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator | |
US10459866B1 (en) | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator | |
CN111767080A (zh) | 用于可配置空间加速器中的操作的设备、方法和系统 | |
US10853073B2 (en) | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator | |
US10678724B1 (en) | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator | |
US20220100680A1 (en) | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits | |
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 |