(57)【特許請求の範囲】
【請求項１】
データキャッシュ（１８）と、データキャッシュ（１８）に結合されるロード／ストアユニット（ＬＳＵ）（２０）とを備えたプロセッサ（１０）であって、
前記ＬＳＵ（２０）はキュー（２４）を備えており、
前記キュー（２４）内の各エントリは当該エントリが有効であることが示されている場合に前記データキャッシュ（１８）にアクセスしたがリタイヤしなかった異なるロードに割り当てられており、
前記ＬＳＵ（２０）は前記キューに結合される制御ユニット（２６）を更に備えており、
前記制御ユニット（２６）は、スヌープ動作以外の動作に応じて前記データキャッシュ（１８）の内容が変化したときに、前記キュー（２４）において示される各ロードのデータキャッシュヒット状態を更新するように構成されており、
前記ＬＳＵ（２０）は前記プロセッサ（１０）によって受け取られるスヌープ動作に対応するスヌープインデックスを受け取るように結合されており、
前記スヌープインデックスが前記キュー（２４）の第１のエントリ内にストアされているロードインデックスに一致することと、前記第１のエントリ内の第１のロードの前記データキャッシュヒット状態がヒットを示していることと、前記データキャッシュ（１８）が前記スヌープ動作に対するスヌープヒットを検出していることと、前記スヌープ動作がヒットである前記データキャッシュ（１８）の第１のウエイに前記第１のエントリ内にストアされているロードウエイが一致することとに応答して、前記制御ユニット（２６）が前記キュー（２４）の前記第１のエントリ内の前記第１のロードに対するスヌープヒットを検出するように構成されており、
前記ロードウエイは前記ロードがヒットする前記データキャッシュ（１８）のウエイであり、
前記制御ユニット（２６）は、前記データキャッシュ（１８）内の前記第１のロードによってヒットされるキャッシュラインの無効に応答して、非ヒットを示すように前記第１のロードの前記データキャッシュヒット状態を更新するように構成されている、プロセッサ（１０）。
【請求項２】
請求項１に記載のプロセッサ（１０）であって、前記制御ユニット（２６）は更に、前記スヌープインデックスが前記ロードインデックスに一致していることと、前記第１のロードの前記データキャッシュヒット状態が非ヒットを示していることとに応答して、前記第１のロードに対するスヌープヒットを検出するように構成されているプロセッサ（１０）。
【請求項３】
請求項１又は２に記載のプロセッサ（１０）であって、前記制御ユニット（２６）は前記第１のロードが前記データキャッシュ（１８）にアクセスするときのキャッシュミスに応答して前記第１のロードの前記データキャッシュヒット状態を非ヒットに設定するように構成されているプロセッサ（１０）。
【請求項４】
請求項１〜３のいずれかに記載のプロセッサ（１０）であって、前記制御ユニット（２６）は前記キュー（２４）内の前記第１のロードに対するフィルヒットに応答して前記第１のロードの前記データキャッシュヒット状態を非ヒットに設定するように構成されているプロセッサ（１０）。
【請求項５】
請求項１〜４のいずれかに記載のプロセッサ（１０）であって、前記第１のロードが正しく整列されていないことに応答して、第２のインデックスが前記第１のエントリ内にストアされ、前記ロードインデックスは前記正しく整列されていないロードの第１の部分に対応し、前記第２のインデックスは前記正しく整列されていないロードの第２の部分に対応しているプロセッサ（１０）。
【請求項６】
請求項５に記載のプロセッサ（１０）であって、前記制御ユニット（２６）は更に、前記第２のインデックスが前記スヌープインデックスに一致することと前記第１のロードが正しく整列されていないこととに応答して、前記第１のロードに対するスヌープヒットを検出するように構成されているプロセッサ（１０）。
【請求項７】
プロセッサ（１０）内の第１のロードに対してデータキャッシュ（１８）にアクセスすることと、
前記第１のロードが割り当てられる、キュー（２４）の第１のエントリ内にデータキャッシュヒット状態をストアすることと、
スヌープ動作以外の動作に応じて前記データキャッシュ（１８）の内容が変化したときに、前記データキャッシュヒット状態を更新することと、
前記プロセッサ（１０）におけるスヌープ動作に対応するスヌープインデックスを受け取ることと、
前記スヌープインデックスが前記第１のエントリ内にストアされているロードインデックスに一致することと、前記第１のロードの前記データキャッシュヒット状態がヒットを示していることと、前記データキャッシュ（１８）が前記スヌープ動作に対するスヌープヒットを検出していることと、前記スヌープ動作がヒットである前記データキャッシュ（１８）の第１のウエイに前記第１のエントリ内にストアされているロードウエイが一致することとに応答して、前記第１のロードに対するスヌープヒットを検出することとを備えた方法であって、
前記ロードウエイは前記ロードがヒットする前記データキャッシュ（１８）のウエイであり、
前記更新することは、前記データキャッシュ（１８）内の前記第１のロードによってヒットされるキャッシュラインの無効に応答して、非ヒットを示すように前記第１のロードの前記データキャッシュヒット状態を更新することを含む、方法。
【請求項８】
請求項７に記載の方法であって、第２のロードに割り当てられる前記キュー（２４）の第２のエントリに前記スヌープインデックスが一致することと、前記第２のロードの第２のデータキャッシュヒット状態が非ヒットを示していることとに応答して、前記第２のロードに対するスヌープヒットを検出することを更に備えた方法。
【請求項９】
請求項７又は８に記載の方法であって、前記第１のロードが正しく整列されていないことに応答して、第２のインデックスを前記第１のエントリ内にストアすることを更に備え、前記ロードインデックスは前記正しく整列されていないロードの第１の部分に対応し、前記第２のインデックスは前記正しく整列されていないロードの第２の部分に対応している方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はプロセッサの分野に関し、更に特定的には、プロセッサにおけるロード処理及びメモリ順序付けメンテナンスに関する。
【背景技術】
【０００２】
プロセッサは一般的に、メモリへ及びメモリからデータを移動させるためにメモリ動作を用いる。「メモリ動作」の用語は、プロセッサとメモリの間でのデータの転送を指定する動作を参照する（その転送はキャッシュ内で達成されることもあるが）。ロードメモリ動作はメモリからプロセッサへのデータの転送を指定し、ストアメモリ動作はプロセッサからメモリへのデータの転送を指定する。ロードメモリ動作はここではより簡潔に「ロード」と称されることがあり、同様にストアメモリ動作は「ストア」と称されることがある。メモリ動作は、プロセッサによって採用された命令セットに応じて、メモリオペランドに直接的にアクセスしてその定義された機能（例えば算術、論理等）を実行する命令内で暗黙的(implicit)であるかもしれないし、あるいはデータ転送のみを実行する明示的(explicit)な命令であるかもしれない。
【０００３】
幾つかの命令セットアーキテクチャはメモリ動作の強い順序付け(strong ordering)を必要とする（例えばｘ８６命令セットアーキテクチャ）。一般的にメモリ動作は、規定されたプログラム順序でそれらが起きたと見える場合、強く順序付けられている。プロセッサはしばしば性能を改善するために、（プログラムの）順序に反してロードを実行することを試みる。しかし、もしロードが順序に反して実行されると、強いメモリ順序規則に違反する可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えばもし、第１のプロセッサがアドレスＡ１へのストアを実行した後にアドレスＡ２へのストアが続き且つ第２のプロセッサがアドレスＡ２に対するロード（第２のプロセッサのデータキャッシュ内ではミスする）を実行した後にアドレスＡ１に対するロード（第２のプロセッサのデータキャッシュ内ではヒットする）が続くとすると、強いメモリ順序規則に違反するであろう。強いメモリ順序規則は上述の状況では、アドレスＡ２に対するロードがアドレスＡ２へのストアからのストアデータを受け取る場合に、アドレスＡ１に対するロードがアドレスＡ１へのストアからストアデータを受け取らねばならないことを要求する。しかし、アドレスＡ２に対するロードが行われている間にアドレスＡ１に対するロードが完了することを許可される場合には、以下の状況が発生し得る、即ち（i）アドレスＡ１に対するロードがアドレスＡ１へのストアに先立ちデータを受け取ることができる、（ii）アドレスＡ１へのストアが完了することができる、（iii）アドレスＡ２へのストアが完了することができる、（iv）アドレスＡ２に対するロードが完了し且つアドレスＡ２へのストアによって提供されるデータを受け取ることができる。この結果は不正確であろう。
【課題を解決するための手段】
【０００５】
１つの実施形態においては、プロセッサは、データキャッシュと、データキャッシュに結合されるロード／ストアユニット（ＬＳＵ）とを備えている。ＬＳＵはキューを備えており、キュー内の各エントリは、データキャッシュにアクセスしたがリタイヤしなかった異なるロードに割り当てられている。ＬＳＵはキューに結合される制御ユニットを更に備えており、制御ユニットはデータキャッシュの内容が変化したときにキューにおいて示される各ロードのデータキャッシュヒット状態を更新するように構成されている。ＬＳＵはスヌープ(snoop)インデックスを受け取るように結合されており、インデックスはキャッシュ内で標識付けるために用いられる複数のアドレスビットのサブセットである。スヌープインデックスはプロセッサによって受け取られるスヌープ動作に対応しており、スヌープインデックスが第１のエントリ内にストアされているロードインデックスに一致することと、第１のロードのデータキャッシュヒット状態がヒットを示していることと、データキャッシュがスヌープ動作に対するスヌープヒットを検出していることと、スヌープ動作がヒットであるデータキャッシュの第１のウエイ(way)に第１のエントリ内にストアされているロードウエイが一致することとに応答して、制御ユニットがキューの第１のエントリ内の第１のロードに対するスヌープヒットを検出するように構成されている。ロードウエイはロードがヒットするデータキャッシュのウエイである。
【０００６】
実施形態においては、プロセッサは、データキャッシュと、データキャッシュに結合されるロード／ストアユニット（ＬＳＵ）とを備えている。ＬＳＵはキューを備えており、キュー内の各エントリは、データキャッシュにアクセスしたがリタイヤしなかった異なるロードに割り当てられている。ＬＳＵはキューに結合される制御ユニットを更に備えており、制御ユニットはデータキャッシュの内容が変化したときにキューにおいて示される各ロードのデータキャッシュヒット状態を更新するように構成されている。ＬＳＵはプロセッサによって受け取られるスヌープ動作に対応するスヌープインデックスを受け取るように結合されており、また制御ユニットは、キューの第１のエントリ内の第１のロードに対するスヌープヒットを少なくとも以下の２つの場合に検出するように構成されている：（i）スヌープインデックスが第１のエントリ内にストアされているロードインデックスに一致することと、第１のロードのデータキャッシュヒット状態がヒットを示していることと、データキャッシュがスヌープ動作に対するスヌープヒットを検出していることとに応答、及び（ii）スヌープ動作がデータキャッシュ内でヒットするか否かに関係なく、スヌープインデックスがロードインデックスに一致することと、第１のロードのデータキャッシュヒット状態が非ヒットを示していることとに応答。
【図面の簡単な説明】
【０００７】
以下の詳細な説明は添付の図面を参照する。
【０００８】
【図１】図１はプロセッサの１つの実施形態のブロック図である。
【０００９】
【図２】図２はロードの実行の間におけるプロセッサの１つの実施形態の動作を示すフローチャートである。
【００１０】
【図３】図３はスヌープのためのプロセッサの１つの実施形態の動作を示すフローチャートである。
【００１１】
【図４】図４はスヌープのためのプロセッサの１つの実施形態の動作を示す真理値表である。
【００１２】
【図５】図５はロードキュー内のロードをモニタリングするプロセッサの１つ実施形態の動作を示すフローチャートである。
【００１３】
【図６】図６はロードキュー内のロードをモニタリングするプロセッサの１つの実施形態の動作を示す真理値表である。
【００１４】
本発明が種々の修正及び代替的な形態を許容し得る一方で、その具体的な実施形態が例示の目的で図面に示されており、ここに更に詳細に説明されることになる。しかしながら、図面及びそれに対する詳細な説明は、開示された特定の形態に本発明を限定することを意図しているのではなく、むしろ添付の特許請求の範囲により画定されるような本発明の精神及び範囲内にある全ての修正、均等なもの及び代替案を網羅する意図であることが理解されるべきである。
【発明を実施するための形態】
【００１５】
１つの実施形態においては、プロセッサのロード／ストアユニット（ＬＳＵ）は複数のエントリを有するロードキューを実装している。各エントリは異なるロードに割り当てられ、当該エントリが有効であると示されている場合には、当該ロードは、既にプロセッサのデータキャッシュにアクセスしているが、その結果をプロセッサのアーキテクトされた(architected)状態（例えば命令の行き先であるアーキテクトされたレジスタ）に委ねることによってリタイヤされてはいない。
【００１６】
データキャッシュは有限な記憶装置であり、その内部においては幾つかのロード及びストアがミスするかもしれない。メモリ動作によってアクセスされるデータがアクセスに際してキャッシュにストアされる場合には、メモリ動作はキャッシュ内で「ヒット」であり、またメモリ動作によってアクセスされるデータがアクセスに際してキャッシュにストアされない場合には、メモリ動作は「ミス」である。ロードがデータキャッシュをミスした場合、当該データは典型的には、ミスしているキャッシュラインをメモリから読み出すと共にそれをキャッシュにストアするキャッシュフィル(cache fill)動作を用いてキャッシュ内にロードされる。データは「キャッシュライン」と称される単位でキャッシュ内にストアされ、キャッシュラインはキャッシュ内に割り当てられまた割り当てを解除される記憶である最小数の連続したバイトである。
【００１７】
ＬＳＵはデータキャッシュアクセスの間におけるロードのヒット／ミス結果と共にロードキュー内のロードのデータキャッシュヒット状態を初期化することができる。ＬＳＵは次いで、データキャッシュ内容が変化するのにつれて（ロードがキュー内にまだ示されており従ってリタイヤしていない間に）、割り当てられたキューエントリ内のロードのデータキャッシュヒット状態を追跡することができる。例えば、ロードはアクセスのときのキャッシュヒットであるが、そのロードによってヒットされているキャッシュラインが無効である場合、割り当てられたロードキューエントリ内のデータキャッシュヒット状態は、「ヒット」から「非ヒット」に変化させられてよい。キャッシュラインは、例えば他のキャッシュラインのキャッシュフィル(cache fill)によって上書きされるときに無効にされてよく、又はキャッシュフィルにおいて供給されるキャッシュラインに対して可能性のあるエイリアス(aliases)を排除するための逆探索(back probe)に起因して無効にされてよい。幾つかの実施形態では、ＬＳＵはまたキャッシュフィルそれら自体を追跡することもでき、またロードによってアクセスされているキャッシュラインがフィル内のキャッシュに書き込まれる場合には、ロードのデータキャッシュヒット状態を「非ヒット」から「ヒット」に変更することができる。そのような実施形態においては、ヒット／ミス状態は常に正確に知られているので、「非ヒット」状態は「ミス」であってよい。他の実施形態は、ヒットへの最初のデータキャッシュアクセスに際してデータキャッシュをミスしたロードのデータキャッシュヒット状態を更新しなくてよい。そのような場合には、「非ヒット」のデータキャッシュヒット状態は、当該ロードがヒットに対して知られていないことを示す。それはミスであってよく、又はヒットであってよい（例えば当該ロードがデータキャッシュにアクセスした後に生じるキャッシュフィルに起因して）。別の見方をすると、「非ヒット」状態は、ロードのキャッシュヒット／ミス状態が未知であることを示している。いずれの場合においても、「ヒット」状態はロードがその時点でキャッシュヒットであることを示している。尚、キューエントリは実際にはロードそれ自体をストアしていなくてよく、むしろロードに関係するデータ（例えばインデックス、ウエイ、データキャッシュ状態等）をストアしていてよいので、ロードはキューエントリ内に示されているとみなすことができる。ここでの説明はしばしばキュー又はキューエントリ内のロードを参照するが、ロードは実際上エントリ内にストアされているよりはむしろ一般的にはエントリ内に示されていて(represented)よい。
【００１８】
ＬＳＵは、ロードに対するキューエントリ内のデータキャッシュヒット状態及びデータキャッシュ内のスヌープ動作のキャッシュヒット／ミス結果を用いて、スヌープ動作の全てのアドレスをロード動作に応答してアクセスされたアドレス（当該「ロードアドレス」）と比較することなしに、当該ロードに対するスヌープヒット／ミスを検出することができる。より特定的には、ロードキューは、ロードアドレスによって識別されるキャッシュラインをストアするのに望ましいデータキャッシュ内の単一又は複数のエントリを特定するロードアドレスの一部分をストアしてよい。ロードアドレスのこの一部分は「インデックス」と称される。また、セットアソシアティブ(set associative)データキャッシュに対してキャッシュヒットが検出される場合には、その内部でロードがヒットする「ウエイ(way)」もまたストアされてよい。「ウエイ」はどの望ましい記憶装置位置（当該「セット」）が実際にキャッシュラインをストアしているかを特定する。所与のロードに対するデータキャッシュヒット状態がヒットであり、その所与のロードに対するキューエントリ内のロードインデックスがスヌープアドレスの対応する一部分（当該「スヌープインデックス」）に一致し、スヌープ動作がデータキャッシュ内でヒットし、且つデータキャッシュ１８におけるスヌープ動作によるウエイヒットがキューエントリ内のロードウエイに一致する場合には、スヌープ動作はその所与のロードにおいてスヌープヒットである。その所与のロードのデータキャッシュヒット状態がヒットであり、且つ前述した任意の他のファクタが真でない場合には、スヌープ動作はその所与のロードをミスすることがわかっている。従って、正確なスヌープヒット結果は、ヒットのデータキャッシュヒット状態を有するロードに対して計算することができる。多くのロードはデータキャッシュ内で多くのワークロードに対してヒットするから、結果は完全アドレス比較が実行された場合の解に近似するであろう。
【００１９】
データキャッシュヒット状態がヒットしない場合には、スヌープインデックスはロードのキューエントリ内のロードインデックスと比較されてよい。インデックス一致はスヌープヒットとして取り扱われてよい。スヌープヒットは不正確ではあろうが、推定されるスヌープヒットに対して訂正動作をとることによって、機能性（性能のみ）に影響を及ぼさないであろう。したがってこれらの場合には、正確な結果が生成される。
【００２０】
スヌープヒットがロードで検出される場合（且つ他のプロセッサ又はスヌープしているプロセッサ以外の他の構成要素によるストアにスヌープが応答する場合）において、ロードがロードキュー内で未処理の最も古いロードでないときには、強いメモリ順序の違反が起こった可能性がある。１つの実施形態においては、各エントリは、ロードが最同期させられるべきことを表示するように設定されることが可能な再同期表示（例えば再同期ビット）を含む。再同期は一般的に、ロードのキャッシュアクセスとロードデータをその目的地へ転送することとを繰り返すことと、ロードに依存する少なくともそれらの動作を再実行することとを参照してよい。検出されたスヌープヒットを有していたロードを繰り返すことによって、修正されたデータ（スヌープを生じさせた動作によってロードデータが修正されたものとする）を転送することが可能になると共に、従属命令の新たな結果を生成することが可能になる。このように、ロードはストアの後に発生したものと見られる。また、ロードキュー内の先行するロードの前にストアが発生し（例えば先行するロードがキャッシュミスである）、且つ先行するロードに関してスヌープヒットロードが異なる順序で実行された場合には、スヌープヒットロードは、再同期を介して先行するロードの順序で実行されたものと見られる。このように、強い順序を維持することができる。
【００２１】
再同期は任意のやり方で実行されてよい。例えば、再同期ロード動作の後の各動作はフラッシュされて(flushed)よく、またリフェッチされた（又はフェッチ／デコード／スケジュールユニット１２内のスケジューリングハードウエア内にまだストアされている場合には、再スケジューリングされた）対応する命令もフラッシュされてよい。代替的には、スケジューラ内で従属性チェイン(dependency chains)が検出される場合には、正確な結果を生成するために従属命令のみが再スケジューリングされてよい。
【００２２】
以下に説明される実施形態はセットアソシアティブデータキャッシュ実装を用いることができる。しかし、他の実施形態では直接マッピングのデータキャッシュ実装が用いられてもよい。直接マッピングの実装に対しては、「ウエイ」比較は除外されてよい。ロードインデックスがスヌープインデックスに一致する場合、スヌープヒットが生じているかどうかを決定するためにキャッシュスヌープヒット結果及びデータキャッシュヒット状態を用いることができる（例えば、スヌープキャッシュがヒットすると共にヒットのデータキャッシュヒット状態がスヌープヒットを示すことと、スヌープキャッシュがミスすると共にヒットのデータキャッシュヒット状態がスヌープヒットを示していないこと）。データキャッシュヒット状態が「非ヒット」である場合には、インデックス比較における一致は、データキャッシュ内のスヌープ／ミス結果とは無関係に、スヌープヒットとして取り扱われてよい。
【００２３】
スヌープ動作は一般的にキャッシュコヒーレンスプロトコルの一部としてプロセッサと通信する任意の動作であってよく、それによりプロトコルに従って操作されているデータの任意のキャッシュされたコピーは、操作されたデータに対してコヒーレントであり続けることが確実になる。例えば、幾つかのプロトコルは、コヒーレンス点（例えばキャッシュラインのホームノード、メモリ制御器等）からの明示的探索命令(explicit probe commands)の送信を含んでいてよく、そしてプロセッサは探索命令に応答してスヌープすると共に探索応答を提供してよい。バスベース(bus-based)実装においては、探索命令は定義されたバスサイクルであってよく、また探索応答はバスサイクルの応答フェーズにおいて送信されてよい。パケットベースの実装又は点対点（point-to-point）の実装においては、探索及び探索応答の各々は複数のパケット又は複数の点対点命令であってよい。他のプロトコルにおいては、他のプロセッサによって開始される動作（例えば読み出し又は書き込み動作）それら自体は、それらのプロセッサが結合される相互接続(interconnect)からスヌープされてよく、またスヌープしているプロセッサは、スヌープされた読み出し／書き込み動作及びアドレスをスヌープした結果に基いて適切な動作をとることができる。１つの実施形態においては、キャッシュラインを無効にするスヌープ動作は、ロードキューに対して照合される。そのようなスヌープ動作は、キャッシュライン（例えば１つ以上のストアを伴う）内の対応するデータを変化させることを試みている他のプロセッサの結果であり、あるいはデータ（例えば直接メモリアクセス（ＤＭＡ）書き込みを伴う）を変化させている他の構成要素（例えば周辺デバイス）の結果である。一般的に、スヌープされたキャッシュラインの更新を示す任意のスヌープ動作は、見込まれる再同期を検出するためにロードキューに対してスヌープされてよい。
【００２４】
図１を参照すると、プロセッサ１０の１つの実施形態のブロック図が示されている。図示された実施形態においては、プロセッサ１０は、フェッチ／デコード／スケジュールユニット１２と、アドレス生成ユニット（ＡＧＵ）１４と、トランスレーションルックアサイドバッファ(translation lookaside buffer)（ＴＬＢ）１６と、データキャッシュ１８と、ＬＳＵ２０と、外部インタフェースユニット２２とを含む。ＬＳＵ２０は、ロードキュー（ＬＤＱ）２４と、ロードキュー２４に結合される制御ユニット２６とを含む。ＬＳＵ２０はまた、他の構成要素（例えばストアのためのストアキュー、追加的なロードデータのためのキュー、種々の他のロード／ストア処理回路等）を含んでいてよい。図示された実施形態では、フェッチ／デコード／スケジュールユニット１２はＡＧＵ１４に結合され、ＡＧＵ１４はＴＬＢ１６及びデータキャッシュ１８に結合される。ＴＬＢ１６はデータキャッシュ１８とＬＳＵ２０（更に特定的にはロードキュー２４）とに結合される。データキャッシュ１８はＬＳＵ２０（更に特定的にはロードキュー２４及び制御ユニット２６）と外部インタフェースユニット２２とに結合され、外部インタフェースユニット２２は更にＬＳＵ２０（更に特定的には制御ユニット２６及びロードキュー２４）に結合される。
【００２５】
フェッチ／デコード／スケジュールユニット１２は一般的には、命令をフェッチし、各命令を１つ以上の実行されるべき動作に復号化し、そしてプロセッサ１０による実行のための動作をスケジューリングする回路を含んでいてよい。種々の実行ハードウエアが非ロード／ストア動作に対して設けられていてよい（例えば整数、浮動小数点、マルチメディア等、図１には図示せず）。フェッチ／デコード／スケジュールユニット１２は任意の所望の構造及び動作を備えていてよい。例えばフェッチ／デコード／スケジュールユニット１２は、予約位置／並び換え(reservation station/reorder)バッファ構成又は集中型スケジューラ構成を備えていてよい。フェッチ／デコード／スケジュールユニット１２は名前を変更するレジスタを必要に応じて実装していてよい。フェッチ／デコード／スケジュールユニット１２は命令キャッシュを備えていてよく、また命令キャッシュミスに対するキャッシュフィル(cache fills)を送信するために外部インタフェースユニット２２に結合されていてよい。
【００２６】
ロード及びストアに対して、フェッチ／デコード／スケジュールユニット１２はＡＧＵ１４による実行のための動作をスケジューリングすることができる。ＡＧＵ１４はロード／ストア動作のアドレスオペランドを受け取ることができ、またロード／ストア動作のバーチャルアドレス（ＶＡ）を生成することができる。アドレスオペランドはフェッチ／デコード／スケジュールユニット１２から供給されてよく、あるいはオペランドデータを転送している他の実行ユニットからバイパスされてよい。他の実施形態では２つ以上のＡＧＵ１４があってよい。ＡＧＵ１４はＴＬＢ１６及びデータキャッシュ１８に対してバーチャルアドレスを供給することができる。データキャッシュ１８はバーチャルアドレスを用いてキャッシュルックアップ処理を開始することができる（例えばトランスレートされていないバーチャルアドレスからインデックスビットが取り出されてよい）。ＴＬＢ１６はバーチャルアドレスを物理的アドレス（ＰＡ）にトランスレートすることができ、またヒット／ミスを検出するためのタグ比較のために物理的アドレスをデータキャッシュ１８へ供給することができる。また、物理的アドレスはＬＤＱ２４へ供給されてよく、ＬＤＱ２４は対応するロードに割り当てられたロードキューエントリ内の少なくともインデックスをストアする。インデックスは図１に示されるロードキュー２４エントリ内にＩｄｘフィールドとして示されている。
【００２７】
ロードキューエントリは任意の所望のやり方でロードに割り当てられていてよい。１つの実施形態においては、対応するロードがフェッチ／デコード／スケジュールユニット１２によってスケジューリングされ又は復号化されるときに、エントリが割り当てられてよい。代替的には、エントリは実行中にＬＳＵ２０によって受け取られたまま割り当てられてよい。任意の割り当てスキームが用いられてよい。
【００２８】
データキャッシュ１８はタグ比較を完了することができ、またキャッシュヒット／ミス結果の信号を制御ユニット２６へ送ることができる（図１における「キャッシュヒット」信号）。データキャッシュ１８はまた、ヒットしているウエイ(hitting way)をロードキュー２４へ供給することができる（図１における「キャッシュウエイ」及びロードキュー２４エントリ内に示されるウエイ(Way)フィールド）。制御ユニット２６はロードに割り当てられたロードキュー２４エントリに対してウエイを書き込むことができる。１つの実施形態では、キャッシュウエイはウエイを示すためにワンホット符号化(one-hot encoded)されてよい。そのような実施形態においては、ウエイはミスを示す一連のゼロビットで供給されてよく、制御ユニット２６はロードキューエントリに、データキャッシュ１８によって供給されたキャッシュウエイをヒット／ミス信号とは無関係なエントリのウエイフィールド内にストアさせることができる。制御ユニット２６はまた、キャッシュヒット又はキャッシュミスのいずれが検出されたかに応答して、ロードに対するデータキャッシュヒット状態（図１においてはヒット(Hit)ビットとして示されているが、データキャッシュヒット状態の任意の表現が他の実施形態において用いられ得る）を初期化することができる。例えばヒットビットは、ヒットを示すのに１に設定されまた非ヒットを示すのにゼロ（又はクリア）に設定されてよい（あるいはその逆）。エントリが有効か否かを示す有効ビット及び、ロードに対して再同期化が実行されるべきか否か（検出されたスヌープヒットに起因して）を示す再同期化ビット(resync bit) もまた供給される。ロード又はロードキュー２４内に示されている最も古いロードがリタイヤされたときに、プロセッサ１０は再同期化を実行してよい。例えば、ロードに対して再同期化させる信号を制御ユニット２６がフェッチ／デコード／スケジュールユニット１２へ送ることができる。
【００２９】
１つの実施形態においては、ＬＳＵ２０は正しく整列されていない(misaligned)ロードも同様に処理することができる。一般に、ロードを実行するために少なくとも２つの非重複アクセスが要求される場合、ロードは正しく整列されていない。ミスアライメントは任意の所望の手法で明確化(defined)されてよい。例えば、ロードが２つの異なる（一般的にはメモリ内で連続的な）キャッシュライン内のバイトにアクセスする場合、そのロードは正しく整列されていない可能性がある。当該ロードは２つのデータキャッシュアクセスを用いて２つのキャッシュライン内のバイトにアクセスすることができる。他の実施形態は他の境界を用いて正しく整列されていないロードを明確化することができる。
【００３０】
正しく整列されていない(misaligned)（ＭＡ）ビットは正しく整列されていないロードに割り当てられたキューエントリ内に設定することができ、またその正しく整列されていないロードの第２のアクセスのためのインデックスがエントリのＩｄｘ２フィールド内にストアされてよい。即ち、Ｉｄｘフィールドは正しく整列されていないロードの第１の部分のインデックスをストアすることができ、またＩｄｘ２フィールドはその正しく整列されていないロードの第２の部分のインデックスをストアすることができる。幾つかの実施形態では、データキャッシュヒット状態及びヒットしているウエイは、正しく整列されていないロードの後半部分に対して追跡されて(tracked)よい。図示される実施形態では、インデックスのみがストアされ、また正しく整列されていないロードの後半部分は、データキャッシュヒット状態がヒットしていないかのように取り扱われる。正しく整列されていないロードは比較的に不定期なものであろうし、従って正しく整列されていないロードの後半部分に対して不正確に再同期することによるいかなる性能低下も顕著でないことが期待される。
【００３１】
キュー２４は任意の所望の手法で構成され得る。例えば１つの実施形態においては、Ｉｄｘ、ウエイ(Way)、及びＩｄｘ２のフィールドは、図１に示されるように連想メモリ(content addressable memory)（ＣＡＭ）として実装可能である。キュー２４の残りはランダムアクセスメモリ（ＲＡＭ）であってよく、又は１つ以上のレジスタ、フロップ、若しくは他のクロックされる記憶デバイス内に実装されてよい。Ｃａｍ、Ｒａｍ、レジスタ、フロップ、及び／又は他のクロックされる記憶デバイスの任意の組み合わせが種々の実施形態において用いられてよい。Ｉｄｘ、ウエイ、及びＩｄｘ２のフィールドをＣＡＭとして実装することにより、それらのフィールドを、スヌープヒットを検出するために複数のスヌープインデックス及び複数のスヌープウエイと照合し、並びにデータキャッシュヒット状態を維持するために複数のフィル／フィルエイリアス(fill/fill alias)インデックス及びウエイと照合することが可能になる。ＣＡＭヒット／ミス結果は制御ユニット２６へ供給されてよい。
【００３２】
特にロードがデータキャッシュ１８内のヒットとして最初に検出される場合、そのロードによってヒットされたキャッシュラインは次いで無効にされてよい（スヌープ動作以外によって）。例えばキャッシュラインは、キャッシュフィル動作において供給される異なるキャッシュラインをストアするために強制退去させられて(evicted)よい。外部インタフェースユニット２２は、フィルを実行するためにフィルアドレスをデータキャッシュ１８へ供給することができる。外部インタフェースユニット２２はまた、キャッシュフィルのインデックスをロードキュー２４へ供給することができる（図１におけるスヌープ／フィルＩｄｘ）。データキャッシュ１８はどのウエイがフィルによって書き込まれている最中かを表示することができる（図１におけるスヌープ／フィルウエイ）。外部インタフェースユニット２２は、動作が制御ユニット２６及びデータキャッシュ１８に対するスヌープ／フィルＣｔｌインタフェースを用いるフィルであることを表示することができる。フィルインデックスがＩｄｘフィールドに一致し、フィルウエイがウエイフィールドに一致し、且つデータキャッシュヒット状態が所与のエントリに対するヒットを示している場合には、制御ユニット２６はデータキャッシュフィル状態を更新して当該所与のエントリ内の非ヒットを表示してよい。
【００３３】
１つの実施形態においては、データキャッシュ１８はアクセスの間にデータキャッシュに対してヒットしているウエイを予測するためにウエイ予測を表示することができる。アクセスが、予測されたウエイ内のヒットでない場合には、ミスとして信号が出力され、データキャッシュ１８はキャッシュフィルを開始することができる。アクセスは他の（予測されていない）ウエイ内でヒットする可能性がある。その可能性を計上するために、フィルがデータキャッシュ１８に書き込まれることになるときに、データキャッシュ１８は各ウエイに対して「逆探索(back probes)」を実行して潜在的に二重の(duplicate)（エイリアス(alias)）キャッシュラインを無効にしてよい。１つの実施形態においては、フィルデータがデータキャッシュ１８に書き込まれる準備ができる前に、外部インタフェースユニット２２はフィルアドレスを少なくともＮクロック送信することができ、Ｎはデータキャッシュ１８内のウエイ数に等しいかそれより大きい整数である。Ｎクロックの間、潜在的なエイリアスキャッシュラインを除去するために逆探索が実行されてよい。ロードキュー２４の複数のＩｄｘフィールドに対して照合するためにデータキャッシュ１８は各逆探索に対してフィルエイリアスインデックス（図１におけるフィルエイリアスＩｄｘ）を供給することができ、またスヌープ／フィルウエイは逆探索のウエイを示すことができる。ロードキュー２４エントリ（インデックス及びウエイ）で一致が検出され、逆探索がデータキャッシュ内でヒットし、且つエントリに対するデータキャッシュヒット状態がヒットする場合には、制御ユニット２６はデータキャッシュヒット状態を更新して当該エントリ内にヒットが無いことを表示してよい。
【００３４】
データキャッシュヒット状態モニタリングが実施中であることを前提として、ロードにおけるスヌープヒットの検出はロードキュー２４内で実行可能である。外部インタフェースユニット２２は、スヌープインデックスをロードキュー２４へ供給することができ（図１におけるスヌープ／フィルＩｄｘ）、スヌープが発生していることを示すことができ（図１におけるスヌープ／フィルＣｔｌ）、そしてスヌープアドレスをデータキャッシュ１８へ供給することができる（図１におけるスヌープ／フィルＡｄｄｒ）。データキャッシュ１８は、スヌープヒット又はミスの信号を制御ユニット２６へ送ることができ（図１におけるスヌープヒット）、そしてスヌープによるウエイヒットをロードキュー２４へ供給することができる（図１におけるスヌープ／フィルウエイ）。スヌープヒットがデータキャッシュ１８で検出され、スヌープインデックスがＩｄｘフィールドに一致し、スヌープウエイがウエイフィールドに一致し、且つデータキャッシュヒット状態がヒットする場合には、スヌープヒットが当該ロードに対して検出される。データキャッシュヒット状態が非ヒットである場合においてＩｄｘフィールドがスヌープインデックスに一致するときは、キャッシュにおけるスヌープヒット／ミスとは無関係に、ロードに対してスヌープヒットが検出される。
【００３５】
尚、インデックス、ウエイ、及びヒットの表示は図１において別個の信号パスとして図示されているが、これらのパスは共有パスであってもよい。例えば、所与のインデックスの１つの種類（例えばフィルエイリアスインデックス）と他の種類（例えばスヌープ／フィルインデックス）とが同時に供給され得ない場合には、共有パスが用いられてよい。同様に、異なる種類のウエイが同時に供給され得ない、又は異なる種類の２つのヒットが同時に信号出力され得ない場合に、共有のウエイ／ヒット信号が用いられてよい。
【００３６】
本明細書は一般的に種々の動作を実行するように構成されている制御ユニットを参照する（又は種々の動作を実行する制御ユニットを単に参照する）。一般的には、制御ユニットはそれらの動作を実施する回路を備えている。その回路は、組み合わせ論理、状態マシン、パイプライン、クロックされる記憶デバイス、例えばレジスタ、フロップ、ラッチ等の任意の組み合わせを備えていてよい。同様に、ある動作を実行するように構成されるものとして又は単にある動作を実行するものとして説明される任意の他のユニット又は構成要素は、その動作を実施する回路を備えていてよい。
【００３７】
図２を参照すると、ロードの実行の間におけるプロセッサ１０の１つの実施形態の動作を示すフローチャートが示されている。プロセッサ１０（そしてより特定的にはＬＳＵ２０、そして更に特定的には制御ユニット２６）は、図２に示される動作を実施する回路を備えていてよい。理解を容易にするためにブロックは特定の順序で図示されているが、他の順序が用いられてもよい。また、ブロックは組み合わせ論理回路内で並列に実行されてよい。ブロック、ブロックの組み合わせ、及び／又はフローチャートは、全体として多重化クロックサイクルでパイプライン化されてよい。
【００３８】
ロードはデータキャッシュ１８にアクセスしてよく、データキャッシュ１８はロードのヒット／ミスの信号を出力することができる。ロードがキャッシュヒットである場合（判断ブロック３０、「はい(yes)」行程）には、制御ユニット２６は、ヒットしているウエイをロードに割り当てられたロードキュー２４エントリへ書き込んでよく（ブロック３２）、そしてヒットビットを設定してよい（ブロック３４）。ロードがキャッシュヒットでない場合（判断ブロック３０、「いいえ(no)」行程）には、制御ユニット２６はヒットビットをクリアしてよい（ブロック３６）。いずれの場合においても、制御ユニット２６は、ロードに割り当てられたロードキューエントリのＩｄｘフィールドにロードインデックスを書き込んでよく（ブロック３８）、エントリにおける有効ビットを設定してよく、そしてエントリ内の再同期ビットをクリアしてよい（ブロック４０）。
【００３９】
ロードが正しく整列されていない場合（判断ブロック４２、「はい」行程）には、制御ユニット２６は、第２のインデックス（正しく整列されていないロードの後半部分に対する）を、ロードに割り当てられたロードキューエントリのＩｄｘ２へ書き込んでよく（ブロック４４）、そしてエントリ内にＭＡを設定してよい（ブロック４６）。そうでない場合（判断ブロック４２、「いいえ」行程）には、制御ユニット２６はエントリ内のＭＡビットをクリアしてよい（ブロック４８）。
【００４０】
図３はスヌープ動作のためのプロセッサ１０の１つの実施形態の動作を示すフローチャートである。プロセッサ１０（そしてより特定的にはＬＳＵ２０、そして更に特定的には制御ユニット２６）は、図３に示される動作を実施する回路を備えていてよい。理解を容易にするためにブロックは特定の順序で図示されているが、他の順序が用いられてもよい。また、ブロックは組み合わせ論理回路内で並列に実行されてよい。ブロック、ブロックの組み合わせ、及び／又はフローチャートは、全体として多重化クロックサイクルでパイプライン化されてよい。図３に示される動作は、ロードキュー２４における各有効エントリに対して並列して起こってよい。
【００４１】
エントリにおいてヒットビットが設定される場合（判断ブロック５０、「はい」行程）において、スヌープがキャッシュヒットであり且つスヌープインデックス及びウエイ（ヒットに対する）がロードインデックス及びロードウエイに一致するときには、データキャッシュヒット状態はヒットであり、従ってスヌープヒットが生じる。そうでない場合には、ロードキューにおいてスヌープヒットは検出されない。従って、スヌープがキャッシュヒットであり（判断ブロック５２、「はい」行程）且つスヌープインデックス及びスヌープウエイがエントリ内のインデックス（Ｉｄｘ）及びウエイ（Ｗａｙ）に一致する場合（判断ブロック５４、「はい」行程）には、制御ユニット２６はエントリ内に再同期（Ｒ）ビットを設定してよい（ブロック５６）。
【００４２】
エントリにおいてヒットビットがクリアである場合（判断ブロック５０、「いいえ」行程）には、データキャッシュヒット状態はヒットしない。従って、スヌープインデックスがロードインデックスに一致する場合（判断ブロック５８、「はい」行程）にはスヌープヒットが推定され、制御ユニット２６はエントリ内に再同期ビットを設定する（ブロック５６）。ロードが正しく整列されていない場合（エントリにおいてＭＡビット設定、判断ブロック６０、「はい」行程）において、第２のインデックス（Ｉｄｘ２）がスヌープインデックスに一致するとき（判断ブロック６２、「はい」行程）には、スヌープヒットが推定され、制御ユニット２６はエントリ内に再同期ビットを設定する（ブロック５６）。
【００４３】
図４は図３におけるフローチャート形態に示される動作を示す真理値表である。真理値表６４は、エントリのＩｄｘフィールドに一致することに基くＲビットの設定を示している。ヒットビット列はエントリ内のヒットビットの状態を示し、キャッシュヒット列はスヌープがキャッシュヒットか否かを示し、インデックス一致列はＩｄｘフィールドがスヌープインデックスに一致するか否かを示し、ウエイ一致列はウエイフィールドがスヌープウエイに一致するか否かを示し、そしてＲビット列は結果としてのＲビットの状態を示している。「ｘ」は「無関係(don’t care)」状態を示す。尚、Ｒビットは固定的(sticky)であり、この実施形態においては、一旦Ｒビットが設定されたならば、そのＲビットはエントリが他のロードに再割り当てされるまで（又は少なくともエントリが無効になるまで、例えばロードがリタイヤされ、さもなければロードキュー２４から除去されるまで）その設定を維持される。真理値表６６は正しく整列されていないロードに対するＲビットの設定を示している。ＭＡビット列はエントリ内のＭＡビットを示し、インデックス２一致列はスヌープインデックスがエントリのＩｄｘ２フィールドに一致するか否かを示し、そしてＲビット列はここでも結果としてのＲビットを示している。
【００４４】
図５はロードキュー内で示されるロードに対するデータキャッシュヒット状態（この場合、ヒットビットで示される）をモニタリングするためのプロセッサの１つの実施形態の動作を示すフローチャートである。プロセッサ１０（そしてより特定的にはＬＳＵ２０、そして更に特定的には制御ユニット２６）は、図５に示される動作を実施する回路を備えていてよい。理解を容易にするためにブロックは特定の順序で図示されているが、他の順序が用いられてもよい。また、ブロックは組み合わせ論理回路内で並列に実行されてよい。ブロック、ブロックの組み合わせ、及び／又はフローチャートは、全体として多重化クロックサイクルでパイプライン化されてよい。図５に示される動作は、ロードキュー２４における各有効エントリに対して並列して起こってよい。
【００４５】
データキャッシュ１８による逆探索を介してフィルエイリアスが探索されており（判断ブロック７０、「はい」行程）、ヒットビットがエントリ内に設定されており（判断ブロック７２、「はい」行程）、逆探索がキャッシュヒットであり（判断ブロック７４、「はい」行程）、そしてフィルエイリアスインデックス及びヒットしているウエイがそれぞれエントリのＩｄｘ及びウエイのフィールドに一致する場合（判断ブロック７６、「はい」行程）には、エントリ内で示されるロードによるキャッシュラインヒットは、逆探索によって無効にされている。制御ユニット２６は従って、ヒットビットをクリアしてよい（このようにデータキャッシュヒット状態は非ヒットに設定される）。ヒットビットは設定されているが（判断ブロック７２、「はい」行程）、逆探索がキャッシュミスである場合（判断ブロック７４、「いいえ」行程）、又はインデックス及びウエイの一致の少なくとも１つが検出されない場合（判断ブロック７６、「いいえ」行程）には、ヒットビットは影響を受けない。同様にヒットビットがクリアである場合（判断ブロック７２、「いいえ」行程）には、ヒットビットは影響を受けない。尚この場合には、同じキャッシュラインが他のウエイに書き込まれてよいように、エイリアスは無効にされている。他の実施形態は、ヒットビットをクリアする代わりにキャッシュラインで満たされる(filled)ウエイを示すために、エントリのウエイフィールドを更新してよい。
【００４６】
キャッシュフィルが完了している場合（判断ブロック８０、「はい」行程）において、インデックス及びウエイがフィルインデックス及びフィルウエイに一致するとき（判断ブロック８２、「はい」行程）には、フィルに対してデータキャッシュ１８によって示されるキャッシュヒット状態とは無関係に、ロードによるキャッシュラインヒットは強制退去させられる。その結果ヒットビットはクリアされる（ブロック８４）。それ以外の場合には、ヒットビットは影響を受けない。
【００４７】
図６は図５におけるフローチャートに示される動作の真理値表を示している。真理値表９０は逆探索に対するエイリアス一致を検出することを示している。ヒットビット列はエントリ内のヒットビットの状態を示し、キャッシュヒット列は逆探索がキャッシュヒットであるか否かを示し、インデックス一致列はＩｄｘフィールドがフィルエイリアスインデックスに一致するか否かを示し、ウエイ一致列はウエイフィールドがフィルウエイに一致するか否かを示し、そしてエイリアス一致列はエイリアス一致が検出されているか否かを示している。「ｘ」は「無関係」状態を示す。真理値表９２はキャッシュフィルそれ自体に対するフィル一致を検出することを示している。ヒットビット、インデックス一致、及びウエイ一致の列は真理値表９０と同様であり、フィル一致列はフィル一致が検出されているか否かを示している。最後に真理値表９４は、ヒットビットの最新の状態を示すヒットビット列、表９０及び９２からのエイリアス一致及びフィル一致の結果、並びに新たなヒットビット値を含む。
【００４８】
尚、図２〜６の説明は、ヒットビットを伴うデータキャッシュヒット状態を示す特定の実施形態を参照している。しかし、他の実施形態は所望の形態を伴うデータキャッシュヒット状態を示してよい。
【００４９】
上述の開示を完全に理解することによって、多くの変形及び修正が当業者にとって明らかになろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含することが意図されている。
【産業上の利用可能性】
【００５０】
この発明は概してプロセッサの分野に適用可能である。
【図１】
0005669734.tif 000002
【図２】
0005669734.tif 000003
【図３】
0005669734.tif 000004
【図４】
0005669734.tif 000005
【図５】
0005669734.tif 000006
【図６】
0005669734.tif 000007