(57)【特許請求の範囲】
【請求項１】
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持手段と、
前記タスクセットパラメータと、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列とに基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与手段と、
前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置手段と、
を含むタスク配置装置。
【請求項２】
前記序列重み付与手段は、
前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする請求項１に記載のタスク配置装置。
【請求項３】
前記序列重み付与手段は、
前記依存関係を有する２つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする請求項１または請求項２に記載のタスク配置装置。
【請求項４】
前記序列重み付与手段は、
前記タスクセットパラメータ保持手段に保持された前記タスクセットパラメータに基づいて、前記序列重みの付与に用いるための前記序列を表す序列符号を算出する
ことを特徴とする請求項１乃至請求項３のいずれか１項に記載のタスク配置装置。
【請求項５】
前記序列重み付与手段を用いて算出される序列符号を保持する序列符号保持手段をさらに含み、
前記序列重み付与手段は、
前記序列符号保持手段に保持された序列符号を基に、前記各依存関係に前記序列重みを付与する
ことを特徴とする請求項４に記載のタスク配置装置。
【請求項６】
前記序列重み付与手段を用いて付与された前記序列重みを保持する序列重み保持手段をさらに含み、
前記配置手段は、
前記序列重み付与手段に保持された序列重みを用いて前記評価値を算出する
ことを特徴とする請求項１乃至請求項５のいずれか１項に記載のタスク配置装置。
【請求項７】
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持し、
前記タスクセットパラメータと、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列とに基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与し、
前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する、
タスク配置方法。
【請求項８】
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする請求項７に記載のタスク配置方法。
【請求項９】
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する２つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする請求項７または請求項８に記載のタスク配置方法。
【請求項１０】
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持処理と、
前記タスクセットパラメータと、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列とに基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与処理と、
前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアに関し、特に、ＡＭＰ（Ａｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｉｎｇ）方式のマルチコア向けのタスク配置装置及びタスク配置方法に関する。
【背景技術】
【０００２】
近年のデジタル機器の高性能化及び低消費電力化要求の高まりを受け、組み込みＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）に複数のプロセッサ・コア（以下、単にコアとも記載する）を搭載するマルチコア構成が注目を集めている。このＬＳＩのマルチコア化は、システム制御を目的とするリアルタイムシステム等において、重要な技術となっている。マルチコアシステムは、主にＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｉｎｇ）方式とＡＭＰ方式とに大別される。
ＳＭＰ方式は、コアの空き状況、現在実行中のタスクの優先度等に応じてタスクが切り替わり、各タスクが、いずれのコア上でも実行され得る構成となる。このため、ＳＭＰ方式は、動的に負荷分散を可能とし、システム全体の性能を向上させる。しかし、動的な負荷分散は、リアルタイム性能の予測を困難とする。したがって、ＳＭＰ方式は、リアルタイムシステムへの適用には適さない。
一方、ＡＭＰ方式は、各タスクが、特定のコア上で実行される機能分散型の構成となる。このため、ＡＭＰ方式は、システムの挙動の予測が重要なリアルタイムシステムや、特定のハードウェアが接続されているコアが限定されるシステム等に好適である。
このようなＡＭＰ方式のマルチコアシステムは、タスクをどのコアに配置するかに基づき、性能が異なる。このため、ＡＭＰ方式のマルチコアシステムは、最適な実行状態となるように、様々なタスク配置を探索し、最適配置を決定する必要がある。
特許文献１には、このようなマルチコア向けのタスク配置を支援する装置が記載されている。特許文献１に記載の装置は、始めに、各コアに割り当てられた粒度に関する情報（粒度情報）を取得する。ここで、粒度とは、例えば、プロセッサの処理の単位であり、タスク、関数、関数を構成する処理の総称である。次に、この装置は、取得した粒度情報に基づいて、タスク毎あるいはタスクが有する関数毎に出現回数を算出し、算出した出現回数に関する情報（構造情報）を生成する。また、この装置は、取得された粒度情報に基づいて、タスク毎あるいはタスクが有する関数毎の、他タスクあるいは関数への依存に関する情報（依存情報）を生成する。そして、この装置は、粒度情報、構造情報、および、依存情報に基づいて、異なるコア間に存在する依存関係を表す情報を表示する。この構成に基づき、この特許文献１に記載の装置は、マルチコアシステムにおいて異なるコア間に存在する依存関係をより少なくするタスク配置を支援できる。
【特許文献１】特開２００７−２６４７３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１に記載された装置に基づくタスク配置は、コア間依存に基づく無駄時間を充分に削減できない場合があるという問題を生じ得る。
ここで、コア間依存とは、異なるコアに配置されたタスク同士が有する依存関係をいう。このようなコア間依存の存在は、あるコアがタスクを実行可能な空き状態であるにもかかわらず、そのコアに配置されたタスクが別のコア上のタスクの終了を待つ必要があるために実行できないという無駄時間の発生要因となる。このため、特許文献１に記載された装置は、コア間依存の数の最小化を基に、依存待ちに基づく無駄時間の削減にある程度の効果を奏する。
しかしながら、コア間依存の最小化では、無駄時間の削減が充分でない場合が、存在する。このような場合について以下に説明する。
例えば、タスク群（以下、タスクセットともいう）全体の実行が終了に近づくほど、タスク間の依存関係がクリティカルな問題となる場合がある。この理由について説明する。
タスクセットの実行開始直後では、多数のタスクが、実行可能状態になっている。このため、タスクセットの実行開始直後では、ある程度のコア間依存があっても、依存待ち時間が、あまり生じない。ところが、タスクセットの実行が進んだ状況では、多くのタスクの実行は、既に終了している。このため、依存待ちをしているタスク以外の実行可能なタスクが、少なくなる。つまり、タスクセット全体の実行の流れにおいて各タスクが実行され得る位置（以下、序列ともいう）が後方である（終了に近い）ほど、コア間依存に基づく依存待ちは、発生しやすい。
また、タスクセット全体の実行終了に近くない場合であっても、実行可能タスクが少ない状況が、発生し得る。例えば、タスクセット全体の実行の流れにおいて序列が近いタスク間のコア間依存が問題となる場合がある。その理由について説明する。
序列が近く、かつ、依存関係を有するタスク同士が異なるコアに配置された場合、依存元のタスクの実行終了が何らかの要因を基に遅れると、依存先のタスクが待たされる状況が発生する。つまり、序列が近いタスク同士のコア間依存は、各コアでの実行状況を基に、容易に依存待ちを発生し得る。
このように、コア間依存に基づくタスクセット全体の実行性能への影響は、その依存関係に関連する各タスクの序列に基づき一様ではない。
しかしながら、特許文献１に記載された装置は、コア間依存の実行性能への影響が関連タスクの序列に基づいて一様でないことを考慮しないため、コア間依存に基づく無駄時間を充分に削減できない。
本発明の目的は、上述の課題を解決し、ＡＭＰ方式のマルチコアシステム向けに、序列に基づいて一様でないコア間依存の影響をより低減して、より性能の良いタスク配置を実現できるタスク配置装置を提供することにある。
【課題を解決するための手段】
【０００４】
本発明のタスク配置装置は、配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持手段と、前記タスクセットパラメータと、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列とに基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与手段と、前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置手段と、を含む。
また、本発明のタスク配置方法は、配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持し、前記タスクセットパラメータと、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列とに基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与し、前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する。
また、本発明のプログラムは、配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持処理と、前記タスクセットパラメータと、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列とに基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与処理と、前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置処理と、をコンピュータに実行させる。
【発明の効果】
【０００５】
本発明によれば、序列に基づいて一様でないコア間依存の影響をより低減して、より性能の良いタスク配置を提供できる。
【図面の簡単な説明】
【０００６】
【図１】図１は、本発明の第１の実施の形態としてのタスク配置装置のハードウェア構成の一例を示すブロック図である。
【図２】図２は、本発明の第１の実施の形態としてのタスク配置装置の機能の一例を示すブロック図である。
【図３】図３は、本発明の第１の実施の形態における序列重み付与部の構成の一例を示すブロック図である。
【図４】図４は、本発明の第１の実施の形態における配置部の構成の一例を示すブロック図である。
【図５】図５は、本発明の第１の実施の形態としてのタスク配置装置の動作の一例を説明するフローチャートである。
【図６】図６は、本発明の第１の実施の形態としてのタスク配置装置が対象とするタスクセットの一例を示す模式図である。
【図７Ａ】図７Ａは、本発明の第１の実施の形態におけるタスクセットパラメータ保持部のデータ構造の一例を示す図である。
【図７Ｂ】図７Ｂは、本発明の第１の実施の形態におけるタスクセットパラメータ保持部のデータ構造の一例を示す図である。
【図７Ｃ】図７Ｃは、本発明の第１の実施の形態におけるタスクセットパラメータ保持部のデータ構造の一例を示す図である。
【図８】図８は、本発明の第１の実施の形態において各タスクに割り当てられる序列符号の一例を示す模式図である。
【図９】図９は、本発明の第１の実施の形態において各タスクに割り当てられる序列符号の他の一例を示す模式図である。
【図１０】図１０は、本発明の第１の実施の形態において各タスクに割り当てられる序列符号のさらに他の一例を示す模式図である。
【図１１】図１１は、本発明の第１の実施の形態において各依存関係に付与される序列重みの一例を示す模式図である。
【図１２】図１２は、本発明の第１の実施の形態において各依存関係に付与される序列重みの他の一例を示す模式図である。
【図１３】図１３は、本発明の第１の実施の形態において各依存関係に付与される序列重みのさらに他の一例を示す模式図である。
【図１４】図１４は、本発明の第１の実施の形態においてタスク配置候補に存在するコア間依存を説明するための模式図である。
【図１５】図１５は、本発明の第２の実施の形態としてのタスク配置装置の機能の一例を示すブロック図である。
【図１６Ａ】図１６Ａは、本発明の第２の実施の形態における序列符号保持部のデータ構造の一例を示す図である。
【図１６Ｂ】図１６Ｂは、本発明の第２の実施の形態における序列符号保持部のデータ構造の一例を示す図である。
【図１７】本発明の第２の実施の形態としてのタスク配置装置の動作の一例を説明するフローチャートである。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。以下に述べる本発明の各実施の形態としてのタスク配置装置は、各タスクが特定のコアで実行される機能分散型のＡＭＰ方式のマルチコアシステムを設計・実装する際に、タスクセットを構成する各タスクをいずれのコアに配置するかを決定する装置である。前述のように、ＡＭＰ方式のマルチコアシステムは、タスクがどのコアに配置されるかに基づいて性能が異なる。以下では、本発明の各実施の形態のタスク配置装置に基づき、マルチコアシステムの性能をより高めるタスク配置が可能となることについて説明する。なお、以降、本発明の各実施の形態において対象とするＡＭＰ方式のマルチコアシステムを、単にマルチコアシステムと記載する。
（第１の実施の形態）
本発明における第１の実施の形態としてのタスク配置装置１のハードウェア構成の一例を図１に示す。図１において、タスク配置装置１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１００２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１００３と、ハードディスク等の記憶装置１００４とを含み、コンピュータを構成している。
ＲＯＭ１００３および記憶装置１００４は、コンピュータを本実施の形態のタスク配置装置１として機能させるためのプログラムおよび各種データを記憶している。
ＣＰＵ１００１は、ＲＯＭ１００３および記憶装置１００４に記憶されたプログラムおよび各種データを、ＲＡＭ１００２に読み込んで、実行する。
次に、タスク配置装置１の機能ブロックの構成の一例を図２に示す。図２において、タスク配置装置１は、タスクセットパラメータ保持部１１と、序列重み付与部１２と、配置部１３と、を含む。
ここで、タスクセットパラメータ保持部１１は、例えば、記憶装置１００４を用いて構成される。また、序列重み付与部１２および配置部１３は、例えば、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１を用いて構成される。なお、タスク配置装置１の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
タスクセットパラメータ保持部１１は、外部から入力されるタスクセットパラメータを保持する。ここで、タスクセットパラメータとは、タスクセット（配置対象の１つ以上のタスクの集合）を構成する個々のタスクの特性を表す情報である。タスクセットパラメータは、タスク間の依存関係を表す情報を含む。また、タスクセットパラメータは、その他、タスクの起動周期、実行時間、必要メモリサイズなどをそれぞれ表す情報を含んでもよい。
また、外部から入力されるタスクセットパラメータが、ファイル等のように他の機能ブロックからも参照可能に保持された形式で入力された場合、タスクセットパラメータ保持部１１は、タスクセットパラメータをコピーして保持する必要はない。この場合、タスクセットパラメータ保持部１１は、そのファイル等を示す情報を保持すればよい。
また、外部から入力されるタスクセットパラメータに後述の序列を表す情報が含まれる場合、タスクセットパラメータ保持部１１は、各タスクの序列を表す情報をさらに保持してもよい。
序列重み付与部１２は、タスクセットパラメータ保持部１１に保持されたタスクセットパラメータを参照し、各タスクの序列に基づいて各依存関係に対して序列重みを付与する。ここで、各タスクの序列とは、依存関係に基づくタスクセット全体の実行の流れにおいて、各タスクが実行され得る位置をいう。また、序列重みとは、序列に基づく重みを表す係数である。具体的には、序列重みは、その依存関係に基づく実行待ち時間の発生しやすさの程度を表す係数といえる。このような実行待ち時間の発生しやすさは、その依存関係に関連する関連タスクの序列に基づいて変化する。そのため、序列重みは、序列に基づく情報となる。
詳細には、序列重み付与部１２は、図３に示すように、序列符号生成部１２１と、重み付け部１２２とを含む。
序列符号生成部１２１は、対象のタスクセットにおける各タスクの序列を表す序列符号を生成する。具体的には、序列符号生成部１２１は、各タスクの序列符号を、タスクセットパラメータ保持部１１に保持されたタスクセットパラメータに基づいて算出してもよい。
あるいは、タスクセットパラメータ保持部１１に、既に各タスクの序列を表す情報が保持されている場合、序列符号生成部１２１は、序列符号を算出する処理を省略し、タスクセットパラメータ保持部１１から各タスクの序列符号を取得すればよい。この場合、タスクセットパラメータ保持部１１は、序列符号を保持してもよいし、各タスクに関する情報を序列符号に相当する順序で保持してもよい。
重み付け部１２２は、序列符号生成部１２１を用いて生成された（または取得された）序列符号に基づいて、タスク間の各依存関係に対して序列重みを付与する。
例えば、重み付け部１２２は、依存関係を有する各タスクの序列がタスクセット全体の実行の流れにおいて終了に近いほど、序列重みを重くしてもよい。また、例えば、重み付け部１２２は、依存関係を有する２つのタスクの序列が近いほど、序列重みを重くしてもよい。ここで、序列重みが重いとは、その依存関係に基づく依存待ち時間が、より発生しやすいことをいう。序列重みの値は、重いほど大きくても良いし、重いほど小さくてもよい。
配置部１３は、タスクセットに属するタスクを依存関係にしたがって、１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された序列重みを用いて算出される評価値に基づいて、タスクを配置する。なお、以降、異なるコアに配置される２つのタスク間の依存関係を、単にコア間依存とも記載する。
詳細には、配置部１３は、図４に示すように、評価値算出部１３１と、最適配置探索部１３２と、を含む。
評価値算出部１３１は、後述のタスク配置候補について、その配置の良さを表す評価値を算出する。具体的には、評価値算出部１３１は、コア間依存に付与された序列重みを用いて評価値を算出する。
最適配置探索部１３２は、タスクセットを依存関係にしたがって１つ以上のコアにタスクを配置し、タスク配置候補を生成する。そして、最適配置探索部１３２は、評価値算出部１３１を用いて算出された評価値が良好なタスク配置の候補を、探索する。
ここで、最適配置探索部１３２に適用可能な最も単純な探索手法としては、全探索が挙げられる。全探索を用いる場合、最適配置探索部１３２は、全てのタスク配置候補を生成し、その中で最も評価値が良好な配置を探索結果として出力する。
ただし、最適配置探索部１３２には、全探索よりも効率的な探索手法として、分枝限定法、グリーディー法、遺伝的アルゴリズム等の一般に知られる高速な探索手法の適用が、より望ましい。
以上のように構成されるタスク配置装置１の動作について、図５を参照して説明する。
初めに、タスクセットパラメータ保持部１１は、外部から入力されたタスクセットパラメータを保持する（ステップＳ１０１）。
次に、最適配置探索部１３２は、タスク配置候補（どのタスクをどのコアに配置するかの候補データ）を生成する（Ｓ１０２）。
次に、序列符号生成部１２１は、タスクセットパラメータ保持部１１に保持されたタスクセットパラメータを参照して、各タスクの序列符号を求める。前述のように、序列符号生成部１２１は、各タスクの序列符号を算出してもよいし、既に各タスクに割り当てられている序列符号を取得してもよい。そして、重み付け部１２２は、各タスクの序列符号に基づいて序列重みを生成する（ステップＳ１０３）。
このとき、重み付け部１２２は、タスクセットに存在する全ての依存関係について序列重みを付与してもよい。
ただし、重み付け部１２２は、評価値算出部１３１で必要となる依存関係について序列重みを付与してもよい。
この動作に基づき、タスク配置装置１は、付与処理の効率化を図れる。例えば、評価値算出部１３１が、コア間依存に付与された序列重みを用いて評価値を算出する場合、重み付け部１２２は、ステップＳ１０２で生成したタスク配置候補におけるコア間依存に対して、序列重みを付与すればよい。
なお、全ての依存関係について序列重みを付与する場合、上述のステップＳ１０２およびＳ１０３は、順不同の処理である。例えば、タスク配置装置１は、ステップＳ１０３、ステップＳ１０２の順での実行や、ステップＳ１０２およびステップＳ１０３の同時実行も可能である。
次に、評価値算出部１３１は、ステップＳ１０２で生成されたタスク配置候補について、ステップＳ１０３でコア間依存に付与された序列重みを用いて、タスク配置の良さを示す評価値を算出する（ステップＳ１０４）。
次に、最適配置探索部１３２は、生成されたタスク配置候補およびその評価値が、タスク配置の探索終了条件を満たすか否かを判断する（ステップＳ１０５）。
ここで、タスク配置の探索終了条件を満たさない場合、タスク配置装置１は、再度、ステップＳ１０２からの処理を繰り返す。
一方、タスク配置の探索終了条件を満たす場合、最適配置探索部１３２は、これまでに生成したタスク配置候補の中で、最も評価値のよいタスク配置候補を最適化結果として出力する（ステップＳ１０６）。そして、タスク配置装置１は、動作を終了する。
ここで、タスク配置の探索終了条件は、最適配置探索部１３２に採用される最適化アルゴリズムに従い異なる。例えば、最適化アルゴリズムとして単純な全探索が用いられる場合、タスク配置の探索終了条件は、生成し得る全てのタスク配置候補の生成終了となる。この場合、最適配置探索部１３２は、全てのタスク配置候補のうち、最適な評価値を持つタスク配置候補を、最適化結果として出力する。
また、例えば、最適化アルゴリズムとして他の一般的な最適化アルゴリズムが採用される場合、タスク配置の探索終了条件は、その最適化アルゴリズムにおいて評価値がこれ以上良くならないとの判断でもよい。あるいは、タスク配置の探索終了条件は、タスク配置候補の生成を所定回数繰り返しても評価値が改善しないとの判断でもよい。
以上で、タスク配置装置１の動作の説明を終了する。
次に、本発明の第１の実施の形態としてのタスク配置装置１の詳細な構成および動作について具体例を用いて説明する。
まず、ステップＳ１０１において、タスクセットパラメータ保持部１１に保持されるタスクセットパラメータの具体例について、図６及び図７Ａ〜図７Ｃを参照して説明する。
図６は、タスク１〜タスク６で構成されるタスクセットに存在する依存関係をグラフ表現した図である。以降、このようなグラフを、タスクグラフとも記載する。このようなタスクグラフにおいて、タスク間を結ぶ矢印は、両端のタスク間の依存関係を表す。また、依存関係を表す矢印は、終点側のタスクの開始に、始点側のタスクの終了が必要であることを表す。このようなタスクグラフは、タスクセット全体の依存関係に基づく実行の流れを表しているともいえる。
このようなタスクグラフで表されるタスクセットのタスクセットパラメータについて、そのデータ構造の一例を図７Ａから図７Ｃに示す。
例えば、図７Ａに示すように、タスクセットパラメータ保持部１１は、タスクセットを構成する各タスクについて、依存先タスクを対応付けて保持してもよい。例えば、図７Ａでは、タスク１について、その依存先タスクとして、タスク２、４および５が保持されている。また、タスクセットパラメータ保持部１１は、各タスクについて、さらにその他のパラメータを保持してもよい。その他のパラメータは、例えば、前述のように、タスクの起動周期、実行時間、必要メモリサイズでもよい。
あるいは、図７Ｂに示すように、タスクセットパラメータ保持部１１は、タスクセットを構成する各タスクについて、依存元タスクを対応付けて保持してもよい。例えば、図７Ｂでは、タスク６について、その依存元タスクとして、タスク３、４および５が保持されている。また、この場合も、タスクセットパラメータ保持部１１は、各タスクについて、さらに、上述のようなその他のパラメータを保持してもよい。
あるいは、図７Ｃに示すように、タスクセットパラメータ保持部１１は、各依存関係について、依存元タスクおよび依存先タスクの組合せを表す情報を保持してもよい。なお、図７Ｃにおいて、依存番号は、依存関係を識別する情報である。一例として、依存番号１は、タスク１（依存元タスク）からタスク２（依存先タスク）への依存関係を表している。また、このような場合に、さらに上述のようなその他のパラメータを保持するためには、タスクセットパラメータ保持部１１は、依存関係を保持するテーブルとは異なるテーブルとして、各タスクについてその他のパラメータを保持すればよい。
次に、ステップＳ１０３において、序列符号生成部１２１が、各タスクの序列符号を算出する処理の具体例について述べる。
例えば、序列符号生成部１２１は、タスクグラフにおいて序列が前方である（開始タスクに近い）、すなわち早い順序・時間帯に実行される可能性が高いタスクほど、より小さい数値の序列符号を割り当ててもよい。言い換えると、序列符号生成部１２１は、序列が後方である（開始タスクから遠い）、すなわち遅い順序・時間帯に実行される可能性が高いタスクほど、大きい数値の序列符号を付与してもよい。
なお、各タスクに割り当てられる序列符号は、実際の実行順序と異なっても構わない。これは、実際にタスクセットが実行される際のタスク実行順序は、一意には決定されないからである。一般的に、同時に実行可能状態になるタスクが複数ある場合には、いずれのタスクが先に実行されるかは、他の様々な要因を基に実行時に定まる。
このように、早い順序ほど小さい値の序列符号を割り当てる場合の序列符号の算出手法の具体例について説明する。ここでは、タスクセット全体の依存関係に基づく実行の流れを表す上述の図６のタスクグラフを用いて、序列符号を算出する３つの具体的手法例について説明する。
一つ目の序列符号の算出手法の具体例として、トポロジカルソートを用いる手法について説明する。
図８に、トポロジカルソートを用いて各タスクに割り当てられた序列符号の一例を示す。図８において、丸で囲まれた数値は、各タスクに割り当てられた序列符号を示す。ここで、トポロジカルソートとは、無閉路有向グラフを対象に、どのノード（本発明におけるタスク）も、その出力辺（本発明に基づく依存）の先のノードより前になるように、各ノードを順序付けして並べる手法である。この手法は、ノードの並びを結果として出力する。その結果、トポロジカルソートを用いて算出された序列符号は、各タスクに唯一の値となる。
なお、トポロジカルソートを実現するアルゴリズムとして、一般的には、公知文献「Ｋａｈｎ，Ａ．Ｂ．（１９６２），“Ｔｏｐｏｌｏｇｉｃａｌ  ｓｏｒｔｉｎｇ  ｏｆ  ｌａｒｇｅ  ｎｅｔｗｏｒｋｓ”，Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ  ５（１１）：５５８−５６２」に記載のＫａｈｎに基づくアルゴリズムや、深さ優先探索を用いるアルゴリズム等の公知技術が適用可能である。
二つ目の序列符号の算出手法の具体例として、幅優先探索を用いる手法について説明する。
この手法に基づくと、序列符号生成部１２１は、開始タスクから依存を介して連なる流れにおいて各タスクが何個目であるかを基に、タスクの序列符号を割り当てる。また、この手法を用いる場合、序列符号生成部１２１は、開始タスクから複数の流れを経るタスクについて、タスク数が最も多い流れに基づいて序列符号を割り当てる。
図９に、幅優先探索を用いて各タスクに割り当てられた序列符号の一例を示す。
図６のタスクグラフでは、タスク１が、開始タスクである。そこで、図９に示すように、序列符号生成部１２１は、タスク１に序列符号０を割り当てる。また、タスク２、タスク４、および、タスク５は、それぞれ開始タスクから依存を介して連なる流れにおいて１つ目のタスクである。そこで、序列符号生成部１２１は、これらのタスクに序列符号１を割り当てる。また、タスク３は、開始タスクから依存を介して連なる流れにおいてタスク２に続く２つ目のタスクである。そこで、序列符号生成部１２１は、タスク３に序列符号２を割り当てる。また、タスク６は、タスク３に続く流れでは、開始タスクから３つ目のタスクであり、タスク４およびタスク５に続く流れでは、開始タスクから２つ目のタスクである。このとき、タスク数が最も多い流れを基に序列符号を割り当てると、序列符号生成部１２１は、タスク６に序列符号３を割り当てる。
なお、ここでは、開始タスクであるタスク１の序列符号として０を割り当てる例について説明したが、開始タスクに割り当てる序列符号は、その他の値でもよい。例えば、序列符号生成部１２１は、開始タスクの序列符号に１を割り当ててもよいし、その他の値を割り当ててもよい。
三つ目の序列符号の算出手法の具体例として、実行時間情報を用いる手法について説明する。
この手法を用いる場合、タスクセットパラメータ保持部１１は、各タスクの実行時間を保持する。この例では、序列符号生成部１２１は、幅優先探索の手法を基本に、さらに各タスクの実行時間を考慮して各タスクに序列符号を割り当てる。具体的には、序列符号生成部１２１は、開始タスクから依存を介して連なる流れにおいて各タスクの実行時間の合計を基に、タスクの序列符号を割り当てる。
また、この手法を用いる場合、序列符号生成部１２１は、開始タスクから複数の流れを経るタスクについて、最も長い合計実行時間に基づいて序列符号を割り当てる。このように算出される序列符号は、実行時間が長いタスクおよび短いタスクの影響の違いを反映した序列符号となる。
図１０に、実行時間情報を用いて各タスクに割り当てられた序列符号の一例を示す。
図１０に示すように、序列符号生成部１２１は、開始タスクであるタスク１に対して、その実行時間である２を序列符号として割り当てる。また、序列符号生成部１２１は、タスク２に対して、タスク１の序列符号（実行時間）２に、タスク２の実行時間４を加算した６を序列符号として割り当てる。同様に、序列符号生成部１２１は、タスク４に対して、序列符号５を割り当て、タスク５に対して序列符号７を割り当てる。また、序列符号生成部１２１は、タスク６に対して、タスク６の依存元のタスクのうち序列符号が最も大きい（つまり合計実行時間が最も長い）タスク３の序列符号８に、タスク６の実行時間３を加えた１１を序列符号として割り当てる。
なお、ステップＳ１０３において、序列符号生成部１２１は、序列重みの付与に用いる各タスクの序列符号を上述のように算出する代わりに、外部から入力される各タスクの序列符号を用いてもよい。
この場合、ステップＳ１０１において、各タスクの序列符号に相当する情報が外部から入力され、タスクセットパラメータ保持部１１が保持する。そして、序列符号生成部１２１は、タスクセットパラメータ保持部１１を参照して、各タスクの序列符号を取得してもよい。例えば、タスクセットパラメータ保持部１１は、各タスクに関連する情報を、トポロジカルソートされたことに相当する順序で保持してもよい。この場合、序列符号生成部１２１は、タスクセットパラメータ保持部１１に保持されている各タスクに関する情報の保持順序を、序列符号として取得すればよい。あるいは、タスクセットパラメータ保持部１１は、各タスクに関するその他のパラメータとして、序列符号を表す数値を含む情報を保持してもよい。
次に、ステップＳ１０３において、重み付け部１２２が、各依存関係に序列重みを付与する処理の３つの具体例について説明する。
なお、ここでは、序列重みが重いほど、序列重みの数値を大きくする。また、配置部１３は、序列重みの数値が大きい依存関係ほど、なるべく離れない配置（なるべく同じコアへの配置）を探索するとして説明する。
一つ目の序列重み付与の具体例として、タスクグラフにおいて序列が後方に近い（開始タスクから遠い）タスク間の依存関係ほど、序列重みを重くする手法について説明する。
前述のように、タスクグラフにおいて序列が後方に近いほど、異なるコア間に配置されたときのタスクセット全体の実行性能への影響が、大きいと考えられる。したがって、重み付け部１２２は、序列が後方になる（開始タスクから遠くなる）に従って、序列重みの数値を大きくすればよい。
序列が後方に近いほど序列重みを重くする単純な例として、図８に示した各タスクに唯一の序列符号がトポロジカルソートを基に割り当てられた場合を考える。この場合、重み付け部１２２は、序列符号が小さいほうから順に全タスク数の１／ｎ（ｎは正の整数を表し、“／”は除算を表す）個のタスクを依存元とする依存関係に対して、序列重み１を割り当ててもよい。同様に、重み付け部１２２は、全体の１／ｎ〜２／ｎのタスクを依存元とする依存関係に対して序列重み２を割り当てていき、以降同様に繰り返してもよい。
序列が後方に近いほど序列重みを重くする他の例として、図９に示した幅優先探索を基に各タスクに序列符号が割り当てられた場合を考える。このような場合、重み付け部１２２は、各依存関係の依存元タスク（先に実行されるタスク）に割り当てられた序列符号に基づいて、序列重みを付与してもよい。例えば、重み付け部１２２は、各依存関係の依存元のタスクに割り当てられた序列符号の数値をそのまま序列重みとして、依存関係に付与してもよい。
このように割り当てられた序列重みを、図１１に示す。図１１において、丸で囲まれた数値は序列符合を表し、二重丸で囲まれた数値は序列重みを表している。図１１では、序列符号０のタスク１からタスク２、４および５への各依存関係に、序列重み０が、付与されている。また、序列符号１のタスク２からタスク３、ならびに、序列符号１のタスク４および５からタスク６への各依存関係に、序列重み１が、付与されている。また、序列符号２のタスク３からタスク６への依存関係に、序列重み２が、付与されている。
序列が後方に近いほど序列重みを重くするさらに他の例として、図１０に示した幅優先探索に各タスクの実行時間情報を組み合わせて序列符号が割り当てられた場合を考える。この場合も、重み付け部１２２は、各依存関係の依存元タスク（先に実行されるタスク）に割り当てられた序列符号を基に、序列重みを付与してもよい。
このように割り当てられた序列重みを、図１２に示す。
図１２において、丸で囲まれた数値は序列符合を表し、二重丸で囲まれた数値は序列重みを表している。図１２では、序列符号２のタスク１からタスク２、４および５への各依存関係に、序列重み２が、付与されている。また、序列符号６のタスク２からタスク３、序列符号５のタスク４からタスク６、および、序列符号７のタスク５からタスク６への各依存関係に、序列重みとして、それぞれ６、５および７が、付与されている。また、序列符号８のタスク３からタスク６への依存関係に、序列重み８が、付与されている。
このように、重み付け部１２２は、タスクグラフ上で序列が後方に近いタスク間の依存関係ほど、序列重みを重くする。
二つ目の序列重み付与の具体例として、依存関係を有する２つのタスクの序列が近いほど、序列重みを重くする手法について説明する。
ここでも、序列重みが重いほど、序列重みの数値を大きくする。単純な例として、重み付け部１２２は、タスクセット全体における序列符号の最大値から、依存関係を有する２つのタスクの序列符号の差の絶対値を減算した値を、依存関係の序列重みとしてもよい。あるいは、重み付け部１２２は、依存関係を有する２つのタスクの序列符号の差の絶対値の最大値から、該当する依存関係を有する２つのタスクの序列符号の差の絶対値を減算した値を、依存関係の序列重みとしてもよい。
例えば、図９に示した幅優先探索に基づいて各タスクに序列符号が割り当てた場合を考える。
この場合、重み付け部１２２は、図１３に示すように、各依存関係に序列重みを付与する。図１３において、丸で囲まれた数値は序列符合を表し、破線の三角形で囲まれた数値は序列符号の差の絶対値を表し、二重丸で囲まれた数値は序列重みを表している。図１３において、タスク４から６、および、タスク５から６への依存関係の両端の序列符号の差の絶対値は、２である。また、それ以外の依存関係の両端の序列符号の差の絶対値は、１である。また、序列符号の最大値は、３である。したがって、タスク４から６、および、タスク５から６への各依存関係の序列重みは、最大値３から、両端の序列符号の差の絶対値２を減算した１となる。その他の依存関係の序列重みは、最大値３から、両端の序列符号の差の絶対値１を減算した２となる。
このように、重み付け部１２２は、タスクグラフ上での序列が近いタスク間の依存関係ほど、序列重みを重くする。
三つ目の序列重み付与の具体例として、上述した２つの手法を組み合わせる手法も可能である。
単純な例として、重み付け部１２２は、一つ目の例の全体の１／ｎずつ序列重みを大きくする手法で生成した序列重みの値に対して、二つ目の例の序列符号の最大値から、各依存関係の両端の序列符号の差の絶対値を減算して得た序列重みの値を乗算した値を、序列重みとしてもよい。
このように、重み付け部１２２は、タスクグラフ上で序列が後方に近いタスク間の依存関係ほど重く、さらに、タスクグラフ上での序列が近いタスク間の依存関係ほど重い序列重みを生成できる。
また、上述の手法の他にも、重み付け部１２２は、各依存関係に対して、依存関係を有する２つのタスクの序列に応じて、依存待ち時間の発生しやすさの程度を反映した序列重みを生成してもよい。また、重み付け部１２２は、それらの各種手法を組み合わせて序列重みを生成してもよい。
なお、一般的に、タスクセットに存在するタスク間の各依存関係として、その依存関係に関連する通信方法や転送データ量等が異なる依存関係が混在する。このため、本実施の形態としてのタスク配置装置１が対象とするタスクセットは、各タスク間の依存関係に関するこれらの他の要因に基づく重みをあらかじめパラメータとして有している場合がある。この場合、重み付け部１２２は、各依存関係について、あらかじめ付与された他の要因に基づく重みの値と、上述のように算出した序列重みの値とを組み合わせた値（例えば、乗算値）を、各依存関係に対して付与してもよい。
次に、ステップＳ１０４において、評価値算出部１３１が、評価値を算出する処理の具体例について説明する。
評価値算出部１３１は、コア間依存に付与された序列重みを用いて、タスク配置の良さを示す評価値を算出する。
単純な例として、評価値算出部１３１は、コア間依存に付与された序列重みを全て加算又は乗算した値を評価値として算出してもよい。
例えば、加算値を用いる場合、評価関数Ｆｗは、次式（１）で表される。式（１）において、対象のタスク配置候補におけるコア間依存は、ｎ個とする。また、ｗｉは、各コア間依存ｉ（ｉ＝０〜ｎ−１）に付与された序列重みを表す。
0005983623.tif 000002
このように算出される評価値は、値が小さいほど、タスクセット全体の実行性能に対するコア間依存の影響が相対的に小さいことを表し、すなわち、タスク配置が良いことを表す。
評価値算出部１３１が式（１）に基づいて算出する評価値の一例について、図１４を用いて説明する。
図１４は、あるタスク配置候補を表している。このタスク配置候補は、コア０に、タスク２、３および６を配置し、コア１にタスク１、４および５を配置している。また、このタスク配置候補におけるコア間依存は、タスク１から２への依存、タスク４から６への依存、および、タスク５から６への依存である。このように、このタスク配置候補におけるコア間依存数は、３本である。また、これらのコア間依存に付与された序列重みは、タスク１から２への依存関係に対して０、タスク４から６への依存関係およびタスク５から６への依存関係に対してそれぞれ１が付与されている。したがって、評価値算出部１３１は、このタスク配置候補について式（１）に基づく評価値として、２を算出する。
なお、図１４では、コア数が２個の場合の評価値の算出例について説明しているが、コア数が３以上の場合においても、評価値算出部１３１は、同様に評価値を算出可能である。
また、ステップＳ１０４において、評価値算出部１３１は、式（１）以外のその他の評価関数に基づいて評価値を算出してもよい。
例えば、評価値算出部１３１は、所定値から、コア間依存に付与された序列重みを全て減算した値を評価値として算出してもよい。この場合、このように算出される評価値は、値が大きいほど、タスクセット全体の実行性能に対するコア間依存の影響が相対的に小さいことを表し、すなわち、タスク配置が良いことを表す。
また、ステップＳ１０４において、評価値算出部１３１は、コア間依存に付与された序列重みに加えて、各タスクの起動周期、実行時間、または、必要メモリサイズ等を用いて評価値を算出してもよい。この場合、これらの起動周期、実行時間、または、必要メモリサイズ等の情報は、タスクセットパラメータ保持部１１に保持される。
例えば、各コアに割り当てられたタスクの実行時間の合計が各コアで均等であることが適切とされるシステムを想定する。この場合、評価値算出部１３１は、コア間依存に付与された序列重みに基づく評価値に加えて、さらに各コアに割り当てられたタスクの実行時間合計の差に基づく評価値を追加で算出し、これらを統合した評価値を算出してもよい。
また、一定周期ごとに起動するタスクにおいて、各タスクのコアの利用率は、「タスクの実行時間÷タスクの起動周期」として計算できる。ここで、コアの利用率が各コアで均等であることが適切であるシステムを想定する。この場合、評価値算出部１３１は、コア間依存に付与された序列重みに基づく評価値に加えて、さらに各コアのコア利用率の差に基づく評価値を追加で算出し、これらを統合した評価値を算出してもよい。
また、必要メモリサイズが各コアで均等であることが適切であるシステムを想定する。この場合、評価値算出部１３１は、コア間依存に付与された序列重みに基づく評価値に加えて、さらに各コアの必要メモリサイズの差に基づく評価値を追加で算出し、これらを統合した評価値を算出してもよい。
このように、タスクセットパラメータ保持部１１に、タスク間の依存関係に加えてその他のタスクセットパラメータが保持されている場合、評価値算出部１３１は、これらのその他のタスクセットパラメータを付随的に用いて評価値を算出できる。そして、その場合、配置部１３は、これらのコア間依存以外の要素も考慮したタスク配置が可能となる。
このように、コア間依存に付与された序列重みを用いた評価値の算出手法には、様々な手法を適用可能である。
次に、ステップＳ１０５において、最適配置探索部１３２が用いる探索終了条件の具体例について説明する。
前述のように、最適配置探索部１３２は、タスク配置候補を生成し、生成したタスク配置候補について算出される評価値を用いて、生成されたタスク配置候補およびその評価値が、探索終了条件を満たすか否かを判定する。
ここで、評価値が小さいほどタスク配置が良いとすると、最適配置探索部１３２は、評価値を最小化するタスク配置候補を探索する。
このとき、タスク配置の探索終了条件は、最適配置探索部１３２が採用する最適化アルゴリズムに基づき異なる。例えば、最適化アルゴリズムとして単純な全探索が採用されている場合、探索終了条件は、生成可能な全てのタスク配置候補の生成が終了する。この場合、最適配置探索部１３２は、全てのタスク配置候補のうち、最小の評価値が算出されたタスク配置候補を最適化結果として出力する。
また、例えば、他の一般的な最適化アルゴリズムが採用されている場合、探索終了条件は、そのアルゴリズムに基づく評価値がこれ以上小さくならないとの判定や、タスク配置候補の生成を所定回数繰り返しても評価値が小さくならないとの判定でもよい。
以上詳細に説明したように、タスクセットパラメータ保持部１１、序列重み付与部１２、評価値算出部１３１及び最適配置探索部１３２は、それぞれ様々なデータ構造や様々な手法を採用できる。本実施の形態において、これらの各機能ブロックに採用されるデータ構造や手法は、様々に組み合わせて採用可能である。また、本実施の形態は、各機能ブロックにおいて、複数の手法の組み合わせも採用できる。
次に、本発明の第１の実施の形態の効果について述べる。
本発明の第１の実施の形態としてのタスク配置装置は、序列に基づく一様でないコア間依存の影響をより低減して、より性能のよいタスク配置ができる。
その理由は、序列重み付与部が、タスクセット全体の実行の流れのうち各タスクが実行され得る位置である序列に基づいて、タスク間に存在する各依存関係に対して序列重みを付与するからである。そして、配置部は、依存関係にしたがって１つ以上のコアにタスクを配置する際に、異なるコア間に配置されたタスク間の依存関係に付与された序列重みに基づいて算出される評価値がより良くなるように、タスク配置するからである。これに基づき、本実施の形態としてのタスク配置装置は、特許文献１に記載された装置に基づくコア間依存の数を最小化してもコア間依存待ち時間が生じるようなタスクセットに対して、より依存待ち時間を低減するタスク配置を生成可能となる。その結果、本発明の第１の実施の形態としてのタスク配置装置は、マルチコア性能をより充分に発揮可能なタスク配置を出力できる。すなわち、本実施の形態としてのタスク配置装置は、マルチコアシステムにおいて、序列に応じたコア間依存の実行性能への影響の大小を反映したタスク配置を実現できる。
また、本発明の第１の実施の形態としてのタスク配置装置は、タスクセットの実行が終了に近い位置での依存待ち時間をより削減して、より性能のよいタスク配置ができる。
その理由は、序列重み付与部が、タスクグラフにおける序列が後方に近いタスク間の依存関係ほど序列重みを重くするからである。この動作に基づき、配置部は、序列が後方に近いタスク間のコア間依存が多いほど配置が悪いことを表す評価値を算出する。そして、配置部が、その評価値をより良くするタスク配置を探索する。したがって、このように探索されるタスク配置では、タスクセット全体の実行終了に近い位置で依存関係を有するタスクほど、異なるコアに配置されにくくなる。したがって、本発明の第１の実施の形態としてのタスク配置装置は、タスクグラフ上で序列の後方に現れるクリティカルな依存の問題へ対処できる。
また、本発明の第１の実施の形態としてのタスク配置装置は、タスクセットにおける実行順序が近いタスク間の依存待ち時間をより削減して、より性能のよいタスク配置ができる。
その理由は、序列重み付与部が、タスクグラフにおける序列符号の差が小さいタスク間の依存関係ほど序列重みを重くするからである。この動作に基づき、配置部は、序列が近いタスク間のコア間依存が多いほど配置が悪いことを表す評価値を算出する。そして、配置部が、その評価値をより良くするタスク配置を探索する。したがって、このように探索されるタスク配置では、タスクセットにおける実行順序が近く依存関係を有するタスクほど、異なるコアに配置されにくくなる。したがって、本発明の第１の実施の形態としてのタスク配置装置は、タスクグラフ上での序列が近いタスク同士の依存の問題へ対処できる。
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明で参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して、本実施の形態における詳細な説明を省略する。
まず、本発明の第２の実施の形態としてのタスク配置装置２の機能の一例のブロックを、図１５に示す。図１５において、タスク配置装置２は、本発明の第１の実施の形態としてのタスク配置装置１と同一の構成に加えて、序列符号保持部２４および序列重み保持部２５をさらに含む。
ここで、タスク配置装置２は、本発明の第１の実施の形態としてのタスク配置装置１と同様に、図１に示した構成を含むコンピュータ装置を用いて構成しても良い。その場合、序列符号保持部２４および序列重み保持部２５は、記憶装置１００４を用いて構成される。なお、これらの各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
序列符号保持部２４は、序列重み付与部１２が算出した序列符号を保持する。序列符号保持部２４が保持する情報の一例を図１６Ａ及び図１６Ｂに示す。例えば、序列符号保持部２４は、図１６Ａに示すように、タスクごとに序列符号を保持してもよい。あるいは、序列符号保持部２４は、図１６Ｂに示すように、序列符号の値ごとに、その序列符号が割り当てられたタスクを識別する情報を保持してもよい。例えば、図１６Ｂは、序列符号１が、タスク２、４および５に割り当てられていることを表している。
なお、序列符号保持部２４は、タスクセットパラメータ保持部１１に含まれてもよい。
例えば、序列符号生成部１２１を用いてトポロジカルソートに基づく序列符号が生成された場合のように各タスクに唯一の序列符号が割り当てられた場合、序列符号保持部２４は、タスクセットパラメータ保持部１１に保持されている各タスクに関する情報を序列符合の順序に並べ替えた表現を用いて、序列符号を保持してもよい。この動作に基づき、序列符号保持部２４は、序列符合を保持するための記憶装置の領域を用いず、算出された序列符号を保持できる。
序列重み保持部２５は、序列重み生成部１２を用いて各依存関係に付与された序列重みを保持する。
以上のように構成されたタスク配置装置２の動作について、図１７を参照して説明する。
初めに、タスクセットパラメータ保持部１１は、外部から入力されたタスクセットパラメータを保持する（ステップＳ１０１）。
次に、序列符号生成部１２１は、タスクセットパラメータ保持部１１に保持されたタスクセットパラメータを参照し、各タスクの序列符号を算出する（ステップＳ２０１）。例えば、序列符号生成部１２１は、序列符号の算出手法として、本発明の第１の実施の形態で詳細に説明した手法を適用可能である。
次に、序列符号保持部２４は、算出された序列符号を保持する（ステップＳ２０２）。
次に、重み付け部１２２は、序列符号保持部２４に保持された序列符号に基づいて、各依存関係に対して序列重みを付与する（ステップＳ２０３）。例えば、重み付け部１２２は、重み付けの付与手法として、本発明の第１の実施の形態で詳細に説明した手法を適用可能である。
次に、序列重み保持部２５は、重み付け部１２２を用いて生成された序列重みを保持する（ステップＳ２０４）。
次に、最適配置探索部１３２は、タスク配置候補を生成する（ステップＳ１０２）。
次に、評価値算出部１３１は、生成されたタスク配置候補について、タスク配置の良さを示す評価値である評価値を、序列重み保持部２５に保持された序列重みを用いて算出する（ステップＳ１０４）。例えば、評価値算出部１３１は、評価値の算出手法として、本発明の第１の実施の形態で詳細に説明した手法を適用可能である。
次に、最適配置探索部１３２は、タスク配置候補および評価値が、タスク配置の探索終了条件を満たすか否かを判定する（ステップＳ１０５）。例えば、探索終了条件としては、本発明の第１の実施の形態で詳細に説明した条件が、適用可能である。
ここで、タスク配置の探索終了条件を満たさない場合、タスク配置装置２は、再度ステップＳ１０２からの処理を繰り返す。
一方、タスク配置の探索終了条件を満たす場合、最適配置探索部１３２は、タスク配置の最適化結果を出力する（ステップＳ１０６）。そして、タスク配置装置２は、動作を終了する。
なお、ステップＳ２０３において、重み付け部１２２は、タスク配置候補におけるコア間依存に対して、序列重みを付与してもよい。この場合、タスク配置装置２は、ステップＳ１０２においてタスク配置候補を生成後、ステップＳ２０３〜Ｓ２０４を実行してもよい。
以上で、本発明の第２の実施の形態の動作の説明を終了する。
次に、本発明の第２の実施の形態の効果について述べる。
本発明の第２の実施の形態としてのタスク配置装置は、マルチコアシステム向けにタスク配置する際に、コア間依存の依存待ち時間の発生しやすさを反映した序列重みを算出する処理を、より効率化できる。
その理由は、序列符号保持部が、序列重みの算出に用いる各タスクの序列符号を保持するからである。ここで、あるタスクが複数の依存関係を有する場合、序列重み付与部は、序列重みの算出のために、そのタスクの序列符号を複数回参照する。このような場合、一旦計算された序列符号の序列符号保持部の保持を基に、本発明の第２の実施の形態としてのタスク配置装置は、序列重み付与部の処理時間を、より短縮できるからである。
また、本発明の第２の実施の形態としてのタスク配置装置は、序列に基づき一様でないコア間依存の影響をより低減してより性能のよいタスク配置を探索する処理を、より効率化できる。
その理由は、序列重み保持部が、序列重み生成部を用いて生成された序列重みを保持するからである。ここで、序列重みは、一度計算すれば値が不変で、再計算が不要なことが多い。したがって、序列重みは、異なるタスク配置候補について評価値を算出するたびに再計算される必要がない。したがって、序列重み保持部の序列重みの保持を基に、本発明の第２の実施の形態としてのタスク配置装置は、タスク配置の探索時間を短縮できる。
なお、上述した本発明の各実施の形態において、序列符号は、タスクグラフ上で開始タスクに近いほど小さい値を持つとして主に説明したが、本発明における序列符号は、例えば、タスクグラフ上で開始タスクに近いほど大きい値を持ってもよい。
また、上述した本発明の各実施の形態において、序列重みは、依存待ち時間を発生しやすいほど大きい値を持つとして主に説明したが、本発明における序列重みは、例えば、依存待ち時間を発生しやすいほど小さい値を持ってもよい。
また、上述した本発明の各実施の形態において、評価値は、タスク配置が良いほど小さい値を持つとして主に説明したが、本発明における評価値は、タスク配置が良いほど大きい値を持ってもよい。その場合、配置部は、評価値をより大きくするタスク配置候補を探索すればよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したタスク配置装置の動作を、本発明のプログラムとしてコンピュータの記憶装置（記憶媒体）に格納しておき、係るプログラムをＣＰＵが読み出して実行してもよい。そして、このような場合において、本発明は、係るプログラムのコード或いは記憶媒体を用いて構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持手段と、
前記タスクセットパラメータの参照を用いて、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列に基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与手段と、
前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置手段と、
を含むタスク配置装置。
（付記２）
前記序列重み付与手段は、
前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記１に記載のタスク配置装置。
（付記３）
前記序列重み付与手段は、
前記依存関係を有する２つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記１または付記２に記載のタスク配置装置。
（付記４）
前記序列重み付与手段は、
前記タスクセットパラメータ保持手段に保持された前記タスクセットパラメータに基づいて、前記序列重みの付与に用いるための前記序列を表す序列符号を算出する
ことを特徴とする付記１乃至付記３のいずれか１つに記載のタスク配置装置。
（付記５）
前記序列重み付与手段を用いて算出される序列符号を保持する序列符号保持手段をさらに含み、
前記序列重み付与手段は、
前記序列符号保持手段に保持された序列符号の参照を用いて、前記各依存関係に前記序列重みを付与する
ことを特徴とする付記４に記載のタスク配置装置。
（付記６）
前記序列重み付与手段を用いて付与された前記序列重みを保持する序列重み保持手段をさらに含み、
前記配置手段は、
前記序列重み付与手段に保持された序列重みを用いて前記評価値を算出する
ことを特徴とする付記１乃至付記５のいずれか１つに記載のタスク配置装置。
（付記７）
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持し、
前記タスクセットパラメータの参照を用いて、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列に基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与し、
前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する、
タスク配置方法。
（付記８）
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記７に記載のタスク配置方法。
（付記９）
前記各依存関係に前記序列重みを付与する際に、前記依存関係を有する２つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記７または付記８に記載のタスク配置方法。
（付記１０）
配置対象のタスクの集合であるタスクセットについて、前記タスク間の依存関係を表す情報を含むタスクセットパラメータを保持するタスクセットパラメータ保持処理と、
前記タスクセットパラメータの参照を用いて、前記タスクセット全体の実行の流れにおいて各タスクが実行され得る位置である序列に基づいて、前記タスク間の各依存関係に対して、前記序列に基づく重みを表す係数である序列重みを付与する序列重み付与処理と、
前記タスクセットに属するタスクを前記依存関係にしたがって１つ以上のコアに配置する際に、異なるコアに配置される２つのタスク間の依存関係に付与された前記序列重みを用いて評価値を算出し、算出した評価値に基づいてタスク配置する配置処理と、
をコンピュータに実行させるプログラム。
（付記１１）
前記序列重み付与処理において、前記依存関係を有する各タスクの序列が、前記タスクセット全体の実行の流れにおいて終了に近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記１０に記載のプログラム。
（付記１２）
前記序列重み付与処理において、前記依存関係を有する２つのタスクの序列が近いほど、該依存関係に付与する前記序列重みを重くする
ことを特徴とする付記１０または付記１１に記載のコンピュータ・プログラム。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、２０１１年１０月２１日に出願された日本出願特願２０１１−２３１２８３を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０００８】
１、２  タスク配置装置
１１  タスクセットパラメータ保持部
１２  序列重み付与部
１３  配置部
２４  序列符号保持部
２５  序列重み保持部
１２１  序列符号生成部
１２２  重み付け部
１３１  評価値算出部
１３２  最適配置探索部
１００１  ＣＰＵ
１００２  ＲＡＭ
１００３  ＲＯＭ
１００４  記憶装置
【図１】
0005983623.tif 000003
【図２】
0005983623.tif 000004
【図３】
0005983623.tif 000005
【図４】
0005983623.tif 000006
【図５】
0005983623.tif 000007
【図６】
0005983623.tif 000008
【図７Ａ】
0005983623.tif 000009
【図７Ｂ】
0005983623.tif 000010
【図７Ｃ】
0005983623.tif 000011
【図８】
0005983623.tif 000012
【図９】
0005983623.tif 000013
【図１０】
0005983623.tif 000014
【図１１】
0005983623.tif 000015
【図１２】
0005983623.tif 000016
【図１３】
0005983623.tif 000017
【図１４】
0005983623.tif 000018
【図１５】
0005983623.tif 000019
【図１６Ａ】
0005983623.tif 000020
【図１６Ｂ】
0005983623.tif 000021
【図１７】
0005983623.tif 000022