私のプログラムは、コードに並列化が書かれていないため、プログラムが実際に実行されていた時間よりも長い CPU 実行時間を示しています。
コードはほとんどが Fortran 90 で書かれており (1 つまたは 2 つの後で追加した Fortran のものがあります)、私の Linux マシンのネイティブgfortran
コンパイラでコンパイルされています (--version
情報: GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17) )。gfortran
90 以降の標準にコンパイルされることを理解しています。
プログラムが開始すると を呼び出しcall cpu_time(time_start)
、終了する前に を呼び出しますcall cpu_time(time_end)
。この場合、time_end - time_start
経過した CPU 時間を秒単位で示します。
興味深いことに、私は HTCondor を使用してコードを送信し、ローカル ネットワーク内の使用可能な CPU がある任意のマシンで実行しました。私の HTCondor ログ ファイルは、ジョブが 07/24 14:17:46 に送信され、15 秒後に実行が開始され、同じマシンで完了まで実行され、07/30 11:01:52 に終了したことを示しています。日。ただし、CPU 時間は 993535 秒、つまり 11 日以上だっtime_end - time_start
たと言われています。私のコードはまったく並列化されていないため、これがどのように行われるのかわかりません。 どうすればいいの?
私はこのコードを何百回も実行してきましたが、この現象に気づいたことはありませんでしたが、詳しくチェックしたこともありません。
編集:少なくとも明示的には、コードが並列化されていないことにもう一度注意してください。私は-O3
フラグを付けてコンパイルしましたが、これが並列化を導入するとは思いません。並列 Fortran に関するリンクされた質問/回答がシリアルプロセスに関する私の質問に実際に答えている場合は、接続が表示されないため、その方法を理解するのを手伝ってください。
私の HTCondor 送信スクリプトは次のとおりです。私はcondor_submit
このスクリプトで、それがコードを実行する方法です。
executable = /path/to/executable
universe = standard
log = condorlog.log
output = condorstdout.out
error = condorerror.out
should_transfer_files = IF_NEEDED
when_to_transfer_output = ON_EXIT
queue