首页> 中国专利> 用于动态可编程分配方案的带交叉开关的高带宽存储系统

用于动态可编程分配方案的带交叉开关的高带宽存储系统

摘要

公开了用于动态可编程分配方案的带交叉开关的高带宽存储系统。系统包括耦合到多个存储器单元的处理器。多个存储器单元中的每一个包括请求处理单元和多个存储体。每个请求处理单元包括多个分解单元和交叉开关,交叉开关将多个分解单元中的每一个通信连接到多个存储体中的每一个。处理器包括多个处理元件和将多个处理元件通信连接到多个存储器单元的通信网络。多个处理元件中的至少第一处理元件包括控制逻辑单元和矩阵计算引擎。控制逻辑单元被配置为使用动态可编程分配方案来访问多个存储器单元。

著录项

说明书

发明背景

使用神经网络可以解决一整类复杂的人工智能问题。由于这些问题通常是计算和数据密集型的,硬件解决方案通常有利于提高神经网络的性能。由于这些解决方案通常需要处理大量数据,因此基于存储器的操作的性能至关重要。在实现存储器访问性能和效率要求的同时,创建一个求解神经网络的硬件平台是一项技术挑战。因此,需要一种硬件平台,其具有能够有效执行神经网络处理所需的存储器操作的存储器访问和布局方案。

附图简述

在以下的详细描述和附图中公开了本发明的各种实施例。

图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。

图2是示出使用神经网络解决人工智能问题的系统的实施例的框图。

图3是示出使用神经网络解决人工智能问题的处理元件的实施例的框图。

图4是示出用于执行存储器访问的过程的实施例的流程图。

图5是示出用于响应存储器数据请求的过程的实施例的流程图。

图6是示出用于响应部分存储器数据请求的过程的实施例的流程图。

图7是示出用于执行存储器访问的过程的实施例的流程图。

详细描述

本发明可以以多种方式实现,包括作为过程;装置;系统;物质的组成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,例如被配置为执行存储在耦合到处理器的存储器上和/或由该存储器提供的指令的处理器。在本说明书中,这些实现或者本发明可以采取的任何其他形式可以被称为技术。通常,在本发明的范围内,可以改变所公开的过程的步骤顺序。除非另有说明,否则被描述为被配置为执行任务的诸如处理器或存储器的组件可以被实现为在给定时间被临时配置为执行任务的通用组件或者被制造为执行任务的特定组件。如本文所使用的,术语“处理器”指的是被配置成处理数据(例如计算机程序指令)的一个或更多个设备、电路和/或处理核心。

下面提供了本发明的一个或更多个实施例的详细描述连同说明本发明原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改和等同物。为了提供对本发明的全面理解,在以下描述中阐述了许多具体细节。这些细节是出于示例的目的而提供的,并且本发明可以根据权利要求来被实施,而不需要这些具体细节中的一些或全部。为了清楚起见,没有详细描述与本发明相关的技术领域中已知的技术材料,以便不会不必要地模糊本发明。

公开了一种高带宽存储系统(memory system)。处理器系统的存储器单元围绕处理组件布置,并且每个存储器单元能够并行接收和处理来自处理组件的多个请求。在一些实施例中,处理组件被布置在相对于多个存储器单元的中央位置,多个存储器单元可以包括独立的北、东、南和西存储器单元,每个存储器单元经由多个网络连接通信地连接到处理组件。处理组件可以是具有多个处理元件的处理器,其中每个处理元件包括其自己的控制逻辑和矩阵计算引擎。通过应用神经网络来解决复杂的人工智能问题,处理器的处理元件可以并行一起工作。处理元件是所公开的高带宽存储系统的一部分,用于在存储器和处理组件之间有效地传输数据。存储器请求源自处理组件,例如来自一个或更多个处理元件,到达存储器单元。在一些实施例中,每个存储器单元包括用于存储数据的多个存储体,例如4、8、16、32或另一适当数量的存储体。存储器请求由存储在存储器单元的存储体中的数据服务。

在一些实施例中,每个存储器请求被广播到所有存储器单元,并且每个存储器单元仅响应于其负责的请求部分。例如,覆盖连续地址范围的数据可以以访问单位大小组分布在存储器单元上,并且每个存储器单元仅响应存储在其存储体中的部分。存储器请求可以经由到处理组件的多个网络连接之一到达每个存储器单元。例如,处理组件可以包括通过二维网络子系统连接的处理元件的二维阵列。在一些实施例中,网络子系统的每一行和每一列通过网络连接通信连接到至少一个存储器单元。例如,处理元件的8×8网格或阵列包括到处理组件的北、东、南和西侧的四个存储器单元中的每一个的八个网络连接。通过具有多个网络连接,每个存储器单元可以并行处理来自不同处理元件的多个存储器请求。例如,存储器单元可以并行对来自一个存储体的一个请求和来自另一个存储体的另一个请求进行服务。在一些实施例中,存储器单元包括用于接收存储器请求的请求处理单元。每个请求处理单元包括一组分解单元,用于将存储器请求分解成部分请求。请求处理单元确定哪些部分请求可以从存储器单元得到服务,并且只继续处理与存储器单元匹配的部分请求。在一些实施例中,交叉开关(crossbar switch)连接到分解单元,以将匹配的部分存储器请求路由到适当的存储体。在存储器单元的任何网络连接上接收的存储器请求可以通过交叉开关路由到适当的存储体。交叉开关允许每个网络连接访问存储器单元的任何存储体。在一些实施例中,交叉开关允许在存储器单元的多个网络连接处接收的请求并行访问不同的存储体,这显著增加了最大存储器带宽并提高了存储器性能。

在一些实施例中,处理组件的每个处理元件可以配置有分配方案,以将数据分散在可用的存储器单元中。分配方案是动态可编程的,使得不同的处理元件可以应用相同或不同的分配方案。例如,在各种实施例中,可以使用处理器指令对每个处理元件进行编程,以动态配置该处理元件的分配方案。在各种实施例中,共享相同工作负荷的处理元件可以被编程地配置成利用相同的分配方案,而具有不同工作负荷的处理元件可以被编程地配置成利用不同的分配方案。不同的分配方案有助于防止多个处理元件彼此步调一致地工作。通过改变分配方案,可以更有效地利用存储器单元,并提高存储器性能。在一些实施例中,存储器单元访问单位(access unit)的大小也是可配置的。例如,存储器单元访问单位的大小可以通过处理器指令以编程方式配置。每个处理元件可以使用可配置的访问单位大小的组(access unit-sized group)对每个存储器单元读取和/或写入数据。此外,存储器访问操作可以跨越多个访问单位,并且引用分配在多个存储器单元中的数据。在各种实施例中,每个存储器访问请求被广播到所有存储器单元,并且每个存储器单元返回部分响应,这些部分响应被组合以实现广播的请求。

在一些实施例中,处理器系统包括耦合到多个存储器单元的处理器。例如,一个处理器或处理组件在四侧被存储器单元包围,并且与每个存储器单元有多个网络连接。多个存储器单元中的每一个包括请求处理单元和多个存储体。例如,每个存储器单元可以包括4个、8个、16个或其他适当数量的用于存储数据的存储体。每个请求处理单元包括多个分解单元和交叉开关,交叉开关将多个分解单元中的每一个通信连接到多个存储体中的每一个。例如,用于分解或展开存储器访问请求的分解单元通过交叉开关可通信地连接到存储器单元的每个存储体。在一些实施例中,处理器包括多个处理元件和将多个处理元件通信连接到多个存储器单元的通信网络。例如,处理元件阵列通过片上网络通信子系统连接到存储器单元。多个处理元件中的至少第一处理元件包括控制逻辑单元和矩阵计算引擎,并且控制逻辑单元被配置为使用动态可编程分配方案来访问多个存储器单元。例如,用于执行矩阵计算操作的处理元件可以使用可以动态配置的分配方案来访问分配在存储器单元上的数据。在一些实施例中,分配方案由每个处理元件的控制逻辑单元通过处理器指令和/或编程来配置。

在一些实施例中,处理器系统包括多个(a plurality of)存储器单元和耦合到多个存储器单元的处理器。例如,处理器系统包括通信连接到多个存储器单元的处理器。在一些实施例中,存储器单元被布置在处理器的所有侧面上,以帮助最小化从处理器到每个存储器单元的等待时间。多个存储器单元中的每一个包括请求处理单元和多个存储体。例如,请求处理单元接收存储器访问请求,例如读取请求和/或写入请求,并确定是否以及如何处理这些请求。请求处理单元可以确定存储器访问请求的一部分是否可以由存储器单元及其对应的存储体服务。例如,请求处理单元可以将存储器访问请求分解成部分请求,并确定部分请求的哪个子集可以从存储器单元的相应存储体得到服务。在各种实施例中,每个存储器单元可以包括多个存储体,以增加存储器单元的存储容量。例如,存储器单元可以包括4、8、16、32或其他适当数量的存储体。在一些实施例中,处理器包括多个处理元件。例如,处理器是包括一组处理元件的处理组件。处理元件可以排列成矩阵,例如处理元件的8×8网格或阵列。处理器还包括将多个处理元件通信连接到多个存储器单元的通信网络。例如,诸如片上网络子系统和/或网络接口/总线的通信网络将每个处理元件通信连接到每个存储器单元。在一些实施例中,多个处理元件中的每个处理元件包括控制逻辑单元和矩阵计算引擎。例如,多个处理元件中的第一处理元件包括用于控制第一处理元件的控制逻辑和用于计算矩阵运算的矩阵计算引擎。控制逻辑被配置为使用动态可编程分配方案访问来自多个存储器单元的数据。例如,控制逻辑使用处理器指令来配置,以利用特定的分配方案或模式。该方案可以基于处理元件工作负荷或另一种适当的配置。分配方案确定处理元件专用的存储器地址到存储器单元的存储位置的映射。

图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。在所示的示例中,系统100是包括处理组件101和存储器单元111、121、131和141的硬件平台。存储器单元111、121、131和141中每一个分别包括请求处理单元113、123、133和143之一。处理组件101通信连接到存储器单元111、121、131和141。处理组件101连接到存储器单元111、121、131和141中的每一个,并且可以同时与它们通信。在一些实施例中,每个存储器单元111、121、131和141经由多个网络连接(描绘为存储器单元111、121、131和141与处理组件101之间的粗箭头)连接到处理组件101。存储器单元111、121、131和141被定位在处理组件101周围,但是其他布局也是合适的。通过将存储器单元111、121、131和141定位在处理组件101周围,存储器单元111、121、131和141可以被处理组件101同时访问和/或多个连接可以被处理组件101用来与不同的存储器单元111、121、131和141并行通信。在所示的示例中,系统100包括围绕处理组件的四个存储器单元,但是可以适当地使用更少或更多的存储器单元。

在一些实施例中,处理组件101是包括一个或更多个处理元件(未示出)的处理器。每个处理元件可以至少包括用于执行矩阵运算的矩阵计算引擎。处理元件还可以使用通信网络和/或总线(例如片上网络子系统)进行通信连接。在一些实施例中,处理元件以二维阵列排列,并且网络子系统是连接处理元件的二维通信网络。用于执行神经网络运算的数据可以从诸如位于处理组件101周围的存储器单元111、121、131和141的存储器单元中检索并写入其中。例如,使用片上网络子系统,存储器访问操作可以从处理组件101的处理元件指向存储器,存储器包括存储器单元111、121、131和141。在一些实施例中,每个处理元件可以被分配特定的工作负荷,并且每个工作负荷可以与存储在存储器中的特定数据集相关联。例如,工作负荷的数据集可以包括激活和/或滤波矩阵数据。在各种实施例中,数据与大型神经网络矩阵相关联,并且可以包括数百个或更多个矩阵元素。相关数据可以跨存储器单元111、121、131和141的不同区域存储。在一些实施例中,数据存储在基于动态可编程分配方案分配在存储器单元111、121、131和141上的访问单位大小的组中。

在一些实施例中,数据可以根据工作负荷或另一个适当的标识符来访问。例如,工作负荷标识符可用于确定如何在不同的可用存储器单元之间分配和检索数据。在各种实施例中,不同的工作负荷被编程为使用不同的分配方案在可用的存储器单元之间分配它们相应的工作负荷数据。例如,每个工作负荷可被动态编程为使用不同的分配方案。在各种实施例中,分配方案使用可配置的有序模式来访问存储器单元。可以对处理元件进行动态编程,来以不同于其他处理元件的方式分配数据,而不是对所有工作负荷使用预定义的分配。这允许存储器单元的更好的利用和效率。在各种实施例中,与存储器访问操作相关联的数据可以驻留在一个或更多个不同的存储器单元中。例如,存储器读取请求可以由位于存储器单元111、121和131中的数据来服务。不同的存储器请求可以由存储器单元121、131和141中的数据来服务。在一些实施例中,诸如可编程散列函数的散列函数用于确定特定工作负荷或标识符的存储器布局方案或访问顺序模式。例如,一个处理元件的存储器读取请求可以使用重复有序模式来访问存储器单元,该有序模式从存储器单元111开始,接着是存储器单元121、存储器单元131和存储器单元141。不同处理元件的存储器读取请求可以使用不同的可编程重复有序模式,该有序模式从存储器单元141开始,接着是存储器单元121、存储器单元131和存储器单元111。由于数据分配在不同的存储器单元上,存储器请求可以触发来自不同存储器单元的一个或更多个部分响应,每个存储器单元对存储器请求的一部分进行响应。一旦处理元件接收到所有的部分响应,存储器请求就完成了。

在一些实施例中,存储器单元111、121、131和141各自分别包括请求处理单元113、123、133和143之一,以处理存储器访问操作。诸如写入或读取存储器访问操作之类的存储器访问操作可以被分成多个部分访问请求。在一些实施例中,存储器访问操作被一个或更多个请求处理单元(例如请求处理单元113、123、133和/或143)分解或展开成一个或更多个部分访问请求。例如,连接到存储器单元的每个网络连接的分解单元(未示出)可以分解每个传入的存储器访问请求。基于所请求的存储器范围,请求处理单元确定其相关联的存储器单元是否包含所请求的数据。例如,在一些实施例中,存储器请求被广播到所有存储器单元,并由每个存储器单元的相应请求处理单元进行处理。每个请求处理单元分析该请求,并且不同的请求处理单元响应存储器请求的不同部分。例如,请求处理单元仅响应对与其存储器单元相关联的数据或存储器地址的请求。请求处理单元113响应与存储器单元111相关联的请求,请求处理单元123响应与存储器单元121相关联的请求,请求处理单元133响应与存储器单元131相关联的请求,并且请求处理单元143响应与存储器单元141相关联的请求。在存储器访问请求可由特定存储器单元服务的情况下,相关联的请求处理单元可从相关联的存储器单元检索相关数据(或将相关数据写入相关联的存储器单元)。不能由特定存储器单元服务的存储器访问请求可以被忽略,并将由相应的适当存储器单元处理。在一些实施例中,每个存储器单元包含多个存储体,并且请求处理单元可以经由交叉开关(未示出)将部分存储器访问请求导向存储器单元的适当存储体。交叉开关可以提供不同网络连接和存储器单元的不同存储体之间的完全连接。

在一些实施例中,每个存储器单元使用的数据访问单位的大小是可编程的。例如,存储器单元可以被编程为使用128字节或另一个适当大小的访问单位,使得每一个128字节(或另一个适当的访问单位大小)的新组基于可编程分配方案被存储在不同的存储器单元上。这允许使用可编程大小的访问单位跨不同的存储器单元写入数据。例如,第一访问单位的数据被写入第一存储器单元,第二访问单位的数据被写入第二存储器单元,以此类推,这由分配方案的排序来确定。一旦所有存储器单元都被利用,下一个存储器单元就循环回到第一个存储器单元。在各种实施例中,存储器单元的顺序也可以是可编程的,并且可以使用散列函数来确定。例如,基于散列函数的结果,每个工作负荷可以利用不同的分配顺序来访问存储器单元。

图2是示出使用神经网络解决人工智能问题的系统的实施例的框图。在所示的示例中,系统200是包括处理组件201和存储器单元211、221和241的硬件平台的部分描述。附加的存储器单元可以被包括,但未显示。例如,在一些实施例中,第四存储器单元未在图2中示出,但是位于处理组件201的南侧。每个存储器单元包括请求处理单元和多个存储体。例如,存储器单元211包括请求处理单元213和存储体,例如存储体221、223、225和227。每个存储器单元,例如存储器单元211,可以配置有比所示更多(或更少)的存储体。存储器单元221和241用虚线表示。它们的内部组件未示出,但类似于存储器单元211。类似地,硬件系统中可包含附加组件,但未显示附加组件。在一些实施例中,处理组件201是图1的处理组件101,存储器单元211是图1的存储器单元111、121、131或141。在一些实施例中,存储器单元221是图1的存储器单元121,存储器单元241是图1的存储器单元141。在各种实施例中,针对处理组件201和存储器单元211描述的功能适用于连接到处理组件201的其他存储器单元,包括存储器单元221、241和/或图2中未示出的存储器单元。

在一些实施例中,处理组件201是包括诸如处理元件251、253、255和257的多个处理元件的处理器。附加的处理元件用虚线示出,以反映包括以与处理元件251、253、255和257类似的方式运行的附加处理元件。在图2的图中,仅示出了处理组件201的一部分。处理组件201包括片上网络子系统203,其网络连接231、233、235和237将处理组件201的处理元件通信连接到存储器单元211。片上网络子系统203是将包括处理元件251、253、255和257在内的处理元件彼此通信连接的通信网络和/或通信总线。片上网络子系统203可用于处理元件相互通信和/或通过网络连接231、233、235和237与诸如存储器单元211的存储器单元通信。网络连接231、233、235和237将处理组件201连接到处理组件201北侧的存储器单元211。例如,处理组件201的处理元件251可以经由片上网络子系统203和网络连接231与存储器单元211接口连接,以对存储器读取和/或写入数据。在各种实施例中,处理组件201东侧的网络连接(未标记)将处理组件201连接到存储器单元221,而处理组件201西侧的网络连接(未标记)将处理组件201连接到存储器单元241。可以包括附加的网络连接(未示出),以将处理组件201连接到放置在处理组件201南侧的存储器单元。图2的示例集中在处理组件201和单个存储器单元(存储器单元211)之间的接口,但是所公开的技术也适用于其他存储器单元。

在一些实施例中,存储器单元211包括请求处理单元213和多个存储体,例如存储体221、223、225和227。请求处理单元213从处理组件201的处理元件接收存储器访问请求。存储器访问请求可以是读取请求和/或写入请求。请求处理单元213分解存储器访问请求,以确定它是否可以被存储器单元211的存储体之一服务,可能是部分服务。尽管图2中示出了四个存储体,但是在各种实施例中,存储器单元211可以包括更少或更多的存储体,例如8、16、32、64或其他适当数量的存储体。在一些实施例中,请求处理单元213将存储器访问请求导向存储器单元211的适当存储体。例如,基于请求的存储器地址,请求处理单元213确定要访问的适当的存储体。在一些实施例中,对于单个存储器访问请求,可以访问存储器单元211的两个或更多个存储体。可以基于散列函数来确定存储器单元和存储体。例如,散列函数可以利用处理元件的工作负荷标识符,基于处理元件的工作负荷在存储器单元和存储体之间分配数据。在一些实施例中,散列函数检查与存储器访问请求相关联的存储器地址的一组位,例如两位或更多位。在各种实施例中,请求处理单元213包括交叉开关(未示出),以将网络连接231、233、235和237连接到存储体221、223、225和227。

在一些实施例中,存储器读取/写入大小,例如存储器访问单位的大小,可以是可编程的。例如,存储器读取可以被编程为64字节、128字节或其他适当的访问单位大小。请求处理单元213可以通过分析每个传入的存储器访问请求来确定要读取和/或写入的适当字节。在存储器单元(例如存储器单元211)可以对请求进行服务的情况下,存储器请求响应将被返回给处理组件201和适当的请求处理元件。在一些实施例中,请求处理单元213准备响应。例如,准备的响应可以包括从存储体读取的数据。该响应可以是仅满足原始存储器访问请求的一部分的部分响应。负责管理相应存储器地址范围的其它存储器单元,例如存储器单元221和241,和/或另一个存储器单元或未示出的存储器单元,可以实现附加的部分响应。例如,广播到所有存储器单元的大存储器读取请求可以由多个存储器单元提供的多个部分响应来实现。在一些实施例中,每个部分响应包括可用于对部分响应排序的标识符,例如序列标识符。例如,可能没有按顺序接收部分响应,并且使用标识符对部分响应进行排序,并从多个部分响应构建完整响应。例如,在一些实施例中,分配足够大以存储完整响应的存储空间。基于包括在每个部分响应中的标识符,例如序列标识符,每个部分响应的相应数据被写入在所分配的存储空间内标识的适当存储位置。一旦接收到所有部分响应,并且它们的相关数据被写入为完整响应分配的存储空间的适当存储位置,整个响应就完成了。

在一些实施例中,网络连接231、233、235和237可以访问存储器单元211,以最小化或没有网络冲突或延迟地从存储体221、223、225和227读取数据和/或向存储体221、223、225和227写入数据。利用四个网络连接,存储器单元211和请求处理单元213可以并行处理四个存储器数据访问请求,每个网络连接一个请求。在每个存储器请求访问不同的存储体的情况下,每个存储器请求可以并行访问所需的存储体。在各种实施例中,分解单元与网络连接231、233、235和237中的每一个相关联,以将相应的存储器访问请求分解成部分请求。在一些实施例中,交叉开关与网络连接231、233、235和237中的每一个相关联,以将部分请求路由到存储体221、223、225和227以及路由来自存储体221、223、225和227的对部分请求的响应。

图3是示出使用神经网络解决人工智能问题的系统的实施例的框图。在所示的示例中,系统300是包括处理组件301和存储器单元311的硬件平台的部分描述。存储器单元311包括请求处理单元313、交叉开关315、存储体321、323、325和327以及分解单元331、333、335和337。附加的存储器单元可以被包括,但未显示。类似于存储器单元311,每个未示出的存储器单元包括请求处理单元、多个存储体、多个分解单元和交叉开关。每个存储器单元,例如存储器单元311,可以配置有比所示更多(或更少)的存储体。处理组件301经由网络连接341、343、345和347通信连接到存储器单元311。每个网络连接都连接到存储器单元311的分解单元。网络连接341通信连接到分解单元331,网络连接343通信连接到分解单元333,网络连接345通信连接到分解单元335,并且网络连接347通信连接到分解单元337。交叉开关315将分解单元331、333、335和337通信连接到每个存储体321、323、325和327。在一些实施例中,处理组件301是图1的处理组件101和/或图2的处理组件201,并且存储器单元311是图1的存储器单元111、121、131或141和/或图2的存储器单元211、221或241。在各种实施例中,针对处理组件301和存储器单元311描述的功能适用于连接到处理组件301的其他存储器单元,包括图3中未示出的存储器单元。

在一些实施例中,处理组件301是包括诸如处理元件351、353、355和357的多个处理元件的处理器。处理组件301的处理元件可以被布置为二维阵列,并且可以经由二维网络通信子系统连接。处理元件351、353、355和357用虚线示出,以反映处理元件的总数不限于所示的四个。在图3的图中,仅示出了处理组件301的一部分。处理组件301包括片上网络子系统303,其网络连接341、343、345和347将处理组件301的处理元件通信连接到存储器单元311的请求处理单元313和将处理组件301的处理元件分别通信连接到分解单元331、333、335和337。片上网络子系统303是将包括处理元件351、353、355和357在内的处理元件彼此通信连接的通信网络和/或通信总线。片上网络子系统303可用于处理元件相互通信和/或通过网络连接341、343、345和347与诸如存储器单元311的存储器单元通信。例如,处理组件301的处理元件351可以经由片上网络子系统303和网络连接341与存储器单元311接口连接,以对存储器读取和/或写入数据。图3的示例集中在处理组件301和单个存储器单元(存储器单元311)之间的接口,但是所公开的技术也适用于其他存储器单元。

在一些实施例中,网络连接341、343、345和347可以访问存储器单元311,以最小化或没有网络冲突或延迟地从存储体321、323、325和327读取数据和/或向存储体321、323、325和327写入数据。利用四个网络连接,存储器单元311和请求处理单元313可以并行处理四个存储器数据访问请求,每个网络连接一个请求。例如,处理元件351可以经由网络连接341向存储器单元311发送存储器数据访问请求。类似地,处理元件353可以经由网络连接343向存储器单元311发送存储器数据访问请求,处理元件355可以经由网络连接345向存储器单元311发送存储器数据访问请求,并且处理元件357可以经由网络连接347向存储器单元311发送存储器数据访问请求。在各种实施例中,处理元件可以被配置为使用特定的网络连接向存储器单元311发送存储器请求。例如,诸如行组、列组或处理元件的另一个适当的组织组的特定组的每个处理元件可以利用该组的指定主处理元件向存储器单元发送其请求。主处理元件代表组中的任何成员通过特定的网络连接向存储器单元发送请求。不同的主机可以配置为利用不同的网络连接,最大限度地减少网络冲突并增加存储器带宽。

在一些实施例中,请求处理单元313经由网络连接从处理组件301的处理元件接收存储器访问请求。网络连接341、343、345和347中的每一个分别通信连接到分解单元,例如分解单元331、333、335和337,以分解接收的存储器数据访问请求。存储器访问请求可以是读取请求和/或写入请求。请求处理单元313使用适当的分解单元分解在网络连接处接收的存储器访问请求,并确定它是否可以由存储器单元311的存储体之一服务,可能是部分服务。尽管图3中示出了四个存储体,但是在各种实施例中,存储器单元311可以包括更少或更多的存储体,例如8、16、32、64或其他适当数量的存储体。一旦使用相应的分解单元进行分解,所接收的存储器数据访问请求就是一组部分请求。对于每个部分请求,请求处理单元313确定是对该部分请求进行服务还是允许负责所请求的存储器地址范围的不同存储器单元对该部分请求进行服务。例如,请求处理单元313确定所请求的存储器地址范围是否映射到其存储体之一,例如存储体321、323、325和327之一。在匹配成功的情况下,即存储器单元311负责部分请求的相关地址范围,部分请求被引导通过交叉开关315访问适当的存储体。例如,对于映射到存储体321的部分请求,在该请求被分解单元335分解之后,对应于在网络连接345处接收的请求的读取操作可以经由交叉开关315从存储体321检索所请求的数据。匹配的存储体可以基于散列函数来确定。例如,散列函数可以利用请求访问地址范围的处理元件的工作负荷标识符。在一些实施例中,散列函数检查与存储器访问请求相关联的存储器地址的一组位,例如两位或更多位。在各种实施例中,每个网络连接和分解单元对可以通过交叉开关315访问任何存储体。在一些实施例中,每个网络连接可以并行访问不同的存储体。交叉开关315允许网络连接341、343、345和347中的每一个将部分请求路由到存储体321、323、325和327以及路由来自存储体321、323、325和327的对部分请求的响应。尽管在图3中,存储体的数量和网络连接匹配,但是在各种实施例中,存储体的数量可以多于或少于存储器单元的网络连接的数量。

图4是示出用于执行存储器访问的过程的实施例的流程图。例如,通过使用与人工智能问题和神经网络相关联的数据应用神经网络来解决人工智能问题。通过诸如图2的处理元件251、253、255和/或257和/或图3的处理元件351、353、355和/或357的处理元件,从诸如图1的存储器单元111、121、131和/或141、图2的存储器单元211、221和/或241和/或图3的存储器单元311的存储器读取数据以及向其写入数据。在一些实施例中,图4的过程由图1的处理组件101、图2的处理组件201和/或图3的处理组件301的一个或更多个处理元件来执行。使用图4的过程,存储在存储器中的数据元素可以分配在多个存储器单元中,以提高存储器的利用率和存储器访问操作的效率。

在401,启动存储器管理。例如,在401配置特定的存储器访问分配方案。该配置可以使用处理器指令来启动,例如指向特定处理元件的指令。分配方案可以与特定的工作负荷(例如特定的人工智能问题和神经网络)相关联。在一些实施例中,初始化包括设置工作负荷标识符。例如,工作负荷标识符可用于对数据如何分配在多个存储器单元中进行配置。工作负荷标识符可以是处理器存储器管理指令的参数。每个工作负荷可以使用不同的分配方案来提高存储器的利用率和效率。处理相同数据集或工作负荷的处理元件可以利用相同的工作负荷标识符来共享数据。通过使用不同的分配模式(例如每个工作负荷使用不同的分配模式)将数据分散到存储器单元,存储在存储器中的数据更有效地分配在所有可用存储器中。在一些实施例中,存储器初始化包括配置存储器访问单位大小。例如,存储器访问单位(如128字节、256字节等)可以配置为使得数据按访问单位大小的组写入每个存储器单元。可以根据情况使用更大或更小的访问单位。访问单位组中的数据存储在同一存储器单元中。在一些实施例中,访问单位大小可使用处理器或处理元件的可编程指令来配置。

在一些实施例中,存储器管理的初始化包括配置或编程用于在存储器单元之间分配数据的散列机制。例如,散列机制可以利用种子(seed)来配置分配方案。在一些实施例中,种子基于从存储器地址指定一组位来确定哪个存储器单元被分配给特定访问单位的数据。例如,散列机制可以指定存储器地址的两位,例如两个高位,并且对指定的位执行逐位运算,以将访问单位映射到存储器单元。在一些实施例中,逐位运算利用异或运算。在一些实施例中,散列机制可以以编程方式配置。例如,处理元件可以被配置成利用指定的散列函数和/或被配置成利用散列函数的某些参数。

在403,向存储器单元广播存储器数据请求。例如,对来自存储器的数据的请求被广播到连接到处理组件的处理元件的所有存储器单元。在一些实施例中,该请求经由网络子系统(例如图2的片上网络子系统203和/或图3的片上网络子系统303)和相应的网络连接(例如图2的网络连接231、233、235或237或图3的网络连接341、343、345或347)被传输到存储器单元。在一些实施例中,诸如北、东、南和西存储器单元的四个存储器单元围绕诸如图1的处理组件101的处理组件。在该示例中,所有四个存储器单元,例如存储器单元111、121、131和141,都接收广播的存储器数据请求。在一些实施例中,数据请求是针对大量数据的,并且包括跨越多个访问单位的数据。该请求可以被构造为引用基本存储器地址和大小参数,以确定从基本存储器地址开始请求多少数据。其他存储器引用方案也可能是合适的。在一些实施例中,广播的存储器请求还包括对应于分配方案的映射信息。例如,接收存储器单元可以使用映射信息来确定在401以编程方式配置的散列机制和/或散列机制参数。作为另一个示例,映射信息还可以包括以编程方式配置的访问单位大小。在各种实施例中,存储器数据请求可以被提供给存储器单元用于读取数据或写入数据。

在405,从存储器单元接收部分存储器数据响应。例如,从两个或更多个不同的存储器单元接收两个或更多个部分存储器数据响应。部分响应是对在403广播的存储器数据请求的响应。由于存储器请求跨越多个访问单位,多个存储器单元可以响应,每个存储器单元提供对应于不同访问单位的部分响应,以完成整个请求。每个存储器单元创建与其负责的一个或更多个访问单位相关联的一个或更多个部分响应。例如,与存储器请求相关联的数据可以散布在三个存储器单元中。三个存储器单元中的每一个都以部分存储器数据响应来响应。在各种实施例中,在403用于向特定存储器单元发送请求的网络连接也在405用于接收由特定存储器单元服务的潜在部分响应。在405,接收部分存储器响应的完整集合。在一些实施例中,每个响应包括标识符,例如用于将部分响应组织成完整响应的序列标识符。

在407,完成存储器数据请求处理。例如,部分响应被排序为包括所有请求数据的完整响应。在各种实施例中,仅在接收到所有部分响应之后,处理才完成。例如,包括在部分响应中的序列标识符可以用于确定处理完成。与每个部分响应相关联的数据可以存储在处理元件的本地存储器中。在一些实施例中,完整响应可以被一个以上的处理元件利用。例如,访问相同数据的处理元件可以共享对完整的存储器数据响应的利用。

图5是示出用于响应存储器数据请求的过程的实施例的流程图。例如,存储器单元的请求处理单元利用图5的过程来响应广播的存储器数据请求。每个存储器单元的请求处理单元使用连接到接收请求的网络连接的分解单元来分解存储器请求。请求处理单元确定存储器单元负责哪些访问单位,然后为由存储器单元管理的访问单位准备并发送一个或更多个部分响应。在一些实施例中,图5的过程由图1的请求处理单元113、123、133和/或143、图2的请求处理单元213和/或图3的请求处理单元313来执行。在一些实施例中,响应于在图4的403广播的存储器数据请求,执行图5的过程。在一些实施例中,使用图5的过程准备的响应在图4的405处由处理元件接收。

在501,接收存储器数据请求。例如,接收跨越多个访问单位的存储器数据请求。一些访问单位与存储器单元相关联,而其他访问单位可以与不同的存储器单元相关联。在各种实施例中,多个存储器单元可以接收与广播的存储器数据请求相同的存储器数据请求。在一些实施例中,存储器数据请求包括基地址(base address)和大小参数,以确定所请求的地址范围。存储器数据请求还可以包括映射信息,以确定用于存储器访问请求的特定存储器分配方案的散列机制和/或散列机制参数。在一些实施例中,存储器数据请求映射信息包括访问单位大小。

在一些实施例中,每个存储器单元包括多个网络连接,每个网络连接可以接收存储器数据请求。多个网络连接允许多个处理元件通过使用不同的网络连接访问存储器单元来并行地向存储器单元发起请求。在一些实施例中,网络连接对应于存储器单元的多个输入/输出存储器端口。例如,存储器单元211包括网络连接231、233、235和237,并且存储器单元311包括网络连接341、343、345和347。诸如图3的处理元件351的处理元件可以经由网络连接341访问存储器单元311,而图3的不同处理元件可以经由网络连接343、345或347之一访问存储器单元311。

在503,存储器数据请求被分解成部分请求。例如,跨越多个访问单位的请求被分成部分请求。在一些实施例中,分解由请求处理单元的分解单元执行。每个分解单元都与相应的网络连接相关联,因此可以并行分解多个请求。在一些实施例中,分解单元是图3的分解单元331、333、335或337。在各种实施例中,每个分解单元基于配置的访问单位大小将接收的存储器数据请求分解成部分请求。例如,跨越三个访问单位的存储器数据请求被分解成三个部分请求,每个访问单位一个部分请求。作为另一个示例,在一些实施例中,每个存储器单元负责多个访问单位。例如,在一个场景中,存储器数据请求跨越平均分配在4个存储器单元中的32个存储器访问单位,每个存储器单元负责8个部分请求。每个部分请求对应于由存储器单元管理的数据的存储器访问单位。

在505,访问相关部分请求的数据。例如,从存储器单元的存储体中检索与部分请求匹配的访问单位的数据(或将该数据写入存储体)。在一些实施例中,存储器单元可以具有多个存储体,并且相应部分请求的数据存储在存储器单元的一个或更多个存储体中。在一些实施例中,所访问的数据响应于从跨越多个访问单位的较大请求分解的部分请求。在存储器访问读取操作的情况下,在部分请求与存储器单元匹配的情况下,从该存储器单元的存储体读取相应的数据。类似地,在存储器访问写入操作的情况下,在部分请求与存储器单元匹配的情况下,相应的数据被写入该存储器单元的存储体。在各种实施例中,通过将每个存储体连接到处理部分请求的请求处理单元的交叉开关来访问存储体。在一些实施例中,交叉开关是图3的请求处理单元313的交叉开关315。

在一些实施例中,部分请求基于可编程分配方案与相应的存储器单元映射。例如,不同的工作负荷可以使用利用散列机制配置的不同分配方案将数据分配到存储器单元。在各种实施例中,在505,用于所配置的分配方案的散列机制被用于确定接收存储器数据请求的存储器单元是否对部分请求负责。在存储器单元管理部分请求的特定地址范围的情况下,检索(或写入)相应的数据。否则,部分请求被忽略,并将由负责该地址范围的正确存储器单元处理。

在507,准备并发送部分存储器数据响应。例如,从存储器单元读取的数据被打包成与部分请求相关联的响应。在一些实施例中,对应于读取操作准备的响应是部分存储器数据响应,因为它仅包括所请求数据的一部分。在各种实施例中,每个部分响应包括标识符,例如用于将部分响应排序为完整响应的序列标识符。处理元件可以利用每个部分存储器数据响应的标识符来对无序接收的一组部分响应进行排序。该响应被传输到处理组件,以供一个或更多个处理元件接收。在一些实施例中,响应是对应于写入操作的请求被完成的确认。

图6是示出用于响应部分存储器数据请求的过程的实施例的流程图。例如,存储器单元的请求处理单元利用图6的过程来响应从广播的存储器数据请求分解的每个部分存储器数据请求。一旦分解成部分请求,每个存储器单元的请求处理单元确定该存储器单元是否负责部分请求所引用的访问单位。请求处理单元然后为由存储器单元管理的访问单位准备并发送一个或更多个部分响应。在各种实施例中,通过诸如图3的交叉开关315的交叉开关来访问存储器单元。在一些实施例中,图6的过程由图1的请求处理单元113、123、133和/或143、图2的请求处理单元213和/或图3的请求处理单元313来执行。在一些实施例中,响应于在图4的403广播并在图5的503分成部分请求的存储器数据请求,在图5的505和/或507执行图6的过程。在一些实施例中,使用图6的过程准备的响应在图4的405处由处理元件接收。

在601,从分解的存储器数据访问请求接收部分数据访问存储器请求。例如,广播的存储器请求被分解成一组部分请求。在601,接收部分请求以开始处理该请求。

在603,确定部分请求是否可以由存储器单元及其相关联的存储体服务。在请求可以被服务的情况下,处理继续到605。在请求不能被服务的情况下,处理继续到611。例如,如果一个请求引用了一个由不同存储器单元负责的存储器范围,则该请求不能被服务。在一些实施例中,部分请求基于可编程分配方案与相应的存储器单元映射。通过应用可编程分配方案,可以确定接收存储器单元是否可以服务该请求。例如,在一些实施例中,使用散列机制来配置可编程分配方案。散列机制用于确定接收存储器数据请求的存储器单元是否对部分请求负责。在存储器单元管理部分请求的特定地址范围的情况下,检索(或写入)相应的数据。否则,在611部分请求被忽略,并将由负责该地址范围的正确存储器单元处理。

在605,部分请求被转发到适当的存储体。例如,使用交叉开关,部分请求被路由到请求合适的存储体。在一些实施例中,交叉开关是图3的交叉开关315,并且允许访问存储器单元的任何存储体。转发的请求操作可以是寻址存储在一个或更多个存储体中的存储器的读或写请求。在一些实施例中,通过应用可编程分配方案来确定适当的存储体。

在607,访问相关部分请求的数据。例如,匹配部分请求的访问单位的数据通过交叉开关从存储器单元的存储体中检索(或写入存储体)。在一些实施例中,存储器单元可以具有多个存储体,并且相应部分请求的数据存储在存储器单元的一个或更多个存储体中。在一些实施例中,所访问的数据响应于从跨越多个访问单位的较大请求分解的部分请求。在存储器访问读取操作的情况下,在部分请求与存储器单元匹配的情况下,从该存储器单元的存储体读取相应的数据。类似地,在存储器访问写入操作的情况下,在部分请求与存储器单元匹配的情况下,相应的数据被写入该存储器单元的存储体。在各种实施例中,通过将每个存储体连接到处理部分请求的请求处理单元的交叉开关来访问存储体。在一些实施例中,交叉开关是图3的请求处理单元313的交叉开关315。

在609,准备并发送部分存储器数据响应。例如,从存储器单元读取的数据被打包成与部分请求相关联的响应。在一些实施例中,对应于读取操作准备的响应是部分存储器数据响应,因为它仅包括所请求数据的一部分。在各种实施例中,每个部分响应包括标识符,例如用于将部分响应排序为完整响应的序列标识符。处理元件可以利用每个部分存储器数据响应的标识符来对无序接收的一组部分响应进行排序。该响应被传输到处理组件,以供一个或更多个处理元件接收。在一些实施例中,响应是对应于写入操作的请求被完成的确认。

在611,过滤部分请求。例如,引用由不同存储器单元管理的存储器范围或访问单位的请求被丢弃。允许另一个存储器单元通过在该另一个存储器单元接收的广播请求来响应被丢弃的部分请求。对被丢弃的请求的处理完成,并且处理结束。

图7是示出用于执行存储器访问的过程的实施例的流程图。例如,处理元件利用图7的过程来收集对应于读取操作的存储器数据请求的数据。在一些实施例中,处理元件,例如图2的处理元件251、253、255或257之一或图3的处理元件351、353、355或357,从诸如图1的存储器单元111、121、131和/或141、图2的存储器单元211、221和/或241和/或图3的存储器单元311的多个存储器单元接收部分存储器数据响应。在一些实施例中,响应于在图4的403广播的存储器数据请求和/或响应于使用图5的过程和/或使用图6的过程发送的部分存储器数据响应,执行图7的过程。在一些实施例中,在图4的405和/或407处执行图7的过程,以从各种存储器单元收集部分响应。

在701,接收数据存储器部分响应。例如,接收从存储器单元发送的对数据存储器请求的部分响应。在各种实施例中,响应包括来自同一存储器单元的大小为一个或更多个访问单位的数据。在一些实施例中,响应包括标识符信息,例如可以用于相对于其他部分响应对接收的部分响应进行排序的序列标识符。

在703,识别数据存储器部分响应。例如,使用包括在接收到的部分响应中的标识符,相对于原始数据存储器请求来识别数据存储器部分响应。例如,一个请求可以分解或展开为五个部分请求。在703识别部分响应,以确定它对应于五个部分响应中的哪一个。在一些实施例中,通过检查诸如序列标识符的标识符来执行识别。识别结果可用于确定部分响应相对于其他部分响应的顺序,并从接收到的部分响应集合重建完整响应。

在705,数据存储器部分响应被存储在本地存储器中。例如,从存储器中读取的数据是从部分响应的数据有效载荷中提取的,并存储在本地存储器中。在一些实施例中,从本地存储器中分配大小被设定用于所请求的数据的临时缓冲器,以从部分响应构建完整响应。由于部分响应可能相对于它们相应的存储器地址被无序接收,所以来自部分响应的数据基于部分响应与原始请求数据的关系被存储在分配的缓冲器中的相应位置。例如,分配大小被设置用于五个部分响应的缓冲器,并且来自接收到的部分响应的数据被写入缓冲器中的相应地址位置,而不管何时接收到部分响应。在一些实施例中,每个部分响应是访问单位大小的响应或访问单位的倍数。使用临时缓冲器,可以从部分响应重建完整的数据存储器响应。

在707,确定响应是否完整。例如,一旦接收到构建完整响应所需的所有部分响应,则响应是完整的。在响应完整的情况下,处理进行到709。在响应不是完整的情况下,处理循环回到701以接收附加的部分响应。

在709,完成存储器数据请求处理。例如,对应于完整响应的数据可用于额外的计算,例如矩阵计算。在一些实施例中,与完整响应相关联的数据位于本地存储器中,例如处理元件的本地存储器储存器。完整响应可以用作处理元件的矩阵计算引擎的输入。在一些实施例中,完整响应对应于描述神经网络的数据或与人工智能问题相关联的激活数据。

尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不限于所提供的细节。有许多实现本发明的替代实现方式。所公开的实施例是说明性的,而不是限制性的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号