CN109213723A - 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统 - Google Patents

用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统 Download PDF

Info

Publication number
CN109213723A
CN109213723A CN201810696290.6A CN201810696290A CN109213723A CN 109213723 A CN109213723 A CN 109213723A CN 201810696290 A CN201810696290 A CN 201810696290A CN 109213723 A CN109213723 A CN 109213723A
Authority
CN
China
Prior art keywords
data flow
processing element
multiple processing
program
csa
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201810696290.6A
Other languages
English (en)
Inventor
M.C.阿德勒
K.弗莱明
K.D.格洛索普
S.C.小斯蒂利
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN109213723A publication Critical patent/CN109213723A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/629Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/81Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer by operating on the power supply, e.g. enabling or disabling power-on, sleep or resume operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Advance Control (AREA)

Abstract

描述了与可配置空间加速器有关的系统、方法和设备。在一个实施例中,一种处理器包括:多个处理元件;以及所述多个处理元件之间的互连网络,其用于接收各自包括多个节点的两个数据流图的输入,其中,第一数据流图和第二数据流图将被叠加到分别为所述互连网络的第一部分和第二部分以及分别为所述多个处理元件的第一子集和第二子集中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件的所述第一子集和所述第二子集将在传入第一操作数集和传入第二操作数集分别到达所述多个处理元件时分别执行第一操作和第二操作。

Description

用于具有安全、功率降低和性能特征的可配置空间加速器的 处理器、方法和系统
有关联邦赞助研究和开发的声明
本发明是根据由国防部授予的合同编号H98230A-13-D-0124在政府支持下做出的。政府对本发明享有某些权利。
技术领域
本公开一般地涉及电子装置,并且更具体地,本公开的实施例涉及可配置空间加速器。
背景技术
处理器或处理器集执行来自指令集(例如,指令集架构(ISA))的指令。指令集是与编程有关的计算机架构的一部分,并且一般地包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。应该注意的是,本文术语指令可以指代宏指令,例如,被提供给处理器以供执行的指令,或者指代微指令,例如,由处理器的解码器对宏指令进行解码产生的指令。
附图说明
本公开作为示例而非限制被图示在附图的各图中,在附图中相似的附图标记指示类似的元素,并且在附图中:
图1图示了根据本公开的实施例的加速器块片(tile)。
图2图示了根据本公开的实施例的耦合到存储器的硬件处理器。
图3A图示了根据本公开的实施例的程序源。
图3B图示了根据本公开的实施例的图3A的程序源的数据流图。
图3C图示了根据本公开的实施例的具有被配置成执行图3B的数据流图的多个处理元件的加速器。
图4图示了根据本公开的实施例的数据流图的示例执行。
图5图示了根据本公开的实施例的程序源。
图6图示了根据本公开的实施例的包括处理元件阵列的加速器块片。
图7A图示了根据本公开的实施例的可配置数据路径网络。
图7B图示了根据本公开的实施例的可配置流控制路径网络。
图8图示了根据本公开的实施例的包括加速器的硬件处理器块片。
图9图示了根据本公开的实施例的处理元件。
图10A图示了根据本发明的实施例的存储器排序绕过(bypassing)。
图10B图示了根据本公开的实施例的地址转换绕过。
图10C图示了根据本公开的实施例的请求地址堆(RAF)电路。
图10D图示了根据本公开的实施例的对图10C的RAF电路的增强以实现用于共享存储器接口的QoS策略。
图10E图示了根据本公开的实施例的概括一般RAF分配策略的操作的流程图。
图10F图示了根据本公开的实施例的增强存储器接口。
图10G图示了根据本公开的实施例的基于通道的TLB。
图11图示了根据本公开的实施例的耦合在多个加速器块片与多个高速缓存组之间的多个RAF电路。
图12图示了根据本公开的实施例的分割成三个区域(结果区域、三个潜在进位区域和选通区域)的浮点乘法器。
图13图示了根据本公开的实施例的具有多个处理元件的加速器的进行中(in-flight)配置。
图14图示了根据本公开的实施例的进行中管线提取的快照。
图15图示了根据本公开的实施例的用于加速器的编译工具链。
图16图示了根据本公开的实施例的用于加速器的编译器。
图17A图示了根据本公开的实施例的顺序汇编代码。
图17B图示了根据本公开的实施例的图17A的顺序汇编代码的数据流汇编代码。
图17C图示了根据本公开的实施例的用于加速器的图17B的数据流汇编代码的数据流图。
图18A图示了根据本公开的实施例的C源代码。
图18B图示了根据本公开的实施例的图18A的C源代码的数据流汇编代码。
图18C图示了根据本公开的实施例的用于加速器的图18B的数据流汇编代码的数据流图。
图19A图示了根据本公开的实施例的C源代码。
图19B图示了根据本公开的实施例的图19A的C源代码的数据流汇编代码。
图19C图示了根据本公开的实施例的用于加速器的图19B的数据流汇编代码的数据流图。
图20A图示了根据本公开的实施例的流程图。
图20B图示了根据本公开的实施例的流程图。
图21图示了根据本公开的实施例的吞吐量对每操作能量图。
图22图示了根据本公开的实施例的包括处理元件阵列和本地配置控制器的加速器块片。
图23A-23C图示了根据本公开的实施例的配置数据路径网络的本地配置控制器。
图24图示了根据本公开的实施例的配置控制器。
图25图示了根据本公开的实施例的包括处理元件阵列、配置高速缓存和本地配置控制器的加速器块片。
图26图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路的配置和异常处理控制器的加速器块片。
图27图示了根据本公开的实施例的重配置电路。
图28图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路的配置和异常处理控制器的加速器块片。
图29图示了根据本公开的实施例的包括处理元件阵列和耦合到块片级异常集合器的夹层异常集合器的加速器块片。
图30图示了根据本公开的实施例的具有异常生成器的处理元件。
图31图示了根据本公开的实施例的包括处理元件阵列和本地提取控制器的加速器块片。
图32A-32C图示了根据本公开的实施例的配置数据路径网络的本地提取控制器。
图33图示了根据本公开的实施例的提取控制器。
图34A和图34B图示了根据本公开的实施例的流程图。
图35图示了根据本公开的实施例的流程图。
图36A是图示了根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图。
图36B是图示了根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。
图37A是图示了根据本公开的实施例的图36A和图36B中的通用矢量友好指令格式的字段的框图。
图37B是图示了根据本公开的一个实施例的组成完整操作码字段的图37A中的具体矢量友好指令格式的字段的框图。
图37C是图示了根据本公开的一个实施例的组成寄存器索引字段的图37A中的具体矢量友好指令格式的字段的框图。
图37D是图示了根据本公开的一个实施例的组成扩增操作字段3650的图37A中的具体矢量友好指令格式的字段的框图。
图38是根据本公开的一个实施例的寄存器架构的框图。
图39A是图示了根据本公开的实施例的示例性顺序管线和示例性寄存器重命名、乱序发射/执行管线的框图。
图39B是图示了根据本公开的实施例的要包括在处理器中的顺序架构核心和示例性寄存器重命名、乱序发射/执行架构核心的示例性实施例的框图。
图40A是根据本公开的实施例的单个处理器核心的框图以及其到管芯上互连网络且与其第2级(L2)高速缓存的本地子集的连接。
图40B是根据本公开的实施例的图40A中的处理器核心的一部分的展开图。
图41是根据本公开的实施例的可以具有多于一个核心、可以具有集成存储器控制器并且可以具有集成显卡的处理器的框图。
图42是依照本公开的一个实施例的系统的框图。
图43是依照本公开的实施例的更具体示例性系统的框图。
图44示出的是依照本公开的实施例的第二更具体示例性系统的框图。
图45示出的是依照本公开的实施例的片上系统(SoC)的框图。
图46是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了许多具体细节。然而,应理解的是,可以在没有这些具体细节的情况下实践本公开的实施例。在其他实例中,尚未详细地示出众所周知的电路、结构和技术,以免使对此描述的理解混淆。
在本说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每一实施例可能不一定包括该特定特征、结构或特性。而且,此类短语不一定参考同一实施例。进一步地,当结合实施例对特定特征、结构或特性进行描述时,认为结合其他实施例实现这种特征、结构或特性在本领域的技术人员的知识内,而无论是否被明确地描述。
处理器(例如,具有一个或多个核心)可以执行指令(例如,指令线程)以对数据进行操作,例如,以执行算术、逻辑或其他功能。例如,软件可以请求操作并且硬件处理器(例如,其一个或多个核心)可以响应于请求而执行操作。操作的一个非限制性示例是用于输入多个矢量元素并且输出具有混合的多个元素的矢量的混合操作。在某些实施例中,多个操作是用单个指令的执行来完成的。
例如,如由能源部定义的百亿亿次性能可能要求系统级浮点性能在给定(例如,20MW)功率预算内超过每秒10^18次浮点运算(exaFLOP)或更多。本文中的某些实施例涉及把高性能计算(HPC)作为目标的可配置空间加速器(CSA)。CSA的某些实施例把直接执行数据流图以产生远超过常规路线图架构的计算密集的但高能效的空间微架构作为目标。下面包括对CSA的实施例的架构基本原理及其某些特征的描述。与任何革命性架构一样,可编程性可能是风险。为了减轻此问题,CSA架构的实施例已被与编译工具链协同设计,同样在下面对编译工具链进行讨论。
1. 引言
百亿亿次计算目标可能在进取功率预算(例如,20 MW)内要求巨大系统级浮点性能(例如,1个ExaFLOP)。然而,利用经典冯诺依曼架构同时地改进程序执行的性能和能量效率已变得困难:乱序调度、同时多线程处理、复杂寄存器堆和其他结构提供性能,但是以高能量为代价。本文中的某些实施例同时地实现性能和能量需求。百亿亿次计算功率性能目标可能要求高吞吐量和每操作低能耗两者。本文中的某些实施例通过提供大大地消除先前处理器设计的控制开销的大量低复杂度、高能效处理(例如,计算)元件来提供这个。受此观察结果指导,本文中的某些实施例包括可配置空间加速器(CSA),例如,包括通过一组轻量级反压网络连接的处理元件(PE)阵列。在图1中描绘了CSA块片的一个示例。处理(例如,计算)元件的某些实施例是数据流操作符,例如,当(i)输入数据已到达数据流操作符且(ii)存在可用于存储输出数据的空间(例如,否则没有处理在发生)时仅处理输入数据的多个数据流操作符。某些实施例(例如,加速器或CSA的)不利用触发的指令。
图1图示了根据本公开的实施例的加速器块片100。加速器块片100可以是更大块片的一部分。加速器块片100执行一个或多个数据流图。数据流图一般地可以指代在顺序代码的编译中出现的显式并行程序描述。例如,本文中的某些实施例(例如,CSA)允许数据流图被直接地配置到CSA阵列上,而不是被变换成顺序指令流。从顺序编译流程导出数据流图允许CSA的实施例支持熟悉的编程模型并且直接(例如,在不使用工作表的情况下)执行现有的高性能计算(HPC)代码。CSA处理元件(PE)可以是高能效的。在图1中,存储器接口102可以耦合到存储器(例如,图2中的存储器202)以允许加速器块片100访问(例如,加载和/或存储)数据到(例如,管芯外)存储器。所描绘的加速器块片100是由经由互连网络104耦合在一起的几种PE组成的异构阵列。加速器块片100可以包括整数算术PE、浮点算术PE、通信电路和结构内储存器中的一个或多个。数据流图(例如,编译数据流图)可以叠加在加速器块片100上以供执行。在一个实施例中,对于特定数据流图,每个PE仅处理该图的一个或两个操作。PE阵列可以是异构的,例如,使得没有PE支持完整CSA数据流架构和/或一个或多个PE被编程(例如,定制)以仅执行几个但高度高效的操作。本文中的某些实施例因此产生具有与路线图架构相比计算上密集的处理元件阵列的加速器,所述处理元件阵列相对于现有HPC产品在能量效率和性能方面仍然实现大致一个数量级增益。
性能增加可以由其中每个PE可以同时地执行(例如,如果输入数据可用的话)的(例如,密集)CSA内的并行执行产生。效率增加可以由每个PE的效率产生,例如,其中每个PE的操作(例如,行为)每配置(例如,映射)步骤被固定一次并且在到达PE的本地数据上发生执行,例如,而不考虑其他结构活动。在某些实施例中,PE是(例如,各自为单个)数据流操作符,例如,当(i)输入数据已到达数据流操作符并且(ii)存在可用于存储输出数据的空间(例如,否则没有处理在发生)时仅处理输入数据的数据流操作符。这些性质使得CSA的实施例能够跨越广泛的一类现有单流和并行程序提供颠覆传统水平的性能和巨大的能量效率改进,例如,全部同时保存熟悉的HPC编程模型。CSA的某些实施例可以把HPC作为目标,使得浮点能量效率极其重要。CSA的某些实施例不仅交付令人瞩目的性能改进和能量减少,它们也将这些收益交付给用主流HPC语言并且为主流HPC框架编写的现有HPC程序。CSA架构的某些实施例(例如,在编译时)提供若干扩展以直接支持由现代编译器生成的控制数据流内部表示。本文中的某些实施例涉及例如可接受C、C++和Fortran编程语言的CSA数据流编译器,以把CSA架构作为目标。
下面的部分2公开了CSA架构的实施例。特别地,公开了在数据流执行模型内集成存储器的新颖实施例。部分3钻研CSA的实施例的微架构细节。在一个实施例中,CSA的主要目标是为了支持编译器产生的程序。下面的部分4检查了CSA编译工具链的实施例。在部分5中将CSA的实施例的优势与编译代码的执行中的其他架构相比较。最后在部分6讨论CSA微架构的实施例的性能,在部分7中讨论另外的CSA细节,并且在部分8中提供概要。
2. 架构
CSA的某些实施例的目标是为了快速地且高效地执行程序,例如,由编译器产生的程序。CSA架构的某些实施例提供支持编译器技术和编程范例的需要的编程抽象。CSA的实施例执行数据流图,例如,与编译程序的编译器自己的内部表示(IR)很类似的程序表现形式。在此模型中,程序被表示为由从一组架构定义的数据流操作符(例如,其包含计算和控制操作两者)中汲取的节点(例如,顶点)和表示数据在数据流操作符之间的转移的边组成的数据流图。执行可以通过将数据流令牌(例如,其是或者表示数据值)注入到数据流图中继续进行。令牌可以在每个节点(例如,顶点)之间流动并且在每个节点(例如,顶点)处被变换,例如,形成完整计算。在图3A-3C中示出了样本数据流图及其从高级源代码的导出,并且图5示出了数据流图的执行的示例。
CSA的实施例通过确切地提供编译器所需要的那些数据流图执行支持被配置用于数据流图执行。在一个实施例中,CSA是加速器(例如,图2中的加速器)并且它不设法提供在通用处理核心(例如,图2中的核心)上可用的一些必要的但不经常使用的机制,诸如系统调用。因此,在此实施例中,CSA可执行许多代码,但并非全部代码。作为交换,CSA赢得显著的性能和能量优势。为了使得能实现用常用顺序语言编写的代码的加速,本文中的实施例也引入若干新颖架构特征来协助编译器。一个特别新颖性是CSA对存储器的处理,这是先前已被忽视或者解决得不好的主题。CSA的实施例在数据流操作符的使用方面也是独特的,例如,与查找表(LUT)相反,作为它们的基本架构接口。
图2图示了根据本公开的实施例的耦合到(例如,连接到)存储器202的硬件处理器200。在一个实施例中,硬件处理器200和存储器202是计算系统201。在某些实施例中,一个或多个加速器是根据本公开的CSA。在某些实施例中,处理器中的一个或多个核心是本文中所公开的那些核心。硬件处理器200(例如,其每个核心)可以包括硬件解码器(例如,解码单元)和硬件执行单元。硬件处理器200可以包括寄存器。注意的是,本文中的图可能未描绘所有数据通信耦合(例如,连接)。本领域的普通技术人员应领会的是,这将不会使图中的某些细节混淆。注意的是,图中的双向箭头可能不需要双向通信,例如,它可以指示单向通信(例如,到或来自该组件或装置)。可以在本文中的某些实施例中使用通信路径的任何或所有组合。根据本公开的实施例,描绘的硬件处理器200包括多个核心(O至N,其中N可以是1或更大)和硬件加速器(O至M,其中M可以是1或更大)。硬件处理器200(例如,其(一个或多个)加速器和/或(一个或多个)核心)可以耦合到存储器202(例如,数据存储装置)。硬件解码器(例如,核心的)可以接收(例如,单个)指令(例如,宏指令)并且将该指令例如解码成微指令和/或微操作。硬件执行单元(例如,核心的)可以执行经解码的指令(例如,宏指令)以执行一个或多个运算。转回到CSA的实施例,接下来讨论数据流操作符。
2.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中的数据流操作符。在一个实施例中,处理元件阵列301中的一个或多个处理元件将通过存储器接口302访问存储器。在一个实施例中,数据流图300的拾取节点304因此对应于拾取操作符304A(例如,通过拾取操作符304A来表示),并且数据流图300的开关节点306因此对应于开关操作符306A(例如,通过开关操作符306A来表示),并且数据流图300的乘法器节点308因此对应于乘法器操作符308A(例如,通过乘法器操作符308A来表示)。另一处理元件和/或流控制路径网络可以向拾取操作符304A和开关操作符306A提供控制信号(例如,控制令牌)以执行图3A中的操作。在一个实施例中,处理元件阵列301被配置成在执行开始之前执行图3B的数据流图300。在一个实施例中,编译器执行来自图3A-3B的转换。在一个实施例中,数据流图节点到处理元件阵列中的输入将数据流图在逻辑上嵌入到处理元件阵列中,例如,如在下面进一步讨论的,使得输入/输出路径被配置成产生所期望的结果。
2.2等待时间不敏感通道
通信弧是数据流图的第二主要组件。CSA的某些实施例将这些弧描述为等待时间不敏感通道,例如,顺序、反压(例如,在有地方存储输出之前不产生或者发送输出)、点对点通信通道。与数据流操作符一样,等待时间不敏感通道基本上是异步的,从而给予组成许多类型的网络来实现特定图的通道的自由。等待时间不敏感通道可以具任意长的等待时间并且仍如实地实现CSA架构。然而,在某些实施例中在性能和能量方面有使等待时间变得尽可能小的强烈诱因。本文中的部分3.2公开了数据流图通道被以管线方式实现有等待时间的不多于一个周期的网络微架构。等待时间不敏感通道的实施例提供关键抽象层,该关键抽象层与CSA架构一起被利用来向应用程序设计员提供许多运行时服务。例如,CSA可以在实现CSA配置(将程序加载到CSA阵列上)时利用等待时间不敏感通道。
图4图示了根据本公开的实施例的数据流图400的示例执行。在步骤1处,可以在数据流图400中加载输入值(例如,在图3B中对于X来说为1并且在图3B中对于Y来说为2)以执行1 * 2乘法运算。这些数据输入值中的一个或多个在运算中可以是静态的(例如,恒定的)(例如,参考图3B对于X来说为1并且对于Y来说为2)或者在运算期间被更新。在步骤2处,处理元件(例如,在流控制路径网络上)或其他电路向拾取节点404的控制输入端(例如,复用控制信号)输出零(例如,以寻找从端口“0”到其输出端的一的来源)并且向开关节点406的控制输入端(例如,复用控制信号)输出零(例如,以从端口“0”中向目的地(例如,下游处理元件)提供其输入)。在步骤3处,数据值1被从拾取节点404输出(例如,并且在拾取节点404处消费其控制信号“0”)到乘法器节点408以在步骤4处与数据值2相乘。在步骤4处,乘法器节点408的输出到达开关节点406,例如,这使开关节点406在步骤5处消费控制信号“0”以从开关节点406的端口“0”输出值2。运算然后完成。CSA因此可以被相应地编程为使得用于每个节点的对应数据流操作符执行图4中的运算。尽管在此示例中执行是序列化的,然而原则上所有数据流操作可以并行地执行。这些步骤在图4中用于将数据流执行与任何物理微架构表现形式区分开。在一个实施例中下游处理元件将向开关406发送信号(或者不发送就绪信号)(例如,在流控制路径网络上)以停止来自开关406的输出,例如,直到下游处理元件为输出做好准备(例如,具有存储空间)为止。
2.3存储器
数据流架构一般地集中于通信和数据操纵,而对状态不太关注。然而,启用真实软件尤其是用传统顺序语言编写的程序需要重点关注与存储器对接。CSA的某些实施例将架构存储器操作用作其到(例如,大)有状态储存器的主要接口。从数据流图的角度来看,存储器操作与其他数据流操作类似,只是它们具有更新共享暂存器的副作用。特别地,本文中的某些实施例的存储器操作具有与每个其他数据流操作符相同的语义,例如,它们在其操作数(例如,地址)可用时“执行”,并且在一些等待时间之后,响应被产生。本文中的某些实施例显式地使操作数输入和结果输出解耦,使得存储器操作符自然地管线化并且有可能产生许多同时未完成的请求,例如,使它们例外地非常适于存储器子系统的等待时间和带宽特性。CSA的实施例提供诸如加载和存储之类的基本存储器操作,所述加载取地址通道并利用与地址相对应的值填充响应通道。CSA的实施例也可以提供更高级的操作,诸如存储器中原子和一致性操作符。这些操作可以具有与其冯诺依曼对应部分类似的语义。CSA的实施例可以使使用诸如C和Fortran之类的顺序语言描述的现有程序加速。支持这些语言模型的结果是解决程序存储器排序,例如,通常通过这些语言规定的存储器操作的串行排序。
图5图示了根据本公开的实施例的程序源(例如,C代码)500。根据C编程语言的存储器语义,存储器拷贝(memcpy)应该被序列化。然而,如果已知数组A和B不相交,则可以用CSA的实施例使memcpy并行化。图5还图示了程序排序的问题。一般而言,例如,对于索引的相同值或索引跨越循环体的不同值来说,编译器不能证明数组A与数组B不同。这被称为指针或存储器混叠。因为编译器将生成静态正确的代码,所以它们通常被迫使存储器访问串行化。通常,把顺序冯诺依曼架构作为目标的编译器将指令排序用作实施程序排序的自然手段。然而,CSA的实施例没有如由程序计数器定义的指令或基于指令的程序排序的观念。在某些实施例中,例如不包含架构可见的信息的传入依赖性令牌和所有其他数据流令牌一样并且存储器操作可以不执行直到它们已接收到依赖性令牌为止。在某些实施例中,一旦其操作对所有逻辑上后续的从属存储器操作可见,存储器操作就产生传出依赖性令牌。在某些实施例中,依赖性令牌与数据流图中的其他数据流令牌类似。例如,因为存储器操作发生在条件上下文中,所以也可以使用部分2.1中描述的控制操作符来操纵依赖性令牌,例如,像任何其他令牌一样。依赖性令牌可以具有使存储器访问串行化(例如,给编译器提供在架构上定义存储器访问的顺序的手段)的效果。
2.4运行时服务
CSA的实施例的主要架构考虑事项涉及用户级程序的实际执行,但是它也可能期望提供从下面支持此执行的若干支持机制。这些当中最主要的是配置(其中数据流图被加载到CSA中)、提取(其中执行图的状态被移动到存储器)和异常(其中结构中的数学、软和其他类型的错误被检测和处理,可能由外部实体处理)。下面的部分3.6讨论用于产生这些功能的高效大部分管线实施方式的CSA的实施例的等待时间不敏感数据流架构的性质。概念上,配置可以将数据流图的状态加载到互连和处理元件(例如,结构)中,例如,一般地从存储器加载。在此步骤期间,例如,作为上下文切换的结果,CSA中的所有结构可以被加载有新数据流图并且任何数据流令牌出现在该图中。CSA的等待时间不敏感语义可以许可结构的分布式异步初始化,例如,一旦PE被配置,它们就可以立即开始执行。未配置的PE可以对其通道进行反压处理直到它们被配置为止,例如,阻止配置的元件与未配置的元件之间的通信。可以将CSA配置分割成特许状态和用户级状态。这种两级分割可以使得结构的主要配置能够在不调用操作系统(OS)的情况下发生。提供直接用户级配置的本发明的实施例可以实质上减少配置开销。在提取的一个实施例期间,数据流图的逻辑视图被捕获并提交到存储器中,例如,将所有实时控制及数据流令牌和状态包括在图中。
提取也可以在通过创建结构检查点来提供可靠性保证时起作用。CSA中的异常一般地可以是由在处理器中引起异常的相同事件引起的,所述事件诸如非法操作符变元或可靠性、可用性和可服务性(RAS)事件。在某些实施例中,在数据流操作符级下检测异常,例如,检查变元值或者通过模块化算术方案。在检测到异常时,数据流操作符(例如,电路)可以暂停并发出异常消息,例如,其包含操作标识符和已经发生的问题的性质的一些细节两者。在一个实施例中,数据流操作符将保持暂停直到它已被重配置为止。然后可以将异常消息传送给用于服务的关联处理器(例如,核心),例如,所述服务可以包括提取图以用于软件分析。
2.5块片级架构
CSA计算机架构的实施例(例如,把HPC和数据中心使用作为目标)被平铺。图6和图8示出了CSA的块片级部署。图8示出了CSA的全块片实施方式,例如,其可以是具有核心的处理器的加速器。此架构的主要优势是可以降低设计风险,例如,使得CSA和核心在制造时被完全解耦。除了允许更好的组件重用之外,这还可以允许像CSA高速缓存这样的组件的设计仅考虑CSA,例如,而不是需要结合核心的更严格的等待时间要求。最后,单独的块片可以允许CSA与小或大核心的集成。CSA的一个实施例捕获大多数矢量并行工作负载,使得大多数矢量样式工作负载直接在CSA上运行,但是在某些实施例中可以包括核心中的矢量样式指令,例如,以支持传统二进制文件。
3. 微架构
在一个实施例中,CSA微架构的目标是为了提供由CSA架构指定的每个数据流操作符的高质量实施方式。CSA微架构的实施例假设微架构的每个处理元件对应于架构数据流图中的大致一个节点(例如,实体)。在某些实施例中,这产生不仅紧凑从而产生密集计算阵列而且高能效(例如,在处理元件(PE)既简单又大部分未复用的情况下,例如,针对CSA的配置(例如,编程)执行单个数据流操作符)的微架构元件。为了进一步减少能量和实现区域,CSA可以包括可配置异构结构样式,其中其每个PE仅实现数据流操作符的子集。外设和支持子系统(诸如CSA高速缓存)可以被提供来在主要CSA处理结构它本身中支持现任分布式并行机制。CSA微架构的实施方式可以利用存在于架构中的数据流和等待时间不敏感通信抽象。在某些实施例中,在编译器生成的图中的节点与CSA中的数据流操作符(例如,数据流操作符计算元件)之间存在(例如,实质上)一对一对应。
下面是对示例CSA的讨论,后面是对微架构的更详细讨论。本文中的某些实施例提供允许容易编译实现的CSA,例如,与处理编程语言(例如,C或C++)的小子集并且需要许多小时来编译甚至小程序的现有FPGA编译器形成对照。
CSA架构的某些实施例容许异构粗粒度操作,例如双精度浮点。程序可以用更少的粗粒度操作表示,例如,使得所公开的编译器运行得比传统空间编译器快。某些实施例包括具有新处理元件以支持像程序排序存储器访问这样的顺序概念的结构。某些实施例实现硬件来支持粗粒度数据流样式通信通道。这种通信模型是抽象的,并且非常接近于由编译器使用的控制数据流表示。本文中的某些实施例包括支持单周期等待时间通信的网络实施方式,例如,利用支持单个控制数据流操作的(例如,小)PE。在某些实施例中,这不仅改进能量效率和性能,而且它简化编译,因为编译器在高级数据流构造与结构之间进行一对一映射。本文中的某些实施例因此简化将现有(例如,C、C++或Fortran)程序编译为CSA(例如,结构)的任务。
能量效率可能是现代计算机系统中的首要关注点。本文中的某些实施例提供高能效空间架构的新模式。在某些实施例中,这些架构形成具有小高能效的面向数据流的处理元件(PE)与轻量级电路交换通信网络(例如,互连)的异构混合的独特组成(例如,具有针对流控制的强化支持)的结构。由于每个的能量优势,这两个组件的组合可以形成适合于以极其高能效的方式执行编译器生成的并行程序的空间加速器(例如,作为计算机的一部分)。因为此结构是异构的,所以可以通过引入新的领域特定PE来为不同的应用域定制某些实施例。例如,用于高性能计算的结构可能包括针对双精度融合乘加的某种定制,然而把深度神经网络作为目标的结构可能包括低精度浮点运算。
例如如图6中例示的空间架构模式的实施例是通过PE间网络连接的轻量级处理元件(PE)的组成。一般地,PE可以包括数据流操作符,例如,其中一旦所有输入操作数到达数据流操作符,某个操作(例如,微指令或微指令集)就被执行,并且结果被转发给下游操作符。控制、调度和数据存储因此可以分布在PE之中,例如,去除支配经典处理器的集中式结构的开销。
可以通过将PE和网络配置成表达程序的控制数据流图来将程序转换为被映射到架构上的数据流图。通信通道可以是流控制的并且完全反压的,例如,使得如果任何一个源通信通道没有数据或者目的地通信通道满则PE将停止。在一个实施例中,在运行时,数据流经已被配置成实现该操作(例如,加速算法)的PE和通道。例如,数据可以从存储器流入,通过结构,然后返回到存储器。
这种架构的实施例相对于传统多核心处理器可以实现显著的性能效率:与在更大核心中相比计算(例如,形式为PE)可以是更简单的、更高能效的且更丰富的,并且通信可以是直接的且大部分短程的,例如,与像在典型的多核心处理器中一样在广泛的全芯片网络上发生相反。而且,因为架构的实施例是极其并行的,所以许多强大的电路和装置级优化在不严重影响吞吐量的情况下是可能的,例如,低泄漏装置和低工作电压。这些更较低级优化相对于传统核心可以实现甚至更大的性能优势。在这些实施例的架构、电路和器件级利用率下的效率的组合是令人瞩目的。随着晶体管密度继续增加,此架构的实施例可以使得能实现更大的活跃区域。
本文中的实施例提供数据流支持和电路交换的独特组合以使得结构能够更小、更高能效,并且与先前的架构相比提供更高的集合性能。一般地为了细粒度比特操纵而对FPGA进行调谐,然而本文中的实施例是为了HPC应用中找到的双精度浮点运算而调谐的。本文中的某些实施例除了包括根据本公开的CSA之外还可以包括FPGA。
本文中的某些实施例将轻量级网络与高能效的数据流处理元件组合以形成高吞吐量、低等待时间、高能效的HPC结构。此低等待时间网络可以使得能够构建具有更少功能性(例如,仅一个或两个指令以及可能一个架构上可见的寄存器)的处理元件,因为将多个PE结合在一起以形成完整程序是高效的。
相对于处理器核心,本文中的CSA实施例可以提供更大计算密度和能量效率。例如,当PE非常小(例如,与核心相比)时,CSA可以执行更多的操作并且具有比一核心更多的计算并行性,例如,可以和作为矢量处理单元(VPU)的FMA的数量的16倍一样多。为了利用所有这些计算元件,在某些实施例中每操作能量非常低。
我们的这种数据流架构的实施例的能量优势很多。并行性在数据流图中是显式的并且CSA架构的实施例不花费或者花费最少能量来提取它,例如,与每次指令被执行时必须重新发现并行性的乱序处理器不同。因为在一个实施例中每个PE负责单个操作,所以寄存器堆和端口计数可以是小的,例如,常常仅一个,并且因此使用比其在核心中的对应部分更少的能量。某些CSA包括许多PE,其中的每一个保持实时程序值,从而在传统架构中给出巨大寄存器堆的集合效果,这显著地减少存储器访问。在其中存储器是多端口和分布式的实施例中,CSA与一核心相比可以保持更多未完成的存储器请求并且利用更多的带宽。这些优势可以组合以产生仅占仅有算术电路的成本小百分比的每瓦能量水平。例如,在整数乘法的情况下,与底层乘法电路相比,CSA可能消耗的能量最多不超过底层乘法电路消耗的能量的25%。相对于一核心的一个实施例,该CSA结构中的整数运算消耗每整数运算能量的不到1/30。
从编程角度来看,CSA架构的实施例的应用特定可塑性对矢量处理单元(VPU)产生显著的优势。在传统不灵活的架构中,必须基于某个预期用例在设计时选取功能单元(例如浮点除法或各种超越数学函数)的数量。在CSA架构的实施例中,可以基于每个应用的要求将此类功能配置(例如,由用户而非制造商)配置到结构中。从而可以进一步增加应用吞吐量。同时地,CSA的实施例的计算密度通过避免强化此类函数而改进,并且替代地提供像浮点乘法这样的原函数的更多实例。这些优势在HPC工作负载方面可能是重要的,所述HPC工作负载中的一些在超越函数中花费浮点执行时间的75%。
CSA的某些实施例将显著进步表示为面向数据流的空间架构,例如,本公开的PE可以更小,但是也更高能效。这些改进可以由面向数据流的PE与例如具有单周期等待时间的轻量级电路交换互连的组合直接产生,例如,与分组交换网络形成对照(例如,具有最低限度300%以上等待时间)。PE的某些实施例支持32位或64位运算。本文中的某些实施例许可引入新的专用PE,例如,以用于机器学习或安全,而不仅仅是同质组合。本文中的某些实施例将轻量级面向数据流的处理元件与轻量级、低等待时间网络组合以形成高能效的计算架构。
为让某些空间架构成功,程序设计员将用相对少的努力配置它们,例如,同时获得优于顺序核心的显著功率和性能优越性。本文中的某些实施例提供被容易地编程(例如,通过编译器)、功率高效的且高度并行的CSA(例如,空间结构)。本文中的某些实施例提供实现这三个目标的(例如,互连)网络。从可编程性角度来看,网络的某些实施例提供流控制通道,例如,其对应于编译器中使用的执行的控制数据流图(CDFG)模型。某些网络实施例利用专用电路交换链路,使得程序性能更容易既被人类且被编译器推理,因为性能是可预测的。某些网络实施例提供高带宽和低等待时间两者。某些网络实施例(例如,静态电路交换)提供0至1个周期的等待时间(例如,取决于传输距离)。某些网络实施例通过并行地布置若干网络来提供高带宽,例如并且在低级金属中。某些网络实施例在低级金属中且在短距离上通信,并且因此是非常功率高效的。
网络的某些实施例包括针对流控制的架构支持。例如,在由小处理元件(PE)组成的空间加速器中,通信等待时间和带宽可能对总体程序性能至关重要。本文中的某些实施例提供方便空间处理阵列(诸如图6中所示的空间阵列)中的PE之间的通信的轻量级电路交换网络以及支持此网络所必需的微架构控制特征。网络的某些实施例使得能够构造支持面向数据流的处理元件(PE)的通信的点对点流控制通信通道。除了点对点通信之外,本文中的某些网络也支持多播通信。可以通过静态地配置网络以在PE之间形成虚拟电路来形成通信通道。本文中的电路交换技术可以减小通信等待时间并且相当地使网络缓冲最小化,例如,导致高性能和高能量效率两者。在网络的某些实施例中,PE间等待时间可以和零周期一样低,意味着下游PE可以在数据被产生之后在该周期中对该数据操作。为了获得甚至更高的带宽,并且为了容许更多的程序,可以并行地布置多个网络,例如,如图6中所示。
空间架构(诸如图6中所示的空间架构)可以是通过PE间网络连接的轻量级处理元件的组合。可以通过配置PE和网络将程序(被视为数据流图)映射到架构上。一般地,PE可以被配置为数据流操作符,并且一旦所有输入操作数到达PE,就然后可以发生某个操作,并且结果被转发给所期望的下游PE。PE可以通过专用虚拟电路来通信,该专用虚拟电路通过静态地配置电路交换通信网络而形成。这些虚拟电路可以是流控制的且完全反压的,例如,使得如果源没有数据或者目的地是满的,则PE将停止。在运行时,数据可以流经实现所映射的算法的PE。例如,数据可以从存储器流入,通过结构,然后返回到存储器。此架构的实施例相对于传统多核心处理器可以实现显著的性能效率:例如,在形式为PE的情况下计算比更大核心更简单且更多并且通信是直接,例如,与存储器系统的扩展相比。
图6图示了根据本公开的实施例的包括处理元件(PE)阵列的加速器块片600。互连网络被描绘为电路交换、静态地配置的通信通道。例如,一组通道通过开关(例如,第一网络中的开关610和第二网络中的开关611)耦合在一起。第一网络和第二网络可以是单独的或者耦合在一起的。例如,开关610可以将四个数据路径(612、614、616、618)中的一个或多个耦合在一起,例如,像被配置成根据数据流图执行操作一样。在一个实施例中,数据路径的数量是任何多个。处理元件(例如,处理元件604)可以如本文中所公开的那样,例如,如在图9中一样。加速器块片600包括存储器/高速缓存层次接口602,例如,以将加速器块片600与存储器和/或高速缓存对接。数据路径(例如,618)可以延伸到另一块片或者例如在块片的边缘处终止。处理元件可以包括输入缓冲器(例如,缓冲器606)和输出缓冲器(例如,缓冲器608)。
操作可以基于其输入的可用性和PE的状态被执行。PE可以从输入通道获得操作数并且将结果写入到输出通道,但是也可以使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好的PE。图9示出了一个这种PE(整数PE)的详细框图。此PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器构成。每个周期,调度器可以基于输入和输出缓冲器的可用性以及PE的状态选择用于执行的指令。操作的结果然后可以被写入到输出缓冲器或者到(例如,PE本地的)寄存器。写入到输出缓冲器的数据可以被传输到下游PE以用于进一步处理。这种样式的PE可以是极其高能效的,例如,不是从复杂的多端口寄存器堆读取数据,而是PE从寄存器读取数据。类似地,指令可以被直接地存储在寄存器中,而不是存储在虚拟化指令高速缓存中。
可以在特殊配置步骤期间设置指令寄存器。在此步骤期间,除了PE间网络之外的辅助控制线和状态可以用于按照配置跨越包括结构的若干PE流式传输。作为并行性的结果,这种网络的某些实施例可以提供快速重配置,例如,可以在不到大约10微秒内配置块片大小的结构。
图9表示处理元件的一个示例配置,例如,其中所有架构元件是最小尺寸的。在其他实施例中,处理元件的组件中的每一个被独立地定标以产生新PE。例如,为了处理更复杂的程序,可以引入可由PE执行的更大数量的指令。可配置性的第二维度在PE算术逻辑单元(ALU)的功能中。在图9中,描绘了可以支持加法、减法和各种逻辑运算的整数PE。可以通过将不同种类的功能单元代入PE来创建其他种类的PE。例如,整数乘法PE可能没有寄存器、单指令和单输出缓冲器。PE的某些实施例将融合乘加(FMA)分解成单独的但紧耦合的浮点乘和浮点加单元以改进针对乘加重工作负载的支持。在下面进一步对PE进行讨论。
图7A图示了根据本公开的实施例的可配置数据路径网络700(例如,参考图6所讨论的网络一或网络二的)。网络700包括可以(例如,经由其相应的控制信号)被配置成将一个或多个数据路径(例如,从PE起)连接在一起的多个复用器(例如,复用器702、704、706)。图7B图示了根据本公开的实施例的可配置流控制路径网络701(例如,参考图6所讨论的网络一或网络二)。网络可能是轻量级PE到PE网络。网络的某些实施例可以被认为是用于构造分布式点对点数据通道的一组可组成的基元。图7A示出了具有启用的两个通道(粗黑线和虚黑线)的网络。粗黑线通道是多播,例如,单个输入被发送到两个输出。注意的是,即使在通道端点之间形成专用电路交换路径,该通道也可以在单个网络内的某些点处交叉。此外,此交叉可能不在两个通道之间引入结构危险,使得每个通道独立地且以全带宽操作。
实现分布式数据通道可以包括图7A-7B中图示的两个路径。转发或数据路径将数据从生产者载送到消费者。复用器可以被配置成将数据和有效比特从生产者引导到消费者,例如,如在图7A中一样。在多播的情况下,数据将被引导到多个消费者端点。网络的此实施例的第二部分是流控制或反压路径,其在正向数据路径的反向上流动,例如,如在图7B中一样。消费者端点可以断言他们何时准备好接受新数据。这些信号然后可以使用可配置逻辑合取(在图7B中被标记为(例如,回流)流控制功能)被导回到生产者。在一个实施例中,每个流控制功能电路可以是多个开关(例如,复用器),例如,与图7A类似。流控制路径可以处理从消费者到生产者的返回控制数据。合取可以启用多播,例如,在生产者假定数据已被接收之前每个消费者准备好接收该数据的情况下。在一个实施例中,PE是具有数据流操作符作为其架构接口的PE。附加地或可替换地,在一个实施例中PE可以是任何种类的PE(例如,在结构中),例如,但不限于具有指令指针、触发指令或基于状态机的架构接口的PE。
例如,除了PE被静态地配置之外,可以静态地配置网络。在配置步骤期间,可以在每个网络组件处设置配置比特。这些比特控制例如复用器选择和流控制功能。网络可以包括多个网络,例如,数据路径网络和流控制路径网络。一个网络或多个网络可以利用不同的宽度(例如,第一宽度和更窄或更宽的宽度)的路径。在一个实施例中,数据路径网络具有比流控制路径网络的宽度更宽的(例如,比特传输)宽度。在一个实施例中,第一网络和第二网络中的每一个均包括它们自己的数据路径网络和流控制路径网络,例如,数据路径网络A和流控制路径网络A以及更宽的数据路径网络B和流控制路径网络B。
网络的某些实施例是无缓冲的,并且数据将在单个周期中在生产者与消费者之间移动。网络的某些实施例也是无界的,也就是说,网络横跨整个结构。在一个实施例中,一个PE将在单个周期中与任何其他PE进行通信。在一个实施例中,为了改进路由带宽,可以在多行PE之间并行地布置多个网络。
相对于FPGA,本文中的网络的某些实施例具有三个优势:面积、频率和程序表达。本文中的网络的某些实施例在粗粒度下操作,例如,这减少配置比特的数量,并且从而减少网络的面积。网络的某些实施例也通过直接地在电路(例如硅)中实现流控制逻辑来获得面积减少。硬化网络实施方式的某些实施例也享有优于FPGA的频率优势。由于面积和频率优势,可以存在其中在吞吐量均势时使用更低电压的功率优势。最后,网络的某些实施例尤其对于可变定时提供比FPGA线更好的高级语义,并且因此那些特定实施例更容易被编译器作为目标。本文中的网络的某些实施例可以被认为是用于构造分布式点对点数据通道的一组可组成的基元。
在某些实施例中,多播源可以不断言其数据有效,除非它从每个接收器接收到就绪信号。因此,可以在多播情况下使用额外的合取和控制比特。
像某些PE一样,可以静态地配置网络。在此步骤期间,在每个网络组件处设置配置比特。这些位控制例如复用器选择和流控制功能。我们的网络的正向路径需要一些比特来摆动其复用器。在图7A中所示的示例中,每跳需要四个比特:东西复用器各自利用一个比特,然而南向复用器利用两个比特。在此实施例中,四个比特可以被用于数据路径,但是7个比特可以被用于流控制功能(例如,在流控制路径网络中)。例如,如果CSA进一步利用南北方向,则其他实施例可以利用更多的比特。流控制功能可以针对流控制可能来自的每个方向利用控制比特。这可以使得能够静态地设置流控制功能的灵敏度。下表1概括了针对图7B中的网络的流控制功能的布尔代数实现,其中配置比特被大写。在此示例中,利用了七个比特。
表1:流实施方式
对于图7B中从左边起的第三流控制框,EAST_WEST_SENSITIVE和NORTH_SOUTH_SENSITIVE分别被描绘为设置来为粗线和虚线通道实现流控制。
图8图示了根据本公开的实施例的包括加速器802的硬件处理器块片800。加速器802可以是根据本公开的CSA。块片800包括多个高速缓存存储体(例如,高速缓存存储体808)。可以包括请求地址堆(RAF)电路810,例如,如在下面在部分3.2中所讨论的。ODI可以指代管芯上互连,例如,跨越将所有块片连接在一起的整个管芯展开的互连。OTI可以指代块片上互连,例如,跨越块片展开,例如,将块片上的高速缓存存储体连接在一起。
在实施例中,CSA 802可以被分割为两个或更多个区域以保护系统级程序(例如,OS)不受用户级程序影响和/或以保护用户级程序不受彼此影响。在下面描述的特许配置机制可以用于将空间结构的不同的部分(例如,部分802A和802B)指派给不同的程序(例如,基于进程标识符或PID(例如,PID0和PID1))以供其互斥使用,使得程序不能观察或者干扰驻留在同一空间结构中的其他程序的操作。也可以使用特许配置机制来将PID加载到结构存储器接口中。
3.1处理元件
在某些实施例中,CSA包括异构PE的阵列,其中结构由各自仅实现数据流操作符的子集的若干类型的PE组成。作为示例,图9示出了能够实现一大组整数和控制操作的PE的临时实施方式。其他PE(包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些PE)可以具有类似的实施方式样式,例如,其中适当的(数据流操作符)电路取代ALU。CSA的PE(例如,数据流操作符)可以在开始执行之前被配置(例如,编程)以实现来自PE支持的集合当中的特定数据流操作。配置可以包括一个或两个控制字,所述控制字指定控制ALU的操作码,引导PE内的各个复用器,并且使数据流进入和离开PE通道。可以通过对这些配置比特进行微编码来实现数据流操作符。图9中描绘的整数PE 900被组织为自顶向下流动的单级逻辑管线。数据从本地网络集中的一个进入PE 900,其中它被注册在输入缓冲器中以供后续操作。每个PE可以支持许多宽的面向数据的通道和窄的面向控制的通道。提供的通道的数量可以基于PE功能性而变化,但是面向整数的PE的一个实施例具有2个宽的和1-2个窄的输入和输出通道。尽管整数PE被实现为单周期管线,然而可以利用其他管线选择。例如,乘法PE可以具有多个管线级。
PE执行可以以数据流样式进行。基于配置微码,调度器可以检查PE入口和出口缓冲器的状态,以及,当用于所配置的操作的所有输入已到达并且操作的出口缓冲器可用时,通过数据流操作符(例如,在ALU上)编排操作的实际执行。结果得到的值可以被放在所配置的出口缓冲器中。一个PE的出口缓冲器与另一PE的入口缓冲器之间的转移可以随着缓冲变得可用而异步地发生。在某些实施例中,PE被提供为使得每周期完成至少一个数据流操作。部分2讨论了包含基元操作的数据流操作符,诸如加、异或或拾取。某些实施例可以提供能量、面积、性能和等待时间方面的优势。在一个实施例中,利用对PE控制路径的扩展,可以启用更多的融合组合。在一个实施例中,处理元件的宽度是64位,例如,以得到HPC中的双精度浮点计算的重度利用并且以支持64位存储器寻址。
3.2通信网络
CSA微架构的实施例提供一起提供跨越多个通信规模的等待时间不敏感通道的架构抽象的实施方式的网络的层次。CSA通信层次的最低级别可以是本地网络。本地网络可以是静态电路交换的,例如,使用配置寄存器来摆动本地网络数据路径中的(一个或多个)复用器以在通信PE之间形成固定电路径。在一个实施例中,每数据流图(例如,在与PE配置相同的时间)设置本地网络的配置一次。在一个实施例中,静态电路交换针对能量进行优化,例如,其中CSA通信业务的大多数(可能大于95%)将跨越本地网络。程序可以包括在多个表达式中使用的项。为了针对这种情况进行优化,本文中的实施例为本地网络内的多播提供硬件支持。若干本地网络可以被结成在一起以形成路由通道,例如,其散布(作为网格)在PE的行和列之间。作为优化,可以包括若干本地网络来承载控制令牌。与FPGA互连相比,可以以数据路径的粒度路由CSA本地网络,并且另一差异可以是CSA对控制的处理。CSA本地网络的一个实施例是显式地流控制的(例如,反压的)。例如,对于每个正向数据路径和复用器集,CSA将提供与正向数据路径物理上配对的后向流动流控制路径。两个微架构路径的组合可以提供等待时间不敏感通道抽象的低等待时间、低能量、低面积、点到点实施方式。在一个实施例中,CSA的流控制线对于用户程序不可见,但是它们可以由为用户程序服务的架构来操纵。例如,可以通过在检测到异常状况时将流控制线拉到“不存在”状态来实现在部分2.2中描述的异常处理机制。此动作可以不仅优雅地停止管线的在违规计算中涉及的那些部分,而且也可以保存导致异常的机器状态,例如,以用于诊断分析。第二网络层(例如,夹层网络)可以是共享分组交换网络。夹层网络(例如,通过图22中的虚线框示意性地指示的网络)可以以等待时间、带宽和能量为代价提供更一般的长距离通信。在路由良好的程序中大多数通信可以发生在本地网络上,并且因此相比之下将相当大地减少夹层网络提供,例如,每个PE可能连接到多个本地网络,但是CSA将提供每PE的逻辑邻域仅一个夹层端点。因为夹层实际上是共享网络,所以每个夹层网络可以承载多个逻辑上独立的通道,例如,并且被提供有多个虚拟通道。在一个实施例中,夹层网络的主要功能是为了在PE中间并在PE与存储器之间提供宽范围通信。除了这种能力之外,夹层也可以作为运行时支持网络来操作,例如,通过所述运行时支持网络,各种服务可以以用户程序透明的方式访问完整结构。在这种能力下,夹层端点可以例如在CSA配置期间充当其本地邻域的控制器。为了形成横跨CSA块片的通道,可以利用三个子通道和两个本地网络通道(其承载到和来自夹层网络中的单个通道的业务)。在一个实施例中,利用一个夹层通道,例如,一个夹层和两个本地=3个总网络跳数。
跨越网络层的通道的可组合性可以被以块片间、管芯间和结构粒度扩展到更高级网络层。
图9图示了根据本公开的实施例的处理元件900。在一个实施例中,操作配置寄存器919在配置(例如,映射)期间被加载并且指定此处理(例如,计算)元件将执行的(一个或多个)特定操作。寄存器920活动可以通过该操作(复用器916的输出,例如,由调度器914控制)来控制。例如,当输入数据和控制输入到达时,调度器914可以对处理元件900的一个或多个操作进行调度。控制输入缓冲器922连接到本地网络902(例如,并且本地网络902可以包括如在图7A中一样的数据路径网络和如在图7B中一样的流控制路径网络)并且在它到达(例如,网络具有(一个或多个)数据比特和(一个或多个)有效比特)时被加载值)。控制输出缓冲器932、数据输出缓冲器934和/或数据输出缓冲器936可以接收例如如通过操作(复用器916的输出)所控制的处理元件900的输出。每当ALU 918执行(也通过复用器916的输出来控制),可以加载状态寄存器938。控制输入缓冲器922和控制输出缓冲器932中的数据可以是单个比特。复用器921(例如,操作数A)和复用器923(例如,操作数B)可以寻找输入的来源。
例如,假设在图3B中此处理(例如,计算)元件的操作是(或者包括)所谓的调用拾取。处理元件900然后将从数据输入缓冲器924或数据输入缓冲器926中选择数据,例如,以去往数据输出缓冲器934(例如,默认)或数据输出缓冲器936。922中的控制比特因此可以在从数据输入缓冲器924中选择的情况下指示0,或者在从数据输入缓冲器926中选择的情况下指示1。
例如,假设在图3B中此处理(例如,计算)元件的操作是(或者包括)所谓的调用开关。处理元件900将例如从数据输入缓冲器924(例如,默认)或数据输入缓冲器926向数据输出缓冲器934或数据输出缓冲器936输出数据。922中的控制比特因此可以在向数据输出缓冲器934输出的情况下指示0,或者在向数据输出缓冲器936输出的情况下指示1。
多个网络(例如,互连)可以连接到处理元件,例如(输入)网络902、904、906和(输出)网络908、910、912。连接可以是开关,例如,如参考图7A和图7B所讨论的。在一个实施例中,每个网络包括两个子网络(或网络上的两个通道),例如,一个用于图7A中的数据路径网络并且一个用于图7B中的流控制(例如,反压)路径网络。作为一个示例,本地网络902(例如,设置为控制互连)被描绘为切换(例如,连接)到控制输入缓冲器922。在此实施例中,数据路径(例如,如在图7A中一样的网络)可以承载控制输入值(例如,一个或多个比特)(例如,控制令牌),并且流控制路径(例如,网络)可以承载来自控制输入缓冲器922的反压信号(例如,反压或非反压令牌),例如,以向上游生产者(例如,PE)指示新控制输入值将未被加载到(例如,发送到)控制输入缓冲器922中,直到反压信号指示在控制输入缓冲器922中存在用于新控制输入值(例如,来自上游生产者的控制输出缓冲器)的空间。在一个实施例中,新控制输入值可以不进入控制输入缓冲器922直到(i)上游生产者从“控制输入”缓冲器922接收到“空间可用”反压信号并且(ii)新控制输入值被从上游生产者发送为止,例如,并且这可以停止处理元件900直到那发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。
数据输入缓冲器924和数据输入缓冲器926可以类似地执行,例如,本地网络904(例如,设置为数据(与控制相反)互连)被描绘为切换(例如,连接)到数据输入缓冲器924。在此实施例中,数据路径(例如,如在图7A中一样的网络)可以承载数据输入值(例如,一个或多个比特)(例如,数据流令牌),并且流控制路径(例如,网络)可以承载来自数据输入缓冲器924的反压信号(例如,反压或非反压令牌),例如,以向上游生产者(例如,PE)指示新数据输入值将未被加载到(例如,发送到)数据输入缓冲器924中,直到反压信号指示在数据输入缓冲器924中存在用于新数据输入值(例如,来自上游生产者的数据输出缓冲器)的空间为止。在一个实施例中,新数据输入值可以不进入数据输入缓冲器924直到(i)上游生产者从“数据输入”缓冲器924接收到“空间可用”反压信号并且(ii)新数据输入值被从上游生产者发送为止,例如,并且这可以停止处理元件900直到那发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。可以在其相应的输出缓冲器(例如,932、934、936)中停止控制输出值和/或数据输出值,直到反压信号指示在输入缓冲器中存在用于(一个或多个)下游处理元件的可用空间为止。
可以从执行起停止处理元件900直到其操作数(例如,控制输入值及其对应的一个或多个数据输入值)被接收到为止和/或直到在处理元件900的(一个或多个)输出缓冲器中存在用于将通过对那些操作数执行操作而产生的数据的空间为止。
3.3存储器接口
请求地址堆(RAF)电路(其简化版本被示出在图10C中)可以负责执行存储器操作并且用作CSA结构与存储器层次之间的媒介。因此,RAF的主要微架构任务可以是为了使具有CSA结构的顺序语义的乱序存储器子系统合理化。在这种能力下,RAF电路可以被提供有完整缓冲器,例如,对存储器响应进行重新排序并且按照请求顺序将它们返回给结构的类似队列的结构。
然而,空间程序对于正确操作可能不需要任何排序,或者可以在存储器子系统外部对请求和响应进行自我排序。因此,本发明的实施例提供用于绕过存储器系统重新排序缓冲器(ROB)。
处理器通常允许多个存储器加载请求同时地在进行中以便减少由于存储器响应的等待时间而导致的性能损失。在通用机器上,加载使用寄存器来跟踪:加载指令指定目标寄存器并且加载的消费者读取目标寄存器。诸如粗粒度可重配置阵列之类的空间加速器不使用寄存器。替代地,存储器读取在请求通道上被发起并且响应在响应通道上到达。为了正确的计算,加速器必须具有用于使响应与其对应的请求相匹配的一些机制。用于完成这个的的一个方式是通过按照响应被请求的顺序返回它们。在具有高速缓存或存储体的复杂存储器子系统上,这不是最高效的方法。在高速缓存的高级别中命中的读取请求以更低等待时间返回,并且因此在高速缓存中未命中的较旧请求之前可用。已经响应于此问题而开发了至少两个方法。一个方法是插入ROB以跟踪未完成的读取请求。ROB消费读取响应并且对它们进行分类,使得读取响应被按照它们被请求的顺序返回给加速器。另一方法是向每个读取请求添加独特标记字段并且随着读取响应而返回该标记,从而可以将请求与响应进行匹配。两个方法都具有优势:第一个不太复杂,而第二个是更高性能,因为读取随着它们变得可用而被返回给加速器。
在本发明的实施例中,第一方法和第二方法的混合是为了添加用于指示读取响应是否应该在被返回之前被分类的标志。加速器客户端代码指示读取响应是否应该被排序。排序还是不重新排序的这个选择可以是静态的,其中配置的使用寿命有单一选择,或者是动态的,其中选择作为存储器系统命令的一部分被提供。
图10A图示了根据本公开的实施例的存储器重新排序绕过。块1052表示存储器请求被从CSA发送到的存储器子系统。该请求包含用于指示存储器重新排序是否将被执行的标记。块1054表示ROB,如果标记指示存储器重新排序将不被执行,则所述ROB被绕过。块1056表示通过标记控制的复用器,以在存储器重新排序将不被执行的情况下直接地从存储器子系统中选择第一输入或者在重新排序被执行的情况下从ROB中选择第二输入。
RAF电路的第二主要功能性可以是为了以地址转换和页面漫游器的形式提供支持。可以使用通道关联转换后备缓冲器(TLB)来将传入虚拟地址转换为物理地址。在实施例中,RAF电路可以包括用于绕过地址转换硬件(例如,页面漫游器和/或TLB)的路径,使得存储器接口可以按降低的功耗而操作。从CSA到存储器接口的请求可以包括用于指示所请求的地址是物理地址还是虚拟地址的标记。如果不需要地址转换(例如,所请求的地址是物理地址),则标记可以用于绕过和/或禁用地址转换硬件。
图10B图示了根据本公开的实施例的地址转换绕过。块1062表示从CSA到存储器接口的存储器请求。块1064表示存储器请求中或与存储器请求相关联的标记,所述标记用于指示所请求的地址将被转换(例如,要转换为物理地址的虚拟地址)还是不转换(例如,物理地址)。块1066表示地址转换逻辑,如果所请求的地址需要转换,则所述地址转换逻辑被启用和使用;和/或如果所请求的地址不需要转换则被绕过和/或禁用。块1068表示请求被按经转换的或未转换的地址发送到的存储器总线。
在各种实施例中,使用或者绕过地址转换硬件的选择可以是动态的或静态的(例如,其中对于配置的使用寿命进行单一选择)。在各种实施例中,选择机制可以在不同的转换机制之间选择(不是简单开或关)。例如,可以选择TLB样式转换机制、范围或分段转换方案或不转换中的任一种。
为了提供足够的存储器带宽,每个CSA块片可以包括多个RAF电路。像结构的各个PE一样,RAF电路可以在选择要执行的存储器操作之前通过在需要的情况下检查输入变元和输出缓冲的可用性来以数据流样式操作。然而,与一些PE不同,RAF电路在若干共址存储器操作之间复用。可以使用复用的RAF电路来使其各个子组件的面积开销最小化,例如,以共享加速器高速缓存接口(ACI)端口(在部分3.4中更详细地描述)、共享虚拟存储器(SVM)支持硬件、夹层网络接口和其他硬件管理设施。然而,存在也可以推动此选择的一些程序特性。在一个实施例中,(例如,有效的)数据流图将轮询共享虚拟存储器系统中的存储器。存储器等待时间绑定程序(例如图遍历)可以由于存储器相关控制流而利用许多单独的存储器操作以使存储器带宽饱和。尽管每个RAF可以被复用,然而CSA可以在块片粒度下包括多个(例如,在8与32之间)RAF以确保适当的高速缓存带宽。RAF可以经由本地网络和夹层网络两者与结构的其余部分进行通信。在RAF被复用的情况下,每个RAF可以被提供有到本地网络中的若干端口。这些端口可以用作到存储器的最小等待时间、高度确定性路径以用于由等待时间敏感或高带宽内存操作使用。此外,RAF可以被提供有夹层网络端点,例如,其提供对运行时服务和远程用户级存储器访问器的存储器访问。
图10C图示了根据本公开的实施例的请求地址堆(RAF)电路1000。在一个实施例中,在配置时间,在数据流图中的存储器加载和存储操作在寄存器1010中被指定。到数据流图中的那些存储器操作的弧然后可以连接到输入队列1022、1024和1026。从那些存储器操作起的弧因此将离开完成缓冲器1028、1030或1032。依赖性令牌(其可以是单个比特)到达到队列1018和1020中。依赖性令牌将从队列1016离开。依赖性令牌计数器1014可以是队列的紧凑表示并且跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器1014饱和,则可以不为新存储器操作生成附加依赖性令牌。因此,存储器排序电路(例如,图11中的RAF)可以停止对新存储器操作进行调度,直到依赖性令牌计数器1014变得不饱和为止。
作为加载的示例,地址到达调度器1012在1010中与加载相配的队列1022中。用于此加载的完成缓冲器槽被按照地址到达的顺序指派。假定图中的这个特定加载没有指定的依赖性,地址和完成缓冲器槽由调度器(例如,经由存储器命令1042)发送到存储器系统。当结果返回到复用器1040(示意性地示出)时,它被存储到它指定的完成缓冲器槽中(例如,随着它贯穿存储器系统承载目标槽)。完成缓冲器按照地址到达的顺序将结果发送回到本地网络(例如,本地网络1002、1004、1006或1008)中。
除了地址和数据两者必须在任何操作被发送到存储器系统之前到达之外,存储器可以是类似的。
图10D图示了根据本发明的实施例的对图10C的RAF电路的增强以实现用于共享存储器接口的QoS策略。RAF 1070包括分配器电路以提供用于实现QoS策略,所述QoS策略可以对使用固定贪婪策略来处理客户端存储器请求的RAF提供改进性能,在所述固定贪婪策略中,客户端请求在到达时被容许到RAF中,而不考虑RAF内的正在进行的活动。此贪婪方法可以导致RAF的客户端之间的不公平,这进而可以使加速器结构的性能降级。RAF 1070包括RAF分配器,即智能地管理客户端对RAF的访问的可编程硬件。以智能方式分配对RAF的访问可以显著地改进总体程序性能。
如图10D中所示,若干客户端存储器通道访问共享RAF 1070。这些通道承载客户端与RAF之间的请求和响应。到RAF的传入请求被分配用作完成缓冲器的共享存储器请求地址堆(RAF)中的槽。RAF中的请求可以乱序完成,但是RAF确保对客户端的响应被按顺序返回。RAF类似在处理器存储器系统中找到的完成缓冲器,但是包括用于管理多个存储器客户端的额外硬件。一旦请求在RAF中已被接受,它就将驻留在RAF中直到请求已完成并且响应(若有的话)已被请求客户端消耗为止。
RAF 1070包括可编程分配器,即许可开发者实现存储器分配策略的硬件架构。策略是通过在分配器中设置可编程寄存器来实现的。策略可以在判定哪些请求被接受时检查存储器子系统和存储器客户端中的状态。策略可以是自适应的并且包括随着时间的推移而跟踪存储器子系统的行为的状态元素。可以通过对分配器进行重新编程动态地改变策略,并且可以在加速器正在操作的同时改变策略。
在实施例中,RAF分配器可以由每客户端通道复制的以下状态元素构成:两个界限寄存器和跟踪与该通道相关联的进行中请求的数量的客户端占用计数器。界限寄存器指定通道未完成的请求的最大容许数量,并且是程序设计员可配置的。此外,分配器可以包括区域状态元素:区域占用计数器跟踪针对共享RAF和程序设计员可配置阈值寄存器的所有通道的进行中请求的数量。阈值寄存器和区域计数器用于在界限寄存器之间选择,从而许可分配器动态地适于存储器系统中的变化区域行为。如果区域使用率低于阈值,则使用“轻”界限寄存器。否则,使用“重”界限寄存器。图10E概括了这个一般策略的操作。
如下所述,一般分配器的程序设计员可配置寄存器可以由程序员静态地、在配置时间或者动态地、响应于在运行时间改变程序行为以实现策略A至E中的任一个来设置。如所描述的,每个策略可以替代地用固定硬件加以实现。
策略A:贪婪分配
请求一到达贪婪策略就将RAF槽分配给请求,而不考虑存储器子系统内的其他活动。为了使用分配器来实现贪婪策略,所有的‘轻’界限被设置为无穷大并且区域阈值寄存器也被设置为无穷大。在固定实施例中,因为贪婪策略不需要任何状态,所以它优化的实施方式不需要逻辑。贪婪分配很好地处理突发请求,因为单个客户端理论上可获得RAF中的所有缓冲。然而,在存在长等待时间高速缓存未命中时策略可以经历显著的性能降级。
策略B:静态分配
在此策略中,通过将“轻”界限寄存器和区域阈值设置为无穷大,每个存储器通道被给予固定数量的槽以使用。被给予给每个客户端的槽的数量不必相同,但是用于所有客户端的槽的总数必须小于RAF中的槽的总数。在固定实施例中,策略可以作为分支和界限寄存器被最低限度地实现。尽管可使用基于指针的RAF结构来实现静态分配,然而也可以使用基于数组索引的更简单策略。在极端情况下,分配给每个通道的缓冲器的大小可以用硬件固定。这产生简单性,但是不许可程序设计员配置。此策略对每个存储器客户端保证一些槽,并且因此保证QoS。然而,策略不处理诸如来自单个客户端的大请求突发之类的动态行为。
策略C:优先分配
此策略放宽对策略B的约束,即用于所有客户端的槽的和等于缓冲器槽的总数。与策略B不同,此策略需要基于指针的RAF结构,因为槽可以被动态地分配给不同的通道。然而,策略不需要“重”界限寄存器或区域计数器。此策略可以取决于界限寄存器的设置对每个存储器客户端保证一些槽,并且因此保证QoS。然而,如果该客户端具有高界限集,则策略确实支持来自单个客户端的请求突发。
策略D:基本水位
此策略利用区域使用率来改进存储器子系统的总体性能。在此策略中,阈值计数器被设置为某个“水位”值。‘轻’界限寄存器被设置为无穷大,然而‘重’界限寄存器被设置为1。在固定实施例中,此策略的最小实施方式是阈值变量和用于观察每个通道的空虚的某个逻辑。水位策略通过随着RAF变满而关闭具有进行中请求的客户端来对每个客户端保证最低QoS。水位策略避开策略A的许多问题极端情况,同时保留处理存储器业务的突发的能力。例如,如果存储器客户端具有长等待时间未命中,则它可部分地填充RAF,但是其他客户端将被保证至少一定空间。在固定实施例中,水位策略也需要最小实施方式面积。
策略E:优先水位
在RAF被重度利用的情况下,基本水位策略对每个客户端保证槽。在重度利用的情况下优先水位策略替代地为一个通道或一小组通道保证RAF中的所有剩余槽。为了实现这个,高优先级通道使其“重”界限寄存器被设置为无穷大,然而所有其他通道使“重”界限寄存器被设置为0。此策略不需要“轻”界限寄存器。优先水位策略有效地授予一通道或一组通道保证的QoS,同时许可在轻利用下处理其他通道中的突发。
图10F图示了增强存储器接口,其可以使用除了利用请求的地址之外还利用存储器请求的源的地址转换机制来提供降低的功耗。此额外信息许可简化转换缓存结构(例如,TLB)。
空间架构的特征是它们是分布式的。这些架构的存储器子系统并无不同:它们由许多分布式存储器接口组成。在一些情况下,这些接口可以被复用并且许多存储器接口可以对存储器共享单个端口。通过与要编索引到TLB结构中的请求地址相结合地使用存储器请求的源,可以使用更低关联性TLB来降低功耗,同时维持高关联性TLB的性能。
图10F示出了PE(底部)附连到虚拟存储器层次(顶部)的空间架构的存储器系统的高级视图。在这里,若干PE可以共享存储器接口,以期实现高度的存储器级并行性。一般流程是请求进入到请求缓冲器,它们被调度、转换,然后发出到存储器系统。存储器系统的特征是在微架构和策略判定中保留并使用关于哪一个通道做出了哪一个请求的信息。
图10G是图示了根据本发明的实施例的基于通道的TLB的框图。在此实施例中,通道标识符用于访问大但低关联性结构,然而地址用于访问可以具有更高关联性的共享/牺牲转换暂存器。这些访问可以是同时的或顺序的。如果转换被找到,则请求被从虚拟映射(转换)到物理并且由RAF进一步处理。否则,通道将被标记为停止并且页面漫游被发起以查找转换。
在转换未命中的情况下,请求通道被标记为停止。在满足未完成的请求之前,不从该通道发出另外的请求。未命中请求被放置在未命中状态保持寄存器(MSHR)中以便跟踪。来自其他通道的请求可以继续进行,直到TLB用光MSHR资源为止。
当加载转换时,页面表或第二级TLB将包含关于转换是否存在的信息。如果转换已知存在,则搜索通道转换并且转换被可选地加载到共享转换缓冲器中。
调度可以不在特定通道上重新开始直到其头部转换已解析为止。其他通道可以仍然参与调度。
3.4高速缓存
数据流图可以能够并行地生成大量(例如,字粒度)请求。因此,CSA的某些实施例给高速缓存子系统提供足够的带宽来为CSA服务。可以利用例如如图11中所示的重度堆积的高速缓存微架构。图11图示了根据本公开的实施例的具有耦合在多个加速器块片(1108、1110、1112、1114)与多个高速缓存存储体(例如,高速缓存存储体1102)之间的多个请求地址堆(RAF)电路(例如,RAF电路(1))的电路1100。在一个实施例中,RAF和高速缓存存储体的数量可以是1:1或1:2的比率。高速缓存存储体可以包含全高速缓存行(例如,与按字共享相比),其中每行在高速缓存中确切地具有一个起始位置。可以经由伪随机函数将高速缓存行映射到高速缓存存储体。CSA可以采纳SVM模型来与其他块片架构集成。某些实施例包括将RAF连接到高速缓存存储体的加速器高速缓存互连(ACI)网络。此网络可以在RAF与高速缓存之间承载地址和数据。ACI的拓扑可以是级联交叉开关,例如,作为等待时间与实现复杂度之间的折中。
3.5浮点支持
某些HPC应用通过它们对显著的浮点带宽的需要来表征。为了满足此需要,例如,取决于块片配置,可以给CSA的实施例提供多个(例如,各自在128与256之间)浮点加法和乘法PE。CSA可以提供几个其他扩展精度模式,例如,以简化数学库实施方式。CSA浮点PE可以支持单精度和双精度两者,但是更低精度PE可以支持机器学习工作负载。CSA可以提供比处理器核心高一个数量级的浮点性能。在一个实施例中,除了增加浮点带宽之外,为了给所有的浮点单元供电,在浮点运算中消耗的能量被减少。例如,为了减少能量,CSA可以选择性地选通浮点乘法器阵列的低位比特。在检查浮点算术的行为时,乘法数组的低位比特常常可能不影响最终舍入乘积。图12图示了根据本公开的实施例的分割成三个区域(结果区域、三个潜在进位区域(1202、1204、1206)和选通区域)的浮点乘法器1200。在某些实施例中,进位区域很可能影响结果区域并且选通区域不太可能影响结果区域。考虑g个比特的选通区域,最大进位(carry)可以是:
给定此最大进位,如果进位区域的结果小于2c-g,其中进位区域是c个比特宽,则可以忽略选通区域,因为它不影响结果区域。增加g意味着更可能将需要选通区域,然而增加c意味着在随机假定下,选通区域将不使用并且可以被禁用以避免能量消耗。在CSA浮点乘法PE的实施例中,利用了两级管线方法,其中首先进位区域被确定,然后在它被发现影响结果的情况下选通区域被确定。如果关于乘法的上下文的更多信息已知,则CSA更积极地调谐选通区域的大小。在FMA中,乘法结果可以被加到累加器,所述累加器常常比被乘数中的任何一个大得多。在这种情况下,可以在乘法之前观察加数指数并且CSDA可以相应地调整选通区域。CSA的一个实施例包括界定计算的最小结果的上下文值被提供给相关乘法器以便选择最小能量选通配置的方案。
3.6运行时服务
在某些实施例中,CSA包括异构和分布式结构,并且因此,运行时服务实施方式将以并行和分布方式容纳若干种类的PE。尽管CSA中的运行时服务可能是关键的,然而它们相对于用户级计算可以是不频繁的。某些实施方式因此集中于在硬件资源上叠加服务。为了满足这些目标,可以将CSA运行时服务转换为层次,例如,其中每个层对应于CSA网络。在块片级别下,单个面向外部控制器可以接受服务命令或者向具有CSA块片的关联核心发送服务命令。块片级控制器可以用来例如使用ACI网络来协调RAF处的区域控制器。进而,区域控制器可以协调某些夹层网络站点处的本地控制器。在最低级别下,服务特定微协议可以例如在通过夹层控制器控制的特殊模式期间在本地网络上执行。微协议可以许可每个PE(例如,按类型的PE类)根据它自己的需要来与运行时服务交互。并行性因此在此分层组织中是隐含的,并且在最低级别下的操作可以同时地发生。例如,取决于配置大小及其在存储器层次中的位置,此并行性可以使得能够在数百纳秒至几微秒之间配置CSA块片。CSA的实施例因此利用数据流图的性质来改进每个运行时服务的实施方式。一个关键观察结果是运行时服务可能仅需要保存数据流图的合法逻辑视图,例如,可通过数据流操作符执行的某种排序来产生的状态。服务一般地可能不需要保证数据流图的时间视图,例如,在特定时间点的CSA中的数据流图的状态。这可以许可CSA以分布式、管线和并行方式执行大多数运行时服务,例如,假设服务被编排以保存数据流图的逻辑视图。本地配置微协议可以是叠加在本地网络上的基于分组的协议。配置目标可以被组织到配置链中,例如,所述配置链被固定在微架构中。结构(例如,PE)目标可以被一次配置一个,例如,使用每目标的单个额外寄存器来实现分布式协调。为了开始配置,控制器可以驱动带外信号,所述带外信号将其邻域中的所有结构目标置于未配置的暂停状态中并且将本地网络中的复用器摆动到预定义形态。随着结构(例如,PE)目标被配置,即它们完全接收到它们的配置分组,它们可以设置它们的配置微协议寄存器,通知紧接在前的目标(例如,PE)它可以继续使用后续分组来配置。对配置分组的大小没有限制,并且分组可以具有动态可变长度。例如,配置常数操作数的PE可以具有被加长以包括常数字段(例如,图3B-3C中的X和Y)的配置分组。
图13图示了根据本公开的实施例的具有多个处理元件(例如,PE 1302、1304、1306、1308)的加速器1300的进行中配置。一旦被配置,PE就可以执行经受数据流约束。然而,涉及未配置的PE的通道可以由微架构禁用,例如,阻止任何未定义操作发生。这些性质允许CSA的实施例以分布式方式初始化和执行,而无论如何无需集中式控制。从未配置状态起,配置可以完全并行地发生,例如,可能和200纳秒一样少。然而,由于CSA的实施例的分布式初始化,PE可以变得活跃,例如在整个架构被配置之前很久向存储器发送请求。
图13也图示了用于将CSA分割成两个或更多个区域(例如,区域1320A和1320B)以保护系统级程序(例如,OS)不受用户级程序影响和/或以保护用户级程序不受彼此影响的本发明的实施例。此类区域可以利用用可配置特许状态元素(例如,边界比特1310)实现的保护边界(例如,保护边界1320)通过彼此保护,所述可配置特许状态元素可以被设置成防止非计划中的进程间通信。每个边界比特可以与特定网络交叉点(例如,图6中的开关610)相关联,并且,当边界比特处于第一状态(例如,低或清零)时,它可以对网络交叉点的操作没有影响。然而,当边界比特处于第二状态(例如,高或置位)时,它可以以阻止跨越边界的通信(除在特许配置期间之外,如下所述)的方式抑制网络交叉点的正常操作。例如,网络交叉口点可以将跨越边界引导的所有信号拉至低值。
因为CSA是“基于通道的”架构,所以在所有通信被隐式地流控制的意义上,本发明的实施例可以通过仅操纵通道通信协议的就绪/使能信号来在CSA中创建分区。特别地,可以对网络做出较少修改以使得有可能将这些信号拉至不活跃值。
取决于期望的保护水平与要容忍的开销的关系,可分割区域可以是粗糙的或精细的。在实施例中,边界比特可以在任何数量的网络交叉点处以提供用于利用在潜在边界之间的任何数量的网络交叉点和/或PE配置在结构中的那些点处的边界。
提取可以以与配置几乎相同的方式进行。本地网络可以遵照一次从一个目标中提取数据,并且提取用于实现分布式协调的状态比特。CSA可以将提取编排为非破坏性的,即,在提取完成时每个可提取目标已返回到其开始状态。在此实施方式中,目标中的所有状态可以以类似扫描的方式传播到束缚于本地网络的出口寄存器。但是可以通过在寄存器转移级(RTL)处引入新路径或者使用现有线路来以更低开销提供相同的功能性来实现就地提取。像配置一样,分层提取被并行地实现。
图14图示了根据本公开的实施例的进行中管线提取的快照1400。在提取的一些用例(诸如检查点)中,只要结构吞吐量被维持等待时间就可能不是问题。在这些情况下,可以以管线方式编排提取。图14中所示的这种布置许可大部分结构继续执行,然而窄区域为了提取而被禁用。可以协调和组成配置和提取以实现管线上下文切换。异常可以在性质上与配置和提取不同的原因在于,不是在指定的时间发生,而是它们在运行时期间的任何时间点出现在结构中的任何对方。因此,在一个实施例中,异常微协议可以未被叠加在被用户程序在运行时占用的本地网络上,并且利用它自己的网络。然而,就性质而言,异常对等待时间和带宽而言是稀少的且不敏感的。因此,CSA的某些实施例利用分组交换网络来将异常承载到本地夹层站点,例如,在它们被向服务层次上转发(例如,如在图29中一样)的地方。本地异常网络中的分组可能极其小。在许多情况下,仅两个至八个比特的PE标识(ID)足以作为完整分组,例如,因为CSA可以随着分组遍历异常服务层次而创建唯一异常标识符。这种方案可能是所希望的,因为它也减少在每个PE处产生异常的面积开销。
4. 编译
将用高级语言编写的程序编译到CSA上的能力对于行业采用来说可能是必要的。此部分给出用于CSA的实施例的编译策略的高级概述。首先是针对图示了理想的生产质量工具链的期望性质的CSA软件框架的提议。接下来,对原型编译器框架进行讨论。然后对“控制到数据流转换”进行讨论,例如,以将普通顺序控制流代码转换成CSA数据流汇编代码。
4.1示例生产框架
图15图示了根据本公开的实施例的用于加速器的编译工具链1500。此工具链将高级语言(诸如C、C++和Fortran)编译成要加速的特定区域的主机代码(LLVM)中间表示(IR)的组合。此编译工具链的CSA特定部分取LLVM IR作为其输入,优化并将此IR编译成CSA汇编,例如,为了性能在等待时间不敏感通道上添加适当的缓冲。它然后在硬件结构上放置并路由CSA汇编,并且配置PE和网络以用于执行。在一个实施例中,工具链支持CSA特定编译作为即时(JIT),结合来自实际执行的潜在运行时反馈。框架的关键设计特性之一是用于CSA的(LLVM)IR的编译,而不是使用更高级语言作为输入。虽然用专门为CSA设计的高级编程语言编写的程序可能实现最大性能和/或能量效率,但是由于转换现有代码库的困难,新的高级语言或编程框架的采纳可能在实践中慢且受限制。使用(LLVM)IR作为输入使得各式各样的现有程序能够可能在CSA上执行,例如,而无需创建新语言或者显著地修改想要在CSA上运行的新语言的前端。
4.2原型编译器
图16图示了根据本公开的实施例的用于加速器的编译器1600。编译器1600最初集中于通过(例如,Clang)前端对C和C++的提前编译。为了编译(LLVM)IR,编译器利用三个主要阶段在LLVM内实现CSA后端目标。首先,CSA后端将LLVM IR降低成用于顺序单元的目标特定机器指令,所述顺序单元实现与类似传统RISC的控制流架构(例如,具有分支和程序计数器)组合的大多数CSA操作。工具链中的顺序单元可以用作针对编译器和应用开发者两者的有用帮助,因为它使得能实现程序从控制流(CF)到数据流(DF)的增量变换,例如,一次将一段代码从控制流转换为数据流程并且验证程序正确性。顺序单元也可以提供用于处理在空间数组中不适合的代码的模型。接下来,编译器将此控制流转换成用于CSA的数据流操作符(例如,代码)。稍后在部分4.3中对此阶段进行描述。然后,CSA后端可以在数据流操作上运行它自己的优化遍数。最后,编译器可以以CSA汇编格式转储指令。此汇编格式被视为后级工具的输入,所述后级工具在实际的CSA硬件上放置并路由数据流操作。
4.3对数据流转换的控制
可以在控制到数据流转换遍数或简称数据流转换遍数中实现编译器的关键部分。此遍数采用以控制流程形式表示的功能,例如,具有在虚拟寄存器上操作的顺序机器指令的控制流程图(CFG),并且将它转换成在概念上为通过等待时间不敏感通道(LIC)连接的数据流操作(指令)的图的数据流功能。此部分给出此遍数的高级描述,描述了在某些实施例中它在概念上如何处理存储器操作、分支和循环。
直线代码
图17A图示了根据本公开的实施例的顺序汇编代码1702。图17B图示了根据本公开的实施例的图17A的顺序汇编代码1702的数据流汇编代码1704。图17C图示了根据本公开的实施例的用于加速器的图17B的数据流汇编代码1704的数据流图1706。
首先,考虑将直线顺序代码转换为数据流的简单情况。数据流转换遍数可以将顺序代码(诸如图17A中所示的代码)的基本块转换成CSA汇编代码,如图17B中所示。在概念上,图17B中的CSA汇编表示图17C中所示的数据流图。在此示例中,每个顺序指令被转换成匹配CSA汇编。.lic语句(例如,用于数据)声明对应于顺序代码中的虚拟寄存器(例如,Rdata)的等待时间不敏感通道。在实践中,数据流转换遍数的输入可以在编号的虚拟寄存器中。然而,为了清楚,此部分使用描述性寄存器名称。注意的是,在此实施例中在CSA架构支持加载和存储操作,从而与仅支持纯数据流的架构相比允许更多的程序运行。因为输入到编译器的顺序代码采用SSA(单静态指派)形式,所以对于简单的基本块来说,控制到数据流遍数可以将每个虚拟寄存器定义转换成等待时间不敏感通道上的单个值的产生。SSA形式允许虚拟寄存器的单个定义的多次使用,诸如在Rdata2中。为了支持此模型,CSA汇编代码支持相同LIC(例如,data2)的多次使用,同时模拟器隐式地创建LIC的必要副本。顺序代码与数据流代码之间的一个关键差异是在对存储器操作的处理中。图17A中的代码在概念上是串行的,这意味着addr3的load32 (ld32)应该似乎在addr的st32之后发生,以防addr和addr3地址重叠。
分支
为了将具有多个基本块和条件的程序转换为数据流,编译器生成特殊数据流操作符来替换分支。更具体地,编译器使用开关操作符来在原始CFG中的基本块的末尾引导传出数据,并且使用拾取操作符来在基本块的开头从适当的传入通道中选择值。作为具体示例,考虑基于若干输入a、i、x和n有条件地计算y的值的图18A-18C中的代码和对应数据流图。在计算分支条件测试之后,数据流代码使用开关操作符(例如,参见图3B-3C)来在测试为0的情况下将通道x中的值引导到通道xF,或者在测试为1的情况下引导到通道xT。类似地,拾取操作符(例如,参见图3B-3C)用于在测试为0的情况下将通道yF发送到y,或者在测试为1的情况下将通道yT发送到y。在此示例中,事实证明即使在条件的真分支中仅使用a的值,CSA也将包括开关操作符,其在测试为1时将它引导到通道aT,并且在测试为0时消费(吃)该值。此后者情况通过将开关的假输出设置为%ign来表达。简单地将通道a直接地连接到真路径可能不正确,因为在执行实际上取假路径的情况下,“a”的这个值将留在图中,从而导致a的不正确值用于功能的下一次执行。此示例突出了控制等价的性质,这是正确数据流转换的实施例中的关键性质。
控制等价:考虑具有两个基本块A和B的单入口单出口控制流程图G。如果通过G的所有完整控制流程路径访问A和B相同的次数,则A和B是控制等价的。
LIC替换:在控制流程图G中,假设基本块A中的操作定义虚拟寄存器x,并且基本块B中的操作使用x。然后只有当A和B是控制等价的时候,正确的控制到数据流变换才可用等待时间不敏感通道替换x。控制等价关系将CFG的基本块分割成强控制相关区域。图18A图示了根据本公开的实施例的C源代码1802。图18B图示了根据本公开的实施例的图18A的C源代码1802的数据流汇编代码1804。图18C图示了根据本公开的实施例的用于加速器的图18B的数据流汇编代码1804的数据流图1806。在图18A-18C中的示例中,在条件之前和之后的基本块彼此是控制等价的,但是真路径和假路径中的基本块各自在它们自己的控制相关区域中。用于将CFG转换为数据流的一个正确算法是使编译器插入(1)开关以补偿在不是控制等价的基本块之间流动的任何值的执行频率方面的失配,并且(2)在基本块的开头拾取以从基本块的任何传入值中正确地选择。为这些拾取和开关生成适当的控制信号可以是数据流转换的关键部分。
循环
数据流转换中的另一类重要的CFG是用于单入口单出口循环的CFG,这是在(LLVM)IR中生成的常见形式的循环。除了从循环的末尾回到循环头部块的单回边之外,这些循环可能是几乎非循环的。数据流转换遍数可以在分支方面使用相同的高级策略来转换循环,例如,它在循环的末尾插入开关以将值从循环中(在循环出口外或在到循环的开头的回边附近)导出值,并且在循环的开头插入拾取以在进入循环的初始值与通过回边进来的值之间选择。图19A图示了根据本公开的实施例的C源代码1902。图19B图示了根据本公开的实施例的图19A的C源代码1902的数据流汇编代码1904。图19C图示了根据本公开的实施例的用于加速器的图19B的数据流汇编代码1904的数据流图1906。图19A-19C示出了把循环归纳变量i的值以及所对应的数据流图加起来的示例do-while循环的C和CSA汇编代码。对于在概念上围绕着循环(i和总和)的每个变量,此图有控制这些值的流动的对应拾取/开关对。注意的是,即使n是循环不变的,此示例也使用拾取/开关对来在循环附近使n的值循环。n的这种重复使得能够将n的虚拟寄存器转换成LIC,因为它和n在循环外部的概念定义与n在循环内部的一个或多个使用之间的执行频率匹配。一般而言,为了正确的数据流转换,当寄存器被转换成LIC时住进循环中的寄存器将针对循环体内部的每次迭代被重复一次。类似地,在循环内被更新并且从循环中移出的寄存器将被消费,例如,同时从循环中发送单个最终值。循环将折痕(wrinkle)引入到数据流转换过程中,即针对在循环顶部的拾取和循环的底部的开关的控制偏移。例如,如果图18A中的循环执行三次迭代并退出,则对拾取器的控制应该是0、1、1,然而对转换开关的控制应该是1、1、0。这种控制是通过在函数于周期0(其在汇编中通过指令.value 0和.avail 0来指定)开始时按初始额外0启动拾取器通道并且然后将输出转换开关复制到拾取器中来实现的。注意的是,转换开关中的最后0使最终0恢复到拾取器中,从而确保数据流图的最终状态与其初始状态匹配。
图20A图示了根据本公开的实施例的流程图2000。描绘的流程2000包括:利用处理器的核心的解码器将指令解码成解码的指令2002;利用处理器的核心的执行单元执行经解码的指令以执行第一操作2004;接收包括多个节点的数据流图的输入2006;将数据流图叠加到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符2008;以及通过到达多个处理元件的数据流操作符中的每一个的相应的传入操作数集来与互连网络和多个处理元件一起执行数据流图的第二操作2010。
图20B图示了根据本公开的实施例的流程图2001。描绘的流程2001包括:接收包括多个节点的数据流图的输入2003;以及将数据流图叠加到处理器的多个处理元件、多个处理元件之间的数据路径网络和多个处理元件之间的流控制路径网络中,其中每个节点被表示为多个处理元件中的数据流操作符2005。
在一个实施例中,核心将命令写入到存储器队列中并且CSA(例如,多个处理元件)监视存储器队列并且在命令被读取时开始执行。在一个实施例中,核心执行程序的第一部分并且CSA(例如,多个处理元件)执行程序的第二部分。在一个实施例中,核心在CSA正在执行其操作的同时做其他工作。
5. CSA优势
在某些实施例中,CSA架构和微架构提供优于路线图处理器架构和FPGA的极深的能量、性能和可用性优势。在此部分中,这些架构被与CSA的实施例相比较并且突出CSA在相对于每个使并行数据流图加速时的优越性。
5.1处理器
图21图示了根据本公开的实施例的吞吐量对每操作能量图2100。如图21中所示,小核心一般地比大核心更高能效,并且,在一些工作负载中,可以通过更高核心计数将此优势转化为绝对性能。CSA微架构遵循这些观察结果到其结论并且去除(例如,大多数)与冯诺依曼架构相关联的耗能多的控制结构,包括大多数的指令侧微架构。通过去除这些开销并且实现简单的单操作PE,CSA的实施例获得密集的高效空间阵列。与通常相当串行的小核心不同,CSA可以例如经由电路交换本地网络将其PE结成在一起,以形成显式并行的聚合数据流图。结果是不仅在并行应用中而且在串行应用中也有性能。与可以在面积和能量方面为性能付出高昂代价的核心不同,CSA在其本机执行模式中已经是并行的。在某些实施例中,CSA既不需要推测来提高性能,它也不需要从顺序程序表示中重复地重新提取并行性,从而避免冯诺依曼架构中的两个主要能量税。CSA的实施例中的大多数结构是分布式的、小的且高能效的,与在核心中找到的集中式、庞大的耗能多的结构相反。考虑CSA中的寄存器的情况:每个PE可以具有几个(例如,10个或更少)存储寄存器。单独来看,这些寄存器可以比传统寄存器堆更高效。总的来说,这些寄存器可以提供大结构内寄存器堆的效果。结果,CSA的实施例避免由经典架构引发的大多数堆栈溢出和填充,同时每状态访问使用少得多的能量。当然,应用可以仍然访问存储器。在CSA的实施例中,存储器访问请求和响应在架构上解耦,使得工作负载能够每单位面积和能量保持更多未完成的存储器访问。这个性质为受高速缓存限制的工作负载产生基本上更高的性能并且减少在受存储器限制的工作负载中使主存储器饱和所需的面积和能量。CSA的实施例暴露了能量效率的非冯诺依曼架构独有的新形式。在(例如,大多数)PE处执行单个操作(例如,指令)的一个结果是操作数熵降低。在增量操作的情况下,每次执行可以导致少量的电路级切换和很少的能量消耗,在部分6.2中详细地检查的情况。相比之下,冯诺依曼架构是复用的,导致大量的比特转换。CSA的实施例的异步样式也使得能实现微架构优化,诸如在部分3.5中描述的难以在严格调度的核心管线中实现的浮点优化。因为PE可以是相对简单的并且它们在特定数据流图中的行为是静态已知的,所以与在更粗糙的架构中相比,可以更有效地应用时钟门控和功率门控技术。CSA PE和网络的实施例的图执行样式、小尺寸和可塑性一起使得能够表达许多种类的并行性:指令、数据、管线、矢量、存储器、线程和任务并行性可以全部被实现。例如,在CSA的实施例中,一个应用可以使用算术单元来提供高度的地址带宽,然而另一应用可以将那些相同的单元用于计算。在许多情况下,可以组合多种并行性以获得甚至更高的性能。许多的关键HPC操作可以既被复制又被管线化,从而导致数量级性能增益。相比之下,冯诺依曼样式核心通常针对由架构师精心选取的一种样式的并行性进行优化,导致不能捕获所有重要的应用内核。正如CSA的实施例暴露并方便许多形式的并行性一样,它不强制特定形式的并行性,或者更糟糕的是,为了从CSA中受益特定子例行程序存在于应用中。例如,即使当在没有修改的情况下编译时,许多应用(包括单流应用)也可以从CSA的实施例获得性能和能量益处两者。这扭转了需要大量程序设计员努力以在单流应用中获得实质上性能增益的长期趋势。实际上,在一些应用中,CSA的实施例从功能上等效的但更少的“现代”代码获得与从它们复杂的当代同辈表亲(cousin)相比更多的性能,所述同辈表亲已被折磨为以矢量指令为目标。
5.2 CSA实施例和FGPA的比较
作为CSA的实施例的基本架构的数据流操作符的选择将那些CSA与FGPA区分开,并且特别地CSA是用于由传统编程语言产生的HPC数据流图的优越加速器。数据流操作符是基本上异步的。这使得CSA的实施例不仅能够在微架构中具有大实现自由度,而且还使得它们能够简单地且简洁地适应抽象架构概念。例如,CSA的实施例自然地适应具有简单加载-存储接口的基本上异步的许多存储器微架构。一个人仅需要检查FPGA DRAM控制器以了解复杂度的差异。CSA的实施例也利用异步来像配置和提取一样提供更快且更全功能的运行时服务,这被认为比FPGA快4到6个数量级。通过使架构接口变窄,CSA的实施例在微架构级别下提供对大多数定时路径的控制。这允许CSA的实施例以比在FPGA中提供的更一般控制机制高得多的频率操作。类似地,时钟和复位(其对FPGA而言可能是架构上基本的)在CSA中是微架构的,例如,消除将它们作为可编程实体来支持的需要。数据流操作符对于大部分来说可以是粗粒度的。通过仅处理粗操作符,CSA的实施例改进结构的密度及其能耗两者:CSA直接地执行操作,而不是用查找表模拟它们。粗糙的第二结果是布局和布线问题的简化。在CSA的实施例中,CSA数据流图比FPGA网络表小许多数量级并且布局和布线时间相应地减少。例如,对于由传统编程语言产生的数据流图来说,CSA和FPGA的实施例之间的显著差异使CSA作为加速器变得更优越。
6.评估
CSA是相对于路线图处理器具有提供许多的性能和能量优势的潜力的新颖计算机架构。考虑计算单步幅地址以便跨越阵列漫游的情况。这种情况在HPC应用中可能是重要的,例如,HPC应用在计算地址偏移时花费大量整数努力。在地址计算以及特别是步幅地址计算中,一个变元是恒定的并且另一仅每计算略微变化。因此,在大多数情况下每周期仅少量比特切换。实际上,可以使用与对部分3.5中描述的浮点进位比特的限制类似的推导来示出,输入的不到两个比特平均对于步幅核算来说每计算切换,从而在随机切换分布上将能量减少50%。如果使用时分复用方法,则此能量节约的大部分可能丢失。在一个实施例中,CSA在核心上实现约3倍能量效率,同时递送8倍性能增益。通过CSA的实施例实现的并行性增益可以导致程序运行时间减少,从而产生泄漏能量的成比例的实质减少。在PE级别下,CSA的实施例是极其高能效的。CSA的第二重要问题是CSA是否在块片级别下消耗合理量的能量。因为CSA的实施例能够在每一周期在结构中执行每一浮点PE,所以它用作用于能量和功率消耗的合理上限,例如,使得大多数能量进入浮点乘法和加法。
7.另外的CSA细节
此部分讨论配置和异常处理的另外的细节。
7.1用于配置CSA的微架构
此部分公开了如何配置CSA(例如,结构)、如何快速地实现此配置并且如何使配置的资源开销最小化的示例。快速地配置结构可能在使更大算法的小部分加速时并且因此在扩大CSA的适用性时具有卓越重要性。该部分还公开了允许CSA的实施例被编程有不同长度的配置的特征。
CSA(例如,结构)的实施例可以不同于传统核心的原因在于它们利用配置步骤,其中结构的(例如,大)部分在程序执行之前被加载有程序配置。静态配置的优势可以是在运行时在配置上花费非常少的能量,例如,与几乎每周期花费能量取出配置信息(指令)的顺序核心相反。配置的先前的缺点是它是具有潜在大的等待时间的粗粒度步骤,这由于上下文切换的成本而对可在结构中加速的程序的大小设置底限。本公开描述了用于以分布式方式快速地配置空间阵列的可伸缩微架构,例如,其避免了先前的缺点。
如上面所讨论的,CSA可以包括通过PE间网络连接的轻量级处理元件。被视为控制数据流图的程序然后通过配置可配置结构元件(CFE)(例如,PE和互连(结构)网络)被映射到架构上。一般地,PE可以被配置为数据流操作符,并且一旦所有输入操作数到达PE,就发生某个操作,并且结果被转发给另一或多个PE以供消费或输出。这些PE可以通过专用虚拟电路来通信,该专用虚拟电路通过静态地配置电路交换通信网络而形成。这些虚拟电路可以是流控制的且完全反压的,例如,使得如果源没有数据或者目的地是满的则PE将停止。在运行时,数据可以流经实现所映射的算法的PE。例如,数据可以从存储器流入,通过结构,然后返回到存储器。这种空间架构可以相对于传统多核心处理器实现显著的性能效率:形式为PE的计算可以比更大核心更简单且更多并且通信可以是直接的,与存储器系统的扩展相反。
CSA的实施例可以不利用(例如,软件控制的)分组交换,例如,需要大量软件协助来实现的分组交换,这使配置变慢。CSA的实施例包括网络中的带外信令(例如,仅2-3个比特,取决于所支持的特征集)和固定配置拓扑以避免对于大量软件支持的需要。
CSA的实施例与FPGA中使用的方法之间的一个关键差异是CSA方法可以使用宽数据字,是分布式的,并且包括用于直接地从存储器取出程序数据的机制。CSA的实施例可以为了面积效率不利用JTAG样式单比特通信,例如,因为可能需要几毫秒来完全配置大FPGA结构。
CSA的实施例包括分布式配置协议和用于支持此协议的微架构。最初,配置状态可能驻留在存储器中。多个(例如,分布式)本地配置控制器(框)(LCC)可以例如使用一小组控制信号和结构提供的网络的组合来将整个程序的各部分流式传输到空间结构的其本地区域中。可以在每个CFE处使用状态元素来形成配置链,例如,允许个别CFE在没有全局寻址的情况下自我编程。
CSA的实施例包括用于形成配置链的特定硬件支持,例如,不是以增加配置时间为代价动态地建立这些链的软件。CSA的实施例不是纯粹分组交换的并且确实包括额外带外控制线(例如,不通过需要额外周期的数据路径来发送控制以选通此信息并且使此信息重新序列化)。CSA的实施例通过固定配置排序并且通过提供显式带外控制(例如,按至少两倍)来减小配置等待时间,同时不显著地增加网络复杂度。
CSA的实施例不将串行机制用于配置,其中数据使用类似JTAG的协议被逐比特流式传输到结构中。CSA的实施例利用粗粒度结构方法。在某些实施例中,将几条控制线或状态元素添加到面向64或32位CSA结构相对于将那些相同的控制机制添加到4或6位结构具有更低的成本。
图22图示了根据本公开的实施例的包括处理元件(PE)阵列和本地配置控制器(2202、2206)的加速器块片2200。每个PE、每个网络控制器和每个开关可以是例如通过CSA架构的实施例来配置(例如,编程)的可配置结构元件(CFE)。
CSA的实施例包括提供异构空间结构的高效、分布式、低等待时间配置的硬件。可以根据四种技术来实现这个。首先,例如,如在图22-24中一样,硬件实体本地配置控制器(LCC)被利用。LCC可以从(例如,虚拟)存储器取出配置信息的流。第二,可以包括配置数据路径,例如,其和PE结构的本机宽度一样宽并且其可以被叠加在PE结构之上。第三,可以将新控制信号接收到编排配置过程的PE结构中。第四,状态元素可以位于(例如,在寄存器中)每个可配置端点处,所述每个可配置端点跟踪相邻CFE的状态,从而允许每个CFE在没有额外控制信号的情况下不含糊地自我配置。这四种微架构特征可以允许CSA配置其CFE的链。为了获得低配置等待时间,可以通过构建许多LCC和CFE链来分割配置。在配置时间,这些可以独立地操作以并行地加载结构,例如,大幅地减少等待时间。作为这些组合的结果,可以(例如,在几百纳秒中)完全配置使用CSA架构的实施例所配置的结构。在下文中,公开了CSA配置网络的实施例的各种组件的详细操作。
图23A-23C图示了根据本公开的实施例的配置数据路径网络的本地配置控制器2302。描绘的网络包括多个复用器(例如,复用器2306、2308、2310),其可以被(例如,经由其相应的控制信号)配置成将一个或多个数据路径(例如,来自PE)连接在一起。图23A图示了为某个先前的操作或程序而配置(例如,设置)的网络2300(例如,结构)。图23B图示了选通配置信号的本地配置控制器2302(例如,包括用于发送和/或接收信号的网络接口电路2304)并且本地网络被设置为允许LCC向所有可配置结构元件(CFE)(例如,复用器)发送配置数据的默认配置(例如,如所描绘的)。图23C图示了LCC跨越网络选通配置信息,从而按照预定(例如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时它们可以立即开始操作。在另一实施例中,CFE等待开始操作直到结构已被完全配置(例如,如由配置终端器(例如,图25中的配置终端器2504和配置终端器2508)针对每个本地配置控制器所发信号通知的那样)为止。在一个实施例中,LCC通过发送特殊消息或者驱动信号来获得对网络结构的控制。它然后将配置数据选通(例如,在许多周期时期内)给结构中的CFE。在这些图中,复用器网络是某些图(例如,图6)中所示的“开关”的类似物。
本地配置控制器
图24图示了根据本公开的实施例的(例如,本地)配置控制器2402。本地配置控制器(LCC)可以是硬件实体,其负责加载结构程序的本地部分(例如,在块片的子集在或以其他方式),解释这些程序部分,然后通过在各种配置线上驱动适当的协议将这些程序部分加载到结构中。在这种能力下,LCC可能是专用顺序微控制器。
LCC操作可以在它接收到代码段的指针时开始。取决于LCC微架构,此指针(例如,存储在指针寄存器2406中)可以在网络上(例如,从CSA(结构)它本身内)或者通过对LCC的存储器系统访问而出现。当它接收到这种指针时,LCC可选地从结构的用于上下文存储的其部分中抽取相关状态,然后继续立即重配置它负责的结构的部分。由LCC加载的程序可以是用于结构的配置数据和用于LCC的控制命令的组合,例如,所述控制命令被轻编码。随着LLC在程序部分中流式传输,它可以将程序解释为命令流并且执行适当的编码动作来配置(例如,加载)结构。
在图22中示出了用于LCC的两个不同的微架构,例如,其中在CSA中利用一个或两个。第一个将LCC 2202放置在存储器接口处。在这种情况下,LCC可以对存储器系统做出要加载数据的直接请求。在第二种情况下LCC 2206被放置在存储器网络上,其中它可以仅间接地对存储器做出请求。在两种情况下,LCC的逻辑操作不变。在一个实施例中, LCC例如通过一组(例如,OS可见的)控制状态寄存器(CSR)被通知要加载的程序,所述控制状态寄存器将用于向个别LCC通知新程序指针等。
额外带外控制通道(例如,线)
在某些实施例中,配置依靠2-8个额外带外控制通道来像在下面所定义的那样改进配置速度,和/或启用特许配置。例如,配置控制器2402可以包括以下控制通道,例如,CFG_START控制通道2408、CFG_VALID控制通道2410、CFG_DONE控制通道2412和CFG_PRIV 2414,其中在下表2中对每个的示例进行讨论。
表2:控制通道
CFG_START 在配置的开头被断言。设置每个CFE处的配置状态并且设置配置总线。
CFG_VALID 表示配置总线上的值的有效性。
CFG_DONE 可选。表示特定CFE的配置的完成。这允许配置在CFE不需要附加配置的情况下短路。
CFG_PRIV 可选。可以在配置的开头被断言以指示特许配置的启用。
一般地,配置信息的处理可以被留给特定CFE的实施者。例如,可选功能CFE可以具有用于使用现有数据路径来设置寄存器的预防措施,然而固定功能CFE可能简单地设置配置寄存器。
由于当对一大组CFE进行编程时的长线延迟,CFG_VALID信号可以被视为用于CFE组件的时钟/锁存使能。因为此信号被用作时钟,所以在一个实施例中线路的占空比最多为50%。结果,配置吞吐量近似地减半。可选地,可以添加第二CFG_VALID信号以使得能实现连续编程。
在一个实施例中,在独立耦合(例如,线)上严格地传送仅CFG_START,例如,CFG_VALID和CFG_DONE可以被叠加在其他网络耦合之上。
在实施例中,可以使用CFG_PRIV信号来指示特许配置的开头并且向可配置特许状态元素(诸如边界比特,如上所述)指示它们应该根据配置微协议接受输入值。如上所述,将CFG_PRIV信号用于特许配置可以类似将CFG_START信号用于用户模式(非特许)配置。
在实施例中,特许配置模式可以由特许程序(诸如,OS)调用,以修改结构内的安全模式,例如,以像上面关于图13所描述的那样在多重编程的情况下设置结构中的动态分区。为了调用特许配置,特许程序可以使用与上述的配置接口类似或并行的特殊接口,诸如存储器映射接口(例如,CSR)或核心上的指令。可以分别使用处理器的虚拟存储器转换机制或特许模式来保护接口。
在调用特许配置后,块片级控制器将适当的配置消息发送到配置单元,所述配置单元然后将在其相应的子区域上调用特许配置。取决于微协议的选择(在下面描述),存储器接口单元可能需要附加的虚拟存储器转换机制来支持由调用程序使用的任何特许地址空间。在实施例中,可以使用各种特许配置模式和/或微协议。
在具有单独的配置模式的实施例中,特许配置可以与用户模式配置分离,但是可以使用在用户模式配置微协议中使用的相同的配置控制比特。因此,除了CFG_PRIV被断言以指示它是正被修改的特许配置比特之外,特许配置类似于用户模式配置。因为一般而言,这种形式的特许配置形式对大多数现有配置比特而言可以是非破坏性的,所以如果做出了几个修改,则可以在运行时调用它。特别地,当进入此配置模式时,本地网络复用器摆动以形成配置控制器与配置目标之间的路径。如果本地复用器状态被保持,则将不需要附加配置。一旦复用器在它的配置模式下的使用完成,复用器就回复到其原始配置。因此,可以能够设置特许比特,而无需重配置或者甚至停止正在运行的用户程序。可替选地,在没有这些修改的情况下,可以使用单独的配置来在尝试特许配置之前将CSA结构置于无操作状态。
在具有统一配置模式的实施例中,特许配置和用户模式配置可以使用相同的微协议。根据第一方法,特许配置与正常用户配置分开地发生。在这种情况下,特许配置的用户部分将是无操作配置。在后续用户配置期间,不使用特许配置模式,并且与权限比特相关联的配置被忽略或者未包括在用户配置二进制文件中。根据第二方法,特许配置状态将包括用于自动地绕过其配置的状态比特。
为了分割CSA,OS或其他特许代码可以首先为所期望的用户工作负载确定适当的设置并且基于所期望的分割构建特许配置文件,然后基于上述技术将特许配置文件分派给CSA。
在其中正向数据路径和后向控制路径可单独地配置的实施例中,如果恶意代码在一个方向上配置其数据路径并且在另一方向上配置其控制路径则可以存在安全弱点,因为数据路径可以由不同分区产生,然而控制路径可以由本地分区产生。为了减轻此弱点,可以使用单个配置状态来控制数据路径和控制路径切换两者。以这种方式,两个路径通过硬件以物理方式配对,使得能够通过简单地操纵控制路径来实现分割。
因此,用户可见的架构可以与特许架构分离,以便使可信代码库最小化并且许可用户级重配置。
网络资源的重用
为了减少配置的开销,CSA的某些实施例利用现有网络基础设施来传送配置数据。LCC可以利用芯片级存储器层次和结构级通信网络来将数据从储存器移动到结构中。结果,在CSA的某些实施例中,配置基础设施对总体结构面积和功率增加不多于2%。
CSA的某些实施例中的网络资源的重用可以使网络对于配置机制具有某种硬件支持。当‘CFG_START’信号被断言时,CSA的实施例的电路交换网络使LCC针对配置以特定方式设置它们的复用器。分组交换网络确实不需要扩展,但是LCC端点(例如,配置终端器)在分组交换网络中使用特定地址。网络重用是可选的,并且一些实施例可以发现专用配置总线是更方便的。
每CFE状态
每个CFE可以维护表示它是否已被配置的比特(参见例如图13)。此比特在当配置启动信号被驱动时可以被取消断言,然后一旦特定CFE已被配置就被断言。在一种配置协议中,CFE被布置成形成链,同时CFE配置状态比特确定该链的拓扑结构。CFE可以读取紧邻CFE的配置状态比特。如果此相邻CFE被配置并且当前CFE未被配置,则CFE可以确定任何当前配置数据针对当前CFE。当‘CFG_DONE’信号被断言时,CFE可以设置其配置比特,例如,使得上游CFE能够配置。作为配置过程的基本情况,可以在链的末尾包括断言它被配置的配置终端器(例如,图22中的用于LCC 2202的配置终端器2204或用于LCC 2206的配置终端器2208)。
在CFE内部,此比特可以用于驱动流控制就绪信号。例如,当配置比特被取消断言时,网络控制信号可以自动地被钳位到防止数据流动的值,然而,在PE内,将不对操作或其他动作进行调度。
处理高等待时间配置路径
LCC的一个实施例可以在长距离上驱动信号,例如,通过许多复用器并且利用许多负载。因此,信号可能难以在短时钟周期内到达遥远的CFE。在某些实施例中,配置信号处于主(例如,CSA)时钟频率的某个分频(例如,分数)下以在配置时确保数字定时规程。时钟分频可以被用在带外信令协议中,而不需要对主时钟树进行任何修改。
在配置期间确保一致结构行为
因为某些配置方案是分布式的并且由于程序和存储器效果而具有非确定性定时,所以可以在不同的时间配置结构的不同的部分。结果,CSA的某些实施例提供用于防止配置的CFE和未配置的CFE之间的不一致操作的机制。一般地,一致性被视为CFE本身所需要的并且由CFE本身维护的性质,例如,使用内部CFE状态。例如,当CFE处于未配置状态时,它可以宣称其输入缓冲器满,并且其输出无效。当被配置时,这些值将被设置为缓冲器的真实状态。随着足够的结构由配置产生,这些技术可以许可它开始操作。这具有进一步减少上下文切换等待时间的效果,例如,如果长等待时间存储器请求被很早发出的话。
可变宽度配置
不同的CFE可以具有不同的配置字宽度。对于较小的CFE配置字,实施者可以通过跨越网络线公正地指派CFE配置加载来使等待时间平衡。为了使网络线上的加载平衡,一个选项是将配置比特指派给网络线的不同部分以限制任何一条线上的净延迟。可以通过使用序列化/反序列化技术来处理宽数据字。可以在每结构基础上进行这些决定以优化特定CSA(例如,结构)的行为。网络控制器(例如,网络控制器2210和网络控制器2212中的一个或多个)可以与CSA(例如,结构)的每个域(例如,子集)进行通信,例如,以向一个或多个LCC发送配置信息。
7.2用于CSA的低等待时间并且用于为CSA及时地取出配置数据的微架构
CSA的实施例可以是使用户应用加速的高能效且高性能手段。当考虑程序(例如,其数据流图)是否可以被加速器成功地加速时,可以考虑用于配置加速器的时间和用于运行程序的时间两者。如果运行时间短,则配置时间可以在确定成功加速时起到大作用。因此,为了使可加速程序的域最大化,在一些实施例中配置时间变得尽可能短。可以在CSA中包括一个或多个配置高速缓存,例如,使得高带宽、低等待时间存储使得能实现快速重配置。接下来是配置高速缓存的若干实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可选地访问配置高速缓存以获得新配置信息。配置高速缓存可以作为传统基于地址的高速缓存或者在OS管理模式下操作,在所述OS管理模式下配置被存储在本地地址空间中并且通过参考该地址空间来寻址。如果配置状态位于高速缓存中,则在某些实施例中将不对后备暂存器做出请求。在某些实施例中,此配置高速缓存与存储器层次中的任何(例如,更低级)共享高速缓存分离。
图25图示了根据本公开的实施例的包括处理元件阵列、配置高速缓存(例如,2518或2520)和本地配置控制器(例如,2502或2506)的加速器块片2500。在一个实施例中,配置高速缓存2514与本地配置控制器2502位于一处。在一个实施例中,配置高速缓存2518位于本地配置控制器2506的配置域中,例如,其中第一域以配置终端器2504结束并且第二域以配置终端器2508结束)。配置高速缓存可以允许本地配置控制器可以在配置期间参考配置高速缓存,例如,以期与参考存储器相比以更低等待时间获得配置状态。配置高速缓存(储存器)可以是专用的或者可以作为结构内存储元件(例如,本地高速缓存2516)的配置模式被访问。
高速缓存模式
1. 需求高速缓存 - 在这种模式下,配置高速缓存作为真实高速缓存来操作。配置控制器发出基于地址的请求,其对照高速缓存中的标记被检查。未命中被加载到高速缓存中,然后可以在将来的重新编程期间被重新引用。
2. 结构内存储(便笺式存储器)高速缓存 - 在这种模式下配置高速缓存在它自己的小地址空间而不是主机的更大地址空间中接收对配置序列的引用。这可以提高存储器密度,因为用于存储标记的高速缓存的部分可以替代地用于存储配置。
在某些实施例中,配置高速缓存可以具有例如通过外部方向或内部方向预先加载到它中的配置数据。这可以允许减少加载程序的等待时间。本文中的某些实施例提供到配置高速缓存的接口,例如,即使配置已经正在结构中运行,所述接口也许可将新配置状态加载到高速缓存中。此加载的发起可以从内部或外部源发生。预先加载机制的实施例通过从配置路径中去除高速缓存加载的等待时间来进一步减少等待时间。
预取模式
1.显式预取 - 配置路径被扩增有新命令ConfigurationCachePrefetch。不是对结构进行编程,而是此命令简单地将相关程序配置加载到配置高速缓存中,而无需对结构进行编程。因为此机制搭载在现有的配置基础设施上,所以它既在结构内也在外部暴露,例如,暴露给访问存储器空间的核心和其他实体。
2. 隐式预取 - 全局配置控制器可以维护预取预测器,并且使用这个来例如以自动方式发起对配置高速缓存的显式预取。
7.3用于响应于异常对CSA快速重配置的硬件
CSA(例如,空间结构)的某些实施例包括大量的指令和配置状态,例如,其在CSA的操作期间大半是静态的。因此,配置状态可能易受软错误的影响。对这些软错误的快速无误恢复对于空间系统的长期可靠性和性能而言可能是至关重要的。
本文中的某些实施例提供快速配置恢复回路,例如,其中配置错误被检测并且结构的各部分立即重配置。本文中的某些实施例包括例如具有可靠性、可用性和可服务性(RAS)重新编程特征的配置控制器。CSA的某些实施例包括用于空间结构内的高速配置、错误报告和奇偶校验的电路。使用这三个特征的组合以及可选地配置高速缓存,配置/异常处理电路可以从配置中的软错误恢复。当被检测到时,软错误可以被传达给配置高速缓存,所述配置高速缓存发起对结构的(例如,该部分)的立即重配置。某些实施例提供专用重配置电路,例如,其比将在结构中间接地实现的任何解决方案快。在某些实施例中,位于一处的异常和配置电路协作以在配置错误检测时重新加载结构。
图26图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路(2618、2622)的配置和异常处理控制器(2602、2606)的加速器块片2600。在一个实施例中,当PE通过其本地RAS特征检测到配置错误时,它通过其异常生成器来向配置和异常处理控制器(例如,2602或2606)发送(例如,配置错误或重配置错误)消息。在接收到此消息时,配置和异常处理控制器(例如,2602或2606)发起位于一处的重配置电路(例如,分别为2618或2622)以重新加载配置状态。配置微架构继续并重新加载(例如,仅)配置状态,并且在某些实施例中,仅针对报告RAS错误的PE的配置状态。在重配置完成时,结构可以恢复正常操作。为了减小等待时间,由配置和异常处理控制器(例如,2602或2606)使用的配置状态可以源自配置高速缓存。作为配置或重配置过程的基本情况,可以在链的末尾包括断言它被配置(或者重配置)的配置终端器(例如,图26中的用于配置和异常处理控制器2602的配置终端器2604或用于配置和异常处理控制器2606的配置终端器2608)。
图27图示了根据本公开的实施例的重配置电路2718。重配置电路2718包括用于存储配置状态(或到其的指针)的配置状态寄存器2720。
7.4 用于结构发起的对CSA重配置的硬件
把CSA(例如,空间阵列)作为目标的应用的一些部分可以被不频繁地运行或者可以与程序的其他部分相互排斥。为了节省面积,为了改进性能和/或降低功率,在程序数据流图的若干不同部分之间时间复用空间结构的各部分可以是有用的。本文中的某些实施例包括CSA(例如,经由空间程序)可以用来请求对结构的一部分进行重新编程的接口。这可以使得CSA能够根据动态控制流动态地改变它自己。本文中的某些实施例允许结构发起的重配置(例如,重新编程)实现。本文中的某些实施例提供用于从结构内触发配置的一组接口。在一些实施例中,PE基于程序数据流图中的某个决定发出重配置请求。此请求可以游遍网络到我们的新配置界面,在那里它触发重配置。一旦重配置完成,就可以可选地返回通知完成的消息。CSA的某些实施例因此提供程序(例如,数据流图)定向重配置能力。
图28图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路2818的配置和异常处理控制器2806的加速器块片2800。这里,结构的一部分向例如配置和异常处理控制器2806和/或重配置电路2818的配置域发出对(重)配置的请求。域(重)配置它自己,并且当已经满足请求时,配置和异常处理控制器2806和/或重配置电路2818向结构发出响应,以通知结构(重)配置完成。在一个实施例中,配置和异常处理控制器2806和/或重配置电路2818在(重)配置正在进行的时间期间禁用通信,所以程序在操作期间没有一致性问题。
配置模式
按地址配置 - 在这种模式下,结构做出要从特定地址加载配置数据的直接请求。
按参考配置 - 在这种模式下,结构例如通过预先确定的参考ID来做出要加载新配置的请求。这可以简化要加载的代码的确定,因为代码的位置已被抽象。
配置多个域
CSA可以包括更高级配置控制器以支持多播机制来将配置请求投射(例如,经由通过虚线框指示的网络)到多个(例如,分布式或本地)配置控制器。这可以使得能够跨越结构的更大部分复制单个配置请求,例如,触发广泛的重配置。
7.5异常聚合器
CSA的某些实施例也可能经历异常(例如,异常状况),例如,浮点下溢。当发生这些状况时,可以调用特殊处理程序来校正程序或者终止程序。本文中的某些实施例提供用于处理空间结构中的异常的系统级架构。因为某些空间结构强调面积效率,所以本文中的实施例使总面积最小化,同时提供一般异常机制。本文中的某些实施例提供发信号通知在CSA(例如,空间阵列)内发生的异常状况的低面积手段。本文中的某些实施例提供用于传达此类异常的接口和信令协议以及PE级异常语义。本文中的某些实施例是专用异常处理能力,例如并且不需要由程序设计员显式处理。
CSA异常架构的一个实施例由例如图29-30中所示的四个部分构成。这些部分可以被按层次布置,其中异常从生产者流出,并且最终到达可以与例如核心的异常服务程序会合的块片级异常聚合器(例如,处理程序)。四个部分可以是:
1. PE异常生成器
2. 本地异常网络
3. 夹层异常聚合器
4. 块片级异常聚合器。
图29图示了根据本公开的实施例的包括处理元件阵列和耦合到块片级异常聚合器2904的夹层异常聚合器2902的加速器块片2900。图30图示了根据本公开的实施例的具有异常生成器3044的处理元件3000。
PE异常生成器
处理元件3000可以包括来自图9的处理元件900,例如,其中类似的数字是类似的组件,例如,本地网络902和本地网络3002。附加网络3013(例如,通道)可以是异常网络。PE可以实现到异常网络(例如,图30上的异常网络3013(例如,通道))的接口。例如,图30示出了这种接口的微架构,其中PE具有异常生成器3044(例如,发起异常有限状态机(FSM)3040以将异常分组(例如,BOXID 3042)选通输出到异常网络。BOXID 3042可以是本地异常网络内的异常产生实体(例如,PE或盒)的唯一标识符。当检测到异常时,异常生成器3044感测异常网络并且在网络被发现为空闲时选通输出BOXID。异常可以是由许多状况引起的,例如但不限于算术错误、对状态的失败ECC校验等。然而,也可能是异常数据流操作被引入,其想法是支持像断点这样的构造。
异常的发起可以通过执行程序设计员供应的指令来显式地发生,或者在检测到硬化错误状况(例如,浮点下溢)时隐式地发生。在异常时,PE 3000可以进入等待状态,在所述等待状态下它等待被例如在PE 3000外部的最终异常处理程序服务。如下所述,异常分组的内容取决于特定PE的实施方式。
本地异常网络
(例如,本地)异常网络将异常分组从PE 3000引导到夹层异常网络。异常网络(例如,3013)可以是由(例如,单条)控制线和一条或多条数据线构成的串行分组交换网络,例如,按照环形或树形拓扑组织,例如,针对PE的子集。每个PE可以在(例如,本地)异常网络中具有(例如,环形)站点,例如,其中它可仲裁以将消息注入到异常网络中。
需要注入异常分组的PE端点可以观察其本地异常网络出口点。如果控制信号指示忙,则PE将等待开始注入其分组。如果网络不忙,也就是说,下游站点没有分组要转发,则PE将继续开始注入。
网络分组可以是可变或固定长度的。每个分组可以以标识该分组的源PE的固定长度报头字段开始。这个后面是可变数量的包含信息的PE特定字段,例如,包括错误代码、数据值或其他有用的状态信息。
夹层异常聚合器
夹层异常聚合器2904负责将本地异常网络组装成更大分组并且将它们发送到块片级异常聚合器2902。夹层异常聚合器2904可以预先挂起具有它自己的唯一ID的本地异常分组,例如,确保异常消息是不含糊的。夹层异常集合器2904可以与夹层网络中的特殊仅异常虚拟通道对接,例如,确保异常的死锁自由度。
夹层异常聚合器2904也可以能够直接地为某些类别的异常服务。例如,可以使用夹层网络站点本地的高速缓存来从夹层网络中服务来自结构的配置请求。
块片级异常聚合器
异常系统的最后级是块片级异常聚合器2902。块片级异常聚合器2902负责收集来自各种夹层级异常聚合器(例如,2904)的异常并且将它们转发到适当的服务硬件(例如,核心)。因此,块片级异常聚合器2902可以包括一些内部表和控制器以使特定消息与处理程序例行例程相关联。可以直接地或者利用小型状态机为这些表编索引以便引导特定异常。
像夹层异常聚合器一样,块片级异常聚合器可以为一些异常请求服务。例如,它可以响应于特定异常而发起对PE结构的大部分的重新编程。
7.6提取控制器
CSA的某些实施例包括用于从结构中提取数据的(一个或多个)提取控制器。下面讨论如何快速地实现这种提取并且如何使数据提取的资源开销最小化的实施例。数据提取可以被用于如异常处理和上下文切换这样的关键任务。本文中的某些实施例通过引入允许提取具有可变且动态可变量的状态的可提取结构元件(EFE)(例如,PE、网络控制器和/或开关)的特征来从异构空间结构中提取数据。
CSA的实施例包括分布式数据提取协议和用于支持此协议的微架构。CSA的某些实施例包括多个本地提取控制器(LEC),其使用一(例如,小)组控制信号和结构提供的网络的组合来从空间结构的其本地区域中流式传输程序数据。可以在每个可提取结构元件(EFE)处使用状态元素来形成提取链,例如,允许个别EFE在没有全局寻址的情况下自我提取。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例包括例如用于形成提取链的特定硬件支持(例如,提取控制器),而不依靠软件来动态地建立这些链,例如,以增加提取时间为代价。CSA的实施例不是纯粹分组交换的并且确实包括额外的带外控制线(例如,不通过需要额外周期的数据路径来发送控制以选通此信息并使其重新序列化)。CSA的实施例通过固定提取顺序并且通过提供显式带外控制(例如,按至少两倍)来减小提取等待时间,然而不显著地增加网络复杂度。
CSA的实施例不将串行机制用于数据提取,其中数据使用类似JTAG的协议来从结构逐比特流式传输。CSA的实施例利用粗粒度结构方法。在某些实施例中,将几条控制线或状态元素添加到面向64或32位CSA结构相对于将那些相同的控制机制添加到4或6位结构具有更低的成本。
图31图示了根据本公开的实施例的包括处理元件阵列和本地提取控制器(3102、3106)的加速器块片3100。每个PE、每个网络控制器和每个开关可以是例如通过CSA架构的实施例来配置(例如,编程)的可提取结构元件(EFE)。
CSA的实施例包括从异构空间结构提供高效的、分布式、低等待时间提取的硬件。可以根据四种技术来实现这个。首先,例如,如在图31-33中一样,硬件实体本地提取控制器(LEC)被利用。LEC可以接受来自主机(例如,处理器核心)的命令,例如,从空间阵列中提取数据的流,并且将此数据写回到虚拟存储器以供由主机检查。第二,可以包括提取数据路径,例如,其和PE结构的本机宽度一样宽并且可以被叠加在PE结构之上。第三,可以将新控制信号接收到编排提取过程的PE结构中。第四,状态元素可以位于(例如,在寄存器中)每个可配置端点处,所述每个可配置端点跟踪相邻EFE的状态,允许每个EFE在没有额外的控制信号的情况下不含糊地导出其状态。这四种微架构特征可以允许CSA从EFE的链中提取数据。为了获得低数据提取等待时间,某些实施例可以通过在结构中包括多个(例如,许多)LEC和EFE链来分割提取问题。在提取时间,这些链可以独立地操作以并行地从结构中提取数据,例如,大幅地减少等待时间。作为这些组合的结果,CSA可以执行完整状态转储(例如,在几百纳秒中)。
图32A-32C图示了根据本公开的实施例的配置数据路径网络的本地提取控制器3202。描绘的网络包括可以(例如,经由其相应的控制信号)被配置成将一个或多个数据路径(例如,从PE起)连接在一起的多个复用器(例如,复用器3206、3208、3210)。图32A图示了为某个先前的操作或程序而配置(例如,设置)的网络3200(例如,结构)。图32B图示了选通提取信号的本地提取控制器3202(例如,包括发送和/或接收信号的网络接口电路3204)并且由LEC控制的所有PE进入提取模式。提取链(或提取终端器)中的最后PE可以根据(1)来自LEC的信号或(2)在内部产生的信号(例如,来自PE )来控制提取通道(例如,总线)和正在发送的数据。一旦完成,PE就可以设置其完成标志,例如,使得下一个PE能够提取其数据。图32C图示了最遥远的PE已完成提取过程并且结果它已设置其一个或多个提取状态比特,例如,其将复用器摆动到相邻网络中以使得下一个PE能够开始提取过程。所提取的PE可以恢复正常操作。在一些实施例中,PE可以保持被禁用直到采取了其他动作为止。在这些图中,复用器网络是某些图(例如,图6)中所示的“开关”的类似物。
以下部分描述提取网络的实施例的各种组件的操作。
本地提取控制器
图33图示了根据本公开的实施例的提取控制器3302。本地提取控制器(LEC)可以是负责接受提取命令、与EFE一起协调提取过程和/或存储提取的数据到(例如,到虚拟存储器)的硬件实体。在这个能力中,LEC可以是专用顺序微控制器。
LEC操作可以在它接收到将写入结构状态的缓冲器(例如,在虚拟存储器中)的指针以及可选地控制多少结构将被提取的命令时开始。取决于LEC微架构,此指针(例如,存储在指针寄存器3304中)可以在网络上或者通过对LEC的存储器系统访问而出现。当它接收到这种指针(例如,命令)时,LEC继续从它负责的结构的部分中提取状态。LEC可以将此从结构中提取的数据流式传输到由外部调用者提供的缓冲器中。
在图31中示出了用于LEC的两个不同的微架构。第一个将LEC 3102放置在存储器接口处。在这种情况下,LEC可以对存储器系统做出要写入提取的数据的直接请求。在第二种情况下LEC 3106被放置在存储器网络上,在所述存储器网络中它可以仅间接地对存储器做出请求。在两种情况下,LEC的逻辑操作可以不变。在一个实施例中,例如,通过一组(例如,OS可见的)控制状态寄存器,LEC被通知要从结构中提取数据的期望,所述控制状态寄存器将用于向个别LEC通知新命令。
额外的带外控制通道(例如,线)
在某些实施例中,提取依靠2-8个额外的带外信号来改进配置速度,如在下面所定义的那样。由LEC驱动的信号可以被标记为LEC。由EFE(例如,PE)驱动的信号可以被标记为EFE。配置控制器3302可以包括以下控制通道,例如,LEC_EXTRACT控制通道3406、LEC_START控制通道3308、LEC_STROBE控制通道3310和EFE_COMPLETE控制通道3312,其中在下表3中对每个的示例进行讨论。
表3:提取通道
LEC_EXTRACT 由LEC在提取过程期间断言的可选信号。降低此信号使正常操作恢复。
LEC_START 表示提取的开始的信号,允许建立本地EFE状态。
LEC_STROBE 用于控制EFE处的提取相关状态机的可选选通信号。EFE可以在一些实施方式中在内部生成此信号。
EFE_COMPLETE 当EFE已完成转储状态时选通的可选信号。这帮助LEC标识个别EFE转储的完成。
一般地,提取的处理可以被留给特定EFE的实施者。例如,可选功能EFE可以具有用于使用现有数据路径来转储寄存器的预防措施,然而固定功能EFE可能简单地具有复用器。
由于当对一大组EFE进行编程时的长线延迟,LEC_STROBE信号可以被视为用于EFE组件的时钟/锁存使能。因为此信号被用作时钟,所以在一个实施例中线路的占空比最多为50%。结果,提取吞吐量近似地减半。可选地,可以添加第二LEC_STROBE信号以使得能实现连续提取。
在一个实施例中,在独立耦合(例如,线)上严格地传送仅LEC_START,例如,其他控制通道可以被叠加在现有网络(例如,线)上。
网络资源的重用
为了减少数据提取的开销,CSA的某些实施例利用现有网络基础设施来传送提取数据。LEC可以利用芯片级存储器层次和结构级通信网络将数据两者来将数据从结构移动到存储器中。结果,在CSA的某些实施例中,提取基础设施对总体结构面积和功率添加不多于2%。
CSA的某些实施例中的网络资源的重用可以使网络对于提取协议具有某种硬件支持。当‘LEC_START’信号被断言时,CSA的某些实施例的电路交换网络需要使LEC针对配置以特定方式设置其复用器。分组交换网络不需要扩展,但是LEC端点(例如,提取终端器)在分组交换网络中使用特定地址。网络重用是可选的,并且一些实施例可以发现专用配置总线是更方便的。
每EFE状态
每个EFE可以维护表示它是否已导出其状态的比特。此比特可以在提取开始信号被驱动时取消断言,然后一旦特定EFE结束提取就断言。在一个提取协议中,EFE被布置成形成链,同时EFE提取状态比特确定该链的拓扑结构。EFE可以读取紧邻EFE的提取状态比特。如果此相邻EFE使其提取比特置位并且当前EFE未使其提取比特置位,则EFE可以确定它拥有提取总线。当EFE转储其最后数据值时,它可以驱动‘EFE_DONE’信号并且设置其提取比特,例如,使得上游EFE能够配置用于提取。与EFE相邻的网络可以观察此信号并且也调整其状态以处理转变。作为提取过程的基本情况,可以在链的末尾包括断言提取完成的提取终端器(例如,图22中的用于LEC 3102的提取终端器3104或用于LEC 3106的提取终端器3108)。
在EFE内部,此比特可以用于驱动流控制就绪信号。例如,当提取比特被取消断言时,网络控制信号可以自动地被钳位到防止数据流动的值,然而,在PE内,将不对操作或动作进行调度。
处理高延迟路径
LEC的一个实施例可以例如通过许多复用器并且利用许多负载来在长距离上驱动信号。因此,信号可能难以在短时钟周期内到达遥远的EFE。在某些实施例中,提取信号处于主(例如,CSA)时钟频率的某个分频(例如,分数)下以在提取时确保数字定时规程。时钟分频可以被用在带外信令协议中,并且不需要对主时钟树进行任何修改。
在提取期间确保一致结构行为
因为某些提取方案是分布式的并且由于程序和存储器效果而具有非确定性定时,所以结构的不同成员在不同的时间在提取之下。在LEC_EXTRACT被驱动的同时,所有网络流控制信号可以被驱动为逻辑低,例如,从而冻结结构的特定分段的操作。
提取过程可以是非破坏性的。因此一旦提取已完成,一组PE就可以被认为是可操作的。对提取协议的扩展可以允许PE可选地在提取后被禁用。可替选地,在提取过程期间开始配置在实施例中将具有类似的效果。
单个PE提取
在一些情况下,提取单个PE可能是有利的。在这种情况下,可选地址信号可以作为提取过程的开始的一部分被驱动。这可以使得针对提取的PE能够被直接地启用。一旦此PE已被提取,提取过程就可以随着LEC_EXTRACT信号的降低而停止。以这种方式,可以例如通过本地提取控制器来选择性地提取单个PE。
处理提取反压
在其中LEC将提取的数据写入到存储器(例如,以用于后处理,例如,在软件中)的实施例中,它可以经受有限的存储器带宽。在LEC耗尽其缓冲容量或者预期它将耗尽其缓冲能力的情况下,它可能停止选通LEC_STROBE信号直到缓冲问题已解决为止。
注意的是,在某些图 (例如,图22、图25、图26、图28、图29和图31)中示意性地示出了通信。在某些实施例中,那些通信可以发生在(例如,互连)网络上。
7.7流程图
图34A图示了根据本公开的实施例的流程图3400A。描绘的流程3400A包括:利用处理器的核心的解码器将指令解码成解码的指令3402A;利用处理器的核的执行单元执行经解码的指令以执行第一操作3404A;接收包括多个节点的数据流图的输入3406A;将数据流图叠加到处理器的处理元件阵列中,其中每个节点被表示为处理元件阵列中的数据流操作符3408A;以及当传入操作数集到达处理元件阵列时利用处理元件阵列执行数据流图的第二操作3410A。
图34B图示了根据本公开的实施例的流程图3400B。描绘的流程3400B包括:利用处理器的核心的解码器将指令解码成解码的指令3402B;利用处理器的核心的执行单元执行经解码的指令以执行第一操作3404B;接收包括多个节点的数据流图的输入3406B;将数据流图叠加到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符3408B;以及当传入操作数集到达多个处理元件时利用互连网络和多个处理元件执行数据流图的第二操作3410B。
图35图示了根据本公开的实施例的流程图3500。描绘的流程3500包括:将处理器的多个处理元件和多个处理元件之间的互连网络分割成第一部分和第二部分3502;向多个处理元件的第一子集指派第一程序3504;向多个处理元件的第二子集指派第二程序3506;接收包括第一多个节点的第一数据流图的第一输入3508;将第一数据流图叠加到第一部分中,其中第一多个节点中的每一个被表示为多个处理元件的第一子集中的数据流操作符3510;接收包括第二多个节点的第二数据流图的第二输入3512;将第二数据流图叠加到第一部分中,其中第一多个节点中的每一个被表示为多个处理元件的第一子集中的数据流操作符3514;当第一传入操作数集到达多个处理元件的第一子集时利用互连网络的第一部分和多个处理元件的第一子集执行第一数据流图的第一操作3516;以及当第二传入操作数集到达多个处理元件的第二子集时利用互连网络的第二部分和多个处理元件的第二子集执行第二数据流图的第二操作3518。
8. 概要
ExaFLOP规模的超级计算可能是高性能计算中的挑战,这是不可能通过传统冯诺依曼架构满足的挑战。为了实现ExaFLOP,CSA的实施例提供把(例如,编译器产生的)数据流图的直接执行作为目标的异构空间阵列。除了展示CSA的实施例的架构原理之外,上文也描述并评估示出了优于现有产品的大于10倍的性能和能量的CSA的实施例。编译器生成的代码可以具有优于路线图架构的显著性能和能量收益。作为异构参数架构,CSA的实施例可以容易地适于所有计算用途。例如,CSA的移动版本可能被调谐到32比特,然而机器学习集中阵列可能以大量的矢量化8位乘法单元为特色。CSA的实施例的主要优势是高性能和极端的能量效率、与范围从超级计算和数据中心到物联网的所有形式的计算相关的特性。
在一个实施例中,一种处理器包括:多个处理元件;以及所述多个处理元件之间的互连网络,其用于接收各自包括多个节点的两个数据流图的输入,其中,第一数据流图和第二数据流图将被叠加到分别为所述互连网络的第一部分和第二部分以及分别为所述多个处理元件的第一子集和第二子集中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件的所述第一子集和所述第二子集将在传入第一操作数集和传入第二操作数集分别到达所述多个处理元件时分别执行第一操作和第二操作。
在实施例中,一种处理器包括:多个处理元件;以及所述多个处理元件之间的互连网络,其用于接收包括第一多个节点的第一数据流图的第一输入,其中,所述第一数据流图将被叠加到所述互连网络的第一部分和所述多个处理元件的第一子集中,其中所述第一多个节点中的每个节点被表示为所述多个处理元件的所述第一子集中的数据流操作符,并且所述多个处理元件的所述第一子集将在第一传入操作数集到达所述多个处理元件的所述第一子集时执行第一操作;所述互连网络也将接收包括第二多个节点的第二数据流图的第二输入,其中,所述第二数据流图将被叠加到所述互连网络的第二部分和所述多个处理元件的第二子集中,其中所述第二多个节点中的每一个被表示为所述多个处理元件的所述第二子集中的数据流操作符,并且所述多个处理元件的所述第二子集将在第二传入操作数集到达所述多个处理元件的所述第二子集时执行第二操作。
可以将所述多个处理元件的所述第一子集指派给第一程序并且可以将所述多个处理元件的所述第二子集指派给第二程序。可以将所述互连网络分割成所述第一部分和所述第二部分以保护所述第一程序和所述第二程序不受彼此影响。所述第一程序可以是用户级程序。所述第二程序可以是系统级程序。所述第二程序可以是用户级程序。可以通过要用可配置特许状态元素实现的边界保护所述第一程序和所述第二程序不受彼此影响。所述可配置特许状态元素可以被配置成防止跨越所述边界的通信。
在实施例中,一种方法包括:将处理器的多个处理元件和所述多个处理元件之间的互连网络分割成第一部分和第二部分;接收包括第一多个节点的第一数据流图的第一输入;将所述第一数据流图叠加到所述第一部分中,其中所述第一多个节点中的每一个被表示为所述多个处理元件的第一子集中的数据流操作符;接收包括第二多个节点的第二数据流图的第二输入;将所述第二数据流图叠加到所述第二部分中,其中所述第二多个节点中的每一个被表示为所述多个处理元件的第二子集中的数据流操作符;当第一传入操作数集到达所述多个处理元件的所述第一子集时利用所述互连网络的所述第一部分和所述多个处理元件的所述第一子集执行所述第一数据流图的第一操作;以及当第二传入操作数集到达所述多个处理元件的所述第二子集时利用所述互连网络的所述第二部分和所述多个处理元件的所述第二子集执行所述第二数据流图的第二操作。
所述方法也可以包括:向所述多个处理元件的所述第一子集指派第一程序;以及向所述多个处理元件的所述第二子集指派第二程序。可以将所述互连网络分割成所述第一部分和所述第二部分以保护所述第一程序和所述第二程序不受彼此影响。所述第一程序可以是用户级程序。所述第二程序可以是系统级程序。所述第二程序可以是用户级程序。可以通过要用可配置特许状态元素实现的边界来保护所述第一程序和所述第二程序不受彼此影响。所述分割可以包括配置所述可配置特许状态元素以防止跨越所述边界的通信。
在一个实施例中,一种处理器包括:多个处理元件;以及所述多个处理元件之间的互连网络,其用于接收包括多个节点的数据流图的输入,其中,所述数据流图将被叠加到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
当来自下游处理元件的反压信号指示所述下游处理元件中的储存器不可用于所述处理元件的输出时,所述多个处理元件中的处理元件可以停止执行。所述处理器可以包括流控制路径网络以根据所述数据流图承载所述反压信号。数据流令牌可以使来自接收到所述数据流令牌的数据流操作符的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述操作可以包括存储器访问并且所述多个处理元件包括将在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前不执行所述存储器访问的存储器访问数据流操作符。所述多个处理元件可以包括第一类型的处理元件和第二不同类型的处理元件。
在另一实施例中,一种方法:接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的多个处理元件和所述处理器的所述多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符;以及通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来利用所述互连网络和所述多个处理元件执行所述数据流图的操作。所述多个处理元件被分割以保护程序不受彼此影响。
所述方法可以包括:当来自下游处理元件的反压信号指示所述下游处理元件中的储存器不可用于所述处理元件的输出时,停止通过所述多个处理元件中的处理元件的执行。所述方法可以包括根据所述数据流图在流控制路径网络上发送所述反压信号。数据流令牌可以使来自接收到所述数据流令牌的数据流操作符的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可以包括:在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前不执行存储器访问,其中,所述操作包括所述存储器访问并且所述多个处理元件包括存储器访问数据流操作符。所述方法可以包括提供所述多个处理元件的第一类型的处理元件和第二不同类型的处理元件。
在又一个实施例中,一种设备包括:多个处理元件之间的数据路径网络;以及所述多个处理元件之间的流控制路径网络,其中,所述数据路径网络和所述流控制路径网络将接收包括多个节点的数据流图的输入,所述数据流图将被叠加到所述数据路径网络、所述流控制路径网络以及每个节点被表示为多个处理元件中的数据流操作符的所述多个处理元件中,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
所述流控制路径网络可以根据所述数据流图向多个数据流操作符承载反压信号。在所述数据路径网络上发送到数据流操作符的数据流令牌可以使来自所述数据流操作符的输出被发送到所述数据路径网络上的所述多个处理元件中的特定处理元件的输入缓冲器。所述数据路径网络可以是静态电路交换网络以根据所述数据流图将所述相应的输入操作数集承载到所述数据流操作符中的每一个。所述流控制路径网络可以从下游处理元件根据所述数据流图来发送反压信号以指示所述下游处理元件中的储存器不可用于所述处理元件的输出。所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径可以形成具有反压控制的通道化电路。所述流控制路径网络可以串行地使所述多个处理元件中的至少两个管线化。
在另一实施例中,一种方法包括:接收包括多个节点的数据流图的输入;以及将所述数据流图叠加到处理器的多个处理元件、所述多个处理元件之间的数据路径网络和所述多个处理元件之间的流控制路径网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符。所述多个处理元件被分割以保护程序不受彼此影响。
所述方法可以包括根据所述数据流图来利用所述流控制路径网络将反压信号承载到多个数据流操作符。所述方法可以包括在所述数据路径网络上向数据流操作符发送数据流令牌以使来自所述数据流操作符的输出被发送到所述数据路径网络上的所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可以包括设置所述数据路径网络的多个开关和/或所述流控制路径网络的多个开关以根据所述数据流图将所述相应的输入操作数集承载到所述数据流操作符中的每一个,其中,所述数据路径网络是静态电路交换网络。所述方法可以包括从下游处理元件根据所述数据流图来利用所述流控制路径网络发送反压信号以指示所述下游处理元件中的储存器不可用于所述处理元件的输出。所述方法可以包括利用所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径形成具有反压控制的通道化电路。
在又一个实施例中,一种处理器包括:多个处理元件;以及所述多个处理元件之间的网络装置,其用于接收包括多个节点的数据流图的输入,其中,所述数据流图将被叠加到所述网络装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
在另一实施例中,一种设备包括:多个处理元件之间的数据路径装置;以及所述多个处理元件之间的流控制路径装置,其中,所述数据路径装置和所述流控制路径装置将接收包括多个节点的数据流图的输入,所述数据流图将被叠加到所述数据路径装置、所述流控制路径装置和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将通过到达所述多个处理元件的所述数据流操作符中的每一个的相应的传入操作数集来执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
在一个实施例中,一种处理器包括用于接收包括多个节点的数据流图的输入的处理元件阵列,其中,所述数据流图将被叠加到所述处理元件阵列中,其中每个节点被表示为所述处理元件阵列中的数据流操作符,并且所述处理元件阵列将在传入操作数集到达所述处理元件阵列时执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
在所述传入操作数集到达所述处理元件阵列并且所述处理元件阵列中的储存器可用于所述第二操作的输出之前,所述处理元件阵列可以不执行所述操作。所述处理元件阵列可以包括用于将数据流令牌和控制令牌承载到多个数据流操作符的网络(或(一个或多个)通道)。所述操作可以包括存储器访问,并且所述处理元件阵列可以包括在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前将不执行所述存储器访问的存储器访问数据流操作符。每个处理元件可以执行所述数据流图的仅一个或两个操作。
在另一实施例中,一种方法包括:接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的处理元件阵列中,其中每个节点被表示为所述处理元件阵列中的数据流操作符;以及当传入操作数集到达所述处理元件阵列时利用所述处理元件阵列执行所述数据流图的操作。所述多个处理元件被分割以保护程序不受彼此影响。
在所述传入操作数集到达所述处理元件阵列并且所述处理元件阵列中的储存器可用于所述第二操作的输出之前,所述处理元件阵列可以不执行所述操作。所述处理元件阵列可以包括将数据流令牌和控制令牌承载到多个数据流操作符的网络。所述操作可以包括存储器访问,并且所述处理元件阵列可以包括在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前将不执行所述存储器访问的存储器访问数据流操作符。每个处理元件可以执行所述数据流图的仅一个或两个操作。
在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的处理元件阵列中,其中每个节点被表示为所述处理元件阵列中的数据流操作符;以及当传入操作数集到达所述处理元件阵列时利用所述处理元件阵列执行所述数据流图的操作。所述多个处理元件被分割以保护程序不受彼此影响。
在所述传入操作数集到达所述处理元件阵列并且所述处理元件阵列中的储存器可用于所述第二操作的输出之前,所述处理元件阵列可以不执行所述操作。所述处理元件阵列可以包括将数据流令牌和控制令牌承载到多个数据流操作符的网络。所述操作可以包括存储器访问,并且所述处理元件阵列包括在从逻辑上先前的数据流操作符接收到存储器依赖性令牌之前将不执行所述存储器访问的存储器访问数据流操作符。每个处理元件可以执行所述数据流图的仅一个或两个操作。
在另一实施例中,一种处理器包括用于接收包括多个节点的数据流图的输入的装置,其中,所述数据流图将被叠加到所述装置中,其中每个节点被表示为所述装置中的数据流操作符,并且所述装置将在传入操作数集到达所述装置时执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
在一个实施例中,一种处理器包括:核心,所述核心具有用于将指令解码成解码的指令的解码器和用于执行经解码的指令以执行第一操作的执行单元;多个处理元件;以及所述多个处理元件之间的互连网络,其用于接收包括多个节点的数据流图的输入,其中,所述数据流图将被叠加到所述互连网络和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将在传入操作数集到达所述多个处理元件时执行第二操作。所述多个处理元件被分割以保护程序不受彼此影响。
所述处理器还可以包括多个配置控制器,每个配置控制器耦合到所述多个处理元件的相应子集,并且每个配置控制器将从储存器加载配置信息并且根据所述配置信息来引起所述多个处理元件的相应子集的耦合。所述处理器可以包括多个配置高速缓存,并且每个配置控制器耦合到相应的配置高速缓存以取出用于所述多个处理元件的相应子集的所述配置信息。由所述执行单元执行的所述第一操作可以将配置信息预取到所述多个配置高速缓存中的每一个中。所述多个配置控制器中的每一个可以包括用于在从至少一个处理元件接收到配置错误消息时引起针对所述多个处理元件的相应子集中的至少一个处理元件的重配置的重配置电路。所述多个配置控制器中的每一个可以是用于在接收到重配置请求消息时引起针对所述多个处理元件的相应子集的重配置的重配置电路,并且禁用与所述多个处理元件的相应子集的通信直到所述重配置完成为止。所述处理器可以包括多个异常聚合器,并且每个异常聚集器耦合到所述多个处理元件的相应子集以从所述多个处理元件的相应子集收集异常并且将所述异常转发到所述核心以便服务。所述处理器可以包括多个提取控制器,每个提取控制器耦合到所述多个处理元件的相应子集,并且每个提取控制器将使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另一实施例中,一种方法包括:利用处理器的核心的解码器将指令解码成解码的指令;利用所述处理器的所述核心的执行单元执行经解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的多个处理元件和所述处理器的所述多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符;以及当传入操作数集到达所述多个处理元件时利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述多个处理元件被分割以保护程序不受彼此影响。
所述方法可以包括:从储存器为所述多个处理元件的相应子集加载配置信息并且根据所述配置信息来引起针对所述多个处理元件的每个相应子集的耦合。所述方法可以包括从多个配置高速缓存中的相应的配置高速缓存取出用于所述多个处理元件的相应子集的所述配置信息。由所述执行单元执行的所述第一操作可以是将所述配置信息预取到所述多个配置高速缓存的每一个中。所述方法可以包括在从至少一个处理元件接收到配置错误消息时引起针对所述多个处理元件的相应子集中的至少一个处理元件的重配置。所述方法可以包括:在接收到重配置请求消息时引起针对所述多个处理元件的相应子集的重配置;以及禁用与所述多个处理元件的相应子集的通信直到所述重配置完成为止。所述方法可以包括:从所述多个处理元件的相应子集收集异常;以及将所述异常转发到所述核心以便服务。所述方法可以包括使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在又一个实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:利用处理器的核心的解码器将指令解码成解码的指令;利用所述处理器的所述核心的执行单元执行经解码的指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图叠加到所述处理器的多个处理元件和所述处理器的所述多个处理元件之间的互连网络中,其中每个节点被表示为所述多个处理元件中的数据流操作符;以及当传入操作数集到达所述多个处理元件时利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述多个处理元件被分割以保护程序不受彼此影响。
所述方法可以包括:从储存器为所述多个处理元件的相应子集加载配置信息并且根据所述配置信息来引起针对所述多个处理元件的每个相应子集的耦合。所述方法可以包括从多个配置高速缓存中的相应的配置高速缓存取出用于所述多个处理元件的相应子集的所述配置信息。由所述执行单元执行的所述第一操作可以是将所述配置信息预取到所述多个配置高速缓存的每一个中。所述方法可以包括在从至少一个处理元件接收到配置错误消息时引起针对所述多个处理元件的相应子集中的至少一个处理元件的重配置。所述方法可以包括:在接收到重配置请求消息时引起针对所述多个处理元件的相应子集的重配置;以及禁用与所述多个处理元件的相应子集的通信直到所述重配置完成为止。所述方法可以包括:从所述多个处理元件的相应子集收集异常;以及将所述异常转发到所述核心以便服务。所述方法可以包括使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另一实施例中,一种处理器包括:多个处理元件;以及所述多个处理元件之间的装置,其用于接收包括多个节点的数据流图的输入,其中,所述数据流图将被叠加到m和所述多个处理元件中,其中每个节点被表示为所述多个处理元件中的数据流操作符,并且所述多个处理元件将在传入操作数集到达所述多个处理元件时执行操作。所述多个处理元件被分割以保护程序不受彼此影响。
在又一个实施例中,一种设备包括数据存储装置,其存储当由硬件处理器执行时使所述硬件处理器执行本文中所公开的任何方法的代码。设备可以如详细描述中所描述的。方法可以如详细描述中所描述的。
在另一实施例中,一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括本文中所公开的任何方法的方法。
指令集(例如,用于由核心执行)可以包括一种或多种指令格式。除了别的之外,给定指令格式可以定义用于指定要执行的操作(例如,操作码)和将对其执行操作的(一个或多个)操作数的各种字段(例如,比特的数量、比特的位置)和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常处于相同的顺序,但是至少一些具有不同的比特位置,因为包括有更少的字段)和/或定义成具有不同地解释的给定字段。因此,ISA的每条指令均使用给定指令格式(并且如果被定义,则在该指令格式的指令模板中的给定一个中)来表达并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码以及包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地和源2)的操作数字段的指令格式;并且在指令流中出现ADD指令将在选择特定操作数的操作数字段中具有特定内容。被称为高级矢量扩展(AVX)(AVX1和AVX2)并且使用矢量扩展(VEX)编码方案的SIMD扩展集已被释放和/或发布(例如,参见Intel® 64 and IA-32 Architectures Software DevelopeR’s Manual(架构软件开发者指南), 2016年6月;并且参见Intel® Architecture Instruction Set ExtensionsProgramming Reference(架构指令集扩展编程参考), 2016年2月)。
示例性指令格式
可以按照不同的格式具体实现本文中所描述的(一个或多个)指令的实施例。附加地,在下面对示例性系统、架构和管线进行详述。(一个或多个)指令的实施例可以在此类系统、架构和管线上被执行,但是不限于详述的那些。
通用矢量友好指令格式
矢量友好指令格式是适于矢量指令的指令格式(例如,存在特定于矢量运算的某些字段)。虽然描述了通过矢量友好指令格式来支持矢量运算和标量运算的实施例,但是替代实施例仅使用矢量友好指令格式的矢量运算。
图36A-36B是图示了根据本公开的实施例的通用矢量友好指令格式及其指令模板的框图。图36A是图示了根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图;然而图36B是图示了根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。具体地,通用矢量友好指令格式3600是为A类和B类指令模板而定义的,其两者都不包括存储器访问3605指令模板和存储器访问3620指令模板。在矢量友好指令格式的上下文中通用的术语指代不束缚于任何特定指令集的指令格式。
虽然将描述其中矢量友好指令格式支持下列的本公开的实施例:具有32比特(4字节)或64比特(8字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小)(并且因此,64字节矢量由16个双字大小元素或者替换地8个四字大小元素构成);具有16比特(2字节)或8比特(1字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小);具有32比特(4字节)、64比特(8字节)、16比特(2字节)或8比特(1字节)数据元素宽度(或大小)的32字节矢量操作数长度(或大小);以及具有32比特(4字节)、64比特(8字节)、16比特(2字节)或8比特(1字节)数据元素宽度(或大小)的16字节矢量操作数长度(或大小);替代实施例可以支持具有更多的、更少的或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多的、更少的和/或不同的矢量操作数大小(例如,256字节矢量操作数)。
图36A中的A类指令模板包括:1)在无存储器访问3605指令模板内示出了无存储器访问完全舍入控制类型运算3610指令模板和无存储器访问数据变换类型运算3615指令模板;并且2)在存储器访问3620指令模板内示出了存储器访问临时3625指令模板和存储器访问非临时3630指令模板。图36B中的B类指令模板包括:1)在无存储器访问3605指令模板内示出了无存储器访问写入掩码控制、部分舍入控制类型运算3612指令模板和无存储器访问写入掩码控制VSIZE类型运算3617指令模板;并且2)在存储器访问3620指令模板内示出了存储器访问写入掩码控制3627指令模板。
通用矢量友好指令格式3600包括在下面按照图36A-36B中所图示的顺序列举的以下字段。
格式字段3640—此字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,并且因此唯一地标识指令流中的矢量友好指令格式的指令的出现。因此,此字段在对于仅有通用矢量友好指令格式的指令集来说它是不需要的意义上是可选的。
基础运算字段3642—其内容区分不同的基础运算。
寄存器索引字段364—其内容直接地或者通过地址生成来指定源操作数和目的地操作数的位置,而无论它们在寄存器中还是在存储器中。这些包括足够数量的比特以从PxQ(例如32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。虽然在一个实施例中N可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多的或更少的源和目的地寄存器(例如,可以支持其中这些源中的一个也作为目的地的多达两个源,可以支持其中这些源中的一个也作为目的地的多达三个源,可以支持多达两个源和一个目的地)。
修饰符字段3646—其内容区分指定存储器访问的通用矢量指令格式的指令的出现和不指定存储器访问的那些;也就是说,在无存储器访问3605指令模板与存储器访问3620指令模板之间。存储器访问操作读取和/或写入到存储器层次(在一些情况下使用寄存器中的值来指定源和/或目的地地址),然而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中此字段也在三种不同的方式之间进行选择以执行存储器地址计算,但是替代实施例可以支持更多的、更少的或不同的方式来执行存储器地址计算。
扩增运算字段3650—其内容区分除了基础运算之外还要执行各种不同运算中的哪一个运算。此字段是上下文特定的。在本公开的一个实施例中,此字段被划分成类字段3668、α字段3652和β字段3654。扩增运算字段3650允许在单个指令而不是2、3或4个指令中执行公共组运算。
定标字段3660—其内容允许用于存储器地址生成(例如,用于使用2scale * 索引+基址的地址生成)的索引字段的内容的定标实现。
位移字段3662A—其内容被用作存储器地址生成(例如,用于使用2scale * 索引+基址+位移的地址生成)的一部分。
位移因子字段3662B(注意,位移字段3662A直接在位移因子字段3662B上的并置指示一个或另一个被使用)—其内容被用作地址生成的一部分;它指定将按存储器访问的大小(N)来定标的位移因子—其中N是存储器访问中(例如,用于使用2scale * 索引+基址+定标位移的地址生成)的字节的数量。冗余低位比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(N)以便生成要在计算有效地址时使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段3674(稍后在本文中描述)和数据操纵字段3654C来确定。位移字段3662A和位移因子字段3662B在它们未被用于无存储器访问3605指令模板和/或不同的实施例可以仅实现这两个中的一个或者都不实现的意义上是可选的。
数据元素宽度字段3664—其内容区分许多数据元素宽度中的哪一个将被使用(在一些实施例中用于所有指令;在其他实施例中用于仅一些指令)。此字段在如果支持仅一个数据元素宽度和/或使用操作码的某个方面来支持数据元素宽度则它是不需要的意义上是可选的。
写入掩码字段3670—其内容在每数据元素位置基础上控制目的地矢量操作数中的数据元素位置是否反映基础运算和扩增运算的结果。A类指令模板支持合并写入掩码处理,然而B类指令模板支持合并写入掩码处理和归零写入掩码处理两者。当合并时,矢量掩码允许目的地中的任何元素集在任何操作(由基础运算和扩增运算指定)的执行期间被保护免于更新;在其他一个实施例中,保存对应掩码比特具有0的目的地的每个元素的旧值。相比之下,当归零时矢量掩码允许目的地中的任何元素集在任何操作(由基础运算和扩增运算指定)的执行期间被归零;在一个实施例中,当对应掩码比特具有0值时目的地的元素被设置为0。这个功能性的子集是用于控制正在执行的操作的矢量长度(即,从第一个到最后一个的正在修改的元素的跨度)的能力;然而,被修改的元素不一定是连续的。因此,写入掩码字段3670允许部分矢量运算,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段3670的内容选择许多写入掩码寄存器中的包含要使用的写入掩码的一个(并且因此写入掩码字段3670的内容间接地标识要执行的那个掩码处理)的本公开的实施例,但是替代实施例替代地或附加地允许掩码写入字段3670的内容直接地指定要执行的掩码处理。
立即数字段3672—其内容允许立即数的指定。此字段在它不存在于不支持立即数的通用矢量友好格式的实施方式中并且它不存在于不使用立即数的指令中的意义上是可选的。
类字段3668—其内容区分不同类的指令。参考图36A-B,此字段的内容在A类指令和B类指令之间选择。在图36A-B中,圆角正方形用于指示在字段中存在特定值(例如,分别在图36A-B中用于类字段3668的类别A 3668A和类别B 3668B)。
A类的指令模板
在A类的非存储器访问3605指令模板的情况下,α字段3652被解释为RS字段3652A,其内容区分不同的扩增运算类型中的哪一种类型将被执行(例如,舍入3652A.1和数据变换3652A.2分别被指定用于无存储器访问、舍入类型运算3610和无存储器访问、数据变换类型运算3615指令模板),然而β字段3654区分所指定的类型的运算中的哪一个将被执行。在无存储器访问3605指令模板中,定标字段3660、位移字段3662A和位移定标字段3662B不存在。
无存储器访问指令模板—完全舍入控制类型运算
在无存储器访问完全舍入控制类型运算3610指令模板中,β字段3654被解释为舍入控制字段3654A,其(一个或多个)内容提供静态舍入。虽然在所描述的本公开的实施例中舍入控制字段3654A包括抑制所有浮点异常(SAE)字段3656和舍入运算控制字段3658,但是替代实施例可以支持可以将这些概念两者编码到相同字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入运算控制字段3658)。
SAE字段3656—其内容区分是否禁用异常事件报告;当SAE字段的3656的内容指示抑制被启用时,给定指令不报告任何种类的浮点异常标志并且不产生任何浮点异常处理程序。
舍入运算控制字段3658—其内容区分要执行一组舍入运算中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,舍入运算控制字段3658允许在每指令基础使舍入模式改变。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入运算控制字段3650的内容重载该寄存器值。
无存储器访问指令模板—数据变换类型运算
在无存储器访问数据变换类型运算3615指令模板中,β字段3654被解释为数据变换字段3654B,其内容区分许多数据变换中的哪一个将被执行(例如,无数据变换、混合(swizzle)、广播)。
在A类的存储器访问3620指令模板的情况下,α字段3652被解释为驱逐提示字段3652B,其内容区分驱逐提示中的哪一个将被使用(在图36A中,临时3652B.1和非临时3652B.2是分别为存储器访问临时3625指令模板和存储器访问非临时3630指令模板而指定的),然而β字段3654被解释为数据操纵字段3654C,其内容区分许多数据操纵运算(也被称为基元)中的哪一个将被执行(例如,不操纵;广播;对源的上转换;以及对目的地的下转换)。存储器访问3620指令模板包括定标字段3660,并且可选地包括位移字段3662A或位移定标字段3662B。
矢量存储器指令利用转换支持来执行从存储器的矢量加载和到存储器的矢量存储。与规则矢量指令一样,矢量存储器指令以逐数据元素方式转移来自/到存储器的数据,其中被实际地转移的元素通过被选择作为写入掩码的矢量掩码的内容来规定。
存储器访问指令模板—临时
临时数据是很可能被足够快重用以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
存储器访问指令模板—非临时
非临时数据是不太可能被足够快重用以受益于在第一级高速缓存中高速缓存的数据并且应该被优先考虑驱逐。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
B类的指令模板
在B类的指令模板的情况下,α字段3652被解释为写入掩码控制(Z)字段3652C,其内容区分通过写入掩码字段3670控制的写入掩码处理应该是合并还是归零。
在B类的非存储器访问3605指令模板的情况下,β字段3654的一部分被解释为RL字段3657A,其内容区分不同的扩增运算类型中的哪一种将被执行(例如,舍入3657A.1和矢量长度(VSIZE)3657A.2是分别为无存储器访问、写入掩码控制、部分舍入控制类型运算3612指令模板和无存储器访问、写入掩码控制、VSIZE类型运算3617指令模板而指定的),然而β字段3654的其余部分区分所指定的类型的运算中的哪一个将被执行。在无存储器访问3605指令模板中,定标字段3660、位移字段3662A和位移定标字段3662B不存在。
在无存储器访问、写入掩码控制、部分舍入控制类型运算3610指令模板中,β字段3654的其余部分被解释为舍入运算字段3659A并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不产生任何浮点异常处理程序)。
舍入运算控制字段3659A—就像舍入运算控制字段3658一样,其内容区分要执行一组舍入运算中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,舍入运算控制字段3659A允许在每指令基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入运算控制字段3650的内容重载该寄存器值。
在无存储器访问、写入掩码控制、VSIZE类型运算3617指令模板中,β字段3654的其余部分被解释为矢量长度字段3659B,其内容区分许多数据矢量长度中的哪一个将被执行(例如,128、256或512字节)。
在B类的存储器访问3620指令模板的情况下,β字段3654的一部分被解释为广播字段3657B,其内容区分广播类型数据操纵运算是否将被执行,然而β字段3654的其余部分被解释为矢量长度字段3659B。存储器访问3620指令模板包括定标字段3660,并且可选地包括位移字段3662A或位移定标字段3662B。
关于通用矢量友好指令格式3600,完整操作码字段3674被示出为包括格式字段3640、基础运算字段3642和数据元素宽度字段3664。虽然示出了其中完整操作码字段3674包括所有这些字段的一个实施例,但是完整操作码字段3674在不支持所有这些字段的实施例中包括不到所有这些字段的字段。完整操作码字段3674提供操作码(操作码)。
扩展运算字段3650、数据元素宽度字段3664和写入掩码字段3670允许以通用矢量友好指令格式在每指令基础上指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建键入指令,因为它们允许基于不同的数据元素宽度应用掩码。
在A类和B类内找到的各种指令模板在不同情形下是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同的核心可以支持仅A类、仅B类或两类。例如,意在供通用计算使用的高性能通用乱序核心可以支持仅B类,主要意在供图形和/或科学(吞吐量)计算使用的核心可支持仅A类,并且意在供两者使用的核心可以支持两者(当然,具有来自两类的模板和指令而非来自两类的所有模板和指令的某种混合的核心在本发明的范围内)。另外,单个处理器可以包括多个核心,其中的全部都支持相同的类或者其中不同的核心支持不同的类。例如,在具有单独的图形和通用核心的处理器中,主要意在供图形和/或科学计算使用的图形核心中的一个可以支持仅A类,然而通用核心中的一个或多个可以是具有意在供支持仅B类的通用计算使用的乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可以包括支持A类和B类两者的一个以上通用顺序或乱序核心。当然,也可在本公开的不同实施例中以其它类实现来自一个类的特征。用高级语言编写的程序将被转换(例如,及时编译或静态地编译)成各种不同的可执行形式,包括:1)仅具有由目标处理器支持以供执行的(一个或多个)类的指令的形式;或者2)具有使用所有类的指令的不同组合编写的替代例行程序并且具有选择要基于由当前正在执行代码的处理器所支持的指令执行的例行程序的控制流代码的形式。
示例性具体矢量友好指令格式
图37是图示了根据本公开的实施例的示例性具体矢量友好指令格式的框图。图37示出了在它指定字段的位置、大小、解释和顺序以及用于那些字段中的一些的值的意义上特定的具体矢量友好指令格式3700。具体矢量友好指令格式3700可以用于扩展x86指令集,并且因此一些字段与在现有x86指令集及其扩展(例如,AVX)中使用的那些字段类似或相同。这种格式保持与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示了来自图36的字段映射到来自图37的字段中。
应该理解的是,尽管出于说明性目的在通用矢量友好指令格式3600的上下文中参考具体矢量友好指令格式3700对本公开的实施例进行描述,然而除非在要求的情况下,否则本公开不限于具体矢量友好指令格式3700。例如,通用矢量友好指令格式3600为各种字段设想了各种可能的大小,同时具体矢量友好指令格式3700被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段3664被图示为具体矢量友好指令格式3700中的一个比特字段,但是本公开不受如此限制(即,通用矢量友好指令格式3600设想了数据元素宽度字段3664的其他大小)。
通用矢量友好指令格式3600包括在下面按照图37A中图示的顺序列举的以下字段。
EVEX前缀(字节0-3)3702—被以四字节形式编码。
格式字段3640(EVEX字节0,比特[7:0])—第一字节(EVEX字节0)是格式字段3640并且它包含0x62(用于在本公开的一个实施例中区分矢量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的许多比特字段。
REX字段3705(EVEX字节1,比特[7-5])—由EVEX.R比特字段(EVEX字节1,比特[7]-R)、EVEX.X比特字段(EVEX字节1,比特[6]-X)和3657BEX字节1、比特[5]-B)构成。EVEX.R、EVEX.X和EVEX.B比特字段提供与所对应的VEX比特字段相同的功能性,并且使用1s补码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段对如本领域已知的寄存器索引的低三个比特(rrr,xxx和bbb)进行编码,使得可以通过加上EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段3610—这是REX’字段3610的第一部分并且是用于对扩展32寄存器集的上部16个或下部16个进行编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在本公开的一个实施例中,这个比特以及如在下面所指示的其他比特被以比特反转格式存储以(在众所周知的x86 32位模式下)与BOUND指令区分开,所述BOUND指令的真实操作码字节是62,但是在MOD R/M字段(在下面描述)中不接受MOD字段中的值11;本公开的替代实施例不以反转格式存储这个比特和在下面的其他指示的比特。值1用于对低16个寄存器进行编码。换句话说,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR而形成的。
操作码映射字段3715(EVEX字节1,位[3:0]-mmmm)—其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段3664(EVEX字节2,比特[7]-W)—通过表示法EVEX.W来表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。
EVEX.vvvv 3720(EVEX字节2,比特[6:3]-vvvv)—EVEX.vvvv的作用可以包括下列的:1)EVEX.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码并且对于具有2个或更多个源操作数的指令来说有效;2)EVEX.vvvv对以1s补码形式为某些矢量移位指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被保留并且应该包含1111b。因此,EVEX.vvvv字段3720对以反转(1s补码)形式存储的第一源寄存器说明符的4个低位比特进行编码。取决于指令,额外不同的EVEX比特字段用于将说明符大小扩展到32个寄存器。
EVEX.U 3668类字段(EVEX字节2,比特[2]-U)—如果EVEX.U = 0,则它指示A类或EVEX.U0;如果EVEX.U = 1,则它指示B类或EVEX.U1。
前缀编码字段3725(EVEX字节2,比特[1:0]-pp)—为基础运算字段提供附加比特。除了以EVEX前缀格式为传统SSE指令提供支持之外,这也具有压缩SIMD前缀的好处(不是需要一字节来表达SIMD前缀,而是EVEX前缀仅需要2个比特)。在一个实施例中,为了支持既以传统格式又以EVEX前缀格式使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时在被提供给解码器的PLA之前被扩展成传统SIMD前缀(所以PLA可在没有修改的情况下执行这些传统指令的传统格式和EVEX格式两者)。尽管较新的指令能直接地使用EVEX前缀编码字段的内容作为操作码扩展,然而某些实施例以类似的方式扩展以得到一致性,但是允许通过这些传统SIMD前缀来指定不同的含义。替代实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
α字段3652(EVEX字节3,比特[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制和EVEX.N;也用α图示)—如先前所描述的,此字段是上下文特定的。
β字段3654(EVEX字节3,比特[6:4]-SSS,也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ图示)—如先前所描述的,此字段是上下文特定的。
REX’字段3610—这个是REX’字段的剩余部分并且是可以用于对扩展32个寄存器集的上部16个或下部16个进行编码的EVEX.V’比特字段(EVEX字节3,比特[3]-V’)。此比特被以比特反转格式存储。值1用于对下部16个寄存器进行编码。换句话说,V’VVVV是通过组合EVEX.V’、EVEX.vvvv而形成的。
写入掩码字段3670(EVEX字节3,比特[2:0]-kkk)—其内容像先前所描述的那样指定写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示写入掩码未被用于特定指令的特殊行为(可以以包括使用硬连线到全一的写入掩码或绕过掩码处理硬件的硬件的各种方式实现这个)。
真实操作码字段3730(字节4)也被称为操作码字节。在此字段中指定操作码的一部分。
MOD R/M字段3740(字节5)包括MOD字段3742、Reg字段3744和R/M字段3746。如先前描述的,MOD字段3742的内容区分存储器访问操作和非存储器访问操作。Reg字段3744的作用可被概括为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展并且不用于对任何指令操作数进行编码。R/M字段3746的作用可以包括下列的:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
定标、索引、基址(SIB)字节(字节6)—如先前描述的,定标字段3650的内容被用于存储器地址生成。SIB.xxx 3754和SIB.bbb 3756—先前已经关于寄存器索引Xxxx和Bbbb参考了这些字段的内容。
位移字段3662A(字节7-10)—当MOD字段3742包含10时,字节7-10是位移字段3662A,并且它工作与传统32位位移(disp32)相同并且以字节粒度工作。
位移因子字段3662B(字节7)—当MOD字段3742包含01时,字节7是位移因子字段3662B。此字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。因为disp8是符号扩展的,所以它仅可在-128字节偏移与127字节偏移之间寻址;在64字节高速缓存行方面,disp8使用可被设置为仅4个真正有用的值-128、-64、0和64的8个比特;因为经常需要更大范围,所以使用disp32;然而,disp32需要4个字节。同disp8和disp32相比,位移因子字段3662B是disp8的重新解释;当使用位移因子字段3662B时,实际位移通过位移因子字段乘以存储器操作数访问的大小(N)的内容来确定。这种类型的位移被称为disp8*N。这减小平均指令长度(用于位移的单个字节但具有大得多的范围)。这种压缩位移基于有效位移是存储器访问的粒度的倍数的假设,并且因此,地址偏移的冗余低位比特不需要被编码。换句话说,位移因子字段3662B取代传统x86指令集8位位移。因此,位移因子字段3662B被以与x86指令集8位移位相同的方式编码(所以ModRM/SIB编码规则没有变化),唯一例外是disp8被重载为disp8*N。换句话说,在编码规则或编码长度方面没有变化,而是仅在由硬件对位移值的解释方面存在变化(这需要按存储器操作数的大小对位移定标以获得逐字节地址偏移)。立即数字段3672像先前所描述的那样操作。
完整操作码字段
图37B是图示了根据本公开的一个实施例的组成完整操作码字段3674的具体矢量友好指令格式3700的字段的框图。具体地,完整操作码字段3674包括格式字段3640、基础运算字段3642和数据元素宽度(W)字段3664。基础运算字段3642包括前缀编码字段3725、操作码映射字段3715和真实操作码字段3730。
寄存器索引字段
图37C是图示了根据本公开的一个实施例的组成寄存器索引字段3644的具体矢量友好指令格式3700的字段的框图。具体地,寄存器索引字段3644包括REX字段3705、REX’字段3710、MODR/M.reg字段3744、MODR/M.r/m字段3746、VVVV字段3720、xxx字段3754和bbb字段3756。
扩增运算字段
图37D是图示了根据本公开的一个实施例的组成扩展运算字段3650的具体矢量友好指令格式3700的字段的框图。当类(U)字段3668包含0时,它表示EVEX.U0(A类3668A);当它包含1时,它表示EVEX.U1(B类3668B)。当U=0并且MOD字段3742包含11(表示无存储器访问操作)时,α字段3652(EVEX字节3,比特[7]-EH)被解释为rs字段3652A。当rs字段3652A包含1(舍入3652A.1)时,β字段3654(EVEX字节3,比特[6:4]-SSS)被解释为舍入控制字段3654A。舍入控制字段3654A包括一位SAE字段3656和二位舍入运算字段3658。当rs字段3652A包含0(数据变换3652A.2)时,β字段3654(EVEX字节3,比特[6:4]-SSS)被解释为三位数据变换字段3654B。当U=0并且MOD字段3742包含00、01或10(表示存储器访问操作)时,β字段3652(EVEX字节3,比特[7]-EH)被解释为驱逐提示(EH)字段3652B并且β字段3654(EVEX字节3,比特[6:4]-SSS)被解释为三位数据操纵字段3654C。
当U=1时,α字段3652(EVEX字节3,比特[7]-EH)被解释为写入掩码控制(Z)字段3652C。当U=1并且MOD字段3742包含11(表示无存储器访问操作)时,β字段3654的一部分(EVEX字节3,比特[4]-S0)被解释为RL字段3657A;当它包含1(舍入3657A.1)时,β字段3654的其余部分(EVEX字节3,比特[6-5]-S2-1)被解释为舍入运算字段3659A,然而当RL字段3657A包含0(VSIZE3657.A2)时β字段3654的其余部分(EVEX字节3,比特[6-5]-S2-1)被解释为矢量长度字段3659B(EVEX字节3,比特[6-5])-L1-0)。当U=1并且MOD字段3742包含00、01或10(表示存储器访问操作)时,β字段3654(EVEX字节3,比特[6:4]-SSS)被解释为矢量长度字段3659B(EVEX字节3,比特[6-5]-L1-0)和广播字段3657B(EVEX字节3,比特[4]-B)。
示例性寄存器架构
图38是根据本公开的一个实施例的寄存器架构3800的框图。在所图示的实施例中,存在为512位宽的32个矢量寄存器3810;这些寄存器被称为zmm0至zmm31。低16个zmm寄存器的低位256个比特被叠加在寄存器ymm0-16上。低16个zmm寄存器的低位128个比特(ymm寄存器的低位128个比特)被叠加在寄存器xmm0-15上。具体矢量友好指令格式3700像如下表所图示的那样在这些叠加寄存器堆上操作。
换句话说,矢量长度字段3659B在最大长度与一个或多个其他较短长度之间选择,其中每个这样的较短长度是前一长度的长度的一半;并且没有矢量长度字段3659B的指令模板在最大矢量长度上操作。进一步地,在一个实施例中,具体矢量友好指令格式3700的B类指令模板在封包或标量单/双精度浮点数据和封包或标量整数数据上操作。标量运算是对zmm/ymm/xmm寄存器中的最低位数据元素位置执行的运算;较高位数据元素位置保持与它们在指令之前相同或者取决于该实施例被归零。
写入掩码寄存器3815—在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每个大小为64位。在供替换的实施例中,写入掩码寄存器3815的大小是16位。如先前描述的,在本公开的一个实施例中,矢量掩码寄存器k0不能被用作写入掩码;当将通常指示k0的编码被用于写入掩码时,它选择0xFFFF的硬连线写入掩码,从而针对该指令有效地禁用写入掩码。
通用寄存器3825—在所图示的实施例中,存在连同现有x86寻址模式一起使用来对存储器操作数进行寻址的十六个64位通用寄存器。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来引用。
上面混叠了MMX封包整数平面寄存器堆3850的标量浮点堆栈寄存器堆(x87堆栈)3845—在所图示的实施例中,x87堆栈是用于对使用x87指令集扩展的32/64/80位浮点数据执行标量浮点运算的八元素堆栈;然而MMX寄存器用于对64位封包整数数据执行运算,以及用于为在MMX寄存器与XMM寄存器之间执行的一些运算保持操作数。
本公开的替代实施例可以使用更宽或更窄的寄存器。附加地,本公开的替代实施例可以使用更多的、更少的或不同的寄存器堆和寄存器。
示例性核心架构、处理器和计算机架构
可以以不同的方式、出于不同的目的并且在不同的处理器中实现处理器核心。例如,此类核心的实施方式可以包括:1)意在供通用计算使用的通用顺序核心;2)意在供通用计算使用的高性能通用乱序核心;3)主要意在供图形和/或科学(吞吐量)计算使用的专用核心。不同的处理器的实施方式可以包括:1)CPU,其包括意在供通用计算使用的一个或多个通用顺序核心和/或意在供通用计算使用的一个或多个通用乱序核心;以及2)协处理器,其包括主要意在供图形和/或科学(吞吐量)使用的一个或多个专用核心。此类不同的处理器导致不同的计算机系统架构,其可以包括:1)与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中的单独的芯片上的协处理器;3)与CPU相同的管芯上的协处理器(在此情况下,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者称为专用核心)。以及4)片上系统,其可以在同一管芯上包括所描述的CPU(有时被称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能性。接下来对示例性核心架构进行描述,后面是示例性处理器和计算机架构的描述。
示例性核心架构
顺序和乱序核心框图
图39A是图示了根据本公开的实施例的示例性顺序管线和示例性寄存器重命名乱序发射/执行管线两者的框图。图39B是图示了根据本公开的实施例的要包括在处理器中的顺序架构核心和示例性寄存器重命名乱序发射/执行架构核心两者的示例性实施例的框图。图39A-B中的实线框图示了顺序管线和顺序核心,然而虚线框的可选添加图示了寄存器重命名乱序发射/执行管线和核心。鉴于顺序方面是乱序方面的子集,将描述乱序方面。
在图39A中,处理器管线3900包括取出级3902、长度解码级3904、解码级3906、分配级3908、重命名级3910、调度(也被称为分派或发射)级3912、寄存器读取/存储器读取级3914、执行级3916、回写/存储器写入级3918、异常处理级3922和提交级3924。
图39B示出了包括耦合到执行引擎单元3950的前端单元3930的处理器核心3990,并且前端单元3930和执行引擎单元3950两者都耦合到存储器单元3970。核心3990可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、甚长指令字(VLIW)核心或者混合或替代核心类型。作为又一个选项,核心3990可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元3930包括耦合到指令高速缓存单元3934的分支预测单元3932,所述指令高速缓存单元3934耦合到指令转换后备缓冲器(TLB)3936,所述指令转换后备缓冲器(TLB)3936耦合到指令取出单元3938,所述指令取出单元3938耦合到解码单元3940。解码单元3940(或解码器或解码器单元)可以对指令(例如,宏指令)进行解码,并且生成从原始指令解码或者以其他方式反映原始指令或者从原始指令得到的一个或多个微运算、微码入口点、微指令、其他指令或其他控制信号作为输出。可以使用各种不同的机制来实现解码单元3940。适合的机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核心3990包括微码ROM或存储用于某些宏指令的微码的其他介质(例如,在解码单元3940中或者以其他方式在前端单元3930内)。解码单元3940耦合到执行引擎单元3950中的重命名/分配器单元3952。
执行引擎单元3950包括耦合到收回单元3954和一组一个或多个调度器单元3956的重命名/分配器单元3952。(一个或多个)调度器单元3956表示任何数量的不同的调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元3956耦合到(一个或多个)物理寄存器堆单元3958。(一个或多个)物理寄存器堆单元3958中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封包整数、封包浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元3958包括矢量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元3958与收回单元3954重叠以图示可以实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)收回寄存器堆;使用(一个或多个)将来堆、(一个或多个)历史缓冲器和(一个或多个)收回寄存器堆;使用寄存器映射和寄存器池等)。收回单元3954和(一个或多个)物理寄存器堆单元3958耦合到(一个或多个)执行集群3960。(一个或多个)执行集群3960包括一组一个或多个执行单元3962和一组一个或多个存储器访问单元3964。执行单元3962可以执行各种运算(例如,移位、加法、减法、乘法)并且可以对各种类型的数据(例如,标量浮点、封包整数、封包浮点、矢量整数、矢量浮点)执行各种运算(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集的许多执行单元,但是其他实施例可以仅包括一个执行单元或全部执行所有功能的多个执行单元。(一个或多个)调度器单元3956、(一个或多个)物理寄存器堆单元3958和(一个或多个)执行集群3960被示为可能是多个,因为某些实施例为某些类型的数据/运算创建单独的管线(例如,标量整数管线、标量浮点/封包整数/封包浮点/矢量整数/矢量浮点管线,和/或各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群的存储器访问管线—并且在单独的存储器访问管线的情况下,实现了其中仅此管线的执行集群具有(一个或多个)存储器访问单元3964的某些实施例)。也应该理解的是,在使用单独的管线的情况下,这些管线中的一个或多个可以是乱序发射/执行而其余部分是顺序发射/执行。
该组存储器访问单元3964耦合到存储器单元3970,所述存储器单元3970包括耦合到数据高速缓存单元3974的数据TLB单元3972,数据高速缓存单元3974耦合到第2级(L2)高速缓存单元3976。在一个示例性实施例中,存储器访问单元3964可以包括加载单元、存储地址单元和存储数据单元,其中的每一个都耦合到存储器单元3970中的数据TLB单元3972。指令高速缓存单元3934还耦合到存储器单元3970中的第2级(L2)高速缓存单元3976。L2高速缓存单元3976耦合到一个或多个其他级高速缓存并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、乱序发射/执行核心架构可以实现管线3900如下:1)指令取出3938执行取出级3902和长度解码级3904;2)解码单元3940执行解码级3906;3)重命名/分配器单元3952执行分配级3908和重命名级3910;4)(一个或多个)调度器单元3956执行调度级3912;5)(一个或多个)物理寄存器堆单元3958和存储器单元3970执行寄存器读取/存储器读取级3914;执行集群3960执行执行级3916;6)存储器单元3970和(一个或多个)物理寄存器堆单元3958执行写回/存储器写入级3918;7)各种单元可能涉及异常处理级3922;以及8)收回单元3954和(一个或多个)物理寄存器堆单元3958执行提交级3924。
核心3990可以支持一个或多个指令集(例如,x86指令集(具有已被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集;加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集(具有诸如NEON的可选附加扩展),包括本文中所描述的(一个或多个)指令。在一个实施例中,核心3990包括用于支持封包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用封包数据来执行由许多多媒体应用使用的运算。
应该理解的是,核心可以支持多线程处理(执行两个或多个并行的运算或线程集),并且可以以各种方式这样做,所述各种方式包括时间分片多线程处理、同时多线程处理(其中单个物理核心为物理核心正在同时多线程处理的线程中的每一个提供逻辑核心)或其组合(例如,此后诸如Intel®超线程技术中的时间分片取出和解码及同时多线程处理)。
虽然在乱序执行的上下文中对寄存器重命名进行描述,但是应该理解的是,可以在顺序架构中使用寄存器重命名。尽管所图示的处理器的实施例也包括单独的指令和数据高速缓存单元3934/3974和共享L2高速缓存单元3976,然而替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级( L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核心和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存可以在核心和/或处理器外部。
具体示例性顺序核心架构
图40A-B图示了更具体示例性顺序核心架构的框图,所述核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与某个固定功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图40A是根据本公开的实施例的单个处理器核心的框图以及其到管芯上互联网络4002和与第2级(L2)高速缓存4004的其本地子集的连接。在一个实施例中,指令解码单元4000支持具有封包数据指令集扩展的x86指令集。L1高速缓存4006允许对存储器高速缓存到标量和矢量单元中的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元4008和矢量单元4010使用单独的寄存器集(分别为标量寄存器4012和矢量寄存器4014)并且在它们之间转移的数据被写入到存储器以及然后从第1级(L1)高速缓存4006读回来,然而本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集或者包括允许在两个寄存器堆之间转移数据而不用被写入和读回的通信路径)。
L2高速缓存4004的本地子集是全局L2高速缓存的被划分成单独的本地子集的一部分,每处理器核心各一个。每个处理器核心具有到它自己的L2高速缓存4004的本地子集的直接访问路径。由处理器核心读取的数据被存储在其L2高速缓存子集4004中并且可与其他处理器核心访问它们自己的本地L2高速缓存子集并行地被快速地访问。由处理器核心写入的数据被存储在它自己的L2高速缓存子集4004中并且必要时被从其他子集刷新。环形网络对于共享数据确保一致性。环形网络是双向的以允许诸如处理器核心、L2高速缓存和其他逻辑块之类的代理在芯片内相互通信。每个环形数据路径是每方向1012位宽。
图40B是根据本公开的实施例的图40A中的处理器核心的一部分的展开图。图40B包括L1高速缓存4004的L1数据高速缓存4006A部分以及有关矢量单元4010和矢量寄存器4014的更多细节。具体地,矢量单元4010是16宽矢量处理单元(VPU)(参见16宽ALU 4028),其执行整数指令、单精度浮点指令和双精度浮点指令中的一种或多种。VPU支持利用混合单元4020混合寄存器输入、利用数字转换单元4022A-B进行数值转换以及利用复制单元4024对存储器输入进行复制。写入掩码寄存器4026允许预测结果得到的矢量写入。
图41是根据本公开的实施例的处理器4100的框图,所述处理器4100可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成显卡。图41中的实线框图示了具有单个核心4102A、系统代理4110、一组一个或多个总线控制器单元4116的处理器4100,然而虚线框的可选添加图示了具有多个核心4102A-N、系统代理单元4110中的一组一个或多个集成存储器控制器单元4114和专用逻辑4108的替代处理器4100。
因此,处理器4100的不同的实施方式可以包括:1)CPU,其具有作为集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心)的专用逻辑4108,以及作为一个或多个通用核心(例如,通用顺序核心、通用乱序核心、两者的组合)的核心4102A-N;2)具有为主要意在供图形和/或科学(吞吐量)使用的大量专用核心的核心4102A-N的协处理器;以及3)具有作为大量通用顺序核心的核心4102A-N的协处理器。因此,处理器4100可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元),高吞吐量多集成核心(MIC)协处理器(包括30个或更多个核心)、嵌入式处理器等。可以在一个或多个芯片上实现处理器。处理器4100可以是使用许多工艺技术中的任一种(诸如例如BiCMOS、CMOS或NMOS)的一个或多个衬底的一部分,和/或可以被实现在使用许多工艺技术中的任一种(诸如例如BiCMOS、CMOS或NMOS)的一个或多个衬底上。
存储器层次包括核心内的一级或多级高速缓存、一组一个或多个共享高速缓存单元4106以及耦合到该组集成存储器控制器单元4114的外部存储器(未示出)。该组共享高速缓存单元4106可以包括一个或多个中级高速缓存,诸如第2级(L2)、第3级(L3)、第4级(L4)或其他级别的高速缓存、最后级高速缓存(LLC)和/或其组合。虽然在一个实施例中基于环的互连单元4112互连集成图形逻辑4108、该组共享高速缓存单元4106和系统代理单元4110/(一个或多个)集成存储器控制器单元4114,但是替代实施例可以使用任何数量的众所周知的技术用于互连这些单元。在一个实施例中,在一个或多个高速缓存单元4106与核心4102-A-N之间维持一致性。
在一些实施例中,核心4102A-N中的一个或多个能够多线程处理。系统代理4110包括协调并操作核心4102A-N的那些组件。系统代理单元4110可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括用于调节核心4102A-N和集成图形逻辑4108的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。
核心4102A-N在架构指令集方面可以是同质的或异构的;也就是说,核心4102A-N中的两个或更多个可以能够执行相同的指令集,然而其他核心可以能够仅执行该指令集的子集或不同的指令集。
示例性计算机架构
图42-45是示例性计算机架构的框图。本领域已知用于膝上型计算机、台式机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、开关、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、手机、便携式媒体播放器、手持装置和各种其他电子装置的其他系统设计和配置也是适合的。一般而言,能够并入如本文中所公开的处理器和/或其他执行逻辑的各种系统或电子装置通常是适合的。
现在参考图42,示出的是依照本公开的一个实施例的系统4200的框图。系统4200可以包括耦合到控制器集线器4220的一个或多个处理器4210、4215。在一个实施例中控制器集线器4220包括图形存储器控制器集线器(GMCH) 4290和输入/输出集线器(IOH) 4250(其可以在单独的芯片上);GMCH 4290包括耦合到存储器4240和协处理器4245的存储器和图形控制器;IOH 4250将输入/输出(I/O)装置4260耦合到GMCH 4290。可替换地,存储器和图形控制器中的一个或两个被集成在处理器内(如本文中所描述的),存储器4240和协处理器4245直接地耦合到处理器4210,并且控制器集线器4220与IOH 4250一起在单个芯片中。存储器4240可以包括编译器模块4240A,例如,以存储当被执行时使处理器执行本公开的任何方法的代码。
附加处理器4215的可选性质在图42中用虚线表示。每个处理器4210、4215可以包括本文中所描述的处理核心中的一个或多个并且可以是处理器4100的某个版本。
存储器4240可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器集线器4220经由多跳总线(诸如前端总线(FSB))、诸如QuickPath 互连(QPI)之类的点对点接口或类似的连接4295与(一个或多个)处理器4210、4215进行通信。
在一个实施例中,协处理器4245是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器集线器4220可以包括集成图形加速器。
就包括架构、微架构、热、功耗特性等的指标的一系列度量而言,在物理资源4210、4215之间可以存在各种差异。
在一个实施例中,处理器4210执行控制一般类型的数据处理运算的指令。嵌入在指令内的可以是协处理器指令。处理器4210将这些协处理器指令识别为应该由附连协处理器4245执行的类型。因此,处理器4210在协处理器总线或其他互连上向协处理器4245发出这些协处理器指令(或表示协处理器指令的控制信号)。(一个或多个)协处理器4245接受并执行所接收到的协处理器指令。
现在参考图43,示出的是依照本公开的实施例的第一更具体示例性系统4300的框图。如图43中所示,多处理器系统4300是点对点互连系统,并且包括经由点对点互连4350耦合的第一处理器4370和第二处理器4380。处理器4370和4380中的每一个可以是处理器4100的某个版本。在本公开的一个实施例中,处理器4370和4380分别是处理器4210和4215,然而协处理器4338是协处理器4245。在另一实施例中,处理器4370和4380分别是处理器4210和协处理器4245。
处理器4370和4380被示出为分别包括集成存储器控制器(IMC)单元4372和4382。处理器4370也包括点对点(P-P)接口4376和4378作为其总线控制器单元的一部分;类似地,第二处理器4380包括P-P接口4386和4388。处理器4370、4380可以使用P-P接口电路4378、4388来经由点对点(P-P)接口4350交换信息。如图43中所示,IMC 4372和4382将处理器耦合到相应的存储器,即存储器4332和存储器4334,其可以是在本地附连到相应的处理器的主存储器的各部分。
处理器4370、4380可以各自使用点对点接口电路4376、4394、4386、4398来经由单独的P-P接口4352、4354与芯片组4390交换信息。芯片组4390可以可选地经由高性能接口4339与协处理器4338交换信息。在一个实施例中,协处理器4338是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以被包括在任何一个处理器中或者在两个处理器外部,仍然经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中,则任何一个或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组4390可以经由接口4396耦合到第一总线4316。在一个实施例中,第一总线4316可以是外围组件互连(PCI)总线或者诸如PCI Express总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不受如此限制。
如图43中所示,各种I/O装置4314可连同将第一总线4316耦合到第二总线4320的总线桥接器4318一起耦合到第一总线4316。在一个实施例中,一个或多个附加处理器4315(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)耦合到第一总线4316。在一个实施例中,第二总线4320可以是低引脚数(LPC)总线。在一个实施例中,各种装置可以耦合到第二总线4320,所述各种装置包括例如键盘和/或鼠标4322、通信装置4327以及诸如磁盘驱动器之类的存储单元4328或可以包括指令/代码和数据4330的其他大容量存储装置。进一步地,音频I/O 4324可以耦合到第二总线4320。注意的是,其他架构是可能的。例如,代替图43的点对点架构,系统可以实现多跳总线或其他这样的架构。
现在参考图44,示出的是依照本公开的实施例的第二更具体示例性系统4400的框图。图43和44中的相似的元件具有相似的附图标记,并且已从图44中省略了图43的某些方面以便避免使图44的其他方面混淆。
图44图示了处理器4370、4380分别可以包括集成存储器和I/O控制逻辑(“CL”)4372和4382。因此,CL 4372、4382包括集成存储器控制器单元并且包括I/O控制逻辑。图44图示了不仅存储器4332、4334耦合到CL 4372、4382,而且I/O装置4414也耦合到控制逻辑4372、4382。传统I/O装置4415耦合到芯片组4390。
现在参考图45,示出的是依照本公开的实施例的SoC 4500的框图。图41中的类似的元件具有相似的附图标记。另外,虚线框是更先进SoC上的可选特征。在图45中,(一个或多个)互连单元4502耦合到:包括一组一个或多个核心202A-N和(一个或多个)共享高速缓存单元4106的应用处理器4510;系统代理单元4110;(一个或多个)总线控制器单元4116;(一个或多个)集成存储器控制器单元4114;可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器的一组一个或多个协处理器4520;静态随机存取存储器(SRAM)单元4530;直接存储器存取(DMA)单元4532;以及用于耦合到一个或多个外部显示器的显示单元4540。在一个实施例中,(一个或多个)协处理器4520包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文中所公开的实施例(例如,机制的)可以用硬件、软件、固件或此类实施方式方法的组合加以实现。本公开的实施例可以作为在可编程系统上执行的计算机程序或程序代码被实现,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
程序代码(诸如图43中图示的代码4330)可以被应用于输入指令以执行本文中所描述的功能并且生成输出信息。可以将输出信息以已知方式应用于一个或多个输出装置。出于本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级过程或面向对象编程语言加以实现以与处理系统进行通信。视需要,程序代码也可以用汇编或机器语言加以实现。实际上,本文中所描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可能是编译或解释语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,所述代表性指令当由机器读取时使机器制作逻辑以执行本文中所描述的技术。被称为“IP核心”的此类表示可以被存储在有形机器可读介质上并且供应给各种客户或制造设施以加载到实际地做出逻辑或处理器的制作机器中。
此类机器可读存储介质可以包括而不限于由机器或装置制造或形成的物品的非暂时性有形布置,包括诸如硬盘之类的存储介质、包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)和磁光盘的任何其他类型的盘、诸如只读存储器(ROM)之类的半导体装置、诸如动态随机存取存储器(DRAM)之类的随机存取存储器(RAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁或光学卡,或适合于存储电子指令的任何其他类型的介质。
因此,本公开的实施例也包括包含指令或者包含设计数据(诸如硬件描述语言(HDL))的非暂时性有形机器可读介质,所述设计数据定义本文中所描述的结构、电路、设备、处理器和/或系统特征。此类实施例也可以被称为程序产品。
仿真(包括二进制转换、代码变形等)
在一些情况下,可以使用指令转换器来将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或者以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合加以实现。指令转换器可以在处理器上,在处理器外,或者部分在处理器上并且部分在处理器外。
图46是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是可替换地指令转换器可以用软件、固件、硬件或其各种组合加以实现。图46示出了可以使用x86编译器4604来编译高级语言4602的程序以生成可以由具有至少一个x86指令集核心4616的处理器在本机执行的x86二进制代码4606。具有至少一个x86指令集核心4616的处理器表示可通过兼容地执行或者以其他方式处理以下各项来执行与具有至少一个x86指令集核心的Intel处理器基本上相同的功能以便实现与具有至少具有一个x86指令集核心的Intel处理器基本上相同的结果的任何处理器:(1)Intel x86指令集核心的指令集的基本部分或者(2)目标旨在在具有至少一个x86指令集核心的Intel处理器上运行的应用或其他软件的目标代码版本。x86编译器4604表示可操作来生成x86二进制代码4606(例如,目标代码)的编译器,所述x86二进制代码4606可在有或没有附加链接处理的情况下在具有至少一个x86指令集核心4616的处理器上被执行。类似地,图46示出了可以使用替代指令集编译器4608来编译采用高级语言4602的程序以生成替代指令集二进制代码4610,所述替代指令集二进制代码4610可以由没有至少一个x86指令集核心4614的处理器(例如,具有执行加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集的核心的处理器)在本机执行。指令转换器4612用于将x86二进制代码4606转换成可由没有x86指令集核心4614的处理器在本机执行的代码。这种转换的代码不大可能与替代指令集二进制代码4610相同,因为能够做这一点的指令转换器难以制造;然而,经转换的代码将完成一般运算并且由来自替代指令集的指令组成。因此,指令转换器4612表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他过程,允许不具有x86指令集处理器或核心的处理器或其他电子装置执行x86二进制代码4606。

Claims (20)

1.一种用于数据流图处理的处理器,其包括:
多个处理元件;以及
所述多个处理元件之间的互连网络,其用于接收包括第一多个节点的第一数据流图的第一输入,其中,所述第一数据流图将被叠加到所述互连网络的第一部分和所述多个处理元件的第一子集中,其中所述第一多个节点中的每一个被表示为所述多个处理元件的所述第一子集中的数据流操作符,并且所述多个处理元件的所述第一子集将在第一传入操作数集到达所述多个处理元件的所述第一子集时执行第一操作;
所述互连网络也将接收包括第二多个节点的第二数据流图的第二输入,其中,所述第二数据流图将被叠加到所述互连网络的第二部分和所述多个处理元件的第二子集中,其中所述第二多个节点中的每一个被表示为所述多个处理元件的所述第二子集中的数据流操作符,并且所述多个处理元件的所述第二子集将在第二传入操作数集到达所述多个处理元件的所述第二子集时执行第二操作。
2.根据权利要求1所述的处理器,其中,所述多个处理元件的所述第一子集被指派给第一程序并且所述多个处理元件的所述第二子集被指派给第二程序。
3.根据权利要求2所述的处理器,其中,所述互连网络将被分割成所述第一部分和所述第二部分以保护所述第一程序和所述第二程序不受彼此影响。
4.根据权利要求3所述的处理器,其中,所述第一程序是用户级程序。
5.根据权利要求4所述的处理器,其中,所述第二程序是系统级程序。
6.根据权利要求4所述的处理器,其中,所述第二程序是用户级程序。
7.根据权利要求3所述的处理器,其中,所述第一程序和所述第二程序将通过要用可配置特许状态元素实现的边界保护而不受彼此影响。
8.根据权利要求7所述的处理器,其中,所述可配置特许状态元素将被配置成防止跨越所述边界的通信。
9.一种用于数据流图处理的方法,其包括:
将处理器的多个处理元件和所述多个处理元件之间的互连网络分割成第一部分和第二部分;
接收包括第一多个节点的第一数据流图的第一输入;
将所述第一数据流图叠加到所述第一部分中,其中所述第一多个节点中的每一个被表示为所述多个处理元件的第一子集中的数据流操作符;
接收包括第二多个节点的第二数据流图的第二输入;
将所述第二数据流图叠加到所述第二部分中,其中所述第二多个节点中的每一个被表示为所述多个处理元件的第二子集中的数据流操作符;
当第一传入操作数集到达所述多个处理元件的所述第一子集时利用所述互连网络的所述第一部分和所述多个处理元件的所述第一子集执行所述第一数据流图的第一操作;以及
当第二传入操作数集到达所述多个处理元件的所述第二子集时利用所述互连网络的所述第二部分和所述多个处理元件的所述第二子集执行所述第二数据流图的第二操作。
10.根据权利要求9所述的方法,还包括:
向所述多个处理元件的所述第一子集指派第一程序;以及
向所述多个处理元件的所述第二子集指派第二程序。
11.根据权利要求10所述的方法,其中,所述互连网络被分割成所述第一部分和所述第二部分以保护所述第一程序和所述第二程序不受彼此影响。
12.根据权利要求11所述的方法,其中,所述第一程序是用户级程序。
13.根据权利要求12所述的方法,其中,所述第二程序是系统级程序。
14.根据权利要求12所述的方法,其中,所述第二程序是用户级程序。
15.根据权利要求11所述的方法,其中,所述第一程序和所述第二程序通过要用可配置特许状态元素实现的边界保护而不受彼此影响。
16.根据权利要求15所述的方法,其中,分割包括配置所述可配置特许状态元素以防止跨越所述边界的通信。
17.一种存储代码的非暂时性机器可读介质,所述代码当由机器执行时使所述机器执行包括以下步骤的方法:
将处理器的多个处理元件和所述多个处理元件之间的互连网络分割成第一部分和第二部分;
接收包括第一多个节点的第一数据流图的第一输入;
将所述第一数据流图叠加到所述第一部分中,其中所述第一多个节点中的每一个被表示为所述多个处理元件的第一子集中的数据流操作符;
接收包括第二多个节点的第二数据流图的第二输入;
将所述第二数据流图叠加到所述第二部分中,其中所述第二多个节点中的每一个被表示为所述多个处理元件的第二子集中的数据流操作符;
当第一传入操作数集到达所述多个处理元件的所述第一子集时利用所述互连网络的所述第一部分和所述多个处理元件的所述第一子集执行所述第一数据流图的第一操作;以及
当第二传入操作数集到达所述多个处理元件的所述第二子集时利用所述互连网络的所述第二部分和所述多个处理元件的所述第二子集执行所述第二数据流图的第二操作。
18.根据权利要求17所述的非暂时性机器可读介质,其中,所述方法还包括:
向所述多个处理元件的所述第一子集指派第一程序;以及
向所述多个处理元件的所述第二子集指派第二程序。
19.根据权利要求18所述的非暂时性机器可读介质,其中,所述第一程序和所述第二程序通过用可配置特许状态元素实现的边界保护而不受彼此影响。
20.根据权利要求19所述的非暂时性机器可读介质,其中,分割包括配置所述可配置特许状态元素以防止跨越所述边界的通信。
CN201810696290.6A 2017-07-01 2018-06-29 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统 Pending CN109213723A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/640542 2017-07-01
US15/640,542 US20190004878A1 (en) 2017-07-01 2017-07-01 Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features

Publications (1)

Publication Number Publication Date
CN109213723A true CN109213723A (zh) 2019-01-15

Family

ID=64738072

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810696290.6A Pending CN109213723A (zh) 2017-07-01 2018-06-29 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统

Country Status (2)

Country Link
US (1) US20190004878A1 (zh)
CN (1) CN109213723A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489356A (zh) * 2019-08-06 2019-11-22 上海商汤智能科技有限公司 信息处理方法、装置、电子设备及存储介质
CN110569211A (zh) * 2019-09-02 2019-12-13 天津飞腾信息技术有限公司 片上系统内部通讯方法
CN112417451A (zh) * 2020-11-20 2021-02-26 复旦大学 适配智能芯片分级架构的基于深度学习的恶意软件检测方法
CN113508363A (zh) * 2019-02-27 2021-10-15 美光科技公司 多用户网络中的算术和逻辑运算
US11875150B2 (en) 2019-02-27 2024-01-16 Micron Technology, Inc. Converting floating-point bit strings in a multi-user network

Families Citing this family (53)

* Cited by examiner, † Cited by third party
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
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10474375B2 (en) 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10515049B1 (en) 2017-07-01 2019-12-24 Intel Corporation Memory circuits and methods for distributed memory hazard detection and error recovery
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US10380063B2 (en) 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10445098B2 (en) 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
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
US10459866B1 (en) * 2018-06-30 2019-10-29 Intel Corporation Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional 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
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US20220171829A1 (en) 2019-03-11 2022-06-02 Untether Ai Corporation Computational memory
EP3938921A4 (en) * 2019-03-11 2022-12-14 Untether AI Corporation CALCULATION MEMORY
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
CN110297802A (zh) * 2019-06-09 2019-10-01 苏州长江睿芯电子科技有限公司 一种新型处理器之间互联结构
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US11176065B2 (en) * 2019-08-12 2021-11-16 Micron Technology, Inc. Extended memory interface
US11342944B2 (en) 2019-09-23 2022-05-24 Untether Ai Corporation Computational memory with zero disable and error detection
US11900156B2 (en) 2019-09-24 2024-02-13 Speedata Ltd. Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US11468002B2 (en) 2020-02-28 2022-10-11 Untether Ai Corporation Computational memory with cooperation among rows of processing elements and memory thereof
US11631001B2 (en) 2020-04-10 2023-04-18 SiMa Technologies, Inc. Heterogeneous computing on a system-on-chip, including machine learning inference
US11321607B2 (en) 2020-04-03 2022-05-03 SiMa Technologies, Inc. Machine learning network implemented by statically scheduled instructions, with compiler
US11681598B2 (en) 2020-04-16 2023-06-20 Texas Instruments Incorporated Method and apparatus to facilitate low latency fault mitigation, QoS management and debug of a processing pipeline
US11989581B2 (en) 2020-04-17 2024-05-21 SiMa Technologies, Inc. Software managed memory hierarchy
US11886981B2 (en) 2020-05-01 2024-01-30 SiMa Technologies, Inc. Inter-processor data transfer in a machine learning accelerator, using statically scheduled instructions
US11734605B2 (en) 2020-04-29 2023-08-22 SiMa Technologies, Inc. Allocating computations of a machine learning network in a machine learning accelerator
US11586894B2 (en) 2020-05-04 2023-02-21 SiMa Technologies, Inc. Ordering computations of a machine learning network in a machine learning accelerator for efficient memory usage
US11734549B2 (en) 2020-04-21 2023-08-22 SiMa Technologies, Inc. Avoiding data routing conflicts in a machine learning accelerator
US11175922B1 (en) * 2020-04-28 2021-11-16 Speedata Ltd. Coarse-grain reconfigurable array processor with concurrent handling of multiple graphs on a single grid
US11354157B2 (en) 2020-04-28 2022-06-07 Speedata Ltd. Handling multiple graphs, contexts and programs in a coarse-grain reconfigurable array processor
US11782757B2 (en) 2021-05-07 2023-10-10 SiMa Technologies, Inc. Scheduling off-chip memory access for programs with predictable execution
CN117616403A (zh) * 2021-07-19 2024-02-27 谷歌有限责任公司 支持无序执行的低时延桥接器

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1894659A (zh) * 2003-12-09 2007-01-10 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
US20070076604A1 (en) * 2005-09-12 2007-04-05 Mark Litwack Multimedia data flow dropping
US20090175444A1 (en) * 2008-01-09 2009-07-09 Frederick Douglis System and method for encryption key management in a mixed infrastructure stream processing framework
CN101523451A (zh) * 2006-10-09 2009-09-02 艾利森电话股份有限公司 用于确定传感器覆盖的方法,使用该方法的设计工具和边界保护系统
CN102915271A (zh) * 2012-10-31 2013-02-06 北京邮电大学 基于控制流图的单元回归测试用例集合优化方法
CN104969214A (zh) * 2013-03-12 2015-10-07 英特尔公司 基于多个设备的传感器关联数据的计算
CN105278921A (zh) * 2014-07-09 2016-01-27 英特尔公司 用于在处理具有未对齐数据行的数组期间消除未对齐的存储器访问的指令集
US20170161332A1 (en) * 2015-12-04 2017-06-08 International Business Machines Corporation Autonomic fusion changes based off data rates
US20170262383A1 (en) * 2016-03-09 2017-09-14 Samsung Electronics Co., Ltd. Electronic apparatus and control method thereof
US20170286169A1 (en) * 2016-03-31 2017-10-05 National Instruments Corporation Automatically Mapping Program Functions to Distributed Heterogeneous Platforms Based on Hardware Attributes and Specified Constraints
US20180189063A1 (en) * 2016-12-30 2018-07-05 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1894659A (zh) * 2003-12-09 2007-01-10 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
US20070076604A1 (en) * 2005-09-12 2007-04-05 Mark Litwack Multimedia data flow dropping
CN101523451A (zh) * 2006-10-09 2009-09-02 艾利森电话股份有限公司 用于确定传感器覆盖的方法,使用该方法的设计工具和边界保护系统
US20090175444A1 (en) * 2008-01-09 2009-07-09 Frederick Douglis System and method for encryption key management in a mixed infrastructure stream processing framework
CN102915271A (zh) * 2012-10-31 2013-02-06 北京邮电大学 基于控制流图的单元回归测试用例集合优化方法
CN104969214A (zh) * 2013-03-12 2015-10-07 英特尔公司 基于多个设备的传感器关联数据的计算
CN105278921A (zh) * 2014-07-09 2016-01-27 英特尔公司 用于在处理具有未对齐数据行的数组期间消除未对齐的存储器访问的指令集
US20170161332A1 (en) * 2015-12-04 2017-06-08 International Business Machines Corporation Autonomic fusion changes based off data rates
US20170262383A1 (en) * 2016-03-09 2017-09-14 Samsung Electronics Co., Ltd. Electronic apparatus and control method thereof
US20170286169A1 (en) * 2016-03-31 2017-10-05 National Instruments Corporation Automatically Mapping Program Functions to Distributed Heterogeneous Platforms Based on Hardware Attributes and Specified Constraints
US20180189063A1 (en) * 2016-12-30 2018-07-05 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
PETER J. QUINN 等: "The ESO data flow system in operations: closing the data loop", 《PROCEEDINGS OF SPIE-THE INTERNATIONAL SOCIETY FOR OPTICAL ENGINEERING》, pages 56 - 63 *
王丹 等: "一种数据流块查询操作符的设计与实现", 《北京工业大学学报》, pages 1326 - 1332 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113508363A (zh) * 2019-02-27 2021-10-15 美光科技公司 多用户网络中的算术和逻辑运算
CN113508363B (zh) * 2019-02-27 2022-09-16 美光科技公司 多用户网络中的算术和逻辑运算
US11875150B2 (en) 2019-02-27 2024-01-16 Micron Technology, Inc. Converting floating-point bit strings in a multi-user network
CN110489356A (zh) * 2019-08-06 2019-11-22 上海商汤智能科技有限公司 信息处理方法、装置、电子设备及存储介质
CN110569211A (zh) * 2019-09-02 2019-12-13 天津飞腾信息技术有限公司 片上系统内部通讯方法
CN112417451A (zh) * 2020-11-20 2021-02-26 复旦大学 适配智能芯片分级架构的基于深度学习的恶意软件检测方法
CN112417451B (zh) * 2020-11-20 2022-04-12 复旦大学 适配智能芯片分级架构的基于深度学习的恶意软件检测方法

Also Published As

Publication number Publication date
US20190004878A1 (en) 2019-01-03

Similar Documents

Publication Publication Date Title
CN109213723A (zh) 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统
DE102018005181B4 (de) Prozessor für einen konfigurierbaren, räumlichen beschleuniger mit leistungs-, richtigkeits- und energiereduktionsmerkmalen
CN110018850A (zh) 用于可配置空间加速器中的多播的设备、方法和系统
CN108268278B (zh) 具有可配置空间加速器的处理器、方法和系统
US11307873B2 (en) Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10515046B2 (en) Processors, methods, and systems with a configurable spatial accelerator
CN109215728B (zh) 用于分布式存储器危险检测和错误恢复的存储器电路和方法
US10445098B2 (en) Processors and methods for privileged configuration in a spatial array
US10496574B2 (en) Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US10469397B2 (en) Processors and methods with configurable network-based dataflow operator circuits
US10467183B2 (en) Processors and methods for pipelined runtime services in a spatial array
US10387319B2 (en) Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10445234B2 (en) Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
CN109597458A (zh) 用于空间阵列中的可配置时钟门控的处理器和方法
CN109597646A (zh) 具有可配置空间加速器的处理器、方法和系统
US10416999B2 (en) Processors, methods, and systems with a configurable spatial accelerator
CN109992306A (zh) 用于可配置空间加速器存储器一致性的装置、方法和系统
CN111868702A (zh) 用于可配置空间加速器中的远程存储器访问的装置、方法和系统
CN111566623A (zh) 用于可配置空间加速器中的集成性能监视的装置、方法和系统
CN111767236A (zh) 用于可配置空间加速器中的存储器接口电路分配的装置、方法和系统
US10459866B1 (en) Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
US20220100680A1 (en) Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
CN112148647A (zh) 用于存储器接口电路仲裁的装置、方法和系统
CN112148664A (zh) 用于可配置空间加速器中的时间复用的装置、方法和系统
US20210200540A1 (en) Apparatuses, methods, and systems for fused operations in 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