在 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)。
- 例如,分配 8 GB 给主节点:
- 计算
memory2:通常建议为剩余内存的 20% – 40%,且需满足(memory1 + NPROC * memory2) < 节点总物理内存。- 例如,分配 2 GB 给每个进程:
memory2 = 2 * 1024^3 / 8 = 268,435,456 words(或memory2=256m)。
- 例如,分配 2 GB 给每个进程:
3. 命令行示例
假设使用 16 个进程(np=16)运行双精度 MPP 求解器,设置 memory1=1024m,memory2=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 内存计算方法