(57)【特許請求の範囲】
【請求項１】
VLIWプロセッサのための命令をコンパイルする方法であって、前記VLIWプロセッサは複数の群の機能ユニットを有し、前記機能ユニットの各々は前記複数の群のうちの１つの群のみに関連付けられており、前記VLIWプロセッサは前記複数の群のうちの少なくとも２つの群に関連付けられている少なくとも１つのスーパー機能ユニットを更に有し、各超長命令ワードは、前記複数の群の各々に対して、多くても１つの特定のコマンドを含むことが許されており、前記スーパー機能ユニットのためのコマンドを含んでいる各超長命令ワードは、前記少なくとも２つの群における前記機能ユニットの何れに対する如何なるコマンドも有さない、方法において、
前記機能ユニットにより実行されるべき一群のコマンドを受信し、前記超長命令ワードに対する前記コマンドの整合した割り付けを検索し、前記コマンドのうちの前記スーパー機能ユニットに対する第１のコマンドと、少なくとも、前記コマンドのうちの前記少なくとも２つの群における前記機能ユニットのいずれか１つに対する第２のコマンドとを発見した場合、前記第１のコマンドと前記第２のコマンドとを、前記超長命令ワードのうちの別々の超長命令ワードに割り付ける、
ＶＬＩＷプロセッサに対する命令をコンパイルする方法。
【請求項２】
VLIWプロセッサのための命令をコンパイルする方法を実行するプログラムを有するマシン読み込み可能な媒体であって、
各命令が超長命令ワードを有し、前記VLIWプロセッサは複数の群の機能ユニットを有し、前記機能ユニットの各々は前記複数の群のうちの１つの群のみに関連付けられており、前記VLIWプロセッサは前記複数の群のうちの少なくとも２つの群に関連付けられている少なくとも１つのスーパー機能ユニットを更に有し、各超長命令ワードは、前記複数の群の各々に対して、多くても１つの特定のコマンドを含むことが許されており、前記スーパー機能ユニットのためのコマンドを含んでいる各超長命令ワードは、前記少なくとも２つの群における前記機能ユニットの何れに対する如何なるコマンドも含むことが可能にされていない、方法において、
前記機能ユニットにより実行されるべき一群のコマンドを受信し、前記超長命令ワードに対する前記コマンドの整合した割り付けを検索し、前記コマンドのうちの前記スーパー機能ユニットに対する第１のコマンドと、少なくとも、前記コマンドのうちの前記少なくとも２つの群における前記機能ユニットのいずれか１つに対する第２のコマンドとを発見した場合、前記第１のコマンドと前記第２のコマンドとを、前記超長命令ワードのうちの別々の超長命令ワードに割り付ける方法を実行するプログラムを有するマシン読み込み可能な媒体。
【発明の詳細な説明】
技術分野
本発明は、VLIW（Very Large Instruction Word）プロセッサに関する。本発明は、このようなプロセッサに対するプログラム、そしてこのようなプログラムのコンパイルにも関する。
背景技術
VLIWプロセッサの例は、フィリップスエレクトロニクス社のTM-1000プロセッサ（TriMedia）である。このプロセッサは、例えば、欧州特許出願EP 605927（現在は放棄されている米国出願No.07/999,080、PHA 21777のファミリ）に記載されている。VLIWプロセッサの場合、インストラクションの並列実行は、単一の長いインストラクションワード（超長命令ワード）において多重基本マシンコマンドを結合することによって得られる。通常、このような各基本コマンドは、RISC演算を表す。クロックサイクルごとに、長いインストラクションワードが、ロックステップ方式で作動する並列配列の機能ユニットに供給される。コマンド内の各コマンドは、ユニット内の関連するユニットに供給される。通常、ユニットは、パイプライン実行を行う。
TM-1000のプロセッサは、非常に長いインストラクションワード発行レジスタの各発行スロットに、各々、コマンドを並列に発生させる。各発行スロットは、機能ユニットの各グループと、レジスタファイルへの２つの読み込みポートと１つの書き込みポートとに関連している。特定のコマンドは、特定の発行スロットに関連するグループの機能ユニットの中の特定のユニットに向けられている。コマンドは、通常、演算コード、２つのソースオペランド定義および結果オペランド定義を有する。ソースオペランド定義および結果オペランド定義は、レジスタファイルのレジスタを参照する。コマンドの実行中に、オペランドを取り込むために、取り込んだ信号を発行スロットに関連する続出しポートに供給することによって、特定の発行スロットからソースオペランドが読み込まれる。典型的には、機能ユニットは、これらの続出しポートからオペランドを受け取って、演算コードに従ってコマンドを実行し、そして特定の発行スロットに関連する書き込みポートを介して結果をレジスタファイルに書き戻す。これに代えて、コマンドは、２つに満たないオペランドを使用しおよび／またはレジスタファイルに対し結果を生成させないようにすることもできる。
VLIWプロセッサに対する典型的プログラムは、機能ユニットに対する一組のコマンドに変換される。コンパイル時間スケジューラは、これらのコマンドを長いインストラクションワードに分布させる。スケジューラは、並行性を最適化することによって、プログラムを実行するために必要な時間を最小にしようとする。スケジューラは、同じインストラクションに割り当てられているコマンドを並列にかつデータ依存制約の下で実行させることができる制約の下に、コマンドをインストラクションワードに結合させる。
発明の開示
本発明の目的のうちの１つは、そのアーキテクチャが、従来のVLIWプロセッサに関するプログラムの実行に必要なインストラクションワードの数を減らすことを可能にするVLIWプログラムを提供することである。
このために、本発明のVLIWプロセッサは、第一および第二の非常に長いインストラクションワードをシーケンシャルに供給するインストラクション発行ポートを有する。ワードの各一つは、コマンドの各連結に配布されたフィールドの各順序づけられた連結を有する。第一ワードは、フィールド内の第一フィールドを有するコマンド内の第一コマンドおよびフィールド内の第二フィールドを有するコマンド内の第二コマンドを有する。第二ワードは、フィールド内の第一および第二フィールドを有するコマンド内の第三コマンドを有する。このプロセッサは、第一コマンドを処理する発行ポートに結合されている第一機能ユニットと、ロックステップで第一ユニットと共に第二コマンドを処理する発行ポートに結合されている第二機能ユニットとを有する。このプロセッサは、第三コマンドを処理する発行ポートに結合されている第三機能ユニットを有する。
本発明は、インストラクション発行ポートの発行スロットへの柔軟性に富む分割に基づく。このことは、例えば、オペランドに対して異なった数のフィールドを使用する異なったコマンドを使用することが可能であることを意味する。また、異なったコマンドは、異なったサイズの演算コードを有することができる。コマンドを処理する回路の専門資源に関連するフィールド、ここでは、機能ユニットは、異なった発行スロットに関連する異なったグループからの機能ユニットと協力して使用することができる。これは、固定された発行スロットに分割されるインストラクション発行ポート内の場合よりもより複雑なコマンドの使用を許す。最も複雑なコマンドを処理するために、発行スロット内により多くのスペースを確保する必要は無い。従来のVLIWプロセッサの場合、このような複雑なコマンドは、多重インストラクションワードの順序にあるいくつかのより単純なコマンドを使用して、実行させなければならない。それゆえに、本発明は、従来のVLIWプロセッサにより可能である場合よりより速くプログラムを実行することを可能とする。何故ならば、プログラムを完了させるために必要なインストラクションワードがより少なくて済むからである。
例えば、TM-1000のようなマシンの場合、３つのオペランドからの結果を計算する演算（例えば、平均演算）は、少なくとも２つの逐次的に実行されるインストラクションを必要とし、したがって、少なくとも２つのコマンドを必要とするでろう。３つ以上のオペランドに対するフィールドをコマンドに提供することによって、１つのコマンドを使用して演算を実行できる。さらに、これらのフィールドが柔軟にコマンドに割り当てられるので、これは、全てのコマンドに対するオペランドに対して３つ以上のフィールドを確保することなく、実現させることができる。
本発明の一実施例の場合、第三コマンドは、第一および第二コマンドの実行に使われる全てのフィールドを含む。そこで、例えば、第一および第二の固定されたサイズの発行スロットが、それぞれ第一および第二コマンドを発行させるのに使われる場合、第三コマンドは、第一および第二発行スロットの組合せを使用できる。これは、スケジューリングを単純化する。
各コマンド、すなわち、各発行スロットの異なったフィールドは、オペランドレジスタの読み込まれるアドレスを表す、または書き込む結果レジスタのアドレスを表す、または演算コードを表すと言うような、固定された機能性を、各々、有することができる。これらの異なったフィールドは、読出しポートまたは演算コードデコーダのような、インストラクション処理回路の固定された部分に関連するであろう。この場合、第三のインストラクションは、オペランドの数を二回および／または結果の数を二回および／または倍のサイズの演算コードを使用できる。発行スロットの各一つが、機能ユニットの各グループに関連する場合、第三のコマンドを実行する機能ユニットは、同時に、両方のグループに属する。
VLIWプログラム内の１つのコマンドによって使われるフィールドの組合せは、発行スロットに対応する。典型的には、通常の発行スロットのサイズは、第一および第二のコマンド、そして（演算コードフィールド、２つの入力レジスタ選択フィールドおよび結果レジスタ選択フィールドを含む発行スロットを使用する）通常のコマンドに対して、同じである。この場合、本実施例における第三のコマンドに使われるフィールドは、通常の発行スロットの数（整数）をカバーする。VLIWプロセッサプログラムにおいて、コマンドに対し使われる発行スロットは、不十分な資源である。プログラムのコマンドに使用される発行スロットの数（各インストラクションで使われる発行スロットの各数の合計）が大きくなるにつれて、プログラムは遅くなる。したがって、第三のコマンドに対して使われる通常の発行スロットの数は、通常のコマンドのいかなる組合せも有する第三のコマンドと同じ機能を実現させるために必要な通常の発行スロットの数より小さいことが好ましい。この場合だけ、第三コマンドは、不十分な資源である発行スロットを節約する。
さらに、通常のコマンドを使用する第三コマンドの実施は、これらの通常のコマンドの中間結果を、（例えば、64ビット、または８ビットの８要素のベクトルとして）通常のレジスタサイズに対応する精度で表さなければならないことも意味する。多くの通常のコマンドの効果を結合する第三コマンドを使用することによって、必要であれば、（例えば、イメージまたは音声信号の）多くの信号処理アプリケーションの場合がこれにあてはまるが、中間結果をより高い精度で表すことができる。
各インストラクションは、各発行スロットが、コマンドを処理することができる一つ以上の機能ユニットに関連する、決まった数の発行スロットから成り立つのが好ましい。異なった機能ユニットが、コマンドの異なったグループに設けられている。機能ユニットは、発行スロットに関連する。インストラクションが発行されると、発行スロットからのコマンドが、この発行スロットに関連する機能ユニットに供給される。第一および第二機能ユニットが、第一および第二コマンドをそれぞれ発行する発行スロットに関連させて、設けられ、そして第三機能ユニットが、第一および第二発行スロットに関連するように設けられる。従って、第一および第二コマンドは、異なった機能ユニットに対して発行される。第三コマンドの場合、第三機能ユニットは、それが第一および第二発行スロットの両方を使用すべきであることを認識し、かつ第一および第二機能ユニットは、それらが第一および第二発行スロットを使用してはならないことを認識する。第三機能ユニットの起動は、第一および第二発行スロットのうちの１つ内の演算コードフィールドによって、トリガされる。この演算コードフィールドは、第三機能ユニットが、両方の第一および第二発行スロットにおいて、参照されるオペランドをどう処理するかを制御するのが望ましい。第一および第二発行スロットのうちの１つが、他の発行スロットを使用することなく、自分自身に実行することが出来る通常のコマンドしかを含まず、そして他の各発行スロットが、オペランド、条件つきの実行等の後処理または前処理のような変更がその通常のコマンドに有ることを合図する場合には、上記制御は必要が無い。これは、第三の機能ユニットに対するコマンドの可能な機能を、通常のコマンド（１つの発行スロットを用いて実行することが出来る）とこれらのコマンドの変更として利用できるこれらのコマンドのみに制限するであろう。このような制限は、マルチメディアの信号処理アプリケーションに対する多くの役に立つコマンドを除外する。
本発明は、インストラクションに対するフィールドの柔軟性に富む指定によりVLIWプロセッサに対するプログラムをコンパイルすることに対するコンパイラに関し、そしてこのような柔軟性に富む指定を有するプログラムにも関する。
【図面の簡単な説明】
これらの、そしてまた他の本発明の態様は、添付の図面の例により示される。
第１図は、本発明のVLIWプロセッサのブロック図である、
第2a-c図は、インストラクションワードフォーマットの線図である、
第３図は、発行スロットに対するデコード回路のブロック図である、
第４図は、プログラムをコンパイルする流れ線図である、そして、
第５図は、インストラクションスロットに対するコマンドの指定である。
発明を実施するための最良の形態
第１図は、VLIWプロセッサの線図である。VLIWプロセッサは、インストラクションワードメモリシステム10、プログラムカウンタ11、デコードおよび起動回路12、機能ユニット14a-kおよびマルチポートレジスタファイル16を有する。カウンタ11は、メモリシステム10のアドレス入力に結合されている。メモリシステム10は、発行スロット（インストラクションバスとも呼ばれている）に分割されているインストラクション発行レジスタ（図示せず）を有する。発行スロットは、発行レジスタに現在バッファリングされているインストラクションワードの個々のビットのルートを決める機能的に並列する多くのパスを有する。発行レジスタの出力端は、デコードおよび起動回路12に結合されている。回路12の出力端は、機能ユニット14a-kと、マルチポートレジスタファイル16とに結合されている。レジスタファイル16の読出しポートと書き込みポートは、機能ユニット14a-kに結合されている。メモリシステム10は、カウンタ11の制御の下でデコードおよび起動回路12に、インストラクションワードを逐次的に供給する。システム10は、インストラクションキャッシングおよび／またはプリフェッチング（prefetching）を使用するのが好ましいが、これは本発明にとって本質的なものでは無い。システム10は、圧縮したフォーマットで格納されているインストラクションワードに対し、それらを出力する前に、解凍演算を実行することもできる。デコードおよび起動回路12は、インストラクションワードを受信する。回路12は、メモリシステム10からの機能的に並列するパスを、各フィールドが１つ以上のパスに関連しているフィールドの集まりとして扱う。フィールドの集まりは、コマンドを形成する。コマンドの集まりが、単一のインストラクションワードを形成する。
第2a図は、ワードが、多くのスロット20a-eに分割されている第一フォーマットのインストラクションワードを示す。スロット20a-eの各スロットは、各コマンドに対応する。各スロットは、演算コード22a-eに対する１つのフィールド、（レジスタファイル16内の関連するレジスタへの参照を表す）オペランド24a-e，26a-eに対する２つのフィールド、および（レジスタファイル16内の関連するレジスタへの参照を表す）結果28a-eのターゲットに対する１つのフィールドを有する。
第2b,c図は、多重スロットが「スーパスロット」に結合されている第二フォーマットのインストラクションワードを示す。例えば、スーパスロット29aは、従来のスロット20aと20bのフィールドを結合し、スーパスロット29bは、スロット20c-eのフィールドを結合する。スーパスロットフォーマットは、従来の単一スロットにより実行することができる場合に比較しより多くのオペランドを使用するコマンドを実行することを可能にする。一般に、個々のフィールド22a-e、24a-e、26a-e、28a-eは、従来のスロット20a-eとスーパスロット29aと29bにおいて、同じ機能を有するか、または全く機能を有しないの何れかである。例えば、フィールド24a-eと26a-eの内の特定フィールドが、第一フォーマットと第二フォーマットでのオペランドを規定するか、またはそれを全く使わない。フィールド22a-eの特定フィールドが、第一フォーマットと第二フォーマットの演算コードに対して使われ、またはそれを全く使わない。フィールド28a-eの特定フィールドが、第一フォーマットと第二フォーマットのターゲットに対して使われるか、またはそれを全く使わない。これに代えて、第二フォーマットのフィールド22a-e、24a-e、26a-eおよび28a-eは、第一フォーマットのそれらとは異なった目的を有する。
第３図は、デコードおよび起動回路30の一部、機能ユニット32a-cおよびマルチポートレジスタファイル34の一部を有する、VLIWプロセッサの線図である。デコードおよび起動回路30の部分は、機能ユニット32a-cに結合されているインストラクションデコーダ300を有する。ユニット32a-cは、レジスタファイル34の読出しポート302a、302bに結合されている。結果書き込みユニット304は、レジスタファイル34の書き込みポート342に結合されている。読出しポート302a,bの出力端は、機能ユニット32a-cの入力端に結合されている。機能ユニット32a-cの出力端は、書き込みポート342に結合されている。デコードおよび起動回路12は、各発行スロットに対し第３図に示されるような回路を含む。デコードおよび起動回路12は、各フィールドの機能に従って、フィールド22a-e、24a-e、26a-e、28a-eからの情報を処理する。オペランドフィールド24a-e,26a-eの各々は、レジスタファイル16の各読出しポートに関連している。デコードおよび起動回路12は、関連する読出しポートにアドレスするためにフィールド24a-e，26a-eの内容を使用する。同様に、ターゲットフィールド28a-eは、レジスタファイル16の書き込みポートに対応する。デコードおよび起動回路12は、関連する書き込みポートにアドレスするために、フィールド28a-eの内容を使用する。演算コードフィールド22a-eの各々は、デコードおよび起動回路12の各インストラクションデコーダ300に供給され、そこにおいて、復号された演算コードが、機能ユニット14a-kの選ばれたユニットに供給される。通常、デコードおよび起動回路12は、インストラクションワードを復号する間、例えば、オペランドの取り込みを始めることによって、パイプライン演算を使用する。インストラクションワードからのコマンドの復号化と取り込みは、前のインストラクションワードからのコマンドが実行されていて、かつそれより前のインストラクションワードからのコマンドの結果がそのターゲット位置に書き込まれている間に、実行される。フィールド22a-e、24a-e、26a-eおよび28a-eの機能が既定されていてかつフォーマットから独立しているので、オペランドの取り込みは、インストラクションの復号化が完了する前に始めることができる。
多重機能ユニット14a-kは、第３図のグループのようなグループに構成される。各グループは、第一フォーマットのインストラクションワードの各発行スロットに関連する。デコードおよび起動回路12が第一フォーマットのインストラクションワードを検出すると、回路12は、そのスロットに関連するグループのユニットのうちのどれが、スロットのコマンドを実行しなければならないかを決定する。その機能ユニットは、その後、コマンドを実行するために制御信号を受信する。したがって、デコードおよび起動回路12は、一グループ内の機能ユニットに一度にそれの実行を開始させるようにするであろう。通常、同じタイプの機能ユニットが、異なったグループ内に存在する。例えば、各グループは、ALU（算数演算ユニット）を有する。これは、一度に各グループの機能ユニットを１つしか使用しないことにより生じるボトルネックを防ぐ。
機能ユニット14a-cのいくつかは、複数のグループに属する。これらのユニットを、以下においては、スーパ機能ユニットと称する。スーパーユニット１４a-cの各々は、２つ以上の特定グループに関連している。これは、スーパユニット14a-cの各々が、これらの特定グループに関連するレジスタファイル16への読出しポートからオペランドを使用することが出来ることを意味する。また、スーパユニット14a-cは、これらの特定のグループに関連するレジスタファイル16への書き込みポートを使用できる。スーパ機能ユニット14a-cに対するコマンドは、第二フォーマットのインストラクションワードから来る。このようなコマンドは、スーパスロット29aおよび29bに位置する。スーパスロットのオペランドフィールド24a,bおよび26a,bは、スーパユニット14a-cに対するレジスタファイル16からオペランドを取り込むことを可能にする。フィールド24a,bおよび26a,bの各々は、インストラクションワードのフォーマットにかかわらず、全てのインストラクションワードに対して同じ読出しポートに関連している。その結果、フォーマットが決定される前に取り込みを開始することができる。同様に、ターゲットフィールド28a,bは、レジスタファイル16への書き込みポートを制御する。これらのフィールドの各々は、全てのインストラクションワードに対し、フォーマットには依存せずに、同じ書き込みポートに関連する。デコードおよび起動回路12が、特定のスーパユニットにコマンドの実行を開始させると、回路12は、いずれの機能ユニット14d-kも、そのスーパユニットに関連するグループ内でコマンドの実行を開始させることを阻止するであろう。スーパスロット29a,bの復号化された演算コードフィールド22a,bは、それらのグループに関連する従来のスロット20a,b内の、演算コードフィールド22a,bに対応していて、そして関連したスーパユニット14a-cのみを制御するのに使用される。例えば、スーパユニットを制御するこれらのスロットのうちの１つの演算コードしか使用しなくても良いが、それらのスロットのうちの２つ以上の演算コードを結合する結合回路を使用することもできる。したがって、より多数の異なった演算を、スーパユニット14a-cの各々に対して規定することができる。スーパユニット14a-cは、３つ以上のオペランドを必要とするおよび／または３つ以上の結果を生成する演算を実行するコマンドを実行する。このような演算の例は、
AV（R1,R2,R3..）      ３つ以上のオペランドR1,R2,R3..の平均を生成すること、
ME（R1,R2,R3..）      少なくとも３つ、５つまたはそれ以上のオペランドR1,R2,R3..の中点を生成すること、
SO（R1,R2）           大きい方のオペランドを、結果レジスタに置きかつ小さい方のオペランドを、他の結果レジスタに置いて、２つのオペランドR1およびR2をソートすること、
TP（R1,R2,R3,R4...）  行R1,R2,R3,R4を有するマトリックスの置換（transportation）、
RT（R1,R2,R3）        指定された角度についてコンポーネントR1,R2,R3を有するベクトルの回転
従来のVLIWプロセッサの場合、上記の演算は、いくつかのコマンドを逐次に実行することを必要とする。マルチポートレジスタファイルのレジスタは、あるケースの場合、小さい数の組合せを表すために使われる。例えば、レジスタが64ビット長の場合、４つの16ビット数をレジスタ当たりに表すことができる。この場合、これらの数の各々は、別々に演算させることができる。例えば、機能ユニットは、ADDコマンドに対応して、２つのレジスタからの数の４対を加えることができる。
この方法は、スーパユニットにも使用できる。例えば、４つのレジスタは、16ビット数の４ｘ４マトリックスを表すことができる。各レジスタは、マトリックスの行の各々を表す、各四つ組：R1=（a11、a12、a13、a14）、R2=（a21、a22、a23、a24）、R3=（a31、a32、a33、a34）、R4=（a41、a42、a43、a44）を含む。レジスタは異なっているが対応する四つ組の同じ位置に格納されている一組のコンポーネントは、マトリックスの一列を表す。置換演算において、行は異なるが同じ位置にあるコンポーネントは、共にレジスタRESULT1=（a11，a21，a31，a41）とRESULT2=（a12，a22，a32，a42）に置かれる。マトリックスを置き換えるスーパユニットは、２つの発行スロットを使用し、４ｘ４マトリックスの２つの行を生成することが出来る。このような機能ユニットに対して、置き換えられたマトリックスの２つの最上行を生成するコマンドと、２つの最下行を提供するコマンドの、２つのコマンドを提供することによって、置換は非常に速く得られる。
類似した演算は、シャッフル演算である：
SH  R1,R2,R3->R4（,R5）
この演算は、レジスタR3で、規定されている順列に従って、レジスタR1およびR2に格納されている数の順序を変えおよび／または数を選び、そしてそれらの数を順序でレジスタR3にそしてオプションとしてレジスタR5にも格納させる。
いくつかのケースの場合、一つ以上のオペランドが、標準の値を有する。これらのケースの場合、追加のコマンドを規定して、単一の発行スロットに適合させることは有利である。この追加のコマンドの場合、演算コードは、特定な演算とオペランドのうちの少なくとも１つの標準値を規定する。この標準値は、暗示的に規定できる。追加のコマンドは、残りのオペランドに対してのみのオペランド参照を含む。このようなコマンドは、第一または第二フォーマットの何れかを有するインストラクションワードの単一の発行スロットにおいて、使うことができるデコードおよび起動回路12がこのようなインストラクションに遭遇すると、それはスーパユニットそれ自体に標準の引数を供給する。したがって、スーパユニットは、１つの発行スロットを使用し、かつ２つ以上の発行スロットを使用するコマンドを受信できる。前者の場合、標準値が使われ、そして膨大な数のコマンドをインストラクションワードに含ませることができる。
第１図の実施例の場合、各スーパユニットは、機能ユニットの整数のグループに関連する発行スロットの全てのフィールドを使用する。代替スーパユニットは、発行スロットのフィールドの（全てでは無く）いくつかを使用できる。例えば、このような代替ユニットは、それらの内の２つは、１つの特定発行スロットのフィールドからそして第三のオペランドは他の発行スロットから来る、３つのオペランドを処理できる。このような代替ユニットを使うと、当該発行スロットの他のフィールドを、代替スーパユニットと並列に実行を開始できる他のユニットに対して利用できるようにすることができる。これらの他の機能ユニットは、例えば、１つのオペランドのみを有するか、全くオペランドを有しないか、または何の結果も生成させないようにすることができる。これらの他のユニットは、代替ユニットが未だ使っていないいくつかのフィールドのみを使用するであろう。また、これらの他の機能ユニットは、他の発行スロットのフィールドに加えて発行スロットのいくつかのフィールドを使用する、代替スーパ機能ユニットそれ自身であるかもしれない。しかしながら、代替機能ユニットの使用は、単一のインストラクションワードからコマンドを受け取ることができるユニットの組合せに、複雑な制限を課す。発行スロットの全てのフィールドを使用することによって、または少なくとも部分的に割り当てられたスロットの残りのフィールドを使用しないことによって、このような制約は、避けられる。これはより高い程度の並列性の利用を可能にし、そして、それはインストラクションワードのコンパイルをはるかに容易にする。
コンパイラは、VLIWプロセッサに対してインストラクションワードを生成する。コンパイラは、コマンド間のデータ依存性を有する多くのコマンドでプログラムを記述する。コンパイラは、一組のインストラクションワードに全てのコマンドを置く方法を捜す。コンパイラは、プログラムの実行中にシーケルシャルに実行される必要があるインストラクションワードの数の最小化を実行する。第４図は、プログラムをコンパイルする方法のフローチャートの線図である。第一ステップ40において、一組の演算が、演算の間のデータ依存性の仕様と共に受け取られる。続いて、コンパイラは一組のインストラクションワードに演算に対するコマンドを置く方法を捜し始める。第二ステップ42は、受け取られた全ての演算に対してコマンドが置かれたかどうかを検証する。もしそうである場合には、コンパイル処理は、完了する。そうでない場合には、第三ステップ44は、コマンドがまだ置かれておらず、そしてそのオペランドを生成する、先行する「ソース演算」がすでに置かれている演算を選択する。さらに、最も早いインストラクションワードが、ソース演算に対するコマンドが置かれたインストラクションワードの後のインストラクションワードの組から選ばれる。第四ステップ46は、その最も早いインストラクションワードにすでに含まれているコマンドと、その選ばれた演算に対するコマンドとを含むインストラクションワードを構成することが可能か否かを検証する。ステップ46は、コマンドの性質および機能ユニットのグループ分けを考慮に入れる。
-異なったグループにコマンドを置くことと、
-他のいかなるコマンドも、それらのスーパ機能ユニットに関連するグループの発行スロットを使用しないように、スーパ機能ユニットに対するコマンドを置くこと
の両方が、可能か否かが検証される。
これが可能な場合、選ばれたインストラクションワードは、アップデートされ、そして、この方法は第二ステップ42に戻る。これが可能でない場合、第五ステップ48が実行される、選ばれたインストラクションワードに続くインストラクションワードが選択され、そして第四ステップ46が繰り返される。
第５図は、第四ステップ46をさらに説明する線図である。左側に、演算の数が、第一ノード50a-dとして示されている。右側に、発行スロットの数が、第二ノード52a-eとして示されている。第四ステップの作業は、第一ノード50a-dの第二ノード52a-eへのマッピングがあるか否かを検証することである。このマッピングで、スーパ機能ユニット50dに対する演算は、少なくとも２つの発行スロット52d,eにマッピングされる。他の第一ノード50a-dは、従来の演算に対応し、そして各々は、第二ノード52a-e内の単一ノードにマッピングされる。ノード52a-eの各々は、当該演算を実行できる機能ユニットを含むグループに関連する発行スロットに対応する。もちろん、第４図のフローチャートは、単純化された例に過ぎない。一般に、最小化は、コマンド間のデータ依存の制約の下で実行される。（すなわち、第一コマンドが、第二コマンドからの結果を入力として使用する場合、これらのコマンドは、異なったインストラクションワードに置かれるべきである。インストラクションワードは、第二コマンドを含むインストラクションワードに続く第一コマンドを含む）。さらに、最小化は、機能ユニットが、各インストラクションワードに対して、並列に全てのコマンドの実行を始めることができる制約条件の下で実行される。
【図１】
0003976082.tif 000002
【図２】
0003976082.tif 000003
【図３】
0003976082.tif 000004
【図４】
0003976082.tif 000005
【図５】
0003976082.tif 000006