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

文档序号:8258461阅读:来源:国知局
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。其中,分割尺度为数据量上限的n分之一。
[0050] 图2示出了对第一子矩阵和第二子矩阵划分的示意图。其中,第一子矩阵和第二 子矩阵都是被划分得到的第一数据块中的数据,在一个线程中对第一子矩阵和第二子矩阵 进行相乘计算。例如,第一子矩阵为[A'],第二子矩阵为[B']。如图2所示,在X维度上将 第一子矩阵为[A']划分为h个第一数据子块,在Y维度上将第二子矩阵[B' ]划分为g个 第二数据子块。一个第一数据子块和一个第二数据子块对应一个线程块,在该线程块对第 一数据子块和第二数据子块进行运算时,对第一数据子块中的一段数据和第二数据子块中 的一段数据进行运算。例如,第一数据子块中的数据子段A1和第二数据子块中的数据子段 B1相乘,数据子段A2和数据子段B2相乘,依次类推,直到第一数据子块和第二数据子块中 的数据均被进行相乘运算。
[0051] 图2仅示出了一个线程块,在图3中示出了多个线程块,每个线程块中具有多个线 程。每个线程块对应一个第一数据子块和一个第二数据子块。在对第一子矩阵和第二子矩 阵进行相乘运算时,多个线程块同时进行第一数据子块和第二数据子块的相乘,就完成了 第一子矩阵[A]和第二子矩阵[B]的相乘。由于在GPU中第一子矩阵和第二子矩阵中的数 据由多个线程块同时进行处理,因此,提高了第一子矩阵和第二子矩阵进行处理的效率,也 就达到了加速运算第一子矩阵和第二子矩阵的效果。
[0052] 具体地,每个线程块包括多个线程,每个线程对第一数据子块中的一行和第二数 据子块中的一列进行相乘计算,即线程块对第一数据子块中的数据子段Ai和第二数据子 块中的数据子段Bj进行相乘计算包括:获取多个线程中第一线程对应的第一数据子块中 的数据子段Ai中的一行。获取第一线程对应的第二数据子块中的数据子段Bj中的一列。 以及利用第一线程对数据子段Ai中的一行和数据子段Bj中的一列进行相乘计算。
[0053] 通常为了降低GPU信息数据处理的冗余重复次数,线程块单个维度大小为16的倍 数,因此X,Y维度上的线程块数量由矩阵大小决定B_X = m/线程块X维度大小+1 ;B_Y = 1/线程块Y维度大小+1。
[0054] 如图2所示,线程块中的黑色小方块表示线程1和线程2,数据子段A2中虚线为数 据子段A2中的行1和行2,数据子段B2中虚线为数据子段B2中的列1和列2,其中,线程 1计算数据子段A2中的行1和数据子段B2中的列1相乘;线程2计算数据子段A2中的行 1和数据子段B2中的列2相乘。
[0055] 即每个线程块中具有多个线程,每个线程都数据子段的一行和一列进行计算,那 么,一个第一数据子块中的每行和第二数据子块中的相应列能够同时进行相乘计算,即多 个线程并行计算,提高了每个线程块计算数据子段的效率,从而提高了两个矩阵相乘计算 的效率。
[0056] 结合图2和图3可知,通过线程使得第一子矩阵[A' ]中每个数据子段中的一行都 与第二子矩阵[B']中每个数据子段中的相应列进行计算,并且,每个线程在计算时都是逐 个数据子段进行相乘,符合两个矩阵相乘的计算规则,且不会引入误差,也就解决了现有 技术中在进行矩阵相乘的加速运算时引入误差而导致计算结果不准确的问题,从而达到了 提高矩阵相乘的运算速度的同时保证计算结果准确的效果。
[0057] 优选地,线程块对第一数据子块和第二数据子块进行相乘计算包括:获取线程块 中的共享内存空间(SA, SB);在共享内存空间中依次存储数据子段Ai中的数据和数据子段 Bj中的数据。
[0058] -个线程对一行数据和相应的一列数据进行计算时,线程从共享内存空间中去除 相应数据,计算的结果也输出给共享内存空间,在第一数据块被计算完成后,输出共享内存 空间中存储的计算结果。
[0059] 具体地,在确定GPU每次计算的最大数据量时,根据显存的大小和待求解矩阵的 规模计算传入GPU的两个矩阵的数据量,即根据显存容量和待求解矩阵的数据量确定计算 待求解矩阵的数据量的单次计算数据量上限包括:获取待求解矩阵的维度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,则确定待 求解矩阵的数据量为显存容量的三分之一。
[0060] 设定待求解矩阵分别为[A]、[B],大小分别为m*n,n*l ;求解结果存入矩阵[C],大 小为m*l。根据GPU显存容量以及待求解矩阵的规模设定显存中每次计算累进传入的两个 矩阵的数据量上限。假设矩阵[A]和矩阵[B]的三个维度大小依次排列顺序为t、p、k。为 提高矩阵数据计算时的数据利用率,减少设备端和主机端数据传输次数,根据显存容量以 及待计算矩阵维度大小提出判定准侧从而获取数据量上限的值。判定准则如下:
[0061]
[0062]
【主权项】
1. 一种数据矩阵相乘的加速运算方法,其特征在于,包括: 根据显存容量和待求解矩阵的数据量确定计算所述待求解矩阵的数据量的单次计算 数据量上限; 根据所述数据量上限和所述待求解矩阵的维度对所述待求解矩阵进行划分操作,得到 多个数据块,其中,每个所述数据块的数据量小于等于所述数据量上限; 在统一计算设备架构平台上构建线程和线程块的计算结构; 在所述计算结构中依次对所述多个数据块进行并行运算;W及 累计由所述计算结构依次输出的所述多个数据块的运算结果。
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 = jo
3. 根据权利要求2所述的加速运算方法,其特征在于,所述线程块包括多个线程,所述 线程块对所述第一数据子块和所述第二数据子块进行相乘计算包括: 获取所述多个线程中第一线程对应的所述第一数据子块中的数据子段Ai中的一行; 获取所述第一线程对应的所述第二数据子块中的数据子段Bj中的一列;W及 利用所述第一线程对所述数据子段Ai中的一行和所述数据子段Bj中的一列进行相乘 计算。
4. 根据权利要求3所述的加速运算方法,其特征在于,所述线程块对所述第一数据子 块和所述第二数据子块进行相乘计算包括: 获取所述线程块中的共享内存空间(SA,SB); 在所述共享内存空间中依次存储所述数据子段Ai中的数据和所述数据子段Bj中的数 据。
5. 根据权利要求1所述的加速运算方法,其特征在于,根据显存容量和待求解矩阵的 数据量确定计算所述待求解矩阵的数据量的单次计算数据量上限包括: 获取所述待求解矩阵的维度m、n和1,其中,所述维度m、n和1的大小依次为t、P和 k ; 判断所述t、P和k是否满足第一条件,其中,所述第一条件为p/k<2且t
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1