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

标签 c debugging mpi

我有一个在机器集群上运行的 MPI 程序。但是,程序没有运行完成,我无法确定原因。 main 函数由两个主要子句(一个 if 子句和一个 else 子句)组成:

#define SERVER 0

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

问题似乎出在“做其他事情”部分,我想用 gdb 调试它。当我使用 gdb 运行可执行文件时,我只能进入 if 子句,因为 MPI 似乎自动将 0 级分配给主进程(启动程序的进程)。我查看了环境变量,但没有找到可以预先确定主进程等级的标志。如何调试 else 子句?

最佳答案

如果不看代码就很难知道发生了什么(如果你把代码缩减到 MWE,只能发布代码),但通常当你在 MPICH 内的进度引擎中挂起时,这是因为你的匹配不正确。根据您在评论中提出的内容,我的猜测是您并没有在所有级别上调用 MPI_INIT。确保你这样做并且你所有的发送/接收调用匹配(和你的集体)。如果这仍然不起作用,请将其缩减到 MWE 并在此处发布。

关于c - 在集群上调试 MPI 程序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757649/

相关文章:

看不懂C程序的输出

c - 使用 printf 而不必转义双引号?

c - Openocd:将值写入闪存地址

swift - 调试窗口不显示打印语句

google-chrome - 如何在 Chrome 中调试 HTTP POST?

c - 如何在MPI中传递二维数组并使用C语言创建动态标签值?

Cygwin 图形?

delphi - 自动插入断点?

c++ - 使用 mpi 进行 sobel 边缘检测

python - 如何强制 mpi4py 安装在集群上使用 gnu MPI 而不是 intel MPI