みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2014-06-03 04:31:47

QNo.8621605

すぐに回答ほしいです

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

これは、何かの問題集の問題からの質問ですか?

だとしたら、あまり質の良くない(おもしろくない)
問題だと思います。

もし
・CPU1個(シングルコア)
・プロセス切り替えのコストは無視する
・そのプログラムがI/O処理を全くしない
という条件なら、単純に処理速度は多重度で割った
値になると思います。

ちなみに質問には「(A / 多重度)」と書かれていますが
質問ではAは速度ではなく実行時間(開始から終了までの経過時間)
と書かれていますので「(A / 多重度)」にはならないです。
多重処理時の実行速度 = 1プロセス処理時の実行速度/多重度
です。

ただ、I/O処理を全くしないプログラムなんてほとんどないので
現実的にはこのような値で動作しません。だから問題としては
あまり質がよくない(コンピュータ処理の特性を考えさせる問題
になってない)と思います。

通常はプログラム処理のところどころで、ファイル読み書きや
画面描画処理が入るので、そのタイミングでI/O待ちが発生します。
そのI/O待ち中の間に他のプロセスを動作させることで、全体の
実行時間は1プロセスの実行時間×多重度よりも短い時間で
終わらせることができます。これがマルチプロセスの利点であり
通常はそのような問題がコンピュータ処理の特性を考えさせる問題です。

マルチプロセスで処理しても結局実行時間が多重度の倍数になる
のであれば、一個ずつシングルプロセスで処理しても全体は一緒ですし
むしろシングルプロセスの方が一個目の結果が早く見られるという利点があります。

投稿日時 - 2014-06-03 15:01:58

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

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

そんな処理は無いと思いますが、他のデバイスとのI/Oが全くない
プロセスですと、理論値より悪いかも知れませんね。

投稿日時 - 2014-06-04 14:33:56

お礼

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

投稿日時 - 2014-06-11 15:57:00

ANo.3

CPUまちの時間はどうします?

プロセスを100個に分割しても所詮、CPUが1個ではCPUの処理待ちが生じます。
単純に(A / 多重度)にするならシステムを100個用意するしかないです。

>S(sec)毎の処理進捗の合計が「1」になることから、

私の頭では意味がわかりませんので、判断できかねます。

投稿日時 - 2014-06-03 09:24:02

補足

ご回答有難うございました。
大前提として、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で並列実行する時、最初に起動した
プロセスは、開始後何秒で終了するか、が知りたいのです。

投稿日時 - 2014-06-03 10:03:58

お礼

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

投稿日時 - 2014-06-11 16:06:27

ANo.2

なりません。アムダールの法則で検索してみてください。

http://www.ap-siken.com/kakomon/01_moshi/q11.html
http://www.softek.co.jp/SPG/Pgi/TIPS/tutorial/para_ratio.html

投稿日時 - 2014-06-03 08:35:57

お礼

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

投稿日時 - 2014-06-11 16:03:43

ANo.1

「他のコスト」に入れていらっしゃるかもしれませんが、
(A / 多重度)にはなりません。

プロセスの分割。それの制御。終了コードの判定。結果のチェックなどがかかります。

例えて言うと、
1人で10時間掛かる仕事を100人でやったら6分で終わるか?
といったようなことです。
必ずロスは出ます。あと、司令塔(課長や係長、班長、リーダー的なもの)も必要でしょう。

投稿日時 - 2014-06-03 07:21:49

補足

早速のご回答有難うございました。
今回の場合は、純粋なプロセス処理時間のみを考慮し、
その他の時間は考慮しない、論理的な処理時間を考えています。
例えば、単独では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

が成り立つか、ということです。如何でしょうか?

投稿日時 - 2014-06-03 08:50:27

あなたにオススメの質問