gpt4 book ai didi

c - 为什么不同的节点运行我的可执行文件的不同编译? (初级产业部)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:14 25 4
gpt4 key购买 nike

在我重新编译我的 (C) 程序后,一些节点正在运行旧的编译(调试信息仍在其中),而一些节点正在运行新的副本。服务器运行 Gentoo Linux,所有节点都从同一存储中获取文件。我被告知文件系统是 NFS。我使用的 MPI 是 MPICH 版本 1.2.7。 为什么有些节点没有使用新编译的副本?

更多详细信息(如果您有 sleep 问题):

我正在尝试创建我的第一个 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 在出现问题的节点上返回不同的值。

最佳答案

您的不同节点保留了一个文件的副本,并在您运行二进制文件时使用该副本而不是最新的。这与 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'

关于c - 为什么不同的节点运行我的可执行文件的不同编译? (初级产业部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com