具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
神经网络是受大脑神经元结构及神经传到原理启发建立的数学计算模型,基于这类模型实现智能计算的方式称为脑启发计算。例如,神经网络包括多种形式的网络结构,例如,反向传播(Back Propagation,BP)神经网络、卷积神经网络(Convolutional NeuralNetworks, CNN)、循环神经网络(Recurrent Neural Network,RNN)、长短期记忆网络(LongShort Term Memory Network, LSTM)等,例如,卷积神经网络还可以细分为全卷积网络、深度卷积网络、U型网络(U-Net)等。
例如,一种通常的卷积神经网络通常包括输入端、输出端以及多个处理层。例如,输入端用于接收待处理的数据,例如待处理图像等,输出端用于输出处理结果,例如处理后图像等,多个处理层可以包括卷积层、池化层、批量标准化层(Batch Normalization,简称BN)、全连接层等,根据卷积神经网络的结构不同,处理层可以包括不同的内容和组合方式。输入数据输入卷积神经网络后,经过若干个处理层得到对应的输出,例如,输入数据可以通过若干个处理层完成卷积、上采样、下采样、标准化、全连接、平坦化等操作。
图1A示出了一种神经网络结构的示意图。该神经网络例如用于图像处理,使用图像作为输入和输出,例如通过滤波器(即,卷积)替代标量权重。
如图1A所示,该神经网络包括3层神经元层,分别为输入层101、隐藏层102和输出
层103,输入层101的输出是隐藏层的输入,而隐藏层的输出是输出层的输入。输入层101具
有4个输入,隐藏层102具有3个输出,输出层103具有2个输出。输入层101中的具有权重
的每个盒子对应于滤波器,其中k是指示输入层号的标签,并且i和j分别是指示输入和输出
单元的标签。偏置
是添加到卷积的输出的标量。若干卷积和偏置的相加结果通过激活函
数进行相应处理,激活函数通常对应于整流线性单元(ReLU)、S型函数或双曲正切函数。在
利用卷积神经网络的图像处理系统中,各滤波器和偏置在系统的操作期间是固定的。各滤
波器和偏置是预先通过使用一组输入/输出示例图像并且调整以满足依赖于应用的一些优
化标准来获取的。
图1B示出了卷积神经网络的一种典型构型。图像数据通过输入层输入到卷积神经网络后,依次经过若干个处理层(如图1B中的每个层级)后输出识别结果。每个处理层的处理过程根据需要可以包括卷积、池化、批量标准化处理等等。
图1C抽象地示出了的卷积神经网络中一个神经元的输入与输出,如图所示,C1、C2到Cn指代不同的信号通道,针对某一个局部感受域(该局部感受域包含多个通道),使用不同的过滤器对该局部感受域的C1到Cn信号通道上的数据进行卷积,卷积结果被输入刺激节点,该刺激节点根据相应的函数进行计算以得到特征信息。因此,卷积神经网络通常最主要的组成部分包括:多个卷积层、多个池化层、全连接层。一个完整的卷积神经网络由这三种层叠加组成。
卷积层是卷积神经网络的核心层,对输入数据(图像)应用若干个过滤器,输入数据被用来进行多种类型的特征提取。对于输入数据应用一个过滤器之后得到的结果被称为特征图(feature map),特征图的数目与过滤器的数目相等。一个卷积层输出的特征图可以被输入到下一个层级的卷积层再次处理以得到新的特征图。池化层是夹在连续的卷积层之间的中间层,用于缩减输入数据的规模,也在一定程度上减小过拟合的现象。实现池化的方法有很多种,这些方法包括但不限于:最大值合并(max-pooling)、平均值合并(avg-pooling)、随机合并、欠采样(decimation,例如选择固定的像素)、解复用输出(demuxout,将输入图像拆分为多个更小的图像)等。通常最后一个子采样层或卷积层连接到一个或多个全连接层,全连接层的输出作为最终输出,可得到一个一维矩阵,也就是向量。
又例如,参见图1D所示的示例,最后一个卷积层(即第n个卷积层)的输出被输入到平坦化模块进行平坦化操作(Flatten),将特征图像(2D图像)转换为向量(1D),该向量可以被用于全连接层。该平坦化操作可以按照如下的方式进行:
其中,v是包含k个元素的向量,f是具有i行j列的矩阵。
然后,平坦化模块的输出被输入到一个全连接层(FCN),该全连接层例如可以为如图1A所示的卷积网络,可使用不同的标量值以替代滤波器。
例如,也可以将最后一个卷积层(即第L个卷积层)的输出进行平均操作(AVG),即使用特征的平均值来表示图像,由此2D特征变为一个数。如果进行平均操作,则可以不需要平坦化模块。
神经网络的输出可以采用多种形式,例如输出层的激活函数根据需要可以采用softmax函数、sigmoid函数或者tanh函数等。通过softmax函数等,每个标识(label)被赋予一定的概率,而具有最大概率的标识被选择为图像的标识或类别。
例如,若卷积神经网络为深度卷积神经网络,则其可以包括至少五层卷积层,例如,VGG-16神经网络具有16层,而GoogLeNet神经网络具有22层,当然,其他神经网络结构可以具有更多的处理层,上述内容仅对神经网络进行示例性介绍,本公开对神经网络的结构不作限制。例如,用于执行人工智能计算的处理器称为人工智能处理器(ArtificialIntelligence Processor,简称AI Processor)或AI芯片。目前人工智能处理器可以通过CPU(central processing unit,中央处理器)、GPU(Graphics Processing Unit,图形处理器)、FPGA(Field Programmable Gate Array,现场可编程门阵列)、AISC(ApplicationSpecific Integrated Circuit,专用集成电路)等方式实现。神经网络计算高度依赖海量的数据,数据在不同处理层之间、不同阶段的处理层之间流转,从而在人工智能处理器的计算流水线和缓存系统中会形成强大的流水线(pipeline)。
为实现并行计算,例如,人工智能处理器可以为多处理器(或多处理核)体系,例如多核处理器或多处理器系统,也即人工智能处理器可以包括多个处理核(core)。由于神经网络的计算量,尤其是卷积层的计算量非常大,可能将神经网络中的一个处理层的计算操作进行分解,例如对于同一卷积层的不同部分的卷积操作可以彼此独立进行,这些分解后的任务交由多个处理核同时并行执行计算,之后再将这些处理核的计算结果进行合并,得到整个处理层的计算结果,然后该处理层的计算结果可以作为输入传递到执行下一处理层的计算操作的处理核。
参见图2A-图2B,例如,一种示例性的人工智能处理器为多处理器体系,该多处理器体系包括多个处理核,例如包括2个或2个以上的处理核,例如,最小的多处理器体系可以包括两个处理核。这里,以多处理器体系包括4个处理核为例进行说明,当然,本公开不限于此。
例如,该多处理器架构例如可以有两种方式,即,集中式共享存储器体系以及分布式存储器体系。
图2A示出了集中式共享存储器体系,人工智能处理器包括4个处理核,分别为core0、core1、core2和core3,core0、core1、core2和core3具有共享缓存并且具有各自的专用缓存,共享同一主存储器以及输入/输出(I/O)。每个处理核的专用缓存可以包括一级缓存(L1 Cache)或二级缓存(L2 Cache)等,共享存储器包括标准化引擎(ReductionEngine),例如用于执行批量标准化计算。
例如,在一个示例中,由core0和core1共同执行神经网络的处理层1的处理,之后将处理结果提供至共享缓存,由共享缓存中的标准化引擎执行相应操作,例如批量标准化计算。之后,core0和core1将共享缓存中的标准化引擎的处理结果读取至本地的专用缓存,例如由共享缓存将标准化引擎的处理结果提供至core0和core1的专用缓存,以由core0和core1继续执行后续处理。
图2B示出了分布式存储器体系,core0、core1、core2和core3具有各自的专用缓存、存储器以及I/O,并且通过互连网络借助消息等机制来彼此连接、通信。每个处理核的专用缓存可以包括一级缓存(L1 Cache)或二级缓存(L2 Cache)等。互连网络可以为总线系统、交叉开关矩阵(crossbar)、片上网络(NOC)等。例如,在一些实施例中,片上网络也可以位于多处理器体系的其他位置,例如处理核内部等,本公开对此不作限制。
本公开的实施例对于缓存的实现方式、(主)存储器的实现方式、互连网络的实现方式等不作限制。
例如,通过上述示例性的人工智能处理器结构进行神经网络处理,由core0执行神经网络的处理层1的处理,之后将处理层1的处理结果发送至core1和core2,由core1和core2共同执行处理层2的处理。在这个过程中,如图2A所示的集中式共享存储器体系,core0对于处理层1的处理结果可以先暂存在共享缓存中,并由标准化引擎执行相应的处理,之后在core1和core2能够执行处理层2的计算操作时,根据分解后的计算任务,分别从共享缓存中提取标准化引擎的处理结果;或者,图2B所示的分布式存储器体系,core0对于处理层1的处理结果可以先暂存在core0的专用缓存(或者存储器)中,在core1和core2能够执行处理层2的计算操作时,根据分解后的计算任务,core0对于处理层1的处理结果由core0的专用缓存(或者存储器),经互连网络被提供至core1和core2。由此,形成从core0到core1和core2的数据流水线。
同样地,例如,core1和core2执行完处理层2的处理后,均将处理结果通过共享缓存或者互连网络发送至core3,由core3执行后续处理,此时的操作包括数据聚合操作(datacoalescing)。例如,在这个过程中,core1执行神经网络的处理层2的部分处理得到处理结果A,core2执行神经网络的处理层2的部分处理得到处理结果B,core1将处理结果A提供至core3的聚合缓冲区(coalescing buffer),core2将处理结果B也提供至core3的聚合缓冲区,以实现数据聚合。
在如上所述的过程中,神经网络的海量计算数据在人工智能处理器的不同处理核的运算单元、人工智能处理器的内存、缓存之间交互、共享、存储等,因此,人工智能处理器具有多核、多层次的运算特点。
例如,在人工智能处理器中经常需要将目标域(例如某一级缓存、多级缓存、缓冲区、流水线等)中的数据提供出去,该数据根据计算数据流到达需要数据的位置进行后续处理。例如,将一个处理核中的数据提供至需要同步数据的多个处理核,例如,为了批量标准化操作中的进一步的全局归一化操作(global reduction operations),需要将局部归一化数据(local reduction data)提供出去,用于推理或训练,例如,将标准化后的前向数据提供出去以供后向传播过程重用等。
在并行处理器或其他非应用于人工智能场景的处理器中,提供有冲刷操作,该冲刷操作是一种栅栏操作,冲刷操作可以将冲刷目标域中的数据全部提供出去,这个冲刷操作也可能将目标域中的数据全部清除,或者在这个过程中或之后将阻塞对于该目标域中的数据的其他操作,从而使得后续指令需要等待的延迟很大,频繁的冲刷操作往往带来明显的性能损耗。由于人工智能处理器具有多核、多层次的运算特点,冲刷操作可能需要频繁执行,在人工智能中的多步骤流水处理的情况下,如果每次冲刷操作都将冲刷目标域中的数据全部提供出去,会极大增加处理器的开销,降低处理器的性能,系统损耗尤其明显。例如,在如上所述的示例中,core1中可能还同时存在有其他(类型)的数据C,如果直接对core1执行冲刷操作,则会将core1中的处理结果A和数据C一起提供至core3,而实际上core3的处理过程不需要数据C,并且可能数据C还未处理完毕,导致对于数据C的处理被阻塞,或者在冲刷之后重新加载数据C以便对数据C进行相应的处理。因此,这种将目标域中的数据全部提供出去的冲刷操作就会导致冲刷过度,增大处理器开销的同时还降低了处理器的性能。
本公开至少一实施例提供一种数据操作方法、数据操作装置和数据处理器。该数据操作方法包括:响应于数据冲刷请求,确定冲刷目标域,其中,数据冲刷请求包括目标数据类型;根据数据冲刷请求,对冲刷目标域执行冲刷操作,将冲刷目标域中的至少一项对象数据中符合目标数据类型的对象数据作为目标数据并提供出冲刷目标域。
该数据操作方法能够自适应地将冲刷目标域中满足目标数据类型的对象数据提供出去,而不会将全部数据,尤其是非目标数据提供出冲刷目标域,从而减少或避免人工智能处理器的“过杀伤”(overkilling)现象,减缓由于过度频繁的刷新操作导致的性能损失。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图3为本公开至少一实施例提供的一种数据操作方法的示意性流程图。
例如,如图3所示,本公开实施例提供的数据操作方法包括步骤S10至S20。
例如,本公开至少一实施例提供的一种数据操作方法应用于数据处理器,数据处理器可以为如前所述的人工智能处理器,用于执行人工智能计算,例如,使用神经网络进行训练或推理,本公开的实施例对于神经网络的类型不作限制。
在步骤S10,响应于数据冲刷请求,确定冲刷目标域。
例如,数据冲刷请求包括目标数据类型,例如,包括了要冲刷的目标数据的识别信息。
在步骤S20,根据数据冲刷请求,对冲刷目标域执行冲刷操作,将冲刷目标域中的至少一项对象数据中符合目标数据类型的对象数据作为目标数据并提供出冲刷目标域。
例如,数据冲刷请求响应于数据冲刷指令产生,数据冲刷指令包括多个字段,例如表示冲刷目标域的第一字段和表示目标数据类型的第二字段。也就是说,在步骤S10,当接收到数据冲刷指令时,根据数据冲刷指令中的第一字段记载的信息确定冲刷目标域,根据数据冲刷指令中的第二字段记载的信息确定待冲刷的目标数据类型。
例如,在工作过程中,冲刷目标域中可以包括一项或多项对象数据,该多项对象数据可以具有不同的数据类型。例如,在执行计算任务的数据处理过程中,在计算任务中不同层级位置得到的数据被标注为不同类型的数据。例如,计算任务为多层神经网络处理,由神经网络中不同处理层、同一层中不同位置或部分(分别对应于不同处理核)得到的数据、或处于不同阶段的数据被认为是不同类型的数据。
例如,步骤S20可以包括:从至少一项对象数据中确定操作数据;响应于操作数据的数据类型与目标数据类型相同,将操作数据作为目标数据以执行冲刷操作。
例如,可以依序从冲刷目标域包括的多项对象数据中选择一个对象数据作为操作数据,判断操作数据的数据类型是否与数据冲刷指令指示的目标数据类型相同,若操作数据的数据类型与目标数据类型相同,将操作数据作为目标数据并将目标数据提供出冲刷目标域,之后,目标数据跟随数据流前往数据处理器中的其他位置,例如其他处理核等,以执行后续处理,例如目标数据提供至共享缓存,由共享缓存中的标准化引擎执行批量标准化操作,并保存在共享缓存中,等待处理核的再次提取;若操作数据的数据类型与目标数据类型不相同,不对操作数据执行任何处理,继续依序选择下一个对象数据作为操作数据并执行上述过程。
例如,本公开至少一实施例提供的数据操作方法还包括:在冲刷操作之前的对上述提及的至少一项对象数据进行数据处理的过程中,为至少一项对象数据添加对应的属性标记信息,例如,属性标记信息包括用于指示对象数据的数据类型的子信息。
例如,为至少一项对象数据添加对应的属性标记信息,可以包括:在执行计算任务的数据处理过程中,基于至少一项对象数据在计算任务中的层级位置添加与层级位置相对应的属性标记信息。
例如,计算任务为神经网络计算,神经网络包括多个处理层,当不同处理层、同一层的不同位置或部分、或不同阶段生成对象数据时,为生成的对象数据添加对应的属性标记信息,通过属性标记信息中的子信息指示对象数据的数据类型。例如,数据类型可以包括标准化数据或用于批量标准化的数据、经过批量标准化后的数据、经过激活函数处理后的数据等。
例如,在冲刷操作过程中,阻塞对冲刷目标域中写入具有目标数据类型的其他数据。例如,当对冲刷目标域执行冲刷操作时,将冲刷目标域中当前存在的具有目标数据类型的数据被提供出冲刷目标域,其他即将进入冲刷目标域的具有目标数据类型的数据先被阻塞,暂时不能进行冲刷目标域,直到冲刷操作执行完毕后再进入冲刷目标域。
例如,在冲刷操作过程中或之后,在冲刷目标域中保留目标数据。也就是说,在本公开中,“数据被提供出去”是指冲刷目标域中的对象数据发送给数据处理器中的其他部件,冲刷目标域本地的数据可以被清除,或者也可以仍保留原有状态,例如,该状态可以由数据冲刷指令中的其他参数进行设置,本公开对此不作限制。
在本公开至少一实施例提供的数据操作方法中,在对象数据生成时为每个对象数据添加属性标记信息,从而在接收到数据冲刷请求时,确定数据冲刷请求包括的目标数据类型,将每个对象数据的属性标记信息的子信息与目标数据类型进行比对,将符合目标数据类型的对象数据作为目标数据从冲刷目标域中提供出去,从而实现自适应地调整对于目标域的冲刷目标,避免过冲刷,提升数据处理器的性能。
例如,在执行冲刷操作时,目标冲刷域可以包括数据处理器中的数据存储区,例如缓存或缓冲区,从而将缓存或缓冲区中的目标数据提供出冲刷目标域。例如,目标冲刷域可以还可以包括数据处理流水线,例如结构流水线(Fabric Pipelines),从而将数据处理流水线中的目标数据提供出冲刷目标域。例如,缓存可以为某一专用缓存(例如一级缓存或二级缓存)或共享缓存,缓冲区可以包括多种类型的缓冲区,例如,聚合缓冲区,例如其可以通过某一缓存或主存储器实现;例如,数据处理流水线可以包括多级专用缓存的组合、专用缓存与共享缓存的组合、专用缓存与互连网络的组合等,还可以进一步包括其他连接在这些存储装置之间的单元、模块,本公开的实施例对此不作限制。
下面结合附图分别具体描述两种场景下的冲刷操作执行过程。
例如,在一些实施例中,冲刷目标域包括缓存或缓冲区。
例如,在一个示例中,数据处理器包括三级缓存,分别为缓存L0、缓存L1和缓存L2。传统的冲刷指令为:Flush. [bp0, bp1, bp2],这里,Flush为操作码,表示冲刷指令,bp0至bp2为第一字段并表示冲刷目标域,例如,bp0用于指示是否让缓存L0中的数据提供出去,也即冲刷目标域为缓存L0,bp1用于指示是否让缓存L1中的数据提供出去,也即冲刷目标域为缓存L1,bp2用于指示是否让缓存L2中的数据提供出去,也即冲刷目标域为缓存L2。
例如,在本公开至少一实施例提供的数据冲刷指令中定义了一些掩码位(maskbit)作为第二字段,通过这些掩码位指示在指令集架构中的冲刷目标。例如,第二字段可以表示待冲刷的目标数据类型,从而可以对冲刷目标域中具有不同数据类型的数据进行有选择性的冲刷。
例如,本公开至少一实施例提供的冲刷指令的形式为:Flush. [bp0, bp1, bp2].mask,这里,mask为第二字段,第二字段可以理解为数据冲刷指令的一个参数,第二字段的不同数值代表不同的数据类型。例如,第二字段可以包括2个掩码位,当第二字段的数值为1时,表示数据冲刷请求的目标数据类型为标准化数据或用于批量标准化的数据,当第二字段的数值为2时,表示数据冲刷请求的目标数据类型为经过批量标准化后的数据,当第二字段的数值为3时,表示数据冲刷请求的目标数据类型为经过激活函数处理后的数据。当然,根据实际需要,第二字段可以包括更多的掩码位,从而可以表示更多种类的数据类型。
例如,根据冲刷指令中的第二字段可以自适应地调整目标数据,例如,一种数据类型可以执行更少的冲刷操作,而另一种数据类型可以执行更多的冲刷操作,每次执行冲刷指令时只将目标数据提供出去,而不会将冲刷目标域中的所有数据都提供出去,从而避免过冲刷,提高数据处理器的性能。
例如,第一缓冲区接收到数据冲刷请求,数据冲刷请求中的目标数据类型为数据类型A,对第一缓冲区执行冲刷操作,将第一缓冲区中数据类型为A的对象数据作为目标数据并提供出第一缓冲区,例如,目标数据根据数据流进入聚合缓冲区;第二缓冲区接收到数据冲刷请求,数据冲刷请求中的目标数据类型也为数据类型A,对第二缓冲区执行冲刷操作,将第二缓冲区中数据类型为A的对象数据作为目标数据并提供出第二缓冲区,例如,目标数据根据数据流也进入聚合缓冲区,从而第一缓冲区和第二缓冲区中数据类型为A的数据在聚合缓冲区中聚合,其他数据类型的数据不会被提供出目标冲刷域。
例如,作为冲刷目标域的缓冲区包括用于数据聚合操作的聚合缓冲区。例如,当对聚合缓冲区执行冲刷操作时,根据数据冲刷请求确定的目标数据类型,将聚合缓冲区中满足目标数据类型的数据提供出聚合缓冲区,而其他数据类型的数据不被提供出聚合缓冲区。
例如,冲刷指令是将数据从冲刷目标域提供出去,如果将其设置为变相的数据更新的操作,那么通常在执行冲刷指令时需要暂停/延迟其他请求的执行,甚至与冲刷目标域中数据无关的请求都会被暂停。如果人工智能处理器中的冲刷操作频繁执行,而每次执行冲刷操作时均延迟/暂停其他请求的执行,这会显著降低处理器的性能。
针对上述情形,在冲刷操作过程中,可以设置为允许对冲刷目标域中数据类型不同于目标数据类型的对象数据执行不同于冲刷操作的数据操作。例如,当冲刷目标域为聚合缓冲区时,仅将聚合缓冲区中目标数据类型的对象数据提供出聚合缓冲区,其他数据类型的对象数据可以不受影响继续执行聚合操作,从而其他类型的对象数据不会在未处理完成的情况下就被提供出聚合缓冲区,并且其他非目标数据类型的对象数据的聚合操作还可以继续执行,提高处理器的性能,避免“过冲刷”问题。
图4为本公开至少一实施例提供的对聚合缓冲区执行冲刷操作的示意图。
例如,聚合缓冲区包括多个存储块,存储块用于存储对象数据,每个对象数据具有属性标记信息,属性标记信息包括指示对象数据类型的子信息,例如,如图4所示,对象数据类型包括数据类型A和数据类型B。当然,对象数据类型还可以包括更多种类的数据类型。对象数据的属性标记信息可以存储在聚合缓冲区,或者可以单独存储。
如图4所示,数据冲刷控制表示对数据冲刷指令进行解析,获取数据冲刷请求,确定冲刷目标域和目标数据类型;数据聚合控制表示对数据聚合指令进行处理,以执行数据聚合操作,例如,聚合处理的过程可以是:聚合缓冲区中每个存储块的长度为512字节,来自4个处理核的4个128字节数据聚合为一个对象数据并存入聚合缓冲区中的1个存储块。
例如,当数据处理器发起数据冲刷请求时,首先根据数据冲刷指令中的第一字段确定冲刷目标域为聚合缓冲区,根据数据冲刷指令中的第二字段确定目标数据类型,例如,根据第二字段的掩码位确定数据冲刷请求的冲刷目标为数据类型A的对象数据,那么依次将每个对象数据作为操作数据,若操作数据的数据类型与目标数据类型相同,将操作数据作为目标数据提供出聚合缓冲区,从而只将聚合缓冲区中数据类型为A的对象数据作为目标数据提供出聚合缓冲区,而数据类型B的对象数据可以继续执行数据聚合操作。
也就是说,当执行冲刷指令时,非目标数据类型的对象数据仍然可以执行不同于冲刷操作的数据操作,例如数据聚合操作,冲刷指令不会延迟/暂停非目标数据类型的对象数据的其他操作,这些非目标数据类型的对象数据可以继续执行数据聚合操作等操作,从而显著提高聚合效率,多核处理器中的共享缓存或互连网络的效率也会显著提高。
例如,在另一些实施例中,冲刷目标域包括数据处理流水线。例如,数据处理流水线可以为结构流水线(fabric pipelines),是指数据从处理核传输至内存的过程中所经过的一级或多级缓存、缓冲区、仲裁器(arbiter)、互连网络等结构的传输过程。
例如,数据处理流水线配置于多核处理器中或多处理器系统中,例如,多核处理器中或多处理器系统用于执行人工智能计算。
例如,数据处理流水线包括至少一个数据存储单元,至少一个数据存储单元用于存储至少一项对象数据。例如,至少一个数据存储单元可以包括暂存对象数据的寄存器等存储结构。
例如,为数据处理流水线提供计数单元,例如,计数单元包括分别对应于多种数据类型的多个计数器,且响应于在数据处理流水线中每种数据类型的对象数据的数量变化,每种数据类型对应的计数器同步递增或递减。
例如,在至少一项对象数据进入数据处理流水线时,利用每种数据类型对应的计数器记录数据处理流水线中每种数据类型的数据的数量。
例如,目标数据包括冲刷目标域中数据类型与目标数据类型相同的一项或多项对象数据。例如,在冲刷目标域包括数据处理流水线时,根据数据冲刷请求,对冲刷目标域执行冲刷操作,可以包括:对数据处理流水线中的目标数据中每一项对象数据执行冲刷操作,且在每一项对象数据执行了冲刷操作之后,将目标数据类型对应的计数器增加或减少1,直到目标数据类型对应的计数器的值回到初始值。
例如,对数据处理流水线中的目标数据中每一项对象数据执行冲刷操作,可以包括:至少一项对象数据在数据处理流水线中构成数据队列时,在数据队列中依序取得操作数据,且响应于操作数据的数据类型与数据冲刷请求的目标数据类型相同,将操作数据作为目标数据提供出数据处理流水线。
具体来说,针对冲刷目标域包括数据处理流水线的情况,为每种数据类型设置一个计数器用于记录当前在数据处理流水线中的具有该数据类型的对象数据的数量。例如,每个计数器的初始值为I,当有数据类型为A的对象数据进入数据处理流水线时,数据类型A对应的计数器A的值加1,当有数据类型为B的对象数据进入数据处理流水线时,数据类型B对应的计数器B的值加1。
例如,当对象数据在数据处理流水线中构成数据队列时,例如数据队列为FIFO(先进先出)队列,顺序或按预设规则依序将一个对象数据作为操作数据,若操作数据的数据类型与目标数据类型相同,将操作数据作为目标数据提供出数据处理流水线,并在目标数据离开数据流水线后,将目标数据类型对应的计数器的值减1,直到目标数据类型对应的计数器的值回到初始值I。
需要说明的是,当对象数据进入数据处理流水线时,也可以将对应的计数器的值减1,并在目标数据离开数据处理流水线时,将对应的计数器的值加1,本公开对此不作限制。
例如,在冲刷操作过程中,在数据冲刷指令之后发起的对冲刷目标域的请求继续执行,也就是说,冲刷操作可以与在冲刷指令之后发起的操作请求并行执行,之后的操作请求不受影响,冲刷操作仅将目标数据提供出冲刷目标域,而不会暂停后续的对冲刷目标域的操作请求。
例如,在数据处理流水线使用ping-pong(乒乓)缓冲机制时,提供两个数据子队列交替地被读和被写,可以为两个数据子队列中每个数据类型设置ping路计数器和pong路计数器,利用ping路计数器和pong路计数器分别记录进入两个数据子队列的该数据类型的数据的数量,在ping路计数器和pong路计数器的值都回到初始值I时,完成冲刷指令。利用ping路计数器和pong路计数器可以进一步减少冲刷范围。
图5为本公开至少一实施例提供的对数据处理流水线执行冲刷操作的示意图。
如图5所示,数据处理流水线中的对象数据构成数据队列,数据队列中包括两种数据类型:数据类型A和数据类型B,为数据类型A提供计数器0,为数据类型B提供计数器1,计数器0和计数器1的初始值均为0,当一个数据类型A的对象数据进入数据流水线时,计数器0的数值加1,当一个数据类型B的对象数据进入数据流水线时,计数器1的数值加1。
例如,数据冲刷指令之后的其他指令为页表缓冲器查找指令。例如,虚拟地址到物理地址的映射存储在内存的表格中,访问这些内存中的表格同样需要上百个时钟。为了减少这些内存访问,处理核内部使用多级的缓存来保存最近被使用的映射,这些特定的缓存被称为页表缓冲器(Table Lookaside Buffer,TLB)。页表缓冲器查找指令是根据虚拟地址查找物理地址,以读取页表缓冲器中缓存的数据。
例如,对象数据在数据队列中流转,当接收到数据冲刷指令时,例如,数据冲刷指令指示目标数据类型为数据类型A,则将数据队列中数据类型A的对象数据提供出数据队列至存储器子系统(memory sub-system,例如主存储器),并在数据类型A的对象数据离开数据队列时,计数器0的值减1,直到计数器0的值为0,表示冲刷操作执行完毕。
同时,数据类型B的对象数据仍可以继续执行页表缓冲器查找指令而不会被暂停,从而提高处理器处理效率,降低系统延迟。
本公开至少一实施例提供的数据操作方法能够显著提高用于人工智能计算系统的人工智能处理器的性能,尤其适用不同处理层或不同阶段的数据由全流水线处理的场景。
与上述的数据操作方法相对应,本公开至少一实施例还提供一种数据操作装置,图6为本公开至少一实施例提供的一种数据操作装置的示意性框图。
例如,如图6所示,数据操作装置600包括:确定单元601和冲刷单元602。数据操作装置600例如用于多处理器体系的计算装置。
确定单元601配置为响应于数据冲刷请求,确定冲刷目标域,其中,数据冲刷请求包括目标数据类型。
冲刷单元602配置为根据数据冲刷请求,对冲刷目标域执行冲刷操作,将冲刷目标域中的至少一项对象数据中符合目标数据类型的对象数据作为目标数据,并将目标数据提供出冲刷目标域。
例如,确定单元601和冲刷单元602包括存储在存储器中的代码和程序;处理器可以执行该代码和程序以实现如上的确定单元601和冲刷单元602的一些功能或全部功能。例如,确定单元601和冲刷单元602可以是专用硬件器件或固件,用来实现如上的确定单元601和冲刷单元602的一些或全部功能。例如,确定单元601和冲刷单元602可以是一个电路板或多个电路板的组合,用于实现如上的功能。在本申请实施例中,该一个电路板或多个电路板的组合可以包括:(1)一个或多个处理器;(2)与处理器相连接的一个或多个非暂时的存储器;以及(3)处理器可执行的存储在存储器中的固件。
例如,数据操作装置还可以包括缓冲区、缓存或数据处理流水线,其中,冲刷目标域包括缓冲区、缓存或数据处理流水线。关于缓冲区、缓存和数据处理流水线的相关内容可以参考上述数据操作方法,重复之处不再赘述。
需要说明的是,确定单元601用于实现图3所示的步骤S10,冲刷单元602用于实现图3所示的步骤S20。从而关于确定单元601的具体说明可以参考上述数据操作方法的实施例中图3所示的步骤S10的相关描述,关于冲刷单元602的具体说明可以参考上述数据操作方法的实施例中图3所示的步骤S20的相关描述。此外,数据操作装置可以实现与前述数据操作方法相似的技术效果,在此不再赘述。
本公开至少一实施例还提供一种数据处理器。图7为本公开至少一实施例提供的数据处理器的示意性结构图。
如图7所示,数据处理器700包括指令存储器701、指令执行单元702和指令调度器703。
如图7所示,数据处理器700可以包括指令缓存器701、指令执行单元702和指令调度器703。例如,指令缓存器701可以包括一片位于指令调度器703外部的缓存(Cache),用于缓存指令调度器703从外部存储空间取回的指令数据;指令调度器703用于获取指令数据以及进行指令译码和指令派发,例如,指令调度器703执行取指操作,以从指令缓存器701得到指令数据,并且,指令调度器703对获取的指令数据进行一系列的指令仲裁、指令译码,最后将选出的指令派发至相应的指令执行单元702执行。
例如,指令执行单元702从指令存储器701中取指令,并根据本公开至少一实施例提供的数据操作方法处理所取指令。关于数据操作方法的具体执行过程参考上述数据操作方法及图3-图5所述的内容,这里不再赘述。
例如,数据处理器为人工智能处理器,用于执行人工智能计算,例如为多处理器体系。例如,数据操作器可以采用通用处理器架构,例如CPU(中央处理器,CentralProcessing Unit)或GPU(图形处理器,graphics processing unit);例如,数据操作器可以采用专用处理器架构,例如,专门针对智能计算、基于ASIC方式设计的定制处理器,这类处理器专门针对特定类型的计算任务采用专用硬件电路实现,能够以很低的功耗完成高能效计算;例如,数据操作器可以采用可重构处理器架构,例如,该处理器架构包含FPGA(现场可编程门阵列,field-programmable gate array)和粗粒度可重构阵列(粗粒度可重构体系结构,Coarse Grained Reconfigurable Architectures),具有硬件可编程能力。本公开对数据处理器的结构不作限制,任意执行人工智能计算的处理器结构都可应用于本公开至少一实施例提供的数据处理器。
图8为本公开一些实施例提供的一种电子设备的示意框图。该电子设备800例如适于用来实施本公开实施例提供的数据操作方法。电子设备800可以是终端设备等。需要注意的是,图8示出的电子设备800仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800可以包括处理装置(例如中央处理器)810,其可以根据存储在只读存储器(ROM)820中的程序或者从存储装置880加载到随机访问存储器(RAM)830中的程序而执行各种适当的动作和处理。
在RAM830中,还存储有电子设备800操作所需的各种程序和数据。处理装置810、ROM820以及RAM830通过总线840彼此相连。输入/输出(I/O)接口850也连接至总线840。
通常,以下装置可以连接至I/O接口850:输入装置860,例如输入装置860可以包括触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等;输出装置870,例如输出装置870可以包括液晶显示器(LCD)、扬声器、振动器等;存储装置880,例如存储装置880可以包括磁带、硬盘等;以及通信装置890。通信装置890可以允许电子设备800与其他电子设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备800,但应理解的是,并不要求实施或具备所有示出的装置,电子设备800可以替代地实施或具备更多或更少的装置。
例如,根据本公开的实施例,处理装置810可以执行上述数据操作方法,可以实现本公开实施例提供的数据操作方法中限定的功能。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)为了清晰起见,在用于描述本发明的实施例的附图中,层或结构的厚度和尺寸被放大。可以理解,当诸如层、膜、区域或基板之类的元件被称作位于另一元件“上”或“下”时,该元件可以“直接”位于另一元件 “上”或“下”,或者可以存在中间元件。
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。