一种矩阵乘法运算方法、图形处理器和电子设备.pdf

上传人:b*** 文档编号:972899 上传时间:2018-03-22 格式:PDF 页数:19 大小:616.07KB
返回 下载 相关 举报
摘要
申请专利号:

CN201010261237.7

申请日:

2010.08.23

公开号:

CN102375721A

公开日:

2012.03.14

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 7/52申请日:20100823|||公开

IPC分类号:

G06F7/52; G06T1/20

主分类号:

G06F7/52

申请人:

联想(北京)有限公司

发明人:

关东仪

地址:

100085 北京市海淀区上地信息产业基地创业路6号

优先权:

专利代理机构:

北京银龙知识产权代理有限公司 11243

代理人:

许静

PDF下载: PDF下载
内容摘要

本发明提供一种矩阵乘法运算方法、图形处理器和电子设备,在第一矩阵和第二矩阵之间执行矩阵乘法的过程中:第一重运算,将第一矩阵的N个矩阵单元,与第二矩阵的N个矩阵单元,依次进行N次相乘;第二重运算,该寄存结果矩阵单元通过累加相乘结果矩阵单元Cj得到;当寄存结果矩阵单元累加了第一预定次数的相乘结果矩阵单元Cj时,将该寄存结果矩阵单元作为中间结果矩阵单元;其中,将所述中间结果矩阵单元进行累加得到所述第一重运算的最终结果矩阵单元。应用本发明所提供的技术,由于在若干次结束第二重运算后临时累加结果都清零,保证了临时累加

权利要求书

1: 一种矩阵乘法运算方法, 应用于图形处理器, 其特征在于, 存在第一矩阵和第二矩 阵; 所述方法包括 : 在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中, 包含两重运算 : 第一重运算, 将所述第一矩阵的第一选定区域中的 N 个矩阵单元, 与所述第二矩阵的 第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规则依次进行 N 次相乘 ; 第二重运算, 在每一次矩阵单元相乘中, 采用寄存器存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵单元 Cj 得到, 所述相乘结果矩阵单 元 Cj 为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘 后得到的矩阵单元 ; 当采用寄存结果矩阵单元 Dmatrix 累加所述相乘结果矩阵单元 Cj 的次 数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述第一预定次数的寄存 结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对寄存器清零 ; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ; 其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵单 元。
2: 根据权利要求 1 所述的方法, 其特征在于, 所述第一矩阵和所述第二矩阵均为行数超过 16 行, 且列数超过 16 列的矩阵 ; 所述矩阵单元为 16 行 16 列的方阵。
3: 根据权利要求 2 所述的方法, 其特征在于, 所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域, 且各个所述矩阵单 元位于同一行 ; 所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域, 且各个所述矩阵单 元位于同一列。
4: 根据权利要求 1 所述的方法, 其特征在于, 所述第一预定次数大于 1, 且小于等于 N ; 所述第一预定次数能够通过设置进行改变。
5: 根据权利要求 1 所述的方法, 其特征在于, 还包括 : 在第一重运算过程中, 设置两个矩阵单元指针 : 矩阵单元指针 A 和矩阵单元指针 B ; 当判定所述第二选定区域中仍然有未参加矩阵乘法的矩阵单元时, 在所述第一选定区 域中, 矩阵单元指针 A 指向下一个矩阵单元 ; 在所述第二选定区域中, 矩阵单元指针 B 指向 下一个矩阵单元。
6: 一种实现矩阵乘法的图形处理器, 其特征在于, 包括 : 存储单元, 用于存放两个矩阵第一矩阵和第二矩阵 ; 矩阵乘法逻辑单元, 用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程 中, 包含两重运算 : 矩阵乘法第一执行单元, 用于实现第一重运算, 将所述第一矩阵的第一选定区域中的 N 个矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规则依次 进行 N 次相乘 ; 矩阵乘法第二执行单元, 用于实现第二重运算, 在每一次矩阵单元相乘中, 采用寄存器 存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵 2 单元 Cj 得到, 所述相乘结果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元与所述第 二选定区域中的一个矩阵单元相乘后得到的矩阵单元 ; 矩阵乘法第一执行单元, 还用于当采用所述寄存结果矩阵单元 Dmatrix 累加所述相乘 结果矩阵单元 Cj 的次数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述 第一预定次数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对寄存器清 零; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ; 其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵单 元。
7: 根据权利要求 6 所述的图形处理器, 其特征在于, 所述第一矩阵和所述第二矩阵均为行数超过 16 行, 且列数超过 16 列的矩阵 ; 矩阵单元为 16 行 16 列的方阵 ; 所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位 于同一行 ; 所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位 于同一列。
8: 根据权利要求 6 所述的图形处理器, 其特征在于, 所述第一预定次数大于 1, 且小于等于 N ; 所述第一预定次数能够通过设置进行改变。
9: 一种实现矩阵乘法的电子设备, 其特征在于, 包含一个图形处理器, 所述图形处理器 包括 : 存储单元, 用于存放两个矩阵第一矩阵和第二矩阵 ; 矩阵乘法逻辑单元, 用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程 中, 包含两重运算 : 矩阵乘法第一执行单元, 用于实现第一重运算, 将所述第一矩阵的第一选定区域中的 N 个矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规则依次 进行 N 次相乘 ; 矩阵乘法第二执行单元, 用于实现第二重运算, 在每一次矩阵单元相乘中, 采用寄存器 存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵 单元 Cj 得到, 所述相乘结果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元与所述第 二选定区域中的一个矩阵单元相乘后得到的矩阵单元 ; 矩阵乘法第一执行单元, 还用于当采用所述寄存结果矩阵单元 Dmatrix 累加所述相乘 结果矩阵单元 Cj 的次数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述 第一预定次数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对寄存器清 零; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ; 其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵单 元。
10: 根据权利要求 9 所述的电子设备, 其特征在于, 还包括 : 矩阵单元设定单元, 用于设定矩阵单元为 16 行 16 列的方阵 ; 矩阵乘法规划单元, 用于在所述第一矩阵中选定所述第一选定区域, 在所述第二矩阵 3 中选定所述第二选定区域 ; 所述第一矩阵和所述第二矩阵均为行数超过 16 行, 且列数超过 16 列的矩阵 ; 所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位 于同一行 ; 所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位 于同一列。

说明书


一种矩阵乘法运算方法、 图形处理器和电子设备

    【技术领域】
     本发明涉及图形技术, 特别是指一种矩阵乘法运算方法、 图形处理器和电子设备。背景技术 图形处理器 (GPU, Graphic Processing Unit) 具有远多于 CPU 的运算单元, 因此 在高性能计算领域得到了越来越多的应用。矩阵乘法是数值计算中最重要的操作之一, 从 某种意义上说, 它是数值计算操作的一个共同基础, 因此, 研究如何实现高效精确的 GPU 矩 阵乘法是研究 GPU 通用计算的一个重要问题。
     由于 GPU 内部的大量运算都是单精度浮点运算, 当矩阵规模增大时累积误差增加 很快。经测试, 矩阵规模超过 5000 后, GPU 计算结果与 CPU 计算结果之间的误差已经超过 -6 10 。
     发明人发现现有技术存在如下问题 : 在应用 GPU 对矩阵乘法进行运算的过程中, 由于没有对矩阵乘法的中间结果所产生的误差进行处理, 导致最终的 GPU 计算结果误差过 大, 影响了运算的准确性。
     发明内容
     本发明要解决的技术问题是, 现有技术中由于没有对矩阵乘法的中间结果所产生 的误差进行处理, 导致最终的 GPU 计算结果误差过大, 影响了运算的准确性的缺陷。
     为解决上述技术问题, 本发明的实施例提供一种矩阵乘法运算方法, 应用于图形 处理器, 存在第一矩阵和第二矩阵 ; 所述方法包括 : 在所述第一矩阵和所述第二矩阵之间 执行矩阵乘法的过程中, 包含两重运算 : 第一重运算, 将所述第一矩阵的第一选定区域中的 N 个矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规则依次 进行 N 次相乘 ; 第二重运算, 在每一次矩阵单元相乘中, 采用寄存器存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵单元 Cj 得到, 所述相乘结 果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵 单元相乘后得到的矩阵单元 ; 当采用寄存结果矩阵单元 Dmatrix 累加所述相乘结果矩阵单 元 Cj 的次数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述第一预定次 数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对寄存器清零 ; 其中, j表 示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ; 其中, 将所述中间结果矩阵单 元 C 进行累加得到所述第一重运算的最终结果矩阵单元。
     上述的方法中, 所述第一矩阵和所述第二矩阵均为行数超过 16 行, 且列数超过 16 列的矩阵 ; 所述矩阵单元为 16 行 16 列的方阵。
     上述的方法中, 所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区 域, 且各个所述矩阵单元位于同一行 ; 所述第二选定区域为所述第二矩阵中由多个矩阵单 元占据的区域, 且各个所述矩阵单元位于同一列。
     上述的方法中, 所述第一预定次数大于 1, 且小于等于 N ; 所述第一预定次数能够通过设置进行改变。
     上述的方法中, 还包括 : 在第一重运算过程中, 设置两个矩阵单元指针 : 矩阵单元 指针 A 和矩阵单元指针 B ; 当判定所述第二选定区域中仍然有未参加矩阵乘法的矩阵单元 时, 在所述第一选定区域中, 矩阵单元指针 A 指向下一个矩阵单元 ; 在所述第二选定区域 中, 矩阵单元指针 B 指向下一个矩阵单元。
     一种实现矩阵乘法的图形处理器, 包括 : 存储单元, 用于存放两个矩阵第一矩阵和 第二矩阵 ; 矩阵乘法逻辑单元, 用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的 过程中, 包含两重运算 : 矩阵乘法第一执行单元, 用于实现第一重运算, 将所述第一矩阵的 第一选定区域中的 N 个矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 根 据矩阵乘法规则依次进行 N 次相乘 ; 矩阵乘法第二执行单元, 用于实现第二重运算, 在每一 次矩阵单元相乘中, 采用寄存器存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵单元 Cj 得到, 所述相乘结果矩阵单元 Cj 为所述第一选定区 域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元 ; 矩阵 乘法第一执行单元, 还用于当采用所述寄存结果矩阵单元 Dmatrix 累加所述相乘结果矩阵 单元 Cj 的次数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述第一预定 次数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对寄存器清零 ; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ; 其中, 将所述中间结果矩阵 单元 C 进行累加得到所述第一重运算的最终结果矩阵单元。 所述的图形处理器中, 所述第一矩阵和所述第二矩阵均为行数超过 16 行, 且列数 超过 16 列的矩阵 ; 矩阵单元为 16 行 16 列的方阵 ; 所述第一选定区域为所述第一矩阵中由 多个矩阵单元占据的区域, 且各个矩阵单元位于同一行 ; 所述第二选定区域为所述第二矩 阵中由多个矩阵单元占据的区域, 且各个矩阵单元位于同一列。
     所述的图形处理器中, 所述第一预定次数大于 1, 且小于等于 N ; 所述第一预定次 数能够通过设置进行改变。
     一种实现矩阵乘法的电子设备, 包含一个图形处理器, 所述图形处理器包括 : 存储 单元, 用于存放两个矩阵第一矩阵和第二矩阵 ; 矩阵乘法逻辑单元, 用于在所述第一矩阵和 所述第二矩阵之间执行矩阵乘法的过程中, 包含两重运算 : 矩阵乘法第一执行单元, 用于实 现第一重运算, 将所述第一矩阵的第一选定区域中的 N 个矩阵单元, 与所述第二矩阵的第 二选定区域中的 N 个矩阵单元, 根据矩阵乘法规则依次进行 N 次相乘 ; 矩阵乘法第二执行 单元, 用于实现第二重运算, 在每一次矩阵单元相乘中, 采用寄存器存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵单元 Cj 得到, 所述相乘结 果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵 单元相乘后得到的矩阵单元 ; 矩阵乘法第一执行单元, 还用于当采用所述寄存结果矩阵单 元 Dmatrix 累加所述相乘结果矩阵单元 Cj 的次数达到第一预定次数时, 将累加了所述相乘 结果矩阵单元 Cj 的所述第一预定次数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单 元 C, 且此时对寄存器清零 ; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于 等于 N ; 其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵单 元。
     所述的电子设备中, 还包括 : 矩阵单元设定单元, 用于设定矩阵单元为 16 行 16 列
     的方阵 ; 矩阵乘法规划单元, 用于在所述第一矩阵中选定所述第一选定区域, 在所述第二矩 阵中选定所述第二选定区域 ; 所述第一矩阵和所述第二矩阵均为行数超过 16 行, 且列数超 过 16 列的矩阵 ; 所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域, 且各个 矩阵单元位于同一行 ; 所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位于同一列。
     本发明的上述技术方案的有益效果如下 : 应用本发明所提供的技术, 由于在若干 次结束最内层循环 - 即第二重运算后临时累加结果都清零, 因此保证了临时累加结果与矩 阵元素的小数位数不致相差过大, 从而为计算结果保留了更多的精度。提高了 GPU 单精度 矩阵乘法运算的精度, 经测试当矩阵规模达到 10000 时, 与 CPU 计算结果的误差仍然在 10-7 数量级。同时保持了原算法的高性能, 经比较测试, 性能损失在 1%以内。 附图说明
     图 1 为本发明实施例矩阵乘法的实现原理示意图 ; 图 2 为本发明实施例矩阵单元之间相乘的原理示意图 ; 图 3 为本发明实施例大规模矩阵之间实现矩阵乘法的原理示意图 ; 图 4 为本发明实施例两个 4 阶矩阵之间实现矩阵乘法的原理示意图一 ; 图 5 为本发明实施例两个 4 阶矩阵之间实现矩阵乘法的原理示意图二 ; 图 6 为本发明实施例一种矩阵乘法运算方法流程示意图 ; 图 7 为本发明实施例图形处理器的结构示意图。具体实施方式
     为使本发明要解决的技术问题、 技术方案和优点更加清楚, 下面将结合附图及具 体实施例进行详细描述。
     为帮助技术人员理解本发明实施例所提供的技术方案, 以下描述了矩阵乘法的实 现原理, 如图 1 所示, 存在两个矩阵 : 第一矩阵 (S*T)、 第二矩阵 (T*S) ; 第一矩阵与第二矩 阵相乘会得到一个最终结果矩阵 (S*S)。根据公知的矩阵乘法运算规则 : 第一矩阵第 1 行 的各个元素与第二矩阵第 1 列的各个元素分别对应相乘, 会得到最终结果矩阵的第一行第 一列的元素。
     在矩阵乘法中, 经常会遇到大矩阵甚至超大矩阵, 例如雷达采集到的数据会以超 大矩阵的方式进行存放和处理, 此时, 需要将超大矩阵分割为若干个矩阵单元, 习惯上为满 足计算机硬件的需要, 矩阵单元是 16*16 的方阵, 但是并不表示矩阵单元必须是 16*16 的方 阵。
     如图 2 所示, 实现两个超大矩阵之间的矩阵乘法应当遵循如下计算原理 :
     (1), 不失一般性, 本申请中, 元素是标量, 设定 a[1:16], c[1:16] 为 16 元素的矢 量; 其中, a 指向矩阵单元 A 的一个行, b 指向矩阵单元 B 的一个行 ; c 指向矩阵单元 C 的一 个行。
     一个矩阵单元是 16*16 的方阵, 因此能存放 256 个元素 ; 矩阵单元 A 与矩阵单元 B 相乘, 能够得到矩阵单元 C。
     (2), 在循环过程中, 将当前两个矩阵单元 - 矩阵单元 A 与矩阵单元 B 相乘 ;设置一个运算边界 (local barrier)。
     (3), 在一个 16 次的循环过程中 ;
     (4), 将 a 指向矩阵单元 A 的当前行的下一行 ;
     (5), 计算矩阵单元 C 的某一行 c 的各个元素分别对应的数值。
     其中, 一行有 16 个元素, 在计算每一个元素的过程中, a 与 b 相乘, 其中的元素进 行了 16 次乘法, 以及 16 次加法。
     对应 (3), 由于矩阵单元 C 有 16 行, 每一行对应一个矢量 c, 因此实际上存在 16 个 矢量 c 需要通过计算得到 ; 如本步骤所记载的方式, 在 16 次循环中计算出每一个矢量 c 的 具体值。
     (6), 对应 (2) 中所设置的运算边界, 关闭该运算边界。
     这是因为在运算边界内部的计算通常不允许被打断, 即不允许 GPU 在这一段时间 内出现中断, 以避免出现不可控制的错误。
     并且在运算边界内部, 计算出了一个完整的矩阵单元 C 的所有元素的数值。
     (7), 由于已知矩阵单元 A、 矩阵单元 B 均是大的第一矩阵、 第二矩阵中的一个矩阵 单元, 矩阵单元 C 则是第一矩阵、 第二矩阵对应的结果矩阵中的一个矩阵单元, 因此在计算 出 C 的全部元素之后, 将 A 和 B 分别指向第一矩阵、 第二矩阵中的下一个矩阵单元。 (8), 一直到 B 越界, 则第一矩阵、 第二矩阵之间的矩阵乘法运算结束。
     上述方法中, 由于 GPU 内部的大量运算都是单精度浮点运算, 当矩阵规模增大的 时候累积误差增加很快。经测试, 矩阵规模超过 5000 后, 与 CPU 计算结果的误差已经超过 -6 10 。
     为帮助技术人员理解本发明的技术思想, 如图 3 所示, 提供了在大规模第一矩阵 和大规模第二矩阵之间进行矩阵乘法的过程中, 如何运用矩阵单元 A、 矩阵单元 B, 以及矩 阵单元 C 实现大规模矩阵之间的乘法运算的技术。其中, 矩阵单元指针 A 指向一个矩阵单 元, 矩阵单元指针 B 指向一个矩阵单元 ; 由于矩阵单元指针 A 与矩阵单元 A 实质上是指同一 个矩阵单元, 两者之间的区别仅在编写代码的过程中有实际意义, 因此为描述方便, 不再区 分两者之间的差异, 同理, 由于矩阵单元指针 B 与矩阵单元 B 实际上是指同一个矩阵单元, 因此为描述方便, 也不再区分两者之间的差异。
     图 3 中的每一个方格表示存放了一个矩阵单元, 在第一矩阵中, 粗线标识的区域 存放了 S 个矩阵单元, 不失一般性, 此处 S 具体为 11 ; 第二矩阵中, 粗线标识的区域存放了 T 个矩阵单元, 不失一般性, 此处 T 具体为 17, 因此相乘后得到的结果矩阵中, 是一个每一行 / 每一列均有 11 个矩阵单元的结果矩阵, 换言之, 结果矩阵的每一行 / 每一列均有 11*16 = 176 个元素。 两个区域中的各个矩阵单元相乘, 会得到结果矩阵中粗线标识的区域所存放的 各个矩阵单元。其中不失一般性, 矩阵单元的规模如前所述, 是 16*16 的方阵。
     为描述方便, 将第一矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元 A ; 将第二矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元 B ; 将结果矩阵中粗线标识 的区域中的一个矩阵单元称为矩阵单元 C。 由于在计算机中, 可以以一个矩阵指针指向粗线 标识的区域中的一个矩阵单元, 因此上述规定是完全无误且确实可行的。
     当 GPU 对粗线标识的区域中的各个矩阵单元进行乘法运算的过程中, 根据步骤 (1) 至步骤 (8) 中所描述的矩阵单元进行乘法运算的原理, 对图 3 中粗线标识的区域中的各
     个矩阵单元进行相乘, 相乘过程包含了两重运算, 其中 :
     第一重运算, 将第一矩阵中粗线标识的第一选定区域中的每一个矩阵单元 A, 与第 二矩阵中粗线标识的第二选定区域中的每一个矩阵单元 B, 对应相乘后再相加得到相乘结 果矩阵单元 Cj, 根据 S 为 11, T 为 17 可以知道, 1 =< j <= 17, 因此会执行 17 次矩阵单 元之间的乘法。
     第二重运算, 根据步骤 (1) 至步骤 (8) 中所描述的矩阵单元进行乘法运算的原理, 对当前指向的矩阵单元 A、 当前指向的矩阵单元 B 进行相乘是上述 17 次矩阵单元之间的乘 法中的特定的一次, 得到相乘结果矩阵单元 Cj, 不失一般性, 令 j = 1, 则得到相乘结果矩阵 单元 C1。
     之后, 根据第一重运算, 会指向下一个矩阵单元 A、 下一个矩阵单元 B, 根据第二重 运算得到相乘结果矩阵单元 C2, 此时在第一重运算中执行累加操作则矩阵单元 C = C1+C2。
     之后, 根据第一重运算, 会指向下一个矩阵单元 A、 下一个矩阵单元 B, 根据第二重 运算得到相乘结果矩阵单元 C3, 此时执行累加操作则矩阵单元 C = C1+C2+C3。
     同 理 可 知, 最 终 经 过 17 次 累 加 操 作 之 后, 矩 阵 单 元 C = C1+C2+C3+.......+Cj+.......+C17, 其中, 在计算机中, 通常是设置了 C 的原始数值为 C = C0, C0 为所有元素为 0 的矩阵单元, 因此需要执行 17 次累加操作而非 16 次。
     可以看出因为当矩阵规模很大时, 矩阵单元 C 的累加过程中, 累加结果与矩阵元 素的小数位数相差很大, 每次进行累加操作时都会引入舍入误差, 累积起来造成误差增长 过快。
     为帮助技术人员更为直观的理解本发明的技术方案和发明思想, 且考虑到所描述 的超大矩阵难以在规定格式的纸质文件中得到直观的体现, 因此如图 4 所示, 以下实施例 中, 分别以 4 阶方阵 M 代替第一矩阵, 以 4 阶方阵 N 代替第二矩阵。
     在如图 4 和图 5 所示的具体实施例中, 为描述简便且由于矩阵单元的阶数也是能 够预先通过设置进行改变的, 因此此实施例中的矩阵单元不再是 16*16 的方阵, 而是 2*2 的 方阵, 其中, 4 阶方阵 M 包括 4 个矩阵单元, 分别是 : M11、 M12、 M21 和 M22, 4 阶方阵 N 包括 4 个矩 阵单元, 分别是 : N11、 N12、 N21 和 N22。
     如图 5 所示, 设定方阵 M 和方阵 N 的乘积结果矩阵 P 可表示为上述矩阵单元乘积 的线性组合, 即:
     P11 = M11N11+M12N21 ;
     P12 = M11N12+M12N22 ;
     P21 = M21N11+M22N21 ;
     P22 = M21N12+M22N22。
     如此, 则获取结果矩阵 P 的计算过程包括 : 分别对 P11、 P12、 P21 和 P22 进行计算, 其 中, 计算上述各个矩阵的过程各包含两重运算, 以 P11 为例 :
     第一重运算中, 将 M11、 M12、 M21 和 M22, 以及 N11、 N12、 N21 和 N22 对应相乘后再相加, 会 得到相乘结果矩阵单元 Pjj, 可以知道, 1 =< j <= 2, 因此会执行 2 次矩阵单元之间的乘 法。
     会将方阵 M 和方阵 N 相乘时得到的 M11N11 和 M12N21 相加。其中, M11N11 = (m11n11+m12 n21)+(m21n12+m22n22) ;M12N21 = (m13n31+m14n41)+(m23n32+m24n42)。
     第 二 重 运 算 中, 分 别 计 算 M11N11 的 第 一 个 元 素 m11n11+m12n21 和 第 二 个 元 素 m21n12+m22n22, 以及 M12N21 的第一个元素 m13n31+m14n41 和第二个元素 m23n32+m24n42。
     对于 P12、 P21 和 P22, 采取如同计算 P11 的过程即可。
     在本发明实施例中, 提供一种矩阵乘法运算方法, 如图 6 所示, 应用于 GPU, 包括 :
     步骤 401, 存在第一矩阵和第二矩阵 ;
     在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中, 包含两重运算 :
     步骤 402, 第一重运算, 将所述第一矩阵的第一选定区域中的 N 个矩阵单元, 与所 述第二矩阵的第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规则依次进行 N 次相乘 ;
     步骤 403, 第二重运算, 在每一次矩阵单元相乘中, 采用寄存器存放寄存结果矩阵 单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘结果矩阵单元 Cj 得到, 所述相 乘结果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个 矩阵单元相乘后得到的矩阵单元 ;
     步骤 404, 当采用寄存结果矩阵单元 Dmatrix 累加所述相乘结果矩阵单元 Cj 的次 数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述第一预定次数的寄存 结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对寄存器清零 ; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ;
     其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵单元。 应用本发明所提供的技术, 由于在若干次结束最内层循环运算 - 即第二重运算后 临时累加结果都清零, 因此保证了临时累加结果与矩阵元素的小数位数不致相差过大, 从 而为计算结果保留了更多的精度。提高了 GPU 单精度矩阵乘法运算的精度, 经测试当矩阵 -7 规模达到 10000 时, 与 CPU 计算结果的误差仍然在 10 数量级。同时保持了原算法的高性 能, 经比较测试得知其性能损失在 1%以内。
     其中, 所述第一预定次数大于 1, 且小于等于 N ; 所述第一预定次数能够通过设置 进行改变。进一步的, 所述第一预定次数可以动态变化, 由于 N 并不总是能够被第一预定次 数整除, 因此在采用寄存结果矩阵单元 Dmatrix 对所述相乘结果矩阵单元 Cj 进行累加的过 程中, 可能余下的相乘结果矩阵单元少于第一预定次数。例如 N = 10, 且第一预定次数为 3; 则在上述累加过程中, 最后会只存在一个相乘结果矩阵单元 C10 累加到寄存结果矩阵单 元 Dmatrix 上, 此时应当判定寄存结果矩阵单元 Dmatrix 能够作为中间结果矩阵单元 C, 且 能够将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵单元。
     由所提供的技术方案可以得知步骤 404 中, 在执行第一重运算的过程中, 如果判 定完成了所述 N 次相乘, 则结束该第一重运算 ; 即, 所述第一矩阵的第一选定区域中的 N 个 矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 如果已经根据矩阵乘法规 则完成了依次进行 N 次相乘的运算, 则结束第一重运算。实际上, 在技术人员实现的过程 中, 由于第二重运算是第一重运算的组成部分, 因此只需要满足能够在第一重运算中完成 上述判定过程即可, 这包括在步骤 402 中完成上述判定过程。
     为帮助技术人员理解本发明的技术思想, 如图 3 所示, 提供了在大规模第一矩阵 和大规模第二矩阵进行矩阵乘法的过程中, 如何运用矩阵单元 A、 矩阵单元 B, 以及矩阵单
     元 C 实现大规模矩阵之间的矩阵乘法运算的技术。
     当 GPU 对粗线标识的区域中的各个矩阵单元进行乘法运算的过程中, 根据步骤 (1) 至步骤 (8) 中所描述的矩阵单元进行乘法运算的原理, 对图 3 中粗线标识的区域中的各 个矩阵单元进行相乘, 包含了两重运算, 其中 :
     第一重运算, 将第一矩阵中粗线标识的区域中的每一个矩阵单元 A, 与第二矩阵中 粗线标识的区域中的每一个矩阵单元 B, 对应相乘。根据 M 为 11, N 具体为 17 可以知道, 会 出现 17 次矩阵单元之间的乘法。
     第二重运算, 根据步骤 (1) 至步骤 (8) 中所描述的矩阵单元进行乘法运算的原理, 对当前指向的矩阵单元 A、 当前指向的矩阵单元 B 进行相乘, 得到相乘结果矩阵单元 Cj, 不 失一般性, j = 1, 则得到相乘结果矩阵单元 C1。
     之后, 根据第一重运算, 矩阵单元指针 A 会指向下一个矩阵单元 A、 矩阵单元指针 B 会指向下一个矩阵单元 B, 由根据第二重运算得到相乘结果矩阵单元 C2, 此时执行累加操 作则矩阵单元 C = C1+C2。
     之后, 根据第一重运算, 会指向下一个矩阵单元 A 和矩阵单元 B, 由根据第二重运 算得到相乘结果矩阵单元 C3, 此时执行累加操作则矩阵单元 C = C1+C2+C3。 同理可知, 最终经过 17 次累加操作之后, 矩阵单元 C = C1+C2+C3+.......+Cj+.. .....+C17。
     但是, 为消除累加过程中, 由于累加结果与矩阵元素的小数位数相差很大所导致 的计算机对于累加结果尾数的自动抛弃, 对寄存器进行设置, 使得设置之后的寄存器能够 存放寄存结果矩阵单元 Dmatrix, 寄存结果矩阵单元 Dmatrix 用以累加相乘结果矩阵单元 Cj, 所述相乘结果矩阵单元 Cj 中存放所述 N 次相乘的过程中, 所述第一选定区域中的一个 矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元。这包括 :
     Dmatrixmatrix 清零 ;
     Dmatrixmatrix = C1+C2, 然后 Dmatrixmatrix 对中间结果矩阵单元 C 进行第一次 赋值 ;
     之后, Dmatrix 清零 ;
     Dmatrix = C3+C4, 然后将 Dmatrix 累加到矩阵单元 C, 即 C = C+Dmatrix ;
     之后, Dmatrix 清零 ;
     Dmatrix = C5+C6+C7+C8, 然后将 Dmatrix 累加到矩阵单元 C, 即 C = C+Dmatrix ;
     之后, Dmatrix 清零 ;
     Dmatrix = C9+C10+C11+C12,然 后 将 Dmatrix 累 加 到 矩 阵 单 元 C,即 C = C+Dmatrix ;
     之后, Dmatrix 清零 ;
     Dmatrix = C13+C14+C15+C16+C17, 然 后 将 Dmatrix 累 加 到 矩 阵 单 元 C, 即C= C+Dmatrix ;
     之后, Dmatrix 清零。
     可以看出, 寄存器每次清零之前, 可以经过若干次的累加, 如果仅接收来自相乘结 果矩阵单元 Cj 的赋值, 而不做累加操作, 那么与现有的技术方案雷同。
     在本发明实施例中, 寄存器在每次清零之后所存放的相乘结果矩阵单元 Cj 的数
     目是可以变化的。寄存器每一次能够存放若干个矩阵单元 Cj 累加的结果, 在这一过程中, 寄存器将 s 个矩阵单元 Cj 累加之后, 得到一个第一临时结果矩阵 Ds, 此时, 需要在第一临时 结果矩阵 Ds 上再次加上 Cj+1, 则, 由于 Ds 中的各个元素与 Cj+1 之间的差距不是很大, 因此 在执行 Dmatrix = Ds+Cj+1 时, 不会在累加之后由于计算机精度的限制而导致丢弃尾数。
     不失一般性, 以 Dmatrix = C13+C14+C15+C16+C17 为例描述其应用场景, j = 16 时, Ds = C13+C14+C15+C16, 则, 由于 Ds 中的各个元素与 Cj+1 = C17 之间的差距不是很大, 因 此在执行 Dmatrix = Ds+C17 时, 不会在累加之后由于计算机精度的限制而导致丢弃尾数, 从而为计算结果保留了更多的精度。
     一种实现矩阵乘法的图形处理器, 如图 7 所示, 包括 :
     存储单元 501, 用于存放两个矩阵第一矩阵和第二矩阵 ;
     矩阵乘法逻辑单元 502, 用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法 的过程中, 包含两重运算 :
     矩阵乘法第一执行单元 503, 用于实现第一重运算, 将所述第一矩阵的第一选定区 域中的 N 个矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规 则依次进行 N 次相乘 ; 矩阵乘法第二执行单元 504, 用于实现第二重运算, 在每一次矩阵单元相乘中, 采 用寄存器存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘 结果矩阵单元 Cj 得到, 所述相乘结果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元 与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元 ;
     矩阵乘法第一执行单元 503, 还用于当采用所述寄存结果矩阵单元 Dmatrix 累加 所述相乘结果矩阵单元 Cj 的次数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述第一预定次数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对 寄存器清零 ; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ;
     其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵 单元。
     应用本发明所提供的技术, 由于在若干次结束最内层循环 - 即第二重运算后临时 累加结果都清零, 因此保证了临时累加结果与矩阵元素的小数位数不致相差过大, 从而为 计算结果保留了更多的精度。提高了 GPU 单精度矩阵乘法运算的精度, 经测试当矩阵规模 -7 达到 10000 时, 与 CPU 计算结果的误差仍然在 10 数量级。同时保持了原算法的高性能, 经 比较测试, 性能损失在 1%以内。
     所述的图形处理器中,
     所述第一矩阵和第二矩阵均为行数超过 16 行, 且列数超过 16 列的矩阵 ;
     矩阵单元为 16 行 16 列的方阵 ; 所述第一选定区域为第一矩阵中由多个矩阵单元 占据的区域, 且各个矩阵单元位于同一行 ; 所述第二选定区域为第二矩阵中由多个矩阵单 元占据的区域, 且各个矩阵单元位于同一列。
     第一预定次数大于 1, 且小于等于 N ; 所述第一预定次数能够通过设置进行改变。
     对应的, 本发明实施例还提供一种实现矩阵乘法的电子设备, 该电子设备包含一 个图形处理器, 所述图形处理器包括 :
     存储单元 501, 用于存放两个矩阵第一矩阵和第二矩阵 ;
     矩阵乘法逻辑单元 502, 用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法 的过程中, 包含两重运算 :
     矩阵乘法第一执行单元 503, 用于实现第一重运算, 将所述第一矩阵的第一选定区 域中的 N 个矩阵单元, 与所述第二矩阵的第二选定区域中的 N 个矩阵单元, 根据矩阵乘法规 则依次进行 N 次相乘 ;
     矩阵乘法第二执行单元 504, 用于实现第二重运算, 在每一次矩阵单元相乘中, 采 用寄存器存放寄存结果矩阵单元 Dmatrix, 所述寄存结果矩阵单元 Dmatrix 通过累加相乘 结果矩阵单元 Cj 得到, 所述相乘结果矩阵单元 Cj 为所述第一选定区域中的一个矩阵单元 与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元 ;
     矩阵乘法第一执行单元 503, 还用于当采用所述寄存结果矩阵单元 Dmatrix 累加 所述相乘结果矩阵单元 Cj 的次数达到第一预定次数时, 将累加了所述相乘结果矩阵单元 Cj 的所述第一预定次数的寄存结果矩阵单元 Dmatrix 作为中间结果矩阵单元 C, 且此时对 寄存器清零 ; 其中, j 表示所述 N 次相乘中的第 j 次相乘, 且大于等于 1 小于等于 N ;
     其中, 将所述中间结果矩阵单元 C 进行累加得到所述第一重运算的最终结果矩阵 单元。
     电子设备中, 还包括 :
     矩阵单元设定单元, 用于设定矩阵单元为 16 行 16 列的方阵 ; 矩阵乘法规划单元, 用于在所述第一矩阵中选定第一选定区域, 在所述第二矩阵中选定第二选定区域 ; 所述第 一矩阵和第二矩阵均为行数超过 16 行, 且列数超过 16 列的矩阵 ; 所述第一选定区域为第一 矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位于同一行 ; 所述第二选定区域为第 二矩阵中由多个矩阵单元占据的区域, 且各个矩阵单元位于同一列。
     应用本发明所提供的技术, 寄存器在每次清零之后所存放的相乘结果矩阵单元 Cj 的数目是可以变化的。寄存器每一次能够存放若干个相乘结果矩阵单元 Cj 累加的结果, 在 这一过程中, 寄存器将 s 个相乘结果矩阵单元 Cj 累加之后, 得到一个第一临时结果矩阵 Ds, 此时, 需要在第一临时结果矩阵 Ds 上再次加上相乘结果矩阵单元 Cj+1, 则, 由于 Ds 中的各个 元素与相乘结果矩阵单元 Cj+1 之间的差距不是很大, 因此在执行 Dmatrix = Ds+Cj+1 时, 不会 在累加之后由于计算机精度的限制而导致丢弃尾数。提高了 GPU 单精度矩阵乘法运算的精 度, 经测试当矩阵规模达到 10000 时, 与 CPU 计算结果的误差不超过 10-7 数量级。同时保持 了原算法的高性能, 经比较测试, 性能损失在 1%以内。
     以上所述是本发明的优选实施方式, 应当指出, 对于本技术领域的普通技术人员 来说, 在不脱离本发明所述原理的前提下, 还可以作出若干改进和润饰, 这些改进和润饰也 应视为本发明的保护范围。

一种矩阵乘法运算方法、图形处理器和电子设备.pdf_第1页
第1页 / 共19页
一种矩阵乘法运算方法、图形处理器和电子设备.pdf_第2页
第2页 / 共19页
一种矩阵乘法运算方法、图形处理器和电子设备.pdf_第3页
第3页 / 共19页
点击查看更多>>
资源描述

《一种矩阵乘法运算方法、图形处理器和电子设备.pdf》由会员分享,可在线阅读,更多相关《一种矩阵乘法运算方法、图形处理器和电子设备.pdf(19页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102375721A43申请公布日20120314CN102375721ACN102375721A21申请号201010261237722申请日20100823G06F7/52200601G06T1/2020060171申请人联想(北京)有限公司地址100085北京市海淀区上地信息产业基地创业路6号72发明人关东仪74专利代理机构北京银龙知识产权代理有限公司11243代理人许静54发明名称一种矩阵乘法运算方法、图形处理器和电子设备57摘要本发明提供一种矩阵乘法运算方法、图形处理器和电子设备,在第一矩阵和第二矩阵之间执行矩阵乘法的过程中第一重运算,将第一矩阵的N个矩阵单元,与第。

2、二矩阵的N个矩阵单元,依次进行N次相乘;第二重运算,该寄存结果矩阵单元通过累加相乘结果矩阵单元CJ得到;当寄存结果矩阵单元累加了第一预定次数的相乘结果矩阵单元CJ时,将该寄存结果矩阵单元作为中间结果矩阵单元;其中,将所述中间结果矩阵单元进行累加得到所述第一重运算的最终结果矩阵单元。应用本发明所提供的技术,由于在若干次结束第二重运算后临时累加结果都清零,保证了临时累加结果与矩阵元素的小数位数相差很小,保留了更多的精度。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书3页说明书9页附图6页CN102375728A1/3页21一种矩阵乘法运算方法,应用于图形处理器,其特征在于。

3、,存在第一矩阵和第二矩阵;所述方法包括在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;当采用寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累。

4、加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。2根据权利要求1所述的方法,其特征在于,所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述矩阵单元为16行16列的方阵。3根据权利要求2所述的方法,其特征在于,所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个所。

5、述矩阵单元位于同一列。4根据权利要求1所述的方法,其特征在于,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。5根据权利要求1所述的方法,其特征在于,还包括在第一重运算过程中,设置两个矩阵单元指针矩阵单元指针A和矩阵单元指针B;当判定所述第二选定区域中仍然有未参加矩阵乘法的矩阵单元时,在所述第一选定区域中,矩阵单元指针A指向下一个矩阵单元;在所述第二选定区域中,矩阵单元指针B指向下一个矩阵单元。6一种实现矩阵乘法的图形处理器,其特征在于,包括存储单元,用于存放两个矩阵第一矩阵和第二矩阵;矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含。

6、两重运算矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵权利要求书CN102375721ACN102375728A2/3页3单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元DMAT。

7、RIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。7根据权利要求6所述的图形处理器,其特征在于,所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;矩阵单元为16行16列的方阵;所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单。

8、元占据的区域,且各个矩阵单元位于同一列。8根据权利要求6所述的图形处理器,其特征在于,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。9一种实现矩阵乘法的电子设备,其特征在于,包含一个图形处理器,所述图形处理器包括存储单元,用于存放两个矩阵第一矩阵和第二矩阵;矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单。

9、元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一。

10、重运算的最终结果矩阵单元。10根据权利要求9所述的电子设备,其特征在于,还包括矩阵单元设定单元,用于设定矩阵单元为16行16列的方阵;矩阵乘法规划单元,用于在所述第一矩阵中选定所述第一选定区域,在所述第二矩阵权利要求书CN102375721ACN102375728A3/3页4中选定所述第二选定区域;所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。权利要求书CN102375721ACN102375728A1/。

11、9页5一种矩阵乘法运算方法、图形处理器和电子设备技术领域0001本发明涉及图形技术,特别是指一种矩阵乘法运算方法、图形处理器和电子设备。背景技术0002图形处理器GPU,GRAPHICPROCESSINGUNIT具有远多于CPU的运算单元,因此在高性能计算领域得到了越来越多的应用。矩阵乘法是数值计算中最重要的操作之一,从某种意义上说,它是数值计算操作的一个共同基础,因此,研究如何实现高效精确的GPU矩阵乘法是研究GPU通用计算的一个重要问题。0003由于GPU内部的大量运算都是单精度浮点运算,当矩阵规模增大时累积误差增加很快。经测试,矩阵规模超过5000后,GPU计算结果与CPU计算结果之间的。

12、误差已经超过106。0004发明人发现现有技术存在如下问题在应用GPU对矩阵乘法进行运算的过程中,由于没有对矩阵乘法的中间结果所产生的误差进行处理,导致最终的GPU计算结果误差过大,影响了运算的准确性。发明内容0005本发明要解决的技术问题是,现有技术中由于没有对矩阵乘法的中间结果所产生的误差进行处理,导致最终的GPU计算结果误差过大,影响了运算的准确性的缺陷。0006为解决上述技术问题,本发明的实施例提供一种矩阵乘法运算方法,应用于图形处理器,存在第一矩阵和第二矩阵;所述方法包括在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算第一重运算,将所述第一矩阵的第一选定区域中的N个。

13、矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;当采用寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第。

14、J次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0007上述的方法中,所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述矩阵单元为16行16列的方阵。0008上述的方法中,所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一列。0009上述的方法中,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够说明书CN102375721ACN102375728A2/9页6通过设置进行改变。00。

15、10上述的方法中,还包括在第一重运算过程中,设置两个矩阵单元指针矩阵单元指针A和矩阵单元指针B;当判定所述第二选定区域中仍然有未参加矩阵乘法的矩阵单元时,在所述第一选定区域中,矩阵单元指针A指向下一个矩阵单元;在所述第二选定区域中,矩阵单元指针B指向下一个矩阵单元。0011一种实现矩阵乘法的图形处理器,包括存储单元,用于存放两个矩阵第一矩阵和第二矩阵;矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行。

16、N次相乘;矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等。

17、于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0012所述的图形处理器中,所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;矩阵单元为16行16列的方阵;所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。0013所述的图形处理器中,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。0014一种实现矩阵乘法的电子设备,包含一个图形处理器,所述图形处理器包括存储单元,用于存放两个矩阵第一矩阵。

18、和第二矩阵;矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;矩阵乘法第一执行单元,还用于当采用所述。

19、寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0015所述的电子设备中,还包括矩阵单元设定单元,用于设定矩阵单元为16行16列说明书CN102375721ACN102375728A3/9页7的方阵;矩阵乘法规划单元,用于在所述第一矩阵中选定所述第一选定区域,在所述第二矩阵中选定所述第二选定区域;。

20、所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。0016本发明的上述技术方案的有益效果如下应用本发明所提供的技术,由于在若干次结束最内层循环即第二重运算后临时累加结果都清零,因此保证了临时累加结果与矩阵元素的小数位数不致相差过大,从而为计算结果保留了更多的精度。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差仍然在107数量级。同时保持了原算法的高性能,经比较测。

21、试,性能损失在1以内。附图说明0017图1为本发明实施例矩阵乘法的实现原理示意图;0018图2为本发明实施例矩阵单元之间相乘的原理示意图;0019图3为本发明实施例大规模矩阵之间实现矩阵乘法的原理示意图;0020图4为本发明实施例两个4阶矩阵之间实现矩阵乘法的原理示意图一;0021图5为本发明实施例两个4阶矩阵之间实现矩阵乘法的原理示意图二;0022图6为本发明实施例一种矩阵乘法运算方法流程示意图;0023图7为本发明实施例图形处理器的结构示意图。具体实施方式0024为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。0025为帮助技术人员理解本发明实施。

22、例所提供的技术方案,以下描述了矩阵乘法的实现原理,如图1所示,存在两个矩阵第一矩阵ST、第二矩阵TS;第一矩阵与第二矩阵相乘会得到一个最终结果矩阵SS。根据公知的矩阵乘法运算规则第一矩阵第1行的各个元素与第二矩阵第1列的各个元素分别对应相乘,会得到最终结果矩阵的第一行第一列的元素。0026在矩阵乘法中,经常会遇到大矩阵甚至超大矩阵,例如雷达采集到的数据会以超大矩阵的方式进行存放和处理,此时,需要将超大矩阵分割为若干个矩阵单元,习惯上为满足计算机硬件的需要,矩阵单元是1616的方阵,但是并不表示矩阵单元必须是1616的方阵。0027如图2所示,实现两个超大矩阵之间的矩阵乘法应当遵循如下计算原理0。

23、0281,不失一般性,本申请中,元素是标量,设定A116,C116为16元素的矢量;其中,A指向矩阵单元A的一个行,B指向矩阵单元B的一个行;C指向矩阵单元C的一个行。0029一个矩阵单元是1616的方阵,因此能存放256个元素;矩阵单元A与矩阵单元B相乘,能够得到矩阵单元C。00302,在循环过程中,将当前两个矩阵单元矩阵单元A与矩阵单元B相乘;说明书CN102375721ACN102375728A4/9页80031设置一个运算边界LOCALBARRIER。00323,在一个16次的循环过程中;00334,将A指向矩阵单元A的当前行的下一行;00345,计算矩阵单元C的某一行C的各个元素分别。

24、对应的数值。0035其中,一行有16个元素,在计算每一个元素的过程中,A与B相乘,其中的元素进行了16次乘法,以及16次加法。0036对应3,由于矩阵单元C有16行,每一行对应一个矢量C,因此实际上存在16个矢量C需要通过计算得到;如本步骤所记载的方式,在16次循环中计算出每一个矢量C的具体值。00376,对应2中所设置的运算边界,关闭该运算边界。0038这是因为在运算边界内部的计算通常不允许被打断,即不允许GPU在这一段时间内出现中断,以避免出现不可控制的错误。0039并且在运算边界内部,计算出了一个完整的矩阵单元C的所有元素的数值。00407,由于已知矩阵单元A、矩阵单元B均是大的第一矩阵。

25、、第二矩阵中的一个矩阵单元,矩阵单元C则是第一矩阵、第二矩阵对应的结果矩阵中的一个矩阵单元,因此在计算出C的全部元素之后,将A和B分别指向第一矩阵、第二矩阵中的下一个矩阵单元。00418,一直到B越界,则第一矩阵、第二矩阵之间的矩阵乘法运算结束。0042上述方法中,由于GPU内部的大量运算都是单精度浮点运算,当矩阵规模增大的时候累积误差增加很快。经测试,矩阵规模超过5000后,与CPU计算结果的误差已经超过106。0043为帮助技术人员理解本发明的技术思想,如图3所示,提供了在大规模第一矩阵和大规模第二矩阵之间进行矩阵乘法的过程中,如何运用矩阵单元A、矩阵单元B,以及矩阵单元C实现大规模矩阵之。

26、间的乘法运算的技术。其中,矩阵单元指针A指向一个矩阵单元,矩阵单元指针B指向一个矩阵单元;由于矩阵单元指针A与矩阵单元A实质上是指同一个矩阵单元,两者之间的区别仅在编写代码的过程中有实际意义,因此为描述方便,不再区分两者之间的差异,同理,由于矩阵单元指针B与矩阵单元B实际上是指同一个矩阵单元,因此为描述方便,也不再区分两者之间的差异。0044图3中的每一个方格表示存放了一个矩阵单元,在第一矩阵中,粗线标识的区域存放了S个矩阵单元,不失一般性,此处S具体为11;第二矩阵中,粗线标识的区域存放了T个矩阵单元,不失一般性,此处T具体为17,因此相乘后得到的结果矩阵中,是一个每一行/每一列均有11个矩。

27、阵单元的结果矩阵,换言之,结果矩阵的每一行/每一列均有1116176个元素。两个区域中的各个矩阵单元相乘,会得到结果矩阵中粗线标识的区域所存放的各个矩阵单元。其中不失一般性,矩阵单元的规模如前所述,是1616的方阵。0045为描述方便,将第一矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元A;将第二矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元B;将结果矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元C。由于在计算机中,可以以一个矩阵指针指向粗线标识的区域中的一个矩阵单元,因此上述规定是完全无误且确实可行的。0046当GPU对粗线标识的区域中的各个矩阵单元进行乘法运算的过程中,根据步骤1至步。

28、骤8中所描述的矩阵单元进行乘法运算的原理,对图3中粗线标识的区域中的各说明书CN102375721ACN102375728A5/9页9个矩阵单元进行相乘,相乘过程包含了两重运算,其中0047第一重运算,将第一矩阵中粗线标识的第一选定区域中的每一个矩阵单元A,与第二矩阵中粗线标识的第二选定区域中的每一个矩阵单元B,对应相乘后再相加得到相乘结果矩阵单元CJ,根据S为11,T为17可以知道,1J17,因此会执行17次矩阵单元之间的乘法。0048第二重运算,根据步骤1至步骤8中所描述的矩阵单元进行乘法运算的原理,对当前指向的矩阵单元A、当前指向的矩阵单元B进行相乘是上述17次矩阵单元之间的乘法中的特定。

29、的一次,得到相乘结果矩阵单元CJ,不失一般性,令J1,则得到相乘结果矩阵单元C1。0049之后,根据第一重运算,会指向下一个矩阵单元A、下一个矩阵单元B,根据第二重运算得到相乘结果矩阵单元C2,此时在第一重运算中执行累加操作则矩阵单元CC1C2。0050之后,根据第一重运算,会指向下一个矩阵单元A、下一个矩阵单元B,根据第二重运算得到相乘结果矩阵单元C3,此时执行累加操作则矩阵单元CC1C2C3。0051同理可知,最终经过17次累加操作之后,矩阵单元CC1C2C3CJC17,其中,在计算机中,通常是设置了C的原始数值为CC0,C0为所有元素为0的矩阵单元,因此需要执行17次累加操作而非16次。。

30、0052可以看出因为当矩阵规模很大时,矩阵单元C的累加过程中,累加结果与矩阵元素的小数位数相差很大,每次进行累加操作时都会引入舍入误差,累积起来造成误差增长过快。0053为帮助技术人员更为直观的理解本发明的技术方案和发明思想,且考虑到所描述的超大矩阵难以在规定格式的纸质文件中得到直观的体现,因此如图4所示,以下实施例中,分别以4阶方阵M代替第一矩阵,以4阶方阵N代替第二矩阵。0054在如图4和图5所示的具体实施例中,为描述简便且由于矩阵单元的阶数也是能够预先通过设置进行改变的,因此此实施例中的矩阵单元不再是1616的方阵,而是22的方阵,其中,4阶方阵M包括4个矩阵单元,分别是M11、M12、。

31、M21和M22,4阶方阵N包括4个矩阵单元,分别是N11、N12、N21和N22。0055如图5所示,设定方阵M和方阵N的乘积结果矩阵P可表示为上述矩阵单元乘积的线性组合,即0056P11M11N11M12N21;0057P12M11N12M12N22;0058P21M21N11M22N21;0059P22M21N12M22N22。0060如此,则获取结果矩阵P的计算过程包括分别对P11、P12、P21和P22进行计算,其中,计算上述各个矩阵的过程各包含两重运算,以P11为例0061第一重运算中,将M11、M12、M21和M22,以及N11、N12、N21和N22对应相乘后再相加,会得到相乘结。

32、果矩阵单元PJJ,可以知道,1J2,因此会执行2次矩阵单元之间的乘法。0062会将方阵M和方阵N相乘时得到的M11N11和M12N21相加。其中,M11N11M11N11M12N21M21N12M22N22;说明书CN102375721ACN102375728A6/9页100063M12N21M13N31M14N41M23N32M24N42。0064第二重运算中,分别计算M11N11的第一个元素M11N11M12N21和第二个元素M21N12M22N22,以及M12N21的第一个元素M13N31M14N41和第二个元素M23N32M24N42。0065对于P12、P21和P22,采取如同计算P。

33、11的过程即可。0066在本发明实施例中,提供一种矩阵乘法运算方法,如图6所示,应用于GPU,包括0067步骤401,存在第一矩阵和第二矩阵;0068在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算0069步骤402,第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;0070步骤403,第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单。

34、元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;0071步骤404,当采用寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;0072其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0073应用本发明所提供的技术,由于在若干次结束最内层循环运算即第二重运算后临时累加结果都清零,因此保证了临时累加结果与矩阵元素的小数位数不致相差过大,从而为。

35、计算结果保留了更多的精度。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差仍然在107数量级。同时保持了原算法的高性能,经比较测试得知其性能损失在1以内。0074其中,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。进一步的,所述第一预定次数可以动态变化,由于N并不总是能够被第一预定次数整除,因此在采用寄存结果矩阵单元DMATRIX对所述相乘结果矩阵单元CJ进行累加的过程中,可能余下的相乘结果矩阵单元少于第一预定次数。例如N10,且第一预定次数为3;则在上述累加过程中,最后会只存在一个相乘结果矩阵单元C10累加到寄存结果。

36、矩阵单元DMATRIX上,此时应当判定寄存结果矩阵单元DMATRIX能够作为中间结果矩阵单元C,且能够将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0075由所提供的技术方案可以得知步骤404中,在执行第一重运算的过程中,如果判定完成了所述N次相乘,则结束该第一重运算;即,所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,如果已经根据矩阵乘法规则完成了依次进行N次相乘的运算,则结束第一重运算。实际上,在技术人员实现的过程中,由于第二重运算是第一重运算的组成部分,因此只需要满足能够在第一重运算中完成上述判定过程即可,这包括在步骤40。

37、2中完成上述判定过程。0076为帮助技术人员理解本发明的技术思想,如图3所示,提供了在大规模第一矩阵和大规模第二矩阵进行矩阵乘法的过程中,如何运用矩阵单元A、矩阵单元B,以及矩阵单说明书CN102375721ACN102375728A7/9页11元C实现大规模矩阵之间的矩阵乘法运算的技术。0077当GPU对粗线标识的区域中的各个矩阵单元进行乘法运算的过程中,根据步骤1至步骤8中所描述的矩阵单元进行乘法运算的原理,对图3中粗线标识的区域中的各个矩阵单元进行相乘,包含了两重运算,其中0078第一重运算,将第一矩阵中粗线标识的区域中的每一个矩阵单元A,与第二矩阵中粗线标识的区域中的每一个矩阵单元B,。

38、对应相乘。根据M为11,N具体为17可以知道,会出现17次矩阵单元之间的乘法。0079第二重运算,根据步骤1至步骤8中所描述的矩阵单元进行乘法运算的原理,对当前指向的矩阵单元A、当前指向的矩阵单元B进行相乘,得到相乘结果矩阵单元CJ,不失一般性,J1,则得到相乘结果矩阵单元C1。0080之后,根据第一重运算,矩阵单元指针A会指向下一个矩阵单元A、矩阵单元指针B会指向下一个矩阵单元B,由根据第二重运算得到相乘结果矩阵单元C2,此时执行累加操作则矩阵单元CC1C2。0081之后,根据第一重运算,会指向下一个矩阵单元A和矩阵单元B,由根据第二重运算得到相乘结果矩阵单元C3,此时执行累加操作则矩阵单元。

39、CC1C2C3。0082同理可知,最终经过17次累加操作之后,矩阵单元CC1C2C3CJC17。0083但是,为消除累加过程中,由于累加结果与矩阵元素的小数位数相差很大所导致的计算机对于累加结果尾数的自动抛弃,对寄存器进行设置,使得设置之后的寄存器能够存放寄存结果矩阵单元DMATRIX,寄存结果矩阵单元DMATRIX用以累加相乘结果矩阵单元CJ,所述相乘结果矩阵单元CJ中存放所述N次相乘的过程中,所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元。这包括0084DMATRIXMATRIX清零;0085DMATRIXMATRIXC1C2,然后DMATRIXMA。

40、TRIX对中间结果矩阵单元C进行第一次赋值;0086之后,DMATRIX清零;0087DMATRIXC3C4,然后将DMATRIX累加到矩阵单元C,即CCDMATRIX;0088之后,DMATRIX清零;0089DMATRIXC5C6C7C8,然后将DMATRIX累加到矩阵单元C,即CCDMATRIX;0090之后,DMATRIX清零;0091DMATRIXC9C10C11C12,然后将DMATRIX累加到矩阵单元C,即CCDMATRIX;0092之后,DMATRIX清零;0093DMATRIXC13C14C15C16C17,然后将DMATRIX累加到矩阵单元C,即CCDMATRIX;0094。

41、之后,DMATRIX清零。0095可以看出,寄存器每次清零之前,可以经过若干次的累加,如果仅接收来自相乘结果矩阵单元CJ的赋值,而不做累加操作,那么与现有的技术方案雷同。0096在本发明实施例中,寄存器在每次清零之后所存放的相乘结果矩阵单元CJ的数说明书CN102375721ACN102375728A8/9页12目是可以变化的。寄存器每一次能够存放若干个矩阵单元CJ累加的结果,在这一过程中,寄存器将S个矩阵单元CJ累加之后,得到一个第一临时结果矩阵DS,此时,需要在第一临时结果矩阵DS上再次加上CJ1,则,由于DS中的各个元素与CJ1之间的差距不是很大,因此在执行DMATRIXDSCJ1时,不。

42、会在累加之后由于计算机精度的限制而导致丢弃尾数。0097不失一般性,以DMATRIXC13C14C15C16C17为例描述其应用场景,J16时,DSC13C14C15C16,则,由于DS中的各个元素与CJ1C17之间的差距不是很大,因此在执行DMATRIXDSC17时,不会在累加之后由于计算机精度的限制而导致丢弃尾数,从而为计算结果保留了更多的精度。0098一种实现矩阵乘法的图形处理器,如图7所示,包括0099存储单元501,用于存放两个矩阵第一矩阵和第二矩阵;0100矩阵乘法逻辑单元502,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算0101矩阵乘法第一执行单元50。

43、3,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;0102矩阵乘法第二执行单元504,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;0103矩阵乘法第一执行单元503,还用于当采用所述寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加。

44、了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;0104其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0105应用本发明所提供的技术,由于在若干次结束最内层循环即第二重运算后临时累加结果都清零,因此保证了临时累加结果与矩阵元素的小数位数不致相差过大,从而为计算结果保留了更多的精度。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差仍然在107数量级。同时保持了原算法的高性能,经比较测试,。

45、性能损失在1以内。0106所述的图形处理器中,0107所述第一矩阵和第二矩阵均为行数超过16行,且列数超过16列的矩阵;0108矩阵单元为16行16列的方阵;所述第一选定区域为第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。0109第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。0110对应的,本发明实施例还提供一种实现矩阵乘法的电子设备,该电子设备包含一个图形处理器,所述图形处理器包括0111存储单元501,用于存放两个矩阵第一矩阵和第二矩阵;说明书CN102375721AC。

46、N102375728A9/9页130112矩阵乘法逻辑单元502,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算0113矩阵乘法第一执行单元503,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;0114矩阵乘法第二执行单元504,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元DMATRIX,所述寄存结果矩阵单元DMATRIX通过累加相乘结果矩阵单元CJ得到,所述相乘结果矩阵单元CJ为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵。

47、单元相乘后得到的矩阵单元;0115矩阵乘法第一执行单元503,还用于当采用所述寄存结果矩阵单元DMATRIX累加所述相乘结果矩阵单元CJ的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元CJ的所述第一预定次数的寄存结果矩阵单元DMATRIX作为中间结果矩阵单元C,且此时对寄存器清零;其中,J表示所述N次相乘中的第J次相乘,且大于等于1小于等于N;0116其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。0117电子设备中,还包括0118矩阵单元设定单元,用于设定矩阵单元为16行16列的方阵;矩阵乘法规划单元,用于在所述第一矩阵中选定第一选定区域,在所述第二矩阵中选。

48、定第二选定区域;所述第一矩阵和第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述第一选定区域为第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。0119应用本发明所提供的技术,寄存器在每次清零之后所存放的相乘结果矩阵单元CJ的数目是可以变化的。寄存器每一次能够存放若干个相乘结果矩阵单元CJ累加的结果,在这一过程中,寄存器将S个相乘结果矩阵单元CJ累加之后,得到一个第一临时结果矩阵DS,此时,需要在第一临时结果矩阵DS上再次加上相乘结果矩阵单元CJ1,则,由于DS中的各个元素与相乘结果矩阵单元CJ1。

49、之间的差距不是很大,因此在执行DMATRIXDSCJ1时,不会在累加之后由于计算机精度的限制而导致丢弃尾数。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差不超过107数量级。同时保持了原算法的高性能,经比较测试,性能损失在1以内。0120以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。说明书CN102375721ACN102375728A1/6页14图1说明书附图CN102375721ACN102375728A2/6页15图2说明书附图CN102375721ACN102375728A3/6页16图3说明书附图CN102375721ACN102375728A4/6页17图4图5说明书附图CN102375721ACN102375728A5/6页18图6说明书附图CN102375721ACN102375728A6/6页19图7说明书附图CN102375721A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1