(57)【要約】【課題】共有キャッシュのデータを更新したプロセッサ以外のプロセッサが、共有キャッシュのデータが更新されているかを確認するタイミングにかかわらず、更新されたデータに対応するデータを保持する全てのキャッシュの無効化が完了していることを保証すること。【解決手段】１次キャッシュを含む複数のプロセッサと、複数のプロセッサにて共有される共有キャッシュを含む、複数の記憶階層のキャッシュを制御するキャッシュ制御部とを備え、プロセッサは、共有キャッシュのデータが更新されているかを確認するにあたり、共有キャッシュのデータが更新されていれば、少なくとも自プロセッサに含まれる１次キャッシュにおける、更新されているデータに対応するデータを無効化させる命令を発行する。【選択図】図４
2018159989.tif 000002
【特許請求の範囲】
【請求項１】
１次キャッシュを含む複数のプロセッサと、
前記複数のプロセッサにて共有される共有キャッシュを含む、複数の記憶階層のキャッシュを制御するキャッシュ制御部と
を備え、
前記プロセッサは、前記共有キャッシュのデータが更新されているかを確認するにあたり、前記共有キャッシュのデータが更新されていれば、少なくとも自プロセッサに含まれる１次キャッシュにおける、前記更新されているデータに対応するデータを無効化させる命令を発行する
ことを特徴とする計算機システム。
【請求項２】
前記キャッシュ制御部は、任意のアドレスに対するキャッシュ・コヒーレンシが成立するポイントを有する共有キャッシュのデータの更新処理を実行するにあたり、当該データを保持する他のキャッシュにおける当該データの無効化の完了を待たずに、当該更新処理を命令したプロセッサに対して更新処理が完了したことを通知する
ことを特徴とする請求項１に記載の計算機システム。
【請求項３】
１次キャッシュを含む複数のプロセッサと、前記複数のプロセッサにて共有される共有キャッシュを含む、複数の記憶階層のキャッシュを制御するキャッシュ制御部とを備える計算機システムにおいて、
前記プロセッサが、前記共有キャッシュのデータが更新されているかを確認するにあたり、前記共有キャッシュのデータが更新されていれば、少なくとも自プロセッサに含まれる１次キャッシュにおける、前記更新されているデータに対応するデータを無効化させる命令を発行する
ことを特徴とするキャッシュ・コヒーレンス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システム及びキャッシュ・コヒーレンス方法に関する。
【背景技術】
【０００２】
キャッシュ・コヒーレンス・プロトコルとは、キャッシュ間でのデータの一貫性を保つために必要な通信の手順であり、マルチプロセッサが正しい計算結果を導き出すために必要なものである。
【０００３】
このような背景に関連する技術として、特許文献１には、キャッシュ・コヒーレンシにディレクトリ方式を採用する計算機システムにおいて、キャッシュの無効化処理の完了を保証する技術が開示されている。特許文献１に記載の技術では、各プロセッサは、キャッシュと、共有メモリとキャッシュのデータの一貫性の処理完了保証を要求されたタイミングで、各バンクへ自己のプロセッサに返信される識別子を、ネットワークを介して各バンクへ送信し、識別子が各バンクから返信されることを確認するフェンス制御手段とを備える。そして、各バンクは、メモリ本体にデータが書き込まれた領域に応じて、キャッシュが保持するデータを無効化する無効化要求を発行するディレクトリと、無効化要求と識別子とをキューイングし、キューイングされた順番に、無効化要求と識別子とのいずれかをプロセッサ・メモリ間ネットワークを介して送信する無効化要求キューとを備える。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−０４４５９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の発明では、共有キャッシュのデータを更新したプロセッサ以外のプロセッサが、共有キャッシュのデータが更新されているかを確認するタイミングによっては、更新されたデータに対応するデータを保持する全てのキャッシュの無効化が完了していることを保証することができない場合がある。
【０００６】
この発明は、上記実情に鑑みて成されたものであり、共有キャッシュのデータを更新したプロセッサ以外のプロセッサが、共有キャッシュのデータが更新されているかを確認するタイミングにかかわらず、更新されたデータに対応するデータを保持する全てのキャッシュの無効化が完了していることを保証することができる計算機システム及びキャッシュ・コヒーレンス方法の提供を目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本願発明に係る計算機システムは、１次キャッシュを含む複数のプロセッサと、複数のプロセッサにて共有される共有キャッシュを含む、複数の記憶階層のキャッシュを制御するキャッシュ制御部とを備え、プロセッサは、共有キャッシュのデータが更新されているかを確認するにあたり、共有キャッシュのデータが更新されていれば、少なくとも自プロセッサに含まれる１次キャッシュにおける、更新されているデータに対応するデータを無効化させる命令を発行する。
【０００８】
また、上記目的を達成するため、本願発明に係るキャッシュ・コヒーレンス方法は、１次キャッシュを含む複数のプロセッサと、複数のプロセッサにて共有される共有キャッシュを含む、複数の記憶階層のキャッシュを制御するキャッシュ制御部とを備える計算機システムにおいて、プロセッサが、共有キャッシュのデータが更新されているかを確認するにあたり、共有キャッシュのデータが更新されていれば、少なくとも自プロセッサに含まれる１次キャッシュにおける、更新されているデータに対応するデータを無効化させる命令を発行する。
【発明の効果】
【０００９】
このような構成においては、共有キャッシュのデータを更新したプロセッサ以外のプロセッサが、共有キャッシュのデータが更新されているかを確認するタイミングにかかわらず、更新されたデータに対応するデータを保持する全てのキャッシュの無効化が完了していることを保証することができる。
【図面の簡単な説明】
【００１０】
【図１】この実施の形態における計算機システムに搭載されたプロセッサ等を示す構成図である。
【図２】この実施の形態における複数のプロセッサ間のデータ受け渡しに係る動作シーケンスの一例を示す図である。
【図３】複数のプロセッサ間のデータ受け渡しに係る一般的な動作シーケンスの一例を示す図である。
【図４】最小構成の計算機システムの一例を示す図である。
【発明を実施するための形態】
【００１１】
まず、図面を参照しつつ、本発明に関連する一般的な技術を詳細に説明する。
【００１２】
マルチプロセッサでは、マスタ側プロセッサからスレーブ側プロセッサへのデータの受け渡し方法として、メインメモリにおける共有領域にデータを用意し、全てのデータが更新されたことを、メインメモリのフラグを更新することで通知する方法が一般的に用いられている。
【００１３】
このような受け渡し方法では、スレーブ側プロセッサがフラグの更新を認識して共有領域のデータを参照したときに、マスタ側プロセッサによる全てのデータの更新が反映されていることが不可欠である。
【００１４】
そこで、マスタ側プロセッサは、共有領域のデータ更新処理と、フラグの更新処理との順序保証のために、フラグの更新処理の前に、共有領域のデータ更新処理の完了を待ち合わせるための完了待ち合わせ処理を行っている。一般的には、メモリフェンス等の機能、又はメモリフェンス機能付き命令により、先行する共有領域のデータ更新処理の全処理完了を待ち合わせてから、フラグを更新する。
【００１５】
このように、マルチプロセッサでは、プロセッサ間のデータコヒーレンシを保証するために完了待ち合わせ処理が不可欠となる。しかしながら、キャッシュの記憶階層が深い構成や、プロセッサが多い構成では、完了待ち合わせ処理に必要な時間が増大し、システム全体の処理性能を悪化させる。
【００１６】
以下の説明では、各プロセッサに最も近い位置に実装されているキャッシュを「Ｌ１（Ｌｅｖｅｌ  １）キャッシュ」と称し、複数のプロセッサで共有可能に設けられたキャッシュのうち最も上位に位置するキャッシュを「ＬＬ（Ｌａｓｔ  Ｌｅｖｅｌ）キャッシュ」と称する。キャッシュの記憶階層は、メインメモリ側に近いほど上位のキャッシュ、プロセッサ側に近いほど下位のキャッシュである。ＬＬキャッシュは、任意のアドレスに対するキャッシュ・コヒーレンシが成立するポイントを有している。以下の説明では、キャッシュ・コヒーレンシが成立するポイントを「コヒーレンシポイント」と称する。唯一のアドレスに対しては、唯一のコヒーレンシポイントが存在する。
【００１７】
なお、マルチプロセッサと複数の記憶階層のキャッシュとを備える計算機システムは、Ｌ１キャッシュからＬＬキャッシュまでの間に、更に複数の記憶階層のキャッシュを備えていてもよい。そのような計算機システムでは、コヒーレンシポイントも任意のアドレス毎に物理的に複数箇所に分散して実装することも可能である。また、そのような計算機システムでは、キャッシュ構造もアドレスに応じてインタリーブし、複数バンク構成とすることも可能である。キャッシュ構造は、ストアスルー、ストアインのいずれであってもよく、キャッシュ状態制御のプロトコルも特別な制約はない。
【００１８】
また、マスタ側プロセッサが更新する共有領域のデータは、マスタ側プロセッサのＬ１キャッシュだけでなく、スレーブ側プロセッサを含む他のプロセッサのＬ１キャッシュにも存在している可能性がある。そのため、マルチプロセッサでは、マスタ側プロセッサによる共有領域のデータ更新処理を保証するために、スレーブ側プロセッサを含む他のプロセッサの全てのＬ１キャッシュに対する無効化処理を実行し、その全てが完了することを保証する必要がある。
【００１９】
以下の説明では、このようなマスタ側プロセッサによる共有領域のデータ更新に伴う一般的な動作の完了保証について述べる。
【００２０】
マスタ側プロセッサは、例えばストア命令等を実行することにより共有領域のデータを更新すると、コヒーレンシポイントであるＬＬキャッシュに対して、共有領域のデータ更新が発生したことを通知する。通知を受けたＬＬキャッシュは、スレーブ側プロセッサを含む他のプロセッサのＬ１キャッシュが、該当するデータをＬ１キャッシュに持っているかを判定し、持っているＬ１キャッシュに対して、無効化指示を発行する。無効化指示を受けたスレーブ側プロセッサを含むプロセッサのＬ１キャッシュは、該当するデータを無効化し、無効化完了を、コヒーレンシポイントであるＬＬキャッシュに通知する。コヒーレンシポイントであるＬＬキャッシュは、発行した全ての無効化指示に対応する無効化完了を受け取ったことに応じて、マスタ側プロセッサに対して完了通知を発行する。
【００２１】
したがって、マスタ側プロセッサは、共有領域のデータ更新に伴う動作の完了を待ち合わせる場合、共有領域のデータ更新処理のみならず、無効化指示、無効化完了、完了通知に係る全ての処理の完了を待ち合わせる必要がある。
【００２２】
図３は、複数のプロセッサ間のデータ受け渡しに係る一般的な動作シーケンスの一例を示す図である。以下の説明では、実際に共有領域のデータを参照するスレーブ側プロセッサの動作を加えて述べる。
【００２３】
この動作シーケンスでは、説明が煩雑になることを防ぐことを目的として、共有領域にアサインされたメモリのコヒーレンシポイントはスレーブ側ＬＬキャッシュに実装され、フラグ領域にアサインされたメモリのコヒーレンシポイントはマスタ側ＬＬキャッシュに実装されているものとして説明する。
【００２４】
まず、マスタ側プロセッサは、共有領域のデータを更新するにあたり、その旨のストア命令を、マスタ側Ｌ１キャッシュに対して実行する（ステップＳ６０１）。そして、マスタ側プロセッサは、完了待ち合わせ処理を開始する（ステップＳ６０２）。
【００２５】
マスタ側Ｌ１キャッシュは、ストア命令に応じて、対象装置毎に決められたキャッシュ・コヒーレンシに応じたストア処理を実行し、共有領域にアサインされたメモリのコヒーレンシポイントであるスレーブ側ＬＬキャッシュに対して、ストア処理リクエストを実行する（ステップＳ６０３）。
【００２６】
スレーブ側ＬＬキャッシュは、共有領域にアサインされたメモリのコヒーレンシポイントであるため、共有領域に対するストア処理リクエストの対象アドレスをチェックし、他のキャッシュで保持されていないかを確認し、保持しているキャッシュに対して無効化指示を発行する（ステップＳ６０４）。この動作シーケンスでは、説明が煩雑になることを防ぐことを目的として、ストア対象アドレスの内容がスレーブ側Ｌ１キャッシュで保持されている例について説明する。しかしながら、ストア対象のアドレスの内容を保持しているキャッシュは、存在していない場合もあるし、複数存在している場合もある。ストア対象アドレスの内容を保持しているキャッシュが複数存在する場合、スレーブ側ＬＬキャッシュは、対象となる全てのキャッシュに対して無効化指示を発行する。
【００２７】
無効化指示を受けたＬ１キャッシュは、ストア対象のアドレスの内容を無効化して（ステップＳ６０５）、無効化が完了した旨の完了通知を、共有領域のコヒーレンシポイントであるスレーブ側ＬＬキャッシュに通知する（ステップＳ６０６）。
【００２８】
共有領域のコヒーレンシポイントであるスレーブ側ＬＬキャッシュは、発行した無効化指示に対応する全ての完了通知を受け取ると、共有領域に対するストア処理リクエストを受けたマスタ側Ｌ１キャッシュに対して完了通知を通知する（ステップＳ６０７）。
【００２９】
マスタ側Ｌ１キャッシュは、スレーブ側ＬＬキャッシュからの完了通知を受けると、共有領域に対するストア命令を実行したマスタ側プロセッサに対して、同様に完了通知を通知する（ステップＳ６０８）。
【００３０】
マスタ側プロセッサは、完了通知を受けたことにより完了待ち合わせ処理を終了すると、フラグを更新するにあたり、その旨のストア命令を、マスタ側Ｌ１キャッシュに対して実行する（ステップＳ７０１）。
【００３１】
マスタ側Ｌ１キャッシュは、ストア命令に応じて、フラグ領域にアサインされたメモリのコヒーレンシポイントであるマスタ側ＬＬキャッシュに対して、ストア処理リクエストを実行する（ステップＳ７０２）。
【００３２】
マスタ側ＬＬキャッシュは、フラグ領域にアサインされたコヒーレンシポイントであるため、フラグ領域に対するストア処理リクエストの対象のフラグを更新して、フラグの更新処理が完了した旨の完了通知を、マスタ側Ｌ１キャッシュに通知する（ステップＳ７０３）。
【００３３】
マスタ側Ｌ１キャッシュは、マスタ側ＬＬキャッシュからの完了通知を受けると、フラグ領域に対するストア命令を実行したマスタ側プロセッサに対して、同様に完了通知を通知する（ステップＳ７０４）。
【００３４】
一方、スレーブ側プロセッサは、フラグを参照するにあたり、その旨のロード命令を、Ｌ１キャッシュに対して実行する（ステップＳ８０１）。
【００３５】
この動作シーケンスでは、スレーブ側Ｌ１キャッシュにはフラグ領域の内容が存在せず、フラグ領域のコヒーレンシポイントであるマスタ側ＬＬキャッシュを参照する例について説明する。
【００３６】
スレーブ側Ｌ１キャッシュは、ロード命令を受けると、フラグ領域のコヒーレンシポイントであるマスタ側ＬＬキャッシュに対してロード処理を要求する（ステップＳ８０２）。
【００３７】
マスタ側ＬＬキャッシュは、ロード処理の要求を受けると、フラグ領域の最新の内容をロードリプライデータとして、スレーブ側Ｌ１キャッシュに返却する（ステップＳ８０３）。
【００３８】
スレーブ側Ｌ１キャッシュは、マスタ側ＬＬキャッシュからのロードリプライデータを受けると、フラグ領域に対するロード命令を実行したスレーブ側プロセッサに対して、そのリプライデータを返却する（ステップＳ８０４）。
【００３９】
フラグ領域に対するロード命令を実行したスレーブ側プロセッサは、フラグの内容が更新されていることが確認された場合、共有領域の参照を行うにあたり、その旨のロード命令を、スレーブ側Ｌ１キャッシュに対して実行する（ステップＳ９０１）。
【００４０】
この動作シーケンスでは、スレーブ側Ｌ１キャッシュには共有領域の内容が存在せず、共有領域のコヒーレンシポイントであるスレーブ側ＬＬキャッシュを参照する例について説明する。
【００４１】
スレーブ側Ｌ１キャッシュは、ロード命令を受けると、共有領域のコヒーレンシポイントであるスレーブ側ＬＬキャッシュに対してロード処理を要求する（ステップＳ９０２）。
【００４２】
スレーブ側ＬＬキャッシュは、ロード処理の要求を受けると、共有領域の最新の内容をロードリプライデータとして、スレーブ側Ｌ１キャッシュに返却する（ステップＳ９０３）。
【００４３】
スレーブ側Ｌ１キャッシュは、スレーブ側ＬＬキャッシュからのロードリプライデータを受けると、共有領域に対するロード命令を実行したスレーブ側プロセッサに対して、そのリプライデータを返却する（ステップＳ９０４）。
【００４４】
このように、マスタ側プロセッサは、共有領域のデータを更新するにあたり、その完了を待ち合わせてフラグを更新する。そして、スレーブ側プロセッサは、フラグを参照することにより、マスタ側プロセッサによる更新が反映された最新のデータの内容を参照することができる。
【００４５】
しかしながら、コヒーレンシを保証するための待ち合わせ時間は、例えば大規模なシステムになるほど、あるいはキャッシュの記憶階層が深くなるほど、長くなる。
【００４６】
マスタ側プロセッサによる共有領域のデータ更新処理では、スレーブ側のＬＬキャッシュからの無効化指示がスレーブ側のＬ１キャッシュに到達するまでの処理時間が遅延することがある。例えば、Ｌ１キャッシュを多数実装する大規模なシステムでは、ＬＬキャッシュとＬ１キャッシュとの物理的な距離が遠くなってしまうことから、ＬＬキャッシュからの無効化指示がＬ１キャッシュに届くまでの時間が必然的に長くなってしまい、遅延が発生し易い。また、キャッシュの記憶階層が深いシステムの場合には、ＬＬキャッシュとＬ１キャッシュとの間にＬ２（Ｌｅｖｅｌ  ２）キャッシュ、Ｌ３（Ｌｅｖｅｌ  ３）キャッシュといった、複数の記憶階層のキャッシュを実行することになるため、やはり、ＬＬキャッシュからの無効化指示がＬ１キャッシュに届くまでの時間が必然的に長くなってしまい、遅延が発生し易い。
【００４７】
コヒーレンシを保証するための待ち合わせ時間は、このような無効化指示に係る遅延の影響により長くなる。このような状況下では、マスタ側プロセッサの処理緩衝時間とスレーブ側プロセッサの処理完了時間とが大きく遅れることになり、システムの処理性能が低下してしまう。
【００４８】
したがって、大規模なシステムやキャッシュの記憶階層が深いシステムでは、性能の低下を抑制するために、コヒーレンシ保証の高速化が不可欠である。
【００４９】
以下、図面を参照しつつ、本発明の一実施形態を詳細に説明する。
【００５０】
上述したように、マスタ側プロセッサは、共有領域のデータ更新処理とフラグ更新処理との順序保証のために、フラグ更新処理の前に完了待ち合わせ処理を行う。一般的に、マスタ側プロセッサは、メモリフェンス等の機能、又はメモリフェンス機能付き命令で先行する共有領域のデータ更新処理に係る全ての処理の完了を待ち合わせてから、フラグを更新する。以下の説明では、このような、先行する共有領域のデータ更新に係る全ての処理の完了を待ち合わせる動作を「ＳＹＮＣ動作」と称し、ＳＹＮＣ動作を要求する命令を「ＳＹＮＣ動作命令」と称する。なお、ＳＹＮＣ動作命令は、例えば、専用の命令形態や、他の命令にＳＹＮＣ動作の命令を付加した命令形態といった、どのような形態であってもよい。この実施の形態では、一般的に使用されているメモリフェンス機能はＳＹＮＣ動作に含まれ、メモリフェンス機能付き命令はＳＹＮＣ動作命令に含まれる。
【００５１】
また、上述したように、各コヒーレンシポイントは、ストア処理リクエストの対象アドレスをチェックし、各Ｌ１キャッシュが該当するデータを持っているかを判定し、持っているキャッシュに対して無効化指示を発行する。以下の説明では、このような無効化指示をＬ１キャッシュに反映させる動作を「ＦＬＵＳＨ動作」と称し、ＦＬＵＳＨ動作を要求する命令を「ＦＬＵＳＨ動作命令」と称する。なお、ＦＬＵＳＨ動作命令は、例えば、専用の命令形態や、他の命令にＦＬＵＳＨ動作の命令を付加した命令形態といった、どのような形態であってもよい。
【００５２】
この実施の形態では、スレーブ側プロセッサがフラグを参照する際にＦＬＵＳＨ動作を行う。ＦＬＵＳＨ動作、又はＦＬＵＳＨ動作命令を指示するプロセッサは、全てのコヒーレンシポイントに対して無効化指示を押し出す要求を発行する。以下の説明では、これを「ＦＬＵＳＨリクエスト」と称する。各コヒーレンシポイントは、ＦＬＵＳＨリクエストを受けると、要求元のプロセッサとＬ１キャッシュに対して、経路上の無効化指示を含む、先行する全ての無効化指示を押し出して、Ｌ１キャッシュに全ての無効化指示が到達したことを保証する。以下の説明では、これを「ＦＬＵＳＨリプライ」と称する。要求元のプロセッサは、全てのコヒーレンシポイントからのＦＬＵＳＨリプライを待ち合わせて、ＦＬＵＳＨ動作完了と判定する。
【００５３】
図１は、この実施の形態における計算機システムに搭載されたプロセッサ等を示す構成図である。図１では、メモリアクセス機能とＬ１キャッシュ機能を有するプロセッサの構成と、ＬＬキャッシュ機能を有するＬＬキャッシュ制御部の構成とを示す。以下の説明では、この実施の形態の特徴や固有の動作に関連する部分の構成要素のみを取り上げて説明する。その他の機能に関しては、一般的な計算機システムで使用している機能があればよい。
【００５４】
また、図１では、説明が煩雑になることを防ぐことを目的として、この実施の形態の説明に必要な部分にのみ矢印線を示している。実際の構成では、複数のプロセッサの各々、複数のＬＬキャッシュ制御部の各々は、同じハードウェアで構成されていればよい。
【００５５】
計算機システム１００は、マスタ側プロセッサ１１０Ａと、スレーブ側プロセッサ１１０Ｂと、マスタ側ＬＬキャッシュ制御部１２０Ａと、スレーブ側ＬＬキャッシュ制御部１２０Ｂとを備える。以下の説明では、マスタ側プロセッサ１１０Ａとスレーブ側プロセッサ１１０Ｂとを区別せずにプロセッサ１１０と総称する場合がある。また、以下の説明では、マスタ側ＬＬキャッシュ制御部１２０Ａとスレーブ側ＬＬキャッシュ制御部１２０Ｂとを区別せずにＬＬキャッシュ制御部１２０と総称する場合がある。
【００５６】
この実施の形態では、説明が煩雑になることを防ぐことを目的として、マスタ側プロセッサ１１０Ａと、スレーブ側プロセッサ１１０Ｂとを区別して説明する。しかしながら、マスタ側プロセッサとスレーブ側プロセッサとの関係は、実行するプログラムによって適宜入れ替わる。
【００５７】
また、この実施の形態では、マスタ側ＬＬキャッシュ制御部１２０ＡのＬＬキャッシュと、スレーブ側ＬＬキャッシュ制御部１２０ＢのＬＬキャッシュとが、コヒーレンシポイントになる。より具体的に説明すると、この実施の形態では、マスタ側ＬＬキャッシュ制御部１２０ＡのＬＬキャッシュが、フラグ領域にアサインされたメモリのコヒーレンシポイントを実装しているものとして説明する。また、この実施の形態では、スレーブ側ＬＬキャッシュ制御部１２０ＢのＬＬキャッシュが、共有領域にアサインされたメモリのコヒーレンシポイントを実装しているものとして説明する。
【００５８】
また、この実施の形態では、説明が煩雑になることを防ぐことを目的として、共有領域のコヒーレンシポイントと、フラグ領域のコヒーレンシポイントとを区別して説明する。しかしながら、共有領域のコヒーレンシポイントと、フラグ領域のコヒーレンシポイントとの関係は、実行するプログラムによって適宜入れ替わる。
【００５９】
また、この実施の形態では、説明が煩雑になることを防ぐことを目的として、マスタ側プロセッサ１１０Ａとスレーブ側プロセッサ１１０ＢとにＬ１キャッシュが実装され、マスタ側ＬＬキャッシュ制御部１２０Ａとスレーブ側ＬＬキャッシュ制御部１２０ＢとにＬＬキャッシュが実装されているものとして説明する。しかしながら、Ｌ１キャッシュやＬＬキャッシュの実装位置は、これに限られない。
【００６０】
また、この実施の形態では、説明が煩雑になることを防ぐことを目的として、Ｌ１キャッシュの上位にＬＬキャッシュが存在するものとして説明する。しかしながら、Ｌ１キャッシュとＬＬキャッシュとの間には、更に複数の記憶階層のキャッシュが存在していてもよい。
【００６１】
また、Ｌ１キャッシュ、複数の記憶階層のキャッシュ、ＬＬキャッシュのキャッシュ構造は、アドレスに応じてインタリーブし、複数バンク構成とすることも可能である。
【００６２】
マスタ側プロセッサ１１０Ａは、命令デコード部１１１Ａと、命令実行待ち合わせ部１１２Ａと、ＳＹＮＣ完了判定部１１３Ａと、ＳＹＮＣカウンタ部１１４Ａと、ＦＬＵＳＨ生成部１１５Ａと、Ｌ１キャッシュ１１６Ａと、ＦＬＵＳＨ完了判定部１１７Ａと、リクエスト生成部１１８Ａと、ロードリプライ待ち合わせ部１１９Ａとを有する。
【００６３】
なお、スレーブ側プロセッサ１１０Ｂも、マスタ側プロセッサ１１０Ａが有する構成要素と同じ構成要素を有する。以下の説明では、プロセッサ１１０が有する構成要素がいずれのプロセッサ１１０の構成要素であるかを区別する場合には、各構成要素を有するプロセッサ１１０と同じ添え字（Ａ、Ｂ）を各構成要素の末尾に付して区別する。例えば、命令デコード部１１１Ａは、マスタ側プロセッサ１１０Ａの構成要素であることを示す。同様に、命令デコード部１１１Ｂは、スレーブ側プロセッサ１１０Ｂの構成要素であることを示す。
【００６４】
また、以下の説明では、添え字が付されていない構成要素の機能及び動作は、同じ符号が付されたいずれの構成要素の機能及び動作を示す。例えば、命令デコード部１１１で説明された機能及び動作は、命令デコード部１１１Ａ、命令デコード部１１１Ｂの機能及び動作を示す。
【００６５】
命令デコード部１１１は、プロセッサ１１０が実行する命令をデコードし、必要な動作を判定する。例えば、命令デコード部１１１は、ＳＹＮＣ動作とＦＬＵＳＨ動作とを識別する。また、命令デコード部１１１は、一般的なプロセッサが有しているそれ以外の機能を有していてもよい。
【００６６】
命令実行待ち合わせ部１１２は、ＳＹＮＣ動作とＦＬＵＳＨ動作とを実行する場合に、後続命令の処理を一時的に停止し、後続命令を実行可能な特定条件が成立するまで後続命令の実行を待ち合わせる。この実施の形態では、ＳＹＮＣ動作命令により後続命令を停止している場合、ＳＹＮＣ完了判定部１１３からの指示により特定条件が成立したものとする。また、この実施の形態では、ＦＬＵＳＨ動作命令により後続命令を停止している場合、ＦＬＵＳＨ完了判定部１１７からの指示により特定条件が成立したものとする。
【００６７】
ＳＹＮＣ完了判定部１１３は、ＳＹＮＣ動作の完了を待ち合わせる。例えば、ＳＹＮＣ完了判定部１１３は、ＳＹＮＣカウンタ部１１４の値がゼロになったことでＳＹＮＣ動作の完了と判定する。なお、ＳＹＮＣ完了判定部１１３は、Ｌ１キャッシュ１１６やＬＬキャッシュを複数バンクで構成する装置にも対応し得るように、複数バンクに跨いでＳＹＮＣ動作の完了を待ち合わせる機能を実装していてもよい。
【００６８】
ＳＹＮＣカウンタ部１１４は、メインメモリのデータを更新するストア処理リクエスト数をカウントする。例えば、ＳＹＮＣカウンタ部１１４は、ストア処理リクエストをＬ１キャッシュ１１６に対して発行した時点でカウント値を１加算し、完了通知を受けるとカウント値を１減算する。したがって、カウント値がゼロであるということは、発行した全てのストア処理リクエストが完了したことを意味する。なお、ＳＹＮＣカウンタ部１１４は、Ｌ１キャッシュ１１６やＬＬキャッシュを複数バンクで構成する装置にも対応し得るように、バンク毎に実装していてもよい。
【００６９】
ＦＬＵＳＨ生成部１１５は、ＦＬＵＳＨ動作を行う。例えば、ＦＬＵＳＨ生成部１１５は、ＦＬＵＳＨ動作を必要とする命令が実行された場合に、全てのコヒーレンシポイントに対してＦＬＵＳＨリクエストを発行する。
【００７０】
Ｌ１キャッシュ１１６は、プロセッサ１１０に最も近い位置にあるキャッシュである。Ｌ１キャッシュ１１６は、一般的なキャッシュであれば、キャッシュ構造もアドレスに応じてインタリーブし、複数バンク構成とすることも可能である。
【００７１】
ＦＬＵＳＨ完了判定部１１７は、全てのコヒーレンシポイントからのＦＬＵＳＨリプライを待ち合わせて、ＦＬＵＳＨ動作完了と判定する。
【００７２】
リクエスト生成部１１８は、プロセッサ１１０からＬＬキャッシュ制御部１２０に対して発行するリクエストを生成する。この実施の形態では、ストア処理リクエスト、ロード処理リクエスト、ＦＬＵＳＨリクエストについてのみ説明する。
【００７３】
ところで、ＦＬＵＳＨ動作において、要求元のプロセッサ１１０は、全てのコヒーレンシポイントからのＦＬＵＳＨリプライを待ち合わせて、ＦＬＵＳＨ動作完了と判定する。しかしながら、ＦＬＵＳＨ動作では、ＦＬＵＳＨ動作完了よりも先にＬＬキャッシュからロードリプライデータが戻ってくる場合がある。この実施の形態では、スレーブ側プロセッサ１１０Ｂによるフラグ参照のロード命令に対するリプライデータが該当する。したがって、この実施の形態では、全てのコヒーレンシポイントからのＦＬＵＳＨリプライを待ち合わせてから、フラグ参照のリプライデータを、スレーブ側プロセッサ１１０Ｂが実行したロード命令のリプライデータとして返却する必要がある。そこで、ロードリプライ待ち合わせ部１１９は、ＦＬＵＳＨ動作完了を待ち合わせてから、ロード命令に対してリプライデータとして返却する。なお、ロードリプライ待ち合わせ部１１９は、待ち合わせが不要なロードリプライについては、ロードリプライを停滞することなく処理してもよい。
【００７４】
マスタ側ＬＬキャッシュ制御部１２０Ａは、更新完了通知部１２１Ａと、無効化指示部１２２Ａと、ＬＬキャッシュ１２３Ａと、ロードリプライ生成部１２４Ａと、ＦＬＵＳＨリプライ生成部１２５Ａとを有する。
【００７５】
なお、スレーブ側ＬＬキャッシュ制御部１２０Ｂも、マスタ側ＬＬキャッシュ制御部１２０Ａが有する構成要素と同じ構成要素を有する。以下の説明では、ＬＬキャッシュ制御部１２０が有する構成要素がいずれのＬＬキャッシュ制御部１２０の構成要素であるかを区別する場合には、各構成要素を有するＬＬキャッシュ制御部１２０と同じ添え字（Ａ、Ｂ）を各構成要素の末尾に付して区別する。例えば、更新完了通知部１２１Ａは、マスタ側ＬＬキャッシュ制御部１２０Ａの構成要素であることを示す。同様に、更新完了通知部１２１Ｂは、スレーブ側ＬＬキャッシュ制御部１２０Ｂの構成要素であることを示す。
【００７６】
また、以下の説明では、添え字が付されていない構成要素の機能及び動作は、同じ符号が付されたいずれの構成要素の機能及び動作を示す。例えば、更新完了通知部１２１で説明された機能及び動作は、更新完了通知部１２１Ａ、更新完了通知部１２１Ｂの機能及び動作を示す。
【００７７】
更新完了通知部１２１は、プロセッサ１１０から受けたストア処理リクエストが、ＬＬキャッシュ１２３のコヒーレンシポイントに受け付けられたことを、要求元のプロセッサ１１０に通知する。この実施の形態では、コヒーレンシポイントに受け付けられたことにより、スレーブ側プロセッサ１１０Ｂを含む他のプロセッサのキャッシュが、該当するデータをキャッシュに持っているかを判定し、持っているキャッシュに対して無効化指示を発行した状態を保証する。
【００７８】
無効化指示部１２２は、プロセッサ１１０から受け付けたストア処理リクエストが、ＬＬキャッシュ１２３のコヒーレンシポイントで受け付けられ、スレーブ側プロセッサ１１０Ｂを含む他のプロセッサのキャッシュが、該当するデータをキャッシュに持っているかを判定し、持っているキャッシュに対して、無効化指示を発行する。また、無効化指示部１２２は、ＦＬＵＳＨリプライ生成部１２５からＦＬＵＳＨリプライを受け取った場合、先行する無効化指示の有無を確認して、先行する無効化指示があればその後ろにＦＬＵＳＨリプライを格納し、先行する無効化指示がなければ先頭にＦＬＵＳＨリプライを格納し、無効化指示と同じ経路でＦＬＵＳＨリプライを発行する。無効化指示部１２２は、無効化指示の経路上で、ＦＬＵＳＨリプライが先行する無効化指示を追い越さないように制御する。なお、無効化指示部１２２は、このような処理を、ＦＬＵＳＨリクエストを発行したプロセッサ１１０に対してのみ行えばよく、それ以外のプロセッサ１１０に対しては何もしない。
【００７９】
ＬＬキャッシュ１２３は、コヒーレンシポイントを有している。なお、ＬＬキャッシュ１２３は、一般的なキャッシュであれば、キャッシュ構造もアドレスに応じてインタリーブし、複数バンク構成とすることも可能である。
【００８０】
ロードリプライ生成部１２４は、ＬＬキャッシュ１２３に対するロード処理リクエストを処理して得られる最新のリプライデータを生成する。実際には、ＬＬキャッシュ１２３に最新データが存在するケースや存在しないケースがあり、最新のリプライデータが、ＬＬキャッシュにあることや、メインメモリにあることや、他のＬＬキャッシュにあることもある。これらの処理や動作は、各装置が採用するキャッシュ状態制御のプロトコルに依存し、一般的に知られている各々のプロトコルに従えばよい。
【００８１】
ＦＬＵＳＨリプライ生成部１２５は、ＦＬＵＳＨリプライを生成し、無効化指示部１２２に通知する。
【００８２】
図２は、この実施の形態における複数のプロセッサ間のデータ受け渡しに係る動作シーケンスの一例を示す図である。この実施の形態では、説明が煩雑になることを防ぐことを目的として、共有領域にアサインされたメモリのコヒーレンシポイントはスレーブ側のＬＬキャッシュ１２３Ｂに実装され、フラグ領域にアサインされたメモリのコヒーレンシポイントはマスタ側のＬＬキャッシュ１２３Ａに実装されているものとして説明する。
【００８３】
まず、マスタ側プロセッサ１１０Ａは、共有領域のデータを更新するにあたり、その旨のストア命令を、マスタ側のＬ１キャッシュ１１６Ａに対して実行する（ステップＳ１０１）。ステップＳ１０１の処理では、命令デコード部１１１Ａは、ストア命令であることを識別し、Ｌ１キャッシュ１１６Ａに対してストア処理リクエストを発行する。また、命令デコード部１１１Ａは、ＳＹＮＣカウンタ部１１４Ａに対してストア処理リクエストを発行したことを通知する。
【００８４】
ＳＹＮＣカウンタ部１１４Ａは、命令デコード部１１１Ａからの通知を受けてカウント値を１加算する。なお、Ｌ１キャッシュ１１６やＬＬキャッシュ１２３を複数バンクで構成する装置にも対応するようにカウンタがバンク毎に実装されている場合、ＳＹＮＣカウンタ部１１４Ａは、対応するバンクのカウント値のみを１加算すればよい。
【００８５】
マスタ側のＬ１キャッシュ１１６Ａは、ストア命令に応じて、対象装置毎に決められたキャッシュ・コヒーレンシに応じたストア処理を実行し、共有領域にアサインされたメモリのコヒーレンシポイントであるスレーブ側のＬＬキャッシュ１２３Ｂに対して、ストア処理リクエストを実行する（ステップＳ１０３）。ステップＳ１０３の処理では、Ｌ１キャッシュ１１６Ａは、リクエスト生成部１１８Ａに対して、ストア処理リクエストを発行する。リクエスト生成部１１８Ａは、ストア処理リクエストを受けて、共有領域にアサインされたメモリのコヒーレンシポイントであるスレーブ側のＬＬキャッシュ１２３Ｂに対してストア処理リクエストを発行する。
【００８６】
スレーブ側のＬＬキャッシュ１２３Ｂは、共有領域にアサインされたメモリのコヒーレンシポイントであるため、共有領域に対するストア処理リクエストの対象アドレスをチェックし、他のキャッシュで保持されていないかを確認し、保持しているキャッシュに対して無効化指示を発行する（ステップＳ１０４）。ステップＳ１０４の処理では、ＬＬキャッシュ１２３Ｂは、共有領域にアサインされたメモリのコヒーレンシポイントであるため、共有領域に対するストア処理リクエストの対象アドレスをチェックし、他のキャッシュで保持されていないかを確認する。そして、ＬＬキャッシュ１２３Ｂは、共有領域データを保持しているキャッシュに対して無効化指示を発行するために、無効化指示部１２２Ｂに対して無効化指示の発行要求を行う。無効化指示部１２２Ｂは、無効化指示の発行要求を受けて、共有領域データを保持しているキャッシュに対して、無効化指示を発行する。この実施の形態では、スレーブ側のＬ１キャッシュ１１６Ｂが共有領域データを保持しているものとして説明する。
【００８７】
無効化指示を受けたスレーブ側のＬ１キャッシュ１１６Ａは、ストア対象のアドレスの内容を無効化する（ステップＳ１０７）。
【００８８】
一方、スレーブ側のＬＬキャッシュ１２３Ｂは、ステップＳ１０４の処理を実行したときには、共有領域に対するストア処理リクエストを受けたマスタ側のＬ１キャッシュ１１６Ａに対して完了通知を通知する（ステップＳ１０５）。ステップＳ１０５の処理では、ＬＬキャッシュ１２３Ｂは、共有領域にアサインされたメモリのコヒーレンシポイントをストア処理リクエストが通過し、キャッシュ・コヒーレンシの状態遷移が確定したとして、更新完了通知部１２１Ｂに対して、更新完了通知を通知する。更新完了通知部１２１Ｂは、更新完了通知を受けて、ストア処理リクエストを発行したマスタ側プロセッサ１１０ＡのＳＹＮＣカウンタ部１１４Ａに対して、完了通知を発行する。
【００８９】
マスタ側のＬ１キャッシュ１１６Ａは、スレーブ側のＬＬキャッシュ１２３Ｂからの完了通知を受けると、共有領域に対するストア命令を実行したマスタ側プロセッサ１１０Ａに対して、同様に完了通知を通知する（ステップＳ１０６）。
【００９０】
一方、マスタ側プロセッサ１１０Ａは、ステップＳ１０１の処理の後、完了待ち合わせ処理を行っている（ステップＳ１０２）。この完了待ち合わせ処理は、ＳＹＮＣ動作となるが、一般的に使用されているメモリフェンス機能付き命令のような専用のＳＹＮＣ動作命令を用意しても構わないし、フラグ更新の命令にＳＹＮＣ動作の命令を付加しても構わない。この実施の形態では、専用のＳＹＮＣ動作命令を用意した例について説明する。
【００９１】
ステップＳ１０２の処理では、命令デコード部１１１Ａは、ＳＹＮＣ動作命令であることを検出すると、その旨をＳＹＮＣ完了判定部１１３Ａに通知すると共に、後続の命令を命令実行待ち合わせ部１１２Ａに格納する。この実施の形態では、フラグ更新の命令が後続の命令である。
【００９２】
ＳＹＮＣ完了判定部１１３Ａは、ＳＹＮＣカウンタ部１１４Ａの全てのカウント値をチェックし、全てのカウント値がゼロになるまで監視する。ここで、全てのカウント値がゼロになっているということは、先行する全てのストア処理リクエストが各々のコヒーレンシポイントであるＬＬキャッシュ１２３で処理され、必要な無効化指示が対象のキャッシュに対して発行されたことを意味する。なお、この実施の形態では、必要な無効化指示が発行される対象のキャッシュはスレーブ側のＬ１キャッシュ１１６Ｂである。ＳＹＮＣ完了判定部１１３Ａは、全てのカウント値がゼロになったことを確認すると、命令実行待ち合わせ部１１２Ａに対して、待ち合わせの解除通知を送る。
【００９３】
命令実行待ち合わせ部１１２Ａは、ＳＹＮＣ完了判定部１１３Ａからの解除通知を受けるまでは、後続命令の実行を一時停止している。そして、命令実行待ち合わせ部１１２Ａは、解除通知を受けて、停止状態を解除し、後続の命令を処理する。この実施の形態では、このようにしてフラグ更新の命令が処理されることになる。
【００９４】
マスタ側プロセッサ１１０Ａは、完了通知を受けたことにより完了待ち合わせ処理を終了すると、フラグを更新するにあたり、その旨のストア命令を、Ｌ１キャッシュ１１６Ａに対して実行する（ステップＳ２０１）。ステップＳ２０１の処理では、命令実行待ち合わせ部１１２Ａは、停止が解除されたフラグの更新命令のストア処理リクエストをＬ１キャッシュ１１６Ａに発行する。
【００９５】
マスタ側のＬ１キャッシュ１１６Ａは、ストア命令に応じて、フラグ領域にアサインされたメモリのコヒーレンシポイントであるマスタ側のＬＬキャッシュ１２３Ａに対して、ストア処理リクエストを実行する（ステップＳ２０２）。ステップＳ２０２の処理では、Ｌ１キャッシュ１１６Ａは、リクエスト生成部１１８Ａに対して、ストア処理リクエストを発行する。リクエスト生成部１１８Ａは、ストア処理リクエストを受けて、フラグ領域にアサインされたメモリのコヒーレンシポイントであるマスタ側のＬＬキャッシュ１２３Ａに対してストア処理リクエストを発行する。
【００９６】
マスタ側のＬＬキャッシュ１２３Ａは、フラグ領域にアサインされたコヒーレンシポイントであるため、フラグ領域に対するストア処理リクエストの対象のフラグを更新して、フラグの更新処理が完了した旨の完了通知を、マスタ側のＬ１キャッシュ１１６Ａに通知する（ステップＳ２０３）。ステップＳ２０３の処理では、ＬＬキャッシュ１２３Ａは、フラグ領域にアサインされたメモリのコヒーレンシポイントであるため、フラグ領域に対するストア処理リクエストの対象アドレスをチェックし、対象装置毎に決められたキャッシュ・コヒーレンシに応じたストア処理を実行する。そして、ＬＬキャッシュ１２３Ａは、更新完了通知部１２１Ａに対して、更新完了を通知する。更新完了通知部１２１Ａは、更新完了の通知を受けて、ストア処理リクエストを発行したマスタ側プロセッサ１１０ＡのＳＹＮＣカウンタ部１１４Ａに対して、完了通知を発行する。
【００９７】
マスタ側のＬ１キャッシュ１１６Ａは、マスタ側のＬＬキャッシュ１２３Ａからの完了通知を受けると、フラグ領域に対するストア命令を実行したマスタ側プロセッサ１１０Ａに対して、同様に完了通知を通知する（ステップＳ２０４）。
【００９８】
一方、スレーブ側プロセッサ１１０Ｂは、フラグを参照するにあたり、その旨のロード命令にＦＬＵＳＨ動作の命令を付加した命令を、Ｌ１キャッシュ１１６Ｂに対して実行する（ステップＳ３０１）。ステップＳ３０１の処理では、スレーブ側プロセッサ１１０Ｂの命令デコード部１１１Ｂは、ロード命令、且つ、ＦＬＵＳＨ動作命令であることを識別し、Ｌ１キャッシュ１１６Ｂに対してロード処理リクエストを発行すると共に、ＦＬＵＳＨ生成部１１５Ｂに対してＦＬＵＳＨ動作命令であることを通知する。また、命令デコード部１１１Ｂは、ＦＬＵＳＨ動作命令の後続命令の実行を一時停止させるために、命令実行待ち合わせ部１１２Ｂに後続命令を格納する。この実施の形態では、共有領域の参照の命令が、後続の命令である。
【００９９】
スレーブ側のＬ１キャッシュ１１６Ｂは、ＦＬＵＳＨ動作の命令が付加されたロード命令を受けると、フラグ領域のコヒーレンシポイントであるマスタ側のＬＬキャッシュ１２３Ａに対してロード処理を要求する（ステップＳ３０２）。ステップＳ３０２の処理では、Ｌ１キャッシュ１１６Ｂは、リクエスト生成部１１８Ｂに対して、ロード処理リクエストを発行する。この際に、Ｌ１キャッシュ１１６Ｂは、ＦＬＵＳＨ完了待ち合わせが必要なロード処理リクエストであることをロードリプライ待ち合わせ部１１９Ｂに対して通知する。リクエスト生成部１１８Ｂは、ロード処理リクエストを受けて、フラグ領域にアサインされたメモリのコヒーレンシポイントであるマスタ側のＬＬキャッシュ１２３Ａに対してロード処理リクエストを発行する。
【０１００】
ステップＳ３０２の処理と並行して、コヒーレンシポイントである全てのＬＬキャッシュ１２３には、ＦＬＵＳＨリクエストが発行される（ステップＳ３０３）。ステップＳ３０３の処理では、ＦＬＵＳＨ生成部１１５Ｂは、命令デコード部１１１ＢからのＦＬＵＳＨ動作命令の通知を受け、リクエスト生成部１１８Ｂに対してＦＬＵＳＨリクエスト生成を指示する。リクエスト生成部１１８Ｂは、コヒーレンシポイントである全てのＬＬキャッシュ１２３に対してＦＬＵＳＨリクエストを発行する。ＦＬＵＳＨリクエストは、全てのＬＬキャッシュ制御部１２０のＦＬＵＳＨリプライ生成部１２５が受け取る。また、ＦＬＵＳＨ生成部１１５Ｂは、ＦＬＵＳＨ完了判定部１１７Ｂに対して、ＦＬＵＳＨリクエストを発行したことを通知する。ＦＬＵＳＨ完了判定部１１７Ｂは、通知を受けて、ＦＬＵＳＨリクエストに対応する全てのＦＬＵＳＨリプライが通知されるのを待ち合わせる。
【０１０１】
マスタ側のＬＬキャッシュ１２３Ａは、ロード処理の要求を受けると、フラグ領域の最新の内容をロードリプライデータとして、スレーブ側のＬ１キャッシュに返却する（ステップＳ３０４）。ステップＳ３０４の処理では、ＬＬキャッシュ１２３Ａは、対象装置毎に決められたキャッシュ・コヒーレンシに応じたロード処理を実行する。そして、ＬＬキャッシュ１２３Ａは、フラグ領域の最新の内容をロードリプライデータとしてロードリプライ生成部１２４Ａに格納する。ロードリプライ生成部１２４Ａは、ロードリプライデータが格納されると、ロード処理リクエストの発行元であるスレーブ側プロセッサ１１０Ｂのロードリプライ待ち合わせ部１１９Ｂにロードリプライデータを出力する。ロードリプライ待ち合わせ部１１９Ｂは、Ｌ１キャッシュ１１６Ｂから通知されたＦＬＵＳＨ完了待ち合わせが必要なロードリクエストに対するロードリプライデータであることを識別すると、ＦＬＵＳＨ完了判定部１１７Ｂからの完了通知が発行されるまで、要求元であるフラグ参照のロード命令に対するリプライデータの返却を待ち合わせる。
【０１０２】
一方、コヒーレンシポイントである全てのＬＬキャッシュ１２３は、ＦＬＵＳＨリクエストに対するＦＬＵＳＨリプライを発行する（ステップＳ３０５）。ステップＳ３０５の処理では、各ＬＬキャッシュ制御部１２０のＦＬＵＳＨリプライ生成部１２５は、ＦＬＵＳＨリクエストを受けると、ＦＬＵＳＨリプライを生成し、無効化指示部１２２に対して、ＦＬＵＳＨリプライを発行する。無効化指示部１２２は、ＦＬＵＳＨリプライ生成部１２５からＦＬＵＳＨリプライを受け取った場合、先行する無効化指示の有無を確認して、先行する無効化指示があればその後ろにＦＬＵＳＨリプライを格納し、先行する無効化指示がなければ先頭にＦＬＵＳＨリプライを格納し、無効化指示と同じ経路でＦＬＵＳＨリプライを発行する。無効化指示部１２２は、無効化指示の経路上で、ＦＬＵＳＨリプライが先行する無効化指示を追い越さないように制御する。このようにして、ＦＬＵＳＨリプライは、先行する全ての無効化指示を押し出す形で、ＦＬＵＳＨリクエストを発行したスレーブ側プロセッサ１１０ＢのＦＬＵＳＨ完了判定部１１７Ｂに届く。ＦＬＵＳＨ完了判定部１１７Ｂは、ＦＬＵＳＨリクエストに対応する全てのＦＬＵＳＨリプライが全ての無効化指示部１２２Ｂから通知されたのを確認して、ロードリプライ待ち合わせ部１１９Ｂと命令実行待ち合わせ部１１２Ｂとに、ＦＬＵＳＨ完了を通知する。
【０１０３】
そして、スレーブ側プロセッサ１１０Ｂには、ロード命令のリプライデータが返却される（ステップＳ３０６）。ステップＳ３０６の処理では、ロードリプライ待ち合わせ部１１９Ｂは、ＦＬＵＳＨ完了通知を受けると、フラグ参照のリプライデータをスレーブ側プロセッサ１１０Ｂが実行したロード命令のリプライデータとして返却する。
【０１０４】
また、命令実行待ち合わせ部１１２Ｂは、ＦＬＵＳＨ完了通知を受けると、一時停止していた命令の処理を開始する。このようにして、この実施の形態では、ステップＳ４０１〜Ｓ４０４に示す共有領域の参照の命令が実行可能となる。共有領域の参照処理は、図３に示す一般的な処理であるため、その詳細な説明は省略する。
【０１０５】
このようにして、この実施の形態では、フラグ参照処理にて最新のリプライデータを参照する時点で、マスタ側プロセッサ１１０Ａが実行した共有領域に対する全ての更新に対する無効化処理が、スレーブ側のＬ１キャッシュ１１６Ｂに反映されていることが保証することができる。
【０１０６】
また、この実施の形態では、複数のプロセッサ１１０におけるデータの受け渡し処理そのものにかかる時間を短縮することができ、ひいては、マスタ側プロセッサ１１０Ａとスレーブ側プロセッサ１１０Ｂとが当該処理に高速される時間を短縮することができる。
【０１０７】
なお、このような効果は、キャッシュの記憶階層が深くなるにつれて、あるいは、システムの構成が大きくなるにつれて顕著となる。したがって、この実施の形態のようなキャッシュ・コヒーレンス方法は、ＬＳＩ（Ｌａｒｇｅ−Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）製造プロセスの微細化に伴い、より大規模な装置の構築が進む状況に鑑みれば、今後の装置開発に対して欠かすことのできない方法となり得る。
【０１０８】
この発明は、上記実施の形態に限定されず、様々な変形及び応用が可能である。例えば、計算機システム１００では、上記実施の形態で示した全ての技術的特徴を備えるものでなくてもよく、少なくとも１つの課題を解決できるように、上記実施の形態で説明した一部の構成を備えたものであってもよい。
【０１０９】
上記の実施の形態では、この発明における「計算機システム」について分かり易く説明することを目的として、この発明における「計算機システム」にて採用し得る全ての構成を含む実施の形態について説明した。しかしながら、この発明における最小構成の「計算機システム」に対応する実施の形態の計算機システム１００は、図４に示すように、複数のプロセッサ１１０Ａ、１１０Ｂと、キャッシュ制御部１２０とを備え、各プロセッサ１１１０Ａ、１１０Ｂがそれぞれ１次キャッシュ１１６Ａ、１１６Ｂを有し、キャッシュ制御部１２０が共有キャッシュ１２３を制御するものであればよい。
【符号の説明】
【０１１０】
１００  計算機システム
１１０Ａ、１１０Ｂ  プロセッサ
１１６Ａ、１１６Ｂ  １次キャッシュ
１２０  キャッシュ制御部
１２３  共有キャッシュ
【図１】
2018159989.tif 000003
【図２】
2018159989.tif 000004
【図３】
2018159989.tif 000005
【図４】
2018159989.tif 000006