本公开涉及集成电路设计,尤其是一种用于神经网络的缓冲运算电路、芯片及计算装置。
背景技术:
1、随着人工智能(ai,artificial intelligence)技术的兴起,它对硬件系统的算力要求越来越高。ai加速芯片是专门用于ai算法的芯片,为ai系统提供了高效的算力支持。池化运算(pooling)是ai算法中常见的算子,因为其与卷积(convolution)算子紧密相连,所以对pooling算子的加速是ai加速芯片的重要功能之一,对整个芯片的加速能力具有重要的影响。
2、池化算子的运算,主要是将一个张量(tensor)按照一定的参数设定(如滑动窗口大小、窗口滑动步长)进行采样,然后将采样数据进行一定的运算(例如求最大值、最小值、平均值等),输出一个经过下采样压缩的张量。
3、对于池化算子电路的设计,通常需要解决两个关键问题:
4、第一,在一定的加速性能的要求下,如何降低加速电路占用的硬件资源。因为越多的硬件资源占用,意味着更高的功耗和面积成本。
5、第二,在一定的加速性能的要求下,如何降低加速电路对存储单元(例如静态随机存取存储器)的访存次数。因为对存储单元的访存会消耗大量的功耗。另外,访存次数的降低,可以节省系统的访存带宽。
6、现有的针对神经网络中的张量按照滑动窗口进行运算的加速电路(例如池化运算电路),主要包含以下两种方案。
7、方案一,加速电路的缓冲单元缓冲存储输入张量的数据,待滑动窗口每次滑动选定的数据区域的数据缓冲完成时,由运算单元进行功能运算,输出运算结果,写入到存储器。该方案缓冲单元的数量根据其支持的滑动窗口的大小及其具体的缓冲策略确定。
8、方案二:加速电路的缓冲单元缓冲存储输出张量的数据,在输入单元读取输入张量的数据期间,完成功能计算,将运算结果存入缓冲单元,缓冲单元存储输出张量的一行数据。该方案缓冲单元的数量根据其设定的输出张量每行的缓冲策略相关。
9、上述方案一,由于池化运算是一种下采样运算,每次运算的输入张量的尺寸总是大于输出张量的尺寸,所以输入数据的数量总是大于输出数据的数量,缓冲输入数据就会需要大量的缓冲资源,从而增加了电路的面积成本。该方案能够支持的滑动窗口的大小,受到缓冲资源的限制,即为了支持更大的滑动窗口的运算,需要设计更多的缓冲资源。
10、上述方案二,由于所有的缓冲单元均用于缓冲存储输出张量一行数据,当输出的一行数据的数量较少时,会出现部分缓冲区域闲置的情况,从而降低了缓冲单元的利用率。
11、该方案输入数据的复用度受限,增加了外部sram(静态随机存取存储器,staticrandom-access memory)的读取次数,增加了系统功耗,因为只缓冲输出一行结果数据,所以输入数据在多行之间的复用性就无法利用。
技术实现思路
1、本公开的实施例提供了一种用于神经网络的缓冲运算电路,该电路包括:第一预设数量个运算单元、第一预设数量个缓冲单元、输入单元、输出单元和存储器,其中,运算单元和缓冲单元一一对应;输入单元,用于根据滑动窗口的大小和滑动步长,确定存储器中存储的输入张量包括的每个数据所属的窗口区域,其中,输入张量中的每个窗口区域对应于一个运算单元;从存储器中读取输入张量中的数据,并将读取的数据输入对应的运算单元;第一预设数量个运算单元中的运算单元,用于对接收的数据按照预设运算方式进行运算,得到运算结果集合,并将运算结果集合输入对应的缓冲单元;输出单元,用于在第一预设数量个运算单元中的任意运算单元运算结束时,从对应的缓冲单元获取运算结果集合,并将获取的运算结果集合作为输出张量包括的数据存入存储器。
2、在一些实施例中,第一预设数量个运算单元中的运算单元包括第二预设数量个运算子单元,输入张量的每个通道分别对应一个运算子单元,第二预设数量个运算子单元中的运算子单元用于对输入的对应通道的数据按照预设运算方式进行运算。
3、在一些实施例中,第一预设数量个缓冲单元中的缓冲单元包括第二预设数量个数据寄存器,每个数据寄存器对应一个运算子单元,第二预设数量个数据寄存器中的每个数据寄存器用于存储对应的运算子单元输出的运算结果。
4、在一些实施例中,输入单元包括第一计数器组,用于对输入单元从输入张量读取的数据所对应的点进行计数;输入单元进一步用于:按照输入张量中的点的排列顺序,依次从存储器中读取每个点对应的数据;利用计数器组对当前读取的数据进行计数;根据计数器组当前的计数值,确定当前读取的数据对应的至少一个运算单元,并将当前读取的数据输入至少一个运算单元。
5、在一些实施例中,第一计数器组包括以下至少一种计数器:用于对张量中的每个窗口区域包括的点进行计数的第一类计数器,用于对张量中的每行中已读取的部分点进行计数的第二类计数器,用于对张量中已读取的部分行数进行计数的第三类计数器,用于对张量中的每行中已读取的全部点进行计数的第四类计数器,用于对张量中已读取的全部行数进行计数的第五类计数器,用于对张量中已读取的通道数进行计数的第六类计数器。
6、在一些实施例中,输入单元进一步用于:响应于第一计数器组当前的计数值表示已完成对目标窗口区域包括的数据的运算,向输出单元发送目标窗口区域对应的运算结束提示信号;输出单元进一步用于:响应于接收到输入单元发送的运算结束提示信号,将目标窗口区域对应的缓冲单元内的运算结果集合写入存储器中。
7、在一些实施例中,输出单元包括第二计数器组,用于在将目标窗口区域对应的缓冲单元内的运算结果写入存储器后,对写入存储器的运算结果集合进行计数。
8、在一些实施例中,第二计数器组包括以下至少一种计数器:用于对输出张量中的每行已写入的部分点数进行计数的第七类计数器,用于对输出张量中已写入的部分行数进行计数的第八类计数器,用于对输出张量中的每行已写入的全部点进行计数的第九类计数器,用于对输出张量中已写入的全部行数进行计数的第十类计数器,用于对输出张量中已写入的通道数进行计数的第十一类计数器。
9、根据本公开实施例的另一个方面,提供了一种芯片,该芯片包括上述用于神经网络的缓冲运算电路。
10、根据本公开实施例的另一个方面,提供了一种计算装置,该计算装置包括上述芯片。
11、本公开上述实施例提供的用于神经网络的缓冲运算电路、芯片及计算装置,通过设置一一对应的多个运算单元和缓冲单元,在对神经网络进行张量运算时,每个运算单元对对应的滑动窗口覆盖的窗口区域内的数据进行运算,窗口区域内的数据由输入单元从存储器中读取并输入对应的运算单元,运算单元将运算结果集合存入对应的缓冲单元,在任意运算单元运算结束时,由输出单元将对应的缓冲单元内的运算结果集合作为输出张量包括的数据存入存储器。本公开实施例所采用的多个缓冲单元,相比目前常用的容量较大的单个缓冲单元,所占用的电路面积大大减小;并且输出张量的数据是按点逐个缓冲存储到对应的缓冲单元,因此,可以在运算过程中充分利用每个缓冲单元,避免出现缓冲单元内的部分空间闲置的情况,从而提高了缓冲单元的存储效率;此外,相比目前常用的池化运算电路,需要随着滑动窗口的移动从存储器中读取大量重复的数据,本公开实施例在由各个运算单元计算输出张量中的每一批次的点对应的数据时,只需对存储器中的输入张量包含的当前批次对应的数据读取一次,读取的数据可以同时被多个运算单元复用,大大降低了对存储器的访问次数,提高了整个电路的运行效率;本公开实施例提供的电路不受滑动窗口的大小和滑动步长限制,还可以适用各种大小的张量,从而提高了电路应用的普适性。
12、下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
1.一种用于神经网络的缓冲运算电路,包括:第一预设数量个运算单元、第一预设数量个缓冲单元、输入单元、输出单元和存储器,其中,运算单元和缓冲单元一一对应;
2.根据权利要求1所述的电路,其中,所述第一预设数量个运算单元中的运算单元包括第二预设数量个运算子单元,所述输入张量的每个通道分别对应一个运算子单元,所述第二预设数量个运算子单元中的运算子单元用于对输入的对应通道的数据按照所述预设运算方式进行运算。
3.根据权利要求2所述的电路,其中,所述第一预设数量个缓冲单元中的缓冲单元包括第二预设数量个数据寄存器,每个数据寄存器对应一个运算子单元,所述第二预设数量个数据寄存器中的每个数据寄存器用于存储对应的运算子单元输出的运算结果。
4.根据权利要求1所述的电路,其中,所述输入单元包括第一计数器组,用于对所述输入单元从所述输入张量读取的数据所对应的点进行计数;
5.根据权利要求4所述的电路,其中,所述第一计数器组包括以下至少一种计数器:
6.根据权利要求4所述的电路,其中,所述输入单元进一步用于:
7.根据权利要求6所述的电路,其中,所述输出单元包括第二计数器组,用于在将所述目标窗口区域对应的缓冲单元内的运算结果写入所述存储器后,对写入所述存储器的运算结果集合进行计数。
8.根据权利要求7所述的电路,其中,所述第二计数器组包括以下至少一种计数器:
9.一种芯片,其特征在于,包括根据权利要求1-8中任一项所述的用于神经网络的缓冲运算电路。
10.一种计算装置,其特征在于,包括根据权利要求9所述的芯片。
