可重配置的数据处理器的虚拟化

文档序号:24170 发布日期:2021-09-21 浏览:29次 >En<

阅读说明:本技术 可重配置的数据处理器的虚拟化 (Virtualization of reconfigurable data processor ) 是由 格雷戈里·弗莱德里克·格罗霍斯 苏姆蒂·贾拉斯 马克·卢特雷尔 拉古·帕拉哈卡 伦·西瓦拉玛 于 2020-01-02 设计创作,主要内容包括:可重配置的数据处理器包括可配置单元阵列和可配置以定义虚拟机的总线系统。该系统可以将可配置单元阵列划分为多组可配置单元,并且阻止特定组内的可配置单元与特定组外的可配置单元之间经由总线系统的通信。存储器访问控制器可以被连接到总线系统,可配置为将对源自特定组内的可配置单元阵列外的存储器的访问限制到被分配给特定组的存储器空间。(A reconfigurable data processor includes an array of configurable cells and a bus system configurable to define virtual machines. The system may divide the array of configurable elements into groups of configurable elements and prevent communication between configurable elements within a particular group and configurable elements outside the particular group via the bus system. A memory access controller may be connected to the bus system and may be configured to restrict access to memory originating from outside the configurable element array within a particular group to the memory space allocated to the particular group.)

可重配置的数据处理器的虚拟化

优先权申请

本申请要求于2019年01月03日提交的美国非临时申请号16/239,252(代理人卷号SBNV 1000-1)的权益,该申请通过引用并入本文。

技术领域

本技术涉及可重配置架构的虚拟化,其特别地可以被应用于粗粒度的可重配置架构。

背景技术

相较于使用执行计算机程序的通用处理器,可重配置的处理器,包括现场可编程门阵列(FPGA),可以被配置为更有效或更快速地实现各种功能。所谓的粗粒度可重配置架构(例如,CGRA)正在被开发,其中阵列中的可配置单元比典型的、更细粒度的FPGA中所使用的更复杂,并且可以使得能够更快或更有效地执行各类功能。例如,CGRA已经被提出,其能够实施用于机器学习和人工智能的工作负荷的节能加速器。参见,Prabhakar等人,“橡皮泥:用于并行模式的可重配置架构”,ISCA’17,2017年6月24-28日,多伦多,安大略省,加拿大。

可重配置的处理器的配置涉及配置描述的编译,以产生由配置文件表示的应用图,有时被称为位流或位文件,并且向处理器上的可配置单元分发配置文件。要开始使用应用图实现的过程,配置文件必须针对该过程而被加载。要改变使用应用图实现的过程,配置文件必须用新的配置文件替换。

用于分发和加载配置文件的程序和支持结构可以是复杂的,并且程序的执行可以很耗时。

在某些环境中,可以需要在单个可重配置的处理器中同时执行多个应用图。

因此需要提供支持可重配置的处理器的虚拟化的技术。

发明内容

描述了一种技术,该技术使得能够在粗粒度可重配置阵列处理器和在包含可配置单元阵列的其他类型的可重配置的处理器中执行多个、不相关的应用图。

本文所描述的技术提供了一种用于可重配置的数据处理器,包括可配置单元阵列;被连接到可配置单元阵列的总线系统,总线系统可配置为将可配置单元阵列划分为多个可配置单元组,并且阻止特定组内的可配置单元和特定组外的可配置单元之间经由总线系统的通信。此外,被连接到总线系统的存储器访问控制器,可配置为将对源自特定组内的可配置单元阵列外的存储器(诸如大容量DRAM、SRAM和其他存储器类别)的访问限制到可配置单元阵列外的存储器中的被分配给特定组的存储器空间。

在本文所描述的实施例中,多个存储器访问控制器包括作为总线系统上的可寻址节点而被连接的存储器访问控制器,并且可配置为将对源自对应的可配置单元组内的可配置单元阵列外的存储器的访问限制到被分配给对应的组的存储器空间。

总线系统的示例包括被连接到可配置单元阵列中的可配置单元的交换机网格,网格中的交换机包括用于划分总线系统的电路。网格中的交换机可以包括使用端口参数可配置的电路,该电路根据端口参数启用和禁用交换机上的端口。

多个可配置单元组中的可配置单元组能够可配置以使用虚拟地址执行应用图。存储器访问控制器包括或有权访问可配置表,以将源自在特定组内执行的应用图的请求中的虚拟地址转换为被分配给特定组的存储器空间中的地址。用于本描述目的的物理地址是总线系统上的存储器接口使用的地址,用于标识外部存储器中存储器空间中的位置,并且虚拟地址是特定虚拟机中的应用图使用的地址,该地址被转换为物理地址,诸如通过存储器访问控制器。在本文所描述的设备中,总线系统包括顶部级别网络和阵列级别网络。顶部级别网络被连接到外部数据接口,用于使用物理地址与阵列外的存储器进行通信。阵列级别网络被连接到可配置单元阵列中的可配置单元。在像本文所描述的那样的两级总线系统中,存储器访问控制器被连接到阵列级别网络和顶部级别网络,并且包括用于路由在顶部级别网络和阵列级别网络之间传送的数据的逻辑。

阵列级别网络可以包括交换机网格,其中在网格中的交换机、可配置单元阵列中的可配置单元和存储器访问控制器是阵列级别网络上的可寻址节点。

在一些实施例中,一种设备包括可配置单元阵列,该可配置单元阵列包括多个可配置单元瓦片。包括这种多个瓦片的设备可以在单个集成电路或单个多芯片模块上被实现。总线系统可以包括在瓦片之间的边界上的交换机,瓦片包括用于在瓦片边界上划分总线系统的电路。更一般地,可配置单元阵列可以包括为了划分目的的可配置单元块,其包括阵列中的可划分组。在一些实施例中,可划分组可以包括多于一种类型的可配置单元。在一些实施例中,阵列可以包括原子可划分组,其包括可用于组成虚拟机的最小可配置单元组。此外,总线系统可以被配置为在可划分组的边界上隔离阵列中的可配置单元。

一种设备被描述,其中配置控制器被连接到总线系统,该总线系统可以被用于在可配置单元组中交换应用图,而不会干扰在同一可重配置的处理器上的其他可配置单元组中执行的应用图。包括这种配置控制器的可重配置的处理器可以在单个集成电路或单个多芯片模块上被实现。配置控制器可以包括用于执行配置加载过程的逻辑,包括向阵列中单个可配置单元组中的可配置单元分发配置文件,其中可配置单元组中的一个可配置单元组中的应用图在另一可配置单元组中的配置加载过程期间是可执行的。而且,配置控制器可以包括用于执行配置卸载过程的逻辑,包括从单个组中的可配置单元卸载状态信息,其中可配置单元组中的一个可配置单元组中的应用图在另一可配置单元组中的配置卸载过程期间是可执行的。配置控制器可以独立于其他可配置单元组对各个可配置单元执行配置加载和卸载操作。

总之,描述了包括用于配置可重配置的数据处理器的方法的技术,可重配置的数据处理器包括可配置单元阵列和被连接到可配置单元阵列的总线系统。该方法可以包括将可配置单元阵列划分为多个可配置单元组,通过阻止特定组内的可配置单元和特定组外的可配置单元之间经由总线系统的通信;以及将对源自特定组内的可配置单元阵列外的存储器的访问限制到可配置单元阵列外的存储器中的被分配给特定组的存储器空间。

本文所描述的技术提供用于CGRA或其他类型的可配置单元阵列的动态重配置。主机中的运行时应用或服务可以包括用于在可重配置的处理器内对资源的分配和重分配的例程。在一个这样的例程中,主机可以在各个可配置单元组中加载应用图,并且开始被加载的应用图以引起多个应用图同时或并行执行。当需要改变或更新正在执行的应用图时,主机可以停止并且卸载可配置单元组中的一个可配置单元组的被选定的应用图,并且在组中的一组中加载另一应用图,同时可配置单元阵列中其他可配置单元组中的其他应用图继续执行。

在查看附图、

具体实施方式

和跟随的权利要求时,本文所描述的技术的其他方面和优点可以被看到。

附图说明

图1是示出了包括主机、存储器和可重配置的数据处理器的系统的系统图。

图2是CGRA(粗粒度可重配置架构)的顶部级别网络和组件的简化框图。

图3是在图2的配置中可用的瓦片和阵列级别网络的简化图,其中阵列中的可配置单元是阵列级别网络上的节点。

图3A示出了连接阵列级别网络中的元件的示例交换机单元。

图4是包括可配置单元阵列和实现虚拟机的资源的系统的框图。

图5是类似于图4系统中的由存储器访问控制器执行的程序的流程图。

图6示出了被划分为多个可配置单元组的可配置单元阵列的一部分。

图7示出了根据另一实施例的包括多个瓦片的、被划分为多个可配置单元组的可配置单元阵列的一部分。

图8示出了在瓦片边界上的被划分为多个可配置单元组的可配置单元阵列的一个示例。

图9示出了被划分为多个可配置单元组的可配置单元阵列的另一示例。

图10示出了跨多个CGRA设备的虚拟机的实现。

图11是用于在可配置单元阵列中分配虚拟机资源的程序的流程图。

图12是示出了在可配置单元阵列中可使用的可配置交换机的示例的框图。

图13是示出了示例可配置单元的框图。

图14示出了可以被用于控制可配置单元中的单元配置加载过程的状态机图的一个示例。

图15是支持可配置单元中配置存储的负载的结构的逻辑表示。

图16是示出了被耦合到可重配置的数据处理器的主机的操作的流程图。

图17是示出了可以是主AGCU的一部分或以其他方式与瓦片中的可配置单元阵列通信的配置负载控制器的操作的流程图。

图18示出了配置文件的示例组织。

图19是示出了用于类似于图2和图3的系统的用于执行阵列配置加载过程的逻辑的一个示例的状态机图。

图20是示出了类似于图19的分发序列的早期轮次的时序的时序图。

图21是示出了可配置单元中的单元配置加载过程的流程图。

图22是示出了用于类似于图2和图3的系统的用于执行阵列配置卸载过程的逻辑的一个示例的状态机图。

图23是示出了可配置单元中的单元配置卸载过程的流程图。

具体实施方式

以下描述将典型地参考具体的结构实施例和方法。应当理解,无意将技术限制于具体的公开的实施例和方法,而是该技术可以使用其他特征、元件、方法和实施例而被实践。优选实施例被描述以说明本技术,而不是限制其由权利要求所限定的范围。本领域的普通技术人员将认识到以下描述的各种等效变化。

图1是示出了包括主机120、存储器140和可重配置的数据处理器110的系统的系统图。如图1的示例中所示,可重配置的数据处理器110包括可配置单元(CU)阵列190和虚拟化逻辑195。虚拟化逻辑195可以包括支持或使得能够对在一个管芯或一个多芯片模块上的可配置单元阵列中的多个、不相关的应用图(或相关的应用图)进行同时执行的资源。在图中,第一应用图在可配置单元的特定组196中的虚拟机VM1中被实现,并且第二应用图在另一可配置单元组197中的虚拟机VM2中被实现。

用于本描述目的的应用图包括用于阵列中的可配置单元的配置文件,该配置文件被编译以使用设备执行任务功能程序或程序组,诸如人工智能或机器学习系统中的推理或学习。用于本描述的目的的虚拟机包括一组资源(包括虚拟化逻辑195和总线系统115的元件),这些资源被配置为支持对可配置单元阵列中的应用图的执行,以一种在应用图看起来好像对可用资源有物理约束的方式,诸如在物理机中所经历的那样。虚拟机可以作为使用虚拟机的任务功能的应用图的一部分而被建立,也可以使用单独的配置机制而被建立。在本文所描述的实施例中,使用也在应用图中被使用的可配置单元阵列的资源来实现虚拟机,因此,用于应用图的配置文件包括配置文件对应的虚拟机的配置数据,并且将应用图链接到可配置单元阵列中的特定可配置单元组。

虚拟化逻辑195可以包括多个逻辑元件,包括用于划分阵列190的电路、一个或多个存储器访问控制器以及一个或多个配置加载/卸载控制器,如下文更详细地描述的。

本文所使用的短语“配置加载/卸载控制器”是指配置加载控制器和配置卸载控制器的组合。配置加载控制器和配置卸载控制器可以使用单独的逻辑和数据路径资源而被实现,或者可以根据特定实施例使用共享逻辑和数据路径资源而被实现。

处理器110可以在单个集成电路管芯上或在多芯片模块上被实现。集成电路可以封装在单芯片模块或多芯片模块(MCM)中。MCM是一种由组装成单个封装的多个集成电路管芯组成的、被配置为单个设备的电子封装。MCM的各种管芯被安装在衬底上,并且衬底的裸管芯使用例如引线键合、带式键合或倒装芯片键合被连接到表面或彼此。

处理器110包括经由线路125而被连接到主机120的外部I/O接口130和被连接到存储器140的外部I/O接口150。I/O接口130、150经由总线系统115连接到可配置单元阵列190和虚拟化逻辑195。总线系统115可以具有一个数据块的总线宽度,对于这个示例可以是128位(对128位的引用可以更一般地被认为是示例块大小)。一般来说,配置文件的块可以有N位的数据,并且总线系统可以被配置为在一个总线周期内传送N位的数据,其中N是任何实际的总线宽度。在分布序列中分布的子文件可以由一个块或适合特定实施例的其他数据量组成。程序在本文中使用子文件进行描述,每个子文件由一个数据块组成。当然,该技术可以被配置为分布不同大小的子文件,包括例如可以由分布在两个总线周期中的两个块组成的子文件。

为了用针对应用图和虚拟机的配置文件来配置可配置单元阵列190中的可配置单元,主机120可以经由接口130、总线系统115和在可重配置的数据处理器110中的接口150将配置文件发送到存储器140。配置文件可以以适合特定架构的多种方式被加载,包括在可配置处理器110外部的数据路径中。配置文件可以经由存储器接口150从存储器140中被检索。用于虚拟机中的应用图的配置文件的块然后可以按照本文所描述的分布序列被向与虚拟机对应的阵列190中的可配置单元组发送,同时其他可配置单元组或其他虚拟机中的应用图可以继续同时执行。在虚拟化的支持中,配置文件可以包括由用于划分阵列的电路使用的参数和由存储器访问控制器使用的参数和被分配给特定虚拟机的配置加载和卸载逻辑。

外部时钟发生器170或其他内部或外部时钟信号源可以向可重配置的数据处理器110中的元件提供时钟信号175或多个时钟信号,包括可配置单元阵列190和总线系统115,以及外部数据I/O接口。

图2是CGRA(粗粒度可重配置架构)处理器的组件的简化框图,该处理器可以在单个集成电路管芯或多芯片模块上被实现。在该示例中,CGRA处理器有2个瓦片(瓦片1、瓦片2)。瓦片包括被连接到总线系统的可配置单元组,在该示例中包括阵列级别网络。总线系统包括将瓦片连接到外部I/O接口205(或任何数目的接口)的顶部级别网络。在其他实施例中,不同的总线系统配置可以被使用。在该实施例中,每个瓦片中的可配置单元是阵列级别网络上的可寻址节点。

四个瓦片中的每个瓦片都有4个AGCU(地址生成和合并单元)(例如,MAGCU1、AGCU12、AGCU13、AGCU14)。AGCU是顶部级别网络上的节点和阵列级别网络上的节点,并且包括用于在每个瓦片中的顶部级别网络上的节点和阵列级别网络上的节点之间路由数据的资源。在其他实施例中,不同数量的AGCU可以被使用,或者它们的功能可以与CGRA处理器中的其他组件或瓦片中的可重配置的元素组合。

在该例子中,顶部级别网络上的节点包括一个或多个外部I/O接口,包括接口205。到外部设备的接口包括用于在顶部级别网络上的节点和被连接到接口的外部设备(诸如大容量存储器、主机处理器、其他CGRA处理器、FPGA设备等)之间路由数据的资源。

在该示例中,瓦片中的AGCU中的一个被配置为主AGCU,它包括用于瓦片的阵列配置加载/卸载控制器。在其他实施例中,多于一个的阵列配置加载/卸载控制器可以被实现,并且一个阵列配置加载/卸载控制器可以通过分布在多于一个的AGCU之间的逻辑被实现。在该示例中,瓦片中的所有AGCU都包含存储器访问控制器(MAC)。在其他实施例中,存储器访问控制器可以被实现为阵列级别和顶部级别网络上的单独节点,并且包括充当阵列级别和顶部级别网络之间的网关的逻辑,该逻辑将与执行图的可配置单元组的通信限制到被分配给该可配置单元组的存储器空间,以及可选的其他被分配的、使用顶部级别网络可访问的资源。存储器访问控制器可以包括地址寄存器和地址转换逻辑,其可配置为将对可配置单元阵列外的存储器的访问限制在访问源自的、被分配给可配置单元组的存储器空间中,或者限制在来自可配置单元阵列外的存储器的数据被定向的存储器空间中。

在本示例中,MAGCU1包括用于瓦片1(Tile1)的配置加载/卸载控制器,而MAGCU2包括用于瓦片2(Tile2)的配置加载/卸载控制器。在其他实施例中,配置加载/卸载控制器可以被设计用于加载和卸载多于一个瓦片的配置。在其他实施例中,多于一个配置控制器可以被设计用于对单个瓦片的配置。此外,配置加载/卸载控制器可以在系统的其他部分被实现,包括作为顶部级别网络和阵列级别网络或多个网络上的独立节点。

顶部级别网络是使用相互连接的顶部级别交换机(211-216)以及顶部级别网络上的其他节点而被构建的,包括AGCU和I/O接口205。顶部级别网络包括连接顶部级别交换机的链路(例如,L11、L12、L21、L22)。数据在链路上的顶部级别交换机之间以分组的形式传送,并且从交换机向网络上被连接到交换机的节点传送。例如,顶部级别交换机211和212通过链路L11被连接,顶部级别交换机214和215通过链路L12被连接,顶部级别交换机211和214通过链路L13被连接,顶部级别交换机212和213通过链路L21被连接。链路可以包括一个或多个总线和支持控制线,包括例如块宽总线(矢量总线)。例如,顶部级别网络可以包括数据、请求和响应通道,这些通道可操作用于以类似于AXI兼容协议的方式协调数据传送。参见,AXI和ACE协议规范,ARM,2017年。

顶部级别交换机可以被连接到AGCU。例如,顶部级别交换机211、212、214和215分别被连接到瓦片Tile1中的MAGCU1、AGCU12、AGCU13和AGCU14。顶部级别交换机212、213、215和216分别被连接到瓦片Tile2中的MAGCU2、AGCU22、AGCU23和AGCU24。

顶部级别交换机可以被连接到一个或多个外部I/O接口(例如,接口205)。

图3是图2的配置中可用的瓦片和阵列级别网络的简化图,其中阵列中的可配置单元是阵列级别网络上的节点。

在该示例中,可配置单元阵列300包括多种类型的可配置单元。该示例中可配置单元的类型包括模式计算单元(PCU)、模式存储器单元(PMU)、交换机单元(S),以及地址生成和合并单元(每个地址生成和合并单元包括两个地址生成器AG和一个共享CU)。针对这些类型的可配置单元的功能示例,参见,Prabhakar等人,“橡皮泥:用于并行模式的可重配置架构”,ISCA’17,2017年6月24-28日,多伦多,安大略省,加拿大,以引用方式并入本文,如同在本文完全阐述一样。这些可配置单元中的每个可配置单元都包含配置存储,其中包含一组表示设置或运行程序的顺序的寄存器或触发器,并且可以包括嵌套循环的数目、每个循环迭代器的限制、每个阶段要执行的指令、操作数的来源,以及输入和输出接口的网络参数。

此外,这些可配置单元中的每个可配置单元都包含配置存储,该配置存储包括一组寄存器或触发器,这些寄存器或触发器存储可用于跟踪嵌套循环或其他方式中的过程的状态。配置文件包含位流,表示执行程序的组件中的每个组件的初始配置或开始状态。该位流被称为位文件。程序加载是基于位文件的内容在可配置单元阵列中设置配置存储的过程,以允许所有组件执行程序(即,机器)。程序加载也可能需要所有PMU存储器的加载。

阵列级别网络包括对阵列中的可配置单元进行互连的链路。阵列级别网络中的链路包括一种或多种物理总线,在本例中为三种物理总线:块级矢量总线(例如,128位数据)、字级标量总线(例如,32位数据),以及多位级控制总线。例如,交换机单元311和312之间的互连321包括具有128位矢量总线宽度的矢量总线互连、具有32位标量总线宽度的标量总线互连和控制总线互连。

这三种物理总线的不同之处在于所传送的数据的粒度。在一个实施例中,矢量总线可以携带包括16字节(=128位)数据作为其有效载荷的块。标量总线可以有32位的有效载荷,并且携带标量操作数或控制信息。控制总线可以携带控制握手,诸如令牌和其他信号。矢量和标量总线可以是分组交换的,包括指示每个分组的目的地的标头和其他信息,诸如当分组被无序接收时可以被用于重组文件的序列号。每个分组标头可以包含目的地标识符和接口标识符,目的地标识符用于标识目的地交换机单元的地理坐标(例如,阵列中的行和列),接口标识符用于标识被用于到达目的地单元的目的地交换机上的接口(例如,北、南、东、西等)。例如,控制网络可以基于设备中的时序电路被电路交换。配置加载/卸载控制器可以针对每个128位的配置数据块生成标头。标头在标头总线上被传送给可配置单元阵列中的每个可配置单元。

在一个示例中,128位的数据块在矢量总线上被传送,该矢量总线将块作为矢量输入提供给可配置单元。矢量总线可以包括128条有效载荷线和一组标头线。标头可以包含针对每个块的序列ID,其中可以包括:

·指示块是否包含高速暂存存储器或配置存储数据的位。

·形成块编号的位。

·指示列标识符的位。

·指示行标识符的位。

·指示组件标识符的位。

针对加载操作,配置加载控制器可以按照从N-1到0的顺序将编号为N的块向可配置单元发送。在这个示例中,6个块以最高有效位优先的第一顺序发送出去:Chunk 5->Chunk 4->Chunk 3->Chunk2->Chunk 1->Chunk 0。(请注意,这个最高有效位的第一顺序导致Chunk 5在来自阵列配置负载控制器的分布序列的第0轮次中分布。)针对卸载操作,配置卸载控制器可以将乱序的卸载数据写入存储器。针对加载和卸载操作的两者,在可配置单元中的配置数据存储中的配置串行链中的移位是从LSB(最低有效位)到MSB(最高有效位),或MSB首先移出。

图3A示出了连接阵列级别网络中的元件的示例交换机单元。如图3A的示例所示,交换单元可以有8个接口。交换机单元的北(N)、南(S)、东(E)、西(W)接口被用于交换机单元之间的连接。交换机单元的东北(NE)、东南(SE)、西北(NW)和西南(SW)接口分别被用于连接到PCU或PMU实例。每个瓦片象限中的一组两个交换机单元具有到地址生成和合并单元(AGCU)的连接,AGCU包括多个地址生成(AG)单元和被连接到多个地址生成单元的合并单元(CU)。合并单元(CU)在AG之间进行仲裁并且处理存储器请求。交换机单元的8个接口中的每个接口可以包括矢量接口、标量接口和控制接口,以与矢量网络、标量网络和控制网络进行通信。

在用于划分可配置交换机阵列的逻辑的实施例中,交换机包括配置数据,诸如交换机端口禁用寄存器SPDR和交换机路由寄存器SRR。在一个实施例中,阵列中的每个交换机可使用配置加载和卸载过程进行配置,以阻止使用交换机上的一个或多个交换机端口的通信。因此,围绕可配置单元组的一组交换机可以被配置为将瓦片划分为多个可配置单元组,其可由不同的应用图使用。

在具有多个瓦片的另一实施例中,仅瓦片的外部行和外部列上的交换机可使用配置加载和卸载过程进行配置,以允许或阻止使用一个或多个跨瓦片边界的交换机端口的通信。例如,交换机端口禁用寄存器可以被设置为禁用跨瓦片边界的通信。

在配置之后虚拟机的执行期间,数据可以经由一个或多个单元交换机被发送,并且单元之间的一个或多个链路使用阵列级别网络上的一个或多个交换机单元的矢量总线和(多个)矢量接口切换到可配置单元。

本文所描述的实施例中,在瓦片的配置之前,配置文件或位文件可以从使用同一矢量总线的配置负载控制器,经由一个或多个单元交换机以及单元交换机之间的一个或多个链路而被发送使用阵列级别网络上的一个或多个交换机单元的矢量总线和(多个)矢量接口的可配置单元。例如,特定于可配置单元PMU 341的单元文件中的配置数据块可以从配置加载/卸载控制器301发送到PMU 341,经由配置加载/卸载控制器301和交换机单元311的西(W)矢量接口之间的链路320、交换机单元311、以及交换机单元311的东南(SE)矢量接口和PMU 341之间的链路331。

在该示例中,AGCU中的一个AGCU被配置为主AGCU,主AGCU包括配置加载/卸载控制器(例如,301)。主AGCU实现了一个寄存器,主机(120,图1)可以通过该寄存器经由总线系统向主AGCU发送命令。主AGCU控制对瓦片中可配置单元阵列的操作,并且实现程序控制状态机以基于它通过写入到寄存器从主机接收的命令来跟踪瓦片的状态。针对每个状态转换,主AGCU通过菊花链命令总线(图4)向瓦片上的所有组件发布命令。这些命令包括用于重置瓦片中的可配置单元阵列中的可配置单元的程序重置命令,以及用于将配置文件加载到可配置单元的程序加载命令。

主AGCU中的配置负载控制器负责从存储器中读取配置文件,并且将配置数据向瓦片的每个可配置单元发送。主AGCU可以优选以顶部级别网络的最大吞吐量从存储器中读取配置文件。从存储器读取的数据由主AGCU根据本文所描述的分发序列通过阵列级别网络上的矢量接口而被传送到对应的可配置单元。

在一个实施例中,以一种可以减少可配置单元内的布线要求的方式,保持要在配置加载过程中加载的单元文件或组件中的配置卸载过程中被卸载的单元文件的配置和状态寄存器被连接在串行链中,并且可以通过串行链通过移动位的过程而被加载。在一些实施例中,可以存在多于一个的并联或串联布置的串联链。当可配置单元在一个总线周期内从主AGCU接收例如128位的配置数据时,可配置单元以每周期1位的速率通过其串行链移位该数据,其中移位器周期可以以与总线周期的相同的速率运行。可配置单元需要128个移位器周期才能用通过矢量接口接收的128位数据加载128个配置位。128位配置数据被称为块(Chunk)。可配置单元可以需要多个数据块来加载其所有配置位。示例移位寄存器结构如图6所示。

可配置单元通过多个存储器接口(150,图1)与存储器相连接。每个存储器接口可以使用数个AGCU而被访问。每个AGCU包含可重新配置的标量数据路径,以生成针对片外存储器的请求。每个AGCU都包含用于组织数据的缓冲区,以缓冲来自片外存储器的传出命令、数据和传入响应。

AGCU中的地址生成器AG可以生成密集或稀疏的存储器命令。密集请求可被用于批量传送连续的片外存储器区域,并且可以被用于从/向可配置单元阵列中的可配置单元读取或写入数据块。密集请求可以通过AGCU中的合并单元(CU)被转换为多个片外存储器突发请求。稀疏请求可以将地址流排队入合并单元。合并单元使用合并缓存来维护发布的片外存储器请求的元数据,并且组合属于同一片外存储器请求的稀疏地址以最小化发布的片外存储器请求的数目。

如上所述,所示实施例中的每个AGCU包括存储器访问控制器MAC 301、302、303和304。每个存储器访问控制器可以专用于瓦片中的所有可配置单元。备选地,由配置文件设置的不同图可以驻留在瓦片中不同的经划分的可配置单元组上,并且经划分的组中的每个组可以通过配置文件被分配给被连接到经划分的组内的交换机的存储器访问控制器中的一个存储器访问控制器。

图4示出了包括被耦合到外部主机401和外部存储器402的CGRA设备400的系统。可以有多个接口405将设备400耦合到主机401,包括例如PCIE类型的接口或适用于特定实现的其他类型的接口。一个或多个接口405可以是网络连接,包括基于互联网的网络连接。主机401可以包括任何系统,包括能够与设备400协作执行运行时程序的基于云的系统。

可以有多个接口406将设备400耦合到存储器402,包括例如适用于连接到高密度DRAM存储器的高速双倍数据速率接口,或适用于特定实现的其他类型的接口。

CGRA设备400包括被耦合到阵列级别网络411的可配置单元阵列410。在该图中,该阵列被划分为多个可配置单元组VM1、VM2、...VMn。可配置单元阵列可以支持不同“形状”的虚拟机。例如,在一些实施例中,可以存在可支持其资源需求与原子组的资源相匹配的虚拟机的最小大小的可配置单元组和其他CGRA资源(原子组)。较大的VM可以由原子组的聚合组组成,以组成不同的VM形状。在一个示例中,原子组是瓦片,如图3所示,并且VM可以跨越多个瓦片。在其他实施例中,原子组可以是瓦片的一部分(行和列的子集),具有用于将VM通信、存储器和由不同原子组配置组成的VM的加载/卸载彼此隔离的逻辑。

阵列级别网络411还被耦合到一个或多个地址生成和合并单元AGCU 420。AGCU420被耦合到顶部级别网络412,顶部级别网络412又被耦合到接口405、406,用于与包括外部主机401和外部存储器402的外部资源通信。

AGCU 420包括充当阵列级别网络411和顶部级别412之间的网关的逻辑。

AGCU的网关功能包括在该示例中利用映射表422的存储器访问控制器,映射表422将被用于限制阵列410中可配置单元组之间的通信的虚拟机存储器空间映射到被分配给由对应的可配置单元组实现的虚拟机的存储器中的区域。

在一个实施例中,通过AGCU的任何存储器访问都由映射表422过滤。如果从被分配给特定可配置单元组的存储器空间外的特定可配置单元组的存储器访问被尝试,则该存储器访问被阻止。在一些实施例中,除了阻止访问之外,异常消息还可以被向主机发送,其指示运行在可配置单元组中的特定应用图的存储器访问违规。

该示例中的AGCU还包括配置控制器421,被用于从阵列中的对应的可配置单元组加载和卸载图以支持虚拟机。

映射表422可以被配置为对应的AGCU 420的配置文件的一部分。

图5是示出了由AGCU中的存储器访问控制器执行的逻辑的流程图,诸如可以被用于上述系统中。在该流程中,在包括AGCU的可配置单元组中的应用图的执行期间,AGCU可以监视用于存储器访问(510)的阵列级别网络上的通信。当存储器访问被接收时,请求中的虚拟地址(即,在特定虚拟机中执行的应用图所使用的地址)被解析(511)。请求的来源与特定的虚拟机相匹配(512)。使用映射表422,虚拟地址被转换为物理地址(即,到可配置单元阵列之外的存储器的地址)。这可以通过使用被分配给特定可配置单元组的虚拟机的标识符VMID查找存储器映射MM来完成(513)。存储器访问控制器确定访问是否映射到超出被分配给虚拟机的存储器空间边界的物理地址(515)。如果访问没有超出边界,则存储器访问请求使用物理地址在顶部级别网络上被发布(516)。如果访问超出边界,则异常在顶部级别网络上被发布,并且该请求被丢弃(517)。

该流程图描述了用于来自特定虚拟机正在执行的特定可配置单元组内的请求的逻辑。针对从顶部级别网络向特定可配置单元组传送的数据,类似的过程可以被执行。

多个可配置单元组中的可配置单元组可配置为使用虚拟地址执行应用图,并且存储器访问控制器包括或有权访问可配置表以将源自特定组内执行的应用图的请求中的虚拟地址转换为被分配给特定组的存储器空间中的地址。在一些示例中,响应于来自阵列中其他单元的通信,虚拟地址在AGCU中被生成。这些虚拟地址在存储器访问控制器中被转换为物理地址。

在一个实施例中,存储器访问控制器可配置为将每个应用图分配给多个存储器区域。使用基址/边界方法根据要被包括在被分配的存储器空间中的区域的最大数量,映射可以被实现。例如,假设被分配给每个应用图的存储器空间最多可以包括16个存储器区域,编译器可以使用AGCU中地址寄存器的63:60位静态地分配区域ID。

在一种方法中,编译器为每个区域分配基址存储器地址0和大小。它还分配了指示符来验证每个被分配的区域的使用。

被分配的区域被包含在由编译器生成的配置文件中。这可以采用X条目区域表的形式,其中X是整数,并且每个表条目都是具有以下字段的结构:

有效(Valid)-表条目被分配;

大小(Size)-该区域的N位大小;该区域的大小可能是非2的幂;以及

将AGCU存储器地址生成器(计数器/ALU输出)绑定到给定区域的每个区域的关联列表。

在位文件加载时间,来自区域表的条目被用于对链接到被用于实现应用图的可配置单元组的每个AGCU中的有效、基址和边界寄存器进行编程。取决于区域绑定机制,每个AGCU地址生成器也可以被绑定到特定区域。在一些示例中,基址地址可以由运行时分配。

当AGCU生成存储器地址和长度以响应于源自其可配置单元组中内的可配置单元的访问请求时,在用顶部级别网络上的地址发送事务之前,以下操作将被执行。

该X区域示例中的Z位地址可以包括2部分。多个最高位(Z-1:W)标识区域访问寄存器。低位(W-1:0)标识区域中的相对虚拟偏移。

AGCU使用虚拟地址的位(Z-1:W)查找物理区域的基址/边界。以位为单位的偏移被添加到该区域的基址寄存器以产生实际的DDR物理地址。基址值按长度递增,并且根据限制寄存器,产生的范围地址被检查。如果范围地址小于或等于限制,则地址和请求经由顶部级别网络被向DDR传递用于处理。

如果范围地址超过限制,则运行时异常被生成,顶部级别网络请求被禁止,并且AGCU停止处理来自该地址生成器的进一步地址请求。

在备选的实施例中,存储器访问控制器可以使用其他方法使用虚拟到物理的转换来实现虚拟地址(VA)到物理地址(PA)的映射。例如,在VA-PA缓冲区转换方法中,运行时软件通过VA-PA转换过程将编译器生成的地址区域映射到物理存储器中的可用存储器空间。这允许运行时将大型虚拟地址空间划分为多个物理地址空间,这些物理地址空间可以传遍在多个可配置单元阵列。物理地址空间可以被划分为段,其在某些情况下具有最小大小(例如,1MB)和最大大小(例如,1TB)。

为了有效地将虚拟地址转换为物理地址,每个存储器访问控制器可以实现16条目的VA-PA缓冲区,它保持16个虚拟段的映射信息。该示例中的VA-PA缓冲区是完全关联的,并且在配置加载期间从位文件(配置文件)被加载。每个VA-PA缓冲区的条目也可以通过寄存器写入而被写入。每个VA-PA缓冲区条目可以由2个子字段组成:VSID_PA和V_SSIZE。这些子字段中的每个子字段都在下表中被描述:

VSID_PA:

V_SSIZE:

在配置加载过程中,AGCU从位文件中的VA-PA缓冲区结构填充其VA-PA缓冲区。

在虚拟机中的应用图的执行期间,基于被链接到AGCU的可配置单元组中的应用图,虚拟地址被生成。

存储器访问控制器通过在每个VA-PA缓冲区条目中搜索匹配的虚拟段来转换虚拟地址。

转换错误可以被存储器访问控制器检测,例如包括:

1.转换不存在:请求的VA与任何VA-PA缓冲区条目的VSID位都不匹配。

2.多个匹配:请求的VA匹配多个条目的VSID位。

3.SSIZE大于最大值:匹配条目的SSIZE大于设置的最大值。

这些错误可以与引起错误的VA一起被记录在状态寄存器中。此外,在转换错误上,存储器访问控制器可以向主机发送中断或其他类型的通知,丢弃引起的错误的请求,并且停止处理任何新请求。

图6示出了诸如参考图3所描述的那些的可配置单元阵列,包括PCU、PMU和交换机单元。在阵列中的其他可寻址节点(诸如,在AGCU中)中被实现的配置加载逻辑和存储器访问控制器逻辑未被示出。阵列级别网络包括交换机网格,交换机网格能够配置为被连接到该区域中的其他可配置单元。

配置文件可以被用于配置交换机以阻止交换机上被选择的端口外的通信,以便将阵列划分为经划分的可配置单元组。在图6所示的示例中,阵列被配置为包括标记为VM1的第一可配置单元组和标记为VM2的第二可配置单元组。可配置单元组边界上的交换机被配置为阻止从对应分组内的单元到外部单元的通信。例如,交换机600可以被配置为阻止西南端口、西端口、西北端口、北端口和东北端口,同时启动东端口、东南端口和南端口。交换机601可以被配置为阻止西北端口、北端口和东北端口,同时启用交换机上的其他端口。交换机602可以被配置为仅阻止东南端口,同时启用交换机上的其他端口。以这样的方式,可配置单元阵列的划分可以被组合以形成可配置单元的隔离组。在本文所描述的实施例中,每个隔离组被耦合到如上所述的存储器访问控制器和配置控制器。

更一般地,可配置单元阵列可以包括可配置单元块,为了划分的目的,可配置单元块包括阵列中的可分区组。在一些实施例中,可划分组可以包括多于一种类型的可配置单元,包括如图3所示的PMU、PCU、交换机和AGCU。总线系统可以被配置为在适合给定实现的任何大小的阵列内的可划分组的边界上,提供将阵列划分为可配置单元组。

图7示出了诸如参考图3所描述的那些的可配置单元阵列,包括PCU、PMU和交换机单元。在该示例中,可配置单元阵列包括多个可配置单元瓦片。总线系统包括在瓦片之间的边界上的交换机,交换机包括在瓦片边界上划分总线系统的电路。在该示例中,可以被分配给在对应的组中执行的特定虚拟机或图的可配置单元组在瓦片边界上被划分,并且可以包括一个或多个瓦片。

因此,如图所示,第一虚拟机VM1被隔离在可配置单元组内,该可配置单元组包括瓦片T1和T3的至少一部分。第二虚拟机VM2被隔离在可配置单元组内,该可配置单元组包括瓦片T2、T4、T5和T6的至少一部分。

配置加载逻辑和存储器访问控制器逻辑在未示出的阵列中的其他可寻址节点(诸如在AGCU中)中被实现,包括每个瓦片中的至少一个瓦片。

瓦片边界上的交换机可以称为边界交换机,边界交换机可配置为使用上面所讨论的配置文件来阻止被选择的端口上的通信。网格中的其他交换机可能有或也可能没有禁用端口的能力。例如,交换机700可以被配置为阻止从瓦片T5中的可配置单元组通向瓦片T3中的可配置单元组的所有端口。同样地,交换机701可以被配置为阻止跨越从瓦片T5到T3的边界的端口。在该示出的实施例中,每个瓦片包括按行和列布置的交换机网格。边界交换机在每行末端被设置。每个瓦片的顶行和底行中的所有交换机都可以是边界交换机。边界交换机可以被配置为相互路由,如下所示。每个瓦片最里面的芯片列的交换机可以连接到它们的左/右邻居,创建到它们的相邻瓦片的双向东/西链接,从而融合成单个逻辑瓦片。类似地,沿着每个瓦片中最里面的芯片行的交换机可以连接到它们的北/南邻居,将北/南瓦片对融合成单个瓦片。在一些实施例中,仅一行或一列边界交换机可以在瓦片边界上被实现,而不是如图所示在每个瓦片中的一行和一列。

在可配置单元阵列中被划分的可配置单元组可以具有多种配置。图8示出了系统中的示例配置,其中可配置单元的阵列800包括多个瓦片T1至T6,边界交换机可配置为启动或阻止瓦片边界上的通信。在该示例中,第一虚拟机VM1被配置在瓦片T1和T3内,而第二虚拟机VM2被配置在瓦片T2、T4、T5和T6内。被配置为虚拟机VM1和VM2的可配置单元组中的每个可配置单元组都包括可以从可配置单元组内访问的在阵列级别网络上的可寻址节点上的存储器访问控制器MAC和配置控制器CC(804、805)。

图9示出了系统中的示例配置,其中可配置单元阵列可能不包括瓦片,或者在可配置单元阵列的单个瓦片内,其中阵列级别网络上的交换机被配置为将阵列划分为成具有更灵活边界的多个组。在该图中,虚拟机VM1在左上方所示区域中的可配置单元组中被实现,并且虚拟机VM2在阵列900下部中所示区域中的可配置单元组中被实现。被配置为虚拟机VM1和VM2的可配置单元组中的每个可配置单元组都包括可以从可配置单元组内访问的阵列级别网络上的可寻址节点上的存储器访问控制器MAC和配置控制器CC(904、905)。

图10示出了包括多个CGRA的系统,其中虚拟机可以跨CGRA1和CGRA2被配置。每个CGRA都可以在单个集成电路上被实现。CGRA可以具有如上文结合图3和其他图所讨论的那样的可配置单元阵列,或任何其他类型的可配置单元阵列,可配置单元阵列可划分为具有支持虚拟化逻辑的可配置单元组。

图10中的系统包括执行运行时程序的主机1000。此外,第一可配置单元阵列1010在CGRA1上被实现,而第二可配置单元阵列1020在CGRA2上被实现。CGRA中的每个CGRA被耦合到对应的存储器1110、1120。主机系统总线1005将主机1000与两个CGRA上的可配置单元阵列1010、1020互连。高速存储器接口1015、1025将CGRA耦合到对应的存储器1110、1120。

在一些实施例中,主机1000可以经由CGRA中的顶部级别网络与存储器1110和存储器1120通信。

在图10中,第一虚拟机VM1被配置在可配置单元组中,该可配置单元组被限制在CGRA1上的阵列1010。此外,第二虚拟机VM2被配置在可配置单元组中,该可配置单元组包括CGRA1上的阵列1010中的可配置单元和CGRA2上阵列1020上的可配置单元。

图11是示出了支持如本文所述的虚拟机的系统执行资源分配例程以优化系统中的可配置单元阵列的使用的能力的流程图。在简化的流程图中,在运行时正在主机上执行的应用或其他监控服务可以在可重配置的处理器的可配置单元阵列中加载多个VM和对应的应用图(AG)(1140)。主机应用可以发送命令以启动加载的AG的执行,以便多个AG在它们各个VM内同时执行(1141)。在AG正在执行的同时,主机程序可以监视分配资源以实现特定应用图的虚拟机的请求(1142),诸如当正在执行的AG需要更新为新的AG或需要启动更高优先级的AG时。然后,该服务确定可以实现新AG的新虚拟机的需求(1143)。此外,该服务可以调查可重配置的处理器中的可配置单元阵列中的资源利用,更一般地,调查系统中所有可用的可重配置的处理器中的资源利用(1144)。新AG的需求和执行AG对资源的利用被比较,以确定是否有可用资源分配以响应请求(1145)。如果资源不可用,则服务可以选择具有较低优先级的应用图,停止被选择的AG(如果可用,则使用检查点),并且卸载AG以释放资源(1154)。在一些实施例中,服务可以等待直到资源由于其他原因变得可用。在实现VM用于执行AG的系统中,其他AG可以在被选择的AG被停止和卸载时保持执行。如果资源可用,则使用新的可用的可配置单元组来供应VM,并且新的AG配置文件可以被加载和启动(1155)。

通常,虚拟化使得以在应用图的执行期间可以改变的方式能够分配和重新分配资源。为了完全的检查点应用图,应用图可以使用静止点被编译,其中应用图没有未完成的存储器或主机事务,并且可以跨瓦片和芯片以一致的方式被停止。在一种方法中,编译器可以在图执行中的特定点插入检查点操作。这些可以与一定数量的最外层循环或其他与执行相关的事件的完成相对应。

在检查点,应用图被停止,并且配置卸载可以被执行,该配置卸载包括可用于重新启动被暂停的应用图的可配置单元的状态信息。因此,配置卸载过程可以包括倾倒高速暂存存储器(例如,橡皮泥示例中的PMU存储器)、流水线和控制寄存器状态,以及交换机和存储器访问控制器或AGCU状态。

图12是示出了可在如本文所述的可配置单元阵列中可以使用的示例可配置交换机的框图。可配置交换机包括用于仲裁阵列级别网络中矢量、标量和控制总线之间的通信的电路1205。在该实施例中,每个交换机包括具有八个端口的电路1205,包括北、南、东和西端口,这些端口被配置为连接到交换机网格中的相邻交换机。此外,八个端口包括东北、东南、西南和西北端口,用于连接其他类型的可配置单元,诸如PCU、PMU和AGCU(可以包括本文所描述的存储器访问控制器和配置控制器)。

为了将阵列划分为多个可配置单元组,可配置交换机包括交换机端口禁用寄存器SPDR[0:7]。在一种实现中,SPDR寄存器包含针对每个方向上的每个北/南/东/西端口的1位;位分配如下。

[0]:如果设置为“1”,则禁用北端口上的出站事务。任何传出事务都将被默默删除。否则,启用北端口上的出站事务。

[1]:如果设置为“1”,则禁用北端口上的入站事务。任何入站事务都将被默默删除。否则,启用北端口上的入站事务。

[2]:如果设置为“1”,则禁用南端口上的出站事务。任何传出事务都将被默默删除。否则,启用南端口上的出站事务。

[3]:如果设置为“1”,则禁用南端口上的入站事务。任何入站事务都将被默默删除。否则,启用南端口上的入站事务。

[4]:如果设置为“1”,则禁用东端口的出站事务。任何传出事务都将被默默删除。否则,启用东端口出站事务。

[5]:如果设置为“1”,则禁用东端口的入站事务。任何入站事务都将被默默删除。否则,启用东端口的入站事务。

[6]:如果设置为“1”,则禁用西端口上的出站事务。任何传出事务都将被默默删除。否则,将启用西端口上的出站事务。

[7]:如果设置为“1”,则禁用西端口上的入站事务。任何入站事务都将被默默删除。否则,将启用西端口上的入站事务。

如果不需要单独的入站和出站端口控制,则可以通过使每个端口方向有单个比特来简化该设计。此外,更少数目的预定义配置可以使用更少的位在配置寄存器中而被指示。

网格中的可配置交换机包括配置数据存储1220(例如,可以包括端口禁用寄存器的串行链)以存储单元文件,该单元文件包括特定于对应的交换机的配置数据的多个块(或其他大小的子文件)。配置数据存储1220经由线路1221被连接到电路1205。此外,网格中的可配置交换机的每个可配置交换机都包括经由线路1222被连接到配置数据存储1220的单元配置加载逻辑1240。单元配置加载逻辑1240执行单元配置加载过程。单元配置加载逻辑1240执行单元配置加载过程。单元配置加载过程包括经由总线系统(例如,矢量输入)接收统一特定于可配置交换机的块,并且将被接收的块加载到可配置交换机的配置数据存储1220中。参考图15进一步描述单元配置加载过程。

在该示例中,被存储在网格中的可配置交换机中的配置数据包括锁存器的串行链,其中锁存器存储控制交换机中的资源的配置的位。配置数据存储中的串行链可以包括用于配置数据的第一移位寄存器链,诸如端口启动和禁用参数,以及用于串联连接的状态信息和计数器值的第二移位寄存器链。

可配置交换机中的每个端口都可以使用三个对应的输入和输出组与标量总线、矢量总线和控制总线相连接。此外,可配置交换机可以与标量总线、矢量总线和控制总线相连接用于被定向到交换机的通信,包括例如用于与配置加载和卸载过程相关联的通信。

尽管未示出,但是端口中的每个端口可以包括FIFO缓冲器和其他资源以支持交换机网格中基于分组和/或基于路由的通信。

在该实施例中,配置加载和卸载过程使用菊花链完成总线来指示用于配置网格中的可配置交换机的加载/卸载命令何时完成。如图12的示例所示,菊花链完成总线1291和菊花链命令总线1292被连接到菊花链逻辑1293。菊花链逻辑1293与单元配置加载逻辑1240通信。菊花链逻辑1293可以包括如下所述的加载完成状态逻辑。下面进一步描述菊花链完成总线。控制输入通过控制块1270接收,并且控制输出由控制块1270提供。用于命令和完成总线的其他拓扑结构也是可能的,但本文没有描述。

图13是示出了示例可配置单元1300,诸如模式计算单元(PCU)的框图。可配置单元阵列中的可配置单元包括配置数据存储1320(例如,串行链)以存储单元文件,该单元文件包括特定于对应的可配置单元的配置数据的多个块(或其他大小的子文件)。可配置单元阵列中的可配置单元每个都包括经由线路1322被连接到配置数据存储1320的单元配置加载逻辑1340,以执行单元配置加载过程。单元配置加载过程包括经由总线系统(例如,矢量输入)接收特定于可配置单元的单元文件的块,并且将被接收的块加载到可配置单元的配置数据存储1320中。参考图14进一步描述了单元配置加载过程。

在该示例中,存储在多个可配置单元中的可配置单元中的配置数据包括锁存器的串行链,其中锁存器存储控制可配置单元中的资源的配置的位。配置数据存储中的串行链可以包括用于配置数据的第一移位寄存器链和用于串联连接的状态信息和计数器值的第二移位寄存器链。参考图15进一步描述了配置存储。

可配置单元可以使用三个对应的输入和输出(IO)组与标量、矢量和控制总线相连接:标量输入/输出、矢量输入/输出和控制输入/输出。标量IO可以被用于传送单个数据字(例如,32位)。矢量IO可以被用于传送数据块(例如,128位),诸如在单元配置加载过程中接收配置数据,以及在跨多个PCU之间的长流水线的配置后的操作期间发送和接收数据。控制IO可以被用于传送控制信号,诸如可配置单元的执行的开始或结束。控制输入通过控制块1370接收,并且控制输出由控制块1370提供。

每个矢量输入使用矢量FIFO块1360中的矢量FIFO而被缓冲,矢量FIFO块1360可以包括一个或多个矢量FIFO。每个标量输入都使用标量FIFO1350而被缓冲。使用输入FIFO将数据生产者和消费者之间的时序解耦,并且通过使其对输入延迟不匹配具有鲁棒性来简化可配置单元间的控制逻辑。

输入配置数据1310可以作为矢量输入被提供给矢量FIFO,然后被向配置数据存储1320传送。使用矢量输出,输出配置数据1330可以从配置数据存储1320被卸载。

CGRA使用菊花链完成总线来指示加载/卸载命令何时已经被完成。主AGCU通过菊花链命令总线将程序加载和卸载命令向可配置单元阵列中的可配置单元传送(从S0转换到S1,图14)。如图13的示例所示,菊花链完成总线1391和菊花链命令总线1392被连接到菊花链逻辑1393,与单元配置加载逻辑1340通信。如下所述,菊花链逻辑1393可以包括加载完成状态逻辑。下面进一步描述菊花链完成总线。命令和完成总线的其他拓扑显然是可能的,但本文没有描述。

可配置单元包括在块1380中的多个可重配置的数据路径。可配置单元中的数据路径可以被组织为多阶段(阶段1…阶段N)、可重配置的SIMD(单指令、多数据)流水线。被推入可配置单元中的配置串行链的数据块包括针对可配置单元中每个数据路径的每个阶段的配置数据。配置数据存储1320中的配置串行链经由线路1321被连接到块1380中的多个数据路径。

模式存储器单元(例如,PMU)可以包含与用于地址计算的可重配置的标量数据路径相耦合的高速暂存存储器,以及PCU中使用的总线接口。PMU可以被用于在整个可重配置单元阵列中分发片上存储器。在一个实施例中,PMU中存储器内的地址计算在PMU数据路径上被执行,同时核心计算在PCU内被执行。

图14示出了状态机的一个示例,该状态机可以被用于控制可配置单元中的单元配置加载过程。通常,单元配置加载过程在一个总线周期内从总线系统接收特定于可配置单元的单元文件的第一块(或子文件),在随后的移位器周期中开始将被接收的第一块推入串行链,这些移位器周期的发生的速率与总线周期相同,在单元文件的第二块被接收之前。在稍后的总线周期中从总线系统接收特定于可配置单元的单元文件的第二块时,在将先前被接收的块推入串行链之后的周期的期间,该过程开始将被接收的第二块推入串行链中。在配置加载过程的某些或所有轮次中,在多个有序块中的第二块(接下来按单元文件的块顺序)被可配置单元接收之前,第一块可以被可配置单元中的单元配置加载过程消耗。

图14的状态机包括六个状态S0到S5。在状态S0(空闲)处,单元配置加载过程等待来自主AGCU中的配置加载/卸载控制器的配置加载/卸载命令。配置加载/卸载控制器负责从/向片外存储器(140,图1)和向/从可配置单元阵列(190,图1)加载和卸载配置数据。当配置加载/卸载控制器接收加载命令时,单元配置加载过程进入状态S1。

在状态S1(等待静止)处,多个数据路径中的功能触发器被禁用,因此功能触发器不循环,并且标量输出、矢量输出和控制输出被关闭,因此输出不驱动任何负载。如果加载命令已被接收,则单元配置加载过程进入状态S2。当卸载命令被接收时,单元配置加载过程进入状态S4。

在状态S2(等待输入有效),单元配置加载过程等待输入FIFO(1510,图15)变为有效。当输入FIFO变为有效时,输入FIFO已经经由总线系统接收配置文件的配置数据块。例如,配置数据块可以包括128位的负载数据,负载数据在总线系统的矢量网络上被接收并且矢量网络具有128位的矢量总线宽度。当输入FIFO变为有效时,单元配置加载过程进入状态S3。

在状态S3(负载移位),128位的配置数据块首先从输入FIFO在一个时钟周期内出队,并且然后128位的配置数据块在128个时钟周期中被移入输入移位寄存器(1520,图15)。输入移位寄存器可以具有与配置数据块相同的长度(例如,128),并且将配置数据块移入输入移位寄存器需要与配置数据块的长度相同数目的移位器时钟周期(例如,128)。如上所述,在一些实施例中,移位器时钟和总线时钟(或总线周期)可以以相同的速率运行。

可配置单元中的配置数据存储包括配置串行链(1530、1540,图15),串行链可以被配置为FIFO链,以存储包括特定于可配置单元的多个配置数据块的单元文件。多个配置数据块包括第一配置数据块和最后配置数据块。输入移位寄存器中的配置数据块在随后的时钟周期中进一步串行移位到配置数据存储中。参考图15进一步描述了配置数据存储。

在特定于可配置单元的单元文件的第一块在状态S3处被移入输入移位寄存器之后,单元配置加载过程确定第一配置数据块是否是特定于可配置单元的最后配置数据块。如果是,则可配置单元的单元文件加载完成,单元配置加载过程进入状态S0。如果不是,则单元配置加载过程进入状态S2,并且等待输入FIFO针对特定于可配置单元第二配置数据块变得有效。

当在状态S1中卸载命令被接收时,单元配置加载过程进入状态S4。

在状态S4(卸载移位)处,来自配置数据存储的配置数据块被移入输出移位寄存器(1550,图15)。配置数据块可以包括128位的卸载数据。输出移位寄存器可以具有与配置数据块相同的长度(例如,128),并且将配置数据块从配置数据存储移入输出FIFO需要与配置数据块的长度相同数目的移位器时钟周期(例如,128)。当配置数据块移入输出移位寄存器时,单元配置加载过程进入状态S5(等待输出有效)。

在状态S5(等待输出有效)处,单元配置加载过程等待输出FIFO(1560,图15)变为有效。当输出FIFO变为有效时,来自输出移位寄存器的128位配置数据块在一个时钟周期内被插入到输出FIFO。然后输出FIFO中的配置数据块可以被发送给总线系统(图3)。

在状态S5处,在第一配置数据块被移入输出FIFO之后,单元配置加载过程确定第一配置数据块是否是配置数据存储中的最后配置数据块。如果是,则可配置单元的配置数据卸载完成,单元配置加载过程进入状态S0。如果不是,则单元配置加载过程进入状态S4,并且来自配置数据存储的第二配置数据块被串行移位到输出移位寄存器中。

图15是可配置单元中的配置存储的逻辑表示。可配置单元中的配置数据存储(420,图4)在本实施例中包括配置串行链,包括第一移位寄存器链1530和第二移位寄存器链1540。第一移位寄存器链1530包括一组寄存器或锁存器。第二移位寄存器链1540包括另一组寄存器或锁存器(触发器)。在本实施例中,第一移位寄存器链和第二移位寄存器链串联形成单链。

配置文件包括用于可配置单元阵列中的多个可配置单元中的每个可配置单元的多个配置数据块。配置数据块表示各个可配置单元的初始配置或开始状态。该系统中的配置加载操作是在可配置单元阵列中设置配置数据的单元文件以允许所有可配置单元执行程序的过程。

第一移位寄存器链1530中的寄存器组可以表示设置或运行程序的序列,包括对包含寄存器的可配置单元的操作的定义。这些寄存器可以注册嵌套循环的数目、每个循环迭代器的限制、每个阶段要执行的指令、操作数的来源以及输入和输出接口的网络参数。第二移位寄存器链中的寄存器组可以包含关于被加载在可配置单元中的程序的逐周期运行状态的数据。

如图15的示例所示,第一移位寄存器链1530和第二移位寄存器链1540串联连接,使得第一移位寄存器链的MSB(最高有效位)被连接到第二移位寄存器链的LSB(最低有效位)。加载信号或卸载信号可以作为被耦合到第一移位寄存器链的LSB和第二移位寄存器链的LSB的移位使能信号,以控制第一移位寄存器链和第二移位寄存器链上的加载/卸载操作。输入FIFO 1510经由选择器1570被耦合到输入移位寄存器1520。当加载信号激活时,选择器1570将输入移位寄存器1520连接到配置数据存储的输入(第一移位寄存器链1530的LSB)。

当加载信号激活时,输入移位寄存器1520中的配置数据可以被移入配置串行链中的第一移位寄存器链1530和第二移位寄存器链1540。这里加载信号可以作为输入移位寄存器、第一移位寄存器链和第二移位寄存器链的使能信号。加载操作可以重复,直到可配置单元的所有配置数据块都被加载到可配置单元中的配置数据存储中。当串行链的长度与整数的块(或子文件)的长度不同时,系列中的第一块可以用差异而被填充,当最后块被移入时,填充位将被移出到链的末尾。例如,可配置单元中的配置数据存储可以存储大小为760位的单元文件。单元配置加载过程可以加载整数N的块(chunk)。本示例中N=6,N个块包括Chunk5、Chunk 4、Chunk 3、Chunk 2、Chunk1和Chunk 0。矢量总线的矢量宽度为128位,配置数据块具有128位,块可以在一个总线时钟周期内被发送给可配置单元。N个块的大小为N x 128=6*128=768位,其中包括8个填充位以匹配760位的单元文件大小。

为了从错误中恢复,卸载操作可以检查点每个可配置单元的状态。卸载操作可以保存重启所需的每个可配置单元的执行状态,并且在发生错误时启用要被重启的应用图。它还允许可配置单元的状态出于调试的目的被保存或传送。需要被保存的状态至少包括部分第一或第二移位寄存器的内容,以及可选的PMU存储器的内容。程序卸载还可以需要卸载所有第一和第二移位寄存器的状态。

输出FIFO 1560被耦合到输出移位寄存器1550,输出移位寄存器1550又被耦合到配置数据存储(第二移位寄存器链1540的MSB)的输出。对于卸载操作,当卸载信号激活时,第二移位寄存器链1540和第一移位寄存器链1530中的配置数据可以被移入输出移位寄存器1550。当输出FIFO 1560有效时,输出移位寄存器1550中的配置数据(例如,128)可以在一个时钟周期内被插入到输出FIFO 1560中。卸载操作可以重复,直到可配置单元中的配置数据存储中的所有配置数据块都被卸载到输出FIFO中。

为了同步和传送由MAGCU中的配置负载控制器发布的配置负载命令的完成,在一个示例中,单线菊花链方案被实现,由被包含在链的每个组件中的菊花链逻辑(例如,图13中的菊花链逻辑1393)中的逻辑支持。该方案要求每个组件具有以下2个端口:

1.被称为PROGRAM_LOAD_DONE_IN的输入端口

2.被称为PROGRAM_LOAD_DONE_OUT的输出端口

当组件已经完成执行由MAGCU发布的命令并且其PROGRAM_LOAD_DONE_IN输入被驱动为高电平时,组件将驱动其PROGRAM_LOAD_DONE_OUT信号。MAGCU将在已经完成执行命令的所有必要步骤后,通过驱动其PROGRAM_LOAD_DONE_OUT来启动菊花链。链中的最后的组件将驱动其PROGRAM_LOAD_DONE_OUT,PROGRAM_LOAD_DONE_OUT将被连接到MAGCU的PROGRAM_LOAD_DONE_IN。MAGCU的PROGRAM_LOAD_DONE_IN变高表示命令的完成。在递送与所有组件的所有CHUNKS对应的数据之后,MAGCU将其PROGRAM_LOAD_DONE_OUT端口驱动为高电平。当所有组件已经完成加载其所有配置位后,所有组件都会将其各个PROGRAM_LOAD_DONE_OUT端口驱动为高电平。

当MAGCU的输入端口PROGRAM_LOAD_DONE_IN被断言时,配置文件加载完成。

图16是示出了被耦合到可重配置的数据处理器的主机的操作的流程图。在步骤1611处,主机(120,图1)经由PCIE接口(130,图1)和顶部级别网络(115,图1)将可配置单元阵列的配置文件发送到片外存储器(140,图1),或以其他方式将配置文件存储在可配置处理器可访问的存储器中。

在步骤1612处,当配置文件加载到存储器完成时,主机120向处理器中的配置加载控制器(该示例中是主AGCU的一部分)发送配置加载命令。主AGCU可以实现寄存器,主机可以通过该寄存器向配置加载控制器发送配置加载命令。配置加载命令可以标识经由可配置的处理器上的存储器接口可访问的存储器中的位置,该存储器接口指定了配置文件的位置。配置加载控制器然后可以响应于命令经由顶部级别网络生成一个或多个存储器访问请求以检索配置文件。主机然后可以监视可配置的处理器的配置文件已经被完全加载的信号(1614)。当文件加载完成时,则主机可以启动由机器执行的功能(1616)。

图17是示出了配置负载控制器的操作的流程图,该配置负载控制器可以是MAGCU的一部分或以其他方式与瓦片中的可配置单元阵列通信。配置加载控制器负责从片外存储器(140,图1)读取配置文件,并且将配置数据发送到可配置单元阵列中的每个可配置单元。该流程图开始于配置加载控制器等待配置加载命令(1710)。如上所述,配置加载命令标识配置文件,以及它在存储器中处理器可访问的位置。

在接收加载命令时,在步骤1711处,配置加载控制器向被连接到可重配置的数据处理器(110,图1)的存储器(140,图1)发布加载请求。在步骤1712,配置加载控制器经由存储器接口在顶部级别网络上检索配置文件块。在步骤1713处,配置负载控制器将配置文件块以有序的轮次分发到阵列级别网络上的阵列中的可配置单元。在步骤1714处,当所有配置文件块都已经被接收并且被分发后,配置加载控制器生成分发完成信号(例如,其PROGRAM_LOAD_DONE_OUT)。配置加载控制器然后等待来自可配置单元的它们各个单元文件已经被加载的确认,例如通过在步骤1715处断言其PROGRAM_LOAD_DONE_IN而被指示。在成功配置加载的确认后,配置加载控制器可以通知主机(1716)。

图18示出了配置文件的一个示例组织。其他组织可以被使用以及布置适合用于加载和卸载配置文件的特定协议。在参考图9所描述的示例中,可配置单元阵列中的可配置单元包括交换机、PCU、PMU和AGCU。这些可配置单元中的每个配置单元都包含一组寄存器,表示设置或运行程序的序列。这些寄存器包括定义包含它的可配置单元的操作的数据,诸如嵌套循环的数目、每个循环迭代器的限制、每个阶段要执行的指令、操作数的来源以及输入和输出接口的网络参数。此外,每个配置文件都可以包括用于在一组计数器中设置上下文的数据,这些计数器在每个嵌套循环中跟踪其进度。

可执行的程序包含表示执行程序的每个可配置单元的初始配置或开始状态的位流。该位流被称为位文件,或在本文中被称为配置文件。程序加载是基于配置文件的内容在可配置单元中设置配置存储以允许所有可配置单元执行程序的过程。程序卸载是从可配置单元卸载配置存储并且组装位流的过程,在本文中被称为卸载配置文件。在本文所描述的示例中,卸载配置文件具有相同的布置块或子文件以及用于程序加载的配置文件。

配置文件包括用于可配置单元阵列中的每个可配置单元的多个配置数据块,块以匹配它们将被分发的顺序的方式被布置在配置文件中。配置文件的这种组织使得阵列配置加载过程能够基于块在配置文件中的位置将块路由到可配置单元。

如图18所示,配置文件(和以相同方式被布置的卸载配置文件)包括多个单元文件块,用于多个可配置单元中的每个可配置单元,单元文件具有最多M个(在该示例中,Z4=6)在单元文件中具有顺序(i)的子文件。在图9中,M是6,块从第一个到第六个排序(即,第一到第六块与该索引中的块(0)到(5)相对应)。块被布置为使得针对(i)的顺序(i)的所有子文件从0到M-1,针对加载或卸载配置文件中的所有单元文件,都被存储在存储器中的地址空间的对应的块(i)中,其中(i)从0到M-1。顺序(0)的块被存储在块(0)中,包括地址A0到A1-1。本示例中交换机单元的顺序(0)块位于块(0)内的一组连续地址中。PCU的顺序(0)块位于块(0)内的一组连续地址中。PMU的顺序(0)块位于块(0)内的一组连续地址中。AGCU的顺序(0)块位于一组连续地址中。顺序(1)的块被存储在块(1)中,包括地址A1到A2-1。本示例中交换机单元的顺序(1)块被存储在块(1)内的一组连续地址中。PCU的顺序(1)块位于块(1)内的一组连续地址中。PMU的顺序(1)块位于块(1)内的一组连续地址中。AGCU的顺序(1)块位于块(1)内的一组连续地址中。顺序3到5的块按照块(2)到(5)中的模式被布置,如图9所示。

显然,在该示例中,线性地址空间在线边界上的配置文件的块内被分配。在其他实施例中,线性地址空间可以在字边界或块边界上被分配。边界可以被选择以匹配所使用的存储器的效率特点。因此,该示例中的配置文件包括具有连续线地址的存储器线。

同样,阵列包括多于一种类型的可配置单元,不同类型的可配置单元的单元文件包括不同数目的配置数据子文件,并且其中在地址空间块(i)内,每种类型的可配置单元的子文件被存储在地址空间块(i)内的对应的连续地址组中。

阵列可以包括多于一种类型的可配置单元,并且不同类型的可配置单元的单元文件可以包括不同数目的配置数据块。例如,如图3所示,阵列中可配置单元的类型可以包括交换机单元、PCU(模式计算单元)、PMU(模式存储单元)和AGCU(地址生成和合并单元)。

示例配置文件组织包括:

W(例如,图3中的28)个交换机单元,每个单元需要Z1个配置位块;

X(例如,9)个PCU单元,每个单元需要Z2个配置位块;

Y(例如,9)个PMU单元,每个单元需要Z3个配置位块;

Z(例如,4)个AGCU单元,每个单元需要Z4个配置位块。

因此,第一类可配置单元的单元文件可以包括Z1个块,而第二类可配置单元的单元文件包括Z2个块,其中Z1小于Z2。阵列配置加载过程可以包括检索配置文件的段,包括第一类型和第二类型的所有可配置单元的单元文件的块(i),在Z1轮次(i)中从0到Z1-1,然后检索配置文件的段,包括所有第二类型可配置单元的单元文件块(i),在Z2轮次(i)从Z1到Z2-1。第三类型可配置单元的单元文件可以包括Z3块,第四类型可配置单元的单元文件包括Z4块,其中Z1小于Z2,Z2小于Z3,Z3小于Z4。对于需要多于(i+1)个块的所有不同类型的可配置单元,分发序列可以在这种模式下继续,每个块(i)一个轮次。

如示例配置文件组织所示,配置文件中的配置数据块以交错方式被布置:

·轮次R(i=0)的每个交换单元的2个配置位块中的第一个;

·轮次R(i=0)的每个PCU单元的3个配置位块中的第一个;

·轮次R(i=0)的每个PMU单元的5个配置位块中的第一个;

·轮次R(i=0)的每个AGCU单元的6个配置位块中的第一个;

·轮次R(i=1)的每个交换单元的2个配置位块中的第二个;

·轮次R(i=1)的每个PCU单元的3个配置位块中的第二个;

·轮次R(i=1)的每个PMU单元的5个配置位块中的第二个;

·轮次R(i=1)的每个AGCU单元的6个配置位块中的第二个;

·轮次R(i=2)的每个PCU单元的3个配置位块中的第三个;

·轮次R(i=2)的每个PMU单元的5个配置位块中的第三个;

·轮次R(i=2)的每个AGCU单元的6个配置位块中的第三个;

·轮次R(i=3)的每个PMU单元的5个配置位块中的第四个;

·轮次R(i=3)的每个AGCU单元的6个配置位块中的第四个;

·轮次R(i=3)的每个PMU单元的5个配置位块中的第五个;

·轮次R(i=4)的每个AGCU单元的6个配置位块中的第五个;

·轮次R(i=5)的4个AGCU单元中的每个AGCU单元的6个配置位块中的第六个。

单元文件可以被组织成包括多个有序块(或其他大小的子文件)。在一些实施例中,特定于不同可配置单元的单元文件可以具有不同数目的有序块。可配置单元阵列的配置文件被布置使得单元文件的块与其他单元文件的相同顺序的块分组。此外,配置文件被布置使得在配置文件中块的位置蕴含块阵列中的可配置单元及其在特定于可配置单元的单元文件中的顺序。

阵列配置加载过程可以检索配置文件的段,包括第一类型(交换机类型)、第二类型(PCU类型)、第三类型(PMU类型)和第四类型(AGCU类型)的所有可配置单元的单元文件块(i),(i)从0到Z1-1(=1)。在第一轮次中检索所有四种类型的可配置单元的单元文件的块(0),并且在第二轮次中检索四种类型的所有可配置单元的单元文件的块(1)。在第一轮次和第二轮次之后,所有第一类型(交换机类型)的可配置单元的单元文件的所有块(2)都已经被检索。第一、第二、第三和第四类型的所有可配置单元的单元文件分别有0、1、3和4个依然要被检索的块。

然后,阵列配置加载过程可以在第三轮次中检索配置文件的段,包括用于第二、第三和第四类型的所有可配置单元的单元文件的块(i)。在第三轮次之后,已经检索了所有第二类型(PCU类型)的可配置单元的所有单元文件块(3)。第一、第二、第三和第四类型的所有可配置单元的单元文件分别有0、0、2和3个依然要被检索的块。

然后,阵列配置加载过程可以在第四轮次中检索配置文件的段,包括用于第三和第四类型的所有可配置单元的单元文件的块(i)。在第四轮次之后,已经检索了所有第三类型(PMU类型)的可配置单元的所有(4)单元文件块。第一、第二、第三和第四类型的所有可配置单元的单元文件分别有0、0、1和2个依然要被检索的块。

阵列配置加载过程然后可以在第五、第六轮次检索配置文件的段,包括第三和第四类型的所有可配置单元的单元文件的块(i),(i)从Z3(=4)到Z4-1(5),在第六轮之后,已经检索了所有第四类型(AGCU类型)的可配置单元的所有(6)单元文件块。第一、第二、第三和第四类型的所有可配置单元的单元文件分别有0、0、0和0个依然要被检索的块。

以上述方式,阵列配置加载过程可以继续,直到第一、第二、第三和第四类型的所有可配置单元的单元文件没有剩余的块依然要被检索为止。

阵列配置加载过程使用配置文件中块的位置所蕴含的地址经由阵列级别网络将配置数据块路由到可配置单元。例如,198个交换机单元的每个配置数据的2个块中的第一个具有线性存储器地址0-12288,并且198个交换机单元中的每个的配置数据的2个块中的第二个具有线性存储器地址33792-46080。

在一些实施例中,配置文件的块可以无序地从存储器返回到配置加载控制器。配置文件中块的位置可以被用于将块路由到正确的可配置单元。由于分发序列中的轮次的组织,可配置单元保证按顺序接收其单元文件的块。

图19是状态机图,示出了针对类似于图2和图3的系统执行阵列配置加载过程的一个逻辑示例,包括分发包括用于阵列中的多个可配置单元的单元文件的配置文件,每个单元文件包括多个有序块(或子文件),通过发送在N轮次(其中R(i)的i=0到N-1)的序列中的一个顺序(i)的单元块,经由总线系统到所有可配置单元,可配置单元包括多个可配置单元中的最多N个子文件,直到配置文件中的单元文件被分发给多个可配置单元中的可配置单元。

在该示例中,状态机包括六个状态S1到S6。在状态S1(空闲(idle))处,配置加载控制器等待来自主机的配置加载命令。当配置加载命令被接收时,加载过程进入状态S2以开始执行分发序列的第一轮次R(0)。每轮遍历状态S2到S6。在本文所描述的示例中,存在六轮,因为要被分发到阵列中的可配置单元的块的最大数量是六。

在状态S2(交换机请求(Switch Req))处,配置负载控制器经由顶部级别网络生成存储器访问请求,以检索各自交换机单元的配置单元文件R(i)轮次的状态S2的块,并且将检索到的块分发到各个交换机单元。针对i=0,在R(0)轮次,配置负载控制器针对各个交换机单元的多个块中的块(0)产生存储器访问请求,并且将块(0)发送到各个交换机单元。针对i=1,在R(1)轮中,配置负载控制器针对各个交换机单元的多个块中的块(1)产生存储器访问请求,并且将块发送到各个交换机单元。在R(i)轮次中,当配置加载控制器已经针对各自交换机单元的多个块的块(i)产生了存储器访问请求,并且针对所有交换机单元分发了块时,加载过程进入状态S3。

在状态S3(PCU请求(PCU Req))处,配置加载控制器经由顶部级别网络生成存储器访问请求,以检索各个PCU单元(模式计算单元)的配置单元文件的R(i)轮的块,并且将检索到的块向各个PCU单元分发。在R(i)轮次的状态S3中,配置负载控制器针对各个PCU单元的多个块中的块(i)生成存储器访问请求,并且将块(i)发送到各个PCU单元。在R(i)轮中,当配置加载控制器已经针对各个PCU单元的多个块中的块(i)生成了存储器访问请求并且分发了块时,加载过程进入状态S4。

在状态S4(PMU请求(PMU Req))处,配置加载控制器经由顶部级别网络生成存储器访问请求,以检索可配置单元阵列中各个PMU单元(模式存储器单元)的配置单元文件的块,并且将检索到的块发送到各个PMU单元。在R(i)轮的状态S4中,配置负载控制器针对各个PMU单元的多个块中的块(i)生成存储器访问请求,并且将块(i)发送到各个PMU单元。例如,针对i=0,在R(0)轮次中,配置加载控制器针对各个PMU单元生成多个块中的块(0)的存储器访问请求,并将块(0)发送到各个PMU单元。针对i=1,在R(1)轮次中,配置负载控制器针对各个PMU单元的多个块中的块(1)生成存储器访问请求,并且将块(1)发送到各个PMU单元。在R(i)轮次中,当配置加载控制器已经针对各个PMU单元的多个块中的块(i)产生了存储器访问请求并且分发了块时,加载过程进入状态S5。

在状态S5(AGCU请求(AGCU Req))处,配置加载控制器经由顶部级别网络生成存储器访问请求,以检索可配置单元阵列中各个AGCU(地址生成和合并单元)的配置单元文件块,并且将检索到的块发送到各个AGCU单元。在R(i)轮次的状态S5中,配置负载控制器针对各个AGCU单元的多个块中的块(i)生成存储器访问请求,并且将块(i)发送到各个AGCU单元。在R(i)轮次的状态S5中,当配置加载控制器已经针对各个AGCU单元的多个块中的块(i)产生了存储器访问请求并且分发了块时,加载过程进入R(i)轮次的状态S6。

在状态S6(响应等待(Response Wait)),配置负载控制器等待以确保阵列中的可配置单元(交换机、PCU、PMU、AGCU单元)准备好在下一轮次接收更多的配置数据块。如果交换机单元的所有块都没有被发送,则加载过程递增(i)并且进入状态S2以开始下一轮次R(i+1)。如果交换机单元的所有数据块都被发送,但PCU数据块的所有数据块都没有被发送,则加载过程递增(i)并且进入状态S3以开始下一轮次R(i+1)。如果交换机单元和PCU单元的所有块都被发送,但PMU块的所有块都没有被发送,则加载过程递增(i)并且进入状态S4以开始下一轮次R(i+1)。如果交换机单元、PCU单元和PMU单元的所有数据块都被发送,但AGCU数据块的所有数据块都没有被发送,则加载过程递增(i)并且进入状态S5以开始下一轮次R(i+1)。如果所有可配置单元(交换机、PCU、PMU、AGCU单元)的所有块(即,所有轮次完成)被发送,则加载过程进入状态S1。

图20是时序图,示出了类似于图10的分发序列的早期轮次的时序。在该示例中,配置单元文件的块具有B位数据(例如,B=128),分发序列中的轮次可以包括X个可配置单元,可配置单元阵列可以包括Y个可配置单元(例如,Y=148)。针对R(0)轮次,X可以等于Y。在后续轮次中,X可以小于或等于Y。

在该示例中,R(0)轮次包括Y=148个可配置单元。针对轮次R(0)和R(1),X=Y。在前两轮R(0)和R(1)之后,交换机单元已经接收了所有(2)它们的块,因此第三轮次R(2)包括少于128个可配置单元。

如图20的示例中所示,R(0)轮次,配置单元文件的第一块P11在第一总线周期C0中经由总线系统在可配置单元处被接收。然后,通过在可配置单元处的并行任务中串行移位,第一块被加载到第一可配置单元“单元1”的配置存储中,同时该轮次的其他块由配置负载控制器分发到其他可配置单元,在B个时钟周期内第一块P11中的B位数据(可以以与总线时钟相同的速率运行)。在第二总线周期C1中,配置文件的第二块P21经由总线系统被接收。然后,通过在B个时钟周期内串行移位第二块P21中的B位数据,第二块在并行任务中被加载到第二可配置单元“单元2”的配置存储中。在第三总线周期C2中配置文件的第三块P31经由总线系统被接收。然后,通过在B个时钟周期内串行移位第三块P31中的B位数据,第三块P31被加载到第三可配置单元“单元3”的配置存储中。该轮次继续进行,直到所有可配置单元接收到特定于它们的单元文件的第一块。

轮次R(0)包括在阵列中的Y个各个可配置单元(单元1…单元Y)中分发配置文件(P11、P21、P31…PY1)的第一组Y块。配置文件的一块具有B位数据,可配置单元阵列具有Y数目的可配置单元。当第R(0)轮次完成时,第一组中配置文件的Y块(P11、P21、P31……PY1)已经在Y个总线周期(C0到CY-1)中在阵列中的Y个可配置单元中被接收,并且第一块P11已经在B个时钟周期内被加载或串行移入第一可配置单元“单元1”的配置存储中。B个时钟周期在第一块P11被接收的第一时钟周期C0之后。

下一轮次R(1)包括在阵列中的Y个各个可配置单元(单元1…单元Y)中接收配置文件的第二组Y块(P12、P22、P32…Py2)。当第R(1)轮次完成时,第二组中的Y个配置文件块(P12、P22、P32……Py2)已经在Y个时钟周期(Cy到C2y-1)中在阵列中的Y个各个可配置单元中被接收。当第R(1)轮次完成时,第一可配置单元“单元1”的第二块P12已经被加载或在R(1)轮次中的第一个时钟周期(Cy)之后的B个时钟周期内串行移入第一可配置单元“单元1”的配置存储。同样,当第二轮次完成时,在轮次R(0)中被接收的配置文件的第一组Y块中的最后块PY1已经被加载或串行移入最后可配置单元“单元Y”的配置存储中。

只要块中的位的数目B(128)小于轮次中可配置单元的数目X,可配置单元将在前一块已经被加载后接收单元配置文件的下一块,以便可配置单元应准备就绪而无需请求序列停止。在该示例中,块中的位数B为128,并且R(0)轮次中的可配置单元数目X为X=Y=148。由于将块中的128位串行移位到可配置单元的配置数据存储中需要128个时钟周期,移位完成后可以有效地有20(Y-B=148-128)个缓冲区周期,确保第一可配置单元“单元1”准备好接受下一轮次R(1)中的下一块(P12)。当块中的位数B大于轮次中可配置单元的数目X时,在前一块被消耗的同时下一块可以被接收。这里被消耗是指将块中的位串行移位到可配置单元的配置数据存储中。

通常,单元配置加载过程在一个总线周期内从总线系统接收特定于可配置单元的单元文件的第一块(或子文件),在下一轮次的单元文件的第二块被接收之前,在随后的总线周期期间,开始将接收到的第一块推入串行链,从总线系统接收特定于可配置单元的单元文件的第二块,用于之后的总线周期中的下一轮次序列,并且在将先前接收的块推入串行链之后,在序列的周期期间开始将接收的第二块推入串行链。在某些轮次中,在下一块被接收之前所有接收的块可以被消耗。

由于不同类型的可配置单元可能具有不同数目的配置位,因此可配置单元可能需要不同数目的块。一旦需要较少数目块的可配置单元已经加载了它们的所有配置位,配置加载控制器就会停止向它们发送数据。这会引起更少的可配置单元(数目X)交错,并且可能导致可配置单元在完成处理前一块之前接收新的块。这可以导致阵列级别网络的背压。

背压可以经由阵列级别网络上的信用机制而被处理。例如,每个输入FIFO都可以有一个逐跳(hop-to-hop)信用,所以如果PCU的输入FIFO填满,那么尝试将配置数据发送到PCU的输入FIFO的阵列级别网络中没有交换机可以发送数据,直到输入FIFO清空一个条目并且将信用返回给发送交换机。最终,当链路繁忙时,背压可能会阻止AGCU发送数据。但是,一旦可配置单元消耗了一个块的所有128位,它就会清空一个输入FIFO条目,信用被释放,然后如果可用,发送方可以发送一个新的块。

图21是示出了可配置单元中的单元配置加载过程的流程图。在步骤2121处,单元配置加载过程等待输入FIFO(610,图6)变为有效。当有效时,输入FIFO已经经由用于配置可配置单元的总线系统接收了配置文件的配置数据块。当输入FIFO有效时,流程继续进行步骤2122。

在步骤2122处,输入FIFO出队。在步骤2123处,来自输入FIFO的配置数据块被并行加载到输入移位寄存器(620,图6)中。在步骤2124处,输入移位寄存器中的配置数据块被移位到可配置单元的配置数据存储中的配置串行链中。

在步骤2125,单元配置加载过程确定加载的配置数据块是否是可配置单元的最后配置数据块。如果是,则可配置单元的配置数据加载完成。如果不是,则流程继续进行步骤2121,并且单元配置加载过程等待输入FIFO针对下一配置数据块变成有效。可配置单元中的单元配置加载过程将参考图14和15进一步描述。

图22是执行阵列配置卸载过程的逻辑的一个示例的状态机图。

在该示例中,状态机包括三个状态S1到S3。在状态S1(空闲),配置卸载控制器等待来自主机的配置卸载命令。配置卸载控制器针对阵列配置卸载过程实现两个计数“next_unld_req_count”和“next_unld_resp_count”。计数“next_unld_req_count”保持跟踪下一卸载请求计数。计数“next_unld_resp_count”保持跟踪下一卸载响应计数。在状态S1处,两个计数都被重置为初始值,诸如0。当配置卸载命令被接收时,卸载过程进入状态S2。

在状态S2(生成请求(Gen Req)),配置卸载控制器针对可配置单元阵列中的每个可配置单元生成卸载请求,包括阵列中的交换机单元、PCU、PMU和AGCU。对于生成的每个卸载请求,计数“next_unld_req_count”递增。计数“next_unld_req_count”与预定数目PROGRAM_UNLOAD_REQ_COUNT进行比较,该数目代表可配置单元阵列中可配置单元的总数。只要计数“next_unld_req_count”小于PROGRAM_UNLOAD_REQ_COUNT,卸载过程就停留在状态S2。当计数“next_unld_req_count”等于PROGRAM_UNLOAD_REQ_COUNT时,针对阵列中的每个可配置单元,卸载请求已经被生成,并且卸载过程进入状态S3。

在状态S3(响应等待(Response Wait))处,配置卸载控制器针对从阵列中的可配置单元接收的每个响应递增计数“next_unld_resp_count”。响应包括针对可配置单元的配置数据的单元文件中的块(子文件)。在一些示例中,响应还可以包括PMU高速暂存器数据。在卸载过程中,响应被提供给可配置单元的矢量输出,并且在矢量总线上被发送给配置负载控制器。只要计数“next_unld_resp_count”小于PROGRAM_UNLOAD_REQ_COUNT,卸载过程就停留在状态S3。

在状态S3处,卸载过程针对每个被接收的响应生成存储器地址,并且将接收的每个响应与在顶部级别网络上生成的存储器地址一起插入。每个响应都包含卸载块和序列ID。存储器地址由伴随阵列级别网络中携带块的分组的标头生成,包括块编号、列标识符、行标识符和序列ID中的组件标识符。组件标识符可以指示可配置单元是交换机单元、PCU单元、PMU单元还是AGCU单元。

当计数“next_unld_resp_count”等于PROGRAM_UNLOAD_REQ_COUNT时,响应已经从阵列中的每个可配置单元接收并且被插入顶部级别网络中,并且卸载过程转换回状态S1。

在一个实施例中,交换机单元中配置数据的线性存储器地址的顺序是第一列交换机单元中每行的第一块,然后是第二列交换机单元中每行的第一块,然后是第三列交换机单元中每行的第一块,......直到最后一列中每行的第一块。这将线性地址空间中所有交换机单元的第一块分组。其他类型的可配置单元的第一块在相邻地址空间的组中被加载。然后,顺序是第一列交换机单元中每行的第二块,然后是第二列交换机单元中每行的第二块,然后是第三列中每行的第二块,......直到最后一列交换机单元的最后一行的最后一个块,针对所有类型的可配置单元的第二块依此类推。

使用上述交换机单元中配置数据的存储器地址顺序,下面的伪代码示出了如何针对交换机单元(comp_switch)生成线性存储器地址。伪代码使用4个输入:

comp_id:组件标识符;

comp_col:列标识符;

comp_row:行标识符;

comp_chunk:块标识符;

并且产生输出:

linear_address:针对卸载块的线性存储器地址;

用于交换机单元的特定卸载块生成线性存储器地址的伪代码如下:

If(comp_id==comp_switch)begin

comp_num=comp_col*NUM_ROW_SW+comp_row;

linear_comp_num=comp_num+(comp_chunk*

COMP_COUNT_ALL);

linear_address=linear_comp_num*16;

end

其中

·comp_switch指示交换机单元;

·NUM_ROW_SW是所有交换机单元的行数;

·COMP_COUNT_ALL是所有可配置单元的总和。

可以使用类似的代码来针对PCU、PMU或AGCU单元的特定卸载块生成线性存储器地址。一个区别是所有交换机单元的行数与所有PCU的行数、所有PMU的行数、所有AGCU的行数不同。另一区别是交换机单元的线性存储器地址可以从基址地址(例如,0)开始,同时PCU、PMU和AGCU的线性存储器地址分别从交换机单元、PCU和PMU的最后一个块之后的地址开始。

图23是示出了可配置单元中的单元配置卸载过程的流程图。在步骤2331处,来自配置数据存储中的配置串行链的配置数据块被串行移位到输出移位寄存器(1550,图15)中。流程进入步骤2332。

在步骤2332处,单元配置卸载过程等待输出FIFO(1560,图15)或其他类型的输出缓冲区电路变为有效。在步骤2333处,当输出FIFO变为有效时,来自输出移位寄存器的配置数据块被插入到输出FIFO中。在步骤2334处,输出FIFO中的配置数据块被写入总线系统。

在步骤2335处,单元配置卸载过程确定第一配置数据块是否是配置数据存储中的最后配置数据块。如果是,则可配置单元的配置数据的卸载完成。如果不是,则流程转换回到步骤2331,并且来自配置数据存储的第二配置数据块被串行移位到输出移位寄存器中。为了支持暂停和卸载正在执行的应用图,配置存储,诸如串行链的一部分或单元中的其他存储器,可以包括存储状态信息的寄存器,当应用图被重新加载和重新启动时,可用于在其被暂停的点或靠近其被暂停的点的检查点处捡起执行。

本文提供了一种技术,能够在一个管芯上的可配置单元阵列中同时执行多个、不相关的应用图。这对于在一组较小的应用图之间共享管芯的计算能力特别有吸引力,诸如基于机器学习的人工智能系统中使用的推理或训练应用图。

本文所描述的实施例支持在瓦片级别处的虚拟化。在其他实施例中,虚拟化在子瓦片级别被支持。支持虚拟化的技术包括以下一种或多种机制:

a)编程交换机,并且在实施例中为瓦片边界交换机,以忽略入站流量,并且丢弃相对于对应的瓦片或子瓦片的出站流量。这可以防止任何错误或恶意编程的可配置单元组探测或干扰其他组。

b)对存储器访问控制器进行编程,例如具体为AGCU中,检查来自被允许的区域内的给定瓦片或子瓦片组(它们是虚拟的每瓦片地址)的存储器绑定请求的存储器地址,并且将这些区域映射到与共享处理器的任何其他过程不同的物理地址。这可以通过瓦片被允许访问的一组区域的基址/边界寄存器来实现,并且向每个出站地址添加偏移量以将虚拟地址重新定位/映射到适合该地址空间的物理地址。

c)通过在其他瓦片运行时加载配置位文件来独立编程每个瓦片的能力。在示例实施例中,可以经由适当的链接从本地或远程存储器或从主机加载位文件。

d)独立于其他瓦片或子瓦片卸载瓦片或子瓦片的能力。

虽然通过参考上面详述的优选实施例和示例公开了本发明,但是应当理解,这些示例旨在说明而不是限制意义。预期本领域技术人员将容易想到修改和组合,这些修改和组合将在本发明的精神和所附权利要求的范围内。

53页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于临时缓冲的片上密集存储器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!