CN110520834B - 替选循环限制 - Google Patents
替选循环限制 Download PDFInfo
- Publication number
- CN110520834B CN110520834B CN201880025248.XA CN201880025248A CN110520834B CN 110520834 B CN110520834 B CN 110520834B CN 201880025248 A CN201880025248 A CN 201880025248A CN 110520834 B CN110520834 B CN 110520834B
- Authority
- CN
- China
- Prior art keywords
- loop
- nested
- tensor
- nested loop
- iterations
- 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 claims abstract description 25
- 230000004044 response Effects 0.000 claims abstract description 12
- 238000013500 data storage Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 description 101
- 238000013528 artificial neural network Methods 0.000 description 25
- 230000008569 process Effects 0.000 description 11
- 238000004590 computer program Methods 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 6
- 230000004913 activation Effects 0.000 description 4
- 238000001994 activation Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 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
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006870 function 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
Images
Classifications
-
- 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/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- 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
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Medical Informatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Neurology (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
描述了用于存取N维张量的方法、系统和装置。在一些实施方式中,一种方法包括对第一嵌套循环的一个或多个第一迭代中的每个迭代,执行嵌套在第一嵌套循环内的第二嵌套循环的迭代,直到达到用于第二嵌套循环的第一循环边界为止。响应于第二嵌套循环具有超过计算系统的硬件属性的值的迭代的总数,用于第一嵌套循环的一个或多个第一迭代的第二嵌套循环的迭代的数目受到第一循环边界限制。在第一嵌套循环的倒数第二迭代已经完成之后,对第一嵌套循环的最后一个迭代执行第二嵌套循环的一个或多个迭代,直到达到替选循环边界为止。
Description
技术领域
本说明书通常涉及一种使用包括多个计算单元的专用计算单元来执行机器学习计算。
背景技术
神经网络是机器学习模型,其采用模型的一个或多个层来对所接收的输入生成输出,例如分类。一些神经网络除了外层之外还包括一个或多个隐藏层。每个隐藏层的输出被用作到网络中下一层的输入,即,网络的下一隐藏层或输出层。网络的每一层根据相应的参数集的当前值,从所接收的输入生成输出。
一些神经网络包括一个或多个卷积神经网络层。每个卷积神经网络层具有内核的相关的集。内核可以被表示为权重输入的矩阵结构。每个卷积层使用该内核来处理到该层的输入。到该层的输入的集合也可以被表示为矩阵结构。
发明内容
根据本说明书中的主题的一个创新方面,一种用于存取N维张量的方法包括:对第一嵌套循环的一个或多个第一迭代中的每个迭代,执行嵌套在第一嵌套循环内的第二嵌套循环的迭代,直到达到用于第二嵌套循环的第一循环边界为止。响应于第二嵌套循环具有超过计算系统的硬件属性的值的迭代的总数,用于第一嵌套循环的一个或多个第一迭代的第二嵌套循环的迭代的数目可能受到第一循环边界限制。在第一嵌套循环的倒数第二迭代完成之后,可以对第一嵌套循环的最后一个迭代执行第二嵌套循环的一个或多个迭代,直到达到替选循环边界为止,其中,替选循环边界小于第一循环边界。
这些和其他实施方式可以各自可选地包括下述特征中的一个或多个。一些方面可以包括响应于确定第一嵌套循环的倒数第二迭代已经完成,用用于第一循环边界的替选边界代替第一嵌套循环的最后一个迭代。
在一些方面中,硬件属性的值包括计算系统的单个计算单元的数目。每个单个计算单元可以包括计算瓦片、处理器或数学单元。
基于直到达到用于第二嵌套循环的第一循环边界为止执行嵌套在第一嵌套循环内的第二嵌套循环的迭代可以包括使用计算单元并行地执行第二嵌套循环的每个迭代。每个计算单元可以执行第二嵌套循环的相应迭代。
在一些方面中,替选循环边界是基于由将第二嵌套循环的迭代的总数除以计算单元的数目而得到的余数值。包括第一嵌套循环和第二嵌套循环的嵌套循环集可以包括嵌套在第一嵌套循环和第二嵌套循环之间的一个或多个循环,并且在第一嵌套循环和第二嵌套循环之间不嵌套任何其他循环的情况下,第二嵌套循环被嵌套在另一个循环内。第二嵌套循环可以直接被嵌套在第一嵌套循环内。
本说明书中所述的主题可以用具体实施例实施以便实现一个或多个下述优点。通过使用多个计算单元(例如,多个计算瓦片、多个处理器或多个数学单元)并行执行机器学习计算,可以提高计算速度和效率,从而可以在更短的时间量内执行更复杂的机器学习计算。嵌套循环的可调循环边界允许即使迭代的数目不是单个计算单元或其他硬件属性的数目的倍数,也可以并行处理嵌套循环的迭代。可以设置内循环的循环边界,以使对除嵌套内循环的外循环的最后一个迭代以外的所有迭代,内循环的迭代的数目等于单个计算单元的数目。这允许对外循环的每个迭代,例如在同一时间并行地执行内循环的每个迭代。另外,对除了外循环的最后一个迭代外的所有迭代,对外循环的每个迭代都使用每个单个计算单元,从而实现更快和更有效的计算。通过用内循环的替选循环边界替代用于外循环的最后一个迭代,可以减少执行内循环的迭代所需的指令数目,从而允许更少存储设备和/或更多可用存储器。
该方面和其他方面的其他实施方式包括被配置为执行在计算机存储设备上编码的方法的动作的相应系统、装置和计算机程序。可以借助于安装在系统上的、操作中使得系统执行动作的软件、固件、硬件或它们的组合来配置一台或多台计算机的系统。利用具有指令,可以配置一个或多个计算机程序,当该指令被数据处理装置执行时,使该装置执行动作。
在附图和下述描述中阐述本说明书中所述的主题的一个或多个实施方式的细节。本主题的其他潜在特征、方面和优点从说明书、附图和权利要求书将变得显而易见。
附图说明
图1是其中示例计算系统加速张量计算的环境的框图。
图2示出了用于使用多个计算单元遍历张量的示例嵌套循环。
图3是示出用于执行张量计算的示例过程的流程图。
在各附图中相同的参考数字和标记表示相同的元件。
具体实施方式
本说明书中描述的主题涉及使用替选循环限制来并行地处理嵌套循环的迭代,例如,使用包括多个计算单元的硬件计算系统。每个计算单元可以被实现为计算瓦片(tile)、处理器或数学单元。多个计算单元可以被配置为加速神经网络的推断工作负荷和/或加速用于确定张量元素的存储器地址的计算。硬件计算系统的每个计算单元都是独立的并且可以独立执行多层神经网络的给定层所需的计算。
具有多层的神经网络可以被使用以计算推断。例如,给定输入,神经网络可以计算输入的推断。神经网络通过神经网络的这些层的每一个处理输入来计算该推断。具体地,神经网络的层分别各自具有权重的相应集。每个层接收输入,并且根据用于该层的权重的集合来处理该输入以生成输出。
因此,为了从所接收的输入计算推断,神经网络接收该输入并且通过每个神经网络层对其进行处理以便生成推论,其中,来自一个神经网络层的输出被提供为下一神经网络层的输入。到神经网络层的数据输入,例如到神经网络的输入或到神经网络层的序列中的该层之下的层的输出可以被称为到该层的激活输入。
在本说明书中所述的技术可以通过跨多个计算单元(例如,多个计算瓦片、多个处理器或多个数学单元)分布张量计算来执行张量元素的存储器地址的计算。存储器地址的计算可以包括基于张量状态元素确定存储器地址偏移,并且将该偏移添加到张量元素的基地址。
张量是多维几何对象,并且示例多维几何对象包括矩阵和数据阵列。通常,软件算法由一个或多个计算瓦片执行,通过处理嵌套循环来遍历N维张量以执行张量计算。在一个示例计算过程中,每个循环可以负责遍历N维张量的特定维度。对于给定的张量构造,计算瓦片可能需要存取特定张量的元素以执行与该张量相关联的一个或多个点积计算。在神经网络层内执行的计算过程可以包括将包括输入激活的输入张量与包括权重的参数张量相乘。该计算包括在一个或多个周期上将输入激活与权重相乘,并且在多个周期上执行乘积累加。当存储器结构提供的输入激活与另一存储器结构提供的参数或权重相乘时,就会发生计算。由于张量被存储在存储器中,因此张量索引集可能需要转换为存储器地址的集合,以便从存储器中检索张量的正确元素。通常,计算瓦片的张量遍历单元执行控制操作,该控制操作提供与张量相关联的每个维度的索引以及其中遍历索引元素以执行计算的顺序。当乘法结果被写入输出总线并存储在存储器中时,张量计算结束。
计算瓦片(或多个计算瓦片)内的多个数学单元可以并行地执行针对N维张量的存储器地址计算。例如,可以对嵌套循环的最内循环的每个迭代执行计算。其中执行张量计算的每个循环被称为“张量计算循环”,并且可能并不总是最内循环。可以使用数学单元并行地执行这些迭代的计算。
在嵌套循环中遍历张量需要计算元素的存储器地址值以加载或存储元素的相应数据值。例如,三维张量的元素可以表示由神经网络分类的图像的特征。第一维(Z)可以表示图像的宽度,第二维(Y)可以表示图像的高度以及第三维(X)可以表示图像中的像素的RGB值。为了分类图像,可以将每个RBG值乘以卷积层的滤波器值以生成激活图。
嵌套循环可以被使用以确定用于存取张量的每个RBG值的存储器地址。嵌套循环可以包括用于张量的每个维度的循环。例如,外循环(z)可以被使用以遍历Z维度(图像的宽度),中间循环(y)可以被使用以遍历Y维度(图像的高度),以及内循环(x)可以被使用以遍历X维度(每个像素的三个RGB值)。在内循环的每个迭代中,对用于由外循环z和中间循环y的值表示的图像的特定像素的三个RGB值中的一个确定存储器地址。例如,当z=0和y=0时,可以在内循环x的第一迭代期间(例如,z=0;y=0;x=0),确定由Z=0和Y=0表示的图像的像素的R值的存储器地址。类似地,当z=5且y=2时,可以在内循环x的第三个迭代期间(例如,z=5;y=2;x=2),确定由Z=5和Y=2表示的图像的像素的G值的存储器地址。
可以使用多个计算单元并行地执行存储器地址计算。例如,如果存在三个计算单元,则可以并行地确定用于特定像素的每个RGB值的存储器地址值。第一计算单元可以确定用于该像素的R值的存储器地址,第二计算单元可以确定用于该像素的G值的存储器地址,以及第三计算单元可以确定用于该像素的B值的存储器地址。在对RGB值确定存储器地址之后,处理单元可以使用存储器地址来存取该值并且将该值乘以滤波器值。
在一些情况下,张量计算循环的迭代的数目可能超过计算单元的数目。在这种情况下,张量计算循环的迭代可以被分为其中嵌套张量计算循环的外循环的多个并行迭代。例如,对应于张量计算循环的N维张量的维度可以包括128个元素,并且计算系统可以包括64个计算单元。在该示例中,张量计算循环包括128个迭代,其可以被分为64个的两个外循环迭代,使得对外循环的两个迭代中的每一个并行地执行64个计算。在该示例中,前64个迭代可以分布在计算单元之中。在完成前64个迭代后,下一64个迭代可以被分布在计算单元之间。
在一些情况下,张量计算循环的迭代的个数可能不是计算单元的数目的精确的倍数。例如,对应于张量计算循环的维度可以包括160个元素,并且计算系统可以具有64个计算单元。在该示例中,张量计算循环包括160个迭代,这些迭代可以被分为64个两个外循环迭代和32个第三外循环迭代。为了调整用于第三外循环迭代的张量计算循环的迭代的数目,在外循环的第二迭代之后,例如在外循环的最后一个迭代之前,可以将张量计算循环的循环边界从64改变为32。
图1是环境100的框图,其中,示例计算系统102加速张量计算。例如,计算系统102可以加速与深度神经网络(DNN)相关联的计算。计算系统102包括控制器105和多个单个计算瓦片112-A至112-Z。控制器105被配置为执行与计算系统102内的张量计算有关的一个或多个指令。尽管未示出,但是控制器105可以包括用于存储和存取与计算系统102内发生的计算有关的各种数据的数据存储器,以及用于存储可由控制器105的一个或多个处理器执行的一个或多个机器可读指令的指令存储器。
控制器105可以从主机130接收输入132,例如指令、编译程序等。在计算系统102执行张量计算之后,控制器105可以将输出134提供给主机。例如,输出134可以是用于张量元素的存储器地址。控制器105可以经由主机接口(未示出),从主机130接收输入132并且将输出134提供给主机130。
控制器105可以经由一个或多个数据通信路径,例如,一个或多个总线,与计算瓦片112-A至112-Z通信。类似地,计算瓦片112-A至112-Z可以经由一条或多条总线相互通信。在2016年10月27日提交的、名为为“Neural Network Compute Tile”的美国专利申请No.15/335,769中描述了具有多个计算瓦片的示例计算系统,其全部内容通过引用合并于此。
每个计算瓦片112-A至112-Z包括处理单元114、数据存储介质116和张量遍历单元120。存储介质116在计算系统102内存储信息。在一些实施方式中,存储介质116是一个或多个易失性存储单元。在一些其他实施方式中,存储介质116是一个或多个非易失性存储单元。存储介质116还可以是另一种形式的计算机可读介质,诸如软盘设备、硬盘设备、光盘设备或磁带设备、闪速存储器或其他类似的固态存储设备、或设备的阵列,包括存储区域网络或其他配置中的设备。指令在由处理单元114执行时,使处理单元114执行一个或多个任务。处理单元114可以包括一个或多个处理器和/或一个或多个有限状态机(FSM)。处理单元114可以执行从控制器105接收的指令。例如,处理单元114可以使用张量遍历单元120执行用于计算用于张量元素的存储器地址(或存储器地址偏移量)的指令。对于包括FSM的处理单元,FSM可以从张量遍历单元120查询用于张量元素的存储器地址。
通常,张量遍历单元120确定与一个或多个张量相关联的状态。在一些实施方式中,状态可以包括循环边界值、当前循环索引变量值、用于确定存储器地址值的部分地址偏移值和/或用于处理分支循环边界的程序计数器值。张量遍历单元120可以被实现为专用集成电路。
张量遍历单元120将张量索引转换成存储器地址。例如,张量遍历单元120可以将一组N维张量索引转换成一维地址空间。张量遍历单元120可以通过使张量元素的存储器地址成为元素的维度索引的组合(例如,线性组合)来执行这样的转换。
张量遍历单元120可以包括一个或多个张量状态元素122和一个或多个数学单元124。例如,计算瓦片112-A的张量遍历单元120包括四个数学单元124-A至124-D。其他计算瓦片的其他张量遍历单元可以包括其他数目的数学单元。张量状态元件122中的每个可以是存储元件,例如寄存器或任何合适的存储电路。每个数学单元124可以包括一个或多个算术逻辑单元(ALU)和/或一个或多个硬件加法器。数学单元124可以被使用以例如基于存储在张量状态元素中的值来计算张量元素的存储器地址或存储器地址偏移值。在2016年10月27日提交的、名为“Neural Network Compute Tile”的美国专利申请No.15/335,769和2016年2月3日提交的、名为“Accessing Data in Multi-Dimensional Tensors”的美国专利申请No.15/014,265中描述了使用张量遍历单元来确定存储器地址的示例技术。控制器105可以使用计算瓦片112-A至112-Z来协调张量计算。例如,控制器105可以接收指令以确定张量元素的存储器地址。控制器105可以使用嵌套循环来执行张量计算。
每个循环可以负责遍历N维张量的相应维。多维张量可以是矩阵或多维矩阵。例如,二维张量是矩阵,而三维张量是由多个二维矩阵组成的三维矩阵。N维张量的每个维度可以包括一个或多个元素,其中,每个元素可以存储各自的数据值。例如,张量可以是程序变量,其中,该变量可以具有三个维度。第一维度可以具有三百个元素的长度,第二维度可以具有一千元素的长度,而第三维度可以具有二十个元素的长度。当然,在每个维度上其他数目的元素也是可能的。
遍历嵌套循环的张量可以包括计算元素的存储器地址值以加载或存储元素的相应数据值。for循环是嵌套循环的示例,其中,可以嵌套由三个循环索引变量(例如i,j和k)跟踪的三个循环以遍历三维张量。在神经网络中,元素的值可以用在与张量相关联的一个或多个点积计算中。例如,元素的值可以乘以相应的参数或权重。可以使用嵌套的for循环,按顺序遍历张量的元素以存取元素并且使用元素的值来执行一个或多个计算。继续三维张量示例,外for循环可以被使用以遍历由变量i跟踪的循环,中间for循环可以被使用以遍历由变量j跟踪的循环,而内for循环可以被使用以遍历由变量k跟踪的循环。在该示例中,所存取的第一元素可以是(i=0,j=0,k=0),第二元素可以是(i=0,j=0,k=1),依此类推。计算瓦片112-A至112-Z的张量遍历单元120可以被使用以使用嵌套循环,依次确定元素的存储地址,使得处理单元可以存取元素的值并且使用元素的值,执行一个或多个计算。也可以使用嵌套的for循环类似地存取权重或参数的值。张量遍历单元120还可以被使用以确定用在计算中的权重或参数和/或计算的输出的地址,其可以被用作到神经网络的隐藏层的输入。
例如,如在美国专利申请No.15/014,265中所述,张量状态元素122可以包括一组张量索引元素、一组张量约束元素和一组维度乘数元素。可以将元素的每个组布置成具有M行N列的二维数组。该组的每一行可以表示张量的张量索引信息。该组的每一列可以表示用于与张量相关联的嵌套循环索引变量值的信息(例如,张量索引值、张量边界值或维度乘数值)。例如,用于张量索引元素的二维数组中的一列可以表示用于变量i的张量索引信息,一列可以表示用于变量i的张量索引信息,并且一列可以表示用于变量k的张量索引信息。
每个张量索引元素可以跟踪用于嵌套循环中的循环的嵌套循环变量。例如,可以分配一个张量索引元素来跟踪嵌套循环索引变量i,可以分配一个张量索引元素来跟踪嵌套循环索引变量j,并且可以分配一个张量索引元素来跟踪嵌套循环索引变量k。每个张量边界元素具有张量索引元素中的相应的元素。每个张量边界元素可以表示用于与张量相关联的嵌套循环索引变量值的张量边界信息。例如,一个张量边界元素可以表示用于嵌套循环索引变量i的张量边界信息,一个张量边界元素可以表示用于嵌套循环索引变量j的张量边界信息,而一个张量边界元素可以表示用于嵌套循环索引变量k的张量边界信息。
每个维度乘数元素可以表示乘以张量索引元素中的相应元素的乘数。为了确定元素的存储器地址,张量遍历单元120可以通过将在用于嵌套循环索引变量的张量索引元素中存储的值乘以用于嵌套循环索引变量的乘数来确定用于每个嵌套循环索引变量的存储器地址偏移。然后,张量遍历单元120可以将所有乘积相加在一起,以确定对应于正被存取的元素的存储器地址。
张量遍历单元120可以在嵌套循环的内循环的每个迭代之后更新张量索引元素。对于内循环的每个迭代,张量遍历单元120可以例如通过递增用于内循环的张量索引元素来更新用于该循环的张量索引元素。如果用于更新的内循环的张量索引元素等于在用于内循环的张量边界元素中存储的值,则可以重置张量索引元素,并且可以更新其中嵌套内循环的下一个外循环的张量索引元素。然后,张量遍历单元120可以通过将张量索引元素与其相应的乘数相乘并且对该乘积求和,来确定用于下一元素的对应于内循环的该个迭代的存储器地址,如上所述。
控制器105可以通过迭代程序的嵌套循环并且对一个或多个循环的每个迭代,例如对嵌套循环的最内(或其他)循环的每个迭代执行计算来协调张量计算。为了加速张量计算,控制器105可以使用多个计算单元来并行地执行至少一些张量计算。计算单元可以是单个的计算瓦片或单个的数学单元。例如,控制器105可以请求计算瓦片112-A执行第一张量计算,并且同时,请求计算瓦片112-B执行第二张量计算。在另一示例中,控制器105可以请求计算瓦片112-A对特定张量执行张量计算。然后,张量遍历单元120可以使用数学单元124-A至124-D来并行地执行张量计算。
当用于循环的索引变量等于(或大于)用于循环的边界时,通常完成循环。例如,循环可以被编程为“for(i=0;i<3;i++),其中i是索引变量且边界为3。该示例循环包括三个迭代(i=0,i=1以及i=2)。如果索引变量等于3,则不进行计算就退出循环。当使用多个计算单元(例如,使用多个计算瓦片112或多个数学单元124)执行并行计算时,每个将计算分配给计算单元时,控制器105可以迭代索引变量,并且在将循环的另一迭代分配给另一计算单元之前,将索引变量与边界进行比较。
在一些实施方式中,由控制器105执行的程序的嵌套循环可以具有已经基于计算系统102的属性确定的循环边界。例如,可以基于计算系统102的计算瓦片112-A至112-Z的数目或张量遍历单元120的数学单元的数目,确定用于循环的一个或多个的循环边界。
在一些实施方式中,编译器136编译用于执行张量的张量计算的程序。编译器136可以被配置为基于在张量的一个或多个维度中包括的元素的数目和/或计算系统102的计算单元的数目,来确定用于这些循环的一个或多个的循环边界。用于循环的循环边界是该循环当用于循环的索引值等于循环边界时完成的数字。换句话说,用于循环的循环边界可以等于该循环的迭代的数目。
编译器136可以被配置为为一个或多个张量计算循环创建外循环(其中执行张量计算的循环),并且确定用于该外循环的一个或多个循环边界。所创建的外循环可以被使用以将张量计算循环的迭代划分为外循环的多个迭代。例如,计算系统102可以包括64个计算单元(例如,计算瓦片或数学单元),并且张量计算循环可以包括128个迭代。在该示例中,计算系统102能够并行执行64个张量计算。为了并行地执行64个张量计算,可以将张量计算循环的128个迭代划分为两个外循环迭代,每个外循环迭代包括张量计算循环的64个迭代。例如,外循环的第一迭代可以包括张量计算循环的迭代1-64。外循环的第二迭代可以包括张量计算循环的迭代65-128。以这种方式,使用计算系统的64个计算单元中的每一个(例如,每瓦片一个计算)对外循环的第一迭代并行地执行64个张量计算,并且使用该64个计算单元对外循环的第二迭代并行地执行64个张量计算。
编译器136可以确定外循环是否应该被创建,如果是,则在编译的程序中创建外循环。在一些实施方式中,当张量计算循环具有比将在其上执行程序的计算系统102的计算单元的数目更多的迭代时,编译器136仅创建外循环(除了正在编译的程序中的任何外循环之外)。如果张量计算循环具有比计算单元的数目更多的迭代,则编译器136可以创建外循环,以将张量计算循环的迭代划分为多个外循环迭代。
编译器136还可以基于在其中执行张量计算的循环的迭代的数目和/或将在其上执行程序的计算系统102的计算单元的数目,来确定用于所创建的外循环的循环边界。如果迭代的数目是计算单元的数目的倍数,则张量计算循环的迭代的数目可以等于对应于该循环的维度中的元素的数目。编译器136可以将张量计算循环的迭代的数目除以计算单元的数目,因为计算单元的数目表示可以使用计算单元并行执行的最高迭代的数目。例如,如果张量计算循环的迭代的数目为128,而计算单元的数目为64,则为所创建的外循环的循环边界可能为2(128/64)。因此,在该示例中,外循环的第一迭代将包括张量计算循环的64个并行迭代,并且外循环的第二迭代将包括张量计算循环的64个并行迭代。如果除法产生余数,如下所述,则用于外循环的循环边界可以递加1。
编译器136还可以基于张量计算循环的迭代的数目和将在其上执行程序的计算系统102的计算单元的数目,来确定用于张量计算循环的一个或多个循环边界。如果张量计算循环的迭代的数目是计算单元的数目的精确的倍数,则用于张量计算循环的循环边界可以等于为张量计算循环创建的外循环的每个迭代的计算单元的数目。例如,如果张量计算循环具有120个迭代,并且计算系统包括60个计算单元,则用于张量计算循环的循环边界可能是60,以及用于外循环的循环边界可能是2。在该示例中,外循环的第一迭代将包括张量计算循环的60个迭代(例如,并行迭代),而外循环的第二迭代可以包括张量计算循环的60个迭代。
如果张量计算循环的迭代的数目不是计算单元的数目的精确的倍数,则编译器136可以为张量计算循环确定两个或更多个循环边界。例如,编译器136可以将张量计算循环的迭代的数目除以计算单元的数目。由于迭代的数目不是精确的倍数,因此该除法的结果将包括余数值。例如,迭代的数目可以是160而计算单元的数目可以是50。在该示例中,编译器136可以将迭代的数目(160)除以计算单元的数目(50)以获得为3的商以及10的余数。编译器136可以将张量计算循环的第一循环边界设置为等于计算单元的数目(例如50),而将张量计算循环的替选循环边界设置为等于余数(例如,10)。在程序执行期间,替选循环边界可以被用于外循环的最后一个迭代的张量计算循环,而第一循环边界可以被用于外循环的每个其他迭代。继续前面的示例,外循环将具有为4的循环边界,因为160/50=3,余数为10,并且基于该余数,使外循环的循环边界递增1。对于外循环的前三个迭代,张量计算循环的循环边界将为50。因此,对于外循环的前三个迭代中的每个迭代,将并行地执行张量计算循环的50个迭代,导致150个迭代被执行。对于外循环的最后一个迭代,张量计算循环的循环边界将为10,导致在外循环的四个迭代中执行张量计算循环的所有160个迭代。
编译后的程序可以包括使得控制器105的处理器在外循环的倒数第二迭代已经完成之后并且在执行外循环的最后一个迭代之前,将用于张量计算循环的循环边界从第一循环边界改变为替选循环边界的指令。以这种方式,用于替选循环边界的循环边界被用作用于外循环的最后一个迭代的张量计算循环的循环边界,该外循环被创建以将张量计算循环的迭代划分为多个外循环迭代。
在一些实施方式中,编译器136可以将用于张量计算循环的外循环创建为其中嵌套张量计算循环的直接外循环,即,在外循环和张量计算循环之间没有嵌套其他循环。在一些实施方式中,编译器136可以将外循环创建为其中嵌套张量计算循环的嵌套循环的最外循环,即,外循环不被嵌套在另一个循环内。通过在嵌套循环的最外循环处创建外循环,使用嵌套循环和张量遍历单元120确定的存储器地址更连续地对齐张量元素。例如,在不需要调整用于最后一个迭代的循环边界的情况下,可能对其处将不存储数据的循环的迭代确定存储器地址,导致浪费了存储器空间。在不需要使用额外的指令的情况下,用于循环的最后一个迭代的替选限制允许张量遍历单元仅对张量元素确定存储器地址。
图2示出了用于使用多个计算单元210遍历张量205的示例嵌套循环215和220。每个单个计算单元210可以是计算瓦片或数学单元。在该示例中,张量205是具有X维度、Y维度和Z维度的三维张量。尽管未按比例绘制张量205,但是X维度的长度为160个元素,Y维度的长度为30个元素,Z维度的长度为100个元素。张量105中的每个元素可以存储在神经网络计算中使用的相应数据值。
通常,可以使用嵌套循环215遍历张量。在此示例中,使用内循环遍历X维度,使用中间循环遍历Y维度,以及使用外循环遍历Z维度。对于内循环的每个迭代,为对应于用于内循环的这些迭代的x,y和z的值的张量元素来计算存储器地址。
多个计算单元210可以是计算系统的一部分,例如,每个计算单元210可以与图1的计算瓦片112-A至112-Z或图1的数学单元124相同或相似。在此示例中,计算系统包括64个计算单元,尽管其他数目的计算单元也是可能的。计算单元210可以例如使用嵌套循环220,并行地对张量205执行张量计算。
编译器,例如图1的编译器136可以基于包括嵌套循环215的程序(或表示嵌套循环215的代码)以及将在其上执行该程序的计算系统的计算单元210的数目来生成嵌套循环220。例如,编译器可以确定应该创建外循环以将张量计算循环(在该示例中,用于X维度的循环)的迭代划分为多个外循环迭代。
为了确定是否应该创建外循环,编译器可以将每个张量计算循环的迭代的数目与计算系统的硬件属性进行比较。例如,硬件属性可以是计算单元210的数目或该计算系统可以并行执行的计算的总数。如果张量计算循环的循环的迭代的数目超过了硬件属性的值,则编译器可能会创建外循环。在该示例中,用于X维度的循环的迭代的数目(160)超过了计算单元的数目(64)。因此,编译器已经创建了带有索引变量“i”的外循环。
编译器还可以基于张量计算循环的迭代的数目和硬件属性的值(例如,计算单元的数目)来确定外循环的循环边界。例如,编译器可以通过将张量计算循环的迭代的数目(160)除以计算单元的数目(64)来确定界限,结果为2,余数为32。如上所述,对任何余数,使外循环边界递增1。因此,该示例中的外循环边界为3。
编译器还可以基于张量计算循环的迭代的数目和硬件属性的值来确定用于张量计算循环的一个或多个循环边界。如果张量计算循环的迭代的数目不超过硬件属性的值,则张量计算循环的循环边界可以等于迭代的数目。如果张量计算循环的迭代的数目是硬件属性的精确的倍数,则用于张量计算循环的循环边界可能等于硬件属性的值。如果张量计算循环的迭代的数目超过了硬件属性的值,但不是硬件属性值的精确的倍数,则张量计算循环可能具有用于除循环的最后一个迭代以外的所有迭代的第一循环边界以及用于循环的最后一个迭代的替选循环边界。在将张量计算循环的迭代的数目除以硬件属性的值之后,第一循环边界可以等于硬件属性的值,而备用循环边界可以等于余数。
在该示例中,张量计算循环的迭代的数目(160)超过计算单元的数目(64),但不是计算单元的数目的精确的倍数。因此,用于X维度的第一循环边界是64,替选边界是32(160/64=2,余数为32)。对于外循环的前两个迭代(循环i),用于X维度的循环的循环边界将为64。对于外循环的最后一个迭代,用于X维度的循环边界将为32。
对于外循环的第一迭代,可以使用64个计算单元并行地确定张量的64个存储器地址。例如,第一计算单元可以确定用于z=0;y=0;x=0的存储器地址;第二计算单元可以确定用于z=0;y=0;x=0…的存储器地址,以及第64个计算单元可以计算用于z=0;y=0;x=63的存储器地址。对于外循环的最后一个迭代,可以使用64个计算单元中的32个来确定内循环的最后32个迭代。
图3是示出用于执行张量计算的示例过程300的流程图。过程300可以由一个或多个计算机的系统,例如图1的计算系统102执行。
对于第一嵌套循环的一个或多个第一迭代中的每一个,系统执行嵌套在第一嵌套循环内的第二嵌套循环的迭代,直到到达用于第二嵌套循环的第一循环边界为止(302)。例如,第二嵌套循环可以是在其中作为程序的一部分执行张量计算(例如,存储器地址计算的点积计算)的循环。
第一循环可以是例如由编译器创建的外循环,该编译器编译包括第一和第二嵌套循环的程序。例如,编译器可以识别张量计算循环,确定是否为张量计算循环创建外循环,并且如果是,则确定所创建的外循环和/或张量计算循环的一个或多个循环边界。
编译器可以基于第二嵌套循环的迭代的总数(例如,在对应于第二循环的张量的维度中的元素总数)以及系统的计算单元的数目来确定第二嵌套循环的第一循环边界。例如,如果第二循环的迭代的总数小于计算单元的数目,则第一循环边界可以等于第二嵌套循环的迭代的总数。如果第二嵌套循环的迭代的总数是计算单元的数目的精确的倍数,则第一循环边界可以等于迭代的数目。如果第二嵌套循环的迭代的总数大于计算单元的数目,但不是计算单元的精确的倍数,则编译器可以将第一循环边界设置为计算单元的数目,并且确定等于第二嵌套循环的迭代的总数除以计算单元的数目的余数的替选循环边界。
在该示例中,假定第二嵌套循环的迭代的总数大于计算单元的数目,并且第二嵌套循环的迭代的总数不是计算单元的数目的精确的倍数。因此,在该示例中,响应于第二嵌套循环具有超过计算单元的硬件属性的值的迭代的总数,用于第一嵌套循环的一个或多个第一迭代的第二嵌套循环的迭代的数目受到第一循环边界限制。
系统可以并行地执行第二嵌套循环的迭代。例如,如上所述,可以确定第二嵌套循环的第一循环边界,使得第二嵌套循环的迭代数目不超过计算单元的数目。在该示例中,可以并行地执行用于第一嵌套循环的一个或多个第一迭代中的每一个的第二循环的每个迭代。当系统将第二嵌套循环的迭代分配给计算单元时,系统可以迭代用于第二循环的索引变量。当索引变量等于第一循环边界时,第二循环已经完成。
系统确定第一循环的倒数第二(即,倒数第二)迭代是否已经完成(304)。例如,系统可以将用于第一循环的索引变量与用于第一循环的循环边界进行比较。如果循环边界和索引变量之间的差是特定数(例如,1),则系统可以确定第一循环的倒数第二迭代尚未完成。例如,索引变量为“i”的循环可以包括三个迭代。在该示例中,可以将循环编程为“for(i=0;i<3)”或“for(i=1;i<4)”。
在第一示例中,循环边界为3,对于i=2执行循环的最后一个迭代,并且对于i=1执行循环的倒数第二迭代。通常,当执行循环的迭代时或正好在其之后,通常递增索引变量。在该示例中,如果在执行循环的迭代之后索引变量为2,则所执行的迭代是倒数第二迭代。因此,如果边界(3)与索引变量之间的差等于1,则循环的倒数第二迭代就是完成的迭代。
类似地,在第二示例中,循环边界为4,对于i=3执行循环的最后一个迭代,并且对于i=2执行循环的倒数第二迭代。在该示例中,如果在执行循环的迭代之后索引变量为3,则所执行的迭代是倒数第二迭代。因此,如果边界(3)与索引变量之间的差等于1,则循环的倒数第二迭代是完成的迭代。如果第一循环的倒数第二迭代尚未完成,则系统返回操作302以针对与更新的索引变量值相对应的第一嵌套循环的下一个迭代执行第二嵌套循环的迭代。
如果第一循环的倒数第二迭代已经完成,则系统将对于第二循环替换为替选边界,以替代第一循环边界(308)。例如,针对第一嵌套循环的最后一个迭代,系统可以将替选边界用于第二嵌套循环。
系统为第一嵌套循环的最后一个迭代执行第二嵌套循环的一个或多个迭代,直到达到替选循环边界为止(310)。例如,如果剩余第二嵌套循环的多个迭代,则系统可以使用多个计算单元并行地执行迭代。
本说明书中描述的主题和功能操作的实施例能够以数字电子电路、以有形实施的计算机软件或固件、以计算机硬件,包括本说明书中公开的结构及其结构等同物、或者以它们中的一个或多个的组合来实现。本说明书中所述的主题可以被实现为一个或多个计算机程序,即被编码在有形非瞬时性程序载体上的计算机程序指令的一个或多个模块,用于由数据处理装置执行或控制数据处理装置的操作。替选地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光、或电磁信号,其被生成来编码信息以用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基底、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本说明书中所述的过程和逻辑流程可以由一个或多个可编程计算机来执行,所述可编程计算机执行一个或多个计算机程序以通过在输入数据上操作并且生成输出来执行功能。该过程和逻辑流程也可以由专用逻辑电路执行并且装置也可以被实现为专用逻辑电路,所述专用逻辑电路例如FPGA(现场可编程门阵列)、ASIC(专用集成电路),或者GPGPU(通用图形处理单元)。
适合于执行计算机程序的处理器包括例如通用或专用微处理器或者这两者,或者任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的必需元件是用于实施或执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘、或光盘,或者可操作地耦合以从其接收数据或向其传输数据、或者这两者。然而,计算机不需要具有这样的设备。此外,计算机可以被嵌入另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器、或便携式存储设备,例如通用串行总线(USB)闪速存储器驱动器,仅举数例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备,例如EPROM、EEPROM和闪速存储器设备;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。
虽然本说明书包含许多具体实施方式细节,但是这些不应当被解释为对任何发明或可以要求保护的内容的范围的限制,而是应当被解释为对具体发明的特定实施例特有的特征的描述。本说明书中在单独实施例的场境下所述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例场境下所描述的各个特征也可以在多个实施例中单独地或以任何合适的子组合来实现。此外,虽然上文可能将特征描述为以某些组合来起作用并且甚至最初如此要求保护,但是在一些情况下来自所要求保护的组合的一个或多个特征可以从组合中被删去,并且所要求保护的组合可以针对子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应当被理解为需要以所示的特定顺序或以连续顺序来执行这样的操作、或者需要执行所有所图示的操作才能达到期望的结果。在某些情况下,多任务和并行处理可以是有利的。此外,上述实施例中的各种系统模块和组件的分离不应当被理解为在所有实施例中都需要这样的分离,并且应当理解到,所述的程序组件和系统通常可以一起集成在单个软件产品中或封装到多个软件产品内。
已经描述了本主题的具体实施例。其他实施例落入所附权利要求书的范围内。例如,权利要求书中所记载的动作可以以不同的顺序执行并且仍然达到期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或连续顺序来达到期望的结果。在某些实施方式中,多任务和并行处理可以是有利的。
Claims (13)
1.一种由硬件计算系统执行的用于存取N维张量并且包括确定所述N维张量的张量元素的存储器地址的方法,其中,所述硬件计算系统包括:
控制器,和
用于执行从所述控制器接收的指令的多个计算瓦片,其中每个计算瓦片包括处理单元、数据存储介质和张量遍历单元,并且所述张量遍历单元包括多个数学单元,所述数学单元能够并行操作以确定所述存储器地址,所述方法包括:
使用所述计算瓦片中的一个来遍历张量的特定维度,包括确定所述N维张量的所述特定维度的张量元素的数目不是所述多个数学单元的数目的精确倍数,并且作为响应:
对第一嵌套循环的总迭代数目的一个或多个第一迭代中的每个迭代,操作所述多个数学单元以并行执行嵌套在所述第一嵌套循环内的第二嵌套循环的迭代直到用于所述第二嵌套循环的第一循环边界为止,所述第二嵌套循环中的每个迭代确定对应的张量元素存储器地址,并且其中,响应于所述第二嵌套循环在所述第一嵌套循环的所述总迭代数目上具有超过所述计算瓦片的所述多个数学单元的数目的总迭代数目,用于第一嵌套循环的所述一个或多个第一迭代的所述第二嵌套循环的迭代的数目受到所述第一循环边界限制;以及
在所述第一嵌套循环的倒数第二迭代已经完成之后,并行操作所述数学单元以对所述第一嵌套循环的最后一个迭代执行所述第二嵌套循环的一个或多个迭代来确定对应的张量元素存储器地址,直到达到替选循环边界为止,其中,所述替选循环边界小于所述第一循环边界。
2.如权利要求1所述的方法,进一步包括:针对所述第二嵌套循环,响应于确定所述第一嵌套循环的所述倒数第二迭代已经完成,用用于所述第一循环边界的所述替选边界代替用于所述第一嵌套循环的最后一个迭代。
3.如权利要求1所述的方法,其中,所述替选循环边界是由将所述第二嵌套循环的所述总迭代数目除以所述多个数学单元的数目而得到的余数值。
4.如权利要求1所述的方法,其中,包括所述第一嵌套循环和所述第二嵌套循环的嵌套循环集合包括嵌套在所述第一嵌套循环和所述第二嵌套循环之间的一个或多个循环,并且所述第二嵌套循环被嵌套在另一个循环内。
5.如权利要求1所述的方法,其中,在所述第一嵌套循环和所述第二嵌套循环之间不嵌套任何其他循环的情况下,所述第二嵌套循环直接被嵌套在所述第一嵌套循环内。
6.一种用于存取N维张量的硬件计算系统,所述硬件计算系统包括:
控制器,和
用于执行从所述控制器接收的指令的多个计算瓦片,其中每个计算瓦片包括处理单元、数据存储介质和张量遍历单元,并且所述张量遍历单元包括多个单个数学单元,所述多个单个数学单元能够并行操作以确定所述N维张量的张量元素的存储器地址,其中每个处理单元被配置为通过以下操作使得其相应计算瓦片遍历所述张量的特定维度:
对第一嵌套循环的总迭代数目的一个或多个第一迭代中的每个迭代,操作所述多个数学单元以并行执行嵌套在所述第一嵌套循环内的第二嵌套循环的迭代直到用于所述第二嵌套循环的第一循环边界为止,所述第二嵌套循环中的每个迭代确定对应的张量元素存储器地址,并且其中,响应于所述第二嵌套循环在所述第一嵌套循环的所述总迭代数目上具有超过所述多个数学单元的数目的总迭代数目,用于所述第一嵌套循环的所述一个或多个第一迭代的所述第二嵌套循环的迭代的数目受到所述第一循环边界限制;以及
在所述第一嵌套循环的倒数第二迭代已经完成后,并行操作所述数学单元以对所述第一嵌套循环的最后一个迭代执行所述第二嵌套循环的一个或多个迭代来确定对应的张量元素存储器地址,直到达到替选循环边界为止,其中,所述替选循环边界小于所述第一循环边界。
7.如权利要求6所述的系统,其中,所述处理单元被进一步配置为:针对所述第二嵌套循环,响应于确定所述第一嵌套循环的所述倒数第二迭代已经完成,用用于所述第一循环边界的所述替选边界代替用于所述第一嵌套循环的最后一个迭代。
8.如权利要求6所述的系统,其中,所述替选循环边界是基于由将所述第二嵌套循环的总迭代数目除以所述多个数学单元的数目而得到的余数值。
9.如权利要求7所述的系统,其中,包括所述第一嵌套循环和所述第二嵌套循环的嵌套循环集合包括嵌套在所述第一嵌套循环和所述第二嵌套循环之间的一个或多个循环,并且所述第二嵌套循环被嵌套在另一个循环内。
10.如权利要求6所述的系统,其中,在所述第一嵌套循环和所述第二嵌套循环之间不嵌套任何其他循环的情况下,所述第二嵌套循环直接被嵌套在所述第一嵌套循环内。
11.一种其上存储有指令的非暂时性处理器可读介质,所述指令在由一个或多个处理器执行时使得所述一个或多个处理器实现一种由硬件计算系统执行的用于存取N维张量并且包括确定所述N维张量的张量元素的存储器地址的方法,其中,所述硬件计算系统包括:
控制器,和
用于执行从所述控制器接收的指令的多个计算瓦片,其中每个计算瓦片包括处理单元、数据存储介质和张量遍历单元,并且所述张量遍历单元包括多个数学单元,所述数学单元能够并行操作以确定所述存储器地址,所述方法包括:
使用所述计算瓦片中的一个来遍历张量的特定维度,包括确定所述N维张量的所述特定维度的张量元素的数目不是所述多个数学单元的数目的精确倍数,并且作为响应:
对第一嵌套循环的总迭代数目的一个或多个第一迭代中的每个迭代,操作所述多个数学单元以并行执行嵌套在所述第一嵌套循环内的第二嵌套循环的迭代直到用于所述第二嵌套循环的第一循环边界为止,所述第二嵌套循环中的每个迭代确定对应的张量元素存储器地址,并且其中,响应于所述第二嵌套循环在所述第一嵌套循环的所述总迭代数目上具有超过所述计算瓦片的所述多个数学单元的数目的总迭代数目,用于第一嵌套循环的所述一个或多个第一迭代的所述第二嵌套循环的迭代的数目受到所述第一循环边界限制;以及
在所述第一嵌套循环的倒数第二迭代已经完成之后,并行操作所述数学单元以对所述第一嵌套循环的最后一个迭代执行所述第二嵌套循环的一个或多个迭代来确定对应的张量元素存储器地址,直到达到替选循环边界为止,其中,所述替选循环边界小于所述第一循环边界。
12.如权利要求11所述的非暂时性处理器可读介质,其中,所述处理单元被进一步配置为:针对所述第二嵌套循环,响应于确定所述第一嵌套循环的所述倒数第二迭代已经完成,用用于所述第一循环边界的所述替选边界代替所述第一嵌套循环的最后一个迭代。
13.如权利要求11所述的非暂时性处理器可读介质,其中,所述替选循环边界是由将所述第二嵌套循环的所述总迭代数目除以所述多个数学单元的数目而得到的余数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310558267.1A CN116663604A (zh) | 2017-06-19 | 2018-04-27 | 替选循环限制 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/627,022 | 2017-06-19 | ||
US15/627,022 US10248908B2 (en) | 2017-06-19 | 2017-06-19 | Alternative loop limits for accessing data in multi-dimensional tensors |
PCT/US2018/029796 WO2018236468A1 (en) | 2017-06-19 | 2018-04-27 | ALTERNATE LOOP LIMITS |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310558267.1A Division CN116663604A (zh) | 2017-06-19 | 2018-04-27 | 替选循环限制 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110520834A CN110520834A (zh) | 2019-11-29 |
CN110520834B true CN110520834B (zh) | 2023-05-23 |
Family
ID=62186548
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310558267.1A Pending CN116663604A (zh) | 2017-06-19 | 2018-04-27 | 替选循环限制 |
CN201880025248.XA Active CN110520834B (zh) | 2017-06-19 | 2018-04-27 | 替选循环限制 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310558267.1A Pending CN116663604A (zh) | 2017-06-19 | 2018-04-27 | 替选循环限制 |
Country Status (7)
Country | Link |
---|---|
US (2) | US10248908B2 (zh) |
EP (1) | EP3642708A1 (zh) |
JP (2) | JP7035080B2 (zh) |
KR (2) | KR102261768B1 (zh) |
CN (2) | CN116663604A (zh) |
TW (2) | TWI672594B (zh) |
WO (1) | WO2018236468A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11321092B1 (en) * | 2017-11-08 | 2022-05-03 | Habana Labs Ltd. | Tensor-based memory access |
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 |
US10373291B1 (en) * | 2018-01-31 | 2019-08-06 | Google Llc | Image transformation for machine learning |
CN109359732B (zh) | 2018-09-30 | 2020-06-09 | 阿里巴巴集团控股有限公司 | 一种芯片及基于其的数据处理方法 |
JP6832329B2 (ja) * | 2018-12-18 | 2021-02-24 | 富士通株式会社 | データ構造 |
US11748599B2 (en) * | 2019-02-21 | 2023-09-05 | Texas Instruments Incorporated | Super-tiling in neural network processing to enable analytics at lower memory speed |
EP3828698B1 (en) * | 2019-04-04 | 2022-07-20 | Cambricon Technologies Corporation Limited | Data processing method and apparatus, and related product |
US11354564B2 (en) * | 2019-06-27 | 2022-06-07 | Intel Corporation | Tuning of loop orders in blocked dense basic linear algebra subroutines |
CN114270319A (zh) * | 2019-10-07 | 2022-04-01 | 谷歌有限责任公司 | 在机器学习计算单元之间重新分配张量元素 |
CN114430838A (zh) * | 2019-12-19 | 2022-05-03 | 谷歌有限责任公司 | 使用神经网络加速器来处理连续输入 |
US11275671B2 (en) | 2020-07-27 | 2022-03-15 | Huawei Technologies Co., Ltd. | Systems, methods and media for dynamically shaped tensors using liquid types |
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 |
US12001893B1 (en) | 2020-12-28 | 2024-06-04 | Meta Platforms, Inc. | Distributed synchronization scheme |
US11922306B2 (en) | 2020-12-28 | 2024-03-05 | Meta Platforms, Inc. | Tensor controller architecture |
US11656854B2 (en) * | 2021-08-30 | 2023-05-23 | Huawei Technologies Co., Ltd. | Methods and devices for computing a memory size for software optimization |
US20230196081A1 (en) * | 2021-12-21 | 2023-06-22 | International Business Machines Corporation | Federated learning for training machine learning models |
CN115599442B (zh) * | 2022-12-14 | 2023-03-10 | 成都登临科技有限公司 | 一种ai芯片、电子设备及张量处理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101401065A (zh) * | 2006-03-17 | 2009-04-01 | 高通股份有限公司 | 用于循环分支的分支历史寄存器 |
CN104838357A (zh) * | 2012-12-27 | 2015-08-12 | 英特尔公司 | 瓦解的多嵌套循环的向量化 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3102027B2 (ja) * | 1990-11-20 | 2000-10-23 | 日本電気株式会社 | ループ制御のネスティング管理機構 |
US5752037A (en) | 1996-04-26 | 1998-05-12 | Hewlett-Packard Company | Method of prefetching data for references with multiple stride directions |
US5958048A (en) * | 1996-08-07 | 1999-09-28 | Elbrus International Ltd. | Architectural support for software pipelining of nested loops |
US6374403B1 (en) | 1999-08-20 | 2002-04-16 | Hewlett-Packard Company | Programmatic method for reducing cost of control in parallel processes |
US6438747B1 (en) * | 1999-08-20 | 2002-08-20 | Hewlett-Packard Company | Programmatic iteration scheduling for parallel processors |
GB2359641B (en) * | 2000-02-25 | 2002-02-13 | Siroyan Ltd | Mapping circuitry and method |
US6952821B2 (en) * | 2002-08-19 | 2005-10-04 | Hewlett-Packard Development Company, L.P. | Method and system for memory management optimization |
US7107199B2 (en) * | 2002-10-31 | 2006-09-12 | Hewlett-Packard Development Company, L.P. | Method and system for the design of pipelines of processors |
US7047480B2 (en) * | 2002-11-12 | 2006-05-16 | Microsoft Corporation | Matrix multiplication in a Galois field for forward error correction |
US7225439B2 (en) * | 2003-03-21 | 2007-05-29 | Sun Microsystems, Inc. | Combining write-barriers within an inner loop with fixed step |
WO2005029318A2 (en) | 2003-09-19 | 2005-03-31 | University Of Delaware | Methods and products for processing loop nests |
CN100520714C (zh) * | 2005-01-25 | 2009-07-29 | Nxp股份有限公司 | 多线程处理器 |
US8806183B1 (en) * | 2006-02-01 | 2014-08-12 | Ixys Ch Gmbh | Blank bit and processor instructions employing the blank bit |
US8438365B2 (en) * | 2006-10-06 | 2013-05-07 | Calos Fund Limited Liability Company | Efficient data loading in a data-parallel processor |
US20080141013A1 (en) | 2006-10-25 | 2008-06-12 | On Demand Microelectronics | Digital processor with control means for the execution of nested loops |
ATE463788T1 (de) * | 2007-06-26 | 2010-04-15 | Ericsson Telefon Ab L M | Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen |
US8087012B2 (en) | 2007-08-21 | 2011-12-27 | International Business Machines Corporation | Eliminating maximum/minimum operations in loop bounds |
US8509162B2 (en) * | 2008-02-13 | 2013-08-13 | Qualcomm Incorporated | System and method for scheduling over multiple hops |
US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
US20100122066A1 (en) * | 2008-11-12 | 2010-05-13 | Freescale Semiconductor, Inc. | Instruction method for facilitating efficient coding and instruction fetch of loop construct |
US20100274972A1 (en) * | 2008-11-24 | 2010-10-28 | Boris Babayan | Systems, methods, and apparatuses for parallel computing |
CA2684226A1 (en) * | 2009-10-30 | 2011-04-30 | Ibm Canada Limited - Ibm Canada Limitee | Eleminating redundant operations for common properties using shared real registers |
JP5402746B2 (ja) * | 2010-03-18 | 2014-01-29 | 富士通株式会社 | 最適化処理プログラム,最適化処理装置および最適化処理方法 |
US8683185B2 (en) * | 2010-07-26 | 2014-03-25 | International Business Machines Corporation | Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set |
JP2012032986A (ja) * | 2010-07-30 | 2012-02-16 | Fujitsu Ltd | コンパイル方法及びプログラム |
US20140181171A1 (en) * | 2012-12-24 | 2014-06-26 | Pavel Dourbal | Method and system for fast tensor-vector multiplication |
CN103218347B (zh) * | 2013-04-28 | 2016-01-20 | 清华大学 | 面向可重构阵列的多参数融合性能建模方法 |
US9087394B1 (en) * | 2014-02-13 | 2015-07-21 | Raycast Systems, Inc. | Computer hardware architecture and data structures for packet binning to support incoherent ray traversal |
US9875104B2 (en) * | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US10175980B2 (en) | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
-
2017
- 2017-06-19 US US15/627,022 patent/US10248908B2/en active Active
-
2018
- 2018-04-27 KR KR1020197030429A patent/KR102261768B1/ko active IP Right Grant
- 2018-04-27 WO PCT/US2018/029796 patent/WO2018236468A1/en active Search and Examination
- 2018-04-27 CN CN202310558267.1A patent/CN116663604A/zh active Pending
- 2018-04-27 KR KR1020217016591A patent/KR102278661B1/ko active IP Right Grant
- 2018-04-27 EP EP18725366.1A patent/EP3642708A1/en active Pending
- 2018-04-27 JP JP2019556242A patent/JP7035080B2/ja active Active
- 2018-04-27 CN CN201880025248.XA patent/CN110520834B/zh active Active
- 2018-06-15 TW TW107120722A patent/TWI672594B/zh active
- 2018-06-15 TW TW108130504A patent/TWI710974B/zh active
-
2019
- 2019-03-08 US US16/297,091 patent/US10885434B2/en active Active
-
2022
- 2022-03-02 JP JP2022031840A patent/JP7279226B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101401065A (zh) * | 2006-03-17 | 2009-04-01 | 高通股份有限公司 | 用于循环分支的分支历史寄存器 |
CN104838357A (zh) * | 2012-12-27 | 2015-08-12 | 英特尔公司 | 瓦解的多嵌套循环的向量化 |
Also Published As
Publication number | Publication date |
---|---|
CN110520834A (zh) | 2019-11-29 |
JP7035080B2 (ja) | 2022-03-14 |
TWI672594B (zh) | 2019-09-21 |
TW201947466A (zh) | 2019-12-16 |
TW201905730A (zh) | 2019-02-01 |
JP2020524318A (ja) | 2020-08-13 |
KR20210068155A (ko) | 2021-06-08 |
JP7279226B2 (ja) | 2023-05-22 |
JP2022084674A (ja) | 2022-06-07 |
US10248908B2 (en) | 2019-04-02 |
US20180365561A1 (en) | 2018-12-20 |
WO2018236468A1 (en) | 2018-12-27 |
KR20190126887A (ko) | 2019-11-12 |
KR102261768B1 (ko) | 2021-06-07 |
US20190205756A1 (en) | 2019-07-04 |
CN116663604A (zh) | 2023-08-29 |
TWI710974B (zh) | 2020-11-21 |
EP3642708A1 (en) | 2020-04-29 |
KR102278661B1 (ko) | 2021-07-16 |
US10885434B2 (en) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110520834B (zh) | 替选循环限制 | |
KR102243036B1 (ko) | 가산기를 이용한 다차원 텐서의 데이터 액세스 | |
CN109324827B (zh) | 用于处理用于访问数据的指令的装置、方法和系统 | |
CN107454966B (zh) | 用于神经网络处理器的预取权重 | |
US9946539B1 (en) | Accessing data in multi-dimensional tensors using adders | |
CN107038018A (zh) | 访问多维张量中的数据 | |
EP3686743A1 (en) | Hardware double buffering using a special purpose computational unit | |
KR20200100190A (ko) | 기계 학습을 위한 이미지 변환 | |
GB2567038B (en) | Accessing prologue and epilogue data |
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 |