关键词:
CPU
GPU
常微分方程
并行计算
RIDC
摘要:
在面临需要进行建模仿真的工程问题时,可能会需要描述一些可测量的量如位置、温度、密度、浓度、电流等作为函数时间,一般均会涉及大型常微分方程(Ordinary Differential Equations,ODE)的初值问题(Initial Value Problem,IVP)求解。常微分方程是包含一个自变量的一个或多个函数以及这些函数的导数的微分方程。常微分方程的数值模拟在科学技术领域具有重要意义。但是,当前求解常微分方程常用的求解方法主要是通过MATLAB进行仿真求解。面对国外软件的封锁和壁垒,设计并提出一个自有的微分方程求解模型是十分有必要的。因此,本文基于C++和CUDA语言设计并实现了两个常微分方程求解模型。当前传统的常微分方程并行求解方法主要面临以下几个问题:首先,现有常微分方程求解方法通常是顺序执行的,求解效率较低;其次,尽管并行模拟硬件设备和并行计算技术发展迅速,但CPU和GPU的多核利用仍然效率低下;第三,并行模拟受计算模式的限制,与现有的并行底层支持不匹配。特别是在求解常微分方程时,模型之间存在输入与输出的依赖关系,这决定了求解过程的顺序。因此,当前的并行模拟性能主要取决于并行度,而算法软件并没有进行并行优化或提供并行设计接口,导致CPU和GPU的利用率较低。传统的常微分方程并行求解方法主要分为面向任务的并行求解和面向方法的并行求解。然而,这两种求解算法都只是面向CPU或同质常微分方程的集合,存在严重缺陷。为此,本文设计并实现了两种常微分方程求解模型的优化。第一种模型基于RIDC(修正积分延迟校正)算法,提出了一个在CPU和GPU上都分配任务的混合求解器,并实现了流水线形式的计算,同时获得了在单个方程和多个不同方程之间的显著并行性。该模型由四个部分组成,分别为任务生成器、调度器、同步器和内存池,以此实现常微分方程的高效求解。该框架可以充分利用GPU的多核优势,有利于计算节点内的负载平衡;第二种模型是基于在用C/C++库求解常微分方程时,由于需要对常微分方程先进行编译,通常使用的静态绑定技术实现GPU和CPU之间的动态任务平衡和按需交互变得难以实现。为解决这个问题,设计了一种基于文本的常微分方程求解框架,该框架结合了即时编译和耦合的CPU-GPU计算方法,提高了求解效率。通过对比实验,发现本文提出的基于流水线模型的常微分方程求解模型和基于文本的常微分方程求解模型准确性高,且求解效率实现了显著提升。