为什么不同的节点运行不同的可执行文件编译? (MPI)

时间:2012-08-28 21:09:26

标签: c linux mpi gentoo

重新编译我的(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中注释/取消注释行来更改编译选项,因为我还没有时间实现these suggestions

修改:出现问题时,md5sum myprogram会在问题出现的节点上返回不同的值。

1 个答案:

答案 0 :(得分:2)

您的不同节点保留了文件的副本,并在运行二进制文件时使用该文件而不是最新版本。这与Gentoo几乎没有任何关系,因为它是Linux(内核)缓存和/或NFS实现的工件。

换句话说,您的二进制文件已缓存。阅读这个答案:

NFS cache-cleaning command?

Tweaking some settings也可以提供帮助。


我碰巧在这里有一个同步和刷新的命令:

$ cat /home/jaroslav/bin/flush_cache 
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'