硬件加速器上的卷积神经网络的制作方法

文档序号:14010991阅读:189来源:国知局
硬件加速器上的卷积神经网络的制作方法



背景技术:

计算行业致力于提高软件驱动的计算设备的速度和效率。软件驱动的计算设备采用以常规时间方式处理机器可读指令的一个或多个中央处理单元(cpu)。硬件加速部件(诸如,现场可编程门阵列(fpga))已被用于补充由软件驱动的计算设备所执行的处理。



技术实现要素:

根据第一方面,提供了一种用于实现卷积神经网络的硬件加速部件。该硬件加速部件被配置为接收输入数据和权重数据,并且被配置为生成m个输出数据平面。硬件加速部件包括n个功能单元行和m个功能单元列的阵列,被配置为存储输入数据的n个输入数据缓冲器的阵列以及被配置为存储权重数据的m个权重数据缓冲器的阵列。n个输入数据缓冲器中的每个输入数据缓冲器耦合到n个功能单元行中对应的功能单元行。m个权重数据缓冲器中的每个权重数据缓冲器耦合到m个功能单元列中对应的功能单元列。功能单元行中的每个功能单元被配置为从耦合到该行的输入数据缓冲器接收相同的输入数据集合。功能单元列中的每个功能单元被配置为从耦合到该行的权重数据缓冲器接收相同的权重数据集合。功能单元中的每个功能单元被配置为对所接收的输入数据和所接收的权重数据执行卷积,并且m个功能单元列被配置为提供m个输出数据平面。

根据第二方面,提供了一种用于实现多层卷积神经网络的硬件加速部件。该硬件加速部件被配置为接收输入数据和权重数据,并且该硬件加速部件包括功能单元行和列的可重新配置阵列、被配置为存储输入数据的第一输入数据缓冲器的阵列,其中第一输入数据缓冲器中的每个第一输入数据缓冲器被耦合到功能单元行中对应的功能单元行;该硬件加速部件还包括被配置为存储权重数据的权重数据缓冲器的阵列,其中权重数据缓冲器中的每个权重数据缓冲器耦合到功能单元列中对应的功能单元列;该硬件加速部件还包括输出数据缓冲器的阵列,其中输出数据缓冲器中的每个输出数据缓冲器耦合到功能单元列中对应的功能单元列;并且该硬件加速部件还包括被耦合到输出数据缓冲器的第二输入数据缓冲器的阵列,其中第二输入数据缓冲器中的每个第二输入数据缓冲器耦合到功能单元行中对应的功能单位行。功能单元行中的每个功能单元被配置为从耦合到该行的第一输入数据缓冲器或第二输入数据缓冲器接收相同的输入数据集合。功能单元列中的每个功能单元被配置为从耦合到该行的权重数据缓冲器接收相同的权重数据集合。功能单元中的每个功能单元被配置为对所接收的输入数据和所接收的权重数据执行卷积。

根据第三方面,提供了一种用于实现多层卷积神经网络的方法。该方法包括:提供可重新配置的硬件加速部件,其包括功能单元行和列的阵列,功能单元中的每个功能单元被配置为执行卷积操作;将输入数据分割成多个输入数据切片;向对应功能单元行中的功能单元中的每个功能单元提供输入数据切片中的每个输入数据切片;接收多个权重数据核,每个权重数据核包括权重数据;向对应功能单元列中的功能单元中的每个功能单元提供权重数据核中的每个权重数据核,其中功能单元列向输出数据缓冲器提供用于第一卷积层的对应的输出数据平面;以及将用于第一卷积层的输出数据作为输入数据反馈到第二卷积层。

上文所概括的功能可以表现为各种类型的系统、设备、部件、方法、计算机可读存储介质、数据结构、图形用户接口演示、制品等等。

提供本发明内容是为了以简化形式介绍概念的选择;下文在具体实施方式中对这些概念进行进一步描述。本发明内容部分不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

附图说明

图1示出了包括软件平面和硬件加速平面的数据处理系统的概述。

图2示出了图1的数据处理系统的操作的第一示例。

图3示出了图1的数据处理系统的操作的第二示例。

图4示出了与数据中心相对应的图1的数据处理系统的一个实现方式。

图5是图4的数据中心实现方式的更全面的描绘。

图6示出了与图4所示的方式相比的、实现服务器单元部件的备选方式。

图7示出了与图4所示的方式相比的实现服务器单元部件的又一方式。

图8示出了与图1所示的数据处理系统相比的备选数据处理系统,例如,该备选数据处理系统使用与图1所示的网络基础设施相比的不同的网络基础设施。

图9是示出了图1的数据处理系统的一种操作方式的流程图。

图10示出了被用于管理图1的数据处理系统的管理功能的一个实现方式的概述。

图11提供了作为图10的管理功能的部件的服务映射部件的一种请求驱动的操作方式的概述。

图12至图15示出了用于处理针对由驻留在主机部件上的租户功能的实例所做出的服务的请求的相应不同选项。

图16提供了图10的服务映射部件的另一背景相关的操作方式的概述。

图17至图20示出了用于物理实现图10的管理功能的相应不同体系架构。

图21至图24示出了用于在图1的数据处理系统中配置硬件加速部件的相应不同策略。

图25示出了实现图1的硬件加速部件的一种方式。

图26示出了包括单独的可配置域的硬件加速部件。

图27示出了用于在本地主机部件和相关联的本地硬件加速部件之间执行数据传送的功能。

图28示出了图25中引入的路由器的一个实现方式。

图29示出了图25中引入的传送部件的一个实现方式。

图30示出了图25中引入的3端口交换机的一个实现方式。

图31示出了图1中所示的主机部件的一个实现方式。

图32提供了用于生成和应用多分量服务的功能的概述;该功能进而包括多分量管理部件。

图33示出了可以由图32的功能产生和应用的一种类型的硬件加速部件集合。

图34示出了可以由图32的功能产生和应用的另一种类型的硬件加速部件集合。

图35示出了产生多分量服务的功能解析部件的一个实现方式。

图36示出了使用硬件加速部件集合实现的图示的多分量服务的更详细示例。

图37示出了在图36的多分量服务阶段中的一个阶段中执行处理的功能。

图38示出了用于交换图36的硬件加速部件集合中的模型以适应与不同模型相关联的请求的功能。

图39是示出了图35的功能解析部件的一种操作方式的流程图。

图40是示出了实现多分量服务的硬件加速部件集合内的一个硬件加速部件的操作的流程图。

图41是示出了处理实现多分量服务的硬件加速部件集合中的故障的一种方式的流程图。

图42是描绘了三维卷积神经网络的图。

图43a至图43d示出了示例卷积操作。

图44示出了被配置为实现卷积层的示例加速部件。

图45示出了将输入数据分割成水平切片的示例。

图46是图44的加速部件的示例功能单元的框图。

图47示出了被配置为实现多个卷积层的示例加速部件。

图48是操作图47的加速部件的示例过程。

图49示出了被配置为实现多个卷积层的另一示例加速部件。

图50是描绘了深度神经网络的图。

图51是在服务器单元部件上实现深度神经网络的框图。

图52是用于划分深度神经网络的示例过程。

在整个公开内容和附图中使用相同的附图标记来指代相似部件和特征。100系列的标号是指最初在图1中找到的特征,200系列的标号是指最初在图2中找到的特征,300系列的标号是指最初在图3中找到的特征,并以此类推。

具体实施方式

本公开描述了一种示例数据处理系统,其包括硬件加速平面和软件平面。对硬件加速平面中的示例硬件加速部件进行了描述。示例硬件加速部件包括被配置为实现卷积神经网络的功能单元的阵列。

作为初步事项,附图中的一些附图在一个或多个结构部件的上下文中描述了概念,这些部件不同地被称为功能、模块、特征、部件等。附图中所示出的各种部件可以例如通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等)和/或其任何组合由任何物理和有形机制来以任何方式实现。

在一种情况下,如所图示的,将附图中的相应部件分离成不同的单元可以反映在实际实现方式中使用对应的不同物理和有形部件。可替代地或附加地,附图中所图示的任何单个部件可以由多于一个的实际物理部件来实现。可替代地或附加地,附图中的任何两个或更多单独部件的描述可以反映由单个实际物理部件执行的不同功能。

其他附图以流程图的形式描述了这些概念。在这种形式中,某些操作被描述为构成以特定次序执行的不同框。这样的实现方式是图示的而非限制性的。本文中所描述的某些框可以被组合在一起并且在单个操作中执行,某些框可以被分解成多个部件框,并且某些框可以以与本文中所图示的次序不同的次序执行(包括执行块的并行方式)。流程图中示出的框可以例如通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等)和/或其任何组合由任何物理和有形机制来以任何方式实现。

就术语而言,短语“被配置为”涵盖任何类型的物理和有形功能可以被构建成执行所标识的操作的任何方式。该功能可以被配置为使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。

术语“逻辑”涵盖用于执行任务的任何物理和有形功能。例如,流程图中所图示的每个操作与用于执行该操作的逻辑部件相对应。可以使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。当由计算设备实现时,逻辑部件表示作为计算系统的物理部分的电子部件,而无论该计算系统是如何被实现的。

本文中所描述的任何存储资源或存储资源的任何组合可以被视为计算机可读介质。在多个情况下,计算机可读介质表示某种形式的物理和有形实体。术语计算机可读介质还涵盖例如经由物理管道和/或空气或其他无线介质等传送或接收的传播的信号。然而,特定术语“计算机可读存储介质”和“计算机可读介质设备”在包括所有其他形式的计算机可读介质的同时,明确排除传播的信号本身。

以下解释可以将一个或多个特征标识为“可选的”。这种类型的描述不应被解释为可以被视为可选的特征的穷尽指示。即,尽管在文本中没有明确标识,但是其他特征可以被认为是可选的。进一步地,单个实体的任何描述并不旨在排除使用多于一个这样的实体。类似地,对多个实体的描述并不旨在排除使用单个实体。进一步地,尽管描述可以解释某些特征作为执行所标识的功能或者实现所标识的机构的备选方式,但是这些特征还可以以任何组合方式被组合在一起。最后,术语“示例性”或“图示的”是指潜在的多个实现方式中的实现方式。

图1示出了包括软件平面104和硬件加速平面106的数据处理系统102的概述。软件平面104包括软件驱动部件集合(每个都由图1中的符号“s”表示),而硬件加速平面106包括硬件加速部件集合(每个由图1中的符号“h”表示)。

例如,软件驱动的主机部件可以与使用一个或多个中央处理单元(cpu)执行机器可读指令的服务器计算机相对应。每个cpu进而可以在一个或多个硬件线程上执行指令。另一方面,每个硬件加速部件可以与用于实现功能的硬件逻辑(诸如现场可编程门阵列(fpga)器件、大规模并行处理器阵列(mppa)器件、图形处理单元(gpu)、专用集成电路(asic)、多处理器片上系统(mpsoc)等等)相对应。

术语“硬件”加速部件还旨在广义地涵盖利用硬件设备来执行功能的不同方式,例如至少包括:a)至少一些任务在硬asic逻辑等中实现的情况;b)至少一些任务在软(可配置的)fpga逻辑等中实现的情况;c)至少一些任务在fpga软件处理器叠加(overlay)等上作为软件运行的情况;d)至少一些任务在软处理器mppa等上运行的情况;e)其中至少一些任务在硬asic处理器等上作为软件运行的情况等等,或上述情况的任何组合。类似地,数据处理系统102可以适应软件驱动设备在软件平面104中的不同表现。

为了简化对硬件加速部件的重复引用,以下解释将这些设备简称为“加速部件”。进一步地,尽管如所指出的,可以使用其他类型的加速部件来构建数据处理系统102,但是以下解释将呈现加速部件与fpga设备相对应的主要示例。进一步地,硬件加速平面106可以使用加速部件的异构集合来构建,该集合包括具有不同相应的处理能力和体系架构的不同类型的fpga设备,fpga设备和其他设备的混合等等。

主机部件通常使用时间执行范例来执行操作,例如,通过使用其cpu硬件线程中的每个cpu硬件线程来一个接一个地执行机器可读指令。相比之下,加速部件可以使用空间范例执行操作,例如,通过使用大量的并行逻辑单元来执行计算任务。因此,与软件驱动的主机部件相比,加速部件可以在更短的时间内执行一些操作。在数据处理系统102的上下文中,与术语“加速部件”相关联的“加速”定义符反映了其加速由主机部件执行的功能的潜力。

在一个示例中,数据处理系统102与包括多个计算机服务器的数据中心环境相对应。计算机服务器与图1所示的软件平面104中的主机部件相对应。在其他情况下,数据处理系统102与企业系统相对应。在其他情况下,数据处理系统102与使用访问两个或更多加速部件等的至少一个主机部件的用户设备或器具相对应。这些示例是作为示例而非限制的方式而被引用的。可能还有其他应用。

在一个实现方式中,数据处理系统102中的每个主机部件通过本地链路被耦合到至少一个加速部件。在本文中处理设备的基本单元被称为“服务器单元部件”,这是因为该设备可以被分组在一起并且作为数据处理系统102内的单个可服务单元来维护(尽管不一定如此)。服务器单元部件中的主机部件被称为“本地”主机部件,以将其与其他服务器单元部件相关联的其他主机部件区分开。类似地,服务器单元部件的一个或多个加速部件被称为一个或多个“本地”加速部件,以将其与与其他服务器单元部件相关联的其他加速部件区分开。

例如,图1示出了图示的本地主机部件108,其通过本地链路112(诸如,如下文所描述的外围部件互连快速(pcie)链路)耦合到本地加速部件110。本地主机部件108和本地加速部件110的配对形成单个服务器单元部件的至少一部分。更一般地,图1示出了软件平面104是通过多个单独的本地链路而被耦合到硬件加速平面106,该图1被统称为本地h(localh)到本地s(localh)耦合114。

本地主机部件108还可以间接地与硬件加速平面106中的任何其他远程加速部件进行通信。例如,本地主机部件108可以经由本地加速部件110来访问远程加速部件116。更具体地,本地加速部件110经由链路118与远程加速部件116进行通信。

在一个实现方式中,公共网络120被用于将软件平面104中的主机部件耦合到其他主机部件,并且将硬件加速平面106中的加速部件耦合到其他加速部件。即,两个主机部件可以使用相同的网络120彼此通信,两个加速部件也可以使用相同的网络120彼此通信。作为另一特征,软件平面104中的主机部件之间的交互独立于硬件加速平面106中的加速部件之间的交互。

这意味着例如从软件平面104中的主机部件的角度看,两个或更多加速部件可以在主机部件的指引之外并且在主机部件未“感知”在硬件加速平面106中发生的特定交互的情况下,以透明方式相互通信。然而,主机部件可以通过发出由硬件加速平面106托管的针对服务的请求,来发起在硬件加速平面106中发生的交互。

根据一个非限制性实现方式,数据处理系统102使用以太网协议以通过公共网络120发送ip分组。在一个实现方式中,服务器单元部件中的每个本地主机部件被给予单个物理ip地址。相同的服务器单元部件中的本地加速部件可能采取相同的ip地址。服务器单元部件可以以不同方式确定传入分组是以本地主机部件,而非本地加速部件为目的地。

例如,目的地为本地加速部件的分组可以被规定为指定特定端口的用户数据报协议(udp)分组。另一方面,主机定义的分组不是以这种方式规定。在另一情况下,属于硬件加速平面106的分组可以基于分组中的每个分组中(例如,分组的报头或主体中)的状态标志的值,与属于软件平面104的分组区分开。

鉴于上文特点,数据处理系统102可以被概念化为形成共享相同物理通信链路的两个逻辑网络。与两个逻辑网络相关联的分组可以以上文所描述的方式,通过它们相应的业务类别彼此区分开。但是在其他实现方式中(例如,如下文关于图8所描述的),数据处理系统102可以使用两个不同的物理网络来分别处理主机到主机的业务以及硬件到硬件的业务。进一步地,在使用公共网络120的实现方式中,主机到主机网络基础设施不需要完全与硬件到硬件网络基础设施相同。即,这两种基础设施在共享大部分网络资源但并不一定共享所有的网络资源的意义上是共同的。

最后,管理功能122用来管理数据处理系统102的操作。如下文将更详细地阐述的,管理功能122可以使用不同的控制体系架构在物理上被实现。例如,在一个控制体系架构中,管理功能122可以包括被耦合到一个或多个全局管理部件的多个本地管理部件。每个本地管理部件和全局管理部件可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

在示例中,管理功能122可以包括若干个子部件,该子部件执行不同的相应逻辑功能(其可以以不同方式物理地实现)。位置确定部件124例如基于存储在数据存储装置126中的当前分配信息,来标识数据处理系统102内的当前服务位置。位置确定部件124可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

如本文中所使用的,服务是指由数据处理系统102执行的任何功能。例如,服务可以与加密功能相对应。另一服务可以与文档排名功能相对应。另一服务可以与数据压缩功能相对应。又另一服务可以与图像分类功能相对应。再另一服务可以与神经网络功能相对应,并以此类推。

在操作中,位置确定部件124可以接收针对服务的请求。作为响应,如果该地址存在于数据存储装置126中,则位置确定部件124返回与该服务相关联的地址。该地址可以标识托管所请求的服务的特定加速部件。

服务映射部件(smc)128将服务映射到特定数据处理系统102部件。smc128可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。smc128可以根据smc128接收到的调用smc128的操作的触发事件的类型,在至少两种模式下操作。在第一模式下,smc128处理由租户功能的实例所做出的针对服务的请求。租户功能的实例可以与在特定本地主机部件上运行的软件程序或者更具体地在虚拟机上执行的程序相对应,该程序又与特定本地主机部件相关联。该软件程序可能会在执行过程中请求服务。

smc128通过确定数据处理系统102中的适当部件(或多个部件)以便提供服务,来处理该请求。考虑的可能部件包括本地加速部件(与请求发起的本地主机部件相关联)、远程加速部件和/或本地主机部件本身(因此,本地主机部件将以软件实现服务)。smc128基于一个或多个映射考虑(诸如所请求的服务是否属于线路速率服务或其他负载平衡和功率管理考虑),来做出其确定。

在另一操作方式中,smc128通常在后台和全局模式下操作,从而基于数据处理系统102中的全局条件,来向数据处理系统102部件分配服务(而非如在第一模式下处理来自租户功能的实例的单个请求或除了如在第一模式下处理来自租户功能的实例的单个请求之外)。例如,smc128可以响应于影响一个或多个服务的需求改变,来调用其分配功能。在该模式下,smc128再次基于一个或多个映射考虑(诸如与服务相关联的历史需求等)来做出其确定

smc128可以在执行其功能时,与位置确定部件124交互。例如,当smc128寻求确定由加速部件提供的已经分配的服务的地址时,smc12可以咨询数据存储装置126。当smc128例如通过存储与服务有关的那些加速部件的地址将服务映射到一个或多个加速部件时,smc128还可以更新数据存储装置126。

尽管图1中未示出,smc128的子部件还管理多分量服务。多分量服务是由多个加速部件所组成的服务。

为了方便起见,图1图示了与软件平面104和硬件平面106中的部件分开的管理功能122。但是如下文将要描述的,可以使用软件平面104和/或硬件平面106的资源,来实现管理功能122的任何方面。当通过硬件平面106实现时,可以像任何服务一样加速管理功能。

图2示出了与单个交易或单个交易的一部分相对应的图1的数据处理系统102的操作的第一示例。在操作(1)中,第一主机部件202在执行单个计算任务的过程中,与第二主机部件204进行通信。然后第二主机部件204请求使用在硬件加速平面106中实现的服务(尽管第二主机部件204可能未“感知”服务在何处被实现,除此之外服务可以在指定地址被访问)。

在多个情况下,所请求的服务在单个加速部件上被实现(尽管可能存在多个冗余的这种加速部件可供选择)。但是,在图2的具体示例中,所请求的服务与遍布在加速部件集合(或集群)上的多分量服务相对应,其中每个服务执行服务的所分配的部分。图形结构可以指定相应加速部件在集合中耦合在一起的方式。

在一些实现方式中,图形结构还表示至少一个报头部件。报头部件与数据处理系统102中的实体可以在硬件加速平面106中与多分量服务交互的接触点相对应。报头部件还可以用作由图形结构定义的处理管线中的初始处理阶段。在图2的特定情况下,假定加速部件206与本地加速部件206(其在本地被链接到本地主机部件204)相对应并且加速部件208是多分量服务的报头部件。

在操作(2)和(3)中,请求本地主机部件204经由其本地加速部件206,访问加速部件208。然后加速部件208执行其多部分服务的部分,以生成中间输出结果。在操作(4)中,然后加速部件208调用执行多分量服务的另一相应部分的另一加速部件210,来生成最终结果。在操作(5)、(6)和(7)中,硬件加速平面106通过如上文所述的但是沿相反方向的相同的部件链,将最终结果连续地转发回请求本地主机部件204。需要注意的是,上文所描述的数据流操作通过示例而非限制进行阐述,这些数据流操作包括定义返回路径的流操作。其他多分量服务可以使用指定任何其他流路径的其他图形结构。例如,加速部件210可以将最终结果直接转发到本地加速部件206。

首先,需要注意的是,在硬件加速平面106中发生的操作是以在软件平面104中执行的操作的独立方式而被执行的。换句话说,软件平面104中的主机部件不会管理硬件加速平面106中的操作。然而,主机部件可以通过发出针对由硬件加速平面106托管的针对服务的请求,来调用硬件加速平面106中的操作。

其次,需要注意的是,硬件加速平面106以对请求主机部件透明的方式,来执行其事务。例如,本地主机部件204可能“未感知”它的请求是如何在硬件加速平面中被处理的,其包括服务与多分量服务相对应的事实。

第三,需要注意的是,在该实现方式中,软件平面104中的通信(例如,与操作(1)相对应)使用与硬件加速平面106中的通信(例如,与操作(3)至(6)相对应)相同的公共网络120而进行。操作(2)和(7)可以通过本地链路进行,该本地链路与图1所示的localh到本地s耦合114相对应。

图2中所示的多分量服务类似环,这是因为一系列加速部件沿第一方向穿过以到达最终结果。然后,最终结果沿与报头部件相反的方向,通过相同的一系列加速部件而被传回。但是,如上文所指出的,其他多分量服务可以使用具有不同的相应流结构的不同的加速部件集合。

例如,图3示出了采用与图1的示例相比不同的流结构的图1的数据处理系统102的操作的第二示例。更具体地,在操作(1)中,本地主机部件(未示出)向其本地加速部件302发送请求。在这种情况下,假定本地加速部件也是服务的报头部件。在操作(2)中,然后,报头部件可以将多个消息转发到多个相应的加速部件。接收消息的每个加速部件可以与其他加速部件并行地执行多分量服务的一部分。(需要注意的是,图3可能仅表示更完整事务的一部分)。

此外,多分量服务不一定需要采用单个报头部件或任何报头部件。例如,多分量服务可以采用全部执行相同功能的加速部件集群。数据处理系统102可以被配置为通过联系集群中的任何任意成员,来调用这种多分量服务。该加速部件可以被称为报头部件,这是因为该加速部件是要被访问的第一部件,但是该加速部件以其他方式不具有特殊状态。在另外其他的情况下,最初主机部件可以将多个请求分发给加速部件集合的多个成员。

图4示出了表示图1的数据处理系统102的一个实现方式的数据中心402的一部分。具体地,图4示出了数据中心402中的一个机架。该机架包括多个服务器单元部件(404,406,...,408),每个服务器单元部件被耦合到架顶式(tor)交换机410。tor是指将机架中的部件连接到数据中心的其他部分的交换机。其他机架尽管未被示出,但是其可能具有相似体系架构。机架是用于容纳或以其他方式分组多个处理部件的物理结构。

图4还示出了一个代表性服务器单元部件404的图示的组成。服务器单元部件404包括本地主机部件412,该本地主机部件412包括一个或多个中央处理单元(cpu)(414,416,...)以及本地加速部件418。本地加速部件418经由本地链路420被直接耦合到本地主机部件412。本地链路420例如可以被实现为pcie链路。本地加速部件418还通过网络接口控制器(nic)422被间接耦合到本地主机部件412。

最后,本地加速部件418被耦合到tor交换机410。因此,在这个特定实现方式中,本地加速部件418表示本地主机部件412通过其与数据中心402中的其他部件交互的唯一路径(包括其他主机部件和其他加速部件)。除了其他效果之外,图4的体系架构允许本地加速部件418(例如,通过执行加密,压缩等)对从tor交换机410所接收(和/或被发送到该tor交换机410)的分组执行处理,而不增加由本地主机部件执行的基于cpu操作412的负担。

本地主机部件412可以通过本地链路420或经由nic422与本地加速部件418进行通信。不同实体可以在不同的相应情况下利用这两个路径。例如,假定在本地主机部件412上运行的程序请求服务。在一个实现方式中,假定本地主机部件412提供位置确定部件124和数据存储装置126的本地实例化。或者,全局管理部件可以提供位置确定部件124及其数据存储装置126。在任一情况下,本地主机部件412可以咨询数据存储装置126,以确定服务的地址。然后,本地主机部件412可以使用所标识的地址,经由nic422和tor交换机410来访问该服务。

在另一实现方式中,假定本地加速部件418提供位置确定部件124和数据存储装置126的本地实例化。本地主机部件412可以经由本地链路420访问本地加速部件418。然后,本地加速部件418可以查询数据存储装置126,以确定服务的地址,在确定服务的地址后,本地加速部件418经由tor交换机410访问该服务。访问该服务的另外其他方式也是可能的。

图5是图4的数据中心402的更全面的描绘。数据中心402包括多个机架(502至512)。每个机架包括多个服务器单元部件。每个服务器单元部件进而可以具有上文在图4中描述的体系架构。例如,代表性服务器单元部件514包括一个或多个本地主机部件(s)516、网络接口控制器(n)518和本地加速部件(h)520。

图5中所示的路由基础设施与上文参考图1描述的公共网络120的一个实现方式相对应。路由基础设施包括多个tor交换机522和更高级交换基础设施524。更高级交换基础设施524将tor交换机522连接在一起。高级交换基础设施524可以具有任何体系架构,并且可以由任何一个或多个路由协议所驱动。在图5的图示的示例中,更高级交换基础设施524至少包括聚合交换机526、核心交换机528等的集合。通过所图示的基础设施而被路由的业务可以与以太网ip分组相对应。

图5中所示的数据中心402可以与在单个地理位置处提供的资源集合相对应,或者可以与分布在多个地理位置(例如,位于世界不同地区的多个单个起作用(contributing)的数据中心)上的分布式资源集合相对应。在分布式上下文中,管理功能122可以基于任何一个或多个映射考虑,来将工作从第一起作用的数据中心发送到第二起作用的数据中心,该一个或多个映射考虑诸如是(1)确定加速部件在第二起作用的数据中心处可用,(2)确定加速部件被配置为在第二起作用的数据中心处执行期望的一个或多个服务和/或(3)确定加速部件不仅被配置为执行期望的一个或多个服务,而且它们还可以立即可用(例如,“在线”)以执行那些服务等等。如本文中所使用的,术语“全局”通常是指比与单个服务器单元部件相关联的本地域更加全面的任何范围。

通常需要注意的是,尽管图4和图5集中于使用相对广泛的数据处理系统(与数据中心相对应),但是本文中所阐述的原理中的一些可以被应用于更小的系统,该更小的系统包括单个本地主机部件(或其他类型的部件)被耦合到多个加速部件的情况,这些多个加速部件包括本地加速部件和一个或多个远程加速部件。这种更小的系统甚至可以被包含在用户设备或器具等中。用户设备可以具有使用本地加速资源和/或远程加速资源的选项。

图6示出了与图4所示的体系架构相比的实现服务器单元部件602的备选方式。与图4的情况一样,图6的服务器单元部件602包括本地主机部件604(其由一个或多个cpu(606,608,...)组成)、本地加速部件610以及本地链路612(其用于将本地主机部件604与本地加速部件610耦合)。与图4的情况不同,服务器单元部件602实现网络接口控制器(nic)614作为本地加速部件610的内部部件,而非单独部件。

图7示出了与图5所示的体系架构相比的实现服务器单元部件702的另一方式。在图7的情况下,服务器单元部件702包括任何数目n的本地主机部件(704,...,706)以及任意数目的本地加速部件(708,...,710)(服务器单元部件702的其他部件在图被省略以便于解释)。

例如,服务器单元部件702可以包括单个主机部件,其耦合到两个本地加速部件。两个加速部件可以执行不同的相应任务。例如,一个加速部件可以被用于处理到其本地tor交换机的传出业务,而另一加速部件可以被用于处理来自tor交换机的传入业务。附加地,服务器单元部件702可以在本地加速部件(708,...,710)中的任一个上加载任何服务。

还要需要注意的是,在上文所阐述的示例中,服务器单元部件可以指部件的物理分组,例如,通过在数据中心的机架内形成单个可服务单元。在其他情况下,服务器单元部件可以包括一个或多个主机部件和一个或多个加速部件,这些部件不必一起被容纳在单个物理单元中。在这种情况下,本地加速部件可以被认为是逻辑上而非物理上与其相应的本地主机部件相关联。

可替代地或附加地,本地主机部件和一个或多个远程加速部件可以在单个物理部件(诸如,单个mpsoc-fpga管芯)上实现。网络交换机还可以被并入到该单个部件中。

图8示出了与图6所示相比的备选数据处理系统802。与图1的数据处理系统102一样,数据处理系统802包括软件平面104和硬件加速平面106以及用于将本地主机部件连接到相应本地加速部件的localh到locals耦合114。但是,与图1的数据处理系统102不同,数据处理系统82包括第一网络804(其用于将主机部件耦合在一起)以及第二网络806(其用于将硬件部件耦合在一起),其中第一网络804至少部分地不同于第二网络806。

例如,第一网络804可以与图5中所示的数据中心交换基础设施的类型相对应。第二网络806可以与专用链路相对应,该专用链路是用于将加速部件连接在一起的具有任何网络拓扑结构。例如,第二网络806可以与p×r环网络相对应。环网络中的每个加速部件经由适当的电缆链路等耦合到东、西、北和南的邻近加速部件。可替代地,可以使用具有任何相应的大小和尺寸的其他类型网络。

在其他情况下,由单个处理部件(例如,在单个管芯上被实现的)提供的本地硬cpu和/或软cpu和/或加速逻辑可以经由不同网络而被耦合到其他处理部件上的其他部件(例如,在其他管芯、板、机架等上被实现的)。单个服务本身可以利用一个或多个递归本地互连网络。

进一步注意,上文描述可以在发出由加速部件满足的服务请求的主机部件的上下文中得以构建。但是,替代地或者附加地,任何加速部件还可以做出可以由任何其他部件(例如,另一加速部件和/或甚至主机部件)满足的服务请求。smc128可以以与上文所描述的方式类似的方式,来处理这样的请求。实际上,本文中所描述的某些特征本身可以在没有软件平面的情况下,而在硬件加速平面上被实现。

更一般地,某些特征可以由请求服务的任何第一部件而被实现,该服务可以由第一部件、和/或相对于第一部件的一个或多个本地部件、和/或相对于第一部件的一个或多个远程部件来满足。然而,为了便于解释,下文的描述将继续主要在做出请求的实体与本地主机部件相对应的上下文中进行构建。

最后,其他实现方式可以采用例如除了图8中所示的localh到locals耦合114以外的不同策略,以用于将主机部件耦合到硬件部件。

图9示出了表示图1的数据处理系统102的一个图示的操作方式的过程902。在框904,本地主机部件发出针对服务的请求。在框906,本地主机部件接收对该请求的回复,该回复可以标识该服务的地址。在备选实现方式中,相关联的本地加速部件可以在从本地主机部件接收到请求之后,执行框904和框906。换句话说,本地主机部件或本地加速部件都可以执行地址查找功能。

在框908,假定已经标识的地址属于本地加速部件在本地实现的功能,则相关联的本地加速部件可以在本地执行服务。可替代地或附加地,在框910,本地加速部件将请求路由到远程加速部件。如上文所指出的,本地加速部件被配置为在不涉及本地主机部件的情况下,执行到远程加速部件的路由。进一步,多个主机部件通过与多个加速部件通信相同的物理网络,在数据处理系统102中彼此通信。

数据处理系统102具有若干个有用的特点。首先,数据处理系统102使用公共网络120(除了图8的示例之外),其避免了与用于将加速部件耦合在一起的定制网络相关联的费用。其次,公共网络120使得将加速平面添加到现有数据处理环境(诸如数据中心)成为可能。并且在安装之后,可以有效地维护由此产生的数据处理系统102,这是因为它利用了在现有数据处理环境中找到的现有物理链路。第三,数据处理系统102集成了加速平面106,但是例如鉴于中本地加速部件可以与现有服务器单元部件集成的上文所描述的方式这不会施加大的附加功率要求。第四,数据处理系统102提供高效且灵活的机构,以用于允许例如在不将主机部件狭隘地配对到特定固定加速资源的情况下并且在不通过管理硬件加速平面106本身而增加主机部件的负担的情况下,主机部件访问由硬件加速平面106提供的任何加速资源。第五,数据处理系统102通过智能地将这些资源分散在硬件平面106内,提供了用于管理加速资源的有效机构,从而(a)减少资源的过度利用和利用不足(例如,与“滞留容量”问题相对应),(b)便于这些服务的消费者快速访问这些服务,(c)适应一些消费者和/或服务所指定的加强处理要求等等。上述效果是图示的,而非穷尽的。数据处理系统102还提供了其他有用的效果。

图10示出了用于管理图1的数据处理系统102的管理功能122的一个实现方式的概述。更具体地,图10描绘了由管理功能122执行的功能(包括其主引擎smc128)的逻辑视图。不同的子部件与由管理功能122执行的不同主要功能相对应。下文所描述的图17至图20示出了逻辑功能的各种可能的物理实现方式。

如上文所描述的,位置确定部件124基于存储在数据存储装置126中的当前分配信息,来标识数据处理系统102内的服务的当前位置。在操作中,位置确定部件124接收针对服务的请求。作为响应,如果存在于数据存储装置126内,则它返回服务的地址。地址可以标识实现服务的特定加速部件。

数据存储装置126可以维护将服务映射到地址的任何类型的信息。在图10所示的小节选中,数据存储装置126将少量服务(服务w、服务x、服务y和服务z)映射到当前被配置为提供这些服务的加速部件。例如,数据存储装置126指示用于服务w的配置图像当前被安装在具有地址a1、a6和a8的设备上。地址信息可以以任何方式表达。在本文中,为了便于解释,地址信息是以高级符号形式表示。

在一些实现方式中,数据存储装置126可选地还可以以任何方式存储表征每个当前服务到部件分配的状态信息。通常,服务到部件分配的状态信息指定了在其指派的部件(或多个部件)上实现的分配的服务要在数据处理系统102内被处理的方式(诸如通过指定其持久级别,指定其访问权限(例如,“所有权”)等)。在一个非限制性实现方式中,例如,服务到部件的分配可以被指定为保留的或被指定为非保留的。

当执行配置操作时,smc128可以在确定其是否适合于改变该分配(例如,以满足当前针对服务的请求、一个或多个服务的需求改变等)时,考虑与分配相关联的保留/非保留的状态信息。例如,数据存储装置126指示具有地址a1、a6和a8的加速部件当前被配置为执行服务w,但是只有对加速部件a1和a8的指派被认为是保留的。因此,与另外两个加速部件相比,smc128将把对加速部件a6的分配视为更适当的重新指派(重新配置)候选。

附加地或可替代地,数据存储装置126可以提供信息,该信息指示服务到部件分配是要由租户功能的所有实例共享还是专用于租户功能的一个或多个特定实例(或服务的一些其他指示的一个或多个消费者)。在前者(完全共享)的情况下,租户功能的所有实例都会竞争由加速部件提供的相同资源。在后者(专用的)情况下,只有那些与服务分配相关联的客户端才被准许使用分配的加速部件。图10以高级方式示出了在具有地址a3的加速部件上运行的服务x和y被保留,以供租户功能的一个或多个指定实例使用,而任何租户功能实例都可以使用其他服务到部件分配。

smc128还可以与提供可用性信息的数据存储装置1002进行交互。可用性信息标识具有空闲容量来实现一个或多个服务的加速部件池。例如,在一种使用方式中,smc128可以确定指派一个或多个加速部件作为功能的提供商是适当的。为此,smc128借助数据存储装置1002来查找具有空闲容量以实现该功能的加速部件。然后,smc128将把这个功能指派给这些自由加速部件中的一个或多个。这样做会改变所选加速部件的可用性状态。

smc128还管理和维护数据存储装置1002中的可用性信息。在这样做时,smc128可以使用不同的规则,来确定加速部件是可用的还是不可用的。在一种途径中,smc128可以将当前正在被使用的加速部件视为不可用,而将当前未被正在使用的加速部件视为可用。在其他情况下,加速部件可以具有不同的可配置域(例如,拼接块),其中一些可配置域当前被正在使用,而另一些可配置域当前未被正在使用。

在本文中,smc128可以通过表达当前未被正在使用的处理资源的一部分,来指定加速部件的可用性。例如,图10指示具有地址a1的加速部件具有其可供使用的处理资源的50%。另一方面,具有地址a2的加速部件是完全可用的,而具有地址a3的加速部件是完全不可用的。如下文将更详细描述的,单个加速部件可以以不同的方式通知smc128它们的相对利用水平。

在其他情况下,smc128可以在注册加速部件是否可用时,考虑该加速部件的待决请求。例如,smc128可以指示由于加速部件被调度以将服务递送给一个或多个租户功能实例,所以即使该加速部件在当前时间可能不参与提供该服务该加速部件也是不可用的。

在其他情况下,smc128还可以注册可用的每个加速部件的类型。例如,数据处理系统102可以与支持具有不同物理特点的加速部件的异构环境相对应。这种情况下的可用性信息不仅可以指示可用的处理资源的身份,还可以指示那些资源的类型。

在其他情况下,当将加速部件注册为可用或不可用时,smc128还可以考虑服务到部件分配的状态。例如,假定特定加速部件当前被配置为执行特定服务,并且更进一步,假定分配已经被指定为保留的而不是非保留的。单独鉴于smc128的保留状态,smc128可以将该加速部件指定为不可用(或其一部分不可用),而不管服务当前是否现在正被主动用于执行功能。实际上,至少在某些情况下,因此加速部件的保留状态用作防止smc128重新配置加速部件的锁。

现在参照smc128自身的核心映射操作,smc128响应于触发事件而将服务分配或映射到加速部件。更具体地,取决于已经接收的触发事件的类型,smc128在不同的模式下操作。在请求驱动的模式下,smc128通过租户功能来处理针对服务的请求。在本文中,每个触发事件与至少部分驻留在特定本地主机部件上的租户功能的实例的请求相对应。响应于本地主机部件的每个请求,smc128确定实现该服务的适当部件。例如,smc128可以从以下中选择:本地加速部件(与做出请求的本地主机部件相关联的)、远程加速部件或本地主机部件本身(于是本地主机部件将以软件实现服务)或上述的一些组合。

在第二背景模式下,smc128通过向数据处理系统102内的加速部件全局分配服务来操作,以满足数据处理系统102中的总体预期需求和/或满足其他系统范围目标和其他因素(而非狭窄地关注主机部件的单个请求)。在本文中,接收到的每个触发事件与数据处理系统102中的某个条件相对应,该条件作为整体保证服务的分配(或重新分配),该条件诸如是服务需求的改变。

然而,需要注意的是,上文所描述的模式不是相互排斥的分析的域。例如,在请求驱动的模式下,smc128可能试图实现至少两个目的。作为第一主要目的,smc128将试图找到将满足服务的显著(outstanding)请求的加速部件(或多个部件),同时也作为整体满足与数据处理系统102相关的一个或多个性能目标。作为第二目的,smc128可选地可以考虑服务的分配相对于租户功能的其他实例对该服务的未来使用的长期影响。换句话说,第二目的属于恰好由特定租户功能实例的请求所触发的背景考虑。

例如,请考虑以下简化情况。租户功能实例可以做出针对服务的请求,其中该租户功能实例与本地主机部件相关联。smc128可以通过配置本地加速部件,来执行服务来响应该请求。在做出该决定时,首先smc128可能试图通过租户功能的实例来找到满足请求的分配。但是smc128还可以基于确定多个其他主机部件已经请求相同的服务来进行分配,并且这些主机部件大部分与已经生成当前服务请求的租户功能的实例位于相同的机架中。换句话说,这个补充发现进一步支持将服务放置在机架内加速部件上的决定。

图10将smc128描绘为可选地包括执行不同相应分析的多个逻辑部件。作为第一可选分析部件,smc128可以使用状态确定逻辑1004,来定义它正在进行的分配的状态(例如,保留的或者非保留的,专用的或者完全共享的等等)。例如,假定smc128从服务的租户功能实例接收到请求。作为响应,smc128可以决定配置本地加速部件以提供服务,并且在该过程中,例如在请求可以是针对服务的“一次性”请求的初始假定下,smc128可以将该分配指定为非保留的。

在另一情形下,假定smc128做出相同的租户功能实例已经在短时间内重复做出针对相同服务的请求的附加确定。在这种情形下,smc128可以做出与上文所描述相同的分配决定,但是这次smc128可以将其指定为正在被保留的。可选地,smc128还可以将服务仅指定为专用于请求租户功能。通过这样做,smc128可以使得数据处理系统102能够通过租户功能实例更有效地满足针对该服务的未来请求。换句话说,保留状态可以减少smc128稍后将服务从本地加速部件移动的机会,其中该服务正在被本地主机部件重荷地使用。

另外,租户功能(或本地主机部件)实例可以明确地请求被授予对本地加速部件的保留使用和专用使用。状态确定逻辑1004可以使用不同的环境特定规则,来确定是否兑现该请求。例如,在没有保证重写该请求的其他触发事件被接收的情况下,状态确定逻辑1004可以决定兑现该请求。当状态确定逻辑1004尝试满足基于任何环境特定原因被确定为具有比租户功能的请求更紧迫的另一请求时,它可以重写该请求。

在一些实现方式中,需要注意的是,租户功能实例(或本地主机部件或服务的某个其他消费者)可以独立地控制其本地资源的使用。例如,本地主机部件可以将利用信息传递到管理功能122,该管理功能122指示其本地加速部件不可用或完全不可用,而不管本地加速部件此刻是否实际上正在忙碌。在这样做时,本地主机部件可以防止smc128“窃取”其本地资源。不同的实现方式可以使用不同的环境特定规则,来确定实体是否被准许以上文所描述的方式约束对其本地资源的访问,并且如果确定是,则确定在什么情形下准许对其访问。

在另一示例中,假定smc128确定对特定服务的需求已经普遍增加。作为响应,smc128可以找到与加速部件的“池”相对应的规定数目的自由加速部件,然后将该加速部件池指定为用于提供特定服务的保留(但是完全共享的)资源。之后,smc128可以检测到对特定服务的需求的普遍下降。作为响应,smc128可以例如通过将先前被注册为“保留的”的一个或多个加速部件的状态改变为“非保留的”来更小保留的加速部件的池。

需要注意的是,上文所描述的状态的特定尺寸(保留与非保留的、专用与完全共享的)通过说明而非限制的方式而被引用。其他实现方式可以采取任何其他状态有关的尺寸,或者可以仅容纳单个状态指定(并且因此省略使用状态确定逻辑1004功能)。

作为第二分析部件,smc128可以使用尺寸确定逻辑1006,来确定适合于提供服务的若干个加速部件。smc128可以基于与服务相关联的处理需求的考虑以及可用于满足那些处理需求的资源,来做出这样的确定。

作为第三分析部件,smc128可以使用类型确定逻辑1008,来确定适合于提供服务的加速部件的一个或多个类型。例如,考虑其中数据处理系统102具有相应能力不同的加速部件的异构集合的情况。类型确定逻辑1008可以确定适合于提供服务的特定种类的加速部件中的一个或多个加速部件。

作为第四分析部件,smc128可以使用放置确定逻辑1010,来确定适合于解决特定触发事件的特定加速部件(或多个部件)。这个确定进而可以具有一个或多个方面。例如,作为其分析的一部分,放置确定逻辑1010可以确定配置加速部件执行服务是否适当,其中该部件当前未被配置为执行该服务。

分析的上述方面通过说明而非限制的方式而被引用。在其他实现方式中,smc128可以提供分析的附加阶段。

通常,smc128基于一个或多个映射考虑,来执行其各种分配确定。例如,一个映射考虑可以属于在数据存储装置1002中提供的历史需求信息。然而,需要注意的是,smc128在所有情况下都不需要执行多因素分析。在一些情况下,例如,主机部件可以做出与单个固定位置相关联(例如,与本地加速部件或远程加速部件相对应)的针对服务的请求。在那些情况下,smc128可以简单地延迟到位置确定部件124,以将服务请求映射到服务的地址,而非以不同方式评估执行服务的成本和好处。在其他情况下,数据存储装置126可以将多个地址与单个服务相关联,每个地址与可以执行服务的加速部件相关联。smc128可以在将服务请求分配给特定地址时,使用任何一个或多个映射考虑,该考虑诸如是负载平衡考虑。

作为其操作的结果,smc128可以用将服务映射到可以找到那些服务的地址(假定该信息已经被smc128改变)的信息,以便更新数据存储装置126。smc128还可以存储属于新服务到部件分配的状态信息。

为了配置一个或多个加速部件以便执行功能(如果尚未如此配置),smc128可以调用配置部件1014。配置部件可以利用具有存储器存储指令的一个或多个计算机处理器或例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。在一个实现方式中,配置部件1014通过向加速部件发送配置流,来配置加速部件。配置流指定要被“编程”到接收者加速部件中的逻辑。配置部件1014可以使用不同策略来配置加速部件,其中几个策略在下文被阐述。

故障监视部件1016确定先前配置的加速部件是否已经失败。故障监视部件1016可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。smc128可以通过用备用加速部件代替故障的加速部件,来响应故障通知。

图11提供了当smc128被应用于处理在主机部件上运行的租户功能的实例的请求的任务时的一种操作方式的概述。在所图示的场景中,假定主机部件1102实现多个租户功能实例(t1,t2,...,tn)。每个租户功能实例可以与至少部分地在主机部件1102上(例如,在使用主机部件1102(在其他可能的主机部件中)的物理资源运行的虚拟机中)执行的软件程序相对应。进一步地,假定一个租户功能实例通过生成针对特定服务的请求来发起图11中所示的业务。例如,租户功能可以执行照片编辑功能,并且可以作为其整体操作的一部分来调用压缩服务。或者,租户功能可以执行搜索算法,并且可以作为其整体操作的一部分来调用排名服务。

在操作(1)中,本地主机部件1102可以向smc128发送其针对服务的请求。在操作(2)中,除了其他分析之外,smc128可以确定至少一个适当的部件来实现服务。在这种情况下,假定smc128确定远程加速部件1104是实现该服务最适当的部件。smc128可以从位置确定部件124获得该加速部件1104的地址。在操作(3)中,smc128可以例如以与服务相关联的地址的形式,将其答案传达给本地主机部件1102。在操作(4)中,本地主机部件1102可以经由其本地加速部件1106调用远程加速部件1104。通过租户功能来处理请求的其他方式是可能的。例如,本地加速部件1106可以查询smc128而非或本地主机部件102,或者本地加速部件1106可以查询本地主机部件102之外,还可以查询smc128。

路径1108表示其中代表性加速部件1110(和/或其相关联的本地主机部件)将利用信息传达到smc128的示例。利用信息可以标识加速部件1110是否全部或部分可供使用。利用信息还可以可选地指定加速部件1110具有的可供使用的处理资源的类型。如上文所指出的,smc128还可以选择利用信息,以例如通过全部或部分地指示资源不可用而有目的地防止smc128稍后利用加速部件1110的资源。

尽管未被示出,但是任何加速部件还可以向smc128做出特定资源的定向请求。例如,主机部件1102可以特定地要求使用其本地加速部件1106作为保留资源和专用资源。如上文所指出的,smc128可以使用不同的环境特定规则,来确定是否兑现这样的请求。

进一步地,尽管未被示出,但是除主机部件之外的其他部件也可以做出请求。例如,硬件加速部件可以运行租户功能实例、另一硬件加速部件(或多个部件)、主机部件(或多个部件)等、或者上述的组合,其中该实例发出针对本身可以满足的服务的请求,。

图12至图15示出了用于处理由驻留在主机部件上的租户功能所做出的针对服务的请求的相应不同的选项。从图12开始,假定本地主机部件1202包括至少两个租户功能实例t1(1204)和t2(1206),两者同时运行(但实际上,本地主机部件1202可以托管多个租户功能实例)。第一租户功能实例t1要求加速服务a1来执行其操作,而第二租户功能实例t2要求加速服务a2来执行其操作。

进一步假定本地加速部件1208例如经由pcie本地链路等耦合到本地主机部件1202。在当前时间,本地加速部件1208托管用于执行加速服务a1的al逻辑1210和用于执行加速服务a2的a2逻辑1212。

根据一个管理决定,smc128将t1指派给a1逻辑1210,并且将t2指派给a2逻辑1212。然而,smc128的这个决定不是固定规则。smc128可能基于多种因素来做出决定,其中一些因素可能反映了冲突考虑。因此,基于其他因素(此时未被描述),smc128可以选择以与图12所图示方式不同的方式,将作业指派给加速逻辑。

在图13的场景下,主机部件1302具有上文所描述的服务需求相同的相同的租户功能实例(1304,1306)。但是在这种情况下,本地加速部件1308仅包括用于执行服务a1的al逻辑1310。即,它不再托管用于执行服务a2的a2逻辑。

响应于上述场景,smc128可以选择,以便将t1指派给加速部件1308的a1逻辑1310。然后,smc128可以将t2指派给远程加速部件1314的a2逻辑1312,该远程加速部件1314已经被配置为执行服务。再次,所图示的指派在本文中是以说明而非限制的精神而被阐述的。smc128可以基于输入考虑的另一组合来选择不同的分配。在一个实现方式中,本地主机部件1302和远程加速部件1314可以可选地压缩它们发送给彼此的信息,例如以减少带宽的消耗。

需要注意的是,主机部件1302经由本地加速部件1308访问a2逻辑1312。但是在另一情况下(未示出),主机部件1302可以经由本地主机部件(未图示)访问a2逻辑1312,该本地主机部件与加速部件1314相关联。

图14呈现了另一场景,其中主机部件1402具有上文所描述的服务需求相同的相同的租户功能实例(1404,1406)。在这种情况下,本地加速部件1408包括用于执行服务a1的a1逻辑1410和用于执行服务a3的a3逻辑1412。响应于上述场景,smc128可以使用配置部件1006(图10的)来重新配置加速部件1408,以使其包括a2逻辑1414而非a3逻辑1412(如图14的底部所示)。然后,smc128可以将t2指派给a2逻辑1414。虽然未被示出,但是可替代地或附加地,smc128可以决定重新配置任何远程加速部件以执行a2服务。

通常,smc128可以以完全或部分方式执行配置,以满足租户功能实例的任何请求。smc128通过重新配置由加速部件提供的所有应用逻辑,来执行完全配置。smc128可以通过重新配置由加速部件提供的应用逻辑的一部分(例如,一个或多个拼接块),来执行部分配置,从而使其他部分(例如,一个或多个拼接块)在重新配置期间保持完整和可操作。如下文所描述的,关于smc128在其背景操作模式下的操作也是如此。进一步注意,附加因素可能在确定a3逻辑1412是否是重新配置的有效候选(诸如服务是否被认为是保留的,是否存在针对该服务的未决请求等)中起作用

图15呈现了其中主机部件1502具有上文所描述的服务需求相同的相同的租户功能实例(1504,1506)的另一场景。在这种情况下,本地加速部件1508仅包括用于执行服务a1的al逻辑1510。响应于上述场景,smc128可以将t1指派给a1逻辑1510。进一步地,假定smc128确定对于任何加速部件执行a2服务是不可行的。作为响应,smc128可以指令本地主机部件1502将t2指派给本地a2软件逻辑1512,实际上,如果该逻辑在主机部件1502处可用,则smc128可以基于各种理由来做出图15的决定。例如,smc128可以得出结论硬件加速是不可能的,这是因为当前不存在该服务的配置图像。或者配置图像可能存在,但是smc128得出结论在加速设备中的任一加速设备上没有足够的容量来加载和/或运行这样的配置。

最后,在主机部件上运行的租户功能实例的上下文中,对上述示例进行了描述。但是如上文已经指出的,租户功能实例可以更一般地与服务请求者相对应,并且那些服务请求者可以在包括加速部件的任何一个或多个部件上运行。因此,例如在加速部件上运行的请求者可以生成针对要由一个或多个其他加速部件和/或由其自身和/或由一个或多个主机部件执行的服务的请求。smc128可以以上文所描述的方式中的任一方式,处理请求者的请求。

图16提供了当在后台模式下操作时smc128的一个操作方式的概述。在操作(1)中,smc128可以接收发起smc128的操作的某种类型的触发事件。例如,触发事件可以与影响服务的需求的改变相对应等。在操作(2)中,响应于触发事件,smc128基于一个或多个映射考虑和数据存储装置1002中的可用性信息,例如,通过将服务指派给加速部件,来确定将一个或多个服务分配给加速部件。在操作(3)中,smc128执行其分配决定。作为该过程的一部分,假定这些部件尚未被配置为执行一个或多个服务,smc128可以调用配置部件1014,来配置已经被分配以执行一个或多个服务的加速部件。smc128还更新数据存储装置126中的服务位置信息,并且如果适当,则smc128更新数据存储装置1002中的可用性信息.

在图16的具体示例中,smc128分配第一加速部件组1602,以执行第一服务(“服务y”),并且分配第二加速部件组1604,以执行第二服务(“服务z”)。实际上,所分配的加速部件组可以具有任意数目的成员,并且这些成员可以以任何方式分布在硬件加速平面106上。然而,smc128可以尝试以特定方式,对与服务相关联的加速部件进行分组来实现(除了其他因素之外)令人满意的带宽和等待时间性能。又如在下文更详细地描述的,smc128可以在分配与单个多分量服务相关联的加速部件时,应用进一步分析。

smc128还可以在后台模式下操作,以将实现特定服务的一个或多个加速部件分配给至少一个租户功能实例,而不需要租户功能每次对这个特定服务做出请求。例如,假定租户功能实例定期使用与图16中的“服务z”相对应的压缩功能。smc128可以抢先将一个或多个专用加速部件1604分配给至少该租户功能实例。当租户功能需要使用该服务时,其可以从与已经被指派给它的加速部件1604相关联的可用地址池中抽取。可以针对租户功能实例组(而非单个实例)来执行相同的专用映射操作。

图17示出了图10的管理功能122的第一物理实现方式。在这种情况下,在单个全局管理部件(mg)1702或多个全局管理部件(1702,1704)上提供管理功能122。全局管理部件(1702,1704)中的每个都可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。如果使用多个全局管理部件(1702,...,1704),则它们可以提供冗余逻辑和信息,以实现期望的负载平衡和故障管理性能。在一种情况下,每个全局管理部件可以在可以与主机部件中的一个主机部件相对应的计算机服务器设备或专用管理计算设备上实现。在操作中,任何单个一个或多个主机部件(s)或加速部件(h)可以经由图1中所示的公共网络120与全局管理部件进行交互。

图18示出了图10的管理功能122的第二物理实现方式。在这种情况下,每个服务器单元部件(诸如代表性服务器单元部件1802)提供至少一个本地管理部件(ml)1804。例如,本地主机部件1806可以实现本地管理部件1804(例如,作为其管理程序功能的一部分),或者本地加速部件1808可以实现本地管理部件1804,或者服务器单元部件1802内的某个其他部件可以实现本地管理部件1804(或其一些组合)。

数据处理系统102还包括一个或多个全局管理部件(1810,1812)。全局管理部件(1810,1812)中的每个可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。每个全局管理部件(1810,...,1812)可以以上文关于图17所描述的方式来提供冗余逻辑和信息。如上文所述,管理功能122共同呈现数据处理系统102中的所有本地和全局管理部件。

图18的体系架构可以例如以如下方式实现smc128的请求驱动方面。本地管理部件1804可以首先确定本地加速部件1808是否可以执行由租户功能请求的服务。在本地加速部件1808不能执行该任务的情况下,全局管理部件(mg)可以执行其他决定,诸如标识远程加速部件来执行服务。另一方面,在图17的体系架构中,单个全局管理部件可以执行关于将请求映射到加速部件的所有决定。

进一步地,本地管理部件1804可以在任何基础上(诸如定期基础和/或事件驱动基础(例如,响应于利用改变))向全局管理部件发送利用信息。全局管理部件可以使用利用信息来更新其在数据存储装置1002中的可用性信息的主记录。

图19示出了图10的管理功能122的第三物理实现方式。在这种情况下,每个服务器单元部件存储其自身的专用本地管理部件(ml)(其可以由作为其管理程序功能的一部分的本地主机部件,本地加速部件,某个其他本地部件或某个组合来实现)。

例如,服务器单元部件1902提供本地管理部件1904以及本地主机部件1906和本地加速部件1908。同样,服务器单元部件1910提供本地管理部件1912以及本地主机部件1914和本地加速部件1916。本地管理部件的每个实例存储关于相同部件的其他实例的冗余逻辑和信息。

已知的分布式系统工具可以被用于确保该部件的所有分布式版本都包含相同的逻辑和信息,诸如马里兰州的foresthill的apache软件基金会提供的zookeeper工具。(顺便主意,相同的技术可以被用于维持在本小节中描述的其他示例中的冗余逻辑和信息)。如上文所述,管理功能122共同地呈现数据处理系统102中的所有本地管理部件。即,在该示例实现方式中,没有一个或多个中央全局管理部件。

图20示出了图10的管理功能122的第四物理实现方式。在这种情况下,管理功能122体现了单个管理部件的分层结构。例如,在一个仅有代表性的结构中,每个服务器单元部件包括低级本地管理部件(ml3)(其可以由本地主机部件、本地加速部件、某个其他本地部件或其某个组合来实现)。

例如,服务器单元部件2002提供低级本地管理部件2004以及本地主机部件2006和本地加速部件2008。同样地,服务器单元部件2010提供低级本地管理部件以及本地主机部件2014和加速部件2016。

该结构的下一个管理层至少包括中级管理部件2018和中级管理部件2020。中级管理部件2018和中级管理部件2020中的每个中级管理部件可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。该结构的顶级包括单个全局管理部件2022(或多个冗余的这种全局管理部件)。所图示的控制体系架构因此形成具有三个级别的结构,但是该体系架构可以具有任何数目的级别。

在操作中,低级管理部件(2004,2012,...)处理直接影响与单个服务器单元部件相关联的资源的某些低级管理决定。中级管理部件(2018,2020)可以做出影响诸如单个机架或机架组之类的数据处理系统102的相关部分的决定。顶级管理部件(2022)可以做出广泛应用于整个数据处理系统102的全局决定。

图21至图24示出了用于配置加速部件的不同的相应策略,其与实现图10的配置部件1014的不同方式相对应。从图21开始,全局管理部件2102可以访问提供一个或多个配置图像的数据存储装置2104。每个配置图像都包含可以被用于实现对应服务的逻辑。全局管理部件2102可以通过向加速部件转发配置流(与配置图像相对应)来配置加速部件。

例如,在一种方法中,全局管理部件2102可以向与特定服务器单元部件2108相关联的本地管理部件2106发送配置流。本地管理部件2106随后可以基于所接收的配置流来协调本地加速部件2110的配置。可替代地,本地主机部件2112代替本地管理部件2106或者除了本地管理部件2106之外还可以执行上文所描述的操作。

图22示出了用于配置加速部件的另一策略。在这种情况下,全局管理部件2202向服务器单元部件2206的本地管理部件2204发送指令。作为响应,本地管理部件2204访问本地数据存储装置2208中的配置图像,然后使用该配置图像来配置本地加速部件2210。可替代地,作为本地管理部件2204的替代或者除了本地管理部件2204之外,本地主机部件2212还可以执行上文所描述的操作。

图23示出了用于配置本地加速部件2302的另一技术。在该方法中,假定加速部件2302包括应用逻辑2304,该应用逻辑2304进而由当前模型2306管控(其中模型与以特定方式执行功能的逻辑相对应)。进一步假定加速部件2302可以访问本地存储器2308。本地存储器2308存储与一个或多个其他模型(模型1,...,模型n)相关联的配置图像。

当被触发时,本地模型加载部件2310可以将与当前模型2306相关联的配置交换为与本地存储器2308中的另一模型相关联的配置。模型加载部件2310可以由加速部件2302本身、本地主机部件、本地管理部件等或上述的某个组合来实现。在一个实现方式中,因为图23所示的配置操作需要替换由应用逻辑2304所使用的逻辑中的一些,而非以大规模方式来替换整个应用逻辑2304,所以该配置操作可以在比整个应用逻辑2304的整体重新配置更少的时间内执行。

最后,图24示出了具有支持部分配置的应用逻辑2402的加速部件。管理功能122可以通过将应用1(2404)与应用2(2406)分离配置来利用该能力,反之亦然。

图25示出了实现图1的数据处理系统102中的加速部件2502的一种方式,该加速部件2502可以在物理上被实现为fpga设备。需要注意的是,下文所呈现的细节是以说明性而非限制性的精神进行阐述。其他数据处理系统可以使用具有体系架构的加速部件,该体系结构与图25所示的方式相比以一种或多种方式而变化。进一步,其他数据处理系统可以采用包括具有不同类型的加速部件的异构设计。

从高级角度来看,加速部件2502可以被实现为具有不同功能层的分层结构。在最低级别处,加速部件2502提供“外壳”,其提供在大多数应用场景中通常保持相同的基本接口相关部件。位于外壳内部的核心部件2504可以包括“内壳”和应用逻辑2506。内壳与除了应用逻辑2506之外的核心部件2504中的所有资源相对应,并且内壳表示在某个应用场景集合内保持相同的第二级别资源。应用逻辑2506本身表示最容易遭受改变的最高级别资源。然而,需要注意的是,加速部件2502的任何部件可以在技术上被重新配置。

在操作中,应用逻辑2506以与软件实现的应用与其底层操作系统资源交互的方式相类似的方式,来与外壳资源和内壳资源交互。从应用开发角度来看,使用公共外壳资源和内壳资源可以使开发人员不必为他或她所创建的每个应用重新创建这些公共部件。这种策略还降低了开发人员可能以导致整个数据处理系统102内的问题的方式更改核心内壳或外壳功能的风险。

参照外壳,加速部件2502包括桥2508,其用于将加速部件2502耦合到网络接口控制器(经由nic接口2510)和本地架顶式交换机(经由tor接口2512)。

桥2508支持两种模式。在第一模式下,桥2508提供数据路径,该数据路径允许来自nic或tor的业务流入加速部件2502,并且来自加速部件2502的业务流出到nic或tor。加速部件2502可以对其“拦截”的业务执行诸如压缩、加密等任何处理。在第二模式下,桥2508支持允许业务在nic和tor之间流动的数据路径,而无需由加速部件2503进一步处理。在内部,桥2508可以由缓冲接收到的分组的各种fifo(2514、2516)以及将分组路由到其期望的目地的各种选择器和仲裁逻辑而组成。旁路控制部件2518控制桥2508是在第一模式下还是在第二模式下运行。

存储器控制器2520管控加速部件2502和本地存储器2522(诸如dram存储器)之间的交互。存储器控制器2520可以执行作为其服务的一部分的误差校正。

主机接口2524提供功能,其使得加速部件2502能够与本地主机部件(图25中未示出)交互。在一个实现方式中,主机接口2524可以使用高速外围部件互连(pcie),结合直接存储器访问(dma)来与本地主机部件交换信息。

最后,壳体还可以包括各种其他特征2526,诸如时钟信号发生器、状态led、纠错功能等等。

在一个实现方式中,内壳可以包括路由器2528,其用于在加速部件2502的各种内部部件之间以及在加速部件2502和外部实体(经由传送部件2530)之间路由消息。传送部件2530可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。每个这样的端点都与相应的端口相关联。例如,路由器2528被耦合到存储器控制器2520、主机接口2524、应用逻辑2506和传送部件2530。

传送部件2530制定用于传输到远程实体(诸如远程加速部件)的分组,并且从远程加速部件(诸如远程加速部件)接收分组。

当被激活时,3端口交换机2532通过在nic和tor之间以及在nic或tor和与加速部件2502相关联的本地端口之间路由分组,来接管桥2508的功能。

最后,可选的诊断记录器2534将关于由路由器2528、传送部件2530和3端口交换机2532执行的操作的业务信息存储在循环缓冲器中。例如,业务信息可以包括关于分组的起始和目的地ip地址、主机特定数据、时间戳等的数据。技术人员可以在试图诊断加速部件2502中的故障或次优性能的原因时,研究业务信息的日志。

图26示出了包括分离的可配置域(2604,2606,...)的加速部件2602。配置部件(例如,图10的配置部件1014)可以配置每个可配置域,而不影响其他可配置域。因此,配置部件可以配置一个或多个可配置域,而其他可配置域基于它们相应的配置来执行操作,这些配置不受干扰。

在一些实现方式中,图1的数据处理系统102可以动态地重新配置其加速部件,以解决任何映射考虑。该重新配置可以在部分和/或全部服务的基础上被执行,并且可以在周期性和/或事件驱动的基础上被执行。实际上,在一些情况下,数据处理系统102可能好像继续在通过重新配置其加速逻辑来自身适应数据处理系统102中的改变条件的过程中。

图27示出了本地主机部件2702可以经由图25所示的主机接口2524(例如,结合dma存储器传送,来使用pcie)将信息转发到其本地加速部件2704的功能。在一个非限制性协议中,在操作(1)中,主机逻辑2706将要处理的数据放置在与主机逻辑2706相关联的主存储器中的核固定的输入缓冲器2708中。在操作(2)中,主机逻辑2706指令加速部件2704检索数据并且开始处理该数据。然后,主机逻辑的线程进入休眠状态,直到它从加速部件2704接收到通知事件为止,或者它继续异步地处理其他数据。在操作(3)中,加速部件2704传送来自主机逻辑的存储器的数据并且将其放置在加速部件输入缓冲器2710中。

在操作(4)和(5)中,应用逻辑2712从输入缓冲器2710检索数据,对其进行处理以生成输出结果,并且将输出结果放置在输出缓冲器2714。在操作(6)中,加速部件2704将输出缓冲器2714的内容复制到主逻辑的存储器中的输出缓冲器。在操作(7)中,加速部件通知主机逻辑2706数据已准备好供主机逻辑2706来检索。在操作(8)中,主机逻辑线程唤醒并且消耗输出缓冲器2716中的数据。然后,主机逻辑2706可以丢弃输出缓冲器2716的内容,这允许加速部件2704在下一事务中重新使用输出缓冲器2716。

图28示出了图25中引入的路由器2528的一个实现方式。路由器包括用于从相应端口接收消息的任意数目的输入单元(在本文中是四个:2802、2804、2806、2808)以及用于将消息转发到相应端口的输出单元(在本文中是四个:2810、2812,2814、2814)。如上文所描述的,与端口相关联的端点包括存储器控制器2520、主机接口2524、应用逻辑2506和传送部件2530。交叉开关部件2818基于与该端口相关联的地址信息,来将消息从输入端口转发到输出端口。交叉开关部件2818可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。更具体地,消息由多个“信标”组成,路由器2528在逐个信标的基础上发送消息。

在一个非限制性实现方式中,路由器2528支持若干个(诸如8个)用于在同一物理链路上传送不同类别的业务的虚拟信道。即,路由器2528可以支持用于应用逻辑2506实现多个业务的那些场景的多个业务类别,并且这些业务需要在单独类别的业务上进行通信。

路由器2528可以使用基于信用的流量技术,来管控对路由器,资源(例如,其可用缓冲器空间)的访问。在该技术中,输入单元(2802至2808)向上游实体提供信用,该信用与在其缓冲器中可用的信标的精确数目相对应。信用授予上游实体将其数据传送到输入单元(2802至2808)的权利。更具体地,在一个实现方式中,路由器2528支持可以在多个虚拟通道之间共享的“弹性”输入缓冲器。输出单元(2810至2816)负责跟踪其下游接收器中的可用信用,并且将授权提供给请求向给定输出端口发送信标的任何输入单元(2802至2808)。

图29示出了图25中引入的传送部件2530的一个实现方式。传送部件2530可以提供注册接口,以建立节点之间的连接。即,每个这样的连接是单向的,并且将源部件上的发送队列链接到目标部件上的接收队列。在传送部件2530可以传送或接收数据之前,软件过程可以通过静态分配连接来建立连接。数据存储装置2902存储控制连接状态的两个表(发送连接表和接收连接表)。

分组处理部件2904处理从路由器2528到达的目的地为远程端点(例如,另一加速部件)的消息。分组处理部件2904通过缓冲和打包消息来这样做。分组处理部件2904还处理从一些远程端点接收的并且目的地为路由器2528的分组。分组处理部件2904可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备实现的专用逻辑门阵列来实现。

对于从路由器2528到达的消息,分组处理部件2904例如使用与作为如由路由器2528提供的查找项目的消息相关联的报头信息和虚拟信道(vc)信息,将每个消息请求匹配到发送连接表中的发送连接表条目。分组处理部件2904使用从发送连接表条目中检索的信息(诸如序列号、地址信息等),来构造它发出到远程实体的分组。

更具体地,在一个非限制性方法中,分组处理部件2904将分组封装在udp/ip以太网帧中,并且将它们发送到远程加速部件。在一个实现方式中,分组可以包括以太网报头,随后是ipv4报头,随后是udp报头,该udp报头随后是传送报头(具体地与传送部件2530相关联),该传送报头随后是有效载荷。

对于从网络到达的分组(例如,在3端口交换机2532的本地端口上所接收到的),分组处理部件2904将每个分组匹配到与在每个分组报头中提供的接收可连接表条目。如果匹配,则分组处理部件检索条目的虚拟信道字段,并且使用该信息将接收到的消息转发到路由器2528(按照路由器2528使用的信用流技术)。

故障处理部件2906缓冲所有发送的分组,直到其从接收节点(例如,远程加速部件)接收到确认(ack)。如果用于连接的ack没有在指定的超时周期内到达,则故障处理部件2906可以重新传送该分组。故障处理部件2906将重复这样的重新传输达预定次数(例如,128次)。如果在所有这些尝试之后分组仍未被确认,则故障处理部件2906可以丢弃该分组并且释放其缓冲器。故障处理部件2906可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

图30示出了3端口交换机2532的一个实现方式。3端口交换机2532进行操作,以便安全地将加速部件生成的网络分组插入(和移除)到数据中心网络上,而不损害主机到tor网络业务。

3端口交换机2532连接到nic接口2510(与主机接口相对应),tor接口2512和与本地加速部件2502本身相关联的本地接口。3端口交换机2532可以被概念化为包括接收接口(3002,3004,3006),其用于分别从主机部件,tor交换机接收分组并且用于在本地加速部件处接收分组。3端口交换机2532还包括用于分别向tor交换机和主机部件提供分组并且接收由本地加速部件传送分组的传送接口(3008,3010,3012)。

分组分类器(3014,3016)例如基于由分组指定的状态信息,来确定从主机部件或tor交换机接收的分组的类别。在一个实现方式中,每个分组被分类为属于无损流(例如,远程直接存储器访问(rdma)业务)或属于有损流(例如,传输控制协议/互联网协议(tcp/ip)业务)。属于无损流的业务不容许丢包,而属于有损流的业务可以容许一些丢包。

分组缓冲器(3018,3020)根据它们所属的业务的类别,将传入分组存储在不同的相应缓冲器中。如果缓冲器中没有可用空间,则分组将被丢弃。在一个实现方式中,3端口交换机2532不提供由本地加速部件(经由本地端口)提供的用于分组的分组缓冲,这是因为应用逻辑2506可以通过使用“反压”来调节分组的流动。仲裁逻辑3022在可用分组中进行选择并且传送所选分组。

如上文所描述的,目的地为本地加速部件的业务被封装在固定端口号上的udp/ip分组中。3端口交换机2532检查传入分组(例如,从tor接收到的),以确定它们是否是正确端口号上的udp分组。如果是,则3端口交换机2532在本地rx端口接口3006上输出分组。在一个实现方式中,到达本地tx端口接口3012的所有业务是从tortx端口接口3008被发出,但是也可以将其发送到主机tx端口接口3010。进一步注意,图30指示加速部件2502拦截来自tor的业务,但不拦截来自主机部件的业务;但加速部件2502还可以被配置为拦截来自主机部件的业务。

pfc处理逻辑3024允许3端口交换机2532将优先级流控制帧插入到被传送到tor或主机部件的业务流中。即,对于无损业务类别,如果分组缓冲器填满,则pfc处理逻辑3024将pfc消息发送到链路伙伴,从而请求暂停该类别上的业务。如果在主机接收端口接口3002或主机接收端口接口3004上接收到无损业务类别的pfc控制帧,则3端口交换机2532将停止在接收到控制消息的端口上发送分组。

图31示出了主机部件3102的一个实现方式,其与图1中所示的一个或多个主机部件(s)中的任一主机部件相对应。主机部件3102可以包括一个或多个处理设备3104,诸如一个或多个中央处理单元(cpu),其中每个可以实现一个或多个硬件线程。主机部件3102还可以包括任何存储资源3106,其用于存储任何种类的信息(诸如代码、设置、数据等)。例如,在不限制的情况下,存储资源3106可以包括任何一个或多个类型的ram、任何一个或多个类型的rom、闪存设备、硬盘、光盘等等中的任一个。更一般地,任何存储资源都可以使用用于存储信息的任何技术。进一步地,任何存储资源都可以提供易失性信息保留或非易失性信息保留。更进一步地,任何存储资源可以表示主机部件3102的固定部件或可移除部件。

在一种情况下,当处理设备3104执行被存储在任何存储资源或存储资源的组合中的相关联的指令时,主机部件3102可以执行与本地租户功能相关联的操作中的任一操作。主机部件3102还包括一个或多个驱动机构3108(诸如硬盘驱动机构、光盘驱动机构等),其用于与任何存储资源交互。

主机部件3102还包括输入/输出模块3110,其用于接收各种输入(经由输入设备3112)并且提供各种输出(经由输出设备3114)。一个特定输出机构可以包括呈现设备3116和相关联的图形用户接口(gui)3118。主机部件3102还可以包括一个或多个网络接口3120,其用于经由一个或多个通信管道3122与其他设备交换数据。一个或多个通信总线3124将上文所描述的部件通信地耦合在一起。

一个或多个通信管道3122可以以任何方式实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等或其任何组合。一个或多个通信管道3122可以包括由任何协议或协议组合所管控的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。

图32提供了用于生成和应用多分量服务的功能的概述。smc128包括多分量管理部件(mcmc)3202。mcmc3202与配置部件1014(图10的)交互以配置加速部件集合(集群)。此后,mcmc3202管理该集合。mcmc3202还存储关于集合中加速部件之间的连接的信息。例如,对于集合中的每个成员,mcmc3202可以存储其一个或多个上游部件(如果有的话)及其一个或多个下游部件(如果有的话)。

图32还示出了执行多分量服务的加速部件(3206、3208,...,3210)的一个图示的集合3204。加速部件(3206,3208,...,3210)的该特定集合3204被构造为环。但是其他集合可能会展示其他流结构。在集合3204内,加速部件3206表示多分量服务的报头部件。

mcmc3202还从上文在图10的上下文中引入的故障监视部件1016接收故障报告。该故障报告指示两个加速部件之间的链路是否出现了故障,例如,其可能本身表现为无法通过链路交换消息。如果确认故障,则mcmc3202可以通过用合适配置的备用加速部件交换出一个或多个故障的加速部件来修复多分量服务。为了执行该任务,mcmc3202可以从备用加速部件3212(例如,包括加速部件(3214,3216,3218))池中抽取。例如,假定集合3204中的加速部件3208出现故障,其执行多分量服务的特定部分。mcmc3202可以将该部件3208替换为已经被配置为执行相同功能的来自池的另一部件。可替代地,mcmc3202可以与配置部件1014交互,以便在其指派到集合3204之前以动态方式配置备用部件。mcmc3202存储关于在任何给定时间可用的备用部件3212的信息,例如,作为数据存储装置1002中的可用性信息的一部分。

功能解析部件3220可以将功能解析为多个部分以创建多分量服务。功能解析部件3220然后可以将指令转发到描述功能已经被解析的方式的mcmc3202。mcmc3202使用这些指令来配置多分量服务中的加速部件(3206,3208,...,3210)。功能解析部件3220可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

图33示出了可以使用图32的功能创建和应用的加速部件(3304至3314)的另一简化集合3302。集合3302包括报头部件3304,其分支成包括由加速部件3306和3308组成的第一路径和由加速部件3310和3312组成的第二路径的两条平行路径(尽管分支可以具有任何数目的部件)。

图34示出了可以由图32功能产生和应用的另一类型的加速部件集合3402。在本文中,该图一般地示出了加速部件可以被布置成形成三维流结构。

更一般地,在一些情况下,多分量服务可以基于定义其加速部件之间的固定互连的图形结构。这种类型的多分量服务无论何时被调用都将使用相同的加速部件集合,并且这种类型的多分量服务以由其图形结构所定义的固定方式在这些部件之间传递信息。在其他情况下,多分量服务可以基于一个或多个因素在运行时间动态变化其图形结构。在这样做时,多分量服务可以针对不同的调用而使用不同的加速部件,和/或可以针对不同的调用在加速部件之间而采用不同的流。

例如,考虑执行图像识别的多分量服务。多分量服务可以调用第一加速部件集合,以处理第一类型的输入数据。多分量服务可以调用第二加速部件集合,以处理第二类型的输入数据。可替代地地或附加地,多分量服务可以基于实时性能条件(诸如加速部件和/或链路经历的拥塞),来动态地调用不同的加速部件和/或流。

图35示出了上文所引入的图32的功能解析部件3220的图示的实现方式。功能解析部件3220可以包括可用资源分析部件(arac)3502,其用于确定可用于构建多分量服务的加速部件3504的能力。例如,arac3502可以查询(图10的)数据存储装置1002中的可用性信息,以确定可用的加速部件的数目、每个加速部件的总处理能力以及当前可用于实现多分量服务的一部分的每个加速部件中的处理能力的数量(以及一个或多个类型)。

功能分析部件3506可以探究要被划分成多个部分的功能本身。功能分析部件3506可以根据功能的性质以不同方式执行该操作。考虑涉及重复相同基本操作相对较多次数的功能。功能分析部件3506可以确定操作被执行的总次数以及与操作的每次迭代相关联的计算负载。功能分析部件3506可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列而被实现。

功能分析部件3506还可以标识功能流内的自然过渡。例如,功能可以由多个阶段来表征,并且那些阶段可以映射到多分量服务的相应部分,该部分具有在部分之间的过渡。附加地或者可替代地,功能可以调用子例程的集合,并且那些子例程可以映射到多分量服务的相应部分,该相应部分具有到子例程的过渡和来自该子例程的过渡。

更一般地,功能可以包括任何类型的编程调用,例如,其中一个代码模块调用另一代码模块。功能解析部件3220可以将那些调用视为划分功能的自然点,从而有效地利用从一个加速部件到下一加速部件的调用来替换内部编程调用。进一步,当功能具有多个部分或阶段时,功能分析部件3506还可以确定与每个部分相关联的处理工作量。

分区生成部件3508使用arac3502和功能分析部件3506的结果,来生成将功能分配到要分配给相应分配部件的多个部分。例如,考虑功能分析部件3506已经确定功能涉及重复特定任务一定次数(诸如通过执行蒙特卡洛模拟算法的一千万次迭代)的情况。分区生成部件3508可以将全部数目的任务分摊给合适尺寸的组块,以用于到可用的单个加速部件的分配。更具体地,分区生成部件3508可以选择足以执行全部数目的任务的若干个加速部件,然后根据每个加速部件的特定可用容量为每个这样的加速部件分配适当的部分。分区生成部件3508还可以在选择特定分区点时,利用由功能分析部件3506标识的自然过渡信息,例如,以使得内部编程区的目的被改换为从一个加速部件到另一加速部件的调用。分区生成部件3508可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

在其他情况下,功能解析部件3220可以标识将功能划分为多个部分的有限数目的可能方式,并且可以标识影响其总体合意性的每个选项的所得特点(例如,在计算速度、成本、功率消耗、热分布和/或任何其他因素方面)。然后,功能解析部件3220可以选择最有利的分区选项。例如,功能解析部件3220可以将得分指派给反映其特点特征的加权组合的每个选项,然后选择具有最有利得分的选项。可以基于环境特定的考虑来选择权重。在其他情况下,功能解析部件3220可以应用已知搜索算法(诸如,最佳优先)在选项空间内找到合适的解决方案。

在另一场景中,假定功能具有功能解析部件3220映射到不同加速部件的多个阶段。但是,假设一个阶段比其他阶段更为劳动密集。为了避免在与该阶段相关联的处理中的瓶颈,功能解析部件3220可以为该阶段分配并行操作的两个或更多加速部件。

功能解析部件3220可以应用于不同的使用上下文中。在一个使用上下文中,功能解析部件3220提供了开发人员可以与其交互以手动探索不同分区选项的工具。

在另一使用上下文中,功能解析部件3220至少以部分自动化的方式进行操作。例如,假定数据处理系统102提供至少一个多分量服务。进一步假设在任何给定时间,多分量服务采用在当前划分策略的基础上构建的加速部件集合。在触发事件之后,数据处理系统102可以动态地调用功能解析部件3220以鉴于数据处理系统102中的占优条件来确定当前分割策略是否继续适当。例如,功能解析部件3220可以在数据处理系统102的操作的过程中在定期基础上和/或时间驱动的基础上来执行该操作。如果策略不再适当,则功能解析部件3220动态地更新与多分量服务相关联的部件的分配,然后部署所得的新多分量服务。

出于一个或多个原因,先前选择的划分策略可能不再适当。例如,数据处理系统102可以包含与最初遇到的可用资源集合不同的可用资源集合,其可以保证对该多分量服务的重新划分。附加地或可替代地,数据处理系统102可能遇到实时性能约束,其可能在每次调用多分量服务时不同。

附加地或可替代地,待执行的任务本身的性质可以基于各种因素而改变。例如,如上文所指出的,多分量服务可以根据馈送给它的输入信息的性质和/或客户要求的性质等等而具有不同的处理要求。

为了引用特定场景,在给定多分量服务与迭代算法相对应的情况下,该迭代算法根据馈送给它的输入数据的性质和/或基于由消费者指定的置信度度量来调用不同数目的重复性任务。为了解决这种场景,功能解析部件3220可以基于功能解析部件3220当处理数据集时遇到的实时数据处理需求来动态地重新划分算法。例如,考虑图33中所示的集合3302的类型。功能解析部件3220可以响应于功能解析部件3220遇到的实时处理需求,动态地减少或增加集合3302中的分支的数目,以分别减少或增加其处理能力。

在一种情况下,功能解析部件3220与在一个或多个软件驱动的计算设备上运行的程序相对应,例如,图1中所示的主机部件中的一个主机部件或专用电脑服务器。可替代地或者附加地,即使没有来自软件平面104的帮助,加速部件(或多个部件)还可以实现功能解析部件3220的一些方面。例如,加速部件可以自动检测其本地处理或者集合中的其他加速部件的处理中的拥塞。

例如,加速部件可以确定其无论出于何种一个或多个原因都没有在指定的时间量内产生其输出结果。作为响应,加速部件可以自动生成其自身的重复版本,其随后并行操作以减轻拥塞。例如,再次参照图33,在检测到一个或多个分支或节点中的处理正变得拥塞或者以其他方式表现不佳时,加速部件可以自动增加或减少并行分支或单个节点的数目。

图36示出了使用加速部件集合实现的图示的多分量服务的更详细示例。总的来说,多分量服务将排名得分指派给查询和文档的配对。排名得分定义了文档与查询的相关性。传统上,这种任务完全通过应用由机器学习产生的模型以软件执行。

在该实现方式中,主机部件3602可以通过向与报头部件3604相对应的多分量服务的第一加速部件发送请求来调用服务。更具体地,通过在操作(1)中示出了主机部件3602直接与报头部件3604交互,图36简化了第一操作。更一般地,主机部件3602直接与其本地加速部件交互,该本地加速部件可能与报头部件3604相对应或不对应。如果本地加速部件不是报头部件3604,则本地加速部件将把请求转发给报头部件3604。

请求本身可以包括各种信息项目,诸如描述在考虑中的文档内的查询术语的位置的一个或多个命中向量等。该请求还可以指定软件生成的特征的集合。出于任何环境特定原因(例如,因为这样的计算不能很好地映射到硬件资源),这些软件生成的特征以软件(而非硬件)计算。

报头部件3604扮演两个角色。首先,报头部件3604计算在本文中被称为“特征值”的数值得分,其要被用作下游加速部件的输入信息。例如,一个这样的特征值可以标识查询字在考虑中的文档中出现的次数。另一特征值可以是查询字以连续次序出现的次数等等。报头部件3604还可以扮演下文将更详细地描述的队列管理角色。

与由报头部件3604执行的计算相比,接下来的两个加速部件(3606,3608)执行更复杂的计算,其在本文中被称为“自由形式表达式(ffe)”。例如,如下文更详细地描述的,ffe加速部件3606和3608可以使用由报头部件3604确定的特征值来执行数学计算。尽管在图36中示出了两个ffe加速部件3606和3608,但是本领域普通技术人员将理解,可以使用多于或少于两个ffe加速部件。序列中的下一加速部件3610压缩到目前为止计算的特征值。

最后三个加速部件(3612、3614、3616)使用迄今为止计算出的所有特征值作为评分计算的输入信息并且使用任何环境特定得分计算方程或算法来生成最终排名得分。上文所描述的一系列加速部件然后将最终得分路由回报头部件3604,并且然后路由回主机部件3602。

通常,图36中的编号箭头反映了构成多分量服务的加速部件执行的操作序列。在本文中,流结构假设环的形式,其中计算在环的第一方向上流动,并且最终结果在环的相反方向上流动。但是再者,多个其他流结构也是可能的。标签s1、s2,...,s6表示与图36所示的相应加速部件相关联的本地主机分量。

图37示出了报头部件3604中用于计算特征值的功能。该功能包括流处理部件3702,其用于将输入流(例如,与命中向量相关联)拆分成多个子流3704。然后,特征状态机3706的集合并行操作子流以生成特征值。特征搜集部件3708收集来自特征状态机的特征值并且使它们可用于下游加速部件。特征收集部件3708可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。尽管未示出,但是执行更高级特征计算的加速部件(35606,3608)也可以利用并行计算资源。

图38示出了可以由图36的报头部件3604实现的队列管理器部件3802。队列管理器部件3802通过改变图36的加速部件集合所使用的模型来操作,以适应需求不同模型的请求。更具体地,从主机部件3602接收的不同请求与以不同自然语言表达的查询相对应。不同的语言又提示队列管理器部件3802加载不同的相应模型以处理不同的请求。例如,如果接收到的查询是以法语表达,则队列管理器部件3802将寻求在多分量服务中加载法语相关的模型,以作用于该查询(如果该模型尚未被加载)。

更具体地,队列管理器部件3802可以在本地存储器3804中维护多个队列。每个队列与不同的相应模型相关联。例如,队列1与模型1相关联,队列2与模型2相关联,队列3与模型3相关联,并依此类推。

队列管理器部件3802包括请求处理部件3806和模型加载部件3808。模型加载部件3808可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。在操作中,请求处理部件3806例如通过将上文所指出的法语查询添加到法语队列来将每个传入请求添加到适当的队列。请求处理部件3806还基于任何策略在队列中进行选择(诸如通过在循环基础上,在队列充满度基础上,在优先级基础上等或其任何组合在队列中进行选择)以进行处理。这样的策略通常会寻求在队列和请求之间进行公平仲裁,同时也减少了选择新队列的频率(以及因此加载新模型的频率)。在切换到新队列(例如,其中具有z个未处理的请求)时,模型加载部件3808将与该队列相关联的模型加载到加速部件3810中,然后将队列中的请求提交到加速部件3810以基于加载的新模型来进行处理。

图39是示出了图35的功能解析部件3220的一种操作方式的过程3902。在框3904,功能解析部件3220接收关于要被划分的功能的信息以及关于可用加速部件的信息。在框3906,功能解析部件3220将该功能划分成两个或更多部分,以分配给相应的加速部件。在框3908,功能解析部件3220使用配置部件1006来配置具有框3906中标识的部分(如果尚未配置)的加速部件。在框3910,功能解析部件3220确定数据处理系统102中的条件(和/或功能本身的性质)是否保证对功能进行重新划分。如果是,则过程2802返回框3904。

图40示出了描述在实现多分量服务的加速部件集合内的特定加速部件的操作的过程4002。在框4004,加速部件接收设置信息,其例如通过标识一个或多个上游部件(如果有的话)和一个或多个下游部件(如果有的话)来标识特定加速部件与集合中的其他加速部件的连接。在框4006,特定加速部件从一个或多个上游部件或者请求使用针对多分量服务的请求主机部件接收输入信息。在框4008,特定加速部件执行其指派的操作以生成输出信息。在框4010,特定加速部件将输出信息发送到一个或多个下游部件或请求主机部件。

图41是描述了处理实现多分量服务的加速部件集合中的故障的一种方式的过程4102。在框4104,管理功能122确定加速部件是否出现故障。在框4106,管理功能122使用从备用加速部件池中选择的备用加速部件交换故障的加速部件。备用加速部件可以已经被配置为扮演故障的加速部件的角色,或者可以被配置为以按需方式扮演该角色。

再次参照图1,如上文所描述的,数据处理系统102可以被配置为执行多种服务。深度神经网络(dnn)是可以由数据处理系统102实现的一类服务。已经示出了dnn以在诸如图像和语音识别之类的人类识别任务上实现了最先进的准确度。

dnn可以包括若干个不同的处理“层”,其包括线性层(在本文中还被称为“完全连接层”)和卷积层。卷积层的输出可以用对卷积输出进行子采样的“池化”操作和非线性化步骤(诸如应用于输出的sigmoid或tanh)来处理。

在一个实现方式中,smc128将dnn划分成多个区段,从而将dnn层(例如,一个或多个卷积层)的第一区段映射到一个或多个加速部件,以及将dnn层(例如,完全连接层)的第二区段映射到一个或多个主机部件。

如本文中所使用的,“卷积神经网络”或(cnn)是指包括一个或多个卷积层的神经网络,并且还可以包括在卷积层的一些或全部卷积层之后应用的池化和/或非线性化操作层。

图42是描绘了包括三个3d体积(4204,4206,4208)的三维(3d)cnn4202的简化图。每个3d体积(4204,4206,4208)表示层的输入,并且被变换成馈送后续层的新3d体积。在图42的示例中,存在两个卷积层4210和4212。体积4204(具有3个平面)是卷积层4210的输入,该卷积层4210产生体积4206(具有h个平面),其又是卷积层4212的输入,该卷积层4212生成体积4208(具有k个平面)。

在一个实现方式中,体积4204包括d=3个平面(例如,r、g、b)中的图像数据,其中每个平面包括图像数据(例如,像素数据)的j×j阵列。本领域普通技术人员将理解,可以使用多于或少于三个平面,每个平面不需要包括正方形阵列,并且可以使用除图像数据以外的数据。尺寸为l×l×d的3d输入体积4214与尺寸为l×l×d且步幅为s的h个权重核(例如,权重核4216)执行卷积。每个权重核(例如,权重核4216)跨过输入体积(例如,体积4204)以类似滑动窗口方式(具有由步幅s定义的移位偏移)移位。在每次移位期间,3d权重核中的每个权重与来自输入体积4214的重叠区域的对应的成对输入元素相乘并相加。

例如,图43a至图43d示出了第一体积4302与第一核权重集合4304的示例卷积以生成第二体积4308的第一平面4308x(如图43d所示),并且还示出了第一体积4302与第二核权重集合4306的卷积以生成第二体积4308的第二平面4308y。第一体积4302包括3个平面(4302r、4302g、4302b),其中每个平面包括图像数据的9×9阵列。第一核权重集合4304和第二核权重集合4308中的每个核权重的尺寸为3×3×3。第二体积4308包括h个平面(4308x、4308y,...,4308q),其中每个平面包括数据的4×4阵列。

如图43a所图示的,通过将第一核权重集合4304中的每个权重与来自第一输入体积(4302r0,4302g0,4302b0)的重叠区域的每个成对输入元素相乘来确定第二体积4308的第一平面4308x的数据值x0,如下:

第一核权重集合4304然后滑动第一体积4302的s=2个水平数据值。如图43b所图示的,通过将第一核权重集合4304中的每个权重与来自第二输入体积(4302r1,4302g1,4302b1)的重叠区域的每个成对输入元素相乘来确定第二体积4308的第一平面4308x的数据值x1,如下:

该过程继续,其中第一核权重集合4304每次迭代滑动第一体积4302的s=2个水平值,直到第一平面4308x的第一数据值行(x0,x1,x3,x3)完成为止。第一核权重集合4304然后向下滑动s=2行并且返回第一体积4302的最左列以计算第一平面4308x的第二数据值行(x4,x5,x6,x7)。该过程继续,直到第一平面4308x的全部四个数据值行完成为止。

如图43c所图示的,通过将第二核权重集合4304中的每个权重与来自第五输入体积(4302r4,4302g4,4302b4)的重叠区域的每个成对输入元素相乘来确定第二体积4308的第二平面4308y的数据值y4,如下:

该过程继续,直到第二体积4308的第二平面4308y的全部数据值完成为止,并且还对h权重体积中的每个h权重体积继续生成第二体积4308中的h个平面。再次参考图42,体积4206然后变成卷积层4212的输入层,其包括k个权重体积以生成体积4208的k个平面。

如上文所描述的,dnn通常被组织成交替的卷积和最大池化神经网络层,随后是若干个完全连接层。尽管dnn可以完全以cpu上的软件实现,但是可以在图1的数据处理系统102的一个或多个加速部件中实现一个或多个dnn层。在一个实现方式中,smc128将dnn划分成多个区段,从而将dnn层(例如,一个或多个卷积层)的第一区段映射到一个或多个加速部件,并且将dnn层(例如,完全连接层)的第二区段映射到一个或多个主机部件。

图44示出了加速部件4402上的卷积层的实现方式,其可以在物理上被实现为fpga设备。加速部件4402包括输入缓冲器阵列4404,核权重缓冲器阵列4406,功能单元阵列4408和输出缓冲器阵列4410。加速部件4402执行输入数据的d个平面的输入体积与m个核权重数据weights0、weights1,...,weightsm-1集合的卷积,以生成输出数据的m个平面的输出体积。

输入缓冲器阵列4404包括输入数据缓冲器ipd0、ipd1,...,ipdn-1,其用于分别接收d维输入数据的n个切片slice0、slice1,...,slicen-1。为了简单起见,剩余的讨论将假定d=3。在一个实现方式中,输入数据被分割成输入数据的水平切片,诸如图45中以图形方式图示的水平切片。为了简化附图,图示了输入数据的3d体积的单个输入平面4502。

平面4502是输入数据的17×17阵列(数据值被描绘为符号,而实际输入数据值将通常是数值)。输入平面4502被分割成n=8个切片slice0、slice1,...,slice7,而每个切片包括输入数据的3×3×17阵列(用于3d体积)。在实现方式中,每个切片与先前切片重叠以考虑载玻片s(例如,在该示例中s=2)。再次参考图44,输入数据的三维切片slice0、slice1,...,slicen-1分别从片外存储器(例如,dram)加载到输入数据缓冲器ipd0,ipd1,...,ipdn-1中。本领域普通技术人员将理解,输入平面4502的切片可替代地可以是不重叠的。

核权重缓冲器阵列4406包括m个权重数据缓冲器ibw0,ibw1,...,ibwm-1。在实现方式中,核权重数据weights0、weights1,weightsm-1分别从片外存储器(例如,dram)加载到权重数据缓冲器ibw0、ibw1,...,ibwm-1中。在另一实现方式中,核权重数据weights0、weights1,...,weightsm-1在运行时间分别被存储在权重数据缓冲器ibw0、ibw1,...,ibwm-1中。每个核权重数据weights0,weights1,...,weightsm-1与输出体积中的分离平面相对应,并且具有尺寸l×l×d和步幅s。

功能单元阵列4408包括功能单元fu0,0,、fu0,1,...,fun-1,m-1的n×m阵列。例如,第一列包括功能单元fu0,0、fu1,0,fu2,0,...,fun-1,0,第二列包括功能单元fu0,1、fu1,1,fu2,1,...,fun-1,1,以此类推。列中的功能单元从上到下依次偶联。

输入数据缓冲器ipd0、ipd1,...,ipdn-1中的输入数据被馈送到功能单元阵列4408的对应行中的每个功能单元。即,输入数据缓冲器ipd0中的输入数据被馈送到功能单元fu0,0、fu0,1,...,fu0,m-1中的每个功能单元,输入数据缓冲器中的输入数据被馈送到功能单元fu1,0、fu1,1,...,fu1,m-1,以此类推。

权重数据缓冲器ibw0、ibw1,...,ibwm-1中的核权重被馈送到相应列中的每个功能单元。即,权重数据缓冲器ibw0中的核权重被馈送到功能单元fu0,0、fu1,0,fu2,0,...,fun-1,0中的每个功能单元,权重数据缓冲器ibw1中的核权重被馈送到功能单元fu0,1、fu1,1,fu2,1,...,fun-1,1中的每个功能单元,以此类推。

功能单元fu0,0、fu0,1,...,fun-1,m-1使用来自输入数据缓冲器ipd0,ipd1,...,ipdn-1的输入值和来自权重数据缓冲器ibw0,ibw1,...,ibwm-1的核权重执行卷积操作。同一列中的功能单元对用于输出体积的单个平面的输入数据的切片slice0、slice1,...,slicen-1执行n个并行卷积操作。即,功能单元fu0,0、fu1,0,fu2,0,...,fun-1,0对用于输出体积的第一平面的输出数据的所有n个切片slice0、slice1,...,slicen-1执行卷积操作,功能单元fu0,1、fu1,1,fu2,1,...,fun-1,1对用于输出体积的第二平面的输入数据的所有n个切片slice0、slice1,...,slicen-1执行卷积操作,以此类推。

同一行中的功能单元对用于输出数据的所有m个平面的输入数据的单个切片(slice0,slice1,...,slicen-1)执行m个并行卷积操作。即,功能单元fu0,0、fu0,1,fu0,2,...,fu0,m-1对用于输出体积的所有m个平面的输入数据的切片slice0执行m个卷积操作,功能单元fu1,0、fu1,1,fu1,2,...,fu1,m-1对用于输出体积的所有m个平面的输入数据的切片slice1执行m卷积操作,以此类推。

图46示出了包括乘法器部件4604和加法器部件4606,累积寄存器4608,移位寄存器4610以及多路复用器4612和4614的示例功能单元4602。乘法器部件4604将输入值和权重相乘,并且将结果到加法器4606。累积寄存器4608累积相乘结果,直到终止信号被断言为止。当终止信号被断言时,累积寄存器4608将该累积值提供给移位寄存器4610。移位寄存器4610将累积值移位到功能单元4602下面的邻近功能单元。

诸如功能单元4602之类的每个功能单元通过l×l×d(核体积尺寸)周期累积输入值和权重乘法。终止信号在完成最后乘法之后触发,因为累积寄存器4608此时具有正确的卷积值。随着累积值移动到移位寄存器4610,下一卷积将继续将累积值初始化为0。

再次参照图44,同一列中的每个功能单元的卷积结果值将通过移位寄存器链在垂直方向上逐一移出到对应的输出数据缓冲器ob0、ob1,...,obm-1。因此,每个周期都会发生乘法和累积。

如上文所描述的,功能单元阵列4408包括功能单元fu0,0、fu0,1,...,fun-1,m-1的n×m阵列。在其中加速部件4402在物理上被实现为fpga设备的实现方式中,尺寸n和m在运行时间可以是软件可重配置的。例如,在n=8且m=128的第一实例化中,功能单元阵列4408可以被配置为功能单元的8×128阵列。在n=64且m=16的第二实例化中,功能单元阵列4408可以被配置为功能单元的64×16阵列等等。

在加速部件4402的实现方式中,输入数据被馈送到功能单元阵列4408中的多个功能单元行,并且权重数据被馈送到功能单元阵列4408中的功能单元列。本领域普通技术人员将理解输入数据交替地可以被馈送到功能单元阵列4408中的功能单元列,并且权重数据可以被馈送到功能单元阵列4408中的功能单元行。

在输出体积包括比功能单元的列的可用数目多的平面的实例中,卷积层可以在多个加速部件上实现。例如,如果输出体积包括256个平面,则第一加速部件可以利用具有128个列的功能单元阵列进行配置,其中这些列用核权重数据weights0、weights1,...,weights127进行馈送;并且第二加速部件可以利用具有128个列的功能单元阵列进行配置,其中这些列用核权重数据weights128、weights129,...,weights255进行馈送。在这样的实现方式中,核权重数据在运行时间被存储在每个加速部件的权重数据缓冲器ibw0、ibw1,...,ibwm-1中,从而不需要从外部dram加载核权重数据。

可替代地,卷积层可以在单个加速部件上实现,并且功能单元阵列可以运行多次迭代,从而在每次迭代中加载新核权重。因此,如果输出体积包括256个平面,则加速部件可以被配置有具有128个列的功能单元阵列,这些列在第一次迭代中被馈送有核权重数据weights0、weights1,...,weights127,并且在第二次迭代中被馈送有核权重数据weights128、weights129,...,weights255。

图47示出了包括加速部件4702上的多个卷积层的cnn的实现方式,其可以在物理上被实现为fpga设备。加速部件4702包括输入双缓冲器阵列4704,核权重缓冲器阵列4406,功能单元阵列4408,输出缓冲器阵列4410,控制器部件4706以及fifo阵列和环仲裁器4708。输入双缓冲器阵列4704包括两个输入数据缓冲器ipd0、ipd1,...,ipdn-1的集合,其用于分别接收d维输入数据的n个切片slice0、slice1,...,slicen-1。为了简单起见,剩余的讨论将假设d=3。本领域普通技术人员将理解,核权重缓冲器阵列4406还可以包括双缓冲器阵列。

加速部件4702实现多个卷积层,其中一个卷积层的输出从输出缓冲器阵列4410反馈到输入双缓冲器阵列4404,以向下一连续卷积层提供输入。在不想要受到任何特定理论的束缚的情况下,可以相信当计算中间输出特征层以及横跨层时,该cnn实现方式可以减少去往和来自片外dram的冗余数据传送。

图48是示出了图47的加速部件4702的一种操作方式的过程4802。在步骤4804,控制器部件4706从片外dram检索输入数据,并且将输入数据加载到第一输入数据缓冲器ipd0、ipd1,...,ipdn-1的集合中。在实现方式中,控制器部件4706从片外dram检索输入数据,将输入数据分割成n个切片slice0、slice1,...,slicen-1,并且将输入数据的n个切片加载到第一输入数据缓冲器ipd0、ipd1,...,ipdn-1的集合中。

在步骤4806,控制器部件4706从片外dram中检索用于第一卷积层的第一核权重集合,并且将第一权重数据集合加载到权重数据缓冲器ibw0、ibw1,...,ibwm-1中。在步骤4808,输入数据的n个切片slice0、slice1,...,slicen-1和m个核权重数据weights0,weights1,...,weightsm-1被加载到功能单元阵列4408中。

在步骤4810,功能单元阵列4408执行卷积操作并且将卷积结果输出到输出数据缓冲器ob0、ob1,...,obm-1。在步骤4812,卷积结果从输出缓冲器ob0、ob1,...,obm-1移位到fifo阵列和环仲裁器4708。

在步骤4814,控制器4706确定是否要处理任何附加卷积层。如果否,则过程4802结束。如果是,则在步骤4816,fifo阵列和环仲裁器4708将输出结果反馈到下一个(例如,第二)输入缓冲器ipd0、ipd1,...,ipdn-1的集合。在步骤4806,控制器部件4706从dram中检索下一(例如,第二)卷积层的下一核权重集合,其使用先前(例如,第一)卷积层的输出作为输入。

再次参照图47,加速部件4702不包括功能单元,其被配置为对卷积层输出应用非线性函数和池化操作。如果需要这样的操作,则卷积输出可以被写回片外存储器,并且主机部件上的cpu可以对卷积输出应用非线性函数和池化操作。控制器部件4706从片外dram检索经处理的数据,并且将经处理的数据作为输入数据加载到输入数据缓冲器ipd0、ipd1,...,ipdn-1中用于下一卷积操作。

图49示出了包括多个卷积层(加速部件4902上的池化和非线性操作)的cnn的实现方式,该加速部件4902可以在物理上被实现为fpga设备。如在图47的加速部件4702中一样,加速部件4902包括输入双缓冲器阵列4404,核权重缓冲器阵列4406,功能单元阵列4408,输出缓冲器阵列4410,控制器部件4904以及fifo阵列和环仲裁器4708,并且针对加速部件4702执行如上文所描述的卷积操作。

为了避免需要将卷积输出数据传送到cpu用于执行诸如偏置偏移,非线性函数和池化操作之类的操作,加速部件4902包括偏置阵列4906,非线性函数阵列4908,池化阵列4910和池化控制器部件4912,用于在加速部件4902上执行这些操作。

特别地,输出数据缓冲器ob0、ob1,...,obm-1中的卷积输出是偏置阵列4906的输入,其包括偏置部件,其被配置为将对应的偏置值+b0、+b1、+b2,...,+bm-1添加到分别被存储在输出数据缓冲器ob0,ob1,...,obm-1中的卷积结果。在实现方式中,控制器部件4904可以从dram一次加载用于所有卷积层的偏置值+b0、+b1、+b2,...,+bm-1,或者可以加载用于每个卷积层的偏差值+b0、+b1、+b2,...,+bm-1的新集合。

非线性函数阵列4908包括非线性函数分量fn0、fn1、fn2,...,fnm-1,其被配置为将非线性函数(例如,sigmoid、tanh等)应用于偏置分量+b0,+b1,+b2,...,+bm-1的输出。

池化阵列4910包括池化分量mp0,mp1,mp2,...,mpm-1,其对非线性函数分量fn0、fn1,fn2,...,fnm-1的输出执行池化操作。具体地,池化控制器4912从输出数据缓冲器ob0、ob1,...,obm-1中选择矩形块,并且对每个块进行子采样以从该块产生单个输出。存在几种进行这种池化的方式,诸如取平均值或最大值,或者块中的神经元的学习线性组合。

在不想要被任何特定理论束缚的情况下,可以相信当计算中间输出特征层时,该cnn操作可以减少去往和来自dram的冗余数据传送。具体地,如上文所描述的,因为一个卷积层的输出被作为输入反馈到下一卷积层,所以中间卷积层的输出数据不需要从加速部件4702传送到dram,并且到中间卷积层的输入不需要从dram传送到加速部件4702。就这点而言,在不想要被任何特定理论束缚的情况下,可以相信加速部件4702可以减少实现cnn所需的存储器带宽要求。

在上文所描述的加速部件4402,4702和4902中的每个加速部件中,输入数据和权重数据从片外dram加载到输入数据缓冲器ipd0,ipd1,...,ipdn-1和权重数据缓冲器ibw0、ibw1,...,bwm-1中。在实现方式中,当数据从主机部件转发到加速部件(例如,经由pcie接口)时,数据交织以软件执行。

数据交织是将数据字调度到dram字上的时隙中的操作,这些数据字直接映射到加速部件的对应输入缓冲器(数据和权重)中。在实现方式中,在dram获取操作期间在硬件级处使用具有数据字宽度转换能力的fifo。fifo将dram数据宽度转换为输入缓冲器阵列的正确宽度。

例如,如果dram字宽是1024比特,则每个输入数据字是16比特,并且存在8-输入数据缓冲器(ipd0、ipd1,...,ipd7和权重数据缓冲器ibw0、ibw1,...,ibw7),每个dram字可以存储64-数据字(1024/16)。64-数据字将在每个dram字中进行调度,以使当硬件fifo将dram字从1024比特转换为128比特时,每个数据字可以直接馈送到对应的输入缓冲器中。这允许在不需要交叉开关的情况下转发数据以指导数据,并且还允许在每个输入数据缓冲器(ipd0、ipd1,...,ipd7和权重数据缓冲器ibw0、ibw1,...,ibw7)中并行存储值。

如上文所描述的,dnn可以包括若干个不同的处理层,其包括卷积层和线性层。在实现方式中,smc128(图1)将dnn划分成多个区段,从而将dnn层(例如,一个或多个卷积层)的第一区段映射到一个或多个加速部件,并且将dnn层(例如,完全连接层)的第二区段映射到一个或多个主机部件。

图50是图形地描绘包括三个卷积层(5004,5006,5008)和两个线性层(5010,5012)的示例dnn5002的框图。在实现方式中,smc128将dnn5002划分成多个区段(例如,两个区段),从而将dnn5002的第一数目的层映射到主机部件,并且将dnn5002的第二数目的层映射到加速部件上。在实现方式中,smc128将dnn5002划分成单个服务器部件上的主机部件和加速部件。在另一实现方式中,smc128将dnn5002划分成多个服务器部件上的主机部件和加速部件。

图51示出了服务器单元部件5102的实现方式,该服务器单元部件5102包括被配置为实现dnn(诸如图50的dnn5002)的主机部件5104和加速部件5106。主机部件5104和加速部件5106经由本地链路5108(例如,pcie链路)耦合。主机部件5104包括耦合到存储器5114(例如,dram)的一个或多个cpu(5110,5112,...)。加速部件5106耦合到片外存储器5116,诸如dimms。

存储器5114具有第一存储器带宽,并且存储器5116具有第二存储器带宽,并且第二带宽通常低于第一存储器带宽。例如,第一存储器带宽可以是大约100gb/秒,并且第二存储器带宽可以是大约20gb/秒,尽管还可以使用其他存储器带宽值。

在实现方式中,服务器单元部件5102被配置为实现dnn,诸如图50的dnn5002。特别地,服务器单元部件5102被配置为在主机部件5104的cpu(5110,5112,...)上实现dnn5002的第一数目的层,并且在加速部件5106上实现dnn5002的第二数目的层。

在实现方式中,线性层(5010,5012)在主机部件5104上进行实现,并且卷积层(5004,5006,5008)在加速部件5106上进行实现。在实现方式中,卷积层(5004,5006,5008)使用上文结合图47和图49所描述的反馈技术在加速部件5106上进行实现。

如上文所描述的,存储器5114通常具有比存储器5116更高的存储器带宽。因此,在实现方式中,smc128将dnn(例如,dnn5002)划分成两个区段,从而将具有较高的存储器带宽要求的dnn的第一数目的层(例如,线性层(5010,5012))映射到主机部件(例如,主机部件5104)并且将具有较低存储器带宽要求的dnn的第二数目的层(例如,卷积层(5004,5006,5008))映射到加速部件(例如,加速部件5106)上。

图52是示出了smc128在服务器单元部件上实现dnn的一种操作方式的过程5202。在步骤5204,smc128接收dnn配置和层信息。在步骤5206,smc128将接收的dnn5002划分成多个区段(例如,两个区段)。例如,smc128可以将接收到的dnn划分成包含具有较高存储器带宽要求的层(例如,线性层)的第一区段和包含具有较低存储器带宽要求的层(例如,卷积层)的第二区段。在步骤5208,smc128配置主机部件以在第一区段中实现层。在步骤5210,smc128配置加速部件以在第二区段中实现层。

在不想被任何具体理论约束的情况下,可以相信与在主机部件上完全实现dnn或在加速部件上完全实现dnn相比,将dnn划分成更高的存储器带宽层(例如,线性层)和更低的存储器带宽层(例如,卷积层),并且使用上文所描述的cnn加速技术将更高的存储器带宽层分配给主机部件以及将较低的存储器带宽层分配给加速部件可以更高效地实现dnn。

另外,在不想要受到任何特定理论束缚的情况下,可以相信在主机-fpga之间拆分cnn和dnn可以减少cpu高速缓存未命中,并且可以加速非线性层的执行。此外,cpu通常具有更大的高速缓存,从而使其更适合具有非常大数目的权重(量级为几十到几百兆字节)的线性层。

技术的图示的方面

以下发明内容提供了本文中所阐述的技术的图示的方面的非穷尽性列表。

根据第一方面,提供了一种用于实现卷积神经网络的硬件加速部件。该硬件加速部件被配置为接收输入数据和权重数据,并且被配置为生成m个输出数据平面。硬件加速部件包括n个功能单元行和m个功能单元列的阵列;n个输入数据缓冲器的阵列,其被配置为存储输入数据;以及m个权重数据缓冲器的阵列,其被配置为存储权重数据。n个输入数据缓冲器中的每个输入数据缓冲器耦合到n个功能单元行中对应的功能单元行。m个权重数据缓冲器中的每个权重数据缓冲器耦合到m个功能单元列中对应的功能单元列。功能单元行中的每个功能单元被配置为从耦合到该行的输入数据缓冲器接收相同的输入数据集合。功能单元列中的每个功能单元被配置为从耦合到该行的权重数据缓冲器接收相同的权重数据集合。功能单元中的每个功能单元被配置为对所接收的输入数据和所接收的权重数据执行卷积,并且m个功能单元列被配置为提供m个输出数据平面。

根据第二方面,输入数据包括数据的三维体积。

根据第三方面,输入数据包括图像数据。

根据第四方面,输入数据被分割成n个切片,n个切片中的每个切片包括数据的三维体积,并且n个切片中的每个切片被存储在n个输入数据缓冲器中对应的输入数据缓冲器中。

根据第五方面,权重数据包括核权重的三维体积。

根据第六方面,功能单元中的每个功能单元包括乘法器部件、加法器部件、累积寄存器和移位寄存器。

根据第七方面,硬件加速部件包括以下一项或多项:现场可编程门阵列器件、大规模并行处理器阵列器件、图形处理单元和专用集成电路。

根据第八方面,硬件加速部件耦合到数据中心服务器部件。

根据第九方面,提供了一种用于实现多层卷积神经网络的硬件加速部件。该硬件加速部件被配置为接收输入数据和权重数据,并且包括功能单元行和功能单元列的可重新配置阵列;第一输入数据缓冲器的阵列,其被配置为存储输入数据,其中第一输入数据缓冲器中的每个第一输入数据缓冲器耦合到功能单元行中对应的功能单元行;权重数据缓冲器的阵列,其被配置为存储权重数据,其中权重数据缓冲器中的每个权重数据缓冲器耦合到功能单元列中对应的功能单元列;输出数据缓冲器的阵列,其中输出数据缓冲器中的每个输出数据缓冲器耦合到功能单元列中对应的功能单元列;以及第二输入数据缓冲器的阵列,其耦合到输出数据缓冲器,其中第二输入数据缓冲器中的每个第二输入数据缓冲器耦合到功能单元行中对应的功能单元行。功能单元行中的每个功能单元被配置为从耦合到该行的第一输入数据缓冲器或第二输入数据缓冲器接收相同的输入数据集合。功能单元列中的每个功能单元被配置为从耦合到该行的权重数据缓冲器接收相同的权重数据集合。功能单元中的每个功能单元被配置为对所接收的输入数据和所接收的权重数据执行卷积。

根据第十方面,功能单元列向输出数据缓冲器提供用于第一卷积层的输出数据的对应平面。

根据第十一方面,用于第一卷积层的输出数据通过第二输入数据缓冲器阵列作为输入数据被反馈到第二卷积层。

根据第十二方面,硬件加速部件还包括偏置部件的阵列,其耦合到输出数据缓冲器的阵列,其中偏置部件中的每个偏置部件被配置为将对应的偏置值添加到输出数据缓冲器中对应的输出数据缓冲器中的输出数据;非线性功能部件的阵列,其耦合到偏置部件的阵列,其中非线性功能部件中的每个非线性功能部件被配置为将对应的非线性功能应用于偏置部件中对应的偏置部件中的数据;以及池化部件的阵列,其耦合到输出数据缓冲器的阵列和非线性功能部件的阵列,其中池化部件中的每个池化部件被配置为对非线性功能部件中的数据进行子采样。

根据第十三方面,输入数据包括数据的三维体积。

根据第十四方面,输入数据包括图像数据。

根据第十五方面,输入数据被分割成切片,切片中的每个都包括数据的三维体积,并且切片中的每个切片被存储在第一输入数据缓冲器集合中对应的输入数据缓冲器中。

根据第十六方面,权重数据包括核权重的三维体积。

根据第十七方面,硬件加速部件包括以下一项或多项:现场可编程门阵列器件、大规模并行处理器阵列器件、图形处理单元和专用集成电路。

根据第十八方面,硬件加速部件被耦合到数据中心服务器部件。

根据第十九方面,提供了一种用于实现多层卷积神经网络的方法。该方法包括:提供可重新配置的硬件加速部件,其包括功能单元行和列的阵列,功能单元中的每个功能单元被配置为执行卷积操作;将输入数据分割成多个输入数据切片;向对应的功能单元行中的功能单元中的每个功能单元提供输入数据切片中的每个输入数据切片;接收多个权重数据核,每个权重数据核包括权重数据;向对应的功能单元列中的功能单元中的每个功能单元提供权重数据核中的每个权重数据核,其中功能单元列向输出数据缓冲器提供用于第一卷积层的输出数据的对应平面,以及将用于第一卷积层的输出数据作为输入数据反馈到第二卷积层。

根据第二十方面,该方法包括:将硬件加速部件耦合到数据中心服务器部件。

尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应该理解,在所附权利要求中定义的主题不一定限于上文所描述的特定特征或动作。相反,上文所描述的具体特征和动作被公开为实现权利要求的示例形式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1