CN111771215A - 大规模并行软件定义硬件***中的静态块调度 - Google Patents

大规模并行软件定义硬件***中的静态块调度 Download PDF

Info

Publication number
CN111771215A
CN111771215A CN201880076027.5A CN201880076027A CN111771215A CN 111771215 A CN111771215 A CN 111771215A CN 201880076027 A CN201880076027 A CN 201880076027A CN 111771215 A CN111771215 A CN 111771215A
Authority
CN
China
Prior art keywords
neural network
hardware
systolic array
operations
source code
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
CN201880076027.5A
Other languages
English (en)
Other versions
CN111771215B (zh
Inventor
吴永俊
J·蔡达
E·德拉耶
A·西拉萨奥
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.)
Xilinx Inc
Original Assignee
Xilinx Inc
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 Xilinx Inc filed Critical Xilinx Inc
Publication of CN111771215A publication Critical patent/CN111771215A/zh
Application granted granted Critical
Publication of CN111771215B publication Critical patent/CN111771215B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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/08Learning methods
    • G06N3/086Learning methods using evolutionary algorithms, e.g. genetic algorithms or genetic programming
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W72/00Local resource management
    • H04W72/50Allocation or scheduling criteria for wireless resources
    • H04W72/54Allocation or scheduling criteria for wireless resources based on quality criteria
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Physiology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

本文中的实施例描述了用于静态调度在大规模并行硬件***(205)中实现的神经网络(100)的技术。神经网络(100)可以使用在本文中称为较高级别、中间级别和较低级别的三个不同的调度级别来调度。在一个实施例中,较高级别包括建立在硬件***(205)中同时操作的功能的顺序的神经网络(100)中的各层的硬件或软件模型(400)。在中间级别,在较高级别中定义的功能中的相同过程被连接以形成脉动阵列(280)或网格,并且平衡的数据流通道被用于使等待时间最小化。在较低级别,编译器(265)可以将由脉动阵列中的处理元件执行的操作分配给硬件***(205)的不同部分,以为神经网络(100)提供静态调度。

Description

大规模并行软件定义硬件***中的静态块调度
技术领域
本公开的示例总体上涉及调度大规模并行可编程硬件***。
背景技术
机器学习是使计算***无需明确编程即可采取行动的科学。经典机器学习包括各种聚类和分类技术,包括K均值聚类、线性和逻辑回归、随机梯度下降、关联规则学习等。深度学习是机器学习中一个较新的领域。深度学习是一类机器学习算法,它使用多层非线性处理单元进行特征提取和转换。深度学习算法可以是无监督的(例如,模式分析)或有监督的(例如,分类)。深度学习算法可以使用人工神经网络(ANN)(本文中称为“神经网络”)的层来实现。
通常,神经网络是在图中连接的节点(即,“神经元”)的集合。神经网络中的节点计算加权输入的总和,并且向总和添加可选偏差。节点的输出是最终总和的函数(称为“激活函数”)。示例激活函数包括S形函数、双曲正切(tanh)函数、整流线性单位(ReLU)函数和恒等函数。神经网络模型通常被组织为定义特定拓扑以及对应的权重和偏差的节点的层。权重和偏差称为网络参数。
通常,神经网络包括输入层和输出层,并且可以可选地在输入层与输出层之间包括一个或多个隐藏层。深度学习应用中使用的神经网络通常包括很多隐藏层,这引起了术语“深度神经网络(DNN)”的出现。神经网络的各层可以紧密连接(例如,一层中的每个节点完全连接到上一层中的所有节点),也可以稀疏连接(例如,一层中的每个节点仅连接到上一层中的节点中的一部分节点)。卷积神经网络(CNN)是一种DNN,其包括一个或多个稀疏连接的层,称为卷积层。CNN非常适合于处理图像或视频数据。其他类型的DNN包括递归神经网络(RNN),其非常适合处理语音和文本数据。
现代的现场可编程门阵列(FPGA)提供了可以用于创建大规模并行硬件***的数百万个查找表和数千个可配置逻辑块(CLB)、数字信号处理(DSP)和随机存取存储块(BRAM)。现有的FPGA***是使用通过高级综合(HLS)工具进行调度的硬件描述语言(HDL)或程序代码(例如,C或C++)来配置的。
在HDL方法中,所有进程都是使用非常复杂的状态机和数据管理逻辑手动调度的。但是,对于大规模FPGA***,该进程非常耗时。在单线程软件功能中,调度数千个进程的复杂性呈指数增长,并且在某些情况下,调度无法收敛。
发明内容
描述了用于调度神经网络的技术。一个示例是一种方法,该方法包括接收定义在执行神经网络中的至少一个层时执行的多个功能的顺序次序的模型,其中神经网络包括多个层。该方法包括:接收用于在神经网络的至少一个层中执行相同过程的脉动阵列,以及将与模型和脉动阵列相对应的源代码编译到硬件级设计中,该硬件级设计当在硬件***中执行神经网络时提供静态调度。
另一示例是存储指令的非暂态计算机可读存储介质,该指令当在一个或多个处理设备上执行时执行用于调度神经网络的操作。该操作包括接收定义在执行神经网络中的至少一个层时执行的多个功能的顺序次序的模型,其中神经网络包括多个层。该操作包括:接收用于在神经网络的至少一个层中执行相同过程的脉动阵列,以及将与模型和脉动阵列相对应的源代码编译到硬件级设计中,该硬件级设计当在硬件***中执行神经网络时提供静态调度。
另一示例是包括处理器和存储器的计算***。存储器包括编译器,该编译器在由处理器执行时执行操作。该操作包括接收定义在执行神经网络中的至少一个层时执行的多个功能的顺序次序的模型,其中神经网络包括多个层。该操作包括:接收用于在神经网络的至少一个层中执行相同过程的脉动阵列,以及将与模型和脉动阵列相对应的源代码编译到硬件级设计中,该硬件级设计当在硬件***中执行神经网络时提供静态调度。
附图说明
为了可以详细理解上述特征的方式,可以通过参考示例实现来进行上面简要概述的更具体的描述,其中一些示例在附图中示出。但是,应当注意,附图仅示出了典型的示例实现,因此不应当被视为对其范围的限制。
图1示出了根据示例的多层神经网络。
图2是根据示例的用于在FPGA中建立神经网络流水线的***。
图3是根据示例的用于调度神经网络流水线的流程图。
图4示出了根据示例的神经网络中的各层的硬件模型。
图5示出了根据示例的用于在神经网络中执行卷积或完全连接的层的脉动阵列。
图6示出了根据示例的数字信号处理块中的流水线处理元件。
图7是描绘根据示例的用于实现神经网络的***的框图。
图8是描绘根据示例的计算***的框图。
图9是描绘根据示例的加速电路的框图。
图10是描绘根据示例的可编程集成电路(IC)的框图。
图11示出了根据示例的可编程IC的FPGA实现。
为了便于理解,在可能的情况下使用相同的附图标记来表示图中共有的相同元素。可以想到,一个示例的元素可以有益地并入其他示例中。
具体实施方式
在下文中参考附图描述各种特征。应当注意,附图可以按比例绘制或可以不按比例绘制,并且在整个附图中,相似结构或功能的元素由相似的附图标记表示。应当注意,附图仅旨在促进对特征的描述。它们不旨在作为说明书的详尽描述或对权利要求的范围的限制。另外,所示出的示例不必具有所示出的所有方面或优点。结合特定示例描述的方面或优点不必限于该示例,并且可以在任何其他示例中实践,即使未如此示出或未明确描述。
本文中的实施例描述了用于静态调度在大规模并行硬件***中实现的神经网络的技术。神经网络可以使用在本文中称为较高级别、中间级别和较低级别的三个不同的级别来调度。在一个实施例中,较高级别包括建立在硬件***中同时操作的功能(例如,卷积、最大池化(pooling)/最大池化(pool)、整流线性单元(ReLU)和缩放功能)的顺序次序的神经网络中的各层的硬件或软件模型。该模型可以包括互连该层中不同功能的数据通道。
在中间级别中,在较高级别中定义的各层中的相同过程被连接以形成脉动阵列或处理元件网格,并且平衡的数据流通道被用于使等待时间最小化。在一个实施例中,脉动阵列使用源代码(例如,C或C++)来设计,在将源代码转换成寄存器传输级(RTL)代码时,该源代码由HLS编译器并行化,该RTL代码然后被用于配置可编程硬件,诸如FPGA。在较低级别,HLS编译器可以将由脉动阵列中的处理元件执行的操作分配给可编程硬件的不同部分。例如,如果处理元件使用不同的数字信号处理(DSP)块来实现,则由处理元件执行的不同操作(例如,读取、写入、乘法、加法等)可以并行地执行。通过将神经网络的调度划分为不同的级别,编译器可以生成并行化的流水线,使得***中的硬件元件可以同时操作。
图1示出了根据示例的多层神经网络100。如本文中使用的,神经网络100是在机器学习中使用的计算模块,并且基于被称为人工神经元的连接单元的大量集合,其中神经元之间的连接携带不同强度的激活信号。神经网络100可以从示例中训练,而不是被明确编程。在一个实施例中,神经网络100中的神经元以层(例如,层1、层2、层3等)连接,在层中,数据从第一层(例如,层1)传播到最后一层(例如,层7)。尽管在图1中示出了七个层,但是神经网络100可以包括数百或数千个不同的层。
神经网络可以执行多个任务,诸如计算机视觉、特征检测、语音识别等。在图1中,神经网络100检测数字图像中的特征,诸如对图像中的对象进行分类,执行面部识别,标识文本,等等。为此,图像数据105被馈送到神经网络的第一层中,第一层对图像数据105执行对应功能(在该示例中为10×10卷积)。然后,将该功能的结果传递到下一层(例如,层2),该层在将处理后的图像数据传递到下一级别之前执行其功能,以此类推。在被各层处理之后,该数据在图像分类器110处被接收,该图像分类器110可以检测图像数据中的特征。
各层按顺序次序定义,使得层1在层2之前执行,层2在层3之前执行,以此类推。因此,在较低层与较高层之间存在数据依赖性。尽管层2等待从层1接收数据,但是在一个实施例中,神经网络100可以被并行化,使得每个层可以同时操作。也就是说,在每个时钟周期内,各层可以接收新数据并且输出处理后的数据。例如,在每个时钟周期内,可以将新图像数据105提供给层1。为简单起见,假定在每个时钟周期内,新图像的一部分被提供给层1,并且每个层可以输出在上一时钟周期接收的图像数据的处理后的图像数据。如果各层以硬件实现以形成并行化流水线,则在七个时钟周期之后,每个层将同时操作以处理图像数据的一部分。“图像数据的一部分”可以是整个图像、一个图像的一组像素、一批图像、或每个层可以同时处理的任何数量的数据。因此,与一次一个地操作各层相比,在硬件中实现各层以形成并行流水线可以极大地提高神经网络的吞吐量。随着神经网络100中的层数的增加,在大规模并行硬件***中调度层的时序益处进一步提高。
图2是根据示例的用于在FPGA 205中建立神经网络流水线215的***200。除了FPGA 205,***200还包括计算设备250,该计算设备250在FPGA 205中配置可编程逻辑210。例如,计算设备250可以是膝上型计算机、台式计算机或服务器。计算设备250包括处理器255,该处理器255表示任何数目的处理元件,每个处理器元件可以包含任何数目的处理核心。设备250还包括可以具有易失性或非易失性存储器元件的存储器260。
存储器260包括编译器265,在一个实施例中,编译器265是将诸如C或C++等源代码转换成RTL代码的软件应用(例如,HLS编译器),RTL代码将可编程逻辑210配置为建立神经网络流水线215。当编译源代码时,编译器265使用调度器270来生成RTL,该RTL静态地调度神经网络流水线215,使得形成流水线215的不同硬件元件(例如,DSP块220或CLB 222)可以同时操作。在一个实施例中,静态调度是固定的,使得硬件元件执行的顺序在运行期间不会改变。在一个实施例中,调度器270接收或生成较高级别、中间级别和较低级别,编译器265使用该较高级别、中间级别和较低级别来生成用于建立神经网络流水线215的静态地调度的RTL代码。在一个实施例中,该调度的较高级别是一种层设计,该层设计包括神经网络中的一层(或多层)的硬件或软件模型。该层设计可以通过可以是层中可以并行操作的多个功能(诸如卷积、最大池、ReLU和缩放功能)的顺序次序的层指令275的参数化来定义。
在一个实施例中,调度的中间级别是脉动阵列280,该脉动阵列280包括使用数据通道互连的多个处理元件(PE)。在一个实施例中,每个PE包括FPGA中的一个或多个DSP块220或一个或多个CLB 222(或两者的组合)。DSP块220是专用逻辑块,其可以以比CLB 222更快的速率执行DSP并且可以降低***功耗。此外,添加DSP块220可以减小FPGA的整体尺寸,因为使用CLB 222来实现相同的DSP性能将导致更大的集成电路。DSP模块220包括加法器、预加法器、减法器、累加器、求和单元等。
脉动阵列280定义了形成PE的DSP块220或CLB 222如何互连以便执行在该层中定义的功能。例如,为了执行卷积,脉动阵列280可以包括多个互连的PE,这些PE每个又包括由FPGA 205中的可编程DSP块220形成的多个乘法累加器(MAC)块。在另一实施例中,在实现最大池化或ReLU功能时,PE可以包括执行对应操作的CLB 222。类似于在层指令275的参数化中定义的功能,编译器265可以生成与脉动阵列280相对应的RTL代码,使得PE可以同时操作。
在一个实施例中,调度的较低级别是PE设计285,该PE设计285定义了由脉动阵列280中的PE执行的操作。继续上面的示例,如果PE包括MAC块,则PE设计285可以列出由这些块执行的读取、写入、乘法和加法操作。当然,MAC块仅仅是实现PE的一个示例,并且其他操作可以由作为最大池化单元或ReLU的一部分的PE执行。
FPGA 205包括可编程逻辑210和存储器225。可编程逻辑210可以包括可编程逻辑块的阵列和使得逻辑块能够通信地耦合的可重配置互连的层级。可编程逻辑块的一个示例包括DSP块220,该DSP块220当在神经网络流水线215中执行卷积或完全连接层时很有用。可编程逻辑块还可以包括一个或多个CLB 222,该CLB 222可以在执行缩放或最大池化功能时使用。在一个实施例中,神经网络流水线215包括用于将所接收的图像数据转换成2D矩阵(称为im2col)的可编程逻辑210,使得矩阵乘法可以用于执行卷积。
尽管示出了FPGA 205,但是可以执行本文中描述的调度技术以在被具体地设计为实现神经网络的其他类型的非可编程硬件***(诸如图形处理器单元(GPU)或专用集成电路(ASIC))上实现神经网络流水线215。也就是说,当在这些***上设计或实现神经网络时,可以使用层指令275的参数化、脉动阵列280和PE设计285,使得硬件元件被静态地调度,使得硬件元件可以同时操作。
图3是根据示例的用于调度神经网络流水线的方法300的流程图。在框305处,调度器接收建立在FPGA中同时操作的多个功能的顺序次序的神经网络中的各层的模型。在一个实施例中,模型是如图2所示的层设计,其包括层指令275的参数化。此外,模型可以是表示在大规模并行硬件***(例如,FPGA)中实现的完整神经网络的软件或硬件模型。
在一个实施例中,由用户将模型提供给调度器。例如,用户可以根据用户希望在FPGA上实现的神经网络的类型来设计模型。例如,不同的神经网络可以具有不同的层以及这些层内的功能。如上所述,神经网络可以被设计为执行不同的任务,诸如数字图像中的特征检测、音频处理或处理文本。神经网络的非限制性示例包括CNN、RNN、长短期记忆(LSTM)神经网络、以及使用特征库学习或有监督/无监督学习的神经网络。而且,相同类型的神经网络的结构可以有很大的不同。例如,某些CNN可以包括数十个层,而其他CNN可以包括数百个层,其中每个层可以被不同地配置,例如,执行3×3卷积的层、执行11×11卷积的层、完全连接(FC)层、池化层等。
在一个实施例中,该模型定义了神经网络中的每个层的较高级别调度。图4示出了根据示例的神经网络中的各层的架构描述400的硬件模型。架构描述400包括层调度器405、卷积单元410、最大池化单元415、多路复用器(mux)420、ReLU 425、mux 430、缩放单元435和mux 440,这些用于对图像执行特征检测,通常称为流水线功能。当执行神经网络的一个或多个层时,架构描述400的模型定义了流水线功能的顺序次序。在一个实施例中,卷积单元410使用矩阵乘法器执行矩阵乘法,并且使用任何数目的权重(或内核)对所接收的图像数据进行加权。在一个实施例中,最大池化单元415放大图像中的特征,使得当稍后在流水线中缩放图像时,特征不会丢失。ReLU 425是一种激活单元或斜坡函数,在一个实施例中,其被定义为f(x)=max(0,x),其中x是来自神经元的输出。缩放单元435可以调节处理后的数据的值以使由于量化而引起的数值误差最小化。
层调度器405确定数据流从哪里开始。例如,对于某些层,可以首先将输入图像数据发送到卷积单元410。在神经网络中的其他层中,图像数据绕过卷积单元410,并且改为由层调度器405发送到最大池化单元415或缩放单元435。此外,数据传播通过架构描述400的方式可以根据层而变化。例如,对于第一层,在由卷积单元410处理图像数据之后,多路复用器420可以将处理后的数据直接转发到ReLU 425,从而绕过最大池化单元415。替代地,在第二层中,由卷积单元410输出的数据首先由最大池化单元415处理,然后mux420将数据传输到ReLU 425。以这种方式,多路复用器420、430和440可以根据例如由层调度器405提供的控制信号来更改图像数据流经架构描述400的方式。
在一个实施例中,架构描述400是示出执行神经网络所需要的完整***的框图。换言之,架构描述400在抽象级别表示FPGA(或其他硬件***)中执行神经网络及其对应层所需要的硬件块。尽管未示出,但是架构描述400可以包括***在不同块之间以允许这些块同时执行的数据流通道。可以适当调节数据流通道的大小,以使整体***等待时间最小化。此外,图4所示的架构描述400可以是软件定义的,这表示用户仅表达一系列标量操作(在此表示为不同的块)并且添加并行化指示。也就是说,用户可以定义执行块的顺序,而无需调度这些块(即,无需定义应当在何时执行块)。在一个实施例中,并行化指示是一种指令指示,其向编译器指定应当调度所定义的块以并行操作。通过将图4所示的硬件模型转换成源代码并且使用并行化指示,编译器可以创建用于执行架构描述400的最优静态调度。在一个实施例中,所得到的静态调度使得图4所示的不同块能够同时执行。
并非将架构描述400表达为硬件模型,而是可以将架构描述400表示为软件模型。表1中提供了用于架构描述400的软件模型的C++实现的示例。
Figure BDA0002506374820000091
Figure BDA0002506374820000101
表1中的源代码是具有“cnnLayers”层数的神经网络的非定时功能代码。此外,代码按定义的顺序排序,但是未明确调度。在该实施例中,HLS DATAFLOW是用于数据流的并行化指示。这种指示允许神经网络设计人员通过实例化并行块而不必调度块来使用RTL概念。在编译为RTL之后,代码中的不同功能(例如,Conv、MaxPool、Relu和Scale)同时操作。尽管未示出,但是该代码可以包括互连不同功能的FIFO(或其他缓冲器)。
根据表1中所示的代码生成的所得到的编译RTL包含针对神经网络的所有层的统计调度状态机。在每个层中,所有模块(或功能)同时运行。图4所示的硬件模型和表1中的软件代码说明了设计人员可以轻松地表达高级软件定义***中的硬件行为。
返回方法300,在框310处,调度器接收用于在神经网络层中执行相同过程的脉动阵列。在一个实施例中,设计人员提供了定义脉动阵列的配置的软件代码,调度器(或编译器)随后将其并行化,使得脉动阵列中的不同操作在硬件中同时执行。
在一个实施例中,脉动阵列是二维阵列,其简化了整体调度并且保持一致的数据流,从而使得在硬件***中的放置和布线更加容易。在一个实施例中,脉动阵列包括多个PE,这些PE互连以便同时执行。例如,每个PE可以是多重累加器(MAC)块。但是,PE可以根据由脉动阵列执行的过程而有所不同。例如,用于执行卷积的脉动阵列可以具有MAC块,而用于执行池化、ReLU或缩放的脉动阵列具有不同的PE。通过将PE布置在多维阵列中,每个PE可以接收指数级的更大的带宽数据路径。此处示出的二维网格提供了带宽与布局和布线难度之间的折衷。
图5示出了根据示例的神经网络中的脉动阵列280。在图5中,脉动阵列280被配置为卷积块。在一个实施例中,图4所示的卷积单元410由图5所示的一个或多个脉动阵列280形成。图5中的其他框(即,最大池化单元415、ReLU 425和缩放单元435)可以使用相同的脉动阵列280或不同的脉动阵列形成。
在图5中,二维脉动阵列280包括互连以形成4×4矩阵的多个PE。在一个实施例中,调度器使用由用户或设计人员提供的软件代码来形成脉动阵列280。在该示例中,脉动阵列280可以从for循环(以及对于HLS编译器的可选的展开指示)中导出,该for循环执行A×B的乘法达N次。然后,调度器生成图5所示的脉动阵列280,该脉动阵列280包括执行由A和B输入形成的矩阵的矩阵乘法。
在该示例中,前四个PE(即,PE 00、01、02和03)从B操作数矩阵接收数据,而最左边的四个PE(即,PE 00、10、20和30)从A操作数矩阵接收数据。在一个实施例中,调度器生成同步信号,该同步信号使PE同步,使得每个单独的PE与其他PE同时执行其功能。在一个实施例中,PE在每个时钟周期内接收输入,并且在每个时钟周期内提供输出。PE可能需要一个时钟周期来处理所接收的数据或者使用多个时钟周期来处理所接收的数据。在任何情况下,都可以对PE进行调度,使得在每个时钟周期内对所接收的数据执行某些操作。
在一个实施例中,阵列280中的PE使用缓冲器来交换数据。例如,FIFO可以设置在PE如箭头所示交换数据的每个位置。此外,FIFO可以是数据流通道的一部分,这些通道被平衡以使等待时间最小化。在一个实施例中,PE被表示为软件定义的流类别。
如图5所示,调度器可以接收定义脉动阵列(例如,上述的“for循环”)的软件代码,调度器可以将该脉动阵列转换成并行的脉动阵列280。由用户提供的软件定义可以包括如下表达式:该表达式包括单个PE或核心,调度器将该单个PE或核心解压缩到图5所示的脉动阵列280或PE网格中。
返回图4,在框315处,编译器将高级代码编译成RTL代码,该RTL代码为神经网络的流水线提供静态调度。在一个实施例中,编译器使用与在框305处接收的模型和在框310处接收的脉动数组相对应的源代码来生成RTL代码。例如,编译器可以调度模型或层设计中的各个块,而不是尝试调度整个神经网络。参考图4,编译器可以分别调度卷积单元410、最大池化单元415、ReLU 425和缩放单元435,以便简化调度处理并且增加调度收敛的可能性。也就是说,通过调度各个块,编译器可以对构成块的硬件进行调度,并且然后在执行调度过程的较高级别时生成用于在块之间共享数据的数据流通道。
当在较高级别调度各个块时,编译器可以将这些块划分为一个或多个脉动阵列。也就是说,脉动阵列表示调度的中间级别,该中间级别进一步细分较高级别的块,即,架构描述400中的功能块。在一个实施例中,当在功能块中执行相同过程(诸如依赖于执行多次乘法的卷积)时,使用脉动阵列。换言之,因为可以使用相同的PE(例如,相同的MAC块)来执行卷积,所以可以将这些PE布置在并行操作的多维脉动阵列280中。相反,在一个实施例中,较高级别的块中的不同过程与数据流通道连接,并且在较低级别的调度期间进行调度,而没有形成脉动阵列或网格。
在较低级别的调度过程中,编译器对在调度的较高级别和中间级别中形成过程和功能的硬件模块进行调度。例如,可以将图4所示的架构设计中形成模块的PE和脉动阵列划分为硬件元件,该硬件元件然后由编译器调度。在一个实施例中,调度器可以对硬件元件的操作进行流水线操作,使得这些元件在每个时钟周期接收输入操作数并且产生输出。通过将调度细分为多个级别,编译器和调度器可以生成硬件级别代码(例如,RTL代码),该硬件级别代码配置硬件***,使得不同的块、软件功能/方法和处理元件同时操作。
图6示出了根据示例的在数字信号处理块中的流水线化PE 600。在该实施例中,PE600是用于执行卷积的MAC块605,但是可以是任何一个或多个硬件元件。在图6中,MAC块605执行不能在单个时钟周期中执行的浮点运算。这样,HLS编译器可以将该浮点运算划分为多个子运算,每个子运算可以在一个时钟周期内被执行。在此,通过首先执行读取操作610,然后执行乘法操作615,然后执行加法操作620和写入操作625,可以在四个时钟周期内执行浮点运算。
在第一时钟周期中,读取操作610检索操作数A和B。在第二时钟周期中,乘法操作615将A操作数与B操作数相乘。在第三时钟周期中,加法操作620将该相乘的结果与用作累加操作的先前的相乘相加。在第四时钟周期中,写入操作将加法操作的结果(例如,输出C)写入存储器。以这种方式,MAC块605的整体操作可以被划分为可以在每个时钟周期内完成的多个步骤。
在一个实施例中,为了并行或同时执行操作610、615、620和625,这些操作由FPGA中的不同硬件元件执行。也就是说,读取操作610可以由第一存储器接口硬件元件执行,而写入操作625可以由第二存储器接口硬件元件执行。只要这些硬件元件正在试图读取和写入单独的存储器(即,FPGA中的不同块RAM(BRAM)元件被分配以存储操作数A和B以及输出C),则读取操作610和写入操作625可以同时执行。类似地,乘法操作615可以由第一DSP块执行,而加法操作620可以由第二DSP块执行,使得这些操作可以被同时执行。
图6示出了在七个时钟周期(即,周期1、2、3、4、5、6和7)期间的PE 600的状态,在该七个时钟周期中,PE 600处理图像数据(即,图像数据105A-D)的四个块或分组。在周期1期间,从FPGA中的存储器中读取与图像数据105A相对应的操作数A和B。在周期2期间,在从存储器中读取与图像数据105B相对应的操作数A和B的同时,将与图像数据105A相对应的操作数A和B相乘。在周期3期间,在将与图像数据105B相对应的操作数A和B相乘并且从存储器中读取与图像数据105C相对应的操作数A和B的同时,通过加法操作620将对图像数据105A执行乘法的结果相加。在周期4时,构成PE 600的所有硬件元件均同时执行。在该示例中,在周期4,在将对图像数据105B执行乘法的结果相加,将与图像将数据105C相对应的操作数A和B相乘,并且从存储器中读取与图像数据105D相对应的操作数A和B的同时,将对图像数据105A执行加法的结果写入FPGA的存储器。只要有其他图像数据可用(即,在神经网络流水线中有更多图像数据需要由PE 600处理),则硬件元件就同时执行。换言之,编译器可以使用FPGA中的硬件元件将硬件元件调度到流水线中,使得硬件元件同时操作。因为编译器可以对调度的较高级别、中间级别和较低级别中的所有硬件元件执行类似的调度过程,所述可以将神经网络流水线作为整体进行调度,使得硬件元件同时操作。
返回方法300,在框320处,计算设备根据在框315处生成的RTL代码来配置FPGA中的可编程硬件逻辑。也就是说,计算设备对FPGA进行配置,使得被选择以执行如图6所示的PE的硬件元件可以同时操作。而且,RTL代码可以在硬件元件之间定义数据流通道,该数据流通道可以包括缓冲器。尽管特别提到了RTL,但是编译器(或综合工具)可以生成任何种类的硬件级设计,当在诸如GPU或ASIC等硬件***中执行神经网络时,该硬件级设计可以提供静态调度。
图7是描绘根据示例的用于实现神经网络的***700的框图。***700包括计算机***102和一个或多个计算机***708。计算机***702包括被配置为执行提供一个或多个设计工具704的软件的常规计算组件。每个计算机***708执行一个或多个神经网络710。神经网络710使用应用712、加速库714和一个或多个硬件加速器716来实现。
在一个示例中,硬件加速器716包括诸如FPGA等可编程IC。加速库714提供用于与硬件加速器716接口的应用程序编程接口(API)。加速库714还可以包括提供神经网络功能的库,包括神经网络层和其他类型的神经网络结构的预定义和优化实现。因此,神经网络710可以包括在硬件加速器716中实现的硬件部分以及在加速库714中实现的软件部分两者。应用712调用加速库714的API以将硬件加速器716编程和控制为实现神经网络716。
设计人员与设计工具704交互以定义神经网络710。设计工具704可以生成用于对硬件加速器716进行编程的文件(例如,用于FPGA的配置位流)、提供加速库714的文件和提供应用712的文件。设计人员可以使用寄存器传输语言(RTL)或使用编程语言(诸如C、C++、OpenCL等)或RTL和可编程语言的组合来定义神经网络710的硬件部分。用户可以使用诸如C、C++、OpenCL等编程语言来定义神经网络710的软件部分。设计工具704编译软件定义的神经网络以生成用于对硬件加速器716进行编程的文件和用于加速库714的库文件。设计人员可以利用提供类库、模板库等的库706来帮助开发神经网络710的硬件和软件部分。
用户可以使用编程语言(例如,C、C++、Python等)来定义应用712。用户可以利用神经网络框架和库,诸如Caffe、TensorFlow、MXNet等。
图8是描绘根据示例的计算***708的框图。计算***708包括硬件804和在硬件804上执行的软件806。硬件804包括处理***810、***存储器816、存储设备(“存储818”)、和硬件加速器716。软件806包括操作***(OS)844、加速库714和应用712。
处理***810包括微处理器812、支持电路814和***总线815。微处理器812可以是任何类型的通用中央处理单元(CPU),诸如基于x86的处理器、基于
Figure BDA0002506374820000161
的处理器等。微处理器812可以包括一个或多个核和相关联的电路***(例如,高速缓冲存储器、存储器管理单元(MMU)、中断控制器等)。微处理器812被配置为执行程序代码,该程序代码执行本文中描述的一个或多个操作并且可以存储在***存储器816和/或存储装置818中。支持电路814包括与微处理器812协作以管理微处理器812、***存储器816、存储818、硬件加速器716或任何其他***设备之间的数据流的各种设备。例如,支持电路814可以包括芯片组(例如,北桥、南桥、平台主机控制器等)、电压调节器、固件(例如,BIOS)等。支持电路814管理微处理器812与***总线815之间的数据流,诸如硬件加速器716等各种***设备连接到***总线815。在一些示例中,微处理器812可以是吸收了芯片组(例如,北桥、南桥等)的全部或大部分功能的***级封装(SiP)、片上***(SoC)等。***总线可以实现扩展总线标准,诸如***组件互连Express(PCIe)。在该示例中,处理***810被示出为与硬件加速器716分离。在下面进一步讨论的其他示例中,处理***810和硬件加速器716可以使用片上***(SoC)在同一IC上实现。
***存储器816是允许存储和检索诸如可执行指令和数据等信息的设备。***存储器816可以包括例如一个或多个随机存取存储器(RAM)模块,诸如双倍数据速率(DDR)动态RAM(DRAM)。存储装置818包括本地存储设备(例如,一个或多个硬盘、闪存模块、固态磁盘和光盘)和/或使得计算***708能够与一个或多个网络数据存储***通信的存储接口。硬件804可以包括计算***的各种其他常规设备和***设备,诸如图形卡、通用串行总线(USB)接口等。
硬件加速器716包括可编程IC 828、非易失性存储器(NVM)824和RAM 826。可编程IC 828可以是FPGA等,或者是具有FPGA等的SoC。NVM 824可以包括任何类型的非易失性存储器,诸如闪存等。RAM 826可以包括DDR DRAM等。可编程IC 828耦合到NVM 824和RAM 826。可编程IC 828也耦合到处理***810的***总线815。
OS 814可以是本领域已知的任何商品操作***,诸如
Figure BDA0002506374820000171
Figure BDA0002506374820000172
等。加速库714包括提供用于硬件加速器716的命令和控制的API的驱动器和库。应用712包括在微处理器812上执行的调用加速库714的API以实现神经网络的软件。
在操作中,可编程IC 828配置有加速电路830(例如,神经网络加速电路或内核加速电路)。加速电路830通常包括基础平台830A和内核830B。例如,加速电路830可以使用静态区域834和可编程区域836来实现。静态区域834包括用于提供与***总线815、NVM 824和RAM 826的接口的支持电路840。可编程区域836可以包括一个或多个内核电路(“内核838”)。基础平台830A使用静态区域834来实现,并且内核830B使用可编程区域836来实现。在另一示例中,基础平台830A还可以使用可编程区域836的一部分来实现。因此,在一些示例中,可编程区域836还包括一些接口电路。在一些示例中,加速电路830可以包括一个以上的可编程区域836,每个可编程区域836可以个体地配置有内核838。
静态区域834是“静态的”,因为其电路***在可编程区域836的重新配置之间保持恒定,并且不同于上面讨论的静态调度。在一个示例中,支持电路840包括PCIe端点电路、直接存储器访问(DMA)控制器、互连、存储器控制器、存储器接口电路(例如,DDR接口)、解耦器电路(用于支持部分重新配置)、闪存编程器、调试电路等。在一些示例中,可编程区域836不包括任何支持电路840。在其他示例中,一些支持电路在可编程区域836中实现。在这种情况下,可编程区域836可以称为“扩展可编程区域”。在任一情况下,在一个示例中,一些支持电路840总是存在于静态区域834中,诸如PCIe电路和DMA电路。
图9是描绘根据示例的加速电路830的框图。加速电路830包括支持电路840和内核838。在该示例中,支持电路840包括PCIe端点电路(“PCIe端点902”)、PCIe DMA控制器904、互连电路(“互连906”)、存储器控制器910和存储器接口912。支持电路840可以包括为了清楚起见而被省略的其他电路(例如,解耦器电路、调试电路等)。PCIe端点302提供与***总线815的物理接口。PCIeDMA控制器904促进对RAM 826和内核838的DMA操作。互连906将PCIeDMA控制器904耦合到存储器控制器910和内核838。存储器控制器910耦合到存储器接口912。存储器接口912耦合到RAM 826。
在操作中,加速库846可以直接通过PCIe DMA控制器904访问RAM 826。加速库846还可以通过PCIe DMA控制器904访问内核838。内核838可以通过存储器控制器910访问RAM826。可以使用***存储器816与RAM 826之间的DMA操作在软件806与内核838之间交换数据。
在该示例中,内核838使用接口930、931和932与互连906通信。特别地,这些接口可以包括第一读取接口930、第二读取接口931和读取/写入接口932。例如,读取接口930可以用作用于控制内核838的控制接口。读取接口931可以用于通过存储器接口912中的第一存储器接口912从RAM 826读取。读取/写入接口932可以用于通过存储器接口912中的第二存储器接口912从RAM 826读取和写入。
内核838包括互连接口940、控制逻辑942和处理电路941。处理电路941包括IM2COL电路(“IM2COL 944”)、读取控制电路(“读取控制946”)、多路复用器956、先进先出电路(“FIFO 958”)、DSP阵列962、缩放器电路(“收发器964”,诸如ReLU激活电路)、最大池化电路(“最大池化966”)、多路复用器968、FIFO 954、写入控制电路(“写入控制952”)、高速缓存948、读取控制电路(“读取控制950”)和FIFO 960。互连接口940耦合到接口930、931和932、控制逻辑942和处理电路941。互连接口940可以包括开关、时钟转换器等以促进控制逻辑942与接口930之间以及处理电路941与接口931和932之间的通信。
在该示例中,互连接口940耦合到IM2COL电路944、读取控制电路946、高速缓存948和写入控制电路952的输入。IM2COL电路944和读取控制电路946的输出耦合到多路复用器956的输入。多路复用器956的输出耦合到FIFO 958的输入。FIFO 958的输出耦合到计算阵列962的第一输入。高速缓存948的输出耦合到读取控制电路950的输入。读取控制电路950的输出耦合到FIFO 960的输入。FIFO 960的输出耦合到计算阵列962的第二输入。计算阵列962的输出耦合到缩放器964的输入。缩放器964的输出耦合到最大池化电路966的输入和多路复用器968的输入。最大池化电路966的输出耦合到多路复用器968的另一输入。多路复用器968的输出耦合到FIFO 954的输入。FIFO 954的输出耦合到写入控制电路952。
在操作中,计算阵列962执行矩阵乘法操作以实现神经网络。计算阵列962的输入从FIFO 958接收输入激活矩阵,并且从FIFO 960接收权重矩阵。输入激活矩阵可以使用读取控制电路946直接从RAM 826读取。替代地,输入激活可以是从RAM 826读取并且由IM2COL电路944处理以输入到计算阵列962。下面描述IM2COL电路944的实施例。权重矩阵可以由读取控制电路950从RAM 826读取并且高速缓存在高速缓存948中。缩放器964可以对计算阵列962的输出进行缩放。最大池化电路966可以对计算阵列962的缩放后的输出实现最大池化功能。在一个示例中,最大池化电路966使用CLB或其他可配置逻辑来实现。最大池化电路966或缩放器964的输出可以存储在FIFO 954中。写入控制电路952将FIFO中的数据写入RAM826。控制逻辑942控制处理电路941中的各种电路,诸如IM2COL电路944、读取控制电路946、多路复用器956和968、读取控制电路950、缩放器964、最大池化电路966和写入控制电路952。
图10是描绘根据示例的可编程IC 828的框图。可编程IC 828包括可编程逻辑3、配置逻辑25和配置存储器26。可编程IC 828可以耦合到外部电路,诸如NVM 824、RAM 826和其他电路29。可编程逻辑3包括逻辑单元30、支持电路31和可编程互连32。逻辑单元30包括可以被配置为实现多个输入的通用逻辑功能的电路。支持电路31包括专用电路,诸如收发器、输入/输出块、数字信号处理器、存储器等。逻辑单元和支持电路31可以使用可编程互连32来互连。用于对逻辑单元30进行编程、用于设置支持电路31的参数以及用于对可编程互连32进行编程的信息由配置逻辑25存储在配置存储器26中。配置逻辑25可以从非易失性存储器824或任何其他源(例如,DRAM 28或从其他电路29)获取配置数据。在一些示例中,可编程IC 828包括处理***2。处理***2可以包括微处理器、存储器、支持电路、IO电路等。例如,处理***2可以包括类似于处理***810的电路。在一些示例中,可以使用处理***2来代替处理***810。在这种情况下,整个计算***108可以使用可编程IC 828来实现,其中软件806在处理***2上执行。
图11示出了可编程IC 828的FPGA实现,其包括大量不同的可编程块,包括收发器37、CLB 33、BRAM 34、输入/输出块(“IOB”)36、配置和时钟逻辑(“CONFIG/CLOCKS”)42、DSP模块35、专用输入/输出模块(“I/O”)41(例如,配置端口和时钟端口)、以及其他可编程逻辑39,诸如数字时钟管理器、模数转换器、***监测逻辑等。FPGA还可以包括PCIe接口40、模数转换器(ADC)38等。
在一些FPGA中,每个可编程区块可以包括至少一个可编程互连元件(“INT”)43,该INT 43具有到相同区块内的可编程逻辑元件的输入和输出端子48的连接,如图11的顶部处包括的示例所示。每个可编程互连元件43还可以包括到同一区块或其他区块中的相邻可编程互连元件的互连段49的连接。每个可编程互连元件43还可以包括到逻辑块(未示出)之间的通用路由资源的互连段50的连接。通用路由资源可以包括逻辑块(未示出)之间的路由通道,包括互连段(例如,互连段50)的轨道和用于连接互连段的开关块(未示出)。通用路由资源的互连段(例如,互连段50)可以跨越一个或多个逻辑块。可编程互连元件43与通用路由资源一起实现用于所示出的FPGA的可编程互连结构(“可编程互连”)。
在示例实现中,CLB 33可以包括可以被编程为实现用户逻辑的可配置逻辑元件(“CLE”)44、以及单个可编程互连元件(“INT”)43。BRAM 34可以包括BRAM逻辑元件(“BRL”)45、以及一个或多个可编程互连元件。通常,区块中包括的互连元件的数目取决于区块的高度。在图示的示例中,BRAM区块具有与五个CLB相同的高度,但是也可以使用其他数目(例如,四个)。除了适当数目的可编程互连元件,DSP区块35还可以包括DSP逻辑元件(“DSPL”)46。除了可编程互连元件43的一个实例,IOB 36还可以包括例如输入/输出逻辑元件(“IOL”)47的两个实例。本领域技术人员将清楚,例如连接到I/O逻辑元件47的实际的I/O焊盘通常不限于输入/输出逻辑元件47的区域。
在图示的示例中,靠近管芯中央的水平区域(如图11所示)用于配置、时钟和其他控制逻辑。从该水平区域或列延伸的垂直列51用于在FPGA的整个宽度上分配时钟和配置信号。
一些利用图11所示架构的FPGA包括其他逻辑块,这些逻辑块破坏了构成FPGA的很大一部分的规则的柱状结构。附加逻辑块可以是可编程块和/或专用逻辑。
注意,图11仅意图示出示例性FPGA架构。例如,一行中逻辑块的数目、行的相对宽度、行的数目和顺序、行中包括的逻辑块的类型、逻辑块的相对大小、以及图11的顶部处包括的互连/逻辑实现纯粹是示例性的。例如,在实际的FPGA中,无论CLB出现在何处,通常都包括多于一个的相邻CLB行,以促进用户逻辑的有效实现,但是相邻CLB行的数目随着FPGA的整体大小而变化。
已经出于说明的目的给出了本发明的各种实施例的描述,但是这些描述并非旨在是穷举性的或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,很多修改和变化对于本领域普通技术人员将是很清楚的。选择本文中使用的术语是为了最好地解释实施例的原理、对市场上发现的技术的实际应用或技术上的改进,或者使得本领域其他普通技术人员能够理解本文中公开的实施例。
在前面,参考了本公开中提出的实施例。然而,本公开的范围不限于特定描述的实施例。相反,可以构想本文中描述的特征和元素的任何组合(而不管是否与不同的实施例相关)以实现和实践所构想的实施例。此外,尽管本文中公开的实施例可以实现优于其他可能的解决方案或优于现有技术的优点,但是通过给定实施例是否实现特定优点并不限制本公开的范围。因此,本文中描述的方面、特征、实施例和优点仅是示例性的,而不被认为是所附权利要求的要素或限制,除非在权利要求中明确叙述。同样,对“本发明”的引用不应当被解释为本文中公开的任何发明主题的概括,并且不应当被视为所附权利要求的要素或限制,除非在权利要求中明确叙述。
本文中描述的各方面可以采取以下形式:完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或结合了软件和硬件方面的实施例的形式,这些方面在本文中通常都被称为“模块”或“***”。
本发明可以是***、方法和/或计算机程序产品。该计算机程序产品可以包括其上具有用于引起处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质。
计算机可读存储介质可以是可以保留和存储供指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字多功能磁盘(DVD)、记忆棒、软盘、机械编码设备(诸如其上记录有指令的凹槽中的打孔卡或凸起结构)、以及前述各项的任何合适的组合。如本文中使用的,计算机可读存储介质不应当被理解为暂态信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线传输的电信号。
可以经由例如因特网、局域网、广域网和/或无线网络等网络将本文中描述的计算机可读程序指令从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并且转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编程序指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者用一种或多种编程语言(包括诸如Smalltalk、C++等面向对象的编程语言、以及诸如“C”编程语言或类似编程语言等常规的过程编程语言)的任何组合编写的源代码或目标代码。计算机可读程序指令可以完全在用户的计算机上,部分地在用户的计算机上,作为独立软件包执行,部分地在用户的计算机上并且部分地在远程计算机上,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以与外部计算机建立连接(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路***、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路***可以通过利用计算机可读程序指令的状态信息个性化电子电路***来执行计算机可读程序指令,以执行本发明的各方面。
本文中参考根据本发明的实施例的方法、装置(***)和计算机程序产品的流程图图示和/或框图描述了本发明的各方面。应当理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机可读程序指令来实现。
可以将这些计算机可读程序指令提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得这些指令在经由计算机或其他可编程数据处理装置的处理器执行时创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,该计算机可读存储介质可以指导计算机、可编程数据处理装置和/或其他设备以特定方式起作用,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现在流程图和/或框图的一个或多个框中指定的功能/动作的各方面的指令。
也可以将计算机可读程序指令加载到计算机、其他可编程数据处理装置或其他设备上,以引起一系列操作步骤在计算机、其他可编程装置或其他设备上被执行以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现在流程图和/或框图的一个或多个框中指定的功能/动作。
附图中的流程图和框图示出了根据本发明的各个实施例的***、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、片段或部分,其包括用于实现指定逻辑功能的一个或多个可执行指令。在一些替代实现中,框中指出的功能可以不按图中指出的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。还应当注意,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作或者执行特殊用途的硬件和计算机指令的组合的特殊用途的基于硬件的***来实现。
下面提供非限制性示例的列表。
在一个示例中,提供了一种用于调度神经网络的方法。这样的方法可以包括:接收定义在执行神经网络中的至少一个层时执行的多个流水线功能的顺序次序的模型,其中神经网络包括多个层;
接收用于在神经网络的至少一个层中执行相同过程的脉动阵列;以及使用一个或多个计算处理器将与模型和脉动阵列相对应的源代码编译到硬件级设计中,硬件级设计当在硬件***中执行神经网络时提供静态调度。
一些这样的方法还可以包括:基于硬件级设计来配置现场可编程门阵列(FPGA),其中硬件级设计包括寄存器传输级(RTL)代码。
在一些这样的方法中,编译脉动阵列的源代码源可以包括:将脉动阵列的源代码转换为互连处理元件的二维阵列。
在一些这样的方法中,编译脉动阵列的源代码可以包括:标识由互连处理元件中的每个互连处理元件执行的多个操作,其中互连处理元件中的每个互连处理元件执行相同的多个操作;以及将多个操作分配给硬件***中的不同硬件元件使得多个操作可以能够同时执行。
在一些这样的方法中,模型可以包括指示多个流水线功能的顺序次序的软件定义的并行化指示。
在一些这样的方法中,与模型相对应的源代码包括用于神经网络的非定时功能代码。
在一些这样的方法中,多个流水线功能包括向多个流水线功能中的激活单元传输数据的卷积单元、池化单元和矩阵乘法器中的至少一种。
在另一示例中,可以提供一种存储指令的非暂态计算机可读存储介质,该指令当在一个或多个处理设备上执行时执行用于调度神经网络的操作。该操作可以包括:接收定义在执行神经网络中的至少一个层时执行的多个流水线功能的顺序次序的模型,其中神经网络包括多个层;接收用于在神经网络的至少一个层中执行相同过程的脉动阵列;以及将与模型和脉动阵列相对应的源代码编译到硬件级设计中,硬件级设计当在硬件***中执行神经网络时提供静态调度。
在这样的计算机可读存储介质中,该操作还可以包括:基于硬件级设计来配置现场可编程门阵列(FPGA),其中硬件级设计包括寄存器传输级(RTL)代码。
在这样的计算机可读存储介质中,编译脉动阵列的源代码可以包括:将脉动阵列的源代码源转换为互连处理元件的二维阵列。
在这样的计算机可读存储介质中,编译脉动阵列的源代码可以包括:标识由互连处理元件中的每个互连处理元件执行的多个操作,其中互连处理元件中的每个互连处理元件执行相同的多个操作;以及将多个操作分配给硬件***中的不同硬件元件使得多个操作可以能够同时执行。
在这样的计算机可读存储介质中,模型可以包括指示多个流水线功能的顺序次序的软件定义的并行化指示。
在这样的计算机可读存储介质中,与模型相对应的源代码包括用于神经网络的非定时功能代码。
在这样的计算机可读存储介质中,多个流水线功能包括向多个流水线功能中的激活单元传输数据的卷积单元、池化单元和矩阵乘法器中的至少一种。
在另一示例中,可以提供一种计算***。这样的计算***可以包括:处理器;以及包括编译器的存储器,其中编译器在由处理器执行时执行操作,该操作包括:接收定义在执行神经网络中的至少一个层时执行的多个流水线功能的顺序次序的模型,其中神经网络包括多个层;接收用于在神经网络的至少一个层中执行相同过程的脉动阵列;以及将与模型和脉动阵列相对应的源代码编译到硬件级设计中,硬件级设计当在硬件***中执行神经网络时提供静态调度。
在一些这样的计算***中,该操作还可以包括:基于硬件级设计来配置现场可编程门阵列(FPGA),其中硬件级设计包括寄存器传输级(RTL)代码。
在这样的计算***中,编译脉动阵列的源代码包括:将脉动阵列的源代码转换为互连处理元件的二维阵列。
在这样的计算***中,编译脉动阵列的源代码可以包括:标识由互连处理元件中的每个互连处理元件执行的多个操作,其中互连处理元件中的每个互连处理元件执行相同的多个操作;以及将多个操作分配给硬件***中的不同硬件元件使得多个操作能够同时执行。
在一些这样的计算***中,模型可以包括指示多个流水线功能的顺序次序的软件定义的并行化指示。
在一些这样的计算***中,与模型相对应的源代码可以包括用于神经网络的非定时功能代码。
尽管前述内容涉及特定示例,但是在不脱离其基本范围的情况下,可以设计其他和另外的示例,并且其范围由所附权利要求确定。

Claims (13)

1.一种用于调度神经网络的方法,所述方法包括:
接收定义在执行所述神经网络中的至少一个层时执行的多个流水线功能的顺序次序的模型,其中所述神经网络包括多个层;
接收用于在所述神经网络的所述至少一个层中执行相同过程的脉动阵列;以及
使用一个或多个计算处理器将与所述模型和所述脉动阵列相对应的源代码编译到硬件级设计中,所述硬件级设计当在硬件***中执行所述神经网络时提供静态调度。
2.根据权利要求1所述的方法,还包括:
基于所述硬件级设计来配置现场可编程门阵列(FPGA),其中所述硬件级设计包括寄存器传输级(RTL)代码。
3.根据权利要求1所述的方法,其中编译所述脉动阵列的所述源代码包括:
将所述脉动阵列的所述源代码所述源转换为互连处理元件的二维阵列。
4.根据权利要求3所述的方法,其中编译所述脉动阵列的所述源代码包括:
标识由所述互连处理元件中的每个互连处理元件执行的多个操作,其中所述互连处理元件中的每个互连处理元件执行相同的所述多个操作;以及
将所述多个操作分配给所述硬件***中的不同硬件元件使得所述多个操作能够同时执行。
5.根据权利要求1所述的方法,其中所述模型包括指示所述多个流水线功能的所述顺序次序的软件定义的并行化指示。
6.根据权利要求1所述的方法,其中与所述模型相对应的所述源代码包括用于所述神经网络的非定时功能代码。
7.根据权利要求1所述的方法,其中所述多个流水线功能包括向所述多个流水线功能中的激活单元传输数据的卷积单元、池化单元和矩阵乘法器中的至少一种。
8.一种计算***,包括:
处理器;以及
包括编译器的存储器,其中所述编译器在由所述处理器执行时执行操作,所述操作包括:
接收定义在执行神经网络中的至少一个层时执行的多个流水线功能的顺序次序的模型,其中所述神经网络包括多个层;
接收用于在所述神经网络的所述至少一个层中执行相同过程的脉动阵列;以及
将与所述模型和所述脉动阵列相对应的源代码编译到硬件级设计中,所述硬件级设计当在硬件***中执行所述神经网络时提供静态调度。
9.根据权利要求8所述的计算***,其中所述操作还包括:
基于所述硬件级设计来配置现场可编程门阵列(FPGA),其中所述硬件级设计包括寄存器传输级(RTL)代码。
10.根据权利要求8所述的计算***,其中编译所述脉动阵列的所述源代码包括:
将所述脉动阵列的所述源代码所述源转换为互连处理元件的二维阵列。
11.根据权利要求10所述的计算***,其中编译所述脉动阵列的所述源代码包括:
标识由所述互连处理元件中的每个互连处理元件执行的多个操作,其中所述互连处理元件中的每个互连处理元件执行相同的所述多个操作;以及
将所述多个操作分配给所述硬件***中的不同硬件元件使得所述多个操作能够同时执行。
12.根据权利要求8所述的计算***,其中所述模型包括指示所述多个流水线功能的所述顺序次序的软件定义的并行化指示。
13.根据权利要求8所述的计算***,其中与所述模型相对应的所述源代码包括用于所述神经网络的非定时功能代码。
CN201880076027.5A 2017-10-17 2018-10-01 大规模并行软件定义硬件***中的静态块调度 Active CN111771215B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/786,434 US12061990B2 (en) 2017-10-17 2017-10-17 Static block scheduling in massively parallel software defined hardware systems
US15/786,434 2017-10-17
PCT/US2018/053820 WO2019079025A1 (en) 2017-10-17 2018-10-01 ORDERING STATIC BLOCKS IN MATERIAL SYSTEMS DEFINED BY MASSIVELY PARALLEL SOFTWARE

Publications (2)

Publication Number Publication Date
CN111771215A true CN111771215A (zh) 2020-10-13
CN111771215B CN111771215B (zh) 2024-08-13

Family

ID=63963512

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880076027.5A Active CN111771215B (zh) 2017-10-17 2018-10-01 大规模并行软件定义硬件***中的静态块调度

Country Status (6)

Country Link
US (1) US12061990B2 (zh)
EP (1) EP3698295A1 (zh)
JP (1) JP7337053B2 (zh)
KR (1) KR102650299B1 (zh)
CN (1) CN111771215B (zh)
WO (1) WO2019079025A1 (zh)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111859273A (zh) 2017-12-29 2020-10-30 华为技术有限公司 矩阵乘法器
US11494582B2 (en) 2018-02-08 2022-11-08 Western Digital Technologies, Inc. Configurable neural network engine of tensor arrays and memory cells
US11551064B2 (en) 2018-02-08 2023-01-10 Western Digital Technologies, Inc. Systolic neural network engine capable of forward propagation
US11151769B2 (en) 2018-08-10 2021-10-19 Intel Corporation Graphics architecture including a neural network pipeline
US11468338B2 (en) * 2018-09-11 2022-10-11 Apple Inc. Compiling models for dedicated hardware
US12020168B2 (en) 2018-09-11 2024-06-25 Apple Inc. Compiling models for dedicated hardware
CN109359732B (zh) * 2018-09-30 2020-06-09 阿里巴巴集团控股有限公司 一种芯片及基于其的数据处理方法
US11106437B2 (en) 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11093682B2 (en) * 2019-01-14 2021-08-17 Microsoft Technology Licensing, Llc Language and compiler that generate synchronous digital circuits that maintain thread execution order
US10810343B2 (en) 2019-01-14 2020-10-20 Microsoft Technology Licensing, Llc Mapping software constructs to synchronous digital circuits that do not deadlock
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
KR20210014902A (ko) 2019-07-31 2021-02-10 삼성전자주식회사 프로세서 및 그 제어 방법
TWI764236B (zh) * 2019-08-16 2022-05-11 美商谷歌有限責任公司 晶片上操作的顯式排程
US11556450B2 (en) 2019-10-11 2023-01-17 International Business Machines Corporation Hybrid data-model parallelism for efficient deep learning
CN110738311A (zh) * 2019-10-14 2020-01-31 哈尔滨工业大学 基于高层次综合的lstm网络加速方法
CN111027688A (zh) * 2019-10-21 2020-04-17 浙江省北大信息技术高等研究院 一种基于fpga的神经网络计算器生成方法及装置
CN111105023B (zh) * 2019-11-08 2023-03-31 深圳市中科元物芯科技有限公司 数据流重构方法及可重构数据流处理器
US20210191765A1 (en) * 2019-12-18 2021-06-24 Deep Vision Inc. Method for static scheduling of artificial neural networks for a processor
CN111176820B (zh) * 2019-12-31 2021-06-25 中科院计算技术研究所大数据研究院 一种基于深度神经网络的边缘计算任务的分配方法及装置
US11687778B2 (en) 2020-01-06 2023-06-27 The Research Foundation For The State University Of New York Fakecatcher: detection of synthetic portrait videos using biological signals
US20210216868A1 (en) * 2020-01-08 2021-07-15 Maxim Integrated Products, Inc. Systems and methods for reducing memory requirements in neural networks
CN111210019B (zh) * 2020-01-16 2022-06-24 电子科技大学 一种基于软硬件协同加速的神经网络推断方法
US11687279B2 (en) * 2020-01-27 2023-06-27 Samsung Electronics Co., Ltd. Latency and throughput centric reconfigurable storage device
KR20210100335A (ko) 2020-02-06 2021-08-17 삼성전자주식회사 멀티 디바이스 기반 추론 방법 및 장치
US11556766B2 (en) 2020-03-23 2023-01-17 Hewlett Packard Enterprise Development Lp Loading of neural networks onto physical resources
US11734605B2 (en) 2020-04-29 2023-08-22 SiMa Technologies, Inc. Allocating computations of a machine learning network in a machine learning accelerator
US11734549B2 (en) 2020-04-21 2023-08-22 SiMa Technologies, Inc. Avoiding data routing conflicts in a machine learning accelerator
US11886981B2 (en) * 2020-05-01 2024-01-30 SiMa Technologies, Inc. Inter-processor data transfer in a machine learning accelerator, using statically scheduled instructions
US11586894B2 (en) 2020-05-04 2023-02-21 SiMa Technologies, Inc. Ordering computations of a machine learning network in a machine learning accelerator for efficient memory usage
DE102020132088A1 (de) * 2020-05-01 2021-11-04 Intel Corporation Berechnung effizienter kanalübergreifender operationen in parallelrechenmaschinen mit systolischen arrays
CN111667053B (zh) * 2020-06-01 2023-05-09 重庆邮电大学 一种卷积神经网络加速器的前向传播计算加速方法
US11709795B2 (en) * 2020-11-12 2023-07-25 Electronics And Telecommunications Research Institute Electronic device including main processor and systolic array processor and operating method of electronic device
KR102253414B1 (ko) * 2020-12-16 2021-05-18 주식회사 모빌린트 Cnn-rnn 아키텍처 전환형 연산 가속장치 설계 방법
KR102463147B1 (ko) 2021-02-26 2022-11-03 고려대학교 산학협력단 초병렬 심층 학습 방법 및 장치
CN113570033B (zh) * 2021-06-18 2023-04-07 北京百度网讯科技有限公司 神经网络处理单元、神经网络的处理方法及其装置
CN113592066B (zh) * 2021-07-08 2024-01-05 深圳市易成自动驾驶技术有限公司 硬件加速方法、装置、设备及存储介质
EP4227795A1 (en) 2022-02-15 2023-08-16 ILNumerics GmbH A computer-implemented method and a computer-readable medium
JP2024065787A (ja) * 2022-10-31 2024-05-15 LeapMind株式会社 画像処理装置、学習方法及び推論方法
CN116090383B (zh) * 2022-12-27 2024-07-02 广东高云半导体科技股份有限公司 实现静态时序分析的方法、装置、计算机存储介质及终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4766560A (en) * 1985-12-23 1988-08-23 Xerox Corporation Parallel/pipelined arithmetic variable clock frequency synthesizer
US20110125819A1 (en) * 2009-11-23 2011-05-26 Xilinx, Inc. Minimum mean square error processing
US20160210167A1 (en) * 2013-09-24 2016-07-21 University Of Ottawa Virtualization of hardware accelerator
US20170103299A1 (en) * 2015-10-07 2017-04-13 Altera Corporation Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator
US9710748B2 (en) * 2015-05-21 2017-07-18 Google Inc. Neural network processor

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274832A (en) * 1990-10-04 1993-12-28 National Semiconductor Corporation Systolic array for multidimensional matrix computations
JPH0823874B2 (ja) * 1993-11-18 1996-03-06 株式会社ジーデイーエス シストリックアレイプロセサー
US6346825B1 (en) 2000-10-06 2002-02-12 Xilinx, Inc. Block RAM with configurable data width and parity for use in a field programmable gate array
US7245615B1 (en) * 2001-10-30 2007-07-17 Cisco Technology, Inc. Multi-link protocol reassembly assist in a parallel 1-D systolic array system
US9110726B2 (en) * 2006-11-10 2015-08-18 Qualcomm Incorporated Method and system for parallelization of pipelined computations
US7764846B2 (en) 2006-12-12 2010-07-27 Xerox Corporation Adaptive red eye correction
US8117137B2 (en) * 2007-04-19 2012-02-14 Microsoft Corporation Field-programmable gate array based accelerator system
EP2517420B1 (en) * 2009-12-22 2014-03-19 Cuneyt F. Bazlamacci Systolic array architecture for fast ip lookup
JP5985900B2 (ja) * 2012-06-22 2016-09-06 ルネサスエレクトロニクス株式会社 動作合成装置、動作合成装置を備えたデータ処理システム、及び、動作合成プログラム
US9501449B2 (en) * 2013-09-10 2016-11-22 Sviral, Inc. Method, apparatus, and computer-readable medium for parallelization of a computer program on a plurality of computing cores
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US10846591B2 (en) * 2015-12-29 2020-11-24 Synopsys, Inc. Configurable and programmable multi-core architecture with a specialized instruction set for embedded application based on neural networks
CN106650922B (zh) 2016-09-29 2019-05-03 清华大学 硬件神经网络转换方法、计算装置、软硬件协作***
US10567775B2 (en) * 2016-10-01 2020-02-18 Intel Corporation Method and system of hardware accelerated video coding with per-frame parameter control
US10824938B2 (en) * 2017-04-24 2020-11-03 Intel Corporation Specialized fixed function hardware for efficient convolution
US11410024B2 (en) * 2017-04-28 2022-08-09 Intel Corporation Tool for facilitating efficiency in machine learning
US11222256B2 (en) * 2017-10-17 2022-01-11 Xilinx, Inc. Neural network processing system having multiple processors and a neural network accelerator

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4766560A (en) * 1985-12-23 1988-08-23 Xerox Corporation Parallel/pipelined arithmetic variable clock frequency synthesizer
US20110125819A1 (en) * 2009-11-23 2011-05-26 Xilinx, Inc. Minimum mean square error processing
US20160210167A1 (en) * 2013-09-24 2016-07-21 University Of Ottawa Virtualization of hardware accelerator
US9710748B2 (en) * 2015-05-21 2017-07-18 Google Inc. Neural network processor
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
US20170103299A1 (en) * 2015-10-07 2017-04-13 Altera Corporation Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
JAE-JIN LE ET.AL: "Implementation of the Super-Systolic Array for Convolution", 《 2003 CONFERENCE ON ASIA SOUTH PACIFIC DESIGN AUTOMATION-ASPDAC》, pages 3 *
XUECHAO WEI ET.AL,: "Automated Systolic Array Architecture Synthesis for High Throughput CNN Inference on FPGAs", 《DAC\'17:PROCEEDIINGS OF THE 54TH ANNUAL DESIGN AUTOMATION CONFERENCE 2017 》, pages 1 - 4 *
YUN YANG ET.AL: "Hign-performance systolic array for band matrix multipl;ication", 《IEEE XPLORE》, 26 May 2015 (2015-05-26) *
ZHAO YANGYANG ET.AL: "PIE:Apipeline energy-dfficient accelerator fo inference process in deep neyral networks", 《2013 INTERNATIONAL CONFERENCE ON PARALLEL AND DISTRIBUTED SYSTEMS, IEEE》, 13 December 2013 (2013-12-13) *

Also Published As

Publication number Publication date
JP2020537789A (ja) 2020-12-24
CN111771215B (zh) 2024-08-13
US12061990B2 (en) 2024-08-13
KR102650299B1 (ko) 2024-03-21
KR20200069346A (ko) 2020-06-16
EP3698295A1 (en) 2020-08-26
WO2019079025A1 (en) 2019-04-25
JP7337053B2 (ja) 2023-09-01
US20190114548A1 (en) 2019-04-18

Similar Documents

Publication Publication Date Title
CN111771215B (zh) 大规模并行软件定义硬件***中的静态块调度
CN111226230B (zh) 具有多个处理器和神经网络加速器的神经网络处理***
JP7382925B2 (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
US11204747B1 (en) Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
EP3698296B1 (en) Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
CN111183452B (zh) 用于广义图像处理的图像预处理
US11429848B2 (en) Host-directed multi-layer neural network processing via per-layer work requests
US10515135B1 (en) Data format suitable for fast massively parallel general matrix multiplication in a programmable IC
US20190138373A1 (en) Multithreaded data flow processing within a reconfigurable fabric
US11934308B2 (en) Processor cluster address generation
US11847507B1 (en) DMA synchronization using alternating semaphores
CN114830135A (zh) 算子的层次分区
US11221979B1 (en) Synchronization of DMA transfers for large number of queues
US11461662B1 (en) Compilation time reduction for memory and compute bound neural networks
US11875247B1 (en) Input batching with serial dynamic memory access

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