并行计算 — CAE术语解释

分类:术语集 | 2026-01-15

并行计算的理论基础

并行计算的基本概念

🧑‍🎓

并行计算只是使用多个CPU吗?还是计算的机制有根本的改变?

🎓

有根本的改变。并行计算是将一个大问题分割成多个小的子问题,并在多个处理器(内核)上同时求解的计算范式。例如,用1个内核求解100万自由度的刚度矩阵与用4个内核通过领域分割求解时,算法本身是不同的。并行化效率通过"并行化效率"评估,4个内核的理想加速比是4倍,但实际上由于通信开销,通常在3.2倍左右。

🧑‍🎓

通信开销具体是什么?是内存的读写速度慢吗?

🎓

是处理器间数据交互所花费的时间。共享内存型(一台机器内的多核)中,缓存一致性的维护成为开销。分布式内存型(多台机器、集群)中,通过InfiniBand等高速网络进行的消息通信(MPI)成为瓶颈。例如,在领域分割法中,每个计算步骤都会在相邻领域的边界条件同步时产生通信。当通信时间在总计算时间中占比不可忽视时,增加内核数反而会降低速度。这可以用阿姆达尔定律解释,如果并行化可能部分的比例为P=95%,即使内核数趋于无穷大,理论最大加速比也仅为

$$ S_{\infty} = \frac{1}{1-P} = 20 $$
倍。

🧑‍🎓

"领域分割"经常提到,这是指在CAE中将网格物理上割裂后进行计算吗?那连接性怎么保证呢?

🎓

正是这样。网格被分割成多个子域(领域),每个子域分配给不同的处理器。连接性通过随时交换和同步相邻子域间边界面上的节点(界面节点)数据来维持。例如,Abaqus/Standard的并行处理会自动进行这种领域分割,使用部分结构法或Schur补元法并行求解各领域的方程。分割的质量会对计算效率产生巨大影响,需要各领域的单元数均匀且边界面长度(通信量)最小。

并行计算的数值计算方法

并行化的方法和库

🧑‍🎓

CAE软件如何实现并行计算?请从编程的角度讲解。

🎓

主要使用两种编程模型的组合。一种是"共享内存并行(OpenMP)",在一台机器的多核上分割for循环等迭代计算。另一种是"分布式内存并行(MPI)",在多台机器或大量内核上进行大规模线性方程组求解或领域分割。例如,Ansys Mechanical的并行求解器在直接法求解器(稀疏求解器)中主要使用OpenMP,在反复迭代法求解器(PCG等)中大量使用MPI。在实际代码中,需要插入#pragma omp parallel for(OpenMP)或MPI_Send/MPI_Recv(MPI)这样的指令。

🧑‍🎓

MPI和OpenMP是二选一的吗?还是都使用会更快?

🎓

混合并行(同时使用两者)是现代HPC(高性能计算)的标准做法。例如,128核集群(16个节点×8核)使用MPI启动16个进程(1个节点1个进程),各节点内的8核使用OpenMP并行化。这样相比仅使用MPI,可以减少MPI进程间的通信,降低通信开销。实际上,在大规模CFD分析中,纯MPI与混合(MPI+OpenMP)相比,后者可缩短总计算时间10~20%。

🧑‍🎓

据说线性方程组求解中,直接法和迭代法对并行化的适配度不同。具体有什么区别?

🎓

差异很大。直接法(LU分解等)计算量大、内存消耗也大,但算法本身的并行化相对困难,通常在数百核左右的规模内实用。相反,迭代法(共轭梯度法:CG法等)主要由矩阵向量乘积

$$ \mathbf{A}\mathbf{x} $$
和内积计算组成,这些运算非常适合领域分割,因此可以实现数千~数万核的大规模并行化。例如,MSC Nastran的迭代求解器(MSI)使用MPI专门为大规模并行计算进行了设计。

并行计算的实际应用

高效并行计算的设置

🧑‍🎓

实际提交分析任务时,核数是不是越多越好?有确定最优核数的方法吗?

🎓

并非越多越好。最优核数通过"强缩放"测试确定。固定问题规模(网格数量),逐步增加核数(1、2、4、8...)并测量计算时间。当计算时间几乎不再减少,甚至开始增长(通信开销成为主导)的点,就是该问题的实际核数上限。根据经验,100万个单元的结构分析通常在8~16核范围内高效,1000万个单元的大规模CFD在64~128核范围内高效。Ansys Fluent中,最优核数也因求解器类型(基于压力还是基于密度)而异。

🧑‍🎓

提交任务时要指定"MPI进程数"和"OpenMP线程数",这个分配怎么决定?

🎓

这取决于使用的硬件配置。基本原则是"每个节点运行1个MPI进程,该节点内的所有核使用OpenMP线程"。例如,一个4节点集群,每个节点有20核(40个超线程)的CPU时,可设置MPI进程数=4,OpenMP线程数=40。不过,如果内存不足(单节点内存容量装不下问题),可以在一个节点内启动多个MPI进程,相应减少线程数。COMSOL Multiphysics的集群计算设置界面中,可以直观地进行此平衡配置。

🧑‍🎓

据说并行计算的结果与逐次计算的结果在微妙之处有差异。这是bug吗?

🎓

不是bug,而是浮点数运算顺序不同引起的。在并行计算中,加法和内积运算的顺序在各内核上不同,因此舍入误差的累积与逐次计算有差异。这是本质性问题,会影响迭代法求解器的收敛历史和最终位移值的下位几位数字。然而,相对误差通常在机器epsilon

$$ \epsilon $$
的数倍以内,工程上可以忽略。若需结果可重复性,应固定求解器的随机数种子,或完全用逐次模式执行。

并行计算的软件比较

主要CAE软件的并行实现

🧑‍🎓

Ansys、Abaqus、COMSOL在并行计算的方法上有区别吗?

🎓

差异很大。Ansys Mechanical根据求解器(直接法/迭代法)有不同的并行策略。直接法求解器(稀疏)以共享内存型(OpenMP)为中心,通常推荐最多32核。迭代法求解器(PCG、ICCG)则对分布式内存型(MPI)有较强的支持,可扩展到数百核。Abaqus/Standard的特点是"域级并行",在初期阶段进行网格领域分割,然后将所有处理过程(单元矩阵生成、接触搜索、求解)都并行化。COMSOL同时支持"集群节点"和"共享内存"两种模式,特别在多物理耦合问题中,可对不同的物理场应用不同的领域分割,具有灵活性。

🧑‍🎓

据说接触问题的并行计算很困难。哪个软件在这方面处理最高效?

🎓

接触确实是并行化的难点,因为接触对搜索和约束条件应用需要在领域间频繁交换数据。在这一点上,Abaqus的并行接触算法评价很高,能够自动将接触面分割到多个领域,进行高效的并行搜索。相比之下,Ansys Mechanical在接触区域较窄且局域时并行效率较好,但接触面广泛时,接触搜索的并行开销较大。LS-DYNA等显式动力分析软件则将接触算法本身进行了并行化(并行接触检测),因此能在数千核上进行冲击分析。

🧑‍🎓

利用GPU的并行计算与基于CPU的并行有什么不同?支持的软件有哪些?

🎓

架构完全不同。GPU拥有数千个轻量级内核,擅长单指令多数据(SIMD)型并行处理。在CAE中,GPU适合对迭代法求解器中的矩阵向量乘积和显式法的单元计算等均质、大量的运算进行并行化。支持软件包括Abaqus/Explicit,在特定单元类型中报告了10倍以上的加速,以及Ansys Fluent从2023R1起开始对NVIDIA GPU提供原生支持。不过,GPU内存容量(目前最高80GB)成为问题规模的上限,超大规模模型仍以CPU集群更具优势。

并行计算的故障排除

并行计算的常见错误和解决方案

🧑‍🎓

开始进行并行计算后,出现"MPI进程超时"错误,任务失败。原因是什么?

🎓

主要有3个原因。第一是网络问题,集群节点间通信(InfiniBand交换机故障等)导致丢包。第二是资源不足,内存不足导致交换空间使用,进程响应变慢。第三是求解器发散,某个进程出现数值不稳定而停止,无法等待其他进程的通信。首先检查逐次计算是否可行和内存使用量。然后尝试通过环境变量(例如MPIEXEC_TIMEOUT)延长MPI超时时间。

🧑‍🎓

增加核数后,计算时间反而变长了。这是可能发生的吗?

🎓

可能发生。这是"并行开销"超过计算时间的典型例子。特别是在问题规模相对于核数过小时出现(例如,10万个单元的模型用128核)。各内核分配的单元数极少,通信和同步时间成为主导。解决方法是进行强缩放测试,找出使计算时间最小的"最优核数"。此外,对于Ansys,根据问题规模调整求解器类型(直接法或迭代法)也很有效,小规模模型通常直接法更快。

🧑‍🎓

并行计算得到的应力结果在领域边界处显示有不连续的"线"。这是网格分割不好的信号吗?

🎓

正是这样。这称为"领域分割边界伪影",表明子域间界面节点的结果没有完全一致。主要原因有两个。一是迭代法求解器的收敛判定(残差范数)过松,领域边界的微小不连续被容许;二是单元形状或材料在领域边界不连续分割,产生数值"割裂"。对策包括:加严求解器收敛条件(例如从1e-8改为1e-10),或更改网格分割算法(METIS或SCOTCH等),使分割时保持单元连续性。Abaqus可通过*PRINT, FIELD输出可视化领域号,确认分割状态。

本文的评价
感谢您的回答!
有帮助
希望更
详细
报告
错误
有帮助
0
希望更详细
0
报告错误
0
作者:NovaSolver Contributors
匿名工程师和AI代理 — 网站地图
查看作者信息