(57)【特許請求の範囲】
【請求項１】
フェッチされた命令列をデコードし、デコードした命令が実行される際に必要となる資源が取得できない場合には、資源が取得できない命令に資源情報を付加して出力する命令デコーダと、
前記デコーダによってデコードされた命令又は実行順序が変更された命令列の命令を受けて、命令の実行に必要な資源を取得して命令を実行し、資源が取得できない場合には資源情報を前記命令デコーダに出力し、資源の取得／未取得を示す資源変更情報を出力する実行装置と、
前記デコーダによってデコーダされた命令列、及び該命令列の実行順序が変更された命令列を格納する命令バッファと、
前記実行装置から資源情報が出力されてストールが発生した時点で、資源未取得の命令を含んで以降の所定の命令列の実行順序を予め設定された規則にしたがって変更し、変更前命令列の実行内容と等価の内容を実行する１又は複数の命令列を生成し、実行順序変更前後の命令列の実行時間を評価し、変更前の命令列よりも実行時間が短いと評価された変更後の命令列がある場合には、該命令列を選択して前記命令バッファに格納するとともに前記実行装置に与え、変更後の命令の実行毎に前記実行装置から出力される資源変更情報に基づいて前記命令バッファに格納された命令列の実行順序の再変更、再評価を行う命令最適化装置と、
前記命令最適化装置によって生成された実行順序変更後の１又は複数の命令列を格納する修正命令バッファと
を有することを特徴とするマイクロプロセッサ。
【請求項２】
分岐命令の実行時には、分岐予測／先行フェッチされた命令列に対して最適化の評価を行ない有利と判定した場合は、変更された命令列に対し分岐予測を行い、分岐命令を間に含む命令列が最適化された場合には、その変更命令列間の評価と同時に通常の分岐予測による候補の評価を合わせて吟味決定する
ことを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
割り込みが発生した時は、前記命令バッファのみを退避し、割り込み処理中には現割り込み処理に対して最適化評価を行ない、元の命令に復帰した時はその時点で資源を解釈し、実行順序を変更して最適化した命令列を生成する
ことを特徴とする請求項１記載のマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、外部又は内部資源が取得できない状態で後続命令が実行できず、命令フェッチが停止している状況において、命令列の実行順序を変更して命令列の実行スループットを向上させるマイクロプロセッサに関する。
【０００２】
【従来の技術】
スカラープロセッサにおいて、命令実行時にそのオペランドのデータがまだ決定されていない時、その値が決まるまでストールを起こしていた。パイプライン方式のプロセッサでは、その命令のオペランドフェッチが行なわれるまで命令フェッチ、デコードまでは後続の命令に対して行なっていた。また、さらに進んだプロセッサでは、そのデータの実行ステージに入るまで命令サイクルを続けていた。
【０００３】
ｉｎ−ｏｒｄｅｒ発行、ｉｎ−ｏｒｄｅｒ完了又はｉｎ−ｏｒｄｅｒ発行、ｏｕｔ−ｏｆ−ｏｒｄｅｒ完了のスーパースカラープロセッサでは、同時にフェッチされた命令の先頭命令はデータが得られない場合に後続命令は全てオペランドフェッチでストールしていた。また、ｏｕｔ−ｏｆ−ｏｒｄｅｒ完了では特に実行ステージでは、後続命令に真の依存関係及び出力依存関係がない場合にはオペランドステージ、実行ステージともに同時に行なわれていた。
【０００４】
ｏｕｔ−ｏｆ−ｏｒｄｅｒ発行、ｏｕｔ−ｏｆ−ｏｒｄｅｒ完了のスーパースカラプロセッサでは、後続命令に真の依存関係及び出力依存関係、逆依存関係がない場合にはオペランドステージ、実行ステージともに先行して行なわれていた。また、スーパースカラプロセッサに代表される複数の機能ユニットを持つプロセッサの場合は、同じユニットを同時使用する命令実行が可能であり、そのユニット数を超えた場合にはストールを起こし、解消されるまで待っていた。
【０００５】
メモリリードオペランド命令において、資源としてのキャッシュメモリがヒットせず主記憶に命令フェッチを行う間、そのデータを使用することができなかった。このため、その命令がストールを起こし、加えて演算結果を使用する後続命令を実行できなかった。また、ある演算処理のデータの結果による条件分岐命令がある場合に、分岐先が決まらず、後続命令はすべて依存関係があるとして分岐予測によりフェッチし実行しなかった。
【０００６】
一方、ｏｕｔ−ｏｆ−ｏｒｄｅｒ命令発行を行うスーパースカラプロセッサでは、資源割り当てがされずにストールが発生する場合に、後続の依存関係のない命令を先に実行し、資源が得られた時に実行を再開していた。この時に、調べる依存関係はフェッチした命令列の指定通りの依存であり、ひと塊の令命列が実行する演算の内容としての観点からは無駄なデータ相互関係を見ているケースがあった。
【０００７】
【発明が解決しようとする課題】
以上説明したように、従来のスカラープロセッサにおいては、命令を実行する際に必要となる資源が取得できない場合にはストールを生じ、後続の命令が実行できず、処理効率の低下を招いていた。
【０００８】
一方、従来のスーパースカラプロセッサにおいては、命令の実行に必要な資源が取得できない場合には、資源が取得できず実行できない命令と依存関係のない後続命令が先に実行されていた。しかし、命令間の依存関係を調べるにあたって、複数の命令によって実現される実質的な処理内容の観点からは命令間の依存関係が調べられていなかった。このため、上記観点から見た場合には実行可能な後続命令は、従来の手法によって依存関係があると見なされて実行されず、処理効率の低下を招いていた。
【０００９】
そこで、この発明は、上記に鑑みてなされたものであり、その目的とするところは、資源未取得の命令の後続命令であっても実質的な処理内容の観点から見て先行して実行できる命令を先に実行して、処理時間の短縮を図ったマイクロプロセッサを提供することにある。
【００１０】
【課題を解決するための手段】
上記目的を達成するために、請求項１記載の発明は、フェッチされた命令列をデコードし、デコードした命令が実行される際に必要となる資源が取得できない場合には、資源が取得できない命令に資源情報を付加して出力する命令デコーダと、前記デコーダによってデコードされた命令又は実行順序が変更された命令列の命令を受けて、命令の実行に必要な資源を取得して命令を実行し、資源が取得できない場合には資源情報を前記命令デコーダに出力し、資源の取得／未取得を示す資源変更情報を出力する実行装置と、前記デコーダによってデコーダされた命令列、及び該命令列の実行順序が変更された命令列を格納する命令バッファと、前記実行装置から資源情報が出力されてストールが発生した時点で、資源未取得の命令を含んで以降の所定の命令列の実行順序を予め設定された規則にしたがって変更し、変更前命令列の実行内容と等価の内容を実行する１又は複数の命令列を生成し、実行順序変更前後の命令列の実行時間を評価し、変更前の命令列よりも実行時間が短いと評価された変更後の命令列がある場合には、該命令列を選択して前記命令バッファに格納するとともに前記実行装置に与え、変更後の命令の実行毎に前記実行装置から出力される資源変更情報に基づいて前記命令バッファに格納された命令列の実行順序の再変更、再評価を行う命令最適化装置と、前記命令最適化装置によって生成された実行順序変更後の１又は複数の命令列を格納する修正命令バッファとを有することを特徴とする。
【００１１】
請求項２記載の発明は、請求項１記載のマイクロプロセッサにおいて、分岐命令の実行時には、分岐予測／先行フェッチされた命令列に対して最適化の評価を行ない有利と判定した場合は、変更された命令列に対し分岐予測を行い、分岐命令を間に含む命令列が最適化された場合には、その変更命令列間の評価と同時に通常の分岐予測による候補の評価を合わせて吟味決定することを特徴とする。
【００１２】
請求項３記載の発明は、請求項１記載のマイクロプロセッサにおいて、割り込みが発生した時は、前記命令バッファのみを退避し、割り込み処理中には現割り込み処理に対して最適化評価を行ない、元の命令に復帰した時はその時点で資源を解釈し、実行順序を変更して最適化した命令列を生成することを特徴とする。
【００１３】
【発明の実施の形態】
図１は請求項１記載の発明の一実施形態に係るマイクロプロセッサの構成を示す図である。
【００１４】
図１において、マイクロプロセッサは、命令をフェッチする命令フェッチャ１と、命令フェッチャ１によってフェッチされた命令をデコードする命令デコーダ２と、命令デコーダ２によってデコードされた命令を実行する実行装置３と、命令デコーダ２によってデコードされた命令を受けて、命令を解釈し命令の実行順序を変更する命令列解釈装置４を備えて構成される。
【００１５】
命令デコーダ２は、デコードした命令が実行される際に必要となる資源が取得できない場合には、実行装置３から与えられる資源情報を資源が取得できない命令に付加し、資源情報を付加した命令とともに後続のデコードされた一連の命令列を命令列解釈装置４に与える。
【００１６】
実行装置３は、命令デコーダ２でデコードされた命令又は命令列解釈装置４から与えられる命令を実行する際に、実行に必要な資源を取得し、取得できなかった場合には資源未取得を示す資源情報を命令デコーダ２に出力し、資源の取得／未取得を示す資源変更情報を命令列解釈装置４に出力する。
【００１７】
命令列解釈装置４は、命令デコーダ２でデコードされた命令列又は実行順序が変更された命令列を実行に必要な実行時間の評価値とともに格納し、格納された命令列が実行装置４に与えられる命令バッファ５と、命令バッファ５に格納された命令列の実行順序を変更した１又は複数の命令列を生成する最適化装置６と、最適化装置６で実行順序が変更された１又は複数の命令列を格納する修正命令バッファ７を備えて構成される。なお、この実施形態では、修正命令バッファ７を１つ備え、最適化装置６で実行順序が変更された１つの命令列をこの修正命令バッファ７に格納するようにしている。
【００１８】
最適化装置６は、命令バッファ５に格納された、資源未取得の命令を含んで以降の所定の命令列を受けて、この命令列の実行順序を予め設定された規則にしたがって変更し、変更前命令列の実行内容と等価の内容を実行する命令列を生成し、実行順序変更前後の命令列の実行時間を評価し、評価値とともに変更後の命令列を修正命令バッファ７に格納し、評価した変更前の命令列よりも実行時間が短いと評価された変更後の命令列がある場合には、この命令列を選択して命令バッファ５に格納するとともに実行装置３に与え、変更後の命令の実行毎に実行装置３から出力される資源変更情報に基づいて命令バッファ５に格納された変更後の命令列の実行順序を再変更、再評価する。
【００１９】
このような構成において、命令フェッチャ１によりフェッチした命令列を取り込み、実行装置３内の資源取得に失敗した時は、その命令列を未実行として命令バッファ５で保持し、後続の命令をフェッチし続ける間に命令バッファ５中に保持される命令列を一定のパターンを抽出する最適化装置６が判定し、先に実行可能な命令パターンを抽出し、残りの命令列の実行速度の評価を行ない、有利と判定した場合には、修正した命令列の実行可能な部分を実行する。
【００２０】
アウトオブオーダー命令発行で依存関係があると解釈し、実行待機している命令列の内命令列の演算の意味の解釈から依存関係の考慮不要部分を抜き出し、先に実行可能なものを処理する。資源が取得できた時はその情報を命令列解釈装置４に送り、命令バッファ５の評価値を変更し、再び命令順序の最適化を行う。
【００２１】
次に、図２を参照して、図１に示すマイクロプロセッサにおいて、演算Ｙ＝ａ＋ｂ＋ｃ＋ｄを実行する時の動作を説明する。
【００２２】
演算Ｙ＝ａ＋ｂ＋ｃ＋ｄでは、コンパイラは次のコードを生成するとする。
ａｄｄ  Ａ，ａ，Ａ  （命令１）
ａｄｄ  Ａ，ｂ，Ａ  （命令２）
ａｄｄ  Ａ，ｃ，Ａ  （命令３）
ａｄｄ  Ａ，ｄ，Ａ  （命令４）
なお、Ａは加算データを保持するレジスタを示す。
【００２３】
この命令列実行に際し、実行装置３でデータａが得られない場合には、命令デコーダ２がデータａは未知として命令１を命令バッファ５に送り、通常後続の命令２、３、４が待機状態となる。アウトオブオーダー命令発行機構を持つプロセッサでも、後続命令２、３、４はレジスタＡに対し真の依存関係があるとみなし、実行待機状態となる。
【００２４】
しかし、元の演算Ｙは加算で結合法則として対称であるので、どの加算から開始してもよい。コンパイラがこの先に順序がわかる時はそのようにコード生成するが、リアルタイム及び極度に複雑な演算過程の結果決まる順序の場合には、メモリ内の命令列の順序を先に規定することは不可能である。
【００２５】
このため、実行装置３から資源情報が出力されてストールが発生した時点で、最適化装置６がこの命令パターンを判定して順序を最適化する。資源判定が未だされていないものは利用可能として考える。例えばデータａのオペランド資源未取得がわかった時点で命令２、３、４までデコード完了していた場合は、
ａｄｄ  Ａ，ｂ，Ａ  （命令２）
ａｄｄ  Ａ，ｃ，Ａ  （命令３）
ａｄｄ  Ａ，ｄ，Ａ  （命令４）
ａｄｄ  Ａ，ａ，Ａ  （命令１）
と最適化装置６が命令列の実行順序を修正して変更し、評価値を付けて修正命令バッファ７に書き込む。命令順序変更前の評価値８と変更後の評価値９との比較により変更後の命令の方が有効と判断し、変更後の命令を修正命令バッファ７の下の方から命令バッファ５にコピーし実行装置３へ転送する。
【００２６】
また、データｂも不確定とわかった場合は、資源変更情報を命令列解釈装置４に送り、命令バッファ５の再評価及び最適化を行ない、修正命令バッファ７を書き直す。以下、この繰り返しで命令列の評価／最適化をリアルタイムに行なう。
【００２７】
次に、図３を参照して、演算Ｙ＝（ａ＋ｂ）（ａ−ｂ）を実行する場合の動作例を説明する。
【００２８】
演算Ｙ＝（ａ＋ｂ）（ａ−ｂ）からコンパイラは次に示すコードを生成するものとする。
ａｄｄ  ａ，ｂ，ｃ  （命令１）
ｓｕｂ  ａ，ｂ，ｄ  （命令２）
ｍｕｌ  ｃ，ｄ，ｃ  （命令３）
【００２９】
この命令列を命令バッファ５に取り込んだ時、データａが未決定であると、最適化装置６はこれらをグルーピングし、次の命令列に変換する（Ｙ＝ａ２  −ｂ２  ）。
ｍｕｌ  ｂ，ｂ，ｄ（命令４）
ｍｕｌ  ａ，ａ，ｃ（命令５）
ｓｕｂ  ｄ，ｃ，ｃ（命令６）
【００３０】
これらを評価しつつ命令バッファ５に転送し、命令４はデータａとは無関係になり実行できる。実行後は命令５、６が残り、データａが確定次第実行できる。最適化前は加減算２、乗算１であったのが、最適化後は乗算１、減算１だけが残りデータａが確定後速やかに演算終了することができる。従って、命令４を空いた演算ユニットで実行でき、その間データａが未確定を保てば変更後の命令列の方が有効と評価でき、選択される。
【００３１】
このように、上記実施形態では、命令実行の際、資源取得の制約からストールが発生することが多いプログラムをプロセッサで実行する場合は、命令列の最適化を実行する時間的余裕が内在し、それを利用することにより演算実行速度を向上することができる。
【００３２】
なお、分岐命令の実行時には、分岐予測／先行フェッチされた命令列に対して最適化の評価を行ない有利と判定した場合は、修正された命令列に対し分岐予測を行い、分岐命令を間に含む命令列が最適化された場合には、その修正命令列間の評価と同時に通常の分岐予測による候補の評価を合わせて吟味決定するようにしている。
【００３３】
また、割り込みが発生した時は、命令バッファ５のみを退避し、割り込み処理中には現割り込み処理に対して最適化評価を行なう。元の命令に復帰した時はその時点で資源を解釈し、実行順序を変更して最適化した命令列を生成するようにしている。
【００３４】
【発明の効果】
以上説明したように、この発明によれば、資源未取得の命令が待機している間に資源未取得の命令と後続命令との異存関係を調べ、資源未取得の命令の後続命令であっても実質的な処理内容の観点から見て先行して実行できる命令を先に実行するようにしたので、資源獲得時に実行待ち命令が迅速に実行でき、命令の処理時間を短縮することができる。
【図面の簡単な説明】
【図１】請求項１記載の発明の一実施形態に係るマイクロプロセッサの構成を示す図である。
【図２】図１に示すマイクロプロセッサの一動作例を示す図である。
【図３】図１に示すマイクロプロセッサの他の動作例を示す図である。
【符号の説明】
１  命令フェッチャ
２  命令デコーダ
３  実行装置
４  命令列解釈装置
５  命令バッファ
６  最適化装置
７  修正命令バッファ
８，９  評価値
【図１】
0003547562.tif 000002
【図２】
0003547562.tif 000003
【図３】
0003547562.tif 000004