CN112424745A - 在mac电路中使用不同核对一组数据执行连续mac运算 - Google Patents

在mac电路中使用不同核对一组数据执行连续mac运算 Download PDF

Info

Publication number
CN112424745A
CN112424745A CN201980047920.XA CN201980047920A CN112424745A CN 112424745 A CN112424745 A CN 112424745A CN 201980047920 A CN201980047920 A CN 201980047920A CN 112424745 A CN112424745 A CN 112424745A
Authority
CN
China
Prior art keywords
mac
address
cycle
circuit
core
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
CN201980047920.XA
Other languages
English (en)
Other versions
CN112424745B (zh
Inventor
张晓谦
E·C·吴
D·伯曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of CN112424745A publication Critical patent/CN112424745A/zh
Application granted granted Critical
Publication of CN112424745B publication Critical patent/CN112424745B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Complex Calculations (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

一种电路布置包含MAC电路(200‑0,200‑1,200‑2,200‑15,200‑n,201‑0,201‑1,201‑2,201‑15,201‑n,202‑0,202‑1,202‑2,202‑15,202‑n,231‑0,231‑1,231‑2,231‑15,231‑n)的阵列(106),其中每个MAC电路包含配置成存储多个核的缓存(332)。所述MAC电路配置成以第一速率接收IFM的第一组数据元素(718)。所述MAC电路配置成在第一MAC周期(710)期间对所述第一组所述数据元素和所述核中与第一OFM深度指数相关联的第一核执行第一MAC运算,其中MAC周期的速率比所述第一速率快。所述MAC电路配置成在第二MAC周期(710)期间对所述第一组所述数据元素和所述核中与第二OFM深度指数相关联的第二核执行第二MAC运算,所述第二MAC周期不间断地跟在所述第一MAC周期后面。

Description

在MAC电路中使用不同核对一组数据执行连续MAC运算
技术领域
本公开大体上涉及在乘累加(multiply-and-accumulate,“MAC”)电路阵列的连续MAC周期(cycle)期间使用不同核(kernel)对一组数据执行MAC运算。
背景技术
神经网络等处理电路系统针对各种不同的问题提供了解决方案。例如,可以使用卷积神经网络(CNN)来进行图像处理。CNN可以使用图形处理单元(GPU)实施,并且使用批处理方法通过将多个类似任务分组并将任务组作为一个批次进行计算来减少计算成本。一批任务可以通过使用多个流处理器(SP)核心在可扩展数目的流式多处理器(SM)中并行计算。GPU的控制器的实施成本可以分摊到多个任务上,但是,CNN的时延将随着批大小的增加而增加,因为GPU必须等待所有任务准备就绪,然后才能以分批模式处理这些任务,以保持CNN的计算效率。
有各种不同的电路可以实施CNN,包含但不限于数字信号处理器(DSP)、通用计算机处理器、可编程集成电路、可编程逻辑装置(PLD)和片上系统(SoC)装置。PLD是一种可以编程成执行指定逻辑函数的可编程集成电路(IC)。现场可编程门阵列(FPGA)是一种PLD类型,它可包含可编程区块的阵列。这些可编程区块包括各种类型的逻辑块,这些逻辑块可包含例如输入/输出块(IOB)、可配置逻辑块(CLB)、专用块随机存取存储器(BRAM)、乘法器、数字信号处理块(DSP)、处理器、时钟管理器、延迟锁定环(DLL)、总线或网络接口,如外围组件互连(PCI)、PCI快速(PCIe)、以太网等等。一些装置包含足够的组件和功能性,以在单个IC芯片上有效地用作完整的计算机系统。具有此类功能性的装置有时被称为SoC。一些SoC装置可包含类似于由各种PLD提供的可编程逻辑的可编程逻辑。
以前的实施方案经常会遇到处理单元和存储器之间的瓶颈。因此,数据的提供速度可能不够快,无法充分利用处理电路。
发明内容
一种电路布置包含乘累加(MAC)电路的阵列,其中每个MAC电路包含配置成存储多个核的缓存(cache)。所述MAC电路配置成以第一速率接收输入特征图(IFM)的第一组数据元素。所述MAC电路配置成在第一MAC周期期间,对所述第一组所述数据元素和所述核(H)中与第一输出特征图(OFM)的深度指数(d2)相关联的第一核执行第一MAC运算,其中MAC周期的速率比所述第一速率快。所述MAC电路配置成在第二MAC周期期间,对所述第一组所述数据元素和所述核(H)中与第二OFM深度指数(d2)相关联的第二核执行第二MAC运算,所述第二MAC连续地跟随所述第一MAC周期。
所述电路布置可包含耦接到所述阵列的控制电路。所述控制电路配置成接收所述第一核在所述缓存中的第一地址,基于所述第一地址生成所述第二核在所述缓存中的第二地址,在所述第一MAC周期期间向所述MAC电路提供所述第一地址,并且在所述第二MAC周期期间向所述MAC电路提供所述第二地址。
所述控制电路还可配置成响应于所述第一地址映射到块数据传递的起始地址,使所述第一地址增加固定值以生成所述第二地址。
所述控制电路还可配置成响应于所述第一地址映射到块数据传递的结束地址,使所述第一地址减少固定值以生成所述第二地址。
所述阵列中的所述MAC电路可配置成在第三MAC周期期间,对所述第一组所述数据元素和所述核(H)中与第三OFM深度指数(d2)相关联的第三核执行第三MAC运算,所述第三MAC周期连续地跟随所述第二MAC周期。
第一控制电路可以耦接到所述阵列。所述第一控制电路配置成接收所述核中的所述第一核在所述缓存中的第一地址,基于所述第一地址生成所述核中的所述第二核在所述缓存中的第二地址,基于所述第一地址生成所述核中的所述第三核在所述缓存中的第三地址,在所述第一MAC周期期间向所述MAC电路提供所述第一地址,在所述第二MAC周期期间向所述MAC电路提供所述第二地址,并且在所述第三MAC周期期间向所述MAC电路提供所述第三地址。
所述第一控制电路还可配置成使所述第一地址增加固定值以生成所述第二地址,并使所述第二地址增加所述固定值以生成所述第三地址。
所述电路布置可包含耦接到所述阵列的第二控制电路。所述第二控制电路配置成以等于或快于所述第一速率的输入速率接收所述IFM的所述第一组所述数据元素和所述IFM的第二组所述数据元素,并且响应于输入控制信号,延迟至少一个MAC周期向所述MAC电路提供所述第二组所述数据元素。
所述阵列中的所述MAC电路可配置成以慢于所述第一速率的第二速率接收所述IFM的第二组所述数据元素,在连续地跟随所述第二MAC周期的第三MAC周期期间对所述第二组所述数据元素和所述核(H)中与第三OFM深度指数(d2)相关联的第三核执行第三MAC运算,在连续地跟随所述第三MAC周期的第四MAC周期期间对所述第二组所述数据元素和所述核(H)中与第四OFM深度指数(d2)相关联的第四核执行第四MAC运算,并且在连续地跟随所述第四MAC周期的第五MAC周期期间对所述第二组所述数据元素和所述核(H)中与第五OFM深度指数(d2)相关联的第五核执行第五MAC运算。
所述电路布置的所述阵列可包含耦接到所述阵列中的每一列MAC电路的多个上下文切换累加器。所述多个上下文切换累加器配置成将所存储值与直接耦接到所述累加器的MAC电路的输出累加,并且利用直接耦接到所述累加器的所述MAC电路的所述输出初始化。
一种方法包含以第一速率向乘累加(MAC)电路的阵列输入输入特征图(IFM)的第一组数据元素。所述方法包含在第一MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的缓存中的第一核(H)执行第一MAC运算,其中所述第一核与第一输出特征图(OFM)的深度指数(d2)相关联,其中MAC周期的速率比所述第一速率快。所述方法包含在连续地跟随所述第一MAC周期的第二MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第二核(H)执行第二MAC运算,其中所述第二核与第二OFM深度指数(d2)相关联。
所述方法可包含向耦接到所述阵列的控制电路输入所述第一核在所述缓存中的第一地址,基于所述第一地址通过所述控制电路生成所述第二核在所述缓存中的第二地址,在所述第一MAC周期期间向所述MAC电路输入所述第一地址,并且在所述第二MAC周期期间向所述MAC电路输入所述第二地址。
生成所述第二地址可包含响应于所述第一地址映射到数据块传递的起始地址,使所述第一地址增加固定值。
生成所述第二地址可包含响应于所述第一地址映射到数据块传递的结束地址,使所述第一地址减少固定值。
所述方法可包含在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第三核(H)执行第三MAC运算,其中所述第三核与第三OFM深度指数(d2)相关联。
所述方法可包含向耦接到所述阵列的第一控制电路输入所述核中的所述第一核在所述缓存中的第一地址,基于所述第一地址通过所述第一控制电路生成所述第二核在所述缓存中的第二地址,基于所述第一地址通过所述第一控制电路生成所述第三核在所述缓存中的第三地址,在所述第一MAC周期期间向所述MAC电路输入所述第一地址,在所述第二MAC周期期间向所述MAC电路输入所述第二地址,并且在所述第三MAC周期期间向所述MAC电路输入所述第三地址。
生成所述第二地址可包含使所述第一地址增加固定值,并使所述第二地址增加所述固定值。
所述方法可包含以等于或快于所述第一速率的输入速率向耦接到所述阵列的第二控制电路输入所述IFM的所述第一组所述数据元素和所述IFM的第二组所述数据元素,并且响应于去往所述第二控制电路的输入控制信号,通过所述第二控制电路延迟至少一个MAC周期向所述MAC电路输入所述第二组所述数据元素。
所述方法可包含以慢于所述第一速率的第二速率向所述阵列中的所述MAC电路输入所述IFM的第二组所述数据元素,并且在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第三核(H)执行第三MAC运算,其中所述第三核与第三OFM深度指数(d2)相关联;在连续地跟随所述第三MAC周期的第四MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第四核(H)执行第四MAC运算。所述第四核与第四OFM深度指数(d2)相关联。所述方法可包含在连续地跟随所述第四MAC周期的第五MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第五核(H)执行第五MAC运算,其中所述第五核与第五OFM深度指数(d2)相关联。
所述方法可包含通过耦接到所述阵列中的每一列MAC电路的多个上下文切换累加器将所存储值与直接耦接到所述累加器的MAC电路的输出累加,并且利用直接耦接到所述累加器的所述MAC电路的所述输出初始化所述累加器。
鉴于下文的具体实施方式以及权利要求书将认识到其它特征。
附图说明
在审阅以下详细描述后并在参考附图后,电路布置和方法的各个方面和特征将变得显而易见,附图中:
图1示出包含控制器、控制齿轮箱(control gearbox)、数据齿轮箱(datagearbox)和MAC电路阵列的示例性电路布置的框图;
图2示出示例性MAC电路阵列的框图;
图3示出图2的MAC电路阵列中的示例性MAC电路的框图;
图4示出利用示例性OFM深度分割的图2的阵列的框图;
图5A示出通过核的行和列索引(u,v)迭代的第一OFM遍次po=0的左下方MAC电路的乘法输出值MUL序列;
图5B示出通过IFM相位指数ni迭代的第一OFM遍次po=0的左下方MAC电路的乘法输出值MUL序列;
图5C示出通过核的行和列索引(u,v)迭代的第一OFM遍次po=0的左上方MAC电路的累加输出值MAC序列;
图5D示出通过IFM相位指数ni迭代的第一OFM遍次po=0的左上方MAC电路的累加输出值MAC序列;
图6A示出通过OFM的行和列索引(r,d)迭代的最左边累加器的OFM输出序列;
图6B示出通过OFM深度指数d2迭代的最左边累加器的OFM输出序列;
图7示出示例性控制齿轮箱的框图;
图8示出MAC电路中的核缓存的示例性布局;
图9示出示例性数据齿轮箱的框图;
图10示出图1的电路布置的示例性时序图,其中OFM遍次(pass)包含两个OFM相位;
图11示出图1的电路布置的示例性时序图,其中OFM遍次包含三个OFM相位;
图12示出图1的电路布置的示例性时序图,其中OFM遍次从包含三个OFM相位切换到包含两个OFM相位;
图13示出示例性输入激活函数单元(IAFU);以及
图14示出上面可以实施所公开的电路和过程的可编程集成电路(IC)。
具体实施方式
在以下描述中,阐述许多具体细节来描述本文中呈现的具体实例。然而,对于本领域技术人员来说,显而易见的是,在没有下文给出的所有具体细节的情况下,可以实践一个或多个其它实例和/或这些实例的变体。在其它实例中,未详细描述公知特征,以免模糊本文中对实例的描述。为了便于说明,可以在不同的图中使用相同的附图标记来表示相同的元件或相同元件的额外实例。
提高卷积神经网络(CNN)等神经网络的计算效率可伴随着增加计算复杂度和计算速度。通过使用以与神经网络的乘累加(MAC)电路的计算速度相等的频率运行的控制器,可以提高计算效率,这使得MAC电路尽可能地保持繁忙。然而,为了适应MAC电路的速度,控制器必须能够处理地址生成的复杂度,这与MAC电路的计算复杂度成正比。增加控制器的逻辑复杂度和速度会使实施成本以指数方式增加。然而,即使控制电路的逻辑以MAC速率运行,控制器向MAC电路提供数据的速率也可能受到诸如存储器之类的其它电路的限制。
所公开的电路布置和方法提供了一种用于在以MAC处理频率(下文称为MAC速率)运行时使CNN的MAC电路阵列尽可能保持繁忙并且同时维持MAC电路的控制器的更慢运行频率的方法。MAC速率可以基于提供给MAC电路的时钟信号。CNN的卷积层(CONV)和全连接层(FC)执行MAC运算。在CNN的其它层中可以执行各种其它算术运算,例如修正线性单元(ReLU)、池化和归一化。如本文所用,“MAC电路”是指乘法器电路、累加器电路和缓存的组合,所述缓存配置成存储MAC运算中要使用的核。由于卷积运算可以并行进行,所以可以使用MAC电路阵列并行地进行卷积运算,从而提高CNN的计算速度。为了最大化阵列的吞吐量,充分利用MAC电路的处理周期(下文称为MAC周期),并使MAC速率最大化。
所公开的方法的计算效率的提高增加了提供给MAC电路的地址和控制模式的复杂度。所公开的方法的实施方案包含一个或多个控制电路,这些控制电路生成阵列的专用地址模式,以从MAC电路的全局存储器和/或缓存读取数据和/或将数据写入全局存储器和/或缓存。控制电路生成专用控制模式,以便对MAC电路的数据和定时操作进行寻址。
所公开的方法是通过分割激活特征深度来时分复用每个MAC电路中的多个(M个)并行线程。控制电路(或“控制器”)以MAC速率为这M个线程(thread)生成地址和控制模式。如本文所使用,“线程”是指在输出特征图的深度指数处的值的计算。地址和控制模式由另一控制电路(以下称为控制齿轮箱)转换成直接映射到MAC电路的缓存的存储器地址,并且地址和控制模式在MAC电路的每个处理周期都被更新。另一控制电路(以下称为数据齿轮箱)将从存储器读取数据的速率调整为将数据提供给MAC电路的另一速率。在一些实例中,数据齿轮箱以慢于数据读取速率的速率向MAC电路数据。在一些实例中,控制齿轮箱和数据齿轮箱向MAC电路提供控制字、地址和数据的速率根据在给定时间点交织在MAC电路中的并行线程的数目(M)而动态变化。例如,所公开的方法可以从MAC电路中的两个并行线程交织切换到MAC电路中的三个并行线程,反之亦然。
多个核的地址交织存储在每个MAC电路的缓存中,以便在连续MAC周期期间对一组数据元素执行多个连续MAC运算。MAC运算的执行速率比向MAC电路提供数据、控制字和地址的速率快,但是控制器的运行频率保持恒定。控制器的运行频率与MAC速率成正比(例如,1/M)。
所公开的方法根据时延(例如,周期时间权衡)估计控制电路的初始逻辑深度,使得管线平衡和重新定时易于实现。
图1示出包含控制器108、控制齿轮箱110、数据齿轮箱104和MAC电路阵列106的示例性电路布置100的框图。控制器108生成用于来自和针对全局存储器102的数据访问的地址模式(address patterns)。数据齿轮箱104耦接到全局存储器102和MAC电路阵列106。数据齿轮箱104针对从全局存储器102读取的数据在控制器108和阵列106之间执行速率调整。控制齿轮箱110耦接到控制器108和阵列106。控制齿轮箱110针对来自控制器108的地址和控制字在控制器108和阵列106之间执行速率调整。从阵列106输出的数据被写入到全局存储器102。数据齿轮箱104、控制齿轮箱110和阵列106的示例性操作在下文结合图4-12加以描述。
图2示出示例性MAC电路阵列的框图。图2所示的阵列可类似于图1所示的阵列106。阵列106包含以m+1行和n+1列布置的MAC电路。阵列106的行0包含MAC电路200-0、200-1、200-2、……200-n;阵列106的行1包含MAC电路201-0、201-1、201-2、……201-n;并且阵列106的行m包含MAC电路231-0、231-1、231-2、……231-n。
在本公开的至少一个实施方案中,阵列106中的每一列包含M个上下文切换并行累加器(context switching parallel accumulators),这M个上下文切换并行累加器耦接到列中专用于M个时分复用线程的相应最顶部MAC电路的。累加器222-0耦接到阵列106中的列0的MAC电路231-0;累加器222-1耦接到列1的MAC电路231-1;累加器222-2耦接到列2的MAC电路231-2;且累加器222-n耦接到列n的MAC电路231-n。每个累加器一起存储阵列106中的每个线程的每个已累加部分点积值并对其进行求和,从而获得每个线程的最终点积值。
在至少一个实施方案中,输出激活函数单元(OAFU)耦接到阵列106中的相应列的累加器。OAFU 224-0耦接到累加器222-0;OAFU 224-1耦接到累加器224-1;OAFU 224-2耦接到累加器222-2;且OAFU 224-n耦接到累加器222-n。每个OAFU向从累加器输出的值应用一个或多个激活函数,例如ReLU、池化和归一化。OAFU的输出可以传递到全局存储器,例如图1所示的全局存储器102。
在至少一个实施方案中,阵列106中的每一行包含耦接到行中的最左侧MAC电路的输入激活函数单元(IAFU)。IAFU 220-0耦接到阵列中的行0的MAC电路200-0;IAFU220-1耦接到行1的MAC电路201-0;且IAFU 220-m耦接到行m的MAC电路231-0。每个IAFU向从全局存储器102读取的数据应用一个或多个激活函数。数据可以是图1所示的数据齿轮箱104提供给IAFU的IFM数据。当绕过OAFU或者向输入到MAC电路的数据和从MAC电路输出的数据应用池化运算时,IAFU可以是启用。IAFU的输出可以直接传递到MAC电路或者传递(例如,周期)回到全局存储器102。下文结合图13进一步论述周期回到全局存储器102。如果IAFU被绕过,那么输入数据被直接馈送到MAC电路中。
如图2所示,输入到阵列106的数据从左到右水平地移位到行中的每个MAC电路。从MAC电路输出的累加值从下到上竖直地移位经过列中的MAC电路。
控制齿轮箱,例如控制齿轮箱110的向阵列提供地址和控制101以执行每个线程的核访问和MAC运算。地址和控制101由所有MAC电路共享,并且在每个MAC周期从下到上从左到右移位。地址和控制103在每个MAC周期从下到上竖直地移位,并且由所有IAFU共享。地址和控制105在每个MAC周期从左到右水平地移位,并且由所有累加器共享,以控制所述M个并行累加器之间的上下文切换。地址和控制107在每个MAC周期从左到右水平地移位,并且由所有OAFU共享。
图2所示的框图及其组件的布置和大小并不限制阵列106的物理组件的布置或大小。尽管图2示出从左到右从下到上的数据流,但是本公开的实施方案不限于此。
图3示出图2的MAC电路阵列中的示例性MAC电路的框图。尽管图3示出的是阵列106中的MAC电路201-0,但是图3中所示的结构适用于阵列106中的每个MAC电路。MAC电路201-0包含乘法电路330、求和电路334和核缓存332。乘法电路330和求和电路334协作以执行MAC运算。乘法电路330向MAC电路201-0输出数据输入X的乘法输出值MUL以及从核缓存332读取的核H。数据X是全局存储器102中的数据或IAFU220-1的输出。数据X向行1的右侧邻近MAC电路(例如,201-1)移位。核H包含特定MAC运算的权重。地址和控制103由控制齿轮箱110提供给MAC电路201-1以从核缓存332读取核H。
求和电路334输出底部邻近MAC电路(例如,200-0)的乘法输出值MUL和累加值的总和。将求和电路334的输出输入到顶部邻近MAC电路(例如,201-0)的求和电路。对于行0中的MAC电路,输入到求和电路的累加值可以初始化为零或偏置值。对于最顶部行m中的MAC电路,将求和电路的输出输出到全局存储器102、累加器(例如,224-0)或OAFU(例如,222-0),因为行m的MAC电路上方不存在任何MAC电路。
阵列106可以是CNN的一部分,使得输入到阵列106中的MAC电路的数据X可以是输入特征图(IFM)的数据,并且从阵列106输出的数据可以是输出特征图(OFM)的数据。阵列106针对特定OFM深度指数d2的输出可以写成方程式1:
Figure BDA0002902765830000091
其中:D1是激活输入特征维度的深度(例如,IFM的数目);D2是激活输出特征维度的深度(例如,OFM的数目);X是索引编为X[r,c,d1]的秩3激活输入,其中d1∈[0,D1-1]是IFM深度指数,r∈[0,H1-1]和c∈[0,W1-1]分别是二维(2D)IFM的行和列索引;H是索引编为H[u,v,d1,d2]的秩4权重输入,其中(d1,d2)指向IFM深度指数d1和OFM深度d2相交处的核,并且u∈[0,Fy-1]和v∈[0,Fx-1]分别是2D核的行和列索引,其中Fy是核的高度,Fx是核的宽度;Sx是沿着列的跨距;Sy是沿着行的跨距;Y是索引编为Y[r,c,d2]的秩3激活输出,其中d2∈[0,D2-1]是OFM深度指数,r∈[0,H2-1]和c∈[0,W2-1]分别是2D OFM的行和列索引;conv2d()是2D卷积算子。卷积运算执行点积运算,如方程
式2中所描述:
Figure BDA0002902765830000092
特定行和列索引(r,c)的OFM被描述为方程式4:
Figure BDA0002902765830000101
IFM深度D1可以划分成多个IFM相位,使得IFM深度指数d1可以表示为方程式4:
d1=niN1+d′1 (4)
其中:N1是MAC电路阵列的高度(例如,阵列的每一列中的MAC电路数目);ni是IFM相位指数,
Figure BDA0002902765830000102
并且d′1是阵列的行索引。超出IFM深度D1或OFM深度D2的核的权重被限制为0,如方程式5中所示:
H[:,:,d1,d2]=0;如果d1≥D1或d2≥D2 (5)
因此,方程式3可以重新写成方程式6:
Figure BDA0002902765830000103
其中:MAC是每次沿着索引编为MAC[r,c,u,v,d2,ni]的一个列在N1个MAC电路上累加的秩6值;(d2,ni)指向IFM[niN1,niN1+N1-1]和OFM深度指数d2相交处的所有核;u∈[0,Fy-1]和v∈[0,Fx-1]分别是2D核的行和列索引;并且r∈[0,H2-1]和c∈[0,W2-1]分别是2D OFM的行和列索引,其中H2是OFM的高度,W2是OFM的宽度。MAC可以如方程式7中所示的那样表示:
Figure BDA0002902765830000104
其中MUL是MAC电路的乘法电路每次的输出。MUL是索引编为MUL[r,c,u,v,d2,d′1,ni]的秩7值,其中(ni,d′1,d2)指向IFM深度指数d1和OFM深度指数d2相交处的核。MUL可以如方程式8中所示的那样表示:
MUL[r,c,u,v,d2,d′1,ni]=X[Syr+u,Sxc+v,niN1+d′1]H[u,v,niN1+d′1,d2] (8)
返回参考图2和3,地址和控制101用于访问核缓存332中在指数[u,v,d2,d′1,ni]处的核H。核H与IFM数据X相乘以生成乘法输出值MUL[r,c,u,v,d2,d′1,ni]。在每一行的所有乘法输出值MUL[r,c,u,v,d2,d′1,ni]都沿着阵列106中的一列MAC电路(例如,200-0、201-0、......231-0)中的求和级联链累加之后,最顶部MAC电路(例如,231-0)在其求和输出处生成MAC[r,c,u,v,d2,ni]。接着,累加器(例如,220-0)存储MAC并执行
Figure BDA0002902765830000111
以获得OFM的特定行和列索引(r,c)的最终点积值。
通过在每个MAC周期针对不同的OFM深度指数执行乘法运算,M个并行线程可以在一个MAC电路内部通过时序共享进行分组。针对不同的OFM深度指数d2,乘法输出值MUL[r,c,u,v,d2,d′1,ni]在每个MAC周期依序更新。OFM深度D2划分成多个OFM相位,使得OFM深度指数d2可以像方程式9中所示的那样表示:
d2=noN2+d′2 (9)
其中:N2是MAC电路阵列的宽度(例如,阵列的每一行中的MAC电路数目);no是OFM相位指数,
Figure BDA0002902765830000112
并且d′2是阵列的列索引。
如果不同的OFM深度指数d2具有相同的列索引d′2,那么这意味着通过具有列索引d′2的MAC电路在对应于不同OFM深度指数d2的不同OFM相位中执行MAC运算。OFM相位的子集分组在一起作为一个OFM遍次。多个OFM相位一起进行时分复用。因为任何一个大于一的偶数整数都可以被二或三整除,所以多个OFM相位指数no可以分组在一起作为OFM遍次指数po,如方程式10中所描述:
Figure BDA0002902765830000113
Figure BDA0002902765830000114
在一些实施方案中,OFM遍次包含两个OFM相位和/或三个OFM相位。如果
Figure BDA0002902765830000115
是奇数整数,那么所有OFM遍次包含两个OFM相位。如果
Figure BDA0002902765830000116
是大于一的偶数整数,那么除最后一个OFM遍次以外的所有OFM遍次包含两个OFM相位,且最后一个OFM遍次包含三个OFM相位。
图4示出利用示例性OFM深度分割的图2的阵列106的框图。以下实例是基于下表1中的参数。
参数 描述
D<sub>1</sub> IFM的数目 128
D<sub>2</sub> OFM的数目 208
N<sub>1</sub> MAC电路阵列的高度 32
N<sub>2</sub> MAC电路阵列的宽度 16
表1
IFM相位的数目是
Figure BDA0002902765830000121
因此存在四个IFM相位(ni∈[0,3])。OFM相位的数目是
Figure BDA0002902765830000122
因此存在十三个OFM相位(no∈[0,12])。这十三个OFM相位分割成六个OFM遍次(po∈[0,5])。因为
Figure BDA0002902765830000123
是大于一的偶数整数(12),所以前五个OFM遍次(po∈[0,4])中的每一个包含前十个OFM相位(no∈[0,9])中的两个。第六个也是最后一个OFM遍次(po=5)包含三个OFM相位(no∈[10,12])。因此,有两个或三个线程在MAC电路中交织。
每个MAC电路每次在一个OFM遍次po中针对不同的OFM深度指数d2生成乘法输出值MUL[r,c,u,v,d2,d′1,ni]。例如,通过每两个MAC周期重复一次模式MUL[r,c,u,v,0,d′1,ni],MUL[r,c,u,v,16,d′1,ni],最左侧MAC电路(例如,200-0(0,0)、201-0(1,0)、202-0(2,0)、231-0(31,0))在第一OFM遍次po=0中针对OFM深度指数d2=0、16生成乘法输出值MUL。MUL[r,c,u,v,0,d′1,ni]在所述两个MAC周期中的第一个MAC周期期间执行,且MUL[r,c,u,v,16,d′1,ni]在所述两个MAC周期中的第二个MAC周期期间执行。
左上角MAC电路231-0(31,0)沿着单个列对乘法输出值MUL求和,并通过每两个MAC重复一次模式MAC[r,c,u,v,0,ni],MAC[r,c,u,v,16,ni],在第一OFM遍次po=0中针对OFM深度指数d2=0、16生成MAC输出值。MAC[r,c,u,v,0,ni]在所述两个MAC周期中的第一个MAC周期期间执行,且MAC[r,c,u,v,16,ni]在所述两个MAC周期中的第二个MAC周期期间执行。在多个MAC周期中,通过以时间交织的方式针对OFM的特定行和列索引(r,c)执行
Figure BDA0002902765830000124
Figure BDA0002902765830000125
左上角累加器(例如,222-0)在两个连续MAC周期的突发中在第一OFM遍次po=0中针对OFM深度指数d2=0、16生成最终点积Y[r,c,0]、Y[r,c,16]。
Figure BDA0002902765830000131
的排序取决于内周期是通过核的行和列索引(u,v)迭代还是通过IFM相位指数ni迭代。继续具有3x3核的图4的实例,图5A示出通过核的行和列索引(u,v)迭代的第一OFM遍次po=0的左下方MAC电路200-0(0,0)的乘法输出值MUL序列。相比之下,图5B示出通过IFM相位指数ni迭代的第一OFM遍次po=0的左下方MAC电路200-0(0,0)的乘法输出值MUL序列。图5C示出通过核的行和列索引(u,v)迭代的第一OFM遍次po=0的左上方MAC电路231-0(31,0)的累加输出值MAC序列。相比之下,图5D示出通过IFM相位指数ni迭代的第一OFM遍次po=0的左上方MAC电路231-0(31,0)的累加输出值MAC序列。
因为核的维度大于一(Fy>1且Fx>1)或输入激活大于一
Figure BDA0002902765830000132
所以最顶部累加器可能需要多个MAC周期来生成OFM的特定行和列索引(r,c)的最终点积Y[r,c,d2]。输出有效序列在一突发中输出,其中突发长度等于一个OFM遍次中OFM相位的数目。OFM输出序列
Figure BDA0002902765830000133
取决于内周期是通过OFM的行和列索引(r,c)迭代还是通过OFM深度指数d2迭代。继续具有7x7 OFM的图4的实例,图6A示出通过OFM的行和列索引(r,c)迭代的最左边累加器222-0的OFM输出序列。相比之下,图6B示出通过OFM深度指数d2迭代的最左边累加器222-0的OFM输出序列。
尽管图4的实例示出了包含两个OFM相位的五个OFM遍次和包含三个OFM相位的第六OFM遍次,但是本公开的实施方案不限于此。OFM遍次可包含任何大小的OFM相位组形成的任何组合。但是,MAC周期的利用率可能不是最大化的。在一个实施方案中,在图4的实例中的十三个OFM相位可以分割成七个OFM遍次(po∈[0,6]),每个OFM遍次包含两个OFM相位。两个线程在一个MAC电路中交织。MAC周期在前六个OFM遍次(po∈[0,5])期间被充分利用,但是在最后一个OFM遍次(po=6)期间利用率是50%。也就是说,这两个线程中只有一个用于最后一个OFM遍次。在另一实施方案中,这十三OFM相位分割成四个OFM遍次(po∈[0,3]),每个OFM遍次包含四个OFM相位。控制器108以等于四分之一MAC速率的速率运行。四个线程在一个MAC电路中交织。MAC周期在前三个OFM遍次(po∈[0,2])期间被充分利用,但是在最后一个OFM遍次(po=3)期间利用率是25%。也就是说,这四个线程中只有一个用于最后一个OFM遍次。
图7示出示例性控制齿轮箱110的框图。控制齿轮箱110是耦接到控制器108和阵列106的控制电路。控制齿轮箱110向阵列106提供从控制器108接收到的控制字720,以及存储在阵列106中的MAC电路的缓存中的核的地址722。由于控制字720和/或核地址从控制器108输出的时间和阵列106中的MAC电路准备控制字720和/或核地址722的时间之间可能不匹配,所以至少一个实施方案包含用于执行控制器108和阵列106之间的速率调整的控制齿轮箱110。控制齿轮箱110接收指示控制器108的运行频率的信号708、指示MAC速率的另一信号710,以及来自控制器108的指示何时向阵列106提供控制字720和/或核地址722的输入控制信号(例如,phase_update_vld 702、phase_update_id 704、phase_update_en 706)。
返回参考图4的实例,控制器108的运行频率是MAC速率的一半。如果一个OFM遍次包含两个OFM相位,那么MAC电路准备每两个MAC周期更新一次控制字720。如果一个OFM遍次包含三个OFM相位,那么MAC电路准备每三个MAC周期更新一次控制字720。因为在一个OFM遍次期间多个线程在每个MAC电路中交织且线程以MAC速率针对特定运算依序处理,所以用于特定运算的控制字(例如,写入启用或读取启用)在多个MAC周期内保持有效(例如,以MAC速率依序读取或写入多个元素)。
所公开的方法包含作为具有多个MAC周期(例如,两个或三个MAC周期)的运算周期的原子操作,向MAC电路提供控制字(control word)720。例如,如果两个或三个线程以MAC速率在MAC电路中交织,那么控制字720每两个或三个MAC周期更新一次。但是,控制器108以控制器108的运行频率向控制齿轮箱108提供控制字714足以使控制齿轮箱110根据MAC电路的需要向阵列106提供控制字720。
图7示出控制齿轮箱110的3线控制接口。控制信号phase_update_vld 702和phase_update_en 706可以是数字信号。控制信号phase_update_id 704是标识时钟信号710的时钟周期的信号。如图10-12的时序图(在下文进一步描述)中所示,时钟信号710的偶数时钟周期表示为控制信号phase_update_id 704中的“a”,且奇数周期表示为“b”。当MAC周期710在偶数和奇数MAC周期之间交替时,控制信号phase_update_id 704在“a”和“b”之间交替。控制齿轮箱110相对于控制字的运算可以用下面的伪代码描述:
Figure BDA0002902765830000141
Figure BDA0002902765830000151
“默认值”是指不是输入到控制齿轮箱110的控制齿轮箱的默认内部值。下文结合图10-12进一步论述伪代码。
如果有奇数个线程以MAC速率在MAC电路中交织,那么控制齿轮箱110可以在原子操作周期之后交替地在偶数或奇数MAC周期中更新控制字720。有时,控制字720在偶数MAC周期中更新(例如,phase_update_id 704是“a”),有时控制字720在奇数MAC周期中更新(例如,phase_update_id 704是“b”)。如果有偶数个线程交织,那么控制字720在偶数MAC周期中连续更新(例如,phase_update_id 704保持为“a”)或者在奇数MAC周期中连续更新(例如,phase_update_id 704保持为“b”)。
由于线程交织,所以MAC电路在每一MAC周期准备另外一个核的地址(例如,以MAC速率从连续地址读取或写入到连续地址)。但是,控制器108以控制器108的运行频率输出一个核的基地址。为了在每个MAC周期向MAC电路提供核的地址,控制齿轮箱110使从控制器108接收到的基地址增加或减少一固定值,这取决于基地址如何映射核缓存332的物理地址。例如,如果基地址映射到块数据传递的起始地址,那么基地址增加一固定值。如果基地址映射到块数据传递的结束地址,那么基地址减少一固定值。核的地址在MAC电路的核缓存332中交织存储。控制器108以控制器108的运行频率生成基地址。
图8示出MAC电路中的核缓存的示例性布局。核的元素在MAC电路的缓存的连续存储器空间中交织存储,例如图3中所示的核缓存332。图8示出用于存储对应于图4的实例的OFM深度指数(d2=0、16)的核元素的缓存布局。H[u,v,d1,d2]指向IFM深度指数d1和OFM深度d2相交处的二维(2D)核(d1,d2)的行索引u和列索引v处的核元素。例如,H(0,0,0,0)指向IFM深度指数0和OFM深度指数0相交处的核的行索引0和列索引0处的核元素。第一核的第一元素(H(0,0,0,0))存储于核缓存地址0处,第二核的第一元素(H(0,0,0,16))存储于核缓存地址1处,第一核的第二元素(H(0,1,0,0))存储于核缓存地址2处,第二核的第二元素(H(0,1,0,16))存储于核缓存地址3处,以此类推。核缓存地址对应于图7中的地址722。在第一OFM遍次po=0期间,对应于OFM深度指数d2=0、16的OFM相位在每个MAC电路中交织。两个不同核对应于这两个OFM深度指数H[u,v,niN1+d′1,0]和H[u,v,niN1+d′1,16],它们在两个连续MAC周期期间用于相应的MAC运算。但是,控制器108并不是在每个MAC周期都以MAC速率生成核的缓存地址以跟上MAC电路。相反,控制器108以控制器108的运行频率(例如,MAC速率的一半)生成基地址。控制齿轮箱110基于从控制器108接收到的基地址在每个MAC周期生成核的直接映射缓存地址。对于包含三个OFM相位的最后一个OFM遍次po=5,每三个MAC周期更新一次基地址。但是,控制器108的运行频率不变;控制器108仍然以MAC速率的一半运行。
例如,如图8中所示,控制齿轮箱110从控制器108接收第一核的第一元素(H(0,0,0,0))的基地址0。基地址0映射到核缓存地址0。在从控制器108接收第一核的第二元素(H(0,1,0,0))的基地址1之前,控制齿轮箱110使基地址0增加固定值以生成第二核的第一元素(H(0,0,0,16))的核缓存地址1。此处,固定值是一。接着,控制齿轮箱110从控制器108接收映射到核缓存地址2的第一核的第二元素(H(0,1,0,0))的基地址1。控制齿轮箱110针对从控制器108接收到的每个基地址重复进行增加操作。控制齿轮箱110以控制器108的运行速率接收基地址,但是控制齿轮箱110以MAC速率输出核缓存地址。控制齿轮箱110生成一个或多个其它核的元素的地址,使得控制器108的运行频率不增加,且MAC速率不减小。
尽管在图8中未示出,但是控制齿轮箱110可以根据单个基地址生成多个核的元素的多个核缓存地址。例如,在最后一个OFM遍次po=5中,控制齿轮箱110从控制器108接收第一核的第一元素(H(0,0,0,160))的第一基地址。在接收第一核的第二元素(H(0,1,0,160))的第二基地址之前,控制齿轮箱110使第一基地址增加固定值以生成第二核的第一元素(H(0,0,0,176))的第一核缓存地址。同样在接收第二基地址之前,控制齿轮箱110使第一核缓存地址增加固定值以生成第三核的第一元素(H(0,0,0,192))的第二核缓存地址。尽管核缓存地址是由控制齿轮箱110在从控制器108接收下一基地址之前生成的,但是所述下一基地址可以由控制齿轮箱110在控制齿轮箱110输出根据先前基地址生成的核缓存地址之前接收。
图9示出示例性数据齿轮箱104的框图。如图1所示,数据齿轮箱104是耦接到控制器108、全局存储器102和阵列106的控制电路。数据齿轮箱104向阵列106中的MAC电路提供从全局存储器102接收到的数据(例如,IFM数据718)。由于IFM数据712从全局存储器102输出的时间和阵列106中的MAC电路准备IFM数据718的时间之间可能不匹配,所以至少一个实施方案包含用于执行控制器108、全局存储器102和阵列106之间的速率调整的数据齿轮箱104。数据齿轮箱104接收指示控制器108和/或全局存储器102的运行频率的信号708、指示MAC速率的信号710,以及来自控制器108的指示何时向阵列106提供IFM数据718的输入控制信号(例如,phase_update_vld 702、phase_update_id 704、phase_update_en 706)。
返回参考图4的实例,控制器108的运行频率是MAC速率的一半。如果一个OFM遍次包含两个OFM相位,那么MAC电路准备每两个MAC周期更新一次IFM数据718。如果一个OFM遍次包含三个OFM相位,那么MAC电路准备每三个MAC周期更新一次IFM数据718。因为在一个OFM遍次期间多个线程在每个MAC电路中交织且线程以MAC速率针对特定运算依序处理,所以特定MAC运算的IFM数据718在多个MAC周期内保持有效。
所公开的方法包含向MAC电路提供IFM数据718,作为具有多个MAC周期(例如,两个或三个MAC周期)的运算周期的原子操作。例如,如果两个或三个线程以MAC速率在MAC电路中交织,那么IFM数据718每两个或三个MAC周期更新一次。但是,全局存储器102以控制器108的运行频率向数据齿轮箱104提供IFM数据712足以使数据齿轮箱104根据MAC电路的需要向阵列106提供IFM数据718。
图9示出数据齿轮箱104的3线控制接口。控制信号phase_update_vld 702和phase_update_en 706可以是数字信号。控制信号phase_update_id 704是标识时钟信号710的时钟周期的信号。如图10-12的时序图(在下文进一步描述)中所示,时钟信号710的偶数时钟周期表示为控制信号phase_update_id 704中的“a”,且奇数周期表示为“b”。当MAC周期710在偶数和奇数MAC周期之间交替时,控制信号phase_update_id 704在“a”和“b”之间交替。数据齿轮箱104的运算可以用下面的伪代码描述:
Figure BDA0002902765830000171
Figure BDA0002902765830000181
“默认值”是指不是输入到数据齿轮箱104的默认内部值。下文结合图10-12进一步论述伪代码。
如果有奇数个线程以MAC速率在MAC电路中交织,那么数据齿轮箱104可以在原子操作周期之后交替地在偶数或奇数MAC周期中更新IFM数据718。有时,IFM数据718在偶数MAC周期中更新(例如,phase_update_id 704是“a”),有时IFM数据718在奇数MAC周期中更新(例如,phase_update_id 704是“b”)。如果有偶数个线程交织,那么IFM数据718在偶数MAC周期中连续更新(例如,phase_update_id 704保持为“a”)或者在奇数MAC周期中连续更新(例如,phase_update_id 704保持为“b”)。
图10示出图1的电路布置的示例性时序图,其中OFM遍次包含两个OFM相位。控制器108的运行频率708是MAC速率710的一半。以运行频率708从全局存储器102读取IFM数据712并将其输入到数据齿轮箱104。控制字714以运行频率708由控制器108输出,并被输入到控制齿轮箱110。
根据上述在控制信号phase_update_vld 702和phase_update_en 706为高时控制齿轮箱110和数据齿轮箱104的伪代码,如果与MAC周期710相关联的标识符phase_id 716匹配控制信号phase_update_id 704,那么IFM数据718和控制字720分别从数据齿轮箱104和控制齿轮箱110输出。在图10中,控制信号phase_update_vld 702和phase_update_en 706为高(例如,逻辑“1”),并且控制信号phase_update_id 704连续指示“a”(例如,偶数MAC周期)。因此,在与“a”相关联的MAC周期710期间,IFM数据718和控制字720分别从数据齿轮箱104和控制齿轮箱110输出。
因为图10中的OFM遍次包含两个OFM相位,所以每个OFM遍次需要两个核的地址722。核地址A0是核缓存地址(例如,图8中所示的核缓存地址0),它可以与由控制器108生成的基地址(例如,基地址0)相同。核地址A1是由控制齿轮箱110根据对应于核地址A0的基地址生成的核缓存地址。
核地址A0属于针对第一OFM遍次的第一OFM深度指数的第一核,且核地址A1属于针对第一OFM遍次的第二OFM深度指数的第二核,它们用于在第一OFM遍次期间对IFM数据A执行的MAC运算。核地址B0属于针对第二OFM遍次的第一OFM深度指数的第三核,且核地址B1属于针对第二OFM遍次的第二OFM深度指数的核,它们用于在第二OFM遍次期间对IFM数据B进行的MAC运算。
图11示出图1的电路布置的示例性时序图,其中OFM遍次包含三个OFM相位。根据上述控制信号phase_update_vld 702和phase_update_en 706为高时控制齿轮箱110和数据齿轮箱104的伪代码,如果与MAC周期710相关联的标识符phase_id 716匹配控制信号phase_update_id 704,那么IFM数据718和控制字720分别从数据齿轮箱104和控制齿轮箱110输出。
在图11中,控制信号phase_update_vld 702和phase_update_en 706一开始为高(例如,逻辑“1”)。控制信号phase_update_id 704一开始指示“a”(例如,偶数MAC周期),接着指示“b”(例如,奇数MAC周期),然后无关。因为OFM遍次包含三个OFM相位,所以控制器108使IFM数据712在控制器108的两个连续运行周期708期间从全局存储器102读取,然后在一个周期内保持。因为控制信号phase_update_id 704一开始指示“a”,所以在与“a”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据A和控制字A。与图10相比,因为控制信号phase_update_id 704接着指示“b”,所以在与“b”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据B和控制字B。因此,IFM数据A和控制字A在三个MAC周期710而不是如图10中所示的两个时钟周期内保持有效,因为输出IFM数据B和控制字B一直延迟到MAC周期710的标识符是“b”。在与“a”相关联的MAC周期710期间,输出IFM数据C和控制字C,且在与“b”相关联的MAC 710期间,输出IFM数据D和控制字D。
因为图11中的OFM遍次包含三个OFM相位,所以每个OFM遍次需要三个核的地址。核地址A0是核缓存地址(例如,图8中所示的核缓存地址0),它可以与由控制器108生成的基地址(例如,基地址0)相同。核地址A1和A2是由控制齿轮箱110根据对应于核地址A0的基地址生成的核缓存地址。
核地址A0属于针对第一OFM遍次的第一OFM深度指数的第一核,核地址A1属于针对第一OFM遍次的第二OFM深度指数的第二核,且核地址A2属于针对第一OFM遍次的第三OFM深度指数的第三核,它们用于在第一OFM遍次期间对IFM数据A执行的MAC运算。核地址B0属于针对第二OFM遍次的第一OFM深度指数的第一核,核地址B1属于针对第二OFM遍次的第二OFM深度指数的第二核,且核地址B2属于针对第二OFM遍次的第三OFM深度指数的第三核,它们用于在第二OFM遍次期间对IFM数据B进行的MAC运算。
当控制信号phase_update_vld 702和phase_update_en 706为低(例如,逻辑“0”)时,默认数据由数据齿轮箱104和控制齿轮箱110输出。
图12示出图1的电路布置的示例性时序图,其中OFM遍次从包含三个OFM相位切换到包含两个OFM相位。前三个OFM遍次包含三个OFM相位。在与“a”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据A和控制字A。在与“b”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据B和控制字B。在与“a”相关联的MAC 710期间,输出IFM数据C和控制字C。
后四个OFM遍次包含两个OFM相位。因此,当IFM数据D和控制字D分别输入到数据齿轮箱104和控制齿轮箱110时,分别输入到数据齿轮箱104和控制齿轮箱110的IFM数据712和控制字714的模式从在控制器108的两个运行周期708内读取/生成然后在一周期内保持变成在控制器108的每个运行周期708读取/生成。类似地,控制信号phase_update_id 704的模式从与包含三个OFM相位的OFM遍次相关联的“a、b、无关”模式变成与包含两个OFM相位的OFM遍次相关联的恒定“b”模式。控制信号phase_update_id 704一直指示“b”,因为当IFM数据D和控制字D分别输入到数据齿轮箱104和控制齿轮箱110时,控制信号phase_update_id704指示“b”。
图13示出示例性输入激活函数单元(IAFU)。如果IAFU的输出被直接输入到阵列106中的MAC电路,那么阵列的每一行的IAFU内部只存在一个线程,因为激活输入(X[Syr+u,Sxc+v,niN1+d′1])每两个或三个MAC周期更新一次。如果IAFU的输出周期回到全局存储器102,那么线程可以根据与阵列中的MAC电路类似的交织方案进行交织。图13示出基于图4的实例中的参数的IAFU的深度分割实例。存在四个IFM相位ni∈[0,3],并且这四个IFM相位分割成两个IFM遍次pi∈[0,1]。每个IFM遍次po∈[0,1]包含两个IFM相位,使得两个IFM相位在一个IAFU中交织。每个IAFU每次在一个IFM遍次(pi)中针对不同IFM深度指数(d1)生成一个激活函数输出。因为激活深度在应用激活函数之后不变,所以IFM输入深度序列与OFM输出深度序列相同。
图14示出上面可以实施所公开的电路和过程的可编程集成电路(IC)800。可编程IC也可称为包含现场可编程门阵列逻辑(FPGA)以及其它可编程资源的片上系统(SoC)。FPGA逻辑可在阵列中包含数种不同类型的可编程逻辑块。例如,图14示出可编程IC 800,其包含大量不同的可编程区块,包含多千兆位收发器(MGT)801、可配置逻辑块(CLB)802、随机存取存储器块(BRAM)803、输入/输出块(IOB)804、配置和定时逻辑(CONFIG/CLOCKS)805、数字信号处理块(DSP)806、专用输入/输出块(I/O)807,如时钟端口,以及其它可编程逻辑808,例如数字时钟管理器、模/数转换器、系统监测逻辑等等。一些具有FPGA逻辑的可编程IC还包含专用处理器块(PROC)810与内部和外部重新配置端口(未示出)。
在一些FPGA逻辑中,每个可编程区块包含与每个邻近区块中的对应互连元件之间具有标准化连接的可编程互连元件(INT)811。因此,可编程互连元件结合在一起实施所示FPGA逻辑的可编程互连结构。可编程互连元件INT 811还包含与同一区块内的可编程逻辑元件之间的连接,如由图14顶部处所包含的实例所示。
例如,CLB 802可包含可以编程成实施用户逻辑的可配置逻辑元件CLE 812,以及单个可编程互连元件INT 811。除了一个或多个可编程互连元件之外,BRAM 803还可包含BRAM逻辑元件(BRL)813。通常,区块中所包含的互连元件的数目取决于区块的高度。所示BRAM区块具有与五个CLB相同的高度,但是还可使用其它数目(例如,四个)。除了适当数目的可编程互连元件之外,DSP区块806还可包含DSP逻辑元件(DSPL)814。例如,除了可编程互连元件INT 811的一个实例之外,IOB 804还可包含输入/输出逻辑元件(IOL)815的两个实例。本领域的技术人员将清楚,例如连接到I/O逻辑元件815的实际I/O接合垫使用金属制造并且在各种所示逻辑块上方分层的,通常不限于输入/输出逻辑元件815的区域。
裸片中心附近的柱状区域(在图14中加阴影示出)用于配置、时钟和其它控制逻辑。从这个柱延伸的水平区域809用于跨可编程IC的广度分布时钟和配置信号。应注意,对“柱状”和“水平”区域的引用是相对于在纵向定向上查看图式而言的。
一些利用图14中所示的架构的可编程IC包含破坏组成可编程IC的大部分的规则柱状结构的额外逻辑块。这些额外逻辑块可以是可编程块和/或专用逻辑。例如,图14中所示的处理器块PROC 810跨越数列CLB和BRAM。
应注意,图14仅意在说明一个示例性可编程IC架构。一列中逻辑块的数目、列的相对宽度、列的数目和次序、列中所包含的逻辑块的类型、逻辑块的相对大小以及图14顶部处包含的互连/逻辑实施方案仅仅是示例性的。例如,在一个实际的可编程IC中,通常在CLB出现的地方包含超过一列邻近的CLB,以便有效实施用户逻辑。
尽管在一些情况下可以单独的图式描述方面和特征,但应了解,来自一个图式的特征可与另一图式的特征组合,即使所述组合未明确地示出或明确地描述为组合。
所述电路和方法被认为适用于用于格式化数据以执行卷积运算的各种系统。鉴于本说明书,其它方面和特征对于所属领域的技术人员将是显而易见的。这些电路和方法可以实施为配置成执行软件的一个或多个处理器、专用集成电路(ASIC)或可编程逻辑装置上的逻辑。希望说明书和附图仅被视为示例,并且通过所附权利要求书指示本发明的真实范围。

Claims (15)

1.一种电路布置,其特征在于,所述电路布置包括:
乘累加MAC电路的阵列,其中每个MAC电路包含配置成存储多个核的缓存,且所述MAC电路配置成:
以第一速率接收输入特征图IFM的第一组数据元素;
在第一MAC周期期间,对所述第一组所述数据元素和所述多个核H中与第一输出特征图OFM的深度指数d2相关联的第一核执行第一MAC运算,其中MAC周期的速率比所述第一速率快;以及
在第二MAC周期期间,对所述第一组所述数据元素和所述多个核H中与第二OFM深度指数d2相关联的第二核执行第二MAC运算,所述第二MAC周期连续地跟随所述第一MAC周期。
2.根据权利要求1所述的电路布置,其特征在于,所述电路布置进一步包括控制电路,所述控制电路耦接到所述阵列且配置成:
接收所述第一核在所述缓存中的第一地址;
基于所述第一地址,生成所述第二核在所述缓存中的第二地址;
在所述第一MAC周期期间向所述MAC电路提供所述第一地址;以及
在所述第二MAC周期期间向所述MAC电路提供所述第二地址。
3.根据权利要求2所述的电路布置,其特征在于:
所述控制电路配置成响应于所述第一地址映射到块数据传递的起始地址,使所述第一地址增加固定值以生成所述第二地址;以及
所述控制电路配置成响应于所述第一地址映射到块数据传递的结束地址,使所述第一地址减少固定值以生成所述第二地址。
4.根据权利要求1至3中任一项所述的电路布置,其特征在于,所述阵列中的所述MAC电路配置成在第三MAC周期期间对所述第一组所述数据元素和所述核H中与第三OFM深度指数d2相关联的第三核执行第三MAC运算,所述第三MAC周期连续地跟随所述第二MAC周期。
5.根据权利要求1至3中任一项所述的电路布置,其特征在于,所述阵列中的所述MAC电路配置成在第三MAC周期期间对所述第一组所述数据元素和所述多个核H中与第三OFM深度指数d2相关联的第三核执行第三MAC运算,所述第三MAC周期连续地跟随所述第二MAC周期,并且所述电路布置进一步包括第一控制电路,所述第一控制电路耦接到所述阵列且配置成:
接收所述多个核中的所述第一核在所述缓存中的第一地址;
基于所述第一地址,生成所述多个核中的所述第二核在所述缓存中的第二地址;
基于所述第一地址,生成所述多个核中的所述第三核在所述缓存中的第三地址;
在所述第一MAC周期期间向所述MAC电路提供所述第一地址;
在所述第二MAC周期期间向所述MAC电路提供所述第二地址;以及
在所述第三MAC周期期间向所述MAC电路提供所述第三地址。
6.根据权利要求1至3中任一项所述的电路布置,其特征在于,所述阵列中的所述MAC电路配置成在第三MAC周期期间对所述第一组所述数据元素和所述多个核H中与第三OFM深度指数d2相关联的第三核执行第三MAC运算,所述第三MAC周期连续地跟随所述第二MAC周期,并且所述电路布置进一步包括第一控制电路,所述第一控制电路耦接到所述阵列且配置成:
接收所述多个核中的所述第一核在所述缓存中的第一地址;
使所述第一地址增加固定值以生成第二地址;以及
使所述第二地址增加所述固定值以生成第三地址;
在所述第一MAC周期期间向所述MAC电路提供所述第一地址;
在所述第二MAC周期期间向所述MAC电路提供所述第二地址;
在所述第三MAC周期期间向所述MAC电路提供所述第三地址。
7.根据权利要求1至3中任一项所述的电路布置,其特征在于,所述阵列中的所述MAC电路配置成在第三MAC周期期间对所述第一组所述数据元素和所述多个核H中与第三OFM深度指数d2相关联的第三核执行第三MAC运算,所述第三MAC周期连续地跟随所述第二MAC周期,并且所述电路布置进一步包括:
第一控制电路,其耦接到所述阵列且配置成:
接收所述多个核中的所述第一核在所述缓存中的第一地址;
使所述第一地址增加固定值以生成第二地址;以及
使所述第二地址增加所述固定值以生成第三地址;
在所述第一MAC周期期间向所述MAC电路提供所述第一地址;
在所述第二MAC周期期间向所述MAC电路提供所述第二地址;以及
在所述第三MAC周期期间向所述MAC电路提供所述第三地址;以及
第二控制电路,其耦接到所述阵列且配置成:
以等于或快于所述第一速率的输入速率接收所述IFM的所述第一组数据元素和所述IFM的第二组所述数据元素;以及
响应于输入控制信号,延迟至少一个MAC周期向所述MAC电路提供所述第二组所述数据元素。
8.根据权利要求1至3中任一项所述的电路布置,其特征在于,所述阵列中的所述MAC电路配置成:
以慢于所述第一速率的第二速率接收所述IFM的第二组所述数据元素;
在第三MAC周期期间对所述第二组所述数据元素和所述多个核H中与第三OFM深度指数d2相关联的第三核执行第三MAC运算,所述第三MAC周期连续地跟随所述第二MAC周期;
在第四MAC周期期间对所述第二组所述数据元素和所述多个核H中与第四OFM深度指数d2相关联的第四核执行第四MAC运算,所述第四MAC周期连续地跟随所述第三MAC周期;以及
在第五MAC周期期间对所述第二组所述数据元素和所述多个核H中与第五OFM深度指数d2相关联的第五核执行第五MAC运算,所述第五MAC周期连续地跟随所述第四MAC周期。
9.一种方法,其特征在于,所述方法包括:
以第一速率向乘累加MAC电路的阵列输入输入特征图IFM的第一组数据元素;
在第一MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的缓存中的第一核H执行第一MAC运算,其中所述第一核与第一输出特征图OFM深度指数d2相关联,其中MAC周期的速率比所述第一速率快;以及
在连续地跟随所述第一MAC周期的第二MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第二核H执行第二MAC运算,其中所述第二核与第二OFM深度指数d2相关联。
10.根据权利要求9所述的方法,其特征在于,所述方法进一步包括:
向耦接到所述阵列的控制电路输入所述第一核在所述缓存中的第一地址;
基于所述第一地址,通过所述控制电路生成所述第二核在所述缓存中的第二地址;
在所述第一MAC周期期间向所述MAC电路输入所述第一地址;以及
在所述第二MAC周期期间向所述MAC电路输入所述第二地址。
11.根据权利要求10所述的方法,其特征在于:
生成所述第二地址包括响应于所述第一地址映射到数据块传递的起始地址,使所述第一地址增加固定值;以及
生成所述第二地址包括响应于所述第一地址映射到数据块传递的结束地址,使所述第一地址减少固定值。
12.根据权利要求9至11中任一项所述的方法,其特征在于,所述方法进一步包括在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第三核H执行第三MAC运算,其中所述第三核与第三OFM深度指数d2相关联。
13.根据权利要求9至11中任一项所述的方法,其特征在于,所述方法进一步包括:
在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第三核H执行第三MAC运算,其中所述第三核与第三OFM深度指数d2相关联;
向耦接到所述阵列的第一控制电路输入多个核中的所述第一核在所述缓存中的第一地址;
基于所述第一地址,通过所述第一控制电路生成所述第二核在所述缓存中的第二地址;
基于所述第一地址,通过所述第一控制电路生成所述第三核在所述缓存中的第三地址;
在所述第一MAC周期期间向所述MAC电路输入所述第一地址;
在所述第二MAC周期期间向所述MAC电路输入所述第二地址;以及
在所述第三MAC周期期间向所述MAC电路输入所述第三地址。
14.根据权利要求9至11中任一项所述的方法,其特征在于,所述方法进一步包括:
在连续地跟随所述第二MAC周期后面的第三MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第三核H执行第三MAC运算,其中所述第三核与第三OFM深度指数d2相关联;
向耦接到所述阵列的第一控制电路输入多个核中的所述第一核在所述缓存中的第一地址;
基于所述第一地址,通过所述第一控制电路生成所述第二核在所述缓存中的第二地址;
基于所述第一地址,通过所述第一控制电路生成所述第三核在所述缓存中的第三地址;
在所述第一MAC周期期间向所述MAC电路输入所述第一地址;
在所述第二MAC周期期间向所述MAC电路输入所述第二地址;
在所述第三MAC周期期间向所述MAC电路输入所述第三地址;
以等于或快于所述第一速率的输入速率向耦接到所述阵列的第二控制电路输入所述IFM的所述第一组所述数据元素和所述IFM的第二组所述数据元素;以及
响应于去往所述第二控制电路的输入控制信号,通过所述第二控制电路延迟至少一个MAC周期向所述MAC电路输入所述第二组所述数据元素。
15.根据权利要求9至11中任一项所述的方法,其进一步包括:
以慢于所述第一速率的第二速率向所述阵列的所述MAC电路输入所述IFM的第二组所述数据元素;
在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第三核H执行第三MAC运算,其中所述第三核与第三OFM深度指数d2相关联;
在连续地跟随所述第三MAC周期的第四MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第四核H执行第四MAC运算,其中所述第四核与第四OFM深度指数d2相关联;以及
在连续地跟随所述第四MAC周期的第五MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第五核H执行第五MAC运算,其中所述第五核与第五OFM深度指数d2相关联。
CN201980047920.XA 2018-07-19 2019-07-12 在mac电路中使用不同核对一组数据执行连续mac运算 Active CN112424745B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/040,357 2018-07-19
US16/040,357 US11429850B2 (en) 2018-07-19 2018-07-19 Performing consecutive mac operations on a set of data using different kernels in a MAC circuit
PCT/US2019/041586 WO2020018369A1 (en) 2018-07-19 2019-07-12 Performing consecutive mac operations on a set of data using different kernels in a mac circuit

Publications (2)

Publication Number Publication Date
CN112424745A true CN112424745A (zh) 2021-02-26
CN112424745B CN112424745B (zh) 2024-01-26

Family

ID=67480366

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980047920.XA Active CN112424745B (zh) 2018-07-19 2019-07-12 在mac电路中使用不同核对一组数据执行连续mac运算

Country Status (5)

Country Link
US (1) US11429850B2 (zh)
EP (1) EP3791261B1 (zh)
KR (1) KR20210025114A (zh)
CN (1) CN112424745B (zh)
WO (1) WO2020018369A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210105053A (ko) * 2020-02-18 2021-08-26 에스케이하이닉스 주식회사 연산 회로 및 그것을 포함하는 딥 러닝 시스템
KR20220154346A (ko) * 2021-05-13 2022-11-22 삼성전자주식회사 복제 비트-셀 기반의 mac 연산 장치 및 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170103299A1 (en) * 2015-10-07 2017-04-13 Altera Corporation Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator
CN107003988A (zh) * 2014-12-19 2017-08-01 英特尔公司 用于执行卷积运算的存储设备和方法
US9779786B1 (en) * 2016-10-26 2017-10-03 Xilinx, Inc. Tensor operations and acceleration
WO2018107476A1 (zh) * 2016-12-16 2018-06-21 华为技术有限公司 访存设备、计算设备和应用于卷积神经网络运算的设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160210550A1 (en) * 2015-01-20 2016-07-21 Nomizo, Inc. Cloud-based neural networks
WO2017129325A1 (en) 2016-01-29 2017-08-03 Fotonation Limited A convolutional neural network
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US11086967B2 (en) * 2017-03-01 2021-08-10 Texas Instruments Incorporated Implementing fundamental computational primitives using a matrix multiplication accelerator (MMA)

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107003988A (zh) * 2014-12-19 2017-08-01 英特尔公司 用于执行卷积运算的存储设备和方法
US20170103299A1 (en) * 2015-10-07 2017-04-13 Altera Corporation Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator
US9779786B1 (en) * 2016-10-26 2017-10-03 Xilinx, Inc. Tensor operations and acceleration
WO2018107476A1 (zh) * 2016-12-16 2018-06-21 华为技术有限公司 访存设备、计算设备和应用于卷积神经网络运算的设备

Also Published As

Publication number Publication date
US20200026989A1 (en) 2020-01-23
EP3791261A1 (en) 2021-03-17
JP2021531572A (ja) 2021-11-18
WO2020018369A1 (en) 2020-01-23
CN112424745B (zh) 2024-01-26
KR20210025114A (ko) 2021-03-08
US11429850B2 (en) 2022-08-30
EP3791261B1 (en) 2023-01-11

Similar Documents

Publication Publication Date Title
US11886536B2 (en) Methods and systems for implementing a convolution transpose layer of a neural network
EP3513357B1 (en) Tensor operations and acceleration
US10572225B1 (en) Circuit arrangements and methods for performing multiply-and-accumulate operations
JP7279064B2 (ja) テンソルデータ用のメモリ構成
EP2017743B1 (en) High speed and efficient matrix multiplication hardware module
CN113039541A (zh) 矩阵的空间局部变换
US10411709B1 (en) Circuit arrangements and methods for dividing a three-dimensional input feature map
CN109564585B (zh) 基于点积的处理元件
US10936311B1 (en) Sparse matrix processing circuitry
CN112424745B (zh) 在mac电路中使用不同核对一组数据执行连续mac运算
CN114358237A (zh) 多核硬件中神经网络的实现方式
JP7046171B2 (ja) 演算装置
US11256979B2 (en) Common factor mass multiplication circuitry
US11693625B2 (en) Logarithmic addition-accumulator circuitry, processing pipeline including same, and methods of operation
JP7495924B2 (ja) Mac回路中の異なるカーネルを使用してデータのセットに対して連続するmac演算を実施すること
GB2582868A (en) Hardware implementation of convolution layer of deep neural network
Huang et al. A low-bit quantized and hls-based neural network fpga accelerator for object detection
Rakanovic et al. Argus CNN accelerator based on kernel clustering and resource-aware pruning
US11960856B1 (en) Multiplier-accumulator processing pipeline using filter weights having gaussian floating point data format
US9235671B1 (en) Combining logic elements into pairs in a circuit design system

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