利用cpu和gpu协同工作对三角线性方程组求解的加速方法

文档序号:6584137阅读:458来源:国知局
专利名称:利用cpu和gpu协同工作对三角线性方程组求解的加速方法
技术领域
本发明涉及对三角线性方程组求解进行加速的方法,尤指采用CPU和GPU协同工 作对三角线性方程组求解进行加速的方法。
背景技术
三角线性方程组广泛应用于许多科学领域,形如op(A) XX= a XB或者XXop(A) =a XB。其中A是一个上三角或者下三角矩阵,op(A)或者为A,或者为AT;X、B为矩阵,a 为常量。三角线性方程组求解过程是已知矩阵A、B和系数a,求解矩阵X。现有基于CPU 求解矩阵X的实现是一个三重循环,最外层循环次数为矩阵X的列数,中间层循环次数为矩 阵X的行数,两重循环中计算了矩阵X的每一个元素。为了计算矩阵X的第i行,第j列元 素,需要进行i-1次的乘加操作temp = temp-A(i, k) XB(k, j),这构成了最内层循环。由 于在DNA生物计算、核物理科学计算、HPLinpack测试等领域大量存在三角线性方程组的求 解,三角线性方程组求解的加速性能成为这些领域计算性能提高的瓶颈,如何对三角线性 方程组求解进行加速成为这些领域技术人员极为关注的问题。 目前对三角线性方程组求解的加速方法主要有以下几类采用硬件的加速方法、 采用软件的加速方法。采用硬件的加速方法成本高,采用软件加速的方法在加速效果上不 太理想。随着近年来GPU计算能力的飞速发展,单精度浮点性能已超过lTflops,双精度浮 点性能也已达到480Gflops,适合于进行计算密集型程序的运算。同时GPU的编程模型也 日渐成熟,OpenCL,Brook+,CUDA等编程模型为开发人员提供了更加方便的编程接口。利用 GPU加速关键代码段,协同CPU共同完成科学计算成为当前许多科学计算应用提升性能的 主要手段。而目前采用CPU和GPU协同工作对三角线性方程组求解进行加速的方法还没有 公开文献涉及。 目前三角线性方程组求解的加速方法都是针对单一平台的,或者是在CPU上实现 的,不能利用GPU加速部件,达不到性能要求;或者是仅在NVIDIAGPU上实现的,无法利用 CPU资源,不适合在CPU+GPU异构平台上进行加速。本发明基于CPU+GPU的异构计算平台, 利用GPU超强的浮点计算能力和CPU/GPU任务划分方法对三角线性方程组求解进行加速。

发明内容
本发明要解决的技术问题在于提供一种利用CPU和GPU协同工作对三角线性方 程组求解的加速方法,使基于CPU平台的三角线性方程组求解方法在CPU+GPU的异构平台 上获得加速。基于CPU求解矩阵X的方法的最外层循环可完全并行,但并行粒度大,不适合 在GPU上的并行计算。如何变换计算次序以适合GPU并行计算是需要解决的问题之一。其 次需要进行CPU和GPU的任务划分,如何计算数据分割比例以达到良好的负载平衡效果是 影响加速效果的又一关键。 本发明的技术方案为改变三角线性方程组求解过程,先利用CPU进行矩阵求逆运算,获得三角矩阵A的逆矩阵A—1浪着将矩阵B根据数据分割比例分割成两个矩阵B工、B2, 数据分割比例根据CPU和GPU可达到的最高性能指标,以及两部分并行数据量进行计算浪 着在CPU与GPU上并行执行A—1 X和A—1 XB2两个计算过程,达到CPU、GPU的负载平衡,其 中A—的计算使用专门针对GPU优化的数学库函数实现,A—^B工和A—工XB2两个计算过 程的计算结果分别为XpX2 ;并行计算过程结束时将GPU的计算结果X2返回CPU,将&、&合 并成一个矩阵X,作为三角线性方程组的结果输出。 设待求解的三角线性方程组为AXX = a XB,其中A为mXm的矩阵,X、B为mXn 的矩阵,a为常量,X为三角线性方程组的解,m和n均为正整数。
具体技术方案为 第一步、对三角线性方程组中涉及的矩阵A在CPU上执行求逆操作,得到A一1。
第二步、将矩阵B按列分割成两部分B^2,即B二 [BpBj^为mX(n-k)的矩阵, 分到CPU上,参与CPU上的计算,B2为mX k的矩阵,分到GPU上,参与GPU上的计算。数据 分割比例k为矩阵B分配到GPU上的数据量占矩阵B整个数据量的百分比。k的获取方法 如下 2.1统计CPU和GPU上A—1 X 和A—1 X B2求解过程在未进行任务分割之前的计算 分别为Di和D^单位为flop。由于A—'XBi求解中A—'为三角矩阵,求解的数据量
为^w2 ,每个数据的计算需执行n次乘法操作和n次加法操作,总计算量D工=m2n。 A—工XB2
的求解取决于调用的GPU数学库函数,或者为三角矩阵乘法函数,或者为矩阵乘法函数,前 者满足D2 = m2n,后者满足D2 = 2m2n。 2. 2统计A—1 X和A—1 XB2求解在数据分割比例k下的计算量,分别为X (l_k), D2Xk。 2. 2统计CPU和GPU上A—1 和A—1XB2求解操作可达到的最高性能,分别为Q, G^单位为Gflops。最高性能的获取方法可以是实际测试,也可以是通过官方网站公布的数 据。 2.3设A—、BJPA—、B2的计算执行时间分别为VT2,单位为纳秒(ns)。计算方 法为:r,*x("),r2《x" 2J根据CPU和GPU上负载平衡需求,需满足L = L,有餘"l-"=餘"成立,
A 数据分割比例"^^^。
--(-- 第三步、将A—1和B2从CPU传输至GPU。 第四步、同时启动CPU和GPU,由CPU计算Xi = A—"XBp由GPU计算X2 = A—"XB^ 其中A—计算调用GPU上的数学库函数,实现GPU高效计算。
第五步、将GPU上计算结果&传回CPU。 第六步、在CPU上通过按列合并的方式将&、X2合并成一个矩阵X,即X = [&, X2],
输出三角线性方程组的解X。
与现有技术相比,采用本发明可达到以下技术效果 1.本发明通过对原始三角线性方程组求解方法进行矩阵变换、CPU/GPU的任务分 割、将一部分三角矩阵乘法计算利用GPU进行加速,同时利用CPU的计算能力执行另一部分 三角矩阵乘法,实现CPU和GPU的重叠计算,达到了良好的负载平衡效果,实现了对三角线 性方程组求解的加速。通过与运行在Intel Xeon四核CPU上原始求解方法进行比较,采用 本发明在m = 1712, n = 24473的规模下,可以获得1. 5倍的加速效果,在m = 1712, n = 17625的规模下,可以获得1. 6倍的加速效果; 2.本发明通过精确计算数据分割比例k使CPU和GPU的负载平衡达到理想的效 果。


图1为本发明的总流程图。
具体实施例方式图1是本发明的总流程图。 步骤1)、对矩阵A在CPU上执行求逆操作,得到A一1 ; 步骤2)、按照数据分割比例k将矩阵B按列分割成CPU和GPU上执行的两部分 B2,艮卩B = [Bp B2]; 步骤3)、将A—1和B2从CPU传输至GPU ; 步骤4)、同时启动CPU和GPU上的计算任务,分别为= A—1 和X2 = A—1XB2 ;
步骤5)、将GPU上计算结果X2传回CPU ; 步骤6)、在CPU上通过按列合并的方式将&、X2合并成一个矩阵X,即X = [&, X2],
输出三角线性方程组的解X。
权利要求
一种利用CPU和GPU协同工作对三角线性方程组求解的加速方法,其特征在于包括以下步骤第一步、对三角线性方程组A×X=α×B中涉及的矩阵A在CPU上执行求逆操作,得到A-1,A为m×m的矩阵,X、B为m×n的矩阵,α为常量,X为三角线性方程组的解,m和n均为正整数;第二步、将矩阵B按列分割成两部分B1、B2,即B=[B1,B2],B1为m×(n-k)的矩阵,分到CPU上,参与CPU上的计算,B2为m×k的矩阵,分到GPU上,参与GPU上的计算;数据分割比例k为矩阵B分配到GPU上的数据量占矩阵B整个数据量的百分比,k的获取方法如下2.1统计CPU和GPU上A-1×B1和A-1×B2求解过程在未进行任务分割之前的计算量,分别为D1和D2,单位为flop,D1=m2n,当GPU数学库函数为三角矩阵乘法函数时D2=m2n,当GPU数学库函数为矩阵乘法函数时D2=2m2n;2.2统计A-1×B1和A-1×B2求解在数据分割比例k下的计算量,分别为D1×(1-k),D2×k;2.2统计CPU和GPU上A-1×B1和A-1×B2求解操作可达到的最高性能,分别为C1,G2,单位为Gflops;最高性能的获取方法是实际测试或通过官方网站公布的数据;2.3计算A-1×B1的计算执行时间 <mrow><msub> <mi>T</mi> <mn>1</mn></msub><mo>=</mo><mfrac> <msub><mi>D</mi><mn>1</mn> </msub> <msub><mi>C</mi><mn>1</mn> </msub></mfrac><mo>&times;</mo><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>k</mi> <mo>)</mo></mrow><mo>,</mo> </mrow>A-1×B2的计算执行时间 <mrow><msub> <mi>T</mi> <mn>2</mn></msub><mo>=</mo><mfrac> <msub><mi>D</mi><mn>2</mn> </msub> <msub><mi>G</mi><mn>2</mn> </msub></mfrac><mo>&times;</mo><mi>k</mi><mo>,</mo> </mrow>T1、T2的单位为纳秒ns;2.4根据CPU和GPU上负载平衡需求,需满足T1=T2,有 <mrow><mfrac> <msub><mi>D</mi><mn>1</mn> </msub> <msub><mi>C</mi><mn>1</mn> </msub></mfrac><mo>&times;</mo><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>k</mi> <mo>)</mo></mrow><mo>=</mo><mfrac> <msub><mi>D</mi><mn>2</mn> </msub> <msub><mi>G</mi><mn>2</mn> </msub></mfrac><mo>&times;</mo><mi>k</mi> </mrow>成立,数据分割比例 <mrow><mi>k</mi><mo>=</mo><mfrac> <mfrac><msub> <mi>D</mi> <mn>1</mn></msub><msub> <mi>C</mi> <mn>1</mn></msub> </mfrac> <mrow><mfrac> <msub><mi>D</mi><mn>1</mn> </msub> <msub><mi>C</mi><mn>1</mn> </msub></mfrac><mo>+</mo><mfrac> <msub><mi>D</mi><mn>2</mn> </msub> <msub><mi>G</mi><mn>2</mn> </msub></mfrac> </mrow></mfrac><mo>;</mo> </mrow>第三步、将A-1和B2从CPU传输至GPU;第四步、同时启动CPU和GPU,由CPU计算X1=A-1×B1,由GPU计算X2=A-1×B2,其中A-1×B2计算调用GPU上的数学库函数;第五步、将GPU上计算结果X2传回CPU;第六步、在CPU上将X1、X2合并成一个矩阵X,即X=[X1,X2],输出三角线性方程组的解X。
2.如权利要求1所述的利用CPU和GPU协同工作对三角线性方程组求解的加速方法, 其特征在于将&、 X2合并成一个矩阵X的方法是按列合并。
全文摘要
本发明公开了一种利用CPU和GPU协同工作对三角线性方程组求解的加速方法,目的是提供一种加速方法,使基于CPU平台的三角线性方程组求解方法在CPU+GPU的异构平台上获得加速。技术方案是先利用CPU进行矩阵求逆,获得三角矩阵A的逆矩阵A-1;接着将矩阵B分割成两个矩阵B1、B2;接着在CPU与GPU上并行执行A-1×B1和A-1×B2两个计算,达到CPU、GPU的负载平衡,A-1×B1和A-1×B2的结果分别为X1、X2;将X2返回CPU,将X1、X2合并成一个矩阵X输出。采用本发明实现了CPU和GPU的重叠计算,达到了良好的负载平衡效果,实现了对三角线性方程组求解的加速。
文档编号G06F17/16GK101751376SQ200910226769
公开日2010年6月23日 申请日期2009年12月30日 优先权日2009年12月30日
发明者刘杰, 廖湘科, 易会战, 杜云飞, 杨灿群, 王 锋, 陈娟, 黄春 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1