(57)【要約】  演算処理装置は、データを保持するデータ・キャッシュと、主記憶装置が記憶するデータが他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリを備えるとともに、保持するディレクトリ情報がメモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報と、メモリ・ディレクトリからのディレクトリ情報を登録する場合、メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表すローカル情報を保持するディレクトリ・キャッシュと、ディレクトリ・キャッシュのディレクトリ情報及びディレクトリ・キャッシュのローカル情報が他の演算処理装置のデータ・キャッシュに保持されてない旨を表す場合、ディレクトリ・キャッシュのダーティ情報に他の演算処理装置のデータ・キャッシュに保持されるディレクトリ情報と同一である旨を設定する制御回路とを備える。
2012124034.tif 000002
【特許請求の範囲】
【請求項１】
相互結合網を介して他の演算処理装置に接続するとともに、主記憶装置に接続する演算処理装置において、
データを保持するデータ・キャッシュと、前記主記憶装置が記憶するデータが他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリを備えるとともに、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報と、前記メモリ・ディレクトリからのディレクトリ情報を登録する場合、前記メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表すローカル情報を保持するディレクトリ・キャッシュと、
前記ディレクトリ・キャッシュのディレクトリ情報及び前記ディレクトリ・キャッシュのローカル情報が他の演算処理装置のデータ・キャッシュに保持されてない旨を表す場合、前記ディレクトリ・キャッシュのダーティ情報に他の演算処理装置のデータ・キャッシュに保持されるディレクトリ情報と同一である旨を設定する制御回路と、
を備えることを特徴とする演算処理装置。
【請求項２】
前記演算処理装置において、
前記ディレクトリ・キャッシュのいずれかのエントリをリプレースする場合、他の演算処理装置のデータ・キャッシュに保持されるディレクトリ情報と同一である旨がダーティ情報に設定されているエントリをリプレースされるエントリとして選択することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置において、
前記ディレクトリ・キャッシュはさらに、保持するディレクトリ情報が無効である旨を表す無効情報を保持し、
前記ディレクトリ・キャッシュのいずれかのエントリをリプレースする場合、保持するディレクトリ情報が無効である旨が無効情報に設定されているエントリをリプレースされるエントリとして選択することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記演算処理装置において、
前記ディレクトリ・キャッシュのいずれかのエントリをリプレースする場合、他の演算処理装置のデータ・キャッシュに保持されるディレクトリ情報と同一である旨がダーティ情報に設定されているエントリが存在しない場合、もっとも古いディレクトリ情報を保持するエントリをリプレースされるエントリとして選択することを特徴とする請求項２記載の演算処理装置。
【請求項５】
前記演算処理装置において、
前記ディレクトリ・キャッシュは、さらに、ディレクトリ情報の古さを示すエイジ情報を保持することを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記演算処理装置において、
前記ディレクトリ・キャッシュは、複数のウェイを有することを特徴とする請求項１記載の演算処理装置。→国内は不要
【請求項７】
前記演算処理装置において、
前記ディレクトリ情報は、前記主記憶装置に格納される、対応するメモリ・データが他の演算処理装置に保持されている状態を示す状態情報と、前記対応するメモリ・データを保持する演算処理装置を識別する識別情報を含むことを特徴とする請求項１記載の演算処理装置。
【請求項８】
前記演算処理装置において、
前記状態情報は、前記ローカル情報、前記メモリ・データが他の演算処理装置のデータ・キャッシュのみに保持されている旨を示すリモート排他情報と、前記メモリ・データが他の演算処理装置のデータ・キャッシュとの間で共有されている旨を示すリモート供給情報のいずれかであることを特徴とする請求項７記載の演算処理装置。
【請求項９】
相互結合網を介して他の演算処理装置に接続し、主記憶装置に接続するとともに、データを保持するデータ・キャッシュと、前記主記憶装置が記憶するデータが、他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリを備えるとともに、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報を保持するディレクトリ・キャッシュを有する演算処理装置の制御方法において、
前記メモリ・ディレクトリからのディレクトリ情報を登録する場合、前記メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表すローカル情報を前記ディレクトリ・キャッシュに保持し、
前記ディレクトリ・キャッシュのディレクトリ情報及び前記ディレクトリ・キャッシュのローカル情報が他の演算処理装置のデータ・キャッシュに保持されてない旨を表す場合、前記ディレクトリ・キャッシュのダーティ情報に他の演算処理装置のデータ・キャッシュに保持されるディレクトリ情報と同一である旨を設定することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
図１は、ディレクトリ方式の演算処理装置としてのノードを備えた情報処理装置としての共有メモリ型コンピュータのブロック構成図である。
複数のノード１０−１〜１０−４が相互結合網１１によって相互に結合される。各ノード１０−１〜１０−４には、演算部であるＣＰＵ（Central Processing Unit）コア１２−１〜１２−ｎが設けられる。このように、１つのノードに複数のＣＰＵコアが設けられる構成をマルチコア構成という。各ＣＰＵコア１２−１〜１２−ｎは、キャッシュ・コントローラ１３を介して、データ・キャッシュ１６に接続される。また、キャッシュ・コントローラ１３には、ディレクトリ・キャッシュ１４及び、メモリ・コントローラ１５も接続される。キャッシュ・コントローラ１３は、ＣＰＵコアによるデータ・キャッシュ１６又は、ディレクトリ・キャッシュ１４へのアクセスを制御する。メモリ・コントローラ１５には、主記憶装置としてのメモリ１７が接続される。メモリ・コントローラ１５は、ＣＰＵコアによるメモリ１７へのアクセスを制御する。ディレクトリ方式の共有メモリ型コンピュータにおいては、メモリ１７に、メモリ・ディレクトリが設けられる。【０００３】
メモリ・ディレクトリのディレクトリ情報には、メモリ１７の各データが、他のノードにキャッシュされているキャッシュ状態を記録する。また、メモリ・ディレクトリのディレクトリ情報には、どのノードにキャッシュされているかを示す他のノードの識別情報が格納される。【０００４】
ディレクトリ・キャッシュ１４には、対応するメモリ・ディレクトリのアドレス情報、ディレクトリ情報のほかに、ディレクトリ情報が、ディレクトリ・キャッシュ上で更新されて、メモリ・ディレクトリのディレクトリ情報と一致していない可能性があることを示すダーティ情報が保持されている。ディレクトリ情報は、当該ディレクトリ情報に対応するメモリ・データが他のノードにキャッシュされているキャッシュ状態を示すステータス情報と、どのノードにキャッシュされるかを示す情報とからなる。以下において、ディレクトリ情報を比較する場合には、ディレクトリ情報に含まれるステータス情報を比較するものとする。ダーティ情報は、ディレクトリ・キャッシュのディレクトリ情報が、メモリ・ディレクトリのディレクトリ情報と一致している場合には、C（クリーン）と設定され、異なっている場合にはD（ダーティ）と設定される。例えば、他ノードにキャッシュされていないデータのディレクトリ情報をディレクトリ・キャッシュ１４に格納する場合には、そのディレクトリ情報のダーティ情報は、C（クリーン）と設定される。次に、他のノードから自ノードのメモリ１７に対し、データの読み出しが行なわれた場合には、ディレクトリ・キャッシュ１４の対応するディレクトリ情報のダーティ情報は、D（ダーティ）に設定される。その後、当該他のノードから自ノードのメモリ１７に対しライトバックが行なわれた場合には、ディレクトリ・キャッシュ１４の対応するディレクトリ情報はダーティとなる前の状態に戻るが、ディレクトリ情報に対応するダーティ情報は、D（ダーティ）の状態のままである。【０００５】
図２は、従来のディレクトリ・キャッシュとメモリ・ディレクトリを含むメモリの構成を示した図である。
図２（ａ）は、ディレクトリ・キャッシュの図である。ディレクトリ・キャッシュには、各エントリの有効、無効を示す有効フラグと、当該エントリに対応するデータのメモリ内のアドレスと、当該データのディレクトリ情報と、当該エントリのディレクトリ情報が変更されたものであるか否かを示すダーティ情報が格納される。図２（ａ）では、ディレクトリ・キャッシュはダイレクト・マップ方式で構成されているように記載されているが、Ｎウェイセットアソシエイティブ方式を採用する場合には、図２（ａ）の構成が並列にＮ個用意される。【０００６】
図２（ｂ）は、メモリ・ディレクトリを有するメモリの図である。メモリには、メモリ・データが格納される。また、同時に、そのメモリ・データが、リモート・ノード（他ノード）のデータ・キャッシュに保持されているキャッシュ状態を示すディレクトリ情報が格納される。ディレクトリ情報には、データがリモート・ノードのデータキャッシュに保持されていないことを示すL（ローカル）、排他的にデータがリモート・ノードのデータ・キャッシュに保持されていることを示すREX（リモート・エクスクルーシブ）、リモート・ノードのデータ・キャッシュにデータが共有を許可する形態で保持されていることを示すRSH（リモート・シェア）のいずれかの情報と、どのノードがメモリ・データをキャッシュしているかを示す当該ノードの識別情報が格納される。ここで、排他的にデータがリモート・ノードのデータ・キャッシュに保持されるとは、当該データへのアクセスが当該リモート・ノードのみに限定されるという意味である。【０００７】
ホーム・ノードあるいはリモート・ノードのＣＰＵコアからメモリのメモリ・データにアクセスがあった場合には、ディレクトリ情報が更新されると共に、ディレクトリ・キャッシュにディレクトリ情報の内容が書き込まれる。【０００８】
ダーティ情報は、ディレクトリ・キャッシュ上で、ディレクトリ情報が、一度でも更新されると、D(ダーティ)に更新されるため、その後の更新で、ディレクトリ・キャッシュのディレクトリ情報と、メモリ・ディレクトリのディレクトリ情報が一致したとしても、C(クリーン)に戻ることはない。【０００９】
しかしながら、データ・キャッシュのデータと異なり、ディレクトリ・キャッシュのディレクトリ情報は、一度更新されたものが、再び、メモリ・ディレクトリと同じ元の状態に戻るケースが多い。【００１０】
例えば、あるアドレスのメモリ上のデータが、任意のノードのデータ・キャッシュ上に保持されておらず、そのメモリのディレクトリ情報は、ディレクトリ・キャッシュ上に保持されていないケースを考える(通常の初期状態)。このとき、メモリ・ディレクトリのディレクトリ情報はL(ローカル)となっているが、このメモリ・データが、そのメモリのホーム・ノード（自ノード）と異なるリモート・ノード（他ノード）から参照を要求された場合、メモリ・データは、リモート・ノードのキャッシュ・メモリに登録され、メモリ・ディレクトリのディレクトリ情報は、ディレクトリ・キャッシュに、L(ローカル)->RSH（リモート・シェア）に更新して、登録される。また、ディレクトリ・キャッシュのダーティ情報は、D(ダーティ)に設定される。その後、リモート・ノードのデータ・キャッシュに登録されたメモリ・データが、リプレースによって、ホーム・ノードのメモリにフラッシュ・バックあるいは、ライト・バックされた場合、ディレクトリ・キャッシュのディレクトリ情報は、RSH->Lに更新されるため、ディレクトリ・キャッシュのディレクトリ情報と、メモリ・ディレクトリのディレクト情報は、一致した状態に戻る。しかしながら、ディレクトリ・キャッシュのダーティ情報は、一度、D(ダーティ)に設定されているため、C(クリーン)に戻ることができない。このため、メモリ・ディレクトリに対して、実際にはC(クリーン)であるディレクトリ情報が、ディレクトリ・キャッシュのディレクトリ情報のリプレース時に、メモリにライト・バックされる。このディレクトリ・キャッシュのディレクトリ情報のリプレース時のライト・バックは、C（クリーン）であるはずのディレクトリ情報のライト・バックとなるため無駄なメモリ・アクセスとなり、メモリ・スループット低下を引き起こす。【００１１】
従来技術には、キャッシュ・データがローカル・ノードのデータなのかリモート・ノードのものかを識別できるようにローカル・ノード用とリモート・ノード用にそれぞれキャッシュＴＡＧを持たせる技術等がある。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００９−２２３７５９号公報
【特許文献２】特開２００３−１８６７４２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
以下の実施形態では、無駄なメモリ・アクセスを削減し、メモリ・スループットを向上することのできるディレクトリ・キャッシュ制御装置が提供される。
【課題を解決するための手段】
【００１４】
本実施形態による演算処理装置は、他の演算処理装置に接続するとともに、主記憶装置に接続する演算処理装置において、データを保持するデータ・キャッシュと、前記主記憶装置が記憶するデータが、他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリと、前記メモリ・ディレクトリが保持するディレクトリ情報の一部を保持し、自身が保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報と、前記メモリ・ディレクトリから登録するディレクトリ情報に対応するデータが他の演算処理装置のデータ・キャッシュに保持されているか否かを示すローカル情報とを保持するディレクトリ・キャッシュと、前記ディレクトリ・キャッシュのディレクトリ情報及び前記ディレクトリ・キャッシュのローカル情報が共に、対応するデータが他の演算処理装置のデータ・キャッシュに保持されてない旨を表す場合、前記ディレクトリ・キャッシュが保持するディレクトリ情報と前記メモリ・ディレクトリの対応するディレクトリ情報とが同一である旨を前記ディレクトリ・キャッシュのダーティ情報に設定する制御回路とを備える。
【発明の効果】
【００１５】
以下の実施形態によれば、無駄なメモリ・アクセスを削減し、メモリ・スループットを向上することのできるディレクトリ・キャッシュ制御装置が提供される。
【図面の簡単な説明】
【００１６】
【図１】ディレクトリ方式の共有メモリ型コンピュータのブロック構成図である。
【図２】従来のディレクトリ・キャッシュとメモリ・ディレクトリを含むメモリの構成を示した図である。
【図３】本実施形態のディレクトリ・キャッシュとメモリの構成図である。
【図４】本実施形態のディレクトリ・キャッシュ制御回路の構成図である。
【図５】ディレクトリ遷移状態生成回路の構成図である。
【図６】有効なエントリのうちクリーンなエントリを優先的にリプレース対象とするための構成図である。
【図７】プライオリティ・セレクタの構成図である。
【図８】LRU選択回路の構成図である。
【発明を実施するための形態】
【００１７】
本実施形態では、ディレクトリ・キャッシュにミスが発生し、メモリ・ディレクトリのディレクトリ情報をディレクトリ・キャッシュに登録するときに、メモリ・ディレクトリのディレクトリ情報が、L(ローカル)であるかどうかを示すLフラグ情報をディレクトリ・キャッシュに追加情報として登録する。
【００１８】
また、ディレクトリ・キャッシュのディレクトリ情報がL(ローカル)に更新されたとき、Lフラグ情報が”1”である場合（メモリ・ディレクトリのディレクトリ情報がL（ローカル）である場合）に、ディレクトリ・キャッシュのダーティ情報をC(クリーン)に変更する。
【００１９】
上記により、ディレクトリ・キャッシュの各エントリに対応するメモリ・ディレクトリのディレクトリ情報がL(ローカル)であるかどうかがわかるため、ディレクトリ・キャッシュのダーティ情報が、D(ダーティ)であったとしても、ディレクトリ・キャッシュのディレクトリ情報と、メモリ・ディレクトリのディレクトリ情報が、両方L(ローカル)になった場合に、ディレクトリ・キャッシュのダーティ情報を、C(クリーン)に変更することができる。
【００２０】
これにより、一度、ディレクトリ・キャッシュのディレクトリ情報が更新されて、ダーティ情報がD(ダーティ)に設定されたとしても、正しく、C(クリーン)に戻すことができる。このため、ディレクトリ・キャッシュのリプレース時に、必要の無いライト・バックを行なう必要が無く、無駄なメモリ・アクセスの発生を抑止することができ、メモリ・スループットの低下が抑えられる。
【００２１】
図３は、本実施形態のディレクトリ・キャッシュとメモリの構成図である。
図３（ａ）は、本実施形態のディレクトリ・キャッシュであり、図３（ｂ）は、従来技術と共通のメモリの図である。
【００２２】
図３（ｂ）に示されるように、メモリには、従来と同様、メモリ・データとそのディレクトリ情報が格納される。また、本実施形態のディレクトリ・キャッシュでは、図３（ａ）に示されるように、従来の有効フラグ、アドレス、ディレクトリ情報、ダーティ情報のほかに、当該エントリのディレクトリ情報に対応する、メモリのディレクトリ情報がL（ローカル）であるか否かを示すLフラグが格納される。ディレクトリ・キャッシュは、図３（ａ）においては、ウェイが１つのダイレクト・マップ方式を示しているが、Ｎ個のウェイを用意することにより、Ｎウェイセットアソシエイティブ方式を採用することも可能である。
【００２３】
図４は、本実施形態のディレクトリ・キャッシュ制御回路の構成図である。
ＣＰＵコアからのメモリ・リクエスト・アドレスは、メモリ２０に送られると共に、ディレクトリ・キャッシュ２１にも送られる。メモリ・リクエスト・アドレスは、ディレクトリ・キャッシュ２１のエントリにアクセスするために使用される（３５）と共に、比較器２２にも入力される。また、比較器２２には、アクセス３５で索引したエントリのアドレスが入力される。比較器２２は、メモリ・リクエスト・アドレスと、ディレクトリ・キャッシュ２１から読み出されたアドレスが等しいか否かを比較し、等しければ”１”を出力する。論理積回路２３は、比較器２２の出力と、有効フラグを入力し、論理積をとって結果を出力する。すなわち、論理積回路２３では、メモリ・リクエスト・アドレスで索引されたエントリについて、有効フラグが”１”（有効なエントリ）で、かつ、エントリに保持されたアドレスがメモリ・リクエスト・アドレスと等しい場合に、”１”を出力する。論理積回路２３の出力は、セレクタ２４〜２６、２８、２９の切り替え信号としてセレクタ２４〜２６、２８、２９に入力される。セレクタ２４〜２６、２８、２９の○印は、切り替え信号が”１”のときに選択される側の信号を示している。
【００２４】
セレクタ２４は、論理積回路２３の出力が”０”、すなわち、索引されたエントリについて、有効フラグが”１”で、かつ、保持されたアドレスが等しいエントリがなかった場合には、セレクタ２４の入力のうち、”１”の値を選択して、当該エントリの有効フラグを”１”に設定する。論理積回路２３の出力が”１”であった場合、すなわち、索引されたエントリについて、有効フラグが”１”で、かつ、保持されたアドレスが等しいアドレスが等しいエントリがあった場合には、当該エントリから読み出された有効フラグがそのまま、また有効フラグに設定される。他のセレクタも同様であり、○印の付いている入力は、論理積回路２３の出力が”１”のとき選択され、”０”の場合には、他方の入力が選択される。
【００２５】
セレクタ２５には、メモリ・リクエスト・アドレスと、ディレクトリ・キャッシュ２１から読み出されたアドレスが入力され、論理積回路２３の出力を切り替え信号として、いずれかを選択する。論理積回路２３の出力が”１”である場合は、ディレクトリ・キャッシュ２１に、メモリ・リクエスト・アドレスでリクエストされたアドレスを保持する有効なエントリが存在することを示している。したがって、論理積回路２３の出力が”１”である場合には、ディレクトリ・キャッシュ２１のアドレス領域から読み出されたアドレスは、そのままもとのエントリのアドレス領域に書き戻される。論理積回路２３の出力が”０”の場合には、メモリ・リクエスト・アドレスでリクエストされたアドレスの有効なエントリが存在しないことを示す。したがって、この場合には、現在アクセスされているエントリに、新たに有効なエントリを作成するため、メモリ・リクエスト・アドレスをアドレス領域に書き込む。
【００２６】
セレクタ２６には、メモリ・リクエスト・アドレスを使ってメモリ２０から読み出されたディレクトリ情報と、ディレクトリ・キャッシュ２１から読み出されたディレクトリ情報が入力される。セレクタ２６は、論理積回路２３の出力が”０”のとき、メモリ２０のメモリ・ディレクトリから読み出したディレクトリ情報を出力し、”１”のとき、ディレクトリ・キャッシュ２１から読み出したディレクトリ情報を出力する。ディレクトリ遷移状態生成回路２７は、セレクタ２６の出力を入力し、要求元ノードから出力されるメモリ・リクエスト・コマンドに従って、ディレクトリ情報の内容を書き換え、ディレクトリ・キャッシュ２１のディレクトリ領域に書き込む。ディレクトリ遷移状態生成回路２７の詳細は、後述する。
【００２７】
セレクタ２９には、メモリ２０のメモリ・ディレクトリから読み出したディレクトリがL（ローカル）となっているか否かを示す比較器３６の出力と、Lフラグ領域から読み出したLフラグの値とが入力される。論理積回路２３の出力が”１”のとき、読み出されたLフラグの値が出力され、”０”のとき、比較器３６の比較結果が出力される。比較器３６は、メモリ・ディレクトリから読み出されたディレクトリがL（ローカル）の場合に、”１”を出力し、その他の場合には、”０”を出力する。したがって、ディレクトリ・キャッシュ２１に新たに有効なエントリを生成するときであって、メモリ・ディレクトリのディレクトリがL（ローカル）となっている場合に、Lフラグは”１”に設定される。
【００２８】
セレクタ２８には、”０”と、ディレクトリ・キャッシュ２１のダーティ情報領域から読み出した値が入力される。論理積回路２３の出力が”０”のとき、セレクタ２８は”０”を出力し、論理積回路２３の出力が”１”のとき、セレクタ２８は、ディレクトリ・キャッシュ２１のダーティ情報領域から読み出した値を出力する。セレクタ２８の出力は、論理和回路３１に入力される。また、論理和回路３１には、比較器３０の出力も入力される。比較器３０は、ディレクトリ遷移状態生成回路２７がメモリ・リクエスト・コマンドに従ってディレクトリ情報を書き換える前と後のディレクトリ情報の比較を行なう。比較器３０は、ディレクトリ遷移状態生成回路２７の前後のディレクトリ情報が等しくなければ、”１”を、等しければ”０”を出力する。論理和回路３１は、ディレクトリ遷移状態生成回路２７の前後のディレクトリ情報が等しくないか、ダーティ情報がD（ダーティ）を示す”１”となっている場合に、”１”を出力する。論理和回路３１の出力は、論理積回路３２に入力される。また、ディレクトリ遷移状態生成回路２７の出力は、比較器３４に入力される。比較器３４では、ディレクトリ遷移状態生成回路２７の出力が、L（ローカル）となっているか否かの比較結果を出力する。L（ローカル）となっている場合には、比較器３４は、”１”を出力し、L（ローカル）となっていない場合には、比較器３４は、”０”を出力する。比較器３４の出力は、論理積回路３３に入力される。論理積回路３３には、更に、Lフラグの値（Lの場合”１”、その他の場合”０”）が入力される。論理積回路３３は、読み出したLフラグの値が”１”であり、かつ、ディレクトリ遷移状態生成回路２７の出力がL（ローカル）となっている場合に、”１”を出力する。論理積回路３３の出力は、論理反転されて、論理積回路３２に入力される。論理積回路３２は、論理和回路３１の出力が”１”、かつ、論理積回路３３の出力が”０”のとき、”１”を出力し、ダーティ情報を”１”に設定する。すなわち、メモリ・リクエストによって、ディレクトリ情報が変化し、変化後のディレクトリがL（ローカル）ではない、あるいは、Lフラグが”１”でない場合、ダーティ情報に”１”（状態がD（ダーティ）であることを示す）を設定する。ディレクトリの変化の前のダーティ情報が”１”であり、変化後のディレクトリがL（ローカル）となっており、かつLフラグが”１”の場合に、ダーティ情報を”０”（状態がC（クリーン）であることを示す）に設定する。また、ディレクトリ情報がディレクトリ遷移状態生成回路２７の前後で変化していない場合には、ダーティ情報はそのままにしておく。
【００２９】
なお、図４においては、ディレクトリ情報の比較や、ディレクトリ情報の選択などがあるが、これらにおいては、比較器３０やセレクタ２５、２６に２ビット以上の信号が入力され、比較されたり、選択出力されたりする。
【００３０】
図５は、ディレクトリ遷移状態生成回路の構成図である。
入力されるディレクトリ情報は、他ノードにキャッシュされているキャッシュ状態を表すdirstatと、どのノードにキャッシュされているかを示すdirvecとからなる。dirvecは、例えば、ノードの数が１６個ある場合には、ビット０からビット１５までの１６ビットの”０”と”１”の配列からなり、ノード番号が２番のノードにキャッシュされている場合には、ビット２を”１”とした”０００００００００００００１００”という配列で表現される。dirstatは、前述のように、データの状態を示すL（ローカル）、RSH（リモートシェア）、REX（リモートエクスクルーシブ）からなる。
【００３１】
メモリ・リクエスト・コマンドは、オペコードopcodeと、コマンドの発行元のノードの識別子srcidからなる。opcodeは、排他的にデータを要求元ノードのキャッシュに格納する命令であるMI_EXと、必要な場合には排他的な処理に切り替えられるが、複数のノードで共有してデータをキャッシュに格納する命令であるMI_SHと、排他的な処理は行わない、複数のノードでデータを共有してキャッシュに格納する命令であるMI_SH_Aが、キャッシュへのデータの読み込み命令としてある。また、opcodeには、キャッシュのデータを単純にフラッシュ・バックする命令であるFBKと、キャッシュのデータをライト・バックする命令であるWBKとがある。
【００３２】
dirvecに対し、popc４１において、ビット”１”が立っている個数を数えるポピュレーション演算が行われる。ビット”１”が立っている個数は、データが共有されているノードの数となる。dirstat、popc４１の出力、及び、opcodeは、遷移状態メモリ４０に入力され、遷移後のdirstatが索引される。
【００３３】
また、srcidは、デコーダ４２において、メモリ・リクエスト・コマンドの発行元ノードの番号から、dirvecと同様な”０”と”１”の配列に変換される。例えば、命令の発行元のノード番号が５の場合であって、ノード数が１６個である場合には、”００００００００００１０００００”という配列に変換される。デコーダ４２の出力は、論理和回路４４に入力されると共に、論理反転されて論理積回路４３に入力される。論理和回路４４と論理積回路４３には、dirvecも入力される。論理和回路４４はdirvecにおいて、コマンドの発行ノードに対応するビットを”１”に変更したコマンドを出力する。論理積回路４３は、dirvecにおいて、コマンド発行ノードに対応するビットを”０”に変更したものを出力する。論理和回路４４は、コマンド発行元ノードがデータをキャッシュしたことを示すdirvecを出力し、論理積回路４３は、コマンド発行元ノードがキャッシュ・データを開放したことを示すdirvecを出力する。論理積回路４３と論理和回路４４の出力は、セレクタ４５に入力される。セレクタ４５は、遷移状態メモリ４０からのset信号を入力し、set信号が”０”のときは、論理積回路４３の出力を、”１”のときは、論理和回路４４の出力を選択し、dirvecとして出力する。
【００３４】
遷移状態メモリ４０のset信号は、メモリ・リクエスト・コマンドのopcodeが、キャッシュにデータを書き込む命令MI_SH_A、MI_SH、MI_EXの場合には、”１”に、フラッシュ・バック、あるいは、ライト・バックする命令FBK、WBKの場合には、”０”になっている。
【００３５】
opcodeとして、MI_SH_Aが発行された場合には、dirstatは、最初にどのような状態であろうと、結果としてデータを共有することになるので、次のdirstatは、RSHとなる。また、MI_EXが発行された場合には、dirstatは、最初にどのような状態であろうと、結果として排他的にデータを他のノードのキャッシュに持つことになるので、次のdirstatは、REXとなる。MI_SHが発行された場合には、最初dirstatがLであった場合には、キャッシュ・データを保持するノードが存在しないので、排他的なデータのキャッシュへの登録として処理し、次のdirstatは、REXとする。MI_SHが発行されるその他の場合は、キャッシュ・データが共有される状態となるので、次のdirstatは、RSHとなる。FBKが発行された場合には、最初dirstatがRSHで、popcの出力が”１”の場合には、キャッシュ・データを保持するノードがなくなるので、次のdirstatは、Lとなる。FBKが発行された場合で、最初のdirstatがRSHで、かつ、popcの出力が２以上である場合には、このコマンド実行後もキャッシュ・データを保持するノードが残るので、次のdirstatは、RSHとなる。最初のdirstatがREXで、FBKあるいはWBKが発行された場合には、キャッシュ・データを保持するノードがなくなるので、次のdirstatは、Lとなる。
【００３６】
本実施形態では、ディレクトリ・キャッシュのダーティ情報が、D(ダーティ)であったとしても、ディレクトリ・キャッシュのディレクトリ情報と、メモリ・ディレクトリのディレクトリ情報が、両方L(ローカル)になった場合に、ディレクトリ・キャッシュのダーティ情報を、C(クリーン)に変更することができる。この動作は、図４の比較器３０、３４、論理和回路３１、論理積回路３２、３３による。しかしながら、ディレクトリ・キャッシュのリプレースメント方式が、最も長い期間使用されていないエントリを選択するLRU（Least Recently Used）方式であった場合、このクリーンなエントリがリプレース対象として、積極的に選択されないため、メモリ・アクセスを発生させるダーティなエントリがリプレース対象として選択されるケースが存在する。すなわち、ダーティなエントリは、メモリのディレクトリ情報とディレクトリ・キャッシュのディレクトリ情報が異なっているので、ディレクトリ・キャッシュからリプレースするためには、ディレクトリ・キャッシュの内容をメモリのメモリ・ディレクトリに書き戻さなくてはならない。このとき、ダーティなディレクトリ情報をリプレースするために、ライト・バックが行なわれなければならない。したがって、メモリ・アクセスが発生することになる。ところが、クリーンなディレクトリ・キャッシュのエントリは、メモリ・ディレクトリのディレクトリと同じなので、ライト・バックする必要が無く、新たなメモリ・アクセスを発生させる必要が無い。
【００３７】
ここで、クリーンなエントリをリプレース対象とすることは、メモリ・アクセスの発生を低減させる効果があるが、このクリーンなエントリがLRUでない場合でも、性能ペナルティが小さい。
【００３８】
ディレクトリ・キャッシュのクリーンなエントリが、リプレースされた場合、ディレクトリ情報はL(ローカル)であるため、このアドレスのメモリ・データは、任意のノードのキャッシュ・メモリ上に保持されていないか、ホーム・ノードのプロセッサのキャッシュ・メモリに保持されているかのどちらかである。
【００３９】
前者のケースでは、次回、同一アドレスが、ホーム・ノード、または、リモート・ノードから参照要求された場合、ディレクトリ・キャッシュにミスするが、キャッシュ・メモリにもミスするため、メモリ・アクセス要求がもともと必要となる。このため、メモリ・アクセスのレイテンシやスループットのペナルティが発生しない。
【００４０】
後者のケースでは、次回、同一アドレスがリモート・ノードから参照要求された場合、ホーム・ノードのキャッシュアクセス時に、ディレクトリ情報がL(ローカル)であることがわかるため、キャッシュ・メモリからデータを転送することが可能であり、メモリ・データ取得のためのメモリ・アクセスが発生しない。また、ディレクトリ・キャッシュへの登録データも、キャッシュ・メモリへのアクセスに伴う情報から生成可能であるため、ディレクトリ情報取得のためのメモリ・アクセスも発生しない。唯一の性能ペナルティは、ディレクトリ・キャッシュにミスしているために、ディレクトリ・キャッシュのリプレース対象を、メモリにライト・バックする必要があるケースが存在することである。
【００４１】
したがって、本実施形態では、ディレクトリ・キャッシュのリプレース対象を決定するときに、ディレクトリ・キャッシュのダーティ情報がC(クリーン)であるエントリを、優先的に選択するようにする。
【００４２】
このようにすることで、メモリ・アクセスを発生しないクリーンエントリが優先的にリプレース対象となるため、メモリ・アクセスの発生を低減することができ、メモリ・スループットの低下が抑えられる。
【００４３】
図６は、有効なエントリのうちクリーンなエントリを優先的にリプレース対象とするための構成図である。
ここでは、ディレクトリ・キャッシュ２１は、４つのウェイ、ウェイ０〜ウェイ３からなるとしている。各ウェイには、有効フラグ、アドレス、ディレクトリ、ダーティ情報、Lフラグのほかに、ウェイの中でどの順に古いエントリを保持しているかを示すエイジ情報が保持される。例えば、ウェイ３が最も古く、ついで、ウェイ２、ウェイ１、ウェイ０の順に古いエントリを保持しているとした場合には、ウェイ３には、”３”が、ウェイ２には、”２”が、ウェイ１には、”１”が、ウェイ０には、”０”がエイジ情報として保持される。エイジ情報の値の大きいものがより古いものとなる。アクセスの順番としては、全てのウェイの所定のインデックスのエントリが特定され、次に、どのウェイをアクセスするかが決定される。したがって、エイジ情報も、同じインデックスの異なるウェイのエントリ間でもっとも古いものから順番に番号を割り当てるようにする。エイジ情報は、ディレクトリが更新されると、もっとも小さい値に書き換えられ、他のウェイのエントリのエイジ情報は、順次繰り上げるようにして設定する。
【００４４】
ウェイ０〜３の有効フラグは、インバータ５０によって論理反転され、論理和回路５２とプライオリティ・セレクタ５５に入力される。論理和回路５２は、ウェイ０〜３のいずれかに有効でないエントリ（有効フラグが”０”）があった場合に、”１”を出力する。プライオリティ・セレクタ５５は、有効でないエントリを持つウェイを選択して、セレクタ５７に入力する。セレクタ５７は、論理和回路５２の出力が”１”の場合に、プライオリティ・セレクタ５５の出力を選択して、リプレース・ウェイ選択情報として出力する。論理和回路５２の出力が”０”の場合には、セレクタ５７は、LRU選択回路５６からの出力をリプレース・ウェイ選択情報として出力する。
【００４５】
各ウェイのダーティ情報は、インバータ５１によって論理反転され、論理和回路５３と論理和回路５４に入力される。論理和回路５３は、入力が１つでも”１”である、すなわち、ダーティ情報が１つでも”０”である（C（クリーン）である）場合には、”１”を出力する。論理和回路５３の出力は、論理反転され、論理和回路５４に入力される。各論理和回路５４は、対応するダーティ情報が”０”の場合か、全てのウェイのダーティ情報が”１”（D（ダーティ）である）の場合に、”１”を出力する。論理和回路５４の出力とエイジ情報の値がLRU選択回路５６に入力される。LRU選択回路５６は、ダーティ情報が”０”、すなわち、クリーンなエントリを持つウェイのうち、もっともエイジ情報が大きい、すなわち、古いエントリを持つウェイを選択する信号を出力する。どのウェイにもクリーンなエントリが無い場合には、最も古いエントリを持つウェイを選択する信号を出力する。
【００４６】
LRU選択回路５６のウェイ選択信号は、セレクタ５７に入力され、前述のように、どのウェイにも無効なエントリが無い場合には、LRU選択回路５６が決定したウェイ選択信号が、リプレース・ウェイ選択情報として出力される。リプレース・ウェイ選択情報は、例えば、図６のように、ウェイが４つの場合は、４本の信号線があり、選択するウェイに対応する信号線に”１”の信号が送出される。
【００４７】
図７は、プライオリティ・セレクタの構成図である。
入力in0〜in3は、それぞれ、ウェイ０〜３の有効フラグを論理反転したものである。入力in0は、そのまま、出力out0とされるとともに、論理積回路６０、６１、６２には、論理反転されて入力される。これにより、入力in0が”１”のときは、出力out0が”１”となると共に、他の出力out1〜out3が”０”とされる。入力in1は、論理積回路６０に入力されると共に、論理反転されて、論理積回路６１、６２に入力される。入力in2は、論理積回路６１に入力されると共に、論理反転されて、論理積回路６２に入力される。入力in3は、論理積回路６２に入力される。以上の構成により、入力in0〜in3のうち、”１”となっているものに対応して、出力out0〜out3が”１”となる。これは、ウェイ０〜３のエントリのうち、無効となっているエントリを１つだけ選択する信号を生成するものである。
【００４８】
図８は、LRU選択回路の構成図である。
入力age0〜age3は、それぞれウェイ０〜３のエイジ情報の値である。比較器７０−１は、入力age0が入力age1より大きいか、比較器７０−２は、入力age0が入力age2より大きいか、比較器７０−３は、入力age0が入力age3より大きいかを比較している。また、比較器７０−４は、入力age1が入力age2より大きいか、比較器７０−５は、入力age1が入力age3より大きいか、比較器７０−６は、入力age2が入力age3より大きいかを比較している。いずれも、図８において、比較器７０−１〜７０−６の上側の入力の方が下側の入力の方より大きい場合に、比較器７０−１〜７０−６の出力は、”１”となる。
【００４９】
そして、図６の論理和回路５４からの入力in0〜in3と、比較器７０−１〜７０−６の比較結果が論理回路７１−１〜７１−４に入力される。入力in0〜in3は、それぞれウェイ０〜３に対応する論理和回路５４からの入力である。入力in0〜in3は、ディレクトリ・キャッシュにクリーンなエントリを持つウェイがある場合に、”１”となる。また、ディレクトリ・キャッシュにクリーンなエントリを持つウェイが無い場合には、全ての入力in0〜in3が”１”になる。論理回路７１−１は、ウェイ０のエイジ情報age0の値がもっとも大きく、すなわち、最も古く、かつ、入力in0が”１”の場合に、out0として、”１”を出力する。論理回路７１−２は、ウェイ１のエイジ情報age1の値がもっとも大きく、かつ、入力in1が”１”の場合に、out1として、”１”を出力する。論理回路７１−３は、ウェイ２のエイジ情報age2の値がもっとも大きく、かつ、入力in2が”１”の場合に、out2として、”１”を出力する。論理回路７１−４は、ウェイ３のエイジ情報age3の値がもっとも大きく、かつ、入力in3が”１”の場合に、out3として、”１”を出力する。ここでの動作は、入力in0〜in3が”１”となっているもののうち、エイジ情報がもっとも古いものを選択する動作である。
【符号の説明】
【００５０】
１０−１〜１０−４      ノード
１１      相互結合網
１２−１〜１２−ｎ      （ＣＰＵ）コア
１３      キャッシュ・コントローラ
１４、２１      ディレクトリ・キャッシュ
１５      メモリ・コントローラ
１６      データ・キャッシュ
１７、２０      メモリ（含メモリ・ディレクトリ）
２２、３０、３４、３６、７０−１〜７０−６      比較器
２３、３２、３３、４３、６０、６１、６２      論理積回路
２４、２５、２６、２８、２９、４５、５７      セレクタ
２７      ディレクトリ遷移状態生成回路
３１、４４、５２、５３、５４      論理和回路
４０      遷移状態メモリ
４１      popc
４２      デコーダ
５０、５１      インバータ
５５      プライオリティ・セレクタ
５６      LRU選択回路
７１−１〜７１−４      論理回路
【図１】
2012124034.tif 000003
【図２】
2012124034.tif 000004
【図３】
2012124034.tif 000005
【図４】
2012124034.tif 000006
【図５】
2012124034.tif 000007
【図６】
2012124034.tif 000008
【図７】
2012124034.tif 000009
【図８】
2012124034.tif 000010
【手続補正書】
【提出日】平成25年8月29日(2013.8.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項６
【補正方法】変更
【補正の内容】
【請求項６】
前記演算処理装置において、
前記ディレクトリ・キャッシュは、複数のウェイを有することを特徴とする請求項１記載の演算処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
本実施形態による演算処理装置は、相互結合網を介して他の演算処理装置に接続するとともに、主記憶装置に接続する演算処理装置において、データを保持するデータ・キャッシュと、前記主記憶装置が記憶するデータが他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリを備えるとともに、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報と、前記メモリ・ディレクトリからのディレクトリ情報を登録する場合、前記メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表すローカル情報を保持するディレクトリ・キャッシュと、前記ディレクトリ・キャッシュのディレクトリ情報及び前記ディレクトリ・キャッシュのローカル情報が他の演算処理装置のデータ・キャッシュに保持されてない旨を表す場合、前記ディレクトリ・キャッシュのダーティ情報に他の演算処理装置のデータ・キャッシュに保持されるディレクトリ情報と同一である旨を設定する制御回路とを備える。
【手続補正書】
【提出日】平成26年3月7日(2014.3.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
相互結合網を介して他の演算処理装置に接続するとともに、主記憶装置に接続する演算処理装置において、
データを保持するデータ・キャッシュと、
前記主記憶装置が記憶するデータが他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリと、
保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報を保持すると共に、前記メモリ・ディレクトリからのディレクトリ情報を登録する場合、前記メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表しているか否かを表すローカル情報を保持するディレクトリ・キャッシュと、
前記ディレクトリ・キャッシュのディレクトリ情報が更新されて他の演算処理装置のデータ・キャッシュに保持されてない旨を表しているときに、他の演算処理装置のデータ・キャッシュに保持されていない旨を前記メモリ・ディレクトリのディレクトリ情報が表している旨を前記ディレクトリ・キャッシュのローカル情報が表す場合、前記ディレクトリ・キャッシュのダーティ情報を、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一である旨を表すように設定する制御回路と、
を備えることを特徴とする演算処理装置。
【請求項２】
前記演算処理装置において、
前記ディレクトリ・キャッシュのいずれかのエントリをリプレースする場合、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一である旨がダーティ情報で表されているエントリをリプレースされるエントリとして選択することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置において、
前記ディレクトリ・キャッシュはさらに、保持するディレクトリ情報が無効である旨を表す無効情報を保持し、
前記ディレクトリ・キャッシュのいずれかのエントリをリプレースする場合、保持するディレクトリ情報が無効である旨が無効情報に設定されているエントリをリプレースされるエントリとして選択することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記演算処理装置において、
前記ディレクトリ・キャッシュのいずれかのエントリをリプレースする場合、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一である旨がダーティ情報で表されているエントリが存在しない場合、もっとも古いディレクトリ情報を保持するエントリをリプレースされるエントリとして選択することを特徴とする請求項２記載の演算処理装置。
【請求項５】
前記演算処理装置において、
前記ディレクトリ・キャッシュは、さらに、ディレクトリ情報の古さを示すエイジ情報を保持することを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記演算処理装置において、
前記ディレクトリ・キャッシュは、複数のウェイを有することを特徴とする請求項１記載の演算処理装置。
【請求項７】
前記演算処理装置において、
前記ディレクトリ情報は、前記主記憶装置に格納される、対応するメモリ・データが他の演算処理装置に保持されている状態を示す状態情報と、前記対応するメモリ・データを保持する演算処理装置を識別する識別情報を含むことを特徴とする請求項１記載の演算処理装置。
【請求項８】
前記演算処理装置において、
前記状態情報は、前記ローカル情報、前記メモリ・データが他の演算処理装置のデータ・キャッシュのみに保持されている旨を示すリモート排他情報と、前記メモリ・データが他の演算処理装置のデータ・キャッシュとの間で共有されている旨を示すリモート供給情報のいずれかであることを特徴とする請求項７記載の演算処理装置。
【請求項９】
相互結合網を介して他の演算処理装置に接続し、主記憶装置に接続するとともに、データを保持するデータ・キャッシュと、前記主記憶装置が記憶するデータが、他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリと、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報を保持するディレクトリ・キャッシュとを有する演算処理装置の制御方法において、
前記メモリ・ディレクトリからのディレクトリ情報を登録する場合、前記メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表しているか否かを表すローカル情報を前記ディレクトリ・キャッシュに保持し、
前記ディレクトリ・キャッシュのディレクトリ情報が更新されて他の演算処理装置のデータ・キャッシュに保持されてない旨を表しているときに、他の演算処理装置のデータ・キャッシュに保持されていない旨を前記メモリ・ディレクトリのディレクトリ情報が表している旨を前記ディレクトリ・キャッシュのローカル情報が表す場合、前記ディレクトリ・キャッシュのダーティ情報を、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一である旨を表すように設定することを特徴とする演算処理装置の制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
本実施形態による演算処理装置は、相互結合網を介して他の演算処理装置に接続するとともに、主記憶装置に接続する演算処理装置において、データを保持するデータ・キャッシュと、前記主記憶装置が記憶するデータが他の演算処理装置のデータ・キャッシュに保持されているかを表すディレクトリ情報を保持するメモリ・ディレクトリと、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一か否かを表すダーティ情報を保持すると共に、前記メモリ・ディレクトリからのディレクトリ情報を登録する場合、前記メモリ・ディレクトリのディレクトリ情報が、他の演算処理装置のデータ・キャッシュに保持されていない旨を表しているか否かを表すローカル情報を保持するディレクトリ・キャッシュと、前記ディレクトリ・キャッシュのディレクトリ情報が更新されて他の演算処理装置のデータ・キャッシュに保持されてない旨を表しているときに、他の演算処理装置のデータ・キャッシュに保持されていない旨を前記メモリ・ディレクトリのディレクトリ情報が表している旨を前記ディレクトリ・キャッシュのローカル情報が表す場合、前記ディレクトリ・キャッシュのダーティ情報を、保持するディレクトリ情報が前記メモリ・ディレクトリに保持されるディレクトリ情報と同一である旨を表すように設定する制御回路とを備える。
【国際調査報告】
2012124034.tif 000011
2012124034.tif 000012
2012124034.tif 000013
2012124034.tif 000014