(57)【要約】【課題】少なくとも１つの機能ユニットと、メモリ・アドレスを生成するアドレス・ジェネレータとを含むパイプラインを有する計算回路のためのメモリ・システムを提供すること。【解決手段】コヒーレント・キャッシュ・メモリは、アドレス・ジェネレータに応答し、メモリ・アドレスによってアドレス指定される。キャッシュ・メモリは、キャッシュ・メモリ出力を生成することができる。ノンコヒーレントなディレクトリレス連想メモリは、アドレス・ジェネレータに応答し、メモリ・アドレスによってアドレス指定可能である。連想メモリは、キャッシュ・メモリから入力データを受信する。連想メモリは、機能ユニットに送信される連想メモリ出力を生成することができる。比較回路は、連想メモリ出力をキャッシュ・メモリ出力と比較し、連想メモリ出力がキャッシュ・メモリ出力と等しくない場合は不一致信号をアサートする。【選択図】図１
2004133935.tif 000002
【特許請求の範囲】
【請求項１】
　少なくとも１つの機能ユニットを含んでいるパイプラインを有する計算回路のためのメモリ・システムであって、
　ａ．メモリ・アドレスを生成するアドレス・ジェネレータと、
　ｂ．キャッシュ・ディレクトリが関連付けられており、前記メモリ・アドレスによってアドレス指定されて、キャッシュ・メモリ出力を生成するコヒーレント・キャッシュ・メモリと、
　ｃ．前記キャッシュ・メモリから入力データを受信し、前記メモリ・アドレスによってアドレス指定されて、前記機能ユニットに送信される連想メモリ出力を生成する、ノンコヒーレントなディレクトリレス連想メモリと、
　ｄ．前記連想メモリ出力を前記キャッシュ・メモリ出力と比較し、前記連想メモリ出力が前記キャッシュ・メモリ出力と等しくない場合に不一致信号をアサートする比較回路と
を含むメモリ・システム。
【請求項２】
　前記キャッシュ・メモリ出力が使用可能になるまで一時連想メモリ出力を保持する一時連想メモリ出力バッファをさらに含む請求項１に記載のメモリ・システム。
【請求項３】
　前記不一致信号がアサートされた場合に前記キャッシュ・メモリ出力を前記連想メモリに書き込む回路をさらに含む請求項１に記載のメモリ・システム。
【請求項４】
　パイプラインの機能ユニットにデータを提供する方法であって、
　ａ．メモリ・アドレスによってコヒーレント・キャッシュ・メモリをアドレス指定し、それによってキャッシュ・メモリ出力を生成するステップと、
　ｂ．前記メモリ・アドレスによってノンコヒーレントなディレクトリレス連想メモリをアドレス指定し、それによって連想メモリ出力を生成するステップと、
　ｃ．前記連想メモリ出力を前記機能ユニットに送信するステップと、
　ｄ．前記キャッシュ・メモリ出力を前記連想メモリ出力と比較するステップと、
　ｅ．前記キャッシュ・メモリ出力が前記連想メモリ出力と同一でない場合に前記機能ユニットをディセーブルするステップと
を含む方法。
【請求項５】
　前記キャッシュ・メモリ出力が使用可能になるまで前記連想メモリ出力をバッファに入れるステップをさらに含む請求項３に記載の方法。
【請求項６】
　前記キャッシュ・メモリ出力が前記連想メモリと同一でない場合に前記キャッシュ・メモリ出力を前記連想メモリに書き込むステップをさらに含む請求項３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、コンピュータ・システムに関し、より詳細には、コンピュータの中央処理装置のキャッシュ・システムに関する。
【背景技術】
【０００２】
　多くの現代の電算処理システムは、命令処理能力を高めるためにパイプライン方式のアーキテクチャを有するプロセッサを使用する。理論的には、パイプライン方式のプロセッサは、適切に順序付けられた連続的な命令ストリームが実行されている場合に各マシン・サイクルあたり１つの命令を実行することができる。これは、その命令自体が実行されるべき複数の別個のマイクロ命令を要求する可能性がある場合でも達成される。パイプライン方式のプロセッサは、それぞれが完了するのに１回のマシン・サイクルを必要とする複数の段階に１つの命令の実行を分割することによって動作する。パイプライン方式のプロセッサでは、第１の命令の実際の実行が完了する前に第２の命令の処理を開始することによって、待ち時間は短縮される。実際、任意の所与の時点において複数の命令が、処理の様々な段階にある可能性がある。したがって、システムの命令実行待ち時間全体（一般に、一連の命令が開始された時点とその実行が終了した時点の間の遅延と考えることができる）を大幅に短縮することができる。
【０００３】
　一部の現代のコンピュータ・システムでは、整数命令および事務用命令のストリームは、そのターゲットが次の命令で即座に使用されるような多くのロードを有する。マイクロプロセッサの周波数が高くなるほどパイプラインの深さは増大し、したがってレベル１（Ｌ１）データ・キャッシュのロード・アクセスは多くのサイクルになる可能性があり、その間はいかなる後続の従属命令も停止しなければならない。Ｌ１データ・キャッシュの長いアクセスを軽減するためにレベル０（Ｌ０）キャッシュと呼ばれる付加的な小容量データ・キャッシュが提案されている。一般に、Ｌ０は１サイクルの合計リード・アクセス・タイムを持ち、容量は１〜８ＫＢである。しかし、高周波数のパイプライン方式による設計ではＬ０キャッシュには多くの問題がある。例えば、サイズの小ささと直接マッピングという性質（１ウェイ・アソシアティブ）に由来する高いミス率（３０〜５０％）、別のフル・データ・キャッシュ・レベルが著しく複雑になること、常時使用による高電力消費量、およびライン参照トレーリング・エッジの停止を招く長いライン・フィル時間である。これらの要因の組み合わせが、高周波数の深いパイプラインとあいまって、Ｌ０キャッシュの全面的な破棄をもたらした。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
　したがって、低ミス率、低電力消費、および短いライン・フィル時間の短いリード（lead）アクセス・タイムを有する小さなキャッシュが求められている。
【課題を解決するための手段】
【０００５】
　従来技術の欠点は、一態様では、少なくとも１つの機能ユニットを含んでいるパイプラインを有する計算回路のためのメモリ・システムである本発明によって克服される。アドレス・ジェネレータはメモリ・アドレスを生成する。コヒーレント・キャッシュ・メモリは、アドレス・ジェネレータに応答し、メモリ・アドレスによってアドレス指定される。キャッシュ・ディレクトリはキャッシュ・メモリに関連付けられる。キャッシュ・メモリはキャッシュ・メモリ出力を生成することができる。ノンコヒーレントなディレクトリレス連想メモリは、アドレス・ジェネレータに応答し、メモリ・アドレスによってアドレス指定可能である。連想メモリは、キャッシュ・メモリから入力データを受信する。連想メモリは、機能ユニットに送信される連想メモリ出力を生成することができる。比較回路は、連想メモリ出力をキャッシュ・メモリ出力と比較し、連想メモリ出力がキャッシュ・メモリ出力と等しくない場合に不一致信号をアサートする。
【０００６】
　別の態様では、本発明は、パイプラインの機能ユニットにデータを提供する方法である。コヒーレント・キャッシュ・メモリはメモリ・アドレスによってアドレス指定され、それによってキャッシュ・メモリ出力を生成する。ノンコヒーレントなディレクトリレス連想メモリはメモリ・アドレスによってアドレス指定され、それによって連想メモリ出力を生成する。連想メモリ出力は機能ユニットに送信される。キャッシュ・メモリ出力は連想メモリ出力と比較される。キャッシュ・メモリ出力が連想メモリ出力と同一でない場合、その機能ユニットはディセーブルされる。
【０００７】
　本発明のこれらおよび他の態様は、以下の図面を参照してなされる以下の好ましい実施形態の記述から明らかになろう。当業者には明らかなように、本発明の多くの変形形態および修正形態は、本開示の新規概念の趣旨および範囲を逸脱せずに達成することができる。
【発明を実施するための最良の形態】
【０００８】
　図１に示すように、本発明の一実施形態は、演算論理装置（ＡＬＵ）などの少なくとも１つの機能ユニット１５０を含むパイプラインを有する計算回路のためのメモリ・システム１００である。通常、アドレス・ジェネレータ（ＡＧＥＮ）１１０は、メモリに記憶されているデータにアクセスするために計算回路によって使用されるメモリ・アドレス１１２を生成する。計算回路は、メモリ・アドレス１１２によってアドレス指定可能なコヒーレント・キャッシュ・メモリ１２０（「Ｌ１データ・キャッシュ」とも呼ばれる）を含む。コヒーレント・キャッシュ・メモリ１２０は、再利用される可能性のある最近アクセスされた読取済みデータを記憶するために使用される。（記憶データはＬＢＵＦには保存されない。）キャッシュ・ディレクトリ１２４はキャッシュ・メモリ１２０に関連付けられており、キャッシュ・ヒットまたはキャッシュ・ミスに関する情報を提供する。キャッシュ・メモリ１２０は、機能ユニットが必要としている可能性が一般に高いキャッシュ・メモリ出力１２２を生成する。通常、コヒーレント・キャッシュ・メモリ１２０は、アクセスするのに複数のサイクルを必要とする。キャッシュ・メモリ１２０のアクセスが完了すると、ヒットが汎用レジスタ・ファイル１２６に登録される。
【０００９】
　ノンコヒーレントなディレクトリレス連想メモリ１３０（「ロード・バッファ」または「ＬＢＵＦ」とも呼ばれる）もまた、メモリ・アドレス１１２によってアドレス指定可能である。ノンコヒーレントでディレクトリレスであるという性質により、また比較的小容量で実行ユニットに近接しているという理由から、連想メモリ１３０は１サイクルでアクセスすることができる。連想メモリ１３０は、キャッシュ・メモリ１２０から入力データを受信し、機能ユニット１５０に送信される連想メモリ出力１３２を生成することができる。
【００１０】
　比較回路１４０は、連想メモリ出力１３２をキャッシュ・メモリ出力１２２と比較する。比較回路１４０は、連想メモリ出力１３２がキャッシュ・メモリ出力１２２と等しくない場合に不一致信号１４２をアサートする。ＬＢＵＦ一時レジスタ１３４は、対応するコヒーレント・キャッシュ・メモリ出力１２２が比較回路１４０によって受信されるまで連想メモリ出力１３２をバッファする。不一致信号１４２のアサートによってパイプラインの停止がトリガされることになる。同様に、不一致信号１４２がアサートされると、コヒーレント・キャッシュ・メモリ出力１２２は連想メモリ１３０に書き込まれる。
【００１１】
　Ｌ０に類似したデータ・キャッシュは、一義的に合わせることができるのが従属ロード使用状況だけである場合、概してコヒーレンシー・ルールを無視するように構成できる場合、意図した作業負荷に対するそのヒット率を８０％に近づけることができる場合、ミスによるペナルティがＬ１データ・キャッシュにアクセスするために必要な余分のサイクルだけである場合、およびパイプラインを停止する余分のＬ１データ・キャッシュ読取サイクルを追加せずに１サイクルまたは２サイクルの再ロードを達成することができる場合に、実用的で価値のあるものになり得る。どのようなワードも行アドレス・セレクタすなわちＲＡＳと列アドレス・セレクタすなわちＣＡＳという２レベルのセレクタだけによってアクセスできるように、連想メモリ１３０は十分に小さいサイズのアレイ（例えば、２〜４ＫＢ）であるべきである。連想メモリ１３０のキャッシュ・アドレス・ラッチ自体に遅延のないアドレス生成方式が使用され、最小アドレス・リパワリングが実施されている場合、１つの２ＫＢの連想メモリ１３０がコア・フロア・プランとパイプラインの観点からＡＬＵ／ＡＧＥＮのピアとして扱われるならば、その２ＫＢの連想メモリ１３０はＡＬＵ／ＡＧＥＮユニットと同じタイミング／サイクル・タイムを生成することができる。
【００１２】
　連想メモリ１３０のロード・バッファ使用アルゴリズムは以下のように要約することができる。
４ＫＢロード・フェッチ・バッファ
　ロードを従属的に使用しているため、ラインをフェッチするだけである
　最新の６４ラインのバッファのみをフェッチする
　４つの１６バイトのサブラインを有する６４バイトのライン
　ロード・バッファはノンコヒーレントである
Ｌ１ポート０と並列のロード・バッファのフェッチ
　従属関係のある複数のロードに対して停止抑制手段として動作する
　早期の結果をＲＡ／ＲＢバイパス・レジスタに提供する
　Ｌ１ロード・フェッチのみがレジスタ・ファイルに書き込む（投機的ＬＢＵＦターゲットはレジスタ・ファイルに書き込まない）
　ロード・バッファ・サブラインへの記憶は無視される
基本ロード・タイプだけがロード・バッファにアクセスできる
　符号拡張、バイト反転、ＤＷ横断ロードはない
　ＬＱ、フロート・ロードはない
　ＨＷの位置合わせが要求される
　ロードがこれらの制約に違反すると、ロード・バッファ・ミスが生じる
【００１３】
　連想メモリ１３０は他の進行中のキャッシュ・メモリ１２０のロード・アクセスに干渉しないことが望ましいので、連想メモリ１３０のラインのサイズを小さく保つことが望ましい。図２を参照すると、一実施形態は、機能ユニットあたり１つのポートを使用して（４つの機能ユニットがあると仮定して）、ダブル幅の２つのポート（シングル幅の擬似的な４つのポートと等価）のＬ１データ・キャッシュ１２０方式のベース・キャッシュ２００を使用する。多くの命令セット・アーキテクチャは、１６バイトの４倍長ワードのロード機能を必要とするので、各ポートは１６バイト幅である。ロード・マルチプル、ストリングの移動、数値主体のループ等の一括ロードおよびストリーミング・ロードのケースでは、連想メモリ１３０は無価値でイネーブルされず、４つの読取ポート２１０（簡約化するため、これらのうちの２つのみ示す）が高頻度に使用される。しかし、停止を低減するために連想メモリ１３０ＬＢＵＦが有益な、従属ロードおよびロード使用のケースでは、平均で１サイクルあたり１つ未満のポートがロードに使用される。したがって、従属使用を伴うスカラ・ロードが実行されるとき、残り３つのポートは殆どの場合アイドル状態に保たれる。この場合、単一ロードは４つの読取ポートすべてに並列にアクセスすることが許され、各ポートは合計で６４バイトのラインにアクセスするため異なる連続した１６バイトのサブラインにアクセスする。したがって、後続サイクルでアクセス・バス（またはアレイ）干渉を起こさない単一サイクルのアクセス／再ロードで６４バイトのライン・サイズを達成することができる。２つまたは３つのロードが並列に実行される場合、１つまたは２つのフリーの読取ポートが存在する。これらの場合、残りの１つまたは２つのフリーの１６バイト・ポートだけが連想メモリ１３０へのサブラインをフェッチすることができる（すなわち、合計で３２８または４８８）。これに対処するために、６４Ｂラインの各１６Ｂサブラインは、それが連想メモリ１３０内にあるか否かを示すための別個の有効ビットを有する。６４８というライン・サイズが使用可能な場合でも、直接マップ式の２ＫＢ〜４ＫＢの連想メモリ１３０のヒット率は、恐らく５０〜６０％であり依然として満足ではない。１回のミスあたりおよそ２サイクルのペナルティであれば、得るところはほとんどない。
【００１４】
　図１に戻ると、一般的なＤ形式（有効アドレス＝ベース＋変位）のロードが従属使用と共に生じると、連想メモリ１３０は一般的ケースのキャッシュとしてではなく、停止を解消するための特定ケースのキャッシュとしてのみ使用される。例えば、従属使用ロードの６０％が予測可能性の高い目標値を有する場合（カウンタによるハードウェア監視の実行によって求められるように）、いかなる停止をも排除するために値予測方式を使用してロード・ターゲットの早期値を提供する。この場合、従属使用ロードの残り４０％に関しては、停止を排除するために連想メモリ１３０を使用して、それらをキャッシュする。これもまた、連想メモリ１３０の有効サイズを、９０％近くのヒット率を達成することのできる約４０ＫＢ（１／４０％×１６ＫＢ）にまで増やす。
【００１５】
　図３に示すように、図示する実施形態で使用することができる連想メモリ３００は、行アドレス・セレクタ３１４および列アドレス・セレクタ３１６をアドレス指定するキャッシュ・アドレス・レジスタ３１２を含む。１２ビット幅の連想メモリ・ディレクトリ３１０も、キャッシュ・アドレス・レジスタ３１２によってアドレス指定され、その値を８ウェイ連想コンパレータ３２０に出力する。連想コンパレータ３２０はその出力を列アドレス・セレクタ３１６に供給する。
【００１６】
　連想メモリ１３０の機能には、実装を大幅に簡素化し、またアクセス・パスを大幅に高速化して、より高速なサイクル・タイムやより大きな連想メモリ１３０サイズを可能にするものがある。連想メモリ１３０がコヒーレントに保たれる必要がないということは、連想メモリ１３０がバス論理によってスヌープされる必要がなく、再ロード、更新等からのいかなる困難なサイクル・ウィンドウ・ケースも無視され、連想メモリ１３０が直接マップ（１ウェイ・アソシアティブ）のキャッシュとして実装される場合はＬＢＵＦキャッシュ・ディレクトリが全く必要とされない、ということを意味している。連想メモリ１３０がキャッシュに対してバッファと呼ばれる理由は、このようにノンコヒーレントという性質があるためである。
【００１７】
　連想メモリ１３０にアクセスするすべてのロードは常にＬ１データ・キャッシュ１２０のロード・アクセスも開始しなければならないという要件によって、このノンコヒーレントな簡素化が可能になる。いずれにせよ、この要件は、連想メモリ１３０のミスが発生した際に連想メモリ１３０のラインを即座に再ロードすることを考慮して（後のキャッシュ・メモリ１２０のアクセスで連想メモリ１３０の再ロードを生じさせないためにも）必要とされる。したがって、キャッシュ・メモリ１２０のヒット・アクセスでは、投機的でノンコヒーレントではあるが高速の連想メモリ１３０アクセスよりも（ｎ−１）サイクル後には（ｎはＬ１データ・キャッシュ・アクセスのサイクル数）正しくかつコヒーレントなデータが常に準備されているということになる。この結果、連想メモリ１３０の投機的アクセス・データを、バイパス／転送データとして機能ユニットが即座に使用することができる。また、この投機的アクセス・データは、キャッシュ・メモリ１２０からアクセスされる非投機的データとの比較のために、少なくとも１サイクルの間一時レジスタ１３４にバッファすることができる。
【００１８】
　２つの値が一致した場合、連想メモリ１３０の以前に使用された投機的出力１３２の値は正しかったことになる。これらの値が一致しない場合（すなわち、不一致信号１４２がアサートされた場合）、連想メモリ１３０の投機的出力１３２のデータが正しくなかったことになり、これは既にフェッチされたキャッシュ・メモリ１２０の出力１２２からの再ロードを必要とする連想メモリ・ミスとして扱われる。
【００１９】
　連想メモリ１３０からの正しいアクセス・データは汎用レジスタ・ファイル１２６には一切書き込まれないので、汎用レジスタ・ファイル１２６に追加の書き込みポートを必要としないというさらなる利点をこのシステムは有する。正しいアクセス・データはＡＬＵ１５０等への高速バイパス／転送パス使用されるだけであり、常に正しいキャッシュ・メモリ・データだけがレジスタ・ファイル１２６に書き込まれる。連想メモリ１３０のノンコヒーレントという性質により、そのラインのうちの１つに書き込む可能性のあるストアを無視することもできる。従属ロード使用ケースでは特に、また最適化されたコード環境では一般的に、連想メモリ１３０の記憶データの再アクセスは非常に可能性が低いので、これはパフォーマンスを損なわないもう１つの簡素化である。
【００２０】
　上記の実施形態は説明のための例示としてのみ示したものである。本明細書で開示した特定の実施形態から、本発明から逸脱せずに多くの変更を行うことができることが容易に理解されよう。したがって、本発明の範囲は、上記の具体的に記述された実施形態に限定されるものではなく首記の特許請求の範囲によって規定されるものである。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施形態のブロック図である。
【図２】本発明の一実施形態で使用することができるベースＬ１データ・キャッシュ・ロード・ポート構成を示すブロック図である。
【図３】本発明の一実施形態で使用することができる連想メモリを示すブロック図である。
【符号の説明】
【００２２】
　１１０　アドレス・ジェネレータ（ＡＧＥＮ）
　１１２　メモリ・アドレス
　１２０　コヒーレント・キャッシュ・メモリ（Ｌ１データ・キャッシュ）
　１２４　Ｌ１データ・キャッシュ・ディレクトリ
　１２６　汎用レジスタ・ファイル
　１３０　ノンコヒーレント／ディレクトリレス連想メモリ（ＬＢＵＦ）
【図１】
2004133935.tif 000003
【図２】
2004133935.tif 000004
【図３】
2004133935.tif 000005