我有一个在一组机器上运行的MPI程序 . 但是,程序没有完成,我无法确定原因 . main函数由两个主要子句组成(if子句和else子句):
#define SERVER 0
if(my_rank == SERVER)
{
//do something
}
else
{
//do something else
}
问题似乎是在“做其他事情”部分,我想用gdb调试它 . 当我使用gdb运行可执行文件时,我只能进入if子句,因为似乎MPI会自动为主进程(启动程序的进程)分配0级别 . 我查看了环境变量,但是我没有找到预先确定主进程等级的标志 . 我该如何调试else子句?
1 回答
如果没有看到代码就很难分辨出来是什么(如果你把它缩减到MWE,只会发布代码),但通常当你在MPICH内部的进程引擎中挂起时,这是因为你的匹配是不正确的 . 根据你在评论中提出的内容,我的猜测是你没有在所有级别上调用MPI_INIT . 确保您这样做并且所有发送/接收呼叫都匹配(和您的集体) . 如果仍然无效,请将其切换到MWE并在此处发布 .