(57)【特許請求の範囲】
【請求項１】
（ａ）命令を処理する演算処理部と、前記命令に対応する要求を生成する要求生成部と、キャッシュメモリと、メモリ制御部とを有する演算処理装置と、（ｂ）前記メモリ制御部によりアクセス制御されるメインメモリと、をそれぞれ有する複数のノードと、
前記複数のノードそれぞれの前記演算処理装置間を接続する通信線とを有し、
第１の演算処理装置内の前記要求生成部は、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャッシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、
前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力し、
前記キャッシュステートが排他型以外の場合に、前記キャッシュフラッシュ命令に対応するキャッシュフラッシュ要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力する、情報処理装置。
【請求項２】
前記第１の演算処理装置の前記要求生成部は、前記キャッシュステートが排他型の場合に、前記書き戻し要求を出力すると共に、前記第１の演算処理装置の前記キャッシュメモリ内の前記対象アドレスのキャッシュデータを無効化する、請求項１に記載の情報処理装置。
【請求項３】
前記第２の演算処理装置は、前記書き戻し要求に応答して、前記メインメモリ内のデータのキャッシュメモリへの持ち出し情報を有するディレクトリの前記持ち出し情報を非保持状態に更新し、前記書き戻し要求が有するキャッシュデータを前記メインメモリに書き込み、要求完了応答を前記第１の演算処理装置に出力する、請求項１に記載の情報処理装置。
【請求項４】
前記第１の演算処理装置内の前記要求生成部は、前記キャッシュステートが変更なし排他型の場合は、前記書き戻し要求として、前記キャッシュデータを有さない第１の書き戻し要求を出力し、前記キャッシュステートが変更済の排他型の場合は、前記書き戻し要求として、前記キャッシュデータを有する第２の書き戻し要求を出力し、
前記第２の演算処理装置は、前記第１の書き戻し要求に応答して、前記メインメモリへの書き込み処理を行わない、請求項１に記載の情報処理装置。
【請求項５】
前記第２の演算処理装置は、前記キャッシュフラッシュ要求に応答して、前記メインメモリ内のデータのキャッシュメモリへの持ち出し情報を有するディレクトリの前記持ち出し情報を参照し、前記持ち出し情報が第３の演算処理装置のキャッシュメモリが排他型で保持の状態の場合、前記第３の演算処理装置に前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し指示を出力する、請求項１に記載の情報処理装置。
【請求項６】
前記第２の演算処理装置は、前記キャッシュフラッシュ要求に応答して、前記メインメモリ内のデータのキャッシュメモリへの持ち出し情報を有するディレクトリの前記持ち出し情報を参照し、前記持ち出し情報が第３の演算処理装置のキャッシュメモリが共有型で保持の状態の場合、前記第３の演算処理装置に前記対象アドレスのキャッシュデータを無効化する無効化指示を出力する、請求項１に記載の情報処理装置。
【請求項７】
（ａ）命令を処理する演算処理部と、前記命令に対応する要求を生成する要求生成部と、キャッシュメモリと、メモリ制御部とを有する演算処理装置と、（ｂ）前記メモリ制御部によりアクセス制御されるメインメモリと、をそれぞれ有する複数のノードと、
前記複数のノードそれぞれの前記演算処理装置間を接続する通信線と、を有する情報処理装置の制御方法であって、
第１の演算処理装置内の前記要求生成部が、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャッシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力し、前記キャッシュステートが排他型以外の場合に、前記キャッシュフラッシュ命令に対応するキャッシュフラッシュ要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力する工程を有する、情報処理装置の制御方法。
【請求項８】
命令を処理する演算処理部と、
前記命令に対応する要求を生成する要求生成部と、
キャッシュメモリと、
メインメモリのアクセス制御を行うメモリ制御部とを有し、
前記要求生成部は、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャッシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御するホーム演算処理装置に出力し、前記キャッシュステートが排他型以外の場合に、前記キャッシュフラッシュ命令に対応するキャッシュフラッシュ要求を、前記対象アドレスのメインメモリを制御するホーム演算処理装置に出力する、演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、情報処理装置および情報処理装置の制御方法に関する。
【背景技術】
【０００２】
情報処理装置（またはコンピュータ、コンピュータシステム）は、演算処理装置（またはCPU（Central Processing Unit）、プロセッサ）とメインメモリとを有するノードと呼ばれる基本構造を有する。近年のコンピュータは、このノードを複数有するマルチプロセッサシステム（またはマルチCPUシステム）である。そして、各CPUは、メインメモリのデータにアクセスする場合、データのアドレスに基づいてそのデータを記憶するメインメモリを制御するCPU（以下ホームCPU）にアクセス要求を発行する。このアクセス要求に応答して、ホームCPUがメインメモリにアクセスし読み出しまたは書き込みを実行する。
【０００３】
また、CPUは、メインメモリ内のデータの一部を記憶するキャッシュを有し、必要なデータがキャッシュに登録されている場合は、メインメモリまでアクセスせず、キャッシュからデータを読み出しまたはキャッシュに書き込みを行い、データアクセスを高速化する。
【０００４】
さらに、cc-NUMA（cache coherent Non-Uniform Memory Access）に代表されるマルチプロセッサシステムにおいて、メインメモリのデータ領域に付随してキャッシュ持ち出し情報を記憶するディレクトリを記憶し、ホームCPUは、アクセス要求に応答してディレクトリを索引し、データが他のCPUのキャッシュに持ち出されていることを示すキャッシュ持ち出し情報を参照する。ホームCPUは、このディレクトリ情報に基づいて、キャッシュ間の整合性であるキャッシュコヒーレンシをチェックする。この方法は、ディレクトリ方式のキャッシュコヒーレンシ制御と呼ばれ、広く採用されている。
【０００５】
そして、マルチプロセッサシステムは、キャッシュフラッシュ命令を提供する。キャッシュフラッシュ命令を実行することにより、更新済みデータを保持しているキャッシュは、保持されている更新済みデータをメインメモリに書き戻す。ソフトウエアは、キャッシュフラッシュ命令を実行することで、キャッシュメモリ内に保持されている更新済みデータをキャッシュメモリから吐き出し、メインメモリに更新済みデータの書き戻しを行い、書き戻しが成功したか否かの判定を行う。例えば、アプリケーションが終了するときにキャッシュフラッシュ命令が実行され、アプリケーションが使用していたキャッシュメモリ内の更新済みデータをメインメモリに書き戻すことが行われる。キャッシュのデータが更新された場合にキャッシュフラッシュ命令を速やかに実行することで、キャッシュメモリ内の更新データをメインメモリに書き戻す前にCPUが停止するなどの不整合の発生を防止し、システムのRAS（Reliability, Availability, Serviceability）の向上を図ることができる。
【０００６】
キャッシュコヒーレンシとキャッシュフラッシュについては以下の特許文献１、２に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−２０７２２３号公報
【特許文献２】特開２００４−３２６７５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年のマルチプロセッサシステムでは、前述のキャッシュフラッシュ命令の実行頻度が高くなる傾向にある。キャッシュフラッシュ命令を実行すると、当該命令を実行するCPUと命令の対象データを記憶するメインメモリを制御するホームCPUとの間や、ホームCPUと対象データを持ち出しているリモートCPUとの間で、当該命令のために発行された各種の要求や指示のパケットが伝送される。このCPU間通信量の増大は、マルチプロセッサシステムのパフォーマンスの低下を招く。
【０００９】
そこで，開示の一つの側面の目的は，キャッシュフラッシュ命令の実行に伴うCPU間通信を抑制した演算処理装置、情報処理装置および情報処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
本開示の第１の側面は，（ａ）命令を処理する演算処理部と、前記命令に対応する要求を生成する要求生成部と、キャッシュメモリと、メモリ制御部とを有する演算処理装置と、（ｂ）前記メモリ制御部によりアクセス制御されるメインメモリと、をそれぞれ有する複数のノードと、  前記複数のノードそれぞれの前記演算処理装置間を接続する通信線とを有し、
前記第1の演算処理装置内の前記要求生成部は、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力する、情報処理装置である。
【発明の効果】
【００１１】
第１の側面によれば，ャッシュフラッシュ命令の実行に伴うCPU間通信を抑制できる。
【図面の簡単な説明】
【００１２】
【図１】マルチプロセッサシステム（または情報処理装置）の概略構成例を示す図である。
【図２】３つのCPU間でのキャッシュフラッシュ命令の処理を説明する図である。
【図３】図２の状態におけるキャッシュフラッシュ命令の処理を示すシーケンス図である。
【図４】２つのCPU間でのキャッシュフラッシュ命令の処理を説明する図である。
【図５】図４の状態におけるキャッシュフラッシュ命令の処理を示すシーケンス図である。
【図６】本実施の形態におけるキャッシュフラッシュ命令の動作を示すシーケンス図である。
【図７】本実施の形態におけるローカル側のCPUの構成を示す図である。
【図８】本実施の形態におけるホーム側のCPUの構成を示す図である。
【図９】図７、８のローカルCPUとホームCPUのキャッシュフラッシュ命令に対する動作を示すフローチャート図である。
【図１０】キャッシュステートの例を示す図表である。
【図１１】ディレクトリとキャッシュステートとの関係を示す図表である。
【図１２】ディレクトリの各状態になる動作を示す図である。
【図１３】ディレクトリの各状態になる動作を示す図である。
【図１４】ディレクトリの各状態になる動作を示す図である。
【図１５】ディレクトリの各状態になる動作を示す図である。
【図１６】ディレクトリの各状態になる動作を示す図である。
【発明を実施するための形態】
【００１３】
図１は、マルチプロセッサシステム（または情報処理装置）の概略構成例を示す図である。図１の構成は、演算処理装置であるCPUとメモリMEMとで構成されるノードを複数有する。さらに、上記複数のノードを搭載するブロックBLKも複数有する。各CPUは、それぞれ演算処理部に該当する複数（M個）のコア（演算処理部）CORE_1〜CORE_mと、キャッシュユニットCA_Uと、メモリ制御部MCとを有する。さらに、各ブロックBLKは、複数（L個）のCPU（CPU_1〜CPU_ｌ）と、各CPU間を接続するCPU間通信線LINEとを有する。
【００１４】
簡単のために、ブロック数をk＝２、ブロック内のCPU数をl＝４、CPU内のコア数をｍ＝１６とすると、図１のマルチプロセッサシステムは、合計でk×l=8個のCPUと、k×l×m＝１２８個のコアを有する。また、各コアがｎ＝２個のマルチスレッド（仮想CPU）を生成可能な場合、合計仮想CPU数はｋ×ｌ×ｍ×ｎ＝２５６個となる。
【００１５】
図１において、各CPU内のコアCOREは、プログラムの命令をフェッチしデコードし演算し、キャッシュユニットCA_Uは、キャッシュメモリとそれを制御するキャッシュ制御部とを有する。さらに、メモリ制御部MCは、キャッシュ制御部からのアクセス要求または他のCPUからのアクセス要求に応答して、それぞれのCPUが管理、制御しているメインメモリMEMへのアクセスを制御する。また、メモリ制御部MCは、メインメモリMEM内のディレクトリにアクセスするディレクトリ制御部を含む。複数のCPUは、CPU間通信線LINEを介して互いに接続されている。互いに異なるブロックのCPU間にもCUP間通信線LINEが設けられる。
【００１６】
図１のマルチプロセッサシステムは、各CPUには各CPUが制御するメインメモリMEMがそれぞれ接続される。複数のCPUに対して共通のメモリ空間が割り当てられ、その共通のメモリ空間は複数のメインメモリMEMのメモリ空間に対応する。したがって、あるCPUは、自分が制御するメインメモリMEMにアクセスすることができ、さらに、他のCPUが制御するメインメモリMEMにもアクセスすることができる。
【００１７】
例えば、あるCPUでロード命令が実行されると、そのロード命令を実行するCPU（ローカルCPU）は、ロード命令のアドレスのデータを記憶するメインメモリを制御するCPU（ホームCPU）に、アクセス要求を出力する。そして、ホームCPUは、メモリ制御部MCを介してメインメモリMEMにアクセスし、読み出しデータをアクセス要求に対するデータ応答でローカルCPUに返信する。CPU間のアクセス要求やデータ応答は、CPU間通信線LINEを介して送信される。
【００１８】
各CPUは、メインメモリ内のデータの一部を記憶するキャッシュメモリを有する。複数のCPUが同じメインメモリ内の同じデータをそれぞれのキャッシュメモリに保持する場合、複数のCPU間でキャッシュメモリのデータの整合性（コヒーレンシ）を保つことが必要になる。
【００１９】
そこで、各CPUは、それぞれが制御するメインメモリ内に、キャッシュラインに対応する単位で、データが他のCPUのキャッシュメモリに持ち出されて保持されていることを示す持ち出し情報をディレクトリに記憶する。
【００２０】
そして、ホームCPUは、アクセス要求を受信した場合、メインメモリ内のディレクトリの持ち出し情報をチェックし、アクセス先のデータが他のCPUのキャッシュメモリに持ち出されて変更されている場合は、他のCPUにキャッシュメモリ内のデータの書き戻し指示を出力する。書き戻し指示を受信した他のCPUは、キャッシュメモリ内のデータを無効化し、そのデータを指示完了応答と共にホームCPUに返信する。ホームCPUは、更新済みの最新データをメインメモリに書き戻し、アクセス要求元のCPUにデータ応答を返信する。これが、ディレクトリ方式によるキャッシュコヒーレンシ制御である。
【００２１】
ここで、以下の説明では、命令を実行するCPUをローカルCPU、メインメモリを管理、制御するCPUをホームCPU、そして、メインメモリのデータを持ち出しているCUPをリモートCPUと称する。また、命令を実行するローカルCPUが他のCPUに命令に対応する処理を依頼する場合は、要求と称し、それに対する応答は要求完了応答と称する。さらに、要求を受信したCPUがさらに他のCPUに要求に対応する処理を依頼する場合は、指示と称し、それに対応する応答を指示完了応答と称する。要求と指示は、いずれも他のCPUへの何らかの処理の依頼であるが、両者を区別するためにあえて異なる用語を使用する。
【００２２】
［ディレクトリとキャッシュステート］
ここで、以下の説明の理解を容易にするために、マルチプロセッサシステムにおけるキャッシュコヒーレンシ制御の概略について、ディレクトリ及びキャシュステートと共に説明する。
【００２３】
図１０は、キャッシュステートの例を示す図表である。キャッシュステート（キャッシュ状態）は、各キャッシュラインのデータのステート（状態）を示し、キャッシュタグに保持されている。図表は、あるCPU内の４つのキャッシュステート（MESI）について、所有権タイプ、他のCPUが同時に取りうるステート、メインメモリのデータとの差異、そして、キャッシュフラッシュ命令に対応する動作として、キャッシュステートとキャッシュデータの動作とを示す。
【００２４】
図表の下から順に説明する。まず、キャッシュのステートがI(Invalid：無効)の場合、キャッシュメモリには有効なデータが保持されていない。
【００２５】
次に、キャッシュステートがS(Share：共有)の場合、キャッシュメモリにはデータが保持され、同じデータが他のCPUのキャッシュメモリにも保持されている可能性があることを示す。したがって、所有権タイプは共有型で、他のCPUが同時にとりうるステートはSまたはIであり、メインメモリとのデータの差異はなく同一データである。そして、キャッシュフラッシュ命令に対応する動作では、命令を実行するCPUのキャッシュステートだけでは他のCPUのキャッシュメモリがデータを保持しているかどうか判定できないので、ホームCPUがそのディレクトリをチェックし、キャッシュメモリに対象データを保持している全てのCPUに対して、無効化指示を行う。無効化指示されたリモートCPUは、キャッシュステートをSからIに変更（無効化）し、キャッシュデータは破棄される。
【００２６】
そして、キャッシュステートがE（Exclusive：排他）の場合、キャッシュメモリにデータが保持されデータに変更は加えられておらず、他のCPUのキャッシュメモリには同じデータが保持されていない状態である。したがって、所有権タイプは排他型で、他のCPUが同時にとりうるステートはIだけであり、メインメモリとデータの差異はなく同一データである。そして、キャッシュフラッシュ命令に対応する動作では、キャッシュステートはEからIに変更（無効化）される。キャッシュメモリ内のデータはメインメモリと同じであるので、キャッシュデータをメインメモリに書き戻すか破棄するかは任意である。
【００２７】
最後に、キャッシュステートがM（Modify：変更）の場合、キャッシュメモリにデータが保持され、そのキャッシュのデータが変更されて最新のデータであり、他のCPUのキャッシュメモリには同じアドレスのデータが保持されていない状態である。したがって、所有権タイプは排他型で、他のCPUが同時にとりうるステートはIだけであり、メインメモリとデータの差異がある。そして、キャッシュフラッシュ命令に対応する動作では、キャッシュステートはMからIに変更（無効化）され、キャッシュデータはメインメモリに書き戻される必要がある。
【００２８】
図１１は、ディレクトリとキャッシュステートとの関係を示す図表である。ホームCPU(H-CPU)は、メインメモリMEM内に、キャッシュラインに対応するデータ領域についての持ち出し情報を有するディレクトリを保持する。持ち出し情報は、ディレクトリの状態と、CPU数と、ノード番号とを有する。
【００２９】
図１１の図表は、ローカルCPU(L-CPU)のキャッシュステート（即ちキャッシュタグのステートTAG_STATE）の４つの状態（I、S、E、M)に対応して、ホームCPU（H-CPU）のディレクトリの３つの状態（LO、R-SH、R-EX）とリモートCPU(R-CPU)のタグのステートを示す。
【００３０】
状態I（Invalid：無効）は、ローカルCPU(L-CPU)のキャッシュメモリにメインメモリのデータが持ち出されていない状態である。この時、ホームCPU（H-CPU）のディレクトリ状態がLO（Local：自CPUのみ）であれば、メインメモリ内のデータが、ホームCPU以外のCPUのキャッシュメモリに保持されていないことを示す。したがって、リモートCPU(R-CPU)のタグステートは状態Iである。ホームCPU（H-CPU）のディレクトリ状態がR-SH（Remote Share：リモートCPUが共有型で保持）であれば、メインメモリ内のデータがローカルCPU（L-CPU）以外のCPU、すなわちリモートCPU（R-CPU）のキャッシュメモリに持ち出されて、保持されていることを示す。したがって、リモートCPU（R-CPU）のタグステートはS（Share：共有）である。また、ホームCPU（H-CPU）のディレクトリ状態がR-EX（Remote Exclusive：リモートCPUが排他型で保持）の時は、メインメモリ内のデータがローカルCPU以外のCPU、すなわちリモートCPU（R-CPU）のキャッシュメモリに持ち出されて、保持されていることを示し、リモートCPU(R-CPU)のタグステートはE(Exclusive：排他)またはM（Modify：変更）である。
【００３１】
状態S（Share：共有）は、ローカルCPU（L-CPU）のキャッシュメモリにメインメモリのデータが共有型で持ち出されている状態である。この時、ホームCPU（H-CPU）のディレクトリ状態はR-SHとなり、メインメモリ内のデータは、ローカルCPU（L-CPU）を含む１つ以上のCPUのキャッシュメモリに持ち出されて、保持されていることを示す。したがって、リモートCPU（R-CPU）のタグステートはIまたはSである。
【００３２】
状態E(Exclusive：排他)またはM（Modify：変更）は、ローカルCPU(L-CPU)のキャッシュメモリにメインメモリのデータが排他型で持ち出されている状態である。この時、ホームCPU（H-CPU）のディレクトリ状態はR-EXとなり、メインメモリ内のデータはローカルCPU（L-CPU）のキャッシュメモリのみに持ち出されて、保持されている事を示す。したがって、リモートCPU（R-CPU）のタグステートはIである。
【００３３】
次に、図１０、図１１のキャッシュステートとディレクトリに基づいて、以下、Load命令とStore命令の動作について簡単に説明する。
【００３４】
図１２、図１３、図１４、図１５、図１６により、ディレクトリの各状態になる動作の一例を示す。各図において、左からローカルCPU(L-CPU)、ホームCPU(H-CPU)、リモートCPU(R-CPU)が示され、ローカルCPUとリモートCPUにはキャッシュステートTAG_STATEが、ホームCPUにはディレクトリ内のデータ持ち出し情報（持ち出し状態DIR、CPU数、ノード）とが示される。
【００３５】
まず、図１２は、メインメモリのデータが他のCPUに持ち出されていない状態（ディレクトリの状態がDIR＝LO）のケース１を示す。状態LOでは、ホームCPU(H-CPU)が制御するメインメモリのデータは、他のCPUに持ち出されておらず他のCPUのキャッシュメモリに保持されていない。そのため、ローカルCPU（L-CPU）とリモートCPU(R-CPU)のキャッシュステートTAG_STATEはともにI：無効である。
【００３６】
図１３は、他のCPUが対象アドレスのデータを保持していない状態でLoad命令が実行されて、ディレクトリの状態がDIR＝R-EXになるケース２を示す。ケース２はケース１から遷移する。この例では、ローカルCPU(L-CPU)がLoad命令を実行し、ローカルCPU内でキャッシュミスして、ホームCPU（H-CPU）にアクセス要求を出力する。これに応答して、ホームCPU(H-CPU)は、メインメモリにアクセスしてデータを読み出しローカルCPU(L-CPU)にデータ応答する。このとき、ホームCPU(H-CPU)のディレクトリ制御部は、ディレクトリの状態DIRをLOからR-EX（排他型で保持）に変更し、CPU数を１にし、ノード番号NODEを無（NONE）から＃１に変更する。ローカルCPUのノード番号は＃１である。そして、ローカルCPU(L-CPU)のキャッシュ制御部は、データ応答の読み出しデータをキャッシュメモリに登録し、キャッシュステートTAG_STATEをIからEに変更する。ステートEは排他型（Exclusive Type）である。
【００３７】
図１４は、他のCPUがキャッシュステートEで保持している状態でLoad命令を実行し、ディレクトリの状態がDIR=R-SHになるケース３を示す。この例はケース２から遷移した例であり、リモートCPU(R-CPU)は、ケース２のローカルCPU(L-CPU)だったノード番号＃１のCPUである。この例では、図１３と同様に、ローカルCPU(L-CPU)がLoad命令を実行し、ローカルCPU内でキャッシュミスし、ホームCPU（H-CPU）にアクセス要求を出力する。これに応答して、ホームCPU(H-CPU)は、メインメモリにアクセスしてデータを読み出しローカルCPU(L-CPU)にデータ応答する。このとき、ホームCPU(H-CPU)のディレクトリ制御部は、ディレクトリの状態DIRがR-EXであったため、ローカルCPU(L-CPU)は、キャッシュステートをIからS（共有型）に変更する。また、リモートCPU(R-CPU)は、ホームCPUからのTAG更新指示に応答して、キャッシュステートをEからSに変更する。その結果、CPU数は１から２に、ノード番号NODEを＃１から＃１と＃２に、それぞれ変更される。
【００３８】
図１５は、他のCPUがステートSで保持している状態でLoad命令を実行し、ディレクトリの状態がDIR=R-SHのまま維持されるケース４を示す。この例はケース３から遷移した例である。ローカルCPU(L-CPU)は、データ応答のデータをキャッシュ登録し、ステートをIからSに変更する。その結果、ディレクトリの状態はDIR=R-SHのまま維持され、CPU数は２から３に変更され、ノード番号NODEはローカルCPUの番号＃３が加えられて＃１、＃２、＃３に更新される。
【００３９】
図１６は、他のCPUがデータを保持していない状態でStore命令を実行し、ディレクトリの状態がDIR=R-EXになるケース５を示す。この例はケース１から遷移する。ローカルCPU(L-CPU)がStore命令を実行し、キャッシュミスし、ホームCPU(H-CPU)にアクセス要求を出力し、ホームCPUがメインメモリのデータを読み出して、ローカルCPUにデータ応答する。ローカルCPUは、そのデータをキャッシュメモリに登録し、Store命令の書き込みデータに変更する。その結果、ローカルCPUのステートはIからMに変更される。また、ホームCPUは、ディレクトリの状態をDIR=R-EXに変更し、CPU数を１にし、ノード番号NODEをローカルCPUの番号＃１にする。
【００４０】
以上のとおり、図１３のケース２と図１６のケース５において、ディレクトリの状態がR-EXにされる。以下、ディレクトリがR-EX（排他型）の場合のキャッシュフラッシュ命令の問題点と、本実施の形態の動作とCPUの構成を説明する。
【００４１】
［キャッシュフラッシュ命令の処理例１］
図２は、３つのCPU間でのキャッシュフラッシュ命令の処理を説明する図である。図２の例では、ローカルCPU（L-CPU）のコアCOREがキャッシュフラッシュ命令を実行する。また、キャッシュフラッシュ命令に含まれる対象アドレスは、ホームCPU（H-CPU）が制御するメインメモリMEMに対応付けられている。一方、リモートCPU(R-CPU)がキャッシュフラッシュ命令の対象アドレスのデータを持ち出してキャッシュメモリ内に保持している。キャッシュメモリはキャッシュユニットCA_U内にある。そして、ホームCPUのメモリ制御部（ディレクトリ制御部を含む）MCは、メインメモリMEM内のディレクトリの持ち出し情報（状態DIR）をチェックして必要な処理を行い、キャッシュコヒーレンシを保つ。
【００４２】
図３は、図２の状態におけるキャッシュフラッシュ命令の処理を示すシーケンス図である。まず、ローカルCPU（L-CPU）のコアがソフトウエアのキャッシュフラッシュ命令を実行する（S1）。キャッシュフラッシュ命令にはフラッシュ対象のアドレスが含まれる。ローカルCPU（L-CPU）は、キャッシュフラッシュ命令に応答して、キャッシュフラッシュ要求を、対象アドレスのメインメモリを制御するホームCPU(H-CPU)に出力する（S2）。このキャッシュフラッシュ要求は、ホームCPU（H-CPU）を宛先とし、キャッシュフラッシュ要求の識別情報と、対象アドレスとを有するパケットであり、CPU間通信線LINEを介してホームCPUに送信される。
【００４３】
次に、ホームCPU(H-CPU)では、キャッシュフラッシュ要求に応答して、ディレクトリ制御部がメインメモリMEM内のディレクトリの対象アドレスに対応する持ち出し情報（状態）を索引してチェックする（S3）。この例では、リモートCPU(R-CPU)が対象アドレスのデータをキャッシュメモリに保持しているので、チェックした持ち出し情報は、状態（R-EX：排他型で保持、またはR-SH:共有型で保持）と、リモートCPU（R-CPU）の識別情報（ノード番号）とを示している。そこで、ホームCPU(H-CPU)は、持ち出し情報が排他型で保持R-EXなら、対象アドレスのキャッシュラインのデータをメインメモリに書き戻す書き戻し指示を、リモートCPU(R-CPU)に出力する（S4）。一方、持ち出し情報が共有で保持R-SHなら、対象アドレスのキャッシュラインを無効化する無効化指示を、リモートCPU(R-CPU)に出力する（S4)。この書き戻し指示または無効化指示は、リモートCPU(R-CPU)を宛先とし、書き戻し指示または無効化指示の識別情報と、対象アドレスとを有するパケットであり、CPU間通信線LINEを介して送信される。
【００４４】
一方、リモートCPU(R-CPU)は、書き戻し指示に応答して、キャッシュラインを無効化し、キャッシュメモリ内の書き戻しデータを添付して指示完了応答をホームCPUに返信する（S6）。または、リモートCPUは、無効化指示に応答して、キャッシュラインを無効化し、指示完了応答をホームCPUに返信する（S6）。この指示完了応答も応答パケットのCPU間通信である。
【００４５】
そして、ホームCPUは、指示完了応答に応答して、ディレクトリを更新し（R-EXからLO：非保持に更新、またはR-SHからLOに更新）、指示完了応答S6が指示S4に適切に対応するか否かのプロトコルチェックを行う。さらに、書き戻しデータ付の指示完了応答の場合、ホームCPUは、メインメモリに書き戻しデータを書き込む（S7）。そして、ホームCPUは、ローカルCPUに要求完了応答のパケットをCPU間通信で送信する（S8）。この要求完了応答は、要求を正常に終了したか、書き戻しを失敗したかの情報が含まれる。
【００４６】
最後に、ローカルCPUは、要求完了応答S8の内容に基づいて、キャッシュフラッシュ命令を発行したソフトウエアに、正常終了または書き戻し失敗の通知をおこなう（S9）。
【００４７】
以上の動作で、キャッシュフラッシュ命令の対象アドレスのデータを保持しているリモートCPUのキャッシュメモリから、そのキャッシュデータがメインメモリに書き戻され、または無効化される。また、ホームCPUがキャッシュフラッシュ命令のアドレスのデータの持ち出し情報をディレクトリに保持しているので、ローカルCPUは、キャッシュフラッシュ命令を実行する場合、最初に、ホームCPUにキャッシュフラッシュ要求を出力する。そして、ホームCPUが対象アドレスのディレクトリ情報（持ち出し情報）に基づいて、キャッシュメモリに対象アドレスのデータを保持している全てのCPUに、データの書き戻しまたは無効化を指示する。そのため、キャッシュフラッシュ要求S2と、書き戻しまたは無効化指示S4と、指示完了応答S6と、要求完了応答S8の４回のCPU間通信が行われる。
【００４８】
［キャッシュフラッシュ命令の問題のある処理例２］
図４は、２つのCPU間でのキャッシュフラッシュ命令の処理を説明する図である。図４の例では、ローカルCPU（L-CPU）のコアCOREがキャッシュフラッシュ命令を実行する。そして、ローカルCPU(L-CPU)がキャッシュフラッシュ命令の対象アドレスのデータを持ち出してキャッシュメモリ内に排他型（EまたはM）または共有型（S）で保持している。
【００４９】
図５は、図４の状態におけるキャッシュフラッシュ命令の処理を示すシーケンス図である。まず、ローカルCPU（L-CPU）のコアがソフトウエアのキャッシュフラッシュ命令を実行する（S1）。ローカルCPU（L-CPU）は、キャッシュフラッシュ命令に応答して、キャッシュフラッシュ要求をホームCPU(H-CPU)に出力する（S2）。このキャッシュフラッシュ要求は、図３と同じである。
【００５０】
次に、ホームCPU(H-CPU)では、キャッシュフラッシュ要求に応答して、ディレクトリ制御部MCがメインメモリMEM内のディレクトリの対象アドレスに対応する持ち出し情報を索引してチェックする（S3）。この例では、ローカルCPU(L-CPU)が対象アドレスのデータをキャッシュメモリに保持しているので、チェックした持ち出し情報は、状態（R-EX：排他型で保持、またはR-SH：共有型で保持）と、ローカルCPU（L-CPU）の識別情報とを示す。
【００５１】
そこで、ホームCPU(H-CPU)は、持ち出し情報がR-EXなら、対象アドレスのキャッシュラインのデータをメインメモリに書き戻す書き戻し指示を、ローカルCPU(L-CPU)に出力する（S4)。または、持ち出し情報がR-SHなら、対象アドレスのキャッシュラインを無効化する無効化指示を、ローカルCPU(L-CPU)に出力する（S4)。この書き戻し指示または無効化指示は、ローカルCPU(L-CPU)を宛先とするパケットである。
【００５２】
一方、ローカルCPU(L-CPU)は、書き戻し指示に応答して、キャッシュラインを無効化し、キャッシュメモリ内の書き戻しデータを添付して指示完了応答をホームCPUに返信する（S6）。または、ローカルCPUは、無効化指示に応答して、キャッシュラインを無効化し、指示完了応答をホームCPUに返信する（S6）。
【００５３】
そして、ホームCPUは、指示完了応答に応答して、ディレクトリを更新し（R-EXからLOに更新、またはR-SHからLOに更新）、指示完了応答S6が指示S4に適切に対応するか否かのプロトコルチェックを行う。さらに、書き戻しデータ付の指示完了応答の場合、ホームCPUは、メインメモリに書き戻しデータを書き込む（S7）。そして、ホームCPUは、ローカルCPUに要求完了応答のパケットを出力する（S8）。
【００５４】
最後に、ローカルCPUは、要求完了応答S8の内容に基づいて、キャッシュフラッシュ命令を発行したソフトウエアに、正常終了または書き戻し失敗の通知をおこなう（S9）。
【００５５】
以上の動作で、キャッシュフラッシュ命令で指定した対象アドレスのデータを保持しているローカルCPU（L-CPU）のキャッシュメモリから、キャッシュデータがメインメモリに書き戻され、または無効化される。
【００５６】
図４、図５の場合、キャッシュフラッシュ命令を実行するCPUとそのキャッシュデータを保持するCPUとが同じローカルCPU(L-CPU)である。したがって、ローカルCPU(L-CPU)のみが、キャッシュフラッシュ命令のアドレスのデータをキャッシュメモリに保持していることが明確な場合でも、つまり、ローカルCPUがキャッシュフラッシュ対象のデータを排他型（EまたはM）で保持している場合でも、ローカルCPUがホームCPUにキャッシュフラッシュ要求を出力し、４回のパケットのCPU間通信を行う。CPU間通信は、CPUチップ外部への通信であるので高速化することが困難である。そのため、キャッシュフラッシュ命令の処理時間が長くなる。これでは、キャッシュフラッシュ命令を頻繁に実行することによるシステムのRAS向上とその高速処理とを達成することができない。
【００５７】
［本実施の形態のキャッシュフラッシュ命令の概略動作］
本実施の形態では、ローカルCPUはキャッシュフラッシュ命令を実行する際、自分のキャッシュメモリに対象アドレスのデータを排他型（EまたはM）で保持している場合は、前述のキャッシュフラッシュ要求をホームCPUに送信するのではなく、キャッシュメモリのデータを無効化し、キャッシュメモリのデータを書き戻す書き戻し要求をホームCPUに送信する。ホームCPUは、書き戻し要求に応答して、ディレクトリの持ち出し情報を確認せず、ディレクトリをR-EX（排他型で保持）からLO（保持せず）に更新し、書き戻し要求に書き戻しデータがあればメインメモリに書き込む。書き戻しデータがなければメインメモリに書き込まない。そして、ホームCPUは、ローカルCPUに要求完了応答を返信する。具体的な動作は次のとおりである。
【００５８】
図６は、本実施の形態におけるキャッシュフラッシュ命令の動作を示すシーケンス図である。前程として、ローカルCPU(L-CPU)は、キャッシュフラッシュ命令の対象アドレスのデータを自分のキャッシュメモリに排他型（EまたはM）で保持している。つまり、ホームCPUのディレクトリのキャッシュ状態はR-EX（排他型で保持）である。
【００５９】
まず、ローカルCPUにおいてソフトウエアがキャッシュフラッシュ命令を実行する（S11）。これに応答して、ローカルCPUのキャッシュフラッシュ要求生成部（後述する）は、キャッシュフラッシュの対象アドレスについてキャッシュメモリの状態（キャッシュステート）をチェックする（S12）。この例では、ローカルCPUのキャッシュメモリが対象アドレスのデータを排他型（EまたはM）で保持している。
【００６０】
そこで、ローカルCPUの要求生成部は、書き戻し要求を生成し（S13）、保持しているキャッシュメモリのデータを無効化し（S14）、書き戻し要求をホームCPU（H-CPU）に送信する（S15）。キャッシュステートがE（変更なし排他型）の場合、キャッシュのデータをメインメモリに書き戻す必要はないので、書き戻し要求にはキャッシュのデータは含まれなくてよい。一方、キャッシュステートがM（変更済で排他型）の場合、キャッシュのデータをメインメモリに書き戻す必要が有るので、書き戻し要求にはキャッシュのデータが含まれる。書き戻し要求には、データ以外に、対象アドレスが含まれる。
【００６１】
書き戻し要求に応答して、ホームCPUは、ディレクトリの状態をE-EXからLOに更新し、前述のプロトコルチェックを行う（S16）。さらに、ホームCPUは、書き戻し要求のキャッシュデータをメインメモリ内の対象アドレスの領域に書き込む（S16）そして、ホームCPUは、要求の処理が成功したか否かの情報を付加した要求完了応答を、ローカルCPUに返信する（S17）。ローカルCPUは、要求完了応答の内容に応じて、ソフトウエアに正常終了または書き戻し失敗を通知する（S18）。
【００６２】
ローカルCPUが、キャッシュフラッシュ命令を実行する際、自分のキャッシュメモリに排他型で対象のデータを保持している場合、ローカルCPUがそのデータを無効化するので、ホームCPUからの無効化指示を必要としない。さらに、ローカルCPUは、書き戻し要求をホームCPUに送信するので、ホームCPUはディレクトリのチェックの必要がなく、ローカルCPUに書き戻し指示を送信する必要がない。つまり、本実施の形態では、図５の書き戻しまたは無効化指示S4と指示完了応答S6が不要になる。その結果、ローカルCPUとホームCPU間のCPU間通信の数を減らすことができ、キャッシュフラッシュ命令を高速に処理することができる。
【００６３】
本実施の形態では、ローカルCPUは、キャッシュステートが排他型以外の共有型Sか無効Iの場合、図３と同様に、キャッシュフラッシュ要求をホームCPUに送信する。その後の処理は、図３に示したとおりであり、ホームCPUは、ディレクトリをチェックし、R-SH：共有型で保持であれば、データを保持しているリモートCPUに無効化指示を送信してリモートCPUにキャッシュ無効化処理を行わせる。そして、ホームCPUは、リモートCPUから指示完了応答を受信すると、ディレクトリを更新し、要求完了応答をローカルCPUに返信する。
【００６４】
ホームCPUは、ディレクトリがLO：非保持であれば、ディレクトリの更新やメインメモリへの書き込みを行わずに要求完了応答をローカルCPUに返信する。
【００６５】
以上のように、本実施の形態によれば、ローカルCPUが自分のキャッシュメモリに排他型で保持しているデータに対してキャッシュフラッシュ命令を実行する場合、少ないCPU間通信でその命令を完了することができる。
【００６６】
［本実施の形態におけるCPU構成とその動作］
図７は、本実施の形態におけるローカル側のCPUの構成を示す図である。また、図８は、本実施の形態におけるホーム側のCPUの構成を示す図である。CPUは、ローカルCPUとして動作することもホームCPUとして動作することもあるので、CPUは図７と図８の構成を両方とも有する。なお、以下、キャッシュフラッシュはCA_FLと略することがある。
【００６７】
図７のローカル側のCPUは、コアが実行する命令をデコードする命令デコーダ１０と、命令がキャッシュフラッシュ（CA_FL）命令の場合、キャッシュフラッシュ（CA_FL）要求生成指示10_Aに応答してCA_FL命令のための要求を生成する要求生成部１６と、命令がCA_FL命令以外の場合のCA_FL命令以外の要求生成指示10_Bに応答して要求を生成する要求生成部１２とを有する。さらに、CPUは、両要求生成部１２、１６が生成する要求を他のCPUに送信する要求発行部１４を有する。
【００６８】
CA_FL要求生成部１６は、要求生成指示10_Aを受信しキャッシュ状態（ステート）の索引依頼20_Aとトリガ信号20_Cを出力する受信部２０を有する。そして、状態解析部２２は、キャッシュ状態応答20_Bのキャッシュステートが無効または共有型（I/S）の場合は、CA_FL要求生成部２６に要求生成依頼22_I/Sを出力する。また、状態解析部２２は、排他型且つデータ更新無し（E）の場合は、データなし書き戻し要求生成部２８に要求生成依頼22_Eを出力すると共にキャッシュ無効化処理部３６に無効化依頼22_Eを出力する。さらに、状態解析部２２は、キャッシュステートが排他型且つデータ更新あり（M）の場合は、データ付き書き戻し要求生成部３０に要求生成依頼22_Mを出力すると共にキャッシュ無効化処理部３６に無効化依頼22_Mを出力する。
【００６９】
また、データ読出部２４は、要求生成依頼22_Mに応答して、データ読出依頼24_Aをキャッシュ制御部CA_Cに出力し、それに応答するデータ応答24_Bはデータ付き書き戻し要求生成部３０に返信される。
【００７０】
各要求生成部２６、２８、３０は、それぞれの要求生成依頼に応答して、CA_FL要求26_A、データなし書き戻し要求28_A、データ付き書き戻し要求30_Aをそれぞれ生成する。それらの要求はORゲート３２を介して要求発行部１４に供給される。要求発行部１４は、各要求をCPU間通信でホームCPU（H-CPU）に送信する。
【００７１】
また、要求生成依頼22_Mと22_EはORゲート３４を介して無効化処理部３６に供給され、無効化処理部３６は無効化依頼36_Aをキャッシュ制御部CA_Cに出力する。キャッシュ制御部CA_Cは、無効化依頼に応答して、キャッシュフラッシュ対象アドレスのキャッシュラインを無効化、具体的にはキャッシュステートをEまたはMからI(無効)に変更する。なお、キャッシュメモリCA_Mは、キャッシュステートを記憶するキャッシュタグが含まれる。
【００７２】
なお、ローカルCPUは、ホームCPUからの要求完了応答や、他のCPUからのアクセス要求等を受信する受信部（図示せず）を有する。受信部は、受信した要求完了応答や要求を処理する回路に応答処理や要求処理を依頼する。
【００７３】
図８のホーム側のCPUは、ローカルCPUからのCA_FR要求または書き戻し要求、あるいはそれら以外の要求を受信し、要求内容を判定する要求判定部４０を有する。さらに、ホームCPUは、書き戻し要求処理部４２と、CA_FL要求処理部５０と、CA_FL命令以外の要求処理部５２とを有する。
【００７４】
要求判定部４０は、書き戻し要求の場合、書き戻し要求処理の実行指示40_Aを書き戻し要求処理部４２に出力する。同様に、CA_FL要求の場合、CA_FL要求処理の実行指示40_BをCA_FL要求処理部５０に出力し、CA_FL命令以外の要求の場合、CA_FL命令以外の要求処理部５２に要求処理実行指示40_Cを出力する。
【００７５】
書き戻し要求処理部４２は、書き戻し要求がデータ付きかデータなしかを判定する判定部４４と、いずれの書き戻し要求であってもディレクトリ制御部DCに無効化依頼46_Aを出力するディレクトリ更新制御部４６と、データ付き書き戻し要求の場合にメモリ制御部MCに書き戻しデータを添付する書き戻し依頼48_Aを出力するデータ書き戻し制御部４８とを有する。ディレクトリ制御部DCは、無効化依頼46_Aに応答して、メインメモリ内のディレクトリをR-EX（排他型で所有）をLO（無効）に更新する。また、メモリ制御部MCは、書き戻し依頼48_Aに応答して、書き戻しデータをメインメモリの対象アドレス領域に書き込む。
【００７６】
CA_FL要求処理部５０は、CA_FL要求の対象アドレスのディレクトリの状態をチェックするディレクトリチェック部６０と、チェック結果に応じた指示（書き戻し指示または無効化指示）を生成する指示生成部６２と、指示完了応答に応答してディレクトリの状態を更新するディレクトリ更新制御部６４と、指示完了応答に応答して書き戻しデータをメインメモリに書き込むデータ書き戻し制御部６６とを有する。
【００７７】
そして、CA_FL命令以外の要求処理部５２は、CA_FL命令以外、例えばロード命令やストア命令に対応する要求を処理する。この要求処理部５２の構成は、一般的な構成であるので、説明を省略する。
【００７８】
各要求処理部４２、５０、５２は要求完了応答42_A、50_A、52_Aを、要求完了応答発行部５４に出力し、要求完了応答発行部５４は、それらの要求完了応答を、要求を発行したローカルCPU宛にCPU間通信で送信する。
【００７９】
なお、ホームCPUは、要求処理部５０、５２が他のCPUに出力する指示を出力する指示発行部（図示せず）と、他のCPUからの指示完了応答を受信する指示完了応答受信部（図示せず）などを有する。
【００８０】
図９は、図７、８のローカルCPUとホームCPUのキャッシュフラッシュ命令に対する動作を示すフローチャート図である。以下、このフローチャート図を参照しながら、図７、図８のローカルCPUとホームCPUの動作を説明する。
【００８１】
まず、ローカルCPU(L-CPU)にて、命令デコーダ１０がコアからの命令がキャッシュフラッシュ命令であることを検出すると(S21のYES)、受信部２０がキャッシュステートの索引をキャッシュ制御部に依頼する（S23）。これにより、CA_FL命令の対象アドレスのキャッシュステートがチェックされる。
【００８２】
キャッシュステートが排他型でない場合（S24のNO,ステートI/S）、CA_FL要求生成部２６がCA_FL要求を生成する（S31）。排他型で且つデータが更新なしの場合（S24のYES, S25のNO,ステートE）、データ無し書き戻し要求生成部２８がデータ無し書き戻し要求を生成する（S28）。排他型で且つデータが更新ありの場合（S24のYES, S25のYES, ステートM）、データ読出部２４がキャッシュ制御部CA_Cを介してキャッシュデータを読み出し（S26）、データ付き書き戻し生成部３０がデータ付き書き戻し要求を生成する（S27）。
【００８３】
さらに、キャッシュステートが排他型の場合（S24のYES）、無効化処理部３６が対象アドレスのキャッシュデータを無効化する（S29）。
【００８４】
そして、要求発行部１４が、CA_FL要求または書き戻し要求を、ホームCPU(H-CPU)宛に発行し、CPU間通信で送信する（S30,S32）。
【００８５】
次に、ホームCPU(H-CPU)にて、要求判定部４０が、受信した要求が書き戻し要求か否か判定する（S41）。受信した要求が書き戻し要求の場合（S41のYES）、書き戻し要求処理部４２が、次の書き戻し要求の処理を実行する。すなわち、データ付き書き戻し要求であれば（S42のYES）、データ書き戻し制御部４８がメモリ制御部MCを介してメインメモリにデータ書き戻しを行い（S43）、ディレクトリ更新制御部４６がディレクトリ制御部DCを介してディレクトリの更新（R-EXからLOへ変更）を行う（S44）。一方、データ無し書き戻し要求であれば（S42のNO）、データ書き戻しは行われず、ディレクトリ更新制御部４６がディレクトリの更新（R-EXからLOへ変更）を行う（S44）。
【００８６】
逆に、受信した要求が書き戻し要求ではなくCA_FL要求の場合（S41のNO）、CA_FL要求処理部５０が次の処理を行う。すなわち、ディレクトリチェック部６０がディレクトリをチェックし、ディレクトリがR-SH（共有型で保持）なら、対象データをキャッシュに保持しているリモートCPUに無効化指示を発行し（S47）、ディレクトリがR-EX(但しこの場合はローカルCPU以外のリモートCPUが排他型で保持)なら、対象データをキャッシュに保持しているリモートCPUに書き戻し化指示を発行する（S47）。ローカルCPUが排他型で保持している場合、CA_FL要求ではなく書き戻し要求が発行されるので、上記の場面でディレクトリがR-EXの場合はローカルCPU以外のリモートCPUが排他型で保持中を意味する。
【００８７】
そして、リモートCPUから指示完了応答を受信すると（S48）、応答にデータが付いている場合（S49のYES）は、メインメモリにデータを書き戻し（S50）、ディレクトリを更新する（S44）。応答にデータが付いていない場合、または無効化指示完了応答の場合（S49のNO）、ディレクトリを更新する（S44）。最後に、ホームCPUは、要求完了応答を命令を実行しているローカルCPUに要求完了応答をCPU間通信で送信する（S45）。
【００８８】
ローカルCPU側では、この要求完了応答を受信すると（S33）、ソフトウエアに正常終了またはCA_FL失敗を通知する（図示せず）。
【００８９】
［変形例］
上記の実施の形態では、ローカルCPUは、キャッシュステートがEの場合はデータ無し書き戻し要求を生成してホームCPUに発行した。但し、キャッシュステートがEの場合、キャッシュのデータとメインメモリのデータは同一であるので、キャッシュのデータ付書き戻し要求をホームCPUに発行してもよい。その場合、ホームCPUは、データ付書き戻し要求に応答して、メインメモリにデータを書き込む。つまり、ローカルCPUのキャッシュステートがEとMとを区別して、データ無し書き戻し要求とするか、データ付き書き戻し要求とするかはオプションである。
【００９０】
以上説明したとおり、本実施の形態では、ローカルCPUが自分のキャッシュメモリに排他型で保持しているデータについてキャッシュフラッシュ命令を実行する場合、キャッシュステートが排他型（EまたはM）であることを検出し、それにより、他のCPUは対象データを保持していないことが判明する。そこで、ローカルCPUは、キャッシュデータを無効化した上で、ホームCPUに書き戻し要求を発行する。ホームCPUは、書き戻し要求の場合は、ディレクトリをチェックせず、データ付き書き戻し要求であればメインメモリにデータを書き戻すと共にディレクトリを更新し、データ無し書き戻し要求であれば書き戻すことなくディレクトリを更新し、要求完了応答をローカルCPUに送信する。したがって、キャッシュフラッシュ命令に対する処理が簡略化され、CPU間通信が減り高速に処理完了できる。
【００９１】
一方、ローカルCPUは、キャッシュステートが排他型以外（SまたはI）の場合は、通常どおり、キャッシュフラッシュ要求をホームCPUに発行し、ホームCPUにディレクトリの状態に基づいて必要な指示（書き戻し指示または無効化指示）をリモートCPUに発行させる。
【００９２】
これにより、近年実行頻度が高くなっているキャッシュフラッシュ命令に対する処理効率を向上することができる。
【００９３】
以上の実施の形態をまとめると，次の付記のとおりである。
【００９４】
（付記１）
（ａ）命令を処理する演算処理部と、前記命令に対応する要求を生成する要求生成部と、キャッシュメモリと、メモリ制御部とを有する演算処理装置と、（ｂ）前記メモリ制御部によりアクセス制御されるメインメモリと、をそれぞれ有する複数のノードと、
前記複数のノードそれぞれの前記演算処理装置間を接続する通信線とを有し、
第１の演算処理装置内の前記要求生成部は、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力する、情報処理装置。
【００９５】
（付記２）
前記第１の演算処理装置の前記要求生成部は、前記キャッシュステートが排他型の場合に、前記書き戻し要求を出力すると共に、前記第１の演算処理装置の前記キャッシュメモリ内の前記対象アドレスのキャッシュデータを無効化する、付記１に記載の情報処理装置。
【００９６】
（付記３）
前記第２の演算処理装置は、前記書き戻し要求に応答して、前記メインメモリ内のデータのキャッシュメモリへの持ち出し情報を有するディレクトリの前記持ち出し情報を非保持状態に更新し、前記書き戻し要求が有するキャッシュデータを前記メインメモリに書き込み、要求完了応答を前記第１の演算処理装置に出力する、付記１に記載の情報処理装置。
【００９７】
（付記４）
前記第１の演算処理装置内の前記要求生成部は、前記キャッシュステートが変更なし排他型の場合は、前記書き戻し要求として、前記キャッシュデータを有さない第１の書き戻し要求を出力し、前記キャッシュステートが変更済の排他型の場合は、前記書き戻し要求として、前記キャッシュデータを有する第２の書き戻し要求を出力し、
前記第２の演算処理装置は、前記第１の書き戻し要求に応答して、前記メインメモリへの書き込み処理を行わない、付記１に記載の情報処理装置。
【００９８】
（付記５）
前記第１の演算処理装置内の前記要求生成部は、前記キャッシュステートが排他型以外の場合に、前記キャッシュフラッシュ命令に対応するキャッシュフラッシュ要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力する、付記１に記載の情報処理装置。
【００９９】
（付記６）
前記第２の演算処理装置は、前記キャッシュフラッシュ要求に応答して、前記メインメモリ内のデータのキャッシュメモリへの持ち出し情報を有するディレクトリの前記持ち出し情報を参照し、前記持ち出し情報が第３の演算処理装置のキャッシュメモリが排他型で保持の状態の場合、前記第３の演算処理装置に前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し指示を出力する、付記５に記載の情報処理装置。
【０１００】
（付記７）
前記第２の演算処理装置は、前記キャッシュフラッシュ要求に応答して、前記メインメモリ内のデータのキャッシュメモリへの持ち出し情報を有するディレクトリの前記持ち出し情報を参照し、前記持ち出し情報が第３の演算処理装置のキャッシュメモリが共有型で保持の状態の場合、前記第３の演算処理装置に前記対象アドレスのキャッシュデータを無効化する無効化指示を出力する、付記５に記載の情報処理装置。
【０１０１】
（付記８）
前記第２の演算処理装置は、前記書き戻し指示に対する指示完了応答を受信した場合、前記ディレクトリの前記持ち出し情報を非保持状態に更新し、前記書き戻し要求が有するキャッシュデータを前記メインメモリに書き込み、要求完了応答を前記第１の演算処理装置に出力する、付記６に記載の情報処理装置。
【０１０２】
（付記９）
前記第２の演算処理装置は、前記無効化指示に対する指示完了応答を受信した場合、前記ディレクトリの前記持ち出し情報を非保持状態に更新し、要求完了応答を前記第１の演算処理装置に出力する、付記７に記載の情報処理装置。
【０１０３】
（付記１０）
（ａ）命令を処理する演算処理部と、前記命令に対応する要求を生成する要求生成部と、キャッシュメモリと、メモリ制御部とを有する演算処理装置と、（ｂ）前記メモリ制御部によりアクセス制御されるメインメモリと、をそれぞれ有する複数のノードと、
前記複数のノードそれぞれの前記演算処理装置間を接続する通信線と、を有する情報処理装置の制御方法であって、
第１の演算処理装置内の前記要求生成部が、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御する第２の演算処理装置に出力する工程を有する、情報処理装置の制御方法。
【０１０４】
（付記１１）
さらに、
前記第１の演算処理装置の前記要求生成部が、前記キャッシュステートが排他型の場合に、前記第１の演算処理装置の前記キャッシュメモリ内の前記対象アドレスのキャッシュデータを無効化する工程を有する、付記１０に記載の情報処理装置の制御方法。
【０１０５】
（付記１２）
命令を処理する演算処理部と、
前記命令に対応する要求を生成する要求生成部と、
キャッシュメモリと、
メインメモリのアクセス制御を行うメモリ制御部とを有し、
前記要求生成部は、前記演算処理部によるキャッシュフラッシュ命令の処理に応答して、前記キャシュフラッシュ命令の対象アドレスに対応するキャッシュメモリのキャッシュステートを参照し、前記キャッシュステートが排他型の場合に、前記対象アドレスのキャッシュデータを前記メインメモリに書き戻す書き戻し要求を、前記対象アドレスのメインメモリを制御するホーム演算処理装置に出力する、演算処理装置。
【０１０６】
（付記１３）
前記要求生成部は、前記キャッシュステートが排他型の場合に、前記書き戻し要求を出力すると共に、前記キャッシュメモリ内の前記対象アドレスのキャッシュデータを無効化する、付記１２に記載の演算処理装置。
【符号の説明】
【０１０７】
LO-CPU：第１の演算処理装置、ローカルCPU
HO-CPU：第２の演算処理装置、ホームCPU
RE-CPU：第３の演算処理装置、リモートCPU
CORE：コア、演算処理部
CA_U：キャッシュユニット
CA_C：キャッシュ制御部
CA：キャッシュ（キャッシュメモリとキャシュタグ）
ST：キャッシュステート、キャッシュ状態（MESI）
MC：メモリ制御部
DC：ディレクトリ制御部
MEM：メインメモリ
DIR：ディレクトリ（LO、R-SH、R-EX）
M：更新済み排他型
E：更新なし排他型
S：共有型
I：無効
LO：非保持状態
R-SH：共有で保持状態
R-EX：排他型で保持状態
【図１】
0006631317.tif 000002
【図２】
0006631317.tif 000003
【図３】
0006631317.tif 000004
【図４】
0006631317.tif 000005
【図５】
0006631317.tif 000006
【図６】
0006631317.tif 000007
【図７】
0006631317.tif 000008
【図８】
0006631317.tif 000009
【図９】
0006631317.tif 000010
【図１０】
0006631317.tif 000011
【図１１】
0006631317.tif 000012
【図１２】
0006631317.tif 000013
【図１３】
0006631317.tif 000014
【図１４】
0006631317.tif 000015
【図１５】
0006631317.tif 000016
【図１６】
0006631317.tif 000017