CN109324827B - 用于处理用于访问数据的指令的装置、方法和系统 - Google Patents
用于处理用于访问数据的指令的装置、方法和系统 Download PDFInfo
- Publication number
- CN109324827B CN109324827B CN201810841905.XA CN201810841905A CN109324827B CN 109324827 B CN109324827 B CN 109324827B CN 201810841905 A CN201810841905 A CN 201810841905A CN 109324827 B CN109324827 B CN 109324827B
- Authority
- CN
- China
- Prior art keywords
- address
- value
- tensor
- offset value
- address offset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000004364 calculation method Methods 0.000 claims abstract description 43
- 238000010801 machine learning Methods 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 6
- 230000008569 process Effects 0.000 description 11
- 238000013528 artificial neural network Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 6
- 238000003491 array Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/656—Address space sharing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
方法、系统和装置,包括用于访问数据的装置。在一些实施方式中,装置包括地址偏移值元素,每个地址偏移值元素被配置为存储地址偏移值。对于每个地址偏移值元素,装置可以包括地址计算元素,每个地址计算元素存储被用于确定地址偏移值的值。一个或多个处理器被配置为接收用于使用张量的张量元素执行计算的程序。处理器可以在程序中识别具有相应数据数组的序言或结尾循环,该数据数组用于存储序言或结尾循环的值,并且对于与序言或结尾循环相应的第一地址偏移值元素,处理器至少基于序言或结尾循环的迭代的数量来用各自的值填充用于第一地址偏移值元素的地址计算元素。
Description
背景技术
本说明书大体上涉及访问用于使用专用计算单元执行机器学习计算的数据。
神经网络是机器学习模型,对于接收的输入,其采用一个或多个模型层来生成输出,例如分类。除了外层之外,一些神经网络还包括一个或多个隐藏层。每个隐藏层的输出用作网络中下一层,即网络的下一个隐藏层或输出层,的输入。层中的每个按照各自参数集合的当前值从接收的输入产生输出。
一些神经网络包括一个或多个卷积神经网络层。每个卷积神经网络层都有相关的内核集合。内核可以被表示为权重输入的矩阵结构。每个卷积层使用内核来处理层的输入。层的输入集合也可以被表示为矩阵结构。
发明内容
本说明书描述了与确定序言和/或结尾数据的内存地址以及访问数据有关的技术,用于使用专用计算单元的机器学习计算。
通常,本说明书中描述的主题的一个创新方面可以被具体化为用于访问数据的装置。装置可以包括地址偏移值元素,每个地址偏移值元素被配置为存储地址偏移值。对于每个地址值元素,装置可以包括地址计算元素,每个地址计算元素存储被用于确定存储在地址偏移值元素中的地址偏移值的值。装置可以包括一个或多个处理器,该处理器被配置为接收用于使用N维张量的张量元素执行计算的程序。处理器可以被配置为在程序中识别具有相应数据数组的序言或结尾循环,该数据数组用于存储序言或结尾循环的值。一个或多个处理器可以被实施为包括一个或多个加法器的电路。
处理器可以被配置为对于与序言或结尾循环相应的第一地址偏移值元素,至少基于序言或结尾循环的迭代的数量,用各自的值填充用于第一地址偏移值元素的地址计算元素。处理器可以被配置为对于N维张量的每个维度的第二地址偏移值元素,至少基于程序中的与维度相应的循环的迭代的数量,用各自的值填充用于第二地址偏移值元素的地址计算元素。处理器可以被配置为对于每个数据数组的每个数据元素,使用在确定数据元素的内存地址时数据数组的第一地址偏移值的当前值来确定数据数组的内存地址。在数据数组的数据元素的内存地址的每次确定之后,调整数据数组的第一地址偏移值。
处理器可以被配置为对于N维张量的每个张量元素,使用在确定张量元素的内存地址时每个第二地址偏移值的当前值来确定张量元素的内存地址。在N维张量的张量元素的内存地址的每次确定之后,调整第二地址偏移值中的一个或多个。处理器可以被配置为输出指示每个张量元素和每个数据元素的确定的地址的数据。
这些和其他实施方式可以各自可选地包括以下特征中的一个或多个。在一些方面,装置可以包括处理单元,该处理单元被配置为基于每个确定的地址访问每个张量元素和每个数据元素。例如,处理单元可以访问张量和数据元素以执行机器学习或其他计算。在一些示例中,处理单元可以在运行程序时访问张量和数据元素,用于使用N维张量的张量元素执行计算。一个或多个数据数组可以包括序言数据数组,该序言数据数组包括数据元素。每个数据元素可以存储用于机器学习计算的偏差值。
在一些方面,一个或多个处理器可以以第一次序确定每个张量元素的内存地址,并且一个或多个处理器在第一次序之前或之后以第二次序确定每个数据元素的内存地址。确定特定张量元素的地址可以包括使用一个或多个硬件加法器确定每个维度的地址偏移值的总和。在一些方面,确定特定数据元素的地址可以包括确定特定数据元素的地址偏移值和数据元素的基地址的总和。
在一些方面,地址计算元素包括存储序言或结尾循环的第一初始值的第一初始值元素,存储序言或结尾循环的第一步长值的第一步长值元素,以及对于N维张量的每个维度:存储维度的第二初始值的第二初始值元素和存储维度的第二步长值的第二步长值元素。
在一些方面,每个地址偏移值元素、每个初始值元素和每个步长值元素是寄存器。在一些方面,一个或多个处理器基于指定每个数据数组的循环和N-维张量的嵌套循环的单个指令来初始化每个第一初始值、每个第一步长值、每个第二初始值和每个第二步长值。
在一些方面,一个或多个处理器被配置为对于每个维度,在维度的嵌套循环的每次迭代之后,通过将步长值加到维度的先前的地址偏移值上,确定维度的地址偏移值。
在一些方面,对于每个维度,装置包括存储维度的限制值的限制值元素。一个或多个处理器还可以被进一步配置为对于每个维度,确定所确定的维度的地址偏移值是否等于维度的限制值。响应于确定与第一嵌套循环相应的第一维度的确定的地址偏移值等于第一维度的限制值,一个或多个处理器可以将第一维度的地址偏移值重置为第一维度的初始值,并且对于与嵌套第一嵌套循环的第二嵌套循环相应的第二维度,使用一个或多个硬件加法器将第二维度的地址偏移值更新为等于第二维度的步长值和第二维度的地址偏移值的总和。
本说明书中描述的主题可以在特定实施例中实施,以便实现以下优点中的一个或多个。使用寄存器来跟踪内存地址值允许程序迭代深度嵌套的循环并使用一条指令访问序言和/或结尾数据。通过基于存储在寄存器中的值应用简单的加法,可以快速确定内存地址值。专用计算单元可以包括计算地址的加法器。通过使用加法器而不是算术逻辑单元(ALU)、乘法器或其他复杂的电路,可以减小电路的尺寸和电路的制造成本。使用硬件加法器确定内存地址值允许减少处理器处的计算周期的数量,并增加用于其他计算任务的处理器带宽。二维寄存器架构允许同时跟踪多维张量和序言/结尾数据数组,其中每个多维张量具有不同的维度。单个硬件编码指令可以被用于确定序言和/或结尾数据元素和张量元素的内存地址并且访问序言和/或结尾数据元素和张量元素的数据。单个指令的使用导致更密集的编码,更少的内存资源被使用,和/或需要更少的内存资源。
该方面和其他方面的其他实施方式包括相应的系统、方法和计算机程序,该计算机程序被配置为执行方法的动作,被编码在计算机存储设备上。可以借助于安装在系统上的在操作中使系统执行动作的软件、固件、硬件或它们的组合来如此配置一个或多个计算机的系统。一个或多个计算机程序可以借助于具有在由数据处理装置运行时使得装置执行动作的指令来被如此配置。
在下面的附图和描述中阐述了本说明书中描述的主题的一个或多个实施方式的细节。从说明书、附图和权利要求,本主题的其他潜在特征、方面和优点将变得显而易见。
附图说明
图1是示例计算系统的框图。
图2A-2J示出了示例张量遍历单元。
图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循环类似地访问权重或参数的值,例如,使用包括多个嵌套for循环的循环嵌套。张量遍历单元也可以确定计算中使用的权重或参数的内存地址和/或计算的输出的内存地址,该计算的输出可以被用作神经网络的隐藏层的输入。
序言是在主函数或主循环嵌套之前被执行的一个或多个循环。例如,序言可以被用于在使用张量元素的值执行计算之前执行函数(例如,加载或计算偏差值)。序言可以包括在运行张量的嵌套循环之前被运行的一个或多个循环。例如,序言可以被用于确定神经网络计算的偏差值或权重。类似地,结尾是在主函数或主循环嵌套之后被执行的一个或多个循环。例如,结尾可以被用于在使用张量元素的值执行计算之后执行函数。本文描述的张量遍历单元可以使用与被用于确定用于访问张量的张量元素的内存地址的相同的指令来确定用于访问一个或多个序言和/或结尾数据数组的数据元素的内存地址。
例如,指令可以指定用于确定序言数据元素的内存地址的for循环,和用于确定张量元素的内存地址的嵌套循环。在另一示例中,指令可以指定用于确定结尾数据元素的内存地址的for循环,和用于确定张量元素的内存地址的嵌套循环。在又一示例中,指令可以指定用于确定序言数据元素的内存地址的for循环,用于确定张量元素的内存地址的嵌套for循环,以及用于确定结尾数据元素的内存地址的for循环。如下所述,张量遍历单元可以将指令转换为数值集合,该数值集合被用于基于指令指定的循环来迭代地确定每个数据元素的内存地址。
张量遍历单元可以依次确定内存地址,例如一次一个,并输出内存地址以供处理单元使用。处理单元可以使用内存地址访问数据元素和张量元素,例如,以使用元素的值执行神经网络计算。
图1示出了用于遍历张量的示例计算系统100的框图。通常,计算系统100处理输入108以生成输出116。计算系统100可以被配置为执行线性代数计算,例如机器学习计算。输入108可以是能够被计算系统100处理的任何合适的数据。计算系统100包括处理单元102、存储介质104和张量遍历单元106。
通常,当处理单元102运行用于访问张量的特定元素的指令时,处理单元102可以访问存储介质104以读取表示特定元素的值的数据114。处理单元102可以使用由张量遍历单元106确定的内存地址来访问存储介质104,以读取表示特定数据元素的值的数据114。例如,程序可以包括嵌套循环,并且处理单元102可以运行指令以根据与嵌套循环相关联的当前索引变量值来访问嵌套循环内的二维数组变量的元素。对于二维数组的每个元素,张量遍历单元106可以基于内存地址被确定时索引变量值的当前值,确定表示从元素的内存地址的偏移的地址偏移值。在另一示例中,张量遍历单元106可以在程序的运行之前确定地址偏移值,并且处理单元102可以从存储介质访问所确定的偏移值。然后,处理单元102可以使用地址偏移值并且从存储介质104访问二维数组变量的特定元素。
处理单元102被配置为处理计算系统100内的用于运行的指令,包括存储在存储介质104中的指令112或存储在另一存储设备中的其他指令。处理单元102可包括一个或多个处理器。存储介质104存储计算系统100内的信息。在一些实施方式中,存储介质104是易失性内存单元。在一些其他的实施方式中,存储介质104是非易失性内存单元。存储介质104还可以是另一种形式的计算机可读介质,例如软盘设备、硬盘设备、光盘设备,或磁带设备、闪存或其他类似的固态存储设备,或者包括存储区域网络中的设备或其他配置的设备阵列。当处理单元102运行指令时,指令使处理单元102执行一个或多个任务。
张量遍历单元106可以被实施为专用集成电路。张量遍历单元106可以被配置为确定与一个或多个张量以及序言和/或结尾的一个或多个数据数组相关联的内存地址值。这些值可以包括初始值、步长值、结束值、地址偏移值、基于地址偏移值的内存地址偏移值,和/或基于内存地址偏移值和基地址的内存地址值。
张量遍历单元106将张量索引转变为内存地址。例如,张量遍历单元106可以将N维张量索引集合转变为一维地址空间。张量遍历单元106可以通过使张量元素的内存地址成为元素的维度索引的组合(例如,线性组合)来执行这样的转变。
张量遍历单元106可以有效且可编程地生成引用张量元素序列的内存地址序列。地址序列与将被软件遍历例程中的循环嵌套访问的张量元素的序列相对应。在遍历期间被访问的元素的序列在内存中可以是或者可以不是物理上连续的。
类似地,张量遍历单元106可以有效且可编程地生成引用序言的数据元素序列和/或结尾的数据元素序列的内存地址序列。例如,程序可以包括在循环嵌套之前被运行的序言循环和/或在循环嵌套之后被运行的结尾循环。序言或结尾的地址序列可以与将被软件遍历例程中的序言或结尾循环访问的数据元素的序列相对应。
张量遍历单元106包括张量地址值元素122和数学单元124。张量地址值元素122中的每一个可以是存储元素,例如寄存器或其他合适的存储电路。在一些实施方式中,张量地址值元素122可以被物理地或逻辑地安排为不同的组,如下面参考图2A-2J更详细描述的。在一些实施方式中,一组张量地址值元素122可以被物理地或逻辑地安排为多维数组。例如,每组张量地址值元素122可以被物理地或逻辑地安排为二维数组。
张量遍历单元106可以接收指定循环嵌套的指令,该循环嵌套包括用于遍历N维张量的嵌套循环。指令还可以指定用于遍历序言数据数组的循环和/或用于遍历结尾数据数组的循环。例如,由处理单元102运行的程序可以基于张量的张量元素的值来执行机器学习计算。此外,程序可以执行在使用一个或多个序言的计算之前的功能和/或在使用一个或多个结尾的计算之后的功能。
张量遍历单元106可以将指令转变为张量的每个维度以及序言和/或结尾的每个数据数组的初始值、步长值和结束值。每个维度或数组的初始值可以基于(例如,等于)被用于遍历维度或数组的循环的起始值。例如,如果循环i的形式为“for i=0;i<3”,与循环i相应的维度的初始值可以为零。在一些实施方式中,初始值可以基于从张量、序言或结尾的基地址偏移的期望地址。张量遍历单元106可以确定初始值、步长值和/或结束值,使得每个张量元素和每个数据元素被分配唯一的内存地址(或与基地址结合以确定唯一内存地址的唯一内存地址值)。例如,张量遍历单元106可以基于每个维度和数组中包括的元素的数量,确定张量的每个维度以及序言和/或结尾的每个数据数组的步长值和结束值。张量遍历单元106可以将确定值存储在各自的元素中,并使用这些值来确定内存地址,如下所述。
张量遍历单元106可以依次确定张量元素以及序言和/或结尾数据数组的内存地址,例如,一次一个。在一些实施方式中,处理单元102包括有限状态机(FSM),其指令张量遍历单元106确定内存地址和/或何时暂停确定过程。FSM也可以是计算系统100的独立设备。在活跃时,张量遍历单元106可以依次确定张量元素和数据元素的内存地址,直到所有内存地址被确定。当已经为每个张量元素和每个数据元素确定了内存地址时,张量遍历单元106可以停止。在一些实施方式中,张量遍历单元106可以响应于被接收用于特定张量元素或特定数据元素的各指令,逐个确定特定张量元素或特定数据元素的内存地址。
在一些实施方式中,张量遍历单元106确定每个张量元素和/或序言数据数组和/或结尾数据数组的每个数据元素的内存地址偏移值。在该示例中,处理单元102可以基于元素的基地址和内存地址偏移值来访问张量元素或数据元素。在另一示例中,张量遍历单元106通过确定每个元素各自的内存地址偏移值并将内存地址偏移值加到基地址上,来确定每个张量元素和每个数据元素的内存地址。
数学单元124可以包括一个或多个算术逻辑单元(ALU)、一个或多个硬件乘法器、和/或一个或多个硬件加法器。每个加法器可以包括被配置为执行加法运算的数字电路。如下所述,数学单元可以加上部分地址偏移值以确定张量的元素的总地址偏移值。由于硬件加法器比算术逻辑单元(ALU)和硬件乘法器需要更少的电路组件,数学单元124的电路的尺寸(以及因此张量遍历单元106的尺寸)可以小于包括ALU和/或乘法器的张量遍历单元。另外,制造具有硬件加法器的张量遍历单元的成本可以低于制造具有ALU和/或乘法器的张量遍历单元的成本。在一些实施方式中,数学单元124仅包括加法器而不包括其他数学或逻辑电路。
图2A示出了张量遍历单元的张量地址值元素200的示例集合。张量地址值元素200可以与张量遍历单元106的张量地址值元素122相应。张量遍历单元200包括一组初始值元素202、一组步长值元素204、一组结束值元素206、以及一组地址偏移值元素208。
初始值元素202可以被物理地或逻辑地安排为具有M行和N列的二维数组,其中M和N是大于或等于1的整数。初始值元素202可以存储被用于确定张量元素、序言数据元素或结尾数据元素的内存地址的地址偏移的初始值。在一些实施方式中,初始值元素202的每一行可以表示张量、序言或结尾的初始值。例如,如果程序定义了两个数组变量V1和V2,则张量遍历单元可以分配行202a和202b以分别存储数组变量V1和V2的初始值。在该示例中,变量V1可以是序言的偏差变量,并且变量V2可以是张量变量。
在一些实施方式中,初始值元素202的每列可以表示与张量、序言数组或结尾数组相关联的嵌套循环索引变量值的初始值。例如,程序可以定义用于访问变量V1的序言循环。序言循环可以通过嵌套循环索引变量h索引。在该示例中,张量遍历单元可以分配初始值元素V1,1以存储嵌套循环索引变量h的初始值。
类似地,如果程序定义具有用于访问变量V2的三个循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以分配初始值元素V2,1、V2,2和V2,3以分别存储嵌套循环索引变量i、j和k的初始值。如果程序定义了用于访问变量V3的结尾循环,其中循环由嵌套循环索引变量l索引,则张量遍历单元可以分配初始值元素V3,1以存储嵌套循环索引变量l的初始值。在初始值元素数组中序言、张量和结尾行的顺序可以变化。例如,在另一实施方式中,行202a可以存储结尾的初始值,并且行204a可以存储序言行的初始值。以下参考图2B-2J更详细地描述初始值元素202。
步长值元素204可以被物理地或逻辑地安排为具有与初始值元素202相同的维度的二维数组,其中步长值元素204的每个元素在初始值元素202中具有相应的元素。步长值元素204可以存储被用于确定张量元素、序言数据元素和/或结尾数据元素的内存地址的地址偏移的步长值。在一些实施方式中,步长值元素204的每行可以表示张量、序言或结尾的步长值。例如,如果程序定义了两个数组变量V1和V2,则张量遍历单元可以分配行204a和204b以分别存储数组变量V1和V2的步长值。在一些实施方式中,步长值元素204的每列可以表示与张量、序言或结尾相关联的嵌套循环索引变量值的步长值。例如,如果程序定义了用于访问变量V1的序言循环,其中序言循环由循环索引变量h索引,则张量遍历单元可以分配步长值元素X1,1以存储嵌套循环索引变量h的步长值。类似地,如果程序定义了具有用于访问变量V2的三个循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以分配步长值元素X2,1、X2,2和X2,3以分别存储嵌套循环索引变量i、j和k的步长值。如果程序定义了用于访问变量V3的结尾循环,其中循环由嵌套循环索引变量l索引,则张量遍历单元可以分配步长值元素X3,1以存储嵌套循环索引变量l的初始值。以下参考图2B-2J更详细地描述步长值元素204。
结束值元素206可以被物理地或逻辑地安排为具有与初始值元素202相同的维度的二维数组,其中结束值元素206的每个元素在初始值元素202中具有相应的元素。结束值元素206可以存储被用于确定张量元素、序言数据元素和/或结尾数据元素的内存地址的地址偏移的结束值。在一些实施方式中,结束值元素206的每行可以表示张量、序言或结尾的结束值。例如,如果程序定义了两个数组变量V1和V2,则张量遍历单元可以分配行206a和206b以分别存储数组变量V1和V2的结束值。在一些实施方式中,结束值元素206的每列可以表示与张量、序言或结尾相关联的嵌套循环索引变量值的结束值。例如,如果程序定义了具有用于访问变量V1的序言循环的嵌套循环,其中序言循环由嵌套循环索引变量h索引,则张量遍历单元可以分配结束值元素Y1,1以存储循环索引变量h的结束值。
类似地,如果程序定义了具有用于访问变量V2的三个循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以分配结束值元素Y1,1、Y1,2和Y1,3以分别存储嵌套循环索引变量i、j和k的结束值。如果程序定义了用于访问变量V3的结尾循环,其中结尾循环由嵌套循环变量l索引,则张量遍历单元可以分配结束值元素Y3,1以存储循环索引变量l的结束值。以下参考2B-2J更详细地描述结束值元素206。
地址偏移值元素208可以被物理地或逻辑地安排为具有与初始值元素202相同的维度的二维数组,其中地址偏移值元素208的每个元素在初始值元素202中具有相应的元素。地址偏移值元素206可以存储被用于确定张量元素、序言数据元素和/或结尾数据元素的内存地址的地址偏移值。在一些实施方式中,地址偏移值元素208的每行可以表示张量、序言或结尾的部分地址偏移值。例如,张量或数据数组可包括多个维度。在该示例中,一行地址偏移值可以包括每个维度的部分地址偏移元素。
例如,如果程序定义了两个数组变量V1和V2,则张量遍历单元可以分配行208a和208b以分别存储数组变量V1和V2的地址偏移值。在一些实施方式中,地址偏移值元素208的每列可以表示与张量、序言或结尾相关联的嵌套循环索引变量值的部分地址偏移值。例如,如果程序定义了具有用于访问变量V1的序言循环的嵌套循环,其中序言循环由嵌套循环索引变量h索引,则张量遍历单元可以分配地址偏移值元素Z1,1以存储循环索引变量h的地址偏移值。
类似地,如果程序定义了具有用于访问变量V2的三个循环的嵌套循环,其中嵌套循环的每个循环由嵌套循环索引变量i、j和k索引,则张量遍历单元可以分配地址偏移值元素Z2,1、Z2,2和Z2,3以分别存储嵌套循环索引变量i、j和k的地址偏移值。如果程序定义了用于访问变量V3的结尾循环,其中结尾循环由嵌套循环变量l索引,则张量遍历单元可以分配地址值元素Z3,1以存储循环索引变量l的地址值。下面参考图2B-2J更详细地描述地址偏移值元素208。
图2B-2J示出了张量遍历单元如何使用张量地址值元素200来处理张量,包括确定张量的张量元素的内存地址值和序言数据元素的内存地址的示例。尽管该示例包括张量和序言,但是可以使用类似的处理来确定一个或多个张量和一个或多个结尾的组合,以及一个或多个序言、一个或多个张量和一个或多个结尾的组合的内存地址。
参考图2B,能够被处理单元102运行的程序212可以被存储在存储介质104或另一存储介质中。程序212指定整数数组变量V1的单个维度为三,并指定字符数组变量V2的第一维度为四、第二维度为二和第三维度为二。程序212指定用于遍历变量V2的嵌套for循环,其中for循环在由嵌套循环索引变量i跟踪的外循环中遍历V2的第一维度;在由嵌套循环索引变量j跟踪的中间循环中遍历V2的第二维度;并且在由嵌套循环索引变量k跟踪的内循环中遍历V的第三维度。程序212还指定了用于使用循环索引变量h遍历变量V1的序言for循环。
尽管本文描述的图2B-2J的示出的示例包括三个维度,具有不同数量的维度(例如,2、5、8或一些其他数量的维度)的张量的内存地址值可以以类似的方式被确定。例如,具有八个维度的张量可以被遍历,并且张量元素的内存地址可以使用深度为8的循环嵌套被确定。
在一些实施方式中,张量地址值元素200可以在程序开始时被初始化。例如,张量遍历单元可以基于程序212初始化张量地址值元素200。在一些实施方式中,在初始化之后,张量地址值元素200的每个元素被设置为由张量遍历单元确定的值。在一些实施方式中,处理器可以针对张量地址值元素的每个组运行单独的指令,例如,一个用于初始值元素202,一个用于步长值元素等。每个单独的指令可以为其组的每个元素设置元素各自的值。如上所述,张量遍历单元可以基于每个循环中元素的数量来确定每个序言、张量和结尾的初始值、结束值和步长值,使得每个元素被分配唯一的内存地址。
在该示例中,序言的初始值元素被设置为值12,并且张量的每个初始值元素被设置为零值。张量的维度或者序言或结尾的初始值是一个值,维度、序言或结尾的地址偏移值被设置为该值用于初始化之后第一个内存地址确定。
步长值元素可以存储被用于确定张量元素、序言元素或结尾元素的内存地址的地址偏移的步长值。维度、序言或结尾的步长值是在维度、序言或结尾的每次迭代之后被加到维度、序言或结尾的地址偏移值上的值。在该示例中,内嵌套循环索引变量k具有步长值1,中间嵌套循环索引变量j具有步长值6,并且外嵌套循环索引变量i具有步长值2。类似地,序言具有步长值1。
在一些实施方式中,处理器、用户或编译用于遍历张量的程序的编译器基于在张量的一个或多个维度中的元素的数量来确定每个维度的步长值和/或结束值。以这种方式,为每个张量元素计算的内存地址与每个其他张量元素的内存地址不同。在一些实施方式中,内存地址被确定,使得在遍历期间被访问的元素序列在内存中是物理连续的。在该示例中,第一张量元素可以被存储在具有第一地址的第一内存位置,第二张量元素可以被存储在紧邻第一内存位置的第二内存位置,第三张量元素可以被存储在紧邻第二内存位置的第三内存位置,等等。在一些实施方式中,内存地址被确定,使得在遍历期间被访问的元素序列在内存中不是物理连续的。在该示例中,第二张量元素可以不紧邻第一张量元素被存储。
结束值元素可以存储维度、序言和/或结尾的结束值。维度、序言或结尾的结束值表示一个值,在该值处,当维度、序言或结尾的地址偏移值等于或超过结束值时,地址偏移值被重置为维度、序言或结尾的初始值。
地址偏移值元素208存储维度的地址偏移值。在该示例中,序言的地址偏移值已基于序言的初始值被初始化为12。类似地,张量的每个维度的地址偏移值已经被初始化为零。地址偏移值被用于确定张量元素或数据元素的内存地址偏移。在一些实施方式中,特定变量的特定数据元素或特定张量元素的内存地址基于元素的预先指定的基地址和元素的维度的地址偏移值的总和,如等式225所示。对于变量V1,特定序言元素的内存地址等于序言元素的基地址和行208a(顶行)中的地址偏移值的总和。在该示例中,序言具有单个维度。因此,每个序言元素的内存地址基于序言的基地址和存储在地址偏移元素Z1,1中的地址偏移值的值的总和。
对于一维张量、序言或结尾,张量遍历单元在张量、序言或结尾的每个地址确定之后将张量、序言或结尾的步长值加到地址偏移值上。以这种方式,对于张量、序言或结尾的下一个地址确定,地址偏移值是不同的。当一维张量、序言或结尾的张量、序言或结尾的地址偏移值等于或超过张量、序言或结尾的结束值时,张量遍历单元转移到下一个张量、序言或结尾,因为当地址偏移值等于或超过结束值时,一维张量、序言或结尾的所有内存地址已经被确定。图2B-2J中示出的示例序言展现了一维序言的地址确定。可以使用相同或类似的技术来确定一维张量和一维结尾的内存地址。
多维张量、序言或结尾在指令中可以被表示为具有多个嵌套循环的循环嵌套。在循环嵌套中,当内循环的所有迭代都已被运行时,嵌套内循环的下一个外循环被迭代。张量遍历单元可以通过在内部维度的地址偏移值的最后一次迭代之后迭代外部维度的地址偏移值,以类似的方式确定多维张量的内存地址。
在示出的示例中,初始值元素202、步长值元素204、结束值元素206和地址偏移值元素208的每列对应于特定的维度。最右边的列可以表示与最里面的循环相对应的维度,直接在最右边列左边的列可以表示下一个外面的循环,依此类推到可以表示与最外面的循环相应的维度的最左边的列。在该示例中,每个元素集合202-208的最右边的列可以填充有一维张量、序言或结尾的非零值,因为没有与其他列相应的额外的维度。在其他实施方式中,每个元素集合可以被不同地安排,使得维度由行表示,或者最左边的列可以与最里面的循环相应。
对于多维张量、序言或结尾,当特定维度的地址偏移值等于或超过特定维度的结束值时,张量遍历单元可以将特定维度的地址偏移值重置为它的初始值并增加特定维度的循环被嵌套在其中的维度的地址偏移值。例如,如果由最右边元素表示的维度的地址偏移值等于或超过其结束值,则地址偏移值可以被重置为其初始值,并且由从右边第二列表示的维度的地址偏移值可以使用其步长值被增加。图2B-2J中示出的示例张量展现了多维张量的地址确定。可以使用相同或类似的技术来确定多维序言和多维结尾的内存地址。
可以使用图1的数学单元124来确定张量元素和序言和/或结尾的数据元素的内存地址。例如,对于特定变量(例如,变量V1)加法器的输入可以是基地址和用于变量的行(例如,用于变量V1的行208a)中的每个地址偏移值元素的值。输出是变量的内存地址。每个张量元素的内存地址和/或序言和/或结尾的每个数据元素的内存地址可以被输出以供处理单元102使用。例如,内存地址可以被输出到总线或存储介质104。
张量遍历单元可以逐行确定张量元素和数据元素的内存地址。例如,张量遍历单元可以首先使用行208a中的地址偏移值来确定序言的数据元素的内存地址。在张量遍历单元已经确定了每个序言数据元素的内存地址之后,张量遍历单元可以移动到第二行208b并确定张量的张量元素的内存地址。如果程序包括具有第三行中的值的结尾,则在张量元素的内存地址已经被确定之后,张量遍历单元将移动到第三行并且确定结尾数据元素的内存地址。
图2B示出了访问序言数据元素V1[0]。例如,张量遍历单元可以从FSM接收指令以基于所接收的指令开始确定内存地址,该指令指定序言和张量的循环。作为响应,张量遍历单元可以基于地址偏移元素的第一行208a开始确定序言数据元素的内存地址。在确定序言数据元素的内存地址的第一次迭代中,基于初始值元素V1,1中所示的序言的初始值,地址偏移元素Z1,1具有值12。在该示例中,第一序言数据元素V1[0]的内存地址等于序言的基地址加上12,如等式225所示。数学单元124可以通过确定基地址和地址偏移元素Z1,1中当前地址偏移值的总和来确定内存地址。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或数据总线。然后,处理单元102可以使用所确定的内存地址来访问序言数据元素V1[0]。
图2C示出了访问序言数据元素V1[1]。在张量遍历单元确定序言数据元素V1[0]的内存地址之后,张量遍历单元可以通过使用序言的步长值增加序言的地址偏移值来更新序言的地址偏移值。特别地,张量遍历单元可以例如使用数学单元124将步长值元素X1,1中的步长值加到地址偏移值元素Z1,1中的地址偏移值上。在该示例中,张量遍历单元将步长值1加到先前的地址偏移值12上,得到地址偏移值13。
在一些实施方式中,张量遍历单元将存储在元素Z1,1中的更新的偏移地址值与存储在元素Y1,1中的序言的结束值进行比较。如果存储在Z1,1中的更新的偏移地址值等于或超过存储在元素Y1,1中的序言的结束值,则张量遍历单元可以将存储在元素Z1,1中的偏移地址值的值重置为存储在元素V1,1中的序言的初始值。因为示例序言包括一维数组,当存储在元素Z1,1中的地址偏移值等于或超过存储在元素Y1,1中的结束值时,序言的所有内存地址已经被确定并且张量遍历单元可以移动到下一行。
如果存储在元素Z1,1中的更新的偏移地址值小于存储在元素Y1,1中的序言的结束值,则张量遍历单元可以保持存储在元素Z1,1中的序言的更新的地址值。在该示例中,序言的更新的地址偏移值(13)小于内循环的结束值(15)。因此,张量遍历单元保持存储在地址偏移元素Z1,1中的序言的更新的地址偏移值。
数学单元124可以通过确定基地址和地址偏移元素Z1,1中当前地址偏移值的总和来确定序言数据元素V1[1]的内存地址。在该示例中,内存地址是基地址和13的总和。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或数据总线。然后,处理单元102可以使用所确定的内存地址来访问序言数据元素V1[1]。
图2D示出了访问序言数据元素V1[2]。在张量遍历单元确定序言数据元素V1[1]的内存地址之后,张量遍历单元可以通过使用序言的步长值增加序言的地址偏移值来更新序言的地址偏移值。特别地,张量遍历单元可以例如使用数学单元124将步长值元素X1,1中的步长值加到地址偏移值元素Z1,1中的地址偏移值上。在该示例中,张量遍历单元将步长值1加到先前的地址偏移值13上,得到地址偏移值14。
张量遍历单元可以再次将存储在元素Z1,1中的更新的偏移地址值与存储在元素Y1,1中的序言的结束值进行比较。这里,存储在元素Z1,1中的更新的地址偏移值(14)仍然不等于或超过存储在元素Y1,1中的结束值(15)。因此,张量遍历单元保持存储在地址偏移元素Z1,1中的序言的更新的地址偏移值。
数学单元124可以通过确定基地址和地址偏移元素Z1,1中当前地址偏移值的总和来确定序言数据元素V1[2]的内存地址。在该示例中,内存地址是基地址和14的总和。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或数据总线。然后,处理单元102可以使用所确定的内存地址来访问序言数据元素V1[2]。
在确定序言数据元素V1[2]的内存地址之后,张量遍历单元可以通过使用序言的步长值增加序言的地址偏移值来更新序言的地址偏移值。特别地,张量遍历单元可以例如使用数学单元124将步长值元素X1,1中的步长值加到地址偏移值元素Z1,1中的地址偏移值上。在该示例中,张量遍历单元将步长值1加到先前的地址偏移值14上,得到地址偏移值15。
张量遍历单元可以再次将存储在元素Z1,1中的更新的偏移地址值与存储在元素Y1,1中的序言的结束值进行比较。这里,存储在元素Z1,1中的更新的地址偏移值(15)等于存储在元素Y1,1中的结束值(15)。因为存储在Z1,1中的更新的偏移地址值等于存储在元素Y1,1中的序言的结束值,张量遍历单元将存储在元素Z1,1中的偏移地址值的值重置为存储在元素V1,1中的序言的初始值。因为示例序言包括一维数组并且每个序言的内存地址已经被确定,张量遍历单元可以移动到下一行。
第二行包括张量的值。特别地,地址偏移值元素Z2,1、Z2,2和Z3,3存储张量元素的地址偏移值。特定张量元素的内存地址是存储在地址偏移值Z2,1、Z2,2和Z3,3中的当前值与基地址的总和。张量元素的基地址可以与序言元素的基地址相同。在其他示例中,张量元素的基地址可以与序言数据元素的基地址不同。
图2E示出了访问张量元素V2[0][0][0]。在确定张量元素的内存地址的第一次迭代中,基于如初始值元素V2,1、V2,2、V2,3所示的张量的初始值,每个地址偏移元素Z2,1、Z2,2和Z2,3具有零值。在该示例中,第一张量元素V2[0][0][0]的内存地址等于张量的基地址加0,如等式226所示。数学单元124可以通过确定基地址和存储在地址偏移元素Z2,1、Z2,2和Z2,3中的当前地址偏移值的总和来确定内存地址。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或数据总线。然后,处理单元102可以使用所确定的内存地址来访问张量元素V2[0][0][0]。
图2F示出了访问元素V2[0][0][1]。在张量遍历单元确定张量元素V2[0][0][0]的内存地址之后,张量遍历单元可以通过增加由程序212的内循环表示的维度的地址偏移值来更新张量的地址偏移值。在该示例中,由内循环表示的维度是最右边的地址元素Z2,1。因此,张量遍历单元可以通过将地址值元素Z2,1增加其存储在步长值元素X2,1中的相应步长值来更新张量的地址偏移值。在该示例中,步长值(1)被加到地址偏移值(0)上得到地址偏移值1。
在一些实施方式中,张量遍历单元将存储在元素Z2,1中的更新的偏移地址值与存储在元素Y2,1中的结束值进行比较。如果存储在Z2,1中的更新的偏移地址值等于或超过存储在元素Y2,1中的结束值,则张量遍历单元可以将存储在元素Z2,1中的偏移地址值的值重置为存储在元素V2,1中的初始值。此外,张量遍历单元可以将存储在元素Z2,2中的与对应于中间循环的维度相应的维度的地址偏移值增加存储在X2,2中的与中间循环相应的维度的步长值,如以下更详细描述的那样。
如果存储在元素Z2,1中的更新的偏移地址值小于存储在元素Y2,1中的结束值,则张量遍历单元可以保持存储在元素Z2,1中的更新的地址值。在该示例中,更新的地址偏移值(1)小于结束值(2)。因此,张量遍历单元保持存储在地址偏移元素Z2,1中的与中间循环相应的维度的更新的地址偏移值,而不增加与中间循环相应的维度的地址偏移值。
数学单元124可以通过确定基地址和存储在地址偏移元素Z2,1、Z2,2、Z2,3中的当前地址偏移值的总和来确定张量元素V2[0][0][1]的内存地址。在该示例中,内存地址是基地址和1的总和,如等式226所示。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或者数据总线。然后,处理单元102可以使用所确定的内存地址来访问张量元素V2[0][0][1]。
图2G示出了访问元素V2[0][1][0]。在张量遍历单元确定张量元素V2[0][0][1]的内存地址之后,张量遍历单元可以通过增加由程序212的内循环表示的维度的地址偏移值来更新张量的地址偏移值。在该示例中,张量遍历单元可以通过将地址值元素Z2,1增加其存储在步长值元素X2,1中的相应步长值来更新张量的地址偏移值。在该示例中,步长值(1)被加到地址偏移值(1)上得到地址偏移值2。
张量遍历单元可以将存储在元素Z2,1中的更新的偏移地址值与存储在元素Y2,1中的和内循环相应的维度的结束值进行比较。如果存储在Z2,1中的更新的偏移地址值等于或超过存储在元素Y2,1中的结束值,则张量遍历单元可以将存储在元素Z2,1中的偏移地址值的值重置为存储在元素V2,1中的内循环的初始值。此外,张量遍历单元可以将存储在元素Z2,2中的与中间循环相应的维度的地址偏移值增加存储在X2,2中的与中间循环相应的维度的步长值。
如果存储在元素Z2,1中的更新的偏移地址值小于存储在元素Y2,1中的结束值,则张量遍历单元可以保持存储在元素Z2,1中的与内循环相应的维度的更新的地址值。在该示例中,内循环的更新的地址偏移值(2)等于内循环的结束值(2)。因此,张量遍历单元将存储在元素Z2,1中的偏移地址值重置为存储在元素V2,1中的初始值。此外,张量遍历单元将存储在元素Z2,2中的与中间循环相应的维度的地址偏移值增加存储在X2,2中的与中间循环相应的维度的步长值。在该示例中,与中间循环相应的维度的更新的地址偏移值是6(0+6)。
在一些实施方式中,响应于确定中间循环的更新的偏移地址值,张量遍历单元将存储在元素Z2,2中的与中间循环相应的维度的更新的偏移地址值与存储在元素Y2,2中的与中间循环相应的维度的结束值进行比较。如果存储在Z2,2中的更新的偏移地址值等于或超过存储在元素Y2,2中的结束值,则张量遍历单元可以将存储在元素Z2,2中的偏移地址值的值重置为存储在元素V2,2中的与中间循环相应的维度的初始值。此外,张量遍历单元可以将存储在元素Z2,3中的与外循环相应的维度的地址偏移值增加存储在X2,3中的外循环的步长值,如下所述。
如果存储在元素Z2,1中的中间循环的更新的偏移地址值小于存储在元素Y2,2中的与中间循环相应的维度的结束值,则张量遍历单元可以保持存储在元素Z2,2中的与中间循环相应的维度的更新的地址值。在该示例中,与中间循环相应的维度的更新的地址偏移值(6)小于内循环的结束值(12)。因此,张量遍历单元保持存储在地址偏移元素Z2,2中的与中间循环相应的维度的更新的地址偏移值,而不增加与外循环相应的维度的地址偏移值。
数学单元124可以通过确定基地址和存储在地址偏移元素Z2,1、Z2,2、Z2,3中的当前地址偏移值的总和来为张量元素V2[0][1][0]确定内存地址。在该示例中,内存地址是基地址和6的总和,如等式226所示。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或者数据总线。然后,处理单元102可以使用所确定的内存地址来访问张量元素V2[0][1][0]。
图2H示出了访问元素V2[0][1][1]。在张量遍历单元确定张量元素V2[0][1][0]的内存地址之后,张量遍历单元可以通过增加由程序212的内循环表示的维度的地址偏移值来更新张量的地址偏移值。在该示例中,张量遍历单元可以通过将地址值元素Z2,1增加其存储在步长值元素X2,1中的相应步长值来更新张量的地址偏移值。在该示例中,步长值(1)被加到地址偏移值(0)上得到地址偏移值1。
张量遍历单元可以将存储在元素Z2,1中的更新的偏移地址值与存储在元素Y2,1中的与内循环相应的维度的结束值进行比较。这里,存储在元素Z2,1中的更新的偏移地址值小于存储在元素Y2,1中的结束值。因此,张量遍历单元保持存储在元素Z2,1中的与内循环相应的维度的更新的地址值。
数学单元124可以通过确定基地址和存储在地址偏移元素Z2,1、Z2,2、Z2,3中的当前地址偏移值的总和来确定张量元素V2[0][1][1]的内存地址。在该示例中,内存地址是基地址和7的总和。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或数据总线。然后,处理单元102可以使用所确定的内存地址来访问张量元素V2[0][1][1]。
图2I示出了访问元素V2[1][0][0]。在张量遍历单元确定张量元素V2[0][1][1]的内存地址之后,张量遍历单元可以通过增加由程序212的内循环表示的维度的地址偏移值来更新张量的地址偏移值。在该示例中,张量遍历单元可以通过将地址值元素Z2,1增加其存储在步长值元素X2,1中的相应步长值来更新张量的地址偏移值。在该示例中,步长值(1)被加到地址偏移值(1)得到地址偏移值2。
张量遍历单元可以将存储在元素Z2,1中的更新的偏移地址值与存储在元素Y2,1中的与内循环相应的维度的结束值进行比较。这里,存储在Z2,1中的更新的偏移地址值等于存储在元素Y2,1中的内循环的结束值。因此,张量遍历单元可以将存储在元素Z2,1中的偏移地址值的值重置为存储在元素V2,1中的内循环的初始值。此外,张量遍历单元可以将存储在元素Z2,2中的与中间循环相应的维度的地址偏移值增加存储在X2,2中的与中间循环相应的维度的步长值。在该示例中,与中间循环相应的维度的更新的地址偏移值是12(6+6)。
响应于确定与中间循环相应的维度的更新的偏移地址值,张量遍历单元可以将存储在元素Z2,2中的与中间循环相应的维度的更新的偏移地址值与存储在元素Y2,2中的与中间循环相应的维度的结束值进行比较。如果存储在Z2,2中的与中间循环值相应的维度的更新偏移地址等于存储在元素Y2,2中的结束值,则张量遍历单元可以将存储在元素Z2,2中的偏移地址值的值重置为存储在元素V2,2中的中间循环的初始值。此外,张量遍历单元可以将存储在元素Z2,3中的与外循环相应的维度的地址偏移值增加存储在X2,3中的外循环的步长值。
如果存储在元素Z2,2中的与中间循环相应的维度的更新的偏移地址值小于存储在元素Y2,2中的与中间循环相应的维度的结束值,则张量遍历单元可以保持存储在元素Z2,2中的中间循环的更新的地址值。在该示例中,中间循环的更新的地址偏移值(12)等于中间循环的结束值(12)。因此,张量遍历单元将存储在元素Z2,2中的偏移地址值重置为存储在元素V2,2中的初始值。此外,张量遍历单元将存储在元素Z2,3中的与外循环相应的维度的地址偏移值增加存储在X1,3中的与外循环相应的维度的步长值。在该示例中,与外循环相应的维度的更新的地址偏移值是2(0+2)。
数学单元124可以通过确定基地址和存储在地址偏移元素Z2,1、Z2,2、Z2,3中的当前地址偏移值的总和来确定张量元素V2[0][1][1]的内存地址。在此示例中,内存地址是基地址和2的总和。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或数据总线。然后,处理单元102可以使用所确定的内存地址来访问张量元素V2[1][0][0]。
图2J示出了访问元素V2[1][0][1]。在张量遍历单元确定张量元素V2[1][0][0]的内存地址之后,张量遍历单元可以通过增加由程序212的内循环表示的维度的地址偏移值来更新张量的地址偏移值。在该示例中,张量遍历单元可以通过将地址值元素Z2,1增加其存储在步长值元素X2,1中的相应步长值来更新张量的地址偏移值。在该示例中,步长值(1)被加到地址偏移值(0)上得到地址偏移值1。
张量遍历单元可以将存储在元素Z2,1中的更新的偏移地址值与存储在元素Y2,1中的与内循环相应的维度的结束值进行比较。这里,存储在元素Z2,1中的更新的偏移地址值小于存储在元素Y2,1中的结束值。因此,张量遍历单元保持存储在元素Z2,1中的与内循环相应的维度的更新的地址值。
数学单元124可以通过确定基地址和存储在地址偏移元素Z2,1、Z2,2、Z2,3中的当前地址偏移值的总和来确定张量元素V2[1][0][1]的内存地址。在该示例中,内存地址是基地址和3的总和,如等式226所示。张量遍历单元然后可以将确定的内存地址输出,例如输出到处理单元102、存储介质104或者数据总线。然后,处理单元102可以使用所确定的内存地址来访问张量元素V2[1][0][1]。
张量遍历单元可以继续确定嵌套循环的剩余迭代的内存地址,以便以类似的方式访问剩余的张量元素。下面的表1示出了使用图2A-2J中示出的步长值的张量元素和序言元素的内存地址偏移值。
表1
图2B-2J的示例示出了一种实施方式,在该实施方式中程序包括序言,用于由循环索引变量i索引的循环。类似的技术可以被用于内循环,例如由循环索引变量j索引的循环。
图3是示出用于确定张量元素和序言数据元素和/或结尾数据元素的内存地址的示例过程300的流程图。过程300可以由一个或多个计算机的系统执行,例如图1的计算系统100。系统包括张量遍历单元,该张量遍历单元具有包括初始值元素、步长值元素、结束值元素和地址偏移元素的张量地址值元素。张量遍历单元还包括数学单元。
系统接收包括指定主循环嵌套的指令的程序(302)。指令可以包括循环嵌套,该循环嵌套包括用于遍历N维张量的嵌套循环。N维张量可以包括跨N维中的每一维被安排的多个元素,其中N是等于或大于1的整数。
系统识别程序中的序言和/或结尾循环(304)。例如,系统可以识别程序中的用于遍历N维张量的主循环嵌套。然后,系统可以确定程序是否包括在主循环嵌套之前被执行的序言循环和在主循环嵌套之后被执行的结尾循环。每个序言循环和/或结尾循环可以包括用于存储序言循环或结尾循环的值的相应数据数组。
系统可以基于指令填充地址计算元素(306)。例如,系统可以为张量的每个维度确定初始值、步长值、结束值和地址偏移值。此外,系统可以为每个序言和每个结尾确定初始值、步长值、结束值和地址偏移值。系统可以确定初始值、步长值和/或结束值,使得每个张量元素和每个数据元素被分配唯一的内存地址(或与基地址结合以确定唯一内存地址的唯一内存地址值)。例如,张量遍历单元可以基于每个维度和数组中包括的元素的数量来确定序言和/或结尾的每个数据数组和张量的每个维度的步长值和结束值。
系统可以将每个初始值存储在相应的初始值元素中;将每个步长值存储在相应的步长值元素中;将每个结束值存储在相应的结束值元素中;并将每个地址偏移值存储在相应的地址偏移值元素中。可以基于张量维度、序言数据数组和结尾数据数组来安排初始值元素、步长值元素、结束值元素和地址偏移值元素。例如,张量的元素可以被安排成行,每列与张量的维度相对应。类似地,序言或结尾的元素可以被安排成行,每列与序言或结尾的维度相对应。
系统确定序言和/或结尾的数据元素和张量元素的内存地址值(308)。例如,系统可以基于与每个张量元素或数据元素相应的循环索引来依次确定内存地址。系统可以使用初始值、步长值和结束值来迭代每个张量元素和每个数据元素以确定张量元素和数据元素的内存地址,如上面参考图2A-2J所述。系统可以基于内存地址被确定时的基地址和相应地址偏移值的当前值来确定特定张量或数据元素的内存地址。
系统输出指定所确定的内存地址的数据(310)。例如,系统可以将数据输出到处理单元,该处理单元基于所确定的内存地址访问张量元素和数据元素。在另一示例中,系统可以将确定的内存地址输出到存储介质或数据总线,使得处理单元可以访问内存地址。
系统使用确定的内存地址访问张量元素和数据元素(312)。例如,处理单元可以访问张量和数据元素以执行机器学习计算。
本说明书中描述的主题和功能操作的实施例可以在数字电子电路中、在被有形地具体化的计算机软件或固件中、在计算机硬件中,包括本说明书中公开的结构及其结构等同物、或者它们中的一个或多个的组合中实施。本说明书中描述的主题的实施例可以被实施为一个或多个计算机程序,即在有形非暂时性程序载体上被编码的计算机程序指令的一个或多个模块,用于由数据处理装置执行或控制数据处理装置的操作。可替代地或另外地,程序指令可以被编码在人工生成的传播信号上,例如,机器生成的电、光或电磁信号,其被生成以编码信息用于传输到合适的接收器装置以供数据处理装置运行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取内存设备,或它们中的一个或多个的组合。
本说明书中描述的处理和逻辑流程可以由一个或多个可编程计算机执行,该一个或多个可编程计算机运行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能。处理和逻辑流程也可以由专用逻辑电路执行,并且装置也可以被实施为专用逻辑电路,专用逻辑电路例如FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPGPU(通用图形处理单元)。
适合于运行计算机程序的计算机包括,例如,可以基于通用或专用微处理器或两者,或任何其他种类的中央处理单元。通常,中央处理单元将从只读内存或随机存取内存或两者接收指令和数据。计算机的必要元素是用于执行或运行指令的中央处理单元和用于存储指令和数据的一个或多个内存设备。通常,计算机还将包括一个或多个用于存储数据的大容量存储设备,或可操作地耦合到一个或多个用于存储数据的大容量存储设备,以从一个或多个用于存储数据的大容量存储设备接收数据或将数据传输到一个或多个用于存储数据的大容量存储设备或两者,大容量存储设备例如磁盘、磁光盘或光盘。然而,计算机不必具有这样的设备。此外,计算机可以被嵌入在另一个设备中,仅举几例,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器或便携式存储设备,例如,通用串行总线(USB)闪存驱动器。
适用于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性内存、介质和内存设备,包括例如半导体内存设备,例如EPRO、EEPROM和闪存设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和内存可以由专用逻辑电路补充或并入专用逻辑电路中。
尽管本说明书包含许多具体的实施细节,但这些不应被解释为对任何发明或可要求保护的范围的限制,而是特定于特定发明的特定实施例的特征的描述。在本说明书中在分开的实施例的上下文中描述的某些特征也可以在单个实施例中被组合实施。相反,在单个实施例的上下文中描述的各种特征也可以在多个实施例中被分别地或以任何合适的子组合来实施。此外,尽管上面的特征可以被描述为以某些组合起作用并且甚至最初如此声明,但是在一些情况下来自所声明的组合的一个或多个特征可以从组合中切除,并且所声明的组合可以针对子组合或子组合的变体。
类似地,尽管在附图中以特定顺序描绘了操作,但是这不应该被理解为要求以示出的特定顺序或按顺序执行这样的操作,或者执行所有示出的操作,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以一起被集成在单个软件产品中或被打包成多个软件产品。
已经描述了本主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中列举的动作可以以不同的顺序被执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不一定需要示出的特定顺序或相继次序以实现期望的结果。在某些实施方式中,多任务和并行处理可能是有利的。
Claims (20)
1.一种用于处理用于访问数据的指令的装置,其特征在于,所述装置包含:
多个地址偏移值元素,每个所述地址偏移值元素被配置为存储地址偏移值;
对于每个地址偏移值元素,多个地址计算元素,每个所述地址计算元素存储被用于确定存储在所述地址偏移值元素中的所述地址偏移值的值;
一个或多个处理器,所述处理器被配置为:
接收用于使用N维张量的张量元素执行计算的程序;
在所述程序中识别具有相应数据数组的序言或结尾循环,所述数据数组用于存储所述序言或结尾循环的值;
对于与所述序言或结尾循环相应的第一地址偏移值元素,至少基于所述序言或结尾循环的迭代的数量,用各自的值填充用于所述第一地址偏移值元素的所述地址计算元素;
对于所述N维张量的每个维度的第二地址偏移值元素,至少基于所述程序中的与所述维度相应的循环的迭代的数量,用各自的值填充用于所述第二地址偏移值元素的所述地址计算元素;
对于每个数据数组的每个数据元素,使用在确定所述数据元素的内存地址时所述数据数组的所述第一地址偏移值的当前值,确定所述数据元素的所述内存地址,其中在所述数据数组的数据元素的内存地址的每次确定之后,调整所述数据数组的所述第一地址偏移值;
对于所述N维张量的每个张量元素,使用在确定所述张量元素的内存地址时每个第二地址偏移值的当前值,确定所述张量元素的所述内存地址,其中在所述N维张量的张量元素的内存地址的每次确定之后,调整所述第二地址偏移值中的一个或多个;
输出数据,所述数据指示每个张量元素和每个数据元素的所述确定的内存地址。
2.根据权利要求1所述的装置,其特征在于,进一步包含:处理单元,所述处理单元被配置为基于每个确定的内存地址访问每个张量元素和每个数据元素。
3.根据权利要求1所述的装置,其特征在于,所述数据数组包括序言数据数组,所述序言数据数组包括序言数据元素,每个序言数据元素存储用于机器学习计算的偏差值。
4.根据权利要求1所述的装置,其特征在于,所述一个或多个处理器以第一次序确定每个张量元素的所述内存地址,并且所述一个或多个处理器在所述第一次序之前或之后以第二次序确定每个数据元素的所述内存地址。
5.根据权利要求1所述的装置,其特征在于,确定特定张量元素的所述内存地址包含使用一个或多个硬件加法器确定每个维度的所述地址偏移值的总和。
6.根据权利要求1所述的装置,其特征在于,确定特定数据元素的所述内存地址包含确定所述特定数据元素的所述地址偏移值和所述数据元素的基地址的总和。
7.根据权利要求1所述的装置,其特征在于:
所述地址计算元素包含:
第一初始值元素,所述第一初始值元素被配置为存储所述序言或者结尾循环的第一初始值;
第一步长值元素,所述第一步长值元素被配置为存储所述序言或者结尾循环的第一步长值;
对于所述N维张量的每个维度:
第二初始值元素,所述第二初始值元素被配置为存储所述维度的第二初始值;
第二步长值元素,所述第二步长值元素被配置为存储所述维度的第二步长值。
8.根据权利要求7所述的装置,其特征在于,每个地址偏移值元素、每个初始值元素和每个步长值元素包含寄存器。
9.根据权利要求8所述的装置,其特征在于,所述一个或多个处理器基于指定每个数据数组的循环和所述N维张量的嵌套循环的单个指令,初始化每个第一初始值、每个第一步长值、每个第二初始值和每个第二步长值。
10.根据权利要求9所述的装置,其特征在于,所述一个或多个处理器被进一步配置为:
对于每个维度,在所述维度的嵌套循环的每次迭代之后,通过将步长值加到所述维度的先前地址偏移值上,确定所述维度的所述地址偏移值。
11.根据权利要求1-10任一项所述的装置,其特征在于,对于每个维度,进一步包含,被配置为存储所述维度的限制值的限制值元素,其中,所述一个或多个处理器被进一步配置为:
对于每个维度,确定所述维度的所述确定的地址偏移值是否等于所述维度的所述限制值;和
响应于确定与第一嵌套循环相应的第一维度的所述确定的地址偏移值等于所述第一维度的所述限制值:
将所述第一维度的所述地址偏移值重置为所述第一维度的初始值;和
对于与嵌套所述第一嵌套循环的第二嵌套循环相应的第二维度,使用所述一个或多个硬件加法器,将所述第二维度的所述地址偏移值更新为等于所述第二维度的步长值与所述第二维度的所述地址偏移值的总和。
12.一种用于处理用于访问数据的指令的方法,其特征在于,所述方法包含:
接收用于使用N维张量的张量元素执行计算的程序;
在用于使用N维张量的张量元素执行计算的程序中,识别具有相应数据数组的序言或结尾循环,所述数据数组用于存储所述序言或结尾循环的值;
对于与所述序言或结尾循环相应的第一地址偏移值元素,至少基于所述序言或结尾循环的迭代的数量,用各自的值填充用于所述第一地址偏移值元素的多个第一地址计算元素,其中,所述第一地址偏移值元素被配置为存储第一地址偏移值,并且每个第一地址计算元素被配置为存储被用于确定所述第一地址偏移值的值;
对于所述N维张量的各个维度的第二地址偏移值元素,至少基于所述程序中的与所述维度相应的循环的迭代的数量,用各自的值填充用于所述第二地址偏移值元素的多个第二地址计算元素,其中每个第二地址偏移元素被配置为存储用于各自维度的第二地址偏移值,并且所述第二地址偏移值的每个第二地址计算元素被配置为存储被用于确定所述第二地址偏移值的值;
对于每个数据数组的每个数据元素,使用在确定所述数据元素的内存地址时所述数据数组的所述第一地址偏移值的当前值,确定所述数据元素的所述内存地址,其中在所述数据数组的数据元素的内存地址的每次确定之后,调整所述数据数组的所述第一地址偏移值;
对于所述N维张量的每个张量元素,使用在确定所述张量元素的内存地址时每个第二地址偏移值的当前值,确定所述张量元素的所述内存地址,其中在所述N维张量的张量元素的内存地址的每次确定之后,调整所述第二地址偏移值中的一个或多个;
输出数据,所述数据指示每个张量元素和每个数据元素的所述确定的内存地址。
13.根据权利要求12所述的方法,其特征在于,进一步包含:基于每个确定的内存地址访问每个张量元素和每个数据元素。
14.根据权利要求12所述的方法,其特征在于,所述数据数组包括序言数据数组,所述序言数据数组包括序言数据元素,每个序言数据元素存储用于机器学习计算的偏差值。
15.根据权利要求12所述的方法,其特征在于,确定特定张量元素的所述内存地址包含使用一个或多个硬件加法器确定每个维度的所述地址偏移值的总和。
16.根据权利要求12所述的方法,其特征在于,确定特定数据元素的所述内存地址包含确定所述特定数据元素的所述地址偏移值和所述数据元素的基地址的总和。
17.根据权利要求12所述的方法,其特征在于:
所述地址计算元素包含:
第一初始值元素,所述第一初始值元素被配置为存储所述序言或者结尾循环的第一初始值;
第一步长值元素,所述第一步长值元素被配置为存储所述序言或者结尾循环的第一步长值;
对于所述N维张量的每个维度:
第二初始值元素,所述第二初始值元素被配置为存储所述维度的第二初始值;
第二步长值元素,所述第二步长值元素被配置为存储所述维度的第二步长值。
18.根据权利要求17所述的方法,其特征在于,每个地址偏移值元素、每个初始值元素和每个步长值元素包含寄存器。
19.根据权利要求18所述的方法,其特征在于,进一步包含基于指定每个数据数组的循环和所述N维张量的嵌套循环的单个指令,初始化每个第一初始值、每个第一步长值、每个第二初始值和每个第二步长值。
20.一种用于处理用于访问数据的指令的系统,其特征在于,包含:
多个地址偏移值元素,每个所述地址偏移值元素被配置为存储地址偏移值;
对于每个地址偏移值元素,多个地址计算元素,每个所述地址计算元素存储被用于确定存储在所述地址偏移值元素中的所述地址偏移值的值;
包括一个或多个加法器的电路,所述电路被配置为:
接收用于使用N维张量的张量元素执行计算的程序;
在所述程序中识别具有相应数据数组的序言或结尾循环,所述数据数组用于存储所述序言或结尾循环的值;
对于与所述序言或结尾循环相应的第一地址偏移值元素,至少基于所述序言或结尾循环的迭代的数量,用各自的值填充用于所述第一地址偏移值元素的所述地址计算元素;
对于所述N维张量的每个维度的第二地址偏移值元素,至少基于所述程序中的与所述维度相应的循环的迭代的数量,用各自的值填充用于所述第二地址偏移值元素的所述地址计算元素填充;
对于每个数据数组的每个数据元素,使用在确定所述数据元素的内存地址时所述数据数组的所述第一地址偏移值的当前值,确定所述数据元素的所述内存地址,其中在所述数据数组的数据元素的内存地址的每次确定之后,调整所述数据数组的所述第一地址偏移值;
对于所述N维张量的每个张量元素,使用在确定所述张量元素的内存地址时每个第二地址偏移值的当前值,确定所述张量元素的所述内存地址,其中在所述N维张量的张量元素的内存地址的每次确定之后,调整所述第二地址偏移值中的一个或多个;
输出数据,所述数据指示每个张量元素和每个数据元素的所述确定的内存地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311460321.5A CN117492838A (zh) | 2017-07-31 | 2018-07-27 | 访问序言和结尾数据 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/664,842 | 2017-07-31 | ||
US15/664,842 US10108538B1 (en) | 2017-07-31 | 2017-07-31 | Accessing prologue and epilogue data |
PCT/US2018/041361 WO2019027628A1 (en) | 2017-07-31 | 2018-07-10 | ACCESS TO PROLOGUE AND EPILOGUE DATA |
USPCT/US2018/041361 | 2018-07-10 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311460321.5A Division CN117492838A (zh) | 2017-07-31 | 2018-07-27 | 访问序言和结尾数据 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109324827A CN109324827A (zh) | 2019-02-12 |
CN109324827B true CN109324827B (zh) | 2023-11-28 |
Family
ID=63036438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810841905.XA Active CN109324827B (zh) | 2017-07-31 | 2018-07-27 | 用于处理用于访问数据的指令的装置、方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10108538B1 (zh) |
EP (1) | EP3602280B1 (zh) |
CN (1) | CN109324827B (zh) |
TW (2) | TWI670651B (zh) |
WO (1) | WO2019027628A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10936942B2 (en) | 2017-11-21 | 2021-03-02 | Google Llc | Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies |
GB2580664B (en) | 2019-01-22 | 2021-01-13 | Graphcore Ltd | Double load instruction |
CN110046116B (zh) * | 2019-04-23 | 2020-08-21 | 上海燧原智能科技有限公司 | 一种张量填充方法、装置、设备及存储介质 |
US11176493B2 (en) * | 2019-04-29 | 2021-11-16 | Google Llc | Virtualizing external memory as local to a machine learning accelerator |
US11496775B2 (en) * | 2020-02-20 | 2022-11-08 | Tencent America LLC | Neural network model compression with selective structured weight unification |
CN111506520B (zh) * | 2020-07-01 | 2020-09-22 | 腾讯科技(深圳)有限公司 | 一种地址生成的方法、相关装置以及存储介质 |
EP3937009A1 (en) * | 2020-07-09 | 2022-01-12 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | A computing unit, method to perform computations, method to generate program code for a hardware comprising a multi-stage-buffer and program code |
US11954580B2 (en) | 2020-09-16 | 2024-04-09 | Meta Platforms, Inc. | Spatial tiling of compute arrays with shared control |
US11704562B1 (en) | 2020-11-04 | 2023-07-18 | Meta Platforms, Inc. | Architecture for virtual instructions |
US11709783B1 (en) | 2020-11-11 | 2023-07-25 | Meta Platforms, Inc. | Tensor data distribution using grid direct-memory access (DMA) controller |
US11972349B1 (en) | 2020-11-12 | 2024-04-30 | Meta Platforms, Inc. | Flexible compute array utilization in a tensor processor |
US11922306B2 (en) | 2020-12-28 | 2024-03-05 | Meta Platforms, Inc. | Tensor controller architecture |
US12001893B1 (en) | 2020-12-28 | 2024-06-04 | Meta Platforms, Inc. | Distributed synchronization scheme |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279818A (zh) * | 2011-07-28 | 2011-12-14 | 中国人民解放军国防科学技术大学 | 支持有限共享的向量数据访存控制方法及向量存储器 |
CN104838357A (zh) * | 2012-12-27 | 2015-08-12 | 英特尔公司 | 瓦解的多嵌套循环的向量化 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5920724A (en) | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
US5958048A (en) | 1996-08-07 | 1999-09-28 | Elbrus International Ltd. | Architectural support for software pipelining of nested loops |
US6429876B1 (en) * | 1998-08-28 | 2002-08-06 | Ati International Srl | Method and apparatus for video graphics antialiasing with memory overflow optimization |
US6952821B2 (en) * | 2002-08-19 | 2005-10-04 | Hewlett-Packard Development Company, L.P. | Method and system for memory management optimization |
TWI446171B (zh) * | 2006-09-28 | 2014-07-21 | Virident Systems Inc | 用於異質性主記憶體具有可程式化記憶體控制的系統,方法及裝置 |
US8713285B2 (en) * | 2008-12-09 | 2014-04-29 | Shlomo Selim Rakib | Address generation unit for accessing a multi-dimensional data structure in a desired pattern |
US20100153100A1 (en) * | 2008-12-11 | 2010-06-17 | Electronics And Telecommunications Research Institute | Address generator for searching algebraic codebook |
US8627304B2 (en) | 2009-07-28 | 2014-01-07 | International Business Machines Corporation | Vectorization of program code |
US8285658B1 (en) * | 2009-08-25 | 2012-10-09 | Scout Analytics, Inc. | Account sharing detection |
US20120216011A1 (en) * | 2011-02-18 | 2012-08-23 | Darryl Gove | Apparatus and method of single-instruction, multiple-data vector operation masking |
US10803009B2 (en) * | 2011-07-14 | 2020-10-13 | Texas Instruments Incorporated | Processor with table lookup processing unit |
KR101854671B1 (ko) * | 2011-11-15 | 2018-05-08 | 삼성전자주식회사 | 소프트웨어 파이프라인이 적용된 루프의 프롤로그와 에필로그에서 루프 외부의 명령어를 실행시키는 장치 및 방법 |
US9507593B2 (en) * | 2011-12-23 | 2016-11-29 | Intel Corporation | Instruction for element offset calculation in a multi-dimensional array |
JP5586718B2 (ja) * | 2012-06-19 | 2014-09-10 | 株式会社東芝 | 制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置 |
US9747554B2 (en) * | 2013-05-24 | 2017-08-29 | Qualcomm Incorporated | Learning device with continuous configuration capability |
US20150242745A1 (en) * | 2014-02-21 | 2015-08-27 | Qualcomm Incorporated | Event-based inference and learning for stochastic spiking bayesian networks |
US9760356B2 (en) | 2014-09-23 | 2017-09-12 | Intel Corporation | Loop nest parallelization without loop linearization |
US10325202B2 (en) * | 2015-04-28 | 2019-06-18 | Qualcomm Incorporated | Incorporating top-down information in deep neural networks via the bias term |
US11170294B2 (en) * | 2016-01-07 | 2021-11-09 | Intel Corporation | Hardware accelerated machine learning |
US9875104B2 (en) | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US20170270427A1 (en) * | 2016-03-17 | 2017-09-21 | Microsoft Technology Licensing, Llc | Multi-view machine learning |
US10534607B2 (en) | 2017-05-23 | 2020-01-14 | Google Llc | Accessing data in multi-dimensional tensors using adders |
US9946539B1 (en) * | 2017-05-23 | 2018-04-17 | Google Llc | Accessing data in multi-dimensional tensors using adders |
-
2017
- 2017-07-31 US US15/664,842 patent/US10108538B1/en active Active
-
2018
- 2018-07-10 WO PCT/US2018/041361 patent/WO2019027628A1/en unknown
- 2018-07-10 EP EP18746463.1A patent/EP3602280B1/en active Active
- 2018-07-27 CN CN201810841905.XA patent/CN109324827B/zh active Active
- 2018-07-30 TW TW107126266A patent/TWI670651B/zh active
- 2018-07-30 TW TW108127135A patent/TWI720566B/zh active
- 2018-08-24 US US16/112,307 patent/US10802956B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279818A (zh) * | 2011-07-28 | 2011-12-14 | 中国人民解放军国防科学技术大学 | 支持有限共享的向量数据访存控制方法及向量存储器 |
CN104838357A (zh) * | 2012-12-27 | 2015-08-12 | 英特尔公司 | 瓦解的多嵌套循环的向量化 |
Non-Patent Citations (2)
Title |
---|
Dongpeng Xu 等.An Address-Based Compiling Optimization for FFT on Multi-cluster DSP.《2012 Fifth International Symposium on Parallel Architectures, Algorithms and Programming》.2013,第60-64页. * |
魏帅 等.面向SLP的多重循环向量化.《软件学报》.2012,第7卷(第23期),第1717-1728页. * |
Also Published As
Publication number | Publication date |
---|---|
US10802956B2 (en) | 2020-10-13 |
WO2019027628A1 (en) | 2019-02-07 |
TW201941051A (zh) | 2019-10-16 |
US20190034327A1 (en) | 2019-01-31 |
TWI720566B (zh) | 2021-03-01 |
CN109324827A (zh) | 2019-02-12 |
EP3602280B1 (en) | 2021-10-13 |
TW201911039A (zh) | 2019-03-16 |
TWI670651B (zh) | 2019-09-01 |
US10108538B1 (en) | 2018-10-23 |
EP3602280A1 (en) | 2020-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109324827B (zh) | 用于处理用于访问数据的指令的装置、方法和系统 | |
JP7433356B2 (ja) | 加算器を使用した多次元テンソルにおけるデータへのアクセス | |
JP7279226B2 (ja) | 代替ループ限界値 | |
TWI678617B (zh) | 用於在使用加法器之多維張量中存取資料之系統、電腦實施方法及設備 | |
JP7485740B2 (ja) | ニューラルネットワーク命令セットアーキテクチャ | |
US11775832B2 (en) | Device and method for artificial neural network operation | |
CN117492838A (zh) | 访问序言和结尾数据 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |