(57)【要約】本発明は、アーキテクチャリソースが命令を対応する命令セットから実行する処理アーキテクチャにおいて用いられるプログラム命令のシーケンスを発生させるコンパイルシステム及び方法に関する。リターゲッタブルコンパイラは、同一の処理アーキテクチャで少なくとも二つの命令セットを使用するコードを発生させるために使用される。一つの命令セットは小型のコード用で、一つの命令セットは並列な高パフォーマンスコード用である。小型の命令セット（小型の命令フォーマット）はアーキテクチャのサブセット（ＲＦ１１， ＡＬＵ１， Ｌ／Ｓ１， ＢＵ１）をカバーし、完全な命令セットはアーキテクチャ全体（ＲＦ１， ＵＣ１， ＵＣ２， ＲＦ２， ＵＣ３， ＵＣ４， ＲＦ３， ＵＣ５， ＵＣ６， ＲＦ４， ＵＣ７）をカバーする。少なくとも二つのサイズの異なる命令セットを用いることで、小型のコード中で操作及びレジスタを符号化するために必要なビットがより少なくなるため、コンパイラは処理された平均コード長を低減させることができる。
2004511043.tif 000002
【特許請求の範囲】
【請求項１】
アーキテクチャリソースが命令を対応する命令セットから実行する処理アーキテクチャにおいて用いられる、プログラム命令のシーケンスを発生させるコンパイル方法であって、当該方法が、
少なくとも第一の種類の命令ステートメントと第二の種類の命令ステートメントとを含む複数のソースコード命令ステートメントを有するソースファイルを入力するステップと、
少なくとも第一命令セットと第二命令セットとをそれぞれ前記第一の種類の命令ステートメントと前記第二の種類の命令ステートメントとに対して選択するステップと、
前記第一命令セットを用いて前記第一の種類の命令ステートメントをコンパイルし、前記第二命令セットを用いて前記第二の種類の命令ステートメントをコンパイルするステップとを有する方法において、
前記第一命令セット及び第二命令セットは同一の処理アーキテクチャで用いられ、
前記第二命令セットが前記第一命令セットによりサポートされるアーキテクチャリソースのサブセットのみをサポートするようにデザインされた小型の命令セットであることを特徴とする方法。
【請求項２】
前記コード命令ステートメントがＣ言語ステートメントであることを特徴とする請求項１に記載の方法。
【請求項３】
前記処理アーキテクチャがＶＬＩＷ ＤＳＰアーキテクチャであることを特徴とする請求項１又は２に記載の方法。
【請求項４】
前記第一の種類の命令ステートメントが完全なプロセッサ並列性を使用する必要のないコードであり、前記第二の命令ステートメントが並列コードであることを特徴とする請求項１乃至３のいずれか一項に記載の方法。
【請求項５】
前記アーキテクチャリソースの前記サブセットが前記処理アーキテクチャの全体のデータパスの一部に対応することを特徴とする請求項１乃至４のいずれか一項に記載の方法。
【請求項６】
前記全体のデータパスの前記一部が前記処理アーキテクチャの機能ユニットクラスタを唯一つ有することを特徴とする請求項５に記載の方法。
【請求項７】
前記コンパイルのステップが、前記第一の種類の命令ステートメントに対して第一マシン記述ファイルを使用すること及び前記第二の種類の命令ステートメントに対して第二マシン記述ファイルを使用することによって実行され、ここで、前記第二マシン記述ファイルがアーキテクチャリソースの前記サブセットの可能な操作を規定することを特徴とする請求項１乃至６のいずれか一項に記載の方法。
【請求項８】
前記小型の命令セットを用いることにより発生したプログラム命令が、前記小型の命令の命令ビットを前記第一命令セットの前記フォーマットの交付スロットの対応する位置にコピーし、
他の交付スロットをこれらの交付スロットが使用されていないことを示すビット値で満たすことにより前記コンパイルのステップの後前記第一命令セットのフォーマットに復号されることを特徴とする請求項１乃至７のいずれか一項に記載の方法。
【請求項９】
前記小型の命令セットは、操作の結果がオペランドの一つがフェッチされたのと同一のレジスタ位置に書き返されることを特徴とする請求項１乃至８のいずれか一項に記載の方法。
【請求項１０】
前記小型の命令セットは、単一のレジスタファイルのレジスタのサブセットのみが使用されるようになされることを特徴とする請求項１乃至９のいずれか一項に記載の方法。
【請求項１１】
前記小型の命令セットが、短い接近したフォーマットを有しガードつき操作を有しないか、短い接近したフォーマットと制限された数のみのガード付き操作とを有することを特徴とする請求項１乃至１０のいずれか一項に記載の方法。
【請求項１２】
アーキテクチャリソースが命令を対応する命令セットから実行する処理アーキテクチャにおいて用いられるプログラム命令のシーケンスを発生させるコンパイルシステムであって、当該システムが、
少なくとも第一の種類の命令ステートメントと第二の種類の命令ステートメントとを含む複数のソースコード命令ステートメントを有するソースファイルを入力する入力装置と、
少なくとも第一命令セットと第二命令セットとをそれぞれ前記第一の種類の命令ステートメントと前記第二の種類の命令ステートメントとに対して選択し、前記第一命令セットを用いて前記第一の種類の命令ステートメントをコンパイルし、前記第二命令セットを用いて前記第二の種類の命令ステートメントをコンパイルするための、前記入力装置から前記ソースファイルを受け取るよう結合されたコンパイラとを有するシステムにおいて、
前記第一命令セット及び第二命令セットは同一の処理アーキテクチャで用いられ、
前記第二命令セットが前記第一命令セットによりサポートされるアーキテクチャリソースのサブセットのみをサポートする小型の命令セットであることを特徴とするシステム。
【請求項１３】
前記コンパイルシステムがＶＬＩＷ ＤＳＰアーキテクチャにおいて使用されることを特徴とする請求項１２に記載のシステム。
【請求項１４】
コンピュータのメモリにロードできるコンピュータプログラムであって、前記コンピュータで前記コンピュータプログラムがランされたときに前記コンピュータが請求項１に記載のステップを実行するコンピュータプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、請求項１及び１２でそれぞれ規定されるように、アーキテクチャリソースが命令を対応する命令セットから実行する処理アーキテクチャにおいて用いられる、プログラム命令のシーケンスを発生させるコンパイル方法及びシステムに関する。更に、本発明は請求項１４に定義されるようなコンピュータプログラムに関する。
【０００２】
【従来の技術】
高パフォーマンスＤＳＰの開発は、主に処理能力の増大を指向していた。これは、より高いプロセッサクロック速度を備えるか、又は、演算ユニットを更に加えること（すなわち並列化）によって達成できる。後者のアプローチはプログラムセクション中の複数の部分タスクの並列処理に基づき、いわゆる「超長命令語（Ｖｅｒｙ Ｌｏｎｇ Ｉｎｓｔｒｕｃｔｉｏｎ Ｗｏｒｄ）」（ＶＬＩＷ）プロセッサを使用することにより達成できる。ＶＬＩＷの概念に基づいて幾つかの処理ユニットを同じチップ上に集積化することにより、超長命令語により制御されるパワフルな処理マシンが実現される。このような並列命令語は個々の処理ユニットに対する個々の命令を含む。このようなアプローチの困難な点は、アルゴリズムを、このアーキテクチャ上で並列に実行できる部分タスクに分割することである。これらの部分タスクが処理タイミングの厳密な考慮の下に個々の処理ユニットに分配されることにより、各ユニットにおいて一定のデューティレートが実現される。これはインテリジェントコンパイラにより形成できる、いわゆるスケジューリング動作により達成することができる。
【０００３】
【発明が解決しようとする課題】
デジタル信号プロセッサ（ＤＳＰ）のコードは二つのクラスに分類することができる：規則的な、計算集中型で時間クリティカルなコードと、さほど時間重視でない不規則的な管理コードとである。規則的コードはタイミング条件を満たすため通常プロセッサデータパスで可能な完全な並列性を活用しなければならない。その一方、管理コードが一般的にタイミング条件を満たすために必要なのはデータパスのサブセットのみである。
【０００４】
ＶＬＩＷコンパイラは操作を可能な限り並列にスケジュールすることによりデータパスで利用可能な並列性を活用することができる。しかし、不利な点として、ＶＬＩＷ命令のコードサイズが大きいことがある。特に、全ての命令の数の大部分（しばしば８０％）を構成する管理コードに対して完全なＶＬＩＷ命令セットを用いることは不利である。
【０００５】
米国特許公報第５９３３６４２号で、請求項１及び１２の前文で規定されたコンパイルシステム及び方法が開示されている。特に、動的に再構成できる処理ユニットについて記述されており、当該処理ユニットは、複数のハードウェアアーキテクチャの内で選択的に変更可能な内蔵ハードウェア構成を持ち、前記ハードウェアアーキテクチャのそれぞれは命令を対応する命令セットから実行する。ハードウェア構成は特定の命令セットアーキテクチャ（ＩＳＡ）の実行に、専念し、最適化されている。このＩＳＡには対応する構成データセットで特定されるような独自の内蔵ハードウェア構成が実装されている。与えられた再構成指示文の選択において、プログラム命令はその後、構成指示文が参照したビットストリームにより特定された独自の構成を介して、対応するＩＳＡに応じて実行される。コンパイラはソースコード命令ステートメントを含むソースファイルをディスク記憶装置又は他の何らかの入力装置若しくは記憶装置から読む。次に、アセンブリ言語ステートメントを作るため、コンパイラはソースコード命令ステートメントのサブセットのためのＩＳＡを識別し、識別されたＩＳＡを特定するのに適当な再構成命令を発生させ、更に、識別されたＩＳＡによる実行のための命令のサブセットをコンパイルする。しかし、このようなハードウェア構成の動的な再構成は、フィールドプログラマブルゲートアレー（ＦＰＧＡ）を採用しているアーキテクチャにおいてのみ可能であり、ハードウェアアーキテクチャの連続的な修正を必要とする。
【０００６】
よって本発明の目的は、ハードウェアアーキテクチャの大幅な修正を必要とすることなくコード効率を増加することができるコンパイル方法及びシステムを提供することである。
【０００７】
【課題を解決するための手段】
この目的は請求項１に規定されたコンパイル方法及び請求項１２に規定されたコンパイルシステムによって達成される。更に、この目的は請求項１４に規定されたコンピュータプログラムによって達成される。
【０００８】
しかるべく、二つのビュー、つまり、完全なデータパスの一部にのみアクセスするのに使用される小型の命令セットと、時間クリティカルな並列コードに必要な完全なデータパスへのアクセスを提供する完全な命令セットとが、プロセッサリソースに提供される。これによって、リターゲッタブル性の特徴が、同一の処理アーキテクチャに対して異なった命令セットを用いた命令コードを発生させるのに用いられる。二つの命令セットの違いは、命令セットのいずれかを用いて命令コードを発生させる際の、アーキテクチャリソースについてのコンパイラのビューである。このスキームにより、二つの異なった命令セットを用いて、ソースコード命令をコンパイルするのに同一のリターゲッタブルコンパイラツールを用いることができる。
【０００９】
このコード命令ステートメントはＣ言語ステートメントであってよい。この場合、Ｃ言語に必要な機能ユニットのみが制御可能でありさえすればよい。この結果、機能ユニットクラスタのための演算コードビット（ｏｐｃｏｄｅ ｂｉｔｓ）が節約できる。更に、処理アーキテクチャはＶＬＩＷ ＤＳＰアーキテクチャであってよい。ＶＬＩＷ命令フォーマットが複数の交付スロットの連結で構成されていることにより、小型の命令セットと第一命令セットとの間で単純な変換が達成できる。
【００１０】
本発明の好適な開発例によれば、第一の種類の命令ステートメントは完全なプロセッサ並列性を使用する必要のないコードであってよく、第二の種類の命令ステートメントは並列コードであってよい。よって、時間クリティカルな並列コードと管理コードとの間で変更があるたびに二つの命令セットの間でスイッチングが行われることが可能である。コンパイラは、小さい方の命令セットのコードサイズの利点を活用し、大きい方の命令セットのパフォーマンスの利点を活用するために、これらの二つの命令セットを取り扱う。
【００１１】
他の好適な開発例によれば、アーキテクチャリソースのサブセットは処理アーキテクチャの全体のデータパスの一部と対応する。特に、全体のデータパスの一部は処理アーキテクチャの機能ユニットクラスタを唯一つ有することができる。この場合、第二のすなわち小型の命令セットのＶＬＩＷフォーマットへの単純な復号は、単に、小型の命令の命令ビットを対応する機能ユニットの交付スロット（ｉｓｓｕｅ ｓｌｏｔ）にコピーすることによって達成することができる。
【００１２】
他の好適な開発例によれば、コンパイルのステップは第一の種類の命令ステートメントに対して第一マシン記述ファイルを使用すること及び第二の種類の命令ステートメントに対して第二マシン記述ファイルを使用することによって実行され、ここで、前記第二マシン記述ファイルはアーキテクチャリソースのサブセットの可能な操作を規定する。小型の命令セットは完全な命令セットが見るデータパスのサブセットだけをビューすることから、これを追加のマシン記述ファイルで表現することは単純である。この結果、二つの異なるマシン記述ファイルを使用するアーキテクチャの二つのビューのためのアセンブリコードを発生するのに単一のリターゲッタブルコンパイラが使用できる。
【００１３】
他の更に好適な開発例によれば、小型の命令セットを用いることにより発生したプログラム命令は、小型の命令の命令ビットを第一命令セットのフォーマットの交付スロットの対応する位置にコピーし、他の交付スロットをこれらの交付スロットは使用されていないことを示すビット値で満たすことによりコンパイルのステップの後第一命令セットのフォーマットに復号される。これにより、小型の命令を第一命令セットのフォーマットに復号するための単純な復号操作が達成可能である。好適には、第一命令セットはＶＬＩＷ命令セットであってよい。
【００１４】
他の更に好適な開発例によれば、小型の命令セットは、操作の結果がオペランドの一つがフェッチされてきたのと同一のレジスタ位置に書き返されるように適用される。この「破壊的」レジスタオペランドの使用は、多くの命令に対して特定されなくてはならないオペランド／結果アドレスが三個でなく二個のみであるため、レジスタアドレスビットが節約されるという利点につながる。
【００１５】
他の更に好適な開発例によれば、小型の命令セットは単一のレジスタファイルのレジスタサブセットのみが使用されるように適応させることができる。この結果、小型の命令に必要なレジスタアドレスビットの数は低減することができ、これにより小型の命令セットの命令幅は低減される。好適には、小型の命令セットは短い接近した（ｉｍｍｅｄｉａｔｅ）フォーマットと少なくとも制限された数のガード付き操作とを有するように適応される。これらの手段は小型の命令セットの命令幅の更なる低減につながる。
【００１６】
以下で、本発明の好適な実施例を、添付の図を参照して説明する。
【００１７】
【発明の実施の形態】
ここで、好適な実施例を、分割したレジスタファイル付きのデュアル命令セットＶＬＩＷプロセッサのデータパスに基づいて説明する。
【００１８】
図１はＤＳＰアーキテクチャ中のデータパスの基本ブロック図を示し、ここでは同一のデータパスのときの二つの異なったマシンビューが示されている。小型のビュー（実線）ではデータパスの小さな一部分のみ用いられ、完全なビューすなわち並行ビューでは全体のデータパス（実線及び破線）が用いられている。
【００１９】
図１によれば、アーキテクチャは七つの機能ユニットクラスタＵＣ１からＵＣ７を有し、ここで各機能ユニットクラスタは、パラメータ化可能な数のオペランド入力ポート及び結果出力ポートを持つ少なくとも一つの機能ユニットを有する。図１では簡単のため、機能ユニットクラスタＵＣ１からＵＣ７のそれぞれに対して二つのオペランド入力ポートと一つの結果出力ポートとが示されている。どの機能ユニットにも操作タイプのセットを関連付けることができる。このセットは機能ユニットが実行できる特定の操作を表す。機能ユニットクラスタ及び機能ユニットに与えられる命令又は演算コードを介して、操作タイプセットから操作を選択することができる。オペランドサンプリング時間が異なる操作及び、結果作成時間が異なる操作は、機能ユニット入力／出力ポートを共有することができ、よって機能ユニットクラスタ入力／出力ポートも共有することができる。ポートのこの共有により起こり得るリソース衝突はコンパイラによって解決される必要がある。従ってコンパイラ中では、どの操作タイプについても、時間に対する異なったリソースの使用が表される一つ以上のリソース使用パターンが関連付けられる。コンパイラは衝突のない操作スケジュールを構成するためこれらのパターンを考慮に入れる。コンパイラから見た場合、操作タイプが同一の機能ユニットに属するか属さないかということは関係ない。図１では、第一機能ユニットクラスタＵＣ１は演算操作及び論理操作を行うための第一演算論理ユニットＡＬＵ１と、ロード操作及び記憶操作を行うための第一ロード／記憶ユニットＬ／Ｓ１と、分岐操作を行うのに必要な第一分岐ユニットＢＵ１と、乗算操作を行う乗算ユニットＭＵＬ１とを有する。第二機能ユニットクラスタＵＣ２は三つの機能ユニット、つまり、第二演算論理ユニットＡＬＵ２と、第一シフトユニットＳＨＵ１と、第二分岐ユニットＢＵ２とを有する。更に、第三機能ユニットクラスタＵＣ３は三つの機能ユニット、つまり、第三演算論理ユニットＡＬＵ３と、第二ロード／記憶ユニットＬ／Ｓ２と、第三分岐ユニットＢＵ３とを有し、第四機能ユニットクラスタＵＣ４は二つの機能ユニット、つまり、第四演算論理ユニットＡＬＵ４と第二シフトユニットＳＨＵ２とを有し、第五機能ユニットクラスタＵＣ５は一つの機能ユニット、つまり、ＤＳＰアルゴリズムのフィルタ操作を行うための第一フィルタセクションＦＩＬ１を有し、第六機能ユニットクラスタＵＣ６は二つの機能ユニット、つまり、第二フィルタセクションＦＩＬ２ともう一つの分岐ユニットＢＵＴとを有し、更に、第七機能ユニットクラスタＵＣ７は一つの機能ユニット、つまり、特別な種類のフィルタとしてバイクワッドフィルタをサポートするバイクワッドユニットＢｉＱを有する。
【００２０】
各機能ユニットクラスタは、プロセッサコアの操作交付スロットに対応し、パラメータ化可能な数の機能ユニットを含む。各サイクルにおいて、多くとも一つの操作をクラスタ中の機能ユニットの一つにおいて開始することができる。機能ユニットで操作が開始されると、その機能ユニットは入力ポートからその操作のためのオペランドをサンプルする。ハードウェアの複雑性を低減するため、機能ユニットクラスタ中の全ての機能ユニットは入力ポートを共有すると考える。入力ポートで衝突が起きない限り機能ユニットクラスタで新しい操作を開始することができる。もし機能ユニットの出力ポートが共有されていたら、コンパイラは衝突が起こるのを防止しなくてはならず、操作の開始時間を決定するときに、起こり得る衝突を考慮に入れるべきである。代替の解決策は、クラスタの出力において結果を同時に出せるようにするということである。この場合、待ち時間の異なる機能ユニットは出力ポートを共有できず、これは、必要とされる機能ユニットクラスタ出力の数が、一回のサイクルでクラスタが出せる結果の数の最大値と等しくなければならないということを意味する。アプリケーションの要求に応じて、共有の有無の何れかがプロセッサアーキテクチャに適用できる。
【００２１】
図１によれば、第一機能ユニットクラスタＵＣ１と第二機能ユニットクラスタＵＣ２とは第一レジスタファイルＲＦ１を共有し、第三機能ユニットクラスタＵＣ３と第四機能ユニットクラスタＵＣ４とは第二レジスタファイルＲＦ２を共有し、第五機能ユニットクラスタＵＣ５と第六機能ユニットクラスタＵＣ６とは第三レジスタファイルＲＦ３を共有し、更に、第七ユニットクラスタＵＣ７は第四レジスタファイルＲＦ４と結合されている。レジスタファイルＲＦ１、ＲＦ２、ＲＦ３及びＲＦ４のそれぞれは、変数の値が保存できる多くの物理レジスタを含む。これらの物理レジスタはレジスタファイル中に静的ランダムアクセスレジスタとして構成することができる、つまり、独自の固定したレジスタインデックスにより回転レジスタとして指名された物理レジスタとして、つまり、レジスタインデックスオフセットをレジスタが所属する回転バッファのサイズのグローバルレジスタインデックスベースモジュロに加えることによりブロードキャスト（又はマルチキャスト）レジスタとして指名された物理レジスタとして、つまり、ＦＩＦＯ（最初に入ったものが最初に出る）レジスタとして、レジスタアドレスを他のレジスタファイル中のブロードキャストレジスタと共有する静的ランダムアクセスレジスタとして、つまり、共通レジスタインデックスにより、異なった物理レジスタから構成される全体のＦＩＦＯバッファとして指名された物理レジスタ、又はスタックレジスタとして、つまり、共通レジスタインデックスにより、異なった物理レジスタから構成される全体のスタックバッファとして指名された物理レジスタとして、構成することができる。レジスタファイルＲＦ１、ＲＦ２、ＲＦ３及びＲＦ４のそれぞれも、上記の構成タイプのいずれの組み合わせでも含むことができる。各レジスタファイルは書き込みポートと読み込みポートとを持ち、ここで、各書き込みポートは、ファイル中の一つ又はグループのレジスタを選択する、書き込みを可能にする入力及び書き込みレジスタインデックス入力、並びに結果データがその書き込みデータ入力を介してレジスタファイルに書き込まれる書き込みデータ入力により構成されている。
【００２２】
図１によるデュアル命令セットアーキテクチャでは、二つの命令セットが使用される。コア及びコンパイラの複雑性を増加させないために、両方の命令セットはデータパスリソースを共有し、同一の基本命令復号器を使用し、更に同一のコンパイラツールを使用する。二つの命令セットの違いは、命令セットのいずれかを使用してコードを発生させるときにアーキテクチャリソースに対してコンパイラが持つビューにある。このスキームにより、二つの異なった命令セットを用いてコードをコンパイルするのに同一のリターゲッタブルコンパイラツールが使用できる。特に、完全なプロセッサ並列性を必要としないコード、例えば管理コードに対しては、実線のブロックにより示される、完全なデータパスの一部にのみアクセスするようにされた小型の命令セットが使用される。これは第一機能ユニットクラスタＵＣ１、特に機能ユニットＡＬＵ１、Ｌ／Ｓ１及びＢＵ１のみであり、レジスタファイルのＲＦ１’の部分は小型の命令セット、つまり管理コードによって見ること又は使用が可能である。第二命令セットは時間クリティカルな並列コードにとって完全な命令セットであり、ここで全ての機能ユニット及びレジスタファイルは時間クリティカルな並列コードにより見られる又は使用される。極端な場合、時間クリティカルなコードと管理コードとの間でスイッチが起こる度にこれらの二つの命令セットの間で細やかな（ｆｉｎｅ−ｇｒａｉｎｅｄ ｌｅｖｅｌでの）スイッチングが必要である。実際上は、このようなレベルのスイッチングは機能レベルであり得る、つまり、基本ブロック又は決定ツリーレベルであり得る。コンパイラコードの、再利用、マーケットに出るまでの時間の短縮、及びより良い保全性のためには単一のコンパイラが望ましい。このような単一のコンパイラは、小型の命令セットのコードサイズの利点と大きい命令セットのパフォーマンスの利点とを活用するためこれらの二つの命令セットを使用できるように都合される。よって、好適な実施例によれば、リターゲッタブル性の特徴は、同一のプロセッサアーキテクチャの異なった命令セットを用いたアセンブリコードを発生させるのに使用される。
【００２３】
図２は好適な実施例によるリターゲッタブルコンパイラの基本ブロック図を示す。プロセッサアーキテクチャは、 パラメータ化可能な数の機能ユニットクラスタ、クラスタ毎の機能ユニット、バス、レジスタファイル及びレジスタファイル構成のテンプレートとして都合される。これらのパラメータに効率的に対処できるためには、 ハードウェア説明はパラメータ化可能でなくてはならず、且つ、ソフトウェア開発環境はリターゲッタブルでなくてはならない。ハードウェアアーキテクチャとソフトウェア開発ツールとの間の橋として， 完全なデータパス及び低減されたデータパスのために第一マシン記述ファイル５１及び第二マシン記述ファイル５２ がそれぞれ提供される。これらのファイルは考慮されているアーキテクチャ例についての情報を含む。第一マシン記述ファイル５１及び第二マシン記述ファイル５２は、バス、ポートその他をモデル化することが可能な、リソースの抽象的な概念によるカスタム操作のリソース使用を特定する。
【００２４】
図２によれば、コンパイラは入力高級言語（例えばＣ／Ｃ＋＋ プログラム）を中間フォーマットに翻訳するコアコンパイラ１を有する。コアコンパイラはスキャナ、パーサ及びセマンティックチェッカを含む前端から構成される。更に、コアコンパイラ１は多くの最適化アルゴリズム及びコード選択器を実施する。コアコンパイラの最適化はターゲットアーキテクチャに多くの部分影響されない。これらはループ展開、機能インライン、エイリアス解析、定数畳み込み、定数伝播、共通部分式消去及びグローバルコード運動を有することができる。コアコンパイラ１はあまり規則的でない管理コードをグローバルスケジューラ ３に供給し、時間クリティカルな規則的な、ループコード又は並列コードをループスケジューラ２に供給するように都合することができる。グローバルスケジューラ３は、典型的には時間重視でなく限られた並列性を持つか又は全く並列性を持たない、あまり規則的でない管理コードをスケジュールする。管理コードはしばしば開始タスク又は制御タスク用のコードである。ループスケジューラ２ は、ＤＳＰアプリケーションで典型的に現れる時間クリティカルな規則的な、ループコード又は並列コードをスケジュールするように都合される。このコードは典型的には多くの並列性を含む。コアコンパイラ１、ループスケジューラ２及びグローバルスケジューラ ３の操作はそれぞれ第一マシン記述ファイル５１及び 第二マシン記述ファイル５２から得られた情報を基本に行われる。次に、アセンブリコードの最後のシーケンスがループスケジューラ２及びグローバルスケジューラ３の出力から選択器４により選択される。
【００２５】
コンパイル操作中には、コアコンパイラ１は、ループコード又は並列コードが完全な命令セットを用いてコンパイルされるときは、完全なデータパスをカバーする第一マシン記述ファイル５１を選択し、管理コードが小型の命令セットを用いてコンパイルされるときは、低減されたデータパスをカバーする第二マシン記述ファイル５２を選択する。グローバルスケジューラ３はコアコンパイラ１の小型の出力を受信し、第二マシン記述ファイル５２及び小型の命令セットに基づいて小型の操作を小型の命令にスケジュールする。第二マシン記述ファイル５２のパーシングを含む初期化後、グローバルスケジューラ３は入力ファイルからの決定ツリーのパーシングを開始してそれらをスケジュールし、アセンブリ出力ファイルに結果を書き込む。
【００２６】
ＤＳＰ計算の周期的な特徴から、実際の信号処理が行われるＤＳＰコード中でしばしばループが起こる。これらのループは通常規則的な形をしており時間重視と判断される。これらのＤＳＰループはループスケジューラ２によりスケジュールされる。一般的には、ＤＳＰループは高いスループットを要求する。従って、ループスケジューラ２は第一マシン記述ファイル５１及び完全な命令セットを使用することで、データパス中で完全に利用可能な並列性を活用しようとする。ループスケジューラ２はリストスケジューラがするのと同様に決定を行うかもしれないが、偽の決定の下にバックトラックする可能性がある。スケジューリング前及びスケジューリング中には、制約条件解析をキーテクニックとして用いてスケジューラのためのサーチスペースを低減することができる。制約条件解析は可能な解を排除することなくスケジューラのサーチスペースを効果的に低減させる。制約条件解析は、実行不可能な結果につながるスケジュール決定を排除する。しかし、制約条件解析が、最適なスケジュールされたＤＳＰループを発生させるという課題に対応する唯一の方法というわけではない。ＤＳＰループをスケジュールするという課題に対応するのに、反復モジュロスケジューリング、整数線形計画法（ＩＬＰ）又はヒューリスティックス（ｈｅｕｒｉｓｔｉｃｓ）などの他の技術を採用することができる。
【００２７】
グローバルスケジューラ３も、時間クリティカルな、規則性のない又は規則性の低いコードをスケジュールすることができるということに注意する。この場合、グローバルスケジューラ３はコンパイル時間推測を行うことにより命令レベル並列性を出すことが可能である。これにより、グローバルスケジューラ３は並列スケジュールを作ることが可能である。よって、一般的に、グローバルスケジューラ３及びループスケジューラ２の両方とも第一マシン記述ファイル５１及び第二マシン記述ファイル５２の両方にアクセスすることが可能である。
【００２８】
その次に、選択器４は正しいアセンブリコードのシーケンスを得るためにループスケジューラ２及びグローバルスケジューラ３のアセンブリ出力ファイルからそれぞれのアセンブリコードを選択する。
【００２９】
よって、全ての命令セットはデータパスリソース及びコンパイラツールを共有する。完全な命令セット又は並列命令セットでは、全てのハードウェアリソースはコンパイラにより見られ、使用されることが可能である。小型の命令セットでは、第一機能ユニットクラスタＵＣ１の機能ユニットＡＬＵ１、Ｌ／Ｓ１及びＢＵ１のみが見える。更に、第一レジスタファイルＲＦ１のＲＦ１’の部分のみが見える。第一レジスタファイルＲＦ１中のスタックバッファを用い、命令セットをデータアクセスに対して少なくとも一部はスタックベースにしておくことにより追加の命令ビットを保存することができる。小型の命令セットの最低限の条件は、高級言語、例えばＣ／Ｃ＋＋言語をコンパイルするのに必要な全ての操作をサポートするということである。機能ユニットＡＬＵ１、Ｌ／Ｓ１及びＢＵ１はこの最低限の条件を満たすのに十分である。
【００３０】
唯一つの機能ユニットクラスタＵＣ１しか用いられていないという事実から、並列命令セット中ではＶＬ２ＩＷ命令（可変長ＶＬＩＷ命令）には命令ヘッダは必要でない。更に、第一機能ユニットクラスタＵＣ１の機能ユニットのサブセットしか用いられていないため、機能ユニットクラスタ用に演算コードビットを節約することができる。第一レジスタファイルＲＦ１のレジスタのサブセットのみがアドレス可能であればよいという事実から、命令コードビットの更なる低減が達成可能である。これにより小型の命令中で必要なレジスタアドレスビットの数が低減される。
【００３１】
命令中で短い又はより短い中間フォーマットを用いること及び、ガード付きオペランドをアドレスするのに必要なビットが節約できるようにガード付き操作を使用しないか使用しても制限された数の操作を使用することにより、小型の命令の命令幅は更に低減できる。更に、オペランドの一つが消費されたか又はフェッチされてきたのと同一のレジスタ位置へ操作の結果がまた書き込みされることを意味する「破壊的」レジスタオペランドを使用することによりレジスタアドレスビットは節約できる。これにより、三個ではなく二個のオペランド／結果アドレスしか特定の必要がなくなる。
【００３２】
小型の命令セットは機能ユニットクラスタＵＣ１からＵＣ７に適用されるＶＬＩＷフォーマットへの復号が簡単な方法で行われるようにデザインできる。図３は小型の命令フォーマット及び当該小型の命令フォーマットのＶＬＩＷフォーマットへの復号を示す。小型の命令フォーマットはガード付き操作をサポートしておらず、破壊的オペランドを使用する。特には、これは１４ビットで構成され、その内４ビットがソースレジスタｓｒｃをアドレスするのに使用され、４ビットが「破壊的」レジスタｓｒｃｄｓｔをアドレスするのに使用され、６ビットが演算コードｏｐｃ用に使用される。完全な命令フォーマットは、各機能ユニットクラスタがＣ個の交付スロットを有するＶＬＩＷフォーマットであり、その命令により使用されるべき有効な機能ユニットクラスタを示す操作有効フラグの初期フィールドである。図１に示された場合では、ＶＬＩＷフォーマットは交付スロット１からＣを有する。各交付スロットは、一定のＴＲＵＥ値ｇｓｒｃに使用される５ビットのフィールド、ソースレジスタをアドレスするのに使用される６ビットのフィールド、もう一つのソースレジスタをアドレスするのに使用される６ビットのフィールド、演算コード用に使用される７ビットのフィールド、及び宛先レジスタをアドレスするのに使用される７ビットのフィールドから成る。図３によれば、単純な復号操作は小型の命令フォーマットのソースレジスタｓｒｃのアドレスビットをＶＬＩＷフォーマットのソースレジスタのアドレスフィールドへコピーすることと、小型の命令フォーマットの「破壊的」レジスタｓｒｃｄｓｔのアドレスビットをＶＬＩＷフォーマットのもう一つのソースアドレスフィールド及び宛先レジスタのアドレスフィールドへコピーすることと、小型の命令フォーマットの演算コードをＶＬＩＷフォーマットの演算コードフィールドへコピーすることとにより達成できる。残りのビット位置は０のビットで満たされている。他の交付スロットが小型の命令フォーマットで使用されていないことから、それらはそれぞれの機能ユニットクラスタの無演算関数（ＮＯＰ）を示すように満たされる。これはＶＬＩＷフォーマットの最初に操作有効フラグでも示されている。
【００３３】
図４は好適な実施例によるリターゲッタブルコンパイラ用のコンパイル方法の原理的流れ図を示す。最初に、ステップＳ１００で、コアコンパイラ１が高級言語のソースファイルを読み込む。高級言語の中間フォーマットへの翻訳中に、コアコンパイラ１はソースコードのタイプが管理コードか時間クリティカルな並列コードかを検知する（ステップＳ１０１）。検知されたソースコードのタイプに基づいて、コアコンパイラは第一マシン記述ファイル５１を選んで完全な命令セットを用いるか、第二マシン記述ファイル５２を選んで小型の命令セットを用いる（ステップＳ１０２）。選択操作に基づいて、中間フォーマットが、対応するアセンブリコードのシーケンスを発生させるループスケジューラ２又はグローバルスケジューラ３に供給される（ステップＳ１０３）。次に、アセンブリコードの最後のシーケンスが、シーケンスの順番に基づいてループスケジューラ２及びグローバルスケジューラ３から得られたアセンブリコードを結合させる選択器４から得られる。
【００３４】
よって、デュアル命令セットコンセプトをサポートするのに必要なアーキテクチャ又はコンパイラの修正は小さくてよい。しかし、小型の命令セットを用いることで、操作及びレジスタを符号化するのに必要なビットはより少なくなるため、コンパイラはより小さな命令コードを発生させることができる。これにより、最適化されたアセンブリコードが発生される。本発明は好適な実施例と併せて説明したが、当業者には多くの更なる代替例、変形例及び変化例が前記の説明から明らかであろう。
特に、本発明は複数の機能ユニット又は機能ユニットクラスタを有するいかなる並列ＤＳＰアーキテクチャにも適用することができる。更に、本発明は処理リソースが特定の命令セットを規定することにより制限できるいかなる種類の処理アーキテクチャにも適用可能である。更に本発明は、本発明でカバーしたコンパイルのステップを実行するようにコンピュータを適切に適応させられるいかなるコンピュータプログラム（対応するプログラムが保存されたレコードキャリア又は通信ネットワークからダウンロードできるソフトウェアなど）でもカバーするように意図されている。
【００３５】
よって、ここで説明した本発明は、添付した請求項の範囲内の全てのこのような代替例、変形例、適用例及び変化例を包含するよう意図されている。
【図面の簡単な説明】
【図１】好適な実施例によるデュアル命令セットＤＳＰアーキテクチャ中のデータパスを示す基本図。
【図２】好適な実施例によるリターゲッタブルコンパイラの基本ブロック図。
【図３】好適な実施例による小型の命令のＶＬＩＷフォーマットへの復号の例を示す図。
【図４】好適な実施例によるリターゲッタブルコンパイラのためのコンパイル方法の原理的流れ図。
【図２】
2004511043.tif 000003
【図３】
2004511043.tif 000004
【図４】
2004511043.tif 000005
【国際公開パンフレット】
2004511043.tif 000006
2004511043.tif 000007
2004511043.tif 000008
2004511043.tif 000009
2004511043.tif 000010
2004511043.tif 000011
2004511043.tif 000012
2004511043.tif 000013
2004511043.tif 000014
2004511043.tif 000015
2004511043.tif 000016
2004511043.tif 000017
2004511043.tif 000018
2004511043.tif 000019
2004511043.tif 000020
2004511043.tif 000021
2004511043.tif 000022