(57)【特許請求の範囲】
【請求項１】
第１の記憶位置に書き込みを行う第１の命令と該第１の記憶位置に書き込みを行う第２の命令とを含む複数の命令を並列に実行するよう構成された複数のパイプラインと、
該パイプラインによる前記命令の実行に応じてデータを探索するよう構成されたメモリインタフェイスであって、該データを取り出して該データを前記命令により識別される記憶位置へ書き込むよう構成されている、メモリインタフェイスと、
前記第１の記憶位置から読み出しを行う介在命令が前記第１の命令と前記第２の命令との間に存在するか否かを検出するよう構成された制御機構であって、かかる介在命令が全く存在しないことを検出した場合に前記メモリインタフェイスへ取り消し要求を送信するよう構成されている、制御機構と
を備えており、
前記メモリインタフェイスが、前記取り消し要求に応じて、前記第１の命令の実行に応じて特定の一組のデータの探索を開始した後に該探索の結果が前記第１の記憶位置に全く書き込まれないことを確実にするよう構成されている、
スーパースケーラ処理システム。
【請求項２】
第１の命令及び第２の命令を含む複数の命令をコンピュータプログラムから受け取り、
前記第１の命令及び前記第２の命令に関連するライトアフターライトデータハザードを検出し、
該検出ステップに応じて前記第２の命令を停止させ、
前記複数の命令のうちの別の命令が前記第１の命令に依存するか否かを判定し、
該判定ステップを介して、前記複数の命令のなかに前記第１の命令に依存する命令が存在しないことを検出し、
該検出ステップに応じて前記第１の命令を取り消し、
該取り消しステップに応じて前記停止ステップを終了させる、
という各ステップを有する、スーパースケーラ方法。
【請求項３】
第１のデータをレジスタに書き込むよう構成された第１の命令を実行し、
第２のデータを前記レジスタに書き込むよう構成された第２の命令を実行し、
前記第１の命令及び前記第２の命令に関連するデータハザードを検出し、
該検出されたデータハザードに応じて前記第２の命令を停止させ、
前記第１のデータを使用するよう構成された介在命令が存在しないことを検出し、
該介在命令が存在しないことを検出した際に取り消し要求をメモリインタフェイスへ送信し、
該取り消し要求が前記メモリインタフェイスにより受信されることを保証し、
該保証ステップの完了時に前記停止ステップを終了させる、
という各ステップを含む、スーパースケーラ処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、コンピュータ処理技術に関し、特に、命令の実行中にライトアフターライトデータハザードを検出すると共に該ハザードに関連する命令の幾つかを取り消すことによって該ハザードによるエラーを効率的に防止する、スーパースケーラ処理システム及び方法に関する。
【０００２】
【従来の技術】
並列処理は、スーパースケーラ処理としても知られるものであり、コンピュータプログラムの命令を処理するために必要な時間を短縮するために開発された。並列処理では、命令を同時に実行する少なくとも２つのパイプラインが規定される。並列処理の１つのタイプは、アウトオブオーダ(out-of-order：順序を外れた)処理であり、該処理の場合には、プロセッサの各パイプラインは、他のパイプラインとは独立して別々の命令を同時に実行する。
【０００３】
アウトオブオーダ処理では、命令は、該命令がプロセッサにより受容された順序と同じ順序でパイプラインに必ずしも入力されるとは限らない。更に、一般に、命令によってその実行に要する時間が異なり、したがって、命令がそれぞれのパイプラインに最初に入力された場合であっても、１つの命令が他の命令よりも前に実行が完了する可能性がある。したがって、命令は、必ずしもプロセッサがその命令を受け取ったのと同じ順序で実行されるわけではなく、その結果として、アウトオブオーダ処理の場合には、後に詳述するリードアフタライト(read-after-write)データハザード及びライトアフターライト(write-after-write)データハザードによるエラーを回避するために比較的複雑な処理が必要となる。
【０００４】
プロセッサにより実行されるべき１つの命令が、その実行中に、それとは別の命令を実行することにより読み出され又は生成されるデータを利用する場合には、「リードアフターライトデータ依存性」が存在する。１つの命令が他の命令の実行前に実行される場合には、エラーが生じる可能性がある。これは、該１つの命令がその実行中に不正なデータを利用する可能性があるからである。その結果として、エラーを防止するには、他の命令の実行により読み出され又は生成されるデータを利用する命令が、他の命令の実行による必要なデータが利用可能となるまで実行しないことを確実にするステップを踏まなければならない。リードアフターライトデータ依存性が存在し、かかるステップを踏まない場合には、「リードアフターライトデータハザード」が存在することになる。これは、「リードアフターライトデータ依存性」に起因して不正なデータが利用され得るからである。
【０００５】
古い命令が、その実行中に、それよりも若い命令により書き込まれた同一のレジスタその他の記憶位置にデータを書き込んで、該若い命令により書き込まれた有効なデータを不正に上書きした場合に「ライトアフターライトデータハザード」が存在する。ここで、１つの命令がプロセッサにより他の命令の後に受容された場合には、該１つの命令は該他の命令よりも「若い」と表現することができる。逆に、１つの命令がプロセッサにより他の命令の前に受容される場合には、該１つの命令は該他の命令よりも「古い」と表現することができる。
【０００６】
ライトアフターライトデータハザードの一例として、第１の命令が、データを読み出して該読み出したデータを特定のレジスタに書き込むロード命令である場合を想定する。読み出されるべきデータがローカルで利用できない場合には、該データの読み出しに比較的長い時間を要することがある。このため、第１の命令が実行された後であって該第１の命令により読み出されたデータがレジスタに書き込まれる前に、それとは別の命令（即ち、該第１の命令よりも若い命令）が他のデータを同一のレジスタに書き込むことが可能である。かかる場合には、第２の命令によりレジスタに書き込まれたデータが、第１の命令により読み出されたデータにより上書きされることがある。その結果として、レジスタが不正なデータを含み、前記第２の命令が該レジスタ中のデータを使用する際にエラーが生じることになる。したがって、古い命令の実行により生成されたデータが若い命令の実行により生成されたデータを上書きする場合にライトアフターライトデータハザードが存在する。
【０００７】
リードアフターライトデータハザード及びライトアフターライトデータハザードによるエラーを防止するために、ほとんどのアウトオブオーダ型並列プロセッサは制御機構を採用している。このため、制御機構は、各命令の実行中に、処理中の命令（以下「未完命令(pending instruction)」と称す）が、それよりも古い命令の実行により生成されるデータを必要とするか否かを判定する。実行中の命令がかかるデータを必要とする場合には、制御機構は、該古い命令が、少なくとも必要とされるデータが利用可能になるところまで処理されたか否かを判定する。該データがまだ利用可能でない場合には、制御機構は、必要とされるデータが利用可能になるまで未完命令の処理を停止させ(stall)（即ち一時的に中止し）、これによりリードアフターライトデータハザードによるエラーを防止する。
【０００８】
更に、制御機構は、古い命令による（即ち古い命令により生成され又は読み出された）データを未完命令によるデータと同一のレジスタ又は記憶位置に書き込むべきか否かを判定する。古い命令によるデータを未完命令によるデータと同一のレジスタ又は記憶位置に書き込むべき場合には、制御機構は、古い命令によるデータの該レジスタ又はメモリアドレスへの書き込みが完了するまで未完命令を停止させ、これにより、ライトアフターライトデータハザードによるエラーを防止する。結果的に、該制御機構は、未完命令を停止させて、リードアフターライトデータハザード又はライトアフターライトデータハザードによるエラーを防止することが可能となる。
【０００９】
未完命令の停止処理は、通常は、未完命令を実行するパイプラインに送られる停止信号をアサートすることにより達成される。パイプラインは、このアサートされた停止信号に応じて、該停止信号が制御機構によりデアサートされるまで、未完命令の実行を停止させるように設計される。制御機構は、リードアフターライトデータハザード又はライトアフターライトデータハザードが存在しなくなった後、停止信号をデアサートし、これに応じてパイプラインが未完命令の処理を再開する。リードアフターライトデータハザード及びライトアフターライトデータハザードによる潜在的なエラーを検出し防止するために必要な制御機構は、アウトオブオーダ型プロセッサの場合には比較的複雑なものとなり、パイプラインの数が増えるに従って制御機構の複雑性も増大することになる。
【００１０】
したがって、従来の多くの並列プロセッサ、特に多数のパイプラインを有するプロセッサは、上述のアウトオブオーダ型の処理の代わりにインオーダ(in-order：順序通りの)型の処理を採用している。インオーダ処理では、それぞれのパイプラインにより処理される命令は、システムクロック信号の特定のエッジでパイプラインの各ステージに入る。このとき、パイプラインにおける命令の処理は、通常は複数ステージへと分割され、該パイプラインの各ステージが異なる命令を同時に処理する。
【００１１】
例えば、各パイプラインにより実行される処理は、レジスタステージ、実行ステージ、例外検出ステージ、及び書き込みステージへと分割することができる。レジスタステージでは、命令の実行に必要なオペランドを獲得する。オペランドを獲得した後、命令の処理は、該命令を実行する実行ステージに入る。命令を実行した後、命令の処理は、例えばデータの不信頼性を示す実行中のオーバラン等の状態をチェックする例外検出ステージに入る。例外検出ステージが完了した後、実行ステージの結果をレジスタに書き込む書き込みステージに入る。
【００１２】
インオーダ処理の重要な特長は、発行グループ(issue group)の各命令が同時に段階的に各ステージを進行することである。本書で規定する「発行グループ」は、単一のプロセッサ内で別々のパイプラインの同一のステージにより同時に（即ち同一クロックサイクル中に）処理される１組の命令（又はインストラクションセット）である。その一例として、当業界で一般に行われているように各パイプラインの各ステージが一度に１つの命令を処理するものとする。パイプラインの例外検出ステージ中の命令は第１の発行グループを形成し、パイプラインの実行ステージ中の命令は第２の発行グループを形成する。更に、パイプラインのレジスタステージ中の命令は第３の発行グループを形成する。発行グループの各々は、システムクロック信号のアクティブエッジに応じて次の各ステージに進む。換言すれば、システムクロック信号のアクティブエッジに応じて、第１の発行グループが書き込みステージに進み、第２の発行グループが例外検出ステージに進み、第３の発行グループが実行ステージに進む。
【００１３】
本書で使用する「アクティブエッジ」とは、システムクロック信号の任意のエッジであって、その発生によりパイプライン中の未停止状態の各命令を該パイプライン中の次の処理ステージへと進行させるものである。例えば、プロセッサが、未停止状態の各命令を３クロックサイクル毎に次の処理ステージに進めるよう設計されているものとする。この例では、アクティブエッジは、クロック信号の２つおきのアップエッジとして規定することができる。クロック信号のどのエッジを「アクティブエッジ」として指定するかは、設計パラメータに基づくものであり、プロセッサによって異なる場合がある、ということに留意されたい。
【００１４】
インオーダ処理では、１つの発行グループ中の命令が、別の発行グループ中の別の命令を通さないことが好ましい。換言すれば、１つの発行グループ中の命令がパイプラインに入る前に、他の発行グループの命令を処理している同一ステージに別の発行グループの命令が入ることが防止される。したがって、任意の時点では、パイプラインの各ステージはそれぞれ、１つの発行グループのみからの命令を処理している。異なる発行グループからの命令が互いに重なることが防止されるので、パイプラインを制御しリードアフターライトデータハザード及びライトアフターライトデータハザードによるエラーを防止する制御機構は、大幅に単純化され、このためアウトオブオーダ処理にとって好ましいものとなることが多い。
【００１５】
【発明が解決しようとする課題】
アウトオブオーダ処理及びインオーダ処理の両方において、ライトアフターライトデータハザードに関して幾つかの非効率的な点が存在する。上述のように、ライトアフターライトデータハザードは、未完命令と古い命令とが同一のレジスタその他の記憶位置に書き込みを行う場合に存在する。通常は、古い命令と未完命令との間の別の命令（以下「介在命令」と称す）が古い命令により生成又は読み出されたデータを読むことができるように、古い命令がレジスタへ書き込みを行う。しかし、実行時におけるプログラムの分岐やその他の理由によって、古い命令により生成され又は読み出されたデータを実際に利用する介在命令が存在しない（即ち古い命令と未完命令との間に命令が存在しない）ことがある。その結果として、古い命令により読み出されたデータが役に立たなくなる。しかし、ライトアフターライトデータハザードによるエラーを防止するために、プロセッサは、古い命令により読み出され又は生成されたデータがレジスタに書き込まれるまで未完命令を停止させる。その結果として、プロセッサは、プログラムを実行するために該プロセッサにより使用されることのないデータを待たなければならす、このため、望ましくない非効率性が生じることになる。
【００１６】
したがって、ライトアフターライトデータハザードを防止する際の並列プロセッサの効率を高めるシステム及び方法を提供する必要性がこれまで取り組まれずに当業界に存在する。
【００１７】
【課題を解決するための手段】
本発明は、以上考察したような従来技術の欠点及び欠陥を克服するものである。本発明は、一般に、ライトアフターライトデータハザードにより生じるエラーを効率的に防止するシステム及び方法を提供する。
【００１８】
アーキテクチャにおいて、本発明の処理システムは、複数のパイプラインと制御機構とを利用する。該複数のパイプラインは、第１の命令及び第２の命令を含むコンピュータプログラムの命令を受け取り処理する。前記制御機構は、前記第１及び第２の命令が同一位置にデータを書き込むよう構成される場合に該第１及び第２の命令に関連するライトアフターライトデータハザードを検出するように設計される。ライトアフターライトデータハザードを検出した後、制御機構は、第１の命令の実行により生成され又は読み出されたデータに依存する介在命令（即ち第１の命令と第２の命令との間の命令）が存在するか否かを判定する。かかる介在命令が存在しない場合には、制御機構は、取り消し要求を送って第１の命令を取り消す。
【００１９】
本発明のもう１つの態様によれば、メモリインタフェイスが、前記取り消し要求を受け取り、該取り消し要求に応じて、第１の命令の実行により要求されたデータの探索を中止し、又は上記の位置にデータを送るのをやめる。
【００２０】
本発明のもう１つの態様によれば、制御機構は、ライトアフターライトデータハザードに応じて第２の命令を停止させ、第１の命令が取り消された際に第２の命令の停止を解除する。
【００２１】
本発明はまた、コンピュータプログラムの命令を効率的に処理するための処理方法を提供するものとみなすことができる。この方法は、コンピュータプログラムから第１の命令及び第２の命令を含む複数の命令を受け取り、該第１の命令及び第２の命令に関連するライトアフターライトデータハザードを検出し、ライトアフターライトデータハザードに応じて第２の命令を停止させ、前記複数の命令のうちの別の命令が第１の命令に依存するか否かを判定し、この判定ステップにおいて、前記複数の命令内に第１の命令に依存する命令が存在しないことを検出し、該不存在検出ステップに応じて第１の命令を取り消し、該取り消しステップに応じて第２の命令を処理する、という各ステップにより広義に概念化することが可能なものである。
【００２２】
本発明のその他の特徴及び利点は、図面と関連して以下の詳細な説明を検討することにより当業者には明らかとなろう。かかる特徴及び利点の全ては、本発明の範囲内に含まれ、及び特許請求の範囲により保護されるものである。
【００２３】
本発明は、図面を参照することによりより良く理解することができる。図中の要素は、必ずしも互いに同じ尺度で表されておらず、本発明の原理を明確に示すために強調されている。更に、幾つかの図を通して同一の符合は対応する部分を示している。
【００２４】
【発明の実施の形態】
本発明は、ライトアフターライトデータハザードにより生じるエラーを効率的に防止するスーパースケーラ処理システム及び方法に関するものである。図１は、本発明の処理システム20を用いたコンピュータシステム15の好ましい実施形態を示している。該好ましい実施形態の処理システム20は、ハードウェアで実施されることが好ましいが、必要に応じて処理システム20の一部をソフトウェアで実施することも可能である。
【００２５】
図１に示すように、コンピュータシステム15は、ローカルインタフェイス22を備えており、該ローカルインタフェイス22は、処理システム20がコンピュータシステム15の他の要素と通信することを可能にする１つ又は複数のバスを含むことが可能である。更に、入力装置25（例えばキーボード及び／又はマウス）を使ってシステム15のユーザからのデータを入力することが可能であり、また表示装置27及び／又はプリンタ29を使用してユーザにデータを出力することが可能である。システムクロック31は、システム15により通信されるデータのタイミングを制御するために当業界で既知の技術を介して使用されるクロック信号を生成する。ディスク記憶機構32は、ローカルインタフェイス22に接続され、不揮発性ディスク（例えば磁気ディスク、光ディスク等）との間でデータを転送することが可能となっている。必要に応じて、システム15は、該システム15がネットワーク35とデータを交換することを可能にするネットワークインターフェース33に接続することが可能である。
【００２６】
システム15は、更に、プログラム41、メモリインタフェイス45、及びコンパイラ46を備える。プログラム41とコンパイラ46はメモリ44に格納されることが好ましい。メモリインタフェイス45は、システム15の他の装置からの読出要求を受け取り、該読出要求に応じてメモリ44からデータを読み出すよう設計される。メモリインタフェイス45は、メモリ44の様々な部分をチェックして、要求されたデータを探し出すことが可能である。例えば、メモリ44は、メモリキャッシュ、レジスタ、RAM、ROM等の様々なタイプの記憶装置から構成されることが多く、メモリインタフェイス45は、要求されたデータを探索するために最初にメモリキャッシュの探索を行うことができる。メモリインタフェイス45は、要求されたデータをキャッシュ内で見つけることができなかった場合には、要求されたデータが見つかるまで、RAMその他のタイプの記憶装置の探索を行うことが可能である。メモリインタフェイス45は、ネットワークインターフェース33及びネットワーク35を介して更に探索を行い、要求されたデータをリモートシステム内で探し出すことさえ可能である。したがって、メモリインタフェイス45は、要求されたデータを探し出すために、探索を実行する回数又は要求されたデータが見出される場所に依存して、１〜２のクロックサイクルから数千というクロックサイクルまで任意のクロックサイクルを用いることが可能である。メモリインタフェイス45は、要求されたデータを探し出して読み出した後、該読み出したデータを、該読み出しを要求した関連する読出要求により示されるアドレスに送る。
【００２７】
プログラム41は、処理システム20により処理され実行されるべき命令を含む。プログラム41が実行されるとき、メモリインタフェイス45により該プログラム41の命令が取り出されて処理システム20へと送られる。プログラム41の命令を処理システム20に送る前に、該命令が最初にコンパイラ46によって処理システム20に適した形へと変換されることが好ましい。例えば、プログラム41の命令が、例えばCやFortranといった高級コンピュータ言語で記述されている場合には、コンパイラ46が、命令を処理システム20に適した機械語へと翻訳するよう設計される。
【００２８】
好ましい実施形態では、コンパイラ46は、翻訳された命令を含み且つ処理システム20に直接送ることができる命令バンドル(instruction bundle：一組の命令)を規定する。図２は、本発明の原理による命令バンドル52を示す。同図に示すように、各命令バンドル52は、1つ又は複数の命令を規定するデータを含み、及びヘッダ55を含む。該ヘッダ55は、命令バンドル52に含まれる命令のタイプを識別する識別子情報を含む。例えば、ヘッダ55は、バンドル52内の第１の命令がメモリ操作命令であり、バンドル52内の第２の命令が整数演算命令であり、バンドル52内の第３の命令が浮動小数点演算であるといったことを示す情報を含むことが可能である。ヘッダ55はまた、後に詳述するストップビット57を含む。
【００２９】
命令バンドル52の規定にあたり、コンパイラ46は、リードアフターライトデータハザード及びライトアフターライトデータハザードに関するチェックを行い、リードアフターライトデータハザード又はライトアフターライトデータハザードを画定する２つの命令が同一のバンドル52中に存在しないことを保証するように設計されることが好ましい。更に、コンパイラ46は、バンドル52を処理システム20に特定の順序（「プログラム順」と呼ばれる）で連続して送るように設計され、該コンパイラ46は、アサートされたストップビット57により境界が形成されたバンドル52内の命令間にリードアフターライトデータハザードもライトアフターライトデータハザードも存在しないことを保証するように設計されることが好ましい。したがって、処理システム20は、デアサートされたストップビット57を有する複数の命令バンドル52からなるストリングを受け取った場合には、該ストリング中のどの命令も該ストリング中の他の命令に依存することがなく、又は該ストリング中のどの命令も該ストリング中の他の命令と同一のレジスタにデータを書き込むことがない、ということを認識する。
【００３０】
命令を処理システム20に前述の命令バンドル52で送ることは、システム20の最適性能を改善するのに役立つことに注意されたい。しかし、必ずしも命令を処理システム20に前述のバンドル52で送る必要はない。本発明を実施するためには、命令を処理システム20に送るためのあらゆる技術が適したものとなる。
【００３１】
図３に示すように、処理システム20は、処理システム20に送られた命令を受け取るよう設計された命令分散ユニット（IDU）72を備えている。IDU72は、該IDU72が受け取った命令により発行グループを規定し、及び１つの発行グループの命令をパイプラインに送るように構成され、これにより、発行グループの各１つの命令がパイプライン75のうちの１つのみにより受け取られ、及び各パイプライン75が２つ以上の命令を受け取らないようにする。パイプライン75は、受け取った命令を更に処理し実行するように設計される。並列インオーダプロセッサにおける従来のパイプラインと同様に、パイプライン75は、受け取った命令を複数のステージで処理することが好ましい。
【００３２】
図４は、パイプライン75のための１組のステージの一例を示している。この点に関し、各パイプライン75は、命令を受け取り、該命令を、レジスタステージ77、実行ステージ79、例外検出ステージ81、及び最後に書き込みステージ83で順次に処理する。これらの各ステージは、従来の技術の欄で一層詳細に説明したものであり、他のステージ及び／又はステージの他の組み合わせを利用して命令を処理し実行することが可能であることに注意されたい。
【００３３】
発行グループを規定する際、IDU72は、各命令が該命令に適合するパイプライン75のみに送られるように設計されることが好ましい。これに関連して、パイプライン75の幾つかは、一定のタイプの命令だけを扱うように設計することが可能である。例えば、メモリ操作命令、整数演算命令、浮動小数点演算命令、又はその他の既知のタイプの命令だけを処理するようにパイプライン75のうちの１つ又は２つ以上を構成することが可能である。したがって、IDU72は、受け取った命令を分析し、及び適切なタイプの命令が各パイプライン75に送られるように発行グループを規定するように設計される。好ましい実施形態では、IDU72は、各命令バンドル52のヘッダ55を分析して、どの命令がどのパイプライン75に適合するかを決定することが可能である。
【００３４】
IDU72はまた、リードアフターライトデータハザード又はライトアフターライトデータハザードを画定する２つの命令が同一の発行グループに入ることがないように設計される。したがって、クロック31により生成されるクロック信号のアクティブエッジで第１の処理ステージ（即ち、好ましい実施形態ではレジスタステージ77）に入る各命令は、それと同一のクロックエッジで第１のステージに入る他の命令の何れともリードアフターライトデータ依存性を有さない。更に、クロック信号のエッジで第１の処理ステージに入る各命令は、それと同一のクロックエッジで第１のステージに入る他の命令と同一のレジスタ又は記憶位置にデータを書き込まない。上述のように、命令バンドル52のストップビット57が、連続する命令バンドル52の命令間にリードアフターライトデータハザード又はライトアフターライトデータハザードがあるか否かを示すため、IDU72は、ストップビット57を利用して発行グループを規定するプロセスを簡素化することが可能である。これに関連して、IDU72は、各命令間でリードアフターライトデータハザード又はライトアフターライトデータハザードに関するチェックを行うことなく、デアサートされたストップビット57を有する複数のバンドル52からなるストリング中の任意の命令を同一の発行グループに入れることが可能となる。これは、コンパイラ46が、ストップビット57のアサート／デアサートを介して、それら命令間にリードアフターライトデータハザードもライトアフターライトデータハザードも存在しないことを保証しているからである。
【００３５】
IDU72は、更に、若い命令が古い命令よりも前にパイプライン75の処理を完了することがないように設計される。これに関連して、命令の処理は、元のプログラム41により規定された順序と同一の順序（「プログラム順」と呼ばれる）で完了させなければならないことは周知である。プログラム順とは、処理システム20により命令が受け取られる順序である。
【００３６】
各命令の古さ(age)は、プログラム順における位置に基づくものである。例えば、プログラム41における実行されるべき第１の命令（即ち、処理システム20に送られるプログラム41の第１の命令）は、最も古い命令であり、プログラム41の他の命令は全て、該第１の命令よりも若い。第１の命令の後に実行されるべき次の命令（即ち、プログラム41の第１の命令の後に送られる次の命令）は、第１の命令よりも若いが、プログラム41の残りの命令のよりも古い。更に、実行されるべき最後の命令が最も若い命令である。スーパースケーラプロセッサが一度に複数の命令を処理する場合であっても、各命令は、非スーパースケーラプロセッサがプログラム41を１ステップずつ進めて１回に１つずつ命令を処理する場合と同一の順序で処理（即ち、上記の例では書き込みステージ83）を完了させなければならない。若い命令の処理が古い命令よりも前に完了しないことを確実にするために、IDU72は、若い命令を含む発行グループの後にパイプライン75に送られることになる発行グループに古い命令を割り当てないことが好ましい。
【００３７】
IDU72は、発行グループの規定を完了した後、各発行グループをパイプライン75へ順序通りに逐次送るように設計される。したがって、発行グループ内の各命令は、クロック信号の同一のアクティブエッジで、それぞれのパイプライン75に送られる。理想的には、各発行グループ内の各命令がクロック信号のアクティブエッジ間の各ステージで完全に処理され、発行グループ内の各命令が同一のクロックエッジで次のステージに入るようにする。したがって、レジスタステージ77における発行グループの各命令は、実行ステージ79及び例外検出ステージ81における発行グループの命令がそれぞれ例外検出ステージ81及び書き込みステージ83に入るのと同一のクロックエッジで、実行ステージ79に入る。更に、レジスタステージ77、実行ステージ79、及び例外検出ステージ81における発行グループの命令が次のステージにそれぞれ入るときに、新しい発行グループの命令がレジスタステージ77に入る。その結果として、この発行グループの処理は、１つの発行グループからの命令が別の発行グループ中の命令と同一のステージに入ることがないという点で、インオーダ型のものとなる。
【００３８】
図３に示すように、処理システム20は、パイプライン75に接続された制御機構85を備えていることが好ましい。図示の簡素化のため、図３は１つのパイプライン75だけに接続された制御機構85を示している。しかし、好ましい実施形態では、制御機構85が他のパイプライン75にも同様に接続されていることに留意されたい。制御機構85は、従来の技術を介して、パイプライン75により処理される命令のリードアフターライトデータハザード及びライトアフターライトデータハザードを検出する。制御機構85は、パイプライン75による処理中の命令の更なる処理によってリードアフターライトデータハザード又はライトアフターライトデータハザードに起因するエラーが生じることになる可能性があると判定した場合に、命令を停止させるように設計される。これに関連して、制御機構85は、命令を処理するパイプライン75に停止信号を送り、これに応じて、パイプライン75はそれ以降の命令の処理を中止する。更に、制御機構85は、若い命令を処理する各パイプライン75の各ステージに停止信号を送って若い命令を停止させるよう設計され、これにより、停止された命令よりも前に若い命令がパイプライン75の処理を完了することが防止される。
【００３９】
一例として、パイプライン75のうちの１つの書き込みステージ83における第１の命令がそれとは別のパイプライン75の実行ステージ79における第２の命令と同一のレジスタにデータを書き込み、それら２つの命令間にライトアフターライトデータハザードが存在する、と制御機構85が判定した場合を想定する。その結果として、制御機構85は、第２の命令を停止させるよう設計される。この点に関し、制御機構85は、各パイプライン75の実行ステージ79に送られる停止信号をアサートし、該アサートされた停止信号に応じて実行ステージ79の命令の処理が中止される。更に、処理のインオーダ特性を保持するために、制御機構85は、また、各パイプライン75のレジスタステージ77（即ち、停止させる命令よりも若い命令を実行しているステージ）に送られる停止信号をアサートする。このため、各パイプライン75の実行ステージ79及びレジスタステージ77中の各命令が停止される一方、各パイプライン75の例外検出ステージ81及び書き込みステージ83中の命令の処理を続行することが可能となる（別のリードアフターライトデータハザード又はライトアフターライトデータハザードを防止するために例外検出ステージ81及び書き込みステージ83における命令を停止させる必要はないものと仮定する）。
【００４０】
しかし、ステージ77,79,81,又は83における第２の命令を停止させると共に、同一のステージ77,79,81,又は83における他の命令の幾つかの処理を続行させることが可能である、ということに留意されたい。これに関連して、本発明者により出願された「Superscalar Processing System and Method For Efficiently Performing In-order Processing of Instructions」（代理人整理番号10971338）と題する米国特許出願は、命令を停止させると共に同一ステージにある他の命令の幾つかの処理を続行させるシステム及び方法を説明している。該特許出願に記載されている技術をシステム20で使用して、同一ステージ（即ちこれまで説明した例では実行ステージ79）における命令の幾つかの処理の続行を可能にすると共に第２の命令を停止させることができる。
【００４１】
ライトアフターライトデータハザードの結果としてのエラーが生じないことを確実にするために、従来の処理システムは典型的には、上述の第１の命令からのデータがレジスタに書き込まれるまで待った後、パイプライン75の実行ステージ79及びレジスタステージ77に送られた上述の停止信号をデアサートする。しかし、好ましい実施形態では、制御機構85は、第１の命令により書き込まれるデータを利用する介在命令（即ち、第１の命令よりも若くて第２の命令よりも古い命令）があるか否かを判定するように設計される。第１の命令の実行の結果として書き込まれるデータを利用する介在命令が存在する場合には、制御機構85は、従来のシステムと同様に、第１の命令のデータが書き込まれるのを待った後に第２の命令の停止を解除する。しかし、かかる介在命令が存在しない場合には、制御機構85は、従来のシステムとは異なり、第１の命令を取り消し、該第１の命令からのデータをレジスタに書き込むことなく第２の命令に対する停止を解除するよう構成される。
【００４２】
制御機構85は、メモリインタフェイス45に取り消し要求を送ることにより第１の命令を取り消すよう構成される。上述のように、メモリインタフェイス45は、読出要求に応じてデータを読み出し、該読み出したデータを前記読出要求により示されるアドレスへ送る。その結果として、メモリインタフェイス45は、該メモリインタフェイス45が取り消し要求を受け取るとき、第１の命令の実行中に要求されたデータを探索し又は読み出すプロセス中になければならない。
【００４３】
メモリインタフェイス45は、取り消し要求に応じて、第１の命令により要求されたデータの探索を中止するように構成される。したがって、メモリインタフェイス45は、要求されたデータについての新たな探索は行わない。更に、取り消し要求を受け取るときまでに、メモリインタフェイス45が要求されたデータのメモリ44からの読み出しを既に完了しており、又はメモリインタフェイス45が探索を既に完了し要求されたデータが最終的にメモリ44から取り出されている可能性がある。かかる状況では、メモリインタフェイス45は、読み出したデータを廃棄し、又は少なくとも読み出したデータを読出要求により示されるアドレスに送らない（即ち、読み出したデータを第２の命令により書き込まれることになるレジスタへ送るのをやめる）ように構成される。
【００４４】
したがって、メモリインタフェイス45が取り消し要求を受け取った後、第１の命令により要求されたデータが読出要求により指定されるアドレスにまだ書き込まれていないものと仮定すれば、第１の命令が取り消され、よってライトアフターライトデータハザードはもはや存在しない。また、メモリインタフェイス45が、要求されたデータをそのアドレスに既に書き込んでいる場合には、ライトアフターライトデータハザードはもはや存在しない。したがって、処理システム20が、メモリインタフェイス45が取り消し要求を受け取ったことを保証した後、制御機構85は、第２の命令を処理するパイプライン75のステージ79に送られた停止信号をデアサートすることにより第２の命令の停止を解除するように構成される。更に、レジスタステージ77及び実行ステージ79における各命令もまた前述のライトアフターライトデータハザードに応じて停止されているので、制御機構85は、パイプライン75のステージ77,79に送られた停止信号をデアサートするよう構成される。その結果として、パイプライン75は、実行ステージ79及びレジスタステージ77における命令を処理することが可能となり、それらの命令の処理が再開される（これらのステージには、停止を生じさせ得る他のハザードその他の条件の結果として停止させる必要のある他の命令は存在しないものとする）。
【００４５】
第１の命令により書き込まれるデータを利用する介在命令が存在するか否かを判定するために様々な方法を利用することが可能である。好ましい実施形態では、制御機構85は、より最近のステージ（即ち、前述の例では例外検出ステージ81及び書き込みステージ83）における各命令が、書き込みステージ83やその他のステージ77,79,又は81のうちの１つのステージに完全に入ったことを検出することにより、かかる介在命令が存在しないことを検出するよう構成される。これに関し、第１の命令によるデータを利用する介在命令が存在する場合には、該介在命令は、第１の命令により生成され又は読み出されるデータがレジスタに書き込まれるまで、ステージのうちの１つで停止されることになる。これは、第１の命令からのデータがレジスタに書き込まれるまで、第１の命令と介在命令との間にリードアフターライトデータハザードが存在するからである。
【００４６】
したがって、パイプライン75の一層最近のステージにおける全ての命令が、第１の命令に依存する（即ち、第１の命令により生成され又は読み出されたデータを利用する）介在命令が停止されるべきステージと重なる場合、及び第１の命令により生成され又は読み出されたデータがレジスタにまだ書き込まれていない場合には、制御機構85は、第１の命令により生成され又は読み出されたデータを利用する介在命令が存在しないことを認識していなければならない。この状況では、制御機構85は、前述のように、第１の命令を取り消して第２の命令の停止を解除するように構成され、これにより、第１の命令からのデータがレジスタに書き込まれるのを待つことなく第２の命令の処理を再開することが可能となる。その結果、処理システム20の効率が改善される。
【００４７】
以上、インオーダ処理に関して本発明を説明してきたことに留意されたい。しかし、本発明の原理は、アウトオブオーダ処理にも適用可能なものである。これに関し、アウトオブオーダプロセッサは、インオーダプロセッサと同様に、古い命令によるデータがレジスタに書き込まれるのを待った後、若い命令によるデータを同一のレジスタに書き込む。しかし、前述のように、古い命令の実行により書き込まれるデータを利用する介在命令が存在しない場合にメモリインタフェイス45に取り消し要求を送ることにより古い命令を取り消すことができる場合には、若い命令をすぐに実行することが可能となる。したがって、当業者とって自明であるように、必要に応じて他のタイプの処理システムにより本発明の原理を採用することが可能である。
【００４８】
更に、実行ステージ79で第２の命令を停止させるものとして本発明を説明してきた。しかし、ライトアフターライトデータハザードに応じて、第２の命令を、ステージ77,79,81,又は83の何れかで同様に停止させることが可能であることに留意されたい。
動作
以下、処理システム20の好ましい使用法及び動作並びにそれに関連する方法について説明する。
【００４９】
コンピュータプログラム41からの命令は、コンパイラ46によりコンパイルされて処理システム20（図１）に送られる。処理システム20中のIDU72（図３）は、命令を受け取り、該命令を複数の発行グループへと分離させる。該発行グループは、他の命令との間にリードアフターライトデータハザードもライトアフターライトデータハザードも有さない命令セットである。次いで、該発行グループは、システムクロック31により生成されるクロック信号のアクティブエッジに基づいてパイプライン75のステージ77,79,81,及び83に入り、また通過する。したがって、停止が存在しない場合には、ステージ77,79,81,又は83の何れかの命令が、クロック信号の同一エッジで次のステージに進み、１つの発行グループからの命令が、それとは別の発行グループからの命令がパイプライン75の何れかにおいて処理されている同一のステージ77,79,81,又は83に入ることは決してない。
【００５０】
図５のブロック115,118に示すように、制御機構85は、従来の技術を介して、パイプライン75により処理されているデータを監視し、システム20により処理される命令に関してライトアフターライトデータハザードが存在するか否かを判定する。制御機構85は、第１の命令と第２の命令との間にライトアフターライトデータハザードが存在することを検出すると、ブロック118,121に示すように、第２の命令（即ち若い命令）を停止させる。これに関し、制御機構85は、第２の命令を処理しているパイプライン75のステージ77,79,81,又は83に送られる停止信号をアサートする。前述のステージ77,79,81,又は83は、これに応じて命令の処理を停止する（即ち、命令がパイプライン75の次のステージに入るのを防止する）。インオーダ処理を維持するために、パイプライン75により処理される他の命令、特に第２の命令よりも若い命令を、停止させなければならない場合がある。
【００５１】
第２の命令を停止させた後、制御機構85は、ブロック124で示すように、第１の命令により生成され又は読み出されたデータが、ライトアフターライトデータハザードに関連するレジスタに書き込まれているか否かを決定する。該データが書き込まれている場合には、ライトアフターライトデータハザードはもはや存在せず、ブロック126で示すように、前述の停止信号をデアサートして第２の命令の停止を解除することが可能である。しかし、該データがまだ書き込まれていない場合には、制御機構85は、ブロック128で示すように、第１及び第２の命令が書き込むことになるレジスタ内のデータを利用する（例えば読み出す）介在命令（即ち、第１の命令と第２の命令との間で実行される命令）が存在するか否かを判定する。換言すれば、制御機構85は、パイプライン75により処理される命令の何れかが、第１の命令とのリードアフターライトデータ依存性を有する（即ち第１の命令に依存する）か否かを判定する。かかる介在命令が存在する場合には、制御機構85は、ブロック124,126,128に示すように、第１の命令によるデータが書き込まれるのを待った後に前述の停止信号をデアサートする。また、制御機構85は、第１の命令により書き込まれるデータを利用する介在命令がないと判定した場合には、ブロック132で示すように、取り消し要求をメモリインタフェイス45に送って第１の命令を取り消す。
【００５２】
好ましい実施形態では、制御機構85は、パイプライン75により処理されている命令を監視して、第２の命令の発行グループよりも古い各発行グループの各命令がパイプライン75により完全に処理され又はステージ77,79,81,又は83のうちの特定の１つにより完全に処理されたか否かを判定することにより、ブロック128の機能を実行する。該判定結果が肯定である場合には、制御機構85はかかる介在命令が存在しないことを知る。これは、介在命令及び第１の命令に関連するリードアフターライトデータハザードの結果として介在命令が停止されることになるからである。
【００５３】
メモリインタフェイス45は、取り消し要求に応じて、第１の命令により要求されたデータの探索を停止する。更に、メモリインタフェイス45が、取り消し要求を受け取った際に、要求されたデータの読み出しが既に完了しており又は要求されたデータの読み出しプロセス中にある場合には、該メモリインタフェイス45は、取り消し要求に応じて要求されたデータを送るのをやめる。その結果として、処理システム20による第１の命令の実行が既に完了している場合であっても、第１の命令は事実上取り消される。
【００５４】
制御機構85は、ブロック135で、メモリインタフェイス45が取り消し要求を受け取ったことを判定する。制御機構85は、様々な方法でこの機能を実行することが可能である。好ましい実施形態では、制御機構85は、取り消し要求が処理システム20からメモリインタフェイス45へ送られるのに十分な所定時間だけ待つことによりブロック135を実行する。制御機構85は、メモリインタフェイス45が取り消し要求を受け取ったことを確認した後、ブロック126で示すように、第２の命令を停止させるステージ77,79,81又は83に送られた停止信号をデアサートする。これに応じて、パイプライン75による第２の命令の処理が再開される。更に、第２の命令が停止された際にシステム20のインオーダ処理を維持するために他の命令が停止された場合には、制御機構85は、ブロック126で、それらの命令の停止も解除するように構成される。
【００５５】
以上説明した本発明の実施形態、特に任意の「好ましい」実施形態は、単なる考え得る実施例であり、本発明の原理を明確に理解するためのものに過ぎない。ということに留意されたい。本発明の思想及び原理から実質的に逸脱することなく上述の実施形態に様々な変形及び修正を行うことが可能である。かかる修正及び変形は全て、本発明の範囲に含まれ、特許請求の範囲により保護されることを意図したものである。
【００５６】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
【００５７】
１．コンピュータプログラムの命令を効率的に処理するスーパースケーラ処理システムであって、
コンピュータプログラム(41)の命令を受け取って該命令を処理するように構成された複数のパイプライン(75)であって、前記命令が第１の命令及び第２の命令を含み、前記第１の命令がデータを特定の位置に書き込むように構成され、前記第２の命令がデータを前記特定の位置に書き込むように構成されている、複数のパイプライン(75)と、
前記複数のパイプライン(75)に接続された制御機構(85)であって、前記第１の命令及び前記第２の命令に関連するライトアフターライトデータハザードを検出するように構成され、前記位置からデータを読み出す介在命令が存在するか否かを判定するように構成され、及び前記介在命令が存在しないことを検出した場合に前記第１の命令に関連する取り消し要求を送るように構成された、制御機構(85)とを備えている、スーパースケーラ処理システム。
２．前記制御機構(85)から前記取り消し要求を受け取り、該取り消し要求に応じて前記第１の命令に関連するデータの探索を停止するように構成された、メモリインタフェイス(45)を更に備えている、前項１に記載のシステム。
３．前記制御機構(85)から前記取り消し要求を受け取り、該取り消し要求に応じてデータを破棄するように構成された、メモリインタフェイス(45)を更に備えている、前項１に記載のシステム。
４．前記命令を受け取り、該受け取った命令に基づいて発行グループを規定するように構成された、命令分散ユニット(72)を更に備えており、該命令分散ユニット(72)が、更に前記発行グループを前記パイプライン(75)に送るように構成され、各発行グループが、前記パイプライン(75)により同時に処理されるべき命令を含み、前記制御機構(85)が、少なくとも１つの発行グループ内の各命令が前記パイプライン(75)の少なくとも１つのステージにより完全に処理されたか否かを判定することによって前記介在命令の有無を判定するように構成されている、前項１に記載のシステム。
５．前記制御機構(85)が更に、前記ライトアフターライトデータハザードに応じて停止信号をアサートするように構成され、及び前記第１の命令が取り消されたという判定に応じて前記停止信号をデアサートするように構成されている、前項１に記載のシステム。
６．コンピュータプログラムの命令を効率的に処理するコンピュータシステムであって、
コンピュータプログラム(41)の命令を受け取って該命令を処理するように構成された複数のパイプライン(75)であって、前記命令が、第１の命令及び第２の命令を含み、該パイプライン(75)のうちの１つが、停止信号がアサートされた場合に前記第２の命令を停止させるように構成され、及び該停止信号がデアサートされた場合に前記第２の命令の処理を再開させるように構成されている、複数のパイプライン(75)と、
該パイプライン(75)に接続された制御機構(85)であって、前記第１及び第２の命令に関連するライトアフターライトデータハザードを検出するように構成され、該ライトアフターライトデータハザードに応じて前記停止信号をアサートするように構成され、前記複数の命令のうちの他の命令が前記第１の命令に依存するか否かを判定するように構成され、前記他の命令のうちの何れかが前記第１の命令に依存すると判定することができない場合に前記停止信号をデアサートし及び前記第１の命令を取り消すように構成されている、制御機構(85)とを備えている、コンピュータシステム。
７．コンピュータプログラムの命令を効率的に処理するスーパースケーラ方法であって、
コンピュータプログラム(41)から第１の命令及び第２の命令を含む複数の命令を受け取り、
前記第１の命令及び前記第２の命令に関連するライトアフターライトデータハザードを検出し、
該データハザードに応じて前記第２の命令を停止させ、
前記複数の命令のうちの別の命令が前記第１の命令に依存するか否かを判定し、
該判定ステップにおいて、前記複数の命令のなかに前記第１の命令に依存する命令が存在しないことを検出し、
該命令の不存在の検出ステップに応じて前記第１の命令を取り消し、
該取り消しステップに応じて前記第２の命令を処理する、
という各ステップを有する、コンピュータプログラムの命令を効率的に処理するスーパースケーラ方法。
８．前記取り消しステップが、取り消し信号を送るステップを含み、
前記第１の命令に関連するデータを探索し、
前記取り消し信号に応じて前記探索ステップを終了させる、
という各ステップを有する、前項７に記載の方法。
９．前記取り消しステップが、前記第１の命令に関連するデータを破棄するステップを含む、前項７に記載の方法。
10．前記命令に基づき、複数のコンピュータパイプライン(75)により同時に処理されるべき命令を各々含む複数の発行グループを規定し、
前記発行グループを前記コンピュータパイプライン(75)に順次送り、
前記発行グループを前記コンピュータパイプライン(75)により各ステージで処理する、という各ステップを更に含み、
前記判定ステップが、前記発行グループのうちの少なくとも１つの発行グループ内の各命令が少なくとも１つのステージにより完全に処理されたか否かを分析するステップを更に含む、前項７に記載の方法。
【図面の簡単な説明】
【図１】本発明による処理システムを用いたコンピュータシステムを示すブロック図である。
【図２】図１に示す処理システムに送られる典型的な一組の命令を示すブロック図である。
【図３】図１に示す処理システムを一層詳細に示すブロック図である。
【図４】図１に示す処理システムの各処理ステージを示すフローチャートである。
【図５】図３に示す制御機構のアーキテクチャ及び機能を示すフローチャートである。
【符号の説明】
41  コンピュータプログラム
75  パイプライン
85  制御機構
45  メモリインタフェイス
72  命令分散ユニット
【図１】
0003659877.tif 000002
【図２】
0003659877.tif 000003
【図３】
0003659877.tif 000004
【図４】
0003659877.tif 000005
【図５】
0003659877.tif 000006