(57)【要約】【課題】  ロード命令及びストア命令を実行する方法を改善すること。【解決手段】  実施形態は、命令を実行するための方法及び装置を提供する。１つの実施形態においては、本方法は、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、を含む。本方法は、さらに、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データをストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに予測的に転送するステップと、を含む。ロード命令は、ストア・データを第１のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する。ロード実効アドレスがストア実効アドレスと一致する場合には、予測的に転送されたストア・データはロード・データと統合される。ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータがロード・データと統合される。【選択図】  図２
2009540411.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにおいて命令を実行する方法であって、
ロード命令及びストア命令を受信するステップと、
前記ロード命令についてのロード・データのロード実効アドレスと前記ストア命令についてのストア・データのストア実効アドレスとを計算するステップと、
前記ロード実効アドレスを前記ストア実効アドレスと比較するステップと、
前記ストア命令についての前記ストア・データを、前記ストア命令が実行されている第１のパイプラインから、前記ロード命令が実行されている第２のパイプラインに転送するステップであって、前記ロード命令は、前記ストア・データを前記第１のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する、ステップと、
前記ロード実効アドレスが前記ストア実効アドレスと一致する場合には、前記転送されたストア・データを前記ロード・データと統合するステップと、
前記ロード実効アドレスが前記ストア実効アドレスと一致しない場合には、前記データ・キャッシュからの前記要求されたデータを前記ロード・データと統合するステップと、
を含む方法。
【請求項２】
前記転送されたデータは、前記ロード・データのページ番号が前記ストア・データのページ番号の一部と一致する場合にのみ統合される、請求項１に記載の方法。
【請求項３】
前記転送されたデータは、前記ロード・データのロード物理アドレスの一部が前記ストア・データのストア物理アドレスの一部と一致する場合にのみ統合される、請求項１に記載の方法。
【請求項４】
前記ロード物理アドレスは前記ロード実効アドレスを用いて取得され、前記ストア物理アドレスは前記ストア実効アドレスを用いて取得される、請求項３に記載の方法。
【請求項５】
前記比較は、前記ロード実効アドレスの一部のみと前記ストア実効アドレスの一部のみとを用いて行われる、請求項１に記載の方法。
【請求項６】
前記ロード命令及び前記ストア命令は、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく、前記第１のパイプライン及び前記第２のパイプラインによって実行される、請求項１に記載の方法。
【請求項７】
前記転送されたストア・データを前記ロード・データと統合した後で、前記ストア・データのストア物理アドレスを前記ロード・データのロード物理アドレスと比較して、前記ストア物理アドレスが前記ロード物理アドレスと一致するかどうかを判定する検証を行うステップをさらに含む、請求項１に記載の方法。
【請求項８】
キャッシュと、
第１のパイプラインと、
第２のパイプラインと、
前記キャッシュからロード命令及びストア命令を受信し、
前記ロード命令についてのロード・データのロード実効アドレスと前記ストア命令についてのストア・データのストア実効アドレスとを計算し、
前記ロード実効アドレスを前記ストア実効アドレスと比較し、
前記ストア命令についての前記ストア・データを、前記ストア命令が実行されている前記第１のパイプラインから、前記ロード命令が実行されている前記第２のパイプラインに転送し、
前記ロード実効アドレスが前記ストア実効アドレスと一致する場合には、前記転送されたストア・データを前記ロード・データと統合する、
ように構成可能な回路と、
を備えるプロセッサ。
【請求項９】
前記回路は、前記ロード・データのページ番号が前記ストア・データのページ番号の一部と一致する場合にのみ、前記転送されたデータを統合するように構成可能である、請求項８に記載のプロセッサ。
【請求項１０】
前記回路は、前記ロード・データのロード物理アドレスの一部が前記ストア・データのストア物理アドレスの一部と一致する場合にのみ、前記転送されたデータを統合するように構成可能である、請求項８に記載のプロセッサ。
【請求項１１】
前記回路は、前記ロード実効アドレスを用いて前記ロード物理アドレスを取得するように構成可能であり、前記ストア実効アドレスを用いて前記ストア物理アドレスを取得するように構成可能である、請求項１０に記載のプロセッサ。
【請求項１２】
前記回路は、前記ロード実効アドレスの一部のみと前記ストア実効アドレスの一部のみとを用いて前記比較を行うように構成可能である、請求項８に記載のプロセッサ。
【請求項１３】
前記回路は、前記ロード命令及び前記ストア命令を、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく、前記第１のパイプライン及び前記第２のパイプラインにおいて、実行するように構成可能である、請求項８に記載のプロセッサ。
【請求項１４】
前記回路は、前記転送されたストア・データを前記ロード・データと統合した後で、前記ストア・データのストア物理アドレスを前記ロード・データのロード物理アドレスと比較して、前記ストア物理アドレスが前記ロード物理アドレスと一致するかどうかを判定する検証を行うように構成可能である、請求項８に記載のプロセッサ。
【請求項１５】
コンピュータ・プログラムであって、該プログラムがコンピュータに、請求項１から請求項７のいずれか１項に記載の方法の各ステップを、コンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサにおける命令の実行に関する。具体的には、本出願は、ストア−ロード競合によるプロセッサの停止を最小限にすることに関する。
【背景技術】
【０００２】
現代のコンピュータ・システムは、典型的には、コンピュータ・システムにおいて情報を処理するのに用いることができるプロセッサを含む幾つかの集積回路（ＩＣ）を含んでいる。プロセッサによって処理されるデータは、プロセッサによって実行されるコンピュータ命令と、コンピュータ命令を用いてプロセッサによって操作されるデータとを含むことができる。コンピュータ命令とデータは、典型的には、コンピュータ・システムのメイン・メモリにストアされる。
【０００３】
プロセッサは、典型的には、一連の小ステップで命令を実行することによって、命令を処理する。プロセッサによって処理される命令の数を増やすために（したがって、プロセッサの速度を増すために）、プロセッサをパイプライン方式とする場合がある。パイプライン方式とは、プロセッサに別々のステージを設け、各々のステージが命令を実行するのに必要な小ステップの１つ又は複数を行うことをさす。パイプライン（他の回路に加えて）は、プロセッサ・コアと呼ばれるプロセッサの部分に置かれる場合がある。プロセッサが複数のプロセッサ・コアを有することがあり、各々のプロセッサ・コアが複数のパイプラインを有することもある。プロセッサ・コアが複数のパイプラインを有する場合には、（発行グループと呼ばれる）命令のグループを、複数のパイプラインに並列に発行し、パイプラインの各々によって並列に実行させることができる。
【０００４】
パイプラインにおける命令の実行の一例として、第１の命令が受信されたときに、第１のパイプライン・ステージがその命令の一部分を処理することができる。第１のパイプライン・ステージが命令の一部分の処理を終了すると、第２のパイプライン・ステージが第１の命令の別の一部分の処理を開始する一方で、第１のパイプライン・ステージは、第２の命令の一部分を受信し、その処理を開始することができる。このように、プロセッサは、２つ又はそれ以上の命令を同時に（並列に）処理することができる。
【０００５】
より高速にデータ及び命令にアクセスし、より良好にプロセッサを使用するために、プロセッサは、幾つかのキャッシュを有する場合がある。キャッシュは、典型的にはメイン・メモリより小型であり、典型的にはプロセッサと同じダイ（即ちチップ）上に製造されるメモリである。現代のプロセッサは、典型的には幾つかのレベルのキャッシュを有する。プロセッサのコアの最も近くに配置されるより高速なキャッシュは、レベル１キャッシュ（Ｌ１）と呼ばれる。Ｌ１キャッシュに加えて、プロセッサは、典型的には、レベル２キャッシュ（Ｌ２キャッシュ）と呼ばれる第２の、より大型のキャッシュを有する。プロセッサが他の付加的なキャッシュ・レベル（例えば、Ｌ３キャッシュ及びＬ４キャッシュ）を有する場合もある。
【０００６】
プロセッサは、典型的には、キャッシュ及び／又はメイン・メモリに配置される情報にアクセスするためのロード命令及びストア命令を与える。ロード命令は、（命令の中に直接与えられるか、アドレス・レジスタを用いて与えられる）メモリ・アドレスを含み、ターゲット・レジスタ（Ｒｔ）を特定することができる。ロード命令が実行されたときには、メモリ・アドレスにストアされたデータを（例えば、キャッシュ、メイン・メモリ、又は他のストレージ手段から）取り出し、Ｒｔによって特定されるターゲット・レジスタに置くことができる。同様に、ストア命令は、メモリ・アドレスとソース・レジスタ（Ｒｓ）とを含むことができる。ストア命令が実行されたときには、Ｒｓからのデータをメモリ・アドレスに書き込むことができる。典型的には、ロード命令及びストア命令は、Ｌ１キャッシュにキャッシュされたデータを利用する。
【０００７】
ストア命令が実行されたときに、ストアされているデータが直ちにＬ１キャッシュに置かれない場合がある。例えば、ロード命令がパイプラインにおいて実行を開始した後で、ロード命令がパイプラインにおける実行を終了するまで、数回のプロセッサ・サイクルを経る場合がある。別の例として、ストアされているデータが、Ｌ１キャッシュに書き戻される前にストア・キューに置かれる場合がある。ストア・キューは、幾つかの理由で用いられることがある。例えば、ストア・データがＬ１キャッシュに書き戻されるより速く、複数のストア命令がプロセッサ・パイプラインにおいて実行される場合がある。ストア・キューが複数のストア命令についての結果を保持することにより、より低速なＬ１キャッシュが、ロード命令の結果を後でストアし、より高速なプロセッサ・パイプラインに「追いつく」ことができるようになる。ストア命令の結果を用いてＬ１キャッシュを更新するのに必要な時間は、ストア命令の「待ち時間（latency）」と呼ばれることがある。
【０００８】
ストア命令からのデータが、待ち時間が原因でＬ１キャッシュにおいて直ちに利用できない場合には、特定の命令の組み合わせが実行エラーを生じさせることがある。例えば、データをメモリ・アドレスにストアするストア命令が実行されることがある。上述されたように、ストア・データはＬ１キャッシュにおいて直ちに利用できないことがある。ストア命令の後すぐに、同じメモリ・アドレスからのデータをロードするロード命令が実行された場合には、ロード命令は、ストア命令の結果を用いてＬ１キャッシュが更新される前に、Ｌ１キャッシュからのデータを受信することができる。
【０００９】
このように、ロード命令は、不正確なデータ又は「古くなった（stale）」データ（例えば、以前に実行されたストア命令の結果を用いて置換されるはずの、Ｌ１キャッシュからのより古いデータ）を受信することがある。ロード命令が、以前に実行されたストア命令と同じアドレスからデータをロードする場合には、ロード命令は、依存ロード命令（dependent load instruction）と呼ぶことができる（ロード命令によって受信されるデータは、ストア命令によってストアされるデータに依存する）。ストア命令の待ち時間の結果として依存ロード命令がキャッシュから不正確なデータを受信した場合には、結果として得られる実行エラーは、ロード−ストア競合（load-store conflict）と呼ぶことができる。
【００１０】
依存ロード命令が不正確なデータを受信していることがあるため、不正確にロードされたデータを用いる後続の発行命令もまた、不適切に実行され、不正確な結果に至る場合がある。このようなエラーを検出するために、ロード命令のメモリ・アドレスがストア命令のメモリ・アドレスと比較される場合がある。メモリ・アドレスが同じ場合には、ロード−ストア競合を検出することができる。しかしながら、ロード命令のメモリ・アドレスはロード命令の実行後まで知ることができないため、ロード−ストア競合は、ロード命令が実行されるまで検出されない場合がある。
【００１１】
したがって、検出されたエラーを解決するために、実行されたロード命令及び後続の発行命令がパイプラインからフラッシュされることがあり（例えば、ロード命令及び後続の実行命令の結果が廃棄されることがある）、フラッシュされた命令の各々は、再発行され、パイプラインにおいて再び実行されることがある。ロード命令及び後続の発行命令が無効になり、再発行されている間に、Ｌ１キャッシュは、ストア命令によってストアされたデータを用いて更新される場合がある。再発行されたロード命令が二度目に実行されるときには、そのロード命令は、正確に更新されたデータをＬ１キャッシュから受信することができる。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
ロード−ストア競合後にロード命令及び後続の実行命令を実行し、無効にし、再発行することによって、多くのプロセッサ・サイクルが経過することになる。ロード命令及び後続の発行命令の最初の結果は無効であるため、命令を実行することに費やされた時間は実質的に無駄になる。このように、ロード−ストア競合は、典型的には、プロセッサの非効率性をもたらす。
【００１３】
したがって、ロード命令及びストア命令を実行する方法を改善する必要性が存在する。
【課題を解決するための手段】
【００１４】
第１の態様によれば、本発明は、プロセッサにおいて命令を実行する方法であって、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データを、ストア命令が実行されている第１のパイプラインから、ロード命令が実行されている第２のパイプラインに転送するステップであって、ロード命令はストア・データを第１のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する、ステップと、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合するステップと、ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータをロード・データと統合するステップと、を含む方法を提供する。
【００１５】
本発明は、ロード・データのページ番号がストア・データのページ番号の一部と一致する場合にのみ、転送されたデータが統合される方法を提供することが好ましい。
【００１６】
本発明は、ロード・データのロード物理アドレスの一部がストア・データのストア物理アドレスの一部と一致する場合にのみ、転送されたデータが統合される方法を提供することが好ましい。
【００１７】
本発明は、ロード物理アドレスがロード実効アドレスを用いて取得され、ストア物理アドレスがストア実効アドレスを用いて取得される方法を提供することが好ましい。
【００１８】
本発明は、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを用いて比較が行われる方法を提供することが好ましい。
【００１９】
本発明は、ロード命令及びストア命令が、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく第１のパイプライン及び第２のパイプラインによって実行される方法を提供することが好ましい。
【００２０】
本発明は、予測的に転送されたストア・データをロード・データと統合した後で、ストア・データのストア物理アドレスをロード・データのロード物理アドレスと比較して、ストア物理アドレスがロード物理アドレスと一致するかどうかを判定する検証を行うステップをさらに含む方法を提供することが好ましい。
【００２１】
第２の態様の観点から、本発明は、キャッシュと、第１のパイプラインと、第２のパイプラインと、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算し、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データをストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに転送し、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合するように構成された回路と、を含むプロセッサを備える。
【００２２】
本発明は、ロード・データのページ番号がストア・データのページ番号の一部と一致する場合にのみ、予測的に転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
【００２３】
本発明は、ロード・データのロード物理アドレスの一部がストア・データのストア物理アドレスの一部と一致する場合にのみ、予測的に転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
【００２４】
本発明は、ロード実効アドレスを用いてロード物理アドレスを取得するように回路を構成可能であり、ストア実効アドレスを用いてストア物理アドレスを取得するように回路を構成可能な、プロセッサを提供することが好ましい。
【００２５】
本発明は、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを用いて比較を行うように回路を構成可能なプロセッサを提供することが好ましい。
【００２６】
本発明は、ロード命令及びストア命令を、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく第１のパイプライン及び第２のパイプラインにおいて実行するように構成可能なプロセッサを提供することが好ましい。
【００２７】
本発明は、転送されたストア・データをロード・データと統合した後で、ストア・データのストア物理アドレスをロード・データのロード物理アドレスと比較して、ストア物理アドレスがロード物理アドレスと一致するかどうかを判定する検証を行うように回路を構成可能なプロセッサを提供することが好ましい。
【００２８】
第３の態様の観点から、本発明は、コンピュータ上で実行された時に上述の発明を実現するように機能するソフトウェア・コード部分を含む、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムを提供する。
【００２９】
第４の態様の観点から、本発明は、キャッシュと、２つ又はそれ以上の実行パイプラインを有するカスケード式遅延実行パイプライン・ユニットであって、第１の実行パイプラインは、共通発行グループの中の第１の命令を、第２の実行パイプラインにおいて実行される共通発行グループの中の第２の命令に対して遅延させて実行する、カスケード式遅延実行パイプライン・ユニットと、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算し、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データを、ストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに転送し、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合するように構成可能な回路と、を備えるプロセッサを提供する。
【００３０】
本発明は、ロード・データのページ番号がストア・データのページ番号の一部と一致する場合にのみ、転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
【００３１】
本発明は、ロード・データのロード物理アドレスの一部がストア・データのストア物理アドレスの一部と一致する場合にのみ、転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
【００３２】
本発明は、ロード実効アドレスを用いてロード物理アドレスを取得するように回路を構成可能であり、ストア実効アドレスを用いてストア物理アドレスを取得するように回路を構成可能な、プロセッサを提供することが好ましい。
【００３３】
本発明は、ロード実効アドレスを用いてデータ・キャッシュ・ディレクトリからロード物理アドレスの一部を取り出すように回路を構成可能であり、ストア実効アドレスを用いてデータ・キャッシュ・ディレクトリからストア物理アドレスの一部を取り出すように回路を構成可能な、プロセッサを提供することが好ましい。
【００３４】
本発明は、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを用いて比較を行うように回路を構成可能なプロセッサを提供することが好ましい。
【００３５】
本発明は、ロード命令及びストア命令を、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく第１のパイプライン及び第２のパイプラインにおいて実行するように構成可能なプロセッサを提供することが好ましい。
【００３６】
本発明は、予測的に転送されたストア・データをロード・データと統合した後で、ストア・データのストア物理アドレスをロード・データのロード物理アドレスと比較して、ストア物理アドレスがロード物理アドレスと一致するかどうかを判定する検証を行うように回路を構成可能なプロセッサを提供することが好ましい。
【００３７】
本発明の実施形態は、命令を実行するための方法及び装置を提供する。１つの実施形態においては、本方法は、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、を含む。本方法は、さらに、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データをストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに予測的に転送するステップと、を含む。ロード命令は、ストア・データを第１のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する。ロード実効アドレスがストア実効アドレスと一致する場合には、予測的に転送されたストア・データはロード・データと統合される。ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータがロード・データと統合される。
【００３８】
本発明の１つの実施形態は、キャッシュと、第１のパイプラインと、第２のパイプラインと、回路とを含むプロセッサを提供する。１つの実施形態においては、回路は、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するように構成される。回路は、さらに、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データをストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに予測的に転送するように構成される。ロード実効アドレスがストア実効アドレスと一致する場合には、予測的に転送されたストア・データはロード・データと統合される。
【００３９】
本発明の１つの実施形態は、キャッシュと、カスケード式遅延実行パイプライン・ユニットと、回路とを含むプロセッサを提供する。カスケード式遅延実行パイプライン・ユニットは、２つ又はそれ以上の実行パイプラインを含み、第１の実行パイプラインは、共通発行グループの中の第１の命令を、第２の実行パイプラインにおいて実行される共通発行グループの中の第２の命令に対して遅延させて実行する。１つの実施形態においては、回路は、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するように構成される。回路は、さらに、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データをストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに予測的に転送するように構成される。ロード実効アドレスがストア実効アドレスと一致する場合には、予測的に転送されたストア・データはロード・データと統合される。
【発明を実施するための最良の形態】
【００４０】
本発明の上述された特徴、利点、及び目的が達成され、詳細に理解できるように、上記で要約された本発明のより具体的な説明が、添付図面において示される本発明の実施形態を参照して行われる。
【００４１】
しかしながら、添付図面は、本発明の典型的な実施形態のみを示しており、したがって本発明の範囲を限定するものとみなされるべきではなく、本発明は等しく有効な他の実施形態を許容できることに留意されたい。
【００４２】
本発明は、一般に、命令を実行するための方法及び装置を提供する。１つの実施形態においては、本方法は、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、を含む。本方法は、さらに、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データをストア命令が実行されている第１のパイプラインからロード命令が実行されている第２のパイプラインに予測的に転送するステップと、を含む。ロード命令は、ストア・データを第１のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する。ロード実効アドレスがストア実効アドレスと一致する場合には、予測的に転送されたストア・データはロード・データと統合される。ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータがロード・データと統合される。ストア・データをロード命令が実行されているパイプラインに予測的に転送し、予測的に転送されたデータをロード・データと統合するかどうかを判定するためにロード実効アドレスとストア実効アドレスとの比較を用いることによって、実行するためにロード命令及びストア命令を再発行することなく、ロード−ストア競合を解決できるようになる。
【００４３】
以下においては、本発明の実施形態が参照される。しかしながら、本発明は説明された具体的な実施形態に限定されるものではないことが理解されるべきである。むしろ、異なる実施形態に関するかどうかにかかわらず、以下の特徴及び要素のいかなる組み合わせも本発明を実装し、実施するように考慮されている。さらに、本発明は種々の実施形態において、従来技術に勝る多数の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決策及び／又は従来技術に勝る利点を実現することができるが、所与の実施形態によって特定の利点が実現されるかどうかは、本発明を限定することにはならない。したがって、以下の態様、特徴、実施形態、及び利点は、単なる例示であり、１つ又は複数の請求項において明確に記載される場合を除き、特許請求の範囲の要素又は限定とみなされることはない。同様に、「本発明」というときは、本明細書で開示されるいずれかの発明の主題を包括していると解釈されるべきであり、１つ又は複数の請求項において明確に記載される場合を除き、特許請求の範囲の要素又は限定であるとみなすべきではない。
【００４４】
以下は、添付図面に示される本発明の実施形態の詳細な説明である。実施形態は、一つの例であり、本発明を明瞭に伝えるように詳細なものとなっている。しかしながら、提示される詳細さの程度は、実施形態の予想される変化形を限定することを意図するものではなく、逆に、特許請求の範囲によって定められる本発明の趣旨及び範囲内にある全ての変更物、等価物、及び代替物を網羅することが意図されている。
【００４５】
本発明の実施形態は、例えばコンピュータ・システムなどのシステムにおいて使用することができ、そのようなシステムに関して以下で説明される。ここで用いられる際には、システムは、パーソナル・コンピュータ、インターネット機器、デジタル・メディア機器、携帯情報端末（ＰＤＡ）、携帯用音楽／動画再生装置、及びビデオゲーム機を含む、プロセッサ及びキャッシュ・メモリを使用するいずれかのシステムを含むものとすることができる。キャッシュ・メモリは、そのキャッシュ・メモリを使用するプロセッサと同一のダイ上に配置することができるが、プロセッサとキャッシュ・メモリとを異なるダイ上に配置することもできる（例えば、別個のモジュール内の別個のチップ、又は、単一のモジュール内の別個のチップ）。
【００４６】
本発明の実施形態は、以下においては、各々のプロセッサ・コアが複数のパイプラインを用いて命令を実行する、複数のプロセッサ・コア及び複数のＬ１キャッシュを有するプロセッサに関して説明されるが、単一のプロセッサ・コアを有するプロセッサを含む、キャッシュを使用するあらゆるプロセッサで用いることができる。一般に、本発明の実施形態は、あらゆるプロセッサで用いることができ、いずれかの特定の構成に限定されることはない。さらに、本発明の実施形態は、以下においては、Ｌ１命令キャッシュ（Ｌ１  Ｉ−キャッシュ又はＩ−キャッシュ）とＬ１データ・キャッシュ（Ｌ１  Ｄ−キャッシュ又はＤ−キャッシュ）とに分割されたＬ１キャッシュを有するプロセッサに関して説明されるが、統合されたＬ１キャッシュが用いられる構成において使用することもできる。また、本発明の実施形態は、以下においては、Ｌ１キャッシュ・ディレクトリを使用するＬ１キャッシュに関して説明されるが、キャッシュ・ディレクトリが用いられない場合にも使用することができる。
【００４７】
例示的なシステムの概要
図１は、本発明の１つの実施形態によるシステム１００を示すブロック図である。システム１００は、命令及びデータをストアするためのシステム・メモリ１０２と、グラフィックス処理のためのグラフィックス処理ユニット１０４と、外部装置と通信するためのＩ／Ｏインターフェース１０６と、命令及びデータの長期ストレージのためのストレージ・デバイス１０８と、命令及びデータを処理するためのプロセッサ１１０と、を含むことができる。
【００４８】
本発明の１つの実施形態によれば、プロセッサ１１０は、Ｌ２キャッシュ１１２と複数のＬ１キャッシュ１１６とを有することができ、各々のＬ１キャッシュ１１６は複数のプロセッサ・コア１１４の１つによって使用される。１つの実施形態によれば、各々のプロセッサ・コア１１４はパイプライン方式とすることができ、各々の命令は、各々が異なるパイプライン・ステージによって実施される一連の小ステップで実施される。
【００４９】
図２は、本発明の１つの実施形態によるプロセッサ１１０を示すブロック図である。分かりやすくするために、図２は、プロセッサ１１０の単一のコア１１４に関して示され、説明される。１つの実施形態においては、各々のコア１１４は、同一のものとすることができる（例えば、同一のパイプライン・ステージを有する同一のパイプラインを含む）。別の実施形態においては、各々のコア１１４は、異なるものとすることができる（例えば、異なるステージを有する異なるパイプラインを含む）。
【００５０】
本発明の１つの実施形態においては、Ｌ２キャッシュは、プロセッサ１１０によって用いられる命令及びデータの一部を含むことができる。プロセッサ１１０が、Ｌ２キャッシュ１１２に含まれていない命令及びデータを要求する場合もある。要求された命令及びデータがＬ２キャッシュ１１２に含まれていない場合には、要求された命令及びデータを（より高いレベルのキャッシュ又はシステム・メモリ１０２のどちらかから）取り出し、Ｌ２キャッシュに置くことができる。プロセッサ・コア１１４がＬ２キャッシュ１１２からの命令を要求したときには、命令は、最初にプリデコーダ及びスケジューラ２２０によって処理することができる（以下でより詳細に説明される）。
【００５１】
本発明の１つの実施形態においては、命令は、Ｌ２キャッシュ１１２からＩ−ラインと呼ばれるグループの形でフェッチすることができる。同様に、データは、Ｌ２キャッシュ１１２からＤ−ラインと呼ばれるグループの形でフェッチすることができる。図１に示されるＬ１キャッシュ１１６は、２つの部分、即ち、Ｉ−ラインをストアするためのＬ１命令キャッシュ２２２（Ｉ−キャッシュ２２２）と、Ｄ−ラインをストアするためのＬ１データ・キャッシュ２２４（Ｄ−キャッシュ２２４）とに分割することができる。Ｉ−ライン及びＤ−ラインは、Ｌ２アクセス回路２１０を用いて、Ｌ２キャッシュ１１２からフェッチすることができる。
【００５２】
Ｌ２キャッシュ１１２から取り出されたＩ−ラインは、プリデコーダ及びスケジューラ２２０によって処理することができ、Ｉ−ラインは、Ｉ−キャッシュ２２２に置くことができる。プロセッサの性能をさらに改善するために、命令はプリデコードされることが多く、例えば、Ｉ−ラインはＬ２（又はより高レベルの）キャッシュから取り出される。このようなプリデコードは、アドレス生成、分岐予測、及びスケジューリング（命令を発行する順序を決定すること）などの種々の機能を含むものとすることができ、それらは命令の実行を制御するディスパッチ情報（フラグの組）として捉えられる。
【００５３】
プリデコーダ及びスケジューラ２２０は、複数のコア１１４及びＬ１キャッシュの間で共用される場合もある。同様に、Ｌ２キャッシュ１１２からフェッチされたＤ-ラインは、Ｄ−キャッシュ２２４に置くことができる。各々のＩ−ライン及びＤ−ラインの１つのビットを用いて、Ｌ２キャッシュ１１２における情報のラインがＩ−ラインであるのかＤ−ラインであるのかを追跡することができる。必要に応じて、Ｌ２キャッシュ１１２からＩ−ライン及び／又はＤ−ラインとしてデータをフェッチする代わりに、より少ない量のデータ、より多い量のデータ、又は可変量のデータをフェッチするなどといった他の方法で、Ｌ２キャッシュ１１２からデータをフェッチしてもよい。
【００５４】
１つの実施形態においては、Ｉ−キャッシュ２２２及びＤ−キャッシュ２２４に現在どのＩ−ライン及びＤ−ラインがあるのかを追跡するために、Ｉ−キャッシュ２２２及びＤ−キャッシュ２２４は、それぞれＩ−キャッシュ・ディレクトリ２２３及びＤ−キャッシュ・ディレクトリ２２５を持つものとすることができる。Ｉ−ライン又はＤ−ラインが、Ｉ−キャッシュ２２２又はＤ−キャッシュ２２４に追加されたときには、対応するエントリをＩ−キャッシュ・ディレクトリ２２３又はＤ−キャッシュ・ディレクトリ２２５に置くことができる。Ｉ−ライン又はＤ−ラインが、Ｉ−キャッシュ２２２又はＤ−キャッシュ２２４から削除されたときには、Ｉ−キャッシュ・ディレクトリ２２３又はＤ−キャッシュ・ディレクトリ２２５の対応するエントリを削除することができる。本発明の実施形態は、以下においてはＤ−キャッシュ・ディレクトリ２２５を使用するＤ−キャッシュ２２４に関して説明されるが、Ｄ−キャッシュ・ディレクトリ２２５が用いられない場合にも使用することができる。そのような場合には、Ｄ−キャッシュ２２４にストアされたデータ自体が、どのＤ−ラインがＤ−キャッシュ２２４に存在するかを示すことができる。
【００５５】
１つの実施形態においては、命令フェッチ回路２３６を用いて、コア１１４についての命令をフェッチすることができる。例えば、命令フェッチ回路２３６は、コアにおいて現在実行されている命令を追跡するプログラム・カウンタを含むことができる。コア内の分岐ユニットを用いて、分岐命令に遭遇したときにプログラム・カウンタを変更することができる。Ｉ−ライン・バッファ２３２を用いて、Ｌ１  Ｉ−キャッシュ２２２からフェッチされた命令をストアすることができる。発行及びディスパッチ回路２３４を用いて、Ｉ−ライン・バッファ２３２にある命令を、以下で説明されるように後にコア１１４に並列に発行することができる命令グループとしてグループ化することができる。発行及びディスパッチ回路２３４は、適切な命令グループを形成するために、プリデコーダ及びスケジューラ２２０によって与えられる情報を用いる場合もある。
【００５６】
発行及びディスパッチ回路２３４から命令を受信することに加えて、コア１１４は、様々な場所からデータを受信することができる。コア１１４がデータ・レジスタからのデータを必要とする場合には、レジスタ・ファイル２４０を用いてデータを取得することができる。コア１１４がメモリ位置からの情報を必要とする場合には、キャッシュ・ロード及びストア回路２５０を用いて、Ｄ−キャッシュ２２４からデータをロードすることができる。このようなロードが行われる場合には、必要なデータについての要求をＤ−キャッシュ２２４に発行することができる。同時に、所望のデータがＤ−キャッシュ２２４に配置されているかどうかを判定するために、Ｄ−キャッシュ・ディレクトリ２２５をチェックすることができる。Ｄ−キャッシュ２２４が所望のデータを含んでいる場合には、Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４が所望のデータを含んでいることを示すことができ、その後のある時点でＤ−キャッシュ・アクセスを完了することができる。Ｄ−キャッシュ２２４が所望のデータを含んでいない場合には、Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４が所望のデータを含んでいないことを示すことができる。Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４より高速にアクセスすることができるため、所望のデータについての要求は、Ｄ−キャッシュへのアクセスが完了する前に、Ｌ２キャッシュ１１２に（例えば、Ｌ２アクセス回路２１０を用いて）発行することができる。
【００５７】
データがコア１１４内で修正される場合もある。修正されたデータは、レジスタ・ファイルに書き込むか又はメモリにストアすることができる。書き戻し回路２３８を用いて、データをレジスタ・ファイル２４９に書き戻すことができる。データをＤ−キャッシュ２２４に書き戻すために、書き戻し回路２３８がキャッシュ・ロード及びストア回路２５０を用いる場合もある。必要に応じて、コア１１４がキャッシュ・ロード及びストア回路２５０に直接アクセスして、ストアを行ってもよい。以下で説明されるように、書き戻し回路２３８を用いて、命令をＩ−キャッシュ２２２に書き戻す場合もある。
【００５８】
上述されたように、発行及びディスパッチ回路２３４を用いて、命令グループを形成し、形成された命令グループをコア１１４に発行することができる。発行及びディスパッチ回路２３４は、Ｉ−ラインの命令を循環させ、統合し、それにより適切な命令グループを形成するための回路を含むこともできる。発行グループの形成にあたっては、発行グループにおける命令間の依存関係、及び、以下でより詳細に説明されるような命令の順序付けにより実現できる最適化などといった、幾つかの事項を考慮することがある。発行グループが形成されると、その発行グループは、プロセッサ・コア１１４に並列にディスパッチすることができる。命令グループが、コア１１４のパイプラインごとの１つの命令を含む場合もある。必要に応じて、命令グループは、より少ない数の命令を含むこともある。
【００５９】
本発明の１つの実施形態によれば、１つ又は複数のプロセッサ・コア１１４は、カスケード型遅延実行パイプライン構成を利用することができる。図３に示される例においては、コア１１４は、４つのパイプラインをカスケード型構成で含む。必要に応じて、より少ない数（２つ又はそれ以上のパイプライン）又はより多い数（５つ以上のパイプライン）をこのような構成で用いてもよい。さらに、図３に示されるパイプラインの物理的なレイアウトは例示的なものであり、必ずしもカスケード型遅延実行パイプライン・ユニットの実際の物理的なレイアウトを示唆するものではない。
【００６０】
１つの実施形態においては、カスケード型遅延実行パイプライン構成における各々のパイプライン（Ｐ０、Ｐ１、Ｐ２、Ｐ３）は、実行ユニット３１０を含むことができる。実行ユニット３１０は、所与のパイプラインについて１つ又は複数の機能を行うことができる。例えば、実行ユニット３１０は、命令のフェッチ及びデコードの全て又は一部を行うことができる。実行ユニットによって行われるデコードは、複数のコア１１４の間で共用される、又は必要に応じて単一のコア１１４によって使用される、プリデコーダ及びスケジューラ２２０と分担することもできる。実行ユニットは、また、レジスタ・ファイルからデータを読み取り、アドレスを計算し、（例えば論理演算ユニット即ちＡＬＵを用いて）整数演算機能を行い、浮動小数点演算機能を行い、命令分岐を実行し、データ・アクセス機能（例えば、メモリからのロード及びストア）を行い、データをレジスタに（例えば、レジスタ・ファイル２４０に）戻してストアすることができる。コア１１４は、これらの機能を行うために、命令フェッチ回路２３６、レジスタ・ファイル２４０、キャッシュ・ロード及びストア回路２５０、及び書き戻し回路、並びに他のいずれかの回路を利用することもできる。
【００６１】
１つの実施形態においては、各々の実行ユニット３１０は、同じ機能を行う（例えば、各々の実行ユニット３１０は、ロード／ストア機能を行うことができる）。必要に応じて、各々の実行ユニット３１０（又は、異なるグループの実行ユニット）は、それぞれ異なる機能を行うことができる。また、各々のコア１１４における実行ユニット３１０は、他のコアに設けられた実行ユニット３１０と同一のもの又は異なるものとすることができる。例えば、１つのコアにおいて、実行ユニット３１００及び実行ユニット３１０２がロード／ストア機能及び演算機能を行う一方で、実行ユニット３１０１及び実行ユニット３１０３が演算機能しか行わないことがある。
【００６２】
１つの実施形態においては、図示されるように、実行ユニット３１０における実行は、他の実行ユニット３１０に対して遅延させて行うことができる。図示される配置は、カスケード型遅延構成と呼ぶこともできるが、図示されるレイアウトは、必ずしも実行ユニットの実際の物理的なレイアウトを示すものではない。命令グループにおける４つの命令（便宜上、Ｉ０、Ｉ１、Ｉ２、Ｉ３と呼ばれる）がパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３に並列に発行されるこのような構成においては、各々の命令は、各々の他の命令に対して遅延させて行うことができる。例えば、第１にパイプラインＰ０の実行ユニット３１００において命令Ｉ０を実行し、第２にパイプラインＰ１の実行ユニット３１０１において命令Ｉ１を実行し、などとすることができる。Ｉ０は、実行ユニット３１００において直ちに実行することができる。その後、実行ユニット３１００における命令Ｉ０の実行が終了した後で、実行ユニット３１０１が命令Ｉ１の実行を開始するなどのようにすることができ、このようにして、コア１１４に並列に発行された命令は、互いに対して遅延して行われる。
【００６３】
１つの実施形態においては、幾つかの実行ユニット３１０は互いに対して遅延させることができる一方、他の実行ユニット３１０は互いに対して遅延されない。第２の命令の実行が第１の命令の実行に依存する場合には、転送パス３１２を用いて、第１の命令からの結果を第２の命令に転送することができる。図示される転送パス３１２は単なる例示であり、コア１１４は、実行ユニット３１０の異なるポイントから他の実行ユニット３１０又は同じ実行ユニット３１０までの、より多くの転送パスを含むこともできる。
【００６４】
１つの実施形態においては、実行ユニット３１０によって実行されていない命令は、遅延キュー３２０又はターゲット遅延キュー３３０に保持することができる。遅延キュー３２０は、命令グループのうちの実行ユニット３１０によってまだ実行されていない命令を保持するのに用いることができる。例えば、命令Ｉ０が実行ユニット３１００において実行されている間は、命令Ｉ１、Ｉ２、及びＩ３を遅延キュー３２０に保持することができる。命令が遅延キュー３２０の中を移動し終わると、その命令を適切な実行ユニット３１０に発行して実行することができる。ターゲット遅延キュー３３０は、実行ユニット３１０によって既に実行済みの命令の結果を保持するのに用いることができる。ターゲット遅延キュー３３０の中の結果は、処理又は無効化するために、適宜、実行ユニット３１０に転送される場合もある。同様に、以下で説明されるように、状況によっては、遅延キュー３２０の中の命令が無効化される場合もある。
【００６５】
１つの実施形態においては、命令グループの命令の各々が遅延キュー３２０、実行ユニット３１０、及びターゲット遅延キュー３３０を通過した後で、レジスタ・ファイルか、又は、Ｌ１  Ｉ−キャッシュ２２２及び／又はＤ−キャッシュ２２４のどちらかに、結果（例えば、データ、及び、以下で説明されるように、命令）を書き戻すことができる。レジスタの最新の修正値を書き戻し、無効化された結果を廃棄するために、書き戻し回路３０６が用いられる場合もある。
【００６６】
ロード−ストア命令についてのデータを転送するための実効アドレスの使用
本発明の１つの実施形態は、ロード−ストア競合を解決するための方法を提供する。本方法は、第１のパイプラインにおけるロード命令の実効アドレスが第２のパイプラインにおけるストア命令の実効アドレスと一致するかどうかを判定することを含む。ストア命令の実効アドレスとロード命令の実効アドレスとが一致した場合には、ストア命令からのデータは、ロード命令を含むパイプラインに予測的に転送される。実効アドレスの比較が実施された後で転送が行われる場合もある。必要に応じて、実効アドレスの比較が完了する前に転送を行うこともできる。１つの実施形態においては、転送は、最初にロード実効アドレス及びストア実効アドレスを実アドレスに変換することなく、行うことができる（例えば、実効アドレスが、ストア・データをロード命令に転送するかどうかを判定するための唯一の根拠となる場合がある）。
【００６７】
実効アドレスの比較が、ロード命令とストア命令とが同一の実効アドレスを有することを示した場合には、ストア命令からのデータは、ロード命令についてのデータと統合される。また、以下で説明されるように、ストア・データをロード・データと統合する前に、ストア命令データについての実アドレスの一部が、ロード命令データについての実アドレスの一部と比較される場合もある。このような一部は、例えば、対応する実効アドレスと共にＤ−キャッシュ・ディレクトリ２２５にストアすることができる。ロード命令の実行中に、ロードされるデータがＤ−キャッシュ２２４に配置されているかどうかを判定しながら、Ｄ−キャッシュ・ディレクトリ２２５にアクセスすることができる。
【００６８】
ストア・データがロード・データと統合された後で（アドレスの比較が一致を示したと仮定する）、ロード命令についてのデータは、フォーマットされ、レジスタに置くことができる。ロード命令とストア命令が競合するかどうかを判定するのに、パイプラインにおいて（例えば、実アドレスではなく）実効アドレスが用いられるため、ロード命令及びストア命令についての実効アドレスの比較は、従来のパイプラインよりも高速に（例えば、アドレス比較を行うために実効アドレスから実アドレスへの変換を必要とするパイプラインと比べてより高速に）行うことができる。また、ストア命令についてのデータを、ロード命令を含むパイプラインに予測的に転送することによって、実効アドレスから実アドレスへの変換の結果（実効アドレスの比較の結果の場合もある）を直ちに取得して、転送が必要かどうかを判定する必要がなくなる。
【００６９】
図４は、本発明の１つの実施形態による、ロード−ストア競合を解決するためのプロセス４００を示すフロー図である。プロセスは、実行されるロード命令及びストア命令が受信されるステップ４０２において開始することができる。ステップ４０４において、ロード命令についての実効アドレスとストア命令についての実効アドレスとを計算することができる。次いで、ステップ４０６において、ロード命令及びストア命令についての実効アドレスが比較され、一方で、ストア命令によってストアされるデータについてのレジスタ・ファイル読み取りが始められ、ロードされるデータについての要求がＤ−キャッシュ２２４に送信される。ステップ４０８において、ストアされるデータをレジスタ・ファイル２４０から受信し、ストア命令を実行するパイプラインからロード命令を実行するパイプラインに予測的に転送することができ、その間に、ロードされるデータをＤ−キャッシュから受信することができる。ステップ４１０において、受信されたロード・データをフォーマットすることができ、一方で、ロード実効アドレスがストア実効アドレスと一致することを比較が示すかどうかの判定が行われる。ステップ４１２において、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合することができる。ロード実効アドレスがストア実効アドレスと一致しない場合には、転送されたストア・データを廃棄し、Ｄ−キャッシュ２２４から受信されたロード・データを用いることができる。ステップ４１４において、ロード命令及びストア命令は、実行を終了することができる。
【００７０】
本発明の１つの実施形態においては、ロード命令及びストア命令は、別個のパイプラインにおいて実行することができる。また、ロード命令は、ストア命令後１つ又は複数のクロック・サイクルで実行される場合もある。ロード命令がストア命令後１つ又は複数のクロック・サイクルで実行される場合には、上述されたアクション（例えば、ロード実効アドレスとストア実効アドレスとの比較）は、適切な情報（例えば、実効アドレス）が解決されるとすぐに行うことができる。
【００７１】
上述されたように、本発明の１つの実施形態においては、ロード実効アドレスの全体とストア実効アドレスの全体とを互いに比較することができる。必要に応じて、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを比較することもできる。例えば、アドレスの高位ビット部分、低位ビット部分、又は中間ビット部分を比較することもできる。比較を行うのに必要以上のクロック・サイクル数を必要とせず、ストア命令からロード命令にデータを転送する及び／又は統合するかどうかを判定するのに十分な時間をプロセッサ１１０に与えることができるように、アドレスの一部のみを比較する場合もある。
【００７２】
２つの異なる実効アドレスが同一の物理アドレスを指す場合もある。２つの異なる実効アドレスが同一の物理アドレスを指す場合には、実効アドレスの比較は、ストア命令と競合するロード命令を正確に特定できないことがある。このような状況が生じる場合には、曖昧でない（例えば、異なる物理アドレスについて常に異なる）実効アドレスの一部を比較して、ロード−ストア競合が生じているかどうかを判定することができる。比較を完了するために、ロード命令及びストア命令について物理アドレスの一部を比較することができる。実効アドレスの一部と物理アドレスの一部の両方が一致した場合には、ロード−ストア競合が存在することになり、ストア命令からのデータを転送してロード命令と統合することができる。物理アドレスの一部を取得するために、実効アドレスをインデックスとして用いて、ロード命令及びストア命令についての物理アドレスの一部を取り出すことができる。１つの実施形態においては、ロード命令及びストア命令についての物理アドレスの一部は、Ｄ−キャッシュ・ディレクトリ２２５にストアされ、そこから取得されることがある。また、以下で説明されるように、ストアされた命令についての物理アドレスは、ストア・ターゲット・キュー、実効アドレス−実アドレス変換テーブル（ＥＲＡＴ）、又は他のいずれかの適切な場所にストアすることもできる。
【００７３】
本発明の１つの実施形態においては、ロード命令がストア命令と競合するかどうかの判定は、ロード実効アドレスの一部とストア実効アドレスの一部とを比較すること、及び、各々の実効アドレスがどのページを（例えば、キャッシュ内のどのページを）指しているかを示す、ロード・データ及びストア・データについてのページ番号を比較することによって、行われる。例えば、実効アドレスの低位ビットは、ページ内の場所を一意的に特定することができ、ページ番号は、各々の実効アドレスがどのページを参照するかを一意的に特定することができる。
【００７４】
本発明の１つの実施形態においては、各々の実効アドレスについてのページ番号（ＰＮ）は、実効アドレスをキャッシュ（例えばＬ２キャッシュ１１２）に含まれる実アドレスにマッピングするエントリを含む変換ルックアサイド・バッファ（ＴＬＢ）において追跡することができる。より高いレベルのキャッシュ及び／又はメモリからデータ・ラインが取り出され、このキャッシュに置かれる度に、ＴＬＢに１つのエントリを追加することができる。ページ番号を保持するために、ＴＬＢは、各々のエントリについてのエントリ番号を保持することができる。各々のエントリ番号は、そのエントリによって参照されるデータを含むキャッシュ内のページに対応することができる。
【００７５】
プロセッサによって使用される実効アドレスが、対応するエントリをＴＬＢ内に持たない場合もある。例えば、計算された実効アドレスが、キャッシュに含まれておらず、したがって対応するエントリを持たないメモリをアドレス指定することがある。このような場合には、ページ番号妥当性ビット（ＰＮＶ）を用いて、所与の実効アドレスについて妥当なページ番号が存在するかどうかを判定することができる。ロード命令及びストア命令によって使用される実効アドレスについて妥当性ビットが設定される場合には、競合が存在するかどうかを判定するために、実効アドレスの一部に加えて、ロード命令及びストア命令についてのページ番号を比較することができる。逆に妥当性ビットが設定されない場合には、ページ番号は比較しなくてよい。ロード命令、ストア命令、又はその両方についてページ番号妥当性ビットが設定されない場合には、どちらかの命令についてのデータがキャッシュされていないことがあるので、ロード−ストア競合は存在しない可能性がある。このように、ロード命令及びストア命令が同一のデータを参照するが、参照されたデータがキャッシュされていないということが生じた場合には、データがフェッチされＤ−キャッシュ２２４に置かれたときに、プロセッサ・コア１１４をフラッシュして命令を再発行することなく競合を解決することができる。
【００７６】
各々のロード実効アドレス及びストア実効アドレスについてのページ番号は、多くの方法で与えることができる。例えば、データがより高いレベルのキャッシュから（例えば、データ・ラインとして）取り出されるときには、ページ番号をデータ・ラインと共に伝送することができ、そのデータ・ラインについてのページ番号を必要に応じてプロセッサ・コア１１４によって判定することが可能になる。ページ番号は、Ｄ−キャッシュ２２４におけるエントリを追跡するＤ−キャッシュ・ディレクトリ２２５にストアされる場合もある。ページ番号は、その目的のために設計された専用のキャッシュなどの他のいずれかの都合のよい場所にストアするか、又は、ストア・ターゲット・キューにストアすることができる。各々のページ番号と共に、ページ番号が妥当なＴＬＢエントリを参照するかどうかを示すページ番号妥当性ビットをストアすることもできる。
【００７７】
本発明の１つの実施形態においては、ストア・データは、ロード命令が実行されているパイプラインに常に転送することができる。必要に応じて、ストア・データは、ロード命令の実効アドレスとストア命令の実効アドレスとが一致する場合にのみ、転送される場合もある。実効アドレスの一部のみの比較が行われる、及び／又は、物理アドレスの一部の比較が後で行われるといった他の場合においては、実効アドレスの一部の比較を用いて、ストア・データを転送するかどうかを判定し、一方で、物理アドレスの一部の比較を用いて、転送されるデータをロード命令についてのデータと統合するかどうかを判定することができる。
【００７８】
本発明の１つの実施形態においては、実効アドレスの比較を用いて、データを受信することができる複数の転送パスのうちの１つを選択することができる。各々の転送パスは、複数のパイプラインのうちの１つから入って来るものとすることができ、所与のパイプラインにおける複数ステージのうちの１つから入って来るものとすることもできる。転送パスは、以下で説明されるようにストア・ターゲット・キューなどの他の回路から入って来ることもある。
【００７９】
転送パスが複数のパイプラインから与えられる場合には、複数のパイプラインの各々において、ロード命令の実効アドレス及びストア命令の実効アドレスがあればそれらの間で（又は、アドレスの一部の間で）、実効アドレスの比較を行うことができる。実効アドレスの比較のいずれかが、パイプラインの１つにストアされているデータの実効アドレスがロードされているデータの実効アドレスと一致することを示した場合には、一致した実効アドレスを持つストア命令を含むパイプラインからのデータを選択し、ロード命令を含むパイプラインにそれを転送することができる。複数のパイプラインからの複数の実効アドレスが、ロード命令の実効アドレスと一致した場合には、実行された最新のストア命令からのストア・データ（したがって直前のデータ）を選択し、ロード命令を含むパイプラインにそれを転送することができる。
【００８０】
転送パスが単一のパイプラインの複数のステージから与えられる場合には、複数のステージの各々におけるストア命令の実効アドレスは（これがある場合には）、ロード命令の実効アドレスと比較することができる。パイプライン・ステージにおけるストア命令の実効アドレスのいずれかが、ロード命令の実効アドレスと一致した場合には、一致する実効アドレスを持つストア命令についてのストア・データを、ストア命令と共に、パイプラインの適切なステージからロード命令を含むパイプラインに転送することができる。１つのパイプラインの複数のステージにおける複数のストア命令が、ロード命令の実効アドレスと一致する実効アドレスを有する場合には、実行された最新のストア命令からのストア・データ（したがって、直前のデータ）のみを、ストア命令を含むパイプラインからロード命令を含むパイプラインに転送することができる。比較及び転送が、複数のパイプラインの複数のステージについて行われる場合もあり、その場合の比較は、転送パスを持つ各々のパイプラインの各々のステージについて行われる。
【００８１】
また、上述されたように、データが、ストア・ターゲット・キューからロード命令を含むパイプラインに転送される場合もある。例えば、ストア命令が実行されるときに、ストア命令についてのデータをレジスタ・ファイル２４０から読み取ることができ、ストア・データが書き込まれるストア・ターゲット・アドレス（例えば、実効アドレスを用いて特定することができるメモリ位置）を決定するために、ストア命令についてアドレス生成を行うことができる。次いで、ストア・データ及びストア・ターゲット・アドレスは、ストア・ターゲット・キューに置くことができる。以下で説明されるように、その後のロード命令の実行の際に、ストアされたキュー・データのいずれかがロード命令についてのロード実効アドレスと一致する実効アドレスを有するかどうかの判定を行うことができる。ストア・ターゲット・キューにおいてロード命令の実効アドレスと一致する実効アドレスを持つエントリの各々について、実行された最新のストア命令についてのストア・データ（したがって、直前のデータ）を選択することができる。実行された最新のストア命令（例えば、パイプラインにおいてまだ実行されているストア命令）からのストア・データが利用不可能の場合には、ストア・ターゲット・キューの中の一致する最新のエントリについてのストア・データを、ストア・ターゲット・キューからロード命令を含むパイプラインに転送することができる。また、ロード命令及びストア命令についての実効アドレスの一部のみを用いて、ロード命令及びストア命令が同一のアドレスにおけるデータにアクセスしているかどうかを判定する幾つかの場合においては、ストア命令についての物理アドレスの一部をストア・ターゲット・キューにストアし、これを用いて、同一の実効アドレスに位置するデータにアクセスするためにロード命令及びストア命令についての異なる実効アドレスが用いられているかどうかを判定することができる。
【００８２】
図５は、本発明の１つの実施形態による、ストア命令からのデータをロード命令に転送するための転送パス５５０、５５２を持つ、例示的な実行ユニット３１００、３１０２を示す。転送されるデータが、実行ユニット３１０において実行されているストア命令から入って来る場合もある（ホット転送と呼ばれる）。必要に応じて、転送されるデータは、実行ユニット３１０における実行を完了したストア命令についてのエントリを含むストア・ターゲット・キュー５４０から入って来ることもある（コールド転送と呼ばれる）。ストア・ターゲット・キュー５４０は、ストア命令によってストアされているデータを保持するのに用いることができる。ストア・ターゲット・キュー５４０のデータは、典型的には、Ｄ−キャッシュ２２４に書き戻されることになっているが、データ書き戻しの際のＤ−キャッシュ２２４の帯域幅が限定されているために直ちに書き戻すことができないデータである。１つの実施形態においては、ストア・ターゲット・キュー５４０は、キャッシュ・ロード及びストア回路２５０の一部とすることができる。実行ユニット３１０において実行されているストア命令は、ストア・ターゲット・キュー５４０に入っているデータと比べてより最近更新されたストア・データを与えるため、実行ユニット３１０とストア・ターゲット・キュー５４０の両方が、ロード命令と競合するストア命令を含んでいる場合には、正確なデータがロード命令によって受信されるように、最新の更新されたストア・データ３１０を選択してロード命令に転送することができる。ストア・ターゲット・キューが複数の一致するエントリ（例えば、ロード命令と競合するかもしれない複数のストア命令）を含む場合には、選択回路５４２を用いて、ロード命令データとして転送される適切なエントリをキュー５４０から選択することができる。
【００８３】
図示されるように、転送パス５５０、５５２、５５４は、ストア・ターゲット・キュー５４０から実行ユニット３１０２のステージ５３６に転送するために、又は、実行ユニット３１００の１つのステージ５１４から別の実行ユニット３１０２の別のステージ５３６に転送するために、設けることができる。しかしながら、図５に示される転送パスは例示的な転送パスであることに留意されたい。より多くの転送パス又はより少ない転送パスを設けることもできる。転送パスは、各々の実行ユニットの他のステージについて設けることができ、所与の実行ユニット３１００、３１０２からそれぞれ同じ実行ユニット３１００、３１０２に戻るように設けることもできる。実行ユニット３１００におけるストア命令の実行及び実行ユニット３１０２におけるロード命令の実行は、実行ユニット３１００、３１０２における各ステージに関して以下で説明される。
【００８４】
実行ユニット３１００、３１０２における各々の命令の実行は、例えばロード命令及びストア命令の実行に用いられるデータ及び／又はアドレスを取得するためにレジスタ・ファイル２４０がアクセスされる、（ＲＦ１及びＲＦ２と呼ばれる）最初の２つのステージ５０２、５０４、５２２、５２４で開始することができる。次いで、各々の実行ユニット３１００、３１０２の第３のステージ５０６、５２６において、アドレス生成ステージ（ＡＧＥＮ）を用いて、命令の各々についての実効アドレス（ＥＡＸ）を生成することができる。
【００８５】
図示されるように、ストア命令についてのソース・レジスタ（ＳＲ）値（例えば、ストアされているデータのソース）をロード命令についてのターゲット・レジスタ（ＴＲ）値（例えば、ロードされているデータのターゲット）に転送する転送パス５５４が設けられる場合もある。このような転送は予測的なものであり、例えば、転送されたデータは、実際にはロード命令によって用いられないこともある。転送されたデータは、例えば、ストア命令の実効アドレスがロード命令の実効アドレスと一致するという判定が行われた場合に用いることができる。また、以下で説明されるように、他のアドレス比較を利用することもでき、データを転送できるかどうかは、ストアされているデータとロードされているデータとの整合性に依存するものとすることができる。
【００８６】
実行ユニット３１００、３１０２の各々の第４のステージ５０８、５２８において、（例えば、ロード命令及びストア命令によって）アクセスされているデータがＤ−キャッシュ２２４にあるかどうかを判定するために、Ｄ−キャッシュ・ディレクトリ２２５（ＤＩＲ０）へのアクセスを始めることができる。上述されたように、Ｄ−キャッシュ・ディレクトリ２２５にアクセスすることによって、ロード命令及びストア命令が同一のデータにアクセスしているかどうかを判定する際に用いるために、物理アドレスのビットを取得する場合もある。また、第４のステージ中に、実効アドレス（又は、実効アドレスの一部）の比較を行うこともできる。上述されたように、実効アドレスの比較を利用して、データを転送するのにどの転送パス（例えば、５５０、５５２）が用いられるべきかを判定することができる。
【００８７】
第５のステージ５１０、５３０において、ロード命令及びストア命令についての物理アドレス・ビットをＤ−キャッシュ・ディレクトリ２２５から受信することができる（ＤＩＲ１→ＰＡＸ）。次いで、第６のステージ５１２、５３２において、受信された物理アドレス・ビットの比較を行うことができる（ＰＡ  ＣＭＰ）。実行ユニット３１００の第７のステージにおいて、転送パス５５０を介して、又はストア・ターゲット・キュー５４０から転送パス５５２を介して、ストア命令についてのデータをロード実行ユニット３１０２に予測的に転送することができる。ロード実効アドレスとストア実効アドレスが一致するという判定が行われた後で、転送パス５５０を用いてストア・データをロード命令に転送することができる。必要に応じて、上述されたように、転送されたデータを別の転送パス５５４を介して以前の転送から受信し、その後、転送されたデータを統合するかどうかを判定する前にアドレス比較を行ってもよい。適切な転送パス５５０、５５２の選択は、例えば、実行ユニット３１００、３１０２におけるロード命令の実効アドレスとストア命令の実効アドレスとの間の比較、及び、ストア・ターゲット・キュー５４０におけるデータの実効アドレス間の比較の結果に基づいて、行うことができる。前述されたように、選択回路５４２を用いて、ロード実効アドレスがストア・ターゲット・キュー５４０におけるデータのいずれかの実効アドレスと一致するかどうかを判定することができる。また、実行ユニット３１０２の第７のステージ５３４において、ロードされているデータ（例えば、Ｄ−キャッシュ２２４から受信されたデータ）のフォーマットを行うことができる。
【００８８】
ロード命令についての実行ユニット３１０２の第８のステージにおいて、統合操作を行うことができる。実効アドレスと物理アドレスの比較が、ロード命令とストア命令が同一のデータにアクセスしていることを示した場合には、ストア命令を処理する実行ユニット３１００から予測的に転送されたデータを統合し、ロードされているデータとして用いることができる。必要に応じて、実効アドレスと物理アドレスの比較が、ロード命令とストア命令が異なるデータにアクセスしていることを示した場合には、予測的に転送されたデータを廃棄し、Ｄ−キャッシュ２２４から受信されたロード・データをロード命令データとして用いることができる。図示されるように、ロード命令及びストア命令の実行を完了するための操作を行うために、他のステージ５１６、５１８、５３８を設けることもできる。
【００８９】
図６は、本発明の１つの実施形態による、プロセッサ・コア１１４においてロード−ストア競合を解決するのに利用することができるハードウェアを示すブロック図である。図示されるように、ハードウェアは、アドレス生成（ＡＧＥＮ）回路６１０を含むことができる。ＡＧＥＮ回路６１０は、実効アドレス比較回路（ＥＡ  ＣＭＰ）６１２を用いてストア命令についての実効アドレスと比較される、ロード命令についての実効アドレスを生成することができる。実効アドレスの比較を用いて、ロード・データがどのようにフォーマットされ統合されるかを判定することができ、どのストア・データ（例えば、実行ユニット３１０におけるストア命令からのデータ、又は、ストア・ターゲット・キュー５４０からのデータ）がロード命令に転送されるかを判定することもできる。フォーマットは、フォーマット回路６１６によって行うことができ、転送されるデータの選択は、実効アドレス比較の結果に基づいて転送選択回路（ＦＷＤ選択）６０６を用いて行うことができる。また、図示されるように、物理アドレス比較回路を用いて、（例えば、ロード命令、実行ユニット３１０において実行されているストア命令、及び／又は、ストア・ターゲット・キュー５４０におけるエントリからの）物理アドレス・ビットを比較し、統合回路６１８を用いてロード命令からのデータとストア命令からのデータとを統合するかどうかを判定することができる。
【００９０】
上述されたように、ストア命令からロード命令にデータを転送するかどうかの判定において、ストア・ターゲット・キュー５４０におけるエントリが、ロード命令の実効アドレス及び／又は物理アドレスと一致する実効アドレス及び／又は物理アドレスを有するかどうかの判定を行うことができる。ストア・ターゲット・キュー５４０におけるエントリのアドレスと、ロード命令のアドレスとが一致し、ストア・ターゲット・キュー５４０にエントリが置かれてから他の競合するストア命令が実行されていない場合（例えば、他の競合するストア命令がまだ実行ユニット３１０において実行されていない場合）には、ストア・ターゲット・キュー５４０は、一致するアドレスについて最新の更新されたデータを含んでいる場合がある。
【００９１】
ストア・ターゲット・キュー５４０における複数のアドレスがロード・アドレスと一致する場合には、ストア・ターゲット・キュー５４０における最新の更新されたエントリ（例えば、一致する実効アドレスについての最も新しいデータを含むエントリ）の判別を行うことができる。例えば、ストア・ターゲット・キュー５４０における転送可能なエントリの各々について、そのエントリの実効アドレスをロード実効アドレスと比較することができる。ストア・ターゲット・キュー５４０において、例えば３４個のエントリが存在する場合には、３４通りの比較について回路６０２を使用することができる。
【００９２】
次いで、一致する可能性があるエントリの各々について、どのエントリが最も若く、したがって最新の更新されたストア・データを含むかについて、判定を行うことができる。最も若いエントリの判定は、例えば、３４通りの優先順位を判定する回路６０４を用いて行うことができる。ストア・ターゲット・キュー５４０にストアされたデータ（例えば、タイムスタンプ）を利用して、ストア・ターゲット・キュー５４０においてどの一致するエントリが最も若いかを判定する場合もある。次いで、選択回路５４２は、ストア・ターゲット・キュー５４０における最も若い一致するエントリを選択し、そのエントリを、上述されたようにストア・ターゲット・キュー５４０から転送されたデータと実行ユニット３１０から転送されたデータとの間で選択することができるＦＷＤ選択回路６０６に与えることができる。
【００９３】
選択回路５４２は、ロード命令及びストア命令の物理アドレス（又はその一部）が一致するかどうかを判定するのに用いるために、物理アドレスのビット又はページ番号を与えることができる。ページ番号が使用される場合には、そのページ番号が妥当であるかどうか（例えば、実効アドレスによって参照されるデータが実際にメモリ内のページに位置するかどうか）を示すビットが設けられる場合もある。ページ番号が妥当でない場合には、例えばストアされているデータが現在キャッシュされていないことがあるため（例えば、ストア・ミスが生じることがあり、その場合には転送は必要ではないことがある）、そのページ番号は、ロード命令とストア命令との比較のために利用されることはない。
【００９４】
図７は、本発明の１つの実施形態による、ストア・ターゲット・キュー５４０におけるロード命令アドレスについて、一致する最も若いエントリを判別するための選択ハードウェアを示すブロック図である。選択ハードウェアは、ストア・ターゲット・キュー５４０におけるエントリの実効アドレスをロード実効アドレス（ロードＥＡ）と比較するための複数の比較回路６０２０、６０２１、．．．６０２３４を含むことができる。また、上述されたように、選択ハードウェアは、優先順位回路６０４と選択回路５４２とを含むことができる。
【００９５】
用いられているプロセッサの能力によっては、選択ハードウェアが、ストア命令からロード命令へのデータの転送を行うことができるかどうかを示す制御信号を与える場合もある。例えば、複数の非整合のロード・ストア競合ヒットが検出される場合である（複数ヒット検出回路７０２、ＡＮＤゲート７１０、及びＡＮＤゲート７１２を用いて判定される）。また、非整合のロード−ストアの組み合わせが検出された場合には、ストア・レジスタ・ターゲットからロード・レジスタ・ソースへの転送が可能になる（ＡＮＤゲート７１０及びＮＯＴゲート７１４を用いて判定されたＲＴ−ＲＳ転送可能）。
【００９６】
図８は、本発明の１つの実施形態による、ストア命令から転送されたデータをロード命令についてのデータと統合するための統合ハードウェアを示すブロック図である。図示されるように、Ｄ−キャッシュ２２４からのデータは、バンク・データとワード・データとを適宜に整合させるバンク／ワード整合回路８１０を通過させることができる。整合されたデータは、次いで、フォーマット回路６０６を用いてフォーマットすることができる（フォーマットは、データのサインを拡張することを含めてもよい）。例えばストア・ターゲット・キュー読み取りポート８０２から受信されたデータに関して、受信されたデータをロード命令についてのデータと組み合わせる準備として、必要に応じてデータを循環させることができる。
【００９７】
ロード命令とストア命令とを組み合わせるために、マスク生成回路８１２によってマスクを生成し、マスクは、ＡＮＤマスク回路８０６、８１４を用いて、フォーマットされたロード・データ及びストア・データと組み合わせることができる。マスクは、例えば、ロード・データ及び／又はストア・データのうちの、ロード命令によって必要とされない部分をブロックすることができる。例えば、ロード・データの一部のみがストア・データの一部のみと組み合わされる場合には、生成されたマスクがロード・データ及びストア・データの使用されない部分をブロックすることができ、ロード・データ及びストア・データの残りの部分が組み合わされる。１つの実施形態においては、ロード・データ及びストア・データは、ＯＲ回路８２０と組み合わせることができる。一般に、統合回路６１８は、ロード・データをストア・データで完全に置換するか、ロード・データの高位のビットをストア・データで置換するか、ロード・データの低位のビットをストア・データで置換するか、及び／又は、ロード・データの中央のビットをストア・データで置換するように構成することができる。
【００９８】
物理アドレスのビットと実効アドレスのビットとの完全な比較は、例えばロード命令及びストア命令がまだ実行されている間は、プロセッサ１１０によって直ちに行われない場合もある。したがって、ロード命令及びストア命令が実行された後のある時点において、ロード命令とストア命令とが実際に互いに競合するかどうかを完全に判定するために、検証ステップを行うことができる。検証ステップは、ロード・データ及びストア・データについての完全な物理アドレスを求めるために、変換ルックアサイド・バッファ（ＴＬＢ）にアクセスすることを含むことができる。検証ステップが、ロード命令とストア命令とが実際には同一のデータにアクセスしていないことを示した場合には、（例えば、ストア・ターゲット・キュー５４０、ターゲット遅延キュー３３０、又は命令によって影響を受ける他の領域から、データを一括消去することによって）ロード命令とストア命令の効果を反転し、その後、ロード命令及びストア命令を再発行してプロセッサ・コア１１４によって正確に実行できるように、実行された命令をプロセッサ・コア１１４から一括消去することができる。
【００９９】
ロード命令及びストア命令の実行をスケジューリングするためのロード−ストア競合情報の使用
ロード命令とストア命令との間で転送が不可能な場合がある。例えば、プロセッサ・コア１１４の設計が、転送が必要となる可能性がある全ての状況を網羅するリソースを転送パスに充てないことがあり、実行における考慮事項（例えば、コア１１４によって処理されているデータの一貫性を維持すること）によって転送が禁止される場合もある。他の場合には、転送は行われるが、上述されたように、競合するストア命令の数及び／又はロード・データとストア・データとの整合性によって、ストア命令からロード命令へのデータの効率的な転送が妨げられることもある。転送が使用されない場合には、競合するロード命令とストア命令の適切な実行のために、プロセッサ１１０は、実行を停止するか、又は、コア１１４において実行されている命令を一括消去することもできる。ロード−ストア競合が、命令の停止又は再実行をもたらす場合には、上述されたようにプロセッサの効率が影響を受ける。
【０１００】
本発明の１つの実施形態においては、ロード−ストア競合を検出し、ストア命令と競合するロード命令を示す１つ又は複数のビットをストアすることができる。競合する可能性があるロード命令及びストア命令を示す情報は、ロード−ストア競合情報と呼ぶことができる。ロード命令及びストア命令が実行されるようにスケジューリングされているときに、ロード−ストア競合情報が、（例えば過去の競合に基づいて）ロード命令とストア命令とが競合する可能性があることを示す場合には、競合が生じないようにロード命令の実行をスケジューリングすることができる。例えば上述された実施形態又は当業者には公知の他のいずれかの転送の実施形態を用いて、ロード命令からストア命令への転送を利用することができるようにロード命令を実行することができる。必要に応じて、ロード命令の実行は、競合が生じず、したがってストア命令からロード命令へのデータの転送が利用されないように、（以下でより詳細に説明されるように）ストア命令の実行に対して遅延させることができる。
【０１０１】
図９は、本発明の１つの好ましい実施形態による、ロード命令及びストア命令の実行をスケジューリングするためのプロセス９００を示すフロー図である。図示されるように、プロセス９００は、実行される命令のグループが受信されるステップ９０２で開始することができる。ステップ９０４において、ロード−ストア競合情報（以下でより詳細に説明される）が、命令グループ内のロード命令とストア命令とが競合し得ることを示しているかどうかについて、判定が行われる。
【０１０２】
ロード−ストア競合情報が、ロード命令とストア命令とが競合する結果となることを示していない（例えば、過去に競合が存在しなかった）場合には、ステップ９０６において、命令をデフォルト発行グループに置き、プロセッサによって実行させることができる。しかしながら、ロード−ストア競合情報が、ロード命令とストア命令とが競合し得ることを示す場合には、ステップ９０８において、ロード命令及びストア命令は、ロード命令及びストア命令が競合する結果とならないように実行するためにスケジューリングすることができる。次いで、ステップ９１０において、ロード命令及びストア命令を発行し、実行することができる。プロセス９００は、ステップ９１２において終了することができる。
【０１０３】
本発明の１つの実施形態においては、（例えば、ロード−ストア競合情報に基づく）ロード命令とストア命令との間の予測される競合は、ロード命令の実行をストア命令の実行に対して遅延させることによって、解決することができる。ロード命令の実行を遅延させることによって、（例えば、転送パスを介して、又は、ストア・ターゲット・キュー５４０から）ストア命令の結果をロード命令に転送することを成功させるか、又は、ストア命令の結果を用いてＤ−キャッシュ２２４を更新し、ロード命令が更新された要求データをＤ−キャッシュ２２４からロードするのを成功させることができるようになる。
【０１０４】
本発明の１つの実施形態においては、ロード命令の実行は、ロード命令の実行を停止することによってストア命令の実行に対して遅延させることができる。例えば、ロード−ストア競合情報が、ロード命令がストア命令と競合し得ることを示すときには、ストア命令の実行が完了されるまでの間、ロード命令を停止することができる。必要に応じて、ロード命令とストア命令との間で１つ又は複数の命令を実行し、それにより、不適切なロード命令の実行を効果的に防止しつつ、プロセッサ使用率を向上させることができる場合もある。ロード命令とストア命令との間で実行される命令は、順序がばらばらに（例えば、プログラムに現れる順序と異なる順序で）実行される命令とすることもできる。
【０１０５】
ロード命令及びストア命令がカスケード型遅延実行パイプライン・ユニットに発行される方法を用いて、ロード命令及びストア命令の適切な実行を可能にすることができる。例えば、ロード−ストア競合情報が、ロード命令とストア命令とが競合し得ることを示す場合には、ロード命令及びストア命令は、一方の命令の実行を他方に対して遅延させることによって競合を解決するように、共通発行グループの形でカスケード型遅延実行パイプラインに発行することができる。
【０１０６】
図１０Ａは、本発明の１つの実施形態による、共通発行グループ１００２の形でロード命令及びストア命令をスケジューリングすることを示す図である。図示されるように、ロード命令及びストア命令は、共通発行グループ１００２に置かれ、プロセッサ・コア１１４の別個のパイプライン（例えば、Ｐ０及びＰ２）に同時に発行することができる。ストア命令は、ロード命令が実行されるパイプライン（Ｐ２）に対して実行が遅延されない（又は遅延が少ない）パイプライン（Ｐ０）に発行することができる。ロード命令を遅延実行パイプラインに置くことによって、上述されたように、ロード命令の実行を遅延させることができる。例えば、ロード命令の実行の遅延によって、ストア命令の結果を（転送パス１００４を介して）ロード命令に転送できるようになり、それにより、不適切なロード命令の実行を回避することができる。ストア命令が実行されている間、ロード命令は遅延キュー３２０２に保持されるため、ロード命令が発行されるパイプラインＰ２についての実行ユニット３１０２をそのまま用いて、以前に発行された他の命令を実行することができ、それにより、プロセッサ１１０の全体的な効率は増大する。
【０１０７】
ロード−ストア競合情報が、ロード命令がストア命令と競合することを示す場合に、不適切な命令の実行を防止するために、ロード命令及びストア命令を同じパイプラインに発行する場合もある。図１０Ｂは、本発明の１つの実施形態による、同一のパイプライン（例えばＰ０）へのロード命令及びストア命令のスケジューリングを示す図である。図示されるように、ロード命令及びストア命令は、別個の発行グループ１００６、１００８の形で、同一のパイプライン（Ｐ０）に発行することができる。ロード命令及びストア命令を同一のパイプラインに発行することによって、ロード命令の実行をストア命令の実行に対して遅延させることができる。ロード命令の実行を遅延させることによって、ストア命令からのデータを、例えばストア命令からロード命令に（例えば転送パス１０１０を介して）転送することができる。ロード命令及びストア命令は、他のパイプライン（例えばＰ１、Ｐ２、又はＰ３）にスケジューリングすることができ、又は必要に応じて、遅延量の等しい異なるパイプラインにスケジューリングすることもできる（例えば、別のパイプラインＰ４の遅延がパイプラインＰ０の遅延と等しい場合には、ロード命令又はストア命令は、パイプラインＰ０又はＰ４のどちらかにおいて、順番に実行されるようにスケジューリングすることができる）。
【０１０８】
上述されたようにロード命令及びストア命令の実行をスケジューリングするために、本来であればロード命令及びストア命令が置かれる発行グループ（例えば、デフォルト発行グループ）を修正する場合もある。例えば、発行グループは、一般に、各々のパイプラインに発行される単一の命令（例えば、Ｐ０、Ｐ１、Ｐ２、Ｐ３のそれぞれに発行される４つの命令）を含むことができる。しかしながら、上述されたようにロード命令及びストア命令を発行するために（例えば、共通発行グループの形で、又は、別個の発行グループの形で同一のパイプラインに）、３つ以下の命令が発行される発行グループを作成することもできる。
【０１０９】
異なる実行ユニット３１０が異なる機能を提供する場合もある。例えば、実行ユニット３１００及び３１０２がロード／ストア機能を提供し（したがって、ロード命令及びストア命令を実行するために用いられる）、実行ユニット３１０１及び３１０３が演算能力及び論理能力を提供する（したがって、演算命令及び論理命令を実行するために用いられる）こともできる。したがって、ロード−ストア競合情報が、ロード命令とストア命令とが競合し得ることを示すときには、ロード命令及びストア命令の実行を適切にスケジューリングするために、（上述された）スケジューリングの選択肢を機能の制約と併せて用いることができる。例えば、図１０Ａに示されるように、ストア命令はロード命令と共に共通発行グループの形で発行することができ、発行グループ内で、ストア命令をパイプラインＰ０に発行し、ロード命令をパイプラインＰ２に発行することによって、スケジューリングの要件と共に機能の制約を満たすことができる。必要に応じて、プロセッサ・コア１１４内のパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３の各々が、ロード命令又はストア命令及び他の命令を実行するのに必要な機能を提供する場合もある。
【０１１０】
本発明の１つの実施形態においては、単一のロード−ストア実行ユニット３１０をプロセッサ・コア１１４に設け、ストア能力を提供する他の実行ユニットをコア１１４に持たせないようにすることができる。プロセッサ・コア１１４における２つ、３つ、若しくはそれ以上の実行ユニット又は実行ユニットの各々が、ロード能力を提供することもある。単一のロード−ストア実行ユニット３１０が設けられる場合には、ロード能力を有する他の実行ユニットは、上述された実施形態により（例えば、実効アドレス比較を用いて）単一のロード−ストア実行ユニット３１０から転送されたストア情報を受信することができる。
【０１１１】
１つの実施形態においては、単一のロード−ストア実行ユニット３１０と他の実行ユニットとの間でロード−ストア転送が行われないように、コア１１４に単一のロード−ストア実行ユニット３１０を設けることができる。単一のロード−ストア実行ユニット３１０が設けられる場合には、検出された全てのロード−ストア競合（例えば、実行中に検出されたロード−ストア競合、又は、プリデコード中に検出されたロード−ストア競合）を、単一のロード−ストア実行ユニット３１０に発行することができる。検出された全てのロード−ストア競合を単一のロード−ストア実行ユニット３１０にスケジューリングするために、必要なスケジューリングを容易にするように幾つかの発行グループを複数のグループに分割することができる。１つの実施形態においては、単一のロード−ストア実行ユニット３１０は、（例えば、２つのダブルワードが一度にストアされる、即ち単一のクワッドワードとなるように）ダブルワイド・ストアの選択肢を提供することができる。ダブルワイド・ロード−ストア実行ユニット３１０を用いて、例えば、レジスタ・ファイル２４０について保存／復元機能を行うことができる。
【０１１２】
ロード−ストア競合情報の実施形態
上述されたように、（例えば、ロード命令及びストア命令の実行中に）ロード−ストア競合が検出された場合には、競合を示すロード−ストア競合情報をストアすることができる。本発明の１つの実施形態においては、ロード−ストア競合情報は、競合を示す単一のビット（ＬＳＣ）を含むことができる。ビットが設定された場合には競合が予測され、ビットが設定されない場合には競合が予測されないことになる。
【０１１３】
ロード命令及びストア命令が後に実行され、命令が競合を生じさせない場合には、ＬＳＣをクリアして０とし、それ以降は命令が競合を生じさせないことを示すようにすることができる。必要に応じて、ＬＳＣを１に設定したままとし、それにより、命令を実行することが別のロード−ストア競合を生じさせる可能性があることを示してもよい。
【０１１４】
本発明の１つの実施形態においては、複数の履歴ビット（ＨＩＳ）を用いて、ロード命令とストア命令とが競合を生じさせることになるかどうかを予測し、実行するために命令をどのようにスケジューリングすべきかを決定することができる。例えば、ＨＩＳが２つのバイナリ・ビットの場合には、００をロード−ストア競合が予測されないことに対応させることができ、一方、０１、１０、及び１１は、それぞれ、ロード・ストア競合の弱い予測、強い予測、及び非常に強い予測に対応させることができる。ロード命令及びストア命令がロード−ストア競合を生じさせる度に、ＨＩＳの値を増加させて、ロード−ストア競合の予測レベルを高くすることができる。ＨＩＳが１１であり、その後にロード−ストア競合が検出されたときには、ＨＩＳは１１のままとすることができる（例えば、カウンタを００に戻すのではなく、１１で飽和させることができる）。ロード命令がロード−ストア競合を生じさせない度に、ＨＩＳの値を減少させることができる。複数の履歴ビットが使用される場合には、複数の履歴ビットを用いて、（上述されたように）どのターゲット・アドレスがストアされるべきかを判定することと、ロード命令をどのようにスケジューリングするかを決定することとの両方が可能である。
【０１１５】
１つ又は複数のＬＳＣビットが専用のキャッシュのエントリにストアされる場合もある。エントリは、ストア命令と競合するロード命令を示すことができる。エントリが、ロード命令がストア命令と競合することを示す場合には、プロセッサ１１０は、それに応じて、上述されたようにロード命令及び先行するストア命令（例えば、ロード命令の直前の最初のストア命令）の実行をスケジューリングすることができる。必要に応じて、専用のキャッシュのエントリが、後続のロード命令と競合するストア命令を示す場合もある。そのような場合には、プロセッサ１１０は、それに応じて、上述されたようにストア命令及び後続のロード命令（例えば、ストア命令の後の最初のロード命令）の実行をスケジューリングすることができる。
【０１１６】
本発明の１つの実施形態によれば、ＬＳＣビットは、ロード命令及び／又はストア命令にストアすることができる。例えば、ロード−ストア競合が検出された場合には、ＬＳＣビットをロード命令及び／又はストア命令に再エンコードすることができる（再エンコード及びストアは、以下においてより詳細に説明される）。ＬＳＣビットがロード命令に再エンコードされる場合には、それに応じてロード命令及び先行するストア命令をスケジューリングすることができる。ＬＳＣビットがストア命令に再エンコードされる場合には、それに応じてストア命令及び後続のロード命令をスケジューリングすることができる。
【０１１７】
プリデコードにおけるロード−ストア曖昧性解消及びスケジューリング
ロード−ストア競合情報が、どのロード命令がどのストア命令と競合するかを明確に特定することができない場合もある。例えば、各々のプロセッサのパイプラインにおけるステージの数によって、及び／又は、パイプラインの数によって、プロセッサ・コア１１４は、各々が互いに競合し得る複数のロード命令と複数のストア命令とを同時に実行することがある。単一のビットを（例えば、ロード命令又はストア命令に）ストアすることでは、どのロード命令がどのストア命令と具体的に競合するのかを特定できない場合がある。また、ロード命令及びストア命令に与えられるアドレス・データ（例えば、ポインタ情報）は、（例えば、ポインタがスケジューリング時点において解決されていないことがあるため）ロード命令とストア命令とが競合するかどうかを判定するのに役に立たない場合もある。したがって、プロセッサ１１４が、競合するロード命令及びストア命令の曖昧性解消に利用できる付加的な情報（例えば、より具体的な識別情報）をストアする場合もある。
【０１１８】
曖昧性解消情報は、命令のスケジューリング及びプリデコードの際に生成される場合もがある。また、曖昧性解消情報は、命令の以前の実行の際に（例えば、以下で説明されるように、トレーニング・フェーズの際に）生成される場合もある。命令のスケジューリング及びプリデコードの際に（例えば、命令がＬ２キャッシュ１１２からフェッチされ、スケジューラ及びプリデコーダ２２０によって処理されるときに）、この情報を用いて、どのロード命令とストア命令が競合するのかを判定し、実行のために命令を適切にスケジューリングすることができる。必要に応じて、他の回路が、命令の実行をスケジューリングするために曖昧性解消情報を利用することもできる。
【０１１９】
本発明の１つの実施形態においては、ＬＳＣビットのコピーをロード命令とストア命令の両方にストアすることができる（又は、キャッシュが使用される場合には、ロード命令とストア命令の両方についてエントリを与えることができる）。したがって、所定のＬＳＣビットを持つストア命令に遭遇したときには、プロセッサ１１０は、後続のロード命令も設定されたＬＳＣビットを持つかどうかを判定する。所定のＬＳＣを持つロード命令とストア命令が両方とも検出された場合には、ロード命令とストア命令は、上述されたように、実行のためにスケジューリングすることができる。クリアされたＬＳＣビットが、仲介するロード命令とストア命令（例えば、所定のＬＳＣビットを持つロード命令とストア命令との間のロード命令又はストア命令）の間で競合が予想されないことを示すことができるため、所定のＬＳＣビットを持たないいずれかの仲介するロード命令又はストア命令は、例えば、競合に関しては無視することができる。
【０１２０】
所定のＬＳＣビットを持つストア命令が検出された場合には、プロセッサ１１０は、所定数の後続の命令のみを調べて、そのうちの１つが所定のＬＳＣビットを含むロード命令であるかどうかを判定することもある。例えば、所定のＬＳＣビットについて所定数の命令を検査した後で、その後に実行されるロード命令のいずれも、ストア命令の実行とロード命令の実行との間の（例えば、いずれかの仲介する命令によってもたらされる）本来的な遅延のためにストア命令と競合しないことについて判定を行うことができる。
【０１２１】
本発明の１つの実施形態においては、曖昧性解消の目的で用いることができる特別なロード−ストア競合情報を（例えば、ストア命令の１つのフィールドに）ストアすることができる。例えば、ストア実効アドレスの一部（ＳＴＡＸ、例えば、ストアされているデータの位置の５つのビット）を（例えば、ストア命令におけるストア実効アドレスの一部を再エンコードし、ストア命令を含むＩ−ラインにストア実効アドレスの一部を付加し、及び／又は、その一部を専用のキャッシュにストアすることによって）保存することができる。同様の情報を、ロード命令に与えるか、又はエンコードすることもできる。
【０１２２】
スケジューリング中に、ロード命令及び／又はストア命令におけるＬＳＣビットが、ロード−ストア競合が存在し得ることを示した場合には、その時点でスケジューリングされているロード命令の各々について、ストア実効アドレスの保存された部分ＳＴＡＸをロード実効アドレスの一部と比較することができる（例えば、比較は、スケジューリングされている全てのロード命令とストア命令との間で行うことができ、又は必要に応じて、所定のＬＳＣビットを持つロード命令及び／又はストア命令の間でのみ行うこともできる）。ストア命令のストア実効アドレスの一部ＳＴＡＸが、所与のロード命令のロード実効アドレスの一部と一致する場合には、ロード命令とストア命令との間で競合が存在することがあり、上述されたように、それに応じてロード命令及びストア命令をスケジューリングすることができる。
【０１２３】
ロード命令及びストア命令についてのロード実効アドレス及び／又はストア実効アドレスは、頻繁に（例えば、命令が実行される度に）変化する場合もある。このような場合には、ストア実効アドレスの保存された部分及びロード実効アドレスの一部は、曖昧性解消の目的に関して正確に信頼できないことがある。こうした場合には、ストア実効アドレスとロード実効アドレスとが予測可能であるかどうかを示す付加的なビット（例えば、確認ビット）をストアすることができる。上述された履歴情報（ＨＩＳ）の代わりに（例えば、その代替として）確認情報を使用できる場合もある。
【０１２４】
例えば、ロード命令及びストア命令の最初の実行中に、ロード実効アドレスとストア実効アドレスが一致した場合には、実効アドレスの一部を上述されたようにストアすることができ、確認ビットを設定することができる。ロード命令及びストア命令のその後の実行中に、ロード実効アドレスがストア実効アドレスと一致しないという判定が行われた場合には、確認ビットをクリアして、その後の命令の実行中にはロード実効アドレスとストア実効アドレスが一致しないことを示すことができる。その後のスケジューリング中に、確認ビットがクリアされている場合には、デフォルトで（例えば、ロード命令とストア命令とが競合するかどうかに関わりなく）実行のためにロード命令及びストア命令をスケジューリングすることができる。後に、確認ビットがクリアされ、ロード実効アドレスがストア実効アドレスと一致した場合には、ロード実効アドレス及びストア実効アドレスの一部をストアして、確認ビットを再び設定することができる。
【０１２５】
ロード実効アドレス及びストア実効アドレスが競合したかどうかの履歴を追跡する複数の確認ビットを使用する場合もある。例えば、２つの確認ビットが使用される場合には、ビットは、ロード実効アドレスがストア実効アドレスと一致することの、正確な予測が存在しない（「００」）か、ある程度正確な予測が存在する（「０１」）か、正確な予測が存在する（「１０」）か、又は非常に正確な予測が存在する（「１１」）かについて、追跡することができる。ロード実効アドレスとストア実効アドレスとが一致する度に、（値「１１」に到達するまで）確認値を増加させることができ、ロード実効アドレスとストア実効アドレスとが一致しない度に、（値「００」に到達するまで）確認値を減少させることができる。ロード命令及びストア命令が、確認レベルが閾値を上回る場合にのみ（例えば、正確な予測又は非常に正確な予測が行われる場合にのみ）、上述されたようにスケジューリングされる場合もある。閾値として、ロード−ストア競合の連続数、確認ビットの数、及び／又は、ロード−ストア競合の発生率（例えば、ロード命令とストア命令とはその期間の８０％において競合した）を挙げることができる。
【０１２６】
ロード命令とストア命令とが競合するかどうかを判定するために、ロード命令及び／又はストア命令のプリデコード中に、ロード・アドレスの一部及び／又はストア・アドレスの一部が取り出される場合がある。さらに、ストア・アドレスの一部及び／又はロード・アドレスの一部は、ロード命令及び／又はストア命令のプリデコード中に取り出されたアドレス情報から生成される場合もある。例えば、１つの実施形態においては、ロード・アドレス又はストア・アドレスの一部は、プリデコード中にレジスタ・ファイル２４０から取り出すことができる。レジスタ・ファイル２４０から取り出された一部は、ロード命令とストア命令とが競合するかどうかを判定するための比較に用いることができる。また、レジスタ・ファイル２４０から取り出された一部は、対応するロード命令又はストア命令についてのオフセットに追加される場合があり、追加によって生成されたアドレスは、競合が存在するかどうかの判定のために用いることができる。以下で説明される確認ビットがクリアされた場合にのみ、このような情報の取り出しが行われる場合もある。
【０１２７】
ロード−ストア競合情報のストア
上述されたように、ロード−ストア競合情報及び／又はターゲット・アドレスは、（例えば、情報を命令に再エンコードするか、又はデータをＩ−ラインに付加することによって）ロード命令を含むＩ−ラインにストアされる場合がある。図１１Ａは、本発明の１つの実施形態による、Ｉ−ライン１１０２におけるロード命令についてのロード−ストア競合情報及び／又はターゲット・アドレスをストアするのに用いられる、例示的なＩ−ライン１１０２を示すブロック図である。
【０１２８】
図示されるように、Ｉ−ラインは、複数の命令（命令１、命令２など）と、アドレス（例えば、実効アドレスＥＡ）をストアするのに用いられるビットと、制御情報（ＣＴＬ）をストアするのに用いられるビットとを含むことができる。本発明の１つの実施形態においては、図１１Ａに示される制御ビットＣＴＬを用いて、ロード命令についてのロード−ストア競合情報（例えば、ＬＳＣビット、確認ビット、及び／又は、ＨＩＳビット）をストアすることができ、ＥＡビットを用いて、ロード及び／又はストア実効アドレスの一部をストアすることができる。
【０１２９】
一例として、Ｉ−ラインの命令が実行されるときに、プロセッサ・コア１１４は、Ｉ−ライン内のロード命令がロード−ストア競合を引き起こしたかどうかを判定することができる。ロード−ストア競合が検出された場合には、Ｉ−ライン内のロード命令及び／又はストア命令の位置をＣＴＬビットにストアすることができる。例えば、各々のＩ−ラインが３２個の命令を含む場合には、ＣＴＬビットにストアされた（命令の位置を特定するのに十分なビットを含む）５ビットの２進数を用いて、ストアされたロード−ストア競合情報及び実効アドレス情報に対応するロード命令及び／又はストア命令を特定することができる。特定された１つ又は複数の命令に対応するＬＳＣビット及び／又はＨＩＳビットも、ＣＴＬビットにストアすることができる。
【０１３０】
１つの実施形態においては、ロード命令によって要求されるデータのターゲット・アドレスは、図１１Ａに示されるように、Ｉ−ラインに直接ストアする（付加する）ことができる。ストアされたターゲット・アドレスＥＡは、実効アドレス又は実効アドレスの一部（例えば、実効アドレスの高位の３２ビット）とすることができる。ターゲット・アドレスＥＡは、ロード命令によって要求されるデータか、又は必要に応じて、ターゲットとされたデータのアドレスを含むＤ−ラインのいずれかを特定することができる。１つの実施形態によれば、Ｉ−ラインは、各々がＩ−ラインのロード命令に対応する複数のアドレスをストアすることができる。
【０１３１】
ＥＡ及び／又はＣＬＴビットが、Ｉ−ラインにその目的で割り当てられたビットにストアされる場合もある。必要に応じて、本発明の１つの実施形態においては、ここで説明される実効アドレス・ビットＥＡ及び制御ビットＣＬＴは、それ以外には使われないＩ−ラインのビットにストアすることができる。例えば、Ｌ２キャッシュ１１２における各々の情報ラインは、異なるキャッシュ・レベルの間で伝送されるデータのエラー訂正に用いることができる特別なデータ・ビット（例えば、伝送されるデータが破損していないことを保証し、発生したいずれかの破損を修復するのに用いられるエラー訂正コードＥＣＣ）を有することができる。キャッシュの各々のレベル（例えば、Ｌ２キャッシュ１１２及びＩ−ライン・キャッシュ２２２）が、各々のＩ−ラインの同一コピーを含む場合もある。キャッシュの各々のレベルが所与のＩ−ラインのコピーを含む場合には、ＥＣＣは使用しなくてもよい。その代わりに、例えば、パリティ・ビットを用いて、Ｉ−ラインがキャッシュ間で適切に伝送されたかどうかを判定することができる。パリティ・ビットが、Ｉ−ラインがキャッシュ間で適切に伝送されなかったことを示した場合には、そのＩ−ラインは、エラーチェックを行う代わりに、（伝送キャッシュはラインを含むため）伝送キャッシュから再フェッチすることができる。
【０１３２】
アドレス及び制御情報をそれ以外には使われないＩ−ラインのビットにストアする１つの例として、ストアされた２ワードごとにエラー訂正のために１１個のビットを用いるエラー訂正プロトコルを考える。１つのＩ−ラインにおいて、（１ワード当たり１つの命令がストアされる場合に）１１個のビットのうちの１つを用いて、２つの命令ごとのパリティ・ビットをストアすることができる。１命令当りの残りの５ビットは、各々の命令についての制御ビット及び／又はアドレス・ビットをストアするのに用いることができる。例えば、５ビットのうちの４つを用いて、命令についての（ＬＳＣビット及び／又はＨＩＳビットなどの）ロード−ストア競合情報をストアすることができる。Ｉ−ラインが３２個の命令を含む場合には、残りの３２ビット（命令ごとに１ビット）を用いて、ロード及び／又はストア実効アドレスの一部などの他のデータをストアすることができる。本発明の１つの実施形態においては、１つのＩ−ラインが複数のロード命令及びストア命令を含むことができ、競合を生じさせるロード命令及び／又はストア命令の各々について、ロード−ストア競合情報をストアすることができる。
【０１３３】
命令がデコード及び／又は実行された後で、ロード−ストア競合情報がロード命令及び／又はストア命令にストアされる場合もある（再エンコードと呼ばれる）。図１１Ｂは、本発明の１つの実施形態による、例示的な再エンコードされたストア命令１１０４を示すブロック図である。ストア命令１１０４は、命令のタイプを特定するのに用いられるオペレーション・コード（Ｏｐ−Ｃｏｄｅ）、１つ又は複数のレジスター・オペランド（Ｒｅｇ．１、Ｒｅｇ．２）、及び／又はデータを含むことができる。図示されるように、ストア命令１１０４は、ＬＳＣ、ＨＩＳ、ＳＴＡＸ、及び／又は確認（ＣＯＮＦ）ビットをストアするのに用いられるビットを含むこともできる。
【０１３４】
ストア命令が実行されるときに、そのストア命令がロード−ストア競合を生じさせるかどうかについて判定を行うことができる。判定の結果として、上述されたようにＬＳＣ、ＨＩＳ、ＳＴＡＸ、及び／又はＣＯＮＦビットを修正することができる。次いで、ＬＳＣ及び／又はＨＩＳビットを命令にエンコードすることができ、それにより、命令が次にデコードされたときに、例えばプリデコーダ及びスケジューラ２２０によって、ＬＳＣ及び／又はＨＩＳビットを検査することができる。次いで、プリデコーダ及びスケジューラは、必要に応じてロード命令及びストア命令の実行をスケジューリングすることができる。ロード命令又はストア命令が再エンコードされるときに、その命令を含むＩ−ラインが、変更済みとしてマークされる場合もある。Ｉ−ラインが変更済みとしてマークされた場合には、再エンコードされた命令を含むＩ−ラインは、Ｉ−キャッシュ２２２に書き戻すことができる。上述されたように、修正された命令を含むＩ−ラインが、キャッシュ・メモリの各々のレベルに保持される場合もある。また、命令の他のビットを再エンコードのために用いることもできる。
【０１３５】
本発明の１つの実施形態において、ロード−ストア競合情報がＩ−ラインにストアされる場合には、システム１００において用いられるキャッシュ及び／又はメモリの各々のレベルは、Ｉ−ラインに含まれる情報のコピーを含むことができる。本発明の別の実施形態においては、キャッシュ及び／又はメモリの特定のレベルのみが、命令及び／又はＩ−ラインに含まれる情報を含むことができる。当業者には公知のキャッシュ・コヒーレンシの原則を用いて、キャッシュ及び／又はメモリの各々のレベルにおけるＩ−ラインのコピーを更新することができる。
【０１３６】
命令キャッシュを利用する従来のシステムにおいては、命令は、典型的には、プロセッサ１１０によって修正されないことに留意されたい（例えば、命令は読み取り専用である）。したがって、従来のシステムにおいては、Ｉ−ラインは典型的には、Ｌ２キャッシュ１１２に書き戻されずに、ある時間が経過するとＩ−キャッシュ２２２からエージアウトされる。しかしながら、ここで説明されるように、幾つかの実施形態においては、修正されたＩ−ライン及び／又は命令はＬ２キャッシュ１１２に書き戻され、それにより、ロード−ストア競合情報をより高いキャッシュ及び／又はメモリ・レベルに保持できるようになる。
【０１３７】
例として、Ｉ−ラインの命令がプロセッサ・コアによって処理される（ターゲット・アドレス及び／又はロード−ストア競合情報が更新される可能性がある）ときには、Ｉ−ラインはＩ−キャッシュ２２２に（例えば、書き戻し回路２３８を用いて）書き込まれ、Ｉ−キャッシュ２２２にストアされた古いバージョンのＩ−ラインが上書きされる可能性がある。１つの実施形態においては、Ｉ−ラインは、そのＩ−ラインにストアされた情報に変更が行われた場合にのみ、Ｉ−キャッシュ２２２に置くことができる。
【０１３８】
本発明の１つの実施形態によれば、修正されたＩ−ラインがＩ−キャッシュ２２２に書き戻されるときに、Ｉ−ラインを変更済みとしてマークすることができる。Ｉ−ラインがＩ−キャッシュ２２２に書き戻され、変更済みとしてマークされている場合には、そのＩ−ラインは、異なる期間の間Ｉ−キャッシュに残すことができる。例えば、Ｉ−ラインがプロセッサ・コア１１４によって頻繁に用いられている場合には、Ｉ−ラインは、何度かフェッチされＩ−キャッシュ２２２に戻され、その度に更新される可能性がある。しかしながら、Ｉ−ラインが頻繁に用いられない場合（エージングと呼ばれる）には、Ｉ−ラインは、Ｉ−キャッシュ２２２からパージされることがある。Ｉ−ラインがＩ−キャッシュ２２２からパージされるときに、Ｉ−ラインをＬ２キャッシュ１１２に書き戻すことができる。
【０１３９】
１つの実施形態においては、Ｉ−ラインは、修正中としてマークされた場合にのみ、Ｌ２キャッシュに書き戻すことができる。別の実施形態においては、Ｉ−ラインは、常にＬ２キャッシュ１１２に書き戻すことができる。１つの実施形態においては、Ｉ−ラインは必要に応じて、一度に数個のキャッシュ・レベルに（例えばＬ２キャッシュ１１２とＩ−キャッシュ２２２とに）書き戻すか、又は、Ｉ−キャッシュ２２２以外のレベルに（例えば直接Ｌ２キャッシュ１１２に）書き戻すことができる。
【０１４０】
修正された命令及び／又はＩ−ライン・フラグをプロセッサ・コア１１４からＩ−キャッシュ２２２に書き戻すために、書き戻しパスが設けられる場合もある。命令は、典型的には読み取り専用であるため（例えば、命令は、典型的には、元のプログラムが実行された後は修正されないため）、命令情報をＩ−キャッシュ２２２又はプロセッサ・コア１１４からＬ２キャッシュ１１２に書き戻すための付加的な回路が設けられることもある。１つの実施形態においては、Ｉ−キャッシュ２２２からＬ２キャッシュ１１２への付加的な書き戻しパス（例えば、バス）を設けることができる。
【０１４１】
必要に応じて、Ｄ−キャッシュ２２４に書き戻されたデータが自動的にＬ２キャッシュ１１２にも書き戻される（それにより両方のキャッシュがデータの同一のコピーを含むことができる）ようにＤ−キャッシュ２２４からＬ２キャッシュ１１２へのストア・スルーが使用される場合には、ストア・スルーを行うために、Ｄ−キャッシュ２２４からＬ２キャッシュ１１２への別個のパスが設けられる場合もある。本発明の１つの実施形態においては、ストア・スルー・パスは、命令及び／又はＩ−ライン・フラグをＩ−キャッシュ２２２からＬ２キャッシュ１１２に書き戻すために使用することもでき、それにより、Ｄ−キャッシュ２２４とＩ−キャッシュ２２２とがストア・スルー・パスの帯域幅を共用することが可能になる。
【０１４２】
例えば、図１２に示されるように、ストア・スルー・パス１２０２に選択回路１２０４を挿入することができる。ロード−ストア競合情報が、プロセッサ・コア１１４から書き戻しパス１２０６を経由してＩ−キャッシュ２２２に書き戻された後で、ロード−ストア競合情報は、その情報を含むＩ−ラインがＩ−キャッシュ２２２からエージアウトされるか、そうでなければ廃棄されるまで、Ｉ−キャッシュ２２２に残すことができる。Ｉ−ラインがＩ−キャッシュ２２２から廃棄されるときに、ロード−ストア競合情報（例えば、Ｉ−ラインの末尾に付加されたフラグ及び／又は命令に再エンコードされたフラグ）は、選択回路１２０４によって選択され、ストア・スルー・パス１２０２を経由して書き戻すことができ、それにより、ロード−ストア競合情報をＬ２キャッシュ１１２に保持することが成功する。必要に応じて、ロード−ストア競合情報を含むＩ−ラインがＩ−キャッシュ２２２から廃棄されるときにその情報を書き込む代わりに、ロード−ストア競合情報が例えば書き戻しパス１２０６を経由してコア１１４から受信されたときにその情報を自動的に書き戻すこともできる。いずれの場合であっても、Ｉ−キャッシュ２２２からＬ２キャッシュ１１２への書き戻しは、デッド・サイクルの際に、例えばストア・スルー・パス１２０２がそれ以外には使用されていないときに、行うことができる。
【０１４３】
１つの実施形態においては、各々の命令のビットは、説明されたように命令が実行された後で再エンコードすることができる。ロード−ストア競合情報は、命令がより高いレベルのソース・コードからコンパイルされたときに命令にエンコードされる場合もある。例えば、１つの実施形態においては、コンパイラは、ロード−ストア競合を生じさせることがあるロード命令及びストア命令を認識し、それに応じてビットを命令に設定するように設計することができる。
【０１４４】
必要に応じて、プログラムのソース・コードが作成されたら、ソース・コードを命令にコンパイルし、次いでテスト実行中にその命令を実行することもできる。
【０１４５】
テスト実行及びテスト実行の結果を監視して、どの命令がロード−ストア競合を生じさせるかを判定することができる。次いで、ソース・コードは、ロード−ストア競合情報がテスト実行を考慮して適切な値に設定されるように、再コンパイルすることができる。テスト実行がプロセッサ１１０上で行われる場合もある。プロセッサ１１０において制御ビット又は制御ピンを用いて、プロセッサ１１０をテスト実行のための特別なテスト・モードに置く場合もある。必要に応じて、テスト実行を行い、その結果を監視するように設計された特別なプロセッサを使用することもできる。
【０１４６】
シャドー・キャッシュ
上述されたように、ロード−ストア競合情報は、特別なキャッシュにストアすることができる。ロード命令又はストア命令のアドレス（又は、必要に応じて、１つ又は複数の命令を含むＩ−ラインのアドレス）は、特別なキャッシュへのインデックスとして用いることができる。特別なキャッシュは、シャドー・キャッシュと呼ばれることもある。
【０１４７】
１つの実施形態においては、ロード命令又はストア命令を含むＩ−ラインが（例えば、プリデコーダ及びスケジューラ２２０によって）受信されたときに、シャドー・キャッシュは、フェッチされたＩ−ラインに対応するエントリ（又は複数のエントリ）（例えば、フェッチされたＩ−ラインと同一の実効アドレスを持つエントリ）を検索することができる（例えば、シャドー・キャッシュは、内容アドレス可能（content addressable）とすることができる）。対応するエントリが発見された場合は、ロード−ストア競合履歴情報及び／又はエントリに関連する１つ又は複数のターゲット・アドレスは、プリデコーダ及びスケジューラ２２０又は他の回路によって、必要に応じて競合し得るいずれかのロード命令又はストア命令をスケジューリングするのに用いることができる。
【０１４８】
本発明の１つの実施形態においては、シャドー・キャッシュは、上述されたように、制御ビット（例えば、ロード−ストア競合情報）とロード／ストア実効アドレスの一部の両方を、ストアすることができる。必要に応じて、制御ビットをＩ−ライン及び／又は個々の命令にストアし、他の情報をシャドー・キャッシュにストアすることもできる。
【０１４９】
どのエントリをシャドー・キャッシュにストアするかを判定するのに上述の技術を用いることに加えて、１つの実施形態においては、シャドー・キャッシュを管理するために、従来のキャッシュ管理技術を単独で、又は上述の技術と共に、用いることができる。例えば、シャドー・キャッシュのエントリは、シャドー・キャッシュのエントリがアクセスされた頻度を示すエージ・ビットを有することができる。所与のエントリが頻繁にアクセスされる場合には、エージ値は小さい（例えば、若い）ままである。しかしながら、エントリがあまりアクセスされない場合には、エージ値は大きくなり、そのエントリは、シャドー・キャッシュから廃棄される場合もある。
【０１５０】
更なる例示的な実施形態
本発明の１つの実施形態においては、実効アドレスの一部及び他のロード−ストア競合情報は、命令の所与のセットが実行されると共にロード−ストア競合情報又は他のストアされた値が変化するように、継続的に追跡し、実行時に更新することができる。このように、ロード−ストア競合情報は、例えばプログラムが実行されるときに、動的に修正することができる。
【０１５１】
本発明の別の実施形態においては、ロード−ストア競合情報は、命令セットの最初の実行フェーズ中に（例えば、プログラムが実行される最初の「トレーニング」期間中に）ストアすることができる。最初の実行フェーズは、「初期化」フェーズ又はトレーニング・フェーズと呼ぶこともできる。トレーニング・フェーズ中に、ロード−ストア競合情報を追跡し、上述された基準に従って（例えば、命令を含むＩ−ライン又は専用のキャッシュに）ストアすることができる。トレーニング・フェーズが完了したときには、ストアされた情報は、上述されたように命令の実行をスケジューリングするのに用い続けることができる。
【０１５２】
１つの実施形態においては、（例えば、ロード命令を含むＩ−ライン又は専用のキャッシュ若しくはレジスタにストアされた）１つ又は複数のビットを用いて、命令がトレーニング・フェーズにおいて実行されているかどうか、又は、プロセッサ１１０がトレーニング・フェーズ・モードにあるかどうかを示すことができる。例えば、プロセッサ１１０におけるモード・ビットは、トレーニング・フェーズ中にクリアすることができる。ビットはクリアされるものの、上述されたようにロード−ストア競合情報を追跡し、更新することができる。トレーニング・フェーズが完了すると、ビットを設定することができる。ビットが設定されたときには、ロード−ストア競合情報はそれ以上更新されず、トレーニング・フェーズを完了することができる。
【０１５３】
１つの実施形態においては、トレーニング・フェーズは、特定の期間にわたって（例えば、ある数のクロック周期が経過するまで、又は、所与の命令がある回数実行されるまで）続けることができる。１つの実施形態においては、特定の期間が経過し、トレーニング・フェーズが終了したときに、ストアされた最新のロード−ストア競合情報をそのままストアしておくことができる。また、１つの実施形態においては、トレーニング・フェーズは、所与のＩ−ラインが閾値の回数だけ実行されるまで続けることができる。例えば、Ｉ−ラインが所与のレベルのキャッシュから（例えば、メイン・メモリ１０２、Ｌ３キャッシュ、又はＬ２キャッシュ１１２から）フェッチされたときに、Ｉ−ラインのカウンタ（例えば、２ビット又は３ビットのカウンタ）をゼロにリセットすることができる。カウンタがＩ−ライン実行の回数の閾値を下回っている間は、そのＩ−ラインの命令についてトレーニング・フェーズを続けることができる。Ｉ−ラインの各々の実行後に、カウンタの値を増加させることもできる。Ｉ−ラインの実行の回数が閾値に達した後に、そのＩ−ラインの命令についてのトレーニング・フェーズを停止することができる。また、実行されているＩ−ラインの命令によって異なる閾値が用いられる場合もある（例えば、より変動の大きい結果を有する命令の場合には、より多くのトレーニングを用いることができる）。
【０１５４】
本発明の別の実施形態においては、トレーニング・フェーズは、１つ又は複数の終了基準が満たされるまで続けることができる。例えば、ロード−ストア競合履歴がストアされる場合には、最初の実行フェーズは、ロード−ストア競合が予測可能になるまで（又は、強く予測可能になるまで）続けることができる。結果が予測可能になったときに、最初のトレーニング・フェーズが完了し、その後のスケジューリング及び実行についてロード−ストア競合情報を用いることができることを示すロック・ビットを、Ｉ−ラインに設定することができる。
【０１５５】
本発明の別の実施形態においては、断続的なトレーニング・フェーズにおいて、ターゲット・アドレス及びキャッシュ・ミス情報を修正することができる。例えば、各々のトレーニング・フェーズについて、頻度及び持続時間の値をストアすることができる。頻度に対応するある数のクロック周期が経過するたびにトレーニング・フェーズを始め、それを特定の持続時間値にわたって続けることができる。別の実施形態においては、頻度に対応するある数のクロック周期が経過するたびに、トレーニング・フェーズを始め、特定の閾値条件が満たされるまで（例えば、上述されたように、特定のレベルのロード−ストア競合予測可能性が達成されるまで）トレーニング・フェーズを続けることができる。
【０１５６】
ＬＳＣビットが設定されており、それがロード−ストア競合を予測する場合に、その予測が信頼できないことがあり、例えば、ロード命令及びストア命令の実行がロード−ストア競合を生じさせないことがある。このような状況において、命令の実行の繰り返しがロード−ストア競合を生じさせない場合には、ＬＳＣビットを後でクリアすることができる。例えば、カウンタは、ロード命令がロード−ストア競合を生じさせなかった以前の回数を記録することができる。命令がロード−ストア競合を生じさせるたびに、カウンタを０にリセットすることができる。命令がロード−ストア競合を生じさせないたびに、カウンタの値を増加させることができる。カウンタが所与の閾値（例えば、連続４回のノンミス）に達したときに、予測ビットをクリアすることができる。必要に応じて、命令がミスを生じさせるたびにカウンタをリセットするのではなく、カウンタの値を減少させてもよい。ＬＳＣ予測ビットをクリアするための機構を設けることによって、プロセッサは、上述されたように、ロード命令及びストア命令の不必要なスケジューリングを回避することができる。さらに、予測ビットがクリアされる場合には、命令がロード−ストア競合を生じさせるかどうかが予測不可能であることを示すように、別のビット又は複数のビットを設定することができる。
【０１５７】
本発明の１つの実施形態においては、互いに依存するロード命令又はストア命令のいずれかがキャッシュ・ミスを生じさせる場合には、ロード−ストア競合が発生しないことがある。例えば、キャッシュ・ミスは、ロード命令及びストア命令によってアクセスされているデータがＤ−キャッシュ２２４にないことを示すことがある。データがフェッチされ、Ｄ−キャッシュ２２４に置かれたときには、そのデータがロード命令に与えられる前に、ストア命令からのデータを用いて、フェッチされたデータを更新することができる。このように、ロード命令は、ロード−ストア競合を起こすことなく正しく更新されたデータを受信することができる。したがって、ロード命令又はストア命令のいずれかがキャッシュ・ミスを生じさせる場合には、ロード−ストア競合情報を記録しなくてもよい。
【０１５８】
本発明の実施形態は、カスケード型遅延実行パイプライン・ユニットを使用するプロセッサに関して、及び、複数のコア１１４を有するプロセッサに関して、上述されたが、本発明の実施形態は、カスケード型遅延実行パイプライン・ユニット又は複数のコアを使用しない従来のプロセッサを含むあらゆるプロセッサに用いることができる。代替的で適切な構成が、当業者に直ちに明らかとなる。
【図面の簡単な説明】
【０１５９】
【図１】本発明の１つの好ましい実施形態によるシステムを示すブロック図である。
【図２】本発明の１つの好ましい実施形態によるコンピュータ・プロセッサを示すブロック図である。
【図３】本発明の１つの好ましい実施形態によるプロセッサのコアの１つを示すブロック図である。
【図４】本発明の１つの好ましい実施形態による、ロード−ストア競合を解決するための１つのプロセスを示すフロー図である。
【図５】本発明の１つの好ましい実施形態による、ストア命令からロード命令にデータを転送するための転送パスを持つ例示的な実行ユニットを示す。
【図６】本発明の１つの好ましい実施形態による、プロセッサにおけるロード−ストア競合を解決するために使用することができるハードウェアを示すブロック図である。
【図７】本発明の１つの好ましい実施形態による、ストア・ターゲット・キューにおけるロード命令アドレスについて、一致する最も若いエントリを判定するための選択ハードウェアを示すブロック図である。
【図８】本発明の１つの好ましい実施形態による、ストア命令から転送されたデータをロード命令についてのデータと統合するための統合ハードウェアを示すブロック図である。
【図９】本発明の１つの好ましい実施形態による、ロード命令及びストア命令の実行をスケジューリングするためのプロセスを示すフロー図である。
【図１０】本発明の１つの好ましい実施形態による、ロード命令及びストア命令のスケジューリングを示す図である。
【図１１】（Ａ）本発明の１つの好ましい実施形態による、ロード−ストア競合情報をストアするのに用いられる例示的なＩ−ラインを示すブロック図である。（Ｂ）本発明の１つの好ましい実施形態による例示的なストア命令を示すブロック図である。
【図１２】本発明の１つの好ましい実施形態による、ロード−ストア競合情報をプロセッサ・コアからキャッシュ・メモリに書き戻すための回路を示すブロック図である。
【図１】
2009540411.tif 000003
【図２】
2009540411.tif 000004
【図３】
2009540411.tif 000005
【図４】
2009540411.tif 000006
【図５】
2009540411.tif 000007
【図６】
2009540411.tif 000008
【図７】
2009540411.tif 000009
【図８】
2009540411.tif 000010
【図９】
2009540411.tif 000011
【図１０】
2009540411.tif 000012
【図１１】
2009540411.tif 000013
【図１２】
2009540411.tif 000014
【国際調査報告】
2009540411.tif 000015
2009540411.tif 000016
2009540411.tif 000017