(C)プログラムを再コンパイルした後、一部のノードは古いコンパイルを実行しており(デバッグ情報はまだ含まれています)、一部のノードは新しいコピーを実行しています。サーバーはGentooLinuxを実行しており、すべてのノードが同じストレージからファイルを取得します。ファイルシステムは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
しているノードで別の値を返します。