(57)【特許請求の範囲】
【請求項１】
各々第１キャッシュメモリを有する複数のプロセッサコアで共用される第２キャッシュメモリを制御するキャッシュメモリ制御装置であって、
前記第２キャッシュメモリに登録された情報の登録アドレスの一部を第２キャッシュインデックスとし、前記登録アドレスに登録された情報を保持するプロセッサコアを示す情報を保持せずに、第２キャッシュメモリの登録アドレスと、当該登録アドレスに登録された情報が前記第１キャッシュメモリ上で更新されたか否かを示すキャッシュ状態情報とを対応付けて保持する第２キャッシュタグと、
検索対象アドレスに含まれる第２キャッシュインデックスをキーに前記第２キャッシュタグを検索して得られた登録アドレスと前記検索対象アドレスとを比較する第１の比較部と、
前記第１の比較部による比較の結果、前記検索対象アドレスと前記登録アドレスとが一致した場合に、前記キャッシュ状態情報に基づいてブロックを所持するプロセッサコアに対して無効化あるいはデータ要求の必要があるか否かを判定する第１の処理判定部と、
前記複数のプロセッサコアが各々の第１キャッシュメモリに保持するアドレスについて、前記第１キャッシュメモリの検索に用いる第１キャッシュインデックスと前記第２キャッシュインデックスとのインデックス差分と、前記第１キャッシュインデックスとを対応付けて保持する第１キャッシュタグと、
前記検索対象アドレスの第１キャッシュインデックスをキーに前記第１キャッシュタグを検索して得られたインデックス差分と前記検索対象アドレスの第１キャッシュインデックスとの組み合わせを、前記検索対象アドレスの第２キャッシュインデックスと比較する第２の比較部と、
前記第１の処理判定部による判定の結果、ブロックを所持するプロセッサコアに対して無効化あるいはデータ要求の必要である場合に、前記第２の比較部による比較結果を用いて命令のリトライが必要であるか否かを判定する第２の処理判定部と
を備えたことを特徴とするキャッシュメモリ制御装置。 
【請求項２】
前記第２キャッシュタグは前記キャッシュ状態情報として、前記検索対象アドレスを前記第１キャッシュメモリに保持するプロセッサコアが存在しない状態、単一のプロセッサコアが前記検索対象アドレスを前記第２キャッシュメモリと同一の内容で前記第１キャッシュメモリに保持している状態、単一のプロセッサコアが前記検索対象アドレスを前記第１キャッシュメモリに保持して更新中である状態、複数のプロセッサコアが前記検索対象アドレスを共有している状態の４つの状態のいずれかを示す２ビットデータを保持することを特徴とする請求項１に記載のキャッシュメモリ制御装置。 
【請求項３】
前記第１処理判定部は、前記複数のプロセッサコアのいずれかがロード命令を発行した場合に、当該ロード命令の対象となるアドレスが単一のプロセッサコアで所持されており、かつ更新された状態であるなら、所持するコアにデータを要求する処理が必要であると判定し、前記複数のプロセッサコアのいずれかがストア命令を発行した場合に、当該ストア命令の対象となるアドレスを前記第１キャッシュメモリに保持するプロセッサコアが存在しなければ命令要求元のプロセッサコア以外のプロセッサコアに対する処理が不要であると判定することを特徴とする請求項１または２に記載のキャッシュメモリ制御装置。 
【請求項４】
前記第２キャッシュタグは、前記登録アドレスについて当該登録アドレスを前記複数のプロセッサコアのうち少なくともいずれか一つが命令キャッシュとして保持しているか否かを示す制御情報をさらに対応付けて保持し、前記第１の処理判定部は、前記複数のプロセッサコアのいずれかが自身の第１キャッシュメモリに保持するアドレスを指定してストア命令を発行した場合に、当該ストア命令の対象となるアドレスについて、いずれのプロセッサコアも命令キャッシュとして保持していないことを前記制御情報が示し、単一のプロセッサコアが前記第２キャッシュメモリと同一の内容で前記第１キャッシュメモリに保持中であることを前記キャッシュ状態情報が示し、前記第１キャッシュタグに値が登録されているならば、命令要求元のプロセッサコア以外のプロセッサコアに対する処理が不要であると判定することを特徴とする請求項１から３のいずれか一つに記載のキャッシュメモリ制御装置。 
【請求項５】
前記第２キャッシュタグは複数のＷＡＹを有し、前記第１キャッシュタグは前記複数のプロセッサコアが第１キャッシュメモリに保持するアドレスについて、当該アドレスを登録した前記第２キャッシュタグのＷＡＹをさらに対応付けることを特徴とする請求項１から４のいずれか一つに記載のキャッシュメモリ制御装置。 
【請求項６】
各々第１キャッシュメモリを有する複数のプロセッサコアで共用される第２キャッシュメモリを制御するキャッシュメモリ制御方法であって、
前記第２キャッシュメモリに登録された登録アドレスの一部を第２キャッシュインデックスとし、前記登録アドレスに登録された情報を保持するプロセッサコアを示す情報を保持せずに、第２キャッシュメモリの登録アドレスと、当該登録アドレスに登録された情報が前記第１キャッシュメモリ上で更新されたか否かを示すキャッシュ状態情報とを対応付けた第２キャッシュタグに対して検索対象アドレスの第２キャッシュインデックスをキーに検索する第２キャッシュタグ検索ステップと、
前記第２キャッシュタグ検索ステップによって得られた登録アドレスと前記検索対象アドレスとを比較する第１の比較ステップと、
前記第１の比較ステップによる比較の結果、前記検索対象アドレスと前記登録アドレスとが一致した場合に、前記キャッシュ状態情報に基づいてブロックを所持するプロセッサコアに対して無効化あるいはデータ要求の必要があるか否かを判定する第１の処理判定ステップと、
前記複数のプロセッサコアが前記第１キャッシュメモリに保持するアドレスについて、前記第１キャッシュメモリでの検索に用いる第１キャッシュインデックスと前記第２キャッシュインデックスとのインデックス差分と前記第１キャッシュインデックスとを対応付けた第１キャッシュタグに対して前記検索対象アドレスの第１キャッシュインデックスをキーに検索を行なう第１キャッシュタグ検索ステップと、
前記第１キャッシュタグを検索して得られたインデックス差分と前記検索対象アドレスの第１キャッシュインデックスとの組み合わせを前記検索対象アドレスの第２キャッシュインデックスと比較する第２の比較ステップと、
前記第１の処理判定ステップによる判定の結果、ブロックを所持するプロセッサコアに対して無効化あるいはデータ要求が必要である場合に、前記第２の比較ステップによる比較結果を用いて命令のリトライが必要であるか否かを判定する第２の処理判定ステップと
を含んだことを特徴とするキャッシュメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリ制御装置およびキャッシュメモリ制御方法に関する。
【背景技術】
【０００２】
従来、ＣＰＵ（Central Processing Unit）は主記憶装置間に発生するデータ遅延問題の解決手段としてキャッシュメモリを利用している。キャッシュメモリは多段構造となっており、例えばレベル１（Ｌ１）キャッシュと、Ｌ１キャッシュを包含するレベル２（Ｌ２）キャッシュとから構成されている。また、Ｌ２キャッシュでは、Ｌ１キャッシュのタグの写しを保持し、これを利用することでＬ１キャッシュとＬ２キャッシュ間のコヒーレンシを維持している。Ｌ１キャッシュでは、オペランドのキャッシュと命令のキャッシュを個別に管理する命令オペランドセパレートキャッシュが知られている。
【０００３】
また、複数のプロセッサコアを備えたＣＰＵでは、各プロセッサコアがＬ１キャッシュを個別に備え、Ｌ２キャッシュをプロセッサコア間で共有する構成が知られている。この構成では、Ｌ２キャッシュはプロセッサコア数分のオペランドキャッシュタグの写しと命令キャッシュタグの写しを持つ。
【０００４】
Ｌ１キャッシュはＬ２キャッシュに包含される関係であるから、Ｌ１キャッシュのブロックをＬ２キャッシュ上の位置によって特定できる。具体的には、Ｌ２インデックス分の情報があればよい。なお、Ｌ２キャッシュが複数のＷＡＹを有する構成では、Ｌ２インデックス分の情報に加えてＬ２−ＷＡＹも管理する。
【０００５】
Ｌ２インデックス分の情報については、Ｌ２インデックスの全てのビットを持つ必要はなく、Ｌ１インデックスと共通部分を除いた残りのビットをインデックス差分として持てばよい。このようにインデックス差分を用いることでＬ１キャッシュタグの写しの物量を大幅に削減できる。
【０００６】
Ｌ１キャッシュタグの写しをＬ２インデックスとＬ２−ＷＡＹで管理する構成では、Ｌ１キャッシュタグの検索時に、Ｌ２インデックスとＬ２−ＷＡＹとの組み合わせを比較する。すなわち、Ｌ１キャッシュタグの写しから得られるＬ２インデックスとＬ２−ＷＡＹとの組み合わせが、Ｌ２ヒットしたＬ２インデックスとＬ２−ＷＡＹ（Ｌ２−ＨＩＴ−ＷＡＹ）との組み合わせに一致した場合にＬ１ヒット（Ｌ１−ＨＩＴ）となる。これは、Ｌ１−ＨＩＴはＬ２−ＨＩＴ−ＷＡＹが確定した後に判明することを意味する。
【０００７】
したがって、Ｌ２キャッシュタグにＬ１キャッシュタグの情報を持たなければ、プロセッサコアにおける該当ブロックの情報を全てＬ１キャッシュタグの写しに頼るために、プロセッサコアに対する処理の判定が全てＬ１−ＨＩＴ以降となりレイテンシが悪化する。
【０００８】
Ｌ１キャッシュタグの写しを持たず、Ｌ１キャッシュタグの情報を全てＬ２キャッシュタグに持つことでマシンサイクルの高速化を実現する構成も知られている。しかし、Ｌ２キャッシュはＬ１キャッシュに比べてキャッシュの容量が大きいために、容量差の分だけ使用されない部分(Ｌ１キャッシュタグ情報)が発生する。よって、プロセッサコアの数が増えるほど、Ｌ２キャッシュタグで持つＬ１キャッシュタグの情報が増大し、資源効率が低下するという問題があった。
【０００９】
また、複数のプロセッサコアでキャッシュを所持する場合に情報を圧縮することで、資源の有効利用とマシンサイクルの高速化を同時に実現可能にする構成も知られている。この構成では、Ｌ２キャッシュタグはＬ１でのキャッシュ状態を示すキャッシュ状態情報とコア番号とを管理用の情報として持つ。キャッシュ状態情報は、該当するデータのキャッシュを所持するプロセッサコアが存在するか、存在する場合には単独のプロセッサによる所持であるか、単独であればＬ１キャッシュのいずれのＷＡＹに登録されたかを示す。また、コア番号は、該当するデータのキャッシュを所持するプロセッサコアが単独である場合にプロセッサコアを特定する情報である。
【００１０】
Ｌ２キャッシュタグにＬ１でのキャッシュ状態を示すキャッシュ状態情報とコア番号とを持たせることで、キャッシュを所持するプロセッサコアが単独である場合には、Ｌ２キャッシュの検索でＬ１でのキャッシュ状態を特定することができる。一方、キャッシュを所持するプロセッサコアが複数である場合には、当該ブロックを所持するコアを特定できない。そのため、全てのプロセッサコアに対して無効化処理することで解決していた。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平０５−３４２１０１号公報
【特許文献２】特開２００６−４０１７５号公報
【特許文献３】国際公開第２００７／０９４０４６号
【発明の概要】
【発明が解決しようとする課題】
【００１２】
近年、消費電力の増大によりシングルコアの性能向上の限界をマルチコア化によって解決しようとする傾向にあり、プロセッサコア数が増加している。また、低消費電力化が求められ、徹底した物量削減が求められる。
【００１３】
従来技術は、高速化のためにＬ２キャッシュタグにＬ１キャッシュタグの情報を持たせて処理の判定を解決しようとするものである。そのために、例えば複数のプロセッサコアで所持する、すなわち共有するブロックに対してストア命令があった場合は、全てのプロセッサコアに対する無効化処理が発生する。
【００１４】
しかしながら、プロセッサコアの数が増大すると、実際にはキャッシュを所持してないプロセッサコアに対して不要な無効化処理が発生し、プロセッサの処理性能を低下させる要因となる。Ｌ２キャッシュタグに付加する管理情報を増加し、各プロセッサコアが所持しているか否かを示すビットを追加すれば、共有時にも不要な無効化処理は発生しない。しかし、Ｌ２キャッシュタグの物量が大きくなることは、資源の使用効率の悪化と消費電力の増大の点で問題となる。
【００１５】
そのため、レンテンシを悪化させることなく、またプロセッサコアの数の増大に影響を受けることなくＬ２キャッシュタグの物量削減をおこなうことが課題となっていた。
【００１６】
開示の技術は、上記に鑑みてなされたものであって、高速で物量の小さいキャッシュメモリ制御装置およびキャッシュメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示するキャッシュメモリ制御装置およびキャッシュメモリ制御方法は、登録アドレスに登録された情報を保持するプロセッサコアを示す情報を保持せずに、登録アドレスに登録された情報が第１キャッシュメモリ上で更新されたか否かを示すキャッシュ状態情報を付した第２キャッシュタグを検索する。検索対象アドレスと検索して得られた登録アドレスとが一致した場合は、開示の装置および方法は、キャッシュ状態情報に基づいてブロックを所持するプロセッサコアに対して無効化あるいはデータ要求の必要があるか否かを判定する。判定の結果、ブロックを所持しているプロセッサコアに対して無効化あるいはデータ要求処理が必要である場合は、開示の装置および方法は、第１キャッシュタグの比較結果を用いて命令のリトライが必要であるか否かを判定する。
【発明の効果】
【００１８】
本願の開示するキャッシュメモリ制御装置およびキャッシュメモリ制御方法は、高速で物量の小さいキャッシュメモリ制御装置およびキャッシュメモリ制御方法を得ることができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】図１は、本実施例にかかるキャッシュメモリ制御装置の概要構成図である。
【図２】図２は、本実施例にかかるキャッシュメモリ制御装置を用いるＣＰＵの構成図である。
【図３】図３は、キャッシュメモリ制御装置の比較構成図である。
【図４】図４は、アドレスからのインデックス作成について説明する説明図である。
【図５】図５は、Ｌ１キャッシュメモリへのキャッシュ状態をＬ２キャッシュタグに登録する構成について、開示の技術と比較する比較構成図である。
【図６】図６は、図５に示した比較例におけるステータスコード４２およびコア番号４３の具体例の説明図である。
【図７】図７は、本実施例にかかるＬ２キャッシュタグの説明図である。
【図８】図８は、ステータスコード５２の具体例についての説明図である。
【図９】図９は、第１処理判定部２５による判定処理の説明図である。
【図１０】図１０は、制御フラグを設けたＬ２キャッシュタグの説明図である。
【図１１】図１１は、制御フラグが有効である場合について説明する説明図である。
【図１２】図１２は、制御フラグを設けた場合の第１処理判定部２５による判定処理の説明図である。
【図１３】図１３は、制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬを生成する論理回路の回路図である。
【図１４】図１４は、制御フラグｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴを生成する論理回路の回路図である。
【図１５】図１５は、第１処理判定部２５によるストア命令に対する判定を実現する回路図である。
【図１６】図１６は、要求コアに対する処理のリトライ判定を行なう論理回路の回路図である。
【図１７】図１７は、所持コアに対する処理のリトライ判定を行なう論理回路の回路図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示するキャッシュメモリ制御装置およびキャッシュメモリ制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００２１】
図１は、本実施例にかかるキャッシュメモリ制御装置の概要構成図である。また、図２は、本実施例にかかるキャッシュメモリ制御装置を用いるＣＰＵの構成図である。図３は、キャッシュメモリ制御装置の比較構成図である。
【００２２】
図２に示したＣＰＵ１は、主記憶装置であるメモリ２と接続する。ＣＰＵ１は、複数（図２では８つ）のプロセッサコアＣ０〜Ｃ７とＬ２キャッシュ１０を有する。プロセッサコアＣ０は、命令制御部Ｃ０−２、演算部Ｃ０−４、レジスタＣ０−３、Ｌ１キャッシュＣ０−１を有する。
【００２３】
命令制御部Ｃ０−２は、命令のデコードと処理順序制御を行なう処理部である。具体的には、命令制御部Ｃ０−２は、ＣＰＵ１が処理する命令を記憶装置（メモリ／キャッシュ）から読み込み、解釈し、解釈結果を出力する。演算部Ｃ０−４は、演算を行う処理部である。具体的には、演算部Ｃ０−４は、命令の対象となるデータを記憶装置から読み込み、命令制御部Ｃ０−２によって解釈された命令に従って演算し、演算結果を出力する。レジスタＣ０−３は、命令制御部Ｃ０−２と演算部Ｃ０−４との間などでのデータのやり取りに使用される。
【００２４】
Ｌ１キャッシュＣ０−１とＬ２キャッシュ１０は、命令制御部Ｃ０−２および演算部Ｃ０−４の入出力データを一時的に保持するキャッシュメモリである。Ｌ１キャッシュＣ０−１は、プロセッサコアＣ０専用のキャッシュであり、オペランドのキャッシュと命令のキャッシュを個別に管理する命令オペランドセパレートキャッシュである。また、Ｌ２キャッシュ１０は、プロセッサコアＣ０〜Ｃ７が共用するキャッシュメモリであり、オペランドと命令を区別せずにキャッシュする。
【００２５】
Ｌ１キャッシュＣ０−１は、Ｌ２キャッシュ１０に比して高速で容量が小さい。プロセッサコアＣ０は、速度と容量の異なるＬ１キャッシュＣ０−１とＬ２キャッシュ１０とを階層的に使用する。具体的には、メモリ２に格納されたデータの一部をＬ２キャッシュ１０に保持し、さらにＬ２キャッシュ１０に保持した内容の一部をＬ１キャッシュＣ０−１に保持する。すなわち、Ｌ２キャッシュ１０は、Ｌ１キャッシュＣ０−１を包含する。
【００２６】
プロセッサコアＣ１〜Ｃ７は、プロセッサコアＣ０と同様にそれぞれ専用のＬ１キャッシュＣ１−１〜Ｃ７−１を有し、共用するＬ２キャッシュ１０との間で段階的なキャッシュの使用をおこなう。また、プロセッサコアＣ１〜Ｃ７は、プロセッサコアＣ０と同様に命令制御部、演算部、レジスタを有するが図示および説明を省略する。
【００２７】
Ｌ２キャッシュ１０は、キャッシュデータ部１１、検索部１２および入出力制御部１３を有する。キャッシュデータ部１１は、キャッシュメモリの本体部であり、データの保持と読み出しを行なう。キャッシュにおけるデータの読み書きは所定の大きさのブロック単位で行なうことが一般的である。
【００２８】
検索部１２は、キャッシュデータ部１１に登録されたデータのアドレス、データをブロック単位で管理する場合にはブロックのアドレスを管理し、Ｌ２キャッシュメモリを制御するキャッシュメモリ制御部である。入出力制御部１３は、検索部１２の検索結果と、キャッシュデータ部１１からの読み出し結果とを用いて、メモリ２に対する入出力とプロセッサコアＣ０〜Ｃ７に対する入出力の制御を行なう。
【００２９】
図１に示した本実施例にかかるキャッシュメモリ制御装置は、図２に示したＬ２キャッシュ１０の検索部１２として使用される。図１に示したように、キャッシュメモリ制御装置は、Ｌ１キャッシュタグ２１、Ｌ２キャッシュタグ２２、比較部２３，２４、第１処理判定部２５および第２処理判定部２６を有する。
【００３０】
Ｌ１キャッシュタグ２１は、プロセッサコアＣ０〜Ｃ７が有するＬ１キャッシュＣ０−１〜Ｃ７−１のタグの写しである。Ｌ１キャッシュＣ０−１〜Ｃ７−１は、命令オペランドセパレートキャッシュであるので、Ｌ１キャッシュタグ２１は、Ｌ１キャッシュＣ０−１〜Ｃ７−１が保持する命令とオペランドとについてそれぞれ個別にタグを保持する。
【００３１】
図１に示したタグＴＣ０ＩはＬ１キャッシュＣ０−１の命令キャッシュのタグであり、タグＴＣ０ＤはＬ１キャッシュＣ０−１のオペランドキャッシュのタグである。また、タグＴＣ１ＩはＬ１キャッシュＣ１−１の命令キャッシュのタグであり、タグＴＣ１ＤはＬ１キャッシュＣ１−１のオペランドキャッシュのタグである。同様に、タグＴＣ７ＩはＬ１キャッシュＣ７−１の命令キャッシュのタグであり、タグＴＣ７ＤはＬ１キャッシュＣ７−１のオペランドキャッシュのタグである。
【００３２】
Ｌ２キャッシュタグ２２は、Ｌ２キャッシュに登録したデータの登録アドレスを保持するとともに、Ｌ２キャッシュに登録したデータをＬ１キャッシュメモリに保持するプロセッサコアが存在するか否かを示すキャッシュ状態情報を登録アドレスと対応付けている。また、Ｌ２キャッシュタグ２２は、ＷＡＹ０〜ＷＡＹ１１を有する。
【００３３】
Ｌ２キャッシュタグ２２は、登録データのアドレスの一部をＬ２キャッシュ検索用のインデックスとする。Ｌ２キャッシュの検索用のインデックスをＬ２インデックスという。同じく、Ｌ１キャッシュタグ２１は、登録データのアドレスの一部をＬ１キャッシュ検索用のインデックスとする。Ｌ１キャッシュの検索用のインデックスをＬ１インデックスという。
【００３４】
図４は、アドレスからのインデックス作成について説明する説明図である。図４に示すように、データブロックのアドレスは、アドレス本体とラインサイズなどの付加情報を有する。本実施例では、このアドレス本体の一部をインデックスとする。
【００３５】
既に述べたように、Ｌ１キャッシュはＬ２キャッシュに比して容量が小さいため登録可能なエントリ数も少ない。このため、Ｌ１キャッシュの検索に用いるＬ１インデックスは、Ｌ２キャッシュの検索に用いるＬ２インデックスに比して短くなる。また、Ｌ２キャッシュはＬ１キャッシュを包含するので、Ｌ２インデックスはＬ１インデックスと包含関係となる。
【００３６】
Ｌ２キャッシュタグ２２に登録したデータのアドレスと、検索対象となるデータのアドレスとを比較する場合には、Ｌ２キャッシュタグ２２に入力するＬ２インデックスをキーにＬ２キャッシュタグ２２を検索する。次いで、入力したＬ２インデックスと同一インデックスのＬ２キャッシュタグ２２のエントリに登録されたアドレスと、検索対象アドレスとを比較する。アドレスのうちインデックス部分は同一であるので、アドレス本体の、Ｌ２インデックスよりも上位部分のアドレス同士を比較することとなる。
【００３７】
Ｌ１キャッシュタグ２１にアドレス全体を登録する構成では、Ｌ２キャッシュの検索と同様に、Ｌ１キャッシュタグ２１に入力するＬ１インデックスをキーにＬ１キャッシュタグ２１を検索し、Ｌ１キャッシュタグ２１から得られたアドレスと検索対象のアドレスとをＬ１インデックスよりも上位部分について比較して、双方のアドレスが一致するかを判定する。
【００３８】
ここで、Ｌ２キャッシュはＬ１キャッシュを包含するので、Ｌ１キャッシュに登録されたエントリは、Ｌ２キャッシュ上に存在することとなる。このため、Ｌ１キャッシュのエントリに対応するＬ２キャッシュのエントリを一意に特定することができれば、Ｌ２キャッシュがヒットしたか否かの判別結果を利用してＬ１キャッシュの検索を行なうことができる。
【００３９】
Ｌ１キャッシュのエントリとＬ２キャッシュのエントリとを一意に対応付けるためには、Ｌ２インデックスとＬ１インデックスとの差分を用いる。また、Ｌ２キャッシュが複数のＷＡＹを有する、すなわち、同一のＬ２インデックスについてＷＡＹ数分のエントリを登録可能であるならば、いずれのＷＡＹであるかを指定する情報もＬ１キャッシュのエントリとＬ２キャッシュのエントリとの対応付けに用いる。
【００４０】
したがって、Ｌ１キャッシュタグ２１は、値がＬ１キャッシュに存在することを示すＶＡＬ、Ｌ２インデックスとＬ１インデックスとの差分であるインデックス差分、Ｌ２のウェイを指定するＬ２−ＷＡＹの情報をもてばよい。このように、Ｌ１キャッシュタグにアドレス全体を登録する代わりにＶＡＬ、インデックス差分、Ｌ２−ＷＡＹの情報をＬ１キャッシュタグに登録し、Ｌ２キャッシュのヒットを利用することで、Ｌ１キャッシュタグの物量を削減できる。
【００４１】
図３に示した比較構成は、Ｌ２ヒットを利用してＬ１キャッシュを検索するキャッシュメモリ制御装置の構成の一例である。図３に示したキャッシュメモリ制御装置は、Ｌ１キャッシュタグ３１、Ｌ２キャッシュタグ３２、比較部３３，３４、処理判定部３５を有する。
【００４２】
Ｌ１キャッシュタグ３１は、プロセッサコアＣ０〜Ｃ７が有するＬ１キャッシュＣ０−１〜Ｃ７−１のタグの写しであり、値が存在することを示すＶＡＬ、インデックス差分、Ｌ２−ＷＡＹの情報を持つ。また、Ｌ２キャッシュタグ３２は、アドレス全体を登録したキャッシュであり、Ｌ１キャッシュを包含する。
【００４３】
比較部３３は、入力した検索対象アドレスとＬ２キャッシュタグ３２に登録されているアドレスとを比較する処理部である。検索対象アドレスがＬ２パイプラインから入力されると、Ｌ２キャッシュタグ３２は、Ｌ２インデックスが入力した検索対象アドレスと同一のエントリを出力する。比較部３３は、Ｌ２インデックスより上位のアドレスについて検索対象アドレスとＬ２キャッシュタグ３２に登録されていたエントリとを比較する。
【００４４】
比較部３３は、比較の結果、検索対象アドレスとエントリとが一致した場合、すなわち検索対象アドレスがＬ２キャッシュタグ３２に登録されていた場合には、Ｌ２−ＨＩＴをＬ２パイプラインに返す。このＬ２−ＨＩＴは、検索対象アドレスがＬ２キャッシュメモリにキャッシュされていることを示す。
【００４５】
また、比較部３３は、比較の結果、検索対象アドレスとエントリとが一致した場合、当該アドレスとＬ２−ＨＩＴ−ＷＡＹを比較部３４に出力する。Ｌ２−ＨＩＴ−ＷＡＹは、検索対象アドレスと同一のアドレスが登録されていたＬ２キャッシュタグのＷＡＹを示す。
【００４６】
検索対象アドレスがＬ２パイプラインから入力されると、Ｌ１キャッシュタグ３１は、Ｌ１インデックスが検索対象アドレスと同一のエントリを出力する。Ｌ１キャッシュタグ３１からの出力は、差分インデックスとＬ２−ＷＡＹを含む。
【００４７】
比較部３４は、検索対象アドレスとＬ１キャッシュメモリに登録されているアドレスとを比較する処理部である。比較部３４は、比較部３３からＬ２キャッシュタグ３２でヒットしたアドレスとＬ２−ＨＩＴ−ＷＡＹを受けている。比較部３４は、Ｌ１キャッシュタグ３１から受け取った差分アドレスを、比較部３４から受け取ったＬ２キャッシュタグ３１でヒットしたアドレスの差分に該当する部分と比較する。比較器３４はまた、比較器３３から受け取ったＬ２−ＨＩＴ−ＷＡＹと、Ｌ１キャッシュタグ３１から受け取ったＬ２−ＷＡＹとを比較する。比較部３４は、Ｌ１キャッシュタグ３１の差分アドレスがＬ２キャッシュタグ３１でヒットしたアドレスの該当部分と一致し、且つＬ２−ＨＩＴ−ＷＡＹとＬ２−ＷＡＹとが一致した場合に、Ｌ１−ＨＩＴをＬ２パイプラインに返す。このＬ１−ＨＩＴは、検索対象アドレスがＬ１キャッシュメモリにキャッシュされていることを示す。
【００４８】
処理判定部３５は、比較部３３の出力（Ｌ２−ＨＩＴ）と比較部３４の出力（Ｌ１−ＨＩＴ）とを用いて、検索対象アドレスに対する処理をリトライすべきか否かの判定を行なう。処理判定部３５による判定は、比較部３４の出力が必要である。これは、検索対象のアドレスをＬ１キャッシュメモリにキャッシュしているプロセッサコアが存在するか否かによって、リトライをすべきか否かが異なるためである。したがって、処理判定部３５は、常に比較部３４による比較の後に動作することとなる。
【００４９】
このように、図３に示した比較構成では、Ｌ１キャッシュタグの物量を大きく削減することができるが、Ｌ２キャッシュタグでの検索後にＬ１キャッシュメモリでのキャッシュの有無が決定し、その後に処理判定することになるのでレイテンシが悪化する。
【００５０】
Ｌ１キャッシュメモリへのキャッシュ状態をＬ２キャッシュタグに登録しておけば、Ｌ２キャッシュタグの検索によってＬ１キャッシュメモリへのキャッシュ状態を知ることができる。Ｌ１キャッシュメモリへのキャッシュ状態をＬ２キャッシュタグに登録する構成について、比較構成図を図５に示す。
【００５１】
図５に示した比較構成図では、Ｌ２キャッシュタグ３６は、アドレス４１に加え、ステータスコード４２、コア番号４３を有する。ステータスコード４２は、Ｌ１キャッシュメモリでのキャッシュ状態を示す管理用の情報である。また、ステータスコード４２は、該当するアドレスのキャッシュを所持するプロセッサコアが存在するか否かを示す。ステータスコード４２はまた、キャッシュを所持するプロセッサコアが存在する場合には単独のプロセッサによる所持であるか否か、また所持するプロセッサが単独であればＬ１キャッシュのいずれのＷＡＹに登録されたかを示す。また、コア番号４３は、該当するアドレスのキャッシュを所持するプロセッサコアが単独である場合にプロセッサコアを特定する管理用の情報である。
【００５２】
図６は、図５に示した比較例におけるステータスコード４２およびコア番号４３の具体例の説明図である。図６に示した例は、２ＷＡＹ命令オペランドセパレートキャッシュ、プロセッサコアが４つの場合の例であり、ステータスコード４２が４ビット、コア番号４３が２ビットのデータである。
【００５３】
Ｌ１キャッシュメモリでのキャッシュ状態は、大別すると「ＩＮＶ」、「ＭＯＤ」、「ＳＨＭ」、「ＣＬＮ」の４状態である。「ＩＮＶ」は、いずれのプロセッサコアもキャッシュしていない「無効」の状態である。「ＭＯＤ」は、単一のプロセッサコアがＬ１キャッシュメモリに登録しており、かつＬ１キャッシュメモリとＬ２キャッシュメモリとでデータの内容が異なる、すなわちｄｉｒｔｙな状態である。この「ＭＯＤ」は、データを書き換える際などに発生する。「ＳＨＭ」は、複数のプロセッサコアがＬ１キャッシュメモリに登録してキャッシュ内容が共有された状態である。「ＣＬＮ」は、単一のプロセッサコアがＬ１キャッシュメモリに登録しており、かつＬ１キャッシュメモリとＬ２キャッシュメモリとでデータの内容が同じ、すなわちｃｌｅａｎな状態である。「ＣＬＮ」には、単一のプロセッサコアにおいて、命令キャッシュのみ、オペランドキャッシュのみ、命令・オペランドキャッシュで共有の３つの状態が存在する。
【００５４】
ステータスコード４２では、「ＩＮＶ」に対して「００００」を割り当てている。また、ステータスコード４２では、「ＭＯＤ」について登録先のＷＡＹによって異なる値を割り当てている。具体的には、ステータスコード４２では、オペランドＷＡＹ０にｄｉｒｔｙで登録されている状態に対して「００１０」を割り当て、オペランドＷＡＹ１にｄｉｒｔｙで登録されている状態に対して「００１１」を割り当てている。
【００５５】
さらに、ステータスコード４２では、「ＳＨＭ」に対して「０１−−」を割り当てている。これは、上位２ビットが「０１」であれば、下位の２ビットがいずれの値であっても「ＳＨＭ」を指すことを示す。
【００５６】
ステータスコード４２では、「ＣＬＮ」について登録先がオペランドキャッシュである場合、命令キャッシュである場合、さらにそれぞれの場合におけるＷＡＹの違いによって異なる値を割り当てている。
【００５７】
具体的には、ステータスコード４２では、命令ＷＡＹ０にｃｌｅａｎで登録されている状態に対して「１０００」を割り当て、命令ＷＡＹ１にｃｌｅａｎで登録されている状態に対して「１００１」を割り当てている。また、ステータスコード４２では、オペランドＷＡＹ０にｃｌｅａｎで登録されている状態に対して「１０１０」を割り当て、オペランドＷＡＹ１にｃｌｅａｎで登録されている状態に対して「１０１１」を割り当てている。
【００５８】
同様にステータスコード４２では、命令ＷＡＹ０、オペランドＷＡＹ０にｃｌｅａｎで登録されている状態に対して「１１００」を割り当て、命令ＷＡＹ０、オペランドＷＡＹ１にｃｌｅａｎで登録されている状態に対して「１１０１」を割り当てている。そして、ステータスコード４２では、命令ＷＡＹ１、オペランドＷＡＹ０にｃｌｅａｎで登録されている状態に対して「１１１０」を割り当て、命令ＷＡＹ１、オペランドＷＡＹ１にｃｌｅａｎで登録されている状態に対して「１１１１」を割り当てている。なお、ステータスコード４２は「０００１」を予備、すなわちリザーブとして空けている。
【００５９】
コア番号４３は、プロセッサコアのいずれか一つを特定する。単一のプロセッサコアが対象のアドレスをキャッシュしている場合は、コア番号４３が有効となり、Ｌ１キャッシュに対象アドレスを登録したプロセッサコアとＷＡＹなどを特定できる。一方、複数のコアでキャッシュを所持する場合はＳＨＭとして情報を圧縮しているので、当該アドレスをＬ１キャッシュに登録しているプロセッサコアを特定することはできない。そのため、例えば、ストア命令の対象アドレスがＳＨＭであった場合は、全てのプロセッサコアに対して無効化処理する。
【００６０】
図５，図６に示した比較例は、Ｌ２キャッシュタグにＬ１キャッシュの情報を持たせ、Ｌ２キャッシュタグの検索でＬ２キャッシュとＬ１キャッシュの状態を求めることで処理の判定を高速化するものである。
【００６１】
図５，図６に示した比較例は、プロセッサコアの数が増大すると、実際にはキャッシュを所持してないプロセッサコアに対して不要な無効化処理が発生し、プロセッサの処理性能を低下させる要因となる。Ｌ２キャッシュタグに付加する管理情報を増加し、各プロセッサコアがキャッシュを所持しているか否かを示すビットを追加すれば、キャッシュ共有時にも不要な無効化処理は発生しない。しかし、Ｌ２キャッシュタグの物量が大きくなることは、資源の使用効率の悪化と消費電力の増大の点で問題となる。
【００６２】
本実施例にて開示する構成は、レンテンシを悪化させることなく、またプロセッサコアの数の増大に影響を受けることなくＬ２キャッシュタグの物量削減をおこなった構成である。
【００６３】
図１に戻り、本実施例にて開示するキャッシュメモリ制御装置の構成について説明する。既に説明したように、Ｌ１キャッシュタグ２１は、プロセッサコアＣ０〜Ｃ７が有するＬ１キャッシュＣ０−１〜Ｃ７−１のタグの写しであり、図３に示した比較構成と同様に値が存在することを示すＶＡＬ、インデックス差分、Ｌ２−ＷＡＹの情報を持つ。
【００６４】
また、Ｌ２キャッシュタグ２２は、アドレス全体を登録したキャッシュであり、Ｌ１キャッシュを包含する。本実施例のＬ２キャッシュタグ２２は、図７に示したようにアドレス５１に加えてステータスコード５２を有する。図８は、ステータスコード５２の具体例についての説明図である。
【００６５】
ステータスコード５２は、Ｌ１キャッシュメモリでの４つのキャッシュ状態、すなわち「ＩＮＶ」、「ＣＬＮ」、「ＳＨＭ」、「ＭＯＤ」を２ビットのデータで示す。具体的には、ステータスコード５２では、いずれのプロセッサコアもキャッシュしていない無効の状態である「ＩＮＶ」に対して「００」を割り当てている。
【００６６】
また、ステータスコード５２では、単一のプロセッサコアがＬ１キャッシュメモリに登録しており、かつＬ１キャッシュメモリとＬ２キャッシュメモリとでデータの内容が同じｃｌｅａｎな状態である「ＣＬＮ」に対して「０１」を割り当てている。
【００６７】
そして、ステータスコード５２では、複数のプロセッサコアがＬ１キャッシュメモリに登録してキャッシュ内容が共有された状態である「ＳＨＭ」に対して「１０」を割り当てている。また、ステータスコード５２では、単一のプロセッサコアがＬ１キャッシュメモリに登録しており、かつＬ１キャッシュメモリとＬ２キャッシュメモリとでデータの内容が異なる、すなわちｄｉｒｔｙな状態である「ＭＯＤ」に対して「１１」を割り当てている。
【００６８】
比較構成のステータスコード４２とは異なり、図８に示したステータスコード５２はプロセッサコアの数やＷＡＹの数に依存しない。このため、プロセッサコアの数やＷＡＹの数が増えてもステータスコード４２は２ビットでよい。
【００６９】
図１に示した比較部２３は、外部から供給される検索対象アドレスと、Ｌ２キャッシュタグ２２に登録されているアドレスとを比較する処理部である。検索対象アドレスがＬ２パイプラインから入力されると、Ｌ２キャッシュタグ２２は、Ｌ２インデックスが検索対象アドレスと同一のエントリを出力する。比較部２３は、Ｌ２インデックスより上位のアドレスについて検索対象アドレスとＬ２キャッシュタグ２２に登録されていたエントリとを比較する。
【００７０】
比較部２３は、比較の結果、検索対象アドレスとＬ２キャッシュタグ２２のエントリとが一致した場合、すなわち検索対象アドレスがＬ２キャッシュタグ２２に登録されていた場合には、Ｌ２−ＨＩＴとステータスコード５２の値をＬ２パイプラインに返す。Ｌ２−ＨＩＴは、検索対象アドレスがＬ２キャッシュメモリにキャッシュされていることを示す。さらに、後述する制御フラグとしてｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴを用いる場合は、比較部２３は、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴをＬ２パイプラインに返す。ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴは、全てのプロセッサコアの命令キャッシュタグのヒットのＯＲである。
【００７１】
また、比較部２３は、比較の結果、検索対象アドレスとエントリとが一致した場合に当該アドレスとＬ２−ＨＩＴ−ＷＡＹを比較部２４に出力する。Ｌ２−ＨＩＴ−ＷＡＹは、検索対象アドレスと同一のアドレスが登録されていたＬ２キャッシュのＷＡＹを示す。
【００７２】
検索対象アドレスがＬ２パイプラインから入力されると、Ｌ１キャッシュタグ２１は、Ｌ１インデックスが検索対象アドレスと同一のエントリを出力する。Ｌ１キャッシュタグ２１からの出力は、差分インデックスとＬ２−ＷＡＹを含む。
【００７３】
比較部２４は、検索対象アドレスとＬ１キャッシュメモリに登録されているアドレスとを比較する処理部である。比較部２４は、比較部２３からＬ２キャッシュタグ２２でヒットしたアドレスとＬ２−ＨＩＴ−ＷＡＹを受けている。比較部２４は、Ｌ１キャッシュタグ２１の差分アドレスをＬ２キャッシュタグ２２でヒットしたアドレスの該当部分と比較し、またＬ２−ＨＩＴ−ＷＡＹとＬ２−ＷＡＹとも比較する。比較部２４は、Ｌ１キャッシュタグ２１の差分アドレスがＬ２キャッシュタグ２２でヒットしたアドレスの該当部分と一致し、且つＬ２−ＷＡＹについても一致した場合に、Ｌ１−ＨＩＴをＬ２パイプラインに返す。このＬ１−ＨＩＴは、検索対象アドレスがＬ１キャッシュメモリにキャッシュされていることを示す。
【００７４】
第１処理判定部２５は、比較部２３の出力を用いて、当該ブロックを所持するプロセッサコアに対して無効化あるいはデータ要求の必要があるか否かを判定する。第１処理判定部２５による判定は比較部２４の出力を用いない。
【００７５】
図９は、第１処理判定部２５による判定処理の説明図である。既に説明したようにステータスコード５２の値が「ＩＮＶ」であれば、アドレスをキャッシュしているプロセッサコア、いわゆる所持コアは存在しない。また、ステータスコード５２の値が「ＣＬＮ」であれば、所持コアは単独であり、データはｃｌｅａｎである。そして、ステータスコード５２の値が「ＳＨＭ」であれば、所持コアは複数であり、データはｃｌｅａｎである。また、ステータスコード５２の値が「ＭＯＤ」であれば所持コアは単独であり、データはｄｉｒｔｙである。
【００７６】
プロセッサコアが出力した命令がロード命令、すなわち「ＬＤ」であり、オペランドのステータスコードが「ＩＮＶ」、「ＣＬＮ」あるいは「ＳＨＭ」であれば、所持コアに対する処理が必要ないので要求元のプロセッサコア、すなわち要求コアに即応答が可能である。一方、プロセッサコアが出力した命令がロード命令であり、オペランドのステータスコードが「ＭＯＤ」であれば、所持コアに対してデータを要求し、ｃｌｅａｎにしてプロセッサコア間でデータを共有する処理が求められる。
【００７７】
また、プロセッサコアが出力した命令がストア命令、すなわち「ＳＴ」である場合は、オペランドのステータスコードが「ＩＮＶ」であれば所持コアに対する処理が必要ないので、要求コアに即応答が可能である。一方、プロセッサコアが出力した命令がストア命令であり、オペランドのステータスコードが「ＣＬＮ」あるいは「ＳＨＭ」であれば、所持コアに対するキャッシュの無効化処理が求められる。そして、プロセッサコア出力した命令がストア命令であり、オペランドのステータスコードが「ＭＯＤ」であれば、所持コアに対するキャッシュの無効化処理とデータの要求が求められる。
【００７８】
このように第１処理判定部２５は、所持コアへの処理が必要かどうかの判定を行なう。第１処理判定部２５の判定では、実際に所持コアがいずれのプロセッサコアであるかは識別できない。第１処理判定部２５による判定の結果、所持コアへの処理が必要なく、要求コアへの処理が可能であれば、要求コアがいずれのプロセッサコアであるかは既知の情報であるので、Ｌ１キャッシュタグの検索結果を待つことなくリトライの有無を判定可能である。
【００７９】
一方、第１処理判定部２５による判定の結果、所持コアへの処理が必要な場合は、第２処理判定部２６が所持コアを特定した上で最終的なリトライ有無を判定する。第２処理判定部２６は、所持コアを比較部２４の出力であるＬ１−ＨＩＴによって特定できる。このため、第２処理判定部２６は、プロセッサコア毎のリソース数管理など各プロセッサコアのリトライ要因をＬ１−ＨＩＴに基づいて選択し、所持コアに対して処理が続行できるか、即ちリトライ有無を判定することができる。
【００８０】
このように本実施例にかかるキャッシュメモリ制御装置は、所持コアに対する処理が必要でなければＬ１キャッシュタグの検索結果を待つことなく、すなわちレイテンシを悪化させること無く高速にリトライの有無を判定することができる。また、Ｌ２キャッシュタグ２２に追加する情報はプロセッサコア数やＷＡＹ数に依存しないので、大規模なシステムであってもＬ２キャッシュタグの物量を削減することができる。
【００８１】
つぎに、開示のキャッシュメモリ制御装置の変形例について説明する。プロセッサコアによっては、ストア命令を発行する際に自身のオペランドキャッシュに共有型でキャッシュしているか否かによって異なる２種類のストア命令を発行するものがある。
【００８２】
ストア命令の要求コアがオペランドキャッシュに共有型でキャッシュしている場合は、他のプロセッサコアが同一のアドレスをキャッシュしている可能性がある。このため、要求コアは、Ｌ２キャッシュに問い合わせを行なう。Ｌ２キャッシュでの判定の結果、要求コアのオペランドキャッシュのみでしか所持していないことが判明した場合は、性能上の理由から不要な無効化をすることなくストアを実行可能として要求コアに応答することが望ましい。
【００８３】
Ｌ２キャッシュメモリから見ると、要求コアが自身にキャッシュした状態で発行したストア命令が「ＣＬＮ」であれば、要求コアが所持コアであり、かつ要求コアの命令キャッシュが所持（共有）していなければ、即ち要求コアのオペランドキャッシュのみが所持しているならば、所持コアに対する無効化を行なう必要は無い。一方、要求コアが自身にキャッシュしていない状態で発行したストア命令が「ＣＬＮ」であれば、要求コアではないプロセッサコアが所持コアとなる。
【００８４】
このため、Ｌ２キャッシュでの動作上の区別と、プロトコルチェック強化の観点から、要求コアがオペランドキャッシュに所持しない状態で発行するストア命令と、要求コアのオペランドキャッシュが共有型で所持する状態で発行するストア命令を区別することが好ましい。以降、要求コアのオペランドキャッシュで所持しない状態で発行されるストア命令をＳＴ１、要求コアのオペランドキャッシュが共有型で所持する状態で発行するストア命令をＳＴ２として説明する。
【００８５】
図９に示した第１処理判定部２５の動作では、ストア命令ＳＴ１とストア命令ＳＴ２を区別せず、ステータスコード５２がＣＬＮの場合は所持コアが要求コアであっても無効化処理を行なうこととしていた。
【００８６】
一方、変形例ではストア命令ＳＴ１とＳＴ２とを区別して制御するため、図１０に示すようにＬ２キャッシュタグに制御フラグ５３を追加して設ける。この制御フラグ５３は、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴの情報を格納する１ビットのデータである。
【００８７】
ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴは、全てのプロセッサコアの命令キャッシュタグのヒットのＯＲで、Ｌ２キャッシュタグ２２の更新時に、Ｌ１キャッシュタグ２１から得られる全プロセッサコアの命令キャッシュタグのヒットのＯＲで更新して管理する。この制御フラグ５３はＯＲなので、コア数に依存せず１ビットでよい。
【００８８】
図１１に示すように、ステータスコード５２には変化が無く、ステータスコードの値が「ＣＬＮ」である場合に、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴが有効である。
【００８９】
図１２は、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴを使用する場合の第１処理判定部２５による判定処理の説明図である。ロード命令とストア命令ＳＴ１の場合の処理判定は図９の場合と同様である。図９の例と処理が変化するのは、ストア命令ＳＴ２においてステータスコード５２が「ＣＬＮ」のケースである。
【００９０】
ストア命令ＳＴ２においてステータスコード５２が「ＣＬＮ」であることは、何れかのプロセッサコアが単独で所持していることを示す。したがって、ストア命令ＳＴ２でステータスコード５２が「ＣＬＮ」である状況は、要求コアのオペランドキャッシュが共有型で所持しているケースも含む。要求コアのオペランドキャッシュが共有型で所持しているケース以外は図９の処理判定と同一の動作となる。
【００９１】
図１２に示した処理判定では、ストア命令ＳＴ２でステータスコード５２が「ＣＬＮ」の場合、既に説明した制御フラグｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴに加え、制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬを使用する。制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬは、ヒット情報ではない。制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬは、要求元コアのオペランドキャッシュに、対象アドレスとＬ１インデックスが同一のエントリが登録されているかを示すＶＡＬＩＤ情報である。このため、図１２の判定処理ではアドレスの比較を必要とせず、要求コアのＬ１キャッシュタグの写しから直ちに判定結果を得ることができる。
【００９２】
ストア命令ＳＴ２が発行され、Ｌ２キャッシュメモリでの状態がＣＬＮであるならば、所持コアは要求コアである。この場合、要求コアにおいて、命令キャッシュのみ、オペランドキャッシュのみ、あるいは命令・オペランドキャッシュで共有の３つの所持状態がある。加えて、制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬが「１」であれば、先の３つの所持状態は、オペランドキャッシュのみ、命令・オペランドキャッシュで共有の２つの所持状態の何れかとなり、ストア命令ＳＴ２のオペランドとＬ１インデックスが同一のエントリがＬ１キャッシュに登録されていることになる。
【００９３】
Ｌ１キャッシュでは、これから登録しようとするＷＡＹに対して同時期に同じＷＡＹを対象としたリプレース処理や、新規登録処理は発生しない。このため、Ｌ１オペランドキャッシュで共有型にヒットしてストア命令ＳＴ２が発行され、ｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬが「１」であれば、ストア命令のオペランドはＬ１キャッシュメモリに登録済みである。
【００９４】
言い換えれば、ストア命令ＳＴ２でｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬが「１」であれば、比較部２４による比較を行なうことなくオペランドキャッシュのヒットが確定する。
【００９５】
さらに制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬが「１」である場合に、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴが「１」であれば、要求コアの命令・オペランドキャッシュで共有の状態であると特定される。この場合、要求コアに対して命令キャッシュの無効化を行なうことが求められる。
【００９６】
そして制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬが「１」である場合に、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴが「０」であれば、要求コアのオペランドキャッシュのみで所持していると特定される。この場合、所持コアに対する処理が必要ないので要求元のプロセッサコア、すなわち要求コアに即に応答が可能である。
【００９７】
このように、ステータスコードがＣＬＮである、即ち単一のプロセッサコアでキャッシュされていることと、制御フラグｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴ，ｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬを用いる事で、第１処理判定で判定可能なケースを増やすことができる。したがって、新たな制御フラグｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴを１ｂｉｔ追加することで、より詳細な判定が可能となり、レイテンシを向上することができる。
【００９８】
図１３は、制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬを生成する論理回路の具体例である。ＡＮＤ回路６０は、要求コアがプロセッサコアＣ０であり、かつＣｏｒｅ０−Ｌ１Ｄ−ＶＡＬの値が「１」である場合に「１」を出力する。また、ＡＮＤ回路６１は、要求コアがプロセッサコアＣ１であり、かつＣｏｒｅ１−Ｌ１Ｄ−ＶＡＬの値が「１」である場合に「１」を出力する。
【００９９】
プロセッサコアＣ２〜Ｃ７についても同様にＡＮＤ回路６２〜６７が対応する。ＡＮＤ回路６２〜６６については図示を省略するが、ＡＮＤ回路６７は、要求コアがプロセッサコアＣ７で、かつＣｏｒｅ７−Ｌ１Ｄ−ＶＡＬの値が「１」である場合に「１」を出力する。このＡＮＤ回路６０〜６７の出力をＯＲ回路６８にかけたものが制御フラグｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬとなる。
【０１００】
図１４は、制御フラグｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴを生成する論理回路の具体例である。Ｃｏｒｅ０−Ｌ１Ｉ−ＨＩＴからＣｏｒｅ７−Ｌ１Ｉ−ＨＩＴまでの信号をＯＲ回路６９に入力することで、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴが得られる。
【０１０１】
図１５は、第１処理判定部２５によるストア命令に対する判定を実現する回路の説明図である。図１５に示したように、ＡＮＤ回路７０は、ｓｒｃＣｏｒｅ−Ｌ１Ｄ−ＶＡＬが「１」、ステータスコードが「ＣＬＮ」、ｓｏｍｅＣｏｒｅ−Ｌ１Ｉ−ＨＩＴが「０」の時に「１」を出力する。ＯＲ回路７１は、ステータスコードが「ＩＮＶ」であるか、もしくはＡＮＤ回路７０が「１」を出力している場合に「１」を出力する。
【０１０２】
そして、ＡＮＤ回路７２は、命令がストアＳＴであり、ＯＲ回路７１の出力が「１」である場合に「１」を出力する。ＡＮＤ回路７２の出力が「１」であることは、要求コアに対する処理を行なうべきであることを意味する。
【０１０３】
また、ＡＮＤ回路７３は、命令がストアＳＴであり、ＯＲ回路７１の出力が「０」である場合に「１」を出力する。ＡＮＤ回路７３の出力が「１」であることは、所持コアに対する処理を行なうべきであることを意味する。
【０１０４】
図１６は、要求コアに対する処理のリトライ判定を行なう論理回路の具体例である。図１６に示した回路は、第２処理判定部２６の内部に設けられる。図１６に示したように、ＡＮＤ回路８０は、要求コアがプロセッサコアＣ０であり、かつＣｏｒｅ０の資源がＢＵＳＹである場合に「１」を出力する。また、ＡＮＤ回路８１は、要求コアがプロセッサコアＣ１であり、かつＣｏｒｅ１の資源がＢＵＳＹである場合に「１」を出力する。
【０１０５】
プロセッサコアＣ２〜Ｃ７についても同様にＡＮＤ回路８２〜８７が対応する。ＡＮＤ回路８２〜８６については図示を省略するが、ＡＮＤ回路８７は、要求コアがプロセッサコアＣ７であり、かつＣｏｒｅ７の資源がＢＵＳＹである場合に「１」を出力する。
【０１０６】
ＯＲ回路８８は、ＡＮＤ回路８０〜８７のいずれかが「１」であれば「１」を出力する。そして、ＡＮＤ回路８９は、処理が要求コアに対する処理であり、かつＯＲ回路８８の出力が「１」である場合に「１」を出力する。ＡＮＤ回路８９の出力が「１」であることは、リトライが必要であることを意味する。
【０１０７】
図１７は、所持コアに対する処理のリトライ判定を行なう論理回路の具体例である。図１７に示した回路は、第２処理判定部２６の内部に設けられる。図１７に示したように、ＡＮＤ回路９０は、Ｃｏｒｅ０−Ｌ１−ＨＩＴが「１」であり、かつＣｏｒｅ０の資源がＢＵＳＹである場合に「１」を出力する。また、ＡＮＤ回路９１は、Ｃｏｒｅ１−Ｌ１−ＨＩＴが「１」であり、かつＣｏｒｅ１の資源がＢＵＳＹである場合に「１」を出力する。
【０１０８】
プロセッサコアＣ２〜Ｃ７についても同様にＡＮＤ回路９２〜９７が対応する。ＡＮＤ回路９２〜９６については図示を省略するが、ＡＮＤ回路９７は、Ｃｏｒｅ７−Ｌ１−ＨＩＴが「１」であり、かつＣｏｒｅ７の資源がＢＵＳＹである場合に「１」を出力する。
【０１０９】
ＯＲ回路９８は、ＡＮＤ回路９０〜９７のいずれかが「１」であれば「１」を出力する。そして、ＡＮＤ回路９９は、処理が所持コアに対する処理であり、かつＯＲ回路９８の出力が「１」である場合に「１」を出力する。ＡＮＤ回路９９の出力が「１」であることは、リトライが必要であることを意味する。
【０１１０】
以上説明してきたように本実施例にかかるキャッシュメモリ制御装置およびキャッシュメモリ制御方法では、対象アドレスをＬ１キャッシュメモリに保持するプロセッサコアが存在するか否かを示すステータスコードをＬ２キャッシュタグに付す。そして、第１処理判定部によって所持コアに対する処理が必要であるか否かを判定し、所持コアに対する処理が必要である場合にＬ１キャッシュタグを用いて所持コアを特定する。
【０１１１】
したがって、本実施例にかかるキャッシュメモリ制御装置は、所持コアに対する処理が必要でなければＬ１キャッシュタグの検索結果を待つことなくリトライの有無を判定することができる。また、所持コアに対する処理が必要である場合も、従来ではＳＴ２の例で示したような正確な判定をするためにはＬ１キャッシュヒットを待たないと判定できなかったが、Ｌ１キャッシュヒットを待たずとも判定することができる。そのため、コア数などの増大に影響を受けることなく、またＬ１キャッシュタグとＬ２キャッシュタグの物量を削減しつつレイテンシを向上することかできる。
【符号の説明】
【０１１２】
１  ＣＰＵ
２  メモリ
１０  Ｌ２キャッシュ
１１  キャッシュデータ部
１２  検索部
１３  入出力制御部
２１，３１  Ｌ１キャッシュタグ
２２，３２，３６  Ｌ２キャッシュタグ
２３，２４，３３，３４  比較部
２５  第１処理判定部
２６  第２処理判定部
３５  処理判定部
４１，５１  アドレス
４２，５２  ステータスコード
４３  コア番号
５３  制御フラグ
６０〜６７，７０，７２，７３，８０〜８７，９０〜９７，９９  ＡＮＤ回路
６８，６９，７１，８８，９８  ＯＲ回路
Ｃ０〜Ｃ７  プロセッサコア
Ｃ０−１〜Ｃ７−１  Ｌ１キャッシュ
Ｃ０−２  命令制御部
Ｃ０−３  レジスタ
Ｃ０−４  演算部
【図１】
0005440067.tif 000002
【図２】
0005440067.tif 000003
【図３】
0005440067.tif 000004
【図４】
0005440067.tif 000005
【図５】
0005440067.tif 000006
【図６】
0005440067.tif 000007
【図７】
0005440067.tif 000008
【図８】
0005440067.tif 000009
【図９】
0005440067.tif 000010
【図１０】
0005440067.tif 000011
【図１１】
0005440067.tif 000012
【図１２】
0005440067.tif 000013
【図１３】
0005440067.tif 000014
【図１４】
0005440067.tif 000015
【図１５】
0005440067.tif 000016
【図１６】
0005440067.tif 000017
【図１７】
0005440067.tif 000018