以下、本発明の実施形態について図面を用いて説明する。
図1は、本発明の一実施形態のプロセッサシステムを示している。図2は、スケジューリングルールの概要を示している。図3〜図5は、ルール変更部の動作を示している。本発明の一実施形態のプロセッサシステム10は、分散メモリ型のヘテロジニアス・マルチコアプロセッサシステムであり、図1に示すように、プロセッサコア20−1〜20−n、メモリ30−1〜30−n、スケジューラ40、スケジューラ専用メモリ50およびインターコネクト60を有している。
プロセッサコア20−k(k=1,2,3,・・・,n)は、メモリ30−kにアクセスしながらスケジューラ40により割り当てられた処理を実行する。メモリ30−kには、プロセッサコア20−kで使用されるデータやプロセッサコア20−kで生成されるデータ等が格納される。スケジューラ40は、スケジューラ専用メモリ50にアクセスしながらプロセッサコア20−1〜20−nに関してダイナミックスケジューリング(動的負荷分散のスケジューリング)を実施する。スケジューラ専用メモリ50には、スケジューラ40で用いられるスケジューリングルールの情報等が格納される。インターコネクト60は、プロセッサコア20−1〜20−n、メモリ30−1〜30−nおよびスケジューラ40等を相互に接続してこれらの間での信号やデータの送受信を可能にする。
スケジューラ40で用いられるスケジューリングルールは、図2に示すように、エントリノード(EN)、ディスパッチノード(DPN)およびディストリビューションノード(DTN)を用いて模式的に表現される。なお、図2ではディストリビューションノードが1個のみ存在しているが、ディストリビューションノードが複数個存在することもある。
エントリノードは、スケジューラ40の入口に相当するものであり、実行要求を受けた処理に相当する処理要求(PR)が接続される。ディスパッチノードは、スケジューラ40の出口に相当するものであり、1個のプロセッサコアに関連付けられる。ディストリビューションノードは、エントリノードとディスパッチノードとを関連付けるものである。エントリノードでは、処理要求選択用スケジューリングアルゴリズムの情報が保持される。ディストリビューションノードでは、エントリノード選択用スケジューリングアルゴリズムの情報が保持される。ディスパッチノードでは、ディストリビューションノード選択用スケジューリングアルゴリズムの情報が保持される。また、ディスパッチノードでは、関連付けられたプロセッサコアの動作状態の情報が保持され、関連付けられたプロセッサコアが処理を実行している場合にはその処理の情報も保持される。
スケジューラ40においては、エントリノード毎に、そのエントリノードにおける処理要求選択用スケジューリングアルゴリズムの情報に基づいて、そのエントリノードに接続されている処理要求のいずれかが選択される。また、ディストリビューションノード毎に、そのディストリビューションノードにおけるエントリノード選択用スケジューリングアルゴリズムの情報に基づいて、そのディストリビューションノードに接続されているエントリノードのいずれかが選択される。そして、ディスパッチノードにおけるディストリビューションノード選択用スケジューリングアルゴリズムの情報やプロセッサコアの動作状態の情報等に基づいて、ディストリビューションノードで選択されたエントリノードに対応する処理(エントリノードで選択された処理要求に対応する処理)を割り当てるディスパッチノード(プロセッサコア)が決定される。
なお、処理要求、エントリノード、ディストリビューションノードおよびディスパッチノードの情報は、スケジューラ専用メモリ50にリスト構造のデータとして格納される。従って、スケジューラ40で用いられるスケジューリングルールをアプリケーションに応じて自由に変更することが可能である。このため、スケジューラ40の回路構成を変更することなく、様々なアプリケーションに対応することができる。また、プロセッサシステム10でのアプリケーションの実行中にプロセッサシステム10の状態変化に合わせてスケジューリングルールを変更することもできる。
スケジューラ40には、図1に示すように、インターコネクト60を介してスケジューラ40の外部(プロセッサコア20−1〜20−n等)と通信するための外部インタフェース部41と、スケジューラ専用メモリ50にアクセスするためのメモリアクセス部42と、動的負荷分散のスケジューリングを実施するためのスケジューリング部43とが設けられている。プロセッサシステム10におけるスケジューラ40に関する動作としては、スケジューリングルール構築動作、処理要求登録動作、処理終了通知動作およびスケジューリング結果通知動作等がある。
スケジューリングルール構築動作では、例えば、プロセッサシステム10が起動された場合やプロセッサシステム10の状態が大きく変化してスケジューリングルールの変更が必要になった場合に、プロセッサシステム10上で予め保持されているスケジューリングルールの情報がスケジューラ40の外部の機構(フロントエンドのプロセッサコアやローディング機構等)により外部インタフェース部41およびメモリアクセス部42を介してスケジューラ専用メモリ50に格納される。スケジューラ専用メモリ50に構築されたスケジューリングルールは、スケジューリング部43による動的負荷分散のスケジューリングで用いられる。
処理要求登録動作では、例えば、スケジューラ40の外部のプロセッサコアで実行中の処理により新たな処理が生成された場合に、処理要求の情報が外部インタフェース部41およびメモリアクセス部42を介してスケジューラ専用メモリ50に格納される。このとき、アプリケーションにより処理要求の接続先のエントリノードが指定される。その後、スケジューリング部43により動的負荷分散のスケジューリングが実施される。
処理終了通知動作では、例えば、プロセッサコア20−xに割り当てられた処理の実行が終了した場合に、スケジューラ専用メモリ50上のプロセッサコア20−xに関連付けられたディスパッチノードにおけるプロセッサコアの動作状態の情報がプロセッサコア20−xにより外部インタフェース部41およびメモリアクセス部42を介して更新される。その後、スケジューリング部43により動的負荷分散のスケジューリングが実施される。
スケジューリング結果通知動作では、例えば、スケジューリング部43でスケジューリングが実施された結果、プロセッサコア20−xに実行させる処理が変更になった場合に、処理の変更がスケジューリング部43により外部インタフェース部41を介してプロセッサコア20−xに通知される。
また、スケジューラ40には、図1に示すように、スケジューラ専用メモリ50に構築されたスケジューリングルールを変更および復元するためのルール変更部44が更に設けられている。ルール変更部44は、予め決定された処理群の最初の処理に関してスケジューリング部43で割り当て先のプロセッサコアが決定されるのに伴ってスケジューリングルールを変更することで、スケジューリング部43にその処理群の後続の処理を最初の処理と同一のプロセッサコアに割り当てさせる。そして、ルール変更部44は、その処理群の最後の処理に関してスケジューリング部43で割り当て先のプロセッサコアが決定されるのに伴ってスケジューリングルールを復元する。詳細には、ルール変更部44は、図3〜図5に示すように動作する。
ステップS101において、ルール変更部44は、スケジューリング部43から外部インタフェース部41にスケジューリング結果信号RESが出力されるまで待機する。スケジューリング部43からスケジューリング結果信号RESが出力されると、ルール変更部44の動作はステップS102に移行する。
ステップS102において、ルール変更部44は、スケジューリング部43に対するホールド信号HOLDの出力を開始する。これにより、スケジューリング部43の動作が停止される。この後、ルール変更部44の動作はステップS103に移行する。
ステップS103において、ルール変更部44は、スケジューリング結果信号RESの中からスケジューリング部43で割り当て先のプロセッサコアが決定された処理に対応する処理要求の情報のスケジューラ専用メモリ50上でのアドレスを取得する。この後、ルール変更部44の動作はステップS104に移行する。
ステップS104において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS103で取得したアドレスの処理要求の情報を取得する。この後、ルール変更部44の動作はステップS105に移行する。
ステップS105において、ルール変更部44は、ステップS104で取得した処理要求の情報の中から接続先のエントリノードへのポインタを取得する。この後、ルール変更部44の動作はステップS106に移行する。
ステップS106において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS105で取得したポインタが指すエントリノードの情報を取得する。この後、ルール変更部44の動作はステップS107に移行する。
ステップS107において、ルール変更部44は、ステップS106で取得したエントリノードの情報に含まれるルール変更フラグが“true”に設定されているか否かを判定する。ルール変更フラグが“true”に設定されていると判定された場合には、ルール変更部44の動作はステップS108に移行する。一方、ルール変更フラグが“false”に設定されていると判定された場合には、ルール変更部44の動作はステップS128に移行する。なお、ルール変更フラグは、対応するエントリノードがスケジューリングルールの変更を必要とする特性を有しているか否かを示すものである。ルール変更フラグが“true”に設定されていることは、対応するエントリノードがスケジューリングルールの変更を必要とする特性を有していることを意味する。ルール変更フラグが“false”に設定されていることは、対応するエントリノードがスケジューリングルールの変更を必要としない特性を有していることを意味する。
ステップS108において、ルール変更部44は、ステップS106で取得したエントリノードの情報に含まれるルール変更済フラグが“true”に設定されているか否かを判定する。ルール変更済フラグが“true”に設定されていると判定された場合には、ルール変更部44の動作はステップS116に移行する。一方、ルール変更済フラグが“false”に設定されていると判定された場合には、ルール変更部44の動作はステップS109に移行する。なお、ルール変更済フラグは、対応するエントリノードに関してスケジューリングルールの変更が実施済みであるか否かを示すものである。ルール変更済フラグが“true”に設定されていることは、対応するエントリノードに関してスケジューリングルールの変更が実施済みであることを意味する。ルール変更済フラグが“false”に設定されていることは、対応するエントリノードに関してスケジューリングルールの変更が実施済みではないことを意味する。
ステップS109において、ルール変更部44は、ステップS106で取得したエントリノードの情報の中から接続先のディストリビューションノードへのポインタを取得する。この後、ルール変更部44の動作はステップS110に移行する。
ステップS110において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS109で取得したポインタが指すディストリビューションノードの情報を取得する。この後、ルール変更部44の動作はステップS111に移行する。
ステップS111において、ルール変更部44は、メモリアクセス部42からスケジューラ専用メモリ50の空き領域のアドレスを取得する。この後、ルール変更部44の動作はステップS112に移行する。
ステップS112において、ルール変更部44は、メモリアクセス部42を介して、ステップS110で取得したディストリビューションノードの情報をスケジューラ専用メモリ50の空き領域(ステップS111で取得したアドレス)に格納する。この後、ルール変更部44の動作はステップS113に移行する。
ステップS113において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS105で取得したポインタが指すエントリノードの情報について、接続先のディストリビューションノードへのポインタを変更前の接続先のディストリビューションノードへのポインタを格納するためのフィールドに退避させる。そして、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS105で取得したポインタが指すエントリノードの情報について、接続先のディストリビューションノードへのポインタのアドレスをステップS111で取得したアドレスに変更する。更に、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS105で取得したポインタが指すエントリノードの情報について、ルール変更済フラグを“true”に設定する。この後、ルール変更部44の動作はステップS114に移行する。
ステップS114において、ルール変更部44は、ステップS110で取得したディストリビューションノードの情報の中から接続先のディスパッチノードへのポインタを取得する。この後、ルール変更部114の動作はステップS115に移行する。
ステップS115において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS114で取得したポインタが指すディスパッチノードの情報について、スケジューリングアルゴリズムおよびアルゴリズム変更回数をスケジューラ専用メモリ50のステップS112で格納したディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避させる。そして、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS114で取得したポインタが指すディスパッチノードの情報について、スケジューリングアルゴリズムをステップS112で作成したディストリビューションノードが優先的に選択されるように変更するとともに、アルゴリズム変更回数をインクリメントする。この後、ルール変更部44の動作はステップS116に移行する。
ステップS116において、ルール変更部44は、ステップS104で取得した処理要求の情報に含まれる処理識別フラグが“true”に設定されているか否かを判定する。処理識別フラグが“true”に設定されていると判定された場合には、ルール変更部44の動作はステップS117に移行する。一方、処理識別フラグが“false”に設定されていると判定された場合には、ルール変更部44の動作はステップS128に移行する。なお、処理識別フラグは、対応する処理が予め決定された処理群の最後の処理であるか否かを示すものである。処理識別フラグが“true”に設定されていることは、対応する処理が予め決定された処理群の最後の処理であることを意味する。処理識別フラグが“false”に設定されていることは、対応する処理が予め決定された処理群の最後の処理ではないことを意味する。
ステップS117において、ルール変更部44は、ステップS106で取得したエントリノードの情報の中から接続先のディストリビューションノードへのポインタを取得する。この後、ルール変更部44の動作はステップS118に移行する。
ステップS118において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS118で取得したポインタが指すディストリビューションノードの情報を取得する。この後、ルール変更部の動作はステップS119に移行する。
ステップS119において、ルール変更部44は、ステップS118で取得したディストリビューションノードの情報の中から接続先のディスパッチノードへのポインタを取得する。この後、ルール変更部44の動作はステップS120に移行する。
ステップS120において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS119で取得したポインタが指すディスパッチノードの情報を取得する。この後、ルール変更部44の動作はステップS121に移行する。
ステップS121において、ルール変更部44は、ステップS120で取得したディスパッチノードの情報に含まれるアルゴリズム変更回数がステップS118で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数(ディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避されているアルゴリズム変更回数)より1だけ大きいか否かを判定する。ディスパッチノードの情報に含まれるアルゴリズム変更回数がディストリビューションノードの情報に含まれるアルゴリズム変更回数より1だけ大きいと判定された場合には、ルール変更部44の動作はステップS125に移行し、それ以外の場合には、ルール変更部44の動作はステップS122に移行する。
ステップS122において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS119で取得したポインタが指すディスパッチノードに接続されている他のディストリビューションノード(ステップS117で取得したポインタが指すディストリビューションノードを除くディストリビューションノード)の情報を順次取得する。この後、ルール変更部44の動作はステップS123に移行する。
ステップS123において、ルール変更部44は、ステップS122で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数の少なくともいずれかがステップS118で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より大きいか否かを判定する。ステップS122で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数の少なくともいずれかがステップS118で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より大きいと判定された場合には、ルール変更部44の動作はステップS124に移行する。ステップS122で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数の全てがステップS118で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より小さいと判定された場合には、ルール変更部44の動作はステップS125に移行する。
ステップS124において、ルール変更部44は、ステップS122で取得したディストリビューションノードの情報の中から、ステップS118で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数より大きく且つステップS118で取得したディストリビューションノードの情報に含まれるアルゴリズム変更回数に最も近いアルゴリズム変更回数を含んでいるディストリビューションノードの情報を選択する。そして、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50における選択したディストリビューションノードの情報について、接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドにおけるスケジューリングアルゴリズムおよびアルゴリズム変更回数をステップS118で取得したディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避されているものに変更する。この後、ルール変更部44の動作はステップS126に移行する。
ステップS125において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS119で取得したポインタが指すディスパッチノードの情報について、スケジューリングアルゴリズムおよびアルゴリズム変更回数をステップS118で取得したディストリビューションノードの情報における接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数を格納するためのフィールドに退避されているものに変更する。この後、ルール変更部44の動作はステップS126に移行する。
ステップS126において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS105で取得したポインタが指すエントリノードの情報について、接続先のディストリビューションノードへのポインタを変更前の接続先のディストリビューションノードへのポインタを格納するためのフィールドに退避されているものに変更する。更に、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS105で取得したポインタが指すエントリノードの情報について、ルール変更済フラグを“false”に設定する。この後、ルール変更部44の動作はステップS127に移行する。
ステップS127において、ルール変更部44は、メモリアクセス部42を介して、スケジューラ専用メモリ50におけるステップS118で取得したポインタが指すディストリビューションノードの情報を削除する。この後、ルール変更部44の動作はステップS128に移行する。
ステップS128において、ルール変更部44は、スケジューリング部43に対するホールド信号HOLDの出力を終了する。これにより、スケジューリング部43の動作が再開される。この後、ルール変更部44の動作はステップS101に移行する。
図6は、アプリケーションの一例を示している。図7は、図6のアプリケーションに関するスケジューリングルールを示している。図8は、図6のアプリケーションに関する制御用プログラムを示している。図9〜図15は、図6のアプリケーションに関するスケジューラの動作を示している。
ここで、図6に示すようなアプリケーションをプロセッサシステム10で実行させる場合を考える。図6では、四角が処理を表しており、矢印が処理対のデータ依存関係(データ入出力関係)を表しており、更に、矢印の太さが処理対で共有されるデータ量を表している。従って、図6のアプリケーションでは、処理P1で生成されるデータが処理P2、P5で使用され、処理P2で生成されるデータが処理P3で使用され、処理P3で生成されるデータが処理P4、P6で使用され、処理P4で生成されるデータが処理P7で使用され、処理P5で生成されるデータが処理P3、P6で使用され、処理P6で生成されるデータが処理P7で使用されることになる。また、図6のアプリケーションでは、処理P2、P3で共有されるデータ量および処理P3、P4で共有されるデータ量が非常に多いことになる。
アプリケーション開発者は、アプリケーションにおける処理間のデータ依存関係を解析し、プロセッサコア間のデータ転送を抑制するために同一のプロセッサコアで実行させたい処理群(データ転送抑制対象の処理群)を決定する。図6のアプリケーションについては、処理P2、P3、P4が同一のプロセッサコアに割り当てられるようにすれば、処理P2、P3で共有される多量のデータおよび処理P3、P4で共有される多量のデータについてデータ転送が不要になり、ソフトウェア実行効率を向上させることができる。従って、処理P2、P3、P4がデータ転送抑制対象の処理群として決定される。
また、アプリケーション開発者は、アプリケーションの処理がどのようにスケジューリングされれば処理性能が向上するのかを検討してスケジューラ40のスケジューリングルールを作成する。スケジューリングルールにおいては、スケジューリングルールの変更を必要としない特性を有するエントリノードが1個設けられ、ディストリビューションノードが1個設けられ、ディスパッチノードがプロセッサシステム10のプロセッサコア数だけ設けられる。更に、スケジューリングルールの変更を必要とする特性を有するエントリノードが少なくとも同時に実行させるデータ転送抑制対象の処理群の数だけ設けられる。
図6のアプリケーションについては、複雑なスケジューリングは必要ないため、例えば、図7に示すようなスケジューリングルールが作成される。図7のスケジューリングルールでは、プロセッサシステム10のプロセッサコア数が2個であるものとしており、ディスパッチノードDPN1、DPN2がプロセッサコア20−1、20−2にそれぞれ対応している。また、図7のスケジューリングルールでは、エントリノードEN1がスケジューリングルールの変更を必要としない特性を有しており、エントリノードEN2がスケジューリングルールの変更を必要とする特性を有している。なお、スケジューリングルールはスケジューラ専用メモリ50上のデータ構造で具現されるため、エントリノードがスケジューリングルールの変更を必要とする特性を有しているか否かについては、エントリノードの情報に含まれるルール変更フラグにより識別されるようになっている。従って、図7のスケジューリングルールでは、エントリノードEN1のルール変更フラグが“false”に設定され、エントリノードEN2のルール変更フラグが“true”に設定されている。
アプリケーション開発者は、スケジューラ40のスケジューリングルールを作成した後、プロセッサシステム10で動作させるプログラムを作成する。プログラムには、各処理を実行するためのプログラム(処理用プログラム)と、スケジューラ40に対してスケジューリングルール構築や処理要求登録等を実行するためのプログラム(制御用プログラム)とが存在する。制御用プログラムに関しては、スケジューリングルールをスケジューラ専用メモリ50に構築した後、処理間のデータ依存関係に従って各処理に対応する処理要求をスケジューラ40に順次登録するように作成される。アプリケーション開発者は、制御用プログラムを作成する際、データ転送抑制対象の処理群およびスケジューリングルールに基づいて、各処理に対応する処理要求をどのエントリノードに接続するかを決定する。図6のアプリケーションについては、データ転送抑制対象の処理群として決定された処理P2、P3、P4に対応する処理要求がエントリノードEN2に接続され、その他の処理P1、P5、P6、P7に対応する処理要求がエントリノードEN1に接続されるように、制御用プログラムが作成される。なお、処理P4に関しては、データ転送抑制対象の処理群における最後の処理であるため、処理要求の処理識別フラグが“true”に設定されるようにする。処理P1〜P3、P5〜P7に関しては、データ転送抑制対象の処理群における最後の処理ではないため、処理要求の処理識別フラグが“false”に設定されるようにする。このようにして作成された図6のアプリケーションに関する制御用プログラムは、図8に示すように動作する。
ステップS201において、制御用プログラムは、スケジューリングルールをスケジューラ専用メモリ50に構築する。この後、制御用プログラムの動作はステップS202に移行する。
ステップS202において、制御用プログラムは、処理P1に対応する処理要求PR1をエントリノードEN1に接続する。制御用プログラムの動作はステップS203に移行する。
ステップS203において、制御用プログラムは、処理P1の実行終了に伴って、処理P2に対応する処理要求PR2をエントリノードEN2に接続するとともに、処理P5に対応する処理要求PR5をエントリノードEN1に接続する。この後、制御用プログラムの動作はステップS204に移行する。
ステップS204において、制御用プログラムは、処理P2の実行終了および処理P5の実行終了に伴って、処理P3に対応する処理要求PR3をエントリノードEN2に接続する。この後、制御用プログラムの動作はステップS205に移行する。
ステップS205において、制御用プログラムは、処理P3の実行終了に伴って、処理P4に対応する処理要求PR4をエントリノードEN2に接続するとともに、処理P6に対応する処理要求PR6をエントリノードEN1に接続する。この後、制御用プログラムの動作はステップS206に移行する。
ステップS206において、制御用プログラムは、処理P4の実行終了および処理P6の実行終了に伴って、処理P7に対応する処理要求PR7をエントリノードEN1に接続する。
以上のようにして作成された図7のスケジューリングルールおよび図8の制御用プログラムに対して、スケジューラ40は図9〜図15に示すように動作する。まず、図9に示すように、処理P1に対応する処理要求PR1がエントリノードEN1に接続される。このとき、ディスパッチノードDPN1、DPN2に対応するプロセッサコア20−1、20−2の双方が空き状態であるため、処理P1についてはディスパッチノードDPN1、DPN2のどちらにでも割り当てることができるが、例えば、処理P1がディスパッチノードDPN1に割り当てられる。これにより、プロセッサコア20−1で処理P1が実行される。
そして、プロセッサコア20−1による処理P1の実行が終了すると、図10に示すように、処理P5に対応する処理要求PR5がエントリノードEN1に接続され、処理P2に対応する処理要求PR2がエントリノードEN2に接続される。その結果、例えば、処理P5がディスパッチノードDPN1に割り当てられ、処理P2がディスパッチノードDPN2に割り当てられる。これにより、プロセッサコア20−1で処理P5が実行され、プロセッサコア20−2で処理P2が実行される。
エントリノードEN2に処理要求が接続された処理P2の割り当て先がディスパッチノードDPN2に決定されると、図11に示すように、スケジューリングルールが変更される。具体的には、ディスパッチノードDPN2のみに接続されるディストリビューションノードDTN2が追加され、エントリノードEN2の接続先がディストリビューションノードDTN2に変更される。このとき、ルール変更の前にエントリノードEN2がディストリビューションノードDTN1に接続されていたことを示す情報がエントリノードEN2に保存される。また、エントリノードEN2のルール変更済フラグが“true”に設定される。これにより、エントリノードEN2に処理要求が接続される処理は、ディストリビューションノードDTN2を経由してディスパッチノードDPN2に割り当てられるようになる。なお、処理P2がディスパッチノードDPN1に割り当てられた場合には、ディスパッチノードDPN1のみに接続されるディストリビューションノードDTN2が追加され、その結果、エントリノードEN2に処理要求が接続される処理はディストリビューションノードDTN2を経由してディスパッチノードDPN1に割り当てられるようになる。
更に、エントリノードEN2に処理要求が接続される処理はディスパッチノードDPN2に割り当てられるため、ディスパッチノードDPN2のスケジューリングアルゴリズムをディストリビューションノードDTN2が優先的に選択されるように変更すると、ソフトウェア実行効率が向上する場合が多い。そこで、ディスパッチノードDPN2のスケジューリングアルゴリズムがディストリビューションノードDTN2を優先的に選択するように変更される。このとき、ディスパッチノードDPN2の変更前のスケジューリングアルゴリズムがディストリビューションノードDTN2に保存される。
次に、プロセッサコア20−1による処理P5の実行およびプロセッサコア20−2による処理P2の実行が終了すると、図12に示すように、処理P3に対応する処理要求PR3がエントリノードEN2に接続される。エントリノードEN2はディストリビューションノードDTN2に接続されており、ディストリビューションノードDTN2はディスパッチノードDPN2のみに接続されているため、処理P3は必ずディスパッチノードDPN2(処理P2が割り当てられたディスパッチノード)に割り当てられる。これにより、プロセッサコア20−2で処理P3が実行される。このとき、エントリノードEN2のルール変更済フラグが“true”に設定されているため、スケジューリングルールが更に変更されることはない。
この後、プロセッサコア20−2による処理P3の実行が終了すると、図13に示すように、処理P4に対応する処理要求PR4がエントリノードEN2に接続され、処理P6に対応する処理要求PR6がエントリノードEN1に接続される。このとき、処理P6については、ディストリビューションノードDTN1を経由してディスパッチノードDPN1、DPN2のどちらにでも割り当てることができる。しなしながら、ディスパッチノードDPN2のスケジューリングアルゴリズムがディストリビューションノードDTN2を優先的に選択するように変更されているため、結果として、処理P6がディスパッチノードDPN1に割り当てられ、処理4がディスパッチノードDPN2に割り当てられる。これにより、プロセッサコア20−1で処理P6が実行され、処理P4がプロセッサコア20−2で実行される。
このとき、処理P4に対応する処理要求PR4の処理識別フラグが“true”に設定されているため、処理P4の割り当て先がディスパッチノードDPN2に決定されると、図14に示すように、スケジューリングルールが復元される。具体的には、ディストリビューションノードDTN2が削除され、エントリノードEN2の接続先がディストリビューションノードDTN1に戻され、ディストリビューションノードDTN2に保存されているディスパッチノードDPN2の変更前のスケジューリングアルゴリズムを用いてディスパッチノードDPN2のスケジューリングアルゴリズムが初期状態(変更前の状態)に戻される。また、エントリノードEN2のルール変更済フラグが“false”に設定される。
最後に、プロセッサコア20−1による処理P6の実行およびプロセッサコア20−2による処理P4の実行が終了すると、図15に示すように、処理P7に対応する処理要求PR7がエントリノードEN1に接続される。このとき、処理P7についてはディスパッチノードDPN1、DPN2のどちらにでも割り当てることができるが、例えば、処理P7がディスパッチノードDPN1に割り当てられる。これにより、プロセッサコア20−1で処理P7が実行される。
以上のように、分散メモリ型のマルチコアプロセッサシステム10のスケジューラ40では、スケジューリング部43によりデータ転送抑制対象の処理群における最初の処理の割り当て先が各プロセッサコアの負荷状況に応じて決定されると、ルール変更部44によりスケジューリングルールが変更され、その結果、スケジューリング部43によりデータ転送抑制対象の処理群における後続の処理が最初の処理と同一のプロセッサコアに割り当てられることになる。このため、データ転送抑制対象の処理群に関してプロセッサコア間のデータ転送が抑制される。そして、スケジューリング部43によりデータ転送抑制対象の処理群における最後の処理の割り当て先が最初の処理と同一のプロセッサコアに決定されると、ルール変更部44によりスケジューリングルールが復元される。このため、データ転送抑制対象の処理群における最初の処理に対応する処理要求が再び登録された際には、スケジューリング部43によりデータ転送抑制対象の処理群における最初の処理の割り当て先が各プロセッサコアの負荷状況に応じて決定されることになる。これにより、動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させることができ、ソフトウェア実行効率の大幅な向上を実現することができる。
図16は、アプリケーションの別例を示している。図17は、図16のアプリケーションに関する条件分岐の対処方法を示している。ここで、図16に示すようなアプリケーションをプロセッサシステム10で実行させる場合を考える。図16のアプリケーションは、プログラム中に条件分岐が存在し、分岐条件が成立した場合に処理P4が実行されて処理P7が処理P4で生成されたデータおよび処理P6で生成されたデータの双方を用いて実行され、分岐条件が成立しなかった場合に処理P4が実行されずに処理P7が処理P6で生成されたデータのみを用いて実行される点を除いて、図6のアプリケーションと同一である。
図16のアプリケーションについては、処理P4に対応する処理要求がスケジューラ40に登録されない場合が存在する。従って、処理P2、P3、P4がデータ転送抑制対象の処理群として決定された場合、処理P4はデータ転送抑制対象の処理群における最後の処理であるため、スケジューラ40において、最初の処理(処理P2)の割り当て先の決定に伴ってスケジューリングルールが変更された後、スケジューリングルールが復元されない可能性がある。
そこで、アプリケーション開発者は、図17に示すように、図16のアプリケーションに対して、分岐条件が成立しなった場合(処理P4が実行されない場合)に実行される処理P4’を追加する。なお、処理P4’に関しては、処理P3で生成されるデータを使用し、処理P7で使用されるデータを生成する処理として扱われるが、実質的には何も実行しない処理である。そして、アプリケーション開発者は、処理P2、P3、P4、P4’をテータ転送抑制対象の処理群として決定する。なお、処理P4、P4’の双方に関して、データ転送抑制対象の処理群における最後の処理であるものとして、処理要求の処理識別フラグが“true”に設定されるようにする。これにより、スケジューラ40において、処理P2の割り当て先の決定に伴ってスケジューリングルールが変更された後、処理P4に対応する処理要求が登録されなくても、処理P4’に対応する処理要求が登録されることによってスケジューリングルールが復元されることになる。
図18は、アプリケーションの別例を示している。図19は、図18のアプリケーションに関するスケジューリングルールを示している。図20は、図19のスケジューリングルールに関するルール変更後の状態を示している。次に、図18に示すようなアプリケーションをプロセッサシステム10で実行させる場合を考える。図18のアプリケーションでは、処理P2、P3で共有されるデータ量、処理P3、P4で共有されるデータ量および処理P7、P8で共有されるデータ量が非常に多い。このような場合には、処理P2、P3、P4と処理P7、P8とがデータ転送抑制対象の処理群として決定され、図19に示すようなスケジューリングルールが作成される。
図19のスケジューリングルールでは、スケジューリングルールの変更を必要としない特性を有するエントリノードEN1が設けられており、更に、2個のデータ転送抑制対象の処理群(処理P2、P3、P4および処理P7、P8)を同時に実行させるために、スケジューリングルールの変更を必要とする特性を有するエントリノードEN2、EN3が設けられている。この場合、例えば、処理P1、P5、P6、P9に対応する処理要求がエントリノードEN1に接続され、処理P2、P3、P4に対応する処理要求がエントリノードEN2に接続され、処理P7、P8に対応する処理要求がエントリノードEN3に接続されるように、制御用プログラムが作成される。これにより、スケジューラ40において、処理P2、P3、P4が同一のプロセサコアに割り当てられるとともに、処理P7、P8が同一のプロセッサコアに割り当てられることになる。
例えば、処理P1の実行が終了した後、処理P5、P2、P7に対応する処理要求がエントリノードEN1、EN2、EN3にそれぞれ接続された結果、処理P2がディスパッチノードDPN1に割り当てられ、処理P7がディスパッチノードDPN2に割り当てられると、スケジューリングルールが図20に示すような状態に変更される。具体的には、エントリノードEN2に関するルール変更として、ディスパッチノードDPN1のみに接続されるディストリビューションノードDTN2が追加され、エントリノードEN2の接続先がディストリビューションノードDTN2に変更され、更に、ディスパッチノードDPN1のスケジューリングアルゴリズムがディストリビューションノードDTN2を優先的に選択するように変更される。また、エントリノードEN3に関するルール変更として、ディスパッチノードDPN2のみに接続されるディストリビューションノードDTN3が追加され、エントリノードEN3の接続先がディストリビューションノードDTN3に変更され、更に、ディスパッチノードDPN2のスケジューリングアルゴリズムがディストリビューションノードDTN3を優先的に選択するように変更される。
このとき、エントリノードEN2に関するルール変更の前にエントリノードEN2がディストリビューションノードDTN1に接続されていたことを示す情報がエントリノードEN2に保存され、ディスパッチノードDPN1の変更前のスケジューリングアルゴリズムがディストリビューションノードDTN2に保存される。また、エントリノードEN3に関するルール変更の前にエントリノードEN3がディストリビューションノードDTN1に接続されていたことを示す情報がエントリノードEN3に保存され、ディスパッチノードDPN2の変更前のスケジューリングアルゴリズムがディストリビューションノードDTN3に保存される。スケジューラ40においては、これらの情報を用いてエントリノードEN2、EN3に関するルール復元が実施されることで、エントリノードEN2、EN3に関するルール変更の実施順序やルール復元の実施順序に拘わらず、スケジューリングルールを初期状態(図19の状態)に正しく戻すことが可能である。
図21は、アプリケーションの別例に関するスケジューリングルールを示している。図22は、図21のスケジューリングルールに関するルール変更後の状態を示している。図23は、図22のスケジューリングルールの要部を示している。図24は、図23のスケジューリングルールに対するルール復元の様子を示している。
これまでは、ディスパッチノードのスケジューリングアルゴリズムが1回のみ変更される場合について説明してきたが、ここでは、ディスパッチノードのスケジューリングアルゴリズムが複数回変更される場合について説明する。例えば、あるアプリケーションに関して図21に示すようなスケジューリングルールが作成されたものとする。図21のスケジューリングルールでは、エントリノードEN1がスケジューリングルールの変更を必要としない特性を有しており、エントリノードEN2、EN3、EN4がスケジューリングルールの変更を必要とする特性を有している。エントリノードEN1〜EN4はディストリビューションノードDTN1に接続されており、ディストリビューションノードDTN1はディスパッチノードDPN1、DPN2に接続されている。
ルール変更の際には、ディストリビューションノードが追加され、そのディストリビューションノードが接続されるディスパッチノードのスケジューリングアルゴリズムが追加されたディストリビューションノードを優先的に選択するように変更される。図21のスケジューリングルールについては、2個のディスパッチノードに対してルール変更が3回実施されるため、ディスパッチノードDPN1、DPN2のいずれかに関してはスケジューリングアルゴリズムが2回以上変更されることになる。
例えば、図21のスケジューリングルールに対してエントリノードEN2、EN3、EN4の順にルール変更が実施され、その結果、スケジューリングルールが図22に示すような状態に変更されたものとする。図22のスケジューリングルールでは、エントリノードEN2に関するルール変更の際に追加されたディストリビューションノードDTN2がディスパッチノードDPN1に接続され、エントリノードEN3に関するルール変更の際に追加されたディストリビューションノードDTN3およびエントリノードEN4に関するルール変更の際に追加されたディストリビューションノードDTN4がディスパッチノードDPN2に接続されている。なお、ディスパッチノードDPN2におけるスケジューリングアルゴリズムは、エントリノードEN3に関するルール変更の際にディストリビューションノードDTN3を優先的に選択するように変更され、その後、エントリノードEN4に関するルール変更の際にディストリビューションノードDTN4を優先的に選択するように変更されている。また、ディストリビューションノードDTN3には、ディスパッチノードDPN2におけるエントリノードEN3に関するルール変更の前のスケジューリングアルゴリズムが保存されており、ディストリビューションノードDTN4には、ディスパッチノードDPN2におけるエントリノードEN4に関するルール変更の前のスケジューリングアルゴリズムが保存されている。
このような場合、エントリノードEN3に関するルール復元およびエントリノードEN4に関するルール復元の双方が完了した段階でディスパッチノードDPN2のスケジューリングアルゴリズムが初期状態に戻されているためには、エントリノードEN3に関するルール復元またはエントリノードEN4に関するルール復元のどちらが先に実施されるかによってディスパッチノードDPN2のスケジューリングアルゴリズムに関する復元手順を変える必要がある。
スケジューラ40においては、ルール復元の際に、削除対象のディストリビューションノードが接続されているディスパッチノードにおけるアルゴリズム変更回数と、そのディスパッチノードに接続されているディストリビューションノードに保存されているアルゴリズム変更回数(接続先のディスパッチノードの変更前のアルゴリズム変更回数)とを用いて、削除対象のディストリビューションノードが接続されているディスパッチノードのスケジューリングアルゴリズムに関する復元手順が決定される。
具体的には、削除対象のディストリビューションノードのアルゴリズム変更回数が接続先のディスパッチノードに接続されているディストリビューションノードのアルゴリズム変更回数の中で最大である場合には、削除対象のディストリビューションノードのスケジューリングアルゴリズムおよびアルゴリズム変更回数が接続先のディスパッチノードに書き戻される。一方、削除対象のディストリビューションノードのアルゴリズム変更回数が接続先のディスパッチノードに接続されているディストリビューションノードのアルゴリズム変更回数の中で最大ではない場合には、削除対象のディストリビューションノードのアルゴリズム変更回数より大きいアルゴリズム変更回数を保存しているディストリビューションノードの中で最小のアルゴリズム変更回数(削除対象のディストリビューションノードのアルゴリズム変更回数に最も近いアルゴリズム変更回数)を保存しているディストリビューションノードが特定される。そして、削除対象のディストリビューションノードのスケジューリングアルゴリズムおよびアルゴリズム変更回数が特定されたディストリビューションノードにコピーされる。
図22のスケジューリングルールにおいて、ディスパッチノードDPN2におけるアルゴリズム変更回数およびスケジューリングアルゴリズムと、ディストリビューションノードDTN3に保存されているディスパッチノードDPN2の変更前(ディストリビューションノードDTN3の追加前)のアルゴリズム変更回数およびスケジューリングアルゴリズムと、ディストリビューションノードDTN4に保存されているディスパッチノードDPN2の変更前(ディストリビューションノードDTN4の追加前)のアルゴリズム変更回数およびスケジューリングアルゴリズムとは、図23に示すような状態になっている。
ルール変更の際には、ディストリビューションノードが追加され、そのディストリビューションノードの接続先のディスパッチノードについて、スケジューリングアルゴリズムが追加されたディストリビューションノードを優先的に選択するように変更され、アルゴリズム変更回数がインクリメントされる。また、追加されたディストリビューションノードに、接続先のディスパッチノードの変更前のスケジューリングアルゴリズムおよびアルゴリズム変更回数が保存される。図23のスケジューリングルールにおいては、エントリノードEN3に関するルール変更が実施された後にエントリノードEN4に関するルール変更が実施されたものとしているため、ディスパッチノードDPN2について、アルゴリズム変更回数が2回に設定され、スケジューリングアルゴリズムがディストリビューションノードDTN4優先状態に設定されている。また、ディストリビューションノードDTN3には、エントリノードEN3に関するルール変更が実施される前のディスパッチノードDPN2のアルゴリズム変更回数(0回)およびスケジューリングアルゴリズム(初期状態)が保存されている。ディストリビューションノードDTN4には、エントリノードEN3に関するルール変更が実施された後のディスパッチノードDPN2のアルゴリズム変更回数(1回)およびスケジューリングアルゴリズム(ディストビューションノードDTN3優先状態)が保存されている。
図23のスケジューリングルールに対してエントリノードEN4に関するルール復元が先に実施された場合には、エントリノードEN4に関するルール復元の際に、ディストリビューションノードDTN4のアルゴリズム変更回数(1回)およびスケジューリングアルゴリズム(ディストリビューションノードDTN3優先状態)がディスパッチノードDPN2に書き戻される。そして、エントリノードEN3に関するルール復元の際に、ディストリビューションノードDTN3のアルゴリズム変更回数(0回)およびスケジューリングアルゴリズム(初期状態)がディスパッチノードDPN2に書き戻される。これにより、ディスパッチノードDPN2のスケジューリングアルゴリズムが初期状態に正しく戻される。
一方、図23のスケジューリングルールに対してエントリノードEN3に関するルール復元が先に実施された場合、エントリノードEN3に関するルール復元の際に、ディストリビューションノードDTN3のスケジューリングアルゴリズム(初期状態)がディスパッチノードDPN2に書き戻されると、エントリノードEN4に関するルール復元の際に、ディスパッチノードDPN2のスケジューリングアルゴリズム(初期状態)がディストリビューションノードDTN4のスケジューリングアルゴリズム(ディストリビューションノードDTN3優先状態)で上書きされることになり、ディスパッチノードDPN2のスケジューリングアルゴリズムが初期状態に正しく戻されない。
そこで、図23のスケジューリングルールに対してエントリノード3に関するルール復元が先に実施された場合には、エントリノードEN3に関するルール復元の際に、図24に示すように、ディストリビューションノードDTN3のアルゴリズム変更回数(0回)およびスケジューリングアルゴリズム(初期状態)がディストリビューションノードDTN4にコピーされる。そして、エントリノードEN4に関するルール復元の際に、ディストリビューションノードDTN4のアルゴリズム変更回数(0回)およびスケジューリングアルゴリズム(初期状態)がディスパッチノードDPN2に書き戻される。これにより、ディスパッチノードDPN2のスケジューリングアルゴリズムが初期状態に正しく戻される。
図25は、本発明の一実施形態の並列化コンパイラを示している。図26は、並列化コンパイラの実行環境を示している。熟練のアプリケーション開発者がアプリケーションの特徴を理解してスケジューラの設定(スケジューリングルール等)を勘や経験に基づいて決定するような場合には、幾つかの設定を試行した後、最良と思われる設定に基づいてボトルネックを解析してプログラムの改良等により更なる改善を図るという手法が用いられることが多い。このため、プログラムの開発工数が非常に多くなるという問題がある。
そこで、本発明の一実施形態では、並列化コンパイラにより、逐次プログラムから並列プログラムが生成されるのと同時に、スケジューラのスケジューリングポリシーを示すスケジューラ設定情報が生成されるようにしている。これにより、プログラムの開発工数を大幅に削減することができる。なお、スケジューリングポリシーとは、エントリノード数と、各エントリノードのルール変更フラグの設定(“true”/“false”)と、ディストリビューションノード数と、ディスパッチノード数と、ディスパッチノードおよびプロセッサコアの対応関係と、処理およびエントリノードの対応関係と、エントリノードおよびディストリビューションノードの接続関係と、ディストリビューションノードおよびディスパッチノードの接続関係とを含むものである。
本発明の一実施形態の並列化コンパイラ70は、逐次プログラム71を入力としてスケジューラ設定情報72および並列プログラム73を出力するものであり、図25に示すように動作する。なお、並列化コンパイラ70は、例えば、図26に示すようなワークステーション80上で実行される。ワークステーション80は、ディスプレイ装置81、キーボード装置82および制御装置83等を有している。制御装置83には、CPU(Central Processing Unit)84、HD(Hard Disk)85および記録媒体ドライブ装置86等が搭載されている。ワークステーション80においては、記録媒体ドライブ装置86を介して記録媒体87から読み出されたコンパイラプログラムがHD85に格納されており、CPU84によりHD85上のコンパイラプログラムが実行されることで、並列化コンパイラ70が実現される。
ステップS301において、並列化コンパイラ70は、逐次プログラム71を解析して処理単位に分割する。例えば、並列化コンパイラ70は、基本ブロックや手続き呼び出しに着目して逐次プログラム71を処理単位に分割する。なお、並列化コンパイラ70がプラグマ等によるユーザの指示に基づいて逐次プログラム71を処理単位に分割するようにしてもよい。この後、並列化コンパイラ70の動作はステップS302に移行する。
ステップS302において、並列化コンパイラ70は、ステップS301で得られた複数の処理に関して、処理毎に実行時間を見積もる。例えば、並列化コンパイラ70は、プログラムの行数やループ回数等に基づいて各処理の実行時間を見積もる。なお、並列化コンパイラ70が過去の実績や経験等に基づいてユーザからプラグマ等により与えられた各処理の実行時間を使用するようにしてもよい。この後、並列化コンパイラ70の動作はステップS303に移行する。
ステップS303において、並列化コンパイラ70は、ステップS301で得られた複数の処理に関して、処理間の制御依存関係およびデータ依存関係を解析し、制御フローグラフ(CFG:Control Flow Graph)およびデータフローグラフ(DFG:Data Flow Graph)を生成する。制御依存関係およびデータ依存関係の解析については、「“コンパイラの構成と最適化”,中田育男著,朝倉書店,1999年9月,ISBN4−254−12139−3」や「“コンパイラ−原理・技法・ツール”,A.V.エイホ,R.セシィ,J.D.ウルマン著,サイエンス社,1990年10月,ISBN4−7819−0585−4」等の文献に記載されているため、ここでの詳細な説明は省略する。
また、並列化コンパイラ70は、処理間のデータ依存関係を解析する際に、データ依存関係を有する処理対毎に、媒介する変数の型に応じて処理対で共有されるデータ量を導出する。例えば、変数の型が基本データ型(char型、int型やfloat型等)である場合には、処理対で共有されるデータ量として、基本データの大きさが用いられる。変数の型が構造体型である場合には、処理対で共有されるデータ量として、構造体メンバーのデータ量の総和が用いられる。変数の型が共用体型である場合には、処理対で共有されるデータ量として、共用体メンバーのデータ量の最大値が用いられる。変数の型がポインタ型である場合には、処理対で共有されるデータ量として、ポインタが指す可能性がある変数やデータ領域のデータ量から推定される値が用いられる。具体的には、アドレス計算で代入される場合には、処理対で共有されるデータ量として、アドレス計算対象となる変数のデータ量が用いられる。動的なメモリ確保にて代入される場合には、処理対で共有されるデータ量として、配列の要素のデータ量および配列の大きさ(要素数)の積が用いられる。なお、複数のデータ量となる可能性がある場合には、処理対で共有されるデータ量として、複数のデータ量の最大値または平均値が用いられる。この後、並列化コンパイラ70の動作はステップS304に移行する。
ステップS304において、並列化コンパイラ70は、ステップS301で得られた複数の処理に関して、データ依存関係を有する処理対毎に、その処理対の各処理が別々のプロセッサコアに割り当てられた場合に必要となるデータ転送時間を見積もる。例えば、各処理対のデータ転送時間として、ステップS303でその処理対に関して導出されたデータ量とレイテンシ(単位データ量の転送に要する時間)と定数との積が用いられる。この後、並列化コンパイラ70の動作はステップS305に移行する。
ステップS305において、並列化コンパイラ70は、ステップS302〜S304で得られた処理間の制御依存関係およびデータ依存関係の解析結果(制御フローグラフおよびデータフローグラフ)と処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、スケジューリングポリシー最適化処理を実施する。スケジューリングポリシー最適化処理の詳細については、図27を用いて後述する。この後、並列化コンパイラ70の動作はステップS306に移行する。
ステップS306において、並列化コンパイラ70は、ステップS305で得られたスケジューリングポリシーを示すスケジューラ設定情報72を生成する。また、並列化コンパイラ70は、中間表現に従って並列プログラム73を生成する。
並列化コンパイラ70は、例えば、非同期遠隔手続き呼び出しにより並列プログラム73を生成する場合、各処理のプログラムを手続きの形式で生成する。並列化コンパイラ70は、データ依存関係の解析により求められる入力変数を引数として受け取り、出力変数の値を復帰値として返すまたは出力変数の値を格納するアドレスを引数として受け取るような手続きを生成する。並列化コンパイラ70は、処理の内容となる部分プログラムで使用される変数の中で入力変数以外のものを求め、その変数を宣言するコードを生成する。そして、並列化コンパイラ70は、部分プログラムの本文を出力した後、出力変数の値を復帰値として返すコードまたは出力変数の値を引数として受け取ったアドレスに代入するコードを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間でのデータの受け渡しについては除外される。また、並列化コンパイラ70は、各処理を非同期遠隔手続き呼び出しに置き換えたプログラムを生成する。並列化コンパイラ70は、データ依存関係の解析結果から、処理の実行結果を使用するコードまたは処理の呼び出しの前でその処理の非同期遠隔手続き呼び出しを待ち合わせるコードを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間のデータ依存関係については除外される。
並列化コンパイラ70は、例えば、スレッドにより並列プログラム73を生成する場合、各処理のプログラムをスレッドの形式で生成する。並列化コンパイラ70は、処理の内容となる部分プログラムで使用される変数を求め、その変数を宣言するコードを生成する。次に、並列化コンパイラ70は、データ依存関係の解析により求められる入力変数を受信するコードと、実行開始を示すメッセージを受信するコードとを生成する。そして、並列化コンパイラ70は、部分プログラムの本文を出力した後、出力変数を送信するコードと、実行終了を示すメッセージを送信するコードとを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間でのデータの受け渡しについては除外される。また、並列化コンパイラ70は、各処理をスレッドの起動メッセージの送信に置き換えたプログラムを生成する。並列化コンパイラ70は、データ依存関係の解析結果から、処理の実行結果を使用するコードまたは処理の呼び出しの前でその処理の実行結果を受信するコードを生成する。但し、同一のデータ転送抑制対象の処理群に属する処理間のデータ依存関係については除外される。更に、並列化コンパイラ70は、ループの繰り越しが発生する場合には、ループ繰越時にスレッド起動前で実行終了を示すメッセージを受信するコードを生成し、プログラムの最後で全てのスレッドについて実行終了を示すメッセージを受信するコードを生成する。
図27は、スケジューリングポリシー最適化処理を示している。図25のステップS305(スケジューリングポリシー最適化処理)において、並列化コンパイラ70は、図27に示すように動作する。
ステップS401において、並列化コンパイラ70は、制御フローグラフ(CFG)に基づいて逐次プログラム71を基本ブロック単位に分割する。この後、並列化コンパイラ70の動作はステップS402に移行する。
ステップS402において、並列化コンパイラ70は、ステップS401で得られた複数の基本ブロックに関して、未選択の基本ブロックがあるか否かを判定する。未選択の基本ブロックがあると判定された場合には、並列化コンパイラ70の動作はステップS403に移行する。一方、未選択の基本ブロックがないと判定された場合には、スケジューリングポリシー最適化処理は終了し、並列化コンパイラ70の動作は図25のステップ306に移行する。
ステップS403において、並列化コンパイラ70は、未選択の基本ブロックのいずれかを選択する。この後、並列化コンパイラ70の動作はステップS404に移行する。
ステップS404において、並列化コンパイラ70は、ステップS403で選択した基本ブロックのデータフローグラフ(DFG)をグラフGbとして設定する。この後、並列化コンパイラ70の動作はステップS405に移行する。
ステップS405において、並列化コンパイラ70は、変数iの値を1に設定する。この後、並列化コンパイラ70の動作はステップS406に移行する。
ステップS406において、並列化コンパイラ70は、グループ化対象グラフ抽出処理(グラフGbからグループ化対象グラフGbiを抽出する処理)を実施する。グループ化対象グラフ抽出処理の詳細については、図28を用いて後述する。この後、並列化コンパイラ70の動作はステップS407に移行する。
ステップS407において、並列化コンパイラ70は、ステップS406で抽出したグラフGbiが空であるか否かを判定する。グラフGbiが空であると判定された場合には、並列化コンパイラ70の動作はステップS402に移行する。一方、グラフGbiが空ではないと判定された場合には、並列化コンパイラ70の動作はステップS408に移行する。
ステップS408において、並列化コンパイラ70は、グラフGbからグラフGbiを取り除いたものをグラフGbとして設定する。この後、並列化コンパイラ70の動作はステップS409に移行する。
ステップS409において、並列化コンパイラ70は、変数iの値をインクリメントする。この後、並列化コンパイラ70の動作はステップS410に移行する。
ステップS410において、並列化コンパイラ70は、変数iの値が所定値m(同時に実行させるデータ転送抑制対象の処理群の数)より大きいか否かを判定する。変数iの値が所定値mより大きいと判定された場合には、並列化コンパイラ70の動作はステップS402に移行する。一方、変数iの値が所定値m以下であると判定された場合には、並列化コンパイラ70の動作はステップS406に移行する。
以上のようなスケジューリングポリシー最適化処理において、エントリノード数については、スケジューリングルールの変更を必要とする特性を有するエントリノードをm個設け、スケジューリングルールの変更を必要としない特性を有するエントリノードを1個設けるものとして、(m+1)個に決定される。ディストリビューションノード数については、1個に決定される。ディスパッチノード数については、プロセッサシステム10のプロセッサコア数(n個)に決定される。なお、プロセッサシステム10のプロセッサコア数が確定していない場合には、逐次プログラム71に内在する最大並列度がディスパッチノード数として決定される。ディスパッチノードおよびプロセッサコアの対応関係については、n個のディスパッチノードがn個のプロセッサコアに1対1で対応付けられるように決定される。
処理およびエントリノードの対応関係については、グループ化対象グラフの頂点集合に対応する処理群(データ転送抑制対象の処理群)がスケジューリングルールの変更を必要とする特性を有するm個のエントリノードに対して順番に対応付けられ、データ転送抑制対象の処理群のいずれにも属さない処理がスケジューリングルールの変更を必要としない特性を有する1個のエントリノードに対応付けられるように決定される。エントリノードおよびディストリビューションノードの接続関係については、ディストリビューションノード数が1個であるため、全てのエントリノードが1個のディストリビューションノードに接続されるように決定される。ディストリビューションノードおよびディスパッチノードの接続関係については、ディストリビューションノード数が1個であるため、1個のディストリビューションノードが全てのディスパッチノードに接続されるように決定される。
図28は、グループ化対象グラフ抽出処理を示している。図27のステップS406(グループ化対象グラフ抽出処理)において、並列化コンパイラ70は、図28に示すように動作する。
ステップS501において、並列化コンパイラ70は、グラフGmの頂点集合Vmおよび辺集合Emと辺集合Exとを空に設定する。この後、並列化コンパイラ70の動作はステップS502に移行する。
ステップS502において、並列化コンパイラ70は、グラフGb(図27のステップS403で選択した基本ブロックのデータフローグラフ)の辺集合Ebには含まれるが辺集合Exには含まれない辺がないか否かを判定する。辺集合Ebには含まれるが辺集合Exには含まれない辺がないと判定された場合には、並列化コンパイラ70の動作はステップS516に移行する。一方、辺集合Ebには含まれるが辺集合Exには含まれない辺があると判定された場合には、並列化コンパイラ70の動作はステップS503に移行する。
ステップS503において、並列化コンパイラ70は、辺集合Ebには含まれるが辺集合Exには含まれない辺の中でデータ転送時間(辺の始点および終点に対応する処理対に関して図25のステップS304で見積もったデータ転送時間)が最大である辺を辺eとして設定し、更に、辺eの始点を頂点uとして設定するとともに、辺eの終点を頂点vとして設定する。この後、並列化コンパイラ70の動作はステップS504に移行する。
ステップS504において、並列化コンパイラ70は、辺eのデータ転送時間teが下限値f(tu,tv)以上であるか否かを判定する。ここで、下限値f(tu,tv)は、対応する処理対をデータ転送抑制対象の処理群として決定すべきか否かを判断するためのものであり、頂点u、vの実行時間tu、tv(頂点u、vに対応する処理に関して図25のステップS302で見積もった実行時間)に基づいて導出される。例えば、下限値f(tu,tv)として、頂点uの実行時間tuおよび頂点vの実行時間tvの和と1.0未満の定数との積が用いられる。辺eのデータ転送時間teが下限値f(tu,tv)以上であると判定された場合には、並列化コンパイラ70の動作はステップS506に移行する。一方、辺eのデータ転送時間teが下限値f(tu、tv)未満であると判定された場合には、並列化コンパイラ70の動作はステップS505に移行する。
ステップS505において、並列化コンパイラ70は、辺eを辺集合Exに追加する。この後、並列化コンパイラ70の動作はステップS502に移行する。
ステップS506において、並列化コンパイラ70は、頂点u、vを頂点集合Vmに追加するとともに、辺eを辺集合Emに追加する。この後、並列化コンパイラ70の動作はステップS507に移行する。
ステップS507において、並列化コンパイラ70は、頂点uの入力辺があるか否かを判定する。頂点uの入力辺があると判定された場合には、並列化コンパイラ70の動作はステップS508に移行する。一方、頂点uの入力辺がないと判定された場合には、並列化コンパイラ70の動作はステップS511に移行する。
ステップS508において、並列化コンパイラ70は、頂点uの入力辺の中でデータ転送時間が最大である辺を辺e’として設定し、更に、辺e’の始点を頂点u’として設定する。この後、並列化コンパイラ70の動作はステップS509に移行する。
ステップS509において、並列化コンパイラ70は、辺e’のデータ転送時間te’が下限値g(te)以上であるか否かを判定する。ここで、下限値g(te)は、対応する処理をデータ転送抑制対象の処理群に追加すべきか否かを判断するためのものであり、辺eのデータ転送時間teに基づいて導出される。例えば、下限値g(te)として、辺eのデータ転送時間teと1.0未満の定数との積が用いられる。辺e’のデータ転送時間te’が下限値g(te)以上であると判定された場合には、並列化コンパイラ70の動作はステップS510に移行する。一方、辺e’のデータ転送時間te’が下限値g(te)未満であると判定された場合には、並列化コンパイラ70の動作はステップS511に移行する。
ステップS510において、並列化コンパイラ70は、頂点u’を頂点集合Vmに追加するとともに、辺e’を辺集合Emに追加し、更に、頂点u’を頂点uとして設定する。この後、並列化コンパイラ70の動作はステップS507に移行する。
ステップS511において、並列化コンパイラ70は、頂点vの出力辺があるか否かを判定する。頂点vの出力辺があると判定された場合には、並列化コンパイラ70の動作はステップS512に移行する。一方、頂点vの出力辺がないと判定された場合には、並列化コンパイラ70の動作はステップS515に移行する。
ステップS512において、並列化コンパイラ70は、頂点vの出力辺の中でデータ転送時間が最大である辺を辺e’として設定し、更に、辺e’の終点を頂点v’として設定する。この後、並列化コンパイラ70の動作はステップS513に移行する。
ステップS513において、並列化コンパイラ70は、辺e’のデータ転送時間te’が下限値g(te)以上であるか否かを判定する。辺e’のデータ転送時間te’が下限値g(te)以上であると判定された場合には、並列化コンパイラ70の動作はステップS514に移行する。一方、辺e’のデータ転送時間te’が下限値g(te)未満であると判定された場合には、並列化コンパイラ70の動作はステップS515に移行する。
ステップS514において、並列化コンパイラ70は、頂点v’を頂点集合Vmに追加するとともに、辺e’を辺集合Emに追加し、更に、頂点v’を頂点vとして設定する。この後、並列化コンパイラ70の動作はステップS511に移行する。
ステップS515において、並列化コンパイラ70は、頂点vに対応する処理をデータ転送抑制対象の処理群(頂点集合Vmに対応する処理群)における最後の処理として決定する。この後、並列化コンパイラ70の動作はステップS516に移行する。
ステップS516において、並列化コンパイラ70は、グラフGmをグループ化対象グラフGbiとして設定する。これにより、グループ化対象グラフ抽出処理は終了し、並列化コンパイラ70の動作は図27のステップS407に移行する。
図29は、スケジューリングポリシー最適化処理の変形例を示している。並列化コンパイラ70においては、プロセッサシステム10のシステム構成(プロセッサコア数および各プロセッサコアの種類)が確定している場合に、そのシステム構成に合わせてスケジューラ設定情報72を生成させることも可能である。この場合の並列化コンパイラ70の動作フローは、ステップS302、S305において並列化コンパイラ70が以下に示すように動作することを除いて、図25の動作フローと同一である。
ステップS302において、並列化コンパイラ70は、ステップS301で得られた複数の処理に関して、コア種(プロセッサコアの種類)毎に各処理の実行時間を見積もる。例えば、並列化コンパイラ70は、プログラムの行数やループ回数等に基づいて命令数を推定して各プロセッサコアのMIPS(Million Instructions Per Second))数等から各処理の実行時間を見積もる。なお、並列化コンパイラ70が過去の実績や経験等に基づいてユーザからプラグマ等により与えられた各処理の実行時間を使用するようにしてもよい。
ステップS305において、並列化コンパイラ70は、ステップS302〜S304で得られた処理間の制御依存関係およびデータ依存関係の解析結果(制御フローグラフおよびデータフローグラフ)と処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、図29に示すようなスケジューリングポリシー最適化処理を実施する。
ステップS601において、並列化コンパイラ70は、制御フローグラフ(CFG)に基づいて逐次プログラム71を基本ブロック単位に分割する。この後、並列化コンパイラ70の動作はステップS602に移行する。
ステップS602において、並列化コンパイラ70は、ステップS601で得られた複数の基本ブロックに関して、未選択の基本ブロックがあるか否かを判定する。未選択の基本ブロックがあると判定された場合には、並列化コンパイラ70の動作はステップS603に移行する。一方、未選択の基本ブロックがないと判定された場合には、スケジューリングポリシー最適化処理は終了し、並列化コンパイラ70の動作は図25のステップS306に移行する。
ステップS603において、並列化コンパイラ70は、未選択の基本ブロックのいずれかを選択する。この後、並列化コンパイラ70の動作はステップS604に移行する。
ステップS604において、並列化コンパイラ70は、ステップS603で選択した基本ブロックに関して、処理毎に割り当て先のコア種を決定する。この後、並列化コンパイラ70の動作はステップS605に移行する。
なお、ステップS604では、例えば、プラグマ等によるユーザの指示に基づいて各処理の割り当て先のコア種が決定される。或いは、処理の実行に適し且つプロセッサコア間の負荷が均衡するように各処理の割り当て先のコア種が決定される。具体的には、ある処理に関して、コア種毎に見積もられた実行時間の中でコア種間の性能比と比較して大幅に結果が突出しているものがある場合には、そのコア種が割り当て先のコア種として決定される。また、割り当て先のコア種が決定されている処理との間で多量のデータを共有しており、割り当て先のコア種が決定されていない処理に関しては、割り当て先のコア種が決定されている処理と同一のコア種が割り当て先のコア種として決定される。残りの処理に関しては、コア種間で負荷の偏りがないように割り当て先のコア種が決定される。例えば、残りの処理に関して、コア種割り当て結果が全通り生成され、コア種割り当て結果の各々について各コア種の処理実行時間(そのコア種が割り当て先のコア種として決定された処理の実行時間の総和をそのコア種のプロセッサコア数で割った値)が算出され、コア種間で処理実行時間の偏りが最小となるコア種割り当て結果が選択される。或いは、残りの処理の中で実行時間が長いものから順番にコア種間の負荷の偏りを解消するように割り当先のコア種が決定される。
ステップS605において、並列化コンパイラ70は、ステップS604で決定した各処理の割り当て先のコア種に基づいて、コア種毎に図28と同様のグループ化対象グラフ抽出処理を実施する。この後、並列化コンパイラ70の動作はステップS602に移行する。
以上のようなスケジューリングポリシー最適化処理において、エントリノード数については、コア種毎に、そのコア種に関して同時に実行させるデータ転送抑制対象の処理群の数がm’個であるときに、スケジューリングルールの変更を必要とする特性を有するエントリノードをm’個設け、スケジューリングルールの変更を必要としない特性を有するエントリノードを1個設けた場合のエントリノードの総数に決定される。なお、各コア種に関して同時に実行させるデータ転送抑制対象の処理群の数は、ユーザからプラグマ等により与えられるものとする。ディストリビューションノード数については、コア種毎に1個のディストリビューションノードを設けた場合のディストリビューションノードの総数(コア種の数)に決定される。ディスパッチノード数については、プロセッサシステム10のプロセッサコア数(n個)に決定される。ディスパッチノードおよびプロセッサコアの対応関係については、n個のディスパッチノードがn個のプロセッサコアに1対1で対応付けられるように決定される。
処理およびエントリノードの対応関係については、コア種毎に、グループ化対象グラフの頂点集合に対応する処理群(データ転送抑制対象の処理群)がスケジューリングルールの変更を必要とする特性を有するm’個のエントリノードに対して順番に対応付けられ、データ転送抑制対象の処理群のいずれにも属さない処理がスケジューリングルールの変更を必要としない特性を有する1個のエントリノードに対応付けられるように決定される。エントリノードおよびディストリビューションノードの接続関係については、コア種毎に全てのエントリノードが1個のディストリビューションノードに接続されるように決定される。ディストリビューションノードおよびディスパッチノードの接続関係については、コア種毎に1個のディストリビューションノードが全てのディスパッチノードに接続されるように決定される。
図30は、図1のプロセッサシステムの具体例を示している。図31は、図30のプロセッサシステム用のスケジューリングルールを示している。例えば、図30に示すように、プロセッサシステム10において、プロセッサコア数が5個であり、プロセッサコア20−1がRISC型であり、プロセッサコア20−2、20−3がVLIW型であり、プロセッサコア20−4、20−5がDSP型であるものとする。また、VLIW型のプロセッサコア20−2、2−3に関して同時に実行させるデータ転送抑制対象の処理群の数が3個であり、DSP型のプロセッサコア20−4、20−5に関して同時に実行させるデータ転送抑制対象の処理群の数が1個であるものとする。このような場合、並列化コンパイラ70によりプロセッサシステム10のシステム構成に合わせて生成されるスケジューラ設定情報72は、図31に示すようなスケジューリングルールを規定するものになる。
図31のスケジューリングルールにおいては、RISC型に関して、スケジューリングルールの変更を必要としない特性を有する1個のエントリノード(EN1)と、1個のディストリビューションノード(DTN1)と、プロセッサコア20−1に関連付けられた1個のディスパッチノード(DPN1)とが設けられている。また、エントリノードEN1がディストリビューションノードDTN1に接続されており、ディストリビューションDTN1がディスパッチノードDPN1に接続されている。
VLIW型に関しては、スケジューリングルールの変更を必要としない特性を有する1個のエントリノード(EN2)と、スケジューリングルールの変更を必要とする特性を有する3個のエントリノード(EN3、EN4、EN5)と、1個のディストリビューションノード(DTN2)と、プロセッサコア20−2、20−3に関連付けられた2個のディスパッチノード(DPN2、DPN3)とが設けられている。また、エントリノードEN2〜EN5の全てがディストリビューションノードDTN2に接続されており、ディストリビューションノードDTN2がディスパッチノードDPN2、DPN3の双方に接続されている。
DSP型に関しては、スケジューリングルールの変更を必要としない特性を有する1個のエントリノード(EN6)と、スケジューリングルールの変更を必要とする特性を有する1個のエントリノード(EN7)と、1個のディストリビューションノード(DTN3)と、プロセッサコア20−4、20−5に関連付けられた2個のディスパッチノード(DPN4、DPN5)とが設けられている。また、エントリノードEN6、EN7の双方がディストリビューションノードDTN3に接続されており、ディストリビューションノードDTN3がディスパッチノードDPN4、DPN5の双方に接続されている。
以上のような本発明の一実施形態では、分散メモリ型のマルチコアプロセッサシステム10のスケジューラ40において、スケジューリング部43によりデータ転送抑制対象の処理群における最初の処理の割り当て先が決定されると、スケジューリング部43によりデータ転送抑制対象の処理群における後続の処理が最初の処理と同一のプロセッサコアに割り当てられるように、ルール変更部44によりスケジューリングルールが変更される。また、スケジューリング部43によりデータ転送抑制対象の処理群における最後の処理の割り当て先が決定されると、ルール変更部44によりスケジューリングルールが復元される。これにより、動的負荷分散とプロセッサコア間のデータ転送の削減とを両立させることができ、ソフトウェア実行効率を大幅に向上させることができる。また、並列化コンパイラ70によりスケジューラ設定情報72が生成されることで、プログラムの開発期間を短縮することができ、その結果、プロセッサシステム10のコスト削減を実現することができる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリとを含むプロセッサシステムに対して、スケジューリングを実施するスケジューラであって、
実行要求を受けた処理に関して、ルール情報に基づいて前記複数のプロセッサコアの中から割り当て先を決定するスケジューリング部と、
予め決定された処理群の最初の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を変更し、前記スケジューリング部に前記処理群の後続の処理を前記最初の処理と同一のプロセッサコアに割り当てさせ、前記処理群の最後の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を復元するルール変更部とを備えることを特徴とするスケジューラ。
(付記2)
付記1に記載のスケジューラにおいて、
前記ルール情報は、処理の実行要求が入力される複数のエントリノードと前記複数のプロセッサコアとの間における処理の割り当てに関する対応関係を規定する情報を含み、
前記複数のエントリノードは、前記ルール情報の変更を必要としない特性を有する第1エントリノードと、前記ルール情報の変更を必要とする特性を有する第2エントリノードとを含み、
前記ルール変更部は、前記第2エントリノードに実行要求が入力された処理を前記処理群に属する処理として認識することを特徴とするスケジューラ。
(付記3)
付記2に記載のスケジューラにおいて、
前記スケジューラで用いられる制御情報は、前記ルール情報を含むとともに、前記複数のエントリノードの各々について、そのエントリノードが前記第2エントリノードである場合にセット状態に設定される第1フラグ情報と、そのエントリノードに関する前記ルール情報の変更が実施済みである場合にセット状態に設定される第2フラグ情報とを含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第1および前記第2フラグ情報に基づいて、前記ルール情報を変更する動作を実施する必要があるか否かを判断することを特徴とするスケジューラ。
(付記4)
付記3に記載のスケジューラにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第1フラグ情報がセット状態であり、対応する前記第2フラグ情報がリセット状態である場合に、前記ルール情報を変更するとともに、対応する前記第2フラグ情報をセット状態に設定することを特徴とするスケジューラ。
(付記5)
付記3に記載のスケジューラにおいて、
前記制御情報は、実行要求を受けた処理の各々について、その処理が前記処理群の最後の処理である場合にセット状態に設定される第3フラグ情報を含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第1、前記第2および前記第3フラグ情報に基づいて、前記ルール情報を復元する動作を実施する必要があるか否かを判断することを特徴とするスケジューラ。
(付記6)
付記5に記載のスケジューラにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第1、前記第2および前記第3フラグ情報の全てがセット状態である場合に、前記ルール情報を復元するとともに、対応する前記第2フラグ情報をリセット状態に設定することを特徴とするスケジューラ。
(付記7)
複数のプロセッサコアと、
前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、
前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを備え、
前記スケジューラは、
実行要求を受けた処理に関して、ルール情報に基づいて前記複数のプロセッサコアの中から割り当て先を決定するスケジューリング部と、
予め決定された処理群の最初の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を変更し、前記スケジューリング部に前記処理群の後続の処理を前記最初の処理と同一のプロセッサコアに割り当てさせ、前記処理群の最後の処理に関して前記スケジューリング部で割り当て先が決定されるのに伴って前記ルール情報を復元するルール変更部とを備えることを特徴とするプロセッサシステム。
(付記8)
付記7に記載のプロセッサシステムにおいて、
前記ルール情報は、処理の実行要求が入力される複数のエントリノードと前記複数のプロセッサコアとの間における処理の割り当てに関する対応関係を規定する情報を含み、
前記複数のエントリノードは、前記ルール情報の変更を必要としない特性を有する第1エントリノードと、前記ルール情報の変更を必要とする特性を有する第2エントリノードとを含み、
前記ルール変更部は、前記第2エントリノードに実行要求が入力された処理を前記処理群に属する処理として認識することを特徴とするプロセッサシステム。
(付記9)
付記8に記載のプロセッサシステムにおいて、
前記スケジューラで用いられる制御情報は、前記ルール情報を含むとともに、前記複数のエントリノードの各々について、そのエントリノードが前記第2エントリノードである場合にセット状態に設定される第1フラグ情報と、そのエントリノードに関する前記ルール情報の変更が実施済みである場合にセット状態に設定される第2フラグ情報とを含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第1および前記第2フラグ情報に基づいて、前記ルール情報を変更する動作を実施する必要があるか否かを判断することを特徴とするプロセッサシステム。
(付記10)
付記9に記載のプロセッサシステムにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第1フラグ情報がセット状態であり、対応する前記第2フラグ情報がリセット状態である場合に、前記ルール情報を変更するとともに、対応する前記第2フラグ情報をセット状態に設定することを特徴とするプロセッサシステム。
(付記11)
付記9に記載のプロセッサシステムにおいて、
前記制御情報は、実行要求を受けた処理の各々について、その処理が前記処理群の最後の処理である場合にセット状態に設定される第3フラグ情報を含み、
前記ルール変更部は、前記スケジューリング部で処理の割り当て先が決定された際に、その処理の実行要求が入力されたエントリノードに関して、対応する前記第1、前記第2および前記第3フラグ情報に基づいて、前記ルール情報を復元する動作を実施する必要があるか否かを判断することを特徴とするプロセッサシステム。
(付記12)
付記11に記載のプロセッサシステムにおいて、
前記ルール変更部は、前記スケジューリング部から出力されるスケジューリング結果情報に基づいて前記スケジューリング部で割り当て先が決定された処理を特定し、特定した処理の実行要求が入力されたエントリノードに関して、対応する前記第1、前記第2および前記第3フラグ情報の全てがセット状態である場合に、前記ルール情報を復元するとともに、対応する前記第2フラグ情報をリセット状態に設定することを特徴とするプロセッサシステム。
(付記13)
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成するプログラム生成方法であって、
逐次プログラムを読み込んで複数の処理に分割する第1工程と、
前記複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる第2工程と、
処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、前記複数の処理の中からデータ転送抑制対象の処理群を決定する第3工程と、
前記複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えた前記スケジューラに前記処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を前記並列プログラムとともに生成する第4工程とを含むことを特徴とするプログラム生成方法。
(付記14)
付記13に記載のプログラム生成方法において、
前記複数のプロセッサコアは、複数種のプロセッサコアを含み、
前記第2工程では、プロセッサコアの種類毎に各処理の実行時間が見積もられ、
前記第3工程では、処理毎に割り当て先のプロセッサコアの種類が決定された後に、プロセッサコアの種類毎に前記処理群が決定されることを特徴とするプログラム生成方法。
(付記15)
付記13または付記14に記載のプログラム生成方法において、
前記第3工程は、
データ依存関係を有する処理対の中からデータ転送時間が最大である処理対を特定し、特定した処理対に関するデータ転送時間が特定した処理対の各処理に関する実行時間に基づく第1基準値より大きい場合に、特定した処理対を前記処理群として決定する工程と、
前記処理群の最初の処理で使用されるデータを生成する処理の中から前記処理群の最初の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最初の処理との処理対に関するデータ転送時間が前記処理群として決定された処理対に関するデータ転送時間に基づく第2基準値より大きい場合に、特定した処理を前記処理群に追加する工程と、
前記処理群の最後の処理で生成されるデータを使用する処理の中から前記処理群の最後の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最後の処理との処理対に関するデータ転送時間が前記第2基準値より大きい場合に、特定した処理を前記処理群に追加する工程とを含むことを特徴とするプログラム生成方法。
(付記16)
複数のプロセッサコアと、前記複数のプロセッサコアのそれぞれに対応する複数のメモリと、前記複数のプロセッサコアに対してスケジューリングを実施するスケジューラとを含むプロセッサシステム用の並列プログラムを生成するためのコンピュータに、
逐次プログラムを読み込んで複数の処理に分割する第1工程と、
前記複数の処理に関して、処理毎に実行時間を見積もるとともに、処理間の制御依存関係およびデータ依存関係を解析し、データ依存関係を有する処理対毎にデータ転送時間を見積もる第2工程と、
処理間の制御依存関係およびデータ依存関係の解析結果と、処理毎の実行時間およびデータ依存関係を有する処理対毎のデータ転送時間の見積結果とに基づいて、前記複数の処理の中からデータ転送抑制対象の処理群を決定する第3工程と、
前記複数のプロセッサコアの中から処理の割り当て先を決定する際に用いられるルール情報を変更および復元する機能を備えた前記スケジューラに前記処理群を同一のプロセッサコアに割り当てさせるためのスケジューラ設定情報を前記並列プログラムとともに生成する第4工程とを実行させることを特徴とするプログラム生成用プログラム。
(付記17)
付記16に記載のプログラム生成用プログラムにおいて、
前記複数のプロセッサコアは、複数種のプロセッサコアを含み、
前記第2工程では、プロセッサコアの種類毎に各処理の実行時間が見積もられ、
前記第3工程では、処理毎に割り当て先のプロセッサコアの種類が決定された後に、プロセッサコアの種類毎に前記処理群が決定されることを特徴とするプログラム生成用プログラム。
(付記18)
付記16または付記17に記載のプログラム生成用プログラムにおいて、
前記第3工程は、
データ依存関係を有する処理対の中からデータ転送時間が最大である処理対を特定し、特定した処理対に関するデータ転送時間が特定した処理対の各処理に関する実行時間に基づく第1基準値より大きい場合に、特定した処理対を前記処理群として決定する工程と、
前記処理群の最初の処理で使用されるデータを生成する処理の中から前記処理群の最初の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最初の処理との処理対に関するデータ転送時間が前記処理群として決定された処理対に関するデータ転送時間に基づく第2基準値より大きい場合に、特定した処理を前記処理群に追加する工程と、
前記処理群の最後の処理で生成されるデータを使用する処理の中から前記処理群の最後の処理との処理対に関するデータ転送時間が最大である処理を特定し、特定した処理と前記処理群の最後の処理との処理対に関するデータ転送時間が前記第2基準値より大きい場合に、特定した処理を前記処理群に追加する工程とを含むことを特徴とするプログラム生成用プログラム。
以上、本発明について詳細に説明してきたが、前述の実施形態は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
10‥プロセッサシステム;20−1〜20−n‥プロセッサコア;30−1〜30−n‥メモリ;40‥スケジューラ;41‥外部インタフェース部;42‥メモリアクセス部;43‥スケジューリング部;44‥ルール変更部;50‥スケジューラ専用メモリ;60‥インターコネクト;70‥並列化コンパイラ;71‥逐次プログラム;72‥スケジューラ設定情報;73‥並列プログラム