本发明涉及存内计算技术领域,尤其涉及一种基于乒乓缓冲的存内计算系统及方法。
背景技术:
存内计算是一种新兴的电路架构,不同于传统的存储与计算分离的冯诺依曼架构,存内计算将存储和计算融为一体,在存储单元的内部完成计算。相比于传统结构,存内计算具有高并行度、高能量效率的特点,对于需要大量并行矩阵向量乘法操作的算法,特别是神经网络算法,是一种更优的替代方案。
目前基于sram结构的存内计算架构,由于面积较大,无法把所有的网络权重数据全部存储在存内计算的sram单元当中,例如,某个2kb的存内计算sram设计,所需的芯片面积是0.43mm2。在典型的神经网络应用中,权重数据的存储量往往在1~100mb量级。1mb的存储需求要求0.43*(1mb/2kb)=220mm2的芯片面积,这个数字已经超过大多数现有芯片的完整面积,这种巨大面积开销是不可接受的。
在无法存储所有权重数据的前提下,现有一种可行的做法是轮换存内计算sram中的权重数据。在当前存储的权重数据所需的计算操作全部执行之后,更换存储的权重数据,然后再执行所对应的计算操作,通过分时依次计算的方式实现。然而,在更换权重数据的过程中,存内计算的计算操作无法执行,会带来显著的性能损失。在一个典型的cifar-10模型和resnet18网络的例子中,更换权重数据带来的性能损失大约占总时间的26%,在某些计算层中甚至占到了98%。因此,现在亟需一种基于乒乓缓冲的存内计算系统及方法来解决上述问题。
技术实现要素:
针对现有技术存在的问题,本发明提供一种基于乒乓缓冲的存内计算系统及方法。
本发明提供一种基于乒乓缓冲的存内计算系统,包括数据获取模块、存内计算模块和计算结果存储模块,其中:
所述数据获取模块,用于获取多组第一输入数据,并将所述多组第一输入数据发送到所述存内计算模块;
所述存内计算模块中设置有乒乓缓冲单元,用于对所述多组第一输入数据同时进行写入存储和存内计算,其中,所述乒乓缓冲单元是由两个乒乓缓冲区域组成的,所述乒乓缓冲区域具有写入存储功能和存内计算功能,且所述写入存储功能和所述存内计算功能,在两个乒乓缓冲区域之间,通过乒乓轮换方式进行切换;
所述计算结果存储模块,用于存储存内计算得到的计算结果。
根据本发明提供的一种基于乒乓缓冲的存内计算系统,所述存内计算模块中设置有多个乒乓缓冲单元。
根据本发明提供的一种基于乒乓缓冲的存内计算系统,所述乒乓缓冲区域分别是由多个存储器单元构成的。
根据本发明提供的一种基于乒乓缓冲的存内计算系统,所述系统还包括数据存储模块,用于预先写入存储第二输入数据,并通过所述存内计算模块,对所述第二输入数据进行存内计算。
根据本发明提供的一种基于乒乓缓冲的存内计算系统,所述系统还包括输入驱动器模块,用于驱动所述数据存储模块,将第二输入数据发送到存内计算模块中。
根据本发明提供的一种基于乒乓缓冲的存内计算系统,所述系统还包括字线驱动器模块和时序控制模块,其中:
所述字线驱动器模块,用于激活多个字线的数据进行存内计算;
所述时序控制模块,用于根据预设时序要求,生成对应的内部电路信号时序,以根据所述内部电路信号时序进行存内计算。
本发明还提供一种基于上述任一种所述存内计算系统的存内计算方法,包括:
步骤s1,获取多组第一输入数据,并将所述多组第一输入数据发送到存内计算模块的乒乓缓冲单元;
步骤s2,当所述乒乓缓冲单元中任一乒乓缓冲区域对当前接收到的第一输入数据进行存内计算时,所述乒乓缓冲单元中另一乒乓缓冲区域对下一组第一输入数据进行写入存储;
步骤s3,在本轮次存内计算和写入存储完成之后,通过乒乓轮换方式,对两个乒乓缓冲区域的写入存储功能和存内计算功能进行切换,以使得在下一轮次中,切换功能后的两个乒乓缓冲区域分别对后续第一输入数据执行步骤s2至步骤s3。
根据本发明提供的一种存内计算方法,所述方法还包括:
将第二输入数据写入存储到数据存储模块;
通过所述存内计算模块,对所述数据存储模块中预先写入的第二输入数据进行存内计算,获取对应的存内计算结果。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述存内计算方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述存内计算方法的步骤。
本发明提供的基于乒乓缓冲的存内计算系统及方法,通过设计具有乒乓缓冲的存内计算架构,能够同时支持存内计算操作和更新权重操作,从而降低更新权重时对于存内计算性能的影响,提升系统的实际性能。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的基于乒乓缓冲的存内计算系统的结构示意图;
图2为本发明提供的具有多个乒乓缓冲单元的存内计算系统的示意图;
图3为本发明提供的乒乓缓冲单元的结构示意图;
图4为本发明提供的存内计算方法的流程示意图;
图5为本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明提供的基于乒乓缓冲的存内计算系统的结构示意图,如图1所示,本发明提供了一种基于乒乓缓冲的存内计算系统,包括数据获取模块101、存内计算模块102和计算结果存储模块103,其中:
所述数据获取模块101,用于获取多组第一输入数据,并将所述多组第一输入数据发送到所述存内计算模块102。
在本发明中,首先获取待进行存内计算的数据。在神经网络算法中,一般可以把这些数据理解为权重参数(weight),在不同的架构中,也有可能是输入图像或称为激活值(feature-map,activation)。
所述存内计算模块102中设置有乒乓缓冲单元104,用于对所述多组第一输入数据同时进行写入存储和存内计算,其中,所述乒乓缓冲单元104是由两个乒乓缓冲区域1041组成的,所述乒乓缓冲区域1041具有写入存储功能和存内计算功能,且所述写入存储功能和所述存内计算功能,在两个乒乓缓冲区域1041之间,通过乒乓轮换方式进行切换。
在本发明中,多个第一输入数据可以分为n组(n为正整数),当第k组第一输入数据(k为正整数,k<n)在存内计算模块102中的一个乒乓缓冲区域1041执行计算时,第k 1组第一输入数据可以同时被写入到存内计算模块102中另一个乒乓缓冲区域1041,并且不影响当前第k组输入数据的计算。当本轮次存内计算和写入存储完成之后,两个乒乓缓冲区域1041通过乒乓轮换方式进行切换,例如,当执行存内计算的乒乓缓冲区域1041完成存内计算之后,此时,将下一组第一输入数据写入到该乒乓缓冲区域1041中;同时,当另外一个执行写入的乒乓缓冲区域1041完成写入之后,对写入的第一输入数据进行存内计算,从而通过反复的乒乓轮换方式对每组第一输入数据同时进行写入和存内计算。
所述计算结果存储模块103,用于存储存内计算得到的计算结果。
在本发明中,存内计算模块102执行了对第一输入数据的计算操作之后,例如,矩阵向量乘法操作,将存内结果输出到计算结果存储模块103进行存储。
本发明提供的基于乒乓缓冲的存内计算系统,通过设计具有乒乓缓冲的存内计算架构,能够同时支持存内计算操作和更新权重操作,从而降低更新权重时对于存内计算性能的影响,提升系统的实际性能。
在上述实施例的基础上,所述存内计算模块中设置有多个乒乓缓冲单元。
在本发明中,图2为本发明提供的具有多个乒乓缓冲单元的存内计算系统的示意图,可参考图2所示,每个乒乓缓冲单元以阵列式排列,以p行,q列的乒乓缓冲单元构成存内计算模块。当获取到大量的输入数据时,将每2组数据作为一个输入,发送到每个乒乓缓冲单元中,使得每个乒乓缓冲单元对各自接收到的2组数据同时进行写入和存内计算,最后并将存内计算结果进行存储。
在上述实施例的基础上,所述乒乓缓冲区域分别是由多个存储器单元构成的。
在本发明中,图3为本发明提供的乒乓缓冲单元的结构示意图,可参考图3所示,乒乓缓冲单元包含了写入选择电路,乒乓缓冲区域x、乒乓缓冲区域y以及存内计算电路。在乒乓缓冲区域x或乒乓缓冲区域y中,各设置有n个静态随机存取存储器(staticrandom-accessmemory,简称sram)单元(n为正整数),乒乓缓冲区域x或乒乓缓冲区域y采用乒乓轮换的方式,分别执行写入存储和存内计算操作,其中,存内计算操作在存内计算电路(该电路结构可为现有存内计算电路结构)中实现,乒乓轮换的功能通过写入选择电路和存内计算电路实现。当乒乓缓冲区域x执行写入操作,乒乓缓冲区域y执行存内计算操作时,通过写入选择电路,写入数据被选择写入到乒乓缓冲区域x中,存内计算电路从乒乓缓冲区域y中读取数据进行计算操作。当乒乓缓冲区域y执行写入操作,乒乓缓冲区域x执行存内计算操作时,控制流程进行相应的乒乓轮换。需要说明是,图3中所示的存储器单元可以是6t或8t的通用sram存储单元电路,也可以是其他现有存储单元电路,例如,阻性随机存取存储器(resistiverandomaccessmemory,简称rram)。存内计算电路也可以通过各种现有形式的存内计算电路具体实现。
在上述实施例的基础上,所述系统还包括数据存储模块,用于预先写入存储第二输入数据,并通过所述存内计算模块,对所述第二输入数据进行存内计算。
在本发明中,数据存储模块可以是存内计算系统外部的flash或者动态随机存取存储器(dynamicrandomaccessmemory,简称dram)存储,也可以是存内计算系统内部的sram存储,还可以是其他存储方式或多种存储方式的结合。该数据存储模块预先已写入待进行存内计算的全部数据,可通过存内计算模块直接对这些数据进行存内计算,并和乒乓缓冲的存内计算同时进行。
在上述实施例的基础上,所述系统还包括输入驱动器模块,用于驱动所述数据存储模块,将第二输入数据发送到存内计算模块中。
在本发明中,可参考图2所示,存内计算系统还包括输入驱动器模块,对于当前已经存储在存内计算模块乒乓缓冲单元中的第k组第一输入数据,将与从输入驱动器模块输入的第二输入数据并行进行所需的存内计算操作,同时,乒乓缓冲单元能够对第k 1组第一输入数据执行写入。可参考图2所示,存内计算系统包括字线驱动器模块和时序控制模块,其中:
所述字线驱动器模块,用于激活多个字线的数据进行存内计算;
所述时序控制模块,用于根据预设时序要求,生成对应的内部电路信号时序,以根据所述内部电路信号时序进行存内计算。除此之外,存内计算系统还包括读写模块和输出模块
在本发明中,字线驱动器模块实现两种功能,一种是传统存储器已具备的通用功能,可以选中激活一个字线的数据进行读操作或写操作;另一种是存内计算需要支持的新功能,能够选中激活多个字线的数据进行存内计算操作,具体地,可参考图2和图3所示,一个字线(p,n)的数据有qq个数据:乒乓缓冲单元(p,tt*qq)对应的(x/y,n),乒乓缓冲单元(p,tt*qq 1)对应的(x/y,n),…,乒乓缓冲单元(p,tt*qq qq-1)对应的(x/y,n),其中,tt为自然数,qq为自然数,qq≤q。
进一步地,时序控制模块实现两种功能,一种是传统存储器已具备的通用功能,可以根据相应设计需求,控制内部电路时序进行传统存储器的读写操作;另一种是存内计算需要支持的时序,根据相应设计需求,合理地产生内部电路信号时序,从而实现正确的存内计算功能。
进一步地,读写模块是现有存储器已具备的通用模块;输出模块是存内计算中所需要的通用模块,将存内计算的结果输出。
支持乒乓缓冲的存内计算模块相比于传统的存内计算单元电路,同时支持了存内计算操作和写入操作。
在一实施例中,经由数字电路和模拟电路的前端设计、后端设计和晶元制造后,得到包含了本发明具有乒乓缓冲存内计算系统的集成电路芯片。工艺制程采用台积电65nm工艺,然后进行封装芯片并测试功耗和性能。在实际芯片测试中,对于cifar-10数据集上的resnet18网络模型,相比于不采用乒乓缓冲的存内计算架构,本发明在网络模型的各层运算过程中实现了最高1.94x的性能提升,对整个网络模型的平均提升是1.26倍。
图4为本发明提供的存内计算方法的流程示意图,如图4所示,本发明提供了一种基于上述各实施例的存内计算系统的存内计算方法,包括:
步骤s1,获取多组第一输入数据,并将所述多组第一输入数据发送到存内计算模块的乒乓缓冲单元;
步骤s2,当所述乒乓缓冲单元中任一乒乓缓冲区域对当前接收到的第一输入数据进行存内计算时,所述乒乓缓冲单元中另一乒乓缓冲区域对下一组第一输入数据进行写入存储;
步骤s3,在本轮次存内计算和写入存储完成之后,通过乒乓轮换方式,对两个乒乓缓冲区域的写入存储功能和存内计算功能进行切换,以使得在下一轮次中,切换功能后的两个乒乓缓冲区域分别对后续第一输入数据执行步骤s2至步骤s3。
所述存内计算模块102中设置有乒乓缓冲单元104,用于对所述多组第一输入数据同时进行写入存储和存内计算,其中,所述乒乓缓冲单元104是由两个乒乓缓冲区域1041组成的,所述乒乓缓冲区域1041具有写入存储功能和存内计算功能,且所述写入存储功能和所述存内计算功能,在两个乒乓缓冲区域1041之间,通过乒乓轮换方式进行切换。
在本发明中,多个第一输入数据可以分为n组(n为正整数),当第k组第一输入数据(k为正整数,k<n)在存内计算模块中的一个乒乓缓冲区域执行计算时,第k 1组第一输入数据可以同时被写入到存内计算模块中另一个乒乓缓冲区域中,并且不影响当前第k组输入数据的计算。当本轮次存内计算和写入存储完成之后,两个乒乓缓冲区域通过乒乓轮换方式进行切换,例如,当执行存内计算的乒乓缓冲区域完成存内计算之后,此时,将下一组第一输入数据写入到该乒乓缓冲区域中;同时,当另外一个执行写入的乒乓缓冲区域完成写入之后,对写入的第一输入数据进行存内计算,从而通过反复的乒乓轮换方式对每组第一输入数据同时进行写入和存内计算。需要说明的是,在本发明中,乒乓轮换方式可在两个乒乓缓冲区域都完成各自操作之后进行功能切换,优选地,当其中一个乒乓缓冲区域已完成当前的操作之后,该乒乓缓冲区域直接切换功能,进行另外一种功能的操作,而无需等待未完成操作的另一个乒乓缓冲区域。
本发明提供的基于乒乓缓冲的存内计算方法,通过设计具有乒乓缓冲的存内计算架构,能够同时支持存内计算操作和更新权重操作,从而降低更新权重时对于存内计算性能的影响,提升系统的实际性能。
在上述实施例的基础上,所述方法还包括:
将第二输入数据写入存储到数据存储模块;
通过所述存内计算模块,对所述数据存储模块中预先写入的第二输入数据进行存内计算,获取对应的存内计算结果。
在本发明中,数据存储模块预先已写入待进行存内计算的全部数据,然后通过存内计算模块直接对这些数据进行存内计算,并和乒乓缓冲的存内计算同时进行,即存内计算模块中除了设置具有乒乓缓冲的存内计算电路,还设置有现有形式的存内计算电路,该现有形式的存内计算电路和乒乓缓冲的存内计算电路并行执行存内计算。
图5为本发明提供的电子设备的结构示意图,如图5所示,该电子设备可以包括:处理器(processor)501、通信接口(communicationsinterface)502、存储器(memory)503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信。处理器501可以调用存储器503中的逻辑指令,以执行存内计算方法,该方法包括:步骤s1,获取多组第一输入数据,并将所述多组第一输入数据发送到存内计算模块的乒乓缓冲单元;步骤s2,当所述乒乓缓冲单元中任一乒乓缓冲区域对当前接收到的第一输入数据进行存内计算时,所述乒乓缓冲单元中另一乒乓缓冲区域对下一组第一输入数据进行写入存储;步骤s3,在本轮次存内计算和写入存储完成之后,通过乒乓轮换方式,对两个乒乓缓冲区域的写入存储功能和存内计算功能进行切换,以使得在下一轮次中,切换功能后的两个乒乓缓冲区域分别对后续第一输入数据执行步骤s2至步骤s3。
此外,上述的存储器503中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的存内计算方法,该方法包括:步骤s1,获取多组第一输入数据,并将所述多组第一输入数据发送到存内计算模块的乒乓缓冲单元;步骤s2,当所述乒乓缓冲单元中任一乒乓缓冲区域对当前接收到的第一输入数据进行存内计算时,所述乒乓缓冲单元中另一乒乓缓冲区域对下一组第一输入数据进行写入存储;步骤s3,在本轮次存内计算和写入存储完成之后,通过乒乓轮换方式,对两个乒乓缓冲区域的写入存储功能和存内计算功能进行切换,以使得在下一轮次中,切换功能后的两个乒乓缓冲区域分别对后续第一输入数据执行步骤s2至步骤s3。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的存内计算方法,该方法包括:步骤s1,获取多组第一输入数据,并将所述多组第一输入数据发送到存内计算模块的乒乓缓冲单元;步骤s2,当所述乒乓缓冲单元中任一乒乓缓冲区域对当前接收到的第一输入数据进行存内计算时,所述乒乓缓冲单元中另一乒乓缓冲区域对下一组第一输入数据进行写入存储;步骤s3,在本轮次存内计算和写入存储完成之后,通过乒乓轮换方式,对两个乒乓缓冲区域的写入存储功能和存内计算功能进行切换,以使得在下一轮次中,切换功能后的两个乒乓缓冲区域分别对后续第一输入数据执行步骤s2至步骤s3。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种基于乒乓缓冲的存内计算系统,其特征在于,包括数据获取模块、存内计算模块和计算结果存储模块,其中:
所述数据获取模块,用于获取多组第一输入数据,并将所述多组第一输入数据发送到所述存内计算模块;
所述存内计算模块中设置有乒乓缓冲单元,用于对所述多组第一输入数据同时进行写入存储和存内计算,其中,所述乒乓缓冲单元是由两个乒乓缓冲区域组成的,所述乒乓缓冲区域具有写入存储功能和存内计算功能,且所述写入存储功能和所述存内计算功能,在两个乒乓缓冲区域之间,通过乒乓轮换方式进行切换;
所述计算结果存储模块,用于存储存内计算得到的计算结果。
2.根据权利要求1所述的基于乒乓缓冲的存内计算系统,其特征在于,所述存内计算模块中设置有多个乒乓缓冲单元。
3.根据权利要求1所述的基于乒乓缓冲的存内计算系统,其特征在于,所述乒乓缓冲区域分别是由多个存储器单元构成的。
4.根据权利要求1所述的基于乒乓缓冲的存内计算系统,其特征在于,所述系统还包括数据存储模块,用于预先写入存储第二输入数据,并通过所述存内计算模块,对所述第二输入数据进行存内计算。
5.根据权利要求4所述的基于乒乓缓冲的存内计算系统,其特征在于,所述系统还包括输入驱动器模块,用于驱动所述数据存储模块,将第二输入数据发送到存内计算模块中。
6.根据权利要求1所述的基于乒乓缓冲的存内计算系统,其特征在于,所述系统还包括字线驱动器模块和时序控制模块,其中:
所述字线驱动器模块,用于激活多个字线的数据进行存内计算;
所述时序控制模块,用于根据预设时序要求,生成对应的内部电路信号时序,以根据所述内部电路信号时序进行存内计算。
7.一种基于权利要求1至6任一所述存内计算系统的存内计算方法,其特征在于,包括:
步骤s1,获取多组第一输入数据,并将所述多组第一输入数据发送到存内计算模块的乒乓缓冲单元;
步骤s2,当所述乒乓缓冲单元中任一乒乓缓冲区域对当前接收到的第一输入数据进行存内计算时,所述乒乓缓冲单元中另一乒乓缓冲区域对下一组第一输入数据进行写入存储;
步骤s3,在本轮次存内计算和写入存储完成之后,通过乒乓轮换方式,对两个乒乓缓冲区域的写入存储功能和存内计算功能进行切换,以使得在下一轮次中,切换功能后的两个乒乓缓冲区域分别对后续第一输入数据执行步骤s2至步骤s3。
8.根据权利要求7所述的存内计算方法,其特征在于,所述方法还包括:
将第二输入数据写入存储到数据存储模块;
通过所述存内计算模块,对所述数据存储模块中预先写入的第二输入数据进行存内计算,获取对应的存内计算结果。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求7至8任一项所述存内计算方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求7至8任一项所述存内计算方法的步骤。
技术总结