(57)【要約】      （修正有）【課題】回路規模を抑制し処理工数を削減する演算処理装置を提供する。【解決手段】キャッシュユニットCA_Uは、キャッシュヒット判定がキャッシュヒットであれば、キャッシュメモリL2$のデータを読み出して、メモリアクセス要求元にデータ応答する。また、タグディレクトリがヒット（所持中）であれば、データを所持しているCMG（コアメモリグループ）のキャッシュ制御回路にデータ要求を発行し、データ応答されたデータを自分のキャッシュメモリに登録し、プロセッサコアにデータ応答する。また、ローカルCMGからのメモリアクセス要求の場合は、データを所持しているCMGのキャッシュ制御回路がローカルCMGのキャッシュ制御回路にデータ応答し、ホームCMGにデータ応答完了報告を行う。【選択図】図３
2019049872.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算処理部と、前記複数の演算処理部が共有するキャッシュユニットと、前記キャッシュユニットからの第１のメモリアクセス要求を入力しメモリへのアクセスを制御するメモリアクセス制御部とをそれぞれ含む複数のコアメモリグループを有し、
前記キャッシュユニットは、
キャッシュメモリと、
前記キャッシュメモリの状態を記憶するキャッシュタグと、
他のコアメモリグループ内のキャッシュメモリによるデータの所持情報を記憶するタグディレクトリと、
前記演算処理部からの第２のメモリアクセス要求及び他のコアメモリグループからの第３のメモリアクセス要求を入力して制御を行うキャッシュ制御部とを有し、
前記キャッシュ制御部は、
前記第２及び第３のメモリアクセス要求に応答して、前記キャッシュタグを参照することによるキャッシュヒット判定を行い、
前記キャッシュヒット判定がキャッシュミスと判定した場合、前記タグディレクトリを参照して前記他のコアメモリグループがデータを所持しているか否かのデータ所持判定を行い、
前記他のコアメモリグループがデータを所持していると判定した場合、前記データを所持する他のコアメモリグループに所持する前記データの吐き出しを要求するデータ要求を発行する、演算処理装置。
【請求項２】
前記キャッシュ制御部は、
前記キャッシュヒット判定がキャッシュヒットと判定した場合、前記キャッシュメモリに記憶されたデータを読み出し、前記第２または第３のメモリアクセス要求の要求元に、前記読み出しデータを応答する、請求項１に記載の演算処理装置。
【請求項３】
前記キャッシュ制御部は、
前記データ所持判定で前記他のコアメモリグループがデータを所持していないと判定した場合、対応するメモリアクセス制御部に前記メモリアクセス要求のデータの読み出しを依頼する前記第１のメモリアクセス要求を発行する、請求項２に記載の演算処理装置。
【請求項４】
前記データ要求は、前記データを所持する他のコアメモリグループの前記キャッシュ制御部に、キャッシュメモリ内の前記データを前記データ要求元のコアメモリグループに応答する処理と、必要な場合に前記キャッシュタグ内の前記データの状態を変更する処理とを要求する、請求項１に記載の演算処理装置。
【請求項５】
前記コアメモリグループそれぞれのタグディレクトリのインデックス数は、前記他のコアメモリグループそれぞれの前記キャッシュタグのインデックス数の合計よりも少ない、請求項１に記載の演算処理装置。
【請求項６】
前記キャッシュ制御部は、
前記データ要求の完了応答に応答して、前記タグディレクトリの前記データの所持情報を変更する、請求項４に記載の演算処理装置。
【請求項７】
前記タグディレクトリの各インデックスは、前記所持情報と、前記データを所持する他のコアメモリグループを特定するコアメモリグループ識別情報とを記憶し、前記所持情報は前記データを所持するか否かを示す情報である、請求項１に記載の演算処理装置。
【請求項８】
前記タグディレクトリの各インデックスは、さらに、ロックフラグを記憶し、
前記キャッシュ制御部は、
前記データ要求を前記他のコアメモリグループに発行する場合、前記ロックフラグをロック状態に変更し、前記データ要求の完了応答に応答して前記所持情報を変更した後、前記ロックフラグをアンロック状態に変更し、
前記第２及び第３のメモリアクセス要求に応答して前記タグディレクトリを参照したとき、前記ロックフラグがロック状態の場合、前記第２及び第３のメモリアクセス要求をアボートする、請求項７に記載の演算処理装置。
【請求項９】
複数の演算処理部と、前記複数の演算処理部が共有するキャッシュユニットと、前記キャッシュユニットからの第１のメモリアクセス要求を入力しメモリへのアクセスを制御するメモリアクセス制御部とをそれぞれ含む複数のコアメモリグループを有し、
前記キャッシュユニットは、キャッシュメモリと、前記キャッシュメモリの状態を記憶するキャッシュタグと、他のコアメモリグループ内のキャッシュメモリによるデータの所持情報を記憶するタグディレクトリと、前記演算処理部からの第２のメモリアクセス要求及び他のコアメモリグループからの第３のメモリアクセス要求を入力して制御を行うキャッシュ制御部とを有する、演算処理装置の制御方法において、
前記キャッシュ制御部は、
前記第２及び第３のメモリアクセス要求に応答して、前記キャッシュタグを参照することによるキャッシュヒット判定を行い、
前記キャッシュヒット判定がキャッシュミスと判定した場合、前記タグディレクトリを参照して前記他のコアメモリグループがデータを所持しているか否かのデータ所持判定を行い、
前記他のコアメモリグループがデータを所持していると判定した場合、前記データを所持する他のコアメモリグループに前記所持するデータの吐き出しを要求するデータ要求を発行する、ステップを有する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置は、演算処理装置としてのCPU（Central Processing Unit）またはプロセッサと呼ばれる高集積回路の半導体チップである。近年のプロセッサは、演算処理部としてのプロセッサコアを複数内蔵するマルチコア化が進められる傾向にある。
【０００３】
マルチコア化されたプロセッサには、複数のコアと、複数のコアに共有されるラストレベルキャッシュ（以下LLキャッシュと称する。）と、メモリアクセス制御回路（MAC）とをそれぞれ有する複数のコアメモリグループ（以下CMGまたはノードと称する。）を有するプロセッサが開発されてきた。
【０００４】
複数のCMGを有するプロセッサは、CMG間のキャッシュコヒーレンシを保つために、各CMGが、自分及び他のCMGが管理するメモリのデータをL2キャッシュに所持しているか否かを示すデータ所持情報を有するディレクトリキャッシュを有する。そして、各CMGは、メモリアクセス要求についてキャッシュミスが発生すると、ディレクトリキャッシュを参照して、自分のCMGまたは他のCMGがメモリアクセス要求のデータをキャッシュに所持しているか否かを判定する。もし他のCMGがデータを所持している場合は、自CMGは、他のCMGに、L2キャッシュ内のデータを吐き出すデータ要求を発行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００７／０９９６４３号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数のCMGを有するプロセッサでは、各CMGがLLキャッシュとメモリアクセスコントローラとの間に、ホームエージェントを設け、自分のCMGが管理するメモリのデータが自分のCMGと他のCMGにより所持されているか否かを示す所持情報を記録したディレクトリキャッシュをホームエージェント内に設けている。このように、各CMG内のホームエージェントが全CMGのデータ所持情報を有するディレクトリキャッシュを設けることで、全CMGからのメモリアクセス要求をホームエージェントのパイプライン回路に投入し、ホームエージェントが他のCMGにデータ吐き出し要求を発行すべきか否かを判定する。
【０００７】
しかしながら、近年のマルチコア化のさらなる進化に伴いCMGの数が増加し、各CMGに設けたホームエージェント内のディレクトリキャッシュの回路規模と、ホームエージェントのパイプラインによる処理工数が、大きな負担になってきた。
【０００８】
そこで，本発明の目的は，ホームエージェントの機能を残しつつ、回路規模を抑制しそして処理工数を削減した演算処理装置及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
本実施の形態の第１の側面は，複数の演算処理部と、前記複数の演算処理部が共有するキャッシュユニットと、前記キャッシュユニットからの第１のメモリアクセス要求を入力しメモリへのアクセスを制御するメモリアクセス制御部とをそれぞれ含む複数のコアメモリグループを有し、
前記キャッシュユニットは、
キャッシュメモリと、
前記キャッシュメモリの状態を記憶するキャッシュタグと、
他のコアメモリグループ内のキャッシュメモリによるデータの所持情報を記憶するタグディレクトリと、
前記演算処理部からの第２のメモリアクセス要求及び他のコアメモリグループからの第３のメモリアクセス要求を入力して制御を行うキャッシュ制御部とを有し、
前記キャッシュ制御部は、
前記第２及び第３のメモリアクセス要求に応答して、前記キャッシュタグを参照することによるキャッシュヒット判定を行い、
前記キャッシュヒット判定がキャッシュミスと判定した場合、前記タグディレクトリを参照して前記他のコアメモリグループがデータを所持しているか否かのデータ所持判定を行い、
前記他のコアメモリグループがデータを所持していると判定した場合、前記データを所持する他のコアメモリグループに所持する前記データの吐き出しを要求するデータ要求を発行する、演算処理装置である。
【発明の効果】
【００１０】
第１の側面によれば，回路規模を抑制しそして処理工数を削減することができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態のプロセッサを有するマルチプロセッササーバシステムの構成例を示す図である。
【図２】本実施の形態のプロセッサの改良前の構成を示す図である。
【図３】本実施の形態におけるプロセッサの構成を示す図である。
【図４】キャッシュユニットの構成を示す図である。
【図５】キャッシュ制御回路のパイプライン構造の一例を示す図である。
【図６】タグディレクトリのフォーマットを示す図である。
【図７】タグディレクトリとディレクトリキャッシュの構成を対比して示す図である。
【図８】図２のディレクトリキャッシュDIR$方式でのリード要求及びリモートCMGへのデータ要求の処理を示す図である。
【図９】本実施の形態のタグディレクトリTAGDIR方式でのリード要求及びリモートCMGへのデータ要求の処理を示す図である。
【図１０】同じタグディレクトリ方式でのリード要求に対する処理を示すフローチャート図である。
【図１１】図２のディレクタキャッシュ方式でのリプレース処理を示す図である。
【図１２】本実施の形態の図３のタグディレクトリ方式でのリプレース処理を示す図である。
【発明を実施するための形態】
【００１２】
図１は、本実施の形態のプロセッサを有するマルチプロセッササーバシステムの構成例を示す図である。マルチプロセッササーバシステムは、例えば、２つのサーバシステムボードSYS_BD_0, SYS_BD_1を有し、それぞれに設けられたCPU接続インターフェースCPU_CN_IFを介して接続される。また、各サーバシステムボードは、例えば４個の演算処理装置としてのプロセッサ（またはCPUチップ）CPU_CHIPと、プロセッサそれぞれに対応する入出力装置IOと、CPU接続インターフェースCPU_CN_IFを有する。４つのプロセッサCPU_CHIPは、それぞれの入出力装置IOと接続され、更に、４つのプロセッサは互いに通信可能に接続されている。そして、４つのプロセッサは、CPU接続インターフェースCPU_CN_IFを介して、他のサーバシステムボード上の４つのプロセッサとも接続される。
【００１３】
図２は、本実施の形態のプロセッサの改良前の構成を示す図である。図２のプロセッサCPU_CHIPは、例えば、１２個の演算処理部としてのプロセッサコアCOREを有し、４個のコアメモリグループCMGはそれぞれ、３個のプロセッサコアCOREと、３個のプロセッサコアで共有されるキャッシュユニットCA_Uと、ホームエージェントHAとメモリアクセス制御回路MACとを有する。各メモリアクセス制御回路MACは、それぞれのコアメモリグループCMGが管理するアドレスのメインメモリMEM_1〜MEM_3に対してメモリアクセスを制御する。コアメモリグループCMGは、１つのノードと見なすことができる。以下、コアメモリグループを単にCMGと称する。
【００１４】
各プロセッサコアCOREは、演算処理回路ALUと第１レベルキャッシュL1$を有する。また、複数のプロセッサコアで共有されるキャッシュユニットCA_Uは、第２レベルキャッシュユニットまたはラストレベルキャッシュユニットである。キャッシュユニットCA_Uは、データを記憶するL2キャッシュメモリL2$と、L2キャッシュメモリのデータが記憶されるキャッシュブロックの状態を記憶するL2キャッシュタグL2TAGとを有する。
【００１５】
そして、ホームエージェントHAは、４つのCMGのL2キャッシュメモリのデータ所持情報であるディレクトリ情報を記憶するディレクトリキャッシュDIR$を有し、メモリアクセス要求のデータを所持しているCMGの判定とそのCMGへのデータ応答の制御を集中管理する。４つのCMG間の通信を可能にするCMG間バスC_BUSが設けられる。各CMG内のL2キャッシュユニットCA_Uは、このCMG間バスC_BUSを介して、他のCMGのホームエージェントにメモリアクセス要求を発行し、他のCMGのホームエージェントは、メモリアクセス要求に対するデータをL2キャッシュメモリL2$またはメインメモリから読み出して、CMG間バスC_BUSを介して、メモリアクセス要求元のCMGにデータ応答を行う。
【００１６】
ホームエージェントHAは、ホームのCMGのL2キャッシュユニットCA_Uからのメモリアクセス要求に応答して、ディレクトリキャッシュDIR$を参照し、他のCMGのキャッシュメモリがメモリアクセス要求のデータを所持しているか否かをチェックする。他のCMGがデータを所持する場合、ホームエージェントは他のCMGに対してキャッシュメモリ内のデータの吐き出しを要求するデータ要求を発行する。
【００１７】
一方、ホームエージェントは、ローカルのCMGのホームエージェントからのメモリアクセス要求に応答して、ディレクトリキャッシュを参照し、ホームのCMGのキャッシュメモリがメモリアクセス要求のデータを所持しているか否かをチェックする。ホームのCMGがデータを所持する場合、ホームエージェントHAはキャッシュユニットCA_Uにデータ読み出しオーダーを発行してL2キャッシュメモリL2$からデータを読み出し、リモートのCMGにデータ応答する。
【００１８】
ホームのCMGのキャッシュメモリがデータを所持しない場合、ディレクトリキャッシュDIR$を参照し、他のCMGがデータを所持するか否かチェックする。
【００１９】
他のCMG（リモートのCMG）がデータを所持する場合、ホームエージェントは、リモートのCMGにキャッシュメモリ内のデータを吐き出すことを要求するデータ要求を発行する。その後、ホームエージェントは、リモートCMGからデータ要求に対するデータ応答を受信し、リモートのCMGにデータ応答する。
【００２０】
他のCMGもデータを所持しない場合、ホームエージェントは、メモリアクセス制御回路MACを介してメインメモリにアクセスし、データを読み出し、リモートCMGにデータ応答する。
【００２１】
図２の各CMGのホームエージェントHAは、ローカルのキャッシュメモリのデータ所持情報と、リモート、つまり他のCMGのキャッシュメモリのデータ所持情報を全て記憶するディレクトリキャッシュDIR$を有する。また、ホームエージェントHAは、ホームエージェントパイプライン制御回路を有し、そのパイプライン制御回路は、メモリアクセス要求に応答して、ディレクトリキャッシュDIR$をチェックし、チェック結果に対応して他のCMGに対するデータ応答またはメモリアクセス制御回路MACに対するメモリアクセス要求を発行する。したがって、マルチコア化によってCMGの数が増大するたびに、ホームエージェントHAの集積回路量が増大する。また、L2キャッシュユニットCA_Uは、メモリアクセス要求に応答してキャッシュタグL2TAGをチェックし、更に、ホームエージェントHAは、メモリアクセス要求に応答してディレクトリキャッシュDIR$をチェックするので、メモリアクセス要求に対する処理工数が増大する。
【００２２】
［本実施の形態］
図３は、本実施の形態におけるプロセッサの構成を示す図である。本実施の形態のプロセッサも、図２と同様に、プロセッサチップ内の複数のCMG間のccNUMAキャッシュコヒーレンシ制御を行う。
【００２３】
このプロセッサCPU_CHIPは、図２と同様に、例えば、１２個のプロセッサコアCOREを有し、４個のコアメモリグループCMGはそれぞれ、３個のプロセッサコアCOREと、３個のプロセッサコアで共有されるキャッシュユニットCA_Uと、ホームエージェントHAとメモリアクセス制御回路MACとを有する。各MACは、それぞれのCMGが管理するアドレスのメインメモリMEM_0〜MEM_3にメモリアクセス要求を行う。
【００２４】
各プロセッサコアCOREの構成は、図２と同様に、演算処理回路ALUと第１レベルキャッシュL1$とを有する。各プロセッサコアは、図示しないロードストア回路によりメインメモリへのアクセスであるメモリアクセス要求を発行する。
【００２５】
各CMG内において、３つのプロセッサコアCOREに共有される第２レベルまたはラストレベル（LL）のキャッシュユニットCA_Uは、図２と同様に、データを記憶するL2キャッシュメモリL2$と、そのL2キャッシュメモリのデータの状態を記憶するL2キャッシュタグL2TAGとを有する。さらに、キャッシュユニットCA_Uは、図２と異なり、他のCMG、つまりリモートのCMGのL2キャッシュメモリによるデータの所持の有無を含むデータ所持情報を記憶するタグディレクトリTAGDIRを有する。
【００２６】
そして、キャッシュユニットCA_U内のキャッシュ制御回路（図示せず）が、入力されるメモリアクセス要求に応答して、L2キャッシュタグL2TAGを参照し、ホームのCMGのL2キャッシュメモリL2$がメモリアクセス要求のデータを記憶するか否かのキャッシュヒット判定を行う。さらに、キャッシュミスが発生すると、キャッシュ制御回路が、タグディレクトリTAGDIRを参照し、他のCMG、つまりリモートのCMGのキャッシュメモリL2$がデータを所持しているか否かのチェックを行う。
【００２７】
そして、キャッシュユニットCA_Uは、キャッシュヒット判定がキャッシュヒットであれば、キャッシュメモリL2$のデータを読み出して、メモリアクセス要求元にデータ応答する。また、タグディレクトリがヒット（所持中）であれば、データを所持しているCMGのキャッシュ制御回路にデータ要求を発行し、データ応答されたデータを自分のキャッシュメモリに登録し、プロセッサコアにデータ応答する。また、ローカルCMGからのメモリアクセス要求の場合は、データを所持しているCMGのキャッシュ制御回路がローカルCMGのキャッシュ制御回路にデータ応答し、ホームCMGにデータ応答完了報告を行う。これらの処理については後で詳述する。
【００２８】
上記のとおり、第１に、各CMGの共有キャッシュのキャッシュユニットCA_Uに、リモートのCMGのデータ所持情報を記憶するタグディレクトリTAGDIRが設けられている。例えばCMG0の場合、CMG0のタグディレクトリTAGDIRがCMG1,CMG2,CMG3のデータ所持情報を記憶し、L2キャッシュタグL2TAGが自分のCMG0のデータ所持情報を記憶している。したがって、キャッシュ制御回路は、タグディレクトリTAGDIRとL2キャッシュタグL2TAGを併せてチェックすれば、全CMGのキャッシュメモリによるデータの所持情報をチェックできる。
【００２９】
しかも、図２の各CMGのディレクトリキャッシュDIR$が４つのCMG分の所持情報を保持しているが、本実施の形態のタグディレクトリTAGDIRは３つのCMG分の所持情報を保持すればよいので、各CMGのタグディレクトリTAGDIRの容量は、単純に４分の３に縮小することができる。しかも、リモートCMGによるホームCMGのデータの持ち出し頻度がそれほど高くなければ、各CMGのタグディレクトリTAGDIRの容量は、更に縮小できる場合がある。その結果、各CMGの回路規模を縮小できる。
【００３０】
第２に、本実施の形態のキャッシュユニットCA_U内のパイプライン構造のキャッシュ制御回路が、図２のホームエージェント内のパイプライン制御回路のディレクトリキャッシュDIR$のチェック機能を有する。その結果、ホームエージェントを設ける必要がない。また、キャッシュユニット内のキャッシュ制御回路は、L2キャッシュタグL2TAGでキャッシュミスが発生した場合、ホームエージェントのパイプライン制御回路に要求を投入することなく、タグディレクトリTAGDIRをチェックできるので、処理を高速化できる。
【００３１】
図４は、キャッシュユニットの構成を示す図である。L2キャッシュのキャッシュユニットL2_CA_Uは、メモリアクセス要求を選択しパイプライン構造のキャッシュ制御回路CA_PIPEに入力する入力調停回路INPUT_ARBを有する。入力調停回路は、メモリアクセス要求等を登録するリクエストキューを有し、自分のCMGのコアからの第２のメモリアクセス要求MA_RQ_2と、別のCMGのコアからの第３のメモリアクセス要求MA_RQ_3をリクエストキューに登録し、所定の基準に基づいていずれかの要求を選択する。
【００３２】
また、キャッシュユニットL2_CA_Uは、自分のCMGの所持データを記憶するL2キャッシュメモリL2$と、L2キャッシュメモリ内のデータの状態を記憶するL2キャッシュタグL2TAGとを有する。データの状態は、例えば、MESIプロトコルによる無効（I）、排他的（E）、共有（S）、変更（M）のいずれかである。
【００３３】
さらに、キャッシュユニットL2_CA_Uは、他のCMGのL2キャッシュメモリが自分のCMGが管理するメインメモリのデータを所持するか否かのデータ所持情報を記憶するタグディレクトリTAGDIRを有する。タグディレクトリのデータ所持情報は、例えば、無効（I）、排他的（E）、共有（S）などである。
【００３４】
L2キャッシュメモリL2$及びL2キャッシュタグL2TAGが、例えば１６Way構成の場合、そのWay選択のためのL2LRU選択回路L2LRUを有する。これにより、最も古いデータを有するWayのキャッシュブロックがリプレース対象に選択される。同様に、タグディレクトリTAGDIRが、他の３つのCMGの全インデックス数よりも少ないインデックス数の容量しかない場合、タグディレクトリのインデックスのリプレースが必要になるので、そのWay選択のためにタグディレクトリのLRU選択回路TAGD_LRUを有する。タグディレクトリTAGDIRが、他の３つのCMGの全インデックス数と同じインデックス数の容量を有する場合、他のCMGのキャッシュメモリがその全インデックス数分のデータを所持しても、タグディレクトリTAGDIRが全ての所持情報を記憶することができる。その場合、タグディレクトリのLRU選択回路は必要ない。
【００３５】
キャッシュユニットの動作の概略を説明すると、入力調停回路INPUT_ARBは、自分のCMGのプロセッサコアCOREと他のCMGのL2キャッシュ制御回路からのメモリアクセス要求MA_RQ_2,MA_RQ_3を調停し、順次キャッシュ制御回路CA_PIPEに投入（入力）する。
【００３６】
キャッシュ制御回路は、入力されたメモリアクセス要求に応答して、まずL2キャッシュタグL2TAGを検索し、キャッシュヒット判定を行う。キャッシュヒットの場合、自分のCMG内のキャッシュユニットで解決可能であり、キャッシュ制御回路は、タグディレクトリTAGDIRをチェックせずに、L2キャッシュメモリL2$からデータを抽出して、データ応答DATA_RSPを要求元のCMGのコアまたはキャッシュ制御回路に返信する。
【００３７】
一方、キャッシュミスの場合、自分のCMG内のキャッシュユニットで解決不能であり、キャッシュ制御回路は、タグディレクトリTAGDIRをチェックして、リモートCMGのキャッシュメモリが要求されたデータを所持しているか否かを判定する。
【００３８】
この判定結果がタグディレクトリでヒットなら、リモートCMGがそのデータを所持していることを意味する。そこで、キャッシュ制御回路は、リモートCMGに対してデータ要求DATA_RQを発行し、リモートCMGのキャッシュ制御回路に、L2キャッシュに所持するデータを吐き出し、メモリアクセス要求元にデータ応答するよう要求する。そして、キャシュ制御回路は、リモートCMGからデータ応答を受信すると、自分のL2キャッシュに登録し、タグディレクトリの所持情報を更新し、メモリアクセス要求元のプロセッサコアにデータ応答する。または、キャッシュ制御回路は、データ応答完了報告を受信すると、タグディレクトリの所持情報を更新する。
【００３９】
タグディレクトリでミスなら、キャッシュ制御回路は、メモリアクセスMA_RQ_1をメモリアクセスコントローラMACに発行し、メインメモリからデータを取得する。そして、取得したデータを要求元のCMGにデータ応答し、タグディレクトリの所持情報を更新する。
【００４０】
図５は、キャッシュ制御回路のパイプライン構造の一例を示す図である。図５に示したとおり、入力調停回路INPUT_ARBが、メモリアクセス要求をキャッシュパイプラインに投入すると、前述のとおり、L2キャッシュタグをチェックするL2TAGチェック回路１０が、L2TAGを検索し、キャッシュ判定を行う。キャッシュ判定がヒットであれば、データ取得回路１１が、L2キャッシュメモリL2$からヒットしたデータを読み出し、データ応答回路１２が要求元のコアやキャッシュ制御回路にデータ応答する。
【００４１】
一方、キャッシュ判定がミスであれば、タグディレクトリチェック回路１３が、タグディレクトリTAGDIRを検索し、他のCMG（リモートのCMG）のL2キャッシュメモリがデータを所持しているか否かの判定を行う。この判定がヒットであれば、データ要求回路１４が、リモートのCMG（R_CMG）にデータ要求DATA_RQを発行する。一方、判定がミスであれば、メモリアクセス要求回路１５が、メモリアクセス制御回路MACにメモリアクセス要求MA_RQ_4を発行する。
【００４２】
図５に示すとおり、L2キャッシュユニット内には、L2キャッシュタグL2TAGと、タグディレクトリTAGDIRとが設けられ、同じキャッシュ制御回路CA_PIPEによるパイプライン処理で、L2キャッシュタグのチェックと、タグディレクトリのチェックを行うことができる。
【００４３】
図６は、タグディレクトリのフォーマットを示す図である。３６ビットのメモリアドレスのうち、下位のメモリアドレスPA[18:10]は、タグディレクトリのインデックスとして使用される。タグディレクトリの各インデックスには、ロックフラグLOCKと、リモートCMGのL2キャッシュでのデータ所持状態L2TCと、どのリモートCMGがデータを所持しているかを示すCMG識別情報CMG_IDと、上位のメモリアドレスPA[34:19]とが登録される。CMG識別情報CMG_IDは、例えば、４ビットが４つのCMG0-CMG3にそれぞれ対応し、各ビットが「１」であれば対応するCMGが所持、「０」であれば対応するCMGが未所持を意味する。
【００４４】
データ所持状態L2TCは、例えば、以下の３つの状態を有する。
L2TC = 00：未所持（I）
L2TC = 01：複数のCMGが共有状態でデータを所持（S）
L2TC = 11：あるCMGが排他状態でデータを所持（E）
ここで、上記の排他状態（E）は、必ずしもCMGが所持するデータが変更（M）されたか否かは、そのCMGのL2キャッシュタグをチェックしないと判別できない仕様になっている。データ所持状態L2TCに排他状態（E）と変更状態（M）の区別ができるようにしてもよい。
【００４５】
このデータ所持状態L2TCとどのリモートCMGがデータを所持しているかを示すCMG識別情報CMG_IDを併せてみれば、全リモートCMGのデータの所持情報を知ることができる。例えば、L2TC[1:0]=01、CMG_ID[3:0]=1001は、CMG0,CMG3が共有状態でデータを所持していることを意味する。また、L2TC[1:0]=11、CMG_ID[3:0]=0010は、CMG2が排他状態でデータを所持していることを意味する。
【００４６】
ロックフラグLOCKは、LOCK=1はそのインデックスのデータがロック中であることを意味し、あるCMGが既にタグディレクトリTAGDIRをチェックし、他のCMGがデータを所持していることを検出し、他のCMGにデータ要求DATA_RQを発行中であることを意味する。この場合、データ要求に対するデータ応答を受信したとき、タグディレクトリTAGDIRの所持情報が変更される可能性がある。したがって、ロック中に別のCMGからのメモリアクセス要求に対して同じインデックスでヒットした場合、そのメモリアクセス要求はアボートされ、既に処理中のデータ要求に対するタグディレクトリの更新処理が完了するまで入力調停回路内の要求キューで待たされる。これにより、後からのメモリアクセス要求に対して、最新のデータ所持情報にアクセスさせることができる。
【００４７】
具体的には、先にタグディレクトリTAGDIRでヒットしたCMG0により、他のCMG3に対してデータ要求が発行されると、他のCMG3のキャッシュメモリで所持しているデータが吐き出され、他のCMG3のL2キャッシュタグの状態が無効（Invalid）に変更され、それに伴いCMG0のタグディレクトリTAGDIRの状態も無効（Invalid）に変更される可能性がある。そこで、先のメモリアクセス要求でタグディレクトリがヒットした場合、キャッシュ制御回路は、このインデックスのロックフラグをLOCK=1に変更して、データ要求を発行する。そして、この処理が完了するまで、他のCMGによるタグディレクトリTAGDIRの所持情報に基づく処理を禁止する。
【００４８】
キャッシュ制御回路は、タグディレクトリTAGDIRにアクセスして、メモリアクセス要求のアドレスAD[18:10]と等しいインデックスPA[18:10]の登録情報を読み出し、読み出したアドレスPA[34:19]をメモリアクセス要求のアドレスAD[34:19]と比較する。これが一致すればTAGDIRのヒットである。その場合、CMG_ID[3:0]とL2TC[1:0]とから、どのCMGがどの所持状態かを検出することができる。
【００４９】
図７は、タグディレクトリとディレクトリキャッシュの構成を対比して示す図である。図２のディレクトリキャッシュDIR$は、ホームエージェント内に設けられ、全てのCMGのL2キャッシュによるデータ所持情報を記憶する。そのため、ディレクトリキャッシュは、理想的には、４つのCMGのデータ所持情報を格納できるだけのインデックス数を有する。また、ディレクトリキャッシュは、L2キャッシュのWay数と同じWay数を有する。
【００５０】
一方、本実施の形態である図３のプロセッサの場合、L2キャッシュユニット内のL2キャッシュタグに自分のCMGのL2キャッシュによるデータ所持情報が記憶されているので、タグディレクトリTAGDIRは、他のCMG、つまりリモートのCMGのL2キャッシュによるデータの所持情報を記憶し、自分のCMGのL2キャッシュによるデータ所持情報は記憶しない。したがって、タグディレクトリTAGDIRは、最大でも、３つのCMGのデータ所持情報を格納できるだけのインデックス数があればよい。その分、タグディレクトリのメモリ容量を減らすことができる。また、タグディレクトリも、L2キャッシュのWay数と同じWay数を有する。
【００５１】
リモートCMGのL2キャッシュが、自分のCMGが管理するメモリのデータを所持する確率は、実行するアプリケーションに依存するが、高くない場合がある。例えば、リモートCMGのL2キャッシュが所持するデータが全て他のCMGが管理するメモリのデータであることはまれである。したがって、タグディレクトリTAGDIRのインデックス数は、３つのCMGのL2キャッシュタグのインデックス数の合計と同じする必要性はそれほど高くない。そのため、タグディレクトリのインデックス数は、３つのCMGのL2キャッシュタグのインデックス数の合計より少なくてもよい。例えば、２つのCMGのインデックス数の合計でもよい。
【００５２】
但し、その場合は、メモリのデータの他のCMGによる持ち出し数が多くなると、タグディレクトリのインデックス数が足りなくなり、データ所持情報の入れ替えが必要になる場合がある。入れ替えが発生するとき、タグディレクトリLRU選択回路TAGD_LRUが入れ替え対象のWayを選択する。
【００５３】
［リード要求とリモートCMGへのデータ要求の動作］
図８は、図２のディレクトリキャッシュDIR$方式でのリード要求及びリモートCMGへのデータ要求の処理を示す図である。ホームのCMG0のプロセッサコアからのリード要求が、L2キャッシュユニットのキャッシュ制御回路CA_PIPEのパイプラインに入力される（S1）。そこで、キャッシュ制御回路は、L2キャッシュタグL2TAGを検索し、キャッシュミスが発生する（S2）。それに応じて、キャッシュ制御回路は、ホームエージェントHAにリード要求を出力し（S3）、ホームエージェント内のパイプライン構成のHA制御回路HA_PIPEにリード要求が入力される。HA制御回路は、ディレクトリキャッシュDIR$を検索し、ヒットすると、他の（リモート）CMG1がデータを所持していることが判明する（S4）。
【００５４】
そこで、HA制御回路HA_PIPEが、リモートCMG1にデータ要求を出力し（S5）、リモートCMG1のL2キャッシュのキャッシュ制御回路CA_PIPEがL2キャッシュタグL2TAGを検索し、ヒットする（S6）。そこで、キャッシュ制御回路が、L2キャッシュメモリ内のデータを読み出し、ホームCMGにデータ応答する（S7）。これに応答して、ホームCMG0のキャッシュ制御回路CA_PIPEが、データとその状態情報をL2キャッシュメモリL2$とL2キャッシュタグL2TAGに登録し、リード要求元のプロセッサコアにデータ応答し、ホームエージェントにディレクトリキャッシュDIR$の所持情報の更新を依頼する（S9）。
【００５５】
図９は、本実施の形態のタグディレクトリTAGDIR方式でのリード要求及びリモートCMGへのデータ要求の処理を示す図である。図１０は、同じタグディレクトリ方式でのリード要求に対する処理を示すフローチャート図である。まず、図９について説明し、その後に図１０について説明する。但し、図９には、図１０と同じ処理番号S11−S23が示される。
【００５６】
図９において、ホームのCMG0のプロセッサコアからのリード要求が、L2キャッシュユニットのキャッシュ制御回路CA_PIPEのパイプラインに入力される（S11）。そこで、キャッシュ制御回路は、L2キャッシュタグL2TAGを検索し、キャッシュミスが発生する（S12）。ここまでは図８と同じである。
【００５７】
ここで、キャッシュ制御回路は、タグディレクトリTAGDIRを検索し、タグディレクトリでヒットし、他のCMGのいずれかがデータを所持していることが判明し、タグディレクトリ内のCMG識別情報CMG_IDからリモートのCMG1がデータを処理していることが判明する（S16,S17）。図８のように、ホームエージェントを経由してディレクトリキャッシュDIR$を検索する必要がなく、処理が高速化される。
【００５８】
タグディレクトリでヒットした結果、ホームCMG0のキャッシュ制御回路CA_PIPEは、リモートCMG1にデータ要求を発行する（S21）。ホームCMG0のメインメモリにアクセスしてデータを取得するよりも、リモートCMG1からデータを応答させるほうがデータ取得までの時間が短いからである。
【００５９】
そこで、リモートCMG1のキャッシュ制御回路CA_PIPEにデータ要求が入力され、L2キャッシュタグを検索してキャッシュヒットし、L2キャッシュメモリL2$からデータを読み出し、ホームCMG0のキャッシュ制御回路CA_PIPEにデータ応答する（S22）。
【００６０】
この時、ホームCMG0でのタグディレクトリで所持状態が排他（E）だった場合、リモートCMG1ではデータは排他（E）または更新（M）であり、リモートCMG1のキャッシュ制御回路は、L2キャッシュタグを無効（Invalid）に変更し、データの吐き出しを行う。
【００６１】
データ応答を受信したホームCMG0のキャッシュ制御回路CA_PIPEは、リード要求元のコアにデータ応答し、L2キャッシュメモリL2$にデータを登録し、L2キャッシュタグL2TAGにタグ登録する（S23）。同時に、キャッシュ制御回路は、タグディレクトリTAGDIRのCMG1による所持情報を無効（Invalid）に変更する（S23）。
【００６２】
一方、ホームCMG0でのタグディレクトリで所持状態が共有（S）だった場合、リモートCMG1でもデータの状態は共有（S）であり、リモートCMG1のキャッシュ制御回路は、L2キャッシュタグを共有（S）のまま変更せず、データの吐き出しを行う。
【００６３】
データ応答を受信したホームCMG0のキャッシュ制御回路CA_PIPEは、リード要求元のコアにデータ応答し、L2キャッシュメモリL2$にデータを登録し、L2キャッシュタグL2TAGにタグ登録する（S23）。但し、タグディレクトリTAGDIRのCMG1による所持情報は共有（S）のまま変更しない。
【００６４】
最初のメモリアクセス要求が、ローカルのCMG、例えばCMG2から発行された場合、ホームCMG0からのデータ要求に対して、リモートCMGは、ローカルCMG2に直接データ応答するか、ホームCMG0にデータ応答する。前者の場合は、ホームCMG0がデータなし完了応答を受信し必要であればタグディレクトリの所持状態を更新する。後者の場合は、さらに、ホームCMG0がローカルCMG2にデータ応答し、タグディレクトリの所持情報をローカルCMG2が所持する状態に更新する。
【００６５】
以上のとおり、本実施の形態におけるタグディレクトリ方式(図３)では、ホームエージェントのHA制御回路の機能をキャッシュ制御回路に統合し、他のCMGのデータ所持情報だけを記憶するタグディレクトリTAGDIRをL2キャッシュユニット内に設けた。その結果、本実施の形態の演算処理装置（CPUチップ）は、他のCMGのデータ所持情報を記憶するタグディレクトリの容量を減らすことができ、キャッシュ制御回路がL2キャッシュタグL2TAGとタグディレクトリTAGDIRとを同じパイプライン回路でアクセスできるので、ヒットレイテンシが短縮し性能が向上する。
【００６６】
次に、図１０を参照してリード要求に対するタグディレクトリ方式での動作を説明する。まず、ホームCMGのプロセッサコアまたはローカルCMGのL2キャッシュ制御回路がリード要求を発行すると、ホームCMGの入力調停回路の要求キューにリード要求が登録される（S10）。そして、入力調停回路が、調停を経てリード要求をL2キャッシュのキャッシュ制御回路CA_PIPEに入力する（S11）。
【００６７】
次に、キャッシュ制御回路は、リード要求について、L2キャッシュタグL2TAGを検索する（S12）。ここでキャッシュヒットすれば（S13のYES）、リード要求をローカルで処理可能となり、キャッシュ制御回路は、L2キャッシュメモリからデータを読み出し、リード要求元にデータ応答する（S15）。この場合は、タグディレクトリTAGDIRにアクセスして他のCMGのデータ所持情報をチェックする必要はない。
【００６８】
一方、キャッシュミスすれば（S13のNO）、キャッシュ制御回路CA_PIPEは、タグディレクトリTAGDIRを検索する（S16）。検索した結果ヒットしなければ（S17のNO）、キャッシュ制御回路が、メモリアクセス制御回路MACにデータ要求を発行し、メインメモリからデータを読み出す（S18）。そして、MACからのデータ応答を受信してキャッシュ制御回路に入力されると（S19）、キャッシュ制御回路は、L2キャッシュメモリL2$にデータを登録し、L2キャッシュタグL2TAGにデータの状態を登録し、要求元のプロセッサコアにデータ応答する（S20）。
【００６９】
一方、タグディレクトリでヒットすると（S17のYES）、キャッシュ制御回路は、タグディレクトリ内のCMG識別情報CMG_IDから判別したデータ所持するリモートCMGに、データ要求を発行する（S21）。このとき、キャッシュ制御回路は、タグディレクトリTAGDIR内のロックフラグLOCKをロック状態「１」に変更する。
【００７０】
そして、キャッシュ制御回路は、データ要求に対するデータ応答をリモートCMGから受信すると、データ応答の登録要求を再度キャシュ制御回路に入力する（S22）。それに応答して、キャッシュ制御回路は、L2キャッシュメモリL2$にデータを登録し、L2キャッシュタグL2TAGにデータの状態を登録し、リード要求元にデータ応答し、必要に応じてタグディレクトリTAGDIRのデータ所持情報を更新する（S23）。そして、タグディレクトリTAGDIRのロックフラグLOCKはアンロック状態「０」に戻される。
【００７１】
ロックフラグがロック状態の間、他のCMGなどからのリード要求は、タグディレクトリ検索によりヒットした場合でも、そのタグディレクトリの状態情報が変更される可能性があるため、アボートされて、再度入力調停部の要求キューに差し戻される。
【００７２】
［リプレース処理］
図１１は、図２のディレクタキャッシュ方式でのリプレース処理を示す図である。例えば、リプレース処理は、キャッシュメモリ内のデータを消去して（吐き出して）、別のデータを登録する処理である。
【００７３】
まず、あるCMGにおいて、リプレース要求がL2キャッシュのキャッシュ制御回路に入力される（S30）。これに応答して、キャッシュ制御回路CA_PIPEは、L2キャッシュタグL2TAG内のリプレース対象データのインデックスを無効化する（S31）。さらに、キャッシュ制御回路は、ホームエージェントのHA制御回路HA_PIPEにリプレース要求を発行し、HA制御回路は、ディレクトリキャッシュDIR$内のリプレース対象データのインデックスを無効化する（S33）。その後、リプレース後のデータのキャッシュ登録の処理が行われる。
【００７４】
つまり、ディレクタキャッシュ方式では、L2キャッシュタグL2TAGとディレクトリキャッシュDIR$とにL2キャッシュメモリのデータ所持情報が記録されているので、上記のように２回のインデックスの無効化を行う必要がある。
【００７５】
図１２は、本実施の形態の図３のタグディレクトリ方式でのリプレース処理を示す図である。あるCMGにおいて、リプレース要求がL2キャッシュのキャッシュ制御回路に入力される（S40）。これに応答して、キャッシュ制御回路CA_PIPEは、L2キャッシュタグL2TAG内のリプレース対象データのインデックスを無効化する（S41）。タグディレクトリTAGDIRには、他のCMGのデータ所持情報を記憶しているだけであるので、タグディレクトリの対応するインデックスを無効化する必要はないので、キャッシュメモリ内のデータの消去処理はここで終了する。
【００７６】
このように、リード要求などのメモリアクセス要求に対してキャッシュミスして自分のCMG内でリード要求を完了できない場合に、初めて、タグディレクトリTAGDIRにアクセスしてデータ所持情報を検索したり、リモートCMGのデータの状態を変更したときにタグディレクトリのデータ所持情報を変更したりする。したがって、その分、処理量を減らし、タグディレクトリのメモリの消費電力を節約できる。
【００７７】
以上の実施の形態をまとめると，次の付記のとおりである。
【００７８】
（付記１）
複数の演算処理部と、前記複数の演算処理部が共有するキャッシュユニットと、前記キャッシュユニットからの第１のメモリアクセス要求を入力しメモリへのアクセスを制御するメモリアクセス制御部とをそれぞれ含む複数のコアメモリグループを有し、
前記キャッシュユニットは、
キャッシュメモリと、
前記キャッシュメモリの状態を記憶するキャッシュタグと、
他のコアメモリグループ内のキャッシュメモリによるデータの所持情報を記憶するタグディレクトリと、
前記演算処理部からの第２のメモリアクセス要求及び他のコアメモリグループからの第３のメモリアクセス要求を入力して制御を行うキャッシュ制御部とを有し、
前記キャッシュ制御部は、
前記第２及び第３のメモリアクセス要求に応答して、前記キャッシュタグを参照することによるキャッシュヒット判定を行い、
前記キャッシュヒット判定がキャッシュミスと判定した場合、前記タグディレクトリを参照して前記他のコアメモリグループがデータを所持しているか否かのデータ所持判定を行い、
前記他のコアメモリグループがデータを所持していると判定した場合、前記データを所持する他のコアメモリグループに所持する前記データの吐き出しを要求するデータ要求を発行する、演算処理装置。
【００７９】
（付記２）
前記キャッシュ制御部は、
前記キャッシュヒット判定がキャッシュヒットと判定した場合、前記キャッシュメモリに記憶されたデータを読み出し、前記第２または第３のメモリアクセス要求の要求元に、前記読み出しデータを応答する、付記１に記載の演算処理装置。
【００８０】
（付記３）
前記キャッシュ制御部は、
前記データ所持判定で前記他のコアメモリグループがデータを所持していないと判定した場合、対応するメモリアクセス制御部に前記メモリアクセス要求のデータの読み出しを依頼する前記第１のメモリアクセス要求を発行する、付記２に記載の演算処理装置。
【００８１】
（付記４）
前記データ要求は、前記データを所持する他のコアメモリグループの前記キャッシュ制御部に、キャッシュメモリ内の前記データを前記データ要求元のコアメモリグループに応答する処理と、必要な場合に前記キャッシュタグ内の前記データの状態を変更する処理とを要求する、付記１に記載の演算処理装置。
【００８２】
（付記５）
前記コアメモリグループそれぞれのタグディレクトリのインデックス数は、前記他のコアメモリグループそれぞれの前記キャッシュタグのインデックス数の合計よりも少ない、付記１に記載の演算処理装置。
【００８３】
（付記６）
前記コアメモリグループそれぞれのタグディレクトリのウエイ数は、前記他のコアメモリグループそれぞれの前記キャッシュタグのウエイ数と等しい、付記１に記載の演算処理装置。
【００８４】
（付記７）
前記キャッシュ制御部は、
前記データ要求の完了応答に応答して、前記タグディレクトリの前記データの所持情報を変更する、付記４に記載の演算処理装置。
【００８５】
（付記８）
前記タグディレクトリの各インデックスは、前記所持情報と、前記データを所持する他のコアメモリグループを特定するコアメモリグループ識別情報とを記憶し、前記所持情報は前記データを所持するか否かを示す情報である、付記１に記載の演算処理装置。
【００８６】
（付記９）
前記タグディレクトリの各インデックスは、さらに、ロックフラグを記憶し、
前記キャッシュ制御部は、
前記データ要求を前記他のコアメモリグループに発行する場合、前記ロックフラグをロック状態に変更し、前記データ要求の完了応答に応答して前記所持情報を変更した後、前記ロックフラグをアンロック状態に変更し、
前記第２及び第３のメモリアクセス要求に応答して前記タグディレクトリを参照したとき、前記ロックフラグがロック状態の場合、前記第２及び第３のメモリアクセス要求をアボートする、付記７に記載の演算処理装置。
【００８７】
（付記１０）
複数の演算処理部と、前記複数の演算処理部が共有するキャッシュユニットと、前記キャッシュユニットからの第１のメモリアクセス要求を入力しメモリへのアクセスを制御するメモリアクセス制御部とをそれぞれ含む複数のコアメモリグループを有し、
前記キャッシュユニットは、キャッシュメモリと、前記キャッシュメモリの状態を記憶するキャッシュタグと、他のコアメモリグループ内のキャッシュメモリによるデータの所持情報を記憶するタグディレクトリと、前記演算処理部からの第２のメモリアクセス要求及び他のコアメモリグループからの第３のメモリアクセス要求を入力して制御を行うキャッシュ制御部とを有する、演算処理装置の制御方法において、
前記キャッシュ制御部は、
前記第２及び第３のメモリアクセス要求に応答して、前記キャッシュタグを参照することによるキャッシュヒット判定を行い、
前記キャッシュヒット判定がキャッシュミスと判定した場合、前記タグディレクトリを参照して前記他のコアメモリグループがデータを所持しているか否かのデータ所持判定を行い、
前記他のコアメモリグループがデータを所持していると判定した場合、前記データを所持する他のコアメモリグループに前記所持するデータの吐き出しを要求するデータ要求を発行する、ステップを有する演算処理装置の制御方法。
【符号の説明】
【００８８】
CPU_CHIP：演算処理装置、プロセッサ、CPUチップ
CMG：コアメモリグループ
H_CMG：ホームコアメモリグループ
R_CMG：リモートコアメモリグループ、他のコアメモリグループ
CORE：プロセッサコア、コア
ALU：演算処理回路
L1$：第１レベルキャッシュ、L1キャッシュ
CA_U：キャッシュユニット
CA_PIPE：キャッシュ制御回路
L2$：第２レベルキャッシュ、L2キャッシュ、ラストレベルキャッシュ、LLキャッシュ
L2TAG：L2キャッシュタグ
TAGDIR：タグディレクトリ
HA：ホームエージェント
HA_PIPE：HA制御回路
DIR$：ディレクトリキャッシュ
MAC：メモリアクセスコントローラ回路
C_BUS：CMG間バス
MEM_0〜MEM_3：メモリ、メインメモリ
MA_RQ_1：第１のメモリアクセス要求
MA_RQ_2：第２のメモリアクセス要求
MA_RQ_3：第３のメモリアクセス要求
MA_RQ_4：第４のメモリアクセス要求
INPUT_ARB：入力調停回路
DATA_RQ：データ要求
【図１】
2019049872.tif 000003
【図２】
2019049872.tif 000004
【図３】
2019049872.tif 000005
【図４】
2019049872.tif 000006
【図５】
2019049872.tif 000007
【図６】
2019049872.tif 000008
【図７】
2019049872.tif 000009
【図８】
2019049872.tif 000010
【図９】
2019049872.tif 000011
【図１０】
2019049872.tif 000012
【図１１】
2019049872.tif 000013
【図１２】
2019049872.tif 000014