(57)【要約】【課題】不要な命令再実行処理の頻度を低下させた演算処理装置を提供する。【解決手段】複数の処理部の各々が、複数の命令がアウトオブオーダで実行され且つインオーダで解放される命令ポートと、命令ポートに保持されたロード命令が完了し且つ未解放の状態でキャッシュメモリのデータに対する無効化要求を受信し、受信した無効化要求の対象アドレスのインデックス及びウェイＩＤとロード命令の指定アドレスのインデックス及びウェイＩＤとが一致する場合、第１フラグを有効化する第１判定部と、命令ポートに保持されたロード命令についてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきた場合、第２フラグを有効化する第２判定部と、命令ポートに保持された命令の完了時に第１フラグおよび第２フラグがいずれも有効化されている場合、命令ポートにおける次の命令からの再実行を指示する命令再実行判定部とを含む。【選択図】図１４
2014006807.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理部を含み、
前記複数の処理部の各々が、
演算器と、
キャッシュメモリと、
前記キャッシュメモリのデータにアクセスする複数の命令を保持し、前記複数の命令がアウトオブオーダで実行され且つインオーダで解放される命令ポートと、
前記命令ポートに保持されたロード命令が完了し且つ未解放の状態で、前記キャッシュメモリのデータに対する無効化要求を受信し、受信した前記無効化要求の対象アドレスのキャッシュインデックス及びウェイＩＤと前記ロード命令の指定アドレスのキャッシュインデックス及びウェイＩＤとが一致する場合、第１フラグを有効化する第１判定部と、
前記命令ポートに保持されたロード命令についてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきた場合、第２フラグを有効化する第２判定部と、
前記命令ポートに保持された命令の完了時に前記第１フラグおよび前記第２フラグがいずれも有効化されている場合、前記命令ポートにおける次の命令からの再実行を指示する命令再実行判定部と
を含む演算処理装置。
【請求項２】
前記無効化要求の前記対象アドレスは物理アドレスであり、前記命令ポートに保持されるロード命令の指定アドレスは論理アドレスであり、前記無効化要求の前記対象アドレスを物理アドレスから論理アドレスに変換せずに前記第１判定部の判定を行う、請求項１記載の演算処理装置。
【請求項３】
前記命令ポートに保持されるロード命令についてキャッシュヒットすると、キャッシュヒットした前記ロード命令に対して前記命令ポートにウェイＩＤが登録される、請求項１又は２記載の演算処理装置。
【請求項４】
前記命令ポートに保持される各命令毎に、前記第１フラグおよび前記第２フラグが保持されている、請求項１乃至３何れか一項記載の演算処理装置。
【請求項５】
キャッシュメモリと、前記キャッシュメモリのデータにアクセスする複数の命令を保持し、前記複数の命令がアウトオブオーダで実行され且つインオーダで解放される命令ポートとを含み、前記キャッシュメモリの制御を行なうキャッシュメモリ制御装置であって、
前記命令ポートに保持されたロード命令が完了し且つ未解放の状態で、前記キャッシュメモリのデータに対する無効化要求を受信し、受信した前記無効化要求の対象アドレスのキャッシュインデックス及びウェイＩＤと前記ロード命令の指定アドレスのキャッシュインデックス及びウェイＩＤとが一致する場合、第１フラグを有効化する第１判定部と、
前記命令ポートに保持されたロード命令についてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきた場合、第２フラグを有効化する第２判定部と、
前記命令ポートに保持された命令の完了時に前記第１フラグおよび前記第２フラグがいずれも有効化されている場合、前記命令ポートにおける次の命令からの再実行を指示する命令再実行判定部と
を含むキャッシュメモリ制御装置。
【請求項６】
前記無効化要求の前記対象アドレスは物理アドレスであり、前記命令ポートに保持されるロード命令の指定アドレスは論理アドレスであり、前記無効化要求の前記対象アドレスを物理アドレスから論理アドレスに変換せずに前記第１判定部の判定を行う、請求項５記載の演算処理装置。
【請求項７】
前記命令ポートに保持されるロード命令についてキャッシュヒットすると、キャッシュヒットした前記ロード命令に対して前記命令ポートにウェイＩＤが登録される、請求項５又は６記載の演算処理装置。
【請求項８】
前記命令ポートのエントリに、前記第１フラグおよび前記第２フラグが保持されている、請求項５乃至７何れか一項記載のキャッシュメモリ制御装置。
【請求項９】
キャッシュメモリのデータにアクセスする複数の命令を保持し、前記複数の命令がアウトオブオーダで実行され且つインオーダで解放される命令ポートに保持されたロード命令が完了し且つ未解放の状態で、前記キャッシュメモリのデータに対する無効化要求を受信し、受信した前記無効化要求の対象アドレスのキャッシュインデックス及びウェイＩＤと前記ロード命令の指定アドレスのキャッシュインデックス及びウェイＩＤとが一致する場合、第１フラグを有効化し、
前記命令ポートに保持されたロード命令についてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきた場合、第２フラグを有効化し、
前記命令ポートに保持された命令の完了時に前記第１フラグおよび前記第２フラグがいずれも有効化されている場合、前記命令ポートにおける次の命令からの再実行を指示する
各段階を含むキャッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、演算処理装置、キャッシュメモリ制御装置及びキャッシュメモリの制御方法に関する。
【背景技術】
【０００２】
現在主流となっている演算処理装置としてのプロセッサでは、従来より高い並列度を維持して命令を実行するためにアウトオブオーダ処理を採用している。アウトオブオーダ処理とは、キャッシュミスなどの理由で、ある命令のデータの読出が滞っている間に後続の命令のデータの読出を先に実行し、その後で滞っていた命令のデータの読出を実行する処理である。
【０００３】
しかし、このような処理を行なうと、後から実行された先行するデータの読出が最新のデータを取り出し、先に実行された後続するデータの読出が古いデータを読み出す場合が発生し、ＴＳＯ（Total Store Ordering）に違反する場合が出てくる。
【０００４】
ここで、ＴＳＯとは、データの読出結果がデータの書込順序を正しく反映することである。ＴＳＯは、実行順序の一貫性を保証するものであり、メモリアクセスを行なう命令の順序に対し、実際にメモリにデータを書き込む順序の入れ替えの制約を定めたメモリオーダリングの一つである。ＴＳＯのルールは次の３点である。
・ロード命令は、先行するロード命令を追い越して処理してはいけない。
・ストア命令は、先行するロード命令および先行するストア命令を追い越して処理してはいけない。
・アトミックロードストア命令は、先行するロード命令および先行するストア命令を追い越して処理してはいけない。
【０００５】
つまり、図１に示すように、ロード命令（load）は、先行するストア命令（store）を追い越して処理してもよいが、その他のパターンの追い越しを禁止される。ただし、ロード命令の対象データが先行するストア命令の対象データに含まれている場合は、当該ロード命令はそのストア命令のデータをロードしなければならないのは当然である。
【０００６】
ここで、メモリアクセスをアウトオブオーダで処理するプロセッサ（ＣＰＵもしくはＣＰＵ−ＣＯＲＥ）においては、ロード命令が先行するロード命令を追い越して先にデータを命令制御部に返すことを可能にする。図２に示すように、命令制御部１００と、この命令制御部１００からのメモリアクセス要求に応じてキャッシュメモリに対するアクセスを行なう１次キャッシュ制御部２００とを含む演算処理装置では、以下のような処理が行なわれる。例えば、先行するロード命令（load-A）の対象データがキャッシュミスし、後続のロード命令（load-B）の対象データがキャッシュヒットする場合、１次キャッシュ制御部２００は、先行するロード命令（load-A）を追い越して後続のロード命令（load-B）のデータを命令制御部１００に返すことになる。
【０００７】
しかし、実際の命令実行は命令の順序に従って実行される。従って、ロードデータを順不同で読み出したとしても、ロード命令とストア命令との間のＴＳＯを守っていれば、シングルプロセッサ構成の演算処理装置におけるソフトウエアからは、ＴＳＯが守られているように見える。ところが、マルチプロセッサ構成の演算処理装置では、後続ロード命令の対象データを他プロセッサがストア命令により無効化した場合、ソフトウエアからロード命令間のＴＳＯ違反が見えるケースがある。即ち、後続ロード命令の読出しデータがステア命令実行前の古いデータであるのにも関わらず、先行ロード命令の読出しデータはストア命令実行後の新しいデータとなり、ＴＳＯのロード命令間の追い越し禁止に違反する結果となるケースがある。
【０００８】
これを回避するためには、ＴＳＯを違反する可能性がある場合、後続ロード命令を再実行すればよい。つまり、先行するロード命令を追い越してデータを返した後続ロード命令があるとき、その後続ロード命令の対象データを他プロセッサが使用するために無効化した場合には、その旨を自プロセッサが記憶しておく。そして、先行するロード命令がデータを読み出したときに、ＴＳＯ違反の可能性があることを命令制御部１００に通知し、その次の命令（上記後続ロード命令）以降の命令を再実行すればよい。
【０００９】
しかしながら、無効化要求の有無に基づいてＴＳＯ違反の可能性の有無を判断する場合、本来はＴＳＯ違反ではないのにも関わらず、ＴＳＯ違反の可能性有り、と判断されてしまう場合がある。そのように判断されてしまう場合、不要な命令再実行処理を行うこととなるため、大きな性能低下の要因となる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第４１８０５６９号
【特許文献２】特開２０１１−１３４２０５号公報
【特許文献３】特開平６−２１４８７５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
以上を鑑みると、不要な命令再実行処理の頻度を低下させた演算処理装置が望まれる。
【課題を解決するための手段】
【００１２】
演算処理装置は、複数の処理部を含み、前記複数の処理部の各々が、演算器と、キャッシュメモリと、前記キャッシュメモリのデータにアクセスする複数の命令を保持し、前記複数の命令がアウトオブオーダで実行され且つインオーダで解放される命令ポートと、前記命令ポートに保持されたロード命令が完了し且つ未解放の状態で、前記キャッシュメモリのデータに対する無効化要求を受信し、受信した前記無効化要求の対象アドレスのキャッシュインデックス及びウェイＩＤと前記ロード命令の指定アドレスのキャッシュインデックス及びウェイＩＤとが一致する場合、第１フラグを有効化する第１判定部と、前記命令ポートに保持されたロード命令についてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきた場合、第２フラグを有効化する第２判定部と、前記命令ポートに保持された命令の完了時に前記第１フラグおよび前記第２フラグがいずれも有効化されている場合、前記命令ポートにおける次の命令からの再実行を指示する命令再実行判定部とを含む。
【発明の効果】
【００１３】
少なくとも１つの実施例によれば、不要な命令再実行処理の頻度を低下させた演算処理装置を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】一般的なＴＳＯのルールを示す図である。
【図２】アウトオブオーダ処理を行うプロセッサにおけるロード命令どうしの追い越し例を示す図である。
【図３】マルチプロセッサ構成におけるＴＳＯ違反の一例を説明するための図である。
【図４】ＴＳＯ違反を回避する機能を有する１次キャッシュ制御部の構成の一例を示すブロック図である。
【図５】１次キャッシュ制御部におけるフェッチポートに係る構成の一例を示すブロック図である。
【図６】１次キャッシュ制御部におけるフェッチポートにおける各エントリのフォーマットの一例を示す図である。
【図７】ＲＩＭ判定部による判定動作を説明するためのフローチャートである。
【図８】ＲＩＦ判定部による判定動作を説明するためのフローチャートである。
【図９】命令再実行判定部の動作例を説明するためのフローチャートである。
【図１０】１次キャッシュ制御部による、マルチプロセッサ構成におけるＴＳＯ違反回避動作の一例を説明するための図である。
【図１１】１次キャッシュ制御部による、マルチプロセッサ構成におけるＴＳＯ違反回避動作の一例を説明するための図である。
【図１２】Ｎウェイ・セットアソシアティブ方式のキャッシュメモリの構成の一例を示す図である。
【図１３】演算処理装置の構成の一例を示すブロック図である。
【図１４】１次キャッシュ制御部及び２次キャッシュ制御部の構成の一例を示す図である。
【図１５】ウェイＩＤの設定方法を示すフローチャートである。
【図１６】ＲＩＭ判定処理の一例を示すフローチャートである。
【図１７】無効化処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１５】
図３は、マルチプロセッサ構成（マルチコア構成）の演算処理装置においてソフトウエアからロード命令間のＴＳＯ違反が見えるケースの一例を示す図である。図３に示す演算処理装置において、ＣＰＵ−α（ＣＰＵコア）及びＣＰＵ−β（ＣＰＵコア）はそれぞれ、命令制御部１００ａ及び１００ｂ、並びに１次キャッシュ制御部２００ａ及び２００ｂを含む。さらに、ＣＰＵ−α及びＣＰＵ−βは、下位階層の２次キャッシュ制御部３００を共用している。図３中、ＦＰ（Fetch Port）２１０ａ及び２１０ｂは、キャッシュメモリのデータにアクセスする命令を保持する命令ポートであり、このＦＰにおいては、ＦＰ番号０，１で特定される各エントリに、各命令が保持される。なお以下において、命令制御部１００ａ及び１００ｂ等を参照するときに、ＣＰＵ−α側とＣＰＵ−β側とを区別する必要がないときは、末尾のアルファベットａ，ｂ等を削除して、先頭の番号（「１００」等）のみを用いることがある。
【００１６】
図３において、キャッシュメモリ（cache）２１２ａの領域（インデックス）Ａ，Ｂのデータに対し、プロセッサＣＰＵ−αではストア命令store-A，store-Bがこの順で発行される。またキャッシュメモリ（cache）２１２ｂの領域（インデックス）Ａ，Ｂのデータに対し、プロセッサＣＰＵ−βではロード命令load-B，load-Aがこの順で発行される。
【００１７】
図３（ａ）に示すように、ＣＰＵ−αの１次キャッシュ制御部２００ａでは、store-A，store-Bがいずれもキャッシュミスし、２次キャッシュ制御部３００にデータが要求される。また、ＣＰＵ−βの１次キャッシュ制御部２００ｂでは、load-Bがキャッシュミスする。キャッシュミスによりload-Bの対象データを命令制御部１００ｂに返せない間に、load-Aがキャッシュヒットして、load-Bを追い越して対象データdata-A（old）が命令制御部１００ｂに返される。load-Bがキャッシュミスした領域Ｂのデータについては、２次キャッシュ制御部３００にデータ要求がされる。
【００１８】
次に図３（ｂ）に示すように、先程のＣＰＵ−αからの２次キャッシュ制御部３００へのstore-Aに関するデータ要求に応答して、２次キャッシュ装置３００からＣＰＵ−βのキャッシュメモリ２１２ｂに対する無効化要求が発行される。即ち、ＣＰＵ間において排他型でデータを保持するという要件を満たすため、ＣＰＵ−αに渡すべき領域Ａのデータについては、ＣＰＵ−β側において無効化して使用不可とする。この無効化要求の後、ＣＰＵ２つのストア命令store-A，store-Bがこの順で処理される。
【００１９】
その後、図３（ｃ）に示すように、ＣＰＵ−βに対しＣＰＵ−αからストアを完了した領域Ｂのデータが送られる。ＣＰＵ−βでは、load-Bが処理され、ＣＰＵ−αによりストアされた後のデータdata-B（new）が命令制御部１００ｂに返される。
【００２０】
この結果、ＣＰＵ−αでは、２つのストア命令store-A，store-Bがこの順に発行されたにも関わらず、ＣＰＵ−βでは、load-Bについてストア後データdata-B（new）が返される一方、load-Aについてストア前データdata-A（old）が返されることになる。つまり、ＣＰＵ−βでの命令処理は、結果として、ＴＳＯのロード命令間の追い越し禁止に違反したことになる。
【００２１】
これを回避するためには、ＴＳＯを違反する可能性がある場合、後続ロード命令を再実行する。つまり、先行するロード命令を追い越してデータを返した後続ロード命令があるとき、その後続ロード命令の対象データを他プロセッサが使用するために無効化した場合には、その旨を自プロセッサが記憶しておく。そして、先行するロード命令がデータを読み出したときに、ＴＳＯ違反の可能性があることを命令制御部１００に通知し、その次の命令（上記後続ロード命令）以降の命令を再実行する。
【００２２】
例えば、ＣＰＵ−βにおいてload-Bを追い越してload-Aが処理された後、領域Ａのデータに対する無効化処理が要求された場合に、その旨を示す信号（フラグ）が有効化される。その後、load-Bが処理されデータが返されるときにその信号（フラグ）が有効であれば、ロード命令間のＴＳＯ違反の可能性があることが命令制御部１００ｂに通知される。この通知に応答して、命令制御部１００ｂがload-Aを再発行することで、その後にload-Aが返すデータはＣＰＵ−αでのstore-Aが反映されることになり、ＴＳＯ違反が回避される。
【００２３】
以下においては、まず、命令再実行によりＴＳＯ違反を回避する構成の基本的な動作について説明する。
【００２４】
図４は、ＴＳＯ違反を回避する機能を有する１次キャッシュ制御部２００の構成の一例を示すブロック図である。図５は、図４に示す１次キャッシュ制御部２００におけるフェッチポート（ＦＰ）２１０に係る構成の一例を示すブロック図である。図６は、図４に示す１次キャッシュ制御部２００におけるＦＰ２１０における各エントリのフォーマットの一例を示す図である。
【００２５】
命令制御部１００からのキャッシュアクセスの要求は、一旦、１次キャッシュ制御部２００におけるＦＰ２１０に保持される。このＦＰ２１０に係る構成の一例が図５に示される。各要求は、プログラム上の順番に従ってＦＰ２１０の各エントリに割り当てられてエントリに格納され、ＦＰ２１０の各エントリは循環して使用される。例えばＦＰ２１０が１６個のエントリを有している場合、命令制御部からの要求は、ＦＰ＃０から順に割り当てられ、ＦＰ＃１５の次はＦＰ＃０に割り当てられることになる。なお、ＦＰ＃ｎ（ｎ＝０〜１５）は、ＦＰ２１０におけるエントリの一つを特定するもので、ＦＰ番号という場合もある。
【００２６】
ＦＰ２１０には、図５に示すように、プライオリティ部２１１が付設されている。このプライオリティ部２１１は、ＦＰ２１０内のどのエントリの要求（request#0−#15）を処理するかについて調停するものである。このプライオリティ部２１１は、上述のＴＳＯを保証するために、命令処理順の後続ストア命令が先行ロード命令を追い越さないこと、または、後続ストア命令が先行ストア命令を追い越さないことを保証し、後続ロード命令が先行ロード命令を追い越すことは可能にする。その上で、プライオリティ部２１１は、アウトオブオーダつまり順不同にＦＰ２１０のエントリ（request#n）を一つずつ選択し、その命令の処理を実行させる。また、ＦＰ２１０の各エントリは、一番古いエントリから順にインオーダで解放される。ここで、有効なエントリのうち最も古いエントリはFetch-Port-Top-of-Queue（ＦＰ−ＴＯＱ）によって指示される。つまり、ＦＰ−ＴＯＱで指示されていないＦＰ２１０のエントリは、そのエントリにおける命令の処理を完了しても直ぐには解放されない。そして、ＦＰ−ＴＯＱで指示されたエントリにおける命令の処理を完了した時点で、ＦＰ−ＴＯＱで指示されたエントリから古い順に処理済みのエントリが解放される。
【００２７】
ＦＰ２１０の各エントリのフォーマットつまり各エントリの内容が図６に示される。この図６に示すように、ＦＰ２１０の各エントリには"valid","status","opcode","address","ＲＩＭ","ＲＩＦ"が保持される。"valid"は、そのエントリが有効であるか否かを示すフラグである。"status"は、そのエントリに保持されたキャッシュアクセス要求の処理が完了しているか否かを示すフラグである。"opcode"は、そのエントリに保持されたキャッシュアクセスの要求種別（load又はstore等）を示す。"address"は、そのエントリに保持されたキャッシュアクセスの要求アドレスを示す。"ＲＩＭ"および"ＲＩＦ"は、ＴＳＯ保証制御に使用するフラグである。ＲＩＭフラグは、あるエントリに保持されたロード命令によりその対象データを演算器４００に転送した後、そのエントリが解放されるまでの間に受信した無効化要求によりその対象データがキャッシュメモリ２１２から追い出された場合、有効化される。このＲＩＭフラグの有効化は、後述のＲＩＭ判定部２１４によって行われる。ＲＩＭフラグは「第１フラグ」の一例である。ＲＩＦフラグは、あるエントリに保持されたロード命令がキャッシュミスした後に、そのロード命令の対象データが転送されてきた場合、後述のＲＩＦ判定部２１５によって有効化される。ＲＩＦフラグは「第２フラグ」の一例である。
【００２８】
このような構成のＦＰ２１０やプライオリティ部２１１を有する１次キャッシュ制御部２００の詳細な構成および動作について、図４を参照しながら説明する。この図４に示す１次キャッシュ制御部２００は、ＴＳＯを保証すべく命令再実行要求を実現するための構成を有するものであり、より具体的には、図３（ａ）〜図３（ｃ）に示すＴＳＯ違反を回避する機能を有している。
【００２９】
図４に示すように、１次キャッシュ制御部２００は、命令制御部１００や演算器４００と接続されるとともに、２次キャッシュ制御部３００と接続されている。１次キャッシュ制御部２００は、図５を参照しながら上述したＦＰ２１０やプライオリティ部２１１の他に、キャッシュメモリ（cache ＲＡＭ）２１２，アクセス調停部２１３，ＲＩＭ判定部２１４，ＲＩＦ判定部２１５および命令再実行判定部２１６を含む。なお、図４では、便宜上、複数エントリからなるＦＰ２１０のうちの１エントリのみを図示し、プライオリティ部２１１の図示を省略している。
【００３０】
プライオリティ部２１１（図５参照）は、ＦＰ２１０の各エントリに保持される要求（命令）の一つを選択し、選択した要求を処理すべくキャッシュメモリ２１２にアクセスする。その際、アクセス調停部２１３は、プライオリティ部２１１が選択した要求と２次キャッシュ制御部３００から受信したデータ登録要求や無効化要求等とについて、キャッシュメモリ２１２に対するアクセスの調停を行なう。このアクセス調停部２１３での調停により、ＦＰ２１０からの要求が優先権を獲得すると、その要求を処理するためのキャッシュメモリ２１２に対するアクセスが実行される。その要求が例えばロード要求である場合、そのロード要求の対象データについてキャッシュメモリ２１２の検索が実行され、キャッシュヒットすれば該当データが演算器４００に転送される。一方、キャッシュミスすれば、該当データの転送要求が２次キャッシュ制御部４００に対して発行される。
【００３１】
１次キャッシュ制御部２００は、該当データの転送要求に対する２次キャッシュ制御部３００からのデータ転送の応答を受信すると、該当データの登録要求（ｄａｔａ登録要求）をアクセス調停部２１３に送る。そして、アクセス調停部２１３での調停により、該当データの登録要求が優先権を獲得すると、該当データがキャッシュメモリ２１２に登録される。これと同時に、２次キャッシュ制御部３００からの該当データの登録要求に係る情報は、ＲＩＦ判定部２１５に送られる。このＲＩＦ判定部２１５は、登録要求に係る情報に基づき、図８に示すフローチャート（ステップＳ２１〜Ｓ２４）に従って、ＦＰ２１０のエントリのＲＩＦフラグを有効化するか否かの判定を行なう。
【００３２】
つまり、キャッシュメモリ２１２への登録データが２次キャッシュ制御部３００から転送されてくると（ステップＳ２１）、ＲＩＦ判定部２１５は、ＦＰ２１０の全てのエントリを検索する（ステップＳ２２）。そして、ＲＩＦ判定部２１５は、「valid＝１」のエントリ即ち有効なエントリがＦＰ２１０に存在するか否かを判定する（ステップＳ２３）。有効なエントリがＦＰ２１０に存在する場合（ＹＥＳルート）、ＦＰ−ＴＯＱが指示するエントリから有効なエントリまでのＦＰ２１０の全てのエントリについてＲＩＦフラグを"１"にする（ステップＳ２４）。換言すると、ＦＰ２１０における、あるエントリに保持されたロード命令がキャッシュミスした後に、そのロード命令の対象データが２次キャッシュ制御部３００から転送されてきた場合、ＲＩＦ判定部２１５は、対象となるエントリのＲＩＦフラグを有効化する。なお、有効なエントリがＦＰ２１０に存在しない場合（ステップＳ２３のＮＯルート）、ＲＩＦ判定部２１５は、ＲＩＦ判定処理を終了する。
【００３３】
図４を再び参照し、１次キャッシュ制御部２００は、２次キャッシュ制御部３００から、キャッシュメモリ２１２に対する無効化要求を受信すると、その無効化要求をアクセス調停部２１３に送る。そして、アクセス調停部２１３での調停により、２次キャッシュ制御部３００からの無効化要求が優先権を獲得すると、キャッシュメモリ２１２の該当データの無効化が行なわれる。これと同時に、２次キャッシュ制御部３００からの無効化要求に係る情報は、ＲＩＭ判定部２１４に送られる。このＲＩＭ判定部２１４は、無効化要求に係る情報に基づき、図７に示すフローチャート（ステップＳ１１〜Ｓ１５）に従って、ＦＰ２１０のエントリのＲＩＭフラグを有効化するか否かの判定を行なう。
【００３４】
つまり、キャッシュメモリ２１２に対する無効化要求を２次キャッシュ制御部３００から受信すると（ステップＳ１１）、ＲＩＭ判定部２１４は、ＦＰ２１０の全てのエントリを検索する（ステップＳ１２）。そして、ＲＩＭ判定部２１４は、「valid＝１」且つ「status＝完了」且つ「opcode＝ロード系」のエントリがＦＰ２１０に存在するか否かを判定する（ステップＳ１３）。即ち、ＦＰ２１０に保持されたロード命令に応じて対象データがキャッシュメモリ２１２から演算器４００に転送された後、そのエントリが解放されるまでの間に、キャッシュメモリ２１２の対象データに対する無効化要求を受信したか否かを判定する。このようなエントリがＦＰ２１０に存在する場合、ステップＳ１３のＹＥＳルートに進む。ＲＩＭ判定部２１４は、該当エントリのアドレスのキャッシュインデックス部分と、２次キャッシュ制御部３００から受信した無効化要求の対象アドレスのキャッシュインデックス部分とが一致するか否かを判定する（ステップＳ１４）。双方のアドレスが一致する場合（Ｓ１４のＹＥＳルート）、ＲＩＭ判定部２１４は、ＦＰ−ＴＯＱが指示するエントリから有効なエントリまでの全てのエントリについてＲＩＭフラグを"１"にする（ステップＳ１５）。換言すると、ＦＰ２１０における、あるエントリに保持されたロード命令によりその対象データを演算器４００に転送した後、そのエントリが解放されるまでの間に無効化要求によりその対象データがキャッシュメモリ２１２から追い出されることがある。そのような場合、ＲＩＭ判定部２１４は、対応するエントリのＲＩＭフラグを有効化する。なお、対象エントリがＦＰ２１０に存在しない場合（ステップＳ１３のＮＯルートまたはステップＳ１４のＮＯルート）、ＲＩＭ判定部２１４は、ＲＩＭ判定処理を終了する。
【００３５】
そして、ＦＰ２１０の各エントリにおける命令の処理を完了すると、命令再実行判定部２１６は、当該エントリのＲＩＭフラグおよびＲＩＦフラグを参照し、図９に示すフローチャート（ステップＳ３１〜Ｓ３３）に従って、当該エントリにおける命令の再実行を行なうか否かの判定を行なう。つまり、ＦＰ２１０のあるエントリ（ＦＰ＃ｎ）における要求の処理を完了すると（ステップＳ３１）、命令再実行判定部２１６は、ＦＰ＃ｎのエントリにおけるＲＩＭフラグおよびＲＩＦフラグがいずれも有効化されているか否か、を判定する（ステップＳ３２）。即ち「ＲＩＭ＝１」且つ「ＲＩＦ＝１」であるか否かを判定する（ステップＳ３２）。いずれも有効化されている場合（ＹＥＳルート）、命令再実行判定部２１６は、命令制御部１００に対し、そのエントリに対応する命令の次の命令からの命令再実行を指示すべく、命令再実行要求を発行する。なお、ステップＳ３２でＮＯ判定の場合、命令再実行判定部２１６は、判定処理を終了する。
【００３６】
次に、１次キャッシュ制御部２００が、図３（ａ）〜図３（ｃ）に示すＴＳＯ違反を回避する際の動作、つまりＴＳＯ保証のための命令再実行要求の動作について、図１０（ａ）〜図１０（ｃ）および図１１（ａ），図１１（ｂ）を参照しながら説明する。ここで、図１０（ａ）〜図１０（ｃ）および図１１（ａ），図１１（ｂ）は、図４に示す１次キャッシュ制御部２００による、マルチプロセッサ構成におけるＴＳＯ違反回避動作の一例を説明するための図である。なお、図１０（ａ）〜図１０（ｃ）および図１１（ａ），図１１（ｂ）においても、図３（ａ）〜図３（ｃ）に示すケースと同様にストア命令及びロード命令が発行される。即ち、プロセッサＣＰＵ−αでは、キャッシュメモリ２１２ａの領域Ａ，Ｂのデータに対しストア命令store-A，store-Bがこの順で発行される。またプロセッサＣＰＵ−βでは、キャッシュメモリ２１２ｂの領域Ａ，Ｂのデータに対しロード命令load-B，load-Aがこの順で発行される。
【００３７】
図１０（ａ）に示すように、ＣＰＵ−βにおいて、load-B→load-Aの順でロード命令を処理する際、ＦＰ−ＴＯＱ＝０の場合には、ＦＰ＃０のエントリにload-Bがセットされ、ＦＰ＃１のエントリにload-Aがセットされる。このとき、load-Bはキャッシュミスし、領域Ｂのデータの転送が２次キャッシュ制御部３００に要求されるものとする。一方、load-Aはキャッシュヒットしたとした場合、load-Aはload-Bを追い越し、data-A（old）がキャッシュメモリ２１２ｂから演算器４００（命令制御部１００ｂ）に転送され、load-Aの処理を完了する。また、図１０（ａ）に示すように、ＣＰＵ−αにおいて、store-A→store-Bの順でストア命令を処理する際、ＦＰ＃０のエントリにstore-Aがセットされ、ＦＰ＃１のエントリにstore-Bがセットされる。store-A，store-Bは、いずれもキャッシュミスし、領域Ａ，Ｂのデータの転送が２次キャッシュ制御部３００に要求されるものとする。
【００３８】
このとき、store-Aに対応するデータ（data-A(old)）はＣＰＵ−βに存在しているため、図１０（ｂ）に示すように、２次キャッシュ制御部３００経由でＣＰＵ−βの１次キャッシュ制御部２００ｂに対し無効化要求が発行される。即ち、ＣＰＵ間において排他型でデータを保持するという要件を満たすため、ＣＰＵ−αに渡すべき領域Ａのデータについては、ＣＰＵ−β側において無効化して使用不可とする。そして、図１０（ｂ）に示すように、store-A，store-Bに対応するデータがＣＰＵ−αの１次キャッシュ制御部２００ａに転送されてキャッシュメモリ２１２ａに登録された後、ストア命令store-A，store-Bが実行される。これにより、キャッシュメモリ２１２ａの領域Ａ，領域Ｂが更新される。（data-A(new)，data-B(new)）
また、このとき、図１０（ｂ）に示すように、ＣＰＵ−βの１次キャッシュ制御部２００ｂでは、ＲＩＭ判定部２１４の機能によりＦＰ２１０ｂのエントリのＲＩＭフラグが有効化される。つまり、ＲＩＭ判定部２１４は、ＦＰ＃１における、既に処理完了したロード命令のキャッシュインデックス部分のアドレスと無効化処理要求のキャッシュインデックス部分のアドレスとが一致すると判定する。この判定結果に応じて、他のＣＰＵ（ここではＣＰＵ−α）によってデータ（data-A(old)）が更新される可能性を示すＲＩＭフラグが有効化される。
【００３９】
ＣＰＵ−βにおいてload-Bが要求していた領域ＢのデータはＣＰＵ−αによって保持されているため、図１０（ｃ）に示すように、ＣＰＵ−αからＣＰＵ−βに対しstore-Bによって更新済みのデータ（data-B(new)）が転送される。そして、このデータ（data-B(new)）が、ＣＰＵ−βにおけるキャッシュメモリ２１２ｂの領域Ｂに格納される。このとき、ＣＰＵ−βの１次キャッシュ制御部２００ｂでは、ＲＩＦ判定部２１５の機能によりＲＩＦフラグが有効化される。つまり、ＲＩＦ判定部２１５は、ＦＰ２１０ｂにおける有効な全エントリ（valid＝１の全エントリ）におけるＲＩＦフラグ、即ち、他のＣＰＵ（ここではＣＰＵ−α）からのデータ転送の可能性があることを示すフラグを有効化する。なおＲＩＦフラグは、他のＣＰＵからのデータ転送の有無を示すものであるので、エントリに関連付けた情報である必要はない。例えば、ＦＰのエントリとは独立に、１つのフラグ領域を設けておき、そのフラグ領域にＲＩＦフラグを設定してもよい。また或いは、次に解放されるＦＰ−ＴＯＱのエントリにのみ、ＲＩＦフラグを設定するようにしてもよい。
【００４０】
図１０（ｃ）に示されるように、load-Bに応じて、ＣＰＵ−βのキャッシュメモリ２１２ｂの領域Ｂに格納されたデータ（data-B(new)）が演算器４００（命令制御部１００ｂ）に転送される。このときload-Bの処理を完了する際、命令再実行判定部２１６が、ＦＰ＃０におけるＲＩＭフラグおよびＲＩＦフラグが共に有効な状態になっているか否かをチェックする。図１０（ｃ）に示す例において、これらのフラグは共に有効な状態になっているため、命令再実行判定部２１６は、ＴＳＯ違反の可能性があると判断し、命令制御部１００に対し、命令再実行を要求する。
【００４１】
この命令再実行要求に応じ、図１１（ａ）に示すように、ＣＰＵ−βでは、命令制御部１００によってload-Aが再実行される。つまり、ＦＰ＃０におけるload-Bの次の命令であるＦＰ＃１におけるload-Aが再実行される。しかし、図１１（ａ）ではload-Aは一旦キャッシュミスし、領域Ａへのデータの転送が２次キャッシュ制御部３００に要求される。このとき、load-Aに対応するデータはＣＰＵ−αに存在しているため、図１１（ｂ）に示すように、ＣＰＵ−αからＣＰＵ−βに対しstore-Aによって更新済みのデータ（data-A(new)）が転送される。この転送されたデータ（data-A(new)）が、ＣＰＵ−βにおけるキャッシュメモリ２１２ｂの領域Ａに格納される。そして、この更新済みデータ（data-A(new)）が、演算器４００（命令制御部１００ｂ）に転送される。以上の動作により、図３（ａ）〜図３（ｃ）を参照しながら説明したＴＳＯ違反が解消されることになる。
【００４２】
ところで、図４〜図１１を参照しながら上述した、ＴＳＯ違反を回避する機能を有する１次キャッシュ制御部２００では、以下に説明する状況によって不要な命令再実行要求が発行され、処理性能の低下を招く場合がある。即ち、Ｎウェイ・セットアソシアティブ方式のキャッシュにおいては、同一のキャッシュインデックスに複数Ｎ個のデータが登録されている。この場合、他プロセッサの命令実行に起因して、あるインデックスのあるウェイのデータに対して無効化要求が発生した場合、本来はＴＳＯ違反の可能性があるわけではないにも関わらず、ＴＳＯ違反の可能性有り、と判断されてしまう場合がある。そのように判断されてしまう場合、不要な命令再実行処理を行うこととなるため、大きな性能低下の要因となる。
【００４３】
図１２は、Ｎウェイ・セットアソシアティブ方式のキャッシュメモリの構成の一例を示す図である。図１２において、各行はインデックス０乃至ｉに対応し、各列はＮ個のウェイｗａｙ−０乃至ｗａｙ−Ｎ−１に対応する。１つのインデックスに対応してＮ個のタグが設けられることにより、Ｎ個のデータを格納することが可能となる。
【００４４】
図７のフローチャートに示すように、ＲＩＭフラグを有効にする条件として、load処理完了済みのＦＰエントリが保持しているキャッシュインデックス部分のアドレスと、無効化処理要求のキャッシュインデックス部分のアドレスとの一致を判定している。ここで、Ｎウェイ・セットアソシアティブ方式を採用しているキャッシュにおいては、無効化処理要求の対象となるデータ（例えば図１２のＢ）と同一キャッシュインデックスでキャッシュに登録されているデータはＮ個あることになる。従って、上記インデックス部分のみのアドレスの一致判定では、load処理完了済みデータと同一キャッシュインデックスだが異なるwayに登録されているデータに対する無効化処理要求であっても、ＲＩＭフラグを有効にしてしまうことになる。その結果、不要な命令再実行を要求することとなり、性能低下の要因となる。
【００４５】
例えば、図１０において、キャッシュメモリ２１２ａ及び２１２ｂの領域Ａ及びＢがそれぞれ1つのインデックスであり、各インデックス毎に２つのウェイｗａｙ−０及びｗａｙ−１が設けられているとする。またロード命令load-Aの対象であるデータは、インデックスＡの第1のウェイｗａｙ−０のデータであるとする。更に、図１０（ｂ）でＣＰＵ−βが受信した無効化要求が、インデックスＡの第２のウェイｗａｙ−１のデータに対する無効化を要求するものであるとする。この場合、load-A処理を完了したＦＰ＃1のキャッシュインデックス部のアドレスと無効化要求のキャッシュインデックス部のアドレスとが一致するため、無効化要求受信時に、ＦＰ＃０及びＦＰ＃1のＲＩＭフラグが有効に設定されてしまう。即ち、load-Aのデータは無効化要求の対象でないのにも関わらず、ＲＩＭフラグが有効に設定されてしまう。その後、図１０（ｃ）においてload-Bの処理を完了する際、ＦＰ＃０におけるＲＩＭフラグおよびＲＩＦフラグが共に有効な状態になっているため、ＴＳＯ違反の可能性があると判断され、命令制御部１００に対し命令再実行が要求されることになる。
【００４６】
Ｎウェイ・セットアソシアティブ方式では、ウェイの数が多くなればなるほど、本来は関係のない無効化要求によりＲＩＭフラグが設定される場合が多くなる。即ち、ウェイの数が増えるほど、不要な命令再実行を行う頻度が多くなり、大きな性能低下の要因となってしまう。
【００４７】
以下に、Ｎウェイ・セットアソシアティブ方式において、不要な命令再実行処理の頻度を低下させた演算処理装置について説明する。
【００４８】
図１３は、本実施形態の１次キャッシュ制御部２００Ａを適用される演算処理装置（ＣＰＵ１）の構成の一例を示すブロック図である。なお、図中、既述の符号と同一の符号は同一もしくはほぼ同一の部分を示しているので、その説明は省略する。また、以下の説明でも、ＣＰＵ−αにおける構成要素を特定する際には各符号にａを付す一方、ＣＰＵ−βにおける構成要素を特定する際には各符号にｂを付す。ＣＰＵ−α，ＣＰＵ−βを特定する必要の無い場合には、ａ，ｂを付すことなく符号の表記を行なう。
【００４９】
図１３に示すように、本実施形態の１次キャッシュ制御部２００Ａを適用されるＣＰＵ１は、マルチプロセッサ構成を採用している。つまり、ＣＰＵ１は、２つの処理部としてのＣＰＵ−ＣＯＲＥ１０（ＣＰＵ−αおよびＣＰＵ−β）を含み、これらの２つのＣＰＵ−ＣＯＲＥ１０は、下位階層の２次キャッシュ制御部３００を共用している。また、各ＣＰＵ−ＣＯＲＥ１０は、メモリアクセスをアウトオブオーダで処理するもので、命令制御部１００、演算器としての演算制御部４００および１次キャッシュ制御部２００Ａを含む。さらに、ＣＰＵ１（２次キャッシュ制御部３００）は、システム制御バス２に接続され、メインメモリ等と通信可能に接続されている。なお、各１次キャッシュ制御部２００Ａは１次キャッシュ２１２を含み、２次キャッシュ制御部３００Ａは２次キャッシュ３０１を含む。
【００５０】
図１４は、１次キャッシュ制御部２００Ａ及び２次キャッシュ制御部３００の構成の一例を示す図である。図１４において、他の図と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。なお図１４のキャッシュ制御部において、１次キャッシュ容量が３２ＫＢ(４ウェイ)、ラインサイズが１２８Ｂ、ページサイズが８ＫＢ、メモリ空間が２５６ＴＢを想定している。図１４に示される各アドレスのビット数は、これらのサイズに対応するものとなっている。また図１４において、論理アドレスはvaで示され、物理アドレスはpaで示されている。
【００５１】
なお図１４において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。
【００５２】
図１４の１次キャッシュ制御部２００Ａは、フェッチポート部２０、ＲＩＦ判定部２１、ＲＩＭ判定部２２、アクセス調停部２３、タグ部２４、データ部２５、キャッシュヒット判定部２６、エンコード回路２７、デコード回路２８、及びアドレス変換部２９を含む。１次キャッシュ制御部２００Ａは更に、置換ウェイ判定部３０、データ無効化応答部３１、登録データ転送要求部３２、及び論理回路５０乃至５２を含む。また図１４の２次キャッシュ制御部３００は、登録データ送信部３５、データ無効化要求部３６、データ無効化判定部３７、及び２次キャッシュデータ部３８を含む。
【００５３】
命令制御部１００からのキャッシュアクセスの要求は、一旦、１次キャッシュ制御部２００Ａにおけるフェッチポート部２０に保持される。フェッチポート部２０の機能及び動作は、前述のＦＰ２１０と同様である。フェッチポート部２０は、キャッシュメモリのデータにアクセスする複数の命令を保持し、前記複数の命令がアウトオブオーダで実行され且つインオーダで解放される。具体的には、アクセス調停部２３が、フェッチポート部２０内のどのエントリの要求を処理するかについて調停する。このアクセス調停部２３は、上述のＴＳＯを保証するために、命令処理順の後続ストア命令が先行ロード命令を追い越さないこと、または、後続ストア命令が先行ストア命令を追い越さないことを保証し、後続ロード命令が先行ロード命令を追い越すことは可能にする。その上で、アクセス調停部２３は、アウトオブオーダつまり順不同にフェッチポート部２０のエントリを一つずつ選択し、その命令の処理を実行させる。具体的には、アクセス調停部２３は、フェッチポート部２０に格納される６４ビット幅の論理アドレスva[63:0]のうちの第７ビットから第１２ビットに相当するインデックス部分va[12:7]とopcodeとを、フェッチポート部２０から受け取る。アクセス調停部２３は、選択した実行対象命令のインデックス部分va[12:7]とopcodeとを、タグ部２４及びデータ部２５に供給し、対応するロード命令やストア命令を実行する。
【００５４】
なおアクセス調停部２３は、フェッチポート部２０の命令と２次キャッシュ制御部３００から受信したデータ登録要求や無効化要求等とについて、キャッシュメモリ（タグ部２４及びデータ部２５）に対するアクセスの調停を行なう。このアクセス調停部２３での調停によりある命令又は要求が優先権を獲得すると、その命令又は要求に対応する処理がキャッシュメモリに対して実行される。
【００５５】
フェッチポート部２０の各エントリは、一番古いエントリから順にインオーダで解放される。ここで、有効なエントリのうち最も古いエントリはFetch-Port-Top-of-Queue（ＦＰ−ＴＯＱ）によって指示される。つまり、ＦＰ−ＴＯＱで指示されていないＦＰ２１０のエントリは、そのエントリにおける命令の処理を完了しても直ぐには解放されない。そして、ＦＰ−ＴＯＱで指示されたエントリにおける命令の処理を完了した時点で、ＦＰ−ＴＯＱで指示されたエントリから古い順に処理済みのエントリが解放される。
【００５６】
フェッチポート部２０の各エントリのフォーマットつまり各エントリの内容は、図６に示される内容に加え、ウェイＩＤである"wayid"が付け加えられている。"valid","status","opcode","address","ＲＩＭ","ＲＩＦ"の意味については前述の通りである。但しＲＩＭフラグの有効化は、ＲＩＭ判定部２２により実行される。後述するように、このＲＩＭ判定部２２による有効化処理は図１６に示すものであり、前述のＲＩＭ判定部２１４による処理とは若干異なる。またＲＩＦフラグの有効化は、ＲＩＦ判定部２１により実行される。このＲＩＦ判定部２１による有効化処理は前述のＲＩＦ判定部２１５による処理と同一であり、図８に示すフローチャートの通りであってよい。また命令再実行判定部２１６は、前述のように、図９に示すフローチャートに従って、当該エントリにおける命令の再実行を行なうか否かの判定を行なってよい。
【００５７】
ウェイＩＤ"wayid"は、当該エントリの命令に対応するデータが格納されているウェイのウェイＩＤ（ウェイ番号）を示すデータである。図１４に示す回路では、４ウェイ・セットアソシアティブ方式を想定しているので、ウェイＩＤは、例えば４個のウェイを表現するための２ビット幅であってよい。このウェイＩＤの値"００"、"０１"、"１０"、"１１"により、ｗａｙ０からｗａｙ１までの４つのウェイをそれぞれ特定してよい。
【００５８】
図１５は、ウェイＩＤの設定方法を示すフローチャートである。このフローチャートの処理により、フェッチポート部２０に保持されるロード命令についてキャッシュヒットすると、キャッシュヒットした当該ロード命令に対してフェッチポート部２０にウェイＩＤが登録される。
【００５９】
具体的には、ステップＳ４１で、フェッチポート部２０に保持されるload命令の処理においてタグが一致するか否かを判定する。具体的には、この処理対象のload命令の指定アドレスva[63:0]（ロード対象のデータが格納されているアドレス）のうちのインデックス部分va[12:7]がアクセス調停部２３を介してタグ部２４に供給される。タグ部２４は、供給されたインデックスva[12:7]に対応する４つのウェイのそれぞれのタグ（pa_w0[47:13]等）を、キャッシュヒット判定部２６に供給する。また上記の処理対象のload命令の指定アドレスva[63:0]のうちインデックス部分va[12:7]より上位の部分va[63:13]が、アドレス変換部２９に供給される。アドレス変換部２９は、供給された論理アドレスを物理アドレスに変換し、その一部pa[47:13]をキャッシュヒット判定部２６に供給する。キャッシュヒット判定部２６は、タグ部２４から供給された４つのウェイのそれぞれのタグとアドレス変換部２９から供給されたpa[47:13]とを比較して、一致又は不一致を判定する。キャッシュヒット判定部２６は、４つのウェイのそれぞれについて、一致又は不一致を示すヒット信号hit_way0乃至hit_way3を出力する。ヒット信号hit_way0乃至hit_way3のうちで一致したウェイに対応する信号が"１"となり、不一致のウェイに対応する信号は"０"となる。
【００６０】
ステップＳ４１でタグが一致すると（即ちロード命令についてキャッシュヒットすると）、ステップＳ４２で、当該一致したウェイのウェイＩＤ（ウェイ番号）をフェッチポート部２０に登録する。具体的には、エンコード回路２７が、キャッシュヒット判定部２６から出力されるヒット信号hit_way0乃至hit_way3を入力信号として、この入力信号をエンコードすることにより、ヒットしたウェイの番号を示すコード（例えば２ビットのコード）を出力する。このコードがウェイＩＤとしてフェッチポート部２０に格納される。
【００６１】
図１４を再び参照し、１次キャッシュ制御部２００Ａの動作について更に説明する。上記の説明でload命令実行時のタグヒットについて説明したが、このload命令実行時に、データ部２５は、アクセス調停部２３から供給されたインデックスva[12:7]に対応する４つのウェイのそれぞれのデータdata_way0乃至data_way3を出力する。このデータは、論理回路５１に供給される。論理回路５１は、キャッシュヒット判定部２６の出力するヒット信号hit_way0乃至hit_way3のうちで"１"である信号に対応するウェイのデータを選択し、演算器４００に供給する。即ち、load命令によりロードされるべきデータが、演算器４００に供給される。なおstore命令実行時にも、キャッシュヒット判定部２６からヒット信号hit_way0乃至hit_way3が出力される。
【００６２】
キャッシュヒット判定部２６の出力するヒット信号hit_way0乃至hit_way3のうちで"１"である信号が存在しない場合、即ちキャッシュミスの場合、論理回路５０の出力が１となり、登録データ転送要求部３２が動作する。論理回路５０の出力は置換ウェイ判定部３０にも供給され、必要に応じてデータ部２５から置換対象のデータを追い出す処理が実行される。登録データ転送要求部３２は、読出しを示すコマンド"read"、物理アドレス"address[47:7]"、コア番号（何れのコアであるのかを特定する番号）、及び１次キャッシュのデータ登録するウェイのウェイＩＤを、登録データ転送要求として送信する。
【００６３】
２次キャッシュ制御部３００においては、登録データ転送要求部３２が送信した登録データ転送要求のデータが２次キャッシュデータ部３８に格納されるとともに、データ無効化判定部３７に供給される。データ無効化判定部３７は、登録データ転送要求のデータが供給されると、当該データのアドレスに一致するアドレスを有する２次キャッシュデータ部３８のエントリを検索する。一致するエントリが存在する場合、データ無効化判定部３７は、当該エントリのコア番号が示すコアに対して無効化要求を送信するように、データ無効化要求部３６に通知する。データ無効化要求部３６は、無効化要求を示す"invalidate"、無効化対象のアドレス"address[47:7]"、及び無効化対象のウェイのウェイＩＤを含む無効化要求データを、該当するコアに送信する。
【００６４】
無効化要求データを受信したコアの１次キャッシュ制御部２００Ａでは、ＲＩＭ判定部２２がＲＩＭ判定処理を実行する。このＲＩＭ判定処理については後述する。また無効化要求データを受信したコアの１次キャッシュ制御部２００Ａでは更に、アクセス調停部２３が、受信した無効化要求のアドレスのインデックス部分とウェイＩＤとに基づいて、対応するインデックスの対応するウェイのデータを無効化する。なおこの際、当該インデックスのそれぞれのウェイのデータdata_way0乃至data_way3がデータ部２５から出力される。またデコード回路２８が、受信したウェイＩＤをエンコードし、ウェイＩＤが示すウェイのみ"１"であり残りのウェイが"０"である信号way0乃至way3を生成する。この信号way0乃至way3に基づいて、論理回路５２が、データ部２５の出力するdata_way0乃至data_way3から無効化対象のデータを選択し、選択したデータをデータ無効化応答部３１に供給する。データ無効化応答部３１は、書き込みを示すコマンド"write"、物理アドレス"address[47:7]"、及び無効化要求されたデータを、データ無効化応答として送信する。
【００６５】
２次キャッシュ制御部３００においては、データ無効化応答部３１が送信したデータ無効化応答のデータが２次キャッシュデータ部３８に格納される。このデータ無効化応答のデータのコマンド部が"write"であることに応答して、登録データ送信部３５が、先に登録データ転送要求をしたコアに対して、登録データを送信する。登録データ転送要求をしたコアを特定するためには、先に送られた登録データ転送要求のデータが２次キャッシュデータ部３８に記憶されているので、このデータ中に含まれるコア番号を用いればよい。登録データ送信部３５が送信する登録データは、書き込みを示すコマンド"write"、物理アドレス"address[47:7]"、データ無効化応答で返されたデータ（登録するデータ）、及びデータ登録先のウェイＩＤである。
【００６６】
登録データを受信したコアの１次キャッシュ制御部２００Ａでは、ＲＩＦ判定部２１が図８に示すＲＩＦ判定処理を実行する。また登録データを受信したコアの１次キャッシュ制御部２００Ａでは更に、アクセス調停部２３を介して、受信した登録データのアドレスのインデックス部分とウェイＩＤとに基づいて、対応するインデックスの対応するウェイへのデータ登録が行われる。即ち、タグ部２４の対応するインデックスの対応するウェイに、登録データ中のアドレス"address[47:7]"のタグ部分が格納される。またデータ部２５の対応するインデックスの対応するウェイに、登録対象のデータが格納される。
【００６７】
図１６は、ＲＩＭ判定処理の一例を示すフローチャートである。このフローチャートに従い、ＲＩＭ判定部２２がＲＩＭフラグを有効化する。まずフェッチポート部２０に保持されたロード命令が完了し且つ未解放の状態で、ＲＩＭ判定部２２が、キャッシュメモリのデータに対する無効化要求を受信する。この無効化要求を受信すると、ＲＩＭ判定部２２は、受信した無効化要求の対象アドレスのキャッシュインデックス及びウェイＩＤと上記のロード命令の指定アドレスのキャッシュインデックス及びウェイＩＤとが一致する場合、ＲＩＭフラグを有効化する。
【００６８】
具体的には、キャッシュメモリに対する無効化要求を２次キャッシュ制御部３００から受信すると（ステップＳ５１）、ＲＩＭ判定部２２は、フェッチポート部２０の全てのエントリを検索する（ステップＳ５２）。そして、ＲＩＭ判定部２２は、「valid＝１」且つ「status＝完了」且つ「opcode＝ロード系」のエントリがフェッチポート部２０に存在するか否かを判定する（ステップＳ５３）。即ち、フェッチポート部２０に保持されたロード命令に応じて対象データがキャッシュメモリから演算器４００に転送された後、そのエントリが解放されるまでの間に、キャッシュメモリの対象データに対する無効化要求を受信したか否かを判定する。このようなエントリがフェッチポート部２０に存在する場合、ステップＳ５３のＹＥＳルートに進む。ＲＩＭ判定部２２は、該当エントリのアドレスのキャッシュインデックス部分と、２次キャッシュ制御部３００から受信した無効化要求の対象アドレスのキャッシュインデックス部分とが一致するか否かを判定する（ステップＳ５４）。双方のアドレスが一致する場合（Ｓ５４のＹＥＳルート）、ＲＩＭ判定部２２は、フェッチポート部２０の該当エントリのウェイＩＤ（ウェイ番号）と、受信した無効化要求のウェイＩＤ（ウェイ番号）とが一致するか否かを判定する（ステップＳ５５）。双方のウェイＩＤ（ウェイ番号）が一致する場合（Ｓ５５のＹＥＳルート）、ＲＩＭ判定部２２は、ＦＰ−ＴＯＱが指示するエントリから該当エントリまでの全てのエントリについてＲＩＭフラグを"１"にする（ステップＳ５６）。換言すると、フェッチポート部２０における、あるエントリに保持されたロード命令によりその対象データを演算器４００に転送した後、そのエントリが解放されるまでの間に無効化要求によりその対象データがキャッシュメモリから追い出されることがある。そのような場合、ＲＩＭ判定部２２は、対応するエントリのＲＩＭフラグを有効化する。なお、対象エントリがフェッチポート部２０に存在しない場合（ステップＳ５３、Ｓ５４、Ｓ５５のＮＯルート）、ＲＩＭ判定部２２は、ＲＩＭ判定処理を終了する。
【００６９】
なお無効化要求の対象アドレスは物理アドレスであり、命令制御部１００により発行されフェッチポート部２０に保持されるロード命令の指定アドレスは論理アドレスである。しかしながら、アドレスの下位ビットであるインデックス部分については、物理アドレスであるか論理アドレスであるかに関わらず同一である。従って、無効化要求の対象アドレスとフェッチポート部２０に保持されるロード命令の指定アドレスとの間で、インデックス部分についてアドレス変換無くそのまま比較を行うことに問題はない。同様に、無効化要求の対象アドレスのインデックス部分そのままに基づいて、アドレス変換することなく、タグ部２４やデータ部２５のインデックスを選択することにも問題はない。
【００７０】
しかしながら、不要な命令再実行処理の頻度を低下させるためにインデックスよりも上位のアドレスについても一致を検出しようとすると、上位部分のアドレスは論理アドレスと物理アドレスとで異なるので、そのままでの比較はできない。無効化処理要求を受信したら、フェッチポート部２０に保持されている全ての有効エントリの論理アドレスを１つずつアドレス変換部２９により物理アドレスに変換し、無効化処理要求が示す物理アドレスとの一致を判定することになる。しかしながら、このような構成とすると、フェッチポート部２０の有効エントリを全て読み出すための時間がかかるとともに、アドレス変換実行のためのパイプライン占有により性能が低下してしまう。また更には、インデックスのビット幅（本実施例では６ビット）の比較だけではなく、物理アドレスpa[47:13]の３５ビットの比較を行うために、回路規模が増大してしまう。これらの問題を避けるためには、フェッチポート部２０に物理アドレスを保持しておくことも考えられるが、そのような方式とすると、フェッチポート部２０のサイズが増大してしまう。本実施例では、ウェイＩＤが２ビットであるから、フェッチポート部２０のエントリ数が１６個とすると、３２ビットが一致検出のために必要となる。それに対して、物理アドレスをエントリに登録する場合には、物理アドレスが３５ビットであるから、フェッチポート部２０のエントリ数が１６個とすると、５６０ビットが一致検出のために必要となってしまう。
【００７１】
以上の問題を鑑みて、本実施例では、ウェイＩＤに着目して、キャッシュインデックス部分とウェイＩＤとの一致を検出してＲＩＭ判定を行っている。このようにしてウェイＩＤを用いることにより、論理アドレスと物理アドレスとが混在している１次キャッシュにおいて、無効化要求の対象アドレスを物理アドレスから論理アドレスに変換しなくとも、効率的にＲＩＭ判定を行うことが可能となる。
【００７２】
図１７は、無効化処理の流れを示すフローチャートである。この無効化処理の流れに従って、例えば図１０（ｂ）に示される無効化要求が発行され、それに伴う処理が実行される。以下においては、図１７を参照し、図１４の回路が実行する無効化処理の動作について説明する。
【００７３】
ステップＳ６１で、２次キャッシュ制御部３００が、１次キャッシュ制御部２００Ａの登録データ転送要求部３２からデータ転送要求を受信する。ステップＳ６２で、データ無効化判定部３７が、２次キャッシュデータ部３８に格納されている有効データ（"valid"が「有効」を示しているエントリ）のアドレスと、受信したデータ転送要求のアドレスとが一致するか否かを判定する。アドレスが一致しない場合（ＮＯの場合）には、無効化処理を終了する。
【００７４】
ステップＳ６２でアドレスが一致する場合（ＹＥＳの場合）、ステップＳ６３において、上記のアドレスが一致した該当データのＣＰＵ番号（コア番号"core#"）とデータ転送要求のＣＰＵ番号（コア番号"core#"）とが不一致であるか否かを判定する。この判定はデータ無効化判定部３７により行われる。なおこの２次キャッシュデータ部３８に格納されているデータのＣＰＵ番号は、当該データが、当該ＣＰＵ番号が示すＣＰＵコアの１次キャッシュ制御部２００Ａに登録されていることを示す。ＣＰＵ番号が不一致でない場合（ＮＯの場合）には、無効化処理を終了する。
【００７５】
ステップＳ６３でＣＰＵ番号が不一致の場合（ＹＥＳの場合）、ステップＳ６４で、データ無効化要求部３６が、上記のアドレスが一致した該当データのＣＰＵ番号（コア番号）が示すＣＰＵコアに対して、無効化処理要求を送信する。ステップＳ６５で、無効化処理要求を受信した１次キャッシュ制御部２００Ａにおいて、無効化処理要求のアドレスのキャッシュインデックス及びウェイＩＤと一致するデータを無効化する。ステップＳ６６で、１次キャッシュ制御部２００Ａのデータ部２５から無効化の対象となったデータを読み出し、読み出したデータをデータ無効化応答部３１を介して２次キャッシュ制御部３００に転送する。ステップＳ６７で、転送されたデータを受信した２次キャッシュ制御部３００は、受信した転送データを、データ転送要求元の１次キャッシュ制御部２００Ａへ送信する。
【００７６】
以上、Ｎウェイ・セットアソシアティブ方式において不要な命令再実行処理の頻度を低下させた演算処理装置を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。例えば、ウェイの数、アドレスの幅、各データの形式、各データに含まれる情報の詳細、所望の機能を実現するための具体的な構成や動作等については、上記の実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で実装時の仕様に応じて変更されてよい。
【符号の説明】
【００７７】
１００  命令制御部
２００Ａ  １次キャッシュ制御部
３００  ２次キャッシュ制御部
４００  演算器
２０  フェッチポート部
２１  ＲＩＦ判定部
２２  ＲＩＭ判定部
２３  アクセス調停部
２４  タグ部
２５  データ部
２６  キャッシュヒット判定部
２７  エンコード回路
２８  デコード回路
２９  アドレス変換部
３０  置換ウェイ判定部
３１  データ無効化応答部
３２  登録データ転送要求部
３５  登録データ送信部
３６  データ無効化要求部
３７  データ無効化判定部
３８  ２次キャッシュデータ部
５０〜５２  論理回路
【図１】
2014006807.tif 000003
【図２】
2014006807.tif 000004
【図３】
2014006807.tif 000005
【図４】
2014006807.tif 000006
【図５】
2014006807.tif 000007
【図６】
2014006807.tif 000008
【図７】
2014006807.tif 000009
【図８】
2014006807.tif 000010
【図９】
2014006807.tif 000011
【図１０】
2014006807.tif 000012
【図１１】
2014006807.tif 000013
【図１２】
2014006807.tif 000014
【図１３】
2014006807.tif 000015
【図１４】
2014006807.tif 000016
【図１５】
2014006807.tif 000017
【図１６】
2014006807.tif 000018
【図１７】
2014006807.tif 000019