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

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

▶ アーム・リミテッドの特許一覧

<>
  • 特表-範囲プリフェッチ命令 図1
  • 特表-範囲プリフェッチ命令 図2
  • 特表-範囲プリフェッチ命令 図3
  • 特表-範囲プリフェッチ命令 図4
  • 特表-範囲プリフェッチ命令 図5
  • 特表-範囲プリフェッチ命令 図6
  • 特表-範囲プリフェッチ命令 図7
  • 特表-範囲プリフェッチ命令 図8
  • 特表-範囲プリフェッチ命令 図9
  • 特表-範囲プリフェッチ命令 図10
  • 特表-範囲プリフェッチ命令 図11
  • 特表-範囲プリフェッチ命令 図12
  • 特表-範囲プリフェッチ命令 図13-1
  • 特表-範囲プリフェッチ命令 図13-2
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-28
(54)【発明の名称】範囲プリフェッチ命令
(51)【国際特許分類】
   G06F 12/0862 20160101AFI20240621BHJP
   G06F 12/121 20160101ALI20240621BHJP
【FI】
G06F12/0862 110
G06F12/0862 100
G06F12/0862 105
G06F12/121 100
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023576042
(86)(22)【出願日】2022-05-18
(85)【翻訳文提出日】2024-01-19
(86)【国際出願番号】 GB2022051246
(87)【国際公開番号】W WO2022269220
(87)【国際公開日】2022-12-29
(31)【優先権主張番号】17/355,641
(32)【優先日】2021-06-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ナテラ、クリシュネンドラ
(72)【発明者】
【氏名】マンセル、デビッド ヘナ
(72)【発明者】
【氏名】リコ カロ、アレハンドロ
(72)【発明者】
【氏名】マンディ、アンドリュー
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205JJ13
5B205NN92
5B205QQ11
5B205UU31
(57)【要約】
命令デコーダが、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータを指定する範囲プリフェッチ命令をデコードすることに応答して、プリフェッチ回路は、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータに応じて、複数の指定されたアドレス範囲から少なくとも1つのキャッシュへのデータのプリフェッチを制御する。各指定範囲の開始アドレス及びサイズは、第1及び第2のアドレス範囲指定パラメータに依存する。ストライドパラメータは、連続する指定範囲の開始アドレス間のオフセットを指定する。範囲プリフェッチ命令の使用は、プログラム可能性を改善し、プリフェッチカバレッジとプリフェッチ回路の回路面積との間のバランスを改善するのに役立つ。
【特許請求の範囲】
【請求項1】
装置であって、
命令をデコードするための命令デコーダと、
前記命令デコーダによる前記命令のデコードに応じてデータ処理を実行するための処理回路と、
前記処理回路によるアクセスのためにデータをキャッシュする少なくとも1つのキャッシュと、
データを前記少なくとも1つのキャッシュにプリフェッチするプリフェッチ回路と、を備え、
前記命令デコーダが、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータを指定する範囲プリフェッチ命令をデコードすることに応答して、前記プリフェッチ回路は、前記第1及び第2のアドレス範囲指定パラメータ並びに前記ストライドパラメータに応じて、複数の指定されたアドレス範囲から前記少なくとも1つのキャッシュへのデータのプリフェッチを制御するように構成されており、各指定範囲の開始アドレス及びサイズは、前記第1及び第2のアドレス範囲指定パラメータに依存し、前記ストライドパラメータは、前記複数の指定範囲のうちの連続する指定範囲の開始アドレス間のオフセットを指定する、装置。
【請求項2】
前記第1のアドレス範囲指定パラメータは、前記複数の指定範囲のうちの選択された1つのベースアドレスを含み、前記第2のアドレス範囲指定パラメータは、前記複数の指定範囲の各々のサイズを指定する範囲サイズパラメータを含む、請求項1に記載の装置。
【請求項3】
前記範囲プリフェッチ命令はまた、前記複数の指定範囲内の範囲の数を示すカウントパラメータを指定する、請求項1又は2に記載の装置。
【請求項4】
前記ストライドパラメータは、前記第1及び第2のアドレス範囲指定パラメータのうちの1つと同じレジスタ内で符号化される、請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記命令デコーダが前記範囲プリフェッチ命令をデコードしたことに応答して、前記プリフェッチ回路は、前記複数の指定されたアドレス範囲から前記少なくとも1つのキャッシュへのデータのプリフェッチを、
前記第1及び第2のアドレス範囲指定パラメータ並びに前記ストライドパラメータと、
少なくとも、
データへのアクセスを要求するために前記処理回路によって発行されたデマンドアクセス要求に関連付けられたアドレス又はロードされたデータを監視することと、
プリフェッチ要求又は前記デマンドアクセス要求の結果に関連付けられたマイクロアーキテクチャ情報と、のうちの1つと、の両方に基づいて、制御するように構成されている、請求項1から4のいずれか一項に記載の装置。
【請求項6】
前記マイクロアーキテクチャ情報は、プリフェッチラインフィルレイテンシ、デマンドアクセス頻度、デマンドアクセスヒット/ミス情報、デマンドアクセスプリフェッチヒット情報、及びプリフェッチ有用性情報のうちの少なくとも1つを含む、請求項5に記載の装置。
【請求項7】
前記プリフェッチ回路は、データへのアクセスを要求するために、前記処理回路によって発行されたデマンドアクセス要求に関連付けられたアドレス又はロードされたデータの監視、又はプリフェッチ要求又は前記デマンドアクセス要求の結果に関連付けられたマイクロアーキテクチャ情報に基づいて、前記複数の指定範囲内の所与のアドレスに対してプリフェッチ要求が発行されるタイミングを制御するように構成されている、請求項1から6のいずれか一項に記載の装置。
【請求項8】
前記プリフェッチ回路は、デマンドアクセス要求の前記アドレスの監視に基づいて、前記複数の指定範囲のうちの所与の指定範囲内のアクセスされたアドレスの疎パターンを検出し、前記所与の指定範囲内のどの特定のアドレスが前記検出された疎パターンに基づいてプリフェッチされるべきかを選択する、疎アクセスパターン検出回路を備える、請求項1から7のいずれか一項に記載の装置。
【請求項9】
前記プリフェッチ回路は、前記プリフェッチ回路によって定義された前進距離に基づいてプリフェッチ要求を発行するタイミングを制御するように構成されており、前記前進距離は、前記プリフェッチ要求のプリフェッチアドレスのストリームが、データへのアクセスを要求するために前記処理回路によって発行されたデマンドアクセス要求のデマンドアドレスのストリームと比較してどれだけ進んでいるかを示す、請求項1から8のいずれか一項に記載の装置。
【請求項10】
前記プリフェッチ回路は、前記範囲プリフェッチ命令による前記前進距離の明示的な指定とは無関係に、前記前進距離を定義するように構成されている、請求項9に記載の装置。
【請求項11】
前記プリフェッチ回路は、前記プリフェッチ要求又は前記デマンドアクセス要求の結果に関連付けられたマイクロアーキテクチャ情報に基づいて、前記前進距離を調整するように構成されている、請求項9又は10に記載の装置。
【請求項12】
前記命令デコーダが前記範囲プリフェッチ命令をデコードしたことに応答して、前記プリフェッチ回路は、前記複数の指定範囲のうちの第1の指定範囲の最初の部分から前記少なくとも1つのキャッシュへのデータのプリフェッチをトリガするように構成されている、請求項1から11のいずれか一項に記載の装置。
【請求項13】
前記プリフェッチ回路は、前記範囲プリフェッチ命令による前記最初の部分のサイズの明示的な指定とは無関係に、前記最初の部分の前記サイズを定義するように構成されている、請求項12に記載の装置。
【請求項14】
前記プリフェッチ回路は、所与の距離以下だけ所与のアドレスの前方にあるターゲットアドレスを指定するデマンドアクセス要求を前記処理回路が発行することを検出したことに応答して、前記第1の指定範囲の残りの部分内の前記所与のアドレスからのデータのプリフェッチをトリガするように構成されている、請求項12又は13に記載の装置。
【請求項15】
前記プリフェッチ回路は、前記範囲プリフェッチ命令による前記所与の距離の明示的な指定とは無関係に、前記所与の距離を定義するように構成されている、請求項14に記載の装置。
【請求項16】
前記範囲プリフェッチ命令のデコードに続いて、前記プリフェッチ回路は、前記プリフェッチ回路によってプリフェッチされたプリフェッチアドレスのストリーム、又は前記処理回路によって発行されたデマンドアクセス要求によって指定されたデマンドアドレスのストリームによって、前記プリフェッチ回路が、前記複数の指定範囲のうちの所与の指定範囲の終わりに到達したことを識別したときに、前記所与の指定範囲についてプリフェッチを停止するように構成されている、請求項1から15のいずれか一項に記載の装置。
【請求項17】
前記範囲プリフェッチ命令はまた、前記複数の指定範囲に関連付けられたデータについてのヒントを提供するための1つ以上のプリフェッチヒントパラメータを指定し、前記プリフェッチ回路は、前記1つ以上のプリフェッチヒントパラメータに応じて、前記複数の指定範囲から前記少なくとも1つのキャッシュへのデータのプリフェッチを制御するように構成されている、請求項1から16のいずれか一項に記載の装置。
【請求項18】
前記1つ以上のプリフェッチヒントパラメータは、
プリフェッチされたデータが、ロード動作の対象となることが予想されるデータであるか、ストア動作の対象となることが予想されるデータであるか、又は命令フェッチ動作の対象となることが予想される命令であるかを示すタイプパラメータと、
前記プリフェッチされたデータが前記範囲プリフェッチ命令の後に、どのくらい早く前記処理回路によって要求されると推定されるかの指示と、前記データがプリフェッチされるキャッシュ階層のターゲットレベルと、のうちの少なくとも1つを示すデータ使用タイミングパラメータと、
前記プリフェッチされたデータへの第1のデマンドアクセスと前記プリフェッチされたデータへの更なるデマンドアクセスとの間の推定された間隔の指示、又は前記プリフェッチされたデータが前記キャッシュ階層の所与のレベルから置き換えられる場合に追い出されることが好ましい前記キャッシュ階層の選択されたレベル、のうちの少なくとも1つを示すデータ再利用タイミングパラメータと、
前記複数の指定範囲内のアドレスへのアクセスのパターン、又は疎アクセスパターンタイプの相対的な密集度/疎度を示すアクセスパターンヒントと、
前記プリフェッチされたデータが1回使用されることが予想されるか、又は複数回使用されることが予想されるかの可能性を示す再利用可能性パラメータと、
前記複数の指定範囲からのデータのプリフェッチが抑制されるべきであることを示す非プリフェッチヒントパラメータと、のうちの少なくとも1つを含む、請求項17に記載の装置。
【請求項19】
前記プリフェッチ回路は、前記1つ以上のプリフェッチヒントパラメータに応じて、前記範囲プリフェッチ命令によって指定された前記複数の指定範囲からプリフェッチされたデータに関連付けられたキャッシュ置換ヒント情報又はキャッシュ置換ポリシー情報を設定するように構成されており、
前記キャッシュは、前記プリフェッチ回路によって設定された前記キャッシュ置換ヒント情報又はキャッシュ置換ポリシー情報に基づいて、キャッシュエントリの置換を制御するように構成されている、請求項17又は18に記載の装置。
【請求項20】
方法であって、
命令をデコードすることと、
前記命令デコーダによる前記命令のデコードに応じてデータ処理を実行することと、
前記処理回路によるアクセスのために、少なくとも1つのキャッシュにデータをキャッシュすることと、
前記少なくとも1つのキャッシュにデータをプリフェッチすることと、を備え、
第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータを指定する範囲プリフェッチ命令のデコードに応答して、複数の指定されたアドレス範囲から前記少なくとも1つのキャッシュへのデータのプリフェッチは、前記第1及び第2のアドレス範囲指定パラメータ並びに前記ストライドパラメータに応じて制御され、各指定範囲の開始アドレス及びサイズは、前記第1及び第2のアドレス範囲指定パラメータに依存し、前記ストライドパラメータは、前記複数の指定範囲のうちの連続する指定範囲の開始アドレス間のオフセットを指定する、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。より詳細には、プリフェッチに関する。
【0002】
技術背景
プリフェッチは、データ処理システムにおいて、データが処理回路によって要求される時間に先立って、データをキャッシュに入れるために使用される。これは、性能を改善するために、処理回路によって行われる実際のデマンドアクセス中に重要なタイミングパスからキャッシュミス又は変換ルックアサイドバッファミスを処理することに関連するレイテンシを除去する。
【発明の概要】
【0003】
少なくともいくつかの例は、命令をデコードするための命令デコーダと、命令デコーダによる命令のデコードに応じてデータ処理を実行するための処理回路と、処理回路によるアクセスのためにデータをキャッシュする少なくとも1つのキャッシュと、データを少なくとも1つのキャッシュにプリフェッチするプリフェッチ回路と、を備え、命令デコーダが、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータを指定する範囲プリフェッチ命令をデコードすることに応答して、プリフェッチ回路は、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータに応じて、複数の指定されたアドレス範囲から少なくとも1つのキャッシュへのデータのプリフェッチを制御するように構成されており、各指定範囲の開始アドレス及びサイズは、第1及び第2のアドレス範囲指定パラメータに依存し、ストライドパラメータは、複数の指定範囲のうちの連続する指定範囲の開始アドレス間のオフセットを指定する、装置を提供する。
【0004】
少なくともいくつかの例は、方法であって、命令をデコードすることと、命令デコーダによる命令のデコードに応じてデータ処理を実行することと、処理回路によるアクセスのために、少なくとも1つのキャッシュにデータをキャッシュすることと、少なくとも1つのキャッシュにデータをプリフェッチすることと、を含み、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータを指定する範囲プリフェッチ命令のデコードに応答して、複数の指定されたアドレス範囲から少なくとも1つのキャッシュへのデータのプリフェッチは、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータに応じて制御され、各指定範囲の開始アドレス及びサイズは、第1及び第2のアドレス範囲指定パラメータに依存し、ストライドパラメータは、複数の指定範囲のうちの連続する指定範囲の開始アドレス間のオフセットを指定する、方法を提供する。
【0005】
本技術の更なる態様、特徴、及び利点は、添付の図面とともに読まれるべき以下の例の説明から明らかになる。
【図面の簡単な説明】
【0006】
図1】プリフェッチ回路を含むデータ処理システムの一例を概略的に示す図である。
図2】範囲プリフェッチ命令の一例を示す図である。
図3】所与の指定範囲からのプリフェッチを制御するために、範囲プリフェッチ命令の第1及び第2のアドレス範囲指定パラメータを使用する例を示す。
図4】単一アドレス指定プリフェッチ命令を使用する代替コード例を示す。
図5】範囲プリフェッチ命令を使用するコード例を示す。
図6】範囲プリフェッチ命令の符号化の特定の例を示す。
図7】指定されたストライドの間隔で、アドレスの複数の範囲のプリフェッチを制御するためのストライド及びカウントパラメータの使用を示す。
図8】範囲プリフェッチ命令の使用から利益を得ることができる畳み込み演算を示す。
図9】プリフェッチ回路のマイクロアーキテクチャ実装の異なる例を示す。
図10】プリフェッチ回路のマイクロアーキテクチャ実装の異なる例を示す。
図11】プリフェッチ回路のマイクロアーキテクチャ実装の異なる例を示す。
図12】範囲プリフェッチ命令に基づくプリフェッチの制御を示すフロー図である。
図13-1】第1及び第2のアドレス範囲指定パラメータに基づくプリフェッチの制御をより詳細に示すフロー図を示す。
図13-2】第1及び第2のアドレス範囲指定パラメータに基づくプリフェッチの制御をより詳細に示すフロー図を示す。
【発明を実施するための形態】
【0007】
プリフェッチを実行する1つの手法は、ハードウェアプリフェッチを使用することであってもよく、ハードウェアに実装されたプリフェッチ回路が、データへのアクセスを要求するために処理回路によって発行されたデマンドアクセス要求のアドレスを監視し、その結果、ハードウェアプリフェッチャが、行われているアクセスのパターンを学習し、その後、同じアドレスへの予想されるデマンドアクセスに先立って、所与のアドレスに対するデータをキャッシュに取り込むためのプリフェッチ要求を発行することができる。典型的なハードウェアプリフェッチャを用いて、プリフェッチャは、ソフトウェアプリフェッチ命令のプログラマ指定又はコンパイラ指定パラメータに基づいてソフトウェアによって提供される明示的なヒントなしに、将来のプリフェッチ要求をどのように発行するかを決定するために、オンデマンドでアクセスされるアドレスから、及びキャッシュミスなどのマイクロアーキテクチャキューから学習することができる。典型的なハードウェアプリフェッチ方式は、効果的であり得るが、いくつかの欠点を有し得る。ハードウェアプリフェッチャは、プリフェッチャがデマンドアクセス内で検出されたアドレスのストリームに訓練してラッチすることができる前に、妥当な数のデマンドアクセスが監視されることを必要とする場合があり、したがって、アドレスのストリームの最初の部分についてデータの効果的なプリフェッチを実行することが困難な場合がある。特定のソフトウェアワークロードが非常に小さいストリームに対して動作する場合、プリフェッチャがその予測において十分な信頼を得たときに、ストリームがすでに終了している可能性があるので、ハードウェアプリフェッチャは、ストリームを識別し、適時にプリフェッチすることができるほど十分なサンプルを有していない可能性がある。これは、プリフェッチャのカバレッジの損失、したがって性能の損失につながる。また、ハードウェアプリフェッチャは、デマンドアクセスの挙動を追跡し、それを使用して予測されるアドレスアクセスパターンの信頼度を評価するために、大量のプリフェッチ予測状態データを記憶する必要がある場合もある。例えば、典型的なハードウェアプリフェッチャの訓練ユニットは、多くの電力及びエネルギーを消費する数十キロバイトのハードウェアバジェットを取る可能性がある。典型的なハードウェアプリフェッチャに関する別の問題は、通常、アドレスのストリームがいつ終了するかを知らないことであり、したがって、プリフェッチャが特定のアドレスのストリーム内の将来のアクセスを予測するようにうまく訓練された場合であっても、実行されているソフトウェアがすでにそのストリームから移動し、他のアドレス領域内のデータに対して動作を開始した後、ハードウェアプリフェッチャは、ストリームの終わりを越えた距離にわたってラインをプリフェッチし続ける傾向がある。そのような不正確なプリフェッチは、利用可能なメモリシステム帯域幅を浪費し、キャッシュ汚染(例えば、より有用なキャッシュエントリの過剰にプリフェッチされたデータでの置換)を引き起こす可能性があり、キャッシュ汚染は、他のアクセスに対するキャッシュヒット率、したがってコストパフォーマンスを低下させる可能性がある。
【0008】
プリフェッチに対する別のアプローチは、ソフトウェアプリフェッチを使用することであり得、ここで、プログラマ又はコンパイラは、実行されるべきプログラムコード内に、将来使用されることが予想されるデータの単一ターゲットアドレスを指定するプリフェッチ命令を含み、プリフェッチ回路は、その単一アドレス指定プリフェッチ命令に応答して、その単一アドレスに対応するデータのプリフェッチを制御する。例えば、プリフェッチ回路は、単一アドレス指定ソフトウェアプリフェッチ命令に応答して、キャッシュに持ち込まれるべきデータの単一キャッシュラインに対する要求を発行し得る。ソフトウェアプリフェッチ命令を提供することによって、プログラマ又はコンパイラは、特定のアドレスにアクセスする将来の意図の明示的な指示を提供して、後のデマンドアクセスに備えてキャッシュを準備することができる。
【0009】
しかしながら、そのような単一アドレス指定プリフェッチ命令を使用するソフトウェアプリフェッチは、依然としていくつかの欠点を有する。プログラマは、これらのソフトウェアプリフェッチ命令をコードに追加することが非常に困難であることに気付くことがある。各命令が単一のアドレスを指定するので、実際には、コードは、コードが後でアクセスすることが予想される異なるアドレスに対応する多数のそのようなソフトウェアプリフェッチ命令を含む必要がある。プリフェッチ命令を挿入するプログラムコードのポイントは、ソフトウェア開発者に常に明らかであるとは限らない。また、プリフェッチの有効性は、対応する単一アドレス指定範囲プリフェッチ命令が特定のデマンドアクセスのどれだけ前に挿入されるかに依存するので、この手法でプリフェッチの適時性を制御することは困難であり得る。単一アドレス指定プリフェッチ命令が含まれるのが早すぎる場合、プリフェッチデータは、後続のデマンドアクセスが発生するときまでにキャッシュからすでに追い出されている可能性があり、プリフェッチの実行に関連するリソースを浪費する。単一アドレス指定範囲プリフェッチ命令が含まれるのが遅すぎる場合、プリフェッチデータは、後続のデマンドアクセスに遭遇するときまでにキャッシュ内にまだ常駐していない可能性があり、したがって、デマンドアクセスは依然としてキャッシュミスに遭遇する可能性がある。したがって、単一のアドレスを指定する典型的なソフトウェアプリフェッチ命令では、タイミングを正確にすることは試行錯誤のプロセスになり、このことは、ソフトウェア開発者がソフトウェアプリフェッチ命令を追加するための最良のロケーションを考案する際に大量の開発時間がかかることを意味する。
【0010】
従来のソフトウェアプリフェッチに関する別の問題は、単一アドレス指定ソフトウェアプリフェッチ命令を使用するプログラムコードが、プロセッサコア及びメモリシステムの特定のマイクロアーキテクチャに固有になることである。特定の命令セットアーキテクチャに従って書かれたコードは、異なるマイクロアーキテクチャ設計を有する多種多様な異なる処理システム上で実行することができ、これらは、提供されるキャッシュのレベル数、所与のキャッシュレベルで提供されるキャッシュストレージのサイズ、キャッシュラインサイズ(メモリとキャッシュとの間で転送されるメモリの基本単位のサイズ)、メモリシステム帯域幅を求めて競合しているアクセス要求の他のソースの数、及びハードウェアにおける特定のプロセッサ実装の多くの他の特定の特性などの特性に応じて、データがメモリからキャッシュにフェッチされるときに異なるレイテンシを経験することがあり、異なるキャッシュヒット/ミス率を有することがある。これらの要因は、コードが1つのマイクロアーキテクチャプラットフォーム上で実行されるとき、プリフェッチのための好ましいタイミングが、同じコードが別のマイクロアーキテクチャプラットフォーム上で実行されているときよりも早くなり得ることを意味する。これは、効率的な性能でマイクロアーキテクチャの範囲にわたって実行することができる単一アドレス指定ソフトウェアプリフェッチ命令を使用してコードを書き込むことが非常に困難であることを意味する。異なるマイクロアーキテクチャに対して異なるバージョンのコードを生成する開発コストは非常に高くなる。
【0011】
以下に説明する実施例では、装置は、命令を復号するための命令デコーダと、命令デコーダによる命令のデコードに応答してデータ処理を実行する処理回路とを有する。少なくとも1つのキャッシュが、処理回路によるアクセスのためにデータをキャッシュするために提供される。プリフェッチ回路は、少なくとも1つのキャッシュにデータをプリフェッチするために提供される。命令デコーダは、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータを指定する範囲プリフェッチ命令をサポートする。命令デコーダが、範囲プリフェッチ命令をデコードすることに応答して、プリフェッチ回路は、第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータに応じて、複数の指定されたアドレス範囲からキャッシュへのデータのプリフェッチを制御し、各指定範囲の開始アドレス及びサイズは、第1及び第2のアドレス範囲指定パラメータに依存し、ストライドパラメータは、複数の指定範囲のうちの連続する指定範囲の開始アドレス間のオフセットを指定する。
【0012】
したがって、範囲プリフェッチ命令は、メモリアドレスのいくつかの指定範囲が将来アクセスされることをシグナリングするためにソフトウェアによって使用され得る。ストライドパラメータは、単一の命令が、アドレス空間において不連続であり、一定のストライド間隔で分離されている、特定のサイズのデータのいくつかのブロックにアクセスする後続のアクセスパターンがあると予想されるプリフェッチヒントを提供することを可能にする。アクセスのこのパターンは、例えば、機械学習モデルを訓練するために、重みのカーネルとアクティブ化データの行列との畳み込みを使用する機械学習モデルなど、多くの機械学習アプリケーションに有用であり得る。そのような畳み込みは、カーネルを行列内の異なる位置に適用することに依存し得、各カーネル位置について、これは、所与のカーネル位置について使用されるアクティブ化値についてアクセスされるアドレス範囲間のギャップを有する、行列内の異なる行又は列の部分を表すデータのいくつかの比較的短いチャンクの読取りを必要とし得る。不連続な範囲のストライドパターンを指定することによって、プリフェッチ回路を効率的に訓練して、そのようなアクセスのパターンを効果的にプリフェッチすることを学習することがはるかに容易になる。そのような畳み込みは、アドレスの範囲の境界及びストライドを指定する範囲プリフェッチ命令から利益を得ることができるアクセスパターンの単なる一例であり、他の演算もこれから利益を得ることができることが理解されよう。
【0013】
次いで、プリフェッチ回路は、これらのヒントに応答して、その指定されたアドレス範囲からのデータがキャッシュにプリフェッチされる方法を制御することができる。先に述べた単一アドレス指定プリフェッチ命令と比較して、範囲プリフェッチ命令は、個々のアドレスに対応する多数のプリフェッチ命令を挿入するのではなく、処理されることが予想される所与のデータ構造の部分に関連するアドレスを指定する単一の範囲プリフェッチ命令を含めることができるので、プログラマ又はコンパイラが使用するのがはるかに容易である。ソフトウェア開発を簡略化するだけでなく、これはまた、コードに含まれる必要があるプリフェッチ命令の数を大幅に低減し、プリフェッチ命令によって消費されるフェッチ、デコード、及び発行帯域幅の量を低減し、他のタイプの命令のためのより大きいスループットを可能にする。範囲プリフェッチ命令を使用するプログラマは、範囲プリフェッチ命令によってヒントとして提供される指定されたアドレス範囲の境界内でプリフェッチ回路によってハードウェア内で適時性を制御することができるので、デマンドアクセスに対する所与のプリフェッチ命令の挿入の適時性について心配する必要がない。範囲プリフェッチ命令における第1及び第2のアドレス範囲指定パラメータ及びストライドパラメータの使用はまた、単一のアドレスを指定するプリフェッチ命令の使用と比較して、アプリケーションがマイクロアーキテクチャ及びシステムアーキテクチャ依存性がはるかに少なくなることを意味し、その結果、異なるマイクロアーキテクチャプロセッサ実装の範囲にわたって実行することができるプログラムコードを書くことがはるかに簡単になる。
【0014】
一方、プリフェッチ命令によって明示的に提供されるいかなるソフトウェア指定ヒントも使用しない典型的なハードウェアプリフェッチと比較して、範囲プリフェッチ命令の使用は、将来アクセスされることが予想されるアドレスの範囲の境界を識別するパラメータを明示的に指定することによって、これは、アクセスが予測可能な特性を有するアドレスのストリームから行われ始めるときに長い初期訓練期間を必要とするのではなく、プリフェッチ回路がそれらの範囲からプリフェッチするように迅速に準備され得ることを意味するので、有益である。したがって、実際には、所与のデータ構造に対応する特定の範囲内のデータにアクセスが行われるとき、純粋なハードウェアプリフェッチ実装形態では、プリフェッチャが依然として信頼を得ている可能性があるので、その範囲の最初の部分が首尾よくプリフェッチされる可能性は低い。対照的に、範囲プリフェッチ命令を使用すると、第1のアドレス範囲指定パラメータを使用して範囲の開始を識別することができ、したがってウォームアップ時間を大幅に短縮することができ、プリフェッチ成功率、したがって性能が改善される。範囲プリフェッチ命令は、予測可能なパターンに従うデマンドアドレスのストリームが非常に小さく、純粋なハードウェアプリフェッチャを用いて効果的にプリフェッチすることが困難である場合に特に有用であり得る。
【0015】
同様に、アドレス範囲のうちの所与の1つのサイズは、第1及び第2のアドレス範囲指定パラメータから識別可能であり得るので、これは、アクセスされているデータ構造の終わりを超えて過剰プリフェッチする問題を低減し、プリフェッチ帯域幅の不必要な消費、及び純粋なハードウェアプリフェッチャにおいて性能問題を引き起こし得る過剰プリフェッチされたデータによる他のデータの可能な追い出しを回避する。一般に、所与の量のハードウェア回路面積バジェットに対して、範囲プリフェッチ命令によって提供されるヒントを使用するプリフェッチャは、デマンドアクセス及びアクセスヒット/ミス情報などのマイクロアーキテクチャ情報の監視から推測される暗黙のキューから純粋にプリフェッチを学習する同等のハードウェアプリフェッチャよりも、より大きいプリフェッチカバレッジ(そうでなければキャッシュ内でミスするときに、以前にプリフェッチされたデータにヒットするデマンドアクセスの割合がより大きい)、したがってより良好な性能を提供することができる。一方、所与のレベルのプリフェッチカバレッジに対して、範囲プリフェッチ命令に基づいて制御され得るプリフェッチャは、範囲プリフェッチ命令から受信される範囲プリフェッチキューをサポートしない従来のハードウェアプリフェッチャよりも少ない回路面積を必要とし得る。なぜなら、これらの範囲プリフェッチキューなしで同等レベルの性能を維持するには、典型的には、はるかに多くの訓練データのセットが記憶され、デマンドアクセスと比較される必要があるからである。
【0016】
したがって、要約すると、範囲プリフェッチ命令をサポートすることによって、これは、従来のソフトウェアプリフェッチ及びハードウェアプリフェッチ方式を使用して可能であるよりも、プリフェッチカバレッジ(性能)と回路面積及び電力消費との間のより良好なバランスを提供することができ、また、ソフトウェア開発者がプリフェッチ命令を含むコードを書くことがより容易になるように、より良好なプログラマビリティを可能にする。
【0017】
第1及び第2のアドレス範囲指定パラメータは、アドレス範囲のうちの選択された1つの境界を識別するために使用され得る範囲プリフェッチ命令の任意の2つのソフトウェア指定パラメータであってもよい。例えば、選択された範囲は、命令を使用して識別された複数のアドレス範囲のうちの第1の範囲であり得る。他の範囲の境界は、ストライドによって示されるオフセットを範囲のうちの選択された1つの境界に適用することによって決定することができる。
【0018】
第1及び第2のアドレス範囲指定パラメータは、異なる方法で指定することができる。例えば、第1及び第2のアドレス範囲指定パラメータは各々、絶対アドレスとして、又は第1及び第2のアドレス範囲指定パラメータ自体以外の参照アドレスを参照することによって、メモリアドレスを指定することができる。例えば、第1のアドレス範囲指定パラメータは、選択された範囲の開始アドレスを指定することができ、第2のアドレス範囲指定パラメータは、実行中に到達した現在のポイントを示すプログラムカウンタなどの基準アドレスに対するオフセットとして絶対的に、選択された範囲の終了アドレスを指定することができる。
【0019】
しかしながら、指定範囲のサイズが特定の量よりも大きくなる可能性は比較的低いので、開始アドレス及び終了アドレスの一方が他方に対して指定される場合には、より少ないビットを使用することができる。いくつかの例では、開始アドレスは、終了アドレスに対して指定され得る。しかしながら、指定範囲の開始アドレスが範囲プリフェッチ命令のオペランド内のベースアドレスとして符号化され、終了アドレスが開始アドレスに対して、例えばサイズパラメータ又はオフセット値によって表現されることがより自然である場合が多い。したがって、1つの有用な例は、第1のアドレス範囲指定パラメータが指定範囲のベースアドレス(開始アドレス)を含み、第2のアドレス範囲指定パラメータが、指定範囲の各々のサイズを指定する範囲サイズパラメータを含むことであり得る。これにより、指定されたサイズに対応するオフセットをベースアドレスに適用することに基づいて、指定範囲の終了アドレスを決定することができる。指定されたベース及びサイズは、第1の指定範囲の境界を指定することができ、次いで、ストライドを使用して、ストライドされた範囲グループ内の後続の範囲の開始/終了を識別することができる。範囲のストライドされたグループ内の範囲の各々は、同じサイズを有することができる。
【0020】
第1及び第2のアドレス範囲指定パラメータは、異なる方法で範囲プリフェッチ命令内に符号化され得る。例えば、第1及び第2のアドレス範囲指定パラメータの各々は、範囲プリフェッチ命令の命令符号化において直接符号化された即値を使用して、又は範囲プリフェッチ命令の符号化内の対応するレジスタ指定子によって識別されるレジスタを使用して符号化され得る。
【0021】
第1のアドレス範囲指定パラメータがベースアドレスを符号化し、第2のアドレス範囲指定パラメータが範囲サイズを符号化する場合、有用な例は、第1のアドレス範囲指定パラメータが範囲プリフェッチ命令によって指定される第1のレジスタに符号化され、第2のアドレス範囲指定パラメータが範囲プリフェッチ命令によって指定される第2のレジスタに符号化されるか、又は範囲プリフェッチ命令の符号化において直接指定される即値によって符号化されることであり得る。
【0022】
アドレス範囲指定パラメータが符号化される方法にかかわらず、アドレス範囲指定パラメータの符号化は、いくつかの例では、正確な2の累乗以外のバイト数に対応するアドレスのブロックに及ぶものとして所与の指定されたアドレス範囲を示すことをサポートすることができる。例えば、指定範囲のサイズは、特定の最大サイズまでの任意の選択されたバイト数であってもよい。所与の指定されたアドレス範囲に対してサポートされる最大サイズは、単一のキャッシュラインのサイズよりも大きくてもよく、ここで、キャッシュラインは、単一の転送においてキャッシュ間又はキャッシュとメモリとの間で転送され得るデータの単位のサイズである。したがって、範囲プリフェッチ命令によって指定することができるアドレスの範囲は、単一のキャッシュラインに制限されず、任意のサイズの範囲とすることができ、したがって、2の累乗のサイズのブロックに制限されず、ソフトウェアが処理する特定のデータ構造の部分の境界に一致するように指定範囲をソフトウェアが選択することが可能になり、これは、単一のキャッシュラインを、特定の2の累乗のサイズのバイトのブロックに対応するキャッシュに取り込む、単一のアドレスを指定し、したがって、複数のキャッシュラインにまたがる、又は2の累乗でないサイズを有するデータ構造の他の部分をプリフェッチするために、更に単一アドレス指定プリフェッチ命令を実行する必要がある、単一アドレス指定プリフェッチ命令では一般に不可能である。同様に、ストライドパラメータの符号化は、正確な2の累乗以外のバイト数としてオフセットを示すことをサポートし得る。
【0023】
代替的に、他の例は、サイズ及び/又はストライドの符号化を2の累乗バイト数の単位に制限し得、したがって、単一バイトの粒度でのサイズ又はストライドの仕様をサポートしないことがある。例えば、サイズ又はストライドパラメータは、例えば2、4、又は8バイトの特定の基本単位サイズの倍数を指定することができる。
【0024】
範囲のサイズ又はストライドを符号化するための他の技法も使用できることが理解されよう。
【0025】
いくつかの例では、範囲プリフェッチ命令はまた、ストライドオフセットによって分離されたいくつの範囲がプリフェッチされるべきかを示すカウントパラメータを指定し得る。これにより、プリフェッチは、複数の範囲からのプリフェッチをいつ中止すべきかを決定することができる。ストライドパラメータ及びカウントパラメータは、即値又はレジスタ内の値を使用するなど、異なる方法で符号化され得る。ストライド値及びカウント値は、第1又は第2のアドレス範囲指定パラメータに使用されるレジスタとは異なるレジスタを使用して符号化されることが可能である。
【0026】
しかしながら、第1のアドレス範囲指定パラメータがベースアドレスを指定し、第2のアドレス範囲指定パラメータが、第1のアドレス範囲指定パラメータによって示されるベースアドレスに対するサイズ又はオフセットとして指定される一例では、これは、第1のものよりも第2のアドレス範囲指定パラメータに対してより少ないビットを必要とし得、したがって、第2のアドレス範囲指定パラメータを提供するために使用されるレジスタ内にいくつかのスペアビットが存在し得る。したがって、場合によっては、ストライドパラメータ及びカウントパラメータのうちの少なくとも1つは、第2のアドレス範囲指定パラメータと同じレジスタ内で符号化され得る。これにより、範囲プリフェッチ命令符号化において必要とされるレジスタ指定子の数を低減し、他の目的のために再利用され得る符号化空間を節約する。
【0027】
範囲プリフェッチ命令は、先に説明したストライドパラメータ及びカウントパラメータをサポートするが、範囲プリフェッチ命令は、プリフェッチされるべきアドレスの単一の範囲のみが示され、その範囲の境界が第1及び第2のアドレス範囲指定パラメータに基づいて決定される符号化もサポートし得ることが理解されよう。例えば、カウントパラメータ又はストライドパラメータが特定のデフォルト値を有するとき、これは、単一の範囲のみがプリフェッチされるべきであることを示し得る。したがって、範囲プリフェッチ命令の全てのインスタンスが、ストライドのインスタンスにおいて分離された複数の範囲からプリフェッチをトリガすることは必須ではないが、それにもかかわらず、範囲プリフェッチ命令は、一定のストライド間隔で分離された複数の範囲内のアドレスからデータをプリフェッチするためにプリフェッチャを準備するために単一の命令を使用するオプションをプログラマが有するように、ストライドパラメータ(及び任意選択でカウントパラメータ)が決定されることを可能にする符号化を有する。
【0028】
範囲プリフェッチ命令によって提供される第1及び第2のアドレス範囲指定パラメータ並びにストライドパラメータは、少なくとも1つのキャッシュ内の指定されたアドレス範囲からのデータのプリフェッチを制御するためにプリフェッチ回路によって使用される唯一の情報ではない場合がある。プリフェッチはまた、データへのアクセスを要求するために処理回路によって発行されたデマンドアクセス要求に関連付けられたアドレス又はロードされたデータの監視と、プリフェッチ要求又はデマンドアクセス要求の結果に関連付けられたマイクロアーキテクチャ情報とのうちの少なくとも1つに依存し得る。したがって、デマンドアクセスによって必要とされると予想されるアドレスの範囲の境界の指示は、プリフェッチャを準備し、プリフェッチウォームアップ時間を短縮し、過剰なプリフェッチを回避し、前述の理由でソフトウェア開発を簡略化するのに有用であり得るが、指定範囲内で、プリフェッチハードウェアは、指定範囲内のどのアドレスがプリフェッチされるべきか、及びそれらのプリフェッチを発行するタイミングに関して独自の決定を行う柔軟性を有し得る。デマンドアクセス要求のアドレス及び/又はデータ、並びにプリフェッチ要求又はデマンドアクセス要求の結果を示すマイクロアーキテクチャ情報を監視することによって、プリフェッチ回路は、マイクロアーキテクチャ依存の決定を行って、所与のマイクロアーキテクチャ実装のための改善されたプリフェッチカバレッジを可能にすることができるが、範囲プリフェッチ命令の範囲指定パラメータによって誘導されることによって、これは、そのような範囲ヒントが与えられなかった代替ハードウェアプリフェッチよりも少ない回路面積バジェットを必要とし得る。したがって、プリフェッチは、ハードウェア内のプリフェッチ回路によって動的に調整され得るが、ソフトウェアによって定義されるような範囲プリフェッチ命令によって提供される範囲境界に関する情報によって誘導される。例えば、メモリからロードされたデータを、例えば、後続のアクセスのアドレスを決定するために使用されるポインタとして使用することができることが認識されているシナリオでは、デマンドアクセス要求に関連するロードされたデータを使用してプリフェッチを制御することができ、1つのデマンドアクセスのロードされたデータからの情報を使用して、将来どのアドレスにアクセスすることができるかを予測することができる。
【0029】
マイクロアーキテクチャ情報がプリフェッチを調整するために使用される場合、このマイクロアーキテクチャ情報は、プリフェッチラインフィルレイテンシ(プリフェッチ要求の発行と少なくとも1つのキャッシュに戻される対応するプリフェッチデータとの間のレイテンシを示す)、デマンドアクセス頻度(処理回路によってデマンドアクセス要求が発行される頻度)、デマンドアクセスヒット/ミス情報(例えば、所与のレベルのキャッシュにおいてヒット又はミスするデマンドアクセス要求の割合を示す情報を提供し、場合によっては、この情報は異なるレベルのキャッシュに対して維持され得る)、デマンドアクセスプリフェッチヒット情報(例えば、デマンドアクセスに応答してオンデマンドで以前にフェッチされたデータにヒットするのとは対照的に、以前にプリフェッチされたデータにヒットするデマンドアクセス要求の割合を示す)、及びプリフェッチ有用性情報(例えば、プリフェッチされたデータがキャッシュから追い出される前に、プリフェッチされたデータが、その後デマンドアクセスによって使用されるプリフェッチ要求の割合の指示)のうちの任意の1つ以上を含むことができる。任意の所与の実装形態は、これらのタイプのマイクロアーキテクチャ情報の全てを考慮する必要はない。これらのタイプのうちの任意の1つ以上が考慮され得る。
【0030】
プリフェッチ回路は、データへのアクセスを要求するために、処理回路によって発行されたデマンドアクセス要求に関連付けられたアドレス又はロードされたデータの監視、又はプリフェッチ要求又はデマンドアクセス要求の結果に関連付けられたマイクロアーキテクチャ情報に基づいて、複数の指定範囲内の所与のアドレスに対してプリフェッチ要求が発行されるタイミングを制御してもよい。これは、ハードウェアが正確なタイミングを決定するための柔軟性を残すのではなく、指定されたアドレスがプリフェッチされるための直接トリガとして通常動作する従来のソフトウェアプリフェッチ命令とは異なる。したがって、プリフェッチ範囲命令は、プリフェッチが必然的に正しく行われるためのトリガではなく、ソフトウェアが将来のアドレスアクセスパターンに関するヒントを用いてプリフェッチャを準備するための機構とみなすことができ、その結果、ハードウェアは、マイクロアーキテクチャキューに応じてプリフェッチタイミングに関する最終決定を行うことができ、ソフトウェアはよりプラットフォームに依存しないことができる。
【0031】
いくつかの例では、プリフェッチ回路は、デマンドアクセス要求のアドレスの監視に基づいて、範囲プリフェッチ命令によって示されるアドレスの複数の範囲のうちの所与の指定範囲内のアクセスされたアドレスの疎パターンを検出し、検出された疎パターンに基づいて、指定範囲内のどの特定のアドレスがプリフェッチされるべきかを選択するための疎アクセスパターン検出回路を有し得る。したがって、疎アクセスパターン検出回路を有するマイクロアーキテクチャ実装形態は、予想される使用パターンが疎であり、所与の指定範囲内の全てのアドレスがアクセスされる可能性が低い場合であっても、範囲プリフェッチ命令の使用から利益を得ることができる。例えば、疎アクセスパターン検出回路は、デマンドアドレスのストリーム内のストライドされたアドレスパターン又はストライド間隔の交互のシーケンスを検出するためにアドレスのシーケンスを監視し、どのアドレスがプリフェッチするのに最も効果的であるかを学習するために、検出されたパターン及び関連付けられた信頼度レベルを示す予測状態情報を記憶し得る訓練回路を有し得る。しかしながら、範囲プリフェッチ命令からのアドレス範囲指定パラメータによってガイドされることによって、これは、指定範囲の最初の部分のより良好なプリフェッチを可能にするために疎アクセスパターン検出回路をより迅速に準備することができ、また、範囲プリフェッチ命令からのヒントは、検出されたパターンが終了するときを疎アクセスパターン検出回路に示し、したがって、過剰なプリフェッチを回避することができる。
【0032】
範囲プリフェッチ命令がストライドパラメータを使用して複数の指定範囲を指定する場合、疎アクセスパターン検出回路は、それらの指定範囲の個々の範囲内のアドレスアクセスの更なるストライドされたパターンを検出するために依然として適用され得ることに留意されたい。その場合、範囲プリフェッチ命令によって識別される指定範囲は、将来のデマンドアクセスが必要とされ得る領域の境界として解釈され得るが、疎アクセスパターン検出回路は、それらの領域内のどの特定のアドレスが実際にアクセスされるかを学習し、それに応じてプリフェッチ回路を訓練し得る。
【0033】
他の実装形態は、疎アクセスパターン検出回路を有さなくてもよく、プリフェッチ回路のより単純なハードウェア実装形態を使用することを選択してもよく、それは、指定範囲内の各アドレスがプリフェッチされるべきであるように、所与の指定範囲内のアクセスパターンが密アクセスパターンであると仮定してもよい。
【0034】
ハードウェアにおいて制御され得るプリフェッチ制御の別の態様は、プリフェッチ回路によって発行されたプリフェッチ要求のプリフェッチアドレスのストリームが、データへのアクセスを要求するために処理回路によって発行されたデマンドアクセス要求のデマンドアドレスのストリームと比較して、どれだけ進んでいるかを制御するために使用される前進距離であり得る。前進距離に基づいて、プリフェッチ回路は、所与のアドレスに対するプリフェッチ要求が発行されるタイミングを制御し得る。
【0035】
プリフェッチ回路が、範囲プリフェッチ命令による前進距離の明示的な指定(又は他のコードに対する範囲プリフェッチ命令の位置に基づく前進距離の暗示的な仕様)とは無関係に、前進距離を定義することが有用であり得る。例えば、前進距離の設定は、プリフェッチ回路の特定のマイクロアーキテクチャ実装に基づいてもよく、これは、同じソフトウェアコードが異なるマイクロアーキテクチャ実装上で実行され得るので、ソフトウェアコードから独立していてもよい。ソフトウェアが前進距離を制御する必要がないことによって(有用であると推定される予想前進距離に基づいて、ソフトウェアプリフェッチ命令が挿入されるポイントをプログラマが考慮する必要がある、単一アドレス指定プリフェッチ命令を使用する手法とは異なり)、これは、ソフトウェア開発者が、マイクロアーキテクチャの範囲にわたって効率的に実行することができるプラットフォーム独立コードを生成することをはるかに容易にする。例えば、プリフェッチ回路は、デマンドアクセス要求のプリフェッチ要求の結果に関連付けられたマイクロアーキテクチャ情報に基づいて、前進距離を調整することができる。このマイクロアーキテクチャ情報は、先に述べたマイクロアーキテクチャ情報のタイプのいずれかとすることができる。
【0036】
プリフェッチ回路の異なるマイクロアーキテクチャ実装形態は、異なる方法で範囲プリフェッチ命令に応答し得る。単純な手法は、単に、指定範囲内のアドレス(又は少なくとも指定範囲のうちの第1の範囲内のアドレス)に対応するプリフェッチ要求を、範囲プリフェッチ命令への応答として直接発行することであり得る。しかしながら、実際には、これは、指定範囲の後の部分のプリフェッチがメモリ帯域幅を浪費するリスクがあり得る。なぜなら、デマンドアクセスストリームが指定範囲の後の部分に到達するときまでに、以前にプリフェッチされたデータがすでにキャッシュから追い出されている可能性が高く、したがって、もはやプリフェッチから利益を得ていないからである。別の手法は、プリフェッチ要求が範囲プリフェッチ命令への応答として直接発行されないが、範囲指定パラメータ及びストライドを使用して、指定されたアドレス範囲の境界に関する情報を記憶することができ、その後、指定範囲内のアドレスに対するデマンドアクセス要求が検出されると、これを使用して、新たに検出されたアドレスストリームに迅速にラッチし、その範囲内の後続のアドレスの更なるプリフェッチをトリガすることができる。しかしながら、このアプローチは、いかなるソフトウェアプリフェッチ命令も使用しない純粋なハードウェアプリフェッチアプローチよりも良好な性能を依然として提供し得るが、第1のデマンドアクセスがその範囲に到達する時間までに、プリフェッチされたデータを利用するためにデマンドアクセスが最初の部分に間に合うようにその最初の部分からデータをプリフェッチするには遅すぎる場合があるので、デマンドアクセスが所与の指定されたアドレス範囲に到達するのを待つことは、プリフェッチカバレッジが所与の指定されたアドレス範囲の最初の部分に対してあまり有効でないリスクを負う場合がある。
【0037】
したがって、1つの有用な手法は、命令デコーダが範囲プリフェッチ命令をデコードしたことに応答して、プリフェッチ回路が、複数の指定範囲のうちの第1の指定範囲の最初の部分から、少なくとも1つのキャッシュへのデータのプリフェッチをトリガし得ることであり得る。この最初の部分のプリフェッチは、指定範囲内のアドレスに関連付けられた任意のデマンドアクセスが検出されたかどうかとは無関係に、範囲プリフェッチ命令への応答として直接実行され得る。範囲プリフェッチ命令への直接応答として最初の部分からデータをプリフェッチすることによって、これは、プリフェッチカバレッジ及び後続のデマンドアクセスキャッシュヒット率を改善し、従来のハードウェアプリフェッチャに関連するウォームアップペナルティを低減することができる。
【0038】
範囲プリフェッチ命令に応答してプリフェッチされる最初の部分のサイズは、範囲プリフェッチ命令による最初の部分のサイズの明示的な仕様とは無関係に、プリフェッチ回路によってハードウェア内で定義され得る。したがって、ソフトウェアが、範囲プリフェッチ命令に応答して、指定範囲のうちのどれだけを最初の部分として直接プリフェッチすべきかを指定する必要はない。最初の部分のサイズは、ハードウェア設計者によって特定のマイクロアーキテクチャに対して固定されてもよく、又は前述のようにプリフェッチ要求又はデマンドアクセス要求の結果に関するマイクロアーキテクチャ情報に基づいて動的に(実行時に)調整可能であってもよい。これにより、同じコードを実行する異なるマイクロアーキテクチャが、範囲プリフェッチ命令への応答として、どの程度の初期データをプリフェッチするかについて独自の決定を行うことが可能になる。最初の部分のサイズは、提供されるキャッシュレベルの数、キャッシュの異なるレベルにおけるキャッシュ容量のサイズ、メモリにアクセスする際のレイテンシ、メモリシステムに対して行われる他のアクセスの頻度又は量などのパラメータに依存し得る。
【0039】
指定範囲の最初の部分をプリフェッチした後、第1の指定範囲の残りの部分内の所与のアドレスからのデータのプリフェッチは、範囲プリフェッチ命令に対する応答として直接行われなくてもよい。代わりに、プリフェッチ回路は、所与の距離以下だけ所与のアドレスの前方にあるターゲットアドレスを指定するデマンドアクセス要求を、処理回路が発行することを検出したことに応答して、残りの部分内の所与のアドレスからのデータのプリフェッチをトリガし得る。デマンドアクセスが所与のアドレスの所与の距離内のアドレスに到達するまで、所与のアドレスからのデータのプリフェッチを延期することによって、これは、所与のアドレスに対するプリフェッチされたデータが、そのアドレスに対する後続のデマンドアクセス要求が発行されるときに、所与のレベルのキャッシュ内に依然として存在する可能性を高め、キャッシュヒット率を増加させ、性能を改善する。この場合も、所与の距離のサイズはソフトウェアで定義されなくてもよく、範囲プリフェッチ命令による所与の距離の明示的な仕様とは無関係にプリフェッチ回路によってハードウェアで決定することができる。この場合も、所与の距離は、特定のマイクロアーキテクチャ実装に対して設定された固定距離(同じプログラムコードをサポートする他のマイクロアーキテクチャ実装上で設定された所与の距離とは異なる可能性がある)であってもよいし、前述のようにマイクロアーキテクチャ情報に基づいてランタイムに調整可能であってもよい。1つのマイクロアーキテクチャに対して、データを所与のレベルのキャッシュにもたらす際の異なる遅延を考慮するために、所与の距離が別のものよりも大きいことが有用であり得る。
【0040】
前の段落で述べた最初の部分のサイズ及び所与の距離は両方とも、プリフェッチアドレスのストリームがデマンドアドレスのストリームのどれだけ先に発行されるかを支配する前述の前進距離を表すパラメータの例である。
【0041】
範囲プリフェッチ命令がストライドパラメータを使用して複数の範囲を指定するとき、複数の指定範囲のうちの第2、第3、及び更なる範囲のプリフェッチは、異なる方法で制御され得る。例えば、プリフェッチ回路は、デマンドアクセスを監視して、これらのストリームへのタイミングを決定することができる。例えば、所与の指定範囲からのプリフェッチは、デマンドアクセスが前の指定範囲の終わりの所与の距離内に到達したときに開始することができる。
【0042】
また、プリフェッチ回路のいくつかの実装形態は、プリフェッチタイミングを制御するために必ずしも同じ手法をとらなくてもよい。例えば、好ましいプリフェッチタイミングは、特定の閾値よりも大きい範囲と比較して、その閾値よりも小さい範囲に対して異なり得る。ここで説明する特定のプリフェッチタイミング制御の例は一例に過ぎず、他の実装形態が異なる手法を選択し得ることが理解されよう。
【0043】
プリフェッチ回路は、命令デコーダによる範囲プリフェッチ命令のデコードに続いて、第2のアドレス範囲指定パラメータに基づいて、プリフェッチ回路によってプリフェッチされたプリフェッチされたアドレスのストリーム又は処理回路によって発行されたデマンドアクセス要求によって指定されたデマンドアドレスのストリームによってプリフェッチ回路が、所与の指定範囲の終わりに到達したことを識別するとき、所与の指定範囲についてのプリフェッチが停止され得るように構成され得る。これは、単一アドレス指定プリフェッチ命令を使用する典型的なハードウェア又はソフトウェアプリフェッチ方式では不可能であろう。したがって、指定範囲の終わりを超える過剰なプリフェッチを防止することによって、使用される可能性が低い不要なデータでキャッシュを汚染することを回避し、より有用であり得る他のデータのためにキャッシュ容量を保存するのに役立ち、性能を改善する。
【0044】
いくつかの例では、範囲プリフェッチ命令はまた、指定範囲に関連付けられたデータに関するヒントを提供するための1つ以上のプリフェッチヒントパラメータを指定することができ、プリフェッチ回路は、1つ以上のプリフェッチヒントパラメータに応じて、指定されたアドレス範囲から少なくとも1つのキャッシュへのデータのプリフェッチを制御することができる。例えば、プリフェッチヒントパラメータは、プリフェッチを制御するために使用することができる指定範囲内のデータの推定使用量に関するキューを提供する、指定範囲のアドレスを識別する情報以外の任意の情報とすることができる。
【0045】
例えば、1つ以上のプリフェッチヒントパラメータは、以下のうちの任意の1つ以上を含み得る:
・プリフェッチされたデータが、ロード動作の対象となることが予想されるデータであるか、ストア動作の対象となることが予想されるデータであるか、又は命令フェッチ動作の対象となることが予想される命令であるかを示すタイプパラメータ。データがロード又はストア動作の対象となることが予想される場合、これは、データをデータキャッシュにプリフェッチすることをトリガすることができ、プリフェッチデータが命令であることが予想される場合、プリフェッチは命令キャッシュに行うことができる。したがって、(プリフェッチされたデータの受信側である)ターゲットキャッシュは、タイプパラメータに応じて選択され得る。また、データがロード又はストア動作の対象となることが予想されるかどうかの指示は、プリフェッチされたデータが要求されるコヒーレンシ状態を選択するのに有用であり得る。例えば、共有メモリシステムからのデータをキャッシュする複数のキャッシュを有するシステムにおいて、コヒーレンシ方式を使用して、所与のアドレスに対する異なるキャッシュされたコピー間のコヒーレンシを管理することができる。キャッシュされたデータを使用するソフトウェアが、対応するアドレスに関連付けられたデータ値を更新するように、データがストア動作を受けることが予想される場合、他のキャッシュ内の同じアドレスからのデータの他のコピーが無効にされて、ストア動作後に他のキャッシュが古いデータを保持することを回避するように、一意のコヒーレンシ状態でデータのキャッシュされたコピーを取得することが好ましい場合がある。一方、ロード動作のみを受けるキャッシュにフェッチされたデータについては、ロードがデータを上書きすることが予想されないので、同じアドレスからのデータの対応するバージョンが他のキャッシュに依然として存在し得る共有コヒーレンシ状態で、データをキャッシュに入れることが可能であり得る。したがって、プリフェッチ回路が、範囲プリフェッチ命令のプリフェッチヒントパラメータとして提供されるタイプパラメータに基づいて、指定されたアドレス範囲からのデータがプリフェッチされるコヒーレンシ状態を制御することが有用であり得る。
【0046】
・指定範囲に関連するプリフェッチされたデータが範囲プリフェッチ命令の後に、どのくらい早く処理回路によって要求されると推定されるかの指示と、データがプリフェッチされるキャッシュ階層のターゲットレベルと、のうちの少なくとも1つを示すデータ使用タイミングパラメータ。データ使用タイミングパラメータは、推定されたデマンドアクセスに対してプリフェッチ要求が発行される前進距離、及び/又はキャッシュ階層データのどのレベルがプリフェッチされるかに影響を与えるために使用され得る。データ使用タイミングパラメータは、異なる方法で表現され得る。場合によっては、それは単に、データが「すぐに」必要とされ得るか、又は「すぐにという訳ではなく」必要とされ得るかの曖昧な相対的指示であり得る(又は、予想される使用タイミングの3つ以上の定性的レベルを示し得る)が、任意の特定の使用タイミングを定量化する必要はない。場合によっては、プリフェッチ回路が特定の使用タイミングパラメータ値にどのように応答するかは、マイクロアーキテクチャに依存する可能性があり、したがって、ソフトウェアは、指定されたアドレスへのアクセスが必要とされる可能性が高いときの相対タイミングの曖昧な意図を表現するためにデータ使用タイミングパラメータを使用することができるが、異なるマイクロアーキテクチャ実装は、その曖昧な指示に異なる方法で応答することができる。他の実装形態は、例えば、データがプリフェッチされるキャッシュ階層の特定のレベルを指定することによって、データ使用タイミングパラメータをより明示的に指定することができる。
【0047】
プリフェッチされたデータへの第1のデマンドアクセスとプリフェッチされたデータへの更なるデマンドアクセスとの間の推定された間隔の指示、又はプリフェッチされたデータがキャッシュ階層の所与のレベルから置き換えられる場合に追い出されることが好ましいキャッシュ階層の選択されたレベル、のうちの少なくとも1つを示すデータ再利用タイミングパラメータ。データ再利用タイミングパラメータは、キャッシュ内のエントリのキャッシュ置換を制御するために使用され得る。上述したデータ使用タイミングパラメータは、プリフェッチ後のプリフェッチデータに対する第1のデマンドアクセスのタイミングに関するヒントであるのに対して、データ再利用タイミングパラメータは、その第1のデマンドアクセスの後の次のアクセスのタイミングに関するヒントである。データをプリフェッチするとき、データ再利用タイミングパラメータは、キャッシュ内のプリフェッチされたデータに関連付けられたメタデータを設定するために使用され得、これは、別のアドレスがキャッシュに割り振られるときにプリフェッチされたデータを追い出すかどうかを決定する(例えば、すぐに再利用される可能性がより低いと示されたキャッシュエントリが、すぐに再利用される可能性がより高いと示されたキャッシュエントリと比較して追い出しのために好まれ得る)ために、又はプリフェッチされたデータが追い出される場合、どの後続のレベルのキャッシュに、追い出されたデータを割り当てるべきかを決定するために使用され得る。この場合も、データ再利用タイミングパラメータは、第1のデマンドアクセスと更なるデマンドアクセスとの間の予想される間隔の比較的正確な指示(例えば、命令の数又はメモリアクセスの数の近似的な指示)、又はデータを追い出すキャッシュの特定のレベルの指示、あるいはそのデータへの第1のデマンドアクセスの後にデータが「すぐに」必要とされる可能性が高いか、又は「すぐにという訳ではなく」必要とされる可能性が高いかの曖昧な相対的指示(又は予想されるデータ再利用タイミングの3つ以上の定性的レベルの指示)とすることができる。この場合も、プリフェッチ回路又はキャッシュの特定のマイクロアーキテクチャ実装がデータ再利用タイミングパラメータを使用する特定の方法は、実装ごとに異なり得る。
【0048】
・指定範囲内のアドレスへのアクセスのパターン、又は疎アクセスパターンタイプの相対的な密集度/疎度を示すアクセスパターンヒント。このタイプのプリフェッチヒントは、プリフェッチ回路が、指定範囲内の全てのアドレスをプリフェッチすべきか、又はいくつかのアドレスのみをプリフェッチすべきかを決定することを可能にするのに有用であり得る。例えば、アクセスパターンヒントは、所与の指定範囲内の特定の疎アクセスパターンを学習するために、前述の疎アクセスパターン検出回路を訓練する際にリソースを費やす価値があるかどうかを判定するために、プリフェッチ回路によって使用され得る。場合によっては、アクセスパターンヒントは、例えば、アクセスが密(すなわち、全て又はほぼ全てのアドレスがアクセスされると予想される)であるか疎(より少ないアドレスが指定範囲からアクセスされると予想される)であるかを示す単一ビットなど、密集度又は疎度の何らかの相対的指示を単に示すことができる。他の実装形態は、相対的な密集度/疎度の仕様のより細かい粒度を提供し得る。いくつかの例は、特定の疎アクセスパターンタイプを指定し得る。例えば、疎メモリアクセスパターンタイプは、アクセスパターンがストライドされる可能性が高いか、空間的であるか、時間的であるか、ランダムであるかなどを示すことができる。予測されるアクセスタイプに関するそのようなヒントは、疎パターン検出器の訓練を簡略化するのに有用であり得る。
【0049】
・指定されたアドレス範囲からプリフェッチされたデータが1回使用されると予想されるか、複数回使用されると予想されるかの可能性を示す再利用可能性パラメータ。そのような再利用可能性パラメータを使用して、プリフェッチされた、又はデマンドアクセスによってアクセスされた後に、指定されたアドレス範囲からプリフェッチされたデータがどれだけ長くキャッシュ内に保持されるかを制御することができる。例えば、再利用可能性パラメータは、指定されたアドレス範囲へのアクセスのストリームが、それらの範囲内の所与のアドレスへの各アクセスがデータを1回使用し、次いでそのアドレスが再び必要とされない可能性が高い非一時的(ストリーミング)タイプのアクセスであると予想されるかどうか、又はアクセスが、指定範囲内の所与のアドレスからプリフェッチされたデータが2回以上又は特定の回数を超えてアクセスされる可能性が高いアクセスの一時的パターンであるかどうかを示すことができる。したがって、再利用可能性パラメータは、プリフェッチされたデータに関連付けられたいくつかのメタデータのキャッシュへの記憶を制御するためにプリフェッチ回路によって使用されることができ、キャッシュは、プリフェッチされたデータがデマンドアクセスによってアクセスされた後に、追い出しのためにプリフェッチされたデータを優先するかどうかを決定するために使用され得る。
【0050】
・指定範囲からのデータのプリフェッチが抑制されるべきであることを示す非プリフェッチヒントパラメータ。いくつかの例では、プリフェッチ範囲命令はまた、プリフェッチ回路が指定範囲からいかなるデータもプリフェッチすべきでないことを示す非プリフェッチヒントパラメータが提供され得る符号化をサポートし得る。これは、プリフェッチ回路が、指定範囲内のアクセスパターンに関する情報を学習する際に訓練リソースを費やすことを回避することができるので、有用であり得る。これは、プリフェッチの利益がより大きくなり得る他の範囲のアドレスに対してプリフェッチ訓練リソースを保存するのに有用であり得る。
【0051】
範囲プリフェッチ命令の任意の所与の実装形態は、これらのタイプのプリフェッチヒントパラメータの全てをサポートする必要はない。これらのプリフェッチヒントパラメータのうちのいずれか1つ以上がサポートされてもよい(又は、これらのプリフェッチヒントパラメータのいずれもサポートされなくてもよい)。プリフェッチヒントパラメータの符号化は、実装ごとに大きく異なり得る。場合によっては、これらのヒントパラメータの2つ以上の符号化を組み合わせて単一のフィールドにし、そのフィールドで指定された異なるプリフェッチヒントコード値を、プリフェッチされたヒントの組合せの異なるパターンに割り当ててもよい。したがって、命令の完全に別個のパラメータを使用して各プリフェッチヒントパラメータを識別することは必須ではないが、可能である。
【0052】
いくつかの例では、プリフェッチ回路は、1つ以上のプリフェッチヒントパラメータに応じて、範囲プリフェッチ命令によって指定された指定範囲からプリフェッチされたデータに関連付けられたキャッシュ置換ヒント情報又はキャッシュ置換ポリシー情報を設定してもよい。キャッシュは、次いでプリフェッチ回路によって設定されたキャッシュ置換ヒント情報又はキャッシュ置換ポリシー情報に基づいて、キャッシュエントリの置換を制御してもよい。ここで、キャッシュ置換ポリシー情報は、キャッシュエントリの置換を制御するために、例えば、エントリの候補セットのうちのどれが新たに割り当てられたデータで置換されるエントリであるべきかの選択を制御するために、キャッシュによって直接使用される情報であり得る。例えば、キャッシュ置換ポリシー情報は、候補キャッシュエントリのセットのうちのどれが最も最近にアクセスされていないかを決定するための最長時間未使用(LRU)情報であり得るか、又は置換のための所与のキャッシュエントリの優先度の相対レベルを示す優先度方式を指定し得る。一般に、任意の既知のキャッシュ置換ポリシーを使用することができるが、範囲プリフェッチ命令がプリフェッチヒントパラメータを指定する手法では、これらのヒントを使用して、指定範囲からのデータが所与のキャッシュエントリにプリフェッチされるときに、そのエントリに関連付けられたこのキャッシュ置換ポリシー情報を設定することができる。代替的に、プリフェッチヒントパラメータの使用は、特定のキャッシュエントリに関連付けられた置換ポリシー情報の設定に直接影響を与えなくてもよいが、単に、所与のアドレス範囲のアドレスに関連付けられたエントリが追い出しに対して多かれ少なかれ有利になる可能性があるというヒントなど、キャッシュ置換を間接的に制御し得るキャッシュ置換ヒント情報を設定するために使用されてもよい。キャッシュ置換ヒント情報は、キャッシュの所与のエントリが、第1のデマンドアクセスがそのエントリにヒットした後に追い出され得る(又は追い出しのために優先順位付けされたものとしてマークされ得る)ことを示す情報であってもよい。プリフェッチヒントパラメータによってキャッシュ置換を実施することができる多くの方法があるが、一般に、プリフェッチ回路は、プリフェッチ命令の範囲のプリフェッチヒントパラメータを使用してキャッシュ置換に影響を及ぼすことができ、その結果、プリフェッチヒントパラメータを使用するソフトウェアによって示される予想される使用パターンに基づいてキャッシュヒット率をより高く維持することができる可能性が高くなることが理解されよう。
【0053】
データ処理装置の例
図1は、データ処理装置2の例を概略的に示す。この装置は、命令キャッシュ又はメモリからフェッチされたプログラム命令をデコードする命令デコーダ4を含む。デコードされた命令に基づいて、命令デコーダ4は、命令に対応するデータ処理動作を実行するように処理回路6を制御する。処理回路6は、命令のオペランドを提供し、処理された命令の結果を記憶するために使用されるレジスタ8へのアクセスを有する。処理回路6は、異なるクラスのプログラム命令を実行するためのいくつかの実行ユニット10、12を含む。一例として、図1は、算術演算又は論理演算を実行するための算術/論理ユニット(ALU)10と、メモリシステムからレジスタ8にデータをロードするためのロード動作又はレジスタ8からメモリシステムにデータを記憶するためのストア動作を実行するためのロード/ストアユニット12とを含む処理回路6を示す。これらは可能な実行ユニットのいくつかの例に過ぎず、他のタイプの実行ユニットが提供されること、又は同じタイプの複数の実行ユニットが提供されることが可能であることが理解されよう。
【0054】
この例におけるメモリシステムは、命令キャッシュ(簡潔にするために図1には示されていない)、キャッシュ階層内に実装されたいくつかのデータキャッシュ14、16、18、及びメモリ20を含む。この例では、キャッシュ階層は、レベル1データキャッシュ14、レベル2キャッシュ16、及びレベル3キャッシュ18を含む3つのレベルのキャッシュを含む。これらのキャッシュのいくつかはまた、命令のために使用され得る(例えば、レベル2又はレベル3キャッシュは、データ及び命令のために共有され得る)。他の例は、階層内に異なる数のキャッシュを有するか、又は命令キャッシングに対して異なる編成のデータキャッシングを有することができる。
【0055】
命令デコーダ4によってデコードされたロード/ストア命令に応答してロード/ストア動作が実行されるとき、ロード/ストア命令のオペランドを使用して指定された仮想アドレスは、メモリシステムに記憶されたページテーブル構造のページテーブルエントリにおいて指定されたアドレスマッピング情報に基づいて、メモリ管理ユニット(MMU)22によって物理アドレスに変換される。ページテーブル構造からの情報は、MMU22内の変換索引バッファ(TLB)にキャッシュすることができる。
【0056】
ロード/ストア動作のアドレスはキャッシュ内で検索され、キャッシュ14、16、18の所与のレベルにヒットがある場合、データは、データがメモリ20からフェッチされなければならない場合よりも速く利用可能にされ得る。キャッシュ階層のより高いキャッシュ(例えば、レベル1データキャッシュ14)におけるヒットは、メモリ20により近いキャッシュ階層のより低いレベルにおけるヒットよりも速くデータが利用可能にされることを可能にするが、レベル1などのより高いレベルのキャッシュは、より小さい容量を有し、したがって、キャッシュアクセスレイテンシと各レベルにおける容量との間にトレードオフが存在する。
【0057】
ロード/ストアユニット12によって発行されるデータアクセス要求は、実行中のソフトウェアプログラムのロード/ストア命令によって指定されたアドレスに基づいてオンデマンドで発行されるデマンドアクセス要求である。対応するロード/ストア命令が実行される実行ポイントにプログラムが到達するまでデータがキャッシュ14、16、18に取り込まれない場合、データが下位レベルのキャッシュ又はメモリから取り込まれる間に遅延が存在するので、キャッシュミスによって引き起こされる追加のレイテンシが存在する可能性がある。また、デマンドアクセスのための仮想アドレスがTLB24においてミスした場合、MMU22は、仮想アドレスを変換するためのアドレスマッピング情報を見つけるために、メモリに記憶されたページテーブル構造をトラバースするためにページテーブルウォークを実行する必要があり得る。そのようなページテーブルウォークは、デマンドアクセスを処理する際に著しい遅延を引き起こす可能性がある。
【0058】
プリフェッチ回路30は、処理回路6がプリフェッチされたアドレスに対応するデマンドアクセス要求を発行する時間に先立って、キャッシュ14、16、18の所与のレベルにデータをもたらすために設けられる。これは、TLBミス又はキャッシュミスに関連する遅延が、デマンドアクセスのときではなく、プリフェッチを実行するときに遭遇する可能性があることを意味し、したがって、プリフェッチが成功したとき、これは、そうでなければキャッシュ内でミスしたであろうデマンドアクセスを処理するクリティカルタイミングパスを低減する。
【0059】
プリフェッチ回路30は、将来のデマンドアクセスによってどのアドレスが必要とされ得るかを予測するために使用され得るプリフェッチ状態情報32のセットを維持するために様々な情報源を使用することができ、プリフェッチ状態情報32に基づいて、特定のプリフェッチアドレスに対するデータがキャッシュ14、16、18の特定のレベルにもたらされることを要求するプリフェッチ要求34を発行することができる。例えば、プリフェッチアドレスを予測するために使用される情報は、ロード/ストアユニット12によって発行されるデマンドアクセス要求によって指定されるデマンドアドレス36のストリーム、ロード/ストアユニット12によって発行されるデマンドアクセス要求又はプリフェッチ要求34の結果についての情報を示すマイクロアーキテクチャ情報38、並びに命令デコーダ4によってデコードされるプリフェッチ命令から得られるソフトウェア定義ヒント40を含むことができる。デマンドアドレス36は、仮想アドレス又は物理アドレスのいずれかとすることができ、プリフェッチ回路30をいずれかで訓練することが可能である。
【0060】
ソフトウェア対ハードウェアプリフェッチ
ソフトウェアプリフェッチは、キャッシュラインが将来アクセスされる前に、キャッシュラインを前もってキャッシュに入れるために使用される。これにより、実際のデマンドアクセス中にキャッシュフィル及びTLBフィルのレイテンシがクリティカルパスから除去され、それによって性能が向上する。従来のソフトウェアプリフェッチは、一度に1つのキャッシュラインのみをもたらす(ソフトウェアプリフェッチ命令が単一のアドレスのみを指定するため)。代替案は、ハードウェアプリフェッチャに依存して、アクセスのパターンを学習し、同じ利益を達成するデマンドアクセスに先立ってプリフェッチを発行することである。しかしながら、従来のソフトウェアプリフェッチ及びハードウェアプリフェッチの両方は、いくつかの欠点を有する。
【0061】
従来のソフトウェアプリフェッチの欠点:
1.プログラマは、単一アドレスを指定する従来のソフトウェアプリフェッチ命令を追加することが困難であることを知っている。アクセスのパターンはソフトウェアでは明らかではない。加えて、タイムラインを正確にすることは、試行錯誤のプロセスになる。それを完全に動作させることは非常に困難である。
【0062】
2.従来のソフトウェアプリフェッチを有するカーネルは、マイクロアーキテクチャ及びシステムアーキテクチャ特有のものとなる。キャッシュラインのサイズ(プリフェッチされるメモリの基本単位)でさえ、実装間で変化する。それは、別のシステム上で実行されたときに壊れることになる。
【0063】
3.システムがスケーラブルベクトルアーキテクチャをサポートし、命令セットアーキテクチャによってマイクロアーキテクチャ設計者がベクトルレジスタに対して異なるサイズを選択することができ、命令セットアーキテクチャが、同じコードが異なるベクトルサイズを有する異なるマイクロアーキテクチャ上で実行できるように設計されている場合、ベクトル長が未知であるので、ソフトウェアプリフェッチ命令を使用するコードの開発が更に困難になり、したがって、キャッシュライン長に関する保守的な仮定が行われたとしても、一般的な方法で正しいレートでプリフェッチを追加することは不可能である。
【0064】
4.ソフトウェアプリフェッチが、性能を向上させる代わりに実際に性能を損なうことが判明した場合(例えば、プリフェッチ適時性が正しくなかったため、プリフェッチに対する性能利益がなく、プリフェッチが他のデータを追い出し、次いで、追加のキャッシュミスを引き起こしたため)、実行時にこれを修正する方法はなく、コードを書き直す必要がある。
【0065】
5.従来のソフトウェアプリフェッチは、単一のラインをターゲットとする。コードの肥大化、複雑さ、及び精度の間のトレードオフは困難である。例えば、ソフトウェアは、プリフェッチを省略するループを複製することを回避するために、過剰なプリフェッチに終わる可能性がある。
【0066】
従来のハードウェアプリフェッチの欠点:
1.ハードウェアプリフェッチャは、ストリームを訓練し、ストリームにラッチするために、いくつかのデマンドアクセスを行う。ストリームが小さい場合、ハードウェアプリフェッチャは、ストリームを識別し、適時にプリフェッチするのに十分なサンプルを有していない。これはカバレッジの損失につながる。
【0067】
2.ストリーム間にインターリーブされたアクセスを有する並列ストリームが多すぎる場合、ハードウェアプリフェッチャは、ストリームを識別し、ストリームにラッチすることが更に困難であることがわかる。ハードウェアプリフェッチャの訓練ユニットは、ハードウェアバジェットにおいて数十KBを占める可能性があり、多くの電力及びエネルギーを消費する可能性もある。
【0068】
3.ハードウェアプリフェッチャは、アクセスの特定のストリームがいつ終了するかを知らない。したがって、ストリームの終わりを越えてラインをプリフェッチする傾向がある。そのような不正確なプリフェッチは、利用可能な帯域幅を奪う可能性があり、キャッシュ汚染を引き起こす。
【0069】
範囲プリフェッチ命令
図2は、これらの欠点に対処するのを助けることができる範囲プリフェッチ命令を示す。命令デコーダ4及び処理回路6によってサポートされる命令セットアーキテクチャは、第1及び第2のアドレス範囲指定パラメータ50、52並びにストライドパラメータ56を指定する範囲プリフェッチ命令を含んでもよい。この例では、命令は、追加のプリフェッチヒント54及びカウントパラメータ58も指定する。
【0070】
この例では、第1のアドレス範囲指定パラメータ50は、指定されたアドレス範囲の開始を識別する範囲開始アドレス(ベースアドレスとも呼ばれる)を指定する。第2のアドレス範囲指定パラメータ52は、指定範囲のサイズを指定し、したがって、開始アドレスに対する範囲の終了アドレスを暗黙的に識別する。終了アドレスは、指定された値に対応する値を開始アドレスに加えることによって決定することができる。第1及び第2のアドレス範囲指定パラメータを指定する代替方法は、終了アドレスに対して定義されたサイズ又はオフセットパラメータを使用して開始アドレスを定義することであり得る。また、開始/終了アドレスの一方を他方に対して指定するのではなく、開始及び終了アドレスの両方を絶対アドレスとして指定するか、又は範囲境界アドレス以外の別個の基準アドレスに対して指定することも可能である。アドレス範囲のサイズは、任意に選択された2の累乗でないバイト数であるサイズをサポートするパラメータを使用して符号化されてもよく、したがって、サイズは2の累乗のブロックサイズに制限されない。
【0071】
範囲プリフェッチ命令のいくつかの符号化に関して、命令は、アドレスの単一範囲を指定し得る。例えば、これは、ストライドパラメータ56が0などのデフォルト値に設定されるか、又はカウントパラメータ58が0若しくは1などのデフォルト値に設定されるか、又は命令符号化の別の部分が、プリフェッチされる範囲が1つだけであることを示す値を有する場合であり得る。
【0072】
他の符号化の場合、範囲プリフェッチ命令は、指定されたストライドパラメータ56の間隔で分離された複数の範囲を表し、カウントパラメータ58は、いくつの範囲が表されるべきかを示すことができる。これらの代替オプションについては、以下の図6及び図7に関してより詳細に説明する。
【0073】
図2の例では、第1及び第2のアドレス範囲指定パラメータの両方が、範囲プリフェッチ命令によって指定されるレジスタに記憶されるデータとして符号化され、範囲プリフェッチ命令は、第1及び第2のアドレス範囲指定パラメータを記憶するレジスタを識別するためのレジスタ指定子Xn、Xmを含む。しかしながら、他の手法は、アドレス範囲指定パラメータを指定するために即値を使用することができ、例えば、範囲サイズを即値として定義することができる。ストライド値56及びカウント値58は、更なるレジスタ又は即値で指定することもできるが、この例では、これらは、以下で論じる図6で説明するように、範囲サイズ52と同じレジスタで指定される。
【0074】
任意選択で、範囲プリフェッチ命令は、プリフェッチを制御するのに有用であり得る1つ以上の追加のプリフェッチヒントを指定することもできる。例えば、図2に示される範囲プリフェッチ命令は、命令によって参照されるレジスタ内で、又は即値として指定され得るプリフェッチ動作フィールド54を含み、以下のようないくつかのタイプのプリフェッチヒント情報のうちの1つ以上を識別する符号化を有し得る:
・パラメータ50、52によって定義される範囲内のアドレスが、将来のロード動作、ストア動作、又は命令フェッチによって使用されることが予想されるかどうかを識別するロード/ストア/命令タイプ情報-これは、データキャッシュ若しくは命令キャッシュにプリフェッチするかどうかを制御するために、又はプリフェッチされたデータのために設定されたコヒーレンシ状態を制御するために有用であり得る、
・指定範囲(単数又は複数)内のアドレスが、各アドレスからのデータが1回のみ(又は比較的少ない回数)使用される可能性が高い負荷のストリーミングアクセスパターン、又は指定範囲内の所与のアドレスからのデータが2回以上(又は比較的多数回)使用される可能性が高いアクセスの時間パターンに使用される可能性が高いかどうかの指示などの再利用可能性パラメータ、
・データがプリフェッチされるキャッシュ階層のターゲットレベルの指示、又は指定範囲に関連付けられたデータが範囲プリフェッチ命令の後に処理回路によって要求されると推定される時間の相対的指示などのデータ使用タイミングパラメータであり、プリフェッチ動作が発行されるタイミングを制御する、及び/又はプリフェッチデータがキャッシュ階層のどのレベルにプリフェッチされるかを制御するのに有用であり得る、
・プリフェッチされたデータが所与のレベルのキャッシュ(例えば、L1)において置換されるときに追い出されるべきキャッシュの選択されたレベル(例えば、L2又はL3)の指示、又はプリフェッチされたデータのアドレスへの第1のデマンドアクセスの直後に同じアドレスへの更なるデマンドアクセスが発行されると予想される相対指示などの、データ再利用タイミングパラメータ、
・アクセスがストライドされる可能性が高いか、空間的であるか、時間的であるか、又はマルチストライドされる可能性が高いかなどの特定の疎アクセスパターンタイプの、指定範囲内のアドレスへのアクセスのパターンの相対的な密集度/疎度を示すアクセスパターンヒント、
・後続のプログラムコードが、第1及び第2のアドレス範囲指定パラメータ50、52によって定義される指定範囲内のアドレスからのデータを使用する可能性が低いことを示す非プリフェッチヒント情報。
【0075】
範囲プリフェッチ命令の任意の所与の実装形態は、これらのタイプのプリフェッチのうちのいずれか1つ以上を実装することを選択することができ、これらの全てを符号化する必要はない。プリフェッチヒント情報は、プリフェッチ回路30が、指定範囲内のアドレスに対するプリフェッチ要求の発行をどのように制御するかを修正することを可能にするのに有用であり得る。
【0076】
したがって、将来アクセスされるメモリアドレスの1つ以上の範囲をシグナリングする範囲プリフェッチ命令が提案される。範囲プリフェッチ命令が、プリフェッチ回路30を有するマイクロアーキテクチャ上で実行される場合、範囲プリフェッチ命令は、プリフェッチ回路30のハードウェアバックエンドをプログラムすることができ、このハードウェアバックエンドは、現在のアクティビティパターンなどのマイクロアーキテクチャキューを使用し、インストールされた範囲内の進捗を追跡することによって、適時にプリフェッチを発行することを担当する。範囲プリフェッチ命令は、ハードウェアバックエンドが訓練ステージをバイパスし、正確なプリフェッチを直接発行し始めることを可能にする。
【0077】
範囲プリフェッチ命令は、符号化されたアドレス範囲への密又は疎なアクセスを処理することができる。範囲プリフェッチ命令はまた、より複雑なアクセスパターンを処理するためにストライド及びカウントパラメータを符号化する。範囲プリフェッチ命令はまた、マルチストライドパターン、空間パターン、時間パターンなどの符号化アドレス範囲(単数又は複数)内の複雑なアクセスパターンを検出するためにハードウェアに依存することができる。ハードウェアバックエンドは、よりスマートな置換決定を行うために、キャッシュ置換ポリシーにヒントを提供することもできる(例えば、プリフェッチ回路30は、新しいデータが所与のキャッシュ14、16、18に割り当てられる必要があるときにどのキャッシュエントリを置換するかを決定するために使用されるキャッシュエントリに関連付けられたキャッシュ置換情報の設定を制御することができ、例えば、最長時間未使用(LRU)、再参照間隔予測(RRIP)、又は任意の他の既知のキャッシュ置換ポリシーにおいて使用されるキャッシュエントリメタデータを設定する)。
【0078】
アーキテクチャの観点から、範囲プリフェッチ命令は、任意の動作を実行させるために必要とされず、特定のマイクロアーキテクチャプロセッサ実装が、範囲プリフェッチ命令を無視し、それを無動作(NOP)命令として扱うことは許容可能である。例えば、プリフェッチ回路30を有さない、又は範囲プリフェッチ命令から利用可能なヒント40の使用をサポートするプリフェッチ回路を有さないプロセッサ実装は、範囲プリフェッチ命令をNOPとして扱うことができる。
【0079】
しかし、範囲プリフェッチ命令からのヒントを使用することができるプリフェッチ回路30をサポートするマイクロアーキテクチャ実装では、いくつかの利点がある。
【0080】
従来のソフトウェアプリフェッチの欠点に対処する:
1つ以上の範囲のセット全体に対して1つの範囲プリフェッチ命令を提供することができる。この命令は、内部ループの外側に一度配置することができる。ハードウェアバックエンドは、適時にプリフェッチを発行することを担当する。したがって、アプリケーションは、よりマイクロアーキテクチャ及びシステムアーキテクチャに依存しなくなる。関連付けられたバックエンドはまた、範囲プリフェッチが実際に性能に有害であるかどうかを検出することを可能にする。例えば、プリフェッチ回路30は、プリフェッチが性能を損なうことが分かった場合に、特定の範囲についてプリフェッチを選択的にオフにする柔軟性を有する。
【0081】
従来のハードウェアプリフェッチの欠点に対処する:
範囲プリフェッチ命令は、アドレスのストリームの開始アドレス及び範囲に関する正確なヒントを与えるので、範囲プリフェッチ命令及びその単純なハードウェアバックエンドは、はるかに高い精度を達成することができ、従来のハードウェアプリフェッチャのハードウェアオーバーヘッドの一部のみ使用する。
【0082】
プログラム可能性の利点:
以下に説明する図5から分かるように、既存のアプリケーションに範囲プリフェッチ命令を追加することは非常に簡単で洗練されている。したがって、性能上の利点に加えて、プログラミングの容易さが、この命令の主要な利点である。一例として、深さ方向の畳み込みカーネルを用いる1つの使用事例では、エンジニアは、深さ方向の畳み込みカーネルに従来のソフトウェアプリフェッチ命令を追加しようとして1日の半分を要し、結果としてわずかな高速化を達成した。対照的に、範囲プリフェッチ命令を追加することは、約10分かかり、性能改善は、従来のソフトウェアプリフェッチ命令が使用されたときよりもはるかに大きかった。
【0083】
範囲ベースのプリフェッチ制御の例
図3は、プリフェッチ回路30が範囲プリフェッチ命令のパラメータに基づいてプリフェッチをどのように制御し得るかの一例を示す。図3は、単一の範囲、例えば、ストライドパラメータが複数の範囲を符号化するために使用される場合に範囲プリフェッチ命令によって指定される複数の範囲のうちの第1の範囲に対する制御を示す。
【0084】
命令デコーダ4が範囲プリフェッチ命令をデコードすることに応答して、アドレスパラメータ50、52(及び、提供される場合には追加のプリフェッチヒント54)がプリフェッチ回路30に提供され得る。例えば、プリフェッチ回路は、プリフェッチ状態開始アドレス及び終了アドレスを識別する情報をプリフェッチ状態記憶装置32に記録することができる。プリフェッチ命令のデコードに対する応答として、プリフェッチ回路は、範囲の最初の部分内のアドレスに対応するプリフェッチ要求34を発行することができ、最初の部分は、特定のサイズJである。
【0085】
範囲の全体サイズが非常に小さい(例えば、最初の部分に対して定義されたサイズJより小さい)場合、例えば、2つ又は3つのキャッシュラインのみである場合、範囲プリフェッチ命令に対する直接応答として範囲全体をプリフェッチすることができ、その範囲に関するデマンドアクセス要求に応答して後続の追加のプリフェッチを行う必要がない場合がある。
【0086】
しかし、範囲プリフェッチ命令によって指定されたより大きな範囲については、範囲プリフェッチ命令のデコードに応答して範囲全体をプリフェッチすることは効率的でない場合があり、その理由は、範囲内の後のアドレスについてのプリフェッチが役に立たなくなるリスクがあるからである(ロード/ストアユニット12によって発行されたデマンドアクセスが実際に後のアドレスに到達するまでに、プリフェッチされたデータが、キャッシュ内の置換をトリガする可能性がある他のアドレスへのアクセスに応答してキャッシュからすでに追い出されている場合があるため)。したがって、範囲プリフェッチ命令に応答してプリフェッチされる最初の部分は、範囲開始アドレスと範囲終了アドレスとの間の範囲全体をカバーしない場合がある。
【0087】
指定範囲の残りの部分内のアドレスに対して、図3に示されるように、プリフェッチアドレス#Aに対するデータは、プリフェッチ回路が、デマンドアクセスのアドレス36から、デマンドアクセスがあるアドレス(#A-D)に到達したか又はそれを超えたことを検出したときにプリフェッチされてもよく、ここで、Dは、プリフェッチストリームがデマンドアクセスストリームをリードするマージンを制御する前進距離パラメータである。
【0088】
最初の部分のサイズJ及び距離Dは、両方とも、プリフェッチの適時性に影響を及ぼす前進距離パラメータの例である。これらのパラメータは、範囲プリフェッチ命令によって指定される任意の特定のソフトウェア定義パラメータとは無関係に、回路30のプリフェッチハードウェアによって定義することができる。J及びDは、固定されてもよく、又はマイクロアーキテクチャ情報38に基づいて動的に調整可能であってもよく、マイクロアーキテクチャ情報38は、例えば、キャッシュヒット/ミス率、デマンドアクセス頻度、プリフェッチレイテンシ、プリフェッチ成功率、又はプリフェッチ有用性に関する情報を含むことができる。異なるマイクロアーキテクチャプラットフォームは、メモリにアクセスするときに異なるレイテンシを経験するので、前進距離J、Dがソフトウェアではなくハードウェアで制御されることが有用であり、したがって、マイクロアーキテクチャからのキューに応答して、プリフェッチストリームがデマンドアクセスストリームのどれだけ前に発行されるべきかを決定することが有用であり得る。
【0089】
図3は、範囲プリフェッチ命令において定義される範囲情報に基づいてプリフェッチを制御する1つの方法に過ぎず、他の手法も使用され得ることが理解されよう。
【0090】
範囲プリフェッチ命令が複数の範囲を指定する場合、第1の範囲の後のストライドパターンの後続の範囲について、サイズJの最初の部分は、様々なタイミングで、例えば、第1の範囲と同様の範囲プリフェッチ命令に直接応答して、又はデマンドアクセスストリームが前の範囲の終わりから所与の距離内に到達したときにプリフェッチされ得る。後続の範囲の残りの部分におけるアドレスは、図3の第1の範囲について示されたものと同様に、デマンドストリームがそれらのアドレスの距離D内に到達したときにプリフェッチされ得る。
【0091】
プログラミングの容易さを実証するコード例
図4及び図5は、各々が単一のアドレスを指定するソフトウェアプリフェッチ命令の代わりに範囲プリフェッチ命令を使用することのプログラム可能性の利点を示すコード例を示す。この例では、説明を容易にするために、ストライドされたパターンがないと仮定され、したがって、単一の範囲のみが命令の各インスタンスによって符号化される。しかしながら、同様の利点がストライドされた範囲に適用できることが分かるであろう。
【0092】
図4は、予想されるアクセスタイミングに先立ってアドレスをプリフェッチするための従来のソフトウェアプリフェッチ命令PFを含むように、プログラマ又はコンパイラによって修正されたプログラムループの一例を示す。プリフェッチ命令がなければ、ループは次のようになる:
【数1】
【0093】
したがって、ループの各反復は、第1及び第2のバッファからのデータに対して何らかの任意の演算を実行する(処理演算は、特定の演算が意図されておらず、任意の演算であり得ることを示すために「プロセス」とラベル付けされる)。第1のバッファのある要素は、第2のバッファの2つの異なる要素と組み合わされる。プリフェッチ動作を追加することなく、ループは適度にコンパクトであり、書き込みが簡単である。
【0094】
この例でプリフェッチを制御するために単一アドレス指定ソフトウェアプリフェッチ命令が使用される場合、プリフェッチ命令は、プリフェッチ命令によって指定された対応するアドレスを実際に使用する命令よりも特定の距離だけ前に含まれる必要があるので、これはコードをはるかに複雑にする。したがって、処理ループ自体の中に埋め込まれたプリフェッチ命令「PF」は、処理命令自体によってアクセスされる対応するアドレスから特定の距離ADVだけ先のアドレスを指定しなければならない。これは、ADVより小さいiのループカウント値を有するループ反復の最初の部分のデータをプリフェッチするためのソフトウェアプリフェッチ命令をメインプログラムループ内に含めることが不可能であることを意味する。したがって、図4に示されるように、メインループのADV反復の最初の部分において処理されるプリフェッチされたデータでキャッシュを準備するためのプリフェッチ命令を含むように、追加の予備ループが追加される。また、ここでメインループは、ループに含まれるメインデマンドアクセスの前にある距離をプリフェッチするプリフェッチ命令を含むので、このループが必要なメインデータ処理ループ反復回数Nまで単純に実行される場合、プリフェッチ命令は、操作されているデータ構造の終わりを超えて過剰フェッチし、キャッシュリソースを浪費する可能性がある。したがって、図4の例では、メインループは、必要な反復回数Nよりも少ない反復回数(N-ADV)にわたって実行することができ、追加のテールループが追加され、このテールループは、テールループに含まれるプリフェッチ命令なしに、特定の回数の残りの反復に対してデータ処理を実行する。
【0095】
したがって、単一アドレス指定プリフェッチ命令を使用すると、多くの追加のループ制御オーバーヘッドが追加され、これは、単一のループのみを処理する代わりに3つのループがあり、オーバーヘッドを導入するため、図4に示す高レベルコードがハードウェアでサポートされる命令セットにコンパイルされると、ループカウンタiを閾値と比較して、各ループの更なる反復を実行し続けるかどうかを決定し、比較に従ってプログラムフローを制御するために追加の分岐命令及び比較命令が必要になるためである。分岐は誤予測を受ける可能性があるので、これらの余分なループを含めることは性能を損なう可能性がある。代替は、テールループを追い出し、メインループが完全なN回の反復にわたって反復する場合に生じるであろう過剰なプリフェッチを単に受け入れることであり得るが、これは、不必要なプリフェッチを行う際にメモリシステム帯域幅を浪費し得、不必要にプリフェッチされたデータが他のデータを追い出し得、次いで、追加のキャッシュミスを引き起こし得るので、性能を損ない得る。
【0096】
別の問題は、前進距離ADVの好ましい値が、異なるマイクロアーキテクチャプラットフォームに対して異なり得、コードが実行されるときに発生し得るメモリへのアクセスの他のパターンの量に基づいて、同じマイクロアーキテクチャプラットフォーム上でも変化し得ることである。したがって、ソフトウェア開発者又はコンパイラが、ある範囲のマイクロアーキテクチャに適切な方法でその前進距離ADVを設定することは非常に困難である。これにより、図4に示すタイプのコードがプラットフォームに非常に依存するようになり、ソフトウェア開発コストが大幅に増加する可能性がある。
【0097】
対照的に、図5に示すように、範囲プリフェッチ命令を使用することによって、ソフトウェア開発者は、個々のアドレスに対するプリフェッチャの相対的タイミングを考慮する必要がない。代わりに、ソフトウェア開発者は、元の処理ループの前にいくつかの範囲プリフェッチ命令を含むだけである。各範囲プリフェッチ命令は、処理されるデータ構造に対応するアドレスの範囲の開始アドレス及び終了アドレスを定義する第1及び第2のアドレス範囲指定パラメータを指定する。例えば、図5に示すコード例では、1つの範囲プリフェッチ命令は、第1のバッファの開始アドレス及びサイズを指定し、第2の範囲プリフェッチ命令は、第2のバッファの開始アドレス及びサイズを指定する。これは、プリフェッチャ30に有用な情報を提供し、プリフェッチャが第1及び第2のバッファに対応する2つのアドレス範囲の最初の部分においてプリフェッチすることを可能にし、次いで、アドレス範囲内のデータの後続のプリフェッチの適時性が、明示的なソフトウェアプログラミングを必要とせずにハードウェアにおいて制御され得る。これは、図4に示されるような準備及びテールループの必要性を回避し、また、挿入されるプリフェッチ命令の数を大幅に低減し、命令フェッチ及びデコード帯域幅を節約する。
【0098】
ストライドされた範囲符号化
図6は、範囲プリフェッチ命令の命令符号化のより詳細な例を示す。命令符号化は以下を含む:
・範囲開始アドレス50を提供するレジスタを指定する第1のレジスタ識別子フィールドRn、
・範囲サイズパラメータ52(図6では「長さ」として示されている)、ストライドパラメータ56及びカウントパラメータ58を提供するレジスタを指定する第2のレジスタ識別子フィールドRm、及び
・先に説明した追加のプリフェッチヒント54を提供するプリフェッチ動作フィールドRp。プリフェッチ動作フィールドRpは、プリフェッチヒントを提供するレジスタを識別するレジスタ識別子フィールドとして、又はプリフェッチヒントを識別する即値として解釈することができる。
【0099】
フィールドRn、Rm、Rp以外の命令符号化の残りのビットは、この命令が範囲プリフェッチ命令であることを識別するオペコードビットを提供するか、範囲プリフェッチ命令の異なる変形をシグナリングするために使用され得るか、又は他の目的のために再利用され得るかのいずれかである。
【0100】
命令のRnフィールドにおいて識別されるレジスタに記憶されるレジスタデータの符号化が、図6の下部に示される。範囲サイズ(長さ)、ストライド及びカウントパラメータ52、56、58は、全て同じレジスタ内で符号化される。この例では、長さパラメータ及びストライドパラメータは各々22ビットを使用して指定され、カウントは16ビットを使用して指定され、これは、3つの値全てが、Rmフィールドを使用して識別することができる単一の64ビットレジスタ内に収まることができることを意味する。当然ながら、長さ、ストライド及びカウントパラメータの他のサイズも可能である。また、この例では、長さ及びストライド値は、正又は負のいずれかであり得る符号付きの値である。長さ及びストライドを、常に正である符号なし値として定義することも可能である。範囲サイズ及びストライド値は、任意のソフトウェア指定バイト数として符号化され、これは、正確な2の累乗のバイト数に限定されない。
【0101】
図7は、指定されたストライドの間隔で分離された複数のアドレス範囲からのデータのプリフェッチを制御するための、第1及び第2のアドレス範囲指定パラメータ50、52、ストライドパラメータ56、並びにカウントパラメータ58の使用を概略的に示す。範囲開始アドレス50(ベースアドレスを示すためにBとして示す)は、範囲プリフェッチ命令によって表される範囲のグループの第1のものの開始におけるアドレスを識別する。範囲サイズパラメータ52(又は長さL)は、範囲のグループの各々のサイズを示す。したがって、グループ内の第1の範囲の終了アドレスはアドレスB+Lにある。ストライドパラメータSは、グループ内の連続する範囲の開始アドレス間のオフセットを示し、したがって、グループ内の第2の範囲は、アドレスB+SからB+S+Lに広がり、グループ内の第3の範囲は、アドレスB+2SからB+2S+Lに広がり、以下同様である。カウント値Cは、グループ内の最終範囲がアドレスB+(C-1)SからB+(C-1)S+Lに及び得るように、範囲プリフェッチ命令に基づいてプリフェッチが制御されるべき範囲の総数を示す。
【0102】
あるいは、範囲プリフェッチ回路が少なくとも1つの範囲をプリフェッチ制御の対象とするように常に命令することが暗黙的であると考えられる場合(0のカウント値が有用でない場合がある)、カウントCは、範囲の総数から1を引いた値を示すように定義することができ、したがって、この場合、ストリームの終わりはアドレスB+CS+Lにあり、したがって、範囲の総数はC+1であり、最初の範囲は明示的な符号化を必要とせず、したがって、これは、より大きい最大数の範囲を特定のビット数で符号化することを可能にすることができるという事実を説明する。
【0103】
しかしながら、カウントフィールド58がグループ内の第1の範囲を含む範囲Cの総数を符号化する場合、ソフトウェア開発者による使用のためにより直観的であり得る(C=0符号化は、例えば、追加のプリフェッチヒントなどの他の情報を符号化するために再利用され得る)。
【0104】
図8は、このストライドされたアドレス範囲のグループがプリフェッチを制御するのに有用であり得るユースケースを示す。機械学習アルゴリズム(畳み込みニューラルネットワークなど)は、重みの比較的小さいカーネル行列が入力アクティブ化のより大きい行列と畳み込まれる畳み込み演算を伴い得、畳み込み演算において生成される出力行列は、カーネル/アクティブ化位置の異なる組合せについてカーネル重みを入力アクティブ化と乗算する様々な組合せに依存し、論理的に、カーネルは入力行列の異なる位置にわたって効果的に掃引され、畳み込み演算において実行される乗算は、カーネルが行列に対して所与の位置にあるときに対応して位置決めされたカーネル重みとアクティブ化との積を表す。
【0105】
そのような畳み込みは、異なるカーネル位置のためのアクティブ化の様々なセットにおいてロードし、処理結果をストアバックするために、メモリへの多くのロード/ストア動作を必要とし得る。所与のカーネル位置に対してロードされたデータは、行又は列のいくつかの比較的小さい部分(例えば、図8の上部の行列の網掛け部分によって表される部分)に対応することができ、したがって、それらは、一定のストライドの間隔で分離されたいくつかの対象範囲がある図7に示されるものなどのアクセスのパターンに従うことができる。これは、説明を容易にするための畳み込み演算の簡略化であり、実際には、メモリ内のアクティブ化データのレイアウトは、図8に示されるような行列の論理配列に一致しない場合がある(例えば、アクティブ化の複数の層がある場合、所与の層の所与の列又は行に関連付けられた要素は、実際にはメモリ内で隣接しない場合がある)ことが理解されよう。それにもかかわらず、そのような畳み込み演算では、メモリ内で不連続であるが等しいサイズであり、1つの範囲の開始と次の範囲の開始との間に規則的なオフセットを有するいくつかの範囲へのアクセスがあることが一般的である。
【0106】
したがって、図6及び図7に示すようなストライドパラメータの指定をサポートする範囲プリフェッチ命令を提供することによって、プリフェッチ回路30を準備する単一の命令が、純粋なハードウェアプリフェッチ技法が使用された場合よりもはるかに少ない訓練オーバーヘッドで、アドレス空間内に不連続に位置するアドレスのいくつかの範囲の正確なプリフェッチを制御することを可能にし、一方で、各々単一のアドレスを指定するソフトウェアプリフェッチ命令を使用するオプションよりもはるかに容易にプログラムすることができる。
【0107】
プリフェッチ回路30のための例示的なマイクロアーキテクチャオプション
図9図11は、プリフェッチ回路30の可能なマイクロアーキテクチャ実装の様々な例を示す。
【0108】
図9は、プリフェッチ回路が、任意の既知の方式によるプリフェッチ訓練を用いて、デマンドアクセスのアドレス36に従って予測されたアドレスのデータをプリフェッチすることができるハードウェアプリフェッチャ80を備える第1の例を示す。例えば、これは、デマンドアドレスストリーム内のストライド検出(単一のストライド又は複数の異なるストライドによる)に基づくことができる。
【0109】
典型的なハードウェアプリフェッチャと比較して、ハードウェアプリフェッチャ80は、デマンドアクセスのアドレス36の監視に基づく予測状態32の訓練のために実装された既存の状態機械とは別個の専用プリフェッチ状態機械を必要とせずに、範囲プリフェッチ命令からの追加のプリフェッチヒントを使用してその訓練を補足するように修正される。典型的なハードウェアプリフェッチャは、デマンドアクセスのアドレス36を監視し、ストライドシーケンスなどのパターンを検出し、観測されたシーケンスの信頼度を徐々に適合させることができる制御論理をすでに有することができ、信頼度があるレベルに達すると、ハードウェアプリフェッチャ80は、デマンドアドレスストリーム36内で検出されたパターンに従ってプリフェッチアドレスをプリフェッチアドレスキュー82に発行し始め、プリフェッチ要求34をメモリシステムに発行して、キュー82内の指示されたプリフェッチアドレスからデータをプリフェッチすることができる。
【0110】
範囲プリフェッチ命令がサポートされるとき、範囲プリフェッチ命令からの範囲境界及びストライドは、予測状態32を準備して、プリフェッチアドレスの確実に予測されたストリームにより迅速に落ち着く。例えば、範囲プリフェッチ命令からの開始アドレス(又は開始アドレス50とストライドパラメータ56の倍数との和)を使用して、プリフェッチ予測状態32の新しいエントリを初期化して、予測可能なアドレスのストリームがその開始アドレスに続くことを直ちに認識することができるが、標準的なハードウェアプリフェッチ技法では、ハードウェアプリフェッチャが、デマンドアクセスがアドレス空間のその領域に到達したことをデマンドアドレスストリーム36から検出し、信頼できる予測に落ち着くのにいくらか時間がかかる場合がある。
【0111】
別の手法は、プリフェッチが所与の範囲のアドレスに対して実行されるべきであることを識別する範囲プリフェッチ命令に遭遇したときに、プリフェッチ予測状態32内の対応するエントリの信頼性を高めることができ、したがって、範囲プリフェッチ命令を実行せずに同じデマンドアドレスストリーム36に遭遇した場合に通常設定されるよりも高い信頼性を示すことである。
【0112】
同様に、範囲プリフェッチ命令によって識別される範囲の終了アドレスは、プリフェッチ予測状態32のエントリにプログラムすることができ、その結果、プリフェッチストリームが終了アドレスを超えたとき、又はデマンドアドレスストリーム36が指定範囲の終了アドレスを超えて移動したことが観察されたときに、ハードウェアプリフェッチャ80はプリフェッチ要求の生成を中止することができる。
【0113】
図10は、デマンドアドレスストリーム36の監視に基づく従来のハードウェアプリフェッチ技法に従って動作し得るハードウェアプリフェッチャ80に加えて、プリフェッチ回路30が、範囲プリフェッチ命令から受信されたプリフェッチヒント40に応答するために、別個の状態機械を実行する範囲プリフェッチャ90も含む、第2の例を示す。この手法では、範囲プリフェッチャ90は、ハードウェアプリフェッチャ80と並列に動作することができ、ハードウェアプリフェッチャ80及び範囲プリフェッチャ90の両方が、プリフェッチアドレスをプリフェッチアドレスキュー82に提供して、対応するプリフェッチ要求34がメモリシステムに発行されるようにトリガすることができる。
【0114】
範囲プリフェッチャ90は、ハードウェアプリフェッチャによって維持されるプリフェッチ予測状態32とは別個の予測状態92のセットを維持することができるが、範囲プリフェッチ予測状態92は、より単純であり得る。例えば、範囲プリフェッチ予測状態92は、範囲プリフェッチ命令のパラメータ50、52、54、56、58を単に記録することができるが、信頼フィールド又は検出されたアクセスパターンに対する複数の可能な候補を記録するフィールドなど、プリフェッチ予測状態32に含まれる他のフィールドを含む必要がない場合がある。他の例は、別の方法で予測状態92を符号化することができ、例えば、範囲プリフェッチ命令のストライドパラメータを使用して符号化された複数の範囲に、予測状態の別個のエントリを割り当てることができる。
【0115】
図10に示す手法では、範囲プリフェッチ命令が命令デコーダ4によってデコードされるとき、範囲プリフェッチャは、図3に示す方法でプリフェッチを制御することができ、範囲プリフェッチ命令によって符号化された1つ以上の範囲のセットの第1の指定範囲について、サイズJの最初の部分が、範囲プリフェッチ状態テーブル92内の新しいエントリのインストールに対する応答として最初にプリフェッチされ、次に、後続のプリフェッチが、プリフェッチがデマンドアドレス36の観察されたパターンの前のある距離Dのままであることを意味するタイミングで制御される。マイクロアーキテクチャ情報38は、前述したように、最初の部分Jのサイズ及び前進距離Dを設定するために使用することができる。
【0116】
この例における範囲プリフェッチャ90はまた、範囲プリフェッチャ90がプリフェッチを実行している範囲において、ハードウェアプリフェッチャ80がプリフェッチの訓練を実行することを抑制するために、ハードウェアプリフェッチャ80に信号94を提供し得る。図2に記載された非プリフェッチヒントがサポートされる場合、この信号はまた、プリフェッチされる必要が全くないものとしてリーチ範囲プリフェッチ命令によって示される範囲内のプリフェッチを抑制するために使用され得る。
【0117】
したがって、範囲プリフェッチ命令から利用可能なヒントを利用し、それらの範囲内のハードウェアプリフェッチャ80による訓練を抑制することにより、ハードウェアプリフェッチャ80よりも少ない量の予測状態情報でより正確な予測を実行することができる範囲プリフェッチャ90を提供することによって、これは、ソフトウェアプリフェッチ命令によってプリフェッチするのに有用であると明示的に示されていないアドレスの他のパターンを検出するために、ハードウェアプリフェッチャ80内のリソースを保存する。これは、プリフェッチ回路30の回路面積の所与のサイズに対して、範囲プリフェッチャ90によって処理される範囲外の他のアドレスに利用可能な訓練リソースがより多く存在するので、全体的な性能を改善することができ、あるいは、プリフェッチカバレッジの所与の量に対して、同等レベルの性能を維持しながら、ハードウェアプリフェッチャ80及び予測状態ストレージ32のサイズを低減することができることを意味する。したがって、この手法は、性能と回路面積及び電力コストとの間のより良好なバランスを提供することができる。
【0118】
図11は、別の可能なマイクロアーキテクチャ実装を示しており、この例では、範囲プリフェッチャ90がプリフェッチ回路30内に設けられているが、範囲プリフェッチ命令ヒント40によって示される範囲の外側のアクセスパターンを検出するための専用のハードウェアプリフェッチャ80はない。この場合、プリフェッチは、これらの範囲外では全く実行されなくてもよい。この手法は、回路面積に関してはるかに低コストであり得る。この例における範囲プリフェッチャ90は、図10で説明したものと同様に動作することができる。
【0119】
任意選択で、図11に示すように、範囲プリフェッチャ90は、範囲プリフェッチャ90によって処理されている範囲内のアクセスの疎パターンの予測の更なるハードウェア制御訓練を実行するために、疎アクセスパターン検出回路96を含むことができる。これは、ソフトウェアが、アドレスアクセスがありそうな範囲全体(単数又は複数)を示しているが、必ずしも全てのアドレスがアクセスされる訳ではなく、したがって、範囲内の各アドレスからデータをプリフェッチすることが、キャッシュ内の他のデータの置換を引き起こす場合、性能に影響を及ぼす過剰なプリフェッチにつながり得る場合に対処するのに役立ち得る。疎アクセスパターン検出回路96は、検出された疎アクセスパターンに基づいて予測された予測アドレスに対してプリフェッチ要求が生成されることを可能にするために、検出されたアクセスパターンのタイプ及び関連する信頼性のレベルについての情報を表すことができる予測状態32を維持するためにデマンドアドレスシーケンス36を監視するという点で、先の例に示されたハードウェアプリフェッチャ80と同じように機能することができる。しかしながら、図9又は図10に示されるハードウェアプリフェッチャ80と比較して、疎アクセスパターン検出回路96及び対応する予測状態32は、疎アクセスパターン検出回路96によって実行される訓練が、アドレス空間全体ではなく、範囲プリフェッチャ90によって処理されている範囲内のアドレスにのみ適用され、非常に少ない予測状態データが生成され、比較される必要があるので、回路面積及び電力消費に関して非常に低コストであり得る。
【0120】
プリフェッチ命令の範囲から追加のプリフェッチヒント54が利用可能である場合、これは疎アクセスパターン検出に影響を及ぼす可能性がある。例えば、密/疎インジケータは、範囲追跡データ92において追跡される所与の範囲に対して疎アクセスパターン検出回路96を呼び出すかどうかを決定するために使用され得る。対応する範囲プリフェッチ命令が、パターンが密アクセスパターンであることを示している場合、疎アクセスパターン検出回路96を訓練する電力コストは、その範囲に対する疎アクセスパターン検出回路の使用を抑制することによって回避することができ、これはまた、他の範囲に対する訓練のために制限された予測状態記憶装置32を保存する。一方、密/疎インジケータが疎アクセスパターンを指定するとき、疎アクセスパターン検出96を使用して訓練がアクティブ化されてもよく、疎アクセスパターンタイプがプリフェッチヒント54において指定される場合、これは、疎アクセスパターン検出回路96がより迅速に信頼できる予測に落ち着くか、又はどの特定の形態のパターン検出を所与の範囲のアドレスに適用すべきかを決定するのに役立ち得る。
【0121】
同じコードが、図9から図11に示されるプリフェッチャのマイクロアーキテクチャ実装のいずれかにわたって実行することができ、範囲情報50、52及び追加のプリフェッチヒント54を、プリフェッチャがそれらの予測を改善するために使用できる他の多くの方法があり得ることが理解されよう。
【0122】
図9図11のいずれにも示されていないが、プリフェッチ回路のいくつかの例はまた、図1に示される処理回路6のMMU22と同様のいくつかのアドレス変換回路を含んでもよい。MMU22と同様に、プリフェッチ回路のアドレス変換回路は、比較的小さいTLB24を含むことができる。プリフェッチ回路30内に何らかの変換論理を提供することによって、これは、性能にとってより重要であり得るデマンドアドレスの変換のために帯域幅を消費することなく、プリフェッチの目的でアドレスが変換されることを可能にする。プリフェッチ回路30のアドレス変換回路によってどのアドレスが変換されるかは、プリフェッチが仮想アドレスに基づいて訓練されるか物理アドレスに基づいて訓練されるかに依存し得る。訓練が仮想アドレスに基づく場合、変換は、メモリシステムに発行されるプリフェッチ要求のために指定されたプリフェッチアドレスのものであり得る。訓練が物理アドレスに基づく場合、変換は、範囲プリフェッチ命令のオペランドに基づいて指定範囲のアドレスの変換であり得る。
【0123】
代替的に、他の例では、プリフェッチのために必要とされる任意のアドレス変換は、処理回路6に関連付けられたメインMMU22によって処理され得、メインMMU22は、デマンドアクセスのための変換も処理する。
【0124】
例示的方法
図12は、プリフェッチを実行する方法を示すフロー図である。ステップ200において、命令デコーダ4は、第1及び第2のアドレス範囲指定パラメータ50、52及びストライドパラメータ56を指定する範囲プリフェッチ命令をデコードする。ステップ202において、範囲プリフェッチ命令のデコードに応答して、プリフェッチ回路30は、第1及び第2のアドレス範囲指定パラメータ並びにストライドに応じて(及び、範囲プリフェッチ命令によって指定された場合、1つ以上の追加のプリフェッチヒントにも応じて)、1つ以上の指定されたアドレス範囲から少なくとも1つのキャッシュ14、16、18へのデータのプリフェッチを制御する。いくつかの例はまた、プリフェッチを制御するためにカウントパラメータを符号化し得る。
【0125】
図13は、範囲プリフェッチ命令に基づいてプリフェッチを制御する方法をより詳細に示す第2のフロー図である。ステップ210において、命令デコーダ4は、第1及び第2のアドレス範囲指定パラメータ50、52、ストライドパラメータ56、及びカウントパラメータ58(及び任意選択でプリフェッチヒント54)を指定する範囲プリフェッチ命令をデコードする。ステップ211において、プリフェッチ回路30は、範囲プリフェッチ命令によって指定されたいくつの範囲がすでに処理されているかの実行カウントを初期化し、指定範囲のうちの第1の範囲が、処理されるべき現在の指定範囲として扱われる。
【0126】
範囲プリフェッチ命令への応答として、ステップ212において、プリフェッチ回路30は、第1の指定されたアドレス範囲の最初の部分からデータをプリフェッチする。最初の部分のサイズは、プリフェッチ回路30のハードウェアによって定義され、範囲プリフェッチ命令で指定された情報とは無関係であり得る。任意選択で、最初の部分のサイズは、デマンドアクセスの監視及び/又はプリフェッチ要求又はデマンドアクセスの結果に関するマイクロアーキテクチャ情報38に基づいて調整することができるが、いくつかの例では、ソフトウェアによって提供される最初の部分のサイズに関するヒント、又は範囲の最初の部分のプリフェッチを助けるための前の範囲とのリンクを指定する情報を使用して、最初の部分のサイズを決定することもできる(それにもかかわらず、ソフトウェアによって提供されるヒントが利用可能である場合であっても、マイクロアーキテクチャキューが、異なるサイズの最初の部分が性能に関してより良好であると推定されることを示す場合、ハードウェアはソフトウェアによって示される最初の部分のサイズから逸脱する柔軟性を依然として有する)。キャッシュミス率、同じアドレスにヒットする後続のデマンドアクセスがあるために成功したとみなされるプリフェッチ要求の割合、又はプリフェッチ要求又はデマンドアクセス要求を処理するレイテンシに関する情報などのマイクロアーキテクチャキューは、対応するアドレスにプリフェッチ要求を発行するためにデマンドアクセスストリームにどれだけ先行するかを決定するのに有用であり得、したがって、より大きい前進距離が所望される場合、ステップ212でプリフェッチされる最初の部分のサイズを増加させることが有用であり得る。
【0127】
最初の部分をプリフェッチすると、プリフェッチ回路30は、デマンドアクセスのアドレス36を監視する。ステップ214において、デマンドアクセスが、現在の指定範囲の残りの部分内の所与のアドレスより所与の距離以下だけ先にあるターゲットアドレスに到達したことが検出される。この場合も、所与の距離はプリフェッチ回路のハードウェアによって定義される。デマンドアクセスがターゲットアドレスに到達すると、ステップ215において、与えられたアドレスまでのデータのプリフェッチが実行される。この場合も、所与の距離は、デマンドアクセスの監視、及び/又はプリフェッチ要求若しくはデマンドアクセス要求の結果に関するマイクロアーキテクチャ情報に基づいて、調整することができる。
【0128】
ステップ216において、プリフェッチ回路30は、デマンドアクセスが現在の指定範囲の端から所与の距離内にあるかどうかを検出し、いくつの範囲がまだ処理されているかを追跡するためにプリフェッチ回路30によって維持される実行カウント値は、現在の範囲の後にプリフェッチされる少なくとももう1つの指定範囲があることを示す。ステップ216における所定の距離は、ステップ214における所定の距離と同じであってもよく、異なっていてもよい。デマンドアクセスアドレスが現在の範囲の端から所与の距離内にあり、プリフェッチされるべき少なくとももう1つの範囲がある場合、ステップ217において、プリフェッチ回路30は、範囲のストライドされたグループ内の現在の指定範囲の後の次の指定範囲の最初の部分内のアドレスに対するプリフェッチ要求を発行する。ステップ217は、デマンドアクセスが現在の指定範囲の終わりの所与の距離内にまだない場合、又は実行カウントがこれがプリフェッチされるべき最終範囲であることを示す場合、省略される。
【0129】
ステップ218において、プリフェッチ回路30はまた、デマンドアクセスのアドレス36又は発行されたプリフェッチ要求のアドレスが現在の指定範囲の終わりに到達したか、又はそれを超えたかどうかをチェックする。デマンドアドレスストリームもプリフェッチアドレスストリームも指定範囲の終わりに達していない場合、本方法は、デマンドアクセス又はプリフェッチアクセスのいずれかが指定範囲の終わりを超えるまで、ステップ214、216、218をループし続ける。
【0130】
指定範囲の終わりに達すると、ステップ220において、プリフェッチが指定範囲について停止される。
【0131】
ステップ222において、プリフェッチ回路30は、実行カウント値(ストライドされたセット内の不連続範囲のうちのいくつがすでに処理されたかを追跡するためにプリフェッチ回路30内に内部的に維持される)が、不連続範囲のグループのうちのまだ処理されていないものがまだ少なくとも1つ以上あることを示すかどうかをチェックする。プリフェッチすべき範囲が少なくとももう1つある場合、ステップ224で、次の指定範囲が現在の指定範囲になる。したがって、次の範囲の開始/終了アドレスは、以前に現在の範囲として機能していた範囲の開始/終了アドレスに対してストライドパラメータだけオフセットされたアドレスである。いくつの範囲が処理のために残されているかを追跡するために使用される実行カウント値は、いくつの範囲がプリフェッチされるためにまだ残されているかを示すために更新され、次いで、方法はステップ214に戻って、次の範囲についてプリフェッチ要求をいつ発行するかを決定するためにデマンドアクセスを監視し続ける。
【0132】
したがって、ストライド及びカウントパラメータが複数の範囲を定義するために使用される場合、各範囲は、ステップ214から224を通るパスによって対応する方法で処理され、最終的に、ステップ222において、プリフェッチすべき範囲がそれ以上ないと判定されると、ステップ226において、範囲プリフェッチ命令によって表される範囲についてプリフェッチが中止される。
【0133】
図13は、特定の順序で順次実行される特定のステップを示しているが、他の実装形態は、ステップを並べ替え、いくつかのステップを並列に実行することができることが理解されよう。例えば、ステップ214、216、218におけるチェックは、並行して、又は異なる順序で実施することができる。
【0134】
また、図13に示される手法は一例に過ぎず、他の実装形態は、範囲プリフェッチ命令によって提供されるプリフェッチ命令パラメータを異なる方法で使用することができることが理解されよう。
【0135】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配設又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0136】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの正確な実施形態に限定されないこと、及び様々な変更及び修正が、当業者によって、添付の特許請求の範囲によって定義されている本発明の範囲から逸脱することなく、実施形態に行われ得ることが理解されよう。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13-1】
図13-2】
【国際調査報告】