• ベストアンサー

並列計算をしたときのシステム時間について

UNIX系OSで並列計算を行いtimeコマンドでシステムtimeを求めたところreal timeよりも長くなってしまいました。 単体プロセスの場合はreal time=user time +system time の関係が成り立っていましたが、並列プロセスではこれらの間にどのような関係があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • moco0220
  • ベストアンサー率38% (22/57)
回答No.3

AIXなら私の得意分野です(笑)。現役のAIX基盤技術者ですので。 さてSystem Timeが大きくなる原因ですが、 さきのスレッド分割による負荷以外にも、 I/O Waitが考えられます。 たとえばその計算プログラムは、スクラッチ(一時ファイル)を大量に読み書きしませんか? また利用メモリについてはいかがでしょうか? もしメモリを大量に使い、ページスチールが発生するような状況にあるのであれば、当然ページングへの読み書きが発生しますので、結果的にSystem Timeが増えてしまいます。 これらの問題については、実行中にvmstatの出力を見れば確認できます。 8wayの環境で並列度をどのくらいにしているのかわかりませんが、 特にSMP並列プログラムの場合、あまり並列度を上げても遅くなることが多いですし、またプログラムによっては計算結果が異なってしまうことがありますので注意が必要です。(ベンダーアプリであれば問題ないと思いますが) 並列度と実実行時間の関係については、確かアムダールの法則というのがありまして、 たとえば並列度を二倍にしても、実実行時間は半分以下になることはありません。 なおAIXのtimeコマンドは当該プログラムが利用した時間を計測していますので、1CPU毎の値ではなく合計値です。 追加の質問などありましたら、どうぞ

so_that_too
質問者

お礼

回答ありがとうございます。 とても参考になりました。

その他の回答 (2)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

「1CPUごとのuser time/sys time」を各CPUごとに積算した値が表示されているのではないでしょうか。 realが約125mなので、お使いのハードウェアの構成が2CPUだとすれば、CPUタイムは延べ250mあった計算になります。user+sysが約240mですから、差分の10mは当該プロセス以外のシステムプロセスが消費したと考えれば、ほぼ計算が合います。

  • moco0220
  • ベストアンサー率38% (22/57)
回答No.1

質問者さんの環境が分かりませんが、 以前、HPCのSEをしていた者です。 並列プログラムでは一般的に並列度を上げることにより、 実実行時間が短くなってもそれ以外の部分でオーバーヘッドとされる部分が増えるのは仕方がありません。 これはSMP並列(OepnMP)でもMPP並列(MPI)、どちらのプログラムでもいえることです。 質問者さんの気にされているsystem timeが大きいことについては、 並列実行に伴うオーバーヘッドがsystem timeとして現れているのではないでしょうか。 (userも実実行時間より大きくはないですか?) お話からすればSMP並列のような気がしますが、 この場合はスレッド分割により並列化させていますので、その分kernel(system)に負荷がかかるのは当然です。 並列プログラムは実実行時間を減らすのが目的ですので、 単体プロセスのように「real time=user time +system time」の関係は成り立ちません。 CPU時間からいけば、ある意味では無駄な時間を使ってしまうことで、実実行時間(プログラム応答時間)を短くしていることになります。

so_that_too
質問者

補足

早速の回答ありがとうございます。 自分の使っている環境はAIX上で8CPU使いSMP並列計算を行っています。 system timeが大きくなるのは納得できましたが、実実行時間より大きくなることがよく分かりません。 例えば real 124m59.600s user 105m41.160s sys 134m22.370s となった時は計算中にsystemが134m22.370sの間CPUを使用したので、計算の初めから終わりまでずっとsystemに負荷がかかっていたとしても計算が終了してからも10分間処理していたことになってしまいます。

関連するQ&A

  • unixのシステム管理

    高専3年の者です。 授業のオペレーティングシステムでわからないことがあるので質問させてください。 というか、教官の書いたノートの意味がわからないんです。 そのまま写したのですが意味が分からなくて・・ 夏休みで質問もできないのでお願いします。 <ノートの内容> ●UNIXはシステム管理がしやすい 1.プロセスIDがシステムでユニークになっている ・プロセスIDが分かると利用者が誰なのか分かってしまう!  ↓  PS(プロセス状態の表示)→killコマンドの使用制限 2.ファイル名がファイルシステムでユニークになっている ・ルートディレクトリ→ファイルのアクセス権の制限 ・システム管理者と一般利用者の権限上の差  ファイルのアクセス権(許可モード)の設定内容が違うだけ。  chmodのコマンドを使えば設定内容を変更できる。 以上です。UNIXもまだ授業でやっていないので、訳がわかりません。 調べてはみたのですが難しくて・・ このノートの内容を分かりやすく説明していただけると嬉しいです。

  • 並列処理についてですが、

    並列処理についてですが、 SCOREという並列環境を構築するソフトで、4つのPC(CPU:Quad Core)を、並列化させ、 ある逐次プログラム(C言語、ラプラス方程式を差分法で解くプログラムですがプログラム内容はあまり関係ないので、あるプログラムとさせていただきます)を並列処理させたところ、 1つのPCで、4つのプロセッサを使用し、合計4ノードで並列処理を行った場合と、・・・(1) 4つのPCで各PC1台につき1つのプロセッサずつ、合計4ノードで並列処理を行った場合では、・・・(2) 同じ4ノードであるにかかわらず、 (2)がノード数に比例的に演算性能が良くなることに対して、 (1)の場合、ノード数が増えても関数log(x)(雰囲気です)をグラフにしたような形で、演算性能がうまく良くなりません このような質問を以前したところ、 ・スレッド切り替えのオーバーヘッドが影響しているのではないか ・実行環境が違うことと、ひとつのプロセスですべてのコアを占有する thread はコアを2個使えば2倍、3個使えば3倍それぞれ速くはならない。一方、PCを組み合わせて使う場合、それは完全に独立しており、データ並列のために分割されて計算量が縮小された分、PC組み合わせ数にほぼ比例して速くなる。 という回答をいただくことができました。 なんとなくで意味は分かるのですが、何卒PC初心者なもので、あまり理解することができません。 ここからが質問です。 ・「スレッド切り替え」とは一体どういったものなんでしょうか ・いただいた回答で、「ひとつのプロセスですべてのコアを占有するスレッド」とはどういうことでしょうか このことについて教えていただきたいです。スレッドとは、など部分部分での単語は調べてみましたが、 どういったように動いているのかが分かっていないせいか、上記質問のようなことが分かりません。 回答をせっかくいただいたのに自分の語彙力のせいで度重なる質問をさせていただくことを申し訳なく思いますが、みなさん回答の方よろしくおねがいします。

  • UNIXの時間はどう変更すればよいのですか?

    UNIXの基本的なご質問です。 UNIXマシンのシステム時間を変更する場合、どのようなコマンドを投入すればよいのでしょうか。 ご返答宜しくお願いします。

  • プロセスを起動順に並び換える方法

    OSはUNIXです。 psコマンドで実行中のプロセスを 表示したんですが。 そのプロセスを実行順に並び換えるコマンドがわかりません。 何かおかしな事書いてあるようでしたら、 ご指摘ください。

  • システムユーザとは?

    システムユーザとは? Ubuntu 10.04を使っています。 adduserコマンドに--systemオプションを指定すると、システムユーザを作成するとのことなのですが、システムユーザとは何でしょうか? 一般ユーザとの違い、どのような場合に利用するのかについて教えてください。 よろしくお願いします。

  • cgiでメールを発信する時のユーザ

    UNIX(SUN,Solaris2.4)の環境下でcgiよりsendmailコマンドでメール を送信するようなプログラムを作成しています。 メール送信をした場合、そのデーモン(プロセス)がnobodyのユーザで 実行されているのですが、このユーザをnobodyではなくrootや違うユーザ などで送信プロセスを発行することは出来ないのでしょうか?

  • SYSTEM権限でプロセス機動

    いつもお世話になっております。 ただ今仕事で業務アプリを開発しているのですが、題記の件で立ち往生しております。 有識者の方がいらっしゃいましたら、ご教授いただければ幸いです。 【やりたいこと】 Windows2000Server,及びWindowsServer2003上でアプリを実装したときに、 ログオフでアプリケーションを殺さないようにする。 【経緯】 WindowsServer2008対応にて、今までセッション0でダイアログ表示を 行っていたアプリをユーザセッションに表示するように変更しました。 その際にUIを行うプロセスを新たに起動(CreateProcessAuUser()を用いて) するようにしたのですが、このUIを起動するとログインユーザ(Administrator権限) になってしまいます。 タスクマネージャ上でユーザがSYSTEMになっているプロセスは ログオフ後にログインしなおすとそのままアプリが残っているのに対し、 UIプロセスはWindowsによって異常終了してしまいます。 このことから、SYSTEM権限でプロセスを起動すれば良いのではないか? っと考えたのですが、はたして可能なのでしょうか? ・サービスプログラムからの起動 ・ATコマンドを使用して起動 ・スクリプト起動?(すいません、これはイマイチ分かっていません) 上記の場合にはSYSTEMになるということはわかったのですが、 SYSTEMで起動しているプロセスから起動することは可能なのでしょうか。 もし可能な場合どのように起動すればよいのかを教えていただきたく、よろしくお願いいたします。 尚、WindowsServer2008上ではプロセスが死ぬことは仕様としてあるのですが、 過去バージョンと同等機能(ログオフしてもプロセスが生きている)を維持しなくてはならないため、 本件のような仕様になっています。 どうぞよろしくお願いいたします。

  • UNIIX系OSで以下の情報を採取する方法を教えてください。

    UNIX系OSで、一般的にインストールされているコマンドを用いて以下の情報を採取する方法を教えてください。 1)メモリ使用容量とユーザ処理に使用できるメモリ容量 2)複数CPU搭載の計算機で、空きCPU数と並列処理可能数 3)ディスク状態(正常か異常か?) もしかすると、頓珍漢なことを質問しているかもしれませんが、よろしくお願いします。

  • 職場の遅刻や早退に対する勤務時間の計算について

    みなさんはどのようなシステムの職場にお勤めですか? うちの場合は・・・ 9:00始業、17:00終業で、もし9:05に入ってタイムカードをついた場合、賃金計算時点では、9:15から入ったことになります。早退は、16:30にタイムカードをついた場合、それよりさかのぼって16:20で計算されます。これは着替える時間を考慮してのもので、もう、10年以上もこのシステムは変わっていません。要するに10分マイナスされるということです。 そこでアンケートですが、うちのように単に10分ずらす方法のほかに、どのようなシステムの企業がありますでしょうか?たとえば9:01に入ったとしても、15分単位で、9:15として計算される。などそれぞれいろんなパターンがあると思うので、できるだけたくさんの例を教えて頂きたいのでよろしくお願いします。

  • unixについて困っています

    unixで新規ターミナルで"man man"と入力した 場合、システムはどのような処理を行っているのでしょうか? あと、manコマンドってプロセスを幾つ起動するんでしょうか? レポートの課題なんですが、かなり困っています 援護を!!!