CN111860797B - 运算装置 - Google Patents
运算装置 Download PDFInfo
- Publication number
- CN111860797B CN111860797B CN201910544723.0A CN201910544723A CN111860797B CN 111860797 B CN111860797 B CN 111860797B CN 201910544723 A CN201910544723 A CN 201910544723A CN 111860797 B CN111860797 B CN 111860797B
- Authority
- CN
- China
- Prior art keywords
- instruction
- memory
- serial
- sub
- operand
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Advance Control (AREA)
Abstract
本公开涉及一种运算装置。所述运算装置可以包括处理器、内存控制器、存储单元以及多个运算节点,其中,处理器用于接收输入指令,内存控制器用于加载操作数到存储单元,运算节点用于根据输入指令以及操作数执行输入指令以实现输入指令对应的操作数。根据本公开的运算装置可以提高运算效率。
Description
技术领域
本公开涉及信息处理技术领域,尤其涉及一种运算装置。
背景技术
在人工智能技术领域,神经网络算法是最近非常流行的一种机器学习算法,在各种领域中都取得了非常好的效果,比如图像识别,语音识别,自然语言处理等。随着神经网络算法的发展,算法的复杂度也越来越高,为了提高识别度,模型的规模也在逐渐增大。用GPU和CPU处理起这些大规模的模型,要花费大量的计算时间,并且耗电量很大。
发明内容
有鉴于此,本公开提出了一种运算装置,通过多层迭代的方式构建运算装置的层级架构,该运算装置的每个运算节点的结构是相同的,不同层的运算节点、不同规模的计算机上都具有相同的编程接口和指令集架构,能够执行相同格式的程序,简化用户编程的复杂性,且运算装置的扩展或者程序在不同运算装置之间的移植都非常容易。
根据本公开的一方面,提供了一种运算装置,包括:至少两层运算节点,每一个运算节点包括内存组件、处理器以及下一层运算节点;
对于任意一个运算节点,所述任意一个运算节点中的处理器用于对所述任意一个运算节点的输入指令进行分解,获得并行子指令,并将并行子指令发送给所述任意一个运算节点的下一层运算节点;
所述任意一个运算节点还用于从上一层运算节点的内存组件中加载执行所述并行子指令需要的操作数到所述任意一个运算节点的内存组件,以使所述任意一个运算节点的下一层运算节点根据所述操作数并行执行所述并行子指令。
通过多层迭代的方式构建运算装置的层级架构,该运算装置的每个运算节点的结构是相同的,不同层的运算节点、不同规模的计算机上都具有相同的编程接口和指令集架构,能够执行相同格式的程序,层与层之间隐式装载数据,用户无需管理内存空间,简化用户编程的复杂性,且运算装置的扩展或者程序在不同运算装置之间的移植都非常容易。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出2012年-2018年期间机器学习计算机的能效增长的曲线图。
图2示出了传统的机器学习计算机的组织形式的一个示例。
图3示出根据本公开一实施例的运算装置的框图。
图4a和图4b分别示出根据本公开一实施例的运算节点的框图。
图5示出根据本公开一实施方式的串行分解的过程的流程图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
为了便于更好的理解本申请所描述的技术方案,下面先解释本申请实施例所涉及的技术术语:
计算原语:机器学习为计算及访存密集型技术,在不同层次上是高度并行的,本公开将机器学习分解为基于矩阵和向量的运算,例如,将向量乘法矩阵和矩阵乘法向量等操作聚合为矩阵相乘,将矩阵加/减矩阵、矩阵乘法标量和向量基本算数运算等操作聚合为逐元素运算,等等。通过将机器学习进行分解、聚合可以得到七个主要的计算原语,包括:内积(IP,inner production),卷积(CONV),池化(POOL),矩阵相乘(MMM,matrix multiplyingmatrix),逐元素运算(ELTW,element-wise operation),排序(SORT)和计数(COUNT)。以上计算原语概括了机器学习的主要特征,并且这些计算原语都是可以分解的运算。
可以分解的运算:如果一个运算g(·)满足以下公式(1)
f(X)=g(f(XA),f(XB),...) (1)
则带有操作数X的f(·)运算称为可以分解的运算,其中,f(·)是目标算子,g(·)是检索算子,X表示f(·)所有的操作数,XA、XB,...表示操作数X的子集,其中,X可以为张量数据。
举例来说,如果f(X)=X×k,其中,k为标量,那么f(X)可以分解为:
f(X)=[XA,XB,...]×k=g(f(XA),f(XB),…),
其中,运算g(·)就是根据分解X的方式,将f(XA)、f(XB)…的运算结果合并成矩阵或向量的形式。
运算的分类:对于上文所述的可以分解的运算,基于分解后的操作数XA、XB…和X之间的关系,可以将运算分为三类:独立运算、输入依赖运算和输出依赖运算。
独立运算:可以是指,分解后的操作数XA、XB...彼此独立且不重合,每个子集XA、XB...可以做局部运算,且只需要组合每个子集做局部运算的结果即可得到最终的运算结果。以向量加法运算作为示例来解释说明独立运算,首先可以将X分成两个操作数(即两个输入向量x,y)用于加法运算,由于x,y可以分为两个子集(xA,xB)和(yA,yB),所以两个子集可以独立完成局部向量加法运算,即zA=xA+yA和zB=xB+yB,最终的运算结果只需要组合每个局部运算的结果即可,即z=[zA,zB]。
输入依赖运算:可以是指,分解后的操作数XA、XB...有重合,分解后的局部运算的操作数之间有重合,即有输入冗余。以一维卷积为示例来解释说明输入依赖运算,使用x、y表示两个操作数,并且x=[xA,xB],z=[zA,zB]=x*y=[xA,xB]*y,运算仍分成两部分,然而这两部分局部运算的操作数有重叠,还额外需要部分xA和部分xB(分别为xa,xb),即zA=[xA,xb]*y、zB=[xa,xB]*y,每一部分的局部运算可以独立进行,而最终的运算结果只需要组合每个局部运算的结果即可,即z=[zA,zB]。
输出依赖运算:可以是指,最终的运算结果需要对分解后每个局部运算的结果进行归约处理后得到。以内积运算为示例来解释说明输出依赖运算,内积运算(z=x·y)可以分成两部分局部运算,其中,每个部分的局部运算仍然执行内积运算zA=xA·yA和zB=xB·yB,但要获得最终的运算结果,则需要对每个局部运算的结果进行求和,即z=zA+zB。因此,g(·)为求和操作,g(·)=sum(·)。需要注意的是,有些运算在分解后既可以是输入依赖,也可以是输出依赖,具体的依赖性与分解方式有关。
在一种可能的实现方式中,可以将上述计算原语划分为三类,但是,需要注意的是,不同的分解方式会导致依赖性的不同,具体可以参见如下表1所示。
表1计算原语分析
计算原语 | 分解方式 | 依赖性 | g(·) | 数据冗余 |
IP | 长度 | 输出依赖 | 相加 | |
CONV | 特征 | 输出依赖 | 相加 | |
CONV | N维度(批量) | 输入依赖 | 权值 | |
CONV | H或者W维度(空间) | 输入依赖 | 权值,重合 | |
POOL | 特征 | 独立 | ||
POOL | H或者W维度(空间) | 输入依赖 | 重合 | |
MMM | 左侧,垂直 | 输出依赖 | 相加 | |
MMM | 右侧,垂直 | 输入依赖 | 左矩阵 | |
ELTW | 任意 | 独立 | ||
SORT | 任意 | 输出依赖 | 合并 | |
COUNT | 任意 | 输出依赖 | 相加 |
其中,IP的分解方式中的长度可以是指对向量的长度方向进行分解。卷积操作的操作数可以为采用NHWC(batch,height,width,channels)表示的张量数据,在特征方向分解可以是指在C维度方向进行分解,POOL操作对操作数在特征方向分解也是同样的含义,卷积操作在N维度方向分解存在输入依赖,输入冗余为权值,也就是卷积核,在空间上进行分解也存在输入依赖,输入冗余除了权值还包括分解后的两个张量数据的重合。MMM的分解方式中的左侧、右侧是指对MMM的左侧操作数或者右侧操作数进行分解,垂直可以是指在矩阵的垂直方向进行分解。ELTW操作对操作数的任意分解方式都是独立的,SORT和COUNT操作对操作数的任意分解方式都存在输出依赖。
根据上述分析可知,机器学习的计算原语都是可以分解的运算,采用本公开的运算装置进行机器学习技术的运算时,可以根据实际的需求对计算原语进行分解后运算。
机器学习广泛应用于图像识别、语音识别、面部认知、视频分析、广告推荐和游戏等领域。近年来,许多不同规模的专用机器学习计算机已经部署在了嵌入式设备、服务器和数据中心中。目前,大多数机器学习计算机的架构仍然关注优化性能和能效,如图1所示为2012年-2018年期间,机器学习加速器使得机器学习计算机的能效以惊人的速度增长。
图2示出了传统的机器学习计算机的组织形式的一个示例。传统的机器学习计算机往往有许多异构并行组件以分层方式组织,例如图2中所示的CPU(Central ProcessingUnit,中央处理器)和GPU(Graphics Processing Unit,图形处理器)的异构组织形式,包含2个CPU和8个GPU,GPU作为运算单元。各层具体结构是不同的,存储方式和控制方式都有区别,导致每一层可能有不同的编程接口,编程复杂,代码量很大。对于图2所示的示例,编程多个GPU需要基于MPI(Message Passing Interface,消息通信接口)或NCCL(NvidiaCollective multi-GPU Communication Library)的手动工作,编程单个GPU芯片需要使用CUDA(Compute Unified Device Architecture,统一计算设备架构)语言来操纵数千个GPU线程;为CPU编程需要通过C/C++和并行API(Application Programming Interface,应用程序编程接口)编写包含数十条CPU线程的并行程序。
另外,单个GPU内的软件堆栈也很复杂,其中,软件堆栈包括CUDA PTX(ParallelThread Execution)和微代码,CUDA PTX用于编程GPU中的网格/块/线程,微代码用于编程流处理器。
由于以上编程复杂以及软件堆栈开发难的问题,导致现有的机器学习计算机在扩展和程序移植上存在很大的困难。
为了解决上述技术问题,本公开提供了一种运算装置,该运算装置在每一层上提供给用户的编程接口和指令集架构是相同的:不同层的运算节点、不同规模的计算机上都具有相同的编程接口和指令集架构,能够执行相同格式的程序,操作数存储于最上层,其它层隐式装载数据,用户无需管理内存空间,简化用户编程的复杂性,且运算装置的扩展或者程序在不同运算装置之间的移植都非常容易。
本公开一实施方式的运算装置可以包括:多层(至少两层)运算节点,每一个运算节点包括内存组件、处理器以及下一层运算节点。
图3示出根据本公开一实施例的运算装置的框图。如图3所示,运算装置的第一层可以为一个运算节点,该运算节点可以包括处理器、内存组件以及下一层(第二层)运算节点,第二层运算节点可以有多个,具体的数量本公开不作限定。如图3所示,第二层每个运算节点内也可以包括:处理器、内存组件以及下一层(第三层)运算节点。同样的,第i层每个运算节点内可以包括:处理器、内存组件以及第i+1层运算节点,其中,i为自然数。
其中,处理器可以以硬件的形式实现,例如可以是数字电路,模拟电路等等;硬件结构的物理实现包括但不局限于晶体管,忆阻器等等,处理器也可以通过软件的方式实现,本公开对此不作限定。内存组件可以为随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)等,本公开内存组件的具体形式不作限定。
需要说明的是,尽管附图3中只画出了第一层运算节点中包括的第二层运算节点中的一个运算节点的展开结构(图3示出的第二层),可以理解的是图3仅仅是示意图,其他第二层运算节点的展开结构中同样包括处理器、内存组件以及第三层运算节点,图3为了简化没有示出其他第二层运算节点的展开结构,第i层运算节点同样也是如此。其中,不同的第i层运算节点中包括的第i+1层运算节点的个数可能相同,也可能不同,本公开对此不作限定。
采用本公开的运算装置,在对机器学习指令进行处理时,对于任意一个运算节点,所述任意一个运算节点中的处理器可以用于对所述任意一个运算节点的输入指令进行分解得到并行子指令,并将并行子指令发送给所述任意一个运算节点的下一层运算节点;所述任意一个运算节点从上一层运算节点的内存组件中加载执行所述并行子指令需要的操作数到所述任意一个运算节点的内存组件,以使所述任意一个运算节点的下一层运算节点根据所述操作数并行执行所述并行子指令。
其中,分解得到的并行子指令是可以并行执行的,每个运算节点可以包括一个或多个下一层运算节点,如果包括多个下一层运算节点,多个下一层运算节点可以独立运行,在一种可能的实现方式中,处理器可以根据下一层运算节点的数量对输入指令进行分解得到并行子指令。
对于可以分解的运算,在采用本公开的运算装置执行运算对应的输入指令时,可以由处理器将运算对应的输入指令和操作数分解后,将分解后的并行子指令以及分解后的操作数分别发送给下一层的运算节点,由下一层的运算节点并行执行。
通过多层迭代的方式构建运算装置的层级架构,该运算装置的每个运算节点的结构是相同的,不同层的运算节点、不同规模的计算机上都具有相同的编程接口和指令集架构,能够执行相同格式的程序,层与层之间隐式装载数据,用户无需管理内存空间,简化用户编程的复杂性,且运算装置的扩展或者程序在不同运算装置之间的移植都非常容易。
在一种可能的实现方式中,处理器对输入指令进行分解可以包括三个阶段:串行分解阶段、(降级)译码阶段和并行分解阶段,因此,处理器可以包括串行分解器、译码器以及并行分解器。
其中,所述串行分解器用于根据所述任意一个运算节点的内存组件的容量、以及所述输入指令需要的内存容量,对所述输入指令进行串行分解得到串行子指令。串行分解可以是指将输入指令分解成多个可以按顺序串行执行的指令。
在一种可能的实现方式中,若所述输入指令需要的内存大于所述任意一个运算节点的内存组件的容量,则所述串行分解器根据所述输入指令需要的内存和所述任意一个运算节点的内存组件的容量,对所述输入指令进行串行分解得到串行子指令;若所述输入指令需要的内存小于或等于所述任意一个运算节点的内存组件的容量,则将所述输入指令发送给译码器,由译码器直接对输入指令进行译码处理后发送给并行分解器。
对于分解后的串行子指令,所述译码器用于对串行子指令进行译码处理后发送给所述并行分解器。所述任意一个运算节点可以从上一层运算节点的内存组件中加载执行所述串行子指令需要的操作数到所述任意一个运算节点的内存组件。在一种可能的实现方式中,所述任意一个运算节点还包括:内存控制器,所述内存控制器连接所述译码器。所述译码器可以根据串行子指令向所述内存控制器发送控制信号,所述内存控制器可以根据所述控制信号从上一层运算节点的内存组件中加载执行所述串行子指令需要的操作数到所述任意一个运算节点的内存组件。内存控制器可以通过硬件电路或者软件程序的方式实现,本公开对此不作限定。
所述并行分解器用于根据所述下一层运算节点的数量,对译码后的串行子指令进行并行分解得到并行子指令,并将并行子指令发送给所述下一层运算节点,以使所述下一层运算节点根据所述操作数执行并行子指令。
图4a和图4b分别示出根据本公开一实施例的运算节点的框图。如图4a所示,所述处理器可以包括串行分解器SD(Sequential decomposer)、译码器DD(Demotion Decoder,这里的降级可以是指从上一层到下一层运算节点)以及并行分解器PD(Paralleldecomposer)。其中,SD的输入端可以连接上一层运算节点的处理器中的PD的输出端,SD的输出端可以连接DD的输入端,DD的输出端可以连接PD的输入端,PD的输出端可以连接下一层运算节点的输入端。
在一种可能的实现方式中,任意一个运算节点的内存组件与所述任意一个运算节点的上一层运算节点和下一层运算节点的内存组件之间连接有数据通路,如图4a所示,内存组件i连接内存组件i-1,内存组件i连接下一层运算节点可以是指连接下一层运算节点的内存组件i+1。内存控制器可以连接数据通路,内存控制器可以根据运算节点中的其他组件发送的控制信号控制所述数据通路将输入指令的操作数从一个内存组件送往另一个内存组件。例如,内存控制器可以根据DD发送的控制信号将输入指令的操作数从上一层运算节点的内存组件加载到本地内存组件,或者,也可以将输入指令的运算结果从本地内存组件写回到上一层运算节点的内存组件。
在一种可能的实现方式中,如图4b所示,SD的输入端可以连接指令队列IQ(Instruction Queue),也就是说,处理器可以先将上一层运算节点的输出指令作为本层运算节点的输入指令加载到指令队列IQ,本层运算节点可以是指处理器所属的运算节点,SD从IQ中获取输入指令,考虑到硬件的限制,SD可以将输入指令分解为多个可以串行执行的串行子指令。通过设置IQ作为SD与上一层运算节点之间的缓冲,可以省去SD与上一层运算节点之间严格的同步执行关系。IQ可以简化电路设计,同时提高执行效率,例如,允许SD和上一层运算节点之间独自异步执行,减少SD等待上一层运算节点发送输入指令的时间等。
其中,输入指令可以是描述了机器学习的操作的指令,机器学习的操作可以由上文中的计算原语组成,输入指令可以包括操作数和操作符等。对输入指令的串行分解可以包括对输入指令的操作数的分解以及对输入指令的分解。在进行串行分解时,为了更有效的利用运算节点的资源,串行分解得到的串行子指令将具有尽可能大的分解粒度,串行分解得到的串行子指令的分解粒度由运算节点的资源以及输入指令需要的资源决定,例如,运算节点的资源可以为运算节点的内存组件的容量,输入指令需要的资源可以是指存储输入指令的操作数需要的内存容量。这里的分解粒度可以指分解后的操作数的维度。
输入指令需要的内存容量可以根据存储输入指令的操作数需要的内存容量、以及存储操作符对操作数进行处理后的中间结果需要的内存容量等确定,在确定输入指令需要的内存容量后,可以判断本层运算节点的内存组件的容量是否满足输入指令需要的内存容量,如果不满足,则可以根据本层运算节点的内存组件的容量以及输入指令需要的内存容量对输入指令进行串行分解得到串行子指令。
以矩阵相乘运算作为示例说明SD的功能,假设输入指令为对矩阵X和Y相乘,SD可以根据矩阵X和矩阵Y的大小确定输入指令需要的内存容量,可以将输入指令需要的内存容量与本层运算节点的内存组件的容量进行比较,如果输入指令需要的内存容量大于本层运算节点的内存组件的容量,则需要对输入指令进行串行分解。具体的过程可以为,对操作数进行分解,从而将输入指令分为多个串行子指令,该多个串行子指令可以串行执行,例如,可以对矩阵X或者矩阵Y进行分解,或者对矩阵X和矩阵Y都进行分解,以对矩阵X进行分解为例,可以将输入指令串行分解为多个矩阵相乘的串行子指令以及求和的串行子指令,在串行执行完多个矩阵相乘的串行子指令后,根据多个矩阵相乘的串行子指令的运算结果以及求和的串行子指令进行求和得到输入指令的运算结果。需要说明的是,上述对于矩阵相乘的串行分解方式仅仅是本公开为了说明SD的功能的一个示例,不以任何方式限制本公开。
在一种可能的实现方式中,串行分解器根据所述任意一个运算节点的内存组件的容量、以及所述输入指令需要的内存容量,对所述输入指令进行串行分解得到串行子指令,具体可以包括:确定输入指令的操作数的维度的分解优先级,按照分解优先级的顺序依次选择对操作数分解的维度并以二分法方式确定最大分解粒度,直到分解后的操作数需要的内存容量小于或等于本层运算节点的内存组件的容量。
在一种可能的实现方式中,为了提高分解的效率,对于任一选择的对操作数分解的维度,在该维度方向上以二分法方式确定最大分解粒度之前,可以先确定在该维度方向上分解为原子大小之后的操作数需要的内存容量与本层运算节点的内存组件的容量之间的大小关系:如果在该维度方向上分解为原子大小之后的操作数需要的内存容量<本层运算节点的内存组件的容量,则可以在该维度方向上以二分法方式拆分操作数;如果在该维度方向上分解为原子大小之后的操作数需要的内存容量>本层运算节点的内存组件的容量,则可以按照分解优先级在下一个维度方向上重复以上过程;如果在该维度方向上分解为原子大小之后的操作数需要的内存容量=本层运算节点的内存组件的容量,则可以直接确定分解的维度,结束分解操作数的过程。其中,分解为原子大小可以指分解粒度为1。
图5示出根据本公开一实施方式的串行分解的过程的流程图。如图5所示:(1)在步骤S50中,可以先确定输入指令的操作数的维度的分解优先级,在一种可能的实现方式中,可以按照操作数的维度的大小确定分解优先级,维度越大分解优先级越高,优先分解操作数的最大维度,比如说,操作数X为N维张量,维度分别为t1、t2、…ti、…tN,其中,t1<t2<…ti…<tN,其中,i表示不同的维度,i为正整数且i≤N,那么在确定对操作数X的维度的分解优先级时,tN维度最大,分解优先级最高,其次为tN-1…ti…t2、t1。(2)按照分解优先级的顺序选择对操作数分解的维度,将i初始化为N,此时,在步骤S51中,可以判断i=N>0;在步骤S52中,在tN方向上确定分解粒度为1,在步骤S53中,判断在tN方向分解为1后的操作数需要的内存容量与本层运算节点的内存组件的容量的大小关系,若小于,则在tN维度方向上以二分法方式分解操作数,具体过程可以为:步骤S54,确定最小分解粒度min=0,最大分解粒度max=tN;步骤S55,确定在tN方向上分解粒度为[(max-min)/2];步骤S56,判断在tN方向上分解为[(max-min)/2]的操作数需要的内存容量与本层运算节点的内存组件的容量的大小关系,若分解为[(max-min)/2]的操作数需要的内存容量=本层运算节点的内存组件的容量,则可以结束分解的过程,在tN方向上按照分解粒度[(max-min)/2]对操作数进行分解;若分解为[(max-min)/2]的操作数需要的内存容量<本层运算节点的内存组件的容量,则步骤S57设置最小分解粒度min=[(max-min)/2],若分解为[(max-min)/2]的操作数需要的内存容量>本层运算节点的内存组件的容量,则步骤S58设置最大分解粒度max=[(max-min)/2];步骤S59,判断此时最大分解粒度与最小分解粒度的差值是否为1,如果为1,则步骤S60,在tN方向上确定分解粒度为min,若不为1,则返回步骤S55继续在确定在tN方向上分解粒度为[(max-min)/2],重复以上S55-S60的过程。(3)回到刚才的步骤S51,若在tN方向分解为1后的操作数需要的内存容量等于本层运算节点的内存组件的容量,则可以确定分解的维度,结束分解操作数的过程;若在tN方向分解为1维后的操作数需要的内存容量大于本层运算节点的内存组件的容量,则另i=i-1,并返回到步骤S51,判断此时i=N-1>0,则执行步骤S52,重复上述过程,直到确定出分解后的操作数需要的内存容量满足本层运算节点的内存组件的容量。
在分解完操作数后,可以根据分解的操作数对输入指令进行分解,具体可以包括:将输入指令分解为多个串行子指令,多个串行子指令中包括负责分解后的各子集的操作数的运算的串行子指令,若串行分解后存在输出依赖,则多个串行子指令中还可以包括归约指令。
需要说明的是,图5仅仅是对操作数分解的过程的一个示例,不以任何方式限制本公开。可以理解的是,还可以通过其他方式确定分解粒度,比如,分解优先级可以通过其他方式选择,对维度分解的方式也不限于二分法。
如图4b所示,在一种可能的实现方式中,本公开的SD的输出端和DD的输入端之间还可以连接有子指令队列SQ(sub-level instruction Queue),SD的输出端连接SQ的输入端,SQ的输出端连接DD的输入端。SQ作为SD与DD之间的缓冲,可以省去SD与DD之间严格的同步执行关系。SQ可以简化电路设计,同时提高执行效率,例如,允许SD独自异步执行,减少DD等待SD对输入指令进行串行分解的时间等。
SD可以将串行分解后的串行子指令输出到SQ中,DD从SQ中获取串行子指令,DD可以根据串行子指令对应的操作数的存储需求为串行子指令分配本层运算节点的内存组件上的内存空间,并将分配的内存空间的地址(本地地址)绑定到串行子指令中获取操作数的指令上,从而实现译码处理。DD还可以根据串行子指令向内存控制器发送控制信号,内存控制器可以根据控制信号将串行子指令对应的操作数加载到为其分配的内存空间中,也就是说根据串行子指令中记载的输入指令对应的操作数的地址从上一层运算节点的内存组件中查找到串行子指令对应的操作数的存储位置,并读取操作数,然后根据本地地址写入到本层运算节点的内存组件中。
如图4b所示,DD对串行子指令进行译码处理后发送给PD,PD可以根据PD连接的下一层运算节点的数量对译码处理后的串行子指令进行并行分解,并行分解可以是指分解后的并行子指令可以并行执行。举例来说,假设串行子指令为对向量A和B相加,其中,A=(A1,A2…Aj,…An),B=(B1,B2…Bj,…Bn),其中,n表示向量A和B中元素的个数,n为正整数,j表示元素的序号,j为正整数且j≤n,那么PD可以根据下一层运算节点的数量将串行子指令并行分解为多个并行子指令,每个并行子指令负责处理向量中部分数据的相加操作,例如,假设n=4,PD连接了4个下一层运算节点,则PD可以对串行子指令并行分解得到4个并行子指令,4个并行子指令分别为对A1和B1、A2和B2、A3和B3以及A4和B4相加,PD可以将4个并行子指令发送给所述下一层运算节点。需要说明的是,以上举例仅仅是为了说明并行分解的示例,不以任何方式限制本公开。
在一种可能的实现方式中,PD在进行并行分解时,可以解除串行子指令的输入依赖,也就是说,并行分解得到的并行子指令对应的操作数之间不存在重叠的部分。例如,根据表1所示,可以选择分解的维度以解除输入依赖,这样可以尽量避免输入冗余,节省内存空间。
在另一种可能的实现方式中,所述任意一个运算节点的内存组件包括静态内存段以及动态内存段,若所述输入指令的操作数包括共用操作数以及其他操作数,则串行分解器根据所述共用操作数需要的内存容量与所述静态内存段的剩余容量之间的大小关系、以及所述其他操作数需要的内存容量与动态内存段的容量之间的大小关系,对所述输入指令进行串行分解得到串行子指令。
其中,所述共用操作数为所述串行子指令共同使用的操作数,其他操作数为所述输入指令的操作数中除了所述共用操作数以外的数据,静态内存段的剩余容量可以是指静态内存段中未被使用的容量。
处理器中的SD、DD和PD是分开的,内存分配在时间上可以很好地错开。具体来说,PD总是在DD之后分配内存空间,但分配的内存空间释放得更早,DD总是在SD之后分配内存空间,但分配的内存空间同样释放得更早。而用于SD进行串行分解的内存空间可能会在多个串行子指令中用到,因此,为SD设置了静态内存段,而其他部分共用内存组件中除了静态内存段外的内存(动态内存段)。
举例来说,对于机器学习中的一些运算,这些运算被分解后的几部分运算之间会共用一部分操作数,对于这部分操作数,本公开称作共用操作数。以矩阵相乘运算作为示例,假设输入指令为对矩阵X和Y相乘,如果仅仅对矩阵X进行分解,那么对输入指令进行串行分解得到的串行子指令需要共同使用操作数Y,操作数Y为共用操作数。对于共用操作数,本公开的串行分解器SD可以在进行串行分解时生成一条提示性指令(“装载”),并在提示性指令中指明将共用操作数装载到静态内存段中,DD将提示性指令作为一条只需要装载数据至静态内存段、而无需执行、规约或写回的普通串行子指令处理,DD根据提示性指令向内存控制器发送第一控制信号以将共用操作数加载到静态内存段,以避免频繁存取数据、节约带宽资源。对于其他操作数,DD可以生成第二控制信号,DD可以将生成的第二控制信号发送给内存控制器,由内存控制器根据控制信号将其他操作数加载到动态内存段中。
因此,串行分解器可以根据所述共用操作数需要的内存容量与所述静态内存段的剩余容量之间的大小关系、以及所述其他操作数需要的内存容量与动态内存段的容量之间的大小关系,对所述输入指令进行串行分解得到串行子指令。
如果共用操作数需要的内存容量小于或等于所述静态内存段的剩余容量,且其他操作数需要的内存容量小于或等于动态内存段的容量,则串行分解器可以将所述输入指令发送给译码器,由译码器直接对输入指令进行译码处理后发送给并行分解器。
如果共用操作数需要的内存容量大于所述静态内存段的剩余容量,或者,其他操作数需要的内存容量大于动态内存段的容量,则需要对输入指令进行串行分解。
如果其他操作数需要的内存容量大于动态内存段的容量,而共用操作数需要的内存容量小于或等于所述静态内存段的剩余容量,则串行分解器可以根据动态内存段的容量对其他操作数进行分解,并对输入指令进行串行分解。其中,根据动态内存段的容量对其他操作数进行拆分,并对输入指令进行串行分解的具体过程可以为:确定对其他操作数的维度的分解优先级,按照分解优先级的顺序依次选择对其他操作数分解的维度,并以二分法方式确定最大分解粒度,直到分解后的其他操作数需要的内存容量小于动态内存段的容量。具体的过程,可以参见图5以及上文的相关描述。
如果共用操作数需要的内存容量大于所述静态内存段的剩余容量,其他操作数需要的内存容量小于或等于动态内存段的容量,则串行分解器可以根据静态内存段的剩余容量对共用操作数进行分解,并对输入指令进行串行分解。具体的分解方式同样可以参见图5的过程。
在一种可能的实现方式中,对于存在共用操作数的输入指令,分解得到的串行子指令可以包括头部指令和主体指令,所述译码器可以根据所述头部指令向内存控制器发送控制信号,以从上一层运算节点的内存组件中加载所述共用操作数到所述静态内存段;所述译码器根据所述主体指令向内存控制器发送控制信号,以从上一层运算节点的内存组件中加载所述其他数据到所述动态内存段。
在一种可能的实现方式中,如图4b所示,所述处理器还可以包括控制单元RC(Reduction Controller,也叫归约控制器),所述任意一个运算节点还可以包括本地处理单元(LFU,local functional units,图4b中的处理单元),所述控制单元RC的输入端连接所述译码器DD的输出端,所述控制单元RC的输出端连接所述本地处理单元LFU的输入端,本地处理单元LFU连接内存组件。其中,所述本地处理单元LFU主要用于对存在输出依赖的串行子指令的运算结果进行归约处理,RC可以用于向LFU发送归约指令。LFU都可以通过硬件电路或者软件程序的方式实现,本公开对此不作限定。
在一种可能的实现方式中,若所述串行子指令存在输出依赖,所述控制单元RC根据所述串行子指令控制所述本地处理单元对所述下一层运算节点的运算结果进行归约处理得到所述输入指令的运算结果;其中,所述串行子指令存在输出依赖是指,需要对所述串行子指令的运算结果进行归约处理才能得到所述输入指令的运算结果。
DD会发送串行子指令到RC,RC可以对串行子指令的输出依赖的情况进行检查,若串行子指令存在输出依赖,由RC根据串行子指令向LFU发送归约指令,以使得LFU对下一层运算节点的运算结果进行归约处理得到所述输入指令的运算结果。具体的过程可以为,下一层运算节点(中的内存控制器)可以将对并行子指令的运算结果写回到本层运算节点的内存组件中,LFU可以从本层运算节点的内存组件中读取多个串行子指令的运算结果,该多个串行子指令可以是由同一条输入指令串行分解得到的,LFU对多个串行子指令的运算结果进行归约处理可以得到对应的输入指令的运算结果,将运算结果存储在内存组件中,处理器在确定本层输入指令执行完成后,可以向内存控制器发送写回信号,内存控制器可以根据写回信号将运算结果写回到上一层运算节点的内存组件中,直到第一层运算节点完成所有指令的运算。
在一种可能的实现方式中,若所述控制单元RC检测到对所述下一层运算节点的运算结果进行归约处理所需要的资源大于所述本地处理单元的资源上限,则所述控制单元RC根据所述串行子指令向所述并行分解器发送委托指令,所述并行分解器根据所述委托指令控制所述下一层运算节点对所述下一层运算节点的运算结果进行归约处理得到所述输入指令的运算结果。
RC可以根据串行子指令评估进行归约处理需要的资源(例如,计算资源等),本地处理单元可以具有预设的资源上限,因此,RC可以判断对所述下一层运算节点的运算结果进行归约处理所需要的资源是否大于本地处理单元的资源上限,若大于,那么LFU的处理速度可能会对整个运算节点的性能产生很大的影响,因此,RC可以根据串行子指令向PD发送委托指令,PD可以根据委托指令控制下一层运算节点对所述下一层运算节点的运算结果进行归约处理得到输入指令的运算结果,通过委托的方式可以提高处理的效率。
在一种可能的实现方式中,处理器还可以包括CMR(Commission Register,委托寄存器),在RC判断对所述下一层运算节点的运算结果进行归约处理所需要的资源大于本地处理单元的资源上限时,RC可以根据串行子指令向CMR写入委托指令,PD可以定期检查CMR中是否存在委托指令,若存在委托指令,则根据委托指令控制下一层运算节点对所述下一层运算节点的运算结果进行归约处理得到输入指令的运算结果。其中的定期检查可以是根据处理的周期检查,处理的周期可以根据下一层运算节点处理完一条串行子指令的时间等确定,本公开对此不作限定。通过设置CMR可以提高整个运算节点的处理效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图中的各个模块按照箭头的指示依次显示,但是这些并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,执行顺序并没有严格的顺序限制。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,所述内存组件可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random AccessMemory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (8)
1.一种运算装置,其特征在于,包括:至少两层的运算节点,每一个运算节点包括内存组件、处理器以及下一层运算节点;任意一个运算节点还包括:内存控制器;所述处理器包括:串行分解器、并行分解器以及译码器;所述内存控制器连接所述串行分解器和所述译码器;其中,所述任意一个运算节点的内存组件与所述任意一个运算节点的上一层运算节点和下一层运算节点的内存组件之间连接有数据通路,所述内存控制器连接所述数据通路,控制所述数据通路将输入指令的操作数从一个内存组件送往另一个内存组件;
对于任意一个运算节点,所述串行分解器用于根据所述任意一个运算节点的内存组件的容量、以及所述输入指令需要的内存容量,对所述输入指令进行串行分解得到串行子指令;
所述译码器用于对所述串行子指令进行译码处理后发送给所述并行分解器、并根据串行子指令向所述内存控制器发送控制信号,所述内存控制器根据所述控制信号从上一层运算节点的内存组件中加载执行所述串行子指令需要的操作数到所述任意一个运算节点的内存组件;
所述并行分解器用于根据所述下一层运算节点的数量,对译码后的串行子指令进行并行分解得到并行子指令,并将并行子指令发送给所述任意一个运算节点的下一层运算节点;
所述任意一个运算节点还用于从上一层运算节点的内存组件中加载执行所述并行子指令需要的操作数到所述任意一个运算节点的内存组件,以使所述任意一个运算节点的下一层运算节点根据所述并行子指令需要的操作数并行执行所述并行子指令。
2.根据权利要求1所述的运算装置,其特征在于,若所述输入指令需要的内存容量大于所述任意一个运算节点的内存组件的容量,则所述串行分解器根据所述输入指令需要的内存容量和所述任意一个运算节点的内存组件的容量,对所述输入指令进行串行分解得到串行子指令。
3.根据权利要求1-2任意一项所述的运算装置,其特征在于,所述任意一个运算节点的内存组件包括静态内存段以及动态内存段,若所述输入指令的操作数包括共用操作数以及其他操作数,则串行分解器根据所述共用操作数需要的内存容量与所述静态内存段的剩余容量之间的大小关系、以及所述其他操作数需要的内存容量与动态内存段的容量之间的大小关系,对所述输入指令进行串行分解得到串行子指令,
其中,所述共用操作数为所述串行子指令共同使用的操作数,其他操作数为所述输入指令的操作数中除了所述共用操作数以外的数据。
4.根据权利要求3所述的运算装置,其特征在于,分解得到的串行子指令包括头部指令和主体指令,所述译码器根据所述头部指令向所述内存控制器发送第一控制信号,所述内存控制器根据所述第一控制信号从上一层运算节点的内存组件中加载所述共用操作数到所述静态内存段;
所述译码器根据所述主体指令向所述内存控制器发送第二控制信号,所述内存控制器根据所述第二控制信号从上一层运算节点的内存组件中加载所述其他操作数到所述动态内存段。
5.根据权利要求1所述的运算装置,其特征在于,并行分解得到的并行子指令对应的操作数之间不存在重叠的部分。
6.根据权利要求1所述的运算装置,其特征在于,所述处理器还包括控制单元,所述任意一个运算节点还包括本地处理单元,
所述控制单元的输入端连接所述译码器的输出端,所述控制单元的输出端连接所述本地处理单元的输入端。
7.根据权利要求6所述的运算装置,其特征在于,
若所述串行子指令存在输出依赖,所述控制单元根据所述串行子指令控制所述本地处理单元对所述下一层运算节点的运算结果进行归约处理得到所述输入指令的运算结果;
其中,所述串行子指令存在输出依赖是指,需要对所述串行子指令的运算结果进行归约处理才能得到所述输入指令的运算结果。
8.根据权利要求7所述的运算装置,其特征在于,若所述控制单元检测到对所述下一层运算节点的运算结果进行归约处理所需要的资源大于所述本地处理单元的资源上限,则所述控制单元根据所述串行子指令向所述并行分解器发送委托指令,
所述并行分解器根据所述委托指令控制所述下一层运算节点对所述下一层运算节点的运算结果进行归约处理得到所述输入指令的运算结果。
Priority Applications (8)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/083280 WO2020220935A1 (zh) | 2019-04-27 | 2020-04-03 | 运算装置 |
EP20799083.9A EP3964950A4 (en) | 2019-04-27 | 2020-04-26 | FRACTAL COMPUTING DEVICE AND METHOD, INTEGRATED CIRCUIT AND BOARD BOARD |
EP21216615.1A EP4012556A3 (en) | 2019-04-27 | 2020-04-26 | Fractal calculating device and method, integrated circuit and board card |
EP21216623.5A EP3998528A1 (en) | 2019-04-27 | 2020-04-26 | Fractal calculating device and method, integrated circuit and board card |
US17/606,838 US20220261637A1 (en) | 2019-04-27 | 2020-04-26 | Fractal calculating device and method, integrated circuit and board card |
PCT/CN2020/087043 WO2020221170A1 (zh) | 2019-04-27 | 2020-04-26 | 分形计算装置、方法、集成电路及板卡 |
US17/560,411 US20220188614A1 (en) | 2019-04-27 | 2021-12-23 | Fractal calculating device and method, integrated circuit and board card |
US17/560,490 US11841822B2 (en) | 2019-04-27 | 2021-12-23 | Fractal calculating device and method, integrated circuit and board card |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910347027 | 2019-04-27 | ||
CN2019103470270 | 2019-04-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111860797A CN111860797A (zh) | 2020-10-30 |
CN111860797B true CN111860797B (zh) | 2023-05-02 |
Family
ID=72966068
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910544723.0A Active CN111860797B (zh) | 2019-04-27 | 2019-06-21 | 运算装置 |
CN201910545272.2A Withdrawn CN111860799A (zh) | 2019-04-27 | 2019-06-21 | 运算装置 |
CN201910545270.3A Pending CN111860798A (zh) | 2019-04-27 | 2019-06-21 | 运算方法、装置及相关产品 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910545272.2A Withdrawn CN111860799A (zh) | 2019-04-27 | 2019-06-21 | 运算装置 |
CN201910545270.3A Pending CN111860798A (zh) | 2019-04-27 | 2019-06-21 | 运算方法、装置及相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (3) | CN111860797B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107861757A (zh) * | 2017-11-30 | 2018-03-30 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
CN108197705A (zh) * | 2017-12-29 | 2018-06-22 | 国民技术股份有限公司 | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3343135A (en) * | 1964-08-13 | 1967-09-19 | Ibm | Compiling circuitry for a highly-parallel computing system |
CA1065492A (en) * | 1974-02-28 | 1979-10-30 | Alan L. Davis | System and method for concurrent and pipeline processing employing a data driven network |
CN102141905B (zh) * | 2010-01-29 | 2015-02-25 | 上海芯豪微电子有限公司 | 一种处理器体系结构 |
CN105630733B (zh) * | 2015-12-24 | 2017-05-03 | 中国科学院计算技术研究所 | 分形树中向量数据回传处理单元的装置、方法、控制装置及智能芯片 |
US10762164B2 (en) * | 2016-01-20 | 2020-09-01 | Cambricon Technologies Corporation Limited | Vector and matrix computing device |
CN107329936A (zh) * | 2016-04-29 | 2017-11-07 | 北京中科寒武纪科技有限公司 | 一种用于执行神经网络运算以及矩阵/向量运算的装置和方法 |
CN111897751A (zh) * | 2017-01-26 | 2020-11-06 | 华为技术有限公司 | 一种数据传输的方法、装置、设备和系统 |
CN109284822B (zh) * | 2017-07-20 | 2021-09-21 | 上海寒武纪信息科技有限公司 | 一种神经网络运算装置及方法 |
US10929143B2 (en) * | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
-
2019
- 2019-06-21 CN CN201910544723.0A patent/CN111860797B/zh active Active
- 2019-06-21 CN CN201910545272.2A patent/CN111860799A/zh not_active Withdrawn
- 2019-06-21 CN CN201910545270.3A patent/CN111860798A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107861757A (zh) * | 2017-11-30 | 2018-03-30 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
CN108197705A (zh) * | 2017-12-29 | 2018-06-22 | 国民技术股份有限公司 | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 |
Non-Patent Citations (1)
Title |
---|
多态并行阵列机中处理单元的设计与实现;李涛等;《西安邮电大学学报》;20150510(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111860799A (zh) | 2020-10-30 |
CN111860798A (zh) | 2020-10-30 |
CN111860797A (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhang et al. | BoostGCN: A framework for optimizing GCN inference on FPGA | |
US9886377B2 (en) | Pipelined convolutional operations for processing clusters | |
US8400458B2 (en) | Method and system for blocking data on a GPU | |
WO2022068663A1 (zh) | 内存分配方法、相关设备及计算机可读存储介质 | |
US11609792B2 (en) | Maximizing resource utilization of neural network computing system | |
US11669443B2 (en) | Data layout optimization on processing in memory architecture for executing neural network model | |
US20230297819A1 (en) | Processor array for processing sparse binary neural networks | |
TW202018599A (zh) | 神經處理單元 | |
WO2020220935A1 (zh) | 运算装置 | |
CN112162854A (zh) | 一种cpu-gpu间计算任务调度方法、系统及介质 | |
US20240176845A1 (en) | Method and device for matrix multiplication optimization using vector registers | |
CN111831582B (zh) | 用于智能处理器的内存管理装置、方法及电子设备 | |
Stevens et al. | GNNerator: A hardware/software framework for accelerating graph neural networks | |
Zhao et al. | Cambricon-F: machine learning computers with fractal von Neumann architecture | |
CN111767023A (zh) | 数据排序方法和数据排序系统 | |
CN116680063B (zh) | 任务调度方法、装置、计算系统、电子设备和存储介质 | |
Aghapour et al. | Integrated ARM big. Little-Mali pipeline for high-throughput CNN inference | |
CN111860797B (zh) | 运算装置 | |
CN115836346A (zh) | 存内计算设备及其数据处理方法 | |
Guan et al. | Crane: mitigating accelerator under-utilization caused by sparsity irregularities in cnns | |
CN114692854A (zh) | 用于生成人工神经网络模型的内核的npu及其方法 | |
Aghapour | Integrated ARM big | |
Miao | A Review on Important Issues in GCN Accelerator Design | |
US12008463B2 (en) | Methods and apparatus for accessing external memory in a neural network processing system | |
US11775299B1 (en) | Vector clocks for highly concurrent execution engines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |