(57)【要約】【課題】  分散メモリ型のマルチコアプロセッサシステムにおいて動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させる。【解決手段】  スケジューラは、スケジューリング部およびルール変更部を備える。スケジューリング部は、実行要求を受けた処理に関して、ルール情報に基づいて複数のプロセッサコアの中から割り当て先を決定する。ルール変更部は、予め決定された処理群の最初の処理に関してスケジューリング部で割り当て先が決定されるのに伴ってルール情報を変更し、スケジューリング部に処理群の後続の処理を最初の処理と同一のプロセッサコアに割り当てさせ、処理群の最後の処理に関してスケジューリング部で割り当て先が決定されるのに伴ってルール情報を復元する。【選択図】    図１
2010108153.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリとを含むプロセッサシステムに対して、スケジューリングを実施するスケジューラであって、
実行要求を受けた処理に関して、ルール情報に基づいて前記複数のプロセッサコアの中から割り当て先を決定するスケジューリング部と、
予め決定された処理群の最初の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を変更し、前記スケジューリング部に前記処理群の後続の処理を前記最初の処理と同一のプロセッサコアに割り当てさせ、前記処理群の最後の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を復元するルール変更部とを備えることを特徴とするスケジューラ。
【請求項２】
請求項１に記載のスケジューラにおいて、
前記ルール情報は、処理の実行要求が入力される複数のエントリノードと前記複数のプロセッサコアとの間における処理の割り当てに関する対応関係を規定する情報を含み、
前記複数のエントリノードは、前記ルール情報の変更を必要としない特性を有する第１エントリノードと、前記ルール情報の変更を必要とする特性を有する第２エントリノードとを含み、
前記ルール変更部は、前記第２エントリノードに実行要求が入力された処理を前記処理群に属する処理として認識することを特徴とするスケジューラ。
【請求項３】
請求項２に記載のスケジューラにおいて、
前記スケジューラで用いられる制御情報は、前記ルール情報を含むとともに、前記複数のエントリノードの各々について、そのエントリノードが前記第２エントリノードである場合にセット状態に設定される第１フラグ情報と、そのエントリノードに関する前記ルール情報の変更が実施済みである場合にセット状態に設定される第２フラグ情報とを含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第１および前記第２フラグ情報に基づいて、前記ルール情報を変更する動作を実施する必要があるか否かを判断することを特徴とするスケジューラ。
【請求項４】
請求項３に記載のスケジューラにおいて、
前記制御情報は、実行要求を受けた処理の各々について、その処理が前記処理群の最後の処理である場合にセット状態に設定される第３フラグ情報を含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第１、前記第２および前記第３フラグ情報に基づいて、前記ルール情報を復元する動作を実施する必要があるか否かを判断することを特徴とするスケジューラ。
【請求項５】
複数のプロセッサコアと、
前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、
前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを備え、
前記スケジューラは、
実行要求を受けた処理に関して、ルール情報に基づいて前記複数のプロセッサコアの中から割り当て先を決定するスケジューリング部と、
予め決定された処理群の最初の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を変更し、前記スケジューリング部に前記処理群の後続の処理を前記最初の処理と同一のプロセッサコアに割り当てさせ、前記処理群の最後の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を復元するルール変更部とを備えることを特徴とするプロセッサシステム。
【請求項６】
請求項５に記載のプロセッサシステムにおいて、
前記ルール情報は、処理の実行要求が入力される複数のエントリノードと前記複数のプロセッサコアとの間における処理の割り当てに関する対応関係を規定する情報を含み、
前記複数のエントリノードは、前記ルール情報の変更を必要としない特性を有する第１エントリノードと、前記ルール情報の変更を必要とする特性を有する第２エントリノードとを含み、
前記ルール変更部は、前記第２エントリノードに実行要求が入力された処理を前記処理群に属する処理として認識することを特徴とするプロセッサシステム。
【請求項７】
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成するプログラム生成方法であって、
逐次プログラムを読み込んで複数の処理に分割する第１工程と、
前記複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる第２工程と、
処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、前記複数の処理の中からデータ転送抑制対象の処理群を決定する第３工程と、
前記複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えた前記スケジューラに前記処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を前記並列プログラムとともに生成する第４工程とを含むことを特徴とするプログラム生成方法。
【請求項８】
請求項７に記載のプログラム生成方法において、
前記複数のプロセッサコアは、複数種のプロセッサコアを含み、
前記第２工程では、プロセッサコアの種類毎に各処理の実行時間が見積もられ、
前記第３工程では、処理毎に割り当て先のプロセッサコアの種類が決定された後に、プロセッサコアの種類毎に前記処理群が決定されることを特徴とするプログラム生成方法。
【請求項９】
請求項７または請求項８に記載のプログラム生成方法において、
前記第３工程は、
データ依存関係を有する処理対の中からデータ転送時間が最大である処理対を特定し、特定した処理対に関するデータ転送時間が特定した処理対の各処理に関する実行時間に基づく第１基準値より大きい場合に、特定した処理対を前記処理群として決定する工程と、
前記処理群の最初の処理で使用されるデータを生成する処理の中から前記処理群の最初の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最初の処理との処理対に関するデータ転送時間が前記処理群として決定された処理対に関するデータ転送時間に基づく第２基準値より大きい場合に、特定した処理を前記処理群に追加する工程と、
前記処理群の最後の処理で生成されるデータを使用する処理の中から前記処理群の最後の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最後の処理との処理対に関するデータ転送時間が前記第２基準値より大きい場合に、特定した処理を前記処理群に追加する工程とを含むことを特徴とするプログラム生成方法。
【請求項１０】
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成するためのコンピュータに、
逐次プログラムを読み込んで複数の処理に分割する第１工程と、
前記複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる第２工程と、
処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、前記複数の処理の中からデータ転送抑制対象の処理群を決定する第３工程と、
前記複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えた前記スケジューラに前記処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を前記並列プログラムとともに生成する第４工程とを実行させることを特徴とするプログラム生成用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサコアおよび複数のプロセッサに対応する複数のメモリを含むプロセッサシステム（分散メモリ型のマルチコアプロセッサシステム）のスケジューリング技術に関する。
【背景技術】
【０００２】
組み込み用途向けのプロセッサシステムでは、従来は、動作周波数を上げることで処理性能の向上を実現していたが、近年では、消費電力の増大や物理的な限界等の問題から、動作周波数を上げずに複数のプロセッサコアで並列処理を実施させることで処理性能の向上を実現する傾向にある。複数のプロセッサコアで並列処理を実施させる場合には、プロセッサコア間の同期や通信のオーバーヘッドが発生するため、並列処理による処理性能向上とオーバーヘッドとのトレードオフから、プログラムを命令より大きい粒度で分割し、複数（Ｍ個）のプロセッサコアで複数（Ｎ個）に分割された処理を同時に実行することになる。
【０００３】
一般に、Ｎ（処理数）はＭ（プロセッサコア数）に比べて非常に大きく、処理毎に実行時間が異なる。また、各処理の実行時間が処理対象データに応じて変化する場合も多い。このため、複数のプロセッサコアで並列処理を実施させるマルチコアプロセッサシステムでは、どの処理をどのプロセッサコアにどのような順序で割り当てるのかを決定するスケジューラが必要になる。スケジューラには、スタティックスケジューラとダイナミックスケジューラとが存在する。スタティックスケジューラは、各処理の実行時間を見積もって最適な割り当てを予め決定しておくものである。これに対して、ダイナミックスケジューラは、各処理の実行時間が状況により変化することを前提として、各処理の実行時に状況に応じて割り当てを決定するものである。
【０００４】
当初、ダイナミックスケジューラは、全てのプロセッサコアが同種であり、全ての処理がどのプロセッサコアでも同様に実行可能であるホモジニアス・マルチコアプロセッサシステムを想定したものであった。しかしながら、組み込み用途向けのマルチコアプロセッサシステムについては、必要最低限のリソースでシステムを構築する必要があるため、各処理の特性に合わせてＲＩＳＣ（Reduced Instruction Set Computer）、ＶＬＩＷ（Very Long Instruction Word）やＤＳＰ（Digital Signal Processor）等の異種のプロセッサコアを組み合わせたヘテロジニアス構成が採用されることが多い。そこで、ヘテロジニアス・マルチコアプロセッサシステムでダイナミックスケジューリングを実現するための技術が考案されている（例えば、特許文献１を参照）。但し、この技術は、全てのプロセッサコアが１つのメモリを共有する共有メモリ型のヘテロジニアス・マルチコアプロセッサを想定したものである。
【０００５】
共有メモリ型のマルチコアプロセッサシステムでは、複数のプロセッサコアにより１つのメモリが共有されており、そのメモリに対して複数のプロセッサコアが同時にアクセスすることはできない。このため、複数のプロセッサコアのメモリアクセスが競合すると、メモリアクセスに要する時間が増大し、処理性能の劣化が生じるという問題がある。プロセッサコア数が少ない場合にはそれ程問題にならないが、プロセッサコア数が増加するのに伴ってメモリアクセス時間が加速度的に増加する傾向があるため、プロセッサ数が多い場合にはメモリアクセス競合に起因する処理性能劣化を無視できない。従って、多数のプロセッサコアが設けられるマルチコアプロセッサシステムについては、各プロセッサコアが独立してメモリを有する分散メモリ型のシステム構成が適している。特許文献１の技術でも、原理的には分散メモリ型のマルチコアプロセッサシステムに対応することが可能であるが、効率の良いスケジューリングが実現されるとは言い難い。
【０００６】
また、組み込み用途向けのヘテロジニアス・マルチコアプロセッサシステムに関して、ダイナミックスケジューリングを実施するためのスケジューリングコードを生成するマルチグレイン並列化コンパイラが考案されている（例えば、特許文献２を参照）。この技術では、入力プログラムが全てのプロセッサコアを制御することが前提となっており、複数のプロセスを同時に動作させるような場合には適していない。更に、プロセッサコアによりスケジューリングが実施されるため、プロセッサコア数が増加すると、スケジューリングのコストが大きくなるという問題がある。
【０００７】
なお、マルチコアプロセッサシステムに関しては、複数のプロセッサコア間で共有メモリへのアクセスを効率的に実施するための技術やセマフォを具現化してシステム性能の低下を防止するための技術等が考案されている（例えば、特許文献３、４を参照）。
【特許文献１】特開２００７−１３３８５８号公報
【特許文献２】特開２００６−２９３７６８号公報
【特許文献３】特開２００３−３００４２号公報
【特許文献４】特開２００４−６２９１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
分散メモリ型のマルチコアプロセッサシステムでは、プロセッサコア毎に独立してメモリが設けられている。このようなシステム構成でダイナミックスケジューリングを実現する場合、各処理がどのプロセッサコアで実行されるかについては処理実行段階で決まるため、ある処理ＰをあるプロセッサコアＣで実行させる際に、処理Ｐで使用されるデータをプロセッサコアＣのメモリに格納することになる。
【０００９】
例えば、ある処理Ｐａで生成されるデータが別の処理Ｐｂで使用されるような場合に、処理ＰａがあるプロセッサコアＣａに割り当てられ、処理Ｐｂが別のプロセッサコアＣｂに割り当てられると、処理Ｐａで生成されたデータをプロセッサコアＣａのメモリからプロセッサコアＣｂのメモリに転送する必要がある。このとき、処理Ｐａ、Ｐｂで共有されるデータ量が多いと、データ転送に要する時間が長くなり、その結果、処理Ｐｂの実行に多くの時間が掛かることになる。言い換えると、処理Ｐａ、Ｐｂが同一のプロセッサコアに割り当てられるようにすれば、処理Ｐａ、Ｐｂで共有される多量のデータについてデータ転送が不要になるため、処理Ｐｂを効率的に実行させることができる。
【００１０】
しかしながら、特許文献１の技術でこれを実現するには、多量のデータを共有する処理Ｐａ、Ｐｂの割り当て先を特定のプロセッサコアに固定する必要がある。このため、各プロセッサコアの負荷状況に応じて処理を割り当てるというダイナミックスケジューリングの長所が損なわれてしまう。
【００１１】
本発明の目的は、分散メモリ型のマルチコアプロセッサシステムにおいて動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させることにある。
【課題を解決するための手段】
【００１２】
本発明の一態様では、複数のプロセッサコアと、複数のプロセッサコアのそれぞれに対応する複数のメモリとを含むプロセッサシステムに対して、スケジューリングを実施するスケジューラは、スケジューリング部およびルール変更部を備える。スケジューリング部は、実行要求を受けた処理に関して、ルール情報に基づいて複数のプロセッサコアの中から割り当て先を決定する。ルール変更部は、予め決定された処理群の最初の処理に関してスケジューリング部で割り当て先が決定されるのに伴ってルール情報を変更し、スケジューリング部に処理群の後続の処理を最初の処理と同一のプロセッサコアに割り当てさせ、処理群の最後の処理に関してスケジューリング部で割り当て先が決定されるのに伴ってルール情報を復元する。
【００１３】
複数のプロセッサコアと、複数のプロセッサコアのそれぞれに対応する複数のメモリと、複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成する際に、コンピュータにより第１〜第４工程が実行される。第１工程は、逐次プログラムを読み込んで複数の処理に分割する工程である。第２工程は、複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる工程である。第３工程は、処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、複数の処理の中からデータ転送抑制対象の処理群を決定する工程である。第４工程は、複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えたスケジューラに処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を並列プログラムとともに生成する工程である。
【発明の効果】
【００１４】
分散メモリ型のマルチコアプロセッサシステムにおいて、動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させることができ、その結果、処理性能（ソフトウェア実行効率）を大幅に向上させることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施形態について図面を用いて説明する。
【００１６】
図１は、本発明の一実施形態のプロセッサシステムを示している。図２は、スケジューリングルールの概要を示している。図３〜図５は、ルール変更部の動作を示している。本発明の一実施形態のプロセッサシステム１０は、分散メモリ型のヘテロジニアス・マルチコアプロセッサシステムであり、図１に示すように、プロセッサコア２０−１〜２０−ｎ、メモリ３０−１〜３０−ｎ、スケジューラ４０、スケジューラ専用メモリ５０およびインターコネクト６０を有している。
【００１７】
プロセッサコア２０−ｋ（ｋ＝１，２，３，・・・，ｎ）は、メモリ３０−ｋにアクセスしながらスケジューラ４０により割り当てられた処理を実行する。メモリ３０−ｋには、プロセッサコア２０−ｋで使用されるデータやプロセッサコア２０−ｋで生成されるデータ等が格納される。スケジューラ４０は、スケジューラ専用メモリ５０にアクセスしながらプロセッサコア２０−１〜２０−ｎに関してダイナミックスケジューリング（動的負荷分散のスケジューリング）を実施する。スケジューラ専用メモリ５０には、スケジューラ４０で用いられるスケジューリングルールの情報等が格納される。インターコネクト６０は、プロセッサコア２０−１〜２０−ｎ、メモリ３０−１〜３０−ｎおよびスケジューラ４０等を相互に接続してこれらの間での信号やデータの送受信を可能にする。
【００１８】
スケジューラ４０で用いられるスケジューリングルールは、図２に示すように、エントリノード（ＥＮ）、ディスパッチノード（ＤＰＮ）およびディストリビューションノード（ＤＴＮ）を用いて模式的に表現される。なお、図２ではディストリビューションノードが１個のみ存在しているが、ディストリビューションノードが複数個存在することもある。
【００１９】
エントリノードは、スケジューラ４０の入口に相当するものであり、実行要求を受けた処理に相当する処理要求（ＰＲ）が接続される。ディスパッチノードは、スケジューラ４０の出口に相当するものであり、１個のプロセッサコアに関連付けられる。ディストリビューションノードは、エントリノードとディスパッチノードとを関連付けるものである。エントリノードでは、処理要求選択用スケジューリングアルゴリズムの情報が保持される。ディストリビューションノードでは、エントリノード選択用スケジューリングアルゴリズムの情報が保持される。ディスパッチノードでは、ディストリビューションノード選択用スケジューリングアルゴリズムの情報が保持される。また、ディスパッチノードでは、関連付けられたプロセッサコアの動作状態の情報が保持され、関連付けられたプロセッサコアが処理を実行している場合にはその処理の情報も保持される。
【００２０】
スケジューラ４０においては、エントリノード毎に、そのエントリノードにおける処理要求選択用スケジューリングアルゴリズムの情報に基づいて、そのエントリノードに接続されている処理要求のいずれかが選択される。また、ディストリビューションノード毎に、そのディストリビューションノードにおけるエントリノード選択用スケジューリングアルゴリズムの情報に基づいて、そのディストリビューションノードに接続されているエントリノードのいずれかが選択される。そして、ディスパッチノードにおけるディストリビューションノード選択用スケジューリングアルゴリズムの情報やプロセッサコアの動作状態の情報等に基づいて、ディストリビューションノードで選択されたエントリノードに対応する処理（エントリノードで選択された処理要求に対応する処理）を割り当てるディスパッチノード（プロセッサコア）が決定される。
【００２１】
なお、処理要求、エントリノード、ディストリビューションノードおよびディスパッチノードの情報は、スケジューラ専用メモリ５０にリスト構造のデータとして格納される。従って、スケジューラ４０で用いられるスケジューリングルールをアプリケーションに応じて自由に変更することが可能である。このため、スケジューラ４０の回路構成を変更することなく、様々なアプリケーションに対応することができる。また、プロセッサシステム１０でのアプリケーションの実行中にプロセッサシステム１０の状態変化に合わせてスケジューリングルールを変更することもできる。
【００２２】
スケジューラ４０には、図１に示すように、インターコネクト６０を介してスケジューラ４０の外部（プロセッサコア２０−１〜２０−ｎ等）と通信するための外部インタフェース部４１と、スケジューラ専用メモリ５０にアクセスするためのメモリアクセス部４２と、動的負荷分散のスケジューリングを実施するためのスケジューリング部４３とが設けられている。プロセッサシステム１０におけるスケジューラ４０に関する動作としては、スケジューリングルール構築動作、処理要求登録動作、処理終了通知動作およびスケジューリング結果通知動作等がある。
【００２３】
スケジューリングルール構築動作では、例えば、プロセッサシステム１０が起動された場合やプロセッサシステム１０の状態が大きく変化してスケジューリングルールの変更が必要になった場合に、プロセッサシステム１０上で予め保持されているスケジューリングルールの情報がスケジューラ４０の外部の機構（フロントエンドのプロセッサコアやローディング機構等）により外部インタフェース部４１およびメモリアクセス部４２を介してスケジューラ専用メモリ５０に格納される。スケジューラ専用メモリ５０に構築されたスケジューリングルールは、スケジューリング部４３による動的負荷分散のスケジューリングで用いられる。
【００２４】
処理要求登録動作では、例えば、スケジューラ４０の外部のプロセッサコアで実行中の処理により新たな処理が生成された場合に、処理要求の情報が外部インタフェース部４１およびメモリアクセス部４２を介してスケジューラ専用メモリ５０に格納される。このとき、アプリケーションにより処理要求の接続先のエントリノードが指定される。その後、スケジューリング部４３により動的負荷分散のスケジューリングが実施される。
【００２５】
処理終了通知動作では、例えば、プロセッサコア２０−ｘに割り当てられた処理の実行が終了した場合に、スケジューラ専用メモリ５０上のプロセッサコア２０−ｘに関連付けられたディスパッチノードにおけるプロセッサコアの動作状態の情報がプロセッサコア２０−ｘにより外部インタフェース部４１およびメモリアクセス部４２を介して更新される。その後、スケジューリング部４３により動的負荷分散のスケジューリングが実施される。
【００２６】
スケジューリング結果通知動作では、例えば、スケジューリング部４３でスケジューリングが実施された結果、プロセッサコア２０−ｘに実行させる処理が変更になった場合に、処理の変更がスケジューリング部４３により外部インタフェース部４１を介してプロセッサコア２０−ｘに通知される。
【００２７】
また、スケジューラ４０には、図１に示すように、スケジューラ専用メモリ５０に構築されたスケジューリングルールを変更および復元するためのルール変更部４４が更に設けられている。ルール変更部４４は、予め決定された処理群の最初の処理に関してスケジューリング部４３で割り当て先のプロセッサコアが決定されるのに伴ってスケジューリングルールを変更することで、スケジューリング部４３にその処理群の後続の処理を最初の処理と同一のプロセッサコアに割り当てさせる。そして、ルール変更部４４は、その処理群の最後の処理に関してスケジューリング部４３で割り当て先のプロセッサコアが決定されるのに伴ってスケジューリングルールを復元する。詳細には、ルール変更部４４は、図３〜図５に示すように動作する。
【００２８】
ステップＳ１０１において、ルール変更部４４は、スケジューリング部４３から外部インタフェース部４１にスケジューリング結果信号ＲＥＳが出力されるまで待機する。スケジューリング部４３からスケジューリング結果信号ＲＥＳが出力されると、ルール変更部４４の動作はステップＳ１０２に移行する。
【００２９】
ステップＳ１０２において、ルール変更部４４は、スケジューリング部４３に対するホールド信号ＨＯＬＤの出力を開始する。これにより、スケジューリング部４３の動作が停止される。この後、ルール変更部４４の動作はステップＳ１０３に移行する。
【００３０】
ステップＳ１０３において、ルール変更部４４は、スケジューリング結果信号ＲＥＳの中からスケジューリング部４３で割り当て先のプロセッサコアが決定された処理に対応する処理要求の情報のスケジューラ専用メモリ５０上でのアドレスを取得する。この後、ルール変更部４４の動作はステップＳ１０４に移行する。
【００３１】
ステップＳ１０４において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０３で取得したアドレスの処理要求の情報を取得する。この後、ルール変更部４４の動作はステップＳ１０５に移行する。
【００３２】
ステップＳ１０５において、ルール変更部４４は、ステップＳ１０４で取得した処理要求の情報の中から接続先のエントリノードへのポインタを取得する。この後、ルール変更部４４の動作はステップＳ１０６に移行する。
【００３３】
ステップＳ１０６において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０５で取得したポインタが指すエントリノードの情報を取得する。この後、ルール変更部４４の動作はステップＳ１０７に移行する。
【００３４】
ステップＳ１０７において、ルール変更部４４は、ステップＳ１０６で取得したエントリノードの情報に含まれるルール変更フラグが“ｔｒｕｅ”に設定されているか否かを判定する。ルール変更フラグが“ｔｒｕｅ”に設定されていると判定された場合には、ルール変更部４４の動作はステップＳ１０８に移行する。一方、ルール変更フラグが“ｆａｌｓｅ”に設定されていると判定された場合には、ルール変更部４４の動作はステップＳ１２８に移行する。なお、ルール変更フラグは、対応するエントリノードがスケジューリングルールの変更を必要とする特性を有しているか否かを示すものである。ルール変更フラグが“ｔｒｕｅ”に設定されていることは、対応するエントリノードがスケジューリングルールの変更を必要とする特性を有していることを意味する。ルール変更フラグが“ｆａｌｓｅ”に設定されていることは、対応するエントリノードがスケジューリングルールの変更を必要としない特性を有していることを意味する。
【００３５】
ステップＳ１０８において、ルール変更部４４は、ステップＳ１０６で取得したエントリノードの情報に含まれるルール変更済フラグが“ｔｒｕｅ”に設定されているか否かを判定する。ルール変更済フラグが“ｔｒｕｅ”に設定されていると判定された場合には、ルール変更部４４の動作はステップＳ１１６に移行する。一方、ルール変更済フラグが“ｆａｌｓｅ”に設定されていると判定された場合には、ルール変更部４４の動作はステップＳ１０９に移行する。なお、ルール変更済フラグは、対応するエントリノードに関してスケジューリングルールの変更が実施済みであるか否かを示すものである。ルール変更済フラグが“ｔｒｕｅ”に設定されていることは、対応するエントリノードに関してスケジューリングルールの変更が実施済みであることを意味する。ルール変更済フラグが“ｆａｌｓｅ”に設定されていることは、対応するエントリノードに関してスケジューリングルールの変更が実施済みではないことを意味する。
【００３６】
ステップＳ１０９において、ルール変更部４４は、ステップＳ１０６で取得したエントリノードの情報の中から接続先のディストリビューションノードへのポインタを取得する。この後、ルール変更部４４の動作はステップＳ１１０に移行する。
【００３７】
ステップＳ１１０において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０９で取得したポインタが指すディストリビューションノードの情報を取得する。この後、ルール変更部４４の動作はステップＳ１１１に移行する。
【００３８】
ステップＳ１１１において、ルール変更部４４は、メモリアクセス部４２からスケジューラ専用メモリ５０の空き領域のアドレスを取得する。この後、ルール変更部４４の動作はステップＳ１１２に移行する。
【００３９】
ステップＳ１１２において、ルール変更部４４は、メモリアクセス部４２を介して、ステップＳ１１０で取得したディストリビューションノードの情報をスケジューラ専用メモリ５０の空き領域（ステップＳ１１１で取得したアドレス）に格納する。この後、ルール変更部４４の動作はステップＳ１１３に移行する。
【００４０】
ステップＳ１１３において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０５で取得したポインタが指すエントリノードの情報について、接続先のディストリビューションノードへのポインタを変更前の接続先のディストリビューションノードへのポインタを格納するためのフィールドに退避させる。そして、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０５で取得したポインタが指すエントリノードの情報について、接続先のディストリビューションノードへのポインタのアドレスをステップＳ１１１で取得したアドレスに変更する。更に、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０５で取得したポインタが指すエントリノードの情報について、ルール変更済フラグを“ｔｒｕｅ”に設定する。この後、ルール変更部４４の動作はステップＳ１１４に移行する。
【００４１】
ステップＳ１１４において、ルール変更部４４は、ステップＳ１１０で取得したディストリビューションノードの情報の中から接続先のディスパッチノードへのポインタを取得する。この後、ルール変更部１１４の動作はステップＳ１１５に移行する。
【００４２】
ステップＳ１１５において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１４で取得したポインタが指すディスパッチノードの情報について、スケジューリングアルゴリズムおよびアルゴリズム変更回数をスケジューラ専用メモリ５０のステップＳ１１２で格納したディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避させる。そして、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１４で取得したポインタが指すディスパッチノードの情報について、スケジューリングアルゴリズムをステップＳ１１２で作成したディストリビューションノードが優先的に選択されるように変更するとともに、アルゴリズム変更回数をインクリメントする。この後、ルール変更部４４の動作はステップＳ１１６に移行する。
【００４３】
ステップＳ１１６において、ルール変更部４４は、ステップＳ１０４で取得した処理要求の情報に含まれる処理識別フラグが“ｔｒｕｅ”に設定されているか否かを判定する。処理識別フラグが“ｔｒｕｅ”に設定されていると判定された場合には、ルール変更部４４の動作はステップＳ１１７に移行する。一方、処理識別フラグが“ｆａｌｓｅ”に設定されていると判定された場合には、ルール変更部４４の動作はステップＳ１２８に移行する。なお、処理識別フラグは、対応する処理が予め決定された処理群の最後の処理であるか否かを示すものである。処理識別フラグが“ｔｒｕｅ”に設定されていることは、対応する処理が予め決定された処理群の最後の処理であることを意味する。処理識別フラグが“ｆａｌｓｅ”に設定されていることは、対応する処理が予め決定された処理群の最後の処理ではないことを意味する。
【００４４】
ステップＳ１１７において、ルール変更部４４は、ステップＳ１０６で取得したエントリノードの情報の中から接続先のディストリビューションノードへのポインタを取得する。この後、ルール変更部４４の動作はステップＳ１１８に移行する。
【００４５】
ステップＳ１１８において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１８で取得したポインタが指すディストリビューションノードの情報を取得する。この後、ルール変更部の動作はステップＳ１１９に移行する。
【００４６】
ステップＳ１１９において、ルール変更部４４は、ステップＳ１１８で取得したディストリビューションノードの情報の中から接続先のディスパッチノードへのポインタを取得する。この後、ルール変更部４４の動作はステップＳ１２０に移行する。
【００４７】
ステップＳ１２０において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１９で取得したポインタが指すディスパッチノードの情報を取得する。この後、ルール変更部４４の動作はステップＳ１２１に移行する。
【００４８】
ステップＳ１２１において、ルール変更部４４は、ステップＳ１２０で取得したディスパッチノードの情報に含まれるアルゴリズム変更回数がステップＳ１１８で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数（ディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避されているアルゴリズム変更回数）より１だけ大きいか否かを判定する。ディスパッチノードの情報に含まれるアルゴリズム変更回数がディストリビューションノードの情報に含まれるアルゴリズム変更回数より１だけ大きいと判定された場合には、ルール変更部４４の動作はステップＳ１２５に移行し、それ以外の場合には、ルール変更部４４の動作はステップＳ１２２に移行する。
【００４９】
ステップＳ１２２において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１９で取得したポインタが指すディスパッチノードに接続されている他のディストリビューションノード（ステップＳ１１７で取得したポインタが指すディストリビューションノードを除くディストリビューションノード）の情報を順次取得する。この後、ルール変更部４４の動作はステップＳ１２３に移行する。
【００５０】
ステップＳ１２３において、ルール変更部４４は、ステップＳ１２２で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数の少なくともいずれかがステップＳ１１８で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より大きいか否かを判定する。ステップＳ１２２で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数の少なくともいずれかがステップＳ１１８で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より大きいと判定された場合には、ルール変更部４４の動作はステップＳ１２４に移行する。ステップＳ１２２で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数の全てがステップＳ１１８で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より小さいと判定された場合には、ルール変更部４４の動作はステップＳ１２５に移行する。
【００５１】
ステップＳ１２４において、ルール変更部４４は、ステップＳ１２２で取得したディストリビューションノードの情報の中から、ステップＳ１１８で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より大きく且つステップＳ１１８で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数に最も近いアルゴリズム変更回数を含んでいるディストリビューションノードの情報を選択する。そして、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０における選択したディストリビューションノードの情報について、接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドにおけるスケジューリングアルゴリズムおよびアルゴリズム変更回数をステップＳ１１８で取得したディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避されているものに変更する。この後、ルール変更部４４の動作はステップＳ１２６に移行する。
【００５２】
ステップＳ１２５において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１９で取得したポインタが指すディスパッチノードの情報について、スケジューリングアルゴリズムおよびアルゴリズム変更回数をステップＳ１１８で取得したディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避されているものに変更する。この後、ルール変更部４４の動作はステップＳ１２６に移行する。
【００５３】
ステップＳ１２６において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０５で取得したポインタが指すエントリノードの情報について、接続先のディストリビューションノードへのポインタを変更前の接続先のディストリビューションノードへのポインタを格納するためのフィールドに退避されているものに変更する。更に、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１０５で取得したポインタが指すエントリノードの情報について、ルール変更済フラグを“ｆａｌｓｅ”に設定する。この後、ルール変更部４４の動作はステップＳ１２７に移行する。
【００５４】
ステップＳ１２７において、ルール変更部４４は、メモリアクセス部４２を介して、スケジューラ専用メモリ５０におけるステップＳ１１８で取得したポインタが指すディストリビューションノードの情報を削除する。この後、ルール変更部４４の動作はステップＳ１２８に移行する。
【００５５】
ステップＳ１２８において、ルール変更部４４は、スケジューリング部４３に対するホールド信号ＨＯＬＤの出力を終了する。これにより、スケジューリング部４３の動作が再開される。この後、ルール変更部４４の動作はステップＳ１０１に移行する。
【００５６】
図６は、アプリケーションの一例を示している。図７は、図６のアプリケーションに関するスケジューリングルールを示している。図８は、図６のアプリケーションに関する制御用プログラムを示している。図９〜図１５は、図６のアプリケーションに関するスケジューラの動作を示している。
【００５７】
ここで、図６に示すようなアプリケーションをプロセッサシステム１０で実行させる場合を考える。図６では、四角が処理を表しており、矢印が処理対のデータ依存関係（データ入出力関係）を表しており、更に、矢印の太さが処理対で共有されるデータ量を表している。従って、図６のアプリケーションでは、処理Ｐ１で生成されるデータが処理Ｐ２、Ｐ５で使用され、処理Ｐ２で生成されるデータが処理Ｐ３で使用され、処理Ｐ３で生成されるデータが処理Ｐ４、Ｐ６で使用され、処理Ｐ４で生成されるデータが処理Ｐ７で使用され、処理Ｐ５で生成されるデータが処理Ｐ３、Ｐ６で使用され、処理Ｐ６で生成されるデータが処理Ｐ７で使用されることになる。また、図６のアプリケーションでは、処理Ｐ２、Ｐ３で共有されるデータ量および処理Ｐ３、Ｐ４で共有されるデータ量が非常に多いことになる。
【００５８】
アプリケーション開発者は、アプリケーションにおける処理間のデータ依存関係を解析し、プロセッサコア間のデータ転送を抑制するために同一のプロセッサコアで実行させたい処理群（データ転送抑制対象の処理群）を決定する。図６のアプリケーションについては、処理Ｐ２、Ｐ３、Ｐ４が同一のプロセッサコアに割り当てられるようにすれば、処理Ｐ２、Ｐ３で共有される多量のデータおよび処理Ｐ３、Ｐ４で共有される多量のデータについてデータ転送が不要になり、ソフトウェア実行効率を向上させることができる。従って、処理Ｐ２、Ｐ３、Ｐ４がデータ転送抑制対象の処理群として決定される。
【００５９】
また、アプリケーション開発者は、アプリケーションの処理がどのようにスケジューリングされれば処理性能が向上するのかを検討してスケジューラ４０のスケジューリングルールを作成する。スケジューリングルールにおいては、スケジューリングルールの変更を必要としない特性を有するエントリノードが１個設けられ、ディストリビューションノードが１個設けられ、ディスパッチノードがプロセッサシステム１０のプロセッサコア数だけ設けられる。更に、スケジューリングルールの変更を必要とする特性を有するエントリノードが少なくとも同時に実行させるデータ転送抑制対象の処理群の数だけ設けられる。
【００６０】
図６のアプリケーションについては、複雑なスケジューリングは必要ないため、例えば、図７に示すようなスケジューリングルールが作成される。図７のスケジューリングルールでは、プロセッサシステム１０のプロセッサコア数が２個であるものとしており、ディスパッチノードＤＰＮ１、ＤＰＮ２がプロセッサコア２０−１、２０−２にそれぞれ対応している。また、図７のスケジューリングルールでは、エントリノードＥＮ１がスケジューリングルールの変更を必要としない特性を有しており、エントリノードＥＮ２がスケジューリングルールの変更を必要とする特性を有している。なお、スケジューリングルールはスケジューラ専用メモリ５０上のデータ構造で具現されるため、エントリノードがスケジューリングルールの変更を必要とする特性を有しているか否かについては、エントリノードの情報に含まれるルール変更フラグにより識別されるようになっている。従って、図７のスケジューリングルールでは、エントリノードＥＮ１のルール変更フラグが“ｆａｌｓｅ”に設定され、エントリノードＥＮ２のルール変更フラグが“ｔｒｕｅ”に設定されている。
【００６１】
アプリケーション開発者は、スケジューラ４０のスケジューリングルールを作成した後、プロセッサシステム１０で動作させるプログラムを作成する。プログラムには、各処理を実行するためのプログラム（処理用プログラム）と、スケジューラ４０に対してスケジューリングルール構築や処理要求登録等を実行するためのプログラム（制御用プログラム）とが存在する。制御用プログラムに関しては、スケジューリングルールをスケジューラ専用メモリ５０に構築した後、処理間のデータ依存関係に従って各処理に対応する処理要求をスケジューラ４０に順次登録するように作成される。アプリケーション開発者は、制御用プログラムを作成する際、データ転送抑制対象の処理群およびスケジューリングルールに基づいて、各処理に対応する処理要求をどのエントリノードに接続するかを決定する。図６のアプリケーションについては、データ転送抑制対象の処理群として決定された処理Ｐ２、Ｐ３、Ｐ４に対応する処理要求がエントリノードＥＮ２に接続され、その他の処理Ｐ１、Ｐ５、Ｐ６、Ｐ７に対応する処理要求がエントリノードＥＮ１に接続されるように、制御用プログラムが作成される。なお、処理Ｐ４に関しては、データ転送抑制対象の処理群における最後の処理であるため、処理要求の処理識別フラグが“ｔｒｕｅ”に設定されるようにする。処理Ｐ１〜Ｐ３、Ｐ５〜Ｐ７に関しては、データ転送抑制対象の処理群における最後の処理ではないため、処理要求の処理識別フラグが“ｆａｌｓｅ”に設定されるようにする。このようにして作成された図６のアプリケーションに関する制御用プログラムは、図８に示すように動作する。
【００６２】
ステップＳ２０１において、制御用プログラムは、スケジューリングルールをスケジューラ専用メモリ５０に構築する。この後、制御用プログラムの動作はステップＳ２０２に移行する。
【００６３】
ステップＳ２０２において、制御用プログラムは、処理Ｐ１に対応する処理要求ＰＲ１をエントリノードＥＮ１に接続する。制御用プログラムの動作はステップＳ２０３に移行する。
【００６４】
ステップＳ２０３において、制御用プログラムは、処理Ｐ１の実行終了に伴って、処理Ｐ２に対応する処理要求ＰＲ２をエントリノードＥＮ２に接続するとともに、処理Ｐ５に対応する処理要求ＰＲ５をエントリノードＥＮ１に接続する。この後、制御用プログラムの動作はステップＳ２０４に移行する。
【００６５】
ステップＳ２０４において、制御用プログラムは、処理Ｐ２の実行終了および処理Ｐ５の実行終了に伴って、処理Ｐ３に対応する処理要求ＰＲ３をエントリノードＥＮ２に接続する。この後、制御用プログラムの動作はステップＳ２０５に移行する。
【００６６】
ステップＳ２０５において、制御用プログラムは、処理Ｐ３の実行終了に伴って、処理Ｐ４に対応する処理要求ＰＲ４をエントリノードＥＮ２に接続するとともに、処理Ｐ６に対応する処理要求ＰＲ６をエントリノードＥＮ１に接続する。この後、制御用プログラムの動作はステップＳ２０６に移行する。
【００６７】
ステップＳ２０６において、制御用プログラムは、処理Ｐ４の実行終了および処理Ｐ６の実行終了に伴って、処理Ｐ７に対応する処理要求ＰＲ７をエントリノードＥＮ１に接続する。
【００６８】
以上のようにして作成された図７のスケジューリングルールおよび図８の制御用プログラムに対して、スケジューラ４０は図９〜図１５に示すように動作する。まず、図９に示すように、処理Ｐ１に対応する処理要求ＰＲ１がエントリノードＥＮ１に接続される。このとき、ディスパッチノードＤＰＮ１、ＤＰＮ２に対応するプロセッサコア２０−１、２０−２の双方が空き状態であるため、処理Ｐ１についてはディスパッチノードＤＰＮ１、ＤＰＮ２のどちらにでも割り当てることができるが、例えば、処理Ｐ１がディスパッチノードＤＰＮ１に割り当てられる。これにより、プロセッサコア２０−１で処理Ｐ１が実行される。
【００６９】
そして、プロセッサコア２０−１による処理Ｐ１の実行が終了すると、図１０に示すように、処理Ｐ５に対応する処理要求ＰＲ５がエントリノードＥＮ１に接続され、処理Ｐ２に対応する処理要求ＰＲ２がエントリノードＥＮ２に接続される。その結果、例えば、処理Ｐ５がディスパッチノードＤＰＮ１に割り当てられ、処理Ｐ２がディスパッチノードＤＰＮ２に割り当てられる。これにより、プロセッサコア２０−１で処理Ｐ５が実行され、プロセッサコア２０−２で処理Ｐ２が実行される。
【００７０】
エントリノードＥＮ２に処理要求が接続された処理Ｐ２の割り当て先がディスパッチノードＤＰＮ２に決定されると、図１１に示すように、スケジューリングルールが変更される。具体的には、ディスパッチノードＤＰＮ２のみに接続されるディストリビューションノードＤＴＮ２が追加され、エントリノードＥＮ２の接続先がディストリビューションノードＤＴＮ２に変更される。このとき、ルール変更の前にエントリノードＥＮ２がディストリビューションノードＤＴＮ１に接続されていたことを示す情報がエントリノードＥＮ２に保存される。また、エントリノードＥＮ２のルール変更済フラグが“ｔｒｕｅ”に設定される。これにより、エントリノードＥＮ２に処理要求が接続される処理は、ディストリビューションノードＤＴＮ２を経由してディスパッチノードＤＰＮ２に割り当てられるようになる。なお、処理Ｐ２がディスパッチノードＤＰＮ１に割り当てられた場合には、ディスパッチノードＤＰＮ１のみに接続されるディストリビューションノードＤＴＮ２が追加され、その結果、エントリノードＥＮ２に処理要求が接続される処理はディストリビューションノードＤＴＮ２を経由してディスパッチノードＤＰＮ１に割り当てられるようになる。
【００７１】
更に、エントリノードＥＮ２に処理要求が接続される処理はディスパッチノードＤＰＮ２に割り当てられるため、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムをディストリビューションノードＤＴＮ２が優先的に選択されるように変更すると、ソフトウェア実行効率が向上する場合が多い。そこで、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ２を優先的に選択するように変更される。このとき、ディスパッチノードＤＰＮ２の変更前のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ２に保存される。
【００７２】
次に、プロセッサコア２０−１による処理Ｐ５の実行およびプロセッサコア２０−２による処理Ｐ２の実行が終了すると、図１２に示すように、処理Ｐ３に対応する処理要求ＰＲ３がエントリノードＥＮ２に接続される。エントリノードＥＮ２はディストリビューションノードＤＴＮ２に接続されており、ディストリビューションノードＤＴＮ２はディスパッチノードＤＰＮ２のみに接続されているため、処理Ｐ３は必ずディスパッチノードＤＰＮ２（処理Ｐ２が割り当てられたディスパッチノード）に割り当てられる。これにより、プロセッサコア２０−２で処理Ｐ３が実行される。このとき、エントリノードＥＮ２のルール変更済フラグが“ｔｒｕｅ”に設定されているため、スケジューリングルールが更に変更されることはない。
【００７３】
この後、プロセッサコア２０−２による処理Ｐ３の実行が終了すると、図１３に示すように、処理Ｐ４に対応する処理要求ＰＲ４がエントリノードＥＮ２に接続され、処理Ｐ６に対応する処理要求ＰＲ６がエントリノードＥＮ１に接続される。このとき、処理Ｐ６については、ディストリビューションノードＤＴＮ１を経由してディスパッチノードＤＰＮ１、ＤＰＮ２のどちらにでも割り当てることができる。しなしながら、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ２を優先的に選択するように変更されているため、結果として、処理Ｐ６がディスパッチノードＤＰＮ１に割り当てられ、処理４がディスパッチノードＤＰＮ２に割り当てられる。これにより、プロセッサコア２０−１で処理Ｐ６が実行され、処理Ｐ４がプロセッサコア２０−２で実行される。
【００７４】
このとき、処理Ｐ４に対応する処理要求ＰＲ４の処理識別フラグが“ｔｒｕｅ”に設定されているため、処理Ｐ４の割り当て先がディスパッチノードＤＰＮ２に決定されると、図１４に示すように、スケジューリングルールが復元される。具体的には、ディストリビューションノードＤＴＮ２が削除され、エントリノードＥＮ２の接続先がディストリビューションノードＤＴＮ１に戻され、ディストリビューションノードＤＴＮ２に保存されているディスパッチノードＤＰＮ２の変更前のスケジューリングアルゴリズムを用いてディスパッチノードＤＰＮ２のスケジューリングアルゴリズムが初期状態（変更前の状態）に戻される。また、エントリノードＥＮ２のルール変更済フラグが“ｆａｌｓｅ”に設定される。
【００７５】
最後に、プロセッサコア２０−１による処理Ｐ６の実行およびプロセッサコア２０−２による処理Ｐ４の実行が終了すると、図１５に示すように、処理Ｐ７に対応する処理要求ＰＲ７がエントリノードＥＮ１に接続される。このとき、処理Ｐ７についてはディスパッチノードＤＰＮ１、ＤＰＮ２のどちらにでも割り当てることができるが、例えば、処理Ｐ７がディスパッチノードＤＰＮ１に割り当てられる。これにより、プロセッサコア２０−１で処理Ｐ７が実行される。
【００７６】
以上のように、分散メモリ型のマルチコアプロセッサシステム１０のスケジューラ４０では、スケジューリング部４３によりデータ転送抑制対象の処理群における最初の処理の割り当て先が各プロセッサコアの負荷状況に応じて決定されると、ルール変更部４４によりスケジューリングルールが変更され、その結果、スケジューリング部４３によりデータ転送抑制対象の処理群における後続の処理が最初の処理と同一のプロセッサコアに割り当てられることになる。このため、データ転送抑制対象の処理群に関してプロセッサコア間のデータ転送が抑制される。そして、スケジューリング部４３によりデータ転送抑制対象の処理群における最後の処理の割り当て先が最初の処理と同一のプロセッサコアに決定されると、ルール変更部４４によりスケジューリングルールが復元される。このため、データ転送抑制対象の処理群における最初の処理に対応する処理要求が再び登録された際には、スケジューリング部４３によりデータ転送抑制対象の処理群における最初の処理の割り当て先が各プロセッサコアの負荷状況に応じて決定されることになる。これにより、動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させることができ、ソフトウェア実行効率の大幅な向上を実現することができる。
【００７７】
図１６は、アプリケーションの別例を示している。図１７は、図１６のアプリケーションに関する条件分岐の対処方法を示している。ここで、図１６に示すようなアプリケーションをプロセッサシステム１０で実行させる場合を考える。図１６のアプリケーションは、プログラム中に条件分岐が存在し、分岐条件が成立した場合に処理Ｐ４が実行されて処理Ｐ７が処理Ｐ４で生成されたデータおよび処理Ｐ６で生成されたデータの双方を用いて実行され、分岐条件が成立しなかった場合に処理Ｐ４が実行されずに処理Ｐ７が処理Ｐ６で生成されたデータのみを用いて実行される点を除いて、図６のアプリケーションと同一である。
【００７８】
図１６のアプリケーションについては、処理Ｐ４に対応する処理要求がスケジューラ４０に登録されない場合が存在する。従って、処理Ｐ２、Ｐ３、Ｐ４がデータ転送抑制対象の処理群として決定された場合、処理Ｐ４はデータ転送抑制対象の処理群における最後の処理であるため、スケジューラ４０において、最初の処理（処理Ｐ２）の割り当て先の決定に伴ってスケジューリングルールが変更された後、スケジューリングルールが復元されない可能性がある。
【００７９】
そこで、アプリケーション開発者は、図１７に示すように、図１６のアプリケーションに対して、分岐条件が成立しなった場合（処理Ｐ４が実行されない場合）に実行される処理Ｐ４’を追加する。なお、処理Ｐ４’に関しては、処理Ｐ３で生成されるデータを使用し、処理Ｐ７で使用されるデータを生成する処理として扱われるが、実質的には何も実行しない処理である。そして、アプリケーション開発者は、処理Ｐ２、Ｐ３、Ｐ４、Ｐ４’をテータ転送抑制対象の処理群として決定する。なお、処理Ｐ４、Ｐ４’の双方に関して、データ転送抑制対象の処理群における最後の処理であるものとして、処理要求の処理識別フラグが“ｔｒｕｅ”に設定されるようにする。これにより、スケジューラ４０において、処理Ｐ２の割り当て先の決定に伴ってスケジューリングルールが変更された後、処理Ｐ４に対応する処理要求が登録されなくても、処理Ｐ４’に対応する処理要求が登録されることによってスケジューリングルールが復元されることになる。
【００８０】
図１８は、アプリケーションの別例を示している。図１９は、図１８のアプリケーションに関するスケジューリングルールを示している。図２０は、図１９のスケジューリングルールに関するルール変更後の状態を示している。次に、図１８に示すようなアプリケーションをプロセッサシステム１０で実行させる場合を考える。図１８のアプリケーションでは、処理Ｐ２、Ｐ３で共有されるデータ量、処理Ｐ３、Ｐ４で共有されるデータ量および処理Ｐ７、Ｐ８で共有されるデータ量が非常に多い。このような場合には、処理Ｐ２、Ｐ３、Ｐ４と処理Ｐ７、Ｐ８とがデータ転送抑制対象の処理群として決定され、図１９に示すようなスケジューリングルールが作成される。
【００８１】
図１９のスケジューリングルールでは、スケジューリングルールの変更を必要としない特性を有するエントリノードＥＮ１が設けられており、更に、２個のデータ転送抑制対象の処理群（処理Ｐ２、Ｐ３、Ｐ４および処理Ｐ７、Ｐ８）を同時に実行させるために、スケジューリングルールの変更を必要とする特性を有するエントリノードＥＮ２、ＥＮ３が設けられている。この場合、例えば、処理Ｐ１、Ｐ５、Ｐ６、Ｐ９に対応する処理要求がエントリノードＥＮ１に接続され、処理Ｐ２、Ｐ３、Ｐ４に対応する処理要求がエントリノードＥＮ２に接続され、処理Ｐ７、Ｐ８に対応する処理要求がエントリノードＥＮ３に接続されるように、制御用プログラムが作成される。これにより、スケジューラ４０において、処理Ｐ２、Ｐ３、Ｐ４が同一のプロセサコアに割り当てられるとともに、処理Ｐ７、Ｐ８が同一のプロセッサコアに割り当てられることになる。
【００８２】
例えば、処理Ｐ１の実行が終了した後、処理Ｐ５、Ｐ２、Ｐ７に対応する処理要求がエントリノードＥＮ１、ＥＮ２、ＥＮ３にそれぞれ接続された結果、処理Ｐ２がディスパッチノードＤＰＮ１に割り当てられ、処理Ｐ７がディスパッチノードＤＰＮ２に割り当てられると、スケジューリングルールが図２０に示すような状態に変更される。具体的には、エントリノードＥＮ２に関するルール変更として、ディスパッチノードＤＰＮ１のみに接続されるディストリビューションノードＤＴＮ２が追加され、エントリノードＥＮ２の接続先がディストリビューションノードＤＴＮ２に変更され、更に、ディスパッチノードＤＰＮ１のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ２を優先的に選択するように変更される。また、エントリノードＥＮ３に関するルール変更として、ディスパッチノードＤＰＮ２のみに接続されるディストリビューションノードＤＴＮ３が追加され、エントリノードＥＮ３の接続先がディストリビューションノードＤＴＮ３に変更され、更に、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ３を優先的に選択するように変更される。
【００８３】
このとき、エントリノードＥＮ２に関するルール変更の前にエントリノードＥＮ２がディストリビューションノードＤＴＮ１に接続されていたことを示す情報がエントリノードＥＮ２に保存され、ディスパッチノードＤＰＮ１の変更前のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ２に保存される。また、エントリノードＥＮ３に関するルール変更の前にエントリノードＥＮ３がディストリビューションノードＤＴＮ１に接続されていたことを示す情報がエントリノードＥＮ３に保存され、ディスパッチノードＤＰＮ２の変更前のスケジューリングアルゴリズムがディストリビューションノードＤＴＮ３に保存される。スケジューラ４０においては、これらの情報を用いてエントリノードＥＮ２、ＥＮ３に関するルール復元が実施されることで、エントリノードＥＮ２、ＥＮ３に関するルール変更の実施順序やルール復元の実施順序に拘わらず、スケジューリングルールを初期状態（図１９の状態）に正しく戻すことが可能である。
【００８４】
図２１は、アプリケーションの別例に関するスケジューリングルールを示している。図２２は、図２１のスケジューリングルールに関するルール変更後の状態を示している。図２３は、図２２のスケジューリングルールの要部を示している。図２４は、図２３のスケジューリングルールに対するルール復元の様子を示している。
【００８５】
これまでは、ディスパッチノードのスケジューリングアルゴリズムが１回のみ変更される場合について説明してきたが、ここでは、ディスパッチノードのスケジューリングアルゴリズムが複数回変更される場合について説明する。例えば、あるアプリケーションに関して図２１に示すようなスケジューリングルールが作成されたものとする。図２１のスケジューリングルールでは、エントリノードＥＮ１がスケジューリングルールの変更を必要としない特性を有しており、エントリノードＥＮ２、ＥＮ３、ＥＮ４がスケジューリングルールの変更を必要とする特性を有している。エントリノードＥＮ１〜ＥＮ４はディストリビューションノードＤＴＮ１に接続されており、ディストリビューションノードＤＴＮ１はディスパッチノードＤＰＮ１、ＤＰＮ２に接続されている。
【００８６】
ルール変更の際には、ディストリビューションノードが追加され、そのディストリビューションノードが接続されるディスパッチノードのスケジューリングアルゴリズムが追加されたディストリビューションノードを優先的に選択するように変更される。図２１のスケジューリングルールについては、２個のディスパッチノードに対してルール変更が３回実施されるため、ディスパッチノードＤＰＮ１、ＤＰＮ２のいずれかに関してはスケジューリングアルゴリズムが２回以上変更されることになる。
【００８７】
例えば、図２１のスケジューリングルールに対してエントリノードＥＮ２、ＥＮ３、ＥＮ４の順にルール変更が実施され、その結果、スケジューリングルールが図２２に示すような状態に変更されたものとする。図２２のスケジューリングルールでは、エントリノードＥＮ２に関するルール変更の際に追加されたディストリビューションノードＤＴＮ２がディスパッチノードＤＰＮ１に接続され、エントリノードＥＮ３に関するルール変更の際に追加されたディストリビューションノードＤＴＮ３およびエントリノードＥＮ４に関するルール変更の際に追加されたディストリビューションノードＤＴＮ４がディスパッチノードＤＰＮ２に接続されている。なお、ディスパッチノードＤＰＮ２におけるスケジューリングアルゴリズムは、エントリノードＥＮ３に関するルール変更の際にディストリビューションノードＤＴＮ３を優先的に選択するように変更され、その後、エントリノードＥＮ４に関するルール変更の際にディストリビューションノードＤＴＮ４を優先的に選択するように変更されている。また、ディストリビューションノードＤＴＮ３には、ディスパッチノードＤＰＮ２におけるエントリノードＥＮ３に関するルール変更の前のスケジューリングアルゴリズムが保存されており、ディストリビューションノードＤＴＮ４には、ディスパッチノードＤＰＮ２におけるエントリノードＥＮ４に関するルール変更の前のスケジューリングアルゴリズムが保存されている。
【００８８】
このような場合、エントリノードＥＮ３に関するルール復元およびエントリノードＥＮ４に関するルール復元の双方が完了した段階でディスパッチノードＤＰＮ２のスケジューリングアルゴリズムが初期状態に戻されているためには、エントリノードＥＮ３に関するルール復元またはエントリノードＥＮ４に関するルール復元のどちらが先に実施されるかによってディスパッチノードＤＰＮ２のスケジューリングアルゴリズムに関する復元手順を変える必要がある。
【００８９】
スケジューラ４０においては、ルール復元の際に、削除対象のディストリビューションノードが接続されているディスパッチノードにおけるアルゴリズム変更回数と、そのディスパッチノードに接続されているディストリビューションノードに保存されているアルゴリズム変更回数（接続先のディスパッチノードの変更前のアルゴリズム変更回数）とを用いて、削除対象のディストリビューションノードが接続されているディスパッチノードのスケジューリングアルゴリズムに関する復元手順が決定される。
【００９０】
具体的には、削除対象のディストリビューションノードのアルゴリズム変更回数が接続先のディスパッチノードに接続されているディストリビューションノードのアルゴリズム変更回数の中で最大である場合には、削除対象のディストリビューションノードのスケジューリングアルゴリズムおよびアルゴリズム変更回数が接続先のディスパッチノードに書き戻される。一方、削除対象のディストリビューションノードのアルゴリズム変更回数が接続先のディスパッチノードに接続されているディストリビューションノードのアルゴリズム変更回数の中で最大ではない場合には、削除対象のディストリビューションノードのアルゴリズム変更回数より大きいアルゴリズム変更回数を保存しているディストリビューションノードの中で最小のアルゴリズム変更回数（削除対象のディストリビューションノードのアルゴリズム変更回数に最も近いアルゴリズム変更回数）を保存しているディストリビューションノードが特定される。そして、削除対象のディストリビューションノードのスケジューリングアルゴリズムおよびアルゴリズム変更回数が特定されたディストリビューションノードにコピーされる。
【００９１】
図２２のスケジューリングルールにおいて、ディスパッチノードＤＰＮ２におけるアルゴリズム変更回数およびスケジューリングアルゴリズムと、ディストリビューションノードＤＴＮ３に保存されているディスパッチノードＤＰＮ２の変更前（ディストリビューションノードＤＴＮ３の追加前）のアルゴリズム変更回数およびスケジューリングアルゴリズムと、ディストリビューションノードＤＴＮ４に保存されているディスパッチノードＤＰＮ２の変更前（ディストリビューションノードＤＴＮ４の追加前）のアルゴリズム変更回数およびスケジューリングアルゴリズムとは、図２３に示すような状態になっている。
【００９２】
ルール変更の際には、ディストリビューションノードが追加され、そのディストリビューションノードの接続先のディスパッチノードについて、スケジューリングアルゴリズムが追加されたディストリビューションノードを優先的に選択するように変更され、アルゴリズム変更回数がインクリメントされる。また、追加されたディストリビューションノードに、接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数が保存される。図２３のスケジューリングルールにおいては、エントリノードＥＮ３に関するルール変更が実施された後にエントリノードＥＮ４に関するルール変更が実施されたものとしているため、ディスパッチノードＤＰＮ２について、アルゴリズム変更回数が２回に設定され、スケジューリングアルゴリズムがディストリビューションノードＤＴＮ４優先状態に設定されている。また、ディストリビューションノードＤＴＮ３には、エントリノードＥＮ３に関するルール変更が実施される前のディスパッチノードＤＰＮ２のアルゴリズム変更回数（０回）およびスケジューリングアルゴリズム（初期状態）が保存されている。ディストリビューションノードＤＴＮ４には、エントリノードＥＮ３に関するルール変更が実施された後のディスパッチノードＤＰＮ２のアルゴリズム変更回数（１回）およびスケジューリングアルゴリズム（ディストビューションノードＤＴＮ３優先状態）が保存されている。
【００９３】
図２３のスケジューリングルールに対してエントリノードＥＮ４に関するルール復元が先に実施された場合には、エントリノードＥＮ４に関するルール復元の際に、ディストリビューションノードＤＴＮ４のアルゴリズム変更回数（１回）およびスケジューリングアルゴリズム（ディストリビューションノードＤＴＮ３優先状態）がディスパッチノードＤＰＮ２に書き戻される。そして、エントリノードＥＮ３に関するルール復元の際に、ディストリビューションノードＤＴＮ３のアルゴリズム変更回数（０回）およびスケジューリングアルゴリズム（初期状態）がディスパッチノードＤＰＮ２に書き戻される。これにより、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムが初期状態に正しく戻される。
【００９４】
一方、図２３のスケジューリングルールに対してエントリノードＥＮ３に関するルール復元が先に実施された場合、エントリノードＥＮ３に関するルール復元の際に、ディストリビューションノードＤＴＮ３のスケジューリングアルゴリズム（初期状態）がディスパッチノードＤＰＮ２に書き戻されると、エントリノードＥＮ４に関するルール復元の際に、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズム（初期状態）がディストリビューションノードＤＴＮ４のスケジューリングアルゴリズム（ディストリビューションノードＤＴＮ３優先状態）で上書きされることになり、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムが初期状態に正しく戻されない。
【００９５】
そこで、図２３のスケジューリングルールに対してエントリノード３に関するルール復元が先に実施された場合には、エントリノードＥＮ３に関するルール復元の際に、図２４に示すように、ディストリビューションノードＤＴＮ３のアルゴリズム変更回数（０回）およびスケジューリングアルゴリズム（初期状態）がディストリビューションノードＤＴＮ４にコピーされる。そして、エントリノードＥＮ４に関するルール復元の際に、ディストリビューションノードＤＴＮ４のアルゴリズム変更回数（０回）およびスケジューリングアルゴリズム（初期状態）がディスパッチノードＤＰＮ２に書き戻される。これにより、ディスパッチノードＤＰＮ２のスケジューリングアルゴリズムが初期状態に正しく戻される。
【００９６】
図２５は、本発明の一実施形態の並列化コンパイラを示している。図２６は、並列化コンパイラの実行環境を示している。熟練のアプリケーション開発者がアプリケーションの特徴を理解してスケジューラの設定（スケジューリングルール等）を勘や経験に基づいて決定するような場合には、幾つかの設定を試行した後、最良と思われる設定に基づいてボトルネックを解析してプログラムの改良等により更なる改善を図るという手法が用いられることが多い。このため、プログラムの開発工数が非常に多くなるという問題がある。
【００９７】
そこで、本発明の一実施形態では、並列化コンパイラにより、逐次プログラムから並列プログラムが生成されるのと同時に、スケジューラのスケジューリングポリシーを示すスケジューラ設定情報が生成されるようにしている。これにより、プログラムの開発工数を大幅に削減することができる。なお、スケジューリングポリシーとは、エントリノード数と、各エントリノードのルール変更フラグの設定（“ｔｒｕｅ”／“ｆａｌｓｅ”）と、ディストリビューションノード数と、ディスパッチノード数と、ディスパッチノードおよびプロセッサコアの対応関係と、処理およびエントリノードの対応関係と、エントリノードおよびディストリビューションノードの接続関係と、ディストリビューションノードおよびディスパッチノードの接続関係とを含むものである。
【００９８】
本発明の一実施形態の並列化コンパイラ７０は、逐次プログラム７１を入力としてスケジューラ設定情報７２および並列プログラム７３を出力するものであり、図２５に示すように動作する。なお、並列化コンパイラ７０は、例えば、図２６に示すようなワークステーション８０上で実行される。ワークステーション８０は、ディスプレイ装置８１、キーボード装置８２および制御装置８３等を有している。制御装置８３には、ＣＰＵ（Central Processing Unit）８４、ＨＤ（Hard Disk）８５および記録媒体ドライブ装置８６等が搭載されている。ワークステーション８０においては、記録媒体ドライブ装置８６を介して記録媒体８７から読み出されたコンパイラプログラムがＨＤ８５に格納されており、ＣＰＵ８４によりＨＤ８５上のコンパイラプログラムが実行されることで、並列化コンパイラ７０が実現される。
【００９９】
ステップＳ３０１において、並列化コンパイラ７０は、逐次プログラム７１を解析して処理単位に分割する。例えば、並列化コンパイラ７０は、基本ブロックや手続き呼び出しに着目して逐次プログラム７１を処理単位に分割する。なお、並列化コンパイラ７０がプラグマ等によるユーザの指示に基づいて逐次プログラム７１を処理単位に分割するようにしてもよい。この後、並列化コンパイラ７０の動作はステップＳ３０２に移行する。
【０１００】
ステップＳ３０２において、並列化コンパイラ７０は、ステップＳ３０１で得られた複数の処理に関して、処理毎に実行時間を見積もる。例えば、並列化コンパイラ７０は、プログラムの行数やループ回数等に基づいて各処理の実行時間を見積もる。なお、並列化コンパイラ７０が過去の実績や経験等に基づいてユーザからプラグマ等により与えられた各処理の実行時間を使用するようにしてもよい。この後、並列化コンパイラ７０の動作はステップＳ３０３に移行する。
【０１０１】
ステップＳ３０３において、並列化コンパイラ７０は、ステップＳ３０１で得られた複数の処理に関して、処理間の制御依存関係およびデータ依存関係を解析し、制御フローグラフ（ＣＦＧ：Control Flow Graph）およびデータフローグラフ（ＤＦＧ：Data Flow Graph）を生成する。制御依存関係およびデータ依存関係の解析については、「“コンパイラの構成と最適化”，中田育男著，朝倉書店，１９９９年９月，ＩＳＢＮ４−２５４−１２１３９−３」や「“コンパイラ−原理・技法・ツール”，Ａ．Ｖ．エイホ，Ｒ．セシィ，Ｊ．Ｄ．ウルマン著，サイエンス社，１９９０年１０月，ＩＳＢＮ４−７８１９−０５８５−４」等の文献に記載されているため、ここでの詳細な説明は省略する。
【０１０２】
また、並列化コンパイラ７０は、処理間のデータ依存関係を解析する際に、データ依存関係を有する処理対毎に、媒介する変数の型に応じて処理対で共有されるデータ量を導出する。例えば、変数の型が基本データ型（ｃｈａｒ型、ｉｎｔ型やｆｌｏａｔ型等）である場合には、処理対で共有されるデータ量として、基本データの大きさが用いられる。変数の型が構造体型である場合には、処理対で共有されるデータ量として、構造体メンバーのデータ量の総和が用いられる。変数の型が共用体型である場合には、処理対で共有されるデータ量として、共用体メンバーのデータ量の最大値が用いられる。変数の型がポインタ型である場合には、処理対で共有されるデータ量として、ポインタが指す可能性がある変数やデータ領域のデータ量から推定される値が用いられる。具体的には、アドレス計算で代入される場合には、処理対で共有されるデータ量として、アドレス計算対象となる変数のデータ量が用いられる。動的なメモリ確保にて代入される場合には、処理対で共有されるデータ量として、配列の要素のデータ量および配列の大きさ（要素数）の積が用いられる。なお、複数のデータ量となる可能性がある場合には、処理対で共有されるデータ量として、複数のデータ量の最大値または平均値が用いられる。この後、並列化コンパイラ７０の動作はステップＳ３０４に移行する。
【０１０３】
ステップＳ３０４において、並列化コンパイラ７０は、ステップＳ３０１で得られた複数の処理に関して、データ依存関係を有する処理対毎に、その処理対の各処理が別々のプロセッサコアに割り当てられた場合に必要となるデータ転送時間を見積もる。例えば、各処理対のデータ転送時間として、ステップＳ３０３でその処理対に関して導出されたデータ量とレイテンシ（単位データ量の転送に要する時間）と定数との積が用いられる。この後、並列化コンパイラ７０の動作はステップＳ３０５に移行する。
【０１０４】
ステップＳ３０５において、並列化コンパイラ７０は、ステップＳ３０２〜Ｓ３０４で得られた処理間の制御依存関係およびデータ依存関係の解析結果（制御フローグラフおよびデータフローグラフ）と処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、スケジューリングポリシー最適化処理を実施する。スケジューリングポリシー最適化処理の詳細については、図２７を用いて後述する。この後、並列化コンパイラ７０の動作はステップＳ３０６に移行する。
【０１０５】
ステップＳ３０６において、並列化コンパイラ７０は、ステップＳ３０５で得られたスケジューリングポリシーを示すスケジューラ設定情報７２を生成する。また、並列化コンパイラ７０は、中間表現に従って並列プログラム７３を生成する。
【０１０６】
並列化コンパイラ７０は、例えば、非同期遠隔手続き呼び出しにより並列プログラム７３を生成する場合、各処理のプログラムを手続きの形式で生成する。並列化コンパイラ７０は、データ依存関係の解析により求められる入力変数を引数として受け取り、出力変数の値を復帰値として返すまたは出力変数の値を格納するアドレスを引数として受け取るような手続きを生成する。並列化コンパイラ７０は、処理の内容となる部分プログラムで使用される変数の中で入力変数以外のものを求め、その変数を宣言するコードを生成する。そして、並列化コンパイラ７０は、部分プログラムの本文を出力した後、出力変数の値を復帰値として返すコードまたは出力変数の値を引数として受け取ったアドレスに代入するコードを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間でのデータの受け渡しについては除外される。また、並列化コンパイラ７０は、各処理を非同期遠隔手続き呼び出しに置き換えたプログラムを生成する。並列化コンパイラ７０は、データ依存関係の解析結果から、処理の実行結果を使用するコードまたは処理の呼び出しの前でその処理の非同期遠隔手続き呼び出しを待ち合わせるコードを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間のデータ依存関係については除外される。
【０１０７】
並列化コンパイラ７０は、例えば、スレッドにより並列プログラム７３を生成する場合、各処理のプログラムをスレッドの形式で生成する。並列化コンパイラ７０は、処理の内容となる部分プログラムで使用される変数を求め、その変数を宣言するコードを生成する。次に、並列化コンパイラ７０は、データ依存関係の解析により求められる入力変数を受信するコードと、実行開始を示すメッセージを受信するコードとを生成する。そして、並列化コンパイラ７０は、部分プログラムの本文を出力した後、出力変数を送信するコードと、実行終了を示すメッセージを送信するコードとを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間でのデータの受け渡しについては除外される。また、並列化コンパイラ７０は、各処理をスレッドの起動メッセージの送信に置き換えたプログラムを生成する。並列化コンパイラ７０は、データ依存関係の解析結果から、処理の実行結果を使用するコードまたは処理の呼び出しの前でその処理の実行結果を受信するコードを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間のデータ依存関係については除外される。更に、並列化コンパイラ７０は、ループの繰り越しが発生する場合には、ループ繰越時にスレッド起動前で実行終了を示すメッセージを受信するコードを生成し、プログラムの最後で全てのスレッドについて実行終了を示すメッセージを受信するコードを生成する。
【０１０８】
図２７は、スケジューリングポリシー最適化処理を示している。図２５のステップＳ３０５（スケジューリングポリシー最適化処理）において、並列化コンパイラ７０は、図２７に示すように動作する。
【０１０９】
ステップＳ４０１において、並列化コンパイラ７０は、制御フローグラフ（ＣＦＧ）に基づいて逐次プログラム７１を基本ブロック単位に分割する。この後、並列化コンパイラ７０の動作はステップＳ４０２に移行する。
【０１１０】
ステップＳ４０２において、並列化コンパイラ７０は、ステップＳ４０１で得られた複数の基本ブロックに関して、未選択の基本ブロックがあるか否かを判定する。未選択の基本ブロックがあると判定された場合には、並列化コンパイラ７０の動作はステップＳ４０３に移行する。一方、未選択の基本ブロックがないと判定された場合には、スケジューリングポリシー最適化処理は終了し、並列化コンパイラ７０の動作は図２５のステップ３０６に移行する。
【０１１１】
ステップＳ４０３において、並列化コンパイラ７０は、未選択の基本ブロックのいずれかを選択する。この後、並列化コンパイラ７０の動作はステップＳ４０４に移行する。
【０１１２】
ステップＳ４０４において、並列化コンパイラ７０は、ステップＳ４０３で選択した基本ブロックのデータフローグラフ（ＤＦＧ）をグラフＧｂとして設定する。この後、並列化コンパイラ７０の動作はステップＳ４０５に移行する。
【０１１３】
ステップＳ４０５において、並列化コンパイラ７０は、変数ｉの値を１に設定する。この後、並列化コンパイラ７０の動作はステップＳ４０６に移行する。
【０１１４】
ステップＳ４０６において、並列化コンパイラ７０は、グループ化対象グラフ抽出処理（グラフＧｂからグループ化対象グラフＧｂｉを抽出する処理）を実施する。グループ化対象グラフ抽出処理の詳細については、図２８を用いて後述する。この後、並列化コンパイラ７０の動作はステップＳ４０７に移行する。
【０１１５】
ステップＳ４０７において、並列化コンパイラ７０は、ステップＳ４０６で抽出したグラフＧｂｉが空であるか否かを判定する。グラフＧｂｉが空であると判定された場合には、並列化コンパイラ７０の動作はステップＳ４０２に移行する。一方、グラフＧｂｉが空ではないと判定された場合には、並列化コンパイラ７０の動作はステップＳ４０８に移行する。
【０１１６】
ステップＳ４０８において、並列化コンパイラ７０は、グラフＧｂからグラフＧｂｉを取り除いたものをグラフＧｂとして設定する。この後、並列化コンパイラ７０の動作はステップＳ４０９に移行する。
【０１１７】
ステップＳ４０９において、並列化コンパイラ７０は、変数ｉの値をインクリメントする。この後、並列化コンパイラ７０の動作はステップＳ４１０に移行する。
【０１１８】
ステップＳ４１０において、並列化コンパイラ７０は、変数ｉの値が所定値ｍ（同時に実行させるデータ転送抑制対象の処理群の数）より大きいか否かを判定する。変数ｉの値が所定値ｍより大きいと判定された場合には、並列化コンパイラ７０の動作はステップＳ４０２に移行する。一方、変数ｉの値が所定値ｍ以下であると判定された場合には、並列化コンパイラ７０の動作はステップＳ４０６に移行する。
【０１１９】
以上のようなスケジューリングポリシー最適化処理において、エントリノード数については、スケジューリングルールの変更を必要とする特性を有するエントリノードをｍ個設け、スケジューリングルールの変更を必要としない特性を有するエントリノードを１個設けるものとして、（ｍ＋１）個に決定される。ディストリビューションノード数については、１個に決定される。ディスパッチノード数については、プロセッサシステム１０のプロセッサコア数（ｎ個）に決定される。なお、プロセッサシステム１０のプロセッサコア数が確定していない場合には、逐次プログラム７１に内在する最大並列度がディスパッチノード数として決定される。ディスパッチノードおよびプロセッサコアの対応関係については、ｎ個のディスパッチノードがｎ個のプロセッサコアに１対１で対応付けられるように決定される。
【０１２０】
処理およびエントリノードの対応関係については、グループ化対象グラフの頂点集合に対応する処理群（データ転送抑制対象の処理群）がスケジューリングルールの変更を必要とする特性を有するｍ個のエントリノードに対して順番に対応付けられ、データ転送抑制対象の処理群のいずれにも属さない処理がスケジューリングルールの変更を必要としない特性を有する１個のエントリノードに対応付けられるように決定される。エントリノードおよびディストリビューションノードの接続関係については、ディストリビューションノード数が１個であるため、全てのエントリノードが１個のディストリビューションノードに接続されるように決定される。ディストリビューションノードおよびディスパッチノードの接続関係については、ディストリビューションノード数が１個であるため、１個のディストリビューションノードが全てのディスパッチノードに接続されるように決定される。
【０１２１】
図２８は、グループ化対象グラフ抽出処理を示している。図２７のステップＳ４０６（グループ化対象グラフ抽出処理）において、並列化コンパイラ７０は、図２８に示すように動作する。
【０１２２】
ステップＳ５０１において、並列化コンパイラ７０は、グラフＧｍの頂点集合Ｖｍおよび辺集合Ｅｍと辺集合Ｅｘとを空に設定する。この後、並列化コンパイラ７０の動作はステップＳ５０２に移行する。
【０１２３】
ステップＳ５０２において、並列化コンパイラ７０は、グラフＧｂ（図２７のステップＳ４０３で選択した基本ブロックのデータフローグラフ）の辺集合Ｅｂには含まれるが辺集合Ｅｘには含まれない辺がないか否かを判定する。辺集合Ｅｂには含まれるが辺集合Ｅｘには含まれない辺がないと判定された場合には、並列化コンパイラ７０の動作はステップＳ５１６に移行する。一方、辺集合Ｅｂには含まれるが辺集合Ｅｘには含まれない辺があると判定された場合には、並列化コンパイラ７０の動作はステップＳ５０３に移行する。
【０１２４】
ステップＳ５０３において、並列化コンパイラ７０は、辺集合Ｅｂには含まれるが辺集合Ｅｘには含まれない辺の中でデータ転送時間（辺の始点および終点に対応する処理対に関して図２５のステップＳ３０４で見積もったデータ転送時間）が最大である辺を辺ｅとして設定し、更に、辺ｅの始点を頂点ｕとして設定するとともに、辺ｅの終点を頂点ｖとして設定する。この後、並列化コンパイラ７０の動作はステップＳ５０４に移行する。
【０１２５】
ステップＳ５０４において、並列化コンパイラ７０は、辺ｅのデータ転送時間ｔｅが下限値ｆ（ｔｕ，ｔｖ）以上であるか否かを判定する。ここで、下限値ｆ（ｔｕ，ｔｖ）は、対応する処理対をデータ転送抑制対象の処理群として決定すべきか否かを判断するためのものであり、頂点ｕ、ｖの実行時間ｔｕ、ｔｖ（頂点ｕ、ｖに対応する処理に関して図２５のステップＳ３０２で見積もった実行時間）に基づいて導出される。例えば、下限値ｆ（ｔｕ，ｔｖ）として、頂点ｕの実行時間ｔｕおよび頂点ｖの実行時間ｔｖの和と１．０未満の定数との積が用いられる。辺ｅのデータ転送時間ｔｅが下限値ｆ（ｔｕ，ｔｖ）以上であると判定された場合には、並列化コンパイラ７０の動作はステップＳ５０６に移行する。一方、辺ｅのデータ転送時間ｔｅが下限値ｆ（ｔｕ、ｔｖ）未満であると判定された場合には、並列化コンパイラ７０の動作はステップＳ５０５に移行する。
【０１２６】
ステップＳ５０５において、並列化コンパイラ７０は、辺ｅを辺集合Ｅｘに追加する。この後、並列化コンパイラ７０の動作はステップＳ５０２に移行する。
【０１２７】
ステップＳ５０６において、並列化コンパイラ７０は、頂点ｕ、ｖを頂点集合Ｖｍに追加するとともに、辺ｅを辺集合Ｅｍに追加する。この後、並列化コンパイラ７０の動作はステップＳ５０７に移行する。
【０１２８】
ステップＳ５０７において、並列化コンパイラ７０は、頂点ｕの入力辺があるか否かを判定する。頂点ｕの入力辺があると判定された場合には、並列化コンパイラ７０の動作はステップＳ５０８に移行する。一方、頂点ｕの入力辺がないと判定された場合には、並列化コンパイラ７０の動作はステップＳ５１１に移行する。
【０１２９】
ステップＳ５０８において、並列化コンパイラ７０は、頂点ｕの入力辺の中でデータ転送時間が最大である辺を辺ｅ’として設定し、更に、辺ｅ’の始点を頂点ｕ’として設定する。この後、並列化コンパイラ７０の動作はステップＳ５０９に移行する。
【０１３０】
ステップＳ５０９において、並列化コンパイラ７０は、辺ｅ’のデータ転送時間ｔｅ’が下限値ｇ（ｔｅ）以上であるか否かを判定する。ここで、下限値ｇ（ｔｅ）は、対応する処理をデータ転送抑制対象の処理群に追加すべきか否かを判断するためのものであり、辺ｅのデータ転送時間ｔｅに基づいて導出される。例えば、下限値ｇ（ｔｅ）として、辺ｅのデータ転送時間ｔｅと１．０未満の定数との積が用いられる。辺ｅ’のデータ転送時間ｔｅ’が下限値ｇ（ｔｅ）以上であると判定された場合には、並列化コンパイラ７０の動作はステップＳ５１０に移行する。一方、辺ｅ’のデータ転送時間ｔｅ’が下限値ｇ（ｔｅ）未満であると判定された場合には、並列化コンパイラ７０の動作はステップＳ５１１に移行する。
【０１３１】
ステップＳ５１０において、並列化コンパイラ７０は、頂点ｕ’を頂点集合Ｖｍに追加するとともに、辺ｅ’を辺集合Ｅｍに追加し、更に、頂点ｕ’を頂点ｕとして設定する。この後、並列化コンパイラ７０の動作はステップＳ５０７に移行する。
【０１３２】
ステップＳ５１１において、並列化コンパイラ７０は、頂点ｖの出力辺があるか否かを判定する。頂点ｖの出力辺があると判定された場合には、並列化コンパイラ７０の動作はステップＳ５１２に移行する。一方、頂点ｖの出力辺がないと判定された場合には、並列化コンパイラ７０の動作はステップＳ５１５に移行する。
【０１３３】
ステップＳ５１２において、並列化コンパイラ７０は、頂点ｖの出力辺の中でデータ転送時間が最大である辺を辺ｅ’として設定し、更に、辺ｅ’の終点を頂点ｖ’として設定する。この後、並列化コンパイラ７０の動作はステップＳ５１３に移行する。
【０１３４】
ステップＳ５１３において、並列化コンパイラ７０は、辺ｅ’のデータ転送時間ｔｅ’が下限値ｇ（ｔｅ）以上であるか否かを判定する。辺ｅ’のデータ転送時間ｔｅ’が下限値ｇ（ｔｅ）以上であると判定された場合には、並列化コンパイラ７０の動作はステップＳ５１４に移行する。一方、辺ｅ’のデータ転送時間ｔｅ’が下限値ｇ（ｔｅ）未満であると判定された場合には、並列化コンパイラ７０の動作はステップＳ５１５に移行する。
【０１３５】
ステップＳ５１４において、並列化コンパイラ７０は、頂点ｖ’を頂点集合Ｖｍに追加するとともに、辺ｅ’を辺集合Ｅｍに追加し、更に、頂点ｖ’を頂点ｖとして設定する。この後、並列化コンパイラ７０の動作はステップＳ５１１に移行する。
【０１３６】
ステップＳ５１５において、並列化コンパイラ７０は、頂点ｖに対応する処理をデータ転送抑制対象の処理群（頂点集合Ｖｍに対応する処理群）における最後の処理として決定する。この後、並列化コンパイラ７０の動作はステップＳ５１６に移行する。
【０１３７】
ステップＳ５１６において、並列化コンパイラ７０は、グラフＧｍをグループ化対象グラフＧｂｉとして設定する。これにより、グループ化対象グラフ抽出処理は終了し、並列化コンパイラ７０の動作は図２７のステップＳ４０７に移行する。
【０１３８】
図２９は、スケジューリングポリシー最適化処理の変形例を示している。並列化コンパイラ７０においては、プロセッサシステム１０のシステム構成（プロセッサコア数および各プロセッサコアの種類）が確定している場合に、そのシステム構成に合わせてスケジューラ設定情報７２を生成させることも可能である。この場合の並列化コンパイラ７０の動作フローは、ステップＳ３０２、Ｓ３０５において並列化コンパイラ７０が以下に示すように動作することを除いて、図２５の動作フローと同一である。
【０１３９】
ステップＳ３０２において、並列化コンパイラ７０は、ステップＳ３０１で得られた複数の処理に関して、コア種（プロセッサコアの種類）毎に各処理の実行時間を見積もる。例えば、並列化コンパイラ７０は、プログラムの行数やループ回数等に基づいて命令数を推定して各プロセッサコアのＭＩＰＳ（Million Instructions Per Second））数等から各処理の実行時間を見積もる。なお、並列化コンパイラ７０が過去の実績や経験等に基づいてユーザからプラグマ等により与えられた各処理の実行時間を使用するようにしてもよい。
【０１４０】
ステップＳ３０５において、並列化コンパイラ７０は、ステップＳ３０２〜Ｓ３０４で得られた処理間の制御依存関係およびデータ依存関係の解析結果（制御フローグラフおよびデータフローグラフ）と処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、図２９に示すようなスケジューリングポリシー最適化処理を実施する。
【０１４１】
ステップＳ６０１において、並列化コンパイラ７０は、制御フローグラフ（ＣＦＧ）に基づいて逐次プログラム７１を基本ブロック単位に分割する。この後、並列化コンパイラ７０の動作はステップＳ６０２に移行する。
【０１４２】
ステップＳ６０２において、並列化コンパイラ７０は、ステップＳ６０１で得られた複数の基本ブロックに関して、未選択の基本ブロックがあるか否かを判定する。未選択の基本ブロックがあると判定された場合には、並列化コンパイラ７０の動作はステップＳ６０３に移行する。一方、未選択の基本ブロックがないと判定された場合には、スケジューリングポリシー最適化処理は終了し、並列化コンパイラ７０の動作は図２５のステップＳ３０６に移行する。
【０１４３】
ステップＳ６０３において、並列化コンパイラ７０は、未選択の基本ブロックのいずれかを選択する。この後、並列化コンパイラ７０の動作はステップＳ６０４に移行する。
【０１４４】
ステップＳ６０４において、並列化コンパイラ７０は、ステップＳ６０３で選択した基本ブロックに関して、処理毎に割り当て先のコア種を決定する。この後、並列化コンパイラ７０の動作はステップＳ６０５に移行する。
【０１４５】
なお、ステップＳ６０４では、例えば、プラグマ等によるユーザの指示に基づいて各処理の割り当て先のコア種が決定される。或いは、処理の実行に適し且つプロセッサコア間の負荷が均衡するように各処理の割り当て先のコア種が決定される。具体的には、ある処理に関して、コア種毎に見積もられた実行時間の中でコア種間の性能比と比較して大幅に結果が突出しているものがある場合には、そのコア種が割り当て先のコア種として決定される。また、割り当て先のコア種が決定されている処理との間で多量のデータを共有しており、割り当て先のコア種が決定されていない処理に関しては、割り当て先のコア種が決定されている処理と同一のコア種が割り当て先のコア種として決定される。残りの処理に関しては、コア種間で負荷の偏りがないように割り当て先のコア種が決定される。例えば、残りの処理に関して、コア種割り当て結果が全通り生成され、コア種割り当て結果の各々について各コア種の処理実行時間（そのコア種が割り当て先のコア種として決定された処理の実行時間の総和をそのコア種のプロセッサコア数で割った値）が算出され、コア種間で処理実行時間の偏りが最小となるコア種割り当て結果が選択される。或いは、残りの処理の中で実行時間が長いものから順番にコア種間の負荷の偏りを解消するように割り当先のコア種が決定される。
【０１４６】
ステップＳ６０５において、並列化コンパイラ７０は、ステップＳ６０４で決定した各処理の割り当て先のコア種に基づいて、コア種毎に図２８と同様のグループ化対象グラフ抽出処理を実施する。この後、並列化コンパイラ７０の動作はステップＳ６０２に移行する。
【０１４７】
以上のようなスケジューリングポリシー最適化処理において、エントリノード数については、コア種毎に、そのコア種に関して同時に実行させるデータ転送抑制対象の処理群の数がｍ’個であるときに、スケジューリングルールの変更を必要とする特性を有するエントリノードをｍ’個設け、スケジューリングルールの変更を必要としない特性を有するエントリノードを１個設けた場合のエントリノードの総数に決定される。なお、各コア種に関して同時に実行させるデータ転送抑制対象の処理群の数は、ユーザからプラグマ等により与えられるものとする。ディストリビューションノード数については、コア種毎に１個のディストリビューションノードを設けた場合のディストリビューションノードの総数（コア種の数）に決定される。ディスパッチノード数については、プロセッサシステム１０のプロセッサコア数（ｎ個）に決定される。ディスパッチノードおよびプロセッサコアの対応関係については、ｎ個のディスパッチノードがｎ個のプロセッサコアに１対１で対応付けられるように決定される。
【０１４８】
処理およびエントリノードの対応関係については、コア種毎に、グループ化対象グラフの頂点集合に対応する処理群（データ転送抑制対象の処理群）がスケジューリングルールの変更を必要とする特性を有するｍ’個のエントリノードに対して順番に対応付けられ、データ転送抑制対象の処理群のいずれにも属さない処理がスケジューリングルールの変更を必要としない特性を有する１個のエントリノードに対応付けられるように決定される。エントリノードおよびディストリビューションノードの接続関係については、コア種毎に全てのエントリノードが１個のディストリビューションノードに接続されるように決定される。ディストリビューションノードおよびディスパッチノードの接続関係については、コア種毎に１個のディストリビューションノードが全てのディスパッチノードに接続されるように決定される。
【０１４９】
図３０は、図１のプロセッサシステムの具体例を示している。図３１は、図３０のプロセッサシステム用のスケジューリングルールを示している。例えば、図３０に示すように、プロセッサシステム１０において、プロセッサコア数が５個であり、プロセッサコア２０−１がＲＩＳＣ型であり、プロセッサコア２０−２、２０−３がＶＬＩＷ型であり、プロセッサコア２０−４、２０−５がＤＳＰ型であるものとする。また、ＶＬＩＷ型のプロセッサコア２０−２、２−３に関して同時に実行させるデータ転送抑制対象の処理群の数が３個であり、ＤＳＰ型のプロセッサコア２０−４、２０−５に関して同時に実行させるデータ転送抑制対象の処理群の数が１個であるものとする。このような場合、並列化コンパイラ７０によりプロセッサシステム１０のシステム構成に合わせて生成されるスケジューラ設定情報７２は、図３１に示すようなスケジューリングルールを規定するものになる。
【０１５０】
図３１のスケジューリングルールにおいては、ＲＩＳＣ型に関して、スケジューリングルールの変更を必要としない特性を有する１個のエントリノード（ＥＮ１）と、１個のディストリビューションノード（ＤＴＮ１）と、プロセッサコア２０−１に関連付けられた１個のディスパッチノード（ＤＰＮ１）とが設けられている。また、エントリノードＥＮ１がディストリビューションノードＤＴＮ１に接続されており、ディストリビューションＤＴＮ１がディスパッチノードＤＰＮ１に接続されている。
【０１５１】
ＶＬＩＷ型に関しては、スケジューリングルールの変更を必要としない特性を有する１個のエントリノード（ＥＮ２）と、スケジューリングルールの変更を必要とする特性を有する３個のエントリノード（ＥＮ３、ＥＮ４、ＥＮ５）と、１個のディストリビューションノード（ＤＴＮ２）と、プロセッサコア２０−２、２０−３に関連付けられた２個のディスパッチノード（ＤＰＮ２、ＤＰＮ３）とが設けられている。また、エントリノードＥＮ２〜ＥＮ５の全てがディストリビューションノードＤＴＮ２に接続されており、ディストリビューションノードＤＴＮ２がディスパッチノードＤＰＮ２、ＤＰＮ３の双方に接続されている。
【０１５２】
ＤＳＰ型に関しては、スケジューリングルールの変更を必要としない特性を有する１個のエントリノード（ＥＮ６）と、スケジューリングルールの変更を必要とする特性を有する１個のエントリノード（ＥＮ７）と、１個のディストリビューションノード（ＤＴＮ３）と、プロセッサコア２０−４、２０−５に関連付けられた２個のディスパッチノード（ＤＰＮ４、ＤＰＮ５）とが設けられている。また、エントリノードＥＮ６、ＥＮ７の双方がディストリビューションノードＤＴＮ３に接続されており、ディストリビューションノードＤＴＮ３がディスパッチノードＤＰＮ４、ＤＰＮ５の双方に接続されている。
【０１５３】
以上のような本発明の一実施形態では、分散メモリ型のマルチコアプロセッサシステム１０のスケジューラ４０において、スケジューリング部４３によりデータ転送抑制対象の処理群における最初の処理の割り当て先が決定されると、スケジューリング部４３によりデータ転送抑制対象の処理群における後続の処理が最初の処理と同一のプロセッサコアに割り当てられるように、ルール変更部４４によりスケジューリングルールが変更される。また、スケジューリング部４３によりデータ転送抑制対象の処理群における最後の処理の割り当て先が決定されると、ルール変更部４４によりスケジューリングルールが復元される。これにより、動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させることができ、ソフトウェア実行効率を大幅に向上させることができる。また、並列化コンパイラ７０によりスケジューラ設定情報７２が生成されることで、プログラムの開発期間を短縮することができ、その結果、プロセッサシステム１０のコスト削減を実現することができる。
【０１５４】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリとを含むプロセッサシステムに対して、スケジューリングを実施するスケジューラであって、
実行要求を受けた処理に関して、ルール情報に基づいて前記複数のプロセッサコアの中から割り当て先を決定するスケジューリング部と、
予め決定された処理群の最初の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を変更し、前記スケジューリング部に前記処理群の後続の処理を前記最初の処理と同一のプロセッサコアに割り当てさせ、前記処理群の最後の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を復元するルール変更部とを備えることを特徴とするスケジューラ。
（付記２）
付記１に記載のスケジューラにおいて、
前記ルール情報は、処理の実行要求が入力される複数のエントリノードと前記複数のプロセッサコアとの間における処理の割り当てに関する対応関係を規定する情報を含み、
前記複数のエントリノードは、前記ルール情報の変更を必要としない特性を有する第１エントリノードと、前記ルール情報の変更を必要とする特性を有する第２エントリノードとを含み、
前記ルール変更部は、前記第２エントリノードに実行要求が入力された処理を前記処理群に属する処理として認識することを特徴とするスケジューラ。
（付記３）
付記２に記載のスケジューラにおいて、
前記スケジューラで用いられる制御情報は、前記ルール情報を含むとともに、前記複数のエントリノードの各々について、そのエントリノードが前記第２エントリノードである場合にセット状態に設定される第１フラグ情報と、そのエントリノードに関する前記ルール情報の変更が実施済みである場合にセット状態に設定される第２フラグ情報とを含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第１および前記第２フラグ情報に基づいて、前記ルール情報を変更する動作を実施する必要があるか否かを判断することを特徴とするスケジューラ。
（付記４）
付記３に記載のスケジューラにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第１フラグ情報がセット状態であり、対応する前記第２フラグ情報がリセット状態である場合に、前記ルール情報を変更するとともに、対応する前記第２フラグ情報をセット状態に設定することを特徴とするスケジューラ。
（付記５）
付記３に記載のスケジューラにおいて、
前記制御情報は、実行要求を受けた処理の各々について、その処理が前記処理群の最後の処理である場合にセット状態に設定される第３フラグ情報を含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第１、前記第２および前記第３フラグ情報に基づいて、前記ルール情報を復元する動作を実施する必要があるか否かを判断することを特徴とするスケジューラ。
（付記６）
付記５に記載のスケジューラにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第１、前記第２および前記第３フラグ情報の全てがセット状態である場合に、前記ルール情報を復元するとともに、対応する前記第２フラグ情報をリセット状態に設定することを特徴とするスケジューラ。
（付記７）
複数のプロセッサコアと、
前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、
前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを備え、
前記スケジューラは、
実行要求を受けた処理に関して、ルール情報に基づいて前記複数のプロセッサコアの中から割り当て先を決定するスケジューリング部と、
予め決定された処理群の最初の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を変更し、前記スケジューリング部に前記処理群の後続の処理を前記最初の処理と同一のプロセッサコアに割り当てさせ、前記処理群の最後の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を復元するルール変更部とを備えることを特徴とするプロセッサシステム。
（付記８）
付記７に記載のプロセッサシステムにおいて、
前記ルール情報は、処理の実行要求が入力される複数のエントリノードと前記複数のプロセッサコアとの間における処理の割り当てに関する対応関係を規定する情報を含み、
前記複数のエントリノードは、前記ルール情報の変更を必要としない特性を有する第１エントリノードと、前記ルール情報の変更を必要とする特性を有する第２エントリノードとを含み、
前記ルール変更部は、前記第２エントリノードに実行要求が入力された処理を前記処理群に属する処理として認識することを特徴とするプロセッサシステム。
（付記９）
付記８に記載のプロセッサシステムにおいて、
前記スケジューラで用いられる制御情報は、前記ルール情報を含むとともに、前記複数のエントリノードの各々について、そのエントリノードが前記第２エントリノードである場合にセット状態に設定される第１フラグ情報と、そのエントリノードに関する前記ルール情報の変更が実施済みである場合にセット状態に設定される第２フラグ情報とを含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第１および前記第２フラグ情報に基づいて、前記ルール情報を変更する動作を実施する必要があるか否かを判断することを特徴とするプロセッサシステム。
（付記１０）
付記９に記載のプロセッサシステムにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第１フラグ情報がセット状態であり、対応する前記第２フラグ情報がリセット状態である場合に、前記ルール情報を変更するとともに、対応する前記第２フラグ情報をセット状態に設定することを特徴とするプロセッサシステム。
（付記１１）
付記９に記載のプロセッサシステムにおいて、
前記制御情報は、実行要求を受けた処理の各々について、その処理が前記処理群の最後の処理である場合にセット状態に設定される第３フラグ情報を含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第１、前記第２および前記第３フラグ情報に基づいて、前記ルール情報を復元する動作を実施する必要があるか否かを判断することを特徴とするプロセッサシステム。
（付記１２）
付記１１に記載のプロセッサシステムにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第１、前記第２および前記第３フラグ情報の全てがセット状態である場合に、前記ルール情報を復元するとともに、対応する前記第２フラグ情報をリセット状態に設定することを特徴とするプロセッサシステム。
（付記１３）
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成するプログラム生成方法であって、
逐次プログラムを読み込んで複数の処理に分割する第１工程と、
前記複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる第２工程と、
処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、前記複数の処理の中からデータ転送抑制対象の処理群を決定する第３工程と、
前記複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えた前記スケジューラに前記処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を前記並列プログラムとともに生成する第４工程とを含むことを特徴とするプログラム生成方法。
（付記１４）
付記１３に記載のプログラム生成方法において、
前記複数のプロセッサコアは、複数種のプロセッサコアを含み、
前記第２工程では、プロセッサコアの種類毎に各処理の実行時間が見積もられ、
前記第３工程では、処理毎に割り当て先のプロセッサコアの種類が決定された後に、プロセッサコアの種類毎に前記処理群が決定されることを特徴とするプログラム生成方法。
（付記１５）
付記１３または付記１４に記載のプログラム生成方法において、
前記第３工程は、
データ依存関係を有する処理対の中からデータ転送時間が最大である処理対を特定し、特定した処理対に関するデータ転送時間が特定した処理対の各処理に関する実行時間に基づく第１基準値より大きい場合に、特定した処理対を前記処理群として決定する工程と、
前記処理群の最初の処理で使用されるデータを生成する処理の中から前記処理群の最初の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最初の処理との処理対に関するデータ転送時間が前記処理群として決定された処理対に関するデータ転送時間に基づく第２基準値より大きい場合に、特定した処理を前記処理群に追加する工程と、
前記処理群の最後の処理で生成されるデータを使用する処理の中から前記処理群の最後の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最後の処理との処理対に関するデータ転送時間が前記第２基準値より大きい場合に、特定した処理を前記処理群に追加する工程とを含むことを特徴とするプログラム生成方法。
（付記１６）
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成するためのコンピュータに、
逐次プログラムを読み込んで複数の処理に分割する第１工程と、
前記複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる第２工程と、
処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、前記複数の処理の中からデータ転送抑制対象の処理群を決定する第３工程と、
前記複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えた前記スケジューラに前記処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を前記並列プログラムとともに生成する第４工程とを実行させることを特徴とするプログラム生成用プログラム。
（付記１７）
付記１６に記載のプログラム生成用プログラムにおいて、
前記複数のプロセッサコアは、複数種のプロセッサコアを含み、
前記第２工程では、プロセッサコアの種類毎に各処理の実行時間が見積もられ、
前記第３工程では、処理毎に割り当て先のプロセッサコアの種類が決定された後に、プロセッサコアの種類毎に前記処理群が決定されることを特徴とするプログラム生成用プログラム。
（付記１８）
付記１６または付記１７に記載のプログラム生成用プログラムにおいて、
前記第３工程は、
データ依存関係を有する処理対の中からデータ転送時間が最大である処理対を特定し、特定した処理対に関するデータ転送時間が特定した処理対の各処理に関する実行時間に基づく第１基準値より大きい場合に、特定した処理対を前記処理群として決定する工程と、
前記処理群の最初の処理で使用されるデータを生成する処理の中から前記処理群の最初の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最初の処理との処理対に関するデータ転送時間が前記処理群として決定された処理対に関するデータ転送時間に基づく第２基準値より大きい場合に、特定した処理を前記処理群に追加する工程と、
前記処理群の最後の処理で生成されるデータを使用する処理の中から前記処理群の最後の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最後の処理との処理対に関するデータ転送時間が前記第２基準値より大きい場合に、特定した処理を前記処理群に追加する工程とを含むことを特徴とするプログラム生成用プログラム。
【０１５５】
以上、本発明について詳細に説明してきたが、前述の実施形態は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【図面の簡単な説明】
【０１５６】
【図１】本発明の一実施形態のプロセッサシステムを示す図である。
【図２】スケジューリングルールの概要を示す図である。
【図３】ルール変更部の動作（その１）を示す図である。
【図４】ルール変更部の動作（その２）を示す図である。
【図５】ルール変更部の動作（その３）を示す図である。
【図６】アプリケーションの一例を示す図である。
【図７】図６のアプリケーションに関するスケジューリングルールを示す図である。
【図８】図６のアプリケーションに関する制御用プログラムを示す図である。
【図９】図６のアプリケーションに関するスケジューラの動作（その１）を示す図である。
【図１０】図６のアプリケーションに関するスケジューラの動作（その２）を示す図である。
【図１１】図６のアプリケーションに関するスケジューラの動作（その３）を示す図である。
【図１２】図６のアプリケーションに関するスケジューラの動作（その４）を示す図である。
【図１３】図６のアプリケーションに関するスケジューラの動作（その５）を示す図である。
【図１４】図６のアプリケーションに関するスケジューラの動作（その６）を示す図である。
【図１５】図６のアプリケーションに関するスケジューラの動作（その７）を示す図である。
【図１６】アプリケーションの別例を示す図である。
【図１７】図１６のアプリケーションに関する条件分岐の対処方法を示す図である。
【図１８】アプリケーションの別例を示す図である。
【図１９】図１８のアプリケーションに関するスケジューリングルールを示す図である。
【図２０】図１９のスケジューリングルールに関するルール変更後の状態を示す図である。
【図２１】アプリケーションの別例に関するスケジューリングルールを示す図である。
【図２２】図２１のスケジューリングルールに関するルール変更後の状態を示す図である。
【図２３】図２２のスケジューリングアルゴリズムの要部を示す図である。
【図２４】図２３のスケジューリングルールに対するルール復元の様子を示す図である。
【図２５】本発明の一実施形態の並列化コンパイラを示す図である。
【図２６】並列化コンパイラの実行環境を示す図である。
【図２７】スケジューリングポリシー最適化処理を示す図である。
【図２８】グループ化対象グラフ抽出処理を示す図である。
【図２９】スケジューリングポリシー最適化処理の変形例を示す図である。
【図３０】図１のプロセッサシステムの具体例を示す図である。
【図３１】図３０のプロセッサシステム用のスケジューリングルールを示す図である。
【符号の説明】
【０１５７】
１０‥プロセッサシステム；２０−１〜２０−ｎ‥プロセッサコア；３０−１〜３０−ｎ‥メモリ；４０‥スケジューラ；４１‥外部インタフェース部；４２‥メモリアクセス部；４３‥スケジューリング部；４４‥ルール変更部；５０‥スケジューラ専用メモリ；６０‥インターコネクト；７０‥並列化コンパイラ；７１‥逐次プログラム；７２‥スケジューラ設定情報；７３‥並列プログラム
【図１】
2010108153.tif 000003
【図２】
2010108153.tif 000004
【図３】
2010108153.tif 000005
【図４】
2010108153.tif 000006
【図５】
2010108153.tif 000007
【図６】
2010108153.tif 000008
【図７】
2010108153.tif 000009
【図８】
2010108153.tif 000010
【図９】
2010108153.tif 000011
【図１０】
2010108153.tif 000012
【図１１】
2010108153.tif 000013
【図１２】
2010108153.tif 000014
【図１３】
2010108153.tif 000015
【図１４】
2010108153.tif 000016
【図１５】
2010108153.tif 000017
【図１６】
2010108153.tif 000018
【図１７】
2010108153.tif 000019
【図１８】
2010108153.tif 000020
【図１９】
2010108153.tif 000021
【図２０】
2010108153.tif 000022
【図２１】
2010108153.tif 000023
【図２２】
2010108153.tif 000024
【図２３】
2010108153.tif 000025
【図２４】
2010108153.tif 000026
【図２５】
2010108153.tif 000027
【図２６】
2010108153.tif 000028
【図２７】
2010108153.tif 000029
【図２８】
2010108153.tif 000030
【図２９】
2010108153.tif 000031
【図３０】
2010108153.tif 000032
【図３１】
2010108153.tif 000033