【文献】
鈴木紀章,森 義和,岩熊憲二,枝廣正人,ハードリアルタイム処理向けマルチコアタスク配置の評価関数設計,電子情報通信学会技術研究報告,社団法人電子情報通信学会,2011年 3月11日,Vol.110,No.473,p.93−98
(58)【調査した分野】(Int.Cl.,DB名)
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする請求項7に記載のタスク配置方法。
【発明を実施するための最良の形態】
【0007】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。以下に述べる本発明の各実施の形態としてのタスク配置装置は、各タスクが特定のコアで実行される機能分散型のAMP方式のマルチコアシステムを設計・実装する際に、タスクセットを構成する各タスクをいずれのコアに配置するかを決定する装置である。前述のように、AMP方式のマルチコアシステムは、タスクがどのコアに配置されるかに基づいて性能が異なる。以下では、本発明の各実施の形態のタスク配置装置に基づき、マルチコアシステムの性能をより高めるタスク配置が可能となることについて説明する。なお、以降、本発明の各実施の形態において対象とするAMP方式のマルチコアシステムを、単にマルチコアシステムと記載する。
(第1の実施の形態)
本発明における第1の実施の形態としてのタスク配置装置1のハードウェア構成の一例を
図1に示す。
図1において、タスク配置装置1は、CPU(Central Processing Unit)1001と、RAM(Random Access Memory)1002と、ROM(Read Only Memory)1003と、ハードディスク等の記憶装置1004とを含み、コンピュータを構成している。
ROM1003および記憶装置1004は、コンピュータを本実施の形態のタスク配置装置1として機能させるためのプログラムおよび各種データを記憶している。
CPU1001は、ROM1003および記憶装置1004に記憶されたプログラムおよび各種データを、RAM1002に読み込んで、実行する。
次に、タスク配置装置1の機能ブロックの構成の一例を
図2に示す。
図2において、タスク配置装置1は、タスクセットパラメータ保持部11と、序列重み付与部12と、配置部13と、を含む。
ここで、タスクセットパラメータ保持部11は、例えば、記憶装置1004を用いて構成される。また、序列重み付与部12および配置部13は、例えば、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001を用いて構成される。なお、タスク配置装置1の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
タスクセットパラメータ保持部11は、外部から入力されるタスクセットパラメータを保持する。ここで、タスクセットパラメータとは、タスクセット(配置対象の1つ以上のタスクの集合)を構成する個々のタスクの特性を表す情報である。タスクセットパラメータは、タスク間の依存関係を表す情報を含む。また、タスクセットパラメータは、その他、タスクの起動周期、実行時間、必要メモリサイズなどをそれぞれ表す情報を含んでもよい。
また、外部から入力されるタスクセットパラメータが、ファイル等のように他の機能ブロックからも参照可能に保持された形式で入力された場合、タスクセットパラメータ保持部11は、タスクセットパラメータをコピーして保持する必要はない。この場合、タスクセットパラメータ保持部11は、そのファイル等を示す情報を保持すればよい。
また、外部から入力されるタスクセットパラメータに後述の序列を表す情報が含まれる場合、タスクセットパラメータ保持部11は、各タスクの序列を表す情報をさらに保持してもよい。
序列重み付与部12は、タスクセットパラメータ保持部11に保持されたタスクセットパラメータを参照し、各タスクの序列に基づいて各依存関係に対して序列重みを付与する。ここで、各タスクの序列とは、依存関係に基づくタスクセット全体の実行の流れにおいて、各タスクが実行され得る位置をいう。また、序列重みとは、序列に基づく重みを表す係数である。具体的には、序列重みは、その依存関係に基づく実行待ち時間の発生しやすさの程度を表す係数といえる。このような実行待ち時間の発生しやすさは、その依存関係に関連する関連タスクの序列に基づいて変化する。そのため、序列重みは、序列に基づく情報となる。
詳細には、序列重み付与部12は、
図3に示すように、序列符号生成部121と、重み付け部122とを含む。
序列符号生成部121は、対象のタスクセットにおける各タスクの序列を表す序列符号を生成する。具体的には、序列符号生成部121は、各タスクの序列符号を、タスクセットパラメータ保持部11に保持されたタスクセットパラメータに基づいて算出してもよい。
あるいは、タスクセットパラメータ保持部11に、既に各タスクの序列を表す情報が保持されている場合、序列符号生成部121は、序列符号を算出する処理を省略し、タスクセットパラメータ保持部11から各タスクの序列符号を取得すればよい。この場合、タスクセットパラメータ保持部11は、序列符号を保持してもよいし、各タスクに関する情報を序列符号に相当する順序で保持してもよい。
重み付け部122は、序列符号生成部121を用いて生成された(または取得された)序列符号に基づいて、タスク間の各依存関係に対して序列重みを付与する。
例えば、重み付け部122は、依存関係を有する各タスクの序列がタスクセット全体の実行の流れにおいて終了に近いほど、序列重みを重くしてもよい。また、例えば、重み付け部122は、依存関係を有する2つのタスクの序列が近いほど、序列重みを重くしてもよい。ここで、序列重みが重いとは、その依存関係に基づく依存待ち時間が、より発生しやすいことをいう。序列重みの値は、重いほど大きくても良いし、重いほど小さくてもよい。
配置部13は、タスクセットに属するタスクを依存関係にしたがって、1つ以上のコアに配置する際に、異なるコアに配置される2つのタスク間の依存関係に付与された序列重みを用いて算出される評価値に基づいて、タスクを配置する。なお、以降、異なるコアに配置される2つのタスク間の依存関係を、単にコア間依存とも記載する。
詳細には、配置部13は、
図4に示すように、評価値算出部131と、最適配置探索部132と、を含む。
評価値算出部131は、後述のタスク配置候補について、その配置の良さを表す評価値を算出する。具体的には、評価値算出部131は、コア間依存に付与された序列重みを用いて評価値を算出する。
最適配置探索部132は、タスクセットを依存関係にしたがって1つ以上のコアにタスクを配置し、タスク配置候補を生成する。そして、最適配置探索部132は、評価値算出部131を用いて算出された評価値が良好なタスク配置の候補を、探索する。
ここで、最適配置探索部132に適用可能な最も単純な探索手法としては、全探索が挙げられる。全探索を用いる場合、最適配置探索部132は、全てのタスク配置候補を生成し、その中で最も評価値が良好な配置を探索結果として出力する。
ただし、最適配置探索部132には、全探索よりも効率的な探索手法として、分枝限定法、グリーディー法、遺伝的アルゴリズム等の一般に知られる高速な探索手法の適用が、より望ましい。
以上のように構成されるタスク配置装置1の動作について、
図5を参照して説明する。
初めに、タスクセットパラメータ保持部11は、外部から入力されたタスクセットパラメータを保持する(ステップS101)。
次に、最適配置探索部132は、タスク配置候補(どのタスクをどのコアに配置するかの候補データ)を生成する(S102)。
次に、序列符号生成部121は、タスクセットパラメータ保持部11に保持されたタスクセットパラメータを参照して、各タスクの序列符号を求める。前述のように、序列符号生成部121は、各タスクの序列符号を算出してもよいし、既に各タスクに割り当てられている序列符号を取得してもよい。そして、重み付け部122は、各タスクの序列符号に基づいて序列重みを生成する(ステップS103)。
このとき、重み付け部122は、タスクセットに存在する全ての依存関係について序列重みを付与してもよい。
ただし、重み付け部122は、評価値算出部131で必要となる依存関係について序列重みを付与してもよい。
この動作に基づき、タスク配置装置1は、付与処理の効率化を図れる。例えば、評価値算出部131が、コア間依存に付与された序列重みを用いて評価値を算出する場合、重み付け部122は、ステップS102で生成したタスク配置候補におけるコア間依存に対して、序列重みを付与すればよい。
なお、全ての依存関係について序列重みを付与する場合、上述のステップS102およびS103は、順不同の処理である。例えば、タスク配置装置1は、ステップS103、ステップS102の順での実行や、ステップS102およびステップS103の同時実行も可能である。
次に、評価値算出部131は、ステップS102で生成されたタスク配置候補について、ステップS103でコア間依存に付与された序列重みを用いて、タスク配置の良さを示す評価値を算出する(ステップS104)。
次に、最適配置探索部132は、生成されたタスク配置候補およびその評価値が、タスク配置の探索終了条件を満たすか否かを判断する(ステップS105)。
ここで、タスク配置の探索終了条件を満たさない場合、タスク配置装置1は、再度、ステップS102からの処理を繰り返す。
一方、タスク配置の探索終了条件を満たす場合、最適配置探索部132は、これまでに生成したタスク配置候補の中で、最も評価値のよいタスク配置候補を最適化結果として出力する(ステップS106)。そして、タスク配置装置1は、動作を終了する。
ここで、タスク配置の探索終了条件は、最適配置探索部132に採用される最適化アルゴリズムに従い異なる。例えば、最適化アルゴリズムとして単純な全探索が用いられる場合、タスク配置の探索終了条件は、生成し得る全てのタスク配置候補の生成終了となる。この場合、最適配置探索部132は、全てのタスク配置候補のうち、最適な評価値を持つタスク配置候補を、最適化結果として出力する。
また、例えば、最適化アルゴリズムとして他の一般的な最適化アルゴリズムが採用される場合、タスク配置の探索終了条件は、その最適化アルゴリズムにおいて評価値がこれ以上良くならないとの判断でもよい。あるいは、タスク配置の探索終了条件は、タスク配置候補の生成を所定回数繰り返しても評価値が改善しないとの判断でもよい。
以上で、タスク配置装置1の動作の説明を終了する。
次に、本発明の第1の実施の形態としてのタスク配置装置1の詳細な構成および動作について具体例を用いて説明する。
まず、ステップS101において、タスクセットパラメータ保持部11に保持されるタスクセットパラメータの具体例について、
図6及び
図7A〜
図7Cを参照して説明する。
図6は、タスク1〜タスク6で構成されるタスクセットに存在する依存関係をグラフ表現した図である。以降、このようなグラフを、タスクグラフとも記載する。このようなタスクグラフにおいて、タスク間を結ぶ矢印は、両端のタスク間の依存関係を表す。また、依存関係を表す矢印は、終点側のタスクの開始に、始点側のタスクの終了が必要であることを表す。このようなタスクグラフは、タスクセット全体の依存関係に基づく実行の流れを表しているともいえる。
このようなタスクグラフで表されるタスクセットのタスクセットパラメータについて、そのデータ構造の一例を
図7Aから
図7Cに示す。
例えば、
図7Aに示すように、タスクセットパラメータ保持部11は、タスクセットを構成する各タスクについて、依存先タスクを対応付けて保持してもよい。例えば、
図7Aでは、タスク1について、その依存先タスクとして、タスク2、4および5が保持されている。また、タスクセットパラメータ保持部11は、各タスクについて、さらにその他のパラメータを保持してもよい。その他のパラメータは、例えば、前述のように、タスクの起動周期、実行時間、必要メモリサイズでもよい。
あるいは、
図7Bに示すように、タスクセットパラメータ保持部11は、タスクセットを構成する各タスクについて、依存元タスクを対応付けて保持してもよい。例えば、
図7Bでは、タスク6について、その依存元タスクとして、タスク3、4および5が保持されている。また、この場合も、タスクセットパラメータ保持部11は、各タスクについて、さらに、上述のようなその他のパラメータを保持してもよい。
あるいは、
図7Cに示すように、タスクセットパラメータ保持部11は、各依存関係について、依存元タスクおよび依存先タスクの組合せを表す情報を保持してもよい。なお、
図7Cにおいて、依存番号は、依存関係を識別する情報である。一例として、依存番号1は、タスク1(依存元タスク)からタスク2(依存先タスク)への依存関係を表している。また、このような場合に、さらに上述のようなその他のパラメータを保持するためには、タスクセットパラメータ保持部11は、依存関係を保持するテーブルとは異なるテーブルとして、各タスクについてその他のパラメータを保持すればよい。
次に、ステップS103において、序列符号生成部121が、各タスクの序列符号を算出する処理の具体例について述べる。
例えば、序列符号生成部121は、タスクグラフにおいて序列が前方である(開始タスクに近い)、すなわち早い順序・時間帯に実行される可能性が高いタスクほど、より小さい数値の序列符号を割り当ててもよい。言い換えると、序列符号生成部121は、序列が後方である(開始タスクから遠い)、すなわち遅い順序・時間帯に実行される可能性が高いタスクほど、大きい数値の序列符号を付与してもよい。
なお、各タスクに割り当てられる序列符号は、実際の実行順序と異なっても構わない。これは、実際にタスクセットが実行される際のタスク実行順序は、一意には決定されないからである。一般的に、同時に実行可能状態になるタスクが複数ある場合には、いずれのタスクが先に実行されるかは、他の様々な要因を基に実行時に定まる。
このように、早い順序ほど小さい値の序列符号を割り当てる場合の序列符号の算出手法の具体例について説明する。ここでは、タスクセット全体の依存関係に基づく実行の流れを表す上述の
図6のタスクグラフを用いて、序列符号を算出する3つの具体的手法例について説明する。
一つ目の序列符号の算出手法の具体例として、トポロジカルソートを用いる手法について説明する。
図8に、トポロジカルソートを用いて各タスクに割り当てられた序列符号の一例を示す。
図8において、丸で囲まれた数値は、各タスクに割り当てられた序列符号を示す。ここで、トポロジカルソートとは、無閉路有向グラフを対象に、どのノード(本発明におけるタスク)も、その出力辺(本発明に基づく依存)の先のノードより前になるように、各ノードを順序付けして並べる手法である。この手法は、ノードの並びを結果として出力する。その結果、トポロジカルソートを用いて算出された序列符号は、各タスクに唯一の値となる。
なお、トポロジカルソートを実現するアルゴリズムとして、一般的には、公知文献「Kahn,A.B.(1962),“Topological sorting of large networks”,Communications of the ACM 5(11):558−562」に記載のKahnに基づくアルゴリズムや、深さ優先探索を用いるアルゴリズム等の公知技術が適用可能である。
二つ目の序列符号の算出手法の具体例として、幅優先探索を用いる手法について説明する。
この手法に基づくと、序列符号生成部121は、開始タスクから依存を介して連なる流れにおいて各タスクが何個目であるかを基に、タスクの序列符号を割り当てる。また、この手法を用いる場合、序列符号生成部121は、開始タスクから複数の流れを経るタスクについて、タスク数が最も多い流れに基づいて序列符号を割り当てる。
図9に、幅優先探索を用いて各タスクに割り当てられた序列符号の一例を示す。
図6のタスクグラフでは、タスク1が、開始タスクである。そこで、
図9に示すように、序列符号生成部121は、タスク1に序列符号0を割り当てる。また、タスク2、タスク4、および、タスク5は、それぞれ開始タスクから依存を介して連なる流れにおいて1つ目のタスクである。そこで、序列符号生成部121は、これらのタスクに序列符号1を割り当てる。また、タスク3は、開始タスクから依存を介して連なる流れにおいてタスク2に続く2つ目のタスクである。そこで、序列符号生成部121は、タスク3に序列符号2を割り当てる。また、タスク6は、タスク3に続く流れでは、開始タスクから3つ目のタスクであり、タスク4およびタスク5に続く流れでは、開始タスクから2つ目のタスクである。このとき、タスク数が最も多い流れを基に序列符号を割り当てると、序列符号生成部121は、タスク6に序列符号3を割り当てる。
なお、ここでは、開始タスクであるタスク1の序列符号として0を割り当てる例について説明したが、開始タスクに割り当てる序列符号は、その他の値でもよい。例えば、序列符号生成部121は、開始タスクの序列符号に1を割り当ててもよいし、その他の値を割り当ててもよい。
三つ目の序列符号の算出手法の具体例として、実行時間情報を用いる手法について説明する。
この手法を用いる場合、タスクセットパラメータ保持部11は、各タスクの実行時間を保持する。この例では、序列符号生成部121は、幅優先探索の手法を基本に、さらに各タスクの実行時間を考慮して各タスクに序列符号を割り当てる。具体的には、序列符号生成部121は、開始タスクから依存を介して連なる流れにおいて各タスクの実行時間の合計を基に、タスクの序列符号を割り当てる。
また、この手法を用いる場合、序列符号生成部121は、開始タスクから複数の流れを経るタスクについて、最も長い合計実行時間に基づいて序列符号を割り当てる。このように算出される序列符号は、実行時間が長いタスクおよび短いタスクの影響の違いを反映した序列符号となる。
図10に、実行時間情報を用いて各タスクに割り当てられた序列符号の一例を示す。
図10に示すように、序列符号生成部121は、開始タスクであるタスク1に対して、その実行時間である2を序列符号として割り当てる。また、序列符号生成部121は、タスク2に対して、タスク1の序列符号(実行時間)2に、タスク2の実行時間4を加算した6を序列符号として割り当てる。同様に、序列符号生成部121は、タスク4に対して、序列符号5を割り当て、タスク5に対して序列符号7を割り当てる。また、序列符号生成部121は、タスク6に対して、タスク6の依存元のタスクのうち序列符号が最も大きい(つまり合計実行時間が最も長い)タスク3の序列符号8に、タスク6の実行時間3を加えた11を序列符号として割り当てる。
なお、ステップS103において、序列符号生成部121は、序列重みの付与に用いる各タスクの序列符号を上述のように算出する代わりに、外部から入力される各タスクの序列符号を用いてもよい。
この場合、ステップS101において、各タスクの序列符号に相当する情報が外部から入力され、タスクセットパラメータ保持部11が保持する。そして、序列符号生成部121は、タスクセットパラメータ保持部11を参照して、各タスクの序列符号を取得してもよい。例えば、タスクセットパラメータ保持部11は、各タスクに関連する情報を、トポロジカルソートされたことに相当する順序で保持してもよい。この場合、序列符号生成部121は、タスクセットパラメータ保持部11に保持されている各タスクに関する情報の保持順序を、序列符号として取得すればよい。あるいは、タスクセットパラメータ保持部11は、各タスクに関するその他のパラメータとして、序列符号を表す数値を含む情報を保持してもよい。
次に、ステップS103において、重み付け部122が、各依存関係に序列重みを付与する処理の3つの具体例について説明する。
なお、ここでは、序列重みが重いほど、序列重みの数値を大きくする。また、配置部13は、序列重みの数値が大きい依存関係ほど、なるべく離れない配置(なるべく同じコアへの配置)を探索するとして説明する。
一つ目の序列重み付与の具体例として、タスクグラフにおいて序列が後方に近い(開始タスクから遠い)タスク間の依存関係ほど、序列重みを重くする手法について説明する。
前述のように、タスクグラフにおいて序列が後方に近いほど、異なるコア間に配置されたときのタスクセット全体の実行性能への影響が、大きいと考えられる。したがって、重み付け部122は、序列が後方になる(開始タスクから遠くなる)に従って、序列重みの数値を大きくすればよい。
序列が後方に近いほど序列重みを重くする単純な例として、
図8に示した各タスクに唯一の序列符号がトポロジカルソートを基に割り当てられた場合を考える。この場合、重み付け部122は、序列符号が小さいほうから順に全タスク数の1/n(nは正の整数を表し、“/”は除算を表す)個のタスクを依存元とする依存関係に対して、序列重み1を割り当ててもよい。同様に、重み付け部122は、全体の1/n〜2/nのタスクを依存元とする依存関係に対して序列重み2を割り当てていき、以降同様に繰り返してもよい。
序列が後方に近いほど序列重みを重くする他の例として、
図9に示した幅優先探索を基に各タスクに序列符号が割り当てられた場合を考える。このような場合、重み付け部122は、各依存関係の依存元タスク(先に実行されるタスク)に割り当てられた序列符号に基づいて、序列重みを付与してもよい。例えば、重み付け部122は、各依存関係の依存元のタスクに割り当てられた序列符号の数値をそのまま序列重みとして、依存関係に付与してもよい。
このように割り当てられた序列重みを、
図11に示す。
図11において、丸で囲まれた数値は序列符合を表し、二重丸で囲まれた数値は序列重みを表している。
図11では、序列符号0のタスク1からタスク2、4および5への各依存関係に、序列重み0が、付与されている。また、序列符号1のタスク2からタスク3、ならびに、序列符号1のタスク4および5からタスク6への各依存関係に、序列重み1が、付与されている。また、序列符号2のタスク3からタスク6への依存関係に、序列重み2が、付与されている。
序列が後方に近いほど序列重みを重くするさらに他の例として、
図10に示した幅優先探索に各タスクの実行時間情報を組み合わせて序列符号が割り当てられた場合を考える。この場合も、重み付け部122は、各依存関係の依存元タスク(先に実行されるタスク)に割り当てられた序列符号を基に、序列重みを付与してもよい。
このように割り当てられた序列重みを、
図12に示す。
図12において、丸で囲まれた数値は序列符合を表し、二重丸で囲まれた数値は序列重みを表している。
図12では、序列符号2のタスク1からタスク2、4および5への各依存関係に、序列重み2が、付与されている。また、序列符号6のタスク2からタスク3、序列符号5のタスク4からタスク6、および、序列符号7のタスク5からタスク6への各依存関係に、序列重みとして、それぞれ6、5および7が、付与されている。また、序列符号8のタスク3からタスク6への依存関係に、序列重み8が、付与されている。
このように、重み付け部122は、タスクグラフ上で序列が後方に近いタスク間の依存関係ほど、序列重みを重くする。
二つ目の序列重み付与の具体例として、依存関係を有する2つのタスクの序列が近いほど、序列重みを重くする手法について説明する。
ここでも、序列重みが重いほど、序列重みの数値を大きくする。単純な例として、重み付け部122は、タスクセット全体における序列符号の最大値から、依存関係を有する2つのタスクの序列符号の差の絶対値を減算した値を、依存関係の序列重みとしてもよい。あるいは、重み付け部122は、依存関係を有する2つのタスクの序列符号の差の絶対値の最大値から、該当する依存関係を有する2つのタスクの序列符号の差の絶対値を減算した値を、依存関係の序列重みとしてもよい。
例えば、
図9に示した幅優先探索に基づいて各タスクに序列符号が割り当てた場合を考える。
この場合、重み付け部122は、
図13に示すように、各依存関係に序列重みを付与する。
図13において、丸で囲まれた数値は序列符合を表し、破線の三角形で囲まれた数値は序列符号の差の絶対値を表し、二重丸で囲まれた数値は序列重みを表している。
図13において、タスク4から6、および、タスク5から6への依存関係の両端の序列符号の差の絶対値は、2である。また、それ以外の依存関係の両端の序列符号の差の絶対値は、1である。また、序列符号の最大値は、3である。したがって、タスク4から6、および、タスク5から6への各依存関係の序列重みは、最大値3から、両端の序列符号の差の絶対値2を減算した1となる。その他の依存関係の序列重みは、最大値3から、両端の序列符号の差の絶対値1を減算した2となる。
このように、重み付け部122は、タスクグラフ上での序列が近いタスク間の依存関係ほど、序列重みを重くする。
三つ目の序列重み付与の具体例として、上述した2つの手法を組み合わせる手法も可能である。
単純な例として、重み付け部122は、一つ目の例の全体の1/nずつ序列重みを大きくする手法で生成した序列重みの値に対して、二つ目の例の序列符号の最大値から、各依存関係の両端の序列符号の差の絶対値を減算して得た序列重みの値を乗算した値を、序列重みとしてもよい。
このように、重み付け部122は、タスクグラフ上で序列が後方に近いタスク間の依存関係ほど重く、さらに、タスクグラフ上での序列が近いタスク間の依存関係ほど重い序列重みを生成できる。
また、上述の手法の他にも、重み付け部122は、各依存関係に対して、依存関係を有する2つのタスクの序列に応じて、依存待ち時間の発生しやすさの程度を反映した序列重みを生成してもよい。また、重み付け部122は、それらの各種手法を組み合わせて序列重みを生成してもよい。
なお、一般的に、タスクセットに存在するタスク間の各依存関係として、その依存関係に関連する通信方法や転送データ量等が異なる依存関係が混在する。このため、本実施の形態としてのタスク配置装置1が対象とするタスクセットは、各タスク間の依存関係に関するこれらの他の要因に基づく重みをあらかじめパラメータとして有している場合がある。この場合、重み付け部122は、各依存関係について、あらかじめ付与された他の要因に基づく重みの値と、上述のように算出した序列重みの値とを組み合わせた値(例えば、乗算値)を、各依存関係に対して付与してもよい。
次に、ステップS104において、評価値算出部131が、評価値を算出する処理の具体例について説明する。
評価値算出部131は、コア間依存に付与された序列重みを用いて、タスク配置の良さを示す評価値を算出する。
単純な例として、評価値算出部131は、コア間依存に付与された序列重みを全て加算又は乗算した値を評価値として算出してもよい。
例えば、加算値を用いる場合、評価関数F
wは、次式(1)で表される。式(1)において、対象のタスク配置候補におけるコア間依存は、n個とする。また、w
iは、各コア間依存i(i=0〜n−1)に付与された序列重みを表す。
このように算出される評価値は、値が小さいほど、タスクセット全体の実行性能に対するコア間依存の影響が相対的に小さいことを表し、すなわち、タスク配置が良いことを表す。
評価値算出部131が式(1)に基づいて算出する評価値の一例について、
図14を用いて説明する。
図14は、あるタスク配置候補を表している。このタスク配置候補は、コア0に、タスク2、3および6を配置し、コア1にタスク1、4および5を配置している。また、このタスク配置候補におけるコア間依存は、タスク1から2への依存、タスク4から6への依存、および、タスク5から6への依存である。このように、このタスク配置候補におけるコア間依存数は、3本である。また、これらのコア間依存に付与された序列重みは、タスク1から2への依存関係に対して0、タスク4から6への依存関係およびタスク5から6への依存関係に対してそれぞれ1が付与されている。したがって、評価値算出部131は、このタスク配置候補について式(1)に基づく評価値として、2を算出する。
なお、
図14では、コア数が2個の場合の評価値の算出例について説明しているが、コア数が3以上の場合においても、評価値算出部131は、同様に評価値を算出可能である。
また、ステップS104において、評価値算出部131は、式(1)以外のその他の評価関数に基づいて評価値を算出してもよい。
例えば、評価値算出部131は、所定値から、コア間依存に付与された序列重みを全て減算した値を評価値として算出してもよい。この場合、このように算出される評価値は、値が大きいほど、タスクセット全体の実行性能に対するコア間依存の影響が相対的に小さいことを表し、すなわち、タスク配置が良いことを表す。
また、ステップS104において、評価値算出部131は、コア間依存に付与された序列重みに加えて、各タスクの起動周期、実行時間、または、必要メモリサイズ等を用いて評価値を算出してもよい。この場合、これらの起動周期、実行時間、または、必要メモリサイズ等の情報は、タスクセットパラメータ保持部11に保持される。
例えば、各コアに割り当てられたタスクの実行時間の合計が各コアで均等であることが適切とされるシステムを想定する。この場合、評価値算出部131は、コア間依存に付与された序列重みに基づく評価値に加えて、さらに各コアに割り当てられたタスクの実行時間合計の差に基づく評価値を追加で算出し、これらを統合した評価値を算出してもよい。
また、一定周期ごとに起動するタスクにおいて、各タスクのコアの利用率は、「タスクの実行時間÷タスクの起動周期」として計算できる。ここで、コアの利用率が各コアで均等であることが適切であるシステムを想定する。この場合、評価値算出部131は、コア間依存に付与された序列重みに基づく評価値に加えて、さらに各コアのコア利用率の差に基づく評価値を追加で算出し、これらを統合した評価値を算出してもよい。
また、必要メモリサイズが各コアで均等であることが適切であるシステムを想定する。この場合、評価値算出部131は、コア間依存に付与された序列重みに基づく評価値に加えて、さらに各コアの必要メモリサイズの差に基づく評価値を追加で算出し、これらを統合した評価値を算出してもよい。
このように、タスクセットパラメータ保持部11に、タスク間の依存関係に加えてその他のタスクセットパラメータが保持されている場合、評価値算出部131は、これらのその他のタスクセットパラメータを付随的に用いて評価値を算出できる。そして、その場合、配置部13は、これらのコア間依存以外の要素も考慮したタスク配置が可能となる。
このように、コア間依存に付与された序列重みを用いた評価値の算出手法には、様々な手法を適用可能である。
次に、ステップS105において、最適配置探索部132が用いる探索終了条件の具体例について説明する。
前述のように、最適配置探索部132は、タスク配置候補を生成し、生成したタスク配置候補について算出される評価値を用いて、生成されたタスク配置候補およびその評価値が、探索終了条件を満たすか否かを判定する。
ここで、評価値が小さいほどタスク配置が良いとすると、最適配置探索部132は、評価値を最小化するタスク配置候補を探索する。
このとき、タスク配置の探索終了条件は、最適配置探索部132が採用する最適化アルゴリズムに基づき異なる。例えば、最適化アルゴリズムとして単純な全探索が採用されている場合、探索終了条件は、生成可能な全てのタスク配置候補の生成が終了する。この場合、最適配置探索部132は、全てのタスク配置候補のうち、最小の評価値が算出されたタスク配置候補を最適化結果として出力する。
また、例えば、他の一般的な最適化アルゴリズムが採用されている場合、探索終了条件は、そのアルゴリズムに基づく評価値がこれ以上小さくならないとの判定や、タスク配置候補の生成を所定回数繰り返しても評価値が小さくならないとの判定でもよい。
以上詳細に説明したように、タスクセットパラメータ保持部11、序列重み付与部12、評価値算出部131及び最適配置探索部132は、それぞれ様々なデータ構造や様々な手法を採用できる。本実施の形態において、これらの各機能ブロックに採用されるデータ構造や手法は、様々に組み合わせて採用可能である。また、本実施の形態は、各機能ブロックにおいて、複数の手法の組み合わせも採用できる。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としてのタスク配置装置は、序列に基づく一様でないコア間依存の影響をより低減して、より性能のよいタスク配置ができる。
その理由は、序列重み付与部が、タスクセット全体の実行の流れのうち各タスクが実行され得る位置である序列に基づいて、タスク間に存在する各依存関係に対して序列重みを付与するからである。そして、配置部は、依存関係にしたがって1つ以上のコアにタスクを配置する際に、異なるコア間に配置されたタスク間の依存関係に付与された序列重みに基づいて算出される評価値がより良くなるように、タスク配置するからである。これに基づき、本実施の形態としてのタスク配置装置は、特許文献1に記載された装置に基づくコア間依存の数を最小化してもコア間依存待ち時間が生じるようなタスクセットに対して、より依存待ち時間を低減するタスク配置を生成可能となる。その結果、本発明の第1の実施の形態としてのタスク配置装置は、マルチコア性能をより充分に発揮可能なタスク配置を出力できる。すなわち、本実施の形態としてのタスク配置装置は、マルチコアシステムにおいて、序列に応じたコア間依存の実行性能への影響の大小を反映したタスク配置を実現できる。
また、本発明の第1の実施の形態としてのタスク配置装置は、タスクセットの実行が終了に近い位置での依存待ち時間をより削減して、より性能のよいタスク配置ができる。
その理由は、序列重み付与部が、タスクグラフにおける序列が後方に近いタスク間の依存関係ほど序列重みを重くするからである。この動作に基づき、配置部は、序列が後方に近いタスク間のコア間依存が多いほど配置が悪いことを表す評価値を算出する。そして、配置部が、その評価値をより良くするタスク配置を探索する。したがって、このように探索されるタスク配置では、タスクセット全体の実行終了に近い位置で依存関係を有するタスクほど、異なるコアに配置されにくくなる。したがって、本発明の第1の実施の形態としてのタスク配置装置は、タスクグラフ上で序列の後方に現れるクリティカルな依存の問題へ対処できる。
また、本発明の第1の実施の形態としてのタスク配置装置は、タスクセットにおける実行順序が近いタスク間の依存待ち時間をより削減して、より性能のよいタスク配置ができる。
その理由は、序列重み付与部が、タスクグラフにおける序列符号の差が小さいタスク間の依存関係ほど序列重みを重くするからである。この動作に基づき、配置部は、序列が近いタスク間のコア間依存が多いほど配置が悪いことを表す評価値を算出する。そして、配置部が、その評価値をより良くするタスク配置を探索する。したがって、このように探索されるタスク配置では、タスクセットにおける実行順序が近く依存関係を有するタスクほど、異なるコアに配置されにくくなる。したがって、本発明の第1の実施の形態としてのタスク配置装置は、タスクグラフ上での序列が近いタスク同士の依存の問題へ対処できる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明で参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して、本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としてのタスク配置装置2の機能の一例のブロックを、
図15に示す。
図15において、タスク配置装置2は、本発明の第1の実施の形態としてのタスク配置装置1と同一の構成に加えて、序列符号保持部24および序列重み保持部25をさらに含む。
ここで、タスク配置装置2は、本発明の第1の実施の形態としてのタスク配置装置1と同様に、
図1に示した構成を含むコンピュータ装置を用いて構成しても良い。その場合、序列符号保持部24および序列重み保持部25は、記憶装置1004を用いて構成される。なお、これらの各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
序列符号保持部24は、序列重み付与部12が算出した序列符号を保持する。序列符号保持部24が保持する情報の一例を
図16A及び
図16Bに示す。例えば、序列符号保持部24は、
図16Aに示すように、タスクごとに序列符号を保持してもよい。あるいは、序列符号保持部24は、
図16Bに示すように、序列符号の値ごとに、その序列符号が割り当てられたタスクを識別する情報を保持してもよい。例えば、
図16Bは、序列符号1が、タスク2、4および5に割り当てられていることを表している。
なお、序列符号保持部24は、タスクセットパラメータ保持部11に含まれてもよい。
例えば、序列符号生成部121を用いてトポロジカルソートに基づく序列符号が生成された場合のように各タスクに唯一の序列符号が割り当てられた場合、序列符号保持部24は、タスクセットパラメータ保持部11に保持されている各タスクに関する情報を序列符合の順序に並べ替えた表現を用いて、序列符号を保持してもよい。この動作に基づき、序列符号保持部24は、序列符合を保持するための記憶装置の領域を用いず、算出された序列符号を保持できる。
序列重み保持部25は、序列重み生成部12を用いて各依存関係に付与された序列重みを保持する。
以上のように構成されたタスク配置装置2の動作について、
図17を参照して説明する。
初めに、タスクセットパラメータ保持部11は、外部から入力されたタスクセットパラメータを保持する(ステップS101)。
次に、序列符号生成部121は、タスクセットパラメータ保持部11に保持されたタスクセットパラメータを参照し、各タスクの序列符号を算出する(ステップS201)。例えば、序列符号生成部121は、序列符号の算出手法として、本発明の第1の実施の形態で詳細に説明した手法を適用可能である。
次に、序列符号保持部24は、算出された序列符号を保持する(ステップS202)。
次に、重み付け部122は、序列符号保持部24に保持された序列符号に基づいて、各依存関係に対して序列重みを付与する(ステップS203)。例えば、重み付け部122は、重み付けの付与手法として、本発明の第1の実施の形態で詳細に説明した手法を適用可能である。
次に、序列重み保持部25は、重み付け部122を用いて生成された序列重みを保持する(ステップS204)。
次に、最適配置探索部132は、タスク配置候補を生成する(ステップS102)。
次に、評価値算出部131は、生成されたタスク配置候補について、タスク配置の良さを示す評価値である評価値を、序列重み保持部25に保持された序列重みを用いて算出する(ステップS104)。例えば、評価値算出部131は、評価値の算出手法として、本発明の第1の実施の形態で詳細に説明した手法を適用可能である。
次に、最適配置探索部132は、タスク配置候補および評価値が、タスク配置の探索終了条件を満たすか否かを判定する(ステップS105)。例えば、探索終了条件としては、本発明の第1の実施の形態で詳細に説明した条件が、適用可能である。
ここで、タスク配置の探索終了条件を満たさない場合、タスク配置装置2は、再度ステップS102からの処理を繰り返す。
一方、タスク配置の探索終了条件を満たす場合、最適配置探索部132は、タスク配置の最適化結果を出力する(ステップS106)。そして、タスク配置装置2は、動作を終了する。
なお、ステップS203において、重み付け部122は、タスク配置候補におけるコア間依存に対して、序列重みを付与してもよい。この場合、タスク配置装置2は、ステップS102においてタスク配置候補を生成後、ステップS203〜S204を実行してもよい。
以上で、本発明の第2の実施の形態の動作の説明を終了する。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としてのタスク配置装置は、マルチコアシステム向けにタスク配置する際に、コア間依存の依存待ち時間の発生しやすさを反映した序列重みを算出する処理を、より効率化できる。
その理由は、序列符号保持部が、序列重みの算出に用いる各タスクの序列符号を保持するからである。ここで、あるタスクが複数の依存関係を有する場合、序列重み付与部は、序列重みの算出のために、そのタスクの序列符号を複数回参照する。このような場合、一旦計算された序列符号の序列符号保持部の保持を基に、本発明の第2の実施の形態としてのタスク配置装置は、序列重み付与部の処理時間を、より短縮できるからである。
また、本発明の第2の実施の形態としてのタスク配置装置は、序列に基づき一様でないコア間依存の影響をより低減してより性能のよいタスク配置を探索する処理を、より効率化できる。
その理由は、序列重み保持部が、序列重み生成部を用いて生成された序列重みを保持するからである。ここで、序列重みは、一度計算すれば値が不変で、再計算が不要なことが多い。したがって、序列重みは、異なるタスク配置候補について評価値を算出するたびに再計算される必要がない。したがって、序列重み保持部の序列重みの保持を基に、本発明の第2の実施の形態としてのタスク配置装置は、タスク配置の探索時間を短縮できる。
なお、上述した本発明の各実施の形態において、序列符号は、タスクグラフ上で開始タスクに近いほど小さい値を持つとして主に説明したが、本発明における序列符号は、例えば、タスクグラフ上で開始タスクに近いほど大きい値を持ってもよい。
また、上述した本発明の各実施の形態において、序列重みは、依存待ち時間を発生しやすいほど大きい値を持つとして主に説明したが、本発明における序列重みは、例えば、依存待ち時間を発生しやすいほど小さい値を持ってもよい。
また、上述した本発明の各実施の形態において、評価値は、タスク配置が良いほど小さい値を持つとして主に説明したが、本発明における評価値は、タスク配置が良いほど大きい値を持ってもよい。その場合、配置部は、評価値をより大きくするタスク配置候補を探索すればよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したタスク配置装置の動作を、本発明のプログラムとしてコンピュータの記憶装置(記憶媒体)に格納しておき、係るプログラムをCPUが読み出して実行してもよい。そして、このような場合において、本発明は、係るプログラムのコード或いは記憶媒体を用いて構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持手段と、
前記タスクセットパラメータの参照を用いて、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列に基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与手段と、
前記タスクセットに属するタスクを前記依存関係にしたがって1つ以上のコアに配置する際に、異なるコアに配置される2つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置手段と、
を含むタスク配置装置。
(付記2)
前記序列重み付与手段は、
前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記1に記載のタスク配置装置。
(付記3)
前記序列重み付与手段は、
前記依存関係を有する2つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記1または付記2に記載のタスク配置装置。
(付記4)
前記序列重み付与手段は、
前記タスクセットパラメータ保持手段に保持された前記タスクセットパラメータに基づいて、前記序列重みの付与に用いるための前記序列を表す序列符号を算出する
ことを特徴とする付記1乃至付記3のいずれか1つに記載のタスク配置装置。
(付記5)
前記序列重み付与手段を用いて算出される序列符号を保持する序列符号保持手段をさらに含み、
前記序列重み付与手段は、
前記序列符号保持手段に保持された序列符号の参照を用いて、前記各依存関係に前記序列重みを付与する
ことを特徴とする付記4に記載のタスク配置装置。
(付記6)
前記序列重み付与手段を用いて付与された前記序列重みを保持する序列重み保持手段をさらに含み、
前記配置手段は、
前記序列重み付与手段に保持された序列重みを用いて前記評価値を算出する
ことを特徴とする付記1乃至付記5のいずれか1つに記載のタスク配置装置。
(付記7)
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持し、
前記タスクセットパラメータの参照を用いて、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列に基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与し、
前記タスクセットに属するタスクを前記依存関係にしたがって1つ以上のコアに配置する際に、異なるコアに配置される2つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する、
タスク配置方法。
(付記8)
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記7に記載のタスク配置方法。
(付記9)
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する2つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記7または付記8に記載のタスク配置方法。
(付記10)
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持処理と、
前記タスクセットパラメータの参照を用いて、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列に基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与処理と、
前記タスクセットに属するタスクを前記依存関係にしたがって1つ以上のコアに配置する際に、異なるコアに配置される2つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置処理と、
をコンピュータに実行させるプログラム。
(付記11)
前記序列重み付与処理において、前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記10に記載のプログラム。
(付記12)
前記序列重み付与処理において、前記依存関係を有する2つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記10または付記11に記載のコンピュータ・プログラム。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2011年10月21日に出願された日本出願特願2011−231283を基礎とする優先権を主張し、その開示の全てをここに取り込む。