CN118246498A - 将神经网络映射到硬件 - Google Patents

将神经网络映射到硬件 Download PDF

Info

Publication number
CN118246498A
CN118246498A CN202311719821.6A CN202311719821A CN118246498A CN 118246498 A CN118246498 A CN 118246498A CN 202311719821 A CN202311719821 A CN 202311719821A CN 118246498 A CN118246498 A CN 118246498A
Authority
CN
China
Prior art keywords
group
layers
groups
tile
prefetch
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
CN202311719821.6A
Other languages
English (en)
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.)
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 CN118246498A publication Critical patent/CN118246498A/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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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/0499Feedforward networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • 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/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data

Landscapes

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

Abstract

描述了将神经网络映射到硬件的方法。定义多个层组,每个层组包括所述神经网络的一个或多个层,所述一个或多个层在通过所述硬件的单个遍次中被处理。将所述层组分组成图块组,每个图块组包括在执行所述神经网络时被评估的层组集合。将所述层组分组成图块组包括选择在所述图块组中的第一层组之前的层组,并且确定从存储器中读取针对所述层组的输入数据的次数。响应于此数量超过阈值,通过确定片上存储器中存储预取输入数据所需的空间量,并且评定与所述层组的输出数据相关的一个或多个标准,来确定是否将所述层组合并到所述图块组中。

Description

将神经网络映射到硬件
相关申请的交叉引用
本申请要求2022年12月22日提交的英国专利申请2219519.2的优先权,该英国专利申请以全文引用方式并入本文中。
技术领域
本发明涉及将神经网络映射到硬件。
背景技术
许多神经网络(NN)包括输入层、输出层和多个隐藏层,例如卷积NN。一些NN具有多于一个输入层和/或输出层。在运行时,NN中的层通常采用输入数据阵列,并且应用权重阵列来生成输出数据阵列。对于除了输出层之外的层,来自该层的输出数据形成针对NN中的后一层的输入数据。例如,取决于NN结构以及是否有任何分支,此层可以是NN中的下一层和/或NN中的后一层。对于输入层,输入数据是针对NN的输入数据,并且对于输出层,输出数据是来自NN的输出数据。
对于NN中的每一层,预先计算权重(或系数)阵列(例如作为训练阶段的一部分,因为该权重在NN的执行期间保持不变),并且将该权重阵列存储在存储器中,使得该权重可以在运行时被使用。权重阵列可以是多维权重阵列,并且输入数据可以是多维数据阵列。输入数据和权重的读取以及输出数据的写入会导致使用非常大的存储器带宽,并且在从存储器(并且特别是片外存储器)中多次读取相同数据(无论是输入数据还是权重)时,此情况更加严重。
下文描述的实施方案仅借助于示例来提供,并且不限制解决将神经网络映射到硬件以及处理神经网络的输入数据和输出数据的已知方法的任何或所有缺点的具体实现。
发明内容
提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
描述了将神经网络映射到硬件的方法。定义多个层组,每个层组包括神经网络的一个或多个层,所述一个或多个层在通过硬件的单个遍次中被处理。将层组分组成图块组,每个图块组包括在执行神经网络时被评估的层组集合。将层组分组成图块组包括选择在图块组中的第一层组之前的层组,并且确定从存储器中读取针对层组的输入数据的次数。响应于此数量超过阈值,通过确定片上存储器中存储预取输入数据所需的空间量,并且评定与层组的输出数据相关的一个或多个标准,来确定是否将层组合并到图块组中。
第一方面提供了一种将神经网络映射到硬件的方法,所述方法包括:定义多个层组,每个层组包括神经网络的一个或多个层,所述一个或多个层在通过硬件的单个遍次中被处理;以及将层组分组成一个或多个图块组,每个图块组包括在执行神经网络时被评估的层组集合,其中将层组分组成图块组包括:选择按执行顺序在图块组中的第一层组之前的层组,并且确定针对层组的输入预取比率,所述输入预取比率对应于从存储器中读取针对层组的输入数据的次数;将输入预取比率与输入预取力因子进行比较,其中输入预取力因子定义用于预取输入数据的阈值;以及响应于输入预取比率超过预取力因子,评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的预取缓冲器的大小,并且响应于确定满足与层组的输出数据相关的一个或多个标准,将层组合并到图块组中。
所述方法还可以包括:响应于确定不满足与层组的输出数据相关的一个或多个标准,不将层组合并到图块组中。
所述方法还可以包括:响应于输入预取比率超过预取力因子,在片上存储器中为输入数据预分配空间。响应于输入预取比率超过预取力因子,并且进一步响应于确定不满足与层组的输出数据相关的一个或多个标准,所述方法还可以包括释放预分配。
将层组分组成图块组还可以包括:响应于输入预取比率等于预取力因子,评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的预取缓冲器的大小,并且响应于确定满足与层组的输出数据相关的一个或多个标准,将层组合并到图块组中。
所述方法还可以包括:响应于输入预取比率等于预取力因子,在片上存储器中为输入数据预分配空间。
所述方法还可以包括:响应于输入预取比率等于预取力因子,并且进一步响应于确定不满足与层组的输出数据相关的一个或多个标准,释放预分配。
将层组分组成图块组还可以包括:当评定与层组的输出数据相关的一个或多个标准时,忽略片上存储器中针对图块组中的第一层组的输入数据的任何空间预分配。
评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的预取缓冲器的大小,所述评定可以包括:将输入数据分割成多个遍次;以及评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的遍次的预取缓冲器的大小。
所述方法还可以包括:将映射神经网络存储在存储器中,以用于在硬件上执行。
所述方法还可以包括:在硬件上执行神经网络。
第二方面提供了一种计算设备,所述计算设备包括:处理器;以及存储器,所述存储器布置成存储计算机可执行指令,所述计算机可执行指令在由处理器执行时使得处理器:定义多个层组,每个层组包括神经网络的一个或多个层,所述一个或多个层在通过硬件的单个遍次中被处理;以及将层组分组成一个或多个图块组,每个图块组包括在执行神经网络时被评估的层组集合,其中将层组分组成图块组包括:选择按执行顺序在图块组中的第一层组之前的层组,并且确定针对层组的输入预取比率,所述输入预取比率对应于从存储器中读取针对层组的输入数据的次数;将输入预取比率与输入预取力因子进行比较,其中输入预取力因子定义用于预取输入数据的阈值;以及响应于输入预取比率超过预取力因子,评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的预取缓冲器的大小,并且响应于确定满足与层组的输出数据相关的一个或多个标准,将层组合并到图块组中。
计算机可执行指令在由处理器执行时可以进一步使得处理器:响应于确定不满足与层组的输出数据相关的一个或多个标准,不将层组合并到图块组中。
计算机可执行指令在由处理器执行时可以进一步使得处理器:响应于输入预取比率超过预取力因子,在片上存储器中为输入数据预分配空间。
计算机可执行指令在由处理器执行时可以进一步使得处理器:响应于输入预取比率超过预取力因子,并且进一步响应于确定不满足与层组的输出数据相关的一个或多个标准,释放预分配。
将层组分组成图块组还可以包括:响应于输入预取比率等于预取力因子,评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的预取缓冲器的大小,并且响应于确定满足与层组的输出数据相关的一个或多个标准,将层组合并到图块组中。
计算机可执行指令在由处理器执行时可以进一步使得处理器:响应于输入预取比率等于预取力因子,在片上存储器中为输入数据预分配空间。
计算机可执行指令在由处理器执行时可以进一步使得处理器:响应于输入预取比率等于预取力因子,并且进一步响应于确定不满足与层组的输出数据相关的一个或多个标准,释放预分配。
将层组分组成图块组还可以包括:当评定与层组的输出数据相关的一个或多个标准时,忽略片上存储器中针对图块组中的第一层组的输入数据的任何空间预分配。
评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的预取缓冲器的大小,所述评定可以包括:将输入数据分割成多个遍次;以及评定与层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储输入数据的遍次的预取缓冲器的大小。
计算机可执行指令在由处理器执行时可以进一步使得处理器将映射神经网络存储在存储器中,以用于在硬件上执行。
映射神经网络可以在集成电路上的硬件中(例如以神经网络加速器的形式)体现。可以提供一种在集成电路制造系统处制造映射神经网络的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集在于集成电路制造系统中被处理时将系统配置成制造映射神经网络。可以提供一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述在被处理时使得布局处理系统生成在集成电路制造系统中用于制造映射神经网络的电路布局描述。
可以提供一种集成电路制造系统,所述集成电路制造系统包括:非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有描述映射神经网络的计算机可读集成电路描述;布局处理系统,所述布局处理系统被配置成处理集成电路描述以便生成体现映射神经网络的集成电路的电路布局描述;以及集成电路生成系统,所述集成电路生成系统被配置成根据电路布局描述来制造映射神经网络。
可以提供用于执行本文中描述的方法中的任何方法的计算机程序代码。可以提供一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令在于计算机系统处被执行时使得所述计算机系统执行本文中描述的方法中的任何方法。
如对本领域技术人员将显而易见,上述特征可以适当地组合,并且可与本文所描述的示例的各方面中的任一方面进行组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1至图3是示出由神经网络处理数据的示意图;
图4A至图4D、图5、图6、图7A、图7B和图8至图11是示出在执行神经网络时对输入数据的预取的示意图;
图12A和图12B示出了神经网络内的层组的两个示例布置;
图13是将NN映射到硬件的第一示例方法的流程图,其中选择性地使用输入数据的预取;
图14是将NN映射到硬件的第二示例方法的流程图,其中选择性地使用输入数据的预取;
图15示出了神经网络内的层组的另一示例布置;
图16示出了其中可实现本文中描述的方法的计算机系统;并且
图17示出了用于生成集成电路的集成电路制造系统,该集成电路体现实现预取的神经网络硬件。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域技术人员能够制造和使用本发明。本发明不限于本文所描述的实施方案,并且对所公开的实施方案的各种修改对于本领域技术人员而言将是显而易见的。
现在将仅借助于示例来描述实施方案。
如上文所描述,当使用NN时,读取和写入数据和权重所需的存储器带宽可能非常大,并且已开发出各种技术来使硬件更有效。
为了减小存储权重所需的存储器的大小以及用于从存储器读取权重的带宽,权重可以以压缩形式进行存储,并且随后在使用之前进行解压缩。压缩可以在离线过程中执行。此外,在需要从存储器中多次读取权重(例如因为整个输入数据集不能被并行处理)的情况下,可以将权重读取到片上存储器中,因为访问此片上存储器比片外存储器快(因为较低时延和/或较高带宽),并且消耗较少功率;然而,片上存储器的大小通常比片外存储器更受限。片外存储器也可以称为外部存储器。此外部存储器可以实现为DDR(双倍数据速率)SDRAM,并且因此在以下描述中对DDR的任何引用都是指片外(或外部)存储器。
为了减小处理较大输入数据集所需的硬件的大小(包括存储来自除了输出层之外的层的输出数据所需的存储器的大小),可以将输入数据划分成块(也称为“图块”)。这些数据块可以通过NN的多个层以逐深度方式进行处理,如图1中所图示。术语“逐深度”是指以下事实:对于单核实现,在处理下一图块之前,通过多个层来处理图块(例如图块0,106)。在图1中所示出的示例中,在处理下一图块之前,通过所有层L0至L2(其中层108在图1中由圆示出)来处理图块。在硬件包括多个核的情况下,每个核可以处理不同图块,并且这些图块由核并行处理,但核在处理下一图块之前通过多个层(例如所有层)来处理图块。从片外存储器102中读取针对每个图块的输入数据,并且将来自最终层(L2)的输出数据写回到片外存储器102,而图块中的中间数据(其包括来自除了最后一层之外的层的输出数据,并且形成针对除了第一层之外的层的输入数据)被写入到片上存储器(OCM)104以及被从该片上存储器中读取。
输入数据可以布置为数量p的数据平面,每个平面具有宽度x和高度y。除了分块以外,输入数据还可以分割成多个遍次以用于处理,例如以满足对硬件缓冲器大小的限制(例如在神经网络加速器中),并且这可以以多种不同方式来执行。四个示例是Y分割、X分割、F分割和C分割(其也可以称为P分割)。这些分割在层内,并且层可以以这些方式中的任何一种或多种方式进行分割。在使用Y分割的情况下,输入数据在y维度上进行分割,使得每个遍次包括多行输入数据。就存储器访问而言,如果对输入数据进行行优先存储(即根据x维度进行排序),则这是特别有效的。在使用X分割的情况下,输入数据在x维度上进行分割,使得每个遍次包括多列输入数据。对于C分割,输入数据由输入数据的通道分割,使得每个遍次包括输入数据的一个或多个平面。对于F分割,输入数据在输出维度上进行分割,并且因此每个遍次仅产生输出数据的一些通道。只有在已执行所有遍次后,输出张量才完整。在使用F分割的情况下,必须将输入数据读取大于一次(例如每个遍次读取一次),因为分割是在输出数据上而不是在输入数据上。
在一些具体实现中,可以对数据进行行优先存储,并且多个平面np可以分组在一起并且存储在相同X位置中。因此,如果np=4,则对于每一行(并且其中总共有4(N+1)个平面布置在N+1组4个平面中):
Y0:X0(P0,P1,P2,P3)、X1(P0,P1,P2,P3)...XN(P0,P1,P2,P3)
Y1:X0(P0,P1,P2,P3)、X1(P0,P1,P2,P3)...XN(P0,P1,P2,P3)
当使用P分割或F分割时,分割与每一组中的平面数量np相关。例如,每个P分割或F分割中的平面数量是每一组中的平面数量np的倍数。
在一些硬件实现中,可以在单个硬件遍次(即通过硬件的单个遍次)中处理多个层,其中在硬件遍次结束时(而不是在每个层之间)将数据写入到片上存储器,从而产生“层组”的概念。层组可以包括单个层,如在图1中所示出的示例(其中每个层组包括单个层)中;或者可以包括多于一个层,并且不同层组可以包括不同数量的层,如在图2中所示出的示例中。在图2中所示出的示例中,第一层组和第三层组(LG0和LG2)各自包括三个层(分别为层L0至L2和层L5至L7),而第二层组(LG1)仅包括两个层(层L3和L4)。以与图1中的示例类似的方式,通过多个层组逐深度地处理图块。从片外存储器102中读取针对每个图块的输入数据,并且将来自最终层组(LG2)的输出数据写回到片外存储器102,而图块中的中间数据(其包括来自除了最后一个层组之外的层组的输出数据,并且形成针对除了第一层组之外的层组的输入数据)被写入到片上存储器(OCM)104以及被从该片上存储器中读取。在层组内,数据不被写入到存储器(片上或片外),因为层组内的层在单个硬件遍次中进行处理。
在图2中所示出的示例中,在将数据分割成图块之后,将所有层组一起进行深度优先评估,其中在核处理另一图块之前,由核通过所有层组处理图块。在评估最后一个层组(LG2)之后,针对该图块的输出数据仅被写入到片外存储器。然而,在其他示例中,如图3中所示出,层组可以布置成“图块组”。图块组是在将数据分割成图块之后一起进行深度优先评估的层组集合,并且在图3中所示出的示例中,第一图块组TG0包括两个层组LG0和LG1,并且第二图块组TG1包括另外两个层组LG2和LG3。在图块组内,图块中的中间数据被写入到片上存储器104以及被从该片上存储器中读取,而针对图块组(不管该图块组是第一图块组还是后一图块组)的输入数据被从片外存储器102中读取,并且针对图块组的输出数据被写入到片外存储器102。在处理下一图块之前,通过图块组来处理所有图块。
尽管在图3的示例中,每个图块组对相同数量的图块(3个图块)进行操作,在使用图块组的情况下,不同数量的图块可用于不同图块组,并且可以基于针对图块组的输入数据的大小和OCM 104的大小来选择图块的数量。图块的数量也可以取决于图块组内的特定层,因为这将影响需要存储在OCM 104中的中间数据的量。
可以根据NN的结构,例如是否存在任何分支,来执行将层组(以及因此将层)分组成图块组,并且一般可能偏好将尽可能多的层组(以及因此将尽可能多的层)分组在一起,这取决于片上存储器104的大小,因为片上存储器104需要能够存储针对图块组的中间数据。对于较复杂的NN结构(例如其涉及分支并且/或者每个层不仅依赖于前一层的输出),在定义图块组时将考虑较多标准,包括存储器访问要求。例如,减少在一个图块组的输出处写入到片外存储器的数据的量可能是有利的,该数据随后由后续图块组读取大于一次。因此,如果片上存储器104的大小可以容纳来自合并到图块组中的层组的输出数据(并且该输出数据现在是存储在OCM 104中而不是片外存储器102中的中间数据),则层组可以合并到后一图块组中,以避免不得不被从片外存储器中读取大于一次。
在将NN映射到硬件(即映射到包括核数量、OCM的大小等的细节的特定硬件布置)时,执行将层组(以及因此将层)分组成图块组。由于NN可以在多个不同硬件布置上执行,因而可以针对同一NN将此映射执行许多次。在将层组(以及因此将层)分组成图块组时,从输出向输入反向(即在与执行顺序相反的方向上)执行分析。这意味着该分析确定是否将(按执行顺序)在图块组之前的层组合并到后一图块组中,使得如果合并,则新合并的层组(就执行顺序而言)将是图块组中的第一层组。将了解,如果随后将另一层组合并到图块组中,则新合并的层组可能不会保持在图块组的前面。
本文中描述了用于通过减小所用存储器带宽来进一步提高NN硬件效率的方法。本文中描述的方法涉及将输入数据从片外存储器102中预取到片上存储器104中。在使用预取的情况下,NN层不从片外存储器102中读取输入数据(如图1至图3中的示例中所示出),而是从片上存储器104中读取输入数据。在各种示例中,如果将输入数据从片外存储器中读取等于或大于阈值次数,则执行(例如总是执行)输入数据的预取,并且此阈值可以设置为二,但如果将输入数据从片外存储器中读取小于阈值次数,则不执行预取。在其他示例中,可以总是执行预取;然而,由于预取会增加针对NN或图块组(在使用的情况下)中的第一层的时延,因而选择性地(例如基于另外将从片外存储器中读取输入数据的次数)使用预取可能更有效。针对预取任何第一图块的时延不能被隐藏,因为该第一图块是NN的第一层,或者对于后续层,输入数据是由前一层(或层组)产生的。对于所有其他图块,可以隐藏预取的时延。
为何可以将输入数据从片外存储器104中读取大于一次有许多不同的原因。一个示例是在图块组的输入层组中使用F分割,并且另一示例是作为分支的结果(例如,如下文参考图12B所描述)。
如本文中所描述,预取的使用对将层组(以及因此将层)分组成图块组的方法引入额外约束,即,在确定层组是否可以合并到后一图块组中时考虑的额外约束。现有约束涉及输出数据的大小,因为只有当片上存储器104具有充足空间来存储由层组输出的数据时,层组才可以合并到图块组中(例如参考图3中所示出的示例,OCM 104必须足够大以存储由LG0输出的数据,以便将LG0合并到具有LG1的图块组中)。然而,如本文中所描述,通过引入预取而引入的额外约束涉及针对层组的输入数据的大小。
如果符合预取条件(例如符合或超过阈值),则执行预取。只有当片上存储器104中有充足空间来存储输入数据时,才可以执行预取。在输入数据集被分块的情况下,OCM中用于存储预取数据所需的空间并不对应于整个输入数据集,而是仅对应于待由图块组中的第一层组(或整体第一层组,其中不使用图块组)处理的特定图块。因此,OCM使用率由最大图块的大小决定。如果OCM中没有充足空间来存储针对层组的预取输入数据,则该层组不能合并到后一图块组中(例如参考图3,如果OCM 104中没有充足空间来预取针对LG1的输入数据——假设LG1符合标准,使得需要预取——则LG1不能合并到TG1中,并且必须保留在TG0中)。
在待执行预取的情况下,片上存储器104中用于预取数据所需的空间被预分配给预取数据;然而,当评定另外的前一层组是否可以合并到图块组中时,不考虑该预分配(即该分析假设预分配没有发生),因为如果另一层组合并到图块组的开始处,则不再需要预分配,因为与该预分配相关的层组不再是图块组中的第一层组(并且因此将不需要预取)。如果合并另一层组,则释放预分配,并且根据是否将预取图块组中的新的第一层组,可以进行新的预分配。这将参考下述示例来更详细地描述。
在各种示例中,OCM 104可以细分成多个区段,其中不同区段用于存储不同类型的数据。例如,OCM 104可以包括专用于存储系数数据(而不是输入数据)的区段,并且此区段可以称为系数存储器。当评估约束以确定层组是否可以合并到后一图块组中时,OCM 104的相关大小是可存储预取数据和中间数据的区段的大小。在各种示例中,OCM 104可以包括用于存储一次性数据的被称为交换存储器的第一区段,以及用于存储非一次性数据(例如与输出数据的多于一个图块相关的输入数据)的被称为堆存储器的第二区段。在这种示例中,可以在第一区段(交换存储器)中进行预分配,因为预取数据仅需要较短时间段,并且一旦特定图块已完成由特定图块组进行的处理(例如当处理LG0,随后是LG1,随后是LG2时,当处理LG2时,LG0的输出可以被重写),或者一旦该预取数据已被读取必要次数(如上文所描述,该必要次数可以是两次或更多次,其中阈值被设置为二)(这可以早于特定图块已完成处理的时间),便可以被丢弃(并重写)。可以使用广播消息来实现预取的同步、图块的处理和/或数据的丢弃。例如,在遍次或层结束时,可以向系统中的所有核广播消息,并且这可以触发对预取数据的丢弃。另外,或者取而代之,遍次或对层的处理可以由广播消息触发。
可以参考图4A至图4D来描述四个示例预取方法。每个示例方法示出了多图块图块组的单核实现,即在每个遍次中仅处理一个图块(如示出处理图块和层/层组的顺序的箭头所指示),并且将输入数据划分成多个图块。虽然该方法是相对于特定图块组TG1来描述的,但将了解,此描述仅仅是借助于示例,并且该方法可适用于任何图块组。
在图4A中所示出的示例中,预取正好在图块组(例如所示出的示例中的第二图块组TG1 404)中的第一层组LG0 402之前执行。针对第二图块组TG1 404的第一层组LG0 402的第一图块(图块0)的预取发生在图块组的执行之前,如实心圆406所指示。此预取引入了额外时延,在不引入显著复杂性的情况下,该额外时延不能被隐藏(如下文所描述)。
在图4A中所示出的方法的变型中,虽然预取正好在第一层组LG0 402之前开始,但对层组的处理可以在预取完成之前开始,如虚线椭圆407所指示。这显著减少了此方法的时延。
在图4B中所示出的示例中,提前一个层组(和一个图块组)(即在前一图块组的最后一个层组期间)执行针对第一图块(图块0)的预取。图4B示出了针对第二图块组TG1404(如在图4A中那样)中的第一层组LG0 402的预取;然而,在此方法中,预取发生在对前一图块组TG0 410中的最后一个层组LG2 408的处理期间,如实心圆412所指示。通过(例如使用图4B的方法)提前预取层组,可以隐藏针对第一遍次的时延(其存在于图4A的方法中);然而,这确实需要针对跨图块组OCM分配的较大需求(即预取数据需要在一个图块组的执行期间存储在OCM中,并且在后一图块组的执行期间被访问)。仅在前一图块组中的最后一个图块遍次不约束由下一图块组的第一图块遍次消耗(即在该第一图块遍次中使用)的任何数据的情况下,才可以执行提前预取层组。
由于图4A和图4B中的示例方法是参考针对第二图块组TG1 404的预取来描述的,因而没有完整地示出前一图块组TG0(即没有示出层组0)。
在图4C中所示出的示例中,预取在每图块(或每图块遍次)的基础上正好在图块组(例如TG1 404)中的第一层组(例如LG0 402)之前执行。如实心圆416所指示,针对图块(例如图块1)的预取发生在对前一图块遍次(例如图块遍次0)的处理之后。类似地,如实心圆418所指示,针对下一图块(例如图块2)的预取发生在对前一图块遍次(例如图块遍次1)的处理之后。
在图4D中所示出的示例中,在相同图块组内提前一个层组并且在每图块(或每图块遍次)的基础上执行对图块的预取。图4D示出了在由当前图块组TG1 404中的最后一个层组LG2 414处理前一图块(图块0)期间针对第二图块(图块1)的预取,如实心圆420所指示,即针对图块遍次的预取在接近前一图块遍次结束时执行。类似地,针对下一图块(例如图块2)的预取在由当前图块组TG1 404中的最后一个层组LG2 414处理紧接在前的图块(图块1)期间发生,如实心圆422所指示。通过(例如使用图4D的方法)提前预取层组,可以隐藏针对后一图块遍次的时延(其存在于图4C的方法中);然而,这确实需要在OCM中有充足空间。
在图4D中所示出的变型中,预取可以在相同图块组内提前多于一个层组执行,例如提前两个层组,使得预取在通过图块组中的倒数第二层组(例如图4D中的LG1424)对前一图块的处理期间发生,即,使得针对图块遍次的预取在前一图块遍次中较早执行。然而,通过较早地转移预取,其增加了(OCM内的)预取缓冲器的寿命,并且总体上需要较多OCM空间。通过提前预取仅一个层组,如图4D中所示出,隐藏了时延,并且减少了所使用的OCM空间。
在上文描述以及在图4A至图4D中所示出的方法(或如上文所描述的该方法的变型)可以以各种组合来使用。例如,第一方法(或涉及并行预取和处理的变型)可以与第三方法(例如图4A和图4C的方法的组合)、第四方法(例如图4A和图4D的方法的组合)或其涉及提前预取多于一个层组的变型组合使用。在其他示例中,第二方法可以与第三方法(例如图4B和图4C的方法的组合)、第四方法(例如图4B和图4D的方法的组合)或其涉及提前预取多于一个层组的变型组合使用。这些组合具有以下效果:对于通过图块组中的第一层组的第一图块遍次,可以使用图4A或图4B的方法,并且对于后续图块遍次,可以使用图4C或图4D的方法。
图5示出了另一预取示例,该另一预取示例是图4A和图4D中所示出以及在上文描述的第一方法与第四方法的组合。以与图4A和图4B中所示出的示例方法类似的方式,在图5中,没有完全示出TG0(即没有示出层组0)。针对第二图块组TG1 404的第一层组LG0 402的第一图块(图块0)的预取发生在图块组的执行之前,如第一实心圆502所指示。此预取引入了额外时延,在不引入显著复杂性的情况下,该额外时延不能被隐藏(如下文所描述)。针对其他图块(图块1和图块2)的预取发生在对前一图块的处理期间,并且在所示出的示例中,由图块组中的最后一个层组LG2 408在对前一图块的处理期间执行,如分别由第二圆504和第三圆506所指示。因此,针对图块1和2的预取不会引入任何时延。
如上文所指出,针对第一层组LG0 402的第一图块(图块0)的预取引入了额外时延,该额外时延在不引入显著复杂性的情况下不能被隐藏。为了隐藏时延,预取将需要在前一图块组中执行,例如,如阴影圆508所指示(从而产生图4B和图4D而不是图4A和图4D的方法的组合),并且如上文所描述,这将引入跨图块组OCM分配(因为在存储来自TG0的LG1的输出数据的同时,在用于针对TG1的预取数据的OCM中将需要空间),并且只有在前一图块组中的最后一个图块没有约束需要预取的任何数据时才有可能。
虽然图5的方法示出了在执行图块组(圆502)之前的预取,但将了解,预取可以在执行第一层组之前和期间执行(如上文作为图4A的方法的变型所描述)。
可以参考图6来描述另一预取示例。图6中的布置示出了在多核实现中针对多图块图块组的输入预取,并且是图4A和图4C中所示出以及在上文描述的第一方法与第三方法的组合。在多核实现中,可以存在可由核中的所有核访问(就读取和写入而言)的共享片上存储器(S-OCM)以及仅可由特定核访问的本地片上存储器(L-OCM)两者。因此,预取数据是否需要由多于一个核访问会影响对于确定是否将层组合并到图块组中以及确定OCM中是否有充足空间来执行预取的约束的评估。
在图6中所示出的示例中,存在三个核C0至C2,使得可以在每个多核(MC)图块遍次中处理三个图块(第一MC图块遍次(MC图块遍次0)中的图块0至2以及第二MC图块遍次(MC图块遍次1)中的图块3至5)。因此,每个多核图块遍次包括针对每个核的一个图块遍次,并且并行预取针对多核图块遍次中的所有图块的数据,如实心圆604、606所指示,即在特定多核图块遍次以及一次预取之前(并且特别是在图块组中的第一层组LG0 602之前),存储预取数据。预取数据可以存储在针对每个核的本地OCM中,因为与共享OCM相比,存在较多空间和较大带宽。
虽然图6中所示出的多核实现使用图4A和图4C中所示出以及在上文描述的第一方法与第三方法的组合,但将了解,如上文所描述的其他方法中的任何方法或方法的组合可用于多核实现中。例如,在图6中所示出的变型中,预取可以仅在后一图块遍次(例如图块遍次1,圆606)之前执行,并且不在第一图块遍次(图块遍次0,即省略圆604)之前执行。在这种变型中,图4C中所示出的第三方法独立于图4A中所示出的第一方法来使用。在另一示例中,可以使用图4A和图4D中所示出的方法的组合,在接近前一多核图块遍次(MC图块遍次0)结束时执行针对第二多核图块遍次(MC图块遍次1)的预取(即圆606被省略,并且由在MC图块遍次0期间出现的圆代替)。如上文针对单核实现所描述,在前一多核图块遍次期间进行提取需要在OCM中(例如在本地OCM中)有充足的可用空间。
可以参考图7A和图7B来描述两个另外的示例预取方法。每个示例方法示出了单图块图块组的单核实现,并且这些示例方法对应于图4A和图4B中所示出的多图块图块组方法,但仅具有单个图块并且因此具有单个图块遍次。虽然该方法是相对于特定图块组TG1来描述的,但将了解,此描述仅仅是借助于示例,并且该方法可适用于任何图块组。
在图7A中所示出的示例中,预取正好在图块组(例如所示出的示例中的第二图块组TG1 704)中的第一层组LG0 702之前执行。针对第二图块组TG1 704的第一层组LG0 702的图块(图块0)的预取发生在图块组的执行之前,如实心圆706所指示。此预取引入了额外时延,在不引入显著复杂性的情况下,该额外时延不能被隐藏(如下文所描述)。
在图7A中所示出的方法的变型中,虽然预取正好在第一层组LG0 702之前开始,但对层组的处理可以在预取完成之前开始,如虚线椭圆707所指示。这显著减少了此方法的时延。为了与对图块0的处理并行地实现此预取,可以使用存储器锁定技术以在执行预取的硬件块与读取输入数据的硬件块之间进行同步。此同步可以确保在已预取数据之前不会试图从OCM中读取数据。
在图7B中所示出的示例中,提前一个层组(和一个图块组)(即在前一图块组的最后一个层组期间)执行针对图块的预取。图7B示出了针对第二图块组TG1 704(如在图7A中那样)中的第一层组LG0 702的预取;然而,在此方法中,预取发生在对前一图块组TG0 710中的最后一个层组LG2 708的处理期间,如实心圆712所指示。通过(例如使用图7B的方法)提前预取层组,可以隐藏针对第一遍次的时延(其存在于图7A的方法中);然而,这确实需要针对跨图块组OCM分配的较大需求(即预取数据需要在一个图块组的执行期间存储在OCM中,并且在后一图块组的执行期间被访问)。仅在前一图块组不约束由下一图块组消耗(即在该下一图块组中使用)的任何数据的情况下,才可以执行提前预取层组。这对于多图块图块组和单图块图块组都成立。
由于图7A和图7B中的示例方法是参考针对第二图块组TG1 704的预取来描述的,因而没有完整地示出前一图块组TG0(即没有示出层组0)。
可以参考图8来描述另一预取示例。图8中的布置示出了在多核实现中针对单图块图块组的输入预取,并且使用图7A中所示出以及在上文描述的方法。由于仅存在单个图块(图块0 802),因而需要预取所有输入数据集(即整个输入张量),并且在大多数情况下,该所有输入数据集存储在所有核可访问的共享OCM中。如图8中所示出,对于不同层组,输入张量可以以不同方式进行分割(例如层组0 806中的X分割和层组3 808中的F分割),并且这是可能的,因为在相邻层组之间没有隐式数据依赖性。预取发生在执行图块组之前,如第一实心圆804所指示。此预取引入了不能被隐藏的额外时延。
虽然图8中的示例示出了多核实现,但除了在处理第一层组LG0 806和第四层组LG3 808时不可以在不同的核上并行执行而是将串行执行遍次(即对于LG0,Xpass0之后是Xpass1,随后是Xpass2)之外,单核实现将以非常类似的方式进行操作。
可以参考图9来描述另一预取示例。图9中的布置示出了在多核实现中针对单个层组单图块图块组的输入预取。在此示例中,输入数据根据(如上文所描述的)Y分割而分割成遍次,并且因此,针对每个遍次的相关输入数据可以被预取到将处理该遍次的核的本地OCM中。在图9中所示出的示例中,预取发生在使用(如上文所描述的)图7A的方法执行图块组(圆902)之前,并且因此该预取引入的时延不能被隐藏。
与图8中所示出的示例相比,图9中所示出的示例的时延更小,因为没有将整个输入张量读取到共享OCM中,而是根据Y分割进行细分,将每个核的输入数据的一部分以及输入数据的每个部分预取到对应本地OCM中,其中每个Y遍次之间的重叠部分被读取到共享OCM中。
在输入数据被行优先存储的情况下,有可能将Y分割应用于多核实现的每个核内的任何其他分割的顶部上,并且这可以例如用于减少预取数据的量并且因此减少时延,例如在应用于图8中所示出的示例的情况下。图10示出了多核实现中的单图块图块组的具体实现的仅第一层组,该第一层组类似于图8中所示出的第一层组,其中已将Y分割应用于现有X分割的顶部上。如图10中所示出,针对每个X遍次的输入数据在y维度上被进一步分割,并且随后仅在每个Y分割的基础上针对每个核执行预取,其中预取数据存储在本地OCM中。在开始处理层组之前(以与图7A的方法类似的方式)执行(如实心圆1002所指示的)对第一Y分割的预取,并且因此时延不能被隐藏,而(如实心圆1004、1006所指示的)对每个X遍次的后续Y分割的预取可以在对前一Y分割的处理期间执行(以与图7B的方法类似的方式)。
在图10中所示出的方法中,每个核同时在单独的X遍次上操作,使得第一核C0执行第一X遍次Xpass0,而第二核C1执行第二X遍次Xpass1,并且第三核C2执行第三X遍次Xpass2。在图10中所示出的变型中,如图11中所示出,在移动到下一X遍次上之前,所有核可以处理相同X遍次。
在将Y分割应用于现有分割的顶部上(例如应用于图10和图11的示例中的现有X分割或任何另一类型的分割的顶部上)的情况下,则分割的数量并不由核的数量决定(因为所有分割由相同核执行),而是由此层处的可用片上存储器大小(例如图块组中的后续层组尚未使用的所有可重用空间)决定。此分割大小不会传播到任何后一层组,因为该分割大小仅与输入预取相关。
虽然只有在上文描述的示例中的一些示例(例如图4B、图4D、图5、图7B、图10和图11中所示出的方法)中,预取操作中的一些预取操作的时延才可以被隐藏,但使用如所示出的预取减小了在(所预取的)输入数据被读取大于一次的情况下使用的带宽。通过使用预取,将数据从外部存储器中读取一次,并且随后对于所有后续读取,从片上存储器中读取数据。
如上文描述的示例中所示出,本文中描述的方法可应用于单核硬件和多核硬件两者。
图13示出了将NN映射到硬件的示例方法的流程图,其中选择性地使用预取(即输入预取),并且可以参考图12A和图12B来描述该示例方法。图12A示出了NN内的层组的没有分支的第一布置,而图12B示出了NN内的层组的涉及分支的第二布置。图12B中所示出的布置中的分支意味着将来自第一层组LG0的输出从存储器中读取两次。该输出作为针对第二层组LG1的输入被读取一次,并且作为针对第三层组LG2的输入被再次读取。虽然图12B示出了分支,但将了解,将存在多次读取输入数据而不使用分支(例如使用F分割)的场景。
在图13的方法中是否执行预取的确定基于两个参数:输入预取比率(IP_ratio)和输入预取力因子(IP_force_factor)。输入预取比率(IP_ratio)是取决于每个层组的映射器结果的计算变量。每个层组的映射器结果对应于从针对特定层组的存储器(无论是片上存储器还是片外存储器)中读取相同输入的次数,并且在层组之间可能有所不同。参考图12B中所示出的示例,如果LG2和LG3已被分组成图块组,并且正在使用图13的方法来确定是否将LG1合并到该相同图块组中,则针对LG1的输入预取比率是二。输入预取力因子是在上文提及并且可设置为二的阈值。
如图13中所示出,将NN映射到硬件的方法,并且特别是确定是否将层组合并到图块组中的方法包括确定针对被评定用于合并到图块组中的层组的输入预取比率(块1302)。如上文所描述,层组可以包括一个或多个层,并且因此,可以针对单个层或者针对在单个硬件遍次中一起实现的一组层来执行此评定。
如果输入预取比率不小于(即其等于或超过)输入预取力因子,则需要预取(块1304中的‘是’),并且在生成图块组时(即当确定是否将层组合并到图块组中时)考虑这一点。当需要预取时,对用于预取数据的空间进行预分配(块1306),并且该方法继续进行以确定是否符合用于合并层组的一个或多个其他标准(块1308)。这些其他(非预取相关)合并条件可以例如与片上存储器中是否有充足空间来存储来自层组的输出数据相关。如果符合这些其他合并条件(块1308中的‘是’),则将层组合并到图块组中(块1310),并且(作为合并的结果)释放针对现在是图块组中的第二层组的层组的任何预分配(块1311)。随后可以(以相反的执行顺序)重复该方法以评定下一层组。参考图12B中所示出的示例,已分析LG1,并且如果确定LG1可以与LG2和LG3一起合并到图块组中,则待分析的下一层组是LG0,并且释放与LG2相关联的任何预分配。
如果不符合用于将层组合并到图块组中的其他标准(块1308中的‘否’),则释放针对(如在块1306中预分配的)该层的预分配(块1312),并且不将层组合并到图块组中(块1314)。响应于不符合合并条件而(在块1312中)释放的分配与响应于(在块1311中)对层组的合并而(在块1310中)释放的分配不同。响应于不符合合并条件而(在块1312中)释放的分配仅指紧接在(块1306中的)决策点之前针对所评定的特定层进行的预分配。
如果输入预取比率不小于(即其等于或超过)输入预取力因子(块1304中的‘否’),则不需要预取(省略块1306),但仍然(在对应于上文描述的块108的块1308'中)基于其他合并标准来测试层组,以确定是(在块1310中)合并还是(在块1314中)不合并层组。如果不执行合并,则如果(例如在分支中)存在多个输入层组,便可以针对任何其他输入层组重复该方法,直到不再有输入层组可以被合并,并且一旦已考虑所有输入层组,就可以针对下一图块组重复该方法。参考图12B中所示出的示例,已分析LG1,并且如果确定LG1不能与LG2和LG3一起合并到图块组中,则可以分析LG0以确定其是否可以与LG1一起合并到图块组中。
当(在块1308和1308’中)确定是否符合用于合并的其他(非预取相关)标准时,忽略针对除了当前正在评定的层组之外的任何层组的预取数据的任何预分配(即除了紧接在评定之前进行的预分配之外的任何预分配)。如上文所描述,可以忽略此预分配,因为如果当前正在评定的层组被合并,则将不需要分配,因为该分配将与不再是图块组中的第一层组的层组相关,并且因此不需要预取其输入数据。参考图12B中所示出的示例,当分析LG1时,当(在块1308和1308’中)评定是否符合用于合并的其他(非预取相关)标准时,忽略针对LG2(图块组中的当前第一层组)的任何预分配。
将了解,虽然图13的方法示出了在IP_ratio等于或超过IP_force_factor的情况下执行预取,但在其他示例中,IP_force_factor可以被不同地定义,使得仅当IP_ratio超过IP_force_factor时才执行预取。
虽然图13示出了在(于块1308中)基于其他层组合并条件进行后一测试之前的(在块1306中的)预分配,但在图13中所示出的变型中,预取可以不实际执行,而是可以确定预取数据的大小,即确定针对特定层组的预取缓冲器的大小(块1406)。随后,当(在块1308中)评定其他层组合并条件时,考虑此预取缓冲器大小。(在块1308中)对其他合并条件的评估可以涉及各种其他缓冲器的大小,该其他缓冲器诸如SWAP缓冲器、HEAP缓冲器、系数缓冲器和/或ACCUM缓冲器。由于在图14中所示出的方法中实际上没有分配预取缓冲器,因而如果不符合其他合并条件(块1308中的‘否’),则不需要释放分配,即从图14的方法中省略图13的块1312。
对于单图块图块组,可以实现额外的Y分割(例如,如上文所描述),并且这可以在(于块1306和1406中)确定分配量时实现,即在确定预取缓冲器的大小时实现。
在将片上存储器中的槽分配给层组时,使用不能被分配相同槽的层组的列表。此列表可以称为‘排他列表’。在使用输入预取的情况下,由于预取输入数据的较临时性质,存在两个不同的排他列表。
当为特定层组的输出数据分配槽时,排他列表包括在执行特定层组时尚未使用的具有输出缓冲器的层组、层组本身以及在来自特定层组的输出缓冲器仍然存在时执行的任何层组。这可以参考图15中所示出的示例执行顺序来描述。将LG4视为特定层组,其针对输出缓冲器的排他列表包括LG1和LG2(在执行特定层组时具有尚未使用的输出缓冲器的层组)、LG4(层组本身)以及LG6、LG7、LG8和LG9(在来自特定层组的输出缓冲器仍然存在时执行的层组)。
当为针对特定层组的预取数据分配槽时,排他列表包括具有在执行特定层组时尚未使用的输出缓冲器的层组和层组本身。在来自特定层组的输出缓冲器仍然存在时执行的任何层组不在排他列表上,因为在执行特定层之后,可以释放该特定层组的预取缓冲器分配。这可以参考图15中所示出的示例执行顺序来描述。将LG4视为特定层组,其针对预取缓冲器的排他列表包括LG1和LG2(具有在执行特定层组时尚未使用的输出缓冲器的层组)和LG4(层组本身)。然而,排他列表不包括LG6、LG7、LG8和LG9(与针对输出缓冲器的排他列表不同)。
为了将针对预取数据的排他列表保持为最小值,可以提前一个层组(例如紧接在执行该层组之前)执行针对层组的输入预取,而不是在较早层组期间执行该输入预取。
上文描述了将神经网络映射到硬件的各种方法。一旦使用上述方法来生成,映射神经网络便可以存储在存储器中,以用于在硬件布置上执行。所映射的神经网络可以被配置成当在硬件上被执行时执行任何任务。例如,当在硬件上被执行时,映射神经网络可以执行图像处理(例如图像分类、图像生成或图像操纵)。
图16示出了其中可实现本文中描述的方法的计算机系统。计算机系统包括CPU1602、GPU 1604、存储器1606、神经网络加速器(NNA)1608和其他设备1614,诸如显示器1616、扬声器1618和相机1617。计算机系统的部件可经由通信总线1620彼此通信。NNA1608可以被配置成实现如本文中所描述的预取,并且/或者CPU 1602可以被配置成(例如使用图13或图14的方法)执行NN到预定义硬件布置的映射。
计算机系统被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。
一般来说,上文描述的功能、方法、技术或部件中的任一者可以在软件、固件、硬件(例如固定逻辑电路系统)或它们的任何组合中实现。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件具体实现的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,所述程序代码当在处理器上被执行时执行指定任务。本文中描述的算法和方法可由执行代码的一个或多个处理器执行,该代码使得处理器执行算法/方法。计算机可读存储介质的示例包含随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包含以机器语言、解译语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或部分,所述集合或部分具有处理能力以使得其可执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如通用GPU)、微处理器、旨在加速CPU之外的任务的任何处理单元等。计算机或计算机系统可包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,并且因此术语‘计算机’包括机顶盒、媒体播放器、数字收音机、PC、服务器、移动电话、个人数字助理和许多其他设备。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路,或者用于配置可编程芯片以实施所需功能。也就是说,可以提供一种计算机可读存储介质,该计算机可读存储介质在其上编码有集成电路定义数据集形式的计算机可读程序代码,该计算机可读程序代码当在集成电路制造系统中处理(即运行)时将该系统配置为制造包括本文中所描述的任何装置的NN硬件。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造被配置成执行如本文中所描述的预取的NNA的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时,使得制造NNA的方法得以执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包括作为寄存器传送级(RTL)代码、作为高级电路表示,诸如Verilog或VHDL,以及作为低级电路表示,诸如OASIS(RTM)和GDSII。在逻辑上定义集成电路的更高级表示法(诸如RTL)可以在被配置为用于在软件环境的上下文中产生集成电路的制造定义的计算机系统处处理,该软件环境包括电路元件的定义以及用于组合这些元件以便产生由表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成该集成电路的制造定义的代码。
现在将参考图17来描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置成制造NNA的示例。
图17示出了集成电路(IC)制造系统1702的示例,该集成电路制造系统被配置成制造被配置成执行如本文中的示例中的任何示例中所描述的预取的NNA。具体地说,IC制造系统1702包括布局处理系统1004和集成电路生成系统1706。IC制造系统1702被配置成接收(例如定义被配置成执行如本文中的示例中的任何示例中所描述的预取的NNA的)IC定义数据集,处理IC定义数据集,以及根据IC定义数据集来生成IC(例如其体现如本文中的示例中的任何示例中所描述的NNA)。对IC定义数据集的处理将IC制造系统1702配置成制造集成电路,该集成电路体现如本文中的示例中的任何示例中所描述的NNA。
布局处理系统1704配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到IC生成系统1706。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1706根据电路布局定义来生成IC。例如,IC生成系统1706可以实现用于生成IC的半导体装置制造工艺,所述半导体装置制造工艺可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以呈掩模的形式,所述掩模可以在用于根据电路定义生成IC的光刻工艺中使用。可替代地,提供给IC生成系统1706的电路布局定义可呈计算机可读代码的形式,IC生成系统1706可使用所述计算机可读代码来形成用于生成IC的合适掩模。
由IC制造系统1702执行的不同过程可全部在一个位置中例如由一方来实施。可替代地,IC制造系统1002可以是分布式系统,使得一些过程可在不同位置处执行,并且可由不同方来执行。例如,以下阶段中的一些阶段可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置成制造NNA,而无需对IC定义数据集进行处理以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上文关于图17描述的方式对集成电路制造系统的配置,可制造出如本文中所描述的装置。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图17中示出的示例中,IC生成系统可由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
本领域技术人员将认识到用来存储程序指令的存储设备可分布在网络上。例如,远程计算机可将所描述的过程的示例存储为软件。本地或终端计算机可访问远程计算机,并且下载软件的一部分或全部以运行程序。替代地,本地计算机可根据需要下载软件的片段,或者在本地终端处执行一些软件指令,并且在远程计算机(或计算机网络)处执行一些软件指令。本领域技术人员还将认识到,通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可由诸如DSP、可编程逻辑阵列等专用电路实行。
本文中所描述的方法可由配置有存储在有形存储介质上的机器可读形式的软件的计算机执行,例如,软件呈包括用于将计算机配置成执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或呈包括计算机程序代码装置的计算机程序的形式,当程序在计算机上运行时以及在计算机程序可在计算机可读存储介质上实施的情况下,所述代码装置适于执行本文中所描述的方法中的任一种方法的所有步骤。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行,使得所述方法步骤可以任何合适的次序实行或同时实行。
本文中所描述的硬件部件可由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质产生。
存储用于实施所公开方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,诸如SRAM或DRAM。可用以实施非易失性存储器的技术的示例包括光学和磁存储器技术、闪存存储器、相变存储器、电阻RAM。
对“逻辑”的特定引用是指执行功能(function/functions)的结构。逻辑的示例包括被布置成执行这些功能的电路系统。例如,这种电路系统可包括在制造过程中可用的晶体管和/或其他硬件元件。借助于示例,这种晶体管和/或其他元件可用以形成实施和/或含有存储器的电路系统或结构,诸如寄存器、触发器或锁存器;逻辑运算器,诸如布尔(Boolean)运算;数学运算器,诸如加法器、乘法器;或移位器和互连线。这类元件可作为定制电路或标准单元库、宏来提供,或在其他抽象层级处提供。这类元件可以特定布置来互连。逻辑可包括作为固定功能的电路系统,并且电路系统可被编程以执行一个或多个功能;可从固件或软件更新或控制机制中提供这种编程。被标识为执行一个功能的逻辑还可包括实施组成功能或子过程的逻辑。在一个示例中,硬件逻辑具有实施一个或多个固定功能操作、状态机或过程的电路系统。
与已知的具体实施相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中所实现的方法中)的具体实施可引起性能改进。性能改进可包含计算性能提高、时延减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这类装置、设备、模块和系统(例如在集成电路中)期间,可在性能提高与物理具体实现之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知具体实现的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理具体实施的改进(诸如硅面积减小)的概念可进行权衡以获得性能提高。这例如可通过在预定义面积预算内制造模块的多个实例来完成。
如对本领域技术人员显而易见,可延长或改变本文中给出的任何范围或设备值而不丧失所寻求的效果。
将了解,上文所描述的益处和优点可涉及一个实施方案,或可涉及若干实施方案。实施方案不限于解决所陈述问题中的任一问题或全部问题的实施方案,或具有所陈述益处中的任一益处或全部益处的实施方案。
对‘一’项目的任何引用都是指这些项目中的一个或多个项目。术语‘包括’在本文中用以意指包括所标识的方法块或元件,但这类块或元件不包括排他列表,并且装置可包括额外块或元件,并且方法可包括额外操作或元件。此外,并不暗示块、元件和操作本身是封闭的。
本文中所描述的方法的步骤可以任何合适的次序或在适当时被同时实行。图中的框之间的箭头展示方法步骤的一个示例序列,但并不旨在排除其他序列或并行执行多个步骤。另外,在不脱离本文中所描述的主题的精神和范围的情况下,可从方法中的任一方法中删除各个块。上文所描述的示例中的任一示例的各方面可与所描述的其他示例中的任一示例的各方面组合以形成其他示例而不会丧失所寻求的效果。在图的元件被展示为通过箭头连接的情况下,将了解,这些箭头仅展示元件之间的通信(包括数据和控制消息)的一个示例流动。元件之间的流动可在任一方向上或在两个方向上。
申请人据此独立地公开了本文中所描述的每个单独特征以及两个或更多个这类特征的任何组合,到达的程度使得这类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可在本发明的范围内进行各种修改。

Claims (21)

1.一种将神经网络映射到硬件的方法,所述方法包括:
定义多个层组,每个层组包括所述神经网络的一个或多个层,所述一个或多个层在通过所述硬件的单个遍次中被处理;以及
将所述层组分组成一个或多个图块组,每个图块组包括在执行所述神经网络时被评估的层组集合,其中将所述层组分组成图块组包括:
选择按执行顺序在所述图块组中的第一层组之前的层组,并且确定针对所述层组的输入预取比率,所述输入预取比率对应于从存储器中读取针对所述层组的输入数据的次数;
将所述输入预取比率与输入预取力因子进行比较,其中所述输入预取力因子定义用于预取输入数据的阈值;以及
响应于所述输入预取比率超过所述预取力因子,评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的预取缓冲器的大小,并且响应于确定满足与所述层组的输出数据相关的所述一个或多个标准,将所述层组合并到所述图块组中。
2.根据权利要求1所述的方法,其中响应于确定不满足与所述层组的输出数据相关的所述一个或多个标准,不将所述层组合并到所述图块组中。
3.根据权利要求1所述的方法,所述方法还包括:
响应于所述输入预取比率超过所述预取力因子,在片上存储器中为所述输入数据预分配空间。
4.根据权利要求3所述的方法,其中响应于所述输入预取比率超过所述预取力因子,并且进一步响应于确定不满足与所述层组的输出数据相关的所述一个或多个标准,释放所述预分配。
5.根据权利要求1所述的方法,其中将所述层组分组成图块组还包括:
响应于所述输入预取比率等于所述预取力因子,评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的预取缓冲器的大小,并且响应于确定满足与所述层组的输出数据相关的所述一个或多个标准,将所述层组合并到所述图块组中。
6.根据权利要求5所述的方法,所述方法还包括:
响应于所述输入预取比率等于所述预取力因子,在片上存储器中为所述输入数据预分配空间。
7.根据权利要求6所述的方法,其中响应于所述输入预取比率等于所述预取力因子,并且进一步响应于确定不满足与所述层组的输出数据相关的所述一个或多个标准,释放所述预分配。
8.根据权利要求1所述的方法,其中将所述层组分组成图块组还包括:当评定与所述层组的输出数据相关的一个或多个标准时,忽略片上存储器中针对所述图块组中的所述第一层组的输入数据的任何空间预分配。
9.根据权利要求1所述的方法,其中评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的预取缓冲器的大小,所述评定包括:
将所述输入数据分割成多个遍次;以及
评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的遍次的预取缓冲器的大小。
10.根据权利要求1所述的方法,所述方法还包括:
将映射神经网络存储在存储器中,以用于在所述硬件上执行。
11.根据权利要求1所述的方法,所述方法还包括:
在所述硬件上执行所述神经网络。
12.一种计算设备,所述计算设备包括:
处理器;以及
存储器,所述存储器布置成存储计算机可执行指令,所述计算机可执行指令在由所述处理器执行时使得所述处理器:
定义多个层组,每个层组包括所述神经网络的一个或多个层,所述一个或多个层在通过所述硬件的单个遍次中被处理;以及
将所述层组分组成一个或多个图块组,每个图块组包括在执行所述神经网络时被评估的层组集合,其中将所述层组分组成图块组包括:
选择按执行顺序在所述图块组中的第一层组之前的层组,并且确定针对所述层组的输入预取比率,所述输入预取比率对应于从存储器中读取针对所述层组的输入数据的次数;
将所述输入预取比率与输入预取力因子进行比较,其中所述输入预取力因子定义用于预取输入数据的阈值;以及
响应于所述输入预取比率超过所述预取力因子,评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的预取缓冲器的大小,并且响应于确定满足与所述层组的输出数据相关的所述一个或多个标准,将所述层组合并到所述图块组中。
13.根据权利要求12所述的计算设备,其中所述计算机可执行指令在由所述处理器执行时进一步使得所述处理器:响应于确定不满足与所述层组的输出数据相关的所述一个或多个标准,不将所述层组合并到所述图块组中。
14.根据权利要求12所述的计算设备,其中所述计算机可执行指令在由所述处理器执行时进一步使得所述处理器:
响应于所述输入预取比率超过所述预取力因子,在片上存储器中为所述输入数据预分配空间。
15.根据权利要求14所述的计算设备,其中所述计算机可执行指令在由所述处理器执行时进一步使得所述处理器:响应于所述输入预取比率超过所述预取力因子,并且进一步响应于确定不满足与所述层组的输出数据相关的所述一个或多个标准,释放所述预分配。
16.根据权利要求12所述的计算设备,其中将所述层组分组成图块组还包括:
响应于所述输入预取比率等于所述预取力因子,评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的预取缓冲器的大小,并且响应于确定满足与所述层组的输出数据相关的所述一个或多个标准,将所述层组合并到所述图块组中。
17.根据权利要求16所述的计算设备,其中所述计算机可执行指令在由所述处理器执行时进一步使得所述处理器:响应于所述输入预取比率等于所述预取力因子,在片上存储器中为所述输入数据预分配空间。
18.根据权利要求17所述的计算设备,其中所述计算机可执行指令在由所述处理器执行时进一步使得所述处理器:响应于所述输入预取比率等于所述预取力因子,并且进一步响应于确定不满足与所述层组的输出数据相关的所述一个或多个标准,释放所述预分配。
19.根据权利要求12所述的计算设备,其中将所述层组分组成图块组还包括:当评定与所述层组的输出数据相关的一个或多个标准时,忽略片上存储器中针对所述图块组中的所述第一层组的所述输入数据的任何空间预分配。
20.根据权利要求12所述的计算设备,其中评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的预取缓冲器的大小,所述评定包括:
将所述输入数据分割成多个遍次;以及
评定与所述层组的输出数据相关的一个或多个标准,所述标准包括被配置成存储所述输入数据的遍次的预取缓冲器的大小。
21.根据权利要求12所述的计算设备,其中所述计算机可执行指令在由所述处理器执行时进一步使得所述处理器将映射神经网络存储在存储器中,以用于在所述硬件上执行。
CN202311719821.6A 2022-12-22 2023-12-14 将神经网络映射到硬件 Pending CN118246498A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB2219519.2 2022-12-22
GB2219519.2A GB2625739A (en) 2022-12-22 2022-12-22 Mapping neural networks to hardware

Publications (1)

Publication Number Publication Date
CN118246498A true CN118246498A (zh) 2024-06-25

Family

ID=85130015

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311719821.6A Pending CN118246498A (zh) 2022-12-22 2023-12-14 将神经网络映射到硬件

Country Status (3)

Country Link
EP (1) EP4390770A1 (zh)
CN (1) CN118246498A (zh)
GB (1) GB2625739A (zh)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021237755A1 (zh) * 2020-05-29 2021-12-02 华为技术有限公司 神经网络调度方法及装置
EP3985572A1 (en) * 2020-10-13 2022-04-20 Imagination Technologies Limited Implementation of a neural network in multicore hardware

Also Published As

Publication number Publication date
GB202219519D0 (en) 2023-02-08
GB2625739A (en) 2024-07-03
EP4390770A1 (en) 2024-06-26

Similar Documents

Publication Publication Date Title
CN114816331B (zh) 具有时钟选通的用于执行矩阵乘法的硬件单元
US20220253716A1 (en) Neural network comprising matrix multiplication
EP3985572A1 (en) Implementation of a neural network in multicore hardware
US20220375145A1 (en) Tile-Based Scheduling Using Per-Tile Hash Values
US20240111692A1 (en) Priority based arbitration
US11853811B2 (en) Priority based arbitration between shared resource requestors using priority vectors and binary decision tree
US20240134572A1 (en) Allocation of memory by mapping registers referenced by different instances of a task to individual logical memories
US20210279103A1 (en) Resource allocation in a parallel processing system
US10175943B2 (en) Sorting numbers in hardware
EP4390768A1 (en) Implementing neural networks in hardware
US20240232596A1 (en) Implementing neural networks in hardware
CN118246498A (zh) 将神经网络映射到硬件
US20240232597A1 (en) Mapping neural networks to hardware
CN115545174A (zh) 包括矩阵乘法的神经网络
US10387155B2 (en) Controlling register bank access between program and dedicated processors in a processing system
CN117273093A (zh) 将神经网络映射到硬件
GB2616528A (en) Resource allocation in a parallel processing system
GB2615225A (en) Resource allocation in a parallel processing system
GB2621217A (en) Implementation of a neural network in multicore hardware
CN117313809A (zh) 用于在神经网络加速器上执行神经网络的方法和系统
GB2595782A (en) Tile-based scheduling
GB2591713A (en) Hardware unit for performing matrix multiplication with clock gating
GB2584228A (en) Hardware unit for performing matrix multiplication with clock gating

Legal Events

Date Code Title Description
PB01 Publication