IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-プロセッサ 図1
  • 特開-プロセッサ 図2
  • 特開-プロセッサ 図3
  • 特開-プロセッサ 図4
  • 特開-プロセッサ 図5
  • 特開-プロセッサ 図6
  • 特開-プロセッサ 図7
  • 特開-プロセッサ 図8
  • 特開-プロセッサ 図9
  • 特開-プロセッサ 図10
  • 特開-プロセッサ 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024126096
(43)【公開日】2024-09-20
(54)【発明の名称】プロセッサ
(51)【国際特許分類】
   G06F 12/0855 20160101AFI20240912BHJP
   G06F 12/0806 20160101ALI20240912BHJP
   G06F 12/084 20160101ALI20240912BHJP
【FI】
G06F12/0855 100
G06F12/0806 100
G06F12/084
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023034263
(22)【出願日】2023-03-07
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】鈴木 真
(72)【発明者】
【氏名】引地 徹
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205KK13
5B205NN75
(57)【要約】
【課題】上位のキャッシュのキャッシュミスの確定後に下位のキャッシュにリクエストを発行する場合に、リクエストが下位のキャッシュに到達するまでのレイテンシを低減する。
【解決手段】プロセッサは、第1キャッシュを各々含む複数のコアと、前記第1キャッシュがキャッシュミスしたときに前記コアから出力されるリクエストを処理する第2キャッシュと、前記複数のコアからそれぞれ出力される前記リクエストを調停して前記第2キャッシュに順次出力する調停部と、を有し、前記複数のコアの各々は、前記リクエストを前記調停部に出力した後、出力した前記リクエストが有効であるか否かを示す確定情報を、前記調停部を介することなく前記第2キャッシュに出力し、前記第2キャッシュは、受信した前記リクエストに対応する前記確定情報が有効を示す場合、受信した前記リクエストの処理を開始する。
【選択図】図4
【特許請求の範囲】
【請求項1】
第1キャッシュを各々含む複数のコアと、
前記第1キャッシュがキャッシュミスしたときに前記コアから出力されるリクエストを処理する第2キャッシュと、
前記複数のコアからそれぞれ出力される前記リクエストを調停して前記第2キャッシュに順次出力する調停部と、を有し、
前記複数のコアの各々は、前記リクエストを前記調停部に出力した後、出力した前記リクエストが有効であるか否かを示す確定情報を、前記調停部を介することなく前記第2キャッシュに出力し、
前記第2キャッシュは、受信した前記リクエストに対応する前記確定情報が有効を示す場合、受信した前記リクエストの処理を開始する
プロセッサ。
【請求項2】
前記第2キャッシュは、前記複数のコアの各々に対応して前記リクエストを保持する第1キューを有し、
前記複数のコアの各々の前記第1キャッシュは、前記リクエストが有効であることを示す前記確定情報を前記第2キャッシュに出力したときに前記第1キューの使用量を示す第1カウンタ値をインクリメントし、前記リクエストの処理の完了に基づいて前記第2キャッシュから第1解放通知を受信したときに前記第1カウンタ値をデクリメントする第1資源カウンタを有する
請求項1に記載のプロセッサ。
【請求項3】
前記調停部は、前記リクエストを保持する第2キューを有し、前記第2キューに保持した前記リクエストを前記第2キャッシュに出力したときに第2解放通知を前記リクエストの発行元の前記コアに出力し、
前記複数のコアの各々は、前記リクエストを前記調停部に出力したときに前記第2キューの使用量を示す第2カウンタ値をインクリメントし、前記調停部から前記第2解放通知を受信したときに前記第2カウンタ値をデクリメントする第2資源カウンタを有する
請求項2に記載のプロセッサ。
【請求項4】
前記第2キャッシュは、
前記調停部から受信する前記リクエストに対応して受信する前記確定情報が無効を示すときに、前記確定情報の受信に基づいて前記調停部に第3解放通知を出力し、前記第1キューに保持している無効な前記リクエストを破棄し、
前記調停部から受信する前記リクエストに対応して受信する前記確定情報が有効を示すときに、前記リクエストの処理の完了に基づいて前記調停部に前記第3解放通知を出力し、前記リクエストの発行元の前記コアに前記第1解放通知を出力し、前記第1キューに保持している処理が完了した前記リクエストを破棄し、
前記調停部は、前記第2キューに保持した前記リクエストを前記第2キャッシュに出力したときに前記第1キューの使用量を示す第3カウンタ値をインクリメントし、前記第3解放通知を受信したときに前記第3カウンタ値をデクリメントする第3資源カウンタを有する
請求項3に記載のプロセッサ。
【請求項5】
前記調停部は、前記複数のコアからそれぞれ受信する前記リクエストの数を順次減少させる階層化された、前記第2キューをそれぞれ有する複数の調停回路を有し、
前記複数のコアにそれぞれ対応して設けられ、前記複数のコアから前記リクエストを受信する複数の前記調停回路の前記第2キューは、前記コアの前記第2資源カウンタにより管理され、
前記第2キャッシュに前記リクエストを出力する前記調停回路は、前記第3資源カウンタを有し、前記リクエストを前記第2キャッシュに出力したときに前記第3カウンタ値をインクリメントし、前記第3解放通知を受信したときに前記第3カウンタ値をデクリメントする
請求項4に記載のプロセッサ。
【請求項6】
前記第2キャッシュは、
無効を示す前記確定情報の受信数を各々保持する複数のエントリを有する第3キューを有し、
無効を示す前記確定情報を受信したときに前記複数のエントリの1つの前記受信数をインクリメントし、有効を示す前記確定情報を受信したときに前記受信数を保持する前記エントリを切り替えることで、連続して受信した無効を示す前記確定情報の数を前記第3キューに保持し、
前記リクエストを受信したときに、前記複数のエントリの各々に保持された前記受信数に基づいて、受信したリクエストが有効か無効かを判断する
請求項1ないし請求項5のいずれか1項に記載のプロセッサ。
【請求項7】
前記第3キューの前記複数のエントリの各々は、有効を示す前記確定情報を受信したときにセットされる受信フラグを有し、
前記第2キャッシュは、
有効を示す前記確定情報を受信したときに、前記受信数のカウント対象の前記エントリに対して入力側の前記エントリの前記受信フラグをセットし、セットした前記受信フラグを含む前記エントリを前記受信数を保持する前記エントリに設定し、
前記リクエストを受信したときに、前記複数のエントリの各々に保持された前記受信数と前記受信フラグとに基づいて、受信したリクエストが有効か無効かを判断する
請求項6に記載のプロセッサ。
【請求項8】
前記複数のコアの各々から前記第2キャッシュに前記確定情報を転送する配線の幅は、前記複数のコアの各々から前記調停部に前記リクエストを転送する配線の幅より小さい
請求項1に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサに関する。
【背景技術】
【0002】
CPU(Central Processing Unit)等のプロセッサは、メインメモリに記憶されたデータの一部を保持するキャッシュメモリを有する。キャッシュメモリは、プロセッサのコアから発行されたメモリアクセス要求の対象データを保持している場合(キャッシュヒット)、メインメモリにアクセス要求を発行することなく、キャッシュメモリに保持しているデータをコアに出力する。これにより、データのアクセス効率が向上し、プロセッサの処理性能が向上する(例えば、特許文献1参照)。
【0003】
複数のCPUに接続される上位バスと、メインメモリに接続される下位バスと、上位バスと下位バスとの間に配置され、キャッシュを有するバスブリッジとを有する階層バスシステムが知られている。この種の階層バスシステムでは、バスブリッジは、上位バスからのトランザクションを受信した場合、キャッシュのスヌープを完了する前に下位バスの調停を開始する(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2011-076159号公報
【特許文献2】特開平9-128325号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、キャッシュのスヌープによりキャッシュヒットが確定した場合、下位バスの調停は無駄になり、調停により下位バスが無駄に占有されてしまう。下位バスの無駄な占有を抑制するためには、スヌープによりキャッシュミスが確定するまでトランザクションの下位バスへの発行を待つ必要がある。キャッシュミスの確定後に下位のキャッシュにリクエストを発行する場合に、リクエストが下位のキャッシュに到達するまでのレイテンシを低減する手法は提案されていない。
【0006】
1つの側面では、本発明は、上位のキャッシュのキャッシュミスの確定後に下位のキャッシュにリクエストを発行する場合に、リクエストが下位のキャッシュに到達するまでのレイテンシを低減することを目的とする。
【課題を解決するための手段】
【0007】
一つの観点によれば、プロセッサは、第1キャッシュを各々含む複数のコアと、前記第1キャッシュがキャッシュミスしたときに前記コアから出力されるリクエストを処理する第2キャッシュと、前記複数のコアからそれぞれ出力される前記リクエストを調停して前記第2キャッシュに順次出力する調停部と、を有し、前記複数のコアの各々は、前記リクエストを前記調停部に出力した後、出力した前記リクエストが有効であるか否かを示す確定情報を、前記調停部を介することなく前記第2キャッシュに出力し、前記第2キャッシュは、受信した前記リクエストに対応する前記確定情報が有効を示す場合、受信した前記リクエストの処理を開始する。
【発明の効果】
【0008】
上位のキャッシュのキャッシュミスの確定後に下位のキャッシュにリクエストを発行する場合に、リクエストが下位のキャッシュに到達するまでのレイテンシを低減することができる。
【図面の簡単な説明】
【0009】
図1】実施形態で説明するプロセッサに関連する別のプロセッサにおけるコアおよびL2キャッシュの一例を示すブロック図である。
図2】さらなる別のプロセッサにおけるコア、調停部およびL2キャッシュの一例を示すブロック図である。
図3図2の回路構成において、コアからL2キャッシュへのリクエストの転送の一例を示すタイミング図である。
図4】一実施形態におけるプロセッサの一例を示すブロック図である。
図5図4のL1キャッシュの一例を示すブロック図である。
図6図4の調停部およびL2キャッシュの一例を示すブロック図である。
図7図6のコア、調停部、制御部およびポートの間で資源管理のために送受信される信号の例を示す説明図である。
図8図6のコアC00とポートMIP00の間で送受信される信号の概要を示す説明図である。
図9図6の回路構成において、コアからL2キャッシュへの事前リクエストとバリッド信号との転送の一例を示すタイミング図である。
図10図6の各ポートのバリッド信号の受信部に設けられるFIFOレジスタの構成および動作の一例を示す説明図である。
図11図10の動作の続きを示す説明図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して実施形態が説明される。以下では、信号が伝達される信号線には、信号名と同じ符号が使用される。
【0011】
まず、実施形態で説明するプロセッサに関連する別のプロセッサの例が、図1から図3で説明される。なお、図1から図3に示すプロセッサは、公知ではない。
【0012】
図1は、実施形態で説明するプロセッサに関連する別のプロセッサの一例を示す。図1に示すプロセッサ102は、複数のコアC00-C11と、各コアC00-C11に直接接続されたL2キャッシュ602とを有する。L2キャッシュ602は、コアC00-C11にそれぞれ対応するポートMIP00-MIP11と、調停部610とを有する。以下では、コアC00-C11が区別なく説明される場合、コアCと称される。
【0013】
各コアCは、キャッシュミスを判定した場合であって、リクエストをキャンセルするか否かのアボート判定によりリクエストが有効であることを判定した場合、バリッド信号VALおよびアドレス信号ADRS等をL2キャッシュ600のポートMIPに同時に出力する。すなわち、各コアCは、キャッシュミスを判定後、さらにアボート判定を実施後にバリッド信号VALおよびアドレス信号ADRS等を出力する。
【0014】
各コアCとL2キャッシュ602とが直接接続される場合、図2および図6に比べて、各コアCとL2キャッシュ602との間の配線の規模(すなわち、配線幅)が大きくなってしまう。なお、プロセッサ102は、複数のコアCとL2キャッシュ602との間に、図2の制御部504を有してもよい。この場合、L2キャッシュ602は、図2の選択部620を有してもよい。
【0015】
図2は、さらなる別のプロセッサの一例を示す。図1と同じ要素については、同じ符号を付し、詳細な説明は省略する。図2に示すプロセッサ104は、複数のコアC00-C11と、調停部400と、制御部504と、L2キャッシュ604とを有する。調停部400は、複数のコアCからそれぞれ受信するリクエスト(VAL、ADRS等)の数を順次減少させる階層化された4つの調停回路MIX0と、2つの調停回路MIX1と、1つの調停回路MIX2とを有する。プロセッサ104は、後述する図6の制御部500とL2キャッシュ600の代わりに制御部504およびL2キャッシュ604を有することを除き、図6で説明するプロセッサ100と同様の構成を有する。
【0016】
各コアCは、図1の各コアCと同様に、キャッシュミスを判定し、さらに、アボート判定によりリクエストが有効であることを判定した場合、バリッド信号VALおよびアドレス信号ADRS等を調停部400および制御部504を介してポートMIPに出力する。制御部504は、図4で説明するバリッド信号FIN_VAL(CANCEL)を受ける機能を持たないことを除き、図6の制御部500と同様の機能を有する。L2キャッシュ604は、ポートMIPが図10および図11で説明するFIFOレジスタFREGを持たないことを除き、図6のL2キャッシュ600と同様の機能を有する。
【0017】
図3は、図2の回路構成において、コアCからL2キャッシュ604へのリクエストの転送の一例を示す。コアCからL2キャッシュ604に転送されるリクエストは、バリッド信号VALおよびアドレス信号ADRS等を含む。上述したように、コアCは、キャッシュミスを判定した場合であって、アボート判定によりリクエストが有効であることを判定した場合、バリッド信号VALおよびアドレス信号ADRS等を調停回路MIX0に出力する。すなわち、コアCは、キャッシュミスを判定後、アボート判定を待ってからバリッド信号VALおよびアドレス信号ADRS等を出力する。
【0018】
例えば、コアCから調停回路MIX0までと、2つの調停回路MIX間と、調停回路MIX2からL2キャッシュ600までの各々のリクエストの転送は、2サイクル掛かる。また、各調停回路MIX0-MIX2でのリクエストの調停は、1サイクル掛かる。したがって、例えば、コアCがリクエストを出力してから調整回路MIX0がリクエストを出力するまでに3サイクル掛かる。
【0019】
コアCは、サイクルCYC0でリクエストを発行し、サイクルCYC1でキャッシュヒット/ミスを判定する。コアCは、サイクルCYC2でリクエストのアボートを判定し、アボート要因がない場合、サイクルCYC3でバリッド信号VALおよびアドレス信号ADRS等を調停部400に出力する(図3(a))。
【0020】
この後、バリッド信号VALおよびアドレス信号ADRS等は、3サイクル経過毎に調停回路MIX0-MIX2からそれぞれ出力され、サイクルCYC14でL2キャッシュ600に入力される(図3(b)-(e))。そして、L2キャッシュ604は、サイクルCYC15からリクエストの処理を開始する(図3(f))。
【0021】
図3に示すように、リクエストのアボート判定後にバリッド信号VALおよびアドレス信号ADRS等を調停部400に出力する場合、L2キャッシュ604がリクエストの処理を開始するタイミングが、後述する図9に比べて2サイクル遅くなる。すなわち、プロセッサ104は、階層化された調停部400により、コアCからL2キャッシュ604までのバスを共通化することで配線幅および配線面積等の配線規模を削減できるが、3つの調停回路MIXによりリクエストを順次調停するため、リクエストの転送レイテンシが増えてしまう。ここで、リクエストの転送レイテンシは、配線長に応じた遅延だけでなく3つの調停回路MIXによるリクエストの調停サイクルを含む。
【0022】
図4は、一実施形態におけるプロセッサの一例を示す。図4に示すプロセッサ100は、複数のコア200、調停部400、制御部500およびL2キャッシュ600を有する。特に限定されないが、以下では、プロセッサ100が12個のコア200を有する例が説明される。L2キャッシュ600は、第2キャッシュの一例である。
【0023】
各コア200は、命令バッファ210、命令デコーダ220、演算ユニット230、ロードストアユニット240およびL1キャッシュ(制御部)300を有する。以下では、L1キャッシュ300の制御部の動作は、L1キャッシュ300の動作として説明される。なお、L1キャッシュ300とL1キャッシュ300の制御部とは、それぞれ別のブロックに含まれてもよい。L1キャッシュ(制御部)300は、第1キャッシュの一例である。
【0024】
演算ユニット230は、複数の演算器232およびレジスタファイル234を有する。レジスタファイル234は、図示しない複数のレジスタを有する。命令バッファ210は、ロードストアユニット240の制御に基づいてL1キャッシュ300から出力される命令を保持し、保持した命令を命令デコーダ220に出力する。命令デコーダ220は、命令バッファ210から出力される命令をデコードし、デコードした命令に対応する演算器232に命令を出力する。
【0025】
なお、命令デコーダ220と演算器232との間には、リザベーションステーション等のスケジューラが配置されてもよい。演算器232は、レジスタファイル234内のレジスタに保持されたデータを使用して演算を実行し、演算結果をレジスタファイル234内のレジスタに格納する。
【0026】
ロードストアユニット240は、図示しないプログラムカウンタ、命令フェッチアドレス生成器およびオペランドアドレス生成器を有する。ロードストアユニット240は、演算に使用する命令をL1キャッシュ300から命令バッファに転送する制御を行う。ロードストアユニット240は、演算に使用するデータをL1キャッシュ300からレジスタファイル234に転送する制御を行い、演算結果をL1キャッシュ300に転送する制御を行う。
【0027】
L1キャッシュ300は、命令キャッシュおよびデータキャッシュとして機能する。L1キャッシュ300は、ロードストアユニット240から受信するメモリアクセス要求であるリクエストに含まれるアドレスに対応するデータ(命令を含む)を保持している場合(キャッシュヒット)、保持しているデータをレジスタファイル234に向けて出力する。例えば、プロセッサ100は、いわゆるMESIプロトコルを採用しているが、他のプロトコルを採用してもよい。MESIプロトコルでは、データの状態は、データの転送の単位であるキャッシュライン毎に、モディファイ状態M、エクスクルーシブ状態E、シェア状態Sおよびインバリッド状態Iのいずれかに分類される。
【0028】
L1キャッシュ300は、ロードストアユニット240から受信するアドレスに対応するデータを保持していない場合(キャッシュミス)、L2キャッシュ600に向けてリクエストを出力する。この際、L1キャッシュ300は、キャッシュミスが確定した後、リクエストの発行が確定する前に、事前バリッド信号PRE_VALとアドレス信号ADRS等とを含む事前リクエスト信号PRE_REQを調停部400に出力する。
【0029】
その後、L1キャッシュ300は、リクエストの発行が確定したか否かを示す真のバリッド信号FIN_VALを制御部500に出力する。なお、真のバリッド信号FIN_VALは、リクエストの発行が確定したか否かを示すキャンセルビットCANCELを含む。事前リクエスト信号PRE_REQは、リクエストの一例であり、バリッド信号FIN_VALは、確定情報の一例である。事前リクエスト信号PRE_REQおよびバリッド信号FIN_VALを出力するL1キャッシュ300の例は、図5に示される。
【0030】
例えば、事前リクエスト信号PRE_REQは、64ビットのアドレス信号ADRSと、コア200の識別子と、図6に示すポートMIPの識別子等を含んでおり、9バイトまたは10バイト程度のサイズである。これに対して、バリッド信号FIN_VALは、バリッドビット、キャンセルビットCANCELおよび各種制御情報を含んでおり、1バイト程度のサイズである。
【0031】
すなわち、各コア200からL2キャッシュ600にバリッド信号FIN_VALを転送する配線の幅は、各コア200からL2キャッシュ600に事前リクエスト信号PRE_REQ転送する配線の幅より小さい。このため、調停部400を経由する事前リクエスト信号PRE_REQとは別にバリッド信号FIN_VALを制御部500まで転送する場合にも、配線面積の増加量を最小限にしてバリッド信号FIN_VALの信号線を制御部500まで配線することができる。以下では、バリッド信号FIN_VALは、バリッドビットとキャンセルビットCANCELとを含む信号の意味だけでなく、バリッドビットの意味に使用される場合がある。
【0032】
調停部400は、複数のコア200からの事前リクエスト信号PRE_REQを調停し、調停により選択した事前リクエスト信号PRE_REQを制御部500を介してL2キャッシュ600に出力する。事前リクエスト信号PRE_REQを受信する調停部400の例は、図6に示される。L2キャッシュ600は、制御部500によりアクセスが制御され、例えば、LLC(Last Level Cache)として動作する。なお、プロセッサ100がL2キャッシュ600の下位にL3キャッシュを有し、L3キャッシュがLLCとして動作する場合、以下で説明する動作は、L2キャッシュ600とL3キャッシュとの間で実施されてもよい。
【0033】
制御部500は、調停部400から受信する事前リクエスト信号PRE_REQを、L2キャッシュ600においてリクエストの発行元のコア200のそれぞれに対応して設けられるポートMIP(Move In Port:図6)に出力する。制御部500は、各コア200から受信するバリッド信号FIN_VALを、リクエストの発行元のコア200に対応するポートMIPに出力する。そして、制御部500は、L1キャッシュ300とL2キャッシュ600との間でのデータ信号DTの転送を制御する。また、制御部500は、例えば、プロセッサ100に搭載されるオンチップネットワークを介して図示しないメモリコントローラ、チップ間インターコネクトおよび通信制御部等と相互に接続される。メモリコントローラは、プロセッサ100に接続されるメインメモリのアクセスを制御する。
【0034】
図5は、図4のL1キャッシュ300の一例を示す。L1キャッシュ300は、複数のポート310、パイプライン投入部320、パイプライン制御部330、タグアレイ340およびデータアレイ360を有する。
【0035】
複数のポート310は、例えば、ロードストアユニット240からのリクエストの種類毎に設けられる。各ポート310は、FIFO(First-In First-Out)形式の複数のエントリを有する。各ポート310は、ロードストアユニット240から受信したリクエストを、受信した順にパイプライン投入部320に出力する。
【0036】
パイプライン投入部320は、ポート310から受信するリクエストをパイプライン制御部330に順次投入する。パイプライン制御部330は、サイクルCYC毎に動作する複数のステージを含むパイプライン332を有する。図5では、説明の簡単化のため、3つのサイクルCYCn、CYCn+1、CYCn+2のみが示される。
【0037】
パイプライン332は、サイクルCYCnで動作するキャッシュヒット/ミス判定部334と、サイクルCYCn+1で動作するアボート判定部336とを有する。キャッシュヒット/ミス判定部334は、サイクルCYCnにおいて、タグアレイ340を検索することで、パイプライン投入部320から投入されるリクエストがキャッシュヒットかキャッシュミスかを判定する。
【0038】
パイプライン制御部330は、キャッシュヒット/ミス判定部334がキャッシュヒットを判定した場合、データアレイ360から読み出したデータを応答データとしてロードストアユニット240に出力する。例えば、キャッシュヒット/ミス判定部334は、アクセスアドレスと同じアドレスが割り当てられたキャッシュラインがタグアレイ340に存在する場合にキャッシュヒットを判定する。
【0039】
一方、パイプライン制御部330は、キャッシュヒット/ミス判定部334がキャッシュミスを判定した場合、サイクルCYCnにおいて、事前リクエスト信号PRE_REQ(バリッドPRE_VALおよびアドレス信号ADRS等)を調停部400に出力する。但し、パイプライン制御部330は、事前リクエスト信号PRE_REQを受け付ける調停部400の資源に空きがない場合、事前リクエスト信号PRE_REQの調停部400への出力を抑止する。例えば、キャッシュミスは、アクセスアドレスと同じアドレスが割り当てられたキャッシュラインが存在しない場合に判定される。調停部400およびL2キャッシュ600の資源管理については、図8で説明される。
【0040】
キャッシュヒット/ミス判定部334によりキャッシュミスが判定され、事前リクエスト信号PRE_REQが出力された場合、アボート判定部336は、サイクルCYCn+1において、リクエストをキャンセルするか否かのアボート判定を行う。アボート判定の結果は、バリッド信号FIN_VALに含まれるキャンセルビットCANCELにより示される。
【0041】
例えば、アボート判定部336は、リクエストを受け付けるL2キャッシュ600の資源に空きがない場合、または、アドレスのインターロックによる中断要因がある場合、バリッド信号FIN_VAL(バリッドビット=1、CANCEL=1)を出力する。例えば、アドレスのインターロックによる中断要因は、他のコア200からのリクエストの処理を実行している場合等である。一方、アボート判定部336は、リクエストを受け付けるL2キャッシュ600の資源に空きがあり、かつ、アドレスのインターロックによる中断要因がない場合、バリッド信号FIN_VAL(バリッドビット=1、CANCEL=0)を出力する。
【0042】
図4のL2キャッシュ600は、制御部500を介してバリッド信号FIN_VAL(バリッドビット=1、CANCEL=1)を受信した場合、対応する事前リクエスト信号PRE_REQの処理をキャンセルする。そして、L2キャッシュ600は、保持している事前リクエスト信号PRE_REQを破棄する。L2キャッシュ600は、制御部500を介してバリッド信号FIN_VAL(バリッドビット=1、CANCEL=0)を受信した場合、対応する事前リクエスト信号PRE_REQの処理を実行する。
【0043】
パイプライン制御部330は、アボート判定部336によるリクエストのアボート判定前に事前リクエスト信号PRE_REQを調停部400に出力する。これにより、事前リクエスト信号PRE_REQを、バリッド信号FIN_VALを出力するサイクルCYCn+2より2サイクル前に投機的に出力することができる。
【0044】
したがって、複数のコア200と制御部500との間に調停部400が設けられる場合にも、調停部400の調停動作による事前リクエスト信号PRE_REQの転送レイテンシの増加分の一部をキャンセルすることができる。また、調停部400を設けることにより、複数のコア200から制御部500に事前リクエスト信号PRE_REQを転送する信号線の本数を減らすことができ、配線領域の増加を抑制することができる。
【0045】
バリッド信号FIN_VALは、事前リクエスト信号PRE_REQに対して2サイクル遅れて出力される。しかしながら、図4に示したように、バリッド信号FIN_VALは、調停部400を経由することなく制御部500に転送されるため、調停部400による調停時間の影響を受けない。このため、バリッド信号FIN_VALの転送レイテンシを、事前リクエスト信号PRE_REQの転送レイテンシに比べて小さくすることができる。
【0046】
これにより、事前リクエスト信号PRE_REQより後に出力されるバリッド信号FIN_VALを、事前リクエスト信号PRE_REQより前に制御部500に到着させることが可能になる。この結果、処理可能なリクエストがL2キャッシュ600に到達するまでのレイテンシを短縮することができる。レイテンシの短縮については、図9で説明される。
【0047】
図6は、図4の調停部400およびL2キャッシュ600の一例を示す。図6において、符号C00-C11の各々は、コア200を示す。以下では、コアC00-C11が区別なく説明される場合、コアCと称される。
【0048】
調停部400は、複数のコアCからそれぞれ受信する事前リクエスト信号PRE_REQの数を順次減少させる階層化された4つの調停回路MIX0と、2つの調停回路MIX1と、1つの調停回路MIX2とを有する。以下では、調停回路MIX0、MIX1、MIX2が区別なく説明される場合、調停回路MIXと称される。各調停回路MIX0に示す符号[8]は、コアC毎に事前リクエスト信号PRE_REQを保持可能なキューに含まれるエントリの数を示す。
【0049】
各調停回路MIX0は、3つのコアC(例えば、C00、C01、C02)から受信する事前リクエスト信号PRE_REQをコアC毎に最大で8つ保持し、保持している事前リクエスト信号PRE_REQを順次調停する。各調停回路MIX0は、調停により選択した事前リクエスト信号PRE_REQを、対応する調停回路MIX1に出力する。
【0050】
各調停回路MIX1に示す符号[8]は、調停回路MIX0毎に事前リクエスト信号PRE_REQを保持可能なキューに含まれるエントリの数を示す。各調停回路MIX1は、2つの調停回路MIX0から受信する事前リクエスト信号PRE_REQを調停回路MIX0毎に最大で8つ保持し、保持している事前リクエスト信号PRE_REQを順次調停する。各調停回路MIX1は、調停により選択した事前リクエスト信号PRE_REQを、調停回路MIX2に出力する。
【0051】
調停回路MIX2に示す符号[8]は、調停回路MIX1毎に事前リクエスト信号PRE_REQを保持可能なキューに含まれるエントリの数を示す。調停回路MIX2は、2つの調停回路MIX1から受信する事前リクエスト信号PRE_REQを調停回路MIX1毎に最大8つ保持し、保持している事前リクエスト信号PRE_REQを順次調停する。調停回路MIX2は、調停により選択した事前リクエスト信号PRE_REQを、制御部500に出力する。
【0052】
調停回路MIX0-MIX2の各々は、ポートMIPでキャンセルされる事前リクエスト信号PRE_REQを含めて、最大で8つの事前リクエスト信号PRE_REQを8つのエントリに残留させることが可能である。
【0053】
各コアCは、キャンセルビットCANCELを含むバリッド信号FIN_VALを、調停部400を介することなく制御部500に転送する。例えば、各コアCから制御部500を介してL2キャッシュ600までバリッド信号FIN_VALの転送に4サイクル掛かる。
【0054】
制御部500は、調停部400から受信する事前リクエスト信号PRE_REQを、事前リクエスト信号PRE_REQに含まれるポートMIPの識別子に基づいて、12個のポートMIPのうち、コアCに対応するポートMIPに出力する。制御部500は、各コアCから受信したバリッド信号FIN_VAL(CANCEL)をバリッド信号FIN_VAL(CANCEL)に含まれるポートMIPの識別子に基づいて、コアCに対応するポートMIPに出力する。
【0055】
なお、制御部500は、ポートMIPのいずれにもリクエストが存在しない場合、バイパス経路BYPSを介してL2キャッシュ600の選択部620にリクエストをバイパスする。この場合、制御部500は、バイパス経路BYPSを選択させる選択信号SELを選択部620に出力する。
【0056】
L2キャッシュ600は、コアC00-C11にそれぞれ対応するポートMIP00-MIP11と、調停部610と、選択部620とを有する。以下では、ポートMIP00-MIP11が区別なく説明される場合、ポートMIPと称される。各ポートMIPに示す符号[4]は、ポートMIP毎にリクエストを保持可能なキューに含まれるエントリの数を示す。各ポートMIPは、制御部500を介して対応するコアCから受信するリクエストを最大4つ保持し、保持しているリクエストを調停部610に順次出力する。各ポートMIPは、キャンセルされる事前リクエスト信号PRE_REQを含めて、最大で4つの事前リクエスト信号PRE_REQを4つのエントリに残留させることが可能である。
【0057】
調停部610は、各ポートMIPから受信するリクエストをLRU(Least Recently Used)方式で調停し、調停により選択したリクエストを選択部620に出力する。選択部620は、バイパス経路BYPSを選択させる選択信号SELを制御部500から受信していない場合、調停部610から出力されるリクエストを選択する。選択部620は、バイパス経路BYPSを選択させる選択信号SELを制御部500から受信している場合、バイパス経路BYPSから供給されるリクエストを選択する。
【0058】
図7は、図6のコアC、調停部400、制御部500およびポートMIPの間で資源管理のために送受信される信号の例を示す。各コアCは、各コアCに対応して調停回路MIX0に設けられる8つのエントリの使用数を示すカウンタUSED_CNTと、各コアCに対応するポートMIPに設けられる4つのエントリの使用数を示すカウンタRSC_CNTとを有する。各コアCは、カウンタUSED_CNTにより、自コアCに接続される調停回路MIX0の資源を管理し、カウンタRSC_CNTにより、対応するポートMIPの資源を管理する。
【0059】
コアCに設けられるカウンタUSED_CNTは、調停部400のキューM0の使用量を示す第1資源カウンタの一例である。コアCに設けられるカウンタUSED_CNTによりカウントされるカウンタ値は、第1カウンタ値の一例である。カウンタRSC_CNTは、L2キャッシュ600のポートMIPのキューMQの使用量を示す第2資源カウンタの一例であり、カウンタRSC_CNTによりカウントされるカウンタ値は、第2カウンタ値の一例である。
【0060】
各コアCは、事前リクエスト信号PRE_REQを調停回路MIX0に出力する毎にカウンタUSED_CNTのカウンタ値をインクリメントする。但し、各コアCは、カウンタUSED_CNTが最大値"8"を示す場合、事前リクエスト信号PRE_REQの出力を抑止する。各コアCは、調停回路MIX0から自コアCに対する解放信号FREEを受信する毎にカウンタUSED_CNTのカウンタ値をデクリメントする。調停回路MIX0から各コアCに出力される解放信号FREEは、第2解放通知の一例である。
【0061】
また、各コアCは、有効または無効なバリッド信号FIN_VAL(CANCEL=0たはCANCEL=1)を、各コアCに対応するポートMIXに出力する。但し、各コアCは、カウンタRSC_CNTが最大値"4"を示す場合、バリッド信号FIN_VALのポートMIPへの出力を抑止する。
【0062】
各コアCは、有効なバリッド信号FIN_VAL(CANCEL=0)を各コアCに対応するポートMIXに出力する毎にカウンタRSC_CNTのカウンタ値をインクリメントする。各コアCは、各コアCに対応するポートMIPから解放信号MIP_FREEを受信する毎にカウンタRSC_CNTのカウンタ値をデクリメントする。なお、開放信号MIP_FREEは、制御部500を介して各ポートMIPから各コアCに転送されてもよい。解放信号MIP_FREEは、第1解放通知の一例である。
【0063】
なお、カウンタ値のインクリメントは、+方向だけでなく-方向でもよい。カウンタ値のインクリメントが+方向の場合、カウンタ値のデクリメントは、-方向になる。カウンタ値のインクリメントが-方向の場合、カウンタ値のデクリメントは、+方向になる。また、各コアCは、カウンタUSED_CNT、RSC_CNTの代わりに、カウンタ値を保持するレジスタ等を有してもよい。
【0064】
後述するように、ポートMIPは、有効なバリッド信号FIN_VAL(CANCEL=0)を受信した場合、バリッド信号FIN_VAL(CANCEL=0)に対応するリクエストの処理の完了後に解放信号MIP_FREEをコアCに出力する。したがって、コアCは、有効なバリッド信号FIN_VAL(CANCEL=0)に対してのみL2キャッシュ600のポートMIPの資源を管理する。無効なバリッド信号FIN_VAL(CANCEL=1)の出力時にカウンタRSC_CNTをインクリメントしないため、ポートMIPを管理するカウンタRSC_CNTの資源の消費量を抑制して、十分なスループット性能が得ることができる。
【0065】
例えば、コアCは、バリッド信号FIN_VAL(CANCEL=0)だけでなく、バリッド信号FIN_VAL(CANCEL=1)を使用してポートMIPの資源を管理することが可能である。しかしながら、バリッド信号FIN_VAL(CANCEL=1)が頻繁に発生した場合、ポートMIPの管理するカウンタRSC_CNTのカウンタ値の上限が大きくなり資源の消費量が増え、十分なスループット性能が得られなくなる可能性がある。十分なスループット性能が得るためには、ポートMIPのエントリ数を増加するなどの対策が必要である。このため、コアCは、バリッド信号FIN_VAL(CANCEL=0)に対してのみL2キャッシュ600のポートMIPの資源を管理することが好ましい。
【0066】
各調停回路MIX0-MIX2は、各コアCから投機的に発行された事前リクエスト信号PRE_REQを受信し、L2キャッシュ600に転送するため、リクエストが有効か無効かを判断できない。このため、各調停回路MIX0-MIX2は、その後キャンセルされる事前リクエスト信号PRE_REQを含めて、全ての事前リクエスト信号PRE_REQを一旦保持する。
【0067】
各調停回路MIX0は、各コアCに対応して設けられる8つのエントリを有するキューQ0と、各調停回路MIX0に対応して調停回路MIX1に設けられる8つのエントリの使用数を示すカウンタUSED_CNTを有する。各調停回路MIX0は、事前リクエスト信号PRE_REQを調停回路MIX1に出力する毎にカウンタUSED_CNTのカウンタ値をインクリメントする。但し、各調停回路MIX0は、カウンタUSED_CNTが最大値"8"を示す場合、事前リクエスト信号PRE_REQの出力を抑止する。各調停回路MIX0は、調停回路MIX1から自調停回路MIX0に対する解放信号FREEを受信する毎にカウンタUSED_CNTのカウンタ値をデクリメントする。
【0068】
各調停回路MIX1は、各調停回路MIX0に対応して設けられる8つのエントリを有するキューQ1と、各調停回路MIX1に対応して調停回路MIX2に設けられる8つのエントリの使用数を示すカウンタUSED_CNTを有する。各調停回路MIX1は、事前リクエスト信号PRE_REQを調停回路MIX2に出力する毎にカウンタUSED_CNTのカウンタ値をインクリメントする。但し、各調停回路MIX1は、カウンタUSED_CNTが最大値"8"を示す場合、事前リクエスト信号PRE_REQの出力を抑止する。各調停回路MIX1は、調停回路MIX2から自調停回路MIX1に対する解放信号FREEを受信する毎にカウンタUSED_CNTのカウンタ値をデクリメントする。
【0069】
調停回路MIX2は、各調停回路MIX1に対応して設けられる8つのエントリを有するキューQ2と、各ポートMIPに設けられる4つのエントリの使用数を示すカウンタUSED_CNTをポートMIP毎に有する。調停回路MIX2は、事前リクエスト信号PRE_REQをポートMIPに出力する毎に、ポートMIPに対応するカウンタUSED_CNTのカウンタ値をインクリメントする。但し、調停回路MIX2は、カウンタUSED_CNTが最大値"4"を示す場合、事前リクエスト信号PRE_REQの出力を抑止する。調停回路MIX2は、各ポートMIPから解放信号FREEを受信する毎にポートMIPに対応するカウンタUSED_CNTのカウンタ値をデクリメントする。
【0070】
調停回路MIX0に設けられるキューQ0、調停回路MIX1に設けられるキューQ1およびMIX2の各々に設けられるキューQ2は、第2キューの一例である。調停回路MIX0-MIX2の各々に設けられるカウンタUSED_CNTは、第3資源カウンタの一例であり、カウンタUSED_CNTによりカウントされるカウンタ値は、第3カウンタ値の一例である。
【0071】
ポートMIPは、対応するコアCからのリクエスト信号PRE_REQを保持する4つのエントリを有するキューMQを有する。キューMQは、第1キューの一例である。ポートMIPは、事前リクエスト信号PRE_REQと、事前リクエスト信号PRE_REQに対応するバリッド信号FIN_VAL(CANCEL=1)を受信した場合、リクエストをキャンセルしてポートMIPから開放する。そして、ポートMIPは、開放信号FREEを調停回路MIX2に出力する。このとき、ポートMIPは、対応するコアCに開放信号MIP_FREEを出力しない。バリッド信号FIN_VAL(CANCEL=1)は、事前リクエスト信号PRE_REQが無効であることを示す。ポートMIPから調停回路MIX2に出力される解放信号FREEは、第3解放通知の一例である。
【0072】
各ポートMIPは、事前リクエスト信号PRE_REQと、事前リクエスト信号PRE_REQに対応するバリッド信号FIN_VAL(CANCEL=0)を受信した場合、リクエストをポートMIPに保持する。そして、各ポートMIPは、リクエストの処理の完了後、調停回路MIX2に開放信号FREEを出力し、対応するコアCに開放信号MIP_FREEを出力する。バリッド信号FIN_VAL(CANCEL=0)は、事前リクエスト信号PRE_REQが有効であることを示す。開放信号MIP_FREEを受信したコアCは、カウンタRSC_CNTのカウンタ値をデクリメントする。
【0073】
図8は、図6のコアC00とポートMIP00の間で送受信される信号の概要を示す。各信号の流れは、図7と同様である。すなわち、事前リクエスト信号PRE_REQは、調停部400の調停回路MIX0、MIX1、MIX2を介してポートMIP00に転送され、バリッド信号FIN_VALは、調停部400を介することなくポートMIP00に転送される。
【0074】
図9は、図6の回路構成において、コアCからL2キャッシュ600への事前リクエスト信号PRE_REQとバリッド信号FIN_VALとの転送の一例を示す。例えば、コアCから調停回路MIX0までと、2つの調停回路MIX間と、調停回路MIX2からL2キャッシュ600までの各々の事前リクエスト信号PRE_REQの転送は、2サイクル掛かる。
【0075】
また、各調停回路MIX0-MIX2での事前リクエスト信号PRE_REQの調停は、1サイクル掛かる。したがって、例えば、コアCが事前リクエスト信号PRE_REQを出力してから調整回路MIX0が事前リクエスト信号PRE_REQを出力するまでに3サイクル掛かる。例えば、制御部500は、組み合わせ回路であり、調停機能を持たないため、調停回路MIX2からL2キャッシュ600への事前リクエスト信号PRE_REQ等の転送時間は、例えば、2サイクルで可能である。なお、調停回路MIX2からL2キャッシュ600への事前リクエスト信号PRE_REQ等の転送時間は、制御部500の回路規模に依存し、例えば、回路規模が小さい場合には1サイクルで可能になる。
【0076】
図5のパイプライン制御部330は、サイクルCYC0でパイプライン投入部320からリクエストを受信し、サイクルCYC1でキャッシュヒット/ミスを判定する。パイプライン制御部330は、キャッシュミスを判定した場合、サイクルCYC1で事前リクエスト信号PRE_VALおよびアドレス信号ADRS等を調停部400に出力する(図9(a))。
【0077】
この後、事前リクエスト信号PRE_VALおよびアドレス信号ADRS等は、3サイクル経過毎に調停回路MIX0-MIX2からそれぞれ出力され、サイクルCYC12でL2キャッシュ600に入力される(図9(b)-(e))。
【0078】
一方、パイプライン制御部330は、サイクルCYC2でリクエストのアボートを判定し、アボート要因がない場合、サイクルCYC3でバリッド信号FIN_VAL(CANCEL=0)をL2キャッシュ600に向けて出力する(図9(f))。バリッド信号FIN_VAL(CANCEL=0)は、コアCの出力から4サイクル経過後にL2キャッシュ600に入力され、ポートMIPに格納される(図9(g))。
【0079】
L2キャッシュ600は、バリッド信号FIN_VAL(CANCEL=0)を受信してから5サイクル後に受信した事前リクエスト信号PRE_VALおよびアドレス信号ADRS等をポートMIPに格納する。L2キャッシュ600は、バリッド信号FIN_VALが有効であるため、サイクルCYC13からリクエストの処理を開始する(図9(h))。
【0080】
この実施形態では、L1キャッシュ300は、真のバリッド信号FIN_VALの2サイクル前に事前リクエスト信号PRE_VALおよびアドレス信号ADRS等を出力する。このため、図5のアボート判定部336によるアボート判定後に、真のバリッド信号FIN_VALとともにアドレス信号ADRS等を出力する場合に比べて、L2キャッシュ600でのリクエストの処理を2サイクル早く開始することができる。
【0081】
図10および図11は、図6の各ポートMIPのバリッド信号FIN_VALの受信部に設けられるFIFOレジスタFREGの構成および動作の一例を示す説明図である。図10は、バリッド信号FIN_VALがポートMIPに到着するときのFIFOレジスタFREGの動作の例を示す。図11は、事前リクエスト信号PRE_REQがポートMIPに到着するときのFIFOレジスタFREGの動作の例を示す。以下では、FIFOレジスタFREGは、単にレジスタFREGとも称される。FIFOレジスタFREGは、第3キューの一例である。
【0082】
L2キャッシュ600のポートMIPは、1つのリクエストに対して、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとを互いに異なるタイミングで受信する。このため、ポートMIPにおいて、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとの対応付けが必要となる。L2キャッシュ600に到着するバリッド信号FIN_VALと事前リクエスト信号PRE_REQとのタイミングの差は、調停部400による調停により待たされる時間によって変化する。このため、バリッド信号FIN_VALが先に到着する場合と、事前リクエスト信号PRE_REQが先に到着する場合とがあり得る。
【0083】
対応付けの一例として、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとの両方に共通のシリアルIDを付与し、シリアルIDによりバリッド信号FIN_VALと事前リクエスト信号PRE_REQとを対応付ける方法がある。この場合、シリアルIDは、調停部400に同時に保持される全ての事前リクエスト信号PRE_REQを識別可能なのビット数に設定される。なお、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとが、同じ順序および同じタイミング差で到着することが保証される場合、シリアルIDによる管理は不要である。
【0084】
この実施形態では、コアCは、有効なバリッド信号FIN_VAL(CANCEL=0)に対してのみL2キャッシュ600のポートMIPの資源を管理する。この場合、1つのコアCから出力された事前リクエスト信号PRE_REQが、L2キャッシュ600までの経路上の28個のエントリに保持される可能性がある。ここで、28個のエントリは、各調停回路MIX0-MIX2の8個のエントリとポートMIPの4個のエントリとの合計である。この場合、対応付け用のFIFOレジスタに28個のエントリを用意することでポートMIPの資源を管理できるが、FIFOレジスタの回路規模が増大する。
【0085】
そこで、この実施形態では、対応付け用のFIFOレジスタの各エントリに無効なバリッド信号FIN_VAL(CANCEL=1)の連続数をカウントするカウンタが設けられる。そして、L2キャッシュ600は、複数の無効なバリッド信号FIN_VAL(CANCEL=1)をまとめて管理する。これにより、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとの到着タイミングが可変でも、FIFOレジスタの回路規模の増加を抑制して、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとの対応付けを行うことができる。
【0086】
FIFOレジスタFREGは、5つのエントリを有する。出力側のエントリから4番目までのエントリは、4つのフラグFIN0-FIN3と、4つのカウンタCAN_CNT0-CAN_CNT3とを有する。5番目である入力側のエントリは、フラグFIN4のみを有する。以下では、フラグFIN0-FIN4が区別なく説明される場合、フラグFINと称される。カウンタCAN_CNT0-CAN_CNT3が区別なく説明される場合、カウンタCAN_CNTと称される。フラグFIN0-FIN3は、有効を示すバリッド信号FIN_VAL(CANCEL=0)を受信したときにセットされる受信フラグの一例である。
【0087】
各フラグFINは、有効なバリッド信号FIN_VAL(CANCEL=0)を受信したか否かを表す。有効なバリッド信号FIN_VAL(CANCEL=0)を受信したとき、複数のエントリのフラグFINの1つの値valが"1"にセットされる。ポートMIPのエントリは4つのため、1つのコアCは、バリッド信号FIN_VALを最大で4つまでL2キャッシュ600に出力可能である。このため、レジスタFREGには、5つのエントリが設定される。
【0088】
各エントリのカウンタCAN_CNT0-CAN_CNT3は、2つのバリッド信号FIN_VAL(CANCEL=0)の間で連続する無効なバリッド信号FIN_VAL(CANCEL=1)の数を示す。各カウンタCAN_CNTは、調停部400とポートMIPとで保持可能な最大数である28個のリクエストが各コアCから発行される場合に、キャンセルされるリクエストを表現可能なビット幅(例えば、5ビット)を有すればよい。各エントリのカウンタCAN_CNT0-CAN_CNT3が保持する値は、連続して受信した無効を示すバリッド信号FIN_VAL(CANCEL=1)の受信数を示す。
【0089】
レジスタFREGは、キャンセルされるリクエストに対応するバリッド信号FIN_VAL(CANCEL=1)が連続する場合に、1つのカウンタCAN_CNTを使用してまとめてカウントする。これにより、レジスタFREGの回路規模の増大を抑制することができ、さらに、回路規模の増大の抑制によりサイクルディレイの増加を抑制することができる。
【0090】
図10の初期状態において、レジスタFREGの全てのフラグFIN0-FIN4および全てのカウンタCAN_CNT0-CAN_CNT3は、"0"に初期化されている。初期状態において、ポートMIPは、無効なバリッド信号FIN_VAL(CANCEL=1)を受信した場合、状態0において、フラグFINの値val=0のエントリのうち、最も番号の小さいフラグFIN0のエントリを有効にする。そして、ポートMIPは、有効なエントリのカウンタCAN_CNT0のカウンタ値をインクリメントして"1"に設定する(図10(a))。
【0091】
次に、ポートMIPは、無効なバリッド信号FIN_VAL(CANCEL=1)を受信した場合、状態1において、有効なエントリのカウンタCAN_CNT0のカウンタ値をインクリメントして"2"に設定する(図10(b))。
【0092】
次に、ポートMIPは、有効なバリッド信号FIN_VAL(CANCEL=0)を受信した場合、状態2において、2番目のフラグFIN1を値val=1に設定し、カウンタCAN_CNT1を有効にする(図10(c))。値val=1は、コアCから出力されたリクエストが有効であることを示す。リクエストカウンタCAN_CNT0は、無効になり、カウント動作が停止される。このように、ポートMIPは、有効なバリッド信号FIN_VAL(CANCEL=0)を受信した場合、無効なバリッド信号FIN_VAL(CANCEL=1)の受信数を保持するエントリを切り替える。
【0093】
これにより、1番目のエントリのカウンタCAN_CNT0=2を参照することで、リクエストが連続して2回キャンセルされたことが分かる。なお、ポートMIPは、値val=1のフラグFINが複数ある場合、値val=1のフラグFINのうち、最も入力側(図10の下側)のエントリのカウンタCAN_CNTをカウント対象とする。
【0094】
次に、ポートMIPは、無効なバリッド信号FIN_VAL(CANCEL=1)を受信した場合、状態3において、カウント対象のカウンタCAN_CNT1のカウンタ値をインクリメントして"1"に設定する(図10(d))。
【0095】
次に、ポートMIPは、有効なバリッド信号FIN_VAL(CANCEL=0)を受信した場合、状態4において、カウント対象である値val=1のフラグFIN1の1つ入力側のフラグFIN2を値val=1に設定する。そして、ポートMIPは、カウンタCAN_CNT2をカウント対象とする(図10(e))。これにより、ポートMIPは、2番目のエントリのカウンタCAN_CNT1=1を参照することで、リクエストが1回キャンセルされたことが分かる。
【0096】
図示は省略するが、この後、ポートMIPは、無効なバリッド信号FIN_VAL(CANCEL=1)を受信した場合、カウンタCAN_CNT2のカウンタ値をインクリメントする。一方、ポートMIPは、有効なバリッド信号FIN_VAL(CANCEL=0)を受信した場合、フラグFIN3の値valを"1"に設定し、カウンタCAN_CNT3をカウント対象とする。
【0097】
状態4において、レジスタFREGの先頭のエントリのカウンタCAN_CNT0は、"2"を保持している。このため、ポートMIPは、未処理のリクエストの先頭の2つは、キャンセルされるリクエストであることが分かる。
【0098】
状態4において、ポートMIPは、事前リクエスト信号PRE_REQを受信した場合、先頭のエントリのフラグFIN0の値valが"0"で、カウンタCAN_CNT0が"1"以上のため、事前リクエスト信号PRE_REQが無効であると判断する。この場合、図11の状態5において、ポートMIPは、カウンタCAN_CNT0のカウンタ値をデクリメントして"1"に設定する(図11(a))。ポートMIPは、対応するリクエストを破棄し、調停回路MIX2に開放信号FREEを出力する。このとき、ポートMIPは、リクエストの発行元のコアCに開放信号MIP_FREEを出力しない。
【0099】
次に、ポートMIPは、事前リクエスト信号PRE_REQを受けた場合、状態4と同様に、先頭のエントリのフラグFIN0の値valが"0"で、カウンタCAN_CNT0が"1"以上のため、事前リクエスト信号PRE_REQが無効であると判断する。このため、状態6において、ポートMIPは、先頭のエントリのカウンタCAN_CNT0のカウンタ値をデクリメントして"0"に設定する(図11(b))。ポートMIPは、対応するリクエストを破棄し、調停回路MIX2に開放信号FREEを出力する。このとき、ポートMIPは、リクエストの発行元のコアCに開放信号MIP_FREEを出力しない。
【0100】
ポートMIPは、先頭のエントリのフラグFIN0とカウンタCAN_CNT0とがともに"0"になった場合、連続または単独の無効のリクエストの処理が終わったと判断する。そして、ポートMIPは、各エントリが保持する情報を1つ上のエントリに移動するシフト動作を実施する(図11(c))。この際、ポートMIPは、先頭のエントリの情報を破棄し、末尾のエントリのフラグFIN4の値valを"0"に設定し、レジスタFREGの状態は状態7になる(図11(d))。
【0101】
状態7において、ポートMIPは、事前リクエスト信号PRE_REQを受けた場合、先頭のエントリのフラグFIN0の値valが"1"のため、事前リクエスト信号PRE_REQが有効であると判断する。このため、状態8において、ポートMIPは、先頭のエントリのフラグFIN0を"0"にリセットする(図11(e))。ポートMIPは、対応するリクエストをL2キャッシュ600のパイプラインに発行し、リクエストの処理を開始する。また、ポートMIPは、リクエストの処理の完了後、調停回路MIX2に開放信号FREEを出力し、対応するコアCに開放信号MIP_FREEを出力する。
【0102】
状態8の先頭のエントリの状態は、状態5と同じであるため、ポートMIPは、事前リクエスト信号PRE_REQを受けた場合、事前リクエスト信号PRE_REQが無効であると判断する。このため、状態9において、ポートMIPは、カウンタCAN_CNT0のカウンタ値をデクリメントして"0"に設定する(図11(f))。ポートMIPは、対応するリクエストを破棄し、調停回路MIX2に開放信号FREEを出力する。このとき、ポートMIPは、リクエストの発行元のコアCに開放信号MIP_FREEを出力しない。
【0103】
先頭のエントリのフラグFIN0とカウンタCAN_CNT0とがともに"0"になったため、状態6と同様に、ポートMIPは、連続または単独の無効のリクエストの処理が終わったと判断する。そして、ポートMIPは、各エントリが保持する情報を1つ上のエントリに移動するシフト動作を実施する(図11(g))。ポートMIPは、先頭のエントリの情報を破棄し、末尾のエントリのフラグFIN4の値valを"0"に設定し、レジスタFREGの状態は状態10になる(図11(h))。
【0104】
図10および図11に示すように、FIFOレジスタFREGを使用することで、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとの対応付けを正しく行うことができ、リクエストの処理を正しく行うことができる。この際、無効のバリッド信号FIN_VAL(CANCEL=1)が連続する場合に、1つのカウンタCAN_CNTを使用してまとめてカウントすることができるため、回路規模の増大とサイクルディレイの増加とを抑制することができる。
【0105】
以上、この実施形態では、コアCは、L1キャッシュ300でのキャッシュミスが発生した場合、リクエストの有効または無効が確定する前に仮のリクエストである事前リクエスト信号PRE_REQを調停部400に出力する。そして、コアCは、リクエストの有効または無効が確定した場合、リクエストの有効または無効を示すバリッド信号FIN_VALをL2キャッシュ600に出力する。
【0106】
バリッド信号FIN_VALは、調停部400を介することなくL2キャッシュ600に転送されるため、事前リクエスト信号PRE_REQに比べて高速にL2キャッシュ600まで転送可能である。したがって、L1キャッシュ300のキャッシュミスの確定後にL2キャッシュ600にリクエストを発行する場合に、リクエストがL2キャッシュ600に到達するまでのレイテンシを低減することができる。
【0107】
この結果、リクエストの有効が確定したときに、事前リクエスト信号PRE_REQの出力を早めた分だけリクエストの処理を早く開始することができ、プロセッサ100の処理性能を向上することができる。この結果、階層構造の複数のキャッシュを搭載するプロセッサ100またはプロセッサ100が搭載されるシステムの処理性能を向上することができる。
【0108】
各コアCは、有効なバリッド信号FIN_VAL(CANCEL=0)の出力時のみカウンタRSC_CNTをインクリメントし、無効なFIN_VAL(CANCEL=1)の出力時にカウンタRSC_CNTをインクリメントしない。このため、ポートMIPのキューの資源管理に使用するカウンタ等の回路規模を削減することができる。マルチコアタイプのプロセッサ100では、回路規模の削減効果は大きい。
【0109】
各コアCは、有効または無効な事前リクエスト信号PRE_REQの出力毎にインクリメントされ、L2キャッシュ600からの開放信号FREEが伝達されることでデクリメントされるカウンタUSED_CNTを有する。L2キャッシュ600からの開放信号FREEは、リクエストの有効/無効にかかわらず出力される。このため、各コアCは、1つのリクエストに対して2つのバリッド信号FIN_VAL、VALを生成する場合にも、調停回路MIX0のキューQ0の資源を管理することができる。これにより、キューQ0がオーバーフローすることを抑止することができる。
【0110】
各コアCは、有効なバリッド信号FIN_VALの出力時にカウンタRSC_CNTをインクリメントし、ポートMIPからの開放信号MIP_FREEに基づいてカウンタRSC_CNTをデクリメントすることで、ポートMIPの資源を管理する。各コアCは、無効なバリッド信号FIN_VAL(CANCEL=1)の出力時にカウンタRSC_CNTをインクリメントしないため、ポートMIPを管理するカウンタRSC_CNTの資源の消費量を抑制して、十分なスループット性能が得ることができる。
【0111】
複数のコアCから受ける事前リクエスト信号PRE_REQを調停する調停部400は、階層化された調停回路MIX0-MIX2を有する。このため、調停部400を階層化しない場合に比べて、事前リクエスト信号PRE_REQをL2キャッシュ600まで転送する信号線の配線面積を削減することができる。また、各コアCが出力するバリッド信号FIN_VALは、1バイト程度のサイズである。これにより、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとを別の経路でL2キャッシュ600に転送する場合にも、各コアCとL2キャッシュ600との間の配線面積が増大することを抑制することができる。
【0112】
レジスタFREGを使用することで、バリッド信号FIN_VALと事前リクエスト信号PRE_REQとの対応付けを正しく行うことができ、リクエストの処理を正しく行うことができる。この際、無効のバリッド信号FIN_VAL(CANCEL=1)が連続する場合に、1つのカウンタCAN_CNTでまとめてカウントすることで、レジスタFREGの回路規模の増大を抑制することができ、さらに、回路規模の増大の抑制によりサイクルディレイの増加を抑制することができる。
【0113】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0114】
100、102、104 プロセッサ
200 コア
210 命令バッファ
220 命令デコーダ
230 演算ユニット
232 演算器
234 レジスタファイル
240 ロードストアユニット
300 L1キャッシュ
310 ポート
320 パイプライン投入部
330 パイプライン制御部
332 パイプライン
334 キャッシュヒット/ミス判定部
336 アボート判定部
340 タグアレイ
360 データアレイ
400 調停部
500、504 制御部
600、602、604 L2キャッシュ
610 調停部
620 選択部
ADRS アドレス信号
BYPS バイパス経路
C コア
CAN_CNT カウンタ
DT データ信号
FIN フラグ
FIN_VAL バリッド信号
FREE 解放信号
MIP ポート
MIP_FREE 開放信号
MIX0、MIX1、MIX2 調停回路
PRE_REQ 事前リクエスト信号
PRE_VAL 事前バリッド信号
RSC_CNT カウンタ
SEL 選択信号
USED_CNT カウンタ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11