CN107992943A - 用于卷积神经网络的缓冲器寻址 - Google Patents

用于卷积神经网络的缓冲器寻址 Download PDF

Info

Publication number
CN107992943A
CN107992943A CN201710931313.2A CN201710931313A CN107992943A CN 107992943 A CN107992943 A CN 107992943A CN 201710931313 A CN201710931313 A CN 201710931313A CN 107992943 A CN107992943 A CN 107992943A
Authority
CN
China
Prior art keywords
input data
buffer
data
layer
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.)
Pending
Application number
CN201710931313.2A
Other languages
English (en)
Inventor
C·麦奎兰
D·巴纳德
C·吉布森
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN107992943A publication Critical patent/CN107992943A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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
    • 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
    • G06F12/023Free address space management
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • G06F12/0653Configuration or reconfiguration with centralised address assignment
    • 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/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1647Handling requests for interconnection or transfer for access to memory bus based on arbitration with interleaved bank access
    • 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/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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/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
    • 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/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Image Input (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)
  • Memory System (AREA)
  • Image Analysis (AREA)

Abstract

一种用于提供用于卷积神经网络“CNN”的层的输入数据的方法,该方法包括:接收输入数据,该数据数据包括要在CNN的层中处理的输入数据值;基于格式数据确定缓冲器的分组存储器中要存储所接收的数据值的地址,格式数据指示层中的输入数据的格式参数以及指示要用于在层中处理输入数据的滤波器的格式参数;以及将经接收的输入数据值存储在缓冲器中的经确定的地址处用于取回以在层中处理。

Description

用于卷积神经网络的缓冲器寻址
背景技术
卷积神经网络(CNN)是一种可以用于机器学习应用的人工神经 网络。特别地,CNN可以用于信号处理应用,包括图像处理和计算 机视觉应用。
为了实施CNN,可以生产硬件加速器。硬件加速器可以是被配置 为实施特定CNN的特定硬件实施方式,或者可以是被配置为实施不 同CNN(或任何CNN)的通用硬件实施方式。在用于实施CNN的一 些硬件加速器中,可能需要硬件来以高速率的吞吐量来处理大量的输入数据。因此,硬件必须以确保维持被输入到硬件的计算部分中的数 据的速率恒定的方式来缓冲输入数据。理想的是,CNN的每个层由 硬件以相对相似的时间量来处理。这对于实施CNN的硬件来说是特 别有挑战性的,因为在典型的CNN应用中,输入数据在每一层都具 有不同的维度。用于确定用于在缓冲器中存储输入数据用于在输入数 据由CNN处理时取回的存储器地址的寻址方案可以被配置为有效地 存储用于一些层的输入数据,但是可能不适合于其他层的数据格式。
因此,需要一种改进的方法来改进被配置为实施CNN的硬件的 性能和数据吞吐量。
发明内容
提供本发明内容以便以简化的形式介绍将在下面的详细描述中 进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的 关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。
诸如硬件加速器等硬件逻辑可以被配置为能够实施一个或多个 卷积神经网络(CNN)。为了使到用于实施CNN的硬件的计算部分 中的输入数据吞吐量最大化,期望在处理之前缓冲从存储器读取的输 入数据。为了提升数据吞吐量,可以基于其将被取回的方式将数据均 匀地存储在存储器组中。本文中描述了一种寻址方案,其按照以下方 式来将输入数据分配给输入数据缓冲器:该方式使得能够基于与输入 数据的格式和用于处理输入数据的滤波器相关的格式参数,跨越多个 数据分组均匀地分布输入数据。因此,数据以高吞吐量从分组存储器 被取回。更具体地,当用于每次传递的滤波器数目很少时,例如,在 一次需要处理一个大的滤波器尺寸(由于系数缓冲器约束)的情况下, 输入缓冲器性能可能是至关重要的。以这种方式,对于一些层,将数 据传送到计算部分中可能比在卷积引擎中执行的处理花费更长的时 间。因此,将输入数据加载到卷积引擎中可能是用于实施CNN的硬 件性能的限制因素。
提供了一种用于接收用于卷积神经网络“CNN”的层的输入数据 用于处理的方法,该方法包括:接收包括输入数据,输入数据要在 CNN的层中被处理的输入数据值;基于格式数据确定缓冲器的分组 存储器中要存储所接收的数据值的地址,该格式数据指示层中的输入 数据的格式参数以及指示要用于在层中处理输入数据的滤波器的格 式参数;以及将所接收的输入数据值存储在缓冲器中的所确定的地址 处用于取回以在层中处理。
提供了一种用于实施被配置为接收用于卷积神经网络“CNN”的 层的输入数据的卷积神经网络的硬件逻辑,卷积神经网络被配置为: 接收包括输入数据,输入数据要在CNN的层中被处理的输入数据值; 基于格式数据确定缓冲器的分组存储器中要存储所接收的数据值的 地址,该格式数据指示层中的输入数据的格式参数以及指示要用于在 层中处理输入数据的滤波器的格式参数;以及将所接收的输入数据值 存储在缓冲器中的所确定的地址处用于取回以在层中处理。
卷积神经网络可以在集成电路上的硬件中被具化。可以提供一种 在集成电路制造***处制造用于实施卷积神经网络的硬件的方法。可 以提供一种集成电路限定数据集,其当在集成电路制造***中被处理 时将***配置为制造用于实施卷积神经网络的硬件。可以提供一种其 上存储有集成电路的计算机可读描述的非暂态计算机可读存储介质, 计算机可读描述在被处理时使布局处理***生成在集成电路制造系 统中使用以制造用于实现卷积神经网络的硬件的电路布局描述。
可以提供一种集成电路制造***,其包括:非暂态计算机可读存 储介质,其具有存储于其上的描述用于实施卷积神经网络的硬件的计 算机可读集成电路描述;被配置为处理集成电路描述以生成实施用于 实施卷积神经网络的硬件的集成电路的电路布局描述的布局处理系 统;以及被配置为根据电路布局描述来制造用于实施卷积神经网络的 硬件的集成电路生成***。
可以提供一种用于执行如前述权利要求中任一项所述的方法的 计算机程序代码。可以提供一种其上存储有计算机可读指令的非暂态 计算机可读存储介质,计算机可读指令当在计算机***处被执行时使 计算机***执行如前述权利要求中任一项所述的方法。
如对本领域技术人员显而易见的,上述特征可以适当地组合,并 且可以与本文中描述的实施例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1示出了在卷积神经网络的层中使用的输入数据的示例格式;
图2示出了用于实施CNN的示例硬件加速器;
图3示出了跨用于卷积神经网络的层的输入数据滤波器遍历的示 例;
图4示出了包括多个存储器组的示例输入数据缓冲器;
图5示出了根据第一实施方式的输入数据缓冲器中的输入数据值 的寻址;
图6(a)至6(f)示出了根据第一实施方式的滤波器遍历输入数 据的多个阶段;
图7(a)至7(f)示出了根据第一实施方式的从输入数据缓冲器 读取数据的多个周期;
图8示出了根据第二实施方式的第一示例的数据的示例格式;
图9示出了根据第二实施方式的第一示例的输入数据缓冲器中的 输入数据值的寻址;
图10(a)和10(b)示出了根据第二实施方式的第一示例的从 输入数据缓冲器读取数据的不同方法;
图11示出了根据第二实施方式的第二示例的数据的示例格式;
图12示出了根据第二实施方式的第二示例的输入数据缓冲器中 的输入数据值的寻址;
图13(a)至13(d)示出了根据第二实施方式的第二示例的从 输入数据缓冲器读取数据的不同方法;
图14(a)至14(d)示出根据第三实施方式的滤波器遍历输入 数据的多个阶段;
图15示出了根据第三实施方式的输入数据缓冲器中的输入数据 值的寻址;
图16(a)至16(l)示出了根据第三实施方式的从输入数据缓冲 器读取数据的多个周期;
图17示出了根据第四实施方式的从输入数据空间读取数据;
图18(a)至18(f)示出了根据第四实施方式的滤波器遍历输入 数据的多个阶段;
图19示出了根据第四实施方式的输入数据缓冲器中的输入数据 值的寻址;
图20(a)到(i)示出了根据第四实施方式的从输入数据缓冲器 读取数据的多个周期;
图21示出了实施寻址方案的示例方法;
图22示出了其中实施卷积神经网络硬件加速器的计算机***; 以及
图23示出了用于生成实施卷积神经网络硬件加速器的集成电路 的集成电路制造***。
附图示出了各种示例。本领域技术人员将理解,附图中所示的元 素边界(例如,框、框组或其他形状)表示边界的一个示例。可能的 是,在一些示例中,可以将一个元素设计为多个元素,或者可以将多 个元素设计为一个元素。在适当的情况下,在所有附图中使用通用附 图标记来表示相似的特征。
具体实施方式
通过举例的方式给出以下描述,以使本领域技术人员能够制造和 使用本发明。本发明不限于本文中描述的实施例,并且所公开的实施 例的各种修改对于本领域技术人员将是显而易见的。
现在将仅通过示例的方式描述实施例。
卷积神经网络(CNN)是一种形式的人工神经网络,其包括具有 与其相关联的权重的多个互连层。CNN被配置为执行信号处理任务, 包括计算机视觉任务。CNN的功能由应用于用于每个层的输入数据 的权重表示。
CNN被配置为通过执行输入数据和与该层相关联的权重(滤波 器)的卷积来处理用于每个层的输入数据集合。对于第一层,“输入 数据”可以被认为是到CNN的初始第一输入,对于第一层,其可以 表示图像的RGB值,其中每个平面代表红色、绿色和蓝色值之一。由于CNN通常利用2的幂数目的输入平面,所以包含零值的第四平 面也可以存在于RGB层中。在第一层中,处理输入数据,并生成传 递到第二层的中间数据的第一集合。所生成的中间数据集合可以形成 用于后续(第二)层的输入数据。
可以考虑第一组中间数据来形成用于第二层的输入数据,第二层 处理第一中间数据以产生第二中间数据形式的输出数据。在CNN包 含第三层的情况下,第三层接收第二中间数据作为输入数据,并且处 理该数据以产生第三中间数据作为输出数据。重复这个过程,直到最 后一层产生可以被认为是CNN的输出的输出数据。
图1中示出了在CNN的特定层中使用的输入数据的示例格式。 从图1可以看出,用于层的输入数据包括输入数据的总共P个平面500,用于特定层的具有相同数目的平面的输入数据可以在每个层中 具有多个平面。数据平面具有宽度X和高度Y。CNN使用多个层来限定,每个层具有与其相关联的F个滤波器w1...wF,其中F大于1。滤 波器w1...wF各自具有尺寸m×n×P,并且如图2所示,通过以栅格化 方式使滤波器根据相应的水平和竖直步幅长度s和t在X方向和Y方 向上遍历多个步骤来与输入数据进行卷积。可以使用三维输入数据空间中的三个坐标(即,坐标(x,y,p))来识别输入数据中的特定值, 其中x表示空间内的水平位置,y表示空间内的竖直位置,p表示平 面指数。
用于实施CNN的示例硬件逻辑100在图2中示出。示例硬件逻 辑100可以被视为用于实施CNN的硬件加速器。硬件逻辑100可以 是独立的硬件模块,其被配置为接收要由硬件逻辑实施的CNN来处 理的输入数据、限定要由硬件逻辑来实施的CNN的滤波器数据、以 及限定实施CNN所需要的数据的控制流,诸如输入数据和滤波器逻 辑中的至少一个的格式数据、以及其他特征,诸如硬件逻辑需要实施 的CNN的层数和所使用的数据格式。例如,控制流可以包括用于控 制硬件的操作的控制信息,以及指示输入数据和滤波器数据应当被处理的格式的格式信息。在一些布置中,硬件逻辑100可以是被配置为 从外部源接收该数据的独立模块。在其他实施方式中,硬件逻辑100 可以在诸如CPU和/或GPU等处理器的旁边被实施。硬件逻辑100 可以在片上***(SoC)中被实施。
硬件逻辑100包括系数缓冲器400和输入数据缓冲器200,输入 数据缓冲器200被配置为从存储器600接收数据,其中处理器600可 以位于硬件逻辑100内部或外部。系数缓冲器400被配置为存储从存 储器600接收的权重数据(也称为系数数据)。权重数据可以被认为 是限定与输入数据值卷积的滤波器值的数据。输入数据缓冲器200被 配置为存储从存储器600接收的输入数据。在被传递到卷积模块300 之前,存储在存储器中的权重和输入数据分别被传递到系数缓冲器 400和输入数据缓冲器200用于缓冲,卷积模块300包括i个卷积引 擎310-1至310-i,其中i可以对应于特定CNN中的最大宽度或者可 以是固定的。
i个卷积引擎310-1至310-i各自被配置为执行从系数缓冲器400 接收的滤波器数据和从输入数据缓冲器200接收的输入数据的卷积。 在每个周期,卷积引擎310-1至310-i各自执行多个权重中的相同权 重集合与对应于不同输出位置的窗口的卷积。
例如,可以在卷积引擎的特定处理阶段处理输入数据的窗口。在 这个阶段,窗口可以基于正被处理的层中权重的尺寸而被限定在特定 位置。对于该示例,假设m=3且n=3。因此,尺寸为3×3的数据窗 口从输入数据缓冲器200被取回,并且被传递到每个卷积引擎。示例 性窗口550在图3中示出。每个卷积引擎310-1至310-i都提供有要 应用于特定层的多个滤波器中的相同滤波器,然后执行卷积运算。然 后,对于具有所提供的滤波器的每个卷积引擎,输入数据的窗口被传 递到卷积引擎。每个卷积引擎处的每个滤波器都应用于特定的窗口位 置。跨越卷积引擎共同应用的滤波器可以被认为是各自定位在输入数 据空间中的不同位置处的窗口集合。在后续读取周期中,如果并不是 完成处理所需要的所有输入数据都已经被传递到用于特定窗口集合 的卷积引擎(例如,并不是这组窗口的所有的P个数据平面都已经被 传递到卷积引擎),则将该组窗口的另外的输入数据传递到卷积引擎。 一旦特定的一组窗口的所有数据都已经被卷积引擎处理,则跨卷积引 擎310-1至310-I应用的窗口集合沿着数据空间被移动到新的位置集 合,并且该过程被重复。跨越输入数据的窗口集合的这种变换可以以 栅格化方式执行,其中该窗口集合在水平方向上有效地从输入平面的 最左上角的原点位置遍历(即,坐标y是固定的,并且坐标x增加)。 一旦输入数据的行被遍历,则数据返回到下一行的开始(或者根据滤 波器的跨度t,遍历多行输入数据)。在每个(x,y)位置处,可以在 增加x之前从输入数据缓冲器读取从坐标p=0到p=P的所有数据值。
因此,对于应用于输入数据的每个窗口,从输入数据缓冲器200 读取输入数据并且将其传递到卷积引擎300。然而,输入数据缓冲器 可能需要多个时钟周期来从输入数据缓冲器200取回数据。例如,输 入数据可能很大(例如,x、y或p很大)。在这种情况下,可能需要 将相对大量的数据传递到用于CNN的单个层的卷积引擎300。从输 入数据缓冲器200读取数据时的限制因素是可以在特定的读取周期 (例如,单个时钟周期)内从输入数据缓冲器物理地读取的数据量。 因此,期望实施能够使从输入数据缓冲器到卷积引擎的数据吞吐量最 大化的输入数据缓冲器。
在一些布置中,输入数据可以以准平面格式被存储在存储器600 中,其中多个准平面的平面可以以交织格式存储。数据可以按固定尺 寸的平面被存储在存储器600中。固定尺寸可以对应于存储器600的 突发尺寸。具体地,特定位置(x,y)处的数据值被一起存储在存储器 600中用于固定的预定数目的平面。例如,位置(x,y)处的数据值可 以存储在平面索引0到P之间的连续的存储器位置中。数据可以存储 在存储器600中并且从存储器600连续地读取。在其他布置中,连续 地存储的平面数目可能更大,使得准平面型平面被分隔成多个子平 面,每个子平面存储用于特定位置(x,y)的数据的固定数目的平面。 坐标(x,y,p)的这种数据格式的示例如下表所示,其中P=16,但是 只有八个平面值连续地存储在一起:
8≤p≤15的后续平面如下所示:
如上所述,每个准平面型平面的尺寸通常根据存储器600的突发 尺寸来限定。因此,在X和Y足够小使得平面的特定子范围(例如, 8≤p≤15)的输入数据符合存储器600的突发尺寸的情况下,可以将 平面的子范围的所有输入数据值拟合在准平面内。如果要用于准平面 型平面所存储的数据总量小于突发尺寸,则存储器被填补以相当于突 发的存储器的剩余部分,并且下一准平面型平面存储在存储器下一部 分中。
然而,在其他布置中,X和Y的尺寸可以使得并非特定平面的所 有数据值都被拟合在准平面内。在这种情况下,平面的特定子范围的 输入数据被分成多个准平面型平面。
根据数据格式,存储器600可以在存储器内的连续的位置存储跨 越所有平面(或平面的预定子范围)的坐标(x,y)处的所有值。以这 种方式,可以按照以下顺序从存储器600连续地取回这些值:(0,0,0)、 (0,0,1)、...、(0,0,P-1),其中(0,0,0)表示平面的最左边的值。 在一些布置中,存储在存储器600中的每个平面具有固定尺寸。以这 种方式,存储在平面中的数据量是固定的,但是除了平面的尺寸(由 X和Y所限定),存储在单个准平面型平面中的序列的比例将取决于 平面的总数P。每个位置被存储在存储器600中,并且因此以栅格化 的方式连续地从存储器600中被取回。以这种方式,对于平面的子范 围,连续地存储从(0,0)至(X-1,0)的第一行值。然后,存储从(0,1) 至(X-1,1)的第二行值,并且重复该过程,直到存储最后一行(0,Y-1) 至(X-1,Y-1)。
因此,存储在存储器600中的数据以向所存储的数据提供局部性 的方式被存储。在CNN中,将滤波器应用于窗口内的输入数据,然 后将滤波器应用于后续窗口,使得滤波器以栅格化的格式跨越平面被 应用(如图3所示),这受限于定义的滤波器步幅。通过以这种方式 将数据存储在存储器600中,不需要从存储器加载大量的连续值,以 便获得并且在输入数据缓冲器中保留将被应用的下一滤波器所需要 的输入数据值。类似地,滤波器被应用于跨所有平面的位置。以这种 方式,可以以与在CNN内处理数据的顺序有关的方式取回数据。因 此,以突发方式从存储器取回数据是有效的,同时使从存储器600取 回有用数据所需要的突发数目最小化。
从存储器600取回的输入数据被存储在输入数据缓冲器200中的 多个不同的组210-0至210-(NB-1)中。输入数据缓冲器200中的组的 数目由NB所限定并且通常是2的幂。由于从存储器600读取的数据 以连续的方式读取,并且具有与卷积引擎将使用数据的顺序相关的某 些局部性的几何图形,所以期望一种确定用于以使得能够减少或消除 组冲突并且最大化吞吐量的方式将数据存储到组和从组取回数据的 寻址方案。此外,由于输入数据和滤波器的尺寸在层之间可能不同, 因此期望确定在不同层的数据格式之间可适配的寻址方案。
在一些布置中,仅可以在每个时钟周期中从输入数据缓冲器200 的每个组中的单个地址读取。以这种方式,发明人已经认识到需要建 立一种能够确保从输入数据缓冲器读取的数据量对于每个读取周期 最大化和一致的寻址方案。换言之,发明人已经认识到,在读取周期 期间需要从存储器的同一组读取的多个输入数据值可能导致存储器 内的组抵触或冲突。这样的抵触意味着需要在后续读取周期期间读取 需要在相同读取周期期间访问的两个或更多个数据元素中的一个,这 降低了从输入数据缓冲器200到卷积引擎300的数据吞吐量(和数据 吞吐量的一致性),并且从而降低了CNN的硬件实施方式的处理速 度并且降低了功耗。
具体地,在一些布置中,可能需要以确保从组输出的数据可以被 最大化的方式将输入数据放入输入数据缓冲器的存储器组中。这意味 着,在输入数据缓冲器的每个读取周期,来自缓冲器的每个组的输入 数据值被访问。为此,需要为输入数据缓冲器的组建立寻址方案,以 确保数据被正确地分配给存储器的各个组。
发明人已经认识到,尽管可以确定静态寻址方案,其能够使针对 CNN的给定层的特定参数集的数据输入缓冲器200到卷积引擎300 的数据吞吐量最大化,即对于输入数据和权重(滤波器)数据的给定 维度,某些寻址方案对于具有不同维度的其他层可能不太优选。例如, 在CNN中,输入数据的维度可以在层之间变化,使得为第一层提供 高吞吐量的寻址方案可能不为后续层提供有用的吞吐量。在图像处理 的示例中,第一层的数据格式可以涉及RGB空间中的图像的分辨率。
根据本公开的一个或多个示例的寻址方案如下。本文中阐述的寻 址方案是动态的,因为用于特定层的精确寻址方案可能与其他层中使 用的寻址方案不同。换言之,寻址方案可以在每个层中适应输入数据 的格式和滤波器数据的格式。寻址方案可以取决于输入数据的维度以 及特定层的滤波器权重的维度以及卷积引擎处理输入数据的方式。由 于要应用的滤波器的维度变化,所以寻址方案可以被配置为与该层的 输入数据的维度相对应。类似地,卷积模块所需要的具体输入数据可 以取决于要应用的滤波器的维度。以这种方式,要使用的寻址方案取 决于要应用的滤波器的维度。本文中描述的寻址方案提供了用于将输 入数据存储在输入数据缓冲器的存储器的组中的方法,而不管数据和 滤波器维度如何。
图21示出了实施根据本公开的可以针对要实施的CNN的每个层 执行的寻址方案的方法。例如,示出了方法2100,其中在步骤2110 接收输入数据。输入数据包括要在CNN的层中处理的输入数据值。 方法2100还包括在步骤2120处确定缓冲器的组存储器中的地址,其 中所接收的数据值要根据指示层中的输入数据的格式参数以及指示 要用于处理层中的输入数据的滤波器的格式参数的格式数据来存储。 在步骤2130,将输入数据值存储在缓冲器中的所确定的地址用于取回 以在该层中处理。以下提供了解决方案及其实施方式的示例。
如图4所示,输入数据缓冲器200被配置为存储器的NB个组(210-0 至210-(NB-1)),其中NB通常是组数目的2的幂。每个组具有MEMSIZE 个地址,使得输入数据缓冲器200的总尺寸由NB*MEMSIZE给出。
为了描述下面列出的示例,假设每个存储器字用于存储单个输入 数据值。在一些布置中,可以将动态数目的平面和动态数目的数据值 打包成单个存储器字。为了实施这一点,值P和X可以在以下等式中 用相应的值来替换,其中PKp是被打包成单 个存储器字的平面单元的数目,其中PUW是被打包成单个平面单元 的多个平面的平面数P,并且其中PKx是被打包成单个存储器字的x位 置的数目。在多个平面或数据值被存储在单个存储器字中的情况下, 值P、M、X、x和p将被替换为地址计算中的下列相应值,替换值对 应于原始值但是具有字符“′”:
通常,输入数据缓冲器200中的存储器位置可以使用两个值来寻 址。第一值BANKSEL表示数据值所在的存储器的组,其中 0≤BANKSEL≤NB-1。第二值MEMADDR表示特定组的存储器位置, 其中0≤MEMADDR≤MEMSIZE-1。图4示出了由散列线表示的输入数据 缓冲器200中的四个示例位置。第一位置在组0中示出,并且 BANKSEL值为0,MEMADDR值为128。第二位置在组1中示出,并 且BANKSEL值为1,MEMADDR值为57。第三位置在组2中示出, 并且BANKSEL值为2,MEMADDR值为193。第四位置在组NB-1中 示出,并且BANKSEL值为NB-1,MEMADDR值为234。
寻址方案——第一实施方式
在寻址方案的第一示例中,输入数据值以可以被称为M*N*P读 取方法的交织方式存储在外部存储器中。
寻址方案确定从存储器读取输入数据的每个值在输入数据缓冲 器中的位置,使得在输入数据空间中的(x,y,p)坐标与输入数据缓冲 器中的BANKSEL和MEMADDR值之间存在一一对应关系。具体地, 寻址方案用于生成MEMADDR和BANKSEL值。然后,每个输入数据值被存储在输入数据缓冲器中基于针对MEMADDR和BANKSEL所计 算的值的位置处。
在计算输入数据值的MEMADDR和BANKSEL值之前,针对要处 理的特定层标识值WordsPerLine。该值可以基于所接收的参数值来计 算,或者可以被明确地提供。WordsPerLine值提供关于跨越所有NB个组中要使用的存储器字的数目的指示,以表示跨越所有输入平面P 的一行输入数据值。例如,P*X是跨越输入数据空间的行(row)或 排(line)的输入数据值的数目。值WordsPerLine表示存储一行输入 数据所需要的存储器的每个组的字的数目。该计算对跨越所有存储器 组的下一完整数目的字执行有效的“舍入(rounding)”。也就是说, 如果在到达最后一个存储器组之前,将一行输入数据写入存储器中, 则下一存储器地址用该行的剩余组被填充。
例如,如果NB=8并且(P*X)=5,然后将该值向 下舍入为1并且乘以NB以得到值WordsPerLine=8。因此,为了表示 一行输入数据值(跨越所有P个平面),需要8个字的存储器。以这 种方式,使用一行存储器来表示输入数据值。在另一示例中,如果 NB=8并且(P*X)=10,则当向下舍入时,导致WordsPerLine=16。因此,需要超过8个字的存储器来存储一行输入 数据值。因此,两行完整的存储器用于表示输入数据单行中的值,即 使最后一行将被部分填充。虽然这降低了存储器使用效率,但是由于 各个输入数据行彼此分开地存储,所以这种方法使得可以避免组冲突。
随后,为每个输入数据值确定MEMADDR和BANKSEL的值。具 体地,MEMADDR由以下等式确定,其中x,y,p表示输入数据值的坐 标,P表示输入数据的平面总数,p表示平面索引,m表示滤波器宽 度:
BANKSEL(x,y,p)=(x*P+p+y*m*P)%NB
在图5至7中示出了实施方式的寻址方案的应用的示例,其中 NB=8,m=2,X=3并且P=5。图5示出了存储有输入数据值的输入数 据缓冲器的存储器位置。存储器位置可以通过从0到7的组编号和相 应组中的地址位置(MEMADDR)来标识。例如,左上角的存储器位置由MEMADDR=0和BANKSEL=0来标识,右下角值由MEMADDR=7 和BANKSEL=7来标识。在该示例中,每个存储器位置存储单个输入 数据值。存储在存储器位置的每个输入数据值由三个坐标(x,y,p)表 示,它们表示从输入数据空间中取回该值的的相应坐标。输入数据缓 冲器中的输入数据值的位置根据上述寻址方案等式被确定,并且根据 该示例,所得到的值如图5所示排列。
从图5可以看出,使用竖直线突出显示了四个单元格。这些单元 格表示输入数据的新行。从图5还可以看出,由于WordsPerLine计 算,存在用于填充的存储器位置(在图中使用术语“PAD”引用)。
图6的示例示出了通过多个读取周期从输入缓冲器读取并且提供 给卷积引擎的数据。具体地,图6示出了根据图5的示例在将2×2 滤波器应用于输入数据平面期间,从输入数据缓冲器读取并且提供给 卷积引擎的数据。在每个阶段,滤波器被应用于输入数据的四个不同 (x,y)位置的所有P个平面。滤波器通过根据水平步幅s遍历输入数 据的一行来以栅格化的方式遍历输入数据,然后基于竖直步幅t以递 增的竖直位置重复遍历。在图6(a)所示的第一阶段,滤波器被应用 于位置(0,0,p)、(0,1,p)、(1,0,p)和(1,1,p)的所有P个平面。 在图6(b)所示的第二阶段,滤波器被应用于位置(1,0,p)、(2,0,p)、 (1,1,p)和(2,1,p)的所有P个平面。在图6(c)中,滤波器在第三 阶段被应用于位置(0,1,p)、(1,1,p)、(0,2,p)和(1,2,p)。在图 6(d)中,滤波器在第四阶段被应用于位置(1,1,p)、(2,1,p)、(1,2,p) 和(2,2,p)。在图6(e)中,滤波器在第五阶段被应用于位置(0,2,p)、 (1,2,p)、(0,3,p)和(1,3,p)。在图6(f)中,滤波器在第六阶段 被应用于位置(1,2,p)、(2,2,p)、(1,3,p)和(2,3,p)。应当理解, 如稍后将说明的,在其他布置中,滤波器可以以不同的方式遍历输入数据。
图6示出了从输入数据缓冲器取回要传递到卷积引擎的输入数据 值的多个阶段。从输入数据缓冲器取回的输入数据基于卷积引擎,卷 积引擎根据图5所示的跨越输入数据的滤波器的遍历来要求输入数 据。可以理解,存储器600可以被配置为使得该阶段可以根据存储器 的读取带宽被分成多个读取周期。读取带宽可以被认为受到组数目的 限制,因为在单个读取周期中只能从每个组读取一个字。因此,期望 每个读取周期从输入数据缓冲器取回NB个字(例如,输入数据值), 而不发生组冲突。在单个读取周期中需要的两个或更多个输入数据值 位于存储器的同一组中时,组冲突将会发生。如下面的示例所示,通 过使用示例寻址方案,避免了每个读取周期的组冲突。
图7(a)至7(c)各自示出了用于从输入数据缓冲器读取图6 (a)所示的第一阶段所需要的输入数据的连续读取周期。如下面进 一步详细说明的,需要三个读取周期来读取图6(a)中的第一阶段的 所有输入数据值。
图7(a)示出了在第一读取周期期间读取的输入数据缓冲器中的 存储器位置。具体地,短划线表示在读取周期中读取的存储器位置。 从图7(a)可以看出,从输入数据缓冲器读取八个输入数据值,来自 输入数据缓冲器的每一组各一个数据值。从输入数据缓冲器读取的所 有八个输入数据值都被存储在不同的存储器组中,并且因此可以在单 个周期内被全部读取,而不会发生组冲突。
图7(b)示出了在第二读取周期期间读取的输入数据缓冲器中的 存储器位置。从图7(b)可以看出,从输入数据缓冲器读取八个不同 的输入数据值,来自八个存储器组中的每个组各一个数据值。在图7 (b)中,可以看出,从不同的MEMADDR位置读取一些数据值。具体地,值(1,0,3)和(1,0,4)从MEMADDR=1读取,值(0,1,0)、 (0,1,1)、(0,1,2)、(0,1,3)、(0,1,4)、(1,1,0)从MEMADDR=2 读取。然而,由于每个值都是从不同的存储器组读取的,因此在同一 读取周期内可以读取所有八个值,而不会发生组冲突。图7(c)示出 了图6(a)的滤波器位置的第三读取周期,其中读取最后的四个输入 数据值。
图6(b)示出了在通过滤波器处理输入数据期间的第二滤波器位 置,图7(d)至7(f)分别示出了用于从输入数据缓冲器读取卷积 引擎执行计算所需要的输入数据值的三个读取周期中的读取周期。具 体地,图7(d)示出了第二滤波器位置的第一读取周期,其中从输入 数据缓冲器读取八个输入数据值。从图7(d)可以看出,八个输入数 据值被读取而不发生组冲突。
此外,应当注意,在图7(d)的读取周期期间,也读取在图7(a) 的读取周期期间所读取的输入数据值中的一些,即(1,0,0)、(1,0,1) 和(1,0,2)。这对应于图6(a)和6(b)中的交叠的滤波器位置。 用于将输入数据值存储在输入数据缓冲器中的寻址方案确保了在图7(a)或7(d)的读取周期中读取这些值不会导致与要在相应的读取 周期期间读取的其他输入数据值的组冲突。例如,在图7(d)的布置 中,要从输入数据缓冲器读取的其他五个输入数据值要从 MEMADDR=1、BANKSEL=0至4来读取。如在图7(e)和7(f)中 分别示出的第二滤波器位置的第二和第三读取周期可以看出,不发生 组冲突,并且从输入数据缓冲器输出的数据量为NB
由于输入数据的结构,可以示出,可以有效地在一个水平位置写 入NB个交织平面。对于固定的x和y,在p%NB与(y*M*P+x*P+p)%NB之间存在一一对应关系,因此BANKSEL值对于每个p%NB而言不同, 并且没有发生组冲突。
寻址方案——第二实施方式
第一实施方式的布置被配置为使得输入数据将以p->x->y顺序 从输入数据缓冲器读取。也就是说,来自每个平面的位置(0,0)处的 输入数据值首先被读取,并且被传递到卷积引擎以进行处理。然后, x坐标被递增,并且来自每个平面的(1,0)处的所有输入数据值被读 取,并且被传递到卷积引擎以进行处理。一旦行(x,0)完成,坐标y将 递增,并且针对行(x,1)重复该过程。
在一些实施方式中,可能期望将每个(x,y)坐标位置的单个平面 值从外部存储器读入输入数据缓冲器。在其他实施方式中,可能期望 将每个(x,y)坐标位置的平面值的子集从外部存储器读入到输入数据 缓冲器。通过以这种方式从外部存储器取回数据,可以将数据有效地 存储在输入数据缓冲器中,以便允许在一行内向输入数据缓冲器中写 入平面的子集。在数据在外部存储器中在平面子集内被格式化的上下 文中,这种方法是有效的。因此,当数据在外部存储器中在平面子集 中被排序时,例如通过利用存储器读取的突发,可以有效地以该格式 从外部存储器取回该数据。然而,按照所接收的顺序跨越输入数据缓冲器的行存储数据可能导致输入数据缓冲器的后续读取效率低下。
在本文中描述的第二实施方式中,设置了修改的寻址方案,其被 配置为使输入数据值能够在输入数据的平面的子集中存储在输入数 据缓冲器中。第二寻址方案根据以下等式应用,其中NPU=2除P的 最大幂,最大为NB对于任何值0≤x<NPU,Reverse(x) 被定义为反转x的所有Log2(NPU)二进制数字的结果。
在图8、9和10中列出了第二实施方式的第一示例,其中P=2, W=8和NB=8。图8、9和10与第一实施例的图的不同之处在于,存 储器的阴影部分指示在单个写入周期期间被加载到输入数据缓冲器 中的输入数据值(在第一实施方式中,它们指示在单个写入周期期间 从输入数据缓冲器读取的输入数据值)。
图8示出了第二实施方式的第一示例的输入数据维度。在该第一 示例中,数据从外部存储器中读取,并且一次单个平面地写入输入数 据缓冲器。图9示出了要写入输入数据缓冲器的前两行的输入数据值。
图8、9和10所示的实施方式与第一实施方式的不同之处在于, 在从外部存储器读取数据和将数据写入输入数据缓冲器期间,还向硬 件提供另外的变量NPW。NPW表示一次从外部存储器读入输入数据 缓冲器的平面数。在下面的示例中,NPW是2的幂,其小于或等于NPU,其中NPU是2除P的最大幂,最高为NB的最大值。
图10(a)和10(b)示出了将数据写入输入数据缓冲器的两个 不同示例。在图10(a)中,NPW=1,并且因此输入数据值一次一个 平面地被写入输入数据缓冲器。图10(a)中的阴影存储器位置示出 了在第一写入周期期间被写入输入数据缓冲器的输入数据值(以及输入数据空间中的那些数据值的位置的可视化表示)。如图10(a)可 以看出,数据被写入到输入数据缓冲器,而不发生组冲突。类似地, 图10(b)示出了其中NPW=2的布置。再次,图10(b)中的阴影存 储器位置示出了在第一写入周期期间被写入存储器的输入数据值。可 以看出,在图10(b)的情况下,在将数据写入输入数据缓冲器期间 没有发生组冲突。第二实现允许一次单个x,y位置(以及跨所有平面) 地从存储器读取数据。例如,从图10(a)和10(b)可以看出,通 过读取输入数据缓冲器的行0,在x,y坐标(0,0)、(1,0)、(2,0) 和(3,0)的两个平面处的输入数据值可以从输入数据缓冲器的一行被 读取。
在图11、12和13中示出了第二布置的另一示例,其中P=8。图 11示出了数据维度,图12示出了将被存储在存储器中的所得到的输 入数据值,图13示出了用于将数据写入不同值的NPW的输入数据缓 冲器的很多不同方法。图13(a)示出了已经从外部存储器读入数据 到NPW=8的输入数据缓冲器中的布置。因此,在第一写入周期期间, 针对每个位置读取所有数据平面,因此只从外部存储器读取p=0的输 入数据值并且将其加载到输入数据缓冲器中,即值(0,0,0)至(7,0,0)。 图13(a)中的阴影位置示出了在第一个写入周期中写入输入数据缓 冲器的输入数据值。从图13(a)可以看出,在第一写入周期期间, 八个不同的值被写入输入数据缓冲器,而在第一写入周期期间没有发 生组冲突。
图13(b)示出了已经从存储器读入数据到NPW=4的输入数据 缓冲器中的备选布置。在这种布置中,从每个(x,y)坐标的前四个平 面按顺序被读取。因此,对于每个x,y坐标,首先写入坐标(x,y,0)、 (x,y,1)、(x,y,2)和(x,y,3)。换言之,每个(x,y)位置的前四个平面索引首先被写入。从图13(b)可以看出,在单个写入周期期间 (每个写入的输入数据值都有阴影),八个值被写入输入缓冲器,而 不会发生组冲突。图13(c)示出了其中NPW=2的另外的布置,图 13(d)示出了NPW=1的另一布置。在图13(c)的布置中,在单个 写入周期中,写入来自连续x,y坐标的两个输入数据值,即前两个平 面索引。在图13(d)的布置中,在输入数据缓冲器中在连续的x,y 坐标处读取单个输入数据值,即第一平面索引。从图13(c)和13(d) 可以看出,在单个写入周期中输入数据值被写入的MEMADDR位置 的数目随着NPW的减小而增加。对于图13的所有示例,可以看出, 尽管以与第一实施方式不同的顺序接收输入数据,但是避免了组冲 突。
在这些布置中,可以看出,第二实现的寻址方案以避免冲突的方 式将输入数据存储在输入数据缓冲器,而不管将数据写入输入数据缓 冲器的不同的可能方案(基于NPW的值)。在这些布置中,NPW可 以2的幂,其大于或等于NPU,其中NPU是2除P的最大幂,直到 NB的最大值。
寻址方案——第三实施方式
上述第一和第二实施方式在CNN的层中具有特殊应用,其中竖 直步幅t被设置为1。在一些实施方式中,例如在某些层中,竖直步 幅t可能大于1。当t=1时,滤波器沿特定的输入数据行被应用,并 且滤波器的竖直位置递增1,从而导致n-1行的滤波器交叠。然后在滤波器的竖直位置再次递增1之前,滤波器沿着行输入数据被传递。 相反,当t>1时,滤波器的竖直位置递增t,并且滤波器交叠为n-t。
在图14至16中示出了遍历横向步幅为2的输入数据的滤波器的 示例,使得P=5,m=2,x=3并且t=2。在图14(a)和14(b)中, 沿着输入数据行的第一传递由滤波器执行。在图14(c)中,滤波器 已经完成了沿着输入数据行的传递,并且滤波器返回到行的起始以执行后续传递。然而,与先前描述的布置不同,滤波器不会在竖直位置 递增1。相反,滤波器的竖直位置递增2。在图14(d)中,滤波器的 第二传递完成。可以认为竖直步幅中的这种变化可以改变沿着输入数 据行的传递期间有效地“消耗”的行数。例如,在图6的布置中的第 一传递完成之后,后续传递不再需要第一行数据。这可以在图6(c) 和(d)中看出,其中第一行输入数据不被使用。因此,第一行数据 被视为“消耗”,因此可以用其他输入数据替换以供以后使用。相反, 在图14中的滤波器的第一传递之后,两行被“消耗”。这可以在图 14(c)和(d)中看出,其中前两行不再被使用,因此可以被替换。
寻址方案的第三实施方式修改寻址方案以解决大于1的滤波器步 幅。第三实施方式根据以下等式实现寻址方案:
BANKSEL(x,y,p)=(x*P+p+y*m*P)%NB
其中t表示滤波器的竖直步幅,y0表示要处理的滤波器的第一行 的竖直位置,其中滤波器的第一行不是输入数据的第一行。因此,y0表示基于要施加的步幅的滤波器的位置的偏移。从上述等式可以看 出,对于每个输入数据值的BANKSEL值的计算与上述第一实施方式 的相应的BANKSEL计算相同。第一和第三实施方式之间的 MEMADDR计算的差异是MEMADDR计算可以分为两个不同的计算。 第一计算确定MEMADDRunwr值,它是使用模数计算未包绕(wrap) 到MEMSIZE的MEMADDR值的未包绕版本。使用针对特定输入数据 值的修改后的x、y和p坐标来执行MEMADDR计算。特别地,基于 y0偏移值来修改y坐标。
使用该方法将输入数据值存储在输入数据缓冲器中的结果是,当 与第一实施方式相比时,使用该方法存储数据的输入数据缓冲器中的 MEMADDR行相对于第一实现被交织。该寻址方案在输入缓冲器的尺 寸仅足够大以处理CNN的特定层的输入数据的情况下具有特殊应 用。在某些情况下,为了有效的处理,输入缓冲器可能需要至少保存 n+t-1行数据。这是因为在先前描述的实施方式中,当处理输入数据 空间的行时,只有单行数据被“消耗”(即,不再需要单行数据并且 其可以被覆盖)。如果输入数据缓冲器保持n行数据,则对于t>1, 如果一行数据完成,则缓冲器在继续处理之前必须等待t-1行数据从 存储器中被取出,这可能会导致处理上的间隙。
输入数据缓冲器被设计为接收数据流并且生成数据流,由于涉及 %MEMSIZE的MEMADDR计算,MEMADDR位置包绕输入数据缓冲 存储器。实际上,可以将保持在输入数据缓冲器中的“未包绕”地址 的范围人为地限于MEMSIZE,使得输入到输入数据缓冲器中的新数据不会覆盖在滤波器窗口中仍待处理的数据。
极端情况是其中t=n(其中n>1)的情况。在这种情况下, MEMADDR需要跨越一行的地址,但是第三实施方式的调整后的 MEMADDR计算保持连续地址中输出位置的所有相关数据。因此,输 入数据缓冲器能够处理任意大的图像宽度,从而保持有限的地址范 围。
图15和16中列出了寻址方案的第三实施方式的示例。图15的 布置对应于图5的布置。具体地,在图5和15的两个布置中,P=5, m=2,X=3并且NB。布置的不同之处在于,在图5中,t=1,在图15 中,t=2并且y0=0。图15示出了根据第三布置的寻址方案,在所接收 的输入数据已经被存储在输入数据缓冲器中之后输入数据缓冲器的 前八个MEMADDR行的内容。可以看出,输入数据值行相对于图5 中的相应位置被有效地交换了位置。具体地,当比较根据第一和第三 实施方式存储的数据值时,在MEMADDR=1和MEMADDR=2处的输 入数据值有效地交换位置,具有在MEMADDR=5和MEMADDR=6的 输入数据值。
图16(a)至(l)示出了根据第三实施方式的t=2的读取周期数。 从这些图可以看出,从输入数据缓冲器读取每个读取周期输入数据 值,并且不发生组冲突。
在一些布置中,可以将用于第二实施方式的寻址方案与用于第三 实现的寻址方案组合,以便执行寻址,其中选择平面的子集并且其中 竖直步幅t>1。以这种方式,可以根据第三实施方式来执行MEMADDR 计算,并且可以根据第二实施方式来执行BANKSEL计算。
寻址方案——第四实施方式
在一些布置中,可能期望以不同的顺序从输入数据缓冲器取回数 据。这特别适用于CNN的特定层,诸如归一化和池化层。以前的实 施方式可以用于按照以下称为p->x->y顺序的顺序从输入数据缓冲 器200读取数据的实施方式,因为数据按照其中p坐标为首先递增特 定的(x,y)位置的顺序被读取,直到所有适当的值都被读取。然后, 对于每个递增的x位置,x坐标递增,并且连续读取适当的p值,直 到读完整行。最后,y坐标递增,下一行被读取。
在另一实施方式中,输入数据可以以本文中称为“平面列主要” 读取格式的不同顺序从输入数据缓冲器读取。这种读取方法可以被认 为是p->y->x顺序。读取特定(x,y)位置的所有相关p值之后,y坐 标取而代之递增,并且该过程重复,直到读取特定列的所有y位置的 所有相关p值。然后,x坐标递增到下一列,并且该过程从以下列的 顶部重复。因此,在以前的方法是指以栅格化的格式读取数据的情况 下,在该实施方式中使用的方法切换x和y坐标以按照逐列方式读取 数据。数据读取顺序的示例如图17所示。
在这种布置中,可以使用寻址方案的第四实施方式。在该第四实 施方式中,可以应用算法来向输入数据值分配输入数据缓冲器内的存 储器位置。以下伪代码可用于定义算法:
其中N2被计算为NB和2除N的最大幂中的最小值,其中N限定 应用于输入数据的滤波器的高度,并且其中P2被计算为NB和2除P 的最大幂中的最小值。N'被计算为N/N2模NB/N2的反函数。例如,3 模16的反函数为11,因为(3*11)模16为1。
图18至20中列出了以上限定的第四实施方式的示例,NB=4,P=1,X=5,s=t=1,并且m=n=3。图18示出了在第四实施方式中的层的处 理期间用于滤波器的六个不同的窗口位置。与先前描述的布置相反, 数据以不同的顺序被取回。例如,在图18(a)中,滤波器位于数据 空间的左上角。然后,将滤波器向下传送到列,直到该列中的数据被 读取,如图18(c)所示。然后,如图18(d)所示,滤波器位置根 据水平步幅s水平地递增。图19示出了使用上述第四实施方式的寻 址方案来存储数据值的输入数据缓冲器中的位置。如图19所示,提供了存储器的四个组,每个组由一列表示其中最左列为组0的列和最 右列为组3。MEMADDR值在图19的右侧示出。其中没有存储数据 值的部分存储器(即填充位置)由术语“PAD”引用。
图20(a)至20(i)每个示出用于读取数据的单独读取周期,该 数据一起允许从图18(a)至(c)的窗口位置读取数据。图20(a) 示出了从图18(a)的窗口位置所需要的部分数据被读取的第一读取 周期。图20(b)示出了读取图18(a)所需要的数据的第二部分的 第二读取周期。在图20(c)中,用于读取图18(a)所需要的数据 的数据的最后部分被执行。对于图18(b)所示的滤波器位置(见图 20(d)至20(f)和图18(c)所示的滤波器位置(参见图20(g) 至图20(i))的类似读取周期(在此示例中为数据空间中的每个滤 波器位置三个)。
从图18至图20的第四实施方式可以看出,数据以逐列顺序读取。 在这种布置中,数据以意识到数据和滤波器格式的方式跨越存储器组 被定位。因此,可以在没有(或其他实现最小化)组冲突的情况下从 组中读取数据。以这种方式,从输入数据缓冲器到卷积引擎的数据吞 吐量快且一致。应当理解,填充程度(因此使用输入数据缓冲器的容 量的效率)取决于输入数据缓冲器和滤波器的具体维度。某些格式可 能比其他格式使用较少的填充。
游标
可以通过消除所需要的一些算术来简化上述布置的实施方式。具 体地,可以从通过从层参数导出的变量(即滤波器和数据格式信息) 的加法和减法的实施方式中消除算术。在一些布置中,格式值可以从 外部源传递到硬件加速器(例如经由提供值的驱动程序)。例如, (s*P)和(t*WordsPerLine)可以作为预计算的值(连同或代替特定 格式参数)被提供。在一些布置中,这些值可以由硬件加速器计算, 因为诸如乘法等计算可以相对有效地被执行。
可以通过将“游标”值保留到显著位置来消除算术,诸如:
当前输出行和列的起始的(0,0,0)滤波器值;
当前输出行和列的起始的(0,y,0)滤波器值;
当前输出行和列的起始的(x,y,0)滤波器值;以及
当前输出行和列的起始的(x,y,p)滤波器值。
其中x<X,y<Y并且p<P。当这些游标值之一需要更新时,其 可以通过对其自身或先前的游标值的小的改变而导出。在一个实施方 式中,可以将游标视为以下形式的二值数组:
Cursor(x,y,p)=(RasterAddr(x,y,p),RAMSEL(x,y,p)
其中
RasterAddr(x,y,p)=(x*P+p+y*WordsPerLine)%(RAMSIZE*NB)
使得对于任何层参数Δx、Δy 和Δp(例如,其中Δx是x的变化,Δt=0并且Δp=0)。在一些布局 中,可以通过用于以前描述的第一实施方式的以下伪码来有效地计算 Cursor(x+Δx,y+Δy,p+Δp)的值:
RasterAddr’=RasterAddr(x,y,p)+Δx*P+Δp+Δy*WordsPerLine
if RasterAddr’<MEMSIZE*NB
RasterAddr(x+Δx,y+Δy,p+Δp)=RasterAddr’
else
RasterAddr(x+Δx,y+Δy,p+Δp)=RasterAddr’–MEMSIZE*NB
endif
RAMSEL(x+Δx,y+Δy,p+Δp)=(RAMSEL(x,y,p)+Δy*M*P+Δx*P+Δp)%NB.
可以对其他实施方式进行类似的游标计算。
本文中描述的寻址方案用于被配置为在CNN的硬件实施方式中 使用的输入数据缓冲器。输入数据缓冲器被配置将输入数据例如保留 或保持在易失性存储器中。以这种方式,输入数据缓冲器200与存储 器600的不同之处在于,它可以是在CNN硬件实施方式内部,并且 可以临时存储要提供给卷积引擎的值的输入数据值。输入数据缓冲器 减少了对于从存储器(例如,外部存储器)多次读取数据的需要。以 这种方式,改进的输入数据缓冲器寻址方案也提高了***的存储器带 宽。
在一些布置中,硬件逻辑(例如,硬件加速器)可以被配置为实 施CNN。在一些布置中,硬件逻辑可以被配置为实施任何CNN。例 如,硬件逻辑可以被配置为接收限定要实施的CNN的滤波器和要在 每个层处理的数据的格式的数据,以便根据滤波器处理输入数据。在被配置为实施CNN的硬件逻辑中,从卷积引擎310输出的数据可以 被(直接或间接地)传递到输入数据缓冲器或存储器600。以这种方 式,在第一层中从卷积引擎输出的数据可以通过卷积引擎310被传回 (循环)并且在第二层中被处理。如前所述,从第一层输出的数据可以形成到后续层的输入数据,并且第一层的输入数据和滤波器的维度 可以不同于下一第二层的维度。
因此,输入数据缓冲器200可以被提供有包括要处理的每个层的 控制流数据的控制流。在配置硬件加速器时或在在CNN中处理输入 数据之前,可以从外部数据源接收控制流数据。控制流数据可以包括 指示输入数据的至少一个格式参数的数据。附加地或备选地,控制数 据流可以包括指示滤波器数据的至少一个格式参数的数据。例如,每 个格式参数可以指示用于处理该层的输入数据或滤波器数据的一个 或多个维度。例如,格式参数可以指示滤波器宽度m、滤波器高度n、 数据宽度X、数据高度Y、平面数P、滤波器数F、竖直滤波器步幅t 和/或水平滤波器步幅s中的一个或多个。控制流可以包括每个层的至 少一个格式参数。在一些布置中,至少一个格式参数可以在多个层之 间不同,并且因此应该在层被处理之前由控制器确定。
在一些实施方式中,可以使用其他机制来提供格式参数,而不是 接收作为控制流的部分的数据。例如,格式参数可以存储在存储器中, 并且当层被处理时被取回。
在一些布置中,输入数据缓冲器200的分组存储器可以是被配置 为使得能够以每个存储器组的单个读取周期取回数据的易失性存储 器。例如,在一些布置中,分组存储器可以采用分组RAM存储器的 形式。在其他布置中,输入数据缓冲器可以由其他类型的易失性存储 器形成。如下所述,输入数据可以由分组的非易失性存储器形成。
本文中提供的寻址方案适用于CNN硬件加速器内的输入数据缓 冲器寻址方案。由于输入数据空间的几何形状和滤波器的几何形状以 及两组值卷积的序列,本申请中列出的示例在CNN中具有特殊应用。 由于寻址方案能够利用与输入数据和/或滤波器数据的维度相关的数 据,所以寻址方案能够提高吞吐量。对于CNN,已知的参数集合用 于限定输入数据和滤波器数据的维度。以这种方式,输入数据和滤波 器数据的相对几何尺寸和形状以及两者彼此应用的方式使得能够实 施提供高吞吐量的寻址方案。本领域技术人员将理解,本文中阐述的 概念可以应用于其他技术领域,其中数据与其应当从缓冲器被取回的 顺序之间存在几何关系。
例如,在其他应用中,寻址方案可以考虑要存储在缓冲器中的数 据的一个或多个维度和/或与要应用所存储的数据的其他数据的维度 有关的信息。例如,寻址方案也可以适用于利用分组非易失性存储器 的地理信息***的数据分片。
在一些实施方式中,硬件逻辑100(例如,硬件加速器)可以包 括控制逻辑或控制模块(未示出),其被配置为管理由输入数据缓冲 器200使用的寻址方案。例如,控制逻辑可以被配置为接收针对输入 数据的至少一个格式参数和针对正被处理的层的滤波器数据的至少 一个格式参数,并且基于格式参数来执行寻址计算。控制逻辑还可以 被配置为控制输入数据缓冲器200,以根据计算地址位置将输入数据 放入输入数据缓冲器中。控制逻辑还可以被配置为接收输入和滤波器 数据中的至少一个的后续格式数据,并且在后续层中使用该格式数 据,以便处理该后续层。
图22示出了其中可以实施本文中描述的卷积神经网络硬件加速 器的计算机***。计算机***包括CPU 902、GPU 904、存储器906 和其他设备914,诸如示出器916、扬声器918和相机106。处理块 910在GPU 904上实施。在其他示例中,处理块910可以在CPU 902 上实施。计算机***的部件可以经由通信总线920相互通信。存储库 912被实施为存储器906的部分。
图22的卷积神经网络硬件加速器被示为包括多个功能块。这仅 是示意图,并不意图限定这些实体的不同逻辑元件之间的严格划分。 每个功能块可以以任何合适的方式提供。应当理解,本文中描述为由 卷积神经网络形成的中间值不需要由卷积神经网络在任何点物理地 生成,并且可以仅表示方便地描述卷积神经网络在其输入和输出之间 执行的处理的逻辑值。
本文中描述的卷积神经网络硬件加速器可以在集成电路上的硬 件中实施。本文中描述的卷积神经网络硬件加速器可以被配置为执行 本文中描述的任何方法。通常,上述功能、方法、技术或部件中的任 何一种可以在软件、固件、硬件(例如,固定逻辑电路)或其任何组 合中实施。本文中可以使用术语“模块”、“功能”、“部件”、“元 件”、“单元”、“块”和“逻辑”来表示软件、固件、硬件或其任 何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、 块或逻辑表示当在处理器上执行时执行指定任务的程序代码。本文中 描述的算法和方法可以由一个或多个处理器执行引起处理器执行算 法/方法的代码来执行。计算机可读存储介质的示例包括随机存取存储 器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以 及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由 机器访问的其他存储器件。
本文中使用的术语计算机程序代码和计算机可读指令是指用于 处理器的任何类型的可执行代码,包括用机器语言、解释语言或脚本 语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、 限定集成电路(诸如硬件描述语言或网表)的代码、以及以诸如C、 Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如 任何类型的软件、固件、脚本、模块或库,其当在虚拟机或其他软件 环境下被适当地执行、处理、解释、编译、执行时使支持可执行代码 的计算机***的处理器执行由代码指定的任务。
处理器、计算机或计算机***可以是具有处理能力使得其可以执 行指令的任何种类的设备、机器或专用电路或其集合或其部分。处理 器可以是任何类型的通用或专用处理器,诸如CPU、GPU、片上***、 状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、可 编程门阵列(FPGA)等。计算机或计算机***可以包括一个或多个 处理器。
它还旨在包括限定如本文中描述的硬件的配置的软件,诸如用于 设计集成电路或用于配置可编程芯片以执行期望的功能的HDL(硬件 描述语言)软件。也就是说,可以提供一种其上编码有集成电路限定 数据集形式的计算机可读程序代码的计算机可读存储介质,该数据集 当在集成电路制造***中被处理时配置该***制造被配置为执行本 文中描述的任何方法的卷积神经网络硬件加速器,或者制造包括本文 中描述的任何装置的卷积神经网络硬件加速器。集成电路限定数据集 可以是例如集成电路描述。
因此,可以提供一种在集成电路制造***处制造如本文中描述的 卷积神经网络硬件加速器的方法。此外,可以提供一种集成电路限定 数据集,其当在集成电路制造***中被处理时引起卷积神经网络硬件 加速器的制造方法被实施。
集成电路限定数据集可以是计算机代码的形式,例如作为网表、 用于配置可编程芯片的代码、作为限定任何级别的集成电路的硬件描 述语言、包括作为寄存器传送级(RTL)代码、作为诸如Verilog或 VHDL等高级电路表示、以及作为诸如OASIS(RTM)和GDSII等 低级电路表示。在逻辑上限定集成电路(诸如RTL)的较高级别表示 可以在被配置为在软件环境的上下文中生成集成电路的制造限定的 计算机***处被处理,该软件环境包括用于将这些元素组合以生成由 该表示限定的集成电路的制造限定的电路元件和规则的限定。通常, 与在计算机***处执行以限定机器的软件的情况一样,可能需要一个 或多个中间用户步骤(例如,提供命令、变量等),以便配置用于生 成集成电路的制造限定的计算机***执行限定集成电路的代码以便 生成该集成电路的制造限定。
现在将参考图23描述在集成电路制造***处处理集成电路限定 数据集以便配置***以制造卷积神经网络硬件加速器的示例。
图23示出了包括布局处理***1004和集成电路生成***1006 的集成电路(IC)制造***1002的示例。IC制造***1002被配置为 接收IC限定数据集(例如,限定如本文中的任何示例中描述的卷积 神经网络硬件加速器),处理IC限定数据集,并且根据IC限定数据集生成IC(例如,其实施本文中的任何示例中描述的卷积神经网络硬 件加速器)。IC限定数据集的处理配置IC制造***1002以制造实施 如本文中的任何示例中描述的卷积神经网络硬件加速器的集成电路。
布局处理***1004被配置为接收和处理IC限定数据集以确定电 路布局。从IC限定数据集确定电路布局的方法在本领域中是已知的, 并且例如可以涉及合成RTL码以确定要生成的电路的门级表示,例 如,在逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)方面。可以通过确定逻辑分量的位置信息,从电路的门级表示 来确定电路布局。这可以自动完成或者与用户有关,以优化电路布局。 当布局处理***1004已经确定了电路布局时,它可以将电路布局限 定输出到IC生成***1006。电路布局限定可以是例如电路布局描述。
如本领域已知的,IC生成***1006根据电路布局限定生成IC。 例如,IC生成***1006可以实施用于生成IC的半导体器件制造工艺, 其可以涉及光刻和化学处理步骤的多步序列,在该步骤期间,在由半 导体材料制成的晶片上逐渐地形成电子电路。电路布局限定可以是可 以用于根据电路限定生成IC的光刻工艺中的掩模的形式。或者,提 供给IC生成***1006的电路布局限定可以是IC生成***1006可以 用于形成用于在生成IC时使用的合适掩模的计算机可读代码的形式。
由IC制造***1002执行的不同处理可以全部在一个位置(例如, 由一方)实施。或者,IC制造***1002可以是分布式***,使得某 些处理可以在不同的位置执行,并且可以由不同的方执行。例如,以 下几个阶段中的一些可以在不同的位置和/或由不同的方执行:(i) 合成表示IC限定数据集的RTL代码以形成要生成的电路的门级表 示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩 模,以及(iv)使用掩模制造集成电路。
在其他示例中,集成电路制造***处的集成电路限定数据集的处 理可以将***配置为制造卷积神经网络硬件加速器,而不需要处理IC 限定数据集以便确定电路布局。例如,集成电路限定数据集可以限定 诸如FPGA等可重构处理器的配置,并且该数据集的处理可以配置IC 制造***以生成具有该限定的配置的可重构处理器(例如,通过将配 置数据加载到FPGA)。
在一些实施例中,当在集成电路制造***中处理时,集成电路制 造限定数据集可以引起集成电路制造***生成如本文中描述的装置。 例如,上述通过集成电路制造限定数据集关于图23描述的方式的集 成电路制造***的配置可以引起如本文中描述的器件被制造。
在一些示例中,集成电路限定数据集可以包括在数据集处限定的 硬件上或者与数据集处限定的硬件组合地运行的软件。在图23所示 的示例中,IC生成***还可以通过集成电路限定数据集来配置,以在 制造集成电路时根据在集成电路限定数据集处限定的程序代码将固 件加载到该集成电路上或者向集成电路提供程序代码用于与集成电 路一起使用。
申请人特此公开了本文中描述的每个单独特征以及两个或更多 个这样的特征的任何组合,只要这样的特征或组合能够根据本说明书 作为整体根据本领域技术人员共同的一般知识来执行,而无论这样的 特征或特征的组合是否解决了本文中公开的任何问题。鉴于以上描 述,对于本领域技术人员显而易见的是,可以在本发明的范围内进行 各种修改。

Claims (24)

1.一种用于接收用于卷积神经网络“CNN”的层的输入数据用于处理的方法,所述方法包括:
接收输入数据,所述输入数据包括要在所述CNN的层中被处理的输入数据值;
基于格式数据确定缓冲器的分组存储器中要存储接收的所述数据值的地址,所述格式数据指示所述层中的所述输入数据的格式参数以及指示要用于在所述层中处理所述输入数据的滤波器的格式参数;以及
将接收的所述输入数据值存储在所述缓冲器中经确定的所述地址处用于取回以在所述层中处理。
2.根据权利要求1所述的方法,其中要存储输入数据值的地址由组编号和地址编号来限定,所述组编号指示要存储所述输入数据值的所述缓冲器的组,所述地址编号指示要存储所述输入数据值的组内的位置。
3.根据任一前述权利要求所述的方法,其中所述缓冲器包括NB个组,并且其中确定要存储接收的所述数据值的所述缓冲器的所述分组存储器中的地址还基于数目NB个组。
4.根据任一前述权利要求所述的方法,其中所述输入数据被格式化为形成输入数据空间的多个二维平面,并且其中确定要存储接收的所述数据值的所述缓冲器的所述分组存储器中的地址还基于所述输入数据在所述输入数据空间内的坐标。
5.根据权利要求4所述的方法,其中所述输入数据的所述格式参数包括指示用于所述层的所述输入数据中平面的总数目P的数据,并且其中确定用于输入数据值的所述缓冲器中的地址基于平面的所述数目P。
6.根据权利要求4或权利要求5所述的方法,其中所述缓冲器中的输入数据值的地址基于用于所述输入数据值的平面索引p来被确定。
7.根据任一前述权利要求所述的方法,其中所述输入数据具有平面宽度X,其中所述输入数据的所述格式参数包括所述平面宽度X,并且其中所述缓冲器中的所述输入数据值的地址基于所述平面宽度X来被确定。
8.根据任一前述权利要求所述的方法,其中要应用于所述CNN的所述层中的所述输入数据的滤波器具有滤波器宽度m,其中所述滤波器的所述格式参数包括所述滤波器宽度m,并且其中所述缓冲器中的所述输入数据值的地址基于所述滤波器宽度m来被确定。
9.根据任一前述权利要求所述的方法,还包括:
接收用于所述CNN的后续层的第二输入数据,包括:
接收第二输入数据,所述第二输入数据包括要在所述CNN的所述后续层中被处理的第二输入数据值,其中所述第二输入数据不同于所述第一输入数据;
基于第二格式数据确定缓冲器的分组存储器中要存储接收的所述数据值的地址,所述第二格式数据指示所述层中的所述第二输入数据的格式参数以及指示要用于在所述后续层中处理所述输入数据的第二滤波器的格式参数;以及
将接收的所述第二输入数据值存储在所述缓冲器中的经确定的所述地址处用于取回以在所述后续层中处理。
10.根据权利要求9所述的方法,其中所述第二输入数据的所述格式不同于所述第一输入数据的所述格式,并且其中所述第二滤波器的所述格式不同于所述第一滤波器的所述格式。
11.根据任一前述权利要求所述的方法,还包括从外部存储器接收所述输入数据,并且还包括从外部存储器接收所述格式数据。
12.根据任一前述权利要求所述的方法,还包括在多个读取周期中从所述缓冲器读取输入数据值,并且将读取的所述输入数据值传递到卷积引擎用于处理。
13.根据权利要求12所述的方法,还包括在读取周期中从所述缓冲器的NB个组中的每个组读取输入数据值,并且在后续读取周期中从所述缓冲器的所述NB个组中的每个组读取另外的输入值。
14.根据任一前述权利要求所述的方法,其中所述输入数据值按栅格化的顺序被接收,其中所述输入数据值的所述坐标首先以平面索引p、然后以横坐标x、然后以纵坐标y依次地递增。
15.一种用于实施卷积神经网络“CNN”的硬件逻辑,所述硬件逻辑被配置为接收用于所述CNN的层的输入数据,所述硬件逻辑被配置为:
接收输入数据,所述输入数据包括要在所述CNN的层中被处理的输入数据值;
基于格式数据确定缓冲器的分组存储器中要存储接收的所述数据值的地址,所述格式数据指示所述层中的所述输入数据的格式参数以及指示要用于在所述层中处理所述输入数据的滤波器的格式参数;以及
将接收的所述输入数据值存储在所述缓冲器中的经确定的所述地址处用于取回以在所述层中处理。
16.根据权利要求15所述的硬件逻辑,其中要存储输入数据值的地址由组编号和地址编号来限定,所述组编号指示要存储所述输入数据值的所述缓冲器的组,所述地址编号指示要存储所述输入数据值的组内的位置。
17.根据权利要求15或16所述的硬件逻辑,其中所述缓冲器包括NB个组,并且其中确定要存储接收的所述数据值的所述缓冲器的所述分组存储器中的地址还基于数目NB个组。
18.根据权利要求15到17中任一项所述的硬件逻辑,其中所述输入数据被格式化为形成输入数据空间的多个二维平面,并且其中确定要存储接收的所述数据值的所述缓冲器的所述分组存储器中的地址还基于所述输入数据在所述输入数据空间内的坐标。
19.根据权利要求18所述的硬件逻辑,其中所述输入数据的所述格式参数包括指示用于所述层的所述输入数据中平面的总数目P的数据,并且其中确定用于输入数据值的所述缓冲器中的地址基于平面的所述数目P。
20.根据权利要求15到19中任一项所述的硬件逻辑,其中所述硬件逻辑被嵌入在集成电路上的硬件中。
21.一种计算机可读存储介质,所述计算机可读存储介质具有经编码的计算机可读代码,所述计算机可读代码在由处理器执行时使所述处理器执行根据权利要求1到14中任一项所述的方法。
22.一种在集成电路制造***处制造根据权利要求15到20中任一项所述的硬件逻辑的方法,所述方法包括:
使用布局处理***处理所述硬件逻辑的计算机可读描述以生成具体化所述硬件逻辑的集成电路的电路布局描述;以及
根据所述电路布局描述,使用集成电路生成***来制造图形处理***。
23.一种计算机可读存储介质,所述计算机可读存储介质具有存储于其上的根据权利要求15到20中任一项所述的硬件逻辑的计算机可读描述,所述计算机可读描述当在集成电路制造***中被处理时使所述集成电路制造***:
使用布局处理***处理所述硬件逻辑的所述计算机可读描述以生成具体化所述硬件逻辑的集成电路的电路布局描述;以及
根据所述电路布局描述,使用集成电路生成***来制造所述硬件逻辑。
24.一种集成电路制造***,包括:
非暂态计算机可读存储介质,所述非暂态计算机可读存储介质具有存储于其上的描述用于实施卷积神经网络“CNN”的硬件逻辑的集成电路的计算机可读描述;
布局处理***,所述布局处理***被配置为处理所述集成电路描述以生成具体化所述硬件逻辑的集成电路的电路布局描述;以及
集成电路生成***,所述集成电路生成***被配置为根据所述电路布局描述来制造所述硬件逻辑,
其中所述硬件逻辑被配置为接收用于所述卷积神经网络的层的输入数据,所述硬件逻辑被配置为:
接收输入数据,所述输入数据包括要在所述CNN的层中被处理的输入数据值;
基于格式数据确定缓冲器的分组存储器中要存储接收的所述数据值的地址,所述格式数据指示所述层中的所述输入数据的格式参数以及指示要用于在所述层中处理所述输入数据的滤波器的格式参数;以及
将接收的所述输入数据值存储在所述缓冲器中的经确定的所述地址处用于取回以在所述层中处理。
CN201710931313.2A 2016-10-06 2017-10-09 用于卷积神经网络的缓冲器寻址 Pending CN107992943A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1616953.4 2016-10-06
GB1616953.4A GB2554711B (en) 2016-10-06 2016-10-06 Buffer addressing for a convolutional neural network

Publications (1)

Publication Number Publication Date
CN107992943A true CN107992943A (zh) 2018-05-04

Family

ID=57610538

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710931313.2A Pending CN107992943A (zh) 2016-10-06 2017-10-09 用于卷积神经网络的缓冲器寻址

Country Status (4)

Country Link
US (3) US11100386B2 (zh)
EP (2) EP3306478B1 (zh)
CN (1) CN107992943A (zh)
GB (1) GB2554711B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109324984A (zh) * 2018-09-14 2019-02-12 北京地平线机器人技术研发有限公司 在卷积运算中使用循环寻址的方法和装置
CN110826707A (zh) * 2018-08-10 2020-02-21 北京百度网讯科技有限公司 应用于卷积神经网络的加速方法和硬件加速器
CN112380148A (zh) * 2020-11-30 2021-02-19 海光信息技术股份有限公司 数据传输方法和数据传输装置
CN113808110A (zh) * 2021-09-18 2021-12-17 江苏邦融微电子有限公司 一种晶圆缺陷检测方法

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2554711B (en) * 2016-10-06 2020-11-25 Imagination Tech Ltd Buffer addressing for a convolutional neural network
CN106557332A (zh) * 2016-11-30 2017-04-05 上海寒武纪信息科技有限公司 一种指令生成过程的复用方法及装置
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
GB2568086B (en) 2017-11-03 2020-05-27 Imagination Tech Ltd Hardware implementation of convolution layer of deep neutral network
EP3480749B1 (en) 2017-11-06 2024-02-21 Imagination Technologies Limited Exploiting sparsity in a neural network
GB2560600B (en) * 2017-11-06 2020-03-04 Imagination Tech Ltd Nueral Network Hardware
CN110058936B (zh) * 2018-01-18 2023-04-18 伊姆西Ip控股有限责任公司 用于确定专用处理资源的资源量的方法、设备和计算机程序产品
CN108388537B (zh) * 2018-03-06 2020-06-16 上海熠知电子科技有限公司 一种卷积神经网络加速装置和方法
US11295200B1 (en) 2018-04-20 2022-04-05 Perceive Corporation Time-multiplexed dot products for neural network inference circuit
US10740434B1 (en) 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11886979B1 (en) 2018-04-20 2024-01-30 Perceive Corporation Shifting input values within input buffer of neural network inference circuit
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
CN108665063B (zh) * 2018-05-18 2022-03-18 南京大学 用于bnn硬件加速器的双向并行处理卷积加速***
JP2019207458A (ja) 2018-05-28 2019-12-05 ルネサスエレクトロニクス株式会社 半導体装置及びメモリアクセス設定方法
CN110537193A (zh) 2018-10-24 2019-12-03 阿里巴巴集团控股有限公司 卷积神经网络的快速计算
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
CN111382094B (zh) * 2018-12-29 2021-11-30 深圳云天励飞技术有限公司 一种数据处理方法及装置
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
WO2020225916A1 (ja) * 2019-05-09 2020-11-12 株式会社アラヤ 情報処理装置
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
TWI768326B (zh) * 2020-04-20 2022-06-21 國立陽明交通大學 卷積運算模組及方法以及其適用之卷積神經網路系統
CN114281554B (zh) * 2022-03-08 2022-06-17 之江实验室 用于3d图像处理的3d-cnn加速方法及装置、电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101809597A (zh) * 2007-09-26 2010-08-18 佳能株式会社 计算处理装置及方法
CN105260773A (zh) * 2015-09-18 2016-01-20 华为技术有限公司 一种图像处理装置以及图像处理方法
CN105320495A (zh) * 2014-07-22 2016-02-10 英特尔公司 用于卷积神经网络的权重移位机制

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI569587B (zh) * 2015-02-06 2017-02-01 晨星半導體股份有限公司 解迴旋交錯器
US10489703B2 (en) * 2015-05-20 2019-11-26 Nec Corporation Memory efficiency for convolutional neural networks operating on graphics processing units
GB201607713D0 (en) * 2016-05-03 2016-06-15 Imagination Tech Ltd Convolutional neural network
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
GB2585810B (en) 2016-10-06 2021-07-07 Imagination Tech Ltd Buffer addressing for a convolutional neural network
GB2554711B (en) * 2016-10-06 2020-11-25 Imagination Tech Ltd Buffer addressing for a convolutional neural network
GB2566702B (en) * 2017-09-20 2021-11-03 Imagination Tech Ltd Hardware implementation of a deep neural network with variable output data format

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101809597A (zh) * 2007-09-26 2010-08-18 佳能株式会社 计算处理装置及方法
CN105320495A (zh) * 2014-07-22 2016-02-10 英特尔公司 用于卷积神经网络的权重移位机制
CN105260773A (zh) * 2015-09-18 2016-01-20 华为技术有限公司 一种图像处理装置以及图像处理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ZIDONG DU ET AL: "ShiDianNao:Shifting Vision Proceeding Closer to the Sensor", 《PROCEEDING OF THE 42ND ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE》 *
ZIDONG DU ET AL: "ShiDianNao:Shifting Vision Proceeding Closer to the Sensor", 《PROCEEDING OF THE 42ND ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE》, 31 December 2015 (2015-12-31), pages 1 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110826707A (zh) * 2018-08-10 2020-02-21 北京百度网讯科技有限公司 应用于卷积神经网络的加速方法和硬件加速器
CN110826707B (zh) * 2018-08-10 2023-10-31 北京百度网讯科技有限公司 应用于卷积神经网络的加速方法和硬件加速器
CN109324984A (zh) * 2018-09-14 2019-02-12 北京地平线机器人技术研发有限公司 在卷积运算中使用循环寻址的方法和装置
CN109324984B (zh) * 2018-09-14 2020-06-26 北京地平线机器人技术研发有限公司 在卷积运算中使用循环寻址的方法和装置
CN112380148A (zh) * 2020-11-30 2021-02-19 海光信息技术股份有限公司 数据传输方法和数据传输装置
CN112380148B (zh) * 2020-11-30 2022-10-25 海光信息技术股份有限公司 数据传输方法和数据传输装置
CN113808110A (zh) * 2021-09-18 2021-12-17 江苏邦融微电子有限公司 一种晶圆缺陷检测方法
CN113808110B (zh) * 2021-09-18 2024-06-14 江苏邦融微电子有限公司 一种晶圆缺陷检测方法

Also Published As

Publication number Publication date
US11423285B2 (en) 2022-08-23
US11100386B2 (en) 2021-08-24
US20180101763A1 (en) 2018-04-12
EP4030302A1 (en) 2022-07-20
GB201616953D0 (en) 2016-11-23
GB2554711B (en) 2020-11-25
EP3306478B1 (en) 2022-04-06
US20210390368A1 (en) 2021-12-16
GB2554711A (en) 2018-04-11
US20220383067A1 (en) 2022-12-01
EP3306478A1 (en) 2018-04-11

Similar Documents

Publication Publication Date Title
CN107992943A (zh) 用于卷积神经网络的缓冲器寻址
US11475101B2 (en) Convolution engine for neural networks
CN110383267B (zh) 矩阵传输加速器***和方法
CN109255829A (zh) 用于光线跟踪的混合层级
JP2019535079A (ja) 畳み込みニューラルネットワークのための効率的データレイアウト
CN110059811A (zh) 权重缓冲器
CN108133270A (zh) 卷积神经网络加速方法及装置
WO2020132593A1 (en) Neural network processor
CN107403221A (zh) 卷积神经网络的硬件实现
CN106504184A (zh) 用于处理子图元的图形处理方法和***
US11775206B2 (en) Maintaining synchronisation between memory writing and reading blocks using an internal buffer and a control channel
US11763131B1 (en) Systems and methods for reducing power consumption of convolution operations for artificial neural networks
CN110163338A (zh) 具有运算阵列的芯片运算方法、装置、终端及芯片
Dazzi et al. Accelerating inference of convolutional neural networks using in-memory computing
CN114358238A (zh) 多核硬件中神经网络的实现方式
CN115238863A (zh) 一种卷积神经网络卷积层的硬件加速方法、***及应用
CN109800867B (zh) 一种基于fpga片外存储器的数据调用方法
US12008301B2 (en) Mapping multi-dimensional coordinates to a 1D space
US20190392100A1 (en) Storage medium which stores instructions for a simulation method in a semiconductor design process, semiconductor design system that performs the simulation method in the semiconductor design process, and simulation method in the semiconductor design process
GB2585810A (en) Buffer addressing for a convolutional neural network
TWI727641B (zh) 記憶體裝置及其操作方法
US20230080578A1 (en) Dot product array
Dazzi Accelerating Inference of CNNs with In-Memory Computing
CN116721006A (zh) 特征图处理方法和装置
CN118227515A (zh) 在包括存储器的处理单元处对二维值阵列执行可分离运算

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination