(57)【特許請求の範囲】
【請求項１】
１以上の元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、
命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第１種の演算と、
命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力し、その出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第２種の演算とに変換し、
もって、一つの長語命令あたり前記第１種の演算ｉ個（ｉは０個以上）と前記第２種の演算ｊ個（ｊは０個以上）を含む最大ｎ個（ｎは２以上）が割り当てられ、それぞれ割り当てられた前記最大ｎ個の演算をそれぞれの命令フィールドで指定する長語命令からなる長語命令流を生成し、
該生成した長語命令流の各長語命令の処理は、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第１種の演算を、前記命令処理装置内部または外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える複数の第１種の演算ユニットでそれぞれ行い、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第２種の演算を、前記命令処理装置内部または外部のデータを用いて演算を行い、演算結果を前記命令処理装置外部に出力する演算を処理し、かつ命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果によってその出力動作を選択的に取り消す手段を有する一つ以上の第２種の演算ユニットでそれぞれ行うことにより並列処理することを特徴とする命令処理方法。
【請求項２】
１以上の元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、
命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第１種の演算と、
演算に用いるデータを命令処理装置外部から入力するか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行い、該入力動作又は出力動作を、
命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第２種の演算とに変換し、
もって、一つの長語命令あたり前記第１種の演算ｉ個（ｉは０個以上）と前記第２種の演算ｊ個（ｊは０個以上）を含む最大ｎ個（ｎは２以上）が割り当てられ、それぞれ割り当てられた前記最大ｎ個の演算をそれぞれの命令フィールドで指定する長語命令からなる長語命令流を生成し、
該生成した長語命令流の各長語命令の処理は、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第１種の演算を、前記命令処理装置内部または外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える複数の第１種の演算ユニットでそれぞれ行い、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第２種の演算を、演算に用いるデータを命令処理装置外部から得るか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行う演算を処理し、かつ命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果によってその入力動作または出力動作を選択的に取り消す手段を有する一つ以上の第２種の演算ユニットでそれぞれ行うことにより並列処理することを特徴とする命令処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、長語命令を用いる命令処理に係るものであり、並列性を高めた長語命令の生成方法と、生成した長語命令を処理する命令処理装置に関する。
【背景技術】
【０００２】
まず従来の一般的な長語命令方式（以下、ＶＬＩＷ方式）を用いる命令処理装置（同プロセッサ）について述べる。
図８には、長語命令（同ＶＬＩＷ命令）流の生成のもととなる、もとのプログラムの構造の例を示す。計算機のプログラムの構造は、実行開始点もしくはある分岐命令の分岐先を先頭とする命令の連続を命令流とみたてると、図に示したようにそれぞれの命令流が互いに分岐命令によって結合された木構造のようにみることができる。
【０００３】
従来では図８に示したような木構造を持つプログラムをＶＬＩＷ方式のプロセッサで実行しようとする場合、第一の方式として、次のものが説明されている。
まずプログラムのコンパイル時において分岐の方向の予想を立て、例えば図８中の命令流１を選んでこの中で命令の移動を行う。そしてデータに関する依存関係を保ちつつ、できるだけ広い範囲の命令をまとめてＶＬＩＷ命令を生成している。これをトレース・スケジューリング法と呼ぶ。
この時分岐の予想が外れて図８中の命令流２または３へ分岐が行われて実行が移ったときのために、命令流１の下流から分岐命令を越えて移動した命令の効果を打ち消すような付加的な命令を追加する。この付加的な命令の追加によって、生成されるＶＬＩＷ命令の量は激しく増加する。
またこの方式では、条件分岐の分岐方向の予想がたてやすいことが一つの条件である。しかし、繰り返し計算などが多く分岐方向の予想が容易である科学技術計算プログラムの他に、オペレーティング・システムやコンパイラなど分岐の予想の立てづらいプログラムも多く存在する。これらの理由から、命令の移動できる範囲には限界があり、多くの命令を移動して高い並列度を得ることは難しい。
また、第二のパーコレーション・スケジューリング法と呼ばれる方式では、命令流１と２、あるいは命令流２と３を同時に見てその範囲内で命令の移動を行ってＶＬＩＷ命令の生成を行う。この方式では条件分岐の分岐方向を予想する必要はなくなる。
しかしここでもプログラムの正しさを保つために、必要な部分では命令流の組み合わせで場合分けを行ったコピーを生成する。このためこの方式においても、生成されるＶＬＩＷ命令量の激しい増加が問題となる（例えば、非特許文献１参照。）。
【０００４】
分岐命令を越えて命令を移動しＶＬＩＷ命令列の生成を行う場合、分岐の結果の予想が外れた時に、移動した命令の効果をハードウェアで取り消してしまうことも考えられる。このような目的のために、従来から提案されてきた方式には２種類のものがある。
一つはブースティングと呼ばれる方式である。この方式では、分岐命令を越えて移動した命令は投機的実行と呼ぶ特別なモードで実行し、実行結果をハードウェアで一時的に蓄えておく。
例えば、分岐の方向を予め予想して、その方向から分岐命令を越えて命令の移動を行い、移動した命令の実行結果を二重化レジスタなどで蓄える。
この二重化レジスタなどで蓄えられた実行結果は、分岐命令が実行されて分岐の生起／不生起が決定されるとそれに応じて有効化あるいは無効化される。
このような方式では、前述のトレース・スケジューリングのように分岐の方向の予想が立てやすいことが条件となり、予想の立てづらい多くのプログラムでは高い並列度を得ることが困難である。また実行結果を一時的に蓄えるために二重化ファイルなどのハードウェアコストがかかる。このためいくつもの分岐命令を越えて広い範囲から命令を移動させることは難しい（例えば、非特許文献２参照。）。
【０００５】
分岐命令を越えて移動した命令の効果をハードウェアで取り消せるようにした方式の二番目としては、命令の実行に条件を付けて命令の実行そのものを選択的に取り消せるようにした条件付きの命令実行機構が挙げられる。しかし従来のものでは、ＶＬＩＷ方式のプロセッサに応用する上で充分効果をあげることは困難であった。
例えば、条件分岐命令およびメモリ書き込みを行うストア命令についてその実行を選択的に許可するｇｕａｒｄ  ｅｘｐｒｅｓｓｉｏｎと呼ぶ条件記述を持つことが提案されている。
この例では分岐操作がプロセッサの内部パイプラインによって実行されるのに長い時間がかかることが前提である。この時、分岐先の命令をその分岐命令における分岐条件と同じ条件を記述したｇｕａｒｄ  ｅｘｐｒｅｓｓｉｏｎを加えて実行することにより、パイプラインによる分岐の実行と並列に実行することを可能とする。
ここではｇｕａｒｄ  ｅｘｐｒｅｓｓｉｏｎには条件分岐命令における分岐条件と同じく、さまざまなプログラムの構造の記述が可能なだけの複雑な論理演算による条件記述ができることが求められている。
これは命令の形式の複雑化およびハードウェアのコストの増大を招くので、ＶＬＩＷ方式のプロセッサには効率の良い実装を行うことが困難である。また分岐命令自体は依然として実行されるので、ｇｕａｒｄ  ｅｘｐｒｅｓｓｉｏｎによって並列に実行できる命令数が充分ない場合には、分岐命令自体のオーバーヘッドが顕著に現われてしまっていた（例えば、非特許文献３参照。）。
【０００６】
同様な条件付き実行機構として、すべての命令にその命令の実行が許される条件を、いくつもの条件フラグを用いて記述する方式が提案されている。
この方式においても、条件フラグの導入により条件の記述はいくらか簡単にはなったものの、未だ複雑である。また条件付き実行機構によって分岐命令は削減されるが、後に述べるような本発明の方式とは異なり、実際に実行される命令流をあくまで一つに限ることによって、プログラムをプロセッサ内部においても正しく実行しようとする。このため並列度の抽出および命令のスケジューリングにおいて大きな制限がある。
更に従来までのＶＬＩＷ方式のプロセッサでは、単一のプログラムから命令流を取り出すのが前提であり、複数のプログラムから多数の命令流を取り出して静的に並列度の高いＶＬＩＷ命令を生成するようなことは考慮されていなかった（例えば、非特許文献４参照。）。
【０００７】
【非特許文献１】情報処理Ｖｏｌ．３１  Ｎｏ．６  ｐｐ．７６３−７７２の解説「ＶＬＩＷ計算機のためのコンパイラ技術」（中谷登志男、情報処理学会、１９９０年６月）
【０００８】
【非特許文献２】Ｐｒｏｃｅｅｓｉｎｇｓ  ｏｆ  ｔｈｅ  １７ｔｈ  Ｉｎｔｅｒｎａｔｉｏ−ｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔ−ｕｒｅ  ｐｐ．３４４−３５４の論文「Ｂｏｏｓｔｉｎｇ  Ｂｅｙｏｎｄ  Ｓｔａｔｉｃ  Ｓｃｈｅｄｕｌｉｎｇ  ｉｎ  ａ  Ｓｕｐｅｒｓｃａｌａｒ  Ｐｒｏｃｅｓｓｏｒ」（Ｍｉｃｈａｅｌ  Ｄ．  Ｓｍｉｔｈ、  Ｍｏｎｉｃａ  Ｓ．Ｌａｍ、ａｎｄ  Ｍａｒｋ  Ａ．Ｈｏｒｏｗｉｔｓ、ＩＥＥＥ、１９９０）
【非特許文献３】Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １３ｔｈ  Ｉｎｔｅｒｎ−ａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉ−ｔｅｃｔｕｒｅ  ｐｐ．３８６−３９５の論文「Ｈｉｇｈｌｙ  Ｃｏｎｃｕｒ−ｒｅｎｔ  Ｓｃａｌａｒ  Ｐｒｏｃｅｓｓｉｎｇ」（Ｐｅｔｅｒ  Ｙ．Ｔ．Ｈｓｕ  ａｎｄ  Ｅｄｗａｒｄ  Ｓ．Ｄａｖｉｄｓｏｎ、ＩＥＥＥ、１９８６）
【非特許文献４】情報処理学会論文誌Ｖｏｌ．３４  Ｎｏ．１２  ｐｐ．２５９９−２６１１の論文「拡張ＶＬＩＷプロセッサＧＩＦＴにおける命令レベル並列処理機構」（小松秀昭ほか、情報処理学会、１９９３年１２月）
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記のように、従来のＶＬＩＷ方式のプロセッサでは、ソース・プログラムとの整合性を厳密に保っている。即ち、命令を分岐命令を越えて移動させる場合は、その実行をすべて取り消せるように付加的な命令を加え、ＶＬＩＷ命令列の生成を行っていた。
この制約は非常に大きく、付加的な命令も多くなり、命令の移動には限界がある。このため得られる並列性が充分でなく、ハードウェアが提供できる並列度を充分使い切れていなかった。プロセッサ内の演算器の数を増やすなどハードウェアを強化したとしても、それに見合うような性能向上が得られないという問題があった。
【００１０】
更に、従来提案されているような条件付き実行機構も、同じく仮に実行しようとした命令をすべて取り消すために複雑なハードウェアや命令形式が必要となる。このためＶＬＩＷ方式のプロセッサへ適用して高い効果をあげることは難しい。
また従来は、複数のプログラムからそれぞれ独立した実行条件を持つ命令流を取り出して、単一のＶＬＩＷ命令列を生成するような応用はまったく考慮されていなかった。従って、複数のプログラムから取り出した多数の命令流を用いて、静的に単一のＶＬＩＷ命令列へ合成して高い並列度を得ることは非常に困難であった。
【００１１】
本発明の目的は、一つ以上のプログラムから複数の命令流を取り出し、高い並列度を持ったＶＬＩＷ命令列を生成することにある。
本発明の他の目的は、上記生成したＶＬＩＷ命令列を実行するための手段を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明の長語命令生成方法は、
１以上のプログラムから、ｎ個（ｎは２以上）の演算命令フィールドを持ち各演算命令フィールドにはそれぞれの演算命令か無操作命令を指定することによって最大ｎ個の演算を指定することのできる長語命令からなる新たな長語命令流を静的に生成する長語命令生成方法であり、
元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第１種の演算と、命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力し、その出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第２種の演算とに変換し、
各長語命令を前記第１種の演算ｉ個（ｉは０個以上）と前記第２種の演算ｊ個（ｊは０個以上）で構成するようにしている。
また、元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、命令処理装置内部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第１種の演算と、演算に用いるデータを命令処理装置外部から入力するか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行い、該入力動作または出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第２種の演算とに変換し、
各長語命令を前記第１種の演算ｉ個（ｉは０個以上）と前記第２種の演算ｊ個（ｊは０個以上）で構成するようにしている。
さらに、前記の長語命令を構成する演算として、命令処理装置内部もしくは外部のデータの値を用いて条件判定をすることにより次に実行する長語命令の場所を長語命令流中の別個の場所へ選択的に変更する第３種の演算である条件分岐演算を生成し、各長語命令を前記第１種の演算ｉ個（ｉは０個以上）と前記第２種の演算ｊ個（ｊは０個以上）と前記第３種の演算ｋ個（ｋは０個以上）で構成するようにしている。
【００１３】
また、本発明の命令処理装置は、
ｎ個（ｎは１以上）の演算ユニットを持ち、最大ｎ個の演算を並列に実行する手段を有する命令処理装置であって、前記ｎ個の演算ユニットは、命令処理装置内部あるいは外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える演算を処理する第１種の演算ユニットｉ個（ｉは０以上）と、命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力する演算を処理し、かつ命令処理装置内部もしくは外部のデータの値によってその出力動作を選択的に取り消す手段を有する第２種の演算ユニットｊ個（ｊは０以上）を備えるようにしている。
また、前記ｎ個の演算ユニットは、命令処理装置内部のデータを用いて演算を行い、結果も命令処理装置内部に蓄える演算を処理する第１種の演算ユニットｉ個（ｉは０以上）と、演算に用いるデータを命令処理装置外部から得るか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行う演算を処理し、かつ命令処理装置内部もしくは外部のデータの値によってその入力動作または出力動作を選択的に取り消す手段を有する第２種の演算ユニットｊ個（ｊは０以上）を備えるようにしている。
さらに、前記ｎ個の演算ユニットの中に、命令処理装置内部もしくは外部のデータの値を用いて条件判定をすることにより次に実行する長語命令の場所を長語命令流中の別個の場所へ選択的に変更する条件分岐演算を処理する第３種の演算ユニットｋ個（ｋは０以上）を備えるようにしている。
【発明の効果】
【００１４】
本発明によれば、一つ以上のプログラムの計算木から複数の命令流を取り出して、高い並列度を持ったＶＬＩＷ命令列を生成することができる。
また、生成したＶＬＩＷ命令列をその高い並列度で実行することができる。
【発明を実施するための最良の形態】
【００１５】
本発明の一実施例を図によって、説明する。
【実施例１】
【００１６】
図１は、本発明によるＶＬＩＷ命令の生成方法の例である。元のプログラムが図１（ａ）に示したような命令流１、２、及び３からなるとき、まず初めにこれらの間を結合している条件分岐命令をすべて取り除く。
次に図１（ｂ）に示すようにそれぞれの命令流中の演算命令を、データの依存関係を保ちながらＶＬＩＷ命令へ合成する。すなわち、各点線内の独立命令がＶＬＩＷ命令化される。
この時プロセッサ外部へデータを出力するストア命令については、元の命令流２の実行条件を参照してストア動作を行うように、条件付きストア命令に置き換える。
このようにすることによって分岐命令は消滅し、命令を自由に移動して高い並列度をもったＶＬＩＷ命令を生成することが可能となる。
図１のＶＬＩＷ命令生成方法で最も特徴的な点は、図１（ａ）に示した元のプログラムの構造のままでは最終的には分岐命令によって命令流１、２、または３のいずれかが選ばれて実行されるのに対し、図１（ｂ）に示したようにＶＬＩＷ命令を生成すると、命令流２に含まれていたストア命令が条件付きとなる以外は、命令流１、２、３のすべての演算命令が実行されてしまうことである。
【００１７】
図２は、本発明によるＶＬＩＷ命令の形式の例である。
図２（ａ）はプロセッサ外部に値を出力するストア命令を条件付きとした例である。
図中の各演算命令フィールド中、ＯＰには演算の種類あるいは無操作命令であることの指定、Ｒａｄｒにはロード命令またはストア命令で用いるアドレス計算に用いるレジスタ、Ｄｉｓｐにはアドレス計算に用いるディスプレースメントの指定を行う。
またＲｄｉｓｔにはロード命令または演算命令で結果を格納するレジスタを、Ｒｓｒｃ、  Ｒｓｒｃ１、  Ｒｓｒｃ２にはストア命令または演算命令で演算に用いるデータを格納しているレジスタを指定する。
最後にＲｃｏｎｄには条件付きストア命令での条件判定の対象となるデータ（すなわち、図１（ａ）における条件分岐命令における条件判定に用いられるデータに対応する）を格納しているレジスタを指定する。
この形式によって図１のようなＶＬＩＷ命令の生成が可能となる。
【００１８】
図２（ｂ）はストア命令と共にロード命令も条件付きとして構成した例である。
図中Ｒｄａｔａにはロード命令ではロードした結果を格納するレジスタ、ストア命令ではストアするデータを格納しているレジスタを指定する。
このようにロード命令による入力動作も条件的な取り消しができる構成としなければならない場合は二つある。
一つは、そのシステムでデータメモリの中に非破壊読み出しのできない部分があり、本来はそのロード命令の属する命令流の実行条件が成立していなくて行われないはずの入力動作を行ってしまうと、副作用が生じる場合である。
また二つ目は、データメモリからの入力動作に時間的に大きなコストがかかる部分があり、同じく本来は行われないはずの入力動作を行ってしまうと、プログラムの実行時間が長くなってしまう場合である。
これらの状況が生じないシステムでは、選択的に入力動作を取り消す必要はなく、必要でないロード・データが得られても、単に読み捨ててしまうような命令列を生成すればよい。
【００１９】
図２（ｃ）には、（ｂ）に対して、分岐命令も付加した形式の例を示す。
ここで、この分岐命令は元のプログラム中に含まれていたものではないことに注意を要する。
即ち、図１で示したように元のプログラム中の分岐命令は一旦すべて取り除かれてＶＬＩＷ命令が生成される。その過程においてＶＬＩＷ命令に合成すべき元の命令流の数がそのときのＶＬＩＷ命令の並列度（図２（ｃ）ではロード／ストア命令２、演算命令４の計６）に対して過度に増え過ぎたとき、一部の命令流をその実行条件で排除して残りの命令流からＶＬＩＷ命令流を生成できるようにするために、後から付加するものである。
例えば図１の例で言えば、命令流の数を３から２に減らそうとするとき、分岐先には命令流２と３、分岐しなかったときの実行先には命令流１と２から合成したＶＬＩＷ命令流を置き、分岐条件として命令流３の実行条件、すなわち、命令流２から命令流３へ分岐する分岐条件、を用いた条件分岐命令を付加すればよい。  この場合には、命令流２の命令は分岐の有無にかかわらずＶＬＩＷ命令に含まれることになる。
【００２０】
図３は、図２（ａ）のＶＬＩＷ命令を実行するように構成したのプロセッサの例である。
図中にはまた、主記憶２が示されている。主記憶２にはＶＬＩＷ命令列が格納され、プロセッサからの要求に従ってＶＬＩＷ命令の供給を行う。更にこれに加えてプロセッサ外部のデータ記憶要素としても働き、プロセッサからの要求に従って、データの入出力を行う。この主記憶２には命令キャッシュあるいはデータキャッシュを含んでいてもよい。
プロセッサ内は、図３の例では１個の命令フェッチ部１０、１個の命令発行部１１、１個のロードユニット１２、１個のストアユニット１３、４個の内部演算ユニット１４、１個の汎用レジスタファイル１６と、これらの構成要素を相互に結合するデータパスからなる。更に図３では、ストア命令について条件付き実行機構を実現するために、１個のストア条件判定ユニット１５が設けられている。
図３において最も特徴的なことは、汎用レジスタファイル１６に一つ以上の命令流用の汎用レジスタ群が保持されていることである。これらの汎用レジスタ群の各命令流への割り当てはＶＬＩＷ命令生成時に静的に行われる。
これらの汎用レジスタ群では、それぞれの命令流で用いる演算のデータに加えて、その命令流へ分岐が生じて実行される条件を、データとして保持している。
そしてそれぞれの命令流を並列に実行してしまい、ストア命令によるプロセッサ外部に対する出力動作のみをその汎用レジスタに保持した実行条件で選択的に取り消すのである。このようにすることによって、並列度を大きく高めることができる。
【００２１】
以下、図３の例における各部の機能を説明する。
命令フェッチ部１０の機能は、命令メモリに対して要求を出し、図２に示したようなＶＬＩＷ命令を一つずつ読み出し命令発行部１１に送ることである。命令フェッチ部１０の中には次のＶＬＩＷ命令を読み出す位置を示すプログラムカウンタが含まれる。その値は図中の命令フェッチ部から主記憶２へのアドレスパス１０１（ＩＡｄｒ）に出力されている。
主記憶２から読み出されたＶＬＩＷ命令はデータパス１０２（ＩＤａｔａ）によって送られてくる。
命令発行部１１では、まず命令フェッチ部１０より供給されたＶＬＩＷ命令の各演算フィールドを調べる。そしてそれぞれが無操作命令（ｎｏｐ命令）でないとき、対応する演算ユニットに命令を発行する。この時それぞれの演算フィールドの命令で指定されるソースオペランド・レジスタの値も汎用レジスタファイル１６から読み出し、それぞれの演算ユニットへ供給する。
演算ユニットは、プロセッサ外部からのデータの入力を行うロード命令を処理するロードユニット１２、プロセッサ外部へのデータの出力を行うストア命令を処理するストアユニット１３、及びプロセッサ内部のデータ即ち図３では汎用レジスタファイル１６からのデータを用いて演算を行い、結果もプロセッサ内、汎用レジスタファイル１６に格納する命令を処理する内部演算ユニット１４の三つの種類に分かれる。
これらの演算ユニットはパイプライン化されており、ＶＬＩＷ命令が１ワード読み込まれる毎に命令発行部１１から発行された命令をそれぞれ受け取ることができるものとする。
【００２２】
内部演算ユニット１４は、それぞれ汎用レジスタファイル１６より２個までのデータを受け取って、命令発行部１１より発行された演算命令を実行する。演算結果は汎用レジスタファイル１６中の、命令で指定されたレジスタに書き戻される。
ロードユニット１２は、命令発行部１１よりロード命令を受け取ると同時に、ロードを行うアドレス計算に用いるレジスタの値を汎用レジスタフィアル１６より受け取って処理を開始する。
読み出したレジスタの値と命令中のディスプレースメント値からロードを行うアドレスを決定し、アドレスパス１２１（Ａｄｒ）に出力する。主記憶より読み出されたデータはデータパス１２２（Ｄａｔａ）によってロードユニット１２に供給され、汎用レジスタファイル１６中の命令で指定されたレジスタに格納される。
ストアユニット１３は、命令発行部１１よりストア命令を受け取ると同時に、ストアを行うアドレス計算に用いるレジスタの値及びストアするためのデータを汎用レジスタフィアル１６より受け取って処理を開始する。
読み出したレジスタの値と命令中のディスプレースメント値からストアを行うアドレスを決定し、アドレスパス１３１（Ａｄｒ）に出力する。また同時にデータパス１３２（Ｄａｔａ）にはストアするデータを出力して、ストア判定ユニット１５に送る。
ストア判定ユニット１５では命令発行部１１よりストアする条件指定の選択信号と、汎用レジスタファイル１６より条件判定の対象となるデータを受け取って条件判定を行う。
条件が成立したら、ストアユニット１３より供給されたストア・アドレス及びデータをアドレスパス１５１（Ａｄｒ）、データパス１５２（Ｄａｔａ）に出力して主記憶に送り、ストア動作を完了させる。
条件が不成立の場合はストアユニット１３より供給されたアドレス及びデータはアドレスパス１５１、データパス１５２へ出力されない。
【００２３】
以上のような各演算ユニットの動作は独立して並列に行われるので、汎用レジスタファイル１６からのデータの供給及び書き戻しには、この並列動作を妨げないだけの能力が要求される。
このため図３の例では、汎用レジスタファイル１６は読み出しポート１２、書き込みポート５の計１７ポートのマルチポートレジスタファイルとなっている。
同様に主記憶２に対してもロード／ストアユニットの動作を妨げないだけのデータ供給／書き込み能力が要求される。
図３では二つの読み出しポート及び一つの書き込みポートを持つマルチポートメモリとなっている。このような主記憶の構成は、キャッシュなどを用いることによって容易に実現できる。
【００２４】
図４にストア判定ユニット１５の一実施例を示す。
入出力動作を許可するか否かの実行条件のデータは、汎用レジスタファイル１６よりデータパス１６１（Ｒｃｏｎｄ）によって供給されて、条件データバッファ４１に蓄えられる。条件データバッファ４１に蓄えられた値は条件判定回路４３により正（＋）、負（−）、零（＝０）、非零（≠０）の各条件について判定される。
どの条件判定の結果が選ばれるかは、命令発行部１１からの条件指定のための選択信号によりセレクタ４４によって決定される。
これによって選ばれた条件判定の結果が成立していた時のみ出力ゲート４２が開かれ、アドレスパス１３１、データパス１３２に供給されたストア・アドレス及びストア・データがアドレスパス１５１及びデータパス１５２に出力されて主記憶２へ送られる。これによって条件付きのストア命令の処理が実現される。
【００２５】
図５は、図２（ｂ）の形式のＶＬＩＷ命令を実行するように構成したプロセッサの例である。
図５ではロード命令もストア命令と同じく条件付きとするために、ロード／ストア動作の両方に対して条件的に実行を取り消すことのできるロード／ストア判定ユニット１８を２個備えている。
これらはロード命令及びストア命令のいずれをも処理することのできる２個のロード／ストアユニット１７と主記憶２との間にそれぞれ位置する。
このロード／ストア判定ユニット１８は、命令発行部１１から条件指定の選択信号、ロード／ストアユニット１７よりロード／ストア動作を行うアドレス及びデータと、ロードかストアを指定する制御信号（図示省略されている）、汎用レジスタファイル１６より実行条件のデータ（Ｒｃｏｎｄ）を受け取ることによって動作する。
命令発行部１１からの条件指定の選択信号によって先の図４のストア判定ユニット１５と同じく判定すべき条件を選択し、選択された条件が成立している時にのみ、ロード／ストアユニット１７からのロード／ストア要求を主記憶２に伝え、ロード／ストア処理を実行する。以上の他は、図５の構成例は図３の構成例と同じである。
【００２６】
図６は、図２（ｃ）の形式のＶＬＩＷ命令を実行するように構成したプロセッサの例である。
図６では図５の構成例に対して、更に条件分岐命令を処理する条件分岐処理ユニット１９が付加されている。
条件分岐処理ユニット１９は、命令フェッチ部１０からデータパス１９１（ＮｅｘｔＡｄｒ）に次のＶＬＩＷ命令読み出しアドレスを、命令発行部１１から条件分岐命令として分岐先オフセットや条件指定の選択信号を、汎用レジスタファイル１６からはデータパス１６２（Ｒｃｏｎｄ）に実行条件のデータを受け取ることで処理を行う。
指定された条件が成立している時のみ、与えられた次のＶＬＩＷ命令読み出しアドレスや分岐先オフセットを用いて計算した分岐先をデータパス１９２（ＢｒａｎｃｈＡｄｒ）に出力して命令フェッチ部１０に伝達し、ＶＬＩＷ命令の読み出しアドレスを変更することで分岐を行わせる。
【００２７】
図７は条件分岐処理ユニット１９の一実施例である。
分岐を行うか否かの実行条件のデータは汎用レジスタファイル１６よりデータパス１６２（Ｒｃｏｎｄ）によって供給され、条件データバッファ５１に蓄えられる。条件データバッファ５１に蓄えられた値は条件判定回路５３により正（＋）、負（−）、零（＝０）、非零（≠０）の各条件について判定される。どの条件判定の結果が選ばれるかは、命令発行部１１からの条件指定のための選択信号によりセレクタ５４によって決定される。
これによって選ばれた条件判定の結果が成立していた時のみ出力ゲート５２が開かれる。分岐先は命令発行部１１からの分岐先オフセットと命令フェッチ部１０からの次のＶＬＩＷ命令読み出しアドレスＮｅｘｔＡｄｒを用いて分岐先加算器５５により計算される。この計算された分岐先が分岐先出力ゲート５２が開かれることによってデータパス１９２（ＢｒａｎｃｈＡｄｒ）に出力され、命令フェッチ部１０へ伝達される。
【００２８】
次に実際に用いられるＶＬＩＷ命令列の例を説明する。
図９に示したのは、図２の本発明によるＶＬＩＷ命令の生成方式により生成したＶＬＩＷ命令列と、従来の一般的なＶＬＩＷの命令列の比較例である。
図９（ａ）に示したようなＣ言語のソースプログラムがあるとき、従来のＶＬＩＷ方式のプロセッサで実行される命令列は図９（ｂ）に示すようになる。ここで、変数ａ、ｂ及びｄの値は予め汎用レジスタ％１、％２及び％４にそれぞれ保持されているものとする。また、ポインタ変数ｃは汎用レジスタ％６に保持されているものとする。
従来の一般的なＶＬＩＷ命令列では、基本的には条件分岐はすべて条件分岐命令にコンパイルする必要がある。このため図９（ｂ）のように並列実行可能な命令が少なくなり、ほとんどの演算命令フィールドがｎｏｐ命令となるので、充分な性能が得られない。
そこでこれと同等な、図２（ｂ）の本発明による条件付き実行機構を備えるＶＬＩＷ命令列の例を図９（ｃ）に示す。図９（ｂ）と図９（ｃ）では演算器の数など、ハードウェアの提供する並列度は同じである。従って、ＶＬＩＷ命令の演算命令フィールドの構成も同等なものとなる。
ここで図９（ｃ）では、ｉｆ側とｅｌｓｅ側のどちらの命令流が実行されてよいのかを示す情報が、汎用レジスタ％３の値が零か非零かで表現されている。またストア命令（ｓｔ＿ｚ、  ｓｔ＿ｎｚ命令）が条件的にその動作を取り消すことができる（ｓｔ＿ｚ命令は第１オペランドの汎用レジスタ％３の値が零であればデータメモリへのストア動作を行い、ｓｔ＿ｎｚ命令では非零であればストア動作を行う）。
このため条件分岐があっても分岐命令を使わずに最適化することができる。これにより図９（ｃ）の例では、分岐命令フィールドを持たないＶＬＩＷ命令形式となっている。
以上に加えて、本発明の方式での特徴としては、レジスタ上の値の更新は条件処理とは独立してそのまま実行してしまうということが挙げられる。
即ちｔｈｅｎ側における変数ｄの更新処理（ｄ＝ｄ＋２０）について、別のレジスタ％８を新たに割り付けることにより、ｉｆ−ｔｈｅｎ−ｅｌｓｅ節の他の部分と並列に実行するように１ワード目に割り付けられている（命令ａｄｄ  ％４、２０、％８）。
ラベルＬ１以降の部分の命令流から抽出された命令では、レジスタ％８が変数ｄであると読み替えて命令を生成すればよい。
以上の結果、図９（ｂ）の例では５ワードであったものが図９（ｃ）では２ワードとなっており、倍以上の効率化が得られている。
【００２９】
最後に、複数のプログラムから命令流を取り出してＶＬＩＷ命令へ合成した例を図１０に示す。
図１０では二つのプログラムａ、ｂより命令流を１から５までの計５個を取り出して一つのＶＬＩＷ命令に合成している。
まず、すべての分岐命令を取り除くことによりそれぞれの命令流を分離独立させる。
そして命令流１から５を併せて、データ依存関係を保ちながら一つのＶＬＩＷ命令列に合成する。すなわち、図の各点線で囲まれた命令は夫々独立しており、点線内の各命令が演算器の種類、個数に合わせてＶＬＩＷ命令化される。
その際図１０では命令流２および５にそれぞれ一つずつあるストア命令を、それぞれの命令流の実行条件を参照してストア動作をおこなう条件付きストア命令に置き換える。
このようにすると、それぞれのプログラムに固有の分岐命令が消滅し、元の各プログラムの命令流中の各命令がデータ依存関係のみで関係付けられる。これによって、複数のプログラムの命令流から一つのＶＬＩＷ命令流を生成することが可能となり、より高い並列度を得ることができる。
【図面の簡単な説明】
【００３０】
【図１】本発明によるＶＬＩＷ命令の生成方法を説明するための図である。
【図２】本発明によるＶＬＩＷ命令の形式の例を示す図である。
【図３】本発明によるＶＬＩＷ命令を実行するプロセッサの第一の構成例を示す図である。
【図４】ストア判定ユニットの一実施例を示す図である。
【図５】本発明によるＶＬＩＷ命令を実行するプロセッサの第二の構成例を示す図である。
【図６】本発明によるＶＬＩＷ命令を実行するプロセッサの第三の構成例を示す図である。
【図７】条件分岐処理ユニットの一実施例を示す図である。
【図８】ＶＬＩＷ命令を生成するための元のプログラムの命令流の一例を示す図である。
【図９】従来のＶＬＩＷ命令列と本発明により生成されるＶＬＩＷ命令列との比較説明をするための図である。
【図１０】複数のプログラムから単一のＶＬＩＷ命令流を生成する例を説明するための図である。
【符号の説明】
【００３１】
２  主記憶
１０  命令フェッチ部
１１  命令発行部
１２  ロードユニット
１３  ストアユニット
１４  内部演算ユニット
１５  ストア条件判定ユニット
１６  汎用レジスタファイル
１７  ロード／ストアユニット
１８  ロード／ストア判定ユニット
１９  条件分岐処理ユニット
４１、５１  条件データバッファ
４２、５２  出力ゲート
４３、５３  条件判定回路
４４、５４  セレクタ
５５  分岐先加算器
【図１】
0003705367.tif 000002
【図２】
0003705367.tif 000003
【図３】
0003705367.tif 000004
【図４】
0003705367.tif 000005
【図５】
0003705367.tif 000006
【図６】
0003705367.tif 000007
【図７】
0003705367.tif 000008
【図８】
0003705367.tif 000009
【図９】
0003705367.tif 000010
【図１０】
0003705367.tif 000011