调试并行代码中的分段错误

问题描述

我已经为使用MPI的特定应用程序开发了分布式求解器。我需要通过运行针对不同问题大小和不同处理器数量的求解器来进行时间研究,以查看求解器在串行查询器上可以达到何种速度。

代码对于问题大小和处理器数量一个除外)的所有组合均正常工作。在这种组合中(32个处理器-数量最多,问题第二大),我遇到了段错误。请注意,如果我使用不同数量的处理器,则该代码解决此问题大小(并且也可用于具有其他问题大小的这些数量的处理器)。

通过编译C ++代码生成的名为m75的可执行文件按以下方式执行:

         mpirun -n 32 m75

这是输出错误文件

https://pastebin.com/pfN7b8CB

我不确定我的代码有什么问题,因为它适用于所有其他问题实例。我该如何调试?我正在使用Slurm Job Scheduler在群集上运行代码

编辑:

按照建议,我生成一个核心转储,并尝试使用gdb对其进行查看。我发现细分错误发生在这一行:

free(tempr2[temp]);

我这样做了

print tempr2[temp]
(double *) 0x31

这是什么意思?我该如何进行呢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)