キャッシュ プリフェッチは、コンピュータ プロセッサが実際に必要になる前に、低速メモリ内の元のストレージから高速ローカル メモリに命令またはデータをフェッチすることによって実行パフォーマンスを向上させる手法です (そのため、「プリフェッチ」という用語が使用されます)。[1] [2]最近のコンピュータ プロセッサのほとんどは、高速なローカルキャッシュ メモリを備えており、プリフェッチされたデータは、必要になるまでそこに保持されます。プリフェッチ操作のソースは通常、メイン メモリです。その設計上、キャッシュ メモリへのアクセスは通常、メインメモリへのアクセスよりもはるかに高速であるため、データをプリフェッチしてからキャッシュからアクセスする方が、通常、メイン メモリから直接アクセスするよりも桁違いに高速です。プリフェッチは、非ブロッキングキャッシュ制御命令を使用して実行できます。
データキャッシュプリフェッチと命令キャッシュプリフェッチ
キャッシュ プリフェッチでは、データまたは命令をキャッシュにフェッチできます。
- データ プリフェッチは、必要になる前にデータを取得します。データ アクセス パターンは命令パターンよりも規則性が低いため、正確なデータ プリフェッチは通常、命令プリフェッチよりも困難です。
- 命令プリフェッチは、命令を実行する必要がある前に命令をフェッチします。何らかの形の命令プリフェッチを使用した最初の主流のマイクロプロセッサは、Intel 8086 (6 バイト) とMotorola 68000 (4 バイト) でした。近年では、すべての高性能プロセッサがプリフェッチ技術を使用しています。
ハードウェア キャッシュ プリフェッチとソフトウェア キャッシュ プリフェッチ
キャッシュプリフェッチはハードウェアまたはソフトウェアによって実行できます。[3]
- ハードウェアベースのプリフェッチは、通常、プロセッサ内に専用のハードウェアメカニズムを備え、実行中のプログラムによって要求されている命令またはデータのストリームを監視し、このストリームに基づいてプログラムに必要な次のいくつかの要素を認識し、プロセッサのキャッシュにプリフェッチすることによって実現されます。[4]
- ソフトウェアベースのプリフェッチは通常、コンパイラがコードを分析し、コンパイル中にプログラムに追加の「プリフェッチ」命令を挿入することによって実現されます。[5]
ハードウェアプリフェッチの方法
ストリームバッファ
- ストリームバッファは、アラン・ジェイ・スミスが提案した「1ブロック先読み(OBL)方式」の概念に基づいて開発されました。[1]
- ストリームバッファは、現在使用されているハードウェア ベースのプリフェッチ手法の中で最も一般的なものの 1 つです。この手法は、もともと1990 年にNorman Jouppiによって提案され[6]、それ以来この手法のさまざまなバリエーションが開発されてきました。[7] [8] [9]基本的な考え方は、キャッシュ ミスアドレス (および後続のアドレス) が、深さ の別のバッファにフェッチされるというものです。このバッファはストリーム バッファと呼ばれ、キャッシュとは別のものです。プロセッサは、プリフェッチされたブロックに関連付けられたアドレスが、プロセッサで実行されているプログラムによって生成された要求されたアドレスと一致する場合、ストリーム バッファからデータ/命令を消費します。次の図は、この設定を示しています。

- プリフェッチ メカニズムがメモリ ブロック (たとえば A) のミスを検出すると、ストリームを割り当てて、ミスしたブロック以降の連続ブロックのプリフェッチを開始します。ストリーム バッファーが 4 つのブロックを保持できる場合、プロセッサは A+1、A+2、A+3、A+4 をプリフェッチし、割り当てられたストリーム バッファーに保持します。プロセッサが次に A+1 を消費すると、ストリーム バッファーからプロセッサのキャッシュに「上」に移動されます。ストリーム バッファーの最初のエントリは A+2 になり、以下同様に続きます。連続ブロックをプリフェッチするこのパターンは、シーケンシャル プリフェッチと呼ばれます。これは主に、連続する場所をプリフェッチする場合に使用されます。たとえば、命令をプリフェッチする場合に使用されます。
- このメカニズムは、複数の「ストリームバッファ」を追加することで拡張できます。各ストリームバッファは、個別のプリフェッチストリームを維持します。[10]新しいミスごとに、新しいストリームバッファが割り当てられ、上記と同様に動作します。
- ストリームバッファの理想的な深さは、さまざまなベンチマーク[6]に対する実験の対象であり、関連するマイクロアーキテクチャの残りの部分に依存します。[11]
ストライドプリフェッチ
このタイプのプリフェッチは、メモリ アクセスのアドレス間の差分を監視し、その中のパターンを探します。
規則的な歩幅
このパターンでは、連続したメモリアクセスは、アドレスが離れたブロックに対して行われます。[3] [12]この場合、プリフェッチャーはを計算し、それを使用してプリフェッチするメモリアドレスを計算します。例:が4の場合、プリフェッチされるアドレスはA+4になります。
不規則な空間移動
この場合、連続するメモリアクセスのアドレス間のデルタは可変ですが、それでもパターンに従います。一部のプリフェッチャー設計[9] [13] [14]では、この特性を利用して将来のアクセスを予測し、プリフェッチします。
不規則な時間的プリフェッチ
このクラスのプリフェッチャーは、時間の経過とともに繰り返されるメモリアクセスストリームを探します。[15] [16]たとえば、このメモリアクセスストリームでは、N、A、B、C、E、G、H、A、B、C、I、J、K、A、B、C、L、M、N、O、A、B、C、... ストリーム A、B、C が時間の経過とともに繰り返されます。他の設計バリエーションでは、より効率的でパフォーマンスの高い実装を提供しようとしています。[17] [18]
協調プリフェッチ
コンピュータアプリケーションは、さまざまなアクセスパターンを生成します。これらのアプリケーションを実行するために使用されるプロセッサとメモリサブシステムのアーキテクチャは、それらが生成するメモリアクセスパターンをさらに明確にします。したがって、プリフェッチスキームの有効性と効率は、多くの場合、アプリケーションとそれを実行するために使用されるアーキテクチャに依存します。[19]最近の研究[20] [21]は、プリフェッチの範囲と精度を向上させるために、複数のプリフェッチスキームを相乗的に使用する協調メカニズムの構築に焦点を当てています。
ソフトウェアプリフェッチの方法
コンパイラによるプリフェッチ
コンパイラによるプリフェッチは、反復回数の多いループ内で広く使用されています。この手法では、コンパイラは将来のキャッシュ ミスを予測し、ミス ペナルティと命令の実行時間に基づいてプリフェッチ命令を挿入します。
これらのプリフェッチは非ブロッキング メモリ操作です。つまり、これらのメモリ アクセスは実際のメモリ アクセスを妨げません。プロセッサの状態を変更したり、ページ フォールトを引き起こしたりすることはありません。
ソフトウェアプリフェッチの主な利点の1つは、強制的なキャッシュミスの数を減らすことです。[3]
次の例は、キャッシュ パフォーマンスを向上させるためにコードにプリフェッチ命令を追加する方法を示しています。
以下に示す for ループを考えてみましょう。
( int i = 0 ; i < 1024 ; i ++ ) {配列1 [ i ] = 2 *配列1 [ i ]; }
各反復で、配列「array1」の i番目の要素がアクセスされます。したがって、システムは、次に示すように「プリフェッチ」命令を挿入することで、将来の反復でアクセスされる要素をプリフェッチできます。
for ( int i = 0 ; i < 1024 ; i ++ ) {プリフェッチ( array1 [ i + k ] ); array1 [ i ] = 2 * array1 [ i ] ; }
ここで、プリフェッチ ストライドは、キャッシュ ミス ペナルティとforループの 1 回の反復の実行にかかる時間という 2 つの要素によって決まります。たとえば、ループの 1 回の反復の実行に 7 サイクルかかり、キャッシュ ミス ペナルティが 49 サイクルである場合、システムは 7 つの要素を先にプリフェッチする必要があります。最初の反復では、i は 0 になるため、システムは 7 番目の要素をプリフェッチします。この配置では、最初の 7 回のアクセス (i=0->6) は依然としてミスになります (array1 の各要素が独自の個別のキャッシュ ラインにあるという単純化された仮定の下で)。
ハードウェアとソフトウェアのプリフェッチの比較
- ソフトウェアプリフェッチにはプログラマーやコンパイラーの介入が必要ですが、ハードウェアプリフェッチには特別なハードウェアメカニズムが必要です。[3]
- ソフトウェアプリフェッチは、プログラマがプリフェッチ命令を手動でコーディングする必要があるため、定期的な配列アクセスがあるループでのみうまく機能しますが、ハードウェアプリフェッチャーは実行時のプログラムの動作に基づいて動的に動作します。[3]
- ハードウェアプリフェッチはソフトウェアプリフェッチに比べてCPUオーバーヘッドが少ない。[22]しかし、ソフトウェアプリフェッチはハードウェアプリフェッチの特定の制約を緩和することができ、パフォーマンスの向上につながる。[23]
キャッシュプリフェッチのメトリクス
キャッシュプリフェッチを判断するための3つの主な指標がある[3]
カバレッジ
カバレッジとは、プリフェッチによって排除されるミスの総数の割合です。
、
どこ、
正確さ
精度は、有効であったプリフェッチの合計の割合、つまり、プログラムによって実際に参照されたプリフェッチされたメモリ アドレスの数と実行されたプリフェッチの合計の比率です。
完全な精度があればミスがないように見えるかもしれませんが、そうではありません。プリフェッチされたブロックがキャッシュに直接配置されると、プリフェッチ自体が新しいミスを引き起こす可能性があります。これらは、プリフェッチを行わない場合に観測されるミスの総数のごく一部かもしれませんが、ミスの数はゼロではありません。
適時性
適時性の定性的な定義は、ブロックが実際に参照されるタイミングと比較して、どれだけ早くプリフェッチされるかということです。適時性をさらに説明する例を次に示します。
各反復の実行に 3 サイクルかかり、「プリフェッチ」操作に 12 サイクルかかる for ループについて考えてみましょう。これは、プリフェッチされたデータを有効にするには、システムが その使用前にプリフェッチ反復を開始して適時性を維持する必要があることを意味します。
参照
参考文献
- ^ ab Smith, Alan Jay (1982-09-01). 「キャッシュメモリ」. ACM Comput. Surv . 14 (3): 473–530. doi :10.1145/356887.356892. ISSN 0360-0300. S2CID 6023466.
- ^ Li, Chunlin; Song, Mingyang; Du, Shaofeng; Wang, Xiaohai; Zhang, Min; Luo, Youlong (2020-09-01). 「エッジコンピューティング環境における適応型優先度ベースのキャッシュ置換と予測ベースのキャッシュプリフェッチ」。Journal of Network and Computer Applications。165 : 102715。doi :10.1016/ j.jnca.2020.102715。S2CID 219506427 。
- ^ abcdef Solihin, Yan (2016).並列マルチコアアーキテクチャの基礎フロリダ州ボカラトン: CRC Press, Taylor & Francis Group. p. 163. ISBN 978-1482211184。
- ^ Baer, Jean-Loup; Chen, Tien-Fu (1991-01-01).データアクセスペナルティを削減する効果的なオンチッププリロード方式。1991 ACM/IEEE スーパーコンピューティング会議。アルバカーキ、ニューメキシコ州、米国: Association for Computing Machinery。pp. 176–186。CiteSeerX 10.1.1.642.703。doi : 10.1145 / 125826.125932。ISBN 978-0897914598。
- ^ Kennedy、Porterfield、Allan (1989-01-01)。スーパーコンピュータ アプリケーションのキャッシュ パフォーマンスを改善するためのソフトウェア メソッド(論文)。ライス大学。hdl :1911/19069。
{{cite thesis}}: CS1 maint: multiple names: authors list (link) - ^ abc Jouppi, Norman P. (1990). 「小さな完全連想キャッシュとプリフェッチ バッファの追加によるダイレクト マップ キャッシュのパフォーマンスの向上」。第 17回コンピュータ アーキテクチャに関する国際シンポジウム - ISCA 1990 の議事録。第 17 回コンピュータ アーキテクチャに関する国際シンポジウム - ISCA 1990。ニューヨーク、ニューヨーク、米国: Association for Computing Machinery Press。pp. 364–373。CiteSeerX 10.1.1.37.6114。doi : 10.1145 / 325164.325162。ISBN 0-89791-366-3。
- ^ Chen, Tien-Fu; Baer, Jean-Loup (1995-05-01). 「高性能プロセッサ向けの効果的なハードウェアベースのデータプリフェッチ」. IEEE Transactions on Computers . 44 (5): 609–623. doi :10.1109/12.381947. ISSN 0018-9340. S2CID 1450745.
- ^ Palacharla, S.; Kessler, RE (1994-01-01).二次キャッシュの代替としてのストリーム バッファの評価. 21st Annual International Symposium on Computer Architecture. シカゴ、イリノイ州、米国: IEEE Computer Society Press. pp. 24–33. CiteSeerX 10.1.1.92.3031 . doi :10.1109/ISCA.1994.288164. ISBN 978-0818655104。
- ^ ab Grannaes, Marius; Jahre, Magnus; Natvig, Lasse (2011). 「デルタ相関予測テーブルを使用したストレージ効率の高いハードウェアプリフェッチ」。Journal of Instruction-Level Parallelism (13): 1–16. CiteSeerX 10.1.1.229.3483。
- ^ 石井 康雄; 稲葉 メアリー; 平木 啓 (2009-06-08)。「データ キャッシュ プリフェッチのアクセス マップ パターン マッチング」。第23 回国際スーパーコンピューティング会議の議事録。ICS 2009。ニューヨーク、ニューヨーク、米国: Association for Computing Machinery。pp. 499–500。doi : 10.1145 /1542275.1542349。ISBN 978-1-60558-498-0. S2CID 37841036。
- ^ Srinath, Santhosh; Mutlu, Onur; Kim, Hyesoon ; Patt, Yale N. (2007 年 2 月)。フィードバック指向プリフェッチ: ハードウェア プリフェッチャーのパフォーマンスと帯域幅効率の向上。2007 IEEE第13 回高性能コンピュータ アーキテクチャ国際シンポジウム。pp. 63–74。doi :10.1109/ HPCA.2007.346185。ISBN 978-1-4244-0804-7. S2CID 6909725。
- ^ Kondguli, Sushant; Huang, Michael (2017 年 11 月)。T2: 高精度でエネルギー効率に優れたストライド プリフェッチャー。2017 IEEE 国際コンピュータ デザイン会議 (ICCD)。pp. 373–376。doi :10.1109/ ICCD.2017.64。ISBN 978-1-5386-2254-4. S2CID 11055312。
- ^ Shevgoor, Manjunath; Koladiya, Sahil; Balasubramonian, Rajeev; Wilkerson, Chris; Pugsley, Seth H.; Chishti, Zeshan (2015 年 12 月)。複雑なアドレス パターンを効率的にプリフェッチする。2015 年 48 回 IEEE/ACM 国際マイクロアーキテクチャ シンポジウム (MICRO)。pp. 141–152。doi : 10.1145 /2830772.2830793。ISBN 9781450340342. S2CID 15294463。
- ^ Kim, Jinchun; Pugsley, Seth H.; Gratz, Paul V.; Reddy, AL Narasimha; Wilkerson, Chris; Chishti, Zeshan (2016 年 10 月)。パス信頼度に基づく先読みプリフェッチ。2016 年 49 回 IEEE/ACM 国際マイクロアーキテクチャシンポジウム (MICRO)。pp. 1–12。doi : 10.1109 / MICRO.2016.7783763。ISBN 978-1-5090-3508-3. S2CID 1097472。
- ^ Joseph, Doug; Grunwald, Dirk (1997-05-01). 「マルコフ予測子を使用したプリフェッチ」。第 24 回コンピュータ アーキテクチャ国際シンポジウム議事録。ISCA 1997。ISCA 1997。ニューヨーク、ニューヨーク、米国: Association for Computing Machinery。pp. 252–263。doi : 10.1145 /264107.264207。ISBN 978-0-89791-901-2. S2CID 434419。
- ^ Collins, J.; Sair, S.; Calder, B.; Tullsen, DM (2002 年 11 月)。ポインタ キャッシュによるプリフェッチ支援。第 35 回 IEEE/ACM 国際マイクロアーキテクチャ シンポジウム、2002 年。(MICRO-35)。議事録。pp. 62–73。doi : 10.1109/ MICRO.2002.1176239。ISBN 0-7695-1859-1. S2CID 5608519。
- ^ Jain, Akanksha; Lin, Calvin (2013-12-07). 「相関プリフェッチの改善のための不規則なメモリアクセスの線形化」。第46 回 IEEE/ACM 国際マイクロアーキテクチャシンポジウムの議事録。MICRO -46。ニューヨーク、ニューヨーク、米国: Association for Computing Machinery。pp. 247–259。doi :10.1145/2540708.2540730。ISBN 978-1-4503-2638-4.S2CID 196831 。
- ^ 「テンポラル プリフェッチャーの実用化: MISB プリフェッチャー – 研究記事 – Arm 研究 – Arm コミュニティ」。community.arm.com。2019年6 月 24 日。2022年 3 月 16 日閲覧。
- ^ Kim, Jinchun; Teran, Elvira; Gratz, Paul V.; Jiménez, Daniel A.; Pugsley, Seth H.; Wilkerson, Chris (2017-05-12). 「プログラムカウンタの削除: プロセッサキャッシュ階層におけるプログラム動作の再構築」ACM SIGPLAN Notices . 52 (4): 737–749. doi : 10.1145/3093336.3037701 . ISSN 0362-1340.
- ^ Kondguli, Sushant; Huang, Michael (2018-06-02). 「分業: プリフェッチへのより効果的なアプローチ」。第45 回国際コンピュータ アーキテクチャ シンポジウムの議事録。ISCA '18。カリフォルニア州ロサンゼルス: IEEE プレス。pp. 83–95。doi : 10.1109/ISCA.2018.00018。ISBN 978-1-5386-5984-7. S2CID 50777324。
- ^ Pakalapati, Samuel; Panda, Biswabandan (2020 年 5 月)。命令ポインターの花束: 命令ポインター分類子ベースの空間ハードウェア プリフェッチ。2020 ACM/IEEE 第 47 回国際コンピュータ アーキテクチャ シンポジウム (ISCA)。pp. 118–131。doi : 10.1109 / ISCA45697.2020.00021。ISBN 978-1-7281-4661-4. S2CID 218683672。
- ^ Callahan, David; Kennedy, Ken; Porterfield, Allan (1991-01-01).ソフトウェア プリフェッチ. プログラミング言語とオペレーティング システムのアーキテクチャ サポートに関する第 4 回国際会議. カリフォルニア州サンタクララ: 計算機協会. pp. 40–52. doi :10.1145/106972.106979. ISBN 978-0897913805。
- ^ Lee, Jaekyu、Kim, Hyesoon、Vuduc, Richard (2012)、「プリフェッチが機能する場合、機能しない場合、およびその理由」(PDF)、ACM Trans. Archit. Code Optim.、9 : 1–29、doi :10.1145/2133382.2133384
{{citation}}: CS1 maint: multiple names: authors list (link)
