(57)【特許請求の範囲】
【請求項１】
1つ以上のプロセッサとノードコントローラとメモリユニットとをそれぞれ含み、相互にシステム結合網で結合された複数のノードを有し、
各メモリユニットは、それぞれ該複数のノードのプロセッサ間で共有される主記憶の一部分を構成する複数の主記憶部分の一つを有し、
該プロセッサは該メモリユニットから取ってきたデータを保持するキャッシュを有し、
該ノードコントローラは、該プロセッサの該キャッシュに保持されたデータのアドレスタグとキャッシュ状態を保持するキャッシュコピータグと、該キャッシュコピータグを管理するキャッシュコピータグ管理部と、キャッシュリプレース制御スイッチと、を有する、マルチプロセッサシステムのキャッシュ一貫性制御方法であって、
該プロセッサからのキャッシュミスの要求に従ってメモリユニットへのアクセスを行う時に該要求元のノードコントローラは他のノードコントローラに対してスヌープ要求を該システム結合網を介してブロードキャストし、
同時に該要求元ノードの該キャッシュコピータグを検索し、
該アドレスが自ノードのキャッシュコピータグに登録されていた時に、該キャッシュコピータグ管理部は先行応答通知を発行し、
ブロードキャストした該スヌープ要求に対するスヌープ結果の集計を待たずに該メモリユニットから返ってきた応答データを該プロセッサへと返し、
該キャッシュコピータグのキャッシュ状態には、キャッシュがないことを示すI、共有状態であることを示すS、占有状態であることを示すEの少なくとも3通りの状態を有し、
該プロセッサからのキャッシュミス要求が共有状態を許す要求だった時、該要求元ノードの該キャッシュコピータグを検索した結果、当該アドレスのキャッシュ状態がSまたはEであった場合、あるいは該プロセッサからのキャッシュミス要求が占有状態のみを許す要求だった時、該要求元ノードの該キャッシュコピータグを検索した結果、当該アドレスのキャッシュ状態がEであった場合に、該キャッシュコピータグにヒットしたとして、ブロードキャストした該スヌープ要求に対するスヌープ結果の集計を待たずに該メモリユニットから返ってきた応答データを該プロセッサへと返し、
該プロセッサの該キャッシュからデータが追い出された場合に、該キャッシュコピータグの該当するエントリのキャッシュ状態を変更するかどうかを、該キャッシュリプレース制御スイッチの状態によって切り替える、ことを特徴とするマルチプロセッサシステムのキャッシュ一貫性制御方法。
【請求項２】
該プロセッサの該キャッシュからデータが追い出された場合に、
該データを保持するメモリユニットがどのノードに属するかを識別する手段を有し、
該メモリユニットが該キャッシュから追い出されたノードに属さない場合には、該キャッシュコピータグの該当するエントリのキャッシュ状態をIへと変更し、
該メモリユニットが該キャッシュから追い出されたノードに属する場合には、該キャッシュコピータグの該当するエントリのキャッシュ状態を変更しないことを特徴とする、請求項１に記載のマルチプロセッサシステムのキャッシュ一貫性制御方法。
【請求項３】
該キャッシュコピータグの各エントリには、アドレスタグとキャッシュ状態に加えて追い出されたことを示すリプレースフラグを有し、
該プロセッサのキャッシュミスの要求に従ってデータをプロセッサがキャッシュした場合には、
該エントリのリプレースフラグはクリアされ、
該プロセッサの該キャッシュからデータが追い出された場合に、該キャッシュコピータグ内の該データに対応するエントリの該リプレースフラグをセットし、
他ノードからのスヌープ要求に従って該キャッシュコピータグを検索する場合に、該リプレースフラグがセットされていた場合には、キャッシュ状態によらずIであると応答し、
自ノードのキャッシュミス要求に従って該キャッシュコピータグを検索する場合には、該リプレースフラグがセットされていても該キャッシュ状態を応答することを特徴とする、
請求項１に記載のマルチプロセッサシステムのキャッシュ一貫性制御方法。
【請求項４】
プロセッサの接続されたプロセッサバスと、複数の該プロセッサにより共有される主記憶の一部分を構成する複数の主記憶部分の一つを有するメモリユニットと、システム結合網と、を接続するためのノードコントローラであって、  該プロセッサが該メモリユニットから取ってきた該プロセッサのキャッシュに保持されたデータのアドレスタグとキャッシュ状態を保持するキャッシュコピータグと、該キャッシュコピータグを管理するキャッシュコピータグ管理部と、キャッシュリプレース制御スイッチと、を有し、
該プロセッサからのキャッシュミスの要求に従ってメモリユニットへのアクセスを行う時に、他のノードコントローラに対してスヌープ要求を該システム結合網を介してブロードキャストし、
同時に該キャッシュミスの要求元ノードの該キャッシュコピータグを検索し、該アドレスが自ノードのキャッシュコピータグに登録されていた場合に、
該キャッシュコピータグ管理部は、先行応答通知を発行し、ブロードキャストした該スヌープ要求に対するスヌープ結果の集計を待たずに該メモリユニットから返ってきた応答データを該プロセッサへと返し、
該キャッシュコピータグ管理部が管理する前記キャッシュコピータグのキャッシュ状態にはキャッシュがないことを示すI、共有状態であることを示すS、占有状態であることを示すEの少なくとも3通りの状態を有し、
前記プロセッサからのキャッシュミス要求が共有状態を許す要求だった時、要求元ノードのキャッシュコピータグを検索した結果、当該アドレスのキャッシュ状態がSまたはEであった場合、あるいはプロセッサからのキャッシュミス要求が占有状態のみをゆする要求だった時、要求元ノードの該キャッシュコピータグを検索した結果、当該アドレスのキャッシュ状態がEであった場合に、該キャッシュコピータグにヒットしたとして、ブロードキャストした前記スヌープ要求に対するスヌープ結果の集計を待たずに前記メモリユニットから返ってきた応答データを該プロセッサへと返し、
前記プロセッサのキャッシュからデータが追い出された場合に、前期キャッシュコピータグの該当するエントリのキャッシュ状態を変更するかどうかを、前記キャッシュリプレース制御スイッチの状態によって切り替える、ことを特徴とするノードコントローラ。
【請求項５】
前記プロセッサのキャッシュからデータが追い出された場合に、該データを保持するメモリユニットがどのノードに属するかを識別する手段を有し、
前記メモリユニットが前記キャッシュから追い出されたノードに属さない場合には、前記キャッシュコピータグの該当するエントリのキャッシュ状態をIへと変更し、前記メモリユニットが前記キャッシュから追い出されたノードに属する場合には、前記キャッシュコピータグの該当するエントリのキャッシュ状態を変更しないことを特徴とする請求項４に記載のノードコントローラ。
【請求項６】
前記キャッシュコピータグの各エントリには、アドレスタグとキャッシュ状態に加えて追い出されたことを示すリプレースフラグを有し、
前記プロセッサのキャッシュミスの要求に従ってデータをプロセッサがキャッシュした場合には、該当するエントリの前記リプレースフラグはクリアされ、
前記プロセッサの該キャッシュからデータが追い出された場合に、該キャッシュコピータグ内の該データに対応するエントリの前記リプレースフラグをセットし、
他ノードからのスヌープ要求に従って前記キャッシュコピータグを検索する場合に、前記リプレースフラグがセットされていた場合には、キャッシュ状態によらずIであると応答し、
自ノードのキャッシュミス要求に従って前記キャッシュコピータグを検索する場合には、前記リプレースフラグがセットされていても前記キャッシュ状態を応答することを特徴とする請求項４に記載のノードコントローラ。
【請求項７】
一つ以上のプロセッサと、一つ以上のメモリユニットと、それらの間を接続するノードコントローラとを含み、相互にシステム結合部を介して接続された複数のノードを有し、
各メモリユニットは、それぞれ該複数のノードのプロセッサにより共有される主記憶の一部分を構成する複数の主記憶部分の一つを有し、
該プロセッサから発行される該メモリユニットへのアクセス命令には、プロセッサのキャッシュ上で他のプロセッサキャッシュとのデータの共有が可能なリード命令と、他のプロセッサのキャッシュとの共有が不可能なリードインバリデート命令の少なくとも2種類の命令を含み、
各ノードコントローラは1つ以上の設定用スイッチを有し、該設定用スイッチは該ノードに含まれる該プロセッサに対するスヌープ動作をコントロールするスヌープフィルタスイッチを有し、
該スヌープフィルタスイッチは、有効な場合には他ノード発のスヌープトランザクションに対して該ノード上のプロセッサに対するスヌープが必要ない場合にはスヌープを該プロセッサバス上に発行せず、無効な場合には必ずスヌープをプロセッサバス上に発行する効果を持つマルチプロセッサシステムであって、
第一のノードは少なくとも二つのプロセッサを有し、第二のノードのスヌープフィルタスイッチのみをスヌープフィルタ無効と設定した上で、
前記第一のノードの該メモリユニットに対応するアドレスに対して、前記第一のノードに属する第一のプロセッサからリード命令を発行し、前期第二のノードの該プロセッサバス上に対応するアドレスのスヌープトランザクションが発行され、その後前記第一のノードの該プロセッサバス上に要求したリードに対するデータが応答された後に、続けて第一のノードに属する第二のプロセッサから同一のアドレスに対してリード命令を発行した場合に、
前記第一のプロセッサが発行したリード命令にかかった時間よりも早く前記第二のプロセッサが発行したリードに対するデータが前記第一のノードの該プロセッサバス上に応答されることを特徴とし、
さらに一方、前記第二のノードの該メモリユニットに対応するアドレスに対して、前記第一のノードに属する前記第一のプロセッサからリード命令を発行し、前記第二のノードの該プロセッサバス上に対応するアドレスのスヌープトランザクションが発行され、その後第一のノードの該プロセッサバス上に要求したリードに対するデータが応答された後に、続けて前記第一のノードに属する第二のプロセッサから同一のアドレスに対してリード命令を発行した場合に、
前記第一のプロセッサが発行したリード命令にかかった時間と同一の時間で、前記第二のプロセッサが発行したリードに対するデータが第一のノードの該プロセッサバス上に応答されることを特徴とするマルチプロセッサシステム。
【請求項８】
該第一のノード、第二のノードに加えて第三のノードが存在し、第三のノードの該メモリユニット上に対応するアドレスに対して、第一のノードに属する第一のプロセッサからリードインバリデート命令が発行され、その後第二のノードの該プロセッサバス上に対応するアドレスのスヌープトランザクションが発行され、その後第一のノードの該プロセッサバス上に要求したリードインバリデートに対するデータが応答された後に、
続けて第二のノードに属する一つのプロセッサから、該リードインバリデート命令と同一のアドレスに対してリード命令を発行し、第二のノードの該プロセッサバス上に要求したリードに対するデータが応答された後に、
さらに続けて第一のノードに属する第二のプロセッサから、第一のプロセッサが発行したのと同一のアドレスに対してリードインバリデート要求を発行した場合に、
第一のプロセッサが発行したリードインバリデートにかかった時間と同一の時間で、第二のプロセッサが発行したリードインバリデートに対するデータが第一のノードの該プロセッサバス上に応答されることを特徴とする請求項７に記載のマルチプロセッサシステム。
【請求項９】
該ノードコントローラ内の該設定スイッチにキャッシュヒット制御スイッチを有し、
第一のノードと第二のノードがあった時に、第一のノードは少なくとも二つのプロセッサを有し、第二のノードのスヌープフィルタスイッチのみをスヌープフィルタ無効と設定し、
第一のノードの該メモリユニットに対応するアドレスに対して、第一のノードに属する第一のプロセッサからリード命令を発行し、第二のノードの該プロセッサバス上に対応するアドレスのスヌープトランザクションが発行され、その後第一のノードの該プロセッサバス上に要求したリードに対するデータが応答された後に、
続けて第一のノードに属する第二のプロセッサから同一のアドレスに対してリード命令を発行した場合に、
該キャッシュヒット制御スイッチが有効な時には、第一のプロセッサが発行したリード命令にかかった時間よりも早く第二のプロセッサが発行したリードに対するデータが第一のノードの該プロセッサバス上に応答され、
該キャッシュヒット制御スイッチが無効な時には、第一のプロセッサが発行したリード命令にかかった時間と同一の時間で第二のプロセッサが発行したリードに対するデータが第一のノードの該プロセッサバス上に応答されることを特徴とする請求項７に記載のマルチプロセッサシステム。
【請求項１０】
システム結合部を解して相互に接続され、１つ以上のプロセッサが接続されたプロセッサバスと、１つ以上のメモリユニットとを結合するノードコントローラをそれぞれ含む複数のノードを有するマルチプロセッサシステムにおけるキャッシュ一貫性制御方法であって、
各ノードコントローラは、自ノードに属するプロセッサがキャッシュしている全てのアドレスのアドレスタグとキャッシュ状態を保持するキャッシュコピータグと、キャッシュリプレースが有効か無効かを設定するキャッシュリプレース制御スイッチと、を有し、
キャッシュミスによりプロセッサバスへとメモリアクセス要求が発行された際に、自ノードのスヌープ結果キャッシュ間転送があったかどうかを判定するステップと、
キャッシュ間転送がなかった場合に該当アドレスに対するメモリリード要求をメモリに発行し、スヌープ要求を各ノードへブロードキャストするステップと、
自ノードの該キャッシュコピータグを検索し、当該アドレスに対応するエントリがあるかどうかを判定するステップと、
エントリが存在した場合にはキャッシュ状態が占有状態を示すかどうかを判定するステップと、
キャッシュ状態が占有状態ではなかった場合には共有状態を示していてかつ要求されたキャッシュミスが共有状態を許すかどうかを判定するステップと、
当該エントリが存在していた場合には各ノードからのスヌープ結果を待つステップをスキップしてメモリからデータが返るのを待つステップと、
各ノードからのスヌープ結果を待つステップと、
各ノードからのスヌープ結果により最新データがメモリにあるかどうかを判定するステップと、
最新データがメモリにある場合にメモリからデータが返るのを待つステップと、
最新データがメモリにない場合にはキャッシュ間転送のデータが返るのを待つステップと、
返ってきたデータをプロセッサに返すステップと、
前記キャッシュからのリプレース時に、前記キャッシュリプレース制御スイッチが有効だった場合に、前記キャッシュコピータグの対応するエントリのキャッシュ状態を無効へと変更するステップと、を含むことを特徴とするキャッシュ一貫性制御方法。
【請求項１１】
前記キャッシュからのリプレース時に、前記キャッシュのメモリ位置を判定するステップと、
前記メモリ位置が他ノードだった場合に、前記キャッシュコピータグの対応するエントリのキャッシュ状態を無効へと変更するステップを含むことを特徴とする請求項１０に記載のキャッシュ一貫性制御方法。
【請求項１２】
前記キャッシュコピータグのエントリにはリプレースされたラインであることを示すリプレースフラグを有し、
キャッシュコピータグにエントリを確保する時に該リプレースフラグをクリアするステップと、
前記キャッシュからのリプレース時に、前記キャッシュコピータグの対応するエントリのリプレースフラグをセットするステップと、
他ノードからキャッシュコピータグ探索の要求が来た時に、要求キャッシュラインが前記キャッシュコピータグ中にあるかどうかを判定するステップと、
要求キャッシュラインが前記キャッシュコピータグ中にあった場合に、前記リプレースフラグがセットされているかどうかを判定するステップと、
前記リプレースフラグがセットされていた場合にはキャッシュ状態を無効に変更し、前記リプレースフラグをクリアし、かつ探索にはヒットしなかったと応答するステップと、
前記リプレースフラグがセットされていない場合には、探索にヒットしたと応答するステップを含むことを特徴とする請求項１０に記載のキャッシュ一貫性制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステム、およびチップセット、およびキャッシュ一貫性制御方法に関係し、キャッシュコピータグを利用したメモリアクセスレイテンシの短縮技術に関する。
【背景技術】
【０００２】
近年の計算機機能の向上とそれに伴い計算機に求められる要求の増大に伴い、特にサーバの分野では複数のプロセッサを搭載したマルチプロセッサシステムが多く見られるようになってきた。同一のメモリユニットやプロセッサバスに全てのＣＰＵが結合されていると、メモリインタフェースやプロセッサバスがボトルネックとなり性能が向上しないという問題点がある。そこで４ＣＰＵを超えるような中〜大規模なマルチプロセッサシステムを構成する場合、２〜４程度のＣＰＵを搭載したノードを複数並べることで負荷がノード間で分散するようにして性能向上を図ることが多い。この時各ＣＰＵから全てのメモリユニットが等距離になるように配置する構成をＵＭＡ（Uniform Memory Access）と呼ぶ。一方、各ノードにメモリユニットを搭載したような構成では、ノード内のメモリをアクセスするのにかかる時間と他ノードのメモリにアクセスするのにかかる時間に差が出ることが多い。このような構成をＮＵＭＡ（Non-Uniform Memory Access）と呼び、特にハードウェアにより各プロセッサのキャッシュ一貫性制御が行われる場合をｃｃＮＵＭＡ（Cache Coherent Non-Uniform Memory Access）と呼ぶ。ＵＭＡについては非特許文献１の６１ページに詳しい。ｃｃＮＵＭＡについては非特許文献２に詳しい。従来ｃｃＮＵＭＡはＵＭＡに比べ、ローカルメモリとリモートメモリのアクセスの差が大きいために、性能を出すのが難しいと言われてきた。しかし近年ではキャッシュ容量の向上（メモリアクセスの減少）、高速なシステム結合網の開発などにより、ローカルとリモートのアクセス時間の差は縮まり、またＯＳやアプリケーションでもｃｃＮＵＭＡを意識してよく使うデータをローカルメモリへと配置する、などの工夫がなされることによりｃｃＮＵＭＡでも性能が出し易くなってきた。
【０００３】
一方複数ノードから構成されるマルチプロセッサシステムでは、プロセッサ間のキャッシュ一貫性制御が大きな課題となる。キャッシュ一貫性制御方式として代表的な方式としてはブロードキャストスヌープ方式とディレクトリ方式がある。ブロードキャストスヌープ方式は、通常はバスを介して行われるスヌープをブロードキャストによって擬似的に行う方式である。要求元のノードから全てのノードに対してスヌープ要求がブロードキャストされ、キャッシュを持っているかどうかを応答する。どのノードもキャッシュしていない場合でも必ずスヌープ要求がブロードキャストされるため、無駄なトラフィックが生じる可能性がある。もし最新データのキャッシュを持っていた場合には直接要求元のノードへと応答される。一方、ディレクトリ方式は、要求されたアドレスのホームノードにあるディレクトリでどのノードがキャッシュしているかどうかを管理し、ディレクトリの情報に従ってスヌープを行う方式である。ディレクトリ方式の場合、キャッシュしているノードがいない場合にはスヌープを送らないため効率的である。しかし一方、他のノードがキャッシュしていた場合、要求元ノード→ホームノード→キャッシュしているノード、の順にスヌープ要求が渡るため、応答が返るまでのレイテンシが伸びるという問題点がある。まとめると、ブロードキャストスヌープ方式は、スヌープ要求が常にブロードキャストされるためトラフィックで無駄が出る可能性があるが、他ノードがキャッシュを持っていた場合の応答は速い。一方、ディレクトリ方式は、スヌープ要求を適切なノードにしか送らないためトラフィックの効率は良いが、他ノードがキャッシュを持っていたい場合の応答が遅れるという問題点がある。
【０００４】
ブロードキャストスヌープ方式では、キャッシュコピータグを利用してスヌープフィルタを行う改良方式が考えられる。たとえば特許文献１で示されている。キャッシュコピータグとは、そのノードのプロセッサキャッシュが保持している全てのラインのアドレスタグとキャッシュ状態のみを管理している（ディレクトリの場合は、そのノードだけでなく、全てのノードの全てのプロセッサでキャッシュされている可能性のあるアドレス全てを保持する必要がある）。プロセッサからの要求に従って新たなデータをメモリから取って来た場合、必ず要求元ノードのキャッシュコピータグへと登録した上でプロセッサにデータを応答する。他ノードからブロードキャストされたスヌープ要求を受けたノードでは、まずキャッシュコピータグを検索し、該当するラインが登録されているかどうかを見る。もし検索して見つからない場合や、あるいはキャッシュ状態が無効（I）である場合には、当該ラインはプロセッサによってキャッシュされていないことになるので、プロセッサバスにスヌープ要求を上げる必要なく応答することができる。もし検索して当該ラインが見つかり、スヌープを上げる必要のあるキャッシュ状態だった場合には、プロセッサバスへとスヌープ要求を上げ、キャッシュの無効化が終わってからスヌープ応答を返す。キャッシュコピータグを利用することで、プロセッサバスに対するトラフィックの削減とスヌープ応答にかかる時間の短縮の２つの効果を得ることができる。
【０００５】
【特許文献１】特開平１０−２２２４２３号公報
【０００６】
【非特許文献１】Ｕｎｉｓｙｓ  Ｔｅｃｈｎｏｌｏｇｙ  Ｒｅｖｉｅｗ,第８４号,FEB.2005、55〜69頁、「ＥＳ７０００によるミッション・クリティカルＬｉｎｕｘの実現」
【非特許文献２】インターネット、hppt://phase.phase/o2k/technical_doc_library/、「Ｏｒｉｇｉｎ  ｃｃＮＵＭＡサーバ  真のスケーラビリティ」
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ｃｃＮＵＭＡ構成のＳＭＰ機において、ブロードキャストスヌープ方式を採用した場合にメモリアクセスにかかる時間（レイテンシ）を考える。一般的にメモリの読み出しにはスヌープ処理よりも大きな時間がかかる。また、ｃｃＮＵＭＡ構成ではリモートノードに対する処理は、ローカルノードに対する処理よりも時間がかかる。すなわち、メモリアクセスに必要な処理の時間を短い順に並べると次の２つの順のどちらかとなる場合が多い：
(1) ローカルスヌープ＜ローカルメモリデータ＜リモートスヌープ＜リモートメモリデータ
(2) ローカルスヌープ＜リモートスヌープ＜ローカルメモリデータ＜リモートメモリデータ
ローカルメモリデータとリモートスヌープのどちらが速いかは、ノード間接続やメモリのつくりによって変わってくる。
【０００８】
上記の２つのケースにおいて、ブロードキャストスヌープ方式でメモリアクセスする場合を考える。ここでは他ノードでキャッシュされていないと仮定する。すると、メモリノードが他ノードの場合には、(1)(2)どちらのケースでもリモートメモリデータがボトルネックとなる。一方、メモリノードが自ノード場合には、(1)ではリモートスヌープがボトルネックとなり、(2)ではローカルメモリデータがボトルネックとなる。(2)のケースは結局ローカルメモリデータがボトルネックとなっているため、これ以上速くはできない。仮にディレクトリ方式を採用していたとしてもやはり同じだけの時間がかかる。しかし(1)のケースでは、ローカルメモリデータが既に返っているにも関わらず、リモートスヌープが返ってきていないために待たされる、という時間が発生している。このケースでは、仮にディレクトリ方式を採用していた場合には、データがメモリから返った時点でプロセッサに返せるため、明らかにディレクトリ方式に比べて余計に時間がかかってしまっている。
【０００９】
本発明の目的は、ディレクトリ方式のように最悪ケース（他ノードでキャッシュされているケース）のメモリアクセスレイテンシを悪化させることなく、自ノードメモリアクセス時のレイテンシを改善することにある。
【課題を解決するための手段】
【００１０】
ブロードキャストスヌープ方式では、キャッシュコピータグを他ノードからブロードキャストされたスヌープ要求に対してのみ使っていた。本発明の方式では、自ノードからブロードキャストされたスヌープ要求が順序付けされた時点で、自ノードのキャッシュコピータグを検索する。もし当該ラインが自ノードのキャッシュコピータグに登録されており、かつ（１）キャッシュ状態が占有（Ｅ）であるまたは（２）キャッシュ状態が共有（Ｓ）でありかつリード要求である、場合には、スヌープ応答結果集計部に対して先行応答通知を発行する。先行応答通知を受けたスヌープ応答結果集計部は、他ノードからのスヌープ応答を待つことなくスヌープ処理を完了できる。すなわち、自ノードのメモリデータが返ってきた時点で、他ノードからのスヌープ応答が返る前にプロセッサに対してデータを返すことができる。
【００１１】
さらにローカルメモリ上のデータ読み出しの際に、自ノードのキャッシュコピータグのヒット率を高めるために、自ノードでキャッシュからラインがリプレースされた場合に、キャッシュコピータグを更新する処理に変更を加える。リプレースされたラインのメモリが他ノードだった場合には、リプレースされた結果をキャッシュコピータグに反映する。すなわち当該ラインのキャッシュ状態を無効（Ｉ）とする。もしリプレースされたラインのメモリが自ノードだった場合には、リプレースされたラインを更新しない。このようにすることで、自ノードのキャッシュからリプレースされたラインに対して、他ノードからアクセスされる前に再び自ノードのプロセッサがアクセスした場合に、キャッシュコピータグへとヒットし、メモリアクセスレイテンシを短縮できる効果がある。
【００１２】
あるいはキャッシュコピータグに、リプレースフラグを新たに設け、キャッシュがリプレースされた際にはリプレースフラグをセットする。リプレースフラグのセットされたラインは、他ノードからのスヌープ要求に対しては無効（Ｉ）として振舞う。すなわち、プロセッサバスに対して余計なスヌープを上げる必要はない。一方、自ノードにおけるスヌープ要求に対しては元のキャッシュ状態として振舞う。このようにすることで、自ノードのキャッシュからリプレースされたラインに対して再び自ノードのプロセッサがアクセスした場合に、キャッシュコピータグへとヒットし、メモリアクセスレイテンシを短縮できる効果がある。
【発明の効果】
【００１３】
本発明により、自ノードキャッシュコピータグにヒットした場合、他ノードのスヌープ応答を待たずにデータを応答することが可能になる。各ノードにメモリが分散したｃｃＮＵＭＡのシステムでは、ローカルメモリとリモートメモリのアクセス時間に差があることが多く、特に本発明は、ローカルメモリ上のデータ読み出しの際に効果が大きい。またローカルメモリのヒット率を高めるための方法を併用することで、さらにキャッシュコピータグのヒット率を上げることも可能となる。
【００１４】
図１１に本発明の方式とブロードキャストスヌープ方式、ディレクトリ方式を比較した表を示す。自ノードメモリのデータに対して自ノードコピータグにヒットした場合、ディレクトリ方式と比べるとブロードキャストスヌープ方式ではスヌープ応答を待つ必要があるため遅くなる。本発明ではその場合ディレクトリ方式と同等のレイテンシでデータを返せる。一方、他ノードメモリで他ノードにキャッシュされていた場合、ディレクトリ方式では要求元ノード→ホームノード→キャッシュノード→要求元ノードの順に渡る必要があるため、レイテンシが悪化する。本発明ではその場合でもブロードキャストスヌープ方式と同等のレイテンシで済む。このように本発明はレイテンシの面においてブロードキャストスヌープ方式とディレクトリ方式の両方の利点を兼ね備えている（ただし、常にスヌープをブロードキャストする分トラフィックはディレクトリ方式に比べて増加する）。
【００１５】
本発明の効果を定量的に示す。仮に自ノードのスヌープ処理に１００ｎｓ、自ノードのメモリデータ応答に１３０ｎｓ、他ノードのスヌープ処理に１６０ｎｓ、他ノードのメモリデータ応答に１９０ｎｓかかるシステムがあったとする。本発明を採用しない場合の自ノードメモリアクセスレイテンシは１６０ｎｓであり、一方、本発明を採用した場合、自ノードメモリアクセスレイテンシはヒット時に１３０ｎｓとなる。ヒット時には自ノードメモリアクセスレイテンシで３０ｎｓ、すなわち２０％弱の性能改善効果が得られることになる。
【実施例１】
【００１６】
〔概要〕
図１は本発明の実施例１であるキャッシュ一貫性制御機能を備えたノードコントローラによって構成されたマルチプロセッサシステムを示す概略図である。
【００１７】
１つ以上のノードコントーラ２００、メモリユニット３００が、システム結合網４００を介して相互接続されている。ここでメモリユニット３００はノードコントローラ２００と同一のノードやシステムボード上にあっても良い。すなわち、ノードコントローラ２００ａとメモリユニット３００ａがあるノードを構成し、ノードコントローラ２００ｂとメモリユニット３００ｂが別のあるノードを構成する。なお、本図には明示的に図示していないが、メモリユニット３００はメモリコントローラと主記憶とから構成される。また、本図には図示していないＩ／Ｏユニットがやはりノードコントローラ２００あるいはシステム結合網４００を介して接続されており、その先には複数のＩ／Ｏデバイスが接続されている。
ノードコントローラ２００はプロセッサバス１２０を介して１つ以上のプロセッサ１００が接続される。プロセッサ１００はキャッシュ１１０を備える。また、ここではプロセッサとしたが、それぞれのプロセッサは１つのプロセッサ内に２つ以上のプロセッサコアを含むマルチコア構成であっても良い。以下の説明はプロセッサをプロセッサコアと読み替えても差異を生じない。
【００１８】
ノードコントローラ２００内には、プロセッサバス１２０から発行されたトランザクションを受け付けるトランザクション発行部２２０と、システム結合網４００から入ってきたトランザクションを受け付けるトランザクション受信部２３０と、キャッシュコピータグ２１０を管理するキャッシュコピータグ管理部２１５と、スヌープ結果を集計しデータ応答を制御するデータ応答制御部２４０、および設定用スイッチ２５０を持つ。
【００１９】
トランザクション発行部２２０が受け付けるトランザクションとしては、キャッシュミス要求５００、キャッシュリプレース要求５１０、ライトバック要求５１５などがある。キャッシュミス要求５００には図７に示すように、リードとリードインバリデートの２種類がある（実際にはもっとたくさんの種類が考えられるが、ここでは２種類だけ考える）。キャッシュリプレース要求５１０には図８に示すように、ライトバックとクリーンリプレースの２種類がある。この内クリーンリプレースに関してはプロセッサの設定によっては発行されないこともある。
【００２０】
図２はキャッシュコピータグ２１０の構成を示す。キャッシュコピータグ２１０の各エントリはキャッシュ状態２１１とアドレスタグ２１２から構成される。キャッシュコピータグ２１０の構成はアドレスのインデックスを１つのエントリに直接マップするダイレクトマップから、任意の空きエントリを使用できるフルアソシアティブまで様々な構成が考えられる。ここでは例として４ウェイセットアソシアティブの例を示す。プロセッサバス１２０にトランザクション５０５が発行されると、トランザクション５０５は図６に示すように対象のアドレス７００を持つ。アドレス７００は図４に示すようにアドレスタグ７０１、インデックス７０２、オフセット７０３に分解される。4ウェイセットアソシアティブのキャッシュコピータグの場合、図３に示すように、１つのインデックスに対して４つのエントリが対応する。インデックス７０２に該当する４つのエントリの内、アドレスタグ７０１と一致するアドレスタグ２１２を持つエントリがあれば、対象のアドレスはキャッシュコピータグにヒットしたことになる。この時対応するキャッシュ状態２１１が、該当するアドレスのキャッシュ状態となる。
【００２１】
キャッシュコピータグ２１０のキャッシュ状態２１１は図５に示す３種類の状態のいずれかに分類される。Ｉ（無効）は該当アドレスが当該ノードではキャッシュされていないことを示す。Ｓ（共有）は該当アドレスが当該ノードでクリーンな共有状態でキャッシュされていることを示す。Ｅ（占有）は該当アドレスが当該ノードでのみ占有されており、書き換えられている可能性があることを示す。なお一般的なＭＥＳＩプロトコルではＩ、Ｓ、Ｅに加えてＭという状態を持つが、キャッシュコピータグの場合はＥ状態のキャッシュをプロセッサが書き換えたかどうかはノードコントローラには通知されないため、キャッシュの状態ＥとＭの両方がキャッシュコピータグのキャッシュ状態Ｅへと対応する。
【００２２】
プロセッサ１００からプロセッサバス１２０にキャッシュミス要求５００が発行された場合、あるいはノードコントローラ２００からプロセッサバス１２０に対してスヌープ要求５２０を上げた場合、プロセッサバス１２０上に接続されたプロセッサ１００はスヌープ応答５３０を返す。また、ノードコントローラ２００中のトランザクション発行部２２０が他のノードコントローラ２００に対してスヌープ要求をブロードキャストした場合、各ノードコントローラは、要求元のノードコントローラに対してスヌープ結果６３０を返す。スヌープ応答５３０およびスヌープ結果６３０は図９に示す３種類が定義される。ＯＫはキャッシュを持っていない（あるいは持っていても捨てた）ことを示す。ＨＩＴはキャッシュを共有状態（Ｓ）で保持していることを示す。ＨＩＴＭは書き換えた最新のキャッシュを持っていることを示す。スヌープ応答５３０がＨＩＴＭの場合は、スヌープ応答５３０に続いてライトバック要求５１５が発行される。
【００２３】
図１０にトランザクション発行部２２０が発行する、あるいはトランザクション受信部２３０が発行または受信するシステムトランザクションの一部を示す。スヌープ要求は要求元のノードコントローラ２００から全ノードコントローラ２００へとブロードキャストされる。スヌープ結果はブロードキャストされた全ノードコントローラ２００から、要求元のノードコントローラ２００へと返される。メモリリート要求は要求元のノードコントローラ２００からアドレスが対応するノードのメモリユニット３００に向かって発行される。メモリライト要求はキャッシュリプレース通知があった場合やスヌープの結果がＨＩＴＭだった場合に、ノードコントローラ２００からアドレスが対応するノードのメモリユニット３００に向かって発行される。データ応答は、メモリリード要求の結果としてメモリユニット３００から、あるいはスヌープ後のキャッシュ間転送の結果としてノードコントローラ２００から、要求元のノードコントローラ２００に対して返される。
〔キャッシュミス要求発生時の動作〕
図１を主に参照して実施例１のキャッシュミス要求発生時の動作を説明する。
まず要求元ノードの動作を説明する。プロセッサ１００ａ０がキャッシュ１１０ａ０にないラインに対してアクセスするとキャッシュミス要求５００がプロセッサバス１２０ａを介して発行される。トランザクション発行部２２０はキャッシュミス要求５００を受け、発行元識別子７２０等をトランザクション登録通知５５０としてデータ応答制御部２４０に通知する。トランザクション発行部２２０はトランザクションに含まれるアドレス７００から宛先メモリのノードを特定し、そのノードのメモリユニット３００を対象にメモリリード要求をトランザクション発行パス５６０ａを介して発行する。
【００２４】
一方、キャッシュミス要求５００に対するスヌープ応答５３０がトランザクション受信部２３０へと通知される。スヌープの結果プロセッサ１００ａ１が最新のデータを持っていた場合、キャッシュ間転送によってプロセッサバス１２０ａ上でキャッシュミス要求は完了する。キャッシュ間転送が起こらなかった場合、トランザクション発行部２２０はスヌープ要求を全ノードのノードコントローラ２００に向けて発行する。
【００２５】
トランザクション発行部２２０は続いてキャッシュコピータグ管理部２１５に対して自ノードキャッシュコピータグの探索を要求する。キャッシュコピータグ管理部２１５では、該当するアドレスがキャッシュコピータグ２１０に登録されているかどうかを検索する。該当アドレスが登録されておりかつキャッシュ状態２１１がＥ（占有）だった場合、キャッシュコピータグ管理部２１５は先行応答通知６２０をデータ応答制御部２４０へと通知する。キャッシュ状態２１１がＳ（共有）であり、かつキャッシュミス要求５００がリードだった場合、やはりキャッシュコピータグ管理部２１５は先行応答通知６２０をデータ応答制御部２４０へと通知する。キャッシュコピータグ２１０に登録されていない場合、新たなエントリを確保し、キャッシュ状態をＩ（無効）に初期化しておく。
【００２６】
ここで、ブロードキャストされたスヌープ要求を受け取ったノードの動作を説明する。
トランザクション受信パス５７０を通じてスヌープ要求を受け取ったトランザクション受信部２３０では、キャッシュコピータグ管理部２１５に対してキャッシュコピータグ２１０の探索を要求する。キャッシュコピータグ管理部２１５では、スヌープ要求の該当するアドレスがキャッシュコピータグ２１０に登録されていない場合、あるいは登録されていて、キャッシュ状態２１１がＩ（無効）の場合、あるいは登録されていて、キャッシュ状態２１１がＳ（共有）でかつスヌープ要求がリードだった場合、ヒットしなかったと応答する。キャッシュ状態２１１がＥ（占有）の場合、あるいはキャッシュ状態２１１がＳ（共有）でかつスヌープ要求がリードインバリデートだった場合、ヒットしたと応答する。
【００２７】
トランザクション受信部２３０では、キャッシュコピータグ探索の結果ヒットしなった場合、スヌープ結果６３０を要求元ノードに対して発行する。この時、登録されていないかキャッシュ状態がＩ（無効）だった場合にはＯＫ、キャッシュ状態がＳ（共有）でかつスヌープ要求がリードだった場合はＨＩＴと応答する。
【００２８】
トランザクション受信部２３０では、キャッシュコピータグ探索の結果ヒットした場合、スヌープ要求５２０をプロセッサバス１２０に対して発行し、スヌープ応答５３０を受け取る。スヌープ応答５３０がＨＩＴＭだった場合、キャッシュ間転送によって最新データを要求元ノードへと返す必要がある。ライトバック要求５１５によって受け取った最新データをトランザクション発行部２２０はデータ応答として要求元ノードに向けて発行する。キャッシュコピータグ２１０のキャッシュ状態２１１をＩ（無効）へと更新する。また、トランザクション受信部２３０はスヌープ結果６３０としてＨＩＴＭを要求元ノードに向けて発行する。
【００２９】
スヌープ応答５３０がＨＩＴＭではなかった場合、スヌープ応答５３０をそのままスヌープ結果６３０として要求元ノードに向けて発行する。キャッシュコピータグ２１０のキャッシュ状態２１１は、スヌープ応答５３０がＨＩＴだった場合にはＳ（共有）に、そうでない場合はＩ（無効）に変更する。
【００３０】
以上のスヌープ要求を受け取ったノードの動作をフローチャートにまとめたのが図２２および図２３である。これらに沿って再度説明する。
【００３１】
図２２は他ノードスヌープ処理の基本フローである。他ノードスヌープ処理はトランザクション受信パス５７０を介してトランザクション受信部２３０がスヌープ要求を受け取ることで開始され、まずステップ１４００では他ノードコピータグ探索する。ステップ１４０００の詳細は本実施例では２４図のステップ１５００からステップ１５８０までであるが、その詳細な説明はここでは省略する。続くステップ１４１０では、他ノードコピータグ検索の結果、ヒットしたかどうかを判定する。ヒットした場合はステップ１４２０へ進む。ヒットしなかった場合はステップ１４５０へと進む。ステップ１４２０では、スヌープ要求５２０をプロセッサバス１２０へと発行する。スヌープ要求発行後、スヌープ応答５３０を受け取り、ステップ１４３０へと進む。ステップ１４３０では、スヌープ応答５３０の結果がＨＩＴＭかどうかを判定する。スヌープ応答５３０がＨＩＴＭ、すなわち最新データがキャッシュにあった場合には、ステップ１４４０を経てステップ１４４５へと進む。ＨＩＴＭでない場合は直接ステップ１４４５へと進む。ステップ１４４０は、キャッシュ間転送によって最新データを応答するステップである。スヌープの結果発生したライトバック要求５１５を受け取り、要求元ノードに対してキャッシュ間転送データとして発行する。ステップ１４４５は他ノードコピータグを更新するステップである。その詳細は図２３を参照して後述する。
【００３２】
ステップ１４５０はスヌープ結果を応答するステップである。キャッシュ間転送が起きた場合にはＨＩＴＭ、スヌープ応答の結果ＨＩＴだった場合や、キャッシュ状態をＳに変更した場合にはＨＩＴ、スヌープ応答の結果ＯＫだった場合や他ノードコピータグにヒットしなかった場合にはＯＫと応答する。これでスヌープ処理は完了する。
【００３３】
図２３は他ノードコピータグ更新１４４５の詳細ステップを示す。まずステップ１４６０ではスヌープ結果がＨＩＴＭかどうかを判定する。ＨＩＴＭだった場合はステップ１４８０へ進み、そうでない場合はステップ１４６５へ進む。ステップ１４６５ではスヌープ結果がＨＩＴかどうかを判定する。ＨＩＴだった場合はステップ１４７０へ進む。そうでない場合はステップ１４８０へ進む。ステップ１４７０ではコピータグのキャッシュ状態をＳ（共有）へと変更する。一方、ステップ１４８０では、コピータグのキャッシュ状態をＩ（無効）へと変更する。これによって他ノードコピータグ更新１４４５は完了する。
【００３４】
続いて、メモリユニット３００の動作を説明する。メモリ要求パス５８０を介してメモリリード要求を受け取ったメモリユニット３００は、アドレスの対応するメモリの内容を読み出し、メモリ応答バス５９０を介して要求元ノードに向けてデータ応答を発行する。一方、メモリ要求パス５８０を介してメモリライト要求を受け取ったメモリユニット３００は、メモリライト要求に付随するデータをアドレスの対応するメモリへと書き込む。メモリライトの完了時にＡＣＫを要求元ノードに返すこともできる。以上がメモリユニット３００の動作である。
【００３５】
続いて、再び要求元ノードの動作を説明する。トランザクション受信部２３０には、ブロードキャストしたスヌープ要求に対するスヌープ結果６３０、メモリユニットに対して発行したメモリリード要求に対するデータ応答、キャッシュ間転送が起こった場合にはキャッシュ間転送のデータ応答、などが到着する。トランザクション受信部２３０では、発行したスヌープ要求に対する全てのスヌープ結果６３０が集まった時点で、スヌープ集計結果６００をデータ応答制御部２４０へと通知する。スヌープ集計結果６００は次のようにして決定される。スヌープ結果６３０のうち、１つでもＨＩＴＭがあればスヌープ集計結果６００もＨＩＴＭとする。そうでなくて、スヌープ結果６３０のうち、１つでもＨＩＴがある場合、あるいは自ノードのスヌープ応答５３０がＨＩＴだった場合は、スヌープ集計結果６００もＨＩＴとする。そうでない場合はスヌープ集計結果６００をＯＫとする。
【００３６】
メモリまたはキャッシュ間転送によるデータ応答を受け取ったトランザクション受信部２３０はデータ応答６１０をデータ応答制御部２４０へと通知する。データ応答制御部２４０は、スヌープ集計結果６００または先行応答通知６２０と、データ応答６１０が揃うまで待つ。ただしスヌープ集計結果６００がＨＩＴＭだった場合には、メモリからのデータ応答ではなくキャッシュ間転送のデータ応答を待つ。スヌープ集計結果６００または先行応答通知６２０と、データ応答６１０が揃った次点で、データ応答制御部２４０はデータ応答５４０をプロセッサバス１２０ａ経由で要求元プロセッサ１００ａ０に返す。
【００３７】
最後にキャッシュコピータグ管理部２１５では、対応するアドレスのキャッシュコピータグ２１０のキャッシュ状態２１１を更新する。キャッシュミス要求がリードインバリデートの場合や、スヌープ集計結果６００がＨＩＴＭやＯＫの場合には、キャッシュ状態をＥ（占有）に更新する。キャッシュミス要求がリードでかつスヌープ集計結果６００がＨＩＴの場合にはキャッシュ状態をＳ（共有）に更新する。
以上でキャッシュミス要求時の動作が完了する。
【００３８】
以上に示した実施例１のキャッシュミス要求時の動作をフローチャートにまとめたのが図１５である。図１６は図１５のステップ１１００の詳細フローを示す。また図１７は図１５のステップ１０９０の詳細フローを示す。これらフローチャートに沿って、実施例１のキャッシュミス要求時の動作を再度説明する。
【００３９】
図１５のキャッシュミス要求時の一連の動作は、プロセッサバス１２０を介してプロセッサ１００ａ０からキャッシュミス要求５００が到着したことによってスタートする。ステップ１０００では、ノードコントローラ２００のトランザクション発行部２２０は、キャッシュミス要求５００のアドレスに従って適切なノードのメモリユニット３００に対してメモリリードを発行する。続くステップ１０１０では、自ノードのプロセッサバス１２０上で他のプロセッサ１００のスヌープ応答５３０を受け、判定する。もしスヌープ応答５３０がＨＩＴＭ、すなわち自ノードでキャッシュ間転送が起こった場合は、ステップ１０２０へと進む。一方、ＨＩＴＭ以外だった場合にはステップ１０３０へと進む。ステップ１０２０では、自ノードでキャッシュ間転送が起こった場合の処理が行われる。すなわち、プロセッサバス１２０を介してデータが要求元プロセッサへ１００ａ０へと返される。この場合キャッシュミス要求は完了となる。一方、ステップ１０３０では全ノードへスヌープ要求をブロードキャストする。すなわち、トランザクション発行パス５６０を介して全ノードへとスヌープ要求がブロードキャストされる。次にステップ１１００にて自ノードのコピータグを検索する。このステップ１１００の詳細は図１６に示すとおりであり、後に詳述する。続くステップ１１１０では自ノードコピータグ検索１１００の結果、自ノードタグヒットしたかどうかを判定する。自ノードタグヒットした場合にはステップ１０６０へ進む。自ノードタグヒットしなかった場合にはステップ１０４０へ進む。
【００４０】
ステップ１０４０は全ノードにブロードキャストしたスヌープ要求に対するスヌープ結果６３０が全て返ってくるまで待つステップである。トランザクション受信部２３０はトランザクション受信パス５７０を介してスヌープ結果を受け取り、全てのスヌープ結果が集まったらスヌープ集計結果６００をデータ応答制御部２４０へと通知する。
【００４１】
続くステップ１０５０では、スヌープ集計結果６００を受けてＨＩＴＭかどうかを判定する。スヌープ結果のうちどれか一つでもＨＩＴＭ、すなわち最新のデータを持っているノードがいれば、最新データはメモリ上にはない。この場合はステップ１０７０へと進む。どのスヌープ結果もＨＩＴＭでない場合は、最新のデータはメモリ上にある。この場合はステップ１０６０へと進む。
【００４２】
ステップ１０６０はメモリからデータが返るのを待つステップである。データ応答制御部２４０はメモリデータ応答６１０を受けて、ステップ１０８０へと進む。一方、ステップ１０７０はキャッシュ間転送データが返るのを待つステップである。データ応答制御部は、キャッシュ間転送データを受けて、ステップ１０８０へと進む。
【００４３】
ステップ１０８０ではデータ応答５４０を要求元のプロセッサ１００ａ０へと返す。続くステップ１０９０では、自ノードコピータグ更新を行う。詳細は図１７に示すとおりであり、後に詳述する。以上でキャッシュミス要求は完了する。
【００４４】
図１６は自ノードコピータグ検索ステップ１１００の詳細フローを示す。まずステップ１１２０では自ノードのコピータグを検索する。続くステップ１１３０では要求キャッシュラインがコピータグ中にあるかどうかを判定する。要求キャッシュラインがコピータグ中になかった場合はステップ１１６０へ進む。コピータグ中にあった場合はステップ１１４０へと進む。
【００４５】
ステップ１１６０ではエントリを確保し、キャッシュ状態をＩ（無効）に初期化する。もし該当するインデックスのエントリが全て使用中だった場合には任意の一つを選んでキャッシュを無効化するためのスヌープ要求５２０をプロセッサバス１２０に対して発行する必要があるが、ここでは詳細な記述は省略する。これが完了すると、ステップ１１７０へ進む。
【００４６】
一方、ステップ１１４０ではコピータグ中のキャッシュ状態がＥ（占有）かどうかを判定する。Ｅ（占有）だった場合にはステップ１１８０へ進む。そうでない場合はステップ１１５０へ進む。ステップ１１５０では、コピータグ中のキャッシュ状態がＳ（共有）でかつ要求がリード要求であるかどうかを判定する。Ｓ（共有）でありかつリード要求だった場合はステップ１１８０へ進む。そうでない場合、すなわちキャッシュ状態がＩ（無効）であるか、あるいは要求がリードインバリデート要求だった場合はステップ１１７０へ進む。
【００４７】
ステップ１１７０では、自ノードコピータグにヒットしなかった、と応答する。これにより自ノードコピータグ検索は完了する。
【００４８】
一方、ステップ１１８０は、自ノードコピータグにヒットした、と応答するステップである。これにより自ノードコピータグ検索は完了する。
【００４９】
続いて、自ノードコピータグ更新１０９０の詳細を図１７を参照して説明する。まずステップ１２００では、キャッシュミス要求がリードかどうかを判定する。リードだった場合にはステップ１２１０へ進む。リードでない、すなわちリードインバリデートだった場合はステップ１２４０へ進む。
【００５０】
ステップ１２１０では、スヌープ集計結果がＨＩＴＭかどうかを判定する。スヌープ結果のうち一つでもＨＩＴＭがあった場合にはステップ１２４０へ進む。ＨＩＴＭでない場合にはステップ１２２０へ進む。ステップ１２２０ではスヌープ集計結果がＨＩＴかどうかを判定する。スヌープ結果のうち一つでもＨＩＴがあった場合や、自ノードのスヌープ応答がＨＩＴだった場合にはステップ１２５０へ進む。そうでない場合はステップ１２４０へ進む。
ステップ１２４０はキャッシュ状態をＥ（占有）に更新するステップである。これが完了するとステップ１２６０へ進む。一方、ステップ１２５０はキャッシュ状態をＳ（共有）に更新するステップであり、これが完了するとステップ１２６０へ進む。ステップ１２６０では、もしキャッシュコピータグのエントリにリプレースフラグがある場合に、これをクリアする。リプレースフラグがない場合には何もしない。以上で自ノードコピータグ更新は完了する。
〔キャッシュリプレース処理の動作〕
次に実施例１のキャッシュリプレース処理の動作を説明する。
プロセッサ１００ａ０のキャッシュ１１０ａ０にラインが入りきらなくなった場合、古いラインが追い出される。これがキャッシュリプレースである。キャッシュリプレースはプロセッサバス１２０ａを介してノードコントローラ２００ａのトランザクション発行部２２０にキャッシュリプレース通知５１０として通知される。キャッシュリプレース通知５１０には図８に示す２種類の通知がある。このうち、ライトバックだった場合、ライトバックに伴う最新のデータが続けてプロセッサバス１２０ａから発行される。トランザクション発行部２２０は、キャッシュコピータグ管理部２１５にキャッシュリプレースの通知を行う。キャッシュコピータグ管理部２１５では、キャッシュコピータグ２１０中の該当するエントリのキャッシュ状態をＩ（無効）へと更新する。キャッシュリプレース通知がライトバックだった場合、トランザクション発行部２２０は、アドレスに対応するノードを特定し、そのノードのメモリユニット３００を対象としたメモリライト要求を発行する。以上でキャッシュリプレース処理が完了する。
【００５１】
以上に示したキャッシュリプレース処理の典型的な例をフローチャートにまとめたのが図１８である。このフローチャートに沿うキャッシュリプレース処理を再度説明する。
【００５２】
図１８のキャッシュリプレース処理は、プロセッサバス１２０を介してプロセッサ１００ａ０からキャッシュリプレース通知５１０が到着したことによって開始される。まずステップ１３００では、キャッシュコピータグ２１０を検索し、対応するエントリ（必ず存在するはず）のキャッシュ状態をＩ（無効）に更新する。続くステップ１３１０では、キャッシュリプレースの結果、データが更新されていた場合にメモリへとデータを書き戻す。データが更新されていた場合は、トランザクション発行パス５６０を介してライトバックトランザクションがキャッシュラインのアドレスに該当するノードのメモリユニット３００に向かって発行される。これによってキャッシュリプレースは完了する。以上の一連の動作によって、自ノードコピータグヒット時にレイテンシを短縮するブロードキャストスヌープ方式が実現する。
〔実施例１の変形例１〕
変形例１のキャッシュミス要求時の動作は実施例１と同じである。一方、変形例１ではキャッシュリプレース処理の動作が上記の実施例１とやや異なる。すなわち、キャッシュコピータグ管理部２１５では、トランザクション発行部２２０からキャッシュリプレースの通知を受けた時、同時にキャッシュリプレース対象のアドレスのメモリのあるノードを通知してもらう。もし対象アドレスが他ノードである場合、上記の実施例１と同じようにキャッシュコピータグの更新を行う。一方、対象アドレスが自ノードである場合、キャッシュコピータグの更新は行わない。以上が実施例１の変形例１である。
【００５３】
図１９に変形例１のキャッシュリプレース処理のフローを示す。このフローは図１８のフローに代えて採用される。キャッシュリプレース要求が発生すると、まずステップ１３２０にて該当するキャッシュラインのアドレスの宛先メモリが自ノードかどうかを判定する。他ノードだった場合はステップ１３００へ進み、以降は図１８に示す実施例３のキャッシュリプレース処理のフローと同じとなる。一方、あて先メモリが自ノードだった場合はステップ１３１０へ進む。したがって、キャッシュ状態の変更がスキップされる。
【００５４】
以上のような変形例１では、自ノードキャッシュコピータグにヒットする確率を上げることができる
〔実施例１の変形例２〕
変形例２の構成の大部分は上記実施例１と共通であり、つまり図１で示されるとおりである。ただし変形例２では、ノードコントローラ２００の設定用スイッチ２５０が図１２に示すようにキャッシュリプレース制御スイッチ２７０を含む。キャッシュリプレース制御スイッチ２７０を含む。キャッシュリプレース制御スイッチ２７０はリプレース有効かリプレース無効かのどちらかの状態を取る。
【００５５】
キャッシュコピータグ管理部２１５では、トランザクション発行部２２０からキャッシュリプレースの通知を受けた時、キャッシュリプレース制御スイッチ２７０の状態を見る。キャッシュリプレース制御スイッチ２７０がリプレース有効となっている場合、実施例１の基本例と同じようにキャッシュコピータグの更新を行う。一方、キャッシュリプレース制御スイッチ２７０がリプレース無効となっている場合、キャッシュコピータグの更新は行わない。
【００５６】
図２０に変形例２におけるキャッシュリプレース処理のフローを示す。このフローは図１８のフローに代えて採用される。
【００５７】
キャッシュリプレース処理が発生すると、まずステップ１３３０にてキャッシュリプレース制御スイッチ２７０がリプレース有効となっているかどうかを判定する。リプレース有効である場合にはステップ１３００へ進み、以降は図１８に示す実施例３のキャッシュリプレース処理のフローと同じとなる。一方キャッシュリプレース制御スイッチがリプレース無効であった場合には直接ステップ１３１０に進み、すなわちキャッシュ状態をＩ（無効）に更新する変更がスキップされる。
【００５８】
以上のように、変形例２では、キャッシュリプレース処理の動作に上記実施例１と違いがある。キャッシュミス要求時の動作は実施例１と全く同じである。
【００５９】
以上の変形例２でも、変形例１と同様にキャッシュコピータグにヒットする確率を上げることができる。
【００６０】
なお、キャッシュリプレース制御スイッチ２７０及び他の設定用スイッチ２５０は物理的なスイッチである必要はなく、電子的・論理的・プログラム的に設定されても良い。キャッシュリプレース制御スイッチは、自ノードからメモリアクセスする可能性の方が高いと判定されたようなケース（ＯＳやファームウェアによってｃｃＮＵＭＡ対応のメモリ配置にした場合など）ではリプレース無効にし、そうでない場合にはリプレース有効にするといった使い方が考えられる。
〔実施例１の変形例３〕
変形例３の構成も実施例１とほぼ同様であり、図１に示される。ただし、変形例３におけるキャッシュコピータグ２１０は、図１３に示すようにキャッシュ状態２１１、アドレスタグ２１２に加え、リプレースフラグ２１３を持つ。キャッシュミス要求の最後に自ノードコピータグを更新する時、リプレースフラグ２１３はクリアされる。
【００６１】
キャッシュミス要求発生時の動作で上記実施例１と異なる点を述べると、他ノードでスヌープ要求を受けた他ノードコピータグ探索処理で、要求キャッシュラインに対応するエントリがキャッシュコピータグ２１０中にあった場合の動作が上記実施例１と変わってくる。すなわち、要求キャッシュラインに対応するエントリがキャッシュコピータグ２１０中にあった場合、キャッシュコピータグ管理部２１５はリプレースフラグ２１３がセットされているかどうかを判定する。セットされていない場合は、以降は上記実施例１と同様にキャッシュ状態２１１やスヌープ要求がリードかリードインバリデートかに従って処理を行う。リプレースフラグ２１３がセットされていた場合、対応するキャッシュ状態２１１はIに変更され、リプレースフラグ２１３はクリアされる。そして他ノードコピータグにはヒットしなかったと応答される。
【００６２】
続いて変形例３におけるキャッシュリプレース処理の動作について説明する。トランザクション発行部２２０からキャッシュリプレースを通知されたキャッシュコピータグ管理部２１５は、キャッシュコピータグ２１０中の対応するエントリのリプレースフラグ２１３をセットする。キャッシュ状態２１１の変更は行わない。すなわち、実施例１で採用されていた図１８のフローに変えて、図２１のフローによりキャッシュリプレース処理を行う。まずステップ１３４０でキャッシュコピータグの対応するエントリ（必ず存在するはず）のリプレースフラグ２１３をセットし、次にステップ１３１０でキャッシュリプレースの結果、データが更新されていた場合にメモリへとデータを書き戻す。
【００６３】
以上の一連の動作によって、キャッシュリプレースが起こったエントリに関しては、自ノードコピータグ検索に対してはヒットし、他ノードコピータグ検索に対してはヒットしない、という状態となる。これにより、先に自ノードからキャッシュミス要求が再発行された場合にはレイテンシを短縮でき、先に他ノードからスヌープ要求が来た場合にはプロセッサバスにスヌープを上げることなくスヌープ結果を応答できるという利点を持つ。
【００６４】
なお、リプレースフラグ２１３を設ける代わりにキャッシュ状態２１１の状態を拡張し、たとえばE'やS'といった状態を追加する方法も考えられる。キャッシュ状態Ｅのラインがリプレースされた場合にはキャッシュ状態をE'としておき、再び自ノードからアクセスされた場合にはキャッシュ状態をＥに戻す、などである。この拡張は本質的にリプレースフラグを設けた場合と同等であるため、ここでは説明を省略する。
【実施例２】
【００６５】
次に本発明の実施例２を、図１４およびを図１〜図１３を用いて説明する。なお、図１４中に出てくる各記号は図１〜図１３で説明した各要素と対応している。
【００６６】
実施例２は複数ノードから構成されるｃｃＮＵＭＡ構成のマルチプロセッサシステムである。各ノードはノードコントローラ２００とメモリユニット２００、プロセッサバス１１０とから構成され、プロセッサバス１１０には1つ以上のプロセッサ１００が接続されている。各ノードはシステム結合部４００を介して接続され、ｃｃＮＵＭＡのＳＭＰを構成している。
【００６７】
各ノードコントローラ２００は設定用スイッチ２５０を含む。設定用スイッチ２５０は図１２に示すスヌープフィルタスイッチ２６０を含む。スヌープフィルタスイッチ２６０はスヌープフィルタを制御するためのスイッチで、無効にするとスヌープフィルタが効かなくなり全てのスヌープ要求がプロセッサバス５００上に発行されるようになる。
【００６８】
図１４では、ノードコントローラ２００ａ、２００ｂ、２００ｃをそれぞれ中心とする３つのノードがある。この３つのノードをそれぞれノードａ、ノードｂ、ノードｃと呼び、今後の説明では、各記号の後ろにａ、ｂ、ｃをつけることでノードの違いを示す（何もついていない場合はノードを特定していないことを示す）。
【００６９】
今、ノードａとノードｃのスヌープフィルタスイッチ２６０ａ、２６０ｃは有効と設定し、ノードｂのスヌープフィルタスイッチ２６０ｂのみ無効と設定する。全てのラインはキャッシュされていない状態からスタートする。また、ノードａは少なくとも２つのプロセッサ、１００ａ０と１００ａ１を持つとする。
【００７０】
その上でノードａ上のプロセッサ１００ａ０から、ノードａ上のメモリユニット３００ａに対応するアドレスに対して、リード要求を発行する。キャッシュミス要求５００ａがプロセッサバス１１０ａ上に発行される。ノードコントローラ２００ａはメモリユニット３００ａに対してメモリリード要求を発行すると共に、スヌープ要求をノードｂ、ノードｃに対してブロードキャストする。ノードｂのノードコントローラ２００ｂは、スヌープフィルタスイッチ２６０ｂが無効と設定されていることから、受けたスヌープ要求をそのままプロセッサバス１１０ｂ上にスヌープ要求５２０ｂとして発行する。
【００７１】
ノードコントローラ２００ａでは、ノードｂ、ノードｃからのスヌープ結果を待ってからデータ応答５４０ａをプロセッサバス１１０ａ上に返す。これにより最初のリード要求が完了する。
【００７２】
続けて、ノードａ上のプロセッサ１００ａ１から先ほどと同一のアドレスに対してリード命令を発行する。この時、先ほどと同様にキャッシュミス要求５００ａが発行され、ノードコントローラ２００ａはメモリユニット３００ａに対してメモリリード要求を発行すると共に、ノードｂ、ノードｃに対してスヌープ要求をブロードキャストする。しかし本発明によりノードａのキャッシュコピータグにヒットするため、ノードコントローラ２００ａはスヌープ結果を待たずにデータ応答５４０ａをプロセッサバス１１０ａに対して返すことができる。結果として、第一のリード命令よりも、第二のリード命令の方が速く完了する。
【００７３】
ただし、この条件だけだと単にノードコントローラ２００ａ内に最初のリードデータがキャッシュされた場合と同様になる。そこで次は、ノードｂのメモリユニット３００ｂに対応するアドレスに対して、ノードａ上のプロセッサ１００ａ０がリード命令を発行し、それが完了した後にノードａ上の別のプロセッサ１００ａ１がリード命令を発行し、完了するまでの時間を計測する。この場合、本発明では両方とも他ノードメモリに対するアクセスとなる。従って自ノードコピータグにヒットしても、結局スヌープ結果よりもメモリからのデータ応答の方が遅くなるため、完了までの時間は変わらない。もしリードデータがノードコントローラ２００ａ内にキャッシュされている場合ならば、他ノードメモリアクセスのケースでも速くなるはずである。このように、自ノードアクセスの場合にのみ効果があるのが実施例２の特徴である。
【００７４】
上記した効果について、ディレクトリ方式を採っている場合との差を説明する。まず、ディレクトリ方式の場合には、自ノードメモリアクセス時に、他ノードにはキャッシュされていないことがわかるため、スヌープ要求はブロードキャストされない。従って、他ノードのプロセッサバス１１０ｂにスヌープ要求５２０ｂが上がることはない。
【００７５】
さらにディレクトリ方式との違いを明確にするため、ノードｃのメモリユニット３００ｃに対応するアドレスに対して、ノードａ上のプロセッサ１００ａ０がリードインバリデート命令を発行する。ノードコントローラ２００ａはキャッシュミス要求５００ａを受けて、メモリユニット３００ｃに対してメモリリード要求を、ノードｂ、ノードｃに対してスヌープ要求をブロードキャストする。ノードｂのノードコントローラ２００ｂではスヌープフィルタスイッチ２６０ｂが無効とされているため、スヌープ要求５２０ｂがプロセッサバス１１０ｂ上に発行される。そしてノードｂ、ノードｃからのスヌープ応答とデータ応答を受けて、データ応答５４０ａがプロセッサバス１１０ａ上へと返される。命令の発行から完了までの時間を計測しておく。
【００７６】
最初のリードインバリデート命令が完了した後、ノードｂに属するプロセッサ１００ｂ０から、先ほどと同一のアドレスに対してリード命令を発行する。ノードコントローラ２００ｂからメモリユニット３００ｃに対するメモリリード要求と、ノードａ、ノードｃに対するスヌープ要求が発行される。ノードコントローラ２００ｂはスヌープ結果とデータ応答を受けて、データ応答５４０ｂをプロセッサバス１１０ｂに対して発行する。
【００７７】
さらに二度目のリードインバリデート命令が完了後、ノードａに属する先ほどとは別のプロセッサ１００ａ１から、先ほどと同一のアドレスに対して、リードインバリデート命令を発行し、完了までにかかる時間をプロセッサ１００ａ０が発行したリードインバリデートの完了時間と比較する。本発明を利用している場合、スヌープフィルタスイッチが無効なノードｂに対するスヌープの完了時間はプロセッサ１００ａ０の場合もプロセッサ１００ａ１の場合も同一なので、完了時間はほぼ同一となる。一方、仮にディレクトリ方式だった場合、プロセッサ１００ａ０が発行した場合にはどのノードにもキャッシュされていないため、完了までの時間は速く済むが、プロセッサ１００ａ１が発行した場合にはプロセッサ１００ｂ０によって既にキャッシュされているため、スヌープによってインバリデートする分の時間が余計にかかる。従ってプロセッサ１００ａ１が発行したリードインバリデートの方が完了までに多くの時間を要する。
【００７８】
このように、他ノードのキャッシュの状態によってメモリアクセスの時間が変化しないのが実施例２の第二の特徴である。
【００７９】
実施例２ではキャッシュヒットを制御するキャッシュヒット制御スイッチ２８０を設定用スイッチ２５０内に有する。ノードコントローラ２００ａ内のキャッシュヒット制御スイッチ２８０ａを有効とした上で、一旦キャッシュをクリアした状態から始める。ノードａ上のメモリユニット３００ａに対応するアドレスに対して、ノードａ上のプロセッサ１００ａ０からリード命令を発行し、それが完了した後にノードａ上の異なるプロセッサ１００ａ１から同一のアドレスに対してリード命令を発行し、２つのリード命令が完了するまでの時間を計測する。本発明を適用している場合、自ノードのキャッシュコピータグにヒットすることによって、二度目のリード命令の方が短い時間で完了する。
【００８０】
次にノードコントローラ２００ａ内のキャッシュヒット制御スイッチ２８０ａを無効とした上で、再びキャッシュをクリアした状態から始める。ノードａ上のメモリユニット３００ａに対応するアドレスに対して、ノードａ上のプロセッサ１００ａ０からリード命令を発行し、それが完了した後にノードａ上の異なるプロセッサ１００ａ１から同一のアドレスに対してリード命令を発行し、２つのリード命令が完了するまでの時間を計測する。すると本発明が無効となっているため、どちらのリード命令ともノードｂのプロセッサバス１１０ｂに対するスヌープ要求の結果を待たなくてはデータ応答５４０ａが返せない。結果として、２つのリード命令が完了するまでの時間はほぼ同一となる。
【００８１】
以上のように、キャッシュヒット制御スイッチの状態によって、キャッシュヒットの動作を変更できることが実施例２の第三の特徴である。
【実施例３】
【００８２】
実施例３は基本的には実施例１と同様なシステム構成を有する。ただし実施例２と同様に設定用スイッチには図１２に示すスヌープフィルタスイッチ２６００を含む。スヌープフィルタスイッチにより、スヌープフィルタ無効にする設定、つまり、スヌープ要求があった場合はコピータグのチェックなど行わずに全てのスヌープ要求がプロセッサバス５００に発行される設定が可能となる。したがって図２２に示す他ノードスヌープ処理のフローのうちのステップ１４００の他ノードコピータグ検索の詳細が実施例１と変わってくる。
【００８３】
図２４は実施例３における他ノードコピータグ検索１４００の詳細フローを示す。他ノードコピータグ検索の目的は、プロセッサバス１２０にスヌープ要求５２０を発行する必要があるかどうかを判定することにある。ステップ１４９０ではスヌープフィルタスイッチが有効かどうかを判定する。スヌープフィルタスイッチが有効でない場合はステップ１５８０へ進む。有効である場合にはステップ１５００へ進む。ステップ１５００は他ノードコピータグを検索するステップである。続くステップ１５１０では要求キャッシュラインがコピータグ中にあるかどうかを判定する。ある場合にはステップ１５２０へ進む。ない場合にはステップ１５７０へ進む。
【００８４】
ステップ１５２０では、要求がリード要求かどうかを判定するステップである。リードだった場合はステップ１５３０へ進む。そうでない場合はステップ１５４０へ進む。
【００８５】
ステップ１５３０ではキャッシュ状態がＥ（占有）かどうかを判定する。Ｅ（占有）だった場合はステップ１５５０にてキャッシュ状態をＳに変更した後にステップ１５８０へ進む。そうでない場合はステップ１５７０へ進む。
【００８６】
ステップ１５４０ではキャッシュ状態がＳ（共有）またはＥ（占有）かどうかを判定する。ＳまたはＥであればステップ１５６０でキャッシュ状態をＩに変更してステップ１５８０へ進む。どちらでもなかった場合はステップ１５７０へ進む。
【００８７】
ステップ１５７０では、他ノードコピータグにヒットしなかったと応答する。一方、ステップ１５８０では他ノードコピータグにヒットしたと応答する。これらのいずれかで他ノードコピータグ検索１４００は完了する。
〔実施例３の変形例〕
先に述べた実施例１の変形例３と同様に、実施例３もリプレースフラグ２１３（図１３）を持つようにキャッシュコピータグ２１０を変形することができる。この変形を採用した場合、キャッシュリプレース処理の基本フローが図１８に代えて図２１になるのは実施例１の変形例３と同様である。さらに他ノードコピータグ検索（図２２のステップ１４００）の詳細フローは図２５に示すとおりとなる。
【００８８】
図２５のフローではステップ１５１０の要求キャッシュラインがコピータグ中にあるかどうかを判定するステップの動作が図２４のフローに対して変更されている。コピータグ中にない場合には基本フローと同じくステップ１５７０へと進む。コピータグ中にあった場合にはステップ１５９０へと進む。ステップ１５９０では該当エントリのリプレースフラグ２１３がセットされているかどうかを判定する。リプレースフラグがセットされている場合はステップ１６００へ進む。そうでない場合はステップ１５２０へと進み、以降は図２４のフローと同じ動作をする。ステップ１６００はキャッシュ状態をＩ（無効）に変更し、リプレースフラグ２１３をクリアするステップである。以降はステップ１５７０へと進み、他ノードコピータグにヒットしなかったと応答する。
以上の一連の動作により、リプレースフラグがセットされたエントリは、自ノードコピータグ探索に対してはヒットし、他ノードコピータグ探索に対してはヒットしないように振舞う。これにより、他ノードからキャッシュを要求された場合に余計なスヌープ要求をプロセッサバスへと上げずに、自ノードからリプレースされたキャッシュラインに対して再びキャッシュミスが起きた場合のレイテンシを短縮する効果があるのも実施例１の変形例３と同様である
【産業上の利用可能性】
【００８９】
以上のように、本発明は複数のノードから構成されるマルチプロセッサシステムに対して適用できる。
【図面の簡単な説明】
【００９０】
【図１】本発明の実施例１、実施例３の全体構成図を示すブロック図である。
【図２】図１のキャッシュコピータグ２１０の構成図である。
【図３】キャッシュコピータグ２１０が４ウェイセットアソシアティブの場合の構成図である。
【図４】トランザクション５００のアドレス７００の構成を示す構成図である。
【図５】キャッシュ状態２１１の分類を示す表である。
【図６】トランザクション５００の構成を示すデータ構成図である。
【図７】キャッシュミス要求５００の分類を示す表である。
【図８】キャッシュリプレース通知５１０の分類を示す表である。
【図９】スヌープ応答５３０・スヌープ結果６３０の分類を示す表である。
【図１０】システムトランザクションの分類を示す表である。
【図１１】各方式の比較を示す表である。
【図１２】実施例１の変形例２、実施例２、及び実施例３の設定用スイッチ２５０を示す概念図である。
【図１３】実施例１の変形例３および実施例３の変形例におけるキャッシュコピータグ２１０の構成を示す概念図である。
【図１４】本発明の実施例２の全体構成を示すブロック図である。
【図１５】実施例１におけるキャッシュミス要求の基本フローチャートである。
【図１６】ステップ１１００「自ノードコピータグ探索」の詳細フローチャートである。
【図１７】ステップ１０９０「自ノードコピータグ更新」の詳細フローチャートである。
【図１８】実施例１におけるキャッシュリプレース処理の基本フローチャートである。
【図１９】実施例１の変形例１におけるキャッシュリプレース処理のフローチャートである。
【図２０】実施例１の変形例２におけるキャッシュリプレース処理のフローチャートである。
【図２１】実施例１の変形例３におけるキャッシュリプレース処理のフローチャートである。
【図２２】実施例１における他ノードスヌープ処理の基本フローチャートである。
【図２３】ステップ１４４５「他ノードコピータグ更新」の詳細フローチャートである。
【図２４】実施例３におけるステップ１４００「他ノードコピータグ探索」の詳細フローチャートである。
【図２５】実施例３の変形例におけるステップ１４００「他ノードコピータグ探索」の詳細フローチャートである。
【符号の説明】
【００９１】
100      プロセッサ
110      キャッシュ
120      プロセッサバス
200      ノードコントローラ
210      キャッシュコピータグ
211      キャッシュ状態
212      アドレスタグ
213      リプレースフラグ
215      キャッシュコピータグ管理部
220      トランザクション発行部
230      トランザクション受信部
240      データ応答制御部
250      設定用スイッチ
260      スヌープフィルタスイッチ
270      キャッシュリプレース制御スイッチ
280      キャッシュヒット制御スイッチ
300      メモリユニット
400      システム結合網
500      キャッシュミス要求
505      トランザクション
510      キャッシュリプレース通知
515      ライトバックデータ
520      スヌープ要求
530      スヌープ応答
540      データ応答
550      トランザクション登録通知
560      トランザクション発行パス
570      トランザクション受信パス
580      メモリ要求パス
590      メモリ応答パス
600      スヌープ集計結果
610      メモリデータ応答
620      先行応答通知
630      スヌープ結果
700      アドレス
701      アドレスタグ
702      インデックス
703      オフセット
710      トランザクション種別
720      発行元識別子
1000     メモリリードを発行するステップ
1010     自ノードスヌープ結果がHITMかどうかを判定するステップ
1020     バス上でキャッシュ間転送するステップ
1030     全ノードへスヌープ要求をブロードキャストするステップ
1040     スヌープ結果が全てのノードから返るまで待つステップ
1050     スヌープ集計結果がHITMかどうかを判定するステップ
1060     メモリからデータが返るまで待つステップ
1070     キャッシュ間転送データが返るまで待つステップ
1080     データ応答をプロセッサに返すステップ
1090     自ノードコピータグ更新を行うステップ
1100     自ノードコピータグ探索を行うステップ
1110     自ノードタグヒットしたかどうかを判定するステップ
1120     自ノードのコピータグを検索するステップ
1130     要求キャッシュラインがコピータグ中にあるかどうかを判定するステップ
1140     キャッシュ状態がEであるかどうか判定するステップ
1150     キャッシュ状態がSでかつ要求がリード要求かどうかを判定するステップ
1160     エントリを確保し、キャッシュ状態はIに初期化するステップ
1170     自ノードコピータグにヒットしなかった、と応答するステップ
1180     自ノードコピータグにヒットした、と応答するステップ
1200     キャッシュミス要求はリード要求かどうかを判定するステップ
1210     スヌープ集計結果がHITMかどうかを判定するステップ
1220     スヌープ集計結果がHITかどうかを判定するステップ
1240     キャッシュ状態をEに更新するステップ
1250     キャッシュ状態をSに更新するステップ
1260     リプレースフラグをクリアするステップ
1300     キャッシュコピータグの対応するエントリのキャッシュ状態をIに変更するステップ
1310     データが変更されていればメモリへとデータの書き戻しを行うステップ
1320     アドレスの宛先メモリが自ノードであるかどうかを判定するステップ
1330     キャッシュリプレース制御スイッチがリプレース有効になっているかどうかを判定するステップ
1340     キャッシュコピータグの対応するエントリのリプレースフラグをセットするステップ
1400     他ノードコピータグ探索を行うステップ
1410     他ノードコピータグにヒットしたかどうかを判定するステップ
1420     スヌープ要求をプロセッサバスへ発行するステップ
1430     スヌープの結果最新データがキャッシュされていたかどうかを判定するステップ
1440     キャッシュ間転送により最新データを応答するステップ
1445     他ノードコピータグ更新を行うステップ
1450     スヌープ結果を応答するステップ
1460     スヌープ応答がHITMかどうかを判定するステップ
1465     スヌープ応答がHITかどうかを判定するステップ
1470     キャッシュ状態をSに更新するステップ
1480     キャッシュ状態をIに更新するステップ
1490     スヌープフィルタスイッチが有効かどうかを判定するステップ
1500     他ノードのコピータグを検索するステップ
1510     要求キャッシュラインがコピータグ中にあるかどうかを判定するステップ
1520     要求はリードかどうかを判定するステップ
1530     キャッシュ状態はEかどうかを判定するステップ
1540     キャッシュ状態はSまたはEかどうかを判定するステップ
1550     キャッシュ状態をSに変更するステップ
1560     キャッシュ状態をIに変更するステップ
1570     他ノードコピータグにヒットしなかったと応答するステップ
1580     他ノードコピータグにヒットしたと応答するステップ
1590     リプレースフラグがセットされているかどうかを判定するステップ
1600     キャッシュ状態をIに変更し、リプレースフラグをクリアするステップ。
【図１】
0004848771.tif 000002
【図２】
0004848771.tif 000003
【図３】
0004848771.tif 000004
【図４】
0004848771.tif 000005
【図５】
0004848771.tif 000006
【図６】
0004848771.tif 000007
【図７】
0004848771.tif 000008
【図８】
0004848771.tif 000009
【図９】
0004848771.tif 000010
【図１０】
0004848771.tif 000011
【図１１】
0004848771.tif 000012
【図１２】
0004848771.tif 000013
【図１３】
0004848771.tif 000014
【図１４】
0004848771.tif 000015
【図１５】
0004848771.tif 000016
【図１６】
0004848771.tif 000017
【図１７】
0004848771.tif 000018
【図１８】
0004848771.tif 000019
【図１９】
0004848771.tif 000020
【図２０】
0004848771.tif 000021
【図２１】
0004848771.tif 000022
【図２２】
0004848771.tif 000023
【図２３】
0004848771.tif 000024
【図２４】
0004848771.tif 000025
【図２５】
0004848771.tif 000026