- ベストアンサー
並列計算をしたときのシステム時間について
UNIX系OSで並列計算を行いtimeコマンドでシステムtimeを求めたところreal timeよりも長くなってしまいました。 単体プロセスの場合はreal time=user time +system time の関係が成り立っていましたが、並列プロセスではこれらの間にどのような関係があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
AIXなら私の得意分野です(笑)。現役のAIX基盤技術者ですので。 さてSystem Timeが大きくなる原因ですが、 さきのスレッド分割による負荷以外にも、 I/O Waitが考えられます。 たとえばその計算プログラムは、スクラッチ(一時ファイル)を大量に読み書きしませんか? また利用メモリについてはいかがでしょうか? もしメモリを大量に使い、ページスチールが発生するような状況にあるのであれば、当然ページングへの読み書きが発生しますので、結果的にSystem Timeが増えてしまいます。 これらの問題については、実行中にvmstatの出力を見れば確認できます。 8wayの環境で並列度をどのくらいにしているのかわかりませんが、 特にSMP並列プログラムの場合、あまり並列度を上げても遅くなることが多いですし、またプログラムによっては計算結果が異なってしまうことがありますので注意が必要です。(ベンダーアプリであれば問題ないと思いますが) 並列度と実実行時間の関係については、確かアムダールの法則というのがありまして、 たとえば並列度を二倍にしても、実実行時間は半分以下になることはありません。 なおAIXのtimeコマンドは当該プログラムが利用した時間を計測していますので、1CPU毎の値ではなく合計値です。 追加の質問などありましたら、どうぞ
その他の回答 (2)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
「1CPUごとのuser time/sys time」を各CPUごとに積算した値が表示されているのではないでしょうか。 realが約125mなので、お使いのハードウェアの構成が2CPUだとすれば、CPUタイムは延べ250mあった計算になります。user+sysが約240mですから、差分の10mは当該プロセス以外のシステムプロセスが消費したと考えれば、ほぼ計算が合います。
- moco0220
- ベストアンサー率38% (22/57)
質問者さんの環境が分かりませんが、 以前、HPCのSEをしていた者です。 並列プログラムでは一般的に並列度を上げることにより、 実実行時間が短くなってもそれ以外の部分でオーバーヘッドとされる部分が増えるのは仕方がありません。 これはSMP並列(OepnMP)でもMPP並列(MPI)、どちらのプログラムでもいえることです。 質問者さんの気にされているsystem timeが大きいことについては、 並列実行に伴うオーバーヘッドがsystem timeとして現れているのではないでしょうか。 (userも実実行時間より大きくはないですか?) お話からすればSMP並列のような気がしますが、 この場合はスレッド分割により並列化させていますので、その分kernel(system)に負荷がかかるのは当然です。 並列プログラムは実実行時間を減らすのが目的ですので、 単体プロセスのように「real time=user time +system time」の関係は成り立ちません。 CPU時間からいけば、ある意味では無駄な時間を使ってしまうことで、実実行時間(プログラム応答時間)を短くしていることになります。
補足
早速の回答ありがとうございます。 自分の使っている環境はAIX上で8CPU使いSMP並列計算を行っています。 system timeが大きくなるのは納得できましたが、実実行時間より大きくなることがよく分かりません。 例えば real 124m59.600s user 105m41.160s sys 134m22.370s となった時は計算中にsystemが134m22.370sの間CPUを使用したので、計算の初めから終わりまでずっとsystemに負荷がかかっていたとしても計算が終了してからも10分間処理していたことになってしまいます。
お礼
回答ありがとうございます。 とても参考になりました。