3. LS-DYNA并行版本与授权机制
在大型模型并行求解工程中,选错求解器版本往往比算错参数更致命。LS-DYNA 提供 SMP、MPP 以及 Hybrid MPI+OpenMP 三种并行执行形态,它们并非简单的“核数多少”差异,而是内存模型、通信机制、可扩展上限和授权计费方式都不同。理解这三者的边界,是后续所有并行调优的前提。
一、三种并行版本的本质差异
SMP(Shared Memory Parallel)基于共享内存并行,所有线程访问同一份模型数据,通过 OpenMP 线程并行化计算热点。它的优势是内存占用低——模型只存一份,不需要域分解,因此对中小模型、单机多核场景非常友好。但共享内存的带宽是瓶颈,核数超过 16~32 后加速比迅速衰减,且无法跨节点扩展。
MPP(Massively Parallel Processing)基于分布式内存,通过 MPI 将模型按空间域分解为多个子域,每个进程持有自己的网格与状态数据,进程间通过消息传递交换界面力、接触信息和边界数据。MPP 可以跨节点扩展到数千核,是整车碰撞、整机爆炸等超大模型的主流选择。代价是:域分解本身有开销,子域界面越多通信越重,且每个进程都要独立内存,总内存需求高于 SMP。
Hybrid MPI+OpenMP是两者的折中:节点间用 MPI 通信,节点内用 OpenMP 线程共享内存。它减少了 MPI 进程总数,从而降低通信开销和内存冗余,同时保留跨节点能力。在 NUMA 架构的多路服务器上,Hybrid 往往比纯 MPP 有更好的内存局部性。
二、LS-DYNA R系列版本特性
LS-DYNA 的 R 系列版本(如 R7、R8、R9、R10、R11、R12、R13)是 ANSYS 收购 LSTC 后持续迭代的产物。每个 R 版本在求解器内核、材料模型、接触算法和并行效率上都有增量改进。工程上需要关注几个关键节点:R7 系列对 MPP 的接触搜索做了重构,R8 引入了更稳定的 SPH 和 EFG 算法,R9 之后对 Hybrid 的支持趋于成熟,R11/R12 在 GPU 加速和自适应网格方面有显著增强。
版本选择不是越新越好。新版本可能引入默认参数变化,导致旧模型结果漂移;同时某些第三方材料子程序或二次开发接口只兼容特定 R 版本。建议在项目启动时锁定一个经过验证的 R 版本,并在 *CONTROL_TERMINATION 和 *CONTROL_ENERGY 中显式设置关键控制参数,避免依赖版本默认值。
三、License 队列与并行核数授权管理
LS-DYNA 的 license 机制是并行工程中最容易踩坑的环节。核心概念是 license 队列(queue)和 核数授权(core count)。不同版本的计费口径不同:
- SMP 版本:通常按物理核数计费,一个 SMP license 覆盖单机上的所有线程。例如 32 核 SMP 任务占用 1 个 SMP license,但该 license 可能限定最大核数。
- MPP 版本:按 MPI 进程数(rank 数)计费。运行
mpirun -np 128就需要 128 个 MPP license 单元,跨节点时每个节点都要能获取到 license。 - Hybrid 版本:按 MPI 进程数计费,OpenMP 线程不额外计费。例如
-np 16配合每进程 8 线程,总算力 128 核,但只消耗 16 个 license 单元。
License 服务器通常使用 LSTC 的 lstc_server 或 ANSYS 的 ansyslmd。管理要点包括:设置 LSTC_LICENSE 环境变量指向 license 服务器;用 lstc_qrun 查询队列状态和可用核数;在提交脚本中通过 -np 和 -nt 显式控制进程与线程数,避免求解器自动占满所有核导致 license 耗尽。
lstc_qrun -s 查看当前 license 占用。若剩余核数不足,任务会排队或直接失败。Hybrid 模式下,建议 -np 设为节点数 × 每节点 MPI 进程数,-nt 设为每进程线程数,使 -np × -nt 不超过物理核数,避免超线程争抢。
四、实操配置示例
以下是一个典型的 Hybrid 提交脚本片段,用于 2 节点、每节点 32 物理核的集群,目标使用 64 个 MPI 进程、每进程 1 线程(即纯 MPP 模式),或 16 进程 × 4 线程(Hybrid 模式):
# 纯 MPP 模式:64 进程,每进程 1 线程
export LSTC_LICENSE=ansys
mpirun -np 64 -hostfile hosts.txt \
ls-dyna_mpp_d R=13.0 ncpu=1 \
i=model.k memory=2000m
# Hybrid 模式:16 进程,每进程 4 线程
export OMP_NUM_THREADS=4
mpirun -np 16 -hostfile hosts.txt \
ls-dyna_mpp_d R=13.0 ncpu=4 \
i=model.k memory=2000m
注意 ncpu 参数在 MPP 求解器中表示每个 MPI 进程使用的 OpenMP 线程数。当 ncpu=1 时退化为纯 MPP;当 ncpu>1 时启用 Hybrid。内存参数 memory 是每个进程的内存上限,MPP 模式下总内存为 memory × np,需要确保不超过节点物理内存。
memory 设置过小,求解器会在域分解后因单个子域内存不足而报错退出;设置过大则可能因总内存超限被系统 OOM Killer 终止。建议先用小模型试算,观察 d3hsp 文件中的内存统计,再按比例放大。
五、版本与授权协同决策
实际工程中,版本选择和授权策略需要协同考虑。如果集群 license 池有限,Hybrid 模式可以用更少的 license 单元换取同等算力,是性价比最高的方案。但 Hybrid 的并行效率并非线性——线程数过多时,OpenMP 的同步开销和内存带宽争抢会抵消收益。经验上,每 MPI 进程配 2~4 个 OpenMP 线程是较优区间,超过 8 线程后加速比明显下降。
另一个容易被忽视的点是 R 版本与 MPI 库的兼容性。LS-DYNA MPP 通常自带 Intel MPI 或 MS-MPI 运行时,但集群上可能已安装 OpenMPI 或 MPICH。混用会导致 mpirun 启动失败或通信异常。建议在提交脚本中显式指定 LS-DYNA 自带的 MPI 启动器路径,或通过 LD_LIBRARY_PATH 优先加载匹配的 MPI 库。
最后,license 队列的公平性和优先级策略也值得配置。在多用户共享集群上,可以通过 lstc_qrun 的队列管理功能设置不同项目的优先级,避免大任务长期占用全部 license 导致小任务饥饿。对于关键项目,可以预留专用 license 池,通过环境变量 LSTC_LICENSE_QUEUE 指定队列名称,实现资源隔离。