• ベストアンサー

マルチプロセスの処理時間

今、シングルプロセス処理としては開始から終了までA(sec)かかるとします。 これを、一定間隔でプロセス発生させ、マルチプロセスとして処理する場合、 多重実行時の処理速度は、単純に(A / 多重度)に減少すると思って問題ない でしょうか?他のコストは無視できるとします。

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

  • ベストアンサー
回答No.4

これは、何かの問題集の問題からの質問ですか? だとしたら、あまり質の良くない(おもしろくない) 問題だと思います。 もし ・CPU1個(シングルコア) ・プロセス切り替えのコストは無視する ・そのプログラムがI/O処理を全くしない という条件なら、単純に処理速度は多重度で割った 値になると思います。 ちなみに質問には「(A / 多重度)」と書かれていますが 質問ではAは速度ではなく実行時間(開始から終了までの経過時間) と書かれていますので「(A / 多重度)」にはならないです。 多重処理時の実行速度 = 1プロセス処理時の実行速度/多重度 です。 ただ、I/O処理を全くしないプログラムなんてほとんどないので 現実的にはこのような値で動作しません。だから問題としては あまり質がよくない(コンピュータ処理の特性を考えさせる問題 になってない)と思います。 通常はプログラム処理のところどころで、ファイル読み書きや 画面描画処理が入るので、そのタイミングでI/O待ちが発生します。 そのI/O待ち中の間に他のプロセスを動作させることで、全体の 実行時間は1プロセスの実行時間×多重度よりも短い時間で 終わらせることができます。これがマルチプロセスの利点であり 通常はそのような問題がコンピュータ処理の特性を考えさせる問題です。 マルチプロセスで処理しても結局実行時間が多重度の倍数になる のであれば、一個ずつシングルプロセスで処理しても全体は一緒ですし むしろシングルプロセスの方が一個目の結果が早く見られるという利点があります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

経験から申しますと、コスト(ファイル入出力や通信)の多い処理の方が (A / 多重度)より処理速度が向上する例が多いです。 つまり、入力待ち、受信待ちの間のアイドリング中に別の作業が 出来るからです。特にマルチスレッドでは理論値より時間がかかった 経験がないくらいです。AccessやExcelでもマルチプロセスを使って いますが、いずれも理論値より早く完了します。 タイムスライスの分配などOS側の制御時間は最近のPCでは問題に ならないくらい小さく、無視してよいでしょう。 そんな処理は無いと思いますが、他のデバイスとのI/Oが全くない プロセスですと、理論値より悪いかも知れませんね。

faith777
質問者

お礼

お忙しいところご回答有難うございました。 今回はI/Oや他の処理を全く考慮しない、現実には考え難い 理論的な考え方のプロセスを見る問題でした。 何とか回答作成できました。遅くなりましたが、お礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.3

CPUまちの時間はどうします? プロセスを100個に分割しても所詮、CPUが1個ではCPUの処理待ちが生じます。 単純に(A / 多重度)にするならシステムを100個用意するしかないです。 >S(sec)毎の処理進捗の合計が「1」になることから、 私の頭では意味がわかりませんので、判断できかねます。

faith777
質問者

お礼

お忙しい折、2回もご回答有難うございました。 具体的でない問題で、また知識乏しく、質問の意味も分かりにくかった ことと思います。遅くなりましたが、お礼申し上げます。

faith777
質問者

補足

ご回答有難うございました。 大前提として、CPUは1個で複数のプロセスを並列的に処理 することを想定します。 多重プロセスで処理する場合、各プロセスにCPUが均等に 割り振られる(その分1個当たりの処理能力当然低下)という 仮定です。 従って、単独でA(sec)かかるプロセス処理は、1(sec)では プロセス全体の1/Aだけ進捗し、S(sec)後にプロセスが2個 となった時点で、プロセス全体のS/Aだけ進捗し、1(sec)当たり の進捗度は、1個の場合の1/2、即ちプロセス全体の1/2Aに 低下すると考えました。 このように考えていき、最初のプロセスが完了することは、 当該プロセスの100%が完了することと考えられるので、 S(sec)毎に並列実行数が1増え、そのS(sec)毎の進捗度の 合計が「1(=100%)」となるという考えです。 (S/A) + (S/2A) + (S/3A) + ... + (S/(N-1)*A) + (T-(N-1)*S)/N*A = 1 並列数1 並列数2 並列数3 並列数(N-1) 並列数N 端的言うと、(並列せずに)単独実行時にA(sec)かかるプロセスを S(sec)毎にN個起動し、1個のCPUで並列実行する時、最初に起動した プロセスは、開始後何秒で終了するか、が知りたいのです。

全文を見る
すると、全ての回答が全文表示されます。
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

なりません。アムダールの法則で検索してみてください。 http://www.ap-siken.com/kakomon/01_moshi/q11.html http://www.softek.co.jp/SPG/Pgi/TIPS/tutorial/para_ratio.html

faith777
質問者

お礼

ご多忙のところご回答有難うございました。 複数プロセッサの場合の「アムダールの法則」、良く理解できました。 遅くなりましたがお礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

「他のコスト」に入れていらっしゃるかもしれませんが、 (A / 多重度)にはなりません。 プロセスの分割。それの制御。終了コードの判定。結果のチェックなどがかかります。 例えて言うと、 1人で10時間掛かる仕事を100人でやったら6分で終わるか? といったようなことです。 必ずロスは出ます。あと、司令塔(課長や係長、班長、リーダー的なもの)も必要でしょう。

faith777
質問者

補足

早速のご回答有難うございました。 今回の場合は、純粋なプロセス処理時間のみを考慮し、 その他の時間は考慮しない、論理的な処理時間を考えています。 例えば、単独ではA(sec)かかるプロセスを、S(sec)間隔で順に N個起動する時、最初のプロセスの終了時刻T(sec)は、 S(sec)毎の処理進捗の合計が「1」になることから、 (S/A) + (S/2A) + (S/3A) + ... + (S/(N-1)*A) + (T-(N-1)*S)/N*A = 1 が成り立つか、ということです。如何でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マルチプログラムの多重度に関する質問

    セキュアドのH19AM2で以下のような問題が出題されました。 ----------------------------------------------------------------------------------- マルチプログラムの多重度の設定を過度に小さくした場合に発生する現象として, 適切なものはどれか。 ア CPUの使用率が上がる。 イ 各プロセスの処理時間が長くなる。 ウ 主記憶の使用率が下がる。 エ ページフォールトの発生回数が多くなる。 ----------------------------------------------------------------------------------- 正解がウであるということは、私も理解できているのですが、 マルチプログラムの多重度はWinXpであればどのように設定できるのでしょうか? 小さくするなんてことはOSの設定でできるのでしょうか? それともプログラム側で制御するのでしょうか? 実際どうやって制御するのだろうという部分に疑問を持ってしまいまして、 もしよろしければ、ご教示お願い致します。

  • 【Ruby】マルチスレッドでなくマルチプロセスで

    以下の様なプログラムをマルチスレッドでなくマルチプロセスで実現したいです。 #!/usr/bin/ruby require 'thread' q=Queue.new data=%w(a * * * b * * c * * d * *) data.each do |d| q.push d end (1..4).each do |n| Thread.start { while 1 do d=q.shift break if d!='*' end puts n.to_s+' '+d.to_s }.join end rubyのバーションは ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin10.0] です。バージョンをあげる事は、できれば避けたいです。 実際には上記プログラムの【puts n.to_s+' '+d.to_s】してる所は、ネットに繋いで云々の時間のかかる処理なのですが、まったくパラレルに行なっている様子が無いので、マルチプロセス化したら早くなるかなと思いました。 子プロセスを生成して親プロセスとはパイプで繋いで、、などとするのかなあと試行錯誤したのですが、どうもうまくできません。 ご指導の程、よろしくお願い申し上げます。

    • ベストアンサー
    • Ruby
  • SLIのマルチモニタについて

    こんにちは。 nForce4 SLI マザー(Asus A8N-SLI Deluxe)を使っているので、SLIを組んでみたいと思いましたが、疑問な点がいくつかあるんです。 nVidiaのFAQから、SLI時はマルチモニタ不可で1モニタのみ対応ということを知りました。しかし同時に、SLIモードとマルチモニタモードは、ソフトウエア的に切り替えることができる(要再起動)ことも書いてありました。 そこで質問です。 1. マルチモニタモードで使うにしても、マザーのBIOSやSLIセレクタなど、ハードウエアはすべてSLIモードにしなければならないんですね?(SLIセレクタがシングル側だと、セカンダリはx0?) 2. SLIセレクタをSLIモードにした状態って、x8とx8になるんでしょうか? x16とx4ですか? もし後者だとすると、マルチモニタモードにおいて、プライマリとセカンダリで速度に差が出るんでしょうか? 3. マルチモニタモードで3Dのパフォーマンスを計測したら、PCIeの帯域が制限されている分、同じカードをシングルで使うときよりもパフォーマンスは落ちるのでしょうか? 4. SLIブリッジなしでSLIをした場合、SLI時の3Dパフォーマンスが若干落ちることは承知していますが、マルチモニタモードにおいては、差は出るのでしょうか? 5. 二つのカードにまたぐマルチモニタは、シングルカードのマルチモニタと全く同じ使い勝手なのでしょうか? たとえば、RealPlayerでの動作再生の場合、シングルカードですと、二つのモニタに渡って一つの動画を再生するなんてこともできます。(WMPでは、モニタをまたぐと、またいだ部分は黒くなってしまいますが。)こんな芸当は、ビデオカードをまたいでも可能なのでしょうか? 以上、もしご存じの方がいらっしゃいましたら、ご教授いただければ幸いです。よろしくお願い申し上げます。

  • ソケット通信処理について

    現在、下記のようなクライアント、サーバ通信を行っております。 [クライアント] (a)WSAStartup (b)socket (c)connect (d)send(サーバへの要求送信) (e)recv(サーバからの応答受信) (f)shutdown (g)closesocket (1)プロセスは、常駐している (2)(a)は初回起動時1回のみ (3)通常(d)~(e)を周期的に行う (4)(e)にて一定時間経過した場合、5秒待ち6回リトライし、それでもだめな場合は、(f)(g)を実施後(b)から処理を行う。この後、WSACleanupを行っていない。プロセス終了(exit)もしていない。 [サーバ] (a)socket (b)bind (c)listen (d)accept (e)子プロセス生成 以下子プロセス処理 (f)select (g)recv(クライアントからの要求受信) (h)send(クライアントへの応答送信) (1)親プロセス((a)~(e)を行うプロセス)は常駐している。子プロセス起動後、(d)でconnect待ちとなる。(クライアント側からの再接続待ち) (2)子プロセスは、通常(f)~(h)の処理を行い、(f)又は(g)の異常時にexitする。 この処理で、クライアント処理(e)の一定時間経過後の再接続が正常に動作しない場合があります。 詳細情報を取得していませんが(現実的にすぐに詳細情報を取得することができない状況)(c)にて異常が発生していると思われます。 一度その状態になると二度と再接続できなくなり、マシン再起動(プロセス再起動)で復旧させることになります。 (実際は、マシン再起動後に再接続が正常になることを確認しています。(プロセス単体の再起動での確認はしていません。)) そこで質問ですが、 (1)再接続時、WSACleanupを行っていないが、問題ないか(処理の順番:(f)→(g)→(b)) (2)再接続前にプロセス終了(exit)していないが、問題ないか (3)上記の作りで考えられる要因として、何があるか ご教示して頂きたく、宜しくお願い致します。

  • 不良債権処理とは何ですか?

    170762で同様な質問があり専門家の方からご回答がありましたが、今一わかりません。 私の知る限り書いてみます。 不良債権処理とは、私のような多重債務者がおり、その債権者が私の財産を全て競売にして回収しましたが、それでも、まだ全部を返済したことになりませんでした。残債があります。そのような場合、債権者はそれ以上回収不可能です。その残債を「不良債権」と云いその債権を放棄することを「不良債権処理」と云うのだと思います。これは債務者側から考えています。一方、債権者側から考えますと、その「処理」しなければ、その残債は「資産」ですが「処理」すれば資産が減少することはあたりまえです。このことは当然ですから次期貸し出し金額とは関係ないはずです。一定の資産に見合う貸し出し金額が定まっているなら、それをやめたらどうですか? もっとも、そうすれば資産家が預金しても資産のない者に預金するので危なくなりますが・・・。それは資産家が預金先を選択すればよいので、そのことまで国(?)が考える必要はないと思います。 結論から申し上げますと、限りなく「不良債権処理」することが民主主義の根本と思いますがアドバイスお願い致します。

  • (加速減速加味した場合の速度の出し方)

    (加速減速加味した場合の速度の出し方) 距離20(mm)のA地点~B地点を、A地点から稼動しB地点で停止するまで 20秒で動作させるとします。また一定速度X(mm/sec)で稼動させます。 この時、A地点(静止状態)から速度X(mm/sec)へ達するまでの加速時間を1秒、 速度X(mm/sec)状態からB地点で停止するまでの減速時間を1秒と設定した場合、 稼動速度X(mm/sec)はどの様に算出すればよいでしょうか? ・A地点発→(加速,1秒後)→速度X→(減速,1秒後)→B地点着 ・A-B距離:20mm ・A-B移動時間:20秒 ・速度:Xは? ご教授宜しくお願い致します。 

  • コンベア搬送

    コンベアの搬送装置を作ろうとしているのですが 追いつき制御にて一定間隔にする必要があります。 装置構成は、コンベアA,コンベアBがありA→Bにものを搬送します。 コンベアBは一定速度でコンベアAは可変速度で運転します。 追いつき制御の計算式を教えていただけないでしょうか

  • 速度算(公務員の数的処理)

    H17警視庁3類の数的処理の問題(速度算)なのですが、Aの速さ、あるいはBが歩き始めてAが出会うまでの時間を未知数として解こうと思うと2次方程式を解く羽目になってしまいます。 警視庁3類(高卒区分)というと、2次方程式を解かせるような作業は必要ない出題がほとんどだと思っていたのですが… 答えは36KMなのですが、2次方程式を使わない解答がもしありましたらご教授願いたく思います。 問題: A,Bの2人がXとYを結ぶ同じルートを歩くことにした。AはXから一定の速度でYに向かい、BはAが出発してから2.5時間後にYを出発し、Aより毎時1.5KMだけ遅い速度でXに向かった。AとBが途中で出会ってから、Aは1.5時間後にYに到着し、Bは6時間後にXに到着した。XY間の距離を求めよ。

  • バイオ式生ゴミ処理機とバイオチップ

    バイオ生ゴミ処理機について教えてください。 現在A社のバイオ式生ゴミ処理機を使用しています、バイオチップがくたびれて分解が悪くなって きたのでバイオチップを入れ替えました。その時A社のものより匂いやコストの面で良いように 思えたB社のバイオチップを購入してA社の生ゴミ処理機に使用しましたが、どうも分解速度や 匂いなど余り良い状態ではないようです。やはりゴミ処理機本体とバイオチップは合わせて使用 しないと不都合があるものなのでしょうか? 又、バイオにも種類があるのでしょうか?攪拌速度、温度、湿度など適合性は重要な 要因でしょうか?ご存知の方、経験者の方がいらしたら教えてください。

  • 反応速度定数を求める問題

     2次の速度式に従う液相反応、A+2B→C、がある。未知の濃度のAを含む溶液にBを初濃度 0.1molLで添加して反応を開始させ、時間の関数としてBの濃度を測定した。反応時間3分でB の濃度はちょうど最初の半分に減少したが、反応開始後約1時間でBの消費はほとんど認め られなくなり、最終的に0.016molLのBが残存することがわかった。この反応の速度定数を求 めよ。 いろいろやってみましたけど、やっぱ最初のA+2B→Cが2次速度式に従うっていうのはどうやって 処理すればいいのかわかりません。 あとAの濃度は未知でBの濃度とひとしいかどうかもわからないですね。 ご回答お願いします。待ってます!