数据矩阵相乘的加速运算方法和装置的制造方法

文档序号:8258461阅读:269来源:国知局
数据矩阵相乘的加速运算方法和装置的制造方法
【技术领域】
[0001] 本发明涉及数据处理领域,具体而言,涉及一种数据矩阵相乘的加速运算方法和 装置。
【背景技术】
[0002] 在现在数字化产业领域中,由于计算机技术的飞速发展,越来越多其他领域的技 术开始被囊括进来,也越来越多的依靠数字化技术带来明显的产业推动能力,特别是制造 业领域,由于设计、仿真分析在产品开发过程中所占有的比重增加,以及计算机便利的快速 计算分析能力,现代制造业的产品开发流程几乎完全是基于数字化技术之上。也正是这种 依赖关系,促使计算机软硬件不断更新换代以满足日益提升的性能需求。
[0003] 在计算机辅助的数值分析计算领域,参与计算的数据量规模量级不断提升,虽然 计算机技术也不断升级换代,但依然无法避免长时间的等待。而矩阵相乘就是一个典型的 例子。由于矩阵相乘运算是〇(N3)计算复杂度的计算过程,使得随着参与运算数据量的提 升,计算规模和花费时间是指数级的增长速度,给计算机硬件带来了巨大的负担;同时,由 于参与运算的数据有一定关联性,通过传统算法改进计算过程的努力也见效甚微。已有的 一些方法是通过近似拟合方法压缩矩阵参与运算的数据量达到提升计算效率的目的,但这 种方式将引入计算误差,对高精度要求的仿真计算结果会有较大影响。
[0004] 针对现有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确 的问题,目前尚未提出有效的解决方案。

【发明内容】

[0005] 本发明的主要目的在于提供一种数据矩阵相乘的加速运算方法和装置,以解决现 有技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题。
[0006] 为了实现上述目的,根据本发明实施例的一个方面,提供了一种数据矩阵相乘的 加速运算方法。根据本发明的数据矩阵相乘的加速运算方法包括:根据显存容量和待求解 矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限;根据所述数据量 上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块,其中, 每个所述数据块的数据量小于等于所述数据量上限;在统一计算设备架构平台上构建线程 和线程块的计算结构;在所述计算结构中依次对所述多个数据块进行并行运算;以及累计 由所述计算结构依次输出的所述多个数据块的运算结果。
[0007] 进一步地,所述多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,在所 述计算结构中依次对所述多个数据块进行并行运算包括:获取所述计算结构中线程块的个 数,其中,所述线程块包括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。
[0008] 进一步地,所述线程块包括多个线程,所述线程块对所述第一数据子块和所述第 二数据子块进行相乘计算包括:获取所述多个线程中第一线程对应的所述第一数据子块中 的数据子段Ai中的一行;获取所述第一线程对应的所述第二数据子块中的数据子段Bj中 的一列;以及利用所述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列 进行相乘计算。
[0009] 进一步地,所述线程块对所述第一数据子块和所述第二数据子块进行相乘计算包 括:获取所述线程块中的共享内存空间(SA,SB);在所述共享内存空间中依次存储所述数 据子段Ai中的数据和所述数据子段Bj中的数据。
[0010] 进一步地,根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据 量的单次计算数据量上限包括:获取所述待求解矩阵的维度m、n和1,其中,所述维度m、n 和1的大小依次为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 = 1 ;如果所述t、p和k满足t = m或者 t = 1,则确定所述待求解矩阵的数据量为所述显存容量的三分之一;如果所述t、p和k不 满足t = m且不满足t = 1,则确定所述待求解矩阵的数据量为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,则确定所述待求解矩阵的数据量为所述显存容量的三分之一。
[0011] 进一步地,所述待求解矩阵包括第一矩阵和第二矩阵,根据所述数据量上限和所 述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到多个数据块包括:获取所述待 求解矩阵的维度m、n和1,其中,所述维度m、n和1的大小依次为t、p和k ;判断所述维度 n是否为最小维度大小k ;如果所述维度n不是所述最小维度大小k,则根据所述数据量上 限将所述维度m划分为r段,或者,根据所述数据量上限将所述维度1划分为s段;如果所 述维度n是所述最小维度大小k,则根据所述数据量上限和所述维度m和1进行划分。
[0012] 进一步地,根据所述数据量上限将所述维度m划分为r段,或者,根据所述数据量 上限将所述维度1划分为s段包括:获取分割尺度,其中,所述分割尺度为所述数据量上限 的n分之一;将所述维度m划分为r段包括:维度m的每段长度为m/分割尺度+1 ;将所述 维度1划分为s段包括:维度1的每段长度为1/分割尺度+1。
[0013] 进一步地,根据所述数据量上限和所述维度m和1进行划分包括:确定a = MAX/ n,其中,所述MAX为所述数据量上限;判断a*a是否大于所述MAX ;如果a*a〈 = MAX,则将确 定分割尺度为a ;如果a*a>MAX,则确定所述分割尺度为MAX/a。
[0014] 为了实现上述目的,根据本发明实施例的另一方面,提供了一种数据矩阵相乘的 加速运算装置。根据本发明的数据矩阵相乘的加速运算装置包括:第一计算单元,用于根据 显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算数据量上 限;划分单元,用于根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行 划分操作,得到多个数据块,其中,每个所述数据块的数据量小于等于所述数据量上限;构 建单元,用于在统一计算设备架构平台上构建线程和线程块的计算结构;第二计算单元,用 于在所述计算结构中依次对所述多个数据块进行并行运算;以及累计单元,用于累计由所 述计算结构依次输出的所述多个数据块的运算结果。
[0015] 进一步地,所述多个数据块中的第一数据块包括第一子矩阵和第二子矩阵,所述 第二计算单元包括:第一获取模块,用于获取所述计算结构中线程块的个数,其中,所述线 程块包括X维度和Y维度;第一划分模块,用于按照所述线程块在所述X维度上的个数h将 所述第一子矩阵划分为h个第一数据子块,其中,所述第一数据子块包括多个数据子段Ai, i = 〇, 1……a,a =所述第一数据子块的Y维度的长度/分割尺度+1 ;第二划分模块,用于 按照所述线程块在所述Y维度上的个数g将所述第二子矩阵划分为g个第二数据子块,其 中,所述第二数据子块包括多个数据子段Bj,j = 0, 1……b,b =所述第二数据子块的X维 度的长度/所述分割尺度+1 ;计算模块,用于通过所述线程块对所述第一数据子块Ai和所 述第二数据子块Bj进行相乘计算,其中,i = j。
[0016] 进一步地,所述计算模块包括:第一获取子模块,用于获取所述多个线程中第一线 程对应的所述第一数据子块中的数据子段Ai中的一行;第二获取子模块,用于获取所述第 一线程对应的所述第二数据子块中的数据子段Bj中的一列;以及计算子模块,用于利用所 述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列进行相乘计算。
[0017] 进一步地,所述计算模块包括:第三获取子模块,用于获取所述线程块中的共享内 存空间(SA,SB);存储子模块,用于在所述共享内存空间中依次存储所述数据子段Ai中数 据和所述数据子段Bj中的数据。
[0018] 进一步地,所述第一计算单元用于执行下述步骤:获取所述待求解矩阵的维度m、 n和1
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1