CN106445471B - 处理器和用于在处理器上执行矩阵乘运算的方法 - Google Patents
处理器和用于在处理器上执行矩阵乘运算的方法 Download PDFInfo
- Publication number
- CN106445471B CN106445471B CN201610894738.6A CN201610894738A CN106445471B CN 106445471 B CN106445471 B CN 106445471B CN 201610894738 A CN201610894738 A CN 201610894738A CN 106445471 B CN106445471 B CN 106445471B
- Authority
- CN
- China
- Prior art keywords
- processor
- memory cell
- processing unit
- chip memory
- data
- 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
- 239000011159 matrix material Substances 0.000 title claims abstract description 109
- 238000000034 method Methods 0.000 title claims abstract description 45
- 239000013598 vector Substances 0.000 claims abstract description 82
- 230000006399 behavior Effects 0.000 claims description 14
- 238000013500 data storage Methods 0.000 claims description 9
- 238000009412 basement excavation Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000013135 deep learning Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 208000010378 Pulmonary Embolism Diseases 0.000 description 3
- 230000001351 cycling effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Complex Calculations (AREA)
Abstract
本申请公开了处理器和用于在处理器上执行矩阵乘运算的方法。所述处理器的一具体实施方式包括数据总线以及由k个处理单元组成的阵列处理机,其中:所述数据总线,用于依次从M×N的被乘数矩阵中读取n列的行向量并输入至所述阵列处理机中的每个处理单元、从N×K的乘数矩阵中读取n×k的子矩阵并将所述子矩阵的每个列向量输入至所述阵列处理机中对应的处理单元以及将每个处理单元执行乘运算所得到的结果输出;所述阵列处理机中的每个处理单元,用于并行对输入的行向量以及列向量执行向量乘运算,每个处理单元包括由n个乘法器和n‑1个加法器组成的***树乘法器。该实施方式提高了矩阵乘运算的处理效率。
Description
技术领域
本申请涉及计算机技术领域,具体涉及计算机硬件技术领域,尤其涉及处理器和用于在处理器上执行矩阵乘运算的方法。
背景技术
深度学习技术是人工智能的核心,对很多应用都起到了非常大的推动作用。深度学习算法是典型计算密集型算法,作为该算法核心部分的矩阵乘法,是一种计算和数据密集型的运算。在需要较高计算效率的场景,矩阵算法通常需要使用基于FPGA或者ASIC的专用处理器来执行,专用处理器可以提供大量定制化的计算和存储资源。如果专用处理器中用于执行矩阵乘法算法的部分能采用合理的计算单元和存储结构,将会大大降低电路资源消耗,降低设计复杂度,提高芯片的性价比和能耗比。
现有专用处理器中执行矩阵乘法算法的硬件架构,在对M×N的矩阵与N×K的矩阵相乘时,通常在M和K两个维度进行并行度的挖掘。然而,由于深度学习算法中涉及的矩阵乘运算常常出现被乘数矩阵的行数较少甚至被乘数矩阵为单行矩阵的情形,在M维度挖掘并行度容易导致架构通用性较差;若仅从K维度挖掘,并行度受限于应用中K的规模,计算性能有限,导致利用率低。
发明内容
本申请的目的在于提出一种改进的处理器和用于在处理器上执行矩阵乘运算的方法,来解决以上背景技术部分提到的技术问题。
第一方面,本申请提供了一种处理器方法,所述处理器包括数据总线以及由k个处理单元组成的阵列处理机,其中:所述数据总线,用于依次从M×N的被乘数矩阵中读取n列的行向量并输入至所述阵列处理机中的每个处理单元、从N×K的乘数矩阵中读取n×k的子矩阵并将所述子矩阵的每个列向量输入至所述阵列处理机中对应的处理单元以及将每个处理单元执行乘运算所得到的结果输出;所述阵列处理机中的每个处理单元,用于并行对输入的行向量以及列向量执行向量乘运算,每个处理单元包括由n个乘法器和n-1个加法器组成的***树乘法器;其中,n、k、M、N均为大于1的整数。
在一些实施例中,所述处理器还包括:第一片上存储单元、第二片上存储单元以及第三片上存储单元;以及所述数据总线进一步用于:将所述被乘数矩阵以及所述乘数矩阵分别缓存至所述第一片上存储单元和所述第二片上存储单元;依次从所述第一片上存储单元以及所述第二片上存储单元分别读取对应的行向量和列向量到每个处理单元中;将每个处理单元执行乘加运算所得到的结果输出至所述第三片上存储单元;对所述第三片上存储单元的数据进行缓存。
在一些实施例中,所述数据总线的缓存操作以及所述阵列处理机中处理单元的运算操作以乒乓操作方式并行执行。
在一些实施例中,所述第一片上存储单元以行为单位进行数据存储,所述第二片上存储单元以列为单位进行数据存储。
在一些实施例中,所述第三片上存储单元以行为单位进行数据存储。
第二方面,本申请提供了一种用于在处理器上执行矩阵乘运算的方法,所述处理器包括k个处理单元组成的阵列处理机,所述方法包括:将M×N的被乘数矩阵中n列的行向量读取到所述阵列处理机中的每个处理单元上,每个处理单元包括由n个乘法器和n-1个加法器组成的***树乘法器;将N×K的乘数矩阵中n×k的子矩阵中每个n行的列向量分别读取到所述阵列处理机中对应的处理单元上;使用各个处理单元并行对每个列向量与所述行向量执行向量乘运算,其中,每个处理单元中的***树乘法器用于并行执行乘向量运算中的乘运算和加运算;将每个处理单元执行乘运算所得到的结果输出;其中,n、k、M、N均为大于1的整数。
在一些实施例中,所述处理器还包括第一片上存储单元、第二片上存储单元、第三片上存储单元;以及所述将M×N的被乘数矩阵中n列的行向量读取到每个处理单元上,包括:将所述被乘数矩阵缓存至第一片上存储单元;依次从第一片上存储单元读取行向量到所述阵列处理机的每个处理单元中;以及所述将N×K的乘数矩阵中n×k的子矩阵中每个n行的列向量分别读取到对应的处理单元上,包括:将所述乘数矩阵缓存至第二片上存储单元;依次从第二片上存储单元读取对应的子矩阵以将子矩阵中的各个列向量分别输出到所述阵列处理机中对应的处理单元上;以及所述将每个处理单元执行乘运算所得到的结果输出,包括:将每个处理单元执行乘加运算所得到的结果输出至第三片上存储单元;对所述第三片上存储单元的数据进行缓存。
在一些实施例中,以乒乓操作方式并行执行运算操作以及数据缓存操作。
在一些实施例中,所述方法还包括:以行为单位存储所述第一片上存储单元上的数据;以列为单位存储所述第二片上存储单元上的数据。
在一些实施例中,所述方法还包括:以行为单位存储所述第三片上存储单元上的数据。
本申请提供的处理器和用于在处理器上执行矩阵乘运算的方法,在对矩阵进行乘运算时,不对M维度进行并行度挖掘,使得处理器在处理涉及较多的向量与矩阵的乘运算的深度学习算法时,保证架构较高的通用性;此外,阵列处理机的多个PE以及PE内部的***树乘法器分别可以在矩阵的K维度和N维度进行并行度挖掘,进一步提高了整体的并行度,从而加快了对矩阵乘运算的处理速度。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性***架构图;
图2是根据本申请的处理器的一个实施例的结构示意图;
图3是根据图2对应实施例中阵列处理机的处理单元的结构示意图;
图4是根据本申请的处理器的又一个实施例的结构示意图;
图5是根据本申请的用于在处理器上执行矩阵乘运算的方法的一个实施例的流程图。
图6是循环执行图5实施例中所示方法的一种示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的处理器或用于在处理器上执行矩阵乘运算的方法的实施例的示例性***架构100。
如图1所示,***架构100可以包括通用处理器101和专用服务器102。
通用处理器101用于将外部指令(例如矩阵运算)以及待处理的数据(例如矩阵)发送给专用处理器102,专用处理器102可以根据外部指令生成控制信号,以通过控制信号来控制内部的器件执行数据处理操作(例如矩阵运算),最后处理生成的结果可以再发送回通用处理器101。其中,通用处理器101也可以称为主机,而专用处理器102可以是由FPGA(Field-Programmable Gate Array,即现场可编程门阵列服务器)设计而成。
需要说明的是,本申请实施例所提供的处理器一般是指图1中的专用处理器102,相应地,用于在处理器上执行指令的方法一般由专用处理器102执行。
应该理解,图1中的通用处理器101和专用处理器102的数目仅仅是示意性的。根据实现需要,可以具有任意数目的通用处理器和专用处理器。
继续参考图2,示出了根据本申请的处理器的一种结构示意图200。
如图2所示,处理器200包括数据总线201和阵列处理机202。其中,阵列处理机202包括处理单元(PE,Processing Element)2021、处理单元2022和处理单元2023。需要说明的是,图中各个部件的数目仅为示意性的,可以具有任意数目的数据总线和阵列处理机,阵列处理机202中的PE的数目为k个(k为大于1的整数),而不限于图中所示的3个。
数据总线201可以用于从存储待执行矩阵乘运算的被乘数矩阵和乘数矩阵的存储器进行数据读取,并按照一定的规则将数据输入到阵列处理机202中相应的处理单元。以M×N(M、N均为大于1的整数)的被乘数矩阵与N×K(K为大于1的整数)的乘数矩阵为例,数据总线201可以依次从外部的存储器203中的被乘数矩阵中依次读取n列的行向量并输入至阵列处理机202的每个处理单元;与此同时,数据总线201可以依次从外部的存储器204中的乘数矩阵读取n×k(n是大于1的整数)的子矩阵,并将n×k的子矩阵中的k个列向量分别输入至阵列处理机202中k个PE中对应的PE中。从而,每个PE读取到的数据为相同的n列行向量和不同的n行列向量。此外,数据总线201还可以用于将每个PE所处理的计算结果输出到外部的存储器205。需要说明的是,存储器203、存储器204、存储器205可以是相同的设备,也可以是不同的设备。
阵列处理机202中的k个PE,可以同时根据输入至每个PE的n列的行向量和n行的列向量进行向量乘运算。从而,阵列处理机202中的k个PE可以并行处理k个向量乘运算。
阵列处理机202中的每个PE可以包括由n个乘法器和n-1个加法器组成的***树乘法器。在该***树乘法器中,n个乘法器并联设置,n-1个加法器则设置为多个彼此串联连接的加法器组,加法器组分别包括一个或多个并联设置的加法器,各个加法器组中加法器的数目依次为n/2,n/4……1。每两个乘法器进行运算所得到的乘积输入至第一个加法器组中的各个加法器,各个加法器组中每两个加法器进行运算所得到的加和输入至相邻的后续加法器组中的各个加法器中。从而,在对n列的行向量和n行的列向量执行向量乘运算时可以并行执行对应分量的乘运算。同时,也在对乘运算所得到的乘积进行累加操作时,可以并行执行加运算。
图3是n为4时每个PE的结构示意图。如图3所示,PE所包括的***树乘法器由三个部分串联而成,分别是4个并联设置的乘法器301、302、303、304,2个并联设置的加法器305、306以及一个单独设置的加法器307。其中,4个并联设置的乘法器301、302、303、304可以用于对4列的行向量和4行的列向量中4组对应的分量进行乘运算。乘法器301、302的结果输入至加法器305,乘法器303、304的结果输入至加法器306。加法器305、加法器306用于并行执行对应的加法运算。加法器305、加法器306的运算结果均输入加法器307,加法器307进行加运算后将结果输出。在该***树乘法器中,4个并联设置的乘法器301、302、303、304可以实现在N维度上挖掘并行度,加法器305、加法器306也能提高运算并行性。
本申请的上述实施例提供的处理器,在对矩阵进行乘运算时,不对M维度进行并行度挖掘,使得处理器在处理涉及较多的向量与矩阵的乘运算的深度学习算法时,保证架构较高的通用性;此外,阵列处理机的多个PE以及PE内部的***树乘法器分别可以在矩阵的K维度和N维度进行并行度挖掘,进一步提高了整体的并行度,从而加快了对矩阵乘运算的处理速度。
继续参考图4,图4示出了根据本申请的处理器的又一种结构示意图400。
如图4所示。其中,处理器400可以包括:数据总线201、阵列处理机402、第一片上存储单元403、第二片上存储单元404以及第三片上存储单元405。
阵列处理机402以及其中的处理单元的结构可以参考图2对应实施例中的阵列处理机202,这里不再赘述。上述数据总线401用于执行以下功能:将被乘数矩阵以及乘数矩阵分别从外部的存储器406和存储器407缓存至第一片上存储单元403和第二片上存储单元404;依次从第一片上存储单元403以及第二片上存储单元404分别读取对应的行向量和列向量到每个处理单元中;将每个处理单元执行乘加运算所得到的结果输出至第三片上存储单元405;将第三片上存储单元的数据缓存至外部的存储器408。
可选的,第一片上存储单元403、第二片上存储单元404以及第三片上存储单元405可以采用静态随机存取存储器,这种存储器不需要刷新电路即能保存它内部存储的数据,具有较高的性能与更小的功耗。
可选的,第二片上存储单元404可以包括k个子存储单元,每个子存储单元n×k的子矩阵中k个列向量,从而使得数据总线401可以分别从各个子存储单元读取数据到阵列处理机402中对应的PE上。同样,与第三片上存储单元405也可以包括k个子存储单元,使得数据总线401可以将阵列处理机402中每个PE得到的运算结果写入第三片上存储单元405中对应的子存储单元。
在本实施例的一些可选实现方式中,数据总线401的缓存操作以及阵列处理机402中处理单元的运算操作以乒乓操作方式并行执行。在该实现方式中,数据缓存操作以及运算操作可以并行执行,从而使得从片外读取数据的时间以及将数据缓存至片外的时间可以被运算所占用的时间覆盖,从而进一步减少矩阵乘运算的时间。
在本实施例的一些可选实现方式中,第一片上存储单元403可以以行为单位进行数据存储,第二片上存储单元404可以以列为单位进行数据存储。由于第一片上存储单元403可以以行为单位进行数据存储,第二片上存储单元404可以以列为单位进行数据存储,在数据总线401从第一片上存储单元403读取行向量以及从第二片上存储单元404读取列向量到阵列处理机402中的PE中时,可以直接从第一片上存储单元403中一行的数据中读取需要的行向量以及从第二片上存储单元404中一列的数据中读取需要的列向量,从而提高读取效率。
在本实施例的一些可选实现方式中,第三片上存储单元405可以以行为单位进行数据存储。在深度学习算法中,上一个矩阵乘运算的结果常常用于下一次矩阵乘运算的被乘数矩阵,因此在第三片上存储单元405在以行为单位进行数据存储时,第一片上存储单元403可以直接从第三片上存储单元405读取数据,在不作处理情况下即可用作下一次矩阵乘运算。
本申请的上述实施例提供的处理器,相对于图2对应实施例中所提供的处理器,额外设置了用于对被乘数矩阵和乘数矩阵进行读缓存的片上存储单元以及用于对运算结果进行写缓存的片上存储单元,从而可以使得避免每次使用阵列处理机202进行矩阵乘运算的片段时都要等待从片外读取数据以及向片外写出数据的时间,消除大量的数据复用情况下对片外带宽的需求,有助于提高整体的处理效率。
继续参考图5,示出了根据本申请的用于在处理器上执行矩阵乘运算的方法的一个实施例的流程500。处理器包括k个处理单元组成的阵列处理机,用于在处理器上执行指令的方法,包括以下步骤:
步骤501,将M×N的被乘数矩阵中n列的行向量读取到阵列处理机中的每个处理单元上。
在本实施例中,处理器(例如图1中的专用处理器102)首先从M×N的被乘数矩阵中读取数据。其中,被乘数矩阵可以是存储在片外的存储单元(例如通用处理器CPU中的存储器)中,处理器从该存储单元即可读取到相应的数据。需要说明的是,被乘数矩阵也可以存储在其他存储单元中。在读取过程中,处理器每次读取被乘数矩阵中n列的行向量。由于被乘数矩阵有N列,因此对被乘数矩阵的一行数据遍历一次,需要读取次数为N/n。每次读取到的行向量,可以输入至阵列处理机的每个PE中,即k个PE分享同一个行向量。
步骤502,将N×K的乘数矩阵中n×k的子矩阵中每个n行的列向量分别读取到阵列处理机中对应的处理单元上。
在本实施例中,对应于步骤501中读取并输入至每个处理单元的行向量,处理器可以从N×K的乘数矩阵中每次读取n×k的子矩阵。对于每次读取到的n×k的子矩阵,处理器可以将k个列向量分别输入至阵列处理机的k个PE中,每个列向量对应一个PE,从而可以保证后续过程中k个PE可以同时处理k个向量乘运算,实现在K维度上的并行处理。
步骤503,使用各个处理单元并行对每个列向量与行向量执行向量乘运算。
在本实施例中,基于每次读取并输入至阵列处理机中各个处理单元的数据,处理器可以通过阵列处理机的各个处理单元执行行向量与子矩阵的乘操作,其中每个处理单元对行向量与列向量执行向量乘运算。具体的,由于k个处理单元读取到同样的行向量,而每个处理单元则读取到n×k的子矩阵中不同的列向量,因此k个处理单元可以实现k个列向量与同一个行向量的并行运算。
进一步的,由于每个处理单元包括由n个乘法器和n-1个加法器组成的***树乘法器,对于每个处理单元,可以使用n个乘法器同时执行n列的行向量与n行的列向量进行相乘时涉及的n个分量乘运算,每次可以并行处理n个数字乘运算,同时,使用***树乘法器中设置的加法器还可以对向量乘运算中涉及的数字加操作进行并行操作,从而实现在乘数矩阵N维度上并行度的挖掘,进一步提高处理的并行性,进而提高整体的处理效率。
步骤504,将每个处理单元执行乘运算所得到的结果输出。
基于步骤503中每个处理单元执行的向量乘运算,处理器可以通过每个处理单元将乘运算所得到的结果输出。由于步骤501中每次读取阵列处理机的数据仅为被乘数矩阵长度为N的一行数据中长度为n的向量,而步骤202中每次读取的也仅为N×K的乘数矩阵中n×k的子矩阵,可见上述方案中的各个步骤通常需要循环执行多次才能完成整个矩阵乘运算。
在本实施例的一些可选实现方式中,处理器可以按照图6所示方式循环执行步骤501和步骤502,以完成完整的矩阵乘运算。如图6所示,所执行的是被乘数矩阵为A(M×N)和乘数矩阵B(N×K)之间的矩阵乘运算。循环可以包括最内层循环、次内层循环以及最外层循环。
在最内层的循环中,可以使用步骤501对被乘数矩阵中单行N列的数据进行遍历,即沿着被乘数矩阵N维度的方向每次读取n列的行向量。对应的,在最内层的循环中可以使用步骤502对乘数矩阵N行k列的数据进行遍历,即沿着乘数矩阵N维度的方向每次读取n行k列的子矩阵。每完成一轮内循环,即可对被乘数矩阵中一行的数据和乘数矩阵中一个N行k列的数据的乘操作。可见,每次内循环每执行N/n次,即可触发后续的次外层循环执行一次。
在次内层循环中,可以在每完成一次最内层循环时使用步骤502对被乘数矩阵中K方向上的下一个N行k列的数据进行遍历,而步骤502则可以重新对单行N列的数据进行遍历。每完成一轮的次内层循环,即可完成被乘数矩阵的一行数据与整个乘数矩阵的乘操作。可见,次外层循环每执行K/k次,即可触发后续的最外层循环执行一次。
在最外层循环中,当乘数矩阵中的数据均遍历后,可以使用步骤501对被乘数矩阵中M维度的方向中下一个单行N列的数据进行遍历,直到处理完被乘数矩阵的M行。可见,最外层循环每执行M次,即可完成一次完整的矩阵乘运算。
在本实施例的一些可选实现方式中,上述处理器还包括第一片上存储单元、第二片上存储单元、第三片上存储单元。同时,步骤501包括:将被乘数矩阵缓存至第一片上存储单元;依次从第一片上存储单元读取行向量到阵列处理机的每个处理单元中。步骤502可以包括:将乘数矩阵缓存至第二片上存储单元;依次从第二片上存储单元读取对应的子矩阵以将子矩阵中的各个列向量分别输出到阵列处理机中对应的处理单元上。步骤504则可以包括:将每个处理单元执行乘运算所得到的结果输出,包括:将每个处理单元执行乘加运算所得到的结果输出至第三片上存储单元;对第三片上存储单元的数据进行缓存。该实现方式的具体处理可以参考图4对应实施例中相应的描述,这里不再赘述。
在本实施例的一些可选实现方式中,步骤501、步骤502、步骤503以及步骤504所涉及的运算操作以及数据缓存操作可以并行执行。其中,步骤503中涉及的为运算操作,步骤501、步骤502以及步骤504中涉及的为数据缓存操作。该实现方式的具体处理可以参考图4对应实施例中相应的实现方式,这里不再赘述。
在本实施例的一些可选实现方式中,上述方法还包括:以行为单位存储第一片上存储单元上的数据;以列为单位存储第二片上存储单元上的数据。该实现方式的具体处理可以参考图4对应实施例中相应的实现方式,这里不再赘述。
在本实施例的一些可选实现方式中,上述方法还包括:以行为单位存储第三片上存储单元上的数据。该实现方式的具体处理可以参考图4对应实施例中相应的实现方式,这里不再赘述。
本申请的上述实施例提供的方法,在对矩阵进行乘运算时,不对M维度进行并行度挖掘,使得在使用处理器处理涉及较多的向量与矩阵的乘运算的深度学习算法时,保证架构较高的通用性;此外,阵列处理机的多个PE以及PE内部的***树乘法器分别可以在矩阵的K维度和N维度进行并行度挖掘,进一步提高了整体的并行度,从而加快了对矩阵乘运算的处理速度。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,该一个或者多个程序可以被包括k个处理单元组成的阵列处理机的处理器执行,当所述一个或者多个程序被一个处理器执行时,使得所述处理器:将M×N的被乘数矩阵中n列的行向量读取到所述阵列处理机中的每个处理单元上,每个处理单元包括由n个乘法器和n-1个加法器组成的***树乘法器;将N×K的乘数矩阵中n×k的子矩阵中每个n行的列向量分别读取到所述阵列处理机中对应的处理单元上;使用各个处理单元并行对每个列向量与所述行向量执行向量乘运算,其中,每个处理单元中的***树乘法器用于并行执行乘向量运算中的乘运算和加运算;将每个处理单元执行乘运算所得到的结果输出。其中,n、k、M、N均为大于1的整数。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种处理器,其特征在于,所述处理器包括数据总线以及由k个处理单元组成的阵列处理机,其中:
所述数据总线,用于依次从M×N的被乘数矩阵中读取n列的行向量并输入至所述阵列处理机中的每个处理单元、从N×K的乘数矩阵中读取n×k的子矩阵并将所述子矩阵的每个列向量输入至所述阵列处理机中对应的处理单元以及将每个处理单元执行乘运算所得到的结果输出;
所述阵列处理机中的每个处理单元,用于并行对输入的行向量以及列向量执行向量乘运算,每个处理单元包括由n个乘法器和n-1个加法器组成的***树乘法器;
其中,n、k、M、N均为大于1的整数。
2.根据权利要求1所述的处理器,其特征在于,所述处理器还包括:第一片上存储单元、第二片上存储单元以及第三片上存储单元;以及
所述数据总线进一步用于:
将所述被乘数矩阵以及所述乘数矩阵分别缓存至所述第一片上存储单元和所述第二片上存储单元;
依次从所述第一片上存储单元以及所述第二片上存储单元分别读取对应的行向量和列向量到每个处理单元中;
将每个处理单元执行乘加运算所得到的结果输出至所述第三片上存储单元;
对所述第三片上存储单元的数据进行缓存。
3.根据权利要求2所述的处理器,其特征在于,所述数据总线的缓存操作以及所述阵列处理机中处理单元的运算操作以乒乓操作方式并行执行。
4.根据权利要求2或3所述的处理器,其特征在于,所述第一片上存储单元以行为单位进行数据存储,所述第二片上存储单元以列为单位进行数据存储。
5.根据权利要求4所述的处理器,其特征在于,所述第三片上存储单元以行为单位进行数据存储。
6.一种用于在处理器上执行矩阵乘运算的方法,其特征在于,所述处理器包括k个处理单元组成的阵列处理机,所述方法包括:
将M×N的被乘数矩阵中n列的行向量读取到所述阵列处理机中的每个处理单元上,每个处理单元包括由n个乘法器和n-1个加法器组成的***树乘法器;
将N×K的乘数矩阵中n×k的子矩阵中每个n行的列向量分别读取到所述阵列处理机中对应的处理单元上;
使用各个处理单元并行对每个列向量与所述行向量执行向量乘运算,其中,每个处理单元中的***树乘法器用于并行执行乘向量运算中的乘运算和加运算;
将每个处理单元执行乘运算所得到的结果输出;
其中,n、k、M、N均为大于1的整数。
7.根据权利要求6所述的方法,其特征在于,所述处理器还包括第一片上存储单元、第二片上存储单元、第三片上存储单元;以及
所述将M×N的被乘数矩阵中n列的行向量读取到每个处理单元上,包括:
将所述被乘数矩阵缓存至第一片上存储单元;
依次从第一片上存储单元读取行向量到所述阵列处理机的每个处理单元中;以及
所述将N×K的乘数矩阵中n×k的子矩阵中每个n行的列向量分别读取到对应的处理单元上,包括:
将所述乘数矩阵缓存至第二片上存储单元;
依次从第二片上存储单元读取对应的子矩阵以将子矩阵中的各个列向量分别输出到所述阵列处理机中对应的处理单元上;以及
所述将每个处理单元执行乘运算所得到的结果输出,包括:
将每个处理单元执行乘加运算所得到的结果输出至第三片上存储单元;
对所述第三片上存储单元的数据进行缓存。
8.根据权利要求7所述的方法,其特征在于,以乒乓操作方式并行执行运算操作以及数据缓存操作。
9.根据权利要求7或8所述的方法,其特征在于,所述方法还包括:
以行为单位存储所述第一片上存储单元上的数据;
以列为单位存储所述第二片上存储单元上的数据。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
以行为单位存储所述第三片上存储单元上的数据。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610894738.6A CN106445471B (zh) | 2016-10-13 | 2016-10-13 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
US15/590,798 US10140251B2 (en) | 2016-10-13 | 2017-05-09 | Processor and method for executing matrix multiplication operation on processor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610894738.6A CN106445471B (zh) | 2016-10-13 | 2016-10-13 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106445471A CN106445471A (zh) | 2017-02-22 |
CN106445471B true CN106445471B (zh) | 2018-06-01 |
Family
ID=58175108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610894738.6A Active CN106445471B (zh) | 2016-10-13 | 2016-10-13 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10140251B2 (zh) |
CN (1) | CN106445471B (zh) |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110337635B (zh) * | 2017-03-20 | 2023-09-19 | 英特尔公司 | 用于点积操作的***、方法和装置 |
CN107168683B (zh) * | 2017-05-05 | 2020-06-09 | 中国科学院软件研究所 | 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 |
CN107168678B (zh) * | 2017-05-09 | 2020-10-27 | 清华大学 | 一种乘加计算装置及浮点乘加计算方法 |
CN109213962B (zh) * | 2017-07-07 | 2020-10-09 | 华为技术有限公司 | 运算加速器 |
WO2019053835A1 (ja) * | 2017-09-14 | 2019-03-21 | 三菱電機株式会社 | 演算回路、演算方法、およびプログラム |
US11138291B2 (en) * | 2017-09-26 | 2021-10-05 | Oracle International Corporation | Assymetric allocation of SRAM and data layout for efficient matrix multiplication |
US10346163B2 (en) | 2017-11-01 | 2019-07-09 | Apple Inc. | Matrix computation engine |
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
CN109992743B (zh) | 2017-12-29 | 2020-06-16 | 华为技术有限公司 | 矩阵乘法器 |
US10528642B2 (en) * | 2018-03-05 | 2020-01-07 | International Business Machines Corporation | Multiple precision integer multiple by matrix-matrix multiplications using 16-bit floating point multiplier |
US10970078B2 (en) | 2018-04-05 | 2021-04-06 | Apple Inc. | Computation engine with upsize/interleave and downsize/deinterleave options |
US10642620B2 (en) | 2018-04-05 | 2020-05-05 | Apple Inc. | Computation engine with strided dot product |
CN112166442B (zh) * | 2018-06-04 | 2023-08-18 | 株式会社索思未来 | 运算方法 |
US10754649B2 (en) | 2018-07-24 | 2020-08-25 | Apple Inc. | Computation engine that operates in matrix and vector modes |
CN110765413B (zh) * | 2018-07-25 | 2024-05-07 | 赛灵思公司 | 矩阵求和结构及神经网络计算平台 |
US10831488B1 (en) | 2018-08-20 | 2020-11-10 | Apple Inc. | Computation engine with extract instructions to minimize memory access |
CN109447257B (zh) * | 2018-09-18 | 2021-08-17 | 复旦大学 | 一种通道自组织的深度神经网络加速芯片的运算装置 |
WO2020061762A1 (zh) * | 2018-09-25 | 2020-04-02 | 深圳市大疆创新科技有限公司 | 数据处理装置和方法 |
CN112840356B (zh) * | 2018-10-09 | 2023-04-11 | 华为技术有限公司 | 运算加速器、处理方法及相关设备 |
CN109522125B (zh) * | 2018-11-19 | 2021-12-03 | 郑州云海信息技术有限公司 | 一种矩阵乘积转置的加速方法、装置及处理器 |
US10762035B1 (en) * | 2019-02-08 | 2020-09-01 | Hewlett Packard Enterprise Development Lp | Matrix tiling to accelerate computing in redundant matrices |
US11139270B2 (en) | 2019-03-18 | 2021-10-05 | Kepler Computing Inc. | Artificial intelligence processor with three-dimensional stacked memory |
CN110147347B (zh) * | 2019-03-18 | 2023-01-06 | 腾讯科技(深圳)有限公司 | 用于矩阵处理的芯片、矩阵处理方法、装置及存储介质 |
US11836102B1 (en) | 2019-03-20 | 2023-12-05 | Kepler Computing Inc. | Low latency and high bandwidth artificial intelligence processor |
US20190228809A1 (en) * | 2019-03-29 | 2019-07-25 | Intel Corporation | Technologies for providing high efficiency compute architecture on cross point memory for artificial intelligence operations |
US10942738B2 (en) * | 2019-03-29 | 2021-03-09 | Intel Corporation | Accelerator systems and methods for matrix operations |
US11844223B1 (en) | 2019-05-31 | 2023-12-12 | Kepler Computing Inc. | Ferroelectric memory chiplet as unified memory in a multi-dimensional packaging |
US11043472B1 (en) | 2019-05-31 | 2021-06-22 | Kepler Compute Inc. | 3D integrated ultra high-bandwidth memory |
US11481471B2 (en) * | 2019-08-16 | 2022-10-25 | Meta Platforms, Inc. | Mapping convolution to a matrix processor unit |
CN112446007A (zh) * | 2019-08-29 | 2021-03-05 | 上海华为技术有限公司 | 一种矩阵运算方法、运算装置以及处理器 |
CN111291323B (zh) * | 2020-02-17 | 2023-12-12 | 南京大学 | 一种基于脉动阵列的矩阵乘法处理器及其数据处理方法 |
CN111339490B (zh) * | 2020-02-18 | 2024-04-19 | 三星(中国)半导体有限公司 | 矩阵乘法计算方法和装置 |
US11347828B2 (en) * | 2020-03-24 | 2022-05-31 | Intel Corporation | Methods, apparatus, articles of manufacture to perform accelerated matrix multiplication |
US20230169144A1 (en) * | 2020-04-21 | 2023-06-01 | Cambricon (Xi'an) Semiconductor Co., Ltd. | Operation method, processor, and related product |
CN111581595B (zh) * | 2020-04-24 | 2024-02-13 | 科大讯飞股份有限公司 | 一种矩阵乘法计算方法及计算电路 |
CN113918879A (zh) * | 2020-07-08 | 2022-01-11 | 华为技术有限公司 | 矩阵运算的方法和加速器 |
CN112182496B (zh) * | 2020-09-24 | 2022-09-16 | 成都海光集成电路设计有限公司 | 用于矩阵乘法的数据处理方法及装置 |
US11556337B2 (en) * | 2021-04-12 | 2023-01-17 | Analog Devices International Unlimited Company | Parallel matrix multiplication technique optimized for memory fetches |
US11791233B1 (en) | 2021-08-06 | 2023-10-17 | Kepler Computing Inc. | Ferroelectric or paraelectric memory and logic chiplet with thermal management in a multi-dimensional packaging |
CN113947200B (zh) * | 2021-12-21 | 2022-03-18 | 珠海普林芯驰科技有限公司 | 神经网络的加速计算方法及加速器、计算机可读存储介质 |
CN115860080B (zh) * | 2023-02-15 | 2023-05-09 | 苏州浪潮智能科技有限公司 | 计算核、加速器、计算方法、装置、设备、介质及*** |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR920006323B1 (ko) * | 1990-05-31 | 1992-08-03 | 삼성전자 주식회사 | 스킵(Skip)배열과 수정형 월리스(Wallace)트리를 사용하는 병렬 승산기 |
US6490608B1 (en) * | 1999-12-09 | 2002-12-03 | Synopsys, Inc. | Fast parallel multiplier implemented with improved tree reduction schemes |
US8984043B2 (en) * | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
CN102411558B (zh) * | 2011-10-31 | 2015-05-13 | 中国人民解放军国防科学技术大学 | 面向向量处理器的大矩阵相乘的向量化实现方法 |
JP5840994B2 (ja) * | 2012-03-27 | 2016-01-06 | 富士通株式会社 | 行列演算装置 |
CN102662623A (zh) * | 2012-04-28 | 2012-09-12 | 电子科技大学 | 基于单fpga的并行矩阵乘法器及其实现方法 |
CN103294648B (zh) * | 2013-05-08 | 2016-06-01 | 中国人民解放军国防科学技术大学 | 支持多mac运算部件向量处理器的分块矩阵乘法向量化方法 |
US9870341B2 (en) * | 2016-03-18 | 2018-01-16 | Qualcomm Incorporated | Memory reduction method for fixed point matrix multiply |
US20180006664A1 (en) * | 2016-06-29 | 2018-01-04 | Altera Corporation | Methods and apparatus for performing reed-solomon encoding by lagrangian polynomial fitting |
-
2016
- 2016-10-13 CN CN201610894738.6A patent/CN106445471B/zh active Active
-
2017
- 2017-05-09 US US15/590,798 patent/US10140251B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN106445471A (zh) | 2017-02-22 |
US20180107630A1 (en) | 2018-04-19 |
US10140251B2 (en) | 2018-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106445471B (zh) | 处理器和用于在处理器上执行矩阵乘运算的方法 | |
KR102443546B1 (ko) | 행렬 곱셈기 | |
US11698773B2 (en) | Accelerated mathematical engine | |
Roy et al. | FPGA-based high-performance parallel architecture for homomorphic computing on encrypted data | |
CN107797962B (zh) | 基于神经网络的计算阵列 | |
JP6987860B2 (ja) | ハードウェアにおけるカーネルストライドの実行 | |
EP3451162B1 (en) | Device and method for use in executing matrix multiplication operations | |
CN106951962A (zh) | 用于神经网络的复合运算单元、方法和电子设备 | |
CN107704267A (zh) | 一种卷积神经网络运算指令及其方法 | |
TW202123093A (zh) | 實行卷積運算的系統及方法 | |
WO2020230374A1 (ja) | 演算装置および演算システム | |
US11763142B2 (en) | General padding support for convolution on systolic arrays | |
Liu et al. | WinoCNN: Kernel sharing Winograd systolic array for efficient convolutional neural network acceleration on FPGAs | |
WO2020014893A1 (zh) | 反卷积实现方法及相关产品 | |
CN112348182A (zh) | 一种神经网络maxout层计算装置 | |
CN113688976A (zh) | 一种神经网络加速方法、装置、设备及存储介质 | |
CN109324984A (zh) | 在卷积运算中使用循环寻址的方法和装置 | |
CN109389213A (zh) | 存储装置及方法、数据处理装置及方法、电子装置 | |
Meng et al. | How to avoid zero-spacing in fractionally-strided convolution? a hardware-algorithm co-design methodology | |
CN103493039A (zh) | 数据处理方法和相关装置 | |
Conceição et al. | Efficient emulation of quantum circuits on classical hardware | |
WO2020059156A1 (en) | Data processing system, method, and program | |
TWI844116B (zh) | 在機器學習硬體加速器處利用資料稀疏性 | |
CN217821651U (zh) | 三维卷积神经网络卷积层的处理装置和处理器 | |
Liang et al. | A CNN Hardware Accelerator in FPGA for Stacked Hourglass Network |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20170222 Assignee: Kunlun core (Beijing) Technology Co.,Ltd. Assignor: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd. Contract record no.: X2021980009778 Denomination of invention: Processor and method for performing matrix multiplication on processor Granted publication date: 20180601 License type: Common License Record date: 20210923 |