(57)【特許請求の範囲】
【請求項１】
Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得するタスクセットパラメータ取得部と、
前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定することによりタスク配置を行う第一のタスク配置部と、
前記タスクセットに含まれるタスクのうち、前記第一のタスク配置部によって配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定することによりタスク配置を行う第二のタスク配置部と、
を備えたタスク配置装置。
【請求項２】
前記第一のタスク配置部は、前記スケジューリング想定可能期間において次に配置対象とするタスクである配置対象タスクについて、既に配置した前記各タスクのスケジューリングに基づき該配置対象タスクが実行可能となりうるタスク配置検討時刻と前記タスクセットパラメータとに基づいて、該配置対象タスクのコア割当およびスケジューリングを決定するとともに、決定したコア割当およびスケジューリングに基づいて、前記配置対象タスクおよび前記タスク配置検討時刻を更新することを特徴とする請求項１に記載のタスク配置装置。
【請求項３】
前記タスクセットに含まれるタスクを、前記タスクセットパラメータに基づいてソートすることにより前記各タスクに順序付けを行うタスクソート実行部をさらに備え、
前記第一のタスク配置部は、前記タスクセットに含まれるタスクのうち、前記タスクソート実行部によって順序付けされた先頭のタスクから順に、前記スケジューリング想定可能期間内に実行されうるタスクを前記配置対象タスクとして順次選択していくことにより、選択した配置対象タスクについて、前記タスクセットパラメータに基づいてコア割当およびスケジューリングを順次決定していくことを特徴とする請求項１または請求項２に記載のタスク配置装置。
【請求項４】
前記第一のタスク配置部は、前記順序付けされた先頭のタスクから順に、前記タスクセットパラメータおよび既に配置した前記各タスクのスケジューリングに基づいて、前記配置対象タスクを各プロセッサコアに配置した場合の仮のスケジューリングをそれぞれ算出し、算出した仮のスケジューリングに基づいて前記配置対象タスクのコア割当およびスケジューリングを決定することを特徴とする請求項３に記載のタスク配置装置。
【請求項５】
前記タスクソート実行部は、トポロジカルソートを用いて前記各タスクに順序付けを行うことを特徴とする請求項３または請求項４に記載のタスク配置装置。
【請求項６】
前記第一のタスク配置部は、前記タスクセットの実行開始以降、並列度がＮになるまでの期間を前記スケジューリング想定可能期間として検出することを特徴とする請求項１から請求項５のいずれか１項に記載のタスク配置装置。
【請求項７】
前記第一のタスク配置部は、前記タスクセットの実行開始以降、並列度がＮ＋１になるまでの期間を前記スケジューリング想定可能期間として検出することを特徴とする請求項１から請求項５のいずれか１項に記載のタスク配置装置。
【請求項８】
Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得し、
前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する第一のタスク配置を行い、
前記タスクセットに含まれるタスクのうち、前記第一のタスク配置において配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定する第二のタスク配置を行う、タスク配置方法。
【請求項９】
前記第一のタスク配置を行う際に、前記スケジューリング想定可能期間において次に配置対象とするタスクである配置対象タスクについて、既に配置した前記各タスクのスケジューリングに基づき該配置対象タスクが実行可能となりうるタスク配置検討時刻と前記タスクセットパラメータとに基づいて、該配置対象タスクのコア割当およびスケジューリングを決定するとともに、決定したコア割当およびスケジューリングに基づいて、前記配置対象タスクおよび前記タスク配置検討時刻を更新することを特徴とする請求項８に記載のタスク配置方法。
【請求項１０】
Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得するタスクセットパラメータ取得ステップと、
前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する第一のタスク配置ステップと、
前記タスクセットに含まれるタスクのうち、前記第一のタスク配置において配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定する第二のタスク配置ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＡＭＰ（Asymmetric Multi Processing）方式のマルチコア向けのタスク配置装置、タスク配置方法、および、コンピュータ・プログラムに関する。
【背景技術】
【０００２】
近年、デジタル機器の高性能化及び低消費電力化への要求が高まり、組み込みＬＳＩ（Large Scale Integration）に複数のプロセッサコア（以下、単にコアとも記載する）を搭載するマルチコア構成が注目されている。このＬＳＩのマルチコア化は、システム制御を目的とするリアルタイムシステム等においても、重要な技術となっている。マルチコアシステムは、主にＳＭＰ（Symmetric Multi Processing）方式とＡＭＰ方式とに大別される。【０００３】
ＳＭＰ方式は、コアの空き状況、現在実行中のタスクの優先度等に応じてタスクを切り替えることにより、各タスクは、いずれのコア上でも実行され得る構成となる。このため、ＳＭＰ方式は、動的な負荷分散を可能とし、システム全体の性能を向上させることができる。しかし、動的な負荷分散は、リアルタイム性能の予測が困難になる。したがって、ＳＭＰ方式は、リアルタイムシステムへの適用に適していない。【０００４】
一方、ＡＭＰ方式は、各タスクは、特定のコア上でのみ実行される機能分散型の構成となる。このため、ＡＭＰ方式は、システムの挙動が予測できることが重要なリアルタイムシステムや、特定のハードウェアが接続されているコアが限定されるシステム等に好適である。【０００５】
このようなＡＭＰ方式のマルチコアシステムは、タスクをどのコアに配置するかにより性能が異なる。このため、ＡＭＰ方式のマルチコアシステムでは、最適な実行状態となるように様々なタスク配置を探索し、最適配置を決定する必要がある。【０００６】
例えば、複数のコアへのタスク配置を決定する手法として、並列化コンパイラで利用されるリストスケジューリングがある。リストスケジューリング装置は、マルチコア上でタスクセットの実行時間が最小となるように、タスクのコア割当、および、各コア上でのタスクのスケジューリングをオフラインで行う。ここで、オフラインとは、設計時やコンパイル時のことをいう。このようなリストスケジューリング手法は、並列化コンパイラのように、タスク配置および各コア上でのタスクのスケジューリングが固定的なシステムに適している。【０００７】
一方で、ＡＭＰ方式のマルチコアシステムは、各コア上で動作するＲＴＯＳ（Real Time Operating System）が、各コア上でいつ、どのタスクを動作させるかのスケジューリングを動的に行うことも多い。【０００８】
特許文献１に、このようなマルチコア向けのタスク配置を支援する装置が記載されている。特許文献１に記載の装置は、始めに、各コアに割り当てられた粒度に関する情報（粒度情報）を取得する。ここで、粒度とは、たとえばプロセッサ処理の単位であって、タスク、関数、関数を構成する処理等の総称である。次に、この装置は、取得した粒度情報に基づいて、タスク毎あるいはタスクが有する関数毎に出現回数を算出し、算出された出現回数に関する情報（構造情報）を生成する。また、この装置は、取得された粒度情報に基づいて、タスク毎あるいはタスクが有する関数毎の、他タスクあるいは関数への依存に関する情報（依存情報）を生成する。そして、この装置は、粒度情報、構造情報、および、依存情報に基づいて、異なるコア間に存在する依存関係（コア間依存）を表す情報を表示する。この構成により、この特許文献１に記載の装置は、マルチコアシステムにおいてコア間依存をより少なくするようなタスク配置を決定するよう、開発者を支援することができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−２６４７３４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１に記載された装置を利用したタスク配置は、コアアイドル時間を充分に削減できない場合がある。ここで、コアアイドル時間とは、コアがいずれの処理も実行していない無駄時間をいう。以下、その理由について述べる。【００１１】
特許文献１に記載された装置は、コア間依存の数を最小化するタスク配置を支援する。このようなコア間依存の存在は、コアアイドル時間が発生する要因となりうる。例えば、あるコアがタスクを実行可能な空き状態であるにもかかわらず、そのコアに配置されたタスクは別のコア上のタスクの終了を待つ必要があるためにタスクを実行できない、ということがある。また、コア間依存数が少ないことは、各コア上でのタスクのスケジューリングが変動しても不変的に当てはまる性質である。したがって、特許文献１に記載された装置は、各コア上でのタスクのスケジューリングが動的なシステムであっても、コア間依存数の最小化により、依存待ちによるコアアイドル時間の削減にある程度の効果を奏することはできる。【００１２】
しかしながら、コア間依存の最小化のみでは、コアアイドル時間の削減が充分でないケースも存在する。【００１３】
例えば、図１３Ａに示すように、先頭に近いタスク間に依存関係が多いタスクセットを、２つのコア（コア０およびコア１）に配置することを想定する。なお、図１３において、Ａ〜Ｈは、タスクセットに属するタスクをそれぞれ表し、Ａ〜Ｈの文字を囲む矩形の横幅は、各タスクの実行所要時間を表す。また、破線の矢印は、矢印の根元のタスクの実行が完了した後、矢印の先のタスクの起動が可能になるというタスク間の依存関係を表している。この場合、コア間依存を最小にするタスク配置の１つは、図１３Ｂに示すものとなる。ところが、例えば、コア間依存数が図１３Ｂより多い図１３Ｃに示すタスク配置は、図１３Ｂのタスク配置より、タスクセット全体の実行時間が短い。つまり、コア間依存を最小化する手法により得られた図１３Ｂのタスク配置は、タスクセットの実行開始から全てのコアによりタスクが同時実行されるまでの期間が、図１３Ｃに比べて長く、実行開始から早い段階で複数コアが充分に活用されていない。【００１４】
このように、コア間依存を最小化する手法は、実際には複数コアによって同時に実行可能なタスクを複数コアに配置できない期間を長くすることがある。そのため、コア間依存を最小化する手法は、コアアイドル時間を充分に削減できず、タスクセットの実行性能を低下させる場合がある。【００１５】
また、前述のリストスケジューリング装置は、実行開始後の早い段階から複数コアをより活用するコア割当およびスケジューリングを行うことは可能である。しかしながら、このようなリストスケジューリング手法は、前述のように、各コア上でのタスクスケジューリングが静的に決定されるシステムにおいて有効であり、各コア上でのタスクスケジューリングが動的に制御されるシステムには適していない。【００１６】
本発明は、上述の課題を解決するために、ＡＭＰ方式かつタスクスケジューリングが動的に変動するマルチコアシステム向けに、コアアイドル時間を削減して対象システムの実行性能を向上させるタスク配置装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明のタスク配置装置は、Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得するタスクセットパラメータ取得部と、前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定することによりタスク配置を行う第一のタスク配置部と、前記タスクセットに含まれるタスクのうち、前記第一のタスク配置部によって配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定することによりタスク配置を行う第二のタスク配置部と、を備える。【００１８】
また、本発明のタスク配置方法は、Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得し、前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する第一のタスク配置を行い、前記タスクセットに含まれるタスクのうち、前記第一のタスク配置において配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定する第二のタスク配置を行う。【００１９】
また、本発明のコンピュータ・プログラムは、Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得するタスクセットパラメータ取得ステップと、前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する第一のタスク配置ステップと、前記タスクセットに含まれるタスクのうち、前記第一のタスク配置において配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定する第二のタスク配置ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００２０】
本発明は、ＡＭＰ方式かつタスクスケジューリングが動的に変動するマルチコアシステム向けに、コアアイドル時間を削減して対象システムの実行性能を向上させるタスク配置装置を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の第１の実施の形態としてのタスク配置装置のハードウェア構成図である。
【図２】本発明の第１の実施の形態としてのタスク配置装置の機能ブロック図である。
【図３】本発明の第１の実施の形態としてのタスク配置装置の動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としてのタスク配置装置の機能ブロック図である。
【図５】本発明の第２の実施の形態としてのタスク配置装置の動作を説明するフローチャートである。
【図６】本発明の第２の実施の形態としてのタスク配置装置が配置するタスクセットの一例を示す模式図である。
【図７Ａ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図７Ｂ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図７Ｃ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図７Ｄ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図７Ｅ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図７Ｆ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図７Ｇ】本発明の第２の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図８】本発明の第３の実施の形態としてのタスク配置装置の機能ブロック図である。
【図９Ａ】本発明の第３の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図９Ｂ】本発明の第３の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図９Ｃ】本発明の第３の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図９Ｄ】本発明の第３の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１０】本発明の第４の実施の形態としてのタスク配置装置の機能ブロック図である。
【図１１】本発明の第４の実施の形態としてのタスク配置装置の動作を説明するフローチャートである。
【図１２Ａ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１２Ｂ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１２Ｃ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１２Ｄ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１２Ｅ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１２Ｆ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１２Ｇ】本発明の第４の実施の形態としてのタスク配置装置が図６に示したタスクセットのタスク配置を行う動作の具体例を説明する模式図である。
【図１３Ａ】関連技術によって得られるタスク配置を説明する模式図である。
【図１３Ｂ】関連技術によって得られるタスク配置を説明する模式図である。
【図１３Ｃ】関連技術によって得られるタスク配置を説明する模式図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。ここで、以下に述べる本発明の各実施の形態としてのタスク配置装置は、各タスクが特定のコアで実行される機能分散型のＡＭＰ方式のマルチコアシステム向けにタスク配置を決定する装置である。また、本発明の各実施の形態において対象とするＡＭＰ方式のマルチコアシステムは、各コアに配置されたタスクについて、いつ、どのタスクを実行するかというスケジューリングを動的に行うものである。このようなスケジューリングは、例えば、各コア上で動作するＲＴＯＳ等によって行われる。前述のように、ＡＭＰ方式のマルチコアシステムは、タスクがどのコアに配置されるかによって性能が異なる。以下では、本発明の各実施の形態としてのタスク配置装置により、マルチコアシステムの性能をより高めるタスク配置が可能となることについて説明を行う。なお、以降、本発明の各実施の形態において対象とするＡＭＰ方式のマルチコアシステムを、単にマルチコアシステムとも記載する。
【００２３】
（第１の実施の形態）
本発明の第１の実施の形態としてのタスク配置装置１のハードウェア構成を図１に示す。図１において、タスク配置装置１は、ＣＰＵ（Central Processing Unit）１００１と、ＲＡＭ（Random Access Memory）１００２と、ＲＯＭ（Read Only Memory）１００３と、ハードディスク等の記憶装置１００４とを備えたコンピュータ装置によって構成されている。
【００２４】
ＲＯＭ１００３および記憶装置１００４には、コンピュータ装置を本実施の形態のタスク配置装置１として機能させるためのコンピュータ・プログラムおよび各種データが記憶されている。
【００２５】
ＣＰＵ１００１は、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行する。
【００２６】
次に、タスク配置装置１の機能ブロック構成を図２に示す。図２において、タスク配置装置１は、第一のタスク配置部１１と、第二のタスク配置部１２と、タスクセットパラメータ取得部１３とを備える。ここで、第一のタスク配置部１１と、第二のタスク配置部１２と、タスクセットパラメータ取得部１３とは、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。なお、タスク配置装置１の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
【００２７】
タスクセットパラメータ取得部１３は、対象のタスクセットに含まれるタスク間の依存関係を表す情報と、各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得する。対象のタスクセットは、Ｎ（Ｎは１以上の整数）個のコアに固定的に配置される対象となるタスクの集合である。また、対象のタスクセットは、各コア上でのタスクのスケジューリングが実行時に動的に制御されうるものである。例えば、タスクセットパラメータ取得部１３は、記憶装置１００４に保持されたタスクセットパラメータを取得してＲＡＭ１００２に保持してもよい。タスクセットパラメータ取得部１３によって取得されたタスクセットパラメータは、後述の第一のタスク配置部１１および第二のタスク配置部１２によって参照される。
【００２８】
第一のタスク配置部１１は、タスクセットに含まれるタスクのうち、スケジューリング想定可能期間内に実行されうるタスクについて、タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する。ここで、スケジューリング想定可能期間とは、タスクセットの実行開始以降の各コアにおいて、タスクの実行時のスケジューリングが事前に想定可能な期間である。
【００２９】
具体的には、第一のタスク配置部１１は、タスクセットのうち、最初に実行可能なタスクから順に、コア割当およびスケジューリングを決定していってもよい。そして、第一のタスク配置部１１は、配置処理の開始以降、スケジューリング想定可能期間であることを示す所定の条件が満たされている間、次に実行されうるタスクについて、コア割当およびスケジューリングを決定していく。
【００３０】
例えば、スケジューリング想定可能期間とは、タスクセットの実行開始以降から、並列度がＮとなるまでの期間であってもよい。ここで、並列度とは、タスクセット実行中のある時点において同時に実行されるタスク数をいうものとする。並列度がＮ以下の場合、タスクの実行順序決定には、タスク間の依存関係が支配的である。そこで、各コアのタスクスケジューリングが動的に制御されるマルチコアシステムにおいて、タスク配置装置１が対象とするタスクセット以外のタスクが同時に実行されないと仮定すれば、並列度がＮ以下であれば、スケジューリングは一意に定まると考えてよい。
【００３１】
また、スケジューリング想定可能期間とは、タスクセットの実行開始以降から、依存関係の枝分かれ数の合計がＮを超えない間の期間であってもよい。この場合、第一のタスク配置部１１は、依存関係の枝分かれ数の合計を計測しながらタスク配置処理を行うことにより、枝分かれ数の合計がＮを超えた時点でタスク配置処理を終了してもよい。あるいは、第一のタスク配置部１１は、依存関係の枝別れ数の合計がＮとなるまでのタスクの個数Ｍをあらかじめ記憶しておき、Ｍ個のタスクについてタスク配置処理を終えると、タスク配置処理を終了するようにしてもよい。
【００３２】
第二のタスク配置部１２は、タスクセットに含まれるタスクのうち、第一のタスク配置部１１によって配置されたタスク以外のタスクについて、タスクセットパラメータに基づくコア割当を決定することによりタスク配置を行う。
【００３３】
なお、第二のタスク配置部１２は、タスクセットパラメータに基づくコア割当を決定する公知の技術を採用することにより、タスク配置を行えばよい。ここで、タスクセットを構成するタスクのうち、第一のタスク配置部１１によって配置されたタスク以外のタスク群は、実際に実行される際にはスケジューリングが変動し得る。そこで、第二のタスク配置部１２は、タスク配置の際に、必ずしもスケジューリングを考慮する必要がない。したがって、第二のタスク配置部１２は、実行時にスケジューリングが変動することを前提としたタスク配置を行うことが望ましい。例えば、第二のタスク配置部１２は、各コア上でのタスクスケジューリングが実行時に変動しても不変的に当てはまる指標に基づきタスク配置を行うことが望ましい。具体的には、第二のタスク配置部１２は、コア間依存の最小化によるタスク配置の技術を採用してもよい。
【００３４】
以上のように構成されたタスク配置装置１の動作について、図３を参照して説明する。
【００３５】
まず、タスクセットパラメータ取得部１３は、対象アプリケーションを構成するタスクの集合であるタスクセットについて、タスクセットパラメータを取得する（ステップＳ１）。
【００３６】
次に、第一のタスク配置部１１は、ステップＳ１で取得されたタスクセットパラメータに基づいて、配置対象となる配置対象タスクを選択する（ステップＳ２）。例えば、このステップを初回に実行する場合、第一のタスク配置部１１は、依存元のタスクがないタスクのいずれかを選択すればよい。また、このステップを２回目以降に実行する場合、第一のタスク配置部１１は、既に配置したいずれかのタスクの実行完了により依存待ちが解消されるいずれかのタスクを選択すればよい。
【００３７】
次に、第一のタスク配置部１１は、既に配置したタスクのコア割当およびスケジューリングに基づいて、配置対象のタスクのコア割当およびスケジューリングを決定する（ステップＳ３）。
【００３８】
次に、第一のタスク配置部１１は、配置対象タスクの次に実行されうるタスクが、スケジューリング想定可能期間内に実行されうるか否かを判断する（ステップＳ４）。例えば、第一のタスク配置部１１は、配置対象タスクのスケジューリングを決定したことにより、配置対象タスクの実行期間中の並列度がＮ未満であるか否かを判断してもよい。あるいは、第一のタスク配置部１１は、最初に配置したタスクから今回配置したタスクまでの依存関係の枝分かれ数の合計がＮ未満であるか否かを判断してもよい。
【００３９】
ここで、スケジューリング想定可能期間内に含まれると判断した場合、第一のタスク配置部１１は、ステップＳ２からの処理を繰り返す。
【００４０】
一方、スケジューリング想定可能期間内に含まれないと判断した場合、第一のタスク配置部１１はタスク配置処理を終了する。
【００４１】
次に、第二のタスク配置部１２は、第一のタスク配置部１１によって配置されなかった残りのタスク群について、タスクセットパラメータを参照することにより、コア割当を決定する（ステップＳ５）。前述のように、例えば、第二のタスク配置部１２は、残りのタスク群について、コア間依存を最小化するタスク配置を行ってもよい。
【００４２】
次に、第二のタスク配置部１２は、第一のタスク配置部１１によって決定された各タスクのコア割当と、第二のタスク配置部１２よって決定された各タスクのコア割当とを、タスク配置結果として出力する（ステップＳ６）。
【００４３】
以上で、タスク配置装置１は動作を終了する。
【００４４】
なお、ここで示した処理手順は一例であり、タスク配置装置１は、上述の各ステップの一部の順序を、本発明の趣旨を逸脱しない範囲で、適宜入れ替えて実行してもよい。また、タスク配置装置１は、上述の各ステップの一部を、本発明の趣旨を逸脱しない範囲で、適宜並列実行してもよい。
【００４５】
次に、本発明の第１の実施の形態の効果について述べる。
【００４６】
本発明の第１の実施の形態としてのタスク配置装置は、ＡＭＰ方式かつタスクスケジューリングが動的に変動するマルチコアシステム向けに、コアアイドル時間を削減して対象システムの性能を向上させることができる。
【００４７】
その理由は、第一のタスク配置部が、実行時のタスクスケジューリングが想定可能なスケジューリング想定可能期間に実行されうるタスク群について、スケジューリングを考慮してコア割当を決定するタスク配置を行い、第二のタスク配置部が、残りのタスク群について、コア割当を決定するからである。
【００４８】
これにより、本実施の形態としてのタスク配置装置は、Ｎ個のコアから構成されるマルチコアシステム向けに、実行開始時以降のできるだけ早い段階でＮ個のコアによってＮ個のタスクが同時実行されるタスク配置を得ることができる。さらに、本実施の形態としてのタスク配置装置は、実行時のタスクスケジューリングが想定できない残りのタスク群については、各コア上でのタスクスケジューリングに変動があることを前提として良好な実行結果が得られるタスク配置技術を採用することが可能である。このため、本実施の形態としてのタスク配置装置は、実行開始から早い段階で複数コアを充分に活用する配置を行うことができる。その結果、本実施の形態としてのタスク配置装置は、コアアイドル時間を削減し、対象システムの性能を向上させるタスク配置を出力することができる。
【００４９】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００５０】
本発明の第２の実施の形態としてのタスク配置装置２の機能ブロック構成を、図４に示す。図４において、タスク配置装置２は、本発明の第１の実施の形態としてのタスク配置装置１に対して、第一のタスク配置部１１に替えて第一のタスク配置部２１を備える点が異なる。また、第一のタスク配置部２１は、配置対象タスク保持部２２と、タスク配置検討時刻保持部２３と、制御部２４と、スケジューリング情報保持部２５と、配置結果保持部２６と、を備える。
【００５１】
配置対象タスク保持部２２は、次に配置対象とするタスクである配置対象タスクを表す情報を保持する。配置対象タスク保持部２２に保持される配置対象タスクは、後述の制御部２４によって更新される。
【００５２】
タスク配置検討時刻保持部２３は、配置対象タスクの配置が実行可能となりうる時刻を、タスクセット実行開始時刻を基準として表したタスク配置検討時刻を保持する。ここで、タスクセット実行開始時刻とは、タスクセットの実行を開始しうる時刻である。タスクセット実行開始時刻は０で表されてもよい。タスク配置検討時刻保持部２３に保持されるタスク配置検討時刻は、既に配置された各タスクのスケジューリングに基づいて、後述の制御部２４によって更新される。
【００５３】
制御部２４は、スケジューリング想定可能期間として、タスクセットの実行開始時期から、並列度がＮになるまでの期間において実行されうるタスクについて、スケジューリングを考慮してコア割当を行う。具体的には、制御部２４は、タスク配置検討時刻およびタスクセットパラメータに基づいて、配置対象タスクのコア割当と、実行開始時刻および実行終了時刻を含むスケジューリング情報とを決定する。また、制御部２４は、配置対象タスクについて決定したコア割当およびスケジューリング情報に基づいて、配置対象タスク保持部２２に保持される配置対象タスク、および、タスク配置検討時刻保持部２３に保持されるタスク配置検討時刻を更新する。
【００５４】
スケジューリング情報保持部２５は、タスク配置が行われた各タスクについて、スケジューリング情報（実行開始時刻および実行終了時刻）を保持する。
【００５５】
配置結果保持部２６は、タスク配置が行われた各タスクについて、決定されたコア割当である配置結果を保持する。
【００５６】
以上のように構成されたタスク配置装置２の動作について、図５を参照して説明する。
【００５７】
まず、タスクセットパラメータ取得部１３は、対象アプリケーションを構成するタスクの集合であるタスクセットについて、タスクセットパラメータを取得する（ステップＳ１）。
【００５８】
次に、制御部２４は、タスク配置検討時刻を設定し、タスク配置検討時刻保持部２３に保持させる（ステップＳ２１）。
【００５９】
例えば、このステップを初回に実行する場合、制御部２４は、タスク配置検討時刻として、タスクセット実行開始時刻を設定すればよい。また、このステップを２回目以降に実行する場合、制御部２４は、次に実行可能となるタスクが変化する最も早い時刻を、タスク配置検討時刻として設定してもよい。例えば、制御部２４は、スケジューリング情報保持部２５を参照することにより、既にコア割当およびスケジューリングが行われたタスクのうち、現在のタスク配置検討時刻以降で最も早く実行が終了するタスクの実行終了時刻を、タスク配置検討時刻として設定してもよい。
【００６０】
次に、制御部２４は、ステップＳ２１で設定されたタスク配置検討時刻においてタスク配置の検討が可能なタスクのいずれかを、配置対象タスクとして選択する。そして、制御部２４は、選択した配置対象タスクを示す情報を、配置対象タスク保持部２２に保持させる（ステップＳ２２）。
【００６１】
例えば、このステップを初回に実行する場合、制御部２４は、タスクセットの先頭タスクを配置対象タスクとして選択する。ここで、先頭タスクとは、タスクセットにおいて依存元のないタスクであってもよい。また、このステップを２回目以降に実行する場合、制御部２４は、既に配置したいずれかのタスクの実行終了によって依存待ち状態が解消されて実行可能となるタスクを配置対象タスクとして選択する。なお、タスク配置検討時刻においてタスク配置の検討が可能な複数のタスクがある場合、制御部２４は、該当するタスクのうちいずれかを配置対象タスクとして選択すればよい。
【００６２】
次に、制御部２４は、ステップＳ２２で選択された配置対象タスクのコア割当を決定する（ステップＳ２３）。例えば、制御部２４は、タスク配置検討時刻において、いずれのタスクも配置されていないコアのうち、最もコア番号の小さいものに配置対象タスクを配置してもよい。
【００６３】
次に、制御部２４は、ステップＳ２２で選択された配置対象タスクのスケジューリング情報を決定し、スケジューリング情報保持部２５に保持させる（ステップＳ２４）。具体的には、制御部２４は、配置対象タスクの実行開始時刻および実行終了時刻を決定する。
【００６４】
例えば、配置対象タスクの依存元タスクが、ステップＳ２３で決定された配置対象タスクのコア割当と同一のコアに配置されている場合、制御部２４は、タスク配置検討時刻を、配置対象タスクの実行開始時刻として決定可能である。このようにして決定される配置対象タスクの実行開始時刻は、依存元のタスクの実行終了時刻となることが多い。これは、依存元のタスクの実行完了をもって、配置対象タスクの依存待ちが解消され、実行可能となるためである。
【００６５】
また、例えば、配置対象タスクの依存元タスクが、ステップＳ２３で決定された配置対象タスクのコア割当とは異なるコアに配置されている場合を考える。このとき、コア間の通信オーバヘッドを０とみなすことにすると、制御部２４は、同一のコアに配置されている場合と同様に、タスク配置検討時刻を、配置対象タスクの実行開始時刻として決定可能である。あるいは、制御部２４は、タスク配置検討時刻に、コア間の通信オーバヘッドを加味して、配置対象タスクの実行開始時刻を決定してもよい。
【００６６】
また、例えば、制御部２４は、配置対象タスクの実行終了時刻として、実行開始時刻に対して実行所要時間を加算した時刻を決定すればよい。
【００６７】
次に、制御部２４は、並列度がＮになったか否かを判断する（ステップＳ２５）。すなわち、制御部２４は、今回配置した配置対象タスクの実行期間中に、いずれのタスクも実行していないコアが残っていないかを判断する。これにより、制御部２４は、次の配置対象タスクがスケジューリング想定可能期間に実行されうるものであるか否かを判断している。
【００６８】
ステップＳ２５において、並列度がＮになっていないと判断した場合、制御部２４は、現在のタスク配置検討時刻においてタスク配置を検討可能な他のタスクがあるか否かを判断する（ステップＳ２６）。
【００６９】
ステップＳ２６において、このタスク配置検討時刻でタスク配置を検討可能な他のタスクがあると判断した場合、制御部２４は、タスク配置検討時刻を更新せずに、配置対象タスクを更新するステップＳ２２からの処理を繰り返す。
【００７０】
一方、ステップＳ２６において、このタスク配置検討時刻でタスク配置を検討可能な他のタスクはもうないと判断した場合、制御部２４は、タスク配置検討時刻を更新するステップＳ２１からの処理を繰り返す。
【００７１】
一方、ステップＳ２５において、並列度がＮになったと判断した場合、制御部２４は、第一のタスク配置部２１によるタスク配置を終了する。そして、第二のタスク配置部１２は、本発明の第１の実施の形態におけるステップＳ５〜Ｓ６と同様に、第一のタスク配置部２１によって配置されなかった残りのタスク群についてタスク配置を行い、タスクセットに含まれる各タスクのコア割当を出力する。
【００７２】
以上で、タスク配置装置２は、動作を終了する。
【００７３】
なお、ここで示した処理手順は一例であり、タスク配置装置２は、上述の各ステップの一部の順序を、本発明の趣旨を逸脱しない範囲で、適宜入れ替えて実行してもよい。また、タスク配置装置２は、上述の各ステップの一部を、本発明の趣旨を逸脱しない範囲で、適宜並列実行してもよい。
【００７４】
次に、タスク配置装置２の動作の具体例について、図６および図７を参照して説明する。ここでは、Ａ〜Ｊのタスクを含むタスクセットを、コア番号が割り当てられた３つのコア（コア０〜コア２）に配置することを想定して説明を行う。図６および図７において、Ａ〜Ｊは、タスクセットに属するタスクをそれぞれ表し、Ａ〜Ｊの文字を囲む矩形の横幅は、各タスクの実行所要時間を表す。また、破線の矢印は、矢印の根元のタスクの実行が完了した後、矢印の先のタスクの起動が可能になるというタスク間の依存関係を表している。なお、この具体例の説明において、タスク配置装置２は、配置対象タスクを複数のコアに配置可能であり、いずれのコアに配置対象タスクのコア割当を行っても影響がない場合には、コア番号が小さいコアに対して配置対象タスクのコア割当を行うものとする。また、タスク配置装置２は、タスク配置検討時刻において実行可能となりうる複数のタスクがあり、いずれのタスクのタスク配置を先に行っても影響ない場合には、アルファベットが若いものから順に配置対象タスクとして選択するものとする。
【００７５】
図６は、タスクセットに含まれるＡ〜Ｊのタスク間の依存関係を示している。例えば、タスクＢおよびタスクＣは、それぞれタスクＡに依存がある。その他のタスク間にも、破線矢印で表される依存関係がある。なお、タスクＧ、タスクＨ、タスクＩ、タスクＪに依存するそれ以降のタスクについては、図示を省略している。
【００７６】
次に、図６に示したタスクセットに対するタスク配置装置２の動作について、図７を用いて説明する。
【００７７】
＜タスクＡの配置処理＞
まず、図７Ａを用いて、タスクＡの配置処理について説明する。
【００７８】
ここでは、まず、制御部２４は、タスク配置検討時刻を、タスクセット実行開始時刻である０に設定する（ステップＳ２１）。
【００７９】
そして、制御部２４は、タスク配置検討時刻０で実行可能なタスクＡを、配置対象タスクとする（ステップＳ２２）。
【００８０】
次に、制御部２４は、タスクＡを割り当て可能なコア０〜コア２のうち、コア番号が小さいコア０をタスクＡに割り当てる（ステップＳ２３）。
【００８１】
次に、制御部２４は、タスクＡの実行開始時刻としてタスク配置検討時刻の０を設定する。また、制御部２４は、タスクＡの実行終了時刻として、タスクＡの実行開始時刻に、タスクＡの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【００８２】
次に、制御部２４は、並列度は１であり、Ｎ＝３になっていないと判断する（ステップＳ２５でＮｏ）。
【００８３】
次に、制御部２４は、このタスク配置検討時刻０で実行可能な他のタスクがないと判断する（ステップＳ２６でＮｏ）。
【００８４】
＜タスクＢの配置処理＞
次に、図７Ｂを用いて、タスクＢの配置処理について説明する。
【００８５】
ここでは、まず、制御部２４は、タスク配置検討時刻を、タスクＡの実行終了時刻に設定する（ステップＳ２１）。
【００８６】
次に、制御部２４は、タスク配置検討時刻において実行可能となりうるタスクＢおよびタスクＣのうち、アルファベットの若いほうのタスクＢを配置対象タスクとする（ステップＳ２２）。
【００８７】
次に、制御部２４は、タスクＢを割り当て可能なコア０〜コア２のうち、コア番号が小さいコア０をタスクＢに割り当てる（ステップＳ２３）。
【００８８】
次に、制御部２４は、タスクＢの実行開始時刻として、タスク配置検討時刻であるタスクＡの実行終了時刻を設定する。また、制御部２４は、タスクＢの実行終了時刻として、タスクＢの実行開始時刻に、タスクＢの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【００８９】
次に、制御部２４は、並列度は１であり、Ｎ＝３になっていないと判断する（ステップＳ２５でＮｏ）。
【００９０】
次に、制御部２４は、このタスク配置検討時刻で実行可能な他のタスクとして、タスクＣがあると判断する（ステップＳ２６でＹｅｓ）。
【００９１】
＜タスクＣの配置処理＞
次に、図７Ｃを用いて、タスクＣの配置処理について説明する。なお、タスク配置検討時刻は、タスクＡの実行終了時刻に設定されたままである。
【００９２】
ここでは、まず、制御部２４は、タスク配置検討時刻において実行可能となりうるタスクＣを配置対象タスクとする（ステップＳ２２）。
【００９３】
次に、制御部２４は、コア０には既にタスクＢが配置されていることから、タスクＣを割り当て可能なコア１〜コア２のうち、コア番号が小さいコア１をタスクＣに割り当てる（ステップＳ２３）。
【００９４】
次に、制御部２４は、タスクＣの実行開始時刻として、タスク配置検討時刻であるタスクＡの実行終了時刻を設定する。また、制御部２４は、タスクＣの実行終了時刻として、タスクＣの実行開始時刻に、タスクＣの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【００９５】
次に、制御部２４は、並列度は２であり、Ｎ＝３になっていないと判断する（ステップＳ２５でＮｏ）。
【００９６】
次に、制御部２４は、このタスク配置検討時刻で実行可能な他のタスクがないと判断する（ステップＳ２６でＮｏ）。
【００９７】
＜タスクＦの配置処理＞
次に、図７Ｄを用いて、タスクＦの配置処理について説明する。
【００９８】
ここでは、まず、制御部２４は、次に実行可能なタスクが変化する最も早い時刻は、タスクＣの実行終了時刻であると判断する。そこで、制御部２４は、タスク配置検討時刻を、タスクＣの実行終了時刻に設定する（ステップＳ２１）。
【００９９】
次に、制御部２４は、タスク配置検討時刻において実行可能となりうるタスクＦを配置対象タスクとする（ステップＳ２２）。
【０１００】
次に、制御部２４は、コア０では、タスク配置検討時刻において配置されたタスクＢの実行が終了していないと判断する。そこで、制御部２４は、タスクＦを割り当て可能なコア１〜コア２のうち、コア番号が小さいコア１をタスクＦに割り当てる（ステップＳ２３）。
【０１０１】
次に、制御部２４は、タスクＦの実行開始時刻として、タスク配置検討時刻であるタスクＣの実行終了時刻を設定する。また、制御部２４は、タスクＦの実行終了時刻として、タスクＦの実行開始時刻に、タスクＦの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【０１０２】
次に、制御部２４は、並列度は２であり、Ｎ＝３になっていないと判断する（ステップＳ２５でＮｏ）。
【０１０３】
次に、制御部２４は、このタスク配置検討時刻で実行可能な他のタスクがないと判断する（ステップＳ２６でＮｏ）。
【０１０４】
＜タスクＤの配置処理＞
次に、図７ｅを用いて、タスクＤの配置処理について説明する。
【０１０５】
ここでは、まず、制御部２４は、次に実行可能なタスクが変化する最も早い時刻は、タスクＢの実行終了時刻であると判断する。そこで、制御部２４は、タスク配置検討時刻を、タスクＢの実行終了時刻に設定する（ステップＳ２１）。
【０１０６】
次に、制御部２４は、タスク配置検討時刻において実行可能となりうるタスクＤおよびタスクＥのうち、アルファベットの若いほうのタスクＤを配置対象タスクとする（ステップＳ２２）。
【０１０７】
次に、制御部２４は、コア１では、タスク配置検討時刻において配置されたタスクＦの実行が終了していないと判断する。そこで、制御部２４は、タスクＤを割り当て可能なコア０およびコア２のうち、コア番号が小さいコア０をタスクＤに割り当てる（ステップＳ２３）。
【０１０８】
次に、制御部２４は、タスクＤの実行開始時刻として、タスク配置検討時刻であるタスクＢの実行終了時刻を設定する。また、制御部２４は、タスクＤの実行終了時刻として、タスクＤの実行開始時刻に、タスクＤの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【０１０９】
次に、制御部２４は、並列度は２であり、Ｎ＝３になっていないと判断する（ステップＳ２５でＮｏ）。
【０１１０】
次に、制御部２４は、このタスク配置検討時刻で実行可能な他のタスクとして、タスクＥがあると判断する（ステップＳ２６でＹｅｓ）。
【０１１１】
＜タスクＥの配置処理＞
次に、図７Ｆを用いて、タスクＥの配置処理について説明する。なお、タスク配置検討時刻は、タスクＢの実行終了時刻に設定されたままである。
【０１１２】
ここでは、まず、制御部２４は、タスク配置検討時刻において実行可能となりうるタスクＥを配置対象タスクとする（ステップＳ２２）。
【０１１３】
次に、制御部２４は、コア０には既にタスクＤが配置されていると判断する。また、制御部２４は、コア１では、タスク配置検討時刻において配置されたタスクＦの実行が終了していないと判断する。そこで、制御部２４は、コア２をタスクＥに割り当てる（ステップＳ２３）。
【０１１４】
次に、制御部２４は、タスクＥの実行開始時刻として、タスク配置検討時刻であるタスクＢの実行終了時刻を設定する。また、制御部２４は、タスクＥの実行終了時刻として、タスクＥの実行開始時刻に、タスクＥの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【０１１５】
次に、制御部２４は、並列度が３となり、Ｎ＝３に等しくなったと判断する（ステップＳ２５でＹｅｓ）。すなわち、３個のコア上で３個のタスクが同時実行される配置となったため、第一のタスク配置部２１は、配置処理を終了する。これにより、実行開始から早い段階で３つのコアを活用する配置が得られ、図７Ｇに示す配置となった。
【０１１６】
以降、第二のタスク配置部１２は、図６に示したタスクＧ、タスクＨ、タスクＩ、タスクＪを含む残りのタスク群について、コア割当を決定することによりタスク配置を行う。前述のように、第二のタスク配置部１２は、スケジューリング決定を必須としない配置手法を用いることが可能である。
【０１１７】
なお、この具体例では、依存関係がある２つのタスクが別コアに配置された場合と、同一コアに配置された場合との実行開始時刻に差がないものとして説明を行った。コア間通信のオーバヘッドを考慮する場合、第一のタスク配置部２１は、配置対象タスクの実行開始時刻として、タスク配置検討時刻にコア間通信のオーバヘッドを加味した時刻を設定すればよい。
【０１１８】
次に、本発明の第２の実施の形態の効果について述べる。
【０１１９】
本発明の第２の実施の形態としてのタスク配置装置は、ＡＭＰ方式かつタスクスケジューリングが動的に変動するマルチコアシステム向けに、コアアイドル時間を削減して対象システムの性能をさらに向上させることができる。
【０１２０】
その理由は、第一のタスク配置部が、タスクセットの実行開始時期から並列度がＮになるまでをスケジューリング想定可能期間として、スケジューリング想定可能期間内に実行されうるタスク群について、既に配置したタスクのスケジューリングを考慮してコア割当およびスケジューリングを決定するタスク配置を行い、第二のタスク配置部が、残りのタスク群について、コア割当を決定するからである。
【０１２１】
これにより、本実施の形態としてのタスク配置装置は、タスクセットの実行開始以降、並列度がＮとなるまでのスケジューリング想定可能期間内においては、配置対象タスクが、既に配置されたタスクと同時実行可能であれば、できる限り同時実行されるようコアを割り当てることができる。このように、本実施の形態としてのタスク配置装置は、既に配置したタスクのスケジューリングに基づいて配置対象タスクに適切なコア割当を決定する。これにより、本実施の形態としてのタスク配置装置は、Ｎ個のコアから構成されるマルチコアシステム向けに、タスクセットの開始時刻以降、Ｎ個のコアによりＮ個のタスクが同時実行されるまでの期間を可能な限り短縮したタスク配置を得ることが可能になる。このため、本実施の形態としてのタスク配置装置は、ＡＭＰ方式のマルチコアシステム向けに、実行開始から早い段階で複数コアを活用する配置を行うことにより、コアアイドル時間を削減し、対象システムの性能を向上させることとなる。
【０１２２】
（第３の実施の形態）
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第２の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１２３】
まず、本発明の第３の実施の形態としてのタスク配置装置３の機能ブロック構成を、図８に示す。図８において、タスク配置装置３は、本発明の第２の実施の形態としてのタスク配置装置２に対して、第一のタスク配置部２１に替えて、第一のタスク配置部３１を備える点が異なる。また、第一のタスク配置部３１は、本発明の第２の実施の形態における第一のタスク配置部２１に対して、制御部２４に替えて制御部３４を備える点が異なる。
【０１２４】
制御部３４は、タスクセットの実行開始時期から、並列度がＮ＋１になるまでの期間をスケジューリング想定可能期間とする点が、本発明の第２の実施の形態における制御部２４に対して異なる。それ以外の点については、制御部３４は、本発明の第２の実施の形態における制御部２４と同様に構成される。
【０１２５】
以上のように構成されたタスク配置装置３は、図５に示した本発明の第２の実施の形態としてのタスク配置装置２と略同様に動作するが、ステップＳ２５における動作が異なる。
【０１２６】
ステップＳ２５において、制御部３４は、並列度がＮ＋１となったか否かを判断する。
【０１２７】
以上で、タスク配置装置３の動作の説明を終了する。
【０１２８】
次に、タスク配置装置３の動作の具体例について、図９を参照して説明する。ここでは、本発明の第２の実施の形態としてのタスク配置装置２の動作の具体例の説明において用いた図６のタスクセットを用いて、タスク配置装置３の動作の具体例を説明する。
【０１２９】
まず、タスク配置装置３は、図７Ａ〜Ｆまで本発明の第２の実施の形態としてのタスク配置装置２と同様にタスク配置を行っていく。ただし、制御部３４は、タスクＥを配置対象タスクとしたフローのステップＳ２５において、並列度は３であり、Ｎ＋１＝４になっていないと判断する（ステップＳ２５でＮｏ）。これにより、図７Ｇに示したように、タスクＡ〜Ｆまでが配置された状態で、第一のタスク配置部３１は、タスク配置処理を続ける。
【０１３０】
＜タスクＧの配置処理＞
まず、図９Ａを用いて、タスクＧの配置処理について説明する。
【０１３１】
ここでは、まず、制御部３４は、次に実行可能なタスクが変化する最も早い時刻は、タスクＤの実行終了時刻であると判断する。そこで、制御部３４は、タスク配置検討時刻を、タスクＤの実行終了時刻に設定する（ステップＳ２１）。
【０１３２】
次に、制御部３４は、タスク配置検討時刻において実行可能となりうるタスクＧを配置対象タスクとする（ステップＳ２２）。
【０１３３】
次に、制御部３４は、コア１〜コア２では、タスク配置検討時刻において他のタスクの実行が終了していないと判断する。そこで、制御部３４は、コア０をタスクＧに割り当てる（ステップＳ２３）。
【０１３４】
次に、制御部３４は、タスクＧの実行開始時刻として、タスク配置検討時刻であるタスクＤの実行終了時刻を設定する。また、制御部３４は、タスクＧの実行終了時刻として、タスクＧの実行開始時刻に、タスクＧの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【０１３５】
次に、制御部３４は、並列度は３であり、Ｎ＋１＝４になっていないと判断する（ステップＳ２５でＮｏ）。
【０１３６】
次に、制御部３４は、このタスク配置検討時刻で実行可能な他のタスクはないと判断する（ステップＳ２６でＮｏ）。
【０１３７】
＜タスクＪの配置処理＞
次に、図９Ｂを用いて、タスクＪの配置処理について説明する。
【０１３８】
ここでは、まず、制御部３４は、次に実行可能なタスクが変化する最も早い時刻は、タスクＦの実行終了時刻であると判断する。そこで、制御部３４は、タスク配置検討時刻を、タスクＦの実行終了時刻に設定する（ステップＳ２１）。
【０１３９】
次に、制御部３４は、タスク配置検討時刻において実行可能となりうるタスクＪを配置対象タスクとする（ステップＳ２２）。
【０１４０】
次に、制御部３４は、コア０およびコア２では、タスク配置検討時刻において他のタスクの実行が終了していないと判断する。そこで、制御部３４は、コア１をタスクＪに割り当てる（ステップＳ２３）。
【０１４１】
次に、制御部３４は、タスクＪの実行開始時刻として、タスク配置検討時刻であるタスクＦの実行終了時刻を設定する。また、制御部３４は、タスクＪの実行終了時刻として、タスクＪの実行開始時刻に、タスクＪの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【０１４２】
次に、制御部３４は、並列度は３であり、Ｎ＋１＝４になっていないと判断する（ステップＳ２５でＮｏ）。
【０１４３】
次に、制御部３４は、このタスク配置検討時刻で実行可能な他のタスクはないと判断する（ステップＳ２６でＮｏ）。
【０１４４】
＜タスクＨの配置処理＞
次に、図９Ｃを用いて、タスクＨの配置処理について説明する。
【０１４５】
ここでは、まず、制御部３４は、次に実行可能なタスクが変化する最も早い時刻は、タスクＥの実行終了時刻であると判断する。そこで、制御部３４は、タスク配置検討時刻を、タスクＥの実行終了時刻に設定する（ステップＳ２１）。
【０１４６】
次に、制御部３４は、タスク配置検討時刻において実行可能となりうるタスクＨおよびタスクＩのうち、アルファベットの若いほうのタスクＨを配置対象タスクとする（ステップＳ２２）。
【０１４７】
次に、制御部３４は、コア０〜コア１では、タスク配置検討時刻において他のタスクの実行が終了していないと判断する。そこで、制御部３４は、コア２をタスクＨに割り当てる（ステップＳ２３）。
【０１４８】
次に、制御部３４は、タスクＨの実行開始時刻として、タスク配置検討時刻であるタスクＥの実行終了時刻を設定する。また、制御部３４は、タスクＨの実行終了時刻として、タスクＨの実行開始時刻に、タスクＨの実行所要時間を加えた時刻を設定する（ステップＳ２４）。
【０１４９】
次に、制御部３４は、コア０〜コア１に配置済みのタスクＧ、タスクＪ、タスクＨの他に、同時に実行可能なタスクＩがあり、並列度は４であると算出する。そこで、制御部３４は、並列度がＮ＋１に等しくなったと判断する（ステップＳ２５でＹｅｓ）。すなわち、４個のタスクが同時実行可能であるにもかかわらず、３個のコア上で既に３個のタスクが実行されているため、残り１つのタスクが実行不可となる配置となった。そこで、第一のタスク配置部３１は、配置処理を終了する。これにより、実行開始から早い段階で３つのコアを活用する配置が得られ、図９Ｄに示す配置となった。
以降、第二のタスク配置部１２は、図６に示したタスクＩを含む残りのタスク群について、コア割当を決定することによりタスク配置を行う。前述のように、第二のタスク配置部１２は、スケジューリング決定を必須としない配置手法を用いることが可能である。
【０１５０】
なお、この具体例では、依存関係がある２つのタスクが別コアに配置された場合と、同一コアに配置された場合との実行開始時刻に差がないものとして説明を行った。コア間通信のオーバヘッドを考慮する場合、第一のタスク配置部３１は、配置対象タスクの実行開始時刻として、タスク配置検討時刻にコア間通信のオーバヘッドを加味した時刻を設定すればよい。
【０１５１】
また、本実施の形態では、第一のタスク配置部３１は、タスク配置処理（ステップＳ２３〜Ｓ２４）の後に、並列度がＮ＋１となったか否かを判断する処理（ステップＳ２５）を実行している。これとは別の構成として、第一のタスク配置部３１は、タスク配置処理（ステップＳ２３〜Ｓ２４）の前に、並列度がＮ＋１となったか否かを判断する処理（ステップＳ２５）を実行してもよい。この場合、図９を用いて説明した具体例の動作において、第一のタスク配置部３１は、タスクＨの配置処理の前の図９Ｂの状態で、タスク配置処理を終了することになる。その場合、第二のタスク配置部１２は、タスクＨ、タスクＩを含む残りのタスク群について、コア割当を決定することによりタスク配置を行えばよい。
【０１５２】
次に、本発明の第３の実施の形態の効果について述べる。
【０１５３】
本発明の第３の実施の形態としてのタスク配置装置は、ＡＭＰ方式かつタスクスケジューリングが動的に変動するマルチコアシステム向けに、コアアイドル時間を削減して対象システムの性能をさらに向上させることができる。
【０１５４】
その理由は、第一のタスク配置部が、タスクセットの実行開始以降、並列度がＮ＋１になるまでをスケジューリング想定可能期間として、スケジューリング想定可能期間内に実行されうるタスク群について、既に配置したタスクのスケジューリングを考慮して配置対象タスクのコア割当およびスケジューリングを決定するタスク配置を行うからである。そして、第二のタスク配置部が、残りのタスク群については、スケジューリングを考慮する必要なく、コア割当を決定するからである。
【０１５５】
これにより、本実施の形態としてのタスク配置装置は、タスクセットの実行開始以降、並列度がＮ＋１となるまでのスケジューリング想定可能期間内においては、配置対象タスクが、既に配置されたタスクと同時実行可能であれば、できる限り同時実行されるようコアを割り当てることができる。このように、本実施の形態としてのタスク配置装置は、既に配置したタスクのスケジューリングに基づいて配置対象タスクに適切なコア割当を決定することにより、Ｎ個のコアから構成されるマルチコアシステム向けに、タスクセットの開始時刻以降、Ｎ個のコアによりＮ個のタスクが同時に実行されるまでの期間を可能な限り短縮したタスク配置を得ることが可能になる。このため、本実施の形態としてのタスク配置装置は、ＡＭＰ方式のマルチコアシステム向けに、実行開始から早い段階で複数コアを活用する配置を行うことにより、コアアイドル時間を削減し、対象システムの性能を向上させることとなる。
【０１５６】
（第４の実施の形態）
次に、本発明の第４の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第２の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１５７】
まず、本発明の第４の実施の形態としてのタスク配置装置４の機能ブロック構成を、図１０に示す。図１０において、タスク配置装置４は、本発明の第２の実施の形態としてのタスク配置装置２に対して、第一のタスク配置部２１に替えて第一のタスク配置部４１を備え、さらに、タスクソート実行部４７を備える点が異なる。また、第一のタスク配置部４１は、配置対象タスク保持部２２と、制御部４４と、スケジューリング情報保持部２５と、配置結果保持部２６とを有する。
【０１５８】
タスクソート実行部４７は、タスクセットに含まれるタスクを、タスクセットパラメータに基づいてソートすることにより、各タスクに順序付けを行う。例えば、タスクソート実行部は、タスクセットパラメータに含まれるタスク間の依存関係に基づいて、どのタスクもその依存先のタスクより前になるよう並び替えるトポロジカルソートを行ってもよい。ここで、トポロジカルソートとは、無閉路有向グラフにおいて、どのノード（本発明におけるタスク）もその出力辺（本発明による依存）の先のノードより前になるよう各ノードを順序付けして並べるソート手法である。このソート手法では、ノードの並びが得られる。したがって、後述の制御部４４は、その並び順に配置対象タスクを選択していけばよい。なお、トポロジカルソートを実現するアルゴリズムとしては、例えば、公知文献「Kahn, A. B. (1962), “Topological sorting of large networks”, Communications of the ACM 5 (11): 558-562」に記載のアルゴリズムや、深さ優先探索を用いるアルゴリズムが適用可能である。
【０１５９】
制御部４４は、配置対象タスクとして、タスクソート実行部４７によって順序付けされたタスクを先頭から順に選択する。また、制御部４４は、配置対象タスクの各コアにおける仮のスケジューリング情報に基づいて、最終的なコア割当を決定する。具体的には、制御部４４は、各コアにおいて、配置対象タスクを仮に配置した場合の仮のスケジューリング情報を算出する。そして、制御部４４は、各コアにおける仮のスケジューリング情報に基づいて、配置対象タスクの最終的なコア割当を決定する。例えば、制御部４４は、最も早い仮の実行開始時刻が算出されたコアに、配置対象タスクを割り当ててもよい。
【０１６０】
以上のように構成されたタスク配置装置４の動作について、図１１を参照して説明する。なお、ここでは、タスクソート実行部４７は、トポロジカルソートを行うものとする。
【０１６１】
まず、タスクセットパラメータ取得部１３は、対象アプリケーションを構成するタスクの集合であるタスクセットについて、タスクセットパラメータを取得する（ステップＳ１）。
【０１６２】
次に、タスクソート実行部４７は、タスクセットに含まれるタスクを、タスクセットパラメータに基づいてトポロジカルソートする（ステップＳ３１）。なお、タスクソート実行部４７は、対象のタスクセットのデータが既にトポロジカルソートされた順序で並んでいることがわかっている場合には、この処理を省略可能である。
【０１６３】
次に、制御部４４は、配置対象タスクを選択し、選択した配置対象タスクを示す情報を配置対象タスク保持部２２に保持させる（ステップＳ３２）。例えば、制御部４４は、初回にこのステップを実行する場合、トポロジカルソートされた先頭タスクを配置対象タスクとして選択すればよい。また、制御部４４は、２回目以降にこのステップを実行する場合、トポロジカルソートされたタスクの並びにおいて前回選択した配置対象タスクの次のタスクを新たな配置対象タスクとして選択すればよい。
【０１６４】
次に、制御部４４は、配置対象タスクの各コアにおける仮のスケジューリング情報を算出する。そして、制御部４４は、算出した仮のスケジューリング情報を、スケジューリング情報保持部２５に保持させる（ステップＳ３３）。具体的には、制御部４４は、各コアにおいて、配置対象タスクを仮に配置した場合の仮の実行開始時刻と仮の実行終了時刻とを算出する。例えば、制御部４４は、配置対象タスクの仮の実行開始時刻として、配置対象タスクの依存元タスクの実行終了時刻を採用してもよい。あるいは、制御部４４は、配置対象タスクの依存元タスクが、配置対象タスクを仮に配置するコアとは別のコアに配置されている場合、依存元タスクの実行終了時刻に対してコア間依存によるオーバヘッドを加味した時刻を、仮の実行開始時刻としてもよい。また、制御部４４は、各コアにおける仮の実行開始時刻に、配置対象タスクの実行所要時間を加算することにより、各コアにおける仮の実行終了時刻を算出すればよい。
【０１６５】
次に、制御部４４は、ステップＳ３３で算出した仮のスケジューリング情報に基づいて、配置対象タスクの最終的なコア割当を決定する（ステップＳ３４）。例えば、制御部４４は、最も早い仮の実行開始時刻が算出されたコアに、最終的なコア割当を決定してもよい。また、同一の実行開始時刻にスケジューリングされうる複数のコアがある場合には、制御部４４は、最もコア番号の小さいものにコア割当を決定してもよい。
【０１６６】
なお、制御部４４は、ステップＳ３４において、配置対象タスクの最終的なコア割当を決定した後、ステップＳ３３で算出した仮のスケジューリング情報のうち、決定されたコア以外の他のコアに関するものを破棄してもよい。
【０１６７】
次に、制御部４４は、並列度がＮになった否かを判断する（ステップＳ３５）。つまり、制御部４４は、いずれのタスクも実行していないコアが残っていないかを判断する。
【０１６８】
ステップＳ３５において、並列度がＮになっていない（すなわち、いずれのタスクも実行していないコアが残っている）と判断した場合、第一のタスク配置部４１は、次の配置対象タスクを選択するステップＳ３２からの処理を繰り返す。
【０１６９】
一方、ステップＳ３５において、並列度がＮになった（すなわち、いずれのタスクも実行していないコアが残っていない）と判断した場合、第一のタスク配置部４１は、タスク配置を終了する。そして、第二のタスク配置部１２は、本発明の第１の実施の形態におけるステップＳ５〜Ｓ６と同様に、第一のタスク配置部４１によって配置されなかった残りのタスク群についてタスク配置を行い、タスクセットに含まれる各タスクのコア割当を出力する。
【０１７０】
以上で、タスク配置装置４は動作を終了する。
【０１７１】
なお、ここで示した処理手順は一例であり、タスク配置装置４は、上述の各ステップの一部の順序を、本発明の趣旨を逸脱しない範囲で、適宜入れ替えて実行してもよい。また、タスク配置装置４は、上述の各ステップの一部を、本発明の趣旨を逸脱しない範囲で、適宜並列実行してもよい。
【０１７２】
次に、タスク配置装置４の動作の具体例について、図１２を参照して説明する。ここでは、本発明の第２の実施の形態としてのタスク配置装置２の動作の具体例の説明において用いた図６のタスクセットを用いて、タスク配置装置４の動作の具体例を説明する。
【０１７３】
まず、タスクソート実行部４７は、図６に示したタスクセットのタスクをトポロジカルソートすることにより、タスクＡ〜タスクＪの順に順序付けされたタスクの並びを表す情報を出力する（ステップＳ３１）。制御部４４は、これにより、タスクＡ〜タスクＪの順に配置対象タスクとして選択し（ステップＳ３２）、タスク配置処理を行っていく。
【０１７４】
＜タスクＡの配置処理＞
まず、図１２Ａを用いて、タスクＡの配置処理について説明する。
【０１７５】
ここでは、まず、制御部４４は、タスクＡの各コアにおける仮のスケジューリング情報を算出する。この場合、どのコアにおいても、タスクＡの仮の実行開始時刻は、タスクセット実行開始時刻であり、仮の実行終了時刻は、タスクセット実行開始時刻にタスクＡの実行所要時間を加えた時刻となる（ステップＳ３３）。
【０１７６】
そこで、制御部４４は、最もコア番号の小さいコア０に、タスクＡを配置する（ステップＳ３４）。ここで、制御部４４は、コア１およびコア２について算出したタスクＡの仮のスケジューリング情報を破棄してもよい。
【０１７７】
次に、制御部４４は、並列度は１であり、Ｎ＝３になっていないと判断する（ステップＳ３５でＮｏ）。
【０１７８】
＜タスクＢの配置処理＞
次に、図１２Ｂを用いて、タスクＢの配置処理について説明する。
【０１７９】
ここでは、まず、制御部４４は、タスクＢの各コアにおける仮のスケジューリング情報を算出する。この場合、タスクＢはタスクＡに依存しているため、どのコアにおいても、タスクＢの仮の実行開始時刻は、タスクＡの実行終了時刻であり、仮の実行終了時刻は、タスクＢの仮の実行開始時刻にタスクＢの実行所要時間を加えた時刻となる（ステップＳ３３）。
【０１８０】
そこで、制御部４４は、最もコア番号の小さいコア０に、タスクＢを配置する（ステップＳ３４）。ここで、制御部４４は、コア１およびコア２について算出したタスクＢの仮のスケジューリング情報を破棄してもよい。
【０１８１】
次に、制御部４４は、並列度は１であり、Ｎ＝３になっていないと判断する（ステップＳ３５でＮｏ）。
【０１８２】
＜タスクＣの配置処理＞
次に、図１２Ｃを用いて、タスクＣの配置処理について説明する。
【０１８３】
ここでは、まず、制御部４４は、タスクＣの各コアにおける仮のスケジューリング情報を算出する。この場合、タスクＣはタスクＡに依存しているが、コア０においては、タスクＡの実行終了時刻にはタスクＢが既に配置されている。このため、コア０におけるタスクＣの仮の実行開始時刻は、タスクＢの実行終了時刻となる。また、コア１〜コア２においては、タスクＡの実行終了時刻に他のタスクが配置されていないため、タスクＣの仮の実行開始時刻は、タスクＡの実行終了時刻となる。また各コアにおけるタスクＣの仮の実行終了時刻は、各タスクにおけるタスクＣの仮の実行開始時刻にタスクＣの実行所要時間をそれぞれ加えた時刻となる（ステップＳ３３）。
【０１８４】
次に、制御部４４は、最も早い仮の実行開始時刻が算出されたコア１〜コア２のうち、コア番号の小さいコア１に、タスクＣを配置する（ステップＳ３４）。ここで、制御部４４は、コア０およびコア２について算出したタスクＣの仮のスケジューリング情報を破棄してもよい。
【０１８５】
次に、制御部４４は、並列度は２であり、Ｎ＝３になっていないと判断する（ステップＳ３５でＮｏ）。
【０１８６】
＜タスクＤの配置処理＞
次に、図１２Ｄを用いて、タスクＤの配置処理について説明する。
【０１８７】
ここでは、まず、制御部４４は、タスクＤの各コアにおける仮のスケジューリング情報を算出する。この場合、タスクＤはタスクＢに依存しているため、どのコアにおいても、タスクＤの仮の実行開始時刻は、タスクＢの実行終了時刻であり、仮の実行終了時刻は、タスクＢの仮の実行開始時刻にタスクＢの実行所要時間を加えた時刻となる（ステップＳ３３）。
【０１８８】
そこで、制御部４４は、最もコア番号の小さいコア０に、タスクＤを配置する（ステップＳ３４）。ここで、制御部４４は、コア１およびコア２について算出したタスクＤの仮のスケジューリング情報を破棄してもよい。
【０１８９】
次に、制御部４４は、並列度は１であり、Ｎ＝３になっていないと判断する（ステップＳ３５でＮｏ）。
【０１９０】
＜タスクＥの配置処理＞
次に、図１２ｅを用いて、タスクＥの配置処理について説明する。
【０１９１】
ここでは、まず、制御部４４は、タスクＥの各コアにおける仮のスケジューリング情報を算出する。この場合、タスクＥはタスクＢに依存しているが、コア０においては、タスクＢの実行終了時刻にはタスクＤが既に配置されている。このため、コア０におけるタスクＥの仮の実行開始時刻は、タスクＤの実行終了時刻となる。また、コア１〜コア２においては、タスクＢの実行終了時刻に他のタスクが配置されていないため、タスクＥの仮の実行開始時刻は、タスクＢの実行終了時刻となる。また各コアにおけるタスクＥの仮の実行終了時刻は、各タスクにおけるタスクＥの仮の実行開始時刻にタスクＥの実行所要時間をそれぞれ加えた時刻となる（ステップＳ３３）。
【０１９２】
次に、制御部４４は、最も早い仮の実行開始時刻が算出されたコア１〜コア２のうち、コア番号の小さいコア１に、タスクＥを配置する（ステップＳ３４）。ここで、制御部４４は、コア０およびコア２について算出したタスクＥの仮のスケジューリング情報を破棄してもよい。
【０１９３】
次に、制御部４４は、並列度は２であり、Ｎ＝３になっていないと判断する（ステップＳ３５でＮｏ）。
【０１９４】
＜タスクＦの配置処理＞
次に、図１２Ｆを用いて、タスクＦの配置処理について説明する。
【０１９５】
ここでは、まず、制御部４４は、タスクＦの各コアにおける仮のスケジューリング情報を算出する。この場合、タスクＦはタスクＣに依存しているが、コア０においては、タスクＣの実行終了時刻にはタスクＢが既に配置され、続いてタスクＤが配置されている。このため、コア０におけるタスクＦの仮の実行開始時刻は、タスクＤの実行終了時刻となる。また、コア１においては、タスクＣの実行終了時刻に他のタスクが配置されていないものの、タスクＣの実行終了時刻にタスクＦの実行所要時間を加算した時刻以前にタスクＥの実行が開始される配置が既に行われている。このため、コア１におけるタスクＦの仮の実行開始時刻は、タスクＥの実行終了時刻となる。また、コア２においては、タスクＣの実行終了時刻に他のタスクが配置されていないため、タスクＦの仮の実行開始時刻は、タスクＣの実行終了時刻となる。また各コアにおけるタスクＦの仮の実行終了時刻は、各タスクにおけるタスクＦの仮の実行開始時刻にタスクＦの実行所要時間をそれぞれ加えた時刻となる（ステップＳ３３）。
【０１９６】
次に、制御部４４は、最も早い仮の実行開始時刻が算出されたコア２に、タスクＦを配置する（ステップＳ３４）。ここで、制御部４４は、コア０およびコア１について算出したタスクＥの仮のスケジューリング情報を破棄してもよい。
【０１９７】
次に、制御部４４は、並列度は３であり、Ｎ＝３になったと判断する（ステップＳ３５でＹｅｓ）。
【０１９８】
これにより、実行開始から早い段階で３つのコアを活用する配置が得られ、図１２Ｇに示す配置となった。ここで、第一のタスク配置部４１は、タスク配置処理を終了する。
【０１９９】
その後、第二のタスク配置部１２は、図６におけるタスクＧ、タスクＨ、タスクＩ、タスクＪを含むタスクセットの残りのタスク群について、コア割当を決定することによりタスク配置を行う。なお、第二のタスク配置部１２は、前述のように、スケジューリング決定を必須としない配置手法を用いることが可能である。
【０２００】
なお、この具体例では、依存関係がある２つのタスクが別コアに配置された場合と、同一コアに配置された場合との実行開始時刻に差がないものとして説明を行った。コア間通信のオーバヘッドを考慮する場合、第一のタスク配置部４１は、配置対象タスクの実行開始時刻として、コア間通信のオーバヘッドを加味した時刻を設定すればよい。
【０２０１】
また、制御部４４は、ステップＳ３５において、並列度がＮとなった時点で第一のタスク配置部４１におけるタスク配置処理を完了しているが、並列度がＮ＋１となった時点でタスク配置処理を完了してもよい。
【０２０２】
また、本実施の形態において、対象とするタスクセットのタスクが既にトポロジカルソートされた場合に相当する順序になっていることがわかっている場合には、タスク配置装置は、タスクソート実行部を備えていなくてもよい。
【０２０３】
次に、本発明の第４の実施の形態の効果について述べる。
【０２０４】
本発明の第４の実施の形態としてのタスク配置装置は、ＡＭＰ方式かつタスクスケジューリングが動的に変動するマルチコアシステム向けに、コアアイドル時間を削減して対象システムの性能をさらに向上させることができる。
【０２０５】
その理由は、タスクソート実行部が、タスクセットに含まれるタスクをタスクセットパラメータに基づいてあらかじめソートしておき、第一のタスク配置部が、ソートされたタスクを先頭から順に配置対象タスクとして選択していきながら、並列度がＮになるまでをスケジューリング想定可能期間として、スケジューリング想定可能期間内に実行されうる配置対象タスクを各コアに配置した場合の仮のスケジューリングに基づいて、配置対象タスクのコア割当およびスケジューリングを決定するからである。そして、第二のタスク配置部が、残りのタスク群について、コア割当を決定するからである。
【０２０６】
これにより、本実施の形態としてのタスク配置装置は、タスクセットの実行開始以降、並列度がＮとなるまでのスケジューリング想定可能期間内においては、タスクセットパラメータに基づきソートされた順のタスクについて、Ｎ個のコアのうち最も早くスケジューリングされうるコアを順次割り当てることができる。このように、本実施の形態としてのタスク配置装置は、配置対象タスクを各コアに配置した場合の仮の実行時刻に基づいて適切なコア割当を決定する。これにより、本実施の形態としてのタスク配置装置は、Ｎ個のコアから構成されるマルチコアシステム向けに、タスクセットの開始時刻以降、Ｎ個のコアによりＮ個のタスクが同時に実行されるまでの期間を可能な限り早くしたタスク配置を得ることが可能になる。このため、本実施の形態としてのタスク配置装置は、ＡＭＰ方式のマルチコアシステム向けに、実行開始から早い段階で複数コアを活用する配置を行うことにより、コアアイドル時間を削減し、対象システムの性能を向上させることとなる。
【０２０７】
なお、上述した本発明の各実施の形態としてのタスク配置装置は、対象とするマルチコアシステムで実行されるタスクの全てをまとめて配置対象としなくてもよい。例えば、各実施の形態のタスク配置装置は、対象とするマルチコアシステムで実行されるタスクのうち、依存関係で繋がっている一連のタスク群を配置対象のタスクセットとして抽出してもよい。
【０２０８】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したタスク配置装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておき、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコード或いは記憶媒体によって構成される。
【０２０９】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０２１０】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【０２１１】
また、上述した各実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得するタスクセットパラメータ取得部と、
前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定することによりタスク配置を行う第一のタスク配置部と、
前記タスクセットに含まれるタスクのうち、前記第一のタスク配置部によって配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定することによりタスク配置を行う第二のタスク配置部と、
を備えたタスク配置装置。
（付記２）
前記第一のタスク配置部は、前記スケジューリング想定可能期間において次に配置対象とするタスクである配置対象タスクについて、既に配置した前記各タスクのスケジューリングに基づき該配置対象タスクが実行可能となりうるタスク配置検討時刻と前記タスクセットパラメータとに基づいて、該配置対象タスクのコア割当およびスケジューリングを決定するとともに、決定したコア割当およびスケジューリングに基づいて、前記配置対象タスクおよび前記タスク配置検討時刻を更新することを特徴とする付記１に記載のタスク配置装置。
（付記３）
前記タスクセットに含まれるタスクを、前記タスクセットパラメータに基づいてソートすることにより前記各タスクに順序付けを行うタスクソート実行部をさらに備え、
前記第一のタスク配置部は、前記タスクセットに含まれるタスクのうち、前記タスクソート実行部によって順序付けされた先頭のタスクから順に、前記スケジューリング想定可能期間内に実行されうるタスクを前記配置対象タスクとして順次選択していくことにより、選択した配置対象タスクについて、前記タスクセットパラメータに基づいてコア割当およびスケジューリングを順次決定していくことを特徴とする付記１または付記２に記載のタスク配置装置。
（付記４）
前記第一のタスク配置部は、前記順序付けされた先頭のタスクから順に、前記タスクセットパラメータおよび既に配置した前記各タスクのスケジューリングに基づいて、前記配置対象タスクを各プロセッサコアに配置した場合の仮のスケジューリングをそれぞれ算出し、算出した仮のスケジューリングに基づいて前記配置対象タスクのコア割当およびスケジューリングを決定することを特徴とする付記３に記載のタスク配置装置。
（付記５）
前記タスクソート実行部は、トポロジカルソートを用いて前記各タスクに順序付けを行うことを特徴とする付記３または付記４に記載のタスク配置装置。
（付記６）
前記第一のタスク配置部は、前記タスクセットの実行開始以降、並列度がＮになるまでの期間を前記スケジューリング想定可能期間として検出することを特徴とする付記１から付記５のいずれか１つに記載のタスク配置装置。
（付記７）
前記第一のタスク配置部は、前記タスクセットの実行開始以降、並列度がＮ＋１になるまでの期間を前記スケジューリング想定可能期間として検出することを特徴とする付記１から付記５のいずれか１つに記載のタスク配置装置。
（付記８）
Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得し、
前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する第一のタスク配置を行い、
前記タスクセットに含まれるタスクのうち、前記第一のタスク配置において配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定する第二のタスク配置を行う、タスク配置方法。
（付記９）
前記第一のタスク配置を行う際に、前記スケジューリング想定可能期間において次に配置対象とするタスクである配置対象タスクについて、既に配置した前記各タスクのスケジューリングに基づき該配置対象タスクが実行可能となりうるタスク配置検討時刻と前記タスクセットパラメータとに基づいて、該配置対象タスクのコア割当およびスケジューリングを決定するとともに、決定したコア割当およびスケジューリングに基づいて、前記配置対象タスクおよび前記タスク配置検討時刻を更新することを特徴とする付記８に記載のタスク配置方法。
（付記１０）
前記タスクセットに含まれるタスクを、前記タスクセットパラメータに基づいてソートすることにより前記各タスクに順序付けを行い、
前記第一のタスク配置を行う際に、前記タスクセットに含まれるタスクのうち、順序付けされた先頭のタスクから順に、前記スケジューリング想定可能期間内に実行されうるタスクを前記配置対象タスクとして順次選択していくことにより、選択した配置対象タスクについて、前記タスクセットパラメータに基づいてコア割当およびスケジューリングを順次決定していくことを特徴とする付記８または付記９に記載のタスク配置方法。
（付記１１）
Ｎ（Ｎは１以上の整数）個のプロセッサコアに固定的に配置される対象となるタスクの集合であるタスクセットであって、前記各プロセッサコア上でのタスクのスケジューリングが実行時に動的に制御されるタスクセットについて、前記タスク間の依存関係を表す情報と、前記各タスクの実行に要する実行所要時間とを少なくとも含むタスクセットパラメータを取得するタスクセットパラメータ取得ステップと、
前記タスクセットの実行開始以降の前記各プロセッサコアにおけるタスクのスケジューリングが事前に想定可能なスケジューリング想定可能期間を検出するとともに、前記タスクセットに含まれるタスクのうち、前記スケジューリング想定可能期間内に実行されうるタスクについて、前記タスクセットパラメータに基づくスケジューリングを考慮してコア割当を決定する第一のタスク配置ステップと、
前記タスクセットに含まれるタスクのうち、前記第一のタスク配置において配置されたタスク以外のタスクについて、前記タスクセットパラメータに基づくコア割当を決定する第二のタスク配置ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
（付記１２）
前記第一のタスク配置ステップにおいて、前記スケジューリング想定可能期間において次に配置対象とするタスクである配置対象タスクについて、既に配置した前記各タスクのスケジューリングに基づき該配置対象タスクが実行可能となりうるタスク配置検討時刻と前記タスクセットパラメータとに基づいて、該配置対象タスクのコア割当およびスケジューリングを決定するとともに、決定したコア割当およびスケジューリングに基づいて、前記配置対象タスクおよび前記タスク配置検討時刻を更新することを特徴とする付記１１に記載のコンピュータ・プログラム。
（付記１３）
前記タスクセットに含まれるタスクを、前記タスクセットパラメータに基づいてソートすることにより前記各タスクに順序付けを行うタスクソートステップを前記コンピュータ装置にさらに実行させ、
前記第一のタスク配置ステップにおいて、前記タスクセットに含まれるタスクのうち、順序付けされた先頭のタスクから順に、前記スケジューリング想定可能期間内に実行されうるタスクを前記配置対象タスクとして順次選択していくことにより、選択した配置対象タスクについて、前記タスクセットパラメータに基づいてコア割当およびスケジューリングを順次決定していくことを特徴とする付記１１または付記１２に記載のコンピュータ・プログラム。
【０２１２】
以上、実施形態（及び実施例）を参照して本願発明を説明したが、本願発明は上記実施形態（及び実施例）に限定されものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる
この出願は、２０１２年４月１８日に出願された日本出願特願２０１２−０９４３９２を基礎とする優先権を主張し、その開示の全てをここに取り込む。
符号の説明
１、２、３、４    タスク配置装置
１１、２１、３１、４１    第一のタスク配置部
１２    第二のタスク配置部
１３    タスクセットパラメータ取得部
２２    配置対象タスク保持部
２３    タスク配置検討時刻保持部
２４、３４、４４    制御部
２５    スケジューリング情報保持部
２６    配置結果保持部
４７    タスクソート実行部
１００１    ＣＰＵ
１００２    ＲＡＭ
１００３    ＲＯＭ
１００４    記憶装置
【図１】
0005971334.tif 000002
【図２】
0005971334.tif 000003
【図３】
0005971334.tif 000004
【図４】
0005971334.tif 000005
【図５】
0005971334.tif 000006
【図６】
0005971334.tif 000007
【図７Ａ】
0005971334.tif 000008
【図７Ｂ】
0005971334.tif 000009
【図７Ｃ】
0005971334.tif 000010
【図７Ｄ】
0005971334.tif 000011
【図７Ｅ】
0005971334.tif 000012
【図７Ｆ】
0005971334.tif 000013
【図７Ｇ】
0005971334.tif 000014
【図８】
0005971334.tif 000015
【図９Ａ】
0005971334.tif 000016
【図９Ｂ】
0005971334.tif 000017
【図９Ｃ】
0005971334.tif 000018
【図９Ｄ】
0005971334.tif 000019
【図１０】
0005971334.tif 000020
【図１１】
0005971334.tif 000021
【図１２Ａ】
0005971334.tif 000022
【図１２Ｂ】
0005971334.tif 000023
【図１２Ｃ】
0005971334.tif 000024
【図１２Ｄ】
0005971334.tif 000025
【図１２Ｅ】
0005971334.tif 000026
【図１２Ｆ】
0005971334.tif 000027
【図１２Ｇ】
0005971334.tif 000028
【図１３Ａ】
0005971334.tif 000029
【図１３Ｂ】
0005971334.tif 000030
【図１３Ｃ】
0005971334.tif 000031