(57)【特許請求の範囲】
【請求項１】
上位レベル命令キャッシュを有するプロセッサ・コアと、下位レベル・キャッシュと、を備えた第１及び第２の処理ユニットと、これらの処理ユニットを結合するシステム・バスと、を有するコンピュータ・システムにおいて処理ユニット間のキャッシュ階層で同期化を行う方法であって、
前記システム・バスを介して入力された少なくとも１つのプログラム命令に対応する値を、第１の処理ユニットの上位レベル命令キャッシュ及び下位レベル・キャッシュに保持するステップと、
前記下位レベル・キャッシュで、前記プロセッサ・コアから記憶アドレス・キューを介して前記値の無効化を要求する操作を受け取るステップと、
前記受け取るステップに応答して、前記値を識別する無効化トランザクションを、前記下位レベル・キャッシュから前記上位レベル命令キャッシュへ送るステップと、
前記受け取るステップに応答して、同期化操作を行うための前記値を識別する無効化トランザクションを、前記下位レベル・キャッシュから前記システム・バスに発行し、この前記値を識別する無効化トランザクションを第２の処理ユニットが受け取るステップと、を含む方法。
【請求項２】
前記下位レベル・キャッシュにおいて、前記値が前記上位レベル命令キャッシュの中に保持されているかどうかを示す包含ビットを維持するステップと、を含む請求項１に記載の方法。
【請求項３】
前記包含ビットが設定されていることを決定する前記包含ビットを維持するステップに応答して、前記送るステップが実行される、請求項２に記載の方法。
【請求項４】
前記送るステップがｉｃｂｉトランザクションを送る、請求項１に記載の方法。
【請求項５】
システム・メモリ装置と、少なくとも第１及び第２の処理ユニットと、前記システム・メモリ装置と前記第１及び第２の処理ユニットとを結合するシステム・バスと、を有する処理ユニット間のキャッシュ階層で同期化を行うコンピュータ・システムであって、
前記第１の処理ユニットは、上位レベル命令キャッシュを有するプロセッサ・コアと、コントローラを有する下位レベル・キャッシュと、前記システム・バスを介して入力された少なくとも１つのプログラム命令に対応する値を、第１の処理ユニットの上位レベル命令キャッシュ及び下位レベル・キャッシュに保持する手段と、を含み、
前記コントローラが、前記プロセッサ・コアから記憶アドレス・キューを介して前記値の無効化を要求する操作を受け取る手段と、
前記受け取る手段に応答して、前記値を識別する無効化トランザクションを、前記下位レベル・キャッシュから前記第１の処理ユニットの前記上位レベル命令キャッシュへ送る手段と、
前記受け取る手段に応答して、同期化操作を行うための前期値を識別する無効化トランザクションを、前記下位レベル・キャッシュから前記システム・バスに発行し、この前記値を識別する無効化トランザクションを第２の処理ユニットが受け取る手段と、を含むコンピュータ・システム。
【請求項６】
前記下位レベル・キャッシュは、前記値が前記上位レベル命令キャッシュの中に保持されているかどうかを示す包含ビットを有する請求項５に記載のコンピュータ・システム。
【請求項７】
前記コントローラは、前記包含ビットが設定されていることの決定に応答して、前記送る手段を実行する、請求項６に記載のコンピュータ・システム。
【請求項８】
前記送る手段が、ｉｃｂｉトランザクションを送る、請求項５に記載のコンピュータ・システム。
【請求項９】
プログラム命令を実行する少なくとも１つの実行ユニットと、コントローラを有する下位レベル・キャッシュと、前記少なくとも１つの実行ユニットへ結合された上位レベル命令キャッシュと、を有する処理ユニットであって、
第１及び第２の処理ユニットはシステム・バスにより結合されるものであり、
前記上位レベル命令キャッシュ及び下位レベル・キャッシュは、前記システム・バスを介して入力された少なくとも１つのプログラム命令に対応する値を保持するものであり、
前記コントローラは、前記少なくとも１つの実行ユニットから記憶アドレス・キューを介して前記値の無効化を要求する操作を受け取るものであり、
前記コントローラは、前記値の無効化を要求する操作を受け取った後、前記値を識別する無効化トランザクションを、前記上位レベル命令キャッシュへ送るとともに、前記システム・バスに同期化操作の発行を行い、他の処理ユニットのコントローラが、前記システム・バスを介して、前記コントローラから発行された前記値を識別する無効化トランザクションを受け取るものである、処理ユニット間のキャッシュ階層で同期化を行う処理ユニット。
【請求項１０】
前記下位レベル・キャッシュは、前記値が前記上位レベル命令キャッシュの中に保持されているかどうかを示す包含ビットを有する請求項９に記載の処理ユニット。
【請求項１１】
前記コントローラは、前記包含ビットが設定されていることの決定に応答して、前記無効化トランザクションを前記上位レベル命令キャッシュに送るものである、請求項１０に記載の処理ユニット。
【請求項１２】
前記コントローラは、前記無効化トランザクションを前記上位レベル命令キャッシュに送る際に、ｉｃｂｉトランザクションを送るものである、請求項９に記載の処理ユニット。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は一般的にはコンピュータ・システムに関し、具体的には、メモリ値（プログラム命令及びオペランド・データ）を共有するキャッシュを有するマルチプロセッサ・コンピュータ・システムに関し、更に具体的には、分岐した命令キャッシュ及びデータ・キャッシュを有するキャッシュ・アーキテクチャでキャッシュの首尾一貫性を維持する改善された方法に関する。
【０００２】
【従来の技術】
通常のマルチプロセッサ・コンピュータ・システム１０の基本構造が図１に示される。コンピュータ・システム１０は幾つかの処理ユニットを有する（２つの処理ユニット１２ａ及び１２ｂが示される）。処理ユニットは、入力／出力（Ｉ／Ｏ）装置１４（例えば、ディスプレイ装置、キーボード、グラフィカル・ポインタ（マウス）、及びパーマネント記憶装置又はハード・ディスク）を含む様々な周辺装置、プログラム命令を実行するため処理ユニットによって使用されるメモリ装置１６（例えば、ランダム・アクセス・メモリ（ＲＡＭ））、及びコンピュータが最初にオンにされたとき周辺装置の１つ（通常はパーマネント・メモリ装置）からオペレーティング・システムを見つけ出してロードすることを主な目的とするファームウェア１８へ接続される。処理ユニット１２ａ及び１２ｂは、汎用相互接続（generalized interconnect）又はバス２０を含む様々な手段、又はダイレクト・メモリ・アクセス・チャネル（図示されていない）によって周辺装置と通信する。コンピュータ・システム１０は、図示されない追加のコンポーネント、例えばモデム、プリンタ、又はスキャナへ接続するための直列、並列、及びユニバーサル・システム・バス（ＵＳＢ）ポートを有してよい。図１のブロック図に示されたコンポーネントと組み合わせて使用されてよい他のコンポーネントがある。例えば、ディスプレイ・アダプタは、ビデオ・ディスプレイ・モニタを制御するために使用されてよく、メモリ・コントローラは、メモリ１６をアクセスするために使用することができる。更に、コンピュータは３つ以上の処理ユニットを有することができる。
【０００３】
対称型マルチプロセッサ（ＳＭＰ）コンピュータ・システムでは、全ての処理ユニットは、一般的に同じである。即ち、処理ユニットの全ては命令及びプロトコルの共通のセット及びサブセットを使用して作動し、一般的に同じアーキテクチャを有する。典型的なアーキテクチャは図１に示される。処理ユニットは、複数のレジスタ及び実行ユニットを有するプロセッサ・コア２２を含む。これらのレジスタ及び実行ユニットは、コンピュータを操作するためプログラム命令を実行する。例示の処理ユニットは、ＩＢＭ社（International Business Machines Corporation of Armonk, New York）によって市販されているＰｏｗｅｒＰＣ（商標）を含む。更に、処理ユニットは、１つ又は複数のキャッシュ、例えば命令キャッシュ２４及びデータ・キャッシュ２６を有することができる。これらのキャッシュは、高速メモリ装置を使用して実現される。キャッシュは、プロセッサによって反復的にアクセスされる値を一時的に記憶するため普通に使用される。それは、メモリ１６から値をロードする追加の待ち時間を避けることによって、処理をスピードアップするためである。これらのキャッシュは、単一の集積チップ２８の上でプロセッサ・コアと統合的にパッケージされるとき、「オンチップ」と呼ばれる。各々のキャッシュは、プロセッサ・コアとキャッシュ・メモリとの間のデータ及び命令の転送を管理するキャッシュ・コントローラ（図示されていない）に関連づけられている。
【０００４】
処理ユニットは、追加のキャッシュ、例えばキャッシュ３０を含むことができる。キャッシュ３０は、レベル１キャッシュ２４及び２６をサポートするので、レベル２（Ｌ２）キャッシュと呼ばれる。言い換えれば、キャッシュ３０は、メモリ１６とオンボード・キャッシュとの間の仲介者として働き、オンボード・キャッシュよりも非常に大量の情報（命令及びデータ）を記憶することができるが、欠点としてアクセスが長くなる。例えば、キャッシュ３０は５１２キロバイトの記憶容量を有するチップであってよく、その一方で、プロセッサは、総記憶容量が６４キロバイトのオンボード・キャッシュを有するＩＢＭ  ＰｏｗｅｒＰＣ（商標）６０４シリーズ・プロセッサであってよい。キャッシュ３０はバス２０へ接続され、メモリ１６からプロセッサ・コア２２への情報の全てのロードは、キャッシュ３０を通過しなければならない。図１は２レベルだけのキャッシュ階層を示すが、直列に接続されたキャッシュの多くのレベル（Ｌ３、Ｌ４など）が存在するマルチレベル・キャッシュ階層を設けることができる。
【０００５】
マルチレベル・キャッシュにおいて、もし値のコピーがキャッシュの全てのレベルにあれば、キャッシュ階層は「包含的」であると呼ばれる。しかし、各々の値のコピーを低レベル・キャッシュに保持することは必要ではない。キャッシュが包含的であるかどうかを示すため、包含ビット・フィールドがキャッシュへ付け加えられてよい。例えば、３レベル・キャッシュ構造は包含的ではないＬ３キャッシュを備えてよく、Ｌ２キャッシュ内に存在する値はＬ３キャッシュ内に存在しないかも知れない。この例では、もしＬ２キャッシュが、処理ユニット・キャッシュのいずれにも存在しない値について読み出しコマンドを発行すれば、その値はＬ３キャッシュへ（必ずしも）ロードされることなくＬ２キャッシュへ渡されることができる。
【０００６】
ＳＭＰコンピュータにおいて、首尾一貫的なメモリ・システムを提供すること、即ち、各々のメモリ・ロケーションへの書き込み操作が、全てのプロセッサのために或る順序で直列化されることが重要である。例として、メモリ内の或るロケーションが、一連の書き込み操作によって、連続した値１、２、３、４を取るように修正されると仮定する。キャッシュ首尾一貫性システムでは、全てのプロセッサは、所与のロケーションへの書き込みが、示された順序で起こることを観察するであろう。しかし、処理エレメントがメモリ・ロケーションへの書き込みを省略することは可能である。メモリ・ロケーションを読み出している所与の処理エレメントは、値２への更新を省略して、シーケンス１、３、４を認識することができる。これらの特性を実現するシステムは、「首尾一貫的」であると言われる。殆ど全ての首尾一貫性プロトコルは、キャッシュ・ブロックの粒状度サイズのみで作動する。即ち、首尾一貫性プロトコルは、キャッシュ・ブロックをベースとして、オペランド・データ又は命令の移動及び書き込み許可を制御し、各々のメモリ・ロケーションのために別々には制御しない。
【０００７】
キャッシュの首尾一貫性を達成する多くのプロトコル及びテクニックが、当業者に知られている。首尾一貫性を維持するこれらメカニズムの全ては、所与の時点で所与のメモリ・ロケーション（キャッシュ・ブロック）への書き込み操作を許す「許可」を、ただ１つのプロセッサが有するようにプロトコルへ要求する。この要件の結果として、処理エレメントがメモリ・ロケーションへの書き込みを試みるとき、その処理エレメントは、ロケーションへの書き込みの希望を、全ての他の処理エレメントへ通知し、書き込みの実行許可を、全ての他の処理エレメントから受け取らなければならない。
【０００８】
キャッシュの首尾一貫性を実現するために、データ処理システム内のプロセッサは、共通の汎用相互接続（即ち、バス２０）を介して通信する。プロセッサは、相互接続を介して、メモリ・ロケーションからの読み出し希望、又は書き込み希望を示すメッセージを渡す。操作が相互接続の上に置かれたとき、他のプロセッサの全ては、この操作を「スヌープ」（監視）し、それらのキャッシュの状態が、要求された操作の進行を許すかどうかを決定し、もし許すならば、どのような条件で許すかを決定する。バス・トランザクションを履行してメモリの首尾一貫性を維持するため、スヌープ及びフォローアップ・アクションを必要とする幾つかのバス・トランザクションが存在する。スヌープ操作は、或るバス信号のアサーションによって生成される適格スヌープ要求の受け取りによってトリガされる。命令の処理は、スヌープ・ヒットが起こるときにのみ中断され、スヌープ状態マシンは、違反セクタの首尾一貫性を解決するため追加のキャッシュ・スヌープが必要であることを決定する。
【０００９】
この通信が必要である理由は、キャッシュを有するシステムで、メモリの所与のブロックの最も近時の有効コピーが、システム・メモリ１６からシステム内の１つ又は複数のキャッシュへ移動したかも知れないからである（前述したような）。もし１つのプロセッサ（例えば１２ａ）が、そのキャッシュ階層の中に存在していないメモリ・ロケーションにアクセスしようとすれば、メモリ・ロケーションの実際の（現在の）値を含むブロックの正しいバージョンは、システム・メモリ１６の中にあるか、他の処理ユニット、例えば処理ユニット１２ｂの１つ又は複数のキャッシュの中にあるかも知れない。もし正しいバージョンが、システム内の１つ又は複数の他のキャッシュの中にあれば、システム・メモリの代わりにシステム内のキャッシュから正しい値を得ることが必要である。
【００１０】
例えば、１つのプロセッサ１２ａがメモリ内のロケーションを読み出そうとしている場合を考える。それは、先ず、それ自身のＬ１キャッシュ（２４又は２６）をポーリングする。もしブロックがＬ１キャッシュに存在しなければ、要求はＬ２キャッシュ（３０）へ転送される。もしブロックがＬ２キャッシュに存在しなければ、要求は、より低いキャッシュ・レベル、例えばＬ３キャッシュへ転送される。もしブロックが、より低いレベルのキャッシュに存在しなければ、要求は、サービスされる汎用相互接続（２０）へ与えられる。一度、操作が汎用相互接続の上に置かれると、全ての他の処理ユニットは操作をスヌープし、ブロックが、それら処理ユニットのキャッシュに存在するかどうかを決定する。もし所与の処理ユニットが、処理ユニットによって要求されたブロックを、そのＬ１キャッシュの中に有し、そのブロック内の値が修正されており、より低いレベルのキャッシュもブロックのコピーを有するならば、それらのコピーは新鮮でない。なぜなら、プロセッサ・キャッシュ内のコピーは修正されているからである。従って、処理ユニットの最低レベルのキャッシュ（例えば、Ｌ３）が、読み出し操作をスヌープすれば、それは、要求されたブロックが、より高いレベルのキャッシュに存在して修正されたことを決定するであろう。これが、インライン・キャッシュ構造で起こるとき、Ｌ３キャッシュは、処理ユニットが後の時点で再びその操作を「再試行」しなければならないことを処理ユニットに通知するメッセージを、汎用相互接続の上に置く。なぜなら、メモリ・ロケーションの実際の値は、メモリ階層の最上部にあるＬ１キャッシュに存在し、イニシエートしている処理ユニットの読み出し要求のサービスに使用するため検索されなければならないからである。
【００１１】
一度、イニシエートしている処理ユニットからの要求が再試行されると、Ｌ３キャッシュは、実施形態の詳細に依存して、修正された値をＬ１キャッシュから検索してＬ３キャッシュ、メイン・メモリ、又はこれらの双方で利用可能にするプロセスを開始する。より高いレベルのキャッシュからブロックを検索するためには、Ｌ３キャッシュは、キャッシュ間接続を介して、より高いレベルのキャッシュへ、ブロックが検索されるべきことを要求するメッセージを送る。これらのメッセージは、Ｌ１キャッシュへ達するまで処理ユニットの階層を上方へ伝搬し、ブロックが最低レベル（Ｌ３又はメイン・メモリ）まで階層を下方へ移動して、イニシエートしている処理ユニットからの要求にサービスできるようにする。
【００１２】
イニシエートしている処理ユニットは、最終的に読み出し要求を汎用相互接続の上に再提示する。しかし、この時点で、修正された値は処理ユニットのＬ１キャッシュから検索されてシステム・メモリに置かれており、イニシエートしているプロセッサからの読み出し要求は満足させられるであろう。上述したシナリオは、通常、「スヌープ・プッシュ」と呼ばれている。読み出し要求は汎用相互接続の上でスヌープされる。これは、イニシエートしている処理ユニットから出された読み出し要求を満足させるため、処理ユニットによってブロックが階層の底へ「プッシュ」されるようにする。
【００１３】
従って、プロセッサがブロックを読み出すか書き込みたいとき、プロセッサは、キャッシュの首尾一貫性を維持するため、システム内の他の処理ユニットへ、その希望を通信しなければならない。これを達成するため、キャッシュ首尾一貫性プロトコルは、キャッシュ階層の各々のレベルの各々のブロックに、ブロックの現在の「状態」を示す状態インディケータを関連づける。状態情報は、首尾一貫性プロトコルの中で汎用相互接続及びキャッシュ間接続におけるメッセージ・トラフィックを減少させる或る最適化を可能にするために使用される。このメカニズムの１つの例として、処理ユニットが読み出しを実行するとき、処理ユニットは、読み出しが再試行されなければならない（即ち、後で再発行されなければならない）かどうかを示すメッセージを受け取る。もし読み出し操作が再試行されなければ、メッセージは、通常、更に他の処理ユニットもブロックの依然としてアクティブなコピーを有するかどうかを処理ユニットに決定させる情報を含む（これは、再試行しない読み出しについて、他の最低レベル・キャッシュに「共有」又は「非共有」表示を与えさせることによって達成される）。従って、処理ユニットは、システム内の他のプロセッサがブロックのコピーを有しているかどうかを決定することができる。もし他の処理ユニットがブロックのアクティブ・コピーを有していなければ、読み出している処理ユニットは、ブロックの状態を「排他的」とマークする。もしブロックが排他的とマークされれば、システム内の他の処理ユニットと最初に通信することなく、処理ユニットに後でブロックへ書き込ませることが許される。なぜなら、他の処理ユニットは、ブロックのコピーを有しないからである。従って、プロセッサは、この意図を相互接続の上へ最初に通信することなく、ロケーションから読み出すか書き込むことが可能である。しかし、これは、他のプロセッサがブロックに興味を有しないことを、首尾一貫性プロトコルが確認した場合に限る。
【００１４】
上記のキャッシュ首尾一貫性テクニックは、「ＭＥＳＩ」と呼ばれる特別のプロトコルで実行される。このプロトコルでは、キャッシュ・ブロックは、４つの状態、即ち「Ｍ」（修正）、「Ｅ」（排他的）、「Ｓ」（共有）、又は「Ｉ」（無効）の１つであることができる。ＭＥＳＩプロトコルのもとでは、各々のキャッシュ・ブロック（例えば、３２バイト・ブロック）は、４つの可能な状態から、エントリの状態を示す２つの追加ビットを有する。ブロックの最初の状態、及び要求しているプロセッサによって求められているアクセスのタイプに依存して、状態が変更されてよく、要求しているプロセッサのキャッシュの中のブロックについて、特定の状態が設定される。例えば、ブロックが修正状態にあるとき、アドレスされたブロックは、修正されたブロックを有するキャッシュの中でのみ有効であり、修正された値は、システム・メモリへ書き戻されていない。ブロックが排他的であるとき、それは指摘されたブロックの中にのみ存在し、システム・メモリと首尾一貫している。もしブロックが共有されていれば、それは、そのキャッシュの中、また可能性として少なくとも１つの他のキャッシュの中で有効であり、共有されたブロックの全てはシステム・メモリと首尾一貫している。最後に、ブロックが無効であるとき、それは、アドレスされたブロックがキャッシュの中に存在していないことを示す。
【００１５】
キャッシュ命令は、プロセッサによって実行されるソフトウェアがキャッシュを管理することを可能にする。幾つかの命令はスーパーバイザ・レベルであり（コンピュータのオペレーティング・システムによってのみ実行され）、幾つかの命令はユーザ・レベルである（アプリケーション・プログラムによって実行される）。フラッシュ命令（データ・キャッシュ・ブロック・フラッシュ「ｄｃｂｆ」）は、もしキャッシュ・ブロックがメモリ・ブロックの修正されていない（「共有」又は「排他的」）コピーを含むならば、キャッシュ・ブロックを無効にすることによってキャッシュ・ブロックを利用可能にするか、又は、もしキャッシュ・ブロックがメモリ・ブロックの修正されたコピーを含むならば、先ず修正された値をメモリ階層の下方へ書き込み（「プッシュ」）、その後でブロックを無効にすることによってキャッシュ・ブロックを利用可能にする。キル（kill）命令（データ・キャッシュ・ブロック無効化「ｄｃｂｉ」、命令キャッシュ・ブロック無効化「ｉｃｂｉ」、又はデータ・キャッシュ・ブロック・ゼロ設定「ｄｃｂｚ」）はフラッシュ命令と類似しているが、キル命令はキャッシュ・ブロックを無効状態へ直ちに強制し、従って、修正されたブロックは、キャッシュからプッシュされることなくキルされる点が異なっている。修正されたブロックのみに作用するクリーン（clean)命令（データ・キャッシュ・ブロック記憶「ｄｃｂｓｔ」）は、修正されたブロックがメイン・メモリへ書き込まれるようにする。タッチ（touch）命令（データ・キャッシュ・ブロック・タッチ「ｄｃｂｔ」）は、ソフトウェア・イニシエート・プリフェッチ・ヒントの使用を介してパフォーマンスを改善する方法を提供する。
【００１６】
上記のキャッシュ命令の全ては、プロセッサ首尾一貫性グラニュールと呼ばれるサイズを有するブロックの上で作動する。多くのコンピュータでは、プロセッサ首尾一貫性グラニュールは３２バイトである。即ち、プロセッサは、Ｌ１キャッシュのキャッシュ・ブロックにおける３２バイト・セクタの上で作動することができる。しかし、システム・バス・グラニュールは、それよりも大きく、例えば６４バイト又は１２８バイトであってよい。即ち、Ｌ２キャッシュからシステム・バスへ転送されるキャッシュ・ラインのフルサイズは、６４バイト又は１２８バイトである。言い換えれば、システム・バスに沿って送られる命令は、３２バイトではなく、６４バイト・ワード又は１２８バイト・ワードを参照する。首尾一貫性サイズは更に変動することができ、例えば２レベル・キャッシュで３つの首尾一貫性サイズを有する（３２バイトのプロセッサ首尾一貫性グラニュール、６４バイトのＬ１首尾一貫性グラニュール、及び１２８バイトのＬ２／システム・バス首尾一貫性グラニュール）。
【００１７】
【発明が解決しようとする課題】
メモリ階層に沿った首尾一貫性サイズのこの変動は、或る非効率性を生じる。例えば、もしプロセッサが「ｉｃｂｉ」命令を特定の３２バイト・セクタへ発行すると、ｉｃｂｉ操作はシステム・バス上を転送され、６４バイト操作として取り扱われる。従って、もしプロセッサが、前の操作と同じ６４バイト・ワードの一部分であった他の３２バイト・セクタのために他の「ｉｃｂｉ」操作を即時に発行するならば、従来のシステムは、２つの隣接した３２バイト・セクタをキルするには単一のシステム・バス操作で十分であったにも拘わらず、第２の６４バイト「ｉｃｂｉ」操作を同じ６４バイト・ワードへ送るであろう。他の問題は、２つの異なったプロセス又はスレッドが、同じバス操作の冗長な実行を生じるキャッシュの首尾一貫性命令を発行したときに生じる。例えば、キャッシュ操作キューは、同じオペランドを有する（即ち、正確に同じ３２バイト・キャッシュ・セクタの上に働く）２つの「ｉｃｂｉ」命令を含むかも知れない。これらの命令は、冗長なバス操作を生じる。
【００１８】
ｉｃｂｉ命令に伴う他の問題は、ｉｃｂｉバス操作がデータ処理システム内の全ての処理ユニットへグローバルにブロードキャストされなければならないことである。例えば、非常に大きなシステム、例えば２５６個のプロセッサを有する非均一メモリ・アクセス（non-uniform memory access(ＮＵＭＡ)）システムでは、ｉｃｂｉ操作は、２５６個の処理ユニットの各々へブロードキャストされなければならない。これは、命令キャッシュの首尾一貫性がソフトウェアによって維持されるアーキテクチャでは、命令を含むキャッシュ・ブロックが修正されるときにｉｃｂｉが発行されなければならないからである。各々のスヌープされたｉｃｂｉ操作は、各々の処理ユニットでキャッシュ階層を上方へ伝搬しなければならない。これは、大きなマルチプロセッサ・システムで非常に深いｉｃｂｉスヌープ・キューを必要とする。更に、これらの問題は、マルチプロセッサ・システムのスケーラビリティに悪影響を及ぼす。更に、競合するｉｃｂｉ命令は、ハードウェア・ロックを使用して解決されなければならない。従って、システム・バス・トラフィックの量を減少させる改善されたキャッシュ・トランザクション処理方法を案出することが望ましい。もし方法が、キャッシュの使用を更に効率的にするならば、更に利点があろう。
【００１９】
【課題を解決するための手段】
本発明に従えば、キャッシュの首尾一貫性は、上位レベル（Ｌ１）キャッシュが、分岐した命令キャッシュ及びデータ・キャッシュ、即ちプログラム命令を記憶するＬ１命令キャッシュ及びオペランド・データを記憶するＬ１データ・キャッシュを有するコンピュータ・システムのキャッシュ階層で維持される。本発明の第１の実施形態において、Ｌ１データ・キャッシュはストアスルー型であり、各々の処理ユニットは更に低レベル（例えば、Ｌ２）キャッシュを有する。低レベル・キャッシュが、Ｌ１命令キャッシュ内のプログラム命令の無効化を要求するキャッシュ操作（即ち、記憶操作又はスヌープされたキル）を受け取るとき、Ｌ２キャッシュは、無効化トランザクション（例えば、ｉｃｂｉ）を命令キャッシュへ送る。Ｌ２キャッシュは、命令及びデータの双方に対して完全に包含的である。本発明の第２の実施形態において、Ｌ１データ・キャッシュはライトバック型であり、プロセッサ・コア内の記憶アドレス・キューが使用されて、パイプラインされたアドレス・シーケンスが、メモリ階層の低レベル、即ちＬ２キャッシュへ連続的に伝搬されるか、又は、Ｌ２キャッシュが存在しなければ、システム・バスへ連続的に伝搬される。もしＬ２キャッシュが存在しなければ、キャッシュ操作は、Ｌ１命令キャッシュに対して直接スヌープされてよい。
【００２０】
本発明の上記及び追加の目的、特徴、及び利点は、以下の詳細な説明で明らかになるであろう。
【００２１】
【発明の実施の形態】
ここで図面、特に図２を参照すると、本発明に従って構成されたマルチプロセッサ・コンピュータ・システムの多数の処理ユニット４０の１つの例示的実施形態が示される。本発明は、マルチプロセッサ・システム、例えば図２のシステムで命令キャッシュの首尾一貫性を取り扱う方法に向けられているが、本発明は、図２に示されない追加のハードウェア・コンポーネント又は異なった相互接続アーキテクチャ（又はこれらの双方）を有するコンピュータ・システムで実施されることができる。従って、本発明は図２に示されるデータ処理システムに限定されないことを、当業者は理解するであろう。
【００２２】
処理ユニット４０は、主としてプロセッサ・コア４２及びＬ２キャッシュ４４を含む。図示されるように、コア４２は、分岐したＬ１命令キャッシュ及びデータ・キャッシュ、即ちプログラム命令及びオペランド・データを一時的に記憶する別々のＬ１命令キャッシュ４６及びデータ・キャッシュ４８を含む。Ｌ１データ・キャッシュ４８は、コア４２内のロード／記憶ユニット（ＬＳＵ）５０と通信する。ＬＳＵ５０は、コア４２の命令ストリームの中にあるロード及び記憶プログラム命令に応答して、ロード（読み出し）及び記憶（書き込み）要求をＬ１データ・キャッシュ４８へ発行する。この実施形態において、Ｌ１データ・キャッシュ４８は、５２で示されるようにストアスルー型キャッシュである。
【００２３】
Ｌ２キャッシュ４４は、命令及びデータの双方に対して完全に包含的である。即ち、Ｌ１命令キャッシュ４６又はＬ１データ・キャッシュ４８内の各々のキャッシュ・ラインは、Ｌ２キャッシュ４４の中に、対応するキャッシュ・ラインを有する。（可能性として、）Ｌ１及びＬ２キャッシュの異なった粒度のために、Ｌ２キャッシュ４４内の単一のキャッシュ・ラインは、命令値及びデータ値の双方を実際に含むことができ、従ってＬ２キャッシュ４４内の各々のキャッシュ・ラインは、Ｌ２ディレクトリ５６内に２つの包含ビットを設けられる。これらのビットの各々は、命令キャッシュ４６及びデータ・キャッシュ４８の各々に対応する。
【００２４】
Ｌ２キャッシュ４４は、Ｌ２キャッシュ・エントリ・アレイ５４及びＬ２ディレクトリ５６を含む。Ｌ２キャッシュ・エントリ・アレイ５４は、実際のプログラム命令又はオペランド・データを含み、Ｌ２ディレクトリ５６は、Ｌ２キャッシュ・エントリ・アレイ５４の中に記憶された様々な値のアドレス、及び各々のラインの首尾一貫性状態並びに包含情報を含む。更に、Ｌ２キャッシュ４４は、１つ又は複数の読み出し／クレイム（ＲＣ）マシン６０及び１つ又は複数のスヌーパ（snooper）マシン６２を含むキャッシュ・コントローラ５８を含む。ＲＣマシン６０は、キャッシュ階層内の高いレベル、即ちＬ１データ・キャッシュ４８から受け取られた要求にサービスする。スヌーパ・マシン６２は、システム・バス６４を介して他の処理ユニットから受け取られた要求にサービスする。Ｌ２キャッシュ４４は、他の通常のエレメント、例えばシステム・バス６４との通信を容易にする追加のインタフェース・ユニット（図示されていない）を含んでよい。
【００２５】
もし第１の処理ユニット４０のＬ２キャッシュ４４が、命令キャッシュ４６に関連づけられてオンにされた包含ビットを有するＬ２キャッシュ・ディレクトリ５６の中のキャッシュ・ラインにヒットする記憶要求を、関連づけられたコア４２から受け取るならば、Ｌ２キャッシュ４４のＲＣマシン６０は、関連づけられたＬ１命令キャッシュ４６へｉｃｂｉを発行して、修正されたキャッシュ・ラインの今や新鮮でなくなったコピーを無効にする。更に、もしＬ２ディレクトリ５６が、キャッシュ・ラインが排他的にローカルで保持されている（例えば、「修正」又は「排他的」状態にある）ことを示さないならば、ＲＣマシン６０は、システム・バス６４の上にキル操作を発行して、キャッシュ・ラインの他の処理ユニットのコピー（もしあれば）を無効にすることを、他の処理ユニット４０内のキャッシュへ通知する。
【００２６】
キル操作が、他の処理ユニット４０のスヌーパ・マシン６２によってシステム・バス６４の上でスヌープされるとき、類似のプロセスが取られる。即ち、システム・バス６４上でキル操作をスヌープすると、第２の処理ユニット４０のスヌーパ・マシン６２は、キル操作に含まれるターゲット・アドレスを利用して、そのＬ２ディレクトリ５６にアクセスする。もしＬ２ディレクトリ５６が、無効以外の首尾一貫性状態を示すならば、スヌーパ・マシン６２は、Ｌ２ディレクトリ５６を更新することによってキャッシュ・ラインを無効にする。更に、スヌーパ・マシン６２は、ターゲット・キャッシュ・ラインに関連づけられた包含ビットをチェックし、命令キャッシュ４６及びデータ・キャッシュ４８の適切なものへ「（back invalidate）」（又はｉｃｂｉ）を送信し、ターゲット・キャッシュ・ラインの他のキャッシュされたコピーを無効にする。このように、本発明に従えば、キャッシュ・コントローラ５８は、システム・バス６４上のキル（又は他の）操作に応答して命令及びデータの双方の首尾一貫性を管理し、ソフトウェアによって生成される別個のｉｃｂｉ操作がシステム・バス６４の上に存在する必要性を排除する。更なる注意として、例えば、システム・バス６４の上に同期化操作を発行することによって、キル操作及び関連の無効化を同期化することが望ましいかも知れない。
【００２７】
従って、本発明は、不必要なｉｃｂｉトランザクションを排除することによって、バス・トラフィックを減少させる。実際に、本発明では、全てのｉｃｂｉバス操作が排除されてよく、それによって全体的なシステム・パフォーマンス及びスケーラビリティが改善される。当業者は、このアプローチが、コードを修正するために使用されるパイプラインされたページ・コピー手順に対して特に有利であることを理解するであろう。典型的には多数の（例えば、３２の）連続したｉｃｂｉバス操作を生じる。
【００２８】
本発明に従って構成されたマルチプロセッサ・データ処理システムの処理ユニット７０の代替の実施形態が、図３に示される。処理ユニット７０は、再び主としてプロセッサ・コア７２及び包含的Ｌ２キャッシュ７４を含む。プロセッサ・コア７２は、分岐したＬ１命令キャッシュ７６及びデータ・キャッシュ７８を含む。これらＬ１キャッシュの各々は、コア７２のロード／記憶ユニット（ＬＳＵ）８０と通信する。この実施形態において、Ｌ１データ・キャッシュ７８は、ストアイン型のキャッシュである（即ち、ストアスルー型ではない）。パイプラインされたアドレス・シーケンスを、プロセッサ・コア内のロード／記憶ユニット８０からＬ２キャッシュ７４へ連続的に伝搬するため、記憶アドレス・キュー８２が使用される。
【００２９】
キャッシュ・ラインのコピーも命令キャッシュ７６の中に保持されていることを示すように設定された包含ビットを有するキャッシュ・ラインにヒットするプロセッサ・コアからの記憶アドレスを受け取ったことに応答して、Ｌ２キャッシュ７４内のＲＣマシンは、ｉｃｂｉ信号を命令キャッシュ７６へ送り、キャッシュ・ラインを無効にする。更に、前述したように、Ｌ２キャッシュ・ディレクトリ内で、命令キャッシュ７６内に包含されているとしてマークされたキャッシュ・ラインにヒットするキル・トランザクションのスヌーピング（snooping）に応答して、Ｌ２キャッシュ７４は、ｉｃｂｉ信号を生成する。
【００３０】
本発明に従ったデータ処理システムの他の代替実施形態が、図４に示される。図４は、図３の処理ユニットに類似した処理ユニット９０を示す。処理ユニット９０は、Ｌ１命令キャッシュ９２、Ｌ１データ・キャッシュ９４、ロード／記憶ユニット９６、及び記憶アドレス・キュー９８を含むが、Ｌ２キャッシュを含まない。Ｌ１データ・キャッシュ９４は、ストアイン型（ライトバック型）キャッシュ又はストアスルー型キャッシュのいずれでもよい。
【００３１】
この実施形態において、命令キャッシュ９２は、記憶アドレス・キュー９８及びシステム・バス１００の双方をスヌープし、記憶操作又はキル操作を検出したことに応答して、そのディレクトリ内のスヌープ・ヒットに応答するターゲット・キャッシュ・ラインを無効にする。従って、この実施形態でも、ｉｃｂｉ操作は、命令を含むキャッシュ・ラインの修正に応答して処理ユニット９０の間でシステム・バス１００の上を転送されることはない。なぜなら、命令キャッシュ・ラインの首尾一貫性は、ソフトウェアではなくキャッシュ・ハードウェアによって維持されるからである。もしソフトウェアがｉｃｂｉ命令を明示的に発行するならば、本発明の１つの実施形態におけるハードウェアが、ｉｃｂｉをノーオプ（noop）（無視）してよい。
【００３２】
本発明は、特定の実施形態を参照して説明されたが、この説明は限定的な意味に解釈されてはならない。開示された実施形態の様々な修正、及び本発明の代替の実施形態は、本発明の説明を参照すれば当業者に明らかになるであろう。従って、添付のクレイムに定義された本発明の趣旨及び範囲から逸脱することなく、そのような修正を行うことができると思われる。
【００３３】
まとめとして、本発明の構成に関して以下の事項を開示する。
（１）コンピュータ・システムの処理ユニットのキャッシュ階層で首尾一貫性を維持する方法であって、
少なくとも１つのプログラム命令に対応する値を、前記処理ユニットの上位レベル命令キャッシュ及び下位レベル・キャッシュに同時に保持し、
前記下位レベル・キャッシュで、前記値の無効化を要求する操作を受け取り、前記受け取りステップに応答して、前記値を識別する無効化トランザクションを、前記下位レベル・キャッシュから前記上位レベル命令キャッシュへ送る
ことを含む方法。
（２）前記受け取りステップは前記処理ユニットの前記コアから前記操作を受け取る、上記（１）に記載の方法。
（３）前記処理ユニットが第１の処理ユニットであり、前記受け取りステップは、前記コンピュータ・システムのシステム相互接続を介して、第２の処理ユニットから前記操作を受け取る、上記（１）に記載の方法。
（４）更に、前記下位レベル・キャッシュにおいて、前記値が前記上位レベル命令キャッシュの中に保持されているかどうかを示す包含ビットを維持することを含む、上記（１）に記載の方法。
（５）前記包含ビットが設定されていることを決定する前記更なるステップに応答して、前記送るステップが実行される、上記（４）に記載の方法。
（６）更に、前記無効化トランザクションを前記下位レベル・キャッシュと同期化させるステップを含む、上記（１）に記載の方法。
（７）前記送るステップがｉｃｂｉトランザクションを送る、上記（１）に記載の方法。
（８）システム・メモリ装置と、
少なくとも第１及び第２の処理ユニットと、
前記システム・メモリ装置と前記第１及び第２の処理ユニットとを結合する相互接続と、
前記第１の処理ユニットは、上位レベル命令キャッシュ、上位レベル・データ・キャッシュ、及び下位レベル結合キャッシュを有し、
前記第１処理ユニットの前記下位レベル・キャッシュはコントローラを含み、前記コントローラは、前記上位レベル命令キャッシュにロードされた少なくとも１つのプログラム命令に対応する値の無効化を要求するキャッシュ操作の受け取りに応答して、前記値を識別する無効化要求を、前記第１の処理ユニットの前記上位レベル命令キャッシュへ送る、
コンピュータ・システム。
（９）更に、前記第１の処理ユニットは処理コアを含み、ここで前記コントローラは前記第１の処理ユニットの前記処理コアから前記キャッシュ操作を受け取る、上記（８）に記載のコンピュータ・システム。
（１０）前記コントローラは、前記相互接続を介して前記第２の処理ユニットから前記操作を受け取る、上記（８）に記載のコンピュータ・システム。
（１１）前記下位レベル・キャッシュは、前記値が前記上位レベル命令キャッシュの中に保持されているかどうかを示す包含ビットを含む、上記（８）に記載のコンピュータ・システム。
（１２）前記コントローラは、前記包含ビットが設定されていることの決定に応答して前記無効化要求を送る、上記（１１）に記載のコンピュータ・システム。
（１３）前記コントローラは前記無効化を同期化する、上記（８）に記載のコンピュータ・システム。
（１４）前記無効化要求がｉｃｂｉ要求である、上記（８）に記載のコンピュータ・システム。
（１５）プログラム命令を実行する少なくとも１つの実行ユニットと、
下位レベル結合キャッシュ及び前記少なくとも１つの実行ユニットへ結合された上位レベル命令キャッシュ及び上位レベル・データ・キャッシュとを有し、
前記下位レベル・キャッシュはコントローラを含み、
前記コントローラは、前記上位レベル命令キャッシュにロードされた少なくとも１つのプログラム命令に対応する値の無効化を要求するキャッシュ操作の受け取りに応答して、前記値を識別する無効化要求を、前記上位レベル命令キャッシュへ送る、
処理ユニット。
（１６）前記コントローラは、前記少なくとも１つの実行ユニットから前記キャッシュ操作を受け取る、上記（１５）に記載の処理ユニット。
（１７）前記コントローラは、前記相互接続を介して第２の処理ユニットから前記操作を受け取る、上記（１５）に記載の処理ユニット。
（１８）前記下位レベル・キャッシュは、前記値が前記上位レベル命令キャッシュの中に保持されているかどうか示す包含ビットを含む、上記（１５）に記載の処理ユニット。
（１９）前記コントローラは、前記包含ビットが設定されていることの決定に応答して前記無効化要求を送る、上記（１８）に記載の処理ユニット。
（２０）前記コントローラは前記無効化を同期化する、上記（１５）に記載の処理ユニット。
（２１）前記無効化要求がｉｃｂｉ要求である、上記（１５）に記載の処理ユニット。
【図面の簡単な説明】
【図１】  従来技術のマルチプロセッサ・コンピュータ・システムを示すブロック図である。
【図２】  本発明に従って構成されたマルチプロセッサ・コンピュータ・システムの処理ユニットの１つの実施形態を示すブロック図であって、ストアスルー型Ｌ１データ・キャッシュを示し、Ｌ２キャッシュがキル（「ｉｃｂｉ」）操作をＬ１命令キャッシュへ発行することを示す図である。
【図３】  本発明に従って構成されたマルチプロセッサ・コンピュータ・システムの処理ユニットの代替実施形態を示すブロック図であって、ストアイン（ライトバック）型Ｌ１データ・キャッシュを示し、Ｌ２キャッシュがキル（「ｉｃｂｉ」）操作をＬ１命令キャッシュへ発行することを示す図である。
【図４】  本発明に従って構成されたマルチプロセッサ・コンピュータ・システムの処理ユニットの他の実施形態を示すブロック図であって、図３と類似のストアイン（ライトバック）型Ｌ１データ・キャッシュを示す図である。
【符号の説明】
１０  マルチプロセッサ・コンピュータ・システム
１２ａ、１２ｂ  処理ユニット（プロセッサ）
１４  入力／出力（Ｉ／Ｏ）装置
１６  システム・メモリ装置
１８  ファームウェア
２０  バス（汎用相互接続）
２２  プロセッサ・コア
２４  レベル１（Ｌ１）命令キャッシュ
２６  レベル１（Ｌ１）データ・キャッシュ
２８  集積チップ
３０  レベル２（Ｌ２）キャッシュ
４０  処理ユニット
４２  プロセッサ・コア
４４  Ｌ２キャッシュ
４６  Ｌ１命令キャッシュ
４８  Ｌ１データ・キャッシュ
５０  ロード／記憶ユニット（ＬＳＵ）
５４  Ｌ２キャッシュ・エントリ・アレイ
５６  Ｌ２ディレクトリ
５８  キャッシュ・コントローラ
６０  読み出し／クレイム（ＲＣ）マシン
６２  スヌーパ・マシン
６４  システム・バス
７０  処理ユニット
７２  プロセッサ・コア
７４  Ｌ２キャッシュ
７６  Ｌ１命令キャッシュ
７８  Ｌ１データ・キャッシュ
８０  ロード／記憶ユニット（ＬＳＵ）
８２  記憶アドレス・キュー
９０  処理ユニット
９２  Ｌ１命令キャッシュ
９４  Ｌ１データ・キャッシュ
９６  ロード／記憶ユニット
９８  記憶アドレス・キュー
１００  システム・バス
【図１】
0003714617.tif 000002
【図２】
0003714617.tif 000003
【図３】
0003714617.tif 000004
【図４】
0003714617.tif 000005