(57)【要約】【課題】マルチプロセッシングシステムにおいて、通信先ノードの配置が異なっても、ソフトウェア構成を変更することなくオブジェクト間通信を行えるようにする。【解決手段】名前解決テーブルを持つそれぞれのノードで、名前解決していなければ（Ｓ１１）名前解決を試み、解決可能なら解決し（Ｓ１２）、解決できなければ（Ｓ１３）親ノードへパケットを転送する（Ｓ１４、Ｓ１Ｂ）。名前解決テーブルのツリー上配置については、（Ａ）各ユーザノードのみにテーブルを持たせる、（Ｂ）ルートノードのみにテーブルを持たせる、（Ｃ）ユーザノード以外の各ノードに、そのノードと子孫ノードとに関するテーブルを持たせる、のいずれであってもよい。【選択図】図７
2014048707.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアのそれぞれに結合されたメモリ空間内のアプリケーション層のオブジェクトであるユーザノードを子ノードとする親ノードのオブジェクトを第１ノードとして、同じメモリ空間毎にミドルウェア層に配置され、これら第１ノードを子ノードとする親ノードのオブジェクトを第２ノードとして、いずれかの第１ノードのメモリ空間内のミドルウェア層に配置され、これらユーザノード、第１ノード及び第２ノードを含むツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするパケットルーティング手段が備えられた、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムであって、
該ツリーの各ユーザノードの該パケットルーティング手段は、各ユーザノードの名前とそのアドレスとを対応付けた名前解決テーブルを備え、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、存在しなければオペレーティングシステムに例外エラーを発生させる、
ことを特徴とする、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項２】
複数のプロセッサコアのそれぞれに結合されたメモリ空間内のアプリケーション層のオブジェクトであるユーザノードを子ノードとする親ノードのオブジェクトを第１ノードとして、同じメモリ空間毎にミドルウェア層に配置され、これら第１ノードを子ノードとする親ノードのオブジェクトを第２ノードとして、いずれかの第１ノードのメモリ空間内のミドルウェア層に配置され、これらユーザノード、第１ノード及び第２ノードを含むツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするパケットルーティング手段が備えられた、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムであって、
該ツリーのルートノード以外の該パケットルーティング手段は、名前解決テーブルを備えず、該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該パケットを自ノードの親ノードに転送し、
該ルートノードの該パケットルーティング手段は、各ユーザノードの名前とアドレスとを対応付けた名前解決テーブルを備え、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、存在しなければオペレーティングシステムに例外エラーを発生させる、
ことを特徴とする、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項３】
複数のプロセッサコアのそれぞれに結合されたメモリ空間内のアプリケーション層のオブジェクトであるユーザノードを子ノードとする親ノードのオブジェクトを第１ノードとして、同じメモリ空間毎にミドルウェア層に配置され、これら第１ノードを子ノードとする親ノードのオブジェクトを第２ノードとして、いずれかの第１ノードのメモリ空間内のミドルウェア層に配置され、これらユーザノード、第１ノード及び第２ノードを含むツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするパケットルーティング手段が備えられた、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムであって、
該ツリーのユーザノード以外のノードの該パケットルーティング手段は、自ノードとその全ての子孫ノードの名前とアドレスとを対応付けた名前解決テーブルを備え、
各ユーザノードの該パケットルーティング手段は、該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該パケットを自ノードの親ノードに転送し、
該ツリーのユーザノード以外の該パケットルーティング手段は、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、該名前が該名前解決テーブル上に存在せず且つ自ノードの親ノードが存在すれば該パケットを該親ノードに転送し、該名前が該名前解決テーブル上に存在せず且つ該親ノードが存在しなければオペレーティングシステムに例外エラーを発生させる、
ことを特徴とする、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項４】
複数のプロセッサコアのそれぞれに結合されたメモリ空間内のアプリケーション層のオブジェクトであるユーザノードを子ノードとする親ノードのオブジェクトを第１ノードとして、同じメモリ空間毎にミドルウェア層に配置され、これら第１ノードを子ノードとする親ノードのオブジェクトを第２ノードとして、いずれかの第１ノードのメモリ空間内のミドルウェア層に配置され、これらユーザノード、第１ノード及び第２ノードを含むツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするパケットルーティング手段が備えられた、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムであって、
該ツリーの各ノードの該パケットルーティング手段は、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、該名前が該名前解決テーブル上に存在せず又は自ノードに該名前解決テーブルが存在しないときには、
該自ノードの親ノードが存在すれば該パケットを該親ノードに転送し、該親ノードが存在しなければオペレーティングシステムに例外エラーを発生させる、
ことを特徴とする、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項５】
該ツリーの各ノードの該パケットルーティング手段は、該ルーティング処理において、
該ヘッダの送信先アドレスが自ノードアドレスと一致すれば該パケットを自ノード宛パケットとして保存し、該ヘッダの送信先アドレスが自ノードの子ノード側を示していれば該パケットを子ノードへ転送し、その他の場合には該パケットを該自ノードの親ノードへ転送する、
ことを特徴とする、請求項１乃至４のいずれか１つに記載の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項６】
該第２ノードは、ルートノードである、
ことを特徴とする請求項５に記載の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。  
【請求項７】
該第２ノードは、プロセッサ毎に配置され、
該ツリーはさらに、各第２ノードを子ノードとする親ノードのオブジェクトをルートノードとして備え、該ルートノードは、いずれかの第２ノードのメモリ空間内のミドルウェア層に配置されている、
ことを特徴とする請求項５に記載の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項８】
該ツリーの各ノードはルーティングテーブルを備え、該ルーティングテーブルには、自ノードアドレスと、該自ノードの全ての子ノードのアドレスとが登録され、該自ノードが配置されたメモリ空間とは異なるメモリ空間内のノードである次ノードへのパケット転送についてはさらに、該次ノードへのパケット送信方式と、該パケット送信方式で該次ノードへパケット転送するための属性とが登録され、
各ルーティング手段は、該自ノードのルーティングテーブルを参照して該パケットをルーティングする、
ことを特徴とする請求項５乃至７のいずれか１つに記載の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項９】
該ツリーのルートノードは、該複数のプロセッサコアのそれぞれに結合されたメモリ空間内に配置され、
該ツリーのルートノード以外の各ノードのルーティング手段は、該パケットを親ノードへ転送する場合、自ノードと同じメモリ空間内のルートノードへ転送する、
ことを特徴とする請求項５乃至８のいずれか１つに記載の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【請求項１０】
該ツリーの各ノードのルーティング手段は、自ノードと同じメモリ空間内のノードへ該パケットを転送する場合、該パケットの参照のみ該ノードへ転送する、
ことを特徴とする請求項５乃至９のいずれか１つに記載の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムに係り、特に、非対称型のマルチプロセッシングシステムに用いて好適なオブジェクト間通信メカニズム関する。
【背景技術】
【０００２】
リーク電流及び消費電力の増大によるシングルコアプロセッサ単体での性能向上の限界を打破するため、マルチコアプロセッサやマルチプロセッサが用いられている。
【０００３】
組込みシステムでは、コストパフォーマンス向上及び低消費電力化のため、非対称型マルチプロセッシング（AMP）システムが用いられている。ＡＭＰシステムでは、システムに応じて、プロセッサコア毎に機能が定められ、それぞれのプロセッサコアで固有のプログラムが実行される。
【０００４】
この際、マルチコアプロセッサ内のプロセッサコア間は、マルチコア通信ＡＰＩ（MCAPI（登録商標）:Multicore Communications Application Program Interface）とＯＳ（オペレーティングシステム）（ＯＳを介さない場合もある）とミドルウェアとを介して通信が行われ、プロセッサ間は、それらを接続するＰＣＩｅxpress（PCIe）のデバイスドライバとＯＳとを介して通信が行なわれている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−２５８９３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このため、プロセッサコア間のユーザノード（アプリケーション内のオブジェクト）間通信においては、ハードウェア構成に応じて異なる通信方式を選択しなければならず、プログラミング上煩雑である。
【０００７】
また、マルチプロセッシングシステムのハードウェア又はソフトウェアの改良において、通信先ノードの配置が異なると、ユーザノード間通信のソフトウェア構成もこれに応じて変更する必要が生ずる。
【０００８】
本発明の目的は、このような問題点に鑑み、マルチプロセッシングシステムにおいて、通信先ノードの配置が異なっても、ソフトウェア構成を変更することなくオブジェクト間通信を行うことが可能なオブジェクト間通信メカニズムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明による、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの第１〜４態様はいずれも、複数のプロセッサコアのそれぞれに結合されたメモリ空間内のアプリケーション層のオブジェクトであるユーザノードを子ノードとする親ノードのオブジェクトを第１ノードとして、同じメモリ空間毎にミドルウェア層に配置され、これら第１ノードを子ノードとする親ノードのオブジェクトを第２ノードとして、いずれかの第１ノードのメモリ空間内のミドルウェア層に配置され、これらユーザノード、第１ノード及び第２ノードを含むツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングするパケットルーティング手段が備えられている。
【００１０】
名前解決テーブルの配置の仕方には、以下の（Ａ）〜（Ｃ）がある。
【００１１】
（Ａ）名前解決テーブルを、各ユーザノードのみに持たせる。
【００１２】
（Ｂ）名前解決テーブルを、ルートノードのみに持たせる。
【００１３】
（Ｃ）ユーザノード以外の各ノードに、そのノードと子孫ノードとに関する名前解決テーブルを持たせる。
【００１４】
本発明による、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの第１〜３態様はそれぞれ、上記（Ａ）〜（Ｃ）に対応している。
【００１５】
第１態様では、該ツリーの各ユーザノードの該パケットルーティング手段は、各ユーザノードの名前とそのアドレスとを対応付けた名前解決テーブルを備え、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、存在しなければオペレーティングシステムに例外エラーを発生させる。
【００１６】
第２態様では、該ツリーのルートノード以外の該パケットルーティング手段は、名前解決テーブルを備えず、該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該パケットを自ノードの親ノードに転送し、
該ルートノードの該パケットルーティング手段は、各ユーザノードの名前とアドレスとを対応付けた名前解決テーブルを備え、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、存在しなければオペレーティングシステムに例外エラーを発生させる。
【００１７】
第３態様では、該ツリーのユーザノード以外のノードの該パケットルーティング手段は、自ノードとその全ての子孫ノードの名前とアドレスとを対応付けた名前解決テーブルを備え、
各ユーザノードの該パケットルーティング手段は、該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該パケットを自ノードの親ノードに転送し、
該ツリーのユーザノード以外の該パケットルーティング手段は、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、該名前が該名前解決テーブル上に存在せず且つ自ノードの親ノードが存在すれば該パケットを該親ノードに転送し、該名前が該名前解決テーブル上に存在せず且つ該親ノードが存在しなければオペレーティングシステムに例外エラーを発生させる。
【００１８】
本発明の第４態様は、上記（Ａ）〜（Ｃ）のいずれであってもよい。
【００１９】
この第４態様では、該ツリーの各ノードの該パケットルーティング手段は、ルーティング処理前に名前解決処理を行い、該名前解決処理では、
該ヘッダの送信先アドレス又は送信元アドレスの替わりに名前が用いられている場合、該名前が該名前解決テーブル上に存在すれば、該名前をアドレスに変換し該ヘッダの名前を該アドレスで置換し、該名前が該名前解決テーブル上に存在せず又は自ノードに該名前解決テーブルが存在しないときには、
該自ノードの親ノードが存在すれば該パケットを該親ノードに転送し、該親ノードが存在しなければオペレーティングシステムに例外エラーを発生させる。
【発明の効果】
【００２０】
上記第１〜４態様のいずれも、名前解決テーブルを参照して、パケットのヘッダ内の送信元及び送信先の名前をアドレスに変換するので、通信先ノードの配置が異なっても、ソフトウェア構成を変更することなくオブジェクト間通信を行うことができるという効果を奏する。
【００２１】
上記第１態様の構成によれば、ユーザノードの１つである送信元ノードで名前解決を行うことができるという効果を奏する。
【００２２】
上記第２態様の構成によれば、ルートノードのみに名前解決テーブルを持たせればよく、システム全体に必要なメモリ容量を低減することができるという効果を奏する。
【００２３】
上記第３態様の構成によれば、第１態様の場合よりもシステム全体に必要なメモリ容量を低減することができるとともに、名前解決のために必ずルートノードまでパケットを転送する必要がないので、第２態様の場合よりも高速通信が可能となるという効果を奏する。
【００２４】
上記第４態様の構成によれば、名前解決テーブルの配置の仕方が変更になっても、パケットルーティング手段の構成を変更する必要がないという効果を奏する。
【００２５】
上記いずれの態様も、該ツリーのユーザノード以外のノードは、ＯＳ層以下の通信方式に依存する部分を隠蔽可能なミドルウェア層に配置されており、また、該ツリーの各ノードに、値により親子関係を区別可能なアドレスが設定されるとともに、送信先アドレス及び送信元アドレスをヘッダに含むパケットを該ツリーの親子ノード間でルーティングすることにより、該隠蔽を実現しているので、ハードウェア構成に依存しない通信方式でプログラミングすることができるという効果を奏する。
【００２６】
本発明の他の目的、特徴的な構成及び効果は、以下の説明を特許請求の範囲及び図面の記載と関係づけて読むことにより明らかになる。 
【図面の簡単な説明】
【００２７】
【図１】本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムが適用される実施例１のマルチプロセッシングシステムを示す概略構成図である。
【図２】アプリケーション層からハードウェア層までの概略階層構造図である。
【図３】本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの実施例１に係るユーザノード間通信オブジェクトであるノードのツリー図である。
【図４】ユーザノード間通信での送信対象パケットのフォーマット概略図である。
【図５】データのパケット化処理を示す概略フローチャートである。
【図７】リーフノード以外の任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。
【図６】（Ａ）は図３のリーフノード又はルートノードの名前解決テーブルを示す図、（Ｂ）〜（Ｄ）はそれぞれ、図３のノードＮ１０、Ｎ２０及びＮ３０のルーティングテーブルを示す図である。
【図８】（Ａ）及び（Ｂ）はそれぞれ、図３のノードＮ１０及びノードＮ００のルーティングテーブルを示す図である。
【図９】名前解決テーブル作成手順を示す概略フローチャートである。
【図１０】本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの実施例２に係る通信オブジェクトノードツリー図である。
【図１１】本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの実施例３が適用されるマルチプロセッシングシステムを示す概略構成図である。
【図１２】図１１に対応した通信オブジェクトノードツリー図である。
【図１３】本発明の実施例４の通信オブジェクトノードツリー図である。
【図１４】リーフノード以外の任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。
【図１５】（Ａ）〜（Ｃ）はそれぞれ、図１３のノードＮ１１０、Ｎ１００及びＮ０００のルーティングテーブル概略構成図である。
【図１６】転送パケット記憶部の概略説明図である。
【図１７】転送パケット記憶部の概略説明図である。
【図１８】同じメモリ空間内に配置されたノードＮ１０及びＮ００に関するパケット送受信の機能ブロック図である。
【実施例１】
【００２８】
図１は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムが適用される実施例１のマルチプロセッシングシステムを示す概略図である。
【００２９】
このシステムでは、マルチコアプロセッサ０１とシングルコアプロセッサ０２との間が、ＰＣＩｅで結合されている。マルチコアプロセッサ０１は、プロセッサコア１０とプロセッサコア２０とを備え、それらの間が不図示の内部バスで結合されている。シングルコアプロセッサ０２のプロセッサコア３０は、マルチコアプロセッサ０１の該内部バスと、ＰＣＩｅで結合されている。
【００３０】
図２は、アプリケーション層からハードウェア層までの概略階層構造を示している。
【００３１】
ＯＳ層以下においては、従来と同様に、プロセッサコア１０と２０との間の通信は上述のＭＣＡＰＩで行われ、プロセッサコア１０とプロセッサコア３０との間及びプロセッサコア２０とプロセッサコア３０との間の通信は、ＰＣＩｅで行われる。
【００３２】
本実施例１では、後述のオブジェクト間通信メカニズムを備えることにより、ユーザノード（ユーザアプリケーション内のオブジェクトであるノード）間通信において、ＭＣＡＰＩとＰＣＩｅの通信方式の選択をすることなく、すなわち通信相手のハードウェア上の位置を考慮することなく、統一的な通信を行えるようしている。
【００３３】
図３において、リーフノードであるユーザノードＮ１１及びＮ１２はいずれも、プロセッサコア１０に結合された（でアクセス可能な）メモリ空間内に配置されているアプリケーション層内のオブジェクトである。これらオブジェクトは、互いに異なるアプリケーションに属していても、同一アプリケーションに属していてもよい。この点は、以下においても同様である。
【００３４】
同様に、リーフノードであるユーザノードＮ２１及びＮ２２はそれぞれ、プロセッサコア２０に結合されたメモリ空間内に配置されているアプリケーション層内のオブジェクトである。また、リーフノードであるユーザノードＮ３１及びＮ３２はそれぞれ、プロセッサコア３０に結合されたメモリ空間内に配置されているアプリケーション層内のオブジェクトである。
【００３５】
これら６個のオブジェクト間の通信経路は、６Ｘ５／２＝１５通り有り、通信オブジェクト数が増えるとその通信経路数が増大する。また、メモリ空間が互いに異なるアプリケーション層内のオブジェクト間で直接通信を行おうとすると、その構成の一般化が容易でない。
【００３６】
そこで、図３に示すようなツリー構造のノード間通信を組み合わせることにより、任意のリーフノード間通信を行う。すなわち、エッジで結合された親子ノード間でバケットを順次転送することにより、アプリケーション層のユーザノード間で通信を行う。エッジで結合されたノード間は、互いに相手の存在を知っていて、これらノード間でデータを送信可能であることを示している。
【００３７】
ノードＮ１０、Ｎ２０及びＮ３０はそれぞれ、図１のプロセッサコア１０、２０及び３０に結合されたメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。また、ルートノードＮ００は、仮想ノードであり、プロセッサコア１０、２０及び３０のいずれか１つ（好ましくはこれらのうち最もプロセッサ間通信量が多いと想定されるプロセッサコア）に結合されたメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。
【００３８】
同一メモリ空間内に配置されたアプリケーション層内オブジェクト間は、容易に直接通信を行うことができるが、将来のシステム変更により異なるメモリ空間内に配置されることも有り得るので、オブジェクトが同一メモリ空間内に配置されているか否かを問わず、統一的に図３のツリー構造を用いた通信を行うようにしてもよい。
【００３９】
リーフノード（転送元及び転送先ノード）は、その親ノードのみに接続されているので、転送先は必ず親ノードとなる。リーフノード以外のノード（中間ノード）では、ルーティングテーブルを参照して、自ノードアドレスと転送先アドレスとから、次に転送すべき、エッジを介し隣り合うノードの１つを決定する。この際、アドレス値からノードの親子関係やリーフノードであるか否か、ルートノードであるか否かを判定できるという条件を満たすように、ノードアドレスを決定すれば、ルーティングテーブルの情報量を削減することができるとともに、テーブル参照回数が低減するので、処理を高速化することができる。
【００４０】
図３中のノードＮｉｊのアドレスを［ｉ，ｊ］とすると、前記条件を満たすように、ｉｊを定めている。すなわち、ノードＮｉｊは、ｉ≠０、ｊ≠０のとき、深さ２のリーフノードであり、その親ノードはｊ＝０としたものであり、さらなる親ノードはｉ＝０としたルートノードＮ００である。ルートノードには、親ノードがない。ルートノード以外は、親ノードは１つ（上に登るエッジは１つ）であるので、親ノードを選択することはない。
【００４１】
ノードアドレス［ｉ，ｊ］は、例えば、ｉ、ｊをそれぞれ４ビットで表すと、８ビットであり、最大２５６個のノードを表すことができる。
【００４２】
次に、リーフノード間データ送信例を説明する。以下では、自ノードアドレスを［ｉ，ｊ］、転送先アドレスを［ｉ２，ｊ２］とする。
【００４３】
例えばノードＮ１１からＮ１２へデータを送信する場合、リーフノードＮ１１には子ノードが存在しないので、ノードＮ１１からｊ＝０とした親ノードＮ１０へデータを送信する。ノードＮ１０は、その子ノードである転送先ノードＮ１２と結合されているので、このデータをノードＮ１２へ転送する。
【００４４】
次に、ノードＮ１１からＮ３２へデータを送信する場合、ノードＮ１１には子ノードが存在しないので、ノードＮ１１からｊ＝０とした親ノードＮ１０へデータを送信する。ｉ≠ｉ２であり、ノードＮ１０の子ノードには転送先ノードＮ３２が存在しないので、ｉ＝０とした親ノードであるルートノードＮ００へデータを転送する。ルートノードＮ００から、転送先ノードＮ３２のｊ２を０にしたノードＮ３０へ、データを転送する。次いでｊ＝２とした子ノードＮ３２へデータを転送する。
【００４５】
一般に、自ノードＮｉｊにおいて、送信先ノードノードＮｉ２ｊ２のパケットを以下の規則でルーティングする。
【００４６】
（１）ｉ＝ｉ２、ｊ＝ｊ２であれば自ノード宛へのデータとして受信する。
【００４７】
（２）自ノードがルートノード（ｉ＝０、ｊ＝０）のとき、ルーティングテーブル上に子ノードアドレスＣＡ＝［ｉ２，０］が存在すれば、この子ノードへデータを転送する。自ノードが深さ１のノード（ｉ≠０、ｊ＝０）のとき、ルーティングテーブル上に転送先の子ノードアドレスＣＡ＝［ｉ２，ｊ２］が存在すれば、この子ノードへデータを転送する。
【００４８】
（３）その他の場合には、親ノードが存在すれば、すなわち自ノードがルートノードでなければ、親ノードのアドレスＰＡへ、すなわち自ノードがリーフノード（ｉ≠０、ｊ≠０）であればＰＡ＝［ｉ，０］へ、自ノードが深さ１のノード（ｉ≠０、ｊ＝０）であれば、親ノードアドレスＰＡ＝［０，０］のルートノードへ、データを転送する。
【００４９】
１つの転送先へ複数のリーフノードからデータを並列して転送した場合、転送先においてそれらを区別する必要がある。そこで、送信対象データのヘッダには、送信先ノードアドレスのみならず、送信元ノードアドレスを含める。また、ハードウェア上又はソフトウェア上の理由による各ノードでの１回の送信可能最大データサイズのうちの最小値をＤＳmaxとすると、ＤＳmaxを越えるサイズのデータを送信する場合、ヘッダを含めたデータサイズがＤＳmaxを超えないようにデータを分割して、それぞれにヘッダを付加するというパケット化処理を行う。この場合、パケット間のつながりを判定できるようにするため、ＩＰプロトコルと同様のパケットシーケンス番号（次のパケットシーケンス番号＝現在のパケットシーケンス番号＋現在のパケットのペイロードのバイト数）をヘッダに付加する。
【００５０】
図４は、このシステムで使用されるパケットのフォーマットを示しており、ペイロードに、ヘッダとして送信先及び送信元のノードアドレスと、パッケトシーケンス番号とを付加したものを、パケットとする。
【００５１】
パケット化及びデパケット化は、アプリケーション層のリーフノードのみで行われる。
【００５２】
図５は、データのパケット化処理を示す概略フローチャートである。以下、括弧内は図中のステップ識別符号である。
【００５３】
（Ｓ０）ＤＳ＝（転送対象データのデータサイズ）＋（ヘッダのデータサイズ）がＤＳ＞ＤＳmaxであれば、ステップＳ１へ進み、そうでなければステップＳ２へ進む。
【００５４】
（Ｓ１）分割後の各データがＤＳ≦ＤＳmaxとなるように、データを分割する。
【００５５】
（Ｓ２）分割され又はされていないデータのそれぞれに、図４に示すようなヘッダを付加して、パケット化する。
【００５６】
（Ｓ３）これらのパケットを、転送バッファに格納する。
【００５７】
図３において、ソフトウェア又はハードウェアの改良に伴い、ツリー内のリーフノードの位置を変更すると、これに合わせて通信先のアドレスを変更しなければならない。この問題を解決するため、各リーフノードの下方に示すように、そのノードアドレスに対応する名前を、アドレスの替わりに用いる。
【００５８】
図６（Ａ）は、各リーフノードの名前をアドレスに変換するための名前解決テーブル４０Ａを示す。名前解決テーブルの配置の仕方には、以下の（Ａ）〜（Ｃ）がある。
【００５９】
（Ａ）この名前解決テーブル４０Ａを、各リーフノードのみに持たせる（少なくとも同一メモリ空間内に１つ持たせ、リーフノードでこれを参照する。）。
【００６０】
転送元ノードにおいて、パケットのヘッダに、アドレスの替わりに名前が用いられていれば、名前解決テーブル４０Ａを参照して、ヘッダ内の名前をアドレスに変更する（名前解決する）。この方法によれば、パケット送信元ノードで名前解決することができるが、リーフノード数に比例して、システム全体のメモリ使用量が増える。
【００６１】
（Ｂ）ルートノードのみに名前解決テーブル４０Ａを持たせる。
【００６２】
この場合、必ずルートノードまでパケットを転送して、名前解決しなければならない。
【００６３】
（Ｃ）リーフノード以外の各ノードに、そのノードと子孫ノードとに関する名前解決テーブルを持たせる。
【００６４】
具体的には、図３のＮ００に図６（Ａ）の名前解決テーブル４０Ａを持たせ、深さ１のノードＮ１０、Ｎ２０及びＮ３０のノードにそれぞれ図６（Ｂ）〜（Ｄ）の名前解決テーブル４０Ｂ〜４０Ｄを持たせる。名前解決テーブルを持つそれぞれのノードで、名前が解決していなければ名前解決を試み、解決可能なら解決し、解決できなければ親ノードへパケットを転送する。
【００６５】
図７は、任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。図３中の各ノード（オブジェクト）は、この処理のプログラムを備えている。名前解決テーブルの配置については、上記（Ａ）〜（Ｃ）のいずれであってもよい。
【００６６】
各ノードは、転送キューを備えており、この処理は、転送キューが、空の状態から要素が１個追加された状態になったときに発生するイベントに応答して、開始される。
【００６７】
この転送キューから先頭要素を取り出す毎に、ステップＳ１０以下の処理を行う。
【００６８】
（Ｓ１０）パケットヘッダから、転送先アドレスＤＡ及び自ノードアドレスＳＡ、又はこれらの名前を取得する。
【００６９】
（Ｓ１１）取得したものが転送元及び転送先のアドレスであればステップＳ１４へ進み、名前が含まれていればステップＳ１２へ進む。
【００７０】
（Ｓ１２）自ノードの名前解決テーブル中に、取得したものと一致するものがあれば、それをアドレスに変換してヘッダの内容を書き換える。自ノードが名前解決テーブルを持っていない場合は、一致するものがないとみなす。
【００７１】
（Ｓ１３）転送先の名前が解決済みとなればステップＳ１５へ進み、そうでなければステップＳ１４へ進む。
【００７２】
（Ｓ１４）自ノードがルートノードであればステップＳ１Ｃへ進み、そうでなければステップＳ１Ｂへ進む。
【００７３】
（Ｓ１５）転送先アドレスＤＡが自ノードアドレスＳＡに等しければ（ｉ＝ｉ２、ｊ＝ｊ２であれば）、ステップＳ１６へ進み、そうでなければステップＳ１７へ進む。
【００７４】
（Ｓ１６）自ノード宛受信バッファにこのパケットを格納し、ステップＳ１Ｄへ進む。
【００７５】
（Ｓ１７）転送先アドレスＤＡの値から論理的に、転送先アドレスＤＡが自ノードアドレスＳＡの子孫ノードアドレス（ｉ＝０、０＜ｉ２、又は、ｉ＝ｉ２、ｊ＝０、０＜ｊ２）であるか否かを判定する。肯定判定した場合にはステップＳ１８へ進み、そうでなければステップＳ１Ａへ進む。
【００７６】
（Ｓ１８）ステップＳ１７の子孫ノードを含む、自ノードの子ノードのアドレスＣＡ（ＣＡ＝［ｉ２，０］又はＣＡ＝［ｉ２，ｊ２］）が、自ノードのルーティングテーブル上に子ノードアドレスとして存在すれば、ステップＳ１９へ進み、そうでなければステップＳ１Ｃへ進む。
【００７７】
（Ｓ１９）ステップＳ１８で存在すると判定した子ノードのアドレスＣＡへパケットを転送し、ステップＳ１Ｄへ進む。
【００７８】
（Ｓ１Ａ）親ノードが存在すれば、すなわち自ノードアドレスＳＡがルートノードでなければ、ステップＳ１Ｂへ進み、そうでなければステップＳ１Ｃへ進む。
【００７９】
（Ｓ１Ｂ）親ノードのアドレスＰＡ（ｉ≠０、ｊ≠０であればＰＡ＝［ｉ，０］、ｉ≠０、ｊ＝０であればＰＡ＝［０，０］）へパケットを転送し、ステップＳ１Ｄへ進む。
【００８０】
（Ｓ１Ｃ）ＯＳに例外エラーの発生を通知し、このパケットを破棄する。アプリケーション側でこのエラーに対する処理をしていなければ、アプリケーションは停止し、この処理でエラーを無視していればステップＳ１０へ戻る。
【００８１】
（Ｓ１Ｄ）上記転送キューに先頭要素が存在すれば、ステップＳ１０へ戻り、そうでなければ、図７の処理を終了する。
【００８２】
ステップＳ１９又はステップＳ１Ｂにおいては、ルーティングテーブルを参照して、通信インターフェイス方式を選択し、それに応じて転送先アドレスを変換し、転送する。すなわち、この処理をミドルウェア層で行うことにより、アプリケーション層ではアドレス［ｉ，ｊ］のみ使用すればよい。
【００８３】
図８（Ａ）及び（Ｂ）はそれぞれ、図３のノードＮ１０及びＮ００のルーティングテーブルを示す。各テーブルにおいて、ＮＵＬＬは値が存在しないことを示す。また、子ノードインターフェイス（Ｉ／Ｆ）方式及び親ノードインターフェイス方式はそれぞれ、自ノードから子ノードへ及び自ノードから親ノードへのインターフェイス方式を示しており、値が０のとき、同一メモリ空間内でのパケット転送（パケット又はその参照の移動）、値が１のとき、同一プロセッサ内のプロセッサコア間のＭＣＡＰＩによるパケット転送、値が２のとき、異なるプロセッサ間のＰＣＩｅによるパケット転送を示している。子ノードが複数ある場合にはそれぞれの子ノードインターフェイス方式を区切り記号／で区切って記述している。子ノード及び親ノードのインターフェイス属性は、上記方式での通信で必要な属性値であり、この値がＮＵＬＬのときには既定の方法でパケットが転送されることを示している。また、親ノード／子ノードインターフェイス方式の値がＮＵＬＬのとき、その親ノード／子ノードが存在しないことを示している。
【００８４】
図８（Ｂ）では、インターフェイス方式が１又は２のときそれぞれ、インターフェイス属性がＸ１又はＹ１と記載されている。これらＸ１及びＹ１は、参照値であって、それぞれで参照されるデータブロック（構造体）に属性が記述されている。
【００８５】
ルーティングテーブルは、例えば、プログラムがプロセッサに対し対話的に設定させて、ＸＭＬファイルに変換させることにより、作成される。
【００８６】
図９は、名前解決テーブルを自動作成して、リーフノード以外へ自動配布する手順を示す概略フローチャートである。この処理は、マルチプロセッシングシステムの初期化処理で実行される。
【００８７】
（Ｓ２０）各ノードのアドレスを決定する。例えば、図３において、各プロセッサコアに対応したノードＮ１０、Ｎ２０、Ｎ３０のアドレスを、プロセッサコア検出順に決定し、これらの親ノードであるルートノードのアドレスを［０．０］とする。ルートノードは、最初に検出したプロセッサコアのメモリ空間内に配置し、又は、ユーザにプロセッサコアを選択させ、そのプロセッサコアのメモリ空間内に配置する。各アプリケーションで宣言されたリーフノードを、これと同じメモリ空間内の親ノードＮ１０、Ｎ２０又はＮ３０の子ノードとして、そのアドレスを、図３と同様の仕方で決定する。
【００８８】
（Ｓ２１）各リーフノードは、アプリケーションで宣言されたリーフノードの名前を、ステップＳ２０で決定したアドレスと対応付ける。
【００８９】
（Ｓ２２）各リーフノードは、送信先アドレスをルートノードアドレス［０、０］とし、送信元アドレスを自ノードアドレスとし、ペイロードに自ノードの名前を含ませたパケットを送信する。
【００９０】
（Ｓ２３）ルートノードは、ステップＳ２２で送信されたパケットを受信して、図６（Ａ）〜（Ｄ）に示すような名前解決テーブル４０Ａ〜４０Ｄを作成する。
【００９１】
（Ｓ２４）ルートノードは、名前解決テーブル４０Ａを自ノード用として保存し、名前解決テーブル４０Ｂ〜４０ＤをそれぞれノードＮ１０、Ｎ２０、Ｎ３０宛に配信する。ノードＮ１０、Ｎ２０、Ｎ３０はそれぞれ、受信した名前解決テーブルを自ノード用として保存する。
【００９２】
本実施例１によれば、マルチプロセッシングシステム全体で通信オブジェクトノードのツリーを構成して、アプリケーション層内のリーフノード以外はミドルウェア層に配置し、ツリー上のノードを辿ってパケット通信を行うので、様々な構成のマルチプロセッシングシステムにおいて、比較的簡単な構成で、通信方式や通信経路やなどのハードウェアを意識することなくユーザノード間通信を行うことができるという効果を奏する。
【００９３】
また、リーフノード間でアドレスの替わりに名前を使用してパケットを送信することができるので、ソフトウェア又はハードウェアの改良に伴いツリー内のリーフノードの位置を変更しても、これに合わせて通信先のアドレスを変更する必要がないという効果を奏する。
【００９４】
なお、図７のフローチャートにおいて、上記（Ａ）〜（Ｃ）の
【実施例２】
【００９５】
図１０は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの実施例２に係る通信オブジェクトノードツリーを示す。
【００９６】
このツリーでは、図３の深さ２と３のノード間に、アプリケーション層のリーフノードとの間の通信手順を簡単化するためのインターフェイスノードを挿入している。一般に、ノードツリーの深さをｎとすると、アドレスの桁数（［］内の"，"で区切られた数字の個数）はｎとなり、この場合、ｎ＝３である。実施例１と同様に、ノードＮｉｊｋのアドレスは、［ｉ，ｊ，ｋ］である。
【００９７】
深さ０及び１のノードルートノードＮ０００、Ｎ１００、Ｎ２００及びＮ３００はそれぞれ、図３のルートノードＮ００、Ｎ１０、Ｎ２０及びＮ３０と、アドレスのみ異なる。
【００９８】
一般に、自ノードＮｉｊｋにおいて、送信先ノードノードＮｉ２ｊ２ｋ２のパケットを以下の規則に従ってルーティングする。
【００９９】
（１ａ）ｉ＝ｉ２、ｊ＝ｊ２、ｋ＝ｋ２であれば、自ノード宛へのデータとして受信する。
【０１００】
（２ａ）自ノードがルートノード（ｉ＝０、ｊ＝０、ｊ＝０）のとき、ルーティングテーブル上に子ノードアドレスＣＡ＝［ｉ２，０、０］が存在すれば、この子ノードへデータを転送する。自ノードが深さ１のノード（ｉ≠０、ｊ＝０、ｊ＝０）のとき、ルーティングテーブル上に子ノードアドレスＣＡ＝［ｉ２，ｊ２、０］が存在すれば、この子ノードへデータを転送する。自ノードが深さ２のノード（ｉ≠０、ｊ≠０、ｊ＝０）のとき、ルーティングテーブル上に子ノードアドレスＣＡ＝［ｉ２，ｊ２、ｋ２］が存在すれば、この子ノードへデータを転送する。
【０１０１】
（３ａ）その他の場合には、親ノードが存在すれば、すなわち自ノードがルートノードでなければ、親ノードのアドレスＰＡへ、すなわち自ノードがリーフノード（ｉ≠０、ｊ≠０、ｋ≠０）であれば親ノードアドレスＰＡ＝［ｉ，ｊ，０］へ、自ノードが深さ２のノード（ｉ≠０、ｊ≠０、ｋ＝０）であれば親ノードアドレスＰＡ＝［ｉ，０，０］へ、自ノードが深さ１のノード（ｉ≠０、ｊ＝０、ｋ＝０）であれば親ノードアドレスＰＡ＝［０，０，０］のルートノードへ、データを転送する。
【０１０２】
図７のルーティング処理は、上記（１ａ）〜（１ｃ）の規則を考慮すれば容易に理解できるので、その説明を省略する。
【０１０３】
パケット化及びデパケット化は、上記インターフェイスノードで行われる。このインターフェイスノードも、図７のルーティング処理を行う。
【０１０４】
他の点は、上記実施例１と同様である。
【実施例３】
【０１０５】
図１１は、本発明の、マルチプロセッシングシステムにおけるオブジェクト間通信メカニズムの実施例３が適用されるマルチプロセッシングシステムを示す概略図である。
【０１０６】
このシステムでは、４つのマルチコアプロセッサ１００、２００、３００及び４００を備えている。マルチコアプロセッサ１００は、プロセッサコア１１０、１２０、１３０及び１４０の間が内部バスで結合され、マルチコアプロセッサ２００は、プロセッサコア２１０、２２０、２３０及び２４０の間が内部バスで結合され、マルチコアプロセッサ３００は、プロセッサコア３１０、３２０、３３０及び３４０の間が内部バスで結合され、マルチコアプロセッサ４００は、プロセッサコア４１０、４２０、４３０及び４４０の間が内部バスで結合されている。マルチコアプロセッサ１００、２００、３００及び４００の間はＰＣＩｅで結合されている。
【０１０７】
上記同様に、各プロセッサ内のプロセッサコア間では、ＭＣＡＰＩで通信が行われ、異なるプロセッサ間では、ＰＣＩｅによる通信が行われる。
【０１０８】
図１２は、図１１に対応した通信オブジェクトノードツリーを示す。
【０１０９】
ノードＮｉｊｋのアドレスは、［ｉ，ｊ，ｋ］である。全ノードＮｉｊｋのうち、ｉｊｋが図１１中の要素の符号と一致するものは、その要素に対応したノードである。また、例えばノードＮ１１０とプロセッサコア１１０のように、ｉｊｋが図１１中のプロセッサコアの符号と一致するノードは、実施例１と同様に、プロセッサコアｉｊｋに結合されたメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。
【０１１０】
このツリーでは、深さ１のノードをプロセッサに対応した仮想ノードとして配置しており、このノードは、プロセッサ毎のサブツリーのルートノードとなっている。この深さ１のノードは、ルートノードＮ０００でのエッジ数を低減して、ルートノードＮ０００でパケットが混雑するのを避けるとともに、各プロセッサでルーティングを並列処理している。すなわち、この深さ１のノードは、この目的のためのインターフェイスノードである。
【０１１１】
各仮想ノードは、その子ノードのいずれか１つと同じメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。例えば、ノードＮ０００及びＮ１００はノードＮ１１０と同じメモリ空間内に配置されているミドルウェア層内の通信オブジェクトである。
【０１１２】
深さ３のリーフノードは、図３の場合と同様に、ユーザノードである。
【０１１３】
他の点は、実施例１と同様である。
【０１１４】
ＡＭＰでは、コストパフォーマンスを向上をさせると共に消費電力を低減するために、様々な構成のマルチプロセッシングシステムが用いられ、また、システムの改良の際にその構成も変化していく。しかし、以上の実施例１〜３から容易に理解できるように、本発明のマルチプロセッシングシステムにおけるオブジェクト間通信メカニズムは、システムの構成によらず統一した方式で、ハードウェア構成やＯＳの種類によらずユーザノード間で通信を行うことができる。
【実施例４】
【０１１５】
図１３は、本発明の実施例４の通信オブジェクトノードツリーを示す。
【０１１６】
ハードウェア構成は、図１１と同一である。このツリーでは、深さ２のノードにおいて、同一プロセッサ内の任意の２つのプロセッサコアに対応したノードの間をエッジで結合して、これらの間で直接通信可能にしている点が、図１２のツリーと異なっている。
【０１１７】
図１４は、任意のノードが、その転送バッファ内のパケットを次ノードへ転送するルーティング処理を示す概略フローチャートである。図１４中の各ノードは、それぞれ独立にこの処理のプログラムを備えている。
【０１１８】
各ノードは、転送キューを備えており、この処理は、転送キューが、空の状態から要素が１個追加された状態になったときに発生するイベントに応答して、開始される。
【０１１９】
この転送キューから先頭要素を取り出す毎に、ステップＳ１０以下の処理を行う。
【０１２０】
図１４の処理が図７のそれと異なる点は、兄弟ノードへのパケット転送に対応して、ステップＳ１５とステップＳ１７との間にステップＳ３０を追加し、さらに、これに関係したステップＳ３１及びステップＳ３２を追加している点である。次に、この差分を説明する。
【０１２１】
ステップＳ１５で否定判定されるとステップＳ３０へ進む。
【０１２２】
（Ｓ３０）転送先アドレスＤＡの値から論理的に、転送先アドレスＤＡが自ノードアドレスＳＡと兄弟ノードの子孫ノード（転送先ノードの祖先ノードが自ノードアドレスＳＡと兄弟ノード）のアドレスＢＡと判定すれば、ステップＳ３１へ進み、そうでなければステップＳ１７へ進む。より具体的には、転送先アドレスＤＡが自ノードアドレスＳＡと兄弟ノードの子孫ノードであるか否かの判定は、次のようにして行う。すなわち、自ノードが深さ１のノード（ｉ≠０、ｊ＝０、ｊ＝０）のとき、ルーティングテーブル上に兄弟ノードアドレスＢＡ＝［ｉ２，０，０］が存在すれば、この兄弟ノードへデータを転送する。自ノードが深さ２のノード（ｉ≠０、ｊ≠０、ｊ＝０）のとき、ルーティングテーブル上に兄弟ノードアドレスＢＡ＝［ｉ２，ｊ２、０］が存在すれば、この兄弟ノードへデータを転送する。
【０１２３】
（Ｓ３１）自ノードのルーティングテーブルに兄弟ノードアドレスＢＡが含まれていればステップＳ３２へ進み、そうでなければステップＳ１７へ進む。
【０１２４】
（Ｓ３２）自ノードのルーティングテーブルを参照して転送方式を決定し、転送先アドレスをその方式のアドレスに変換して、兄弟ノードアドレスＢＡへパケットを転送し、ステップＳ１Ｃへ進む。
【０１２５】
図１５（Ａ）〜（Ｃ）はそれぞれ、図１３のノードＮ１１０、ノードＮ１００及びルートノードＮ０００のルーティングテーブルを示す。このテーブルの構成は、兄弟ノードについて  ノードに結合された兄弟ノードのアドレス、そのノードへの通信のインターフェイス方式及びインターフェイス属性を、図８のルーティングテーブルに追加したものとなっている。
【０１２６】
他の点は、実施例３と同様である。
【実施例５】
【０１２７】
実施例５では、図１２のツリーにおいて、仮想ノードの複数の子ノードのそれぞれが配置されたメモリ空間内に、該仮想ノードを配置することにより、同じメモリ空間内で任意のノードからルートノードまで登れるようにしている。すなわち、仮想ノードＮ０００を、各プロセッサコアに結合されたメモリ空間のそれぞれに配置し、深さ１のそれぞれの仮想ノードを、該ノードのそれぞれの子ノードが配置されたメモリ空間と同じメモリ空間のそれぞれに配置することにより、任意のノードからルートノードまで登る場合に、同じメモリ空間内にそれらのノードが存在（転送バッファも、このノードと同じメモリ空間内に存在）するようにしている。各仮想ノードは、アドレスが互いに同一であっても、その位置によって転送方式が異なるので、独自のルーティングテーブルを持っている。
【０１２８】
ルートノードからの下りは、その子ノード（仮想ノード）へパケットを転送するときに、同一アドレスを持つ複数の子ノードのうち、送信先ノードが配置されているメモリ空間内の子ノードへパケットを転送し、その後は、このメモリ空間内のみのノードを辿って、送信先ノードまでパケットを転送しながら下っていく。
【０１２９】
これにより、同じメモリ空間内でのパケット転送処理の割合が大きくなるので、転送処理を高速化することができる。
【０１３０】
他の点は、実施例３と同一である。
【０１３１】
本実施例５によれば、図１３のように同一プロセッサ内のプロセッサコア間を兄弟ノードとして結合することなく、より簡単で統一的な構成により、図１３とほぼ同様に、パケットを転送することが可能となる。
【０１３２】
なお、上記実施例１、２及び４においても、本実施例と同様に構成することができる。
【実施例６】
【０１３３】
同一メモリ空間内でのパケット転送は、共有メモリ内にパケットを配置することにより、パケットを実際に転送せずに、パケットの参照のみを、ノードの転送キューから次ノードの受信キューへ移動させればよい。
【０１３４】
例えば図１６に示すように、この共有メモリ内にアプリケーション１１用の送信バッファ１１Ｓを割り当てる。そして、同一メモリ空間内の各ノード、例えば、図３のノードＮ１１に、図１６の転送キューＮ１１−１４を備え、図３のルートノードＮ１０に、図１６の転送キューＮ１０−１４を備える。
【０１３５】
各キュー内の要素は、送信バッファ１１Ｓ内の１つのパケットの先頭アドレスとバイト数とを、参照として保持している。転送キューＮ１１−１４の先頭要素ＥＡを取り出して、これに対応した送信バッファ１１Ｓ内のパケットＡをノードＮ１０へ転送する場合、実際にはパケットを転送せずに、この要素ＥＡを、図７のステップＳ１Ａにおいて、図１７に示すように、転送キューＮ１０−１４の末尾に加える(移動させる)。これにより、ノードＮ１１からノードＮ１０へパケットが論理的に転送されたことになる。
【０１３６】
図１８は、同じメモリ空間１０Ｍ内に配置されたノードＮ１１、Ｎ１０及びＮ００に関するパケット送受信の機能ブロック図である。メモリ空間１０Ｍは、図１のプロセッサコア１０に結合されている。図１８では、各ノードの互いに対応するノードを同一符号で示しており、以下、ノードＮｉｊの要素ｐｑをＮｉｊ−ｐｑと表記する。
【０１３７】
ノードＮ１１は、アプリケーション１１内のオブジェクトであり、そのパケット化部１３は、送信バッファ１１Ｓに格納されたデータを、図５のフローチャートに従ってパケット化し、そのパケットの参照ＥＡを、上記のように転送キューＮ１１−１４の末尾に追加する。
【０１３８】
転送キューＮ１１−１４が空の状態から１つの要素が追加された状態になると、そのイベントの発生に応答して、パケット送受信制御部Ｎ１１−１５は、図７の処理を介しする。上記ステップＳ１Ａにおいて、パケット送受信制御部Ｎ１１−１５は転送キューＮ１１−１４の先頭要素を取り出し、これを転送キューＮ１０−１４の末尾に追加させる。同様に、転送キューＮ１０−１４が空の状態から１つの要素が追加された状態になると、そのイベントの発生に応答して、パケット送受信制御部Ｎ１０−１５は、図７の処理を介しし、転送キューＮ１０−１４の先頭要素を取り出し、上記ステップＳ１Ａにおいて、これを転送キューＮ００−１４の末尾に追加させる。
【０１３９】
転送キューＮ００−１４が空の状態から１つの要素が追加された状態になると、そのイベントの発生に応答して、パケット送受信制御部Ｎ００−１５は、図７の処理を介しし、転送キューＮ００−１４の先頭要素を取り出し、ステップＳ１８において、ルーティングテーブル１６を参照し、転送インターフェイス方式の値が１又は２であればそれに対応するインターフェイス方式の属性値に基づいてアドレスを変換し、通信部１９を介し他のプロセッサコアへパケットを転送させる。この通信部１９は、図２のＯＳ層、ドライバ層及びハードウェア層で構成されている。
【０１４０】
一方、図３のノードＮ２０又はＮ３０からノードＮ００宛のパケットを、ドライバを介しＯＳが受信して受信バッファ１１Ｒ０に格納し、その旨をパケット送受信制御部Ｎ００−１５に通知する。パケット送受信制御部Ｎ００−１５はこれに応答して、図７の処理を介しし、ステップＳ１８において、前記格納したパケットの参照を転送キューＮ１０−１４の末尾に追加する。同様に、パケット送受信制御部Ｎ１０−１５は、上記イベントの発生に応答して、図７の処理を介しし、転送キューＮ１０−１４の先頭要素を取り出し、ステップＳ１８で、これを転送キューＮ１１−１４の末尾に追加させる。パケット送受信制御部Ｎ１１−１５は、上記イベントの発生に応答して、図７の処理を介しし、転送キューＮ１１−１４の先頭要素を取り出し、図７のステップＳ１５で、パケット再配列・デパケット化部１８を介し、そのパケットを、受信バッファ１１Ｒに格納させる。この際、パケット再配列・デパケット化部１８は、パケットの参照で指定された受信バッファ１１Ｒ０内の複数の受信パケットを読み出し、送信元アドレス毎に分け、さらにパケットをパケットシーケンス番号順に再配列し、各パケットのヘッダを削除してペイロード間を連結させ、その一連のデータを、受信バッファ１１Ｒに格納させる。
【０１４１】
他の点は上記実施例１と同一である。
【０１４２】
以上において、本発明の好適な実施例を説明したが、本発明には他にも種々の変形例が含まれ、上記実施例で述べた各構成要素の機能を実現する他の構成を用いたもの、当業者であればこれらの構成又は機能から想到するであろう他の構成も、本発明に含まれる。
【０１４３】
例えば、図１６の送信バッファ１１Ｓは、複数のプロセッサコア間での共有メモリであってもよく、この場合、これら複数のプロセッサコアのそれぞれで動作するユーザノードの間の通信についても、パケットの参照のみを転送すればよい。
【０１４４】
パケット化及びデパケット化は、アプリケーション層のリーフノードと直接結合されるミドルウェア層のノードのみで行うようにしてもよい。すなわち、送信側リーフノードで送信先及び送信元のアドレス指定して、高さ１のノードにデータを送信し、受信側リーフノードで、ヘッダが削除されペイロードが結合されたデータを受信するようにしてもよい。この場合、ユーザノードではパケットを意識する必要がない。
【０１４５】
また、図７において、ステップＳ１４及びＳ１５はリーフノードのみに備え、ステップＳ１９及びＳ１Ａはルートノードに備えない構成であってもよい。この点は、図１４についても同様であり、図１４ではさらに、ステップＳ３０、Ｓ３１及びＳ３２を、兄弟ノード間がエッジで接続されている深さのノードのみに備えた構成であってもよい。
【０１４６】
上記各実施例ではマルチコアプロセッサ内のプロセッサコア間通信としてMCAPIを使用する場合を説明したが、複数のプロセッサコアから参照できるキャッシュメモリ上の領域を介してプロセッサコア間通信を行う構成であっても、複数の通信方式の１つを選択的に使用する構成であってもよい。
【０１４７】
また、上記実施例５は、上記実施例２〜４にも同様に適用してもよい。
【０１４８】
さらに、本発明は非対称型のみならず対称型マルチプロセッシングシステムに適用してもよい。
【符号の説明】
【０１４９】
０１、１００、２００、３００、４００  マルチコアプロセッサ
０２  シングルコアプロセッサ
１０、２０、３０、１１０、１２０、１３０、１４０、２１０、２２０、２３０、２４０、３１０、３２０、３３０、３４０、４１０、４２０、４３０、４４０  プロセッサコア
１１、１２  アプリケーション
１１Ｒ  受信バッファ
１１Ｓ  送信バッファ
１３  パケット化部
１４、１７  転送キュー
１５  パケット送受信制御部
１６  ルーティングテーブル
１８  パケット再配列・デパケット化部
１９  通信部
４０Ａ〜４０Ｄ  名前解決テーブル
Ｎ００、Ｎ０００  ルートノード
Ｎ１０〜Ｎ１２、Ｎ２０〜Ｎ２２、Ｎ３０〜Ｎ３２、Ｎ１００、Ｎ１１０〜Ｎ１１２、Ｎ２００、Ｎ２１０、Ｎ２１１、Ｎ２２０、Ｎ２２１、Ｎ３００、Ｎ３１０、Ｎ３１１、Ｎ３１２、Ｎ４００、Ｎ４１０、Ｎ４１１、Ｎ４２０、Ｎ４２１、Ｎ４３０、Ｎ４３１、Ｎ４４０、Ｎ４４１、Ｎｉｊ、Ｎｉ１ｊ１、Ｎｉ２ｊ２、Ｎｉｊｋ、Ｎｉ１ｊ１ｋ１、Ｎｉ２ｊ２ｋ２  ノード
ＤＡ  転送先アドレス
ＳＡ  自ノードアドレス
ＣＡ  子ノードアドレス
ＰＡ  親ノードアドレス
ＢＡ  兄弟ノードアドレス
【図１】
2014048707.tif 000003
【図２】
2014048707.tif 000004
【図３】
2014048707.tif 000005
【図４】
2014048707.tif 000006
【図５】
2014048707.tif 000007
【図６】
2014048707.tif 000008
【図７】
2014048707.tif 000009
【図８】
2014048707.tif 000010
【図９】
2014048707.tif 000011
【図１０】
2014048707.tif 000012
【図１１】
2014048707.tif 000013
【図１２】
2014048707.tif 000014
【図１３】
2014048707.tif 000015
【図１４】
2014048707.tif 000016
【図１５】
2014048707.tif 000017
【図１６】
2014048707.tif 000018
【図１７】
2014048707.tif 000019
【図１８】
2014048707.tif 000020