• 締切済み

m個のジョブをn台のCPUに分担する

情報処理技術者試験の勉強会の時の、並列処理の話題だったんですが、誰も明快な答が出せなくて、ここに質問する事にしました。 どなたか知恵を貸して頂ければ、幸いです。 <問題> m個のジョブがあり、その処理時間はT0~Tmである。 これをn台のCPUで処理したときに、最短の時間で終わるようにスケジューリングしたい。 どういう手順で決めれば良いか? ナップザック問題に近いように思えたんですが、ナップザク(CPU)は一つではないし、最大で決まるのでもないので、それ以上知恵が出ませんでした。 <例> 例えば、CPUの台数n=4、ジョブの数m=10で、T0~Tmが、1,2,3,4,5,6,7,8,9,10[s]であれば、 CPU1に、1,3、10:合計15 CPU2に、2,4,9:合計14 CPU3に、5,8:合計13 CPU4に、6,7:合計13 13~15のばらつきはありますが、最長15のこの組み合わせが全体としては最短の処理時間になります。 また、答はこの組み合わせ以外にもあります。 ナップザックであれば、重さの異なるm個の荷物があって、それらをn個のナップザックに、出来るだけ同じ重さになるように振り分ける問題と言い換えた方が分かりやすいかもしれませんね。

みんなの回答

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.4

えーと、No.2 さんのご指摘のようにこの問題が「NP困難」である、ということは、総当たりで全ての組み合わせを試してみる以外に最適解は得る方法はない、ということです。 実際、スケジューリングの世界では、NP 困難な場合、総当たり方式は現実的ではないため、適当な折り合いを付けて、言い換えればより簡単な「適当」なアルゴリズムを実装し、それで得られた解を準最適な解(と思って)それで良し、としています。 学術的(?)には、スケジューリングの準最適アルゴリズムをどう評価するかはすごく悩ましいのです。適当な分散をもったジョブの集合を作ってシミュレーションし、「××に比べて良い結果が得られた」なんて論文を書いたりしますが、そうすると「実際の運用ではそんなキレイな分散ではジョブが投入されないので、そんな結果は実用的ではない」なんて言われてしまいます。じゃあ、ということでどこからか持って来た実際のジョブの投入パターンを使ってシミュレーションすると、今度は「そのジョブ投入パターンはどの程度一般性があるのか」なんて文句が出て「じゃあどうすればいいんだぁー!」と叫びたくなってしまいます。つまりは何をやっても突っ込みどころ満載な訳です。これは元々が準最適という「ごまかし」なので避けようがないのです。えっと、これは思いっきり蛇足でした。 ということで、本当に最適な解を見つけるには全ての組み合わせをやってみるしかないですね。

sahara4
質問者

お礼

私も、Webをあさってみましたが、おっしゃる通りのようですね。 ジョブの数がm個なら、総当りするとm!回計算することになります。 結果が出るのは確かですが、本来のジョブの実行時間より余計にかかる場合も有り得ますね。(笑) ただ、この問題の場合は、 CPU1に、1,3,10:合計15 と、 CPU1に、3,1,10:合計15 は同じなので除外すれば、組み合わせの数は劇的に少なくなるはず。 というアプローチもありますね。 または、No1さんの方法で作っておいて、入れ替えて行く方法が現実的なような気がします。 いずれにしても、意外に難しい問題でした。

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.3

No.2 さんのおっしゃる通り NP 困難のようですね。失礼しました。 メイクスパン問題という名前は知らなかったのですが、ジョブショップスケジューリング問題として良く知られた話でした。

sahara4
質問者

お礼

ありがとうございます。 質問文の例題が単純過ぎたかもしれません。 9,9,6,6,5,5,4,4,4,2の場合 ソートして降順に、各CPUへ割り当てて行くと、次のようになり、最大15[s]となります。 CPU_1 9,4→計13 CPU_2 9,4→計13 CPU_3 6,5,2→計13 CPU_4 6,5,4→計15 でも、CPU_3の2番目のジョブ5と、CPU_4の1番目のジョブ6を入れ替えると、 最大14[s]であり、これが最適解ですね。 CPU_1 9,4→計13 CPU_2 9,4→計13 CPU_3 6,6,2→計14 CPU_4 5,5,4→計14 「ジョブショップスケジューリング問題」をキーワードに、Web検索したら、意外に難しい問題だと分かってきました。 スケジューリング学会なんて団体もあるんですね。 とりあえず、No1.のご回答の方法で並べたものを元にして、入れ替える方法で考えてみます。 入れ替えの方法は難しそうですから、お知恵を貸していただければ幸いです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

これは「メイクスパン最小化問題」という問題で, 詳細は確認していませんが NP-困難のようです>#1. とはいえ, この問題に関していえば「全てのプロセッサの処理能力が同じ」ということで問題が簡単になって, PTAS が存在するとか. 簡単にいくと, 「時間のかかるジョブから順に, 『そのジョブの終了時間が最も速い』プロセッサに割り当てる」アルゴリズムで 4/3 近似になるみたい.

参考URL:
http://www.nada.kth.se/~viggo/wwwcompendium/node181.html
sahara4
質問者

お礼

>「時間のかかるジョブから順に, 『そのジョブの終了時間が最も速い』プロセッサに割り当てる」 これが現実問題としては、最適な方法かもしれませんね。 なぜなら、ジョブの処理時間はあらかじめ予想できる場合はほとんどありませんから。

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.1

もしジョブが並列処理で複数のCPUを使用するというのであれば、ナップザック問題と等価ですが、今回のジョブはCPUをひとつしか使わないので、NP困難ではないようです。 正解かどうかは分かりませんが、私ならこうします。 まずジョブを処理時間でソートしておきます。処理時間が長い方から順にnジョブをそれぞれ CPU_0 から CPU_n-1 に順番に割り当てます。次に CPU_n-1から CPU_0 の順で残ったジョブを降順ソートの順番で割り当てます。 さらにジョブが残ったら今度は CPU の並びを割り当てられたジョブのトータルの長さで昇順ソートしてから、上の操作を繰り返せば良いのではないでしょうか。 これが最短か?証明できるか/正しいかは分かりません。

関連するQ&A

  • 点n個から三個の点を選んで三角形を作る組み合わせの

    点n個から三個の点を選んで三角形を作る組み合わせの問題があると思うのですが、あのとき直線になってしまう場合を引くと思うのですがそれをどう求めればいいのかがよくわかりません よろしくお願いします。

  • N個の整数の並び替えるアルゴリズム

    N個の整数1,2,3,...Nから任意のM個(M < N )を取り出すのですが、重複はダメという場合、どのようなアルゴリズムがあるでしょうか。重複ありなら、Nまでの一様乱数を発生させて整数化して取り出すことは可能です。今回は重複なしです。重複があったらやり直して重複なしになるまでやり続けるというのはダメだなと思っています。 データ処理言語のRはコマンド1つのようですが。言語はFortranなのですが、アルゴリズムのレベルだとどれでも同じと考えています。よろしくお願いします。

  • n個のボールをn個の箱へランダムに配分するときK個の箱が空である確立

    「n個のボールをn個の箱へランダムに配分するときK個の箱が空である確立を求めよ。ただし、ボールと箱はどちらも区別する。」という問題なんですが、解ける方がいたら、ぜひその解き方と答えを教えてください。 (n-k)個の箱には少なくとも1つのボールがあるので、まず、(nーk)個の箱の各々に1つずつボールをいれその後残りのk個のボールを配分するとして考えてみたんですが、これでは重複して数えてしまうことになり、うまく数えれませんでした。

  • 条件付の組み合わせ最適問題教えて下さい

    ヨウジと申します。20代後半の技術職です。 すみません、数学の組み合わせ最適問題について教えてください。 ナップザック問題の派生のような感じなのですが。 ナップザックにN個荷物を入れるが、荷物はN種類のジャンルから1つずつ入れないといけない。 N種類のジャンルにはそれぞれ複数個の候補の荷物があり、それぞれ重さ、価値が決まっている。このとき、 (1)ナップザックに入れられる物の重さは制限以下にしたい。(M以下) (2)ナップザックに入れる物の価値は出来るだけ高くしたい。 (3)ナップザックに入れる際に、各ジャンルから1つずつ荷物を入れる。 という条件で、最適組合せを求めるやり方を教えて頂きたいのです。 線型計画法とか、Genetic Algorithmとかで解くのかなと思いますが、 どうも、年のせいか、数学がわからなくなってしまいまして。 よろしくお願いします。

  • CPUとM/Bの組み合わせについて

    身内から、一万円ぐらいでCPUとマザーボードを組めないか頼まれているのですが、最近はPC雑誌も読まなくなっているため、一通り調べた上で、この組み合わせで…とは思っているのですが、間違っていないか心配なため、質問させていただきます。 ソフマップさんのところから購入しようと思っていますが、 CPU:Pentium G3220 M/B:H81M-P33 の組み合わせでも問題無いでしょうか?グラボは積まず、CPU内のグラフィック機能をということで、H81を選びましたが…いかがでしょうか?回答お待ちしています。ちなみに現在使っているCPUはE7400で、私の使っているCorei3-2100程度の性能があれば十分と思っています。

  • 論理パズルの問題(数学的要素あり)

    以下の問題の解答が理解できません。助けていただけると幸いです。 問題 4つの整数がある。これらを2個づつ取り出して加えると、A,B,C,D,Eが得られた。4つの整数はなにか。 解答 まずは、組み合わせは6通りだから、一つ重なってる。 そこで、*まずAからEを合計し、それにAからEのどれかを加えたときに、その答えは12で割り切れるはず。 この最後の一文がわかりません。 これはn個の整数を合計したものはnで割り切れるといっているのでしょうか。 しかし、例えばn=2として、1,8を例にあげますと当てはまりません。

  • vba  組み合わせパターン表示

    1,2,3,--,n-1,nからm個とる組み合わせのパターンを セル(1,1)から(nCm、nCm)に表示させる処理をVBAで記述 したいのですが、どうすればいいのでしょうか。 よろしくお願いします。

  • 自然数m、n。十分条件の証明

    趣味で、久々に高校の時の数学の問題集を解いてみています。 その中で分からない証明があったので、詳しい方教えてください。 [問い] ----------------------------------------------------- 自然数m、nに関する条件p、qがある。pはqであるための必要 条件か、十分条件か、必要十分条件か、またはいずれでもないか? p: m<n  q: m^2 ≦n^2 ------------------------------------------------------------ 答えは十分条件です。(必要条件はm=nの時が明らかに反例) その証明が以下のようになっています。 m<nから m-n<0 このとき、 m^2-n^2=(m+n)(m-n)<0  よって m^2 <n^2 ゆえに m^2 ≦n^2(*) したがってp⇒qは成り立つ。(十分条件) 分からないのは(*)の部分です。なぜ「ゆえに」と言えるのでしょう。 m<nなので、等号はつかないように思うのですが……。 なんだか、すごく単純な思い違いをしているような気もして冷や汗ものですが……良かったら教えてください。よろしくお願いします。

  • 数学の確率 (さいころ)

    ある確率の問題で 「n個のさいころを同時に投げるとき目の和がn+3になる確率を求めよ」 というものがあるのですが、その答えの式が 6のn乗 分の n H 3(重複組み合わせ   Hのn、3) と書いてありました。 これは分母が、さいころをn個投げる事象の総数の重複順列で、分子はn個から選ぶ 重複組み合わせ となっています。 でも、分母を順列で計算するので分子も順列で考えなくてはならないのではありませんか??どうか分かる方は教えてください。よろしくお願いします。

  • nCr=n-1Cr+n-1Cr-1の応用

    ある参考書に載っていた問題です。 n個の異なるものからr個とる組合せで、特定の1つのものを含まない組合せの個数が、それを含む組合せの個数の2倍に等しいとき、nとrの関係はどうなるか。 n-1C r=2×n-1 C r-1という式を立てて考えてみたのですが、ここから先がよくわからず困っています。答えはn=3rとなっていましたが どう立って導けばよいのでしょうか。何卒、ご教示願います。