MPI Fortran内存节点混淆了吗?

时间:2013-12-18 10:56:28

标签: memory-leaks fortran mpi intel-fortran

我目前正在并行化(使用MPICH)现有的旧FORTRAN程序(其仅执行图像的一个像素的一些数据反转 - >需要并行化)。我的策略是编写一个执行所有I / O的新主程序,将信息(一个像素)传递给每个节点,并调用现有程序(我转换为子程序)。节点彼此独立地进行计算,并将结果传递回主程序。

在我的集群上运行后,我发现了一些奇怪的问题:在某些节点上计算效果不佳,因为在某些时候NaN值出现在某些变量上(当我使用顺序版本时不会出现这种情况)。在第一个像素(或多或少随机,但依赖于计算机,我正在运行它并依赖于编译器选项)发生这种情况后,这种行为会定期重复我正在使用的节点数量(因为它也发生在另一台计算机上它不是由CPU损坏引起的。)

我正在使用MPICH 3.0.4,ifort 11.1和12.05(我试用了两个版本)

-heap_arrays -O2 -save -w -fp-model precise -fp-model source -mcmodel=medium -extend_source -shared-intel

我的一般问题:是否有可能某些节点的内存混合了s.th. NaN出现在内存中的奇怪位置(虽然这不能解释周期性行为)?或者还有什么可能导致内存泄漏(我可以排除数字)?我的根节点确实分配了大量的数组(总共大约2GB),但是在集群上我每个节点有128GB RAM可用,并且从节点使用的内存要少得多!

下一个问题:我无法正确调试程序:使用idb我只发现由于复杂的数字和旧例程中的大量循环而突然发生NaNs。 我不能使用valgrind,因为this bug导致无法使用大型可执行文件(我的约为5MB)。 英特尔灵感只是告诉我,我有一个内存泄漏(在子程序的定义行中)。

有什么建议吗? 干杯,斯特凡

1 个答案:

答案 0 :(得分:1)

感谢您的帮助。 使用-fpe = 0跟踪NaN导致我朝正确的方向,问题与浮点精度有关: 我总是使用-fp-model precise -fp-model source,相信这会给我最高的精确度。事实证明,使用-fltconsistency代替我解决了所有问题!

不再有错误。