关于Segmentation fault报错:MPI问题还是内存限制所致?
问题分析:Segmentation Fault是MPI还是内存限制导致?
问题描述
请问该Segmentation fault错误是由MPI还是内存限制导致的?我已尝试调整不同核心数量、更换不同目录,但由于软件要求使用最新版MPI,无法更改MPI版本。
报错信息
[node111:1798902:0:1798902] 捕获到信号11(段错误:地址0x35未映射到对象) ==== 回溯信息(线程ID:1798902) ==== 0 /lib/libucs.so.0(ucs_handle_error+0x324) [0x14da10316874] 1 /lib/libucs.so.0(+0x24a9f) [0x14da10316a9f] 2 /lib/libucs.so.0(+0x24dd4) [0x14da10316dd4] 3 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x(__intel_avx_rep_memcpy+0x400) [0x792ad10] 4 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x(for__format_value+0x138) [0x78d2928] 5 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x(for_write_seq_fmt_xmit+0x164c) [0x788f54c] 6 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x(for_write_seq_fmt+0x1471) [0x788d841] 7 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x1f45850] 8 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x16f0df9] 9 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x160d8dd] 10 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0xcf27a5] 11 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x787e50] 12 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x550623] 13 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x4ed3ac] 14 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x644bf6] 15 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x43224d] 16 /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0x14da136460b3] 17 /home/software/espresso/qe-7.2-intel23-intelmpi/bin/qe2pert.x() [0x43216e] ================================= forrtl: 严重错误(174): 发生SIGSEGV段错误 镜像文件 程序计数器(PC) 函数名 行号 源文件 libpthread-2.31.s 000014DA1CF523C0 未知函数 未知行号 未知源文件 qe2pert.x 000000000792AD10 __intel_avx_rep_memcpy 未知行号 未知源文件 qe2pert.x 00000000078D2928 for__format_value 未知行号 未知源文件 qe2pert.x 000000000788F54C for_write_seq_fmt_xmit 未知行号 未知源文件 qe2pert.x 000000000788D841 for_write_seq_fmt 未知行号 未知源文件 qe2pert.x 0000000001F45850 未知函数 未知行号 未知源文件 qe2pert.x 00000000016F0DF9 未知函数 未知行号 未知源文件 qe2pert.x 000000000160D8DD 未知函数 未知行号 未知源文件 qe2pert.x 0000000000CF27A5 未知函数 未知行号 未知源文件 qe2pert.x 0000000000787E50 未知函数 未知行号 未知源文件 qe2pert.x 0000000000550623 未知函数 未知行号 未知源文件 qe2pert.x 00000000004ED3AC 未知函数 未知行号 未知源文件 qe2pert.x 0000000000644BF6 未知函数 未知行号 未知源文件 qe2pert.x 000000000043224D 未知函数 未知行号 未知源文件 libc-2.31.so 000014DA136460B3 __libc_start_main 未知行号 未知源文件 qe2pert.x 000000000043216E 未知函数 未知行号 未知源文件 /var/spool/torque/mom_priv/jobs/254237.masterbeta.SC: 第50行: /home/wslu: 是一个目录
错误原因判断
这个段错误既不是MPI本身导致,也不是直接的内存限制问题,根源在于程序执行Fortran格式化输出时的内存访问异常,结合报错信息细节:
- 回溯栈显示错误起始于
for__format_value、for_write_seq_fmt这类Fortran标准库的格式化输出函数,随后触发__intel_avx_rep_memcpy的内存拷贝错误,说明程序在处理输出格式化时访问了无效内存地址(0x35是极小地址,通常对应未初始化指针或数组越界)。 - 末尾提示作业脚本第50行存在错误:误将
/home/wslu目录当作可执行文件调用,这会干扰程序执行流程,间接引发后续内存访问错误。
排查建议
- 优先检查作业脚本第50行的命令,修正将目录当作可执行文件调用的错误。
- 若脚本无误,排查程序输入文件的参数配置,比如输出文件名是否设置错误、格式化输出的变量是否未初始化。
- 可编译带调试信息的程序版本,或使用内存调试工具(如
valgrind)定位具体的内存访问问题。
内容的提问来源于stack exchange,提问作者MathJacky
相关产品推荐
相关产品推荐

