CN116136894A - 一种基于矩阵处理器的数据处理方法及可读存储介质 - Google Patents
一种基于矩阵处理器的数据处理方法及可读存储介质 Download PDFInfo
- Publication number
- CN116136894A CN116136894A CN202111372106.0A CN202111372106A CN116136894A CN 116136894 A CN116136894 A CN 116136894A CN 202111372106 A CN202111372106 A CN 202111372106A CN 116136894 A CN116136894 A CN 116136894A
- Authority
- CN
- China
- Prior art keywords
- matrix
- elements
- calculation
- processor
- unit
- 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.)
- Pending
Links
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
-
- 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
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/50—Adding; Subtracting
-
- 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)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
本申请提供了一种基于矩阵处理器的数据处理方法及可读存储介质,所述方法包括:读取第一矩阵中的W个第一元素,并将所述W个第一元素送入矩阵处理器的计算单元进行计算;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;重复上述步骤,直至所述第一矩阵中的剩余元素的个数小于所述W;响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。采用该方法可以提高矩阵处理器计算单元利用率,减少计算所用的周期数,缩短计算时间,充分利用矩阵处理器的计算单元。
Description
技术领域
本申请属于处理器技术领域,具体涉及一种基于矩阵处理器的数据处理方法及可读存储介质。
背景技术
在矩阵处理器设计中,通常拥有多个计算单元,如何高效的利用这些计算单元变得非常重要,然而有时候需要计算的矩阵的宽度小于计算单元的宽度。现有技术中,一般是每次读取矩阵的一行数据,然后按行进行计算,在对小尺寸的矩阵进行计算的时候不能充分利用所有的计算单元,从而所需要的计算周期增加,计算单元利用率低。
发明内容
本申请的目的是提供一种基于矩阵处理器的数据处理方法及可读存储介质,采用该方法可以提高矩阵处理器计算单元利用率,缩短计算周期,充分利用矩阵处理器的计算单元。
根据本申请的一方面,提供了一种基于矩阵处理器的数据处理方法,该方法包括:读取第一矩阵中的W个第一元素,并将所述W个第一元素送入矩阵处理器的计算单元进行计算;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;重复上述步骤,直至所述第一矩阵中的剩余元素的个数小于所述W;响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。
可选地,在所述读取第一矩阵中的W个第一元素之前,还包括:接收运算指令,并对接收的运算指令进行解析,以确定运算指令所指示的运算类型;根据确定的运算类型、第一矩阵的宽度以及计算单元的个数,确定W的值。
可选地,读取第一矩阵中的W个第一元素到矩阵处理器的第一寄存器单元,以及设置W=K。
可选地,所述将所述W个第一元素送入矩阵处理器的计算单元进行计算,包括:响应于设置的W=K,按照数据顺序对所述读取的第一矩阵中的W个第一元素进行裁剪,以得到W1个元素,其中,W1=β*N≤W,β>1,且β为整数;将所述W1个元素送入所述矩阵处理器的所述计算单元进行计算。
可选地,在读取源矩阵中的W个元素之前,还包括:确定所述第一矩阵的读取地址,其中,所述读取地址为addr+β*N*(C-1),addr为所述第一矩阵首个元素地址,C为所述第一矩阵的读取次数。
可选地,所述读取第一矩阵中的W个第一元素,并将所述W个第一元素送入矩阵处理器的计算单元进行计算,包括:读取所述第一矩阵中的W个第一元素到所述矩阵处理器的第一寄存器单元;将W个第一元素从所述第一寄存器单元读出并送入所述矩阵处理器的所述计算单元,以及将W个计算结果从所述矩阵处理器的结果寄存器单元读出并送入所述矩阵处理器的所述计算单元,使得所述计算单元进行计算,并将所述计算的结果更新至所述结果寄存器单元;其中,所述结果寄存器单元用于缓存所述计算单元每次计算的计算结果。
可选地,所述将W个第一元素从所述第一寄存器单元读出并送入所述矩阵处理器的计算单元进行计算,所述计算的结果输出到所述矩阵处理器的结果寄存器单元,还包括:响应于所述第一矩阵中的剩余元素的个数为零,确定所述结果寄存器中包含u*N个元素;设置L等于u/2的整数部分;如果所述u为偶数,按照存储顺序,将所述结果寄存器中的元素分为两组,每组包含L*N个元素,将所述两组元素送入所述计算单元进行计算,所述计算的结果的L*N个元素输出到所述结果寄存器单元;如果所述u为奇数,按照存储顺序,将所述结果寄存器中的元素分为三组,其中第一组和第二组包含L*N个元素,第三组包含N个元素,将所述第一组和第二组元素送入计算单元进行计算,所述计算结果的L*N个元素输出到所述结果寄存器单元,所述结果寄存器单元包含所述计算结果的L*N个元素与第三组元素的N个元素;重复上述步骤直至u=1。
根据本申请的二方面,提供了一种基于矩阵处理器的数据处理方法,包括:读取第一矩阵中的W个第一元素,以及获取第二矩阵中对应所述W个第一元素的W个第二元素;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;将所述W个第一元素和所述W个第二元素送入所述矩阵处理器的计算单元进行计算;重复上述步骤,直至所述第一矩阵中的剩余元素的个数小于所述W;响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。
可选地,读取第二矩阵中的Y个第二元素到矩阵处理器的第二寄存器单元中,如果第二矩阵的宽度、高度分别与所述第二矩阵的宽度、高度相等,则设置Y=W。
可选地,第一矩阵为多行多列的矩阵,第二矩阵为多行多列的矩阵,第二矩阵的宽度、高度分别与所述第二矩阵的宽度、高度相等,则W等于K,Y等于K。
可选地,所述获取第二矩阵中对应所述W个第一元素的W个第二元素,包括:
响应于设置的W=α*N≤K,以及所述第一矩阵的宽度与所述第二矩阵的宽度相等,读取第二矩阵中的N个第二元素到所述矩阵处理器的第二寄存器单元;其中α>1,且α为整数;
在第二寄存器单元内,将N个第二元素复制α份,以扩展得到W个第二元素;或者
响应于设置的W=α*N≤K,以及所述第一矩阵的高度与所述第二矩阵的高度相等,读取第二矩阵中的α个第二元素到所述矩阵处理器的第二寄存器单元;
在第二寄存器单元内,将α个第二元素分别复制N份,以扩展得到W个第二元素;或者
响应于设置的W=K,以及所述第二矩阵的宽度、高度都为1,读取第二矩阵中的1个第二元素到所述矩阵处理器的第二寄存器单元;
在第二寄存器单元内,将1个第二元素分别复制W份,以扩展得到W个第二元素。
可选地,在所述读取第一矩阵中的W个第一元素之前,还包括:接收运算指令,并对接收的运算指令进行解析,以确定运算指令所指示的运算类型;根据确定的运算类型、第一矩阵的宽度以及计算单元的个数,确定W的值。
可选地,在所述读取第一矩阵中的W个第一元素之前,还包括:根据寄存器指令进行寄存器参数配置,所述寄存器指令至少包括所述第一矩阵的宽度、高度和行间隔数;响应于所述第一矩阵的宽度和行间隔数相等,确认所述第一矩阵的源地址连续。
根据本申请的三方面,提供了一种基于矩阵处理器的数据处理装置,包括:第一读取模块,用于读取第一矩阵中的W个第一元素,并将所述W个第一元素送入矩阵处理器的计算单元进行计算;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;重复上述步骤,直至所述第一矩阵中的剩余元素的个数小于所述W;
第二读取模块,用于响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。
根据本申请的四方面,提供了一种基于矩阵处理器的数据处理装置,包括:第一读取模块,用于读取第一矩阵中的W个第一元素,以及获取第二矩阵中对应所述W个第一元素的W个第二元素;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;将所述W个第一元素和所述W个第二元素送入所述矩阵处理器的计算单元进行计算;第二读取模块,用于响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。
根据本申请的五方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请实施例第一方面、第二方面所述的方法。
根据本申请的六方面,提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如本申请实施例第一方面、第二方面所述的方法。
根据本申请的七方面,提供了一种芯片,其中,所述芯片包括矩阵处理器以及本申请实施例第三方面、第四方面的装置。
本申请的有益效果包括:
本申请提供的基于矩阵处理器的数据处理方法,在计算周期内向矩阵处理器计算单元优化调度矩阵数据进行计算,提高计算单元的利用率,减少计算所用的周期数,可以大大缩短计算时间。
附图说明
图1是本申请一实施例的一种基于矩阵处理器的数据处理方法流程示意图;
图2是本申请一实施例的一种基于矩阵处理器的数据处理方法流程示意图;
图3是矩阵进行列累加运算的示意图;
图4是本申请实施例一种基于矩阵处理器的数据处理方法的矩阵进行列累加运算的中间结果的示意图;
图5是双矩阵进行点乘运算的示意图;
图6(a)—图6(b)是本申请实施例一种基于矩阵处理器的数据处理方法两个矩阵进行运算优化前后的示意图;
图7是矩阵与单个数进行相加运算的示意图;
图8是矩阵与行向量相加运算的示意图;
图9(a)—图9(c)是本申请实施例一种基于矩阵处理器的数据处理方法多行多列矩阵和单行矩阵进行运算优化前后的示意图;
图10是矩阵与列向量相加运算的示意图;
图11是本申请实施例一种基于矩阵处理器的数据处理方法多行多列矩阵和单列矩阵进行加法运算的中间过程示意图。
具体实施方法
为使本申请的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本申请进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本申请的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本申请的概念。
除非另外定义,本申请使用的技术术语或者科学术语应当为本申请所属领域内具有一般技能的人士所理解的通常意义。本申请中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。
图1是本申请一实施例的一种基于矩阵处理器的数据处理方法流程示意图。如图1所示,该方法实施例的基于矩阵处理器的数据处理方法主要包括:
步骤S101:读取第一矩阵中的W个第一元素,并将W个第一元素送入矩阵处理器的计算单元进行计算;其中,W大于第一矩阵每行元素个数N,小于或等于矩阵处理器的计算单元个数为K。其中,该第一矩阵为待计算的源矩阵。可选的,待计算的源矩阵中存储的为数据地址,根据矩阵中的数据地址从内存memory中读取到对应的数据,然后对读取的数据进行计算。
在一实施例中,读取第一矩阵中的W个第一元素到矩阵处理器的第一寄存器单元。对于矩阵处理器而言,在进行运算前需要从外部读入数据到寄存器中,再将寄存器中的数据送入计算单元进行计算。数据的来源可以是内存或其他与处理器直接进行输入输出的设备。
需要进行说明的是,W大于第一矩阵每行元素个数N(即第一矩阵的宽度),设置W>N,是为了在其后计算时充分利用矩阵处理器计算单元。受限于硬件限制,W大于第一矩阵每行元素个数N,小于或等于矩阵处理器计算单元个数为K。在一个实施例中,读取第一矩阵中的W个第一元素到矩阵处理器的第一寄存器单元的步骤中,可设置W=K。在W=K时,可以在后续计算中,利用所有的矩阵处理器计算单元,使计算单元的利用率100%。
步骤S102:重复上述步骤S101,直至第一矩阵中的剩余元素的个数小于W。在本步骤中,是将每次读取的第一矩阵中的W个第一元素写入计算单元进行计算。在矩阵处理器的计算单元进行第一次计算时,先读取第一矩阵中的W个第一元素送入矩阵处理器的计算单元,然后再次读取第一矩阵中的W个第一元素送入矩阵处理器的计算单元,矩阵处理器的计算单元进行计算,并将计算结果输出至结果寄存器。在矩阵处理器的计算单元进行后续计算时,先读取第一矩阵中的W个第一元素送入矩阵处理器的计算单元,然后从结果寄存器读取W个计算结果送入矩阵处理器的计算单元,矩阵处理器的计算单元进行计算,并将计算结果更新至结果寄存器。即,结果寄存器中存储的计算结果为最新一次的计算结果。
步骤S103:响应于第一矩阵中的剩余元素的个数不为零,获取第一矩阵中的剩余元素到计算单元进行计算。若第一矩阵中的剩余元素的个数为零,说明计算完成,则可不进行步骤S103。将第一矩阵的所有元素遍历,重复步骤S101和S102,直至第一矩阵中的元素读取完毕,即第一矩阵中的剩余元素的个数为零。
如果多次重复步骤S101和S102之后,第一矩阵中的剩余元素的个数小于W,则无法一次读取第一矩阵中的W个第一元素,进而可一次将第一矩阵中的剩余元素到计算单元进行计算,然后计算完成。可选的,每次通过计算单元完成计算后,可将计算结果输出到矩阵处理器的结果寄存器单元。
相比现有技术,每个计算周期计算W个元素,该W大于第一矩阵的宽度N,进而充分利用了矩阵处理器所具备的计算单元,提高计算单元的利用率。示例性地,取W=2N,2N个元素在计算单元中并行计算,计算效率是现有技术的2倍。
图2是本申请一实施例的一种基于矩阵处理器的数据处理方法流程示意图。如图2所示,该方法实施例的基于矩阵处理器的数据处理方法主要包括:
步骤S201:读取第一矩阵中的W个第一元素,以及获取第二矩阵中对应W个第一元素的W个第二元素;其中,W大于第一矩阵的宽度N,小于或等于矩阵处理器的计算单元的个数K。在本实施例中,可实现第一矩阵与第二矩阵的计算。其中,第一矩阵为多行多列的矩阵。第二矩阵可以为多行多列的矩阵,也可以为高度为1的单行矩阵,也可以为宽度为1的单列矩阵,也可以为高度、宽度都为1的单个数。
可选的,获取第二矩阵中对应W个第一元素的W个第二元素的过程中,可先读取第二矩阵中的Y个第二元素,响应于Y小于W,将Y个第二元素扩展为W个第二元素。其中,当第一矩阵为多行多列的矩阵,第二矩阵为多行多列的矩阵,设置W等于K,Y等于K。当第一矩阵为多行多列的矩阵,第二矩阵为高度、宽度都为1的单个数,设置Y为1,W等于K。具体的:响应于设置的W=α*N≤K,以及第一矩阵的宽度与第二矩阵的宽度相等,读取第二矩阵中的N个第二元素到矩阵处理器的第二寄存器单元;其中α>1,且α为整数;在第二寄存器单元内,将N个第二元素复制α份,以扩展得到W个第二元素。或者,响应于设置的W=α*N≤K,以及第一矩阵的高度与第二矩阵的高度相等,读取第二矩阵中的α个第二元素到矩阵处理器的第二寄存器单元;在第二寄存器单元内,将α个第二元素分别复制N份,以扩展得到W个第二元素。或者。响应于设置的W=K,以及第二矩阵的宽度、高度都为1,读取第二矩阵中的1个第二元素到矩阵处理器的第二寄存器单元;在第二寄存器单元内,将1个第二元素分别复制W份,以扩展得到W个第二元素。
可选的,在数据读取之前,还可根据寄存器指令进行寄存器参数配置,寄存器指令至少包括第一矩阵的宽度、高度和行间隔数。响应于第一矩阵的宽度和行间隔数相等,确认第一矩阵的源地址连续,进而可一次性读取第一矩阵的多个数据。
步骤S202:将W个第一元素和W个第二元素送入矩阵处理器的计算单元进行计算。
步骤S203:重复上述步骤,直至第一矩阵中的剩余元素的个数小于W。
步骤S204:响应于第一矩阵中的剩余元素的个数不为零,将剩余元素送入计算单元进行计算。
根据本实施例,每个计算周期计算W个元素,充分利用了矩阵处理器所具备的计算单元,提高计算单元的利用率。示例性地,取W=2N,2N个元素在计算单元中并行计算,计算效率是现有技术的2倍。
本申请一实施例公开了一种基于矩阵处理器的数据处理方法,该方法实施例的基于矩阵处理器的数据处理方法包括:
步骤S301:接收运算指令,并对接收的运算指令进行解析,以确定运算指令所指示的运算类型。在一实施例中,矩阵处理器获取运算指令,运算指令至少包括待执行运算的运算类型,其中运算类型可包括单矩阵运算(即对一个矩阵中的元素进行计算,例如列元素累加或者行元素累加)、双矩阵运算(即两个矩阵间运算)、矩阵与单个数(即一个常数)的运算、矩阵与单行矩阵的运算、矩阵与单列矩阵的运算等。
其中,该运算指令为RISC(Reduced Instruction Set Computer,精简指令集计算机)指令,指令格式为如表1所示:
表1矩阵运算指令的格式示例
向量指令 | 31 26 | 25 | 24 20 | 19 15 | 14 | 13 12 | 11 7 | 6 0 |
Veadd.mm | 000001 | 0 | rs2 | rs1 | 0 | 00 | rd | 1111011 |
表1中示例的运算指令的指令名称为Veadd.mm,该指令用于指示对两个矩阵进行矩阵加运算,如上表所示,指令的0:6位表示该指令是RISC的自定义指令,rs1,rs2指定第一寄存器和第二寄存器,rd指定结果寄存器。其中,第一寄存器和第二寄存器分别是两个待计算的矩阵的源寄存器,用于存放源矩阵的待计算数据;结果寄存器是目的寄存器,用于存放计算结果数据。读取第一寄存器、第二寄存器和结果寄存器,得到第一矩阵、第二矩阵和第三矩阵的起始地址。26:31位表示该指令所指示的运算是add运算,即对两个矩阵中的元素进行相加运算。25,14,13:12共同决定当前指令的运算类型是双矩阵运算(以.mm表示)。指令类型还包括.m,.mf和.mv,其中,.m表示单矩阵运算,.mm表示两个矩阵间运算,.mf表示矩阵与单个数的运算,.mv表示矩阵与向量间的运算,以及通过.mv dim0表示矩阵与单行矩阵(行向量)进行运算,通过.mv dim1表示矩阵与单列矩阵(列向量)进行运算。
步骤S302:根据解析的结果,确定周期性读取元素的个数W。具体的,该确定的过程可通过预配置的方式确定,即已明确当前周期性读取元素的个数W的值,此时W的值是固定的,不需要实时确定;也可根据实时接收到的运算指令,根据指令的运算类型、第一矩阵的宽度以及计算单元的个数实时确定W的值。
由于不同运算类型的运算特点,数据读取以及运算的元素的个数会不同。例如针对.m的列元素累加,如果每次读取的元素个数为整行(1行、2行或者3行等),读取的数据写入计算单元后,则列位置是对应的;如果每次读取的元素个数为整行,还需记录读取的每个元素的列信息,以写入计算单元时每个计算单元获取的元素的列信息相同(即位于同一列)。以及,在确定W的值的过程中,还需考虑计算单元的利用率。所以针对不同的运算类型或者不同的计算单元的个数,每次读取元素的个数会有不同。
因此,在步骤S302中,响应于运算类型为第一类型,确定周期性读取元素的个数W为计算单元的个数K。其中,第一类型包括运算类型.mm和运算类型.mf。响应于运算类型为第二类型,确定周期性读取元素的个数W为第一矩阵的宽度的整数倍,第二类型包括运算类型.mv和运算类型.m。
示例性的,矩阵处理器的计算单元个数为16、源矩阵的行元素个数为7的情况下:若接收指令类型为.mm指令后,可一次读取源矩阵的16个(即W=K)元素;若接收指令类型为.m指令后,可一次读取源矩阵的14个(即W=2N)元素,以进行整行读取源矩阵的元素并计算。矩阵处理器的计算单元个数为32、源矩阵的行元素个数为7的情况下:若接收指令类型为.mm指令后,可一次读取源矩阵的32个(即W=K)元素;若接收指令类型为.m指令后,可一次读取源矩阵的28个(即W=4N)元素,以进行整行读取源矩阵的元素并计算。
在一个实施例中,可接收寄存器指令,然后根据寄存器指令进行寄存器参数配置,寄存器指令至少包括第一矩阵的宽度、高度和行间隔数。其中,第一矩阵的宽度即为第一矩阵每行元素个数N,行间隔数即为矩阵中相邻两行同列的地址差。响应于第一矩阵的宽度和行间隔数相等,确认第一矩阵的源地址连续。源地址是连续的,则可通过一次读memory将W个数据全读进来。
步骤S303:周期性读取第一矩阵中的W个第一元素,并写入矩阵处理器的计算单元进行计算,直至第一矩阵中的元素读取完毕。在本步骤中,根据第一矩阵的起始地址,从内存读取源矩阵的W个元素,写入矩阵处理器的计算单元进行计算。
以及,在周期性读取第一矩阵中的W个第一元素之前,响应于第一矩阵的宽度和行间隔数相等,确认第一矩阵的源地址连续,因此可通过一次读memory将W个数据全读进来。
在一实施例中,将W个第一元素送入矩阵处理器计算单元进行计算的步骤中,响应于设置的W=K,按照数据顺序对读取的第一矩阵中的W个第一元素进行裁剪,以得到W1个元素,即该W1个元素为W个第一元素中的前W1个元素。其中,W1=β*N≤W,β>1,且β为整数;将W1个元素送入矩阵处理器的计算单元进行计算。例如,针对预配置的W的值是固定的情况下,假设不考虑指令的类型以及源矩阵的宽度,W的值固定为计算单元的个数,由于需要考虑待计算数据的位置对应性,无法一次对W个第一元素进行计算,则将数据写入计算单元的过程中,确定每次计算的元素个数W1,其中,该W1为源矩阵的宽度整数倍。
示例性地,矩阵处理器计算单元的数量为16,第一矩阵的行数7和列数5,即K=16、M=7、N=5,在读取第一矩阵中的W个第一元素到矩阵处理器的第一寄存器单元之前,设置W=16,这样有16第一个元素读入第一寄存器。在将W个第一元素送入矩阵处理器计算单元进行计算之前,设置W1=β*N,例如设置β=3,此时N=5,那么W1=15,这样从16个读入元素中截取了15个送到计算单元计算。对于一些运算类型例如.m,每次计算的元素个数为N的整倍数,有利于最终结果的输出。
在一个实施例中,确定第一矩阵的读取地址,其中,读取地址为addr+β*N*(C-1),addr为第一矩阵首个元素地址(即源矩阵的基地址),C为第一矩阵的读取次数,进而可根据该读取地址读取第一矩阵的数据。其中,第一矩阵的首个元素地址addr可在计算之前通过寄存器配置进行预配置,则数据读取过程中,可直接确定第一矩阵的首个元素地址。
示例性地,如果设置β=3,N=5,第一次读取第一矩阵的第一元素,C=1,那么第一矩阵的读取地址为addr,第二次读取时C=2,则第一矩阵的读取地址为addr+15。
在一个实施例中,最后一次读取第一矩阵时,如果第一矩阵中未被读取的第一元素数量小于β*N,读取第一矩阵中的第一元素到结果寄存器。
示例性地,对第一矩阵进行列累加计算,矩阵处理器计算单元的数量为16,第一矩阵的行数7和列数5,即K=16、M=7、N=5,设置β=3,在第三次读取第一矩阵时,第一矩阵中未被读取的第一元素数量为5,小于15,此时将第一矩阵中的5个第一元素读取到结果寄存器。由于5个元素和15个元素无法对齐,因此将这5个元素读入结果寄存器,参与后续的运算。
图3是矩阵进行列累加运算的示意图,图4是本申请实施例一种基于矩阵处理器的数据处理方法的矩阵进行列累加运算的中间结果的示意图。为便于表述方案,在本实施例中,以运算指令acc.m dim0表示矩阵进行列累加运算,第一矩阵为M1,得到的目的矩阵为V。
对于矩阵进行列累加,需要对所有行的列元素进行累加,而根据本申请实施例实现运算指令acc.m dim0时,一次读取多行数据并进行计算,所以涉及中间结果进行折叠的过程,即将大于矩阵宽度的中间结果拆分为多组数据,每组数据中包括的中间结果的个数等于矩阵宽度。如图4所示,在最后一次计算或者倒数第二次计算过程中,假设结果寄存器单元中存储的中间结果c11,c12…c1N,c21,c22…c2N共2N个元素,将2N个元素分别拆分为c11,c12…c1N和c21,c22…c2N,然后将两组数据c11,c12…c1N和c21,c22…c2N分别写入N个计算单元,计算得到目的矩阵V。具体的:结果寄存器中包含u*N个元素;设置L等于u/2的整数部分;如果u为偶数,按照存储顺序,将结果寄存器中的元素分为两组,每组包含L*N个元素,将两组元素送入计算单元进行计算,计算结果的L*N个元素输出到结果寄存器单元;如果u为奇数,按照存储顺序,将结果寄存器中的元素分为三组,其中第一组和第二组包含L*N个元素,第三组包含N个元素,将第一组和第二组元素送入计算单元进行计算,计算结果的L*N个元素输出到结果寄存器单元,结果寄存器单元包含计算结果的L*N个元素与第三组元素的N个元素;如果u为偶数,设置u等于L,如果u为奇数,设置u等于L+1;重复上述步骤直至u=1。
示例性地,对第一矩阵进行acc.m dim0计算,矩阵处理器计算单元的数量为16,第一矩阵的行数7和列数5,即K=16、M=7、N=5,设置β=3,在进行完第二次读取第一矩阵元素,并送计算单元计算后,结果寄存器中有15个元素,第三次从第一矩阵读取5个元素到结果寄存器。结果寄存器中有20个元素,即4*5个元素,u=4,则L等于2;此时u为偶数,按照存储顺序,将结果寄存器中的元素分为两组,即结果寄存器中的前10个元素为一组,后10个元素为一组,将两组元素送入计算单元进行相加运算,相加运算后结果寄存器中有10个元素。u为偶数,L=2,设置u=2。重复上述步骤,再将10个元素分成两组,每组包含5个元素,此时L=1,将第一组和第二组元素送入计算单元进行计算,计算结果的5个元素输出到结果寄存器单元,u为偶数,L=1,设置u=1,计算结束。结果寄存器单元中的5个元素为第一矩阵进行acc.mdim0的计算结果。
示例性地,对第一矩阵进行acc.m dim0计算,矩阵处理器计算单元的数量为16,第一矩阵的行数8和列数5,即K=16、M=8、N=5,设置β=3,在进行完第二次读取第一矩阵元素,并送计算单元计算后,结果寄存器中有15个元素,第三次从第一矩阵读取10个元素到结果寄存器。结果寄存器中有25个元素,即5*5个元素,u=5,则L等于2;此时u为奇数,按照存储顺序,将结果寄存器中的元素分为三组,其中第一组和第二组包含10个元素,第三组包含5个元素,将第一组和第二组元素送入计算单元进行计算,计算结果的10个元素输出到结果寄存器单元,结果寄存器单元包含计算结果的10个元素与第三组元素的5个元素。u=5为奇数,设置u等于3,重复上述步骤,直至u=1。
对于acc.m dim0运算指令的实现,具体包括:
第一步:通过配置的寄存器参数配置确定第一矩阵M1地址连续以及目的矩阵V的地址连续,假设计算单元的个数为16,M1的宽度为5、高度为7,根据M1的基地址读取16个数据(即第一元素)。
第二步:在acc.m dim0运算指令实现过程中,矩阵处理器的16个计算单元的每次计算,是针对第一矩阵M1的整行进行计算,所以对读取的M1对应的16个数据进行裁剪,裁剪后的数据的宽度为矩阵宽度的3倍,该矩阵宽度的3倍可最大限度利用矩阵处理器的计算单元。由于第一次读取数据,没有其他可进行相加的数据,可将该15个数据暂时至第一寄存器。或者,可将裁剪后的15个数据暂时写入结果寄存器作为中间结果,以在周期性计算过程中,每次读取第一矩阵M1的16个数据裁剪后得到15个数据送入计算单元,然后从结果寄存器中读取15个数据送入计算单元,使得计算单元对其获取的数据进行加法运算,并将计算得到的15个计算结果依次写入结果寄存器,再下一次计算过程中,可再根据该15个计算结果以及读取的第一矩阵M1的数据进行计算。
第三步:计算M1的基地址+*矩阵的宽度,确定第二次读取数据的起始地址(即M1的第四行的首列数据的地址),第二次根据该起始地址读取M1对应的16个数据。
第四步:对再次读取的M1对应的16个数据进行裁剪,裁剪后的数据的宽度为矩阵宽度的3倍。将两次裁剪的数据写入15个计算单元进行计算,每个计算单元对写入的两个数据进行相加,并将该计算的中间结果写入结果寄存器。
第五步:计算M1的基地址+2*矩阵的宽度,确定第三次读取数据的起始地址(即M1的第七行的首列数据的地址),第三次根据该起始地址读取M1对应的5个数据。
第六步:将结果寄存器中的中间结果折叠,形成10个数据和5个数据,将该折叠的5个数据与第三次获取的五个数据组成10个数据,以及将两组10个数据写入10个计算单元进行计算,将该计算的中间结果写入结果寄存器。
第七步:将结果寄存器中的中间结果再次折叠,形成5个数据和5个数据,将再次折叠的5个数据和5个数据写入5个计算单元进行计算,将计算结果写入目的地址,计算完成。
需要进行说明的是,与acc.m dim0的运算过程类似,在进行计算第一矩阵的元素列最大值max.m dim0和列最小值min.m dim0计算时,也是将W个第一元素送入矩阵处理器计算单元,进行计算时是将上一次比较大小值的结果,即计算的中间结果与本次读取的数据进行比较运算,计算的中间结果存储在结果寄存器。
示例性地,第一矩阵的元素列最大值max.m dim0表示将每一列元素的最大值提取出来组成向量V1,V2…VN。以每次处理2N个元素为例,设置W为2N,首先读取第一矩阵的2N个第一元素到第一寄存器,首次读取的数据没有进行取最大值计算的基准,直接复制到第三存储器作为中间结果,示例性地,记作c11,c12…c1N,c21,c22…c2N。第二次从读取第一矩阵的2N个第一元素到第一寄存器,与结果寄存器中存储的中间结果c11,c12…c1N,c21,c22…c2N进行取最大值计算,并将结果赋予c11,c12…c1N和c21,c22…c2N,存储在结果寄存器,以此类推直至第一矩阵的元素读取完毕。最后一步,仍是c11,c12…c1N、c21,c22…c2N进行折叠并进行取最大值运算,求得向量V1,V2…VN。相对应的,第一矩阵的元素列最小值min.m dim0也采用相同的运算过程。
图5是双矩阵进行点乘运算的示意图,即将aij与bij相乘,得到cij。如图5所示,在本实施例中,以运算指令mul.mm表示双矩阵进行点乘运算,第一矩阵为M1,第二矩阵为M2,得到的目的矩阵为M3。
对于mul.mm运算指令的实现,具体包括:
第一步:接收mul.mm指令,该指令包含32位,指令格式如下:
31 26 | 25 | 24 20 | 19 15 | 14 | 13 12 | 11 7 | 6 0 |
000001 | 6 | rs2 | rs1 | 0 | 0 | rd | 1111011 |
其中0:6位表示该指令是RISC-V的自定义指令;
rd是目的矩阵M3的基地址;
rs1是第一矩阵M1的基地址;
rs2是第二矩阵M2的基地址;
26:31位表示该指令是mul指令,即每个计算单元进行乘法运算;
25,14,13:12共同决定当前指令是.mm,即指令类型为双矩阵运算的类型。
第二步:由于已通过csr指令(寄存器指令)设置M1、M2矩阵的高度、宽度、行间隔数,以及M3矩阵的行间隔数,根据配置的该参数可确定M1、M2、M3地址连续,假设计算单元的个数为16,M1、M2的宽度为5、高度为7。根据接收的mul.mm指令,根据M1的基地址读取M1对应的16个数据(非整行读取数据,即行数的非整数倍获取数据),根据M2的基地址读取M2对应的16个数据(非整行读取数据),以及将M1、M2对应的16个数据写入16个计算单元进行计算,将计算结果写入目的地址。在本实施例中,Y=W,设置Y=K,使得矩阵处理器计算单元的利用率为100%。
第三步:分别计算M1、M2的基地址+计算单元,确定第二次读取数据的起始地址,第二次根据该起始地址分别读取M1、M2对应的16个数据,写入到计算单元进行计算,然后将计算结果写入目的地址。
第四步:分别计算M1、M2的基地址+2*计算单元的数量,确定第三次读取数据的起始地址,第三次根据该起始地址读取M1、M2对应的3个数据,写入到计算单元进行计算,然后将计算结果写入目的地址,计算完成。
需要说明的是,由于.mm是两个形状相同矩阵的点乘,所以非整行读取数据不会影响数据的运算,但也可整行读取数据,即对于16个计算单元,每次读取M1和M2对应的15个数据(3行数据)进行计算,具体的:第一次根据M1、M2的基地址读取M1、M2对应的15个数据;然后,根据M1、M2的基地址+矩阵的宽度,确定第二次读取数据的起始地址(即M1、M2的第四行的首列数据的地址),第二次根据该起始地址读取M1、M2对应的15个数据。最后,根据M1、M2的基地址+2*矩阵的宽度,确定第三次读取数据的起始地址(即M1、M2的第七行的首列数据的地址),第三次根据该起始地址读取M1、M2对应的5个数据。
图6(a)—图6(b)是本申请实施例一种基于矩阵处理器的数据处理方法两个矩阵进行运算优化前后的示意图;其中图6(a)是优化前的示意图,图6(b)是优化后的示意图。
参考图6(a),矩阵处理器中有16个计算单元(EU0-EU15),大小为3*6的第一矩阵和第二矩阵,现有技术中每个周期只能使用3个计算单元,总共需要6个周期才能执行完所有的计算。
在一个可选实施例中,第一矩阵为多行多列的矩阵,第二矩阵为多行多列的矩阵,W等于K,Y等于K。参考图6(a),K为16,则W和Y均取值16。
参考图6(b),第一个周期计算时,分别读取第一矩阵和第二矩阵的前16个数据到第一寄存器和第二寄存器,在进行计算时,送入16个计算单元进行一次计算;然后,第二个周期进行运算时,计算剩下的两个数据即可,这样2个周期即可完成芯片的矩阵运算,比原来所使用的6个周期缩短了2/3。示例性的,本实施例中两个矩阵的运算可以是相加或者哈达马积乘法运算。
对于非单个矩阵的运算,会有第一矩阵与第二矩阵的形状不同的情况,此时,例如第二矩阵为一个常数时,可对第二矩阵进行扩展,则在数据获取过程中,读取第二矩阵中的Y个第二元素到矩阵处理器的第二寄存器单元,响应于Y小于W,在第二寄存器单元内,将Y个第二元素扩展为W个第二元素。将W个第一元素和W个第二元素送入K个矩阵处理器计算单元进行计算,计算结果输出到矩阵处理器的结果寄存器单元。
图7是矩阵与单个数进行相加运算的示意图,即将aij与f相加,得到cij。如图7所示,在本实施例中,以运算指令acc.mf表示矩阵与单个数进行相加运算,第一矩阵为M1,第二矩阵为f,得到的目的矩阵为M3。
对于acc.mf运算指令的实现,具体包括:
第一步:接收.mf运算指令。
第二步:由于已通过csr指令(寄存器指令)设置M1矩阵的高度、宽度、行间隔数,以及M3矩阵的行间隔数,根据配置的该参数可确定M1、M3地址连续。假设计算单元的数量为16,M1的宽度为5、高度为7,根据M1的基地址读取M1对应的16个数据(即第一元素)。
第三步:f(即第二元素)只读一次,将f数据复制多份,复制后数据的宽度等于计算单元的数量K,在本实施例中,计算单元的数量K与读取的第一元素的个数相等,将复制后的数据存在第二寄存器中。将复制后的数据存在第二寄存器中,则可只一次读取f,计算单元周期性计算过程中,无需每次从外部读取f,从第二寄存器中读取,可提升计算速率。
第四步:将读取的M1对应的16个数据写入16个计算单元,以及将复制的16个f对应的写入该16个计算单元,每个计算单元对获取的数据进行相加计算,并将计算结果写入目的地址。
第五步:计算M1的基地址+计算单元的个数,确定第二次读取数据的起始地址,根据第二次的起始地址读取M1对应的16个数据,将该16个数据以及复制的16个f对应的数据再次写入到计算单元进行计算,然后将计算结果写入目的地址。
第六步:计算M1的基地址+2*计算单元的个数,确定第三次读取数据的起始地址,根据第三次的起始地址读取M1对应的3个数据,将3个f对应的数据写入到计算单元进行计算,然后将计算结果写入目的地址,,写入目的地址的所有计算结果构成目的矩阵为M3计算完成。
根据本实施例完成对第一矩阵与单个数的相加运算,计算周期数(计算单元的计算次数)等于第一矩阵元素总数(M*N)/W,而W大于N,因此计算周期数小于M,相比于现有技术,提高了计算效率。示例性地,如果W为N的4倍,则计算周期数为M/4。
图8是矩阵与行向量相加运算的示意图,即将aij与Vj相加,得到cij。如图8所示,第一矩阵M1和向量V在行方向上进行计算指的是M1的第一行数据与V的第一行数据进行运算(V1-VN),M1的第二行数据也与V的第一行数据进行运算,以此类推,直至第一矩阵M1的所有行均与V相加。在本实施例中,以运算指令acc.mv dim0表示矩阵与行向量进行相加运算,行向量也即单行矩阵,第一矩阵为M1,第二矩阵为V,得到的目的矩阵为M3。
对于acc.mv dim0运算指令的实现,具体包括:
第一步:接收.mv dim0运算指令。
第二步:确定M1、M3地址连续,假设计算单元的数量为16,M1的宽度为5、高度为7,V的宽度为5、高度为1,根据M1的基地址读取M1对应的16个数据。
第三步:对读取的M1对应的16个数据进行裁剪,裁剪后的数据的宽度为矩阵宽度的3倍(即对3整行数据进行计算)。若确定每次读取的数量W为15个的话,即W为源矩阵宽度的整数倍,则可不用对读取的数据进行裁剪。
第四步:根据V的基地址读取16个数据,对该读取16个数据进行裁剪得到V对应的5个数据,同样如果直接读取V的5数据,则不需要对数据进行裁剪。将裁剪后的数据复制多份,即将V整行复制3份,复制后数据的宽度等于矩阵宽度的3倍;将处理后的数据存在第二寄存器中,计算后面行的时候不需要再重新从memory读取V的数据。
第五步:将裁剪的M1对应的15个数据写入计算单元(此时会剩余一个计算单元空闲),以及将复制的15个V对应数据对应写入计算单元进行加法计算,将计算结果写入目的地址。
第五步:计算M1的基地址+矩阵的宽度,确定第二次读取数据的起始地址(即M1的第四行的首列数据的地址),第二次根据该起始地址读取M1对应的16个数据。
第六步:再次对读取的M1对应的16个数据进行裁剪,裁剪后的数据的宽度为矩阵宽度的3倍。
第七步:将再次裁剪的M1对应的15个数据写入15个计算单元,以及将寄存器中复制的15个V对应数据写入15个计算单元进行计算,将计算结果写入目的地址。
第八步:计算M1的基地址+2*矩阵的宽度,确定第三次读取数据的起始地址(即M1的第七行的首列数据的地址),第三次根据该起始地址读取M1对应的5个数据。
第九步:将第三次读取的5个数据以及5个V对应数据写入计算单元进行计算,将计算结果写入目的地址,计算完成。
图9(a)—图9(c)是本申请实施例一种基于矩阵处理器的数据处理方法多行多列矩阵和单行矩阵进行运算优化前后的示意图;
图9(a)示意性示出了多行多列矩阵和单行矩阵在现有技术中的运算示意图,第一矩阵逐行与第二矩阵进行运算。矩阵处理器中有16个计算单元,第一矩阵的大小为3*6,第二矩阵为1*3,通过现有技术每次周期性计算过程中只能使用3个计算单元,总共需要6个周期执行完所有的计算。
图9(b)示意性示出了多行多列矩阵和单行矩阵优化后的运算示意图,在一个实施例中,第一矩阵为多行多列的矩阵,第二矩阵为单行矩阵;Y为第二矩阵的元素个数3,则在读取第二矩阵的元素过程中,第一次从外部读取Y个第二元素,在该计算类型指令实现过程中,设置W为Y的整数倍更便于计算以及有利于最终结果的输出;将Y个第二元素扩展为W个第二元素的步骤为,在第二寄存器单元内,将Y个第二元素复制为W个第二元素。参考图9(a)和图9(b),此时Y=3,W=6。每次将第一矩阵6个数据即两行数据分别于第二矩阵的第二元素进行运算,3个周期即可完成计算,这样每个周期可以使用6个计算单元,比原来所使用的6个周期缩短了1/2。
需要进行说明的是,W为Y的整数倍,只要W的数值不超过矩阵处理器的计算单元的个数。示例性的,W=9时,只需要2个计算周期即可完成运算,比原来所使用的6个周期缩短了2/3。
图9(c)示意性示出了多行多列矩阵和单行矩阵优化后的运算中间过程示意图。此时W为Y的两倍,V1,V2…VN被复制了一倍。此时W也是第一矩阵列数N的2倍,即每行元素个数的两倍,W个第一元素即第一矩阵的第一行元素和第二行元素,即a11,a12…a1N和a21,a22…a2N。W为N的两倍,因此完成运算所使用的周期数也是原来的1/2。
图10是矩阵与列向量相加运算的示意图,即将aij与Vi相加,得到cij。如图10所示,第一矩阵M1和向量V在列方向上进行相加计算,指的是M1的第一行数据均与V1进行运算,M1的第二行数据均与V2进行计算,以此类推,直至第一矩阵M1的所有列均与V相加。在本实施例中,以运算指令acc.mv dim1表示矩阵与列向量进行相加运算,列向量也即单列矩阵,第一矩阵为M1,第二矩阵为V,得到的目的矩阵为M3。
对于acc.mv dim1运算指令的实现,具体包括:
第一步:接收acc.mv dim1运算指令。
第二步:确定M1、V、M3地址连续,假设计算单元的数量为16,M1的宽为5、高为7,V的宽为1、高为7,根据M1的起始地址读取M1对应的16个数据。
第三步:对读取的M1对应的16个数据进行裁剪,裁剪后的数据的宽度为矩阵宽度的3倍(即对3整行数据进行计算)。
第四步:根据V的基地址读取16个数据,对该读取16个数据进行裁剪得到V对应的7个数据,同样如果直接读取V的7个数据,则不需要对数据进行裁剪。将裁剪后的数据复制多份(数据v1—v7分别依次复制5份);将处理后的数据存在寄存器中,计算后面行的时候不需要再重新从memory读取数据。
第五步:将裁剪的M1对应的15个数据写入15个计算单元,以及将复制的v1、v2、v3对应的15个数据写入15个计算单元进行计算,将计算结果写入目的地址。
第五步:计算M1的基地址+矩阵的宽度,确定第二次读取数据的起始地址(即M1的第四行的首列数据的地址),第二次根据该起始地址读取M1对应的16个数据。
第六步:再次对读取的M1对应的16个数据进行裁剪,裁剪后的数据的宽度为矩阵宽度的3倍。
第七步:将再次裁剪的M1对应的15个数据写入15个计算单元,以及将寄存器中复制的v4、v5、v6对应的15个数据写入15个计算单元进行计算,将计算结果写入目的地址。
第八步:计算M1基地址+2*矩阵的宽度,确定第三次读取数据的起始地址(即M1的第七行的首列数据的地址),第三次根据该起始地址读取M1对应的5个数据。
第九步:将第三次读取的5个数据以及v7对应的5个数据写入计算单元进行计算,将计算结果写入目的地址,计算完成。
图11是本申请实施例一种基于矩阵处理器的数据处理方法多行多列矩阵和单列矩阵进行加法运算的中间过程示意图。
在一个实施例中,第一矩阵为多行多列的矩阵,第二矩阵为单列矩阵;Y为第二矩阵的元素个数,W为N的R倍,R为整数;Y个第二元素扩展为W个第二元素的步骤为,在第二寄存器单元内,将Y个第二元素复制N-1次组成元素个数为Y×N的中间矩阵,从中间矩阵取出R行第二元素组成W个第二元素。参考图10,此时R=2,V1和V2在第二寄存器中分别被复制了N-1次,从而第二寄存器中有N个V1和V2。从中间矩阵取出2行第二元素,即N个V1和N个V2,与第一矩阵的前2行元素a11,a12…a1N,a21,a22…a2N进行运算。示例性地,可以是进行加法运算。W为N的两倍,因此完成运算所使用的周期数也是原来的1/2。
本申请一实施例提供了一种基于矩阵处理器的数据处理装置,包括第一读取模块,用于读取第一矩阵中的W个第一元素,并将W个第一元素送入矩阵处理器的计算单元进行计算;其中,W大于第一矩阵的宽度N,小于或等于矩阵处理器的计算单元的个数K;重复上述步骤,直至第一矩阵中的剩余元素的个数小于W。第二读取模块,用于响应于第一矩阵中的剩余元素的个数不为零,将剩余元素送入计算单元进行计算。
本申请一实施例提供了一种基于矩阵处理器的数据处理装置,包括第一读取模块,用于读取第一矩阵中的W个第一元素,以及获取第二矩阵中对应W个第一元素的W个第二元素;其中,W大于第一矩阵的宽度N,小于或等于矩阵处理器的计算单元的个数K;将W个第一元素和W个第二元素送入矩阵处理器的计算单元进行计算;第二读取模块,用于响应于第一矩阵中的剩余元素的个数不为零,将剩余元素送入计算单元进行计算。
本申请一实施例提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现本申请实施例的基于矩阵处理器的数据处理方法。
本申请一实施例提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如本申请实施例的基于矩阵处理器的数据处理方法。
本申请一实施例提供了一种芯片,其中,芯片包括矩阵处理器以及本申请实施例的基于矩阵处理器的数据处理装置。
本申请实施例中,矩阵处理器计算单元的个数由硬件决定,若矩阵在处理器外部的存储地址连续,则可采用本申请中的数据处理方法,提高矩阵处理器计算单元利用率,减少运算所采用的周期数,从而提高计算效率。
应当理解的是,本申请的上述具体实施方式仅仅用于示例性说明或解释本申请的原理,而不构成对本申请的限制。因此,在不偏离本申请的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。此外,本申请所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (10)
1.一种基于矩阵处理器的数据处理方法,其特征在于,包括:
读取第一矩阵中的W个第一元素,并将所述W个第一元素送入矩阵处理器的计算单元进行计算;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;
重复上述步骤,直至所述第一矩阵中的剩余元素的个数小于所述W;
响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。
2.根据权利要求1所述的方法,其特征在于,所述将所述W个第一元素送入矩阵处理器的计算单元进行计算,包括:
响应于设置的W=K,按照数据顺序对所述读取的第一矩阵中的W个第一元素进行裁剪,以得到W1个元素,其中,W1=β*N≤W,β>1,且β为整数;
将所述W1个元素送入所述矩阵处理器的所述计算单元进行计算。
3.根据权利要求2所述的方法,其特征在于,在读取源矩阵中的W个元素之前,还包括:
确定所述第一矩阵的读取地址,其中,所述读取地址为addr+β*N*(C-1),addr为所述第一矩阵首个元素地址,C为所述第一矩阵的读取次数。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述读取第一矩阵中的W个第一元素,并将所述W个第一元素送入矩阵处理器的计算单元进行计算,包括:
读取所述第一矩阵中的W个第一元素到所述矩阵处理器的第一寄存器单元;
将W个第一元素从所述第一寄存器单元读出并送入所述矩阵处理器的所述计算单元,以及将W个计算结果从所述矩阵处理器的结果寄存器单元读出并送入所述矩阵处理器的所述计算单元,使得所述计算单元进行计算,并将所述计算的结果更新至所述结果寄存器单元;其中,所述结果寄存器单元用于缓存所述计算单元每次计算的计算结果。
5.根据权利要求4所述的方法,其特征在于,所述将W个第一元素从所述第一寄存器单元读出并送入所述矩阵处理器的计算单元进行计算,所述计算的结果输出到所述矩阵处理器的结果寄存器单元,还包括:
响应于所述第一矩阵中的剩余元素的个数为零,确定所述结果寄存器中包含u*N个元素;
设置L等于u/2的整数部分;
如果所述u为偶数,按照存储顺序,将所述结果寄存器中的元素分为两组,每组包含L*N个元素,将所述两组元素送入所述计算单元进行计算,所述计算的结果的L*N个元素输出到所述结果寄存器单元;
如果所述u为奇数,按照存储顺序,将所述结果寄存器中的元素分为三组,其中第一组和第二组包含L*N个元素,第三组包含N个元素,将所述第一组和第二组元素送入计算单元进行计算,所述计算结果的L*N个元素输出到所述结果寄存器单元,所述结果寄存器单元包含所述计算结果的L*N个元素与第三组元素的N个元素;
重复上述步骤直至u=1。
6.一种基于矩阵处理器的数据处理方法,其特征在于,包括:
读取第一矩阵中的W个第一元素,以及获取第二矩阵中对应所述W个第一元素的W个第二元素;其中,所述W大于所述第一矩阵的宽度N,小于或等于所述矩阵处理器的计算单元的个数K;
将所述W个第一元素和所述W个第二元素送入所述矩阵处理器的计算单元进行计算;
重复上述步骤,直至所述第一矩阵中的剩余元素的个数小于所述W;
响应于所述第一矩阵中的剩余元素的个数不为零,将所述剩余元素送入所述计算单元进行计算。
7.根据权利要求6所述的方法,其特征在于,所述获取第二矩阵中对应所述W个第一元素的W个第二元素,包括:
响应于设置的W=α*N≤K,以及所述第一矩阵的宽度与所述第二矩阵的宽度相等,读取第二矩阵中的N个第二元素到所述矩阵处理器的第二寄存器单元;其中α>1,且α为整数;
在第二寄存器单元内,将N个第二元素复制α份,以扩展得到W个第二元素;或者
响应于设置的W=α*N≤K,以及所述第一矩阵的高度与所述第二矩阵的高度相等,读取第二矩阵中的α个第二元素到所述矩阵处理器的第二寄存器单元;
在第二寄存器单元内,将α个第二元素分别复制N份,以扩展得到W个第二元素;或者
响应于设置的W=K,以及所述第二矩阵的宽度、高度都为1,读取第二矩阵中的1个第二元素到所述矩阵处理器的第二寄存器单元;
在第二寄存器单元内,将1个第二元素分别复制W份,以扩展得到W个第二元素。
8.根据权利要求6或7任一项所述的方法,其特征在于,在所述读取第一矩阵中的W个第一元素之前,还包括:
接收运算指令,并对接收的运算指令进行解析,以确定运算指令所指示的运算类型;
根据确定的运算类型、第一矩阵的宽度以及计算单元的个数,确定W的值。
9.根据权利要求6或7任一项所述的方法,其特征在于,在所述读取第一矩阵中的W个第一元素之前,还包括:
根据寄存器指令进行寄存器参数配置,所述寄存器指令至少包括所述第一矩阵的宽度、高度和行间隔数;
响应于所述第一矩阵的宽度和行间隔数相等,确认所述第一矩阵的源地址连续。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5、6至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111372106.0A CN116136894A (zh) | 2021-11-18 | 2021-11-18 | 一种基于矩阵处理器的数据处理方法及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111372106.0A CN116136894A (zh) | 2021-11-18 | 2021-11-18 | 一种基于矩阵处理器的数据处理方法及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116136894A true CN116136894A (zh) | 2023-05-19 |
Family
ID=86333303
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111372106.0A Pending CN116136894A (zh) | 2021-11-18 | 2021-11-18 | 一种基于矩阵处理器的数据处理方法及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116136894A (zh) |
-
2021
- 2021-11-18 CN CN202111372106.0A patent/CN116136894A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108491359B (zh) | 子矩阵运算装置及方法 | |
EP3451162B1 (en) | Device and method for use in executing matrix multiplication operations | |
CN111580866B (zh) | 一种向量运算装置及运算方法 | |
US10346507B2 (en) | Symmetric block sparse matrix-vector multiplication | |
US20180137414A1 (en) | Convolution operation device and convolution operation method | |
CN111338695B (zh) | 基于流水线技术的数据处理方法及相关产品 | |
CN108073549B (zh) | 卷积运算装置及方法 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
EP4227886A1 (en) | Matrix operation method and apparatus for image data, device, and storage medium | |
KR101222597B1 (ko) | 메모리의 판독 및 기록방법, 메모리 제어방법과, 그것을이용한 연산장치 | |
CN110727911A (zh) | 一种矩阵的运算方法及装置、存储介质、终端 | |
CN112835552A (zh) | 一种外积累加求解稀疏矩阵与稠密矩阵内积的方法 | |
CN110688616A (zh) | 一种基于乒乓ram的条带阵列的卷积模块及其运算方法 | |
CN115186802A (zh) | 基于卷积神经网络的块稀疏方法、装置及处理单元 | |
CN113485750B (zh) | 数据处理方法及数据处理装置 | |
WO2022068328A1 (zh) | 数据迁移的方法、装置、处理器和计算设备 | |
US4916649A (en) | Method and apparatus for transforming a bit-reversed order vector into a natural order vector | |
CN116136894A (zh) | 一种基于矩阵处理器的数据处理方法及可读存储介质 | |
CN109800867B (zh) | 一种基于fpga片外存储器的数据调用方法 | |
CN112183732A (zh) | 卷积神经网络加速方法、装置和计算机设备 | |
CN112639836A (zh) | 数据处理装置、电子设备和数据处理方法 | |
CN116361609A (zh) | 一种二维矩阵运算的降维数据处理方法及硬件构架 | |
JPH07152730A (ja) | 離散コサイン変換装置 | |
CN112837256A (zh) | 一种用于Harris角点检测的电路***及检测方法 | |
JP4248027B2 (ja) | データ要素の系列を変換する装置 |
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 |