CN115136115A - 使用共享便笺式存储器的向量简化 - Google Patents

使用共享便笺式存储器的向量简化 Download PDF

Info

Publication number
CN115136115A
CN115136115A CN202080061241.0A CN202080061241A CN115136115A CN 115136115 A CN115136115 A CN 115136115A CN 202080061241 A CN202080061241 A CN 202080061241A CN 115136115 A CN115136115 A CN 115136115A
Authority
CN
China
Prior art keywords
vector
processor core
values
shared memory
memory
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
CN202080061241.0A
Other languages
English (en)
Other versions
CN115136115B (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 CN202311334630.8A priority Critical patent/CN117421047A/zh
Publication of CN115136115A publication Critical patent/CN115136115A/zh
Application granted granted Critical
Publication of CN115136115B publication Critical patent/CN115136115B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • 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
    • G06N3/045Combinations of networks
    • 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
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • 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
    • G06N3/048Activation functions
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

描述了用于使用硬件电路的共享便笺式存储器来执行向量简化的方法、***和装置,该硬件电路具有与共享存储器进行通信的处理器核。对于每个处理器核,基于在处理器核处执行的计算来生成相应的值向量。共享存储器使用共享存储器的直接存储器存取(DMA)数据路径从处理器核的相应资源接收值的相应向量。共享存储器使用耦合到共享存储器的运算符单元对值的各个向量执行累加运算。运算符单元被配置为基于在运算符单元处编码的算术运算来累加值。基于使用相应值向量执行累加运算而生成结果向量。

Description

使用共享便笺式存储器的向量简化
技术领域
本说明书一般涉及用于执行神经网络计算的硬件电路的电路。
背景技术
神经网络是采用一层或多层节点来为接收到的输入生成输出(例如,分类)的机器学习模型。一些神经网络除了输出层之外还包括一个或多个隐藏层。每个隐藏层的输出被用作网络中的一个或多个其他层的输入,例如,网络的其他隐藏层或输出层。网络的一些层根据相应的一组参数的当前值从接收到的输入生成输出。一些神经网络可以是被配置为用于图像处理的卷积神经网络(CNN)或被配置为用于语音和语言处理的递归神经网络(RNN)。不同类型的神经网络架构可以用于执行与分类或模式识别、涉及数据建模的预测以及信息聚类相关的各种任务。
CNN的神经网络层可以具有相关联的一组内核,其可以对应于参数或权重。相关联的一组内核用于通过神经网络层处理输入(例如,一批输入)以生成该层的对应输出以用于计算神经网络推断。一批输入和一组内核可以被表示为输入和权重的张量,即多维阵列。实现神经网络的硬件电路包括具有由地址值标识的位置的存储器。存储器位置可以对应于张量的元素,并且可以使用电路的控制逻辑来遍历或访问张量元素。例如,控制逻辑可以确定或计算元素的存储器地址值以加载或存储元素的对应数据值。
发明内容
本文描述了用于在大型共享便笺式存储器中执行数据累加和向量简化的技术。具体地,这些技术用于减少执行向量简化所需的运算的总量,该向量简化涉及简化作为在计算***的相应处理器核处发生的计算的结果而生成的值或输出。例如,该***包括硬件电路,该硬件电路可以具有多个处理器核以及结合了静态随机存取存储器(SRAM)的存储器资源的架构。SRAM的存储器资源被分配用于在电路的多个相应处理器核之间共享。
在计算***中发生的计算组可以分布在一个或多个硬件电路的相应核中,以生成相应的值向量。共享存储器使用共享存储器的直接存储器存取(DMA)数据路径从处理器核的相应资源接收值的相应向量。共享存储器使用耦合到共享存储器的运算符单元对值的各个向量执行累加运算。运算符单元被配置为基于在运算符单元处编码的算术运算来累加值。基于累加运算生成结果向量。
本说明书中描述的主题的一个方面可以体现为使用硬件电路执行的方法,该硬件电路具有共享存储器和与该共享存储器通信的多个处理器核。该方法包括:基于在第一处理器核处执行的计算来生成第一值向量;由该共享存储器并且使用该共享存储器的直接存储器访问(DMA)数据路径从该第一处理器核接收该第一值向量;以及在共享存储器处,在值的第一向量和存储在共享存储器中的向量之间执行累加运算。使用运算符单元执行累加运算,该运算符单元:i)耦合到该共享存储器,以及ii)被配置为累加多个向量。该方法包括基于累加运算生成结果向量。
这些和其他实现方式可以各自可选地包括以下特征中的一个或多个。例如,在一些实现方式中,存储在共享存储器中的向量是从第二处理器核接收的,并且该方法包括:由该第一处理器核处执行累加到存储器运算以在该共享存储器的存储器位置处累加该第一值向量的相应值;以及由第二处理器核处执行累加到存储器运算以在共享存储器的存储器位置处累加第二值向量的相应值,其中第二值向量对应于存储在共享存储器中的向量。在一些情况下,第二处理器设置标志(例如,初始向量/值标志)使得第二值向量的值被写为初始值,而第一处理器核将不同的标志(例如,累加标志)设置为使得第一值向量的值与第二值向量的值累加。
在一些实现方式中,基于累加运算生成结果向量包括:在该第一处理器核不执行预先累加从在该第一处理器核处执行的计算得到的乘积的步骤的情况下生成该结果向量;以及在该第二处理器核不执行对由在该第二处理器核处执行的计算得到的乘积进行预累加的步骤的情况下生成该结果向量。
在一些实现方式中,生成结果向量包括:作为对该第一值向量执行该累加运算的结果而产生累加值向量;将激活函数应用于该累加值向量中的每个值;以及作为将激活函数应用于累加值向量中的每个值的结果,生成结果向量。该累加可以发生在该第一向量的值上,或者该累加可以涉及该第一向量的值和存储在共享存储器中的该向量的值的成对累加。
在一些实现方式中,第一处理器核的相应资源是第一矩阵计算单元,并且该方法还包括:基于使用该第一处理器核的该第一矩阵计算单元执行的矩阵乘法,生成与该第一值向量相对应的第一累加值向量。
在一些实现方式中,第二处理器核的相应资源是第二矩阵计算单元,并且该方法还包括:基于使用该第二处理器核的该第二矩阵计算单元执行的矩阵乘法,生成与该第二值向量相对应的第二累加值向量。硬件电路可以是被配置为实现具有多个神经网络层的神经网络的硬件加速器;并且该方法包括基于结果向量生成神经网络的层的输出。
该方法还可包括:基于在该第一处理器核处执行的计算产生该第一值向量;以及基于在该第二处理器核处执行的计算生成该第二值向量。在第一处理器核处执行的计算和在第二处理器核处执行的计算可以是由可交换属性支配的数学运算的一部分。在一些实现方式中,该数学运算是:浮点乘法运算;浮点加法运算;整数加法运算;或最小-最大运算。在一些实现方式中,数学运算包括浮点加法运算和整数加法运算。第一处理器核和第二处理器核可以是相同的处理器核。
在一些实现方式中,共享存储器被配置为用作共享全局存储空间,该共享全局存储空间包括在硬件电路的两个或多个处理器核之间共享的存储体和寄存器。
这个和其他方面的其他实现方式包括被配置为执行在计算机存储设备上编码的方法的动作的相应***、装置和计算机程序。可通过安装在***上的软件、固件、硬件或它们的组合来配置一个或多个计算机的***,这些软件、固件、硬件或它们的组合在操作中使***执行动作。可以通过具有指令来配置一个或多个计算机程序,该指令在由数据处理设备执行时致使该装置执行该动作。
可以在特定实施例中实现本说明书中描述的主题,以便实现以下优点中的一个或多个。
本文档中描述的技术利用支持DMA模式的大型共享便笺式存储器的能力,该DMA模式以原子方式简化进入共享存储器位置的向量数据,而不是简单地重写数据。换言之,多个处理器核或处理器可以并发地执行更新相同的共享存储器位置的归约运算,使得即使运算涉及与相同的存储器位置相关联的值,也计算所得到的归约值,就好像归约运算按顺序发生一样。相反,如果每个处理器将简单地重写共享存储器位置,则可能无意中丢失(例如,对应于丢失的更新问题)由另一处理器写入的先前值。基于控制循环,***可以检测数据的“原子”缩减,并允许以一种或另一种方式重写共享存储器位置中的值,以使存储器位置保持(或存储)归约运算的最终结果。在一些情况下,可将本说明书中所描述的各种技术扩展到跨***存在的其他存储器类型,包括片上和片外存储器。
运算符单元紧邻共享存储器耦合,以支持用于将向量值累加到共享存储器单元/位置的各种算术运算。算术运算可以基于任何归约运算符,比如,浮点原子加法、整数加法、最大、最小、最大池化和甚至乘法。邻近共享存储器耦合的运算符单元提供了在单个存储器***中集成共享资源的软件管理寻址和交换数学运算的优点。
该技术包括在共享存储器的控制单元处实现的读-修改-写控制环路,以跟踪未完成的运算,以确保原子性,以及根据需要延迟或重新排序写入流量,以确保不会相对于陈旧的向量值累加向量值。读-修改-写控制环路还提供了相对于低效备选方法的性能和能量改进,该低效备选方法需要读取存储在第一处理器核处的向量数据,在相对于第一核远程的计算单元处对读取的向量值执行算术运算,并且然后对第一处理器核进行存储/写回。在***具有大向量存储器的情况下,这些低效的备选方法可能需要在芯片上移动显著的距离。这种方法导致处理器核中的计算周期和去往和来自核的线路上的带宽的不必要消耗。这些低效率还产生更深的计算调度并不必要地消耗寄存器带宽。
该技术包括累加到存储器特征,其部分地基于在处理器核处生成的累加标志,并且与共享存储器的DMA路径结合使用。该特征允许两个或多个处理器核直接在共享存储器***中的共享存储器位置中累加向量。通过允许来自多个核的DMA同时以相同的存储器扇区和地址为目标而不需要额外的同步或软件锁定来仲裁核之间的运算,该特征在多节点***中特别有用。例如,这可有助于将共享存储器单元配置为跨多个芯片或处理器核的分布式***的全简化缓冲器。
一些实现方式涉及用于使用硬件电路的共享便笺式存储器来执行向量简化的方法、***和装置,包括计算机可读介质,该硬件电路具有与共享存储器进行通信的处理器核。对于每个处理器核,基于在处理器核处执行的计算来生成相应的值向量。共享存储器使用共享存储器的直接存储器存取(DMA)数据路径从处理器核的相应资源接收值的相应向量。共享存储器使用耦合到共享存储器的运算符单元对值的各个向量执行累加运算。运算符单元被配置为基于在运算符单元处编码的算术运算来累加值。基于累加运算生成结果向量。
本说明书中描述的主题的一个或多个实现方式的细节在附图和以下描述中阐述。根据说明书,附图和权利要求书,本主题的其他潜在特征、方面和优点将变得显而易见。
附图说明
图1是具有包括示例性共享存储器的硬件电路的计算***的框图。
图2是示出与硬件电路的共享存储器通信的处理器核的示例的框图。
图3是示出与硬件电路的矩阵计算单元通信的向量处理器的示例的框图。
图4是示出示例性累加流水线的框图。
图5图示了输入张量、权重张量和输出张量的示例。
图6是图示了用于使用图1的共享存储器执行向量简化的示例性过程的流程图。
在各个附图中相同的附图标记表示相同的元件。
具体实施方式
归约运算通常在利用线性代数的计算期间使用,比如,计算涉及人工神经网络的运算的密集工作量。例如,可能需要归约运算来平均在神经网络训练期间跨分布式***的不同处理节点计算的梯度值。归约运算可以以分布式方式发生,比如,对于全归约运算,或者对于给定计算以本地方式发生,比如,矩阵乘法片求和运算。
性能和功率问题对于在计算***处高效地构建和执行这些运算而言可能是重要的因素。通常归约运算需要通过***(例如,分布式***)的存储器层级将数据拉到处理器(或处理器核)的算术逻辑单元(ALU)中,对所拉出的数据执行数学/归约,且接着通过存储器***将结果写回。然而,在***中实现这些各种步骤在性能和功率方面都是昂贵的。另外,在对多个处理器核可见的存储器中,跨核执行归约运算通常需要在非重叠存储器区域中同步和/或保留资源,这会增加显著的性能和容量开销以及编程复杂性。
基于前述上下文,本说明书描述了用于通过累加大型共享便笺式存储器中的一个或多个存储器地址位置处的值向量来执行向量简化的数据处理技术。基于用于写入(存储)计算结果的存储器位置的软件管理寻址而不是通常用于硬件管理高速缓冲存储器***的寻址方案,在共享高速暂存存储器处执行向量简化和累加。共享存储器包括比如,跨处理器核的分布式***共享存储器单元之类的资源。所描述的技术包括用于在处理值的向量时实现累加缩减步骤(例如,用于向量简化)的累加存储器功能。例如,可以通过对不同组的输入执行的矩阵乘法来实现累加缩减步骤,该不同组的输入通过神经网络的层来处理以生成该层的输出。
使用相对于现有设计而言改进的硬件电路的架构来实现包括共享便笺式存储器的数据处理技术。硬件电路可以是专用处理器,比如,神经网络处理器、专用集成电路(ASIC)或硬件加速器。硬件电路被配置为实现包括多个神经网络层的神经网络。在该文献中描述的改进的体系结构和数据处理技术允许表示硬件加速器的电路实现速度和带宽的增加,以便更好地加速计算。
计算可以是特定类型的数学运算,比如,浮点乘法、浮点加法或整数加法运算。计算还可以被包括在示例神经网络模型的运算中,这些运算被执行以计算推断或训练模型。在一些示例中,该计算用于处理通过CNN或RNN的层的输入以生成对应于神经网络推断的输出,或者用于计算相对于CNN或RNN的参数的梯度以在训练期间更新神经网络的参数。
数学运算由交换属性支配,并且可以包括原子缩减(例如,原子浮点缩减)。原子缩减被处理为累加或向量简化步骤,其中值的向量被直接累加到共享存储器的存储器位置(或其中存储的向量)中,而不需要在提供需要累加的向量的核之间同步活动。换句话说,硬件电路的两个或多个核可以任何任意次序将值累加到共享存储器单元的中央地址位置中,使得最终结果向量提供该累加的正确数学结果。在一个示例中,累加涉及由第一核提供的第一向量的值对由第二核提供的第二向量的值的成对累加。
图1是包括示例性硬件电路101的计算***100的框图。如上所述,硬件电路101可以表示硬件加速器或一些其他专用处理器。在一些情况下,***100是用于加速与人工深度神经网络(DNN)(比如,RNN或CNN)相关联的张量或神经网络计算的示例性计算***。举例来说,***100被配置为在示例性硬件加速器上实现CNN,并将数据值传递给硬件加速器以生成用于计算推断的输出。在一些实现方式中,***100是片上***。例如,片上***可以包括硬件电路101以及在本文中描述为包括在***100中的一些(或所有)其他组件和设备。
硬件电路101可以是被配置为加速神经网络模型的执行和/或性能的硬件加速器。例如,神经网络模型的执行可以相对于模型在比如,中央处理单元(CPU)的示例通用机器上的执行而加速。类似地,神经网络模型的性能和执行可以相对于该模型在比如,图形处理单元(GPU)的另一硬件加速器上的实现而加速,该另一硬件加速器不具有本说明书中描述的改进的硬件特征和技术。
包括电路101的***100包括***存储器102和共享存储器104。***存储器102可表示高带宽存储器(“HBM 102”)或与硬件电路101的处理器核105-1、105-2交换数据通信的输入/输出(I/O)设备。数据通信通常可包括将数据值写入位于特定处理器核105-1、105-2中的向量存储器106、108或从特定处理器核的向量存储器106、108读取数据。例如,HBM 102可以与处理器核105-1交换数据通信,以将输入传递到核并接收由核的一个或多个计算资源生成的输出。
数据值可以表示向量元素或向量值阵列。例如,第一向量阵列可以表示要通过神经网络层处理的一批输入,而第二向量阵列可以表示用于该层的一组权重。与此相关的是,第三向量数组可以表示对应于在处理器核105-1处生成的输出的累加值向量,而第四向量数组可以表示表示在处理器核105-2处生成的输出的激活值的向量。
HBM 102可以是***100的动态随机存取存储器(DRAM)资产。在一些实现方式中,HBM 102是相对于电路101的外部或片外存储器,并且被配置为与***100的片上向量存储体(下面描述)交换数据通信。例如,HBM 102可以放置在表示电路101的集成电路管芯外部的物理位置。因此,HBM 102相对于位于集成电路管芯内的计算资源可以是远程的或非本地的。可替代地,HBM 102或其资源的一部分可以被布置在表示电路101的集成电路管芯内,使得HBM 102对于电路的计算资源是本地的或与电路的计算资源共处一地。
***100可包括一个或多个处理器核105-1、105-2。在一些实现方式中,***100包括多个处理器核105-n,其中n是大于或等于1的整数。在图1以及下面描述的图2和图3的示例中,***100被示出为包括两个处理器核;然而,包括本文所述的硬件电路101的***100可具有更多或更少的处理器核。通常,处理器核105-n是***100(或硬件电路101)的分立的、独立的处理/计算单元。
每个处理器核105被配置为独立地执行多层神经网络的一个或多个层所需的计算(例如,神经网络计算)。可能需要计算来处理机器学习工作量的数据或执行工作量的特定任务。在处理器核处执行以处理通过一个或多个神经网络层的输入的计算可以包括第一组数据值(例如,输入或激活)与第二组数据值(例如,权重)的乘法。例如,计算可以包括将输入或激活值与一个或多个周期上的权重值相乘,并在多个周期上执行乘积的累加。
第一组数据值和第二组数据值中的不同值存储在硬件电路101的处理器核中的存储器构造的特定存储器位置处。在一些实现方式中,第一组数据值中的各个值可以对应于输入张量的各个元素,而第二组数据值中的各个值可以对应于权重(或参数)张量的各个元素。作为示例,层序列中的神经网络层可以处理一组输入,比如,由层序列中的另一神经网络层生成的图像像素数据或激活值的输入。
该组输入或该组激活值可以被表示为沿着其相应维度具有多个元素的一维(1D)或多维张量(例如,2D或3D)。可以将存储数据值的每个存储器位置映射到一维或多维张量的对应元素,并且可以使用电路的控制逻辑来遍历或访问张量元素。例如,控制逻辑可以确定或计算映射到元件的存储器地址值以加载或存储该元件的相应数据值。
硬件电路101具有包括不同存储器构造的专用存储器层次结构。这些存储器构造中的每一者相对于其他构造具有变化的带宽和等待时间特性,并且它们在硬件电路101内的物理位置也可以变化。示例性存储器构造包括共享存储器104、向量存储器106、108和向量寄存器110、112。通常,存储器构造可操作以存储数据值(比如,与输入、激活或增益值有关的向量值)以在神经网络层处进行处理,且存储由神经网络层响应于通过该层处理输入或激活而产生的输出激活。下面参考图2和图3更详细地描述输出激活的生成和存储以及用于执行这些操作的各种存储器构造。
图2是示出在硬件电路101处如何布置共享存储器104的资源或部分以便于硬件电路的各个组件之间的数据通信的示例的框图200。如上所述,共享存储器104为***100的改进的硬件体系结构和数据处理技术提供了基础。相对于一些其他神经网络处理器芯片的片上存储器,共享存储器104是更大的片上SRAM。在一些实现方式中,共享存储器104可被描述为在HBM 102与相应处理器核105-1、105-2的相应向量存储器106、108之间(例如,在逻辑上或在物理上)。例如,利用共享存储器104在HBM 102和向量存储器106、108之间移动数据的操作将涉及数据遍历共享存储器104的共享资源。
共享存储器104可以表示芯片或电路101上的共享中央空间。例如,共享存储器104被配置为用作共享全局存储器空间,该共享全局存储器空间包括对应于存储体和寄存器的存储器资源,该存储体和寄存器在一个或多个处理器核105-1、105-2之间,在可能存在于***100中和/或包括在硬件电路101中的多个处理器核之间共享。如下面更详细地描述的,共享存储器104被配置为充当软件控制的便笺式存储器(例如,类似于示例性向量)。在一些实现方式中,共享存储器104的一些(或全部)资源被配置为用作软件控制的便笺式存储器(分级资源)而不是硬件管理的高速缓存。
***100被配置为向用户展示至少两个编程接口,用于利用共享存储器104所提供的数据传送功能。第一接口展示可编程DMA数据传送功能和操作,而不同的第二接口展示可编程加载/存储数据传送功能和操作。这些接口功能中的每一者都可以表示下面更详细描述的共享存储器104的逻辑属性。
如上所述,***100的存储器构造具有变化的带宽和等待时间特性。例如,共享存储器104可以具有比HBM 102的DRAM访问更高的带宽和更低的等待时间,但是具有比向量存储器106、108的访问更低的带宽和更高的等待时间。在一些示例中,共享存储器104具有比HBM 102的DRAM资产更低的数据容量,但具有比处理器核的相应向量存储器更高的数据容量。通常,这些变化的带宽和等待时间特性代表标准存储器层次结构折衷。
***100的存储器构造,特别是共享存储器104,在硬件电路101中它们的物理位置也可以变化。共享存储器104包括比如,存储体和寄存器之类的资源,这些资源可以相对于处理器内核105-1、105-2的某些计算资源以物理和逻辑的方式布置。在此上下文中,一般可参考共享存储器104的物理结构及逻辑结构来对其进行表征。首先讨论共享存储器104的物理结构,而下面描述的是其逻辑结构。
关于其物理结构,共享存储器104的资源可以物理地分布在对应于硬件电路101的专用或神经网络处理器芯片上。例如,形成共享存储器104的资源的不同子集、部分或区段可以物理地分布在电路101的各个位置处,以使得能够在***100处实现不同类型的数据传输操作和处理技术。在一些实现方式中,共享存储器104的一部分资源可以驻留在电路101的处理器核内,而另一部分资源可以驻留在电路101的处理器核外。在图2的示例中,共享存储器104的一部分在处理器核105-1、105-2中的每一者的外部,以实现在HBM 102的存储器位置和共享存储器104的存储器位置之间移动大数据块的DMA操作。
再次简要参考HBM 102,这种类型的***存储器可以是***100用来提供高带宽数据和/或与各个处理器核的向量存储器交换高带宽数据的外部存储器结构。在一些实现方式中,HBM 102被配置为用于各种直接存储器存取(DMA)操作,以从电路101的处理器核中的向量存储器的存储器地址位置获得数据或向其提供数据。更具体地,涉及HBM 102与向量存储器106、108交换数据的DMA操作由共享存储器104的示例性控制方案和存储器资源来启用。
在图2和图3(下面描述)的示例中,共享存储器104包括共享存储器控制单元201(“控制单元201”)。控制单元201被配置为生成用于控制涉及HBM 102、共享存储器104、向量存储器106、108和向量寄存器110、112中的每一者的存储器访问操作的控制信号114。
控制单元201实现跨***100的不同存储器(例如,HBM 102、共享存储器104、向量存储器106、108和向量寄存器110、112)分布的控制方案。在一些实现方式中,该控制方案基于控制单元201与每个存储器的相应控制单元之间的通信而分布在不同存储器上。例如,控制方案可以基于由控制单元201提供的控制信号分布在存储器上,这些控制信号由这些不同存储器的相应控制单元本地处理。数据路径的共享可用于在HBM 102与处理器核105-1、105-2的相应向量存储器之间移动数据。当这发生时,***100使给定存储器或数据路径的任何(和所有)所需控制单元被激活,以管理需要在适当的触摸点处发生的数据切换。
控制单元201被配置为执行软件指令并生成使共享存储器104的存储器资源的第一部分充当DMA存储器单元的控制信号。资源的第一部分可以由参考处理器核105-1的共享核数据路径204和参考处理器核105-2的共享核数据路径224来表示。该代表性DMA存储器单元可操作以基于由控制单元201产生的控制信号在HBM 102与第一处理器核105-1和第二处理器核105-2中的每一者之间移动数据。
例如,可生成控制信号以执行DMA操作以在以下两者之间移动数据块(例如,向量):a)使用数据路径202、共享核数据路径204或数据路径206的共享存储器104和向量存储器106的存储器位置,以及b)使用数据路径222、共享核数据路径224或数据路径226的共享存储器104和向量存储器108的存储器位置。在一些实现方式中,共享存储器104可被替代地称为共享CMEM 104。
如在本文中所使用的,CMEM通常对应于提供作为数据缓冲器和片上SRAM存储器的有用配置的物理连续存储器(CMEM)的块。如下面更详细地描述的,在***100中,CMEM资源块在硬件电路101处被物理地分配,并且被安排用于在可以被配置为硬件加速器或其他类型的专用处理器的处理器核的组件之间共享。共享核数据路径204和224中的每一者是示例性节点,其可以指示可能在共享数据路径上发生的静态竞争,以用于向量数据移动穿过***中的这些点。
如图2的示例中所示,图1中所示的硬件电路101和***100被配置为包括多个加载-存储数据路径202、206、多个CMEM加载数据路径208、214、228、234,以及多个CMEM存储数据路径215、235。硬件电路101和***100还包括多个共享分级块210、230(如下所述)。在图2的示例中,数据路径202、222中的每一者可以被配置为用于响应于执行DMA操作而路由数据(例如,向量或标量值)的数据路径、用于响应于执行CMEM加载/存储操作而路由数据的数据路径,或这两者。共享存储器104所支持的DMA操作和数据路径202、206、222和226可用于参考某些存储器偏移和跨步参数在不同存储器结构之间移动数据。
例如,***100被配置为使用共享存储器104来执行DMA操作,该DMA操作涉及将1兆字节的数据从一组存储器位置移动或复制到另一组存储器位置且具有偏移0x04。共享存储器104和***100可操作以在执行DMA操作时支持各种跨步功能。例如,用于移动1兆字节数据的DMA操作可包括相对于基本存储器位置的地址基址或地址值以每200千字节***地址间隔的步幅操作。
在一些实现方式中,跨距操作用于基于期望的读序列来***地址间隔,该期望的读序列将在数据被移动到其目的地位置之后稍后被执行以读取1兆字节的数据。例如,可以基于步幅操作来存储1兆字节的数据块,该步幅操作对应于将如何读取或检索数据以在神经网络的不同层或跨特定神经网络层的不同滤波器或权重集合来处理。
共享存储器104的控制单元201还被配置为使得执行各种加载-存储操作。例如,控制单元201生成控制信号以执行加载-存储操作,该加载-存储操作在以下之间移动各种数据量(例如,向量或向量值):a)使用数据路径202、共享核数据路径204或数据路径208的共享存储器104的存储器位置和共享分级块210的存储器位置(用于核105-1处的加载操作),以及b)使用数据路径222、共享核数据路径224或数据路径228的共享存储器104的存储器位置和共享分级块230的存储器位置(用于核105-2处的加载操作)。
类似地,可以生成控制信号以执行加载-存储操作,该加载-存储操作在以下之间移动各种数据量(例如,向量或向量值):a)使用数据路径202、共享核数据路径204或数据路径215(用于核105-1处的存储操作)的共享存储器104和向量寄存器110的存储器位置,以及b)使用数据路径222、共享核数据路径224或数据路径235(用于核105-2处的存储操作)的共享存储器104和向量寄存器112的存储器位置。
现在参考共享存储器104的逻辑结构,如上所述,***100被配置为向用户暴露至少两个编程接口,以利用共享存储器104提供的数据传递功能。至少一个接口展示可编程DMA功能,而另一个接口展示可编程CMEM加载/存储功能,其中每个功能可以表示共享存储器104的逻辑属性。为了加载/存储的目的,共享存储器104按逻辑被展示为向量存储器106、108的并行存储器。以这种方式,每个加载-存储数据路径可操作用于提供附加(或并行)数据路径,以用于通过存储器***,诸如通过电路101的相应处理器核105-1、105-2或多个核的向量寄存器,来移动数据块或特定数据片段。例如,可以与DMA操作同时地对共享存储器104的存储器资源执行加载-存储操作。
更具体地说,可以执行DMA操作以使用DMA数据路径206在共享存储器104和向量存储器106的存储器位置之间移动值向量,而与DMA操作并发地执行加载-存储操作以在共享存储器104和共享分级块210的存储器位置之间移动不同的值向量。类似的并发操作可以使用与处理器核105-1的资源相对应的处理器核105-2的资源在处理器核105-2(或其他核)中发生。
使用共享存储器104的CMEM资源执行的加载/存储操作可以表示共享存储器104的高性能功能,或者相对于DMA操作使用共享存储器104的高性能方法。在一些实现方式中,控制单元201经配置以执行软件指令且产生控制信号,该控制信号致使共享存储器104的存储器资源的第二部分充当用于执行加载/存储操作的软件控制的分级资源。
资源的第二部分可以由参照处理器核105-1的共享分级块210和参照处理器核105-2的共享分级块230表示。因此,共享分级块210、230中的每一者可以表示由共享存储器104的存储器资源的子集形成的软件控制的分级资源(或便笺式存储器)。在一些示例中,***100的软件控制的分级资源被配置为管理从HBM 102到第一处理器核105-1或第二处理器核105-2的相应向量寄存器110或112的向量数据值的流。
共享存储器104及其资源具有可唯一地配置为例如,用于在比如,HBM 102或向量存储器106、108等存储器构造之间移动数据的DMA存储器,以及用于将数据直接移动到每个处理器核105-1、105-2上的相应向量寄存器110、112中的加载/存储存储器的特性。共享存储器104的这些可配置方面允许其资源和寻址由的软件以精细粒度调度其资源和寻址。例如,共享存储器104可以是软件管理的(而不是硬件管理的)SRAM资源,其中处理器核的编译器具体地管理其存储器的寻址,包括在共享存储器104的存储器地址位置处可能存在或可能不存在的数据类型。
在一些实现方式中,共享存储器104的软件控制的分级资源被配置为沿着处理器核的加载-存储数据路径的加载段的先进先出(FIFO)存储器结构(例如,共享分级块210或230),该处理器核包括CMEM存储数据路径215或235,用于路由数据以存储在共享CMEM 203或HBM 102处。FIFO存储器结构被配置为在将数据值集合路由到第一处理器核105-1或第二处理器核105-2的相应向量寄存器110、112之前在阈值数量的处理器周期内临时存储一组数据值。FIFO存储器结构用于减轻可能由具有特定加载等待时间的CMEM加载操作引起的寄存器压力和调度复杂性。
在一些实现方式中,基于可能导致与在整个50个周期中保留给定寄存器相关联的寄存器压力和调度复杂性的示例性高等待时间(例如,50个周期)CMEM加载操作来确定时钟周期的阈值数量。为了打消或缓解关于寄存器压力的顾虑,CMEM结果FIFO(“CRF”)使用共享存储器104的资源在硬件电路100处物理地实例化。在图2的示例中,第一CRF由处理器核105-1的分级块210表示,而第二CRF由分级块230表示。每个CRF允许示例CMEM加载操作被分成至少两个阶段:i)CMEM到CRF阶段,其中提供CMEM地址信息,以及ii)CRF到寄存器阶段,其中提供向量寄存器目标。
例如,共享分级块210、230中的每一者被配置为接收数据值(例如,标量值或向量值)并且在阈值数量的处理器周期内临时存储数据值。在处理器核105-1中,数据值沿着将分级块210连接到共享存储器104的其他存储器位置的加载数据路径208(和共享核数据路径204)被路由到共享分级块210。在处理器核105-2中,数据值沿着将分级块230连接到共享存储器104的其他存储器位置的加载数据路径228(和共享核数据路径224)被路由到共享分级块230。
共享分级块210被配置为响应于在阈值数量的处理器周期内临时存储数据值,向处理器核105-1的向量寄存器110提供数据值。类似地,共享分级块230被配置为响应于在阈值数量的处理器周期内临时存储数据值,向处理器核105-2的向量寄存器112提供数据值。
***100被配置为在同一循环上发出多个CMEM加载指令。例如,***100可发出使用数据路径208(或214)和共享分级块210执行的CMEM加载指令,并在同一周期上向向量存储器106发出使用数据路径212执行的加载。在一些示例中,从软件控制的角度来看,遍历资源210与向量寄存器110之间的数据路径214的Cmem加载操作和遍历向量存储器106与向量寄存器110之间的数据路径212的Vmem加载操作可以各自在同一周期上发出和执行。在一些实现方式中,向量寄存器110、112相对于现有设计被适配成包括允许向量寄存器110、112接收并发加载操作的附加端口。
例如,向量寄存器112被配置为包括附加端口,该附加端口允许寄存器在处理器核105-2处执行的并发加载操作期间从向量存储器108和共享分级块230接收相应的向量有效载荷。在一些示例中,加载到向量寄存器110、112中的每一者的有效载荷的单个数据片段涉及基于在单个加载操作期间可以移动到向量寄存器110或向量寄存器112的多达128个数据项的128个离散加载。
共享存储器104的CMEM加载/存储功能可以提供相对于现有设计的更高的峰值性能,因为它不需要通过向量存储器宏路由数据。例如,部分地由于向量寄存器110、112处的附加可用寄存器端口,加载和存储(沿着数据路径215、235)可以与向量存储器加载和存储并行地执行。
在一些实现方式中,***100包括示例性加载-存储接口,其提供到分片分级块210、230中的每一者的并行接口,该并行接口绕过当遍历通过向量存储器106、108的数据路径时可能存在的带宽限制中的一些(或全部)。该示例性加载-存储接口可以有效地提供允许从示例性工作加载提取附加性能的更高存储器带宽。例如,***100被配置为使用共享存储器104的资源(例如,软件控制的分级资源)来执行各种加载/存储操作,其中可以执行加载/存储操作以绕过移动数据通过处理器核处的向量存储器。
例如,硬件电路101的组件可以与共享存储器104通信,以从该共享存储器104的存储体或寄存器堆的单个地址位置读取数据。在一些示例中,读取存储在存储器中的单个地址处的数据,并且该单个数据片段可以被移动到位于处理器核内的寄存器堆或分级块中。例如,可以从共享CMEM 104的地址位置读取单个数据,通过共享核数据路径224移动,并移动到处理器核105-2中的共享分级块230的地址位置,以便进一步处理。可执行该操作以绕过经由向量存储器108将数据移动通过存储器***,由此节省核105-2处的处理器时钟周期以及连接到向量存储器108的数据路径处的带宽。
图3是示出与硬件电路101的矩阵计算单元通信的向量处理器的示例的框图300。更具体地,在一些实现方式中,硬件电路101的张量处理器核302-1包括向量处理单元304(“向量处理器304”)和耦合到向量处理器304的矩阵计算单元308。类似地,硬件电路101的另一张量处理器核302-2包括向量处理器306和耦合到向量处理器306的矩阵计算单元310。因此,矩阵计算单元308、310是处理器核302-1、302-2的相应资源。
通常,硬件电路101被配置为执行计算以生成用于神经网络层的输出。电路101中包括的矩阵计算单元308和310中的每一者被配置为执行计算的子集,以生成用于生成神经网络层的输出的累加值。在一些实现方式中,上述软件控制的分级资源(例如,分级块210、230)被配置为管理从图1所示的HBM 102到矩阵计算单元308、310中的每一者的数据流,比如,向量运算数。在一些情况下,运算数是由HBM 102提供的输入和权重。可基于使用向量处理器304或306的算术逻辑单元(ALU)执行的数据运算将运算数构造为向量阵列。
在图3的示例中,控制单元201生成用于管理操作的控制信号,以从共享存储器104、向量存储器106、108和向量寄存器110、112的存储器位置检索(或读取)多个批次的输入和权重集合。可以通过神经网络层处理检索到的输入和权重,以基于在矩阵计算单元308、310处执行的计算来生成累加值。可以在向量处理器304、306处处理累加值以生成与神经网络层的输出相对应的激活值。
由控制单元201生成的控制信号用于将由向量处理器304、306生成的多组输出或输出激活存储(或写入)到HBM 102或硬件电路101的其他存储器位置,以用于在一个或多个其他神经网络层处进行处理。更具体地说,***100被配置为实现用于执行向量简化的数据处理技术,该向量简化包括在诸如共享存储器104的大型共享便笺式存储器中的一个或多个存储器地址位置处累加值向量。如上文所提及,可基于共享存储器104的存储器单元中的位置的软件管理寻址而在共享高速暂存存储器104处执行向量简化和累加。共享存储器104的存储器单元中的地址位置可用于写(存储)在***100的不同组件处发生的计算结果。
***100包括耦合到(或者可以耦合到)共享存储器104的运算符/累加器单元320(“运算符320”)。运算符320被配置为基于一个或多个算术运算而累加值。算术运算可在运算符320处以软件、固件、硬件或每一者的组合来编程或编码。运算符320可以表示计算逻辑的紧凑部分,其靠近共享存储器104的存储器单元耦合以对被路由到共享存储器104的共享存储器单元的向量值执行累加运算。
在一些实现方式中,运算符320是包括用于实现不同类型的加法器(例如,归一化加法器)和乘法器的硬件电路的计算单元,这些加法器和乘法器各自被配置为对具有不同类型的数值格式的值执行不同类型的数学运算。例如,运算符320被配置为执行数学运算,诸如:浮点乘法;浮点加法;整数加法运算;以及最小-最大操作。在一些其他实现方式中,运算符320作为共享存储器104的硬件特征被包括在***100中。也可以用软件和硬件来实现运算符320的一个或多个算术运算或功能。
运算符320可包括用于选择特定算术运算或用于选择运算符320处被配置为执行特定算术运算的电路的逻辑325。在一些实现方式中,基于值向量中的值的一个或多个数字格式(例如,二进制补码整数和浮点)在共享存储器104和/或硬件电路101处示例性化运算符320。例如,数字格式对应于用于表示向量的数字或数值的数据格式。在一些实现方式中,运算符320包括用于归一化单元、池化单元或两者的电路。
如上所述,所描述的技术包括用于在处理值的向量时实现累加缩减步骤(例如,用于向量简化)的累加存储器功能。在图3的示例中,处理器核302-1、302-2中的每一者可以生成相应的累加标志330、335,以使得共享存储器104的控制单元201对示例值向量执行累加到存储器的功能。可以使用DMA操作将值的向量移动到共享存储器104,该DMA操作使用例如,数据路径206或数据路径226将向量移动到共享存储器104。
图4是示出示例性累加流水线400(“流水线400”)的框图。流水线400示出了用于在共享存储器104的共享存储器单元445中累加值向量的示例性运算的示例性数据处理步骤。
诸如单独输入和权重值之类的向量运算数可以被表示为张量值,使用处理器核的示例矩阵单元的乘法单元让这些张量值相乘法,然后将其存储在核的向量存储器中(402)。在一些实现方式中,向量运算数的输入对应于输入矩阵或输入张量的分区。例如,输入张量可以被分成两个部分,并且来自每个部分的不同的相应维度的输入值可以被发送到特定的处理器核,用于与权重值相乘以生成输出值。下面参考图5更详细地描述输入张量以及权重张量和输出张量。
最终结果向量450可以基于输出值的最终集合,该输出值的最终集合表示使用输入矩阵/张量的每个输入为神经网络的层计算的输出。因此,即使输入张量的数据/输入值可以被分开以便在不同的处理器核处进行处理,但是生成正确且准确的最终结果向量450实际上取决于由相应核生成的至少两组不同输出值的正确且准确的累加。例如,由各个核生成的不同组的输出值需要被求和或累加在一起以生成正确的最终结果向量450。
在图4的示例中,各个处理器核被表示为核_0(例如,处理器核302-1)和核_1(例如,处理器核302-2)。可响应于由每一处理器核的相应矩阵单元(例如,矩阵308或310)执行的矩阵乘法而生成多个输出值。在一些实现方式中,输出值被存储在处理器核的向量存储器中,该存储器在被发送到共享存储器104用于累加运算之前执行矩阵乘法。最终结果向量450可基于两个处理器核聚集其各自分配的计算的一半而获得。在一些实现方式中,获得最终结果向量的聚合对应于“预累加运算”。
累加向量值的现有方法需要一个核将其结果移动到另一个核。这些方法需要额外的处理器周期、存储器资源、计算带宽和特定软件控制,以在***的不同核之间移动不同组的结果值。本说明书的累加缩减技术使得这些聚集能够基于可在共享存储器104中本地执行的累加功能而在共享存储器***中发生。
处理器核中的每一者可生成相应累加标志330、335以使得共享存储器104的控制单元201对值的示例性向量执行累加到存储器功能(404)。在每个处理器的DMA操作将在每个处理器核105处生成的值的向量移动到共享存储器104。可经由***100的可编程DMA数据的暂时存储器104的地址位置处累加值向量的技术可经由***100的可编程DMA数据传送功能来执行。例如,可操作以将数据移动到共享存储器104的存储器单元中的任何DMA操作可使用本文中所描述的累加技术。以此方式,图2和图3的示例中的核0和核1中的每一者均可将向量值累加到共享存储器104的某一共享存储器单元的相同地址位置中。在一个示例中,累加涉及由核0提供的第一向量的值与由核1提供的第二向量的对应值的成对累加。
在一些实现方式中,***100被配置为在共享存储器104的加载/存储使用模式中提供大向量“存储累加”,而不是共享存储器的DMA模式的使用。例如,多个处理器核之间的共享加载/存储存储器层可以用于实现“存储累加”功能,这无需对处理器核之间的一些(或全部)同步。在一些实现方式中,用于实现存储累加功能的多个处理器核之间的共享加载/存储存储器层至少包括上面参考图2描述的数据路径212、232。
共享存储器104和控制单元201使用运算符320对各个值向量执行累加运算(406)。例如,控制单元201跨对不同输入集执行的矩阵乘法来实现累加缩减步骤,这些输入集通过神经网络的层来处理以生成该层的输出。在一些实现方式中,值的向量可以是作为上述矩阵乘法的结果而生成的累加值的相应向量。
控制单元201被配置为屏蔽一个或多个向量元素以启用或禁用某些向量元素中的累加,执行控制以管理不同向量的累加,以及跟踪未完成的累加运算(408)。
关于掩蔽元件,***100可包括比如,计算服务器或相关联硬件电路等机器,其各自包括16B(16位)宽向量单元(例如,向量处理器)。该向量单元可被配置为对16位宽的数据元素进行运算,但是由硬件电路(或服务器)的资源生成的值的向量可以仅是9B宽的向量。在一些实现方式中,***100对一个或多个9元素宽向量进行运算,该向量中的每一者包括九个数据值,该数据值各自是16位。在这种情况下,控制单元201可以识别要在共享存储器104的共享存储器位置中累加的值的向量的数据结构。基于该数据结构,控制单元201可以确定要在共享位置中累加的值是相对于向量单元的16B宽向量配置的9B宽向量。
控制单元201可以执行掩码功能430,该掩码功能430使得运算符320在执行累加或简化时仅将算术运算应用于例如,向量中的前九个字段。例如,可以基于处理器核302-1的向量处理单元304的配置,将来自处理器核302-1的对共享存储器104的将向量累加到共享存储器单元445中的请求呈现为16B宽的向量。控制单元201被配置为确定正被累加的值由16B宽向量的后半部分或由16B宽向量的前九个场表示的9B宽向量表示。因此,***100可操作以识别和选择或以其他方式控制向量中的哪些特定元素将累加到共享存储器单元445中。
关于累加控制,控制单元201被配置为执行读-修改-写控制435(“控制435”)以控制和管理共享存储器***中的不同值向量的累加。控制435提供了对低效替代方法的性能和能量改进,这些低效替代方法需要在第一核处读取数据,在相对于第一核远程的计算单元处对读取值执行数学运算,然后对第一核进行存储/写回。
关于跟踪未完成的运算,控制单元201被配置为执行运算***440以跟踪未完成的请求和当前(或排队的)运算,以用于在共享存储器***中累加不同的值向量。例如,控制单元201使用运算***440来跟踪请求将值向量写入到共享存储器(比如,共享存储器单元445)的存储器位置的每一写入操作。在一些实现方式中,控制单元201基于伴随来自处理器核的写入请求的累加标志330、335来跟踪运算。累加标志330、335指示值的向量作为初始值被写入,或者与现有值一起被累加在共享存储器104的特定存储器位置处。
控制单元201向运算符320发送控制信号,以使运算符320执行存储在特定存储器地址位置处的当前值与写入到该共享存储器位置的值的向量之间的累加运算。在一些实现方式中,来自处理器核的将值向量写入共享存储器单元445的请求需要至少两个时钟周期来处理。因为处理写请求可能需要至少两个时钟周期,所以如果控制单元201在另一向量正被写在同一共享存储器位置时试图读取共享存储器位置处的值,则可能发生读/写危险。在这种情况下,正被读取的值不是最近的值,因为在执行读取该值之前没有完全处理写入操作。
控制单元201使用运算***440来确定在最后几个时钟周期中哪些请求被发送到共享存储器104,并确定存储在特定存储器位置的值是陈旧的还是新的。控制单元201可以基于最后的写请求的时间戳或基于处理最后的写请求所需的时间(例如,两个或多个时钟周期)来确定该值是陈旧的还是新的。例如,时间戳可以指示自从在共享存储器104处发起或处理了最后的请求以来已经经过了多于两个时钟周期。如果该值被确定为新的,则控制单元201将读取该值。如果该值被确定为陈旧的,则控制单元201将停止读取该值,直到已经经过了所需数量的时钟周期以指示该值再次是新的以便读取或进行累加。
***100被配置为接收值(例如,向量)并将其累加到共享存储器位置445中的现有值中,而不丢失存储在共享存储器位置(410)中的先前累加。例如,***100被配置为实现累加运算而不需要额外的软件锁定来减轻可覆写先前存储在比如,共享存储器单元445等存储器位置处的向量累加的竞争条件。***100实现累加运算,而不需要在各个处理器核处执行局部预累加运算,并且不需要处理器核之间的任何预同步。例如,可执行局部预累加运算以累加在给定处理器核处局部计算的部分和的相应集合。
共享存储器104被配置为本地支持该功能,其表示该技术的向量简化特征的原子方面。例如,***100中的多个核(例如,10个核)都可以生成不同的值向量,并且每个核可以提交请求以在共享存储器位置处累加它们各自的向量。在一些实现方式中,该请求包括累加标志330、335和相应的核ID(例如,核0、核1、核N等),以及要累加到存储器位置中的值。在一些实现方式中,可以在***100的至少两个处理器核之间分割大矩阵乘法作业,并且该累加/向量简化技术用于使从矩阵乘法生成的部分和或点积的累加流线化。
在一些实现方式中,在训练神经网络模型期间使用用于在共享存储器单元处累加值向量的这些技术。例如,这些技术可被用于实现用于梯度累加的全减操作,该全减操作减小作为训练步骤的一部分跨处理器核的分布式***计算的梯度。具体地,基于所公开的累加缩减技术,用于训练神经网络模型的该梯度累加可以在***100处作为存储器***或共享存储器104的函数而固有地实现。
图5图示了张量或多维矩阵500的示例,其包括输入张量504、权重张量506的变化和输出张量508。在图5中,每个张量500包括对应于在神经网络的给定层执行的计算的数据值的元素。该计算可包括在一个或多个时钟循环上将输入/激活张量504与参数/权重张量506相乘以产生输出或输出值。一组输出中的每个输出值对应于输出张量508的相应元素。将激活张量504与权重张量506相乘包括将来自张量504的元素的激活与来自张量506的元素的权重相乘以产生部分和。
在一些实现方式中,***100的处理器核对与以下相对应的向量进行运算:i)在某一多维张量中的离散元素;ii)值的向量,该值的向量包括沿着某一多维张量的相同或不同维度的多个离散元素;或iii)各自的组合。在一些多维张量中,离散元素或多个离散元素中的每一者可以根据张量的维度使用X、Y坐标(2D)或使用X、Y、Z坐标(3D)来表示。
***100可以计算多个部分和,这些多个部分和对应于通过将批量输入乘以相应的权重值而生成的乘积。如上所述,***100可以在许多时钟周期上执行乘积(例如,部分和)的累加。例如,可以基于本文档中描述的技术在共享存储器104中执行产品的累加。在一些实现方式中,输入权重乘法可以被写为每个权重元素与输入体积的离散输入相乘的乘积之和,该输入体积诸如输入张量504的行或切片。该行或切片可以表示给定的维度,比如,输入张量504的第一维度510或输入张量504的不同的第二维度515。
在一些实现方式中,可以使用一组示例计算来计算卷积神经网络层的输出。CNN层的计算可以包括在3D输入张量504和至少一个3D滤波器(权重张量506)之间执行2D空间卷积。例如,在3D输入张量504上卷积一个3D滤波器506可以产生2D空间平面520或525。该计算可以包括计算输入体积的特定尺寸的点积之和。
例如,空间平面520可以包括从沿维度510的输入计算的乘积之和的输出值,而空间平面525可以包括从沿维度515的输入计算的乘积之和的输出值。使用在本文件中描述的累加减少步骤,可以在共享存储器104中(例如,在共享存储器单元445处)执行用于生成空间平面520和525中的每一者中的输出值的乘积之和的计算。
图6是图示了用于使用具有与共享存储器通信的处理器核的硬件电路的共享便笺式存储器来执行向量归约的示例性过程600的流程图。在一些实现方式中,过程600是用于使用图1的共享存储器来加速神经网络计算的技术的一部分。
可以使用上述***100来实现或执行过程600。过程600的描述可以参考***100的上述计算资源。可以由可由本文档中描述的设备和资源的一个或多个处理器执行的编程固件或软件指令来启用过程600的步骤或动作。在一些实现方式中,过程600的步骤对应于使用被配置为实现神经网络的硬件电路来执行计算以生成用于神经网络层的输出的方法。
现在参考过程600,在***100处生成值的向量(602)。例如,基于在处理器核处执行的计算,为包括在***100的一个或多个硬件电路处的每个处理器核生成相应的值向量。
***100的共享存储器接收值的相应向量(604)。例如,共享存储器104使用共享存储器104的直接存储器存取(DMA)数据路径从处理器核的相应资源接收值向量。在一些实现方式中,向量或值向量由单个处理器核(或多个处理器核中的每一者)生成,然后提供给***100的共享存储器,该***100使用值向量执行计算。例如,共享存储器可以从第一处理器核获得向量,并使用所获得的向量和一个或多个其他向量来执行归约运算。可能已经从不同于第一处理器核的处理器核接收或获得该一个或多个其他向量。
在一些其他实现方式中,***100被配置为实现具有累加运算的直接存储运算。例如,***100可以生成累加标志330、335,其用于将一个或多个值向量直接存储在共享存储器104的共享存储器位置中。向量可以来自单个处理器核或来自多个不同的处理器核。例如,处理器核105-1或302-2可以生成表示累加标志的控制信号,并将该控制信号传送到共享存储器104的控制单元201。***100可以被配置为将值向量存储在向量存储器106、108中,然后执行DMA操作以将值向量从向量存储器移动到共享存储器104。
***100对各值向量执行累加运算(606)。更具体地,当各个值向量被写入共享存储器位置时,该共享存储器104执行累加运算。例如,***100使共享存储器104使用耦合到共享存储器104的运算符320对相应的值向量执行累加运算。***100可用于累加相同向量的不同元素(或值)以及对应于不同向量的元素的值。运算符320被配置为基于在运算符单元处编码的算术运算来累加值。在一些实现方式中,算术运算是由交换属性支配的数学运算。算术运算可涉及原子缩减(例如,原子浮点缩减)。
例如,原子缩减被处理为累加或向量简化步骤,其中值的向量被直接累加到共享存储器的比如,共享单元的存储单元中。在一个示例中,***100将从多个不同核生成的多个向量累加在一起作为累加运算的一部分。在另一示例中,***100将已存储在共享存储器104(比如,存储器的共享单元)中的值(例如,向量)与由核产生的值进行累加。在另一示例中,***100累加从多个不同核生成的多个向量,其中一个或多个值已经存储在共享存储器104中。涉及在核处生成的向量和已存储在共享存储器中的值的前述示例也可应用于归约运算以及可使用运算符320来实现的其他类型的算术运算。
在一些其他实现方式中,处理器核302-1、302-2中的每一者提供需要累加的向量,并且这些值被直接累加到存储器位置中,而无需使处理器核302-1、302-2之间的活动同步。类似地,可以将这些值直接累加到存储器位置中,而无需处理器核302-1、302-2中的任一者必须执行预累加乘积(例如,部分和)的步骤,该步骤可以由在处理器核中的任一者处执行的计算来产生。换言之,***100的两个或多个核可以以任意顺序将包括部分和的值的向量累加到存储器104的共享存储器单元的地址位置(例如,中央地址位置)中。***100是可配置的,使得在一些实现方式中,不需要在核处本地发生预累加运算,而在一些其他实现方式中,可以在给定核处累加部分总和的一部分或某些类型的部分总和。
***100基于累加运算生成结果向量(例如,最终结果向量)(608)。例如,***100基于使用一个或多个值向量和存储在共享存储器中的向量执行累加运算来生成最终结果向量。在一些实现方式中,***100生成结果向量,其中结果向量的各个元素是通过将累加运算成对应用于第一向量的每个元素和存储在共享存储器中的向量的每个对应元素而产生的。即使被累加以产生最终结果的各个向量以任意顺序到达共享存储器单元中,结果向量仍然提供正确的累加数学结果。
在一些实现方式中,为了实现这种期望的结果,可以基于使用控制单元201和至少运算符320的控制逻辑325执行的控制435(例如,读-修改-写控制循环)来检测、区分一个或多个DMA操作的优先级并对其排序。例如,控制单元201可以检测输入向量/向量值的集合,包括提供向量的对应核,并且使用运算符320来基于由控制435指定的给定优先级方案对各个累加运算进行串行化。优先级方案可以用于根据需要停止或重排序写入流量,以确保向量值不会相对于陈旧向量值而累加。
结果向量可以是表示神经网络层的一组输出的最终结果向量。例如,神经网络层可以是卷积神经网络层,并且输出可以是响应于跨输入张量504的特定输入量卷积每个核(例如,张量506的参数/权重)而生成的激活值集合。
作为对各个值向量执行累加运算的结果,***100可以生成累加值向量。在一些实现方式中,值的相应向量是对应于点积的部分和。例如,再次参考卷积神经网络层,通过执行点积运算来处理上述输入量的输入,该点积运算使用:i)沿着输入张量504的给定维度(例如,维度510)的每个输入值和ii)卷积层的一组参数。可以在共享存储器104的存储器位置处累加对应的点积或部分和的集合,以响应于将权重张量506的至少一个核与沿着输入体积的给定维度的输入的一部分卷积而生成累加值的集合。
***100可以将激活函数应用于累加值向量中的每个值。例如,神经网络的一层可以(或者可以不)具有表示非线性函数的激活函数,比如,ReLU、Sigmoid或Tanh,其在神经网络中提供非线性。***100响应于将激活函数应用于累加值向量中的每个值而生成结果向量。在一些实现方式中,硬件电路101是被配置为实现包括多个神经网络层的神经网络的硬件加速器,并且***100基于结果向量生成用于神经网络的层的输出。例如,在神经网络层处理层输入可以涉及该层应用激活函数以生成作为神经网络层的输出的激活值集合。由第一神经网络层生成的激活可以通过神经网络的第二或后续层来处理。
本说明书中描述的主题和功能操作的实施例可以在数字电子电路中、在有形实现的计算机软件或固件中、在计算机硬件中实现,包括本说明书中公开的结构及其结构等效物,或者在它们中的一个或多个的组合中实现。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即,在有形非暂时性程序载体上编码的用于由数据处理装置执行或控制数据处理装置的操作的计算机程序指令的一个或多个模块。
可替代地或另外地,程序指令可以被编码在人工生成的传播信号上,例如,机器生成的电、光或电磁信号,其被生成以编码信息以用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备,或它们中的一个或多个的组合。
术语“计算***”包括用于处理数据的所有种类的装置、设备和机器,包括例如,可编程处理器、计算机、或多个处理器或计算机。该装置可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,该装置还可以包括为所讨论的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理***、操作***或它们中的一个或多个的组合的代码。
计算机程序(其也可以被称为或描述为程序、软件应用、模块、软件模块、脚本或代码)可以以任何形式的编程语言编写,包括编译或解释语言,或者声明性或过程性语言,并且其可以以任何形式部署,包括作为独立程序或者作为模块、组件、子例程或适于在计算环境中使用的其他单元。
计算机程序可以但不必对应于文件***中的文件。程序可以存储在保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本,存储在专用于所讨论的程序的单个文件中,或者存储在多个协同文件中,例如,存储一个或多个模块、子程序或代码部分的文件。计算机程序可以被部署为在一个计算机上执行,或者在位于一个地点或分布在多个地点并通过通信网络互连的多个计算机上执行。
本说明书中描述的过程和逻辑流程可以由一个或多个可编程计算机执行,该可编程计算机执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能。处理和逻辑流程还可以由专用逻辑电路执行,并且装置还可以被实现为专用逻辑电路,例如,FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPGPU(通用图形处理单元)。
例如,适于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的一些元件是用于执行或执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如,磁盘、磁光盘或光盘,或者可操作地耦合到用于存储数据的一个或多个大容量存储设备,以从其接收数据或向其传送数据,或者两者。然而,计算机不需要具有这样的设备。此外,计算机可以嵌入在另一设备中,例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位***(GPS)接收器或便携式存储设备,例如,通用串行总线(USB)闪存驱动器,仅举几个例子。
适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如,半导体存储器设备,例如,EPROM、EEPROM和闪存设备;磁盘,例如,内部硬盘或可移动磁盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。
为了提供与用户的交互,本说明书中描述的主题的实施例可以在具有用于向用户显示信息的显示设备(例如,LCD(液晶显示器)监视器)以及用户可以用来向计算机提供输入的键盘和指示设备(例如,鼠标或轨迹球)的计算机上实现。其他种类的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。另外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从用户的客户端设备上的web浏览器接收到的请求而向该web浏览器发送网页。
本说明书中描述的主题的实施例可以在计算***中实现,该计算***包括后端组件,例如,数据服务器,或者包括中间件组件,例如,应用服务器,或者包括前端组件,例如,具有图形用户界面或Web浏览器的客户端计算机,通过图形用户界面或Web浏览器,用户可以与本说明书中描述的主题的实现进行交互,或者包括一个或多个这样的后端、中间件或前端组件的任何组合。***的组件可通过任何形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”),例如,因特网。
计算***可以包括客户机和服务器。客户机和服务器通常彼此远离,并且通常通过通信网络进行交互。客户机和服务器的关系是由于在各个计算机上运行的并且彼此具有客户机-服务器关系的计算机程序而产生的。
虽然本说明书包括许多具体实现细节,但是这些不应被解释为对任何发明的范围或者可以要求保护的范围的限制,而是作为可以专用于特定发明的特定实施例的特征的描述。在本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以在多个实施例中单独地或以任何合适的子组合来实现。此外,尽管特征可以在上面被描述为在某些组合中起作用并且甚至最初被这样要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从该组合中被去除,并且所要求保护的组合可以针对子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求以所示的特定顺序或按顺序执行这些操作,或者执行所有图示的操作,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种***模块和组件的分离不应被理解为在所有实施例中都需要这种分离,并且应当理解,所描述的程序组件和***通常可以一起集成在单个软件产品中或封装到多个软件产品中。
已经描述了本主题的特定实施例。其他实施例在以下权利要求书的范围内。例如,权利要求中所述的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中所示的过程不一定需要所示的特定顺序或顺序次序来实现期望的结果。在某些实现方式中,多任务和并行处理可能是有利的。

Claims (25)

1.一种使用具有共享存储器和与所述共享存储器通信的多个处理器核的硬件电路执行的方法,其特征在于,所述方法包括:
基于在第一处理器核处执行的计算来生成第一值向量;
由所述共享存储器并且通过使用所述共享存储器的直接存储器访问(DMA)数据路径,从所述第一处理器核接收所述第一值向量;
在所述共享存储器处执行所述第一值向量与存储在所述共享存储器中的向量之间的累加运算,
其中,使用运算符单元来执行所述累加运算,所述运算符单元:
i)被耦合至所述共享存储器,以及
ii)被配置为累加多个向量的值;以及
基于所述累加运算生成结果向量。
2.根据权利要求1所述的方法,其特征在于,存储在所述共享存储器中的所述向量是从第二处理器核接收的,并且所述方法包括:
由所述第一处理器核执行累加到存储器运算,以在所述共享存储器的存储器位置处累加所述第一值向量的相应值;以及
由所述第二处理器核执行累加到存储器运算,以在所述共享存储器的所述存储器位置处累加第二值向量的相应值,其中,所述第二值向量对应于存储在所述共享存储器中的所述向量。
3.根据权利要求2所述的方法,其特征在于,基于所述累加运算生成所述结果向量包括:
在所述第一处理器核不执行对由在所述第一处理器核处执行的计算产生的乘积的预累加的步骤的情况下,生成所述结果向量;以及
在所述第二处理器核不执行对由在所述第二处理器核处执行的计算产生的乘积的预累加的步骤的情况下,生成所述结果向量。
4.根据权利要求1所述的方法,其特征在于,生成所述结果向量包括:
生成累加值向量作为对所述第一值向量执行所述累加运算的结果;
将激活函数应用于所述累加值向量中的每个值;以及
生成所述结果向量作为将所述激活函数应用于所述累加值向量中的每个值的结果。
5.根据权利要求2所述的方法,其特征在于,所述第一处理器核的相应资源是第一矩阵计算单元,并且所述方法还包括:
基于使用所述第一处理器核的所述第一矩阵计算单元执行的矩阵乘法,生成对应于所述第一值向量的第一累加值向量。
6.根据权利要求5所述的方法,其特征在于,所述第二处理器核的相应资源是第二矩阵计算单元,并且所述方法还包括:
基于使用所述第二处理器核的所述第二矩阵计算单元执行的矩阵乘法,生成对应于所述第二值向量的第二累加值向量。
7.根据权利要求1所述的方法,其特征在于:
所述硬件电路是被配置为实现包括多个神经网络层的神经网络的硬件加速器;以及
所述方法包括基于所述结果向量为所述神经网络的层生成输出。
8.根据权利要求2所述的方法,其特征在于,还包括:
基于在所述第一处理器核处执行的计算,生成所述第一值向量;以及
基于在所述第二处理器核处执行的计算,生成所述第二值向量;
其中,在所述第一处理器核处执行的所述计算和在所述第二处理器核处执行的所述计算是由交换属性支配的数学运算的一部分。
9.根据权利要求8所述的方法,其特征在于,所述数学运算是:
浮点乘法运算;
浮点加法运算;
整数加法运算;或
最小-最大运算。
10.根据权利要求8所述的方法,其特征在于,所述数学运算包括浮点加法运算和整数加法运算。
11.根据权利要求2所述的方法,其特征在于,所述第一处理器核和所述第二处理器核是相同的处理器核。
12.根据权利要求1所述的方法,其特征在于,所述共享存储器被配置为用作共享全局存储空间,所述共享全局存储空间包括在所述硬件电路的两个或多个处理器核之间共享的存储体和寄存器。
13.一种***,其特征在于,包括:
处理设备;
具有共享存储器和与所述共享存储器通信的多个处理器核的硬件电路;以及
非暂时性机器可读存储设备,用于存储可由所述处理设备执行以引起操作的执行的指令,所述操作包括:
基于在第一处理器核处执行的计算来生成第一值向量;
由所述共享存储器并且通过使用所述共享存储器的直接存储器访问(DMA)数据路径,从所述第一处理器核接收所述第一值向量;
在所述共享存储器处执行所述第一值向量与存储在所述共享存储器中的向量之间的累加运算,
其中,使用运算符单元来执行所述累加运算,所述运算符单元:
i)被耦合至所述共享存储器,以及
ii)被配置为累加多个向量;以及
基于使用所述第一值向量执行所述累加运算来生成结果向量。
14.根据权利要求13所述的***,其特征在于,存储在所述共享存储器中的所述向量是从第二处理器核接收的,并且所述运算包括:
由所述第一处理器核执行累加到存储器运算,以在所述共享存储器的存储器位置处累加所述第一值向量的相应值;以及
由所述第二处理器核执行累加到存储器运算,以在所述共享存储器的所述存储器位置处累加第二值向量的相应值,其中,所述第二值向量对应于存储在所述共享存储器中的所述向量。
15.根据权利要求14所述的***,其特征在于,基于执行所述累加运算来生成所述结果向量包括:
在所述第一处理器核不执行对由在所述第一处理器核处执行的计算产生的乘积的预累加的步骤的情况下生成所述结果向量;以及
在所述第二处理器核不执行对由在所述第二处理器核处执行的计算产生的乘积的预累加的步骤的情况下,生成所述结果向量。
16.根据权利要求13所述的***,其特征在于,生成所述结果向量包括:
生成累加值向量作为对所述第一值向量执行所述累加运算的结果;
将激活函数应用于累加值向量中的每个值;以及
生成所述结果向量作为将所述激活函数应用于所述累加值向量中的每个值的结果。
17.根据权利要求14所述的***,其特征在于,所述第一处理器核的相应资源是第一矩阵计算单元,并且所述运算还包括:
基于使用所述第一处理器核的所述第一矩阵计算单元执行的矩阵乘法,生成对应于所述第一值向量的第一累加值向量。
18.根据权利要求17所述的***,其特征在于,所述第二处理器核的相应资源是第二矩阵计算单元,并且所述运算还包括:
基于使用所述第二处理器核的所述第二矩阵计算单元执行的矩阵乘法,生成对应于所述第二值向量的第二累加值向量。
19.根据权利要求13所述的***,其特征在于:
所述硬件电路是被配置为实现包括多个神经网络层的神经网络的硬件加速器;以及
所述运算包括基于所述结果向量生成所述神经网络的层的输出。
20.根据权利要求14所述的***,其特征在于,还包括:
基于在所述第一处理器核处执行的计算,生成所述第一值向量;以及
基于在所述第二处理器核处执行的计算,生成所述第二值向量;
其中,在所述第一处理器核处执行的所述计算和在所述第二处理器核处执行的所述计算是由交换属性支配的数学运算的一部分。
21.根据权利要求20所述的***,其特征在于,所述数学运算是:
浮点乘法运算;
浮点加法运算;
整数加法运算;或
最小-最大运算。
22.根据权利要求20所述的***,其特征在于,所述数学运算包括浮点加法运算和整数加法运算。
23.根据权利要求14所述的***,其特征在于,所述第一处理器核和所述第二处理器核是相同的处理器核。
24.根据权利要求13所述的***,其特征在于,所述共享存储器被配置为用作共享全局存储空间,所述共享全局存储空间包括在所述硬件电路的两个或多个处理器核之间共享的存储体和寄存器。
25.一种非暂时性机器可读存储设备,其特征在于,用于存储可由所述处理设备执行以引起操作的执行的指令,所述操作包括:
基于在硬件电路的第一处理器核处执行的计算来生成第一值向量;
由所述硬件电路的共享存储器并使用所述共享存储器的直接存储器存取(DMA)数据路径,从所述第一处理器核接收所述第一值向量;
在所述共享存储器处执行所述第一值向量与存储在所述共享存储器中的向量之间的累加运算,
其中,使用运算符单元来执行所述累加运算,所述运算符单元:
i)被耦合至所述共享存储器,以及
ii)被配置为累加多个向量;以及
基于所述累加运算生成结果向量。
CN202080061241.0A 2020-02-26 2020-11-30 使用共享便笺式存储器的向量简化 Active CN115136115B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311334630.8A CN117421047A (zh) 2020-02-26 2020-11-30 使用共享便笺式存储器的向量简化

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202062981957P 2020-02-26 2020-02-26
US62/981,957 2020-02-26
US17/007,569 US11182159B2 (en) 2020-02-26 2020-08-31 Vector reductions using shared scratchpad memory
US17/007,569 2020-08-31
PCT/US2020/062612 WO2021173201A1 (en) 2020-02-26 2020-11-30 Vector reductions using shared scratchpad memory

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202311334630.8A Division CN117421047A (zh) 2020-02-26 2020-11-30 使用共享便笺式存储器的向量简化

Publications (2)

Publication Number Publication Date
CN115136115A true CN115136115A (zh) 2022-09-30
CN115136115B CN115136115B (zh) 2023-11-10

Family

ID=77366021

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202311334630.8A Pending CN117421047A (zh) 2020-02-26 2020-11-30 使用共享便笺式存储器的向量简化
CN202080061241.0A Active CN115136115B (zh) 2020-02-26 2020-11-30 使用共享便笺式存储器的向量简化

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202311334630.8A Pending CN117421047A (zh) 2020-02-26 2020-11-30 使用共享便笺式存储器的向量简化

Country Status (7)

Country Link
US (2) US11182159B2 (zh)
EP (1) EP4004826A1 (zh)
JP (1) JP7495480B2 (zh)
KR (1) KR20220038148A (zh)
CN (2) CN117421047A (zh)
TW (1) TW202132976A (zh)
WO (1) WO2021173201A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116821019A (zh) * 2023-08-30 2023-09-29 腾讯科技(深圳)有限公司 数据处理方法、计算机设备及芯片

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111090464B (zh) * 2018-10-23 2023-09-22 华为技术有限公司 一种数据流处理方法及相关设备
KR102620843B1 (ko) * 2021-11-22 2024-01-03 리벨리온 주식회사 재구성가능 온 칩 메모리 뱅크, 재구성가능 온 칩 메모리, 이를 탑재한 시스템 온 칩 및 재구성가능 온 칩 메모리 사용 방법
US20220229723A1 (en) * 2021-12-23 2022-07-21 Intel Corporation Low overhead error correction code
US11630605B1 (en) * 2022-08-10 2023-04-18 Recogni Inc. Methods and systems for processing read-modify-write requests
CN116306855B (zh) * 2023-05-17 2023-09-01 之江实验室 一种基于存算一体***的数据处理方法及装置
CN117787366B (zh) * 2024-02-28 2024-05-10 苏州元脑智能科技有限公司 硬件加速器及其调度方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699631A (zh) * 2015-03-26 2015-06-10 中国人民解放军国防科学技术大学 Gpdsp中多层次协同与共享的存储装置和访存方法
CN107003988A (zh) * 2014-12-19 2017-08-01 英特尔公司 用于执行卷积运算的存储设备和方法
CN108268422A (zh) * 2016-12-31 2018-07-10 英特尔公司 用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构
CN108874744A (zh) * 2017-05-08 2018-11-23 辉达公司 矩阵乘积累加运算的广义加速
US20190179635A1 (en) * 2017-12-11 2019-06-13 Futurewei Technologies, Inc. Method and apparatus for tensor and convolution operations

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5990904A (en) 1995-08-04 1999-11-23 Microsoft Corporation Method and system for merging pixel fragments in a graphics rendering system
US7301541B2 (en) * 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US6005583A (en) 1997-04-30 1999-12-21 Hewlett-Packard Company Precise gradient calculation system and method for a texture mapping system of a computer graphics system
TWI520501B (zh) * 2012-06-07 2016-02-01 威盛電子股份有限公司 記憶體控制器
US8941676B2 (en) 2012-10-26 2015-01-27 Nvidia Corporation On-chip anti-alias resolve in a cache tiling architecture
US10019229B2 (en) 2014-07-02 2018-07-10 Via Alliance Semiconductor Co., Ltd Calculation control indicator cache
US9836277B2 (en) * 2014-10-01 2017-12-05 Samsung Electronics Co., Ltd. In-memory popcount support for real time analytics
US10032493B2 (en) * 2015-01-07 2018-07-24 Micron Technology, Inc. Longest element length determination in memory
US10353861B2 (en) 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Mechanism for communication between architectural program running on processor and non-architectural program running on execution unit of the processor regarding shared resource
US10445271B2 (en) 2016-01-04 2019-10-15 Intel Corporation Multi-core communication acceleration using hardware queue device
FR3048526B1 (fr) 2016-03-07 2023-01-06 Kalray Instruction atomique de portee limitee a un niveau de cache intermediaire
NL2016542B1 (en) 2016-04-04 2017-10-10 Fugro N V Spatial data analysis.
US10489877B2 (en) 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10460416B1 (en) 2017-10-17 2019-10-29 Xilinx, Inc. Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US10354733B1 (en) 2017-10-17 2019-07-16 Xilinx, Inc. Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US11620490B2 (en) 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
US11138499B2 (en) * 2018-09-28 2021-10-05 Intel Corporation Applications of back-end-of-line (BEOL) capacitors in compute-in-memory (CIM) circuits
US11270197B2 (en) * 2019-03-12 2022-03-08 Nvidia Corp. Efficient neural network accelerator dataflows

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107003988A (zh) * 2014-12-19 2017-08-01 英特尔公司 用于执行卷积运算的存储设备和方法
CN104699631A (zh) * 2015-03-26 2015-06-10 中国人民解放军国防科学技术大学 Gpdsp中多层次协同与共享的存储装置和访存方法
CN108268422A (zh) * 2016-12-31 2018-07-10 英特尔公司 用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构
CN108874744A (zh) * 2017-05-08 2018-11-23 辉达公司 矩阵乘积累加运算的广义加速
US20190179635A1 (en) * 2017-12-11 2019-06-13 Futurewei Technologies, Inc. Method and apparatus for tensor and convolution operations

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116821019A (zh) * 2023-08-30 2023-09-29 腾讯科技(深圳)有限公司 数据处理方法、计算机设备及芯片
CN116821019B (zh) * 2023-08-30 2023-11-14 腾讯科技(深圳)有限公司 数据处理方法、计算机设备及芯片

Also Published As

Publication number Publication date
US20220156071A1 (en) 2022-05-19
KR20220038148A (ko) 2022-03-25
CN115136115B (zh) 2023-11-10
US20210263739A1 (en) 2021-08-26
JP2023506343A (ja) 2023-02-16
TW202132976A (zh) 2021-09-01
WO2021173201A1 (en) 2021-09-02
JP7495480B2 (ja) 2024-06-04
CN117421047A (zh) 2024-01-19
EP4004826A1 (en) 2022-06-01
US11934826B2 (en) 2024-03-19
US11182159B2 (en) 2021-11-23

Similar Documents

Publication Publication Date Title
CN115136115B (zh) 使用共享便笺式存储器的向量简化
Mittal et al. A survey of techniques for optimizing deep learning on GPUs
JP6921951B2 (ja) ニューラルネットワーク命令セットアーキテクチャ
KR101959376B1 (ko) 멀티 코어 최적화된 순환 신경망을 위한 시스템 및 방법
US11500959B2 (en) Multiple output fusion for operations performed in a multi-dimensional array of processing units
JP2020532780A (ja) チップ上に常駐するパラメータを用いたニューラルネットワークアクセラレータ
JP2019537793A (ja) ニューラルネットワーク計算タイル
CN108229670A (zh) 基于fpga的深度神经网络加速平台
KR102572757B1 (ko) 집약성을 개선하기 위한 머신 학습 모델들의 수정
Mittal A survey of accelerator architectures for 3D convolution neural networks
Lee et al. ComPEND: Computation Pruning through Early Negative Detection for ReLU in a deep neural network accelerator
US20240160909A1 (en) Shared scratchpad memory with parallel load-store
US20210326683A1 (en) Hardware circuit for accelerating neural network computations
Zou et al. Massively simulating adiabatic bifurcations with FPGA to solve combinatorial optimization
Bayat et al. An experimental study of GPU acceleration for reservoir simulation
Argentini et al. Efficiently using memory in lattice Boltzmann simulations
Soukov et al. Portable solution for modeling compressible flows on all existing hybrid supercomputers
US11249724B1 (en) Processing-memory architectures performing atomic read-modify-write operations in deep learning systems
Sarma Optimizing Deep Learning for Memory and Compute: A joint Algorithm-Architecture Exploration
Franzon et al. Hardware Acceleration of Sparse Cognitive Algorithms
Fu et al. Multi-level Storage Optimization for Intermediate Data in AI Model Training
CN113344178A (zh) 一种可实现多种神经网络中卷积计算的方法及硬件结构
Rosén Parallelization of stochastic estimation algorithms on multicore computational platforms

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40081743

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant