使用加法器访问多维张量中的数据的制作方法

文档序号:19159035发布日期:2019-11-16 01:08阅读:202来源:国知局
使用加法器访问多维张量中的数据的制作方法
本说明书一般涉及使用具有硬件加法器的专用计算单元来进行机器学习计算。
背景技术
:神经网络是机器学习模型,其采用一个或多个模型层来为所接收的输入生成输出,例如分类。除了外层之外,一些神经网络还包括一个或多个隐藏层。每个隐藏层的输出用作对网络中下一个层(即网络的下一个隐藏层或输出层)的输入。网络的每个层根据相应参数集的当前值从所接收的输入生成输出。一些神经网络包括一个或多个卷积神经网络层。每个卷积神经网络层都有相关联的一组内核。内核可以表示为权重输入的矩阵结构。每个卷积层使用内核来处理对层的输入。对层的一组输入也可以表示为矩阵结构。技术实现要素:本说明书描述与使用用于确定张量元素的存储器地址的一个或多个硬件加法器来访问n维张量有关的技术。通常,本说明书所述主题的一个创新性方面可以体现在用于访问n维张量的设备中。对于n维张量的每个维度,设备可包括:部分地址偏移值元素,其至少基于以下来存储所述维度的部分地址偏移值:所述维度的初始值、所述维度的步长值、以及所述维度的循环的迭代次数。设备还可包括一个或多个硬件加法器以及一个或多个处理器。一个或多个处理器可以被配置为获得访问所述n维张量的特定元素的指令。所述n维张量可具有跨n个维度中的每个维度布置的多个元素。n可以是等于或大于1的整数。处理器可以使用所述部分地址偏移值元素中的一个或多个部分地址偏移值元素和所述一个或多个硬件加法器来确定所述特定元素的地址,以及输出指示用于访问所述n维张量的所述特定元素的所确定的地址的数据。这些和其他实施方式可以各自可选地包括以下特征中的一个或多个。在一些方案中,对于每个维度,设备可包括存储所述维度的初始值的初始值元素和存储所述维度的步长值的步长值元素。每个部分地址偏移值元素、每个初始值元素、以及每个步长值元素可包括寄存器。在一些方案中,确定所述特定元素的地址可包括使用所述一个或多个硬件加法器来确定每个维度的部分地址偏移值的总和。一个或多个处理器可以被配置为:对于每个维度,通过以下来确定所述维度的嵌套循环的每次迭代之后所述维度的部分地址偏移值:将所述步长值与所述维度的先前地址偏移值相加。对于每个维度,设备可包括:存储所述维度的限制值的限制值元素。所述一个或多个处理器对于每个维度可以确定所述维度的所确定的部分地址偏移值是否等于所述维度的限制值。响应于确定与第一嵌套循环相对应的第一维度的所确定的部分地址偏移值等于所述第一维度的限制值,所述一个或多个处理器可将所述第一维度的部分地址偏移值重置为所述第一维度的初始值;以及对于与所述第一嵌套循环在其中嵌套的第二嵌套循环相对应的第二维度,使用所述一个或多个硬件加法器,将所述第二维度的部分地址偏移值更新为等于所述第二维度的步长值与所述第二维度的部分地址偏移值的总和。在一些方案中,每个维度的所述步长值是基于一个或多个所述维度中的元素的数目的预定值。本说明书所述主题可以在特定实施例中实现,以便实现以下优点中的一个或多个。使用寄存器来追踪存储器地址值允许程序使用一条指令来迭代深度嵌套的循环。通过基于存储在寄存器中的值来应用简单的加法,可以快速确定存储器地址值。专用计算单元可包括计算地址的加法器。通过使用加法器而不是算术逻辑单元(alu)、乘法器或其他复杂的电路,可以减小电路的大小和电路的制造成本。使用硬件加法器确定存储器地址值允许减少处理器处的计算周期的数目,并增加用于其他计算任务的处理器带宽。可通过更少数目的指令遍历张量。二维寄存器架构允许同时追踪各自具有不同尺寸的多维张量。这个和其他方面的其他实施方式包括对应的系统、方法和计算机程序,被配置为进行在计算机存储装置上编码的方法的动作。一个或多个计算机的系统可通过安装在系统上的、在操作中使得系统进行动作的软件、固件、硬件或它们的组合来如此配置。一个或多个计算机程序可通过具有指令来如此配置,所述指令在通过数据处理设备执行时使得设备进行动作。在附图和以下描述中给出本说明书所述主题的一个或多个实施方式的细节。根据说明书、附图和权利要求书,本主题的其他潜在特征、方面和优点将变得显而易见。附图说明图1是示例计算系统的框图。图2a-2h示出示例张量遍历单元。图3是示出用于确定多维张量变量的地址的示例过程的流程图。各附图中相似的附图标记和名称表示相似的元素。具体实施方式通常,当软件算法处理n维张量时,可以使用嵌套循环。每个循环可以负责遍历n维张量的相应维度。多维张量可以是矩阵或多维矩阵。例如,2维张量是矩阵,而3维张量是由多个二维矩阵组成的三维矩阵。n维张量的每个维度可包括一个或多个元素,其中每个元素可以存储相应的数据值。例如,张量可以是程序中的变量,其中变量可具有三个维度。第一维度可具有三百个元素的长度,第二维度可具有一千个元素的长度,且第三维度可具有二十个元素的长度。当然,每个维度中的其他数目的元素也是可能的。在嵌套循环中遍历张量可包括:计算元素的存储器地址值以加载或存储元素的对应数据值。for循环是嵌套循环的示例,其中由三个循环索引变量(例如,i、j和k)追踪的三个循环可以被嵌套以遍历三维张量。在神经网络中,可以在与张量相关联的一个或多个点积计算中使用元素的值。例如,可将元素的值与对应的参数或权重相乘。可以使用嵌套的for循环按顺序遍历张量的元素,以访问元素,并使用元素的值进行一个或多个计算。继续三维张量示例,外层for循环可用于遍历变量i所追踪的循环,中间for循环可用于遍历变量j所追踪的循环,且内层for循环可用于遍历变量k所追踪的循环。在该示例中,所访问的第一元素可以是(i=0,j=0,k=0),第二元素可以是(i=0,j=0,k=1),等等。如下所述,张量遍历单元可用于使用嵌套循环按顺序确定每个元素的存储器地址,使得处理单元可以访问元素的值并使用元素的值进行一个或多个计算。也可以使用嵌套的for循环类似地访问权重或参数的值。张量遍历单元还可用于确定计算中使用的权重或参数的地址和/或计算的输出的地址,其可用作对神经网络的隐藏层的输入。在一些情况下,处理器可能需要执行循环边界条件,例如使用外层循环索引变量设置内层循环的循环边界。例如,在确定是否退出嵌套循环的最内层循环时,程序可将最内层循环的循环索引变量的当前值与嵌套循环的最外层循环的循环索引变量的当前值进行比较。这些任务可能需要大量指令,诸如分支指令和整数算术指令。当每个循环边界很小并且循环的数目很大时,计算可能占用整个执行时间的很大一部分,并严重劣化整体效能。用于处理器的硬件张量遍历单元可通过减少处理器在遍历张量时需要处理的维度数目来增加处理器的计算带宽。图1示出用于遍历张量的示例计算系统100的框图。通常,计算系统100处理输入104以生成输出116。计算系统100可以被配置为进行线性代数计算。输入104可以是可通过计算系统100来处理的任何合适数据。计算系统100包括处理单元102、存储介质104和张量遍历单元106。通常,当处理单元102执行用于访问张量的特定元素的指令时,张量遍历单元106确定张量的特定元素的地址,使得处理单元102可以访问存储介质104以读取表示特定元素的值的数据114。例如,程序可包括嵌套循环,并且处理单元102可以根据与嵌套循环相关联的当前索引变量值来执行用于访问嵌套循环内的二维数组变量的元素的指令。基于与嵌套循环相关联的当前索引变量值,张量遍历单元106可以确定地址偏移值,该地址偏移值表示与二维数组变量的第一元素的存储器地址的偏移。然后,处理单元102可以使用地址偏移值从存储介质访问二维数组变量的特定元素。处理单元102被配置为处理用于在计算系统100内执行的指令,包括存储在存储介质104中的指令112或存储在另一个存储装置中的其他指令。处理单元102可包括一个或多个处理器。存储介质104存储计算系统100内的信息。在一些实施方式中,存储介质104是易失性存储器单元。在一些其他实施方式中,存储介质104是非易失性存储器单元。存储介质104还可以是另一种形式的计算机可读介质,诸如软盘装置、硬盘装置、光盘装置、或磁带装置、闪存或其他类似的固态存储器装置、或装置阵列,包括存储区域网络中的装置或其他配置的装置。当由处理单元102执行时,指令使处理单元102进行一个或多个任务。张量遍历单元106可以实现为专用集成电路。张量遍历单元106可以被配置为确定与一个或多个张量相关联的状态。状态可包括循环边界值、当前循环索引变量值、用于确定存储器地址值的部分地址偏移值、和/或用于处置分支循环边界的程序计数器值。张量遍历单元106将张量索引转换为存储器地址。例如,张量遍历单元106可将一组n维张量索引转换为一维地址空间。张量遍历单元可通过使得张量元素的存储器地址成为元素的维度索引的组合(例如,线性组合)来进行这样的转换。张量遍历单元106可以有效率且以编程方式生成引用张量元素序列的地址序列。地址序列对应于将在软件遍历例程中由循环嵌套访问的张量元素序列。在遍历期间访问的元素序列在存储器中可以是物理上连续的,或者可以不是物理上连续的。图2b-2h所示并如下所述的示例提供元素序列在存储器中不是物理上连续的方式的示例。张量遍历单元106包括张量地址值元素122和硬件加法器单元124。张量地址值元素122中的每一个可以是存储元件,例如寄存器或任何其它合适的存储电路。在一些实施方式中,张量地址值元素122可以物理地或逻辑地布置为不同的群组,如下参考图2a-2h更详细所述。在一些实施方式中,张量地址值元素122的群组可以物理地或逻辑地布置成多维数组。例如,每个张量地址值元素122的群组可以物理地或逻辑地布置成二维数组。硬件加法器单元124可包括一个或多个硬件加法器。每个加法器可包括被配置为进行加法运算的数字电路。例如,如下所述,一个或多个加法器可以对部分地址偏移值做加法,以确定张量元素的总地址偏移值。因为硬件加法器比算术逻辑单元(alu)和硬件乘法器需要更少的电路组件,所以硬件加法器单元124的电路的大小(以及因此张量遍历单元106的大小)可以小于包括alu和/或乘法器的张量遍历单元。此外,制造具有硬件加法器的张量遍历单元的成本可能低于制造具有alu和/或乘法器的张量遍历单元的成本。在一些实施方式中,硬件加法器单元124仅包括加法器而不包括其他数学或逻辑电路。图2a示出张量遍历单元的一组示例张量地址值元素200。张量地址值元素200可以对应于张量遍历单元106的张量地址值元素122。张量遍历单元200包括初始值元素202的群组、步长值元素204的群组、终止值元素206的群组、以及部分地址偏移值元素208的群组。初始值元素202可以物理地或逻辑地布置为具有m行和n列的2-d数组,其中m和n是大于或等于1的整数。初始值元素202可以存储用于确定张量元素的存储器地址的部分地址偏移的初始值。在一些实施方式中,初始值元素202的每个行可表示张量的初始值。例如,如果程序定义两个数组变量v1和v2,则张量遍历单元可以指派行202a和202b来分别存储数组变量v1和v2的初始值。在一些实施方式中,初始值元素202的每个列可以表示与张量相关联的嵌套循环索引变量值的初始值。例如,如果程序定义具有三个用于访问变量v1的循环的嵌套循环,其中该嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以指派初始值元素v1,1、v1,2和v1,3来分别存储嵌套循环索引变量i、j和k的初始值。下面参考图2b-2h更详细地描述初始值元素202。步长值元素204可以物理地或逻辑地布置为具有与初始值元素202相同维度的2-d数组,其中步长值元素204中的每个元素具有初始值元素202中的对应元素。步长值元素204可以存储用于确定张量元素的存储器地址的部分地址偏移的步长值。在一些实施方式中,步长值元素204的每个行可以表示张量的步长值。例如,如果程序定义两个数组变量v1和v2,则张量遍历单元可以指派行204a和204b来分别存储数组变量v1和v2的步长值。在一些实施方式中,步长值元素204的每个列可以表示与张量相关联的嵌套循环索引变量值的步长值。例如,如果程序定义具有三个用于访问变量v1的循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以指派步长值元素x1,1、x1,2和x1,3来分别存储嵌套循环索引变量i、j和k的步长值。下面参考图2b-2h更详细地描述步长值元素204。终止值元素206可以物理地或逻辑地布置为具有与初始值元素202相同维度的2-d数组,其中终止值元素206的每个元素具有初始值元素202中的对应元素。终止值元素206可以存储用于确定张量元素的存储器地址的部分地址偏移的终止值。在一些实施方式中,终止值元素206的每个行可以表示张量的终止值。例如,如果程序定义两个数组变量v1和v2,则张量遍历单元可以指派行206a和206b来分别存储数组变量v1和v2的终止值。在一些实施方式中,终止值元素206的每个列可以表示与张量相关联的嵌套循环索引变量值的终止值。例如,如果程序定义具有三个用于访问变量v1的循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以指派终止值元素y1,1、y1,2和y1,3来分别存储嵌套循环索引变量i、j和k的终止值。下面参考图2b-2h更详细地描述终止值元素206。部分地址偏移值元素208可以物理地或逻辑地布置为具有与初始值元素202相同维度的2-d数组,其中部分地址偏移值元素208的每个元素具有初始值元素202中的对应元素。部分地址偏移值元素206可以存储用于确定张量元素的存储器地址的部分地址偏移值。在一些实施方式中,部分地址偏移值元素208的每个行可以表示张量的部分地址偏移值。例如,如果程序定义两个数组变量v1和v2,则张量遍历单元可以指派行208a和208b来分别存储数组变量v1和v2的部分地址偏移值。在一些实施方式中,部分地址偏移值元素208的每个列可以表示与张量相关联的嵌套循环索引变量值的部分地址偏移值。例如,如果程序定义具有三个用于访问变量v1的循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以指派部分地址偏移值元素z1,1、z1,2和z1,3来分别存储嵌套循环索引变量i、j和k的部分地址偏移值。下面参考图2b-2h更详细地描述部分地址偏移值元素208。图2b-2h示出张量遍历单元可以如何使用张量地址值元素200来处理张量的示例,包括确定张量的张量元素的存储器地址值。参考图2b,程序212可以存储在可由处理单元102执行的存储介质104或另一个存储介质中。程序212指定具有第一维度3、第二维度2和第三维度2的字符数组变量v1。程序212指定用于遍历变量v1的嵌套for循环,其中for循环在嵌套循环索引变量i所追踪的外层循环中遍历v1的第一维度;在嵌套循环索引变量j所追踪的中间循环中遍历v1的第二维度;并在嵌套循环索引变量k所追踪的内层循环中遍历v1的第三维度。虽然本文中描述的图2b-2h所示的示例包括三个维度,但是可以按照类似的方式确定具有不同数目的维度(例如,2、5、8或一些其他数目的维度)的张量的存储器地址值。例如,可以遍历具有八个维度的张量,并且可以使用8深度循环嵌套来确定张量元素的存储器地址。在一些实施方式中,可以在程序的开始时初始化张量地址值元素200。例如,处理器可以执行初始化张量地址值元素200的指令“initializeelements”。该指令可以是可由处理器执行的指令集中的硬件指令。在一些实施方式中,在初始化之后,张量地址值元素200的每个元素被设置为预定值。在一些实施方式中,处理器可以针对张量地址值元素的每个群组执行单独的指令,例如,一个指令用于初始值元素202,一个指令用于步长值、元素等。每个单独的指令可以将其群组中的每个元素设置为该元素的预定值。在该示例中,每个初始值元素202被设置为零值。维度的初始值是针对遍历该维度的for循环的第一次迭代将维度的部分地址偏移值设置成的值。因此,在该示例中,对于每个维度的for循环的第一次迭代,该维度的部分地址偏移值将被设置为零值。步长值元素可以存储用于确定张量元素的存储器地址的部分地址偏移的步长值。维度的步长值是在遍历该维度的for循环的每次迭代之后与该维度的部分地址偏移值相加的值。在该示例中,内层嵌套循环索引变量k具有步长值1,中间嵌套循环索引变量j具有步长值6,且外层嵌套循环索引变量i具有步长值2。在一些实施方式中,处理器、用户或者编译用于遍历张量的程序的编译器基于张量一个或多个维度中的元素的数目来确定每个维度的步长值和/或终止值。在一个示例中,每个维度的步长值和/或终止值取决于张量的存储器布局。对于二维张量,存储器布局例如可以遵循行优先或列优先顺序。通过这种方式,为每个张量元素计算的存储器地址与每个其他张量元素的存储器地址不同。在一些实施方式中,存储器地址被这样确定以使得在遍历期间访问的元素序列在存储器中是物理上连续的。在该示例中,第一张量元素可以存储在具有第一地址的第一存储器位置,第二张量元素可以存储在紧邻第一存储器位置的第二存储器位置,第三张量元素可以存储在紧邻第二存储器位置的第三存储器位置,依此类推。在一些实施方式中,存储器地址被这样确定以使得在遍历期间访问的元素序列在存储器中不是物理上连续的。在该示例中,第二张量元素可以不紧邻第一张量元素存储。终止值元素可以存储针对维度的终止值。维度的终止值表示这样的值:在该值处将部分地址偏移值重置为该维度的初始值。此外,当第一循环的部分地址偏移值等于第一循环的终止值时,将第一循环在其中嵌套的第二循环的步长值与第二循环的部分地址偏移值相加。在该示例中,内层嵌套循环索引变量i的终止值为2,中间嵌套循环索引变量i的步长值为12,外层嵌套循环索引变量k的终止值为6。因此,当内层嵌套循环索引变量i的部分地址偏移值达到值2的时候,处理器可以将内层嵌套循环索引变量i的部分地址偏移值重置为零,并将中间嵌套循环索引变量j的步长值(6)与中间嵌套循环索引变量j的部分地址偏移值相加。如果这是由中间嵌套循环索引变量j追踪的循环的第一次迭代,则中间嵌套循环索引变量j的部分地址偏移值将是6(0+6)。部分地址偏移值元素208存储维度的部分地址偏移值。在该示例中,处理器将部分地址偏移值设置为零。部分地址偏移值用于确定张量元素的存储器地址偏移。在一些实施方式中,特定变量的特定张量元素的存储器地址是基于张量元素的预指定基础地址和张量元素的维度的部分地址偏移值的总和,如等式225所示。对于变量v1,特定张量元素的存储器地址等于张量元素的基础地址和行208a(顶行)中的部分地址偏移值的总和。因此,对于与变量v1的每个维度的第一元素相对应的张量元素(i=0,j=0,k=0),存储器地址等于基础地址加零,因为部分地址偏移值都是零。可以使用图1的硬件加法器单元124来确定张量元素的存储器地址。例如,对用于特定变量(例如,变量v1)的加法器的输入可以是基础地址和该变量的行(例如,变量v1的行208a)中的每个部分地址偏移值元素的值。输出是该变量的存储器地址。图2c示出根据程序212访问元素v1[0][0][0]。例如,处理器可以执行定位与正在访问的元素相对应的存储器地址的指令“locatetensor”。在一些实施方式中,指令可包括基础存储器地址。例如,指令“locatetensor”可包括作为变量v1的第一元素的元素v1[0][0][0]的存储器地址。在一些实施方式中,指令可包括与要访问的张量相对应的行号。例如,指令“locatetensor”可包括与变量v1相对应的行号。这里,行号是1。在一些实施方式中,包括张量遍历单元的计算系统可包括查询来自张量遍历单元的存储器地址值的有限状态机(fsm)。例如,fsm可以为处理器查询存储器地址值而不是处理器执行诸如关于图2b-2h描述的“locatetensor”和“iteratetensor”指令的指令。fsm可迭代地遍历嵌套循环并在遍历循环的同时迭代部分地址值,如下参考处理器所述。然后,处理器可以在存储器地址值被确定时从硬件计数器或从fsm接收所确定的存储器地址值。在一些实施方式中,响应于接收指令,硬件加法器单元(例如,图1的硬件加法器单元124)通过计算部分地址值元素208的行1(行208a)中每个部分地址偏移值元素208中存储的值的总和来确定存储器地址偏移。这里,硬件加法器单元确定存储在元素z1,1、z1,2和z1,3中的值的总和。然后,处理器可通过以下来访问元素v1[0][0][0]:将基础存储器地址与所确定的存储器地址偏移(即,在该示例中为0)相加来确定存储器地址,并基于所确定的存储器地址来访问存储介质中的所存储的数据。在另一个示例中,硬件加法器可通过确定基础存储器地址与存储在元素z1,1、z1,2和z1,3中的值的总和来确定元素v1[0][0][0]的存储器地址。然后,处理器可基于所确定的存储器地址来访问存储介质中所存储的数据。图2d示出根据程序212访问元素v1[0][0][1]。例如,在程序完成内层循环的第一次迭代之后,处理器可以执行指令“iteratetensor”,该指令“iteratetensor”在程序进入内层循环的第二次迭代时(即,i=0,j=0,k=1),更新部分地址偏移值。在一些实施方式中,张量遍历单元通过以下来更新部分地址偏移值:将与内层循环(由内层嵌套循环索引变量i追踪的循环)相对应的维度的部分地址偏移值元素208递增与内层循环相对应的维度的步长值。在该示例中,使用硬件加法器单元将存储在部分地址偏移值元素z1,1中的部分地址偏移值递增存储在步长值元素x1,1中的步长值。为内层循环存储的所得的更新的部分地址偏移值是存储在z1,1中的先前值与存储在x1,1中的值的总和,即0+1=1。在一些实施方式中,张量遍历单元将存储在元素z1,1中的更新的部分偏移地址值与存储在元素y1,1中的内层循环的终止值进行比较。如果存储在z1,1中的更新的部分偏移地址值等于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可将存储在元素z1,1中的部分偏移地址值的值重置为存储在元素v1,1中的内层循环的初始值。此外,张量遍历单元可将与存储在元素z1,2中的中间循环相对应的维度的部分地址偏移值递增x1,2中存储的中间循环的步长值,如下更详细所述。如果存储在元素z1,1中的更新的部分偏移地址值小于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可以保持存储在元素z1,1中的内层循环的更新的部分偏移地址值。在该示例中,内层循环的更新的部分地址偏移值(1)小于内层循环的终止值(2)。因此,张量遍历单元保持存储在内层循环的部分地址偏移元素z1,1中的更新的部分偏移地址值,而不递增中间循环的部分地址偏移值。然后,处理器可通过以下来访问元素v1[0][0][1]:执行指令“locatetensor”,以定位与v1[0][0][1]相对应的存储器地址。响应于接收该指令,硬件加法器单元通过以下来确定存储器地址偏移:计算存储在部分地址值元素208的行1(行208a)中的每个部分地址偏移值元素208中的值的总和。这里,硬件加法器单元确定存储在元素z1,1、z1,2和z1,3中的值的总和。然后,处理器可通过以下来访问元素v1[0][0][1]:将基础存储器地址与所确定的存储器地址偏移(即,在该示例中为1)相加来确定存储器地址,并基于所确定的存储器地址来访问存储介质中所存储的数据。在另一个示例中,硬件加法器可通过确定基础存储器地址与存储在元素z1,1、z1,2和z1,3中的值的总和来确定元素v1[0][0][1]的存储器地址。然后,处理器可以基于所确定的存储器地址来访问存储介质中所存储的数据。图2e示出根据程序212访问元素v1[0][1][0]。例如,在程序完成内层循环的第二次迭代之后,处理器可以执行指令“iteratetensor”,该指令“iteratetensor”在程序进入中间循环的第二次迭代时(即,i=0,j=1,k=0),更新部分地址偏移值。在一些实施方式中,张量遍历单元通过以下来更新部分地址偏移值:将与内层循环(由内层嵌套循环索引变量i追踪的循环)相对应的维度的部分地址偏移值元素208递增与内层循环相对应的维度的步长值。在该示例中,使用硬件加法器单元将存储在部分地址偏移值元素z1,1中的部分地址偏移值递增存储在步长值元素x1,1中的步长值。为内层循环存储的所得的更新的部分地址偏移值是存储在z1,1中的先前值与存储在x1,1中的值的总和,即1+1=2。在一些实施方式中,张量遍历单元将存储在元素z1,1中的更新的部分偏移地址值与存储在元素y1,1中的内层循环的终止值进行比较。如果存储在z1,1中的更新的部分偏移地址值等于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可将存储在元素z1,1中的部分偏移地址值的值重置为存储在元素v1,1中的内层循环的初始值。此外,张量遍历单元可将与存储在元素z1,2中的中间循环相对应的维度的部分地址偏移值递增存储在x1,2中的中间循环的步长值。如果存储在元素z1,1中的更新的部分偏移地址值小于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可以保持存储在z1,1中的内层循环的更新的部分地址值。在该示例中,内层循环的更新的部分地址偏移值(2)等于内层循环的终止值(2)。因此,张量遍历单元将存储在元素z1,1中的部分偏移地址值重置为存储在元素v1,1中的初始值。此外,张量遍历单元将存储在元素z1,2中的中间循环的部分地址偏移值递增存储在x1,2中的中间循环的步长值。在该示例中,中间循环的更新的部分地址偏移值是6(0+6)。在一些实施方式中,张量遍历单元响应于确定更新中间循环的部分偏移地址值,将存储在元素z1,2中的中间循环的更新的部分偏移地址值与存储在元素y1,2中的中间循环的终止值进行比较。如果存储在z1,2中的中间循环值的更新的部分偏移地址等于存储在元素y1,2中的中间循环的终止值,则张量遍历单元可将存储在元素z1,2中的部分偏移地址值的值重置为存储在元素v1,2中的中间循环的初始值。此外,张量遍历单元可将与存储在元素z1,3中的外层循环相对应的维度的部分地址偏移值递增存储在x1,3中的外层循环的步长值,如下所述。如果存储在元素z1,2中的中间循环的更新的部分偏移地址值小于存储在元素y1,2中的中间循环的终止值,则张量遍历单元可以保持存储在元素z1,2中的中间循环的更新的部分地址值。在该示例中,中间循环的更新的部分地址偏移值(6)小于内层循环的终止值(12)。因此,张量遍历单元保持存储在中间循环的部分地址偏移元素z1,2中的更新的部分地址偏移值,而不递增外层循环的部分地址偏移值。然后,处理器可通过以下来访问元素v1[0][1][0]:执行指令“locatetensor”,以定位与v1[0][1][0]相对应的存储器地址。响应于接收该指令,硬件加法器单元通过以下来确定存储器地址偏移:计算存储在部分地址值元素208的行1(行208a)中的每个部分地址偏移值元素208中的值的总和。这里,硬件加法器单元确定存储在元素z1,1、z1,2和z1,3中的值的总和。然后,处理器可通过以下来访问元素v1[0][1][0]:将基础存储器地址与所确定的存储器地址偏移(即,在该示例中为6)相加来确定存储器地址,并基于所确定的存储器地址来访问存储介质中所存储的数据。在另一个示例中,硬件加法器可通过确定基础存储器地址与存储在元素z1,1、z1,2和z1,3中的值的总和来确定元素v1[0][1][0]的存储器地址。然后,处理器可以基于所确定的存储器地址来访问存储介质中所存储的数据。图2f示出根据程序212访问元素v1[0][1][1]。例如,在程序完成针对中间循环的第二次迭代的内层循环的第一次迭代之后,处理器可以执行指令“iteratetensor”,该指令“iteratetensor”在程序进入针对中间循环的第二次迭代的内层循环的第二次迭代时(即,i=0,j=1,k=1),更新部分地址偏移值。在一些实施方式中,张量遍历单元通过以下来更新部分地址偏移值:将与内层循环(由内层嵌套循环索引变量i追踪的循环)相对应的维度的部分地址偏移值元素208递增与内层循环相对应的维度的步长值。在该示例中,使用硬件加法器单元将存储在部分地址偏移值元素z1,1中的部分地址偏移值递增存储在步长值元素x1,1中的步长值。为内层循环存储的所得的更新的部分地址偏移值是存储在z1,1中的先前值与存储在x1,1中的值的总和,即0+1=2。在一些实施方式中,张量遍历单元将存储在元素z1,1中的更新的部分偏移地址值与存储在元素y1,1中的内层循环的终止值进行比较。如果存储在z1,1中的更新的部分偏移地址值等于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可将存储在元素z1,1中的部分偏移地址值的值重置为存储在元素v1,1中的内层循环的初始值。此外,张量遍历单元可将与存储在元素z1,2中的中间循环相对应的维度的部分地址偏移值递增存储在x1,2中的中间循环的步长值。如果存储在元素z1,1中的更新的部分偏移地址值小于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可以保持存储在元素z1,1中的内层循环的更新的部分地址值。在该示例中,内层循环的更新的部分地址偏移值(1)小于内层循环的终止值(2)。因此,张量遍历单元保持存储在内层循环的部分地址偏移元素z1,1中的更新的部分地址偏移值,而不递增中间循环的部分地址偏移值。然后,处理器可通过以下来访问元素v1[0][1][1]:执行指令“locatetensor”,以定位与v1[0][1][1]相对应的存储器地址。响应于接收该指令,硬件加法器单元通过以下来确定存储器地址偏移:计算存储在部分地址值元素208的行1(行208a)中的每个部分地址偏移值元素208中的值的总和。这里,硬件加法器单元确定存储在元素z1,1、z1,2和z1,3中的值的总和。然后,处理器可通过以下来访问元素v1[0][1][1]:将基础存储器地址与所确定的存储器地址偏移(即,在该示例中为7)相加来确定存储器地址,并基于所确定的存储器地址来访问存储介质中所存储的数据。在另一个示例中,硬件加法器可通过确定基础存储器地址与存储在元素z1,1、z1,2和z1,3中的值的总和来确定元素v1[0][1][1]的存储器地址。然后,处理器可以基于所确定的存储器地址来访问存储介质中所存储的数据。图2g示出根据程序212访问元素v1[1][0][0]。例如,在程序完成针对中间循环的第二次迭代的内层循环的第二次迭代之后,处理器可以执行指令“iteratetensor”,该指令“iteratetensor”在程序进入外层循环的第二次迭代时(即,i=1,j=0,k=0),更新部分地址偏移值。在一些实施方式中,张量遍历单元通过以下来更新部分地址偏移值:将与内层循环(由内层嵌套循环索引变量i追踪的循环)相对应的维度的部分地址偏移值元素208递增与内层循环相对应的维度的步长值。在该示例中,使用硬件加法器单元将存储在部分地址偏移值元素z1,1中的部分地址偏移值递增存储在步长值元素x1,1中的步长值。为内层循环存储的所得的更新的部分地址偏移值是存储在z1,1中的先前值与存储在x1,1中的值的总和,即1+1=2。在一些实施方式中,张量遍历单元将存储在元素z1,1中的更新的部分偏移地址值与存储在元素y1,1中的内层循环的终止值进行比较。如果存储在z1,1中的更新的部分偏移地址值等于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可将存储在元素z1,1中的部分偏移地址值的值重置为存储在元素v1,1中的内层循环的初始值。此外,张量遍历单元可将与存储在元素z1,2中的中间循环相对应的维度的部分地址偏移值递增存储在x1,2中的中间循环的步长值。如果存储在元素z1,1中的更新的部分偏移地址值小于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可以保持存储在元素z1,1中的内层循环中的更新的部分地址值。在该示例中,内层循环的更新的部分地址偏移值(2)等于内层循环的终止值(2)。因此,张量遍历单元将存储在元素z1,1中的部分偏移地址值重置为存储在元素v1,1中的初始值。此外,张量遍历单元将存储在元素z1,2中的中间循环的部分地址偏移值增加存储在x1,2中的中间循环的步长值。在该示例中,中间循环的更新的部分地址偏移值是12(6+6)。在一些实施方式中,张量遍历单元响应于确定更新中间循环的部分偏移地址值,将存储在元素z1,2中的中间循环的更新的部分偏移地址值与存储在元素y1,2中的中间循环的终止值进行比较。如果存储在z1,2中的中间循环值的更新的部分偏移地址等于存储在元素y1,2中的中间循环的终止值,则张量遍历单元可将存储在元素z1,2中的部分偏移地址值的值重置为存储在元素v1,2中的中间循环的初始值。此外,张量遍历单元可将与存储在元素z1,3中的外层循环相对应的维度的部分地址偏移值递增存储在x1,3中的外层循环的步长值。如果存储在元素z1,2中的中间循环的更新的部分偏移地址值小于存储在元素y1,2中的中间循环的终止值,则张量遍历单元可以保持存储在元素z1,2中的中间循环的更新的部分地址值。在该示例中,中间循环的更新的部分地址偏移值(12)等于中间循环的终止值(12)。因此,张量遍历单元将存储在元素z1,2中的部分偏移地址值重置为存储在元素v1,2中的初始值。此外,张量遍历单元将存储在元素z1,3中的外层循环的部分地址偏移值递增存储在x1,3中的外层循环的步长值。在该示例中,外层循环的更新的部分地址偏移值是2(0+2)。然后,处理器可通过以下来访问元素v1[1][0][0]:执行指令“locatetensor”,以定位与v1[1][0][0]相对应的存储器地址。响应于接收该指令,硬件加法器单元通过以下来确定存储器地址偏移:计算存储在部分地址值元素208的行1(行208a)中的每个部分地址偏移值元素208中的值的总和。这里,硬件加法器单元确定存储在元素z1,1、z1,2和z1,3中的值的总和。然后,处理器可通过以下来访问元素v1[1][0][0]:将基础存储器地址与所确定的存储器地址偏移(即,在该示例中为2)相加来确定存储器地址,并基于所确定的存储器地址来访问存储介质中所存储的数据。在另一个示例中,硬件加法器可通过确定基础存储器地址与存储在元素z1,1、z1,2和z1,3中的值的总和来确定元素v1[1][0][0]的存储器地址。然后,处理器可以基于所确定的存储器地址来访问存储介质中所存储的数据。图2h示出根据程序212访问元素v1[1][0][1]。例如,在程序完成针对外层循环的第二次迭代的内层循环的第一次迭代之后,处理器可以执行指令“iteratetensor”,该指令“iteratetensor”在程序进入针对外层循环的第二次迭代的内层循环的第二次迭代时(即,i=1,j=0,k=1),更新部分地址偏移值。在一些实施方式中,张量遍历单元通过以下来更新部分地址偏移值:将与内层循环(由内层嵌套循环索引变量i追踪的循环)相对应的维度的部分地址偏移值元素208递增与内层循环相对应的维度的步长值。在该示例中,使用硬件加法器单元将存储在部分地址偏移值元素z1,1中的部分地址偏移值递增存储在步长值元素x1,1中的步长值。为内层循环存储的所得的更新的部分地址偏移值是存储在z1,1中的先前值与存储在x1,1中的值的总和,即0+1=2。在一些实施方式中,张量遍历单元将存储在元素z1,1中的更新的部分偏移地址值与存储在元素y1,1中的内层循环的终止值进行比较。如果存储在z1,1中的更新的部分偏移地址值等于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可将存储在元素z1,1中的部分偏移地址值的值重置为存储在元素v1,1中的内层循环的初始值。此外,张量遍历单元可将与存储在元素z1,2中的中间循环相对应的维度的部分地址偏移值递增存储在x1,2中的中间循环的步长值。如果存储在元素z1,1中的更新的部分偏移地址值小于存储在元素y1,1中的内层循环的终止值,则张量遍历单元可以保持存储在元素z1,1中的内层循环的更新的部分地址值。在该示例中,内层循环的更新的部分地址偏移值(1)小于内层循环的终止值(2)。因此,张量遍历单元保持存储在内层循环的部分地址偏移元素z1,1中的更新的部分地址偏移值,而不递增中间循环的部分地址偏移值。然后,处理器可通过以下来访问元素v1[1][0][1]:执行指令“locatetensor”,以定位与v1[1][0][1]相对应的存储器地址。响应于接收该指令,硬件加法器单元通过以下来确定存储器地址偏移:计算存储在部分地址值元素208的行1(行208a)中的每个部分地址偏移值元素208中的值的总和。这里,硬件加法器单元确定存储在元素z1,1、z1,2和z1,3中的值的总和。然后,处理器可通过以下来访问元素v1[1][0][1]:将基础存储器地址与所确定的存储器地址偏移(即,在该示例中为3)相加来确定存储器地址,并基于所确定的存储器地址来访问存储介质中所存储的数据。在另一个示例中,硬件加法器可通过确定基础存储器地址与存储在元素z1,1、z1,2和z1,3中的值的总和来确定元素v1[1][0][1]的存储器地址。然后,处理器可以基于所确定的存储器地址来访问存储介质中所存储的数据。张量遍历单元可以继续确定嵌套循环的剩余迭代的存储器地址,从而以类似的方式访问剩余的张量元素。下面的表1示出使用图2a-2h所示的步长值的张量元素的存储器地址偏移值。张量元素存储器地址偏移值(i=0,j=0,k=0)0(i=0,j=0,k=1)1(i=0,j=1,k=0)6(i=0,j=1,k=1)7(i=1,j=0,k=0)2(i=1,j=0,k=1)3(i=1,j=1,k=0)8(i=1,j=1,k=1)9(i=2,j=0,k=0)4(i=2,j=0,k=1)5(i=2,j=1,k=0)10(i=2,j=1,k=1)11表1图3是示出用于确定多维张量变量的地址的示例过程300的流程图。过程300可以由一个或多个计算机的系统执行,系统例如图1的计算系统100。该系统包括张量遍历单元,该张量遍历单元具有包括初始值元素、步长值元素、终止值元素和部分地址偏移元素的张量地址值元素。张量遍历单元还包括具有一个或多个硬件加法器的硬件加法器单元。系统获得访问n维张量的特定元素的指令(302)。n维张量可包括跨n个维度中的每个维度布置的多个元素,其中n是等于或大于1的整数。例如,系统可包括处理单元(例如,处理单元102),其执行用于访问张量的特定元素的指令。在一些实施方式中,指令可表示用于处理嵌套循环的指令,所述嵌套循环包括第一循环、第二循环和第三循环。第一循环可以是嵌套在第二循环内的内循环,第二循环可以是嵌套在第三循环内的中间循环。可以使用第一索引变量来迭代第一循环。类似地,可以使用第二索引变量来迭代第二循环,且可以使用第三索引变量来迭代第三循环。例如,可将程序存储在可通过处理单元执行的存储介质中。程序可以指定字符数组变量v1(或另一种类型的数组),第一维度为2,第二维度为2,第三维度为3。程序可以指定用于遍历变量v1的嵌套for循环。for循环可以在由嵌套循环索引变量i追踪的外层循环中遍历v1的第三维度。for循环还可以在由嵌套循环索引变量j追踪的中间循环中遍历v1的第二维度,并在由嵌套循环索引变量k追踪的内层循环中遍历第一维度。系统使用一个或多个硬件加法器和部分地址偏移元素来确定特定元素的地址(304)。在一些实施方式中,特定元素的地址可以是与n维张量的另一个元素偏移的地址。例如,特定元素的地址可以是从n维张量的另一个元素的基础存储器地址偏移的地址。对于一个或多个张量索引元素中的每个张量索引元素,系统可通过使用硬件加法器将部分地址偏移元素的当前值一起与基础存储器地址相加来确定存储器地址。部分地址偏移元素的当前值是基于循环的当前迭代。在一些实施方式中,在确定张量的任何元素的地址偏移之前,系统可以设置存储在张量地址值元素中的值。例如,处理器可以执行指令“initializeelements”,该指令“initializeelements”初始化张量地址值元素。对于内层循环的每次迭代,系统可以使用内层循环的步长值来更新内层循环的部分地址偏移值。在针对中间循环和外层循环的第一次迭代的内层循环的第一次迭代之前(即,i=0,j=0,k=0),可将内层循环的部分地址偏移值设置为内层循环的初始值。在内层循环的每次迭代之后,系统可将内层循环的部分地址偏移值更新为内层循环的先前部分地址偏移值和内层循环的步长值的总和。然后,系统可将内层循环的更新的部分地址偏移值与内层循环的终止值进行比较。如果内层循环的更新的部分地址偏移值小于内层循环的终止值,则系统可以在内层循环的部分地址偏移值元素中维持内层循环的更新的部分地址偏移值,而不修改任何其他部分地址偏移值,至少直到内层循环的下一次迭代。如果更新的部分地址偏移值等于内层循环的终止值,则系统可将部分地址偏移值重置为内层循环的初始值,并使用内层循环的步长值来递增中间循环的部分地址偏移值。例如,系统可将中间循环的部分地址偏移值更新为中间循环的先前部分地址偏移值和中间循环的步长值的总和。然后,系统可将中间循环的更新的部分地址偏移值与中间循环的终止值进行比较。如果中间循环的更新的部分地址偏移值小于内层循环的终止值,则系统可以在中间循环的部分地址偏移值元素中维持中间循环的更新的部分地址偏移值,而不修改任何其他部分地址偏移值,至少直到中间循环的下一次迭代。如果该更新的部分地址偏移值等于中间循环的终止值,则系统可将部分地址偏移值重置为中间循环的初始值,并使用外层循环的步长值来递增外层循环的部分地址偏移值。例如,系统可将外层循环的部分地址偏移值更新为外层循环的先前部分地址偏移值和外层循环的步长值的总和。然后,系统可将外层循环的更新的部分地址偏移值与外层循环的终止值进行比较。如果外层循环的更新的部分地址偏移值小于外层循环的终止值,则系统可以在外层循环的部分地址偏移值元素中维持外层循环的更新的部分地址偏移值。如果该更新的部分地址偏移值等于外层循环的终止值,则系统可以在张量的每个元素已被访问时将每个循环的部分地址偏移值重置为它们相应的初始值。系统输出数据,该数据指示用于访问n维张量的特定元素的所确定的地址(306)。例如,张量遍历单元可以基于当前部分地址偏移值和基础存储器地址的总和来输出所确定的地址。系统的处理单元可以使用存储器地址偏移值来访问存储介质中的n维数组变量的特定元素。本说明书所述主题和功能操作的实施例可以实现在数字电子电路中、在有形体现的计算机软件或固件中、在计算机硬件中——包括本说明书中公开的结构及其结构等同物、或者在它们中的一个或多个的组合中。本说明书所述主题的实施例可以实现为一个或多个计算机程序——即,在有形非暂时性程序载体上编码的一个或多个计算机程序指令的模块,用于由数据处理设备执行或控制数据处理设备的操作。替选地或附加地,程序指令可以在人工生成的传播信号上编码,传播信号例如机器生成的电、光或电磁信号,其被生成以编码信息,用于传输到合适的接收器设备以供数据处理设备执行。计算机存储介质可以是机器可读存储装置、机器可读存储基底、随机或串行存取存储器装置、或它们中的一个或多个的组合。本说明书所述的过程和逻辑流程可通过执行一个或多个计算机程序的一个或多个可编程计算机来进行,以通过对输入数据进行操作并生成输出来进行功能。过程和逻辑流程也可通过专用逻辑电路来执行,并且设备也可以实现为专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或gpgpu(通用图形处理单元)。作为示例,适合于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于进行或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器装置。通常,计算机还将包括用于存储数据的一个或多个大容量存储装置,或可操作地耦合以从其接收数据或将数据传输至其,或者这两者,该一个或多个大容量存储装置例如磁盘、磁光盘或光盘。但是,计算机无需具有这样的装置。此外,计算机可以嵌入在另一个装置中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器、或便携式存储装置,例如,通用串行总线(usb)闪存驱动器等等。适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器装置,作为示例,包括半导体存储器装置,例如eprom、eeprom和闪存装置;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及cdrom和dvd-rom磁盘。处理器和存储器可通过专用逻辑电路补充或并入专用逻辑电路中。虽然本说明书包含很多特定的实施方式细节,但是这些不应解释为对任何发明或可要求保护的内容的范围的限制,而是作为可以特定于特定发明的特定实施例的特征的描述。在单独实施例的背景下在本说明书中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的背景下描述的各个特征也可以单独地或以任何适当的子组合在多个实施例中实现。此外,虽然可将上面的特征描述为以某些组合起作用甚至起初如此要求保护,但是在某些情况下可以从组合中切除来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可以涉及子组合或子组合的变化。类似地,虽然在附图中以特定的顺序示出操作,但是这不应理解为要求以所示的特定顺序或按依次顺序进行这些操作,或者要求进行所有示出的操作,以实现期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施例中的各个系统模块和组件的分离不应理解为在所有实施例中都需要这样的分离,并且应当理解,所述程序组件和系统通常可以在单个软件产品中集成在一起或者打包成多个软件产品。已经描述了本主题的特定实施例。其他实施例落入所附权利要求书的范围。例如,权利要求书中记载的动作可以按照不同的顺序进行并仍然实现期望的结果。作为一个示例,附图中所示的过程不一定需要所示的特定顺序或依次顺序来实现期望的结果。在某些实施方式中,多任务和并行处理可能是有利的。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1