JP2017199111A - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP2017199111A
JP2017199111A JP2016087941A JP2016087941A JP2017199111A JP 2017199111 A JP2017199111 A JP 2017199111A JP 2016087941 A JP2016087941 A JP 2016087941A JP 2016087941 A JP2016087941 A JP 2016087941A JP 2017199111 A JP2017199111 A JP 2017199111A
Authority
JP
Japan
Prior art keywords
request
speculative
control unit
memory
memory request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016087941A
Other languages
English (en)
Other versions
JP6687845B2 (ja
Inventor
石井 寛之
Hiroyuki Ishii
寛之 石井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016087941A priority Critical patent/JP6687845B2/ja
Priority to US15/459,033 priority patent/US10282310B2/en
Publication of JP2017199111A publication Critical patent/JP2017199111A/ja
Application granted granted Critical
Publication of JP6687845B2 publication Critical patent/JP6687845B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】投機的なメモリリクエストの発行を適切に制御してミスアクセス処理部内のエントリの使用を最適化する演算処理装置を提供する。
【解決手段】メモリリクエストの制御を行う第1の制御部は、メモリリクエストにエントリを割り当ててメモリリクエストに係る処理を制御するミスアクセス制御部と、メモリリクエストのキャッシュヒット判定をし、キャッシュミスの判定の場合、メモリリクエストについて通常メモリリクエストをミスアクセス制御部に発行する制御パイプラインと、を有する。制御パイプラインは、キャッシュヒット判定前に入力されたメモリリクエストについて投機的メモリリクエストをミスアクセス制御部に発行し、キャッシュヒット判定の場合に発行した投機的メモリリクエストをキャンセルし、キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、投機的メモリリクエストの発行をより抑制する投機的リクエスト制御部を有する。
【選択図】図5

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
演算処理装置(CPUチップ、マイクロプロセッサ、以下単にプロセッサと称する)は、メモリアクセス性能を向上するため複数のレベルのキャッシュを有する。プロセッサは、複数の演算処理部(CPUコア、以下コアと称する)を有し、コアが第1レベルのキャッシュ(L1キャッシュ)をプライベートキャッシュとして占有して利用する。さらに、プロセッサは、複数のコアが共有する上位レベルのキャッシュを有する。
また、プロセッサは、キャッシュのうちメインメモリに最も近いレベルのキャッシュ(Last Level Cache: LLC,以下LLCと称する)を複数または単数有し、さらに、LLCの外側にキャッシュ間のコヒーレンシを維持するためのコヒーレンシ制御部を有する場合もある。
LLCやコヒーレンシ制御部は、リクエストが投入される制御パイプラインと、リクエストに対応する処理を実行するリクエスト処理ユニットを有する。リクエスト処理ユニットは、入力(投入)されたリクエストがキャッシュミスした場合にメモリに対するアクセスを処理するミスアクセス制御部を有する。
一方、制御パイプラインは、入力されたリクエストのアドレスがキャッシュヒットするか否かのタグ判定、入力されたリクエストが既に処理中のリクエストのアドレスと競合するかの判定、リクエストに対する処理内容の判定、処理ユニットの回路資源が獲得可能か否かの資源判定などを行い、適切なリクエストについてミスアクセス制御部にメモリリクエストの処理を依頼する。したがって、適切なリクエストについてのミスアクセス制御部へのメモリリクエストの依頼は、制御パイプラインでの判定処理の後に行われるので、メモリリクエストの処理開始が遅くなり、レイテンシが長くなる場合がある。
そこで、制御パイプラインにリクエストが入力されると、タグ判定を行う前に、そのリクエストについて投機的なメモリリクエストを行うことで、レイテンシを削減することが考えられる。投機的なメモリリクエストについては、以下の特許文献に記載されている。
特開2006−53857号公報
しかしながら、投機的なメモリリクエストを発行すると、タグ判定でキャッシュヒットした場合投機的メモリリクエストは失敗となり、ミスアクセス制御部内のエントリが無駄に消費される。そのため、次々に投機的メモリリクエストを発行した場合、キャッシュミスが頻発すればミスアクセス制御部のエントリが有効に使用されることになるが、一方で、キャッシュヒットが頻発すれば失敗した投機リクエストのために多くのエントリが無駄に消費されることになる。
そこで、本開示の第1の側面の目的は、投機的なメモリリクエストの発行を適切に制御してミスアクセス制御部内のエントリの使用効率を向上させた演算処理装置及び演算処理装置の制御方法を提供することにある。
本開示の第1の側面は、演算処理部と、前記演算処理部が発行するメモリに対するメモリリクエストの制御を行う第1の制御部とを有し、
前記第1の制御部は、前記メモリリクエストにエントリを割り当てて前記メモリリクエストに係る処理を制御するミスアクセス制御部と、入力されたメモリリクエストがキャッシュヒットするか否かのキャッシュヒット判定をし、キャッシュミスの判定の場合前記入力されたメモリリクエストについて通常メモリリクエストを前記ミスアクセス制御部に発行する制御パイプラインとを有し、
前記制御パイプラインは、前記キャッシュヒット判定する前に前記入力されたメモリリクエストについて投機的メモリリクエストを前記ミスアクセス制御部に発行し、前記キャッシュヒット判定がヒット判定の場合に前記発行した投機的メモリリクエストをキャンセルし、前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストの発行をより抑制する投機的リクエスト制御部を有する、演算処理装置である。
第1の側面によれば、投機的なメモリリクエストの発行を適切に制御してミスアクセス制御部内のエントリの使用効率が向上する。
本実施の形態におけるプロセッサ(CPUチップ)の構成例を示す図である。 プロセッサ内の1つのクラスタとそれに対応する構成だけを抽出して示す図である。 コヒーレンシ制御部の構成例を示す図である。 コヒーレンシ制御パイプラインの構成例を示す図である。 メモリリクエストの動作シーケンス例を示す図である。 メモリリクエストの動作シーケンス例を示す図である。 投機リクエストが成功した場合の動作シーケンスを示す図である。 投機リクエストが失敗した場合の動作シーケンスを示す図である。 タグミスにより投機リクエスト、投機アクセスに失敗がない場合のエントリ使用状態の遷移を示す図である。 タグミスにより投機リクエスト、投機アクセスに失敗がない場合のエントリ使用状態の遷移を示す図である。 タグヒットにより投機リクエスト、投機アクセスの失敗が多く発生する場合のエントリ使用状態の推移を示す図である。 投機リクエストの発行条件を使用中のエントリ数がある上限値以下と設定した状態例を示す図である。 本実施の形態における投機リクエストの発行数を適切に制御する方法を説明する図である。 本実施の形態におけるコヒーレンシ制御部CHR内の主にコヒーレンシ制御パイプライン12とミスアクセス制御部14との間の関係を示す図である。 本実施の形態における投機リクエスト制御部124の構成例を示す図である。 ミスアクセス制御部の一部の構成例を示す図である。 第1の実施の形態における投機リクエスト制御部の構成の変形例を示す図である。 第2の実施の形態におけるキャッシュの構成を示す図である。
図1は、本実施の形態におけるプロセッサ(CPUチップ)の構成例を示す図である。プロセッサ1は、命令をデコードして演算処理を発行する命令制御部(図示せず)と演算処理回路(図示せず)と第1レベル(L1)データキャッシュL1D及びL1命令キャッシュL1Iと、第2レベル(L2)キャッシュとをそれぞれ有するCPUコア(コア)CORE_0−CORE_nを有する。
さらに、プロセッサ1は、複数のコアCORE_0−CORE_nが複数のグループ(またはクラスタCLS)に分けられ、各グループに対応して設けられた複数の最上位レベルキャッシュ(LLC)LLC_0−LLC_3を有する。各LLCは、各グループ内の複数のコアにより共有される。各LLCは、通常のキャッシュと同様に、タグメモリとデータメモリを有し、タグメモリには、自分のデータメモリのキャッシュラインに関するタグデータ(有効ビット、アドレス、状態など)を記憶する。
また、プロセッサ1は、複数のLLC間のコヒーレンシを維持する制御を行うコヒーレンシ制御部CHR_0−CHR_3と、メモリMEMへのアクセスを制御するメモリコントローラMC_0−MC_3を有する。
各コヒーレンシ制御部は、後で詳述するとおり、LLCのタグのコピーと、各LLCや他のCPU及びIOデバイスからのメモリリクエストを受け付けるリクエストポートと、各リクエストに対してキャッシュコヒーレンシを維持するための各種処理を実行するミスアクセス制御部、オーダー制御部、リプレースバッファなどの処理ユニットを有する。
4つのメモリMEM_0−MEM_3は、アドレスインターリーブされている。例えば、前メモリの物理アドレスがPA[k-1:0]とkビットの場合、4つのメモリの物理アドレスは次の通りになる。
MEM_0はPA[m:n]=00
MEM_0はPA[m:n]=01
MEM_0はPA[m:n]=10
MEM_0はPA[m:n]=11
ここで、m、nはkより小さく0より大きい自然数(0<n<m<k)である。
コヒーレンシ制御部CHR_0−CHR_3は、LLCのタグのコピーを有する。各コヒーレンシ制御部のLLCタグコピーは、上記のアドレスインターリーブに対応して、4つのメモリMEM_0−MEM_3それぞれの物理アドレスに対応するLLCのキャッシュラインのタグデータを記憶する。
4つのLLCそれぞれは4つのコヒーレンシ制御部CHR_0−CHR_3に接続され、各LLCはキャッシュミスした場合のメモリアクセスを要求するメモリリクエストを、メモリリクエストのアドレスに対応するコヒーレンシ制御部に発行する。逆に、各コヒーレンシ制御部は入力されたメモリリクエストに必要な処理の要求をオーダーとしてメモリ側とは逆方向の下位レベル方向の4つのLLCに発行する。
また、4つのコヒーレンシ制御部CHRそれぞれは、メモリアクセスのリクエストやキャッシュのデータのメモリへの書き戻しのリクエストを、メモリ側と同じ上位レベル方向にあり、各コヒーレンシ制御部と対応するメモリコントローラMCに発行する。
そして、プロセッサ1は、他のCPUと通信するためのルータRTと、IOデバイスと通信するためのIO制御部IOを有する。
図2は、プロセッサ内の1つのクラスタとそれに対応する構成だけを抽出して示す図である。図1の複数のコアCORE_0−CORE_nは、4つのクラスタ(コア群)CLSに分けられる。したがって、図1には、4つのクラスタに対応して4つのLLC(LLC_0−LLC_3)が設けられている。
一方、図2に示した1つのクラスタCLSは、複数のコアCORE_0−CORE_kを有する。そして、そのクラスタCLSの複数のコアは、1つのLLC(LLC_0)を共有する。但し、1つのクラスタCLSは4つのメモリMEM_0−MEM_3全てに対してメモリアクセスして、共有するLLC(LLC_0)に読み出したデータを登録することができる。
図1で説明したとおり、4つのコヒーレンシ制御部CHR_0−CHR_3は、アドレスインターリーブされた4つのメモリMEM_0−MEM_3と、それに対応する4つのメモリコントローラMC_0−MC_3とに対応し、それぞれ接続される。
したがって、1つのLLC(LLC_0)は、全てのコヒーレンシ制御部CHR_0−CHR_3にメモリリクエストを発行可能であり、メモリリクエストのアドレスに対応したコヒーレンシ制御部にメモリリクエストを発行する。
図1、図2において、プロセッサ1の動作例について簡単に説明する。いずれかのコアがメモリMEM内のデータを読み出すロード命令を実行してコア内のL2キャッシュでキャッシュミスすると、L2キャッシュが、キャッシュミスに対応してメモリのデータを読み出すメモリリクエストをLLCに発行する。さらに、LLCがメモリリクエストについてキャッシュミスすると、リクエストのアドレスに対応するコヒーレンシ制御部CHRにメモリリクエストを発行する。
コヒーレンシ制御部は、LLCタグコピーを検索して、残りのLLCがそのアドレスのデータを保持しているか否かをチェックする。ここでキャッシュヒットすれば、コヒーレンシ制御部は、データを保持しているLLCに対して、保持しているデータをメモリリクエストの要求元のLLCに転送するようオーダーを発行する。一方、キャッシュミスすれば、コヒーレンシ制御部は、メモリコントローラMCにメモリへのアクセスを要求するメモリリクエストを発行する。そして、メモリからのデータ応答があれば、コヒーレンシ制御部は、メモリリクエストの要求元のLLCにデータ応答する。
さらに、コヒーレンシ制御部は、コアが前述のロード命令を実行した場合や、ストア命令を実行してキャッシュへの書き込みが発生した場合に、MESIプロトコルに基づく種々の処理の要求を、より上位レベルのメモリコントローラMCにはリクエストとして、より下位レベルのLLCにはオーダーとして発行する。リクエストとオーダーはいずれもある処理の要求であるが、処理の要求先によりリクエストとオーダーを区別して呼ぶこととする。また、より上位レベルとはメモリ階層に近づく方向を、より下位レベルとは下位レベルのキャッシュやコアに近づく方向を意味する。
[アドレスに対するリクエストについて]
キャッシュL2,LLCとコヒーレンシ制御部CHRは、いずれもメモリ空間のアドレスに対するリクエストを受け付け、各リクエストに対応する処理の実行を制御する。ここで、メモリ空間のアドレスは、(1)図1、2に示したメインメモリMEMのアドレスでありキャッシュ可能なアドレス(chacheable address)と、(2)システム用のブートROMやSRAM等のメモリや周辺デバイスのレジスタなどの非キャッシュ可能(キャッシュ不能)なアドレス(Non-chacheable address)とを含む。ただし、非キャッシュ可能なアドレスには、メインメモリMEM内の一部のアドレスが含まれる場合もある。
したがって、メモリ空間内のあるアドレスに対するリクエスト(読み出しまたは読み出し)は、(1)上記のキャッシュ可能なアドレスに対するリクエストと、(2)非キャッシュ可能なアドレスに対するリクエストが含まれる。そして、キャッシュ可能なアドレスに対するリクエストは、(1−1)自分のCPU(ローカルCPU)内のL2キャッシュやLLCなどのキャッシュでのキャッシュミス、つまり、コヒーレンシ制御部より下位レベルでのキャッシュミスにより発行されたリクエストと、(1−2)IOデバイス(例えばDMA(Dynamic Memory Access))や他のCPU(リモートCPU)が発行したリクエストなどが含まれる。
[コヒーレンシ制御部]
本実施の形態は、コヒーレンシ制御部での投機リクエストと、LLCなどのキャッシュでの投機リクエストのいずれにも適用できる。そこで、以下の説明では、コヒーレンシ制御部を例にして投機リクエストについて説明する。
図3は、コヒーレンシ制御部の構成例を示す図である。LLCやL2キャッシュを含むキャッシュも、コヒーレンシ制御部と類似する構成を有する。以下はコヒーレンシ制御部の構成例について説明する。
コヒーレンシ制御部CHRは、下位レベルのキャッシュやコア(前述のクラスタCLS)からのリクエストを受け付けるリクエストポートRP_0−RP_3を有する。コヒーレンシ制御部にとって下位レベルのキャッシュはLLCである。図1の例では、4つのLLCが設けられおり、それぞれの要求元のLLCに対応して4つのリクエストポートRP_0−RP_3が設けられている。各リクエストポートRPは、複数のエントリを有し、同じ要求元から複数のリクエストを複数のエントリに受け付ける。
さらに、コヒーレンシ制御部は、IOデバイスからのIOリクエストを受け付けるリクエストポートRP_4と、他のCPUからのリモートリクエストを受け付けるリクエストポートRP_5と、メモリリクエストに対するメモリコントローラからの応答を受け付けるリクエストポートRP_6などを有する。この点、コヒーレンシ制御部と異なり、キャッシュは、上位レベルからのオーダーを受け付けるリクエストポートと、上位レベルからのメモリ応答を受け付けるリクエストポートを有する。
さらに、コヒーレンシ制御部は、4つのリクエストポートRP_0−RP_3のいずれかを選択するコアまたはキャッシュ間調停回路10と、その選択されたリクエストポートと他のリクエストポートRP_4−RP_6のいずれかを優先度に基づいて選択するプライオリティ調停回路11を有する。
そして、コヒーレンシ制御部は、選択されたリクエストポートのエントリのリクエストが投入(入力)されるコヒーレンシ制御パイプライン12と、入力されたリクエストに対応する種々の処理を行う処理ユニット20_1、20_2を有する。ここで、図中、処理ユニットは、2つの部分20_1と20_2に分割して示されるが、内部処理のステージに対応して2つの部分に分けて表示されるだけであり、処理ユニット20_1,20_2で1つの処理ユニットを構成する。また、処理ユニットは個々の処理毎に一連のパイプラインで構成される。
コヒーレンシ制御部の処理ユニット20は、例えば、LLCのタグメモリのコピー13_1、13_2と、ミスアクセス制御部14_1、14_2と、オーダー制御部15_1、15_2と、リプレースバッファ16_1、16_2とを有する。この点、キャッシュは、自らのデータメモリとそのタグメモリを有する。
コヒーレンシ制御パイプライン12は、LLCのタグメモリのコピー13をリクエストのアドレスで検索し、リクエストが求めるキャッシュラインを他のLLCが保持していないかをチェックする。さらに、リクエストに対するメモリコントローラMCからの応答がリクエストポートRP_6から入力され、その応答に対応してLLCのタグメモリを更新する場合、LLCのタグメモリのコピー13も更新処理される。
ミスアクセス制御部14は、LLCでのキャッシュミスに基づくメモリリクエストのアドレス、またはIOデバイスやリモートCPUからのリクエストのアドレスが、LLCのタグメモリのコピー13でキャッシュミスになった場合、メモリコントローラを経由してメモリリクエストを発行する。または、上記のローカルからのリクエストがキャッシュミスになった場合、他のCPUのメモリ宛てにリモートリクエストを発行する。いずれもメモリシステムに対するメモリ系のリクエストである。ミスアクセス制御部は、メモリシステムにリクエストを発行すると、メモリシステムからデータ応答を受信するまでの間、後続の同一アドレスのリクエストを受け付けないよう排他制御を行う。
オーダー制御部15は、下位レベルのコアやキャッシュに対する要求をオーダーとして発行する。例えば、下位レベルからのリクエストのアドレスがLLCのタグメモリのコピー13でキャッシュヒットした場合、ヒットしたデータを所持するLLCに対してデータ転送のオーダーを発行する。あるいは、下位レベルのコアやキャッシュ間のコヒーレンシを維持するために、あるコアがデータをストアする場合、他のコアがキャッシュに所持しているデータをMESIプロトコルなどに従いキャッシュ無効化するオーダーを発行する。これらの場合、オーダー制御部は、キャッシュ無効化が完了するまで、後続の同一アドレス要求に対するリクエストを受理しないよう排他制御を行う。
リプレースバッファ16は、下位レベルのキャッシュから追い出されるデータをメモリに書き戻すライトバックをメモリコントローラに発行する。また、コヒーレンシを保つために、一連の書き込みが完了するまでの間、後続の同一アドレスのリクエストを受理しないよう排他制御を行う。
ミスアクセス制御部14、オーダー制御部15、リプレースバッファ16は、それぞれの処理の依頼を受け付ける受付エントリ(一種のレジスタ)を有する。受付エントリには受け付けたリクエストの情報(リクエストIDやリクエストアドレスを含む)が格納される。処理ユニット内の各処理部がそのリクエストに対応する処理を開始すると、同じアドレスに対する新たな処理を受け付けないように制御される。また、受付エントリの数は有限であり、受付エントリに空きがなければ、新たな処理を受け付けることができない。これらの制御は、コヒーレンシ制御パイプライン12が実行する。
図3中の投機リクエストバリッド信号SPC_REQ_VALについては、後述する実施の形態で説明する。
図4は、コヒーレンシ制御パイプラインの構成例を示す図である。コヒーレンシ制御パイプライン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に、入力リクエストのアドレスと処理ユニット20内の各部14,15,16が処理中のアドレス(排他アドレス)と一致するか否かのチェックを依頼する(12A)。処理中のアドレスは前述の受付エントリに保持されている。そして、アドレス/タグチェック部は、LLCタグメモリコピーのキャッシュ判定結果(12B)と、ミスアクセス制御部とオーダー制御部とリプレースバッファそれぞれの排他アドレスと一致するかの否かのチェック結果(12B)を取得する。排他アドレスと一致する場合は処理実行不可能であるので、アドレス/タグチェック部121は第1のアボート信号Ab1を出力する。
さらに、処理判定部122は、メモリリクエストに必要な処理を判定する。例えば、処理判定部122は、キャッシュヒットすれば下位のLLCに保持しているデータをメモリリクエストを発行したLLCに転送するようオーダー12Dを発行し、キャッシュミスすれば上位のメモリコントローラや他のCPUにメモリリクエスト12Dを発行する。メモリリクエストの発行は、図中示されるとおり、ミスアクセス制御部に対するリクエストバリッド信号MSC_REQ_VALの出力により行われる。
そして、資源判定部123が、判定された処理に対応するミスアクセス制御部14_2、オーダー制御部15_2、リプレースバッファ16_2のいずれかで、処理に必要な回路資源を獲得できるか否かの判定を行う。処理に必要な回路資源の例は、前述の受付エントリなどである。資源判定部は、回路資源の獲得ができない場合は処理実行不可能であるので、第2のアボート信号Ab2を出力する。また、その他何らかの理由でパイプラインストールが発生する場合も実行不可能であるので、図示しないアボート信号が出力される。
コヒーレンシ制御パイプラインは、論理和ゲートORにより全てのアボート信号Ab1,Ab2を論理和演算したアボートフラグABORT(12C)を出力する。このアボートフラグABORTが「1」の場合リクエストがアボートされたことを意味し、リクエストに対応する処理は実行されず、リクエストは元のアクセスポートに差し戻される。
コヒーレンシ制御パイプライン12は、処理実行可能の場合、処理ユニット20_2に処理判定部122が判定した処理12Dを発行する。発行する処理12Dは、例えば、タグメモリコピー13_2への更新処理、ミスアクセス制御部14_2へのメモリアクセス処理、オーダー制御部15_2へのオーダー発行処理、リプレースバッファ16_2へのライトバックリクエストなどである。
上記の資源管理において、処理のための資源獲得に失敗すると、投入されたリクエストはアボートされ、アボートフラグABORT付きのリクエスト情報12Cがリクエストポートにフィードバックされ、リクエストが差し戻される。そして、差し戻されたリクエストは、リクエストポート内の他のリクエストの後に再度パイプラインに入力される。具体的には、リクエストポートRPは、リクエスト要求元IDとリクエストエントリIDが一致しアボートフラグABORTが「0」の場合、リクエストポート内にエントリされているリクエストを無効化(削除)する。
以上のとおり、コヒーレンシ制御パイプラインは、あるアドレスに対するリクエストをパイプライン処理し、処理ユニット20内で処理中のアドレスを処理部内の受付エントリ等の回路資源に記録し、同じアドレスに対して不整合のないようにリクエストの発行を制御する。
図4中の、投機リクエスト制御部124については、後述する実施の形態において説明する。
[メモリリクエストの動作と投機リクエスト]
図5は、メモリリクエストの動作シーケンス例を示す図である。図5の例では、コヒーレンシ制御パイプライン12が入力されたメモリリクエストのアドレスについてタグコピーをチェックした結果タグミスした例である。つまり、あるLLCがキャッシュミスしたキャッシュブロックを他のLLCも所持していないときの動作である。
まず、あるLLCがキャッシュミスしてコヒーレンシ制御部のリクエストポートにメモリリクエストを発行し、コヒーレンシ制御パイプライン12にメモリリクエストが入力される(S10)。これに応答して、コヒーレンシ制御パイプライン12は、LLCタグコピーをチェックし、TAGミスし(S11_1)、ミスアクセス制御部14にメモリリクエストを発行する(S12)。この時点で、コヒーレンシ制御パイプライン12は、入力されたメモリリクエストについて既に実行中の処理とアドレスの競合がなく、ミスアクセス制御部14内の回路資源、例えば入力エントリ(一種のレジスタ)を獲得できたことを確認済みである。
したがって、ミスアクセス制御部14は、発行されたメモリリクエストをエントリに登録する(S13)。そして、ミスアクセス制御部は、メモリリクエストをメモリコントローラMCに発行し(S14)、メモリコントローラはメモリMEMにメモリリクエストを発行する(S15)。
やがて、メモリMEMがメモリリクエストに対して読み出しデータなどのメモリ応答をメモリコントローラMCに返信し(S16)、さらにメモリコントローラがメモリ応答をミスアクセス制御部14に返信する(S17)。これに応答して、ミスアクセス制御部14は、登録されていたエントリを開放し(S18)、コヒーレンシ制御パイプラインにメモリ応答を返信し(S19)、さらに、コヒーレンシ制御パイプラインは要求元のLLCにメモリ応答を返信する(S20)。
コヒーレンシ制御部CHRではなくLLCの場合も、上記と同様の動作である。
図6は、メモリリクエストの動作シーケンス例を示す図である。図6の例は、コヒーレンシ制御パイプライン12が、入力されたメモリアクセスのアドレスについてLLCタグコピーをチェックした結果タグヒット(キャッシュヒット)した例である。つまり、あるLLCがキャッシュミスしたキャッシュブロックを他のLLCが所持中のときの動作である。
まず、あるLLCがキャッシュミスしてコヒーレンシ制御部のリクエストポートにメモリリクエストを発行し、コヒーレンシ制御パイプライン12にメモリリクエストが入力される(S10)。これに応答して、コヒーレンシ制御パイプライン12は、LLCタグコピーをチェックし、TAGヒットし(S11_2)、オーダー制御部15を介して、キャッシュブロックを所持しているLLCにそのキャッシュブロックを要求元のLLCに転送するよう転送オーダーを発行する(S31)。
コヒーレンシ制御部CHRではなくLLCの場合は、LLCのキャッシュ制御パイプラインがキャッシュに所持しているキャッシュブロックをキャッシュ応答でメモリリクエスト要求元の下位レベルのキャッシュに返信する。
[本実施の形態]
図5、図6のメモリアクセスの動作によれば、LLC間でキャッシュの共有が多く発生している場合、LLCタグコピーを参照してタグヒットし、メモリリクエストのアドレスのデータ(キャッシュブロック)を所持しているLLCに転送オーダーを発行するので、メモリへのアクセスを行う必要はない。しかも、LLCタグコピーを参照しないとデータを所持しているLLCを知ることができないので、LLCタグコピーの参照動作は無駄な動作ではない。
一方、どのLLCもメモリリクエストのアドレスのデータを所持していない場合、ミスアクセス制御部がメモリコントローラにメモリリクエストを発行することになるが、LLCタグコピーを参照する時間だけメモリからデータを取得するまでの時間が長くなる。また、LLCタグコピーの参照をしなくてもミスアクセス制御部はメモリリクエストを発行できる。そのため、コヒーレンシ制御パイプラインは、LLCタグコピーの参照(タグチェック)を行う前にメモリへのアクセス動作を投機的に開始してもよい。タグミスが発生する場合、LLCタグコピーの参照結果を取得するまでの時間を節約できるので、投機的なメモリアクセスはメモリからデータを取得するまでの時間を短くできる。
本実施の形態によると、図3に示したコヒーレンシ制御パイプラインは、コヒーレンシ制御パイプライン12のパイプラインの先頭ステージからミスアクセス制御部14_2に投機リクエストバリッド信号MSC_SPC_REQ_VALを出力する構成を有する。つまり、パイプラインに投入されたメモリリクエストがメモリへのアクセスを必要とする可能性がある場合、コヒーレンシ制御パイプラインは、LLCタグコピーの参照を行う前に、ミスアクセス制御部14_2に投機リクエストを要求し、ミスアクセス制御部に投機的メモリアクセスをメモリコントローラMCに発行させる。
通常、コヒーレンシ制御パイプラインは、LLCタグコピーの参照結果がタグミスの場合に、ミスアクセス制御部の回路資源(エントリなど)が獲得できれば、パイプライン12の後方のステージでミスアクセス制御部に対してメモリリクエストを発行する。したがって、パイプライン12の前方のステージで発行される投機アクセスは、パイプライン12のステージをバイパスするメモリアクセス要求である。
本実施の形態によると、図4に示したコヒーレンシ制御パイプライン12は、投機リクエストの発行を制御する投機リクエスト制御部124を有する。投機リクエスト制御部124は、入力されたメモリリクエストに投機リクエストを発行する必要性があるか否かの判定と、メモリリクエストのアドレスが処理ユニット20で処理中のリクエストのアドレスと競合しないか否かの判定と、ミスアクセス制御部14に投機リクエストを登録できる回路資源、つまり入力エントリの空きがあるか否かの判定を行い、いずれの判定も真であれば、LLCタグの参照結果が得られる前に、ミスアクセス制御部14に投機リクエストを発行する。
但し、投機リクエストはLLCタグの参照結果に基づいて発行されていないので、LLCタグの参照でタグヒットすると、投機リクエストは無駄なリクエストになり、投機リクエストが登録されたエントリはキャンセル対象になり、ミスアクセス制御部内のエントリが無駄に使用される。また、コヒーレンシ制御パイプラインでメモリリクエストがアボートする場合も投機リクエストはキャンセル対象になる。そこで、本実施の形態では、コヒーレンシ制御パイプラインは、投機リクエストの発行を適切に行いエントリの無駄な使用による弊害を抑制する。
図7は、投機リクエストが成功した場合の動作シーケンスを示す図である。まず、あるLLCがキャッシュミスしてメモリリクエストがコヒーレンシ制御部のリクエストポートに受け付けられ、そのメモリリクエストがコヒーレンシ制御パイプライン12に入力される(S10)。これに応答して、コヒーレンシ制御パイプライン12は、投機リクエストをミスアクセス制御部14に発行する(S21)。
ミスアクセス制御部14は、複数のメモリリクエストを処理できるよう複数の入力エントリを有している。したがって、コヒーレンシ制御パイプライン12は、投機リクエストを発行するとき、あらかじめ空きエントリを確保している。
ミスアクセス制御部14は、投機リクエストを空きエントリに登録し(S22)、投機アクセスをメモリコントローラMCに発行する(S23)。この時点では、投機リクエストが登録されたエントリの使用状態は未確定である。投機アクセスが処理されている間に、コヒーレンシ制御パイプライン12は、LLCタグコピーをチェックし、TAGミスし(S11_1)、ミスアクセス制御部14に投機成功応答を出力する(S11_3)。この投機成功により、ミスアクセス制御部内のエントリの使用状態は確定状態に遷移する(S25)。コヒーレンシ制御パイプライン12は、投機成功を出力するとき、入力されたメモリリクエストについて既に実行中の処理とアドレスの競合がないことも確認済みである。
ミスアクセス制御部14が投機アクセスを発行すると(S23)、メモリコントローラはメモリMEMにメモリリクエストを発行する(S24)。やがて、メモリMEMがメモリリクエストに対して読み出しデータなどのメモリ応答をメモリコントローラMCに返信し(S26)、さらにメモリコントローラがメモリ応答をミスアクセス制御部14に返信する(S27)。これに応答して、ミスアクセス制御部14は、登録されていたエントリを開放し(S28)、コヒーレンシ制御パイプラインにメモリ応答を返信し(S29)、さらに、コヒーレンシ制御パイプラインは要求元のLLCにメモリ応答を返信する(S30)。
図8は、投機リクエストが失敗した場合の動作シーケンスを示す図である。まず、あるLLCがキャッシュミスしてメモリリクエストがコヒーレンシ制御部のリクエストポートに受け付けられ、そのメモリリクエストがコヒーレンシ制御パイプライン12に入力される(S10)。これに応答して、コヒーレンシ制御パイプライン12は、投機リクエストをミスアクセス制御部14に発行する(S21)。さらに、ミスアクセス制御部14は、投機リクエストをエントリに登録し(S22)、投機アクセスをメモリコントローラに発行し、メモリリクエストがメモリMEMに発行される(24)。ここまでは、図7と同様である。
図8において、コヒーレンシ制御パイプライン12は、LLCタグコピーを参照しタグヒットを検出し(S11_2)、それに応答して、投機失敗応答をミスアクセス制御部14に送信する(S11_4)。また、オーダー制御部15を介してデータを所持するLLCに転送オーダーを発行する(S31)。これにより、ミスアクセス制御部のエントリの使用状態はキャンセル状態に確定する(S25)。ミスアクセス制御部は、既に投機アクセスを発行済みであるため、キャンセル状態のエントリを保持しておく。
やがて、メモリMEMとメモリコントローラMCは、メモリ応答を返信するが(S26,S27)、ミスアクセス制御部14は、メモリ応答に対応するエントリがキャンセル状態であるため、コヒーレンシ制御パイプライン12に対してキャンセル完了応答を返信し(S32)、エントリを開放する(S28)。
ミスアクセス制御部がキャンセル状態のエントリを保持するため、後続の他のメモリリクエストがエントリを使用できなくなることが発生し、エントリの有効利用ができなくなる場合がある。メモリの応答時間はプロセッサのクロックに対して非常に低速であり、1つのメモリリクエストの応答が戻るまで数百サイクルの時間を要する。その間、ミスアクセス制御部のキャンセル状態のエントリを他のメモリリクエストが使用できなくなるので、投機リクエスト失敗によるエントリ(回路資源)の占有は大きな損失になる。
次に、ミスアクセス制御部の入力エントリの使用状態の遷移例を説明する。ミスアクセス制御部14は、複数のメモリリクエストの処理を制御可能にするため、複数の入力エントリ(レジスタ)を有する。このエントリには、発行されたメモリリクエストの命令コード、アドレス、リクエストID、使用状態(キャンセル状態か否か)などの情報が格納される。そして、ミスアクセス制御部は、メモリリクエストに対するメモリ応答を受信するまでエントリを保持し、後続のメモリリクエストとアドレスが競合しないか否かの判定、受信したメモリ応答をコヒーレンシ制御パイプラインに転送すべきかまたはキャンセル応答で返信すべきかの判定などに利用する。
図9、図10は、タグミスにより投機リクエスト、投機アクセスに失敗がない場合のエントリ使用状態の遷移を示す図である。ミスアクセス制御部のエントリ数は32個とする。図中、空きエントリはメモリリクエストが登録されていないエントリである。確定エントリは、投機リクエストが登録され投機成功したエントリ、またはタグミス判定後に発行される通常リクエストが登録されたエントリである。キャンセルエントリは、投機リクエストが登録され投機失敗したエントリである。さらに、未確定エントリは、投機リクエストが登録され投機成功または失敗が未だ決着していないエントリである。
図9の初期状態S1では、どのエントリも使用されておらず全て未使用状態であり、空きエントリである。状態S2では、特定のLLCがキャッシュミスしメモリリクエストを発行し、コヒーレンシ制御パイプラインが投機リクエストをミスアクセス制御部に発行し、投機リクエストが受け付けられた未確定エントリが発生している。
状態S3では、その後複数の投機リクエストが発行され、複数の未確定エントリが発生している。いくつの投機リクエストが未確定エントリとなりうるかについては、ミスアクセス制御部のパイプラインの長さに依存する。ここでは、最大5個の投機リクエストが未確定エントリとして存在できると仮定する。
状態S4では、最初に発行した投機リクエストについて、LLCタグコピーの参照が完了し、タグミスとなりいずれのLLCもデータを所持していなかったため、投機リクエスト(投機アクセス)が成功となり、最初の未確定エントリが確定エントリに変更している。
図10の状態S5では、その後も全ての投機リクエストについてタグミスとなり、確定エントリになっている。状態S5_1-S5_4のようにタグミスばかり発生する状況では、ミスアクセス制御部の全てのエントリを投機リクエストに使用させてもエントリが無駄にならず、投機的リクエストの発行が好ましい状況である。
図11は、タグヒットにより投機リクエスト、投機アクセスの失敗が多く発生する場合のエントリ使用状態の推移を示す図である。状態S6では、32個のエントリのうち28個がキャンセルエントリに変化している。このような状態になると、32個全てのエントリが使用中であり、その後パイプラインに入力されたメモリリクエストは投機リクエストを発行できない。さらに、入力されたメモリリクエストは、LLCタグコピーの参照によりタグミスしてミスアクセス制御部へのメモリリクエストの発行が必要になっても、エントリが全て使用状態であるため、ミスアクセス制御部に発行できない。その結果、入力されたメモリリクエストは、コヒーレンシ制御パイプラインでアボートされて、リクエストポートに差し戻され、ミスアクセス制御部のエントリが空くまで、リクエストポートからの入力とアボートを繰り返すことになる。
そこで、投機リクエスト(投機アクセス)の失敗によるペナルティを回避する方法として、投機リクエストの発行条件を、使用中のエントリ数が総エントリ数より小さい上限値以下であることに設定し、投機リクエストが全てエントリを無駄に使用することがないようにする。つまり、タグミスにより発行が必要になったメモリリクエストが使用できる空きエントリを確保するようにする。
図12は、投機リクエストの発行条件を使用中のエントリ数がある上限値以下と設定した状態例を示す図である。図12の例では、投機リクエストの発行条件として、使用中のエントリ数の上限値が24個以下に設定されている。状態S7_1では、24個の使用中エントリが投機リクエスト成功になることで確定エントリになり、したがってキャンセルエントリ数はゼロである。この場合、さらに投機リクエストがエントリを使用しても、キャンセルエントリによる無駄が発生する可能性が低い。しかし、その後の投機リクエストは使用エントリ数の上限値により発行が制限されて、投機リクエストによるレイテンシ削減効果が限定的になる。したがって、このような状態S7_1では、上限値が低すぎて、上限値を設けることはエントリの使用効率の低下を招く。
一方、状態S7_2では、24個の使用中エントリのほとんどがキャンセルエントリに変更されている。そのため、発行が必要なメモリリクエストが使用できる空きエントリが、総エントリ数32個から上限値24個を減じた8個に止まっている。したがって、キャンセルエントリ数が多いにもかかわらず上限値が24個と高すぎて、発行が必要なメモリリクエストの使用に供される空きエントリ数が少なくなっている。但し、上限値を低く設定すると、逆に、投機リクエストの発行機会を奪うことになり好ましくない。
図13は、本実施の形態における投機リクエストの発行数を適切に制御する方法を説明する図である。本実施の形態では、コヒーレンシ制御パイプラインが、投機リクエストを発行できる条件である使用エントリ数の上限値を、キャンセルリクエストの数に応じて適切な値に制御する。例えば、キャンセルリクエストの数が少なければ上限値をより高く設定し、キャンセルリクエストの数が多くなれば上限値をより低く設定する。その結果、キャンセルリクエスト数が少なければ空きエントリ数も少なくして投機リクエストの発行機会を多くし、キャンセルリクエスト数が多ければ空きエントリ数を多くして投機リクエストの発行機会をより少なく抑制する。
図13中、状態S8_1は、キャンセルエントリの数が0の例である。このような場合、投機リクエストを発行できる条件である使用エントリ数の上限値UPLを、総エントリ数E_MAXと等しい 値CF1に設定する。つまり、使用エントリ数が総エントリ数E_MAXに達するまで、投機リクエストの発行を許容する。
一方、状態S8_2は、キャンセルエントリの数CNCL_CUNTが7個と増えてきている。このような場合、総エントリ数E_MAX(=CF1)よりキャンセルエントリ数CNCL_CUNTだけ少ない数(32−7=25)まで投機リクエストの発行を許容する。つまり、上限値UPLを総エントリ数E_MAX(=CF1)からキャンセルエントリ数CNCL_CUNTを減じた数に設定する。
さらに、状態S8_3は、キャンセルエントリの数CNCL_CUNTがさらに10個に増えている。この場合も、上限値UPLを総エントリ数E_MAX(=CF1)からキャンセルエントリ数CNCL_CUNTを減じた数に設定するすると、上限値UPLは32−10=22個となり、状態S8_2よりも低く設定される。
上記のように投機リクエストコヒーレンシ制御パイプラインは、上限値をキャンセルエントリの数が増えればより低い値に、減ればより高い値に制御し、ミスアクセス制御部の使用中エントリ数が上限値UPLに達するまで投機リクエストの発行を許可し、使用中エントリが上限値UPL以上になると、投機リクエストの発行を禁止する。
さらに、上記の値CF1を総エントリ数E_MAXより所定数低い値にするようにしても良い。このようにすることで、キャンセルエントリ数CNCL_CUNTが0であっても、投機リクエストが全てのエントリを使用する状態にならないようにすることができる。これにより、タグコピー参照によるチェック後に発行が必要になるメモリアクセスがエントリを使用できるようになる。
[第1の実施の形態]
本実施の形態によると、図3に示したコヒーレンシ制御部の構成に示すとおり、コヒーレンシ制御パイプライン12は、パイプラインの先頭から投機リクエストバリッド信号MSC_REQ_VALをミスアクセス制御部14_2に発行可能な構成を有する。
また、図4に示したコヒーレンシ制御パイプライン12には、投機リクエスト制御部124が設けられる。投機リクエスト制御部124は、メモリリクエストがミスアクセス制御部による処理を必要とする可能性があることを示す投機可能フラグSPC_READYが真の場合、使用中エントリ数をカウントするエントリ使用数カウンタUSE_CUNTのカウント値と、キャンセル数をカウントするキャンセルエントリ数カウンタCNCL_CUNTのカウント値とに基づいて、投機リクエストの発行を通知する投機リクエストバリッド信号SPC_REQ_VALを生成し、ミスアクセス制御部に出力する。これにより、LLCタグコピーを参照するアドレス・タグチェック部121のステージの判定結果より前に、投機リクエストを有効にする投機リクエストバリッド信号SPC_REQ_VALにより、メモリリクエストREQ_inが投機的にミスアクセス制御部に発行される。
また、投機リクエスト制御部124は、タグヒット・ミス信号TAG_H/Mやアボート信号ABORTに応じて、投機リクエストキャンセル信号MSC_SPC_CANCLを生成し、ミスアクセス制御部に出力する。さらに、投機リクエスト制御部124は、ミスアクセス制御部から確定エントリを開放したことを通知するリリースバリッド信号MSC_RLS_VALに応答して、エントリ使用数カウンタUSE_CUNTを減じ、さらに、キャンセルエントリを開放したことを通知するキャンセルエントリリリースバリッド信号MSC_CNCL_RLS_VALに応答して、キャンセルエントリ数カウンタCNCL_CUNTのカウント値を減じる。
コヒーレンシ制御パイプライン12が管理するエントリ使用数カウンタUSE_CUNTは、前述の通り、投機リクエストを発行するか、または投機リクエストを発行していないメモリリクエストを、タグコピー参照によりタグミス判定後の通常のタイミングで発行するとき加算される。また、エントリ使用数カウンタUSE_CUNTは、メモリ応答を受信し、ミスアクセス制御部がエントリを開放したとき減算される。
キャンセルエントリ数カウンタCNCL_CUNTは、前述の通り、投機リクエストについてタグコピー参照によりタグヒット判定されたときや、他の要因で投機リクエストされたメモリリクエストがアボートされたとき加算される。コヒーレンシ制御パイプライン12は、投機リクエストのメモリリクエストがキャンセルとなったことを、前述の投機リクエストキャンセル信号MSC_SPC_CANCLでミスアクセス制御部に通知し、これにより、ミスアクセス制御部のエントリ内に投機キャンセルフラグSPC_CANCLE_FLGとして保持される(図14参照)。
一方、ミスアクセス制御部は、メモリシステムからメモリ応答が返り、メモリ応答に対応するエントリが投機キャンセルフラグを保持している場合、エントリの開放と共に、前述のキャンセルエントリリリースバリッド信号MSC_CNCL_RLS_VALにより、キャッシュ制御パイプラインに対してキャンセルエントリ数カウンタCNCL_CUNTの減算を指示する。このときミスアクセス制御部はリリースバリッド信号MSC_RLS_VALも出力する。
したがって、キャンセルエントリ数カウンタCNCL_CUNTの値は、投機リクエストが失敗しメモリから応答があるまでの間、開放待ちになっているエントリの数を示している。
図14は、本実施の形態におけるコヒーレンシ制御部CHR内の主にコヒーレンシ制御パイプライン12とミスアクセス制御部14との間の関係を示す図である。リクエストポートRP_0−RP_3は、下位レベルのキャッシュそれぞれから発行されるリクエストをエントリする。各リクエストポートは、複数のエントリ(図14では4エントリ)を有する。各リクエストポートの複数のエントリは、セレクタにより選択され、調停回路10、11によりさらに選別され、コヒーレンシ制御パイプライン12に入力される。
リクエストポートは、下位レベルのキャッシュからリクエストを受信したとき、リクエストに含まれる命令コードやアドレスに基づいて、ミスアクセス制御部にメモリリクエストを発行する可能性があるか否かを判定し、可能性がある場合各エントリの投機可能フラグSPC_READYを「1」に設定するようにしてもよい。
このときに、命令コードやアドレスを確認することで、LLCタグコピーを引かなくてもリクエストがミスアクセス制御部に発行されないことが自明であるリクエストには、投機可能フラグSPC_REDYを「0」に設定するようにしてもよい。たとえば、リクエストのアドレスが非キャッシュ可能アドレス空間の場合、メモリアクセスが発行されることはない。したがって、投機リクエストをミスアクセス制御部に発行する必要はない。
上記の投機可能フラグSPC_READYは、リクエストポートのリクエストが初めてコヒーレンシ制御パイプラインに入力されるときだけ投機リクエストを発行させ、2回目以降の入力時には投機リクエストを発行させない制御に利用することもできる。すなわち、投機リクエストがオーダー制御部での処理中のオーダーとアドレスが競合してアボートした場合、そのリクエストはリクエストポートに差し戻される。このときに投機可能フラグSPC_READYを「0」に変更する制御を行えば、上記の制御が可能になる。
この制御により、パイプラインに再度入力されたときに、再び投機リクエストを発行することで、同じリクエストに対して複数の投機リクエストが発行されることを抑止できる。パイプラインでアボートすると投機リクエストはキャンセルされることに加えて、アドレスの競合による排他制御により、処理中のリクエストやオーダーが処理完了してロック状態が解除されるまで複数回アボートを繰り返すことが多い。したがって、一度アボートしたリクエストがパイプラインに再度入力されるたびに投機リクエストを発行すると、無駄なキャンセルエントリでミスアクセス制御部内のエントリが埋め尽くされること起こり、エントリの使用効率の低下を招く。
調停回路10,11により選択されたリクエストは、コヒーレンシ制御パイプライン12に入力される。そして、投機リクエスト制御部124では、投機ビジー生成回路125が、エントリ使用数カウンタ値USE_CUNTとキャンセルエントリ数カウンタ値CNCL_CUNTに基づいて、投機リクエストの発行が許可されるか否かを判定して投機ビジー信号MSC_SPC_BUSYを生成する。さらに、投機リクエスト発行回路126が投機ビジー信号と投機可能フラグSPC_READYとに基づいて、投機リクエストが有効であることを示す投機リクエストバリッド信号SPC_REQ_VALを生成し、ミスアクセス制御部14に出力する。投機ビジー生成回路と投機リクエスト発行回路の具体例については後述する。
投機リクエスト制御部124は、LLCタグコピーの参照によるキャッシュ判定がタグヒットになり、または投機リクエストのメモリリクエストが他の要因でアボートされると、投機リクエストキャンセル信号MSC_SPC_CANCELを生成し、ミスアクセス制御部14に出力し、投機リクエストが失敗したことを通知(投機キャンセル通知)する。具体的には、制御パイプライン12は、投機キャンセル通知として、通常バリッド信号MSC_REQ_VAL=1、投機リクエストキャンセル信号MSC_SPC_CANCEL=1をミスアクセス制御部14に送信する。
一方、コヒーレンシ制御パイプライン12は、キャッシュ判定がタグミスになり投機リクエストが成功した場合には、通常リクエストバリッド信号MSC_REQ_VALをミスアクセス制御部14に出力し、投機リクエストが成功したことを通知する。具体的には、制御パイプライン12は、上記の投機リクエスト成功通知として、通常バリッド信号MSC_REQ_VAL=1、投機リクエストキャンセル信号MSC_SPC_CANCEL=0をミスアクセス制御部14に送信する。
また、コヒーレンシ制御パイプライン12は、投機リクエストが発行されなかったメモリリクエストが、LLCタグコピーの参照によりタグミスし、他の要因でアボートされないと、ミスアクセス制御部内のエントリの使用数がエントリ総数未満であれば、通常のメモリリクエストを有効にする通常リクエストバリッド信号MSC_REQ_VALをミスアクセス制御部14に出力して、通常のメモリリクエストを通知する。具体的には、制御パイプライン12は、通常のメモリリクエストの通知として、通常バリッド信号MSC_REQ_VAL=1、投機リクエストキャンセル信号MSC_SPC_CANCEL=0をミスアクセス制御部14に送信する。
上記のMSC_REQ_VAL=1とMSC_SPC_CANCEL=1の組み合わせ信号は、ミスアクセス制御部14によりエントリの新規獲得要求として受信される。但し、ミスアクセス制御部14は、投機リクエスト対象のエントリには投機済みフラグSPC_DONE(図示せず)を保持している。そこで、ミスアクセス制御部14は、MSC_REQ_VAL=1とMSC_SPC_CANCEL=1の組み合わせ信号を受信した場合、SPC_DONE=1なら投機成功通知と判定して、メモリコントローラにメモリリクエストを発行しない。一方、SPC_DONE=0なら新規のメモリリクエストと判定してエントリ登録しメモリコントローラにメモリリクエストを発行する。
図14に示されるとおり、コヒーレンシ制御パイプライン12に入力するリクエストの情報は、バス17によりミスアクセス制御部14に通知されている。そして、上記の投機リクエストバリッド信号SPC_REQ_VALが有効状態「1」になると、ミスアクセス制御部は、そのリクエストの情報をエントリに登録する。同様に、投機リクエストが発行されていないリクエストについて上記の通常リクエストバリッド信号MSC_REQ_VALが有効状態「1」になると、ミスアクセス制御部は、そのリクエスト情報をエントリに登録する。
一方、上記の投機リクエストキャンセル信号MSC_SPC_CANCELが発生すると、ミスアクセス制御部は、そのリクエストを登録するエントリの投機キャンセルフラグSPC_CANCL_FLGを「1」に立てる。これにより、そのエントリがキャンセルエントリであることが示される。
図15は、本実施の形態における投機リクエスト制御部124の構成例を示す図である。図14で示したとおり、投機リクエスト制御部124は、投機ビジー生成回路125と投機リクエスト発行回路126を有する。
投機リクエスト制御部124は、エントリ使用数カウンタUSE_CUNTとキャンセルエントリ数カウンタCNCL_CUNTのカウント値から、現在のミスアクセス制御部内のエントリの使用状況を判断し、投機リクエストの発行が許容されるか禁止されるかの判断を行う投機ビジー生成回路125を有する。さらに、入力されたリクエストの投機可能フラグSPC_READYが投機可能「1」の場合に、投機リクエストの発行が許容される場合は、投機リクエストバリッド信号SPC_REQ_VALを有効状態「1」にする投機リクエスト発行回路126を有する。
投機ビジー生成回路125は、全エントリが使用中であることを示す全エントリ使用中信号MSC_FULLと、エントリ使用数及びキャンセルエントリ数に基づく第1の投機ビジー信号MSC_BUSY_SPC_CANとの論理和により、投機ビジー信号MSC_SPC_BUSYを生成する。投機ビジー信号MSC_SPC_BUSYが「1」になると投機リクエストの発行が禁止され、「0」になると許可される。
図中の論理回路127が、エントリ使用数カウンタUSE_CUNTのカウント値が総エントリ数E_MAX以上の場合に、全エントリ使用中信号MSC_FULLを「1」(発行禁止)にする。また、論理回路128が、エントリ使用数カウンタUSE_CUNTのカウント値が、第1の設定値CF1(例えば総エントリ数E_MAXまたはそれより小さい数)からキャンセルエントリ数カウンタCNCL_CUNTのカウント値を減じた数以上の場合に、第1の投機ビジー信号MSC_BUSY_SPC_CANを「1」(発行禁止)にする。
したがって、第1の実施の形態では、エントリ使用数が総エントリ数以上になる場合か、またはエントリ使用数が第1の設定値CF1からキャンセルエントリ数を減じた数以上になる場合に、投機リクエストの発行が抑止、つまり禁止される。一方、エントリ使用数が総エントリ数未満であり、且つエントリ使用数が第1の設定値CF1からキャンセルエントリ数を減じた上限値未満の場合に、投機リクエストの発行が許可される。具体的には、以下の論理演算式で投機リクエストの発行を抑止する、発行を許可することが判定される。
投機リクエストの発行抑止=(E_MAX≦USE_CUNT)OR{(CF1-CNCL_CUNT)≦USE_CUNT}
投機リクエストの発行許可=(E_MAX>USE_CUNT)AND{(CF1-CNCL_CUNT)>USE_CUNT}
投機リクエストの発行抑止の第1の条件(E_MAX≦USE_CUNT)は、そもそも全エントリが使用状態であることを示す。また、第2の条件{(CF1-CNCL_CUNT)≦USE_CUNT}は、図13で説明したエントリ使用数が上限値UPL(=CF1-CNCL_CUNT)以上なら投機リクエストの発行が抑止されることと同じである。
第1に、第1の設定値CF1が総エントリ数E_MAXと等しく設定されている場合は、キャンセルエントリ数が0の場合に投機リクエストはエントリ使用数が総エントリ数E_MAXになるまで発行される。第2に、第1の設定値CF1が総エントリ数より小さく設定されている場合(CF1=E_MAX-α)、キャンセルエントリ数にかかわらずα個の空きエントリが確保され、通常のメモリリクエストのために使用可能になる。第3に、上限値UPLをキャンセルエントリ数に係数Kを乗じて第1の設定値CF1(総エントリ数E_MAXまたはE_MAX-α)から減じることで、例えば係数K=2に設定するとキャンセルエントリ数の2倍の空きエントリ(または2倍の空きエントリ+α)が確保され、通常のメモリリクエストの為に使用可能になる。すなわち、第2の条件は以下のように修正される。
(CF1−K*CNCL_CUNT)≦USE_CUNT
さらに、投機リクエスト発行回路126は、入力されたリクエストの投機可能フラグSPC_READYと投機ビジー信号MSC_SPC_BUSYの反転値との論理積により、投機リクエストバリッド信号SPC_REQ_VALを生成する。つまり、入力されたリクエストの投機可能フラグSPC_READYが「1」であり、投機ビジー信号MSC_SPC_BUSYが「0」(発行許可)の場合に、投機リクエストバリッド信号SPC_REQ_VALが「1」にされ、投機リクエストが発行される。
論理回路129は、投機リクエストキャンセル信号MSC_SPC_CANCELを生成する論理回路である。論理回路129は、投機リクエストバリッド信号SPC_REQ_VALが「1」であり(投機リクエストが発行済み)、タグ判定がタグヒットまたはアボートされた場合に、投機リクエストキャンセル信号MSC_SPC_CANCELを「1」にする。
図15には、コヒーレンシ制御パイプライン12内の処理判定回路122による通常のリクエストバリッド信号MSC_REQ_VALを生成する論理回路が示される。処理判定回路内の論理回路は、タグヒット・ミス信号TAG_H/Mがタグミスによる「0」であり、パイプラインにてアボートされないことによるアボート信号ABORTが「0」の場合に、通常のリクエストバリッド信号MSC_REQ_VALを「1」にする。
但し、この論理回路は、投機リクエストがされずにタグミスした時には、TAG_H/MとABORTが「0」に加えてエントリ使用数が総エントリ数以上を示す全エントリ使用中信号MSC_FULLが「0」の場合に、MSC_REQ_VAL=1を発行し、投機リクエストがされてタグミス(投機リクエスト成功)の時には、TAG_H/MとABORTが「0」の場合に、MSC_REQ_VAL=1を発行する。
図16は、ミスアクセス制御部の一部の構成例を示す図である。ミスアクセス制御部14は、発行されたメモリリクエストを登録するエントリMSC_ENTRYを32個有する。さらに、ミスアクセス制御部14は、コヒーレンシ制御パイプライン12が発行した投機リクエストキャンセル信号MSC_SPC_CANCELに応答して、投機リクエストキャンセル信号に対応するエントリ内の投機キャンセルフラグSPC_CANCEL_FLGを「1」に変更する。また、メモリシステムに発行したメモリリクエストに対するメモリ応答の受信に応答して、メモリ応答に対応するエントリを開放するとともにエントリリリースバリッド信号MSC_RLS_VALをコヒーレンシ制御パイプライン12に発行する。また、メモリ応答の受信に応答して、対応するエントリの投機キャンセルフラグSPC_CANCEL_FLGが「1」の場合に、キャンセルエントリリリースバリッド信号MSC_CNCL_RLS_VALをコヒーレンシ制御パイプライン12に発行する。
図15に戻り、コヒーレンシ制御パイプライン内のエントリ使用数カウンタとキャンセルエントリ数カウンタの加算と減算の制御について説明する。まず、エントリ使用数カウンタUSE_CUNTは、投機リクエストバリッド信号SPC_REQ_VALが「1」にされて投機リクエストが発行されるときに加算され、通常のリクエストバリッド信号MSC_REQ_VALが「1」にされて通常のリクエストが発行されるときも加算される。また、エントリ使用数カウンタは、エントリリリースバリッド信号MSC_RLS_VALが「1」のときに減算される。
一方、キャンセルエントリ数カウンタCNCL_CUNTは、投機リクエストキャンセル信号MSC_SPC_CANCELが「1」のときに加算され、投機リクエストキャンセル信号MSC_SPC_CANCELが「1」且つキャンセルエントリリリースバリッド信号MSC_CNCL_RLS_VALが「1」の時に減算される。
[第1の実施の形態の変形例]
図17は、第1の実施の形態における投機リクエスト制御部の構成の変形例を示す図である。図15の構成例と比較すると、図17の投機ビジー生成回路125は、全エントリ使用中信号MSC_FULLと第1の投機ビジー信号MSC_BUSY_SPC_CANに加えて、第2の投機ビジー信号MSC_BUSY_SPC_MEMと第3の投機ビジー信号MSC_BUSY_SPC_ACCELの論理和により投機ビジー信号MSC_SPC_BUSYを生成する。さらに、図17の投機リクエスト制御部は、リプレースバッファエントリ使用数カウンタRPB_CUNTと、論理回路130,131を有する。
図14に示されたリプレースバッファ16は、LLCからのライトバック処理を行う回路であり、ミスアクセス制御部と同様に、リクエストを受け付けるエントリRPB_ENTRYを複数有する。そして、リプレースバッファ16は、ライトバック要求RPB_REQ_VALをエントリに受け付けると、メモリコントローラMCを介してメモリMEMにキャッシュブロックのデータをライトバックする。そして、メモリコントローラからライトバック完了応答を受信すると、リプレースバッファは、リリースバリッド信号RPB_RLS_VALをコヒーレンシ制御パイプラインに送信する。
図17に示される通り、コヒーレンシ制御パイプラインは、リプレースバッファのエントリ使用数カウンタRPB_CUNTでリプレースバッファ内のエントリの使用数を管理する。すなわち、リプレースバッファのエントリ使用数カウンタRPB_CUNTを、ライトバック要求RPB_REQ_VALが「1」になると加算し、リプレースバッファのリリースバリッド信号RPB_RLS_VALが「1」になると減算する。
図17の第2の投機ビジー信号MSC_BUSY_SPC_MEMは、論理回路130により生成される。論理回路130は、ミスアクセス制御部内のエントリ使用数カウンタUSE_CUNTの値とリプレースバッファのエントリ使用数カウンタRPB_CUNTの値の和が、第2の設定値CF2以上になると、第2の投機ビジー信号MSC_BUSY_SPC_MEMを「1」にする。第2の設定値CF2は、ミスアクセス制御部の総エントリ数とリプレースバッファの総エントリ数の合計値より小さい任意の値に設定される。
すなわち、メモリMEMへのアクセスを伴うメモリリクエストを発行するのは、ミスアクセス制御部と、キャッシュメモリのダーティデータをライトバックするリプレースバッファである。したがって、両方からのメモリアクセス数が第2の設定値CF2以上になると、メモリリクエストの発行数が増大してメモリの負荷が増大していることを意味する。このような状況下で投機リクエストを発行すると、キャンセルされるリクエストがメモリアクセスを実行することで、無効なメモリアクセスがメモリ帯域を使用することになり、メモリの実効的なスループットを低下させる。また、メモリの負荷が高いときは、メモリコントローラのリクエストキューにメモリアクセスが滞留するため、投機リクエストによるレイテンシ削減効果は望めない。
そこで、投機ビジー生成回路125は、CF2≦USE_CUNT+RPB_CUNTが満たされる場合に「1」になる第2の投機ビジー信号MSC_BUSY_SPC_MEMにより、投機ビジー信号MSC_SPC_BUSYを「1」(発行禁止)にする。これにより、投機リクエスト制御部は、メモリMEMにメモリアクセスが殺到している状況下で、投機リクエストの発行を抑止することができる。
図17の第3の投機ビジー信号MSC_BUSY_SPC_ACCELは、論理回路131により生成される。論理回路131は、ミスアクセス制御部内のエントリ使用数カウンタUSE_CUNTの値が、第3の設定値CF3以上になると、第3の投機ビジー信号MSC_BUSY_SPC_ACCELを「1」にする。第3の設定値CF3は、例えばミスアクセス制御部の総エントリ数より小さい任意の値に設定される。
すなわち、第3の設定値CF3を適宜減少させることで、投機リクエストの発行の抑制を加速化(アクセル)させることができ、逆に適宜増大させることで、投機リクエストの発行の抑制を弱めることができる。
[第2の実施の形態]
図18は、第2の実施の形態におけるキャッシュの構成を示す図である。このキャッシュCACHEは、例えば、図1におけるLLC(最上位レベルのキャッシュ)であり、またラストレベルではなくそれより下位レベルのキャッシュでもよい。前述の通り、本実施の形態の投機リクエストをキャンセルエントリ数に応じて抑制する制御は、第1の実施の形態のコヒーレンシ制御部以外に、メモリリクエストを発行するキャッシュにも適用できる。そこで、第2の実施の形態では、投機リクエストの抑制制御がキャッシュに適用される。
図3の第1の実施の形態におけるコヒーレンシ制御部は、複数のLLCとメモリ階層との間に設けられ、LLCでのキャッシュミスに対して発行されたメモリアクセスを入力し、LLCのタグコピーをチェックし、キャッシュヒットすればデータを所持しているLLCに転送オーダーを発行し、キャッシュミスすればメモリ階層にメモリリクエストを発行する。したがって、図3のコヒーレンシ制御部は、複数の下位レベルからのリクエストを受け付けてメモリ階層に対する制御を行う制御パイプラインと、リクエストに対応する処理を実行する処理ユニットを有する構成において、ミスアクセス制御部にメモリリクエストを投機的に発行する。
図18のキャッシュCACHEは、図3のコヒーレンシ制御部と同様の上記の構成を有する。ただし、キャッシュは、コヒーレンシ制御部と異なり、キャッシュメモリのタグメモリ18とデータメモリ19を有する。つまり、キャッシュは、タグメモリのコピーではなくタグメモリ18の原本を有することと、データメモリ19を有することで、コヒーレンシ制御部と異なる。また、キャッシュは、上位レベル(上位レベルのキャッシュやコヒーレンシ制御部)からオーダーを受け付けるリクエストポートRP_12と、上位レベルからメモリ応答を受け付けるリクエストポートRP_13を有することでも、コヒーレンシ制御部と異なる。
一方、キャッシュは、コヒーレンシ制御部と同様に、リクエストポートRPと、コア/キャッシュ間調停回路10と、プライオリティ調停回路11と、キャッシュ制御パイプライン120を有し、さらに、ミスアクセス制御部14、オーダー制御部15、リプレースバッファ16などの処理ユニット20を有する。但し、ミスアクセス制御部は上位レベル(上位レベルのキャッシュやコヒーレンシ制御部)にメモリリクエストを発行する。図3のコヒーレンシ制御部のミスアクセス制御部は、上位レベルのメモリ階層にメモリリクエストを発行するとともにリモート(他のCPU)にもリクエストを発行している。
したがって、図18のキャッシュも、コヒーレンシ制御部と同様に、キャッシュ制御パイプライン120が、タグを参照してヒットするか否か判定し、ミスする場合にミスアクセス制御部にメモリリクエストを発行する。したがって、図8のキャッシュも、タグ判定する前に投機リクエストを発行することでレイテンシを改善することが期待できる一方で、ヒットしてキャンセルリクエストが増大するというコヒーレンシ制御部と共通の課題を有する。
そこで、図18のキャッシュは、投機リクエストのキャンセルによるエントリの使用効率が低下することを抑制するために、キャッシュ制御パイプラインが投機リクエストの発行をキャンセル数に応じて抑制する。
キャッシュ制御パイプライン120の構成は、図4、図14、図15などと同様の投機リクエスト制御部を有する。
以上のとおり、本実施の形態によれば、投機リクエストがキャンセルされたエントリ数に応じて、投機リクエストの発行をより抑制するようにすることで、投機リクエストを受け付けるミスアクセス制御部内のエントリの使用効率を向上させることができる。本実施の形態は、コヒーレンシ制御部やキャッシュ(LLCまたはそれ以外のレベルのキャッシュ)に適用される。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
演算処理部と、
前記演算処理部が発行するメモリに対するメモリリクエストの制御を行う第1の制御部とを有し、
前記第1の制御部は、
前記メモリリクエストにエントリを割り当てて前記メモリリクエストに係る処理を制御するミスアクセス制御部と、
入力されたメモリリクエストがキャッシュヒットするか否かのキャッシュヒット判定をし、キャッシュミスの判定の場合前記入力されたメモリリクエストについて通常メモリリクエストを前記ミスアクセス制御部に発行する制御パイプラインとを有し、
前記制御パイプラインは、前記キャッシュヒット判定する前に前記入力されたメモリリクエストについて投機的メモリリクエストを前記ミスアクセス制御部に発行し、前記キャッシュヒット判定がヒット判定の場合に前記発行した投機的メモリリクエストをキャンセルし、前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストの発行をより抑制する投機的リクエスト制御部を有する、演算処理装置。
(付記2)
前記投機的リクエスト制御部は、前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストに割り当てられるエントリ数を減じる、付記1に記載の演算処理装置。
(付記3)
前記投機的リクエスト制御部は、前記ミスアクセス制御部のエントリの使用数が、第1設定数から前記キャンセルされる投機的メモリリクエストのエントリ数を減じた第1の上限数以上の場合、前記投機的メモリリクエストの発行を禁止する、付記2に記載の演算処理装置。
(付記4)
前記第1設定数は、前記エントリの総数である、付記3に記載の演算処理装置。
(付記5)
前記第1設定数は、前記エントリの総数より小さい数である、付記3に記載の演算処理装置。
(付記6)
前記投機的リクエスト制御部は、前記ミスアクセス制御部のエントリの使用数が、前記キャンセルされる投機的メモリリクエストのエントリ数に係数を乗じた数を第1設定数から減じた第1の上限数以上の場合、前記投機的メモリリクエストの発行を禁止する、付記2に記載の演算処理装置。
(付記7)
前記第1の制御部は、さらに、キャッシュに登録されたキャッシュラインを前記メモリに書き戻すリプレース処理を制御するリプレースバッファを有し、
前記投機的リクエスト制御部は、さらに、前記ミスアクセス制御部のエントリの使用数とリプレースバッファのエントリの使用数の和が第2設定数以上の場合、前記投機的メモリリクエストの発行を禁止する、付記3または6に記載の演算処理装置。
(付記8)
前記投機的リクエスト制御部は、さらに、前記ミスアクセス制御部のエントリの使用数が総数より小さい第3設定値以上の場合、前記投機的メモリリクエストの発行を禁止する、付記3または6に記載の演算処理装置。
(付記9)
前記投機的リクエスト制御部は、さらに、前記ミスアクセス制御部のエントリの使用数が総数以上の場合、前記投機的メモリリクエストの発行を禁止する、付記3または6に記載の演算処理装置。
(付記10)
前記制御パイプラインは、前記ミスアクセス制御部のエントリの使用数が総数以上の場合、前記通常メモリリクエストの発行を禁止する、付記3または6に記載の演算処理装置。
(付記11)
さらに、前記演算処理部が発行する前記メモリリクエストを処理するキャッシュと、
前記キャッシュのコヒーレンシを制御するコヒーレンシ制御部を有し、
前記コヒーレンシ制御部は、前記第1の制御部を有し、前記キャッシュヒット判定を前記キャッシュのタグの写しを参照して行う、付記1に記載の演算処理装置。
(付記12)
さらに、前記演算処理部が発行する前記メモリリクエストを処理するキャッシュを有し、
前記キャッシュは、前記第1の制御部を有し、前記キャッシュヒット判定を前記キャッシュのタグを参照して行う、付記1に記載の演算処理装置。
(付記13)
演算処理部と、
前記演算処理部が発行するメモリに対するメモリリクエストの制御を行う第1の制御部とを有し、
前記第1の制御部は、前記メモリリクエストにエントリを割り当てて前記メモリリクエストに係る処理を制御するミスアクセス制御部と、入力されたメモリリクエストを前記ミスアクセス制御部に発行する制御パイプラインとを有し、
前記制御パイプラインは、
入力されたメモリリクエストがキャッシュヒットするか否かのキャッシュヒット判定をし、
キャッシュミスの判定の場合前記入力されたメモリリクエストについて通常メモリリクエストを前記ミスアクセス制御部に発行し、
前記キャッシュヒット判定する前に前記入力されたメモリリクエストについて投機的メモリリクエストを前記ミスアクセス制御部に発行し、
前記キャッシュヒット判定がヒット判定の場合に前記発行した投機的メモリリクエストをキャンセルし、
前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストの発行をより抑制する、演算処理装置の制御方法。
1:CPUチップ、演算処理装置、マイクロプロセッサ、プロセッサ
CORE:CPUコア、コア、演算処理部
L1D, L1I:L1キャッシュ(データメモリ、インストラクションメモリ)
LLC:Last Level Cache、最上位レベルキャッシュ
CHR:コヒーレンシ制御部
RP:リクエストポート
10:コア/キャッシュ間調停回路
11:プライオリティ調整回路
20:処理ユニット
18:LLC-TAG、LLC-DATA
13:LLC-TAG-COPY
14:ミスアクセス制御部
15:オーダー制御部
16:リプレース制御部
17:バス
12:コヒーレンシ制御パイプライン
120:キャッシュ制御パイプライン
121:アドレス・TAGチェック部
122:処理判定部
123:資源判定部
Abort, 12E:強制アボート信号
Ab1,Ab2:通常アボート信号(排他アドレスアボート、資源非獲得アボート)
SPC_READY:投機可能フラグ
MSC_SPC_BUSY:投機ビジー信号
MSC_REQ_VAL:通常リクエストバリッド信号
SPC_REQ_VAL:投機リクエストバリッド信号
MSC_SPC_CANCEL:投機リクエストキャンセル信号
MSC_RLS_VAL:通常エントリリリースバリッド信号
MSC_CNCL_RLS_VAL:キャンセルエントリリリースバリッド信号
MSC_FULL:全エントリ使用中信号
MSC_BUSY_SPC_CAN:第1の投機ビジー信号(キャンセル数に基づく投機ビジー信号)
MSC_BUSY_SPC_MEM:第2の投機ビジー信号(メモリアクセス数に基づく投機ビジー信号)
MSC_BUSY_SPC_ACCEL:第3の投機ビジー信号(投機リクエスト抑制アクセル信号)
USE_CUNT:ミスアクセス制御部のエントリ使用数カウンタ
CNCL_CUNT:ミスアクセス制御部のキャンセルエントリ数カウンタ
RPB_CUNT:リプレースバッファのエントリ使用数カウンタ
124:投機リクエスト制御部
125:投機ビジー生成回路
126:投機リクエスト発行回路

Claims (10)

  1. 演算処理部と、
    前記演算処理部が発行するメモリに対するメモリリクエストの制御を行う第1の制御部とを有し、
    前記第1の制御部は、
    前記メモリリクエストにエントリを割り当てて前記メモリリクエストに係る処理を制御するミスアクセス制御部と、
    入力されたメモリリクエストがキャッシュヒットするか否かのキャッシュヒット判定をし、キャッシュミスの判定の場合前記入力されたメモリリクエストについて通常メモリリクエストを前記ミスアクセス制御部に発行する制御パイプラインとを有し、
    前記制御パイプラインは、前記キャッシュヒット判定する前に前記入力されたメモリリクエストについて投機的メモリリクエストを前記ミスアクセス制御部に発行し、前記キャッシュヒット判定がヒット判定の場合に前記発行した投機的メモリリクエストをキャンセルし、前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストの発行をより抑制する投機的リクエスト制御部を有する、演算処理装置。
  2. 前記投機的リクエスト制御部は、前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストに割り当てられるエントリ数を減じる、請求項1に記載の演算処理装置。
  3. 前記投機的リクエスト制御部は、前記ミスアクセス制御部のエントリの使用数が、第1設定数から前記キャンセルされる投機的メモリリクエストのエントリ数を減じた第1の上限数以上の場合、前記投機的メモリリクエストの発行を禁止する、請求項2に記載の演算処理装置。
  4. 前記第1設定数は、前記エントリの総数である、請求項3に記載の演算処理装置。
  5. 前記第1設定数は、前記エントリの総数より小さい数である、請求項3に記載の演算処理装置。
  6. 前記投機的リクエスト制御部は、前記ミスアクセス制御部のエントリの使用数が、前記キャンセルされる投機的メモリリクエストのエントリ数に係数を乗じた数を第1設定数から減じた第1の上限数以上の場合、前記投機的メモリリクエストの発行を禁止する、請求項2に記載の演算処理装置。
  7. 前記第1の制御部は、さらに、キャッシュに登録されたキャッシュラインを前記メモリに書き戻すリプレース処理を制御するリプレースバッファを有し、
    前記投機的リクエスト制御部は、さらに、前記ミスアクセス制御部のエントリの使用数とリプレースバッファのエントリの使用数の和が第2設定数以上の場合、前記投機的メモリリクエストの発行を禁止する、請求項3または6に記載の演算処理装置。
  8. 前記投機的リクエスト制御部は、さらに、前記ミスアクセス制御部のエントリの使用数が総数より小さい第3設定値以上の場合、前記投機的メモリリクエストの発行を禁止する、請求項3または6に記載の演算処理装置。
  9. 前記投機的リクエスト制御部は、さらに、前記ミスアクセス制御部のエントリの使用数が総数以上の場合、前記投機的メモリリクエストの発行を禁止する、請求項3または6に記載の演算処理装置。
  10. 演算処理部と、
    前記演算処理部が発行するメモリに対するメモリリクエストの制御を行う第1の制御部とを有し、
    前記第1の制御部は、前記メモリリクエストにエントリを割り当てて前記メモリリクエストに係る処理を制御するミスアクセス制御部と、入力されたメモリリクエストを前記ミスアクセス制御部に発行する制御パイプラインとを有し、
    前記制御パイプラインは、
    入力されたメモリリクエストがキャッシュヒットするか否かのキャッシュヒット判定をし、
    キャッシュミスの判定の場合前記入力されたメモリリクエストについて通常メモリリクエストを前記ミスアクセス制御部に発行し、
    前記キャッシュヒット判定する前に前記入力されたメモリリクエストについて投機的メモリリクエストを前記ミスアクセス制御部に発行し、
    前記キャッシュヒット判定がヒット判定の場合に前記発行した投機的メモリリクエストをキャンセルし、
    前記キャンセルされた投機的メモリリクエストのエントリ数の増大に応じて、前記投機的メモリリクエストの発行をより抑制する、演算処理装置の制御方法。
JP2016087941A 2016-04-26 2016-04-26 演算処理装置及び演算処理装置の制御方法 Active JP6687845B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016087941A JP6687845B2 (ja) 2016-04-26 2016-04-26 演算処理装置及び演算処理装置の制御方法
US15/459,033 US10282310B2 (en) 2016-04-26 2017-03-15 Arithmetic processing device and control method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016087941A JP6687845B2 (ja) 2016-04-26 2016-04-26 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2017199111A true JP2017199111A (ja) 2017-11-02
JP6687845B2 JP6687845B2 (ja) 2020-04-28

Family

ID=60089653

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016087941A Active JP6687845B2 (ja) 2016-04-26 2016-04-26 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10282310B2 (ja)
JP (1) JP6687845B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020095464A (ja) * 2018-12-12 2020-06-18 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10592424B2 (en) * 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US20210311897A1 (en) * 2020-04-06 2021-10-07 Samsung Electronics Co., Ltd. Memory with cache-coherent interconnect
US11966330B2 (en) * 2020-06-05 2024-04-23 Intel Corporation Link affinitization to reduce transfer latency
US11604731B2 (en) * 2020-12-21 2023-03-14 Seagate Technology Llc Systems and methods for maintaining cache coherency

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4504134B2 (ja) 2004-08-16 2010-07-14 富士通株式会社 システム制御装置、投機フェッチ方法および情報処理装置
US20080028150A1 (en) * 2006-07-28 2008-01-31 Farnaz Toussi Autonomic Mode Switching for L2 Cache Speculative Accesses Based on L1 Cache Hit Rate
US20090015057A1 (en) * 2007-05-19 2009-01-15 Groomes David W Display device for hub caps
US7937533B2 (en) * 2007-12-10 2011-05-03 International Business Machines Corporation Structure for handling data requests

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020095464A (ja) * 2018-12-12 2020-06-18 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP7318203B2 (ja) 2018-12-12 2023-08-01 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Also Published As

Publication number Publication date
US10282310B2 (en) 2019-05-07
JP6687845B2 (ja) 2020-04-28
US20170308483A1 (en) 2017-10-26

Similar Documents

Publication Publication Date Title
CN108885583B (zh) 高速缓存存储器访问
US8412888B2 (en) Cache-based speculation of stores following synchronizing operations
US8799588B2 (en) Forward progress mechanism for stores in the presence of load contention in a system favoring loads by state alteration
US8793442B2 (en) Forward progress mechanism for stores in the presence of load contention in a system favoring loads
JP6687845B2 (ja) 演算処理装置及び演算処理装置の制御方法
US20060184743A1 (en) Cache memory direct intervention
JP6451538B2 (ja) 演算処理装置及び演算処理装置の制御方法
US20150052313A1 (en) Protecting the footprint of memory transactions from victimization
US7702858B2 (en) Latency reduction for cache coherent bus-based cache
US20090259813A1 (en) Multi-processor system and method of controlling the multi-processor system
US11409656B2 (en) Semiconductor device
EP4066119B1 (en) Cache snooping mode extending coherence protection for certain requests
US20090198910A1 (en) Data processing system, processor and method that support a touch of a partial cache line of data
JP6792139B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10970215B1 (en) Cache snooping mode extending coherence protection for certain requests
US10831607B2 (en) Dynamic transaction throttling in a data processing system supporting transactional memory
US11163700B1 (en) Initiating interconnect operation without waiting on lower level cache directory lookup
US20170046262A1 (en) Arithmetic processing device and method for controlling arithmetic processing device
US9665297B1 (en) Injection of at least a partial cache line in a private multilevel cache hierarchy
US11573902B1 (en) Controlling issue rates of requests of varying broadcast scopes in a data processing system
US11561900B1 (en) Targeting of lateral castouts in a data processing system
JP2022509735A (ja) 記憶されたデータの変更装置及び変更方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190612

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190730

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190927

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200303

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200316

R150 Certificate of patent or registration of utility model

Ref document number: 6687845

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150