(57)【要約】【課題】並列発行可否判定の必要な命令と不要な命令をプロセッサにおいて効率よく連続的に処理可能とする。【解決手段】プロセッサ１は、実行ユニット１２１〜１２４と、命令ユニット１０を含む。命令ユニット１０は、命令間の依存関係に基づいた並列発行可否判定を行うべき対象命令であるか否かを、命令ストリームに含まれる命令単位で識別する。そして、命令ユニット１０は、命令ストリームに含まれる第１の命令が対象命令である場合に、第１の命令とこれに引き続く少なくとも１つの命令との間での依存関係の検出結果に基づいて、命令ユニット１２１〜１２４に並列発行する命令数を調整する。さらに、命令ユニット１０は、第１の命令が対象命令でない場合に、第１の命令を含む予め定められた固定数の命令からなる命令グループを、命令グループ内での依存関係の検出結果に拘わらず無条件に実行ユニット１２１〜１２４に並列発行する。【選択図】図１
2010257199.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行ユニットと、
命令ストリームをデコードし、前記複数の実行ユニットへの命令発行処理を行うよう構成された命令ユニットと、
を備え、
前記命令発行処理は、
（ａ）命令間の依存関係に基づいた並列発行可否判定を行うべき対象命令であるか否かを、前記命令ストリームに含まれる命令単位で識別すること；
（ｂ）前記命令ストリームに含まれる第１の命令が前記対象命令である場合、前記第１の命令とこれに引き続く少なくとも１つの命令との間での依存関係の検出結果に基づいて、前記複数の実行ユニットに並列発行する命令数を調整すること；及び
（ｃ）前記第１の命令が前記対象命令でない場合、前記第１の命令を含む予め定められた固定数の命令からなる命令グループを、前記命令グループ内での依存関係の検出結果に拘わらず無条件に前記複数の実行ユニットに並列発行すること、
を含む、プロセッサ。
【請求項２】
前記固定数はＮ（Ｎは２以上の整数）であり、前記処理（ｂ）で並列発行される命令の最大数はＭ（ＭはＮより小さい正の整数）個である、請求項１に記載のプロセッサ。
【請求項３】
前記命令ストリームに含まれるＮ個の命令をクロックサイクル内で並行してデコードするデコード部と、
前記デコード部によってデコードされるＮ個の命令のうちの先頭命令が前記対象命令であるか否かを識別する命令種別識別部と、
前記先頭命令を含むＭ個の命令に対する並列発行可否判定を行うことにより、前記複数の実行ユニットに並列発行する命令数を調整する発行制御部と、
前記先頭命令が前記対象命令である場合に、前記デコード部によってデコードされるＮ個の命令のうち、前記Ｍ個の命令を除く他の（Ｎ−Ｍ）個の命令の前記複数の実行ユニットへの発行を抑止する発行抑止部と、
を備える、請求項２に記載のプロセッサ。
【請求項４】
前記処理（ｃ）を行う際に、前記命令ユニットは、前記第１の命令を除く前記命令グループ内の命令が前記対象命令であるか否かに拘わらず、前記命令グループを前記複数の実行ユニットに並列発行する、請求項１〜３のいずれか１項に記載のプロセッサ。
【請求項５】
前記命令グループの先頭に位置する命令は、前記対象命令でないことを示す命令コードを含み、
前記命令グループの先頭を除く前記命令グループ内の命令の少なくとも一部は、前記対象命令であることを示す命令コードを含む、請求項１〜４のいずれか１項に記載のプロセッサ。
【請求項６】
前記先頭命令が前記対象命令でない場合、前記発行抑止部は、前記（Ｎ−Ｍ）個の命令に前記対象命令が含まれるか否かに拘わらず、前記（Ｎ−Ｍ）個の命令を前記複数の実行ユニットに並列発行する、請求項３に記載のプロセッサ。
【請求項７】
前記命令ユニットと前記複数の実行ユニットの間に配置され、前記命令ユニットから発行された命令と前記複数の実行ユニットで既に実行中の先行命令との間で依存関係を検出し、前記命令ユニットから発行された命令のうち前記先行命令との間で依存関係がある命令の実行を待機させるよう構成された実行制御部をさらに備える、請求項１〜６のいずれか１項に記載のプロセッサ。
【請求項８】
プロセッサが有する複数の実行ユニットに対する命令発行の制御方法であって、
（ａ）命令間の依存関係に基づいた並列発行可否判定を行うべき対象命令であるか否かを、命令ストリームに含まれる命令単位で識別すること；
（ｂ）前記命令ストリームに含まれる第１の命令が前記対象命令である場合、前記第１の命令とこれに引き続く少なくとも１つの命令との間での依存関係の検出結果に基づいて、前記複数の実行ユニットに並列発行する命令数を調整すること；及び
（ｃ）前記第１の命令が前記対象命令でない場合、前記第１の命令を含む予め定められた固定数の命令からなる命令グループを、前記命令グループ内での依存関係の検出結果に拘わらず無条件に前記複数の実行ユニットに並列発行すること、
を含む、制御方法。
【請求項９】
前記固定数はＮ（Ｎは２以上の整数）であり、前記ステップ（ｂ）で並列発行される命令の最大数はＭ（ＭはＮより小さい正の整数）個である、請求項８に記載の方法。
【請求項１０】
前記ステップ（ｂ）は、
前記命令ストリームに含まれるＮ個の命令のうちの先頭命令が前記対象命令であるか否かを識別すること；
前記先頭命令を含むＭ個の命令に対する並列発行可否判定を行うことにより、前記複数の実行ユニットに並列発行する命令数を調整すること；及び
前記先頭命令が前記対象命令である場合に、前記Ｎ個の命令のうち、前記Ｍ個の命令を除く他の（Ｎ−Ｍ）個の命令の前記複数の実行ユニットへの発行を抑止すること、
を含む、請求項９に記載の方法。
【請求項１１】
前記ステップ（ｃ）では、前記第１の命令を除く前記命令グループ内の命令が前記対象命令であるか否かに拘わらず、前記命令グループが前記複数の実行ユニットに並列発行される、請求項８〜１０のいずれか１項に記載の方法。
【請求項１２】
前記命令グループの先頭に位置する命令は、前記対象命令でないことを示す命令コードを含み、
前記命令グループの先頭を除く前記命令グループ内の命令の少なくとも一部は、前記対象命令であることを示す命令コードを含む、請求項８〜１１のいずれか１項に記載の方法。
【請求項１３】
前記ステップ（ｃ）は、
前記先頭命令が前記対象命令でない場合に、前記（Ｎ−Ｍ）個の命令に前記対象命令が含まれるか否かに拘わらず、前記（Ｎ−Ｍ）個の命令を前記複数の実行ユニットに並列発行すること、
を含む、請求項１０に記載の方法。
【請求項１４】
（ｄ）前記命令ユニットから発行された命令と前記複数の実行ユニットで既に実行中の先行命令との間で依存関係を検出し、前記命令ユニットから発行された命令のうち前記先行命令との間で依存関係がある命令の実行を待機させること、
をさらに含む、請求項８〜１３のいずれか１項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数命令の同時実行が可能なスーパースカラ方式のプロセッサに関する。
【背景技術】
【０００２】
プロセッサの命令実行性能を高めるために、パイプライン方式が採用されている。パイプライン方式では、命令の実行過程を複数のステージに分割し、各ステージを別々のハードウェアで実現する。複数のステージの各々は、別個の命令に関する処理を並列して行える。このため、パイプライン方式によれば、理論的には、１クロックサイクルで１命令を実行することが可能となる。
【０００３】
プロセッサの命令実行性能をさらに向上させ、１クロックサイクルで複数命令を同時に実行するためには、さらに、命令レベルでの並列処理が必要となる。１クロックサイクルでの複数命令の同時実行を可能とするプロセッサの機構として、スーパースカラ及びＶＬＩＷ（Very Long Instruction Word）が知られている。
【０００４】
スーパースカラでは、プロセッサ自身が命令間の依存関係を検出することで並列発行可否を判別し、並列発行可能と判定された複数の命令を複数の実行ユニットに同時に発行する。ここで、実行ユニットとは、例えば、ロード／ストアユニット、整数演算ユニット、浮動小数点加算器、浮動小数点乗算器などである。
【０００５】
一方、ＶＬＩＷでは、コンパイラが、実行コード生成時に命令間の依存関係を解析し、並列発行可能な命令組み合わせを含むＶＬＩＷ命令を生成する。ＶＬＩＷ命令は、パケット又はスロットと呼ばれる複数の領域を有しており、各パケット（スロット）は、プロセッサ内の複数の実行ユニットのいずれかに対応付けられており、各スロットには対応する実行ユニットを制御する命令が埋め込まれる。プロセッサは、１つのＶＬＩＷ命令をデコードすると、ＶＬＩＷ命令内に含まれるパケット（スロット）間の依存関係を考慮することなく、複数パケットの命令を同時に複数の実行ユニットに発行する。つまり、ＶＬＩＷでは、並列発行可能な命令がコンパイラによって明示的に指定されるため、プロセッサ自身は、命令間の依存関係に基づいて並列発行可否を判定する必要がない。よって、ＶＬＩＷでは、スーパースカラに比べて命令発行ユニットのハードウェア構成を単純化できる。
【０００６】
特許文献１は、ＶＬＩＷモードとスーパースカラモードとの間で切り替え可能なプロセッサを開示している。ＶＬＩＷモードは、プロセッサが、命令間の依存関係の検出に基づく同時発行可否の判定を行わない動作モードである。一方、スーパースカラモードでは、特許文献１のプロセッサは、命令間の依存関係を検出し、同時発行可能命令を選択して実行ユニットに発行する。
【０００７】
特許文献１のＶＬＩＷモードとスーパースカラモードの切り替えは、プロセッサにおける実行プログラムの切り替えに応じて行われる。例えば、ＶＬＩＷモードでのアプリケーションプログラムの実行中に割り込みが発生し、スーパースカラモードで実行すべき割り込み処理用のシステムプログラムに分岐する際に動作モードが切り替えられる。
【０００８】
また、特許文献１に開示されたプロセッサは、マルチプログラミング（マルチプロセス）環境下での実行プログラム（実行プロセス）の切り替えに応じて動作モードの切り替えを行う。例えば、ＶＬＩＷモードに対応したアプリケーションプログラムから、ＶＬＩＷモードに未対応でありスーパースカラモードで実行すべきアプリケーションプログラムに実行プログラムを切り替える際に、動作モードをＶＬＩＷモードからスーパースカラモードに切り替える。
【０００９】
上述のように、特許文献１に開示されたプロセッサは、プログラム切り替え処理に付随して動作モードを切り替える。よって、特許文献１のプロセッサは、モード切り替えの際に、新たな命令のフェッチ、デコード及び演算ユニットへの発行を停止するとともに、モード切り替え前に既に各実行ユニットに発行済みで実行中の命令の完了を待つ。そして、特許文献１のプロセッサは、実行中の命令がなくなった後に、モード切り替え後のプログラムに対応したものとなるようにＰＳＷ（Program Status Word）更新を行い、依存関係検出ハードウェアの動作切り替えを行った後に、モード切り替え後のプログラムの命令フェッチを開始する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平９−２７４５６７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１に開示されたプロセッサは、実行プログラムの切り替え処理に付随して動作モードの切り替えを行うものである。このため、特許文献１のプロセッサは、モード切り替え時の命令実行停止期間が長いという問題がある。例えば、ＶＬＩＷモードからスーパースカラモードへ切り替える場合、ＶＬＩＷモードで発行された命令が完了するまで、スーパースカラモードで実行される命令のフェッチ、デコードは開始されない。命令実行停止期間が長いことは、命令実行性能の向上を抑制する要因となるため好ましくない。
【課題を解決するための手段】
【００１２】
本発明の第１の態様は、プロセッサである。当該プロセッサは、複数の実行ユニットと、命令ユニットを含む。前記命令ユニットは、命令ストリームをデコードし、前記複数の実行ユニットへの命令発行処理を行うよう構成されている。さらに、前記命令発行処理は、以下の処理（ａ）〜（ｃ）を含む。
（ａ）命令間の依存関係に基づいた並列発行可否判定を行うべき対象命令であるか否かを、前記命令ストリームに含まれる命令単位で識別すること；
（ｂ）前記命令ストリームに含まれる第１の命令が前記対象命令である場合、前記第１の命令とこれに引き続く少なくとも１つの命令との間での依存関係の検出結果に基づいて、前記複数の実行ユニットに並列発行する命令数を調整すること；及び
（ｃ）前記第１の命令が前記対象命令でない場合、前記第１の命令を含む予め定められた固定数の命令からなる命令グループを、前記命令グループ内での依存関係の検出結果に拘わらず無条件に前記複数の実行ユニットに並列発行すること。
【００１３】
本発明の第２の態様は、プロセッサが有する複数の実行ユニットに対する命令発行の制御方法である。当該方法は、以下のステップ（ａ）〜（ｃ）を含む。
（ａ）命令間の依存関係に基づいた並列発行可否判定を行うべき対象命令であるか否かを、命令ストリームに含まれる命令単位で識別すること；
（ｂ）前記命令ストリームに含まれる第１の命令が前記対象命令である場合、前記第１の命令とこれに引き続く少なくとも１つの命令との間での依存関係の検出結果に基づいて、前記複数の実行ユニットに並列発行する命令数を調整すること；及び
（ｃ）前記第１の命令が前記対象命令でない場合、前記第１の命令を含む予め定められた固定数の命令からなる命令グループを、前記命令グループ内での依存関係の検出結果に拘わらず無条件に前記複数の実行ユニットに並列発行すること。
【００１４】
上述した本発明の各態様によれば、命令間の依存関係に基づいた並列発行可否判定が必要な対象命令であるか否かを、プロセッサ自身が、１つのプログラム（命令ストリーム）に含まれる命令単位で識別することができる。さらに、プロセッサは、並列発行可否判定の要否の識別結果に応じて、（ｉ）並列発行する命令数を命令間の依存関係の検出結果に基づいて調整する動作と、（ｉｉ）予め定められた固定数の命令をこれらの命令間での依存関係の検出結果に拘わらず無条件に並列発行する動作と、を切り替えることができる。
【００１５】
つまり、本発明の各態様によれば、プロセッサは、並列発行可否判定の必要な命令と不要な命令が混在しているプログラム（命令ストリーム）を処理することができ、特許文献１に開示されたプロセッサで必要であったプログラム切り替え処理が不要となる。
【発明の効果】
【００１６】
上述した本発明の各態様によれば、プログラム切り替え処理に起因する命令実行停止期間を伴うことなく、並列発行可否判定の必要な命令と不要な命令を効率よく連続的に処理でき、プロセッサの命令実行性能の低下を抑制できる。
【図面の簡単な説明】
【００１７】
【図１】発明の実施の形態１にかかるプロセッサの構成を示すブロック図である。
【図２】発明の実施の形態１におけるオペコードマップの一例を示す図である。
【図３】発明の実施の形態１にかかるプロセッサの命令発行動作を示す図である。
【図４】発明の実施の形態２にかかるプロセッサの構成を示すブロック図である。
【図５】発明の実施の形態２におけるオペコードマップの一例を示す図である。
【図６】発明の実施の形態２にかかるプロセッサの命令発行動作を示す図である。
【発明を実施するための形態】
【００１８】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１９】
＜発明の実施の形態１＞
図１は、プロセッサ１の構成例を示すブロック図である。図１の例は、プロセッサ１は、命令ユニット１０及び４つの実行ユニット１２１〜１２４を含む。
【００２０】
始めに命令ユニット１０による命令発行動作の概要について説明する。命令ユニット１０は、命令ストリームに含まれる命令を順次取得してデコードする。そして、命令ユニット１０は、命令間の依存関係に基づく並列発行可否判定の要否を、デコードされた命令単位で識別する。以下では、並列発行可否判定が必要な命令を"通常命令"と呼び、並列発行可否判定が不要な命令を"非通常命令"と呼ぶ。本実施の形態では、"通常命令"と"非通常命令"は、異なる命令コード（オペコード）が付与されている。命令ユニット１０は、命令デコードによって得られる各命令のオペコードを参照することで、"通常命令"と"非通常命令"を識別すればよい。
【００２１】
図２のオペコードマップは、オペコードビット数が６ビットである場合に、プロセッサ１に供給される命令ストリーム中の各命令に付与されるオペコードの具体例を示している。図２の例では、オペコードの前半部分（００Ｈ〜２ＦＨ）が"通常命令"に割り当てられ、後半部分（３０Ｈ〜３ＦＨ）が"非通常命令"に割り当てられている。
【００２２】
命令ユニット１０は、デコードした命令が"通常命令"であった場合、当該命令とこれに引き続く少なくとも１つの命令との間で依存関係を検出し、依存関係の検出結果に基づいて、当該命令と共に並列発行する命令数を調整する。なお、並列発行可否に関する命令間の依存関係は、具体的にはオペランドの依存関係である。よって、並列発行可否の依存関係は、各命令のソース・オペランドとディスティネーション・オペランドを比較することで検出すればよい。
【００２３】
図１の例では、命令ユニット１０は、"通常命令"と判定された命令とこれに引き続く１命令の合計２命令の間で依存関係を検出する。２命令の間に依存関係が無いと判定された場合、命令ユニット１０は、２命令を実行ユニット１２１〜１２４のうち２つに並列発行する。一方、２命令の間に依存関係があると判定された場合、命令ユニット１０は、"通常命令"と判定された命令のみを実行ユニット１２１〜１２４のうち１つに発行する。なお、命令のアウトオブオーダ発行が許容されるアーキテクチャが採用されている場合には、３命令以上の間で並列発行可否に関する依存関係を調べるように命令ユニット１０を構成してもよい。
【００２４】
また、命令ユニット１０は、デコードした命令が"非通常命令"であった場合、当該命令とこれに引き続く３命令を含む合計４命令を、これら４命令の間での依存関係の検出結果に拘わらず無条件に、４個の実行ユニット１２１〜１２４に並列発行する。
【００２５】
次に、図１に示した命令ユニット１０以外の各要素について順に説明する。実行制御部１１は、命令ユニット１０と実行ユニット１２１〜１２４の間に配置されている。実行制御部１１は、命令ユニット１０から発行された命令と実行ユニット１２１〜１２４で既に実行中の先行命令との間で依存関係を検出する。つまり、実行制御部１１は、先行命令の結果を後続命令で使用する場合に生じる「先行命令の実行結果待ちの依存関係」を検出し、いわゆるＲＡＷ（Read After Write）ハザードを回避するために後続命令の実行を待機させる。後続命令の待機時間を短縮するため、実行ユニット１２１〜１２４の実行結果を実行制御部１１に供給するバイパス回路を設け、いわゆるフォワーディングを行ってもよい。
【００２６】
実行ユニット１２１〜１２４は、命令に応じた処理を実行する演算器群である。実行ユニット１２１〜１２４は、例えば、ロード／ストアユニット、整数演算ユニット、浮動小数点加算器、浮動小数点乗算器などである。
【００２７】
レジスタファイル１３は、実行ユニット１２１〜１２４への入力データ及びこれらの実行ユニットの実行結果を格納するレジスタ群を含む。
【００２８】
続いて以下では、図１に示した命令ユニット１０に含まれる各要素について説明する。命令バッファ１００は、命令キャッシュ（不図示）から順次取得される命令ストリームを格納する。本実施の形態では、命令ストリーム中の各命令は、"通常命令"及び"非通常命令"のうちいずれであるかを識別可能なオペコードを含む。
【００２９】
命令デコーダ１０１〜１０４は、命令バッファ１００からプログラム実行順序に従って４つの命令を読み出してデコードする。命令デコーダ１０１及び１０２によってデコードされた前半の２命令は、発行制御部１０７に供給される。命令デコーダ１０３及び１０４は、後半の２命令をデコードする。命令デコーダ１０３及び１０４は、それぞれ実行ユニット１２３及び１２４と一対一に対応付けられており、デコードした命令が対応する実行ユニット１２３又は１２４で実行される"非通常命令"であった場合に、これら２命令を実行制御部１１に供給する。一方、デコードした命令が"通常命令"である場合、またはデコードした命令が実行ユニット１２１及び１２２で実行される"非通常命令"であった場合、命令デコーダ１０３及び１０４は、後半２命令の実行制御部１１への供給を抑止する。
【００３０】
命令種別検出部１０５は、デコーダ１０１によってデコードされた先頭命令が、"通常命令"であるか"非通常命令"であるかを判別する。検出部１０５による判定結果は、命令数算出部１０６に供給される。
【００３１】
命令数算出部１０６は、今回のクロックサイクルにおいて並列発行される命令数を算出し、算出した命令数に相当する命令を命令バッファ１００から削除し、命令キャッシュ（不図示）から新たな命令のフェッチを行う。具体的に述べると、命令数算出部１０６は、命令種別検出部１０５から"通常命令"であるか"非通常命令"であるかの判定結果を受信する。また、命令数算出部１０６は、発行制御部１０７が並列発行可能と判定した命令数を受信する。これら２つの情報に基づいて、命令数算出部１０６は、並列発行される命令数が１命令、２命令、又は４命令のいずれであるかを決定する。つまり、命令種別検出部１０５が"非通常命令"を検出した場合、命令数算出部１０６は、発行制御部１０７による並列発行可否の判定結果に拘わらず、並列発行命令数が４命令であると決定する。一方、命令種別検出部１０５が"通常命令"を検出した場合、命令数算出部１０６は、発行制御部１０７による並列発行可否の判定結果に応じて、並列発行命令数が１命令であるか又は２命令であるかを決定する。
【００３２】
発行制御部１０７は、命令デコーダ１０１及び１０２でデコードされた２命令の依存関係を検出し、これら２命令の並列発行可否を判定する。発行制御部１０７は、並列発行可能と判定した場合に２命令を発行し、並列発行不可と判定した場合に１命令（デコーダ１０１によってデコードされた先頭命令）を発行する。なお、発行制御部１０７は、なるべく２命令の並列発行が可能となるように、レジスタリネーミングを行うことによって命令間の依存関係を積極的に解消してもよい。
【００３３】
図３は、本実施の形態にかかるプロセッサ１の動作例を示す図である。プロセッサ１は、命令ストリーム中の命令を順次デコードしてインオーダで発行する。図３に示す命令ストリームは、命令Ａ１〜Ａ４及び命令Ｂ１〜Ｂ８を含む。このうち、図中で右端に位置する命令Ａ１が先に実行完了すべき命令である。また、命令Ａ１〜Ａ４は、並列発行可否判定の必要な"通常命令"として定義された命令であり、命令Ｂ１〜Ｂ８は、並列発行可否判定が不要な"非通常命令"として定義された命令であるとする。
【００３４】
始めに、命令デコーダ１０１〜１０４は、命令Ａ１、Ａ２、Ｂ１、及びＢ２を取り込んでデコードする。ここで、命令Ｂ１及びＢ２は、実行ユニット１２１及び１２２のいずれかで実行される命令であるとする。命令Ａ１が"通常命令"であるため、発行制御部１０７は、命令Ａ１及びＡ２のオペランド間の依存関係に基づいて、これら２命令の並列発行可否を判定する。図３の例では、命令Ａ１及びＡ２の間に並列発行を制約する依存関係は無く、これら２命令が並列発行される（クロックサイクルＣ１）。一方、命令デコーダ１０３及び１０４によってデコードされる命令Ｂ１及びＢ２の発行は抑止される。命令Ｂ１及びＢ２は、実行ユニット１２３及び１２４で実行される命令ではないためである。この結果、サイクルＣ１では、命令Ａ１及びＡ２の２命令が並列発行される。命令数算出部１０６は、当サイクルで発行される２命令分のバッファ領域に新たな命令をフェッチするよう命令バッファ１００を制御する。
【００３５】
次に、命令デコーダ１０１〜１０４は、命令Ｂ１〜Ｂ４を取り込んでデコードする。ここで、命令Ｂ１〜Ｂ４は、実行ユニット１２１〜１２４でそれぞれ実行される命令であるとする。この場合、命令ユニット１０は、４命令（Ｂ１〜Ｂ４）を無条件に並列発行する（クロックサイクルＣ２）。命令数算出部１０６は、当サイクルで発行される４命令分のバッファ領域に新たな命令をフェッチするよう命令バッファ１００を制御する。なお、発行制御部１０７は、非通常命令である命令Ｂ１及びＢ２の依存関係を検出するよう動作してもよい。非通常命令である命令Ｂ１及びＢ２の依存関係はコンパイラによって既に解決されているため、発行制御部１０７による判定結果は常に並列発行可能となる。このため、発行制御部１０７による並列発行動作を停止しなくても特に問題は生じない。もちろん、命令ユニット１０は、命命デコーダ１０１及び１０２でデコードされた命令が"非通常命令"であった場合に、発行制御部１０７による判定動作を停止又はバイパスするよう構成されてもよい。
【００３６】
続いて、命令デコーダ１０１〜１０４は、命令Ｂ５〜Ｂ８を取り込んでデコードする。ここで、命令Ｂ５〜Ｂ８は、実行ユニット１２１〜１２４でそれぞれ実行される命令であるとする。この場合、命令ユニット１０は、４命令（Ｂ５〜Ｂ８）を無条件に並列発行する（クロックサイクルＣ３）。命令数算出部１０６は、当サイクルで発行される４命令分のバッファ領域に新たな命令をフェッチするよう命令バッファ１００を制御する。
【００３７】
以上に述べたように、本実施の形態にかかるプロセッサ１は、命令間の依存関係に基づいた並列発行可否判定が必要な命令であるか否かを、１つのプログラム（命令ストリーム）に含まれる命令単位で識別することができる。さらに、プロセッサ１は、並列発行可否判定の要否の識別結果に応じて、（ｉ）並列発行する命令数を命令間の依存関係の検出結果に基づいて調整する動作と、（ｉｉ）予め定められた固定数の命令をこれらの命令間での依存関係の検出結果に拘わらず無条件に並列発行する動作と、を切り替えることができる。
【００３８】
つまり、プロセッサ１は、並列発行可否判定の必要な命令と不要な命令が混在しているプログラム（命令ストリーム）を処理することができ、特許文献１に開示されたプロセッサで必要であったプログラム切り替え処理が不要となる。よって、プロセッサ１は、プログラム切り替え処理に起因する命令実行停止期間を伴わずに、並列発行可否判定の必要な命令と不要な命令を効率よく連続的に処理でき、命令実行性能の低下を抑制できる。
【００３９】
＜発明の実施の形態２＞
本実施の形態にかかるプロセッサ２は、各クロックサイクルでデコードされる命令グループ中の先頭命令が"通常命令"であるか"非通常命令"であるか否かに基づいて並列発行する命令数を調整する。例えば、プロセッサ２は、各クロックサイクルにおいて４命令単位でデコードを行い、このうち先頭命令（第１命令）が"非通常命令"である場合には、後続の第２〜第４命令が"通常命令"であるか"非通常命令"であるかに関わらず、４命令を無条件に発行する。つまり、プロセッサ２は、命令グループ中の１命令（具体的には先頭命令）のみの識別結果に基づいて、（ｉ）並列発行する命令数を命令間の依存関係の検出結果に基づいて調整する動作と、（ｉｉ）予め定められた固定数の命令を無条件に並列発行する動作との切り替えを行う。
【００４０】
このように動作するプロセッサ２によれば、"非通常命令"が割り当てられるオペコード領域の使用効率を向上させることができる。本実施の形態におけるオペコードマップの具体例について図５を用いて説明する。図５のオペコードマップが図３のそれと異なる点は、"非通常命令"として定義されている命令数が削減されている点である。本実施の形態では、プロセッサ２によって同時にデコードされる命令グループ中の１命令のみを"非通常命令"として定義しておけばよいためである。例えば、４命令からなる命令グループのうち先頭命令の識別結果を利用する場合、先頭命令をデコードする命令デコーダ１０１に対応付けられた実行ユニット（例えば実行ユニット１２１）で実行される命令に関してのみ、"非通常命令"を定義しておけばよい。実行ユニット１２１がロード／ストアユニットである場合、ロード／ストア命令とＮＯＰ（No Operation）命令のみを"非通常命令"として定義しておけばよく、その他の加算命令、乗算命令などを"非通常命令"として定義しなくてもよい。
【００４１】
図４は、プロセッサ２の構成例を示すブロック図である。命令ユニット２０は、発行抑止部２０８を有する。発行抑止部２０８は、命令デコーダ１０１によってデコードされた先頭命令の命令種別に応じて、命令デコーダ１０３及び１０４でデコードされた後半の２命令の発行を制御する。具体的に述べると、発行抑止部２０８は、先頭命令が"非通常命令"であった場合に、後半の２命令を実行制御部１１へ供給する。一方、発行抑止部２０８は、先頭命令が"通常命令"であった場合に、後半の２命令の実行制御部１１への供給を抑止する。発行抑止部２０８は、命令種別検出部１０５による命令種別検出結果に応じて動作すればよい。発行抑止部２０８を除く図４中の他の構成要素は図１に示したものと同様であるため、これらに関する説明をここでは省略する。
【００４２】
図６は、プロセッサ２の動作例を示す図である。プロセッサ２は、命令ストリーム中の命令を順次デコードしてインオーダで発行する。図６に示す命令ストリームは、命令Ａ１〜Ａ１０及び命令Ｂ１〜Ｂ２を含む。このうち、図中で右端に位置する命令Ａ１が先に実行完了すべき命令である。また、命令Ａ１〜Ａ１０は、並列発行可否判定の必要な"通常命令"として定義された命令であり、命令Ｂ１〜Ｂ２は、並列発行可否判定が不要な"非通常命令"として定義された命令であるとする。
【００４３】
始めに、命令デコーダ１０１〜１０４は、命令Ａ１、Ａ２、Ｂ１、及びＡ３を取り込んでデコードする。このとき、命令Ａ１が"通常命令"であるため、発行制御部１０７は、命令Ａ１及びＡ２のオペランド間の依存関係に基づいて、これら２命令の並列発行可否を判定する。図６の例では、命令Ａ１及びＡ２の間に並列発行を制約する依存関係は無く、これら２命令が並列発行される（クロックサイクルＣ１）。一方、命令デコーダ１０３及び１０４によってデコードされる命令Ｂ１及びＡ３の発行は、発行抑止部２０８によって抑止される。この結果、サイクルＣ１では、命令Ａ１及びＡ２の２命令が発行される。命令数算出部１０６は、当サイクルで発行される２命令分のバッファ領域に新たな命令をフェッチするよう命令バッファ１００を制御する。
【００４４】
次に、命令デコーダ１０１〜１０４は、命令Ｂ１、Ａ３、Ａ４、及びＡ５を取り込んでデコードする。この場合、先頭命令である命令Ｂ１が"非通常命令"であるため、命令ユニット１０は、４命令（Ｂ１、Ａ３、Ａ４、及びＡ５）を無条件に並列発行する（クロックサイクルＣ２）。命令数算出部１０６は、当サイクルで発行される４命令分のバッファ領域に新たな命令をフェッチするよう命令バッファ１００を制御する。
【００４５】
続いて、命令デコーダ１０１〜１０４は、命令Ｂ２、Ａ６、Ａ７、及びＡ８を取り込んでデコードする。この場合、先頭命令である命令Ｂ２が"非通常命令"であるため、命令ユニット１０は、４命令（Ｂ２、Ａ６、Ａ７、及びＡ８）を無条件に並列発行する（クロックサイクルＣ３）。命令数算出部１０６は、当サイクルで発行される４命令分のバッファ領域に新たな命令をフェッチするよう命令バッファ１００を制御する。
【００４６】
本実施の形態にかかるプロセッサ２は、プロセッサ１と同様に、プログラム切り替え処理に起因する命令実行停止期間を伴わずに、並列発行可否判定の必要な命令と不要な命令を効率よく連続的に処理でき、命令実行性能の低下を抑制できる。さらに、プロセッサ２は、"非通常命令"と"通常命令"の両方で定義しておくべき命令数を削減できるため、オペコード領域の利用効率を向上させることができる。
【００４７】
＜その他の実施の形態＞
【００４８】
上述した発明の実施の形態１及び２では、並列発行される最大命令数が４命令である場合について具体的に説明したが、これらの実施形態が一例に過ぎないことはもちろんである。本発明の実施の形態にかかるプロセッサは、並列発行される最大命令数が２命令以上であればよい。
【００４９】
また、発明の実施の形態１及び２では、並列発行可否の判定結果に基づいて並列発行命令数を調整する場合に並列発行され得る命令の最大数（具体的には２命令）が、無条件に並列発行を行う場合の命令数（具体的には４命令）より小さい場合について説明した。このような構成は、並列発行可否判定に要する処理量を考慮すると妥当な構成である。しかしながら、並列発行可否の判定結果に基づいて並列発行命令数を調整する場合に並列発行され得る命令の最大数を、無条件に並列発行を行う場合の命令数と同じにしてもよい。
【００５０】
また、発明の実施の形態１及び２では、インオーダ発行を行うプロセッサに関して具体的に説明したが、本発明はアウトオブオーダ発行を行うプロセッサにも適用可能である。
【００５１】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【符号の説明】
【００５２】
１、２  プロセッサ
１０  命令ユニット
１１  実行制御部
１３  レジスタファイル
１００  命令バッファ
１０１〜１０４  命令デコーダ
１０５  命令種別検出部
１０６  命令数算出部
１０７  発行制御部
１２１〜１２４  実行ユニット
２０８  発行抑止部
【図１】
2010257199.tif 000003
【図２】
2010257199.tif 000004
【図３】
2010257199.tif 000005
【図４】
2010257199.tif 000006
【図５】
2010257199.tif 000007
【図６】
2010257199.tif 000008