(57)【特許請求の範囲】
【請求項１】
複数のプロセッサと、前記プロセッサの間でのデータ転送のスケジュールを行うスケジューラと、を含むシステムにおけるプロセッサ間通信制御方法であって、
プロセッサが、前記スケジューラに対して他のプロセッサとの間のデータ転送に関する要求を発行する要求発行ステップと、
プロセッサが、前記スケジューラから他のプロセッサとの間のデータ転送に関する指示の受け付けを行う指示受付ステップと、
プロセッサが、前記スケジューラに対して他のプロセッサとの間のデータ転送に関する通知を発行する通知発行ステップと、
プロセッサが、前記指示に応じてプロセッサ間のデータ転送を開始する開始ステップと、
前記スケジューラが、プロセッサより前記要求を受信する要求受信ステップと、
前記スケジューラが、プロセッサより前記通知を受信する通知受信ステップと、
前記スケジューラが、前記受信した要求、又は前記受信した通知に基づいて、プロセッサ間のデータ転送に関わる衝突がなく、かつ、より多くのプロセッサ間のデータ転送を行うように、スケジューリングを行い、スケジューリングの結果に基づき、プロセッサに対して指示を発行する指示発行ステップと、
を含み、
前記指示発行ステップでは、前記スケジューラが、前記要求が転送要求である場合、前記転送要求に基づいて、転送要求を受けた複数のデータ転送のうち最も多くのプロセッサ間のデータ転送を行うように、転送指示を発行していないものについて、転送指示を出すか否か決定し、転送指示を出すと決定した場合、該当するプロセッサに対して前記転送指示を発行することを特徴とするプロセッサ間通信制御方法。
【請求項２】
前記指示のひとつは転送指示であり、
前記開始ステップでは、前記プロセッサが、前記転送指示を受信した順番に、先行する転送指示によるデータ転送の完了後、次のデータ転送を開始することを特徴とする請求項１記載のプロセッサ間通信制御方法。
【請求項３】
前記指示のひとつは転送指示であり、
前記要求のひとつは他のプロセッサとの間でデータ転送が必要であることを示す転送要求であり、
前記通知のひとつは前記転送指示によるデータ転送が完了したことを表わす完了通知であり、
前記指示発行ステップでは、前記スケジューラが、前記転送要求、又は前記完了通知を受信するたびに再びスケジュールを行い、プロセッサに対して追加の指示を発行することを特徴とする請求項１又は２記載のプロセッサ間通信制御方法。
【請求項４】
前記指示発行ステップでは、前記スケジューラが、どちらともデータ転送のエンドポイントとなっていないプロセッサ間、どちらかがエンドポイントとなっているプロセッサ間、どちらともデータ転送のエンドポイントとなっているプロセッサ間の順に優先して、前記転送指示を発行することを特徴とする請求項１乃至３何れか１項記載のプロセッサ間通信制御方法。
【請求項５】
前記スケジューラが、より多くのプロセッサ間のデータ転送を行えるか否かの判断に基づき、前記指示発行ステップで転送指示を発行したものの未だデータ転送が始まっていないと思われるデータ転送をキャンセルするよう指示するキャンセル指示を出すか否かを決定し、キャンセル指示を出すと決定した場合、該当するプロセッサに対して前記キャンセル指示を発行するキャンセル指示発行ステップを更に含み、
前記指示受付ステップでは、プロセッサが、前記キャンセル指示を受け付け、
前記通知発行ステップでは、プロセッサが、前記キャンセル指示を受け付けたデータ転送が未だ始まっていない場合、データ転送のエントリをキャンセルした上でキャンセル受諾通知を前記スケジューラに発行し、前記キャンセル指示を受け付けたデータ転送が既に始まっている場合、キャンセル拒絶通知を前記スケジューラに発行することを特徴とする請求項１乃至４何れか１項記載のプロセッサ間通信制御方法。
【請求項６】
複数のプロセッサと、前記プロセッサの間でのデータ転送のスケジュールを行うスケジューラと、を含むシステムであって、
前記プロセッサは、
前記スケジューラに対して他のプロセッサとの間のデータ転送に関する要求を発行する要求発行手段と、
前記スケジューラから他のプロセッサとの間のデータ転送に関する指示の受け付けを行う指示受付手段と、
前記スケジューラに対して他のプロセッサとの間のデータ転送に関する通知を発行する通知発行手段と、
前記指示に応じてプロセッサ間のデータ転送を開始する開始手段と、
を有し、
前記スケジューラは、
プロセッサより前記要求を受信する要求受信手段と、
プロセッサより前記通知を受信する通知受信手段と、
前記受信した要求、又は前記受信した通知に基づいて、プロセッサ間のデータ転送に関わる衝突がなく、かつ、より多くのプロセッサ間のデータ転送を行うように、スケジューリングを行い、スケジューリングの結果に基づき、プロセッサに対して指示を発行する指示発行手段と、
を有し、
前記指示発行手段は、前記要求が転送要求である場合、前記転送要求に基づいて、転送要求を受けた複数のデータ転送のうち最も多くのプロセッサ間のデータ転送を行うように、転送指示を発行していないものについて、転送指示を出すか否か決定し、転送指示を出すと決定した場合、該当するプロセッサに対して前記転送指示を発行することを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ間通信制御方法及びシステムに関する。
【背景技術】
【０００２】
近年、シングルプロセッサによる演算能力の向上に限界が見え始め、ムーアの法則が成り立たなくなりつつある。また消費電力の問題もあり、解決策のひとつとしてマルチプロセッサシステムが注目されている。
マルチプロセッサシステムでは、各プロセッサが互いに処理結果をデータ転送しながら並列して処理を行い、全体として高い演算性能を出すことを目指す。この際に大きな問題となるのが、プロセッサ間のデータ転送にかかる通信である。
【０００３】
例えば、後述するＰＥ０⇒ＰＥ１間の通信と、ＰＥ０⇒ＰＥ２間の通信と、を同時に行うと、ＰＥ０で衝突が起こる。
従来技術ではこのような場合に、どちらの通信を優先させるかにＱｏＳ技術を用いて制御を行っていた。
また特許文献１ではバス型のＰＥ間ネットワークでの調停を想定しているが、プロセッサ間通信の単位をひとまとまりのデータ通信（アクセスブロック）ごとに行うことで、調停の回数を低減させていた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−３１８９０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のＱｏＳ制御はキューイングによる通信の優先制御やフローの平準化、資源の予約（ＲＳＶＰ）といったもので、ＰＥ間ネットワークのデータ転送レートをより高めるような制御は行えなかった。また無駄な通信を削減することは難しく、受信側ＰＥはバッファ管理により何れかのデータを捨てることを想定しなければならなかった。
また特許文献１ではＰＥ間ネットワークのデータ転送レートをより高める制御に関しては言及していない。
【０００６】
本発明はこのような問題点に鑑みなされたもので、ＰＥ間のネットワークのデータ転送レートをより高めるような制御を行うことを目的とする。
【課題を解決するための手段】
【０００７】
そこで、本発明は、複数のプロセッサと、前記プロセッサの間でのデータ転送のスケジュールを行うスケジューラと、を含むシステムにおけるプロセッサ間通信制御方法であって、プロセッサが、前記スケジューラに対して他のプロセッサとの間のデータ転送に関する要求を発行する要求発行ステップと、プロセッサが、前記スケジューラから他のプロセッサとの間のデータ転送に関する指示の受け付けを行う指示受付ステップと、プロセッサが、前記スケジューラに対して他のプロセッサとの間のデータ転送に関する通知を発行する通知発行ステップと、プロセッサが、前記指示に応じてプロセッサ間のデータ転送を開始する開始ステップと、前記スケジューラが、プロセッサより前記要求を受信する要求受信ステップと、前記スケジューラが、プロセッサより前記通知を受信する通知受信ステップと、前記スケジューラが、前記受信した要求、又は前記受信した通知に基づいて、プロセッサ間のデータ転送に関わる衝突がなく、かつ、より多くのプロセッサ間のデータ転送を行うように、スケジューリングを行い、スケジューリングの結果に基づき、プロセッサに対して指示を発行する指示発行ステップと、を含み、前記指示発行ステップでは、前記スケジューラが、前記要求が転送要求である場合、前記転送要求に基づいて、転送要求を受けた複数のデータ転送のうち最も多くのプロセッサ間のデータ転送を行うように、転送指示を発行していないものについて、転送指示を出すか否か決定し、転送指示を出すと決定した場合、該当するプロセッサに対して前記転送指示を発行することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、ＰＥ間のネットワークのデータ転送レートをより高めるような制御を行うことができる。
【図面の簡単な説明】
【０００９】
【図１】マルチプロセッサシステムの一例を示す図である。
【図２Ａ】データ転送を行う各ＰＥで実践する転送ワーカーの構成の一例を示す図である。
【図２Ｂ】転送ワーカーとの間でやりとりを行うスケジューラの構成の一例を示す図である。
【図３】実施形態１のＰＥ間データ転送の様子を表した図である。
【図４】実施形態２のＰＥ間データ転送の様子を表した図である。
【図５】実施形態３のＰＥ間データ転送の様子を表した図（その１）である。
【図６】実施形態３のＰＥ間データ転送の様子を表した図（その２）である。
【図７Ａ】図２Ａに対応する、転送ワーカーの構成の一例を示す図である。
【図７Ｂ】図２Ｂに対応するスケジューラの構成の一例を示す図である。
【図８】更新転送状態生成部における更新転送状態２２３３の決定の処理の一例を示すフローチャートである。
【図９】転送状態の差分の一例を示す図である。
【図１０】実施形態３のＰＥ間データ転送の様子を表した図（その３）である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について図面に基づいて説明する。
【００１１】
＜実施形態１＞
図１は、マルチプロセッサシステムの一例を示す図である。なお、マルチプロセッサシステムの構成方法には幾つかあるが、本実施形態では図１に示すようなシステムを想定する。
各プロセッサＰＥｘ（１１ｘ）は、実際の演算を行うプロセシングユニットＰＵ（１２ｘ）と、ＰＥが優先して使用可能なローカルメモリＬＭ（１３ｘ）と、を備える。このようなＰＥが互いに通信を行うために通信インターフェースＰＥＩＦ（１４ｘ）を介してＰＥ間ネットワーク１５によって接続されている。
ＰＥ間ネットワーク１５は、クロスバスイッチやリングバスといった、互いに異なるＰＥ同士の通信であれば、他の通信との間で衝突（コリジョン）を起こさず、高速に通信可能なものである。
こうしたシステムの上で、効率的に通信を行うには、ＰＥ間ネットワーク内のデータ転送レートをより高めること、即ち衝突のない通信をいかに多く実行するかにかかっている。
【００１２】
次に、ＰＥｘ内のＰＵで動作するソフトウェアプロセスを説明する。なお、本実施形態はこれに囚われるものではなく、他のソフトウェアプロセスに含まれていてもよいし、同様の動作を行うハードウェア機構で実現されてもよい。
図２Ａは、データ転送を行う各ＰＥで実践する転送ワーカーの構成の一例を示す図である。また、図２Ｂは、転送ワーカーとの間でやりとりを行うスケジューラの構成の一例を示す図である。スケジューラは、システム内で唯一つ存在する。データ転送トラフィックとの衝突を減らすという観点からは、スケジューラは、データ転送を行わないＰＥに配置するのがよい。但し、画像データのデータ転送のようにデータ転送トラフィックに比べて通信制御のためのトラフィックが十分に少ないと仮定できる場合には、スケジューラを転送ワーカーと同じＰＥに配置してもよい。
【００１３】
まずＰＥ０からＰＥ１へのデータ転送を例にとって説明する。
ＰＥ０ではＰＥ１へデータ転送を行いたい旨（送信要求）を転送ワーカーのリクエストメッセージ生成部２１３に対して伝える。リクエストメッセージ生成部２１３ではＰＥ０からＰＥ１へのデータ転送を要求するリクエストメッセージを生成（発行）し、ＰＥ間ネットワークとのインターフェースであるＰＥＩＦ１４を経由して、スケジューラに対してメッセージを送出する（要求発行）。
スケジューラではリクエストメッセージ受信部２２４がＰＥＩＦ１４を経由して、このリクエストメッセージを受信し（要求受信）、転送リクエストチェック部２２１に伝える。
転送リクエストチェック部２２１は、転送状態管理テーブル２２３内の現在転送状態２２３１を参照し、前記リクエストメッセージの対となるメッセージを既に受信済みか否かをチェックする。対となるメッセージとは、この場合、受信側ＰＥであるＰＥ１から受信した「ＰＥ０からＰＥ１への転送リクエスト」（受信要求）となる。
なお、転送状態管理テーブル２２３とは、スケジューラがＰＥ間通信の制御を行うための情報を保持するもので、典型的には読み書き可能なメモリに実装される。但し、本実施形態はこの実装方法に限定されるものではない。
現在転送状態２２３１とは、ＰＥ間の現在のデータ転送状態を表すもので、各データ転送の状態を管理している。より具体的には各データ転送をその状態と共にエントリとしてまとめ、全てのエントリをテーブルとして保持する。但し本実施形態はデータ転送状態の保持方法については限定しない。現在転送状態２２３１は各ＰＥからのリクエストを基にスケジューラが更新する。更新の詳細については、以降、説明する。
【００１４】
ＰＥ０から送信要求を受け付けた際には、まだＰＥ１から受信要求を受信していないため、現在転送状態２２３１には「ＰＥ０からＰＥ１へのデータ転送」に関するエントリはない。そこで転送リクエストチェック部２２１は、現在転送状態２２３１に対し、「リクエスト待ち」という状態の「ＰＥ０からＰＥ１へのデータ転送」に関するエントリを生成する。
ＰＥ０と同様に、ＰＥ１の転送ワーカーは、スケジューラに対して「ＰＥ０からＰＥ１へのデータ転送」に関する受信要求のリクエストメッセージを出す（要求発行）。
スケジューラでは、この受信要求をＰＥＩＦ１４経由でリクエストメッセージ受信部２２４が受信し、転送リクエストチェック部２２１へ渡す。
転送リクエストチェック部２２１では先ほどと同じように、「ＰＥ０からＰＥ１へのデータ転送」に関するエントリを現在転送状態２２３１から取得し、チェックする。転送リクエストチェック部２２１は、今度は「リクエスト待ち」状態としてエントリが得られる。そこで転送リクエストチェック部２２１は、状態を「未スケジュール」と変更する。
なお、ここではＰＥ０からの送信要求が、ＰＥ１からからの受信要求よりも先にスケジューラに届いた場合を説明したが、どちらが先にスケジューラに届いてもよい。転送リクエストチェック部２２１は、一方の要求がスケジューラに届いた際に「リクエスト待ち」状態のエントリを作成し、両者の要求が届いた際に「未スケジュール」に状態を変更する。
【００１５】
現在転送状態２２３１は、スケジューラが把握している現在のＰＥ間ネットワークのデータ転送状態である。スケジューラはこれが変更されるたびに新たな転送スケジュールを生成し、必要に応じてデータ転送に関する指示を各ＰＥに出す（指示発行）。各ＰＥは、この指示を受け付ける（指示受付）。
但し、リクエスト待ち状態のエントリの作成は、データ転送可能な状態に変化はないので、転送スケジュールの生成を含めた以降の処理は行わない。
現在転送状態２２３１が変更されるきっかけは、各ＰＥからのデータ転送リクエスト（送信要求又は受信要求）メッセージ、或いは後述する現在転送中のデータ転送が完了したことを通知する転送完了メッセージの受信である。つまり、ＰＥは、後述するように、現在転送中のデータ転送が完了した場合、完了したことを通知する転送完了メッセージを出す（通知発行）。
ＰＥ１からの受信要求により「ＰＥ０からＰＥ１へのデータ転送状態」が「リクエスト待ち」状態から「未スケジュール」状態になったのを受け、転送スケジュール生成部２２２は、現在転送状態２２３１を基に更新転送スケジュール２２３２を生成する。
更新転送スケジュール２２３２とはスケジューラが各ＰＥに出す指示の内容である。転送スケジュール生成部２２２は、現在転送状態２２３１と、受信したメッセージの内容とから、ＰＥ間ネットワークのデータ転送レートをより高めるよう、各ＰＥに送信すべきデータ転送に関する指示を決定する。そして、転送スケジュール生成部２２２は、この更新転送スケジュール２２３２を基に、各ＰＥへ指示を出すと共に現在転送状態２２３１に反映させる。
【００１６】
ここでは「ＰＥ０からＰＥ１へのデータ転送」が最初の転送要求であるため、「ＰＥ０からＰＥ１へのデータ転送」によって新たに衝突が発生することはない。そこで、転送スケジュール生成部２２２は、「ＰＥ０からＰＥ１へのデータ転送」の状態を「転送中」としたものを更新転送スケジュール２２３２とする。
そして転送スケジュール生成部２２２が更新転送スケジュール２２３２で現在転送状態２２３１を更新すると共に、転送指示メッセージ生成部２２６が転送指示メッセージを生成する。
転送指示メッセージは、ＰＥ０に対するＰＥ１への送信指示メッセージ（転送指示メッセージ）と、ＰＥ１に対するＰＥ０からの受信指示メッセージ（転送指示メッセージ）である。転送指示メッセージ生成部２２６は、これらのメッセージをそれぞれのＰＥにＰＥＩＦ１４を通じて送信する。
【００１７】
ＰＥ０ではスケジューラからの「ＰＥ１への送信指示メッセージ（転送指示メッセージ）」を、ＰＥＩＦ１４を経由して転送指示メッセージ受信部２１４で受信する。
そして転送リスト管理部２１１は、転送リスト２１２に「ＰＥ１への送信」というエントリを追加する。更に転送指示部２１６は、ＰＥＩＦ１４にＰＥ１へのデータ転送を指示する。
ＰＥ１では、ＰＥ０と同様にスケジューラからの「ＰＥ０からの受信メッセージ（転送指示メッセージ）」を、ＰＥＩＦ１４を経由して転送指示メッセージ受信部２１４で受信する。
そして転送リスト管理部２１１が、転送リスト２１２に「ＰＥ０からの受信」というエントリを追加する。更に転送指示部２１６が、ＰＥＩＦ１４にＰＥ０からのデータ転送を指示する。
以上の手順により、ＰＥ０からＰＥ１へのデータ転送が実現される。
【００１８】
データ転送が終わると、ＰＥ０においては、ＰＥＩＦ１４が転送完了した旨を指示完了通知受信部２１７に対して伝える。転送リスト管理部２１１は、前記データ転送のエントリである「ＰＥ１への送信」を転送リスト２１２から削除する。そして、完了通知メッセージ生成部２１５で前記データ転送が完了した旨のメッセージを生成し、ＰＥＩＦ１４を通じてスケジューラに送信する。
同様に、ＰＥ１でもデータ転送が終わると、ＰＥＩＦ１４が転送完了した旨を指示完了通知受信部２１７に対して伝える。転送リスト管理部２１１は、前記データ転送のエントリである「ＰＥ０からの受信」を転送リスト２１２から削除する。そして、完了通知メッセージ生成部２１５で前記データ転送が完了した旨のメッセージを生成し、ＰＥＩＦ１４を通じてスケジューラに送信する。
スケジューラでは、ＰＥ０又はＰＥ１からの転送完了メッセージを、ＰＥＩＦ１４を経由して完了通知メッセージ受信部２２５で受信する。そして転送スケジュール生成部２２２は、現在転送状態２２３１のエントリ「ＰＥ０からＰＥ１へのデータ転送」を削除する。
最初に受信した転送完了メッセージによって、前記エントリは削除されてしまうため、もう一方の転送完了メッセージ受信時には前記エントリがない。その場合、スケジューラは、何もしない。
この時点で現在転送状態２２３１が変化したので、転送スケジュール生成部２２２は、現在転送状態２２３１を参照し、更新転送スケジュール２２３２を生成するが、新たにスケジューリングできるデータ転送のエントリはないため、内容は何もない。
以上の手順により、ＰＥ０からＰＥ１へのデータ転送が終了する。
【００１９】
上記ではスケジューラの転送スケジュール生成部２２２は現在転送状態２２３１を基に更新転送スケジュール２２３２を生成すると説明した。この様子を説明する。
図３は、実施形態１のＰＥ間データ転送の様子を表した図である。点線が「未スケジュール」状態のデータ転送であり、実線のＰＥ２⇒ＰＥ３のデータ転送は、「転送中」状態である。
実線の「転送中」のデータ転送により、点線の何れのデータ転送もＰＥ２或いはＰＥ３でコンフリクトを起こしてしまうため、「未スケジュール」状態にある。
この状態で実線のデータ転送が完了した場合、転送スケジュール生成部２２２は、点線の「未スケジュール」状態のデータ転送のうち、幾つかを選択して「転送中」状態にした更新転送スケジュール２２３２を生成する。
スケジュールの生成は、ＰＥ間ネットワーク内のデータ転送レートをより高めるよう、即ち衝突のないデータ転送をより多くするように行う。
【００２０】
ケース１）ＰＥ０⇒ＰＥ２
この場合、ＰＥ０⇒ＰＥ３はＰＥ０で、ＰＥ１⇒ＰＥ２はＰＥ２で衝突を起こすため、１つの通信のみスケジューリング可能である。
ケース２）ＰＥ０⇒ＰＥ３、ＰＥ１⇒ＰＥ２
この場合、ＰＥ０⇒ＰＥ２はＰＥ０及びＰＥ２で衝突を起こすため、２つの通信をスケジューリング可能である。
以上のように衝突を起こさない通信のスケジューリングには２つのケースが考えられるが、ケース１の場合は１つ、ケース２の場合は２つの通信をスケジューリングできる。
そこで、転送スケジュール生成部２２２は、より多くの通信をスケジューリングできるケース２を更新転送スケジュール２２３２とし、「ＰＥ０⇒ＰＥ３」「ＰＥ１⇒ＰＥ２」のデータ転送の状態を「転送中」とする。
この結果を受けて、転送指示メッセージ生成部２２６は、以下の４つのメッセージを各ＰＥに対して生成し、ＰＥＩＦ１４を通じて送信する。
１）ＰＥ０に対して「ＰＥ０⇒ＰＥ３」の転送指示メッセージ（送信指示メッセージ）
２）ＰＥ１に対して「ＰＥ１⇒ＰＥ２」の転送指示メッセージ（送信指示メッセージ）
３）ＰＥ２に対して「ＰＥ１⇒ＰＥ２」の転送指示メッセージ（受信指示メッセージ）
４）ＰＥ３に対して「ＰＥ０⇒ＰＥ３」の転送指示メッセージ（受信指示メッセージ）
【００２１】
＜実施形態２＞
スケジューリングに関して、図４のような場合を例に説明を行う。図４は、実施形態２のＰＥ間データ転送の様子を表した図である。
「ＰＥ０⇒ＰＥ１」が転送中である場合に、新たに「ＰＥ０⇒ＰＥ２」の転送要求があり「未スケジュール」状態となった場合である。
転送スケジュール生成部２２２は、現在転送状態２２３１を基に更新転送スケジュール２２３２を生成する。
仮に「ＰＥ０⇒ＰＥ２」を「転送中」状態にスケジューリングした場合、ＰＥ０で衝突してしまう。そこで転送スケジュール生成部２２２は、「ＰＥ０⇒ＰＥ２」のデータ転送を「ＰＥ０⇒ＰＥ１」のデータ転送が完了し次第開始するようにスケジューリングする。
これにはスケジューラがＰＥ０、ＰＥ２に「ＰＥ０⇒ＰＥ２」の転送指示を出し、転送指示を受信したＰＥが受信した順にひとつずつ、先行するデータ転送が完了したら次のデータ転送を開始するようにすればよい。
【００２２】
より具体的には次のようにする。転送スケジュール生成部２２２は、以下のような更新転送スケジュール２２３２を生成する。
・「ＰＥ０⇒ＰＥ２」の転送状態を「スケジュール済」とする。
転送スケジュール生成部２２２は、この更新転送スケジュール２２３２で現在転送状態２２３１を更新する。そして転送指示メッセージ生成部２２６は、以下の２つのメッセージを各ＰＥに対して生成し、ＰＥＩＦ１４を通じて送信する。
１）ＰＥ０に対して「ＰＥ０⇒ＰＥ２」の転送指示メッセージ（送信指示メッセージ）
２）ＰＥ２に対して「ＰＥ０⇒ＰＥ２」の転送指示メッセージ（受信指示メッセージ）
ＰＥ２が上記転送指示メッセージを受信したあとの動作は、実施形態１と同様であるので省略する。
【００２３】
ＰＥ０の転送ワーカーは「ＰＥ０⇒ＰＥ２」の転送指示メッセージを、ＰＥＩＦ１４を経由して転送指示メッセージ受信部２１４で受信し、転送リスト管理部２１１に伝える。
転送リスト管理部２１１は、転送リスト２１２に「ＰＥ２への送信」というエントリを追加する。このとき、転送リスト管理部２１１は、既に何らかのエントリがあるかどうかをチェックする。空であれば、転送リスト管理部２１１は、実施形態１と同様に、データ転送を開始するために転送指示部２１６を呼び出し、データ転送を指示する。ここでは、「ＰＥ１へのデータ転送」というエントリが既に入っているため、転送リスト管理部２１１は、処理を終了する。
ＰＥ０では、転送リスト２１２の最初のエントリ「ＰＥ１への送信」を実行中である。このデータ転送が完了すると、実施形態１と同様に指示完了通知受信部２１７からデータ転送を終了した旨の通知を受け、転送リスト管理部２１１は、転送リスト２１２のエントリ（先頭エントリ）を削除し、完了通知メッセージ生成部２１５を呼び出す。
このとき、転送リスト管理部２１１は、先頭エントリ削除後の転送リスト２１２をチェックし、先頭エントリがあるか否かを調べる。ここでは「ＰＥ２への送信」が先頭エントリとして得られる。先頭エントリが得られた場合、このエントリの内容に従って転送指示部２１６は、ＰＥＩＦ１４にデータ転送を指示する。
【００２４】
このように転送ワーカーは、転送指示メッセージを受信した順番に、先行する転送指示メッセージによるデータ転送の完了後、即座に次のデータ転送を開始する。そのため、本来はタイムラグとなってしまう、データ転送ごとに必要となるスケジューラとのやりとりの時間を隠ぺいすることが可能となる。
このように転送スケジュール生成部２２２は、更新転送スケジュール２２３２を生成する際に、「未スケジュール」状態のデータ転送のうち、どれを「転送中」にし、どれを「スケジュール済」とするか、の決定を行う。
これは「未スケジュール」状態のデータ転送のエンドポイントとなる２つのＰＥ（送信側と受信側と）が「転送中」或いは「スケジュール済」状態のデータ転送のエンドポイントとなっているかによって決定すればよい。つまり、転送スケジュール生成部２２２は、
・両側が何れのデータ転送のエンドポイントにもなっていなければ、「転送中」状態とする。
・一方が「転送中」或いは「スケジュール済」状態のデータ転送のエンドポイントで、もう一方が何れのデータ転送のエンドポイントにもなっていなければ、「スケジュール済」とする。
・両側が「転送中」或いは「スケジュール済」状態のデータ転送のエンドポイントとなっている場合は、「未スケジュール」状態のままにする。
実施形態２の場合「ＰＥ０⇒ＰＥ２」のデータ転送について、ＰＥ０は「転送中」状態の「ＰＥ０⇒ＰＥ１」のエンドポイントとなっているが、ＰＥ２は何れのデータ転送のエンドポイントにもなっていない。そこで、転送スケジュール生成部２２２は、「ＰＥ０⇒ＰＥ２」のデータ転送は「スケジュール済」とする。
【００２５】
＜実施形態３＞
実施形態２では転送スケジュール生成部２２２は、「未スケジュール」状態のデータ転送のうち、どれを「転送中」にし、どれを「スケジュール済」とするか、の決定を行った。
しかしＰＥ間ネットワーク１５のデータ転送レートをより高めるには「スケジュール済」状態のデータ転送をキャンセルして、再スケジュールした方がよい場合もある。
図５はこのような場合の例である。図５は、実施形態３のＰＥ間データ転送の様子を表した図（その１）である。
「ＰＥ０⇒ＰＥ２」は「転送中」状態であり、「ＰＥ０⇒ＰＥ３」は「スケジュール済」状態である。ここに新たに「ＰＥ１⇒ＰＥ３」が「未スケジュール」状態として加わる場合である。
実施形態２のようなスケジューリングを行った場合、「ＰＥ１⇒ＰＥ３」のデータ転送は「スケジュール済」状態となる。このときＰＥ３の転送ワーカーでは転送リスト２１２には「ＰＥ０からの受信」と「ＰＥ１からの受信」との２つのエントリがある。
そのため「ＰＥ０⇒ＰＥ２」のデータ転送完了後、「ＰＥ０⇒ＰＥ３」のデータ転送を行い、更にそのあとに「ＰＥ１⇒ＰＥ３」のデータ転送を行うことになる。
しかしながら、実際には「ＰＥ０⇒ＰＥ３」のデータ転送は開始されていないため、このデータ転送をキャンセルした上で「ＰＥ１⇒ＰＥ３」のデータ転送を開始すれば、ＰＥ間ネットワーク１５のデータ転送レートをより高めることができる。
【００２６】
図６はこのときの様子を示した例である。図６は、実施形態３のＰＥ間データ転送の様子を表した図（その２）である。
「ＰＥ０⇒ＰＥ２」及び「ＰＥ１⇒ＰＥ３」のデータ転送は「転送中」状態にあり、「ＰＥ０⇒ＰＥ３」のデータ転送は「未スケジュール」状態にある。
こうした通信制御を実践するプロセッサ間通信制御方法の構成例を図７に示す。図７Ａは、図２Ａに対応する、転送ワーカーの構成の一例を示す図である。図７Ｂは、図２Ｂに対応するスケジューラの構成の一例を示す図である。
転送ワーカーの構成では、転送指示メッセージ受信部２１４が転送・キャンセル指示メッセージ受信部２１８に、転送指示部２１６が転送・キャンセル指示部２１９に変更されている。
スケジューラの構成では、転送スケジュール生成部２２２が更新転送状態生成部２２７に、転送指示メッセージ生成部２２６が転送・キャンセル指示メッセージ生成部２２９に、更新転送スケジュール２２３２が更新転送状態２２３３に変更されている。更に、スケジューラの構成では、更新転送状態生成部２２７と転送・キャンセル指示メッセージ生成部２２９との間に転送状態比較部２２８が新たに設けられている。
なお、このように変更しても、上述した実施形態で示した動作を行うことは可能である。
【００２７】
転送ワーカーでは、転送・キャンセル指示メッセージ受信部２１８は、転送指示メッセージ受信部２１４の機能を含み、転送・キャンセル指示部２１９は、転送指示部２１６の機能を含んでいる。
またスケジューラでは、更新転送状態生成部２２７は、実施形態２の条件に従って、更新転送状態２２３３を生成する。更新転送状態２２３３とは、転送指示を出した後の現在転送状態２２３１の状態そのものである。
転送状態比較部２２８では更新転送状態２２３３と現在転送状態２２３１との差分を抽出するが、これが更新転送スケジュール２２３２に相当する。
転送・キャンセル指示メッセージ生成部２２９では、この更新転送スケジュール２２３２に相当する情報を転送状態比較部２２８から受け、実施形態２と同様の動作を行う。
【００２８】
図５の状態から図６の状態への遷移を考える。
図５は現在の現在転送状態２２３１の状態である。図６は目標とする現在転送状態２２３１の状態である。更新転送状態生成部２２７は、図５の状態の現在転送状態２２３１から、図６の状態の更新転送状態２２３３を生成する。
このためには、更新転送状態生成部２２７は、「未スケジュール」状態のデータ転送だけではなく、「スケジュール済」状態のデータ転送も合わせたデータ転送のうち、どれを「転送中」にし、どれを「スケジュール済」状態にするのかを決定すればよい。
この決定は、更新転送状態生成部２２７は、実施形態２に準じて行えばよい。一例として図８に示す。図８は、更新転送状態生成部２２７における更新転送状態２２３３の決定の処理の一例を示すフローチャートである。
Ｓ８１：更新転送状態生成部２２７は、現在転送状態２２３１に含まれる「スケジュール済」状態のデータ転送を全て「未スケジュール」状態としたものを候補とする。
【００２９】
Ｓ８２：更新転送状態生成部２２７は、Ｓ８１の結果である候補について「スケジュール済」状態、或いは「未スケジュール」状態のデータ転送を個々に「転送中」状態に変化させた全ての組み合わせ候補を選択する。更新転送状態生成部２２７は、選択した全ての組み合わせ候補のうち、「転送中」状態のデータ転送が互いに衝突を起こしているものを、候補から外す。
例えば、Ｓ８１の結果である候補に「スケジュール済」状態、或いは「未スケジュール」状態のデータ転送が３つある場合、最大８（＝２の３乗）通りの組み合わせ候補がある。これらのうち、更新転送状態生成部２２７は、「転送中」状態のデータ転送が衝突を起こしている、即ち２つ以上の、「転送中」状態のデータ転送のエンドポイントとなっているＰＥがある場合は、候補から外す。
Ｓ８３：更新転送状態生成部２２７は、Ｓ８２で選択された全ての候補について、最も「転送中」状態のデータ転送が多いものを選択する。
更新転送状態生成部２２７は、残った候補のうちから、最も「転送中」状態のデータ転送が多いものを選択する。もし複数の候補が残った場合、更新転送状態生成部２２７は、全てを候補とする。ここまでで「転送中」状態のスケジューリング候補が決定する。
【００３０】
Ｓ８４：更新転送状態生成部２２７は、Ｓ８３で選択された全ての候補について、「未スケジュール」状態のデータ転送を個々に「スケジュール済」状態に変化させた全ての組み合わせ候補を選択する。更新転送状態生成部２２７は、選択した全ての組み合わせ候補のうち、少なくとも１つの「スケジュール済」状態のデータ転送について、両側のエンドポイントの何れもが他の「転送中」状態或いは「スケジュール済」状態のデータ転送のエンドポイントになっているものを候補から外す。
更新転送状態生成部２２７は、「転送中」状態のデータ転送が終わり次第、即座にデータ転送を始める「スケジュール済」状態のデータ転送をスケジューリングする。「スケジュール済」状態のデータ転送は、データ転送のエンドポイントの一方が他の何れのデータ転送のエンドポイントにもなっておらず、もう一方は他の「転送中」状態或いは「スケジュール済」状態のデータ転送のエンドポイントになっているものである。
【００３１】
Ｓ８５：更新転送状態生成部２２７は、Ｓ８４で選択された候補と現在転送状態２２３１とを比較し、現在転送状態２２３１では「スケジュール済」状態であるが、候補では「未スケジュール」状態となっているデータ転送の数が最も少ないものを選択する。もし複数の候補が得られた場合、更新転送状態生成部２２７は、全ての候補を選択する。
このあと説明するが「スケジュール済」状態のデータ転送を「未スケジュール」状態とする（データ転送を「キャンセル」する）には、幾つかのやりとりをスケジューラと転送ワーカーとの間で行う必要がある。また「スケジュール済」状態のデータ転送が開始され「転送中」となってしまうこともある。
こうした状況では再度スケジューリングの機会が訪れた場合、最適なスケジューリングができない可能性がある。そのため更新転送状態生成部２２７は、キャンセルするデータ転送の数がより少ないものを候補として選択する。
【００３２】
Ｓ８６：更新転送状態生成部２２７は、Ｓ８５で選択された候補のうち、「スケジュール済」状態のデータ転送が最も多いもの選択する。もし複数の候補が得られた場合、更新転送状態生成部２２７は、何れかの候補を選択する。
「スケジュール済」状態のデータ転送は、先行する「転送中」状態のデータ転送の完了に伴い、即座に開始されるため、データ転送開始にかかるタイムラグを減らすことができる。そのため、更新転送状態生成部２２７は、タイムラグをより減らすことができるよう、「スケジュール済」状態のデータ転送数が最も多いものを選択する。
Ｓ８７：更新転送状態生成部２２７は、Ｓ８６で選択された候補を更新転送状態２２３３とする。
以上の手順で選択された候補が更新転送状態２２３３となる。
【００３３】
以上の手順で更新転送状態生成部２２７は、図６で示されるような更新転送状態２２３３を生成する。
次に転送状態比較部２２８は、現在転送状態２２３１（図５）と更新転送状態２２３３（図６）とを比較し、差分を得る。図９にその結果を示す。図９は、転送状態の差分の一例を示す図である。
転送状態比較部２２８は、この結果を基に現在転送状態２２３１を更新する。
１番の差分に関しては、単に「スケジュール済」を「未スケジュール」とするわけにはいかない。「スケジュール済」状態のデータ転送に関しては、先行する「転送中」状態のデータ転送の完了に伴い、自動的にデータ転送が開始されてしまっている可能性がある。その場合は「転送中」としなければならない。
またスケジューラにおいては、前記データ転送が「転送中」であるにも関わらず「未スケジュール」状態となっている。そのため、前記データ転送が再スケジュールされてしまう可能性もある。
そこで転送状態が確定するまでは再スケジュールされないようにしなければならない。そのためには前記データ転送を「未確定」としてマークし、再スケジュール対象から外してもよいが、「転送中」状態としてしまってもよい。ここでは「転送中」状態にすることにする。
【００３４】
２番の差分に関しては、「ＰＥ１⇒ＰＥ３」のデータ転送を「未スケジュール」状態から「転送中」状態にすればよい。
即ち、転送状態比較部２２８は、以下のような状態の変更を現在転送状態２２３１に対して行う。
・「ＰＥ０⇒ＰＥ３」のデータ転送状態を「転送中」とする。
・「ＰＥ１⇒ＰＥ３」のデータ転送状態を「転送中」とする。
【００３５】
続いて転送・キャンセル指示メッセージ生成部２２９は、図９の差分を基に、以下のようにしてデータ転送に関する指示メッセージを生成する。
１番の差分に関しては、転送・キャンセル指示メッセージ生成部２２９は、「ＰＥ０⇒ＰＥ３」を「スケジュール済」状態を「未スケジュール」状態にする「キャンセル」指示メッセージ生成する。但し、転送・キャンセル指示メッセージ生成部２２９は、このメッセージをＰＥ３にのみ送信する（キャンセル指示発行）。
データ転送の開始はエンドポイントのＰＥ間の合意の上で行われるので、一方がキャンセルされた場合、データ転送は始まらない。またＰＥ３は受信待機状態であり、ＰＥ０からのデータ転送開始を待っている状態である。そこでスケジューラは、ＰＥ３に対してのみキャンセル指示を出し、キャンセルが確認できた時点でＰＥ０にもキャンセル指示を出すようにする。
【００３６】
２番のデータ転送に関しては、転送・キャンセル指示メッセージ生成部２２９は、実施形態２と同様の動作で、データ転送開始の指示メッセージを生成する。
以上により、転送・キャンセル指示メッセージ生成部２２９は、以下のような指示メッセージを生成し、順番にＰＥＩＦ１４を通じて各ＰＥに送信する。
１）ＰＥ１に対して「ＰＥ１⇒ＰＥ３」の転送指示メッセージ（送信指示メッセージ）
２）ＰＥ３に対して「ＰＥ０⇒ＰＥ３」のキャンセル指示メッセージ
３）ＰＥ３に対して「ＰＥ１⇒ＰＥ３」の転送指示メッセージ（受信指示メッセージ）
なお、受信ＰＥは上記指示メッセージの上から順番に処理を行う。より具体的にはＰＥ３はキャンセル指示メッセージの処理を行った上で、転送指示メッセージの処理を行う。
【００３７】
ＰＥ１が行う、１）の転送指示メッセージの処理に関しては実施形態２と同様であるので省略する。
ＰＥ３は、まず２）のキャンセル指示メッセージの処理を行う。
ＰＥＩＦ１４を経由して転送・キャンセル指示メッセージ受信部２１８は、キャンセル指示メッセージを受信する。
続いて転送リスト管理部２１１は、転送・キャンセル指示部２１９に対して「ＰＥ１⇒ＰＥ３」のデータ転送をキャンセルする旨の指示を出す。
キャンセル指示部２１９は、ＰＥＩＦ１４に対してキャンセル指示を出し、前記データ転送がキャンセルできたか否かが指示完了通知受信部２１７に伝えられる。
キャンセルできたか否かの結果は、指示完了通知受信部２１７から転送リスト管理部２１１に戻される。
キャンセルできた場合は、転送リスト管理部２１１は、転送リスト２１２から「ＰＥ０からの受信」エントリを削除する。そして転送リスト管理部２１１は、完了通知メッセージ生成部２１５に対して、キャンセルできた旨を伝える。
完了通知メッセージ生成部２１５は、「ＰＥ０⇒ＰＥ３」のキャンセルができた旨のキャンセル受諾メッセージ（キャンセル受諾通知）を生成し、ＰＥＩＦ１４を通じてスケジューラに送信する。
【００３８】
先行するデータ転送が完了し、「ＰＥ０⇒ＰＥ３」のデータ転送が既に開始してしまった場合は、キャンセルができない。
キャンセルできない旨の通知を指示完了通知受信部２１７から伝えられた転送リスト管理部２１１は、完了通知メッセージ生成部２１５に対して、キャンセルできなかった旨を伝える。
完了通知メッセージ生成部２１５は、「ＰＥ０⇒ＰＥ３」のキャンセルができなかった旨のキャンセル拒絶メッセージ（キャンセル拒絶通知）を生成し、ＰＥＩＦ１４を通じてスケジューラに送信する。
メッセージをキャンセルできた場合、スケジューラにおいて、ＰＥ３からキャンセル受諾メッセージをＰＥＩＦ１４経由で完了通知メッセージ受信部２２５が受信する。
完了通知メッセージ受信部２２５は、「ＰＥ０⇒ＰＥ３」のキャンセルが受諾された旨を更新転送状態生成部２２７に伝える。
更新転送状態生成部２２７は、現在転送状態２２３１の「ＰＥ０⇒ＰＥ３」のデータ転送を「転送中」から「未スケジュール」に変更した更新転送状態２２３３を生成し、転送状態比較部２２８にキャンセルできた旨を伝える。
【００３９】
転送状態比較部２２８は、現在転送状態２２３１と更新転送状態２２３３との差分を取り、その差が「ＰＥ０⇒ＰＥ３」の状態変化（「転送中」→「未スケジュール」）のみだとわかると、「ＰＥ０⇒ＰＥ３」のキャンセルが受諾されたと判断する。そして、転送状態比較部２２８は、更新転送状態２２３３で現在転送状態２２３１を更新した後、ＰＥ０に対して「ＰＥ０⇒ＰＥ３」のキャンセル指示メッセージを生成するよう、転送・キャンセル指示メッセージ生成部２２９に伝える。
転送・キャンセル指示メッセージ生成部２２９は、キャンセル指示メッセージを生成し、ＰＥＩＦ１４を通じてＰＥ０に送信する。
キャンセル指示メッセージを受信したＰＥ０は、前述のＰＥ３のキャンセル指示メッセージの処理と同様に処理する。この場合、ＰＥ３へのデータ転送は起こらないので、キャンセルは必ず受諾され、キャンセル受諾メッセージがスケジューラ向けて送信される。
スケジューラは、ＰＥ０からのキャンセル受諾メッセージを受信する。前述のキャンセル受諾メッセージを受信したときの処理と同様に処理が進められ、更新転送状態生成部２２７は、更新転送状態２２３３を生成する。
ここで転送状態比較部２２８は、現在転送状態２２３１と更新転送状態２２３３との差分を生成するが、差分がないため、処理はここで終了する。
【００４０】
もしメッセージがキャンセルできなかった場合、スケジューラにおいて、ＰＥ３からキャンセル拒絶メッセージをＰＥＩＦ１４経由で完了通知メッセージ受信部２２５が受信する。
キャンセル拒絶メッセージを受信したということは、既に「ＰＥ０⇒ＰＥ３」のデータ転送は始まっているので、「ＰＥ１⇒ＰＥ３」のデータ転送を「スケジュール待ち」に変更を行う。
更新転送状態生成部２２７は、現在転送状態２２３１の「ＰＥ１⇒ＰＥ３」のデータ転送を「転送中」状態から「スケジュール済」状態に変更した更新転送状態２２３３を生成し、転送状態比較部２２８に伝える。
転送状態比較部２２８は、現在転送状態２２３１と更新転送状態２２３３との差分を取り、その差が「ＰＥ１⇒ＰＥ３」の状態変化（「転送中」→「スケジュール済」）のみだとわかると、「ＰＥ０⇒ＰＥ３」のキャンセルが拒絶されたと判断する。そして、転送状態比較部２２８は、更新転送状態２２３３で現在転送状態２２３１を更新し、処理を終了する。
キャンセル指示メッセージの処理は以上である。前述の３）のＰＥ３に対する「ＰＥ１⇒ＰＥ３」の転送指示メッセージ（受信指示メッセージ）の処理は、実施形態２で示した通りであるので省略する。
以上の処理により、「ＰＥ０⇒ＰＥ３」がキャンセルできた場合は、目標である図６のように、キャンセルできなかった場合は図１０のようになる。
【００４１】
図１０は、実施形態３のＰＥ間データ転送の様子を表した図（その３）である。図１０において、「ＰＥ０⇒ＰＥ３」は「転送中」状態、「ＰＥ１⇒ＰＥ３」が「スケジュール済」である。「ＰＥ０⇒ＰＥ２」がなくなっているが、これは「ＰＥ０⇒ＰＥ３」がデータ転送を開始する直前にデータ転送が完了したためである。
【００４２】
なお、上述した各実施形態ではマルチプロセッサシステムを例にとって説明した。しかしながら、プロセッサ内に複数のコアがあるマルチコアプロセッサ内の通信や、コンピュータ同士をスイッチネットワークで接続したクラウドコンピューティングにおける通信においても同様に適用可能である。
また、プロセッサ間通信制御方式が実践されるマルチプロセッサシステムにおいて行われる処理は、各プロセッサが異なる処理を行うタスク並列処理、幾つかのプロセッサで同等の処理を異なるデータに対して行うデータ並列処理、等の処理の内容には影響されない。
また、図１では６つのＰＥの例を示したが、プロセッサの数を限定するものではない。
【００４３】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【００４４】
以上、上述した各実施形態によれば、ＰＥ間のネットワークのデータ転送レートをより高めるような制御を行うことができる。
【００４５】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００４６】
１１０〜１１５  ＰＥ、１２０〜１２５  ＰＵ、１３０〜１３５  ＬＭ、１４０〜１４５  ＲＥＩＦ
【図１】
0005932373.tif 000002
【図２Ａ】
0005932373.tif 000003
【図２Ｂ】
0005932373.tif 000004
【図３】
0005932373.tif 000005
【図４】
0005932373.tif 000006
【図５】
0005932373.tif 000007
【図６】
0005932373.tif 000008
【図７Ａ】
0005932373.tif 000009
【図７Ｂ】
0005932373.tif 000010
【図８】
0005932373.tif 000011
【図９】
0005932373.tif 000012
【図１０】
0005932373.tif 000013