(57)【特許請求の範囲】
【請求項１】
キャッシュメモリ内の対応するデータアクセスからタグアクセスを分断する方法であって、
該キャッシュメモリでメモリリクエストを受け取ることであって、該メモリリクエストは、該メモリリクエストに関連しているメモリ位置を特定するアドレスを含む、ことと、
該キャッシュメモリ内のタグアレイから少なくとも１つのタグを検索して、該少なくとも１つのタグと該アドレスのタグ部分とを比較することによってタグアクセスを行い、該アドレスを含むキャッシュラインが該キャッシュメモリに位置しているかどうかを判定する、こととを含み、
該アドレスを含む該キャッシュラインが該キャッシュメモリに位置しているが、該キャッシュラインを含むデータアレイがビジーである結果としてタグルックアップがキャッシュヒットを生じる場合、該方法は、該データアレイがフリーになる後の時間において該データアレイへの該対応するデータアクセスを行うことをさらに包含し、
該メモリリクエストがロード動作用である場合、先行するロード動作の完了を待機することなく、該対応するデータアクセスが行われ、
該メモリリクエストがキャッシュミスを生成するロード動作用である場合、該方法は、
メモリ階層の低いレベルから該キャッシュラインをリクエストすることと、
以前のミスバッファにおける該ロード動作用のエントリを格納することであって、該以前のミスバッファは、未解決のキャッシュミスがリターンすることを待機しているメモリリクエストと、キャッシュラインがリターンされる前に発生する同じキャッシュラインに対する次のロード動作および格納動作とを含む、ことと、
該キャッシュラインによって満たされる対象となるターゲットキャッシュ位置を選択することと、
該アドレスの該タグ部分を用いて該タグアレイの対応するターゲットエントリを更新することと
をさらに包含し、
該ターゲットエントリの更新は、該ターゲットキャッシュ位置が未解決のキャッシュミス動作に関連していることを示す該ターゲットエントリ内の以前のミスビットを設定することを包含する、方法。
【請求項２】
前記メモリリクエストがロード動作用である場合、後の時間において前記対応するデータアクセスを行うことは、
ロードバッファの該ロード動作用のエントリを格納することであって、該エントリは、前記タグアクセス中に判定された該データアレイの対応するキャッシュラインの位置を特定する、ことと、
該データアレイが該後の時間にフリーになる場合、該データアレイの該キャッシュラインの位置を再度判定するために該タグアクセスを行う必要がなく、該エントリを用いて該データアレイからの該ロード動作を行うことと
を包含する、請求項１に記載の方法。
【請求項３】
前記メモリリクエストが格納動作用である場合、後の時間に前記対応するデータアクセスを行うことは、
該格納動作用のエントリを格納バッファに格納することであって、該エントリは、前記タグアクセス中に判定された前記データアレイの対応するキャッシュラインの位置を特定する、ことと、
該データアレイが該後の時間にフリーになる場合、該データアレイの該キャッシュラインの位置を再度判定するために該タグアクセスを行う必要がなく、該エントリを用いて、該データアレイへの該格納動作を行うことと
を包含する、請求項１に記載の方法。
【請求項４】
前記メモリリクエストがキャッシュミスを生成する場合、前記方法は、以前のミスバッファ内で該キャッシュミス用のエントリを作成することをさらに包含する、請求項１に記載の方法。
【請求項５】
前記タグアクセスを行うことは、前記少なくとも１つのタグに関連している以前のミスビットを検索することをさらに包含し、
前記メモリリクエストがロード動作用であり、かつ、前記アドレスの前記タグ部分が前記タグアレイのタグと整合し、かつ、前記対応する以前のミスビットがセットされており、関連するキャッシュラインが未解決のキャッシュミス動作下にあることを示す場合に、前記方法は、該以前のミスバッファ内の該メモリリクエスト用のエントリを格納することをさらに包含する、請求項４に記載の方法。
【請求項６】
未解決のキャッシュミス動作に対応する、リターンされたキャッシュラインを受け取ることと、
前記データアレイに該リターンされたキャッシュラインを挿入するようにキャッシュフィル動作を行うことと、
該キャッシュフィル動作を待機していた前記以前のミスバッファ内のメモリリクエストを完了することと
をさらに包含する、請求項４に記載の方法。
【請求項７】
未解決のキャッシュミスがリターンすることを待機しているメモリリクエストを含む以前のミスバッファと、
キャッシュミス動作によってリターンされたキャッシュラインを含むフィルバッファと、
メモリリクエストを生成するコンピュータシステムパイプラインと、
前記データアレイのコンテンションが原因で遅延しているロードリクエストを含むロードバッファと、
該データアレイのコンテンションが原因で遅延している格納リクエストを含む格納バッファと
の間で、該データアレイへのアクセスをアービトレートしていることをさらに包含する、請求項１に記載の方法。
【請求項８】
未解決のキャッシュミス動作に関連するキャッシュ位置へのキャッシュフィル動作をブロックすることをさらに包含する、請求項１に記載の方法。
【請求項９】
タグアクセスをキャッシュメモリ内の対応するデータアクセスから分断する装置であって、
メモリリクエストを受け取るように構成されるキャッシュメモリであって、該メモリリクエストは、該メモリリクエストに関連しているメモリ位置を特定するアドレスを含む、キャッシュメモリと、
該キャッシュメモリ内のタグアレイと、
該キャッシュメモリ内のデータアレイと、
少なくとも１つのタグを該タグアレイから検索して、該少なくとも１つのタグを該アドレスのタグ部分とを比較し、該アドレスを含むキャッシュラインが該キャッシュメモリに位置しているかどうかを判定するように構成されているタグアクセスメカニズムと、
該キャッシュメモリ内のデータアレイアクセスメカニズムであって、該アドレスを含む該キャッシュラインが該キャッシュメモリに位置しているが、該データアレイがビジーである結果としてタグルックアップがキャッシュヒットを生じる場合、該データアレイがフリーになる後の時間に該データアレイへの対応するデータアクセスを行うように構成されているデータアレイアクセスメカニズムと
を備え、
該メモリリクエストがロード動作用である場合、先行するロード動作の完了を待機することなく、該対応するデータアクセスを行うように該データアレイアクセスメカニズムが構成され、
該メモリリクエストがキャッシュミスを生成するロード動作用である場合、該データアレイアクセスメカニズムは、
メモリ階層の低いレベルから該キャッシュラインをリクエストし、
以前のミスバッファにおける該ロード動作用のエントリを格納して、
該キャッシュラインによって満たされる対象となるターゲットキャッシュ位置を選択して、
該アドレスの該タグ部分を用いて該タグアレイの対応するターゲットエントリを更新する
ように構成され、該以前のミスバッファは、未解決のキャッシュミスがリターンすることを待機しているメモリリクエストと、キャッシュラインがリターンされる前に発生する同じキャッシュラインに対する次のロード動作および格納動作とを含み、
該ターゲットエントリの更新は、該ターゲットキャッシュ位置が未解決のキャッシュミス動作に関連していることを示す該ターゲットエントリ内の以前のミスビットを設定することを包含する、装置。
【請求項１０】
前記データアレイがフリーになることを待機しているロード動作を含むロードバッファをさらに含み、前記メモリリクエストがロード動作用である場合、該データアレイアクセスメカニズムは、
該ロードバッファの該ロード動作用のエントリを格納することであって、該エントリは、前記タグアクセス中に判定された該データアレイの対応するキャッシュラインの位置を特定する、ことと、
該データアレイが後の時間にフリーになる場合、該データアレイの該キャッシュラインの位置を再度判定するために該タグアクセスを行う必要がなく、該エントリを用いて、該データアレイからの該ロード動作を行うことと
によって、該後の時間に前記対応するデータアクセスを行うように構成される、請求項９に記載の装置。
【請求項１１】
前記ロードバッファがキューとして体系づけられる、請求項１０に記載の装置。
【請求項１２】
前記データアレイがフリーになることを待機している格納動作を含む格納バッファをさらに含み、前記メモリリクエストが格納動作用である場合、該データアレイアクセスメカニズムは、
該格納バッファの該格納動作用のエントリを格納することであって、該エントリは、前記タグアクセス中に判定された該データアレイの対応するキャッシュラインの位置を特定する、ことと、
該データアレイが後の時間にフリーになる場合、該データアレイの該キャッシュラインの位置を再度判定するために該タグアクセスを行う必要がなく、該エントリを用いて、該データアレイに対する該格納動作を行うことと
によって、該後の時間に前記対応するデータアクセスを行うように構成される、請求項９に記載の装置。
【請求項１３】
前記格納バッファがキューとして体系づけられる、請求項１２に記載の装置。
【請求項１４】
前記メモリリクエストがキャッシュミスを生成する場合、前記データアレイアクセスメカニズムは、以前のミスバッファ内の該キャッシュミス用のエントリを作成するように構成されている、請求項９に記載の装置。
【請求項１５】
前記タグアクセスメカニズムは、前記少なくとも１つのタグに関連している以前のミスビットを検索するように構成されており、
前記メモリリクエストがロード動作用であり、かつ、前記アドレスの前記タグ部分が前記タグアレイのタグと整合し、かつ、前記対応する以前のミスビットがセットされており、関連するキャッシュラインが未解決のキャッシュミス動作下にあることを示す場合に、該データアレイアクセスメカニズムは、該以前のミスバッファ内の該メモリリクエスト用のエントリを生成するように構成される、請求項１４に記載の装置。
【請求項１６】
未解決のキャッシュミス動作に対応するリターンされたキャッシュラインを受け取り、
キャッシュフィル動作を行って、該リターンされたキャッシュラインを前記データアレイに挿入し、
該キャッシュフィル動作を待機していた前記以前のミスバッファ内のメモリリクエストを完了する
ように構成されたキャッシュフィルメカニズムをさらに含む、請求項１４に記載の装置。
【請求項１７】
前記以前のミスバッファがキューとして体系づけられる、請求項１４に記載の装置。
【請求項１８】
未解決のキャッシュミスがリターンすることを待機しているメモリリクエストを含む以前のミスバッファと、
キャッシュミス動作によってリターンされたキャッシュラインを含むフィルバッファと、
メモリリクエストを生成するコンピュータシステムパイプラインと、
前記データアレイのコンテンションが原因で遅延しているロードリクエストを含むロードバッファと、
該データアレイのコンテンションが原因で遅延している格納リクエストを含む格納バッファと
の間で、該データアレイへのアクセスをアービトレートするように構成されるアービトレーションメカニズムをさらに含む、請求項９に記載の装置。
【請求項１９】
前記装置は、未解決のキャッシュミス動作に関連するキャッシュ位置に対するキャッシュフィル動作をブロックするように構成される、請求項９に記載の装置。
【請求項２０】
タグアクセスをキャッシュメモリ内の対応するデータアクセスから分断する装置であって、
該キャッシュメモリと、
メモリリクエストを受け取るように構成されている該キャッシュメモリ内のリクエスト入力であって、該メモリリクエストは、該メモリリクエストに関連しているメモリ位置を特定するアドレスを含む、リクエスト入力と、
該キャッシュメモリ内のタグアレイと、
該キャッシュメモリ内のデータアレイと、
該タグアレイから少なくとも１つのタグを検索し、該少なくとも１つのタグと該アドレスのタグ部分とを比較して、該アドレスを含むキャッシュラインが該キャッシュメモリ内に位置しているかどうかを判定するように構成されているタグアクセスメカニズムと、
該キャッシュメモリ内のデータアレイアクセスメカニズムであって、該アドレスを含む該キャッシュラインが該キャッシュメモリに位置しているが、該データアレイがビジーである結果としてタグルックアップがキャッシュヒットを生じる場合、該データアレイがフリーになる後の時間において該データアレイへの該対応するデータアクセスを行うように構成されており、かつ、該メモリリクエストがロード動作用である場合、先行するロード動作の完了を待機することなく、該対応するデータアクセスを行うように構成されており、かつ、該メモリリクエストがキャッシュミスを生成するロード動作用である場合、メモリ階層の低いレベルから該キャッシュラインをリクエストし、以前のミスバッファにおける該ロード動作用のエントリを格納して、該キャッシュラインによって満たされる対象となるターゲットキャッシュ位置を選択して、該アドレスの該タグ部分を用いて該タグアレイの対応するターゲットエントリを更新するように構成されている、データアレイアクセスメカニズムと、
キャッシュミス動作によってリターンされるキャッシュラインを含むフィルバッファと、
該データアレイへのアクセスに対するコンテンションが原因で遅延しているロードリクエストを含むロードバッファと、
該データアレイへのアクセスに対するコンテンションが原因で遅延している格納リクエストを含む格納バッファと
を含み、該以前のミスバッファは、未解決のキャッシュミスがリターンすることを待機しているメモリリクエストと、キャッシュラインがリターンされる前に発生する同じキャッシュラインに対する次のロード動作および格納動作とを含み、該ターゲットエントリの更新は、該ターゲットキャッシュ位置が未解決のキャッシュミス動作に関連していることを示す該ターゲットエントリ内の以前のミスビットを設定することを包含する、装置。
【請求項２１】
タグアクセスを対応するデータアクセスから分断するキャッシュメモリを含むコンピュータシステムであって、
プロセッサと、
メモリと、
該プロセッサと該メモリとの間に接続されるキャッシュメモリと、
メモリリクエストを受け取るように構成されている該キャッシュメモリ内のリクエスト入力であって、該メモリリクエストは、該メモリリクエストに関連しているメモリ位置を特定するアドレスを含む、リクエスト入力と、
該キャッシュメモリ内のタグアレイと、
該キャッシュメモリ内のデータアレイと、
該タグアレイから少なくとも１つのタグを検索して、該少なくとも１つのタグと該アドレスのタグ部分とを比較し、該アドレスを含むキャッシュラインが該キャッシュメモリに位置しているかどうかを判定するように構成されているタグアクセスメカニズムと、
該キャッシュメモリ内のデータアレイアクセスメカニズムであって、該アドレスを含む該キャッシュラインが該キャッシュメモリに位置しているが、該データアレイがビジーである結果としてタグルックアップがキャッシュヒットを生じる場合、該データアレイがフリーになる後の時間に該データアレイへの該対応するデータアクセスを行うように構成されているデータアレイアクセスメカニズムと
を備え、
該メモリリクエストがロード動作用である場合、該データアレイアクセスメカニズムは、先行するロード動作の完了を待機することなく該対応するデータアクセスを行うように構成され、
該メモリリクエストがキャッシュミスを生成するロード動作用である場合、該データアレイアクセスメカニズムは、
メモリ階層の低いレベルから該キャッシュラインをリクエストし、
以前のミスバッファにおける該ロード動作用のエントリを格納して、
該キャッシュラインによって満たされる対象となるターゲットキャッシュ位置を選択して、
該アドレスの該タグ部分を用いて該タグアレイの対応するターゲットエントリを更新する
ように構成され、該以前のミスバッファは、未解決のキャッシュミスがリターンすることを待機しているメモリリクエストと、キャッシュラインがリターンされる前に発生する同じキャッシュラインに対する次のロード動作および格納動作とを含み、
該ターゲットエントリの更新は、該ターゲットキャッシュ位置が未解決のキャッシュミス動作に関連していることを示す該ターゲットエントリ内の以前のミスビットを設定することを包含する、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム内のキャッシュメモリの設計に関する。より詳細には、本発明は、キャッシュメモリ内の対応データアクセスからタグアクセスを分断する方法および装置に関する。
【背景技術】
【０００２】
プロセッサクロック速度は、指数関数的速度で増加し続けるので、コンピュータシステム設計者は、さらに速いクロック速度で計算動作を行うように、ますますプレッシャーが増してきている。このことは、単一のクロックサイクルの内で動作し得る、複数のより小さな動作に各計算動作を分割することを含む、「パイプライン」計算動作によって達成され得る。パイプラインは、より小さい動作を行う、パイプラインステージのセットを介して、ロックステップに連続計算動作を供給することによって、複数の連続計算動作を同時に処理し得る。
【０００３】
パイプラインコンピュータシステムを設計する１つの試みは、効率的にキャッシュメモリに対する可変のアクセス時間を操作することである。一般的なコンピュータシステムでは、１つ以上のパイプラインステージは、ロード動作または格納動作を行うようにキャッシュメモリにアクセスすることに専用化される。あいにく、キャッシュアクセス時間は、キャッシュアクセスがキャッシュヒットまたはキャッシュミスを生成するかどうかに大きく依存して、変動し得る。
【０００４】
キャッシュヒット間でさえ、多くの事情で、キャッシュアクセスの遅延を引き起こし得る。例えば、キャッシュラインが、キャッシュミス動作の間にリターンされる場合、キャッシュフィル動作は、キャッシュのデータアレイ部分へキャッシュラインをロ−ドすることを開始する。あいにく、このキャッシュフィル動作は、パイプラインからのカレントキャッシュアクセスと衝突し得、カレントキャッシュアクセスを失速させる。他の例では、パイプラインからのロード動作が、継続中の格納動作によってキャッシュラインに向くので、読み出し書き込み（ＲＡＷ）ハザードが生じ得る。この場合、ロード動作は、ロード動作がキャッシュラインから最新の値をリターンすることを保証するように継続中の格納動作が完了するまで、待たなければならない。
【０００５】
上記記載の問題を緩和するために、いくつかのキャッシュは、キャッシュメモリのタグアレイへのアクセスがキャッシュメモリのデータアレイへのアクセスから分断されるように設計される。なお、一般的なキャッシュメモリが、アドレスのタグ部分を有するタグアレイから１つ以上のタグを比較するために、タグアレイのタグルックアップを行う。これは、所望のキャッシュラインがキャッシュ内に位置するかどうかをキャッシュが判定することを可能にする。
【０００６】
タグアレイアクセスがデータアレイアクセスから分断される場合、所望のキャッシュラインがキャッシュ内に位置するかどうかを判定する、タグのルックアップおよび比較を第一に実行し得る。所望のキャッシュラインがキャッシュ内に位置する場合、タグルックアップは、キャッシュメモリのデータアレイ内の所望のキャッシュラインのセットおよびウェイ位置をリターンする。対応データアレイアクセスがコンテンションが原因で遅延される場合、対応データアレイアクセスは、データアレイがフリーになる、後の時間に開始し得る。このデータアレイアクセスは、タグルックアップの間に既に判定されたセットおよびウェイ位置を用いる。このように、タグアレイアクセスは、次のデータアレイアクセスのために繰り返される必要はない。さらに、タグアレイアクセスは、固定された時間量を取り、パイプライン設計を大幅に簡略化し得、かつ、それによりパイプライン性能を改善し得る。
【０００７】
あいにく、タグおよびデータアクセスを分断する既存のキャッシュは、ロード動作の間にキャッシュミスからの異常データリターンをサポートしない。異常リターンをサポートすることは複雑な問題である。なぜなら、キャッシュミスの間にリターンするキャッシュラインは、ミスを引き起こしたキャッシュアクセス、および、同じキャッシュラインへ全ての他の次のアクセスと、どうにかして整合しなければならないし、かつ、この整合は効率的な方法で行われなければならない。
【０００８】
必要なことは、キャッシュミス動作の間、キャッシュラインの異常リターンを効率的にサポートする方法で、キャッシュメモリ内の、対応データアクセスとタグアクセスを分断キャッシュする方法および装置である。
【発明の開示】
【課題を解決するための手段】
【０００９】
（要旨）
本発明の１つの実施形態は、キャッシュメモリ内の対応データアクセスとタグアクセスを分断するシステムを提供する。このシステムは、キャッシュメモリにおいてメモリリクエストを受け取ることによって動作し、メモリリクエストがメモリ位置を特定するアドレスを含む。次に、このシステムは、キャッシュメモリ内のタグアレイから少なくとも１つのタグを検索することによって、かつ、アドレスを含むキャッシュラインがキャッシュメモリに位置するかを判定するアドレスのタグ部分と、少なくとも１つのタグを比較することによってタグアクセスを行う。アドレスを含むキャッシュラインがキャッシュメモリに位置するが、キャッシュラインを含むデータアレイがビジーである場合、システムは、データアレイがフリーになる後の時間に、対応データアクセスを行う。さらに、メモリリクエストがロード動作用である場合、対応データアクセスは、先行ロード動作の完了を待つことなく開始する。
【００１０】
本発明の１つの実施形態において、メモリリクエストがロード動作用である場合、システムは、ロードバッファのロード動作のためのエントリを格納することで、対応データアクセスを後の時間に行い、エントリが、タグアクセスの間に判定されたデータアレイにおける対応キャッシュライン位置を特定する。データアレイが後の時間にフリーになる場合、システムは、データアレイにおけるキャッシュライン位置を判定するために再度タグアクセスを行う必要はなく、データアレイからロード動作を行うために、エントリを用いる。
【００１１】
本発明の１つの実施形態において、メモリリクエストが格納動作用である場合、システムは、格納バッファの格納動作のためのエントリを格納することで、対応データアクセスを後の時間に行い、エントリが、タグアクセスの間に判定されたデータアレイにおける対応キャッシュライン位置を指定する。データアレイが後の時間にフリーになる場合、システムは、データアレイにおけるキャッシュライン位置を判定するために再度タグアクセスを行う必要はなく、データアレイへの格納動作を行うために、エントリを用いる。
【００１２】
本発明の１つの実施形態において、メモリリクエストが、キャッシュミスを生成するロード動作用である場合、システムは、メモリ階層の低レベルからキャッシュラインをリクエストし、かつ、以前のミスバッファのロード動作のためのエントリを格納する。このシステムはまた、キャッシュラインによって満たされるターゲットキャッシュ位置を選択し、かつ、アドレスのタグ部分を有するタグアレイにおける対応するターゲットエントリを更新する。なお、ターゲットエントリを更新するステップは、ターゲットキャッシュ位置が、未解決のキャッシュミス動作と関連していることを示すターゲットエントリ内の以前のミスビットをセットするステップを含む。
【００１３】
本発明の１つの実施形態において、メモリリクエストがキャッシュミスを生成する場合、システムは、以前のミスバッファ内のキャッシュミスに対してエントリを作成する。この実施形態の改変例において、タグアクセスを行うステップは、さらに、タグに関連する、以前のミスビットを検索するステップを含む。この改変例において、メモリーリクエストがロード動作用である場合、アドレスのタグ部分がタグアレイのタグと整合する場合、および、対応する以前のミスビットが、関連したキャッシュラインが未解決のキャッシュミス動作の対象になることを指示するセットである場合、システムは以前のミスバッファ内のメモリリクエストに対してエントリを格納する。
【００１４】
本発明の１つの実施形態において、未解決のキャッシュミス動作が充足される場合にリターンされたキャッシュラインを受け取ると、システムは、データアレイにリターンされたキャッシュラインを挿入するようにキャッシュフィル動作を行う。次に、キャッシュフィル動作を待つ、以前のミスバッファ内のあらゆるメモリリクエストを完了し得る。
【００１５】
本発明の１つの実施形態において、システムは、以下の間のデータアレイへアクセスを調停する。未解決のキャッシュミスがリターンすることを待つメモリリクエストを含む、以前のミスバッファ、キャッシュミス動作によってリターンされるキャッシュラインを含む、フィルバッファ、メモリリクエストを生成するコンピュータシステムパイプライン、データアレイのコンテンションが原因で遅延されたロードリクエストを含むロードバッファ、および、データアレイのコンテンションが原因で遅延された格納リクエストを含む格納バッファ。
【００１６】
本発明の１つの実施形態において、システムは、未解決のキャッシュミス動作と衝突するキャッシュフィル動作をブロックする。
【発明を実施するための最良の形態】
【００１７】
次の記載は、どのような当業者にも本発明を作り、かつ、使用できるように示され、特定用途および特定要件のコンテクストで提供される。公開された実施形態のさまざまな改変は、容易に当業者に明白になり、本明細書中に定義されている一般原理は、本発明の精神および範囲から逸脱することなく、他の実施形態および用途に適用され得る。それ故、本発明は、示された実施形態を制限するものではなく、本明細書中に公開された原理および特徴に一致する、最も広い範囲を与えられるように意図されている。
【００１８】
この詳細な記載の中に開示されるデータ構造およびコードは、一般にコンピュータ読み出し可能な格納媒体に格納されている。格納媒体は、コンピュータシステムによる使用目的でコードおよび／またデータを格納し得る、任意のデバイスまたは媒体で得る。これは、ディスクドライバー、磁気テープ、ＣＤ（コンパクトディスク）およびＤＶＤ（デジタルバーサタイルディスク、または、デジタルビデオディスク）のような、磁気および光学の格納デバイス、ならびに、（信号が変調される時に搬送波を用いて、または、なしで）通信媒体上に具体化されたコンピュータ命令信号に制限されないが、これらを含む。例えば、通信媒体は、インターネットのような通信ネットワークを含み得る。
【００１９】
（コンピュータシステム）
図１は、本発明の実施形態に従って、コンピュータシステム１００を図示している。多くのコンピュータシステム１００は、単一の半導体チップ１０１内に位置している。さらに具体的にいうと、複数のプロセッサ１１０、１２０、１３０および１４０を含み、それぞれ１次（Ｌ１）キャッシュ１１２、１２２、１３２および１４２を含む。なお、Ｌ１キャッシュ１１２、１２２、１３２および１４２は、別々の命令およびデータキャッシュであり得、あるいは、統一された命令／データキャッシュであり得る。Ｌ１キャッシュ１１２、１２２、１３２および１４２は、２次（Ｌ２）キャッシュ１０６に接続される。Ｌ２キャッシュ１０６は、メモリコントローラ１０４を通って外部メモリに接続される。
【００２０】
本発明の１つの実施形態において、Ｌ１キャッシュ１１２、１２２、１３２および１４２は、ライトスルーキャッシュであり、つまり、Ｌ１キャッシュ１１２、１２２、１３２および１４２の全ての更新は、自動的にＬ２キャッシュ１０６に伝播される。これは、コヒーレンスプロトコルを簡略化する。なぜなら、プロセッサ１１０が、Ｌ１キャッシュ１１２に存在するデータ項目を必要とする場合、プロセッサ１１０は、Ｌ１キャッシュ１１２がデータを調達するのを待つ必要なく、Ｌ２キャッシュ１０６からのデータを受け取り得るからである。
【００２１】
本発明は単一のチップ上のマルチプロセッサのコンテクストで記載されるが、本発明を、マルチプロセッサシステムまたは単一のチッププロセッサに制限するつもりはない。一般に、本発明は、ユニプロセッサコンピュータシステムまたはマルチプロセッサコンピュータシステムを含む、任意のタイプのコンピュータシステムに適用され得る。さらに、本発明は、セットアソシアティブキャッシュ、ダイレクトマップキャッシュ、命令キャッシュ、データキャッシュ、統一された命令およびデータキャッシュ、１次（Ｌ１）キャッシュまたは２次（Ｌ２）キャッシュ等を含んでいる、キャッシュメモリのほとんど全てのタイプに適用され得る。
【００２２】
（キャッシュメモリ）
図２は、本発明の実施形態に従って、タグアレイおよびデータアレイへの分断されたアクセスをサポートしているＬ１キャッシュ１１０の構造を図示している。
【００２３】
Ｌ１キャッシュ１１０は、タグアレイ２０２、データアレイ２０４、ライトバックバッファ２１０およびフィルバッファ２１２のような多くの従来のキャッシュメモリ構造を含む。タグアレイ２０２は、Ｌ１キャッシュ１１０内に格納されているラインのためのアドレスのタグ部分を含む。Ｌ１キャッシュ１１０が、ターゲットアドレスへのメモリアクセスを行うリクエストを受け取った場合、Ｌ１キャッシュ１１０は、タグアレイ２０２から１つ以上のタグをルックアップするようにターゲットアドレスのセット数を使用する。これらのタグは、ターゲットアドレスを含むキャッシュラインがＬ１キャッシュ１１０内に位置しているかどうか判定するようにターゲットアドレスのタグ部分と比較される。
【００２４】
図２に示されていないが、タグ比較用の比較回路がある。セットアソシアティブキャッシュのためのタグルックアップの間に取り出される複数のタグも示されていない。さらに、タグアレイ２０３における各エントリは、以前のミスビット２０３を含み、タグが未解決のキャッシュミスに関連していることを示すことに留意されたい。
【００２５】
データアレイ２０４は、タグアレイ２０２内に格納されているタグに対応するキャッシュラインを格納する。従来のキャッシュメモリのロード動作の間、データアレイ２０４は、タグアレイ２０２がアクセスされるのと同時刻にアクセスされる。タグルックアップが、ロード動作がヒットしていることを示す場合、データアレイ２０４から取り出されたデータ値は、ロード動作を完了するようにリターンされる。
【００２６】
データアレイ２０４は、ライトバックバッファ２１０およびフィルバッファ２１２を通してＬ２キャッシュ１０６と通信している。ライトバックバッファ２１０は、Ｌ２キャッシュ１０６へライトバックされることを待っているデータアレイ２０４から取り出されるキャッシュラインを含む。一方、フィルバッファ２１２は、データアレイ２０４に格納されることを待っているＬ２キャッシュ１０６から取り出されるキャッシュラインを含む。
【００２７】
なお、タグアレイ２０２およびデータアレイ２０４は、それぞれ別々のデコーダ２０６および２０８を含む。これは、タグアレイ２０２およびデータアレイ２０４において、異なったセット数のルックアップが同時に開始することを可能にすることによって、タグアレイ２０２およびデータアレイ２０４への分断されたアクセスを促進する。
【００２８】
Ｌ２キャッシュ１１０は、ロードバッファ２１４、格納バッファ２１６および以前のミスバッファ２１８を含む従来のキャッシュメモリにおいて存在しない、多くの新しい構造を含む。ロードバッファ２１４および格納バッファ２１６は、データアレイ２０４がフリーになることを待つデータアレイ２０４への継続中のアクセスを含む。さらに詳細には、ロードバッファ２１４は、データアレイ２０４のコンテンション（ｃｏｎｔｅｎｔｉｏｎ）が原因で遅延されたロードリクエスト、およびデータアレイ２０４のためのコンテンションが原因で遅延された格納リクエストを含む格納バッファ２１６を格納する。これらの構造は、タグアクセスおよびデータアクセスが分断されているという事実の結果として存在する。これは、ロード動作または格納動作のためのタグアクセスは、データアレイ２０４に対応するロードまたは格納が開始する前に、開始し得る。これらの「継続中」ロードおよび格納動作は、一時的にロードバッファ２１４および格納バッファ２１６に格納される。
【００２９】
以前のミスバッファ２１８は、未解決のキャッシュミスがリターンすることを待っているメモリリクエストを含む。これは、キャッシュミスを引き起こすメモリリクエスト、およびキャッシュラインがリターンされる前に発生する同じキャッシュラインに対する次のロードおよび格納動作を含む。
【００３０】
ロードバッファ２１４に与えられたエントリ２２１は、宛先レジスタ識別子２２２ならびにデータアレイ２０４内のロード動作のセットおよびウェイ位置を含む。ロードバッファ２１４の与えられたエントリ２２１は、メモリアクセスサイズを示すフィールドまたは符号拡張オプションを示すフィールドのような示していない他のフィールドも含む。格納バッファ２１６の与えられたエントリ２２５は、格納動作の間のデータアレイ２０４に書き込まれたデータ２２６ならびにデータアレイ２０４内の格納動作のためのターゲットキャッシュラインのセットおよびウェイ位置を含む。格納バッファ２１６の与えられたエントリ２２５は、示されていない他のフィールドも含む。本発明の１つの実施形態において、以前のミスバッファ２１８のエントリはロードバッファ２１４のエントリと同じである。
【００３１】
多くの構造は、ロードバッファ２１４、格納バッファ２１６、以前のミスバッファ２１６、フィルバッファ２１２およびプロセッサパイプライン（示さず）を含む、データアレイ２０４へのアクセスを必要とする。これらのアクセスはアービタ回路２２０によって制御され、図３を参照しながら、下記にさらに詳細に説明する。
【００３２】
（アービトレーション回路）
図３は、本発明の実施形態に従って、図２のアービタ回路２２０の構造を図示している。アービタ回路２２０は、データアレイ２０４のデコーダ２０８へのアクセスを制御する複数のスイッチ３０２−３０５を含む。最優先度は、最もデコーダ２０８に近い以前のミスバッファへ与えられ、それ故、データアレイ２０４へのアクセスのための上流コンテンダーをロックアウトするように、スイッチ３０５を用い得る。以前のミスバッファ２１８が最優先度を有する。なぜなら、以前のミスバッファ２１８は、キャッシュミスを待っていたアクセスを含むからである。これらのアクセスは、プロセッサがブロックを引き起こす可能性が高い。次の最優先度は、キャッシュミス動作のためのキャッシュラインをリターンしようと試みるフィルバッファ２１２に与えられる。次の優先度は、ロードバッファ２１４によって従う命令パイプラインである。最後に、格納バッファ２１６は、格納動作が一般的にさらにゆっくりとした速度で開始され得るので、一番下の優先度を与えられる。
【００３３】
（ロードおよび格納動作）
図４は、キャッシュメモリ１１０内でどのようにロード動作および格納動作が行われるかを図示したもので、キャッシュメモリ１１０は、本発明の１つの実施形態に従って、図２に図示されている。図４は、さまざまなパイプラインステージ内で何が起きているかを示すように、整理されている。命令フェッチおよびデコードパイプラインステージの後に、ステージＥ１、Ｃ１、Ｃ２、Ｅ４、Ｅ５、ＴおよびＷを含むさらに多数のステージが存在する。さらに具体的にいうと、Ｅ１は、実行ステージで、Ｃ１およびＣ２はキャッシュアクセスステージ、Ｅ４およびＥ５はさらなる実行ステージで、Ｔは、トラップステージで、かつ、ＷＢはライトバックステージである。なお、本発明は、一般的にパイプラインのコンピュータシステムのどのようなタイプにおいても実施され得、図４に図示されているステージの特定なセットに制限するつもりはない。
【００３４】
図４の上部分は、ロード動作の間に開始するアクションを図示している。システムは、Ｃ１ステージの間に数多くの動作を行い、アドレスに関連しているタグを読み出すようにタグアレイ２０２にルックアップを行うことを含む。システムは、メモリ管理ユニットを通して仮想対物理アドレス変換も行う。システムは、データアレイ２０４から対応キャッシュラインを読み出そうとも試みる。システムはさらに、ロード動作がフィルウェイおよび以前のミスウェイを読み出すことによってデータアレイ２０４のためのアービトレーションを喪失したかどうかを判定する。フィルウェイまたは以前のミスウェイのどちらかが同じウェイについてのものである場合、システムは、実行パイプラインがアービトレーションを喪失したことを認識する。なぜなら、図３に図示されているアービタ２２０は、フィルバッファ２１２および以前のミスバッファ２１８に優先度を与えるからである。システムは、もし必要ならば、キャッシュミスの間に置換するキャッシュ内のラインを特定するようにミスウェイも計算する。
【００３５】
ステージＣ２の間、システムは、ロードがキャッシュヒットを引き起こすかどうか判定するように、タグアレイ２０２から取り出されるタグと最新のタグを比較することを含む、さらなる動作を行う。ロードがヒットを引き起こす場合、システムはデータアレイ２０４からデータをロードする。システムは、ロード動作と以前の格納動作との間に読み出し書き込み（ＲＡＷ）ハザードが存在するかを判定するために、格納バッファ２１６上で、コンテントアドレス可能サーチも行う。システムは、ロード動作のためのロードバッファ２１４へのエントリも考慮した上で挿入する。システムは、キャッシュミスが発生する場合の以前のミスバッファ２１８の空スロットをさらに特定する。システムは、以前のミスバッファ２１８にロードが入る必要がある場合に、以前のミスバッファ２１８内にキューのセットおよびウェイも読み込む。キャッシュミスの場合、システムは、次のアクセスがキャッシュミスがキャッシュラインについて未解決であることを認識するように、タグを新しいタグに更新し、かつ、以前のミスビットをセットする。
【００３６】
ステージＥ４の間、システムは、ロードがヒットを生成し、かつ、データアレイ２０４にアクセス可能であった場合、あるいは、ロードがミス、以前のミス、またはＲＡＷハザードを生成した場合、ロードバッファ２１４から考慮した上で挿入されるエントリを削除することを含むさらなる動作を行う。（なお、システムは、以前のミスがタグアレイエントリの以前のミスビットを検査することによって存在するかを判定し得る。）ロードがキャッシュミスまたは以前のミスを生成する場合、以前のミスバッファ２１８へロードを入れる。なお、以前のミスバッファは、各未解決のキャッシュミス動作のキューのセットとして組織化される。これは、システムが十分にアソシアティブサーチを行う代わりに各キューのヘッドのみを検査することを可能にする。これは、ルックアップ時間を減少する。システムは、ロードがキャッシュミスを生成した場合、Ｌ２キャッシュ１０６から対応キャッシュラインにプルするようにロードリクエストキューへロードを入れる。
【００３７】
最終的に、Ｅ４ステージにおいて、システムは、必要であれば、Ｌ２キャッシュ１０６にミスを出す。
【００３８】
図４の下の部分は、格納動作の間に開始するアクションを図示している。Ｃ１ステージの間、システムは、アドレスと関連しているタグを読み込むようにタグアレイ２０２にルックアップを行うことを含む、数々の動作を行う。システムは、メモリ管理ユニットを通して仮想対物理アドレス変換も行う。
【００３９】
Ｃ２ステージの間、キャッシュヒットがあるかどうかを判定するタグアレイ２０２から取り出されるタグと現在のタグを比較することを含む、さらなる動作を行う。ヒットがある場合、システムはデータアレイ２０４へデータを格納する。システムは、格納が以前のミスバッファ２１８に入れられるべき場合に以前のミスバッファ２１８内にキューについてのセットおよびウェイ情報も読み込む。
【００４０】
Ｅ４ステージの間、ストアがキャッシュヒットであるが、データアレイ２０４へのアクセスをゲインすることができなかった場合、システムは、格納バッファ２１６へ格納動作を入れることを含むさらなる動作を行う。システムはまた、格納が以前のミスを生成する場合、以前のミスバッファ２１８へ格納を入れる。
【００４１】
最終的にステージＥ４の間に、システムは、Ｌ２キャッシュ２０６へのラインを格納するように、格納を格納リクエストキューへ入れる。
【００４２】
本発明の実施形態の前述の説明は、ただ説明および記載の目的で示されている。以上の説明は、本発明を公開されている形式に、排除または制限するつもりはない。従って、多くの変更および改変は当業者に明らかである。さらに、上記は、本発明を制限するつもりはない。本発明の範囲は、添付の特許請求の範囲に定義されている。
【図面の簡単な説明】
【００４３】
【図１】図１は本発明の実施形態に基づくコンピュータシステムを図示したものである。
【図２】図２は、本発明の実施形態に基づくタグアレイおよびデータアレイへの、分断されたアクセスをサポートする、キャッシュメモリを図示している。
【図３】図３は、本発明の実施形態に基づくアービトレーション回路を図示している。
【図４】図４は、本発明の実施形態に基づく図２に図示されているキャッシュメモリ内で、ロード動作および格納動作がどのように行われているかを図示したものである。
【図１】
0004417715.tif 000002
【図２】
0004417715.tif 000003
【図３】
0004417715.tif 000004
【図４】
0004417715.tif 000005