CN112434255A - 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 - Google Patents
向量-矩阵运算和数据处理方法、乘法器和处理器芯片 Download PDFInfo
- Publication number
- CN112434255A CN112434255A CN202011405766.XA CN202011405766A CN112434255A CN 112434255 A CN112434255 A CN 112434255A CN 202011405766 A CN202011405766 A CN 202011405766A CN 112434255 A CN112434255 A CN 112434255A
- Authority
- CN
- China
- Prior art keywords
- vector
- register
- matrix
- registers
- elements
- 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.)
- Granted
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 333
- 238000003672 processing method Methods 0.000 title claims abstract description 38
- 239000013598 vector Substances 0.000 claims abstract description 746
- 238000000034 method Methods 0.000 claims abstract description 54
- 101100517651 Caenorhabditis elegans num-1 gene Proteins 0.000 claims description 15
- 238000012546 transfer Methods 0.000 claims description 10
- 239000000047 product Substances 0.000 description 50
- 239000010410 layer Substances 0.000 description 49
- 238000010586 diagram Methods 0.000 description 39
- 230000006870 function Effects 0.000 description 30
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 14
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 14
- 239000000284 extract Substances 0.000 description 6
- 239000013067 intermediate product Substances 0.000 description 5
- 101000720986 Homo sapiens Melanopsin Proteins 0.000 description 4
- 101001137060 Homo sapiens Oligophrenin-1 Proteins 0.000 description 4
- 101000720966 Homo sapiens Opsin-3 Proteins 0.000 description 4
- 101000611338 Homo sapiens Rhodopsin Proteins 0.000 description 4
- 102100025912 Melanopsin Human genes 0.000 description 4
- 102100035592 Oligophrenin-1 Human genes 0.000 description 4
- 102100025909 Opsin-3 Human genes 0.000 description 4
- 102100040756 Rhodopsin Human genes 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 4
- 239000012792 core layer Substances 0.000 description 4
- 238000013135 deep learning Methods 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 4
- 101001086282 Homo sapiens Opsin-5 Proteins 0.000 description 3
- 102100032646 Opsin-5 Human genes 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000009510 drug design Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
Images
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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
一种向量‑矩阵运算方法、数据处理方法、乘法器和处理器芯片。该运算方法包括将第一矩阵和第一向量分别加载到处理器芯片的第一寄存器组包括的多个第一寄存器和第三寄存器中,多个第一寄存器的每个包括多个第一寄存单元;将位于第一寄存器组中的第一矩阵的元素转移到处理器芯片的第二寄存器组包括的多个第二寄存器中,以使得多个第二寄存器的每个被配置为存储位于第一寄存器组中相邻的第一数目列第一寄存单元中的元素,第三寄存器和第二寄存器组中的每个元素均为8位整型;使得多个第二寄存器的每个第二寄存器中的元素的分别与第三寄存器中的元素进行乘加运算,以得到第二向量,其等于第一向量和第一矩阵乘积或者第一矩阵和第一向量的乘积。
Description
技术领域
本公开的实施例涉及一种向量-矩阵运算和数据处理方法、乘法器和处理器芯片。
背景技术
基础线性代数库(basic linear algebra subroutine,BLAS)是线性代数核心子程序的集合,其包括一系列基本线性代数运算函数的接口标准,且已经广泛应用于科学计算和工程领域,是最基本和最重要的数学库之一。
BLAS分为以下三个级别:第一级(Level-1)包含向量与向量之间的运算;第二级(Level-2)包含向量与矩阵之间的运算;第三级(Level-3)级包含矩阵与矩阵的运算。
第二级运算涉及的GEMV公式(函数)如下:Y=αAX+βY,此处,A为矩阵或矩阵的转置,X为向量,Y为累加的结果向量,α和β为标量因子。
发明内容
本公开的至少一个实施例提供了一种基于处理器芯片的向量-矩阵运算方法,所述向量-矩阵运算方法用于第一向量与第一矩阵的乘法运算,包括:将所述第一矩阵加载到所述处理器芯片的第一寄存器组包括的多个第一寄存器中,并将所述第一向量加载到所述处理器芯片的第三寄存器中,其中,所述多个第一寄存器的每个包括多个第一寄存单元;将位于所述第一寄存器组中的所述第一矩阵的元素转移到所述处理器芯片的第二寄存器组包括的多个第二寄存器中,以使得所述多个第二寄存器的每个被配置为存储位于所述第一寄存器组中相邻的第一数目列第一寄存单元中的元素,其中,所述第三寄存器中的每个元素和所述第二寄存器组中的每个元素均为8位整型;以及使得所述多个第二寄存器的每个第二寄存器中的元素的分别与所述第三寄存器中的元素进行乘加运算,以得到第二向量,其中,所述第二向量等于所述第一向量和所述第一矩阵乘积或者所述第一矩阵和所述第一向量的乘积。
本公开的至少一个实施例还提供了一种基于处理器芯片的数据处理方法,其用于对象向量与对象矩阵的乘法运算,且包括:从所述对象向量中提取第i个对象子向量,以及采用本公开的至少一个实施例提供的任一向量-矩阵运算方法依序获取所述第i个对象子向量与所述多个对象子矩阵的乘积,以依序得到多个子乘积向量。所述对象向量包括第二数目个对象子向量,i为大于等于1小于等于所述第二数目的整数,所述对象矩阵包括对应于所述第i个对象子向量的多个对象子矩阵。
本公开的至少一个实施例还提供了一种向量-矩阵乘法器,其用于第一向量和第一矩阵的乘法运算,且包括:第一寄存器组、第三寄存器、第二寄存器组、矩阵转移单元和运算单元。所述第一寄存器组包括多个第一寄存器,且被配置为存储所述第一矩阵,所述多个第一寄存器的每个包括多个第一寄存单元;所述第三寄存器被配置为存储所述第一向量;所述第二寄存器组包括多个第二寄存器,所述第三寄存器中的每个元素和所述第二寄存器组中每个元素均为8位整型;所述矩阵转移单元被配置为将位于所述第一寄存器组中的所述第一矩阵的元素转移到所述第二寄存器组包括的多个第二寄存器中,以使得所述多个第二寄存器的每个被配置为存储位于所述第一寄存器组中相邻的第一数目列第一寄存单元中的元素;以及所述运算单元被配置为使得所述多个第二寄存器的每个第二寄存器中的元素的分别与所述第三寄存器中的元素进行乘加运算,以得到第二向量,其中,所述第二向量等于所述第一向量和所述第一矩阵的乘积或者所述第一矩阵和所述第一向量的乘积。
本公开的至少一个实施例还提供了一种处理器芯片,其包括本公开的至少一个实施例提供的向量-矩阵乘法器。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1是本公开的至少一个实施例提供了一种基于处理器芯片的向量-矩阵运算方法的示意图;
图2是本公开的至少一个实施例提供的第一寄存器组的示意图;
图3是本公开的至少一个实施例提供的第三寄存器的示意图;
图4是本公开的至少一个实施例提供的第二寄存器组的示意图;
图5是图2所示的第一寄存器组的另一个示意图;
图6是图4所示的第二寄存器组的另一个示意图;
图7是本公开的至少一个实施例中针对位于第一寄存器组中第一个和第二个第一寄存器的向量执行第一操作的示意图;
图8是本公开的至少一个实施例中针对位于第一寄存器组中第一个和第二个第一寄存器的向量执行第二操作的示意图;
图9是本公开的至少一个实施例中针对位于第一寄存器组中第三个和第四个第一寄存器的向量执行第一操作的示意图;
图10是本公开的至少一个实施例中针对位于第一寄存器组中第三个和第四个第一寄存器的向量执行第二操作的示意图;
图11是本公开的至少一个实施例中针对第一中间向量和第三中间向量执行第三操作的示意图;
图12是本公开的至少一个实施例中针对第一中间向量和第三中间向量执行第四操作的示意图;
图13是本公开的至少一个实施例中针对第二中间向量和第四中间向量执行第三操作的示意图;
图14是本公开的至少一个实施例中针对第二中间向量和第四中间向量执行第四操作的示意图;
图15-图18示出了本公开的至少一个实施例中针对位于第二寄存器组中第一个至第四个第二寄存器中的向量以及位于第三寄存器中的向量分别执行第五操作以获取四个第三向量的示意图;
图19是本公开的至少一个实施例中针对位于第四个第二寄存器的向量和位于第三寄存器中的向量执行第五操作以获取第四个第三向量的示意图;
图20是本公开的至少一个实施例中针对第五向量以及第一结果子向量执行第七操作的示意图;
图21是本公开的至少一个实施例提供的基于处理器芯片的数据处理方法的示例性流程图;
图22是本公开的至少一个实施例提供的基于处理器芯片的数据处理方法的示例的流程图;
图23是图22中内核层的运算的流程图;
图24是本公开的至少一个实施例提供的向量-矩阵乘法器的示例性框图;以及
图25是本公开的至少一个实施例提供的处理器芯片的示例性框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开的发明人在研究中注意到,对于向量和矩阵之间的运算,目前通常使用32位(bit)浮点精度(FP32,也即,32bit的浮点型);然而,本公开的发明人在研究中注意到,使用32位浮点精度将可能会导致以下问题的至少一项:使得运算性能受到内存带宽的限制(例如,带宽瓶颈);难以充分利用高速缓冲存储器和计算资源;每秒操作数(OPS)较低。
本公开的发明人在研究中还注意到,一些应用领域(例如,诸如低精度深度学习和推理的人工智能领域)对于运算精度要求不高,但对带宽和访存要求很高,因此,可以通过采用较低精度(例如,Int8,8bit的整型,包含有符号和无符号整型)的向量和矩阵之间的运算来更好地使用高速缓存,减少带宽瓶颈,最大限度的利用计算资源。此外,在向量和矩阵的尺寸固定的情况下,通过采用较低精度的运算,可以降低向量-矩阵运算占用的内存,增加单次向量-矩阵运算涉及的元素数目,提升运算速度,降低运算对指令(硬件)的要求,降低向量-矩阵乘法器的面积和功耗占据芯片的面积和芯片功耗。
本公开的发明人在研究中还注意到,在仅仅降低运算精度(例如,采用Int8),但没有针对目标处理器芯片改进向量-矩阵运算方法和向量-矩阵乘法器的情况下,向量-矩阵乘法器的性能提升有限,这是因为,向量-矩阵乘法器无法充分利用目标处理器芯片的硬件资源(例如,缓存行和寄存器)。例如,如果仅采用Int8,开源数据库中的GEMV函数不能充分利用目标处理器芯片的硬件资源。
本公开的至少一个实施例提供了一种向量-矩阵运算方法、数据处理方法、向量-矩阵乘法器和处理器。该向量-矩阵运算方法可以提升向量-矩阵运算性能。
下面通过几个示例和实施例对根据本公开实施例提供的向量-矩阵运算方法进行非限制性的说明,如下面所描述的,在不相互抵触的情况下这些具体示例和实施例中不同特征可以相互组合,从而得到新的示例和实施例,这些新的示例和实施例也都属于本公开保护的范围。
本公开的至少一个实施例提供了一种向量-矩阵运算方法,该向量-矩阵运算方法基于处理器芯片(例如,目标处理器芯片)且用于第一向量X与第一矩阵A的乘法运算,以获得第二向量Y,第二向量Y等于第一向量X和第一矩阵A乘积或者第一矩阵A和第一向量X的乘积。例如,在第一向量X的维数等于第一矩阵A的行向量的数目的情况下,第二向量Y等于第一向量X和第一矩阵A乘积;在第一向量X的维数等于第一矩阵A的列向量的数目的情况下,第二向量Y等于第一矩阵A和第一向量X的乘积。
图1是本公开的至少一个实施例提供了一种基于处理器芯片的向量-矩阵运算方法的示意图。如图1所示,该向量-矩阵运算方法包括以下的步骤S110-步骤S120。
步骤S110:将第一矩阵A加载到处理器芯片的第一寄存器组110包括的多个第一寄存器111中,并将第一向量X加载到处理器芯片的第三寄存器131中。
步骤S120:将位于第一寄存器组110中的第一矩阵A的元素转移到处理器芯片的第二寄存器组120包括的多个第二寄存器121中,以使得多个第二寄存器121的每个被配置为存储位于第一寄存器组110中相邻的第一数目列第一寄存单元111a中的元素。
步骤S120:使得多个第二寄存器121的每个第二寄存器121中的元素的分别与第三寄存器131中的元素进行乘加运算,以得到第二向量;第二向量等于第一向量和第一矩阵乘积或者第一矩阵和第一向量的乘积。
例如,处理器芯片包括第一寄存器组110、第三寄存器131和第二寄存器组120。图2是本公开的至少一个实施例提供的第一寄存器组110的示意图。图3是本公开的至少一个实施例提供的第三寄存器131的示意图。图4是本公开的至少一个实施例提供的第二寄存器组120的示意图。
例如,如图2所示,第一寄存器组110包括多个第一寄存器111,多个第一寄存器111的每个包括多个第一寄存单元111a。例如,如图3所示,第三寄存器131包括多个第三寄存单元131a。例如,如图4所示,第二寄存器组120包括多个第二寄存器121,多个第二寄存器121的每个包括多个第二寄存单元121a。
例如,多个第一寄存器111、多个第二寄存器121和第三寄存器131的每个为向量寄存器。
例如,寄存器包括的多个寄存单元分别用于存储位于寄存器中向量的对应的元素,需要说明的是,寄存器包括的寄存单元更多的是用于更为清楚的示出位于寄存器中向量的元素,在实际中,不需要通过物理上的分隔。例如,寄存器包括的寄存单元的位数可以更改。例如,寄存器包括的寄存单元的位数可以为8位,以用于存储8位数据,寄存器包括的寄存单元的位数也可以为32位,以用于存储32位数据。
例如,多个第一寄存器111的编号连续,多个第二寄存器121的编号连续,由此可以利用基地址寄存器(base register)和偏移量计数器(step counter)快速寻址。
例如,第一寄存器组110、第三寄存器131和第二寄存器组120中的每个元素均为8位整型;对应地,第一寄存器组110、第三寄存器131和第二寄存器组120中的每个元素占据对应的寄存器的空间为8位;多个第一寄存单元111a、多个第三寄存单元131a和多个第二寄存单元121a的每个为8位存储单元。例如,通过使得第一寄存器组110、第三寄存器131和第二寄存器组120(第二寄存器121)中的每个元素均为8位整型,可以允许第一寄存器组110、第三寄存器131和第二寄存器121在向量和矩阵之间的乘法运算中加载更多的矩阵元素或向量元素(例如,使得参与单次向量-矩阵运算的第一矩阵包括更多的矩阵元素),由此使得在处理器芯片的硬件保持不变(没有更新)的情况下,提升向量与矩阵之间的乘法运算的速度。
例如,如图2-图4所示,多个第一寄存器111的每个包括的多个第一寄存单元111a的数目、第三寄存器131包括的多个第三寄存单元131a的数目以及第二寄存器121的每个包括的多个第二寄存单元121a的数目彼此相等(例如,均等于M1)。多个第一寄存器111、第三寄存器131和多个第二寄存单元121a的每个的位数为128位的情况下,多个第一寄存器111的每个包括的多个第一寄存单元111a的数目、第三寄存器131包括的多个第三寄存单元131a的数目以及第二寄存器121的每个包括的多个第二寄存单元121a的数目均等于16,也即,M1=16(128和8的比值)。
例如,如图2-图4所示,第一寄存器组110包括的多个第一寄存器111的数目以及第二寄存器组120包括的多个第二寄存器121的数目彼此相等(例如,均等于N1)。
例如,处理器芯片还包括用于第一向量与第一矩阵乘法运算的缓冲存储器;该向量-矩阵运算方法还包括:基于缓冲存储器的缓存行的尺寸以及多个第一寄存器的每个的位数设置第一寄存器组包括的多个第一寄存器的数目,并使得第一寄存器组110包括的多个第一寄存器111的数目等于缓冲存储器的缓存行的尺寸与多个第一寄存器111的每个的位数的比值。例如,通过使得第一寄存器组110包括的多个第一寄存器111的数目等于缓冲存储器(cache)的缓存行的尺寸与多个第一寄存器111的每个的位数的比值,可以使得缓冲存储器的缓存行存储的矩阵元素的数目等于加载至第一寄存器组110的矩阵元素的数目,由此使得向量和矩阵之间的乘法运算能够更充分的利用处理器芯片的缓冲存储器(例如,提升缓冲存储器的利用率),进而可以提升该处理器芯片执行向量和矩阵之间的乘法运算的性能。
例如,在缓冲存储器的缓存行的尺寸为512位(也即,64字节),且第一至第二寄存单元121a的每个的位数为128位的情况下,第一寄存器组110包括的多个第一寄存器111的数目N1为4(也即,N1=4)。
需要说明的是,本公开的至少一个实施例的示例以缓冲存储器的缓存行的尺寸为512位、第一至第二寄存单元121a的每个的位数为128位、第一寄存器组110包括的多个第一寄存器111的数目N1以及第二寄存器121的每个包括的多个第二寄存单元121a的数目均等于16为例进行示例性说明,但本公开的至少一个实施例不限于此。
例如,第一向量X与第一矩阵A的尺寸(也即,m1和n1的值)可以根据处理器芯片的硬件条件进行设定。例如,m1和n1的分别为大于1的整数。
在第一个示例中,第一向量X可以包括n1个元素,也即,第一向量X的维数为n1;第一矩阵A可以包括n1个行向量,且n1个行向量的每个的维数为m1,第二向量Y等于第一向量X和第一矩阵A乘积,第二向量Y的元素Ys等于第一矩阵A的第s个列向量与第一向量X的乘积,s为大于等于0小于等于m1-1的非负数。
在第二个示例中,第一向量X可以包括n1个元素,第一矩阵A可以包括m1个行向量,且m1个行向量的每个的维数为n1,第二向量Y等于第一矩阵A和第一向量X的乘积,第二向量Y的元素Ys等于第一矩阵A的第s个行向量与第一向量X的乘积,s为大于等于0小于等于m1-1的非负数。
例如,该向量-矩阵运算方法还包括:获取从对象向量中提取的对象子向量,并将对象子向量作为第一向量。例如,对象子向量基于第一寄存器组包括的多个第一寄存器的数目从对象向量中提取。
例如,该向量-矩阵运算方法还包括:获取从对象矩阵中提取的对应于对象子向量的对象子矩阵,并将对象子矩阵作为第一矩阵。例如,对应于对象子向量的对象子矩阵基于第一寄存器组包括的多个第一寄存器的数目以及多个第一寄存器的每个包括的多个第一寄存单元的数目从对象矩阵中提取。
例如,对象子向量的维度小于对象向量的维度。例如,对象子矩阵的尺寸小于对象矩阵的尺寸,例如,对象子矩阵的行向量和列向量的数目分别小于对象矩阵的行向量和列向量的数目。
例如,从对象向量中提取的对象子向量以及从对象矩阵中提取的对应于对象子向量的对象子矩阵的方法可以参见本公开的至少一个实施例提供的数据处理方法,在此不再赘述。
例如,对象子向量的维数等于第一寄存器组包括的多个第一寄存器的数目;对应于对象子向量的对象子矩阵包括多个向量,多个向量的数目等于第一寄存器组包括的多个第一寄存器的数目,多个向量的每个的维数等于多个第一寄存器的每个包括的多个第一寄存单元的数目;此种情况下,第一矩阵包括的多个向量(例如,维数等于m1的向量)的数目(例如,n1)以及第一向量的维度(例如,n1)均等于第一寄存器组110包括的多个第一寄存器111的数目N1(也即,n1=N1),第一矩阵包括的多个向量的每个的维度m1等于多个第一寄存器111的每个包括的多个第一寄存单元111a的数目M1(也即,m1=M1)。
例如,通过使得第一矩阵的尺寸(也即,n1和m1)与第一寄存器组110包括的多个第一寄存器111的数目N1以及多个第一寄存器111的每个包括的多个第一寄存单元111a的数目M1相匹配(例如,完全匹配,也即,n1=N1,m1=M1),可以使得向量和矩阵之间的乘法运算能够更充分的利用处理器芯片的寄存器(例如,提升寄存器的利用率),由此可以提升该处理器芯片执行向量和矩阵之间的乘法运算的性能。
需要说明的是,本公开的至少一个实施例的示例以n1和m1分别等于N1和M1,且N1和M1分别等于4和16进行示例性说明,但本公开的至少一个实施例不限于此。本领域技术人员可以理解,本公开的至少一个实施例提供的向量-矩阵运算方法不限于用于n1和m1分别等于N1和M1的第一矩阵,还可以用于n1和m1与第一寄存器111的尺寸(N1,M1)不完全匹配的第一矩阵(例如,n1和m1分别等于2和15)。例如,对于与第一寄存器111的尺寸(N1,M1)不完全匹配的第一矩阵与第一向量之间的运算可以参见后面的数据处理方法的相关示例,在此不再赘述。
例如,在n1和m1分别等于4和16情况下,上述第一个示例中的第一矩阵A、第一向量X和第二向量Y可以满足以下的表达式。
X1×n1=(X0 X1 X2 X3)
Y1×m1=X1×n1×An1×m1
Y1×m1=(Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Ya Yb Yc Yd Ye Yf)
Ys=X0×As0+X1×As1+X2×As2+X3×As3
此处,字母a、b、c、d、e和f分别表示10、11、12、13、14和15。
例如,在n1和m1分别等于4和16情况下,上述第二个示例中,第一矩阵A、第一向量X和第二向量Y可以满足以下的表达式。
Ys=X0×As0+X1×As1+X2×As2+X3×As3
此处,字母a、b、c、d、e和f分别表示10、11、12、13、14和15。
例如,对于上述第一个示例(也即,在第一向量X的维数为n1,第一矩阵A包括n1个行向量,且n1个行向量的每个的维数为m1的情况下),在步骤S110中,如图2所示,将第一矩阵加载到处理器芯片的第一寄存器组110包括的多个第一寄存器111,包括:将第一矩阵A包括的n1个行向量分别加载至多个第一寄存器111中。
例如,对于上述第二个示例(也即,在第一向量X的维数为n1,第一矩阵A包括m1个行向量,且m1个行向量的每个的维数为n1的情况下),在步骤S110中,如图2所示,将第一矩阵加载到处理器芯片的第一寄存器组110包括的多个第一寄存器111,包括:将第一矩阵A包括的n1个列向量分别加载至多个第一寄存器111中。
例如,如图3所示,在步骤S110中,将第一向量加载到处理器芯片的第三寄存器131中,包括:使得第一向量的第g个元素位于第三寄存器131包括的第(0)×N1+g个、第(1)×N1+g个、……和第(Num1-1)×N1+g个第三寄存单元131a中,此处,g为大于等于1小于等于N1的整数,Num1为第一数目,且第一数目为大于1的正整数。例如,如图2-图4所示,第一数目Num1为大于1的正整数,且等于多个第一寄存器111的每个包括的多个第一寄存单元111a的数目与第一寄存器组110包括的多个第一寄存器111的数目的比值,也即,Num1=M1/N1。例如,在M1和N1等于16和4的情况下,Num1=4。
例如,在第一寄存器组110包括的多个第一寄存器111的数目N1等于4,第一数目Num1等于4的情况下,第一向量的第g个元素位于第三寄存器131包括的第g个、第4+g个、第8+g个和第12+g个第三寄存单元131a中;第一向量的第1个元素X0位于第三寄存器131包括的第1个、第5个、第9个和第13个第三寄存单元131a中。
例如,如图2和图4所示,多个第二寄存器121中的第k个第二寄存器121被配置为存储位于第一寄存器组110中第(k×Num1-Num1+1)列至第(k×Num1)列的元素,此处,k为大于等于1小于等于N1的整数。
图5是图2所示的第一寄存器组110的另一个示意图,图6是图4所示的第二寄存器组120的另一个示意图。
例如,如图5所示,第一寄存器组110包括的多个第一寄存器111分别为第一个第一寄存器a1、第二个第一寄存器a2、第三个第一寄存器a3和第四个第一寄存器a4。例如,如图6所示,第二寄存器组120包括的多个第二寄存器121分别为第一个第二寄存器c1、第二个第二寄存器c2、第三个第二寄存器c3和第四个第二寄存器c4。
例如,如图5和图6所示,在N1和Num1均等于4的情况下,多个第二寄存器121中的第k个第二寄存器ck被配置为存储位于第一寄存器组110中第(4k-3)列至第(4k)列第一寄存单元中的元素;例如,多个第二寄存器121中的第一个第二寄存器c1被配置为存储位于第一寄存器组110中第1列至第4列第一寄存单元中的元素。
例如,多个第二寄存器121的每个包括第一数目(Num1)个寄存单元组,位于第一寄存器组110的第(k×Num1-Num1+1)列的元素,……第(k×Num1)列的元素分别位于多个第二寄存器121中的第k个第二寄存器121的第1个至第Num1个寄存单元组中。
例如,如图5和图6所示,在Num1等于4的情况下,多个第二寄存器121的每个包括四个寄存单元组分别为第一个寄存单元组122a、第二个寄存单元组122b、第三个寄存单元组122c和第四个寄存单元组122d;位于第一寄存器组110的第(4k-3)列的元素、第(4k-2)列的元素,第(4k-1)列的元素和第(4k)列的元素分别位于多个第二寄存器121中的第k个第二寄存器121的第一个寄存单元组的第一个寄存单元组122a、第二个寄存单元组122b、第三个寄存单元组122c和第四个寄存单元组122d中。
例如,如图5和图6所示,位于第一寄存器组110中同一列第一寄存单元111a中的元素在第二寄存器121组中的排序以及在第一寄存器组110中的排序彼此匹配(例如,相同)。例如,如图5和图6所示,位于第一寄存器组110中的第一列的元素在第一寄存器组110中按照A00、A01、A02和A03的顺序排列,位于第一寄存器组110中的第一列的元素在第二寄存器121组中也按照A00、A01、A02和A03的顺序排列。
例如,通过使得多个第二寄存器121的每个被配置为存储位于第一寄存器组110中相邻的第一数目列第一寄存单元111a中的元素,可以在针对第二寄存器中的向量和第三寄存器131中的元素进行乘加运算操作时,同时针对第一数目组(例如,4组)执行向量-向量的乘加运算操作,由此可以提升运算性能。
例如,在步骤S120中,可以基于第一操作、第二操作、第三操作和第四操作将位于第一寄存器组110中的第一矩阵的元素转移到处理器芯片的第二寄存器组120包括的多个第二寄存器121中,
例如,在步骤S120中,将位于第一寄存器组110中的第一矩阵的元素转移到处理器芯片的第二寄存器组120包括的多个第二寄存器121中包括以下的步骤S131-S128。
图7是本公开的至少一个实施例中针对位于第一寄存器组110中第一个和第二个第一寄存器111的向量执行第一操作的示意图;图8是本公开的至少一个实施例中针对位于第一寄存器组110中第一个和第二个第一寄存器111的向量执行第二操作的示意图;图9是本公开的至少一个实施例中针对位于第一寄存器组110中第三个和第四个第一寄存器111的向量执行第一操作的示意图;图10是本公开的至少一个实施例中针对位于第一寄存器组110中第三个和第四个第一寄存器111的向量执行第二操作的示意图;图11是本公开的至少一个实施例中针对第一中间向量IM1和第三中间向量IM3执行第三操作的示意图;图12是本公开的至少一个实施例中针对第一中间向量IM1和第三中间向量IM3执行第四操作的示意图;图13是本公开的至少一个实施例中针对第二中间向量IM2和第四中间向量IM4执行第三操作的示意图;图14是本公开的至少一个实施例中针对第二中间向量IM2和第四中间向量IM4执行第四操作的示意图。下面结合图5-图14对步骤S120进行示例性说明。
例如,在步骤S120中,将位于第一寄存器组110中的第一矩阵的元素转移到处理器芯片的第二寄存器组120包括的多个第二寄存器121中包括以下的步骤S131-S128。
步骤S131:针对位于第一寄存器组110中第一个第一寄存器a1和第二个第一寄存器a2的向量执行第一操作OPN1,以将位于第一寄存器组110中第一个第一寄存器a1的低64位的元素(例如,位于第一个第一寄存器a1的前8个第一寄存单元111a的元素)作为第一中间向量IM1的奇数个元素(例如,第一中间向量IM1的第1、3、5、7、9、11、13和15个元素,记为IM1_ODD),并将位于第一寄存器组110中第二个第一寄存器a2的低64位的元素(例如,位于第二个第一寄存器a2的前8个第一寄存单元111a的元素)作为第一中间向量IM1的偶数个元素(例如,第一中间向量IM1的第2、4、6、8、10、12、14和16个元素,记为IM1_EVEN)(参见图7)。
步骤S122:针对位于第一寄存器组110中第一个第一寄存器a1和第二个第一寄存器a2的向量执行第二操作OPN2,以将位于第一寄存器组110中第一个第一寄存器a1的高64位的元素(例如,位于第一个第一寄存器a1的后8个第一寄存单元111a的元素)作为第二中间向量IM2的奇数个元素(例如,第二中间向量IM2的第1、3、5、7、9、11、13和15个元素,记为IM2_ODD),并将位于第一寄存器组110中第二个第一寄存器a2的高64位的元素(例如,位于第二个第一寄存器a2的后8个第一寄存单元111a的元素)作为第二中间向量IM2的偶数个元素(例如,第二中间向量IM2的第2、4、6、8、10、12、14和16个元素,记为IM2_EVEN)(参见图8)。
步骤S123:针对位于第一寄存器组110中第三个第一寄存器a3和第四个第一寄存器a4的向量执行第一操作OPN1,以将位于第一寄存器组110中第三个第一寄存器a3的低64位的元素(例如,位于第三个第一寄存器a3的前8个第一寄存单元111a的元素)作为第三中间向量IM3的奇数个元素(例如,第三中间向量IM3的第1、3、5、7、9、11、13和15个元素,记为IM3_ODD),并将位于第一寄存器组110中第四个第一寄存器a4的低64位的元素(例如,位于第四个第一寄存器a4的前8个第一寄存单元111a的元素)作为第三中间向量IM3的偶数个元素(例如,第三中间向量IM3的第2、4、6、8、10、12、14和16个元素,记为IM3_EVEN)(参见图9)。
步骤S124:针对位于第一寄存器组110中第三个第一寄存器a3和第四个第一寄存器a4的向量执行第二操作OPN2,以将所位于述第一寄存器组110中第三个第一寄存器a3的高64位的元素(例如,位于第三个第一寄存器a3的后8个第一寄存单元111a的元素)作为第四中间向量IM4的奇数个元素(例如,第四中间向量IM4的第1、3、5、7、9、11、13和15个元素,记为IM4_ODD),并将位于第一寄存器组110中第四个第一寄存器a4的高64位的元素(例如,位于第四个第一寄存器a4的后8个第一寄存单元111a的元素)作为第四中间向量IM4的偶数个元素(例如,第四中间向量IM4的第2、4、6、8、10、12、14和16个元素,记为IM4_EVEN)(参见图10)。
步骤S125:针对第一中间向量IM1和第三中间向量IM3执行第三操作OPN3,以基于位于第一中间向量IM1所在寄存器的低64位的元素以及位于第三中间向量IM3所在寄存器的低64位的元素获得第五中间向量IM5,并将第五中间向量IM5写入至第二寄存器组120的第一个第二寄存器c1中(参见图11)。
例如,如图11所示,在步骤S125中,针对第一中间向量IM1和第三中间向量IM3执行第三操作包括:使得位于第一中间向量IM1所在的寄存器的第一个至第四个16位(例如,第1-8个寄存单元中)的元素分别作为位于第五中间向量IM5所在的寄存器的第一个16位(例如,第1-2个寄存单元中)、第三个16位(例如,第5-6个寄存单元中)、第五个16位(例如,第9-10个寄存单元)和第七个16位(例如,第13-14个寄存单元中)的元素;使得位于第三中间向量IM3所在的寄存器的第一个至第四个16位的元素分别作为位于第五中间向量IM5所在的寄存器的第二个16位(例如,第3-4个寄存单元)、第四个16位(例如,第7-8个寄存单元)、第六个16位(例如,第11-12个寄存单元)和第八个16位(例如,第15-16个寄存单元)的元素。例如,如图11所示,第五中间向量IM5所在的寄存器的第一个、第三个、第五个和第七个16位记为IM5_ODD16;第五中间向量IM5所在的寄存器的第二个、第四个、第六个和第八个16位记为IM5_EVEN16。
步骤S126:针对第一中间向量IM1和第三中间向量IM3执行第四操作OPN4,以基于位于第一中间向量IM1所在寄存器的高64位的元素以及位于第三中间向量IM3所在寄存器的高64位的元素获得第六中间向量IM6,并将第六中间向量IM6写入至第二寄存器组120的第二个第二寄存器c2中(参见图12)。
例如,如图12所示,在步骤S126中,针对第一中间向量IM1和第三中间向量IM3执行第四操作包括:使得位于第一中间向量IM1所在的寄存器的第五个至第八个16位的元素(例如,第9-16个寄存单元)分别作为位于第六中间向量IM6所在的寄存器的第一个、第三个、第五个和第七个16位(例如,第六中间向量IM6所在的寄存器的第1-2、5-6、9-10和13-14个寄存单元)的元素;使得位于第三中间向量IM3所在的寄存器的第五个至第八个16位的元素分别作为位于第六中间向量IM6所在的寄存器的第二个、第四个、第六个和第八个16位(例如,第六中间向量IM6所在的寄存器的第3-4、7-8、11-12和15-16个寄存单元)的元素。例如,如图12所示,第六中间向量IM6所在的寄存器的第一个、第三个、第五个和第七个16位记为IM6_ODD16;第六中间向量IM6所在的寄存器的第二个、第四个、第六个和第八个16位记为IM6_EVEN16。
步骤S127:针对第二中间向量IM2和第四中间向量IM4执行第三操作OPN3,以基于位于第二中间向量IM2所在寄存器的低64位的元素以及位于第四中间向量IM4所在寄存器的低64位的元素获得第七中间向量IM7,并将第七中间向量IM7写入至第二寄存器组120的第三个第二寄存器c3中(参见图13)。
例如,如图13所示,在步骤S127中,针对第二中间向量IM2和第四中间向量IM4执行第三操作包括:使得位于第二中间向量IM2所在的寄存器的第一个至第四个16位的元素分别作为位于第七中间向量IM7所在的寄存器的第一个、第三个、第五个和第七个16位(例如,第七中间向量IM7所在的寄存器的第1-2、5-6、9-10和13-14个寄存单元)的元素;使得位于第四中间向量IM4所在的寄存器的第一个至第四个16位的元素分别作为位于第七中间向量IM7所在的寄存器的第二个、第四个、第六个和第八个16位(例如,第七中间向量IM7所在的寄存器的第3-4、7-8、11-12和15-16个寄存单元)的元素。例如,如图13所示,第七中间向量IM7所在的寄存器的第一个、第三个、第五个和第七个16位记为IM7_ODD16;第七中间向量IM7所在的寄存器的第二个、第四个、第六个和第八个16位记为IM7_EVEN16。
步骤S128:针对第二中间向量IM2和第四中间向量IM4执行第四操作OPN4,以基于位于第二中间向量IM2所在寄存器的高64位的元素以及位于第四中间向量IM4所在寄存器的高64位的元素获得第八中间向量IM8,并将第八中间向量IM8写入至第二寄存器组120的第四个第二寄存器c4中(参见图14)。
例如,如图14所示,在步骤S128中,针对第二中间向量IM2和第四中间向量IM4执行第四操作包括:使得位于第二中间向量IM2所在的寄存器的第五个至第八个16位的元素分别作为位于第八中间向量IM8所在的寄存器的第一个、第三个、第五个和第七个16位(例如,第八中间向量IM8所在的寄存器的第1-2、5-6、9-10和13-14个寄存单元)的元素;使得位于第四中间向量IM4所在的寄存器的第五个至第八个16位的元素分别作为位于第八中间向量IM8所在的寄存器的第二个、第四个、第六个和第八个16位(例如,第八中间向量IM8所在的寄存器的第3-4、7-8、11-12和15-16个寄存单元)的元素。例如,如图14所示,第八中间向量IM8所在的寄存器的第一个、第三个、第五个和第七个16位记为IM8_ODD16;第八中间向量IM8所在的寄存器的第二个、第四个、第六个和第八个16位记为IM8_EVEN16。
例如,可以使用VPUNPCKLBW指令实现第一操作OPN1,可以使用VPUNPCKHBW指令实现第二操作OPN2,可以使用VPUNPCKLWD指令实现第三操作OPN3,可以使用VPUNPCKHWD指令实现第四操作OPN4。例如,使用VPUNPCKLBW指令、VPUNPCKHBW指令、VPUNPCKLWD指令和VPUNPCKHWD指令分别实现第一操作OPN1、第二操作OPN2、第三操作OPN3和第四操作OPN4的具体方法可以参见相关技术文档,在此不再赘述。例如,VPUNPCKLBW指令、VPUNPCKHBW指令、VPUNPCKLWD指令和VPUNPCKHWD指令与以下网络链接中的UNPCKLBW指令、PUNPCKHBW指令、PUNPCKLWD指令和PUNPCKHWD指令的功能相同或相似:https://www.felixcloutier.com/x86/index.html。
例如,VPUNPCKLBW指令、VPUNPCKHBW指令、VPUNPCKLWD指令和VPUNPCKHWD可以是SIMD指令,因此,在针对多个第一寄存器111中第一个和第二个第一寄存器111的向量执行第一操作的同时针对多个第一寄存器111中第三个和第四个第一寄存器111的向量执行第一操作;在针对多个第一寄存器111中第一个和第二个第一寄存器111的向量执行第二操作的同时针对多个第一寄存器111中第三个和第四个第一寄存器111的向量执行第二操作;在针对第一中间向量IM1和第三中间向量IM3执行第三操作的同时针对第二中间向量IM2和第四中间向量IM4执行第三操作;在针对第一中间向量IM1和第三中间向量IM3执行第四操作的同时针对第二中间向量IM2和第四中间向量IM4执行第四操作,由此可以进一步地提升向量-矩阵运算速度。
例如,可以使得VPUNPCKLBW指令和VPUNPCKHBW指令同时被执行,并使得VPUNPCKLWD指令和VPUNPCKHWD同时被执行,由此可以进一步地提升向量-矩阵运算速度。
例如,在步骤S120中,可以基于第五操作和第六操作得到第二向量。下面结合图15-图18进行示例性说明。
例如,在步骤S120中,使得多个第二寄存器121的每个第二寄存器121中的元素的分别与第三寄存器131中的元素进行乘加运算,以得到第二向量,包括以下的步骤S121和步骤S122。
步骤S121:针对位于每个第二寄存器121中的向量以及位于第三寄存器131中的向量执行第五操作(例如,8位乘加操作),以获取四个第三向量。
步骤S122:针对每个第三向量以及第四向量执行第六操作(例如,16位乘加操作),以获取四个第五向量。
图15-图18示出了本公开的至少一个实施例中针对位于第二寄存器121组中第一个至第四个第二寄存器121中的向量以及位于第三寄存器131中的向量分别执行第五操作以获取四个第三向量的示意图。例如,如图15-图18所示,四个第三向量分别为第一个第三向量v3a、第二个第三向量v3b、第三个第三向量v3c和第四个第三向量v3d。
例如,在步骤S121中,针对位于第二寄存器121组中第一个至第四个第二寄存器121中的向量以及位于第三寄存器131中的向量分别执行第五操作以获取四个第三向量,包括:针对位于第二寄存器121组包括的四个第二寄存器121的每个执行以下的步骤S121a和步骤S121b。
步骤S121a:使得第二寄存器121的多个元素与第三寄存器131的多个元素分别相乘,以得到中间乘积向量。
步骤S121b:将中间乘积向量中相邻的两个元素相加,以获得第三向量。
例如,如图15-图18所示,每个第三向量的维度等于位于对应的第二寄存器121中的向量的维度的一半。例如,在第二寄存器121中的向量的维度为16的情况下,针对位于该第二寄存器121中的向量以及位于第三寄存器131中的向量执行第五操作获得的第三向量的维度等于8。
例如,第三向量和第四向量所在的寄存器中的每个元素所占据的空间是第二寄存器121中的每个元素所占据的空间的2倍。例如,在第二寄存器121中的每个元素所占据的空间为8位的情况下,第三向量所在的寄存器中的每个元素所占据的空间为16位。
下面结合图19对第二寄存器121组中第四个第二寄存器121中的向量以及位于第三寄存器131中的向量执行第五操作以获取第四个第三向量进行示例性说明。
图19是本公开的至少一个实施例中针对位于第四个第二寄存器121的向量和位于第三寄存器131中的向量执行第五操作以获取第四个第三向量的示意图。如图19所述,在对位于第四个第二寄存器121的向量和位于第三寄存器131中的向量执行第五操作后,第四个第二寄存器121的多个元素与第三寄存器131的多个元素分别相乘,以得到中间乘积向量vre,中间乘积向量vre中每相邻的两个元素相加(例如,第1-2个元素相加,……第15-16个元素相加)得到的和作为第三向量的对应的元素。
需要说明的是,图19仅用于更好的说明第五操作的功能,在实际中,执行第五操作后可以直接得到第四个第三向量,而不输出中间乘积向量vre。
图15-图18还分别示出了本公开的至少一个实施例中针对第一至第四个第三向量以及第四向量分别执行第六操作,以获取四个第五向量的示意图。例如,如图15-图18所示,四个第五向量分别为第一个第五向量v5a、第二个第五向量v5b、第三个第五向量v5c和第四个第五向量v5d。
例如,第四向量的维度等于每个第三向量的维度,且等于第五向量的维度的两倍,第四向量的每个元素的值为1。
例如,第四向量所在的寄存器中的每个元素所占据的空间是第三向量所在的寄存器中的每个元素所占据的空间的2倍。例如,在第三向量所在的寄存器中的每个元素所占据的空间为16位的情况下,第三向量所在的寄存器中的每个元素所占据的空间为32位。
例如,在步骤S122中,通过针对每个第三向量以及第四向量执行第六操作,可以使得每个第三向量中每相邻的两个元素彼此相加得到和分别作为第五向量的对应的元素。例如,在步骤S122中,针对每个第三向量以及第四向量执行第六操作包括使得每个第三向量和第四向量分别相乘以得到每个第三向量和第四向量的乘积向量,并将每个第三向量和第四向量的乘积向量中每相邻的两个元素彼此相加得到和分别作为第五向量的对应的元素。
例如,如图15-图18所示,第二向量包括四个第五向量,第二向量的维度等于多个第一寄存器111的每个包括的多个第一寄存单元111a的数目。
例如,可以将第二向量与第一结果向量相加,并使用第二向量与第一结果向量的和更新第一结果向量。例如,第一结果向量包括四个第一结果子向量,四个第一结果子向量分别对应于第二向量包括的四个第五向量;可以使用四个第五向量的每个与四个第一结果子向量中对应的第一结果子向量的和更新第一结果子向量。
例如,可以基于第七操作OPN7(例如,32位累加操作)获取四个第五向量的每个与四个第一结果子向量中对应的第一结果子向量的和。
图20是本公开的至少一个实施例中,针对第一个第五向量以及对应于第一个第五向量的第一结果子向量执行第七操作OPN7获取第一个第五向量以及对应于第一个第五向量的第一结果子向量的和的示意图。
例如,如图20所示,可以基于第七操作OPN7获取第一个第五向量的每个与对应于第一个第五向量的第一结果子向量(y0,y1,y2,y3)的和。
例如,可以使用VPMADDUBSW指令实现第五操作OPN5,可以使用VPMADDWD指令实现第六操作OPN6,可以使用VPADDD指令实现第七操作OPN7。例如,使用VPMADDUBSW指令(例如,8位乘加指令)、VPMADDWD指令(例如,16位乘加指令)和VPADDD指令(例如,32位累加指令)分别实现第五操作OPN5、第六操作OPN6和第七操作OPN7的具体方法可以参见相关技术文档,在此不再赘述。
例如,VPMADDUBSW指令、VPMADDWD指令和VPADDD指令与以下网络链接中的PMADDUBSW指令、PMADDWD指令和PADDD指令的功能相同或相似:https://www.felixcloutier.com/x86/index.html。
例如,VPMADDUBSW指令、VPMADDWD指令和VPADDD指令可以是SIMD指令,因此,可以针对位于四个第二寄存器121中的向量以及位于第三寄存器131中的向量同时执行第五操作(例如,利用VPMADDUBSW指令),四个第三向量以及第四向量同时执行第六操作(例如,利用VPMADDWD指令),针对四个第五向量与四个第一结果子向量同时执行第七操作(例如,利用VPADDD指令),由此可以进一步地提升向量-矩阵运算速度。
例如,可以使得第一操作至第七操作以及相关操作按照以下的顺序执行:第一向量预取操作、第一矩阵预取操作、第一操作+第二操作(也即,第一操作和第二操作同时被执行),第三操作+第四操作(也即,第三操作和第四操作同时被执行)、第五操作、第六操作、第一结果向量预取操作、第七操作、运算结果写入操作。本公开的发明人注意到,通过采用上述顺序,可以优化向量-矩阵运算性能(例如,实现最高性能),如果后续相关操作(例如,编译)改变上述执行顺序,可能会导致向量-矩阵运算性能劣化。
例如,可以使用汇编指令实现第一操作至第七操作以及相关操作,由此可以避免指令被重排,也即,使得上述第一操作至第七操作以及相关操作的执行顺序固定为上述顺序,进而可以避免后续相关操作(例如,编译)可能导致向量-矩阵运算性能劣化的问题。
例如,本公开的至少一个实施例提供的向量-矩阵运算方法以缓冲存储器的缓存行的尺寸为512位(也即,64字节)、第一至第二寄存单元121a的每个的位数为128位以及寄存单元为8位存储空间为例进行示例性说明,但本公开的至少一个实施例不限于此。例如,在多个第一寄存器111、第三寄存器131和多个第二寄存单元121a的每个的位数为256位的情况下,缓冲存储器的缓存行的尺寸为512位以及寄存单元为8位存储空间,N1和M1可以分别等于2和32;此种情况下,可以将位于第一寄存器组110中的第一矩阵A的元素转移到处理器芯片的第二寄存器组120包括的多个第二寄存器121中,以使得多个第二寄存器121的每个被配置为存储位于第一寄存器组110中相邻的两列第一寄存单元111a中的元素,然后使得多个第二寄存器121的每个第二寄存器121中的元素的分别与第三寄存器131中的元素进行乘加运算,以得到第二向量,具体方法可以参照前述的示例,在此不再赘述。
本公开的至少一个实施例还提供了一种基于处理器芯片的数据处理方法。该数据处理方法用于对象向量与对象矩阵的乘法运算。
例如,该数据处理方法利用本公开的至少一个实施例提供的向量-矩阵运算方法获取具有更大尺寸(例如,任意尺寸)的对象向量和对象矩阵的乘积。例如,该数据处理方法基于目标处理器芯片的硬件参数,从对象向量和对象矩阵中分别提取与目标处理器芯片的硬件参数相匹配的对象子向量和对象子矩阵,并将对象子向量和对象子矩阵分别作为第一向量和第一矩阵,利用本公开的至少一个实施例提供的向量-矩阵运算方法获取第一向量和第一矩阵的乘积,第一向量和第一矩阵的乘积用于获取对象向量和对象矩阵的乘积。
图21是本公开的至少一个实施例提供的基于处理器芯片的数据处理方法的示例性流程图。例如,如图21所示,该数据处理方法包括以下的步骤S210和步骤S220。
步骤S210:从对象向量XX中提取第i个对象子向量x。例如,对象向量XX包括第二数目t个对象子向量x,i为大于等于1小于等于第二数目t的整数。对象矩阵AA包括对应于第i个对象子向量xi的多个对象子矩阵R。
步骤S220:采用本公开的至少一个实施例提供的任一向量-矩阵运算方法依序获取第i个对象子向量x与对象矩阵AA包括的对应于第i个对象子向量的多个对象子矩阵R的乘积,以依序得到多个子乘积向量。
例如,在步骤S210中,对象矩阵包括对应于第i个对象子向量的多个对象子矩阵是指与第i个对象子向量进行乘法运算的对象子矩阵。例如,对应于第i个对象子向量的多个对象子矩阵的数目等于多个子乘积向量的数目(例如,均等于下面的s)。
例如,对象向量XX的维数等于对象矩阵AA包括的列向量的数目或者对象矩阵AA包括的行向量的数目。为清楚起见,下面以对象向量XX的维数等于对象矩阵AA包括的列向量的数目对本公开的至少一个实施例提供的任一向量-矩阵运算方法进行示例性说明。
例如,对象矩阵AA包括的列向量的数目n等于对象向量XX的维数n,对象向量包括第二数目t个对象子向量,对象矩阵AA包括s×t个对象子矩阵,s×t个对象子矩阵位于s行t列;对象子向量x的维数以及对应于该对象子向量x的对象子矩阵R包括的列向量的数目彼此相等,且均等于v;对象子向量x的对象子矩阵R包括的v个列向量的每个的维数为u。此处,s、t、u和v为大于1的整数。
例如,对象矩阵AA、对象向量XX、对象乘积向量YY、对象子矩阵R、对象子向量x和对象子乘积向量满足以下的表达式。
yyu×1=Ru×v×xv×1
例如,对象向量包括第i个对象子向量xi(i为大于等于1小于等于第二数目t的整数),对象矩阵AA包括的对应于第i个对象子向量xi多个对象子矩阵R位于对象矩阵的相同的多个列向量中。例如,对应于第i个对象子向量xi多个对象子矩阵(也即,与第i个对象子向量xi进行乘法运算的多个对象子矩阵)为R1i、R2i……Rsi。
例如,i从1按照1的步长逐步增长至第二数目t;针对i的每个值,j从1按照1的步长逐步增长至s(也即,对应于第i个对象子向量的多个对象子矩阵的数目),也即,i对应于外层循环、j对应于内层循环,此种情况下,相比于将j和i分别作为外层循环和内层循环的示例,可以同时计算更多的第一向量和第一矩阵的乘积,由此可以进一步地提升运算性能。
例如,可以通过执行以下的子步骤实现步骤S220,首先,采用前述的向量-矩阵运算方法依序获取第1个对象子向量x1与对象矩阵AA包括的对应于对象子向量x1的多个对象子矩阵(也即,R11、R21,…,Rs1)的乘积,以依序得到多个子乘积向量(也即,R11×x1,R21×x1,…,Rs1×x1);然后,获取第2个对象子向量x2与对象矩阵AA包括的对应于对象子向量x2的多个对象子矩阵(也即,R12、R22,…,Rs2)的乘积,以依序得到多个子乘积向量(也即,R12×x2,R22×x2,……,Rs2×x2);……;最后,获取第t个对象子向量xt与对象矩阵AA包括的对应于对象子向量xt的多个对象子矩阵(也即,R1t、R2t……Rst)的乘积,以依序得到多个子乘积向量(也即,R1t×xt,R2t×xt,……,Rst×xt)。
例如,该数据处理方法包括以下的步骤S230-步骤S250。
步骤S230:加载对象结果向量。例如,对象结果向量包括多个子对象结果向量;多个子对象结果向量的数目与多个子乘积向量的数目彼此相等(例如,均等于s);多个子对象结果向量分别对应于多个子乘积向量。
步骤S240:使用多个子乘积向量中第j个子乘积向量与多个子对象结果向量中第j个子对象结果向量的和更新第j个对象结果向量。例如,可以使用前述的第七操作实现步骤S240,在此不再赘述。
步骤S250:将对象结果向量的最终结果作为对象向量和对象矩阵的乘积,也即,对象乘积向量YY。
例如,在步骤S230中,在i=1时,加载的对象结果向量为(0,0,…,0);在执行步骤S240之后,更新后的对象结果向量为(R11×x1,R21×x1,…,Rs1×x1);在i=2时,加载的对象结果向量为(R11×x1,R21×x1,…,Rs1×x1);在执行步骤S240之后,更新后的对象结果向量为(R11×x1+R12×x2,R21×x1+R22×x2,…,Rs1×x1+Rs2×x2);……;在i=t时,在执行步骤S240之后,更新后的对象结果向量为(R11×x1+R12×x2+…+R1t×xt,R21×x1+R22×x2+…+R2t×xt,…,Rs1×x1+Rs2×x2+…+Rst×xt)。
例如,在步骤S250中,对象结果向量的最终结果是指:i=t且执行步骤S240之后获得的更新后的对象结果向量,此处,对象结果向量的最终结果(也即,对象乘积向量YY)为(R11×x1+R12×x2+…+R1t×xt,R21×x1+R22×x2+…+R2t×xt,…,Rs1×x1+Rs2×x2+…+Rst×xt)。
例如,步骤S220包括以下的步骤S221和步骤S222。
步骤S221:将第i个对象子向量以及多个对象子矩阵中第j个对象子矩阵分别作为第一向量和第一矩阵,此处,j为大于等于1小于等于s(也即,对应于第i个对象子向量的多个对象子矩阵的数目)的整数。
步骤S222:采用本公开的至少一个实施例提供的任一向量-矩阵运算方法获取第i个对象子向量与多个对象子矩阵中第j个对象子矩阵的乘积,以得到多个子乘积向量中第j个子乘积向量。
例如,可以基于处理器芯片的硬件条件设定个对象子矩阵和对象子向量的尺寸。
例如,可以使得对象向量包括的t个对象子向量的至少部分对象子向量(例如,t个或t-1个对象子向量)的维度v等于处理器芯片的第一寄存器组110包括的多个第一寄存器111的数目N1,并可以使得对象矩阵包括的多个个对象子矩阵的至少部分对象子矩阵(例如,全部对象子矩阵;又例如,对象矩阵包括的多个个对象子矩阵中除最后一列或/和最后一行对象子矩阵之外的所有对象子矩阵)的包括的v个向量的每个的维度u等于多个第一寄存器111的每个包括的第一寄存单元111a的数目M1。例如,在N1和M1分别等于4和16的情况下,v和u分别等于4和16。
例如,在对象向量的维数不等于v(例如,4)的整数倍时,除最后一个对象子向量之外,其它对象子向量的维数均等于v,对应地,对象矩阵包括的多个个对象子矩阵中除最后一列对象子矩阵之外的所有对象子矩阵的列向量的数目均等于v,此种情况下,可以提升处理器芯片的寄存器和缓冲存储器的利用率。
例如,在对象矩阵的行向量的数目m不等于u(例如,16)的整数倍时,除最后一行对象子矩阵之外,其它对象子矩阵包括的行向量的数目均等于u,此种情况下,可以提升处理器芯片的寄存器和缓冲存储器的利用率。
例如,在对象子矩阵和对象子向量的至少一个的尺寸与处理器芯片的硬件条件不匹配(例如,v不等于4和/或u不等于16)的情况下,可以通过采用适用的处理方式使得前述的向量-矩阵运算方法可以用于计算与处理器芯片的硬件条件不完全匹配的对象子向量-对象子矩阵的乘法运算。
例如,在u和v分别等于15和2的情况下,在步骤S222中,可以在将第一矩阵(也即,对象子矩阵)和第一向量(也即,对象子向量)分别加载至第一寄存器组110和第三寄存器131的过程中,使得第三寄存器131中对应于X2和X3的第三寄存单元131a中的数据等于零,并使得第一寄存器组110中第16列第一寄存单元111a中的数据等于零;然后,将第二向量的前15个元素作为对应于该对象子向量和对象子矩阵的子乘积向量。
例如,该数据处理方法还包括判断存储在内存中的对象向量中的元素是否无符号;如果存储在内存中的对象向量中的元素为有符号,则将对象向量中的元素转换为无符号后再执行步骤S210以及后续步骤;对应地,在获取对象结果向量后,将对象结果向量转换中的元素转换为有符号再写入内存。
在另一个示例中,对象矩阵AA包括的行向量的数目n等于对象向量XX的维数n,对象向量包括第二数目t个对象子向量,对象矩阵AA包括t×s个对象子矩阵,t×s个对象子矩阵位于t行s列;对象子向量x的维数以及对应于该对象子向量x的对象子矩阵R包括的行向量的数目彼此相等,且均等于v;该对象子矩阵R包括的行向量的每个的维数为u。此处,s、t、u和v为大于1的整数。
例如,在另一个示例中,对象矩阵AA、对象向量XX、对象乘积向量YY、对象子矩阵R、对象子向量x和对象子乘积向量满足以下的表达式,此处,“T”表示向量的转置。
yy1×u=x1×v×Rv×u
例如,在另一个示例中,对象向量包括第i个对象子向量xi(i为大于等于1小于等于第二数目t的整数),对象矩阵AA包括的对应于第i个对象子向量xi多个对象子矩阵R位于对象矩阵的相同的多个行向量中;对应于第i个对象子向量xi多个对象子矩阵(也即,与第i个对象子向量xi进行乘法运算的多个对象子矩阵)为Ri1、Ri2……Ris。
例如,对于对象向量XX的维数等于对象矩阵AA包括的行向量的数目n的对象向量与对象矩阵的乘法运算的具体方法可以参见对象向量XX的维数等于对象矩阵AA包括的列向量的数目的对象向量与对象矩阵的乘法运算的具体方法,在此不再赘述。
例如,本公开的至少一个实施例提供的基于处理器芯片的数据处理方法可用于实现GEMV函数或数学库(低精度INT8的GEMV函数或数学库);该数据处理方法针对预定的处理器芯片对对象向量-对象矩阵的乘法运算算法进行了优化,由此可以提升对象向量-对象矩阵的乘法运算的性能(例如,实现高性能)。
例如,本公开的至少一个实施例提供的数据处理方法利用了SIMD指令、循环展开、软件流水线、避免指令被重排、寄存器分块、矩阵分块、合理设计软件框架等技术中的至少一项,通过适当降低运算精度提升了运算速度以及硬件资源的利用率。例如,通过采用上述的全部技术之后,可以使得目标处理器芯片对对象向量-对象矩阵的乘法运算的性能最大化。
例如,本公开的至少一个实施例提供的数据处理方法可以内嵌汇编的形式实现,采用内嵌汇编比纯汇编更便于移植,并比纯C语言的intrinsic函数在核心算法中更充分的控制指令的调度和寄存器的分配(这是因为内嵌汇编可以避免优化后的指令顺序被重排)。
例如,本公开的至少一个实施例提供的数据处理方法针对目标处理器芯片,通过采用循环展开和避免指令被重排等方法,提高了(相比于FP32较大提升)目标处理器芯片对于计算密集型函数(GEMV函数)的运行性能。例如,在不同的矩阵规模下,低精度INT8类型的GEMV(有符号INT8矩阵和无符号INT8向量)的运算速度比FP32类型的GEMV高80%左右,低精度INT8类型的GEMV(有符号INT8矩阵和有符号INT8向量)的运算速度比FP32类型的GEMV高40%左右。
例如,本公开的至少一个实施例提供的数据处理方法适用于精度要求不高但对带宽和访存要求更高的人工智能等领域;例如,本公开的至少一个实施例提供的数据处理方法适用于深度学习场景涉及的对象向量-对象矩阵的乘法运算。例如,该数据处理方法为深度学习中卷积和池化层矩阵运算提供可靠并且高性能的GEMV接口。例如,本公开的至少一个实施例提供的数据处理方法可以提升做在目标处理器芯片上进行低精度深度学习的效率。
图22是本公开的至少一个实施例提供的基于处理器芯片的数据处理方法的示例的流程图。图23是图22中内核层的运算的流程图。下面结合图22和图23对本公开的至少一个实施例提供的数据处理方法进行示例性说明。
图22所示的数据处理方法用于实现向量和矩阵之间的运算(对应地,可以获取GEMV函数的运算结果)。
例如,如图22所示,采用该数据处理方法的程序涉及接口层(例如,函数接口层)、驱动层(例如,函数驱动层)和内核层(例如,函数内核层)。
例如,接口层用于检查输入参数。例如,接口层可用于判断对象矩阵规模等参数是否合法(例如,对象矩阵是否为空矩阵,对象矩阵包含的行向量和列向量的至少一个是否等于对象向量的维度)。例如,当输入参数不合法时会返回错误码(例如,用于提示错误原因)。例如,接口层还用于会根据输入的对象矩阵的类型(例如,对象矩阵是否为列主序或行主序,对象矩阵是否为转置矩阵)来调用的适用的驱动函数(驱动层)。
例如,驱动层由接口层调用。例如,驱动层用于基于处理器芯片的参数(例如,第一寄存器111包括的第一寄存单元111a的数目以及第一寄存器组110包括的第一寄存器111的数目)从对象向量中提取与处理器芯片的参数匹配的对象子向量以及从对象矩阵中提取与处理器芯片的参数匹配且对应于对象子向量的对象子矩阵;上述对象子向量以及对象子矩阵被提供给内核层,以利用内核层获取对象子向量和对象子矩阵的乘积。例如,驱动层从内存存储的对象向量和对象矩阵中分别提取对象子向量和对象子矩阵,并将对象子向量和对象子矩阵提供给缓冲存储器的缓存行。例如,内核层从缓冲存储器的缓存行加载分别作为第一向量和第一矩阵的对象子向量和对象子矩阵。
例如,通过利用驱动层将对象向量和对象矩阵划分为与处理器芯片的参数相匹配的对象子向量和对象子矩阵,可以更好的利用处理器芯片(例如,更充分利用CPU寄存器和缓冲存储器),由此可以提高运算速度(例如,达到高性能优化的目)。例如,驱动层可以将对象矩阵中的数据重排,以适应内核层用于核心代码的寄存器的分块的情况。例如,驱动层主要算法核心是包含m和n维的双重嵌套循环,n维循环为外层循环,步长为4;m维循环为内层循环,步长为16。因此,内核层(例如,低精度INT8内核层)一次可以处理64Byte(也即,16×4Byte)数据。例如,内核层单次处理的数据可以是处理器芯片的缓冲存储器的单个缓存行存储的数据。
例如,在对象向量XX的维数等于对象矩阵AA包括的列向量的数目的情况下,每次内层循环,可以从对象矩阵AA提取一个行数和列数分别为16和4的对象子矩阵;对应地,行步长和列步长分别等于16和4。例如,在对象向量XX的维数等于对象矩阵AA包括的行向量的数目的情况下,每次内层循环,可以从对象矩阵AA提取一个行数和列数分别为4和16的对象子矩阵;对应地,行步长和列步长分别等于4和16。
例如,在将列向量的数目等于对象向量XX的维数的对象矩阵AA作为列主序非转置型矩阵和行主序转置型矩阵情况下,行向量的数目等于对象向量XX的维数的对象矩阵AA为行主序非转置型矩阵和列主序转置型矩阵。
例如,内核层为实现对象向量和对象矩阵运算的核心算法。例如,内核层由接口层调用,并用于对象子向量和对象子矩阵之间的乘法运算。例如,内核层还用于将对象子向量和对象子矩阵的乘积累加到结果向量包括的结果子向量上,由此在内层循环和外层循环均结束后获取对象向量和对象矩阵的乘积。例如,内核层可用于实现高性能计算。例如,内核层可以使用内嵌汇编的形式(也即,将C语言和汇编集成在一起);此种情况下,不仅可以避免内核层的指令被重排,由此可以更充分利用寄存器,而且还方便移植。
例如,内核层可以基于AVX指令集(例如,AVX2指令集),利用128位SIMD(单指令多数据流,Single Instruction Multiple Data)向量化运算,并利用处理器芯片包括的8位乘加、16位乘加和32位累加指令来实现低精度INT8功能。例如,针对GEMV的计算密集型特性,内核层可以基于汇编指令进行循环展开并避免指令被重排,由此可以更充分利用寄存器;此外,可以根据流水并行,充分缓存行,进行数据预取,提升CPU的利用率。
例如,如图22所示,该对象向量和对象矩阵之间的运算包括以下的步骤S310-步骤S370。
步骤S310:检验对象矩阵的参数是否合法。若不合法则直接结束,若合法则执行步骤S320。例如,步骤S310可以设置在GEMV函数入口处,通过检验参数是否合法来进行合理规避。例如,通过步骤S310可以避免一些无效计算。
步骤S320:根据对象矩阵的类型调用适用的驱动函数。
例如,在步骤S320中,在对象向量XX的维数等于对象矩阵AA包括的列向量的数目的情况下,调用第一驱动函数,每次内层循环,第一驱动函数可以从对象矩阵AA提取一个行数和列数分别为16和4的对象子矩阵;在对象向量XX的维数等于对象矩阵AA包括的行向量的数目的情况下,调用第二驱动函数,每次内层循环,第二驱动函数可以从对象矩阵AA提取一个行数和列数分别为4和16的对象子矩阵;对应地,行步长和列步长分别等于4和16。
例如,在步骤S320中,根据矩阵行列的主序和矩阵是否转置来进行不同处理,如果是列主序,则进一步判断是否转置,若否,则加载列主序非转置驱动函数,反之亦然。
步骤S330:判断初始向量(例如,存储在内存中的对象向量)中的元素是否无符号。若输入的初始向量中的元素为无符号(8位整型无符号)则直接执行步骤S340;若初始向量中的元素为有符号(8位整型有符号),则需要将初始向量中的元素转换为无符号数(例如,通过将初始向量中的所有元素加128转换成无符号数)之后,再执行步骤S340。
例如,通过步骤S330使得内核层接收的对象向量中的元素均为无符号数,可以增加适用内核层运算的指令,由此可以选用更好的提升运算性能的指令。例如,使得内核层接收的对象向量中的元素均为无符号数,可以采用SIMD指令VPMADDUBSW(例如,8位乘加指令)针对位于四个第二寄存器121的向量和位于第三寄存器131中的向量执行第五操作(也即,8位乘加操作)。例如,由于SIMD指令VPMADDUBSW只支持有符号INT8和无符号UINT8进行向量乘加,因此,如果不通过步骤S330使得内核层接收的对象向量中的元素均为无符号数,则无法采用SIMD指令VPMADDUBSW;此种情况下,该数据处理方法的运算性能速度可能降低,或者可能将仅适用于对象矩阵与无符号的对象子向量(也即,对象子向量的元素为无符号数)之间的乘法运算,而不适用于对象矩阵与有符号的对象子向量之间的乘法运算。例如,由于单条SIMD指令可以同时接受多个数据流,提升处理速度,采用SIMD指令VPMADDUBSW,可以提升8位乘加操作的运算速度。
例如,需要将有符号的向量(向量的元素为8位整型数)转换成无符号的向量(向量的元素为8位整型数),然后将无符号的向量返回到流程图中。
步骤S340:通过双重循环从对象矩阵中提取对象子矩阵,对象子矩阵被提供给内核层。例如,对象向量的维数为n。例如,如图22所示,n维和m维为双重循环中,针对n的循环为外层循环,针对m的循环为内层循环;每次外层循环,列长加4,m维每次内层循环,行长加16,并且每次内层循环则会提取一个用于内核层的16×4的对象子矩阵(例如,对于对象向量XX的维数等于对象矩阵AA包括的列向量的数目的示例)。又例如,n维和m维为双重循环中,针对m的循环为外层循环,针对n的循环为内层循环;每次外层循环,行长加4,每次内层循环,列长加16,并且每次内层循环则会提取一个用于内核层的4×16的对象子矩阵(例如,对于对象向量XX的维数等于对象矩阵AA包括的行向量的数目的示例)。
例如,对象子矩阵所占用的空间为64字节(Byte),该对象子矩阵会更好的利用(例如,充分利用)处理器芯片的寄存器(例如,CPU包括的XMM寄存器)。例如,根据指令并行原理,通过预取指令来执行数据预取,充分填满缓存行,由此可以提升运算性能(例如,达到性能最大化)。
步骤S350:用于实现对象子向量和对象子矩阵之间的乘法运算,并且,内核层还用于将对象子向量和对象子矩阵的乘积累加到结果向量包括的结果子向量上,以在内层循环和外层循环均结束后获取对象向量和对象矩阵的乘积。
例如,步骤S350采用了寄存器分块(例如,16×4)、SIMD向量化技术以及循环展开,以提升运算性能。
例如,步骤S350包括以下的步骤S351-步骤S355。
步骤S351:接收用于向量-矩阵运算的参数和地址。例如,步骤S351为内核层入口。例如,用于向量-矩阵运算的参数包括:第一矩阵(也即对象子矩阵)包括的v个向量的维数。例如,在对象向量XX的维数等于对象矩阵AA包括的列向量的数目的情况下,用于向量-矩阵运算的参数包括第一矩阵A的行数或A的转置矩阵的列数。例如,用于向量-矩阵运算的地址包括:第一矩阵A的内存地址,第一向量X的内存地址,结果向量的内存地址。
步骤S352:加载第一向量X向量中4个元素,并广播占用整个XMM。格式例如为(X0,X1,X2,X3,X0,X1,X2,X3,X0,X1,X2,X3,X0,X1,X2,X3)。
步骤S353:将第一矩阵A加载至第一寄存器组110中。例如,在第一矩阵A包括4列16行的情况下,第一矩阵A的4个列向量分别加载至4个第一寄存器111中(XMM)。例如,在第一矩阵A包括4行16列的情况下,第一矩阵A的4个行向量分别加载至4个第一寄存器111(XMM)中。
步骤S354:预取第一矩阵A。例如,可以同时预取下一组或者下几组用于向量-矩阵运算的数据,由此可充分利用缓存行。
步骤S355:将第一寄存器组110中的第一矩阵转移到第二寄存器121组中,以使得多个第二寄存器121的每个被配置为存储位于第一寄存器组110中相邻的第一数目列(例如,四列)第一寄存单元111a中的元素。例如,通过VPUNPCKLBW指令、VPUNPCKHBW指令、VPUNPCKLWD指令、VPUNPCKHWD指令等将列元素转换成行元素(参见图7-图14),并将第一寄存器组110中的第一矩阵转移到第二寄存器121组中。
步骤S356:使得多个第二寄存器121的每个第二寄存器121中的元素的分别与第三寄存器131中的元素进行乘加运算,以得到第二向量;第二向量等于第一向量和第一矩阵乘积或者第一矩阵和第一向量的乘积。
例如,如图22所示,可以采用VPMADDUBSW、VPMADDWD、VPADDD等指令实现低精度INT8乘加操作,最终输出F32的第二向量。
下面以第一个第二寄存器121中的元素与第三寄存器131中的元素进行乘加运算为例进行示例性说明。
如图15和图20所示,可以使用VPMADDUBSW指令针对位于第一个第二寄存器121的向量和位于第三寄存器131中的向量执行第五操作OPN5(例如,8位乘加操作),并获得第三向量,此处,第三向量所在寄存器中的元素为16位;可以使用VPMADDWD指令针对第三向量和第四向量执行第六操作OPN6(16位乘加操作),并获得第五向量,此处,第四向量中的元素均为1,第四向量所在寄存器中的元素为16位,第五向量所在寄存器中的元素为32位;可以使用VPADDD指令针对第五向量和结果子向量执行第七操作OPN7(32位累加操作),以将第五向量和结果子向量的和作为更新后的结果子向量输出,由此可以获得向量和向量的水平方向的乘和加,并实现低精度INT8功能。例如,结果子向量所在寄存器中的元素为32位。例如,更新后的结果子向量被写入内存(例如,存储结果子向量的内存地址中)后,则完成内核运算。
步骤S360:判断双重循环m、n是否处理完(例如,外层循环的值是否达到n,内层循环的值是否达到m),如果没处理完(例如,外层循环的值没有达到n,内层循环的值没有达到m),则再次执行步骤S340和步骤S350;如果处理完(例如,外层循环的值达到n,内层循环的值达到m),则执行步骤S370。
步骤S370:判断初始向量是否为无符号;如果初始向量为无符号,则直接结束该GEMV函数;如果初始向量为有符号,则将运算得到的结果从无符号转换为有符号(例如,减去128换成有符号)后结束该GEMV函数
例如,通过使用内嵌汇编实现内核层,可以避免后续操作(例如,编译)改变图23所示的指令的执行顺序,由此可以后续操作可能导致的运算性能降低。
以上所述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。
可以利用被设计用于进行在此所述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行所述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的一个或多个微处理器或任何其他这样的配置。
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
所述的功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可以作为一个或多个指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。
本公开的至少一个实施例还提供了一种向量-矩阵乘法器100。该向量-矩阵乘法器100用于第一向量和第一矩阵的乘法运算。图24是本公开的至少一个实施例提供的向量-矩阵乘法器100的示例性框图。例如,如图24所示,该向量-矩阵乘法器100包括:第一寄存器组110、第三寄存器131、第二寄存器组120、矩阵转移单元140和运算单元150。
例如,第一寄存器组110包括多个第一寄存器111,且被配置为存储第一矩阵,多个第一寄存器111的每个包括多个第一寄存单元111a;第三寄存器131被配置为存储第一向量;第二寄存器组120包括多个第二寄存器121,第三寄存器131中的每个元素和第二寄存器组120中每个元素均为8位整型。
例如,矩阵转移单元140被配置为将位于第一寄存器组110中的第一矩阵的元素转移到第二寄存器组120包括的多个第二寄存器121中,以使得多个第二寄存器121的每个被配置为存储位于第一寄存器组110中相邻的第一数目列第一寄存单元111a中的元素。
例如,运算单元150被配置为使得多个第二寄存器121的每个第二寄存器121中的元素的分别与第三寄存器131中的元素进行乘加运算,以得到第二向量;第二向量等于第一向量和第一矩阵的乘积或者第一矩阵和第一向量的乘积。
例如,矩阵转移单元140和运算单元150的每个可以按硬件、软件、固件或其任意组合而实现。
例如,第三寄存器131包括多个第三寄存单元131a,多个第二寄存器121的每个包括多个第二寄存单元121a;多个第一寄存器111的每个包括的多个第一寄存单元111a的数目、第三寄存器131包括的多个第三寄存单元131a的数目以及第二寄存器121包括的多个第二寄存单元121a的数目彼此相等;多个第一寄存单元111a、多个第三寄存单元131a和多个第二寄存单元121a的每个为8位存储单元;第一寄存器组110包括的多个第一寄存器111的数目以及第二寄存器组120包括的多个第二寄存器121的数目彼此相等;第一数目为大于1的正整数,且等于多个第一寄存器111的每个包括的多个第一寄存单元111a的数目与第一寄存器组110包括的多个第一寄存器111的数目的比值。
例如,第一寄存器组110包括的多个第一寄存器111的数目等于用于第一向量与第一矩阵乘法运算的缓冲存储器的缓存行的尺寸与多个第一寄存器111的每个的位数的比值。
例如,矩阵转移单元140、运算单元150和向量-矩阵乘法器100的具体实现方法可以参考本公开至少一个实施例提供的向量-矩阵运算方法,在此不再赘述。
本公开的至少一个实施例还提供了一种处理器芯片10。图25是本公开的至少一个实施例提供的处理器芯片的示例性框图。如图25所示,该处理器芯片10本公开的至少一个实施例提供的任一向量-矩阵乘法器100。
需要说明的是,本领域的普通技术人员应该理解,该处理器芯片的其它组成部分(例如,微控制器、缓冲存储器等)可以采用适用部件,在此不做赘述,也不应作为对本公开实施例的限制。
虽然上文中已经用一般性说明及具体实施方式,对本公开作了详尽的描述,但在本公开实施例基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本公开精神的基础上所做的这些修改或改进,均属于本公开要求保护的范围。
以上所述仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。
Claims (22)
1.一种基于处理器芯片的向量-矩阵运算方法,所述向量-矩阵运算方法用于第一向量与第一矩阵的乘法运算,包括:
将所述第一矩阵加载到所述处理器芯片的第一寄存器组包括的多个第一寄存器中,并将所述第一向量加载到所述处理器芯片的第三寄存器中,其中,所述多个第一寄存器的每个包括多个第一寄存单元;
将位于所述第一寄存器组中的所述第一矩阵的元素转移到所述处理器芯片的第二寄存器组包括的多个第二寄存器中,以使得所述多个第二寄存器的每个被配置为存储位于所述第一寄存器组中相邻的第一数目列第一寄存单元中的元素,其中,所述第三寄存器中的每个元素和所述第二寄存器组中的每个元素均为8位整型;以及
使得所述多个第二寄存器的每个第二寄存器中的元素的分别与所述第三寄存器中的元素进行乘加运算,以得到第二向量,其中,所述第二向量等于所述第一向量和所述第一矩阵乘积或者所述第一矩阵和所述第一向量的乘积。
2.根据权利要求1所述的向量-矩阵运算方法,其中,所述第三寄存器包括多个第三寄存单元;
所述第一寄存器组包括的多个第一寄存器的数目和所述第二寄存器组包括的多个第二寄存器的数目彼此相等,且均等于N1;以及
所述将所述第一向量加载到所述处理器芯片的第三寄存器中,包括:使得所述第一向量的第g个元素位于所述第三寄存器包括的第(0)×N1+g个、第(1)×N1+g个、……和第(Num1-1)×N1+g个第三寄存单元中,其中,g为大于等于1小于等于N1的整数,Num1为所述第一数目,且所述第一数目为大于1的正整数。
3.根据权利要求2所述的向量-矩阵运算方法,其中,所述多个第二寄存器中的第k个第二寄存器被配置为存储位于所述第一寄存器组中第(k×Num1-Num1+1)列至第(k×Num1)列第一寄存单元中的元素,k为大于等于1小于等于N1的整数。
4.根据权利要求3所述的向量-矩阵运算方法,其中,所述多个第二寄存器的每个包括Num1个寄存单元组;
位于所述第一寄存器组的第(k×Num1-Num1+1)列的元素,……第(k×Num1)列的元素分别位于所述多个第二寄存器中的第k个第二寄存器的第1个至第Num1个寄存单元组中;以及
位于所述第一寄存器组中同一列第一寄存单元中的元素在所述第二寄存器组中的排序以及在所述第一寄存器组中的排序彼此匹配。
5.根据权利要求1-4任一项所述的向量-矩阵运算方法,其中,所述第三寄存器包括多个第三寄存单元,所述多个第二寄存器的每个包括多个第二寄存单元;
所述多个第一寄存器的每个包括的多个第一寄存单元的数目、所述第三寄存器包括的多个第三寄存单元的数目以及所述第二寄存器的每个包括的多个第二寄存单元的数目彼此相等;
所述第一寄存器组包括的多个第一寄存器的数目以及所述第二寄存器组包括的多个第二寄存器的数目彼此相等;以及
所述第一数目为大于1的正整数,且等于所述多个第一寄存器的每个包括的多个第一寄存单元的数目与所述第一寄存器组包括的多个第一寄存器的数目的比值。
6.根据权利要求5所述的向量-矩阵运算方法,还包括:获取从对象向量中提取的对象子向量,并将所述对象子向量作为所述第一向量,其中,所述对象子向量的维度小于所述对象向量的维度;以及
获取从对象矩阵中提取的对应于所述对象子向量的对象子矩阵,并将所述对象子矩阵作为所述第一矩阵,其中,所述对象子矩阵的尺寸小于所述对象矩阵的尺寸。
7.根据权利要求6所述的向量-矩阵运算方法,其中,所述对象子向量基于所述第一寄存器组包括的多个第一寄存器的数目从所述对象向量中提取,且所述对象子向量的维数等于所述第一寄存器组包括的多个第一寄存器的数目;以及
所述对应于所述对象子向量的对象子矩阵基于所述第一寄存器组包括的多个第一寄存器的数目以及所述多个第一寄存器的每个包括的多个第一寄存单元的数目从所述对象矩阵中提取,所述对应于所述对象子向量的对象子矩阵包括多个向量,所述多个向量的数目等于所述第一寄存器组包括的多个第一寄存器的数目,所述多个向量的每个的维数等于所述多个第一寄存器的每个包括的多个第一寄存单元的数目。
8.根据权利要求7所述的向量-矩阵运算方法,其中,所述处理器芯片还包括用于所述第一向量与所述第一矩阵乘法运算的缓冲存储器;以及
所述向量-矩阵运算方法还包括:基于所述缓冲存储器的缓存行的尺寸以及所述多个第一寄存器的每个的位数设置所述第一寄存器组包括的多个第一寄存器的数目,并使得所述第一寄存器组包括的多个第一寄存器的数目等于所述缓冲存储器的缓存行的尺寸与所述多个第一寄存器的每个的位数的比值。
9.根据权利要求8所述的向量-矩阵运算方法,其中,所述第一寄存器组包括的多个第一寄存器的数目为4,所述多个第一寄存器的每个包括的多个第一寄存单元的数目为16;
所述将位于所述第一寄存器组中的所述第一矩阵的元素转移到所述处理器芯片的第二寄存器组包括的多个第二寄存器中包括:
针对位于所述第一寄存器组中第一个和第二个第一寄存器的向量执行第一操作,以将位于所述第一寄存器组中第一个第一寄存器的低64位的元素作为第一中间向量的奇数个元素,并将位于所述第一寄存器组中第二个第一寄存器的低64位的元素作为所述第一中间向量的偶数个元素;
针对位于所述第一寄存器组中第一个和第二个第一寄存器的向量执行第二操作,以将位于所述第一寄存器组中第一个第一寄存器的高64位的元素作为第二中间向量的奇数个元素,并将位于所述第一寄存器组中第二个第一寄存器的高64位的元素作为所述第二中间向量的偶数个元素;
针对位于所述第一寄存器组中第三个和第四个第一寄存器的向量执行所述第一操作,以将位于所述第一寄存器组中第三个第一寄存器的低64位的元素作为第三中间向量的奇数个元素,并将位于所述第一寄存器组中第四个第一寄存器的低64位的元素作为所述第三中间向量的偶数个元素;以及
针对位于所述第一寄存器组中第三个和第四个第一寄存器的向量执行所述第二操作,以将所位于述第一寄存器组中第三个第一寄存器的高64位的元素作为第四中间向量的奇数个元素,并将位于所述第一寄存器组中第四个第一寄存器的高64位的元素作为所述第四中间向量的偶数个元素。
10.根据权利要求9所述的向量-矩阵运算方法,其中,所述将位于所述第一寄存器组中的所述第一矩阵的元素转移到第二寄存器组中包还包括:
针对所述第一中间向量和所述第三中间向量执行第三操作,以基于位于所述第一中间向量所在寄存器的低64位的元素以及位于所述第三中间向量所在寄存器的低64位的元素获得第五中间向量,并将所述第五中间向量写入至所述第二寄存器组的第一个第二寄存器中;
针对所述第一中间向量和所述第三中间向量执行第四操作,以基于位于所述第一中间向量所在寄存器的高64位的元素以及位于所述第三中间向量所在寄存器的高64位的元素获得第六中间向量,并将所述第六中间向量写入至所述第二寄存器组的第二个第二寄存器中;
针对所述第二中间向量和所述第四中间向量执行所述第三操作,以基于位于所述第二中间向量所在寄存器的低64位的元素以及位于所述第四中间向量所在寄存器的低64位的元素获得第七中间向量,并将所述第七中间向量写入至所述第二寄存器组的第三个第二寄存器中;以及
针对所述第二中间向量和所述第四中间向量执行所述第四操作,以基于位于所述第二中间向量所在寄存器的高64位的元素以及位于所述第四中间向量所在寄存器的高64位的元素获得第八中间向量,并将所述第八中间向量写入至所述第二寄存器组的第四个第二寄存器中。
11.根据权利要求10所述的向量-矩阵运算方法,其中,所述针对所述第一中间向量和所述第三中间向量执行第三操作包括:
使得位于所述第一中间向量所在的寄存器的第一个至第四个16位的元素分别作为位于所述第五中间向量所在的寄存器的第一个、第三个、第五个和第七个16位的元素;以及
使得位于所述第三中间向量所在的寄存器的第一个至第四个16位的元素分别作为位于所述第五中间向量所在的寄存器的第二个、第四个、第六个和第八个16位的元素;
所述针对所述第一中间向量和所述第三中间向量执行第四操作包括:
使得位于所述第一中间向量所在的寄存器的第五个至第八个16位的元素分别作为位于所述第六中间向量所在的寄存器的第一个、第三个、第五个和第七个16位的元素;以及
使得位于所述第三中间向量所在的寄存器的第五个至第八个16位的元素分别作为位于所述第六中间向量所在的寄存器的第二个、第四个、第六个和第八个16位的元素;
所述针对所述第二中间向量和所述第四中间向量执行所述第三操作包括:
使得位于所述第二中间向量所在的寄存器的第一个至第四个16位的元素分别作为位于所述第七中间向量所在的寄存器的第一个、第三个、第五个和第七个16位的元素;以及
使得位于所述第四中间向量所在的寄存器的第一个至第四个16位的元素分别作为位于所述第七中间向量所在的寄存器的第二个、第四个、第六个和第八个16位的元素;
所述针对所述第二中间向量和所述第四中间向量执行所述第四操作包括:
使得位于所述第二中间向量所在的寄存器的第五个至第八个16位的元素分别作为位于所述第八中间向量所在的寄存器的第一个、第三个、第五个和第七个16位的元素;以及
使得位于所述第四中间向量所在的寄存器的第五个至第八个16位的元素分别作为位于所述第八中间向量所在的寄存器的第二个、第四个、第六个和第八个16位的元素。
12.根据权利要求11所述的向量-矩阵运算方法,其中,在针对所述多个第一寄存器中第一个和第二个第一寄存器的向量执行所述第一操作的同时针对所述多个第一寄存器中第三个和第四个第一寄存器的向量执行所述第一操作;
在针对所述多个第一寄存器中第一个和第二个第一寄存器的向量执行所述第二操作的同时针对所述多个第一寄存器中第三个和第四个第一寄存器的向量执行所述第二操作;
在针对所述第一中间向量和所述第三中间向量执行所述第三操作的同时针对所述第二中间向量和所述第四中间向量执行所述第三操作;以及
在针对所述第一中间向量和所述第三中间向量执行所述第四操作的同时针对所述第二中间向量和所述第四中间向量执行所述第四操作。
13.根据权利要求8所述的向量-矩阵运算方法,其中,所述使得所述多个第二寄存器的每个第二寄存器中的元素的分别与所述第三寄存器中的元素进行乘加运算,以得到第二向量,包括:
针对位于每个第二寄存器中的向量以及位于所述第三寄存器中的向量执行第五操作,以获取四个第三向量,
其中,所述每个第三向量的维度等于位于对应的第二寄存器中的向量的维度的一半;
针对每个第三向量以及第四向量执行第六操作,以获取四个第五向量,
其中,所述第四向量的维度等于所述每个第三向量的维度,且等于所述第五向量的维度的两倍,所述第四向量的每个元素的值为1;以及
所述第二向量包括所述四个第五向量,所述第二向量的维度等于所述多个第一寄存器的每个包括的多个第一寄存单元的数目。
14.一种基于处理器芯片的数据处理方法,用于对象向量与对象矩阵的乘法运算,包括:
从所述对象向量中提取第i个对象子向量,
其中,所述对象向量包括第二数目个对象子向量,i为大于等于1小于等于所述第二数目的整数,
所述对象矩阵包括对应于所述第i个对象子向量的多个对象子矩阵;以及
采用如权利要求1-13任一项所述的向量-矩阵运算方法依序获取所述第i个对象子向量与所述多个对象子矩阵的乘积,以依序得到多个子乘积向量。
15.根据权利要求14所述的数据处理方法,其中,所述对应于所述第i个对象子向量的多个对象子矩阵的数目等于所述多个子乘积向量的数目;以及
所述采用如权利要求1-13任一项所述的向量-矩阵运算方法依序获取所述第i个对象子向量与所述多个对象子矩阵的乘积,以依序得到多个子乘积向量,包括:
将所述第i个对象子向量以及所述多个对象子矩阵中第j个对象子矩阵分别作为所述第一向量和所述第一矩阵,其中,j为大于等于1小于等于所述对应于所述第i个对象子向量的多个对象子矩阵的数目的整数;以及
采用如权利要求1-13任一项所述的向量-矩阵运算方法获取所述第i个对象子向量与所述多个对象子矩阵中第j个对象子矩阵的乘积,以得到所述多个子乘积向量中第j个子乘积向量。
16.根据权利要求14所述的数据处理方法,其中,i从1按照1的步长逐步增长至所述第二数目;以及
针对i的每个值,j从1按照1的步长逐步增长至所述对应于所述第i个对象子向量的多个对象子矩阵的数目。
17.根据权利要求15或16所述的数据处理方法,还包括:
加载对象结果向量,
其中,所述对象结果向量包括多个对象结果向量,
所述多个对象结果向量的数目等于所述多个子乘积向量的数目;
所述多个对象结果向量分别对应于所述多个子乘积向量,
使用所述多个子乘积向量中第j个子乘积向量与所述多个对象结果向量中第j个对象结果向量的和更新所述第j个对象结果向量;以及
将所述对象结果向量的最终结果作为所述对象向量和所述对象矩阵的乘积。
18.根据权利要求14所述的数据处理方法,其中,所述对象矩阵包括的列向量的数目等于所述对象向量的维数,所述对应于所述第i个对象子向量的多个对象子矩阵位于所述对象矩阵的相同的多个列向量中;或者
所述对象矩阵包括的行向量的数目等于所述对象向量的维数,所述对应于所述第i个对象子向量的多个对象子矩阵位于所述对象矩阵的相同的多个行向量中。
19.一种向量-矩阵乘法器,用于第一向量和第一矩阵的乘法运算,包括:
第一寄存器组,其中,所述第一寄存器组包括多个第一寄存器,且被配置为存储所述第一矩阵,所述多个第一寄存器的每个包括多个第一寄存单元;
第三寄存器,被配置为存储所述第一向量;
第二寄存器组,包括多个第二寄存器,其中,所述第三寄存器中的每个元素和所述第二寄存器组中每个元素均为8位整型;
矩阵转移单元,被配置为将位于所述第一寄存器组中的所述第一矩阵的元素转移到所述第二寄存器组包括的多个第二寄存器中,以使得所述多个第二寄存器的每个被配置为存储位于所述第一寄存器组中相邻的第一数目列第一寄存单元中的元素;以及
运算单元,被配置为使得所述多个第二寄存器的每个第二寄存器中的元素的分别与所述第三寄存器中的元素进行乘加运算,以得到第二向量,其中,所述第二向量等于所述第一向量和所述第一矩阵的乘积或者所述第一矩阵和所述第一向量的乘积。
20.根据权利要求19所述的向量-矩阵乘法器,其中,所述第三寄存器包括多个第三寄存单元,所述多个第二寄存器的每个包括多个第二寄存单元;
所述多个第一寄存器的每个包括的多个第一寄存单元的数目、所述第三寄存器包括的多个第三寄存单元的数目以及所述第二寄存器包括的多个第二寄存单元的数目彼此相等;
所述多个第一寄存单元、所述多个第三寄存单元和所述多个第二寄存单元的每个为8位存储单元;
所述第一寄存器组包括的多个第一寄存器的数目以及所述第二寄存器组包括的多个第二寄存器的数目彼此相等;以及
所述第一数目为大于1的正整数,且等于所述多个第一寄存器的每个包括的多个第一寄存单元的数目与所述第一寄存器组包括的多个第一寄存器的数目的比值。
21.根据权利要求20所述的向量-矩阵乘法器,其中,所述第一寄存器组包括的多个第一寄存器的数目等于用于所述第一向量与所述第一矩阵乘法运算的缓冲存储器的缓存行的尺寸与所述多个第一寄存器的每个的位数的比值。
22.一种处理器芯片,包括如权利要求19-21任一项所述的向量-矩阵乘法器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011405766.XA CN112434255B (zh) | 2020-12-03 | 2020-12-03 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011405766.XA CN112434255B (zh) | 2020-12-03 | 2020-12-03 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112434255A true CN112434255A (zh) | 2021-03-02 |
CN112434255B CN112434255B (zh) | 2023-12-08 |
Family
ID=74692207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011405766.XA Active CN112434255B (zh) | 2020-12-03 | 2020-12-03 | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112434255B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722669A (zh) * | 2021-11-03 | 2021-11-30 | 海光信息技术股份有限公司 | 数据处理方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5170370A (en) * | 1989-11-17 | 1992-12-08 | Cray Research, Inc. | Vector bit-matrix multiply functional unit |
US6366937B1 (en) * | 1999-03-11 | 2002-04-02 | Hitachi America Ltd. | System and method for performing a fast fourier transform using a matrix-vector multiply instruction |
US6901422B1 (en) * | 2001-03-21 | 2005-05-31 | Apple Computer, Inc. | Matrix multiplication in a vector processing system |
CN103902507A (zh) * | 2014-03-28 | 2014-07-02 | 中国科学院自动化研究所 | 一种面向可编程代数处理器的矩阵乘法计算装置及方法 |
CN104238993A (zh) * | 2013-06-11 | 2014-12-24 | 亚德诺半导体技术公司 | 微处理器集成电路的向量矩阵乘积加速器 |
US20180336163A1 (en) * | 2017-05-17 | 2018-11-22 | Google Llc | Low latency matrix multiply unit |
CN110770701A (zh) * | 2017-06-28 | 2020-02-07 | Arm有限公司 | 基于寄存器的矩阵乘法 |
CN111597501A (zh) * | 2019-02-21 | 2020-08-28 | 三星电子株式会社 | 自适应性矩阵乘法器的系统 |
-
2020
- 2020-12-03 CN CN202011405766.XA patent/CN112434255B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5170370A (en) * | 1989-11-17 | 1992-12-08 | Cray Research, Inc. | Vector bit-matrix multiply functional unit |
US6366937B1 (en) * | 1999-03-11 | 2002-04-02 | Hitachi America Ltd. | System and method for performing a fast fourier transform using a matrix-vector multiply instruction |
US6901422B1 (en) * | 2001-03-21 | 2005-05-31 | Apple Computer, Inc. | Matrix multiplication in a vector processing system |
CN104238993A (zh) * | 2013-06-11 | 2014-12-24 | 亚德诺半导体技术公司 | 微处理器集成电路的向量矩阵乘积加速器 |
CN103902507A (zh) * | 2014-03-28 | 2014-07-02 | 中国科学院自动化研究所 | 一种面向可编程代数处理器的矩阵乘法计算装置及方法 |
US20180336163A1 (en) * | 2017-05-17 | 2018-11-22 | Google Llc | Low latency matrix multiply unit |
CN110770701A (zh) * | 2017-06-28 | 2020-02-07 | Arm有限公司 | 基于寄存器的矩阵乘法 |
CN111597501A (zh) * | 2019-02-21 | 2020-08-28 | 三星电子株式会社 | 自适应性矩阵乘法器的系统 |
Non-Patent Citations (2)
Title |
---|
SEUNGHWAN CHO,ET AL: "McDRAM v2: In-Dynamic Random Access Memory Systolic Array Accelerator to Address the Large Model Problem in Deep Neural Networks on the Edge", 《IEEE ACCESS 》 * |
刘仲 等: "面向多核向量处理器的矩阵乘法向量化方法", 《计算机学报》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722669A (zh) * | 2021-11-03 | 2021-11-30 | 海光信息技术股份有限公司 | 数据处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112434255B (zh) | 2023-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220365753A1 (en) | Accelerated mathematical engine | |
US11775313B2 (en) | Hardware accelerator for convolutional neural networks and method of operation thereof | |
EP3676700B1 (en) | Efficient direct convolution using simd instructions | |
JP2021508125A (ja) | 行列乗算器 | |
EP3623941B1 (en) | Systems and methods for performing instructions specifying ternary tile logic operations | |
US8433883B2 (en) | Inclusive “OR” bit matrix compare resolution of vector update conflict masks | |
TW202123093A (zh) | 實行卷積運算的系統及方法 | |
US20200356837A1 (en) | Fast deep learning fully-connected inference | |
US20220107803A1 (en) | Memory device for performing in-memory processing | |
US20200356836A1 (en) | Fast deep learning fully-connected column-major implementation | |
CN112434255B (zh) | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 | |
CN112434256B (zh) | 矩阵乘法器和处理器 | |
CN114090954A (zh) | 一种基于ft-2000+的整数矩阵乘法内核优化方法 | |
US20230259578A1 (en) | Configurable pooling processing unit for neural network accelerator | |
US8332447B2 (en) | Systems and methods for performing fixed-point fractional multiplication operations in a SIMD processor | |
US20050055394A1 (en) | Method and system for high performance, multiple-precision multiply-and-add operation | |
CN113762490B (zh) | 使用列折叠和挤压的稀疏矩阵的矩阵乘法加速 | |
CN111178505B (zh) | 卷积神经网络的加速方法和计算机可读存储介质 | |
WO2022067510A1 (zh) | 一种处理器、处理方法及相关设备 | |
GB2611522A (en) | Neural network accelerator with a configurable pipeline | |
GB2614705A (en) | Neural network accelerator with configurable pooling processing unit | |
GB2611520A (en) | Methods and devices for configuring a neural network accelerator with a configurable pipeline | |
GB2614327A (en) | Configurable pooling process unit for neural network accelerator | |
CN112632464A (zh) | 用于处理数据的处理装置 | |
Kaliyappan et al. | Recursive formulation of the matrix Padé approximation in packed storage |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20231108 Address after: 610216 building 4, No. 171, hele'er street, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 300392 North 2-204 industrial incubation-3-8, 18 Haitai West Road, Huayuan Industrial Zone, Tianjin Applicant before: Haiguang Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |