(57)【要約】【課題】ホスト計算機からクライアント計算機へ転送する計算プログラムのデータ転送量を少なくし、かつ、クライアント計算機に高速に計算を実行させる。【解決手段】ホスト計算機１００は、分散処理させるプログラムのソースファイルのコンパイルを行い、そのコンパイルされた結果の実行ファイルを実行する。この実行により、インスタンス化、あるいは、関数コールの実行の最適化された順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記録した手続き記録ファイルが生成される。クライアント計算機２００は、ホスト計算機１００から受信した手続き記録ファイルを解釈・実行するアプリケーションを実行する。このアプリケーションでは、記録時のアドレス、クラス、関数名に応じてクラスのインスタンス化、関数コールを行うコードを記述し、実行する。クライアント計算機２００は、ホスト計算機１００へ実行結果を返送する。【選択図】図１
2009087128.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機と、分散して処理を実行し、前記ホスト計算機へ処理結果を通知する複数のクライアント計算機とからなる分散環境用プログラム実行システムにおいて、
前記ホスト計算機は、
ソースファイルをコンパイルして生成された実行ファイルを実行し、この実行により得られたクラスのインスタンス化、あるいは、関数コールの実行の順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記述した手続き記録ファイルを生成して、クライアント計算機へ送信するプログラム実行部と、
前記プログラム実行部により送信した手続き記録ファイルを、前記クライアント計算機において実行した処理結果を受信する受信部とを備え、
前記クライアント計算機は、
前記ホスト計算機から受信した手続き記録ファイル内に記述されている情報を順に読み出し、当該クライアント計算機において実行可能な記述形式に変換して実行するプログラム再生部と、
前記プログラム再生部による実行結果をホスト計算機へ通知する通知手段とを備える、
ことを特徴とする分散環境用プログラム実行システム。
【請求項２】
前記プログラム実行部は、クラスのインスタンス化時には、コンストラクタ関数を特定する情報と、コンストラクタヘ渡された引数のメモリ上のアドレス、及び、オブジェクトが実際に記録されているアドレスの情報とを、関数コール時には、関数を特定する情報と、渡された引数のアドレスの情報とを、メンバ関数コール時には、メンバ関数を特定する情報と、オブジェクトが実際に記録されているアドレス、及び、引数のアドレスの情報とを、前記手続き記録フィアルに書き込むことを特徴とする請求項１に記載の分散環境用プログラム実行システム。
【請求項３】
前記ソースファイルは、繰り返し制御文を含まないことを特徴とする請求項１または請求項２に記載の分散環境用プログラム実行システム。
【請求項４】
ホスト計算機と、分散して処理を実行し、前記ホスト計算機へ処理結果を通知する複数のクライアント計算機とからなる分散環境用プログラム実行システムにおける分散環境用プログラム実行方法であって、
前記ホスト計算機が、
ソースファイルをコンパイルして生成された実行ファイルを実行し、この実行により得られたクラスのインスタンス化、あるいは、関数コールの実行の順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記述した手続き記録ファイルを生成して、クライアント計算機へ送信する過程と、
前記クライアント計算機が、
前記ホスト計算機から受信した手続き記録ファイル内に記述されている情報を順に読み出し、当該クライアント計算機において実行可能な記述形式に変換して実行する過程と、
前記実行による処理結果をホスト計算機へ通知する過程と、
前記ホスト計算機が、
前記クライアント計算機から、送信した手続き記録ファイルを実行した処理結果を受信する過程と、
を有することを特徴とする分散環境用プログラム実行方法。
【請求項５】
ホスト計算機と、分散して処理を実行し、前記ホスト計算機へ処理結果を通知する複数のクライアント計算機とからなる分散環境用プログラム実行システムにおける前記ホスト計算機としてのコンピュータを、
ソースファイルをコンパイルして生成された実行ファイルを実行し、この実行により得られたクラスのインスタンス化、あるいは、関数コールの実行の順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記述した手続き記録ファイルを生成して、クライアント計算機へ送信するプログラム実行部、
前記プログラム実行部により送信した手続き記録ファイルを、前記クライアント計算機において実行した処理結果を受信する受信部、
として機能させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散環境用プログラム実行システム及び方法、ならびに、コンピュータプログラムに関する。
【背景技術】
【０００２】
従来、ホスト計算機がネットワークで接続される複数のクライアント計算機を計算資源として利用することにより、仮想的な１つのコンピュータとして高速の処理を行うグリッドコンピューティングシステムでは、以下の（１）〜（４）のようにクライアント計算機に処理を実行させていた。
（１）図９に示すように、ホスト計算機において、問題の解を求めるためのソースプログラムのコンパイルを行って実行可能形式のファイル（実行ファイル）を生成した後、この生成した実行フィアルをクライアント計算機に送信する。クライアント計算機は、受信した実行ファイルを、クライアント計算機毎に異なるデータを用いて実行することによって得られた計算結果をホスト計算機へ返送する。あるいは、ホスト計算機は、生成した実行ファイルを、ＬＨＡ、ＺＩＰ等のデータ圧縮プログラムを使用してデータ圧縮することによりデータ量を軽減した後、その圧縮されたデータをクライアント計算機へ転送し、クライアント計算機側では受信した圧縮データの展開を行って得られた実行可能ファイルを実行させることによって計算を実行する。
（２）図１０に示すように、ホスト計算機において問題の解を求めるためのソースコードを生成してクライアント計算機へ転送し、クライアント計算機側では、受信したソースコードのコンパイル処理を行い、生成された実行ファイルを、クライアント計算機毎に異なるデータを用いて実行することによって得られた計算結果をホスト計算機へ返送する。
（３）Java（登録商標）言語におけるVirtual Machine（ＶＭ）用コード生成・実行方法や、Microsoft社の「.NETフレームワーク」におけるＭＳＩＬ（Microsoft Intermediate Language）生成・実行方法等では、機械語とほぼ１対１対応の中間コードをホスト計算機において生成し、クライアント計算機では、この中間コードをマシン語に変換して実行させている。
（４）ホスト計算機においてインタプリタ方式プログラミング言語から中間言語を生成し、クライアント計算機に配信して実行させる。
【０００３】
また、特許文献１には、複数のプロセッサが協調して処理を進める分散処理システムにおいて、プログラムを各プロセッサに依存しない仮想コードと、各プロセッサに特有のネイティブ・コードに分離して配布し、クライアントとなる各プロセッサは、逐次仮想コードを読み込んで実行し、ネイティブ・コードによる処理の実行を検出した際には、ローカルなライブラリと動的にリンクを張って処理を行う技術について記載されている。
【特許文献１】特願平９−１４６９００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
グリッドコンピューティングシステムにおいて、最適化問題のように特に速度が要求される問題を並列分散環境において計算を行って解を求める場合に、ユーザが問題を入力するホスト計算機から、実際に計算を行うクライアント計算機へ計算プログラムデータを転送する際、その転送量が少なく、かつクライアント計算機における計算実行速度が高速であることが要求される。しかし、ソースファイルをコンパイル・リンクした後の実行ファイルは一般に巨大であり、非常にデータ量が多くなる。そのため、（１）の技術では、ネットワークを介しての実行ファイルの転送が頻繁な場合、全体の時間的なコストが増大する。特に、ソースファイルの修正が頻繁である場合には通信量が増大し、全体の計算時間が長くなってしまう。また、データ圧縮して送信する場合でも、データの圧縮、及び、展開に長時間かかってしまうという問題がある。
【０００５】
一方、（２）のように、クライアント計算機側でソースコードのコンパイルを行う技術では、クライアント計算機側にコンパイラを追加購入して用意しておく必要があるため、コストがかかってしまう。加えて、クライアント計算機側でのコンパイル・リンクには、処理時間が長くかかってしまい、時間的コストも増大する。
また、（３）のように、ホスト計算機において、機械語に近いレベルで中間コードを生成してクライアント計算機へ送信するため、データ転送量が大きくなってしまうという問題がある。（４）のように、ホスト計算機において高級言語から中間言語を生成してクライアント計算機へ配信する技術では、データ転送量は少ないものの、クライアント計算機で中間コードに応じて逐次実行するために実行速度が遅い、という問題がある。
また、特許文献１の技術では、仮想コード、ネイティブ・コードを意識しながらプログラムを生成しなければならず、プログラムの作成や更新に時間がかかってしまう。
【０００６】
本発明は、このような事情を考慮してなされたもので、その目的は、ホスト計算機からクライアント計算機へ転送する計算プログラムのデータ転送量が少なく、かつ、クライアント計算機が高速に計算を実行することができる分散環境用プログラム実行システム及び方法、ならびに、コンピュータプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
この発明は、上記の課題を解決すべくなされたもので、請求項１に記載の発明は、ホスト計算機と、分散して処理を実行し、前記ホスト計算機へ処理結果を通知する複数のクライアント計算機とからなる分散環境用プログラム実行システムにおいて、前記ホスト計算機は、ソースファイルをコンパイルして生成された実行ファイルを実行し、この実行により得られたクラスのインスタンス化、あるいは、関数コールの実行の順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記述した手続き記録ファイルを生成して、クライアント計算機へ送信するプログラム実行部と、前記プログラム実行部により送信した手続き記録ファイルを、前記クライアント計算機において実行した処理結果を受信する受信部とを備え、前記クライアント計算機は、前記ホスト計算機から受信した手続き記録ファイル内に記述されている情報を順に読み出し、当該クライアント計算機において実行可能な記述形式に変換して実行するプログラム再生部と、前記プログラム再生部による実行結果をホスト計算機へ通知する通知手段とを備える、ことを特徴とする分散環境用プログラム実行システムである。
【０００８】
また、本発明は、上述する分散環境用プログラム実行システムであって、前記プログラム実行部は、クラスのインスタンス化時には、コンストラクタ関数を特定する情報と、コンストラクタヘ渡された引数のメモリ上のアドレス、及び、オブジェクトが実際に記録されているアドレスの情報とを、関数コール時には、関数を特定する情報と、渡された引数のアドレスの情報とを、メンバ関数コール時には、メンバ関数を特定する情報と、オブジェクトが記録されているアドレス、及び、引数のアドレスの情報とを、前記手続き記録フィアルに書き込むことを特徴とする。
【０００９】
また、本発明は、上述する分散環境用プログラム実行システムであって、前記ソースファイルは、繰り返し制御文を含まないことを特徴とする。
【００１０】
また、本発明は、ホスト計算機と、分散して処理を実行し、前記ホスト計算機へ処理結果を通知する複数のクライアント計算機とからなる分散環境用プログラム実行システムにおける分散環境用プログラム実行方法であって、前記ホスト計算機が、ソースファイルをコンパイルして生成された実行ファイルを実行し、この実行により得られたクラスのインスタンス化、あるいは、関数コールの実行の順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記述した手続き記録ファイルを生成して、クライアント計算機へ送信する過程と、前記クライアント計算機が、前記ホスト計算機から受信した手続き記録ファイル内に記述されている情報を順に読み出し、当該クライアント計算機において実行可能な記述形式に変換して実行する過程と、前記実行による処理結果をホスト計算機へ通知する過程と、前記ホスト計算機が、前記クライアント計算機から、送信した手続き記録ファイルを実行した処理結果を受信する過程と、を有することを特徴とする分散環境用プログラム実行方法である。
【００１１】
また、本発明は、ホスト計算機と、分散して処理を実行し、前記ホスト計算機へ処理結果を通知する複数のクライアント計算機とからなる分散環境用プログラム実行システムにおける前記ホスト計算機としてのコンピュータを、ソースファイルをコンパイルして生成された実行ファイルを実行し、この実行により得られたクラスのインスタンス化、あるいは、関数コールの実行の順序、及び、インスタンス化あるいは関数コール時の引数に関する情報を記述した手続き記録ファイルを生成して、クライアント計算機へ送信するプログラム実行部、前記プログラム実行部により送信した手続き記録ファイルを、前記クライアント計算機において実行した処理結果を受信する受信部、として機能させることを特徴とするコンピュータプログラムである。
【発明の効果】
【００１２】
本発明によれば、高速実行が可能であり、かつ、データ量が小さな中間コードをクライアント計算機で生成し、クライアント計算機へ送信することで、クライアント計算機とホスト計算機間のデータ通信量を軽減するとともに、クライアント計算機において、計算時間をほとんど増大させずに計算を実行することが可能となる。また、クライアント計算機の実装コードや記述形式を意識する必要がないため、プログラムの作成・変更も容易である。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して本発明の一実施の形態を説明する。
図１は、本発明の一実施の形態による分散環境用プログラム実行システムの動作概要を示す図である。
本実施の形態では、ホスト計算機１００において、複数のクライアント計算機２００に分散処理させるプログラムのソースファイルをコンパイルし、そのコンパイルされた結果の実行ファイルを、ホスト計算機１００用のデータファイルを用いて実行する。このとき、既存クラスライブラリに追加された手続き記録機能により、最適化された順番の、クラスのインスタンス化情報や、関数コール順、引数情報を記録した、高速計算のための情報、すなわち、手続き記録ファイルが生成される。ホスト計算機１００は、この生成された手続き記録ファイルをクライアント計算機２００へ送信する。これにより、クライアントヘ転送するデータ転送量を少なくし、かつ、クライアント計算機２００における計算処理を短縮することを実現する。なお、クラスライブラリとは、複数のソフトウェアによって共通して部品として使用することのできるプログラムを、オブジェクト指向プログラミング言語により記載した汎用的なクラスの集合である。
【００１４】
ホスト計算機１００におけるソースプログラムの開発には、Ｃ＋＋等のオブジェクト指向言語を使用し、既存の繰り返し制御文（For文、While文）を含まないものとする。ホスト計算機１００において、中間コードである手続き記録ファイルを生成するには、クラスのインスタンス化時（コンストラクタコール時）に、コンストラクタ関数を特定するためのコンストラクタＩＤ、コンストラクタヘ渡された引数のメモリ上のアドレス、thisポインタ（オブジェクトが実際に記録されているアドレス）の情報を記録する。また、関数コールがあった場合には、コールされた関数を特定する関数ＩＤ、渡された引数のアドレスの情報を記録する。またメンバ関数コールがあった場合には、コールされたメンバ関数を特定するメンバ関数ＩＤ、thisポインタ、引数のアドレスを記録するコードを、ソースコードに埋め込んだものを記録する。
【００１５】
このように順次記録した手続き記録ファイルがホスト計算機１００からクライアント計算機２００へ転送され、クライアント計算機２００では、受信した手続き記録ファイルを解釈・実行するアプリケーション（再生プログラム）を実行する。このアプリケーションでは、記録時のアドレス、クラス、関数名に応じてクラスのインスタンス化、関数コールを行うコードを記述し、実行する。このようなアプリケーション機能を持たせることで、コンパイル時の最適化がそのまま反映され、ホスト計算機１００からクライアント計算機２００への通信量を少なくしたまま、計算速度をほとんど落とすことなく、計算処理を実行することが可能となる。
【００１６】
上記により、１つのコンパイラ、１つのクラスライブラリを持つホスト計算機１００において、既存の繰り返し制御文（For文、While文）を含まない手続き記録ファイルを生成し、この生成した手続き記録ファイルを複数台のクライアント計算機２００にネットワークを介し転送して、異なるパラメータ設定のもとで実行させ、その結果を得る。よって、既存のライブラリの変更が最小限で済みかつ通信量も少なく、時間的コストが削減可能である。加えて、コンパイラやライセンスの追加購入の必要もなく、手続き記録ファイルの作成にも、クラスライブラリに少しのコードを追加するのみで実装が可能であり、プレイバックも実装の実現が容易である。
以下、本実施の形態の分散環境用プログラム実行システムについて、詳細について説明する。
【００１７】
図２は、本発明の一実施の形態による分散環境用プログラム実行システムの構成を示す機能ブロック図であり、本発明と関係する機能ブロックのみ抽出して示してある。分散環境用プログラム実行システムは、ホスト計算機１００と、通信路３００を介して接続される複数台のクライアント計算機２００とからなる。ここでは、複数のクライアント計算機２として、ｎ台のクライアント計算機２００−１〜２００−ｎが接続されているものとする。
【００１８】
ホスト計算機１００は、入力装置１１０、記憶部１２０、プログラム実行部１３０、送受信装置１４０、出力装置１５０及びコンパイラ１６０を備える。
入力装置１１０は、キーボードやマウスなど、ユーザからの操作入力を行う装置である。出力装置１５０は、ＬＣＤ（Liquid Crystal Display）やＣＲＴ（cathode ray tube）などのディスプレイである。送受信装置１４０は、通信路３００を介してクライアント計算機２００とデータを送受信する。コンパイラ１６０は、ソースファイルをコンパイルして、実行ファイルを生成する。記憶部１２０は、ソースファイル、実行ファイル、クラスライブラリに属するライブラリファイル、ホスト計算機１００およびクライアント計算機２００それぞれにおける計算実行時のデータを記録したデータファイル、手続き記録ファイル、結果記録ファイル等を記憶する。
【００１９】
プログラム実行部１３０は、コンパイラ１６０によって生成された実行ファイルを記憶部１２０から読み込み、実行する。また、プログラム実行部１３０は、入力装置１１０からユーザの入力を受付け、その入力に応じて記憶部１２０内に記憶されているソースファイルを編集したり、当該ホストホスト計算機１００およびクライアント計算機２００それぞれがプログラム実行時に使用するデータファイルを記憶部１２０内のデータファイルに書き込んだりする機能を有する。さらに、プログラム実行部１３０は、記憶部１２０内に記憶されている手続き記録ファイルおよびデータファイルを、通信路３００を介して１台以上のクライアント計算機２００へ送信するよう送受信装置１４０へ指示したり、通信路３００を介してクライアント計算機２００から送信された結果記録ファイルを送受信装置１４０により受信し、記憶部１２０に記憶したりする機能、結果記録ファイルの内容を出力装置１５０により表示し、ユーザに知らせる機能を有する。
【００２０】
クライアント計算機２００は、記憶部２２０、プログラム再生部２３０、送受信装置２４０を備える。
記憶部２２０は、ホスト計算機１００から受信した手続き記録ファイルや、データファイルを格納するとともに、プログラム再生部２３０による処理の実行結果を示す結果記録ファイルを記憶する。送受信装置２４０は、通信路３００を介してホスト計算機１００とデータを送受信する。プログラム再生部２３０は、関数名と、所定の処理内容を対応付けた、インタプリタ型の実行環境を持ち、順次手続き記録ファイルの内容を読み込み、実行する。この所定の処理は、オブジェクトのコンストラクタや通常の関数計算を含む。さらに、プログラム再生部２３０は、通信路３００及び送受信装置２４０を介して受信した手続き記録ファイルおよびデータファイルを記憶部２２０に書き込む機能や、送受信装置２４０及び通信路３００を介して、結果記録ファイルをホスト計算機１００へ送信する機能を有する。
【００２１】
次に、本実施の形態による分散環境用プログラム実行システムの動作手順について詳細に説明する。
ここでは、以下に示す２行２列の行列Ａと、２次元列ベクトルであるＣが与えられたときに、Ｄ＝Ａ×Ｂ＋Ｃを計算し、'output.dat'という名前のファイルに、計算結果であるベクトルＤの内容を書き込むものとする。ただし、ベクトルＢは以下のような２次元列ベクトルであり、データファイル'input.dat'から読み込んで計算に使用する。この、データファイル'input.dat'の内容は各クライアント計算機２００毎に異なる。
【００２２】
【数１】
2009087128.tif 000003
【００２３】
図３に、ソースファイルを示す。同図に示すソースファイルの１行目には、クラスライブラリとしてlibraryClass.hを使用することが記述されており、４行目「Matrix22 A=(1.0, 2.0, 3.0, 4.0);」〜８行目「Vector2 D;」まではコンストラクタである。９行目「D＝A＊B+C;」は、Ｄを算出する処理であり、１０行目「Write('output.dat', D);」は、算出したＤを'output.dat'というファイルに書き込む処理である。この'output.dat'は、結果記録ファイルである。
【００２４】
図４は、ホスト計算機１００、クライアント計算機２００それぞれが処理を実行する際に用いる個別のデータを記述したデータファイル'input.dat'であり、ベクトルＢが記述されている。また、図５は、ホスト計算機１００によって生成され、クライアント計算機２００へ送信される手続き記録ファイルである。詳細は後述する。
【００２５】
図６は、本実施の形態の分散環境用プログラム実行システムの処理フローを示す。
＜ステップＳ１＞：
図６において、ホスト計算機１００のプログラム実行部１３０は、入力装置１１０からのユーザの入力を受付け、その入力に従って記憶部１２０に記憶されているソースファイルを編集する。編集されたソースファイルは再び記憶部１２０に記憶される。こうして生成、記憶されたソースファイルの例が、図３である。
【００２６】
＜ステップＳ２＞：
次に、プログラム実行部１３０は、ユーザにより、入力装置１１０から、ホスト計算機１００及びクライアント計算機２００それぞれに対応したデータ（ベクトルＢの値）の入力を受け、その入力されたデータをデータファイルとして記憶部１２０に書き込む。このデータファイルの例が、図４である。
【００２７】
＜ステップＳ３＞：
コンパイラ１６０は、記憶部１２０に記憶されているソースファイルおよびライブラリファイルをコンパイル及びリンクし、実行ファイルを生成して、記憶部１２０に書き込む。
【００２８】
＜ステップＳ４＞：
プログラム実行部１３０は、記憶部１２０に記憶されている実行ファイルに、当該ホスト計算機１００用のデータファイル（ホスト計算機用'input.dat'ファイル）内に記述されているデータ（5.0 6.0）を与え、実行する（ステップＳ４）。プログラム実行部１３０がプログラムを実行することにより、クラスライブラリに属するライブラリファイルが実行され、このときにライブラリファイル内に記述されている手続き記録処理が実行され、手続き記録ファイルに、実行された関数名、引数の型、引数の値が記録される。ここで、実行された関数がコンストラクタだった場合、thisアドレス（オブジェクトが配置された計算機のメモリ上の位置）の値も記録する。
以下に、手続き記録ファイルの生成処理について、具体的に説明する。
【００２９】
図７は、図６のステップＳ４において、図３に示すソースファイル、図４に示すホスト計算機用のデータファイルを用い、図５に示す手続き記録ファイルを生成する処理手順を示す。
【００３０】
＜ステップＳ４−１＞：
まず、プログラム実行部１３０が、ソースファイルに記載されたプログラムの「Matrix22 A=(l.0, 2.0, 3.0, 4.0);」の部分を実行するときには、Matrix22型のオブジェクトが定義され、かつ引数がfloat型4つのため、libraryClass.hのクラスライブラリに登録されているMatrix22::Matrix22(float, float, float, float)関数が実行される。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに「Matrix22::Matrix22,ffff,1.0,2.0,3.0,4.0,0x111111」が記録される。ここで、ffffは、Matrix22::Matrix22関数のうち、float型引数を4つ取る関数であることを意味している。その後ろの1.0,2.0,3.0,4.0は、４つの引数の値、最後の0x111111は、この関数を呼び出したオブジェクトAのthisアドレスである。thisアドレスのため、値は、0x111111であるとは限らない。
【００３１】
＜ステップＳ４−２＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムの「Vector2 B;」の部分を実行するときには、Vector2型のオブジェクトが定義され、かつ引数がないため、libraryClass.hのクラスライブラリに登録されているVector2::Vector2()関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに、「Vector2::Vector2,v,0x222222」が記録される。ここで、vは、Vector2::Vector2関数のうち、引数を取らない(vacant)関数ということを意味している。最後の0x222222は、この関数を呼び出したオブジェクトBのthisアドレスである。thisアドレスのため、値は、0x222222であるとは限らない。
【００３２】
＜ステップＳ４−３＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムの「Read(B,'input.dat')」の部分を実行するときには、引数がVector2型のオブジェクトBと、char*型の'iput.dat'のため、libraryClass.hのクラスライブラリに登録されているRead(Vector2,char*)関数を実行する。プログラム実行部１３０がこの関数を実行することにより、ファイル'input.dat'から5.0  6.0の数値を読み込み、オブジェクトBが記置されているアドレス0x222222の位置に、これらの値を格納する。そして、手続き記録ファイルに、「Read,Vec2ch*,0x222222,'input.dat'」が記録される。ここで、Vec2ch*は、Read関数のうち、引数がVector2型とchar*型を取る関数ということを意味している。
【００３３】
＜ステップＳ４−４＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムの「Vector2 C=(7.0, 8.0); 」の部分を実行するときには、Vector2型のオブジェクトが定義され、かつ引数がfloat型２つのため、libraryClass.hのクラスライブラリに登録されているVector2::Vector2(float,float)関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに、「Vector2::Vector2,ff,7.0,8.0,0x444444」が記録される。ここで、ffは、Vector2::Vector2関数のうち、float型引数を２つ取る関数ということを意味している。最後の0x444444は、この関数を呼び出したオブジェクトCのthisアドレスである。thisアドレスのため、値は、0x444444であるとは限らない。
【００３４】
＜ステップＳ４−５＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムの「Vector2 D;」の部分を実行するときには、Matrix22型のオブジェクトが定義され、かつ引数がないため、libraryClass.hのクラスライブラリに登録されているVector2::Vector22関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに、「Vector2::Vector2,v,0x555555」が記録される。ここで、vは、Vector2::Vector2関数のうち、引数を取らない(vacant)関数ということを意味している。最後の0x555555は、この関数を呼び出したオブジェクトDのthisアドレスである。thisアドレスのため、値は、0x555555であるとは限らない。
【００３５】
＜ステップＳ４−６＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムの「A*B」の部分を実行するときには、Matrix22型のオブジェクトに対する*演算であり、引数がVector2型のため、libraryClass.hのクラスライブラリに登録されているMatrix22::operator*()関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに、「Matrix22::operator*,Vec2,0x222222,0x111111」が記録される。ここで、Vec2は、Matrix22::operator*()関数のうち、Vector2型引数を１つ取る関数ということを意味している。0x222222は、引数がオブジェクトBのため、Bの置かれたアドレスである。最後の0x111111は、この関数を呼び出したオブジェクトAのアドレスである。
また、プログラム実行部１３０は、Matrix22::operator*()関数の中でA*Bの演算結果を格納するためのVector2型のオブジェクトを新たに生成し、演算結果を格納するときに、libraryClass.hのクラスライブラリに登録されているVector2::Vector2(float,float)関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに、「Vector2::Vector2,ff,17.0,39.0,0x777777」が記録される。ここで、ffは、Vector2::Vector2関数のうち、float型引数を２つ取る関数ということを意味している。最後の0x777777は、この関数を呼び出したオブジェクトのthisアドレスである。thisアドレスのため、値は、0x777777であるとは限らない。
【００３６】
＜ステップＳ４−７＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムの「(A*B)+C」の部分を実行するときには、Vector2型のオブジェクトに対する＋演算であり、引数がVector2型のため、libraryClass.hのクラスライブラリに登録されているVector2::operator+(Vector2)関数を実行する。この関数の実行により、手続き記録ファイルに、「Vector2::operator+,Vec2,0x444444,0x777777」が記録される。ここで、Vec2は、Vector2::operator+()関数のうち、Vector2型引数を１つ取る関数ということを意味している。0x444444は引数であるオブジェクトCのアドレス、最後の0x777777は、この関数を呼び出したオブジェクトのアドレスである。
また、プログラム実行部１３０は、Vector2::operator+(Vector2)関数の中で(A*B)+Cの演算結果を格納するためのVector2型のオブジェクトを新たに生成し、演算結果を格納するときに、Vector2::Vector2(float,float)関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに，「Vector2::Vector2,ff,24.0,47.0,0x888888」を記録する。ここで、ffは、Vector2::Vector2関数のうち、float型引数を２つ取る関数ということを意味している。最後の0x888888は、この関数を呼び出したオブジェクトのthisアドレスである。thisアドレスのため、値は、0x888888であるとは限らない。
【００３７】
＜ステップＳ４−８＞：
プログラム実行部１３０が、ソースファイルに記載されたプログラムのD=(A*B+C)の部分を実行するときには、Vector2型のオブジェクトに対する=演算であり、引数がVector2型のため、Vector2::operator=(Vector2)関数を実行する。プログラム実行部１３０がこの関数を実行することにより、手続き記録ファイルに，「Vector2::operator=,Vec2,0x888888,0x555555」が記録される。ここで、Vec2は、Vector2::operator=()関数のうち、Vector2型引数を１つ取る関数ということを意味している。0x888888は引数であるオブジェクトのアドレス、最後の0x555555は、この関数を呼び出したオブジェクトDのアドレスである。
【００３８】
＜ステップＳ４−９＞：
プログラム実行部１３０は、ソースファイルに記載されたプログラムの「Write('output.dat',D);」の部分を実行するときには、引数がchar*型の'output.dat'と、Vector2型のオブジェクトDであるため、Write(char*,Vector2)関数を実行し、同時に、ファイル'output.dat'ヘオブジェクトDの値を書き込む。このとき、手続き記録ファイルに,「Write,ch*Vec2,'output.dat',0x555555」を記録する。ここで、ch*Vec2は、Write関数のうち、引数がchar*型とVector2型とを取る関数ということを意味している。また、最後の0x555555は、引数Dのアドレスである。
上記により、図５に示す手続き記録ファイルが生成される。
【００３９】
＜ステップＳ５＞：
次に、図６に戻り、ホスト計算機１００のプログラム実行部１３０は、記憶部１２０内に記憶されている手続き記録ファイル、及び、データファイルを、送受信装置１４０及び通信路３００を介して１台以上のクライアント計算機２００へ送信する。なお、データファイルは、送信先のクライアント計算機２００に対応したものを選択して送信する。
【００４０】
＜ステップＳ６＞：
クライアント計算機２００において、プログラム再生部２３０が、通信路３００及び送受信装置２４０を介して受け取った手続き記録ファイルおよびデータファイルを記憶部２２０に記憶する。
【００４１】
＜ステップＳ７＞：
クライアント計算機２００のプログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイルを順次読み込む。そして、読み込んだ関数名に対応する処理を、引数を元にして、プログラム実行する。読み込んだ関数がオブジェクトのコンストラクタだった場合は、手続き記録ファイルに記録されたthisアドレスをオブジェクト名として、新たにオブジェクトを生成する。
【００４２】
以下に、クライアント計算機２００における計算実行処理について、具体的に説明する。図８は、図６のステップＳ７において、図３に示す手続き記録ファイル、及び、図４に示すクライアント計算機２００用のデータファイルを用いた処理手順を示す。
【００４３】
＜ステップＳ７−１＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Matrix22::Matrix22,ffff,1.0,2.0,3.0,4.0,0x111111」の行を読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数、例えば、クライアント計算機２００が保持しているクラスライブラリにより実行可能な関数の形式「Matrix22* m22=new Matrix22(1.0, 2.0, 3.0, 4.0);」に変換し、実行する。これにより、要素が1.0, 2.0, 3.0, 4.0であるMatrix22型のオブジェクトが生成され、そのアドレスがポインタMatrix22型のポインタm22に格納される。その後、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数の形式を用いた「put_Matrix22("0x111111", m22);」を実行する。ここでput_Matrix22は、Matrix型のオブジェクトのラベルとアドレスを記憶する関数である。
【００４４】
＜ステップＳ７−２＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Vector2::Vector2,v,0x222222」の行を読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数「Vector2* v2 = new Vector2;」に変換し、実行する。これにより、プログラム再生部２３０は、Vector2型のオブジェクトを生成し、そのアドレスをVector2型のポインタv2に格納する。その後、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数の形式を用いた「put_Vector2("0x222222", v2);」を実行する。ここで「put_Vector2」はVector2型のオブジェクトのラベルとアドレスを記憶する関数である。
【００４５】
＜ステップＳ７−３＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Read,Vec2ch*,0x222222,'input.dat'」の行を読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数「v2 = get_Vector2("0x222222");」に変換し、実行する。これにより、ステップＳ７−２で生成されたオブジェクトのアドレスを取得し、ファイル'input.dat'に書いてある内容（クライアント計算機２００−１の場合、10.0と3.0）を読み込み、ポインタv2の指すVector2型オブジェクトに値をセットする。
【００４６】
＜ステップＳ７−４＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Vector2::Vector2,ff,7.0,8.0,0x444444」の行を読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数「v2 = new Vector2(7.0, 8.0);」に変換し、実行する。さらに、プログラム再生部２３０は、Vector2型のオブジェクトを生成し、そのアドレスをVector2型のポインタv2に格納する。その後、当該クライアント計算機２００が実行可能な関数の形式を用いた「put_Vector2("0x444444",v2);」を実行する。
【００４７】
＜ステップＳ７−５＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Vector2::Vector2,v,0x555555」の行を読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数「v2 = new Vector2;」に変換し、実行する。さらに、プログラム再生部２３０は、Vector2型のオブジェクトを生成し、そのアドレスをVector2型のポインタv2に格納する。その後、当該クライアント計算機２００が実行可能な関数の形式を用いた「put_Vector2("0x555555", v2);」を実行する。
【００４８】
＜ステップＳ７−６＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Matrix22::operator*,Vec2,0x222222,0x111111」の行を読み込む。この行は返り値を持っているので、プログラム再生部２３０は、次の行「Vector2::Vector2,ff,17.0,39.0,0x777777)」も読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数「v2 = new Vector2(17.0, 39.0);」及び「put_Vector2 ("0x777777", v2);」に変換し、実行した後、当該クライアント計算機２００が実行可能な関数「*get_Vector2("0x777777") = get_Matrix22("0x111111")->operator*(*get_Vector2("0x222222"))」を実行する。
【００４９】
＜ステップＳ７−７＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Vector2::operator+,Vec2,0x444444,0x777777」の行を読み込む。この行は返り値を持っているので、プログラム再生部２３０は、次の行「Vector2::Vector2,ff,24.0,47.0,0x888888」も読み込む。すると、プログラム再生部２３０は、当該クライアント計算機２００が実行可能な関数「v2 = new Vector2(24.0, 47.0);」及び「put_Vector2("0x888888",v2);」に変換し、実行した後、当該クライアント計算機２００が実行可能な関数「*get_Vector2("0x888888") = get_Vector2("0x777777")->operator+(*get_Vector2("0x444444"))」を実行する。
【００５０】
＜ステップＳ７−８＞：
プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Vector2::operator=,Vec2,0x888888,0x555555」の行を読み込むと、当該クライアント計算機２００が実行可能な関数「get_Vector2("0x555555")->operator=("get_Vector2("Ox888888"))」に変換し、実行する。プログラム再生部２３０は、記憶部２２０に記憶されている手続き記録ファイル中の「Write,ch*Vec2,'output.dat',0x555555」の行を読み込むと、「*get_Vector2("0x555555")」の内容を結果ファイル'output.dat'へ記録する。
【００５１】
＜ステップＳ８＞：
次に、図６に戻り、プログラム再生部２３０は、送受信装置２４０及び通信路３００を介して、上記ステップＳ７において生成した「結果記録ファイル」をホスト計算機１００へ送信する。
＜ステップＳ９＞：
ホスト計算機１００のプログラム実行部１３０は、通信路３００を介して送られた結果記録ファイルを、送受信装置１４０を用いて受信し、記憶部１２０に記憶する。
＜ステップＳ１０＞：
ホスト計算機１００におけるプログラム実行部１３０は、結果記録ファイルの内容を、出力装置１５０を介してユーザヘ表示する。
【００５２】
上述したように、本実施の形態によれば、ホスト計算機１００において、クライアント計算機２００に分散実行させるプログラムのソースファイルのコンパイルを行い、そのコンパイルされた結果の実行ファイルを実行することによって、クラスのインスタンス化や、関数コールの最適化された順序、そのときの引数情報を記録した手続き記録ファイルを生成し、クライアント計算機２００へ送信する。従って、クライアントヘ転送するデータ転送量を少なくすることが可能となる。また、クライアント計算機２００では、受け取った手続き記録ファイルのアドレス、クラス、関数名の記述に基づいてクラスのインスタンス化や、関数コールを行うアプリケーション機能を有することで、コンパイル時の最適化がそのまま反映され、ホスト計算機１００からクライアント計算機２００への通信量を少なくしたまま、速度をほとんど落とすことなく、処理を実行することが可能となる。
【００５３】
上記実施形態によれば、クライアント計算機２００でコンパイルを行わないため、コンパイラを追加購入する必要がなく、かつ巨大な実行ファイルをクライアント計算機２００に送る必要がないため、時間的コストが削減できる。
また、クライアント計算機の実装コードや記述形式を意識する必要がないため、プログラムの作成・変更も容易である。
また、ホスト計算機１００に手続き記録ファイルを作成するためには、従来のクラスライブラリに少しのコード追加で実装対応が可能である。また、クライアント計算機２００におけるプレイバックも実装の実現が容易である。
【００５４】
なお、上述のホスト計算機１００、及び、クライアント計算機２００は、内部にコンピュータシステムを有している。そして、ホスト計算機１００のプログラム実行部１３０及びコンパイラ１６０、ならびに、クライアント計算機２００のプログラム再生部２３０の動作の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータシステムが読み出して実行することによって、上記処理が行われる。ここでいうコンピュータシステムとは、ＣＰＵ及び各種メモリやＯＳ、周辺機器等のハードウェアを含むものである。
【００５５】
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【図面の簡単な説明】
【００５６】
【図１】本発明の一実施の形態による分散環境用プログラム実行システムの動作概要を示す図である。
【図２】同実施の形態による分散環境用プログラム実行システムの機能ブロック図であり。
【図３】同実施の形態による分散環境用プログラム実行システムに用いられるソースファイルの例を示す図である。
【図４】同実施の形態による分散環境用プログラム実行システムに用いられるデータファイルの例を示す図である。
【図５】同実施の形態による分散環境用プログラム実行システムに用いられる手続き記録ファイルの例を示す図である。
【図６】同実施の形態による分散環境用プログラム実行システムの動作フローを示す図である。
【図７】同実施の形態によるホスト計算機の動作フローを示す図である。
【図８】同実施の形態によるクライアント計算機の動作フローを示す図である。
【図９】従来技術のグリッドコンピュータシステムを示す図である。
【図１０】従来技術のグリッドコンピュータシステムを示す図である。
【符号の説明】
【００５７】
１００…ホスト計算機
１１０…入力装置
１２０、２２０…記憶部
１３０…プログラム実行部
１４０、２４０…送受信装置
１５０…出力装置
１６０…コンパイラ
２００…クライアント計算機
２３０…プログラム再生部
【図１】
2009087128.tif 000004
【図２】
2009087128.tif 000005
【図３】
2009087128.tif 000006
【図４】
2009087128.tif 000007
【図５】
2009087128.tif 000008
【図６】
2009087128.tif 000009
【図７】
2009087128.tif 000010
【図８】
2009087128.tif 000011
【図９】
2009087128.tif 000012
【図１０】
2009087128.tif 000013