Parallel processing 如何禁用可能卡在MPI中的进程

Parallel processing 如何禁用可能卡在MPI中的进程,parallel-processing,fortran,openmpi,Parallel Processing,Fortran,Openmpi,我的程序只是一个对角化某个系统哈密顿量的过程。我正试图通过一个非常大的系统工作,这个系统计算量很大。事实上,如果我将系统大小增加一个单位,它将超过LAPACK可以对角化的最大大小。(注意:不随单位数线性缩放) 我目前正试图得到一个非常高分辨率的结果,这意味着我需要平均计算大约10000次。如果我要保持代码的串行性,则需要大约300个小时才能完成,因此我已经并行化了我的程序 我已经将其设置为在10个不同的核上运行1000次计算,并在最后合并它们。我很久以前就这么做了,所以我不认为这是问题所在 我的

我的程序只是一个对角化某个系统哈密顿量的过程。我正试图通过一个非常大的系统工作,这个系统计算量很大。事实上,如果我将系统大小增加一个单位,它将超过LAPACK可以对角化的最大大小。(注意:不随单位数线性缩放)

我目前正试图得到一个非常高分辨率的结果,这意味着我需要平均计算大约10000次。如果我要保持代码的串行性,则需要大约300个小时才能完成,因此我已经并行化了我的程序

我已经将其设置为在10个不同的核上运行1000次计算,并在最后合并它们。我很久以前就这么做了,所以我不认为这是问题所在

我的问题是,我的代码中似乎有一个bug导致程序“卡住”。不幸的是,这只发生在我的十个CPU中的一个上,每个CPU进行1000次计算。这可能是非常罕见的,每10000次就有1次(这是一个非常特殊的场景)

我知道它被卡住了,因为我的程序中有一个MPI_reduce调用。此外,我还输出以显示每个流程的进度(每完成10%)。我可以确定我的主进程在MPI_reduce之后无法继续,因为其他10个进程中的一个已经失败(但没有停止)。我可以很容易地确定哪个过程失败了

我没有时间查找和修复该错误,因此我正在查找以下内容:

  • 在我的主流程上进行实际计算是一种不好的做法吗?还是应该让我的主流程在最后进行沟通和计算

  • 如何从程序中取消进程(以便我的主进程可以继续通过MPI_reduce)

  • 问题2:我的主进程在等待其他进程到达mpi_reduce命令时无法读取任何其他行


    我使用OpenMPI和mpifort编译器在Fortran中编程。

    使用秩0进行计算没有错,除非您知道它引入了一个特殊的瓶颈

    如果一个列组被卡住,目前无法在MPI中恢复

    在容错方面有一些努力,但这主要是为了避免硬件错误


    无论您是否想要,您都必须真正修复代码。如果您有一个不理解的bug,那么您的所有结果都是毫无价值的(除非您有一个单独的方法来完全验证结果)。这个bug很少表现为挂起,这并不重要。将结果用于科学工作是不负责任的,除非你能提出有力的理由证明它不会影响结果。

    。不管怎样,谢谢你的帮助。关于bug tho,你是对的。如果它是一只虫子。当一个进程落后于另一个进程数小时时,这似乎是一个问题。@Canadianphysics216如果您在普通的并行调试器(例如DDT)中无法重现该问题,您可以尝试更好地了解发生了什么我不知道当错误出现在大约300次迭代中并且需要几个小时才能到达时,传统的调试器会有多大用处。AFAIK DDT可以连接到运行的MPI程序。我想我可以运行该程序直到第X行(如果发生MPI通信,并且每个进程都正常进行,那么就可以了)。问题是我正在远程使用集群,如果连接中断,这是个坏消息。