(57)【特許請求の範囲】
【請求項１】
通信回線を介して互いに接続された複数の制御ユニットに処理を分散させてコンピュータプログラムを実行するためのシステムであって、
データ処理の内容が記述されたスクリプトコードを参照して、前記データ処理を複数の単位処理に分解する処理分解部と、
複数の制御ユニットに各単位処理を割り当てる分配部と、
を備え、
制御ユニットは、
制御ユニットを統括的に制御する主制御装置と、
主制御装置により割り当てられた処理を実行する複数の副制御装置と、
を含み、
一の制御ユニットの主制御装置は自身の支配下にある副制御装置の実行状態に応じて単位処理の一部を自身の支配下にある副制御装置に割り当て、各副制御装置が割り当てられた処理を実行し、
前記一の制御ユニットの主制御装置は、前記単位処理の別の一部を実行させる他の制御ユニットにおける特定の副制御装置を指定することなく、前記他の制御ユニットの主制御装置に対して、前記他の制御ユニットの主制御装置の支配下にある副制御装置への前記単位処理の別の一部の割り当てを指示可能であり、
前記単位処理の別の一部の割り当てを指示された前記他の制御ユニットの主制御装置は、自身の支配下にある副制御装置の実行状態に応じて前記単位処理の別の一部を自身の支配下にある副制御装置に割り当て、各副制御装置が割り当てられた処理を実行することを特徴とするデータ処理システム。
【請求項２】
前記スクリプトコードは、所定のタグセットによる構造化文書ファイルとして記述されることを特徴とする請求項１に記載のデータ処理システム。
【請求項３】
副制御装置に割り当てられた処理は、当該処理を他の制御ユニットから制御するためのインタフェースを主制御装置に通知し、当該主制御装置は、そのインタフェースを前記他の制御ユニットの主制御装置に通知し、
前記他の制御ユニットの副制御装置は、前記他の制御ユニットの主制御装置に通知されたインタフェースを介して前記副制御装置による処理を制御可能であることを特徴とする請求項１または２に記載のデータ処理システム。
【請求項４】
副制御装置に割り当てられた処理を制御するための、他の制御ユニットからもアクセス可能なインタフェースの一覧を公開インタフェース情報として保持する公開インタフェース情報保持部、を更に備え、
副制御装置に割り当てられた処理は、前記公開インタフェース情報を参照することにより、別の制御ユニットにおける単位処理を制御可能であることを特徴とする請求項１から３のいずれかに記載のデータ処理システム。
【請求項５】
前記公開インタフェース情報に登録されているインタフェースを介して１以上の単位処理を制御するためのロジックが記述されたインタフェースコードを保持するインタフェースコード保持部、を更に備え、
副制御装置に割り当てられた処理は、前記インタフェースコードを実行することにより、別の制御ユニットにおける単位処理を制御可能であることを特徴とする請求項４に記載のデータ処理システム。
【請求項６】
ある領域の変化が他の領域に影響を及ぼしうる複数の領域に関する所定のシミュレーション処理を指示するスクリプトコードが実行される際、複数の副制御装置のそれぞれは、前記複数の領域それぞれに関するシミュレーション処理を並行して実行し、
副制御装置に割り当てられたシミュレーション処理は当該処理を当該処理とは異なるシミュレーション処理から制御するためのインタフェースを主制御装置に通知し、前記副制御装置とは異なる副制御装置は、主制御装置に通知されたインタフェースを介して前記副制御装置によるシミュレーション処理を制御可能であり、
前記複数の領域のうち１つの領域に関するシミュレーション処理を実行する副制御装置は、当該領域に関するシミュレーション処理の結果が、他の領域に関するシミュレーション処理に影響を及ぼす場合、当該領域に関するシミュレーション処理の結果を、主制御装置に通知されたインタフェースを介して、前記他の領域に関するシミュレーション処理を実行する他の副制御装置へ通知することで、当該領域に関するシミュレーション処理の結果を反映したシミュレーション処理を前記他の副制御装置に実行させることを特徴とする請求項１から５のいずれかに記載のデータ処理システム。
【請求項７】
通信回線を介して互いに接続された複数の制御ユニットに処理を分散させてコンピュータプログラムを実行するための方法であって、
プロセッサユニットが、データ処理の内容が記述されたスクリプトコードを参照して、前記データ処理を複数の単位処理に分解する処理分解ステップと、
プロセッサユニットが、それぞれの単位処理に対応するソフトウェアモジュールを取得するモジュール取得ステップと、
プロセッサユニットが、複数の制御ユニットに各ソフトウェアモジュールを割り当てる割当ステップと、
一の制御ユニットにおいてその制御ユニットを統括的に制御するプロセッサユニットである主制御装置が、自身の支配下にあるプロセッサユニットであり、主制御装置により割り当てられた処理を実行する複数の副制御装置それぞれの実行状態に応じて、単位処理の一部を自身の支配下にある副制御装置に割り当て、割り当てられた処理を各副制御装置が実行するステップと、
前記一の制御ユニットの主制御装置が、前記単位処理の別の一部を実行させる他の制御ユニットにおける特定の副制御装置を指定することなく、前記他の制御ユニットの主制御装置に対して、前記他の制御ユニットの主制御装置の支配下にある副制御装置への前記単位処理の別の一部の割り当てを指示するステップと、
前記単位処理の別の一部の割り当てを指示された前記他の制御ユニットの主制御装置が、自身の支配下にある副制御装置の実行状態に応じて前記単位処理の別の一部を自身の支配下にある副制御装置に割り当て、割り当てられた処理を各副制御装置が実行するステップと、
を備えることを特徴とするデータ処理方法。
【請求項８】
副制御装置に割り当てられた処理は、当該処理を他の制御ユニットから制御するためのインタフェースを主制御装置に通知し、当該主制御装置は、そのインタフェースを前記他の制御ユニットの主制御装置に通知し、
前記他の制御ユニットの副制御装置が、前記他の制御ユニットの主制御装置に通知されたインタフェースを介して前記副制御装置による処理を制御するステップをさらに備えることを特徴とする請求項７に記載のデータ処理方法。
【請求項９】
ある領域の変化が他の領域に影響を及ぼしうる複数の領域に関する所定のシミュレーション処理を指示するスクリプトコードが実行される際、複数の副制御装置のそれぞれは、前記複数の領域それぞれに関するシミュレーション処理を並行して実行し、
副制御装置に割り当てられたシミュレーション処理は当該処理を当該処理とは異なるシミュレーション処理から制御するためのインタフェースを主制御装置に通知し、前記副制御装置とは異なる副制御装置は、主制御装置に通知されたインタフェースを介して前記副制御装置によるシミュレーション処理を制御し、
前記複数の領域のうち１つの領域に関するシミュレーション処理を実行する副制御装置は、当該領域に関するシミュレーション処理の結果が、他の領域に関するシミュレーション処理に影響を及ぼす場合、当該領域に関するシミュレーション処理の結果を、主制御装置に通知されたインタフェースを介して、前記他の領域に関するシミュレーション処理を実行する他の副制御装置へ通知することで、当該領域に関するシミュレーション処理の結果を反映したシミュレーション処理を前記他の副制御装置に実行させることを特徴とする請求項７または８に記載のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算資源に処理を分散させてコンピュータプログラムを実行するための技術、に関する。
【背景技術】
【０００２】
コンピュータゲームやウェブ検索ソフトをはじめとするソフトウェアの高機能化は、ハードウェアに対して大きな処理負荷をかけるようになってきている。このような状況に対処するためには、演算処理自体の高速化が必要であることはもちろんであるが、複数の処理装置間でタスクを好適に分散することも同様に重要である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、一口にタスクを分散させるといっても、システム全体として利用できる計算資源は多様である。このような実行環境の多様性まで考慮してタスク配分を制御するアプリケーションプログラムを作成するとすれば、その開発負担は、シングルプロセッサ上での動作を前提としたアプリケーションプログラムとは比べものにならない。
【０００４】
本発明は、このような課題に鑑みてなされたものであり、その主たる目的は、ネットワーク上の多様な計算資源に処理を分散させるコンピュータプログラムを簡易に作成するための技術、を提供することにある。
【課題を解決するための手段】
【０００５】
本発明のある態様は、通信回線を介して互いに接続された複数の制御ユニットに処理を分散させてコンピュータプログラムを実行するためのデータ処理システムである。
このシステムでは、データ処理の内容が記述されたスクリプトコードを参照して、データ処理を複数の単位処理に分解し、複数の制御ユニットに各単位処理を割り当てる。
制御ユニットは、制御ユニットを統括的に制御する主制御装置と、主制御装置により割り当てられた処理を実行する複数の副制御装置を含む。
主制御装置は単位処理の一部を副制御装置に割り当て、各副制御装置が割り当てられた処理を実行する。
【０００６】
スクリプトコードを参照してデータ処理を単位処理に分解したり単位処理を割り当てる処理は、いずれかの制御ユニットによって実行されてもよい。あるいは、このような処理を実行するための装置が別途設けられてもよい。スクリプトコードは、ＸＭＬのようにタグによって構造化される構造化文書ファイルとして記述されてもよいし、PerlやJavaScript（Javaは登録商標）などのスクリプト言語によって記述されてもよい。
通信回線は、インターネットやＬＡＮのような通信ネットワークであってもよいが、複数の制御ユニットを接続するバスのようなデータ送受信経路であってもよい。
【０００７】
本発明の別の態様は、複数の実行主体に処理を分散させてコンピュータプログラムを実行するためのデータ処理システムである。
このシステムは、データ処理の内容が記述されたスクリプトコードを参照して、前記データ処理を複数の単位処理に分解し、複数の実行主体に各単位処理を割り当てる。そして、各実行主体が割り当てられた処理を実行する。
このシステムにおいて、複数の実行主体は、１つのＭＰＵに内蔵されるプロセッサであってもよい。そして、スクリプトーコードから抽出された単位処理は、単一のＭＰＵ内の複数の実行主体に割り当てられてもよい。あるいは、複数のＭＰＵにそれぞれ含まれている更に多くの実行主体に対して、単位処理が分散されてもよい。
【０００８】
なお、本発明を方法、装置、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、ネットワーク上の多様な計算資源にて分散処理を実行するコンピュータプログラムの作成負担を軽減する上で効果がある。
【発明を実施するための最良の形態】
【００１０】
本実施例においては、コンピュータで特定の処理を実行するときに、当該コンピュータ内のプロセッサだけでなく、そのコンピュータが接続されたネットワーク内における他の装置のプロセッサをも利用できるスケーラビリティを確保した環境を実現する。そのために、各コンピュータからのハードウエア資源の提供をネットワーク上で管理し、分散処理の割り当てやデータ受け渡しを制御する仕組みを構築する。
【００１１】
図１は、リソースマネジメントシステム１０の構成を模式的に示す。
リソースマネジメントシステム１０は、インターネット１４と、インターネット１４に接続されたＬＡＮ１２やユーザ端末１６などのコンピュータで構成される。各ユーザ端末１６は、インターネット１４に直接接続されている場合と、ホームネットワークや企業内ネットワークなどのＬＡＮ１２を経由してインターネット１４に接続されている場合がある。インターネット１４には、ユーザ端末１６間の資源利用および提供を管理、制御するネットワークサーバ２０が接続されている。ＬＡＮ１２には、ＬＡＮ１２内に接続されたユーザ端末１６間における資源利用および提供を管理、制御するホームサーバなどのローカルサーバ１８が接続されていてもよい。各ユーザ端末１６は、ＬＡＮ１２内における資源を利用してもよいし、インターネット１４を介したユーザ端末１６同士で資源を利用しあってもよい。また、ユーザ端末１６は、ローカルサーバ１８の資源を利用してもよい。このように、広くインターネット１４およびＬＡＮ１２を介して複数のユーザ端末１６やローカルサーバ１８の間でハードウエア資源を共有し、そうした資源を相補的に利用して分散処理を図ることにより、単独で処理実行するよりも処理能力向上を図ることができる。
【００１２】
あるユーザ端末１６は、１つのマイクロプロセッサユニット（ＭＰＵ）を備え、別のユーザ端末１６は２つのＭＰＵを備えるかもしれない。また、ローカルサーバ１８は、４個のＭＰＵを備えるかもしれない。本実施例におけるリソースマネジメントシステム１０においては、さまざまな装置が備えるＭＰＵが、制御ユニットとして、全体としてのデータ処理を少しずつ分担することになる。
【００１３】
図２は、ユーザ端末１６のハードウエア構成を例示する。
ユーザ端末１６は、マイクロプロセッサユニット（ＭＰＵ）２２、グラフィックス処理ユニット（ＧＰＵ）４０、メインメモリ４２、補助記憶装置（ＨＤＤ）４４、ネットワーク制御部４６を備え、それぞれがメインバス３８を介して接続される。ネットワーク制御部４６は、ＬＡＮ１２またはインターネット１４を介して他のユーザ端末１６との間でデータを送受信する。
【００１４】
ＭＰＵ２２は、非対称型のマルチプロセッサユニットであり、１つのメイン処理ユニット（ＰＵ）２４と複数のサブ処理ユニット（ＳＰＵ）３０を有し、それぞれがＭＰＵ２２の内部バス３６を介して接続される。ＰＵ２４は、ＯＳや各ＳＰＵ３０の制御を処理する主制御装置としてのユニットであり、プロセッサ２６とローカルメモリ２８を含む。ローカルメモリ２８は、たとえばキャッシュメモリである。各ＳＰＵ３０は、積和計算を中心とする演算を処理する副制御装置としてのユニットであり、それぞれプロセッサ３２とローカルメモリ３４を含む。メインメモリ４２から読み出されたプログラムやデータがローカルメモリ３４に書き込まれてプロセッサ３２により実行される。各ＳＰＵ３０は、ＰＵ２４による制御の下で画像処理やデータ変換処理などの処理を分散して実行する。いずれのＳＰＵ３０が処理を実行するかや、処理内容および実行予定時間は、ＰＵ２４により管理される。
【００１５】
ＯＳとしての機能は主としてＰＵ２４によって実行されることになるが、その機能の一部は各ＳＰＵ３０に委譲されている。たとえば、各ＳＰＵ３０には、メモリアクセスや割り込み、プロセス間通信等のごく基本的な機能が実装される。本実施例において、ＰＵ２４は、各ＳＰＵ３０への処理の割り振りを中心とした制御を行い、ＳＰＵ３０がプログラムの実行主体となる。ＭＰＵ２２においてＯＳが起動すると、各ＳＰＵ３０でも実行スレッドが起動され、各ＳＰＵ３０はＰＵ２４から処理の割り当てを待機する。そして、ＰＵ２４からなんらかの処理の実行を指示されたときには、ＳＰＵ３０はメインメモリ４２等から必要なプログラム（以下、「要素プログラム」とよぶ）をローカルメモリ３４にロードして、処理を開始することになる。
【００１６】
例として、ロボットＡとロボットＢがそれぞれ歩行する様子をシミュレーションする場合を想定する。ＰＵ２４は、待機状態にあるＳＰＵ３０ａに対して、ロボットＡの歩行処理を実行するよう指示する。ロボットの歩行処理のための要素プログラムは、実行形式にてメインメモリ４２に用意されている。ＳＰＵ３０ａは、この要素プログラムをローカルメモリ３４にロードして、処理を開始する。一方、ＰＵ２４は、別のＳＰＵ３０ｂに対して、ロボットＢの歩行処理の実行を指示する。ＳＰＵ３０ｂも同じく、所定の要素プログラムをローカルメモリ３４にロードして、処理を開始する。ここで、ＳＰＵ３０ａが実行する要素プログラムとＳＰＵ３０ｂが実行する要素プログラムが時間的に並行して実行可能であれば、各ＳＰＵ３０によってそれぞれの要素プログラムが同時に実行されることになる。また、要素プログラムにおいて、ロボットは３分間歩行すると歩行を終了するとすれば、このときＳＰＵ３０は要素プログラムの実行を停止させ、再び待機状態に戻る。すると、ＰＵ２４は新たに別の処理をこのＳＰＵ３０に割り当てることができるようになる。ＰＵ２４、厳密には、ＰＵ２４が実行するＯＳは、支配下にある各ＳＰＵ３０の実行状態を監視している。このようにして、ＭＰＵ２２内における複数の計算資源、すなわち、ＳＰＵ３０が適宜、ＰＵ２４によって割り当てられた処理を実行することになる。
【００１７】
図３は、リソースマネジメントシステム１０におけるアプリケーションプログラムの実行方法を説明するための模式図である。
本実施例においては、リソースマネジメントシステム１０にて実行させたい処理内容は、ＸＭＬファイルに記述される。以下、このようなファイルに記述されているアプリケーションプログラムの実行内容を示す記述のことを「アプリケーションコード」とよぶ。アプリケーションコードは、ＸＭＬの所定のタグセットにて記述されてもよいし、スクリプト言語によって記述されてもよい。
同図の場合、「ｃ１」という名前の「component」という処理と、「ｃ２」という名前の「component」という処理を時間的に並行して実行するように記述されている。＜parallel＞というタグは、そのタグの要素として定義されている処理が時間的に並行して実行可能である旨を示すとして定義されているものとする。同様に、＜component＞というタグが示す処理がどのような処理内容を意味するかもあらかじめ定義されているものとする。＜component＞は、「人型のキャラクタを歩行させる処理」かもしれないし、単に「音声を出力する処理」かもしれない。アプリケーションコードを作成する段階では、タグに対応づけられた基本的な処理を組み合わせるだけで、全体としての処理を記述できる。また、＜parallel＞タグのように、その処理方法を記述することもできる。更に、各処理に要するＭＰＵ２２やＳＰＵ３０の数を指定できてもよい。
【００１８】
このようなアプリケーションコードをインタプリタ形式にて解釈するためのプログラム（以下、「メインプログラム」とよぶ）が、所定のユーザ端末１６に用意されているとする。このユーザ端末１６のＭＰＵ２２は、メインプログラムを実行して、与えられたアプリケーションコードを解釈し、アプリケーションコードに示される処理を複数の処理に分解する。たとえば、図３に示すアプリケーションコードの場合、「ｃ１」という名前の「component」という処理と、「ｃ２」という名前の「component」という処理の２つの処理を含んでいる。
【００１９】
これら２種類の処理は並列実行可能であるため、メインプログラムによって、ユーザ端末１６ａのＭＰＵ２２と、ユーザ端末１６ｂのＭＰＵ２２のそれぞれに各処理が割り当てられる。各ＭＰＵ２２は、「component」という処理を実行するためのプログラムを取得する。このようなプログラムは、各ユーザ端末１６のＨＤＤ４４にあらかじめ用意されていてもよいし、インターネット１４を介して、所定のサーバ装置からダウンロードしてきてもよい。こうして、メインプログラムによって処理を割り当てられたＭＰＵ２２は、割り当てられた処理の具体的内容を認識する。以下、ＭＰＵ２２が実行するプログラムのことを「単位プログラム」とよぶことにする。
【００２０】
ＭＰＵ２２は、こうして取得した「component」処理のための単位プログラムが、更に細分化できるかを検査する。たとえば、この単位プログラムがマルチスレッドプログラムの場合、ＰＵ２４は、各スレッドの処理をＳＰＵ３０に割り振ってもよい。ＳＰＵ３０は、割り当てられた処理を実行するための要素プログラムを取得し、ＰＵ２４からの指示に応じて、割り当てられた処理を実行する。たとえば、「componet」という処理が、「ロボットの歩行処理」を意味するならば、この処理は、更に、「ロボットの歩行経路を計算する処理」や「ロボットの手の動きを計算する処理」のように、小さな処理単位に分解できるかもしれない。ＰＵ２４は、このように細分化された処理をＳＰＵ３０に割り当てる。ＰＵ２４は、支配下にあるＳＰＵ３０だけでなく、別のＭＰＵ２２のＰＵ２４に対して単位プログラムにおける処理の一部を委譲してもよい。
このように、もともとのアプリケーションコードに記述されていた処理内容は順次細分化され、その処理主体も、複数のＭＰＵ２２、ひいては、複数のＳＰＵ３０に分散されていくことになる。
なお、アプリケーションコードにおいて定義されている「component」という処理は、必ずしも単位プログラムに対応するものでなくともよい。たとえば、アプリケーションコードにおいてタグにより定義される「component」のような処理単位自体が、ＳＰＵ３０において実行されることを前提とした要素プログラムに対応するものであってもよい。このように、アプリケーションコードにおいては、ＳＰＵ３０で処理できるサイズ（粒度）にて、処理単位が特定されてもよい。
【００２１】
図４は、本実施例における分散処理の階層構造を示す概念図である。
ここで「Models」とあるのは、アプリケーションコードを作成するために基本となる計算モデルである。たとえば、「Models」においては、さきほどの＜componet＞のように、多くのアプリケーションで利用可能な処理単位が定義される。アプリケーションコードの作成者は、「Models」が提供する機能や規則にしたがって、必要なパラメータを属性値などで与えながら、全体としての処理をデザインすることになる。あとは、この「Models」にしたがって、あらかじめ用意されているさまざまな単位プログラムがＭＰＵ２２によって自動的に分解・分散されるため、アプリケーションコードの作成者は、作成したアプリケーションコードの処理主体がどのＭＰＵ２２、更には、どのＳＰＵ３０となるかをほとんど意識せずに処理内容を定義できる。
同図において、「全体制御」として示されている部分は、アプリケーションそのものに対応したレイヤである。すなわち、このレイヤが、処理内容を定義するレイヤであり、その処理を実際に担うのが「部分制御」として示されているレイヤである。「全体制御」レイヤで、定義されるアプリケーションコードの実行主体が、「部分制御」レイヤで示されるＭＰＵ２２群、ひいては、ＳＰＵ３０群となる。
【００２２】
図５は、アプリケーションコードに記述された処理が複数の処理主体に分散されていく様子を説明するための模式図である。
説明を簡単にするため、ＸＭＬファイルには、処理Ａ、処理Ｂおよび処理Ｃという３つの処理が並行して実行されるようにアプリケーションコードが記述されているものとする。メインプログラムによって、処理ＡはあるＭＰＵ２２ａにディスパッチされる。ＭＰＵ２２ａのＰＵ２４ａは、ＭＰＵ２２ａのメインメモリ４２に処理Ａを実行するための単位プログラムをロードする。この単位プログラムは、更に、処理Ａ１、処理Ａ２および処理Ａ３という３つの処理を並行して実行するプログラムであるとする。
【００２３】
このとき、ＰＵ２４ａは、これら３つの処理を支配下のＳＰＵ３０に分配する。処理Ａ２、処理Ａ３は、それぞれ１つのＳＰＵ３０により処理可能であるとする。ここでは、ＰＵ２４ａは、処理Ａ２および処理Ａ３を支配下のＳＰＵ３０に割り当てる。ＳＰＵ３０は、割り当てられた処理に対応する要素プログラムを実行する。
【００２４】
処理Ａ１は、更に、処理Ａ１−１、処理Ａ１−２の２種類の処理を並列実行することにより実現される処理であるとする。このとき、ＰＵ２４ａは、処理Ａ１を、支配下にあるＳＰＵ３０に分配してもよいが、別のＭＰＵ２２ｂに委譲してもよい。ＭＰＵ２２ｂのＰＵ２４ｂは、処理Ａ１を実行するためのプログラムをメインメモリ４２にロードする。ＰＵ２４ｂは、このプログラムをＭＰＵ２２ａから受け取ってもよいし、他の装置から取得してもよい。ＰＵ２４ｂは、処理Ａ１−１と処理Ａ１−２を、支配下にあるＳＰＵ３０に割り当てる。
【００２５】
図６は、要素プログラム間において処理を連係させるためのインタフェースについて説明するための模式図である。
アプリケーションコードとして記述された処理は、複数の単位プログラムに分解される。ＭＰＵ２２のＰＵ２４は、更に、この単位プログラムを構成する要素プログラムを各ＳＰＵ３０に割り当てる。
【００２６】
各ＳＰＵ３０で実行される要素プログラムは、互いに、データ送受することができる。たとえば、ＳＰＵ３０ａの要素プログラムは、ＳＰＵ３０ｂが実行する要素プログラムの処理状態に応じて条件制御されるとする。このとき、ＳＰＵ３０ａの要素プログラムは、ＳＰＵ３０ｂの要素プログラムに対して処理状態を問い合わせる必要がある。そのため、要素プログラムは、自分の処理に対して外部からアクセスするためのインタフェースをメソッドとして提供する。
【００２７】
このインタフェースは、「限定公開インタフェース」と、「完全公開インタフェース」に分けることができる。互いに同じＭＰＵ２２に属するＳＰＵ３０は、基本的に、同一プロセス空間において別々のスレッドとしてそれぞれが担当する処理を実行する。「限定公開インタフェース」は、このような要素プログラム間におけるスレッド間通信を想定したインタフェースである。一方、互いに別々のＭＰＵ２２に属するＳＰＵ３０は、別々のプロセス空間に属する。「完全公開インタフェース」は、このような要素プログラム間におけるプロセス間通信を想定したインタフェースである。このようなインタフェースを介して、複数の要素プログラムを連係動作させることができる。
限定公開インタフェースの場合、メソッド呼び出しの形式にて、メッセージパッシングにより通信を行う。完全公開インタフェースも同様であるが、ＸＭＬ形式のリクエストを送信することにより、他のＭＰＵ２２に属するＳＰＵ３０に処理を割り当てることもできる。
【００２８】
図７は、要素プログラムの一例を示す図である。
ここで「MyModule1」クラスは、あるＳＰＵ３０においてインスタンス化されるクラスであり、「SpuModule」クラスを継承するクラスである。「SpuModule」クラスは、要素プログラムとして提供すべき基本的な機能を備えるクラスである。この「MyModule1」クラスが、ＳＰＵ３０において実行対象となる要素プログラムであるといえる。アクセス権が「PUBLIC」と指定されているメソッド「method1」は、限定公開インタフェースである。一方、アクセス権として「PROTECTED」と指定されているメソッド「method2」は、完全公開インタフェースである。
【００２９】
このMyModule1クラスのmethod2関数は、別のＳＰＵ３０において実行されている要素プログラムのインタフェースを利用しつつ、処理を実行している。method2関数は、まず、MyModule2クラスのプロキシオブジェクトを取得している。このMyModule2クラスは、同じＭＰＵ２２に属する別のＳＰＵ３０によってインスタンス化されるクラスである。MyModule1クラスやMyModule2クラスのように、SpuModuleクラスから継承されているクラスは、インスタンス化に際して、自オブジェクトにアクセスするためのプロキシコードを生成する。このプロキシコードは、メインメモリ４２に保持され、また、このプロキシコードの実行はＰＵ２４によってコントロールされる。
【００３０】
ＰＵ２４は、支配下にあるＳＰＵ３０にて、どのような要素プログラムが実行されているかを統括管理している。したがって、MyModule1クラスのmethod2関数は、ＰＵ２４上の実行プログラムが提供するgetModuleProxy関数を介して、MyModule2クラスにアクセスするためのプロキシオブジェクトを取得できる。こうして取得されたプロキシオブジェクトm2proxyの仲介により、method2関数はMyModule2クラスが提供しているasyncmethodやsyncmethod、delayedmethodといったメソッドを呼び出すことができる。ちなみに、asyncmethodは非同期型の呼び出し、syncmethodは同期型の呼び出し、delayedmethodは、遅延評価のための呼び出しである。
【００３１】
図８は、図７に示した要素プログラムの続きを示す図である。
method3関数は、MyProgramという単位プログラムにアクセスするためのプロキシオブジェクトprogproxyを取得している。たとえば、図７のmethod1のように他のＭＰＵ２２からのアクセスが可能な完全公開インタフェースは、ＰＵ２４によって他のＭＰＵ２２にも通知される。ＭＰＵ２２は、このような完全公開インタフェースに関する情報を互いに交換することができる。完全公開インタフェースに関する情報は、所定のユーザ端末１６が一元的に管理してもよいし、各ユーザ端末１６が情報を交換しあう形にて管理してもよい。図５に示した例の場合、処理Ａを実行するＭＰＵ２２ａは、処理Ａに対応する単位プログラムを実行形式に変換するときに、その単位プログラムに含まれている各要素プログラムの完全公開インタフェースに関する情報を他のＭＰＵ２２に通知する。したがって、MyModule1クラスのmethod3関数は、自らを管理するＰＵ２４に問い合わせることにより、MyProgramという別の単位プログラムにアクセスするためのプロキシオブジェクトを取得できる。こうして取得されたプロキシオブジェクトprogproxyを介して、MyProgramの完全公開インタフェースであるasyncmethodといったメソッドを呼び出すことができる。
【００３２】
更に、method3は、「ScriptA」という名前のＸＭＬファイルを指定して、executeScript関数を実行している。この「ScriptA」というＸＭＬファイルには所定の処理を実行するためのロジックが記述されている。このようなＸＭＬファイルのことを、「インタフェースコード」とよぶことにする。複数の要素プログラム間で実行される典型的な処理については、インタフェースコードとしてまとめておくことにより、要素プログラム自体のサイズをコンパクトにできる。インタフェースコードは、完全公開インタフェースに関する情報と同様に、所定のユーザ端末１６が一元的に管理してもよいし、各ユーザ端末１６が情報を交換しあう形にて管理してもよい。
【００３３】
図９は、インタフェースコードを示す図である。
このインタフェースコードでは、まず、MyProgramという単位プログラムの完全公開インタフェースであるmethod1を、argument1およびargument2という２つの引数を与えて実行指示している。また、method2は引数なしで実行指示されている。＜concurrent＞タグにより、これらの関数は同時並行的に実行指示可能であることが示されている。また、method3とmethod4は、＜sequence＞タグにより、method3の実行がなされたあとにmethod4が実行されるように指示されている。図８のexecuteScript関数の実行により、このインタフェースコードに記述されている処理が実行され、結果として、SpuModule1から他の要素プログラムの処理をコントロールできる。
【００３４】
インタフェースコードやアプリケーションコードは、図４のModelsによって規定される所定のタグセットによって記述される。
以上をふまえ、複数のＭＰＵ２２、更には、複数のＳＰＵ３０に処理を分散させるプログラムの例として、水槽の中での魚の動きをシミュレーション計算するというアプリケーションを題材として説明する。
【００３５】
図１０は、コンピュータグラフィックスにより魚の動きをシミュレーションした様子を示す模式図である。
水槽５０には、魚５２ａから魚５２ｇまでの７匹の魚がそれぞれ所定のパターンにしたがって泳ぐようなシミュレーションを想定する。水槽５０は、ボックスＡ〜ボックスＤまでの４つのボックスに分けて処理される。ＳＰＵ３０ａは、ボックスＡの中にいる魚の動きを計算する。同様に、ＳＰＵ３０ｂはボックスＢ、ＳＰＵ３０ｃはボックスＣ、ＳＰＵ３０ｄはボックスＤを担当する。また、ＳＰＵ３０ｅは、水槽５０の外部の光源５４を移動させる。魚５２は、光源５４によって照らされと、動きが変化するものとする。
【００３６】
図１１は、各ＳＰＵ３０間における処理の連係を説明するためのタイムチャートである。
ＳＰＵ３０ａからＳＰＵ３０ｅまでの５つのＳＰＵ３０は、それぞれ与えられた要素プログラムを同時並行的に実行する。時刻ｔｎ〜時刻ｔｎ＋１の期間において、ＳＰＵ３０ａはボックスＡの中における魚５２ｇの動きを計算する。同様に、ＳＰＵ３０ｂはボックスＢにおける魚５２ｆや魚５２ｅの動きを計算する。
【００３７】
ＳＰＵ３０ａによる計算の結果、ボックスＡにいた魚５２ｇが、ボックスＢに移動したとする。このとき、時刻ｔｎ＋１に、ＳＰＵ３０ａは、ＳＰＵ３０ｂが実行している要素プログラムのメソッドを介して、魚５２ｇがボックスＢに移動した旨を通知する。ＳＰＵ３０ｂは、時刻ｔｎ＋１〜時刻ｔｎ＋２の期間において、新たにボックスＢに入ってきた魚５２ｇも含めて、ボックスＢ内の魚５２の動きを計算することになる。
【００３８】
一方、時刻ｔｎ〜時刻ｔｎ＋１の期間においてＳＰＵ３０ｅが光源５４を移動させた結果、ＳＰＵ３０ｃが担当するボックスＣの魚の動きに影響が発生するとする。このとき、ＳＰＵ３０ｅが実行する要素プログラムは、ＳＰＵ３０ｃが実行する要素プログラムのメソッドを介して、ボックスＣが照射された旨を通知する。これにより、時刻ｔｎ＋１〜時刻ｔｎ＋２
までの期間においては、ＳＰＵ３０ｃは光源の影響を考慮にいれて、魚５２の動きを計算することになる。
【００３９】
図１２は、本シミュレーションで使用されるプログラム例を示す。本プログラム例では、初期配置処理（一点鎖線枠で囲むＡ部分）、シミュレーション実行処理（一点鎖線枠で囲むＢ部分）を順次実行する。同図における、＜Sequence＞タグは、以下の処理、すなわち、初期配置処理Ａとシミュレーション実行処理Ｂがシーケンシャルに実行される旨を示すタグである。
初期配置処理Ａでは、図１０中の各ボックスＡ〜Ｄ、光源５４に関するシミュレーション処理がＳＰＵ３０ａ〜３０ｅに割り当てられ、各ＳＰＵ３０上では割り当てられたシミュレーションを実行するための初期化が並行して行われる。同図における＜Concurrent＞タグは、Ａａ〜Ａｌに示す各処理が並列実行される旨を示すタグである。
本例では、水槽５０の初期配置に相当する破線枠で囲まれたモジュールＡａ〜ＡｄがＳＰＵ３０ａ〜３０ｄにそれぞれ割り当てられ、光源５４の初期配置に相当する破線枠で囲まれたモジュールＡｌがＳＰＵ３０ｅに割り当てられている。なお、初期化の際、各ＳＰＵ３０には、自己がシミュレーションするボックスと隣接するボックスをシミュレーションするプログラムＩＤなど、シミュレーション実行に必要な各種値が与えられる。
シミュレーション実行Ｂでは、ＳＰＵ３０ｅ上で光源移動のシミュレーションモジュールＢｌが実行され、この光源シミュレーション結果に基づいて、各ＳＰＵ３０ａ〜３０ｄ上で各ボックス内のシミュレーションモジュールＢａ〜Ｂｄが並行実行され、この一連の処理が＜Loop＞タグの指示により繰り返される。
本プログラム例は、メインプログラムの所定ルーチンによりその内容が解析されて各モジュールに分解され、各モジュールが使用可能なＳＰＵ３０に割り当てられることとなる。メインプログラムは、いずれかのＭＰＵ２２上で実行されるプログラムである。なお、並行実行されるべきプログラムモジュールの個数が使用可能なＳＰＵ３０の個数よりも多いときは、ＳＰＵ３０を時分割で利用すればよい。また、メインプログラムは、ＳＰＵ３０同士の結合度またはプログラムモジュールのプライオリティを参照して、プログラムモジュールを各ＳＰＵ３０に分配してもよい。
【００４０】
このような態様によれば、水槽５０における複数の魚５２の動きを計算するというシミュレーションが５つのＳＰＵ３０の同時並行的な処理によって実現される。このような場合、簡単なアプリケーションコードにて、複雑な処理を複数の計算資源に簡単に分散させることができる。
【００４１】
以上に示した処理方法によれば、ＸＭＬ等の構造化文書ファイルに記述された処理内容が、複数のＰＵ２４によって分散され、更に多数のＳＰＵ３０に処理が割り振られていくことになる。そのため、アプリケーションコードの作成負担を軽減しつつも、処理を複数の計算資源に分散させるための好適なスキームを提供することができる。複数のＭＰＵ２２が使えるときには各ＭＰＵ２２に処理を分散させ、単一のＭＰＵ２２しか使えないときには各処理を時分割処理するとしてもよい。
各ＰＵ２４は、単位プログラムや要素プログラムへの処理分解、各プログラムのインタフェースの登録、各プログラムの割り当て、実行制御、各プログラムの実行主体の登録・検索等を協働して行うことになる。このため、各ＭＰＵ２２のＰＵ２４群が連係して処理分散を実行し、それぞれの支配下にあるＳＰＵ３０が連係して実際の処理を実行することになる。
【００４２】
請求項に記載の処理分解部や分配部の機能は、本実施例においては、いずれかのＭＰＵ２２上で実行されるメインプログラムの所定ルーチンによって実現される。また、処理分解部や分配部の機能を提供するＭＰＵ２２は、リソースマネジメントシステム１０に含まれる装置に搭載される任意のＭＰＵ２２であってもよいが、メインプログラムを実行するための専用装置に搭載されもよい。
これら請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【００４３】
以上、本発明を実施例をもとに説明した。この実施例はあくまで例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【図面の簡単な説明】
【００４４】
【図１】リソースマネジメントシステムの構成を模式的に示す図である。
【図２】ユーザ端末のハードウエア構成を例示する図である。
【図３】リソースマネジメントシステムにおけるアプリケーションプログラムの実行方法を説明するための模式図である。
【図４】本実施例における分散処理の階層構造を示す概念図である。
【図５】アプリケーションコードに記述された処理が複数の処理主体に分散されていく様子を説明するための模式図である。
【図６】要素プログラム間において処理を連係させるためのインタフェースについて説明するための模式図である。
【図７】要素プログラムの一例を示す図である。
【図８】図７に示した要素プログラムの続きを示す図である。
【図９】インタフェースコードを示す図である。
【図１０】コンピュータグラフィックスにより魚の動きをシミュレーションした様子を示す模式図である。
【図１１】各ＳＰＵ間における処理の連係を説明するためのタイムチャートである。
【図１２】本シミュレーションで使用されるプログラム例を示す図である。
【符号の説明】
【００４５】
１０  リソースマネジメントシステム、  １２  ＬＡＮ、  １４  インターネット、  １６  ユーザ端末、  １８  ローカルサーバ、  ２０  ネットワークサーバ、  ２２  ＭＰＵ、  ２４  ＰＵ、  ２６  プロセッサ、  ２８  ローカルメモリ、  ３０  ＳＰＵ、  ３２  プロセッサ、  ３４  ローカルメモリ、  ３６  内部バス、  ３８  メインバス、  ４０  ＧＰＵ、  ４２  メインメモリ、  ４４  ＨＤＤ、  ４６  ネットワーク制御部、  ５０  水槽、  ５２  魚、  ５４  光源。
【図１】
0004402051.tif 000002
【図２】
0004402051.tif 000003
【図３】
0004402051.tif 000004
【図４】
0004402051.tif 000005
【図５】
0004402051.tif 000006
【図６】
0004402051.tif 000007
【図７】
0004402051.tif 000008
【図８】
0004402051.tif 000009
【図９】
0004402051.tif 000010
【図１０】
0004402051.tif 000011
【図１１】
0004402051.tif 000012
【図１２】
0004402051.tif 000013