Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在群集上调试MPI程序时出现问题_C_Debugging_Mpi - Fatal编程技术网

C 在群集上调试MPI程序时出现问题

C 在群集上调试MPI程序时出现问题,c,debugging,mpi,C,Debugging,Mpi,我有一个在计算机集群上运行的MPI程序。然而,该计划没有运行到完成,我无法确定原因。主要功能包括两个主要子句:if子句和else子句: #define SERVER 0 if(my_rank == SERVER) { //do something } else { //do something else } 问题似乎出在dootherse部分,我想用gdb调试它。当我用gdb运行可执行文件时,我只能单步执行if子句,因为MPI似乎会自动为启动程序的主进程分配一个0的秩。我研究了环

我有一个在计算机集群上运行的MPI程序。然而,该计划没有运行到完成,我无法确定原因。主要功能包括两个主要子句:if子句和else子句:

#define SERVER 0

if(my_rank == SERVER)
{
   //do something
}
else
{
   //do something else
}

问题似乎出在dootherse部分,我想用gdb调试它。当我用gdb运行可执行文件时,我只能单步执行if子句,因为MPI似乎会自动为启动程序的主进程分配一个0的秩。我研究了环境变量,但没有找到一个标志来预先确定主进程的级别。如何调试else子句?

如果将代码缩减到MWE,如果不查看仅发布的代码,就很难判断发生了什么,但通常当您挂起MPICH内的进度引擎时,这是因为您的匹配不正确。根据您在评论中的内容,我猜您并不是在所有级别上都调用MPI_INIT。确保您正在这样做,并且您的所有发送/接收呼叫都匹配,并且您的团队成员也一致。如果仍然不起作用,请将其减少到MWE并将其张贴在此处

您使用的是哪种MPI或MPI-2实现?此问题的答案可能对您有所帮助。我正在使用3.0.4版的堆栈溢出链接。。我发现这篇文章很有帮助:我使用这个homebrewn方法将调试器附加到MPI进程——在代码中的MPI_Init之后调用以下函数DebugWait。现在,当进程等待键盘输入时,您可以随时将调试器附加到它们并添加断点。完成后,请提供单个字符输入。静态void DebugWaitint rank{char a;ifrank==0{scanf%c,&a;}MPI_Bcast&a,1,MPI_字节,0,MPI_COMM_WORLD;}上述方法无法解决我的问题。所以我在mpinit之后调用了DebugWait函数。当程序挂起时,我将gdb连接到其中一个进程,并在其他进程的行号处设置断点。然后我提供了一个字符输入来开始运行程序。当我调用next时,gdb打印单步执行,直到退出函数MPID_nem_tcp_connpoll,该函数没有行号信息。MPIDI\U CH3I\U进度中的0x000000000042e32a