数据预处理方法、装置、计算机设备和存储介质与流程

文档序号:20065413发布日期:2020-03-06 08:25阅读:118来源:国知局
数据预处理方法、装置、计算机设备和存储介质与流程

本申请涉及计算机技术领域,特别是涉及一种数据预处理方法、装置、计算机设备和存储介质。



背景技术:

随着数据量的爆炸式增长,机器学习等人工智能算法得到了越来越多的应用。机器是通过分析大量的数据来进行学习,因此,机器学习等大数据运算对存储器的访存量等需求急剧增大。

为了满足存储器的访存量等需求,目前通常采用多级存储器体系结构,即使用高速缓冲存储器、主存储器和外存储器的体系结构。其中,高速缓冲存储器(cache)、主存储器和外存储器的存取速度依次减小,存储容量依次增大。但由于计算机设备中的i/o的带宽往往不能满足超大数据量的需求,因此在处理器执行机器学习运算的过程中,高速缓冲存储器与主存储器之间,和/或主存储器与外存储器之间需要频繁地进行数据读取操作。例如,在处理器执行运算的过程中,处理器首先需要从外存储器中读取输入数据,在运算结束后,处理器需要将运算结果存储至外存储器中,之后再继续从外存储器中读取下一个运算所需的输入数据。由于i/o带宽的限制,因此在一个运算过程中,至少涉及两次i/o读写操作,频繁的i/o读写操作占用时间长,导致处理器的处理效率偏低。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够数据预处理方法、装置、计算机设备和存储介质,能够减少运算过程中的i/o读写操作次数,提高处理器的处理效率。

一种数据预处理方法,所述方法包括如下步骤:

获取主存储器的可用存储容量、从存储器的可用存储容量以及目标运算操作;

根据所述主存储器的可用存储容量、所述从存储器的可用存储容量以及所述目标运算操作,确定所述目标运算操作对应的目标输入数据;

根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作对应的目标输出数据;

若所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标输出数据对应存储在所述主存储器上。

一种数据预处理装置,所述装置包括:

获取模块,用于获取主存储器的可用存储容量、从存储器的可用存储容量以及目标运算操作;

输入确定模块,用于根据所述主存储器的可用存储容量、所述从存储器的可用存储容量以及所述目标运算操作,确定所述目标运算操作对应的目标输入数据;

输出确定模块,用于根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作对应的目标输出数据;

存储分配模块,用于在所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标输出数据对应存储在所述主存储器上。

一种计算机设备,包括:

处理器,所述处理器包括控制器单元和运算单元,其中,所述控制器单元与运算单元连接,所述运算单元包括一个主处理电路和多个从处理电路;

多个第一存储器,多个第一存储器包括主存储器和多个从存储器,所述主存储器靠近所述主处理器设置,多个从存储器与多个所述从处理电路对应设置,各个所述从处理器分别靠近对应的所述从处理电路设置;以及

第二存储器,所述第一存储器和所述第二存储器能够进行数据读写;

其中,所述第一存储器或第二存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。

上述数据预处理方法、装置、计算机设备和存储介质,当该目标运算操作的目标输出数据为其之后的其他运算操作的输入数据时,可以将目标运算操作对应的目标输出数据存储在主存储器上,通过减少主存储器与第二存储器之间的数据交互,减少目标输出数据的读取次数,可以减少运算过程中的i/o读取操作的占用时间,从而可以提高处理器的速度及效率。进一步地,该数据预处理方法还可以减少主存储器与从存储器之间的数据交互,进一步减少运算过程中的i/o读取操作的占用时间,提高处理器的速度及效率。

附图说明

图1为一个实施例中计算机设备的结构示意图;

图2为一个实施例的计算机设备的处理器的结构示意图;

图3为一个实施例的计算机设备的处理器的结构示意图;

图4为一个实施例的计算机设备的处理器的结构示意图;

图5为一个实施例中数据预处理方法的流程示意图;

图6为图5中确定目标输入数据的步骤一实施例的流程示意图;

图7为图5所示的数据预处理方法中确定目标运算操作数量一实施例的流程示意图;

图8为一个实施例中的待处理运算的示意图;

图9为另一个实施例中的待处理运算的示意图;

图10为另一实施例中数据预处理方法的流程示意图;

图11为图10中确定目标输入数据的步骤一实施例的流程示意图;

图12为一实施例的数据预处理装置的结构框图;

图13为一实施例的数据预处理装置的结构框图;

图14为另一实施例的数据预处理装置的结构框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

如图1所示,本申请实施例的计算机设备可以包括处理器100、第一存储器200和第二存储器300。其中,第一存储器200可以设置在处理器100的附近,处理器100可以直接与第一存储器200进行数据交换,即处理器100可以直接从第一存储器200中读取输入数据,并将根据上述输入数据获得的输出数据写入该第一存储器200。该第一存储器200可以直接与该第二存储器300进行数据交换,即该第一存储器200可以从第二存储器300读取数据,也可以向该第二存储写入数据。进一步地,该第一存储器200的存取速度大于第二存储器300的存取速度,该第一存储器200的存储容量小于第二存储器300的存储容量。

可选地,该计算机设备可以是手机或平板电脑等移动终端,或台式电脑、板卡或云端服务器等终端。当然,该计算机设备还可以是云端服务器和手机或电脑等终端形成的计算机系统。该计算机设备可以应用于机器人、打印机、扫描仪、行车记录仪、导航仪、相机、摄像机、投影仪、手表、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。其中,交通工具可以包括飞机、轮船和/或车辆;家用电器可以包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;医疗设备可以包括核磁共振仪、b超仪和/或心电图仪等等。

可选地,该第一存储器200可以是内存储器,该第二存储器300可以是外存储器,如硬盘等等。例如,该如第一存储器200可以为ram(random-accessmemory,随机存取第一存储器200)等,第二存储器300可以为ddr(doubledatarate,双倍速率同步动态随机第一存储器200)等等。可选地,该第一存储器200可以与该处理器100集成为一体,即该第一存储器200为片上存储器,如高速缓冲存储器(cache),该第二存储器300可以是内存储器等片外存储器,如ram等等。

可选地,第二存储器300可以用于存储计算机设备执行特定运算所需的数据及计算机程序等等。进一步地,该数据可以是机器学习数据,如神经网络数据等等。由于第一存储器200的存储容量较小,因此,当处理器100需要执行特定运算时,可以将第二存储器300中存储的完成该特定运算所需的数据写入第一存储器200,处理器100可以从第一存储器200读取该特定运算所需的输入数据进行运算,并将运算结果写入第一存储器200。

在一个实施例中,如图2所示,该处理器100可以包括控制器单元110和运算单元120,其中,控制器单元110与运算单元120连接,该运算单元120可以包括一个主处理电路121和多个从处理电路122,该主处理电路121和从处理电路122形成主从结构。相应地,该第一存储器200的数量可以为多个,多个第一存储器200可以形成主从结构的存储体系。例如,多个第一存储器200可以包括一个主存储器和多个从存储器,其中,该主存储器可以靠近主处理电路设置,该从存储器可以靠近从处理电路设置。可选地,该主存储器可以是主处理电路的片上存储器,该从存储器可以是从处理电路的片上存储器。进一步地,该主存储器的存储容量小于各个从存储器的存储容量。更进一步地,每个从处理器可以对应设置一个以上地从存储器,此处不做具体限定。

可选地,上述的控制器单元110用于获取数据以及计算指令。该数据具体可以包括机器学习数据,可选地,该机器学习数据可以为神经网络数据。控制器单元110还用于解析其获取的计算指令得到运算指令,并将多个运算指令以及数据发送给主处理电路。主处理电路121用于对数据以及该主处理电路121与多个从处理电路122之间传输的数据和运算指令执行前序处理。多个从处理电路122用于依据从主处理电路121传输的数据以及运算指令并行执行中间运算得到多个中间结果,并将多个中间结果传输给主处理电路121;主处理电路121还用于对多个中间结果执行后续处理得到计算指令的计算结果。该主处理电路121和每个从处理电路122上均集成有第一存储器,即多个第一存储器可以是该主处理电路和从处理电路的片上存储器,第二存储器可以是该处理器的片外存储器。

可选地,该控制器单元110可以包括指令缓存单元111、指令处理单元112和存储队列单元114;指令缓存单元111用于存储机器学习数据关联的计算指令;指令处理单元112用于对计算指令解析得到多个运算指令;存储队列单元114用于存储指令队列,该指令队列包括:按该队列的前后顺序待执行的多个运算指令或计算指令。可选地,该控制器单元110还可以包括依赖关系处理单元113,用于在具有多个运算指令时,确定第一运算指令与第一运算指令之前的第零运算指令是否存在关联关系,如第一运算指令与第零运算指令存在关联关系,则将第一运算指令缓存在指令存储单元内,在第零运算指令执行完毕后,从指令存储单元提取第一运算指令传输至运算单元。具体地,若依赖关系处理单元113依据第一运算指令提取第一运算指令中所需数据(例如矩阵)的第一存储地址区间,依据第零运算指令提取第零运算指令中所需矩阵的第零存储地址区间,如第一存储地址区间与第零存储地址区间具有重叠的区域,则确定第一运算指令与第零运算指令具有关联关系,如第一存储地址区间与第零存储地址区间不具有重叠的区域,则确定第一运算指令与第零运算指令不具有关联关系。

在一个实施例中,如图3所示,运算单元120还可以包括分支处理电路123,其中,主处理电路121与分支处理电路123连接,分支处理电路123与多个从处理电路122连接;分支处理电路123用于执行转发主处理电路121与从处理电路122之间的数据或指令。在此实施例中,主处理电路121具体用于将一个输入神经元分配成多个数据块,将多个数据块中的至少一个数据块、权值以及多个运算指令中的至少一个运算指令发送给分支处理电路;分支处理电路123用于转发主处理电路121与多个从处理电路122之间的数据块、权值以及运算指令;多个从处理电路122用于依据该运算指令对接收到的数据块以及权值执行运算得到中间结果,并将中间结果传输给分支处理电路123;主处理电路121还用于将分支处理电路发送的中间结果进行后续处理得到该计算指令的结果,将该计算指令的结果发送给所述控制器单元。可选地,每个分支处理电路123上也集成有第一存储器。

在另一种可选实施例中,如图4所示,运算单元120可以包括一个主处理电路121和多个从处理电路122。其中,多个从处理电路呈阵列分布;每个从处理电路与相邻的其他从处理电路连接,主处理电路连接多个从处理电路中的k个从处理电路,k个从处理电路为:第1行的n个从处理电路、第m行的n个从处理电路以及第1列的m个从处理电路,需要说明的是,如图4所示的k个从处理电路仅包括第1行的n个从处理电路、第m行的n个从处理电路以及第1列的m个从处理电路,即该k个从处理电路为多个从处理电路中直接与主处理电路连接的从处理电路。k个从处理电路用于在主处理电路以及多个从处理电路之间的数据以及指令的转发。

本申请提供的处理器将运算单元设置成一主多从结构,对于正向运算的计算指令,其可以将依据正向运算的计算指令将数据进行拆分,这样通过多个从处理电路即能够对计算量较大的部分进行并行运算,从而提高运算速度,节省运算时间,进而降低功耗。

可选地,上述机器学习计算具体可以包括:人工神经网络运算,上述输入数据具体可以包括:输入神经元数据和权值数据。上述计算结果具体可以为:人工神经网络运算的结果即输出神经元数据。

对于神经网络中的运算可以为神经网络中的一层的运算,对于多层神经网络,其实现过程是,在正向运算中,当上一层人工神经网络执行完成之后,下一层的运算指令会将运算单元中计算出的输出神经元作为下一层的输入神经元进行运算(或者是对该输出神经元进行某些操作再作为下一层的输入神经元),同时,将权值也替换为下一层的权值;在反向运算中,当上一层人工神经网络的反向运算执行完成后,下一层运算指令会将运算单元中计算出的输入神经元梯度作为下一层的输出神经元梯度进行运算(或者是对该输入神经元梯度进行某些操作再作为下一层的输出神经元梯度),同时将权值替换为下一层的权值。

上述机器学习计算还可以包括支持向量机运算,k-近邻(k-nn)运算,k-均值(k-means)运算,主成分分析运算等等。为了描述的方便,下面以人工神经网络运算为例来说明机器学习计算的具体方案。

对于人工神经网络运算,如果该人工神经网络运算具有多层运算,多层运算的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络正向运算下层中的神经元即为输入神经元,处于网络正向运算上层中的神经元即为输出神经元。以卷积神经网络为例,设一个卷积神经网络有l层,k=1,2,...,l-1,对于第k层和第k+1层来说,我们将第k层称为输入层,其中的神经元为所述输入神经元,第k+1层称为输出层,其中的神经元为所述输出神经元。即除最顶层外,每一层都可以作为输入层,其下一层为对应的输出层。

在一个实施例中,该第二存储器用于存储计算机程序,该处理器执行上述计算机程序时,能够实现本申请实施例中的数据预处理方法,从而获得该待处理运算执行过程中各种数据的存储空间分配规则。具体地,上述的计算机设备可以用于执行下述的数据预处理方法,对待处理运算(如神经网络等运算等)进行预处理,获得该待处理运算的输入数据、输出数据及中间计算结果等数据在第一存储器上的存储空间分配规则。这样,当处理器执行该待处理运算时,该待处理运算所涉及的数据(输入数据、输出数据及中间计算结果等)可以按照上述的存储空间分配规则存储在第一存储器上。这样,通过对运算过程中的存储资源进行预分配,不仅能够合理的利用第一存储器的存储空间,还可以提高处理的运算速度及准确性。其中,该存储空间分配规则可以包括待处理运算执行过程中输入数据的存储地址、输出数据的存储地址、中间计算结果的存储地址以及各个存储空间内存放数据的更新规则等等。具体可参见下文中的描述。

本申请实施例中,为减少运算过程中的数据读写操作(即减少i/o操作次数),提供了一种数据预处理方法,该数据预处理方法可以应用于上述的计算机设备中。具体地,如图5所示,该数据预处理方法可以包括如下步骤:

s100、获取第一存储器的可用存储容量及目标运算操作;

具体地,处理器可以根据该第一存储器的配置信息(如该第一存储器的型号等信息),获得该第一存储器的总存储容量。进一步地,处理器可以根据该第一存储器的总存储容量及该第一存储器上的已经占用的存储容量,获得该第一存储器的可用存储容量。

本申请实施例中,处理器可以获取待处理运算,并根据该待处理运算及第一存储器的可用存储容量确定目标运算操作。其中,该待处理运算可以包括多个运算操作,该待处理运算可以是神经网络等运算。例如,该待处理运算包含的运算操作可以是加法操作、减法操作、乘法操作、除法操作、卷积操作、池化操作(pooling)及激活操作(relu)等等,此处不做具体限定。该目标运算操作可以是待处理运算中一个或多个运算操作的组合。

s200、根据目标运算操作及第一存储器的可用存储容量,确定目标运算操作对应的目标输入数据;其中,目标输入数据为目标运算操作对应的全部输入数据的一部分或全部。

具体地,处理器可以根据该目标运算操作,确定完成该目标运算操作所需的全部输入数据及该全部输入数据的数据容量(即该全部输入数据需占用的存储空间大小)。进一步地,处理器可以根据第一存储器的可用存储容量和该目标运算操作的全部输入数据的数据容量,确定该目标运算操作对应的目标输入数据及其数据容量,该目标输入数据的数据容量小于或等于第一存储器的存储容量。其中,该目标输入数据为该目标运算操作对应的全部输入数据的一部分或全部,即该目标输入数据的数据容量小于或等于该目标运算操作对应的全部输入数据的数据容量。当目标输入数据的数据容量小于该目标运算操作的全部输入数据的数据容量时,通过仅加载该目标运算操作的全部输入数据的一部分到第一存储器上,可以在第一存储器上预留一定的存储空间,以供存储该目标运算操作的目标输出数据及中间计算结果等数据。当目标输入数据的数据容量等于该目标运算操作的全部输入数据的数据容量时,可以通过存储空间的复用,以实现存储该目标运算操作的目标输出数据及中间计算结果等数据。

s300、根据目标运算操作和目标输入数据,确定目标运算操作的目标输出数据。

具体地,由于待处理运算的计算量是静态可分析的,因此,处理器可以根据该目标运算操作的目标输入数据及该目标运算操作,获得该目标运算操作的目标输出数据及该目标输出数据的数据容量等信息,即处理器可以获得该目标运算操作的目标输出数据所需占用的存储空间。

s400、若目标运算操作的目标输出数据为该目标运算操作之后的其他运算操作的输入数据时,则将该目标输出数据存储在第一存储器上,以减少目标输出数据的读取次数。

具体地,若该目标运算操作的目标输出数据为该目标运算操作之后的其他运算操作的输入数据时,即在该目标运算操作之后仍需继续使用该目标输出数据时,则可以将该目标输出数据存储在所述第一存储器上,以减少目标输出数据的读取次数,从而可以提高处理器的速度及效率。

传统技术中,当处理器执行该目标运算操作获得上述目标输出数据后,处理器会将该目标输出数据从第一存储器搬运至第二存储器,从而释放该目标输出数据在第一存储器上占用的存储空间。若该目标运算操作之后的运算操作需要继续使用该目标输出数据时,处理器需要再次将该目标输出数据从第二存储器搬运至第一存储器上,这样方法需要多次执行目标输出数据的i/o读取操作,容易导致运算时间过长,处理器的效率及速度较低。而本申请实施例的数据预处理方法,相对于传统技术而言,通过减少目标输出数据的读取次数,可以减少运算过程中的i/o读取操作的占用时间,从而可以提高处理器的速度及效率。

例如,如图8所示,处理器可以获取当前目标运算操作op1,该目标运算操作op1的全部输入数据为输入数据x(其包括子输入数据x11、x21、x12和x22,其中,子输入数据x11和x12可以组成输入数据x1,子输入数据x21和x22可以组成输入数据x2,该输入数据x1和x2可以是向量或矩阵数据等)。处理器可以根据该目标运算操作op1和第一存储器的可用存储容量,将子输入数据x11和x21作为该目标运算操作op1的目标输入数据。进一步地,该处理器可以根据目标运算操作op1和目标输入数据x11和x21,确定出目标输出数据y1及该目标输出数据y1的数据容量。

更进一步地,处理器可以根据预设的运算规则判断该目标输出数据y1是否需要被目标运算操作op1之后的其他运算操作使用,若该目标输出数据y1需要被目标运算操作op1之后的其他运算操作使用,如该目标输出数据y1为目标运算操作op1之后运算操作op2的输入数据,则将该目标输出数据y1暂存于第一存储器上。这样,当运算操作op2为下一个目标运算操作时,则处理器在执行下一运算操作op2之前,仅需要根据预设规则将该运算操作op2所需的输入数据y3从第二存储器搬运至第一存储器上,无需再执行该目标输出数据y1的搬运步骤。再进一步地,该目标输出数据y1为目标运算操作op1之后运算操作op2的输入数据,同时,该目标输出数据y1为运算操作op3的输入数据。此时,可以将该目标输出数据y1存储在第一存储器上,直至完成运算操作op2和op3之后,可以将该目标输出数据y1从第一存储器中删除,以释放目标输出数据y1在第一存储器上占用的存储空间。

本申请实施例的数据预处理方法,减少了运算操作op1计算结束后将目标输出数据y1从第一存储器搬运至第二存储器的过程,以及在进行运算操作op2时再将目标输出数据y1从第二存储器搬运至第一存储器的过程,从而通过减少目标输出数据的读取次数,可以减少运算过程中的i/o读取操作的占用时间,从而可以提高处理器的速度及效率。

可选地,上述的待处理运算可以是包括多个运算层的神经网络运算,如图8所示,上述的运算操作op1和op2可以是神经网络运算中的运算层。上述的输入数据x可以包括输入神经元数据和权值数据等,其可以包括输入数据x1和x2。可选地,上述的输入数据x1和x2可以分别属于不同的运算层。进一步地,处理器可以根据该目标运算层op1和第一存储器的可用存储容量,将子输入数据x11和x21作为该目标运算层op1的目标输入数据。更进一步地,该处理器可以根据目标运算层op1和目标输入数据x11和x21,确定出目标输出数据y1及该目标输出数据y1的数据容量,该目标输出数据y1即为运算层op1的输出数据的一部分,该输出数据可以包括运算层op1的输出神经元数据及权值等。

再如,如图9所示,该待处理运算为神经网络运算,该待处理运算可以包括卷积层、池化层及激活层,上述各个运算层执行顺序依次为卷积运算操作—池化运算操作—激活运算操作。即卷积运算操作的输出数据为池化运算操作的输入数据,池化运算操作的输出数据为激活运算操作的输入数据。各个运算层的输入数据可以包括该运算层对应的输入神经元数据及权值等数据。

若当前目标运算操作为池化运算操作,处理器可以根据第一存储器的可用存储容量及目标运算操作,获得该池化运算操作对应的目标输入数据为c1—c2区间内的数据(c1—c2区间内的数据表示卷积运算操作的输出数据,其可以包括卷积运算操作所对应的输出神经元数据及权值等等)。该目标输入数据c1—c2对应的目标输出数据为b1—b2区间内的数据(其中,b1-b2区间内的目标输出数据可以包括池化运算操作对应的输出神经元数据及权值等等)。进一步地,由于该池化运算操作的目标输出数据b1—b2为激活运算操作的输入数据,因此,可以将该池化运算操作的目标输出数据b1—b2存储于第一存储器上。这样,在完成池化运算操作之后,无需将目标输出数据b1—b2从第一存储器搬运至第二存储器上,释放第一存储器上的存储空间。并且,在执行激活运算操作之前,无需再次将该目标输出数据b1—b2从第二存储器搬运至第一存储器上。

而传统技术中,当处理器运算获得目标输出数据b1-b2之后,会首先将该目标输出数据b1-b2从第一存储器上搬运至第二存储器上,以释放第一存储器的存储空间。由于该激活运算操作的输入数据依赖于该池化运算操作的输出数据,因此在处理器需执行激活运算操作之前,会再次将该池化运算操作对应的目标输出数据b1-b2这一数据块从第二存储器搬运至第一存储器上。在i/o带宽有限的情况下,这种频繁的数据读取操作将影响处理器的处理效率。因而,本申请实施例的数据预处理方法,相较于现有技术而言,通过减少目标输出数据的读取次数(即减少了目标输出数据的load和store的操作),可以减少运算过程中的i/o读取操作的占用时间,从而可以提高处理器的速度及效率。

在一个实施例中,上述方法还包括如下步骤:

若目标运算操作的目标输出数据为目标运算操作之后的其他运算操作的输入数据时(也就是说该目标运算操作的目标输出数据为该待处理运算的中间结果数据),则将该目标运算操作的目标输出数据存储在第一存储器,或者第一存储器和第二存储器上。具体地,若目标运算操作的目标输出数据为目标运算操作之后的其他运算操作的输入数据时,则可以将目标输出数据存储在第一存储器上,以减少该目标输出数据的重复加载操作(即减少了目标输出数据的load的操作)。同时,还可以将该目标输出数据从第一存储器上复制到第二存储器上,从而保证第一存储器和第二存储器上数据的一致性。可选地,是否需要将该目标运算操作对应的目标输出数据同步存储至第二存储器上,可以根据具体地运算需求确定。

当无需将该目标输出数据同步存储至第二存储器上时,可以仅仅将该目标输出数据存储在第一存储上,从而同时减少目标输出数据的load和store的操作。若需要将该目标输出数据同步存储至第二存储器上时,则可以将目标输出数据同步存储在第一存储器和第二存储器上,通过减少该目标输出数据的load操作,以避免数据读取操作过多的占用i/o带宽,影响处理器的处理速度。

如图8所示,若该目标输出数据y1需要被目标运算操作op1之后的其他运算操作使用,如该目标输出数据y1为目标运算操作op1之后运算操作op2的输入数据,则将该目标输出数据y1暂存于第一存储器上。这样,当运算操作op2为下一个目标运算操作时,则处理器在执行下一运算操作op2之前,仅需要根据预设规则将该运算操作op2所需的输入数据y3从第二存储器搬运至第一存储器上,无需再执行该目标输出数据y1的搬运步骤。进一步地,处理器还可以将目标输出数据y1从第一存储器复制到第二存储器中,这样使得第一存储器和第二存储器上的数据具有一致性。这样,本申请实施例的数据预处理方法,减少了运算操作op1计算结束后将目标输出数据y1从第一存储器搬运至第二存储器的过程,从而通过减少目标输出数据的读取次数,可以减少运算过程中的i/o读取操作的占用时间,从而可以提高处理器的速度及效率。

如图9所示,由于该池化运算操作的目标输出数据b1—b2为激活运算操作的输入数据,因此,可以将该池化运算操作的目标输出数据b1—b2同时存储于第一存储器和第二存储器上。这样,在执行激活运算操作之前,无需再次将该目标输出数据b1—b2从第二存储器搬运至第一存储器上。同时,在完成池化运算操作之后,将目标输出数据b1—b2从第一存储器复制至第二存储器上,可以保证第一存储器和第二存储器上数据的一致性。本申请实施例的数据预处理方法,相较于现有技术,减少了将目标输出数据b1—b2从第二存储器再次搬运至第一存储器上的过程,通过减少目标输出数据的读取次数,可以减少运算过程中的i/o读取操作的占用时间,从而可以提高处理器的速度及效率。

在一个实施例中,由于待处理运算的每个目标运算操作所需的全部输入数据的数据容量均较大,因此,处理器可以将各个目标运算操作所涉及的全部输入数据进行拆分,即可以根据第一存储器的可用存储容量,将该各个目标运算操作所涉及的全部输入数据(包括输入神经元数据及权值等等)拆分为多个输入数据块,分别针对每个输入数据块执行该目标运算操作,以获得该目标运算操作的计算结果。最后,可以通过对各个输入数据块对应的计算结果进行融合,获得该目标运算操作对应的输出数据。其中,该输入数据块即为上述的目标输入数据,各个输入数据块对应的输出数据即为上述的目标输出数据。可选地,上述步骤s200具体包括:

根据第一存储器的可用存储容量和该目标运算操作所需的全部输入数据的数据容量,确定该目标运算操作对应的输入数据块,并将该输入数据块作为该目标运算操作对应的目标输入数据。具体地,若该目标运算操作所需的全部输入数据的数据容量大于该第一存储器的可用存储容量时,处理器可以根据该第一存储器的可用存储容量确定该目标运算操作对应的输入数据块,该输入数据块为该目标运算操作的全部输入数据的一部分。若该目标运算操作所需的全部输入数据的数据容量小于或等于第一存储器的可用存储容量,则可以将该目标运算操作的全部输入数据作为一个输入数据块,即将给该目标运算操作的全部输入数据作为其目标输入数据。

例如,如图8所示,处理器可以获取当前目标运算操作op1,该目标运算操作op1的全部输入数据为全部输入数据x(其包括输入数据x1及x2)。处理器可以根据该目标运算操作op1和第一存储器的可用存储容量,将该子输入数据x21和该输入数据的子输入数据x21作为该目标运算操作op1的目标输入数据,其中,该子输入数据x21和子输入数据x11的数据容量之和小于第一存储器的可用存储容量。当然,在其他实施例中,若该目标运算操作对应的全部输入数据x的数据容量小于第一存储器的可用存储容量时,还可以将该目标运算操作对应的全部输入数据全部加载到第一存储器上。

再如,如图9所示,若当前目标运算操作为池化运算操作,处理器可以根据第一存储器的可用存储容量及目标运算操作,将c1—c2区间内的数据(c1—c2区间内的数据表示卷积运算操作的输出数据)作为一个输入数据块,并将该输入数据块作为该池化运算操作对应的目标输入数据。若当前目标运算操作为激活运算操作,则处理器可以根据第一存储器的可用存储容量,将b1—b2区间内的数据作为该激活运算操作的一个输入数据块,并将该输入数据块作为该激活运算操作的目标输入数据。

在一个实施例中,当将该各个目标运算操作所涉及的全部输入数据拆分为多个输入数据块,由于各个输入数据块的数据容量小于第一存储器的存储容量,因此,该目标运算操作能够融合待处理器运算的多个运算操作,以最大限度的利用的第一存储器的存储空间,并提高运算的效率。可选地,上述的目标运算操作包括一个以上的运算操作,即该目标运算操作为一个以上的运算操作的组合。一般地,该目标运算操作中包含的各个运算操作为不同的运算操作,用于实现不同的运算。此时,处理器可以根据第一存储器的可用存储容量,确定各个运算操作对应的子目标输入数据,并根据各个运算操作对应的子目标输入数据确定该目标运算操作对应的目标输入数据。具体地,如图6所示,上述步骤s200中确定该目标运算操作对应的输入数据块的步骤,还包括如下步骤:

s210、根据第一存储器的可用存储容量及各个运算操作的融合属性,确定能够融合的运算操作的数量,获得融合数量阈值。其中,各个运算操作的融合属性可以是包括各个运算操作所涉及输入数据和/或输出数据之间的数据依赖关系等等。

应当清楚的是,若一个或多个运算操作能够一起被处理器执行时,则认为该一个或多个运算操作能够被融合,其融合度较高。若一个或多个运算操作不能一起被处理器执行时,则认为该一个或多个运算操作不能被融合,其融合度低。各个运算操作之间的融合度可由预设的运算规则确定,此处不做具体地限定。

s220、将选定数量的能够融合的一个以上的运算操作的组合作为一个目标运算操作,其中,该选定数量小于或等于融合数量阈值。例如,该选定数量等于融合数量阈值,即将根据第一存储器的存储容量确定的能够进行融合的多个运算操作,等效为一个目标运算操作。

s230、将该选定数量的各个运算操作对应的子目标输入数据作为该目标运算操作对应的目标输入数据。

例如,如图8所示,待处理运算可以包括运算操作op1和op2,根据两个运算操作的融合属性,该运算操作op1和op2能够一起被处理器执行,且第一存储器的可用存储容量能够容纳运算操作op1的目标输入数据和目标输出数据,以及运算操作op2的目标输入数据和目标输出数据时,则可以认为该目标运算操作能够融合的运算操作的数量为2个,此时可以将该运算操作op1和op2作为一个目标运算操作。同时将该运算操作op1和op2对应的子目标输入数据x11、x21及y3作为该目标运算操作的目标输入数据。

若运算操作op1和op2能够融合,但第一存储器的可用存储容量只能容纳运算操作op1的目标输入数据和目标输出数据,无法完全容纳运算操作op2的目标输入数据和目标输出数据时,此时,可以任务该目标运算操作能够融合的运算操作的数量为1个,此时可以将该运算操作op1作为一个目标运算操作。同时将该运算操作op1对应的子目标输入数据x11、x21作为该目标运算操作的目标输入数据。

当然,在其他实施例中,该目标运算操作包含的运算操作的数量还可以是两个以上。例如,在该待处理运算的深度方向上,若该运算操作op2之后还有其他可以融合的运算操作,且上述能够融合的运算操作对应的目标输入数据和目标输出数据的数据容量,能够满足该第一存储器的可用存储容量时,则该目标运算操作包含的运算操作的数量可以是op1、op2及opn(其中,n大于2,n为正整数)。其中,op1、op2及opn对应的目标输入数据及目标输出数据的数据容量之和小于或等于该第一存储器的可用存储容量。

进一步地,该待处理运算可以是神经网络等运算,该神经网络运算可以包括多个运算层,每个运算层可以表示一个运算操作。例如,处理器需要对神经网络等进行运算,神经网络的每个运算层均可以作为一个运算操作,根据该神经网络的各个运算层的连接关系,可以确定各个运算操作的融合属性,即可以根据神经网络的各个运算层之间的连接关系,确定哪些运算层进行融合及能够融合的运算层的数量,并将该能够融合的一个以上的运算层的组合作为一个目标运算操作。这样,通过在神经网络的深度方向上融合多个运算层作为一个目标运算操作,可以减少的运算的次数及数据的读取次数,进一步提高处理器的处理效率。

例如,如图9所示,根据该神经网络的各个运算层的连接关系,可以确定在该神经网络的深度方向上,卷积运算操作、池化运算操作及激活运算操作能够进行融合。此时,处理器可以根据第一存储器的可用存储容量,以及各个运算操作的目标输入数据容量等确定融合数量阈值。具体地,若该第一存储器的可用存储容量能够容纳池化运算操作的目标输入数据c1-c2,以及激活运算操作的目标输入数据b1-b2,则可以确定该融合数量阈值为2个,并将该池化运算操作和激活运算操作等效为一个目标运算操作。此时,该目标运算操作的目标输入数据可以是c1-c2区间内的数据。在其他实施例中,该目标运算操作还可以是卷积运算操作、池化运算操作及激活运算操作三者的融合。

或者,该激活运算操作之后还需执行其他运算操作时,该目标运算操作还可以根据第一存储器的可用存储容量,继续融合更多的运算操作。例如,该神经网络可以包括n个运算层,处理器可以根据该第一存储器的可用存储容量确定融合阈值为n个(其中,n大于或等于1,且n小于或等于n),并可以将n个运算层作为一个目标运算操作。此处仅用于举例说明,并不作为具体限定。

更进一步地,当该目标运算操作包含多个运算操作时,还可以将该目标运算操作执行过程中的中间计算结果存储在第一存储器上。具体地,上述方法还包括如下步骤:

若该目标运算操作中当前运算操作输出的中间计算结果需作为其之后的其他运算操作的输入数据,或当前运算操作输出的中间计算结果需作为其他目标运算操作的输入数据时,处理器可以将该当前运算操作输出的中间计算结果暂存于第一存储器上。具体地,处理器可以根据该当前运算操作输出的中间结果的数据容量,在第一存储器上为该当前运算操作输出的中间结果分配一段存储地址。

若该当前运算操作之后的其他运算操作或其他目标运算操作均不需使用该当前运算操作输出的中间计算结果,则可以将该当前运算操作输出的中间结果所占用的存储空间进行重新分配,即可以将该当前运算操作的中间结果所占用的存储地址分配给其他数据。

例如,如图8所示,该当前运算操作op1输出的中间计算结果y1为下一运算操作op2的输入数据时,则处理器可以将该当前运算操作输出的中间结果y1暂存于第一存储器上。这样,减少了中间计算结果y1的读取次数,从而可以提高处理器的处理效率及速度。若该运算操作op2不需继续使用该中间计算结果,且该目标运算操作之后的其他目标运算操作均不需要复用该中间计算结果y1时,则可以释放该中间计算结果y1所占用的存储空间,将该中间计算结果y1所占用的存储地址分配给其他数据,如将当前目标运算操作之后的其他目标运算操作的目标输出数据存放在该中间计算结果所占用的存储空间中,以实现第一存储器上存储空间的复用。

再如,如图9所示,池化运算操作的目标输入数据为c1-c2区间内的数据,该目标输入数据对应的目标输出数据为b1-b2区间内的数据。且该目标输出数据b1-b2为激活运算操作的目标输入数据,则处理器可以该中间计算结果b1-b2暂存于第一存储器上。这样,减少了中间计算结果b1-b2的读取次数,从而可以提高处理器的处理效率及速度。若激活运算操作无需使用该目标输出数据b1-b2时,则可以将目标输出数据b1-b2所占用的存储空间分配给其他数据,以实现第一存储器上存储空间的复用。

在一个实施例中,当目标运算操作的目标输入数据仅为该目标运算操作对应的全部输入数据的一部分时,该目标运算操作的每个目标输入数据仅用于完成该目标运算操作的一部分运算。为提高该目标运算操作的处理速度及充分利用第一存储器的存储空间,该目标运算操作对应的目标输入数据的数量可以为一个以上,每个目标输入数据为全部输入数据的一部分,即每个目标输入数据包含全部输入数据的一个以上的输入数据块。也就是说,可以同时将一个以上的目标输入数据加载到第一存储器上。进一步地,根据该目标输入数据的数量,可以将该目标运算操作拆分为多个子目标运算操作,可选地,各个子目标运算操作能够实现相同的运算。具体地,如图7所示,上述方法还包括如下步骤:

s500、分别根据各个所述子目标运算操作对应的目标输入数据容量及目标输出数据的数据容量,确定各个子目标运算操作所需的目标存储容量;其中,各个子目标运算操作所需的目标存储容量可以相等,也可以不等。

s510、根据第一存储器的可用存储容量及当前子目标运算操作所需的目标存储容量,确定第一存储器的剩余存储容量;

s520、根据第一存储器的剩余存储容量以及各个子目标运算操作所需的目标存储容量,确定所述子目标运算操作的数量。可选地,可以根据该第一存储器的剩余存储容量以及该当前子目标运算操作之外的其他子目标运算操作的目标存储容量,确定该第一存储器上还能够容纳多少个子目标运算操作。之后,根据该当前子目标运算操作及其之外的其他子目标运算操作的数量,可以确定该子目标运算操作的总数量。

具体地,在当前子目标运算操作的目标输入数据的数据容量和目标输出数据的数据容量之和小于该第一存储器的可用存储容量时,可以根据该第一存储器的剩余存储容量判断是否能够执行一个以上的子目标运算操作。若是,则处理器可以同时处理该一个以上的子目标运算操作对应的目标输入数据。这样,通过同时处理多段目标输入数据,能够进一步提高该处理器的处理速度及效率。

如图8所示,目标运算操作(图中的左侧的运算操作)可以包括运算操作op1和op2,处理器可以根据确定该目标运算操作的当前子目标运算操作的目标输入数据x11、x21及y3的数据容量,并确定该当前子目标运算操作的目标输出数据y1和z1的数据容量,并根据该当前子目标运算操作的目标输入数据及目标输出数据的数据容量之和,确定当前子目标运算操作所需的目标存储容量。若该当前子目标运算操作的目标存储容量小于该第一存储器的可用存储容量时,则可以计算获得该第一存储器的剩余存储容量。该第一存储器的剩余存储容量等于第一存储器的可用存储容量减去该当前子目标运算操作的目标存储容量。之后,处理器可以根据该第一存储器的剩余存储容量确定子目标运算操作的数量。

具体地,若该第一存储器的剩余存储容量还能够容纳另一个子目标运算操作的目标输入数据x12、x22及y4,运算操作op1输出的中间计算结果y2,以及运算操作op2输出的目标输出数据z2时,则可以确定该目标运算操作的数量为两个,并可以将该子输入数据x21、x22及y4作为其中一个目标运算操作的目标输入数据。这样,通过在该待处理运算的横向方向上,同时加载同一目标运算操作的多段目标输入数据,使得处理器可以并行处理多个目标输入数据,能够进一步提高该处理器的处理速度及效率。

进一步地,若该第一存储器的剩余存储容量不仅能够容纳另一个子目标运算操作的目标输入数据x12、x22及y4,运算操作op1输出的中间计算结果y2,以及运算操作op2输出的目标输出数据z2时,且该第一存储器的剩余存储容量还能够容纳运算操作op3的输出数据y时,则还可以将运算操作op1、op2及op3进行融合,以通过执行一次运算获得计算结果y。

再如,如图9所示,该待处理运算为神经网络等运算,该待处理运算可以包括卷积层、池化层及激活层,上述各个运算层执行顺序依次为卷积运算操作—池化运算操作—激活运算操作。若该目标运算操作为激活运算操作,则处理器可以根据第一存储器的存储容量获取当前子目标运算操作的目标输入数据,该当前子目标运算操作的目标输入数据可以是池化层上b1—b2区间内输入数据。该当前子目标运算操作的的目标输出数据为a1。若该当前子目标运算操作的目标输入数据的数据容量b1—b2及其对应的目标输出数据的数据容量之和,小于该第一存储器的存储容量,即该当前子目标运算操作所需的目标存储容量小于第一存储器的存储容量时,则处理器可以进一步根据该第一存储器的剩余存储容量确定该子目标运算操作的数量。如,处理器可以根据该第一存储器的剩余存储容量,确定第一存储器的剩余存储容量能够满足激活运算a1—a2这个区间的运算量,则确定子目标运算操作的数量为两个,并可以将目标输入数据b2—b3区间内的数据作为该激活运算操作的一个目标运算操作对应的目标输入数据。

进一步地,若一个以上的子目标运算操作的目标输入数据相交时,则确定当前子目标运算操作的目标输入数据与其他子目标运算操作的目标输入数据之间的交集,将该交集暂存于第一存储器上。即该当前子目标运算操作的目标输入数据的部分或全部还需作为其他运算操作的目标输入数据时,则可以将该交集暂存于第一存储器上,以避免该部分数据的多次读取操作,从而可以提高处理器的处理效率及速度。

例如,如图9所示,若目标运算操作为池化运算操作,且该目标运算操作的子目标运算操作的数量为两个,相应地,该池化运算操作对应的目标输入数据的数量可以为两个,其中一个目标输入数据为c1-c2,另一个目标输入数据为c3-c4。该目标输入数据c1-c2对应的目标输出数据为b1-b2,该目标输入数据c3-c4对应的目标输出数据为b2-b3。结合附图可以看出,输入数据c3-c2区间的数据即是目标输入数据c1-c2的一部分,同时也是目标输入数据c3-c4的一部分,即两个目标输入数据存在交集c3-c2。此时,为减少数据的读取次数,在完成该目标输入数据c1-c2对应的池化运算操作后,可以将输入数据c3-c2仍然存储在第一存储器上,以避免该部分数据的多次读取操作,从而可以提高处理器的处理效率及速度。

在一个实施例中,上述方法还包括如下步骤:

若目标运算操作之后的运算操作与目标运算操作之间的运算间隔在预设范围内时,则将目标输出数据存储在第一存储器上,以减小目标输出数据的读取次数。

具体地,若目标运算操作之后的其他运算操作与该目标运算操作之间的运算间隔在预设范围内,如目标运算操作与其之后的其他运算操作之间的运算间隔3~5个运算操作时,则可以将该目标输出数据存储在第一存储器上,以减小目标输出数据的读取次数。若目标运算操作之后的其他运算操作与该目标运算操作之间的间隔超出预设范围内时,则为避免该目标运算操作的目标输出数据长时间占用第一存储器的存储空间,可以将该目标输出数据从第一存储器搬运到第二存储器上。

在一个实施例中,上述方法还包括如下步骤:

根据目标运算操作的目标输入数据的数据容量,确定目标输入数据在第一存储器上的存储地址;根据目标运算操作的目标输出数据的数据容量,确定目标输出数据在第一存储器上的存储地址。

具体地,处理器可以根据目标运算操作的目标输入数据的数据容量,在第一存储器上为该目标输入数据分配一个与之数据容量匹配的存储空间,并将该存储空间的存储地址分配给该目标输入数据。这样,在实际运算过程中,可以将目标输入数据加载到第一存储器上的指定存储空间上。同理,处理器可以根据目标运算操作的目标输出数据的数据容量,在第一存储器上为该目标输入数据分配一个与之数据容量匹配的存储空间,并将该存储空间的存储地址分配给该目标输出数据。这样,在实际运算过程中,可以将该目标输出数据存储在第一存储器上的指定存储空间上。

在一个实施例中,上述方法还包括如下步骤:

若目标运算操作的目标输入数据无需继续使用时,将目标输入数据的存储地址的部分或全部分配给目标运算操作的目标输出数据。这样,可以通过对同一块存储空间的多次复用,提高该第一存储器的空间利用率。

可选地,处理器可以记录上述各个目标运算操作的目标输入数据的存储地址、目标输出数据的存储地址、中间计算结果的存储地址以及第一存储器上各个存储空间的更新规则等等,根据上述的数据对应的存储地址获得该待处理运算对应的存储分配规则。当处理器需要执行该待处理运算时,处理器可以获取该待处理运算对应的存储分配规则,并根据该存储分配规则确定运算过程中各种数据的读写操作及存储位置等等。

在一个实施例中,上述的数据预处理方法还可以应用于图2至图4所示的计算机设备中。此时,根据预设运算分配规则,该目标运算操作的一部分需要由主处理电路执行,该目标运算操作的另一部分需要由从处理电路执行。相应地,多个第一存储器可以包括主存储器和从存储器,其中,主存储器靠近主处理电路设置,进一步地,该主存储器还可以是该主处理电路的片上存储器。该从存储器靠近从处理电路设置,进一步地,该从存储器还可以是该从处理电路的片上存储器。此时,该目标运算操作对应的目标输入数据一部分需要加载到该主存储器上由主处理电路执行,该目标运算操作对应的目标输入数据另一部分需要加载到一个以上的从存储器上,由各个从存储器对应的从处理电路执行。具体地,如图10所示,当图2至图4所示的计算机设备执行上述的数据预处理方法时,其包括如下步骤:

s600、获取主存储器的可用存储容量、从存储器的可用存储容量以及目标运算操作;

具体地,处理器可以根据该主存储器的配置信息(如该主存储器的型号等信息),获得该主存储器的总存储容量。进一步地,处理器可以根据该主存储器的总存储容量及该主存储器上已经占用的存储容量,获得该主存储器的可用存储容量。同理,处理器可以根据该从存储器的配置信息,获得从存储器的总存储容量,并根据该从存储器的总存储容量及该从存储器上已经占用的存储容量,获得该从存储器的可用存储容量。可选地,该处理器的主处理电路可以获得该主存储器的可用存储容量,各个从处理电路可以获得对应从存储器的可用存储容量,并将其对应的从存储器的可用存储容量传送至主处理电路。

同时,处理器的控制器单元可以获取待处理运算,并将该待处理运算的解析结果等数据发送至主处理电路。该主处理电路可以根据该待处理运算、主存储器的可用存储容量及从存储器的可用存储容量确定目标运算操作。可选地,该待处理运算包含的运算操作可以是加法操作、减法操作、乘法操作、除法操作、卷积操作、池化操作(pooling)及激活操作(relu)等等,此处不做具体限定。该目标运算操作可以是待处理运算中一个或多个运算操作的组合。

s700、根据所述主存储器的可用存储容量、所述从存储器的可用存储容量以及所述目标运算操作,确定所述目标运算操作对应的目标输入数据;其中,所述目标输入数据为所述目标运算操作对应的全部输入数据的一部分或全部。

具体地,处理器的主处理电路处理器可以根据该目标运算操作,确定完成该目标运算操作所需的全部输入数据及该全部输入数据的数据容量(即该全部输入数据需占用的存储空间大小)。进一步地,主处理电路可以根据主存储器的可用存储容量、各个从存储器的可用存储容量以及该目标运算操作的全部输入数据的数据容量,确定该目标运算操作对应的目标输入数据及其数据容量。

s800、根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作对应的目标输出数据;具体地,由于待处理运算的计算量是静态可分析的,因此,处理器的主处理电路可以根据该目标运算操作的目标输入数据及该目标运算操作,获得该目标运算操作的目标输出数据及该目标输出数据的数据容量等信息,即处理器的主处理电路可以获得该目标运算操作的目标输出数据所需占用的存储空间。

s900、若所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标输出数据对应存储在所述主存储器上。

具体地,主处理电路可以根据预设的运算分配规则,将该目标运算操作对应的目标输入数据分配至主存储器及从存储器,以便主处理电路和从处理电路能够协同执行该目标运算操作。在该目标运算操作的执行过程中,从处理电路可以对其从存储器上的目标输入数据进行处理,得到中间计算结果。从处理电路还可以将该中间计算结果传送至主处理电路。主处理电路可以根据可以对其主存储器上的目标输入数据进行处理,并结合各个从处理电路传送的中间计算结果,获得该目标运算操作的目标输出数据。若该目标运算操作对应的目标输出数据为其后的其他运算操作的输入数据时,则可以将该目标输出数据存储在主存储器上,从而减少数据的读取次数,提高处理器的运算速度。

在一个实施例中,如图11所示,上述步骤s700还可以包括:

s710、将所述主存储器的可用存储容量和各个所述从存储器的可用存储容量进行比较,将最小的可用存储容量作为第一存储器的可用存储容量;

s720、根据该第一存储器的可用存储容量及目标运算操作确定目标运算操作对应的目标输入数据。

具体地,由于该目标运算操作需主处理电路和从处理电路协同完成,因此,应当保证主存储器和从存储器同时满足该目标运算操作的目标输入数据的占用空间。即该目标输入数据的数据容量小于该主存储器的可用存储容量,且该目标输入数据的数据容量小于该从存储器的可用存储容量。因此,可以根据主存储器的可用存储容量与各个从存储器的可用存储容量进行比较,并将主存储器及各个从存储器中最小的可用存储容量作为该处理器的第一存储器的可用存储容量。之后,主处理电路可以根据该第一存储器的可用存储容量及目标运算操作,确定该目标运算操作对应的目标输入数据。

在一个实施例中,主处理电路可以根据预设的运算分配规则对该目标输入数据进行拆分,将该目标输入数据分配为多个数据块,并确定各个数据块对应的处理电路。其中,该目标输入数据中由主处理电路进行处理的数据块可以记为第一目标输入数据。该目标输入数据中由从处理电路进行处理的数据块可以记为第二目标输入数据。进一步地,每个从处理电路对应的第二目标输入数据的数据容量可以不等,具体由运算分配规则确定。具体地,所述方法还包括如下步骤:

根据预设的运算分配规则,确定所述主存储器对应的第一目标输入数据,以及各个所述从存储器对应的第二目标输入数据。具体地,主处理电路可以根据预设的运算分配规则,确定该目标运算操作的哪些目标输入数据由主处理电路进行处理,该目标运算操作的哪些目标输入数据由各个从处理电路进行处理。

例如,如图9所示,该当前目标运算操作为池化运算操作,如需要完成池化层上b1-b2区间的运算时,此时,该目标运算操作所需的目标输入数据为c1-c2。主处理器可以根据预设的运算分配规则,可以将输入数据c1-c3作为第二目标输入数据,并将该第二目标输入数据c1-c3存储至从存储器上。将该输入数据c3-c2作为第一目标输入数据,并将该第一目标输入数据c3-c2存储至主存储器中。

进一步地,上述方法还可以包括如下步骤:

根据主存储器的可用存储容量和所述第一目标输入数据的数据容量,确定第一目标输入数据在主存储器上的存储地址。

具体地,主处理电路可以根据主存储器的可用存储容量和第一目标输入数据的数据容量,确定该第一目标输入数据在主存储器上的存储地址。进一步地,该主处理电路还可以根据该第一目标输入数据的数据容量及目标运算操作,确定该第一目标输入数据对应的第一子目标输出数据及其数据容量,并确定该第一子目标输出数据在主存储器上的存储地址。

根据从存储器的可用存储容量和所述第二目标输入数据的数据容量,确定第二目标输入数据在从存储器上的存储地址。具体地,主处理电路以根据各个从处理电路的可用存储容量及其对应的第二目标输入数据的数据容量,确定各个第二目标输入数据在其对应的从存储器上的存储地址。进一步地,该主处理电路还可以根据各个第二目标输入数据的数据容量及目标运算操作,确定各个第二目标输入数据对应的第二目标输出数据及其数据容量,并确定各个第二目标输出数据在其对应的从存储器上的存储地址。

更进一步地,各个从处理电路可以将计算获得第二目标输出数据传送至主处理电路,主处理电路还可以进一步确定该各个第二目标输出数据在主存储器上的存储地址。

在一个实施例中,若该从处理电路上执行的其他运算操作需要继续其对应的第二目标输出数据时,则可以将该第二目标输出数据暂存于该从处理电路对应的从存储器上。这样,可以减少主存储器和从存储器之间的数据读取操作,进一步提高该处理器的运算速度。

在一个实施例中,上述的目标运算操作包括一个以上的运算操作,即该目标运算操作为一个以上的运算操作的组合。一般地,该目标运算操作中包含的各个运算操作为不同的运算操作,用于实现不同的运算。此时,处理器的主处理电路可以根据第一存储器的可用存储容量,确定各个运算操作对应的子目标输入数据,并根据各个运算操作对应的子目标输入数据确定该目标运算操作对应的目标输入数据。具体地,该目标输入数据的确定过程与上述方法中的步骤s210~s230一致,具体可参见上文中的描述,此处不再赘述。

进一步地,当该目标运算操作包括一个以上的运算操作时,该一个以上的运算操作可以分为第一目标运算操作和第二目标运算操作。主处理电路可以根据预设的运算分配规则,将该目标运算操作中的第一目标运算操作分配给主处理电路,将该目标运算操作中的第二目标运算操作分配给从处理电路。相应地,主处理电路可以将第一目标运算操作所需的输入数据存储至主存储器上,分别将该各个第二目标运算操作所需的输入数据存储至对应的从存储器上。

例如,如图9所示,若该第一存储器的可用存储容量能够容纳池化运算操作的目标输入数据c1-c2,以及激活运算操作的目标输入数据b1-b2,则可以将该池化运算操作和激活运算操作等效为一个目标运算操作。此时,该目标运算操作的目标输入数据可以是c1-c2区间内的数据。此时,主处理电路可以根据预设的运算规则,将激活运算操作作为第一目标运算操作,分配至主处理电路本身,将池化运算操作作为第二目标运算操作分配至从处理电路。相应地,可以将池化运算操作所需的输入数据c1-c2加载到从存储器上,将该激活运算操作所需的输入数据b1-b2加载到主存储器上。由于该池化运算操作与激活运算操作之间存在依赖关系,因此,可以在完成该池化运算操作之后,再将激活运算操作所需的输入数据b1-b2从存储器上加载到主存储器上。

在一个实施例中,当目标运算操作的目标输入数据仅为该目标运算操作对应的全部输入数据的一部分时,该目标运算操作的每个目标输入数据仅用于完成该目标运算操作的一部分运算。为提高该目标运算操作的处理速度及充分利用第一存储器的存储空间,该目标运算操作对应的目标输入数据的数量可以为一个以上,每个目标输入数据为全部输入数据的一部分,即每个目标输入数据包含全部输入数据的一个以上的输入数据块。也就是说,可以同时将一个以上的目标输入数据加载到第一存储器上。进一步地,根据该目标输入数据的数量,可以将该目标运算操作拆分为多个子目标运算操作,可选地,各个子目标运算操作能够实现相同的运算。

该主处理电路可以根据该第一存储器的可用存储容量以及各个目标运算操作所需的目标存储容量的大小,确定目标运算操作的数量,从而可以同时将一个以上的目标运算操作的目标输入数据加载到第一存储器上。具体地,该目标运算操作的数量的确定过程与上述方法中的步骤s500~步骤s520一致,具体可参见上文中的描述,此处不再赘述。

应该理解的是,虽然图5-7的流程图以及图10-11中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图5-7以及图10-11中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

在一个实施例中,如图12所示,本申请实施例提供了一种数据预处理装置,其可以包括获取模块410、输入确定模块420、输出确定模块430以及存储分配模块440。其中,

获取模块410用于获取第一存储器的可用存储容量及目标运算操作;输入确定模块420用于根据所述目标运算操作及所述第一存储器的可用存储容量,确定所述目标运算操作对应的目标输入数据;输出确定模块430用于根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作的目标输出数据;存储分配模块440用于在所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标运算操作的目标输出数据存储在所述第一存储器上,其中,所述第一存储器靠近处理器设置。

可选地,所述目标运算操作包含一个以上的运算操作,每个所述运算操作对应有子目标输入数据。如图13所示,所述输入确定模块420还包括融合确定单元421和输入确定单元422。其中,融合确定单元421用于根据所述第一存储器的可用存储容量及所述待处理运算中各个运算操作的融合属性,确定能够融合的运算操作的数量,获得融合数量阈值。输入确定单元422用于将选定数量的所述能够融合的运算操作的组合作为所述目标运算操作,所述选定数量小于或等于所述融合数量阈值;将所述选定数量的各个运算操作对应的子目标输入数据作为所述目标运算操作对应的目标输入数据。

可选地,所述待处理运算为包含多个运算层的神经网络运算,每个所述运算层表示一个所述运算操作;所述融合确定单元421还用于根据所述神经网络运算的各个运算层的连接关系,确定各个所述运算操作的融合属性。

可选地,所述存储分配模块440还用于在所述目标运算操作中当前运算操作输出的中间计算结果需作为所述目标运算操作中其他运算操作的输入数据,或所述当前运算操作输出的中间计算结果需作为其他目标运算操作的输入数据时,则将所述当前运算操作输出的中间计算结果存储于第一存储器上,或将所述当前运算操作输出的中间计算结果存储于第一存储器和第二存储器上。

可选地,所述目标运算操作包括一个以上的子目标运算操作,每个所述子目标运算操作对应一个所述目标输入数据;其中,所述目标运算操作对应的全部输入数据包括多个输入数据块,所述目标运算操作对应的目标输入数据的数量为一个以上,每个所述目标输入数据包含一个以上的所述输入数据块;输入确定模块420还用于分别根据各个所述子目标运算操作的目标输入数据容量及目标输出数据的数据容量,确定各个所述子目标运算操作所需的目标存储容量;根据所述第一存储器的可用存储容量以及当前子目标运算操作所需的目标存储容量,确定所述第一存储器的剩余存储容量;根据所述第一存储器的剩余存储容量,以及所述当前子目标运算操作之外的其他子目标运算操作所需的目标存储容量,确定所述子目标运算操作的数量。

可选地,所述存储分配模块440还用于在一个以上的所述子目标运算操作的目标输入数据存在交集时,则将所述一个以上的子目标运算操作的目标输入数据之间的交集存储在所述第一存储器上。

可选地,所述存储分配模块440还用于根据所述目标运算操作的目标输入数据的数据容量,确定所述目标输入数据在所述第一存储器上的存储地址;根据所述目标运算操作的目标输出数据的数据容量,确定所述目标输出数据在所述第一存储器上的存储地址;若所述目标运算操作之后的其他运算操作均不需使用所述目标运算操作的目标输入数据时,则在完成所述目标运算操作之后,将所述目标运算操作对应的目标输入数据的存储地址的一部分或全部,分配给所述目标运算操作的目标输出数据。

在另一个实施例中,如图12所示,获取模块410用于获取主存储器的可用存储容量、从存储器的可用存储容量以及目标运算操作;输入确定模块420用于根据所述主存储器的可用存储容量、所述从存储器的可用存储容量以及所述目标运算操作,确定所述目标运算操作对应的目标输入数据;输出确定模块430用于根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作对应的目标输出数据;存储分配模块440用于在所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标输出数据对应存储在所述主存储器上。

可选地,如图14所示,所述数据预处理装置还包括存储容量确定模块450,用于将所述主存储器的可用存储容量和各个所述从存储器的可用存储容量进行比较,将最小的可用存储容量作为第一存储器的可用存储容量;输入确定模块420具体用于根据所述第一存储器的可用存储容量及目标运算操作,确定目标运算操作对应的目标输入数据。

可选地,所述目标运算操作包含一个以上的运算操作,每个所述运算操作对应有子目标输入数据;所述输入确定模块420还包括融合确定单元421和输入确定单元422。其中,融合确定单元421用于根据所述第一存储器的可用存储容量及所述待处理运算中各个运算操作的融合属性,确定能够融合的运算操作的数量,获得融合数量阈值。输入确定单元422用于将选定数量的所述能够融合的运算操作的组合作为所述目标运算操作,所述选定数量小于或等于所述融合数量阈值;将所述选定数量的各个运算操作对应的子目标输入数据作为所述目标运算操作对应的目标输入数据。

可选地,所述待处理运算为包含多个运算层的神经网络运算,每个所述运算层表示一个所述运算操作;所述融合确定单元421还用于根据所述神经网络运算的各个运算层的连接关系,确定各个所述运算操作的融合属性。

可选地,所述目标运算操作包括一个以上的子目标运算操作,每个所述子目标运算操作对应一个所述目标输入数据;其中,所述目标运算操作对应的全部输入数据包括多个输入数据块,所述目标运算操作对应的目标输入数据的数量为一个以上,每个所述目标输入数据包含一个以上的所述输入数据块。所述输入确定模块还用于分别根据各个所述子目标运算操作的目标输入数据容量及目标输出数据的数据容量,确定各个所述子目标运算操作所需的目标存储容量;根据所述第一存储器的可用存储容量以及当前子目标运算操作所需的目标存储容量,确定所述第一存储器的剩余存储容量;根据所述第一存储器的剩余存储容量,以及所述当前子目标运算操作之外的其他子目标运算操作所需的目标存储容量,确定所述子目标运算操作的数量。

可选地,所述目标输入数据包括第一目标输入数据和第二目标输入数据;所述输入确定模块420还用于根据预设的运算分配规则,确定所述主存储器对应的第一目标输入数据以及各个所述从存储器对应的第二目标输入数据;所述存储分配模块440还用于根据所述主存储器的可用存储容量以及所述第一目标输入数据的数据容量,确定所述第一目标输入数据在所述主存储器上的存储地址;分别根据各个所述从存储器的可用存储容量以及对应的所述第二目标输入数据的数据容量,确定各个所述第二目标输入数据在所述从存储器上的存储地址。

可选地,所述目标输出数据包括第一目标输出数据和第二目标输出数据;所述输出确定模块430还用于根据所述目标运算操作及所述第一目标输入数据,确定所述第一目标输出数据及所述第一目标输出数据在所述主存储器上的存储地址;根据所述目标运算操作及各个所述第二目标输入数据,确定各个所述第二目标输出数据及各个所述第二目标输出数据在对应的所述从存储器上的存储地址;根据各个所述第二目标输出数据,确定各个所述第二目标输出数据在所述主存储器上的存储地址。

可选地,所述存储分配模块440还用于在所述从处理电路上执行的其他目标运算操作需要使用所述第二目标输出数据时,则将所述第二目标输出数据存储在所述从处理电路对应的从存储器上。进一步地,所述存储分配模块440还用于在所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标输出数据对应存储在所述主存储器和所述第二存储器上。

应当清楚的是,该装置的工作原理与上述方法中各个步骤的执行过程一致,具体可参见上文中的描述,此处不再赘述。

在一个实施例中,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中任一项所述的方法的步骤。具体地,该计算机程序被处理器执行时,实现如下步骤:

获取第一存储器的可用存储容量及目标运算操作;

根据目标运算操作及第一存储器的可用存储容量,确定所述目标运算操作对应的目标输入数据;其中,所述目标输入数据为所述目标运算操作对应的全部输入数据的一部分或全部;

根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作的目标输出数据;

若所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标运算操作的目标输出数据存储在所述第一存储器上,其中,所述第一存储器靠近处理器设置。

进一步地,该处理器可以是包括主处理电路和从处理电路形成的总从结构,此时,该处理器在执行上述计算机程序时,具体实现以下步骤:

获取主存储器的可用存储容量、从存储器的可用存储容量以及目标运算操作;

根据所述主存储器的可用存储容量、所述从存储器的可用存储容量以及所述目标运算操作,确定所述目标运算操作对应的目标输入数据;其中,所述目标输入数据为所述目标运算操作对应的全部输入数据的一部分或全部;

根据所述目标运算操作和所述目标输入数据,确定所述目标运算操作对应的目标输出数据;

若所述目标运算操作的目标输出数据为所述目标运算操作之后的其他运算操作的输入数据时,则将所述目标输出数据对应存储在所述主存储器上。

应当清楚的是,该处理器执行计算机程序时的过程,与上述方法中各个步骤的执行过程一致,具体可参见上文中的描述,此处不再赘述。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1