矩阵求逆处理方法和装置的制造方法_2

文档序号:8258462阅读:来源:国知局
据本发明实施例优选的矩阵求逆处理方法的流程图;以及
[0022] 图4是根据本发明实施例的矩阵求逆处理装置的示意图。
【具体实施方式】
[0023] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相 互组合。下面将参考附图并结合实施例来详细说明本发明。
[0024] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的 附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是 本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术 人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范 围。
[0025] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语"第一"、"第 二"等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使 用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语"包括"和 "具有"以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元 的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有 清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0026] 本发明实施例提供了一种矩阵求逆处理方法。该方法可以由图形处理器(GPU)来 执行。
[0027] 图1是根据本发明实施例的矩阵求逆处理方法的流程图。如图1所示,该矩阵求 逆处理方法包括步骤如下:
[0028] 步骤S102,获取经过中央处理器扩展后的扩展矩阵,扩展矩阵包括目标矩阵和与 目标矩阵具有相同大小的单位矩阵。
[0029] 目标矩阵即为待求逆矩阵。在计算目标矩阵之前,先通过主机端中央处理器(CPU) 将目标矩阵扩展为扩展矩阵,例如m*n大小的目标矩阵[M],将其扩展为扩展矩阵[M| E],然 后将该扩展矩阵输出至设备端图形处理器(GPU),通过GPU来实现目标矩阵求逆。
[0030] 步骤S104,根据扩展矩阵利用统一计算设备架构平台构建全局网格结构。其中,全 局网格结构包括多个线程。
[0031] 统一计算设备架构(CUDA)平台是C语言的一种扩展,它允许使用标准C来进行 代码编程。这个代码既适用于中央处理器(CPU),也适用于图形处理器(GPU)。主机端 负责派生出运行在GPU设备端上的多线程任务(kernel函数);设备端设有内部调度器来 将kernel程序分配到相应的GPU硬件上。利用CUDA平台构建由多个线程全组成的局网格 结构,利用该全局网格结构对扩展矩阵进行处理。具体地,全局网格结构可以包括至少三个 子全局网格结构,分别用于系数向量计算、矩阵行运算和矩阵单位化处理三个过程,其中, 系数向量计算对应的子全局网格结构在横、纵方向划分线程块,其中每一个线程用于处理 扩展矩阵中目标矩阵上的每一个数据元素,矩阵行运算对应的子全局网格结构仅在横向划 分线程块,其中每一个线程用于处理扩展矩阵的一个列向量,矩阵单位化处理对应的子全 局网格结构仅在纵向划分线程块,其中每一个线程用于处理扩展矩阵的一个行向量。
[0032] 步骤S106,利用所述全局网格结构对所述扩展矩阵的列向量进行并行处理,其中, 对于所述扩展矩阵的每一列列向量上的数据采用串行计算的方式进行计算,得到计算结 果。计算结果包括目标矩阵的逆矩阵和与逆矩阵具有相同大小的单位矩阵。
[0033] 由于在进行目标矩阵求逆的过程中,扩展矩阵的行向量与行向量之间的数据即行 间数据的关联性较高,因此,对扩展矩阵的不同行向量之间的数据采用串行计算的方式进 行计算,即在每个线程内按照行向量的顺序串行计算行间数据。而对于扩展矩阵的每个列 向量,可以采用并行计算,即每个线程之间并行计算,从而提高行间数据的计算效率。
[0034] 步骤S108,将计算结果输出至中央处理器,其中,中央处理器从计算结果中提取逆 矩阵。
[0035] 设备端GPU计算得到计算结果之后,将该计算结果输出给中央处理器CPU,通过 (PU提取得到目标矩阵的逆矩阵。
[0036] 以m*n大小的目标矩阵[M]为例,在计算目标矩阵的逆矩阵之前,需要根据目标矩 阵[M]大小分配数据存储空间。对于主机端,需要分配m*n大小空间存储目标矩阵;在设备 端,贝丨」需要分配2*m*n*sizeof(float)大小空间(g_iMatrix)存储中间计算数据,同时开辟 sizeof(float)*m*l大小空间(g_tVector)存储计算向量。然后将主机端的目标矩阵数据 传入显存空间,利用GPU对目标矩阵进行求逆。
[0037] CUDA显存中求得的矩阵实际为[E | InM],其中InM为原矩阵的逆阵,[E]是m*n大 小的单位矩阵。将数据由显存空间传入内存空间,并提取InM替换原矩阵M,同时将显存及 内存空间释放。
[0038] 根据本发明实施例,获取经过中央处理器扩展后的扩展矩阵,根据扩展矩阵利用 统一计算设备架构平台构建全局网格结构,利用所述全局网格结构对所述扩展矩阵的列向 量进行并行处理,其中,对于所述扩展矩阵的每一列列向量上的数据采用串行计算的方式 进行计算,得到计算结果,将计算结果输出至中央处理器,其中,中央处理器从计算结果中 提取逆矩阵。利用CPU主机端强大的逻辑处理能力和GPU设备端强大的运算能力,通过将矩 阵求逆过程的行、列数据处理过程分拆,最大化利用CUDA的并行计算能力降低计算时间, 提升矩阵求逆计算效率。
[0039] 优选地,根据扩展矩阵利用统一计算设备架构平台构建全局网格结构包括:根据 扩展矩阵的大小确定分割基数;按照分割基数对扩展矩阵的行向量和列向量进行划分,得 到多个数据段;以及根据分割基数和多个数据段的数量构建线程块结构,形成全局网格结 构,其中,全局网格结构包括与多个数据段一一对应的线程块,每个线程块具有与分割基数 相同数量的线程。
[0040] 具体地,全局网格结构可以包括至少三个子全局网格结构,分别用于系数向量计 算、矩阵行运算和矩阵单位化处理三个过程。
[0041] 以m*n大小的目标矩阵[M]为例,扩展为2*m*n大小的矩阵[M|E]。
[0042] 将行m及列n按照分割基数s (可以取s = 8、16、32或64,按照具体计算数据规模 大小选择)对应分为Segment_m = m/s+l、Segment_n = n/s+1大小的数据段。利用行和列 分割得到的Segments构建全局Grid (网格);根据分割基数s,构建Block结构,形成全局 网格结构。如图2所示,T表示线程(Thread),B表示线程块(Block),x,y表示线程块在两 个方向上的维度,X,Y表示网格两个方向上的维度。
[0043] 具体地,计算过程中,在X,Y,Z三个维度的构建原则为:系数计算时的Grid结 构为(Segment_m, Segment_n, 1),Block结构为(s, s, 1);矩阵行运算的Grid结构为 (l,2*Segment_n,l),Block 结构为(l,s,l);矩阵单位化的 Grid 结构为 Grid(Segment_ m, 1, 1),Block 结构为(s, 1, 1)。
[0044] 优选地,利用所述全局网格结构对所述扩展矩阵的列向量进行并行处理,其中,对 于所述扩展矩阵的每一列列向量上的数据采用串行计算的方式进行计算,得到计算结果包 括:计算扩展矩阵中当前行向量的系数向量,系数向量包括扩展矩阵中当前行向量之外的 其他行向量对于当前行向量的系数;利用全局网格结构中线程计算该线程在扩展矩阵的映 射位置上的变换结果,用变换结果替换在扩展矩阵的映射位置上的数据,得到替换后的扩 展矩阵;判断当前行向量是否是扩展矩阵的最后一行行向量;如果判断出当前行向量不是 扩展矩阵的最后一行行向量,则将当前行向量的下一行行向量作为当前行向量,返回执行 计算当前行向量的系数向量的步骤;以及如果判断出当前行向量是扩展矩阵的最后一行行 向量,则对替换后的扩展矩阵进行单位化处理,得到计算结果。
[0045] 具体地,可以通过串行过程遍历扩展矩阵行向量k(k行为扩展矩阵中遍历到的扩 展矩阵的当前行向量),借助CUDA线程对扩展矩阵的列进行并行运算,计算其他行对于k行 的系数,得到系数向量,存入向量空间g_tVector。
[0046] 针对当前遍历的k行,利用系数向量,在每个线程中计算矩阵映射位置中的变换 结果,即是矩阵行运算,并替换原数据。
[0047] 优选地,在利用全局网格结构中线程计算该线程在扩展矩阵的映射位置上的变换 结果之前,矩阵求逆处理方法还包括:建立共享显存空间,共享显存空间用于存储当前行向 量的数据,其中,全局网格结构中线程从共享显存空间调用当前行向量的数据用于计算该 线程在扩展矩阵的映射位置上的变换结果。
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1