CN110036374A - 使用专用计算单元的硬件双缓存 - Google Patents

使用专用计算单元的硬件双缓存 Download PDF

Info

Publication number
CN110036374A
CN110036374A CN201880004800.7A CN201880004800A CN110036374A CN 110036374 A CN110036374 A CN 110036374A CN 201880004800 A CN201880004800 A CN 201880004800A CN 110036374 A CN110036374 A CN 110036374A
Authority
CN
China
Prior art keywords
memory
value
data
buffer
address
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.)
Granted
Application number
CN201880004800.7A
Other languages
English (en)
Other versions
CN110036374B (zh
Inventor
奥利维尔·泰马姆
哈西特·哈伊坦
拉维·纳拉亚纳斯瓦米
禹同爀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Priority to CN202310201075.5A priority Critical patent/CN116303111A/zh
Publication of CN110036374A publication Critical patent/CN110036374A/zh
Application granted granted Critical
Publication of CN110036374B publication Critical patent/CN110036374B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/08Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations, the intermediate ones not being accessible for either enqueue or dequeue operations, e.g. using a shift register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Human Computer Interaction (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Image Input (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Communication Control (AREA)

Abstract

包括用于使用多个缓存器来传输数据的装置的方法、系统、以及装置,所述装置包括多个存储器和一个或多个处理单元,一个或多个处理单元被配置为确定用于存储在第一数据存储位置中的、正被传输到第二数据存储位置的数据元素的序列的缓存存储器地址。针对该序列中的所述数据元素中一个或多个数据元素的每个组,识别缓存器分配元件的值,所述缓存器分配元件的值能够在各自与存储器的不同一个相对应的多个值之间切换。基于缓存器分配元件的值来确定用于一个或多个数据元素的组的缓存存储器地址。在确定用于数据元素的序列中的一个或多个数据元素的后续组的缓存存储器地址之前,切换缓存器分配元件的值。

Description

使用专用计算单元的硬件双缓存
技术领域
本说明书总体上涉及一种使用具有硬件双缓存器的专用计算单元来执行机器学习计算。
背景技术
神经网络是机器学习模型,该机器学习模型采用模型的一个或多个层以为接收到的输入生成输出(例如分类)。一些神经网络还包括除了外层之外的一个或多个隐藏层。每个隐藏层的输出用作到网络中的下一层(即,网络的下一隐藏层或输出层)的输入。网络的每个层根据参数的相应集合的当前值从接收到的输入生成输出。
一些神经网络包括一个或多个卷积神经网络层。每个卷积神经网络层具有内核的相关集合。内核能够被表示为权重输入的矩阵结构。每个卷积层使用内核以处理到层的输入。还能够将到层的输入的集合表示为矩阵结构。
发明内容
该说明书描述了与使用专用计算单元以对N维张量的数据进行双缓存有关的技术。
通常,在本说明书中所描述的主题的一个创新方面能够被实施在用于传输数据的装置中。该装置能够包括其包括至少第一存储器和第二存储器的多个存储器。该装置还能够包括一个或多个处理单元。这一个或多个处理单元能够被配置为确定在第一数据存储位置中存储的、正被传输到第二数据存储位置的数据元素序列的缓存存储器地址。针对该序列中的这些数据元素中的一个或多个的每个组,一个或多个处理单元能够识别缓存器分配元件的值,所述缓存器分配元件的值能够在各自与存储器的不同一个相对应的多个值之间切换。一个或多个处理单元能够基于缓存器分配元件的值来确定用于一个或多个数据元素的组的缓存存储器地址。当缓存器分配元件的值是与第一存储器相对应的第一值时,一个或多个处理单元能够通过基于用于第一存储器的基地址与用于一个或多个数据元素的组的存储器偏移值的组合来确定用于一个或多个数据元素的所述组的缓存存储器地址,从而将一个或多个数据元素的组分配给第一存储器。当缓存器分配元件的值是与第一值不同的且与第二存储器相对应的第二值时,一个或多个处理单元能够通过基于用于第一存储器的基地址、用于第二存储器的存储器地址偏移值、以及用于一个或多个数据元素的组的存储器偏移值的组合来确定用于一个或多个数据元素的组的存储器地址,从而向第二存储器分配数据元素,以将一个或多个数据元素的组分配给第二存储器。在确定数据元素序列的一个或多个数据元素的后续组的缓存存储器地址之前,一个或多个处理单元能够对缓存器分配元件的值进行切换。一个或多个处理单元能够使用用于一个或多个数据元素的每个组所确定的缓存存储器地址来将每个数据元素传输到第一存储器或第二存储器的相应存储器位置。
这些和其它实现方式能够各自可选地包括以下特征中的一个或多个。在一些方面中,第一存储器和第二存储器是各自具有第一数据存储容量的缓存器。第一数据存储位置和第二数据存储位置各自能够至少包括大于第一数据存储容量的第二数据存储容量。
在一些方面中,第一存储器和第二存储器各自具有第一数据存储容量的缓存器。数据元素序列能够包括超过第一数据存储容量的数据的量。
在一些方面中,基于缓存器分配元件的值和用于第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的组的缓存存储器地址能够包括:基于用于通过数据元素的序列迭代的一个或多个循环的迭代的数目来确定用于一个或多个数据元素的组的存储器偏移值。
在一些方面中,基于缓存器分配元件的值和用于第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的组的缓存存储器地址能够包括:每当缓存器分配元件的值是第二值时,将以下的和:(i)用于第一存储器的基地址、(ii)用于第二存储器的存储器地址偏移值、以及用于一个或多个数据元素的组的存储器偏移值,确定为用于一个或多个数据元素的组的缓存存储器地址。每当缓存器分配元件的值是第一值时,能够基于以下的和:(i)用于第一存储器的基地址和(ii)用于一个或多个数据元素的组的偏移值,来确定一个或多个数据元素的组的缓存存储器地址,而与第二存储器的存储器地址值无关。
在一些方面中,用于一个或多个数据元素的组的存储器偏移值是基于用于N维张量的每个维度的循环的迭代的数目。用于第二存储器的存储器地址偏移值能够是基于第二存储器的第一存储器地址的存储器地址之间的差。
在本说明书中所描述的主题能够是在特定实施例中实现的以便实现以下优点中的一个或多个。使用多个存储器使得对超过单个缓存器的存储容量的数据的传输更快且更有效。例如,如果要是为了将8兆字节(MB)的数据从第一数据存储位置传输到第二数据存储位置并且缓存器的容量仅为4MB,则能够在两个4MB缓存器之间对数据进行分割。通过使用嵌套循环来确定用于多个缓存器的存储器地址,能够减少用于确定地址的指令的数目,从而使得编码更密集、使用的存储器资源更少、和/或需要的存储器资源更少。在每个缓存存储器地址确定之后使用在值之间切换的缓存器分配元件(例如,一位轮换计数器)使得缓存器分配更快并且指令计数减少以将数据分配给多个缓存器。另外,对缓存器分配元件的值进行切换而不是在将数据分配给第二缓存器之前确定第一缓存器是否是满的这使得处理更快并且对施加于处理器的计算需求更少。指令的减少还导致更高的性能,因为处理单元对更少的指令进行处理以确定存储器地址。在专用硬件单元中对双缓存器指令进行编码减少了处理器将以其它方式为将数据分配给缓存器而执行的计算周期的数目,并且因此增加了处理器带宽以用于其它计算任务。
该方面及其它方面的其它实现方式包括其被配置为执行在计算机存储设备上编码的方法的动作的相对应的系统、装置、以及计算机程序。一个或多个计算机的系统能够是利用在系统上安装的、在操作中使得该系统执行动作的软件、固件、硬件、或它们的组合来如此进行配置的。一个或多个计算机程序能够是利用具有下述指令来如此配置的,所述指令在由数据处理装置执行时,使得这些装置执行这些动作。
在附图和以下描述中阐述了在该说明书中所描述的主题的一个或多个实现的细节。从该描述、附图、以及权利要求将显而易见地得知本主题的其它潜在特征、方面、以及优点。
附图说明
图1是示例计算系统的方框图。
图2图示了使用缓存器和示例缓存器分配元件传输的示例数据。
图3是图示用于使用双缓存来传输数据的示例处理的流程图。
各附图中相同的附图标记和名称指示相同的元件。
具体实施方式
通常,当软件算法处理N维张量时,可以使用嵌套循环。每个循环能够负责遍历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),等等。
如下所述,张量遍历单元能够用于使用嵌套循环按顺序确定用于每个元素的存储器地址,使得处理单元能够访问元素的值并使用元素的值来执行一个或多个计算。还能够使用嵌套的for循环类似地访问权重或参数的值。张量遍历单元还能够用于确定在计算中使用的权重或参数和/或计算的输出的地址,所述计算的输出可以用作到神经网络的隐藏层的输入。
这里所述的技术使得循环嵌套被编码以使用双缓存产生和消费数据。例如,可以使用双缓存技术将在张量元素中存储的数据从一个数据存储位置传输到另一数据存储位置。在神经网络示例中,被确定为一个隐藏层的输出的激活可以被提供为到另一隐藏层的输入并且因此可以从输出位置(即,其中存储神经网络层的输出的存储器位置)传输到输入位置(即,其中存储到神经网络层的输入的存储器位置)。在另一示例中,可以将表示计算的输出的数据从临时性存储器位置传输到更永久性的存储器位置。在这些示例中的每一个中,可以更快地传输数据并且能够使用双缓存更快速地为后续处理准备数据。
在执行计算之前,缓存能够用于收集用于神经网络计算的数据。例如,可以将到神经网络层的输入存储在特定位置中,以供由执行计算的处理器检索。虽然在特定位置中存储的数据被用于执行神经网络计算,但是用于下一机器学习计算的数据能够被移动到缓存器中。当已经完成先前神经网络计算时,在缓存器中存储的数据能够被移动到特定位置以供处理器检索。
循环嵌套中的一个或多个循环可以用于计算用于张量元素的缓存存储器地址,用于所述张量元素的数据是使用双缓存器生成的或消费的。当要传输的数据的量大于单个缓存器的存储容量时,可以使用多个缓存器。例如,如果正在传输的数据的量是单个缓存器的存储容量的两倍,则可以在两个缓存器之间分割数据。在该示例中,数据的第一部分可以被传输到第一缓存器并且数据的第二部分可以在被传输到第二数据存储位置之前传输到第二缓存器。按照这种方式,所有数据能够在被传输到第二数据存储位置之前被缓存。
作为示例,三维张量的元素可以表示由神经网络分类的图像的特征。第一维度(Z)可以表示图像的宽度,第二维度(Y)可以表示图像的高度,以及第三维度(X)可以表示图像中的用于像素的RGB值。为了对图像进行分类,可以将每个RGB值乘以卷积层的滤波值,以生成激活图。
嵌套循环能够用于确定用于访问张量的每个RGB值的存储器地址。嵌套循环能够包括用于张量的每个维度的循环。例如,外循环(z)可以用于遍历Z维度(图像的宽度),中间循环(y)可以用于遍历Y维度(图像的高度),以及内循环(x)能够用于遍历X维度(每个像素的三个RGB值)。在内循环的每个迭代处,对由外循环z和中间循环y的值表示的用于图像的特定像素的三个RGB值中的一个确定存储器地址。例如,当z=0且y=0时(例如z=0;y=0;x=0),可以在内循环x的第一次迭代期间确定由Z=0和Y=0表示的用于图像的像素的R值的存储器地址。类似地,当z=5且y=2(例如z=5;y=2;x=2)时,可以在内循环x的第三次迭代期间确定由Z=5和Y=2表示的用于图像的像素的G值的存储器地址。如果用于图像的每个像素的三个RGB值超过缓存器的容量,则表示用于图像的每个像素的三个RGB值的数据能够在两个或更多个缓存器之间被分割。
为了使用嵌套循环来确定用于多个缓存器的缓存存储器地址,能够在用于确定缓存存储器地址的循环的每次迭代之后(或之前)对缓存器分配元件的值进行切换。例如,如果两个缓存器被使用并且数据在所述两个缓存器之间被分割,则缓存器分配值可以在两个值之间切换。缓存器分配元件的第一值(例如,0)可以用于将数据元素(或数据元素的组)分配给第一缓存器,并且缓存器分配元件的第二值(例如1)可以用于将数据元素(或数据元素的组)分配给第二缓存器。当缓存器分配元件的值是用于循环迭代的第一个值时,可以将与该循环迭代相对应的数据元素分配给第一缓存器的缓存存储器地址。类似地,当缓存器分配元件的值是用于循环的迭代的第二个值时,可以将与循环的该迭代相对应的数据元素分配给第二缓存器的缓存存储器地址。如果使用三个或更多个缓存器,则缓存器分配元件可以具有三个或更多个值,例如用于每个缓存器的值。
图1是示例计算系统100的方框图。通常,计算系统100对输入104进行处理,以生成输出116。计算系统100可以被配置为执行线性代数计算、神经网络计算、以及其它计算。输入104可以是能够由计算系统100处理的任何合适数据。计算系统100包括处理单元102、一个或多个存储介质104、以及张量遍历单元106。
处理单元114能够包括一个或多个处理器和/或一个或多个有限状态机(FSM)。处理单元114的处理器能够执行用于访问张量的特定元素的指令。当处理器处理这样的指令时,张量遍历单元106确定张量的特定元素的存储器地址,使得处理单元可以访问存储介质104以读取表示特定元素的值的数据。
对于包括FSM的处理单元,FSM能够从张量遍历单元106查询用于张量元素的存储器地址。在一些实现方式中,FSM 108连续地向张量遍历单元106查询用于张量的特定元素的地址值。此后FSM能够将所接收到的地址值提供给处理单元102的处理器,使得处理器能够访问存储介质104以读取表示特定元素的值的数据。
例如,程序可以包括嵌套循环并且处理单元102可以根据与该嵌套循环相关联的当前索引变量值来执行用于访问嵌套循环内的二维阵列变量的元素的指令。基于与该嵌套循环相关联的当前索引变量值,张量遍历单元106可以确定地址偏移值,该地址偏移值表示从二维阵列变量的第一元素的存储器地址的偏移。处理单元102此后可以使用该地址偏移值并且从存储介质104访问二维阵列变量的特定元素。
存储介质104存储计算系统100内的信息。在一些实现方式中,存储介质104是易失性存储器单元。在一些其它实现方式中,存储介质104是非易失性存储器单元。存储介质104还可以是诸如软盘设备、硬盘设备、光盘设备、或磁带设备、闪速存储器或其它类似的固态存储器设备、或者设备阵列这样的、包括存储区域网络中的设备或其它配置的另一种形式的计算机能够读介质。这些指令在由处理单元102执行指时使处理单元102执行一个或多个任务。
通常,张量遍历单元106确定与一个或多个张量相关联的状态。在一些实现方式中,该状态可以包括循环边界值、当前循环索引变量值、用于确定存储器地址值的部分地址偏移值、和/或用于对分支循环边界进行处理的程序计数器值。张量遍历单元106可以被实现为专用集成电路。
张量遍历单元106能够将张量索引转换成存储器地址。例如,张量遍历单元106可以将N维张量索引的集合转换成一维地址空间。张量遍历单元106能够通过使张量元素的存储器地址成为元素的维度索引的组合(例如线性组合)来执行这样的转换。
张量遍历单元106能够包括一个或多个张量状态元件122和数学单元124。张量状态元件122中的每一个可以例如是寄存器或任何合适的存储电路的存储元件。张量状态元件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中描述了用于使用张量遍历单元来确定存储器地址的示例技术,所述文献的整个内容通过引用而被并入在本文中。
张量遍历单元106还能够被配置为确定用于将数据从一个数据存储位置传输到另一数据存储位置的临时存储器位置(例如,缓存器)的存储器地址。例如,存储介质104能够包括其包括存储位置A 112和存储位置B 114的多个数据存储位置。每个存储位置可以是公共存储器单元或不同存储器单元的存储器地址的范围。存储介质104还能够包括其包括缓存器A 116和缓存器B 118的多个临时存储器。处理单元102能够在将数据传输到第二数据存储位置(例如,存储位置B 114)之前将数据从第一数据存储位置(例如,存储位置A 112)传输到一个或多个缓存器(例如,缓存器A 116和/或缓存器B 118)。
张量遍历单元106能够使用缓存器(例如双缓存器)来确定其数据正在被生成或被消费的张量元素的缓存存储器地址。例如,与在2016年2月3日提交的题为“访问多维张量中的数据(Accessing Data in Multi-Dimensional Tensors)”的美国专利申请No.15/014,265中所描述的技术相类似,张量遍历单元106能够使用用于张量的基缓存存储器地址及基于用于张量元素的张量索引的用于每个张量元素的地址偏移将张量索引转换成缓存存储器地址。
例如,如在美国专利申请No.15/014,265中所描述的,张量状态元件122能够包括张量索引元素的组、张量边界元素的组、以及维度乘数元素的组。元素的每个组能够被布置为具有M行和N列的2-D阵列。用于组的每行能够表示用于张量的张量索引信息。用于组的每列能够表示用于是与张量相关联的嵌套循环索引变量值的信息(例如,张量索引值、张量边界值、或维度乘数值)。例如,用于张量索引元素的2-D阵列中的一列能够表示用于变量i的张量索引信息,一列能够表示用于变量i的张量索引信息,并且一列能够表示用于变量k的张量索引信息。
每个张量索引元素能够在嵌套循环中追踪用于循环的嵌套循环变量。例如,可以分配一个张量索引元素以追踪嵌套循环索引变量i,可以分配一个张量索引元素以追踪嵌套循环索引变量j,以及可以分配一个张量索引元素以追踪嵌套循环索引变量每个张量边界元素在张量索引元素中具有相对应的元素。每个张量边界元素可以表示用于与该张量相关联的嵌套循环索引变量值的张量边界信息。例如,一个张量边界元素可以表示用于嵌套循环索引变量i的张量边界信息,一个张量边界元素可以表示用于嵌套循环索引变量j的张量边界信息,以及一个张量边界元素可以表示用于嵌套循环索引变量k的张量边界信息。
每个维度乘数元素能够表示张量索引元素中的相对应的元素与其相乘的乘数。为了确定用于元素的存储器地址,张量遍历单元106能够通过使在用于嵌套循环索引变量的张量索引元素中存储的值乘以用于嵌套循环索引变量的乘数来确定用于每个嵌套循环索引变量的存储器地址偏移量。张量遍历单元106此后能够将所有相乘的乘积相加在一起,以确定与正被访问的元素相对应的存储器地址。
张量遍历单元106能够在嵌套循环的内循环的每次迭代之后更新张量索引元素。对于内循环的每次迭代,张量遍历单元106例如能够通过使用于内循环的张量索引元素递增来更新用于循环的张量索引元素。如果用于内循环的更新的张量索引元素等于在用于内循环的张量边界元素中存储的值,则能够重置张量索引元素以及能够更新用于内循环嵌套于其中的下一外循环的张量索引元素。此后张量遍历单元120能够通过使张量索引元素乘以它们相对应的乘数并对乘积求和来确定用于与内循环的该迭代相对应的下一元素的存储器地址,如上所述。
当使用两个或更多个缓存器来传输数据时,张量遍历单元106还能够使用缓存器分配元件,以将每个张量元素或张量元素的组分配给这些缓存器中的一个。在一些实现方式中,当缓存器分配元件的值是一个值时,张量遍历单元106能够通过向缓存存储器地址添加附加偏移来将一个或多个张量元素的组分配给这些缓存器中的一个,并且当缓存器分配元件是不同值时,张量遍历单元106能够通过不向缓存存储器地址添加附加偏移值来将一个或多个张量元素的组分配给不同的缓存器。
例如,基存储器地址可以与第一缓存器的第一存储器地址相对应。第二缓存器的第一存储器地址可以从基存储器地址偏移特定的地址数。在该示例中,为了将张量元素分配给第一缓存器的存储器地址,张量遍历单元106可以对基存储器地址与用于张量元素的存储器偏移值进行组合(例如,相加)。如在2016年2月3日提交的题为“访问多维张量中的数据(Accessing Data in Multi-Dimensional Tensor)”的美国专利申请No.15/014,265中所描述的,可以基于用于遍历张量的嵌套环的张量索引来确定用于张量元素的存储器偏移值。
为了将张量元素分配给第二缓存器的存储器地址,张量遍历单元106可以对基存储器地址与用于张量元素的存储器偏移值及用于第二缓存器的存储器地址偏移值(例如,第二缓存器的第一存储器地址从第一缓存器的第一存储器地址所偏移的特定数目的地址)进行组合(例如相加)。
张量遍历单元106能够使用缓存器分配元件的值来确定何时将张量元素分配给第二缓存器并且因此通过对用于第二缓存器的存储器地址偏移值与基存储器地址及用于张量元素的存储器偏移值进行组合来确定用于张量元素的缓存存储器地址。例如,当缓存器分配元件的值是第一值时,张量遍历单元106能够通过不对存储器地址偏移值与基存储器地址及用于张量元素的存储器偏移值进行组合来将张量元素分配给第一缓存器。当缓存器分配元件的值是与第一值不同的第二值时,张量遍历单元106能够通过对存储器地址偏移值与基存储器地址及用于张量元素的存储器偏移值进行组合来将张量元素分配给第二缓存器。
在一些实现方式中,张量遍历单元106可以例如使用嵌套循环来确定用于在序列中的张量元素的序列的缓存存储器地址。在该示例中,处理单元102能够对特定循环的每次迭代(例如,最内循环的每次迭代)从张量遍历单元106请求用于一个或多个张量元素的组的缓存存储器地址。张量遍历单元106能够基于循环索引来确定用于与循环的迭代相对应的张量元素的组的存储器偏移值。如上所述,张量遍历单元106还能够基于缓存器分配元件的值来确定是将张量元素的组分配给第一缓存器还是张量元素的组分配给第二缓存器(或者是在不止两个的条件下分配给附加缓存器)。张量遍历单元106能够基于基存储器地址、用于张量元素的组的存储器偏移值、以及根据缓存器分配元件的值的用于第二缓存器的存储器偏移值来确定用于张量元素的组的缓存存储器地址。
在确定了用于在序列中的张量元素的组的缓存存储器地址之后,张量遍历单元能够对缓存器分配元件的值进行切换。例如,如果存在两个缓存器,则张量遍历单元106可以在每个缓存存储器地址确定之后使该值在两个值之间轮换。在该示例中,当缓存器分配元件的值为0时张量遍历单元106能够将张量元素的组分配给第一缓存器,并且当缓存器分配元件的值为一时能够将张量元素的组分配给第二缓存器。对于第一缓存存储器地址确定,缓存器分配元件可以具有的值为零。在该示例中,张量遍历单元106能够将序列中的张量元素的第一组分配给第一缓存器。张量遍历单元106此后能够将缓存器分配元件的值切换为一。因而,张量遍历单元106能够将序列中的张量元素的第二组分配给第二缓存器。张量遍历单元106能够在每个缓存存储器地址确定之后继续切换该值,使得每张量元素的另一组被分配给第一缓存器。
在一些实现方式中,粗粒度轮换(coarse-grained toggling)被使用,使得将张量元素的组(例如,张量的子张量)分配给用于每个缓存存储器地址确定的缓存器。在一些实现方式中,细粒度轮换(fine-grained toggling)被使用,使得在每个存储器地址确定处将每个单独的张量元素分配给缓存器。
考虑到其中张量遍历单元具有两个1千字节(kB)缓存器并且4kB的数据是使用该缓存器来传输的示例。示例循环嵌套能够包括在两个缓存器之间交替的外循环,并且能够使用内循环来识别以在当前缓存器中包括的每个数据部分。例如,嵌套循环能够包括:
for(i=0;i<4,++i)
for(j=0;j=1024;++j)
在该示例中,内循环“j”用于识别以在缓存器中包括的1kB数据,并且外循环“i”用于在所述两个缓存器之间切换。例如,当“i”具有奇数值时,可以将1kB数据元素的组分配给第一缓存器。当“i”具有偶数值时,可以将1kB的数据分配给第二缓存器。因此,在该示例中,循环嵌套基于“i”的值在两个缓存器之间交替。
如果存在多于两个缓存器,则张量遍历单元106可以在不止两个不同的值之间切换缓存器分配元件,例如用于每个缓存器的唯一值。例如,如果存在三个缓存器,则当缓存器分配元件具有第一值时,张量遍历单元106能够将张量元素的组分配给第一缓存器;当缓存器分配元件具有第二值时,张量遍历单元106能够将张量元素的组分配给第二缓存器;以及当缓存器分配元件具有第三值时,张量遍历单元106能够将张量元素的组分配给第三缓存器。
在另一示例中,可能存在各自具有1MB的存储容量的两个缓存器并且可能需要通过缓存器传输3MB的数据。在该示例中,能够将第一个1MB分配给两个缓存器中的第一个并且将第二个1MB分配给两个缓存器中的第二个。此后,在例如由处理器消耗了第一个1MB之后,能够将第三个1MB移动到第一缓存器。
在一些实现方式中,张量遍历单元106能够获得一系列的交替缓存器分配值,而不是在每个缓存存储器地址确定之后对缓存器分配元件的值进行切换。例如,交替缓存器分配值的序列可以是交替的0和1的序列。在每个存储器地址确定之后,张量遍历单元106能够移动到该序列中的下一值并基于该下一值将张量元素的组分配给适当缓存器。
图2图示了使用缓存器和示例缓存器分配元件传输的示例数据。在该示例中,使用两个缓存器将一系列八组数据元素(例如,张量元素)从第一数据存储位置205传输到第二数据存储位置215。一系列缓存器分配值210用于将数据元素的每个组分配给两个缓存器中的一个。例如,如果数据元素的组在其序列中与具有0值的缓存器分配元件处于相同位置,则将数据元素的组分配给第一缓存器。如果数据元素的组在其序列中与具有1值的缓存器分配元件处于相同位置,则将数据元素的组分配给与第一缓存器不同的第二缓存器。
因而,在该示例中,当第一、第三、第五、和第七缓存器分配值为零时,将数据元素组“0”、“2”、“4”、和“6”分配给第一缓存器。类似地,当第二、第四、第六、和第八缓存器分配值是1时,将数据元素组“1”、“3”、“5”、和“7”分配给第二缓存器。因而,各自具有用于存储数据元素的四个组的存储容量的两个缓存器能够用于缓存八组数据元素。
图3是图示用于对使用双缓存来传输数据的示例处理300的流程图。处理300可以是由一个或多个计算机的系统(例如图1的计算系统110)来执行的。
系统使用第一缓存器和第二缓存器来识别指定用于双缓存的数据元素的序列(302)。该数据元素的序列可以是指定用于双缓存的张量元素的序列。张量元素可以是N维张量的部分。例如,可以使用其中每个循环负责遍历N维张量的相应维度的嵌套循环来遍历张量。
数据元素序列可以包括已被指定用于双缓存的特定维度的所有张量元素。例如,包括嵌套循环的程序可以包括将与特定维度相对应的循环指定为要被双缓存的循环的代码。在特定的三维张量示例中,可以使用具有索引x、y、和z的三个循环来遍历张量。在该示例中,可以使用具有索引z的外环来遍历张量的Z维度,可以使用具有索引y的中间循环来遍历张量的Y维度,以及可以使用内循环索引x来遍历张量的X维度。内循环可以被指定用于双缓存以快速缓存用于神经网络计算的数据。
该系统确定用于序列中的数据元素的每个组的缓存存储器地址(304)。每个组能够包括一个或多个数据元素。例如,如果使用细粒度轮换,则每个组能够包括一个数据元素。如果使用粗粒度轮换,则每个组能够包括多个数据元素,例如高达指定量的存储器或指定数目的数据元素。
在一些实现方式中,系统一次一个地确定缓存存储器地址。继续前面的示例,系统可以确定用于内循环x的每次迭代的缓存存储器地址,因为内循环的每次迭代与指定用于双缓存的特定张量元素相对应。系统可以使用构成操作306-314来确定用于该系列的数据元素的缓存存储器地址。
系统识别用于数据元素序列中的数据元素的组的缓存器分配元件的值(306)。在一些实现方式中,如上所述,系统能够在每个缓存存储器地址确定之后(例如在指定用于双缓存的循环的每次迭代之后)对缓存器分配元件的值进行切换。在该示例中,系统能够将缓存器分配元件的当前值识别为用于该数据元素的缓存器分配元件的值。缓存器分配元件的值用于将数据元素的组分配给适当缓存器。
系统基于缓存器分配元件的值和用于第二缓存器的存储器地址偏移值来确定用于数据元素的组的缓存存储器地址偏移值(308)。如上所述,用于缓存器的基存储器地址可以与第一缓存器的第一存储器地址相对应。第二缓存器的第一存储器地址可以从基存储器地址偏移特定数目的地址。用于第二缓存器的存储器地址偏移值可以等于地址的所述特定数目。
为了确定用于数据元素的组的缓存存储器地址偏移值,系统确定缓存器分配元件的值是第一值还是第二值(或者是在存在不止两个缓存器的条件下的更多值)。如果缓存器分配元件是第一值,则当确定用于数据元素的组的缓存存储器地址值时,系统能够通过不使用第二缓存器的存储器地址偏移值将数据元素的组分配给第一缓存器。相反,如上所述,系统能够使用用于基于嵌套循环的循环索引来确定的数据元素的存储器偏移值。
如果缓存器分配元件是第二值,则系统能够通过对数据元素的组的存储器偏移值与用于第二缓存器的存储器地址偏移值进行组合来将数据元素的组分配给第二缓存器。例如,系统可以确定用于数据元素的组的存储器偏移值与用于第二缓存器的存储器地址偏移值之和,作为用于数据元素的组的缓存存储器地址偏移值。
在一些实现方式中,系统能够通过以下操作计算用于数据元素的组的缓存存储器地址偏移值:将缓存器分配元件的值与值1进行“与”并且使该结果乘以用于第二缓存器的存储器地址偏移值,并且将该结果加到用于数据元素的组的存储器偏移值。在该示例中,如果缓存器分配元件具有的值为零,则用于数据元素的组的缓存存储器地址偏移值等于用于数据元素的组的存储器偏移值。如果缓存器分配元件具有的值为1,则用于数据元素的组的缓存存储器地址偏移值具有等于用于第二缓存器的存储器地址偏移值加上用于数据元素的组的存储器偏移值的值。在一些实现方式中,能够使用一位轮换计数器来确定要使用的那个缓存器。
系统基于用于缓存器的基地址和缓存存储器地址偏移值来确定用于数据元素的组的缓存存储器地址(310)。例如,系统能够通过将用于缓存器的基地址(例如,用于第一缓存器的第一存储器地址)加到缓存存储器地址偏移值来确定用于数据元素的组的缓存存储器地址。
系统确定是否已为序列中的每个数据元素确定了缓存存储器地址(312)。如果不是,则系统对用于下一数据元素的缓存器分配元件的值进行切换。按照这种方式,将会将下一数据元素分配给与当前数据元素不同的缓存器。
如果已经为序列中的每个数据元素确定缓存存储器地址,则系统基于所确定的缓存存储器地址来将在数据元素中存储的数据传输到缓存器(314)。此后,可以将数据从缓存器传输到第二数据存储位置例如以供在神经网络计算中使用。
在本说明书中描述的主题和功能操作的实施例能够在数字电子电路中、在有形实施的计算机软件或固件中、在计算机硬件中(包括在本说明书中公开的结构及其结构等同物)、或者在它们中的一个或多个的组合中实现。在本说明书中描述的主题的实施例能够是作为一个或多个计算机程序实现的,即在有形非暂时性程序载体上编码的以由数据处理装置执行的或对数据处理装置的操作进行控制的计算机程序指令的一个或多个模块。可替选地或附加地,程序指令能够被编码在例如机器生成的电、光、或电磁信号的人工生成的传播信号上,该信号被生成以对信息进行编码以便传输到合适的接收器设备以供数据处理执行。计算机存储介质能够是机器可读存储设备、机器可读存储基底、随机或串行存取存储器设备、或者它们中的一个或多个的组合。
在本说明书中描述的处理和逻辑流能够是由执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能的一个或多个可编程计算机来执行的。处理和逻辑流还能够是由例如FPGA(现场可编程门阵列)、ASIC(专用集成电路)、或GPGPU(通用图形处理单元)这样的专用逻辑电路来执行的,并且装置还能够是作为所述专用逻辑电路实现的。
适于执行计算机程序的计算机包括例如能够基于通用或专用微处理器或这两者或者任何其它类型的中央处理单元。通常,中央处理单元将接收来自只读存储器或随机存取存储器或这两者的指令和数据。计算机的基本元件是用于执行或实行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括或者可操作地耦合以接收来自例如磁盘、磁光盘、或光盘的用于存储数据的一个或多个大容量存储设备的数据或将数据传输到所述一个或多个大容量存储设备或者这两者。然而,计算机不是必须具有这样的设备。此外,计算机能够嵌入在例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器、或者例如通用串行总线(USB)闪速存储器驱动器的便携式存储设备(仅举几例)这样的另一设备中。
适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质、以及存储器设备,所述存储器设备包括:例如EPROM、EEPROM、以及闪速存储器设备的半导体存储器设备;例如内部硬盘或可移动盘片的磁盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器能够由专用逻辑电路补充或并入在专用逻辑电路中。
虽然本说明书包含许多具体实现细节,但这些不应当被说明为对任何发明或可以要求保护的范围的限制,而相反应当被说明为对特定于特定发明的特定实施例的特征的描述。在单独实施例的上下文中在本说明书中所描述的某些特征也能够在单个实施例中组合地实现。相反,在单个实施例的上下文中所描述的各种特征也能够单独地或以任何合适的子组合在多个实施例中实现。此外,尽管上面可以将特征描述为以某些组合起作用并且甚至最初要求如此,但是在一些情况下可以从该组合中除去来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变型。
类似地,虽然在附图中按特定顺序描绘了操作,但是这不应当被理解为需要按所示的特定顺序或按相继顺序来执行这样的操作或者执行所有说明的操作以实现期望结果。在某些情况下,多任务和并行处理可能是有利的。此外,在不应当将上面所描述的实施例中的各种系统模块和组件的分离理解为在所有实施例中需要这样的操作,并且应理解的是通常能够将所述程序组件和系统集成在单个产品中或封装到多个产品之中。
已对主题的特定实施例进行了描述。其它实施例在以下权利要求的范围之内。例如,在权利要求中所记载的动作能够是按不同顺序执行的并且仍能够实现期望结果。作为一个示例,附图中所描绘的处理不是必须需要所示的特定顺序或相继顺序以实现期望结果。在某些实现中,多任务和并行处理可能是有利的。

Claims (21)

1.一种用于传输数据的装置,所述装置包括:
多个存储器,所述多个存储器至少包括第一存储器和第二存储器;以及
一个或多个处理单元,所述一个或多个处理单元被配置为:
通过以下操作来确定包括多个数据元素的序列的缓存存储器地址,所述多个数据元素存储在第一数据存储位置中、正被传输到第二数据存储位置:
针对所述序列中的所述多个数据元素中的一个或多个数据元素的每个组:
识别缓存器分配元件的值,所述缓存器分配元件的值能够在多个值之间切换,所述多个值中的每个值与所述多个存储器中的不同的一个存储器相对应;
基于所述缓存器分配元件的所述值来确定用于一个或多个数据元素的所述组的缓存存储器地址,包括:
当所述缓存器分配元件的所述值是与所述第一存储器相对应的第一值时,通过基于用于所述第一存储器的基地址与用于一个或多个数据元素的所述组的存储器偏移值的组合来确定用于一个或多个数据元素的所述组的所述缓存存储器地址,来向所述第一存储器分配一个或多个数据元素的所述组;并且
当所述缓存器分配元件的所述值是与所述第一值不同的且与所述第二存储器相对应的第二值时,通过基于用于所述第一存储器的所述基地址、用于所述第二存储器的所述存储器地址偏移值、以及用于一个或多个数据元素的所述组的所述存储器偏移值的组合来确定用于一个或多个数据元素的所述组的所述存储器地址,来向所述第二存储器分配所述数据元素,以向所述第二存储器分配一个或多个数据元素的所述组;并且
在确定用于数据元素的所述序列中的一个或多个数据元素的后续组的所述缓存存储器地址之前,切换所述缓存器分配元件的所述值;并且
使用用于一个或多个数据元素的每个组的所确定的缓存存储器地址来将每个数据元素传输到所述第一存储器或第二存储器的相应存储器位置。
2.根据权利要求1所述的装置,其中:
所述第一存储器和所述第二存储器是各自具有第一数据存储容量的缓存器;并且
所述第一数据存储位置和所述第二数据存储位置各自至少包括大于所述第一数据存储容量的第二数据存储容量。
3.根据权利要求1或2所述的装置,其中:
所述第一存储器和所述第二存储器是各自具有第一数据存储容量的缓存器;并且
所述数据元素的序列包括超过所述第一数据存储容量的数据的量。
4.根据前述权利要求中的任一项所述的装置,其中,基于所述缓存器分配元件的所述值和用于所述第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的所述组的所述缓存存储器地址包括:基于用于通过数据元素的所述序列迭代的一个或多个循环的迭代的数目来确定用于一个或多个数据元素的所述组的所述存储器偏移值。
5.根据权利要求4所述的装置,其中,基于所述缓存器分配元件的所述值和用于所述第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的所述组的所述缓存存储器地址包括:
每当所述缓存器分配元件的所述值是所述第二值时,将以下的和:(i)用于所述第一存储器的所述基地址、(ii)用于所述第二存储器的所述存储器地址偏移值、以及(iii)用于一个或多个数据元素的所述组的所述存储器偏移值,确定为用于一个或多个数据元素的所述组的所述缓存存储器地址;并且
每当所述缓存器分配元件的所述值是所述第一值时,将以下的和:(i)用于所述第一存储器的所述基地址和(ii)用于一个或多个数据元素的所述组的所述偏移值,确定为一个或多个数据元素的所述组的所述缓存存储器地址,而与用于所述第二存储器的所述存储器地址值无关。
6.根据权利要求4或5所述的装置,其中,用于一个或多个数据元素的所述组的所述存储器偏移值基于用于N维张量的每个维度的循环的迭代的数目。
7.根据前述权利要求中的任一项所述的装置,其中,用于所述第二存储器的所述存储器地址偏移值基于所述第二存储器的所述第一存储器地址的存储器地址之间的差。
8.一种由用于传输数据的计算系统执行的方法,所述方法包括:
通过以下操作来确定包括多个数据元素的序列的缓存存储器地址,所述多个数据元素存储在第一数据存储位置中、正被传输到第二数据存储位置:
针对所述序列中的所述多个数据元素中的一个或多个数据元素的每个组:
识别缓存器分配元件的值,所述缓存器分配元件的值能够在多个值之间切换,所述多个值中的每个值与多个所述存储器中的不同一个存储器相对应;
基于所述缓存器分配元件的所述值来确定用于一个或多个数据元素的所述组的缓存存储器地址,包括:
当所述缓存器分配元件的所述值是与多个存储器中的第一存储器相对应的第一值时,通过基于用于所述第一存储器的基地址与用于一个或多个数据元素的所述组的存储器偏移值的组合来确定用于一个或多个数据元素的所述组的所述缓存存储器地址,来向所述第一存储器分配一个或多个数据元素的所述组;并且
当所述缓存器分配元件的所述值是与所述第一值不同的且与所述多个存储器中的第二存储器相对应的第二值时,通过基于用于所述第一存储器的所述基地址、用于所述第二存储器的所述存储器地址偏移值、以及用于一个或多个数据元素的所述组的所述存储器偏移值的组合来确定用于一个或多个数据元素的所述组的所述存储器地址,来向所述第二存储器分配所述数据元素,以向所述第二存储器分配一个或多个数据元素的所述组;并且
在确定用于数据元素的所述序列中的一个或多个数据元素的后续组的缓存存储器地址之前,切换所述缓存器分配元件的所述值;并且
使用用于一个或多个数据元素的每个组的所确定的缓存存储器地址来将每个数据元素传输到所述第一存储器或第二存储器的相应存储器位置。
9.根据权利要求8所述的方法,其中:
所述第一存储器和所述第二存储器是各自具有第一数据存储容量的缓存器;并且
所述第一数据存储位置和所述第二数据存储位置各自至少包括大于所述第一数据存储容量的第二数据存储容量。
10.根据权利要求8或9所述的方法,其中:
所述第一存储器和所述第二存储器是各自具有第一数据存储容量的缓存器;并且
所述数据元素的序列包括超过所述第一数据存储容量的数据的量。
11.根据权利要求8至10中的任一项所述的方法,其中,基于所述缓存器分配元件的所述值和用于所述第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的所述组的所述缓存存储器地址包括:基于用于通过数据元素的所述序列迭代的一个或多个循环的迭代的数目来确定用于一个或多个数据元素的所述组的所述存储器偏移值。
12.根据权利要求11所述的方法,其中,基于所述缓存器分配元件的所述值和用于所述第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的所述组的所述缓存存储器地址包括:
每当所述缓存器分配元件的所述值是所述第二值时,将以下的和:(i)用于所述第一存储器的所述基地址、(ii)用于所述第二存储器的所述存储器地址偏移值、以及(iii)用于一个或多个数据元素的所述组的所述存储器偏移值,确定为用于一个或多个数据元素的所述组的所述缓存存储器地址;并且
每当所述缓存器分配元件的所述值是所述第一值时,将以下的和:(i)用于所述第一存储器的所述基地址和(ii)用于一个或多个数据元素的所述组的所述偏移值,确定为一个或多个数据元素的所述组的所述缓存存储器地址,而与用于所述第二存储器的所述存储器地址值无关。
13.根据权利要求11或12所述的方法,其中,用于一个或多个数据元素的所述组的所述存储器偏移值基于用于N维张量的每个维度的循环的迭代的数目。
14.根据权利要求11至13中的任一项所述的方法,其中,用于所述第二存储器的所述存储器地址偏移值基于所述第二存储器的所述第一存储器地址的存储器地址之间的差。
15.一种用于传输数据的系统,所述系统包括:
多个存储器,所述多个存储器至少包括第一存储器和第二存储器;以及
一个或多个处理单元,所述一个或多个处理单元包括一个或多个数学单元,所述一个或多个处理单元被配置为:
通过以下操作来确定包括多个数据元素的序列的缓存存储器地址,所述多个数据元素存储在第一数据存储位置中、正被传输到第二数据存储位置:
针对所述序列中的所述多个数据元素中的一个或多个数据元素的每个组:
识别缓存器分配元件的值,所述缓存器分配元件的值能够在多个值之间切换,所述多个值中的每个值与所述多个存储器中的不同的一个存储器相对应;
基于所述缓存器分配元件的所述值来确定用于一个或多个数据元素的所述组的缓存存储器地址,包括:
当所述缓存器分配元件的所述值是与所述第一存储器相对应的第一值时,通过基于用于所述第一存储器的基地址与用于一个或多个数据元素的所述组的存储器偏移值的组合来确定用于一个或多个数据元素的所述组的所述缓存存储器地址,来向所述第一存储器分配一个或多个数据元素的所述组;并且
当所述缓存器分配元件的所述值是与所述第一值不同的且与所述第二存储器相对应的第二值时,通过基于用于所述第一存储器的所述基地址、用于所述第二存储器的所述存储器地址偏移值、以及用于一个或多个数据元素的所述组的所述存储器偏移值的组合来确定用于一个或多个数据元素的所述组的所述存储器地址,来向所述第二存储器分配所述数据元素,以向所述第二存储器分配一个或多个数据元素的所述组;并且
在确定用于数据元素的所述序列中的一个或多个数据元素的后续组的所述缓存存储器地址之前,切换所述缓存器分配元件的所述值;并且
输出指定每个所确定的存储器地址的数据;
一个或多个处理器,所述一个或多个处理器被配置为使用用于一个或多个数据元素的每个组的所确定的缓存存储器地址来将每个数据元素传输到所述第一存储器或第二存储器的相应存储器位置。
16.根据权利要求15所述的系统,其中:
所述第一存储器和所述第二存储器是各自具有第一数据存储容量的缓存器;并且
所述第一数据存储位置和所述第二数据存储位置各自至少包括大于所述第一数据存储容量的第二数据存储容量。
17.根据权利要求15或16所述的系统,其中:
所述第一存储器和所述第二存储器是各自具有第一数据存储容量的缓存器;并且
所述数据元素的序列包括超过所述第一数据存储容量的数据的量。
18.根据权利要求15至17中的任一项所述的系统,其中,基于所述缓存器分配元件的所述值和用于所述第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的所述组的所述缓存存储器地址包括:基于用于通过数据元素的所述序列迭代的一个或多个循环的迭代的数目来确定用于一个或多个数据元素的所述组的所述存储器偏移值。
19.根据权利要求18所述的系统,其中,基于所述缓存器分配元件的所述值和用于所述第二存储器的存储器地址偏移值来确定用于一个或多个数据元素的所述组的所述缓存存储器地址包括:
每当所述缓存器分配元件的所述值是所述第二值时,将以下的和:(i)用于所述第一存储器的所述基地址、(ii)用于所述第二存储器的所述存储器地址偏移值、以及(iii)用于一个或多个数据元素的所述组的所述存储器偏移值,确定为用于一个或多个数据元素的所述组的所述缓存存储器地址;并且
每当所述缓存器分配元件的所述值是所述第一值时,将以下的和:(i)用于所述第一存储器的所述基地址和(ii)用于一个或多个数据元素的所述组的所述偏移值,确定为一个或多个数据元素的所述组的所述缓存存储器地址,而与用于所述第二存储器的所述存储器地址值无关。
20.根据权利要求18或19所述的系统,其中,用于一个或多个数据元素的所述组的所述存储器偏移值基于用于N维张量的每个维度的循环的迭代的数目。
21.根据权利要求18至20中的任一项所述的系统,其中,用于所述第二存储器的所述存储器地址偏移值基于所述第二存储器的所述第一存储器地址的存储器地址之间的差。
CN201880004800.7A 2017-07-05 2018-06-18 使用专用计算单元的硬件双缓存 Active CN110036374B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310201075.5A CN116303111A (zh) 2017-07-05 2018-06-18 使用专用计算单元的硬件双缓存

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/641,824 2017-07-05
US15/641,824 US10175912B1 (en) 2017-07-05 2017-07-05 Hardware double buffering using a special purpose computational unit
PCT/US2018/038009 WO2019009993A1 (en) 2017-07-05 2018-06-18 DOUBLE MATERIAL BUFFER USING A SPECIALIZED CALCULATION UNIT

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202310201075.5A Division CN116303111A (zh) 2017-07-05 2018-06-18 使用专用计算单元的硬件双缓存

Publications (2)

Publication Number Publication Date
CN110036374A true CN110036374A (zh) 2019-07-19
CN110036374B CN110036374B (zh) 2023-03-10

Family

ID=62981308

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201880004800.7A Active CN110036374B (zh) 2017-07-05 2018-06-18 使用专用计算单元的硬件双缓存
CN202310201075.5A Pending CN116303111A (zh) 2017-07-05 2018-06-18 使用专用计算单元的硬件双缓存

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202310201075.5A Pending CN116303111A (zh) 2017-07-05 2018-06-18 使用专用计算单元的硬件双缓存

Country Status (7)

Country Link
US (3) US10175912B1 (zh)
EP (2) EP3529701B1 (zh)
JP (3) JP7062659B2 (zh)
KR (2) KR102335909B1 (zh)
CN (2) CN110036374B (zh)
TW (3) TWI671633B (zh)
WO (1) WO2019009993A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111756940A (zh) * 2020-07-07 2020-10-09 广州威谱通信设备有限公司 一种可编程寻址双输入混音的精简数字语音通信系统

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10175912B1 (en) 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit
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
CN111324294B (zh) * 2018-12-17 2023-11-07 地平线(上海)人工智能技术有限公司 存取张量数据的方法和装置
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
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

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1367493A1 (en) * 2002-05-30 2003-12-03 STMicroelectronics Limited Prefetch buffer
US20080270332A1 (en) * 2003-08-26 2008-10-30 Paul Rudolf Associative Memory Device and Method Based on Wave Propagation
US20100281192A1 (en) * 2009-04-30 2010-11-04 Novafora, Inc. Apparatus and method for transferring data within a data processing system
CN104838357A (zh) * 2012-12-27 2015-08-12 英特尔公司 瓦解的多嵌套循环的向量化

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163132A (en) * 1987-09-24 1992-11-10 Ncr Corporation Integrated controller using alternately filled and emptied buffers for controlling bi-directional data transfer between a processor and a data storage device
JPH02132566A (ja) * 1988-11-14 1990-05-22 Toshiba Corp 画像データ転送装置
US4910683A (en) * 1988-12-20 1990-03-20 Sun Microsystems, Inc. Method and apparatus for fractional double buffering
JPH03131951A (ja) * 1989-10-18 1991-06-05 Fujitsu Ltd データ転送方式
JPH0553982A (ja) * 1991-08-28 1993-03-05 Nec Corp メモリ制御回路
DE69727465T2 (de) * 1997-01-09 2004-12-23 Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6363470B1 (en) 1998-10-06 2002-03-26 Texas Instruments Incorporated Circular buffer management
JP2001022950A (ja) * 1999-05-20 2001-01-26 Mitsubishi Electric Inf Technol Center America Inc ボリュームレンダリンググラフィックボード
US7155570B1 (en) 2000-09-29 2006-12-26 Intel Corporation FIFO write/LIFO read trace buffer with software and hardware loop compression
JP2002182925A (ja) * 2000-12-12 2002-06-28 Hitachi Ltd コンパイル方法及びコンピュータ読み取り可能な記録媒体
JP2002254729A (ja) * 2001-03-02 2002-09-11 Sharp Corp 画像データのdma制御装置
JP4004389B2 (ja) 2002-11-27 2007-11-07 富士通株式会社 バッファメモリ管理方法及びシステム
US6931497B2 (en) 2003-01-09 2005-08-16 Emulex Design & Manufacturing Corporation Shared memory management utilizing a free list of buffer indices
GB0313986D0 (en) 2003-06-17 2003-07-23 Zarlink Semiconductor Inc Data memory extension for use in double buffered TDM switches
JP2006301724A (ja) 2005-04-15 2006-11-02 Seiko Epson Corp メモリコントローラ、画像処理コントローラ及び電子機器
US7864864B2 (en) 2005-06-27 2011-01-04 Intel Corporation Context buffer address determination using a plurality of modular indexes
JP2011039302A (ja) * 2009-08-11 2011-02-24 Seiko Epson Corp バッファー制御回路、表示コントローラー及び電子機器
US8458377B2 (en) * 2010-03-05 2013-06-04 Lsi Corporation DMA engine capable of concurrent data manipulation
US8892787B2 (en) * 2012-03-06 2014-11-18 Lsi Corporation Methods and apparatus for packing received frames in buffers in a serial attached SCSI (SAS) device
US10726328B2 (en) 2015-10-09 2020-07-28 Altera Corporation Method and apparatus for designing and implementing a convolution neural net accelerator
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10175912B1 (en) 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1367493A1 (en) * 2002-05-30 2003-12-03 STMicroelectronics Limited Prefetch buffer
US20080270332A1 (en) * 2003-08-26 2008-10-30 Paul Rudolf Associative Memory Device and Method Based on Wave Propagation
US20100281192A1 (en) * 2009-04-30 2010-11-04 Novafora, Inc. Apparatus and method for transferring data within a data processing system
CN104838357A (zh) * 2012-12-27 2015-08-12 英特尔公司 瓦解的多嵌套循环的向量化

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111756940A (zh) * 2020-07-07 2020-10-09 广州威谱通信设备有限公司 一种可编程寻址双输入混音的精简数字语音通信系统

Also Published As

Publication number Publication date
EP3686743A1 (en) 2020-07-29
US20190138243A1 (en) 2019-05-09
KR20190073535A (ko) 2019-06-26
TW201945937A (zh) 2019-12-01
US10175912B1 (en) 2019-01-08
US11099772B2 (en) 2021-08-24
KR102335909B1 (ko) 2021-12-06
KR102309522B1 (ko) 2021-10-07
TW202131194A (zh) 2021-08-16
JP2024020270A (ja) 2024-02-14
US10496326B2 (en) 2019-12-03
WO2019009993A1 (en) 2019-01-10
JP7379581B2 (ja) 2023-11-14
EP3529701B1 (en) 2020-03-11
TW201908977A (zh) 2019-03-01
TWI722526B (zh) 2021-03-21
JP2020506453A (ja) 2020-02-27
US20200183612A1 (en) 2020-06-11
TWI777442B (zh) 2022-09-11
CN110036374B (zh) 2023-03-10
JP7062659B2 (ja) 2022-05-06
CN116303111A (zh) 2023-06-23
JP2022106815A (ja) 2022-07-20
US20190012112A1 (en) 2019-01-10
TWI671633B (zh) 2019-09-11
KR20210119584A (ko) 2021-10-05
EP3529701A1 (en) 2019-08-28

Similar Documents

Publication Publication Date Title
CN110036374A (zh) 使用专用计算单元的硬件双缓存
JP7372009B2 (ja) 並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ
KR102261768B1 (ko) 대안적인 루프 제한
JP6921951B2 (ja) ニューラルネットワーク命令セットアーキテクチャ
JP7227272B2 (ja) 再構成可能なコアレベルおよびベクトルレベルの並列性を有する並列計算アーキテクチャ
JP2019537793A (ja) ニューラルネットワーク計算タイル
KR20200100190A (ko) 기계 학습을 위한 이미지 변환
US20210326683A1 (en) Hardware circuit for accelerating neural network computations
CN106484532B (zh) 面向sph流体模拟的gpgpu并行计算方法
EP3971787A1 (en) Spatial tiling of compute arrays with shared control

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