(57)【要約】【課題】たとえばＣまたはパスカルで書かれたソースコードをコンパイルして、選択的に交換可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用する実行ファイルを生成できるようにする。【解決手段】再設定指示によって指定された通りに各種命令セット・構造を使用して実行用にソースファイルをコンパイルする。オブジェクトファイルは前記構造での実行用に実行可能コードを備える命令セット・構造に対応するハードウェア構造を指定するビットストリームをオプションでカプセル化する。【選択図】        図１
2006155632.tif 000002
【特許請求の範囲】
【請求項１】
各々が対応する命令セットからの命令を実行するような複数のハードウェア構造の中から実行中に選択的に変更可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用するオブジェクトファイルを生成するためのコンパイルシステムであって、
複数の命令ステートメントと、前記命令ステートメントのサブセットについて前記ハードウェア構造の１つを指定する再設定指示とを含むソースファイルを入力する手段と、
前記入力する手段からソースファイルを受け入れ、各々の前記再設定指示に対応する命令セットを識別する手段と、
各々の識別された命令セットを用いて実行用に前記ソースファイルをコンパイルしてオブジェクトファイルを生成し、前記オブジェクトファイルに前記命令セットを表わすビットストリームを含むようにオブジェクトファイルを作成する手段と、
を備えることを特徴とするコンパイルシステム。
【請求項２】
動的に再設定可能な処理ユニットで使用するためのオブジェクトファイルを生成するためのプログラムを記憶したコンピュータで読取可能な記録媒体であって、
少なくとも命令ステートメントの第１のサブセットと命令ステートメントの第２のサブセットとを含む複数のソースコード命令ステートメントを含むソースファイルを入力として受け入れる機能と、
前記命令ステートメントの第１のサブセットについて第１の命令セットを識別する機能と、
前記命令ステートメントの第２のサブセットについて第２の命令セットを識別する機能と、
前記第１の命令セットを用いて実行用に前記命令ステートメントの第１のサブセットをコンパイルし、前記第２の命令セットを用いて実行用に前記命令ステートメントの第２のサブセットをコンパイルし、これらのコンパイルされた前記命令ステートメントを含み、前記命令ステートメントの各サブセットに対応する各命令セットを表わすビットストリームを識別する再設定コードを含むようにオブジェクトファイルを生成する機能と、
を実行させるためのプログラムを記憶したコンピュータで読取可能な記録媒体。
【請求項３】
動的に再設定可能な処理ユニットで使用するためのオブジェクトファイルを生成するためのプログラムを記憶したコンピュータで読取可能な記録媒体であって、
少なくとも命令ステートメントの第１のサブセットと命令ステートメントの第２のサブセットとを含む複数のソースコード命令ステートメントを含むソースファイルを入力として受け入れる機能と、
前記命令ステートメントの第１のサブセットについて第１の命令セットを識別する機能と、
前記命令ステートメントの第２のサブセットについて第２の命令セットを識別する機能と、
前記第１の命令セットを用いて実行用に前記命令ステートメントの第１のサブセットをコンパイルし、前記第２の命令セットを用いて実行用に前記命令ステートメントの第２のサブセットをコンパイルし、これらのコンパイルされた前記命令ステートメントを含み、命令ステートメントの各サブセットに対応する前記命令セットを表わすビットストリームをさらに含むオブジェクトファイルを生成する機能と、
を実行させるためのプログラムを記憶したコンピュータで読取可能な記録媒体。
【請求項４】
動的に再設定可能な処理ユニットで使用するためのオブジェクトファイルを生成するためのプログラムを記憶したコンピュータで読取可能な記録媒体であって、
少なくとも命令ステートメントの第１のサブセットと命令ステートメントの第２のサブセットとを含む複数のソースコード命令ステートメントを含むソースファイルを入力として受け入れる機能と、
前記命令ステートメントの第１のサブセットについて第１の命令セットを識別する機能と、
前記命令ステートメントの第２のサブセットについて第２の命令セットを識別する機能と、
前記第１の命令セットを用いて実行用に前記命令ステートメントの第１のサブセットをコンパイルし、前記第２の命令セットを用いて実行用に前記命令ステートメントの第２のサブセットをコンパイルし、これらのコンパイルされた前記命令ステートメントを含み、命令ステートメントの各サブセットに対応する前記命令セットを識別する再設定コードをさらに含む第１のオブジェクトファイルを生成する機能と、
を実行させるためのプログラムを記憶したコンピュータで読取可能な記録媒体。
【請求項５】
各々が対応する命令セットからの命令を実行するような複数のハードウェア構造の中から実行中に選択的に変更可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用するオブジェクトファイルを生成するためのコンパイル方法であって、
複数の命令ステートメントと、前記命令ステートメントのサブセットについて前記ハードウェア構造の１つを指定する再設定指示とを含むソースファイルを入力する工程と、
前記入力する工程からソースファイルを受け入れ、各々の前記再設定指示に対応する命令セットを識別する工程と、
各々の識別された命令セットを用いて実行用に前記ソースファイルをコンパイルしてオブジェクトファイルを生成し、前記オブジェクトファイルに前記命令セットを表わすビットストリームを含むようにオブジェクトファイルを作成する工程と、
を含むことを特徴とするコンパイル方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に再設定可能なコンピュータのためのソフトウェアに係り、特に、変更可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用する実行ファイルを生成するためのコンパイルシステム、記録媒体およびコンパイル方法に関する。
【背景技術】
【０００２】
特許文献１の「スケーラブル・パラレル・動的再設定可能な計算システムおよびその方法」（１９９５年４月１７日付）では、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）を使用するソフトウェア・プログラム式に再設定可能な計算構造を開示している。本構造はスケーラブルで柔軟かつ再設定可能である。スケーラブル・パラレル相互接続能力は内蔵構造・プリミティブとして実装される。つまり開示された実施装置は何個でもプロセッサを含むことが出来る。
【０００３】
従来技術では、再設定可能な装置を提供しようとする試みが行われて来た。第１のこのような従来技術のアプローチは、ダウンロード可能なマイクロコード装置によるもので、固定され再設定不可能なハードウェア実行資源の動作がプログラム可能な制御記憶にロードされた特定バージョンのマイクロコードを用いて選択的に変更できる（たとえば、非特許文献１を参照のこと）。このような幾つかのシステムでは、ユーザが製造後にマイクロコードを書いたりまたは変更したりできる（たとえば、非特許文献２を参照のこと）。このような従来技術システムでの基本的計算ハードウェアはそれ自身が再設定可能になっていないため、これらのシステムは広範囲の問題の種類を考察した場合に最適な計算能力を提供しない。詳しく説明すると、このようなシステムは一般にデータパスを変更できず、実行ユニットのサイズにより制限され、同一ハードウェアで別の命令セットを提供することだけが出来る。このようなシステムは２種類の異なる構造でコンパイルすることの出来る単一のコンパイラを提供していない。
【０００４】
第２の従来技術のアプローチは計算を実行するハードウェアがプログラマブル論理を用いて実装されるようなシステムに関係する。最新のＦＰＧＡ（ＰＡＭ、ＳＰＬＡＳＨ、ＶＣＣ）ならびにカスタム・プログラマブル論理（ＴＥＲＡＭＡＣ）を使用する例が存在している（たとえば、非特許文献３を参照のこと）。一般に、これらの技術では、アプリケーションがハードウェア記述に関して指定され、ＦＰＧＡによって定義されるコンピュータのためのソフトウェアを書くことによってではなく模式的にまたはＶＨＤＬ等のハードウェア記述言語を用いるかのどちらかで表現される必要がある。たとえば、ＰＡＭはゲート設定と構造を記述するネットリストを生成するＣ＋＋プログラムを書くことでプログラムされる。アプリケーション・デベロッパはアプリケーション・アルゴリズムの仕様をコンパイルする代わりに、アプリケーションを実装するためのハードウェア記述を表現するデータ構造を指定する。ＳＰＬＡＳＨは、次の３種類の方法の１つでプログラムされる。
１）模式図に基づいてハードウェア仕様を構築するための模式的キャプチャ・パッケージ
２）ＶＨＤＬをゲートプリミティブ関数に変換する剛性パッケージと組み合せたハードウェア記述言語(ＶＨＤＬなど)
３）ＤＢＣ、ゲート記述にコンパイルされるＣ言語のサブセット
【０００５】
ＴＥＲＡＭＡＣは模式的キャプチャ・パッケージまたはハードウェア記述言語を使用してプログラムする。これらのプログラミング技術のどれもアルゴリズム・ステップについては記述していない。むしろ、これらはハードウェア構造を指定するためのメカニズムを提供するものである。
【０００６】
第３の従来技術のアプローチはソフトウェアを実行する再設定可能な計算機に関するものである。ＲＩＳＣ４００５とＨｏｋｉｅプロセッサはＦＰＧＡ内部に標準マイクロプロセッサを実装している。ＲＩＳＣ４００５は基本的にはＦＰＧＡの小さな部分に中央演算処理ユニット （ＣＰＵ） を埋め込むデモンストレーションであり、他の資源は幾つかのコプロセッサ機能に対して専用のものになっている。Ｈｏｋｉｅはコンピュータエンジニアリングの実習問題として使用される。ＩＳＡはコンパイルと実行前に選択され、そのＩＳＡを全体として使用する。更に、プロセッサ様のビットストリームはこれの実行するソフトウェアとは別に格納される。アドホック法を用いて正しいビットストリームがロードされるように補償する（たとえば、非特許文献４を参照のこと）。これらのシステムは、ランタイム時（実行中）の再設定を提供しない。
【０００７】
これ以外の従来技術で再設定可能なコンピュータはダイナミック命令セットコンピュータ（ＤＩＳＣ）で、これは再設定可能な処理ユニットを使用している（たとえば、非特許文献５を参照のこと）。ＤＩＳＣ処理ユニットＦＰＧＡの実行と設定はこれもＦＰＧＡに実装されるマイクロコントローラにより制御される。マイクロコントローラはＣ言語の一種の方言でプログラムされる。Ｃ言語方言のコンパイラは幾つかのプログラムステートメントがこれに対応する処理ユニットのハードウェア設定で実行されるべきものであると認識して、正しい設定ビットストリームが実行中に処理ユニットへロードされるようにするマイクロコントローラ・コードを放出する。当業者には、マイクロコントローラそれ自体が固定された命令セットを有しており、コンパイラがこの固定命令セットにコンパイルすることは認識されよう。ＤＩＳＣで使用される構造には幾つかの欠点がある。マイクロコントローラが固定されているので、異なった種類の処理ユニットを制御するように最適化することができない。設定ビットストリームはマイクロコントローラのメモリ空間の外にある外部ハードウェアに格納されるので、システムは自己包含ではない。さらに、前述の文書ではＤＩＳＣが並列計算、大域シグナリング、クロッキング、または割り込み処理にどのように使用できるかを開示していない。最後に、新規の命令がアトム実体として指定される。コンパイラは一つの命令セットのついての命令を放出するだけだが、個々の命令をプログラマが追加できるようにする。各処理ユニット設定はプログラマが提供した単一のハードコード命令であるから、潜在的柔軟性を減少するものである。
【０００８】
第４の従来技術によるアプローチは混合システムに関係し、アルゴリズムの異なる部分がシステムの別のコンポーネントにマッピングされている。従来技術のシステムの一つでは、拡張Ｃ方言で表現されたアルゴリズムを混合ＦＰＧＡ／ＤＳＰ構造にマッピングしている。ユーザはＤＳＰを対象とする入力プログラムの部分を明示的にマークし、残りのコード部分はＦＰＧＡ実装のためのゲートにコンパイルされる。このようなシステムではＩＳＡ変更について非標準的なシンタックスを用いているので特殊なツールを必要とする。更に、このようなシステムの動作はプログラムの一部のＦＰＧＡ仕様でネットリストを使用するため厄介である。このようなシステムは実際のハードウェア再設定を提供せず、端に別のハードウェア部分へマッピングする能力を提供するだけである。
【０００９】
同様に、幾つかのシステムでは幾つかの設定可能な論理資源のついた標準的マイクロプロセッサを使用している。これらの資源は特定のプログラムの実行を高速化する特殊な命令を実装するために使用されている（たとえば、非特許文献６を参照のこと）。このようなシステムはシリコン・ダイの一部をＦＰＧＡ実装に使用して中央演算処理ユニット（ＣＰＵ）として実装されるのが代表的である。ＣＰＵはＦＰＧＡが接続される固定データパスを有している。コンパイラはＦＰＧＡで実行する単一の命令ステートメントへと選択したアセンブリコードのシーケンスを組み立てる。しかしこのようなシステムは一般的に既存のアセンブリ言語コードでのみ動作し、開始点として隣接する固定ＩＳＡを必要とする。更に、このようなシステムは一般にランタイム時再設定を提供しない。最後に、このようなシステムは広範な応用性がなく代表的には他の従来のシステムに対する有意な速度的改善を提供しない。
【００１０】
【特許文献１】米国特許出願第０８／４２３，５６０号明細書
【非特許文献１】J.L. Hennessy and D.A. Paterson,  Computer Architecture: A Quantitative Approach, Morgan Kaufmann, 1990
【非特許文献２】W.T. Wilner, "Design of the Burroughs B1700", in AFIPS Fall Joint Computer Conference, AFIPS Press, 1972; W. G. Matheson, "User Microprogrammability in the HP-21MX Minicomputer" in Proceedings of the Seventh Annual Microprogramming Workshop, IEEE Computer Society Press,   1974
【非特許文献３】P.  Bertin et al., Programmable Active Memories: A Performance Assessment, Tech. Rep. 24., Digital Paris Research Laboratory, March 1993; D. A. Buell et al., Splash 2: FPGAs in a Custom Computing Machine, IEEE Computer Society Press 1996; S. Casselman, "Virtual Computing and the Virtual Computer", in IEEE Symposium on FPGAs for Custom Computing Machines, IEEE Computer Society Press, 1994; R. Amerson et al., "Teramac-Configurable Custom Computing," in IEEE Symposium on FPGAs for Custom Computing Machines, IEEE Computer Society Press, 1995
【非特許文献４】P. Athanas and R. Hudson, "Using Rapid Prototyping to Teach the Design of Complete Computing Solutions' in IEEE Symposium on FPGAs for Custom Computing Machines, IEEE Computer Society Press, 1996.
【非特許文献５】M. J. Wirthlin and B. L. Hutchings, "A Dynamic Instruction Set Computer" in IEEE Symposium on FPGAs for Custom Computing Machines, IEEE Computer Society Press, 1995; D. A. Clark and B. L. Hutchings, "The DISC Programming Environment", in IEEE Symposium on FPGAs for Custom Computing Machines, IEEE Computer Society Press, 1996.
【非特許文献６】R. Razdan and M. D. Smith, "A High-Performance Microarchitecture with Hardware-Programmable Functional Units", in Proceedings of the Twenty-Seventh Annual Microprogramming Workshop, IEEE Computer Society Press, 1994
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、上記に鑑みてなされたものであって、たとえばＣまたはパスカルで書かれたソースコードをコンパイルして、選択的に交換可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用する実行ファイルを生成するためのシステムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、請求項１にかかる発明のコンパイルシステムは、各々が対応する命令セットからの命令を実行するような複数のハードウェア構造の中から実行中に選択的に変更可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用するオブジェクトファイルを生成するためのコンパイルシステムであって、複数の命令ステートメントと、前記命令ステートメントのサブセットについて前記ハードウェア構造の１つを指定する再設定指示とを含むソースファイルを入力する手段と、前記入力する手段からソースファイルを受け入れ、各々の前記再設定指示に対応する命令セットを識別する手段と、各々の識別された命令セットを用いて実行用に前記ソースファイルをコンパイルしてオブジェクトファイルを生成し、前記オブジェクトファイルに前記命令セットを表わすビットストリームを含むようにオブジェクトファイルを作成する手段と、を備える。
【００１３】
また、請求項２にかかる発明のコンピュータで読取可能な記録媒体は、動的に再設定可能な処理ユニットで使用するためのオブジェクトファイルを生成するためのプログラムを記憶したコンピュータで読取可能な記録媒体であって、少なくとも命令ステートメントの第１のサブセットと命令ステートメントの第２のサブセットとを含む複数のソースコード命令ステートメントを含むソースファイルを入力として受け入れる機能と、前記命令ステートメントの第１のサブセットについて第１の命令セットを識別する機能と、前記命令ステートメントの第２のサブセットについて第２の命令セットを識別する機能と、前記第１の命令セットを用いて実行用に前記命令ステートメントの第１のサブセットをコンパイルし、前記第２の命令セットを用いて実行用に前記命令ステートメントの第２のサブセットをコンパイルし、これらのコンパイルされた前記命令ステートメントを含み、前記命令ステートメントの各サブセットに対応する各命令セットを表わすビットストリームを識別する再設定コードを含むようにオブジェクトファイルを生成する機能と、を実行させるためのプログラムを記憶した。
【００１４】
また、請求項３にかかる発明のコンピュータで読取可能な記録媒体は、動的に再設定可能な処理ユニットで使用するためのオブジェクトファイルを生成するためのプログラムを記憶したコンピュータで読取可能な記録媒体であって、少なくとも命令ステートメントの第１のサブセットと命令ステートメントの第２のサブセットとを含む複数のソースコード命令ステートメントを含むソースファイルを入力として受け入れる機能と、前記命令ステートメントの第１のサブセットについて第１の命令セットを識別する機能と、前記命令ステートメントの第２のサブセットについて第２の命令セットを識別する機能と、前記第１の命令セットを用いて実行用に前記命令ステートメントの第１のサブセットをコンパイルし、前記第２の命令セットを用いて実行用に前記命令ステートメントの第２のサブセットをコンパイルし、これらのコンパイルされた前記命令ステートメントを含み、命令ステートメントの各サブセットに対応する前記命令セットを表わすビットストリームをさらに含むオブジェクトファイルを生成する機能と、を実行させるためのプログラムを記憶した。
【００１５】
また、請求項４にかかる発明のコンピュータで読取可能な記録媒体は、動的に再設定可能な処理ユニットで使用するためのオブジェクトファイルを生成するためのプログラムを記憶したコンピュータで読取可能な記録媒体であって、少なくとも命令ステートメントの第１のサブセットと命令ステートメントの第２のサブセットとを含む複数のソースコード命令ステートメントを含むソースファイルを入力として受け入れる機能と、前記命令ステートメントの第１のサブセットについて第１の命令セットを識別する機能と、前記命令ステートメントの第２のサブセットについて第２の命令セットを識別する機能と、前記第１の命令セットを用いて実行用に前記命令ステートメントの第１のサブセットをコンパイルし、前記第２の命令セットを用いて実行用に前記命令ステートメントの第２のサブセットをコンパイルし、これらのコンパイルされた前記命令ステートメントを含み、命令ステートメントの各サブセットに対応する前記命令セットを識別する再設定コードをさらに含む第１のオブジェクトファイルを生成する機能と、を実行させるためのプログラムを記憶した。
【００１６】
また、請求項５にかかる発明のコンパイル方法は、各々が対応する命令セットからの命令を実行するような複数のハードウェア構造の中から実行中に選択的に変更可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用するオブジェクトファイルを生成するためのコンパイル方法であって、複数の命令ステートメントと、前記命令ステートメントのサブセットについて前記ハードウェア構造の１つを指定する再設定指示とを含むソースファイルを入力する工程と、前記入力する工程からソースファイルを受け入れ、各々の前記再設定指示に対応する命令セットを識別する工程と、各々の識別された命令セットを用いて実行用に前記ソースファイルをコンパイルしてオブジェクトファイルを生成し、前記オブジェクトファイルに前記命令セットを表わすビットストリームを含むようにオブジェクトファイルを作成する工程と、を含む。
【発明の効果】
【００１７】
本発明によれば、各々のハードウェア構造がこれに対応する命令セットからの命令を実行するような複数のハードウェア構造の中から選択的に変更可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用するプログラム命令のシーケンスを生成することができる。たとえば、Ｃまたはパスカルで書かれたソースコードをコンパイルして、選択的に交換可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用する実行ファイルを生成するためのシステムを提供することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１８】
＜概要＞
本実施の形態は、動的に再設定可能な処理ユニットで使用する実行ファイルを生成するためのコンパイルシステムおよびその方法に関する。本実施の形態によれば、たとえばＣまたはパスカルで書かれたソースコードをコンパイルして、選択的に交換可能な内部ハードウェア構造を有する動的に再設定可能な処理ユニットで使用する実行ファイルを生成するためのシステムが提供される。
【００１９】
１つの実施の形態として、本実施の形態の発明は、機械語命令を実行するのに必要なハードウェア設定と一緒に機械語命令およびデータをカプセル化することが出来る。再設定可能な構造において、個別のプロセッサ各々は、たとえば再設定可能なプロセッサ・ハードウェア、たとえば完全にＦＰＧＡによるプロセッサと、データおよびプログラム・メモリと、並列相互接続デバイスと、ＦＰＧＡ設定ビットについて書き換え可能な記憶とから構成される。ＦＰＧＡ設定ビットストリームを動的にロードすることで、本発明は特定のアプリケーション実行フェーズに最適化したＩＳＡを使用することで高性能を達成するダイナミックＩＳＡ計算機を実現する。
【００２０】
本実施の形態の発明の構造において、アプリケーションはソフトウェアとして提供され、ハードウェアは回路 （中央サービス・モジュール、プロセッサ・モジュール、入出力（Ｉ／Ｏ）モジュール）とプロセッサ・モジュールＦＰＧＡに常駐する命令セット構造（ＩＳＡ）のためのビットストリームのかたちで供給される。ＩＳＡは計算機をプログラムするために使用できるプリミティブ命令セットである。アプリケーションソフトウェアはプロセッサ・モジュールでＩＳＡとして設定されたＦＰＧＡによって実行される。
【００２１】
本実施の形態の発明はＦＰＧＡ設定ビットストリームとこれを実行するプログラムとをコンパイル時に静的にリンクするように設計され、ランタイム時には独立したＩＳＡおよび／またはＦＰＧＡアプリケーション・エレメント実装のための動的切り換えを行うようにプログラムされたシステムを説明する。
【００２２】
ＩＳＡはＲＡＭ１３３に格納されたプログラム命令を実行する。これらのプログラム命令は１つまたはそれ以上の再設定命令を選択的に含む。再設定命令の選択時に、ハードウェアは特定ＩＳＡの最適な実装を提供するように再設定される。つまり、各々のＩＳＡは、これの特定の機能に加えて、別のＩＳＡを再設定可能なプロセッサへロードさせてから、新規のＩＳＡを用いてソフトウェア実行を継続させるような命令または指示を含む。
【００２３】
メモリ内でのＩＳＡビットストリームの位置は再設定命令への引数であるから、関数呼出し標的と変数が決定されるのと同様にこの位置をリンクまたはロード時に決定するのが望ましい。関数や変数と同様に、ビットストリームのアドレスについてシンボリックな名称を用いるのが望ましいと分かっている。本発明では実行可能ソフトウェアの記述を拡張してＩＳＡビットストリームを含むオブジェクトファイル・フォーマットを使用する。これにより幾つかの利点が得られる。たとえば、次の利点である。
・ツール構築の簡便化
再設定は命令およびデータとしてのビットストリームとして扱われるので、標準ソフトウェア・リンク技術を応用して要求されたビットストリームへソフトウェア制御ハードウェア変更をバインド出来る。データ抽象化としてのビットストリームを越えるような新規のソフトウェア技術を作成する必要がない。
・ロードの柔軟性
再設定データを実行ファイルの１つのセクションに分離することにより、メモリの保護領域へ設定をロードする機能が簡略化される。メモリ・アライメントの問題は構造的な方法で、詳細については後述するように、取り扱いが簡単になる。
・ロードの簡略化
プログラムを実行するのに必要とされる全データが単一のファイルに保持されるので、実行ファイルが静的にリンクされた場合にロード時間認識またはビットストリーム位置識別を実行する必要がない。
・設定管理の簡略化
プログラムをリンクしてしまえば単一のファイルを保持するだけで良い。これは個々の計算機やリモートサイトへの分散アプリケーション処理を簡略化する。
【００２４】
＜再設定可能な計算システム・構造＞
図１を参照すると、本実施の形態の発明にしたがって生成されたオブジェクトファイルを実行するためのスケーラブル、パラレル、動的再設定可能な計算機１０のブロック図が示してある。計算機１０は少なくとも１台のＳマシン１２、各々のＳマシン１２に対応するＴマシン１４、汎用相互接続マトリクス（ＧＰＩＭ）１６、少なくとも１台のＩ／Ｏ  Ｔマシン１８、１台またはそれ以上のＩ／Ｏデバイス２０と、マスター時刻基準ユニット２２を含むが望ましい。好ましい態様において、Ｉ／Ｏデバイス２０は多数のＳマシン１２を含み、したがって多数のＴマシン１４，多数のＩ／Ｏ  Ｔマシン１８，多数のＩ／Ｏデバイス２０を含む。
【００２５】
Ｓマシン１２とＴマシン１４とＩ／Ｏ  Ｔマシン１８の各々はマスター時刻基準ユニット２２のタイミング出力に接続されたマスター・タイミング入力を有している。各々のＳマシン１２はこれに対応するＴマシン１４に接続してある入力と出力を有する。対応するＳマシン１２に接続された入力および出力以外に、各々のＴマシン１４はＧＰＩＭ１６に接続された転送入力および転送出力を有している。同様に、各々のＩ／Ｏ  Ｔマシン１８はＩ／Ｏデバイス２０に接続してある入力と出力、およびＧＰＩＭ１６へ接続してある転送入力と転送出力を有する。
【００２６】
各々のＳマシン１２は動的に再設定可能な計算機である。ＧＰＩＭ１６はＴマシン１４の間の通信を支援するポイントツーポイント並列相互接続手段を形成する。Ｔマシン１４の組とＧＰＩＭ１６は、Ｓマシン１２へ接続されたメモリ間のデータ転送を行うためポイントツーポイント並列相互接続手段を形成する。同様に、ＧＰＩＭ１６と、Ｔマシン１４の組と、Ｉ／Ｏ  Ｔマシン１８の組がＳマシン１２とＩ／Ｏデバイス２０の各々の間のＩ／Ｏ転送のためのポイントツーポイント並列相互接続手段を形成する。マスター時刻基準ユニット２２はＳマシン１２とＴマシン１４の各々にマスター・タイミング信号を提供する発振回路を含む。
【００２７】
典型的な態様において、各々のＳマシン１２はザイリンクス社製ＸＣ４０１３（ザイリンクス社、米国カリフォルニア州サンノゼ）型フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）を６４メガバイトのランダム・アクセス・メモリ（ＲＡＭ）に接続したものを使用して実施する。各Ｔマシン１４はザイリンクスＸＣ４０１３ＦＰＧＡの約５０％の再設定可能ハードウェア資源を使用して実現され、各々のＩ／Ｏ  Ｔマシン１８も同様である。ＧＰＩＭ１６はトロイダル相互接続メッシュとして実施する。マスター時刻基準ユニット２２はシステム全体に周波数基準を提供するクロック分配回路に接続されたクロック発振回路であり、「位相同期し柔軟な周波数クロッキングおよびメッセージングのためのシステムおよびその方法」と題する米国特許出願第０８／５０１，９７０号に説明さ
れている。望ましくは、ＧＰＩＭ１６、Ｔマシン１４、Ｉ／Ｏ  Ｔマシン１８はスケーラブル・コヒーレント・インタフェース（ＳＣＩ）を形成するＡＮＳＩ／ＩＥＥＥ規格１５９６−１９９２のポイントツーポイント・プロトコルにしたがって情報を転送する。
【００２８】
図２を参照すると、本実施の形態の発明の態様で使用するプロセッサ・モジュール１３０のブロック図が図示してある。Ｓマシン１２ＦＰＧＡは専用のビットストリーム・メモリ１３２とプログラム／データ・メモリ１３３、１つまたはそれ以上のＴマシン１４、タイミング・ジェネレータ１３１等のクロック生成回路に接続されてプロセッサ・モジュール１３０を構成する。プロセッサ・モジュール１３０は並列動作を支援するような方法でＴマシン１４経由で他の同様なモジュールへ接続してある。プログラム／データ・メモリ１３３はプログラム命令を格納し、従来のＲＡＭとして実装される。ビットストリーム・メモリ１３２はＦＰＧＡ設定を記述したビットストリームを格納する。１つの態様において、プログラム／データ・メモリ１３３はダイナミックラム（ＤＲＡＭ）として、又ビットストリーム・メモリ１３２はスタティックラム（ＳＲＡＭ）で実現される。
【００２９】
図３および図４を参照すると、再設定可能な構造でＩＳＡを実現するＦＰＧＡ再設定の例が図示してある。図面では本実施の形態の発明を実施するためのシステム・構造のブロック図を図示してあり、ＳマシンＦＰＧＡ１２は図３の算術論理演算ユニット（ＡＬＵ）１４３と図４の有限インパルス応答フィルタ（ＦＩＲ）１４８とを含むように再プログラムされる。ビットストリームＲＡＭ１３２とプログラム／データＲＡＭ１３３が提供される。メモリバス１４９はＳマシンＦＰＧＡ１２とＲＡＭ１３２および１３３の間の通信チャンネルを提供する。ＦＰＧＡ設定ハードウェア１４０によってビットストリームＲＡＭ１３２からのＩＳＡビットストリームにしたがったＳマシンＦＰＧＡ１２の再設定が可能である。ＳマシンＦＰＧＡ１２設定は、たとえば、データレジスタ１４１、アドレスレジスタ１４２、レジスタ・マルチプレクサ１４４、メモリデータ・レジスタ１４５を含む。ビットストリームによってはこれらの要素のいずれか又は全部を他の設定で変更又は除外することが出来る。たとえば、ＡＬＵ１４３は図３に図示した設定では現われているが、図４の設定では有限インパルス応答フィルタ１４８に置き換えられている。
【００３０】
＜再設定指示＞
計算機１０はＳマシンＦＰＧＡ１２の設定を変更することにより計算機１０を再設定するための再設定指示を選択的に含むプログラム命令をＲＡＭに格納するのが望ましい。ここで図５を参照すると、外側ループ部分５２、第１の内側ループ部分５４、第２の内側ループ部分５５、第３の内側ループ部分５６、第４の内側ループ部分５７、第５の内側ループ部分５８からなる組を含む典型的なプログラム・リスト５０が図示してある。術語「内側ループ」は関連演算の特定の組を実行する責任のあるプログラムの反復部分を表わしており、また術語「外側ループ」は汎用演算を実行するおよび／または１つの内側ループ部分から別のループへ制御を移動することに主として責任を持つプログラムの部分を表わしていることが当業者には容易に理解されよう。一般に、プログラムの内側ループ部分５４，５５，５６，５７，５８は潜在的に大きなデータセットに対して特定の演算を実行する。１つまたはそれ以上の再設定指示を任意の内側ループ部分５４，５５，５６，５７，５８に関連付けておき内側ループ部分を実行する際に適切なＩＳＡがそのコンテクストにあるようにする。一般に、何らかの任意のプログラムで、プログラム・リスト５０の外側ループ部分５２は各種の汎用命令を含むが、一方でプログラム・リスト５０の内側ループ部分５４，５６は特定の組の演算を実行するために用いられる比較的少数の命令種から構成される。
【００３１】
典型的なプログラム・リスト５０では、第１の再設定指示が第１の内側ループ部分５４の先頭に現われ、第２の再設定指示が第１の内側ループ部分５４の終りに現われる。同様に、第３の再設定指示は第２の内側ループ部分５５の先頭に現われ、第４の再設定指示が第３の内側ループ部分５６の先頭に現われる、と言うように続く。各々の再設定コマンドはビットストリームで表わされる設定データセットを参照するのが望ましい。ビットストリームは各ＳマシンＦＰＧＡ１２の内部ハードウェア構造を指定しており、これには動的再設定可能な処理ユニット（ＤＲＰＵ）、アドレス演算ユニット（ＡＯＵ）、命令フェッチ・ユニット（ＩＦＵ）、データ演算ユニット（ＤＯＵ）（図示していない）が含まれる。このようなハードウェア構造は特定の命令セット・構造（ＩＳＡ）の実装に専用かつ最適化されたものである。ＩＳＡは計算機をプログラムするために使用できる命令のプリミティブ又はコア・セットである。従来技術で用いられているように、ＩＳＡは命令フォーマット、オペコード、データ・フォーマット、アドレシング・モード、実行制御フラグ、プログラムのアクセス可能なレジスタを定義する。本実施の形態の発明により生成されるオブジェクトファイルを実行するために用いられる再設定可能な計算構造では、各Ｓマシンが高速でランタイム設定されて、ビットストリームで指定された所望の各ＩＳＡに対してユニークな設定データセットを使用することによりＩＳＡのシーケンスを直接実行する。つまり、各々のＩＳＡは対応する設定データセットによって指定された通りのユニークな内部ハードウェア構造で実現される。つまり、図５の態様では、第１から第５の内側ループ部分５４，５５，５６，５７，５８の各々がユニークなＩＳＡに対応する、即ちＩＳＡ１，２，３，４，ｋに各々対応する。各々の連続したＩＳＡはユニークでなくとも良いことが当業者には認識されよう。つまり、ｋ番目のＩＳＡはＩＳＡ１，２，３，４またはこれらと違う何らかのＩＳＡであり得る。外側ループ部分５２の組もユニークなＩＳＡ、即ちＩＳＡ０に対応する。プログラムの実行中に、連続した再設定指示の選択はデータに依存する。任意の再設定指示の選択時に、再設定指示によって参照されるビットストリームで指定された通りにユニークなＳマシンのハードウェア設定を介して対応するＩＳＡに従い、プログラム命令が続けて実行される。
【００３２】
再設定指示の例外として、図５の典型的なプログラム・リスト５０では従来の高レベル言語ステートメント、たとえば、Ｃプログラミング言語に従って書かれたステートメントを含むのが望ましい。
【００３３】
１つまたはそれ以上の再設定指示をプログラム命令のシーケンス内に含めるには再設定指示を考慮するようにコンパイラを変更する必要があることが、当業者には理解されよう。従って、本実施の形態の発明のコンパイルシステムおよびその方法ではハードウェア設定を記述するビットストリームへの参照をカプセル化し、再設定指示によって識別された特定ＩＳＡの仕様に従いソースコードをコンパイルすることによって再設定指示を含めている。
【００３４】
本実施の形態の発明の１つの態様において、計算機１０で利用できる全部のＩＳＡが以下をサポートする。
・再設定中の情報とパラメータをスタック式に格納するためのスタックポインタ（ＳＰ）と次命令ポインタ・アドレスレジスタ（ＮＩＰＡＲ）（これはプログラムカウンタ（ＰＣ）としても周知である）
・たとえばサブルーチン・エントリについてｊｓｒまたサブルーチン戻り値についてｒｔｓを含むフロー制御のための適当なアセンブリ言語命令
・スタックに対してレジスタ値を格納しロードするための適当なメモリ・インタフェースユニット
再設定を実施する上でのこれらの要素の動作は図１１から図１３（ｃ）との関連で後述する。
【００３５】
＜コンパイルシステムの要素＞
図１０を参照すると、本実施の形態の発明によるコンパイルシステム４００のブロック図が図示してある。本実施の形態の発明によるコンパイルシステムおよびその方法は従来のオペレーティング・システム、たとえばＵｎｉｘ等を使用する代表的ワークステーション又はパーソナル・コンピュータで動作する。Ｕｎｉｘ環境はソフトウェア開発ツールのソースコードが広く利用できるため、又ユーザ環境の頑強さから有利である。当業者には理解されるように、本実施の形態の発明のシステムおよび方法は再設定可能な計算機上でネイティブに実行することも出来る。図６を参照すると、本実施の形態の発明によるコンパイル、アセンブル、リンク、ロードの方法全体のフローチャートが図示してある。図６のコンパイル・ステップのさらなる詳細は図７、図８、図９との関連で以下で説明する。
【００３６】
ソースファイル４０１は後述するように特別に変更したＣコンパイラ４０２でコンパイルする。Ｃコンパイラ４０２はディスク記憶から又はその他の何らかの入力又は記憶デバイスからソースコード命令ステートメントを含むソースファイル４０１を読み込む（３０１）。Ｃコンパイラ４０２はソースコード命令ステートメントのサブセットについてＩＳＡを識別する（３０２）。１つの態様において、ＩＳＡはさらに完全に後述するように再設定指示によって識別される。Ｃコンパイラ４０２は識別したＩＳＡを指定するための適当な再設定命令を生成し（３０３）、識別したＩＳＡにより実行する命令のサブセットをコンパイルして（３０４）アセンブリ言語ステートメントを作成する。Ｃコンパイラ４０２は後続の命令ステートメントのサブセットが（代表的にはソースファイル４０１内の別の関数である）異なるＩＳＡでコンパイルすべきかどうか判定する（３０５）。また、１つの態様においてこのような決定は再設定指示を調べることでも行われる。異なるＩＳＡが識別された場合、Ｃコンパイラ４０２は３０２に戻る。
【００３７】
これ以外で、ソースファイルの最後に達した場合、アセンブリ言語ステートメントがアセンブラ４０９によってアセンブルされ（３０６）、オブジェクトファイル４０３を作成する（３０６）。オブジェクトファイル４０３は、ビットストリーム位置と６４ビットビット整列アドレスを扱えるように変更してあるソフトウェアリンカ４０４を用いてリンクし（３０７）、実行ファイル４０５を作成する。後述するように、実行ファイル４０５はＦＰＧＡ構造を定義するＩＳＡビットストリーム４０６への参照の解決を含む。実行ファイル４０５がソフトウェアリンカ４０４で作成されてから、ネットワーク接続４０８経由で、再設定可能な計算機１０上で動作するローダ４０７へ送信され計算機１０へロードされる（３０８）。ダイナミックリンクの場合、ＩＳＡビットストリーム４０６もネットワーク接続４０８経由でローダ４０７へ送信される。
【００３８】
＜任意のおよび構造化再設定＞
１つの態様において、Ｃコンパイラ４０２では任意の再設定が許容されており、再設定指示はソースコードのどこに配置されていても良い。別の態様では、Ｃコンパイラ４０２が構造化再設定を許容しており、再設定指示は関数呼び出しまたは関数からの戻りの場合にだけ許容され、各々の関数は関数の実行全体を通してコンテクストに組み込まれるべき単一のＩＳＡがラベル付けされる。任意の再設定では柔軟性が追加されソースコードは小さくできるが、構造化再設定では予測能力の改善とＩＳＡローディングの判定機能が提供されるので、信頼性を高めることが出来るようになる。機械語コードは一般にＩＳＡが異なると異なるので、コンパイラがソースコードの特定セグメントについて適当な機械語コードを生成できるようにする判定能力が好ましいである。任意の再設定は、ソースコード内の幾つかの条件文構造と組み合わされると構造化再設定を用いて排除されるような非決定状況を発生させることがある。
【００３９】
以下のコード例外は任意の再設定を用いた場合に発生する可能性がある非決定的再設定の一例である。
#pragma reconfig ISA0
...
x = 0;
if (a != o) ｛
#pragma reconfig ISA1
｝ else ｛
#pragma reconfig ISA2
｝
y = x + 2;
...
【００４０】
IF文以降のコンテクストで、ランタイム時の制御フローについて２種類のパスが可能であり各々が異なるＩＳＡに再設定するためコンパイル時にＩＳＡを決定することが出来ない。したがってコンパイラはＩＳＡ１とＩＳＡ２がバイナリ互換でなければ個の手順について有効な機械語コードを放出できない。このような非決定性は、構造化再設定を用いると１つだけのＩＳＡを関数毎に指定できるため排除される。
【００４１】
上記の例では、変数ｘの値が再設定演算の間保持され、新規ＩＳＡからアクセスすることが出来る。１つの態様において、この値は従来の方法でＩＳＡ０のレジスタに格納される。しかし、ＩＳＡ１またはＩＳＡ２への再設定によってこのレジスタは存在しなくなるか、値を失ってしまうので、レジスタに依存して再設定後にｘの値を供給することが出来ない。したがってコンパイラ４０２は再設定後に使用される有効なレジスタの値を追跡し、必要な時点でそれらの値が利用できることを保証する。
【００４２】
任意の再設定を使用する場合、後続のＩＳＡに変数へのアクセスをどのように提供するか、現在のＩＳＡが変数をどのように格納したかと後続のＩＳＡがアクセスすべき機能を考慮することによってコンパイラ４０２が決定する。構造化再設定では、値を呼び出しもと関数へまたはここから渡す場合に従来行われているように、スタックを用いて値を格納する。レジスタ・構造は再設定中に根本的に変化することがあるので、さらに詳細には図１１との関連で後述するように、有効な変数は終了するＩＳＡによってスタックに格納され、後続のＩＳＡによって再ロードされる。
【００４３】
１つの態様において、コンパイラ４０２は既知の「インライン化」最適化を実施して構造化再設定でｊｓｒ命令のオーバヘッドを回避できるようにする。インライン化は、呼び出された関数の演算を「インラインで」コピーして、従来の方法で関数呼出しに関連するオーバヘッドを回避する関数呼出しのコンパイルを最適化するための周知の技術である。つまり、次のようなコード・セグメント
#pragma reconfig ISA1
jsr SUBROUTINE_A
#pragma reconfig ISA0
#pragma reconfig ISA2
jsr SUBROUTINE_B
#pragma reconfig ISA0
は、次のコードに置き換えることが出来る。
#pragma reconfig ISA1
< code from SUBROUTINE_A >
#pragma reconfig ISA0
#pragma reconfig ISA2
jsr SUBROUTINE_B
#pragma reconfig ISA0
【００４４】
つまり、ジャンプと戻りの必要性ならびに関数の呼び出しと戻りに関係した関連スタックの書き込みを明らかにすることで性能を改善している。
【００４５】
さらに、１つ以上の再設定指示がシーケンス内に現われた場合に最後の再設定指示を除く全部を排除することによりさらに最適化を行うことが出来る。つまり、３行目（#pragma reconfig ISA0）を上記のコードセグメントから削除できる。
【００４６】
任意の再設定を使用する場合、呼び出された関数はプログラムのフローが呼び出した関数に戻ってからも有効なままの再設定を発生することがある。たとえば、上記のコードリストを含む呼び出された関数は１つのＩＳＡで始まり、２回再設定を行い、呼び出した関数に戻る。呼び出した側の関数で後続のステートメントは最後の再設定からＩＳＡを使用するものと考えなければならない。１つの態様において、コンパイラ４０２は相互手順分析を実行してどのＩＳＡが各々の関数呼び出しと戻りでコンテクストに組み込まれているか判定する。ソースファイルが別々にオブジェクトファイルへコンパイルされてから実行ファイルにリンクされるような場合、どのＩＳＡが呼び出された関数から戻った後で状況に組み込まれているかを判定するのは困難か、または不可能である。このような状況ではＩＳＡ情報をたとえばヘッダファイルに格納しておき、モジュールから呼び出された全ての外部関数について関数エントリ時と終了時にどのＩＳＡがコンテクストに組み込まれているかを指定する。これ以外に、関数間にパラメータを渡してＩＳＡのコンテクストを指定することも出来る。
【００４７】
構造化再設定を使用する場合、ＩＳＡ情報は関数の宣言に提供されるのでコンパイラ４０２が制御フローに対してＩＳＡ仕様を検証する必要がなく、また呼び出された関数で予想しない再設定を行う可能性もない。
【００４８】
構造化再設定の更なる利点は、意味の観点から再設定動作をより良く表現していることである。再設定は一般に関数呼び出しに少なくとも匹敵するある程度のオーバヘッドを伴うことと、たとえばスタックへの値の格納等、同じ種類の演算の多くが関係することから、関数呼出しと同様の再設定シンタックスを提供するのが望ましい。構造化再設定は再設定の記述と関数呼出しの記述を結合しているので、この意味上の目標を達成することが出来る。構造化および任意の再設定についての更なる例については後述する。
【００４９】
＜再設定指示＞
好ましい態様において、再設定指示はＣ言語で提供される標準のメタシンタックスである#pragma が先行し、言語シンタックスに含まれない情報をコンパイラに渡している。#pragma シンタックスを用いることで再設定指示はＣプログラムのコンテクストで動作できるようになる。ソースコードでの再設定指示の一例は次のようなものになるであろう。
#pragma func_isa func2 isa2
【００５０】
１つの態様において、３個の#pragma 指示が提供される。各々の指示は別個の顆粒性レベルまたはスコープで動作するので、これによって特定のコード部分に影響を与える。
・reconfig：新規ＩＳＡにすぐに再設定を行う（スコープは任意のブロックのコード）
・func_isa：特定の関数でＩＳＡを指定する（スコープは関数）、
・default_func_isa：初期設定ＩＳＡを指定する（スコープはファイル全体）
【００５１】
これらの再設定指示によってレジスタ転送レベル（ＲＴＬ）再設定ステートメントが得られ、これによって、詳細については後述するようにどのＩＳＡが各々のコードブロックで必要とされるかを判定するための情報をコンパイラに提供できる。
【００５２】
以下のコード・リストは構造化再設定環境で前述の指示の各々の使い方の一例である。
【表１】
2006155632.tif 000003
【００５３】
コードリスト４行目はdefault_func_isa指示の一例であり、別のＩＳＡを指定していない全ての関数でＩＳＡ０を使用すべきことを指定している。この指示のスコープはファイル全体であるから、指示は図示したリスト全体に適用される。
【００５４】
コードリスト６行目はfunc_isa指示の一例で、関数呼び出し build_color_mapでFIXED_POINT_ISAが適当なＩＳＡであると指定している。個の指示のスコープは指定された関数である。
【００５５】
コードリスト２１行目はreconfig指示の一例で、BYPTE_MAP_ISA が指示直後のコードブロックで適当なＩＳＡであると指定している。この指示のスコープはコードリストの２２行目から３５行目に図示したコードブロックである。
【００５６】
以下のコードリストは任意の再設定環境での上記指示の各々の使い方についての一例である。
【表２】
2006155632.tif 000004
【００５７】
９行目と１９行目は別の再設定指示に遭遇するまで有効になったままのreconfig指示を含んでいる。任意の再設定では、指示はコードのどの点でも発生することがあり、関数レベルの顆粒性に制限されない。
【００５８】
＜コンパイルの方法＞
図７および図８を参照すると、本実施の形態の発明による好ましいコンパイル方法のフローチャートが図示してある。図７ではコンパイラ・フロントエンドで実行するステップを図示してあり、図８にはコンパイラ・バックエンドで実行するステップが図示してある。フロントエンドは再設定指示を解釈してレジスタ転送レベル（ＲＴＬ）ステートメントを生成し、これをバックエンドが従来の方法で解釈する。従来技術で周知のように、ＲＴＬステートメントはＩＳＡ非依存の中間レベルステートメントであり、従来のコンパイラ、たとえばフリーソフトウェア・ファウンデーション（Free Software Foundation:FSF, Cambridge, MA）で作成しているＧＮＵ・Ｃコンパイラ（ＧＣＣ）などで使用されている。ＲＴＬは、たとえばスタンフォードＳＵＩＦコンパイラ・グループによる"SUIF: A Parallelizing & Optimizing Research Compiler, Tech. Rep. CSL-TR-94-620, Computer Systems Lab, Stanford University,May, 1994に開示されているスタンフォード大学中間フォーマット（ＳＵＩＦ）仕様に準拠して拡張できる。たとえば、ソースコード・ステートメント：
x = y+3
は次のようにＲＴＬで表現することが出来る。
r1 <- y
r0 <- r1 + 3
x <- r0
【００５９】
図７および図８の方法は高レベルソースコード命令ステートメントのシーケンスを含み、また連続ステートメントを実行するＩＳＡを指定する少なくとも１つの再設定指示を含むソースファイル４０１を入力として取る。図示の目的で、再設定は関数ごとのレベルで行われる構造化再設定環境を仮定している。コンパイラ４０２のフロントエンドはソースファイル４０１から次の高レベルステートメントを選択し（６００）、選択した高レベルステートメントが関数呼び出しを表わしているかどうか判定する（６０１）。違う場合、コンパイラ４０２はそのステートメントに対してＲＴＬコードを放出する（６０３）。６０１でステートメントが関数呼び出しであるとコンパイラ４０２が判定した場合、コンパイラ４０２は現在コンテクストにあるＩＳＡとは異なるＩＳＡで呼び出された関数が動作するかどうか判定する（６０２）。それ以外の場合、コンパイラ４０２は関数呼び出しに対してと関数の戻り値を読み取る（６１３）ためにＲＴＬコードを放出する（６０５）。
【００６０】
６０２で別のＩＳＡで関数が動作するとコンパイラ４０２が判定した場合、全ての有効レジスタを保存し（６０７）、再設定を実行する（６０４）ことを含め再設定に作用させるのに必要なＲＴＬコードを放出する。好ましい態様において、ＲＴＬ再設定ステートメントはＩＳＡ識別を含む比標準のＲＴＬステートメントである。コンパイラ４０２は関数呼び出しについてのＲＴＬコードを放出する（６０６）。コンパイラ４０２はこの後有効レジスタを復元する（６１１）ためと関数戻り値を読み取る（６１３）ために第１のＩＳＡに戻る再設定についてのＲＴＬコードを放出する（６０９）。
【００６１】
６０３または６１３が完了した時点で、別の高レベルステートメントを考慮に入れる必要があるかどうかコンパイラ４０２が判定する。必要があれば、コンパイラ４０２は６００に戻り、それ以外の場合には６１０へ進む。
【００６２】
図８をここで参照すると、コンパイラ４０２のバックエンドは６１０から６２２を実行してそれまでに生成されたＲＴＬステートメントをアセンブリ言語に翻訳する。
【００６３】
次に現在考慮しているＲＴＬステートメント・グループ内部の次のＲＴＬステートメントをコンパイラ４０２が選択する（６１２）。
コンパイラ４０２は、現在考慮しているＲＴＬステートメント・グループについて存在する現在のＲＴＬステートメント・グループを一組のアセンブリ言語ステートメントに翻訳できる方法を指定する規則を取り出す（６１８）。コンパイラ４０２は規則にしたがって現在考慮しているＲＴＬステートメント・グループに対応するアセンブリ言語ステートメントの組を生成する（６２０）。次のＲＴＬステートメント・グループ内部で別のＲＴＬステートメントの考慮が必要かどうか、コンパイラ４０２が判定する（６２２）。必要であればコンパイラ４０２は６１２に戻る。それ以外では、コンパイラ４０２はレジスタ割り当て演算を実行する（６１０）。従来技術で周知のように、１つのＩＳＡから別のＩＳＡへと一貫したレジスタ・構造は絶対条件ではない。特に、幾つかの内側ループＩＳＡは標準レジスタ割り当て演算が適用されない特別なレジスタを有することがある。しかし、一般に、外側ループＩＳＡは標準レジスタ割り当てを使用することが出来る。たとえば、上記で示したＲＴＬコードを以下のようなアセンブリ・コードに翻訳できるが、アセンブリ・コードはＩＳＡごとに異なる場合がある。
ld  y,r3
ld  [r3], ro
add  3, r0
st  r0, [x]
【００６４】
つまり、コンパイラ４０２はコンパイル動作中に複数のＩＳＡにしたがって自動的かつ選択的にアセンブリ言語ステートメントを生成する。言い換えれば、コンパイル処理中に、コンパイラ４０２は可変ＩＳＡにしたがってソースファイル４０１から単一のプログラム命令の組をコンパイルする。コンパイラ４０２は図７および図８との関連で前述したような好ましいコンパイル動作を実行するように変更した従来のコンパイラが好ましい。
【００６５】
もう一度図１０を参照すると、アセンブラ４０９はコンパイラ４０２が生成したアセンブリ言語ステートメントを取り出してオブジェクトファイル４０３を作成するように動作する。コンパイラ４０２は、ビットストリーム位置と６４ビット、ビット整列アドレスを取り扱えるソフトウェアリンカ４０４によってリンクされ、実行ファイル４０５を作成する。ローダ４０７はビットストリーム・セグメントを含む複数のオブジェクトファイル４０３からの同様のセグメントを、単一のメモリイメージに連結し、再設定可能な計算機１０へ送信する。１つの態様において、このような連結はランタイム時に行われている。別の態様ではオフラインで行っている。ソフトウェアリンカ４０４が実行ファイル４０５に対してメモリ整列を実行してＦＰＧＡビットストリームの整列要求を考慮することが出来る場合には有利である。ある種のＦＰＧＡローディング・ハードウェアは一定サイズのビットストリームを要求する。そのためリンカはこのようなハードウェアの要求に適合させるためビットストリームをパディングしてメモリ整列を実行できる。
【００６６】
スタティック・リンクを使用する場合、ＩＳＡビットストリーム４０６と実行ファイル４０５はリンク時にソフトウェアリンカ４０４によって連結される。ダイナミック・リンクを用いる場合、ＩＳＡビットストリーム４０６と実行ファイル４０５はロード時に結合され、実行ファイル４０５とＩＳＡビットストリーム４０６はネットワーク接続４０８経由で再設定可能な計算機１０上で実行中のローダ４０７へ送信されることになる。
【００６７】
図９をここで参照すると、本実施の形態の発明の１つの態様にしたがってアセンブリ言語コードを生成する際に実行される追加ステップのフローチャートが図示してある。このフローチャートはＲＴＬコードが再設定可能な計算機について機械で読み取り可能なコードに変換される場合に生成される中間ファイルを詳細に示している。ＲＴＬコードはコード内の各ＲＴＬステートメントについてどのＩＳＡがコンテクストに入っているかを表わすようにコメントが付けられる（３３１）。ＲＴＬステートメントはこの段階では変更されない。コードは最適化ユティリティによりＩＳＡ依存とＩＳＡ非依存の方法で最適化される（３３２）。最適化ユティリティはＩＳＡ依存の最適化を実行するが、出力はマシン非依存のコードを使用している。つまり出力は必ずしも最適化されていないがどのＩＳＡでも実行できる。最後に、マシン依存命令がアセンブラ４０９によって最適化したコードから生成される（３３３）。このコードは抽象化したレジスタやその他のマシン依存の特徴を使用する。リンクやその他のマイナーステップの追加クリーンアップをここで実行することが出来る。
【００６８】
本実施の形態の発明の好ましい態様において、ＩＳＡはＳマシンＦＰＧＡ１２のＦＰＧＡに命令の引数で参照されるビットストリームをロードさせるreconfig命令を含む。つまり各ＩＳＡは、ＩＳＡのreconfig命令へ引数として使用されるビットストリーム・アドレスの再配置に関連した少なくとも１つの再配置型を有している。オブジェクトファイルの再配置エントリはリンカに対して、実体の実アドレスをリンク時に実行ファイルのセグメントへ代入するように伝える。再配置型についてはさらに詳細に後述する。
【００６９】
後述するように、ビットストリームは特定の、恐らく読み取り専用のセクションに配置されたデータオブジェクトとして定義されるので、標準的再配置技術が何らかのプログラム定義される読み取り専用データと同様の方法でＩＳＡreconfig命令で使用されるビットストリーム・アドレスの再配置を提供することが出来る。
【００７０】
再設定可能な計算機１０は「スケーラブル・パラレル・動的再設定可能な計算システムおよびその方法」と題する関連米国特許出願に記載されているようにローダからの結果を実行する。さらに詳しく説明すると、再設定可能な計算機１０はreconfig命令を認識して当該命令への引数に指定されている通りに適切なＩＳＡビットストリームをロードする。
【００７１】
＜プログラム状態の保存＞
新規のＩＳＡをロードすることによるＦＰＧＡ再設定では内部ハードウェア状態情報が失われることになる。結果的に、本実施の形態の発明のシステムおよび方法は再設定中にプログラム状態を保存して当該ハードウェアの移行中に実行スレッドの損失を回避する。
【００７２】
再設定中に、再設定可能な計算機１０は、新規のＩＳＡがロードされた後で必要になるあらゆるデータを格納するのに呼び出しスタックを使用するのが望ましい。このような格納は呼び出しスタックへ値をプッシュして再設定により影響を受けない所定のメモリ位置にスタックポインタを格納することで実現する。再設定に続けて、再設定可能な計算機１０はスタックポインタを使用してあらかじめ格納してあった値を呼び出しスタックからポップする。
【００７３】
スタックは再帰をサポートする高レベル言語たとえばＣ／Ｃ＋＋、Ｌｉｓｐ、ＰＡＳＣＡＬなどでコンパイルした機械語プログラムを実行するランタイム環境で周知である。スタックはメモリ領域に実現されスタックポインタ（ＳＰ）をＩＳＡで用いることでスタック先頭のアドレスを保持する。値、たとえばプログラム・データやアドレスは、ＳＰをデクリメントして値をＳＰに含まれるアドレスへ書き込むことによりスタック内に格納される（またはスタックへ「プッシュ」される）。値は、ＳＰレジスタに含まれるアドレスから値を読み出して、ＳＰをインクリメントすることによりスタックから取り出される（またはスタックから「ポップ」される）。
【００７４】
本実施の形態の発明において、プログラムの動的な状態、たとえば変数等と、代表的には次命令ポインタ・アドレスレジスタ（ＮＩＰＡＲ）またはプログラムカウンタ（ＰＣ）に格納されるハードウェアが実行する次の命令の位置は、ハードウェアの再設定前にスタックに格納される。ＳＰは所定のメモリアドレスへ保存される。つまりＳＰとＮＩＰＡＲの値はハードウェアの再設定を通して保存され、後に実行を再開した時点で取り出すことが出来る。
【００７５】
ここで図１１を参照すると、本実施の形態の発明によりプログラム状態を保存する方法のフローチャートが図示してある。新規のＩＳＡ設定を表わすビットストリームをプロセッサ・ハードウェアにロードすべきであることを示すreconfig命令を受信する（６５１）。reconfig命令の引数は、ロードすべきＩＳＡ設定を保持している物理メモリのアドレスである。
【００７６】
ＳＰをデクリメントし（６５２）、ＮＩＰＡＲをＳＰで示されたアドレスにロードする（６５３）、つまりＮＩＰＡＲをスタックにプッシュする。ＳＰは新規のＩＳＡ設定に既知となっているメモリ内の所定アドレスに保存する（６５４）。ＦＰＧＡ１２にビットストリーム・メモリ１３２の位置からＩＳＡビットストリームを読み込ませることによってハードウェアに新規のＩＳＡ設定をロードする（６５５）。新規設定をロードしたら、分かっている所定のアドレスからＳＰをロードして（６５６）次にＳＰに格納されているメモリ位置からＮＩＰＡＲを取り出すことでスタックからロードし（６５７）、ＳＰをインクリメントする（６５８）。図１１の再設定動作中のスタック内容の一例を、図１３（ａ）、図１３（ｂ）、図１３（ｃ）との関連で後述する。
【００７７】
＜構造化再設定の実装＞
本実施の形態の発明の１つの態様において、構造化再設定はソースコードからreconfigステートメントをアセンブリ言語命令のシーケンスにコンパイルすることによって実現する。すでに説明したように、構造化再設定において、再設定指示は関数を呼び出すかまたは関数から戻る場合にだけ許容されるので、各々の関数には関数の実行中にコンテクストに組み込まれるべき単一のＩＳＡをラベル付けする。ここで図１２を参照すると、本実施の形態の発明の１つの態様による構造化再設定を実装する方法のフローチャートが図示してある。
【００７８】
図１２の方法は呼び出し関数がＩＳＡ再設定命令を有し呼び出される側の関数を起動する場合に使用される。ＳマシンＦＰＧＡ１２は有効レジスタ値を保存しておき（７０７）、再設定の結果として失われないようにする。ＳマシンＦＰＧＡ１２は現在のＩＳＡを用いて呼び出された関数へのパラメータをスタックにプッシュするが（７０１）、これはパラメータがレジスタに常駐し得るためである。ＳマシンＦＰＧＡ１２が新規ＩＳＡに再設定して（７０２）、宛先関数のＩＳＡの命令たとえばｊｓｒを使用する関数を表わすサブルーチンを呼び出す（７０３）。呼び出された関数が実行を完了すると戻り命令たとえばｒｅｔで呼び出し側へフローを返す（７０４）。Ｓマシン１２は呼び出した関数について本来のＩＳＡを認識し（７０５）、呼び出された関数の戻り値を読み取り（７０６）、有効なレジスタの値を復旧する（７０８）。図１２のスタックパラメータを渡し値を返す技術はパラメータまたは戻り値をレジスタに渡さないような再設定不可能な計算機で使用されるような従来の方法で実現することが出来る。
【００７９】
以下は構造化再設定を実装するためのコードの一例である。
#pragma func_isa funcl another_isa
int
funcl(int *i)
｛
...
}#pragma func_isa main isa0
main()
{
int foo, bar;
...
bar = fucl(&foo);
}
【００８０】
２つの関数が図示してある：ISA0を使用するmainは、汎用命令セット、またfunc1はanother_isaで指定された別の命令を使用する。#pragmaステートメントは２つの関数についての命令セットを指定する。
【００８１】
構造化再設定を使用する本実施の形態の発明の１つの態様において、コンパイラ４０２は上記のリストの関数コールbar = func1(&foo)を次のようなアセンブリコードにコンパイルする。図示の目的でコメントを追加してある。
１    ;SPをデクリメントして戻り値の場所を作る
２    eldi  16, aO
３    esub  a0,sp
４    ;引数fooのアドレスを計算
５    emov  sp, al
６    dadd  a0, al
７    ;スタックにプッシュする
８    eatr  al,sp
９    ;再設定
10    reconfig another_isa
11    ;サブルーチン呼び出し
12    jsr  funcl
13    ;isa0再設定
14    reconfig  isa0
15    ;プッシュしたパラメータをクリアする
16    eldf  d0
17    ;レジスタ変数barに結果を読み込む
18    ldf  d0
【００８２】
さらに、有効レジスタ値を保存し復元するためのアセンブリコードは１行目の前と１８行目の後に各々追加できる。
【００８３】
図１３（ａ）、図１３（ｂ）、図１３（ｃ）も参照すると、このアセンブリコードの実行時の様々な点でのスタック内容の略図が図示してある。図１３（ａ）は上記のアセンブリコードの１行目から８行目の実行後のスタック８００の状態を示す。これらの行はfunc1で使用するスタックフレームを構築する。第１に、戻り値を格納するための場所を作り、次に変数fooのアドレスをスタックにプッシュする。位置８０１は関数mainのためのスタックフレームに変数fooを含む。この例では、変数barがISA0レジスタに格納されるので、スタック８００には出現しない。位置８０２は戻り値のために割り当てられ、位置８０３は変数fooのアドレスを含む。
【００８４】
図１３（ｂ）は１０行目でreconfig命令の実行途中におけるスタック８００の状態を示す。図１１も参照すると、このスタック８００の状態はステップ６５４の終りに相当し、新しい設定をロードする直前である。次の命令の現在アドレス（ＮＩＰＡＲ）は位置８０４でスタック８００にプッシュされており、スタックポインタＳＰは所定のアドレスに（図示していない）書き込まれている。この時点で、ステップ６５５から６５８が実行される、即ちここで前述のように、ハードウェアが再設定され、スタックポインタがロードされ、ＮＩＰＡＲがポップされる。
【００８５】
図１３（ｃ）は１２行目でjsr func1関数を用いるfunc1へのエントリ時におけるスタック８００の状態を示している。位置８０４はここでは戻りアドレスを格納している。func1から戻る場合、再設定可能な計算機１０はISA０に設定を戻し、パラメータ&fooがスタックから除去され、コンパイラ４０２がレジスタd0に割り当てた変数barへ戻り値が読み込まれる。
【００８６】
＜実行形式とリンキングのフォーマット＞
本実施の形態の発明の好ましい態様は標準的なソフトウェア開発パラダイムを拡張して実行形式ファイル４０５からバイナリ機械語命令を実行するＦＰＧＡ実装計算機を指定するハードウェア設定を定義するビットストリームを含むようにする。これは、unixワークステーションで一般的に使用され本明細書の参照に含めてあるユニックス・システムラボラトリーズ社のSystem V Application Binary Interface第３版、１９９３年に記載されている実行形式およびリンキング・フォーマット（Executable and Linking Format: ＥＬＦ）の拡張を含むＩＣＡＲＵＳ  ＥＬＦと呼ばれる新規のファイルフォーマットを用いて実現する。
【００８７】
ユニックス・システムラボラトリーズ社のSystem V Application Binary Interface第３版、１９９３年に記載されているように、ＥＬＦファイルはリロケータブル・ファイル（オブジェクトファイル４０３）または実行形式ファイル４０５のどちらかである。ＥＬＦはファイル内容の並列的なビューを提供し、これら２種類のフォーマットの異なる必要性を反映している。ここで図１４を参照すると、従来技術によるリンキング・ビュー５０１と実行ビュー５０２で代表的なＥＬＦファイルフォーマットが図示してある。ＥＬＦヘッダ５０３はファイル構造を記述した「ロードマップ」を保持している。セクション５０５はさらに詳細には後述するように命令、データ、シンボル・テーブル、再配置情報などのリンキング・ビュー５０１でオブジェクトファイル情報の本体を保持している。実行ビュー５０２で使用されるセグメント５０７はセクション５０５と類似しており、各々のセグメント５０７は、１つまたはそれ以上のセクション５０５と対応している。また、各々のセグメント５０７には、セグメント５０７が書込可能なメモリにあるかといった、セクション５０５に適用可能もしくは不可能な情報を含むヘッダを含むことが出来る。一般に、セクション５０５はリンク中に使用される情報を含み、セグメント５０７はロード中に使用される情報を含む。
【００８８】
プログラムヘッダ・テーブル５０４は存在する場合には再設定可能な計算機１０に対してどのように処理イメージを構築するかを伝える。セクションヘッダ・テーブル５０６はセクション５０５を記述する情報を含む。各セクション５０５はテーブル５０６にエントリを有し、各々のエントリはたとえばセクション名、サイズ、その他の情報を付与する。図１４に図示した要素はどのような順番で提供しても良く、幾つかの要素を除去しても良い。
【００８９】
図１４に図示した要素に関するさらなる詳細はユニックス・システムラボラトリーズ社System V Application Binary Interface第３版、１９９３年に見ることが出来る。以下の説明ではSystem V Application Binary Interfaceに説明されているような標準的ＥＬＦと、本実施の形態の発明で使用されるICARUS ELFファイルフォーマットの相違を説明する。
【００９０】
ICARUS ELFファイルフォーマットはＥＬＦのプロセッサに依存する特徴を用いてプログラム・テキスト内部で使用されるビットストリーム・アドレスの再配置を提供し、また専用ビットストリーム・メモリ１３２内部にランタイム時にロードすることの出来るセグメントへのビットストリーム再配置およびリンキングを提供する。ICARUS ELFは標準ＥＬＦを拡張して、ＦＰＧＡで定義されたハードウェア状で実行する実行可能コードと一緒に、ＦＰＧＡ設定を定義するビットストリームの格納を支援する。
【００９１】
ICARUS ELFは新規のデータ種別、セクション、シンボル種別、およびＩＳＡビットストリームの再配置種別を提供することにより標準ＥＬＦに追加する。
【００９２】
〔データ種別〕
好ましい態様において、再設定可能な計算機は６４ビット幅のビット・アドレスを使用する。アドレスはデータ項目の最下位ビットのビットオフセットを指す。ICARUS ELFは６４ビット・バイトアドレス用に設計されており、アドレスは各データ項目の第１バイトを指す（リトルエンディアン・プロセッサでは最下位、ビッグエンディアン・プロセッサでは最上位）。つまり、ヘッダのオフセットはバイトに関して定義されているが、再配置すべきアドレスは６４ビットのビット・アドレスで指定される。これによりバイト指向計算機でリンカを使用できる。ICARUS ELFでは２種類の新規データ種別を使用して６４ビット・アドレシングを容易にしている。
・ICARUS_ELF_Addr: サイズ８バイト、現在のＩＳＡについてＫisaでアライメントが決定され、これでメモリのビット幅の２を底とする対数を表わす（たとえば８ビットで３，１６ビットで４）
・ICARUS_ELF_Off: ファイルへのバイト・オフセット、サイズは４バイト、アライメント１バイト。
【００９３】
〔セクション〕
本実施の形態の発明の１つの態様では名称.ICARUS.bitstreamのＦＰＧＡビットストリームデータを含む新規セクションを追加する。１つまたはそれ以上のこのようなセクションを提供しても良い。好ましい態様において、各々のこのようなセクションはＥＬＦセクション種別SHT_PROGBITSでＥＬＦセクション属性SHF_ALLOCを有する。SHT_PROGBITSはプログラムによって定義された情報を保持するセクションを表わし、これのフォーマットと意味はプログラムだけで決定される。属性SHF_ALLOCは、このセクションが処理実行中にメモリを占有することを指定し、これはローダで有用な情報である。
【００９４】
ＥＬＦでは特定の名前であるセクションの複数インスタンスが許容されるので、本実施の形態の発明ではビットストリームごとに１つのセクションを使用するすることができ、またはこれに代わって正確なアライメントで全てのビットストリームを１つのセクションにマージすることが出来る。
【００９５】
ビットストリームに対して新規のセクションを提供しハードウェアがビットストリームのための特別なメモリ領域で構築できるようにするのが有利である。別々のセクションにより、これらの特別なメモリ領域へローダによるビットストリームの配置が容易になる。このようなメモリ領域が必要とされない場合、本実施の形態の発明は、特別なビットストリーム・セクションを導入するのではなく、たとえばSystem V Application Binary Interfaceに記載されているように、.rodataや、.rodata1等プログラムの読み取り専用データに標準のデータセクションを使用して実施できる。
【００９６】
〔シンボル〕
オブジェクトファイルはプログラムのシンボル定義と参照を検索して再配置するための情報を保持するシンボル・テーブルを含む。本実施の形態の発明の１つの態様において、.ICARUS.bitstreamセクションに含まれる各々のビットストリームはオブジェクトファイルのシンボルテーブルにエントリを有している。図１４のリンキング・ビューにおいて、シンボルテーブルは別個のセクション５０５に配置されている。シンボルは次の属性を有する：
・st_name：シンボル名称はオブジェクトファイル用にアセンブリ言語ソースでこれを参照するために使用される名称である。st_nameはシンボル名の文字表現を保持するオブジェクトファイルのシンボル文字列テーブルへのインデックスを保持している。
・st_value：ビットストリーム・シンボルについて、セクション内部のビットストリームのオフセットを提供する。
・st_size：ビットストリームのビットで表わしたサイズ。
・st_info：種別とバインディング属性を指定する。STT_BITSTREAMと標記される新規種別を用いる。この新規種別は本実施の形態の発明に特有のもので、このシンボルがＦＰＧＡビットストリームであることを意味する。バインディングはリンクの視認性と動作を決定し、STB_LOCALまたはSTB_GLOBALとすることが出来る。STB_LOCALはシンボルがシンボルの定義を含むオブジェクトファイルの外部からは見えないことを表わす。STB_GLOBALはシンボルが結合されるオブジェクトファイル全部に見えることを表わす。ビットストリーム・シンボルについて、バインディングはSTB_LOCALまたはSTB_GLOBALのどちらかである。ビットストリームは通常１つ以上のコードセクションで使用され、そのため再利用のためにライブラリへコンパイルされることがあることから、STB_GLOBALを使用する方が良い。
【００９７】
〔再配置〕
再配置はシンボル参照とシンボル定義とを連結する処理である。再配置可能なファイルは特定のシンボル定義が発見できる場所を記述するデータである再配置を含み、リンカが定義を検索できるようになる。特定の再配置演算は標準ＥＬＦファイルと同様に、ＩＳＡ毎に異なる。再配置種別はICARUS_ELF_RELおよびICARUS_ELF_RELA構造のr_INFOフィールド内部に格納されている。このような再配置種別の例として次のようなものが挙げられる：
・ICARUS_64_BIT_ADDR：アセンブリの時点で決定される６４ビット・アドレス。代表的にはeldi命令でプロセッサにロードされる。
・ICARUS_64_BIT_OFFSET：現在のＮＩＰＡＲ位置から、代表的にはラベルであるシンボルまでの相対アドレス・オフセット。br（分岐）命令で使用する。
【００９８】
以上から、本実施の形態の発明によれば、上記のICARUS ELFオブジェクト・ファイルフォーマットはソフトウェア・リンキング技術の新規利用によって、前述のように再設定可能な計算機１０を用いてプログラムが実行されるハードウェア設定と一緒にコンピュータプログラムをカプセル化することが出来る。本実施の形態の発明のシステムおよび方法は単一のソースファイル内部で複数ＩＳＡに対してコンパイルを実行でき、１つの態様では、機械語命令を実行するのに必要とされるハードウェア設定と一緒に、機械語命令とデータをカプセル化することが出来る。
【図面の簡単な説明】
【００９９】
【図１】本発明の実施の形態を示す動的に再設定可能な計算構造のハードウェア要素のブロック図である。
【図２】プロセッサ・モジュールのブロック図である。
【図３】ＦＰＧＡの再設定の一例を示すシステム構造のブロック図である。
【図４】ＦＰＧＡの再設定の一例を示すシステム構造のブロック図である。
【図５】再設定命令を含むプログラム・リストの一例を示す模式図である。
【図６】動的に再設定可能な計算環境のためのコンパイラで実行されるコンパイル方法全体のフローチャートである。
【図７】動的に再設定可能な計算環境のためのコンパイラで実行される好ましいコンパイル動作のフローチャートである。
【図８】図７のＡに続くコンパイル動作のフローチャートである。
【図９】動的に再設定可能な計算環境のためのコンパイラで実行される追加のコンパイル動作のフローチャートである。
【図１０】コンパイルシステムのブロック図である。
【図１１】プログラム状態を保存する方法のフローチャートである。
【図１２】構造化再設定の方法のフローチャートである。
【図１３】構造化再設定中のスタック内容を示す模式図である。
【図１４】従来技術によるオブジェクトファイル・フォーマットの模式図である。
【符号の説明】
【０１００】
４０１      ソースファイル
４０２      コンパイラ
４０３      オブジェクトファイル
４０４      リンカ
４０５      実行形式ファイル
４０６      ビットストリーム
【図１】
2006155632.tif 000005
【図２】
2006155632.tif 000006
【図３】
2006155632.tif 000007
【図４】
2006155632.tif 000008
【図５】
2006155632.tif 000009
【図６】
2006155632.tif 000010
【図７】
2006155632.tif 000011
【図８】
2006155632.tif 000012
【図９】
2006155632.tif 000013
【図１０】
2006155632.tif 000014
【図１１】
2006155632.tif 000015
【図１２】
2006155632.tif 000016
【図１３】
2006155632.tif 000017
【図１４】
2006155632.tif 000018