(57)【要約】処理パイプライン（１００）を有するプロセッサ（１０）は、パイプライン（１００）におけるループ実行に伴うサイクルのロスを減少させる配列を用いて拡張されている。ループスタート検出ユニット（１１６ａ）は、ループ内のループカウント及び最後の命令に関する情報を含むループスタート命令を検出する。ループ内の最初の命令に関する情報も存在している。ループエンド検出ユニット（１１４ａ）にはループエンド情報が供給され、取出しステージ（１１２）にはループスタート検出ユニット（１１６ａ）からのループスタート情報が供給される。ループエンドを検出すると、ループエンド検出ユニット（１１４ａ）は取出しステージ（１１２）をトリガし、ループの最初の命令を取出させる。更に、ループエンド検出ユニット（１１４ａ）はパイプライン（１００）の内容をラベル付けする検出タグを生成し、タグ検出ユニット（１４４）によって評価させる。ループ実行制御ステージ（１４２）は、ループカウント情報と、タグ検出ユニット（１４４）が生成した検出情報とを比較し、もし必要ならば、余分な命令をパイプライン（１００）から除去する。
2005501332.tif 000002
【特許請求の範囲】
【請求項１】
処理パイプライン（１００）を有するプロセッサ（１０）において、前記プロセッサ（１０）は、
ループエンドを検出して検出情報を生成するループエンド検出手段（１１４ａ、１１４）と、
前記検出情報に依存してループ実行を制御する制御ステージ（１４２）と、
を備え、
前記プロセッサ（１０）は更に、
ループスタート命令を検出するループスタート検出ユニット（１１６ａ）を備え、
前記ループエンド検出手段（１１４ａ、１１４）は前記ループスタート検出ユニット（１１６ａ）に応答し、前記ループスタート検出ユニット（１１６ａ）は前記処理パイプライン（１００）内において前記制御ステージ（１４２）に先行している
ことを特徴とするプロセッサ（１０）。
【請求項２】
前記ループエンド検出手段（１１４ａ、１１４）は、
前記処理パイプライン（１００）内において前記ループスタート検出ユニット（１１６ａ）に先行し、ループエンドを検出して検出タグを生成するループエンド検出手段（１１４ａ）と、
前記検出タグを検出して前記検出情報を前記制御ステージ（１４２）へ供給するタグ検出ユニット（１４４）と、
を含むことを特徴とする請求項１に記載のプロセッサ（１０）。
【請求項３】
前記検出タグは、第１のループエンドを指示する第１ビットと、第２のループエンドを指示する第２ビットとを含むことを特徴とする請求項２に記載のプロセッサ（１０）。
【請求項４】
前記検出タグを格納するための格納手段（２００）を更に備えていることを特徴とする請求項２に記載のプロセッサ（１０）。
【請求項５】
前記格納手段（２００）は、前記処理パイプラインの第１の中間ステージ（１１６）に対応する第１の付加的パイプラインステージ（２１６）と、前記処理パイプライン（１００）の第２の中間ステージ（１２２）に対応する第２の付加的パイプラインステージ（２２２）とを含むことを特徴とする請求項４に記載のプロセッサ（１０）。
【請求項６】
前記処理パイプライン（１００）は、前記ループエンド検出手段（１１４ａ）に応答する取出しステージ（１１２）を含み、前記取出しステージ（１１２）は、
ループ命令情報を格納するための別の格納手段（１９４）と、
前記別の格納手段（１９４）に結合されているプログラムカウンタ（１９２）と、
を含むことを特徴とする請求項１に記載のプロセッサ（１０）。
【請求項７】
前記制御ステージ（１４２）に応答して前記処理パイプライン（１００）のステージ（１１２、１１４、１１６、１２２、１２４）を操作するする制御回路（１４６）を更に備えていることを特徴とする請求項１に記載のプロセッサ（１０）。
【請求項８】
前記制御回路（１４６）は、割込み処理ハンドラ（３０）を含むことを特徴とする請求項７に記載のプロセッサ（１０）。
【請求項９】
前記ループスタート検出ユニット（１１６ａ）に応答して命令を前記処理パイプライン（１００）内へ強制挿入する別の制御回路（１３２）を備えていることを特徴とする請求項１に記載のプロセッサ（１０）。
【請求項１０】
少なくとも、前記処理パイプライン（１００）の第１のステージ（１１２）に対応する第１の別のステージ（３１２）と、前記処理パイプライン（１００）の第２のステージ（１１４）に対応する第２の別のステージ（３１４）とを含む別のパイプライン（３００）を備えていることを特徴とする請求項１に記載のプロセッサ（１０）。
【請求項１１】
処理パイプライン（１００）を有するプロセッサ（１０）内で命令ループを実行させる方法において、前記方法は、
ループエンドを検出して検出情報を生成するステップと、
前記検出方法に依存してループ実行を制御するステップと、
を含み、
前記方法は更に、
ループスタート命令を検出するステップを含み、
前記ループエンドを検出するステップは前記ループスタート命令を検出するステップに応答し、前記ループエンド検出及びループスタート命令検出の両ステップは前記ループ実行を制御するステップの前に遂行される、
ことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理パイプラインを有するプロセッサに関し、前記プロセッサは、ループエンドを検出して検出情報を生成するループエンド検出手段と、前記検出情報に依存してループ実行を制御する制御ステージとを備えている。
【０００２】
本発明は、更に、パイプライン化されたプロセッサにおいて命令ループを実行する方法に関し、前記方法は、ループエンドを検出して検出情報を生成するステップと、前記検出情報に依存してループ実行を制御するステップとを含む。
【背景技術】
【０００３】
このようなプロセッサの実施例は、米国特許第6,003,128号から公知である。プロセッサ設計の分野における最も挑戦的な面の一つは、高いプロセッサ性能である。特に、設計に並行処理を、即ち、例えばあるクロックサイクルのような単一の動作期間内に１プロセッサタスクより多くの動作を導入することによってプロセッサの性能を改善することができる。単一の動作期間内に遂行できるプロセッサタスクの数を増加させることによって、高いプロセッサ性能を達成することができる。単一の動作期間内に複数のタスクを遂行するのを容易にするために、プロセッサアーキテクチャ内に処理パイプラインを含ませることができる。パイプラインにおいては、同一時間に異なるパイプラインステージ（例えば、命令の取出し、デコーディング、及び実行）において幾つかのタスクを遂行させることができる。典型的には、あるパイプラインステージは、次のパイプラインステージが次のクロックサイクルにおいてあるタスクを遂行できるようにするタスクを遂行する。
【０００４】
パイプライン化された処理における複雑化の１つは、実行ステージにおいて命令を実行する時にパイプラインの流れが混乱する場合に発生する。これが発生すると、取出しステージ及びデコードステージは共に、最早適切な命令を含まなくなる。これらの場合、正常なパイプライン動作を再開できるようにするためには、取出し及びデコードステージからこれら余分な命令を除去しなければならず、また実行ステージはプログラムカウンタを適切な命令のアドレスに対応する値を用いて更新しなければならないので、サイクルロスに繋がる。明らかに、パイプラインの流れにこのような混乱が発生すると、プロセッサの性能に有害な効果がもたらされる。１つの複雑化として、当今のパイプラインアーキテクチャはプロセッサの性能を高めるために多数の異なるパイプラインステージを含んでおり、これらの深いパイプラインはこれらの混乱に極めて鋭敏になっている。従って、動作中のサイクルロスの数を減少させることに多くの設計努力が払われている。
【０００５】
パイプライン化プロセッサにおけるサイクルロスの考え得る源は、いわゆる命令ループの実行によって発生する。命令ループは、例えば複数回にわたって逐次的に（例えば、繰り返して）実行しなければならないループボディのような複数の命令からなる。ループボディがその最終繰り返しに到達したことをそのループ実行に責を負うパイプラインステージが検出した場合、最後の繰り返しにおける最後のループ命令が実行されてしまった時には、命令の流れは最早次のループボディを含む必要はない。即ち、命令の流れは、ループの始まりへ分岐して戻る必要はない。しかしながら、実行ステージに先立つパイプラインステージは既に次のループボディに属する余分な命令を含んでおり、これらをパイプラインからフラッシュしなければならないのでサイクルのロスがもたらされる。これは、先行ステージの数が大きい場合には、特にプロセッサ性能が高コストになり得る。前述した従来技術は、命令ループを実行する場合のサイクルのロスを減少させる配列を有するスーパースカラパイプライン化マイクロプロセッサを開示している。この目的のために、この従来技術は専用のループエンド命令を使用しており、これらの命令はループ検出回路によって命令の流れ内において検出することができる。詳述すれば、ループエンド命令は、ループの実行を制御する制御ステージのループカウンタをデクレメントさせる命令を含んでいる。この命令の実行が監視され、再順序付けバッファ内に格納されている比較値内に登録される。要求に応じて、この比較値は、この値とカウンタ値（ループエンド命令が処理中であることをループ検出ユニットが検出する度に更新される）とを比較するループ予測ユニットへ供給される。比較値とカウンタ値との差が１になった時に、ループ予測回路はプロセッサに、実行される次のループボディが最後のループボディであることを信号するので、分岐予測の質が高められ、処理パイプラインにおけるサイクルのロスが減少する。
【０００６】
しかしながら、公知のプロセッサの欠陥は、パイプライン化されたプロセッサにおけるループ実行に関連するサイクルロスの他の原因が処理されずに残されていることである。詳述すれば、パイプラインの深さに比してループボディが小さい、即ち、パイプラインステージがループボディ内の命令よりも大きい場合には、第１のループボディを実行する前にパイプラインは既に幾つかのループボディを含んでいる。この場合、実行されるループボディの数は処理パイプライン内に既に存在しているループボディよりも少なく、処理パイプラインはループを実行する前に既に余分な命令を含んでいる。公知の回路の分岐予測メカニズムは、実行されようとしている最後のループボディを検出することに集中しているから、このメカニズムは、この特定の場合には多数のサイクルロスを生ずることを防ぐことはできず、プロセッサ性能は好ましくなく低下させられる。深いパイプラインは、ループ実行ステージに先行するパイプラインステージの数よりもかなり小さいループボディを有するループを数回繰り返し実行しなければならないことが多いので、これは重大な欠陥である。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明の第１の目的は、ループ、特に比較的小さいループの処理に伴うサイクルロスを減少させた前述した種類のプロセッサを提供することである。
【０００８】
本発明の第２の目的は、ループ、特に比較的小さいループの処理に伴うサイクルロスを減少させた前述した種類の方法を提供することである。
【課題を解決するための手段】
【０００９】
上述した第１の目的は、プロセッサにループスタート命令を検出するためのループスタート検出ユニットを更に設け、ループエンド検出手段を前記ループスタート検出ユニットに応答せしめ、そして前記ループスタート検出ユニットを処理パイプラインの制御ステージの前に配置することによって実現される。
【００１０】
命令の流れの中からループスタート命令が検出されると直ちに、ループスタート検出ユニットはループエンド検出手段をトリガしてループエンドの存在を監視させる。典型的には、ループスタート命令は、命令ストリーム内の第１のループボディの直ぐ前に配置されている専用のループ実行初期化命令である。ループ制御ステージに先行して集められた検出情報によってそのループが開始されると直ちにパイプラインの内容を変更することが可能になり、従って、パイプライン内に存在するループボディの数が実行されるループボディの数を既に越えている場合に失われるサイクルの数を減少させるので、これは重要な長所である。ループスタート命令が検出されると直ちに、ループエンド検出手段がループスタート検出ユニットによって活動化させられ、ループエンドを指示する命令の探索を開始する。これは、公知プロセッサにおいて使用されている命令、並びに命令セットからの包括的命令に類似する専用のループエンド命令であることができる。後者の場合、ループスタート命令はループエンド識別情報を含み、この情報がループエンド検出手段へ供給される。
【００１１】
もしループエンド検出手段が、ループエンドを検出して検出タグを生成するループエンド検出ユニットを処理パイプライン内のループスタート検出ユニットの前に備え、また検出タグを検出して検出情報を制御ステージへ供給するタグ検出ユニットを更に備えれていれば、これは１つの長所になる。
【００１２】
ループエンド検出手段のタスクをループエンド検出ユニットとタグ検出ユニットとに分割することによって、ループエンド検出手段のマルチタスキングに並列処理が導入され、従ってその性能が向上する。ループエンド検出ユニットは、第１のパイプラインステージ内の命令と所定のパターンとを比較し、ループエンドを検出した場合に検出タグを生成するだけでよい。この検出タグは、受信した検出タグを追跡し、評価するタグ検出ユニットによって直接検出することができる。
【００１３】
もし検出タグが、第１のループエンドを指示する第１のビット、及び第２のループエンドを指示する第２のビットを含んでいれば、これは別の長所になる。
【００１４】
異なるループエンドを検出可能にすることによって、小さいネストされたループに遭遇した時のサイクルロスを減少させることもできる。例えば、第１のループエンドは外側ループのループエンドであり、一方第２のループエンドは内側ループのループエンドであるが、明らかに、より深いネスティングレベルも可能である。検出タグ内にこの情報が存在することにより、タグ検出ユニットによる検出タグの翻訳を容易にすることができる。
【００１５】
もしプロセッサが、検出タグを格納するための格納手段を更に備えていれば、それは更に別の長所になる。
【００１６】
たとえ検出タグをループエンド検出ユニットからタグ検出ユニットへ直接転送することが可能であるとしても、制御ユニットがタグ検出ユニットに対して検出情報を要求する前に多数の検出タグが受信される場合には、中間結果をある形状でタグ検出ユニット内に格納しなければならないので、タグ検出ユニットのアーキテクチャは複雑になり得る。検出タグのための専用格納デバイスを設け、格納されている全ての検出タグを単一のクロックサイクル中タグ検出ユニットが評価できるようにすることによって、これらの設計の複雑さを回避することができる。
【００１７】
もし格納手段が、少なくとも、処理パイプラインの第１の中間ステージに対応する第１の付加的なパイプラインステージ、及び処理パイプラインの第２の中間ステージに対応する第２の付加的なパイプラインステージを含んでいれば、それはさらなる長所になる。
【００１８】
処理パイプラインのテンプレートとして動作可能な別のパイプラインを設ける（例えば、処理パイプライン内のループエンドの位置に対応する別のパイプラインのあるパイプラインステージに検出タグを存在させる）ことによって、タグ検出ユニットは、処理パイプライン内のループエンドの数に関する情報だけではなく、処理パイプライン内の各ループエンドの正確な位置をも検索することができる。この情報は制御ユニットに伝えられ、制御ユニットはこの情報に基づいてパイプラインサイクルを正確にフラッシュすることができる。
【００１９】
処理パイプラインが、ループエンド検出手段に応答する取出しユニットを更に備え、この取出しユニットがループ命令情報を格納するための別の格納手段を備え、そしてプログラムカウンタをこの別の格納手段に結合すると有利である。
【００２０】
このような機能を処理パイプラインの取出しユニットに追加することによって、ループボディを処理パイプライン内に迅速に挿入することができ、それによってプロセッサ性能を向上させることができる。ループスタート検出ユニットがループスタート命令を検出すると、取出しユニットには第２のデータ要素（例えば、ループスタートにおける命令のアドレス）が供給される。ループエンド検出手段があるループエンドに命令を検出すると、ループエンド検出手段は取出しユニットをトリガし、プログラムカウンタをループスタート時の命令に対応するように更新させる。このようにして、ループを実行する前に、パイプライン内においてループボディを投機的に繰り返させることができる。
【００２１】
もしプロセッサが、処理パイプラインのあるステージを操作する制御ステージに応答する制御回路を更に備えていれば、それは別の長所になる。
【００２２】
ループスタート検出ユニットからループスタート命令及び検出情報を受信した時に、この制御ステージには、どのパイプラインステージ（もしあれば）が余分な命令を含むかという情報がループ実行開始時に既に供給されている。制御ステージに応答する制御回路を設けることによって、制御ステージは、どのパイプラインをフラッシュしなければならないか、及びどの第１の非ループ命令を取出す必要があるかを直接信号するようになり、従って、第１のループボディを繰り返すための第１の命令が実行される前に、パイプラインは既に更新されていることになる。これは、サイクルロスに関して高度に効率的な処理パイプラインを提供する。更に、制御回路は、第１及びループスタート検出ユニット、並びに前記取出しユニット内のコンパレータを不活動化させるように配列することもできる。
【００２３】
もし制御回路が、割込み処理ハンドラを備えていれば、それはさらなる長所になる。
【００２４】
パイプライン化されたプロセッサ内の命令の流れの混乱は、割込みによってもたらされることが多い。それは、通常は割込みには新しい命令の流れの始動が必要だからである。パイプライン化された多くのプロセッサには、可能な限り迅速且つ滑らかにプロセッサタスクを切り替えるために専用される専用の割込み処理ハンドラが設けられている。制御ステージによるパイプラインステージ変更要求を割込みとして指定する、即ち割込み処理ハンドラを制御ステージに応答させると、プロセッサアーキテクチャ内に既に存在している制御回路を再使用することができ、要求される専用ハードウェアの量を制限する。
【００２５】
もしプロセッサが、ループエンド検出手段に応答して命令を処理パイプライン内へ強制挿入する別の制御回路を更に備えていれば、それもまた長所になる。
【００２６】
ループボディ内の命令の数が、処理パイプライン内のループエンド検出手段に先行するステージの数よりもかなり小さいような状況においては、パイプラインスタート時に、パイプラインは既にこれらの先行ステージの幾つかの内に余分な命令を含んでいる。しかしながら、ループエンド検出手段により近い他の幾つかの先行ステージ内には、適切な命令も存在している。ループエンド検出手段に応答する別の制御回路を含むようにプロセッサを拡張することによって、これらの適切な命令を捕捉し、余分な命令で、捕捉した適切な命令を置換することが可能になる。それにより、サイクルロスがより一層減少する。
【００２７】
もしプロセッサが、少なくとも、処理パイプラインの第１のステージに対応する第１の別のステージと、処理パイプラインの第２のステージに対応する第２の別のステージとを含む別のパイプラインを備えていれば、それは更に別の長所になる。
【００２８】
プロセッサ内に、処理パイプラインと並列のパイプラインが存在すれば、取出しユニットプログラムカウンタの値の形状のアドレス情報のような処理パイプライン内の命令に関する情報を、パイプラインのより深いステージにおいても利用できるようになる。その結果、ループエンド検出手段によるループ内の第１の命令のプログラムカウンタ値の検索のようなパイプラインの流れ制御命令を容易に実現し、動作可能にすることができる。
【００２９】
前述した本発明の第２の目的は、ループスタート命令を検出するステップと、前記ループスタート命令を検出するステップに応答してループエンドを検出するステップとを更に含み、前記ループエンド検出ステップ及びループスタート検出ステップの両ステップをループ実行を制御する前に遂行することによって実現される。
【００３０】
以下に添付図面を参照して本発明をより詳細に、そして単なる例示として説明する。
【発明を実施するための最良の形態】
【００３１】
以下の説明において、もし何等かの付加的な分類を使用することなくパイプラインの要素をステージと称する場合には、その機能、並びにパイプライン内のその位置は指定されていないものとする。また、ステージというフレーズを使用するが、当業者ならば、これはマイクロステージまたは類似のパイプライン構築用ブロックをも呼称していることは理解されよう。
【００３２】
図１に、プロセッサ１０を示す。詳述すれば、取出しステージ１１２及びステージ１１４、１１６、１２２、１２４、１４２、及び１６２を含む深い処理パイプライン１００が示されている。ステージ１１６は、ループスタート検出ユニット１１６ａを含むように拡張されており、ステージ１１４は、ループエンド検出ユニット１１４ａを含むように拡張されている。パイプラインは更に、制御ステージ１４２及びタグ検出ユニット１４４を有するループコントローラ１４０を含むように拡張されている。処理パイプライン１００のこの配列は単なる例示に過ぎず、異なる数のステージ、及びループスタート検出ユニット１１６ａ及びループエンド検出ユニット１１４ａの位置が異なる他のパイプライン形態も本発明の範囲から逸脱しないと考えることができる。典型的には、処理パイプライン１００は、命令レジスタ（図示してない）及びデータレジスタ（図示してない）のような他のデバイスと通信するためのデータバス２０にも結合されている。深いパイプラインにおいては、典型的には、取出し、デコード、及び実行タスクは複数のステージに分割されており、各タスクが３ステージパイプライン内の単一のステージに割当てられてはいない。図１に示す構成においては、処理パイプラインは、取出しステージ１１２及びステージ１１４に分割される取出しタスクを有することができ、一方デコードタスクはステージ１１６、１２２、及び１２４に分割される。ステージ１４２及び１６２が第１の実行ステージであることができるが、各タスク毎に異なる数のステージを用いる他の分割法も等しく実現可能である。典型的には、制御ユニット１４２のような実行ステージが、特に、パイプラインステージ１１２、１１４、１１６、１２２、及び１２４の内容を変更することができる割込み処理ハンドラ３０のようなデバイスに接続されよう。
【００３３】
ループスタート検出ユニット１１６ａは、処理パイプライン１００を通る命令の流れを監視し、命令の流れの中のループスタート命令の存在を検出する。ループスタート検出ユニット１１６ａは、命令演算コードの一部分と、専用レジスタまたは類似格納デバイス内に格納されているビットパターンとを比較することによって、ループスタート命令の存在を検出することができる。従って、ループスタート検出ユニット１１６ａは典型的に、ｎビットコンパレータを有している（但し、ｎは正の整数）。好ましくは、ループスタート命令は、あるループのループボディに先行する専用の単一命令（例えば、ループカウンタの値によって指定される回数だけ繰り返されなければならない命令）である。好ましくは、ループスタート命令はループボディの一部ではなく、命令の流れの中で１回だけ発生して単一の命令に対するループ制御オーバーヘッドを制限する。代替配列においては、ループスタート命令は、別のパイプライン３００（もし存在すれば）の適切な別のステージにおける命令情報の評価によって検出することもできる。
【００３４】
オプションとしての別のパイプライン３００が処理パイプライン１００に結合されており、これは処理パイプライン１００を通る命令のリップリングと同期して処理パイプライン１００内の命令に関する情報をリップルさせるのに使用することができる。例えば、第１のステージ１１２において第１の命令を受信した時に、第１のステージ１１２はそのプログラムカウンタの値を第１の別のステージ３１２へ出力することができる。第１のステージ１１２が取出した命令を第２のステージ１１４へ出力するのと同時に、第１の別のステージ３１２は受信したプログラムカウンタの値を第２の別のステージ３１４へ出力する。このようにすると、処理パイプライン１００の各ステージ内の命令に関する情報（例えば、その命令レジスタアドレス）を、別のパイプライン３００内の適切なステージから検索することができる。
【００３５】
本発明の重要な面は、ループ初期化情報を除いて、ループスタート命令がループボディ内の最後の命令に関する情報をも含むことである。命令演算コードの一部であることも、またはその命令の命令レジスタアドレスであることもできるこの情報は、ループスタート検出ユニット１１６ａからスープエンド検出ユニット１１４ａへ転送される。ループエンド検出ユニット１１４ａは、典型的に、ｎビットコンパレータ、専用レジスタ、及びループボディ内の最後の命令を検出した時に検出タグを生成する多重ビットパターン発生器を有している。ループエンド検出ユニット１１４ａは、ループスタート命令が検出された時にループスタート検出ユニット１１６ａによって活動化され、ループエンド検出ユニット１１４ａは一旦活動化されると、ステージ１１４によって受信された命令、または別のパイプライン３００の第２の別のステージ３１４内の命令情報と、ループボディ内の最後の命令に関する情報とを比較する。ループエンド検出ユニット１１４によってループボディ内の最後の命令が検出されると、直ちに多重ビット検出タグが生成されてタグ検出ユニット１４４へ出力される。検出タグを多重ビットにすると、異なるループボディに属する最後の命令を検出することができ、それによってネストされたループのループエンド命令の検出が容易になるので有利である。例えば、有効４ビット検出タグは１つの１と、３つの０とを含む。タグの最初のビットが論理１である検出タグ‘１０００’は第１のループ（例えば、外側ループ）のループボディの最後の命令を検出したことを信号する。タグの第２のビットが論理１である‘０１００’は、第２のループ（例えば、外側ループの内側にネストされている最初のループ）のループボディの最後の命令の検出を信号する。‘００１０’は、最初のネストされたループ内にネストされているループの最後の命令の検出を信号する等々である。当業者ならば、本発明の範囲から逸脱することなく、異なる長さ及びフォーマットを有する他のビットパターンを使用できることを理解できよう。タグ検出ユニット１４４は、ループスタート検出ユニット１１６ａがループスタート命令を受信すると該ユニット１１６ａによって活動化される。本発明の一実施の形態においては、タグ検出ユニット１４４は、受信した検出タグを専用格納デバイス（例えば、レジスタ、スタック、またはそれらと等価なデバイス）内に格納する。別のパイプライン３００の機能と同様に、これらのタグはパイプラインステージのサブセットの内容に関する情報を含んでいるので、これらのタグを格納する順序は極めて重要である。典型的には、このサブセットは、ループエンド検出ユニット１１４ａを含むステージ１１４からループの始動を制御する制御ステージ１４２までの全てのステージを含む。タグ検出ユニット１４４はループコントローラ１４０の１要素として示されているが、本発明の範囲から逸脱することなく、それをループコントローラの外部に配置することも、または制御ステージ１４２内に組入れることもできることを理解されたい。検出タグ情報を検索できるようにするためには、検出タグをタグ検出ユニット１４４内に格納する順序と、パイプラインステージのサブセット内の命令の順序との間の関係を知ることが不可欠である。タグ検出ユニット１４４は、ビットパターンを評価するための評価手段（エバリュエータ）を有している。もし検出タグ内の適切なビット位置に論理１を検出すれば、タグ検出ユニット１４４は、ループボディの終わりをマークする命令が処理パイプライン１００のステージのサブセットに属するステージの１つにおいて検出されたことを制御ステージ１４２へ通知する。ループスタート検出ユニット１１６ａは、ループスタート命令を検出する度に、ループエンド検出ユニット１１４ａ及びタグ検出ユニット１４４の両者に通知する。その結果、ループエンド検出ユニット１１４ａは検出タグ内の論理１が書込まれているビット位置を変更し、タグ検出ユニット１４４は検出タグ内のこの新しいビット位置を監視し始める。ループコントローラ１４０の制御の下でループ実行が完了すると直ちに、制御ステージ１４２はループ実行が終了したことをループスタート検出ユニット１１６ａに信号する。ループスタート検出ユニット１１６ａはこの情報をループエンド検出ユニット１１４ａ及びタグ検出ユニット１４４へ転送する。両ユニット１１４ａ及び１４４は、ビットタグの生成及び評価をそれぞれ相応に変更する。代替配列においては、ループスタート検出ユニット１１６ａの代わりに制御ステージ１４２が、ループ実行が終了したことをループエンド検出ユニット１１４ａ及びタグ検出ユニット１４４に信号する。
【００３６】
更に、ループボディ内の最後の命令の上述したラベリングが、ループボディの最初の命令に関する情報の利用と組合わされ、ループ実行の前に処理パイプライン１００におけるループボディの投機的繰り返しを容易ならしめる。ループボディの最初の命令に関するループ命令情報は、命令レジスタアドレスの形状で、またはループサイズを限定するようにループボディの最後の命令に対するオフセットの形状でループスタート命令内に含ませることができる。代替として、もし実行される最初のループボディの最初の命令の前にループスタート命令が存在していれば、別のパイプライン３００が存在している場合には、この情報をループスタート命令から省くことができる。この場合、ループスタート命令が別のパイプライン３００内に存在する時には、ループボディの最初の命令が同時にステージ１１４内に存在する。種々のパイプラインステージの内容が次のステージへリップルする時に、ステージ１１６はステージ１１４からループボディの最初の命令を受信する。ループスタート検出ユニット１１６ａは、例えばプログラムカウンタの値のようなループ命令情報を別のパイプライン３００内の対応するステージから抽出し、このループ命令情報を取出しステージ１１２へ転送し、取出しステージ１１２においてそれはレジスタ１９４またはその等価デバイス内に格納される。代替として、ループスタート検出ユニットは、リップリングが遂行される前に、ステージ１１４に対応する別のパイプライン内のステージからループ命令情報を抽出することができる。
【００３７】
本発明の一実施の形態においては、ループスタート検出ユニット１１６ａは、ループ命令情報を格納するために、例えば専用レジスタ、スタック、またはそれらの等価デバイスのような格納デバイスを有している。更に、ループスタート検出ユニットは、取出しステージ１１２のプログラムカウンタへのアクセスを得るために取出しステージ１１２に結合されている。ループエンド検出ユニット１１４ａがループの終わりにある命令を検出すると、ループエンド検出ユニット１１４ａはそれをループスタート検出ユニット１１６ａへ信号し、ループスタート検出ユニット１１６ａをトリガして取出しステージ１１２内のプログラムカウンタの現行値をループボディの最初の命令に対応する値に置換させる。従って、取出しステージ１１２は、命令レジスタ内のループボディの最後に後続する命令の代わりに、ループボディの最初の命令を取出す。このようにして、サイクルロスを生ずることなく、ループボディはパイプライン内に投機的に挿入される（詳細に関しては後述する）。ループボディのこの投機的な繰り返しは、可変ループカウンタを用いるループにとっては特に有用である。それは、ループスタート命令内に明示的にエンコードされるのではなく、例えば制御ステージ１４２のようなパイプラインの深いステージにおいて可変ループカウンタが利用できるようになるからである。ネストされたループの投機的繰り返し、即ちループ実行の前にパイプライン内へループボディを反復ローディングすることも可能である。このメカニズムは、基本的には、多重ビット検出タグの生成に関して前述したものと同一である。ループスタート検出ユニット１１６ａがループスタート命令を検出する度に、ループスタート命令及びループエンド命令に関する実際の情報が適切な格納デバイスに追加される。この実際の情報は、この場合には投機的繰り返しのために使用される。制御ステージ１４２がループの実行の完了を信号すると直ちに、ループスタート検出ユニット１１６ａ及びループエンド検出ユニット１１４ａは実際の情報をそれぞれの格納デバイスから除去し、終了したループを包含するループの投機的繰り返しが再開される。
【００３８】
制御ステージ１４２は、ループスタート命令に関連付けられたループの初期化及び実行を制御する。処理パイプライン１００内へ既に挿入されているループボディの数及び位置に関する情報が、タグ検出ユニット１４４から検索される。この情報は、遂行されるループボディ実行の数（ループスタート命令から直接的に、または間接的に検索される）と比較される。この数はループスタート命令内に明示的に存在させることができるが、ループスタート命令は、例えば制御ステージにこの情報を検索可能ならしめるレジスタアドレスを含むこともできる。タグ検出ユニット１４４からの情報とループスタート命令との組合わせによって、たとえループが処理パイプライン１００の最初の実行ステージ１６２へ挿入される前でも、処理パイプライン１００を更新することが可能になる。制御ステージ１４２は、どの先行パイプラインステージ（もしあれば）が余分な命令を含むかを決定し、適切な情報割込み処理ハンドラ３０へ転送する。割込み処理ハンドラ３０は、これらの余分な命令を含むパイプラインステージをフラッシュし、取出される次の有用な命令のアドレス値を用いて取出しステージ１１２のプログラムカウンタを更新する。
【００３９】
次に、図２のプロセッサ１０の代替実施の形態を、図１の詳細な説明を参照しながら説明する。図１において使用した番号は、特記しない限り図２においても対応する意味を有している。更に、図２においては、図面を明瞭化するためにオプションとしての別のパイプライン３００は省いてある。プロセッサ１０は、ループエンド検出手段１１４ａが生成した検出タグのための格納デバイスとして動作する別のパイプライン２００を用いて拡張されている。単なる例示に過ぎないが、別のパイプライン２００は、第１の別のパイプラインステージ２１６、第２の別のパイプラインステージ２２２、及び第３の別のパイプラインステージ２２４を有している。好ましくは、第１の別のパイプラインステージ２１６は処理パイプラインの第１の中間ステージ１１６に対応し、第２の別のパイプラインステージ２２２はパイプラインの第２の中間ステージ１２２に対応する。このようにすると、別のパイプライン３００について説明したものと同一の長所が達成される。即ち、処理パイプライン１００の種々のステージの内容に関する情報が別のパイプライン２００を通して同時にリップルされ、それによって、処理パイプライン１００内の命令の本質及び位置に関する情報が提供される。別のパイプライン２００はタグ検出ユニット１４４に結合されており、タグ検出ユニット１４４による別のパイプライン２００内の種々の検出タグの検出及び翻訳を可能ならしめている。先行実施の形態のプロセッサ１０の検出タグを格納するためのタグ検出ユニット１４４内に含まれている格納デバイスを省略できることは明白である。
【００４０】
ループボディの投機的繰り返しを可能にするループスタート情報格納のための検出ユニット１１６ａの前述した格納デバイスの代替として、この格納デバイスは他の有用な位置に配置することもできる。ここでは、取出しユニット１１２は、ループスタート検出ユニット１１６ａが検索したループスタート情報を格納するために、例えばレジスタ、スタック、またはそれらの等価デバイスのような格納デバイス１９４を用いて拡張されている。ループエンド検出ユニット１１４ａがループエンドを検出する度に取出しステージ１１２のプログラムカウンタ１９２を直接更新するのではなく、ループスタート情報を受信するとループスタート検出ユニット１１６ａはループスタート情報を格納デバイス１９４へ転送する。この場合、ループエンド検出ユニット１１４ａがループエンドを検出するとそれが取出しステージ１１２へ信号され、格納デバイス１９４に結合されているプログラムカウンタ１９２は格納デバイス１９４内に格納されている適切なループスタート情報を用いて更新される。当業者ならば、本発明の範囲から逸脱することなく、格納デバイス１９４をステージ１１４内に、または他の有用な位置に組入れることもできることが理解されよう。
【００４１】
制御回路１４６は、余分な命令を含むパイプラインステージの更新を直接的に、または間接的に制御するために、及び／または、例えばループスタート検出ユニット１１６ａ、ループエンド検出ユニット１１４ａ、取出しステージ１１２、及びタグ検出ユニット１４４に必要制御信号を供給してループ実行の終了を信号するために制御ステージ１４２に結合されている。投機的繰り返しの結果として余分なループボディ命令が処理パイプライン１００内に存在している場合に、制御ステージを、割込み処理ハンドラ３０の機能を制御ステージ１４２へ移して専用割込み処理ハンドラとして動作する機能を有するように拡張することができる。極端な場合、割込み処理ハンドラ３０の完全機能を制御ステージ１４２へ移すことができ、その場合には、割込み処理ハンドラ３０をプロセッサ１０から省くことができる。
【００４２】
プロセッサ１０は、処理パイプライン１００内へ命令を強制挿入するために、ループスタート検出ユニット１１６ａに応答する別の制御回路１３２を用いて拡張されている。ループスタート検出ユニット１１６ａがループスタート命令を検出した時点に既に余分な命令が存在している程ループボディが小さい場合には、別の制御回路はこれらの余分な命令をそのループボディに属する命令によって置換するようになっている。例えば、図２に示す配列においては、単一の命令のループボディがパイプライン内にロードされる場合、ステージ１１６がループスタート命令を含む時点には、ステージ１１４は既に、例えばそのループボディの唯一の命令であるループエンドを含んでいる。これは、取出しステージ１１２がそのループボディに属さない命令を含んでいることを暗示している。何故ならば、それでも投機的繰り返しを始動させなければならないからである。これは、次のサイクルにおいて修復される。即ち、ステージ１１６によって受信された命令（例えば、そのループボディの唯一の命令）は、ループスタート検出ユニット１１６ａの制御の下に、別の制御回路１３２によってステージ１１４内へコピーされ、従って取出しステージ１１２からステージ１１４内へリップルされた余分な命令を置換する。代替として、別の制御回路１３２をループエンド検出ユニット１１４ａによって制御できることを理解されたい。当業者には明白なように、例えば制御回路１３２は、本発明の範囲から逸脱することなく、代わりにステージ１１４内に配置することができる。
【００４３】
図３は、処理パイプライン１００内に２つの命令を含むループボディ（ＬＢ）の本発明の方法による投機的繰り返しの例を示している。クロックサイクル５２０においては、ループスタート命令（ＬＳＩ）は処理パイプライン１００のステージ１１４内に存在し、そのループボディの最初の命令である命令Ｉ(n)は取出しステージ１１２内に存在している。クロックサイクル５２２においては、ループスタート検出命令を検出するステップがループスタート検出ユニット１１６ａによってステージ１１６において遂行される。ループスタート検出ユニット１１６ａはループスタート命令からループエンド情報を検索し、それをループエンド検出ユニット１１４ａへ転送する。更に、ループスタート検出ユニット１１６ａはループボディスタート情報を検索し、それを取出しユニット１１２内の格納デバイス１９４へ転送する（ステージ１１６から取出しステージ１１２への矢印によって示す）。代替として、ループエンド検出ユニット１１４ａがループエンドを検出する度に、この情報を直接プログラムカウンタ１９２内に格納することができる。このようにすると、ループボディを処理パイプライン１００内へ投機的に繰り返すことができる。クロックサイクル５２４においては、ループボディの第２の、そして最後の命令Ｉ(n＋1)がステージ１１４内へリップルされ、その結果、ループエンドの検出情報を生成するステップが遂行される。ループエンド検出ユニット１１４ａは、ループエンドを検出したことを取出しステージ１１２へ信号し（ステージ１１４から１１２への矢印で示す）、取出しステージ１１２は命令Ｉ(n)に関連付けられたアドレス値でプログラムカウンタ１９２を更新する。更に、例えば検出タグのような検出情報が、ループエンド検出ユニット１１４ａによって生成される（ステージ１１４内の＊印によって示す）。ループエンドを検出するステップは、ループスタート命令を検出するステップに応答するものとしている。ループスタート検出ユニット１１６ａがループエンド検出ユニット１１４ａによる（詳述すれば、ループエンド検出情報をループエンド検出ユニット１１４ａへ転送することによって）ループエンドの検出を可能にする。クロックサイクル５２６においては、ループエンドの検出は遂行されない。しかしながら、クロックサイクル５２８においては、ループエンド検出ユニット１１４ａは別のループエンドを検出し、取出しステージ１１２にプログラムカウンタを更新させる（ステージ１１４から取出しステージ１１２への矢印で示す）。更に、ループエンド検出ユニット１４ａによって検出タグが生成される（ステージ１１４内の＊印によって示す）。同じクロックサイクル中に、ＬＳＩが制御ステージ１４２に到達し、検出情報に依存するループ実行を制御するステップが遂行される。制御ステージ１４２は、タグ検出ユニット１４４から供給された検出情報を評価する。ＬＳＩは、関連付けられたループを２回繰り返して実行しなければならない情報を制御ステージ１４２へ供給する。制御ユニット１４２は、処理パイプ１００内に既に２つのループボディが存在しているという情報を検出ユニット１４４から受信する。詳述すれば、受信する情報は、第１のループエンドがステー��１２２内に存在し、第２のループエンドがステージ１１４内に存在していることを指示している。この情報は、処理パイプライン１００を更新するために使用される。何故ならば、最後の有用なループエンドがステージ１１４内に存在し、ステージ１１４がクロックサイクル５３０に余分な命令Ｉ(n)を制御ステージ１４２が受信することを知っているからである。これは、ステージ１１４が受信した命令を、クロックサイクル５３０における無動作命令（ＮＯＰ）で置換することによって、及びＬＳＩ内にループエンド情報が存在することに基づいて取出しステージ１１２内のプログラムカウンタを更新することによって修復される。特定の場合には、ステージ１１４内の余分な命令をＮＯＰによって置換する代わりに、例えばプロセッサ状態を復元する命令のようなより有用な命令をパイプライン内へ強制挿入できることが予測される。ループエンド検出ステップ及びループスタート命令検出ステップがループ実行を制御する前に遂行されることから、処理パイプライン１００の深さより小さいループサイズに対処する場合、サイクルロスを減少させることを可能にする高度に効率的な投機的繰り返しスキームが達成される。
【００４４】
図４は、処理パイプライン１００内に単一の命令を含むループボディの投機的繰り返しの本発明の方法による例を図３と同じように示している。図３において使用した参照番号は、図４においても同じ意味を有している。ループボディが単一の命令だけからなっているので、クロックサイクル５２２においてＬＳＩ及びループエンドが検出された時には、処理パイプラインは既に取出しステージ１１２内に余分な命令を含んでいる。オプションとして、ループエンド検出ユニット１１４ａはクロックサイクル５２２に、ループエンドが検出されたことをループスタート検出ユニット１１６ａに信号する（ステージ１１４と１１６との間の矢印で示す）。ステージ１１６は同時にＬＳＩを含むから、ループスタート検出ユニット１１６ａは単一の命令を含むループボディがロードされていることを知る。代替として、ループボディサイズに関する情報がＬＳＩ内に存在する。この場合は、ループエンド検出ユニット１１４ａからループスタート検出ユニット１１６ａへの信号は不要であり、遂行されることはない。ループスタート検出ユニットは、ステージ１１４から受信した命令をステージ１１４へ戻してコピーする、即ちクロックサイクル５２２に、取出しステージ１１２内に存在する余分な命令を置換することによって処理パイプライン１００を修復する。従って、処理パイプライン１００は、たとえ単一の命令からなるループを実行しなければならなくとも、取出し、デコード、及び実行命令のタスクを正常に継続することができる。これは、この特定の場合においても、割込み呼出しによってループ実行に割込むことができることを意味する。これは、単一の命令ループの実行を可能にするためにパイプラインを凍結させ、割込みによるアクセスを不能にしなければならない公知の幾つかのプロセッサとは異なっている。
【００４５】
上述した実施の形態は、単なる例示であって本発明を限定するものではないことを理解されたい。また、当業者ならば、特許請求の範囲から逸脱することなく多くの代替実施の形態を設計することができよう。特許請求の範囲の括弧内に記載されている参照符号は、その範囲を限定しているものと考えるべきではない。用語“からなる”または“を備え（ている）”は、特許請求の範囲に記載のもの以外の要素またはステップの存在を排除するものではない。ある要素に先行する用語“ある”または“１つの”は、複数のこれら要素の存在を排除するものではない。本発明は、幾つかの別々の要素からなるハードウェアによって、及び適当にプログラムされたコンピュータによって実現することができる。幾つかの手段を列挙してあるデバイス請求項においては、幾つかのこれらの手段は１つの、及び同一アイテムのハードウェアによって実現することができる。幾つかの措置が相互に異なる従属請求項に記載されているという単なる事実は、これらの措置の組合わせを有利に使用することができないことを指示しているものではない。
【図面の簡単な説明】
【００４６】
【図１】本発明の一実施の形態によるプロセッサを示す図である。
【図２】本発明の別の実施の形態によるプロセッサを示す図である。
【図３】本発明によるループ実行の命令の流れを示す図である。
【図４】本発明による別のループ実行の命令の流れを示す図である。
【国際公開パンフレット】
2005501332.tif 000003
2005501332.tif 000004
2005501332.tif 000005
2005501332.tif 000006
2005501332.tif 000007
2005501332.tif 000008
2005501332.tif 000009
2005501332.tif 000010
2005501332.tif 000011
2005501332.tif 000012
2005501332.tif 000013
2005501332.tif 000014
2005501332.tif 000015
2005501332.tif 000016
2005501332.tif 000017
2005501332.tif 000018
2005501332.tif 000019
2005501332.tif 000020
2005501332.tif 000021
2005501332.tif 000022
2005501332.tif 000023
2005501332.tif 000024
【国際調査報告】
2005501332.tif 000025
2005501332.tif 000026
2005501332.tif 000027