CN115168284A - 面向深度学习的粗粒度可重构阵列系统及计算方法 - Google Patents
面向深度学习的粗粒度可重构阵列系统及计算方法 Download PDFInfo
- Publication number
- CN115168284A CN115168284A CN202210798554.5A CN202210798554A CN115168284A CN 115168284 A CN115168284 A CN 115168284A CN 202210798554 A CN202210798554 A CN 202210798554A CN 115168284 A CN115168284 A CN 115168284A
- Authority
- CN
- China
- Prior art keywords
- instruction
- input
- operation instruction
- processing unit
- 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.)
- Pending
Links
- 238000004364 calculation method Methods 0.000 title claims abstract description 29
- 238000013135 deep learning Methods 0.000 title claims abstract description 27
- 238000012545 processing Methods 0.000 claims abstract description 122
- 238000003491 array Methods 0.000 abstract description 2
- 238000011022 operating instruction Methods 0.000 abstract description 2
- 230000000295 complement effect Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 14
- 238000000034 method Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000005265 energy consumption Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- AOCUKGFDRUSDQH-PIKKTMSISA-N ocrf Chemical compound C([C@@H](C(=O)N[C@@H](CO)C(=O)N[C@@H](CC(N)=O)C(=O)N[C@@H](CCCN=C(N)N)C(=O)N[C@@H](CCCCN)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](CC(O)=O)C(=O)N[C@@H]([C@@H](C)CC)C(=O)N[C@@H](C)C(N)=O)NC(=O)[C@H](C)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@H](C)NC(=O)[C@H](CC(C)C)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@H](CC(O)=O)NC(=O)[C@H](C)NC(=O)[C@H](CCCCN)NC(=O)[C@@H](NC(=O)[C@H](CCSC)NC(=O)[C@H](CCC(O)=O)NC(=O)[C@H](CC(C)C)NC(=O)[C@@H](NC(=O)[C@H](CCC(O)=O)NC(=O)[C@H](CCCN=C(N)N)NC(=O)[C@H](CC(C)C)NC(=O)[C@H](CC(C)C)NC(=O)[C@H](CC=1N=CNC=1)NC(=O)[C@H](CC=1C=CC=CC=1)NC(=O)[C@@H](NC(=O)[C@H](CC(C)C)NC(=O)[C@H](CC(O)=O)NC(=O)[C@@H](NC(=O)[C@H](CO)NC(=O)[C@@H](NC(=O)[C@H]1N(CCC1)C(=O)[C@H]1N(CCC1)C(=O)[C@H](CCC(O)=O)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@@H](N)CO)[C@@H](C)CC)C(C)CC)[C@@H](C)O)C(C)C)C(C)O)C1=CNC=N1 AOCUKGFDRUSDQH-PIKKTMSISA-N 0.000 description 2
- 230000033764 rhythmic process Effects 0.000 description 2
- 101100517651 Caenorhabditis elegans num-1 gene Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
Abstract
本公开提供了一种面向深度学习的粗粒度可重构阵列系统及计算方法,可以应用于可重构阵列技术领域。该系统包括:控制器,用于确定向至少一个处理单元输入的输入信息,其中,输入信息包括权重、输入数据、状态指令和操作指令,状态指令用于确定操作指令的执行状态,操作指令用于至少一个处理单元计算权重和输入数据;输入总线,用于向至少一个处理单元输入权重和输入数据;配置总线,用于向至少一个处理单元输入状态指令和操作指令;处理单元组,包括多个处理单元,多个处理单元形成可重构阵列,每个处理单元用于根据操作指令计算权重和输入数据,得到结果数据;输出总线,用于供至少一个处理单元输出结果数据。
Description
技术领域
本公开涉及可重构阵列技术领域,更具体地,涉及一种面向深度学习的粗粒度可重构阵列系统及计算方法。
背景技术
在相关技术中,通常是通过专用集成电路(Application Specific IntegratedCircuit,ASIC)或者现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)进行深度学习网络中的计算,其中,ASIC可以达到较高的能效,而FPGA可以实现门级可编程,有较高的重构性。
在实现本公开构思的过程中,发明人发现相关技术中至少存在如下问题:现有技术中通过例如ASIC设计和FPGA的门级可编程设计的计算代价较大,不能兼顾灵活性和计算能效。
发明内容
有鉴于此,本公开提供了一种面向深度学习的粗粒度可重构阵列系统及计算方法。
本公开的一个方面提供了一种面向深度学习的粗粒度可重构阵列系统,包括:
控制器,用于确定向至少一个处理单元输入的输入信息,其中,输入信息包括权重、输入数据、状态指令和操作指令,状态指令用于确定操作指令的执行状态,操作指令用于至少一个处理单元计算权重和输入数据;
输入总线,用于向至少一个处理单元输入权重和输入数据;
配置总线,用于向至少一个处理单元输入状态指令和操作指令;
处理单元组,包括多个处理单元,多个处理单元形成可重构阵列,每个处理单元用于根据操作指令计算权重和输入数据,得到结果数据;
输出总线,用于供至少一个处理单元输出结果数据。
根据本公开的实施例,其中,处理单元组中的多个处理单元形成的可重构阵列共有M列N行,M为大于等于1的整数,N为大于等于1的整数,其中,
每列处理单元共享一根输入总线;
每行处理单元共享一根输出总线;
每列处理单元共享一根配置总线。
根据本公开的实施例,其中,
每根输入总线连接一个输入存储单元;
每根输出总线连接一个输出存储单元;
每根配置总线连接一个配置存储单元。
根据本公开的实施例,其中,处理单元包括:
指令寄存子单元,用于存储操作指令和状态指令;
指令解码子单元,用于解码操作指令和状态指令;
权重寄存子单元,用于存储权重或输入数据;
本地寄存子单元,用于存储中间数据;
逻辑运算子单元,用于根据操作指令计算权重和输入数据,得到结果数据。
根据本公开的实施例,其中,逻辑运算子单元包括:
至少一个乘法器、至少一个加法器以及至少一个选择器。
根据本公开的实施例,状态指令包括操作指令的循环周期,其中,每个处理单元用于根据操作指令计算权重和输入数据,得到结果数据包括:
按照循环周期,处理单元根据操作指令计算权重和输入数据,得到结果数据。
根据本公开的实施例,其中,指令寄存子单元包括:
操作指令寄存子单元,用于存储操作指令;
状态指令寄存子单元,用于存储状态指令。
根据本公开的实施例,其中,指令解码子单元包括:
操作指令解码子单元,用于解码操作指令;
状态指令解码子单元,用于解码状态指令。
根据本公开的实施例,其中,
配置存储单元,用于存储配置信息,以使控制单元根据配置信息确定输入信息。
本公开的另一个方面提供了一种面向深度学习的粗粒度可重构阵列计算方法,包括:
通过控制器确定向至少一个处理单元输入的输入信息,其中,输入信息包括权重、输入数据、状态指令和操作指令,状态指令用于确定操作指令的执行状态,操作指令用于至少一个处理单元计算权重和输入数据;
通过输入总线向至少一个处理单元输入权重和输入数据;
通过配置总线向至少一个处理单元输入状态指令和操作指令;
通过每个处理单元根据操作指令计算权重和输入数据,得到结果数据;
通过输出总线输出结果数据。
根据本公开的实施例,通过控制器确定向至少一个处理单元输入的输入信息,通过输入总线将输入信息中的权重和输入数据输入至处理单元,以及通过配置总线将状态指令和操作指令输入至处理单元,处理单元根据状态指令和操作指令对权重和输入数据进行计算,得到结果数据并通过输出总线输出。通过对处理单元进行重构形成阵列对输入信息进行计算,能够有在保持一定重构性的情况下降低重构的代价,并且通过配置总线、输入总线和输出总线进行多种数据的传输,提高了可重构阵列系统的吞吐率以及计算并行度,保证数据流的灵活,所以至少部分地克服了现有技术中通过例如ASIC设计和FPGA的门级可编程设计的计算代价较大,不能兼顾灵活性和计算能效的技术问题。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的面向深度学习的粗粒度可重构阵列系统的示意图;
图2示意性示出了根据本公开实施例的面向深度学习的粗粒度可重构阵列系统的处理单元的示意图;
图3示意性示出了根据本公开实施例的面向深度学习的粗粒度可重构阵列系统的逻辑运算子单元的示意图;
图4示意性示出了根据本公开实施例的一种面向深度学习的粗粒度可重构阵列系统的逻辑运算子单元的重构示意图;以及
图5示意性示出了根据本公开实施例的又一种面向深度学习的粗粒度可重构阵列系统的逻辑运算子单元的重构示意图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
随着基于深度学习的人工智能技术的飞速发展,高能效深度学习的系统设计显得尤为重要,对计算效率的要求也是越来越高。在现有处理器大都是通过FPGA、ASIC等来计算。但是随着半导体制作工艺的进步,一颗芯片的研发成本也高达1.5~2亿美元,需要销售3000万颗以上的芯片才能收回研发成本。
由于系统架构随着其通用性的提高能效逐渐降低,ASIC设计可达到最高能效,但ASCI设计的灵活性较低、前端代价大、容易被淘汰;FPGA的重构灵活性较高,但是重构性太大。为了节省经济成本,需要在计算方式和系统架构上找到新的解决方案。而粗粒度可重构阵列(Coarse-Grained Reconfigurable Array,CGRA)可实现处理单元级别粒度的可重构,相比FPGA的门级可编程,CGRA在保留一定灵活性的同时,兼顾计算能效。因此,CGRA可以在高能效和灵活性之间实现良好的折中,成为实现领域专用的高性能计算的有效解决方案之一,可以有效缓解“能耗墙”和“存储墙”问题。
有鉴于此,本公开提出了一种面向深度学习的粗粒度可重构阵列系统。该系统包括:控制器,用于确定向至少一个处理单元输入的输入信息,其中,输入信息包括权重、输入数据、状态指令和操作指令,状态指令用于确定操作指令的执行状态,操作指令用于至少一个处理单元计算权重和输入数据;输入总线,用于向至少一个处理单元输入权重和输入数据;配置总线,用于向至少一个处理单元输入状态指令和操作指令;处理单元组,包括多个处理单元,多个处理单元形成可重构阵列,每个处理单元用于根据操作指令计算权重和输入数据,得到结果数据;输出总线,用于供至少一个处理单元输出结果数据。通过对本公开实施例中处理单元的重构,可以保留一定灵活性的同时,兼顾计算能效。
图1示意性示出了根据本公开实施例的面向深度学习的粗粒度可重构阵列系统的示意图。
如图1所示,该系统包括控制器110、输入总线120、配置总线130、处理单元组140和输出总线150。
控制器110,用于确定向至少一个处理单元输入的输入信息,其中,输入信息包括权重、输入数据、状态指令和操作指令,状态指令用于确定操作指令的执行状态,操作指令用于至少一个处理单元计算权重和输入数据;
输入总线120,用于向至少一个处理单元输入权重和输入数据;
配置总线130,用于向至少一个处理单元输入状态指令和操作指令;
处理单元组140,包括多个处理单元,多个处理单元形成可重构阵列,每个处理单元用于根据操作指令计算权重和输入数据,得到结果数据;
输出总线150,用于供至少一个处理单元输出结果数据。
根据本公开的实施例,控制器110(Top Ctrl)可以负责协调可重构阵列的整体执行过程,例如预加载、执行、空闲或者中断的执行过程。
根据本公开的实施例,处理单元组140可以由多个处理单元(ProcessingElement,PE)组成,PE可以组成方形阵列,阵列的高、宽可以分别通过控制器进行设置,PE可与其相连的上下左右其他PE进行数据交互。
根据本公开的实施例,输入总线120支持的数据位宽可以是32bit,可以输入32bit的权重和输入数据,输出总线120支持的数据位宽可以是32bit,以供PE输出32bit的结果数据。
根据本公开的实施例,输入数据可以是在深度学习网络中向第一层网络中输入的用于检测目标的视频数据、用于识别图形文字的图片数据用于识别语音的音频数据等等。在通过深度学习网络进行计算时,可以将当前网络层计算得到的结果数据作为下一层网络的输入,因此,输入数据还可以是深度学习网络中的网络层计算得到的结果数据。
根据本公开的实施例,配置总线130支持的数据位宽可以是20bit。
根据本公开的实施例,通过控制器确定向至少一个处理单元输入的输入信息,通过输入总线将输入信息中的权重和输入数据输入至处理单元,以及通过配置总线将状态指令和操作指令输入至处理单元,处理单元根据状态指令和操作指令对权重和输入数据进行计算,得到结果数据并通过输出总线输出。通过对处理单元进行重构形成阵列对输入信息进行计算,能够有在保持一定重构性的情况下降低重构的代价,并且通过配置总线、输入总线和输出总线进行多种数据的传输,提高了可重构阵列系统的吞吐率以及计算并行度,保证数据流的灵活,所以至少部分地克服了现有技术中通过例如ASIC设计和FPGA的门级可编程设计的计算代价较大,不能兼顾灵活性和计算能效的技术问题。
根据本公开的实施例,处理单元组中的多个处理单元形成的可重构阵列共有M列N行,M为大于等于1的整数,N为大于等于1的整数,其中,
每列处理单元共享一根输入总线;
每行处理单元共享一根输出总线;
每列处理单元共享一根配置总线。
根据本公开的实施例,每列处理单元可以共享一根输入总线和一根配置总线,每行处理单元可以共享一根输出总线。以图1中四行四列处理单元的处理单元组为例,在图1中,四列处理单元可以共享四根输入总线和四根配置总线,四行处理单元可以共享四根输出总线。
根据本公开的实施例,每根输入总线连接一个输入存储单元;
每根输出总线连接一个输出存储单元;
每根配置总线连接一个配置存储单元。
根据本公开的实施例,每根输入总线连接一个输入存储单元(Din FIFO),以图1为例,四根输入总线可以连接四个输入存储单元,在图1中用Din FIFOs表示四个输入存储单元,每根输出总线连接一个输出存储单元(Dout FIFO),在图1中四根输出总线可以连接四个输出存储单元,用Dout FIFOs表示四个输出存储单元,每根配置总线连接一个配置存储单元(Config Bank),在图1中四根配置总线可以连接四个配置存储单元,用Config Banks表示四个配置存储单元。通过多根输入总线、输出总线和配置总线分别连接输入存储单元、输出存储单元和配置存储单元,可以同时向多个处理单元输入多种指令和权重和输入数据,提高了可重构阵列系统的吞吐率。
根据本公开的实施例,其中,处理单元包括:
指令寄存子单元,用于存储操作指令和状态指令;
指令解码子单元,用于解码操作指令和状态指令;
权重寄存子单元,用于存储权重或输入数据;
本地寄存子单元,用于存储中间数据;
逻辑运算子单元,用于根据操作指令计算权重和输入数据,得到结果数据。
根据本公开的实施例,指令寄存子单元可以接收通过配置总线输入的操作指令和状态指令,然后存储操作指令和状态指令,在可重构阵列系统执行阶段时,可以由指令解码单元对操作指令和状态指令进行解码,根据解码出的内容执行操作指令相应的操作。
根据本公开的实施例,权重寄存子单元可以接收通过输入总线输入的权重,并存储权重,处理单元可以只在预加载阶段通过输入总线将所需权重全部写入每个权重寄存子单元。
根据本公开的实施例,权重寄存单元还可以接收通过输入总线输入的输入数据,并将输入数据存储至权重寄存单元,处理单元可以只在预加载阶段通过输入总线将所需输入数据全部写入每个权重寄存子单元。
根据本公开的实施例,通过读取本地的权重或者输入数据进行计算,实现近存储计算,有效降低数据搬移能耗。根据本公开的实施例,本地寄存子单元可以存储中间数据,在由逻辑运算子单元得到中间数据后,可以先将中间数据存储至本地寄存子单元,或者在在由逻辑运算子单元得到结果数据后,如果其他PE正在运行,无法接收结果数据,可以先将结果数据存储至本地寄存子单元。
根据本公开的实施例,逻辑运算子单元可以根据指令解码子单元解码出的内容执行操作指令相应的操作。
根据本公开的实施例,其中,指令寄存子单元包括:
操作指令寄存子单元,用于存储操作指令;
状态指令寄存子单元,用于存储状态指令。
根据本公开的实施例,其中,指令解码子单元包括:
操作指令解码子单元,用于解码操作指令;
状态指令解码子单元,用于解码状态指令。
根据本公开的实施例,操作指令和状态指令可以分别存储在操作指令寄存子单元和状态指令寄存子单元,实现对操作指令和状态指令的分别存储。例如,在操作指令循环的情况下,只需要根据状态指令对操作指令执行相应的操作。
根据本公开的实施例,可以通过操作指令解码子单元对操作指令寄存子单元的操作指令进行解码,通过状态指令解码子单元对状态指令寄存子单元的状态指令进行解码。
根据本公开的实施例,通过对操作指令和状态指令分别进行存储和解码,由状态指令控制操作指令的执行次数,不需要将每一次循环所需要的操作指令都存入至操作指令寄存子单元,减少了操作指令的存储空间,降低可重构阵列系统的逻辑控制代价。
下面结合图2对本公开实施例的处理单元做进一步说明。
图2示意性示出了根据本公开实施例的面向深度学习的粗粒度可重构阵列系统的处理单元的示意图。
如图2所示,PE内部指令寄存子单元包括操作指令寄存子单元(Operation ConfigRegister File,OCRF)32×20bit、状态指令寄存子单元(Status Config Register File,SCRF)32×20bit,在图2中表示为CRF*2。PE包括权重寄存子单元(Weight Register File,WRF)32×32bit以及本地寄存子单元(Local Register File,LRF)2×32bit,操作指令寄存子单元在图2中表示为PE STAT Ctrl,状态指令寄存子单元在图2中表示为PE_Ctrl。
根据本公开的实施例,图2中的PE还包括两个选择器和一个输出端口,分别表示为Op1_MUX、Op2_MUX和Output_Reg,N、S、E、W分别表示来自本PE东南西北的其他PE的输入,D表示来自输入总线输入的权重和输入数据,其中,通过PE中的选择器可以选择接收权重、输入数据、来自东南西北的其他PE和Output_Reg的计算结果。
根据本公开的实施例,可重构阵列系统在运行过程主要分为预加载阶段和运算阶段。OCRF、SCRF只在预加载阶段可以将操作指令或者状态指令写入,WRF只在预加载阶段通过32bit输入总线将所需权重全部写入每个PE,调度算法需要提供每一个PE所需要的权重的个数,并将输入数据按顺序排好,在运算阶段下,可以将输入数据输入到可重构阵列系统,对WRF只进行读操作;LRF则为阵列运行过程中可调用的存储,可对其进行读写操作。
根据本公开的实施例,可重构阵列采用分布式的存储方式,在每个PE均包含本地数据存储,其中WRF仅在预加载阶段可写入,阵列运行阶段仅可被PE本地读取,其读地址可以根据操作指令、状态指令实现灵活控制,其写地址由本PE自增产生、上限由本PE权重的数量参数控制。LRF用于阵列运行过程中对于中间数据的存取,双读口、单写口,其读写地址均根据操作指令实现控制。通过读取PE本地的权重和输入数据进行计算,实现近存储计算,有效降低数据搬移能耗。
根据本公开的实施例,通过设计合理的指令格式,使状态指令可实现对操作指令顺序执行、循环执行、空操作的控制;操作指令可实现对于PE每周期操作数据来源、运算类型、结果数据写回本地寄存子单元以及结果数据通过输出总线输出的控制。通过对操作指令的循环,可以减少操作指令的输入和存储,在兼顾灵活性的同时,合理降低逻辑控制代价。
图2中的空心单线粗箭头为由20bit的操作指令解码来的控制信号及地址信息,操作指令的具体格式如表1所示。
表1操作指令格式
控制信号 | 地址信息 |
nop_en | 19 |
dout_bus_en | 18 |
LRF_wen | 17 |
alu_ctrl | [16:13] |
LRF_addr_w | 12 |
LRF_addr_r2 | 11 |
LRF_addr_r1 | 10 |
mux_ctrl2 | [9:7] |
mux_ctrl1 | [6:4] |
WRF_addr | [3:0] |
表1中的mux_ctrl1、mux_ctrl2为图2中Op1_MUX和Op2_MUX的控制信号,控制PE可以接收来自外部与其相连的上下左右四个方向PE的结果数据,输入总线上的权重和输入数据,还可以接收来自本PE内部的结果数据反馈、LRF和WRF的读出数据以及硬件0,硬件0可以是对PE进行初始化的操作信号。
mux_ctrl的具体编码方式如表2所示。
表2 mux_ctrl编码说明
编码 | 选项 | 解释 |
000 | PE_out/zero | mux1为PE输出的反馈/mux2为硬件0 |
001 | North | 来自当前PE上方PE的输出 |
010 | South | 来自当前PE下方PE的输出 |
011 | West | 来自当前PE左侧PE的输出 |
100 | East | 来自当前PE右侧PE的输出 |
101 | LRF_out | 来自本地寄存子单元的输出 |
110 | din_bus | 来自输入总线 |
111 | WRF | 来自权重寄存子单元的输出 |
表1中的其余功能域nop_en、dout_bus_en、LRF_wen、LRF_addr_w、LRF_addr_r1、LRF_addr_r2的定义具体含义如表3所示。
表3其他操作指令功能域定义
根据本公开的实施例,其中,逻辑运算子单元包括:
至少一个乘法器、至少一个加法器以及多个选择器。
如图2所示,PE还包括一个三输入的逻辑运算子单元(Arithmetic and LogicUnit,ALU),ALU可以对乘法器、加法器以及选择器进行任意数量的组合以实现可重构阵列的计算需求。
根据本公开的实施例,ALU可以进行符号数运算,还可以对溢出进行饱和处理,在ALU的三输入中,其中两个输入是通过选择器MUX来选择控制,另一个输入为固定连接的WRF的输出数据。表1中的alu_ctrl为图2中的ALU控制信号,决定ALU在本周期内的运算类型及某些运算类型的操作数来源,具体编码方式如表4所示,data1表示Op1_MUX的输出、data2表示Op2_MUX的输出、data3表示ALU固定连接的WRF输出。
表4 alu_ctrl的编码描述
图3示意性示出了根据本公开实施例的面向深度学习的粗粒度可重构阵列系统的逻辑运算子单元的示意图。
如图3所示,ALU主要的算术运算资源包含4个8bit乘法器(可配置为补码或原码乘法器)、2个16bit加法器、1个17bit加法器(带进位)、1个35bit加法器;主要逻辑运算资源包含32bit补码逻辑左移、右移,32bit按位与、或、异或、同或,以及32bit补码比较(输出较大值);主要重构资源开销包含MUX以及处理补码符号位的符号处理单元(针对加法器的进位,如未溢出,则需要在最高位填充符号位),MUX的控制信号来自于输入的状态指令的译码;饱和处理单元主要用于补码加法溢出处理。
ALU的重构主要体现在运算类型、操作数种类、操作数位宽,重构的控制信号均来自于输入ctrl信号的译码。
图4示意性示出了根据本公开实施例的一种面向深度学习的粗粒度可重构阵列系统的逻辑运算子单元的重构示意图。
如图4所示,redsum应用加法树实现对4个8bit补码乘法结果的累加,由于累加过程中为真实补码值的计算,因此应用经过符号处理单元后的加和结果,最终应用35bit加法器实现累加结果与data2输入数据的加和。
图5示意性示出了根据本公开实施例的又一种面向深度学习的粗粒度可重构阵列系统的逻辑运算子单元的重构示意图。
如图5所示,将4个8bit乘法器重构为16bit补码乘法器,实现结构如图5所示。补码乘法原理如下,以6bit乘法[a5:a0]×[b5:b0]=[P11:P0]为例,a5、b5为符号位:
由此看出,在进行补码乘法时,符号位需要进行特殊处理且存在特殊加1操作,因此,在将4个8bit乘法器重构为16bit补码乘法器的过程中,将输入的16bit的权重的符号位均填充为0,再将8bit乘法器配置为原码乘法,完成除去符号位外的数据计算,得到结果数据后,再将所需的符号特殊处理利用35bit加法器,加到计算结果上,最终得到16bit补码乘法结果。其中具体重构思路如图5所示,公式展示如下,h、l分别表示为高8位或低8位:
因此,对应于图5,Phl+Plh完成于add16_0,得到17bit结果,截取低8bit在低位补0填充为16bit数据,与Pll在add16_1完成加法,得到17bit结果,其最高位作为add17的进位输入,其低16bit作为输出结果的低16bit;同时,截取add16_0输出结果的高9bit在高位补0填充为17bit数据,与Phh在add17完成加法,其加和结果的低16bit为输出结果的高16bit。其中,部分和结果为加法器直接输出,无需经过符号处理单元,最终经过补码特殊符号处理后得到最终16bit补码乘法输出结果。
操作指令示例如下:
1)空指令:nop
2)两操作数:mul mux1(raddr1),mux2(raddr2),rw/rnw(waddr),be/bne
3)两操作数:mulw mux1(raddr1),WRF(WRF_addr),rw/rnw(waddr),be/bne
4)三操作数:mac mux1(raddr1),mux2(raddr2),WRF(WRF_addr),rw/rnw(waddr),be/bne
Eg.mul LRF_out(0),LRF_out(0),rw(1),be//读取来自0号寄存器的数值相乘,并写会1号寄存器,并对输出总线发送输出请求
当mux选中LRF时,则代表要读LRF,当alu_ctrl为权重操作类型,即mux_ctrl选中WRF或mac时,则代表需要读WRF;rw—reg_write,rnw—reg_non_write;be—bus_enable,bne—bus_non_enable。
根据本公开的实施例,ALU采用有限运算资源,通过重构实现多种位宽、形式的乘法类操作,进一步降低运算代价。
根据本公开的实施例,状态指令包括操作指令的循环周期,其中,每个处理单元用于根据操作指令计算权重和输入数据,得到结果数据包括:
按照循环周期,处理单元根据操作指令计算权重和输入数据,得到结果数据。
根据本公开的实施例,循环周期可以是操作指令在一个周期内循环执行的周期数,可以在状态指令中携带操作指令的周期数,从而决定整个操作指令运行流程。根据本公开的实施例,PE内的每一条操作指令仅生效一个周期,决定PE每个周期的执行状态。而状态指令的生效周期,依赖于操作指令的循环周期,状态指令的格式如表5所示,由于配置总线位宽为20bit,所以我们将两条10bit的状态指令拼接为20bit送入PE并存储。
表5状态指令格式
状态指令 | op_code1 | cycle1 | op_code2 | cycle2 |
地址 | [19:17] | [16:10] | [9:7] | [6:0] |
表5中的op_code决定每条状态指令所控制的操作指令的执行状态,具体含义如表6所示。
表6状态指令op_code含义
除了PE_end后所跟周期数必须为0外,其余状态指令后所跟周期数不能为0。PE_loopb负责执行完第一个内层循环并记录循环长度,后面跟内层循环周期数;PE_loopc/ci后面携带(内层循环周期数*(内层循环总次数-1)),(内层循环总次数-1)是由于PE_loopb已经执行一次;可支持对于单条指令的循环;PE_end无论如何只占一个周期,最后一条大指令,需将剩余小指令均填充为PE_end。
根据本公开的实施例,配置存储单元用于存储配置信息,以使控制单元根据配置信息确定输入信息。
根据本公开的实施例,配置信息可以是输入至每个处理单元的操作指令数目、状态指令数目、权重数目、处理单元的循环周期、权重基址增量等。
根据本公开的实施例,由于可重构阵列系统内部操作指令执行是流水线的存在,需要PE提前给出对Din FIFO的读信号,因此可重构阵列系统会通过Din FIFO的读信号与写信号来预测Din FIFO何时会空,当预测某个Din FIFO为空、且相关PE存在对输入总线的读请求时,本PE会向控制器发送中断信号。同理对于Dout FIFO,当阵列停滞后,需要确保已经在流水线中执行的操作指令的输出数据可以被存储到Dout FIFO,因此,当某个Dout FIFO拥有少于两个空位时,可以视为无法保证容纳流水线中所有操作指令的输出数据,本PE会向控制器发送中断信号;当控制器接收到某个PE的中断信号后,会使整个可重构阵列系统进入中断状态、防止数据流节拍错乱,并保存现场,中断结束后,可重构阵列系统继续运行。
根据本公开的实施例,以图1中阵列尺寸为4列、6行为例,对配置信息的地址进行说明。对应4列PE,总共设置4个配置存储单元(Config SRAM Bank),每列PE对应一个ConfigSRAM Bank,以Config_Bank0(对应第一列PE)为例,如表7所示。
表7配置信息地址说明
地址 | 存储格式 |
0 | {2'b0,config_num_2[17:12],config_num_1[11:6],config_num_0[5:0]} |
1 | {2'b0,config_num_5[17:12],config_num_4[11:6],config_num_3[5:0]} |
2 | {2'b0,ctrl_num_2[17:12],ctrl_num_1[11:6],ctrl_num_0[5:0]} |
3 | {2'b0,ctrl_num_5[17:12],ctrl_num_4[11:6],ctrl_num_3[5:0]} |
4 | {2'b0,weight_num_2[17:12],weight_num_1[11:6],weight_num_0[5:0]} |
5 | {2'b0,weight_num_5[17:12],weight_num_4[11:6],weight_num_3[5:0]} |
6 | {ultra_loop_num[19:10],outter_loop_num[9:0]} |
7 | {10'b0,ultra_loop_w_num[9:5],outter_loop_w_num[4:0]} |
… | PE列程序段 |
表7中的地址为实际Config_Bank0中所对应的存储地址,每一列PE的参数排列顺序见表7中的名称后缀编号,如config_num_0、config_num_1,地址0、1存储这一列每个PE的操作指令的数目config_num,其可取范围是0~32,0表示当前PE无需加载指令,1~32表示加载1~32条指令;地址2、3存储这一列每个PE的状态指令数目ctrl_num,其可取范围与config_num相同;地址4、5存储这一列每个PE所存储的权重数目weight_num,其可取范围与config_num相同;地址6、7存储循环相关设置参数(仅存在于Config_Bank0),地址6的低10位为小外层循环次数outter_loop_num、高10位为大外层循环次数ultra_loop_num(均比实际小1,比如0表示共执行1次,1表示共执行两次),地址7的低5位为切换小外层循环时需要跳过的权重数目outter_loop_w_num、再高5位为切换大外层循环时需要跳过的权重数目ultra_loop_w_num(表示范围为0~31)。程序段排列时,对于每一个Config_Bank,按照每一列PE从上到下的顺序排列每一个PE所需要存储的所有指令,包括操作指令和状态指令,且操作指令排在前、状态指令排在后。
阵列可以对WRF读地址实现灵活控制,计算公式如下:
WRF_addr_read
=WRF_addr_cfg+WRF_base_addr+WRF_base_addr_ol*outter_loop_w_num+WRF_base_addr_ul*ultra_loop_w_num
根据本公开的实施例,可重构阵列可以支持3层循环,由PE指令控制的内层循环(inner_loop),由outter_loop_num控制的小外层循环(outter_loop)以及由ultra_loop_num控制的大外层循环(ultra_loop),在每一层循环下都有不同的改变权重地址的方式。对于内层循环,存在偏移地址WRF_addr_cfg及小循环基地址WRF_base_addr,小循环基地址依靠PE_loopci来递增,其余状态指令均不会改变小循环基地址,处于PE_loopci状态时,在每执行一个内层循环前,WRF_base_addr会先加1,在同一个小外层循环内,WRF_base_addr一旦改变则不会清零,直到下一个小外层循环才会清零。在同一个大外层循环内,小外层循环基地址WRF_base_addr_ol会在每次小外层循环结束后增加相应的小外层循环权重增量outter_loop_w_num,且在切换大外层循环时清零。大外层循环基地址WRF_base_addr_ul会在每次大外层循环结束后增加相应的大外层循环权重增量ultra_loop_w_num,直至计算结束后才会清零。outter_loop_num、ultra_loop_num、outter_loop_w_num、ultra_loop_w_num均由参数给定,具体配置方式见表7。
整体过程可描述如下,以PE_loopci为例,如为PE_loopc,则去掉inner_loop层循环,并令公式里的inner_loop=0。
其中,
上式加1是因为需包含PE_loopb所记录的cycle。
根据本公开的实施例,基于上述面向深度学习的粗粒度可重构阵列系统还提出了一种面向深度学习的粗粒度可重构阵列计算方法,该方法包括:
通过控制器确定向至少一个处理单元输入的输入信息,其中,输入信息包括权重、输入数据、状态指令和操作指令,状态指令用于确定操作指令的执行状态,操作指令用于至少一个处理单元计算权重和输入数据;
通过输入总线向至少一个处理单元输入权重和输入数据;
通过配置总线向至少一个处理单元输入状态指令和操作指令;
通过每个处理单元根据操作指令计算权重和输入数据,得到结果数据;
通过输出总线输出结果数据。
根据本公开的实施例,可以将每个PE的操作指令数目、状态指令数目、权重数目、小外层循环数目、大外层循环数目、小外层循环权重基址增量、大外层循环权重基址增量的参数通过配置总线加载至控制器。
根据本公开的实施例,控制器可以按照PE的操作指令数目、状态指令数目进行计数,通过配置总线将操作指令和状态指令加载到相应PE;并行地,控制器按照权重数目控制权重通过输入总线加载到相应PE。
根据本公开的实施例,状态指令、操作指令与权重的预加载结束后,可重构阵列开始执行阶段,顶控制器根据小外层循环数目及大外层循环数目、小外层循环权重基址增量及大外层循环权重基址增量控制可重构阵列的小外层循环及大外层循环、WRF读地址计算,PE根据状态指令控制操作指令的内层循环及WRF读地址计算,PE还可以根据操作指令决定每周期的具体行为;
根据本公开的实施例,在执行阶段,如果存在Din FIFO空或Dout FIFO满的情况,可重构阵列进入中断状态、防止数据流节拍错乱,并保存现场,中断结束后,阵列继续运行;
根据本公开的实施例,所有PE执行结束后,可重构阵列进入空闲状态,可进行权重重载、循环参数重载、操作指令重载、状态指令重载或上述四种情况的随机排列组合;
根据本公开的实施例,重载结束后,可重构阵列重新开始执行。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (10)
1.一种面向深度学习的粗粒度可重构阵列系统,包括:
控制器,用于确定向至少一个处理单元输入的输入信息,其中,所述输入信息包括权重、输入数据、状态指令和操作指令,所述状态指令用于确定所述操作指令的执行状态,所述操作指令用于至少一个所述处理单元计算所述权重和所述输入数据;
输入总线,用于向至少一个所述处理单元输入所述权重和所述输入数据;
配置总线,用于向至少一个所述处理单元输入所述状态指令和所述操作指令;
处理单元组,包括多个所述处理单元,多个所述处理单元形成可重构阵列,每个所述处理单元用于根据所述操作指令计算所述权重和所述输入数据,得到结果数据;
输出总线,用于供至少一个所述处理单元输出所述结果数据。
2.根据权利要求1所述的系统,其中,
所述处理单元组中的多个所述处理单元形成的可重构阵列共有M列N行,M为大于等于1的整数,N为大于等于1的整数,其中,
每列所述处理单元共享一根所述输入总线;
每行所述处理单元共享一根所述输出总线;
每列所述处理单元共享一根所述配置总线。
3.根据权利要求2所述的系统,其中,
每根所述输入总线连接一个输入存储单元;
每根所述输出总线连接一个输出存储单元;
每根所述配置总线连接一个配置存储单元。
4.根据权利要求1所述的系统,其中,所述处理单元包括:
指令寄存子单元,用于存储所述操作指令和所述状态指令;
指令解码子单元,用于解码所述操作指令和所述状态指令;
权重寄存子单元,用于存储所述权重或所述输入数据;
本地寄存子单元,用于存储中间数据;
逻辑运算子单元,用于根据所述操作指令计算所述权重和所述输入数据,得到所述结果数据。
5.根据权利要求4所述的系统,其中,所述逻辑运算子单元包括:
至少一个乘法器、至少一个加法器以及多个选择器。
6.根据权利要求1至5中任一项所述的系统,所述状态指令包括所述操作指令的循环周期,其中,所述每个所述处理单元用于根据所述操作指令计算所述权重和所述输入数据,得到结果数据包括:
按照所述循环周期,所述处理单元根据所述操作指令计算所述权重和所述输入数据,得到所述结果数据。
7.根据权利要求1至5中任一项所述的系统,其中,所述指令寄存子单元包括:
操作指令寄存子单元,用于存储所述操作指令;
状态指令寄存子单元,用于存储所述状态指令。
8.根据权利要求1至5中任一项所述的系统,其中,所述指令解码子单元包括:
操作指令解码子单元,用于解码所述操作指令;
状态指令解码子单元,用于解码所述状态指令。
9.根据权利要求1至5中任一项所述的系统,其中,
所述配置存储单元,用于存储配置信息,以使所述控制单元根据所述配置信息确定所述输入信息。
10.一种面向深度学习的粗粒度可重构阵列计算方法,包括:
通过控制器确定向至少一个处理单元输入的输入信息,其中,所述输入信息包括权重、输入数据、状态指令和操作指令,所述状态指令用于确定所述操作指令的执行状态,所述操作指令用于至少一个所述处理单元计算所述权重和所述输入数据;
通过输入总线向至少一个所述处理单元输入所述权重和所述输入数据;
通过配置总线向至少一个所述处理单元输入所述状态指令和所述操作指令;
通过每个所述处理单元根据所述操作指令计算所述权重和所述输入数据,得到结果数据;
通过输出总线输出所述结果数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210798554.5A CN115168284A (zh) | 2022-07-06 | 2022-07-06 | 面向深度学习的粗粒度可重构阵列系统及计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210798554.5A CN115168284A (zh) | 2022-07-06 | 2022-07-06 | 面向深度学习的粗粒度可重构阵列系统及计算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115168284A true CN115168284A (zh) | 2022-10-11 |
Family
ID=83490510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210798554.5A Pending CN115168284A (zh) | 2022-07-06 | 2022-07-06 | 面向深度学习的粗粒度可重构阵列系统及计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115168284A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180276534A1 (en) * | 2015-10-08 | 2018-09-27 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Neural network unit that manages power consumption based on memory accesses per period |
CN108805275A (zh) * | 2017-06-16 | 2018-11-13 | 上海兆芯集成电路有限公司 | 可编程设备及其操作方法和计算机可用介质 |
CN112463719A (zh) * | 2020-12-04 | 2021-03-09 | 上海交通大学 | 一种基于粗粒度可重构阵列实现的存内计算方法 |
CN113222130A (zh) * | 2021-04-09 | 2021-08-06 | 广东工业大学 | 一种基于fpga的可重构卷积神经网络加速器 |
-
2022
- 2022-07-06 CN CN202210798554.5A patent/CN115168284A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180276534A1 (en) * | 2015-10-08 | 2018-09-27 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Neural network unit that manages power consumption based on memory accesses per period |
CN108805275A (zh) * | 2017-06-16 | 2018-11-13 | 上海兆芯集成电路有限公司 | 可编程设备及其操作方法和计算机可用介质 |
CN112463719A (zh) * | 2020-12-04 | 2021-03-09 | 上海交通大学 | 一种基于粗粒度可重构阵列实现的存内计算方法 |
CN113222130A (zh) * | 2021-04-09 | 2021-08-06 | 广东工业大学 | 一种基于fpga的可重构卷积神经网络加速器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108564168B (zh) | 一种对支持多精度卷积神经网络处理器的设计方法 | |
CN106598545B (zh) | 沟通共享资源的处理器与方法及非瞬时计算机可使用媒体 | |
US7987339B2 (en) | Processing system with interspersed processors and dynamic pathway creation | |
CN105912501B (zh) | 一种基于大规模粗粒度可重构处理器的sm4-128加密算法实现方法及系统 | |
US20110185151A1 (en) | Data Processing Architecture | |
US9047069B2 (en) | Computer implemented method of electing K extreme entries from a list using separate section comparisons | |
Yi et al. | Fpga based accelerator for neural networks computation with flexible pipelining | |
Yuan et al. | CORAL: coarse-grained reconfigurable architecture for convolutional neural networks | |
CN113468102A (zh) | 混合粒度的计算电路模块和计算系统 | |
CN115168284A (zh) | 面向深度学习的粗粒度可重构阵列系统及计算方法 | |
Abdelhamid et al. | MITRACA: A next-gen heterogeneous architecture | |
CN112486904A (zh) | 可重构处理单元阵列的寄存器堆设计方法及装置 | |
CN112463717B (zh) | 一种粗粒度可重构架构下条件分支实现方法 | |
US20060248311A1 (en) | Method and apparatus of dsp resource allocation and use | |
CN108701021B (zh) | 处理元件 | |
CN112486908A (zh) | 层次化的多rpu多pea的可重构处理器 | |
CN118012628A (zh) | 一种数据处理方法、装置和存储介质 | |
Jiang et al. | Dynamic Multi-bit Parallel Computing Method Based on Reconfigurable Structure | |
CN117009287A (zh) | 一种于弹性队列存储的动态可重构处理器 | |
Kim | Towards adaptive balanced computing (ABC) using reconfigurable functional caches (RFCs) | |
Liu | Generic low power reconfigurable distributed arithmetic processor | |
GB2508162A (en) | Reconfigurable predicate logic computer architectures |
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 |