二维非线性对流扩散方程求解程序的测试与优化

二维非线性对流扩散方程求解程序的测试与优化赵永刚1(国防科技大学计算机学院,湖南长沙410073)摘要:在IA-64架构Itanium2处理器上,应用gprof和pfmon对二维非线性对流扩散方程求解程序源代码进行了性能测试。在分析给定程序的数据结构,子过程调用关系,重点子程序中循环体的迭代空间、数据空间、访问轨迹,输入输出数据量大小和程序结构等的基础上,应用子过程合并、循环变换、分支消除、循环顺序逆转、数组一维结构化为二维结构、输入参数给定等方法,改善了数据访问的时空局部性,程序性能有15%的提高。关键词:程序性能优化;,数据局部性;循环变换;数据变换中图分类号:TP301PerformancetestingandOptimizationfortheSolutionof2DNonlinearConvection-DominatedDiffusionProblemZHAOYong-gang1(SchoolofComputerScience,NationalUniversityofDefenseTechnology,Changsha410073,China)Abstract:Applyingthetoolnamedgprofandpfmontogettheprogram’smeasurementandanalysisonIA-64.Forimprovingtheperformance,thedatastructures、iteration-space、array-space、dataaccessingtracksinloopnestsandthecalltreeofthegivenprogramisdescribed.Byapplyingsomemethods,suchasMergingSubroutines,LoopInterchange,BranchRemoving,LoopSkewing,InlineFunction,forguessingthelogicalmulti-dimensionalarraystructuresfromtheflatone-dimensionalarraysandParameterconstanttoenhanceprogramcode’smemorylocalityoptimizations,performancesachievedis15percenthigherthantheoriginalprogram。Keywords:programperformanceoptimization,datalocality,looptransformations,datatransformations1引言求解由实际问题数学物理建模得到的复杂偏微分方程是大规模,长时间的数值计算问题。为了提高问题求解效率,满足应用需求,除了研制高性能计算机,针对目标问题构造好的算法外,还要对高性能计算软件进行性能优化,以充分发挥机器的计算潜力。2二维非线性对流扩散方程求解程序(BNLAG2D)模型BNLAG2D程序用于行求解二维非线性对流扩散问题,所求解的非线性不稳定扩散方程为:其中,f、a0、a1、a2、c1、c2、d1、d2、e、g为矩形域上由DIRICHLET边界条件定义的常数。离散格式为五点全隐式,采用非线性代数方程组解法器,包括牛顿局部线性化和稀疏线性方程组解法器(对角预条件QMRCGSTAB方法)进行求解。程序的主要计算量集中在用QMRCGSTAB法求解稀疏线性方程组。为便于测试,在程序中设定计算6个时间步,每个时间步中线性方程组求解的迭代次数为2500,即线性方程组求解的总迭代次数为15000次。测试环境为IA-64系统,主频为1.4MHz的Itanium2。内存大小是8107MB[1]。各级cach情况如表1所示。3源代码分析表2给出了应用工具gprof对程序进行测试的结果,可以看出子程序pqmrcgstab、mvmi1p2d、pr2d1p2d和prod1p2d是重点子程序,现主要对这些核心子程序中的数据存储访问进行分析[2]。在科学计算中,嵌套循环中的数组访问时间占整个程序执行时间的比重相当大,所以当前的局部性优化方法大都是针对嵌套循环中的数组访问进行的。1作者简介:赵永刚(1976-),男,陕西省岐山县人,工程师,工学硕士,主要研究方向为高性能计算。ygzhao@nudt.edu.cn表1Cache指标参数Cache指标L1IL1DL2L3取数周期11514存数周期0377CACH容量16KB16KB262KB1.5MBCACH行大小64B64B128B128BCACH行数256256204812,288对BNLAG2D的核心子程序中嵌套循环的数组访问情况进行分析后发现,子程序中循环体都是2重循环,循环体迭代空间都是N*N的正方形。以某个循环体中数组C为例,在图1中,每个小圆圈代表一个数组元素,数据空间是802*802正方形,C数组的访问轨迹由灰色圆圈标出。从图1中可以看出,除过边界元素外,数组被访问的轨迹是连续的,说明数组访问具有良好的空间局部性。再对单个循环体中数组之间的运算作分析,可以看出大多是类似于内积的运算,都是按列访问的,每个数组元素只参加一次运算。表2BNLAG2D原程序主要过程/函数调用关系、调用次数与时间分布index%timeSelf(s)Children(s)Calledname[5]66.40%512.77173.8636.95...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?