(57)【特許請求の範囲】
【請求項１】
メモリアクセスをアウトオブオーダで処理する複数の処理部を有する情報処理装置であって、
各処理部が、
キャッシュメモリと、
前記キャッシュメモリのデータにアクセスする命令をエントリに保持する命令ポートと、
前記命令ポートのエントリに保持されたロード命令に応じて、ロード命令の対象データが前記キャッシュメモリから演算器に転送された後に前記キャッシュメモリのデータに対する無効化要求を受信し、受信した無効化要求の対象アドレスのキャッシュインデクスと一致するキャッシュインデクスを有するロード命令が前記命令ポートに存在すると判定した場合、第１フラグを有効化する第１判定部と、
前記命令ポートのエントリに保持されたロード命令の対象データについてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきたと判定した場合、第２フラグを有効化する第２判定部と、
前記命令ポートのエントリに保持されたロード命令の完了時に前記第１フラグおよび前記第２フラグがいずれも有効化されていると判定した場合、その次の命令からの再実行を指示する命令再実行判定部とをそなえ、
前記第１判定部は、前記受信した無効化要求が置換処理に起因するものであり、且つ上記キャッシュインデクスの一致したロード命令を保持する前記命令ポートのエントリと当該置換処理の要求元命令を保持する前記命令ポートのエントリとが一致する場合には、前記第１フラグを有効化しない、情報処理装置。
【請求項２】
前記第２判定部は、前記命令ポートのエントリに保持されたロード命令の対象データがキャッシュミスした後に前記対象データが転送されてきたと判定されたことに加え、前記第１フラグが有効化されたエントリが前記命令ポートに既に存在すると判定した場合、前記第２フラグを有効化する、請求項１記載の情報処理装置。
【請求項３】
前記命令ポートのエントリに、前記第１フラグおよび前記第２フラグが保持されている、請求項１または請求項２に記載の情報処理装置。
【請求項４】
メモリアクセスをアウトオブオーダで処理すべく、キャッシュメモリと、前記キャッシュメモリのデータにアクセスする命令を、各エントリに保持する命令ポートとを有し、前記キャッシュメモリの制御を行なうキャッシュメモリ制御装置であって、
前記命令ポートのエントリに保持されたロード命令に応じて、ロード命令の対象データが前記キャッシュメモリから演算器に転送された後に前記キャッシュメモリのデータに対する無効化要求を受信し、受信した無効化要求の対象アドレスのキャッシュインデクスと一致するキャッシュインデクスを有するロード命令が前記命令ポートに存在すると判定した場合、第１フラグを有効化する第１判定部と、
前記命令ポートのエントリに保持されたロード命令の対象データについてキャッシュミスした後に当該キャッシュミスに応じて対象データが転送されてきたと判定した場合、第２フラグを有効化する第２判定部と、
前記命令ポートのエントリに保持されたロード命令の完了時に前記第１フラグおよび前記第２フラグがいずれも有効化されていると判定した場合、その次の命令からの再実行を指示する命令再実行判定部とをそなえ、
前記第１判定部は、前記受信した無効化要求が置換処理に起因するものであり、且つ上記キャッシュインデクスの一致したロード命令を保持する前記命令ポートのエントリと当該置換処理の要求元命令を保持する前記命令ポートのエントリとが一致する場合には、前記第１フラグを有効化しない、キャッシュメモリ制御装置。
【請求項５】
前記第２判定部は、前記命令ポートのエントリに保持されたロード命令の対象データがキャッシュミスした後に前記対象データが転送されてきたと判定されたことに加え、前記第１フラグが有効化されたエントリが前記命令ポートに既に存在すると判定した場合、前記第２フラグを有効化する、請求項４記載のキャッシュメモリ制御装置。
【請求項６】
前記命令ポートのエントリに、前記第１フラグおよび前記第２フラグが保持されている、請求項４または請求項５に記載のキャッシュメモリ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、情報処理装置およびキャッシュメモリ制御装置に関し、例えばメモリアクセスをアウトオブオーダで処理する処理部等に適用可能な技術に関する。
【背景技術】
【０００２】
現在主流となっている高性能プロセッサでは、高い並列度を維持して命令を実行するためにアウトオブオーダ処理を採用している。アウトオブオーダ処理とは、キャッシュミスなどの理由で、ある命令のデータの読出が滞っている間に後続の命令のデータの読出を先に実行し、その後で滞っていた命令のデータの読出を実行する処理である。
【０００３】
しかし、このような処理を行なうと、後から実行された先行するデータの読出が最新のデータを取り出し、先に実行された後続するデータの読出が古いデータを読み出す場合が発生し、ＴＳＯ（Total Store Ordering）に違反する場合が出てくる。ここで、ＴＳＯとは、データの読出結果がデータの書込順序を正しく反映することであり、実行順序の一貫性と呼ばれ、メモリアクセスを行なう命令の順序に対し、実際にメモリにデータを書き込む順序の入れ替えの制約を定めたメモリオーダリング（memory ordering）の一つである。ＴＳＯのルールは次の三点である。
【０００４】
・ロード命令は、先行するロード命令を追い越して処理してはいけない。
・ストア命令は、先行するロード命令および先行するストア命令を追い越して処理してはいけない。
・アトミックロードストア命令は、先行するロード命令および先行するストア命令を追い越して処理してはいけない。
【０００５】
つまり、図１５に示すように、ロード命令（load）は、先行するストア命令（store）を追い越して処理してもよいが、その他のパターンの追い越しを禁止される。ただし、ロード命令の対象データが先行するストア命令の対象データに含まれている場合は、当該ロード命令はそのストア命令のデータをロードしなければならないのは当然である。
【０００６】
ここで、メモリアクセスをアウトオブオーダで処理するプロセッサ（ＣＰＵもしくはＣＰＵ−ＣＯＲＥ）においては、ロード命令が先行するロード命令を追い越して先にデータを命令制御部に返すことを可能にする。図１６に示すように、命令制御部１００と、この命令制御部１００からのメモリアクセス要求に応じてキャッシュメモリに対するアクセスを行なう一次キャッシュ制御部２００とを含む情報処理装置では、以下のような処理が行なわれる。例えば、先行するロード命令（load-A）の対象データがキャッシュミスし、後続のロード命令（load-B）の対象データがキャッシュヒットする場合、一次キャッシュ制御部２００は、先行するロード命令（load-A）を追い越して後続のロード命令（load-B）のデータを命令制御部１００に返すことになる。
【０００７】
しかし、実際の命令実行は命令の順序に従って実行されるため、ロードデータを順不同で読み出したとしても、ロード命令とストア命令との間のＴＳＯを守っていれば、シングルプロセッサ構成の情報処理装置におけるソフトウエアからはＴＳＯが守られているように見える。ところが、マルチプロセッサ構成の情報処理装置では、ソフトウエアからロード命令間のＴＳＯ違反が見えるケースがある。
【０００８】
例として、図１７（ａ）〜図１７（ｃ）に、キャッシュメモリ（cache）２１２の領域Ａ，Ｂのデータに対し、プロセッサＣＰＵ−αではストア命令store-A，store-Bがこの順で発行され、プロセッサＣＰＵ−βではロード命令load-B，load-Aがこの順で発行されるケースを示す。
【０００９】
なお、図１７中、ＦＰ（Fetch Port）２１０は、キャッシュメモリ２１２のデータにアクセスする命令を保持する命令ポートであり、このＦＰ２１０においては、ＦＰ番号０，１で特定される各エントリに、各命令が保持される。また、図１７（ａ）〜図１７（ｃ）に示す情報処理装置において、ＣＰＵ−αおよびＣＰＵ−βのそれぞれは、命令制御部１００および一次キャッシュ制御部２００を有している。さらに、ＣＰＵ−αおよびＣＰＵ−βは、下位階層の二次キャッシュ制御部３００を共用している。また、キャッシュメモリは、単にキャッシュという場合がある。なお、以下の説明では、ＣＰＵ−αにおける命令制御部１００，一次キャッシュ制御部２００，ＦＰ２１０およびキャッシュメモリ２１２を特定する際には、各符号にａを付し、１００ａ，２００ａ，２１０ａ，２１２ａと表記する。同様に、ＣＰＵ−βにおける命令制御部１００，一次キャッシュ制御部２００，ＦＰ２１０およびキャッシュメモリ２１２を特定する際には、各符号にｂを付し、１００ｂ，２００ｂ，２１０ｂ，２１２ｂと表記する。ＣＰＵ−αおよびＣＰＵ−βを特定する必要のない場合には、単に符号１００，２００，２１０，２１２を用いる。
【００１０】
図１７（ａ）に示すように、ＣＰＵ−αの一次キャッシュ制御部２００ａでは、store-A，store-Bがいずれもキャッシュミスし、二次キャッシュ制御部３００にデータが要求される。また、ＣＰＵ−βの一次キャッシュ制御部２００ｂでは、load-Bがキャッシュミスして対象データを命令制御部１００ｂに返せない間に、load-Aがキャッシュヒットしてload-Bを追い越して対象データdata-A（old）が命令制御部１００ｂに返される。
【００１１】
ついで、図１７（ｂ）に示すように、ＣＰＵ−αの一次キャッシュ装置２００ａにおける処理対象命令はストア命令（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)）が演算器４００（命令制御部１００ｂ）に転送される。以上の動作により、図１７（ａ）〜図１７（ｃ）を参照しながら説明したＴＳＯ違反が解消されることになる。
【００４１】
ところで、図５〜図１２を参照しながら上述した、ＴＳＯ違反を回避する機能を有する一次キャッシュ制御部２００では、以下に説明する状況によって不要な命令再実行要求が発行され、処理性能の低下を招く場合がある。そのような状況について、図１３および図１４を参照しながら説明する。ここで、図１３は、一次キャッシュ制御部２００におけるキャッシュバイパス構成の一例を示すブロック図である。また、図１４は、不要なＲＩＭフラグ有効化によって不要な命令再実行要求が発生するケースの一例を説明するためのフロー図である。
【００４２】
図８を参照しながら上述したように、ＲＩＭ判定部２１４がＲＩＭフラグを有効化する条件として、ＦＰ２１０における処理完了済みのロード命令のアドレス（キャッシュインデクス）と無効化要求の対象アドレス（キャッシュインデクス）との一致をみている。この無効化要求は、あるプロセッサのキャッシュ２１２に保持されているデータを、他のプロセッサのキャッシュ２１２に転送する際に生じるが、そのほかにも、あるデータをキャッシュ２１２に登録すべく登録先にある既存データの置換を行なう際にも生じる。このとき、キャッシュミスしたロード命令のキャッシュインデクス部分のアドレスと、既存データの置換処理に伴う無効化要求のキャッシュインデクス部分のアドレスとは必ず一致することになる。
【００４３】
一方、情報処理装置においては、処理高速化のために、下位階層キャッシュもしくはメインメモリから転送されてくるキャッシュ登録データを、キャッシュに登録する前に、このキャッシュをバイパスして演算器に転送する機構がそなえられる場合がある。図１３に示す例では、一次キャッシュ制御部２００において、二次キャッシュ制御部３００からの転送データについてキャッシュ２１２を迂回させるバイパス２１８がそなえられている。そして、バイパス２１８からのデータとキャッシュ２１２からのデータとのいずれか一方を選択して演算器４００に出力する選択部２１７がそなえられている。
【００４４】
図１４に示すフロー図（ステップＡ１〜Ａ１６）を参照しながら、上述のようなバイパス構成を有する一次キャッシュ制御部２００において、不要なＲＩＭフラグ有効化によって不要な命令再実行要求が発生するケースについて説明する。ここで、キャッシュミスしたロード命令に対応するデータが二次キャッシュ制御部３００から転送されてきたときに、そのデータのキャッシュ２１２への登録がバイパスされ、そのデータがキャッシュ２１２に登録される前に演算器４００に転送された場合について考える。さらに、そのデータのキャッシュ２１２への登録に伴う置換処理によって、当該ロード命令のキャッシュインデクスと同一のキャッシュインデクスを有するが当該ロード命令の対象アドレスとは異なるアドレスのデータに対する無効化処理が行なわれる場合について考える。その際、図１４に示すごとく、ＲＩＭフラグが不要に有効化され、不要な命令再実行要求が発生する。
【００４５】
図１４に示すケースでは、まず、命令制御部１００からＦＰ＃０にロード命令（address＝Ａ）が発行され、ＦＰ＃０が確保される（ステップＡ１）。キャッシュミス時、つまりこのロード命令（address＝Ａ）の該当データが一次キャッシュ２１２に存在しない場合、一次キャッシュ制御部２００は二次キャッシュ制御部３００に対しデータ転送要求（address＝Ａ）が発行される（ステップＡ２）。次に、命令制御部１００からＦＰ＃１にロード命令（address＝Ｂ）が発行され、ＦＰ＃１が確保される（ステップＡ３）。このロード命令（address＝Ｂ）の一次キャッシュ２１２上のキャッシュインデクス（cache-index）はｉであるとする。このロード命令（address＝Ｂ）の該当データも一次キャッシュ２１２に存在しなかった場合、一次キャッシュ制御部２００は二次キャッシュ制御部３００に対しデータ転送要求（address＝Ｂ）を発行する（ステップＡ４）。
【００４６】
この後、ステップＡ３で発行された後続ロード命令の対象データ（address＝Ｂ）の転送要求が、ステップＡ１で発行された先行ロード命令の対象データ（address＝Ａ）の転送要求よりも先に二次キャッシュ制御部３００から発行されたとする（ステップＡ５）。このデータ転送要求を受信したことで、一次キャッシュ制御部２００では、まず、図１３で述べたバイパス構成により、一次キャッシュ２１２へのデータ登録前に後続ロード命令の対象データ（address＝Ｂ）が演算器４００に転送される（ステップＡ６）。これによりＦＰ＃１のstatusは「完了」に設定される（ステップＡ７）。
【００４７】
一方、データ転送要求を二次キャッシュ制御部３００から受信したことで、図９に示す手順で判定を行なうＲＩＦ判定部２１５により、ＦＰ＃０およびＦＰ＃１におけるＲＩＦフラグが「１」に設定される（ステップＡ８）。
【００４８】
さらに、データ転送要求を二次キャッシュ制御部３００から受信したことで、address＝Ｂ／index＝ｉのデータを一次キャッシュ２１２に登録するために、一次キャッシュ２１２のindex＝ｉに既に登録されていた全く別のデータ（address＝Ｃ／index＝ｉ）の置換処理が開始される（ステップＡ９）。この置換処理に伴い、一次キャッシュ制御部２００は、二次キャッシュ制御部３００から、address＝Ｃ／index＝ｉのデータに対する無効化処理を受信する（ステップＡ１０）。このとき、そのキャッシュインデクス（index＝ｉ）がＦＰ＃１のキャッシュインデクスと一致するため、図８に示す手順で判定を行なうＲＩＭ判定部２１４により、ＦＰ＃０およびＦＰ＃１におけるＲＩＭフラグが「１」に設定される（ステップＡ１１）。
【００４９】
その後、Ａ１で発行された先行ロード命令の対象データ（address＝Ａ）の転送要求が、二次キャッシュ制御部３００から発行されると（ステップＡ１２）、図１３で述べたバイパス構成により、一次キャッシュ２１２へのデータ登録前に先行ロード命令の対象データ（address＝Ａ）が演算器４００に転送される（ステップＡ１３）。これによりＦＰ＃０のstatusは「完了」に設定される（ステップＡ１４）。このとき、ＦＰ＃０においてＲＩＭ＝ＲＩＦ＝１であるため（ステップＡ１５）、図１０に示す手順で判定を行なう命令再実行判定部２１６により、命令制御部１００に対し命令再実行要求が発行されることになる（ステップＡ１６）。
【００５０】
以上のような一連のフローに従って説明した通り、同一キャッシュインデクスであるが全く異なるデータ（address Ｂ≠Ｃ）に対する無効化要求によってＲＩＭフラグ有効化が生じ、不要な命令再実行要求が発生する。これにより、データ化けを生じさせることはないが、不要な命令再実行が、情報処理装置の処理性能の低下要因となる。
【００５１】
また、これとは別に、ＲＩＦフラグは、下位階層のキャッシュ（例えば二次キャッシュ制御部３００）もしくはメモリからデータが転送されたときに有効になるフラグである。しかし、ＲＩＭフラグが無効な時点でＲＩＦフラグを有効にすると、その後、たとえＲＩＭフラグが有効となるような無効化処理が要求されたとしても、ＴＳＯ違反にはなりえない。つまり、ＴＳＯ違反となるケースは、図１１や図１２に示したように、他ＣＰＵにおけるストア処理に伴う無効化処理によりＲＩＭフラグが有効になった後、他ＣＰＵにおけるストア済みデータが自ＣＰＵに転送されてきてＲＩＦフラグが有効になる場合のみである。従って、ＲＩＭフラグが有効になる前にＲＩＦフラグを有効にする必要はない。それにも関わらず、図９に示す手順で判定を行なうＲＩＦ判定部２１５では、ＲＩＦフラグを有効にした後にもＲＩＭフラグが有効になり得るため、不要な命令再実行要求が発生する。これによっても、不要な命令再実行が、情報処理装置の処理性能の低下要因となる。
【００５２】
これらの性能低下の要因は、二次キャッシュ制御部３００からのデータ転送タイミングと置換制御に伴う無効化要求のタイミングとの前後関係によるものである。しかし、マルチコア化などによる二次キャッシュ制御部２００の構成や制御の変更によってはこのタイミング関係が定常的に発生し得ることが考えられる。そのような場合、置換処理毎に不要な命令再実行が発生し、性能低下が定常的に発生することとなるため、メモリアクセスをアウトオブオーダで処理する情報処理装置において、極めて大きな性能低下を招くおそれがある。
【００５３】
図１〜図４を参照しながら後述する、本実施形態の一次キャッシュ制御部２００Ａ（２００Ａ−ａ，２００Ａ−ｂ）や、この一次キャッシュ制御部２００Ａを適用される情報処理装置（ＣＰＵ１）は、上述した不要な命令再実行を抑止する構成／機能を有している。本実施形態のＣＰＵ−αやＣＰＵ−βでは、上述した一次キャッシュ制御部２００に代えて、一次キャッシュ制御部２００Ａ（２００Ａ−ａ，２００Ａ−ｂ）が用いられる。
【００５４】
〔２〕実施形態の構成
図１は、本実施形態の一次キャッシュ制御部２００Ａ（２００Ａ−ａ，２００Ａ−ｂ）の構成の一例を示すブロック図、図２は、本実施形態の一次キャッシュ制御部２００Ａを適用される情報処理装置（ＣＰＵ１）の構成の一例を示すブロック図である。なお、図中、既述の符号と同一の符号は同一もしくはほぼ同一の部分を示しているので、その説明は省略する。また、以下の説明でも、ＣＰＵ−αにおける構成要素を特定する際には各符号にａを付す一方、ＣＰＵ−βにおける構成要素を特定する際には各符号にｂを付す。ＣＰＵ−α，ＣＰＵ−βを特定する必要の無い場合には、ａ，ｂを付すことなく符号の表記を行なう。
【００５５】
図２に示すように、本実施形態の一次キャッシュ制御部２００Ａを適用されるＣＰＵ１は、マルチプロセッサ構成を採用している。つまり、ＣＰＵ１は、２つの処理部としてのＣＰＵ−ＣＯＲＥ１０（ＣＰＵ−αおよびＣＰＵ−β）を有し、これらの２つのＣＰＵ−ＣＯＲＥ１０は、下位階層の二次キャッシュ制御部３００を共用している。また、各ＣＰＵ−ＣＯＲＥ１０は、メモリアクセスをアウトオブオーダで処理するもので、命令制御部１００，演算器としての演算制御部４００および一次キャッシュ制御部２００Ａを有している。さらに、ＣＰＵ１（二次キャッシュ制御部３００）は、システム制御バス２に接続され、図示しないメインメモリ等と通信可能に接続されている。なお、各一次キャッシュ制御部２００Ａには一次キャッシュ２１２がそなえられ、二次キャッシュ制御部３００Ａには二次キャッシュ３０１がそなえられている。
【００５６】
そして、図１に示すように、一次キャッシュ制御部２００Ａは、ＦＰ２１０，プライオリティ部，キャッシュ２１２，アクセス調停部２１３，ＲＩＭ判定部２１４Ａ，ＲＩＦ判定部２１５Ａおよび命令再実行判定部２１６をそなえて構成されている。なお、図１では、便宜上、複数エントリからなるＦＰ２１０のうちの１エントリのみを図示し、プライオリティ部の図示を省略している。プライオリティ部については図６のプライオリティ部２１１参照。
【００５７】
ここで、図１に示す、本実施形態の一次キャッシュ制御部２００Ａは、キャッシュ２１２に対するロード要求のキャッシュミスに伴うデータ転送要求時に、そのデータ転送要求とともに、その要求元のＦＰ番号も、二次キャッシュ制御部３００に送出する。要求元のＦＰ番号は、当該ロード要求を保持しているＦＰ２１０のエントリを特定するものである。
【００５８】
また、本実施形態の二次キャッシュ制御部３００は、図１に示すように、上記データ転送要求に伴う置換処理の無効化要求発行時に、その無効化要求とともに、その無効化要求が置換処理に伴うものであることを示す情報と、データ転送要求元のＦＰ番号とを一次キャッシュ制御部２００Ａに通知する。一次キャッシュ制御部２００Ａでは、ＲＩＭ判定部２１４ＡおよびＲＩＦ判定部２１５Ａが、二次キャッシュ制御部３００からの上述のような情報を用いて、図３および図４を参照しながら後述するごとく判定処理を行なう。
【００５９】
図１に示す、本実施形態の一次キャッシュ制御部２００ＡにおけるＲＩＭ判定部２１４Ａ，ＲＩＦ判定部２１５Ａおよび命令再実行判定部２１６は、以下のような機能を果たすものである。
【００６０】
ＲＩＭ判定部２１４Ａは、以下のような条件判定を行ない、所定条件を満たす場合に第１フラグとしてのＲＩＭフラグを有効化する第１判定部として機能する。このＲＩＭ判定部２１４Ａは、まず、図５に示すＲＩＭ判定部２１４と同様の判定を行なう。つまり、ＲＩＭ判定部２１４Ａは、ＦＰ２１０のエントリに保持されたロード命令に応じて対象データがキャッシュ２１２から演算器３００に転送されてからそのエントリが解放されるまでの間に、キャッシュ２１２のデータに対する無効化要求を一次キャッシュ制御部２００Ａが受信した場合に、当該無効化要求の対象アドレスのキャッシュインデクスと一致するキャッシュインデクスを有するロード命令がＦＰ２１０のエントリに存在するか否かを判定する。換言すると、ＦＰ２１０のエントリに保持されたロード命令に応じて対象データがキャッシュ２１２から演算器４００に転送された後、そのエントリが解放されるまでの間にキャッシュ２１２のデータに対する無効化要求が受信され、当該無効化要求の対象アドレスのキャッシュインデクスと一致するキャッシュインデクスを有するロード命令がＦＰ２１０のエントリに存在するか否かが判定される。このようなエントリがＦＰ２１０に存在しないと判定した場合、ＲＩＭ判定部２１４Ａは、ＲＩＭフラグの有効化を行なわない。
【００６１】
一方、上述の条件に合うエントリがＦＰ２１０に存在する場合、ＲＩＭ判定部２１４Ａは、二次キャッシュ制御部３００からの情報に基づいて、当該無効化要求が置換処理に起因するものであるか否かを判定する。さらに、ＲＩＭ判定部２１４Ａは、上記キャッシュインデクスの一致したロード命令を保持するＦＰ２１０のエントリ（ＦＰ番号）と当該置換処理の要求元命令を保持するＦＰ２１０のエントリ（ＦＰ番号）とが一致するか否かを、当該無効化要求に付与されたＦＰ番号を用いて判定する。そして、当該無効化要求が置換処理に起因しない場合、または、上記ＦＰ番号が一致しない場合、ＲＩＭ判定部２１４Ａは、そのエントリのＲＩＭフラグを有効化する。つまり、ＲＩＭ判定部２１４Ａは、上述のようなエントリがＦＰ２１０に存在するときには、当該無効化要求が置換処理に起因し且つ上記ＦＰ番号が一致する場合を除いて、そのエントリのＲＩＭフラグを有効化する。さらに換言すると、ＲＩＭ判定部２１４Ａは、上述のようなエントリがＦＰ２１０に存在する場合であって、無効化要求が置換処理に起因し且つ上記ＦＰ番号が一致する場合には、ＲＩＭフラグの有効化を抑止する。
【００６２】
また、ＲＩＦ判定部２１５Ａは、以下のような条件判定を行ない、所定条件を満たす場合に第２フラグとしてのＲＩＦフラグを有効化する第２判定部として機能する。このＲＩＦ判定部２１５Ａは、まず、図５に示すＲＩＦ判定部２１５と同様の判定を行なう。つまり、ＲＩＦ判定部２１５Ａは、ＦＰ２１０のエントリに保持されたロード命令の対象データについてキャッシュミスしたとき、当該対象データが二次キャッシュ制御部３００から転送されてきたか否かを判定する。ロード命令がキャッシュミスした後にそのロード命令の対象データが転送されていない場合、ＲＩＦ判定部２１５Ａは、ＲＩＦフラグの有効化を行なわない。
【００６３】
一方、ロード命令がキャッシュミスした後にそのロード命令の対象データが二次キャッシュ制御部３００から転送されてきた場合、ＲＩＦ判定部２１５Ａは、さらに、ＲＩＭフラグを有効化されたエントリがＦＰ２１０に既に存在するか否かを判定する。そして、ＲＩＭフラグを有効化されたエントリがＦＰ２１０に既に存在する場合、ＲＩＦ判定部２１５ＡはそのエントリのＲＩＦフラグを有効化する。一方、ＲＩＭフラグを有効化されたエントリがＦＰ２１０に存在しない場合、ＲＩＦ判定部２１５ＡはそのエントリのＲＩＦフラグの有効化を抑止する。
【００６４】
そして、命令再実行判定部２１６は、図５に示したものと同様に機能する。つまり、命令再実行判定部２１６は、ＦＰ２１０のエントリに保持されたロード命令の完了時に、ＲＩＭフラグおよびＲＩＦフラグがいずれも有効化されているか否かを判定し、いずれも有効化されていると判定した場合、その次の命令からの再実行を命令制御部１００に対し指示する。
【００６５】
〔３〕実施形態の動作
次に、上述のごとく構成された本実施形態の一次キャッシュ制御部２００Ａ（２００Ａ−ａ，２００Ａ−ｂ）の動作について、図３および図４を参照しながら説明する。ここで、図３は、ＲＩＭ判定部２１４Ａによる判定動作を説明するためのフローチャート、図４は、ＲＩＦ判定部２１５Ａによる判定動作を説明するためのフローチャートである。
【００６６】
図５に示すＲＩＭ判定部２１４は、ＦＰ２１０に保持しているロード命令の対象アドレス（キャッシュインデクス）と無効化要求の対象アドレス（キャッシュインデクス）とが一致したときに、ＲＩＭフラグを有効にしている。これに対し、図１のＲＩＭ判定部２１４Ａでは、無効化処理が正にロード対象データのキャッシュ登録処理に伴う置換処理によるものである場合には、ＲＩＭフラグの有効化を抑止することで、不要な命令再実行要求の発生を抑止している。
【００６７】
つまり、図１４において説明した不要な命令再実行要求の発行を抑止すべく、二次キャッシュ制御部３００からの無効化要求には、無効化処理が置換処理に起因するものであるか否かを示す情報（図１図示「置換」）が付加される。無効化要求が置換処理に起因する場合、この無効化要求には、さらに、その無効化要求の発生要因となったデータ転送要求元のＦＰ番号（図１図示「ＦＰ＃」）を示す情報も付加される。
【００６８】
図１４では、ＦＰ＃１に保持されたロード命令の対象データ（address＝Ｂ／index＝ｉ)のデータをキャッシュ２１２に登録するために、それと全く異なるデータだが同一インデクスである既存データ（address＝Ｃ／index＝ｉ）が置換される。その際、address＝Ｃのデータに対する無効化処理がＦＰ＃１のロード命令の対象データに対する無効化処理であるかのように、ＲＩＭ判定部２１４が判定してしまうことにある。ここで、図８に示す手順で判定を行なうＲＩＭ判定部２１４でも、無効化要求のアドレスとＦＰのアドレスとの一致をアドレスの全ビットに基づき判定すれば、図１４で説明したケースにおいてもaddress Ｂ≠Ｃを判定することができ、不要な命令再実行要求の発行を抑止可能になる。しかし、高い動作周波数や少ない回路量で本機能を実現するためには、無効化要求のアドレスとＦＰのアドレスとの一致をキャッシュインデクス部分のみで判定することが望ましい。この利点を維持しつつ、性能低下を回避するために、本実施形態において、ＲＩＭ判定部２１４Ａは、図３に示すフローチャート（ステップＳ１１〜Ｓ１５，Ｓ１４１，Ｓ１４２）に従って判定動作を行なっている。
【００６９】
つまり、キャッシュ２１２に対する無効化要求を二次キャッシュ制御部３００から受信すると（ステップＳ１１）、ＲＩＭ判定部２１４は、ＦＰ２１０の全てのエントリを検索する（ステップＳ１２）。そして、ＲＩＭ判定部２１４Ａは、「valid＝１」且つ「status＝完了」且つ「opcode＝ロード系」のエントリがＦＰ２１０に存在するか否かを判定する（ステップＳ１３）。即ち、ＲＩＭ判定部２１４Ａは、ＦＰ２１０に保持されたロード命令に応じて対象データがキャッシュ２１２から演算器４００に転送された後、そのエントリが解放されるまでの間にキャッシュ２１２の対象データに対する無効化要求を二次キャッシュ制御部３００から受信したか否かを判定する。
【００７０】
このようなエントリがＦＰ２１０に存在する場合（ステップＳ１３のＹＥＳルート）、ＲＩＭ判定部２１４Ａは、該当エントリのアドレスのキャッシュインデクス部分と二次キャッシュ制御部３００から受信した無効化要求の対象アドレスのキャッシュインデクス部分とが一致するか否かを判定する（ステップＳ１４）。キャッシュインデックス部分が一致する場合（Ｓ１４のＹＥＳルート）、ＲＩＭ判定部２１４Ａは、その無効化要求が置換処理に起因するものであるか否かを判定する（ステップＳ１４１）。無効化要求が置換処理に起因するものでなければ（ＮＯルート）、ＲＩＭ判定部２１４Ａは、ＦＰ−ＴＯＱが指示するエントリから有効なエントリまでの全てのエントリについてＲＩＭフラグを“１”にする（ステップＳ１５）。
【００７１】
一方、無効化要求が置換処理に起因するものであれば（ステップＳ１４１のＹＥＳルート）、ＲＩＭ判定部２１４Ａは、上記キャッシュインデクスの一致したロード命令を保持するＦＰ２１０のエントリ（ＦＰ番号）と当、該置換処理の要求元命令を保持するＦＰ２１０のエントリ（ＦＰ番号）とが一致するか否かを判定する（ステップＳ１４２）。これらのＦＰ番号が一致した場合（ＹＥＳルート）、たとえステップＳ１４においてキャッシュインデクス部分（例えば図１４におけるindex＝ｉ）が一致したとしても、その無効化処理は、該当ＦＰエントリの対象データ（例えば図１４におけるaddress＝Ｂのデータ）に対するものではない。その無効化処理は、例えば図１４におけるaddres＝Ｃのデータに対するものである。このため、ＲＩＭ判定部２１４Ａは、そのエントリのＲＩＭフラグの有効化を行なわずＲＩＭ判定処理を終了する。なお、対象エントリがＦＰ２１０に存在しない場合（ステップＳ１３のＮＯルートまたはステップＳ１４のＮＯルート）も、ＲＩＭ判定部２１４Ａは、ＲＩＭ判定処理を終了する。
【００７２】
一方、これらのＦＰ番号が一致しない場合（ステップＳ１４２のＮＯルート）、その無効化処理は、該当ＦＰエントリの対象データに対するものである可能性がある。つまり、その無効化処理は、例えば図１４におけるaddress＝Ｂのデータに対するものである可能性がある。このため、ＲＩＭ判定部２１４Ａは、ＦＰ−ＴＯＱが指示するエントリから有効なエントリまでの全てのエントリについてＲＩＭフラグを“１”にする（ステップＳ１５）。
【００７３】
このように、無効化処理が置換処理に起因するものであり、且つ、キャッシュインデクスの一致した、ロード命令を保持するエントリと当該置換処理の要求元命令を保持するエントリとのＦＰ番号が一致した場合には、ＲＩＭ判定部２１４ＡはＲＩＭフラグの有効化を抑止する。これにより、命令再実行判定部２１６によって、図１４に示すケースのごとく、ＴＳＯ違反の回避に関わらない不要な命令再実行要求が発行されることを抑止することができる。
【００７４】
図５に示すＲＩＦ判定部２１５は、図９に示す手順で判定を行ない、単純にＦＰ２１０のいずれかのエントリが有効である場合にＲＩＦフラグを有効化している。このため、ＲＩＦフラグを有効にした後にもＲＩＭフラグが有効になり得る。これに対し、図１のＲＩＦ判定部２１５Ａでは、キャッシュ２１２に対するデータ転送が行なわれたことに伴ってＲＩＦフラグを有効にする際、ＦＰ２１０のいずれかのエントリに有効なＲＩＭフラグが存在する、という条件を追加している。つまり、ＲＩＭフラグが有効化された後にキャッシュ２１２に対するデータ転送が行なわれた場合に、ＲＩＦフラグの有効化が行なわれる。しかし、キャッシュ２１２に対するデータ転送が行なわれた時点で、有効なＲＩＭフラグを有するエントリがＦＰ２１０に存在しない場合には、ＲＩＦフラグの有効化を抑止することで、不要な命令再実行要求の発生を抑止している。
【００７５】
図１のＲＩＦ判定部２１５Ａは、図４に示すフローチャート（ステップＳ２１〜Ｓ２４，Ｓ２３１）に従って判定動作を行なっている。
つまり、キャッシュメモリ２１２への登録データが二次キャッシュ制御部３００から転送されてくると（ステップＳ２１）、ＲＩＦ判定部２１５Ａは、ＦＰ２１０の全てのエントリを検索する（ステップＳ２２）。そして、ＲＩＦ判定部２１５Ａは、「valid＝１」のエントリ即ち有効なエントリがＦＰ２１０に存在するか否かを判定し（ステップＳ２３）、存在する場合（ＹＥＳルート）、「ＲＩＭ＝１」のエントリが存在するか否かを判定する（ステップＳ２３１）。「ＲＩＭ＝１」のエントリが存在する場合（ＹＥＳルート）、ＲＩＦ判定部２１５Ａは、ＦＰ−ＴＯＱが指示するエントリから有効なエントリまでの全てのエントリについてＲＩＦフラグを“１”にする（ステップＳ２４）。換言すると、ＲＩＭフラグが有効化された後にキャッシュ２１２に対するデータ転送が行なわれた場合、ＲＩＦ判定部２１５Ａは、ＲＩＦフラグを有効化する。なお、有効なエントリがＦＰ２１０に存在しない場合（ステップＳ２３のＮＯルート）や、「ＲＩＭ＝１」のエントリがＦＰ２１０に存在しない場合（ステップＳ２３１のＮＯルート）、ＲＩＦ判定部２１５Ａは、ＲＩＦ判定処理を終了する。
【００７６】
このように、キャッシュ２１２に対するデータ転送が行なわれた時点で、ＲＩＭフラグを有効化されているエントリが無ければ、ＲＩＦフラグの有効化が抑止される。これにより、命令再実行判定部２１６によって、ＴＳＯ違反の回避に関わらない不要な命令再実行要求が発行されることを抑止することができる。
【００７７】
〔４〕実施形態の効果
本実施形態によれば、メモリアクセスをアウトオブオーダで処理するＣＰＵ１におけるＴＳＯ保証のための命令再実行処理において、ＴＳＯ違反の回避に関わらない不要な命令再実行要求の発行を確実に抑止することができる。より具体的には、無効化処理が置換処理に起因するものであり、且つ、キャッシュインデクスの一致した、ロード命令を保持するエントリと当該置換処理の要求元命令を保持するエントリとのＦＰ番号が一致した場合には、ＲＩＭフラグの有効化が抑止される。また、キャッシュ２１２に対するデータ転送が行なわれた時点で、ＲＩＭフラグを有効化されているエントリが無ければ、ＲＩＦフラグの有効化が抑止される。
【００７８】
従って、図５に示す一次キャッシュ制御部２００では存在していた不要な命令再実行要求が、図１等に示す一次キャッシュ制御部２００Ａにおいては確実に抑止され、不要な命令再実行要求が削減される。これにより、ＣＰＵ１の処理性能の低下を招くことなく、確実にＴＳＯ保証が実現され、例えば符号１０ａで示すプロセッサ（ＣＰＵ−ＣＯＲＥ）で処理されるストア命令の順序性が、例えば符号１０ｂで示す他プロセッサで実行されるロード命令に反映されることを確実に保証することができる。
【００７９】
〔５〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
例えば、本実施形態では、処理部（ＣＰＵ−ＣＯＲＥ）の数が２である場合について説明したが、本発明はこれに限定されるものではない。
【００８０】
また、上述したプライオリティ部２１１，アクセス調停部２１３，ＲＩＭ判定部／第１判定部２１４Ａ，ＲＩＦ判定部／第２判定部２１５Ａおよび命令再実行判定部２１６としての機能（その全部または一部の機能）は、コンピュータ（ＣＰＵ１，ＣＰＵ−ＣＯＲＥ１０を含む）が所定のアプリケーションプログラム（キャッシュメモリ制御プログラム）を実行することによって実現される。
【００８１】
そのプログラムは、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷなど），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋Ｒ，ＤＶＤ＋ＲＷ，ブルーレイディスクなど）等のコンピュータ読取可能な記録媒体に記録された形態で提供される。この場合、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。
【００８２】
ここで、コンピュータとは、ハードウエアとＯＳ（オペレーティングシステム）とを含む概念であり、ＯＳの制御の下で動作するハードウエアを意味している。また、ＯＳが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウエアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取る手段とをそなえている。上記キャッシュメモリ制御プログラムは、上述のようなコンピュータに、上記各部２１１，２１３，２１４Ａ，２１５Ａ，２１６としての機能を実現させるプログラムコードを含んでいる。また、その機能の一部は、アプリケーションプログラムではなくＯＳによって実現されてもよい。
【符号の説明】
【００８３】
１    ＣＰＵ（情報処理装置）
２    システム制御バス
１０    ＣＰＵ−ＣＯＲＥ（処理部）
１００，１００ａ，１００ｂ    命令制御部
２００Ａ，２００Ａ−ａ，２００Ａ−ｂ    一次キャッシュ制御部（キャッシュメモリ制御装置）
２１０，２１０ａ，２１０ｂ    ＦＰ（命令ポート）
２１１    プライオリティ部
２１２，２１２ａ，２１２ｂ    キャッシュＲＡＭ（キャッシュメモリ，一次キャッシュ）
２１３    アクセス調停部
２１４Ａ    ＲＩＭ判定部（第１判定部）
２１５Ａ    ＲＩＦ判定部（第２判定部）
２１６    命令再実行判定部
２１７    選択部
２１８    バイパス
３００    二次キャッシュ制御部
３０１    キャッシュＲＡＭ（キャッシュメモリ，二次キャッシュ）
４００    演算制御部（演算器）
【図１】
0005471428.tif 000002
【図２】
0005471428.tif 000003
【図３】
0005471428.tif 000004
【図４】
0005471428.tif 000005
【図５】
0005471428.tif 000006
【図６】
0005471428.tif 000007
【図７】
0005471428.tif 000008
【図８】
0005471428.tif 000009
【図９】
0005471428.tif 000010
【図１０】
0005471428.tif 000011
【図１１】
0005471428.tif 000012
【図１２】
0005471428.tif 000013
【図１３】
0005471428.tif 000014
【図１４】
0005471428.tif 000015
【図１５】
0005471428.tif 000016
【図１６】
0005471428.tif 000017
【図１７】
0005471428.tif 000018