(57)【要約】　　　（修正有）【課題】ソフトウエアアプリケーション中のオペレーションをマスタコンピュータから実行のための１つ以上のスレーブコンピュータへ効率的に分散する方法及びツールを提供することを目的とする。【解決手段】他の入力データとは独立の入力データを用いるソフトウエアアプリケーション内のオペレーションが識別され、１つ以上のグループへと編成され、実行のためのスレーブコンピュータへ分散されうる。オペレーションのグループは、それ自身がいつスレーブコンピュータ上で実行されるべきかを判定する１つ以上のヒューリスティックを含みうる。分散された場合、マスタコンピュータは続いて、スレーブコンピュータがこれらのオペレーションの実行に成功したかどうかを判定する。スレーブコンピュータは、成功であれば、結果をマスタコンピュータへ戻し、マスタコンピュータは戻された結果をソフトウエアアプリケーションを実行し続けるために使用する。【選択図】図４Ｂ
2004145885.tif 000002
【特許請求の範囲】
【請求項１】
　複数の処理スレッド間でオペレーションを分散する方法であって、
　データベースから得られる入力データを用いる第１のスレッド上での実行のために複数のオペレーションを受け取る段階と、
　前記複数の受け取ったオペレーションのうち１つ又はそれ以上の独立のオペレーションを、前記１つ又はそれ以上の独立のオペレーションが前記データベースとは独立の入力データを用いた実行のためであるよう、識別する段階と、
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも１つを実行のために第２のスレッドへ与える段階と、
　前記少なくとも１つの独立のオペレーションの実行の結果を前記第２のスレッドから受け取る段階とを含む方法。
【請求項２】
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも他の１つを実行のために第３のスレッドへ与える段階と、
　前記他の１つの独立のオペレーションの実行の結果を前記第３のスレッドから受け取る段階とを更に含む、請求項１記載のオペレーションを分散する方法。
【請求項３】
　前記少なくとも１つの独立のオペレーションの受け取られた実行の結果が前記少なくとも１つの独立のオペレーションの実行が成功したことを示す場合、前記受け取られた結果を保存し、
　前記少なくとも１つの独立のオペレーションの受け取られた実行の結果が前記少なくとも１つの独立のオペレーションの実行が失敗したことを示す場合、
　前記少なくとも１つの独立のオペレーションを前記第１のスレッド又は第３のスレッド上で再実行し、
　前記少なくとも１つの独立のオペレーションの再実行の結果を前記第１のスレッド又は前記第３のスレッドから受け取る、請求項１記載のオペレーションを分散する方法。
【請求項４】
　前記第１のスレッドは第１のコンピュータ上で実行され、第２のスレッドは前記第１のコンピュータから遠隔の第２のコンピュータ上で実行される、請求項１記載のオペレーションを分散する方法。
【請求項５】
　前記第１のコンピュータはマルチプロセッサコンピュータであり、前記第２のコンピュータはシングルプロセッサコンピュータ又はマルチプロセッサコンピュータである、請求項１記載のオペレーションを分散する方法。
【請求項６】
　データベースからの入力データは階層的なセルへと編成され、第１の階層レベルのセルの入力データを用いたオペレーションの実行によって得られる結果がデータベースへ与えられ、第１の階層レベルよりも上位の第２の階層レベルのセルの入力データとして使用されるようにされる、請求項１記載のオペレーションを分散する方法。
【請求項７】
　複数のコンピュータ間でオペレーションを分散する方法であって、
　データベースから得られる入力データを用いて第１のコンピュータ上で実行すべき複数のオペレーションを受け取る段階と、
　前記複数の受け取られたオペレーションのうち、データベースとは独立の入力データを用いた実行のために１つ又はそれ以上の独立のオペレーションを識別する段階と、
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも１つが第１のコンピュータから遠隔の第２のコンピュータ上で実行されるべきかどうかを判定する段階と、
　前記少なくとも１つの独立のオペレーションが第２のコンピュータ上で実行されるべきであると判定されると、
　前記少なくとも１つの独立のオペレーションを実行のために第２のコンピュータに与え、
　前記第２のコンピュータから少なくとも１つの独立のオペレーションの実行の結果を受け取り、
　前記少なくとも１つの独立のオペレーションが第２のコンピュータ上で実行されるべきではないと判定されると、前記少なくとも１つの独立のオペレーションを第１のコンピュータ上で実行する、方法。
【請求項８】
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも１つが第２のコンピュータ上で実行されるべきであるかを判定する段階において、前記少なくとも１つの独立のオペレーションに関連するヒューリスティックを実行する、請求項７記載の方法。
【請求項９】
　前記ヒューリスティックは、前記少なくとも１つの独立のオペレーションが前記第２のコンピュータ上で実行されうるかどうかを、前記少なくとも１つの独立のオペレーションを実行するときに使用されるべき独立の入力データの量に基づいて判定する、請求項８記載のオペレーションを分散する方法。
【請求項１０】
　前記ヒューリスティックは、前記少なくとも１つの独立のオペレーションが前記第２のコンピュータ上で実行されうるかどうかを、前記第１のコンピュータと前記第２のコンピュータとの間の通信インタフェースの状態に基づいて判定する、請求項９記載のオペレーションを分散する方法。
【請求項１１】
　前記ヒューリスティックは、前記第１のコンピュータと前記第２のコンピュータとの間の通信インタフェースの状態を更に判定する、請求項１０記載のオペレーションを分散する方法。
【請求項１２】
　前記ヒューリスティックは、前記少なくとも１つの独立のオペレーションが前記第２のコンピュータ上で実行されうるかどうかを、前記第１のコンピュータと前記第２のコンピュータとの間の通信インタフェースの状態に基づいて判定する、請求項８記載のオペレーションを分散する方法。
【請求項１３】
　前記ヒューリスティックは、前記第１のコンピュータと前記第２のコンピュータとの間の通信インタフェースの状態を更に判定する、請求項１２記載のオペレーションを分散する方法。
【請求項１４】
　前記ヒューリスティックは、前記少なくとも１つの独立のオペレーションが、前記少なくとも１つの独立のオペレーションを実行するのに使用されるべき独立の入力データの第１の部分のみを用いて前記第２のコンピュータ上で実行されるかどうかを判定し、
　前記ヒューリスティックが前記少なくとも１つの独立のオペレーションが、前記少なくとも１つの独立のオペレーションを実行するのに使用されるべき独立の入力データの第１の部分のみを用いて前記第２のコンピュータ上で実行されると判定すると、
　前記少なくとも１つの独立のオペレーションを前記少なくとも１つの独立のオペレーションを実行するのに使用されるべき前記独立の入力データの前記第１の部分と共に前記第２のコンピュータへ与え、
　前記少なくとも１つの独立のオペレーションを前記少なくとも１つの独立のオペレーションを実行するのに使用されるべき前記独立の入力データの第２の部分と共に第３のコンピュータへ与える、請求項８記載のオペレーションを分散する方法。
【請求項１５】
　前記第１のコンピュータは多数の処理スレッドと多数のプロセッサとを使用し、
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも１つが第２のコンピュータ上で実行されるべきであるかどうかを判定する段階において、
　前記少なくとも１つの独立のオペレーションを実行するために前記第１のコンピュータ上で処理スレッドが利用可能であるかどうかを判定し、
　前記少なくとも１つの独立のオペレーションを実行するために前記第１のコンピュータ上で処理スレッドが利用可能であれば、前記少なくとも１つの独立のオペレーションは前記第１のコンピュータ上の前記利用可能な処理スレッドによって実行されるべきであると判定する、請求項７記載のオペレーションを分散する方法。
【請求項１６】
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも１つが第２のコンピュータ上で実行されるべきであるかどうかを判定する段階は、
　前記少なくとも１つの独立のオペレーションを実行するために前記第２のコンピュータ上で処理スレッドが利用可能であるかどうかを判定し、
　前記少なくとも１つの独立のオペレーションを実行するために前記第２のコンピュータ上で処理スレッドが利用可能であれば、前記少なくとも１つの独立のオペレーションは前記第２のコンピュータ上で前記利用可能な処理スレッドによって実行されるべきであると判定する段階を含む、請求項７記載のオペレーションを分散する方法。
【請求項１７】
　前記１つ又はそれ以上の独立のオペレーションのうちの少なくとも他の１つが第３のコンピュータ上で実行されるべきであるかどうかを判定する段階を更に含み、
　前記少なくとも他の１つの独立のオペレーションが第３のコンピュータ上で実行されるべきであると判定されると、
　前記少なくとも他の１つの独立のオペレーションを実行のために前記第３のコンピュータへ与え、
　前記第３のコンピュータから少なくとも１つの他の独立のオペレーションの実行の結果を受け取り、
　前記少なくとも他の１つの独立のオペレーションが前記第３のコンピュータ上で実行されるべきでないと判定されると、前記少なくとも他の１つの独立のオペレーションを前記第１のコンピュータ上で実行する、請求項７記載のオペレーションを分散する方法。
【請求項１８】
　前記少なくとも他の１つの独立のオペレーションの実行の受け取られた結果が前記少なくとも他の１つの独立のオペレーションの実行が成功したことを示す場合、前記受け取られた結果を保存し、
　前記少なくとも他の１つの独立のオペレーションの実行の受け取られた結果が前記少なくとも他の１つの独立のオペレーションの実行が失敗したことを示す場合、前記少なくとも１つの独立のオペレーションを再実行する、請求項７記載のオペレーションを分散する方法。
【請求項１９】
　前記少なくとも１つの独立のオペレーションを前記第１のコンピュータ上で再実行する、請求項１８記載のオペレーションを分散する方法。
【請求項２０】
　前記少なくとも１つの独立のオペレーションを第３のコンピュータ上で再実行する、請求項１８記載のオペレーションを分散する方法。
【請求項２１】
　前記データベースからの入力データは階層的なセルへと編成され、第１の階層のセルの入力データを用いたオペレーションの実行によって得られる結果がデータベースへ与えられ、第１の階層よりも上位の第２の階層のセルの入力データとして使用されるようにされる、請求項７記載のオペレーションを分散する方法。
【請求項２２】
　複数のコンピュータ間でオペレーションを分散するツールであって、
　データベースから得られる入力データを用いたマスタコンピュータ上での実行のために複数のオペレーションを構文解析し、前記複数の受け取られたオペレーションから前記データベースとは独立の入力データを使用する１つ又はそれ以上の独立のオペレーションを識別する、識別モジュールと、
　各識別された独立のオペレーションがスレーブコンピュータ上で実行されるべきかマスタコンピュータ上で実行されるべきかを判定する遠隔実行判定モジュールと、
　前記マスタコンピュータから実行のために１つ又はそれ以上のスレーブコンピュータへ独立のオペレーションを送信し、前記１つ又はそれ以上のスレーブコンピュータから前記送信された独立のオペレーションの実行の結果を受信する、遠隔コンピュータインタフェースモジュールとを含む、ツール。
【請求項２３】
　前記遠隔実行判定モジュールは、前記独立のオペレーションがスレーブコンピュータ上で実行されるべきであるかどうかを判定するために各独立のオペレーションに関連付けられるヒューリスティックを使用するよう構成される、請求項２２記載のツール。
【請求項２４】
　前記遠隔実行判定モジュールは、独立のオペレーションを実行するときに使用されるべき独立の入力データの量に基づいて前記独立のオペレーションがスレーブコンピュータ上で実行されるべきであるかどうかを判定するヒューリスティックを使用するよう構成される、請求項２３記載のツール。
【請求項２５】
　前記遠隔実行判定モジュールは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態に基づいて前記独立のオペレーションがスレーブコンピュータ上で実行されるべきであるかどうかを判定するヒューリスティックを使用するよう構成される、請求項２４記載のツール。
【請求項２６】
　前記遠隔実行判定モジュールは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態を更に判定するよう構成される、請求項２５記載のツール。
【請求項２７】
　前記遠隔実行判定モジュールは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態に基づいて前記独立のオペレーションがスレーブコンピュータ上で実行されるべきであるかどうかを判定するヒューリスティックを使用するよう構成される、請求項２３記載のツール。
【請求項２８】
　前記遠隔実行判定モジュールは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態を更に判定するよう構成される、請求項２７記載のツール。
【請求項２９】
　前記遠隔実行判定モジュールは、独立のオペレーションが、前記独立のオペレーションの実行に用いられるべき独立の入力データの一部のみを用いてスレーブコンピュータ上でより効率的に実行されるかどうかを判定するヒューリスティックを使用するよう構成され、
　前記遠隔実行判定モジュールが、独立のオペレーションは前記独立のオペレーションの実行に用いられるべき独立の入力データの一部のみを用いてスレーブコンピュータ上でより効率的に実行されると判定すると、
　前記遠隔コンピュータインタフェースモジュールは、
　前記独立のオペレーションを、前記独立のオペレーションを実行するのに使用されるべき独立の入力データの第１の部分と共に第１のスレーブコンピュータへ与え、
　前記独立のオペレーションを、前記少なくとも１つの独立のオペレーションを実行するのに使用されるべき独立の入力データの第２の部分と共に第２のスレーブコンピュータへ与える、請求項２２記載のツール。
【請求項３０】
　前記マスタコンピュータは多数のプロセッサで多数の処理スレッドを使用し、
　前記遠隔実行判定モジュールは、
　処理スレッドが前記独立のオペレーションを実行するために前記マスタコンピュータ上で利用可能であるかどうかを判定し、
　前記独立のオペレーションを実行するために前記マスタコンピュータ上で利用可能であれば、前記独立のオペレーションが前記マスタコンピュータ上の前記利用可能なスレッドによって実行されるべきであると判定するよう構成される、請求項２２記載のツール。
【請求項３１】
　前記遠隔実行判定モジュールは、
　前記少なくとも１つの独立のオペレーションを実行するためにスレーブコンピュータ上で処理スレッドが利用可能であるかどうかを判定し、
　スレーブコンピュータ上で前記独立のオペレーションを実行するためにスレッドが利用可能であれば、前記独立のオペレーションが前記スレーブコンピュータ上の前記利用可能なスレッドによって実行されるべきであると判定する、請求項２２記載のツール。
【請求項３２】
　前記遠隔コンピュータインタフェースモジュールは、
　前記独立のオペレーションの実行が成功したことを示す独立のオペレーションの実行の受信された結果を保存し、
　独立のオペレーションの実行の前記受信された結果が前記独立のオペレーションの実行が失敗したことを示すときは前記独立のオペレーションを再実行させるよう構成される、請求項２２記載のツール。
【請求項３３】
　前記遠隔コンピュータインタフェースモジュールは、前記独立のオペレーションを前記マスタコンピュータ上で再実行させるよう構成される、請求項３２記載のツール。
【請求項３４】
　前記遠隔コンピュータインタフェースモジュールは、前記独立のオペレーションを第２のスレーブコンピュータ上で再実行させるよう構成される、請求項３２記載のツール。
【請求項３５】
　データ構造を格納したコンピュータ読み取り可能な媒体であって、
　ホストコンピュータ上での実行のための複数のオペレーションと、
　オペレーションのグループを、スレーブコンピュータ上で交互に実行されうるオペレーションとして識別する識別子とを含む、コンピュータ読み取り可能な媒体。
【請求項３６】
　前記データ構造は、前記関連付けられたオペレーションのグループがスレーブコンピュータ上で実行されうるかどうかを実行されたときに判定するオペレーションのグループのためのヒューリスティックを更に含む、請求項３５記載のコンピュータ読み取り可能な媒体。
【請求項３７】
　前記ヒューリスティックは、前記オペレーションのグループを実行するときに使用されるべき独立の入力データの量に基づいて前記オペレーションのグループがスレーブコンピュータ上で実行されうるかどうかを判定する、請求項３６記載のコンピュータ読み取り可能な媒体。
【請求項３８】
　前記ヒューリスティックは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態に基づいて前記オペレーションのグループがスレーブコンピュータ上で実行されるべきであるかどうかを更に判定する、請求項３７記載のコンピュータ読み取り可能な媒体。
【請求項３９】
　前記ヒューリスティックは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態を更に判定する、請求項３８記載のコンピュータ読み取り可能な媒体。
【請求項４０】
　前記ヒューリスティックは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態に基づいて前記オペレーションのグループがスレーブコンピュータ上で実行されるべきであるかどうかを判定する、請求項３６記載のコンピュータ読み取り可能な媒体。
【請求項４１】
　前記ヒューリスティックは、前記マスタコンピュータと前記スレーブコンピュータの間の通信インタフェースの状態を更に判定する、請求項４０記載のコンピュータ読み取り可能な媒体。
【請求項４２】
　前記データ構造は、第２のオペレーションのグループを、スレーブコンピュータ上で交互に実行されうるオペレーションとして識別する第２の識別子とを含み、
　前記第１の識別子は、前記マスタコンピュータと１つ又はそれ以上のスレーブコンピュータとの間の通信の状態が第１の状態にあるときに使用され、
　前記第２の識別子は、前記マスタコンピュータと１つ又はそれ以上のスレーブコンピュータとの間の通信の状態が第２の状態にあるときに使用されるようにされる、請求項３９記載のコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、ホストコンピュータから１つ又はそれ以上の遠隔コンピュータへのオペレーションの分散に関する。本発明の種々の面は、マルチプロセッサ、マルチスレッドのホストコンピュータから１つ又はそれ以上のシングルプロセッサ又はマルチプロセッサ遠隔コンピュータへソフトウエアオペレーションを分散させることに特に適用される。
【背景技術】
【０００２】
　多くのソフトウエアアプリケーションは、シングルプロセッサコンピュータ上で効率的に実行されうる。しかしながら、幾つかのソフトウエアアプリケーションは、あまりにも多くのオペレーションを有するため、経済的に合理的な時間内でシングルプロセッサコンピュータ上で順次に実行されることができない。例えば、幾つかのソフトウエアアプリケーションは、数十万又は数百万の入力データ値に対して１つ又はそれ以上のオペレーションの実行を必要とする。これらの種類のソフトウエアアプリケーションをより効率的に実行するために、多数のプロセッサ及び多数の処理スレッドを用いるコンピュータが開発されている。これらのコンピュータは、シングルプロセッサのコンピュータよりも高速に複雑なソフトウエアアプリケーションを実行しうるが、これらのマルチプロセッサコンピュータは購入時及び維持管理に非常に費用がかかる。マルチプロセッサコンピュータでは、プロセッサは多数のオペレーションを同時に実行するため、関連のあるオペレーションの同時実行を調整するために特別なオペレーティングシステムを使用せねばならない。更に、その多数のプロセッサは例えばメモリといった資源に同時にアクセスしようとしうるため、マルチプロセッサコンピュータのバス構造及び物理的なレイアウトは、シングルプロセッサコンピュータよりも本質的により複雑である。
【０００３】
　大きいマルチプロセッサコンピュータに関する問題点及び費用に鑑みて、単一のマルチプロセッサコンピュータを用いる代わりに、リンクされたシングルプロセッサコンピュータのネットワークのほうが一般的となってきた。例えばパーソナルコンピュータといった従来のシングルプロセッサコンピュータの費用は、過去数年間で大きく低下している。更に、多数のシングルプロセッサコンピュータのオペレーションをネットワークへリンクする技術は、より高性能となり信頼性が高くなっている。従って、現在では、数百万ドル程度のマルチプロセッサコンピュータは、比較的単純で低費用のシングルプロセッサコンピュータのネットワーク又は「ファーム（ｆａｒｍ）」で置き換えられることが多くなっている。
【０００４】
　しかしながら、単一のマルチプロセッサコンピュータから多数のシングルプロセッサコンピュータへの移行には、問題がなかったわけではない。シングルプロセッサコンピュータのネットワークでは、コンピュータのうちの少なくとも一台（ホストコンピュータ又はマスタコンピュータとも称される）は、ネットワーク上の残るコンピュータ（遠隔コンピュータ又はスレーブコンピュータとも称される）に対してオペレーションを割り当てるタスクを実行する。マスタコンピュータは、また、どのスレーブコンピュータにどのオペレーションが割り当てられているかを把握し、スレーブコンピュータによって戻されるオペレーション結果を調整せねばならない。更に、割り当てられたオペレーションの結果を戻す前にスレーブコンピュータが故障した場合、マスタコンピュータは欠落している結果について補償せねばならない。これらの各タスクを効果的に実行するようマスタコンピュータを構成することにより、シングルプロセッサコンピュータのネットワークを用いることに関する問題点及び費用が増加する。
【０００５】
　更に、マルチプロセッサコンピュータ上で実行されるよう構成された幾つかの種類のソフトウエアアプリケーションは、シングルプロセッサコンピュータのネットワーク上で実行されるよう再構成されるのは容易ではない。例えば、階層型セルベースのソフトウエアアプリケーションは、シングルプロセッサコンピュータのアレイ上で実行されるようには容易には変換されえない。階層型セルベースのソフトウエアアプリケーションでは、オペレーションは、関連する値のグループ又は「セル」へと編成された入力データを使用する。更に、セル間の関係は階層的である。従って、階層内の一つのレベルの第１のセルの値は、階層内のより下位のレベルの第２のセルの値の幾つかに対してオペレーションを実行することにより生成される出力データに依存しうる。この第２のセルの値のうちの幾つかは、階層内の更に低いレベルの第３のセルの値の幾つかから生成される出力データに依存する。
【０００６】
　従って、その関連するセルの全てに対して他のオペレーションの実行が完了するまでセルに対するオペレーションを実行することは不可能であることがあり、多数のシングルプロセッサコンピュータ間の調整を難しくしている。更に、セルは相互に関連付けられるため、一般的には任意のセルを使用しうる各オペレーションにアクセス可能な大きいデータベース中に一緒に維持される。しかしながら、従来のシングルプロセッサコンピュータのネットワークでは、各コンピュータは、一般的には、このようなデータベースを格納することのできない非常に小さいメモリのみを有する。また、かかるデータベースをネットワーク上の各シングルプロセッサコンピュータに転送することは、ネットワークに対して許容できない水準のオーバヘッドを与えうる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
　従って、ネットワーク上のホスト（又は「マスタ」）コンピュータから多数のシングルプロセッサへ又はマルチプロセッサ式の遠隔（又は「スレーブ」）コンピュータへ複雑なソフトウエアアプリケーションの種々のオペレーションを効率的に分散することを可能とすることが望ましい。更に、１つ又はそれ以上の遠隔コンピュータの故障がソフトウエアアプリケーション全体の実行を脅かさないよう、オペレーションを分散させることを可能とすることが望ましい。
【課題を解決するための手段】
【０００８】
　有利には、本発明の種々の面は、複数のコンピュータ間でソフトウエアアプリケーション中のオペレーションを効率的に分散するツール及び方法を提供する。ツール及び方法のいずれの実施例も、階層型セルベースのソフトウエアアプリケーションの種々のオペレーションをマルチプロセッサコンピュータからネットワーク上の１つ又はそれ以上のシングルプロセッサコンピュータへ分散することに対して特定の用途を有する。
【０００９】
　本発明の種々の実施例によれば、ソフトウエアアプリケーション内で独立のオペレーションが識別される。独立のオペレーションとは、他の入力データとは独立な入力データのみを用いるオペレーションである。例えば、データベース中に格納された階層型セルベースの入力データを用いるソフトウエアアプリケーションによって実施される本発明の実施例は、ソフトウエアアプリケーション内の１つ又はそれ以上の「フラット」オペレーションを識別しうる。即ち、ソフトウエアアプリケーションは、他のセルのデータ値に対してオペレーションを実行して取得する必要のない、セルからの入力データ値を用いたオペレーションを識別しうる。幾つかのこれらの実施例では、これらの「フラット」オペレーション（又は他の種類の独立のオペレーション）は、関連付けられたオペレーションのグループへと集められ、以下、これらをフレキシブルオペレーショングループと称する場合がある。
【００１０】
　本発明の幾つかの実施例では、フレキシブルオペレーショングループは、１つ又はそれ以上のヒューリスティックを含みうる。フレキシブルオペレーショングループのヒューリスティックは、フレキシブルオペレーショングループが遠隔スレーブコンピュータ上でいつ効率的に実行されうるかを判定する。ヒューリスティックは、例えば、フレキシブルオペレーショングループのための入力データの量又は種類、及び、マスタコンピュータと、フレキシブルオペレーショングループが実行されうるスレーブコンピュータとの間の通信インタフェースの状態といった、多数の規準を考慮に入れうる。
【００１１】
　ソフトウエアアプリケーションがマスタコンピュータ上で実行されるとき、各フレキシブルオペレーショングループが識別される。フレキシブルオペレーショングループが実行のためにスケジューリングされると、マスタコンピュータは、フレキシブルオペレーショングループがスレーブコンピュータ上で実行されうるかどうかを判定するため、まずマスタコンピュータに関連する１つ又は複数のヒューリスティックを実行する。ヒューリスティックがオペレーションはスレーブコンピュータ上で実行されえ、スレーブコンピュータはマスタコンピュータがオペレーションを実行する前に利用可能な資源を有する場合、フレキシブルオペレーショングループは関連付けられる入力データと共にスレーブコンピュータへ与えられる。スレーブコンピュータは、フレキシブルオペレーショングループを実行する。スレーブコンピュータはフレキシブルオペレーショングループをうまく実行すれば、マスタコンピュータへ結果を返し、マスタコンピュータはソフトウエアアプリケーションを実行し続けるために戻された結果を使用する。しかしながら、スレーブコンピュータがフレキシブルオペレーショングループをうまく実行できなければ、マスタコンピュータは、中断なしにソフトウエアアプリケーションを実行し続けるために、資源が利用可能となったときにフレキシブルオペレーショングループ自身を単に実行しうる。
【００１２】
　本発明の上述及び他の特徴及び面は、以下の詳細な説明により明らかとなり考慮されるであろう。
【発明を実施するための最良の形態】
【００１３】
　［はじめに］
　本発明の種々の実施例は、マスタコンピュータから１つ又はそれ以上の実行のために遠隔スレーブコンピュータへオペレーションを分散するツール及び方法に関する。上述のように、本発明の幾つかの実施例の面は、マルチプロセッサマスタコンピュータから１つ又はそれ以上のシングルプロセッサスレーブコンピュータへ階層型セルベースソフトウエアアプリケーションのオペレーションを分散することに特定の用途を有する。従って、本発明の理解をより容易とするため、複数のシングルプロセッサスレーブコンピュータに連結されたマルチプロセッサマスタコンピュータを有する典型的なネットワークを、本発明の実施例を実施する典型的な階層型セルベースソフトウエアアプリケーションとともに説明する。本発明の実施例によるフレキシブルオペレーショングループの配置については、オペレーションを分散するツール及びオペレーションを分散する方法と共に以下説明する。
【００１４】
　［典型的なオペレーション環境］
　当業者によって認められるように、本発明の種々の実施例によるソフトウエアアプリケーション分散技術は、プログラム可能な計算装置によって実行される、例えばソフトウエアプログラムモジュールといったコンピュータ実行可能な命令を用いて実施されうる。本発明は、ソフトウエアを用いて実施されうるため、本発明の種々の実施例が用いられ得る典型的なプログラム可能なソフトウエアシステムの構成要素及びオペレーションについてまず説明する。より特定的に、ホスト又はマスタコンピュータと、１つ又はそれ以上の遠隔又はスレーブコンピュータとを有するコンピュータネットワークの構成要素及びオペレーションについて、図１を参照して説明する。この動作環境は、適切な動作環境の一例にすぎないが、本発明の使用又は機能の範囲を制限することを示唆するものが意図されるわけではない。
【００１５】
　図１中、マスタコンピュータ１０１は、複数の入力及び出力装置１０３と、メモリ１０５とを含むマルチプロセッサコンピュータである。入力及び出力装置１０３は、ユーザから入力データを受け取るため及びユーザへ出力データを与えるための任意の装置を含みうる。入力装置は、例えば、ユーザから入力を受け取るための、キーボード、マイクロホン、スキャナ、又はポインティングデバイスを含む。出力装置は、ディスプレイモニタ、スピーカ、プリンタ、又は触覚フィードバック装置を含みうる。これらの装置とその接続は、周知であるため、ここでは詳述しない。
【００１６】
　メモリ１０５は、マスタコンピュータ１０１によってアクセスされうるコンピュータ読み取り可能な媒体の任意の組合せを用いて実施されうる。コンピュータ読み取り可能な媒体は、例えば、読み取り書き込みメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、電気的消去可能及びプログラム可能な読み出し専用メモリ（ＥＥＰＲＯＭ）或いはフラッシュメモリ超小型回路デバイスといった超小型回路メモリデバイス、ＣＤ−ＲＯＭディスク、ディジタルビデオディスク（ＤＶＤ）又は他の光学記憶装置を含みうる。コンピュータ読み取り可能な媒体はまた、磁気カセット、磁気テープ、磁気ディスク、又は他の磁気記憶装置、穿孔媒体、ホログラフィー記憶装置、又は所望の情報を格納するために使用されうる任意の他の媒体を含みうる。
【００１７】
　以下詳述するように、マスタコンピュータ１０１は、本発明の実施例を実施するソフトウエアアプリケーションを実行する。従って、メモリ１０５は、ソフトウエアアプリケーションと共に使用されるべきデータを含むデータベース１０７を格納する。図示の実施例では、データベース１０７は、ソフトウエアアプリケーションのオペレーションを実行するための入力データを含む階層型セルベースのデータベースである。
【００１８】
　より特定的には、本発明の種々の実施例では、データベース１０７は、従属入力データと独立入力データの両方を含む。従属入力データは、ここでは、データベース１０７内の他の内容に対して従属した値を有するデータを指すものとする。すなわち、従属入力データの値は、データベース１０７中の他のデータの値に従属する。例えば、１つのオペレーションによって使用されるべき入力データは、他のオペレーションの実行により生ずる出力データに依存しうる。一方、独立データの値は、データベース中の他のデータの値に依存しない。しかしながら、データがデータベースに対して従属であるか独立であるかは、入力データの選択によって決定される。例えば、上述のように、第１のオペレーションを実行するための第１の入力データは、第２の入力データで第２のオペレーションを実行することによって生ずる出力データに依存しうる。第１のオペレーションを実行するために単独でとられた場合は、第１の入力データは第２の入力データに従属する。しかしながら、第１及び第２のオペレーションを両方とも実行するために第１の入力データと第２の入力データが一緒にとられた場合は、第１の入力データ及び第２の入力データは一緒にデータベース１０７から独立でありうる。
【００１９】
　再び図１を参照するに、マスタコンピュータ１０１は更に、複数のプロセッサ１０９とインタフェース装置１１１とを含む。プロセッサ１０９は、命令を実行するようプログラムされうる任意の種類の処理装置でありうる。プロセッサ１０９は、例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）又はＸｅｏｎ（登録商標）マイクロプロセッサ、Ａｄｖａｎｃｅｄ　Ｍｉｃｒｏ　Ｄｅｖｉｃｅｓ　Ａｔｈｌｏｎ（登録商標）マイクロプロセッサ、又はＭｏｔｏｒｏｌａ　６８Ｋ／Ｃｏｌｄｆｉｒｅ（登録商標）マイクロプロセッサといった商業的に総称的なプログラム可能なマイクロプロセッサでありうる。或いは、プロセッサ１０９は、例えば、特別な種類の数学的なオペレーションを最適に実行するよう設計されたマイクロプロセッサといった、特注のプロセッサでありうる。インタフェース装置１１１、プロセッサ１０９、メモリ１０５、及び入力／出力装置１０３は、バス１１３によって相互に接続される。
【００２０】
　インタフェース装置１１１は、マスタコンピュータ１０１が通信インタフェースを通じて遠隔のスレーブコンピュータ１１５Ａ，１１５Ｂ，１１５Ｃ．．．１１５ｘと通信することを可能とする。通信インタフェースは、例えば従来の有線ネットワーク接続又は光学的に伝達可能な有線ネットワーク等を含む任意の適当な種類のインタフェースでありうる。通信インタフェースは、ワイヤレス光学接続、無線周波数接続、赤外線接続、又は音響接続といったワイヤレス接続でありうる。様々な種類の通信インタフェースのプロトコル及び実施は、従来技術で周知であるため、ここでは詳述しない。
【００２１】
　各スレーブコンピュータ１１５は、システムバス１２５によって互いに接続されたメモリ１１７、プロセッサ１１９、インタフェース装置１２１、及び１つ又はそれ以上の入力／出力装置１２３を含む。マスタコンピュータ１０１の場合と同様、スレーブコンピュータ１１５用の入力／出力装置１２３は、キーボード、ポインティングデバイス、マイクロホン、ディスプレイモニタ、及びプリンタ等の従来の入力又は出力装置を含みうる。同様に、プロセッサ１１９は、任意の種類の従来の又は特注のプログラム可能なプロセッサ装置であり得、一方でメモリ１１７は任意の従来のメモリ記憶装置を用いて実施されうる。インタフェース装置１１１と同様、インタフェース装置１２１は、スレーブコンピュータ１１５が通信インタフェースを通じてマスタコンピュータ１０１と通信することを可能とする。
【００２２】
　図示の実施例では、マスタコンピュータ１０１はマルチプロセッサコンピュータであり、一方、スレーブコンピュータ１１５はシングルプロセッサコンピュータである。しかしながら、本発明の他の実施例は、シングルプロセッサマスタコンピュータを使用しうる。更に、１つ又はそれ以上の遠隔コンピュータ１１５は、それらの用途に応じて、多数のプロセッサを有しうる。また、ホストコンピュータ１０１としてシングルインタフェース装置１１１が図示されているが、本発明の他の実施例では、コンピュータ１０１は、多数の通信インタフェースを通じて遠隔コンピュータ１１５と通信するために２つ又はそれ以上の異なるインタフェース装置１１１を使用しうる。
【００２３】
　［典型的なソフトウエアアプリケーション及び階層型データベース］
　上述のように、本発明の実施例による１つ又はそれ以上の遠隔コンピュータ間でオペレーションを分散する方法及びツールは、種々のソフトウエアアプリケーションと共に使用されうる。しかしながら、本発明のいくつかの実施例は、マルチプロセッサコンピュータ上で実行されるよう構成され比較的大きいデータベースを用いる、例えば集積回路の構造をシミュレートし検査（ｖｅｒｉｆｙ）するために用いられるソフトウエアアプリケーションといった種類の、ソフトウエアアプリケーションのために特に有用でありうる。かかるシミュレーション及び検査ツールの例は、ここに参照として組み入れられる、２００１年５月８日発行のマクシェリー（ＭｃＳｈｅｒｒｙ）外による米国特許第６，２３０，２９９号、２００１年６月１９日発行のマクシェリー（ＭｃＳｈｅｒｒｙ）外による米国特許第６，２４９，９０３号、２００２年１月１５日発行のアイゼンホファー（Ｅｉｓｅｎｈｏｆｅｒ）外による米国特許第６，３３９，８３６号、２００２年５月２８日発行のボズカス（Ｂｏｚｋｕｓ）外による米国特許第６，３９７，３７２号、２００２年７月２日発行のアンダーソン（Ａｎｄｅｒｓｏｎ）外による米国特許第６，４１５，４２１号、及び、２００２年７月２３日発行のアンダーソン（Ａｎｄｅｒｓｏｎ）外による米国特許第６，４２５，１１３号に記載されている。
【００２４】
　従って、本発明のこれらの実施例の理解を容易とするため、集積回路のフォトリソグラフィーレイアウトのシミュレーション及び検査のための、１つのかかる種類のソフトウエアアプリケーションについて概説する。図２に示すように、ソフトウエアアプリケーション、即ち、シミュレーション及び検査ツール２０１は、データインポートモジュール２０３及び階層型データベース２０５を含む。ツール２０１はまた、レイアウト−回路図（ＬＶＳ：ｌａｙｏｕｔ−ｖｅｒｓｕｓ−ｓｃｈｅｍａｔｉｃ）検査モジュール２０７、設計規則確認（ＤＲＣ：ｄｅｓｉｇｎ　ｒｕｌｅ　ｃｈｅｃｋｉｎｇ）モジュール２０９、位相シフトマスク（ＰＳＭ：ｐｈａｓｅ　ｓｈｉｆｔ　ｍａｓｋ）モジュール２１１、光学的及びプロセス補正（ＯＰＣ：ｏｐｔｉｃａｌ　ａｎｄ　ｐｒｏｃｅｓｓ　ｃｏｒｒｅｃｔｉｏｎ）モジュール２１３、及び光学的及びプロセス規則（ＯＰＲ：ｏｐｔｉｃａｌ　ａｎｄ　ｐｒｏｃｅｓｓ　ｒｕｌｅ）確認モジュール２１５を含む。ツール２０１は更に、必要であれば更なる機能を実行するための他のモジュール２１７を含みうる。ツール２０１はまたデータエクスポートモジュール２１９を有する。
【００２５】
　最初に、ツール２０１は、元の集積回路レイアウトデータ２２１を受け取る。このレイアウトデータ２２１は、集積回路装置の異なる構造的な層を製造するためのフォトリソグラフィーレイアウトを表わす。例えば、元の集積回路レイアウトデータ２２１は、トランジスタの絶縁領域を作成するためのフォトリソグラフィーマスクを画成する第１の組のポリゴン、トランジスタの接触電極を作成するためのフォトリソグラフィーマスクを画成する第２の組のポリゴン、及び、接触電極の相互接続配線を作成するためのフォトリソグラフィーマスクを画成する第３の組のポリゴンを含みうる。以下詳述するように、元の集積回路レイアウトデータ２２１は、データインポートモジュール２０３によって、ツール２０１の残る構成要素によってより効率的に処理されうる形式へと変換される。
【００２６】
　一旦、データインポートモジュール２０３が元の集積回路レイアウトデータ２２１を適切な形式に変換すると、レイアウトデータ２２１は、モジュール２０５−２１７によって実行される種々のオペレーションによる使用のために階層型データベース２０５中に格納される。次にレイアウト−回路図モジュール２０７は、変換されたレイアウトデータ２２１が所望の集積回路のための元の設計仕様と一致するかどうかを確かめるため、変換されたレイアウトデータ２２１を調べる。次に、設計規則検査モジュール２０９は、レイアウトデータ２２１が所定の幾何学の設計規則を守ることを確認する。次に、変換されたレイアウトデータは、適切であれば位相シフトを与えるためにレイアウトデータ２２１を変更する位相シフトモジュール２１１によって処理される。
【００２７】
　処理されたレイアウトデータ２２１は、次に光学的及びプロセス補正モジュール２１３へ渡され、光学的及びプロセス補正モジュール２１３は、光学的及びプロセス補正モジュール２１３がなければリソグラフィーパターニング中に生じたであろう製造歪みを補正する。例えば、光学的及びプロセス補正モジュール２１３は、画像歪み、光学的な近接効果、フォトレジスト運動効果、及びエッチ負荷歪みについて補正しうる。光学的及びプロセス規則確認モジュール２１５は、光学的及びプロセス補正モジュール２１３によって生じた補正データが所望の補正効果を有することを確認するため、位相シフトされ補正されたレイアウトデータ２２１の使用をシミュレートする。上述のように、他のモジュール２１７は、所望であれば、処理され補正されたレイアウトデータ２２１の更なる操作を行うために使用されうる。所望の全てのオペレーションが元のレイアウトデータ２２１に対して行われた後、データエクスポートモジュール２１９は処理されたレイアウトデータ２２１をレチクル及び集積回路製造レイアウトデータ２２３へ変換する（即ち、データエクスポートモジュール２１９は処理されたレイアウトデータ２２１を、フォトリソグラフィー製造処理において使用されうる形式へ変換する）。
【００２８】
　シミュレーション及び検査ツール２０１を実行することは、しばしば、大量の入力レイアウトデータ２２１に対してオペレーションを実行することを必要としうる。例えば、単純にポリゴンの面積を計算する処理は、１つのタスクを完了するために５００００個以上のポリゴンに対して操作を行いうる。従って、これらの種類のソフトウエアアプリケーションは、アプリケーションによって実行される種々のタスクが分割され同時に実行されうるよう、一般的にはマルチプロセッサコンピュータ上で実行される。しかしながら、当業者によって認められるように、集積回路の種々の層を形成するための製造処理段階は、相互に関連する。例えば、集積回路の１つの層を製造するのに必要な処理段階は、集積回路の下の層を製造するために使用される処理ステップに依存しうる。従って、元の集積回路レイアウトデータ２２１をシミュレートし検査するために、データは、対応する製造処理の相互関係に基づいて階層型に編成される。
【００２９】
　より特定的には、元の集積回路レイアウトデータ２２１は、階層型データベース２０５中の階層型セルへと配置される。セルの階層構造は、種々の異なる規準に基づくものでありうる。例えば、セルの階層構造は、所望の集積回路中の個々の層の積層順序に基づいて配置されうる。このように、集積回路の１つの層に生ずる構造のためのレイアウトデータ２２１の一部は、第１の階層レベルのセルに対して割り当てられ得る。集積回路のより高位の層に生ずる構造に対応するレイアウトデータ２２１の他の部分は、第１の階層レベルとは異なる第２の階層レベルのセルに対して割り当てられ得る。
【００３０】
　或いは、レイアウトデータ２２１の階層構造は、より大きい構造を形成するために個々の構造の組み合わせに基づくものでありうる。例えば、電極接点に対応するレイアウトデータ２２１の一部は、第１の階層レベルのセルに割り当てられ得る。電極接点を含むＮＡＮＤゲートに対応するレイアウトデータ２２１の他の部分は、第１の階層レベルよりも高位の第２の階層レベルのセルに割り当てられ得る。複数のＮＡＮＤゲートを用いるより大きい回路構造に対応するレイアウトデータ２２１の更なる他の部分は、第２の階層レベルよりも高位の第３の階層レベルのセルに割り当てられ得る。
【００３１】
　図３は、種々のセルが、階層型データベース２０５等のセルベースの階層型データベース中で配置されうるかを示す図である。本例では、各セルは階層型データベースの一部を含み、「Ａ」から「Ｉ」までの文字で示されている。データベース中のデータ３０１は、４つの階層レベル３０３−３０９へ分けられる。最も高い階層レベル３０３は１つのセル３１１のみを含み、一方、２番目に高い階層レベル３０５は２つのセル３１３及び３１５を含む。この配置によれば、（シミュレーション又は検査処理といった）処理は、先行するセル３１３及び３１５が同様に処理されるまでは最も高い階層レベルのセル３１１中の入力データを用いて正確に実行することはできない。同様に、第２の階層レベルのセル３１３中の入力データは、その先行する第３の階層レベルのセル３１７及び３１９が処理されるまで処理されることができない。この図に示すように、多数の階層レベルにおいて同一のセルが生じうる。例えば、セル３２１は第３の階層レベル３０７中にあり、セル３２３は第４の階層レベル３０９中にあるが、いずれのセル３２１及び３２３も（図中、文字「Ｄ」で示す）同じ入力データを含む。このように、電気接点等の特別な構造に関連するレイアウトデータといったレイアウトデータは、データベース２０５の異なる階層レベルで繰り返し使用されうる。
【００３２】
　レイアウトデータ２２１の階層型の編成は、マルチプロセッサコンピュータ２０１といったマルチプロセッサコンピュータ上でさえもシミュレーション及び検査ソフトウエアアプリケーションが実行されるのを困難としうる。例えば、図３に示す階層型データ３０１では、セル３１３はセル３１５と同時には処理されえない。しかしながら、一定の状況下では、セル同士が異なる階層レベルにあっても、セル３２５はセル３１５と同時に処理されうる。従って、データインポートモジュール２０３は、上述のようにその処理を容易とするために元の集積回路レイアウトデータ２２１を変更する。更に特定的には、データインポートモジュール２０３は、多数のプロセッサを用いたレイアウトデータ２２１の処理を最適化するため、集積回路レイアウトデータ２２１の階層型の編成を再編成する。
【００３３】
　このように、データインポートモジュール２０３によって強いられるレイアウトデータ２２１の再構成は、マルチプロセッサコンピュータ１０１といったマルチプロセッサコンピュータ上でのレイアウトデータ２２１の処理を改善しうる。しかしながら、この変更があっても、個々のセルの相互従属性は、やはり、例えば遠隔コンピュータ２１５といった多数のシングルプロセッサコンピュータを用いてレイアウトデータ２２１を処理することを困難としうる。１つのセルでタスクを行うことは、プロセッサが階層型データベース中で得られた多数のセルからのレイアウトデータ２２１にアクセスすることを必要とすることがあり、或る時点では、レイアウトデータ２２１の必要な値はまだ発生されていないかもしれない。コンピュータ１０１といったマルチプロセッサコンピュータは各オペレーションによるアクセスのための階層型データベース２０５全体を含むことができる大容量メモリを含みうるが、スレーブコンピュータ１１５といったシングルプロセッサコンピュータは一般的には比較的小さいメモリ１１７のみを用いる。セルを処理するために関連するセルから必要とされるデータのサイズは、このように、従来のシングルプロセッサコンピュータのメモリ中に格納するには大きすぎることがある。
【００３４】
　［典型的なフレキシブル処理グループ］
　有利には、本発明の種々の実施例は、独立入力データを使用するソフトウエアアプリケーション中で独立のオペレーションを識別する。例えば、上述のツール２０１を用いた場合、ツール２０１は階層型データベース２０５とは独立の入力データを用いるそのオペレーションを識別する。更に特定的には、ツール２０１は階層型データベース２０５中の他のレイアウトデータの値に依存しない値を有する入力データを用いるオペレーションを識別する。この種類の独立のオペレーションは、その入力データが他の階層のセルからのレイアウトデータに依存しないため、本願では「フラット」オペレーションと称することがある。しかしながら、本発明の種々の実施例によって識別されうる他の又は更なる種類の独立のオペレーションが存在しうることが認識されるべきである。本発明のいくつかの実施例によれば、１つ又はそれ以上の関連する独立のオペレーションは、本願ではフレキシブルオペレーショングループと称されることもあるグループへまとめられる。
【００３５】
　ここで図４Ａを参照するに、図中、階層型データベース中のセルに対してタスクを実行するためのソフトウエアアプリケーションの典型的な部分が示される。部分４０１は、入力データを取り出すため又はその関連するセルへ出力データを与えるための入力／出力コマンド（ＨＤＢ　Ｉ／Ｏ）４０３を含む。部分４０１はまた、図示の例ではフラットオペレーション（Ｆｌａｔ　Ｏｐｅｒａｔｉｏｎ）である複数のオペレーション４０５を含む。従来のマルチプロセッサコンピュータでは、入力／出力コマンド４０３及びフラットオペレーション４０５の夫々は、関連するセルを用いて単一のスレッド４０７によって実行される。
【００３６】
　図４Ｂは、本発明の実施例によるソフトウエアアプリケーションの一部を示す図である。ソフトウエア部分４０１’は、図４Ａに示す部分４０１と同じタスクを実行し、同じ入力／出力コマンド４０３及びフラットオペレーション４０５を含む。しかしながら、本発明の図示の実施例では、フラットオペレーション４０５はフレキシブルオペレーショングループ（Ｆｌｅｘｉｂｌｅ　Ｏｐｅｒａｔｉｏｎ　Ｇｒｏｕｐ）４０９及び４１１へと編成される。フレキシブルオペレーショングループ４０９は、フレキシブルオペレーショングループ４０９を関連するフラットオペレーション４０５の集合として識別する識別子４１３を含む。フレキシブルオペレーショングループ４０９はまた、ヒューリスティック（Ｈｅｕｒｉｓｔｉｃ）４１５を含む。以下詳述するように、ヒューリスティック４１５は、フレキシブルオペレーショングループ４０９中のフラットオペレーション４０５が実行のためにスレーブコンピュータへ転送されうる（又はされる）のかを判定する。同様に、フレキシブルオペレーショングループ４１１は、識別子４１７と、フレキシブルオペレーショングループ４１１中のフラットオペレーション４０５がマスタコンピュータ上で実行されうる（又はされる）かスレーブコンピュータへ転送されるかを判定するヒューリスティック（Ｈｅｕｒｉｓｔｉｃ）４１９とを含む。
【００３７】
　図４Ａに示されるソフトウエア部分４０１と同様に、ソフトウエア部分４０１’は第１のスレッド４０７を用いて実行される。スレッド４０７は、最初に、フレキシブルオペレーショングループ４０９のための識別子４１３を認識する。フレキシブルオペレーショングループ４０９中のオペレーションが実行されるべきであるとき、第１のスレッド４０７は、フレキシブルオペレーショングループがスレーブコンピュータ上で実行されうるかどうかを判定するため、ヒューリスティック４１５を実行する。殆どのフレキシブルオペレーショングループでは、マスタコンピュータ上の資源が直ぐに利用可能であれば、マスタコンピュータ上でオペレーションを実行するほうが効率的である。マスタコンピュータ上の資源が直ぐに利用可能でなければ、スレーブコンピュータ上でフレキシブルオペレーショングループを実行するほうが効率的である。従って、ヒューリスティック４１５は、フレキシブルオペレーショングループ４０９のフラットオペレーションが、マスタコンピュータ上で資源が利用可能となるのを待つよりも、スレーブコンピュータ上で実行した方が効率的となるかどうかを判定する。
【００３８】
　従って、ヒューリスティック４１５が、フレキシブルオペレーショングループ４０９がスレーブコンピュータ上で効率的に実行されうることを示し、フレキシブルオペレーショングループ４０９を実行するための資源がマスタコンピュータ上では利用可能でないが、スレーブコンピュータ上では利用可能であるとき、第１のスレッド４０７は、そのスレーブコンピュータ上で動作する第２のスレッド４２１へフラットオペレーション４０５を渡す。同様に、スレッド４０７は、フレキシブルオペレーショングループ４１１のための識別子４１７を認識し、ヒューリスティック４１９を実行する。ヒューリスティック４１９の結果が、フレキシブルオペレーショングループ４１１のフラットオペレーション４０５がスレーブコンピュータ上で効率的に実行されえ、フレキシブルオペレーショングループ４１１を実行するための資源がマスタコンピュータ上では利用可能でないがスレーブコンピュータ上では利用可能であるとき、第１のスレッドは、第３のスレッド４２３による実行のためにフレキシブルオペレーショングループ４１１中のフラットオペレーション４０５をスレーブコンピュータへ渡す。
【００３９】
　尚、図４に示すようにオペレーションをフレキシブルオペレーショングループへと編成することは、上述のシミュレーション及び検査ツール２０１のような階層型のセルベースのアプリケーションソフトウエアと、階層型データベースを使用しないソフトウエアアプリケーションの両方を含む種々の異なる種類のソフトウエアアプリケーション中で実施されうる。更に、コード部分４０１’によって示される本発明の特徴を組み込んだソフトウエアアプリケーションの実行は、図１に示す種類のネットワークを含む、様々なマスタ・スレーブ型コンピュータネットワーク上で実施されうる。
【００４０】
　本発明の異なる実施例は、フレキシブルオペレーショングループのフラットオペレーションがスレーブコンピュータ上で実行されうるかどうかを判定する種々のヒューリスティックなアルゴリズムを使用しうる。例えば、本発明の幾つかの実施例は、フラットオペレーションによって処理されるべき入力データの量に基づいて、フラットオペレーションがスレーブコンピュータ上で実行されうるかどうかを判定するヒューリスティックを使用しうる。この種類のヒューリスティックは、入力データが予め設定された値よりも大きければ、フラットオペレーションがスレーブコンピュータ上で実行されうると判定しうる。更に、これらの実施例は、異なるフレキシブルオペレーショングループのための異なる予め設定された値を有するヒューリスティックを使用しうる。ポリゴンの面積を加算するオペレーションは、入力データが５００００個以上のポリゴンを含む場合でもシングルプロセッサスレーブコンピュータ上で効率的に実行されうる。一方で、ポリゴンを避けさせるオペレーションは、入力データが２０００個のポリゴンだけのとき、シングルプロセッサスレーブコンピュータ上で効率的に実行されるには大きすぎることがある。
【００４１】
　本発明の他の実施例は、マスタコンピュータとスレーブコンピュータとの間の通信インタフェースの状態に基づいて、フラットオペレーションがスレーブコンピュータ上で実行されうるかどうかを判定するヒューリスティックを使用しうる。例えば、通信インタフェースが予め設定されたデータ転送速度以上で動作しているとき、又は予め設定された設定と一致するとき、ヒューリスティックは、その関連するフラットオペレーションはスレーブコンピュータ上で実行されうると判定しうる。本発明のこれらの実施例のうちの幾つかでは、ヒューリスティックは、通信インタフェースの状態が、ヒューリスティックを実行するプロセッサに手動で与えられることを必要としうる。本発明の更なる他の実施例では、ヒューリスティックは、通信インタフェースの状態を自動的に判定しうる。ヒューリスティックは、例えば、遠隔コンピュータへ問合せテストメッセージを送信し、戻りメッセージが受け取られるまでの遅延を測定しうる。
【００４２】
　本発明の更なる他の実施例は、入力データを分割し、多数の遠隔コンピュータ上での実行のためにフレキシブルオペレーショングループの独立したオペレーションを複製することを判定しうるヒューリスティックを使用しうる。例えば、ヒューリスティックは、入力データが１０００００個以上のポリゴンであるとき、ポリゴンの面積を加算するフラットオペレーションのグループがシングルプロセッサコンピュータでは効率的に実行されえないことを判定しうる。ヒューリスティックは更に、入力データの量が３００００個以下のポリゴンの多数のグループへ分割されるべきであること、及び、フラットオペレーションの複製には実行のために異なるスレーブコンピュータへの入力データの各部分が与えられるべきであることを判定しうる。
【００４３】
　更に、本発明の幾つかの実施例によって用いられるヒューリスティックは、マスタコンピュータ及び／又はスレーブコンピュータ上で資源が直ぐに利用可能であるか否かに関わらず、フレキシブルオペレーショングループがマスタコンピュータ又は遠隔コンピュータ上で実行されることを明確に判定しうる。例えば、フレキシブルオペレーショングループは、特定の組の状況の下では、マスタコンピュータ上ではなくスレーブコンピュータ上で常に実行されるべきオペレーションを含みうる。これらの種類のヒューリスティックアルゴリズムは、上述の規準の任意の組み合わせを使用しうるものでありうるが、これに限られるものではない。この種類のヒューリスティックでは、ヒューリスティックはマスタコンピュータ又はスレーブコンピュータ上で利用可能な資源とは無関係に実行されうる。
【００４４】
　もちろん、本発明の更なる他の実施例によるソフトウエアアプリケーションは、所望であれば各フレキシブルオペレーショングループに対する異なる種類のヒューリスティックの組み合わせを使用しうる。例えば、本発明の幾つかの実施例によるソフトウエアアプリケーションは、その関連する１つ又は複数のフレキシブルオペレーショングループに対する入力データの量のみを考慮に入れるヒューリスティックを使用しうる。ソフトウエアアプリケーション中の他のフレキシブルオペレーショングループは、組み合わされた２つのヒューリスティックを含みうるものであり、１つのヒューリスティックはフレキシブルオペレーショングループのための入力データの量に基づき、他のヒューリスティックはスレーブコンピュータとの通信インタフェースの状態に基づく。アプリケーション中の更なる他のフレキシブルオペレーショングループは、入力データの量と遠隔コンピュータとの通信インタフェースの状態に基づいて、フレキシブルオペレーショングループに対する入力データが分割され、フレキシブルオペレーショングループが多数のスレーブコンピュータ間で複製されるヒューリスティックを含みうる。
【００４５】
　種々のヒューリスティックを使用することに加えて、本発明の種々の実施例による幾つかのソフトウエアアプリケーションは、独立のオペレーションをフレキシブルオペレーショングループへと異なるグループ化を行うことを含みうる。例えは、ソフトウエアアプリケーションは、一組の独立のオペレーションが１つのフレキシブルオペレーショングループへと編成される第１のモードと、同じ独立のオペレーションの組が２つの別々のフレキシブルオペレーショングループへ編成される第２のモードとを有しうる。ソフトウエアアプリケーションが実行のために機械命令へコンパイルされると、ユーザは、例えばホストコンピュータと遠隔コンピュータとの間の通信インタフェースの構成に基づいて、独立のオペレーションのどの編成が使用されるべきかを指定する。
【００４６】
　同様に、本発明の種々の実施例による幾つかのソフトウエアアプリケーションは、ユーザが利用可能な動作環境に依存して、ユーザが異なるモードを使用することを可能としうる。例えば、本発明の１つ実施例によるソフトウエアアプリケーションは、幾つかのオペレーションが独立のオペレーションとして指定される第１のモードと、更なるより少ない、又は異なるオペレーションが独立のオペレーションとして指定される第２のモードとを有しうる。上述したように、オペレーションのための入力データの依存性は、入力データのグループ分けによって決定されえ、どのオペレーションが独立のオペレーションであるかの判定はソフトウエアアプリケーションが生成されたときに都合良く行われうる。更に、スレーブコンピュータの利用可能なメモリのサイズは、入力データのグループ分けに対する上限を決定する。
【００４７】
　従って、ソフトウエアアプリケーションが、例えば大容量メモリ及び／又は多数のプロセッサを有するスレーブコンピュータを有するコンピュータネットワーク上で実行される場合、幅広い組合せの入力データが独立であるようグループ分けされえ、従って多数のオペレーションが独立のオペレーションであると指定されうる。或いは、ソフトウエアアプリケーションが比較的小さいメモリを有するシングルプロセッサコンピュータを用いたコンピュータネットワーク上で実行される場合、あまり多様でない入力データが独立であるとグループされえ、従ってより少ないオペレーションがフラットオペレーションであると指定されうる。独立のオペレーションの異なる指定を有する多数のモードを有することにより、ユーザは利用可能なマスタ・スレーブネットワーク上で最も効率的に実行されるモードを選択しうる。
【００４８】
　［オペレーション分散ツール］
　図５は、フレキシブルオペレーショングループを分散するための本発明の一実施例によるオペレーション分散ツール５０３を示す図である。図示するように、ツール５０３は、図１に示すネットワーク中でマスタコンピュータ１０１からスレーブコンピュータ１１５へフレキシブルオペレーショングループを分散するよう実施される。しかしながら、分散ツール５０３の他の実施例は種々のマスタ・スレーブコンピュータネットワーク上で実施されうることが認識されるべきである。
【００４９】
　図５からわかるように、オペレーション分散ツール５０３は、フレキシブルオペレーショングループ識別モジュール５０５と、遠隔実行判定モジュール５０７と、遠隔コンピュータインタフェースモジュール５０９とを含む。図示の実施例では、これらの各モジュールは、ソフトウエア命令を実行するプロセッサ１０９を用いて実施される。しかしながら本発明の他の実施例では、これらのモジュールのうちの１つ又はそれ以上は、ハードウエア、ファームウエア、又は、ソフトウエア、ファームウエア及びハードウエアの任意の組み合わせで実施されうる。
【００５０】
　以下説明するように、ソフトウエアアプリケーションの種々のオペレーションは、最初は一般オペレーション実行モジュール５０１上で実行される。フレキシブルオペレーショングループ識別モジュール５０５は、同様に一般オペレーション実行モジュール５０１によって実行されうるオペレーションを受け取り、構文解析し、遠隔コンピュータ１１５上で実行されうる各フレキシブルオペレーショングループを識別する。フレキシブルオペレーショングループ識別モジュール５０５がフレキシブルオペレーショングループを識別した後、遠隔実行判定モジュール５０７は、フレキシブルオペレーショングループがマスタコンピュータ１０１上で実行されるべきか１つ又はそれ以上のスレーブコンピュータ１１５上で実行されるべきかを判定する。フレキシブルオペレーショングループがマスタコンピュータ１０１上で実行されるべきかを判定するために、遠隔実行判定モジュール５０７は、上述したように、フレキシブルオペレーショングループに関連付けられる１つ又はそれ以上のヒューリスティックを使用しうる。遠隔実行判定モジュール５０７は、マスタコンピュータ１０１上の資源の利用可能性及び／又はスレーブコンピュータ１１５上の資源の利用可能性を考慮に入れうる。
【００５１】
　遠隔実行判定モジュール５０７がフレキシブルオペレーショングループがマスタコンピュータ１０１上で実行されるべきであると判定すると、遠隔実行判定モジュール５０７はフレキシブルオペレーショングループに対する制御を実行のために一般オペレーション実行モジュール５０１へ戻す。他方で、遠隔実行判定モジュール５０７がフレキシブルオペレーショングループが１つ又はそれ以上のスレーブコンピュータ１１５上で実行されるべきであると判定すると、遠隔実行判定モジュール５０７は遠隔コンピュータインタフェースモジュール５０９へ制御を移す。これに応じて、遠隔コンピュータインタフェースモジュール５０９はインタフェース装置１１１を通じて１つ又はそれ以上のスレーブコンピュータ１１５と通信し、スレーブコンピュータ１１５に対して適当な入力データを用いてフレキシブルオペレーショングループを実行するよう命令する。
【００５２】
　スレーブコンピュータ１１５に対してフレキシブルオペレーショングループを実行するよう命令した後、遠隔コンピュータインタフェースモジュール５０９はスレーブコンピュータ１１５からフレキシブルオペレーショングループを実行することによって生する結果を待つ。スレーブコンピュータ１１５が成功した結果を戻す場合、遠隔コンピュータインタフェースモジュール５０９は成功した結果を一般オペレーション実行モジュール５０１へ伝え、一般オペレーション実行モジュール５０１はソフトウエアアプリケーションの実行を再開する。しかしながら、スレーブコンピュータ１１５から得られた結果が、フレキシブルオペレーショングループの実行が失敗したことを示す場合、遠隔コンピュータインタフェースモジュール５０９は一般オペレーション実行モジュール５０１に対してフレキシブルオペレーショングループがうまく実行されなかったことを知らせる。本発明の幾つかの実施例では、一般オペレーション実行モジュール５０１はフレキシブルオペレーショングループに対する制御を再開することができ、フレキシブルオペレーショングループ自体を実行する。しかしながら、本発明の他の実施例は、フレキシブルオペレーショングループを実行のために他のスレーブコンピュータ１１５へ与えうる。このようにして、スレーブコンピュータ１１５のうちの１つの故障は、マスタコンピュータ１０１上のソフトウエアアプリケーションの実行を妨げない。
【００５３】
　［オペレーションの分散の方法］
　図６Ａ乃至図６Ｃは、本発明による種々の実施例によるマスタコンピュータから１つ又はそれ以上のスレーブコンピュータへのオペレーションの分散の方法を示す図である。図示の方法は、例えば、図５に示すオペレーション分散ツール５０３によって使用されうる。もちろん、図示の方法は、本発明の他の実施例による分散ツールと共に使用されうる。
【００５４】
　ここで図６Ａを参照するに、スレッドＴ１はソフトウエアアプリケーションを構成する複数のオペレーションを受け取り、ステップ６０１で、与えられた入力データを用いてこれらのオペレーションの実行を開始する。ステップ６０３において、スレッドＴ１はフレキシブルオペレーショングループを構成するオペレーションのグループに出会う。上述したように、フレキシブルオペレーショングループは独立の入力データを用いるオペレーションを有するフレキシブルオペレーショングループ内に含まれるオペレーションを識別する識別子を含む。図示の実施例では、フレキシブルオペレーショングループはまた、やはり上述したように１つ又はそれ以上のヒューリスティックを含む。
【００５５】
　従って、ステップ６０５において、第１のスレッドＴ１は、フレキシブルオペレーショングループに関連付けられる１つ又は複数のヒューリスティックを実行する。１つ又は複数のヒューリスティックを実行した結果が否定的であれば（即ち、１つ又は複数のヒューリスティックがフレキシブルオペレーショングループがスレーブコンピュータ上で実行されてはならないことを示す場合）、ステップ６２３において、フレキシブルオペレーショングループは、スレッドＴ１によって、或いはマスタコンピュータ１０１上で動作する他のスレッドによって、マスタコンピュータ１０１上で実行される。しかしながら、１つ又は複数のヒューリスティックを実行した結果が肯定的であれば（即ち、１つ又は複数のヒューリスティックがフレキシブルオペレーショングループがスレーブコンピュータ上で実行されねばならないことを示す場合）、ステップ６０９において、スレッドＴ１は、フレキシブルオペレーショングループを実行するのに利用可能な他のスレッドがマスタコンピュータ１０１上にあるかどうかを判定する。マスタコンピュータ１０１上の他のスレッドがフレキシブルオペレーショングループを実行するために利用可能であれば、フレキシブルオペレーショングループはステップ６２３において利用可能なスレッドによってマスタコンピュータ１０１上で実行される。
【００５６】
　マスタコンピュータ１０１上に利用可能なスレッドがない場合、ステップ６１１においてスレッドＴ１は、スレーブコンピュータ１１５上でスレッドが利用可能であるかどうかを判定する。再び、どのスレーブコンピュータ１１５上にも利用可能なスレッドがなければ、フレキシブルオペレーショングループは、マスタコンピュータ上で利用可能となったときにステップ６２３においてマスタコンピュータ１０１上で実行される。しかしながら、スレッドがスレーブコンピュータ１１５上で利用可能であれば、ステップ６１３においてスレッドＴ１はフレキシブルオペレーショングループを実行のためにスレーブコンピュータ１１５へフレキシブルオペレーショングループを渡す。ステップ６１５においてスレッドＴ１はスリープ状態となり、ステップ６１７においてスレーブコンピュータ１１５からフレキシブルオペレーショングループを実行した結果が戻されるまでスリープ状態のままである。これに応答して、ステップ６１９においてスレッドＴ１はスリープ解除され、ステップ６２１においてスレーブコンピュータ１１５上でのフレキシブルオペレーショングループの実行が成功したかどうかを判定する。例えば、マスタコンピュータ１０１がスレーブコンピュータ１１５と通信するためにソケットプロトコルを用いる場合、ソケットはスレーブコンピュータ１１５へエラーメッセージを戻す。従って、スレッドＴ１がフレキシブルオペレーショングループを実行したことによる出力データではなくエラーメッセージを受け取った場合、スレーブコンピュータ１１５上でのフレキシブルオペレーショングループの実行は失敗したということができる。
【００５７】
　スレーブコンピュータ１１５上でのフレキシブルオペレーショングループの実行が失敗であれば、ステップ６２３において、フレキシブルオペレーショングループは、スレッドＴ１又は他のスレッドによってマスタコンピュータ１０１上で実行される。一旦マスタコンピュータ１０１上がフレキシブルオペレーショングループをうまく実行すると、ステップ６２５において、スレッドＴ１はソフトウエアアプリケーションの残るオペレーションの実行を続ける。他方で、スレーブコンピュータ１１５がフレキシブルオペレーショングループの実行をうまく実行すると、実行の結果はスレッドＴ１へ与えられ、スレッドＴ１はステップ６２５においてソフトウエアアプリケーションの残るオペレーションの実行を続ける。
【００５８】
　［結び］
　このように、上述のオペレーションを分散する方法及びツールは、マスタコンピュータから１つ又はそれ以上のスレーブコンピュータへオペレーションを分散するための信頼性の高い効率的な技術を与える。しかしながら、本発明の種々の実施例は、上述の方法の１つ又はそれ以上の段階を省きうることが認められるべきである。例えば、本発明の幾つかの実施例では、フレキシブルオペレーショングループはヒューリスティックを含まないことがある。或いは、本発明の幾つかの実施例は、マスタコンピュータ上、スレーブコンピュータ上、又はその両方の上に利用可能な資源があるかどうかを考慮する段階を省きうる。更に、本発明の幾つかの実施例は、マスタコンピュータ又はスレーブコンピュータのいずれかの上で利用可能な資源とは無関係に、フレキシブルオペレーショングループがマスタコンピュータ又はスレーブコンピュータ上で実行されるかどうかを明確に判定するヒューリスティックを使用しうる。更に、本発明の他の実施例は、上述の方法の段階を並べ替えたものでありうる。例えば、第１のスレッドはヒューリスティックを実行する前にマスタコンピュータ及び／又はスレーブコンピュータ上で利用可能な資源を判定しうる。
【００５９】
　本発明の更なる変形例は当業者によって明らかとなろう。例えば、図１に示す動作環境は、１対Ｎ型の通信インタフェースを用いて単一のマスタコンピュータ１０１をスレーブコンピュータ１１５に接続する。しかしながら、本発明の他の実施例は、スレーブコンピュータ１１５へオペレーションを分散するために多数のマスタコンピュータ１０１を使用しうる。更に、通信インタフェースは、１つのスレーブコンピュータ１１５が他のスレーブコンピュータ１１５へオペレーションを再分散することを可能とするバス型のインタフェースでありうる。更に特定的には、１つ又はそれ以上のスレーブコンピュータ１１５はオペレーションを１つ又はそれ以上のスレーブコンピュータへ再分散するために本発明の実施例を実行するための制御機能を含みうる。従って、マスタコンピュータ１０１がより小さいフレキシブルオペレーショングループへ分割されうる多数のオペレーションをスレーブコンピュータ１１５へ分散した場合、スレーブコンピュータ１１５はオペレーションのうちの一部を実行のために他のスレーブコンピュータ１１５へ割り当てうる。更に、本発明の種々の実施例は、１つの層のコンピュータが第２の層の１つ又はそれ以上のコンピュータへオペレーションを分散し、夫々が第３の層のコンピュータ間にオペレーションを分散しうる、多層のマスタ／スレーブコンピュータを使用しうる。上述の及び他の変形は、当業者に明らかであろう。
【００６０】
　このように、本発明についてその望ましい及び典型的な実施例に関して説明した。当業者が本願の開示を読むことにより、添付の請求項の範囲及び主題を逸脱することなく、多数の他の実施例、変更、及び変形が得られるであろう。
【図面の簡単な説明】
【００６１】
【図１】本発明の様々な実施例によって使用されうるシングルプロセッサコンピュータのネットワークとリンクされたマルチプロセッサコンピュータを示す図である。
【図２】本発明の幾つかの実施例によるフォトリソグラフィーレイアウトの精度をシミュレートし確認するための階層型セルベース・ソフトウエアアプリケーションのコンポーネントを示す図である。
【図３】図２に示す階層型セルベース・ソフトウエアアプリケーションによって用いられる種々のセルの階層的な配置を示す図である。
【図４Ａ】単一のスレッドを用いたソフトウエアアプリケーションのオペレーションの配置及び実行を示す図である。
【図４Ｂ】本発明の様々な実施例による多数のスレッドを用いたソフトウエアアプリケーションのオペレーションの配置及び実行を示す図である。
【図５】本発明の実施例によるオペレーション分散ツールを示す図である。
【図６Ａ】本発明の様々な実施例によるマルチプロセッサコンピュータから遠隔コンピュータへの１つ又はそれ以上のオペレーションのグループを分散する方法を示す図である。
【図６Ｂ】本発明の様々な実施例によるマルチプロセッサコンピュータから遠隔コンピュータへの１つ又はそれ以上のオペレーションのグループを分散する方法を示す図である。
【図６Ｃ】本発明の様々な実施例によるマルチプロセッサコンピュータから遠隔コンピュータへの１つ又はそれ以上のオペレーションのグループを分散する方法を示す図である。
【符号の説明】
【００６２】
　４０１’　ソフトウエア部分
　４０３　入力／出力コマンド
　４０５　フラットオペレーション
　４０７　第１のスレッド
　４０９　フレキシブルオペレーショングループ
　４１１　フレキシブルオペレーショングループ
　４１３　識別子
　４１５　ヒューリスティック
　４１７　識別子
　４１９　ヒューリスティック
　４２１　第２のスレッド
　４２３　第３のスレッド
【図１】
2004145885.tif 000003
【図２】
2004145885.tif 000004
【図３】
2004145885.tif 000005
【図４Ａ】
2004145885.tif 000006
【図４Ｂ】
2004145885.tif 000007
【図５】
2004145885.tif 000008
【図６Ａ】
2004145885.tif 000009
【図６Ｂ】
2004145885.tif 000010
【図６Ｃ】
2004145885.tif 000011