(57)【特許請求の範囲】
【請求項１】
マスタ演算スレッドを実行するマスタコンピュータと、スレーブ演算スレッドを実行するスレーブコンピュータとの間でソフトウェア処理の演算セットを分散する方法であって、
第１のマスタ演算スレッドに第１の演算セットを提供するステップと、
前記第１の演算セットに関連する第１の処理データを前記第１のマスタ演算スレッドに提供するステップと、
第２のマスタ演算スレッドに第２の演算セットを提供するステップと、
前記第２の演算セットに関連する第２の処理データを前記第２のマスタ演算スレッドに提供するステップであって、前記第２の処理データが、少なくとも第１の部分と、前記第２の処理データの前記第１の部分と並列演算可能である第２の部分とを含んでいるステップとを含み、
前記第２のマスタ演算スレッドが従属マスタ演算スレッドであり、前記第１のマスタ演算スレッドが、前記第２の演算セットおよび前記第２の処理データを前記第２のマスタ演算スレッドに提供する実行マスタ演算スレッドであり、
前記第２のマスタ演算スレッドが、前記第２の演算セットと前記第２の処理データの前記第１の部分とを、第１のスレーブ演算スレッドに提供するステップと、
前記第２のマスタ演算スレッドが、前記第２の処理データの前記第２の部分を使用して、前記第２の演算セットを実行するステップと、
前記第２のマスタ演算スレッドが、前記第２の部分を使用して実行した結果と、前記第１のスレーブ演算スレッドによって前記第１の部分を使用して得られた実行結果とをコンパイルして、コンパイルされた実行結果を、前記第１のマスタ演算スレッドに与えるステップとを含む、演算セットを分散する方法。
【請求項２】
第３のマスタ演算スレッドに第３の演算セットを提供するステップと、
前記第３の演算セットに関連する第３の処理データを前記第３のマスタ演算スレッドに提供するステップであって、前記第３の処理データが、少なくとも第１の部分と、前記第３の処理データの前記第１の部分と並列演算可能である第２の部分とを含んでいるステップとをさらに含む、請求項１に記載の、演算セットを分散する方法。
【請求項３】
前記第３のマスタ演算スレッドが、前記第３の演算セットと前記第３の処理データの前記第１の部分とを、第３のスレーブ演算スレッドに提供するステップをさらに含む、請求項２に記載の、演算セットを分散する方法。
【請求項４】
前記第３のマスタ演算スレッドが、前記第３の演算セットと前記第３の処理データの前記第２の部分とを、第４のスレーブ演算スレッドに提供することをさらに含む、請求項３に記載の、演算セットを分散する方法。
【請求項５】
前記第３のマスタ演算スレッドが、前記第３の処理データの前記第２の部分を使用して、前記第３の演算セットを実行するステップをさらに含む、請求項３に記載の、演算セットを分散する方法。
【請求項６】
前記処理データが、マイクロ素子設計データである、請求項１ないし請求項５のいずれか１項に記載の、演算セットを分散する方法。
【請求項７】
前記演算セットが、設計ルール確認処理、レイアウト対回路図検証処理、位相シフトマスク処理、光学プロセス修正処理、光学プロセスルール確認処理、および分解能向上技術処理から成る群より選択される処理を実行するためのものである、請求項６に記載の、演算セットを分散する方法。
【請求項８】
前記第１の演算セットが、単一の演算を含んでいる、請求項１に記載の、演算セットを分散する方法。
【請求項９】
前記第１の演算セットが、複数の演算を含んでいる、請求項１に記載の、演算セットを分散する方法。
【請求項１０】
ヌル値を有する処理データを使用して、複数の演算を実行することをさらに含む、請求項１ないし請求項９のいずれか１項に記載の、演算セットを分散する方法。
【請求項１１】
第１の演算セットと第２の演算セットとを含む複数の演算セットを格納している演算記憶ユニットと、
第１の処理データと第２の処理データとを含む処理データと、前記第１の演算セットを前記第１の処理データと関連付け、前記第２の演算セットを前記第２の処理データと関連付ける関係データとを格納している第１のデータ記憶ユニットと、
前記第１の処理データを使用して、前記第１の演算セットを処理する第１のマスタ処理ユニットと、
前記第２の処理データを使用して、前記第２の演算セットを処理する第２のマスタ処理ユニットと、
第１のスレーブ処理ユニットとを備え、
前記第２のマスタ処理ユニットが従属マスタ処理ユニットであり、前記第１のマスタ処理ユニットが、前記第２の演算セットおよび前記第２の処理データを前記第２のマスタ処理ユニットに提供する実行マスタ処理ユニットであり、
前記第２の処理データが、少なくとも第１の部分と、前記第２の処理データの前記第１の部分と並列演算可能である第２の部分とを含み、
前記第２のマスタ処理ユニットが、前記第２の処理データの前記第１の部分および前記第２の演算セットを前記第１のスレーブ処理ユニットに提供し、
前記第２のマスタ処理ユニットが、前記第２の処理データの前記第２の部分を使用して、前記第２の演算セットを実行し、この第２の演算セットを実行した結果と前記第１のスレーブ処理ユニットによって前記第１の部分を使用して得られた実行結果とをコンパイルして、コンパイルされた実行結果を、前記第１のマスタ処理ユニットに与えることによって、前記第２の演算セットを処理する、処理装置。
【請求項１２】
前記第１のマスタ処理ユニットが、前記第１のデータ記憶ユニットを使用して前記第１の演算セットを処理する、請求項１１に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マスタコンピュータから１台以上のスレーブコンピュータへの並列演算の分散を指向する。本発明の各局面は、マイクロ素子（マイクロデバイス）設計処理演算などの、マルチプロセッサマルチスレッドマスタコンピュータから１台以上のシングルプロセッサまたはマルチプロセッサスレーブコンピュータへのソフトウェア演算の分散に適用可能である。
【背景技術】
【０００２】
シングルプロセッサコンピュータ上で、数多くのソフトウェアアプリケーションを効率的に実行することができる。しかし、ソフトウェアアプリケーションの中には、あまりにも多くの演算を有するために、シングルプロセッサコンピュータ上で経済的な時間内に逐次実行不可能なものがある。例えば、マイクロ素子設計処理ソフトウェアアプリケーションは、何十万あるいは何百万もの入力データ値に対して十万以上の演算を実行する必要がある。この種のソフトウェアアプリケーションをより迅速に実行するために、多数の処理スレッドを同時に使用可能なマルチプロセッサを使用するコンピュータが開発されている。この様なコンピュータは、シングルプロセッサコンピュータよりも迅速に複雑なソフトウェアアプリケーションを実行できるが、この様なマルチプロセッサコンピュータを購入、維持するには非常に費用がかかる。マルチプロセッサコンピュータでは、プロセッサは、多数の演算を同時に実行するので、関連する演算の並列実行を調整するために専用オペレーティングシステムを使用しなければならない。さらに、そのマルチプロセッサは、メモリなどのリソースへのアクセスを同時に求めるので、マルチプロセッサコンピュータのバス構造や物理的な配置は、本質的にシングルプロセッサコンピュータよりも複雑である。
【０００３】
大規模マルチプロセッサコンピュータにかかわる問題点や費用を考慮して、シングルプロセッサコンピュータがリンクされたネットワークが、単一のマルチプロセッサコンピュータの使用に対する代替として一般的となっている。パーソナルコンピュータなどの従来のシングルプロセッサコンピュータの価格は、過去２、３年で著しく低下している。さらに、多数のシングルプロセッサコンピュータの動作をネットワークにリンクする技術は、高性能かつ高信頼性となっている。したがって、現在では一般的に、比較的単純かつ低価格のシングルプロセッサコンピュータのネットワークまたは「ファーム」が、数百万ドルのマルチプロセッサコンピュータに取って代わりつつある。
【０００４】
単一のマルチプロセッサコンピュータから複数のネットワーク化シングルプロセッサコンピュータへのシフトは、処理中のデータが並列性を有する場合に特に有用である。この種のデータでは、あるデータ部分が、別のデータ部分と無関係である（別のデータ部分に依存しない）。すなわち、第１のデータ部分の操作は、第２のデータ部分の認識または第２のデータ部分へのアクセスを必要としない。したがって、あるシングルプロセッサコンピュータが、第１のデータ部分に対して演算を実行する一方、別のシングルプロセッサコンピュータが、同時に第２のデータ部分に対して同じ演算を実行することができる。多数のコンピュータを使用して様々なグループのデータに対して同じ演算を同時すなわち「並列」に実行することによって、大量のデータを迅速に処理することができる。この様な多数のシングルプロセッサコンピュータの使用は、マイクロ素子設計データの分析に特に有利である。この種のデータでは、ある設計部分、例えばマイクロ回路の第１の領域における半導体ゲートは、別の設計部分、例えばマイクロ回路の第２の領域における配線ラインと全く無関係である。したがって、あるコンピュータが、ゲートに関して構造の最小幅の確認を定義する演算などの設計分析演算を実行する一方、別のコンピュータが、配線ラインに関して同じ演算を実行することができる。
【０００５】
しかし、多数のネットワーク化シングルプロセッサコンピュータの使用には、まだ若干の問題点がある。例えば、多数のネットワーク化コンピュータを用いて得られる効率は、現在のところ、処理中のデータの並列性により制約を受ける。あるグループの演算に関連する処理データが４つの並列部分しか有さない場合、これらの演算は、最高でも４台の異なるコンピュータにより実行可能なだけである。ユーザが、ネットワークで利用可能なさらに１００台のコンピュータを有する場合であっても、データを、４つの並列部分よりも多く分割することはできず他の利用可能なコンピュータは遊休状態となり、データの並列部分を有する４台のコンピュータで演算が実行される。この様な拡張性の欠如は、更なる演算リソースをネットワークに追加することによって複雑なソフトウェアアプリケーションの処理時間の低減を望むユーザにとって極めて欲求不満である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第６，２３０，２９９号明細書
【特許文献２】米国特許第６，２４９，９０３号明細書
【特許文献３】米国特許第６，３３９，８３６号明細書
【特許文献４】米国特許第６，３９７，３７２号明細書
【特許文献５】米国特許第６，４１５，４２１号明細書
【特許文献６】米国特許第６，４２５，１１３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
したがって、処理のためにネットワーク内の多数のコンピュータの間で処理データをより広範に分散可能であることが望ましい。
本発明の各種局面は、ソフトウェアアプリケーション用の処理データを複数のコンピュータの間でさらに効率的に分散するための技術を好適に提供する。以下に詳述するように、この様な技術を実施するツールおよび方法の実施形態は、分析のために、マルチプロセッサコンピュータからネットワーク内の１台以上のシングルプロセッサコンピュータへとマイクロ素子設計データを分散する特殊な用途を有する。
【課題を解決するための手段】
【０００８】
本発明の各種実施形態によれば、並列演算セットが識別される。以下に詳述するように、２つの演算セットのうちの一方の演算セットの実行が、他方の演算セットを先に実行することから得られる結果を必要としない場合や、その逆の場合、２つの演算セットは並列である。そして、各並列演算セットが、処理のために、関連する処理データと共にマスタ演算スレッドに与えられる。例えば、第１の演算セットは、第１の演算セットを実行するために使用される第１の処理データと共に、第１のマスタ演算スレッドに与えられる。そして、第２の演算セットは、第２の演算セットを実行するために使用される第２の処理データと共に、第２のマスタ演算スレッドに与えられる。第１の演算セットは、第２の演算セットと並列であるので、第１のマスタ演算スレッドは、第１の演算セットを処理し、第２のマスタ演算スレッドは、第２の演算セットを処理することができる。
【０００９】
本発明の各種実施例では、各マスタ演算スレッドは、その後、その演算セットに関連する処理データの並列性に基づいて、その演算セットを１台以上のスレーブコンピュータに与える。例えば、処理データが２つの並列部分を含む場合、第１の部分を第１のスレーブ演算スレッドに与える。そして、マスタ演算スレッドは、処理データの第２の部分を使用して演算セットを実行し、第１のスレーブ演算スレッドは、処理データの第１の部分を使用して演算セットを実行することができる。この様にして、ソフトウェアアプリケーションが使用する処理データおよびソフトウェアアプリケーションが実行する演算の並列性に基づいて、ソフトウェアアプリケーションの実行を多数（複数）のネットワーク化コンピュータの間でさらに広範に分散することができる。
【００１０】
本発明のこれらおよびその他の特徴および局面は、以下の詳細な説明を検討すると明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】本発明の各種実施形態で使用可能な、シングルプロセッサコンピュータのネットワークにリンクされたマルチプロセッサコンピュータの概略図である。
【図２】本発明の各種実施形態で使用可能な、データセルの階層構造の一例を概略的に示す。
【図３】本発明の各種実施形態で使用可能な、演算の階層構造の一例を概略的に示す。
【図４】本発明の各種実施形態に従って、実施される演算分散ツールを示す。
【図５Ａ】本発明の各種実施形態に従って、マスタ演算ユニットの間で演算セットを分散する方法を説明するフローチャートを示す。
【図５Ｂ】本発明の各種実施形態に従って、マスタ演算ユニットの間で演算セットを分散する方法を説明するフローチャートを示す。
【図６】本発明の各種実施形態に従って、処理のためにスレーブ演算ユニットの間で演算セットを分散する方法を説明するフローチャートを示す。
【発明を実施するための形態】
【００１２】
序
本発明の各種実施形態は、実行のために多数のネットワーク化コンピュータの間で演算を分散するためのツールおよび方法に関する。上記のように、本発明のある実施形態の態様は、少なくとも１台のマルチプロセッサマスタコンピュータおよび複数のシングルプロセッサスレーブコンピュータを含む演算ネットワークでの演算の分散に対する特殊な用途を有する。したがって、本発明の理解をさらに容易にするために、複数のシングルプロセッサスレーブコンピュータにリンクされたマルチプロセッサマスタコンピュータを有するネットワークの例を説明する。
典型的な動作環境
当業者に理解されるように、本発明の各種実施例に係る演算分散は、通常、１つ以上のプログラム可能な演算装置により実行されるコンピュータ実行可能ソフトウェア命令を使用して実行される。本発明は、ソフトウェア命令を使用して実施されるので、まず、本発明の各種実施形態を使用する、一般的なプログラム可能コンピュータシステムの構成要素および動作について説明する。特に、ホストコンピュータまたはマスタコンピュータおよび１台以上のリモートコンピュータまたはスレーブコンピュータを有するコンピュータネットワークの構成要素および動作について、図１を参照しながら説明する。しかし、この動作環境は、適切な動作環境の一例に過ぎず、本発明の使用や機能の範囲の如何なる限定をも示唆する意図はない。
【００１３】
図１において、マスタコンピュータ１０１は、複数の入出力装置１０３とメモリ１０５とを備えたマルチプロセッサコンピュータである。入出力装置１０３は、ユーザとの入力データや出力データの授受のための任意の装置を備えている。入力装置には、例えば、ユーザから入力を受けるためのキーボード、マイク、スキャナまたはポインティング装置が含まれる。そして、出力装置には、表示モニタ、スピーカ、プリンタまたは触覚フィードバック装置が含まれる。これらの装置およびその接続は、当該技術分野において周知であるので、ここでは詳述しない。
【００１４】
同様に、メモリ１０５も、マスタコンピュータ１０１によってアクセス可能なコンピュータ読取可能媒体の任意の組み合わせを使用して実現される。コンピュータ読取可能媒体には、例えば、読取／書込メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、電子的消去可能／プログラム可能読取専用メモリ（ＥＥＰＲＯＭ）もしくはフラッシュメモリマイクロ回路装置、ＣＤ−ＲＯＭディスク、デジタルビデオディスク（ＤＶＤ）、またはその他の光学的記憶装置などのマイクロ回路メモリ装置が含まれる。コンピュータ読取可能媒体には、磁気カセット、磁気テープ、磁気ディスク、その他の磁気記憶装置、パンチ媒体、ホログラフ記憶装置、その他、所望の情報を格納するために使用可能な媒体が含まれる。
【００１５】
以下に詳述するように、マスタコンピュータ１０１は、本発明の各種実施例に係る１つ以上の演算を行うためのソフトウェアアプリケーションを実行する。したがって、メモリ１０５は、実行時に１つ以上の演算を行うためのソフトウェアアプリケーションを実行するソフトウェア命令１０７Ａを格納する。また、メモリ１０５は、ソフトウェアアプリケーションと共に使用されるデータ１０７Ｂも格納する。図示の実施形態において、データ１０７Ｂには、少なくとも部分的に並列となる演算を実行するためにソフトウェアアプリケーションが使用する処理データが含まれる。
【００１６】
また、マスタコンピュータ１０１は、複数のプロセッサ１０９と、インタフェース装置１１１とを備えている。プロセッサ１０９は、ソフトウェア命令１０７Ａを実行するためにプログラム可能な任意のタイプの処理装置とすることができる。プロセッサ１０９は、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）またはＸｅｏｎ（商標）マイクロプロセッサ、Ａｄｖａｎｃｅｄ Ｍｉｃｒｏ Ｄｅｖｉｃｅｓ Ａｔｈｌｏｎ（商標）マイクロプロセッサ、またはＭｏｔｏｒｏｌａ ６８Ｋ／Ｃｏｌｄｆｉｒｅ（登録商標）マイクロプロセッサなど、市販の一般的なプログラム可能なマイクロプロセッサとすることができる。あるいは、プロセッサ１０９は、特定の種類の数値演算を最適に実行するように設計されたマイクロプロセッサなど、特注プロセッサとすることもできる。インタフェース装置１１１、プロセッサ１０９、メモリ１０５、および入出力装置１０３は、バス１１３によって共に接続されている。
【００１７】
インタフェース装置１１１によって、マスタコンピュータ１０１は、通信インタフェースを介してリモートスレーブコンピュータ１１５Ａ、１１５Ｂ、１１５Ｃ．．．１１５ｘと通信することができる。通信インタフェースは、例えば、従来の有線ネットワーク接続や光伝送有線ネットワーク接続を含む任意の適切なタイプのインタフェースとすることができる。通信インタフェースは、無線光接続、無線周波数接続、赤外線接続、音響接続などの無線接続とすることもできる。各種通信インタフェースのプロトコルおよび実施は、当該技術分野において周知であるので、ここでは詳述しない。
【００１８】
各スレーブコンピュータ１１５は、メモリ１１７と、プロセッサ１１９と、インタフェース装置１２１と、オプションとしてさらに１つの入出力装置１２３とを備え、これらはシステムバス１２５によって共に接続されている。マスタコンピュータ１０１と同様に、スレーブコンピュータ１１５用のオプションの入出力装置１２３には、キーボード、ポインティング装置、マイク、表示モニタ、スピーカ、およびプリンタなどの従来の入力または出力装置が含まれる。同様に、プロセッサ１１９は、任意のタイプの従来型または特注のプログラム可能プロセッサ素子とすることができ、メモリ１１７は、上記のコンピュータ読取可能媒体の任意の組み合わせを使用して実現することができる。インタフェース装置１１１と同様に、インタフェース装置１２１によって、スレーブコンピュータ１１５は、通信インタフェースを介してマスタコンピュータ１０１と通信することができる。
【００１９】
図示の実施例では、マスタコンピュータ１０１は、マルチプロセッサコンピュータであり、スレーブコンピュータ１１５は、シングルプロセッサコンピュータである。しかし、本発明の別の実施形態では、シングルプロセッサマスタコンピュータを使用可能である点に留意すべきである。さらに、リモートコンピュータ１１５のうちの１台以上が、その用途によっては複数のプロセッサを備えていてもよい。また、ホストコンピュータ１０１用に単一のインタフェース装置１１１が図示されているが、本発明の別の実施形態では、コンピュータ１０１が、多数の通信インタフェースを介してリモートコンピュータ１１５と通信するために、２つ以上の異なるインタフェース装置１１１を使用可能である点に留意すべきである。
並列処理データ
上記のように、本発明の各種実施例では、データ１０７Ｂの処理データは、ある程度の並列性を有する。マイクロ素子のための設計データなどの処理データは、例えば、マイクロ素子のための設計データなど、階層構造を有するデータとすることができる。マイクロ素子の最も周知のタイプは、一般にマイクロチップまたは集積回路とも呼ばれるマイクロ回路である。マイクロ回路素子は、自動車から電子レンジ、パーソナルコンピュータまで、様々な製品に使用されている。他のタイプのマイクロ素子、例えば、マイクロ電気機械（ＭＥＭ）素子としては、光学素子、機械装置および静的記憶素子がある。これらのマイクロ素子は、マイクロ回路素子の現在の重要性と同程度の重要性を有する見込みがある。
【００２０】
新規な集積回路の設計には、何百万ものトランジスタ、抵抗器、コンデンサ、またはその他の電気構造を、論理回路、メモリ回路、プログラム可能フィールドアレイ、およびその他の回路素子へと相互接続することが含まれる。コンピュータが、この様な大規模データ構造をより簡単に作成および分析できるように（そして、人間のユーザが、この様なデータ構造をより良く理解できるように）するために、大規模データ構造は、しばしば、通常「セル」と呼ばれる小規模データ構造へと階層的に構成される。したがって、マイクロプロセッサまたはフラッシュメモリの設計のために、１ビットを格納するメモリ回路を構成するトランジスタの全てを、単一の「ビットメモリ」セルとして分類してもよい。各トランジスタを個々に列挙する必要はなく、１ビットメモリ回路を構成するトランジスタのグループを、この様に一括して単一ユニットとして参照し、取り扱うことができる。同様に、より大規模な１６ビットメモリレジスタ回路を記述する設計データを、単一セルとして分類することができる。すると、この上位レベルの「レジスタセル」は、各ビットメモリセルとのデータの授受のための入出力回路など、その他種々の回路を記述する設計データと共に、１６のビットメモリセルを含む可能性がある。そして、１２８ｋＢメモリアレイを記述する設計データは、各レジスタセルとのデータの授受のための入出力回路など、それ自体の種々の回路を記述する設計データと共に、わずか６４，０００個のレジスタセルの組合せとして簡潔に記述することができる。
【００２１】
したがって、セルに分割されたデータ構造は、一般的に、階層構造に配列されたセルを有する。最下位レベルのセルは、データ構造の基本要素のみを含む。そして、中間レベルのセルは、下位レベルのセルのうちの１つ以上のセルを含み、上位レベルのセルは、中間レベルのセルのうちの１つ以上のセルを含んでいてもよい。さらに、データ構造の中には、セルが、そのデータ構造の基本要素に加えて、１つ以上の下位レベルのセルを含む場合もある。
【００２２】
データを階層的なセルに分類することによって、大規模データ構造をさらに迅速かつ効率的に処理することができる。例えば、回路設計者は、通常、設計に記述されている各回路の特徴が特定の設計ルールに準拠するよう保証するために、設計を分析する。上記の例では、全１２８ｋＢメモリアレイの各特徴を分析する必要はなく、設計ルール確認ソフトウェアアプリケーションは、１ビットセルの特徴を分析することができる。そして、確認の結果は、全ての１ビットセルに適用可能である。１ビットセルの１事例が設計ルールに準拠することが確認されると、設計ルール確認ソフトウェアアプリケーションは、レジスタセルの種々の回路（それ自体が１つ以上の階層セルで構成されていてもよい）の特徴を分析することによって、レジスタセルの分析を完了することができる。そして、この確認の結果は、全てのレジスタセルに適用可能である。レジスタセルの１事例が設計ルールに準拠することが確認されると、設計ルール確認ソフトウェアアプリケーションは、単に、１２８ｋＢメモリアレイの種々の回路の特徴を分析することによって、全１２８ｋＢメモリアレイの分析を完了することができる。この様に、大規模データ構造の分析は、データ構造を構成している比較的少数のセルの分析へと圧縮することができる。
【００２３】
図２は、処理データがどの様にして種々の階層セルへと構成可能となるかを図式的に示す。この図において、各セルは、Ａ〜Ｊの文字で示すデータ２０１の一部を含む。データベース内のデータ２０１は、４つの階層レベル２０３〜２０９に分割されている。最上位レベル２０３は、単一のセル２１１のみを含み、２番目に上位のレベル２０５は、２つのセル２１３、２１５を含む。この構成では、先行のセル２１３、２１５が同様に処理されるまで、最上位レベルのセル２１１内のデータを使用して処理演算を正確に実行することができない。同様に、先行の３番目のレベルのセル２１７、２１９が処理されるまで、２番目のレベルのセル２１３内のデータを処理することができない。この図に示すように、同じセルが、多数の階層レベルに存在する。例えば、セル２２１が３番目の階層レベル２０７に存在し、セル２２３が４番目の階層レベル２０９に存在するが、セル２２１、２２３は、両方とも同じセルデータ（図中、文字「F」で識別される）を含んでいる。この様に、トランジスタなどの特定の構造に関する設計データは、処理データの様々な階層レベルにおいて繰り返し使用される。
【００２４】
処理データのセルの階層は、任意の所望の基準に基づいている点に留意すべきである。例えば、マイクロ素子設計データでは、セルの階層は、大規模構造用のセルが小規模構造用のセルを組み込むように構成される。しかし、本発明の他の実施態様では、セルの階層は、例えば、マイクロ素子の個々の材料層の積層順序など、別の基準に基づいてもよい。したがって、マイクロ素子のある層に存在する構造のための設計データ部分を、第１の階層レベルのセルに割り当ててもよい。そして、マイクロ素子の上層に存在する構造に対応する別の設計データ部分を、第１の階層レベルとは異なる第２の階層レベルのセルに割り当ててもよい。さらに、本発明の各種実施例では、並列性を生成可能である。例えば、設計データが、マイクロ素子設計データである場合、本発明の実施態様の中には、マイクロ素子設計のある領域を任意の領域に分割し、各領域をセルとして使用する場合もある。しばしば「ビンインジェクション」と呼ばれるこの技術を使用して、処理データの並列性の存在を増やすことができる。
【００２５】
以上の説明から、設計データの一部は、設計データの他の部分に依存してもよいことが分かる。例えば、レジスタセル用の設計データは、本質的に１ビットメモリセル用の設計データを含む。したがって、１ビットメモリセルに対して設計ルール確認演算を実行するまで、レジスタセルに対して設計ルール確認演算を実行することができない。しかし、マイクロ素子設計データの階層構造は、独立部分も有する。例えば、１６ビットコンパレータ用の設計データを含むセルは、レジスタセルから独立している。「上位」のセルは、コンパレータセルおよびレジスタセルを含むが、一方のセルは、他方のセルを含まない。その代わりに、これら２つの下位のセルにおけるデータは、並列である。これらのセルは並列であるので、両方のセルに対して同じ設計ルール確認演算を衝突なしに同時に実行可能である。したがって、第１の演算スレッドが、レジスタセルに対する設計ルール確認演算を実行する一方、別の第２の演算スレッドが、コンパレータセルに対して同じ設計ルール確認演算を実行することができる。
並列演算
上記のように、本発明の実施形態は、様々な異なるタイプのソフトウェアアプリケーションと共に使用可能である。しかし、本発明の実施形態の中には、マイクロ回路を表す設計データのシミュレーション、検証、または修正を行うソフトウェアアプリケーションに特に有用なものもある。マイクロ回路素子の設計および製造には、「設計フロー」における多数のステップが含まれ、設計フローは、マイクロ回路のタイプ、複雑性、設計チーム、およびマイクロ回路製作所または工場に大きく依存する。幾つかのステップは、全ての設計フローに共通である。まず、通常、ハードウェア設計言語（ＨＤＬ）で、設計仕様を論理的にモデル化する。そして、ソフトウェアおよびハードウェアの「ツール」は、ソフトウェアシミュレータおよび／またはハードウェアエミュレータによって、設計フローの様々な段階において設計を検証し、エラーを修正する。論理設計が良好であると考えられると、論理設計は、合成ソフトウェアによって物理的な設計データに変換される。
【００２６】
物理的な設計データは、例えば、工場でフォトリソグラフィ工程において所望のマイクロ回路素子を製造するために使用するマスクに書き込む幾何パターンを表す。物理的な設計情報によって、素子の適切な動作のための設計仕様および論理設計を正確に実現することが非常に重要である。さらに、物理的な設計データを使用して、工場で使用するマスクを作製するので、データは、工場の要求に準拠しなければならない。各工場は、その工場のプロセス、装備、および技術に応じた工場独自の物理的設計パラメータを設定する。この様なシミュレーション、および検証ツールの例は、２００１年５月８日発行の特許に係るＭｃＳｈｅｒｒｙらの上記特許文献１、２００１年６月１９日発行の特許に係るＭｃＳｈｅｒｒｙらの上記特許文献２、２００２年１月１５日発行の特許に係るＥｉｓｅｎｈｏｆｅｒらの上記特許文献３、２００２年５月２８日発行の特許に係るＢｏｚｋｕｓらの上記特許文献４、２００２年７月２日発行の特許に係るＡｎｄｅｒｓｏｎらの上記特許文献５、および２００２年７月２３日発行の特許に係るＡｎｄｅｒｓｏｎらの上記特許文献６に記載されており、これらは全てここに引用により組み込まれている。
【００２７】
処理データと同様に、ソフトウェアアプリケーションにより実行される演算も、並列性を有する階層構造を有していてもよい。演算並列性を例示するために、マイクロ回路の物理的な設計データのための設計ルール確認プロセスを実施するソフトウェアアプリケーションについて説明する。この種のソフトウェアアプリケーションは、マイクロ回路の幾何学的な特徴を定義する処理データに対して演算を行う。例えば、トランジスタゲートは、ポリシリコン材料の領域と拡散材料の領域とが交わる部分に形成される。したがって、トランジスタゲートを表す設計データは、ポリシリコン材料の層のポリゴンと、拡散材料の層の重なるポリゴンとで構成される。
【００２８】
通常、マイクロ回路物理設計データには、２種類の異なるデータ、すなわち、「描画層（ｄｒａｗｎ ｌａｙｅｒ）」設計データおよび「導出層（ｄｅｒｉｖｅｄ ｌａｙｅｒ）」設計データが含まれる。描画層データは、マイクロ回路を形成する材料の層に描かれるポリゴンを記述する。通常、描画層データには、金属層、拡散層、およびポリシリコン層におけるポリゴンが含まれる。そして、導出層は、描画層データと他の導出層データとの組合せで構成される特徴を含む。例えば、上記のトランジスタゲートでは、ゲートを記述する導出層設計データは、ポリシリコン材料層のポリゴンと拡散材料層のポリゴンとが交わる部分から導出される。
【００２９】
通常、設計ルール確認ソフトウェアアプリケーションは、２種類の演算、すなわち、設計データ値が設定パラメータに適合するかどうかを確認する「確認」演算と、導出層データを生成する「導出」演算とを実行する。例えば、トランジスタゲート設計データは、下記の導出演算によって生成される。
ｇａｔｅ＝ｄｉｆｆ ＡＮＤ ｐｏｌｙ
この演算の結果によって、拡散層ポリゴンとポリシリコン層ポリゴンとの全ての交わる部分が識別される。同様に、拡散層にｎ型材料をドーピングすることによって形成されるｐ型トランジスタゲートは、下記の導出演算によって識別される。
【００３０】
ｐｇａｔｅ＝ｎｗｅｌｌ ＡＮＤ ｇａｔｅ
そして、この演算の結果によって、拡散層のポリゴンがｎ型材料でドーピングされた全てのトランジスタゲート（すなわち、拡散層ポリゴンとポリシリコン層ポリゴンとが交わる部分）が識別される。
そして、確認演算は、データ設計値のためのパラメータまたはパラメータ範囲を定義する。例えば、ユーザは、金属配線ラインが他の配線ラインの１ミクロン以内に無いことを望む場合がある。この種の分析は、下記の確認演算によって実行される。
【００３１】
ｅｘｔｅｒｎａｌ  ｍｅｔａｌ＜１
この演算の結果によって、金属層設計データ内の他のポリゴンに１ミクロンよりも近接している金属層設計データ内の各ポリゴンが識別される。
また、上記の演算は、描画層データを使用する一方、確認演算は、導出層データに対しても実行されてもよい。例えば、トランジスタゲートが他のゲートの１ミクロン以内に位置しないことの確認をユーザが望む場合、設計ルール確認プロセスは、下記の確認演算を含む可能性がある。
【００３２】
ｅｘｔｅｒｎａｌ  ｇａｔｅ＜１
この演算の結果によって、他のゲートから１ミクロン未満の位置に配置されるゲートを表す全てのゲート設計データが識別される。しかし、描画層設計データからゲートを識別する導出演算が実行されるまで、この確認演算を実行できないことを理解すべきである。
したがって、演算データは、階層構造を有していてもよい。例えば、図３は、上述の導出演算および確認演算の階層構造を図式的に示す。この図から分かるように、この階層構造の最下位層３０１は、描画層設計データを含む。導出演算の各種層３０３は、階層の中間レベルを構成する。そして、階層の最上位層３０５は、確認演算で構成される。この図から分かるように、演算の中には、他の演算に依存するものがある。例えば、導出演算３０７（すなわち、ｇａｔｅ＝ｄｉｆｆ ＡＮＤ ｐｏｌｙ）は、導出演算３０９（すなわち、ｐｇａｔｅ＝ｎｗｅｌｌ ＡＮＤ ｇａｔｅ）または確認演算３１１（すなわち、ｅｘｔｅｒｎａｌ ｇａｔｅ＜１）の前に実行しなければならない。また、演算の中には他の演算から独立しているものもあることが、この図から分かる。例えば、確認演算３１３（すなわち、ｅｘｔｅｒｎａｌ  ｍｅｔａｌ＜１）は、演算３０７〜３１１により使用される導出層設計データまたは描画層設計データのいずれも使用しない。この様に、確認演算３１３は、演算３０７〜３１１と並列であり、設計データに衝突を生じることなく、演算３０７〜３１１のいずれかと同時に実行可能である。同様に、演算３０９は、演算３１１と並列である。というのは、一方の演算により生成された出力データは、他方の演算により生成された出力データと衝突しないからである。
演算分散ツール
図４は、本発明の各種実施例に従って実施可能な演算分散ツール４０１を示す。この図に示すように、ツール４０１は、図１に示すタイプのマルチプロセッサコンピュータ１０１上で実施することができる。しかし、様々なマスタ／スレーブコンピュータネットワークを使用して、分散ツール４０１の別の実施形態を実施できると理解すべきである。
【００３３】
図４に示すように、演算分散ツール４０１は、複数のマスタ演算ユニット４０３と、複数のデータ記憶ユニット４０５とを備えている。各マスタ演算ユニット４０３は、例えば、マルチプロセッサコンピュータ１０１のプロセッサ１０９により実施可能である。また、以下に詳述するように、各マスタ演算ユニット４０３は、ソフトウェア演算を実行するために演算スレッドを走らせる。図示の実施例では、データ記憶ユニット４０５は、各マスタ演算ユニット４０３に関連して設けられている。本発明の実施例の中には、データ記憶ユニット４０５が、メモリ１０５など、単一の物理記憶媒体によって実施される仮想データ記憶ユニットである場合もある。しかし、本発明の別の実施例では、データ記憶ユニット４０５のうちの１つ以上のデータ記憶ユニットが、個別の物理記憶媒体によって実施される場合もある。
【００３４】
以下でも詳述するように、データ記憶ユニット４０５のうちの少なくとも１つは、所望の設計ルール確認を行うために実行すべき演算を含む。また、このデータ記憶ユニット４０５は、演算を行うための処理データと、各演算を行うために必要な処理データ部分を定義する関係データとを含む。例えば、ツール４０１を使用して、マイクロ回路設計のための設計ルール確認プロセスを行っている場合、データ記憶ユニット４０５のうちの少なくとも１つは、マイクロ回路のための描画層設計データおよび導出層設計データを含む。さらに、各演算の実行に必要な設計データの層に各演算を関連付ける関係データをも含む。そして、残りのデータ記憶ユニット４０５は、それぞれ、各演算の実行に必要な設計データ部分に各演算を関連付ける関係情報を格納する。
【００３５】
図示の実施例では、マスタ演算ユニット４０３は、相互に接続されると共に、インタフェース１１１を介して複数のスレーブ演算ユニット４０７とも接続されている。各スレーブ演算ユニット４０７は、例えば、リモートスレーブコンピュータ１１５により実施可能である。また、各スレーブ演算ユニット４０７は、それ自体の専用ローカルメモリ記憶ユニット（図示せず）を有していてもよい。
演算分散方法
図５Ａ〜図５Ｃは、本発明の各種実施形態に従って、演算分散ツール４０１を使用して演算を分散する方法を示す。特に、これらの図は、マイクロ素子設計を分析するために使用される設計ルール確認プロセスのための演算を分散する方法を示す。しかし、図示の方法は、設計ルール確認プロセス以外の様々なタイプのソフトウェアアプリケーションプロセスのために、本発明の別の実施形態に係る様々な分散ツールと共に使用可能であると理解すべきである。例えば、本発明の各種実施態様を使用して、レイアウト対回路図（ＬＶＳ）検証ソフトウェアアプリケーション、位相シフトマスク（ＰＳＭ）ソフトウェアアプリケーション、光学プロセス修正（ＯＰＣ）ソフトウェアアプリケーション、光学プロセスルール確認（ＯＲＣ）ソフトウェアアプリケーション、分解能向上技術（ＲＥＴ）ソフトウェアアプリケーション、または、並列性を有する処理データを用いて並列性を有する演算を実行する他のソフトウェアアプリケーションを実行することができる。
【００３６】
次に、図５Ａを参照して、ステップ５０１において、各マスタ演算ユニット４０３は、演算スレッドを始動して、設計ルール確認プロセスの実証（インスタンス）化を行う。設計ルール確認プロセスは、例えば、Ｏｒｅｇｏｎ、ＷｉｌｓｏｎｖｉｌｌｅのＭｅｎｔｏｒ Ｇｒａｐｈｉｃｓ社から入手可能なＣＡＬＩＢＲＥソフトウェアアプリケーションを使用して実行可能である。以下にさらに詳述するように、マスタ演算ユニット４０３のうちの１つは、演算を他の従属マスタ演算ユニット４０３に割り当てる実行マスタ演算ユニット４０３として機能する。したがって、本発明の実施例の中には、実行マスタ演算ユニット４０３が、設計ルール確認プロセスの最初の実証化を開始する場合もある。そして、設計ルール確認プロセス、設計データ、および関係データに従って実行される特定の演算は、実行マスタ演算ユニット４０３により使用されるデータ記憶ユニット４０５に格納される。実行マスタ演算ユニット４０３が、あるバージョンの設計ルール確認プロセスを始動すると、各従属マスタ演算ユニット４０３における演算スレッド上で、あるバージョンの設計ルール確認プロセスが始動する。また、実行マスタ演算ユニット４０３は、最初に、（従属マスタ演算ユニット４０３により使用される）データ記憶ユニット４０５に関係データを提供する。
【００３７】
次に、ステップ５０３において、実行マスタ演算ユニット４０３は、実行可能な次の独立演算セットを識別する。例えば、実行マスタ演算ユニット４０３は、図３に示すツリーなど、様々な演算の依存関係を記述するツリーを生成する。すると、実行マスタ演算ユニット４０３は、ツリーの各ノードを横断して、（１）そのノードにおける演算が、すでに実行されたかどうか、そして、（２）そのノードにおける演算が、未だ実行されていない他のノードにおける演算の実行に依存するかどうかを決定することができる。１つ以上の演算が実行されておらず、他の演算の実行を必要としない場合、その演算は、次の独立演算セットであると識別される。
【００３８】
通常、独立演算セットは、単一の演算しか含まない。しかし、以下にさらに詳述するように、２つ以上の演算を、さらに効率的に一括実行可能な並行演算とすることができる。したがって、演算セットの中には、２つ以上の並行演算を含むものもある。また、ある例においては、設計データにおける衝突を生じることなく、２つ以上の非並行演算を連続的に実行可能なものもある。本発明の各種実施例では、これらの非並行演算を単一の演算セットに含めることもできる。
【００３９】
実行のための次の独立演算セットが識別されると、ステップ５０５において、実行マスタ演算ユニット４０３は、利用可能な次のマスタ演算ユニット４０３上の演算スレッドに、識別された演算セットを提供する。通常、これは、従属マスタ演算ユニット４０３である。しかし、各従属マスタ演算ユニット４０３が、以前に割り当てられた演算セットの処理で既に占有されている場合、実行マスタ演算ユニット４０３は、識別された演算セットをそれ自体に割り当てる。そして、ステップ５０７において、識別された演算セットを受け取ったマスタ演算ユニット４０３は、識別された演算セットの実行に必要な設計データ部分を得る。
【００４０】
実行マスタ演算ユニット４０３は、識別された演算セットをそれ自体に割り当てた場合、演算セットの実行に必要な設計データを既に有している。しかし、実行マスタ演算ユニット４０３が、識別された演算セットを従属マスタ演算ユニット４０３に割り当てた場合、従属マスタ演算ユニット４０３は、その関連するデータ記憶ユニット４０５から必要な設計データを取得（検索）する必要がある。したがって、従属マスタ演算ユニット４０３は、関係情報を使用して、設計情報のどの部分を取得する必要があるのかを決定する。例えば、演算セットが、下記の演算で構成されている場合、
ｇａｔｅ＝ｄｉｆｆ ＡＮＤ ｐｏｌｙ
従属マスタ演算ユニット４０３は、関係情報を使用して、拡散描画層設計データおよびポリシリコン描画層設計データのコピーを取得する。しかし、演算セットが、下記の演算で構成されている場合、
ｅｘｔｅｒｎａｌ ｇａｔｅ＜１
従属マスタ演算ユニット４０３は、ゲート導出層設計データしか得る必要がない。
【００４１】
次に、ステップ５０９において、識別された演算セットを受け取ったマスタ演算ユニット４０３は、識別された演算セットを実行する。演算セットの実行に使用されるステップを図６に示す。まず、ステップ６０１において、マスタ演算ユニット４０３は、マスタデータ記憶ユニット４０５から取得された設計データ部分において並列セルを識別する。例えば、演算セットが下記の演算を含む場合、
ｇａｔｅ＝ｄｉｆｆ ＡＮＤ ｐｏｌｙ
取得された拡散層設計データおよびポリシリコン層設計層は、２つ以上の並列セルの一部を含む。すなわち、拡散およびポリシリコン層設計データのある部分が、例えば、メモリレジスタ回路など、あるセルに含まれる拡散材料およびポリシリコン材料のポリゴンを表し、拡散およびポリシリコン層設計データの別の部分が、例えば、加算器回路など、別のセルに含まれる拡散材料およびポリシリコン材料のポリゴンを表す。
【００４２】
ステップ６０３において、マスタ演算ユニット４０３は、演算セットのコピーを有する設計データセル部分を、利用可能なスレーブ演算ユニット４０７に実行用に提供する。本発明の実施例の中には、マスタ演算ユニット４０３が、識別された各セル部分を別のスレーブ演算ユニット４０７に提供する場合もある。しかし、本発明の他の実施例では、マスタ演算ユニット４０３が、演算セット自体を実行するために１つのセル部分を保持する場合もある。ステップ６０５において、マスタ演算ユニット４０３は、スレーブ演算ユニット４０７によって得られた実行結果を受け取ってコンパイルする。そして、割り当てられた演算セットを使用して、取得された設計データセル部分の全てが処理されるまで、ステップ６０１〜６０５が繰り返される。その後、マスタ演算ユニット４０３は、コンパイルされた実行結果を実行マスタ演算ユニット４０３に与える。
【００４３】
次に、図５Ｂに戻って、ステップ５１１において、識別された演算セットを受け取ったマスタ演算ユニット４０３は、演算セットを実行することによって得られた結果を、実行マスタ演算ユニット４０３に返す。そして、実行マスタ演算ユニット４０３は、そのデータ記憶ユニット４０５の処理データにその結果を付加する。その後、適切な設計データを使用して、各演算の実行が完了するまで、ステップ５０１〜５１１が繰り返される。この様な事態で、設計ルール確認プロセスのための演算を、スレーブ演算ユニット４０７の間でより広範に分散することができ、さらに迅速かつ、より効率的な演算実行が可能となる。
演算の予備実行
ソフトウェアアプリケーションの中には、演算の実行に使用されるアルゴリズムが、その演算のために最適化されるものもある。例えば、下記の演算の実行に使用されるアルゴリズムは、
ｅｘｔｅｒｎａｌ  ｍｅｔａｌ＜１
下記の演算の実行に使用されるアルゴリズムと全く異なっていてもよい。
【００４４】
ｇａｔｅ＝ｄｉｆｆ ＡＮＤ ｐｏｌｙ
しかし、演算の中には、同一または類似のアルゴリズムを実行するものもがあってもよい。例えば、下記の演算（すなわち、各金属構造が少なくとも０．５ミクロンの幅を有することを確認する演算）の実行に使用されるアルゴリズムは、
ｉｎｔｅｒｎａｌ  ｍｅｔａｌ＜０．５
下記の演算の実行に使用されるアルゴリズムと類似または同一であろう。
【００４５】
ｅｘｔｅｒｎａｌ  ｍｅｔａｌ＜１
これらの演算は独立しているので、演算が同時に実行されると、さらに効率的に実行可能である。この様に、これらの演算は、並行演算である。
Ｏｒｅｇｏｎ、ＷｉｌｓｏｎｖｉｌｌｅのＭｅｎｔｏｒ Ｇｒａｐｈｉｃｓ社から入手可能なＣＡＬＩＢＲＥソフトウェアアプリケーションなど、各種ソフトウェアアプリケーションが、並行演算が実際に同時に実行されることを保証することを意図して最適化されている。演算セットが識別された時にこの様な最適化が考慮されるように、各種実施態様では、並行演算を識別するために演算の予備実行を行ってもよい。例えば、ＣＡＬＩＢＲＥソフトウェアアプリケーションは、無意味な（空の）演算を削除せず、条件文を許容しないプログラム言語を使用しているので、本発明の各種実施態様では、まず、「無意味な（空の）」設計データ（すなわち、ヌル値を有する設計データ）を使用して、従来の線形順序で、このソフトウェアアプリケーションのための演算を実行してもよい。無意味な設計データを用いて、全ての演算を非常に迅速に実行する。そして、実際に演算を行った順序を使用して、実行マスタ演算ユニット４０３が演算セットの識別に使用する演算ツリーを生成することができる。すなわち、ヌル値を用いて実際に演算を行った順序によって、並行演算がグループ化される。そして、実行マスタ演算ユニット４０３により、並行演算を同じ演算セットにまとめることができる。
結論
したがって、上記の演算分散方法およびツールは、複数のマスタコンピュータの間、そして、実行のための１台以上のスレーブコンピュータの間で演算を分散するための信頼できる効率的な技術を提供する。しかし、本発明の各種実施形態において、上記の方法の１つ以上のステップを省略してもよいと理解すべきである。あるいは、本発明の実施形態の中には、マスタ演算ユニット、スレーブ演算ユニット、またはその両方ともが利用可能であるかどうかの検討を省略できる場合もある。例えば、この様な本発明の別の実施形態では、実行のために、識別された演算セットを、単に逐次的に割り当てることもできる。さらに、本発明の別の実施形態では、上記の方法のステップを再編成することもできる。例えば、実行マスタ演算ユニットは、実行すべき次の演算セットを識別する前に、利用可能な次のマスタ演算ユニットを識別してもよい。
【００４６】
本発明の実施態様に関するさらに他の変型例は、当業者にとって明らかであろう。例えば、図１に示す動作環境は、１対Ｎ型の通信インタフェースを使用して、単一のマスタコンピュータ１０１をスレーブコンピュータ１１５に接続したものである。しかし、本発明の別の実施形態では、多数のマスタコンピュータ１０１を使用して、スレーブコンピュータ１１５に演算を分散してもよい。さらに、通信インタフェースは、あるスレーブコンピュータ１１５が別のスレーブコンピュータ１１５に演算を再分散できる、バス形式のインタフェースであってもよい。特に、１台以上の別のスレーブコンピュータに演算を再分散するように本発明の実施形態を実施するために、１台以上のスレーブコンピュータ１１５が制御機能を備えていてもよい。したがって、マスタコンピュータ１０１が、小規模セルグループに分割可能なスレーブコンピュータ１１５に多数のデータセルを分散する場合、スレーブコンピュータ１１５は、実行のためにセルの一部を別のスレーブコンピュータ１１５に割り当ててもよい。さらに、本発明の各種実施形態では、マルチ階層のマスタ／スレーブコンピュータを使用することもでき、ある階層のコンピュータが、第２の階層の１台以上のコンピュータに演算を分散し、そして、第２の階層のコンピュータが、第３の階層のコンピュータの間で演算を分散することもできる。さらに、本発明の実施例の中には、全てのスレーブコンピュータを省略する場合もある。本発明のこの様な実施態様では、各演算セットの機能は、マスタ演算ユニット４０３によって実行可能である。これらおよびその他の変型例は、当業者にとって明らかであろう。
【００４７】
以上、好適かつ例示的な実施形態について本発明を説明した。この開示を考察すれば、当業者は、添付の特許請求の範囲の趣旨および範囲内で、その他数々の実施形態、変更、および変形を考え付くであろう。
【図１】
0005496986.tif 000002
【図２】
0005496986.tif 000003
【図３】
0005496986.tif 000004
【図４】
0005496986.tif 000005
【図５Ａ】
0005496986.tif 000006
【図５Ｂ】
0005496986.tif 000007
【図６】
0005496986.tif 000008