掌桥专利:专业的专利平台
掌桥专利
首页

一种基于并行计算的OpenFoam平滑方法及装置

文献发布时间:2024-05-31 01:29:11


一种基于并行计算的OpenFoam平滑方法及装置

技术领域

本发明涉及流体力学模拟计算领域,尤其涉及一种基于并行计算的OpenFoam平滑方法及装置。

背景技术

OpenFoam是一个开源的CFD(流体力学模拟)软件,它广泛用于模拟流体力学现象,如涡流、传热和空气动力学等。其中OpenFoam中的高斯-塞德尔平滑器作为一种平滑运算方法,常用于迭代优化求解线性方程组,特别是在求解流体动力学或传热方程时,被用作求解矩阵方程的迭代算法的一部分,以提高求解的精度和稳定性。由于CFD计算具有复杂性和计算密集性,其求解过程往往需要大量的计算资源和时间。

而GPU作为高性能并行计算设备,具有大规模并行处理的能力,可以显著提高计算速度,但是现有技术中,高斯-塞德尔平滑器在进行运算时,每一步更新都依赖于前一次网格计算的最新值,从而一步步逼近收敛,虽然该方法较为精准,但是对于大规模的计算,尤其涉及流体力学的模拟计算,其计算效率过低,从而无法充分发挥GPU的高并发特性,因此急需一种通过GPU对OpenFoam中平滑器的运算进行加速的技术。

发明内容

本发明提供了一种基于并行计算的OpenFoam平滑方法及装置,以解决如何提高OpenFoam中平滑器运算效率的技术问题。

为了解决上述技术问题,第一方面,本发明实施例提供了一种基于并行计算的OpenFoam平滑方法,包括:

通过OpenFoam读取网格计算任务数据,并从所述网格计算任务数据中提取网格信息、场信息以及计算参数;所述网格信息包括:网格矩阵以及单元网格数量;所述场信息包括各所述单元网格的初始值以及线性方程组的右侧项;所述计算参数包括迭代方向以及迭代步数;

将所述网格信息、所述场信息以及所述计算参数存储至分配好的GPU内存中;

根据所述单元网格数量分配对应数量的GPU线程,并根据各所述单元网格的初始值,初始化各所述线程对应单元网格的当前值;

控制每个所述线程根据所有所述单元网格的当前值、所述网格矩阵、所述右侧项以及所述迭代方向并发更新对应所述单元网格的值,直至各线程迭代次数达到所述迭代步数,完成平滑运算。

相比现有技术,上述实施例具有以下有益效果:通过将数据存储在GPU中,并在GPU中执行所有运算过程中涉及的数据读取以及写入,降低数据在CPU和GPU传输导致的时延的同时,还充分利用了GPU的计算资源,提升了计算效率;通过每次迭代考虑所有网格对当前网格的影响,对当前网格的解值进行修正,其中修正当前网格用到的所有网格的值为上一次并行计算结果更新所获取的值或者为初始值,并通过并行计算更新每个单元网格的值,不仅保证了计算的收敛性,同时充分利用了GPU的并发计算特性,提高了计算效率。

在第一方面的一个实施例中,所述控制每个所述线程根据所有所述单元网格的当前值、所述网格矩阵、所述右侧项以及所述迭代方向并发更新对应所述单元网格的值,包括:

控制所述线程根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值;

控制所述线程根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值;

控制所述线程根据所述估计值以及所述修正值,计算更新值,并根据所述更新值更新对应所述单元网格的值。

相比现有技术,上述实施例具有以下有益效果:通过将计算任务分配给多个线程,可以充分利用多核处理器和并行计算资源,加速求解过程;通过利用每个单元网格的当前值、对角矩阵、右侧项等更新每个线程自己独立负责的单元网格计算,避免了多个线程间的数据交换,提高了计算效率;通过每次迭代更新每个单元网格的值,并使用上一次迭代计算获取额所有网格的数据计算当前网格的数据,提高了收敛速率以及稳定性。

在第一方面的一个实施例中,所述根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值,包括:

所述估计值的计算公式,具体为:

extra=(1―ω)·psi+ω·D

其中,extra为所述单元网格的估计值;ω为所述迭代方向;psi为所述单元网格的当前值;b为所述右侧项;D

相比现有技术,上述实施例具有以下有益效果:通过引入迭代方向修正线性方程组的原始数据右侧项对解值得影响,合理估计新解,提高收敛速度。

在第一方面的一个实施例中,所述根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值,包括:

所述修正值的计算公式,具体为:

其中,Contribution为所述修正值;upper(i,j)和lower(i,j)分别为所述网格矩阵中的上三角矩阵和下三角矩阵的第i行,第j列的元素值;Psi(i,j)为与网格矩阵中第i行,第j列元素对应单元网格的当前解。

相比现有技术,上述实施例具有以下有益效果:为了考虑其他单元网格对当前单元网格的影响,通过计算上三角矩阵以及下三矩阵的累积贡献值对解的估计值进行修正,提高收敛速度。

在第一方面的一个实施例中,所述根据所述估计值以及所述修正值,计算更新值,包括:

所述更新值的计算公式,具体为:

Update=extra―ω·D

其中,Update代表所述更新值;extra为所述估计值;ω为所述迭代方向;D

相比现有技术,上述实施例具有以下有益效果:根据通过对角矩阵的引入,计算单元网格自身的自我影响,同时用其他网格对当前单元网格的影响进行修正,结合根据原始方程组的右侧项获取的估计值,计算更新值,使得更新值快速逼近收敛结果。

在第一方面的一个实施例中,存储所述网格矩阵后,在所述GPU内存中提取并存储所述网格矩阵的上三角矩阵、下三角矩阵以及对角矩阵。

相比现有技术,上述实施例具有以下有益效果:通过在GUP的共享内存中同一管理各线程使用的数组数据,提高数据的读取和写入速度,避免了GUP与CPU之间的通信延迟,同时也避免了各GPU线程之间的通信延迟,提高了计算速度。

第二方面,本发明实施例提供了一种基于并行计算的OpenFoam平滑装置,包括:计算数据提取模块、存储数据模块、初始化模块以及并发计算模块;

其中,所述计算数据提取模块,用于通过OpenFoam读取网格计算任务数据,并从所述网格计算任务数据中提取网格信息、场信息以及计算参数;所述网格信息包括:网格矩阵以及单元网格数量;所述场信息包括各所述单元网格的初始值以及线性方程组的右侧项;所述计算参数包括迭代方向以及迭代步数;

所述存储数据模块,将所述网格信息、所述场信息以及所述计算参数存储至分配好的GPU内存中;

所述初始化模块,用于根据所述单元网格数量分配对应数量的GPU线程,并根据各所述单元网格的初始值,初始化各所述线程对应单元网格的当前值;

所述并发计算模块,用于控制每个所述线程根据所有所述单元网格的当前值、所述网格矩阵、所述右侧项以及所述迭代方向并发更新对应所述单元网格的值,直至各线程迭代次数达到所述迭代步数,完成平滑运算。

在第二方面的一个实施例中,所述并发计算模块,包括:单元网格估计计算单元、其他单元网格贡献度计算单元以及单元网格解值更新单元;

其中,所述单元网格估计计算单元,用于控制所述线程根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值;

所述其他单元网格贡献度计算单元,用于控制所述线程根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值;

所述单元网格解值更新单元,用于控制所述线程根据所述估计值以及所述修正值,计算更新值,并根据所述更新值更新对应所述单元网格的值。

在第二方面的一个实施例中,所述根据所述估计值以及所述修正值,计算更新值,包括:

所述更新值的计算公式,具体为:

Update=extra―ω·D

其中,Update代表所述更新值;extra为所述估计值;ω为所述迭代方向;D

在第二方面的一个实施例中,存储所述网格矩阵后,所述存储数据模块还用于在所述GPU内存中提取并存储所述网格矩阵的上三角矩阵、下三角矩阵以及对角矩阵。

附图说明

图1为本发明实施例提供的一种基于并行计算的OpenFoam平滑方法的流程示意图;

图2为本发明实施例提供的一种基于并行计算的OpenFoam平滑装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

请参照图1,为本发明实施例提供的一种基于并行计算的OpenFoam平滑方法,包括S101至S104,具体包括:

S101:通过OpenFoam读取网格计算任务数据,并从所述网格计算任务数据中提取网格信息、场信息以及计算参数;所述网格信息包括:网格矩阵以及单元网格数量;所述场信息包括各所述单元网格的初始值以及线性方程组的右侧项;所述计算参数包括迭代方向以及迭代步数。

S102:将所述网格信息、所述场信息以及所述计算参数存储至分配好的GPU内存中。

进一步的,存储所述网格矩阵后,在所述GPU内存中提取并存储所述网格矩阵的上三角矩阵、下三角矩阵以及对角矩阵。

优选的,可以通过LDU分解方法,将所述网格矩阵转换为上三角矩阵,下三角矩阵,对角线矩阵,并生成对应的索引数组,以此降低矩阵数据对内存的占用。

S103:根据所述单元网格数量分配对应数量的GPU线程,并根据各所述单元网格的初始值,初始化各所述线程对应单元网格的当前值。

优选的,初始化时,通过在GPU内存中创建临时场变量,存储各单元格的初始值,并根据每次各线程迭代计算获得的更新值更新临时场变量,其中分配线程数量与单元网格数量相同,每个线程负责其中一个单元网格值的计算以及更新,从而避免不同线程之间的通信时延。

优选的,可以使用thrust::transform给每个线程所需数据的地址即之前在GPU分配的地址,以及给每个线程发送相同的指令即调用lambda表达式。

S104:控制每个所述线程根据所有所述单元网格的当前值、所述网格矩阵、所述右侧项以及所述迭代方向并发更新对应所述单元网格的值,直至各线程迭代次数达到所述迭代步数,完成平滑运算。

进一步的,所述控制每个所述线程根据所有所述单元网格的当前值、所述网格矩阵、所述右侧项以及所述迭代方向并发更新对应所述单元网格的值,包括:控制所述线程根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值;控制所述线程根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值;控制所述线程根据所述估计值以及所述修正值,计算更新值,并根据所述更新值更新对应所述单元网格的值。

进一步的,所述根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值,包括:

所述估计值的计算公式,具体为:

extra=(1―ω)·psi+ω·D

其中,extra为所述单元网格的估计值;ω为所述迭代方向;psi为所述单元网格的当前值;b为所述右侧项;D

进一步的,所述根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值,包括:

所述修正值的计算公式,具体为:

其中,Contribution为所述修正值;upper(i,j)和lower(i,j)分别为所述网格矩阵中的上三角矩阵和下三角矩阵的第i行,第j列的元素值;Psi(i,j)为与网格矩阵中第i行,第j列元素对应单元网格的当前解。

进一步的,所述根据所述估计值以及所述修正值,计算更新值,包括:

所述更新值的计算公式,具体为:

Update=extra―ω·D

其中,Update代表所述更新值;extra为所述估计值;ω为所述迭代方向;D

优选的,上述并发计算方法可以通过以下步骤用于加速OpenFoam的流体模拟计算:

步骤一:在OpenFoam中进行计算任务信息读入,读取网格以及场还有其它计算参数信息;

步骤二:在GPU中分配内存,将网格和场信息从主机内存拷贝到GPU内存中用于并行计算;

步骤三:当主计算程序执行到平滑运算部分时,在GPU内存中初始化所需网格和场中的数据;

步骤四:GPU分配线程,根据上述并行计算方法中的各线程的迭代计算方法发送指令,进行数据读取以及并行逻辑计算;

步骤五:整个网格迭代计算完毕,在GPU内存中,将新的网格场数据覆盖旧的网格场数据;

步骤六:继续执行后续其它部分的OpenFoam的流体模拟计算,代所有计算执行完毕后,将GPU数据拷贝到CPU中,写入文件。

优选的,上述步骤四可以通过以下步骤执行:

步骤3.1:调用根据本实施例中所述的平滑方法搭建的平滑方法,通过该平滑方法接收存储于GPU内存中的场信息,网格信息、计算参数,并建立临时场变量,用于存储场信息中的各单元网格每次迭代的更新值;

步骤3.2:调用GPU线程,根据计算参数中的迭代步数进行本实施例中的各线程的迭代计算,每次迭代均将各线程迭代计算的更新值更新进临时场变量中。

优选的,上述所有步骤可以使用装配有CPU和GPU的芯片的服务器执行,并基于上述服务器,使用C++语言和cuda语言进行代码的编写。

优选的,通过cuda语言,进行CPU和GPU之间的数据传输,在数据传输到GPU之后,通过thrust::transform发起并行,随后将计算结果传输回CPU。

综上可以看出,本发明实施例提供的一种基于并行计算的OpenFoam平滑方法,相比现有技术具有以下有益效果:通过将数据存储在GPU中,并在GPU中执行所有运算过程中涉及的数据读取以及写入,降低数据在CPU和GPU传输导致的时延的同时,还充分利用了GPU的计算资源,提升了计算效率;通过每次迭代考虑所有网格对当前网格的影响,对当前网格的解值进行修正,其中修正当前网格用到的所有网格的值为上一次并行计算结果更新所获取的值或者为初始值,并通过并行计算更新每个单元网格的值,不仅保证了计算的收敛性,同时充分利用了GPU的并发计算特性,提高了计算效率;每次迭代都使用前一次迭代中已知的最新值来计算的过程,改为在每次迭代中使用上一次迭代中所有相关的旧值进行更新,而不是使用最新的已知值,每次迭代计算都是相互独立的,可以使用NVIDIA GPU进行并行计算加速。

实施例二

请参照图2,为本发明实施例提供的一种基于并行计算的OpenFoam平滑装置,包括:计算数据提取模块20、存储数据模块21、初始化模块22以及并发计算模块23;其中,并发计算模块23,包括:单元网格估计计算单元231、其他单元网格贡献度计算单元232以及单元网格解值更新单元233。

进一步的,所述计算数据提取模块20,用于通过OpenFoam读取网格计算任务数据,并从所述网格计算任务数据中提取网格信息、场信息以及计算参数;所述网格信息包括:网格矩阵以及单元网格数量;所述场信息包括各所述单元网格的初始值以及线性方程组的右侧项;所述计算参数包括迭代方向以及迭代步数;所述存储数据模块21,将所述网格信息、所述场信息以及所述计算参数存储至分配好的GPU内存中;所述初始化模块22,用于根据所述单元网格数量分配对应数量的GPU线程,并根据各所述单元网格的初始值,初始化各所述线程对应单元网格的当前值;所述并发计算模块23,用于控制每个所述线程根据所有所述单元网格的当前值、所述网格矩阵、所述右侧项以及所述迭代方向并发更新对应所述单元网格的值,直至各线程迭代次数达到所述迭代步数,完成平滑运算。

进一步的,存储所述网格矩阵后,所述存储数据模块21还用于在所述GPU内存中提取并存储所述网格矩阵的上三角矩阵、下三角矩阵以及对角矩阵。

进一步的,所述单元网格估计计算单元231,用于控制所述线程根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值;所述其他单元网格贡献度计算单元232,用于控制所述线程根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值;所述单元网格解值更新单元233,用于控制所述线程根据所述估计值以及所述修正值,计算更新值,并根据所述更新值更新对应所述单元网格的值。

进一步的,所述根据对应所述单元网格的当前值、所述网格矩阵的对角矩阵、所述右侧项以及所述迭代方向,计算对应所述单元网格的估计值,包括:

所述估计值的计算公式,具体为:

extra=(1―ω)·psi+ω·D

其中,extra为所述单元网格的估计值;ω为所述迭代方向;psi为所述单元网格的当前值;b为所述右侧项;D

进一步的,所述根据所有所述单元网格的当前值以及所述网格矩阵的上三角矩阵和下三角矩阵,计算对所述单元网格的修正值,包括:

所述修正值的计算公式,具体为:

其中,Contribution为所述修正值;upper(i,j)和lower(i,j)分别为所述网格矩阵中的上三角矩阵和下三角矩阵的第i行,第j列的元素值;Psi(i,j)为与网格矩阵中第i行,第j列元素对应单元网格的当前解。

进一步的,所述根据所述估计值以及所述修正值,计算更新值,包括:

所述更新值的计算公式,具体为:

Update=extra―ω·D

其中,Update代表所述更新值;extra为所述估计值;ω为所述迭代方向;D

实施例三

在上述的基于并行计算的OpenFoam平滑方法的实施例的基础上,本发明另一实施例提供了一种基于并行计算的OpenFoam平滑终端设备,该基于并行计算的OpenFoam平滑终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时,实现本发明任意一实施例的基于并行计算的OpenFoam平滑方法。

示例性的,在这一实施例中所述计算机程序可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述基于并行计算的OpenFoam平滑设备中的执行过程。

所述基于并行计算的OpenFoam平滑设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述基于并行计算的OpenFoam平滑终端设备可包括,但不仅限于,处理器、存储器。

所述处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Dig ita l Sig na l Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述基于并行计算的OpenFoam平滑设备的控制中心,利用各种接口和线路连接整个基于并行计算的OpenFoam平滑设备的各个部分。所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述基于并行计算的OpenFoam平滑设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

实施例四

在上述基于并行计算的OpenFoam平滑方法的实施例的基础上,本发明另一实施例提供了一种存储介质,所述存储介质包括存储的计算机程序,其中,在所述计算机程序运行时,控制所述存储介质所在的设备执行本发明任意一实施例的基于并行计算的OpenFoam平滑方法。

在这一实施例中,上述存储介质为计算机可读存储介质,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步的详细说明,应当理解,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围。特别指出,对于本领域技术人员来说,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种伺服驱动器位置命令的平滑方法及其控制装置
  • 一种基于线性矩阵求解的OpenFOAM加速方法、装置、设备及介质
  • 一种基于服务器开发的事件并行计算的方法和装置
技术分类

06120116624561