在我重新编译我的 (C) 程序后,一些节点正在运行旧的编译(调试信息仍在其中),一些节点正在运行新的副本。服务器运行的是 Gentoo Linux,所有节点都从同一个存储中获取文件。我被告知文件系统是 NFS。我使用的 MPI 是 MPICH 版本 1.2.7。为什么有些节点不使用新编译的副本?
更多详细信息(以防您无法入睡):
我正在尝试创建我的第一个 MPI 程序(我也是 C 和 Linux 的新手)。我的代码中有以下内容:
#if DEBUG
{
int i=9;
pid_t PID;
char hostname[256];
gethostname(hostname, sizeof(hostname));
printf("PID %d on %s ready for attach.\n", PID=getpid(), hostname);
fflush(stdout);
while (i>0) {
printf("PID %d on %s will wait for `gdb` to attach for %d more iterations.\n", PID, hostname, i);
fflush(stdout);
sleep(5);
i--;
}
}
#endif
然后我重新编译(没有 -DDEBUG=1 选项,所以上面的代码被排除在外)
$ mpicc -Wall -I<directories...> -c myprogram.c
$ mpicc -o myprogram myprogram.o -Wall <some other options...>
程序编译没有问题。然后我像这样执行它:
$ mpirun -np 3 myprogram
有时(而且越来越频繁),可执行文件的不同副本在集群的不同节点上运行?在某些节点上,调试代码会执行(并打印),而在某些节点上则不会。
请注意,集群当前正在经历一些“时钟偏差”(或类似的东西),这可能是原因。那是问题吗?
另请注意,我实际上只是通过在 Makefile 中注释/取消注释行来更改编译选项,因为我还没有时间实施这些建议。
编辑:当问题发生时,在问题出现md5sum myprogram
的节点上返回不同的值。