(57)【要約】【課題】並列処理による効率的な処理を実現しながら、クロスバイパス使用の発生を抑制できるようにして、命令処理に要する時間の短縮をはかる。【解決手段】命令を蓄積する命令バッファ２と、この命令バッファ２から同時に発行される複数の命令を並列的にデコードしうる複数のデコーダ４と、これらのデコーダ４によってデコードされた命令を処理する複数の演算器６と、これらの演算器５の全てを用いて命令を処理しながら命令を処理する頻度を複数の演算器５のうちの一の演算器に偏らせるように、命令バッファ２から複数のデコーダ４へ発行される命令の数を制限しうる命令発行数制限手段２２とをそなえて構成する。【選択図】　　　　図１
2004030424.tif 000002
【特許請求の範囲】
【請求項１】
命令を蓄積する命令バッファと、
該命令バッファから同時に発行される複数の命令を並列的にデコードしうる複数のデコーダと、
該複数のデコーダによってデコードされた命令を処理する複数の演算器と、
該複数の演算器の全てを用いて前記命令を処理しながら前記命令を処理する頻度を該複数の演算器のうちの一の演算器に偏らせるように、該命令バッファから該複数のデコーダへ発行される命令の数を制限しうる命令発行数制限手段とをそなえて構成されたことを特徴とする、命令処理装置。
【請求項２】
各デコーダとそのデコーダによってデコードされた命令を処理すべき演算器との対応関係が、一の演算器に２以上のデコーダを対応付けるようにして予め設定され、
該命令発行数制限手段が、命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた前記２以上のデコーダのうちの一部のデコーダへ該命令バッファから命令を発行するのを禁止することにより、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、請求項１記載の命令処理装置。
【請求項３】
該複数の演算器のうちの一の演算器での処理結果を他の演算器に投入するためのクロスバイパスを使用する頻度が高くなる状況を検出する検出手段をさらにそなえ、
該検出手段により前記クロスバイパスの使用頻度が高くなる状況を検出した場合に、該命令発行数制限手段が起動されることを特徴とする、請求項１または請求項２に記載の命令処理装置。
【請求項４】
命令を命令バッファに蓄積し、
該命令バッファから複数の命令を同時に発行し、
該命令バッファから発行された該複数の命令を複数のデコーダで並列的にデコードし、
該複数のデコーダによってデコードされた命令を複数の演算器で処理し、
該複数の演算器の全てを用いて前記命令を処理しながら前記命令を処理する頻度を該複数の演算器のうちの一の演算器に偏らせるように、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、命令処理方法。
【請求項５】
各デコーダとそのデコーダによってデコードされた命令を処理すべき演算器との対応関係を、一の演算器に２以上のデコーダを対応付けるようにして予め設定し、
命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた前記２以上のデコーダのうちの一部のデコーダへ該命令バッファから命令を発行するのを禁止することにより、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、請求項４記載の命令処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばスーパースカラ方式やアウトオブオーダ方式等の命令実行制御方式を採用した情報処理装置において、命令を命令実行部へ供給して処理するための命令処理装置および命令処理方法に関する。
【０００２】
【従来の技術】
図６は一般的な情報処理装置における命令処理部の構成を示すブロック図で、この図６に示す命令処理部は、命令キャッシュメモリ１，命令バッファ２，命令制御部３，デコーダ４，リザベーションステーション５，演算器６，結果レジスタ７およびオペランドレジスタ８をそなえて構成されている。
【０００３】
命令キャッシュメモリ１は、主記憶上の命令領域の一部のコピーを格納している装置である。
命令バッファ〔図中ではＩ（Ｉｎｓｔｒｕｃｔｉｏｎ）−ＢＵＦＦＥＲと表記〕２は、命令アドレス生成部（図１の符号２０参照）により命令キャッシュメモリ１からフェッチされた命令語群（例えば最大で４８個の命令）を一時的に蓄え、命令制御部３からの指示に応じて後段のデコーダ４へ命令を発行するものである。
【０００４】
命令制御部３は、命令バッファ２からデコーダ４への命令発行動作を制御するもので、命令バッファ２に対し、この命令バッファ２に蓄積されている命令をデコーダ４へ発行するための指示を行なうものである。図６に示す装置では、デコーダ４が４つそなえられているので、命令制御部３は、最大で同時に４つの命令をデコーダ４へ発行するように、命令バッファ２への指示を行なう。また、命令制御部３は、スーパースカラ方式のメリットを最大限に発揮させるべく、通常、命令バッファ２に命令が蓄積されている時には、なるべく多くの命令、つまり同時発行可能な最大数の命令（図６に示す装置では４つの命令）を発行するように指示を行なっている。
【０００５】
デコーダ４としてはＤ０，Ｄ１，Ｄ２，Ｄ３の４つがそなえられている。これらのデコーダＤ０，Ｄ１，Ｄ２，Ｄ３は、命令バッファ２から同時に発行された４つの命令をそれぞれ受信して並列的にデコードするもので、各デコーダ４は、受信した命令から、実際に情報処理装置（命令処理部）が命令の内容を認識することの可能な形式であるオペコードとその命令の対象であるオペランドとを抽出するものである。
【０００６】
リザベーションステーション５としてはＲＳＥ（Ｒｅｓｅｒｖａｔｉｏｎ　Ｓｔａｔｉｏｎ　ｆｏｒ　Ｅｘｅｃｕｔｉｏｎ）ＡとＲＳＥＢとの２つがそなえられている。これらのリザベーションステーションＲＳＥＡおよびＲＳＥＢは、それぞれ、デコーダ４によってデコードされた命令を、最大で８個、蓄積するものである。デコードされた各命令は、演算器６での演算処理対象となるまでリザベーションステーションＲＳＥＡまたはＲＳＥＢに蓄積され、演算器６が前の命令に基づく演算処理を終了すると、直ちに演算器６へ送られるようになっている。
【０００７】
演算器６としてはＥＸ（Ｅｘｅｃｕｔｉｏｎ　ｕｎｉｔ）ＡとＥＸＢとの２つがそなえらえれている。これらの演算器ＥＸＡおよびＥＸＢは、それぞれ、リザベーションステーションＲＳＥＡおよびＲＳＥＢに蓄積された命令に基づく演算処理（命令処理）を順次実行し、その演算処理の結果を後段の結果レジスタ７に送るものである。結果レジスタ〔図中ではＲＲ（Ｒｅｓｕｌｔ　Ｒｅｇｉｓｔｅｒ）と表記〕７は、演算器６（ＥＸＡおよびＥＸＢ）による演算結果を書き込まれるもので、各演算器６の後段に１つずつそなえられている。
【０００８】
演算器６間のクロスバイパス使用が発生せず、書き込まれた演算結果を同じ演算器６に再投入する場合（即ち、演算器ＥＸＡでの演算結果を演算器ＥＸＡに再投入する場合または演算器ＥＸＢでの演算結果を演算器ＥＸＢに再投入する場合；図６のルート１０参照）は、図６に示すルート１０のごとく、演算器６による演算結果は、結果レジスタ７に書き込まれた後、直ぐにまた同じ演算器６に投入されて演算処理のために利用されるようになっている。
【０００９】
演算器６間のクロスバイパス使用が発生し、書き込まれた演算結果を別の演算器６に投入する場合（即ち、演算器ＥＸＡでの演算結果を演算器ＥＸＢに投入する場合または演算器ＥＸＢでの演算結果を演算器ＥＸＡに投入する場合）は、図６に示すルート９のごとく、一方の演算器６による演算結果は、結果レジスタ７に書き込まれた後、他方の演算器６に投入する前にオペランドレジスタ〔図中ではＯＰＲ（ＯＰｅｒａｎｄ　Ｒｅｇｉｓｔｅｒ）と表記〕８に一旦書き込まれてから、他方の演算器６に投入されて演算処理のために利用されるようになっている。
【００１０】
従って、クロスバイパス使用が発生したとき、図６に示すルート９のごとく、一方の演算器６による演算結果は、結果レジスタ７に書き込まれた後、オペランドレジスタ８に一旦書き込まれてから、他方の演算器６に送られて演算処理のために利用されるようになっている。
なお、クロスバイパスとは、ある演算器６で得られた演算結果を別の演算器６で用いて演算処理を行なう必要が生じた場合に、前者の演算器６から後者の演算器６へ演算結果を送るための経路（正に図６に示すルート９）のことである。
【００１１】
上述のごとく構成された命令処理部においては、基本的に、デコーダＤ０およびＤ２でデコードされた命令はリザベーションステーションＲＳＥＡに蓄積されてから演算器ＥＸＡに投入される一方、デコーダＤ１およびＤ３でデコードされた命令はリザベーションステーションＲＳＥＢに蓄積されてから演算器ＥＸＢに投入される。また、分岐先の命令は、必ず、デコーダＤ０でデコードされる。そして、命令バッファ２に命令が蓄積されている限り、命令制御部３は、命令バッファ２から４つのデコーダ４（Ｄ０〜Ｄ１）へ４つの命令を同時に発行させるように、命令バッファ２の発行動作を制御する。
【００１２】
【発明が解決しようとする課題】
ところで、上述した従来の命令処理手法では、スーパースカラ方式のメリットを最大限に発揮させるために、発行できる限りの命令を演算器６に供給した方が良いと考えられており、命令発行数を敢えて絞ることは行なわれていない。従って、図６に示す装置では、前述した通り、命令バッファ２に命令が蓄積されている限り、常に、同時発行可能な最大数の命令（図６に示す装置では４つの命令）を命令バッファ２からデコーダ４へ発行している。
【００１３】
また、図６に示す装置では、演算器６に投入される前の命令を演算器６ごとに蓄えるスプリットキュー方式と呼ばれる方式が採用されており、このような方式では、一方の演算器６で演算した結果を他方の演算器６での演算に用いる場合（演算器６間のクロスバイパス使用が発生した場合）、結果レジスタ７およびオペランドレジスタ８を経由してその演算結果を他方の演算器６へ投入しなければならない。このため、演算結果を同じ演算器６での演算に用いる場合（演算器６間のクロスバイパス使用が発生していない場合）よりも、命令処理に要する時間は、オペランドレジスタ８を経由するデータ移動の時間〔１制御周期（以下、１τという）〕だけ余分にかかることになる。
【００１４】
このようなクロスバイパス使用は、同時発行可能な最大数の命令を発行して２つの演算器６を同時並列的に動作させる場合に発生しやすくなる。特に、十数個程度の命令からなるショートループ処理を多数回繰り返し実行する際に各ショートループ処理においてクロスバイパス使用が発生すると、命令を速やかに演算器６に投入することができず、上述のようなデータ移動に伴う時間遅れが累積されて、命令処理に要する時間が大幅に増大することになる。
【００１５】
ここで、演算器６間のクロスバイパス使用が発生するショートループ処理の具体例について、図５および図７を参照しながら説明する。
下記命令（１）〜（１２）からなる命令列は、クロスバイパス使用が発生するショートループ処理の一例である。
なお、図５の左側には、下記ショートループ処理を図６に示す装置で実行した場合において、各命令（１）〜（１２）をデコードするデコーダ４（Ｄ０〜Ｄ３）と、各命令（１）〜（１２　）に基づく演算処理を実行する演算器６（ＥＸＡ，ＥＸＢ）とが示されている。この図５において“―”を記入されている命令（つまり、ロード命令や分岐命令）は、演算器６を使用しないで処理される。
【００１６】
また、図７には、図６に示す装置において下記ショートループ処理を３回繰り返し実行した際の、処理内容と時間（制御時間τ）との関係が示されている。この図７において、左側の括弧付き数字はそれぞれ下記命令（１）〜（１２）に対応し、左欄には、その括弧付き数字に対応する命令が記入されている。また、左欄における（　）内のＥＸＡ／ＥＸＢは、各命令がどちらの演算器６により処理されたかを表している。さらに、上側の数字１〜４０は、時間の経過（制御時間τ）を表している。
【００１７】
図７において、ｐ，ｂ，ａ，ｔ，ｍ，ｂ，ｒ，ｘは処理内容（ステージ）を示すもので、ｐは“ｐｒｉｏｒｉｔｙ”、ｂは“ｂｕｆｆｅｒ”、ａは“ａｄｄｒｅｓｓ”、ｔは“ＴＬＢ／ＴＡＧ”、ｍは“ｍａｔｃｈ”、ｒは“ｒｅｓｕｌｔ”、ｘは“ｅｘｅｃｕｔｅ”の各ステージを表し、各命令は、それぞれのステージを経て処理される。
【００１８】
（１）　　ｌｄｕｈ　［％ｇ２＋％ｌ４］，　％ｇ２
（２）　　ｓｕｂｃｃ　％ｇ２，　％ｌ０，　％ｇ０
（３）　　ｂｌｅｕ，ｐｎ　％ｉｃｃ，　（ｐｃ＋０ｘ１４）
（４）　　ｏｒ　％ｇ０，　％ｇ２，　％ｇ５
（５）　　ｓｕｂｃｃ　％ｏ３，　％０ｘ１，　％ｏ３
（６）　　ｂｎｅ，ｐｔ　％ｉｃｃ，　（ｐｃ＋０ｘｆｆｆｆｆｅ８ｃ）
（７）　　ａｄｄ　％ｇ５，　％ｌ２，　％ｏ０
（８）　　ｌｄｕｂ　［％ｏ０＋％ｏ２］，　％ｇ２
（９）　　ｓｕｂｃｃ　％ｇ２，　％ｏ７，　％ｇ０
（１０）　ｂｎｅ，ｐｔ　％ｉｃｃ，　（ｐｃ＋０ｘ１５４）
（１１）　ａｎｄ　％ｇ５，　％ｌ１，　％ｇ２
（１２）　ｓｌｌ　％ｇ２，　０ｘ１，　％ｇ２
【００１９】
さて、（１）のｌｄｕｈ命令（ロード命令）は、デコーダＤ１でデコードされ、アドレス％ｇ２に値が書き込まれるのを待ち、その値を用いてアドレス％ｇ２＋％ｌ４からデータをロードし、アドレス％ｇ２に書き込む。次の行（２）のｓｕｂｃｃ命令（減算命令）は、デコーダＤ２でデコードされ、アドレス％ｇ２に値が書き込まれるのを待ち、その値を用いて演算器ＥＸＡで処理される。
【００２０】
次に、（３）のｂｌｅｕ命令（分岐命令）は、デコーダＤ３でデコードされ、このｂｌｅｕ命令のディレイスロット命令である、（４）のｏｒ命令（論理和命令）は、デコーダＤ０でデコードされ、演算器ＥＸＡで、（５）のｓｕｂｃｃ命令（減算命令）の後に実行される。（３）のｂｌｅｕ命令は、ｐｎが指定されて分岐しないので、次に、ｏｒ命令の次の行（５）のｓｕｂｃｃ命令が、デコーダＤ１でデコードされ、演算器ＥＸＢで実行される。
【００２１】
続いて、（６）のｂｎｅ命令（分岐命令）は、デコーダＤ２でデコードされ、このｂｎｅ命令のディレイスロット命令である、（７）のａｄｄ命令（加算命令）が、デコーダＤ３でデコードされ、演算器ＥＸＢで実行される。このとき、（７）のａｄｄ命令が（４）のｏｒ命令の結果を用いるため、図７に示すように、制御時間８τで演算器ＥＸＡから演算器ＥＸＢへのクロスバイパス使用が発生する。このクロスバイパス使用は、２回目のループ中の制御時間２０τや、３回目のループ中の制御時間３２τでも発生している。
【００２２】
ついで、（７）のａｄｄ命令による演算結果を利用して、（６）のｂｎｅ命令の分岐先である、（８）のｌｄｕｂ命令（ロード命令）が実行される。このｌ　ｄｕｂ命令は、ｂｎｅ命令の分岐先の命令であるので、デコーダＤ０でデコードされる。このｌｄｕｂ命令によってアドレス％ｏ０＋％ｏ２からロードされたデータは、ｒステージでアドレス％ｇ２に書き込まれる。ｌｄｕｂ命令の次の行（９）のｓｕｂｃｃ命令（減算命令）は、デコーダＤ１でデコードされ、アドレス％ｇ２にｒステージで値が書き込まれるのを待ち、その値を用いて演算器ＥＸＢで処理される。
【００２３】
（９）のｓｕｂｃｃ命令が値を待っている間に、（１０）のｂｎｅ命令（分岐命令）のディレイスロット命令である（１１）のａｎｄ命令と、その後の（１２）のｓｌｌ命令とが先に実行される。ここで、（１０）のｂｎｅ命令はデコーダＤ２でデコードされる。
（１１）のａｎｄ命令（論理積命令）が、デコーダＤ３でデコードされ演算器ＥＸＢで実行された後、そのａｎｄ命令による演算結果を利用して、ｂｎｅ命令の分岐先であるｓｌｌ命令が、デコーダＤ０でデコードされ演算器ＥＸＡで実行される。このとき、（１１）のａｎｄ命令が演算器ＥＸＢで実行されるとともに（１２）のｓｌｌ命令が演算器ＥＸＡで実行されるため、図７に示すように、制御時間１１τで演算器ＥＸＡから演算器ＥＸＢへのクロスバイパス使用が発生する。このクロスバイパス使用は、２回目のループ中の制御時間２３τや、３回目のループ中の制御時間３５τでも発生している。
【００２４】
そして、（１２）のｓｌｌ命令による演算結果を用いて、再び、（１）のｌｄｕｈ命令によってアドレス％ｇ２＋％ｌ４からデータがロードされ、アドレス％ｇ２に書き込まれ、上述のような処理が繰り返される。
図６に示す装置を用いた場合、図７に示すように、命令（１）〜（１２）からなるショートループを１周処理するのに要する時間は１２τであり、上述したように、１周する間にクロスバイパスの使用が２回発生しており、このクロスバイパスの使用により、上述のごとく、命令を速やかに演算器６に投入することができず、命令処理に要する時間が大幅に増大することになる。
【００２５】
そこで、２つの演算器６のうちの一方のみを使用して演算を行なうようにすれば、上述のようなクロスバイパス使用は発生しなくなるが、一方の演算器６のみを使用すると、並列処理を行なえなくなるため、クロスバイパス使用を発生させながら命令処理を行なっている場合よりも処理時間が増大してしまうことになる。従って、並列処理による効率的な処理を実現しながら、クロスバイパス使用の発生を抑制してさらなる処理時間の短縮をも実現することが望まれている。
【００２６】
本発明は、このような課題に鑑み創案されたもので、並列処理による効率的な処理を実現しながら、クロスバイパス使用の発生を抑制できるようにして、命令処理に要する時間の短縮をはかった、命令処理装置および命令処理方法を提供することを目的とする。
【００２７】
【課題を解決するための手段】
上記目的を達成するために、本発明の命令処理装置（請求項１）は、命令を蓄積する命令バッファと、該命令バッファから同時に発行される複数の命令を並列的にデコードしうる複数のデコーダと、該複数のデコーダによってデコードされた命令を処理する複数の演算器と、該複数の演算器の全てを用いて前記命令を処理しながら前記命令を処理する頻度を該複数の演算器のうちの一の演算器に偏らせるように、該命令バッファから該複数のデコーダへ発行される命令の数を制限しうる命令発行数制限手段とをそなえて構成されたことを特徴としている。
【００２８】
このとき、各デコーダとそのデコーダによってデコードされた命令を処理すべき演算器との対応関係を、一の演算器に２以上のデコーダを対応付けるようにして予め設定し、該命令発行数制限手段が、命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた前記２以上のデコーダのうちの一部のデコーダへ該命令バッファから命令を発行するのを禁止することにより、該命令バッファから該複数のデコーダへ発行される命令の数を制限するように構成してもよい（請求項２）。
【００２９】
また、該複数の演算器のうちの一の演算器での処理結果を他の演算器に投入するためのクロスバイパスを使用する頻度が高くなる状況を検出する検出手段をさらにそなえ、該検出手段により前記クロスバイパスの使用頻度が高くなる状況を検出した場合に、該命令発行数制限手段を起動するように構成してもよい（請求項３）。
【００３０】
一方、本発明の命令処理方法（請求項４）は、命令を命令バッファに蓄積し、該命令バッファから複数の命令を同時に発行し、該命令バッファから発行された該複数の命令を複数のデコーダで並列的にデコードし、該複数のデコーダによってデコードされた命令を複数の演算器で処理し、該複数の演算器の全てを用いて前記命令を処理しながら前記命令を処理する頻度を該複数の演算器のうちの一の演算器に偏らせるように、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴としている。
【００３１】
このとき、各デコーダとそのデコーダによってデコードされた命令を処理すべき演算器との対応関係を、一の演算器に２以上のデコーダを対応付けるようにして予め設定し、命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた前記２以上のデコーダのうちの一部のデコーダへ該命令バッファから命令を発行するのを禁止することにより、該命令バッファから該複数のデコーダへ発行される命令の数を制限してもよい（請求項５）。
【００３２】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
〔１〕本発明の一実施形態の説明
図１は本発明の一実施形態としての命令処理装置の構成を示すブロック図、図２は本実施形態における要部（命令発行数制限装置および命令制御部）の構成を示す図である。
【００３３】
図１に示すように、本実施形態の命令処理装置は、情報処理装置内にそなえられ、図６に示した命令処理部におけるものと同様の命令キャッシュメモリ１，命令バッファ２，デコーダ４，リザベーションステーション５，演算器６，結果レジスタ７およびオペランドレジスタ８をそなえるほか、命令アドレス生成部２０，命令制御部２１，命令発行数制限装置２２，クロスバイパス検出器２３，分岐履歴蓄積部２４，ＲＳＥ＿ＵＳＥＤカウンタ２５およびタイマ２６をそなえて構成されている。なお、図１中、既述の符号と同一の符号は、同一の部分もしくはほぼ同一の部分を示しているので、その詳細な説明は省略する。
【００３４】
命令アドレス生成部２０は、命令アドレスを生成して命令キャッシュメモリ１から命令をフェッチするものであり、命令バッファ（Ｉ−ＢＵＦＦＥＲ）２は、命令アドレス生成部２０により命令キャッシュメモリ１からフェッチされた命令語群（例えば最大で４８個の命令）を一時的に蓄え、後述する命令制御部２１からの指示に応じて後段のデコーダ４へ命令を発行するものである。
【００３５】
命令制御部２１は、図６に示した命令制御部３と同様、命令バッファ２からデコーダ４への命令発行動作を制御するもので、命令バッファ２に対し、この命令バッファ２に蓄積されている命令をデコーダ４へ発行するための指示を行なうものである。本実施形態においても、デコーダ４（Ｄ０〜Ｄ３）が４つそなえられており、命令制御部２１は、通常、同時発行可能な最大数の命令（本実施形態では４つの命令）を発行するように命令バッファ２に対し指示を行なっている。
【００３６】
また、本実施形態の命令制御部２１は、後述する命令発行数制限装置２２からの指示（信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥ）に従って、命令バッファ２からデコーダＤ３への命令発行を禁止する機能も有している。このような機能を実現するため、命令制御部２１は、図２に示すように、ＡＮＤゲート２１ａを有している。このＡＮＤゲート２１ａは、命令発行数制限装置２２からの信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥと、命令バッファ２からデコーダＤ３への命令発行を有効化するための信号Ｅ３＿ＶＡＬＩＤとの論理積を算出し、その論理積（信号Ｅ３＿ＶＡＬＩＤ＿ＴＯ＿Ｄ３）を命令バッファ２への指示として出力するものである。
【００３７】
つまり、命令発行数制限装置２２からの信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥは通常“１”に立ち上がっており、命令制御部２１が通常発行する、命令バッファ２からデコーダＤ３への命令発行を有効化するための信号Ｅ３＿ＶＡＬＩＤはＡＮＤゲート２１ａを通過し、このＡＮＤゲート２１ａの出力Ｅ３＿ＶＡＬＩＤ＿ＴＯ＿Ｄ３は“１”となり、命令バッファ２からデコーダＤ３への命令発行は通常通り行なわれる。これに対し、命令発行数制限装置２２からの信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥが、後述するごとく“０”になると、信号Ｅ３＿ＶＡＬＩＤはＡＮＤゲート２１ａを通過できず、このＡＮＤゲート２１ａの出力Ｅ３＿ＶＡＬＩＤ＿ＴＯ＿Ｄ３は“０”となり、命令バッファ２からデコーダＤ３への命令発行は禁止されることになる。
【００３８】
命令発行数制限装置（命令発行数制限手段）２２は、２つの演算器６（ＥＸＡ，ＥＸＢ）の両方を用いて命令を処理しながら命令処理頻度を２つの演算器６のうちの一方の演算器６（本実施形態ではＥＸＡ）に偏らせるように、命令バッファ２からデコーダ４（Ｄ０〜Ｄ３）へ発行される命令の数を制限しうるものである。
【００３９】
ここで、本実施形態においても、図６に示した装置と同様、デコーダＤ０およびＤ２でデコードされた命令はリザベーションステーションＲＳＥＡに蓄積されてから演算器ＥＸＡに投入される一方、デコーダＤ１およびＤ３でデコードされた命令はリザベーションステーションＲＳＥＢに蓄積されてから演算器ＥＸＢに投入される。つまり、各デコーダ４とそのデコーダ４によってデコードされた命令を処理すべき演算器６との対応関係が、１つの演算器６に２つのデコーダ４を対応付けるようにして予め設定されている（ＥＸＡとＤ０，Ｄ２とが対応付けられ、ＥＸＢとＤ１，Ｄ３とが対応付けらている）。なお、本実施形態においても、分岐先の命令は、必ずデコーダＤ０でデコードされる。
【００４０】
そして、本実施形態では、後述するごとくクロスバイパスを使用する頻度が高くなる状況が検出されると、命令発行数制限装置２２が、起動され、命令制御部２１へ出力される信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥを“１”から“０”に切り換え、命令処理頻度を偏らせるべき演算器ＥＸＡ以外の演算器ＥＸＢに対応付けられた２つのデコーダＤ１，Ｄ３の一方（ここでは、デコーダＤ３）へ命令バッファ２から命令を発行するのを禁止するようになっている。これにより、命令バッファ２から４つのデコーダ４へ発行される命令の数が制限される。
【００４１】
なお、信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥの切換は、図２を参照しながら後述するごとく、命令発行数制限装置２２にそなえられた反転素子２２ａ，２２ｃおよびＡＮＤゲート２２ｂにより行なわれる。また、クロスバイパスを使用する頻度が高くなる状況が検出されていない通常の状態では、命令発行数制限装置２２から命令制御部２１へ出力される信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥは“１”に維持される。このような状態では、上述のような命令発行数の制限は行なわれず、図６に示した装置と同様、命令バッファ２に命令が蓄積されている限り、命令制御部２２は、命令バッファ２から４つのデコーダ４（Ｄ０〜Ｄ１）へ４つの命令を同時に発行させるように、命令バッファ２の発行動作を制御する。
【００４２】
上述したように、本実施形態では、クロスバイパスを使用する頻度が高くなる状況が検出されると、命令発行数制限装置２２が起動されるが、このような状況を検出するための手段として、クロスバイパス検出器２３および分岐履歴蓄積部２４がそなえられている。
【００４３】
クロスバイパス検出器（クロスバイパス検出手段）２３は、ルート（クロスバイパス）９における信号の通過を監視し信号の通過を確認した場合、クロスバイパスが使用されたものと判断し、信号ＥＸ＿ＣＲＯＳＳ＿ＢＹＰＡＳＳを“０”から“１”に立ち上げることにより、クロスバイパスの使用が検出された旨を命令発行数制限装置２２に通知するものである。
【００４４】
分岐履歴蓄積部〔図中ではＢＲＨＩＳ（ＢＲａｎｃｈ　ＨＩＳｔｏｒｙ）と表記〕２４は、所定の命令列を繰り返し処理するループの存在を検出するループ検出手段として機能するものである。このＢＲＨＩＳ２４は、分岐命令の履歴を蓄積・保存するもので、蓄積された分岐命令の履歴に基づいて、ショートループの存在を検出するようになっている。ここでいうショートループとは、命令キャッシュメモリ１に全て納まるような個数の命令からなる命令群であって、最後の命令を処理したらまた最初の命令に戻って処理を行なうというように何度も繰り返し処理を行なうことになる命令群のことである。
【００４５】
特に、本実施形態のＢＲＨＩＳ２４は、分岐命令の数を計数するカウンタ（図示省略）を有しており、例えば１６回同じアドレスで分岐することを確認したらショートループが存在するものと判断し、信号ＳＨＯＲＴ＿ＬＯＯＰを“０”から“１”に立ち上げることにより、ショートループの存在が検出された旨を命令発行数制限装置２２に通知するものである。
【００４６】
ＲＳＥ＿ＵＳＥＤカウンタ（カウンタ）２５は、各リザベーションステーション５（ＲＳＥＡ，ＲＳＥＢ）に蓄積されている命令の数を計数するもので、各リザベーションステーション５に蓄積されている命令の数が０のときに“１”となり、その命令数が１以上になると“０”となる信号ＵＳＥ＿ＲＳＥ＿０が、カウンタ２５から命令発行数制限装置２２に通知されるようになっている。
【００４７】
リザベーションステーション５を使用中の命令数、つまりリザベーションステーション５に蓄えられている命令数が少ないときは、演算器６に投入される命令が不足して演算器６が演算処理を行なわない時間が発生する可能性がある。これを防ぐために、この時は命令発行数は絞らずにリザベーションステーション５への命令供給数を増やすことが必要になる。
【００４８】
そこで、本実施形態では、上述のごとくリザベーションステーション５における命令数が所定数以上（本実施形態では１以上）である場合に命令発行数制限装置２２を起動する一方、リザベーションステーション５における命令数が０の時には、命令発行数制限装置２２を起動せず命令発行数の制限を行なわないようにしてデコーダ４からリザベーションステーション５への命令供給数を増やす。
【００４９】
そして、命令発行数制限装置２２では、図２に示すように、反転素子２２ａ，２２ｃおよびＡＮＤゲート２２ｂがそなえられている。反転素子２２ａは、カウンタ２５からの信号ＵＳＥ＿ＲＳＥ＿０を反転して出力するものであり、ＡＮＤゲート２２ｂは、ＢＲＨＩＳ２４からの信号ＳＨＯＲＴ＿ＬＯＯＰと反転素子２２ａからの信号とクロスバイパス検出器２３からの信号ＥＸ＿ＣＲＯＳＳ＿ＢＹＰＡＳＳとの論理積を出力するものであり、反転素子２２ｃは、ＡＮＤゲート２２ｂからの信号を反転し信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥとして命令制御部２１のＡＮＤゲート２１ａへ出力するものである。
【００５０】
従って、本実施形態では、ショートループの存在とクロスバイパス使用の発生とが同時に検出された場合（つまりクロスバイパスを使用する頻度が高くなる状況）であって、且つ、リザベーションステーション５に蓄積された命令が０でないことが検出されている場合に、ＢＲＨＩＳ２４からの信号ＳＨＯＲＴ＿ＬＯＯＰおよびクロスバイパス検出器２３からの信号ＥＸ＿ＣＲＯＳＳ＿ＢＹＰＡＳＳがいずれも　“１”になり、カウンタ２５からの信号ＵＳＥ＿ＲＳＥ＿０が“０”になる。これに応じて、命令発行数制限装置２２が起動され、命令制御部２１へ出力される信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥが“１”から“０”に切り換えられ、命令バッファ２からデコーダＤ３への命令発行が禁止される。
【００５１】
このようにして、本実施形態では、図１に示すような命令処理装置を情報処理装置内に組み込み、処理中のプログラム（命令列）中にショートループの存在を確認し、且つ、クロスバイパス使用の発生を検出し、且つ、リザベーションステーション５を使用中の命令数が０でないことを検出した場合、最大同時命令発行数が“４”から“３”に制限される。
【００５２】
さらに、本実施形態では、命令発行数制限装置２２の起動後に所定条件を満たした時にこの命令発行数制限装置２２による制限動作が解除されるようになっている。このような解除を行なう解除機能（解除手段）は、命令発行数制限装置２２にそなえられており、タイマ２６を用いて制限動作の解除タイミングが決定されている。
【００５３】
ここで、タイマ２６は、命令発行数制限装置２２が命令発行数を制限する信号を出力した後（つまり、命令発行数制限装置２２が起動され、信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥを“１”から“０”に切り換えられた後）の経過時間を計時するものである。
【００５４】
そして、タイマ２６により計時された経過時間が所定時間に達した時、上記解除機能が、命令発行数制限装置２２から命令制御部２１へ、命令発行数を絞る機能を無効にする信号を送る。つまり、命令発行数制限装置２２から命令制御部２１へ出力される信号ＳＥＴ＿３＿ＤＥＣＯＤＥ＿ＭＯＤＥを“０”から“１”に切り換え、命令発行数制限装置２２による制限動作を解除する。
【００５５】
次に、上述のごとく構成された本実施形態の命令処理装置（命令発行数制限装置２２）の動作を、図３に示すフローチャート（ステップＳ１〜Ｓ８）に従って簡単に説明する。
本実施形態の命令処理装置が命令処理を開始すると、常時、クロスバイパス検出器２３によりクロスバイパス使用状況が監視され（ステップＳ１）、ＢＲＨＩＳ２４によりショートループの存在が監視され（ステップＳ２）、カウンタ２５によりリザベーションステーション５に蓄積されている命令の数が計数される（ステップＳ３）。
【００５６】
そして、ショートループの存在とクロスバイパス使用の発生とが同時に検出され、且つ、リザベーションステーション５に蓄積された命令が０でないことが検出されると（ステップＳ４のＹＥＳルート）、上述した通り、命令発行数制限装置２２が起動され、命令バッファ２からデコーダＤ３への命令発行が禁止され、最大同時命令発行数が“４”から“３”に制限される（ステップＳ５）。これにより、２つの演算器６の両方を用いて命令を処理しながら命令処理頻度を一方の演算器６（ＥＸＡ）に偏らせることができる。
【００５７】
命令発行数の制限動作が開始されると同時に、タイマ２６の動作も起動され、制限動作開始後の経過時間の計測が行なわれる（ステップＳ６）。
そして、タイマ２６により計時された経過時間が所定時間に達した時（もしくはショートループ処理の終了が検出された時；ステップＳ７のＹＥＳルート）、命令発行数制限装置２２における解除機能により、命令発行数の制限動作が解除され（ステップＳ８）、ステップＳ１の処理へ戻る。
【００５８】
ついで、本実施形態の命令処理装置の、より具体的な動作について、図４および図５を参照しながら説明する。特に、ここでは、上述した命令命令（１）〜（１２）からなる命令列（クロスバイパス使用が発生するショートループ処理）を、本実施形態の命令処理装置において、命令発行数を制限した状態で処理する時の動作について説明する。
【００５９】
なお、図５の右側には、下記ショートループ処理を図１に示す装置で実行した場合において、各命令（１）〜（１２）をデコードするデコーダ４（Ｄ０〜Ｄ２）と、各命令（１）〜（１２）に基づく演算処理を実行する演算器６（ＥＸＡ，ＥＸＢ）とが示されている。この図５において“―”を記入されている命令（つまり、ロード命令や分岐命令）は、演算器６を使用しないで処理される。
【００６０】
また、図４には、図１に示す装置において、命令発行数制限下で上記ショートループ処理〔命令列（１）〜（１２）〕を３回繰り返し実行した際の、処理内容と時間（制御時間τ）との関係が示されている。この図４においても、図７と同様、左側の括弧付き数字はそれぞれ上記命令（１）〜（１２）に対応し、左欄には、その括弧付き数字に対応する命令が記入されている。また、左欄における（　）内のＥＸＡ／ＥＸＢは、各命令がどちらの演算器６により処理されたかを表している。さらに、上側の数字１〜３２は、時間の経過（制御時間τ）を表している。さらに、図４においても、ｐ，ｂ，ａ，ｔ，ｍ，ｂ，ｒ，ｘは処理内容（ステージ）を示すもので、ｐは“ｐｒｉｏｒｉｔｙ”、ｂは“ｂｕｆｆｅｒ”、ａは“ａｄｄｒｅｓｓ”、ｔは“ＴＬＢ／ＴＡＧ”、ｍは“ｍａｔｃｈ”、ｒは“ｒｅｓｕｌｔ”、ｘは“ｅｘｅｃｕｔｅ”の各ステージを表し、各命令は、それぞれのステージを経て処理される。
【００６１】
さて、（１）のｌｄｕｈ命令（ロード命令）は、デコーダＤ１でデコードされ、アドレス％ｇ２に値が書き込まれるのを待ち、その値を用いてアドレス％ｇ２＋％ｌ４からデータをロードし、アドレス％ｇ２に書き込む。次の行（２）のｓｕｂｃｃ命令（減算命令）は、デコーダＤ２でデコードされ、アドレス％ｇ２に値が書き込まれるのを待ち、その値を用いて演算器ＥＸＡで処理される。
【００６２】
次に、（３）のｂｌｅｕ命令（分岐命令）は、デコーダＤ２でデコードされ、このｂｌｅｕ命令のディレイスロット命令である、（４）のｏｒ命令（論理和命令）は、デコーダＤ０でデコードされ、演算器ＥＸＢで実行される。このｏｒ命令は、アドレス％ｇ０の値を使用するが、アドレス％ｇ０の値は常に０であり、（５）のｓｕｂｃｃ命令（減算命令）との依存関係が無いので、このｓｕｂｃｃ命令と同時に実行される。このとき、（３）のｂｌｅｕ命令は、ｐｎが指定されて分岐しないので、次に、ｏｒ命令の次の行（５）のｓｕｂｃｃ命令が、デコーダＤ２でデコードされ、演算器ＥＸＡで実行される。
【００６３】
続いて、（６）のｂｎｅ命令（分岐命令）は、デコーダＤ０でデコードされ、このｂｎｅ命令のディレイスロット命令である、（７）のａｄｄ命令（加算命令）が、デコーダＤ１でデコードされ、演算器ＥＸＢで実行される。そして、このａｄｄ命令による演算結果を利用して、（６）のｂｎｅ命令の分岐先である、（８）のｌｄｕｂ命令（ロード命令）が実行される。このｌｄｕｂ命令は、ｂｎｅ命令の分岐先の命令であるので、デコーダＤ０でデコードされる。このｌｄｕｂ命令によってアドレス％ｏ０＋％ｏ２からロードされたデータは、ｒステージでアドレス％ｇ２に書き込まれる。ｌｄｕｂ命令の次の行（９）のｓｕｂｃｃ命令（減算命令）は、デコーダＤ１でデコードされ、アドレス％ｇ２にｒステージで値が書き込まれるのを待ち、その値を用いて演算器ＥＸＢで処理される。
【００６４】
（９）のｓｕｂｃｃ命令が値を待っている間に、（１０）のｂｎｅ命令（分岐命令）のディレイスロット命令である（１１）のａｎｄ命令と、その後の（１２）のｓｌｌ命令とが先に実行される。ここで、（１０）のｂｎｅ命令はデコーダＤ２でデコードされる。このとき、（１１）のａｎｄ命令は、演算器ＥＸＢで得られた、（４）のｏｒ命令による演算結果を用いて演算器ＥＸＡで処理されるため、図４に示すように、制御時間７τで演算器ＥＸＢから演算器ＥＸＡへのクロスバイパス使用が発生する。このクロスバイパス使用は、２回目のループ中の制御時間１６τや、３回目のループ中の制御時間２５τでも発生している。
【００６５】
（１１）のａｎｄ命令（論理積命令）が、デコーダＤ０でデコードされ演算器ＥＸＡで実行された後、そのａｎｄ命令による演算結果を利用して、ｂｎｅ命令の分岐先であるｓｌｌ命令が、デコーダＤ０でデコードされ演算器ＥＸＡで実行される。このとき、（１１）のａｎｄ命令も　（１２）のｓｌｌ命令も演算器ＥＸＡで実行されるため、図７（制御時間１１τ，２３τ，３５τ）に示すようなクロスバイパス使用は発生しない。
【００６６】
そして、（１２）のｓｌｌ命令による演算結果を用いて、再び、（１）のｌｄｕｈ命令によってアドレス％ｇ２＋％ｌ４からデータがロードされ、アドレス％ｇ２に書き込まれ、上述のような処理が繰り返される。
図１に示す装置を用いた場合、図４に示すように、命令（１）〜（１２）からなるショートループを１周処理するのに要する時間は９τであり、上述したように、１周する間にクロスバイパスの使用が１回だけ発生している。つまり、本実施形態の装置を用いることにより、命令処理が演算器ＥＸＢよりも演算器ＥＸＡで実行される頻度が高くなるため、クロスバイパスの使用回数が減り、ショートループを１周処理するのに要する時間を短縮することが可能になっている。
【００６７】
なお、（２）のｓｕｂｃｃ命令と（４）のｏｒ命令とは、図７に示す例では同じ演算器ＥＸＡで処理されているため、同時に処理できなかったが、図４に示す例では、異なる演算器ＥＸＡ，ＥＸＢにおいて同時に並列処理されることになるため、ショートループの処理時間がさらに短縮されている。
【００６８】
このように、本発明の一実施形態としての命令処理装置によれば、命令バッファ２からデコーダ４（Ｄ０〜Ｄ３）へ発行される命令の数を制限することにより、全ての演算器６（ＥＸＡ，ＥＸＢ）を用いて命令を処理しながら命令処理頻度が一つの演算器ＥＸＡに偏ることになり、この一つの演算器ＥＸＡによる演算結果が同一の演算器ＥＸＡに投入される可能性が高くなる。従って、上述したように、並列処理による効率的な処理を実現しながら、クロスバイパス使用の発生を抑制することができる。
【００６９】
特に、クロスバイパスの使用頻度が高くなる状況、具体的には、クロスバイパス使用が発生するショートループ処理を繰り返し実行するような状況を、クロスバイパス検出器２３およびＢＲＨＩＳ２４により検出した場合に、命令発行数制限装置２２が命令処理頻度を演算器ＥＸＡに偏るように命令発行数を制限することにより、クロスバイパス使用の発生が極めて有効に抑制され、命令処理に要する時間を確実に短縮することができる。
【００７０】
このとき、演算器ＥＸＢに対応付けられた２つのデコーダＤ１，Ｄ３のうちの一方のデコーダＤ３へ命令バッファ２から命令を発行するのを禁止することにより、容易に、全ての演算器６を用いて命令を処理しながら命令処理頻度を一つの演算器ＥＸＡに偏らせることができ、つまりはクロスバイパス使用の発生を極めて容易に抑制することができる。
【００７１】
また、本実施形態では、リザベーションステーション５における命令数が所定数以上である場合（本実施形態では１以上である場合）に命令発行数の制限を行ない、リザベーションステーション５における命令数が少ない時（命令数が０である時）には、命令発行数の制限を行なわないようにしてデコーダ４からリザベーションステーション５への命令供給数を増やすことにより、各演算器６が演算処理を行なわない時間が発生するのを確実に抑制している。
【００７２】
一方、クロスバイパス使用の発生頻度が高い状況はずっと継続するわけではないので、命令処理頻度を一つの演算器ＥＸＡに偏らせた状態を継続すると、クロスバイパス使用の発生を抑制することができたとしても、効率のよい並列処理を行なえず、逆に命令処理効率を低下させてしまうおそれがある。そこで、本実施形態では、命令発行数の制限動作の開始後に所定条件を満たした時（例えば所定時間の経過後，所定数の命令の処理後，ショートループ処理終了後など）に命令発行数の制限動作を解除することにより、命令処理状態を、命令処理頻度を一つの演算器ＥＸＡに偏らせない通常の状態、つまり命令を２つの演算器６で均等に処理する状態に復帰させることができ、より効率的な命令処理を実現することができる。
【００７３】
〔２〕その他
なお、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態では、デコーダ４の数が４、リザベーションステーション５の数が２、演算器６の数が２である場合について説明しているが、本発明は、これに限定されるものではない。
また、上述した実施形態では、命令発行数の制限動作を開始してから所定時間経過後にその制限動作を解除しているが、ショートループ処理の終了を検出し、その終了を検出した時点で制限動作を解除するようにしてもよい。
【００７４】
さらに、上述した実施形態では、命令処理装置により、上記命令（１）〜（１２）から成る命令群を処理する場合について説明したが、本発明の処理対象となる命令群は、これに限定されるものではない。
また、上述した実施形態では、命令処理頻度を演算器ＥＸＡに偏らせているが、デコーダＤ０またはＤ２からリザベーションステーションＲＳＥＡへの命令発行を制限することにより、演算器ＥＸＢに命令処理頻度を偏らせてもよく、この場合も上述した実施形態と同様の作用効果を得ることができる。
【００７５】
〔３〕付記
（付記１）　命令を蓄積する命令バッファと、
該命令バッファから同時に発行される複数の命令を並列的にデコードしうる複数のデコーダと、
該複数のデコーダによってデコードされた命令を処理する複数の演算器と、
該複数の演算器の全てを用いて前記命令を処理しながら前記命令を処理する頻度を該複数の演算器のうちの一の演算器に偏らせるように、該命令バッファから該複数のデコーダへ発行される命令の数を制限しうる命令発行数制限手段とをそなえて構成されたことを特徴とする、命令処理装置。
【００７６】
（付記２）　各デコーダとそのデコーダによってデコードされた命令を処理すべき演算器との対応関係が、一の演算器に２以上のデコーダを対応付けるようにして予め設定され、
該命令発行数制限手段が、命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた前記２以上のデコーダのうちの一部のデコーダへ該命令バッファから命令を発行するのを禁止することにより、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、付記１記載の命令処理装置。
【００７７】
（付記３）　該複数の演算器のうちの一の演算器での処理結果を他の演算器に投入するためのクロスバイパスを使用する頻度が高くなる状況を検出する検出手段をさらにそなえ、
該検出手段により前記クロスバイパスの使用頻度が高くなる状況を検出した場合に、該命令発行数制限手段が起動されることを特徴とする、付記１または付記２に記載の命令処理装置。
【００７８】
（付記４）　該検出手段として、前記クロスバイパスの使用を検出するクロスバイパス検出手段と、所定の命令列を繰り返し処理するループの存在を検出するループ検出手段とをそなえ、
該クロスバイパス検出手段により前記クロスバイパスの使用が検出され且つ該ループ検出手段により前記ループの存在が検出された場合に、該命令発行数制限手段が起動されることを特徴とする、付記３記載の命令処理装置。
【００７９】
（付記５）　該ループ検出手段が、分岐命令の履歴に基づいて前記ループの存在を検出することを特徴とする、付記４記載の命令処理装置。
（付記６）　該複数のデコーダによりデコードされ該複数の演算器に投入されるべき命令を一時的に蓄積するリザベーションステーションと、
該リザベーションステーションに蓄積されている命令の数を計数するカウンタとをさらにそなえ、
該カウンタにより計数された命令数が所定数以上である場合に、該命令発行数制限手段が起動されることを特徴とする、付記１〜付記５のいずれか一つに記載の命令処理装置。
【００８０】
（付記７）　該命令発行数制限手段の起動後に所定条件を満たした時に該命令発行数制限手段による制限動作を解除する解除手段をさらにそなえたことを特徴とする、付記１〜付記６のいずれか一つに記載の命令処理装置。
（付記８）　該命令発行数制限手段の起動後の経過時間を計時するタイマをさらにそなえ、
該タイマにより計時された前記経過時間が所定時間に達した時に、該解除手段が、該命令発行数制限手段による制限動作を解除することを特徴とする、付記７記載の命令処理装置。
【００８１】
（付記９）　命令を命令バッファに蓄積し、
該命令バッファから複数の命令を同時に発行し、
該命令バッファから発行された該複数の命令を複数のデコーダで並列的にデコードし、
該複数のデコーダによってデコードされた命令を複数の演算器で処理し、
該複数の演算器の全てを用いて前記命令を処理しながら前記命令を処理する頻度を該複数の演算器のうちの一の演算器に偏らせるように、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、命令処理方法。
【００８２】
（付記１０）　各デコーダとそのデコーダによってデコードされた命令を処理すべき演算器との対応関係を、一の演算器に２以上のデコーダを対応付けるようにして予め設定し、
命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた前記２以上のデコーダのうちの一部のデコーダへ該命令バッファから命令を発行するのを禁止することにより、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、付記９記載の命令処理方法。
【００８３】
（付記１１）　該複数の演算器のうちの一の演算器での処理結果を他の演算器に投入するためのクロスバイパスを使用する頻度が高くなる状況を検出し、
前記クロスバイパスの使用頻度が高くなる状況を検出した場合に、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、付記９または付記１０に記載の命令処理方法。
【００８４】
（付記１２）　前記クロスバイパスの使用を検出するとともに、所定の命令列を繰り返し処理するループの存在を検出し、
前記クロスバイパスの使用が検出され且つ前記ループの存在が検出された場合に前記クロスバイパスの使用頻度が高くなる状況であると判断し、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、付記１１記載の命令処理方法。
【００８５】
（付記１３）　分岐命令の履歴に基づいて前記ループの存在を検出することを特徴とする、付記１２記載の命令処理方法。
（付記１４）　該複数のデコーダによりデコードされ該複数の演算器に投入されるべき命令を一時的に蓄積するためにそなえられたリザベーションステーションにおける命令の数を計数し、
計数された命令数が所定数以上である場合に、該命令バッファから該複数のデコーダへ発行される命令の数を制限することを特徴とする、付記９〜付記１３のいずれか一つに記載の命令処理方法。
【００８６】
（付記１５）　命令発行数の制限動作の開始後に所定条件を満たした時に該制限動作を解除することを特徴とする、付記９〜付記１４のいずれか一つに記載の命令処理方法。
（付記１６）　該制限動作の開始後、所定時間が経過した時に、該制限動作を解除することを特徴とする、付記１５記載の命令処理方法。
【００８７】
【発明の効果】
以上詳述したように、本発明の命令処理装置および命令処理方法によれば、命令バッファから複数のデコーダへ発行される命令の数を制限することにより、複数の演算器の全てを用いて命令を処理しながら命令を処理する頻度が一つの演算器に偏ることになり、この一つの演算器による演算結果が同一の演算器に投入される可能性が高くなる。従って、並列処理による効率的な処理を実現しながら、クロスバイパス使用の発生を抑制することができるので、命令処理に要する時間を大幅に短縮することができる。
【００８８】
特に、クロスバイパスの使用頻度が高くなる状況、具体的には、クロスバイパス使用が発生するショートループ処理を繰り返し実行するような状況を検出した場合に、命令処理頻度を一つの演算器に偏るように命令発行数の制限を行なうことにより、クロスバイパス使用の発生が極めて有効に抑制され、命令処理に要する時間を確実に短縮することができる。
【００８９】
このとき、命令処理頻度を偏らせるべき演算器以外の各演算器に対応付けられた２以上のデコーダのうちの一部のデコーダへ命令バッファから命令を発行するのを禁止することにより、容易に、複数の演算器の全てを用いて命令を処理しながら命令処理頻度を一つの演算器に偏らせることができ、つまりはクロスバイパス使用の発生を極めて容易に抑制することができる。
【００９０】
また、リザベーションステーションにおける命令数が所定数以上である場合に命令発行数の制限を行ない、リザベーションステーションにおける命令数が少ない時には、命令発行数の制限を行なわないようにしてリザベーションステーションへの命令供給数を増やすことにより、各演算器が演算処理を行なわない時間が発生するのを確実に抑制することができる。
【００９１】
さらに、命令発行数の制限動作の開始後に所定条件を満たした時（例えば所定時間の経過後，所定数の命令の処理後）に命令発行数の制限動作を解除することにより、命令処理状態を、命令処理頻度を一つの演算器に偏らせない通常の状態、つまり命令を複数の演算器で均等に処理する状態に復帰させることができ、より効率的な命令処理を実現することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態としての命令処理装置の構成を示すブロック図である。
【図２】本実施形態における要部（命令発行数制限装置および命令制御部）の構成を示す図である。
【図３】本実施形態の命令発行数制限装置の動作を説明するためのフローチャートである。
【図４】図１に示す装置においてショートループ処理を３回繰り返し実行した際の、処理内容と時間との関係を示す図である。
【図５】ショートループ処理を図１および図６に示す装置で実行した場合において、各命令をデコードするデコーダと各命令に基づく演算処理を実行する演算器とを示す図である。
【図６】一般的な情報処理装置における命令処理部の構成を示すブロック図である。
【図７】図６に示す装置においてショートループ処理を３回繰り返し実行した際の、処理内容と時間との関係を示す図である。
【符号の説明】
１　命令キャッシュメモリ
２　命令バッファ（Ｉ−ＢＵＦＦＥＲ）
３　命令制御部
４　デコーダ（Ｄ０〜Ｄ３）
５　リザベーションステーション（ＲＳＥＡ，ＲＳＥＢ）
６　演算器（ＥＸＡ，ＥＸＢ）
７，７ａ，７ｂ　結果レジスタ（ＲＲ）
８　オペランドレジスタ（ＯＰＲ）
９　ルート（クロスバイパス）
１０　ルート
２０　命令アドレス生成部
２１　命令制御部
２１ａ　ＡＮＤゲート
２２　命令発行数制限装置（命令発行数制限手段，解除手段）
２２ａ，２２ｃ　反転素子
２２ｂ　ＡＮＤゲート
２３　クロスバイパス検出器（クロスバイパス検出手段）
２４　分岐履歴蓄積部（ＢＲＨＩＳ）
２５　ＲＳＥ＿ＵＳＥＤカウンタ（カウンタ）
２６　タイマ
【図１】
2004030424.tif 000003
【図２】
2004030424.tif 000004
【図３】
2004030424.tif 000005
【図４】
2004030424.tif 000006
【図５】
2004030424.tif 000007
【図６】
2004030424.tif 000008
【図７】
2004030424.tif 000009