CN104572587A - 数据矩阵相乘的加速运算方法和装置 - Google Patents
数据矩阵相乘的加速运算方法和装置 Download PDFInfo
- Publication number
- CN104572587A CN104572587A CN201410815244.5A CN201410815244A CN104572587A CN 104572587 A CN104572587 A CN 104572587A CN 201410815244 A CN201410815244 A CN 201410815244A CN 104572587 A CN104572587 A CN 104572587A
- Authority
- CN
- China
- Prior art keywords
- data
- dimension
- block
- matrix
- data volume
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种数据矩阵相乘的加速运算方法和装置。其中,该数据矩阵相乘的加速运算方法包括:根据显存容量和待求解矩阵的数据量确定计算待求解矩阵的数据量的单次计算数据量上限;根据数据量上限和待求解矩阵的维度对待求解矩阵进行划分操作,得到多个数据块,其中,每个数据块的数据量小于等于数据量上限;在统一计算设备架构平台上构建线程和线程块的计算结构;在计算结构中依次对多个数据块进行并行运算;以及累计由计算结构依次输出的多个数据块的运算结果。通过本发明,解决了现有技术中进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高运算速度的同时保证运算结果的准确的效果。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种数据矩阵相乘的加速运算方法和装置。
背景技术
在现在数字化产业领域中,由于计算机技术的飞速发展,越来越多其他领域的技术开始被囊括进来,也越来越多的依靠数字化技术带来明显的产业推动能力,特别是制造业领域,由于设计、仿真分析在产品开发过程中所占有的比重增加,以及计算机便利的快速计算分析能力,现代制造业的产品开发流程几乎完全是基于数字化技术之上。也正是这种依赖关系,促使计算机软硬件不断更新换代以满足日益提升的性能需求。
在计算机辅助的数值分析计算领域,参与计算的数据量规模量级不断提升,虽然计算机技术也不断升级换代,但依然无法避免长时间的等待。而矩阵相乘就是一个典型的例子。由于矩阵相乘运算是O(N3)计算复杂度的计算过程,使得随着参与运算数据量的提升,计算规模和花费时间是指数级的增长速度,给计算机硬件带来了巨大的负担;同时,由于参与运算的数据有一定关联性,通过传统算法改进计算过程的努力也见效甚微。已有的一些方法是通过近似拟合方法压缩矩阵参与运算的数据量达到提升计算效率的目的,但这种方式将引入计算误差,对高精度要求的仿真计算结果会有较大影响。
针对现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种数据矩阵相乘的加速运算方法和装置,以解决现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题。
为了实现上述目的,根据本发明实施例的一个方面,提供了一种数据矩阵相乘的加速运算方法。根据本发明的数据矩阵相乘的加速运算方法包括:根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限;根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数 据块,其中,每个所述数据块的数据量小于等于所述数据量上限;在统一计算设备架构平台上构建线程和线程块的计算结构;在所述计算结构中依次对所述多个数据块进行并行运算;以及累计由所述计算结构依次输出的所述多个数据块的运算结果。
进一步地,所述多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,在所述计算结构中依次对所述多个数据块进行并行运算包括:获取所述计算结构中线程块的个数,其中,所述线程块包括X维度和Y维度;按照所述线程块在所述X维度上的个数h将所述第一子矩阵划分为h个第一数据子块,其中,所述第一数据子块包括多个数据子段Ai,i=0,1……a,a=所述第一数据子块的Y维度的长度/分割尺度+1;按照所述线程块在所述Y维度上的个数g将所述第二子矩阵划分为g个第二数据子块,其中,所述第二数据子块包括多个数据子段Bj,j=0,1……b,b=所述第二数据子块的X维度的长度/所述分割尺度+1;所述线程块对所述第一数据子段Ai和所述第二数据子段Bj进行相乘计算,其中,i=j。
进一步地,所述线程块包括多个线程,所述线程块对所述第一数据子块和所述第二数据子块进行相乘计算包括:获取所述多个线程中第一线程对应的所述第一数据子块中的数据子段Ai中的一行;获取所述第一线程对应的所述第二数据子块中的数据子段Bj中的一列;以及利用所述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列进行相乘计算。
进一步地,所述线程块对所述第一数据子块和所述第二数据子块进行相乘计算包括:获取所述线程块中的共享内存空间(SA,SB);在所述共享内存空间中依次存储所述数据子段Ai中的数据和所述数据子段Bj中的数据。
进一步地,根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限包括:获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;判断所述t、p和k是否满足第一条件,其中,所述第一条件为p/k<2且t/p<2;如果所述t、p和k满足所述第一条件,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;如果所述t、p和k不满足所述第一条件,则判断所述t、p和k是否满足第二条件,其中,所述第二条件为p/k<2且t/p>=k;在所述t、p和k满足所述第二条件时,判断所述t、p和k是否满足t=m或者t=l;如果所述t、p和k满足t=m或者t=l,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;如果所述t、p和k不满足t=m且不满足t=l,则确定所述待求解矩阵的数据量为m*l;在所述t、p和k不满足所述第二条件时,判断所述t、p和k是否满足第三条件,其中,所述第三条件为p/k>=2且t/p<2;在所述t、p和k满足所述第三条件时,判断所述t、p和k是否满足p=n;如果所述t、p和k满足p=n,则确定所述待求解矩阵的数据量为m*l;以及如果所述t、p和k不满足p=n,则确定所述待 求解矩阵的数据量为所述显存容量的三分之一。
进一步地,所述待求解矩阵包括第一矩阵和第二矩阵,根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块包括:获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;判断所述维度n是否为最小维度大小k;如果所述维度n不是所述最小维度大小k,则根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度l划分为s段;如果所述维度n是所述最小维度大小k,则根据所述数据量上限和所述维度m和l进行划分。
进一步地,根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度l划分为s段包括:获取分割尺度,其中,所述分割尺度为所述数据量上限的n分之一;将所述维度m划分为r段包括:维度m的每段长度为m/分割尺度+1;将所述维度l划分为s段包括:维度l的每段长度为l/分割尺度+1。
进一步地,根据所述数据量上限和所述维度m和l进行划分包括:确定a=MAX/n,其中,所述MAX为所述数据量上限;判断a*a是否大于所述MAX;如果a*a<=MAX,则将确定分割尺度为a;如果a*a>MAX,则确定所述分割尺度为MAX/a。
为了实现上述目的,根据本发明实施例的另一方面,提供了一种数据矩阵相乘的加速运算装置。根据本发明的数据矩阵相乘的加速运算装置包括:第一计算单元,用于根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限;划分单元,用于根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块,其中,每个所述数据块的数据量小于等于所述数据量上限;构建单元,用于在统一计算设备架构平台上构建线程和线程块的计算结构;第二计算单元,用于在所述计算结构中依次对所述多个数据块进行并行运算;以及累计单元,用于累计由所述计算结构依次输出的所述多个数据块的运算结果。
进一步地,所述多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,所述第二计算单元包括:第一获取模块,用于获取所述计算结构中线程块的个数,其中,所述线程块包括X维度和Y维度;第一划分模块,用于按照所述线程块在所述X维度上的个数h将所述第一子矩阵划分为h个第一数据子块,其中,所述第一数据子块包括多个数据子段Ai,i=0,1……a,a=所述第一数据子块的Y维度的长度/分割尺度+1;第二划分模块,用于按照所述线程块在所述Y维度上的个数g将所述第二子矩阵划分为g个第二数据子块,其中,所述第二数据子块包括多个数据子段Bj,j=0,1……b,b=所述第二数据子块的X维度的长度/所述分割尺度+1;计算模块,用于通过所述线程块对所述第一数据子块Ai和所述第二数据子块Bj进行相乘计算,其中,i=j。
进一步地,所述计算模块包括:第一获取子模块,用于获取所述多个线程中第一线程对应的所述第一数据子块中的数据子段Ai中的一行;第二获取子模块,用于获取所述第一线程对应的所述第二数据子块中的数据子段Bj中的一列;以及计算子模块,用于利用所述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列进行相乘计算。
进一步地,所述计算模块包括:第三获取子模块,用于获取所述线程块中的共享内存空间(SA,SB);存储子模块,用于在所述共享内存空间中依次存储所述数据子段Ai中数据和所述数据子段Bj中的数据。
进一步地,所述第一计算单元用于执行下述步骤:获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;判断所述t、p和k是否满足第一条件,其中,所述第一条件为p/k<2且t/p<2;如果所述t、p和k满足所述第一条件,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;如果所述t、p和k不满足所述第一条件,则判断所述t、p和k是否满足第二条件,其中,所述第二条件为p/k<2且t/p>=k;在所述t、p和k满足所述第二条件时,判断所述t、p和k是否满足t=m或者t=l;如果所述t、p和k满足t=m或者t=l,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;如果所述t、p和k不满足t=m且不满足t=l,则确定所述待求解矩阵的数据量为m*l;在所述t、p和k不满足所述第二条件时,判断所述t、p和k是否满足第三条件,其中,所述第三条件为p/k>=2且t/p<2;在所述t、p和k满足所述第三条件时,判断所述t、p和k是否满足p=n;如果所述t、p和k满足p=n,则确定所述待求解矩阵的数据量为m*l;以及如果所述t、p和k不满足p=n,则确定所述待求解矩阵的数据量为所述显存容量的三分之一。
进一步地,所述待求解矩阵包括第一矩阵和第二矩阵,所述划分单元包括:第二获取模块,用于获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;判断模块,用于判断所述维度n是否为最小维度大小k;第三划分模块,用于在所述维度n不是所述最小维度大小k时,根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度l划分为s段;第四划分模块,用于在所述维度n是所述最小维度大小k时,根据所述数据量上限和所述维度m和l进行划分。
进一步地,所述第三划分模块包括:第三获取子模块,用于获取分割尺度,其中,所述分割尺度为所述数据量上限的n分之一;第一划分子模块,用于将所述维度m划分为r段包括:维度m的每段长度为m/分割尺度+1;第二划分子模块,用于将所述维度l划分为s段包括:维度l的每段长度为l/分割尺度+1。
进一步地,所述第四划分模块包括:第一确定子模块,用于确定a=MAX/n,其中, 所述MAX为所述数据量上限;判断子模块,用于判断a*a是否大于所述MAX;第二确定子模块,用于在a*a<=MAX时,将确定分割尺度为a;第三确定子模块,用于在a*a>MAX时,确定所述分割尺度为MAX/a。
根据发明实施例,根据显存的容量对待求解矩阵进行划分,计算结构依次对划分后的多个数据块进行运算,避免了显存容量的限制所导致的计算出错,同时,在图像处理器中对一个数据块中的数据进行并行处理,提高了运算速度,即本实施例在提高矩阵的运算速度的同时,并未引入计算误差,从而解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高运算速度的同时保证运算结果的准确的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的数据矩阵相乘的加速运算方法的流程图;
图2示出了对第一子矩阵和第二子矩阵划分的示意图;
图3是根据本发明实施例的多个线程块的示意图;
图4是根据本发明实施例的对待求解矩阵划分的第一种情况的示意图;
图5是根据本发明实施例的对待求解矩阵划分的第二种情况的示意图;
图6根据本发明优选实施例的数据矩阵相乘的加速运算方法的流程图;以及
图7是根据本发明实施例的数据矩阵相乘的加速运算装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第 二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
名词解释:
CUP:中央处理器。
GPU:图形处理器。
本发明实施例提供了一种数据矩阵相乘的加速运算方法。可选地,该数据矩阵相乘的加速运算,通过主机端CPU分析待求解矩阵[A],[B]的m,n,l三个维度特点以及显存大小,将矩阵结构进行拆分,得到多个矩阵块,将拆分后的矩阵块逐个输入至设备端的GPU,利用设备端的GPU的运算能力,输出一个矩阵块的运算结果至主机端,并输入下一个矩阵块进行运算,当待求解矩阵的多个矩阵块都运算完成并输出运算结果后,在主机端将多个矩阵块的运算结果进行组合得到最终矩阵[C]。即在主机端将待求解矩阵分块,在设备端逐个运算待求解矩阵分块,并且在对求解矩阵分块时根据显存大小和待求解矩阵的维度特点进行分块,避免了输入给GPU的数据过大而造成无法运算的问题,另外,由于在进行加速运算时,对矩阵结果进行拆分得到多个矩阵块,在加速运算的同时,实质上并不改变矩阵的结构,也不会在计算过程中引入误差,也就解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高运算速度的同时保证运算结果的准确的效果。
图1是根据本发明实施例的数据矩阵相乘的加速运算方法的流程图。如图1所示,该数据矩阵相乘的加速运算方法包括如下步骤:
步骤S102,根据显存容量和待求解矩阵的数据量确定计算待求解矩阵的数据量的单次计算数据量上限。
显存容量制约了GPU处理矩阵的数据量,当显存容量不足以处理较多的数据量时,会降低GPU处理数据的速度,因此,在对待求解矩阵进行划分操作之前,根据显存容量和待求解矩阵的数据量确定GPU每次计算的数据量上限。
步骤S104,根据数据量上限和待求解矩阵的维度对待求解矩阵进行划分操作,得到多个数据块,其中,每个数据块的数据量小于等于数据量上限。
根据确定的数据量上限对待求解矩阵进行划分操作,划分后的数据块的数据量小 于等于数据量上限,也就避免了将数据块输入至设备端由于数据量过大而使得GPU无法处理的情况出现。
步骤S106,在统一计算设备架构平台上构建线程和线程块的计算结构。统一计算设备架构平台是构建在GPU中的平台。
步骤S108,在计算结构中依次对多个数据块进行并行运算。
步骤S110,累计由计算结构依次输出的多个数据块的运算结果。
GPU依次对每个数据块进行运算,每个数据块中包括多个数据,GPU可以对每个数据块中的数据进行并行计算,从而提高了GPU处理数据的速度。GPU结束对一个数据块的运算后,输出运算结果并接收新的数据块,当属于待求解矩阵的所有数据块都运算完毕并将结果都输出给CPU后,由CPU对多个数据块的运算结果进行累计,并得到待求解矩阵的最终计算结果。
具体地,多个数据块包括第一数据块和第二数据块,在计算结构中依次对多个数据块进行并行运算包括:计算结构对第一数据块进行处理。判断第一数据块是否被处理完。如果第一数据块被处理完,则输出第一数据块的数据处理结果。以及计算结构对第二数据块进行处理。
通过上述实施例,根据显存的容量对待求解矩阵进行划分,计算结构依次对划分后的多个数据块进行运算,避免了显存容量的限制所导致的计算出错,同时,在图像处理器中对一个数据块中的数据进行并行处理,提高了运算速度,即本实施例在提高矩阵的运算速度的同时,并未引入计算误差,从而解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高运算速度的同时保证运算结果的准确的效果。
具体地,多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,在计算结构中依次对多个数据块进行并行运算包括:获取计算结构中线程块的个数,其中,线程块包括X维度和Y维度。按照线程块在X维度上的个数h将第一子矩阵划分为h个第一数据子块,其中,第一数据子块包括多个数据子段Ai,i=0,1……a,a=第一数据子块的Y维度的长度/分割尺度+1。按照线程块在Y维度上的个数g将第二子矩阵划分为g个第二数据子块,其中,第二数据子块包括多个数据子段Bj,j=0,1……b,b=第二数据子块的X维度的长度/分割尺度+1。线程块对第一数据子块Ai和第二数据子块Bj进行相乘计算,其中,i=j。其中,分割尺度为数据量上限的n分之一。
图2示出了对第一子矩阵和第二子矩阵划分的示意图。其中,第一子矩阵和第二子矩阵都是被划分得到的第一数据块中的数据,在一个线程中对第一子矩阵和第二子矩阵进行相乘计算。例如,第一子矩阵为[A'],第二子矩阵为[B']。如图2所示,在X 维度上将第一子矩阵为[A']划分为h个第一数据子块,在Y维度上将第二子矩阵[B']划分为g个第二数据子块。一个第一数据子块和一个第二数据子块对应一个线程块,在该线程块对第一数据子块和第二数据子块进行运算时,对第一数据子块中的一段数据和第二数据子块中的一段数据进行运算。例如,第一数据子块中的数据子段A1和第二数据子块中的数据子段B1相乘,数据子段A2和数据子段B2相乘,依次类推,直到第一数据子块和第二数据子块中的数据均被进行相乘运算。
图2仅示出了一个线程块,在图3中示出了多个线程块,每个线程块中具有多个线程。每个线程块对应一个第一数据子块和一个第二数据子块。在对第一子矩阵和第二子矩阵进行相乘运算时,多个线程块同时进行第一数据子块和第二数据子块的相乘,就完成了第一子矩阵[A]和第二子矩阵[B]的相乘。由于在GPU中第一子矩阵和第二子矩阵中的数据由多个线程块同时进行处理,因此,提高了第一子矩阵和第二子矩阵进行处理的效率,也就达到了加速运算第一子矩阵和第二子矩阵的效果。
具体地,每个线程块包括多个线程,每个线程对第一数据子块中的一行和第二数据子块中的一列进行相乘计算,即线程块对第一数据子块中的数据子段Ai和第二数据子块中的数据子段Bj进行相乘计算包括:获取多个线程中第一线程对应的第一数据子块中的数据子段Ai中的一行。获取第一线程对应的第二数据子块中的数据子段Bj中的一列。以及利用第一线程对数据子段Ai中的一行和数据子段Bj中的一列进行相乘计算。
通常为了降低GPU信息数据处理的冗余重复次数,线程块单个维度大小为16的倍数,因此X,Y维度上的线程块数量由矩阵大小决定B_X=m/线程块X维度大小+1;B_Y=l/线程块Y维度大小+1。
如图2所示,线程块中的黑色小方块表示线程1和线程2,数据子段A2中虚线为数据子段A2中的行1和行2,数据子段B2中虚线为数据子段B2中的列1和列2,其中,线程1计算数据子段A2中的行1和数据子段B2中的列1相乘;线程2计算数据子段A2中的行1和数据子段B2中的列2相乘。
即每个线程块中具有多个线程,每个线程都数据子段的一行和一列进行计算,那么,一个第一数据子块中的每行和第二数据子块中的相应列能够同时进行相乘计算,即多个线程并行计算,提高了每个线程块计算数据子段的效率,从而提高了两个矩阵相乘计算的效率。
结合图2和图3可知,通过线程使得第一子矩阵[A']中每个数据子段中的一行都与第二子矩阵[B']中每个数据子段中的相应列进行计算,并且,每个线程在计算时都是逐个数据子段进行相乘,符合两个矩阵相乘的计算规则,且不会引入误差,也就解决了 现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,从而达到了提高矩阵相乘的运算速度的同时保证计算结果准确的效果。
优选地,线程块对第一数据子块和第二数据子块进行相乘计算包括:获取线程块中的共享内存空间(SA,SB);在共享内存空间中依次存储数据子段Ai中的数据和数据子段Bj中的数据。
一个线程对一行数据和相应的一列数据进行计算时,线程从共享内存空间中去除相应数据,计算的结果也输出给共享内存空间,在第一数据块被计算完成后,输出共享内存空间中存储的计算结果。
具体地,在确定GPU每次计算的最大数据量时,根据显存的大小和待求解矩阵的规模计算传入GPU的两个矩阵的数据量,即根据显存容量和待求解矩阵的数据量确定计算待求解矩阵的数据量的单次计算数据量上限包括:获取待求解矩阵的维度m、n和l,其中,维度m、n和l的大小依次为t、p和k。判断t、p和k是否满足第一条件,其中,第一条件为p/k<2且t/p<2。如果t、p和k满足第一条件,则确定待求解矩阵的数据量为显存容量的三分之一。如果t、p和k不满足第一条件,则判断t、p和k是否满足第二条件,其中,第二条件为p/k<2且t/p>=k。在t、p和k满足第二条件时,判断t、p和k是否满足t=m或者t=l。如果t、p和k满足t=m或者t=l,则确定待求解矩阵的数据量为显存容量的三分之一。如果t、p和k不满足t=m且不满足t=l,则确定待求解矩阵的数据量为m*l。在t、p和k不满足第二条件时,判断t、p和k是否满足第三条件,其中,第三条件为p/k>=2且t/p<2。在t、p和k满足第三条件时,判断t、p和k是否满足p=n;如果t、p和k满足p=n,则确定待求解矩阵的数据量为m*l。以及如果t、p和k不满足p=n,则确定待求解矩阵的数据量为显存容量的三分之一。
设定待求解矩阵分别为[A]、[B],大小分别为m*n,n*l;求解结果存入矩阵[C],大小为m*l。根据GPU显存容量以及待求解矩阵的规模设定显存中每次计算累进传入的两个矩阵的数据量上限。假设矩阵[A]和矩阵[B]的三个维度大小依次排列顺序为t、p、k。为提高矩阵数据计算时的数据利用率,减少设备端和主机端数据传输次数,根据显存容量以及待计算矩阵维度大小提出判定准侧从而获取数据量上限的值。判定准则如下:
其中,COM为显存容量。
进一步地,在确定每次GPU的计算的最大数据量后,对待求解矩阵进行划分,使得每次输入至GPU的数据量不会超过GPU的最大处理数量,避免数据泄露的问题,即待求解矩阵包括第一矩阵和第二矩阵,根据数据量上限和待求解矩阵的维度对待求解矩阵进行划分操作,得到多个数据块包括:获取待求解矩阵的维度m、n和l,其中,维度m、n和l的大小依次为t、p和k。判断维度n是否为最小维度大小k。如果维度n不是最小维度大小k,则根据数据量上限将维度m划分为r段,或者,根据数据量上限将维度l划分为s段。如果维度n是最小维度大小k,则根据数据量上限和维度m和l进行划分。
图4和图5示出了对待求解矩阵进行划分的两种情况。
情况一,如图4所示,维度n不是最小维度大小k:
在维度n不是最小维度大小时,如果第一矩阵的数据量较大,而第二矩阵的数据量较小,则按照数据量上限将维度m划分为r段;如果第一矩阵的数据量较小,而第二矩阵的数据量较大,则按照数据量上限将维度l划分为s段。
具体地,根据数据量上限将维度m划分为r段,或者,根据数据量上限将维度l划分为s段包括:获取分割尺度,其中,分割尺度为数据量上限的n分之一。将维度m划分为r段包括:维度m的每段长度为m/分割尺度+1。将维度l划分为s段包括:维度l的每段长度为l/分割尺度+1。
根据计算得到的数据量上限获取维度分割尺度,分割尺度MAX_L=数据量上限/n。根据维度分割尺度将m分割为r段,则r=m/MAX_L+1,或根据分割尺度将维度l分割为s段,即s=l/MAX_L+1。依次将每段数据传入GPU进行并行计算。计算得到的矩阵[C]最终将由多块数据组合而成,即[C]={[C]1,[C]2,…,[C]x}。
情况二,如图5所示,维度n是最小维度大小k:
在维度n是最小维度大小时,需要对维度m和维度l进行划分。
对于上述两种情况的划分,对第一矩阵划分后得到多个第一子矩阵,对第二矩阵划分后得到多个第二子矩阵。
具体地,根据数据量上限和维度m和l进行划分包括:确定a=MAX/n,其中,MAX为数据量上限。判断a*a是否大于MAX。如果a*a<=MAX,则将确定分割尺度为a。如果a*a>MAX,则确定分割尺度为MAX/a。
在维度n是最小维度大小时,计算得到的矩阵[C]部分数据有可能发生数据泄露问题,因此需要根据m,l的维度以及数据量上限值确定。
操作如下:a=MAX/n,如果a*a<=MAX,令MAX_L=a;如果a*a>MAX,则令分割尺度=MAX/a。依次将每段数据传入GPU进行并行计算。计算得到的矩阵[C]最终将由多块数据组合而成,即[C]={[C]1,[C]2,…,[C]x}。
以下结合图6对本实施例进行说明。
步骤S601,分配主机端及设备端存储空间大小。
步骤S602,根据[A]、[B]维度大小及显存限制确定计算数据量上限。
步骤S603,根据前述得到的数据量上限值对矩阵[A]和/或[B]进行数据分割。
步骤S604,调用并行计算程序进行计算。
步骤S605,将计算得到的矩阵[C]导出至设备端,并传输下一段待计算矩阵[A]i+1[B]j+1,执行步骤S606和步骤S607。
步骤S606,[C]放入矩阵[C]={[C]1,[C]2,…,[C]x}对应位置,得到最终计算结果。
步骤S607,判断[A]、[B]是否都已经完成计算。如果计算没有完成,则继续执行步骤S604,否则,输出计算结果。
通过上述实施例,在每个数据块计算结束之后,将计算结果输出到矩阵[C]的对应位置上,当所有数据块都计算结束后,有多个数据块的计算结果共同组成矩阵[C]。即,在进行计算之前对待求解矩阵进行分割,对分割后得到的数据块进行计算,计算后得到的结果存放在构成最终计算结果的矩阵的相应位置,也就是对待求解矩阵分割后不影响最终的计算结果,没有引进误差,并且,由于对多个数据块进行逐个计算,每个数据块进行多线程的并行计算,提高了计算速度,从而解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高矩阵相乘的运算速度的同时保证计算结果准确的效果。
本发明的效果可以通过以下实测数据实验进一步说明:
实验条件
运行平台:
CPU:Intel(R)Xeon(R)CPU E5-1620v2(3.70GHz);
GPU:NVIDIA Quadro K4000;
内存:16GB;
编译器:Visual Studio 2010;
实验内容:
针对大规模数据量的矩阵相乘运算分别采用CPU串行以及GPU累进并行方法进行运算,并统计对比花费的计算时间(单位为秒)。实验分为两种,一种是规模较小的矩阵相乘对比,测试并行核函数的效果;一种是规模较大的矩阵相乘,验证矩阵分块累进传输计算得效果。
实测数据实验:
第一组数据采用的[A]、[B]规模均为1902*1902,串行计算完成花费的时间为89.5336s,采用本发明方法的计算时间为0.131370s,如图5所示,加速比为681.5倍,加速效果显著。
第二组数据采用的[A]、[B]规模均为28695*28695,串行计算完成花费的时间为8475.53s,采用本发明方法分块累进传输并行计算花费的时间为7.77308s,如图所示,加速比为1090.4倍。可以看出,虽然采用了分块累进传输策略会因为数据传输影响部分效率,但由于矩阵相乘为指数级的时间消耗计算过程,随着规模提升加速效果更明显。
本发明实施例还提供了一种数据矩阵相乘的加速运算装置。该装置可以通过计算机实现其功能。需要说明的是,本发明实施例的数据矩阵相乘的加速运算装置可以用于执行本发明实施例所提供的数据矩阵相乘的加速运算方法,本发明实施例的数据矩阵相乘的加速运算方法也可以通过本发明实施例所提供的数据矩阵相乘的加速运算装置来执行。
图7是根据本发明实施例的数据矩阵相乘的加速运算装置的示意图。如图7所示,该数据矩阵相乘的加速运算装置包括:第一计算单元10、划分单元30、构建单元50、第二计算单元70和累计单元90。
第一计算单元10用于根据显存容量和待求解矩阵的数据量确定计算待求解矩阵的数据量的单次计算数据量上限。
显存容量制约了GPU处理矩阵的数据量,当显存容量不足以处理较多的数据量时,会降低GPU处理数据的速度,因此,在对待求解矩阵进行划分操作之前,根据显存容量和待求解矩阵的数据量确定GPU每次计算的数据量上限。
划分单元30用于根据数据量上限和待求解矩阵的维度对待求解矩阵进行划分操作,得到多个数据块,其中,每个数据块的数据量小于等于数据量上限。
根据确定的数据量上限对待求解矩阵进行划分操作,划分后的数据块的数据量小于等于数据量上限,也就避免了将数据块输入至设备端由于数据量过大而使得GPU无法处理的情况出现。
构建单元50用于在统一计算设备架构平台上构建线程和线程块的计算结构。统一计算设备架构平台是构建在GPU中的平台。
第二计算单元70用于在计算结构中依次对多个数据块进行并行运算。
累计单元90用于累计由计算结构依次输出的多个数据块的运算结果。
GPU依次对每个数据块进行运算,每个数据块中包括多个数据,GPU可以对每个数据块中的数据进行并行计算,从而提高了GPU处理数据的速度。GPU结束对一个数据块的运算后,输出运算结果并接收新的数据块,当属于待求解矩阵的所有数据块都运算完毕并将结果都输出给CPU后,由CPU对多个数据块的运算结果进行累计,并得到待求解矩阵的最终计算结果。
通过上述实施例,根据显存的容量对待求解矩阵进行划分,计算结构依次对划分后的多个数据块进行运算,避免了显存容量的限制所导致的计算出错,同时,在计算结构中对一个数据块中的数据进行并行处理,提高了运算速度,即本实施例在提高矩阵的运算速度的同时,并未引入计算误差,从而解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高运算速度的同时保证运算结果的准确的效果。
具体地,多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,第二计算单元包括:第一获取模块,用于获取计算结构中线程块的个数,其中,线程块包括X维度和Y维度。第一划分模块,用于按照线程块在X维度上的个数h将第一子矩阵划分为h个第一数据子块,其中,第一数据子块包括多个数据子段Ai,i=0,1……a,a=第一数据子块的Y维度的长度/分割尺度+1。第二划分模块,用于按照线程块在Y维度上的个数g将第二子矩阵划分为g个第二数据子块,其中,第二数据子块包括多个数据子段Bj,j=0,1……b=第二数据子块的X维度的长度/分割尺度+1。计算模块,用于通过线程块对第一数据子块Ai和第二数据子块Bj进行相乘计算,其中,i=j。其中,分割尺度为数据量上限的n分之一。
图2示出了对第一子矩阵和第二子矩阵划分的示意图。其中,第一子矩阵和第二子矩阵都是被划分得到的第一数据块中的数据,在一个线程中对第一子矩阵和第二子矩阵进行相乘计算。例如,第一子矩阵为[A'],第二子矩阵为[B']。如图2所示,在X维度上将第一子矩阵为[A']划分为h个第一数据子块,在Y维度上将第二子矩阵[B']划分为g个第二数据子块。一个第一数据子块和一个第二数据子块对应一个线程块,在该线程块对第一数据子块和第二数据子块进行运算时,对第一数据子块中的一段数据和第二数据子块中的一段数据进行运算。例如,第一数据子块中的数据子段A1和第二数据子块中的数据子段B1相乘,数据子段A2和数据子段B2相乘,依次类推,直到第一数据子块和第二数据子块中的数据均被进行相乘运算。
图2仅示出了一个线程块,在图3中示出了多个线程块,每个线程块中具有多个线程。每个线程块对应一个第一数据子块和一个第二数据子块。在对第一子矩阵和第二子矩阵进行相乘运算时,多个线程块同时进行第一数据子块和第二数据子块的相乘,就完成了第一子矩阵[A]和第二子矩阵[B]的相乘。由于在GPU中第一子矩阵和第二子矩阵中的数据由多个线程块同时进行处理,因此,提高了第一子矩阵和第二子矩阵进行处理的效率,也就达到了加速运算第一子矩阵和第二子矩阵的效果。
具体地,每个线程块包括多个线程,每个线程对第一数据子块中的一行和第二数据子块中的一列进行相乘计算,即计算模块包括:第一获取子模块,用于获取多个线程中第一线程对应的第一数据子块中的数据子段Ai中的一行。第二获取子模块,用于获取第一线程对应的第二数据子块中的数据子段Bj中的一列。以及计算子模块,用于利用第一线程对数据子段Ai中的一行和数据子段Bj中的一列进行相乘计算。
通常为了降低GPU信息数据处理的冗余重复次数,线程块单个维度大小为16的倍数,因此X,Y维度上的线程块数量由矩阵大小决定,即X维度的线程块数量B_X=m/线程块X维度大小+1;Y维度的线程块数量B_Y=l/线程块Y维度大小+1。
如图2所示,线程块中的黑色小方块表示线程1和线程2,数据子段A2中虚线为数据子段A2中的行1和行2,数据子段B2中虚线为数据子段B2中的列1和列2,其中,线程1计算数据子段A2中的行1和数据子段B2中的列1相乘;线程2计算数据子段A2中的行2和数据子段B2中的列2相乘。
即每个线程块中具有多个线程,每个线程都数据子段的一行和一列进行计算,那么,一个第一数据子块中的每行和第二数据子块中的相应列能够同时进行相乘计算,即多个线程并行计算,提高了每个线程块计算数据子段的效率,从而提高了两个矩阵相乘计算的效率。
结合图2和图3可知,通过线程使得第一子矩阵[A']中每个数据子段中的一行都与 第二子矩阵[B']中每个数据子段中的相应列进行计算,并且,每个线程在计算时都是逐个数据子段进行相乘,符合两个矩阵相乘的计算规则,且不会引入误差,也就解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,从而达到了提高矩阵相乘的运算速度的同时保证计算结果准确的效果。
优选地,计算模块包括:第三获取子模块,用于获取线程块中的共享内存空间(SA,SB)。存储子模块,用于在共享内存空间中依次存储数据子段Ai中的数据和数据子段Bj中的数据。
一个线程对一行数据和相应的一列数据进行计算时,线程从共享内存空间中去除相应的行和列,计算的结果也输出给共享内存空间,在第一数据块被计算完成后,输出共享内存空间中存储的计算结果。
具体地,在确定GPU每次计算的最大数据量时,根据显存的大小和待求解矩阵的规模计算传入GPU的两个矩阵的数据量,即第一计算单元用于执行下述步骤:获取待求解矩阵的维度m、n和l,其中,维度m、n和l的大小依次为t、p和k。判断t、p和k是否满足第一条件,其中,第一条件为p/k<2且t/p<2。如果t、p和k满足第一条件,则确定待求解矩阵的数据量为显存容量的三分之一。如果t、p和k不满足第一条件,则判断t、p和k是否满足第二条件,其中,第二条件为p/k<2且t/p>=k。在t、p和k满足第二条件时,判断t、p和k是否满足t=m或者t=l。如果t、p和k满足t=m或者t=l,则确定待求解矩阵的数据量为显存容量的三分之一。如果t、p和k不满足t=m且不满足t=l,则确定待求解矩阵的数据量为m*l。在t、p和k不满足第二条件时,判断t、p和k是否满足第三条件,其中,第三条件为p/k>=2且t/p<2。在t、p和k满足第三条件时,判断t、p和k是否满足p=n;如果t、p和k满足p=n,则确定待求解矩阵的数据量为m*l。以及p和k不满足p=n,则确定待求解矩阵的数据量为显存容量的三分之一。
设定待求解矩阵分别为[A]、[B],大小分别为m*n,n*l;求解结果存入矩阵[C],大小为m*l。根据GPU显存容量以及待求解矩阵的规模设定显存中每次计算累进传入的两个矩阵的数据量上限。假设矩阵[A]和矩阵[B]的三个维度大小依次排列顺序为t、p、k。为提高矩阵数据计算时的数据利用率,减少设备端和主机端数据传输次数,根据显存容量以及待计算矩阵维度大小提出判定准侧从而获取数据量上限的值。判定准则如下:
其中,COM为显存容量。
进一步地,在确定每次GPU的计算的最大数据量后,对待求解矩阵进行划分,使得每次输入至GPU的数据量不会超过GPU的最大处理数量,避免数据泄露的问题,即待求解矩阵包括第一矩阵和第二矩阵,划分单元包括:第二获取模块,用于获取待求解矩阵的维度m、n和l,其中,维度m、n和l的大小依次为t、p和k。判断模块,用于判断维度n是否为最小维度大小k。第三划分模块,用于在维度n不是最小维度大小k时,根据数据量上限将维度m划分为r段,或者,根据数据量上限将维度l划分为s段。第四划分模块,用于在维度n是最小维度大小k时,根据数据量上限和维度m和l进行划分。
图4和图5示出了对待求解矩阵进行划分的两种情况。
情况一,如图4所示,维度n不是最小维度大小k:
在维度n不是最小维度大小时,如果第一矩阵的数据量较大,而第二矩阵的数据量较小,则按照数据量上限将维度m划分为r段;如果第一矩阵的数据量较小,而第二矩阵的数据量较大,则按照数据量上限将维度l划分为s段。
具体地,第三划分模块包括:第三获取子模块,用于获取分割尺度,其中,分割尺度为数据量上限的n分之一。第一划分子模块,用于将维度m划分为r段包括:维度m的每段长度为m/分割尺度+1。第二划分子模块,用于将维度l划分为s段包括:维度l的每段长度为l/分割尺度+1。
根据计算得到的数据量上限获取维度分割尺度,分割尺度MAX_L=数据量上限/n。根据维度分割尺度将m分割为r段,则r=m/MAX_L+1,或根据分割尺度将维度l分割为s段,即s=l/MAX_L+1。依次将每段数据传入GPU进行并行计算。计算得到的矩阵[C]最终将由多块数据组合而成,即[C]={[C]1,[C]2,…,[C]x}。
情况二,如图5所示,维度n是最小维度大小k:
在维度n是最小维度大小时,需要对维度m和维度l进行划分。
对于上述两种情况的划分,对第一矩阵划分后得到多个第一子矩阵,对第二矩阵划分后得到多个第二子矩阵。
具体地,第四划分模块包括:第一确定子模块,用于确定a=MAX/n,其中,MAX为数据量上限。判断子模块,用于判断a*a是否大于MAX。第二确定子模块,用于在a*a<=MAX时,将确定分割尺度为a。第三确定子模块,用于在a*a>MAX时,确定分割尺度为MAX/a。
在维度n是最小维度大小时,计算得到的矩阵[C]部分数据有可能发生数据泄露问题,因此需要根据m,l的维度以及数据量上限值确定。
操作如下:a=MAX/n,如果a*a<=MAX,令MAX_L=a;如果a*a>MAX,则令分割尺度=MAX/a。依次将每段数据传入GPU进行并行计算。计算得到的矩阵[C]最终将由多块数据组合而成,即[C]={[C]1,[C]2,…,[C]x}。
通过上述实施例,在每个数据块计算结束之后,将计算结果输出到矩阵[C]的对应位置上,当所有数据块都计算结束后,有多个数据块的计算结果共同组成矩阵[C]。即,在进行计算之前对待求解矩阵进行分割,对分割后得到的数据块进行计算,计算后得到的结果存放在构成最终计算结果的矩阵的相应位置,也就是对待求解矩阵分割后不影响最终的计算结果,没有引进误差,并且,由于对多个数据块进行逐个计算,每个数据块进行多线程的并行计算,提高了计算速度,从而解决了现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,达到了提高矩阵相乘的运算速度的同时保证计算结果准确的效果。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元 的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种数据矩阵相乘的加速运算方法,其特征在于,包括:
根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限;
根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块,其中,每个所述数据块的数据量小于等于所述数据量上限;
在统一计算设备架构平台上构建线程和线程块的计算结构;
在所述计算结构中依次对所述多个数据块进行并行运算;以及
累计由所述计算结构依次输出的所述多个数据块的运算结果。
2.根据权利要求1所述的加速运算方法,其特征在于,所述多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,在所述计算结构中依次对所述多个数据块进行并行运算包括:
获取所述计算结构中线程块的个数,其中,所述线程块包括X维度和Y维度;
按照所述线程块在所述X维度上的个数h将所述第一子矩阵划分为h个第一数据子块,其中,所述第一数据子块包括多个数据子段Ai,i=0,1……a,a=所述第一数据子块的Y维度的长度/分割尺度+1;
按照所述线程块在所述Y维度上的个数g将所述第二子矩阵划分为g个第二数据子块,其中,所述第二数据子块包括多个数据子段Bj,j=0,1……b,b=所述第二数据子块的X维度的长度/所述分割尺度+1;
所述线程块对所述第一数据子段Ai和所述第二数据子段Bj进行相乘计算,其中,i=j。
3.根据权利要求2所述的加速运算方法,其特征在于,所述线程块包括多个线程,所述线程块对所述第一数据子块和所述第二数据子块进行相乘计算包括:
获取所述多个线程中第一线程对应的所述第一数据子块中的数据子段Ai中的一行;
获取所述第一线程对应的所述第二数据子块中的数据子段Bj中的一列;以及
利用所述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列进行相乘计算。
4.根据权利要求3所述的加速运算方法,其特征在于,所述线程块对所述第一数据子块和所述第二数据子块进行相乘计算包括:
获取所述线程块中的共享内存空间(SA,SB);
在所述共享内存空间中依次存储所述数据子段Ai中的数据和所述数据子段Bj中的数据。
5.根据权利要求1所述的加速运算方法,其特征在于,根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限包括:
获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;
判断所述t、p和k是否满足第一条件,其中,所述第一条件为p/k<2且t/p<2;
如果所述t、p和k满足所述第一条件,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;
如果所述t、p和k不满足所述第一条件,则判断所述t、p和k是否满足第二条件,其中,所述第二条件为p/k<2且t/p>=k;
在所述t、p和k满足所述第二条件时,判断所述t、p和k是否满足t=m或者t=l;
如果所述t、p和k满足t=m或者t=l,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;
如果所述t、p和k不满足t=m且不满足t=l,则确定所述待求解矩阵的数据量为m*l;
在所述t、p和k不满足所述第二条件时,判断所述t、p和k是否满足第三条件,其中,所述第三条件为p/k>=2且t/p<2;
在所述t、p和k满足所述第三条件时,判断所述t、p和k是否满足p=n;
如果所述t、p和k满足p=n,则确定所述待求解矩阵的数据量为m*l;以及
如果所述t、p和k不满足p=n,则确定所述待求解矩阵的数据量为所述显存容量的三分之一。
6.根据权利要求1所述的加速运算方法,其特征在于,所述待求解矩阵包括第一矩阵和第二矩阵,根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块包括:
获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;
判断所述维度n是否为最小维度大小k;
如果所述维度n不是所述最小维度大小k,则根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度l划分为s段;
如果所述维度n是所述最小维度大小k,则根据所述数据量上限和所述维度m和l进行划分。
7.根据权利要求6所述的加速运算方法,其特征在于,根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度l划分为s段包括:
获取分割尺度,其中,所述分割尺度为所述数据量上限的n分之一;
将所述维度m划分为r段包括:维度m的每段长度为m/分割尺度+1;
将所述维度l划分为s段包括:维度l的每段长度为l/分割尺度+1。
8.根据权利要求6所述的加速运算方法,其特征在于,根据所述数据量上限和所述维度m和l进行划分包括:
确定a=MAX/n,其中,所述MAX为所述数据量上限;
判断a*a是否大于所述MAX;
如果a*a<=MAX,则将确定分割尺度为a;
如果a*a>MAX,则确定所述分割尺度为MAX/a。
9.一种数据矩阵相乘的加速运算装置,其特征在于,包括:
第一计算单元,用于根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限;
划分单元,用于根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块,其中,每个所述数据块的数据量小于等于所述数据量上限;
构建单元,用于在统一计算设备架构平台上构建线程和线程块的计算结构;
第二计算单元,用于在所述计算结构中依次对所述多个数据块进行并行运算;以及
累计单元,用于累计由所述计算结构依次输出的所述多个数据块的运算结果。
10.根据权利要求9所述的加速运算装置,其特征在于,所述多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,所述第二计算单元包括:
第一获取模块,用于获取所述计算结构中线程块的个数,其中,所述线程块包括X维度和Y维度;
第一划分模块,用于按照所述线程块在所述X维度上的个数h将所述第一子矩阵划分为h个第一数据子块,其中,所述第一数据子块包括多个数据子段Ai,i=0,1……a,a=所述第一数据子块的Y维度的长度/分割尺度+1;
第二划分模块,用于按照所述线程块在所述Y维度上的个数g将所述第二子矩阵划分为g个第二数据子块,其中,所述第二数据子块包括多个数据子段Bj,j=0,1……b,b=所述第二数据子块的X维度的长度/所述分割尺度+1;
计算模块,用于通过所述线程块对所述第一数据子块Ai和所述第二数据子块Bj进行相乘计算,其中,i=j。
11.根据权利要求10所述的加速运算装置,其特征在于,所述线程块包括多个线程,所述计算模块包括:
第一获取子模块,用于获取所述多个线程中第一线程对应的所述第一数据子块中的数据子段Ai中的一行;
第二获取子模块,用于获取所述第一线程对应的所述第二数据子块中的数据子段Bj中的一列;以及
计算子模块,用于利用所述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列进行相乘计算。
12.根据权利要求10所述的加速运算装置,其特征在于,所述计算模块包括:
第三获取子模块,用于获取所述线程块中的共享内存空间(SA,SB);
存储子模块,用于在所述共享内存空间中依次存储所述数据子段Ai中数据和所述数据子段Bj中的数据。
13.根据权利要求9所述的加速运算装置,其特征在于,所述第一计算单元用于执行下述步骤:
获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;
判断所述t、p和k是否满足第一条件,其中,所述第一条件为p/k<2且t/p<2;
如果所述t、p和k满足所述第一条件,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;
如果所述t、p和k不满足所述第一条件,则判断所述t、p和k是否满足第二条件,其中,所述第二条件为p/k<2且t/p>=k;
在所述t、p和k满足所述第二条件时,判断所述t、p和k是否满足t=m或者t=l;
如果所述t、p和k满足t=m或者t=l,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;
如果所述t、p和k不满足t=m且不满足t=l,则确定所述待求解矩阵的数据量为m*l;
在所述t、p和k不满足所述第二条件时,判断所述t、p和k是否满足第三条件,其中,所述第三条件为p/k>=2且t/p<2;
在所述t、p和k满足所述第三条件时,判断所述t、p和k是否满足p=n;
如果所述t、p和k满足p=n,则确定所述待求解矩阵的数据量为m*l;以及
如果所述t、p和k不满足p=n,则确定所述待求解矩阵的数据量为所述显存容量的三分之一。
14.根据权利要求9所述的加速运算装置,其特征在于,所述待求解矩阵包括第一矩阵和第二矩阵,所述划分单元包括:
第二获取模块,用于获取所述待求解矩阵的维度m、n和l,其中,所述维度m、n和l的大小依次为t、p和k;
判断模块,用于判断所述维度n是否为最小维度大小k;
第三划分模块,用于在所述维度n不是所述最小维度大小k时,根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度l划分为s段;
第四划分模块,用于在所述维度n是所述最小维度大小k时,根据所述数据量上限和所述维度m和l进行划分。
15.根据权利要求14所述的加速运算装置,其特征在于,所述第三划分模块包括:
第三获取子模块,用于获取分割尺度,其中,所述分割尺度为所述数据量上限的n分之一;
第一划分子模块,用于将所述维度m划分为r段包括:维度m的每段长度为m/分割尺度+1;
第二划分子模块,用于将所述维度l划分为s段包括:维度l的每段长度为l/分割尺度+1。
16.根据权利要求14所述的加速运算装置,其特征在于,所述第四划分模块包括:
第一确定子模块,用于确定a=MAX/n,其中,所述MAX为所述数据量上限;
判断子模块,用于判断a*a是否大于所述MAX;
第二确定子模块,用于在a*a<=MAX时,将确定分割尺度为a;
第三确定子模块,用于在a*a>MAX时,确定所述分割尺度为MAX/a。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410815244.5A CN104572587B (zh) | 2014-12-23 | 2014-12-23 | 数据矩阵相乘的加速运算方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410815244.5A CN104572587B (zh) | 2014-12-23 | 2014-12-23 | 数据矩阵相乘的加速运算方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104572587A true CN104572587A (zh) | 2015-04-29 |
CN104572587B CN104572587B (zh) | 2017-11-14 |
Family
ID=53088692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410815244.5A Active CN104572587B (zh) | 2014-12-23 | 2014-12-23 | 数据矩阵相乘的加速运算方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572587B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126481A (zh) * | 2016-06-29 | 2016-11-16 | 华为技术有限公司 | 一种计算引擎和电子设备 |
CN107391447A (zh) * | 2017-07-26 | 2017-11-24 | 成都网烁信息科技有限公司 | 一种电脑加速系统及方法 |
CN108509384A (zh) * | 2017-02-24 | 2018-09-07 | 富士通株式会社 | 计算方法、信息处理装置、计算程序及信息处理系统 |
CN109460533A (zh) * | 2017-09-06 | 2019-03-12 | 华为技术有限公司 | 一种提高gemm计算性能的方法及装置 |
CN111158874A (zh) * | 2019-12-20 | 2020-05-15 | 深圳市商汤科技有限公司 | 数据处理方法和装置、电子设备及存储介质 |
WO2021143143A1 (zh) * | 2020-01-19 | 2021-07-22 | 苏州浪潮智能科技有限公司 | 一种神经网络加速方法和装置 |
WO2021174691A1 (zh) * | 2020-03-03 | 2021-09-10 | 平安科技(深圳)有限公司 | 数据处理的优化方法及装置、存储介质、计算机设备 |
CN114880109A (zh) * | 2021-12-15 | 2022-08-09 | 中国科学院深圳先进技术研究院 | 基于cpu-gpu异构架构的数据处理方法、设备以及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980182A (zh) * | 2010-10-15 | 2011-02-23 | 清华大学 | 基于矩阵运算的并行计算方法 |
JP5262177B2 (ja) * | 2008-02-22 | 2013-08-14 | 富士通株式会社 | ベクトル積の並列処理方法 |
CN103530276A (zh) * | 2013-09-25 | 2014-01-22 | 中国科学技术大学 | 一种基于龙芯3b的自适应矩阵乘法优化方法 |
CN103902507A (zh) * | 2014-03-28 | 2014-07-02 | 中国科学院自动化研究所 | 一种面向可编程代数处理器的矩阵乘法计算装置及方法 |
-
2014
- 2014-12-23 CN CN201410815244.5A patent/CN104572587B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5262177B2 (ja) * | 2008-02-22 | 2013-08-14 | 富士通株式会社 | ベクトル積の並列処理方法 |
CN101980182A (zh) * | 2010-10-15 | 2011-02-23 | 清华大学 | 基于矩阵运算的并行计算方法 |
CN103530276A (zh) * | 2013-09-25 | 2014-01-22 | 中国科学技术大学 | 一种基于龙芯3b的自适应矩阵乘法优化方法 |
CN103902507A (zh) * | 2014-03-28 | 2014-07-02 | 中国科学院自动化研究所 | 一种面向可编程代数处理器的矩阵乘法计算装置及方法 |
Non-Patent Citations (2)
Title |
---|
冯健等: "一种基于分布式平台Hadoop的矩阵相乘算法", 《计算机系统应用》 * |
梁娟娟等: "GPU上的矩阵乘法的设计与实现", 《计算机系统应用》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126481A (zh) * | 2016-06-29 | 2016-11-16 | 华为技术有限公司 | 一种计算引擎和电子设备 |
CN106126481B (zh) * | 2016-06-29 | 2019-04-12 | 华为技术有限公司 | 一种计算系统和电子设备 |
CN108509384A (zh) * | 2017-02-24 | 2018-09-07 | 富士通株式会社 | 计算方法、信息处理装置、计算程序及信息处理系统 |
CN108509384B (zh) * | 2017-02-24 | 2022-04-12 | 富士通株式会社 | 计算方法、信息处理装置、计算程序及信息处理系统 |
CN107391447A (zh) * | 2017-07-26 | 2017-11-24 | 成都网烁信息科技有限公司 | 一种电脑加速系统及方法 |
CN109460533A (zh) * | 2017-09-06 | 2019-03-12 | 华为技术有限公司 | 一种提高gemm计算性能的方法及装置 |
CN109460533B (zh) * | 2017-09-06 | 2021-10-26 | 华为技术有限公司 | 一种提高gemm计算性能的方法及装置 |
CN111158874A (zh) * | 2019-12-20 | 2020-05-15 | 深圳市商汤科技有限公司 | 数据处理方法和装置、电子设备及存储介质 |
WO2021143143A1 (zh) * | 2020-01-19 | 2021-07-22 | 苏州浪潮智能科技有限公司 | 一种神经网络加速方法和装置 |
US11676002B2 (en) | 2020-01-19 | 2023-06-13 | Inspur Suzhou Intelligent Technology Co., Ltd. | Neural network accelerating method and device with efficient usage of total video memory size of GPUs |
WO2021174691A1 (zh) * | 2020-03-03 | 2021-09-10 | 平安科技(深圳)有限公司 | 数据处理的优化方法及装置、存储介质、计算机设备 |
CN114880109A (zh) * | 2021-12-15 | 2022-08-09 | 中国科学院深圳先进技术研究院 | 基于cpu-gpu异构架构的数据处理方法、设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104572587B (zh) | 2017-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104572587A (zh) | 数据矩阵相乘的加速运算方法和装置 | |
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
US10379816B2 (en) | Data accumulation apparatus and method, and digital signal processing device | |
CN104484398B (zh) | 数据表中的数据聚合方法和装置 | |
CN105893561A (zh) | 一种排序方法和装置 | |
CN102385502A (zh) | 用于存储器管理的处理器、设备和方法 | |
CN107992595A (zh) | 一种学习内容推荐方法、装置及智能设备 | |
Kohlhoff et al. | K-means for parallel architectures using all-prefix-sum sorting and updating steps | |
CN108845828B (zh) | 一种协处理器、矩阵运算加速方法及系统 | |
CN103049241A (zh) | 一种提高cpu+gpu异构装置计算性能的方法 | |
CN102375721B (zh) | 一种矩阵乘法运算方法、图形处理器和电子设备 | |
CN104008420A (zh) | 一种基于自动编码机的分布式离群点检测方法及系统 | |
CN108536739B (zh) | 元数据敏感信息字段识别方法、装置、设备及存储介质 | |
CN103678303A (zh) | 用于数据库分组集查询的方法和系统 | |
CN104679719A (zh) | 一种基于fpga的浮点运算方法 | |
CN102968491A (zh) | 一种数据分配方法和装置 | |
CN106709028A (zh) | 高通量测序数据统计方法和统计装置 | |
CN107977504A (zh) | 一种非对称堆芯燃料管理计算方法、装置及终端设备 | |
CN104572588B (zh) | 矩阵求逆处理方法和装置 | |
CN104679721A (zh) | 一种fft处理器的运算方法 | |
CN106294429A (zh) | 重复数据识别方法和装置 | |
CN104778088A (zh) | 一种基于减少进程间通信开销的并行i/o优化方法与系统 | |
CN107657050A (zh) | 一种基于“用归并算法计算一对一join、一对多join”的对位分段并行方法 | |
CN102253924B (zh) | 开方运算的硬件实现方法以及开方运算器 | |
CN109460533B (zh) | 一种提高gemm计算性能的方法及装置 |
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 |