(57)【特許請求の範囲】
【請求項１】
複数の演算処理部と、
メモリの制御を行う第１の制御部とを有し、
前記第１の制御部は、
前記メモリのメモリ空間に対するリクエストを受け付けるリクエストポートと、
前記リクエストに対応する処理を実行する処理ユニットと、
前記リクエストポートから入力されたリクエストが前記処理ユニットで処理実行可能か否かを判定し、前記リクエストが処理実行不可の場合前記リクエストについて第１のアボート処理を行い前記第１のアボート処理したリクエストを前記リクエストポートに残し、前記リクエストが処理実行可能の場合前記処理ユニットに前記処理の要求を発行する制御パイプラインと、
監視対象のアドレスである監視アドレスと同一のアドレスを有するリクエストの前記制御パイプラインへの入力順である発生順序を保持し、
前記制御パイプラインに入力されたリクエストのうち前記監視アドレスと同一のアドレスを有し且つ前記発生順序の先頭以外のリクエストについて、前記リクエストが前記処理実行可能または不可にかかわらず第２のアボート処理を行って、前記制御パイプラインが前記処理ユニットに前記処理の要求を発行することを防止し、
前記リクエストが前記第１のアボート処理または前記第２のアボート処理された場合に、当該リクエストについて保持している前記発生順序は更新せず、
前記制御パイプラインが前記監視アドレスと同一のアドレスを有し且つ前記発生順序の先頭にあるリクエストについての前記処理の要求を前記処理ユニットに発行した場合に、前記発生順序を当該リクエストを除いた順序に更新する、同一アドレスリクエスト調停部と、を有し、
前記第１のアボート処理または前記第２のアボート処理をされて前記リクエストポートに残されたリクエストは、前記制御パイプラインに再度入力される、演算処理装置。
【請求項２】
さらに、前記複数の演算処理部により共有される共有キャッシュと、
前記共有キャッシュのコヒーレンシを制御するコヒーレンシ制御部とを有し、
前記コヒーレンシ制御部は、前記第１の制御部を有し、
前記リクエストポートは、前記共有キャッシュからのリクエストを受け付ける第１のリクエストポートを有する、請求項１に記載の演算処理装置。
【請求項３】
前記リクエストポートは、さらに、前記共有キャッシュ以外からのキャッシュ可能アドレスへのリクエストを受け付ける第２のリクエストポートと、非キャッシュ可能アドレスへのリクエストを受け付ける第３のリクエストポートのうち、いずれか一つまたは両方を有する、請求項２に記載の演算処理装置。
【請求項４】
さらに、前記複数の演算処理部により共有される共有キャッシュを有し、
前記共有キャッシュは、前記第１の制御部を有し、
前記リクエストポートは、前記メモリ側とは逆方向のレベルのキャッシュからのリクエストを登録する第１のリクエストポートを有する、請求項１に記載の演算処理装置。
【請求項５】
前記リクエストポートは、さらに、非キャッシュ可能アドレスへのリクエストを受け付ける第３のリクエストポートを有する、請求項４に記載の演算処理装置。
【請求項６】
前記制御パイプラインは、前記処理実行可能か否かの判定を、前記処理ユニットが処理中のリクエストのアドレスと競合するか否かに基づいて行う、請求項１に記載の演算処理装置。
【請求項７】
前記制御パイプラインは、前記処理実行可能か否かの判定を、前記処理ユニット内の処理に必要な回路資源を獲得可能か否かに基づいて行う、請求項１に記載の演算処理装置。
【請求項８】
前記リクエストポートは、前記リクエストの要求元別に設けられ、
前記同一アドレスリクエスト調停部は、前記要求元それぞれで１つの前記アボート処理されたリクエスト情報を保持し、前記発生順序を前記要求元の順序で保持する、請求項１に記載の演算処理装置。
【請求項９】
前記同一アドレスリクエスト調停部は、前記監視アドレスを保持する監視アドレス保持部と、前記要求元それぞれで１つの前記アボート処理されたリクエスト情報を保持する待ちリクエストリストと、前記発生順序を前記要求元の順序で保持する順序情報保持部とを有する、請求項８に記載の演算処理装置。
【請求項１０】
複数の演算処理部と、
メモリの制御を行う第１の制御部とを有し、
前記第１の制御部は、
前記メモリのメモリ空間に対するリクエストを受け付けるリクエストポートと、
前記リクエストに対応する処理を実行する処理ユニットと、
制御パイプラインとを有する演算処理装置の制御方法であって、
前記制御パイプラインが、前記リクエストポートから入力されたリクエストが前記処理ユニットで処理実行可能か否かを判定し、前記リクエストが処理実行不可の場合前記リクエストについて第１のアボート処理を行い前記第１のアボート処理したリクエストを前記リクエストポートに残し、前記リクエストが処理実行可能の場合前記処理ユニットに前記処理の要求を発行し、
同一アドレスリクエスト調停部が、
監視対象のアドレスである監視アドレスと同一のアドレスを有するリクエストの前記制御パイプラインへの入力順である発生順序を保持し、
前記制御パイプラインに入力されたリクエストのうち前記監視アドレスと同一のアドレスを有し且つ前記発生順序の先頭以外のリクエストについて、前記リクエストが前記処理実行可能または不可にかかわらず第２のアボート処理を行って、前記制御パイプラインが前記処理ユニットに前記処理の要求を発行することを防止し、
前記リクエストが前記第１のアボート処理または前記第２のアボート処理された場合に、当該リクエストについて保持している前記発生順序は更新せず、
前記制御パイプラインが前記監視アドレスと同一のアドレスを有し且つ前記発生順序の先頭にあるリクエストについての前記処理の要求を前記処理ユニットに発行した場合に、前記発生順序を当該リクエストを除いた順序に更新し、
前記リクエストポートが、前記第１のアボート処理または前記第２のアボート処理をされて前記リクエストポートに残されたリクエストを、前記制御パイプラインに再度入力させる、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置（CPUチップ、マイクロプロセッサ、以下単にプロセッサと称する）は、メモリアクセス性能を向上するため複数のレベルのキャッシュを有する。プロセッサは、複数の演算処理部（CPUコア、以下コアと称する）を有し、コアが第１レベルのキャッシュ（L1キャッシュ）をプライベートキャッシュとして占有して利用する。さらに、プロセッサは、複数のコアが共有する上位レベルのキャッシュを有する。
【０００３】
また、プロセッサは、共有キャッシュのうち最上位レベルのキャッシュ（Last Level Cache: LLC,以下LLCと称する）を複数または単数有し、さらに、LLCの外側にキャッシュ間のコヒーレンシを維持するためのコヒーレンシ制御部を有する場合もある。
【０００４】
以下の特許文献には、複数レベルのキャッシュを有するプロセッサについて記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１３／０８４３１４号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
LLCやコヒーレンシ制御部は、リクエストが投入される制御パイプラインと、リクエストに対応する処理を実行するリクエスト処理ユニットを有する。リクエスト処理ユニットは複数のリクエスト処理回路を有する。制御パイプラインは、入力（投入）されたリクエストが既に処理中のリクエストのアドレスと競合するかの判定、リクエストに対する処理内容の判定、処理ユニットの回路資源が獲得可能か否かの資源判定などを行い、適切なリクエストについてリクエスト処理ユニット内のリクエスト処理回路に処理を依頼する。
【０００７】
そのため、制御パイプラインは、リクエストポートから投入されたリクエストがアドレスの競合がありまたは回路資源を獲得できないなど処理開始できない場合、リクエストをアボートしてリクエストポートに差し戻す。したがって、例えばアドレスが競合する他のリクエストの開始済みの処理が完了するまで、そのリクエストはアボートを繰り返す。そして、リクエストポート内の他のアドレスのリクエストは、アボートされたリクエストを追い抜いてリクエスト処理ユニットで処理されることが可能である。
【０００８】
上記の構成において、最初にリクエスト処理ユニットの資源を獲得できたリクエストが処理される。そのため、同一のアドレスの異なるリクエストが資源獲得で競合しあう場合、制御パイプラインに投入されたタイミングで資源獲得できたリクエストがその処理を実行されてしまい、あるリクエストは資源獲得に失敗してアボートを繰り返す一方で、別のリクエストはタイミングよく資源獲得して処理を実行されることがある。この結果、リクエストの要求元の間でまたはリクエスト間で処理の進みやすさに不均衡が生じる。
【０００９】
そこで，本開示の第1の側面の目的は，同一アドレスの複数のリクエストが競合した場合、リクエスト間で不均衡な制御を受けることを抑制する演算処理装置及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
本開示の第１の側面は，複数の演算処理部と、メモリの制御を行う第1の制御部とを有し、前記第1の制御部は、前記メモリのメモリ空間に対するリクエストを受け付けるリクエストポートと、前記リクエストに対応する処理を実行する処理ユニットと、前記リクエストポートから入力されたリクエストが前記処理ユニットで処理実行可能か否かを判定し、前記リクエストが処理実行不可の場合前記リクエストについて第１のアボート処理を行い、処理実行可能の場合前記処理ユニットに処理を発行する制御パイプラインと、前記処理実行不可によりアボートされた同一のアドレスに対するリクエストの発生順序を保持し、前記制御パイプラインに入力されたリクエストのうち前記同一のアドレスを有し且つ前記発生順序の先頭以外のリクエストについて第２のアボート処理を行う同一アドレスリクエスト調停部と、を有する演算処理装置である。
【発明の効果】
【００１１】
第１の側面によれば，同一アドレスの複数のリクエストが競合した場合、リクエスト間で不均衡な制御を受けることを抑制する。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態におけるプロセッサ（ＣＰＵチップ）の構成例を示す図である。
【図２】プロセッサ内の１つのクラスタとそれに対応する構成だけを抽出して示す図である。
【図３】コヒーレンシ制御部の構成例を示す図である。
【図４】コヒーレンシ制御パイプラインの構成例を示す図である。
【図５】第1の実施の形態におけるコヒーレンシ制御部の構成例を示す図である。
【図６】本実施の形態におけるコヒーレンシ制御パイプライン12の構成を示す図である。
【図７】同一アドレスリクエスト調停回路17の保持情報と主な構成回路を示す図である。
【図８】同一アドレスリクエスト調停回路の入力リクエスト情報に対する処理を示すフローチャート図である。
【図９】同一アドレスリクエスト調停回路の入力リクエスト情報に対する処理を示すフローチャート図である。
【図１０】同一アドレスリクエスト調停回路17のリクエストの初回登録の動作を示す図である。
【図１１】同一アドレスリクエスト調停回路17の後続のリクエストのチェック及び登録の動作を示す図である。
【図１２】同一アドレスリクエスト調停回路17の待ちリクエストの解除動作を示す図である。
【図１３】同一アドレスリクエスト調停回路17のアドレス監視終了の動作を示す図である。
【図１４】待ちリクエストリストの第1の変形例を示す図である。
【図１５】待ちリクエストリストの第２の変形例を示す図である。
【図１６】第1の実施の形態の第1の変形例のコヒーレンシ制御部の構成を示す図である。
【図１７】第1の実施の形態の第２の変形例のコヒーレンシ制御部の構成を示す図である。
【図１８】第２の実施の形態におけるキャッシュの構成を示す図である。
【発明を実施するための形態】
【００１３】
図１は、本実施の形態におけるプロセッサ（ＣＰＵチップ）の構成例を示す図である。プロセッサ１は、命令をデコードして演算処理を発行する命令制御部（図示せず）と演算処理回路（図示せず）と第１レベル（L1）データキャッシュL1D及びL1命令キャッシュL1Iと、第２レベル（L2）キャッシュとをそれぞれ有するCPUコア（コア）CORE_0−CORE_nを有する。
【００１４】
さらに、プロセッサ１は、複数のコアCORE_0−CORE_nが複数のグループ（またはクラスタCLS）に分けられ、各グループに対応して設けられた複数の最上位レベルキャッシュ（LLC）LLC_0−LLC_3を有する。各LLCは、各グループ内の複数のコアにより共有される。各LLCは、通常のキャッシュと同様に、タグメモリとデータメモリを有し、タグメモリには、自分のデータメモリのキャッシュラインに関するタグデータ（有効ビット、アドレス、状態など）を記憶する。
【００１５】
また、プロセッサ１は、複数のLLC間のコヒーレンシを維持する制御を行うコヒーレンシ制御部CHR_0−CHR_3と、メモリMEMへのアクセスを制御するメモリコントローラMC_0−MC_3を有する。
【００１６】
各コヒーレンシ制御部は、後で詳述するとおり、LLCのタグのコピーと、各LLCや他のCPU及びIOデバイスからのメモリリクエストを受け付けるリクエストポートと、各リクエストに対してキャッシュコヒーレンシを維持するための各種処理を実行するミスアクセス制御部、オーダー制御部、リプレースバッファなどの処理ユニットを有する。
【００１７】
４つのメモリMEM_0−MEM_3は、アドレスインターリーブされている。例えば、前メモリの物理アドレスがPA[k-1:0]とｋビットの場合、４つのメモリの物理アドレスは次の通りになる。
MEM_0はPA[m:n]=00
MEM_0はPA[m:n]=01
MEM_0はPA[m:n]=10
MEM_0はPA[m:n]=11
ここで、ｍ、ｎはｋより小さく０より大きい自然数（０＜ｎ＜ｍ＜ｋ）である。
【００１８】
コヒーレンシ制御部CHR_0−CHR_3は、LLCのタグのコピーを有する。各コヒーレンシ制御部のLLCタグコピーは、上記のアドレスインターリーブに対応して、それぞれ同様の物理アドレスに対応するLLCのキャッシュラインのタグデータを記憶する。
【００１９】
４つのLLCそれぞれは４つのコヒーレンシ制御部CHR_0−CHR_3に接続され、各LLCはキャッシュミスした場合のメモリアクセスを要求するメモリリクエストを対応するコヒーレンシ制御部に発行する。逆に、各コヒーレンシ制御部は入力されたメモリリクエストに必要な処理の要求をオーダーとしてメモリ側とは逆方向の下位レベル方向の４つのLLCに発行する。
【００２０】
また、４つのコヒーレンシ制御部CHRそれぞれは、メモリアクセスのリクエストやキャッシュのデータのメモリへの書き戻しのリクエストを、メモリ側と同じ上位レベル方向のアドレスが対応するメモリコントローラMCに発行する。
【００２１】
そして、プロセッサ１は、他のCPUと通信するためのルータRTと、IOデバイスと通信するためのIO制御部IOを有する。
【００２２】
図２は、プロセッサ内の１つのクラスタとそれに対応する構成だけを抽出して示す図である。図１の複数のコアCORE_0−CORE_nは、４つのクラスタ（コア群）CLSに分けられる。したがって、図１には、４つのクラスタに対応して４つのLLC（LLC_0−LLC_3）が設けられている。
【００２３】
一方、図２に示した１つのクラスタCLSは、複数のコアCORE_0−CORE_kを有する。そして、そのクラスタCLSの複数のコアは、１つのLLC（LLC_0）を共有する。
【００２４】
図１で説明したとおり、４つのコヒーレンシ制御部CHR_0−CHR_3は、アドレスインターリーブされた４つのメモリMEM_0−MEM_3と、それに対応する４つのメモリコントローラMC_0−MC_3とに対応し、それぞれ接続される。
【００２５】
したがって、１つのLLC（LLC_0）は、全てのコヒーレンシ制御部CHR_0−CHR_3にメモリリクエストを発行可能であり、メモリリクエストのアドレスに対応したコヒーレンシ制御部にメモリリクエストを発行する。
【００２６】
図１、図２において、プロセッサ１の動作例について簡単に説明する。いずれかのコアがメモリMEM内のデータを読み出すロード命令を実行してコア内のL2キャッシュでキャッシュミスすると、L2キャッシュが、キャッシュミスに対応してメモリのデータを読み出すメモリリクエストをLLCに発行する。さらに、LLCがメモリリクエストについてキャッシュミスすると、リクエストのアドレスに対応するコヒーレンシ制御部CHRにメモリリクエストを発行する。
【００２７】
コヒーレンシ制御部は、LLCタグコピーを検索して、残りのLLCがそのアドレスのデータを保持しているか否かをチェックする。ここでキャッシュヒットすれば、コヒーレンシ制御部は、データを保持しているLLCに対して、保持しているデータをメモリリクエストの要求元のLLCに転送するようオーダーを発行する。一方、キャッシュミスすれば、コヒーレンシ制御部は、メモリコントローラMCにメモリへのアクセスを要求するメモリリクエストを発行し、メモリからのデータ応答があれば、メモリリクエストの要求元のLLCにデータ応答する。
【００２８】
さらに、コヒーレンシ制御部は、コアが前述のロード命令を実行した場合や、ストア命令を実行してキャッシュへの書き込みが発生した場合に、ＭＥＳＩプロトコルに基づく種々の処理の要求を、より上位レベルのメモリコントローラMCにはリクエストとして、より下位レベルのLLCにはオーダーとして発行する。リクエストとオーダーはいずれもある処理の要求であるが、処理の要求先により区別して呼ぶこととする。ここで、より上位レベルとはメモリ階層に近づく方向を、より下位レベルとは下位レベルのキャッシュやコアに近づく方向を意味する。
【００２９】
［アドレスに対するリクエストについて］
キャッシュL2,LLCとコヒーレンシ制御部CHRは、いずれもメモリ空間のアドレスに対するリクエストを受け付け、各リクエストに対応する処理の実行を制御する。ここで、メモリ空間のアドレスは、（１）図１，２に示したメインメモリMEMのアドレスでありキャッシュ可能なアドレス（chacheable address）と、（２）システム用のブートROMやSRAM等のメモリや周辺デバイスのレジスタなどの非キャッシュ可能（キャッシュ不能）なアドレス（Non-chacheable address）とを含む。ただし、非キャッシュ可能なアドレスには、メインメモリMEM内の一部のアドレスが含まれる場合もある。
【００３０】
したがって、メモリ空間内のあるアドレスに対するリクエスト（読み出しまたは読み出し）は、（１）上記のキャッシュ可能なアドレスに対するリクエストと、（２）非キャッシュ可能なアドレスに対するリクエストが含まれる。そして、キャッシュ可能なアドレスに対するリクエストは、（１−１）自分のCPU（ローカルCPU）内のL2キャッシュやLLCなどのキャッシュとコヒーレンシ制御部より下位レベルでのキャッシュミスにより発行されたリクエストと、（１−２）IOデバイス（例えばDMA（Dynamic Memory Access））や他のCPU（リモートCPU）が発行したリクエストなどが含まれる。
【００３１】
前述のプロセッサCPUの動作例では、上記の（１−１）のリクエストについて説明したが、キャッシュとコヒーレンシ制御部は、（１−１）のリクエストに加えて、上記の（１−２）（２）のリクエストを受け付けて処理を制御する場合もある。
【００３２】
［コヒーレンシ制御部の概略］
図３は、コヒーレンシ制御部の構成例を示す図である。LLCやL2キャッシュを含むキャッシュも、コヒーレンシ制御部と類似する構成を有する。以下はコヒーレンシ制御部の構成例について説明する。
【００３３】
キャッシュコヒーレンシ制御部CHRは、下位レベルのキャッシュやコア（前述のクラスタCLS）からのリクエストを受け付けるリクエストポートRP_0−RP_3を有する。コヒーレンシ制御部にとって下位レベルのキャッシュはLLCである。図１の例では、４つのLLCが設けられおり、それぞれの要求元のLLCに対応して４つのリクエストポートRP_0−RP_3が設けられている。各リクエストポートRPは、複数のエントリを有し、同じ要求元から複数のリクエストを複数のエントリに受け付ける。
【００３４】
さらに、コヒーレンシ制御部は、IOデバイスからのIOリクエストを受け付けるリクエストポートRP_4と、他のCPUからのリモートリクエストを受け付けるリクエストポートRP_5と、メモリリクエストに対するメモリコントローラからの応答を受け付けるリクエストポートRP_6などを有する。この点、コヒーレンシ制御部と異なり、キャッシュは、上位レベルからのオーダーを受け付けるリクエストポートと、上位レベルからのメモリ応答を受け付けるリクエストポートを有する。
【００３５】
さらに、コヒーレンシ制御部は、４つのリクエストポートRP_0−RP_3のいずれかを選択するコアまたはキャッシュ間調停回路１０と、その選択されたリクエストポートと他のリクエストポートRP_4−RP_6のいずれかを優先度に基づいて選択するプライオリティ調停回路１１を有する。
【００３６】
そして、コヒーレンシ制御部は、選択されたリクエストポートのエントリのリクエストが投入（入力）されるコヒーレンシ制御パイプライン１２と、入力されたリクエストに対応する種々の処理を行う処理ユニット20_1、20_2を有する。ここで、図中、処理ユニットは、２つの部分20_1と20_2に分割して示されるが、内部処理のステージに対応して２つの部分に分けて表示されるだけであり、処理ユニット20_1,20_2で１つの処理ユニットを構成する。また、処理ユニットは個々の処理毎に一連のパイプラインで構成される。
【００３７】
コヒーレンシ制御部の処理ユニット20は、例えば、LLCのタグメモリのコピー13_1、13_2と、ミスアクセス制御部14_1、14_2と、オーダー制御部15_1、15_2と、リプレースバッファ16_1、16_2とを有する。この点、キャッシュは、自らのデータメモリとそのタグメモリを有する。
【００３８】
LLCのタグメモリのコピー15は、コヒーレンシ制御パイプライン12により、下位レベルのLLCでのキャッシュミスの発生に基づいて発行されたリクエストのアドレスについて検索され、他のLLCがデータを保持していないか否かをチェックされる。さらに、リクエストに対する応答がリクエストポートRP_6から入力され、LLCが応答に対応してLLCのタグメモリを更新する場合、LLCのタグメモリのコピー13も更新処理される。
【００３９】
ミスアクセス制御部14は、LLCでのキャッシュミスに基づくメモリリクエストのアドレス、またはIOデバイスやリモートCPUからのリクエストのアドレスが、LLCのタグメモリのコピー13でキャッシュミスになった場合、メモリコントローラを経由してメモリリクエストを発行する。または、上記のローカルからのリクエストがキャッシュミスになった場合、他のCPUのメモリ宛てにリモートリクエストを発行する。いずれもメモリシステムに対するメモリ系のリクエストである。ミスアクセス制御部は、メモリシステムにリクエストを発行すると、メモリシステムからデータ応答を受信するまでの間、後続の同一アドレスのリクエストを受け付けないよう排他制御を行う。
【００４０】
オーダー制御部15は、下位レベルのコアやキャッシュに対する要求をオーダーとして発行する。例えば、下位レベルからのリクエストのアドレスがLLCのタグメモリのコピー13でキャッシュヒットした場合、ヒットしたデータを所持するLLCに対してデータ転送のオーダーを発行する。あるいは、下位レベルのコアやキャッシュ間のコヒーレンシを維持するために、あるコアがデータをストアする場合、他のコアがキャッシュに所持しているデータをMESIプロトコルなどに従いキャッシュ無効化するオーダーを発行する。これらの場合、オーダー制御部は、キャッシュ無効化が完了するまで、後続の同一アドレス要求に対するリクエストを受理しないよう排他制御を行う。
【００４１】
リプレースバッファ16は、下位レベルのキャッシュから追い出されるデータをメモリに書き戻すライトバックをメモリコントローラに発行する。コヒーレンシを保つために、一連の書き込みが完了するまでの間、後続の同一アドレスのリクエストを受理しないよう排他制御を行う。
【００４２】
ミスアクセス制御部14、オーダー制御部15、リプレースバッファ16は、それぞれの処理の依頼を受け付ける受付エントリ（一種のレジスタ）を有する。受付エントリには受け付けたリクエストの情報（リクエストIDやリクエストアドレスを含む）が格納される。処理ユニット内の各処理部がそのリクエストに対応する処理を開始すると、同じアドレスに対する新たな処理を受け付けないように制御される。また、受付エントリの数は有限であり、受付エントリに空きがなければ、新たな処理を受け付けることができない。これらの制御は、制御パイプライン12が実行する。
【００４３】
図４は、コヒーレンシ制御パイプラインの構成例を示す図である。コヒーレンシ制御パイプライン12は、あるアドレスに対するリクエストについて、処理ユニット20が処理実行可能か否かを判定し、リクエストの処理が実行不可の場合そのリクエストをアボートし、処理実行可能の場合処理ユニット20にリクエストに対応する処理を発行する。処理実行可能か否かとは、リクエストのアドレスが処理中のアドレスと競合しないか否か、処理部の受付エントリなどの回路資源が獲得可能か否かなどである。アドレスが競合せず回路資源が獲得可能であれば、リクエストに対応する処理を実行可能となる。処理が発行されたリクエストはリクエストポートから削除され、一方、アボートされたリクエストはリクエストポートに残されて、再度コヒーレンシ制御パイプラインに入力（投入）される。
【００４４】
コヒーレンシ制御パイプライン12は、アドレス／TAGチェック部121と、処理判定部122と、資源判定部123とを有する。コヒーレンシ制御パイプラインにはリクエストの情報（リクエスト有効ビットR_valid、リクエスト要求元ID(core_id)、リクエストエントリID（entry_id）、リクエストアドレスR_id）が入力され流れていく。
【００４５】
具体的な動作について説明すると、アドレス／タグチェック部121は、入力されたリクエストについてLLCのタグメモリコピー13_1にキャッシュ判定を依頼する (12A) と共に、ミスアクセス制御部14_1とオーダー制御部15_1とリプレースバッファ16_1に、入力リクエストのアドレスと各処理部14,15,16が処理中のアドレス（排他アドレス）と一致するか否かのチェックを依頼する（12A）。処理中のアドレスは前述の受付エントリに保持されている。そして、アドレス／タグチェック部は、LLCタグメモリコピーのキャッシュ判定結果（12B）、ミスアクセス制御部とオーダー制御部とリプレースバッファそれぞれの排他アドレスと一致するかの否かのチェック結果（12B）を取得する。排他アドレスと一致する場合は処理実行不可能であるので、アドレス／タグチェック部121は第１のアボート信号Ab1を出力する。
【００４６】
さらに、処理判定部122は、メモリリクエストに必要な処理を判定する。そして、資源判定部123が、判定された処理に対応するミスアクセス制御部14_2、オーダー制御部15_2、リプレースバッファ16_2のいずれかで、処理に必要な回路資源を獲得できるか否かの判定を行う。処理に必要な回路資源の例は、前述の受付エントリなどである。資源判定部は、回路資源の獲得ができない場合は処理実行不可能であるので、第２のアボート信号Ab2を出力する。また、その他何らかの理由でパイプラインストールが発生する場合も実行不可能であるので、図示しないアボート信号が出力される。
【００４７】
コヒーレンシ制御パイプラインは、論理和ゲート124により全てのアボート信号Ab1,Ab2を論理和演算したアボートフラグABORTを出力する。このアボートフラグABORTが「１」の場合リクエストがアボートされたことを意味し、リクエストに対応する処理は実行されず、リクエストは元のアクセスポートに差し戻される。
【００４８】
コヒーレンシ制御パイプライン12は、処理実行可能の場合、処理ユニット20_2に処理判定部122が判定した処理12Cを発行する。発行する処理12Cは、例えば、タグメモリコピー13_2への更新処理、ミスアクセス制御部14_2へのエントリ登録または開放処理、オーダー制御部15_2へのオーダー発行処理、リプレースバッファ16_2へのエントリ登録または開放要求などである。
【００４９】
上記の資源管理において、処理のための資源獲得に失敗すると、投入されたリクエストはアボートされ、アボートフラグABORT付きのリクエスト情報12Dがリクエストポートにフィードバックされ、リクエストが差し戻される。そして、差し戻されたリクエストは、リクエストポート内の他のリクエストの後に再度パイプラインに入力される。具体的には、リクエストポートRPは、リクエスト要求元IDとリクエストエントリIDが一致しアボートフラグABORTが「０」の場合、リクエストポート内にエントリされているリクエストを無効化（削除）する。
【００５０】
以上のとおり、コヒーレンシ制御パイプラインは、あるアドレスに対するリクエストをパイプライン処理し、処理ユニット20内で処理中のアドレスを処理部内の受付エントリ等の回路資源に記録し、同じアドレスに対して不整合のないようにリクエストを制御する。処理ユニットでの処理は、
（１）MESIプロトコルなどキャッシュの状態遷移に基づいたLLC TAGコピー13_2の更新と、
（２）ミスアクセス制御部14_2によるメモリ階層に対するリクエストの発行、リモートCPUに対するリクエスト、IOデバイスに対するIOリクエストなど、システムに対して発行される全てのリクエストと、
（３）オーダー制御部15_2による下位レベルに対するオーダーの発行と、
（４）リプレースバッファ16_2による下位レベルのキャッシュのデータ吐き出しに伴うメモリへのライトバックが含まれる。
【００５１】
一つのリクエストを処理している間、他のリクエストを処理できない制御をブロッキング制御といい、リクエストを次々に処理できるような制御をノンブロッキング制御という。図１、図２のコヒーレンシ制御パイプラインは、ノンブロッキング制御である。コヒーレンシ制御パイプラインは、各種資源(LLC TAGコピーや、ミスアクセス制御部、オーダー制御部、リプレースバッファ内の受付エントリレジスタ）の参照や更新などがパイプライン化された構成で、仮に資源がロックされていて処理できないリクエストがあったとき、そのリクエストをアボートする。アボートされたリクエスト情報12Dは、アボートフラグABORTを付けてリクエストポートにフィードバックされ、リクエストポートに差し戻しされる。それにより、リクエスト間の順序を維持しないで先にパイプラインに投入されたリクエストの追い抜きが可能になる。
【００５２】
コヒーレンシ制御パイプラインがノンブロッキング制御を行うことに伴い、以下のようなリクエストの要求元間またはリクエスト間で処理の進みやすさに不均衡が発生する。すなわち、パイプラインに投入されたリクエストは、処理中のアドレスと競合せず、処理対象の回路資源を獲得できると、処理の実行権利を獲得する。従って、複数のリクエストが同一のアドレスで競合しあうと、共にアボートされパイプラインに再投入されるが、偶然処理ユニットでのロックが解放された直後に投入されたリクエストが回路資源を獲得する。そのため、特定のリクエストポート（要求元）のリクエストに着目すると、何度も回路資源の獲得に失敗してアボートされる要求元がある一方で、投入時にタイミングよく回路資源を獲得した要求元は処理を実行することができる。結果的に、リクエストの要求元間でまたはリクエスト間で処理の進みやすさに不均衡が発生する。
【００５３】
例えば、スレッドが並列化されたアプリケーションは、複数のスレッドでジョブを実行し最後のスレッドが終了するとジョブ終了の同期が取られる。このような場合、スレッド間つまり要求元であるコア間で処理の不均衡が発生すると、ジョブ終了までの時間が長くなり、全体の処理性能が低下する。
【００５４】
キャッシュ内のキャッシュ制御パイプラインにおいても、上記と同様の問題が発生する。そこで、以下、同一アドレスリクエスト調停回路をコヒーレンシ制御部に適用した第1の実施の形態と、キャッシュに適用した第２の実施の形態について説明する。
【００５５】
［第1の実施の形態］
図５は、第1の実施の形態におけるコヒーレンシ制御部の構成例を示す図である。図５のコヒーレンシ制御部は、同一アドレスの複数のリクエストの間で処理実行用の回路資源の獲得の順番を調停する同一アドレスリクエスト調停回路17を有する。
【００５６】
前述の通り、コアまたは下位レベルキャッシュ（LLC）からのリクエストは、要求元別に設けられたリクエストポートRP_0-RP_3にエントリされ、コア／キャッシュ間調停回路10とプライオリティ調停回路11により選択されてコヒーレンシ制御パイプラインに入力（投入）される。そして、コヒーレンシ制御パイプライン12にて処理ユニット20_2の回路資源を獲得できるかチェックされる。
【００５７】
同一アドレスリクエスト調停回路17は、監視アドレスと同一のアドレスを有するリクエストの入力（投入）順を保持する待ちリクエストリストに、そのリクエストが処理ユニットの20の回路資源を獲得するまで保持する。そして、監視アドレスと同一のアドレスのメモリリクエストがパイプラインに入力されると、同一アドレスリクエスト調停回路17は、そのリクエストが待ちリクエストリストの先頭以外の場合に、コヒーレンシ制御パイプラインにリクエストの強制アボートAb3を発行する。強制アボートを発行されたリクエストはリクエストポートに差し戻される。先頭のリクエストは強制アボートされず、制御パイプラインによる回路資源獲得のトライが許される。これにより、同一アドレスリクエスト調停回路17は、監視アドレスのメモリリクエストについては、待ちリクエストリストの順番に、そのリクエストに対応する処理が実行されるように調停する。監視対象のアドレス以外のアドレスのメモリリクエストは、調停回路による強制アボートの対象外である。
【００５８】
図５に示した構成では、同一アドレスリクエスト調停回路17は、コア／キャッシュ間調停回路10が出力するリクエストRQ_inを入力し、コアまたは下位レベルキャッシュからのリクエストに限定して調停する。ただし、後述する通り、IOリクエストやリモートリクエストなども調停の対象にしてもよい。また、図示しない非キャッシュ可能アドレスに対するリクエストも調停の対象にしてもよい。
【００５９】
同一アドレスリクエスト調停回路17は、コヒーレンシ制御パイプラインから出力されるリクエスト情報12Dも入力する。出力リクエスト情報には、パイプラインを流れた結果を示すアボートフラグが含まれ、アボートフラグはリクエストが回路資源の獲得に成功したか否かを示す。
【００６０】
同一アドレスリクエスト調停回路17は、入力されるリクエストのアドレスが監視アドレスと一致するが、入力されるリクエストが待ちリクエストリスト内の先頭リクエストと一致しない場合、強制アボート信号Ab3を発行し、その強制アボートされたリクエストを待ちリクエストリストに登録する。ただし、登録済みの場合は登録しない。一方、同一アドレスリクエスト調停回路17は、入力されるリクエストが待ちリクエストリスト内の先頭リクエストと一致する場合（当然監視アドレスと一致）、そのリクエストには強制アボートAb3を発行せず、パイプラインでの回路資源獲得をトライさせる。
【００６１】
同一アドレスリクエスト調停回路17は、出力リクエスト情報12DのアボートフラグABORTが「０」（アボートされず回路資源獲得に成功した）の場合、そのリクエストが待ちリクエストに登録されている場合は、その登録を削除する。登録を削除されるリクエストは先頭リクエストである。
【００６２】
図５の構成において、上記の同一アドレスリクエスト調停回路17以外は、図３と同じである。
【００６３】
図６は、本実施の形態におけるコヒーレンシ制御パイプライン12の構成を示す図である。図４の構成と異なる構成は、次のとおりである。すなわち、同一アドレスリクエスト調停回路17が、パイプラインへの入力リクエスト情報RQ_in（パイプラインのステージ０の信号）と、パイプラインからの出力リクエスト情報12D（パイプラインの最終ステージNの信号）とを入力する。そして、同一アドレスリクエスト調停回路17が発行する強制アボートAb3がパイプライン12に入力され、論理和ゲート124がパイプライン内で発行されるアボート信号Ab1, Ab2と強制アボートAb3との論理和演算結果をアボートフラグABORTとして出力する。アドレス・TAGチェック部121と、処理判定部122と、資源判定部123は図４と同等である。
【００６４】
従って、本実施の形態では、コヒーレンシ制御パイプライン12による処理ユニット20での処理に必要な回路資源を獲得できなかった場合（Ab1, Ab2）に加えて、同一アドレスリクエスト調停回路17により強制アボートされた場合（Ab3）も、リクエストはアボートされて、リクエストポートに差し戻される。
【００６５】
図７は、同一アドレスリクエスト調停回路17の保持情報と主な構成回路を示す図である。同一アドレスリクエスト調停回路は、保持情報として、監視回路が監視状態か否かを示す監視有効フラグM_valid、監視対象アドレスの監視アドレスM_add、監視アドレスと同じアドレスのメモリリクエストの到着順を保持する待ちリクエストリストW_list及び順位情報W_rankを保持する。
【００６６】
図７の例では、待ちリクエストリストW_listは、４つの要求元であるコア／キャッシュ０−３それぞれに１つのエントリを有し、エントリには、有効ビットW_validとエントリID(entry_id)が格納される。要求元のIDとエントリIDにより、４つのリクエストポートRP_0-RP_3内のすべてのリクエストを特定できる。ただし、待ちリクエストリストの構成は、後述する通りこの構成に限定されない。
【００６７】
同一アドレスリクエスト調停回路は、構成回路として、後続の入力リクエスト情報のアドレスR_addと監視アドレスM_addとを比較するアドレスマッチ回路171と、入力リクエストが待ちリクエストリストの先頭か否かを判定する先頭判定論理回路172と、強制アボートされたメモリリクエストが待ちリクエストリストに登録可能な場合に登録するセット信号を生成する監視セット生成論理回路173と、パイプラインでアボートされなかったリクエストが待ちリクエストリストの先頭リクエストの場合に先頭リクエストを削除するリセット信号を生成する監視リセット生成論理回路174と、待ちリクエストリストが空になったか否かを判定する監視終了判定論理回路175とを有する。
【００６８】
図７において、複数の監視アドレスM_addを監視対象にする場合、同一アドレスリクエスト調停回路17は、監視アドレスM_addと、待ちリクエストリストW_listと、順位情報W_rankとのセットを、監視アドレス毎に保持する。
【００６９】
図８は、同一アドレスリクエスト調停回路の入力リクエスト情報に対する処理を示すフローチャート図である。図８は、同一アドレスリクエスト調停回路に、調停回路がアドレス監視中でない状態で入力されるリクエストとそのアドレスを新規登録する処理と、同じアドレスの後続リクエストを追加登録する処理と、同じアドレスで待ちリクエストリストの先頭以外の後続リクエストを強制アボートする処理を有する。
【００７０】
同一アドレスリクエスト調停回路は、最初に、監視有効ビットM_validが有効状態か否かチェックする(S2)。監視有効ビットM_validが「０」の場合、アドレス監視を行っていない状態であり、新たなアドレスを登録可能であることを示す。監視有効ビットM_validが「０」の時リクエスト情報がパイプライン12のステージ０に入力されると、新規のアドレス監視を開始し（S3）、監視有効ビットM_validを「１」にセットし（S4）、そのリクエストを待ちリクエストリストW_listに登録し、順位情報W_rankを更新する（S5）。
【００７１】
待ちリクエストリストには、処理部での資源獲得を待っているリクエストとその順位を識別できる情報が記録されれば良い。図７に示された待ちリクエストリストW_listと順位情報W_rankに限定されないが、図７の例では、待ちリクエストリストW_list内のリクエストの要求元別に保持される有効信号W_valid及びエントリID（entry_id）と、順位情報W_rankとにより待ちリクエストが管理される。具体的には、パイプラインに入力されたステージ０の入力リクエスト情報RQ_inのリクエスト要求元IDのエントリに有効ビットW_valid=1とリクエストエントリID（entry_id）を登録し、順位情報W_rankに待ちリクエストの発生順を登録する。
【００７２】
さらに、同一アドレスリクエスト調停回路は、入力リクエスト情報RQ＿inのリクエストアドレスR_Addを監視アドレスM_addに登録する（S6）。同一アドレスリクエスト調停回路は、これ以降、新規登録されたリクエストが回路資源を獲得するまで、監視アドレスと同一アドレスの他のリクエストを追跡し、強制アボートAb3を発行して、先頭リクエストより先に他のリクエストが回路資源を獲得できないように調停する。
【００７３】
リクエストがパイプライン12に入力されたとき監視有効ビットM_validが「１」の場合、後続リクエストについて待ちリストの先頭か否かのチェックと監視アドレスと同一か否かのチェックが行われる（S7）。最初に、同一アドレスリクエスト調停回路は、後続のリクエストが待ちリクエストリストの先頭のリクエストと同じか否かを、待ちリクエストリストW_listと順位情報W_rankとに基づいて判定する（S8）。後続のリクエストが先頭リクエストと一致する場合（S8のYES）、回路資源獲得の機会を先頭で待っているリクエストであるため、同一アドレスリクエスト調停回路は、そのリクエストに対して強制アボートを発行せず、そのためそのリクエストに回路資源獲得の機会を与える。
【００７４】
先頭リクエストと一致しない場合（S8のNO）、同一アドレスリクエスト調停回路は、後続のリクエストのアドレスR_addが監視アドレスM_addと一致するか否かチェックする（S9）。一致する場合（S9のYES）、監視アドレスと競合するリクエストであり且つ待ちリクエストリストにて先頭で待っているリクエストではないことを意味する。そこで、同一アドレスリクエスト調停回路は、そのリクエストに強制アボートAb3を発行し（S10）、パイプラインでそのリクエストに回路資源の獲得を必ず失敗させて、待ちリクエストリストの先頭以外のリクエストに回路資源が獲得されることを防ぐ。
【００７５】
そして、同一アドレスリクエスト調停回路は、強制アボートされたリクエストが待ちリクエストリストに未登録でかつ待ちリクエストリストに空きがある場合（S11のYES）、そのリクエストを待ちリクエストリストに追加登録し、順位情報を更新する（S12）。工程S11がNOの場合、そのリクエストは待ちリクエストリストに追加登録されない。
【００７６】
図7の待ちリクエストリストW_listは、資源節約の観点から、要求元別に１つのエントリしか登録できない。この場合、工程S11では、待ちリクエストリストの要求元に空きがあるか否かの判定だけで良い。１つのエントリしかないので、リストに空きがあれば自分のリクエストは未登録であることを意味する。待ちリクエストリストの別の例については、後で詳述する。
【００７７】
後続のリクエストが、監視アドレスと一致しない場合（S9のNO）、そのリクエストに対して強制アボートは発行されず、制御パイプラインはそのリクエストに回路資源獲得の機会を与える。
【００７８】
図９は、同一アドレスリクエスト調停回路の出力リクエスト情報に対する処理を示すフローチャート図である。出力リクエスト情報（最終ステージNのリクエスト情報）は、コヒーレンシ制御パイプライン12において、リクエストが受理されて回路資源獲得に成功したか、受理されずにアボートされたかを示すアボートフラグABORTを有する。リクエストがアボートされた場合（S21のYES）、そのリクエストはリクエストポートに差し戻されるので、同一アドレスリクエスト調停回路は、そのリクエストを待ちリクエストリストに残したままして、そのリクエストの監視を継続する。
【００７９】
リクエストがアボートされなかった場合（S21のNO）、同一アドレスリクエスト調停回路は、そのリクエストが待ちリクエストW_list内に存在するか否かチェックする（S22）。存在する場合（S22のYES）、つまり、そのリクエストが待ちリクエストの先頭のリクエストだった場合、同一アドレスリクエスト調停回路は、そのリクエストを待ちリクエストリストから削除し、順位情報W_rankを更新する（S23）。さらに、削除した結果待ちリクエストリスト内に残りのリクエストが存在しない場合、つまり、監視アドレスのアクセスを要求していた別のリクエストが存在しない場合（S24のYES）、同一アドレスリクエスト調停回路は、監視有効ビットM_validを「０」に変更して、監視アドレスを有するリクエストの監視を終了する（S25）。リスト内に残りのリクエストが存在する場合（S24のNO）、同一アドレスリクエスト調停回路は、監視有効ビットの変更を行わないで、監視アドレスのリクエストの監視を継続する（S26）。
【００８０】
［同一アドレスリクエスト調停回路の具体例］
次に、同一アドレスリクエスト調停回路17の具体的な動作について説明する。具体的な動作は、リクエストの初回登録と、後続リクエストのチェック及び登録と、待ちリクエストの解除動作と、アドレス監視終了動作とである。
【００８１】
［リクエストの初回登録動作］
図１０は、同一アドレスリクエスト調停回路17のリクエストの初回登録の動作を示す図である。図１０には、入力リクエスト情報RQ_inに基づいて、監視有効ビットM_valid、監視アドレスM_add、待ちリクエストリストW_list、順位情報W_rankがどのように更新されるかが記載されている。リクエストの初回登録であるので、監視有効ビットM_validは「０」（アドレスの監視を行っていない状態）に、監視アドレスM_addは未登録、待ちリクエストリストW_listは空、順位情報W_rankも空である。
【００８２】
同一アドレスリクエスト調停回路17に入力リクエスト情報RQ_inが入力されたとき監視有効ビットM_validが「０」の場合、アドレスの管理が行われていない状態であるので、調停回路は入力されたメモリアクセスのアドレス等を新たに登録する。すなわち、入力リクエスト情報RQ_inのリクエスト有効ビットR_validの「１」に基づいて、監視有効ビットM_validが「１」にセットされ、監視アドレスM_addが「0x1234567」にセットされ、待ちリクエストリストW_listの要求元０（core_id=0）のエントリに待ち有効ビットW_valid=1と、エントリID(entry_id)=0が登録され、順位情報W_rankの先頭エントリに要求元ID=0がセットされる。この結果、パイプラインに入力されたリクエストが同一アドレスリクエスト調停回路17に登録され、以降その監視アドレスと同じアドレスの後続のリクエストが監視される。
【００８３】
［後続リクエストのチェック及び登録動作］
図１１は、同一アドレスリクエスト調停回路17の後続のリクエストのチェック及び登録の動作を示す図である。この例では、後続の入力リクエスト情報RQ_inが、監視アドレスM_addと同じリクエストアドレスR_add、「0x1234567」、を有し、要求元IDがcore_id=1、エントリIDがentry_id=1である。
【００８４】
同一アドレスリクエスト調停回路17は、先頭判定論理回路172により後続リクエストが待ちリクエストリストの先頭リクエストと一致するか否かを判定する。この判定は図８の工程S8に対応する。この例では、待ちリクエストリストW_listの先頭のリクエストである要求元ID（core_id）が「０」でエントリID(entry_id)が「０」であるので、後続リクエストは先頭のリクエストと一致しない。
【００８５】
その結果、先頭判定論理回路172は、アドレスチェック有効ビットchk_valを「１」にし、アドレスマッチ回路171に監視アドレスM_addと後続リクエストのリクエストアドレスR_addとが一致するか否かの判定を行わせる。この判定は図８の工程S9に対応する。この例では、両アドレスが一致し、アドレスマッチ回路171がアドレスマッチ信号add_muchを「１」にし、それにより強制アボートAb3をパイプライン12に通知する。つまり、後続のリクエストは待ちリクエストリストの先頭リクエストではなく、且つ監視アドレスとアドレスが一致する。その結果、同一アドレスリクエスト調停回路17は、強制アボートAb3をパイプラインに通知する。これにより、後続のリクエストの回路資源の獲得が強制的に失敗させられる。
【００８６】
強制アボートが出力された後続のリクエストは、待ちアクセスリストW_listに登録されていなければ、そして、空きエントリがあれば、新たな待ちアクセスとして登録される。そこで、同一アドレスリクエスト調停回路17は、監視セット生成論理回路173に、待ちアクセスリスト内に後続のリクエストを登録すべきか否かをチェックさせる。この判定は図８の工程S11に対応する。待ちリクエストリスト内の後続のリクエストの要求元のエントリが空いている場合、同一アドレスリクエスト調停回路17は、待ちリクエストリストW_listの後続リクエストに対応する要求元のエントリに、有効ビットW_valid「１」と、リクエストコア内のエントリID（entry_id）「１」をセット（登録）する。さらに、順位情報W_rankに要求元ID「１」の順位を「１」に設定する。この結果、強制アボートされた後続のリクエストは、待ちリクエストリストに2番目に待っているリクエストとして登録される。
【００８７】
図７の例では、待ちリクエストリストが要求元別の１つのエントリしか設けられていないので、順位情報W_rankは、最左端を先頭とする４つのエントリに各順位の要求元ID（core_id）を格納する。したがって、図１１の状態では、順位情報W_rankには左側から「０」「１」が格納され、先頭の要求元IDが「０」でその次の要求元IDが「１」であることを示している。
【００８８】
［待ちリクエストの解除動作］
図１２は、同一アドレスリクエスト調停回路17の待ちリクエストの解除動作を示す図である。パイプラインを通過したリクエストがアボートされなかった場合、そのリクエストは回路資源の獲得に成功したことを意味する。したがって、そのリクエストは、回路資源獲得を待っている待ちリクエストリストから削除され、調停対象から解除される。
【００８９】
同一アドレスリクエスト調停回路17は、待ちリクエストの解除動作を、パイプラインを通過して出力される出力リクエスト情報（パイプラインの最終ステージNのリクエスト情報）に基づいて行う。監視リセット生成論理回路174は、出力リクエスト情報のリクエスト有効ビットR_validが「１」であり、そのアボートフラグABORTが「０」である（リクエストがアボートされてない）場合、そのリクエストを特定する要求元ID(core_id)「０」とエントリID(entry_id)「０」が、待ちリクエストリストW_listに存在するか否かを判定する。この判定は図９の工程S20, S21, S22に対応する。
【００９０】
待ちリクエストリストの先頭以外のリクエストは強制アボートされるので、アボートされなかったリクエストが待ちリクエストリストに存在するか否かの判定は、そのリクエストが先頭リクエストか否かの判定と同じである。存在すると判定した場合、監視リセット生成論理回路174は、待ちリクエストリストW_listの先頭リクエストを削除し、順位情報W_rankを更新するリセット信号を生成する。図１２の例では、待ちリクエストリストW_listの要求元IDが「０」のエントリが削除され（有効ビットW_validが「０」に変更）、順位情報W_rankが更新されて最左端の先頭エントリに要求元ID「１」が格納されている。その結果、アボートされなかったリクエストは調停対象から解除される。
【００９１】
図１２には示していないが、その後の後続のリクエストの要求元IDが「１」でエントリIDが「１」の場合で、且つパイプラインでアボートされない場合、待ちリクエストリストから削除されて、そのリクエストも調停対象から解除される。
【００９２】
［アドレス監視終了動作］
図１３は、同一アドレスリクエスト調停回路17のアドレス監視終了の動作を示す図である。図１２において、要求元IDが「１」でエントリIDが「１」のリクエストがパイプラインでアボートされなかった結果、図１３では、待ちリクエストリストの要求元ID「１」の有効ビットW_validが「０」に変更された状態になっている。つまり、待ちリクエストリストの有効ビットW_validはすべて「０」にされ、待ちリクエストが存在していない。
【００９３】
監視終了判定論理回路175は、待ちリクエストリストの全ての有効ビットW_validが「０」であることに基づいて、監視有効ビットW_validを「０」にリセットする。その結果、監視有効ビットW_validが「０」にリセットされ、同一アドレスリクエスト調停回路17は、監視アドレスと同じアドレスのリクエストを監視し回路資源の獲得をリクエストの発生順にする調停を終了する。
【００９４】
この状態で、新たにリクエストがパイプラインに入力されると、図１０の新規登録の動作で登録された監視アドレスに対してリクエスト間の調停動作が再開する。
【００９５】
図１４は、待ちリクエストリストの第1の変形例を示す図である。この待ちリクエストリストW_listは、各要求元（コア／キャッシュ０−３）毎に、複数の待ちエントリ、例えばリクエストポートのエントリ数８と同じ数、を有する。したがって、同じ要求元から同じアドレスに対するメモリリクエストが発生した場合に、全てのメモリリクエストを待ちリストに登録可能である。図１４の場合、順位情報W_rankは図７の例と同様に要求元の順位のみを登録して順位を管理する。または、待ちリクエストリストW_listに登録された全てのリクエストの発生順を登録して管理してもよい。
【００９６】
但し、コヒーレンシ制御部の下位レベルにはLLCが設けられ、そのLLCのミスアクセス制御部が下位レベルのコアまたはキャッシュ毎に同じアドレスのメモリリクエストを１つだけに制限してコヒーレンシ制御部に要求する場合は、図７のように要求元別に１つの待ちエントリを有すれば足りる。
【００９７】
図１５は、待ちリクエストリストの第２の変形例を示す図である。この待ちリクエストリストW_listは、要求元別に登録されず、監視アドレスと同じアドレスのリクエストを要求元にかかわらず発生順に登録する。エントリ数はできるだけ多いほうが望ましい。また、順位情報W_rankは待ちリクエストリストに登録されている全てのエントリの順位を発生順に記憶し管理する。
【００９８】
［第1の実施の形態の第1の変形例］
図１６は、第1の実施の形態の第1の変形例のコヒーレンシ制御部の構成を示す図である。
【００９９】
図５に示したコヒーレンシ制御部では、同一アドレスリクエスト調停回路17が、コア／キャッシュ間調停回路１０が出力するコアまたは下位レベルキャッシュからのリクエストについて、監視アドレスと同一のアドレスのリクエスト間の調停を行う。
【０１００】
それに対して、図１６に示した変形例のコヒーレンシ制御部では、同一アドレスリクエスト調停回路17が、IOリクエストとリモートリクエストを受け付けるリクエストポートRP_4,RP_5が出力するリクエストも入力し、そのリクエストについても監視アドレスと同一のアドレスのリクエスト間での調停を行う。したがって、同一アドレスリクエストの調停対象が、下位レベルのコアやキャッシュからのメモリアクセスのリクエストに加えて、IOデバイスからのDMA(Direct Memory Access)などに対応するリクエストと、他のCPUからルータRT経由でエントリされるリクエストも調停対象になる。
【０１０１】
［第1の実施の形態の第２の変形例］
図１７は、第1の実施の形態の第２の変形例のコヒーレンシ制御部の構成を示す図である。図１７の第２の変形例では、図１６のコヒーレンシ制御部に、ローカルCPU（自分のCPU）からの非キャッシュ可能アドレスに対するリクエストを受け付ける４つのリクエストポートRP_7-RP_10がコアなどの要求元別に追加され、さらに、リモートCPUからの非キャッシュ可能アドレスに対するリクエストを受け付けるリクエストポートRP_11が追加されている。また、処理ユニット20内に非キャッシュ可能アドレスへのリクエストを処理するノンキャッシュアクセス制御部18_1, 18_2が追加されている。そして、同一アドレスリクエスト調停回路17は、プライオリティ調停回路11が出力する入力リクエスト情報RQ_inを入力する。
【０１０２】
その結果、同一アドレスリクエスト調停回路17は、リクエストポートRP_0-RP_3にエントリされるローカルからのキャッシュ可能アドレスへのメモリアクセスと、リクエストポートRP_4,RP_5にエントリされるIOデバイスから及びリモートCPUからのキャッシュ可能アドレスに対するリクエストと、さらにローカルとリモートからの非キャッシュ可能アドレスに対するリクエストも監視対象及び調停対象にする。
【０１０３】
非キャッシュ可能アドレスへのリクエストが、キャッシュ可能アドレスへのリクエストと同様に、処理ユニット内の処理部の回路資源を獲得し合う場合には、図１７の構成により、同一アドレスリクエスト調停回路により、調停対象にすることで、監視アドレスで競合するノンキャッシュアクセスリクエスト間を発生順に処理することができる。
【０１０４】
［第２の実施の形態］
図１８は、第２の実施の形態におけるキャッシュの構成を示す図である。このキャッシュは、例えば、図１におけるLLC（最上位レベルのキャッシュ）であり、またラストレベルではなくそれより下位レベルのキャッシュでもよい。
【０１０５】
図５の第１の実施の形態におけるコヒーレンシ制御部は、複数のLLCとメモリ階層との間に設けられ、LLCでのキャッシュミスに対して発行されたメモリアクセスを入力し、LLCのタグコピーをチェックし、キャッシュヒットすればデータを所持しているLLCに転送オーダーを発行し、キャッシュミスすればメモリ階層にメモリリクエストを発行する。したがって、コヒーレンシ制御部は、複数の下位レベルからのリクエストを受け付けてメモリ階層に対する制御を行う制御パイプラインと、リクエストに対応する処理を実行する処理ユニットを有する構成において、同一アドレスリクエスト調停回路を設けて、同じアドレスに対する複数のリクエストの適切な調停を行う。
【０１０６】
図１８のキャッシュは、図５のコヒーレンシ制御部と同様の構成を有する。ただし、キャッシュは、コヒーレンシ制御部と異なり、キャッシュメモリのタグメモリ18とデータメモリ19を有する。つまり、キャッシュは、タグメモリのコピーではなくタグメモリ18の原本を有することと、データメモリ19を有することで、コヒーレンシ制御部と異なる。また、キャッシュは、上位レベル（上位レベルのキャッシュやコヒーレンシ制御部）からオーダーを受け付けるリクエストポートRP_12と、上位レベルからメモリ応答を受け付けるリクエストポートRP_13を有することでも、コヒーレンシ制御部と異なる。
【０１０７】
一方、キャッシュは、コヒーレンシ制御部と同様に、リクエストポートRPと、コア／キャッシュ間調停回路10と、プライオリティ調停回路11と、キャッシュ制御パイプライン120を有し、さらに、ミスアクセス制御部14、オーダー制御部15、リプレースバッファ16などの処理ユニット20を有する。但し、ミスアクセス制御部は上位レベル（上位レベルのキャッシュやコヒーレンシ制御部）にメモリリクエストを発行する。図５のコヒーレンシ制御部のミスアクセス制御部は、上位レベルのメモリ階層にメモリリクエストを発行するとともにリモート（他のCPU）にもリクエストを発行している。
【０１０８】
したがって、図１８のキャッシュでも、コヒーレンシ制御部と同様に、キャッシュ制御パイプライン120で、入力されたリクエストが入力タイミングに依存して処理ユニットの回路資源を獲得できずにアボートされたり獲得できたりして、同じアドレスのリクエスト間で不均衡な処理が発生する。そこで、図１８のキャッシュは、そのような不均衡な処理を防ぐために、同一アドレスリクエスト調停回路17を有する。
【０１０９】
キャッシュ制御パイプライン120の構成は、図６と同様であり、同一アドレスリクエスト調停回路17の構成と機能も、図７，８，９と同様である。すなわち、キャッシュ制御パイプライン120は、入力されたリクエストについて、排他アドレスと競合するか否か、処理ユニット20_2の回路資源を獲得できるか否かなどの、処理ユニットで処理可能か否かをチェックする。
【０１１０】
そして、同一アドレスリクエスト調停回路17は、監視アドレスと同一のアドレスを有するリクエストの入力（投入）順を保持する待ちリクエストリストに、そのメモリリクエストが処理ユニットの20の回路資源を獲得して処理を実行されるまで保持し、同一アドレスのリクエストをその発生順に回路資源が獲得できるよう調停する。
【０１１１】
第２の実施の形態においても、図１７と同様に、非キャッシュ可能アドレスのリクエストを受け付けるリクエストポートと、その処理を実行するノンキャッシュアクセス制御部とを有し、同一アドレスリクエスト調停回路が、キャッシュ可能アドレスのリクエストに加えて、非キャッシュ可能アドレスのリクエストも、同一アドレスに対するリクエスト間の調停を行うようにしてもよい。
【０１１２】
以上のとおり、本実施の形態によれば、同一アドレスリクエスト調停回路を設けたことにより、コヒーレンシ制御パイプラインやキャッシュ制御パイプラインでの、同一アドレスのリクエストに回路資源を獲得させるか否かの制御によるリクエスト間の不均衡を抑制することができる。本実施の形態は、コヒーレンシ制御部やキャッシュ（LLCまたはそれ以外のレベルのキャッシュ）に適用される。
【０１１３】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１１４】
（付記１）
複数の演算処理部と、
メモリの制御を行う第1の制御部とを有し、
前記第1の制御部は、
前記メモリのメモリ空間に対するリクエストを受け付けるリクエストポートと、
前記リクエストに対応する処理を実行する処理ユニットと、
前記リクエストポートから入力されたリクエストが前記処理ユニットで処理実行可能か否かを判定し、前記リクエストが処理実行不可の場合前記リクエストについて第１のアボート処理を行い、処理実行可能の場合前記処理ユニットに処理を発行する制御パイプラインと、
前記処理実行不可によりアボートされた同一のアドレスに対するリクエストの発生順序を保持し、前記制御パイプラインに入力されたリクエストのうち前記同一のアドレスを有し且つ前記発生順序の先頭以外のリクエストについて第２のアボート処理を行う同一アドレスリクエスト調停部と、を有する演算処理装置。
【０１１５】
（付記２）
さらに、前記複数の演算処理部により共有される共有キャッシュと、
前記共有キャッシュのコヒーレンシを制御するコヒーレンシ制御部とを有し、
前記コヒーレンシ制御部は、前記第1の制御部を有し、
前記リクエストポートは、前記共有キャッシュからのリクエストを受け付ける第1のリクエストポートを有する、付記１に記載の演算処理装置。
【０１１６】
（付記３）
前記リクエストポートは、さらに、前記共有キャッシュ以外からのキャッシュ可能アドレスへのリクエストを受け付ける第２のリクエストポートと、非キャッシュ可能アドレスへのリクエストを受け付ける第３のリクエストポートのうち、いずれか一つまたは両方を有する、付記２に記載の演算処理装置。
【０１１７】
（付記４）
さらに、前記複数の演算処理部により共有される共有キャッシュを有し、
前記共有キャッシュは、前記第1の制御部を有し、
前記リクエストポートは、下位レベルのキャッシュからのリクエストを登録する第1のリクエストポートを有する、付記１に記載の演算処理装置。
【０１１８】
(付記５)
前記リクエストポートは、さらに、非キャッシュ可能アドレスへのリクエストを受け付ける第３のリクエストポートを有する、付記４に記載の演算処理装置。
【０１１９】
（付記６）
前記制御パイプラインは、前記処理実行可能か否かの判定を、前記処理ユニットが処理中のリクエストのアドレスと競合するか否かに基づいて行う、付記１に記載の演算処理装置。
【０１２０】
（付記７）
前記制御パイプラインは、前記処理実行可能か否かの判定を、前記処理ユニット内の処理に必要な回路資源を獲得可能か否かに基づいて行う、付記１に記載の演算処理装置。
【０１２１】
（付記８）
前記リクエストポートは、前記リクエストの要求元別に設けられ、
前記同一アドレスリクエスト調停部は、前記発生順序を前記要求元の順序で保持する、付記１に記載の演算処理装置。
【０１２２】
（付記９）
前記同一アドレスリクエスト調停部は、前記同一のアドレスを保持する監視アドレス保持部と、前記要求元それぞれで少なくとも１つの前記アボートされたリクエスト情報を保持する待ちリクエストリストと、前記要求元の発生順序を示す順序情報保持部とを有する、付記８に記載の演算処理装置。
【０１２３】
（付記１０）
前記同一アドレスリクエスト調停部は、複数の前記同一のアドレス別に前記発生順序を保持し、前記複数の同一のアドレス別に、前記第２のアボート処理を行う、付記１に記載の演算処理装置。
【０１２４】
（付記１１）
前記コヒーレンシ制御部内の処理ユニットは、
下位レベルのキャッシュメモリのタグメモリのコピーと、
前記リクエストに対応する前記メモリ方向の上位レベルへのアクセス要求を発行し、前記メモリから応答を受信するまでの間、後続の同一アドレスへのリクエストを受け付けないミスアクセス制御部と、
前記リクエストに対応する前記メモリ方向とは逆の下位レベルへの処理オーダーを発行し、前記処理オーダーが完了するまでの間、後続の同一アドレスへのリクエストを受け付けないオーダー制御部と、
下位レベルにあるキャッシュから追い出されるデータを前記メモリに書き戻す（write back）要求を発行し、前記書き戻しが完了するまでの間、後続の同一アドレスへのリクエストを受け付けないリプレースバッファと、
のうち、少なくとも一つを有する、付記２に記載の演算処理装置。
【０１２５】
（付記１２）
前記共有キャッシュ内の前記処理ユニットは、
自分のキャッシュメモリのタグメモリ及びデータメモリと、
前記リクエストに対応する前記メモリ方向の上位レベルへのアクセス要求を発行し、前記メモリから応答を受信するまでの間、後続の同一アドレスへのリクエストを受け付けないミスアクセス制御部と、
前記リクエストに対応する前記メモリ方向とは逆の下位レベルへの処理オーダーを発行し、前記処理オーダーが完了するまでの間、後続の同一アドレスへのリクエストを受け付けないオーダー制御部と、
下位レベルにあるキャッシュから追い出されるデータを前記メモリに書き戻す要求を発行し、前記書き戻しが完了するまでの間、後続の同一アドレスへのリクエストを受け付けないリプレースバッファと、
のうち、少なくとも一つを有する、付記４に記載の演算処理装置。
【０１２６】
（付記１３）
複数の演算処理部と、
メモリの制御を行う第1の制御部とを有し、
前記第1の制御部は、
前記メモリのメモリ空間に対するリクエストを受け付けるリクエストポートと、
前記リクエストに対応する処理を実行する処理ユニットとを有する演算処理装置の制御方法であって、
前記リクエストポートから入力されたリクエストが前記処理ユニットで処理実行可能か否かを判定し、前記リクエストが処理実行不可の場合前記リクエストについて第１のアボート処理を行い、処理実行可能の場合前記処理ユニットに処理を発行し、
前記処理実行不可によりアボートされた同一のアドレスに対するリクエストの発生順序を保持し、前記入力されたリクエストのうち前記同一のアドレスを有し且つ前記発生順序の先頭以外のリクエストについて第２のアボート処理を行う、演算処理装置の制御方法。
【符号の説明】
【０１２７】
１：CPUチップ、演算処理装置、マイクロプロセッサ、プロセッサ
CORE：CPUコア、コア、演算処理部
L1D, L1I：L1キャッシュ
LLC：Last Level Cache、最上位レベルキャッシュ
CHR：コヒーレンシ制御部
RP：リクエストポート
１０：コア／キャッシュ間調停回路
１１：プライオリティ調整回路
２０：処理ユニット
１８：LLC-TAG、LLC-DATA
１３：LLC-TAG-COPY
１４：ミスアクセス制御部
１５：オーダー制御部
１６：リプレース制御部
１２：コヒーレンシ制御パイプライン
１２０：キャッシュ制御パイプライン
１２１：アドレス・TAGチェック部
１２２：処理判定部
１２３：資源判定部
１７：同一アドレスリクエスト調停回路
M_valid：監視回路バリッドフラグ
M_add：監視アドレス
W_list：待ちリクエストリスト
W_rank：順番情報
１７１：アドレスマッチ回路
Ab3：強制アボート信号
Ab1,Ab2：通常アボート信号（排他アドレスアボート、資源非獲得アボート）
【図１】
0006792139.tif 000002
【図２】
0006792139.tif 000003
【図３】
0006792139.tif 000004
【図４】
0006792139.tif 000005
【図５】
0006792139.tif 000006
【図６】
0006792139.tif 000007
【図７】
0006792139.tif 000008
【図８】
0006792139.tif 000009
【図９】
0006792139.tif 000010
【図１０】
0006792139.tif 000011
【図１１】
0006792139.tif 000012
【図１２】
0006792139.tif 000013
【図１３】
0006792139.tif 000014
【図１４】
0006792139.tif 000015
【図１５】
0006792139.tif 000016
【図１６】
0006792139.tif 000017
【図１７】
0006792139.tif 000018
【図１８】
0006792139.tif 000019