发明内容
本发明的目的在于提供一种向量处理器、神经网络加速器、芯片及电子设备,以至少解决上述技术问题。本发明提供的诸多技术方案中的优选技术方案所能产生的诸多技术效果详见下文阐述。
为实现上述目的,本发明提供了以下技术方案:
本发明提供的一种向量处理器,包括:行缓冲器、顶层控制器、一个向量处理单元、及与若干个CIM集群均连接的数据同步模块;所述数据同步模块对来自所述CIM集群的数据进行同步,并将同步后数据输入所述行缓冲器;所述行缓冲器以行为单位对所述同步后数据进行缓存,所述行缓冲器包括与所述CIM集群数量对应的行存储块组、及与所述CIM集群数量对应的行控制器,所述CIM集群、行存储块组、行控制器的数量相同,所述行存储块组用于对所述同步后数据进行缓存,所述行控制器用于检测所述行存储块组中缓存的数据量,并基于所述行存储块组中缓存的数据量产生缓冲信号;所述顶层控制器用于控制所述行缓冲器中缓存的所述同步后数据进入所述向量处理单元;所述向量处理单元通过至少一种算法对所述行缓冲器输出的数据进行向量运算;所述顶层控制器通过状态机进行控制,在所述顶层控制器的控制过程中,所述状态机依次处于空闲状态、等待仲裁结果状态、锁定CIM集群状态、数据准备状态、计算循环状态及等待清空状态。
优选的,基于所述行存储块组缓存的数据量,所述行控制器生成阈值检测信号,并将所述阈值检测信号传输至所述顶层控制器;基于所述阈值检测信号,所述顶层控制器控制启动所述行存储块组缓存的数据输出至所述向量处理单元。
优选的,所述行缓冲器还包括与所述CIM集群数量对应的重排模块,一个所述重排模块、一个所述行控制器、及一个所述行存储块组依次连接形成一个行缓冲器单元,每个所述重排模块用于对所述数据同步模块输出的同步后数据进行数据重排,并通过预设格式将所述数据同步模块输出的同步后数据进行格式转换并输出至所述行存储块组。
优选的,所述CIM集群的数量为N个,所述数据同步模块包括N个数据同步单元,每个所述数据同步单元连接于一个CIM集群与一个重排模块之间,以用于将与所述数据同步单元连接的CIM集群输出的数据进行同步后输出至与所述数据同步单元连接的重排模块。
优选的,所述数据同步单元与所述行控制器一对一连接,若所述行存储块组存在剩余空间,所述行控制器向所述数据同步单元发送第一启动信号,所述第一启动信号用于开启所述数据同步单元与所述重排模块之间的数据传输。
优选的,所述数据同步单元与所述重排模块之间开始进行数据传输时,所述重排模块向所述行控制器发送触发信号,基于所述触发信号,所述行控制器生成所述重排模块向所述行存储块组写数据的写地址。
优选的,所述数据同步单元通过FIFO模式对来自所述CIM集群的数据进行同步。
优选的,若所述行存储块组缓存的数据量超过预设阈值,所述顶层控制器给所述行控制器发送第二启动信号,所述行控制器生成读地址和读数据信号,并发送给所述行存储块组。
优选的,所述行缓冲器还包括一个行缓冲器切换模块,所述行缓冲器切换模块与所述顶层控制器连接,且每个所述行存储块组均与所述行缓冲器切换模块连接;基于所述读数据信号,所述行缓冲器切换模块读取所述行存储块组中缓存的数据,并将读取的数据输出至所述向量处理单元。
优选的,所述向量处理器还包括输入输出交互界面,所述输入输出交互界面与所述顶层控制器、向量处理单元连接;所述输入输出交互界面用于与所述向量处理单元进行数据交互。
优选的,所述向量处理器还包括参数切换器,所述参数切换器与所述顶层控制器、向量处理单元、及输入输出交互界面均连接;所述参数切换器用于切换不同的所述CIM集群的参数,以及刷新所述向量处理单元、输入输出交互界面的参数,并通过检查所述输入输出交互界面的参数判断任一或全部的所述CIM集群是否完成输出。
优选的,所述向量处理器还包括捷径缓冲器、向量处理器寄存器、及行缓冲器控制器中的至少一种;所述捷径缓冲器与所述向量处理单元、输入输出交互界面连接,用于进行所述向量处理单元元素计算时的数据缓冲;所述向量处理器寄存器与所述输入输出交互界面连接,并通过寄存器总线与所述向量处理单元连接,用于配置向量处理单元和控制模块的参数;所述行缓冲器控制器与所述行缓冲器、顶层控制器连接,用于控制所述行缓冲器。
一种神经网络加速器,包括以上任一项所述的向量处理器、及与所述向量处理器的数据同步模块连接的若干个CIM集群,每个所述CIM集群用于输出至少一路数据至所述数据同步模块。
一种芯片,包括以上所述的神经网络加速器。
一种电子设备,包括以上所述的神经网络加速器或以上所述的芯片。
实施本发明上述技术方案中的一个技术方案,具有如下优点或有益效果:
本发明通过行缓冲器及数据同步模块对多个CIM集群的输入数据进行同步和缓存,缓存后的数据通过顶层控制器控制进行数据输出,从而实现了在处理不同CIM集群中数据的负载均衡,较现有的设计方法节约了向量处理器的面积和功耗,同时,控制方式也更为简单,便于进一步缩小向量处理器的对应面积。本发明中CIM集群中数据的连续输出,向量处理器的计算等待时间大大降低,从而提高了向量处理单元的利用率,向量处理单元与CIM集群之间的匹配关系更优,在完成现有向量处理同等计算规模的前提下,可降低电路规模,实现了向量处理器的面积和功耗的降低,进而降低了成本。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下文将要描述的各种示例性实施例将要参考相应的附图,这些附图构成了示例性实施例的一部分,其中描述了实现本发明可能采用的各种示例性实施例。除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。应明白,它们仅是与如所附权利要求书中所详述的、本发明公开的一些方面相一致的流程、方法和装置等的例子,还可使用其他的实施例,或者对本文列举的实施例进行结构和功能上的修改,而不会脱离本发明的范围和实质。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”等指示的是基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的元件必须具有的特定的方位、以特定的方位构造和操作。术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。术语“多个”的含义是两个或两个以上。术语“相连”、“连接”应做广义理解,例如,可以是固定连接、可拆卸连接、一体连接、机械连接、电连接、通信连接、直接相连、通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明,仅示出了与本发明实施例相关的部分。
实施例一:
如图1、图2所示,本发明提供了一种向量处理器,包括:行缓冲器、顶层控制器、及一个向量处理单元、及与若干个CIM集群(computing in memory,存内计算,将次胞元和计算单元合并在一起形成独立的存算一体模块,卷积神经网络中的权重数据被直接映射到次胞元subcell里,无需从存储器中读取,CIM集群为进行存内计算的功能模块;CIM集群为向量处理器进行计算所需的数据输入模块,不同的CIM集群可根据需要对应相同或不同的计算模块,即输入相同或不同类型的计算数据,共用同一个向量处理单元进行计算)均连接的数据同步模块。数据同步模块对来自CIM集群的数据进行同步,并将同步后数据输入行缓冲器,数据同步模块用于对CIM集群的输入数据进行同步,并将同步后数据输入行缓冲器,从而实现CIM集群的数据同步输入行缓冲器。优选的,数据同步模块同步后的数据在通过并行数据转串行数据后,再输入行缓冲器,从而与向量处理单元的数据需求相匹配。行缓冲器以行为单位对所述同步后数据进行缓存,以行为单位缓存便于进行向量运算,行缓冲器对数据进行缓存后,避免数据直接输入向量处理单元造成数据输入速度与计算速度之间的不匹配,影响计算效率。行缓冲器包括与CIM集群数量对应的行存储块组、及与CIM集群数量对应的行控制器,优选CIM集群、行存储块组、行控制器的数量相同,便于每个CIM集群都有对应的行存储块组、行控制器。行存储块组用于对数据同步模块的输入数据进行缓存,行控制器用于检测行存储块组中的缓冲数据量,并基于行存储块组中缓存的数据量产生缓冲信号(该缓冲信号与行存储块组中缓存的数据量直接关联,既可为缓存的数据量阈值检测信号,也可以基于缓存的数据量的控制信号,具体包括阈值检测信号、第一启动信号等,从而可将该缓冲信号用于实现对行存储块组中的数据输入与数据输出控制),从而行存储块组、行控制器相互配合后即可实现对向量处理单元的数据输入控制。顶层控制器与行缓冲器连接,具体而言,与行控制器连接,从而行控制器基于行存储块组中缓存的数据量产的信号可传输至顶层控制器,顶层控制器基于该信号控制行缓冲器中的缓冲数据进入向量处理单元,从而顶层控制可通过控制信号对行缓冲器的数据缓存及输出策略进行控制,实现不同CIM集群的输入数据共用同一个向量处理单元进行计算。向量处理单元通过至少一种算法对行缓冲器输出的数据进行向量运算。向量处理单元进行的运算包括但不限于元素加减乘除、上下采样缩放、池化、批量归一化、层归一化等深度学习神经网络算子。本发明通过行缓冲器及数据同步模块对多个CIM集群的输入数据进行同步和缓存,缓存后的数据通过顶层控制器控制进行数据输出,从而实现了在处理不同CIM集群中数据的负载均衡,较现有的设计方法(如以每个CIM集群都匹配一个向量处理单元作为评估标准)节约了向量处理器的面积和功耗,同时,控制方式也更为简单,便于进一步缩小向量处理器的对应面积和功耗。由于CIM集群中数据的连续输出,向量处理器的向量处理单元可重复利用同一硬件资源进行运算,而现有的向量处理器中由于CIM集群数据输出不连续,向量处理单元在CIM集群无数据输出时,需要等待数据输入,这个等待时间向量处理单元处于闲置状态。本发明中的向量处理单元的等待时间大大降低,从而提高了向量处理单元的利用率,向量处理单元与CIM集群之间的匹配关系更优,在完成现有向量处理同等计算规模的前提下,可降低电路规模和功耗,实现了向量处理器的面积和功耗的降低,降低了成本。如图3所示,某一神经网络在某一个数据集下计算使用不同数量CIM集群输入8比特数据输出一个结果周期的概率分布,图3中从左到右依次是使用1个、2个、3个、4个的累加分布,竖轴为概率值,横轴为输出周期数,可知在累加次数越多时,神经网络的输出间隔时间越长。如图4所示,左侧坐标为连续概率分布坐标,右侧坐标为使用的处理单元数量,横轴为输出周期数,通过图2中概率对应的累积分布函数可知,所需处理单元数量需求随着输出周期的增加而减少,从而本发明提出的方案可实现以牺牲5%以内的性能换取50%的向量处理器面积减小。如图5所示,现有技术中,4路CIM集群所需的向量处理单元数量为128个,1路CIM集群的所需的向量处理单元数量为32个,而本发明所需的向量处理单元数量仅为16个,所需向量向量处理单元数量减少50%,在降低所需向量处理单元数量时,向量处理器及包括其芯片的面积和功耗自然也随之降低。
作为可选的实施方式,基于行存储块组缓存的数据量,行控制器生成阈值检测信号,当行存储块组达到行存储块组容量的一定百分比时,具体可根据实际需要进行设置,就可生产特定的阈值检测信号,并将阈值检测信号传输至顶层控制器。基于该阈值检测信号,顶层控制器控制启动行存储块组的数据输出至向量处理单元,从而行存储块组中的缓存的数据只会在达到一定数据量时才输出至向量处理单元,进行下一步的运算过程,从而顶层控制器实现了行存储块组与向量处理单元的数据传输控制,更好实现多个CIM集群的输入数据与同一个向量处理单元计算能力之间的匹配,提高向量处理单元的利用效率。
作为可选的实施方式,如图2所示,行缓冲器还包括与CIM集群数量对应的重排模块,一个重排模块、一个行控制器、及一个行存储块组依次连接形成一个行缓冲器单元,即重排模块与行控制器、行存储块组均进行一对一连接,因此,重排模块与行控制器、及行存储块组数量相同,从而每个CIM集群都有一个对应的行缓冲器单元对数据进行存储即读取控制,避免了不同CIM集群之间的数据混用影响向量处理器的计算效率,可提高计算效率。图4中均为4个,也可根据需要设定为其他数量。每个重排模块用于对数据同步模块输出的同步后数据进行数据重排,从而适应向量处理单元计算时对数据格式的需求,重排模块通过预设格式将数据同步模块输出的同步后数据进行格式转换并输出至行存储块组,具体而言,该预设格式优选为“通道(Channel)-宽(width)-高(height)”,以与神经网络中张量的维度相匹配。
作为可选的实施方式,CIM集群的数量为N个,数据同步模块包括N个数据同步单元,每个数据同步单元连接于一个CIM集群与一个重排模块之间,即数据同步单元与CIM集群集群的数量相同,并一对一连接,以用于将与数据同步单元连接的CIM集群输出的数据进行同步后输出至与数据同步单元连接的重排模块。从而可对每一个行缓冲器单元对应一个数据同步单元,避免了数据同步的混乱,提高了数据同步的效率。
作为可选的实施方式,数据同步单元与行控制器连接,若行存储块组存在剩余空间,即行存储块组还能够对CIM的输入数据进行存储,行控制器向数据同步单元发送第一启动信号,第一启动信号用于开启数据同步单元与重排模块之间的数据传输。优选的,行存储块组存在设定剩余空间范围内才发送第一启动信号,避免行存储块组在数据接近存满时依然接收下一批数据同步单元的同步后数据,产生数据溢出造成向量处理器的计算错误,该剩余空间范围可根据实际运算需要及行存储块组的容量大小进行设定,如行存储块组存在剩余空间超过10%、5%等。数据同步单元的数据输入。通过行控制器对数据同步单元的同步后数据输入进行控制,可避免行存储块组的数据溢出或数据存储过少。
作为可选的实施方式,数据同步单元与重排模块之间开始进行数据传输时,重排模块向行控制器发送触发信号,基于触发信号,行控制器生成重排模块向行存储块组写数据的写地址。行控制器获取的行存储块组中的空闲区块对应的空闲地址,该写地址从空闲地址中产生,通过写地址,重排模块即可向行存储块组写数据。从而便于数据同步单元与重排模块之间的数据传输控制,从而更便于控制CIM集群的输出数据进入向量处理单元,提高向量处理单元所需运算数据输入的连续性。
作为可选的实施方式,数据同步模块通过FIFO模式进行输入数据的同步,FIFO模式即先入先出(First in First Out),由于向量处理器计算时每一个时间点的数据一般具有关联性,从而FIFO模式下CIM集群中的数据能够按照先后顺序进出行缓冲器,向量处理器可按照预设的顺序进行运算,从而运算结果输出的先后顺序也可预期,便于提高向量处理器的计算效率。当然,数据同步模块也可以根据具体运算场景的需要,选择先进后出(FILO,First in Last Out) 、最近最少使用(LRU,Least Recently Used)、最近最不常用(LFU,Least Frequently Used)等模式进行数据同步,从而适配较为特殊的运算场景。优选地,不同数据同步模块使用不同模式的组合进行输入数据的同步,从而向量处理器可实现更灵活的运算过程。
作为可选的实施方式,在行存储块组存储缓存的数据量超过预设阈值时,该预设阈值根据需要进行设定,如90%、95%等,行缓冲器的行控制器生成的阈值检测信号为高阈值信号,在高阈值信号下,行存储块组不能再进行数据写入,而需要将已经存储的数据输出。基于高阈值信号,顶层控制器给行控制器发送第二启动信号,行控制器生成读地址和读数据信号,并发送给行存储块组。
作为可选的实施方式,如图2所示,行缓冲器还包括一个行缓冲器切换模块,行缓冲器切换模块与顶层控制器连接,从而顶层控制器可对行缓冲器切换模块输出进行控制,且每个行存储块组均与行缓冲器切换模块连接,即多个行存储块组共享一个行缓冲器切换模块,从而行缓冲器切换模块可以对全部CIM集群的输入数据进行切换输出。基于读数据信号,行缓冲器切换模块读取行存储块组中缓存的数据,并将读取数据进行输出,具体而言,数据输出至向量处理单元,用于向量处理单元进行向量计算。
作为可选的实施方式,如图1所示,向量处理器还包括输入输出交互界面,输入输出交互界面与顶层控制器、向量处理单元连接,从而顶层控制器可对输入输出交互界面进行控制。输入输出交互界面用于与向量处理单元进行数据交互,如接收向量处理单元的计算结果,或向向量处理单元输入计算所需的数据。优选的,输入输出交互界面还可与向量处理器外部的共享存储器连接以进行数据交互,从而拓展向量处理器的功能。
作为可选的实施方式,如图1所示,向量处理器还包括参数切换器,参数切换器与顶层控制器、向量处理单元、及输入输出交互界面均连接,从而参数切换器可以根据顶层控制器的控制信号对向量处理单元、输入输出交互界面的参数进行切换。具体而言,参数切换器用于切换不同的CIM集群的参数,切换后即实现了CIM集群的更新,以及刷新向量处理单元、输入输出交互界面的参数,这种刷新过程也实现了新参数的载入,从而可实现了向量处理器中的动态计算,并通过检查输入输出交互界面的参数判断任一或全部的CIM集群是否完成输出,若所有CIM集群参数都已经输出完成,则向量处理器输出结束信号。
作为可选的实施方式,如图1所示,向量处理器还包括捷径缓冲器、向量处理器寄存器、及行缓冲器控制器中的至少一种。捷径缓冲器与向量处理单元、输入输出交互界面连接,用于进行向量处理单元元素计算时的数据缓冲。捷径缓冲器输入输出交互界面连接后,通过共享存储器进行数据输入,数据来源是前几层的输出数据,可加快计算速度。向量处理器寄存器与输入输出交互界面连接,并通过寄存器总线与向量处理单元连接,用于配置向量处理单元和控制模块的参数,便于向量处理器根据不同计算场景的需要进行配置,提高适用性。行缓冲器控制器与行缓冲器、顶层控制器连接,用于控制行缓冲器。
作为可选的实施方式,顶层控制器通过状态机进行控制,通过状态机控制便于向量处理器的整个计算过程按照预设模式进行,在顶层控制器的控制过程中,状态机依次处于空闲状态、等待仲裁结果状态、锁定CIM集群状态、数据准备状态、计算循环状态及等待清空状态,具体控制过程如图6所示。向量处理器上电,状态机处于空闲状态;当接收到状态机的启动信号后,状态机从空闲状态进入等待仲裁结果状态,仲裁结果状态由行存储块组的已存数据量确定;当接收到CIM集群预设的数据量后,该预设的数据量根据计算需要进行设置,触发顶层控制器,等待仲裁电路锁定后,即相应的读数据电路、写数据电路进行电路连接,状态机进入锁定CIM集群状态,锁定CIM集群后,该CIM集群中的数据即可进行数据传输;若所有CIM集群计算完成,则状态机进入结束状态;在锁定CIM集群状态时,参数切换器将需要用到的参数加载到向量处理单元不同的计算模块中,状态机进入数据准备状态;状态机等待向量处理器寄存器刷新完成后,向量处理单元根据刷新后的参数进行计算,进入计算循环状态;循环结束后,状态机进入等待清空状态;在计算通路数据清空后,状态机进入结束检查状态,若顶层控制器判断单一CIM集群运算完成,状态机跳转回等待仲裁结果状态,以便于进行下一个CIM集群的运算,若顶层控制器判断单一CIM集群运算未完成,状态机跳转回锁定CIM集群状态,便于继续进行该CIM集群的运算,若顶层控制器判断所有CIM集群计算完成,状态机进行结束状态,从而等待下一次的CIM集群运算。
本发明的工作过程如下:以CIM集群1为例解释数据流过程,数据从CIM集群1输出存入到FIFO组;CIM集群1对应的行缓冲器单元判断自身状态,在行缓冲器单元有空间的情况下传送启动信号给对应的FIFO组;FIFO组输出数据到集群1重排模块。集群1重排模块将“通道(Channel)-宽(width)-高(height)”格式输出到集群1行存储块组。触发信号将传输到集群1行控制器,并生成对应于写数据的写地址,并根据此写地址在集群1行存储块组中存放该数据。集群1行存储块组会累加对应的数据量统计寄存器。如果存放的数据量大于预先编程设定好的阈值,则集群1行控制器将传输阈值检测信号置为高。顶层控制器在接收到阈值检测信号为高时,将切换行缓冲器切换模块到传输阈值检测信号为高集群数据通路,并传送启动信号给集群1行控制器。集群1行控制器将生成读地址和读控制信号给集群1行存储块组。集群1行存储块组将产生读数据给行缓冲器切换模块,行缓冲器切换模块会将数据输出给向量处理单元进行计算。
实施例仅是一个特例,并不表明本发明就这样一种实现方式。
实施例二:
一种神经网络加速器,包括实施例一的向量处理器及与向量处理器的数据同步模块连接的若干个CIM集群,每个CIM集群用于输入至少一路数据至数据同步模块,CIM集群中的一路数据对应神经网络中的一个权重区域。本实施例中的CIM集群优选为4个,当然可根据实际运算需要设定其他个数,以适用于各种不同的运算场景,此处不做具体限定。如图1、图7所示,向量处理器为神经网络加速器中的一个功能模块,还包括前处理模块、存内计算矩阵、共享存储器等。其中前处理模块与存内计算矩阵连接,存内计算矩阵与向量处理器连接,共享存储器与前处理模块、存内计算矩阵单向连接,还与向量处理器连接。存内计算矩阵可以是由多个CIM形成的矩阵,通过采用实施例一中的向量处理器,神经网络加速器的面积和功耗都得到有效降低,便于进行使用。
另外,存内计算可以解决内存墙问题。冯诺依曼架构的计算机***把存储器和处理器分割成了两个部分,而处理器频繁访问存储器的开销就形成了内存墙,而且高频的数据搬运往往是芯片,尤其是AI领域芯片占据功耗的首要原因,进而影响芯片算力、效率和功耗等。存内计算的基本思路就是把计算和存储合二为一,从而实现减少处理器访问存储器的频率(因为计算已经在存储器内完成了大部分,所以,本发明提供的含有感存算一体技术(集传感、储存和运算为一体)的神经网络加速器可以具有超高的算力、效率和能效比。所以,本发明提供的神经网络加速器可以在不影响其本身功能的情况下,改善其面积和功耗的性能。本发明提供的神经网络加速器可以广泛的应用于诸多AI领域,例如基于感存算一体技术架构实现的模数混合AI视觉芯片,使该AI视觉芯片具有更低功耗与更高的能效。
实施例三:
一种芯片,包括实施例二中的神经网络加速器。本发明提供的芯片中各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算设备中的处理器中,也可以以软件形式存储于计算设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作,可有效降低芯片面积、成本和功耗。
实施例四:
一种电子设备,包括实施例二中的神经网络加速器或实施例三中的一种芯片。本发明提供的芯片可应用于自动驾驶、AR、VR、激光雷达,还可广泛应用于智能手机、平板电脑、可穿戴电子装备、智能家居电子产品、工业或医疗或电池供电类等一系列对低功耗与高能效比有需求的电子设备。
以上所述仅为本发明的较佳实施例而已,本领域技术人员知悉,在不脱离本发明的精神和范围的情况下,可以对这些特征和实施例进行各种改变或等同替换。另外,在本发明的教导下,可以对这些特征和实施例进行修改以适应具体的情况及材料而不会脱离本发明的精神和范围。因此,本发明不受此处所公开的具体实施例的限制,所有落入本申请的权利要求范围内的实施例都属于本发明的保护范围。