CN117786298A - 一种用于arm架构的通用矩阵乘法计算方法及系统 - Google Patents
一种用于arm架构的通用矩阵乘法计算方法及系统 Download PDFInfo
- Publication number
- CN117786298A CN117786298A CN202311828344.7A CN202311828344A CN117786298A CN 117786298 A CN117786298 A CN 117786298A CN 202311828344 A CN202311828344 A CN 202311828344A CN 117786298 A CN117786298 A CN 117786298A
- Authority
- CN
- China
- Prior art keywords
- matrix
- block
- data
- data set
- blocking
- 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
- 239000011159 matrix material Substances 0.000 title claims abstract description 412
- 238000004364 calculation method Methods 0.000 title claims abstract description 16
- 230000000903 blocking effect Effects 0.000 claims abstract description 51
- 238000000034 method Methods 0.000 claims abstract description 25
- 230000001133 acceleration Effects 0.000 claims abstract description 10
- 229910052754 neon Inorganic materials 0.000 claims description 6
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims description 4
- 230000011218 segmentation Effects 0.000 claims description 4
- 238000004088 simulation Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 10
- 230000000694 effects Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000002474 experimental method Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种用于ARM架构的通用矩阵乘法计算方法及系统,方法包括:构建矩阵的分块矩阵;依据分块矩阵对矩阵的行和/或列扩展,计算矩阵扩展的行数和/或列数;提取分块矩阵每次从矩阵中加载数据组或写出数据组的首地址;依据分块矩阵、每次加载数据组的首地址和扩展的行数和/或列数,读取数据组并加载数据组至零初始化的分块矩阵内;采用矩阵乘法运算计算每次加载数据组的分块矩阵A′与分块矩阵B′的乘积并写入分块矩阵C′内,依据每次写出数据组的首地址将每次写入至分块矩阵C′的数据组输出至矩阵C。本发明的方法有良好的通用性,可以实现任意尺寸矩阵的通用矩阵乘法的加速功能,有效提高了ARM架构处理器的数据处理效率。
Description
技术领域
本发明涉及嵌入式并行计算技术,具体涉及一种用于ARM架构的通用矩阵乘法计算方法及系统。
背景技术
随着ARM体系架构的迅速发展,基于ARM架构处理器的高性能计算如图形图像处理、信号处理等应用需求也在急剧增加。在众多应用需求中,矩阵乘法是计算量大且最常用的数据处理算法之一,其计算效率直接关系着数据处理应用的性能。因此,如何提高通用矩阵乘法的数据处理效率,一直以来都是业界广泛关注的问题。
鉴于矩阵乘法中数据处理操作的相似性,传统的并行计算是提高矩阵乘法数据处理速度的最主要的优化方法。当前,常用的并行优化方法主要包括软并行和硬并行两种思路,软并行的方法是通过构造多线程,将矩阵数据在多线程中并行处理来提高矩阵乘法的计算效率;硬并行的方法根据ARM架构处理器的硬件特性,利用NEON向量寄存器可以实现矩阵数据的并行处理,从而取得较好的加速效果。
然而,软并行的方法因为线程开销导致性能提升有限,且可能会因为线程间数据的伪共享问题而导致计算效率不升反降。硬并行的方法只针对特定尺寸矩阵的乘法运算,如矩阵行数和列数均需满足4的倍数,虽然其可以通过填充零的方式来使矩阵满足该要求,但是目前尚没有具体的实施方法。
因此,如何面向ARM架构设计针对任意尺寸矩阵的通用矩阵乘法加速方法是本领域亟待解决的问题。
发明内容
为了解决对于面向ARM架构处理器针对任意尺寸矩阵的通用矩阵乘法加速尚缺乏相关技术方法的问题,本发明公开了一种用于ARM架构的通用矩阵乘法计算方法及系统。
实现发明目的的技术方案如下:
本发明第一方面提供了一种用于ARM架构的通用矩阵乘法计算方法,包括:
步骤S1、依据寄存器长度和预设矩阵精度,构建矩阵的分块矩阵,包括构建矩阵A的分块矩阵A′、矩阵B的分块矩阵B′和矩阵C的分块矩阵C′;
步骤S2、依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数;
步骤S3、依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址;
步骤S4、依据所述分块矩阵、每次加载数据组的所述首地址和所述扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内;
步骤S5、采用矩阵乘法运算,计算每次加载数据组的分块矩阵A′和分块矩阵B′的乘积并写入所述分块矩阵C′内,依据每次写出数据组的所述首地址,将每次写入至所述分块矩阵C′的数据组输出至所述矩阵C。
可选地,上述步骤S2中,所述依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数,包括:
步骤S21、以位于所述矩阵中第一行和第一列的数据作为起始数据,使用所述分块矩阵对所述矩阵进行模拟分割得到分块阵列,所述分块阵列包括多个矩阵块;
步骤S22、遍历所述分块阵列中每个所述矩阵块,提取所述分块阵列中小于所述分块矩阵的所述矩阵块作为待扩充矩阵块;
步骤S23、对每个所述待扩充矩阵块的行和/或列,通过零填充的方式进行扩展,使所述待扩充矩阵块的大小等于所述分块矩阵,获取所述待扩充矩阵块扩展的行数和/或列数,得到所述矩阵扩展的行数和/或列数。
可选地,上述步骤S3中,所述依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址,包括:
步骤S31、以位于所述矩阵中第一行和第一列的数据作为起始数据,提取所述矩阵中每个数据的行号和列号;
步骤S32、遍历所述矩阵,提取所述分块矩阵从所述矩阵中每次加载或写出数据组的第一数据的行号和列号以确定首地址。
可选地,上述步骤S4中,所述依据所述分块矩阵、每次加载数据组的所述首地址和所述矩阵扩展的行数和/或列数,从所述矩阵中读取数据并加载数据组至零初始化的所述分块矩阵内,包括:
步骤S41、对每个所述分块矩阵进行置零初始化;
步骤S42、依据所述分块矩阵、每次加载数据组的所述首地址,提取从所述矩阵中读取的数据组中首行数据的行号和首列数据的列号;
步骤S43、如果所述首行数据的行号小于所述矩阵的行数且差值小于所述分块矩阵的行数,或者所述首列数据的列号小于所述矩阵的列数且差值小于所述分块矩阵的列数,则依据所述矩阵扩展的行数和/或列数从所述矩阵中读取非扩充部分的数据组并加载数据组至零初始化的所述分块矩阵内;否则,直接从所述矩阵中读取数据并加载数据组至零初始化的所述分块矩阵内。
可选地,上述步骤S5中,采用ARM架构平台的NEON并行加速技术进行所述矩阵乘法运算。
本发明第二方面提供了一种用于ARM架构的通用矩阵乘法计算系统,包括:
分块矩阵构建模块,用于依据寄存器长度和预设矩阵精度,构建矩阵的分块矩阵,包括构建矩阵A的分块矩阵A′、矩阵B的分块矩阵B′和矩阵C的分块矩阵C′;
扩展模块,用于依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数;
首地址获取模块,用于依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址;
数据加载模块,用于依据所述分块矩阵、每次加载数据组的所述首地址和所述矩阵扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内;
矩阵乘法计算模块,用于采用矩阵乘法运算,计算每次加载数据组的分块矩阵A′和分块矩阵B′的乘积并写入所述分块矩阵C′内,依据每次写出数据组的所述首地址,将每次写入至所述分块矩阵C′的数据组输出至所述矩阵C。。
与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:本发明公开的用于ARM架构的通用矩阵乘法计算方法,通过采用构建的分块矩阵,对矩阵进行分割并对矩阵需要进行零填充(即扩展)的行和列进行确定,在每次加载数据组时根据确定的首地址和扩展的行数和/或列数,进行分块矩阵数据加载,使用加载有数据的两个分块矩阵相乘并输出得到最终的结果,本发明的方法有效解决了ARM架构平台下针对任意尺寸矩阵运算的加速方法,提高了数据处理效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例公开的用于ARM架构的通用矩阵乘法计算方法的流程图;
图2为本发明实施例公开的用于ARM架构的通用矩阵乘法计算方法的程序执行过程图;
图3为本发明实施例公开的矩阵扩展的行数和/或列数,以及分块矩阵加载数据方式的示意图;
图4为本发明实施例公开的分块矩阵加载数据组的过程。
具体实施方式
下面结合附图对本申请实施例进行详细描述。
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本发明实施例提供了一种用于ARM架构的通用矩阵乘法计算方法,参见图1和图2所示,包括:
步骤S1、依据寄存器长度和预设矩阵精度,构建矩阵的分块矩阵,包括构建矩阵A的分块矩阵A′、矩阵B的分块矩阵B′和矩阵C的分块矩阵C′;
步骤S2、依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数;
步骤S3、依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址;
步骤S4、依据所述分块矩阵、每次加载数据组的所述首地址和所述扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内;
步骤S5、采用矩阵乘法运算,计算每次加载数据组的分块矩阵A′和分块矩阵B′的乘积并写入所述分块矩阵C′内,依据每次写出数据组的所述首地址,将每次写入至所述分块矩阵C′的数据组输出至所述矩阵C。
可选的,步骤S1在具体实施时,除了构建矩阵A和矩阵B的分块矩阵外,还构建输出乘法计算结果的矩阵C的分块矩阵,即矩阵A和矩阵B乘积后得到的矩阵C的分块矩阵C′。
具体实施时,分块矩阵的大小由矩阵元素精度和NEON向量寄存器长度进行确定。例如,假定矩阵元素精度为32-b it,128-b it长的NEON向量寄存器可以存储4个(128/32)矩阵元素,即可以同时对这4个元素并行执行相同的矩乘操作。以4为基本操作尺寸,可将4*4的矩阵作为通用矩阵乘法的基本操作块,即分块矩阵。矩阵A、矩阵B和矩阵C均采用上述相同的分块矩阵分割方式。此时,分块矩阵的首地址,即分块矩阵首元素的地址也是原矩阵首元素的地址。
可选地,上述步骤S2中,依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数,包括:
步骤S21、以位于所述矩阵中第一行和第一列的数据作为起始数据,使用所述分块矩阵对所述矩阵进行模拟分割得到分块阵列,所述分块阵列包括多个矩阵块;
步骤S22、遍历所述分块阵列中每个所述矩阵块,提取所述分块阵列中小于所述分块矩阵的所述矩阵块作为待扩充矩阵块;
步骤S23、对每个所述待扩充矩阵块的行和/或列,通过填充零的方式进行扩展,使所述待扩充矩阵块的大小等于所述分块矩阵,获取所述待扩充矩阵块扩展的行数和/或列数,得到所述矩阵扩展的行数和/或列数。
具体实施时,通过将矩阵分割为分块矩阵来执行矩乘运算,需要确保矩阵各维度的尺寸满足分块矩阵尺寸的整数倍。鉴于矩阵尺寸大小的任意性,通过对矩阵的行和列可以采用填充零的方式来满足上述要求。例如:当矩阵某一维度(行或列)的尺寸大小不满足128/32=4的整数倍时,通过在该维度上填充零来将矩阵进行补齐,填充零的行数和列数均小于4,即参见图3所示,给出了矩阵填充零的行和列的示意图。在该示例中,矩阵用零填充了1行和2列,使填充后的矩阵尺寸满足分块矩阵尺寸整数倍的要求。
可选地,上述步骤S3中,所述依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址,包括:
步骤S31、以位于所述矩阵中第一行和第一列的数据作为起始数据,提取所述矩阵中每个数据的行号和列号;
步骤S32、遍历所述矩阵,提取所述分块矩阵从所述矩阵中每次加载或写出数据组的第一数据的行号和列号以确定首地址。
具体实施时,通过循环遍历矩阵A和B的所有分块矩阵来完成通用矩阵乘法运算,分块矩阵每次加载矩阵的数据组的首地址的更新步长由原矩阵的行数或列数,以及分块矩阵的大小(如4)进行确定。例如,当原矩阵是列主序时,其分块矩阵加载的首地址由原矩阵的行数和分块矩阵的大小进行更新;当原矩阵是行主序时,分块矩阵加载的首地址则由原矩的列数和分块矩阵的大小进行更新。
可选地,上述步骤S4中,所述依据所述分块矩阵、每次加载数据组的所述首地址和所述矩阵扩展的行数和/或列数,从所述矩阵中读取数据并加载数据组至零初始化的所述分块矩阵内,包括:
步骤S41、对每个所述分块矩阵进行置零初始化;
步骤S42、依据所述分块矩阵、每次加载数据组的所述首地址,提取从所述矩阵中读取的数据组中首行数据的行号和首列数据的列号;
步骤S43、如果所述首行数据的行号小于所述矩阵的行数且差值小于所述分块矩阵的行数,或者所述首列数据的列号小于所述矩阵的列数且差值小于所述分块矩阵的列数,则依据所述矩阵扩展的行数和/或列数从所述矩阵中读取非扩充部分的数据组并加载数据组至零初始化的所述分块矩阵内;否则,直接从所述矩阵中读取数据并加载数据组至零初始化的所述分块矩阵内。
具体实施时,在每次加载数据组时,都需要对分块矩阵进行置零初始化,而不是直接加载相应的数据组,通过先置零完成初始化再加载数据组,可以避免潜在的内存读写错误等问题。
具体实施时,分块矩阵加载数据组的过程还可以参见图4所示,首先,判断若原矩阵列数与列索引,以及矩阵行数与行索引的差值均小于4,则按照附图3中的填充区1的方式加载矩阵元素数据;否则,判断若矩阵列数与列索引的差值小于4,则按照附图3中的填充区2的方式加载矩阵元素数据;否则,判断若矩阵行数与行索引的差值小于4,则按照图3中的填充区3的方式加载矩阵元素数据;否则,直接根据分块矩阵所指地址加载矩阵元素数据。
可选地,上述步骤S5中,采用ARM架构平台的NEON并行加速技术进行所述矩阵乘法运算。
本发明的用于ARM架构的通用矩阵乘法计算方法的伪代码参见下表1所示:
表1:ARM架构的通用矩阵乘法计算方法的伪代码
本发明实施例中,通过对比传统矩乘对本发明的方法进行验证,实验采用国产FT2000/4处理器,并配备某国产Li nux操作系统搭建实验平台。该平台兼容ARMv8架构,并支持gcc编译。实验测试矩阵采用方阵,方阵单维度的尺寸大小分别为16+2,32+2,64+2,128+2,256+2,512+2和1k+2。其中“+2”是为了测试矩阵需要填充零的情形。实验测试结果如下表2所示,结果表明本发明所提方法相比于传统矩阵乘法有平均4倍的加速比,最高加速比为5.84,加速效果显著。
表2:本发明方法和传统方法的加速性能测试结果(时间单位:us)
矩阵维度尺寸 | 16+2 | 32+2 | 64+2 | 128+2 | 256+2 | 512+2 | 1k+2 |
传统矩乘 | 8 | 50 | 440 | 3377 | 27129 | 273667 | 3368347 |
本发明 | 6 | 16 | 114 | 775 | 6096 | 57388 | 577169 |
加速比 | 1.33 | 3.13 | 3.86 | 4.36 | 4.45 | 4.77 | 5.84 |
基于同一发明构思,本发明实施例中还提供了一种用于ARM架构的通用矩阵乘法计算系统,如下面的实施例所述。由于用于ARM架构的通用矩阵乘法计算系统解决问题的原理与上述用于ARM架构的通用矩阵乘法计算方法相似,因此所述通用矩阵乘法计算系统的实施可以参见所述通用矩阵乘法计算方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本发明实施例中,用于ARM架构的通用矩阵乘法计算系统,包括分块矩阵构建模块、扩展模块、首地址获取模块、数据加载模块和矩阵乘法计算模块。
其中,分块矩阵构建模块用于依据寄存器长度和预设矩阵精度,构建矩阵的分块矩阵,包括构建矩阵A的分块矩阵A′、矩阵B的分块矩阵B′和矩阵C的分块矩阵C′;
扩展模块用于依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数;
首地址获取模块用于依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址;
数据加载模块用于依据所述分块矩阵、每次加载数据组的所述首地址和所述矩阵扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内;
矩阵乘法计算模块用于采用矩阵乘法运算,计算每次加载数据组的分块矩阵A′和分块矩阵B′的乘积并写入所述分块矩阵C′内,依据每次写出数据组的所述首地址,将每次写入至所述分块矩阵C′的数据组输出至所述矩阵C。
本发明实施例实现了如下技术效果:本发明公开的用于ARM架构的通用矩阵乘法计算方法,通过采用构建的分块矩阵,对矩阵进行分割并对矩阵需要进行零填充(即扩展)的行和列进行确定,在每次加载数据组时根据确定的首地址和扩展的行数和/或列数,进行分块矩阵数据加载,使用加载有数据的两个分块矩阵相乘并输出得到最终的结果,本发明的方法有效解决了ARM架构平台下针对任意尺寸矩阵运算的加速方法,提高了数据处理效率。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种用于ARM架构的通用矩阵乘法计算方法,其特征在于,包括:
步骤S1、依据寄存器长度和预设矩阵精度,构建矩阵的分块矩阵,包括构建矩阵A的分块矩阵A′、矩阵B的分块矩阵B′和矩阵C的分块矩阵C′;
步骤S2、依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数;
步骤S3、依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址;
步骤S4、依据所述分块矩阵、每次加载数据组的所述首地址和所述扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内;
步骤S5、采用矩阵乘法运算,计算每次加载数据组的分块矩阵A′和分块矩阵B′的乘积并写入所述分块矩阵C′内,依据每次写出数据组的所述首地址,将每次写入至所述分块矩阵C′的数据组输出至所述矩阵C。
2.根据权利要求1所述的用于ARM架构的通用矩阵乘法计算方法,其特征在于,步骤S2中,所述依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数,包括:
步骤S21、以位于所述矩阵中第一行和第一列的数据作为起始数据,使用所述分块矩阵对所述矩阵进行模拟分割得到分块阵列,所述分块阵列包括多个矩阵块;
步骤S22、遍历所述分块阵列中每个所述矩阵块,提取所述分块阵列中小于所述分块矩阵的所述矩阵块作为待扩充矩阵块;
步骤S23、对每个所述待扩充矩阵块的行和/或列,通过填充零的方式进行扩展,使所述待扩充矩阵块的大小等于所述分块矩阵,获取所述待扩充矩阵块扩展的行数和/或列数,得到所述矩阵扩展的行数和/或列数。
3.根据权利要求1所述的用于ARM架构的通用矩阵乘法计算方法,其特征在于,步骤S3中,所述依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址,包括:
步骤S31、以位于所述矩阵中第一行和第一列的数据作为起始数据,提取所述矩阵中每个数据的行号和列号;
步骤S32、遍历所述矩阵,提取所述分块矩阵从所述矩阵中每次加载或写出数据组的第一数据的行号和列号以确定首地址。
4.根据权利要求1所述的用于ARM架构的通用矩阵乘法计算方法,其特征在于,步骤S4中,所述依据所述分块矩阵、每次加载数据组的所述首地址和所述矩阵扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内,包括:
步骤S41、对每个所述分块矩阵进行置零初始化;
步骤S42、依据所述分块矩阵、每次加载数据组的所述首地址,提取从所述矩阵中读取的数据组中首行数据的行号和首列数据的列号;
步骤S43、如果所述首行数据的行号小于所述矩阵的行数且差值小于所述分块矩阵的行数,或者所述首列数据的列号小于所述矩阵的列数且差值小于所述分块矩阵的列数,则依据所述矩阵扩展的行数和/或列数从所述矩阵中读取非扩充部分的数据组并加载数据组至零初始化的所述分块矩阵内;否则,直接从所述矩阵中读取数据并加载数据组至零初始化的所述分块矩阵内。
5.根据权利要求1所述的用于ARM架构的通用矩阵乘法计算方法,其特征在于,步骤S5中,采用ARM架构平台的NEON并行加速技术进行所述矩阵乘法运算。
6.一种用于ARM架构的通用矩阵乘法计算系统,其特征在于,包括:
分块矩阵构建模块,用于依据寄存器长度和预设矩阵精度,构建矩阵的分块矩阵,包括构建矩阵A的分块矩阵A′、矩阵B的分块矩阵B′和矩阵C的分块矩阵C′;
扩展模块,用于依据所述分块矩阵对所述矩阵的行和/或列扩展,获取所述矩阵扩展的行数和/或列数;
首地址获取模块,用于依据所述矩阵和所述分块矩阵,提取所述分块矩阵每次从所述矩阵中加载数据组或写出数据组的首地址;
数据加载模块,用于依据所述分块矩阵、每次加载数据组的所述首地址和所述矩阵扩展的行数和/或列数,从所述矩阵中读取数据组并加载数据组至零初始化的所述分块矩阵内;
矩阵乘法计算模块,用于采用矩阵乘法运算,计算每次加载数据组的分块矩阵A′和分块矩阵B′的乘积并写入所述分块矩阵C′内,依据每次写出数据组的所述首地址,将每次写入至所述分块矩阵C′的数据组输出至所述矩阵C。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311828344.7A CN117786298A (zh) | 2023-12-27 | 2023-12-27 | 一种用于arm架构的通用矩阵乘法计算方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311828344.7A CN117786298A (zh) | 2023-12-27 | 2023-12-27 | 一种用于arm架构的通用矩阵乘法计算方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117786298A true CN117786298A (zh) | 2024-03-29 |
Family
ID=90394220
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311828344.7A Pending CN117786298A (zh) | 2023-12-27 | 2023-12-27 | 一种用于arm架构的通用矩阵乘法计算方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117786298A (zh) |
-
2023
- 2023-12-27 CN CN202311828344.7A patent/CN117786298A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220383067A1 (en) | Buffer Addressing for a Convolutional Neural Network | |
US11468301B2 (en) | Method and apparatus for performing operation of convolutional layer in convolutional neural network | |
US20190220731A1 (en) | Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system | |
US8051124B2 (en) | High speed and efficient matrix multiplication hardware module | |
US10802956B2 (en) | Accessing prologue and epilogue data | |
US9058678B1 (en) | System and method for reducing the complexity of performing broad-phase collision detection on GPUs | |
US6901422B1 (en) | Matrix multiplication in a vector processing system | |
US8321492B1 (en) | System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm | |
US8341362B2 (en) | System, method and apparatus for memory with embedded associative section for computations | |
JP2010521728A (ja) | データ圧縮のための回路及びこれを用いるプロセッサ | |
CN111340201A (zh) | 卷积神经网络加速器及其执行卷积运算操作的方法 | |
US7689541B1 (en) | Reordering data using a series of offsets | |
US10402196B2 (en) | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients | |
US20230049471A1 (en) | Method and apparatus for operating image data | |
CN114565501B (zh) | 用于卷积运算的数据加载方法及其装置 | |
US7624107B1 (en) | Radix sort algorithm for graphics processing units | |
KR20230081697A (ko) | 팽창 컨볼루션 계산 가속화 방법 및 장치 | |
US11409840B2 (en) | Dynamically adaptable arrays for vector and matrix operations | |
Shahbahrami et al. | FPGA implementation of parallel histogram computation | |
US20220129744A1 (en) | Method for permuting dimensions of a multi-dimensional tensor | |
CN106909320B (zh) | 一种多维数据扩充传输的方法、装置以及系统 | |
WO2021168644A1 (zh) | 数据处理装置、电子设备和数据处理方法 | |
CN117786298A (zh) | 一种用于arm架构的通用矩阵乘法计算方法及系统 | |
KR20230078131A (ko) | 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법 | |
CN112149049A (zh) | 用于变换矩阵的装置和方法、数据处理系统 |
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 |