Performance 只有链接到mpip或ipm时,mpi程序才会产生错误的结果

Performance 只有链接到mpip或ipm时,mpi程序才会产生错误的结果,performance,parallel-processing,profiling,mpi,Performance,Parallel Processing,Profiling,Mpi,我正在尝试使用mpip和ipm来评测MPI程序 该程序运行良好,但当我将其与ipm或mpip链接以对其进行评测时,当我执行该程序时,会得到错误的结果。 我试过编译这个程序,有优化也有优化,但结果是一样的 我以前使用过ipm,没有问题。唯一的两个区别是,以前我使用C,现在我使用Fortran 77,以前我只有一个源文件,所以我编译+链接如下: mpicc my_mpi_code.c -o my_mpi_code -L/path/to/ipm/lib -lipm mpif77 -c -O2 -L/

我正在尝试使用mpip和ipm来评测MPI程序

该程序运行良好,但当我将其与ipm或mpip链接以对其进行评测时,当我执行该程序时,会得到错误的结果。 我试过编译这个程序,有优化也有优化,但结果是一样的

我以前使用过ipm,没有问题。唯一的两个区别是,以前我使用C,现在我使用Fortran 77,以前我只有一个源文件,所以我编译+链接如下:

mpicc my_mpi_code.c -o my_mpi_code -L/path/to/ipm/lib -lipm
mpif77 -c -O2 -L/path/to/ipm/lib -lipm file.f
现在,由于我有数百个源文件,我首先编译(例如使用mpif77-c-O2 file.f),然后才链接所有内容:

mpif77 -o mpi_prog.x mpi_prog.o libWithAllOFiles.a -L/path/to/ipm/lib -lipm
我也尝试过这样做:

mpicc my_mpi_code.c -o my_mpi_code -L/path/to/ipm/lib -lipm
mpif77 -c -O2 -L/path/to/ipm/lib -lipm file.f
但结果是一样的

知道为什么会这样吗?mpip/ipm对程序执行有什么影响


提前谢谢

哪一个结果是错误的-分析输出还是计算结果?mpiP和IPM都使用PMPI接口,不会以任何方式更改代码,但通常会更改MPI调用的时间,这可能会暴露算法中的竞争条件。错误结果的性质是什么?您确信不使用mpip/ipm的版本会产生正确的结果吗?也许与mpip/ipm链接会将一组错误结果更改为另一组。请提供更多的诊断数据。错误的结果是计算得出的结果。在没有IPM/MPIP的情况下,计算结果与程序顺序版本产生的结果相同,这是正确的。在MPI版本中,我所做的就是让所有进程执行完全相同的程序,除了一个双循环,它的迭代在进程之间分割,在这个双循环的最后,我对值被修改的变量执行Allreduce。@dx\u mrt:为了诊断的目的,您还没有告诉我们任何有用的信息,关于你得到的错误结果。你一直在告诉我们他们错了,但是他们错误的确切性质在试图诊断潜在问题时非常重要。在1 MPI进程上运行程序的结果与运行程序顺序版本的结果相比如何?关于在多个MPI进程上运行程序的结果?@HighPerformanceMark,抱歉,感谢您的耐心等待。好的,我想出了如何使程序在使用MPIP/IPM时产生正确的结果:我在做Allreduce并使用MPI_IN_PLACE标志;如果我不使用该标志,我会得到正确的结果(无论是否使用MPIP/IPM),如果我使用该标志,我在使用MPIP/IPM时会得到错误的结果,而在不使用MPIP/IPM时会得到正确的结果。知道为什么吗?