0

経過時間 (壁時間) がユーザー + カーネル時間よりも短い状況について多くのスレッドが質問しているのを目にし、マルチスレッドがこの状況をどのように引き起こすかを理解しています。ただし、次の方法で MPI コードの実行のタイミングを計る場合:

$ time mpirun -n 4 ./a.out

経過時間は 4 ~ 5 分、ユーザー時間は約 40 秒、カーネル時間は約 40 秒です。プロセス間のバリア同期が原因の一部であるか、単一の MPI プロセスに関する情報を取得するのに時間がかかる可能性があると考えていますが、測定値の原因を正確に合理化することはまだできません。誰もそれを説明できますか?

どうもありがとう。

4

2 に答える 2

3

多くのプロセスでは、ウォール クロック時間が合計 CPU 時間を大幅に超えると予想しています。CPU バウンドのプロセスはほとんどないため、待機に多くの時間を費やします。幸いなことに、待機時間はプロセスに課金されなくなりました。待機の原因となるもの:

  • あらゆる種類の I/O (ディスク、ネットワーク、プロセス間パイプなど)。
  • プロセス間のリソース同期。
  • 他のプロセスに割り当てられたタイム スライス。
  • メモリ スワッピング (最近では一般的ではありません)。
  • 他の種類の割り込み。

負荷の高い統計ソフトウェアでさえ、I/O を実行する可能性が高く、CPU 使用率がウォール クロック時間よりも少なくなります。

極端な例として、ディスク上のあるパーティションから同じディスク上の別のパーティションに大きなファイルをコピーする場合があります。これには、CPU 時間がほとんどなくても、多くの Wall 時間がかかる場合があります。使用する能力がioniceあれば、ディスクが他の作業でまったくビジーである場合は、Wall 時間をさらに長くすることができます。

次のコマンドは、ユーザー時間とシステム時間の合計よりも大幅に高い実際の (ウォール クロック) 時間を表示する可能性があります。

time bash -c "read ans"
于 2011-08-03T01:11:39.363 に答える
1

ユーザー/カーネル時間は、プロセッサが使用されている場合にのみ増加します。コードの大部分がディスクやネットワーク IO などで待機している場合、実際の経過時間は CPU 時間よりもはるかに長くなります。

于 2011-08-03T01:06:33.290 に答える