CN112513885A - 神经处理器 - Google Patents

神经处理器 Download PDF

Info

Publication number
CN112513885A
CN112513885A CN201980036663.XA CN201980036663A CN112513885A CN 112513885 A CN112513885 A CN 112513885A CN 201980036663 A CN201980036663 A CN 201980036663A CN 112513885 A CN112513885 A CN 112513885A
Authority
CN
China
Prior art keywords
ifm
register
block
multiplier
weight
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
CN201980036663.XA
Other languages
English (en)
Other versions
CN112513885B (zh
Inventor
伊利亚·奥夫相尼科夫
阿里·沙菲伊·阿德斯塔尼
约瑟夫·哈桑
王磊
李世焕
宋准镐
张准佑
王一兵
李岳成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co 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 Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of CN112513885A publication Critical patent/CN112513885A/zh
Application granted granted Critical
Publication of CN112513885B publication Critical patent/CN112513885B/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/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/002Image coding using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Multimedia (AREA)
  • Complex Calculations (AREA)
  • Testing Of Coins (AREA)

Abstract

一种神经处理器。在一些实施例中,处理器包括:第一区块、第二区块、存储器和总线。总线可连接到存储器、第一区块和第二区块。第一区块可包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器。激活缓冲器可被配置为包括:第一队列,连接到第一乘法器;和第二队列,连接到第二乘法器。第一队列可包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器。第一区块可被配置为:在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;并且在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。

Description

神经处理器
技术领域
根据本公开的实施例的一个或多个方面涉及处理电路,更具体地,涉及用于执行乘法和加法的组合的处理电路。
背景技术
在操作中,神经网络可执行涉及大量的乘法和加法的张量运算(例如,张量乘法和卷积)。如果这些操作由通用中央处理器或甚至图形处理器(其可更好地适合于这样的任务)执行,则这些操作的执行可相对慢并且每次操作引起相对高的能量成本。特别是在可具有严格约束的功率预算的小型装置(例如,移动装置、手持装置)中,与通用中央处理器的使用或图形处理器的使用相关联的功耗可能是显著的缺点。
因此,需要一种改进的用于神经网络计算的处理电路。
发明内容
技术问题
在神经网络中,由通用中央处理器或图形处理器执行的张量运算可相对慢并且每次操作引起相对高的能量成本。特别是在可具有严格约束的功率预算的移动装置或手持装置中,功耗可能是显著的缺点。
技术方案
根据本公开的一些实施例,提供一种处理器,所述处理器包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块、第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,第一区块被配置为执行激活的阵列与权重的核的卷积,执行卷积的步骤依次包括:形成核与激活的阵列的第一子阵列的张量乘积;形成核与激活的阵列的第二子阵列的张量乘积,第二子阵列在第一方向上从第一子阵列偏移n个阵列元素,n是正整数;和形成核与激活的阵列的第三子阵列的张量乘积,第三子阵列在与第一方向垂直的第二方向上从第二子阵列偏移一个阵列元素。
在一些实施例中,执行卷积的步骤还依次包括:在形成核与第三子阵列的张量乘积之后,形成核与激活的阵列的第四子阵列的张量乘积,第四子阵列在与第一方向相反的第三方向上从第三子阵列偏移m个阵列元素,m是正整数;和形成核与激活的阵列的第五子阵列的张量乘积,第五子阵列在第二方向上从第四子阵列偏移一个阵列元素。
在一些实施例中,m等于n。
在一些实施例中,n等于1。
在一些实施例中,执行卷积的步骤还依次包括:在形成核与第一子阵列的乘积之后,形成核与激活的阵列的n-1个各自的子阵列的n-1个乘积,所述n-1个乘积中的第k个乘积中的子阵列在第一方向上从第一子阵列偏移k+1个阵列元素。
在一些实施例中,所述处理器还包括:高速缓存,连接到激活缓冲器并且被配置为将激活供应给激活缓冲器,高速缓存具有足以存储H+(H+n)×(W-1)-1个激活的大小,其中,H是核在第一方向上的大小,并且W是核在第二方向上的大小。
在一些实施例中,激活缓冲器被配置为包括:第一队列,连接到第一乘法器,和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块还被配置为:在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理器还包括:第一加法器,被配置为在第一状态下连接到第一乘法器的输出和第二乘法器的输出,并且将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理器还包括:第二加法器,被配置为在第二状态下连接到第一乘法器的输出。
根据本公开的一些实施例,提供一种用于使用处理电路进行计算的方法,所述处理电路包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,所述方法包括:执行激活的阵列与权重的核的卷积,执行卷积的步骤依次包括:形成核与激活的阵列的第一子阵列的张量乘积;形成核与激活的阵列的第二子阵列的张量乘积,第二子阵列在第一方向上从第一子阵列偏移n个阵列元素,n是正整数;和形成核与激活的阵列的第三子阵列的张量乘积,第三子阵列在与第一方向垂直的第二方向上从第二子阵列偏移一个阵列元素。
在一些实施例中,执行卷积的步骤还依次包括:在形成核与第三子阵列的张量乘积之后,形成核与激活的阵列的第四子阵列的张量乘积,第四子阵列在与第一方向相反的第三方向上从第三子阵列偏移m个阵列元素,m是正整数;和形成核与激活的阵列的第五子阵列的张量乘积,第五子阵列在第二方向上从第四子阵列偏移一个阵列元素。
在一些实施例中,m等于n。
在一些实施例中,n等于1。
在一些实施例中,执行卷积的步骤还依次包括:在形成核与第一子阵列的乘积之后,形成核与激活的阵列的n-1个各自的子阵列的n-1个乘积,所述n-1个乘积中的第k个乘积中的子阵列在第一方向上从第一子阵列偏移k+1个阵列元素。
在一些实施例中,所述处理电路还包括:高速缓存,连接到激活缓冲器并且被配置为将激活供应给激活缓冲器,高速缓存具有足以存储H+(H+n)×(W-1)-1个激活的大小,其中,H是核在第一方向上的大小,并且W是核在第二方向上的大小。
在一些实施例中,激活缓冲器被配置为包括:第一队列,连接到第一乘法器,和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块还被配置为:在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理器还包括第一加法器,所述方法还包括:在第一状态下将第一加法器连接到第一乘法器的输出和第二乘法器的输出,并通过第一加法器将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
根据本公开的一些实施例,提供一种用于使用用于处理的装置进行计算的方法,所述用于处理的装置包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,所述方法包括:执行激活的阵列与权重的核的卷积,执行卷积的步骤依次包括:形成核与激活的阵列的第一子阵列的张量乘积;形成核与激活的阵列的第二子阵列的张量乘积,第二子阵列在第一方向上从第一子阵列偏移n个阵列元素,n是正整数;和形成核与激活的阵列的第三子阵列的张量乘积,第三子阵列在与第一方向垂直的第二方向上从第二子阵列偏移一个阵列元素。
根据本公开的一些实施例,提供一种处理器,所述处理器包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,所述处理器被配置为执行激活的阵列与权重的第一核的第一卷积,执行第一卷积的步骤包括:将激活的阵列的第一子阵列广播到第一区块和第二区块;形成第一张量乘积,第一张量乘积是权重的第一核的第一子阵列与激活的阵列的第一子阵列的张量乘积;将第一张量乘积存储在存储器中;将激活的阵列的第二子阵列广播到第一区块和第二区块;形成第二张量乘积,第二张量乘积是权重的第一核的第二子阵列与激活的阵列的第二子阵列的张量乘积;和将第一张量乘积和第二张量乘积相加。
在一些实施例中,第一区块还包括:权重解压缩单元,被配置为:对以压缩的形式对多个权重进行编码的数据字进行解压缩,以提取第一权重和第二权重;将第一权重输入到第一权重寄存器;和将第二权重输入到第二权重寄存器。
在一些实施例中,第一区块还被配置为:执行激活的阵列与权重的第二核的第二卷积,第二执行卷积的步骤依次包括:形成第二核的第一部分与激活的阵列的第一子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重;形成第二核的第二部分与激活的阵列的第一子阵列的张量乘积,第二核的第二部分包括存储在第二权重寄存器中的权重;和形成第二核的第一部分与激活的阵列的第二子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重。
在一些实施例中,激活缓冲器被配置为包括:第一队列,连接到第一乘法器,和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块还被配置为:在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理器还包括:第一加法器,被配置为在第一状态下连接到第一乘法器的输出和第二乘法器的输出;并且将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理器还包括:第二加法器,被配置为在第二状态下连接到第一乘法器的输出。
在一些实施例中,所述处理器还包括:第一累加器,连接到第一加法器,和第二累加器,连接到第二加法器,第一累加器包括寄存器,并且被配置为在第一状态下将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,并且将第一累加器的累加值存储在第一累加器的寄存器中。
在一些实施例中,第二累加器包括寄存器,并且被配置为在第二状态下将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值,并且将第二累加器的累加值存储在第二累加器的寄存器中。
在一些实施例中,所述处理器还包括:激活零跳过控制电路(activation zeroskip control circuit),被配置为:确定第一队列的输出寄存器是否包含零,并且响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
根据本公开的一些实施例,提供一种用于使用处理电路进行计算的方法,所述处理电路包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,所述方法包括:执行激活的阵列与权重的第一核的第一卷积,执行第一卷积的步骤包括:将激活的阵列的第一子阵列广播到第一区块和第二区块;形成第一张量乘积,第一张量乘积是权重的第一核的第一子阵列与激活的阵列的第一子阵列的张量乘积;将第一张量乘积存储在存储器中;将激活的阵列的第二子阵列广播到第一区块和第二区块;形成第二张量乘积,第二张量乘积是权重的第一核的第二子阵列与激活的阵列的第二子阵列的张量乘积;和将第一张量乘积和第二张量乘积相加。
在一些实施例中,第一区块还包括权重解压缩单元,所述方法还包括:通过权重解压缩单元对以压缩的形式对多个权重进行编码的数据字进行解压缩,以提取第一权重和第二权重;将第一权重输入到第一权重寄存器;和将第二权重输入到第二权重寄存器。
在一些实施例中,所述方法还包括:执行激活的阵列与权重的第二核的第二卷积,第二执行卷积的步骤依次包括:形成第二核的第一部分与激活的阵列的第一子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重;形成第二核的第二部分与激活的阵列的第一子阵列的张量乘积,第二核的第二部分包括存储在第二权重寄存器中的权重;和形成第二核的第一部分与激活的阵列的第二子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重。
在一些实施例中,激活缓冲器被配置为包括:第一队列,连接到第一乘法器,和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块还被配置为:在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理电路还包括:第一加法器,所述方法还包括:在第一状态下将第一加法器连接到第一乘法器的输出和第二乘法器的输出,和通过第一加法器将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理电路还包括第二加法器,所述方法还包括在第二状态下将第二加法器连接到第一乘法器的输出。
在一些实施例中,所述处理电路还包括:第一累加器,连接到第一加法器,和第二累加器,连接到第二加法器,第一累加器包括寄存器,所述方法还包括:在第一状态下通过第一累加器将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,并且通过第一累加器将第一累加器的累加值存储在第一累加器的寄存器中。
在一些实施例中,第二累加器包括寄存器,并且所述方法还包括:在第二状态下通过第二累加器将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值,并且通过第二累加器将第二累加器的累加值存储在第二累加器的寄存器中。
根据本公开的一些实施例,提供一种用于使用用于处理的装置进行计算的方法,所述用于处理的装置包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,所述方法包括:执行激活的阵列与权重的第一核的第一卷积,执行第一卷积的步骤包括:将激活的阵列的第一子阵列广播到第一区块和第二区块;形成第一张量乘积,第一张量乘积是权重的第一核的第一子阵列与激活的阵列的第一子阵列的张量乘积;将第一张量乘积存储在存储器中;将激活的阵列的第二子阵列广播到第一区块和第二区块;形成第二张量乘积,第二张量乘积是权重的第一核的第二子阵列与激活的阵列的第二子阵列的张量乘积;和将第一张量乘积和第二张量乘积相加。
根据本公开的一些实施例,提供一种处理器,所述处理器包括:第一区块、第二区块、存储器、输入总线和输出总线,输入总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,第一区块被配置为执行激活的阵列与权重的核的第一卷积;存储器包括:第一存储器存储体组(memory bank set)和第二存储器存储体组;输入总线包括:第一分段总线(segmentedbus),用于在第一方向上进行数据广播,和第二分段总线,用于在与第一方向相反的第二方向上进行数据广播;第一分段总线包括:第一开关块和第二开关块;第一开关块连接到第一区块和第一存储器存储体组;第二开关块连接到第二区块和第二存储器存储体组;第二分段总线包括:第三开关块和第四开关块;第三开关块连接到第一区块和第一存储器存储体组;第四开关块连接到第二区块和第二存储器存储体组;第一开关块的输入连接到第二开关块的输出;并且第三开关块的输出连接到第四开关块的输入。
在一些实施例中,第一分段总线被配置为:在第一总线状态下通过第一开关块将第一存储器存储体组连接到第一区块,并且通过第二开关块将第二存储器存储体组连接到第二区块。
在一些实施例中,第一分段总线还被配置为:在第二总线状态下通过第一开关块和通过第二开关块将第二存储器存储体组连接到第一区块,并且通过第二开关块将第二存储器存储体组连接到第二区块。
在一些实施例中,激活缓冲器被配置为包括:第一队列,连接到第一乘法器,和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块还被配置为:在第一状态下在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理器还包括:第一加法器,被配置为在第一状态下连接到第一乘法器的输出和第二乘法器的输出;并且将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理器还包括:第二加法器,被配置为在第二状态下连接到第一乘法器的输出。
在一些实施例中,处理器还包括:第一累加器,连接到第一加法器;和第二累加器,连接到第二加法器,第一累加器包括寄存器,并且被配置为在第一状态下将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,并且将第一累加器的累加值存储在第一累加器的寄存器中。
在一些实施例中,第二累加器包括寄存器,并且被配置为在第二状态下将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值,并且将第二累加器的累加值存储在第二累加器的寄存器中。
在一些实施例中,所述处理器还包括:激活零跳过控制电路,被配置为:确定第一队列的输出寄存器是否包含零,并且响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
在一些实施例中,所述处理器还包括复用器,复用器具有:输入,在复用器的单端口侧连接到第一乘法器;第一输出,在复用器的多端口侧连接到第一加法器;和第二输出,在复用器的多端口侧连接到第二加法器。
根据本公开的一些实施例,提供一种用于使用处理电路进行计算的方法,所述处理电路包括:第一区块、第二区块、存储器、输入总线和输出总线,输入总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,第一区块被配置为执行激活的阵列与权重的核的第一卷积;存储器包括:第一存储器存储体组和第二存储器存储体组;输入总线包括:第一分段总线,用于在第一方向上进行数据广播;和第二分段总线,用于在与第一方向相反的第二方向上进行数据广播;第一分段总线包括:第一开关块和第二开关块;第一开关块连接到第一区块和第一存储器存储体组;第二开关块连接到第二区块和第二存储器存储体组;第二分段总线包括:第三开关块和第四开关块;第三开关块连接到第一区块和第一存储器存储体组;第四开关块连接到第二区块和第二存储器存储体组;第一开关块的输入端连接到第二开关块的输出;并且第三开关块的输出连接到第四开关块的输入,所述方法包括:在第一总线状态下,通过第一开关块将第一存储器存储体组连接到第一区块,和通过第二开关块将第二存储器存储体组连接到第二区块。
在一些实施例中,所述方法还包括:在第二总线状态下,通过第一开关块和第二开关块将第二存储器存储体组连接到第一区块,并且通过第二开关块将第二存储器存储体组连接到第二区块。
在一些实施例中,激活缓冲器被配置为包括:第一队列,连接到第一乘法器;和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块还被配置为:在第一状态下在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理电路还包括第一加法器,所述方法还包括:在第一状态下将第一加法器连接到第一乘法器的输出和第二乘法器的输出;和通过第一加法器将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理电路还包括第二加法器,所述方法还包括:在第二状态下将第二加法器连接到第一乘法器的输出。
在一些实施例中,所述处理电路还包括:第一累加器,连接到第一加法器;和第二累加器,连接到第二加法器,第一累加器包括寄存器,所述方法还包括:在第一状态下通过第一累加器将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,和通过第一累加器将第一累加器的累加值存储在第一累加器的寄存器中。
在一些实施例中,第二累加器包括寄存器,并且所述方法还包括:在第二状态下通过第二累加器将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值,并且通过第二累加器将第二累加器的累加值存储在第二累加器的寄存器中。
根据本公开的一些实施例,提供一种使用用于处理的装置进行计算的方法,所述用于处理的装置包括:第一区块、第二区块、存储器、输入总线和输出总线,输入总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,第一区块被配置为执行激活的阵列与权重的核的第一卷积;存储器包括:第一存储器存储体组和第二存储器存储体组;输入总线包括:第一分段总线,用于在第一方向上进行数据广播;和第二分段总线,用于在与第一方向相反的第二方向上进行数据广播;第一分段总线包括:第一开关块和第二开关块;第一开关块连接到第一区块和第一存储器存储体组;第二开关块连接到第二区块和第二存储器存储体组;第二分段总线包括:第三开关块和第四开关块;第三开关块连接到第一区块和第一存储器存储体组;第四开关块连接到第二区块和第二存储器存储体组;第一开关块的输入连接到第二开关块的输出;并且第三开关块的输出连接到第四开关块的输入,所述方法包括:在第一总线状态下,通过第一开关块将第一存储器存储体组连接到第一区块,和通过第二开关块将第二存储器存储体组连接到第二区块。
根据本公开的一些实施例,提供一种处理器,所述处理器包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,激活缓冲器被配置为包括:第一队列,连接到第一乘法器;和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,第一区块被配置为:在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理器还包括:第一加法器,被配置为在第一状态下连接到第一乘法器的输出和第二乘法器的输出,并且将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理器还包括:第二加法器,被配置为在第二状态下连接到第一乘法器的输出。
在一些实施例中,所述处理器还包括:第一累加器,连接到第一加法器;和第二累加器,连接到第二加法器,第一累加器包括寄存器,并且被配置为在第一状态下将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,并且将第一累加器的累加值存储在第一累加器的寄存器中。
在一些实施例中,第二累加器包括寄存器,并且被配置为在第二状态下将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值,并且将第二累加器的累加值存储在第二累加器的寄存器中。
在一些实施例中,所述处理器还包括:激活零跳过控制电路,被配置为:确定第一队列的输出寄存器是否包含零,并且响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
在一些实施例中,所述处理器还包括复用器,复用器具有:输入,在复用器的单端口侧连接到第一乘法器;第一输出,在复用器的多端口侧连接到第一加法器;和第二输出,在复用器的多端口侧连接到第二加法器。
在一些实施例中,激活零跳过控制电路被配置为控制复用器在第一状态下将输入连接到第一输出,并且在第二状态下将输入连接到第二输出。
在一些实施例中,第二队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第二队列的输出寄存器;并且第一区块还被配置为:在第三状态下在第一乘法器中将第一权重与来自第二队列的第二寄存器的激活相乘。
根据本公开的一些实施例,提供一种用于使用处理电路进行计算的方法,所述处理电路包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,激活缓冲器被配置为包括:第一队列,连接到第一乘法器;和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,所述方法包括:在第一状态下通过第一乘法器将第一权重与来自第一队列的输出寄存器的激活相乘,和在第二状态下通过第一乘法器将第一权重与来自第一队列的第二寄存器的激活相乘。
在一些实施例中,在第二状态下,第一队列的输出寄存器包含零。
在一些实施例中,所述处理电路还包括第一加法器,所述方法还包括:在第一状态下将第一加法器连接到第一乘法器的输出和第二乘法器的输出,和通过第一加法器将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
在一些实施例中,所述处理电路还包括第二加法器,所述方法还包括在第二状态下将第二加法器连接到第一乘法器的输出。
在一些实施例中,所述处理电路还包括:第一累加器,连接到第一加法器;和第二累加器,连接到第二加法器,第一累加器包括寄存器,所述方法还包括在第一状态下通过第一累加器将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,和通过第一累加器将第一累加器的累加值存储在第一累加器的寄存器中。
在一些实施例中,第二累加器包括寄存器,并且所述方法还包括在第二状态下通过第二累加器将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值,并且通过第二累加器将第二累加器的累加值存储在第二累加器的寄存器中。
在一些实施例中,处理电路还包括激活零跳过控制电路,并且所述方法还包括:通过激活零跳过控制电路确定第一队列的输出寄存器是否包含零,并且响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
在一些实施例中,所述处理电路还包括复用器,复用器具有:输入,在复用器的单端口侧连接到第一乘法器;第一输出,在复用器的多端口侧连接到第一加法器;和第二输出,在复用器的多端口侧连接到第二加法器。
在一些实施例中,所述方法还包括:通过激活零跳过控制电路控制复用器在第一状态下将输入连接到第一输出,并且在第二状态下将输入连接到第二输出。
根据本公开的一些实施例,提供一种用于使用用于处理的装置进行计算的方法,所述用于处理的装置包括:第一区块、第二区块、存储器和总线,总线连接到存储器、第一区块和第二区块,第一区块包括:第一权重寄存器、第二权重寄存器、激活缓冲器、第一乘法器和第二乘法器,激活缓冲器被配置为包括:第一队列,连接到第一乘法器;和第二队列,连接到第二乘法器,第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,所述方法包括:在第一状态下在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,和在第二状态下在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
附图说明
将参照说明书、权利要求书和附图领会和理解本公开的这些和其它特征和优点,其中:
图1A是根据本公开的实施例的神经处理器的框图;
图1B是根据本公开的实施例的神经处理器的部分的框图;
图1C根据本公开的实施例的神经处理器的部分中的数据流程图;
图1D根据本公开的实施例的神经处理器的部分中的数据流程图;
图1E根据本公开的实施例的神经处理器的部分中的数据流程图;
图1F根据本公开的实施例的神经处理器的部分中的数据流程图;
图1G根据本公开的实施例的神经处理器的部分中的数据流程图;
图1H根据本公开的实施例的神经处理器的部分中的数据流程图;
图1I是根据本公开的实施例的神经处理器的部分的框图;
图1J是根据本公开的实施例的针对三种情况的神经处理器的部分的框图;
图1K是根据本公开的实施例的神经处理器的部分的示意图;
图1L是根据本公开的实施例的神经处理器的部分的框图;
图1MA是根据本公开的实施例的神经处理器的部分的框图;
图1MB是根据本公开的实施例的神经处理器的部分的框图;
图1N是根据本公开的实施例的神经处理器的部分的框图;
图1O是根据本公开的实施例的神经处理器的框图;
图1P是根据本公开的实施例的神经处理器的部分的框图;
图1Q是根据本公开的实施例的大小表;
图1R是根据本公开的实施例的张量图;
图1S是根据本公开的实施例的张量图;
图1T根据本公开的实施例的神经处理器的部分中的数据流程图;
图1U根据本公开的实施例的神经处理器的部分中的数据流程图;
图1V是根据本公开的实施例的神经处理器的部分的框图;
图1WA是根据本公开的实施例的神经处理器的部分的框图;
图1WB根据本公开的实施例的神经处理器的部分中的数据流程图;
图1WC根据本公开的实施例的神经处理器的部分中的数据流程图;
图1WD根据本公开的实施例的神经处理器的部分中的数据流程图;
图1WE根据本公开的实施例的神经处理器的部分中的数据流程图;
图1X是根据本公开的实施例的神经处理器的部分的框图;
图2AA是根据本公开的实施例的卷积图;
图2AB是根据本公开的实施例的卷积图;
图2AC是根据本公开的实施例的卷积图;
图2AD是根据本公开的实施例的卷积图;
图2BA是根据本公开的实施例的卷积图;
图2BB是根据本公开的实施例的卷积图;
图2BC是根据本公开的实施例的卷积图;
图2BD是根据本公开的实施例的卷积图;
图2BE是根据本公开的实施例的卷积图;
图2BF是根据本公开的实施例的卷积图;
图2BG是根据本公开的实施例的卷积图;
图2BH是根据本公开的实施例的卷积图;
图2BI是根据本公开的实施例的卷积图;
图2BJ是根据本公开的实施例的卷积图;
图2BK是根据本公开的实施例的卷积图;
图2BL是根据本公开的实施例的卷积图;
图2BM是根据本公开的实施例的卷积图;
图2C是根据本公开的实施例的卷积图;
图2DA是根据本公开的实施例的卷积图;
图2DB是根据本公开的实施例的卷积图;
图2DC是根据本公开的实施例的卷积图;
图2DD是根据本公开的实施例的卷积图;
图2DE是根据本公开的实施例的卷积图;
图2DF是根据本公开的实施例的卷积图;
图2DG是根据本公开的实施例的卷积图;
图2DH是根据本公开的实施例的卷积图;
图2DI是根据本公开的实施例的卷积图;
图2DJ是根据本公开的实施例的卷积图;
图2DK是根据本公开的实施例的卷积图;
图2DL是根据本公开的实施例的卷积图;
图2DM是根据本公开的实施例的卷积图;
图2DN是根据本公开的实施例的卷积图;
图2DO是根据本公开的实施例的卷积图;
图2DP是根据本公开的实施例的卷积图;
图2DQ是根据本公开的实施例的卷积图;
图2DR是根据本公开的实施例的卷积图;
图2DS是根据本公开的实施例的卷积图;
图2DT是根据本公开的实施例的卷积图;
图2DV是根据本公开的实施例的卷积图;
图2DW是根据本公开的实施例的卷积图;
图2DX是根据本公开的实施例的卷积图;
图2E是根据本公开的实施例的读取表;
图2F是根据本公开的实施例的读取表;
图2GA是根据本公开的实施例的卷积图;
图2GB是根据本公开的实施例的卷积图;
图2HA是根据本公开的实施例的卷积图;
图2HB是根据本公开的实施例的卷积图;
图2HC是根据本公开的实施例的卷积图;
图2HD是根据本公开的实施例的卷积图;
图3AA是根据本公开的实施例的神经处理器的部分的框图;
图3AB根据本公开的实施例的数据流程图;
图3AC根据本公开的实施例的数据流程图;
图3AD根据本公开的实施例的数据流程图;
图3AE根据本公开的实施例的数据流程图;
图3AF根据本公开的实施例的数据流程图;
图3AG根据本公开的实施例的数据流程图;
图3AH根据本公开的实施例的数据流程图;
图3AI根据本公开的实施例的数据流程图;
图3AJ根据本公开的实施例的数据流程图;
图3AK根据本公开的实施例的数据流程图;
图3BA根据本公开的实施例的神经处理器的部分的框图;
图3BB是根据本公开的实施例的数据图;
图3BC是根据本公开的实施例的数据图;
图3CA是根据本公开的实施例的神经处理器的部分的框图;
图3CB是根据本公开的实施例的神经处理器的部分的框图;
图3DA是根据本公开的实施例的数据图;
图3EA是根据本公开的实施例的神经处理器的部分的框图;
图3EB是根据本公开的实施例的神经处理器的部分的框图;
图3FA是根据本公开的实施例的神经处理器的部分的框图;
图3FB是根据本公开的实施例的数据图;
图3FC是根据本公开的实施例的神经处理器的部分的框图;
图3GA是根据本公开的实施例的数据图;
图3GB是根据本公开的实施例的神经处理器的部分的框图;
图3GC是根据本公开的实施例的神经处理器的部分的框图;
图3GD是根据本公开的实施例的神经处理器的部分的框图;
图3HA是根据本公开的实施例的数据图;
图3HB是根据本公开的实施例的神经处理器的部分的框图;
图3HC是根据本公开的实施例的神经处理器的部分的框图;
图3HD是根据本公开的实施例的数据图;
图3IA是根据本公开的实施例的神经处理器的部分的框图;
图3IB是根据本公开的实施例的神经处理器的部分的框图;
图3IC是根据本公开的实施例的神经处理器的部分的框图;
图3ID是根据本公开的实施例的神经处理器的部分的框图;
图3IE是根据本公开的实施例的数据图;
图3IF是根据本公开的实施例的数据图;
图3JA根据本公开的实施例的数据流程图;
图3JB根据本公开的实施例的数据流程图;
图3JC根据本公开的实施例的数据流程图;
图3JD根据本公开的实施例的数据流程图;
图3KA是根据本公开的实施例的神经处理器的部分的框图;
图3KB是根据本公开的实施例的数据图;
图3LA是根据本公开的实施例的神经处理器的部分的框图;
图3LB是根据本公开的实施例的神经处理器的部分的框图;
图3LC是根据本公开的实施例的神经处理器的部分的框图;
图3LD是根据本公开的实施例的神经处理器的部分的框图;
图3MA是根据本公开的实施例的神经处理器的部分的框图;
图3MB是根据本公开的实施例的神经处理器的部分的框图;
图3NA是根据本公开的实施例的神经处理器的部分的框图;
图3OA是根据本公开的实施例的神经处理器的部分的框图;
图3OB是根据本公开的实施例的神经处理器的部分的框图;
图3OC是根据本公开的实施例的神经处理器的部分的框图;
图3PA是根据本公开的实施例的神经处理器的部分的框图;
图3PB是根据本公开的实施例的神经处理器的部分的框图;
图3PC是根据本公开的实施例的神经处理器的部分的框图;
图4AA是根据本公开的实施例的神经处理器的部分的框图;
图4AB是根据本公开的实施例的神经处理器的部分的框图;
图4AC是根据本公开的实施例的神经处理器的部分的框图;
图4AD是根据本公开的实施例的神经处理器的部分的框图;
图4AE是根据本公开的实施例的神经处理器的部分的框图;
图4AF是根据本公开的实施例的神经处理器的部分的框图;
图4AG是根据本公开的实施例的神经处理器的部分的框图;
图4AH是根据本公开的实施例的神经处理器的部分的框图;
图4AJ是根据本公开的实施例的神经处理器的部分的框图;
图4AK是根据本公开的实施例的神经处理器的部分的框图;
图4AL是根据本公开的实施例的神经处理器的部分的框图;
图4AM是根据本公开的实施例的神经处理器的部分的框图;
图4AN是根据本公开的实施例的神经处理器的部分的框图;
图4BA是根据本公开的实施例的神经处理器的部分的框图;
图4BB是根据本公开的实施例的神经处理器的部分的框图;
图4BC是根据本公开的实施例的神经处理器的部分的框图;
图4BD是根据本公开的实施例的神经处理器的部分的框图;
图4CA是根据本公开的实施例的神经处理器的部分的框图;
图4CB是根据本公开的实施例的神经处理器的部分的框图;
图4CC是根据本公开的实施例的神经处理器的部分的框图;
图4DA是根据本公开的实施例的神经处理器的部分的框图;
图4DB是根据本公开的实施例的神经处理器的部分的框图;
图4DC是根据本公开的实施例的神经处理器的部分的框图;
图4EA是根据本公开的实施例的神经处理器的部分的框图;
图4EB是根据本公开的实施例的神经处理器的部分的框图;
图4EC是根据本公开的实施例的神经处理器的部分的框图;
图4FA是根据本公开的实施例的神经处理器的部分的框图;
图4FB是根据本公开的实施例的神经处理器的部分的框图;
图4G是根据本公开的实施例的神经处理器的部分的框图;
图4H是根据本公开的实施例的神经处理器的部分的框图;
图5A是根据本公开的实施例的神经处理器的部分的框图;
图5B是根据本公开的实施例的神经处理器的部分的框图;
图5C是根据本公开的实施例的神经处理器的部分的框图;
图5D是根据本公开的实施例的神经处理器的部分的框图;
图5E是根据本公开的实施例的神经处理器的部分的框图;
图5F是根据本公开的实施例的神经处理器的部分的框图;
图5G是根据本公开的实施例的神经处理器的部分的框图;
图6是根据本公开的实施例的神经处理器的部分的框图;
具体实施方式
以下结合附图阐述的具体实施方式意在作为根据本公开提供的神经处理器的示例性实施例的描述,而不意在表示本公开可被构造或利用的仅有形式。描述结合示出的实施例阐述了本公开的特征。然而,应理解,相同或等同的功能和结构可由也意在被包含在公开的范围内的不同实施例来实现。如在此其它地方所示,相同的元件标号意在指示相同的元件或特征。
图1A示出根据一些实施例的神经处理器100的高层级框图。神经处理器100可被配置为高效地计算输入特征图(IFM)(或“激活”的张量)与权重的多维阵列(或张量)的卷积和/或张量乘积,以形成输出特征图(OFM)。神经处理器100还可被配置为计算特征图池化和激活函数;然而,为了清楚和简洁的目的,在本特定公开中很大程度上不覆盖池化和激活函数。
多个SRAM存储体组109(每个SRAM存储体组包括一些SRAM存储体(例如,图4AB和图4AC中的四个SRAM存储体108))可通过输入特征图(IFM)传送结构(delivery fabric)104连接到相乘归约(Multiply-and-Reduce)区块(tile)102(或“MR区块”)(以下进一步详细描述),输入特征图(IFM)传送结构104将存储在SRAM存储体组109中的输入激活图带到区块102用于后续计算。如以下将进一步详细讨论,区块102包含乘法器单元(MU)103的阵列。区块102还经由输出特征图(OFM)传送结构106连接到SRAM存储体组109,输出特征图(OFM)传送结构106将计算的结果从区块102发送到SRAM存储体组109用于存储。
IFM传送结构104可以是分段总线(如以下进一步详细讨论),并且,作为结果,如以下进一步详细讨论,SRAM存储体组109中的每一个可与区块102中的一个相关联。中央控制器110可经由公用总线112供应用于对系统中的寄存器进行控制的控制字。数据可经由AXI(ARM公司的高级可扩展互连)互连114被传送到神经处理器,通过神经处理器100执行的处理操作的结果可类似地经由AXI互连114被检索。MCU(微控制器)116可用于:通过适当地配置中央控制器110来及时地安排计算,以及使用DMA控制器118来协调和执行神经处理器100与外部存储器120之间的数据传输。
每个区块102可包括相乘归约(MR)列133的相乘归约(MR)阵列122。图1B示出在一些实施例中的MR阵列122。每个MR阵列122包含八个MR列133。每个MR列133包含十六个乘法器单元(MU)103和两个加法器树128A和128B。注意,为了清楚,图1B仅示出十六个MU 103的四个MU 103。
每个MU 103可包括多个寄存器(例如,包含可被称为“权重寄存器”的18个9位寄存器的寄存器堆(register file)127)以及乘法器126。乘法器126将输入激活与权重相乘。随后,每个MR列133中的加法器树128A和128B对来自列中的十六个MU的所得乘积进行求和(归约)以形成点积。如以下详细解释,以特定方式执行求和。
每个区块102还包含IFM高速缓存139和激活广播单元(ABU)141。IFM高速缓存139意在通过高速缓存从SRAM接收的IFM值来减少针对输入特征图的SRAM读取。正如每个MR列133包含十六乘法器单元103,IFM高速缓存139包含十六个并行的“激活通路(activationlane)”,每个激活通路137有效地与MR阵列中的乘法器单元的“行”对应。
激活广播单元负责输入激活的准备。准备处理中的第一步骤包括根据所需的卷积序列将输入激活从IFM高速缓存139获取到IFM激活缓冲器124中,同时还在可能时省略零值激活以实现稀疏激活计算。稀疏激活计算特征可以可选地被禁用,导致“密集”张量计算模式。准备处理中的第二步骤包括将数字类型的激活转换为带符号8位大小(sign-and-8bit-magnitude)格式,转换的步骤包括使用类型转换器135将具有超过8位的位宽的数据类型划分成一系列的带符号8位大小值。当已经使用如由例如谷歌张量流(Google TensorFlow)支持的“零点”对激活进行编码时,可在将值转换为带符号8位大小格式之前将零点恒定值Z添加到激活。
正如每个MR列133包含十六个乘法器单元103,ABU 141、IFM缓冲器124和类型转换器135也均包含十六个通路。所得的转换的十六个激活值被并行地广播到MR阵列122,使得每个激活通路将输入激活值带到八个乘法器单元的对应行。
每个MR列133还包含累加器130A和130B,加法器树128A和128B各一个累加器。如在此使用,“累加器”是被配置为将输入值与寄存器的内容相加并且利用该和重写寄存器的内容的加法器与寄存器的组合。
如前所述,MR阵列122中的乘法器单元可被布置为多个行(例如,16个行)和列(或“OFM通道”)(例如,八个列),其中,为了清楚,图1B仅示出16个中的四个行,在图1B中仅示出八个列中的两个标记的“O0”和“O7”。
让我们将长度为十六的IFM向量表示为“IFM切片”。IFM切片可具有平面坐标(x,y)和与其相关联的深度通道索引d作为相关联的IFM张量的索引(例如,IFM[x,y,d:d+15])。在一般情况下,区块102每次从包含3D IFM张量的片上SRAM接收一个IFM切片,在3D IFM张量中,每个输入IFM切片在输入层中的平面位置(x,y)处包含从索引d到d+15(包括d和d+15)的十六个深度通道的值。
类似地,让我们将长度为八的OFM向量表示为“OFM切片”。OFM切片可具有平面坐标(x,y)和与其相关联的深度通道索引d作为相关联的OFM张量的索引(例如,OFM[x,y,d:d+7])。在一般情况下,区块102产生OFM切片作为输出。在一些实施例中,当区块未停止(stall)时,如以下将看出,输出速率可从每时钟一个OFM切片变化到直到例如每时钟最多两个OFM切片。注意,来自区块102的区块102OFM输出向量(OFM切片)可需要由归约结构(Reduction Fabric)111进一步归约,以在通过OFM传送结构106发送最终OFM向量结果以存储在SRAM中之前完成OFM向量计算。
注意,IFM张量和OFM张量两者还可具有第四“批(batch)”维度;然而,与神经网络模型训练相反,神经处理器100目的是加速神经网络模型实时推断,实时推断通常基于批大小1被执行。为了简化说明,我们将在讨论的大部分中省略批维度,并且稍后将单独描述批维度细节。
神经处理器100可以以同步逻辑来实现,每个MR列133可完全在一个时钟域内。在一些实施例中,在操作中,在操作的每个周期期间(例如,在时钟的每个周期期间),十六个乘法器126中的每个可从在其输入处的两个因子形成相应的积,加法器128中的每个可形成在其输入处的那些十六个积中的一些的和(如图1B中针对四个通路所示),并且每个累加器130的加法器可形成(i)累加器130的寄存器的当前值与(ii)对应加法器128的输出的和。在下一时钟周期开始时,每个累加器130的每个加法器的输出可被写入累加器130的寄存器。
在一些实施例中,计算可被流水线化,并且附加寄存器(即,触发器阵列)可存在于图1B中示出的元件之间,来例如以电路将被操作的时钟速度提供足够的定时裕度。在这样的实施例中,吞吐量可以是相同的(即,与不存在附加寄存器的情况下(例如,每个时钟周期一次乘法和加法)相同),但是(i)输入数据被输入到乘法器126与(ii)乘法和加法的最终结果被写入累加器130的寄存器之间的延迟可更大(例如,一些时钟周期)。
图1C至图1H示出这样的操作的示例:神经处理器利用IFM中的稀疏性,以通过不按顺序推进某些乘法运算和加法运算以便利用乘法器(当IFM的元素等于零时,乘法器将另外执行与零的乘法),来加速计算的完成。IFM可被存储在SRAM存储体组109中,从SRAM存储体组109获取IFM数据可被调度,使得激活缓冲器124作为多个队列进行操作,每个队列与如图1B中所示的一行数据对应,每个队列输入MR阵列122的相应的通路。
为了清楚说明,让我们假设SRAM与激活缓冲器124之间的IFM高速缓存139已经被禁用和绕过。让我们假设激活数据类型是uint8(8位无符号整型)并且权重数据类型是int8(8位有符号整型),在这种情况下,类型转换器135用于不变地传递激活值,MU 103中的乘法花费一个时钟(即,一个时钟周期)。让我们假设SRAM存储体组109在示例操作开始时包含如图1B中所示的一些样本IFM值,并且仅一个区块正被使用。
让我们还假设权重张量W[0...15,0...7,a...j]与16个IFM通路、8个OFM列以及10个IFM输入向量对应,a至j已经被预加载到对应MU寄存器堆中。
一旦示例操作开始,从图1C可看出,在示出的示例中,两个IFM向量a[]和b[](在图1C中的两个最右列)被获取到激活缓冲器124中,使得激活缓冲器124的第一列(即,如所示的右手列a[])包含IFM的第一向量(由元素a0至a3组成),激活缓冲器124的第二列(即,如所示的左手列b[])包含IFM的第二向量(由元素b0至b3组成,并且在用于辨识形成IFM的阵列的符号中,b1=0)。在图1C中,第二队列包含a1作为其第一元素(最接近MR阵列122),第二队列包含零(0)作为其第二元素(即,b1=0)。
在激活缓冲器124的前面,IFM向量a[0...3]获得到MR阵列122的广播(即,IFM值a0通过顶部激活通路被广播为顶行中的八个乘法器126中的每个的输入)。同时,列0至列7中的顶行乘法器分别从它们各自的本地寄存器堆接收权重W[0,0...7,a]作为每个乘法器的第二输入。
类似地,值a1获得从顶部开始的第二激活通路137上的广播作为到从顶部开始的第二行的乘法器的输入。同时,列0至列7中的从顶部开始的第二行乘法器分别从它们各自的本地寄存器堆接收权重W[1,0...7,a]作为每个乘法器的第二输入。
在操作中,IFM的第一向量(由元素a0至a3组成)与相应的权重的乘积可在乘法器126的(16×8)阵列中的每个中被形成,并且与期望的点积对应的乘积的和可在第一加法器128A中被形成并且被保存在第一累加器130A中:
ΣA,0=a0*w0,0,a+a1*w1,0,a+a2*w2,0,a+a3*w3,0,a
...
ΣA,7=a0*w0,7,a+a1*w1,7,a+a2*w2,7,a+a3*w3,7,a。
在这点,与IFM a[]对应的OFM输出向量的计算利用累加器130A中可用的结果(在图1C中示出为ΣA,0...7)而被完成,准备好被发送到OFM传送结构106(每列的累加器130A随后可被清除)。
在图1D中,在IFM的第一向量已经被处理之后,IFM的第三向量(由元素c0至c3组成,并且c2=0)可被读取到激活缓冲器124中。代替形成权重与IFM的第二向量的所有元素(由元素b0至b3组成,并且b1=0)的乘积(这将需要在第二通路的每个乘法器126中形成零与相应的权重的乘积),IFM的第三向量的第二元素(即,元素c1)不按顺序地推进并在第二通路的每个乘法器126中与相应的权重相乘。
同时,通路0、2和3中的乘法器正相应地从它们各自的本地寄存器堆接收权重W[0,0...7,b]、W[2,0...7,b]和W[3,0...7,b]。然而,因为由于激活b1=0被跳过而导致通路1不按顺序地操作,所以注意通路1中的乘法器正接收与IFM向量(“像素”)c相关联的权重W[0,0...7,c],而不是IFM向量(像素)b。
由于区块122现在正在同时处理两个像素(像素b和像素c的部分),所以在列中添加乘积可能产生不正确的结果。为了获得正确的结果,让我们使用两个加法器树中的一个计算像素b的点积,而使用另一个加法器树开始计算像素c的点积。
通过第二通路的每个乘法器126形成的乘积被输入到相应的第二加法器128B(在图1C中示出为ΣB,0...7),而通过其它通路的乘法器126形成的乘积被输入到相应的第一加法器128A。元素c1的不按顺序推进在激活缓冲器124中形成“孔”,该孔可在随后的时钟周期中被利用来不按顺序推进另一元素(如图1E中所示,当元素d1不按顺序推进时)。
这样,一旦IFM的第二向量的非零元素与相应的权重的乘积已经被计算,并且它们的和在每列的第一累加器130A中,则每列的第一累加器130A包含IFM的第二向量(b[])与该列的权重向量的点积,并且可被发送到OFM传送结构106(每列的第一累加器130A可随后被清除)。
ΣA,0=b0*w0,0,b+b2*w2,0,b+b3*w3,0,b
...
ΣA,7=b0*w0,7,b+b2*w2,7,b+b3*w3,7,b。
此时,每列的第二累加器130B仅包含IFM的第三向量(c1)与相应的权重向量的点积的一项。
ΣB,0=c1*w1,0,c
...
ΣB,7=c1*w1,7,c。
参照图1E,在随后的操作中(例如,在下一时钟周期期间),IFM的第三向量的元素(c0,c3)与权重向量的乘积的剩余可(通过MR阵列122的每列的第一乘法器126和第四乘法器126)被形成,并且在第二累加器130B中与已经存储在第二累加器130B中的一个乘积相加,以在第二累加器130B中完成IFM的第三向量(c[])与相应的权重向量的点积。
ΣB,0=c0*w0,0,c+c1*w1,0,c+c3*w3,0,c
...
ΣB,7=c0*w0,7,c+c1*w1,7,c+c3*w3,7,c。
可同时通过不按顺序推进d1(因为涉及c1的乘积在前一周期被执行,所以在激活缓冲器124中留下“孔”)和d2(因为c2=0)二者,来计算IFM的第四向量(由元素d0至d3组成,并且d0=d4=0)与权重向量的点积。
ΣA,0=d1*w1,0,d+d2*w2,0,d
...
ΣA,7=d1*w1,7,d+d2*w2,7,d。
在这点,针对IFM向量c[]和IFM向量d[]二者的OFM的计算被完成。
以类似方式,当激活缓冲器包含如图1F中所示的具有互补稀疏性的两个向量e[]和f[]时,MR列122的每列可同时形成两个点积。在图1F的示例中,例如,“IFM的第五向量(由元素e0至e3组成,并且e0=e1=0)与各自权重向量的点积”与“IFM的第六向量(由元素f0至f3组成,并且f2=f3=0)与各自权重向量的点积”被同时形成,第六向量的两个非零元素不按顺序推进。
图1G示出IFM的第七向量g[](由元素g0至g3组成,并且g1=g2=g3=0)在激活缓冲器124的第一列中并且IFM的第八向量(由元素h0至h3组成,并且h2=h3=0)在激活缓冲器124的第二列中的状态。图1G示出如何通过不按顺序推进IFM的第八向量的(非零)元素使得第八向量的(非零)元素与IFM的第七向量的(非零)元素同时被处理,来与“IFM的第七向量与每个对应权重的点积”同时形成“IFM的第八向量h[]与每个对应权重的点积”。因为IFM的第八向量的(非零)元素中的一个(h0)与IFM的第七向量的(非零)元素(g0)在同一通路中,所以IFM的第八向量的(非零)元素中的每个被移位到MR列122的邻近通路,使得这些元素可不按顺序被推进。
这样,“将IFM的第八向量h[]的第一元素(h0)输入到每列的从顶部开始的第二乘法器126(由于其在该位置具有零元素,因此其不用于IFM的第七向量g[]),并且将IFM的第八向量h[]的第二元素(h1)输入到每列的第三乘法器126(其也不用于IFM的第七向量g[])”允许IFM的第八向量的(非零)元素与IFM的第七向量的(非零)元素同时被处理。权重向量的对应元素也被移位。具体地,与最顶部通路相关联的每个乘法器单元获取两个权重,一个权重与g0相关联(在图1G中被标记为w0,0..7,g,其中0..7指示对应列),另一个权重与h0相关联(在图1G中被标记为w0,0..7,h)。每个权重w0,0..7,g被输入到正在接收g0的最顶部通路中的它的相应的乘法器126中。然而,每个权重w0,0..7,h被向下移位一个通路并且被输入到正在接收h0的从顶部开始的第二通路的相关联的乘法器126中。最后,在从顶部开始的第二通路中的乘法器单元各自获取与h1相关联的权重w1,0..7,h,并且将这些权重向下移位一个通路,移位到正在接收h1的从顶部开始的第三通路。
在图1G中示出的状态下,底部通路中的每个MR列122的每个乘法器126在一个周期内未被使用。在一些实施例中,可通过将MR区块102配置为具有更深(例如,3-deep)的激活缓冲器124使得每个激活通路可具有来自从其选择的同一通路的更多个(例如,三个)值,来降低这样的失败的可能性以充分利用所有乘法器126。将非零激活从与通路相距大于一个的距离带走(移位)还提供利用非零激活替代零值激活的更大灵活性。具有两组以上的加法器树和相关联的累加器也可提高乘法器利用率。
图1H示出在图1G中示出的周期之后的随后的周期,其中,激活缓冲器124的第一列包含IFM的第九向量(全部由零组成),并且激活缓冲器124的第二列包含IFM的第十向量(由元素j0至j3组成)。在图1H示出的状态下,在不引起IFM的第九向量的处理的一个周期的延迟的情况下,IFM的第十向量的所有元素可不按顺序被推进,并且IFM的第十向量j[]与每个权重向量的点积可被计算。
如以上示例中所示,乘法器126输出可在一些时钟周期期间被输入到加法器树128A,并且可在其它时钟周期期间被输入到加法器树128B。当乘法器126未将其输出输入到加法器树128A或128B时,对应加法器树输入被设置为零。图1I示出使用复用器132将任何乘法器126的输出引导到第一加法器128A或第二加法器128B以支持例如图1D至图1H的操作的配置。这里,复用器控制信号sel_adder_tree[0...15]来自协调区块内的计算的区块控制逻辑144,该计算包括从高速缓存获取IFM向量、将非零激活从激活缓冲器选择并复用到激活通路、选择与每个IFM向量使用的加法器树、将乘法器单元输出复用到正确的加法器树以及清除列累加器。
由于乘法器输出总是输入加法器树128A或加法器树128B,但不同时输入两个加法器树128A和128B,因此可利用更少的逻辑来实现两个加法器树128A和128B。图1J示出第一加法器128A和第二加法器128B两者如何可以是利用单个物理加法器树和合适的复用器(未示出)实现的逻辑构思。为了示出的清楚,考虑构造两个加法器树,每个加法器树具有四个输入。四输入加法器树可使用三个加法器来实现。在原始情况下,每个加法器树将需要三个加法器元件,因此构造两个四输入加法器树将花费六个加法器子元件。让我们在一些额外的复用器的帮助下仅使用三个加法器元件构造两个四输入加法器树。存在三种值得考虑的情况。在第一种情况下(i),所有四个输入由第一逻辑加法器128A求和(第二逻辑加法器128B的输出为零);在第二种情况下(ii),输入中的三个输入由第一逻辑加法器128A求和(第二逻辑加法器128B的输出等于剩余输入);在第三种情况下(iii),输入中的两个输入由第一逻辑加法器128A求和,输入中的两个输入由第二逻辑加法器128B求和。在另外两种情况下(未示出),第二逻辑加法器128B对输入中的三个输入或所有四个输入求和,第一逻辑加法器128A分别等于剩余输入或等于零。如在此使用,如图1J的示例中,“加法器”是用于将至少两个数相加以形成和的物理电路,或者是利由物理加法器和复用器的组合形成的多个逻辑加法器中的一个。如从图1J中看出,仅三个加法器元件(并且一些附加复用器未示出)而不是六个加法器元件足以实现所有可能的情况。
图1K示出一些实施例中的乘法器单元103的内部电路图。乘法器单元103包括无符号8位乘无符号8位乘法器126、保持本地权重的寄存器堆127、针对乘法器126选择输入权重的逻辑143、将本地权重“移位”到邻近通路的逻辑149和151、检测乘零情况并且使乘法器126空闲以减少动态功耗的逻辑145、136、157、155和159、以及权重加载逻辑157。
寄存器堆127保持权重。一个寄存器对应于单个int8或uint8权重。具有较大位宽的权重占用多于一个寄存器,例如,int16(16位有符号整型)或uint16(16位无符号整型)权重占用两个寄存器。寄存器堆127保持十八个int8或uint8权重或对应地保持九个int16或uint16权重。如稍后详细所述,在不必借助于生成部分结果的情况下,可选择寄存器的数量以使得使用16位权重能够计算3乘3卷积。
寄存器堆127具有用于通过垂直权重加载总线101{swt_in[C],wt_abs_ld_in[7:0][C]}加载权重的单个输入端口。每个MR列133C接收其自身的权重加载总线,其中,C在零至七的范围内。通过将权重值设置在垂直权重加载总线101{swt_in[C],wt_abs_ld_in[7:0][C]}上,在权重寄存器索引总线wt_ld_idx[4:0]上指定目标寄存器的索引(从零到十七),并且置位(assert)通路权重加载使能wt_ld_en_lane[L]以将权重加载到通路L中,来每次从权重解压缩单元138(图1K)一个整个通路(即,同时在单个通路中的所有八个列中)加载权重。
如图1K中所示,在单个通路中加载所有权重花费十八个周期,在整个MU阵列122中加载所有权重总共花费18*16=288个时钟周期。在一些情况下,该权重加载速度可能不足,特别是当计算全连接(FC)层时。与卷积层计算不同,在FC层计算期间,每个权重仅被使用一次,并且此后被丢弃。因此,为了在计算FC层时保持乘法器126的最大利用率,需要每个时钟在每个乘法器单元103中加载一个权重,这比图1K中示出的快十六倍。在这种情况下,该实施例可例如被修改为包括附加权重加载总线101{swt_in[C0],wt_abs_ld_in[7:0][C0]},{swt_in[C1],wt_abs_ld_in[7:0][C1]}等,以加速权重加载。
在图1K中,权重寄存器堆127具有三个输出端口,以实现在权重中的一个权重必须被向上移位一个通路而第二权重正在被向下移位一个通路并且第三权重正在被本地消耗的情况下同时获取三个权重。
使用复用器147来实现从本地寄存器堆获取权重用于本地消耗。例如,在图1C中,复用器147选择将与IFM值a0相乘的本地存储的权重w0,0,a。此外,在图1D中,复用器147选择将与IFM值c1相乘的本地存储的权重w1,0,c。
使用复用器149来实现从本地寄存器堆127获取权重并将该权重移位到下边的通路。例如,在图1G中,本地存储的权重w0,0,h被向下移位一个通路以与IFM值h0相乘。
最后,使用复用器151来实现从本地寄存器堆127获取权重并将该权重移位到上边的通路。
由于ABU具有关于每个激活通路的移位以及与被广播(到激活通路)的每个IFM值相关联的激活缓冲器中的偏移的完整信息,因此激活广播单元141分别使用信号sel_wt_self[4:0]、sel_wt_dn1[4:0]和信号sel_wt_up1[4:0]来控制所有三个寄存器堆获取复用器147、149和151。
为了减小MR列133面积,可例如通过禁止从同一寄存器堆同时向上和向下移位权重,将寄存器堆127中的输出端口的数量从三个减少到两个。可例如通过禁止所有权重移位或者允许一次移位权重或本地消耗权重,将寄存器堆127中的输出端口的数量进一步减少到一个。然而,限制移位和最大移位距离可能在一定程度上降低乘法器利用率。移位目标通路选择与激活缓冲器深度的多个变化和组合可被设计为优化乘法器利用率,同时减少MR列和激活广播单元复杂性、面积和功率。如相关的公开中所述,用于实现的特别有效的方法和设备涉及以伪随机方式混洗(置换)激活通路,同时相应地加载相关联的权重。
在图1K中,复用器143选择将由乘法器126在乘法中使用的输入权重。如先前所讨论,输入权重可来自本地权重寄存器堆127,或者从邻近的上边的通路(并且在一些实施例中是同一列)中的权重寄存器堆变为“向下移位”,或者从邻近的下边的通路(并且在一些实施例中同一列)中的权重寄存器堆变为“向上移位”,这分别由信号{swt_self,wt_abs_self[7:0]}、{swt_dn1,wt_abs_dn1[7:0]}和{swt_up1,wt_abs_up1[7:0]}表示。由于ABU具有关于每个激活通路的移位以及与被广播(到激活通路)的每个IFM值相关联的激活缓冲器偏移的完整信息,因此激活广播单元141使用信号sel_mult_wt[1:0]来控制复用器143。
例如,在图1C中,复用器143将选择携带将与IFM值a1相乘的权重w0,0,a的{swt_self,wt_abs_self[7:0]}。在图1D中,复用器143选择携带将与IFM值c1相乘的权重w1,0,c的{swt_self,wt_abs_self[7:0]}。在图1G中,复用器143将选择携带将通过列零中的从顶部开始的第二乘法器与IFM值h0相乘的权重w0,0,h的{swt_self,wt_abs_self[7:0]}。
注意,如图1K中所示,每个寄存器堆127具有位宽九,其中,八位保持以带符号8位大小格式存储的权重大小并且一位保持以带符号8位格式存储的权重符号(并且具有在适用时预增加的“零点”常数Z)。寄存器堆127位宽可通过添加逻辑而减小到八位,该逻辑在权重从寄存器堆127被获取时在运行中将有符号int8类型转换为带符号8位大小表示(在适用时包括零点加法)。当寄存器堆127的大小已经被选择为足够大以导致描述的面积节省时,这样的运行中的转换可能是感兴趣的。
激活广播单元141对将被用作乘法器126的输入的激活{sact,act_abs[7:0]}进行广播。逻辑门145和159使用信号wt_zero和act_zero(来自ABU的辅助信号)来检查权重(将被相乘)等于零或激活(将被相乘)等于零或两者的乘零情形。当发生乘零情形时,结果信号mult_by_zero被置位,导致使用mult_in_ce信号对权重和激活乘法器输入寄存器的时钟进行门控。对输入乘法器寄存器时钟进行门控使乘法器输入和乘法器内部信号保持(冻结)其先前状态,因此防止开关活动降低动态功率。与该活动并行地,触发器门157将与乘零对应的mult_in_ce信号延迟一个周期以生成mult_out_zero信号,该mult_out_zero信号使逻辑门155将乘法器输出mult_result[15:0]归零。注意,如稍后所讨论,ABU还发送信号en_mult以每当整个区块中的计算必须被停止时使所有乘法器126空闲。
注意,图1K中的信号名称遵循惯例,其中,“act”代表激活,“wt”代表权重,“sact”、“swt”、“mult_out_s”、“s_in_a”等中的“s”代表“符号”,“wt_abs”、“act_abs”等中的“abs”代表绝对值(大小)。
ABU以带符号8位大小格式广播激活{sact,act_abs[7:0]}。类似地,选择的(用于乘法的)权重{mult_swt,mult_wt_abs[7:0]}也以带符号8位大小格式被供应。寄存器136锁存激活和权重,该激活和权重将被相乘以创建乘法器126的输入信号{s_in_a,mult_in_a[7:0]},{s_in_b,mult_in_b[7:0]}。在一些实施例中,乘法器通过将两个绝对8位值相乘并且将两个符号异或,来计算乘积,产生带符号16位大小输出{mult_out_s,mult_out_abs[15:0]}。逻辑153通过当乘积符号被置位(即,乘积结果为负)时对乘积绝对大小mult_out_abs[15:0]求反以产生信号mult_out[15:0],来将带符号16位大小结果转换为将被输入到加法器树的16位有符号输出。最后,如前所述,逻辑155在乘零的情况下使mult_out[15:0]归零。
为了总结乘法控制中的ABU的作用,ABU提供:带符号8位大小格式的输入IFM、包括向上移位通路和向下移位通路的权重选择控制、以及指示正在广播的当前激活等于零的辅助信号act_zero。注意,当act_zero信号被置位时,{sact,act_abs[7:0]}的实际值可保持不变以减少激活通路切换活动。尽管零值激活被广播的情况可能发生,但是一些实施例可使这样的发生最小化。
图1B至图1H通过只要可能就从ABU 141内的IFM缓冲器124获取非零值激活并将相关联的权重复用到乘法器126以获得正确点积,来示出支持稀疏激活的计算。IFM缓冲器124从高速缓存139获取IFM,并且在激活分级FIFO 165中将获取的IFM值分级(参照图1L和图1MA)。随后,多个激活复用器166用于从IFM分级FIFO 165获取非零(当可能时)激活,使得激活可从邻近通路被向上或向下“移位”,以及不按顺序获取激活。
在图1MA和图1MB(以下讨论)中,“前向查找(look-ahead)”距离(h)是沿着同一通道的搜索距离,“侧向查找(look-aside)”距离(d)是侧面的搜索距离,FIFO深度(F)表示激活FIFO 165深度。为了术语的清楚,注意,多个激活复用器163 166接受IFM通道作为来自IFM分级FIFO 165的输入,将前向查找和侧向查找应用于获取激活,并且将结果值输出到激活“通路”(不是通道)。该术语有助于区分张量内的深度“通道”的逻辑索引与沿着物理硬件“通路”流动的激活的概念。
注意,IFM分级FIFO 165内的寄存器161可以是可选的,并且为了解释清楚而示出。在一些情况下,通过消除激活分级FIFO寄存器161,将IFM复用器163直接连接到多端口高速缓存输出,并且修改IFM高速缓存读取逻辑以按照正确的顺序将IFM从高速缓存139直接获取到复用器163,可减小面积和功率。
图1MA示出复用器163的配置,该复用器163可用于从存储在激活FIFO 165中的一些可能值中的任何一个之中选择来自激活分级FIFO寄存器161的激活,以(经由类型转换器135)广播到MR阵列122并输入到区块的多个通路(例如,区块中的总共16个通路)中的任何通路中的乘法器126,一些可能值包括同一通路中的值和其它通路中的值。针对更一般的情况,每个单元可进入2*d个复用器,并且除了通路1和通路16由于在端部处而具有h*(d+1)个源之外,每个目标可具有相等数量的源(2*h*d)。
让我们将输出高速缓存大小(C)进一步定义为(参见图1N)驻留在每个MR列的累加与返回单元(accumulate-and-return unit,ARU)167中的输出高速缓存的大小;输入带宽(I)是IFM流式传输带宽(每个时钟周期的16字节长的IFM向量的数量);输出带宽(O)是OFM传送结构带宽(每个时钟周期的8字节长的OFM向量结果的数量)。此外,原始稀疏性(sr%)是基于对激活张量中的零元素(与激活张量中的激活的总数成比例)进行计数的观察的稀疏性;实际稀疏性(sa%)是在针对激活张量的二维卷积(conv2d)处理期间应用的零元素的实际数量(与激活张量中的激活的总数成比例),这考虑卷积步长(例如,卷积步长可不使用特定零值激活或者可多次包括特定零值激活),并且这考虑卷积填充;乘法器利用率(UM)是乘法器执行有效乘法(乘以非零激活)的周期的百分比。例如,对于1×1卷积,如果激活张量具有原始稀疏性sr%,则如果使用“简单”方法(不具有零跳过的“密集”计算模式),则乘法器利用率将是(1-sr%),并且对于非1×1卷积,当使用简单(密集)计算时,乘法器利用率是(1-sa%)。
图1MB示出:(i)处于第一配置(这是图1MA中示出的配置)的图1MA的电路的四行的放大视图;(ii)处于第二配置的图1MA的电路的四行的放大视图;以及(iii)处于第三配置的图1MA的电路的四行的放大视图。在第一配置中,复用器输入来自上方和下方的行,但是不来自同一行。第一配置具有较少的线,并且将搜索扩展到其它通道(即,较少的行),这在一个通道倾向于具有连续的零时可能有利。此外,如果以因子二的加速为目标,则两个位置可足够,并且通道1和16在h=2、d=1配置中具有相同数量的候选。第二配置可被称为“全复用方案”。在这个配置中,复用器输入来自上方和下方的通道以及下一深度的同一通道。在第三配置中,复用器输入仅来自同一通道(即,侧向查找d=0)。第三配置具有低复杂度(即,少于一半的复用器和线被需要),并且允许以稍微降低的乘法器利用率为代价支持更简单的权重跳过。
图1N示出包括MR阵列122的区块102的顶层级图,MR阵列122包含以八个MR列133和16个行组织的乘法器单元126的网格。每个标记为MU的乘法器单元126元件具有与MR阵列122内的乘法器单元的行坐标和列坐标对应的下标(MUrow,col)。权重解压缩单元138可用于从位于区块本地的SRAM存储体组109接收压缩的权重,在将权重写入权重寄存器134的处理期间对权重进行解压缩。权重可被压缩以利用权重中的稀疏性,减少用于存储权重所需的存储器以及用于将权重发送到乘法器单元126的总线带宽。可选地,权重可被未压缩地存储在SRAM中。例如,如在图1D至图1H的上下文中所述,IFM高速缓存139可用于对数据进行高速缓存以减少IFM传送结构104的瓶颈效应,激活广播单元(ABU)141可用于实现零值激活的跳过(或“激活跳过”)。
图1O示出神经处理器控制的层级。神经处理器可具有可控制图1A中示出的各种元件的状态机或“控制有限状态机”(控制FSM)或“控制逻辑”。控制层级具有包括“全局”和“本地”的两个级别。在操作中,全局控制(GC)FSM 140安排本地控制状态机142和144的操作,所述操作包括开始权重加载阶段、以及开始并控制计算阶段。由于区块102支持跳过零值激活,因此区块102的输出速率可根据由每个区块102接收的IFM切片的实际稀疏性而略微变化。因此,区块102中的计算可提前或落后几个时钟运行。因此,全局控制逻辑140协调本地区块控制逻辑144的操作以使来自多个区块102的输出回到同步从而使用归约结构111完成归约,并且经由OFM传送结构106将最终OFM结果发送到SRAM存储体组109。可例如使用ARU内的小的输出FIFO 198(也是179)来实现多个区块102的输出的同步,并且在区块输出FIFO198变满的极端情况下,通过使具有满的输出FIFO的区块节制(停止)以允许其它区块赶上。
多个SRAM控制(SC)FSM 142中的每个生成用于SRAM存储体组109内的每个SRAM存储体的SRAM地址和读取/写入信号。(例如,当激活具有值零时)多个区块控制(TC)FSM 144中的每个可跳过激活。为了准备操作,主机CPU将每个IFM和OFM张量的起始地址和大小(高度、宽度、深度、批大小)加载到SRAM控制FSM 142;将操作类型(全连接(FC)或卷积)和IFM、OFM以及权重数据类型加载到全局控制FSM 140,并加载IFM和OFM权重循环配置、IFM遍历的顺序、IFM遍次(pass)的数量(稍后解释)和其它计算映射设置、激活函数和池化(如果有)的选择;启用或禁用部分结果生成;加载权重张量大小(高度、宽度、输入和输出深度通道的数量);加载之字形(zig-zag)Z高度(以下进一步详细讨论);并且加载用于卷积填充和卷积步长的选项。主机CPU还写入与IFM传送结构、OFM传送结构和归约结构(RF)相关联的寄存器,以如操作参数所需的那样来配置连接性,操作参数包括每个SRAM存储体组109内的IFM张量和OFM张量的地址。为了开始操作,主机CPU写入全局控制FSM 140中的寄存器。全局控制FSM140随后用信号通知SRAM控制FSM 142和区块控制FSM 144开始。
在一些实施例中,全局控制FSM 140控制卷积窗口内的扫描,平移卷积窗口,并且遍历IFM张量以产生IFM切片流。全局控制FSM 140向SRAM控制FSM 142发送平面像素(x,y)坐标、深度通道索引d和IFM切片、以及读取信号。SRAM控制FSM 142中的每个添加起始地址,获取适当IFM数据,并且将数据输出到IFM传送结构104。典型地,IFM(和OFM)张量大小太大而不适合单个SRAM存储体组109,导致IFM(和OFM)张量被细分成要跨多个SRAM存储体组109存储的多个部分。在计算期间,全局控制FSM 140安排将被遍历(以特定序列获取或存储)的IFM张量和(相应的)OFM张量,同时还在运行中产生IFM传送结构和OFM传送结构的重新配置,以从正确的SRAM存储体组获取IFM并将OFM写入正确的SRAM存储体组。
所有区块高速缓存139可基本上同时接收该数据。全局控制FSM 140计算并向所有区块控制FSM 144提供:(i)用于保存每个传入数据的IFM高速缓存139寄存器堆的地址、以及(ii)用于将数据从IFM传送结构104写入高速缓存139的写入使能信号。当IFM切片通过IFM传送结构104来自SRAM存储体组109时,写入使能信号有效,并且当IFM片已经被高速缓存时,写入使能信号无效。当全局控制FSM 140以特定顺序遍历IFM层(张量)时,全局控制FSM 140还跟踪计算所需的哪些IFM切片已经被高速缓存,并且用信号通知SRAM控制FSM142何时读取IFM高速缓存139中尚未存在的数据。如果数据已经被高速缓存在区块高速缓存中,则全局控制FSM 140保持读取信号无效,使得SRAM控制FSM142跳过SRAM读取。注意,为了简化IFM高速缓存的管理,来自IFM传送结构的每个IFM切片被写入IFM高速缓存139中的相同地址处的所有相关联目标区块(通过映射规定,如稍后详细讨论)及它们各自的IFM高速缓存,而不管目标区块的编号。然而,因为区块计算由于不均匀的激活稀疏性而以略微不同的速率运行,所以每个区块的控制逻辑独立于其它区块在本地管理IFM高速缓存139读取。
在一些实施例中,写入OFM结果的处理类似。然而,由于激活跳过,计算延迟可能变化。每个区块控制FSM 144具有指示该区块中的所有列何时已经完成计算的信息。每个区块的区块控制FSM 144向全局控制FSM 140发送ofm_ready信号,全局控制FSM 140指示SRAM控制FSM 142将所得OFM切片从OFM传送结构写入OFM张量中的适当的(x,y,d)索引处的SRAM存储体。在OFM张量遍历期间,全局控制FSM 140以类似于其在IFM张量遍历期间生成IFM(x,y,d)切片坐标的方式生成OFM(x,y,d)切片坐标。一旦计算完成,全局控制FSM 140就向主机CPU发送中断。
如前所述,由于激活跳过,区块在每个时钟可产生例如多达两个输出结果。因此,IFM传送结构104应该能够在每个时钟供应多达两个IFM切片,以避免乘法器利用率的降低。因此,本地区块控制FSM 144通知全局控制FSM 140高速缓存中剩余待处理的数据量,使得全局控制FSM 140可指导SRAM控制逻辑142恢复获取IFM数据以避免IFM高速缓存下溢。当任何区块IFM高速缓存139变满时,全局控制FSM 140指示SRAM控制FSM 142暂停IFM张量遍历,IFM张量遍历包括从SRAM读取IFM切片以及将IFM切片写入区块高速缓存。
参照图1P,在一些实施例中,IFM高速缓存139包括十六个通路170。每个通路包含具有双输入端口和双输出端口的寄存器堆169。因为由于激活跳过(并且每MU列具有两个加法器树),系统区块102能够每时钟处理多达两个激活(当存在足够的零激活时),所以可使用双端口。为了更快地处理激活(例如,每时钟三个IFM切片),可使用三输入端口、三输出端口、三IFM传送结构带宽、三OFM传送结构带宽以及每MU列三个加法器树。
激活通过IFM传送结构以高达双倍的速率从SRAM进入。区块控制FSM 144跟踪每个高速缓存通路146中剩余待处理的IFM数据的量。当任何高速缓存通路即将变满时,区块控制FSM 144通知全局控制FSM 140至少一个通路高速缓存即将变满,并且全局控制FSM 140可节流(停止)由SRAM控制FSM 142控制的IFM读取,以避免一个或多个区块高速缓存通路溢出直到高速缓存空间释放为止。
当卷积窗口扫描完成(并且窗口被平移到下一位置)时以及当IFM循环完成时,全局控制FSM 140还通知区块控制FSM 144,使得区块适当地重置列累加器并且不将一个位置处的卷积的执行与下一位置处的卷积的执行混合。稍后详细定义和讨论IFM循环的概念。
区块控制FSM 144生成从每个高速缓存通路寄存器堆169读取IFM数据所需的信号,所述信号包括每个寄存器堆的输出端口的读取地址和读取启用。每个时钟周期,除非区块已经完成处理并且正在等待其它区块完成它们的处理,否则区块控制FSM 144(相应地从一个端口或两个高速缓存端口)读取一个或两个数据值(使得结果可用于被归约结构归约)。每单个时钟读取一个还是两个字节取决于激活稀疏性。激活广播单元141内的IFM缓冲器124检查激活是否稀疏,并且通知区块控制FSM 144,使得如果ABU IFM分级FIFO 165释放一个槽(slot),则区块控制FSM 144将加载一个字节,并且如果ABU IFM分级FIFO 165释放两个槽,则区块控制FSM 144将加载两个字节。
图1Q中的表示出当卷积窗口逐平面地从一个(x,y)位置滑动到下一位置时,在使用卷积窗口大小1×1、2×2、3×3和4×4执行卷积运算的同时足以保持所有IFM切片以避免向SRAM的重复读取的高速缓存大小。表中的数据假设乘法器单元的寄存器堆134包含18个权重寄存器,并且如以下进一步所讨论,卷积窗口以“之字形”顺序扫描输入张量,因为:由于与从本地寄存器堆169的单个读取相比,从SRAM的单个读取通常消耗相当多的功率,因此“之字形”扫描序列可用于最大化IFM高速缓存的使用,从而最小化从SRAM的读取和功耗。
例如,在之字形扫描参数Z(以下进一步详细讨论)被设置为2并且MU保持18个权重(足以保持两个3×3 8位卷积核或一个3×3 16位卷积核)的情况下,寄存器堆169应具有20字节的大小。
神经网络可具有50%与90%之间的被乘数,其中,至少一个被乘参数(激活和/或权重)为零。这可能是例如对于初始v3神经网络(Inception v3 neural network)在应用权重修剪之后的情况。如果MR区块102可高效地跳过乘以零发生,则MR区块102可能够以不进行跳过来处理所花费的时间的例如100%-80%=20%来处理数据,这样快了五倍。相应地,如前所述,在一些实施例中,可针对高速缓存配置MR实现,以使用多于两个输入来足够快地传送数据(以被相乘或跳过)。在这里的一些框图中,为了解释的简单和清楚,仅示出双倍输入带宽(以及相应地,仅两个深度的激活缓冲器124)。然而,将理解,IFM激活缓冲器124的深度可大于二,并且相应地,对于足够稀疏的数据,速度增加(在没有跳过乘以零的配置上)可大于2倍。
如以上在图1B至图1H的上下文中所述且如以下段落更详细地所述,数据稀疏性可用于通过IFM高速缓存和ABU的合适操作来实现处理吞吐量的极大改进。图1R示出位于存储在SRAM中的IFM张量内的起始位置处以启动输入层卷积的3×3卷积窗口。为了开始层卷积运算,从SRAM读取九个IFM切片a0[0..15]至i0[0..15],通过IFM结构将九个IFM切片a0[0..15]至i0[0..15]传送到目标区块,并且将九个IFM切片a0[0..15]至i0[0..15]写入到每个目标区块的IFM高速缓存139中。图1S示出这样的数据的另一示例,其中,若干元素为零。
图1T示出就在层卷积运算开始之前数据在值以(来自SRAM的)到达顺序进行排序的情况下可如何被逻辑地存储在IFM高速缓存139中,并且不一定示出它们根据值的实际存储地址的布置。尽管高速缓存可存储更多的激活值以适应卷积窗口的运动,但是在本示例中,执行3×3卷积;为了清楚,附图描绘了九个(3×3=9)8位激活值。类似地,图1U示出来自图1T的明确地具有具有零值的一些激活的本示例。
图1V示出根据一些实施例的激活广播单元141的单个通路171。每个ABU通路171包括IFM通路分级FIFO 173、通路复用器163、通路控制逻辑模块146和激活通路数字类型转换电路148,IFM通路分级FIFO 173可使用寄存器堆来实现。每个ABU通路171(与区块控制FSM144和其它ABU通路一起)可控制该通路中的激活跳过(即,跳过具有零值的激活元素)。
它还可将激活从带符号的二补码数字编码转换为带符号8位大小格式,以便简化处理各种位宽的带符号数据和无符号数据(包括uint8、int8、uint16、int16、uint24(24位无符号整型)、int24(24位有符号整型)、uint32(32位无符号整型)、int32(32位有符号整型)等)的乘法器电路。每个ABU通路171还可将激活广播到MR列133内的相关联行的乘法器单元126,作为激活通路137的信号集合的部分。
IFM通路分级FIFO 173具有两个输入端口、两个输出端口,并且可以是两值深度。两个输入端口可用于以每时钟周期多达两个激活(字节)的速率从IFM高速缓存引入激活。这样,当存在足够的零值激活时,作为在具有MU列中的两个加法器树、具有两个输入端口和两个输出端口的通路高速缓存以及具有深度为二的分级缓冲器173的结果,可每时钟周期处理多达两个激活。在一些实施例中,如果预期IFM将足够稀疏以证明每时钟较大数量的激活(例如,每时钟三个激活)合理,则可通过使用具有每MU列三个加法器树、三个通路高速缓存输入/输出端口、三个分级FIFO输入端口和深度为三的分级FIFO的电路来处理激活(其中,在本上下文中,“分级FIFO”表示IFM通路分级FIFO 173)。
通路控制逻辑146可将一组控制信号作为激活通路137的信号集合的部分而广播到乘法器126的相关联行,以通知乘法器单元126激活是否为零,如果激活是零,则哪个非零激活正在被复用以替换零(包括来自哪个通路以及在分级FIFO中多深(在分级FIFO中的偏移)),使得每个乘法器将能够选择正确的权重和加法器树以用于乘法。类似地,通路控制逻辑146还控制通路复用器163,以将来自位于正确邻近IFM通道中的正确分级FIFO 173深度偏移的激活复用到激活通路137上。
图1V示出具有四个输出逻辑连接的IFM通路分级FIFO 173,四个输出逻辑连接足以将两个缓冲激活中的任何一个提供给上方的邻近通路,将两个缓冲激活中的任何一个提供给下方的邻近通路,并且将两个缓冲激活都提供给通路激活复用器163。注意,尽管图1V描绘了具有四个输出逻辑连接的分级FIFO 173,但是由于FIFO 173在示出的实施例中仅为两值深度并因此仅保持可用于同时输出的两个值,所以FIFO 173仅具有两个物理输出端口。
图1WA示出在IFM的前两个向量已经被读入(也如图1C中所示)之后具有四个单独的IFM通路分级FIFO 173(为了清楚示出,不是16个)的IFM分级FIFO 165的内容。在这种状态下,FIFO可检查哪些激活值为零以及哪些不为零。在一些实施例中,每个FIFO寄存器具有零检测器(例如,8输入NOR逻辑)。每个通路分级FIFO 173向相应的通路控制逻辑146报告哪些激活为零,通路控制逻辑146跟踪该通路中的哪些激活已被用完(例如,借用),这导致创建如图1D中所示的“孔”。每个通路的控制逻辑146将关于通路分级FIFO占用的这种信息(包括哪些激活为零)发送到区块控制FSM 144。激活a0、a1、a2和a3经历数字格式转换(如果激活是如int8或int16的带符号激活),变得细分成8位值(如果激活位宽超过8,例如,uint16、int16、uint24、int24、uint32、int32等),并且被广播到乘法器单元126的相应行。
在下一个时钟周期,IFM分级FIFO 165可包含图1WB中(和图1D中)示出的值。此时,激活a0..a3已经被处理,并且b0、b2和b3正在被广播到乘法器单元126的相应行。由于b1为0,因此b1的通路未被使用。每个通路的控制逻辑146将这种信息(哪些激活是零或“孔”)发送到区块控制FSM 144。然后区块控制FSM 144做出关于以下的决定:(i)将哪些数据复用出去(在图1WB和图1D中,b0复用到通路0上、c1复用到通路1上、b2复用到通路2上、b3复用到通路3上等)以及(ii)使用来自每个通路的控制逻辑146的输入来检测整个FIFO列是否包含孔和/或零,因此可被跳过。当后者发生时,区块控制FSM 144使得:(i)高速缓存获取两个值(而不是一个)以及(ii)FIFO接受这两个值(而不是一个),从而跳过整个孔和/或零FIFO列。此外,如果与该通路(与整个列相反)相关联的IFM通路分级FIFO 173中的多个值包括零和/或孔,则通路控制逻辑还使高速缓存获取两个值。
例如,通路1(输出c1)有6个输出选择:c0、c1、c2(为零)以及b0、b1(也为零)和b2。复用器163输出这6个选择中的一个。输出哪个选择由区块控制FSM 144确定。为了能够实现这一点,复用器163可被配置为能够从上面一个通路的两个FIFO列、从下面一个通路的两个FIFO列以及从与复用器163相同的通路中的两个FIFO列检索数据。可使用例如与图1MA和图1MB中所示的电路类似的电路来实现这种能力。如先前在那些附图的描述中所述,从上方和下方的一个通路检索(和复用)数据的能力可被称为“1的侧向查找(look-aside of 1)”,从多达从右开始的第二FIFO列检索(和复用)数据的能力可被称为“2的前向查找(look-aheadof 2)”。注意,每个IFM分级FIFO 165列和通路组合可具有与其相关联的单独的前向查找值和/或侧向查找值;然而,为了示出清楚,让我们假设IFM分级FIFO 165中的所有列和通路具有相同的相关联的侧向查找值和相同的前向查找值。此外,可基于每个复用器163具有多少输入以及这些输入被连接在何处而采用其它变型,这些变型不被前向查找和侧向查找概念覆盖,包括例如禁止将输入从分级FIFO发送到相同激活通路上,并且以更灵活的方式连接通路0和通路15以补偿通路0和通路15不具有两个邻近通路中的一个。
侧向查找和/或前向查找可大于二。更大的数字可更优化地跳过零激活而导致更好的性能,使得区块计算时间进一步减少。因为当侧向查找和/或前向查找数较大时,每个通路具有关于从何处检索非零激活的更多选择,所以可实现该益处。非零激活的更多选择有助于跨所有通路更均匀地散布非零激活,使得与一些通路较多而其它通路较少,潜在地导致区块处理等待完成,直到具有最多激活的通路完成计算为止相反,每个通路最终具有大约相同数量的非零激活。如前所述,如在单独的相关公开中所述,扩展非零激活可通过伪随机地混洗激活通路和相关联的权重来实现。
图1WC示出对于每个FIFO列前向查找为2、侧向查找为2并且复用器163具有10个输入的配置。在这样的实施例中,FIFO可以是二深度,相应地可具有两个输出端口。
图1WD示出前向查找为3、侧向查找为1并且复用器163具有9个输入的配置。在这样的实施例中,FIFO可以是三个深度,并且可具有三个输出端口。
图1WE示出前向查找和侧向查找都是3并且复用器163具有15个输入的配置。在这样的实施例中,FIFO可以是三个深度,并且可具有三个输出端口。
激活广播单元141和区块控制FSM 144可类似地涉及在图1E至图1G中示出的操作中。例如,图1E示出当c1已经在先前时钟周期中被借用(从最右边第二列复用)时,通路控制逻辑146(在c1最初所在的通路中)跟踪的“孔”被创建。每个通路控制逻辑146向区块控制FSM 144通知IFM分级FIFO 165中的哪些数据单元为零或为空,使得区块控制FSM 144可适当地控制激活复用器163。区块控制FSM 144决定复用器控制以分散激活,以便增加或优化吞吐量。与所有通路不平衡使得一些通路具有许多非零激活而其它通路(在同一区块中)大部分具有零相反,当所有通路具有相同数量的非零激活时,可实现最佳吞吐量。在这样的不平衡情况下,大部分具有零的通路可比与具有许多非零激活的通路更快地完成它们的计算(即,可更快地输出所有非零激活),这可延迟该区块的计算的结束并且导致零丰富的通路中的乘法器利用率降低。
作为另一示例,在图1G中示出的状态下,通路控制逻辑146还从区块控制FSM 144接收复用器选择信号,以跟踪(i)创建的孔和(ii)哪些激活从何处被复用。通路控制逻辑146随后将该信息广播到乘法器单元126的相关联行,使得当激活已经被无序复用时(其中,图1G中的“有序”例如表示来自激活缓冲器的g0被输出到标记为g0的激活通路上),该行中的每个乘法器单元126可将该无序激活与其对应的权重相乘。
例如,如所示,如果激活从最右边第二个分级FIFO列向上的一个通路复用,则与该激活相乘的对应权重位于(每个列的)上面一个通路的乘法器单元中。
当前向查找大于二(例如,三),并且激活从最右边第三列被检索到时,将被检索的对应权重向前3-1=2,表示如果有序激活已与权重w[row,col,i]相乘,则相乘的合适权重代替为w[row,col,i+2]。
图1H示出当激活被复用(乱序推进)使得整个FIFO列(所有16个通路)变为空闲(仅包含零或孔)时的(从吞吐量角度来看有利)情况。因为两个FIFO列被同时消耗,最右边的全零列被跳过(丢弃),并且从最右边第二列被广播并被用完以计算,所以区块控制FSM 144检测到这种状况并且指示IFM高速缓存139将两个值加载到FIFO中。这将区块中的计算延迟减少了一个时钟周期。
图1X示出累积和返回单元(ARU)167。ARU的作用是完成点积计算并应用激活函数(当适用时)以产生完成的输出特征图(OFM),完成的输出特征图准备好通过OFM传送结构传输回到SRAM以存储。如图1N中所示,每个MR列133包含两个ARU 167,每个加法器树128A和128B一个ARU 167。
ARU 167具有两个输入,一个来自本地加法器树128A或128B,一个来自归约结构111。如稍后所详细解释,每个ARU的中心是加法器181和累加器寄存器130A,它们可通过(随时间)累加来完成点积计算。为了完成OFM计算,完全归约的点积可(可选地)使用单元187而被(经由取整)截断,使用乘法器189通过因子191而被缩放,可使用加法器193与OFM偏置195求和,并且可经由激活函数197传递。激活函数模块197可支持激活函数(诸如,整流线性单元(ReLU)、S型函数、双曲正切等)。如果(由于稍后详细解释的原因)点积归约不能完成,则来自累加器130A(130B)的部分点积或仅“部分积”可在其经由复用器199到OFM传送结构的途中绕过缩放、偏置和激活函数,并且输出FIFO 198。绕过加法器181的复用器183允许将加法器树值直接加载到累加器130A中,例如以发起累加。
复用器174选择ARU的输入源,该输入源用于(i)ARU所位于的相同(本地)区块内的加法器树与(ii)归约结构之间的“返回”(缩放、偏置和激活应用,当适用时,连同部分路径),归约结构包括将本地(“区块内”)加法器树128A和128B组合成甚至更大(“区块间”)加法器树的可配置加法器树,甚至更大(“区块间”)加法器树能够从多个区块(例如,从32或64或128或256个乘法器单元)对乘法器单元乘积进行归约。
由于区块控制FSM跟踪每个MR列133中的哪个通路和加法器树用于获得每个部分IFM归约,因此区块ARU 167由区块控制FSM 144进行控制。ARU 167具有两个输出,两个输出包括经由FIFO 198和运行中池化逻辑(on-the-fly pooling logic)196连接到OFM传送结构的一个输出以及经由FIFO 179连接到归约结构的一个输出。区块控制FSM 144还跟踪输出FIFO 198和179的状态。由于每个区块(由于零激活跳过的不可预测性)以略微不同的速度执行计算,因此每个输出FIFO 198和179用于通过延迟比其它区块提前(更快)结束运行的区块的输出来恢复区块输出的同步。可能需要使区块输出由FIFO 179同步,因为:区块输出可经历归约结构111的进一步归约,归约结构111可被认为是一组附加的加法器树级,并因此可能需要其(来自区块的)输入并行地并且同步地到达。类似地,可能需要使区块输出由FIFO 198同步,以便将OFM切片的所有通路同时输出到OFM传送结构。四个或更少条目的输出FIFO 198和179的大小在许多情况下可足够。在输出FIFO 198或179在一个或多个区块中将要溢出的情况下,区块控制FSM 144可停止计算,直到输出FIFO 198或179清空为止。输出FIFO 198或179可具有两个输入端口,以便合并来自两个加法器树(A和B)路径的结果。
最后,区块控制FSM 144和SRAM控制142一起工作以从输出FIFO 198读取数据,执行归约结构处理,通过OFM传送结构传输结果,并且存储到SRAM。
让我们回顾激活数字类型转换器135与累加和返回单元167如何一起工作,以支持各种位宽的有符号和无符号输入和输出数据类型(包括能够针对激活任意地使用一种数据类型并且针对权重使用另一种数据类型,以下被称为“混合数据类型”)。
在一些实施例中,可使用以下数据类型:用于IFM、OFM和权重的int8、uint8、int16、uint16、int24、uint24、int32和uint32。如下所详细解释,IFM和权重数据类型可自由混合。例如,可使用uint8激活和int8权重、或者int8激活和int8权重、或者int16激活和int8权重、或者int16激活和int16权重等来执行卷积或全连接层计算。还可通过应用缩放、取整和激活函数的选择的组合来随意选择包括uint8、int8、uint16、int16、uint24、int24、uint32、int32等的OFM数据类型。
可准备激活以用于如下操作。激活可例如如由用户指定的作为int8或uint8或int16或uint16被存储在SRAM中。如图1L中所示,该IFM数据可被获取到高速缓存(即,到IFM高速缓存139),随后经由激活广播单元141通过,激活广播单元141包括激活数字类型转换器135。作为第一步骤,如果激活使用如在谷歌张量流中所使用的“零点”偏移来量化,则类型转换器135将“零点”偏移添加到激活。随后,数字类型转换器135通过应用合适的变换(或“转换”)来准备激活,这使得使用8位无符号乘法器126来执行的使用比8位更宽的数据类型(例如,16位权重和/或16位激活,有符号或无符号)的乘法成为可能。如图1K中所示,对于每个通路,激活广播单元141广播伴随有1位符号sact的激活的8位绝对值act_abs[7:0]。由激活数字类型转换器135应用的变换将int8/unit8转换为“符号和8位绝对值”。如果输入激活是uint8,则类型转换器135将输出广播8位绝对值设置为等于输入uint8值(即,无变换),并且将广播符号设置为零(这表示非负值被表示)。
如果输入激活数据类型是int8,则激活数字类型转换器135将输出绝对值设置为激活的绝对值,如果激活为负则将输出符号设置为1,否则设置为0。
可准备权重以用于如下操作。权重可如由用户指定的作为int8或uint8或int16或uint16被存储在SRAM中。当权重被加载到MU寄存器中时,权重在权重解压缩单元138中(使用与激活数字类型转换器141变换激活使用的变换相同的变换)被变换。权重被存储为8位绝对值和1位符号。参照图1K和图1N,当权重从SRAM加载到MU寄存器中并且通过垂直权重加载总线101输入到乘法器单元中时,被表示为int8和uint8的值被转换为8位绝对值wt_abs_Id_in[7:0][C]和1位符号表示swt_in[C]。
可如下执行八位乘法。乘法器126可以是无符号8位乘无符号8位乘法器。乘法运算可采用均以8位绝对值和1位符号表示的激活和权重作为输入。乘法器随后将两个8位绝对值相乘,并且将两个符号异或。如果两个8位绝对值的乘积为零,则输出符号被设置为零。乘法器结果(16位绝对值伴随其符号)随后被转换为int17,并且被传送到加法器树。随后,加法器树对从列乘法器单元接收的带符号的int17值进行归约,并且将带符号的和传送到与加法器树相关联的ARU 167。
在一些实施例中,可如下混合16位和8位输入数据类型。8位权重和8位激活可在一个周期中相乘。在一些实施例中,支持8位数字数据类型的所有可能组合(例如,uint8激活×int8权重、int8激活×int8权重、uint8激活×uint8权重以及int8激活×int8权重)。可使用两个周期来计算:(i)16位权重和8位激活的乘积或(ii)16位激活和8位权重的乘积。可使用四个周期来计算16位激活和16位权重的乘积。可支持8位和16位数字数据类型的所有可能组合(例如,uint16激活×int8权重、int16激活×int8权重、uint16激活×int16权重、uint8激活×int16权重、int16激活×int16权重等)。
在一些实施例中,可如下处理16位激活。当激活是uint16或int16时,类型转换器135可通过应用变换(类似于以上描述的8位变换)来准备数据。uint16或int16格式的值可被变换为16位绝对值和符号格式。如果使用8位(uint8或int8)权重,则激活广播单元141的第一周期输出可以是从变换产生的16位绝对值和符号的最低有效字节(LSB)(用于与8位权重相乘),激活广播单元141的第二周期输出可以是从变换产生的16位绝对值和符号的最高有效字节(MSB)(也用于与8位权重相乘)。然后,除了最高有效字节乘积还可在被相加之前使用符号扩展移位175(和复用器177)向上移位8位之外,两个部分乘积结果(均被转换为带符号的int17)可(如通常那样,经由列的加法器树128A或128B到列的累加和返回单元167)被发送到列的累加器130A或130B,并且可由累加器130A(或130B)加在一起。
如果权重是16位(uint16或int16),则可使用四个时钟周期来执行(16位)激活和权重的乘法。激活广播单元141的第一周期输出可以是从激活的变换产生的16位绝对值和符号的最低有效字节,乘法器126可同时被输入权重的16位绝对值的最低有效字节,并且第一乘法可被执行。在第二周期期间,激活的相同部分(即,从激活的变换产生的16位绝对值和符号的最低有效字节)的乘积可与权重的16位绝对值的最高有效字节一起被再次输入到乘法器,并且第二乘法可被执行。
激活广播单元141的第三周期输出可以是从激活的变换产生的16位绝对值和符号的最高有效字节,乘法器可同时被输入权重的16位绝对值的最低有效字节,并且第三乘法可被执行。在第四周期期间,激活的相同部分(即,从激活的变换产生的16位绝对值和符号的最高有效字节)的乘积可与权重的16位绝对值的最高有效字节一起被再次输入到乘法器,并且第四乘法可被执行。除了可使用符号扩展的上移器175和复用器177将第二部分乘积和第三部分乘积均在相加之前预移位8位且将第四部分乘积预移位16位之外,所有四个部分乘积结果可(如通常那样,经由相关联的列的加法器树128A或128B到列的累加和返回单元)均被发送到列的累加器130A(或130B)并相加在一起。
执行卷积运算涉及遍历存储在SRAM 109中的IFM张量,并且将IFM张量的内容作为通过IFM传送结构104传送的一系列IFM切片流式传输(stream)到一个或多个区块102。IFM张量具有使用被表示为(x,y,d)的坐标的三个维度(以及批索引(batch index),为了解释清楚,现在我们省略批索引),其中,x和y索引对应于激活的平面坐标,并且索引d对应于深度通道。神经处理器通过以特定顺序经由(x,y,d)索引值进行循环来遍历IFM张量。让我们将在(x,y)坐标上的循环表示为“平面”遍历,在d坐标上的循环表示为“深度方向(depth-wise)”遍历。
以下一些段描述包括IFM高速缓存139的使用的平面遍历。参照图1N,IFM传送结构104可经由IFM高速缓存139连接到IFM区块102。每个区块可存在一个IFM高速缓存139,每个IFM高速缓存139被本地放置到相关联的区块。利用IFM高速缓存139(每个区块)有助于减少来自SRAM 109的读取的数量。减少来自SRAM 109的读取的数量可在三个方面有益,该三个方面包括:(i)减小SRAM对神经处理器的总体功耗的贡献,(ii)减少SRAM读取或写入停止的可能性,以及(iii)减少经由IFM传送结构104流动的流量。
当与触发器寄存器功耗相比,SRAM消耗相当高的功率,这在实践中可能发生时,SRAM功耗减小方面可能是感兴趣的。当与将被执行的输入/输出(I/O,读取或写入)操作的数量相比,位于每个SRAM单元109中的SRAM存储体的数量低时,SRAM停止方面可能是特别重要的。例如,如稍后将详细描述,每个SRAM存储体组单元109可包含四个SRAM存储体,因此能够同时执行多达4个I/O操作(每个时钟周期)。这些I/O操作可以是IFM切片读取、一个或两个OFM切片的写入、部分结果读取或写入以及由AXI互连114请求的切片读取或写入。
当多于四个这样的I/O操作必须同时访问驻留在同一SRAM存储体中的数据或者一个或多个I/O操作必须访问同一存储体中的数据时,可能发生存储体访问冲突,导致SRAM存储体仲裁逻辑停止AXI访问或IFM获取或OFM写入或部分结果I/O,潜在地也导致计算停止。因此,IFM高速缓存139减少来自SRAM单元109的IFM读取,以减少具有这些类型的停止的可能性。
如稍后将更详细地讨论,在权重核大小特别大的情况下,可能或者必须依靠将计算分割成多个部分,并且可将部分完成的计算结果(“部分结果”或“部分”)存储在SRAM中。为了保持可接受的计算精度,与IFM和OFM相比,部分结果通常具有相当较长的位宽(例如,4字节或6字节)。将具有长位宽的部分结果写入SRAM和从SRAM读取具有长位宽的部分结果相应地消耗更高的SRAM带宽,这可能增加SRAM存储体访问冲突的可能性,因此AXI或计算停止。因此,具有IFM高速缓存139可帮助缓解SRAM I/O瓶颈(特别是对于使用部分结果的计算)。
当通信总线面积非常珍贵时,减少IFM传送结构流量可能是感兴趣的。回想如图1P中所示的IFM传送结构可每时钟将多达两个IFM切片传送到IFM高速缓存139。当IFM传送结构可同时(例如,每单个时钟)将N个切片传送到IFM高速缓存139时,让我们将IFM传送结构104称为具有“N个切片的宽度”。当计算所需的IFM切片已经由区块本地地高速缓存并且容易地可用于处理时,通过将IFM切片本地地高速缓存(到每个区块),IFM传送结构104可保持空闲。具有空闲周期(具有小于100%的利用率)的IFM传送结构104使得可使用空闲周期来传送额外的IFM切片,因此使得总体“有效”IFM传送带宽超过2倍。因此,当IFM传送结构面积非常珍贵时,IFM传送结构104的宽度可从例如两个切片减小到一个切片,同时仍然将总体IFM传送带宽保持在1倍或更大,有时达到2倍或更大。
如以下将看到,IFM高速缓存139为具有大于一的核平面宽度和/或高度的卷积运算提供最大益处。“深度方向”卷积(具有都等于1的核宽度和高度的卷积)和全连接计算也可受益于IFM高速缓存,但是通常仅在罕见的情况下。
为了理解一个实施例的解决方案(被称为“之字形”平面遍历,被设计为增加IFM高速缓存命中率),如图2AA至图2AD中所示,让我们首先考虑使用2×2×16×1权重核以“朴素的”方式平面方向地(planar-wise)遍历IFM张量。这里,2×2表示权重核的平面高度和宽度,16表示IFM深度(即,一个切片),1表示OFM深度。然而,为了解释清楚,我们可将卷积视为纯平面(即,2×2×1×1)。图2AA示出以放置在IFM张量的左上角处的卷积(核权重)窗口开始的卷积运算。在计算该位置处的2×2卷积之后,窗口向右滑动一个像素。重复通过滑动处理跟随的计算,直到窗口到达IFM张量的右上角。如图2AB中所示,一旦在右上角处,卷积就被计算,并且卷积窗口现在向下滑动一行(而不是向右)。随后,如图2AC中所示,除了卷积窗口现在保持向左滑动之外,进一步重复相同的计算和滑动步骤,直到如图2AD中所示,它到达IFM张量的左边缘,它在IFM张量的左边缘再次向下滑动一行。重复这些步骤最终导致IFM张量的完整平面扫描(遍历)。由于窗口主要水平滑动(即,内循环在x坐标上循环),因此让我们将这样的扫描称为水平扫描(与垂直扫描相对)。
考虑将IFM高速缓存139与如图2BA至图2BL中所示的朴素的“水平”扫描结合使用。在卷积运算的开始,IFM高速缓存139被清除,2×2卷积窗口被放置在IFM张量的左上角,随后检索在该起始位置计算卷积所需的四个IFM值。如图2BA中所示,从IFM传感器中的最左上方位置检索四个IFM值中的第一个。让我们将该位置称为在行0列0中。由于高速缓存已经被清除,因此必须从SRAM而不是IFM高速缓存检索行0列0处的IFM值,导致在图2BA中标记为“M”的高速缓存未命中。一旦被检索,IFM值就会被高速缓存。图2BB示出在行0列1处检索的(四个值中的)第二IFM值。高速缓存不包含与该位置(行0列1)相关联的值,导致由“M”标记的另一高速缓存未命中。行0列0位置的浅色阴影指示在先前步骤中检索到的IFM值已被高速缓存。图2BC和图2BD示出剩余两个IFM值的检索,每个IFM值导致高速缓存未命中。此时所有四个IFM值已经被检索,当前位置处的卷积计算可完成,所有四个IFM值也已经被高速缓存并且卷积窗口可向右滑动一列。
图2BE至图2BH示出检索另外四个IFM值以计算新的位置处的卷积。在图2BE中,在行0列1处检索IFM值导致高速缓存命中,因此避免SRAM读取。类似地,图2BG示出在行1列2处的另一高速缓存命中,而检索另外两个IFM值均引起高速缓存未命中。
随着卷积窗口保持滑动,如由图2BI至图2BL(以及图2BE至图2BH)中的深色阴影所指示,最左边的先前高速缓存的IFM值将在延长的时间段内不参与计算,或者完全不参与计算,直到卷积窗口一直滑动到IFM张量最右边缘,向下滑动一行并且一直滑动回到高速缓存的值为止。因此,一旦卷积窗口滑动,这些值就可从高速缓存被清理以将高速缓存大小保持为小。
图2BI至图2BL示出检索接下来的四个IFM值以计算下一位置(向右一步)处的卷积,导致两个高速缓存命中和两个高速缓存未命中。如图2BM中所示,因为每当卷积窗口向右滑动一步时,四个IFM值中的两个(用浅色阴影标记)被重复使用一次,所以在2×2卷积期间水平地高速缓存IFM值导致大约50%的高速缓存命中概率(率)。更一般地,结合水平高速缓存使用H×W平面核大小并且假设足够大小的高速缓存的卷积导致H*(W-1)/(H*W)高速缓存命中率。足够用于这样的卷积的高速缓存大小可以是每通路每区块(W-1)字节。然而,如稍后将详细解释,神经处理器100还可在点积计算期间使用“IFM权重循环(IFM weightcycling)”(以通过顺序地循环乘法器单元的权重而将一些IFM通道累积成点积)。因此,如稍后将变得清楚,在最一般的情况下,最大高速缓存大小等于每通路每区块存储在MU权重寄存器堆127中的权重的数量(对于8位权重数据类型,该数量等于18)。
在图2BA至图2BM中,保持高速缓存大小相对较小需要积极地清理高速缓存值。参照图2BM,随着卷积窗口在行R(行2)上滑动时,来自先前行R-1(行1)的IFM值已经从高速缓存(在行1、列2处被指示为高速缓存未命中“M”)被清理很久。为了将高速缓存命中率增加到高于H*(W-1)/(H*W),可考虑将IFM张量的例如一行或多行的值进行高速缓存。然而,将整个IFM张量行进行高速缓存将需要高速缓存大小增大,使得高速缓存大小通常变成IFM张量宽度的函数。由于IFM张量宽度在ASIC设计时通常未知,并且由于IFM张量宽度可能相对大,所以将IFM行进行高速缓存在硅面积方面似乎是昂贵的,因此是不期望的。相同的原因应用于当卷积窗口主要垂直扫描(即,平面坐标内循环在行号上迭代)而不是水平扫描时的对称情况。
与朴素的平面扫描相反,一些实施例在卷积运算期间以“之字形”形状执行IFM张量的平面遍历。之字形平面遍历有助于增加高速缓存命中概率,同时仍然将高速缓存大小保持为小。图2C示出:在这样的实施例中,卷积窗口可沿着其移位(滑动)的下-右-上-右之字形路径。与朴素的水平遍历不同,图2C中的卷积窗口在已经计算两个卷积(在垂直邻近位置中)而不是一个卷积之后向右滑动。因此,与朴素的水平遍历的一行结果相反,由卷积窗口进行的IFM张量的单个完整的左到右、边缘到边缘扫描(sweep)产生两行卷积结果。
在更一般的情况下,可使用与在单个水平IFM张量扫描中处理的输出行的数量对应的“Z数”来参数化之字形遍历。例如,在图2C中,Z数等于2。如稍后将看到,较高的Z数导致较高的高速缓存命中率。
在图2C中,每单个水平扫描产生两行结果的之字形遍历可被想象为在两倍宽但是一半高度的IFM张量上执行朴素的水平遍历。更一般地,可将之字形遍历路径视为需要总共H/Z个扫描来“展开”成H*Z个列的长度的单个(水平)扫描以完成IFM张量卷积,其中,H和W分别是IFM张量高度和宽度。例如,在图2C中,Z=2,因此,代替通过朴素的扫描来遍历H×WIFM层,箭头路径的长度近似为H*Z=W*2,因此逻辑IFM层宽度变为W*Z=2W,而逻辑IFM层高度变为H/Z=H/2。朴素的水平等效于Z=1的之字形遍历。
图2DA至图2DD示出针对卷积窗口的第一位置检索全部四个IFM值导致高速缓存未命中,引起发生四次SRAM读取。如图2DE至图2DH所示,针对卷积窗口的下一个位置,获取另外两个IFM值导致高速缓存未命中,而其它两个IFM获取位置与卷积窗口的先前位置重叠,因此导致两个高速缓存命中。
如图2DI至图2DL中所示,对于卷积窗口的下一位置,两个IFM值是高速缓存未命中,并且两个与卷积窗口的先前位置重叠,均导致高速缓存命中。如图2DM至图2DP所示,对于卷积窗口的下一个位置,一个IFM值是高速缓存未命中,并且三个与卷积窗口的先前位置重叠且是高速缓存命中。这样并且进一步参照图2DQ至图2DX,之字形路径的使用显著地改善了高速缓存命中与高速缓存未命中的比率。
图2E是示出与之字形遍历相关联的被称为理想高速缓存中的SRAM读取的次数的SRAM读取的实际次数的表(之字形遍历效率的测量)。该表假设高速缓存大小在执行单个扫描(即,来自先前扫描的值被清理)时对于给定的Z足够。表中较低的数字对应于较高的效率,1.0是理想情况。卷积大小表示平方权重核(square weight kernel)的平面维度。例如,与使用理想高速缓存(即,具有无限容量并且从不清除任何值的高速缓存)的3×3卷积相比,具有Z=2的之字形遍历的3×3卷积导致另外2倍(2×more)的SRAM读取。然而,与使用理想高速缓存相比,使用具有Z=1的之字形遍历(即,朴素的(例如,水平的)遍历)的3×3卷积导致另外3倍(3×more)的SRAM读取。因此,如通过以下描述的公式所计算,在这种情况下,如通过下面描述的公式所计算,与朴素的遍历相比,具有Z=2的之字形遍历将SRAM读取计数减少3/2=1.5倍(3/2=1.5×),而针对Z=2和Z=1的之字形遍历的高速缓存大小保持小的变化。注意,较大的Z数产生较大的SRAM读取计数节省。例如,对于3×3卷积,将高速缓存Z增加到4导致3/1.5=2倍(3/1.5=2×)SRAM读取节省。
图2F示出:假设每个时钟处理一个IFM切片,用于供应IFM高速缓存所需的每时钟的平均预期IFM SRAM读取的表。例如,与没有高速缓存的情况下的100%(即,每个时钟)相比以及与高速缓存Z=1(即,朴素的遍历方案)的情况下的20%的时间相比,具有高速缓存Z=4的5×5卷积平均执行SRAM读取仅8%的时间。
图2GA至图2GB示出高速缓存命中/未命中计数和高速缓存大小的推导。之字形遍历涉及两步序列的重复,其中,卷积窗口垂直滑动Z-1行,随后侧向滑动一列。为了简明起见,忽略IFM张量边缘处的特殊情况,平面大小W×H的卷积窗口侧向(图2GA中的右侧)滑动一列导致H个高速缓存未命中(标记为“m”)和H*(W-1)个命中。下面的垂直(在图2GB中向下)滑动Z-1行的步骤导致(Z-1)个高速缓存未命中和(Z-1)*(H*W-1)个高速缓存命中。
相应地,一旦卷积窗口已经水平滑动一列,卷积窗口就可使用核窗口内的先前高速缓存的值(在先前垂直平移期间高速缓存的在图2GA中标记为“c”)用于当前计算。因为窗口将开始垂直滑动(在图2GA中,向下),所以在核窗口外部(在图2GA中,下面)标记为“c”的先前高速缓存的值也应留在高速缓存中以被使用。此外,在卷积窗口向下滑动Z-1行、向右滑动一列并且向上返回之后,从SRAM获取的值(标记为“m”)也应被添加到高速缓存以在当前位置处的计算中使用。接下来,每当卷积窗口向下滑动一行时,一个高速缓存值(左上)可被清理并来自SRAM的一个值被添加(标记为“m”)。因此,对图2GB中的“c”标记的数量进行计数,所需的高速缓存大小是(H+(H+Z-1)*(W-1))。
如稍后所详细解释,如果权重循环被使用,则高速缓存大小可增加与同时存储在任何区块中的核的数量相同的因子。如上所述,当卷积核小时,系统可将一些平面核存储到每个MU中。例如,如果MU具有18个权重寄存器,并且卷积是2×2,则四个2×2核可被存储在MU权重寄存器中。例如,具有64个通道0...63的IFM的点积可通过随时间在四个存储的核上进行循环而被计算成OFM 0…7。系统可获取保持通道0…15的IFM切片,乘以(四个中的)第一核,并且将结果保持在区块的累加器中;获取具有通道16…31的IFM切片,乘以(四个中的)第二2×2核,并且将结果与已经存储的累加器值相加;并且重复第三次和第四次。这些IFM也可被高速缓存,导致相应增加的高速缓存大小。IFM高速缓存大小具有上限,而不管平面转换方法(朴素或之字形或其它一些方法)的选择,上限是乘法器单元权重寄存器堆的大小的函数。这是因为每个高速缓存的IFM必须在权重寄存器堆中具有对应的权重以被相乘,并且权重寄存器堆本身被限制(例如,被限制为18个权重)。注意,相同的原因也转化为具有等于权重寄存器堆大小的下限的IFM高速缓存大小。
因此,IFM高速缓存大小应被设置为(H+(H+Z-1)*(W-1)–1)和取所有可能的所支持的H和W组合的MU_WEIGHTS中的最大值,其中,MU_WEIGHTS等于乘法器单元权重寄存器堆大小(例如,18)。例如,如果神经处理器每乘法器单元具有18个权重,支持Z=2和核权重平面大小的所有自然H和W的之字形遍历,使得H*W<=18(例如,1×1、1×2、2×1、……、4×4、9×2、2×9),则IFM高速缓存大小是(1+(1+2-1)*(1-1)–1)=0,(1+(1+2-1)*(2-1)–1)=2,(2+(2+2-1)*(1-1)–1)=2,…(4+(4+2-1)*(4-1)–1)=18,(2+(2+2-1)*(9-1)–1)=25,(9+(2+2-1)*(2-1)–1)=11与18中的为25的最大值。
在一些实施例中,MU权重寄存器堆容量等于18个8位权重(uint8或int8)或等效地等于9个16位权重(uint16或int16)。当IFM数据是16位(uint16或int16)时,IFM高速缓存可通过分配每一个16位IFM两个字节来存储16位IFM数据。因此,类似于MU权重寄存器能够存储9个16位权重,IFM高速缓存可存储9个16位IFM值。之字形(以及朴素的)平面遍历可以以类似于它如何应用于8位值的方式应用于16位IFM值。在这种情况下,以上描述的高速缓存大小计算还应包括最大值函数中的附加W项和H项(诸如,(H+(H+Z-1)*(W-1)–1)*size_of(IFM_DATA_TYPE),其中,size_of(IFM_DATA_TYPE)表示IFM值的数据类型的字节大小(例如,对于24位IFM值为3字节,对于32位IFM值为4字节)。在IFM数据类型是24位、32位或更长的情况下,可使用之字形(以及朴素的)进行高速缓存,然而,推荐将MU权重寄存器堆127大小(以及IFM高速缓存大小)增大到3×3×size_of(IFM_DATA_TYPE)。如稍后详细解释,这确保了可在不借助于使用可能不期望的部分结果的情况下对流行的3×3平面大小的权重核进行卷积。
如前所述,全局、SRAM、区块和通路控制逻辑单元140、142、144和146一起工作以执行对SRAM IFM获取、IFM切片在IFM传送结构上的传输、将IFM值高速缓存到本地区块中、检索高速缓存的IFM值(通常对于每个激活通路以稍微不同的速率)以及在区块之间重新同步OFM结果的适当控制。为了配置IFM和OFM平面遍历,主机CPU将包括之字形高度Z的计算参数加载到全局控制FSM 140和SRAM控制逻辑142。然后全局控制FSM 140协调SRAM控制FSM 142和区块控制FSM 144以开始并执行计算。
当卷积窗口以之字形平面方向方式遍历输入层和输出层时,每个累积和返回单元167可接收OFM值以有利地在运行中计算池化,而无需将预池化结果保存到SRAM并且稍后将它们读回以应用池化。如图2HA至图2HD中所示,在池化窗口不重叠时的情况下,ARU可通过不发送每个卷积OFM结果,而代替地将卷积结果保持在它的池化逻辑的196寄存器中直到每个池化输出完成来执行池化。只有在每个池化输出完成之后,ARU才将池化输出写入到SRAM。对于最大池化,ARU输出寄存器可保持最大值,该最大值与卷积输出进行比较,并且当最新的OFM输出超过当前最大值时被更新。一旦池化窗口滑动,ARU输出寄存器被重置以重新开始最大值(max)操作。对于平均池化,ARU累加器保持将OFM输出相加,直到池化窗口将要滑动。然后累加器乘以1/(POOLING_WIDTH*POOLING_HEIGHT)以计算平均值,被取整并被写入到SRAM。一旦池化窗口滑动完,累加器被重置以重新开始平均。
例如,图2HA示出结合2×2平面池化执行的具有Z=2的之字形平面遍历,其中,IFM层以使得OFM值(在每个池化窗口中)被顺序地计算的方式被遍历。由于ARU的输出一个接一个地生成各自的四个OFM值(计算每个池化所必需),因此ARU池化逻辑196可取四个连续结果之中的最大值,以便计算最大池化。图2HB示出具有Z=3的之字形平面遍历和3×3平面池化。由于Z值等于池化核高度,因此以之字形方式遍历IFM层自然导致以适合于最大和平均轮询的顺序生成每个池化窗口内的OFM数据。图2HC提供Z=H=4的额外说明,其中,H表示池化核的高度。
图2HD示出当Z值与池化核的高度不匹配使得Z=4并且池化核的高度为2时的情况。在这种情况下,池化逻辑196可将池化细分为两个区域(如所示,上2×2和下2×2),并且使用附加寄存器来临时存储来自两个池化区域中的一个(图2HD中的下2×2)的未完成结果。更一般地,之字形池化窗口高度可以是之字形的遍历高度的自然倍数。合理的数字可包括2、3和4。如先前所述,之字形池化垂直步幅应等于之字形遍历高度,这将运行中的池化限制为仅这样的情况。然而,只要输出池化逻辑196具有池化逻辑的足够副本,池化窗口就可水平重叠,池化逻辑的副本均并行处理所有这样的水平重叠池化窗口的相应的水平重叠池化窗口。之字形池化窗口宽度和步幅通常可以是任意的,合理的池化窗口宽度数字包括例如2、3和4。
在池化窗口垂直重叠因此使得运行中的池化有问题的情况下,和/或在需要定制池化(除了最大池化和平均池化之外)的情况下,可通过以下来完成池化:(i)将读取-修改-写入逻辑放置在SRAM存储体(未在当前发明中公开)附近和/或(ii)通过AXI接口将SRAM读出到外部CPU、GPU、DSP或其它类型的计算核,执行池化并通过AXI将结果写回到NPU SRAM。注意,SRAM存储体附近的定制读取-修改-写入逻辑也可被重新使用以高效地添加部分结果,而不需要将部分结果发送回区块。
为了配置神经处理器100以执行特定操作(例如,卷积或全连接层计算),应考虑IFM和OFM张量大小,并且结合操作的参数(例如,操作类型、步幅等)将计算“映射”到可用硬件上。每一个体区块可仅具有固定数量的16个IFM深度通道输入和8个OFM深度通道输出,而深度学习神经网络模型层中的深度通道的数量变化并且通常远超过16和8。“映射算法”(在与运行时间相反的编译时间期间)离线运行,以将这些大的IFM和OFM张量细分成部分(子张量),将这些部分分配给可用区块用于计算,并且产生来自可用区块的输出如何将被重新组装(re-assemble)以完成计算的描述(配置)。如以下将更详细地解释,映射算法还确定平面方向和特别是深度方向二者的IFM(以及相应地OFM)张量遍历的顺序。由于对于特定映射问题(即,对于给定IFM、OFM和权重张量大小以及操作参数)可存在多个解,因此映射算法还可接受指示是否针对最低功率、最低SRAM大小、最低计算延迟(通过最大化乘法器利用率来实现)或这些的组合(例如,给定可用固定SRAM大小的最低功率)对解进行优化的参数。
随着我们从琐碎的情况发展到越来越高级的情况,可从一组示例中理解一些实施例的映射操作的方面。由于激活跳过在很大程度上不影响映射,因此为了解释清楚,让我们忽略与零激活跳过相关联的特征,并且假设每个OFM列仅具有一个加法器树和累加器(即,该计算是“密集的”)。由于进行高速缓存在很大程度上不影响映射,因此让我们还忽略包括之字形平面平移方法的高速缓存,并且假设卷积窗口以光栅(raster)方式移动(平面方向滑动)。在图3AA至图3AK中示出的第一示例中,使用单个区块来计算3×3×16×8卷积。图3AA示出区块接受具有16个深度通道的IFM(一个IFM切片)作为输入并且产生具有8个深度通道的OFM(一个OFM切片)。如图3AB中所示,IFM张量304的大小是64×64×16,OFM张量的大小是64×64×8,权重张量的大小是3×3×16×8。
最初,如图3AC中所示,将权重从SRAM预加载到MU权重寄存器堆127中。权重核302的大小是3×3×16×8。具有3×3的平面大小的权重核具有3*3=9个平面“位置”,其在图3AC中被标记为A至I。每个平面位置与用于计算与一个OFM通道的16长IFM值向量的点积的16长权重向量相关联。如图3AC中所示,由于存在8个OFM通道,因此权重核可被认为对于每个OFM通道具有一个3D张量。
具体地,可如下将权重加载到MU权重寄存器堆127中。整个MR阵列122中的多个MU权重寄存器堆可被认为是具有维度18×16×8(每MU 18个权重,16个MU行和8个MU列)的张量,这多于足以保持大小为3×3×16×8的整个权重核。18×16×8的权重寄存器堆张量大小也可被重写为(3×3)×16×8,其中,在行R、列C处的每个MU权重寄存器堆存储权重张量W×H×R×C中的3×3=9个平面位置(x,y)的所有9个权重,其中,W和H是权重核平面宽度和高度(即,W=3,H=3)。例如,参照图3AC,行0、列0中的权重寄存器堆存储权重{A0[0],B0[0],C0[0],D0[0],E0[0],F0[0],G0[0],H0[0],I0[0]},其中,符号是“A…I”,随后是OFM列“0…7”和IFM行“[0…15]”。对应地,行15、列0中的权重寄存器堆存储权重{A0[15],B0[15],C0[15],D0[15],E0[15],F0[15],G0[15],H0[15],I0[15]}。行15、列7中的权重寄存器堆存储权重{A7[15],B7[15],C7[15],D7[15],E7[15],F7[15],G7[15],H7[15],I7[15]}等等。由于区块(使用逐列加法器树)“垂直地”计算点积,因此可看出,描述的加载权重的顺序允许在每个平面位置A…I处计算IFM输入的点积。
参照图3AD,卷积窗口随后可被定位在开始位置,八个累加器(如前所述,为了映射解释清楚,对于8个OFM通道中的每个存在一个累加器)可被清除。
参照图3AE,区块随后可从SRAM读取IFM a[0..15](其中,a...z表示IFM的平面位置,0..15表示IFM深度通道),并且将这些值广播到区块的8个列。第一列可将a[0..15]逐元素地与预加载的权重A0[0]...A0[15]相乘,第二列可将a[0..15]逐元素地与预加载的权重A1[0]...A1[15]相乘,等等。结果乘积可(使用每列的加法器树)被垂直求和(归约),并且被添加到累加器。由于(3*3=9个中的)另外8个平面位置有待处理以在单个位置处完成3×3卷积,因此结果点积仍不是最终结果。
参照图3AF,区块随后可从SRAM读取IFM b[0..15],并且将这些值广播到区块的8个列。第一列可将b[0..15]逐元素地与预加载的权重B0[0]...B0[15]相乘,第二列可将b[0..15]逐元素地与预加载的权重B1[0]...B1[15]相乘,等等。结果乘积可被垂直求和,并且被添加到累加器。参照图3AG,区块随后可从SRAM读取IFM c[0..15],并且将这些值广播到区块的8个列。第一列可将c[0..15]逐元素地与预加载的权重C0[0]....C0[15]相乘,第二列可将c[0..15]逐元素地与预加载的权重C1[0]...C1[15]相乘,等等。结果乘积可被垂直求和,并且被添加到累加器。
参照图3AH,区块随后可从SRAM读取IFM g[0..15],并且将这些值广播到区块的8个列。第一列可将g[0..15]逐元素地与预加载的权重D0[0]...D0[15]相乘,第二列可将g[0..15]逐元素地与预加载的权重D1[0]....D1[15]相乘,等等。结果乘积可被垂直求和,并且被添加到累加器。参照图3AI,区块随后可从SRAM读取IFM h[0..15],并且将这些值广播到区块的8个列。第一列可将h[0..15]逐元素地与预加载的权重E0[0]...E0[15]相乘,第二列可将h[0..15]逐元素地与预加载的权重E1[0]...C1[15]相乘,等等。结果乘积可被垂直求和,并且被添加到累加器。
参照图3AJ,可针对核的九个位置(标记为a至o)中的剩余位置执行类似的操作。存储在累加器中的值随后可被取整,以形成8位输出OFM,并且所有的8个OFM结果可被写入SRAM。这样就完成一次卷积的计算。如图3AK中所示,然后可将卷积窗口平面方向平移一列,并且可重复操作。
在图3BA至图3BC中示出的第二示例中,使用单个区块来计算3×3×16×128卷积。如前所述,为了方便,如图3BA中所示,术语“IFM切片”可被定义为表示16个IFM深度通道(IFM读取(和区块输入)的单位),术语“OFM切片”可被定义为表示8个OFM深度通道(OFM区块输出的单位)。如图3BB中所示,以矩形示出操作映射可能是方便的,其中,矩形的高度对应于IFM通道的数量,矩形的宽度表示OFM通道的数量。3×3×16×128卷积可通过将卷积拆分成16个3×3×16×8卷积来完成,使得执行3×3×16×8卷积的先前示例可被重复16次。在第一步骤中,可计算OFM[0..7]的3×3×16×8卷积。在第二步骤中,可计算OFM[8..15]的3×3×16×8卷积,等等,直到在第十六步骤中,可计算OFM[120..127]的3×3×16×8卷积。对OFM通道的下一子集的处理可被称为“对OFM进行步进(step)”。十六个步骤可对应于十六个矩形,十六个矩形中的第一个、第二个和第十六个在图3BC中示出,并且从图3BB和图3BC中可看出,当十六个步骤完成时,3×3×16×128卷积已被计算。
假设地,可通过简单地将OFM拆分成足够小的块来以这种方式处理无限数量的OFM通道。每次系统“对OFM进行步进”时,IFM被完全重新读取(在这个示例中,十六次)。(整个)IFM的每次读取可被称为“IFM遍次(IFM pass)”,并且每次这样的IFM遍次可消耗相当大量的能量(或功率,如果操作被重复地执行)。减少功耗通常是高度期望的,特别是对于电池供电的装置(诸如,移动智能电话)。下一个示例示出用于避免这个能量成本中的一些的方法。
在图3CA和3CB中示出的第三示例中,这次使用十六个区块(与一个区块相反)来计算3×3×16×128卷积。每个区块具有16*8=128个乘法器,因此16个区块总共具有128*16=2048个乘法器。IFM[0..15]可被广播到所有16个区块,使得区块1将计算OFM[0..7],区块2将计算OFM[8..15],等等,区块16将计算OFM[120..127]。注意,如在此使用的,IFM“广播”表示将IFM同时输入到一些MR区块102,这与区块102的描述相反,在区块102的描述中,广播表示将ABU输出输入到具有单个区块的所有MU列。
神经处理器100具有多个SRAM存储体组109(图1A和图3AC)。这样,参照图3CB,输入IFM[0..15]可从SRAM存储体组0被输入。区块1的输出(OFM[0..7])可与区块2的输出(OFM[8..15])级联(concatenate)到16-通道OFM[0..15]中,并且被保存到SRAM存储体组1中。类似地,区块2的输出可与区块3的输出级联并被保存到SRAM存储体组2,等等,区块15的输出与区块16的输出级联并被保存到SRAM存储体组8。可看出,在这个第三示例中,作为使用IFM广播的结果,在单个“遍次”(即,读取整个IFM一次)中计算所有OFM,并且因为IFM仅被读取一次,所以避免了在第二示例中通过执行多次IFM遍次而引起的大部分能耗。
在图3DA中示出的第四示例中,使用十六个区块来计算3×3×16×256卷积。16个区块可仅能够在单次遍次中生成多达16*8=128个OFM通道,在这个示例中,256个OFM通道将被生成。因此可运行两个OFM步骤,第一步骤用于计算OFM[0..127],第二步骤用于计算OFM[128..255]。可使用两次IFM遍次(完全读取IFM两次)。在图3DA中示出在两个步骤中形成OFM。
在图3EA和图3EB中示出的第五示例中,使用十六个区块来计算3×3×32×64卷积。与具有16个IFM通道的前述示例不同,这个示例涉及32个IFM通道。可同时从SRAM读取所有32个IFM通道(2个切片)。神经处理器可具有一些SRAM存储体组。每个存储体组(在映射示例中)可每时钟周期流式传输1个切片。这样,为了同时读取(流式传输)2个切片(32个IFM通道),可使用两个存储体组,两个存储体组中的第一存储体组可流式传输IFM[0..15],第二存储体组可流式传输IFM[16..31]。
参照图3EB,OFM[0..7]的计算可跨区块1和区块9进行拆分。区块1可将IFM[0..15]归约(添加)为未完成的OFM[0..7]。区块2可将IFM[16..31]归约为未完成的OFM[0..7]。然后可通过将区块1和区块2的输出相加(并且应用偏置、激活函数等)来完成OFM[0..7]的计算。为了执行这个加法,区块1和区块2的加法器树可使用多于一个的附加硬件加法器级被“连接”。归约结构111提供这样的附加硬件加法器级。类似的操作可用于OFM[8..15](添加区块2和区块10),…OFM[56..63](添加区块8和区块16)。参照图3EB,在这个示例中,不存在从区块1..8到SRAM的输出。如之后将详细解释,仅区块9..16将OFM保存到SRAM。
在图3FA至图3FC中示出的第六示例中,使用十六个区块来计算3×3×32×512卷积。参照图3FA,如在第五示例中,可从两个SRAM存储体读取两个IFM切片(IFM[0..31]),并且可将两个IFM切片中的每个广播到8个区块。两个这样的8个区块的组一起可计算OFM[0..63],并且结果可被保存到4个SRAM存储体组。参照图3FB,每IFM遍次可计算64个OFM(即,可读取整个IFM以计算64个OFM)。这样,以与第四示例的方式类似的方式,可在8个IFM遍次(并且,相等地,8个OFM“步骤”)中计算512个OFM。可在第一IFM遍次期间计算OFM[0..63],可在第二IFM遍次期间计算OFM[64..127],等等,在第八IFM遍次期间计算OFM[448..511]。在这个示例中,“2个IFM切片与64个OFM切片”运算已经被拆分成8个OFM步骤。每个OFM步骤对“2个OFM切片与8个OFM切片”进行卷积。参照图3FC,在一些实施例中,虚拟SRAM存储体可用于处理SRAM存储体(可具有约32kB的容量)用光IFM数据或者用OFM数据填充的情况。
在这样的情况下,神经处理器的数据结构可透明地(对于接收IFM流的区块)切换,以连接另一SRAM存储体组。如前所述,IFM和OFM张量可能太大而不能被存储在单个SRAM存储体组109中,因此可需要被拆分成多个子张量,每个子张量足够小以适合SRAM存储体组109用于存储。全局控制逻辑140包含说明IFM和OFM张量如何被拆分并被存储在SRAM存储体组中的配置寄存器,配置寄存器包括IFM和OFM子张量索引、大小、存储每个子张量的SRAM存储体组的索引、以及每个子张量被存储在相关联的SRAM存储体组内的地址。
随着计算进行并且IFM(OFM)遍历从存储在一个SRAM存储体组109中的子张量移动到存储在另一SRAM存储体组109中的另一子张量,全局控制FSM 140精心安排IFM传送结构和OFM传送结构的运行重新配置,将IFM源(和OFM目的地)SRAM存储体组从当前的SRAM存储体组切换到下一SRAM存储体组。在一些实施例中,以对消耗IFM的区块(和生成输出的区块)透明并在总线切换期间不停止或减慢计算的方式来完成重新配置。
如前所述,被称为“映射器”的软件块可静态地(在编译时)决定如何跨SRAM存储体组和物理SRAM存储体划分整个IFM和OFM存储,以及权重核存储和部分结果。如图3FC中所示,为了映射解释的清楚,让我们忽略跨多个SRAM存储体组的物理IFM和OFM存储的细节,并且认为SRAM存储体组是IFM和OFM中的“虚拟”或“逻辑”视图306。
在图3GA至图3GD中示出的第七示例中,使用十六个区块来计算3×3×32×512卷积。在这个示例中,使用较少的IFM遍次来计算与第六示例中相同的卷积以节省能量。参照图3GA,每个乘法器单元权重寄存器堆127可具有18个权重,18个权重中的仅9个权重在第六示例中用于3×3卷积。这样,两组3×3权重可被存储(与一组相反),并且通过随时间被“循环”。具体地,3×3×32×512卷积可被拆分成在时间上交织的两个3×3×16×512卷积。参照图3GB,以与第三示例的方式类似的方式,3×3×16×512卷积可被映射到16个物理区块。对于每个IFM遍次,一个IFM切片可(从SRAM存储体组)被读取并被广播到16个物理区块,16个物理区块将128个OFM通道输出(到8个SRAM存储体组)。在这个示例中,花费四个IFM遍次(和四个OFM步骤)以完成OFM计算。
参照图3GC,在一些实施例中,在第一步骤中,可将IFM[0..15]输入以计算OFM位置(x,y)处的OFM[0..127]的卷积,但是可将OFM结果保持在累加器中,而不是将结果写入SRAM。参照图3GD,在第二步骤中,每个乘法器单元权重寄存器堆127随后可切换到第二组3×3权重并输入IFM[16..31]以完成计算OFM[0..127]。这个处理可被称为“IFM权重循环”。然后,在第三步骤中,可将OFM[0..127]保存到SRAM,并且可清除累加器。可重复这三个步骤,直到计算完成。
参照图3GA,在一些实施例中,逻辑区块可被定义为存储多组权重的物理区块。可看出,在本示例(第七示例)中,两组16个这样的逻辑区块(在时间上交错)(即,32个逻辑区块)通过存储两个3×3权重组来形成。在第七示例中,32个逻辑区块可在每个IFM遍次中物理地计算更多(例如,更宽)的OFM,使得IFM遍次的数量(和SRAM IFM读取能量)与第六示例相比被减少两倍。
在图3HA至图3HC中示出的第八示例中,首先使用十六个物理区块来计算3×3×512×256卷积。注意,这个示例中的IFM和OFM通道的数量(分别为512和256)两者相当大。如以下进一步详细讨论,当卷积核太大而不能以其它方式计算时,部分结果或“部分(partial)”可被使用。然而,这个示例示出如何在不使用部分的情况下仍可执行具有大权重核的卷积。可如图3HB中所示计算3×3×512×256卷积。对于3×3 8位卷积,2组3×3 8位权重可被存储到每个乘法器单元中,使得存在(2组权重)*(16个物理块)=32个逻辑区块。32个逻辑区块可归约32个IFM切片,使得可在不使用部分的情况下被处理的IFM通道的最大数量为(32个切片)*(每切片16个IFM通道)=512个IFM通道。这样,可在不使用部分的情况下计算3×3×512×N卷积,其中,N是任何正整数。
参照图3HB和3HC,可使用与归约结构组合的区块加法器树来归约每时钟256个IFM通道。为了归约所有512个IFM通道(并且生成8个OFM通道),让我们执行两个权重循环。在权重循环1中,如图3HB中所示,IFM[0...15]可被输入到区块1,IFM[16..31]可被输入到区块2,等等,IFM[240..255]可被输入到区块16。可使用由归约结构提供的硬件加法器级在所有16个区块(每个列)上连接硬件树。加法器树根可在区块16处结束(如之后详细讨论,在归约结构、OFM传送结构和加法器树的上下文中),使得仅区块16生成结果,而在这个配置中,区块1...15的累加器不被使用。在图3HC中示出的权重循环2中,IFM[256...271]可被输入到区块1,IFM[272...287]可被输入到区块2,等等,IFM[496...511]可被输入到区块16。区块16随后可将完成的OFM[0..7](x,y)结果写入到SRAM存储体16。最后,32个IFM遍次(32个OFM步骤)可被执行以计算OFM[0...7],然后OFM[8..15],等等,至OFM[248..255]。注意,虽然IFM遍次和OFM步骤数在这个特定示例中相同,但是IFM遍次与OFM步骤之间的差异将在之后的示例中变得更清楚。
图3HD另外示出如何简单地通过执行64个IFM遍次(64个OFM步骤)而不是32个IFM遍次(32个OFM步骤)来将在图3HA至图3HC中示出的3×3×512×256卷积改变为3×3×512×512卷积。
在图3IA至图3IF中示出的第九示例中,使用16个区块并使用部分结果来计算3×3×512×256卷积。在一些情况下,使用部分可通过减少SRAM读取的数量(与例如第八示例相比)来使能量节省成为可能。当使用部分时,映射算法可将权重张量分割成一些部,具体地,深度通道方向,将单个卷积运算(包括加载权重张量、遍历IFM、写入OFM)转换为两个或更多个。这两个或更多个结果卷积的输出之后被组合以产生最终结果。
首先,让我们回想图3HB至图3HC示出在没有部分的情况下计算的3×3×512×256卷积。图3IA至图3IB和图3IC至图3ID示出在权重张量(和对应的IFM和OFM)512个IFM通道被分割成与两个单独的卷积对应的256和256之后相关联的硬件资源映射,每个卷积的大小是3×3×256×256。
图3IA至3IB示出两个3×3×256×256卷积中的第一个。因为权重核平面大小是3×3=9,所以能够保持18个8位权重的每个MU权重寄存器堆具有足够的容量以存储两组3×3权重,因此使得32个逻辑区块可用于计算。
八个IFM切片随后可被加载。每个IFM切片随后可被广播到2个物理区块。16个OFM步骤(16个IFM遍次)可被执行。在第一权重循环期间,如图3IA中所示,3×3IFM[0..127]可被输入,与第一组3×3权重进行卷积,使用加法器树进行归约,并且在区块8和16的累加器寄存器中累加。参照图3IB,在第二权重循环期间,3×3IFM[128..255]可被输入,与第二组3×3权重进行卷积,使用加法器树进行归约,并且进一步在区块8和16中的累加器寄存器中累加。此时,3×3IFM[0..255]与对应的3×3×256×16权重核的卷积针对OFM通道0...15被完成,并且可作为部分结果被写入虚拟SRAM存储体组8和9。由于这是部分结果,因此与完成的结果相反,累加器130值在它们通向SRAM的路上绕过激活函数模块197。可选地,为了减少SRAM大小需求和功耗,位范围选择模块187可通过取整归约部分结果位宽,例如,当使用8位激活和权重时向下归约到4字节,或者当使用16位激活和权重时向下归约到6字节。
以上步骤被重复,直到在IFM[0...255]上的一次通过中整个IFM[0...255](即,针对所有期望的平面(x,y)位置)已被处理,并且导致针对OFM[0...15]计算的对应组的部分结果。剩余OFM通道[16...255]的部分结果通过在IFM[0...255]上执行另外15个遍次(与另外15个OFM步骤对应)来计算。
注意,在这个映射示例中,两个部分遍次的使用允许将在一个遍次中物理地且同时地生成的OFM加宽(扩展)两倍(从一个OFM切片到两个OFM切片)。此外,在每个部分遍次期间处理的IFM张量的大小被缩短两倍(从H×W×512到H×W×256)。
如分别在图3IC和3ID中所示,除了IFM[256..383]可在第一权重循环期间被输入并且IFM[384..511]可在第二权重循环期间被输入,第二部分IFM遍次可与第一部分IFM遍次相同。
类似于ARU,完成原始的3×3×512×256卷积需要添加部分结果(来自两个3×3×256×256卷积,逐元素地)并且应用缩放、偏置和激活函数。可存在一些方式来完成这个最终步骤,包括:(i)读取由第一部分卷积生成的部分结果,通过IFM传送结构将部分发送到区块ARU以与第二组的部分结果逐元素求和,使得ARU将在第二部分卷积期间生成最终结果;(ii)在两个部分卷积期间具有ARU输出的部分结果,同时在SRAM存储体组中具有执行读取-修改-写入以添加部分并应用激活函数的附加逻辑。更具体地,用于完成部分的附加逻辑将在第二部分卷积期间接收部分结果,从SRAM读取第一部分卷积的结果,对这些结果求和并且在运行中应用激活函数并将最终结果写回到SRAM;(iii)在SRAM存储体组中具有能够对部分进行读取-添加-写入操作的附加逻辑,以便在不应用激活函数的情况下继续逐元素地对来自两个或更多个部分操作的部分结果相加,随后通过读取部分结果并将部分结果发送到区块ARU,以在最终部分操作取整期间被完成。
与不使用部分的情况不同,当使用部分时,可在布置卷积运算时需要考虑OFM高度和宽度。参照图3IE,可使用四个字节来存储每个部分结果(假设IFM和OFM二者是8位)。在这种情况下,部分结果的SRAM存储大小等于(OFM高度)*(OFM宽度)*(OFM深度)*(4字节)。如所示,如果SRAM(片上)存储容量不足以用于部分结果,则OFM数据可被划分成子窗口,并且一次一个地被处理。然而,每次处理子窗口时,可能需要加载(或重新加载)整个组的核权重,这可能增加能耗。例如,让我们假设OFM平面尺寸被设置为10×10,IFM平面尺寸被设置为等于OFM平面尺寸。在这种情况下,核权重大小相对较大,为3*3*512*256=1.2兆字节。存储整个部分结果(针对整体IFM平面大小,而不将其细分成平面子窗口)的SRAM大小是10*10*256*4=102400字节。为了简单起见,让我们进一步假设SRAM具有充足容量,使得不需要使用子窗口。
图3IF总结了在这个示例中计算卷积的处理,由此计算并保存IFM[0..255]和所有OFM部分[0..255]的部分的第一组,计算(但不写入SRAM,因为这是最后的部分轮次)IFM[0..255]和所有OFM[0..255]的部分的第二组,并且在正计算第二部分卷积时逐元素地对部分进行相加、在运行中应用激活函数并将其写入SRAM。
如前所述,使用MR区块来逐元素地对部分进行相加并且应用激活函数是可选的。代替地,可使用专用于逐元素和平面(没有跨通道的归约)运算的辅助平面和激活处理(Au×iliary Planar and Activation Processing,APAP)单元。这些单元可位于SRAM存储体组内部,具有访问本地存储在SRAM中的部分、以及到达SRAM存储体组的部分。APAP单元随后将完成的结果写入SRAM。
根据这个第九示例执行的计算可通过执行两次遍次来节省大量的能量。由于IFM遍次的数量从32减少到16,因此读取的IFM数据量是(IFM高度)*(IFM宽度)*(IFM通道)*(IFM遍次)=10*10*512*(32-16)=819200字节(忽略高速缓存),写入SRAM的部分数据的量是(OFM高度)*(OFM宽度)*(OFM通道)*(部分卷积数-1)*(4字节)=10*10*256*(2-1)*4=102400字节。换句话说,如果第二部分遍次将结果保存到SRAM而不是直接将结果输入到平面/激活单元,则将导致两倍于该量。此外,从SRAM读取的部分数据的量是(OFM高度)*(OFM宽度)*(部分卷积数-1)*(4字节)=10*10*256*(2-1)*4=102400字节。换句话说,如果第二部分遍次将结果保存到SRAM9而不是直接将结果输入到平面/激活单元,则将导致两倍于该量。这样,在我们的示例中使用部分对比不使用部分执行3×3×512×256(8位)卷积导致从SRAM读取的819000个较少的IFM字节,同时引起附加的102400个字节来将部分写入SRAM并且另外的102400个字节来从SRAM读取部分。
假设一次SRAM写入的能量约为一次SRAM读取的能量的两倍,则总节省的SRAM能量等于819000-2*102400-102400=511800*(每次SRAM读取的能量)。
在图3JA至图3JD中示出的第十示例中,使用四个区块来计算8×8×16×64卷积。8×8卷积具有8*8=64个权重,这可能不适合单个乘法器单元,单个乘法器单元可存储例如仅18个权重。因此,如图3JA中所示,64个权重可在四个区块之中被划分,使得区块1存储W[0..1,0..7,*,*]、区块2存储W[2..3,0..7,*,*]、区块3存储W[4..5,0..7,*,*]、区块4存储W[6..7,0..7,*,*],其中,权重核符号是W[行,列,IFM通道,OFM通道],“*”表示整个适用范围。系统随后可跨区块相加(归约)以计算OFM[0..7],使得每个区块有效地执行2×8×16×64卷积以及使用四个区块同时执行的四个2×8×16×64卷积,四个2×8×16×64卷积被聚合成一个8×8×16×64卷积。每个2×8×16×64卷积还包括使用IFM权重循环组合在一起的两个1×8×16×64卷积。
图3JB示出IFM权重循环的第一步骤,其中,卷积窗口内的偶数(还没有奇数)行被卷积。这里,区块1将卷积窗口的行0W[0,*,*,*]与IFM值“a0,b0,c0,d0,e0,f0,g0,h0”进行卷积,而区块2将卷积窗口的行2W[2,*,*,*]与IFM值“a2,b2,c2,d2,e2,f2,g2,h2”进行卷积,区块3将卷积窗口的行4W[4,*,*,*]与IFM值“a4,b4,c4,d4,e4,f4,g4,h4”进行卷积,区块4将卷积窗口的行6W[6,*,*,*]与IFM值“a6,b6,c6,d6,e6,f6,g6,h6”进行卷积。乘法器单元乘积使用区块内的区块加法器树以及使用由归约结构提供的附加加法器树级来归约,以及在区块4的累加器寄存器130中被累加(作为IFM值“a*,b*,...h*”在IFM传送结构上流式传输到四个区块)。
图3JC示出IFM权重循环的第二步骤,其中,卷积窗口内的奇数行被卷积。这里,区块1将卷积窗口的行1W[1,*,*,*]与IFM值“a1,b1,c1,d1,e1,f1,g1,h1”进行卷积,而区块2将卷积窗口的行3W[3,*,*,*]与IFM值“a3,b3,c3,d3,e3,f3,g3,h3”进行卷积,区块3将卷积窗口的行5W[5,*,*,*]与IFM值“a5,b5,c5,d5,e5,f5,g5,h5”进行卷积,区块4将卷积窗口的行7W[7,*,*,*]与IFM值“a7,b7,c7,d7,e7,f7,g7,h7”进行卷积。类似于第一IFM权重循环步骤,乘法器单元乘积使用区块内的区块加法器树以及使用由归约结构提供的附加加法器树级来归约,并且在区块4的累加器寄存器130中被累加(作为IFM值“a*,b*,...h*”在IFM传送结构上流式传输到四个区块)。然而,与在第一IFM权重循环步骤期间不同,累加器寄存器130在第二IFM权重循环步骤开始时不被清除,使得一旦两个IFM权重循环步骤完成,累加器寄存器130包含偶数行和奇数行两者的点积。
作为结果的OFM[0...7]随后可被写入SRAM,完成针对一个OFM位置的8×8×16×8窗口的卷积。如图3JD中所示,为了继续计算,卷积窗口随后可被平移以计算下一8×8卷积,并且处理可被重复直到整个OFM完成。
在图3KA和图3KB中示出的第十一示例中,使用十六个区块来计算8×8×64×64卷积。8×8卷积可被应用于16个区块,并且更多的IFM和OFM通道可被使用。如图3KA中所示,在四个物理区块上拆分8×8卷积,使得“逻辑”区块的数量减少四倍,例如,(16个物理区块)/(每次运算4个物理区块)=4个逻辑区块。如在此使用,物理区块的“物理分组(physicalgrouping)”通过将区块加法器树连接到单个加法器树(每列)以执行对于单个物理区块而言太大的操作来定义。
参照图3KA,因为8×8卷积可能太大而不适合单个区块,所以8×8卷积可被拆分为四个区块。通过将来自四个区块的加法器树连接到单个加法器树,四个区块可在物理上被分组为一个逻辑区块。参照图3KB,将8×8×64×64映射到16个物理区块在逻辑上变换为将8×8×64×64映射到4个逻辑区块,其中,每个逻辑区块具有18*4=72个权重,足以适合8×8=64个卷积权重。
图3KB示出将8×8×64×64卷积运算映射到4个逻辑(因此16个物理)区块。变换的操作可如下执行。第一,可读取四个IFM切片;可立即读取所有IFM通道以避免部分。第二,可将每个IFM切片“广播”到一个逻辑区块。第三,可在一个IFM遍次中计算8个OFM(一个OFM切片)。这可被重复,使得(64个OFM)/(每遍次8个OFM)=8个OFM遍次(8个OFM步骤)可被执行以计算所有OFM通道。
在一些情况下,可能需要更多的OFM通道,例如,以计算8×8×64×1024卷积。通过添加执行更多IFM遍次以重新读取IFM的更多OFM步骤,使这在不使用部分的情况下可行。在一些情况下,可能需要更多的IFM通道,例如,以计算8×8×128×64卷积。在这样的情况下,可能需要使用部分,除非(i)增加物理区块的数量,或者(ii)增加每乘法器的权重的数量。然而,在一些应用中,像8×8的大尺寸卷积可仅应用于RGB图像或具有少量IFM通道的图像。保持N个权重的MU权重寄存器堆可容纳多达H*W≤N的卷积核,其中,H和W表示权重核的平面高度和宽度。例如,具有18个8位权重容量的MU可保持包括4×4、5×3、3×5、6×2、2×6、7×2、2×7、8×2、2×8、9×2、2×9、18×1以及1×18的卷积核。在实践中,计算8×8×128×64卷积的需要可能稀少,因此可由CPU而不是神经处理器来执行,从而使相关联的神经处理器附加硬件逻辑可选。为了清楚的目的,IFM、OFM和归约结构描述将省略H*W>N情况所需的连接(诸如,在这个示例中描述的连接)。
在图3LA至图3LD中示出的第十二示例中,使用十六个区块来计算1×1×1024×64卷积。每个MU可具有18个权重。由于1×1卷积仅需要1×1=1个权重,因此可将(每个乘法器18个权重)/(每个卷积窗口1个权重)=18组1×1卷积权重适配到每个区块中。逻辑区块的数量可被计算为(16个物理区块)*(每个乘法器18个卷积权重组)=288个逻辑区块。使用16个物理区块的1×1×1024×16卷积的计算可被变换为使用288个逻辑区块的1×1×1024×16卷积的计算。所有(1024个)IFM通道可在一次IFM遍次中被读取以避免部分。用288个逻辑块,可接受多达(每个IFM切片16个IFM通道)*(288个逻辑块)=4608个通道的大小的IFM。1×1×1024×64卷积在不使用部分的情况下仅需要可用的4,608个IFM通道中的1024个IFM通道。因此,每次IFM遍次可计算的OFM切片的数量是地面((最大4608个IFM通道)/(1024个IFM通道))=4个OFM切片。
可以如下执行计算。第一,可在每个MU中存储16组1×1权重。在每个OFM步骤(IFM遍次)期间,可读取64个切片(所有1024个IFM通道)。物理上,这对应于每次读取(64个IFM切片)/(每MU 16组1×1权重)=4个IFM切片。可将四个IFM切片中的每个广播到(16个物理区块)/(4个IFM切片)=4个区块,以在一个OFM步骤(和一个IFM遍次)中计算4个OFM切片。可使用(8个OFM切片)/(在4个区块上广播)=2个OFM步骤(和2个IFM遍次)来计算OFM。可将IFM权重循环16次。
具体地,参照图3LA,卷积的计算可沿着下面的步骤进行。在第一步骤中,清除累加器。在第二步骤中,获取IFM[0..15]、IFM[16..31]、IFM[32..47]以及IFM[48..63]并将IFM[0..15]、IFM[16..31]、IFM[32..47]以及IFM[48..63]分别广播到区块1、5、9和13、区块2、6、10和14、区块3、7、11和15以及区块4、8、12和16。在第三步骤中,系统将作为中间(未完成)结果的由区块1..4与OFM[0..7]、区块5..8与OFM[8..15]、区块9..12与OFM[16..23]以及区块13..16与OFM[24..31]计算的点积分别累加为区块4、8、12和16的累加器寄存器中。
参照图3LB,在第四步骤中,不清除累加器,并且将MU切换为使用与IFM权重循环中的步骤对应的下一组1×1权重。在第五步骤中,获取IFM[64..79]、IFM[80..95]、IFM[96..111]以及IFM[112..127]并将IFM[64..79]、IFM[80..95]、IFM[96..111]以及IFM[112..127]分别广播到区块1、5、9和13、区块2、6、10和14、区块3、7、11和15以及区块4、8、12和16。在第十二步骤中,系统将作为中间(未完成)结果的由区块1..4与OFM[0..7]、区块5..8与OFM[8..15]、区块9..12与OFM[16..23]以及区块13..16与OFM[24..31]计算的点积分别累加区块4、8、12和16的累加器寄存器中。
参照图3LC,计算可进行,继续循环IFM权重(总共16个IFM权重循环步骤)、获取并广播IFM、计算并累加点积,直到到达最后的IFM切片(通道960至通道1023)。在这个步骤,不清除累加器,并且将MU切换到与IFM权重循环中的最后步骤对应的下一(最后第16)组1×1权重。在下一步骤中,获取IFM[960..975]、IFM[976..991]、IFM[992..1007]以及IFM[1008..1023]并将IFM[960..975]、IFM[976..991]、IFM[992..1007]以及IFM[1008..1023]分别广播到区块1、5、9和13、区块2、6、10和14、区块3、7、11和15以及区块4、8、12和16。在下一步骤中,系统将由区块1..4与OFM[0..7]、区块5..8与OFM[8..15]、区块9..12与OFM[16..23]以及区块13..16与OFM[24..31]计算的点积分别累加到区块4、8、12和16的累加器寄存器中以获得最终的点积结果。在下一步骤中,将激活应用于在区块4、8、12和16的累加器寄存器中累加的点积结果,并且将四个作为结果的OFM切片写入SRAM。这样就完成了OFM[0..31]的计算。
参照图3LD,系统随后进行到下一OFM步骤(通过执行另一IFM遍次)并重复计算,这次针对OFM[32..63]。系统加载用于下一OFM步骤的权重的切片:W[0,0,0..1023,32..63]。如图1K和图1N中所示,权重加载可与使用垂直权重加载总线101的计算同时发生,在这样的情况下,不存在由权重加载处理引起的附加延迟。系统可清除累加器,并且将MU切换到第一组1×1权重。系统随后可重复如在图3LA至图3LC的上下文中所述的操作,以计算OFM[32..63]。
如图3LD中所示(类似于图3LC的情况),一旦系统已经经过16个IFM权重循环中的15个、已经获取对应的IFM切片、计算并累加中间点积结果,则系统到达IFM权重循环的最后(第16)轮次。在这个轮次中,不清除累加器,并且将MU切换到下一(最后的第16)组1×1权重(最后的,第16IFM权重循环步骤)。系统获取IFM[960..975]、IFM[976..991]、IFM[992..1007]以及IFM[1008..1023],并且分别广播到区块1、5、9和13、区块2、6、10和14、区块3、7、11和15以及区块4、8、12和16。接下来,系统累加由区块1..4与OFM[32..39]计算的点积,由区块5..8与OFM[40..47]、区块9..12与OFM[48..55]以及区块13..16与OFM[56..63]计算的点积。在这个处理结束时,系统将激活函数197(在区块4、8、12和16中)应用于存储在累加器130(在区块4、8、12和16中)中的完成的点积,并且将最终的OFM[32..63]结果写入SRAM以完成卷积运算。
现在让我们考虑全连接(FC)层计算(与卷积运算相反)。让我们首先考虑使用单个区块和单个IFM样本的16×8FC计算的琐碎的情况。注意,除了权重在与IFM相乘之后被丢弃,FC层计算类似于1×1卷积(在先前示例中描述)。单个16×8FC计算可通过将1个权重加载到每个MU中、获取单个IFM[0...15]切片、使用区块的加法器树计算点积、将激活函数应用于作为结果的点积、并且将完成的IFM[0...7]结果写入SRAM来完成。
考虑通过单个区块和单个IFM样本来计算16×16FC的情况。单个16×16FC计算可通过将2个权重加载到每个MU中、获取单个IFM[0...15]、使MU选择两个预加载的权重中的第一个用于乘法、如上所述的计算OFM[0...7]、使MU选择两个预加载的权重中的第二个用于乘法并计算OFM[8..15]来完成。通过MU权重进行循环以便从相同的IFM计算多个OFM的处理被称为“OFM权重循环”。
注意,16×16FC计算使用一个IFM遍次而不是两个OFM步骤(与两个OFM权重循环对应)来完成。因此,如在大多数其它示例中所观察到,除非使用OFM权重循环,否则OFM步骤的数量通常等于IFM遍次的数量。
考虑使用单个区块和单个IFM样本来计算16×128FC的另一简单情况。这可通过将16个权重加载到每个MU中、获取单个IFM切片、通过OFM权重循环(即,通过经由MU权重进行循环以一个接一个地计算OFM[0...7]、OFM[8..15]、...、OFM[120..127])执行16个OFM步骤来完成。
考虑使用用于一批18个IFM样本的单个区块来计算16×8FC的简单情况(即,IFM张量形状可被表示为1×16×18)。作为旁注,由于公开的神经处理器执行推断(不是训练),因此如典型的推断应用,映射示例已经隐含地假定IFM批量大小为1。IFM批大小大于一的计算也可被映射到硬件上。例如,对于IFM批中的每个样本,可如已经描述的那样重复计算。然而,对一批18个IFM样本的16×8FC单区块计算可利用MU权重寄存器堆容量来将18个权重预加载到每个MU中,每个IFM样本一个权重。随后,可通过获取(来自该批的18个中的)第一个IFM[0..15][0]样本、计算获取的IFM样本与每个MU中的18个权重中的第一个的点积、应用激活函数并将作为结果的OFM[0..7][0]写入SRAM来完成计算。接下来,获取IFM[0..15][1]样本并将其与每个MU中的18个权重中的第二个相乘,以在激活函数应用之后获得OFM[0..7][1]。这个步骤的顺序继续,直到整个批的IFM[0..15][0..17]样本(总共18个)已经被处理,导致一批的OFM[0..7][0..17]样本。让我们将在MU权重上进行循环以便处理一批的IFM样本称为“IFM批循环(IFM batch cycling)”。注意,只要MU权重寄存器堆容量足够,IFM权重循环、OFM循环和IFM批循环可被组合,以执行计算。
在图3MA和图3MB中示出的第十三示例中,使用单个区块来执行288×8全连接计算。参照图3MA,如前所述,全连接计算可类似于1×1卷积,其中,卷积窗口不被平移并且权重不被重复使用,并且必须在单次使用之后被丢弃。一个区块可并行地计算8个OFM通道(即,1个OFM切片)。288个IFM通道可对应于288/(每MR区块16行)=18个切片。系统可在每个MU中使用18个权重来存储FC权重的所有18个切片。
为了执行全连接计算,系统可执行下面的步骤(其可在一定程度上同时执行,即,它们可在时间上重叠)。在第一步骤中,可从SRAM加载权重。如图1K和1N中所示,可使用例如垂直权重加载总线101与计算同时地加载权重。这样,系统可确保FC权重被放置到SRAM中。在第二步骤中,可清除用于OFM[0..7]的累加器。在第三步骤中,可将IFM[0..15]的一个样本输入到区块中,并且可将结果添加到OFM[0..7]累加器130中以形成中间(未完成)结果。
在第四步骤中,可留下而不清除OFM[0..7]累加器,并且系统可切换到下一组FC权重(循环IFM权重)。在第五步骤中,可将IFM[16..31]输入到区块中,并且可将结果添加到OFM[0..7]累加器中。参照图3MB,在IFM[280..287]是最后的切片的情况下,可重复这些步骤,直到所有IFM通道(和相关联的权重)已经被循环通过为止。最后,可将激活函数应用于累加的点积,并且可将最终的OFM[0..7]结果写入SRAM。这样就完成了全连接计算。
在图3NA中示出的第十四示例中,执行288×64全连接确定或计算。在这个示例中,OFM通道计数从8(在第十三示例中)增加到64。如果系统将FC 288×64计算拆分成大小为288×8的8个较小的FC计算并且逐个执行计算(例如,在8个OFM步骤中),则这等同于第十三示例。这样就导致8次IFM遍次。
在图3OA至3OC中示出的第十五个示例中,对单个IFM样本(即,批大小为1)执行1024×32全连接计算。参照图3OA,由于FC确定类似于1×1卷积,因此可存在(每MU 18个权重)*(16个物理区块)=多达288个逻辑区块,每个逻辑区块执行1×1卷积。这样,系统可在单个轮次中读取所有1024个IFM通道(1024/16=32个IFM切片)以避免部分。
为了读取所有32个IFM切片,32个逻辑区块可被使用。计算可涉及计算32个OFM(4个OFM切片)。为了在一次遍次中计算32个OFM(同时计算所有OFM),(32个OFM切片)*(4个OFM切片)=128个逻辑区块可被使用。这样,逻辑区块的可用数量(288个)足够。可通过在每个MU中存储8个权重(而不是每MU存储多达18个权重)来将逻辑区块的数量降低到所需的128。
计算可如下进行。系统可存储每MU 8组IFM FC权重,并且使用128个逻辑区块(如上所述)。整个计算可通过计算四个OFM切片来在单个IFM遍次中完成。四个IFM切片中的每个可被获取并广播到四个区块。因为在每个MU中存储8个IFM权重组,所以权重可被循环八次。序列可包括下面的步骤。在第一步骤中,可清除OFM累加器。在第二步骤中,可获取IFM[0..63](4个IFM切片),并且可将每个切片广播到四个区块。在第三步骤中,可计算尚未完成的OFM[0..31](4个OFM切片)并将其添加到OFM累加器。
参照图3OB,在第四步骤中,可留下而不清除OFM累加器,并且可使用下一组权重。在第五步骤中,可获取IFM[64..127](4个IFM切片)。在第六步骤中,系统可通过将乘积的和添加到OFM累加器来继续计算(尚未完成的)OFM[0..31](4个OFM切片)。参照图3OC,系统可继续对权重进行循环并累加OFM结果,直到所有IFM已经被处理。作为最后一步,系统可获取IFM[960..1023]并累加到OFM[0..31]中,随后将激活函数应用于累加的OFM[0..31]并将结果写入SRAM。
在图3PA至图3PC中示出的第十六示例中,使用十六区块和批大小1来执行4096×1024全连接计算。这个计算可使用(每区块4096/16个IFM通道)=256个IFM切片以及(每区块1024/8个OFM通道)=128个OFM切片。如在以上描述的其它示例中的一些示例,读取整个IFM以避免部分可能有利。多达(每MU 18个权重)*(16个物理区块)=288个逻辑区块可被用于执行计算。为了读取整个IFM,256个逻辑区块可被使用。这样,逻辑区块的可用数量(288个)足够。系统可被配置为通过将16组权重加载到每个MU中来使用256个逻辑区块。为了在一个轮次中读取256个IFM切片(没有部分),所有256个逻辑区块可被使用。因此,每IFM遍次将生成(256个逻辑块/256个IFM切片)=1个OFM切片,并且为了完成计算,将执行(128个OFM切片)/(每IFM遍次1个OFM切片)=128个OFM步骤(因此128个IFM遍次)。
在图3PA中示出物理配置。归约结构可被配置为将所有16个区块的输出归约到单个OFM切片中。十六个IFM切片(来自16个虚拟SRAM存储体)将被获取,并且每个IFM切片仅被“广播”到一个区块。
计算可在如下一些步骤中执行。在第一步骤中,清除OFM[0..7]累加器。在第二步骤中,获取16个IFM切片(IFM[0..255]),并且将其归约到OFM[0..7]累加器中作为中间(未完成)结果。
在第三步骤中,留下而不清除OFM[0..7]累加器,并且系统切换到MU中的下一IFM权重组。在第四步骤中,获取接下来的16个IFM切片(IFM[256..511]),将其归约并添加到OFM[0..7]累加器。如图3PB所示,这些步骤可继续,直到所有IFM(直到并包括IFM[4080..4095])已经被处理。激活函数可被应用于累加的点积(在区块16中),并且最终结果可被写入SRAM。这样就完成了OFM[0..7]的计算。参照图3PC,为了执行下一OFM步骤,系统可对OFM[8..15]重复先前的计算,加载权重W[0..4095,8..15],并且继续步进OFM直到所有OFM被计算(直到OFM[1016..1023]),以完成整个FC计算。
当IFM已具有多于(18个权重)*(每IFM切片16个IFM通道)*(16个物理块)=4608个通道时,可存在FC计算情况。在这种情况下,部分可通过以下步骤被使用:将IFM通道拆分成部分(其大小足以映射到现有物理硬件上)、分别计算每个部分的FC、如前所述逐元素地对部分结果(存储在SRAM中)进行相加、并且通过应用激活函数完成计算。
在权重是16位的情况下,如前所述,MU权重寄存器堆容量变为9(16位权重)而不是18(8位权重),并且计算可使用多循环来执行。类似的推断适用于较大的权重位长度(例如,24位或32位,其中,例如,MU权重寄存器堆具有足够的容量来保持6个24位权重或保持4个32位权重)。
可选地,除了将操作映射到所有可用的物理区块之外,神经处理器可在逻辑上被细分为多个神经处理器,每个神经处理器具有较小数量的区块。例如,具有16个物理区块的神经处理器在逻辑上可被视为两个神经处理器,每个神经处理器具有原始数量的一半的区块(例如,每个神经处理器8个区块),或者被视为四个神经处理器,每个神经处理器具有原始数目的四分之一的区块(例如,每个神经处理器4个区块),等等。在给定划分之后剩余的物理区块的数量的情况下,从这样的细分产生的每个神经处理器遵循与如上所述的基本上相同的映射原理。将神经处理器细分成多个较小的神经处理器对于需要相对较少的IFM归约和生成相对较少的OFM通道(更具体地,其乘积)的操作可能是期望的。例如,1×1×32×32卷积映射仅需要4个区块。如果映射到16个区块,则1×1×32×32卷积将导致16个区块中的12个区块未被使用,因此显著降低了乘法器利用率。在像这样的情况下,具有16个物理区块的神经处理器可被细分为四个神经处理器,每个神经处理器具有4个区块,将1×1×32×32卷积映射到四个作为结果的神经处理器中的每个神经处理器上,将例如大小为H×W×32的IFM张量细分为大小为(H/2×W/2×32)的四个非重叠IFM张量,将一个这样的四分之一大小的IFM张量分配给四个较小神经处理器中的一个神经处理器,因此并行地对所有四个IFM子张量计算卷积。注意,这样的小的权重张量大小可能相对不常见,并且像这样的操作模式需要受到IFM、OFM和归约结构的适当支持。
神经网络层操作到可用硬件上的各种映射需要来自IFM传送结构104、OFM传送结构106和归约结构111的支持。图4AA示出具有16个硬件区块102和16个SRAM存储体组109的神经处理器的物理布局草图。在一个实施例中,SRAM存储体组109存储器可以以分布式方式放置,其中,每个SRAM存储体组109与形成区块和SRAM存储体组单元401的一个区块102恰好邻近(本地)。这允许以高度并行的方式在每个区块与其本地SRAM之间流式传输IFM和OFM数据,即,使多达16个IFM和/或流并行运行,以便避免SRAM与计算区块之间的带宽瓶颈,如果SRAM被聚合到更大的存储阵列中并被放置得更远离区块(即,当存储器未被分布时),则可能存在带宽瓶颈。
图4AB和图4AC示出区块102与它的本地SRAM存储体组109之间的连接,以及SRAM存储体组109的内容。每个SRAM存储体组109可具有四个SRAM存储体B0、B1、B2、B3,以便为并发读写操作提供足够的带宽,以服务IFM、OFM传送结构,通过AXI端口(未示出)的CPU访问、读取和写入部分结果、以及权重加载。图4AB示出存储体B0、B1、B2、B3之间经由复用器403到IFM传送结构104的路径。这个路径可每计算时钟传送多达两个IFM切片,以便将足够的IFM数据供应到能够激活零跳过的区块。IFM传送结构104连接到区块102,以从本地SRAM存储体组以及其它15个SRAM存储体组引入IFM数据。每个SRAM存储体组109也将权重直接供应到它的本地区块102,具体地,供应到本地区块139内的权重解压缩单元138。为了使权重加载快速,所有四个SRAM组B0至B3可并行地获取权重并将权重输入到WDU 139。与卷积中不同,由于FC权重必须在每次乘法之后被丢弃,因此在全连接层计算期间,尽可能快地将权重加载到区块特别重要。
每个MR区块102中的多个MU权重寄存器堆可接受大小为18*16*8=2304字节=144字的权重核,其中,每个字具有128位。例如,如果神经处理器可用的总SRAM容量是2M(兆)字节,则每个SRAM存储体组具有(2M字节)/(16个SRAM存储体组)=128K(千)字节。此外,如果每个SRAM存储体组包含4个SRAM存储体,则每个SRAM存储体大小是(SRAM存储体组大小)/(每SRAM存储体组的SRAM存储体)=128K/4=32K字节。因此,四个本地SRAM存储体中的每个SRAM组可存储(2048个可用字中的)144/4=36个字。
图4AC示出区块与它的本地SRAM存储体组之间的本地OFM连接。区块102将完成的或部分的结果输出到OFM传送结构,OFM传送结构将数据传送到本地SRAM存储体组以及其它地方的其它SRAM存储体组,并且经由解复用器405使数据可用于SRAM存储体B0至B3。
下面的一些段落讨论IFM数据传送结构和OFM数据传送结构。IFM传送结构形成连接并将数据从SRAM存储体组109传输到区块102,而OFM传送结构形成连接并将数据从区块102传输回SRAM存储体组109。
考虑到将IFM从SRAM存储体组带到区块并将OFM从区块带回SRAM的任务,可能看起来SRAM存储体组与区块之间的连接必须多对多(all-to-all),并且区块与SRAM存储体组之间的连接也必须多对多。具有多对多连接可需要使用交叉开关(cross-bar switch)(例如,16对16),这在像这样的情况下可能消耗过大的硅面积,因此高度不期望。更具体地,全交叉开关的面积与O(NM)成比例,其中,N是开关输入的数量,M是开关输出的数量。在我们的情况N=M=T=16下,其中,T是物理区块的数量,因此使得O(NM)=O(T2),T2是区块的数量的平方,并且使得增加(按比例放大)区块的数量(例如,从32到32或64)相对于硅面积特别昂贵。
然而,如以下详细讨论,区块与SRAM存储体组之间的多对多连接不是必需的。为了减小通信结构的大小和复杂性,一些实施例意在通过将SRAM分割成非重叠存储来将OFM本地存储到将(由物理区块中的每个)产生OFM的地方。IFM数据仍从各个SRAM存储体组传送到每个区块,然而,IFM传送结构配置可归约到与区块之间归约的5个主要模式对应的5个必要模式。注意,代替本地存储OFM并以分布式(全局)方式获取IFM,也可将IFM传送结构和OFM传送结构构造为本地提取IFM,同时以分布式(全局)方式写入OFM结果。
通常,卷积或全连接层计算可被分解成关于区块间归约的这五种配置中的一种:(1)如图4AD中所示,通过将IFM切片广播到总共产生16个OFM切片的所有16个区块来输入一个IFM切片;(2)如图4AE中所示,通过将两个IFM切片中的每个广播到8个区块来并行输入两个IFM切片;(3)如图4AG中所示,通过将四个IFM切片中的每个广播到4个区块来并行输入4个IFM切片;(4)如图4AJ中所示,通过将四个IFM切片中的每个广播到2个区块来并行输入8个IFM切片;(5)如图4AL中所示,通过将16个IFM切片中的每个广播到1个区块来并行地输入16个IFM切片。
由于每个IFM切片被广播到8个区块并且2个区块的输出(通过归约结构111)被归约以便获得完成的(或部分的)结果,因此让我们将情况(2)表示为“广播8归约2”情况。类似地,由于每个IFM切片被广播到4个区块并且4个区块的输出被归约,因此让我们将情况(3)表示为“广播4归约4”情况,由于每个IFM切片被广播到2个区块并且8个区块的输出被归约,因此将情况(4)表示为“广播2归约8”情况,由于因为每个IFM切片仅被广播到一个区块(即,没有广播)并且所有16个区块的输出被归约,因此将情况(5)表示为“广播1归约16”情况,由于IFM切片被广播到16个区块并且1个区块的输出被归约(即,没有归约),因此将情况(1)表示为“广播16归约1”情况。
让我们更详细地考虑五个区块间归约配置,并且确切地考虑IFM传送结构和OFM传送结构在五个归约配置情况中的每个中必须支持什么连接模式。为了附加的清楚,让我们将与“区块内(intra-tile)”归约相反的“区块间(inter-tile)”归约表示为指定(使用由归约结构111提供的可重新配置的加法器树)来区块输出的归约,“区块内”归约用于表示为指定使用区块内部的加法器树128A、128B乘法器单元乘积的归约。
下面的符号可用于确定互连结构可投入使用的情况。符号Bm-Rn表示其中每个IFM切片被广播到m个区块并且n个区块的输出(通过区块间归约结构111)归约以便获得结果的情况。在16个物理区块可用的情况下,五个区块间归约情况包括图4AD中示出的B16-R1、图4AF中示出的B8-R2、图4AH中示出的B4-R4、图4AK中示出的B2-R8以及图4AM中示出的B1-R16。
区块间归约情况的最大数量等于LOG2(N),其中,N是神经处理器中的物理区块的数量。在具有N个区块的神经处理器中可用的区块间归约配置是从配置BN-R1(m=N并且n=1)开始构造,随后针对每个下一配置将m除以二并且将n乘以二,直到m到达1。例如,如果神经处理器100仅具有8个区块,则可存在四个可用的区块间配置,四个可用的区块间配置包括B8-R1、B4-R2、B2-R4以及B1-R8。具有32个区块的神经处理器可提供多达六个区块间配置,六个区块间配置包括B32-R1、B16-R2、B8-R4、B4-R8、B2-R16以及B1-R32。
由于计算可产生最终结果(例如,在应用激活函数的情况下)以及部分结果,因此每个区块间配置可具有关于OFM传送路径要考虑的两种情况。让我们将产生最终结果的情况表示为Bm-Rn-F,将产生部分结果的情况表示为Bm-Rn-P。
图4AE、4AG、4AJ、4AL和4AN另外示出区块输出通过五个归约配置中的每个中的归约结构111加在一起。例如,图4AL示出B2-R8配置,其中,8个区块T0、T8、T4、T12、T10、T2、T14和T6的输出通过一个加法器树(图4AK中的左加法器树)求和,而8个区块T7、T15、T3、T11、T13、T5、T9和T1的输出通过另一加法器树(图4AK中的右加法器树)求和。
注意,归约结构111的可配置加法器树被设计为将彼此邻近的区块的输出相加,而不是将彼此分散开的区块的输出相加,因此使得归约结构的可配置加法器树布线紧凑并且树本身“分布”。还注意,与先前示例中不同,这里的16个区块被标识为T0至T15,并且区块标识号的排序已经改变(与映射示例中使用的符号相比),以便简化以下示例中的符号。
让我们可逐个详细检查每个区块间归约配置。第一示例情况包括B16-R1操作。遵循在全局(从任意SRAM存储体组)获取IFM的同时尽可能本地存储OFM的原则,在这个配置中,输入IFM可从任意SRAM存储体组S0..S15流式传输。如图4BA中所示,SRAM存储体组S10通过IFM传送结构104向全部16个区块T0至T15提供IFM切片流(如图4AD中所示,向全部16个区块广播一个IFM切片)。当一个SRAM存储体组(例如,S10)例如用完IFM数据时,另一SRAM存储体组(例如,S11)可变成数据源并继续将IFM数据流式传输到区块。这些步骤可继续,直到整个IFM张量已被流式传入。在需要多次IFM遍次的情况下,IFM张量流式传输序列可根据需要重复。
在B16-R1配置中,不存在区块间归约,使得每个区块的加法器单元仅累加该区块的结果,并且如下所述,OFM完成的或部分的结果将被写入附近的SRAM存储体组。因此,当结果是最终的或是部分结果的流时,B16-R1中的16个区块中的每个生成OFM切片流。具体地,在部分情况下,当使用8位IFM和OFM工作时,每个值可多达32位宽,或者假设16位IFM和OFM数据时,每个值可多达48位宽,并且如图4BB中的箭头106所示,每个部分结果将被本地存储。在这种情况下,每个SRAM存储体组充当存储部分结果的终点。此外,每个SRAM存储体组109从其本地区块接收数据,例如,SRAM存储体组S8从区块T8接收数据,S0从T0接收数据,等等。由于每个SRAM存储体组109具有4个SRAM存储体108,因此每个SRAM存储体组109通常可每时钟存储16个4字节部分结果。然而,当前源SRAM存储体组必须同时获取IFM,同时还写入部分结果,这在一些情况下可能超过SRAM存储体组的可用总带宽。当卷积平面核尺寸大于1×1时,IFM高速缓存139在像这样的情况下可有助于减少从源SRAM存储体组的IFM读取。此外,使用IFM权重循环和/或大于1×1的卷积平面核大小的操作在一些时钟中生成一次输出(与每一时钟一个结果相反),因此降低对OFM带宽的要求并且避免SRAM访问瓶颈。
当生成最终结果时,可将每个最终值量化为8位(或16位等)并且可将该值写入SRAM存储体组[S0..S7]或[S8..S15]。图4BC和图4BD示出OFM传送结构连接和配置选择。由于OFM切片宽度是IFM切片宽度的一半(8深度通道对16),因此两个垂直邻近区块(“区块列”)的输出可通过短本地连接被发送到上SRAM存储体组或下SRAM存储体组。每个SRAM存储体组能够处理具有16个通道(由于IFM切片具有16个通道)的切片,因此每个SRAM存储体组还可接受两个OFM切片。例如,一起包括区块列的区块T0和T8的输出可被分组在一起,并且通过本地短连接106被发送到如图4BC中所示的位于紧接T8下方的SRAM存储体组S8或位于如图4BD中所示紧接T0上方的SRAM存储体组S0。类似地,区块列T4 T12输出可被组合并被本地发送到S4或S12,区块列T10 T2输出到S10或S2,区块列T14 T6输出到S14或S6,区块列T7T15输出到S7或S15,区块列T3 T11输出到S3或S11,区块列T13 T5输出到S13或S5并且区块列T19 T1输出到S9或S1。
第二示例情况示出B8-R2操作。如图4CA中所示,一个IFM切片可从上SRAM存储体组109供应,其中,“上”被定义为包括S0、S4、S10、S14、S7、S3、S13和S9,并且一个IFM切片可从下SRAM存储体组109供应,其中,“下”被定义为包括S8、S12、S2、S6、S15、S11、S5和S1。更具体地,上SRAM存储体组109中的任何一个可充当向全部上区块T0、T4、T10、T14、T7、T3、T13和T9发送(广播)IFM切片的源。例如,IFM传送结构可被配置为从S10读取IFM切片并且将该IFM切片广播到T0、T4、T10、T14、T7、T3、T13和T9。可选地,例如,IFM传送结构可被配置为从S3读取IFM切片并且将该IFM切片广播到T0、T4、T10、T14、T7、T3、T13和T9。
类似地,下SRAM存储体组109中的任何一个可充当向全部下区块T8、T12、T2、T6、T15、T11、T5和T1发送(广播)IFM切片的源。例如,IFM传送结构可被配置为从S11读取IFM切片并且将该IFM切片广播到T8、T12、T2、T6、T15、T11、T5和T1。可选地,例如,IFM传送结构可被配置为从S8读取IFM切片并且将该IFM切片广播到T8、T12、T2、T6、T15、T11、T5和T1。
另外,参照图4CA,SRAM存储体组可被配对以发送IFM切片,使得在一个(时钟)周期中从下面的对中的一个对接收数据:[S0,S1]、[S2,S3]、[S4,S5]、[S6,S7]、[S8,S9]、[S10,S11]、[S12,S13]和[S14,S15]。例如,在图4CA中,IFM切片源于SRAM存储体组的[S10,S11]对。
图4CB示出输入两个IFM切片,其中,每个IFM切片被广播到8个区块,并且以列的方式对两个区块的输出进行归约。例如,在图4AF之后,T0的输出与T8的输出被归约以生成一个结果,T4和T12输出被归约以生成另一结果,T10和T2输出被归约以生成又一结果,T14和T6输出被归约以生成又一结果,T7和T15输出被归约以生成又一结果,T3和T11输出被归约以生成又一结果,T13和T5输出被归约以生成又一结果,并且T9和T1输出被归约以生成又一结果。
在部分结果的情况下,八个归约结果可被存储在SRAM存储体组的两个组[S0..S7]和[S8..15]中的一个中。例如,图4CB示出存储在SRAM存储体组[S0..S7]中的八个部分结果。在最终结果的情况下,OFM传送结构106可合并存储在包括[S0..S3]、[S4..S7]、[S8..S11]和[S12..S15]的四个SRAM存储体组之一中的两个邻近区块列的结果。例如,图4CC示出存储在SRAM存储体组[S4..S7]中的八个最终结果。
第三示例情况示出B4-R4操作。如图4DA中所示,可以从平面布置图的每四分之一供应一个IFM切片。参照图4DB,该操作可涉及广播四个IFM切片并且在归约之后生成四个结果。只要IFM切片来自包括[S0..S3]、[S4..S7]、[S8..S11]和[S12..S15]的四个组中的一个,如图4DB中示出的如果结果部分则只要输出被写入四个组[S0..S3]、[S4..S7]、[S8..S11]和[S12..S15]中的一个,以及如图4DC中示出的如果结果是最终的则只要输出被写入八个组[S0 S1]、[S2 S3]、[S4 S5]、[S6 S7]、[S8 S9]、[S10 S11]、[S12 S13]和[S14S15]中的一个,IFM传送结构和OFM传送结构就可设法在一个(时钟)周期中发送输入和接收输出。
参照图4AJ,注意,每个归约组407生成一个输出结果。两个结果将被存储在顶部中,并且两个结果将被存储在底部中。由于包含最终结果的OFM切片具有8字节的大小,因此OFM传送结构可合并两个邻近列的结果。图4AH还示出四个IFM切片被广播以在归约之后形成四个输出结果。
第四示例情况示出B2-R8操作。如图4EA中所示,可从平面布置图的每八分之一提供一个IFM切片。参照图4EB,操作可涉及广播八个IFM切片以在归约之后生成两个结果。
只要输入来自包括[S0..S7]和[S8..S15]的两个组中的一个,如果结果是部分的则只要输出被写入八个组[S0 S1]、[S2 S3]、[S4 S5]、[S6 S7]、[S8 S9]、[S10 S11]、[S12S13]和[S14 S15]中的一个,以及如果结果是最终的则只要输出被写入任何SRAM存储体组,IFM传送结构和OFM传送结构可设法在一个(时钟)周期中发送输入和接收输出。
针对第四示例情况,图4EA示出源数据被广播,图4EB示出部分结果被形成,图4EC示出最终结果被形成。参照图4AJ,每个部分407在归约之后生成一个结果。两个结果中的一个可被存储在顶部中,而另一结果可被存储在底部中。由于包含最终结果的OFM切片具有8字节的大小,因此OFM传送结构可合并两个邻近列的结果。图4AK还示出四个IFM切片被广播以在归约之后形成两个输出结果。
第五示例情况示出B1-R16操作。如图4FA中所示,可从与一个广播对应的每个SRAM存储体组供应一个IFM切片。参照图4FB,操作可涉及对全部16个区块的输出进行归约以在结果是部分时的情况下以及在结果是最终时的情况生成可被存储在任何SRAM存储体组中的一个结果。
由于包含最终结果的OFM切片具有8字节的大小,因此OFM传送结构可合并两个邻近列的结果。图4AM还示出16个IFM切片输入以在归约之后形成单个输出结果。
IFM传送结构和OFM传送结构可以以包括上述示例的方式被设计,使得针对一个操作总是可以以如下这样的方式计算并存储到SRAM:后续操作(消耗先前操作结果)能够针对当前操作和后续操作的归约配置的全部排列获取那些结果。例如,当前操作可使用B4-R4归约配置,并且在与B4-R4相关联的OFM传送结构连接性选择之后将其结果存储到SRAM存储体组。后续(或下一)操作可使用与IFM传送结构连接性的相关联的选择的B2-R8归约配置,同时能够成功地获取由先前的B4-R4操作计算和存储的数据。
图4G示出支持如前所述的全部归约配置的全部IFM传送结构连接性选项的IFM传送结构104的一个可能实现。该结构由四个双向多分支总线组成,其中,双向总线中的两条放置在上SRAM存储体组与上区块之间,并且另外两条双向总线放置在下SRAM存储体组与下区块之间。总线可通过寄存器411以循环方式连接,使得来自上总线的数据可流到下总线并返回。注意,为了解释清楚,在图4G中已经省略了可存在于IFM传送结构104中的附加流水线寄存器。
图4H示出支持如前所述的全部归约配置的全部OFM传送结构连接性选项的OFM传送结构106的一个可能实现。结构由四个双向16字节宽的多分支总线组成,以支持归约配置B2-R8和B1-R16。注意,为了解释清楚,在图4H中已经省略了可存在于OFM传送结构106中的流水线寄存器。
归约结构111可针对除了R1(不存在区块间归约时)之外的全部归约配置(例如,B8-R2、B4-R4、B2-R8和B1-R16)执行“区块间”归约(而不是由加法器树128A和128B完成的区块内归约)。归约结构111包括由图5A中示出的归约和累加(RAA)节点520构成的可重新配置的加法器树。每个RAA节点针对部分归约的结果(即,激活函数应用之前的线性结果)进行操作。RAA接收来自该RAA节点所在的相同区块列ARU 167的输入或来自其它RAA节点的输入。RAA将输出发送到加法器树中更上的RAA节点或返回到ARU。随后,如果结果是最终的,则ARU应用激活函数并将最终结果发送到OFM传送结构。可选地,如果结果是部分的,则ARU在绕过激活函数的同时将部分结果发送到OFM传送结构。
图5B示出针对R16配置的归约结构111。这里,ARU模块167生成部分归约结果(从区块内加法器树128A和128A),经由如图1X中所示的“到归约结构”输出将这些部分归约的结果流式传输到RAA节点502的第一级。RAA节点502将16个ARU部分归约数据流(streams ofpartially reduced data)成对地归约为8个部分归约数据流。RAA第二级节点504还将由RAA节点502产生的8个流成对地归约为4个部分归约数据流。第三级RAA节点和第四级RAA节点完成归约处理以产生一个完全归约数据流(stream of fully-reduced data),该完全归约数据流被发送到区块T14的ARU用于激活函数应用(当生成最终结果时)并输出到OFM传送结构。注意,T14物理上位于树根RAA节点508附近,并且对应于图4FB中的区块T14的ARU167。
图5C示出针对R8配置的归约结构111。与R16配置不同,R8配置包括两个加法器树(而不是一个加法器树),每个加法器树具有三级(而不是四级)。第一加法器树对来自区块T0、T8、T4、T12、T10、T2、T14和T6的ARU的部分归约数据进行归约,并且将完全归约的结果发送到区块T12的ARU以完成数据返回。第二加法器树对来自区块T7、T15、T3、T11、T13、T5、T9和T1的ARU的部分归约数据进行归约,并且将完全归约的结果发送到区块T13的ARU以完成数据返回。注意,区块T12和T13各自物理地位于相应的树根RAA节点506附近,并且分别对应于图4FB中的区块T12和T3的ARU 167。
图5D示出具有四个加法器树的配置R4,每个加法器树对来自四个区块的部分归约的输出进行归约。图4DB示出与四个树根节点相关的ARU的物理位置。
图5E示出具有八个加法器树的配置R2,每个加法器树对来自两个区块的部分归约的输出进行归约。图4CB示出与八个树根节点相关的ARU的物理位置。
最后,图5F示出不具有加法器树的配置R1,区块ARU将结果直接输出到OFM传送结构而不需要归约结构111。图4BB示出在这种情况下的ARU的物理位置。注意,图4BB、4BC、4BD、4CB、4CC、4DB、4DC、4EB、4EC和4DB中的ARU 167内部的数字指示如图5B至图5F中所示的RAA树节点级别,其中,级别0对应于配置R1(不使用归约结构)。配置R1由ARU中的ARU复用器174实现,ARU复用器174直接将数据从累加器130A(或130B)发送到激活函数和部分路径(从位范围选择单元187开始),从而如图1X中所示绕过归约结构。注意,为了一般解释的清楚,未示出在稀疏激活支持的情况下适当地绕过归约结构所需要的一些辅助逻辑。
图5G示出由RAA节点502、504、506、508组成的归约结构111。再次注意,每个RAA节点物理上恰位于一个区块附近。每个RAA节点502从节点502所在的区块列中的两个区块接收输入。每个区块列恰有一个RAA节点502。RAA节点508从节点506接收其输入,节点506转而从节点504接收其输入,节点504转而从节点502接收输入。注意,由于存在15个树节点而物理区块的数量是16,因此区块T12不具有与其相关联的RAA节点。
如图5A中所示,每个RAA节点具有包括使用加法器512对两个输入A和B进行归约以及使用累加器518和加法器514对归约的结果进行累加的两个功能。复用器516允许在累加开始时将来自加法器512的归约结果直接加载到累加器518中,例如开始IFM权重循环。复用器516还允许随着例如IFM权重循环随时间进行,累加归约的结果。
以压缩格式存储权重可有益于降低存储权重所需的SRAM(和芯片外DDR)存储量,以降低与获取权重相关的SRAM(和芯片外DDR)功率并且加速权重加载,特别是在全连接层计算期间。在一些实施例中,空闲周期可用于加载乘法器单位权重。此外,在一些实施例中,可使用多条垂直加载总线101来加速权重加载,而不是示出每个MR列仅一个权重加载总线的图1K。
更具体地,如先前在图4AB中所示,权重被存储在每个区块本地的四个SRAM存储体108中,每个区块能够并行读取全部4个存储体。每个SRAM存储体获取16个8位权重。由于每个区块具有8个MR列,因此在权重未被压缩时的情况下,花费(每个区块8个MR列)/(每个区块4个本地SRAM存储体)=用于每个激活通路加载一个8位权重的2个时钟。每个区块还包含每区块的权重解压缩单元138,权重解压缩单元138可用于对FC和卷积权重进行解压缩。例如,每个乘法器单元可具有18个权重,并且可花费(每个MU 18个权重)*(每权重加载2个时钟)=用于加载全部MU权重的36个时钟周期。不使用全部18个权重的较小的核可更快地加载。
与FC计算并发的权重流式传输可用于改善全连接计算中的吞吐量,以在大型FC计算期间保持乘法器利用率高。如前所述,FC计算不重新使用权重。因此,这样,可能需要在FC计算期间快速地流式传输权重。具体地,IFM权重循环为1的FC计算将需要每个时钟向每个MU提供一个权重,以保持全部乘法器充分利用。IFM权重循环为2需要每两个时钟向每个MU提供一个权重,以保持全部乘法器充分利用。更一般地,IFM权重循环为N需要每N个时钟向每个MU提供一个权重,以保持全部乘法器充分利用。
根据各种深度学习研究出版物,可对全连接层权重进行压缩,有时压缩2倍或更多倍。在这种情况下,可每个时钟将一个解压缩权重加载到每个MU中,而不是每两个时钟将一个未压缩权重加载到每个MU中。
然而,另外地,IFM数据也必须与权重一起从SRAM获取,因此降低了可用于获取权重的SRAM带宽。从SRAM获取的IFM数据的量转而取决于映射归约配置。与较小的归约配置(例如,R1)相比,大的归约数(例如,R16)需要使用更多通道获取IFM。
由于全部64个SRAM存储体可能忙于获取FC权重,因此可能不能同时从SRAM读取IFM。为了增加乘法器利用率,IFM可跨全部64个存储体拼接地被存储。在一些实施例中,为了获取IFM,权重读取停止一个时钟周期,并且全部64个存储体使一个IFM读取到位于SRAM的输出旁边的1深度的高速缓存寄存器中。IFM随后从高速缓存的64个16字节行流式传输。更具体地,并行地来自全部64个存储体的一次IFM获取可一次获取足够的数据,足够的数据等于IFM数据读取的数量R=(64个SRAM存储体)*(广播配置数量B)/(物理区块的数量)。因此,如图6中针对一些实施例所示,用于全连接层计算的最大乘法器利用率可根据作为广播配置数量B的函数的R/(1+R)来计算。
如前所述,全局控制140以及本地控制单元142、144可具有各种配置寄存器。在一些实施例中,例如,当神经处理器从一个操作转变到另一操作时、或者当一个SRAM存储体组耗尽数据并且IFM传送结构必须在运行中切换(无延迟)从另一SRAM存储体组流式传输IFM数据时,这些配置寄存器中的一些的内容能够在运行中切换以即时改变神经处理器配置。遵循通常已知的设计实践,这样的运行中的重新配置可通过使配置寄存器双缓冲来实现,并且通过在两个缓冲器之间切换来使新配置生效。如图1A中所示,中央控制器110可通过AXI总线从CPU接收配置数据,将该配置数据通过公用总线112进行传递,公用总线112转而可将来自CPU的配置值发送并加载到控制逻辑的配置寄存器(诸如140、142和144)以及各种其它寄存器(包括ARU偏置寄存器195、缩放寄存器191、激活函数197配置寄存器等)。为了协调涉及根据需要在各个时间切换的大量双缓冲寄存器的运行中的配置改变,公用总线112可不仅加载配置寄存器值,而且加载双缓冲寄存器必须将它的配置切换为生效的时间(时钟计数)。
图1A还示出SRAM存储体组109,每个SRAM存储体组109具有AXI从接口,使得CPU能够写入IFM和权重张量,并且读回OFM结果。由于SRAM存储体组服务于来自IFM传送结构和OFM传送结构以及本地权重加载连接的I/O请求,因此AXI接口上的CPU I/O请求可被仲裁并被分配较低优先级,以便允许神经网络计算在CPU等待结果的同时无延迟地继续。
如在此所用,术语“复用器”和“解复用器”可被互换使用;每个术语表示在一侧(“多端口”侧)上具有多个数据端子(例如,数据输入或数据输出)并且在另一侧(“单端口”侧)上具有单个数据端子(例如,数据输出或数据输入)的可切换装置,该装置被配置为将根据在装置的控制输入处接收的控制信号而选择的一侧上的多个数据端子中的一个连接到另一侧上的单个数据端子。
术语“处理单元”在此用于包括用于处理数据或数字信号的硬件、固件和软件的任何组合。处理单元硬件可包括例如专用集成电路(ASIC)、通用或专用中央处理单元(CPU)、数字信号处理器(DSP)、图形处理器(GPU)以及可编程逻辑装置(诸如,现场可编程门阵列(FPGA))。在如在此所用的处理单元中,每个功能由被配置(即,硬连线)为执行该功能的硬件执行,或者由被配置为执行存储在非暂时性存储介质中的指令的更通用硬件(诸如,CPU)执行。处理单元可制造在单个印刷电路板(PCB)上或分布在若干互连的PCB上。处理单元可包含其它处理单元;例如,处理单元可包括在PCB上互连的两个处理单元FPGA和CPU。
将理解,尽管在此可使用“第一”、“第二”、“第三”等的术语来描述各种元件、组件、区域、层和/或部分,但是这些元件、组件、区域、层和/或部分不应被这些术语限制。这些术语仅用于将一个元件、组件、区域、层或部分与另一元件、组件、区域、层或部分区分开。因此,在不脱离发明构思的精神和范围的情况下,在此讨论的第一元件、第一组件、第一区域、第一层或第一部分可被称为第二元件、第二组件、第二区域、第二层或第二部分。
为了便于描述,在此可使用空间相对术语(诸如,“在……之下”、“在……下方”、“在……下面”、“下面的”、“在……上方”、“上面的”等)来描述在附图中示出的一个元件或特征与另一(另一些)元件或特征之间的关系。将理解,这样的空间相对术语意在包含除了在附图中描绘的方位之外的使用或操作中的装置的不同方位。例如,如果附图中的装置被翻转,则被描述为“在”其它元件或特征“下方”或“之下”或“下面的”的元件将随后被定位成在该其它元件或特征“上方”。因此,示例术语“在…下方”或“下面的”可包括方位“在……上方”和“在……下方”两者。装置可被另外定位(例如,旋转90度或在其它方位),并且在此使用的空间相对描述语应被相应地解释。另外,还将理解,当层被称为在两层“之间”时,它可以是两层之间的唯一层,或者也可存在一个或多个介于中间的层。
在此使用的术语仅出于描述特定实施例的目的,并且不意在限制发明构思。如在此所用的,术语“基本上”、“约”和类似术语被用作近似术语而不是程度术语,并且意在解释本领域普通技术人员将认识到的测量值或计算值的固有偏差。
如在此所用的,除非上下文另外清楚地指示,否则单数形式也意在也包括复数形式。还将理解,当术语“包括”和/或“包含”在本说明书中使用时,说明存在叙述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或它们的组。如在此所用的,术语“和/或”包括相关所列项中的一个或多个的任何和全部组合。诸如“……中的至少一个”的表述在一列元素之后时,修饰整列元素,而非修饰列中的单个元素。此外,当描述发明构思的实施例时,“可”的使用表示“本公开的一个或多个实施例”。此外,术语“示例性”意在表示示例或例证。如在此所用的,术语“使用”可被认为与术语“利用”同义。
将理解,当元件或层被称为“在”另一元件或层“上”、“连接到”、“结合到”或“邻近”另一元件或层时,该元件或层可直接在另一元件或层上、直接连接到、直接结合到或直接邻近另一元件或层,或者可存在介于中间的一个或多个元件或层。相反,当元件或层被称为“直接在”另一元件或层“上”、“直接连接到”、“直接结合到”或“紧邻”另一元件或层时,不存在介于中间的元件或层。
在此所列的任何数值范围意在包括包含在所列的范围内的相同数值精度的全部子范围。例如,“1.0至10.0”的范围意在包括所列的最小值1.0和所列的最大值10.0之间(并且包括所列的最小值1.0和所列的最大值10.0)的全部子范围(即,具有等于或大于1.0的最小值以及等于或小于10.0的最大值(诸如,以2.4至7.6为例))。在此所列的任何最大数值限值意在包括包含在其中的全部较低数值限值,并且本说明书中所列的任何最小数值限值意在包括包含在其中的全部较高数值限值。
一些实施例具有下面的第一组编号的条项的特征。
1、一种处理器,包括:
第一区块;
第二区块;
存储器;和
总线,
总线连接到:
存储器,
第一区块,和
第二区块,
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器,
第一区块被配置为执行激活的阵列与权重的核的卷积,执行卷积的步骤依次包括:
形成核与激活的阵列的第一子阵列的张量乘积;
形成核与激活的阵列的第二子阵列的张量乘积,第二子阵列在第一方向上从第一子阵列偏移n个阵列元素,n是正整数;和
形成核与激活的阵列的第三子阵列的张量乘积,第三子阵列在与第一方向垂直的第二方向上从第二子阵列偏移一个阵列元素。
2、根据条项1所述的处理器,其中,执行卷积的步骤还依次包括:在形成核与第三子阵列的张量乘积之后:
形成核与激活的阵列的第四子阵列的张量乘积,第四子阵列在与第一方向相反的第三方向上从第三子阵列偏移m个阵列元素,m是正整数;和
形成核与激活的阵列的第五子阵列的张量乘积,第五子阵列在第二方向上从第四子阵列偏移一个阵列元素。
3、根据条项2所述的处理器,其中,m等于n。
4、根据条项3所述的处理器,其中,n等于1。
5、根据条项1所述的处理器,其中,执行卷积的步骤还依次包括:在形成核与第一子阵列的乘积之后:
形成核与激活的阵列的n-1个各自的子阵列的n-1个乘积,所述n-1个乘积中的第k个乘积中的子阵列在第一方向上从第一子阵列偏移k+1个阵列元素。
6、根据条项5所述的处理器,还包括:高速缓存,连接到激活缓冲器并且被配置为将激活供应给激活缓冲器,高速缓存具有足以存储H+(H+n)*(W-1)-1个激活的大小,其中,
H是核在第一方向上的大小,并且
W是核在第二方向上的大小。
7、根据条项1所述的处理器,其中,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块还被配置为:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;并且
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
8、根据条项7所述的处理器,其中,在第二状态下,第一队列的输出寄存器包含零。
9、根据条项7所述的处理器,还包括:
第一加法器,被配置为:在第一状态下,
连接到第一乘法器的输出和第二乘法器的输出,并且
将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
10、根据条项9所述的处理器,还包括:第二加法器,被配置为:在第二状态下,连接到第一乘法器的输出。
11、一种用于使用处理电路进行计算的方法,所述处理电路包括:
第一区块,
第二区块,
存储器,和
总线;
总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
所述方法包括执行激活的阵列与权重的核的卷积,执行卷积的步骤依次包括:
形成核与激活的阵列的第一子阵列的张量乘积;
形成核与激活的阵列的第二子阵列的张量乘积,第二子阵列在第一方向上从第一子阵列偏移n个阵列元素,n是正整数;和
形成核与激活的阵列的第三子阵列的张量乘积,第三子阵列在与第一方向垂直的第二方向上从第二子阵列偏移一个阵列元素。
12、根据条项11所述的方法,其中,执行卷积的步骤还依次包括:在形成核与第三子阵列的张量乘积之后:
形成核与激活的阵列的第四子阵列的张量乘积,第四子阵列在与第一方向相反的第三方向上从第三子阵列偏移m个阵列元素,m是正整数;和
形成核与激活的阵列的第五子阵列的张量乘积,第五子阵列在第二方向上从第四子阵列偏移一个阵列元素。
13、根据条项12所述的方法,其中,m等于n。
14、根据条项13所述的方法,其中,n等于1。
15、根据条项11所述的方法,其中,执行卷积的步骤还依次包括:在形成核与第一子阵列的乘积之后:
形成核与激活的阵列的n-1个各自的子阵列的n-1个乘积,所述n-1个乘积中的第k个乘积中的子阵列在第一方向上从第一子阵列偏移k+1个阵列元素。
16、根据条项15所述的方法,其中,所述处理电路还包括:高速缓存,连接到激活缓冲器并且被配置为将激活供应给激活缓冲器,高速缓存具有足以存储H+(H+n)*(W-1)-1个激活的大小,其中,
H是核在第一方向上的大小,并且
W是核在第二方向上的大小。
17、根据条项11所述的方法,其中,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块还被配置为:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;并且
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
18、根据条项17所述的方法,其中,在第二状态下,第一队列的输出寄存器包含零。
19、根据条项17所述的方法,其中,所述处理电路还包括第一加法器,
所述方法还包括:在第一状态下,
将第一加法器连接到第一乘法器的输出和第二乘法器的输出,并且
通过第一加法器将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
20、一种用于使用用于处理的装置进行计算的方法,所述用于处理的装置包括:
第一区块,
第二区块,
存储器,和
总线;
总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
所述方法包括:执行激活的阵列与权重的核的卷积,执行卷积的步骤依次包括:
形成核与激活的阵列的第一子阵列的张量乘积;
形成核与激活的阵列的第二子阵列的张量乘积,第二子阵列在第一方向上从第一子阵列偏移n个阵列元素,n是正整数;和
形成核与激活的阵列的第三子阵列的张量乘积,第三子阵列在与第一方向垂直的第二方向上从第二子阵列偏移一个阵列元素。
一些实施例具有下面的第二组编号的条项的特征。
1、一种处理器,所述处理器包括:
第一区块;
第二区块;
存储器;和
总线,
总线连接到:
存储器,
第一区块,和
第二区块,
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器,
所述处理器被配置为执行激活的阵列与权重的第一核的第一卷积,执行第一卷积的步骤包括:
将激活的阵列的第一子阵列广播到第一区块和第二区块;
形成第一张量乘积,第一张量乘积是权重的第一核的第一子阵列与激活的阵列的第一子阵列的张量乘积;
将第一张量乘积存储在存储器中;
将激活的阵列的第二子阵列广播到第一区块和第二区块;
形成第二张量乘积,第二张量乘积是权重的第一核的第二子阵列与激活的阵列的第二子阵列的张量乘积;和
将第一张量乘积与第二张量乘积相加。
2、根据条项1所述的处理器,其中,第一区块还包括:权重解压缩单元,被配置为:
对以压缩的形式对多个权重进行编码的数据字进行解压缩,以提取第一权重和第二权重;
将第一权重输入到第一权重寄存器;和
将第二权重输入到第二权重寄存器。
3、根据条项1所述的处理器,其中,第一区块还被配置为:执行激活的阵列与权重的第二核的第二卷积,
第二执行卷积的步骤依次包括:
形成第二核的第一部分与激活的阵列的第一子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重;
形成第二核的第二部分与激活的阵列的第一子阵列的张量乘积,第二核的第二部分包括存储在第二权重寄存器中的权重;和
形成第二核的第一部分与激活的阵列的第二子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重。
4、根据条项1所述的处理器,其中,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块还被配置为:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;并且
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
5、根据条项4所述的处理器,其中,在第二状态下,第一队列的输出寄存器包含零。
6、根据条项4所述的处理器,还包括:第一加法器,被配置为:在第一状态下,
连接到第一乘法器的输出和第二乘法器的输出;并且
将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
7、根据条项6所述的处理器,还包括:第二加法器,被配置为:在第二状态下,连接到第一乘法器的输出。
8、根据条项7所述的处理器,还包括:
第一累加器,连接到第一加法器;和
第二累加器,连接到第二加法器,
第一累加器包括寄存器,并且被配置为:在第一状态下:
将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值;并且
将第一累加器的累加值存储在第一累加器的寄存器中。
9、根据条项8所述的处理器,其中,第二累加器包括寄存器,并且被配置为:在第二状态下:
将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值;并且
将第二累加器的累加值存储在第二累加器的寄存器中。
10、根据条项8所述的处理器,还包括:激活零跳过控制电路,被配置为:
确定第一队列的输出寄存器是否包含零;并且
响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
11、一种用于使用处理电路进行计算的方法,所述处理电路包括:
第一区块,
第二区块,
存储器,和
总线;
总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
所述方法包括:执行激活的阵列与权重的第一核的第一卷积;
执行第一卷积的步骤包括:
将激活的阵列的第一子阵列广播到第一区块和第二区块;
形成第一张量乘积,第一张量乘积是权重的第一核的第一子阵列与激活的阵列的第一子阵列的张量乘积;
将第一张量乘积存储在存储器中;
将激活的阵列的第二子阵列广播到第一区块和第二区块;
形成第二张量乘积,第二张量乘积是权重的第一核的第二子阵列与激活的阵列的第二子阵列的张量乘积;和
将第一张量乘积与第二张量乘积相加。
12、根据条项11所述的方法,其中,第一区块还包括权重解压缩单元,并且所述方法还包括:
通过权重解压缩单元对以压缩的形式对多个权重进行编码的数据字进行解压缩,以提取第一权重和第二权重;
将第一权重输入到第一权重寄存器;和
将第二权重输入到第二权重寄存器。
13、根据条项11所述的方法,其中,所述方法还包括:执行激活的阵列与权重的第二核的第二卷积,
第二执行卷积的步骤依次包括:
形成第二核的第一部分与激活的阵列的第一子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重;
形成第二核的第二部分与激活的阵列的第一子阵列的张量乘积,第二核的第二部分包括存储在第二权重寄存器中的权重;和
形成第二核的第一部分与激活的阵列的第二子阵列的张量乘积,第二核的第一部分包括存储在第一权重寄存器中的权重。
14、根据条项11所述的方法,其中,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块还被配置为:
在第一状态下,在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;并且
在第二状态下,在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
15、根据条项14所述的方法,其中,在第二状态下,第一队列的输出寄存器包含零。
16、根据条项14所述的方法,其中,所述处理电路还包括:第一加法器,
所述方法还包括:在第一状态下,
将第一加法器连接到第一乘法器的输出和第二乘法器的输出;和
通过第一加法器将从第一乘法器的输出接收的乘积和从第二乘法器的输出接收的乘积相加。
17、根据条项16所述的方法,其中,所述处理电路还包括第二加法器,
所述方法还包括:在第二状态下,将第二加法器连接到第一乘法器的输出。
18、根据条项17所述的方法,其中,所述处理电路还包括:
第一累加器,连接到第一加法器,和
第二累加器,连接到第二加法器,
第一累加器包括寄存器;
所述方法还包括:在第一状态下,
通过第一累加器将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值;并且
通过第一累加器将第一累加器的累加值存储在第一累加器的寄存器中。
19、根据条项18所述的方法,其中,第二累加器包括寄存器,并且所述方法还包括:在第二状态下,
通过第二累加器将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值;并且
通过第二累加器将第二累加器的累加值存储在第二累加器的寄存器中。
20、一种用于使用用于处理的装置进行计算的方法,所述用于处理的装置包括:
第一区块,
第二区块,
存储器,和
总线;
总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
所述方法包括:执行激活的阵列与权重的第一核的第一卷积,执行第一卷积的步骤包括:
将激活的阵列的第一子阵列广播到第一区块和第二区块;
形成第一张量乘积,第一张量乘积是权重的第一核的第一子阵列与激活的阵列的第一子阵列的张量乘积;
将第一张量乘积存储在存储器中;
将激活的阵列的第二子阵列广播到第一区块和第二区块;
形成第二张量乘积,第二张量乘积是权重的第一核的第二子阵列与激活的阵列的第二子阵列的张量乘积;和
将第一张量乘积与第二张量乘积相加。
一些实施例具有下面的第三组编号的条项的特征。
1、一种处理器,包括:
第一区块;
第二区块;
存储器;
输入总线;和
输出总线,
输入总线连接到:
存储器,
第一区块,和
第二区块,
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器,
第一区块被配置为执行激活的阵列与权重的核的第一卷积,
存储器包括:
第一存储器存储体组,和
第二存储器存储体组,
输入总线包括:
第一分段总线,用于在第一方向上进行数据广播;和
第二分段总线,用于在与第一方向相反的第二方向上进行数据广播,
第一分段总线包括:
第一开关块,和
第二开关块,
第一开关块连接到:
第一区块,和
第一存储器存储体组,
第二开关块连接到:
第二区块,和
第二存储器存储体组,
第二分段总线包括:
第三开关块,和
第四开关块,
第三开关块连接到:
第一区块,和
第一存储器存储体组,
第四开关块连接到:
第二区块,和
第二存储器存储体组,
第一开关块的输入连接到第二开关块的输出,并且
第三开关块的输出连接到第四开关块的输入。
2、根据条项1所述的处理器,其中,第一分段总线被配置为:在第一总线状态下,
通过第一开关块将第一存储器存储体组连接到第一区块,并且
通过第二开关块将第二存储器存储体组连接到第二区块。
3、根据条项2所述的处理器,其中,第一分段总线还被配置为:在第二总线状态下,
通过第一开关块和通过第二开关块将第二存储器存储体组连接到第一区块,并且
通过第二开关块将第二存储器存储体组连接到第二区块。
4、根据条项1所述的处理器,其中,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块还被配置为:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
5、根据条项4所述的处理器,其中,在第二状态下,第一队列的输出寄存器包含零。
6、根据条项4所述的处理器,还包括:第一加法器,被配置为:在第一状态下,
连接到第一乘法器的输出和第二乘法器的输出;并且
将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
7、根据条项6所述的处理器,还包括:第二加法器,被配置为:在第二状态下,连接到第一乘法器的输出。
8、根据条项7所述的处理器,还包括:
第一累加器,连接到第一加法器;和
第二累加器,连接到第二加法器,
第一累加器包括寄存器,并且被配置为:在第一状态下,
将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值;并且
将第一累加器的累加值存储在第一累加器的寄存器中。
9、根据条项8所述的处理器,其中,第二累加器包括寄存器,并且被配置为:在第二状态下,
将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值;并且
将第二累加器的累加值存储在第二累加器的寄存器中。
10、根据条项8所述的处理器,还包括:激活零跳过控制电路,被配置为:
确定第一队列的输出寄存器是否包含零;并且
响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
11、根据条项10所述的处理器,还包括:复用器,复用器具有:
输入,在复用器的单端口侧连接到第一乘法器;
第一输出,在复用器的多端口侧连接到第一加法器;和
第二输出,在复用器的多端口侧连接到第二加法器。
12、一种用于使用处理电路进行计算的方法,所述处理电路包括:
第一区块,
第二区块,
存储器,
输入总线,和
输出总线;
输入总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
第一区块被配置为执行激活的阵列与权重的核的第一卷积;
存储器包括:
第一存储器存储体组,和
第二存储器存储体组;
输入总线包括:
第一分段总线,用于在第一方向上进行数据广播;和
第二分段总线,用于在与第一方向相反的第二方向上进行数据广播;
第一分段总线包括:
第一开关块,和
第二开关块;
第一开关块连接到:
第一区块,和
第一存储器存储体组;
第二开关块连接到:
第二区块,和
第二存储器存储体组;
第二分段总线包括:
第三开关块,和
第四开关块;
第三开关块连接到:
第一区块,和
第一存储器存储体组;
第四开关块连接到:
第二区块,和
第二存储器存储体组;
第一开关块的输入连接到第二开关块的输出,并且
第三开关块的输出连接到第四开关块的输入;
所述方法包括:
在第一总线状态下,
通过第一开关块将第一存储器存储体组连接到第一区块;和
通过第二开关块将第二存储器存储体组连接到第二区块。
13、根据条项12所述的方法,其中,所述方法还包括:
在第二总线状态下,
通过第一开关块和第二开关块将第二存储器存储体组连接到第一区块,并且
通过第二开关块将第二存储器存储体组连接到第二区块。
14、根据条项12所述的方法,其中,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块还被配置为:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;并且
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
15、根据条项14所述的方法,其中,在第二状态下,第一队列的输出寄存器包含零。
16、根据条项14所述的方法,其中,所述处理电路还包括第一加法器,
所述方法还包括:在第一状态下,
将第一加法器连接到第一乘法器的输出和第二乘法器的输出;并且
通过第一加法器将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
17、根据条项16所述的方法,其中,所述处理电路还包括第二加法器,
所述方法还包括:在第二状态下,将第二加法器连接到第一乘法器的输出。
18、根据条项17所述的方法,其中,所述处理电路还包括:
第一累加器,连接到第一加法器;和
第二累加器,连接到第二加法器,
第一累加器包括寄存器,
所述方法还包括:
在第一状态下,通过第一累加器将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值;和
通过第一累加器将第一累加器的累加值存储在第一累加器的寄存器中。
19、根据条项18所述的方法,其中,第二累加器包括寄存器,并且所述方法还包括:在第二状态下,
通过第二累加器将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值;并且
通过第二累加器将第二累加器的累加值存储在第二累加器的寄存器中。
20、一种使用用于处理的装置进行计算的方法,所述用于处理的装置包括:
第一区块,
第二区块,
存储器,
输入总线,和
输出总线;
输入总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
第一区块被配置为执行激活的阵列与权重的核的第一卷积;
存储器包括:
第一存储器存储体组,和
第二存储器存储体组;
输入总线包括:
第一分段总线,用于在第一方向上进行数据广播;和
第二分段总线,用于在与第一方向相反的第二方向上进行数据广播;
第一分段总线包括:
第一开关块,和
第二开关块;
第一开关块连接到:
第一区块,和
第一存储器存储体组;
第二开关块连接到:
第二区块,和
第二存储器存储体组;
第二分段总线包括:
第三开关块,和
第四开关块;
第三开关块连接到:
第一区块,和
第一存储器存储体组;
第四开关块连接到:
第二区块,和
第二存储器存储体组;
第一开关块的输入连接到第二开关块的输出;并且
第三开关块的输出连接到第四开关块的输入;
所述方法包括:
在第一总线状态下,通过第一开关块将第一存储器存储体组连接到第一区块,和
通过第二开关块将第二存储器存储体组连接到第二区块。
尽管在此已经具体描述和示出了神经处理器的示例性实施例,但是对于本领域技术人员来说,许多修改和变化将是清楚的。因此,将理解,根据本公开的原理构造的神经处理器可以以不同于在此具体描述的方式来实施。本发明还以以下面的权利要求及其等同物被限定。

Claims (20)

1.一种处理器,包括:
第一区块;
第二区块;
存储器;和
总线,
总线连接到:
存储器,
第一区块,和
第二区块,
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器,
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器,
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器,
第一区块被配置为:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘,并且
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
2.根据权利要求1所述的处理器,其中,在第二状态下,第一队列的输出寄存器包含零。
3.根据权利要求1所述的处理器,还包括:
第一加法器,被配置为:在第一状态下,
连接到第一乘法器的输出和第二乘法器的输出,并且
将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
4.根据权利要求3所述的处理器,还包括:第二加法器,被配置为:在第二状态下,连接到第一乘法器的输出。
5.根据权利要求4所述的处理器,还包括:
第一累加器,连接到第一加法器;和
第二累加器,连接到第二加法器,
第一累加器,包括寄存器,并且被配置为:在第一状态下,
将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值,并且
将第一累加器的累加值存储在第一累加器的寄存器中。
6.根据权利要求5所述的处理器,其中,第二累加器包括寄存器,并且被配置为:在第二状态下,
将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值;并且
将第二累加器的累加值存储在第二累加器的寄存器中。
7.根据权利要求5所述的处理器,还包括:激活零跳过控制电路,被配置为:
确定第一队列的输出寄存器是否包含零,并且
响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
8.根据权利要求7所述的处理器,还包括:复用器,具有:
输入,在复用器的单端口侧连接到第一乘法器;
第一输出,在复用器的多端口侧连接到第一加法器;和
第二输出,在复用器的多端口侧连接到第二加法器。
9.根据权利要求8所述的处理器,其中,激活零跳过控制电路被配置为控制复用器:
在第一状态下,将输入连接到第一输出,并且
在第二状态下,将输入连接到第二输出。
10.根据权利要求1所述的处理器,其中,
第二队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第二队列的输出寄存器,并且
第一区块还被配置为:在第三状态下,在第一乘法器中将第一权重与来自第二队列的第二寄存器的激活相乘。
11.一种用于使用处理电路进行计算的方法,所述处理电路包括:
第一区块,
第二区块,
存储器,和
总线;
总线连接到:
存储器,
第一区块,和
第二区块,
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器;
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器;
所述方法包括:
在第一状态下:
通过第一乘法器将第一权重与来自第一队列的输出寄存器的激活相乘;和
在第二状态下:
通过第一乘法器将第一权重与来自第一队列的第二寄存器的激活相乘。
12.根据权利要求11所述的方法,其中,在第二状态下,第一队列的输出寄存器包含零。
13.根据权利要求11所述的方法,其中,所述处理电路还包括第一加法器,
所述方法还包括:在第一状态下,
将第一加法器连接到第一乘法器的输出和第二乘法器的输出;和
通过第一加法器将从第一乘法器的输出接收的乘积与从第二乘法器的输出接收的乘积相加。
14.根据权利要求13所述的方法,其中,所述处理电路还包括第二加法器,
所述方法还包括:在第二状态下,将第二加法器连接到第一乘法器的输出。
15.根据权利要求14所述的方法,其中,所述处理电路还包括:
第一累加器,连接到第一加法器;和
第二累加器,连接到第二加法器,
第一累加器包括寄存器,
所述方法还包括:在第一状态下,
通过第一累加器将从第一加法器接收的和与第一累加器的寄存器中的值相加,以形成第一累加器的累加值;和
通过第一累加器将第一累加器的累加值存储在第一累加器的寄存器中。
16.根据权利要求15所述的方法,其中,第二累加器包括寄存器,并且所述方法还包括:在第二状态下,
通过第二累加器将从第二加法器接收的和与第二累加器的寄存器中的值相加,以形成第二累加器的累加值;并且
通过第二累加器将第二累加器的累加值存储在第二累加器的寄存器中。
17.根据权利要求15所述的方法,其中,处理电路还包括激活零跳过控制电路,并且所述方法还包括:
通过激活零跳过控制电路确定第一队列的输出寄存器是否包含零,并且
响应于确定第一队列的输出寄存器包含零,使得第一区块在第二状态下进行操作。
18.根据权利要求17所述的方法,其中,所述处理电路还包括:复用器,具有:
输入,在复用器的单端口侧连接到第一乘法器;
第一输出,在复用器的多端口侧连接到第一加法器;和
第二输出,在复用器的多端口侧连接到第二加法器。
19.根据权利要求18所述的方法,还包括:通过激活零跳过控制电路控制复用器:
在第一状态下,将输入连接到第一输出,并且
在第二状态下,将输入连接到第二输出。
20.一种用于使用用于处理的装置进行计算的方法,所述用于处理的装置包括:
第一区块,
第二区块,
存储器,和
总线;
总线连接到:
存储器,
第一区块,和
第二区块;
第一区块包括:
第一权重寄存器,
第二权重寄存器,
激活缓冲器,
第一乘法器,和
第二乘法器;
激活缓冲器被配置为包括:
第一队列,连接到第一乘法器;和
第二队列,连接到第二乘法器;
第一队列包括第一寄存器和与第一寄存器邻近的第二寄存器,第一寄存器是第一队列的输出寄存器;
所述方法包括:
在第一状态下:
在第一乘法器中将第一权重与来自第一队列的输出寄存器的激活相乘;和
在第二状态下:
在第一乘法器中将第一权重与来自第一队列的第二寄存器的激活相乘。
CN201980036663.XA 2018-06-22 2019-06-21 神经处理器 Active CN112513885B (zh)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US201862689008P 2018-06-22 2018-06-22
US62/689,008 2018-06-22
US201962798297P 2019-01-29 2019-01-29
US62/798,297 2019-01-29
US201962841590P 2019-05-01 2019-05-01
US201962841606P 2019-05-01 2019-05-01
US62/841,590 2019-05-01
US62/841,606 2019-05-01
US16/446,610 US20190392287A1 (en) 2018-06-22 2019-06-19 Neural processor
US16/446,610 2019-06-19
PCT/KR2019/007557 WO2019245348A1 (en) 2018-06-22 2019-06-21 Neural processor

Publications (2)

Publication Number Publication Date
CN112513885A true CN112513885A (zh) 2021-03-16
CN112513885B CN112513885B (zh) 2024-02-27

Family

ID=68981979

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980036663.XA Active CN112513885B (zh) 2018-06-22 2019-06-21 神经处理器

Country Status (6)

Country Link
US (6) US20190392287A1 (zh)
JP (1) JP7337103B2 (zh)
KR (1) KR20210013764A (zh)
CN (1) CN112513885B (zh)
TW (1) TWI813708B (zh)
WO (1) WO2019245348A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023004570A1 (en) * 2021-07-27 2023-02-02 Qualcomm Incorporated Activation buffer architecture for data-reuse in a neural network accelerator
CN115878334A (zh) * 2023-03-08 2023-03-31 深圳云豹智能有限公司 一种数据缓存处理方法及其系统、存储介质、电子设备

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6442230B2 (ja) * 2014-10-31 2018-12-19 キヤノン株式会社 情報処理装置、同期制御方法、及びプログラム
US11966835B2 (en) 2018-06-05 2024-04-23 Nvidia Corp. Deep neural network accelerator with fine-grained parallelism discovery
US11132124B2 (en) * 2018-06-12 2021-09-28 Intel Corporation Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
JP2020000197A (ja) * 2018-06-29 2020-01-09 キヤノン株式会社 計数方法、濃度測定装置及び濃度測定システム
US11769040B2 (en) * 2018-09-10 2023-09-26 Nvidia Corp. Scalable multi-die deep learning system
US11263529B2 (en) * 2018-10-10 2022-03-01 Google Llc Modifying machine learning models to improve locality
JP7227769B2 (ja) * 2019-01-10 2023-02-22 キヤノン株式会社 情報処理装置及びメモリ制御方法
US10963746B1 (en) * 2019-01-14 2021-03-30 Xilinx, Inc. Average pooling in a neural network
CN109976903B (zh) * 2019-02-22 2021-06-29 华中科技大学 一种基于层宽内存分配的深度学习异构计算方法和系统
EP3938894B1 (en) 2019-03-15 2023-08-30 INTEL Corporation Multi-tile memory management for detecting cross tile access, providing multi-tile inference scaling, and providing optimal page migration
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
KR20210136994A (ko) * 2019-03-15 2021-11-17 인텔 코포레이션 매트릭스 가속기 아키텍처 내에서의 시스톨릭 분리
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
US11222092B2 (en) 2019-07-16 2022-01-11 Facebook Technologies, Llc Optimization for deconvolution
US20210034956A1 (en) * 2019-07-29 2021-02-04 Hysai Inc. Minimum memory digital convolver
US20210110243A1 (en) * 2019-10-10 2021-04-15 Hewlett Packard Enterprise Development Lp Deep learning accelerator system interface
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
US11537864B2 (en) 2019-11-26 2022-12-27 Apple Inc. Reduction mode of planar engine in neural processor
RU2732201C1 (ru) * 2020-02-17 2020-09-14 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Метод построения процессоров для вывода в сверточных нейронных сетях, основанный на потоковых вычислениях
US11537865B2 (en) * 2020-02-18 2022-12-27 Meta Platforms, Inc. Mapping convolution to a channel convolution engine
JP7469912B2 (ja) * 2020-03-03 2024-04-17 キヤノン株式会社 情報処理装置、推論装置、それらの制御方法、プログラム、記憶媒体
US11797830B2 (en) 2020-03-25 2023-10-24 Western Digital Technologies, Inc. Flexible accelerator for sparse tensors in convolutional neural networks
US11462003B2 (en) * 2020-03-25 2022-10-04 Western Digital Technologies, Inc. Flexible accelerator for sparse tensors in convolutional neural networks
US11604975B2 (en) * 2020-04-09 2023-03-14 Apple Inc. Ternary mode of planar engine for neural processor
US11188778B1 (en) 2020-05-05 2021-11-30 Illumina, Inc. Equalization-based image processing and spatial crosstalk attenuator
US11301214B2 (en) * 2020-06-09 2022-04-12 Verisilicon Microelectronics (Shanghai) Co., Ltd. Device for performing multiply/accumulate operations
US20220066776A1 (en) * 2020-08-25 2022-03-03 Infineon Technologies Ag Accelerating processor based artificial neural network computation
CN112200301B (zh) * 2020-09-18 2024-04-09 星宸科技股份有限公司 卷积计算装置及方法
US11972348B2 (en) 2020-10-30 2024-04-30 Apple Inc. Texture unit circuit in neural network processor
US20220147826A1 (en) * 2020-11-06 2022-05-12 Moffett Technologies Co., Limited Method and system for convolution with workload-balanced activation sparsity
US11665363B2 (en) * 2020-11-26 2023-05-30 Electronics And Telecommunications Research Institute Method, apparatus, system and computer-readable recording medium for feature map information
KR20220078819A (ko) * 2020-12-04 2022-06-13 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
US20220222569A1 (en) * 2021-01-11 2022-07-14 Arm Limited Data processing
US20220244916A1 (en) * 2021-01-29 2022-08-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute in memory
US20220310068A1 (en) * 2021-03-25 2022-09-29 Kwai Inc. Methods and devices for structured pruning for automatic speech recognition
KR102627800B1 (ko) * 2021-05-11 2024-01-23 포항공과대학교 산학협력단 바이너리 뉴럴 네트워크 제어 방법 및 바이너리 뉴럴 네트워크 장치
US11455487B1 (en) * 2021-10-26 2022-09-27 Illumina Software, Inc. Intensity extraction and crosstalk attenuation using interpolation and adaptation for base calling
US20230086802A1 (en) * 2021-09-17 2023-03-23 Qualcomm Incorporated Eliminating memory bottlenecks for depthwise convolutions
US20220012012A1 (en) * 2021-09-24 2022-01-13 Martin Langhammer Systems and Methods for Sparsity Operations in a Specialized Processing Block
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
US20230140542A1 (en) * 2021-11-01 2023-05-04 Advanced Energy Industries, Inc. Tensor non-linear signal processing random access memory
KR20230063519A (ko) 2021-11-02 2023-05-09 삼성전자주식회사 뉴럴 네트워크 연산 장치 및 방법
US20220129320A1 (en) * 2021-11-05 2022-04-28 Debabrata Mohapatra Schedule-aware dynamically reconfigurable adder tree architecture for partial sum accumulation in machine learning accelerators
US20240028556A1 (en) * 2022-07-25 2024-01-25 Xilinx, Inc. Reconfigurable neural engine with extensible instruction set architecture
US20240104280A1 (en) * 2022-09-22 2024-03-28 Apple Inc. Functional Circuit Block Harvesting in Integrated Circuits

Family Cites Families (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285403A (en) 1989-12-29 1994-02-08 U.S. Philips Corporation Arithmetic processing module to be associated with a microprocessor central processing unit
US5446916A (en) 1993-03-26 1995-08-29 Gi Corporation Variable length codeword packer
US5499382A (en) 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
US6058473A (en) 1993-11-30 2000-05-02 Texas Instruments Incorporated Memory store from a register pair conditional upon a selected status bit
US5805913A (en) 1993-11-30 1998-09-08 Texas Instruments Incorporated Arithmetic logic unit with conditional register source selection
US5509129A (en) 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US6016538A (en) 1993-11-30 2000-01-18 Texas Instruments Incorporated Method, apparatus and system forming the sum of data in plural equal sections of a single data word
US5798719A (en) 1994-07-29 1998-08-25 Discovision Associates Parallel Huffman decoder
US6055204A (en) 1997-04-29 2000-04-25 Texas Instruments Incorporated Circuits, systems, and methods for re-mapping memory column redundancy
US6061749A (en) 1997-04-30 2000-05-09 Canon Kabushiki Kaisha Transformation of a first dataword received from a FIFO into an input register and subsequent dataword from the FIFO into a normalized output dataword
US5857035A (en) 1997-05-19 1999-01-05 Hewlett-Packard Company Arithmetic coding compressor for encoding multiple bit values
US6490357B1 (en) 1998-08-28 2002-12-03 Qualcomm Incorporated Method and apparatus for generating encryption stream ciphers
US6195026B1 (en) 1998-09-14 2001-02-27 Intel Corporation MMX optimized data packing methodology for zero run length and variable length entropy encoding
US7174047B2 (en) 2002-03-29 2007-02-06 Matsushita Electric Industrial Co., Ltd. Single-instruction multiple-data (SIMD)-based algorithms for processing video data
US7202872B2 (en) 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US8223966B2 (en) 2006-05-10 2012-07-17 Mediatek Inc. Multiple stream decrypting and decoding systems and related methods thereof
US7898550B2 (en) 2006-06-09 2011-03-01 Via Technologies, Inc. System and method for memory bandwidth compressor
US8069377B2 (en) 2006-06-26 2011-11-29 Micron Technology, Inc. Integrated circuit having memory array including ECC and column redundancy and method of operating the same
US8285766B2 (en) 2007-05-23 2012-10-09 The Trustees Of Princeton University Microprocessor shifter circuits utilizing butterfly and inverse butterfly routing circuits, and control circuits therefor
US8638850B2 (en) * 2009-05-06 2014-01-28 Advanced Micro Devices, Inc. Execution units for context adaptive binary arithmetic coding (CABAC)
CN104252331B (zh) * 2013-06-29 2018-03-06 华为技术有限公司 乘累加器
US20150161927A1 (en) 2013-12-05 2015-06-11 Innolux Corporation Driving apparatus with 1:2 mux for 2-column inversion scheme
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
US11100420B2 (en) 2014-06-30 2021-08-24 Amazon Technologies, Inc. Input processing for machine learning
US10216520B2 (en) 2014-10-06 2019-02-26 Via Technologies, Inc. Compressing instruction queue for a microprocessor
KR102276339B1 (ko) 2014-12-09 2021-07-12 삼성전자주식회사 Cnn의 근사화를 위한 학습 장치 및 방법
US9418458B2 (en) 2015-01-05 2016-08-16 Superfish Ltd. Graph image representation from convolutional neural networks
US10049322B2 (en) 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US20160358069A1 (en) 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US10460230B2 (en) * 2015-06-04 2019-10-29 Samsung Electronics Co., Ltd. Reducing computations in a neural network
EP3104309B1 (en) 2015-06-10 2020-04-01 Samsung Electronics Co., Ltd. Spiking neural network with reduced memory access and reduced in-network bandwidth consumption
US11244225B2 (en) 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US10353861B2 (en) 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Mechanism for communication between architectural program running on processor and non-architectural program running on execution unit of the processor regarding shared resource
US10664751B2 (en) 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
KR102628902B1 (ko) * 2015-10-28 2024-01-24 구글 엘엘씨 계산 그래프들 프로세싱
US9904874B2 (en) 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
WO2017129325A1 (en) 2016-01-29 2017-08-03 Fotonation Limited A convolutional neural network
NL2016285B1 (en) 2016-02-19 2017-09-20 Scyfer B V Device and method for generating a group equivariant convolutional neural network.
FR3050846B1 (fr) 2016-04-27 2019-05-03 Commissariat A L'energie Atomique Et Aux Energies Alternatives Dispositif et procede de distribution de donnees de convolution d'un reseau de neurones convolutionnel
US11055063B2 (en) 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
KR102392510B1 (ko) 2016-05-09 2022-04-29 스트롱 포스 아이오티 포트폴리오 2016, 엘엘씨 산업용 사물 인터넷을 위한 방법들 및 시스템들
KR102459854B1 (ko) * 2016-05-26 2022-10-27 삼성전자주식회사 심층 신경망용 가속기
CN105913823A (zh) 2016-06-23 2016-08-31 武汉华星光电技术有限公司 高解析度解复用器驱动电路
KR20180012439A (ko) 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
US10802992B2 (en) 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
IL281321B (en) * 2016-10-04 2022-07-01 Magic Leap Inc Efficient data layouts for convolutional neural networks
US9940534B1 (en) 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US9959498B1 (en) * 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
KR20180051987A (ko) 2016-11-09 2018-05-17 삼성전자주식회사 인공 신경망의 연산 처리 경로 관리 방법
US10733505B2 (en) 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10423876B2 (en) * 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
US10417560B2 (en) * 2016-12-01 2019-09-17 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs efficient 3-dimensional convolutions
US20180181864A1 (en) 2016-12-27 2018-06-28 Texas Instruments Incorporated Sparsified Training of Convolutional Neural Networks
CN106844294B (zh) 2016-12-29 2019-05-03 华为机器有限公司 卷积运算芯片和通信设备
US10521488B1 (en) * 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US10096134B2 (en) * 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
JP6794854B2 (ja) 2017-02-02 2020-12-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180253636A1 (en) 2017-03-06 2018-09-06 Samsung Electronics Co., Ltd. Neural network apparatus, neural network processor, and method of operating neural network processor
US10067509B1 (en) 2017-03-10 2018-09-04 TuSimple System and method for occluding contour detection
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US10860760B2 (en) * 2017-04-21 2020-12-08 Intel Corporation Systems and methods for implementing learned parameter systems on a programmable integrated circuit
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10410098B2 (en) 2017-04-24 2019-09-10 Intel Corporation Compute optimizations for neural networks
US10706147B1 (en) 2017-05-19 2020-07-07 Amazon Technologies, Inc. Mitigating side-channel attacks via shared cache
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10600147B2 (en) 2017-08-22 2020-03-24 Intel Corporation Efficient memory layout for enabling smart data compression in machine learning environments
US10699160B2 (en) 2017-08-23 2020-06-30 Samsung Electronics Co., Ltd. Neural network method and apparatus
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US20190087713A1 (en) 2017-09-21 2019-03-21 Qualcomm Incorporated Compression of sparse deep convolutional network weights
US10558386B2 (en) 2017-09-22 2020-02-11 Kabushiki Kaisha Toshiba Operation device and operation system
US10366322B2 (en) 2017-10-06 2019-07-30 DeepCube LTD. System and method for compact and efficient sparse neural networks
CN113627458A (zh) 2017-10-16 2021-11-09 因美纳有限公司 基于循环神经网络的变体致病性分类器
GB2560600B (en) 2017-11-06 2020-03-04 Imagination Tech Ltd Nueral Network Hardware
CN110059811A (zh) * 2017-11-06 2019-07-26 畅想科技有限公司 权重缓冲器
US10721114B2 (en) * 2017-11-23 2020-07-21 Huawei Technologies Co., Ltd. Method and system for symbol sequence generation and transmission for non-orthogonal multiple access transmission
US11010658B2 (en) * 2017-12-22 2021-05-18 Intel Corporation System and method for learning the structure of deep convolutional neural networks
EP3506084B1 (en) * 2017-12-28 2020-09-23 IMEC vzw System and method for tunable precision of dot-product engine
CN108133270B (zh) * 2018-01-12 2020-08-04 清华大学 卷积神经网络加速方法及装置
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US11295200B1 (en) 2018-04-20 2022-04-05 Perceive Corporation Time-multiplexed dot products for neural network inference circuit
JP7490572B2 (ja) 2018-05-08 2024-05-27 三星電子株式会社 ニューラル・ネットワーク処理要素
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US20210011732A1 (en) 2019-07-09 2021-01-14 MemryX Inc. Matrix Data Reuse Techniques in Processing Systems

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023004570A1 (en) * 2021-07-27 2023-02-02 Qualcomm Incorporated Activation buffer architecture for data-reuse in a neural network accelerator
CN115878334A (zh) * 2023-03-08 2023-03-31 深圳云豹智能有限公司 一种数据缓存处理方法及其系统、存储介质、电子设备

Also Published As

Publication number Publication date
CN112513885B (zh) 2024-02-27
US20200026978A1 (en) 2020-01-23
US20190392287A1 (en) 2019-12-26
TWI813708B (zh) 2023-09-01
JP2021528764A (ja) 2021-10-21
JP7337103B2 (ja) 2023-09-01
US20200026980A1 (en) 2020-01-23
US11620491B2 (en) 2023-04-04
US20230351151A1 (en) 2023-11-02
WO2019245348A1 (en) 2019-12-26
US11775802B2 (en) 2023-10-03
US11775801B2 (en) 2023-10-03
KR20210013764A (ko) 2021-02-05
TW202014935A (zh) 2020-04-16
US20200234099A1 (en) 2020-07-23
US20200026979A1 (en) 2020-01-23

Similar Documents

Publication Publication Date Title
CN112513885B (zh) 神经处理器
US11847550B2 (en) Sparse convolutional neural network accelerator
TWI667612B (zh) 裝置與運作裝置之方法
CN108268944B (zh) 具有可重塑之存储器之神经网络单元
US10140123B2 (en) SIMD processing lanes storing input pixel operand data in local register file for thread execution of image processing operations
CN106940815B (zh) 一种可编程卷积神经网络协处理器ip核
US11783170B2 (en) Spatially sparse neural network accelerator for multi-dimension visual analytics
KR20240049679A (ko) 인공 신경망에서의 분산 및 협력 계산을 위한 방법 및 장치
JP2016537724A (ja) ベクトル処理動作のために実行ユニットに入力ベクトルデータのインフライトフォーマット変換を提供するためにベクトルデータメモリと実行ユニットとの間でデータフローパスにおいてフォーマット変換回路を利用するベクトル処理エンジン(vpe)および関連するベクトル処理システムと方法
CN102279818B (zh) 支持有限共享的向量数据访存控制方法及向量存储器
KR20180123846A (ko) 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기
CN113312415A (zh) 用于数据库操作的近存储器加速
CN111832716A (zh) 处理器
US20230273729A1 (en) Core group memory processing with group b-float encoding
Qiu et al. An FPGA‐Based Convolutional Neural Network Coprocessor
Zhang et al. Thread: Towards fine-grained precision reconfiguration in variable-precision neural network accelerator
Cain et al. Convolution processing unit featuring adaptive precision using dynamic reconfiguration
Wu et al. Efficient inference of large-scale and lightweight convolutional neural networks on FPGA
Shahan et al. FPGA based convolution and memory architecture for Convolutional Neural Network
CN115081602A (zh) 执行Winograd卷积的计算装置、集成电路装置及板卡
Li et al. The Storage Structure of Convolutional Neural Network Reconfigurable Accelerator Based on ASIC
KR20240064001A (ko) 인코딩된 인에이블 클록 게이터
CN115081604A (zh) 暂存Winograd权值的缓存、计算装置、集成电路装置及板卡
CN117973448A (zh) 一种基于fpga的cnn加速系统

Legal Events

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