(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-06
(45)【発行日】2023-07-14
(54)【発明の名称】データキャッシュ領域プリフェッチャ
(51)【国際特許分類】
G06F 12/0862 20160101AFI20230707BHJP
【FI】
G06F12/0862 105
(21)【出願番号】P 2019510348
(86)(22)【出願日】2017-08-08
(86)【国際出願番号】 US2017045842
(87)【国際公開番号】W WO2018034882
(87)【国際公開日】2018-02-22
【審査請求日】2020-08-07
(32)【優先日】2016-08-19
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2016-10-13
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2016-11-25
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ドナルド ダブリュ. マッコーリー
(72)【発明者】
【氏名】ウィリアム イー. ジョーンズ
【審査官】酒井 恭信
(56)【参考文献】
【文献】米国特許出願公開第2016/0019065(US,A1)
【文献】米国特許出願公開第2005/0071571(US,A1)
【文献】特開2002-032264(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08 - 12/0897
(57)【特許請求の範囲】
【請求項1】
データキャッシュ領域プリフェッチャであって、
エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別することと、
シーケンシャルアクセスパターンを有するラインエントリを、ラインエントリデータテーブルからエビクトされたラインエントリを受信するように構成された領域履歴テーブルへのエビクトから除外することと、
所定の非シーケンシャルアクセスパターンを有するラインエントリの前記領域履歴テーブルへのエビクトを許可することと、
実行されている命令によってミスが発生したことに応じて、所定の非シーケンシャルアクセスパターンと一致するプリフェッチ要求を実行することであって、前記命令は、前記所定の非シーケンシャルアクセスパターンを前記領域履歴テーブルにエビクトさせた、命令によって発生した少なくとも1つのミスに続いて実行される、ことと、
を行うように構成されており、
前記ラインエントリデータテーブルは、複数のラインエントリを含
み、各ラインエントリは、所定数のアクセスビットによって定義された領域を含み、
各ラインエントリは、前記領域内でキャッシュラインが要求された場合に設定される
アクセスビットを含み、
前記
領域履歴テーブルは、前記ラインエントリデータテーブルか
らエビクト
されたラインエントリを受信するように構成され
、少なくとも命令ポインタレジスタ(RIP)を用いてインデックス付けされており、
前記アクセスパターンは、プログラムによるキャッシュへのアクセスパターンを含む、
データキャッシュ領域プリフェッチャ。
【請求項2】
前記データキャッシュ領域プリフェッチャは、
非シーケンシャルアクセスパターンを有する前記ラインエントリを前記領域履歴テーブルにエビクトするように構成されている、
請求項1のデータキャッシュ領域プリフェッチャ。
【請求項3】
前記領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、
前記RIPに対して複数の
非シーケンシャルアクセスパターンをサポートするために、オフセットを使用してインデックスされ
、前記オフセットのフィールドサイズは、前記キャッシュラインに対する前記領域のアライメントを提供するために、前記キャッシュラインのサイズに対応している、
請求項
1のデータキャッシュ領域プリフェッチャ。
【請求項4】
前記領域履歴テーブルは、複数の領域履歴エントリを含み、
各領域履歴エントリは、前記所定数のアクセスビットを含み、
各領域履歴エントリは、前記所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、
前記カウンタは、エビクト可能なラインエントリに対してアクセスビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる、
請求項1のデータキャッシュ領域プリフェッチャ。
【請求項5】
前記領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、前記領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータをさらに備える、
請求項
4のデータキャッシュ領域プリフェッチャ。
【請求項6】
前記データキャッシュ領域プリフェッチャは、他のプリフェッチャが、前記データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックするように構成されている、
請求項1のデータキャッシュ領域プリフェッチャ。
【請求項7】
各ラインエントリは、
2つ以上の連続したシーケンシャルメモリアクセスが行われ、2番目のアクセスが前記命令に関連する所定数のアクセスビットのうち1アクセスビット内に存在する場合に設定される第2アクセスビットであって、前記領域履歴テーブルへのエビクトから除外され
、他のデータプリフェッチャにエビクトされる所定のアクセスパターンを判別するために使用される第2アクセスビットをさらに含む、
請求項1のデータキャッシュ領域プリフェッチャ。
【請求項8】
ストリームプリフェッチャと、
データキャッシュ領域プリフェッチャと、を備える処理システムであって、
前記データキャッシュ領域プリフェッチャは、
エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別することと、
シーケンシャルアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外することであって、前記領域履歴テーブルは、ラインエントリデータテーブルからエビクトされたラインエントリを受信し、少なくとも命令ポインタレジスタ(RIP)を用いてインデックス付けされており、前記ラインエントリデータテーブルは、複数のラインエントリを含み、各ラインエントリは、領域を定義する所定数のアクセスビットを含み、アクセスビットは、前記領域内でキャッシュラインが要求された場合に設定される、ことと、
所定の非シーケンシャルアクセスパターンを有するラインエントリの前記領域履歴テーブルへのエビクトを許可することと、
実行されている命令によってミスが発生したことに応じて、所定の非シーケンシャルアクセスパターンと一致するプリフェッチ要求を実行することであって、前記命令は、前記所定の非シーケンシャルアクセスパターンを前記領域履歴テーブルにエビクトさせた、命令によって発生した少なくとも1つのミスに続いて実行される、ことと、
前記ストリームプリフェッチャが、前記データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックする
ことと、
を行うように構成されており、
前記アクセスパターンは、プログラムによるキャッシュへのアクセスパターンを含む、
処理システム。
【請求項9】
前記データキャッシュ領域プリフェッチャは、
非シーケンシャルアクセスパターンを有するラインエントリを前記領域履歴テーブルにエビクトするように構成されている、
請求項
8の処理システム。
【請求項10】
前記領域履歴テーブルは、
特定の領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、
前記RIPに対して複数の
非シーケンシャルアクセスパターンをサポートするために、オフセットを使用してインデックスされる、
請求項
8の処理システム。
【請求項11】
前記領域履歴テーブルは、複数の領域履歴エントリを含み、
各領域履歴エントリは、前記所定数のアクセスビットを含み、
各領域履歴エントリは、前記所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、
前記カウンタは、各々のアクセスビットにビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる、
請求項
8の処理システム。
【請求項12】
前記データキャッシュ領域プリフェッチャは、前記領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、前記領域履歴テーブルからプリフェッチ要求を受信するように構成され
ている、
請求項
11の処理システム。
【請求項13】
各ラインエントリは、
2つ以上の連続したシーケンシャルメモリアクセスが行われ、2番目のアクセスが前記命令に関連する所定数のアクセスビットのうち1アクセスビット内に存在する場合に設定される第2アクセスビットであって、前記領域履歴テーブルへのエビクトから除外され
、他のデータプリフェッチャにエビクトされる所定のアクセスパターンを判別するために使用される第2アクセスビットをさらに含む、
請求項
8の処理システム。
【請求項14】
データキャッシュ領域プリフェッチを行う方法であって、
データキャッシュ領域プリフェッチャが、命令に応じてキャッシュライン要求を受信することであって、
ラインエントリテーブルは複数のラインエントリを含み、各ラインエントリは、所定数のアクセスビットによって定義された領域を含む、ことと、
前記キャッシュライン要求が前記領域内に存在する場合、所定のラインエントリに対してアクセスビットを設定することと、
エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別することと、
シーケンシャルアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外すること
であって、前記領域履歴テーブルは、ラインエントリデータテーブルからエビクトされたラインエントリを受信し、少なくとも命令ポインタレジスタを用いてインデックス付けされるように構成されている、ことと、
所定の非シーケンシャルアクセスパターンを有するラインエントリを領域履歴テーブルにエビクトすることと、
実行されている命令によってミスが発生したことに応じて、所定の非シーケンシャルアクセスパターンと一致するプリフェッチ要求を実行することであって、前記命令は、前記所定の非シーケンシャルアクセスパターンを前記領域履歴テーブルにエビクトさせた、命令によって発生した少なくとも1つのミスに続いて実行される、ことと、を含み、
前記アクセスパターンは、プログラムによるキャッシュへのアクセスパターンを含む、
方法。
【請求項15】
少なくとも命令ポインタレジスタ(RIP)を使用して前記領域履歴テーブルをインデックスすることをさらに含む、
請求項
14の方法。
【請求項16】
領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、
前記RIPに対して複数の
非シーケンシャルアクセスパターンをサポートするために、
前記RIPとオフセットとを使用して前記領域履歴テーブルをインデックスすること
であって、前記オフセットのフィールドサイズは、前記キャッシュラインに対する前記領域のアライメントを提供するために、前記キャッシュラインのサイズに対応している、ことをさらに含む、
請求項
15の方法。
【請求項17】
前記領域履歴テーブルは、複数の領域履歴エントリを含み、各領域履歴エントリは、前記所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、
前記方法は、
各々のアクセスビットが設定されているかどうかに応じて、前記カウンタをインクリメント又はデクリメントすることをさらに含む、
請求項
14の方法。
【請求項18】
前記領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値以上になったという条件で、プリフェッチ要求を
前記データキャッシュ領域プリフェッチャに送信することをさらに含む、
請求項
17の方法。
【請求項19】
他のプリフェッチャが、前記データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックすることをさらに含む、
請求項
14の方法。
【請求項20】
各ラインエントリは、第2アクセスビットを含み、
前記方法は、
2つ以上の連続したシーケンシャルメモリアクセスが行われ、2番目のアクセスが前記命令に関連する所定数のアクセスビットのうち1アクセスビット内に存在する場合に、前記第2アクセスビットを設定することと、
前記領域履歴テーブルへのエビクトから除外され
、他のデータプリフェッチャにエビクトされる所定のアクセスパターンを判別するために、設定された前記第2アクセスビットを使用することと、をさらに含む、
請求項
14の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(関連出願の相互参照)
本願は、2016年8月19日に出願された米国仮特許出願第62/377,314号、2016年10月13日に出願された米国特許出願第15/292,777号及び2016年11月25日に出願された欧州特許出願第EP16200806.4号の利益を主張し、これらの内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【0002】
数多くの処理デバイスは、メモリに記憶されている情報にアクセスするのに必要な平均時間を短縮するために、キャッシュを利用する。キャッシュは、比較的頻繁に使用されることが予想される命令又はデータのコピーを記憶する小型で高速なメモリである。例えば、キャッシュを使用するプロセッサの一種である中央処理装置(CPU)は、一般に、キャッシュ又はキャッシュメモリ要素の階層に関連付けられている。グラフィック処理装置等の他のプロセッサもキャッシュシステムを実装している。CPUによって使用されると予想される命令又はデータは、(比較的大きくて遅い)メインメモリからキャッシュに移動される。CPUがメインメモリ内の位置を読み書きする必要がある場合、CPUは、先ず、所望のメモリ位置のコピーがキャッシュメモリに含まれているか否かを確かめるためにチェックする。この位置がキャッシュに含まれている場合(キャッシュヒット)、CPUは、キャッシュメモリ位置におけるコピーに対して読み出し又は書き込み動作を実行することができる。この位置がキャッシュに含まれていない場合(キャッシュミス)、CPUは、メインメモリに記憶されている情報にアクセスする必要があり、場合によっては、当該情報をメインメモリからコピーして、キャッシュに追加することができる。キャッシュを適切に設定及び操作すると、メモリアクセスの平均レイテンシを、メインメモリのレイテンシよりも下回り、キャッシュアクセスのレイテンシに近い値まで短くすることができる。
【0003】
キャッシュのラインの情報が要求される前に、プリフェッチャを使用して、当該ラインに情報が入力される。プリフェッチャは、プロセッサで実行されているアプリケーションに関連するメモリ要求を監視し、監視した要求を使用して、メモリ領域内の特定のメモリアドレスのシーケンス(一般にストリームと呼ばれる)にプロセッサがアクセスする可能性があると判別又は予測する。プリフェッチャは、複数のストリームを追跡し続け、異なるストリームのデータを個別にプリフェッチする。
【0004】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【0005】
【
図1】特定の実施形態による、データキャッシュ領域プリフェッチャを使用するシステムのハイレベルブロック図である。
【
図2】特定の実施形態による、データキャッシュ領域プリフェッチャのハイレベルブロック図である。
【
図3】特定の実施形態による、データキャッシュ領域プリフェッチャ用のラインエントリテーブル構造内のラインエントリのブロック図及びフロー図である。
【
図4】特定の実施形態による、データキャッシュ領域プリフェッチャ内の領域履歴テーブル構造のフロー図である。
【
図5A1】特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図である。
【
図5A2】特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図である。
【
図5B】特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図である。
【
図6】1つ以上の開示された実施形態を実装することができる例示的なデバイスのブロック図である。
【発明を実施するための形態】
【0006】
本明細書では、データキャッシュ領域プリフェッチャについて説明する。データキャッシュ領域プリフェッチャは、(例えば、ロード命令又はストア命令に応じて)プログラムによって生成されたキャッシュアクセスパターンを認識し、データに対する将来の要求の可能性を予想して当該データをメインメモリからデータキャッシュにコピーするプリフェッチ要求を発行する。特に、データキャッシュ領域プリフェッチャは、所定の命令がデータラインにアクセスした後に、最初にアクセスされたデータラインの所定の範囲内に存在する他のデータラインがその後にアクセスされるパターンを検出しようと試みる。最初にアクセスされたデータラインを含むデータラインの所定の範囲が領域と呼ばれ、各領域は、命令ポインタレジスタ(RIP)でタグ付けされる。各領域に関連するパターンは、同じRIPによる後続のアクセスのデータラインをプリフェッチするために使用される。
【0007】
図1は、特定の実施形態による、データキャッシュ領域プリフェッチャ160を使用する処理システム100のハイレベルブロック図である。処理システム100は、メインメモリ110に記憶されている命令又はデータにアクセスするように構成されたプロセッサ105を含む。プロセッサ105は、命令を実行し又はデータを操作するために使用される少なくとも1つのコア115と、階層(又は、マルチレベル)型のキャッシュシステム117と、を含み、キャッシュシステム117は、選択された命令又はデータをキャッシュシステム117に記憶することによって、命令又はデータへのアクセスを高速化する。説明する処理システム100は例示であり、本開示の範囲から逸脱することなく他のアーキテクチャ及び構成を実装することができる。
【0008】
キャッシュシステム117は、メインメモリ110に記憶されている命令又はデータのコピーを記憶するレベル2(L2)キャッシュ120を含む。一実施形態では、L2キャッシュ120は、メインメモリ110に対して16ウェイアソシアティブであるため、メインメモリ110内の各ラインは、L2キャッシュ120内の16の特定のライン(通常、「ウェイ」と呼ばれる)との間でコピーすることができる。L2キャッシュ120は、メインメモリ110と比較して小型で高速なメモリ要素を使用して実装される。L2キャッシュ120は、(メインメモリ110と比較して)論理的又は物理的にコア115の近くに配置されるため、コア115とL2キャッシュ120との間では、より迅速又はより短いレイテンシで情報を交換することができる。
【0009】
また、キャッシュシステム117は、メインメモリ110又はL2キャッシュ120に記憶されている命令又はデータのコピーを記憶するL1キャッシュ125を含む。L1キャッシュ125は、L2キャッシュ120と比較して小型で高速なメモリ要素を使用して実装されているので、L1キャッシュ125のラインに記憶されている情報を、プロセッサ105によって迅速に取得することができる。また、L1キャッシュ125は、(メインメモリ110及びL2キャッシュ120と比較して)論理的又は物理的にコア115の近くに配置されるため、コア115とL1キャッシュ125との間では、(メインメモリ110とL2キャッシュ120との間の通信と比較して)より迅速又はより短いレイテンシで情報を交換することができる。一実施形態では、L0キャッシュ、L1キャッシュ、L2キャッシュ及びL3キャッシュ等の要素を含む異なるマルチレベルのキャッシュが使用される。いくつかの実施形態では、上位レベルのキャッシュは、1つ以上の下位レベルのキャッシュを含み、これにより、下位レベルのキャッシュ内のラインは、包含的な上位レベルのキャッシュにも記憶されている。
【0010】
L1キャッシュ125は、L1-Iキャッシュ130及びL1-Dキャッシュ135と呼ばれる、命令及びデータを記憶するレベル1(L1)キャッシュに分けられている。L1キャッシュ125を、命令のみを記憶するL1-Iキャッシュ130と、データのみを記憶するL1-Dキャッシュ135と、に分離又は分割することによって、これらのキャッシュの各々を、命令又はデータを要求する可能性があるエンティティの近くに配置することができる。結果として、この構成は、競合、ワイヤ遅延を低減し、命令及びデータに関連する全体的なレイテンシを短縮する。一実施態様では、置換ポリシーは、L1-Iキャッシュ130内のラインをL2キャッシュ120からの命令に置き換え、L1-Dキャッシュ135内のラインをL2キャッシュ120からのデータに置き換えることを指示する。
【0011】
また、プロセッサ105は、データを、キャッシュ125,130,135のうち1つ以上のキャッシュのデータラインに配置するために使用される、ストリームプリフェッチャ150とデータキャッシュ領域プリフェッチャ160とを含む。ストリームプリフェッチャ150及びデータキャッシュ領域プリフェッチャ160は、プロセッサ105内の別々の要素として示されているが、ストリームプリフェッチャ150及びデータキャッシュ領域プリフェッチャ160は、他の要素の一部として実装することができる。一実施形態では、ストリームプリフェッチャ150及びデータキャッシュ領域プリフェッチャ160は、ハードウェアプリフェッチャである。一実施形態では、ストリームプリフェッチャ150及びデータキャッシュ領域プリフェッチャ160は、コア115で実行されているアプリケーションに関連するメモリ要求を監視する。例えば、ストリームプリフェッチャ150及びデータキャッシュ領域プリフェッチャ160は、キャッシュヒット又はキャッシュミスを生じさせるメモリ要求(例えば、データラインアクセス)を監視し、キャッシュヒット又はキャッシュミスは、ミスアドレスバッファ(MAB)145に記録される。ストリームプリフェッチャ150及びデータキャッシュ領域プリフェッチャ160の両方は、コア115が、メインメモリ110内の特定のメモリアドレスのシーケンス(名目上、ストリームと呼ばれる)にアクセスする可能性があると判別又は予測するが、各プリフェッチャは、各アクセスを異なる方法で処理する。
【0012】
ストリームプリフェッチャ150は、コア115による2回以上の連続的且つシーケンシャルなメモリアクセスを検出する。シーケンスの方向は、シーケンシャルなメモリアクセスの時系列に基づいて決定され、コア115は、この方向を使用して、現在又は以前のシーケンシャルなメモリアクセスに基づいて推定すること(extrapolating)によって、将来のメモリアクセスを予測する。次に、ストリームプリフェッチャ150は、予測された位置の情報をメインメモリ110からフェッチし、この情報を適切なキャッシュに記憶して、コア115によって要求される前に当該情報を利用可能な状態にする。
【0013】
概して、データキャッシュ領域プリフェッチャ160は、データキャッシュミスが発生した場合に領域を生成する。各領域は、各データキャッシュミスに近接する所定範囲のデータラインを含み、関連するRIPでタグ付けされている。次に、データキャッシュ領域プリフェッチャ160は、後続のメモリ要求を、既存の領域毎に所定範囲のデータラインと比較する。一致する毎に、データキャッシュ領域プリフェッチャ160は、アクセスビットを設定し、設定したアクセスビットに基づいて、擬似ランダムアクセスパターンを識別しようと試みる。次いで、データキャッシュ領域プリフェッチャ160は、擬似ランダムアクセスパターンが発生する頻度を追跡するために、適切なカウンタをインクリメント又はデクリメントする。(例えば、予め設定された閾値に基づいて)擬似ランダムアクセスパターンが頻繁に発生する場合、データキャッシュ領域プリフェッチャ160は、同じRIPを有するメモリ要求が処理される場合に、当該RIPの擬似ランダムアクセスパターンに従ってデータラインをプリフェッチする。
【0014】
一実施形態では、ストリームプリフェッチャ150とデータキャッシュ領域プリフェッチャ160との間には、フィードバックが存在する。このフィードバックは、ストリームプリフェッチャ150を抑制するために使用される。例えば、フラグを有効にすることによって、データキャッシュ領域プリフェッチャ160は、本明細書で後述するように、ストリームプリフェッチャ150が、保留中のデータキャッシュ領域プリフェッチ要求を有する新たに生成されたストリームに対して作用するのをブロックすることができる。
【0015】
図2は、特定の実施形態による、データキャッシュ領域プリフェッチャ200のハイレベルブロック図である。データキャッシュ領域プリフェッチャ200は、領域履歴テーブル210(トレーニング構造によって占められるバッキング構造である)に接続されたラインエントリテーブル205(トレーニング構造である)を含む。本明細書で説明するテーブルエントリの数及びフィールドのサイズは、例示的なものに過ぎず、本開示の範囲から逸脱することなく他の値を使用することができる。
【0016】
ラインエントリテーブル205は、所定数のラインエントリ215を含む。一実施形態では、ラインエントリテーブル205は、32個のエントリを含む。各ラインエントリ215は、RIPフィールド220と、データラインのアドレスフィールド222と、アクセスビットフィールド224と、第2ラインアクセスビットフィールド226と、を含む。一実施形態では、RIPフィールド220は、20ビットのフィールドであり、アドレスフィールド222は、44ビットのフィールドであり、アクセスビットフィールド224は、11ビットのフィールドであり、第2ラインアクセスビットフィールド226は、3ビットのフィールドである。一実施形態では、ラインエントリテーブル205は、連想メモリ(CAM)を使用して実装される。
【0017】
領域履歴テーブル210は、RIP[19:0]及びAddr[5:4](後者は、オフセットとも呼ばれる)の9ビットのハッシュを使用して一実施形態においてインデックスされた所定数の領域履歴エントリ230を含む。一実施形態では、領域履歴テーブル210は、512個のエントリを含む。各領域履歴テーブルエントリ230は、アクセスビット/カウンタフィールド238を有し、アクセスビット/カウンタフィールド238内の各ビット(ビット0を除く)は、2ビットのカウンタを有する。一実施形態では、アクセスビット/カウンタフィールド238は、それぞれ2ビットのカウンタを有する11個のエントリで構成された22ビットの2次元配列又はデータ構造である。一実施形態では、2ビットのカウンタは、アップ/ダウンカウンタである。
【0018】
プロセッサからのメモリ要求又はデータラインアクセスは、データキャッシュミス時にラインエントリテーブル205に挿入され、領域が生成される。各領域のRIPフィールド220及びアドレスフィールド222には、ミスが発生したメモリ要求の各々に関連するRIP及びアドレスが配置される。各領域は、データキャッシュミスが発生したメモリ要求に近接する所定範囲のデータラインによって定義される。アクセスビットフィールド224は、所定範囲のデータライン内のデータライン毎のビットを含む。アクセスビットフィールド224内の所定の位置又はビットは、ホームポジション又はホームビットとして指定される。ホームビットは、データキャッシュミスが発生し、特定の領域を生成したメモリ要求に対応する。例示的な実施形態では、所定範囲は10データラインであり、当該範囲は、ホームビットから+6データライン及び-4データラインに及び、ホームビットは、ビット0又はポジション0である。後続のメモリ要求が所定範囲のデータラインに存在するかどうかを判別するために、後続のメモリ要求が(例えば、CAMを使用して)比較される。対応するビットは、所定範囲内の後続のメモリ要求毎に、領域内のアクセスビットフィールド224に設定される。
【0019】
アクセスビットをアクセスビットフィールド224に設定することによって、データラインを潜在的にプリフェッチするために領域履歴テーブル210によって使用される疑似ランダムパターンを確立する。特に、ラインエントリテーブル205内のメモリ要求が、期限切れになり、アクセスビットフィールド224内のいくつかのビットの設定によって確立された有効なパターンを有する場合、当該メモリ要求は、領域履歴テーブル210にエビクトされ、上述したフィールドが占められる。第2ラインアクセスビットフィールド226は、擬似ランダムパターンが2つ以上の連続的且つシーケンシャルなメモリアクセス(すなわち、無効なパターン)を示すかどうかを判別するために使用され、この場合、領域は、領域履歴テーブル210に移動されず、
図1に示すストリームプリフェッチャ150によって処理される。
【0020】
領域履歴テーブル210は、所定のRIP及びオフセットを有するメモリ要求の後に、確立されたパターンに従って周囲のデータラインへの要求が続いた回数を追跡する。追跡情報は、アクセスビット/カウンタフィールド238内の2ビットのカウンタを使用して保持される。一実施形態では、領域履歴テーブルエントリ230を更新する場合、アクセスビット/カウンタフィールド238内の個々の2ビットのアップ/ダウンカウンタがインクリメント(ラインエントリ内の対応するアクセスビットが1の場合)又はデクリメント(ラインエントリ内の対応するアクセスビットが0の場合)される。デクリメントする場合、これらの2ビットのアップ/ダウンカウンタは、0が最小である。インクリメントする場合、これらの2ビットのアップ/ダウンカウンタは、3が最大である。後続のデータキャッシュミスが新たなラインエントリを生成する場合、関連するRIP及びオフセットを使用して領域履歴テーブル210内の1つのエントリが選択され、次に、アクセスビット/カウンタフィールド238内の2ビットのカウンタが、閾値(例えば、2)と比較することによってプリフェッチが適切であるかどうかを判別するために使用される。プリフェッチが保証された場合、適切な情報又は関連する情報が領域プリフェッチ生成ユニット250に送信されて、プリフェッチ要求が生成され、次に、プリフェッチ要求が、プリフェッチ要求先入れ先出し(FIFO)バッファ(図示省略)に送信される。
【0021】
図3は、特定の実施形態による、データキャッシュ領域プリフェッチャ用のラインエントリテーブル構造内のラインエントリ300のブロック図及びフロー図である。各ラインエントリ300は、RIPフィールド305と、データキャッシュミスのアドレスフィールド310と、アクセスビットフィールド315と、第2(2
nd)ラインアクセスビットフィールド320と、を含む。一実施形態では、RIPフィールド305は、20ビットのフィールドであり、アドレスフィールド310は、44ビットのフィールドであり、アクセスビットフィールド315は、11ビットのフィールドであり、第2ラインアクセスビットフィールド320は、3ビットのフィールドである。一実施形態では、アクセスビットフィールド315は、+6データラインから-4データラインまでのデータキャッシュ領域プリフェッチャの範囲を表しており、ビット0は、データキャッシュミス(上述したように「ホーム」と指定される)に関連するデータライン又はアドレスである。
【0022】
第2ラインアクセスビットフィールド320は、ホームに対する2つ以上の連続的且つシーケンシャルなメモリアクセスが存在するかどうかを判別するために使用される。すなわち、第2ラインアクセスビットフィールド320は、シーケンシャル(ストライド=+1又は-1のキャッシュライン)ストリームと、他の非シーケンシャルアクセスパターンと、を区別するために使用される。シーケンシャルストリームは、そのアクセスが次のシーケンシャル(+/-1)キャッシュラインに対するものである場合、ストリーム/領域に対する2番目のアクセスでトレーニングを行う。ストリームプリフェッチャは、領域履歴テーブルから除外されたシーケンシャルストリームを処理する。特に、第2ラインアクセスビット+1及び-1が設定されている場合、対応するストリーム又は関連領域は、領域履歴テーブルに移動されない。領域への2番目のアクセスが次のシーケンシャル(+/-1)キャッシュラインに対するものではない場合、第2ラインアクセスビット0が設定される。第2ラインアクセスビット0は、領域に対する2番目のアクセスが次のシーケンシャル(+/-1)キャッシュラインに対するものではなかったことを示している。非シーケンシャルなアクセスパターンを有するラインエントリは、領域履歴テーブルに含まれる候補である。
【0023】
動作上、データキャッシュ(Dc)ミスステータスが、ラインエントリテーブルへの入力として使用される(ステップ350)。本明細書で説明するように、既存の領域を更新しないデータキャッシュミスの各々は、新たなラインエントリ300に入力される新たな領域を生成し、適切なフィールドが、本明細書で説明するように入力される(ステップ352)。古いラインエントリ300は、最長未使用時間(least-recently-used)置換アルゴリズムに従ってエビクトされる。古いラインエントリ300内のアクセスビットフィールド315及び第2ラインアクセスビットフィールド320に有効なパターンが存在する場合、古いラインエントリ300を使用して領域履歴テーブルが更新される(ステップ354)。
【0024】
図4は、特定の実施形態による、データキャッシュ領域プリフェッチャ内の領域履歴テーブル405のフロー
図400である。領域履歴テーブル405は、RIPであって、オフセットインデックスされた複数の領域履歴テーブルエントリ410を含む。各領域履歴テーブルエントリ410は、内部のビット毎に2ビットのカウンタを含むアクセスビット/カウンタフィールド416を有している。一実施形態では、アクセスビット/カウンタフィールド416は、それぞれ2ビットのカウンタを有する11個のエントリで構成された22ビットの2次元配列又はデータ構造である。アドレスオフセット414(アドレスビット5及び4を有するオクトワードのオフセットとして示されている)を使用して、複数の異なるラインアクセスパターンを領域履歴テーブル405に記憶することができ、これにより、64バイトのキャッシュライン内の何れの位置に最初のデータラインアクセス(すなわち、ホームビット)が存在するかに基づいて、所定のRIPに対して複数の異なるデータラインアクセスパターンをプリフェッチすることができる。領域内の最初のデータアクセスがデータラインの始め又は終わりに近い場合、追加のデータライン又は異なるパターンのデータラインのプリフェッチを必要とする場合がある。より具体的には、領域プリフェッチャは、システムメモリの領域に対してプログラムによって行われたロード/ストアメモリアクセスの擬似ランダムシーケンスを追跡する。これらのロード/ストアメモリアクセスは、通常、4、8又は16バイトであり、通常64バイトであるキャッシュラインよりもはるかに小さい。領域プリフェッチャは、これらのロード/ストアメモリアクセスを、領域を生成した最初のメモリアクセスキャッシュミスを囲む64Bのキャッシュラインの第2のより粗い擬似ランダムパターンにマッピングする。この第2のより粗い擬似ランダムパターンは、ラインアクセスビットである。
【0025】
ロード/ストアメモリアクセスの擬似ランダムシーケンスが一貫していると仮定しても、同じアドレスオフセットがメモリ領域からメモリ領域へと使用され、これらの4、8又は16バイトのメモリアクセスの64Bキャッシュラインへのマッピング(ラインアクセスビット)は、領域を生成した最初のメモリアクセスキャッシュミスがキャッシュラインの始め、中間又は終わりの何れに対するものであったかに応じて、異なる。
【0026】
最初のメモリアクセスのアドレスオフセット414(Addr[5:4])を、領域履歴テーブルにアクセスするのに使用されるインデックスに含めることによって、64Bのキャッシュライン境界に対するシステムメモリ内の領域のアライメントに基づいて、複数の異なるラインアクセスパターンを、同じRIPについて領域履歴テーブルに記憶することが可能になる。
【0027】
動作上、古いラインエントリ300がラインエントリテーブルからエビクトされ、古いラインエントリ300内のアクセスビットフィールド315及び第2ラインアクセスビットフィールド320に有効なパターンが存在する場合、古いラインエントリ300を使用して、領域履歴テーブルが更新される(ステップ420)。特に、古いラインエントリ300の所定のRIP及びアドレスオフセットは、領域履歴テーブル405から領域履歴テーブルエントリ410を読み出すためのインデックスとして使用される。アクセスビット/カウンタフィールド416内の2ビットのカウンタは、所定のRIP及びアドレスオフセットが確立されたパターンに従う回数を追跡するために使用される。古いラインエントリ300のアクセスビットフィールド315内の各ビットが調べられる。ラインアクセスビットフィールド315が1である場合、データキャッシュ領域プリフェッチャは、領域履歴ラインテーブル410のアクセスビット/カウンタフィールド416内の対応する2ビットのカウンタをインクリメントする。ラインアクセスビットフィールド315が0である場合、データキャッシュ領域プリフェッチャは、領域履歴ラインテーブル410のアクセスビット/カウンタフィールド416内の対応する2ビットのカウンタをデクリメントする。
【0028】
後続のデータキャッシュミスが新たなラインエントリ300を生成する場合、新たなラインエントリ300に関連するRIP及びアドレスオフセットは、領域履歴テーブル405から領域履歴テーブルエントリ410を読み出すためのインデックスとして使用される。次に、データキャッシュ領域プリフェッチャは、アクセスビット/カウンタフィールド416内の2ビットのカウンタの各々を調べる。カウンタが閾値(例えば、2)を超える場合、データキャッシュ領域プリフェッチャは、対応するキャッシュラインオフセットに対する領域プリフェッチ要求を生成する(ステップ424)。これらのキャッシュラインオフセットは、新たなラインエントリ300のホームアドレスに対するものである。生成された領域プリフェッチ要求は、データキャッシュプリフェッチ要求キューに配置される(ステップ426)。
【0029】
図5A1及び
図5A2は、特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー
図500である。データキャッシュ領域プリフェッチャは、データキャッシュミス発生時にメモリ要求を受信する(ステップ505)。メモリ要求は、ラインエントリテーブル内の全てのラインエントリと比較される(ステップ510)。一致がある場合、ラインエントリテーブル内に適切なビットが設定される(ステップ512)。一致がない場合、新たな領域が生成され、ラインエントリテーブル内のラインエントリに入力される(ステップ515)。この時点で、1)
図5A1及び
図5A2で説明するように領域履歴テーブルを更新すること、及び、2)
図5Bで説明するように領域プリフェッチ要求を生成すること(
図5A1において「B」で示される)、という2つの異なるプロセス分岐が発生する。さらに、
図5A1及び
図5A2を参照すると、ホームビットがメモリ要求のアドレスに設定され、RIPがラインエントリに記憶される(ステップ517)。後続のメモリ要求を調べて、これらがメモリ要求の所定範囲内に存在するかどうかが判別される(ステップ519)。後続のメモリ要求が所定範囲内に存在する場合、特定のラインアクセスビットが特定の領域のラインエントリに設定される(ステップ521)。後続のメモリ要求が所定範囲内に存在しない場合、新たな領域が生成される(ステップ522)。
【0030】
新たなラインエントリが生成されている場合、所定の時点で各ラインエントリが期限切れになる(ステップ523)。この時点で、ラインアクセスビットが調べられ、何れのパターンが存在するかが判別される(ステップ525)。検出されたパターンが連続的且つシーケンシャルである場合(例えば、ホームビットに対して昇順または降順のパターンが存在する場合)、ラインエントリが破棄される(ステップ527)。一実施形態では、データキャッシュ領域プリフェッチャは、((第2ラインアクセスビット[+1]及びラインアクセスビット[+6:+1](全て1に設定される))が1である)、又は、((第2ラインアクセスビット[-1]且つラインアクセスビット[-1:-4](全て1に設定される))が1である)場合に、これらのラインエントリを破棄する。検出されたパターンが擬似ランダムである場合(ステップ529)(例えばビット6、2及び3が設定されている場合)、ラインエントリを、メモリ要求のRIP及びアドレスオフセットをインデックスとして用いて領域履歴テーブルに移動するために準備する(ステップ531)。すなわち、ラインエントリのRIP及びアドレスオフセットは、領域履歴テーブルからエントリを読み出すためのインデックスとして使用される。ラインエントリ内の対応するアクセスビットが1に設定されている場合、データキャッシュ領域プリフェッチャは、特定のカウンタをインクリメントする(ステップ537)。ラインエントリ内の対応するアクセスビットが0に設定されている場合、データキャッシュ領域プリフェッチャは、特定のカウンタをデクリメントする。検出されたパターンが擬似ランダムではない場合、ラインエントリは、他の処理を行う他のプリフェッチャ又はモジュールによって処理される(ステップ532)。
【0031】
ここで、
図5Bを参照すると、新たなエントリのRIP及びオフセット(
図4において、アドレスビット5及び4を有するオクトワードオフセットとして示されている)を使用して、領域履歴テーブルを読み込む(ステップ550)。次に、データキャッシュ領域プリフェッチャは、領域履歴テーブルエントリのアクセスフィールド内の2ビットカウンタの各々を調べる(ステップ555)。カウンタが閾値を超える場合、データキャッシュ領域プリフェッチャは、領域プリフェッチ要求を生成する(ステップ570)。生成された領域プリフェッチ要求は、データキャッシュプリフェッチ要求キューに配置される(ステップ575)。カウンタが閾値を上回っていない場合、処理が続けられる(ステップ560)。つまり、この時点では、領域プリフェッチ要求が生成されない。
【0032】
図6は、1つ以上の開示された実施形態のうち1つ以上の部分を実装することができる例示的なデバイス600のブロック図である。デバイス600は、例えば、ヘッドマウントデバイス、サーバ、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス600は、プロセッサ602と、メモリ604と、ストレージ606と、1つ以上の入力デバイス608と、1つ以上の出力デバイス610と、を含む。また、デバイス600は、入力ドライバ612及び出力ドライバ614をオプションで含むことができる。デバイス600は、
図6に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【0033】
プロセッサ602は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアはCPU又はGPUであってもよい。メモリ604は、プロセッサ602と同じダイ上に配置されてもよいし、プロセッサ602とは別に配置されてもよい。メモリ604は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM若しくはキャッシュ等の揮発性又は不揮発性メモリを含むことができる。
【0034】
ストレージ606は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含むことができる。入力デバイス608は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続(例えば、無線IEEE802信号を送信及び/若しくは受信するための無線ローカルエリアネットワークカード)を含むことができる。出力デバイス610は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号を送信及び/若しくは受信するための無線ローカルエリアネットワークカード)を含むことができる。
【0035】
入力ドライバ612は、プロセッサ602及び入力デバイス608と通信し、プロセッサ602が入力デバイス608から入力を受信することを可能にする。出力ドライバ614は、プロセッサ602及び出力デバイス610と通信し、プロセッサ602が出力デバイス610に出力を送信することを可能にする。入力ドライバ612及び出力ドライバ614は、オプションのコンポーネントであり、デバイス600は、入力ドライバ612及び出力ドライバ614が存在しない場合であっても同様に動作することに留意されたい。
【0036】
概して、一実施形態では、データキャッシュ領域プリフェッチャは、複数のラインエントリを有するラインエントリデータテーブルを含み、各ラインエントリは、所定数のアクセスビットにより定義された領域を含み、所定のラインエントリのアクセスビットは、領域内でキャッシュラインが要求された場合に設定される。また、データキャッシュ領域プリフェッチャは、ラインエントリデータテーブルからのエビクトを受信するように構成された領域履歴テーブルを含む。データキャッシュ領域プリフェッチャは、エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別し、所定のアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外する。一実施形態では、データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンを有するラインエントリを領域履歴テーブルにエビクトする。一実施形態では、領域履歴テーブルは、少なくとも命令ポインタレジスタ(RIP)を使用してインデックスされる。一実施形態では、領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じRIPに対して複数の擬似ランダムアクセスパターンをサポートするために、オフセットを使用してインデックスされる。一実施形態では、各領域履歴エントリは、所定数のアクセスビットを含み、各領域履歴エントリは、所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、カウンタは、エビクト可能なラインエントリに対しアクセスビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる。一実施形態では、データキャッシュ領域プリフェッチャは、領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータをさらに含む。一実施形態では、データキャッシュ領域プリフェッチャは、他のプリフェッチャが、データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックする。一実施形態では、各ラインエントリは、後続のキャッシュライン要求が所定数のアクセスビット内のホームビットから1アクセスビット内に存在する場合に設定される第2アクセスビットであって、領域履歴テーブルへのエビクトから除外される所定のアクセスパターンを判別するために使用される第2アクセスビットをさらに含む。
【0037】
一実施形態では、処理システムは、ストリームプリフェッチャと、データキャッシュ領域プリフェッチャと、を含む。データキャッシュ領域プリフェッチャは、複数のラインエントリを有するラインエントリデータテーブルと、ラインエントリデータテーブルからのエビクトを受信する領域履歴テーブルと、を含む。各ラインエントリは、所定数のアクセスビットによって定義された領域を含み、所定のラインエントリのアクセスビットは、領域内でキャッシュラインが要求された場合に設定される。データキャッシュ領域プリフェッチャは、エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別し、所定のアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外し、ストリームプリフェッチャが、データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックする。一実施形態では、データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンを有するラインエントリを領域履歴テーブルにエビクトする。一実施形態では、領域履歴テーブルは、少なくとも命令ポインタレジスタ(RIP)を使用してインデックスされる。一実施形態では、領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じRIPに対して複数の擬似ランダムアクセスパターンをサポートするために、オフセットを使用してインデックスされる。一実施形態では、各領域履歴エントリは、所定数のアクセスビットを含み、各領域履歴エントリは、所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、カウンタは、各アクセスビット内にビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる。一実施形態では、システムは、領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータを含む。一実施形態では、各ラインエントリは、後続のキャッシュライン要求が所定数のアクセスビット内のホームビットから1アクセスビット内に存在する場合に設定される第2アクセスビットであって、領域履歴テーブルへのエビクトから除外される所定のアクセスパターンを判別するために使用される第2アクセスビットをさらに含む。
【0038】
一実施形態では、データキャッシュ領域プリフェッチを行う方法は、複数のラインエントリを有するラインエントリテーブルにおいてキャッシュライン要求を受信することを含み、各ラインエントリは、所定数のアクセスビットによって定義された領域を含む。キャッシュライン要求が領域内に存在する場合、所定のラインエントリに対してアクセスビットが設定される。アクセスパターンは、エビクト可能なラインエントリ内の特定のアクセスビットから判別される。所定のアクセスパターンを有するラインエントリは、領域履歴テーブルへのエビクトから除外され、擬似ランダムアクセスパターンを有するラインエントリは、領域履歴テーブルにエビクトされる。一実施形態では、領域履歴テーブルは、少なくとも命令ポインタレジスタ(RIP)を使用してインデックスされる。一実施形態では、領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じRIPに対して複数の擬似ランダムアクセスパターンをサポートするために、RIPとオフセットとを使用してインデックスされる。一実施形態では、各領域履歴エントリは、所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、カウンタは、各アクセスビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる。一実施形態では、特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値以上になったという条件で、プリフェッチ要求が領域プリフェッチジェネレータに送信される。一実施形態では、他のプリフェッチャが、データキャッシュ領域プリフェッチャで保留中のストリームを処理することがブロックされる。一実施形態では、各ラインエントリは、第2アクセスビットを含み、後続のキャッシュライン要求が所定数のアクセスビット内のホームビットから1アクセスビット内に存在する場合に第2アクセスビットが設定され、第2アクセスビットは、領域履歴テーブルへのエビクトから除外される所定のアクセスパターンを判別するために使用される。
【0039】
本明細書で説明する実施形態を概して及び限定することなく、非一時的なコンピュータ可読記憶媒体は、処理システム内で実行されると、データキャッシュ領域プリフェッチを行う方法を処理システムに実行させる命令を含む。
【0040】
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
【0041】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令(このような命令は、コンピュータ可読媒体に記憶することが可能である)の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【0042】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばCD-ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体が含まれる。