LS-DYNA MPP(分布式并行)模式中的内存分配机制

在 LS-DYNA MPP(分布式并行)模式中,内存分配机制与 SMP(共享内存)有本质区别。 SMP(共享内存)​ 模式中MEMORY参数代表所有 CPU 共享的总内存池。

MPP 模式需要设置两个参数:memory(即 memory1)和 memory2

1. 参数定义

  • memory/ memory1:主节点(Rank 0)用于模型分解(Domain Decomposition)全局数据管理的内存。该值必须足够大,以容纳整个模型的全局信息。
  • memory2每个计算进程(包括主节点)用于求解分解后子域的内存。该值取决于子域的大小。

2. 计算公式与单位

单位换算规则与 SMP 一致(64位双精度:1 Word = 8 Bytes)。假设你要为 MPP 计算分配物理内存:

  • 计算 memory1:通常建议为物理内存的 30% – 70%,且必须大于模型全局内存需求。
    • 例如,分配 8 GB 给主节点:memory1 = 8 * 1024^3 / 8 = 1,073,741,824 words(或简写为 memory=1024m)。
  • 计算 memory2:通常建议为剩余内存的 20% – 40%,且需满足 (memory1 + NPROC * memory2) < 节点总物理内存
    • 例如,分配 2 GB 给每个进程:memory2 = 2 * 1024^3 / 8 = 268,435,456 words(或 memory2=256m)。

3. 命令行示例

假设使用 16 个进程(np=16)运行双精度 MPP 求解器,设置 memory1=1024mmemory2=256m

# 使用 mpirun (Intel MPI/Open MPI /Platform MPI)
mpirun -np 16 ls-dyna_mpp_d i=input.k memory=1024m memory2=256m

# 或使用 mpiexec
mpiexec -n 16 ls-dyna_mpp_d i=input.k memory=1024m memory2=256m

4. 关键注意事项

  • memory2只能在命令行设置:不能在 K 文件的 *KEYWORD行中设置 memory2
  • 主节点内存压力:主节点除了运行子域计算(占用 memory2),还需承担通信协调任务,因此实际内存占用约为 memory1 + memory2
  • 经验法则:对于超大规模模型,memory1应设置得非常大(如 50% 总内存),以确保分解成功;对于中小模型,memory2可以设置较小,但需避免因过小导致子域计算溢出。


    更多可以参考 LSDYNA 内存计算方法

发表评论