论文部分内容阅读
工程实际中,机械零部件不可避免地存在各类异质性缺陷,且缺陷通常形状各异,分布随机,很难直接使用Eshelby夹杂模型直接解析求解,特别对于形状不规则的夹杂体,解析解的推导会遇到很多困难。为解决这类问题,通常将含有多个缺陷的区域划分为一系列长方体单元,通过已有的应力场、应变场、以及位移场的解决方案求解各个长方体单元引起的单元响应,再将所有单元结果叠加获得最终解,此种方法被称为夹杂问题的数值解法。当需要研究的夹杂区域内具有多个夹杂体或夹杂体形状不规则度较大时,数值解的准确性依赖于网格的细分程度,而网格的细密化会导致计算时间的增加。过去的一段时间里,夹杂体数值解法已经利用离散快速傅里叶卷积/相关在一定程度上提高了计算速度,但在当前对零部件性能精度要求越来越高的趋势下,仍需探究其它方式加速数值解法的计算。由数值算法的定义可知对应的程序中存在多个嵌套循环和独立任务分支,除单纯的算法提升外,可考虑程序的并行化改造。随着科技不断发展,计算机中央处理器(CPU)的核心数不断增加,图像处理器(GPU)的计算能力飞速提升,可使用的并行编程模型越来越多,部分并行编程模型可在对程序改动不大的情况下进行并行化改造,这些条件为程序的并行计算提供了良好的软硬件基础。本文以全空间和半空间任意形状夹杂体数值解法为研究对象,对数值解法进行并行化改进及算法结构优化,期望能进一步提高算法的计算效率。本文主要内容包括三个部分:(1)数值算法中FFT方法的选用和变换控制参数的选择。与其它夹杂问题数值解程序中使用复数FFT变换实数序列不同,文章使用数值算法中需要进行FFT变换的序列,测试了离散快速傅立叶变换库FFTW中提供的实数FFT(r2c/c2r)同位运算和非同位运算方法,复数FFT同时变换双实数序列的方法进行卷积的内存占用和时间消耗,并与复数单序列FFT进行对比,最终确定实数FFT(r2c/c2r)非同位运算方法的使用。同时测试了FFTW中PLAN在不同重复使用次数,不同序列长度下两种变换控制参数的相对性能。(2)对数值算法程序实施并行化改进。使用OpenMP完成数值算法程序在FORTRAN上的四种CPU并行模式,对不同并行模式加速下的时间消耗和内存占用进行分析讨论,四种并行模式均明显地提高了数值算法的运行效率,其中以卷积/相关对矩阵行和列为并行子任务的两种模式由于子任务分配不均导致核心数的浪费,其它两种方案具有较好的负载均衡性,但在线程数较多时加速比和内存占用情况不同。随后使用OpenACC完成数值算法的GPU并行加速,结果表明可获得较CPU两倍的性能提升。(3)数值算法结构特性的利用和优化。分析响应原函数的计算重复性并进行去重复优化,减少近四倍的运行时间,并在此基础上完成CPU和GPU并行测试,获得了近四十倍的效率提升;独立数值算法中的激励源域和目标域网格,解决网格独立时出现的奇点问题,使得数值算法可根据需要缩小目标域网格规模,降低计算量,结果表明在退化为条状网格或面状网格时,计算时间相应降低为原有的四分之一或二分之一;根据全空间响应原函数的对称特性改进算法结构,使用两种方法对程序计算中对称的卷积结果进行数组保存,结果表明均能明显的提高全空间下的计算效率;最后,利用响应原函数只与激励源域及目标域网格的形状和位置相关的特性,使用二进制文件存储响应原函数序列,再次计算相同目标域网格和激励源域网格时可直接读取响应原函数,极其明显地降低了后续的计算时间消耗。