本発明は、マルチプロセッシングシステムにおけるオブジェクト間通信装置に係り、特に、非対称型のマルチプロセッシングシステムに用いて好適なオブジェクト間通信装置関する。
リーク電流及び消費電力の増大によるシングルコアプロセッサ単体での性能向上の限界を打破するため、マルチコアプロセッサやマルチプロセッサが用いられている。
組込みシステムでは、コストパフォーマンス向上及び低消費電力化のため、非対称型マルチプロセッシング(AMP)システムが用いられている。AMPシステムでは、システムに応じて、プロセッサコア毎に機能が定められ、それぞれのプロセッサコアで固有のプログラムが実行される。
この際、マルチコアプロセッサ内のプロセッサコア間は、マルチコア通信API(MCAPI(登録商標):Multicore Communications Application Program Interface)とOS(オペレーティングシステム)(OSを介さない場合もある)とミドルウェアとを介して通信が行われ、プロセッサ間は、それらを接続するPCIexpress(PCIe)のデバイスドライバとOSとを介して通信が行なわれている。
このため、プロセッサコア間のユーザノード(アプリケーション内のオブジェクト)間通信においては、ハードウェア構成に応じて異なる通信方式を選択しなければならず、プログラミング上煩雑である。
また、システム改良においてマルチプロセッシングシステムの構成が異なったものになると、ユーザノード間通信のソフトウェア構成もこれに応じて変更する必要が生ずる。
さらに、例えば第1のプロセッサコアが第2のプロセッサコアを介して第3のプロセッサコアに接続されている場合、ソフトウェア上、第1のプロセッサコアと第3のプロセッサコアとの間で直接、通信を行うことができない。
本発明の目的は、このような問題点に鑑み、マルチプロセッシングシステムにおいて通信方式や通信経路やなどのハードウェアを意識することなくオブジェクト間通信を行うことが可能なオブジェクト間通信装置を提供することにある。
本発明の第1態様は、複数のプロセッサコアのそれぞれに結合されたメモリ空間内のアプリケーション層のオブジェクトであるユーザノードを子ノードとする親ノードのオブジェクトを第1ノードとして、同じメモリ空間毎にミドルウェア層に配置され、これら第1ノードを子ノードとする親ノードのオブジェクトを第2ノードとして、いずれかの第1ノードのメモリ空間内のミドルウェア層に配置され、これらユーザノード、第1ノード及び第2ノードを含むツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするパケットルーティング手段が備えられた、マルチプロセッシングシステムにおけるオブジェクト間通信装置であって、該パケットルーティング手段は、該ヘッダの送信先アドレスが自ノードアドレスと一致すれば該パケットを自ノード宛パケットとして保存し、該ヘッダの送信先アドレスが自ノードの子ノード側を示していれば該パケットを子ノードへ転送し、その他の場合には該パケットを該自ノードの親ノードへ転送する。
本発明による、マルチプロセッシングシステムにおけるオブジェクト間通信装置の第2態様では、第1態様において、該第2ノードは、ルートノードである。
本発明による、マルチプロセッシングシステムにおけるオブジェクト間通信装置の第3態様では、第1態様において、該第2ノードは、プロセッサ毎に配置され、該ツリーはさらに、各第2ノードを子ノードとする親ノードのオブジェクトをルートノードとして備え、該ルートノードは、いずれかの第2ノードのメモリ空間内のミドルウェア層に配置されている。
本発明による、マルチプロセッシングシステムにおけるオブジェクト間通信装置の第4態様では、第1乃至3態様のいずれか1つにおいて、各ノードは、自ノードアドレスと、該自ノードの全ての子ノードのアドレスと、該自ノードが配置されたメモリ空間とは異なるメモリ空間内のノードである次ノードへのパケット転送については、該次ノードへのパケット送信方式と、該パケット送信方式で該次ノードへパケット転送するための属性とが登録されたルーティングテーブルを備え、各ルーティング手段は、該自ノードのルーティングテーブルを参照して該パケットをルーティングする。
本発明によるマルチプロセッシングシステムにおけるオブジェクト間通信装置の第5態様では、第2又は3態様において、該ルートノードは、該複数のプロセッサコアのそれぞれに結合されたメモリ空間内に配置され、該ルートノードに結合された各ノードのルーティング手段は、該パケットを親ノードへ転送する場合、自ノードと同じメモリ空間内の該ルートノードへ転送する。
本発明によるマルチプロセッシングシステムにおけるオブジェクト間通信装置の第6態様では、第1乃至5態様のいずれか1つにおいて、該ルーティング手段は、自ノードと同じメモリ空間内のノードへ該パケットを転送する場合、該パケットの参照のみ該ノードへ転送する。
上記第1態様の構成によれば、マルチプロセッシングシステム全体で通信オブジェクトノードのツリーを構成してユーザノード以外はミドルウェア層に配置し、該ツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするので、様々な構成のマルチプロセッシングシステムにおいて、比較的簡単な構成で、通信方式や通信経路やなどのハードウェアを意識することなくユーザノード間通信を行うことができるという効果を奏する。
また、各ノードのパケットルーティング手段が、該ヘッダの送信先アドレスが自ノードアドレスと一致すれば該パケットを自ノード宛パケットとして保存し、該ヘッダの送信先アドレスが自ノードの子ノード側を示していれば該パケットを子ノードへ転送し、その他の場合には該パケットを該自ノードの親ノードへ転送するので、ルーティングを統一でき、様々な態様のユーザノード間通信に適用できるという効果を奏する。
上記第2態様の構成によれば、第2ノードがルートノードであるので、ツリー構造が簡単になるという効果を奏する。
上記第3態様の構成によれば、各第2ノードを子ノードとする親ノードのオブジェクトをルートノードとして備えているので、ルートノードでのパケット混雑を抑制することができるという効果を奏する。
上記第5態様の構成によれば、ルートノードが、複数のプロセッサコアのそれぞれに結合されたメモリ空間内に配置され、パケットを親ノードへ転送する場合、自ノードと同じメモリ空間内のルートノードへ転送するので、ルートノードでの処理が複数のプロセッサコアのそれぞれに分散されるとともに、パケット転送を効率よく行うことができるという効果を奏する。
上記第6態様の構成によれば、自ノードと同じメモリ空間内のノードへパケットを転送する場合、該パケットの参照のみ該ノードへ転送するので、処理を高速化できるという効果を奏する。
本発明の他の目的、特徴的な構成及び効果は、以下の説明を特許請求の範囲及び図面の記載と関係づけて読むことにより明らかになる。
本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置が適用される実施例1のマルチプロセッシングシステムを示す概略構成図である。
アプリケーション層からハードウェア層までの概略階層構造図である。
本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置の実施例1に係るユーザノード間通信オブジェクトであるノードのツリー図である。
ユーザノード間通信での送信対象パケットのフォーマット概略図である。
データのパケット化処理を示す概略フローチャートである。
リーフノード以外の任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。
(A)及び(B)はそれぞれ、図3のノードN10及びノードN00のルーティングテーブルを示す図である。
本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置の実施例2に係る通信オブジェクトノードツリー図である。
本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置の実施例3が適用されるマルチプロセッシングシステムを示す概略構成図である。
図9に対応した通信オブジェクトノードツリー図である。
本発明の実施例4の通信オブジェクトノードツリー図である。
リーフノード以外の任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。
(A)〜(C)はそれぞれ、図11のノードN110、N100及びN000のルーティングテーブル概略構成図である。
転送パケット記憶部の概略説明図である。
転送パケット記憶部の概略説明図である。
同じメモリ空間内に配置されたノードN10及びN00に関するパケット送受信の機能ブロック図である。
図1は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置が適用される実施例1のマルチプロセッシングシステムを示す概略図である。
このシステムでは、マルチコアプロセッサ01とシングルコアプロセッサ02との間が、PCIeで結合されている。マルチコアプロセッサ01は、プロセッサコア10とプロセッサコア20とを備え、それらの間が不図示の内部バスで結合されている。シングルコアプロセッサ02のプロセッサコア30は、マルチコアプロセッサ01の該内部バスと、PCIeで結合されている。
図2は、アプリケーション層からハードウェア層までの概略階層構造を示している。
OS層以下においては、従来と同様に、プロセッサコア10と20との間の通信は上述のMCAPIで行われ、プロセッサコア10とプロセッサコア30との間及びプロセッサコア20とプロセッサコア30との間の通信は、PCIeで行われる。
本実施例1では、後述のオブジェクト間通信装置を備えることにより、ユーザノード(ユーザアプリケーション内のオブジェクトであるノード)間通信において、MCAPIとPCIeの通信方式の選択をすることなく、すなわち通信相手のハードウェア上の位置を考慮することなく、統一的な通信を行えるようしている。
図8は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置の実施例2に係る通信オブジェクトノードツリーを示す。
図3において、リーフノードであるユーザノードN11及びN12はいずれも、プロセッサコア10に結合された(でアクセス可能な)メモリ空間内に配置されているアプリケーション層内のオブジェクトである。これらオブジェクトは、互いに異なるアプリケーションに属していても、同一アプリケーションに属していてもよい。この点は、以下においても同様である。
同様に、リーフノードであるユーザノードN21及びN22はそれぞれ、プロセッサコア20に結合されたメモリ空間内に配置されているアプリケーション層内のオブジェクトである。また、リーフノードであるユーザノードN31及びN32はそれぞれ、プロセッサコア30に結合されたメモリ空間内に配置されているアプリケーション層内のオブジェクトである。
これら6個のオブジェクト間の通信経路は、6X5/2=15通り有り、通信オブジェクト数が増えるとその通信経路数が増大する。また、メモリ空間が互いに異なるアプリケーション層内のオブジェクト間で直接通信を行おうとすると、その構成の一般化が容易でない。
そこで、図3に示すようなツリー構造のノード間通信を組み合わせることにより、任意のリーフノード間通信を行う。すなわち、エッジで結合された親子ノード間でバケットを順次転送することにより、アプリケーション層のユーザノード間で通信を行う。エッジで結合されたノード間は、互いに相手の存在を知っていて、これらノード間でデータを送信可能であることを示している。
ノードN10、N20及びN30はそれぞれ、図1のプロセッサコア10、20及び30に結合されたメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。また、ルートノードN00は、仮想ノードであり、プロセッサコア10、20及び30のいずれか1つ(好ましくはこれらのうち最もプロセッサ間通信量が多いと想定されるプロセッサコア)に結合されたメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。
同一メモリ空間内に配置されたアプリケーション層内オブジェクト間は、容易に直接通信を行うことができるが、将来のシステム変更により異なるメモリ空間内に配置されることも有り得るので、オブジェクトが同一メモリ空間内に配置されているか否かを問わず、統一的に図3のツリー構造を用いた通信を行うようにしてもよい。
リーフノード(転送元及び転送先ノード)は、その親ノードのみに接続されているので、転送先は必ず親ノードとなる。リーフノード以外以外のノード(中間ノード)では、ルーティングテーブルを参照して、自ノードアドレスと転送先アドレスとから、次に転送すべき、エッジを介し隣り合うノードの1つを決定する。この際、アドレス値からノードの親子関係やリーフノードであるか否か、ルートノードであるか否かを判定できるという条件を満たすように、ノードアドレスを決定すれば、ルーティングテーブル参照回数が低減するので、処理を高速化することができる。
図3中のノードNijのアドレスを[i,j]とすると、前記条件を満たすように、ijを定めている。すなわち、ノードNijは、i≠0、j≠0のとき、深さ2のリーフノードであり、その親ノードはj=0としたものであり、さらなる親ノードはi=0としたルートノードN00である。ルートノードには、親ノードがない。ルートノード以外は、親ノードは1つ(上に登るエッジは1つ)であるので、親ノードを選択することはない。
ノードアドレス[i,j]は、例えば、i、jをそれぞれ4ビットで表すと、8ビットであり、最大256個のノードを表すことができる。
次に、リーフノード間データ送信例を説明する。以下では、自ノードアドレスを[i,j]、転送先アドレスを[i2,j2]とする。
例えばノードN11からN12へデータを送信する場合、リーフノードN11には子ノードが存在しないので、ノードN11からj=0とした親ノードN10へデータを送信する。ノードN10は、その子ノードである転送先ノードN12と結合されているので、このデータをノードN12へ転送する。
次に、ノードN11からN32へデータを送信する場合、ノードN11には子ノードが存在しないので、ノードN11からj=0とした親ノードN10へデータを送信する。i≠i2であり、ノードN10の子ノードには転送先ノードN32が存在しないので、i=0とした親ノードであるルートノードN00へデータを転送する。ルートノードN00から、転送先ノードN32のj2を0にしたノードN30へ、データを転送する。次いでj=2とした子ノードN32へデータを転送する。
一般に、自ノードNijにおいて、送信先ノードノードNi2j2のパケットを以下の規則でルーティングする。
(1)i=i2、j=j2であれば自ノード宛へのデータとして受信する。
(2)自ノードがルートノード(i=0、j=0)のとき、ルーティングテーブル上に子ノードアドレスCA=[i2,0]が存在すれば、この子ノードへデータを転送する。自ノードが深さ1のノード(i≠0、j=0)のとき、ルーティングテーブル上に転送先の子ノードアドレスCA=[i2,j2]が存在すれば、この子ノードへデータを転送する。
(3)その他の場合には、親ノードが存在すれば、すなわち自ノードがルートノードでなければ、親ノードのアドレスPAへ、すなわち自ノードがリーフノード(i≠0、j≠0)であればPA=[i,0]へ、自ノードが深さ1のノード(i≠0、j=0)であれば、親ノードアドレスPA=[0,0]のルートノードへ、データを転送する。
1つの転送先へ複数のリーフノードからデータを並列して転送した場合、転送先においてそれらを区別する必要がある。そこで、送信対象データのヘッダには、送信先ノードアドレスのみならず、送信元ノードアドレスを含める。また、ハードウェア上又はソフトウェア上の理由による各ノードでの1回の送信可能最大データサイズのうちの最小値をDSmaxとすると、DSmaxを越えるサイズのデータを送信する場合、ヘッダを含めたデータサイズがDSmaxを超えないようにデータを分割して、それぞれにヘッダを付加するというパケット化処理を行う。この場合、パケット間のつながりを判定できるようにするため、IPプロトコルと同様のパケットシーケンス番号(次のパケットシーケンス番号=現在のパケットシーケンス番号+現在のパケットのペイロードのバイト数)をヘッダに付加する。
図4は、このシステムで使用されるパケットのフォーマットを示しており、ペイロードに、ヘッダとして送信先及び送信元のノードアドレスと、パッケトシーケンス番号とを付加したものを、パケットとする。
パケット化及びデパケット化は、アプリケーション層のリーフノードのみで行われる。
図5は、データのパケット化処理を示す概略フローチャートである。以下、括弧内は図中のステップ識別符号である。
(S0)DS=(転送対象データのデータサイズ)+(ヘッダのデータサイズ)がDS>DSmaxであれば、ステップS1へ進み、そうでなければステップS2へ進む。
(S1)分割後の各データがDS≦DSmaxとなるように、データを分割する。
(S2)分割され又はされていないデータのそれぞれに、図4に示すようなヘッダを付加して、パケット化する。
(S3)これらのパケットを、転送バッファに格納する。
図6は、任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。図3中の各ノード(オブジェクト)は、この処理のプログラムを備えている。
各ノードは、転送キューを備えており、この処理は、転送キューが、空の状態から要素が1個追加された状態になったときに発生するイベントに応答して、開始される。
この受信キューから先頭要素を取り出す毎に、ステップS10〜S18の処理を行う。
(S10)パケットヘッダから、転送先アドレスDA及び自ノードアドレスSAを取得する。
(S11)転送先アドレスDAが自ノードアドレスSAに等しければ(i=i2、j=j2であれば)、ステップS12へ進み、そうでなければステップS13へ進む。
(S12)自ノード宛受信バッファにこのパケットを格納し、ステップS19へ進む。
(S13)転送先アドレスDAの値から論理的に、転送先アドレスDAが自ノードアドレスSAの子孫ノードアドレス(i=0、0<i2、又は、i=i2、j=0、0<j2)であるか否かを判定する。肯定判定した場合にはステップS14へ進み、そうでなければステップS16へ進む。
(S14)ステップS13の子孫ノードを含む、自ノードの子ノードのアドレスCA(CA=[i2,0]又はCA=[i2,j2])が、自ノードのルーティングテーブル上に子ノードアドレスとして存在すれば、ステップS15へ進み、そうでなければステップS18へ進む。
(S15)ステップS14で存在すると判定した子ノードのアドレスCAへパケットを転送し、ステップS19へ進む。
(S16)親ノードが存在すれば、すなわち自ノードアドレスSAがルートノードでなければ、ステップS17へ進み、そうでなければステップS18へ進む。
(S17)親ノードのアドレスPA(i≠0、j≠0であればPA=[i,0]、i≠0、j=0であればPA=[0,0])へパケットを転送し、ステップS19へ進む。
(S18)OSに例外エラーの発生を通知し、このパケットを破棄する。アプリケーション側でこのエラーに対する処理をしていなければ、アプリケーションは停止し、この処理でエラーを無視していればステップS10へ戻る。
(S19)上記転送キューに先頭要素が存在すれば、ステップS10へ戻り、そうでなければ、図6の処理を終了する。
ステップS15又はステップS17においては、ルーティングテーブルを参照して、通信インターフェイス方式を選択し、それに応じて転送先アドレスを変換し、転送する。すなわち、この処理をミドルウェア層で行うことにより、アプリケーション層ではアドレス[i,j]のみ使用すればよい。
図7(A)及び(B)はそれぞれ、図3のノードN10及びN00のルーティングテーブルを示す。各テーブルにおいて、NULLは値が存在しないことを示す。また、子ノードインターフェイス(I/F)方式及び親ノードインターフェイス方式はそれぞれ、自ノードから子ノードへ及び自ノードから親ノードへのインターフェイス方式を示しており、値が0のとき、同一メモリ空間内でのパケット転送(パケット又はその参照の移動)、値が1のとき、同一プロセッサ内のプロセッサコア間のMCAPIによるパケット転送、値が2のとき、異なるプロセッサ間のPCIeによるパケット転送を示している。子ノードが複数ある場合にはそれぞれの子ノードインターフェイス方式を区切り記号/で区切って記述している。子ノード及び親ノードのインターフェイス属性は、上記方式での通信で必要な属性値であり、この値がNULLのときには既定の方法でパケットが転送されることを示している。また、親ノード/子ノードインターフェイス方式の値がNULLのとき、その親ノード/子ノードが存在しないことを示している。
図7(B)では、インターフェイス方式が1又は2のときそれぞれ、インターフェイス属性がX1又はY1と記載されている。これらX1及びY1は、参照値であって、それぞれで参照されるデータブロック(構造体)に属性が記述されている。
ルーティングテーブルは、例えば、プログラムがプロセッサに対し対話的に設定させて、XMLファイルに変換させることにより、作成される。
本実施例1によれば、マルチプロセッシングシステム全体で通信オブジェクトノードのツリーを構成して、アプリケーション層内のリーフノード以外はミドルウェア層に配置し、ツリー上のノードを辿ってパケット通信を行うので、様々な構成のマルチプロセッシングシステムにおいて、比較的簡単な構成で、通信方式や通信経路やなどのハードウェアを意識することなくユーザノード間通信を行うことができるという効果を奏する。
図8は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの実施例2に係る通信オブジェクトノードツリーを示す。
このツリーでは、図3の深さ2と3のノード間に、アプリケーション層のリーフノードとの間の通信手順を簡単化するためのインターフェイスノードを挿入している。一般に、ノードツリーの深さをnとすると、アドレスの桁数([]内の","で区切られた数字の個数)はnとなり、この場合、n=3である。実施例1と同様に、ノードNijkのアドレスは、[i,j,k]である。
深さ0及び1のノードルートノードN000、N100、N200及びN300はそれぞれ、図3のルートノードN00、N10、N20及びN30と、アドレスのみ異なる。
一般に、自ノードNijkにおいて、送信先ノードノードNi2j2k2のパケットを以下の規則に従ってルーティングする。
(1a)i=i2、j=j2、k=k2であれば、自ノード宛へのデータとして受信する。
(2a)自ノードがルートノード(i=0、j=0、j=0)のとき、ルーティングテーブル上に子ノードアドレスCA=[i2,0、0]が存在すれば、この子ノードへデータを転送する。自ノードが深さ1のノード(i≠0、j=0、j=0)のとき、ルーティングテーブル上に子ノードアドレスCA=[i2,j2、0]が存在すれば、この子ノードへデータを転送する。自ノードが深さ2のノード(i≠0、j≠0、j=0)のとき、ルーティングテーブル上に子ノードアドレスCA=[i2,j2、k2]が存在すれば、この子ノードへデータを転送する。
(3a)その他の場合には、親ノードが存在すれば、すなわち自ノードがルートノードでなければ、親ノードのアドレスPAへ、すなわち自ノードがリーフノード(i≠0、j≠0、k≠0)であれば親ノードアドレスPA=[i,j,0]へ、自ノードが深さ2のノード(i≠0、j≠0、k=0)であれば親ノードアドレスPA=[i,0,0]へ、自ノードが深さ1のノード(i≠0、j=0、k=0)であれば親ノードアドレスPA=[0,0,0]のルートノードへ、データを転送する。
図6のルーティング処理は、上記(1a)〜(1c)の規則を考慮すれば容易に理解できるので、その説明を省略する。
パケット化及びデパケット化は、上記インターフェイスノードで行われる。このインターフェイスノードも、図6のルーティング処理を行う。
他の点は、上記実施例1と同様である。
図9は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信装置の実施例3が適用されるマルチプロセッシングシステムを示す概略図である。
このシステムでは、4つのマルチコアプロセッサ100、200、300及び400を備えている。マルチコアプロセッサ100は、プロセッサコア110、120、130及び140の間が内部バスで結合され、マルチコアプロセッサ200は、プロセッサコア210、220、230及び240の間が内部バスで結合され、マルチコアプロセッサ300は、プロセッサコア310、320、330及び340の間が内部バスで結合され、マルチコアプロセッサ400は、プロセッサコア410、420、430及び440の間が内部バスで結合されている。マルチコアプロセッサ100、200、300及び400の間はPCIeで結合されている。
上記同様に、各プロセッサ内のプロセッサコア間では、MCAPIで通信が行われ、異なるプロセッサ間では、PCIeによる通信が行われる。
図10は、図9に対応した通信オブジェクトノードツリーを示す。
ノードNijkのアドレスは、[i,j,k]である。全ノードNijkのうち、ijkが図9中の要素の符号と一致するものは、その要素に対応したノードである。また、例えばノードN110とプロセッサコア110のように、ijkが図9中のプロセッサコアの符号と一致するノードは、実施例1と同様に、プロセッサコアijkに結合されたメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。
このツリーでは、深さ1のノードをプロセッサに対応した仮想ノードとして配置しており、このノードは、プロセッサ毎のサブツリーのルートノードとなっている。この深さ1のノードは、ルートノードN000でのエッジ数を低減して、ルートノードN000でパケットが混雑するのを避けるとともに、各プロセッサでルーティングを並列処理している。すなわち、この深さ1のノードは、この目的のためのインターフェイスノードである。
各仮想ノードは、その子ノードのいずれか1つと同じメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。例えば、ノードN000及びN100はノードN110と同じメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。
深さ3のリーフノードは、図3の場合と同様に、ユーザノードである。
他の点は、実施例1と同様である。
AMPでは、コストパフォーマンスを向上をさせると共に消費電力を低減するために、様々な構成のマルチプロセッシングシステムが用いられ、また、システムの改良の際にその構成も変化していく。しかし、以上の実施例1〜3から容易に理解できるように、本発明のマルチプロセッシングシステムにおけるオブジェクト間通信装置は、システムの構成によらず統一した方式で、ハードウェア構成やOSの種類によらずユーザノード間で通信を行うことができる。
図11は、本発明の実施例4の通信オブジェクトノードツリーを示す。
ハードウェア構成は、図9と同一である。このツリーでは、深さ2のノードにおいて、同一プロセッサ内の任意の2つのプロセッサコアに対応したノードの間をエッジで結合して、これらの間で直接通信可能にしている点が、図10のツリーと異なっている。
図12は、任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。図11中の各ノードは、それぞれ独立にこの処理のプログラムを備えている。
各ノードは、転送キューを備えており、この処理は、転送キューが、空の状態から要素が1個追加された状態になったときに発生するイベントに応答して、開始される。
この受信キューから先頭要素を取り出す毎に、ステップS10〜S18の処理を行う。
図12の処理が図6のそれと異なる点は、兄弟ノードへのパケット転送に対応して、ステップS11とステップS13との間にステップS20を追加し、さらに、これに関係したステップS21及びステップS22を追加している点である。次に、この差分を説明する。
ステップS11で否定判定されるとステップS20へ進む。
(S20)転送先アドレスDAの値から論理的に、転送先アドレスDAが自ノードアドレスSAと兄弟ノードの子孫ノード(転送先ノードの祖先ノードが自ノードアドレスSAと兄弟ノード)のアドレスBAと判定すれば、ステップS21へ進み、そうでなければステップS13へ進む。より具体的には、転送先アドレスDAが自ノードアドレスSAと兄弟ノードの子孫ノードであるか否かの判定は、次のようにして行う。すなわち、自ノードが深さ1のノード(i≠0、j=0、j=0)のとき、ルーティングテーブル上に兄弟ノードアドレスBA=[i2,0,0]が存在すれば、この兄弟ノードへデータを転送する。自ノードが深さ2のノード(i≠0、j≠0、j=0)のとき、ルーティングテーブル上に兄弟ノードアドレスBA=[i2,j2、0]が存在すれば、この兄弟ノードへデータを転送する。
(S21)自ノードのルーティングテーブルに兄弟ノードアドレスBAが含まれていればステップS22へ進み、そうでなければステップS13へ進む。
(S22)自ノードのルーティングテーブルを参照して転送方式を決定し、転送先アドレスをその方式のアドレスに変換して、兄弟ノードアドレスBAへパケットを転送し、ステップS19へ進む。
図13(A)〜(C)はそれぞれ、図11のノードN110、ノードN100及びルートノードN000のルーティングテーブルを示す。このテーブルの構成は、兄弟ノードについて ノードに結合された兄弟ノードのアドレス、そのノードへの通信のインターフェイス方式及びインターフェイス属性を、図7のルーティングテーブルに追加したものとなっている。
実施例5では、図10のツリーにおいて、仮想ノードの複数の子ノードのそれぞれが配置されたメモリ空間内に、該仮想ノードを配置することにより、同じメモリ空間内で任意のノードからルートノードまで登れるようにしている。すなわち、仮想ノードN000を、各プロセッサコアに結合されたメモリ空間のそれぞれに配置し、深さ1のそれぞれの仮想ノードを、該ノードのそれぞれの子ノードが配置されたメモリ空間と同じメモリ空間のそれぞれに配置することにより、任意のノードからルートノードまで登る場合に、同じメモリ空間内にそれらのノードが存在(転送バッファも、このノードと同じメモリ空間内に存在)するようにしている。各仮想ノードは、アドレスが互いに同一であっても、その位置によって転送方式が異なるので、独自のルーティングテーブルを持っている。
ルートノードからの下りは、その子ノード(仮想ノード)へパケットを転送するときに、同一アドレスを持つ複数の子ノードのうち、送信先ノードが配置されているメモリ空間内の子ノードへパケットを転送し(このようになるようにルーティングテーブルを定めている。)、その後は、このメモリ空間内のみのノードを辿って、送信先ノードまでパケットを転送しながら下っていく。
これにより、同じメモリ空間内でのパケット転送処理の割合が大きくなるので、転送処理を高速化することができる。
本実施例5によれば、図11のように同一プロセッサ内のプロセッサコア間を兄弟ノードとして結合することなく、より簡単で統一的な構成により、図11とほぼ同様に、パケットを転送することが可能となる。
なお、上記実施例1、2及び4においても、本実施例と同様に構成することができる。
同一メモリ空間内でのパケット転送は、共有メモリ内にパケットを配置することにより、パケットを実際に転送せずに、パケットの参照のみを、ノードの転送キューから次ノードの受信キューへ移動させればよい。
例えば図14に示すように、この共有メモリ内にアプリケーション11用の送信バッファ11Sを割り当てる。そして、同一メモリ空間内の各ノード、例えば、図3のノードN11に、図14の転送キューN11−14を備え、図3のルートノードN10に、図14の転送キューN10−14を備える。
各キュー内の要素は、送信バッファ11S内の1つのパケットの先頭アドレスとバイト数とを、参照として保持している。転送キューN11−14の先頭要素EAを取り出して、これに対応した送信バッファ11S内のパケットAをノードN10へ転送する場合、実際にはパケットを転送せずに、この要素EAを、図6のステップS17において、図15に示すように、転送キューN10−14の末尾に加える(移動させる)。これにより、ノードN11からノードN10へパケットが論理的に転送されたことになる。
図16は、同じメモリ空間10M内に配置されたノードN11、N10及びN00に関するパケット送受信の機能ブロック図である。メモリ空間10Mは、図1のプロセッサコア10に結合されている。図16では、各ノードの互いに対応するノードを同一符号で示しており、以下、ノードNijの要素pqをNij−pqと表記する。
ノードN11は、アプリケーション11内のオブジェクトであり、そのパケット化部13は、送信バッファ11Sに格納されたデータを、図5のフローチャートに従ってパケット化し、そのパケットの参照EAを、上記のように転送キューN11−14の末尾に追加する。
転送キューN11−14が空の状態から1つの要素が追加された状態になると、そのイベントの発生に応答して、パケット送受信制御部N11−15は、図6の処理を介しする。上記ステップS17において、パケット送受信制御部N11−15は転送キューN11−14の先頭要素を取り出し、これを転送キューN10−14の末尾に追加させる。同様に、転送キューN10−14が空の状態から1つの要素が追加された状態になると、そのイベントの発生に応答して、パケット送受信制御部N10−15は、図6の処理を介しし、転送キューN10−14の先頭要素を取り出し、上記ステップS17において、これを転送キューN00−14の末尾に追加させる。
転送キューN00−14が空の状態から1つの要素が追加された状態になると、そのイベントの発生に応答して、パケット送受信制御部N00−15は、図6の処理を介しし、転送キューN00−14の先頭要素を取り出し、ステップS15において、ルーティングテーブル16を参照し、転送インターフェイス方式の値が1又は2であればそれに対応するインターフェイス方式の属性値に基づいてアドレスを変換し、通信部19を介し他のプロセッサコアへパケットを転送させる。この通信部19は、図2のOS層、ドライバ層及びハードウェア層で構成されている。
一方、図3のノードN20又はN30からノードN00宛のパケットを、ドライバを介しOSが受信して受信バッファ11R0に格納し、その旨をパケット送受信制御部N00−15に通知する。パケット送受信制御部N00−15はこれに応答して、図6の処理を介しし、ステップS15において、前記格納したパケットの参照を転送キューN10−14の末尾に追加する。同様に、パケット送受信制御部N10−15は、上記イベントの発生に応答して、図6の処理を介しし、転送キューN10−14の先頭要素を取り出し、ステップS15で、これを転送キューN11−14の末尾に追加させる。パケット送受信制御部N11−15は、上記イベントの発生に応答して、図6の処理を介しし、転送キューN11−14の先頭要素を取り出し、図6のステップS12で、パケット再配列・デパケット化部18を介し、そのパケットを、受信バッファ11Rに格納させる。この際、パケット再配列・デパケット化部18は、パケットの参照で指定された受信バッファ11R0内の複数の受信パケットを読み出し、送信元アドレス毎に分け、さらにパケットをパケットシーケンス番号順に再配列し、各パケットのヘッダを削除してペイロード間を連結させ、その一連のデータを、受信バッファ11Rに格納させる。
他の点は上記実施例1と同一である。
以上において、本発明の好適な実施例を説明したが、本発明には他にも種々の変形例が含まれ、上記実施例で述べた各構成要素の機能を実現する他の構成を用いたもの、当業者であればこれらの構成又は機能から想到するであろう他の構成も、本発明に含まれる。
例えば、図14の送信バッファ11Sは、複数のプロセッサコア間での共有メモリであってもよく、この場合、これら複数のプロセッサコアのそれぞれで動作するユーザノードの間の通信についても、パケットの参照のみを転送すればよい。
パケット化及びデパケット化は、アプリケーション層のリーフノードと直接結合されるミドルウェア層のノードのみで行うようにしてもよい。すなわち、送信側リーフノードで送信先及び送信元のアドレス指定して、高さ1のノードにデータを送信し、受信側リーフノードで、ヘッダが削除されペイロードが結合されたデータを受信するようにしてもよい。この場合、ユーザノードではパケットを意識する必要がない。
また、図6において、ステップS11及びS12はリーフノードのみに備え、ステップS16及びS17はルートノードに備えない構成であってもよい。この点は、図12についても同様であり、図12ではさらに、ステップS20、S21及びS22を、兄弟ノード間がエッジで接続されている深さのノードのみに備えた構成であってもよい。
上記各実施例ではマルチコアプロセッサ内のプロセッサコア間通信としてMCAPIを使用する場合を説明したが、複数のプロセッサコアから参照できるキャッシュメモリ上の領域を介してプロセッサコア間通信を行う構成であっても、複数の通信方式の1つを選択的に使用する構成であってもよい。
また、上記実施例5は、上記実施例2〜4にも同様に適用してもよい。
さらに、本発明は非対称型のみならず対称型マルチプロセッシングシステムに適用してもよい。
01、100、200、300、400 マルチコアプロセッサ
02 シングルコアプロセッサ
10、20、30、110、120、130、140、210、220、230、240、310、320、330、340、410、420、430、440 プロセッサコア
11、12 アプリケーション
11R 受信バッファ
11S 送信バッファ
13 パケット化部
14、17 転送キュー
15 パケット送受信制御部
16 ルーティングテーブル
18 パケット再配列・デパケット化部
19 通信部
N00、N000 ルートノード
N10〜N12、N20〜N22、N30〜N32、N100、N110〜N112、N200、N210、N211、N220、N221、N300、N310、N311、N312、N400、N410、N411、N420、N421、N430、N431、N440、N441、Nij、Ni1j1、Ni2j2、Nijk、Ni1j1k1、Ni2j2k2 ノード
DA 転送先アドレス
SA 自ノードアドレス
CA 子ノードアドレス
PA 親ノードアドレス
BA 兄弟ノードアドレス