分形计算装置、方法、集成电路及板卡与流程

文档序号:22739466发布日期:2020-10-31 09:21阅读:98来源:国知局
分形计算装置、方法、集成电路及板卡与流程
本公开一般地涉及神经网络领域。更具体地,本公开涉及分形计算装置、方法、集成电路及板卡。
背景技术
:机器学习技术已经大量应用于新兴商业,像是图像识别、文本识别、语音识别、面部识别视频分析、广告推荐和游戏等领域。近年来,许多不同规模的专用机器学习计算装置已部署在各种的嵌入式设备、服务器和数据中心中,人们的生活早已离不开机器学习技术。大多数的机器学习计算装置持续专注于优化性能,光是2012年到2018年间,其功效增长了逾1200倍。虽然机器学习计算装置的能效一直在快速增长,但是编程效率的发展有限,阻碍了机器学习技术的普及化。即使现有的计算装置具有很高的峰值性能,但精简的硬件控制管理和软件堆栈对于机器学习计算装置的实际性能仍然至关重要。不仅如此,现有的机器学习计算装置的异构性、并行性和分层特性也影响了编程效率。因此,一种同构、串行的分层结构、具有相同的指令集的机器学习计算装置是迫切需要的。技术实现要素:为了至少部分地解决
背景技术
中提到的技术问题,本公开的方案提供了一种分形计算装置、方法、集成电路及板卡。在一个方面中,本公开揭露一种根据指令对输入数据执行神经网络计算的方法,包括:将所述指令分为多个分形指令;将所述输入数据拆分为多个分形数据,每个分形数据对应一个分形指令;提供分形可重配指令集的多个本地指令;拆解每个分形指令为有序集合,所述有序集合由所述多个本地指令至少其中之一依序排列而成;对所述分形数据执行相对应分形指令的有序集合内的本地指令以产生中间数据;以及归约所述中间数据以完成所述神经网络计算。在另一个方面中,本公开揭露一种根据指令执行特定操作的分形计算装置,包括多个中层计算单元及叶计算单元。每个中层计算单元包括:控制器,用以分解所述指令成多个分形指令,其中每个分形指令执行所述特定操作;以及多个分形功能单元,每个分形功能单元分别发送所述多个分形指令其中之一至下一层的中层计算单元。叶计算单元包括:控制器,用以分解所述分形指令为本地指令;以及功能单元,用以执行所述本地指令。在另一个方面中,本公开揭露一种集成电路装置,包括前述的分形计算装置。亦揭露一种板卡,包括前述的集成电路装置。本公开是一系列能被相同指令集所驱动的同构(homogeneous)、串行(sequential)、多层(multi-layer)、层相似(layer-similar)的机器学习计算技术方案,可以实现简单控制和高效率。附图说明通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:图1是示出一种分形计算装置的框架示意图;图2是示出本公开实施例的计算装置的框图;图3是示出本公开的分形计算装置的示意图;图4是示出本公开另一个实施例的流水线的示例图;图5是示出根据本公开实施例的内存组件的划分的示意图;图6是示出本公开另一实施例的流水线的示意图;图7是示出本公开另一实施例的内存组件的划分的示意图;图8是示出本公开另一实施例的静态内存段的示意图;图9是示出本公开另一实施例的分形计算装置的示意图;图10是示出本公开另一实施例的流水线的示意图;图11是示出本公开另一实施例的每层计算单元的示意图;图12是示出单任务多继承的框架;图13是示出本公开另一实施例的流水线的流程图;图14是示出本公开另一个实施例的单任务多继承方法的流程图;图15是示出本公开另一实施例的每层计算单元的示意图;图16是示出本公开另一实施例在进行分形时的示意图;图17是示出本公开另一实施例执行神经网络计算的方法的流程图;图18是示出本公开另一实施例的集成电路装置的示意图;以及图19是示出本公开另一实施例的板卡的示意图。具体实施方式下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。下面结合附图来详细描述本公开的具体实施方式。本公开提出了一种机器学习计算装置新框架,它具有易于编程和高效运行的优点,这种框架是以分形(fractal)的方式组织计算装置的各个组成部分。“分形”原是几何学上的用词,指的是以非整数维形式充填空间的形态特征,通常被定义为零碎的几何形状,可以分成数个部分,且每一部分都是或至少近似整体缩小后的形状,即具有自相似的性质。分形一词在计算机领域指的是机器会迭代分解,该分解具有任意规模的自相似模式。图1示出一种分形计算装置的框架示意图。计算装置101、计算装置102、计算装置103及计算装置104都是规模大小不同的计算单元,其中计算装置101是计算装置102的分形单元,也就是计算装置102主要是由计算装置101排列组成的,计算装置102是计算装置103的分形单元,计算装置103是计算装置104的分形单元。可以理解的,计算装置104拥有的计算单元最多,因此,计算装置104算力最强,反之,计算装置101的算力最弱。这些计算装置根据算力强弱,适用于不同规模的不同方案,例如计算装置101可以应用在单核加速器,计算装置102可以应用在多核芯片,计算装置103可以应用在多芯片服务器,而计算装置104可以应用在多服务器系统。由于这种分形计算装置具有相同的分形单元,高度重复的结构使得控制计算装置变得十分容易。本公开的技术方案是一系列能被相同指令集所驱动的同构、串行、多层、层相似的机器学习计算装置,其具有分形的冯.诺伊曼架构来迭代管理每一层的计算单元,而每一层的计算单元仍然是冯.诺伊曼架构且由相同指令集所驱动的机器。本公开的机器学习计算装置支持分形计算,母节点(上层计算单元)可以将指令迭代分解为子节点(下层计算单元)上的指令。层数量直接对应至计算规模,不同计算规模的机器学习计算装置可以用于嵌入式系统、台式机、数据中心到超级计算装置等不同场景。因此,程序员只需要考虑一组指令集,控制最顶层的计算单元,便可驱动规模大小不同的设备,十分容易扩展。机器学习为计算及访存密集型技术,在不同层次上是高度并行的。本公开将机器学习分解为基于矩阵和向量的多种运算,例如:将向量乘矩阵和矩阵乘向量等操作聚合为矩阵相乘;将矩阵加/减矩阵、矩阵乘标量和向量基本算数运算等操作聚合为按元素逐个(element-wise)运算等。通过将机器学习进行分解、聚合,本公开提出七个主要的计算原语(primitive):内积卷积池化矩阵相乘按元素逐个运算排序计数以上计算原语概括了机器学习的主要特征,也就是说机器学习的计算基本上都可以利用这些计算原语的组合来实现,并且这些计算原语都是可以被分形的运算。如果一个运算式f(x)满足以下条件,则可以被称为是分形运算:f(x)=g(f(xa),f(xb),…)其中,f(·)是目标运算符,g(·)是取回运算符(retrievingoperator),x表示f(·)所有的操作数,可以为张量数据,而xa、xb等表示操作数x的子集。基于分形后的操作数xa、xb…和x之间的关系,可以将分形运算分为三类:独立运算、输入依赖运算和输出依赖运算。独立运算是指分形后的操作数xa、xb…彼此独立且不重合,每个子集可以做单独运算,且只需要组合每个子集局部运算的结果即可得到最终的运算结果。以向量加法运算作为示例来解释说明独立运算,假设以下算式要被运算:由于可以分别分为两个独立子集和因此前述算式能推演为:也就是两个子集可以独立完成局部向量加法运算,即和最终的运算结果只需要合并每个局部运算的结果即可。换言之,也能分为独立子集输入依赖运算是指xa、xb等至少部分重叠,每个子集都需要一些输入的额外副本,以进行完整的运算,从而导致分形操作中的数据冗余,所谓的数据冗余是指同一个数据在系统中多次重复被使用。例如,在进行一维卷积时,同样利用来表示两个操作数,其中运算上分为两部分,每一部分都在输出的独立部分上工作,即然而,基于卷积的特性,这两个运算的输入重叠,会需要额外的的一部分(即)来与分形的另一部分做运算,也就是而数入端的操作数无法独立分形,互有依赖。输出依赖运算是指每个分形单元产出计算结果后,还需要进行归约(reduce),才能得到最终结果。归约是指在基于对数据本身内容理解的基础上,根据数据的某些特征分别计算,以缩减数据计算规模,从而在尽可能保持数据原貌的前提下,最大限度地精简数据量,再以该特征为基础还原或整合计算结果。例如,将内积运算分成较小的单位,每个计算单元均执行部分内积运算,例如和但是要获得最终结果,必须将这些运算结果做归约,进行归约时计算结果是互为依赖的。计算原语根据不同的分解方式,会导致依赖性有所差异,具体如表1所示。表1计算原语分析计算原语分解方式依赖性g(·)数据冗余内积按长度输出依赖相加卷积按特征输出依赖相加卷积按批量输入依赖权值卷积空间输入依赖权值,重合池化按特征独立池化空间输入依赖重合矩阵相乘左侧,垂直输出依赖相加矩阵相乘右侧,垂直输入依赖左矩阵按元素逐个运算任意独立排序任意输出依赖合并计数任意输出依赖相加举例来说,卷积运算可以在通道维度上以输入特征图(inputfeaturesmap)为基础划分,最终输出取决于每个划分部分的结果,因此属于输出依赖运算,或者卷积运算也可以按矩阵高度或宽度划分输入特征图,则输出结果的每个部分就会需要具有一定重叠的输入,因此属于输出依赖运算。显然,独立运算很容易映射到图1所示的分形架构和分形计算中,而输入依赖运算需要转换为具有输入冗余的独立运算,原则上也可视为是独立的,而输出依赖运算则需要归约程序。在表1中,本公开以分形的形式对计算原语的分解进行了分析,其显示以分形的形式执行机器学习计算是完全可行的,但是在设计分形体系结构时仍存在以下挑战。本公开均提出相应有效的解决方案:归约运算输出依赖运算的归约运算g(·)不像独立运算和输入依赖运算那样适合分形框架,为了有效地处理g(·),本公开在每个节点引入了本地功能单元,通过将每层的分形功能单元中的数据迭代地聚合到上层的本地功能单元中,由上层的本地功能单元有效地执行归约运算。数据冗余在分形运算中,将输入依赖运算转换成具有数据冗余的独立运算,为此,本公开的计算装置的存储器是分区组织的,可以在不同的时间序里访问存储器的任一区,以获取数据。通信不同节点之间的通信需要大量的线路连接,导致芯片面积过大,还有延迟和耗能等问题。为此,根据本公开的方案,即使是输出依赖运算,也只需要将数据从下层计算单元传送到上层计算单元进行归约运算。因此,本公开的计算装置没有必要在任何一对节点之间进行通信,改以分形的形式堆叠组织机器学习计算,信号传递仅限于上下层间,从而减少了线路的布局。本公开的一个实施例是具有母子连接关系的计算单元的计算装置,这些计算单元从最高级(0级)计算单元(母节点)译码并将指令发送到其分形功能单元(子节点),其中,每个分形功能单元重复译码、发送过程直到叶计算单元执行为止。叶计算单元将计算结果返回到其母节点,该操作一直重复到最高级计算单元(母节点)为止。此实施例提供了一种计算装置,包括多层计算单元,每一个计算单元包括控制器、采用的内存组件以及分形功能单元。本公开的实施例是一种分形计算装置,其框架如图2所示。此分形计算装置200包括多层计算单元,例如根计算单元201、第i层计算单元202、第i+1层计算单元203、叶计算单元204。根计算单元201为最顶层,或称为第0层计算单元;在根计算单元201之下有多个中层计算单元,这些中层计算单元具有同样的结构,在图2中以第i层计算单元202和第i+1层计算单元203示例说明;叶计算单元204为最底层计算单元,专门负责计算。每层计算单元均包括控制器、功能单元及存储器,控制器接收上层发送来的任务,用以指派任务或将任务分解成子任务,再发送给功能单元,功能单元用以执行所分配的任务,存储器则用以存储与这些任务相关的数据。根计算单元201包括控制器205、功能单元(fu)206及存储器207。根计算单元201做为最顶层计算单元,主要接收一个完整的计算指令,例如是执行矩阵相乘的任务,所述矩阵相乘指令和矩阵数据存储在存储器207中,控制器205根据所述计算指令,接收到相应的任务,并发送本地指令控制功能单元206执行所述任务,控制功能单元206进行运算。更详细来说,功能单元206本身并不执行具体计算,仅将任务下发给中层计算单元。如前所述,中层计算单元是由多层相同结构的计算单元所堆叠而成,此处以第i层计算单元202示例说明。第i层计算单元202包括控制器208、存储器209及分形功能单元(fractalfunctionalunit,ffu)210及本地功能单元(localfunctionalunit,lfu)211。控制器208用以自上层接收到任务,以产生分形指令及本地指令。更详细来说,控制器208基于同层分形功能单元210的数量,决定拆分任务的方式及数量,以形成子任务,使得每个分形功能单元210都对应一个子任务,并将这些信息载入至分形指令中,再基于拆分任务的方式及数量,决定归约的方式,也就是本地任务,并将归约的信息载入至本地指令中。第i层计算单元202示例性的包括四个分形功能单元210,需特别注意的是本公开并不限制分形功能单元的数量。每个分形功能单元210接收到控制器208发送的分形指令,根据所接收到的分形指令,下发相对应的子任务。对第i层计算单元202来说,分形功能单元210亦不执行具体计算,而是将子任务下发给第i+1层计算单元203。同时,第i+1层计算单元203的控制器将执行任务所需的数据自存储器209复制到第i+1层计算单元203的存储器中。第i层计算单元202示例性的包括两个本地功能单元211,需特别注意的是本公开并不限制本地功能单元的数量。本地功能单元211接收来自控制器208的本地指令,根据本地指令执行本地任务,所述本地任务包括归约所有返回到分形功能单元210的计算结果。存储器209则用以存储执行子任务所需的数据。如图2所示,每个分形功能单元210其实就是下一层的计算单元。第i层计算单元202的分形功能单元210的子任务下发到第i+1层计算单元203后,第i层计算单元202的子任务即是第i+1层计算单元203的任务,第i+1层计算单元203在基于前述的操作将任务进一步分割下发,直到最底层分形计算装置,也就是叶计算单元204。叶计算单元204同样包括控制器212、功能单元213及存储器214。控制器212根据接收到的任务,产生分形指令。与中层计算单元不同的是,功能单元213只有分形功能单元,其为加速器,并根据所述分形指令计算子任务。叶计算单元204示例性的包括三个分形功能单元213,需特别注意的是本公开并不限制功能单元213的数量。以前述的矩阵乘法为例,矩阵乘法的任务经每层持续分形分解成许多的子任务,到了叶计算单元204后,功能单元213执行计算,获得计算结果,暂存在存储器214中,控制器212将计算结果返回给上一层的计算单元。同样以第i层计算单元202做说明,第i层计算单元202接收到所有分形功能单元210的计算结果后,暂存于存储器209中,本地功能单元211执行任务中的本地任务,也就是将第i层的计算结果进行归约,控制器208再将归约后的计算结果往上一层发送,直到最顶层的根计算单元201,便完成计算任务。由前述可知,此实施例的分形计算装置200具有多层的计算单元,任务会根据同层分形功能单元的数量拆解成子任务,下发再分形,直到叶计算单元。叶计算单元执行计算后,将计算结果发送回上一层,上一层的本地功能单元进行归约,将归约后的计算结果再往上一层发送,直到根计算单元,便完成了计算任务。换言之,中层计算单元执行分形下发,并将计算结果进行归约后上传,叶计算单元则负责具体的计算任务。根计算单元201所接收到的输入指令可以包括:运算符和操作数参数,所述操作数参数是指向输入指令的操作数的参数,所述操作数参数包括全局参数和局部参数,全局参数是表示输入指令对应的第一操作数的大小的参数,局部参数是表示输入指令的第二操作数在所述第一操作数中的起始位置和第二操作数的大小的参数。也就是说,第二操作数可以是第一操作数中的部分数据或者全部数据,执行输入指令时可以实现对第二操作数的处理,对第二操作数的处理是与输入指令的运算符对应的处理。在前述的实施例中,由于每层计算单元的结构都相同,因此可以使用同一种指令集架构来驱动,使得控制本公开的分形计算装置变得十分简易。这种指令集称为分形指令集架构(fractalinstructionsetarchitecture,fisa)。分形指令集的指令i由一个三元组〈o,p,g〉所组成,其中o代表特定运算,p是一个有限的操作数集,g是粒度指示符。当且仅当指令i〈o,p,g〉存在一组指示符g′1、g′2、g′3、、、,使得i〈o,p,g〉可以通过计算i′1(g′1)、i′2(g′2)、i′3(g′3)、、、和其他fisa指令迭代获得时,i〈o,p,g〉才是分形指令。表2示出应用在本公开的分形计算装置的分形指令集。表2:分形指令集本公开通过前述的实施例揭示了分形计算装置,搭配分形指令集,使得驱动包括这类分形计算装置的芯片变得简易。图3示出以另外一个角度展示本公开的分形计算装置。分形计算装置300包括多层计算单元301、302、303、304、305,每层计算单元都是由相同结构的分形指令集306、307、308、309、310所控制。对程序员311来说,虽然欲控制的是整个分形计算装置300,但实际上他仅能“看见”最顶层的根计算单元301,其余层皆隐藏在分形指令集306后,换言之,程序员311只需要基于分形指令集306编写代码控制根计算单元301即可,根计算单元301的控制器会根据相同结构的分形指令集307,产生分形指令,进而控制下一层的计算单元302,以此类推,每层计算单元只需产生分形指令以控制下一层计算单元,因此各层只跟上下层产生联系,通信直接,指令简单,不受干扰。在本公开的一种可能的实现方式中,前述控制器用于对任意一个计算单元的输入指令进行分解得到多个子指令,例如可以分解为多个并行子指令,将并行子指令发送给所述任意一个计算单元中的控制器控制分形功能单元,以流水线的方式分多个阶段执行。所述计算单元从上一层计算单元的内存组件中加载执行并行子指令需要的操作数,所述计算单元根据输入指令执行对应的操作。所述多个阶段可以包括:指令译码id(instructiondecoding)、数据加载ld(loading)、操作执行ex(execution)、操作归约rd(reduction)以及数据写回wb(writingback),所述流水线按照指令译码id、数据加载ld、操作执行ex、操作归约rd以及数据写回wb的顺序传播。需要说明的是,以上实施方式中的多个阶段仅仅是本公开的一个示例,不以任何方式限制本公开,例如,所述多个阶段还可以包括串行分解等。指令译码id是指对接收到的上一层(或者输入端)发送的输入指令进行译码处理,具体可以包括:根据输入指令对应的操作数的存储需求为输入指令分配本层计算单元的内存组件上的内存空间,并将分配的内存空间的地址(本地地址)绑定到输入指令中写操作数的指令上。数据加载ld是指根据输入指令中记载所对应的读取操作数的地址,从上一层计算单元的内存组件中查找到输入指令对应的操作数的存储位置,并读取操作数,然后根据本地地址写入到本层计算单元的内存组件中。操作执行ex是指根据操作符以及操作数获得运算结果的过程。如上所述,由于分形功能单元可能有多个,或者,本层计算单元的内存组件的容量小于存储输入指令需要的数据所需要的内存的容量,因此控制器还可以对输入指令进行分解。有些操作还需要对分解后的指令的运算结果进行归约,即操作归约rd,才能得到输入指令的运算结果。数据写回wb是指将本层计算单元的输入指令的运算结果写回到上一层计算单元中。在一种可能的实现方式中,所述任意一个计算单元中的控制器控制所述分形功能单元,以流水线的方式分多个阶段执行所述任意一个计算单元的串行子指令对应的操作。图4示出根据本公开的另一个实施例的流水线的示例。如图4所示,多个阶段可以包括:指令译码id、数据加载ld、操作执行ex、操作归约rd以及数据写回wb,所述流水线按照指令译码id、数据加载ld、操作执行ex、操作归约rd以及数据写回wb的顺序传播。译码器402用于对所述多个子指令(串行子指令)进行指令译码。译码器402根据所述头部指令向所述第一内存控制器407发送第一控制信号,以使第一内存控制器407根据第一控制信号控制第二内存控制器408加载共用操作数。对于所述主体指令,译码器402可以根据主体指令对应的其他操作数的存储需求分配本层计算单元的存储器上的内存空间,并将分配的内存空间的地址(本地地址)绑定到主体指令中获取或者存储其他操作数的指令上,从而实现译码处理。译码器402还可以根据主体指令向第一内存控制器407发送第二控制信号,以使第一内存控制器407根据第二控制信号控制第二内存控制器408存取其他操作数。在一种可能的实现方式中,所述内存组件可以包括静态内存段和循环内存段。图5示出根据此实施例的内存组件的划分的示意图。如图5所示,所述内存组件的内存空间划分为静态内存段501和循环内存段502。如上文所述,输入指令可以是描述了机器学习的操作指令,机器学习的操作以由表1中的计算原语组成,输入指令可以包括操作数和操作符等。也就是说,对于任意一个计算单元的输入指令:控制器对输入指令进行分解得到的多个子指令,这多个子指令可能会共用一部分操作数,这部分操作数即共用操作数。以矩阵相乘运算作为示例,假设输入指令为对矩阵x和y相乘,如果仅仅对矩阵x进行分解,那么对输入指令进行串行分解得到的串行子指令需要共同使用操作数y,操作数y为共用操作数,也就是输入依赖运算。如果所述多个子指令之间存在共用操作数,则所述控制器在所述静态内存段501中为所述共用操作数分配内存空间。对于共用操作数,为了避免频繁的读写,本公开在内存组件中设置静态内存段501专门用于存储共用操作数,在所述循环内存段502中为所述多个子指令的其他操作数分配内存空间。对于多个子指令的共用操作数,在执行多条子指令之前,只需要执行一次将共用操作数从任意一个计算单元的上一层计算单元的内存组件中加载共用操作数到静态内存段501的操作即可,可以避免频繁存取数据、节约带宽资源。上述其他操作数可以是指,输入指令的操作数中被分解的操作数、执行子指令得到的中间结果、归约结果等等,其中归约结果可以是对中间结果进行操作归约得到的,操作归约可以是指上文中提到的归约处理。在一种可能的实现方式中,可以根据基地址以及起始偏移量确定开始读取操作数的起始地址,根据加载数据的数量以及起始地址可以确定一次读取操作数的结束地址,根据起始地址以及跳转的偏移量可以确定下一部分要读的操作数的起始地址,同样的,可以根据加载数据的数量以及下一部分要读的操作数的起始地址确定本次读取操作数的结束位置,重复以上过程,直到达到循环加载操作数的次数。其中的一次读取操作数和本次读取操作数可以是指:读取同一个操作数需要一次或多次完成,每次读取同一个操作数中的部分操作数,上述一次和本次可以是指多次中的一次。也就是说,读取一个操作数可能需要循环多次读取完成,第一内存控制器407可以根据基地址、起始偏移量、加载数据的数量、跳转的偏移量确定每次读取操作数时的起始地址和结束地址,例如,针对每次读取过程,可以根据上一次读取过程的起始地址和跳转的偏移量确定本次读取过程的起始地址,再根据本次读取过程的起始地址和加载数据的数量(以及数据的格式)确定本地读取过程的结束地址。其中,跳转的偏移量是根据跳转的数据的数量以及数据的格式确定。第二内存控制器408用于数据加载ld:将输入指令的操作数加载到内存组件,具体包括:根据与所述头部指令对应的第一控制信号从上一层计算单元的内存组件中加载共用操作数到图5的静态内存段501,根据与所述主体指令对应的第二控制信号从上一层计算单元的内存组件中加载所述其他数据到图5的循环内存段502。所述第二内存控制器408根据所述第二控制信号从上一层计算单元的内存组件中加载所述其他数据到所述循环内存段502,这里主要是加载的其他操作数中的部分操作数,主要是输入操作数中的一部分,而不是中间结果或者归约结果。译码器402对串行子指令进行译码处理后发送给并行分解器404,并行分解器404可以根据并行分解器404连接的分形功能单元405的数量对译码处理后的串行子指令进行并行分解,并行分解可以是指分解后的并行子指令可以并行执行。分形功能单元405可以以流水线的方式分多个阶段执行所述操作执行,得到执行结果。归约控制器409用于控制本地功能单元406对所述执行结果进行操作归约,得到所述输入指令的运算结果,第二内存控制器408还用于数据写回:将运算结果写回到所述任意一个计算单元的上一层计算单元的内存组件中。通过设置指令队列412作为串行分解器401与上一层计算单元之间的缓冲,可以省去串行分解器401与上一层计算单元之间严格的同步执行关系。指令队列412可以简化电路设计,同时提高执行效率,例如,允许串行分解器401和上一层计算单元之间异步执行,以减少串行分解器401等待上一层计算单元发送输入指令的时间。子指令队列403作为串行分解器401与译码器402之间的缓冲,可以省去串行分解器401与译码器402之间严格的同步执行关系。子指令队列403可以简化电路设计,同时提高执行效率,例如,允许串行分解器401异步执行,减少译码器402等待串行分解器401对输入指令进行串行分解的时间等。通过设置指令队列412和子指令队列403可以提高计算装置的处理效率。在一种可能的实现方式中,控制器用于对任意一个计算单元的输入指令进行分解得到多个子指令,包括:串行分解器401根据所述输入指令需要的内存容量、所述内存组件的容量,对所述输入指令进行串行分解得到串行子指令。对输入指令的串行分解可以包括对输入指令的操作数的分解以及对输入指令的分解。在进行串行分解时,为了更有效的利用计算单元的资源,串行分解得到的串行子指令将具有尽可能大的分解粒度,串行分解得到的串行子指令的分解粒度由计算单元的资源决定,例如,计算单元的资源可以为计算单元的内存组件的容量。这里的分解粒度可以指分解操作数的维度。输入指令需要的内存容量根据存储输入指令的操作数需要的内存容量、以及存储操作符对操作数进行处理后的中间结果需要的内存容量等确定,在确定输入指令需要的内存容量后,可以判断本层计算单元的内存组件的容量是否满足输入指令需要的内存容量,如果不满足,则可以根据本层计算单元的内存组件的容量对输入指令进行串行分解得到串行子指令。为便于理解,下面会用一种具体的操作作为示例对串行分解的过程进行解释。以矩阵相乘运算作为示例说明串行分解器401的功能,假设输入指令为对矩阵x和y相乘,串行分解器401可以根据矩阵x和矩阵y的大小确定输入指令需要的内存容量,可以将输入指令需要的内存容量与本层计算单元的内存组件的容量进行比较,如果输入指令需要的内存容量大于本层计算单元的内存组件的容量,则需要对输入指令进行串行分解。具体的过程可以为,对操作数进行分解,从而将输入指令分为多个串行子指令,该多个串行子指令可以串行执行,例如,可以对矩阵x或者矩阵y进行分解,或者对矩阵x和矩阵y都进行分解。以对矩阵x进行分解为例,可以将输入指令串行分解为多个矩阵相乘的串行子指令以及求和的串行子指令,在串行执行完多个矩阵相乘的串行子指令后,根据多个矩阵相乘的串行子指令的运算结果以及求和的串行子指令进行求和得到输入指令的运算结果。需要说明的是,上述对于矩阵相乘的串行分解方式仅仅是本公开为了说明串行分解器401的功能的一个示例,不以任何方式限制本公开。在一种可能的实现方式中,串行分解器401根据所述任意一个计算单元的内存组件的容量、以及所述输入指令需要的内存容量,对所述输入指令进行串行分解得到串行子指令,具体可以包括:确定操作数的维度的分解优先级,按照分解优先级的顺序依次选择对操作数分解的维度,并以二分法方式确定最大分解粒度,直到分解后的操作数需要的内存容量小于或等于本层计算单元的内存组件的容量。通过这种分解方式保证以尽可能大的分解粒度对输入指令进行串行分解。在一种可能的实现方式中,为了提高分解的效率,对于任一选择的对操作数分解的维度,在该维度方向上以二分法方式确定最大分解粒度之前,可以先确定在该维度方向上分解为原子大小之后的操作数需要的内存容量,与本层计算单元的内存组件的容量之间的大小关系。如果在该维度方向上分解为原子大小之后的操作数需要的内存容量小于本层计算单元的内存组件的容量,则以在该维度方向上以二分法方式拆分操作数;如果在该维度方向上分解为原子大小之后的操作数需要的内存容量大于本层计算单元的内存组件的容量,则按照分解优先级在下一个维度方向上重复以上过程;如果在该维度方向上分解为原子大小之后的操作数需要的内存容量等于本层计算单元的内存组件的容量,则可以直接确定分解的维度。其中,分解粒度可以为1。控制器中的串行分解器401、译码器402和并行分解器404是分开的,内存分配在时间上可以很好地错开。具体来说,并行分解器404总是在译码器402之后分配内存空间,但分配的内存空间释放得更早,译码器402总是在串行分解器401之后分配内存空间,但分配的内存空间同样释放得更早。而用于串行分解器401进行串行分解的内存空间可能会在多个串行子指令中用到,因此,为串行分解器401设置了静态内存段501,而其他部分共用内存组件中除了静态内存外的内存(循环内存段502)。在以上流水线的多个阶段中,除了指令译码id外其他4个阶段均涉及内存的访问,因此,最多有4条指令同时需要访问内存。而数据加载ld和数据写回wb阶段都是第二内存控制器408访问内存段,数据加载ld和数据写回wb的先后顺序由第一内存控制器407控制,访问内存时不会产生冲突,也就是说会有3条指令同时访问循环内存段502,因此,此实施例将循环内存段502划分为多段子内存块,例如可以划分为3段子内存块。在译码器402需要为串行子指令的操作数分配内存空间时,可以按照串行子指令的输入顺序依次在3段子内存块中为串行子指令的操作数分配内存空间,这样的话,可以降低内存管理复杂性、并且可以提高内存空间利用率。在一种可能的实现方式中,控制器设置有第一计数器,循环内存段502包括多段子内存块,控制器在循环内存段502中为所述多个子指令的其他操作数分配内存空间,包括:控制器从循环内存段502中与第一计数器的计数值对应的子内存块内,为所述其他操作数分配内存空间。图6及图7示出根据本公开的另一实施例的内存组件的划分的示意图。图7的内存组件与图5近似,不同处在于图7的内存组件将循环内存段502进一步划分为3段子内存块701、702、703,所述3段子内存块的内存容量大小可以相同,也可以不同,本公开对此不作限定。译码器402从子指令队列403中获取串行子指令后,对于串行子指令中的主体指令,可以按照主体指令以及第一计数器的计数值顺序为其分配循环内存段502的内存空间。举例来说,若获取了一条第一主体指令,第一计数器的计数值为0,那么译码器402将在子内存块701中为第一主体指令的操作数分配内存空间;然后获取了一条第二主体指令,此时第一计数器的计数值为1,那么译码器402将在子内存块702中为第二主体指令的操作数分配内存空间;然后获取了一条第三主体指令,此时第一计数器的计数值为2,那么译码器402将在子内存块703中为第三主体指令的操作数分配内存空间;如果再获取了一条第四主体指令,此时第一计数器的计数值会回到0,那么译码器402将在子内存块701中为第四主体指令的操作数分配内存空间,以此类推。图6中还示出此实施例的多条指令的流水线传播过程的示意图。下面结合上述分配内存空间的示例以及流水线的传播过程对此进行说明。如图6所示,在t1时,在译码器402为第一主体指令在子内存块701中分配内存空间后,发送给并行分解器404,由并行分解器404对第一主体指令进行并行分解得到(多个)并行子指令1。在t2时,译码器402为第二主体指令在子内存块702中分配内存空间,对于第一主体指令,进入到数据加载ld阶段,由第二内存控制器408将第一主体指令的输入操作数加载到子内存块701中,也就是此时由第二内存控制器408使用子内存块701。在t3时,译码器402为第三主体指令在子内存块703中分配内存空间;对于第二主体指令,进入到数据加载ld阶段,由第二内存控制器408将第二主体指令的输入操作数加载到子内存块702中,也就是此时由第二内存控制器408使用子内存块702;对于第一主体指令,则进入到操作执行ex阶段,由分形功能单元405执行并行指令1,并将执行结果写回到子内存块701,也就是此时由分形功能单元405使用子内存块701。在t4时,译码器402为第四主体指令在子内存块701中分配内存空间;对于第三主体指令,进行到数据加载ld阶段,由第二内存控制器408将第三主体指令的输入操作数加载到子内存块703中,也就是此时由第二内存控制器408使用子内存块703;对于第二主体指令,进行到操作执行ex阶段,由分形功能单元405执行并行指令2,并将执行结果写回到子内存块702,也就是此时由分形功能单元405使用子内存块702;对于第一主体指令,本地功能单元406对执行结果进行操作归约,也就是此时由本地功能单元406使用子内存块701。在t5时,对于第一主体指令,进行到数据写回wb阶段,第二内存控制器408将子内存块701中的归约结果写回到上一层计算单元的内存组件上;对于主体指令4,进行到数据加载ld阶段,由第二内存控制器408将主体指令4的输入操作数加载到子内存块701中,也就是此时由第二内存控制器408使用子内存块701;对于第三主体指令,进行到操作执行ex阶段,由分形功能单元405执行并行指令3,并将执行结果写回到子内存块703,也就是此时由分形功能单元405使用子内存块703;对于第二主体指令,本地功能单元406对执行结果进行操作归约,也就是此时由本地功能单元406使用子内存块702。通过以上过程可知,在流水线传播的过程中,第二内存控制器408、分形功能单元405以及本地功能单元406按顺序循环使用3段子内存块。能够降低内存管理的复杂性,并提高内存空间利用率。在一种可能的实现方式中,如果三条相邻(或者相距比较近)的输入指令都存在共用操作数时,由于本公开的计算装置采用流水线的方式处理输入指令,串行分解器401在静态内存段501为共用操作数分配内存空间时,就有可能出现静态内存段501碎片化的问题,造成内存空间利用率低。图8示出根据本公开的另一实施例的静态内存段501的内存空间分配方法的示意图。结合图8对串行分解器401为共用操作数分配静态内存段501的内存空间的过程进行说明。串行分解器401从子指令队列403中获取输入指令1,对输入指令1进行串行分解后得到多个串行子指令1,多个串行子指令1具有共用操作数1,串行分解器401要从静态内存段501中为操作数1分配内存空间,假设此时第二计数器的计数值为0,那么串行分解器401可以从图8所示的a端为操作数1分配内存空间。接着串行分解器401从子指令队列403中获取输入指令2,对输入指令2进行串行分解后得到多个串行子指令2,多个串行子指令2具有共用操作数2,串行分解器401要从静态内存段501中为操作数2分配内存空间,此时第二计数器的计数值为1,那么串行分解器401会从图8所示的b端为操作数2分配内存空间。接着串行分解器401从子指令队列403中获取输入指令3,对输入指令3进行串行分解后得到多个串行子指令3,多个串行子指令3具有共用操作数3,串行分解器401要从静态内存段501中为操作数3分配内存空间,此时第二计数器的计数值回为0,那么串行分解器401会从图8所示的a端为操作数3分配内存空间。如果操作数1不再需要了,则操作数3直接覆盖操作数1;如果操作数1还需要,则操作数3在操作数1旁接续存储。通过本实施例可以在输入操作数与之前的多条串行子指令的输出操作数不存在重叠的情况,采用指令预加载以上内存管理的方式加快处理,以提高计算装置的处理效率,降低内存管理复杂性,并且提高内存空间利用率。在图4的实施例中,控制器还可以包括委托寄存器(commissionregister,cmr)413,在归约控制器409判断对所述分形功能单元405的运算结果进行归约处理所需要的资源大于本地功能单元406的资源上限时,归约控制器409可以根据串行子指令向委托寄存器413写入委托指令,并行分解器404定期检查委托寄存器413中是否存在委托指令,若存在委托指令,则根据委托指令控制分形功能单元405对其运算结果进行归约处理得到输入指令的运算结果。其中的定期检查可以是根据处理的周期检查,处理的周期可以根据分形功能单元405处理完一条串行子指令的时间等确定,本公开对此不作限定。通过设置委托寄存器413可以提高整个计算单元的处理效率。本公开的另一个实施例是一种分形计算装置,包括多层计算单元,其多层结构如图2所示。每层计算单元是以流水线方式运行,如图9所示,所述分形计算装置包括串行分解模块901、指令译码模块902、数据加载模块903、操作执行模块904、操作归约模块905及数据写回模块906。串行分解模块901用于接收上一层的输入指令,将输入指令分解成串行子指令,并作为输入的缓冲。指令译码模块902用于将输入指令译码成本地指令、分形指令及直接存储器存取指令。数据加载模块903用于根据所述直接存储器存取指令,将欲计算的输入数据的子数据自上层存储器加载至本地存储器。操作执行模块904用于根据所述分形指令,执行子数据对应的任务,以产生计算结果。操作归约模块905用于根据本地指令,对所述计算结果进行归约。数据写回模块906将归约后的计算结果写回所述上层存储器。此实施例的每层计算单元为五级的流水线,每级对应一个模块,同时间各模块响应不同输入指令运作。更详细来说,指令译码模块902、数据加载模块903、操作执行模块904、操作归约模块905及数据写回模块906为流水线。图10示出此实施例的流水线的示意图。下面结合图2所示的计算装置以及图9对流水线的操作进一步说明。如图2所示,以第i层计算单元202为例,第i层计算单元202的流水线1001运行如下:接收上一层(第i-1层)计算单元的输入指令,在指令译码id阶段,指令译码模块902对输入指令进行译码,在数据加载ld阶段,数据加载模块903自第i-1层计算单元加载运行输入指令需要的子数据至本地存储器,然后在操作执行ex阶段,操作执行模块904将本地的译码后指令发送给下一层(第i+1层)计算单元203,由下一层(第i+1层)计算单元203根据子数据执行译码后的指令以完成操作。由于中层计算单元的结构相同,故在第i+1层计算单元203中,一样是执行流水线1002。由于第i层计算单元202的内存组件的容量可能小于存储数据所需要的内存容量,因此指令译码模块902还可以对输入指令进行分解,在操作归约rd阶段,操作归约模块905需要对计算结果进行归约,才能得到输入指令的计算结果。在数据写回wb阶段,数据写回模块906将计算结果写回到上一层计算单元中。如前所述,在流水线1001的操作执行ex阶段,操作执行模块904将译码后的指令发送给第i+1层计算单元203,由第i+1层计算单元203根据子数据及分形指令完成操作,第i+1层计算单元203在接收到输入指令(即第i层计算单元202的分形指令)后,在第i+1层计算单元203的串行分解模块901将指令分解为串行子指令后,便启动第i+1层的流水线1002,执行指令译码id、数据加载ld、操作执行ex、操作归约rd以及数据写回wb对应的操作。此实施例的流水线运作与图4的实施例相同,不再赘述。图11示出图9的实施例的每层计算单元的示意图。串行分解模块901用于接收来自上层计算单元的上层分形指令,并将所述上层分形指令分解为多个串行子指令,其包括指令队列1101、串行分解器1102及子指令队列1103及张量置换表1104。指令队列1101接收并暂存上一层计算单元发送来的上层分形指令(即本层的输入指令),作为串行分解器1102与上一层计算单元之间的缓冲,可以省去串行分解器1102与上一层计算单元之间严格的同步执行关系。串行分解器1102自指令队列1101获取上层分形指令,并分解为多个串行子指令,这些串行子指令暂存在子指令队列1103中。如果这些串行子指令间存在输入依赖关系,则串行分解器1102还生成反映依赖关系的中间数据。计算单元包括本地存储器1114。张量置换表1104用于存储输入数据在上层存储器1115及本地存储器1114的地址对照表。如前所述,串行分解器1102会将共用操作数及中间数据存储在本地存储器1114中,在需要读取这些数据时,会根据张量置换表1104以判断这些数据是否存放在本地存储器1114中,如是,串行分解器1102会参照本地地址自本地存储器1114取出数据,而非从上层存储器1115取值,以尽量避免频繁访问上层存储器1115,提高处理效率。指令译码模块902用于根据计算单元的硬件资源,将所述多个串行子指令译码成分形指令,所述硬件资源包括本地存储器1114的容量限制、串行分解器1102分解上层分形指令的能力、分形功能单元1112的算力及的个数等。指令译码模块902包括降层译码器1105、并行分解器1106、归约控制器1107、委托寄存器1108、张量置换表1109。降层译码器1105用于自子指令队列1103依序获取多个串行子指令,产生下层指令及直接存储器存取指令。这些指令对应有操作数,降层译码器1105检查这些操作数的存储要求,生成指向本地存储器1114的直接存储器存取指令。降层译码器1105根据不同指令间的操作数的依赖度来运行流水线。举例来说,降层译码器1105判断这些操作数间的依赖度是否为写后读关系,如是,则表示先要完成特定操作数的计算,然后写回本地存储器1114,再由下一个指令读出接着计算。顺序一旦出现混乱,便会导致计算错误。在这种情况下,降层译码器1105会暂停运行流水线,直到写后读关系结束。并行分解器1106用于将下层指令并行分解分形指令,分形指令则用来控制分形功能单元1112进行分形操作。更详细来说,并行分解器1106根据下层指令的操作数将本地存储器1114的本地地址绑定至分形指令的操作数中,这些操作数是操作执行模块904需要使用的。归约控制器1107用于将下层指令译码成本地指令,本地指令将在操作归约模块905中控制归约程序。当归约控制器1107判断对分形功能单元1112的计算结果进行归约处理所需要的资源大于本地功能单元1113的资源上限时,归约控制器1107向委托寄存器1108写入委托指令,并行分解器1106根据委托指令规划分形功能单元1112进行计算的时程,以配合本地功能单元1113的资源。由于计算所需的数据会从上层存储器1115加载至本地存储器1114,张量置换表1109用于存储这些数据在上层存储器及本地存储器的地址对照表,当降层译码器1105需要取数时,会根据张量置换表1109查找该数据的本地地址,然后至本地存储器1114中取数。在此实施例中,前述的串行分解模块901与指令译码模块902对应至图2的控制器208,换言之,控制器208包括指令队列1101、串行分解器1102、子指令队列1103、张量置换表1104、降层译码器1105、并行分解器1106、归约控制器1107、委托寄存器1108、张量置换表1109。数据加载模块903用于将操作执行模块904所需的数据自上层存储器1115加载至本地存储器1114,具体实现方式是通过直接存储器存取控制器1110和直接存储器存取(dma)1111。直接存储器存取控制器1110是一种外设通过直接存储器存取1111的一种专门接口电路,其向系统提出接管总线1116控制权的总线请求,系统收到该信号后,在当前的总线周期结束后,会按直接存储器存取指令的优先级和直接存储器存取请求,让出总线1116的控制权。在直接存储器存取控制器1110的管理下,数据自上层存储器1115加载至本地存储器1114。在操作执行模块904完成任务并回传计算结果后,直接存储器存取1111再将计算结果存储至本地存储器1114。每次数据传送完毕后,直接存储器存取控制器1110都会交还总线1116的控制权。操作执行模块904用于下发分形指令至下层计算单元,以产生计算结果。与前述实施例相同,操作执行模块904包括多个分形功能单元1112,用于执行下发任务。直接存储器存取1111将存储在本地存储器1114的数据发送给分形功能单元1112,分形功能单元1112接收到来自并行分解器1106的分形指令与来自直接存储器存取1111的相应数据后,开始进行计算任务。事实上,如图2所示,分形功能单元1112是下一层的计算单元,因此操作执行模块904将分形指令及相应数据下发给下一层的计算单元,并等待计算结束回传计算结果,也就是图10中的流水线1002。操作归约模块905包括本地功能单元1113,当分形功能单元1112产出计算结果后,本地功能单元1113根据本地指令,对计算结果进行归约。数据写回模块906用于将归约后的计算结果传回上一层计算单元。在此实施例中,数据写回模块906利用直接存储器存取控制器1110,向系统提出接管总线1116控制权的总线请求,系统响应直接存储器存取请求让出总线1116的控制权,直接存储器存取1111将归约后的计算结果发送至上层存储器1115中,归约后计算结果传送完毕后,直接存储器存取控制器1110交还总线1116的控制权。此实施例的本地存储器1114同样具有如图7所示的结构,包括静态内存段501及循环内存段502。静态内存段501用以存储串行分解器1102所产生的中间数据及共用操作数。所谓的中间数据指的是,串行指令间可能会存在依存关系,例如第二条串行指令需要使用第一条串行指令的中间数据;共用操作数则是子指令间会共用的一部分操作数。串行分解器1102会将有依存关系的数据存储在静态内存段501中,而这些直接数据的本地地址记录在张量置换表1104。这些中间数据及共用操作数是依序从静态内存段501的两端往中间存储,其具体存储方式如图8所示。循环内存段502受到降层译码器1105的管理,用以存储执行串行指令所需的子数据,及子数据在五级的流水线中计算所产生的各级数据。如图7所示,本地存储器1114的循环内存段502分为三子内存块701、702、703,每个子内存块存储执行特定串行指令所需的特定子数据,及所述特定子数据在流水线中所产生的各级数据。降层译码器1105从子指令队列1103中获取串行子指令后,直接存储器存取1111根据本地地址,依次在每个子内存块和上层存储器1115之间进行数据交换。举例来说,降层译码器1105自子指令队列1103获取了第一串行子指令,将相关的数据(如操作数)指定分配至子内存块701。接着又获取了第二串行子指令,降层译码器1105将第二串行子指令的相关数据指定分配至子内存块702中。在指令译码模块902的降层译码器1105将第二串行子指令的相关数据指定分配至子内存块702的同时,数据加载模块903的直接存储器存取1111将第一串行子指令的相关数据自上层存储器1115加载至子内存块701。接着,指令译码模块902的降层译码器1105将第三串行子指令的相关数据指定分配至子内存块703中,同时间数据加载模块903的直接存储器存取1111将第二串行子指令的相关数据自上层存储器1115加载至子内存块702,且操作执行模块904的分形功能模块1112将子内存块701的数据取出往下层递送,并将下层计算单元的计算结果存储至子内存块701。接着,指令译码模块902的降层译码器1105将第四串行子指令的相关数据指定分配至子内存块701中,同时间数据加载模块903的直接存储器存取1111将第三串行子指令的相关数据自上层存储器1115加载至子内存块703,且操作执行模块904的分形功能模块1112将子内存块702的数据取出往下层递送,并将下层计算单元的计算结果存储至子内存块702,且操作归约模块905的本地功能单元1113自子内存块701中取出计算结果进行归约,并将归约后的计算结果存回子内存块701。接着,指令译码模块902的降层译码器1105将第五串行子指令的相关数据指定分配至子内存块702中,同时间数据加载模块903的直接存储器存取1111将第四串行子指令的相关数据自上层存储器1115加载至子内存块701,且操作执行模块904的分形功能模块1112将子内存块703的数据取出往下层递送,并将下层计算单元的计算结果存储至子内存块703,且操作归约模块905的本地功能单元1113自子内存块702中取出计算结果进行归约,并将归约后的计算结果存回子内存块702,且数据写回模块906将子内存块701中的归约后计算结果写回上层存储器1115。此实施例依前述方式进行流水线操作,并采用了多种方式来管理数据一致性。由于此实施例的计算装置会将输入指令分解为较小的非重叠串行子指令,供计算单元执行,因此,数据可能在不同层的计算单元中具有许多副本。此实施例不允许将数据写入原读取地址空间,也就是不允许覆盖原有数据,从而确保数据一致性。此外,张量置换表1104及1109在将数据从上层存储器1115的写入地址空间映射到本地存储器1114的读取地址空间时,同样可能会导致数据不一致的风险。此实施例的张量置换表1104及1109中的每个记录均设置了有效期,张量置换表1104及1109像存储空间一样被划分为多个存储体,每个存储体仅维护其相应存储段的信息。每当数据处理完毕时会回收该存储段,重新分配给新数据,使旧数据被覆盖,从而旧数据再也无法再被使用。通过张量置换表1104及1109中存储段的设置,可以使所有数据在一定的时间内失效,故数据记录的生存期不会超过引用数据的生存期。不仅如此,为了保证数据的一致性,如前所述,此实施例分配给每个分形功能单元1112的指令的本地地址始终是不同的,会在子内存块701、702、703间轮替分配。此实施例的各层功能单元同样具有图3的特征,即各层功能单元无需额外的安排便可运行同一段代码,也就是使用上述的分形指令集。分形指令集的原理是各层执行自己的任务,不干扰下层的工作方式。程序员在编写代码时,只需要控制最顶层的计算单元,各层自动产生控制下层的子指令,因此具有以下优势:1.每个分形指令集的指令都对应一个完整的计算原语,程序员不会也不能生成更细节的操作分解方式,达到指令单纯化的目的。2.与精简指令集计算机(reducedinstructionsetcomputing,risc)不同的是,本公开的分形指令集不向程序员提供明确的加载存储指令,分形指令集对程序员隐藏了内部存储器,程序员无法介入干预内部存储器的使用方式,因此当分形指令集应用于不同的规模的分形计算装置时,程序员无需适应不同的存储器大小而改变控制方式。3.分形指令集中没有出现硬件信息,也就是不需要控制特定硬件,程序员只需要专注定义计算任务,不会产生干扰内部硬件的行为,方便基于不同规模扩展计算装置。对于下层计算单元而言,上层计算单元的降层译码器1105及并行分解器1106像是程序员,对下层计算单元产生控制指令(即分形指令),降低了编程的复杂性。基于这个特性,此实施例可以概括成一种“单任务多继承”(singletaskmultipleheritors,stmh)的框架。此实施例定义两个相邻层次结构如何协作以降低粒度,进而将任务从较高的层次结构继承到较低的层次结构。更具体地说,此实施例将协作机制分离为两个关系:与母节点的关系以及同级节点间的关系。串行分解器1102用以定义母子关系(即上下层关系),并行分解器1106定义同级节点的关系(即分形功能单元间的关系)。无论多复杂的任务,都可以明确定义整个分形计算装置的运行。图12示出单任务多继承的框架。假设第i层计算单元1211的串行分解器接收到一个主任务1201,根据其硬件资源,假设操作数过多无法直接计算,故第i层计算单元1211的并行分解器将其分解为2个一阶子任务1202及1203,并将一阶子任务1202及1203分别发送给2个第i+1层计算单元1212。更详细来说,串行分解模块接收来自上层计算单元的上层分形指令,并将上层分形指令分解为多个串行子指令;指令译码模块根据第i层计算单元的硬件资源,将多个串行子指令译码成分形指令;操作执行模块下发所述本地分形指令至下层计算单元,以产生计算结果。其操作细节在前述实施例已说明过,不再赘述。以一阶子任务1202为例,第i+1计算单元1212的串行分解器接收到一阶子任务1202后,其并行分解器继续将分解为2个二阶子任务1204及1205,并将二阶子任务1204及1205分别发送给2个第i+2计算单元1213。以二阶子任务1204为例,第i+2计算单元1213的串行分解器接收到二阶子任务1204后,其并行分解器继续将分解为5个三阶子任务1208。由于三阶子任务1208的粒度足够小,第i+2计算单元1213的分形功能单元可以计算,故在这层便可将主任务1201分解计算完毕。换言之,以主任务1201的粒度来说,需要一个具有3层计算单元机构的分形计算装置来执行。再看图12的另一个例子,假设上层计算单元1231的串行分解器接收到一个主任务1221,根据其硬件资源,其并行分解器将其分解为5个一阶子任务1222至1226,并将一阶子任务1222至1226分别发送给下层计算单元1232。下层计算单元1232的串行分解器接收到一阶子任务后,其并行分解器继续将分解为4个二阶子任务1227。由于二阶子任务1227的粒度足够小,下层计算单元1232可以计算,主任务1221便下沉至下层计算单元1232来执行。换言之,以主任务1221的粒度来说,需要一个具有2层计算单元机构的分形计算装置来执行。有上述可知,程序员无需判断或规划一个任务需下沉到哪一层执行,只需针对最顶层进行编码控制,此实施例的分形计算装置会自动分形下发执行,对于编码来说十分便利。本公开的另一个实施例是一种流水线的分形计算方法,适用于图4及图11的实施例中,其流程如图13所示。在步骤1301中,接收上一层的输入指令,将输入指令分解成串行子指令,并作为输入的缓冲。首先接收并暂存上一层计算单元发送来的上层分形指令;接着将上层分形指令分解为多个串行子指令;生成反映这些串行指令间的依赖关系的中间数据;产生中间数据及共用操作数在上层存储器及本地存储器的地址对照表;当需要存取中间数据或共用操作数时,判断所述数据是否存放在本地存储器中;如是,则自本地存储器取数。在步骤1302中,将输入指令译码成本地指令、分形指令及直接存储器存取指令。更详细来说,此步骤根据计算单元的硬件资源,将多个串行子指令译码成本地分形指令,所述硬件资源包括本地存储器的容量限制、串行分解器分解上层分形指令的能力、下层计算单元的计算能力及分形功能单元的个数等。此步骤更包括以下步骤:根据多个串行子指令,产生下层指令及直接存储器存取指令,这些指令对应有操作数,首先检查这些操作数的存储要求,以生成指向本地存储器的直接存储器存取指令,再根据不同指令间的操作数的依赖度来运行流水线;将下层指令并行分解成分形指令,更详细来说,包括根据下层指令的操作数将本地存储器的本地地址绑定至分形指令的操作数中;将下层指令译码成本地指令;产生子数据在上层存储器及本地存储器的地址对照表;当需要读取子数据时,根据本地地址至本地存储器中取数。在步骤1303中,根据直接存储器存取指令,将欲计算的输入数据的子数据自上层存储器加载至本地存储器。首先提出接管总线控制权的总线请求;响应直接存储器存取请求让出总线的控制权;将子数据从上层存储器加载至本地存储器;最后交还总线控制权。在步骤1304中,根据所述分形指令,执行子数据对应的任务,以产生计算结果。首先将存储在本地存储器的子数据发送给分形功能单元,以执行下发任务;回传计算结果;将计算结果存储至本地存储器。在步骤1305中,根据本地指令,对所述计算结果进行归约。在步骤1306中,将归约后的计算结果写回上层存储器。首先提出接管总线控制权的总线请求;响应直接存储器存取请求让出总线的控制权;将归约后的计算结果加载至上层存储器中;最后交还总线控制权。本公开的另一个实施例是一种分形计算方法,适用于图4及图11的实施例中,更详细来说,此实施例是具体实现“单任务多继承”的方法。其流程如图14所示。在步骤1401中,响应来自上层计算单元的上层分形指令,将上层分形指令分解为多个串行子指令。串行分解器自指令队列获取上层分形指令,并分解为多个串行子指令,其分解的方式如图8的实施例所示,这些串行子指令暂存在子指令队列中。在步骤1402中,根据本层计算单元的硬件资源,将所述多个串行子指令译码成本地分形指令。指令译码模块用于根据计算单元的硬件资源,将所述多个串行子指令译码成本地分形指令,所述硬件资源包括本地存储器的容量限制、串行分解器分解上层分形指令的能力、分形功能单元的计算能力及分形功能单元的个数等。在步骤1403中,下发所述本地分形指令至下层计算单元,以产生计算结果。操作执行模块包括多个分形功能单元,用于执行下发任务。分形功能单元接收到来自并行分解器的分形指令,与来自直接存储器存取的相应数据后,开始进行计算任务。如前所述,分形功能单元是下一层的计算单元,因此操作执行模块将分形指令及相应数据下发给下一层的计算单元,并等待计算结束回传计算结果。此实施例定义两个相邻层次结构如何协作以降低粒度,进而将任务从较高的层次结构继承到较低的方法。更具体地说,此实施例将协作机制分离为两个关系:与母节点的关系以及同级节点间的关系。步骤1401用以定义母子关系(即上下层关系),步骤1402定义同级节点的关系(即分形功能单元间的关系)。无论多复杂的任务,都可以明确定义“单任务多继承”的运行。尽管前述实施例能够在保持较高性能和能源效率的同时实现较高的编程效率,但如果出现一个操作未被表2的分形指令集所涵盖时,该操作只能通过组合表2的分形指令集原语来模拟,这使得实现上相对低效。从复杂性的角度来看,本公开进一步考虑计算低效性(时间复杂性)和通信低效性(通信复杂性)的影响。计算低效性指的是对于在分形计算装置上有效的分形运算来说,其获得的加速比与运算粒度不相关,其中加速比定义为叶计算单元与整个计算装置在计算时间上的比值。但如果出现前述需要通过组合表2的分形指令集原语来模拟特定操作时,实际的加速比则与粒度相关,这意味着由于分形指令集中的非直接支持,使得时间复杂性可能变差。至于通信低效性,对于在分形计算装置上有效的分形运算来说,其数据流量比与运算粒度无关,其中数据流量比定义为在整个分形计算装置上执行的数据通信的比率。例如,在计算三维卷积(conv3d)时,如果在分形指令集中间接使用二维卷积的分形指令集原语来组合实现时,各层之间的通信可能会变得频繁。尽管时间复杂度保持不变,但这种通信低效所产生的大量数据流量将比直接采用三维卷积的计算原语高出百倍千倍。前述指出的两种低效都是因分形指令集无法直接支持所有操作所引起的,如果这些低效的操作只能通过组合分形指令来实现时,将会严重限制分形计算装置的速度。为了解决低效性问题,本公开再提出一种针对分形计算装置的可重配置分形指令集(fractalreconfigurableinstructionsetarchitecture,frisa),它重新定义分形指令,将表2的分形指令在可重配置分形指令集中重新融合在一起,产生更为低阶直观的本地指令,为分形指令提供了更有效的支持,所述可重配置分形指令集的本地指令如表3所示。表3:本地指令集本公开的另一个实施例是一种分形计算装置,包括多个具有相同结构的中层计算单元,每层计算单元的结构如图15。与图11的实施例相较,其中指令队列1501等同于指令队列1101,子指令队列1509等同于子指令队列1103,降层译码器1510等同于降层译码器1105,直接存储器存取控制器1511等同于存储器存取控制器1110,直接存储器存取1512等同于直接存储器存取1111,分形功能单元1513等同于分形功能单元1112,本地功能单元1514等同于本地功能单元1113,本地存储器1515等同于本地存储器1114,上层存储器1516等同于上层存储器1115,总线1517等同于总线1116。所述中层计算单元包括控制器,用以分解上一层计算单元发送来的指令成多个分形指令,每个分形指令执行所述特定操作。更详细来说,此实施例的控制器包括指令队列1501、译码器1502、子指令队列1509、降层译码器1510。指令队列1501接收并暂存上一层计算单元发送来的指令(分形指令)。译码器1502包括:串行分解栈1503、并行分解栈1504、译码控制器1505、复用器1506、解复用器1507及只读存储器(rom)1508。串行分解栈1503及并行分解栈1504是一种堆栈,属于运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。当指令进入栈时,它将指令放到栈顶,使之成为新的栈顶元素;当指令被取出时,该元素会从栈删除,又称作出栈或退栈,即把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。串行分解栈1503自指令队列1501获取并暂存上层分形指令,译码控制器1505可以执行类似串行分解器1102的功能,基于只读存储器1508内的指令,将上层分形指令分解为多个串行子指令,如果这些串行子指令间存在输入依赖关系,则译码控制器1505还生成反映依赖关系的中间数据。并行分解栈1504用于暂存下层指令,译码控制器1505同样可以执行类似于并行分解器1106及归约控制器1107的功能,将下层指令并行分解分形指令及本地指令,分形指令则用来控制分形功能单元1513进行分形操作,本地指令则用来控制本地功能单元1514进行归约操作。更详细来说,译码控制器1505根据下层指令的操作数将本地存储器1515的本地地址绑定至分形指令的操作数中。更详细来说,译码控制器1505电性连接至串行分解栈1503及并行分解栈1504。当译码控制器1505与并行分解栈1504电性相通时,译码控制器1505自并行分解栈1504取出下层指令分解成分形指令及本地指令;当译码控制器1505与串行分解栈1503电性相通时,译码控制器1505自串行分解栈1503取出指令分解成的串行子指令,并将这些串行子指令暂存在子指令队列1509中。以上皆基于只读存储器1508的指令操作。译码器1502还包括复用器1506及解复用器1507。复用器1506连接至并行分解栈1504及串行分解栈1503,用以选择上层的分形指令或下层指令输入至译码控制器1505。由于并行分解栈1504的输出是供计算单元在操作执行阶段及操作归约阶段所使用,如不优先处理,则容易导致指令壅塞,因此并行分解栈1504电性连接至译码控制器1505的优先级高于串行分解栈1503电性连接至译码控制器1505的优先级。换言之,当并行分解栈1504中暂存有指令时,复用器1506优先让并行分解栈1504的指令通过,输入至译码控制器1505进行处理;当并行分解栈1504中没有指令时,复用器1506才让串行分解栈1503的指令通过,输入至译码控制器1505进行处理。解复用器1507连接至译码控制器1505,用以决定译码控制器1505的输出发送给子指令队列1509、分形功能单元1513或本地功能单元1514。当译码控制器1505与串行分解栈1503电性相通时,解复用器1507使得子指令队列1509与译码控制器1505电性相通,因此译码控制器1505可以发送串行子指令至子指令队列1509暂存。降层译码器1510自子指令队列1509依序获取多个串行子指令,产生下层指令及直接存储器存取指令。这些指令对应有操作数,降层译码器1510检查这些操作数的存储要求,生成指向本地存储器1515的直接存储器存取指令。降层译码器1510根据不同指令间的操作数的依赖度来运行流水线。举例来说,降层译码器1510判断这些操作数间的依赖度是否为写后读关系,如是,则表示先要完成特定操作数的计算,然后写回本地存储器1515,再由下一个指令读出接着计算。顺序一旦出现混乱,便会导致计算错误。在这种情况下,降层译码器1510会暂停运行流水线,直到写后读关系结束。降层译码器1510的下层指令会传送至并行分解栈1504,供译码控制器1505分解出分形指令及本地指令。并行分解栈1504接收到下层指令后,复用器1506让下层指令通过,输入至译码控制器1505进行处理,译码控制器1505根据只读存储器1508中的指令,执行类似并行分解器1106及归约控制器1107的功能,将下层指令并行分解成分形指令及本地指令,此时解复用器1507使得译码控制器1505电性连接至多个分形功能单元1513,将分形指令发送给分形功能单元1513,接着解复用器1507再使得译码控制器1505电性连接至本地功能单元1514,将本地指令发送给本地功能单元1514。此实施例随着将计算所需的数据自上层存储器1516加载至本地存储器1515,具体实现方式是通过直接存储器存取控制器1511和直接存储器存取1512。直接存储器存取控制器1511向系统提出接管总线1517控制权的总线请求,系统收到该信号后,在当前的总线周期结束后,会按直接存储器存取指令的优先级和直接存储器存取请求,让出总线1517的控制权。在直接存储器存取控制器1511的管理下,数据自上层存储器1516加载至本地存储器1515。分形功能单元1513完成任务并回传计算结果后,直接存储器存取1512再将计算结果存储至本地存储器1515。每次数据传送完毕后,直接存储器存取控制器1511都会交还总线1517的控制权。同前述多个实施中提到的,分形功能单元1513用于执行下发任务。直接存储器存取1512将存储在本地存储器1515中,对应分形指令的数据发送给分形功能单元1513,分形功能单元1513接收到来自译码控制器1505的分形指令与来自直接存储器存取1512的相应数据后,开始进行计算任务,也就是将分形指令及相应数据下发给下一层的计算单元,并等待下一层的计算单元计算结束回传计算结果。当分形功能单元1513产出计算结果后,本地功能单元1514根据译码控制器1505发送过来的本地指令,对计算结果进行归约。最后,直接存储器存取控制器1511向系统提出接管总线1517控制权的总线请求,系统响应直接存储器存取请求让出总线1517的控制权,直接存储器存取1512将归约后的计算结果发送至上层存储器1516中,归约后计算结果传送完毕后,直接存储器存取控制器1511交还总线1517的控制权。此实施例的本地存储器1515同样具有如图5所示的结构,包括静态内存段501及循环内存段502。静态内存段501用以存储译码控制器1505所产生的中间数据及共用操作数。所谓的中间数据指的是,译码控制器1505在执行串行分解的任务中,串行指令间可能会存在依存关系,例如第二条串行指令需要使用第一条串行指令的中间数据;共用操作数则是子指令间会共用的一部分操作数。译码控制器1505会将有依存关系的数据存储在静态内存段501中,这些中间数据及共用操作数是依序从静态内存段501的两端往中间存储,其具体存储方式如图8所示。循环内存段502受到降层译码器1510的管理,用以存储执行串行指令所需的子数据,及子数据在流水线中计算所产生的各级数据。如图7所示,本地存储器1515的循环内存段502分为三子内存块701、702、703,每个子内存块存储执行特定串行指令所需的特定子数据,及所述特定子数据在流水线中所产生的各级数据。降层译码器1510从子指令队列1509中获取串行子指令后,直接存储器存取1512根据本地地址,依次在每个子内存块和上层存储器1516之间进行数据交换。具体操作方式已在前述实施例中说明,不再赘述。同样地,此实施例的分形计算装置包括叶计算单元,其包括控制器和功能单元,控制器用以分解上层的分形指令为本地指令,所述本地指令即为表3所列的各指令,功能单元用以执行本地指令。其具体操作方式可参照图2的实施例。只读存储器1508存储了一种用于控制译码控制器1505的编程模型。通过所述编程模型,译码控制器1505在进行分解时,会根据预先定义的几种分形选项产生分形指令,而编程模型会根据硬件特性选择分形选项。与前述实施例不同处在于,此实施例在层层分解的过程中,仍维持原操作,以避免计算原语转换的过程中产生计算低效性和通信低效性。图16示出前述实施例与此实施例在进行分形时的示意图,其中分形1601展示前述实施例分形的方式,当根计算单元接收到一个任务(例如三维卷积)时,由于分形指令集并无三维卷积,因此在中层计算单元进行分形时,降层译码器将三维卷积转换成一连串的分形指令集原语的等效操作,换言之,自第2层起,计算单元已无法判断这一连串操作的最终等效任务为何,以至于各层都在执行复杂的操作。分形1602则展示此实施例分形的方式,各中层计算单元在进行分形时,编程模型仍是以三维卷积为操作单位进行分割,例如根计算单元接收到的任务为涉及100×100矩阵的三维卷积,假设只有2个分形功能单元,则编程模型控制译码控制器1505将任务分割成2个50×100矩阵的三维卷积,以此类推,因此中层计算单元不会发生计算低效性和通信低效性。任务分形直到叶计算单元,才会将三维卷积转换为本地指令进行计算。图16中的4层计算单元仅为示例,本公开不限制计算单元的数量。更进一步来说,编程模型利用中枢值来决定分解后的子指令的粒度,而编程模型会根据硬件特性找到合适的中枢值。编程模型提供了多种命令式的条件,译码控制器1505基于这些命令式的条件,选择中枢值递归地分解操作。需要分解的数据可能是输入数据或权重数据,其为n维度,译码控制器1505可以提供至少n种分解方式,从中挑选合适的分解方式进行分解,也就是选择根据第i维度进行分解。编程模型在每个维度都设定至少一个中枢值。以100×50×75矩阵的三维卷积为例,此输入矩阵具有3个维度lwh,分别为l[1:100]、w[1:50]及h[1:75],编程模型分别对维度lwh均设有中枢值,译码控制器1505根据中枢值对所述数据进行分解。中枢值是介于所属维度的最小值与最大值间。以维度l来说,最小值为1,最大值为100,维度l的中枢值便介于1至100间;以维度w来说,最小值为1,最大值为50,维度w的中枢值便介于1至50间;以维度h来说,最小值为1,最大值为75,维度h的中枢值便介于1至75间。编程模型仅限制中枢值的范围,具体数值则由译码控制器1505所决定,决定的方式有多种,例如取最小值与最大值的中位数值、根据分形功能单元的算力而定或是随机生成。每次译码控制器1505决定中枢值后,便基于中枢值将数据切分为二。举例来说,译码控制器1505先设定维度l的中枢值为取中位数值,故维度l的中枢值为vpl=50,以中枢值为基准,将输入矩阵分割为两个50×50×75矩阵,其中第一个的矩阵为l[1:50]、w[1:50]及h[1:75],第二个的矩阵为l[51:100]、w[1:50]及h[1:75],依然是三维卷积计算。然而,分形功能单元1513无法一次性的处理这尺寸的矩阵,因此译码控制器1505继续进行分解,这次基于维度w进行分解,译码控制器1505根据分形功能单元1513的算力,设定维度w的中枢值vpw=30,将上述两个矩阵进一步分割成四个矩阵,分别为l[1:50]、w[1:30]及h[1:75]、l[1:50]、w[31:50]及h[1:75]、l[51:100]、w[1:30]及h[1:75]及l[51:100]、w[31:50]及h[1:75],依然是三维卷积计算。分形功能单元1513足以计算这样尺寸的矩阵,因此便不再分解,该层计算单元便将前述四个矩阵的三维卷积计算下发给下一层计算单元。中层计算单元仅进行数据的分解,并不对特定操作进行拆解。以前述例子来说,在中层计算单元中,操作指令一直维持是三维卷积。这样的指令和数据一路下发至叶计算单元,叶计算单元的本地存储器存储有表3的分形可重配指令集,可以将上层的分形指令拆解为有序集合,而有序集合由分形可重配指令集里的本地指令依序排列而成。叶计算单元的分形功能单元对分形数据执行相对应分形指令的有序集合内的本地指令,以产生并返回中间数据至上一层计算单元,上一层计算单元的本地功能单元将中间数据归约后再往上发送,最后在根计算单元组合成计算结果。在此实施例中,中层计算单元的分形指令如表2所示,而叶计算单元的分形可重配指令集里的本地指令如表3所示。由于此实施例的计算单元会将输入指令分解为较小的非重叠串行子指令,供分形功能单元执行,因此,数据可能在不同层的计算单元中具有许多副本。此实施例不允许将数据写入原读取地址空间,也就是不允许覆盖原有数据,从而确保数据一致性。通过这种方式,此实施例具有三个关键优势:1.硬件配置独立。由于分解很大程度上是由译码控制器1505根据只读存储器1508的配置信息决定的,因此如图3所示,程序员311只需要对根计算单元下达指令,不同规模的分形计算装置会自行依指令与硬件资源进行合适的分解。2.指令粒度的独立性。由于程序员311只需要对根计算单元下达指令,因此程序员311无需知悉中层计算单元或叶计算单元的细部结构,因此本公开提供了与指令粒度无关的编程便捷性。3.串行分解或平行分解的独立性。由于译码器1502被配置为执行串行分解或平行分解的功能,两种类型的分解均以双线程模式自动运行。因此,程序员311无需理会正在运行哪个分解过程。本公开的另一个实施例是一种根据指令对输入数据执行神经网络计算的方法,应用在图15的实施例中,其流程如图17所示。在步骤1701中,将指令分为多个分形指令。当译码控制器1505与并行分解栈1504电性相通时,译码控制器1505自并行分解栈1504取出下层指令分解成分形指令。更详细来说,当并行分解栈1504中暂存有指令时,复用器1506让并行分解栈1504的指令通过,输入至译码控制器1505,译码控制器1505执行并行分解操作,生成分形指令。在步骤1702中,将输入数据拆分为多个分形数据,每个分形数据对应一个分形指令。译码控制器1505基于分形指令,将欲计算的数据拆分为多个分形数据,一一对应至分形指令。在前述的例子中,译码控制器1505将l[1:100]、w[1:50]及h[1:75]的矩阵数据拆分为l[1:50]、w[1:30]及h[1:75]、l[1:50]、w[31:50]及h[1:75]、l[51:100]、w[1:30]及h[1:75]及l[51:100]、w[31:50]及h[1:75]等四个分形数据,每份分形数据相应有一个分形指令。在步骤1703中,提供分形可重配指令集的多个本地指令,所述本地指令即为表3所述的指令,存储在叶计算单元的本地存储器1515中。在步骤1704中,拆解每个分形指令为有序集合,所述有序集合由所述多个本地指令至少其中之一依序排列而成。随着中层计算单元一路分解下发,直到叶计算单元。叶计算单元的本地存储器1515存储有分形可重配指令集,叶计算单元的译码器1502可以将上层的分形指令拆解为有序集合,而有序集合由分形可重配指令集里的本地指令依序排列而成。在步骤1705中,对分形数据执行相对应分形指令的有序集合内的本地指令以产生中间数据。叶计算单元的分形功能单元对分形数据执行在步骤1704中依序排列的一连串本地指令,以产生并返回中间数据至上一层计算单元。在步骤1706中,归约中间数据以完成所述神经网络计算。上一层计算单元接收到中间数据后,其本地功能单元将中间数据归约后再往上发送,直到最后在根计算单元组合成计算结果,以完成神经网络计算。图18示出本公开的另一实施例,是一种集成电路装置1800的结构图。如图18所示,集成电路装置1800包括计算装置1802,该计算装置1802是前述多个实施例中具有多层计算单元的分形计算装置。另外,集成电路装置1800还包括通用互联接口1804和其他处理装置1806。其他处理装置1806可以是中央控制器、图形控制器、人工智能控制器等通用和/或专用控制器中的一种或多种类型的控制器,其数目不做限制而是依实际需要来确定。其他处理装置1806作为计算装置1802与外部数据和控制的接口,执行包括但不限于数据搬运,完成对计算装置1802的开启、停止等的基本控制。其他处理装置1806也可以和计算装置1802协作共同完成运算任务。通用互联接口1804可以用于在计算装置1802与其他处理装置1806间传输数据和控制指令。例如,计算装置1802可以经由通用互联接口1804从其他处理装置1806中获取所需的输入数据,写入计算装置1802片上的存储单元。进一步,计算装置1802可以经由通用互联接口1804从其他处理装置1806中获取控制指令,写入计算装置1802片上的控制缓存。替代地或可选地,通用互联接口1804也可以读取计算装置1802的存储模块中的数据并传输给其他处理装置1806。集成电路装置1800还包括存储装置1808,其可以分别与计算装置1802和其他处理装置1806连接。存储装置1808用于保存计算装置1802和其他处理装置1806的数据,尤其适用于所需要运算的数据在计算装置1802或其他处理装置1806的内部存储中无法全部保存的数据。根据应用场景的不同,集成电路装置1800可以作为手机、机器人、无人机、视频采集等设备的片上系统(soc),从而有效地降低控制部分的核心面积,提高处理速度并降低整体的功耗。在此情况时,集成电路装置1800的通用互联接口1804与设备的某些部件相连接。此处的某些部件可以例如是摄像头,显示器,鼠标,键盘,网卡或wifi接口。本公开还揭露一种芯片或集成电路芯片,其包括了集成电路装置1800。本公开还揭露一种芯片封装结构,其包括了上述芯片。本公开另一个实施例是一种板卡,其包括了上述芯片封装结构。参阅图19,板卡1900除了包括多个上述芯片1902以外,还可以包括其他的配套部件,该配套部件包括存储器件1904、接口装置1906和控制器件1908。存储器件1904与芯片封装结构内的芯片1902通过总线1914连接,用于存储数据。存储器件1904可以包括多组存储单元1910。接口装置1906与所述芯片封装结构内的芯片1902电连接。所述接口装置1906用于实现芯片1902与外部设备1912之间的数据传输。在此实施例中,接口装置1906为标准pcie接口,待处理的数据由服务器通过标准pcie接口传递至芯片1902,实现数据转移。芯片1902的计算结果亦由接口装置1906传送回外部设备1912。控制器件1908与芯片1902电连接,以便对芯片1902的状态进行监控。具体地,芯片1902与控制器件1908可以通过spi接口电连接。控制器件1908可以包括单片机(microcontrollerunit,mcu)。本公开的另一个实施例是一种电子设备或装置,其包括了上述板卡1900。根据不同的应用场景,电子设备或装置可以包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本公开所揭露的技术有以下优势:机器学习计算原语可以视为是分形运算,将其迭代分解为几个较小的自相似运算;本公开所提出的架构是一系列具有分形冯.诺伊曼架构和相同指令集的同构、串行、多层、层相似的分形计算装置,由于各层具有相同的结构,可以实现简单编程和高效率。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。进一步需要说明的是,虽然图中的各个模块按照箭头的指示依次显示,但是这些并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,执行顺序并没有严格的顺序限制。方法中的步骤同样没有严格的顺序限制。应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,控制器可以是任何适当的硬件控制器,比如cpu、gpu、fpga、dsp和asic等等。若无特别说明,所述内存组件可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器rram(resistiverandomaccessmemory)、动态随机存取存储器dram(dynamicrandomaccessmemory)、静态随机存取存储器sram(staticrandom-accessmemory)、增强动态随机存取存储器edram(enhanceddynamicrandomaccessmemory)、高带宽内存hbm(high-bandw指令译码idthmemory)、混合存储立方hmc(hybr指令译码idmemorycube)等等。所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算装置可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算装置软件产品存储在一个存储器中,包括若干指令用以使得一台计算装置设备(可为个人计算装置、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1