背景 コンピュータと電子チップの開発の歴史において、CPU 速度の向上がメモリ アクセス速度の向上を上回った時期がありました。[ 3 ] CPU とメモリの速度の差により、CPU はしばしばアイドル状態になりました。[ 4 ] CPU は一定時間内に実行できる命令の量が増えましたが、メイン メモリからデータにアクセスするために必要な時間が、プログラムがこの能力を十分に活用することを妨げていました。[ 5 ] この問題により、より高速なプロセッサの可能性を実現するために、アクセス速度の高いメモリ モデルの作成が促されました。[ 6 ]
これにより、1965 年にケンブリッジ大学 のイギリス人コンピュータ科学者モーリス・ウィルクス によって最初に提案されたキャッシュメモリ の概念が生まれました。彼はこのようなメモリモデルを「スレーブメモリ」と呼びました。 [ 7 ] 1970 年頃から 1990 年頃にかけて、アナント・アガルワル 、アラン・ジェイ・スミス 、マーク・D・ヒル 、トーマス・R・プザックらが、より優れたキャッシュメモリ設計について論文や記事を発表しました。当時、最初のキャッシュメモリモデルが実装されましたが、研究者たちがより優れた設計を研究し提案する一方で、より高速なメモリモデルの必要性は続きました。この必要性は、初期のキャッシュモデルがデータアクセスの遅延を改善したものの、コストと技術的な制約から、コンピュータシステムのキャッシュがメインメモリのサイズに近づくことは実現不可能だったという事実から生じました。1990 年以降、第 1 レベル キャッシュのバックアップとして別のキャッシュレベル (第 2 レベル) を追加するなどのアイデアが提案されました。ジャン=ルー・ベール 、ウェンハン・ワン、アンドリュー・W・ウィルソンらがこのモデルについて研究を行いました。いくつかのシミュレーションと実装で2レベルキャッシュモデルの利点が実証された後、マルチレベルキャッシュの概念は、キャッシュメモリの新しい、そして一般的に優れたモデルとして普及しました。2000年以降、マルチレベルキャッシュモデルは広く注目を集め、現在ではIntelのCore i7製品に搭載されている3レベルキャッシュなど、多くのシステムに実装されています。[ 8 ]
マルチレベルキャッシュ 各命令の実行ごとにメインメモリにアクセスすると、クロック速度がデータの検索とフェッチに必要な時間に依存するため、処理が遅くなる場合があります。プロセッサからこのメモリ遅延を隠すために、データキャッシュが使用されます。[ 9 ] プロセッサがデータを必要とするたびに、メインメモリからフェッチされ、キャッシュと呼ばれるより小さなメモリ構造に格納されます。そのデータがさらに必要になった場合は、メインメモリにアクセスする前に、まずキャッシュが検索されます。[ 10 ] この構造は、メインメモリと比較して、データの検索とフェッチにかかる時間の観点からプロセッサに近い位置にあります。[ 11 ] キャッシュを使用する利点は、キャッシュありとなしのメモリ階層の平均アクセス時間(AAT)を計算することで証明できます。[ 12 ]
平均アクセス時間(AAT)キャッシュはサイズが小さいため、キャッシュの検索で目的の情報が得られない場合、頻繁にミスが発生し、メインメモリからデータを取得する必要が生じます。したがって、AATはデータを検索する各構造のミス率の影響を受けます。[ 13 ]
AAT = ヒットタイム + ( ( ミス率 ) × ( ペナルティを逃す ) ) {\displaystyle {\text{AAT}}={\text{ヒットタイム}}+(({\text{ミス率}})\times ({\text{ミスペナルティ}}))} メインメモリのAATは、ヒット時間メインメモリ で表されます。キャッシュのAATは、次のように表すことができます。
ヒット時間(キャッシュ) +(ミス率(キャッシュ) ×ミスペナルティ(キャッシュミス後にメインメモリにアクセスするまでの時間 ))。 キャッシュのヒット時間はメインメモリのヒット時間よりも短いため、メインメモリではなくキャッシュを介してデータにアクセスする場合、データ取得のAATは大幅に低くなります。[ 14 ]
トレードオフ キャッシュを使用することでメモリのレイテンシは改善される可能性があるが、キャッシュの構成や走査方法によっては、データのフェッチにかかる時間の改善が必ずしも必要になるとは限らない。例えば、同じサイズのダイレクトマップキャッシュは、フルアソシアティブキャッシュよりもミス率が高くなる傾向がある。これは、プロセッサをテストするコンピュータのベンチマークや命令のパターンにも左右される。しかし、フルアソシアティブキャッシュを使用すると、毎回キャッシュ全体を検索する必要があるため、消費電力が増加する可能性がある。そのため、キャッシュ設計においては、消費電力(およびそれに伴う発熱)とキャッシュサイズのトレードオフが重要となる。[ 13 ]
進化 最大L3レベルのキャッシュとオンチップL1を備えたメインメモリのキャッシュ階層 キャッシュミスが発生した場合、このような構造を使用する目的は無意味になり、コンピュータは必要なデータを取得するためにメインメモリにアクセスする必要があります。しかし、マルチレベルキャッシュ では、コンピュータがプロセッサに最も近いキャッシュ(レベル1キャッシュまたはL1)をミスした場合、次に近いレベルのキャッシュを検索し、これらの方法が失敗した場合にのみメインメモリにアクセスします。一般的な傾向としては、L1キャッシュを小さくし、プロセッサから1~2 CPUクロックサイクルの距離に保ち、下位レベルのキャッシュのサイズを大きくしてL1よりも多くのデータを格納し、より遠くに配置しますが、ミス率を低くします。これにより、AATが向上します。[ 15 ] キャッシュレベルの数は、コスト、AAT、およびサイズのトレードオフを確認した後、要件に応じて設計できます。[ 16 ] [ 17 ]
メモリシステムを単一チップに収容できる技術スケーリングにより、現代のプロセッサのほとんどは最大で3つまたは4つのキャッシュレベルを備えています。[ 18 ] AATの削減は、コンピュータがL3キャッシュまでのさまざまな構成のAATをチェックするこの例で理解できます。
例 :メインメモリ = 50 ns 、L1 = 1 ns(ミス率 10%)、L2 = 5 ns(ミス率 1%)、L3 = 10 ns(ミス率 0.2%)。
キャッシュなし、AAT = 50 ns L1キャッシュ、AAT = 1 ns + (0.1 × 50 ns) = 6 ns L1-2キャッシュ、AAT = 1 ns + (0.1 × [5 ns + (0.01 × 50 ns)]) = 1.55 ns L1~L3キャッシュ、AAT = 1 ns + (0.1 × [5 ns + (0.01 × [10 ns + (0.002 × 50 ns)])]) = 1.5101 ns
物件 L1を独立したキャッシュ、L2を統合したキャッシュ構成
銀行型と統一型 バンクドキャッシュでは、命令 格納専用のキャッシュとデータ格納専用のキャッシュに分割されます。一方、ユニファイドキャッシュでは、命令とデータの両方が同じキャッシュに格納されます。[ 22 ] 処理中、プロセッサは命令とデータの両方を取得するためにL1キャッシュ(またはプロセッサへの接続に関して最も上位のキャッシュ)にアクセスします。両方の動作を同時に実行する必要があるため、ユニファイドキャッシュでは複数のポートとより多くのアクセス時間が必要になります。複数のポートがあると、追加のハードウェアと配線が必要になり、キャッシュと処理ユニットの間に大きな構造が生じます。[ 23 ] これを回避するために、L1キャッシュはバンクドキャッシュとして構成されることが多く、その結果、ポート数が少なくなり、ハードウェアも少なくなり、一般的にアクセス時間が短くなります。[ 13 ]
現代のプロセッサは分割キャッシュを備えており、マルチレベルキャッシュを備えたシステムでは、下位レベルのキャッシュは統合され、上位レベルは分割される場合がある。[ 1 ] [ 24 ]
インクルージョンポリシー 包括的なキャッシュ管理 上位キャッシュ層に存在するブロックが下位キャッシュ層にも存在できるかどうかは、メモリシステムの包含ポリシー によって決まります。包含ポリシーは、包含、排他的、または非包含非排他的(NINE)のいずれかです。
包括的なポリシーでは、上位レベルキャッシュに存在するすべてのブロックが下位レベルキャッシュにも存在する必要があります。各上位レベルキャッシュコンポーネントは、下位レベルキャッシュコンポーネントのサブセットです。この場合、ブロックが重複するため、メモリが多少無駄になります。しかし、チェックは高速になります。
排他ポリシーでは、キャッシュ階層のすべてのコンポーネントは完全に排他的であるため、上位レベルのキャッシュにある要素は下位レベルのキャッシュコンポーネントには存在しません。これにより、キャッシュメモリを完全に利用できます。ただし、メモリへのアクセスレイテンシが高くなります。[ 25 ]
上記のポリシーを実行するには、一連のルールに従う必要があります。これらのルールがどれも強制されない場合、結果として得られる包含ポリシーは非包含非排他(NINE)と呼ばれます。これは、上位レベルのキャッシュが下位レベルのキャッシュに存在する場合と存在しない場合があることを意味します。[ 21 ]
ポリシーを作成する 変更されたキャッシュブロックがメインメモリ内でどのように更新されるかを定義するポリシーは、ライトスルーとライトバックの2つがあります。
ライトスルーポリシーの場合、キャッシュブロックの値が変更されるたびに、下位レベルのメモリ階層でもさらに変更されます。[ 26 ] このポリシーにより、データは階層全体に書き込まれる際に安全に保存されます。
しかし、ライトバックポリシーの場合、変更されたキャッシュブロックは、キャッシュブロックが追い出されたときにのみ下位階層で更新されます。各キャッシュブロックには「ダーティビット 」が付けられており、キャッシュブロックが変更されるたびに設定されます。[ 27 ] 追い出し中、ダーティビットが設定されたブロックは下位階層に書き込まれます。このポリシーでは、データの最新の変更コピーがキャッシュにのみ保存されるため、データ損失のリスクがあり、そのため、いくつかの修正技術を遵守する必要があります。
書き込み時にバイトがキャッシュブロックに存在しない場合、書き込み割り当てポリシーまたは書き込み割り当てなしポリシーに従って、バイトがキャッシュに取り込まれることがあります。[ 28 ] 書き込み割り当てポリシーでは、書き込みミスが発生した場合、書き込み前にブロックがメインメモリからフェッチされ、キャッシュに配置されます。[ 29 ] 書き込み割り当てなしポリシーでは、ブロックがキャッシュに存在しない場合、ブロックをキャッシュにフェッチせずに下位レベルのメモリ階層に書き込みます。[ 30 ]
これらのポリシーの一般的な組み合わせは、「ライトバック、ライトアロケーション」と「ライトスルー、ライトノーアロケーション」 です。
共有かプライベートか L1がプライベート、L2とL3が共有のキャッシュ構成 プライベートキャッシュはプロセッサ内の特定のコアに割り当てられ、他のコアからはアクセスできません。一部のアーキテクチャでは、各コアが独自のプライベートキャッシュを持ちます。これにより、システムのキャッシュアーキテクチャでブロックが重複するリスクが生じ、容量利用率が低下します。ただし、マルチレイヤーキャッシュアーキテクチャにおけるこの種の設計選択は、データアクセスレイテンシの低減にも役立ちます。[ 28 ] [ 31 ] [ 32 ]
共有キャッシュとは、複数のコアからアクセスできるキャッシュのことです。[ 33 ] 共有されているため、キャッシュ内の各ブロックは一意であり、重複するブロックがないためヒット率が高くなります。ただし、複数のコアが同じキャッシュにアクセスしようとすると、データアクセスの遅延が増加する可能性があります。[ 34 ]
マルチコアプロセッサ では、キャッシュを共有またはプライベートにするかという設計上の選択がプロセッサのパフォーマンスに影響します。[ 35 ] 実際には、上位レベルのキャッシュL1(または場合によってはL2)[ 36 ] [ 37 ] はプライベートとして実装され、下位レベルのキャッシュは共有として実装されます。この設計により、上位レベルのキャッシュへのアクセスレートが高くなり、下位レベルのキャッシュのミス率が低くなります。[ 35 ]
最近の実装モデル Intel Nehalemマイクロアーキテクチャのキャッシュ構成[ 38 ]
Intel Xeon Emerald Rapids (2024)最大64コア:
L1キャッシュ –コアあたり80KB L2キャッシュ –コアあたり2MB L3キャッシュ – コアあたり5MB ( 合計最大320MB )
Intel i5 Raptor Lake-HX (2024)6コア(パフォーマンス|効率):
L1キャッシュ –コアあたり128KB L2 キャッシュ –コアあたり2 MB | 4 ~ 8 MB 半共有 L3キャッシュ – 20~24MB 共有
AMD EPYC 9684X(Zen 4、2023年)96コア:
L1キャッシュ –コアあたり64KB L2キャッシュ –コアあたり1MB L3キャッシュ – 1152MB 共有
Apple M1 Ultra (2022)20コア(「パフォーマンス」コア|「効率」コア:4:1)
L1キャッシュ –コアあたり320| 192KB L2キャッシュ – 52MB (半共有) L3キャッシュ – 96MB 共有
AMD Zen 3 (2022)6~16コア:
L1キャッシュ –コアあたり64KB L2キャッシュ –コアあたり1MB L3キャッシュ – 32~128MB ( 共有)
AMD Zen 2 (2019)L1キャッシュ – コアあたり32KBのデータおよび32KBの命令、8ウェイ L2キャッシュ – コアあたり512KB、8ウェイ L3キャッシュ – 4コアCCXあたり16MBのローカルキャッシュ、チップレットあたり2つのCCX、16ウェイ(非包含)。デスクトップCPUでは最大64MB、サーバーCPUでは最大256MB。
AMD Zen (2017)L1キャッシュ – コアあたり32KBのデータおよび64KBの命令、4ウェイ L2キャッシュ – コアあたり512KB、4ウェイ方式 L3キャッシュ – 4コアCCXあたり4MBのローカルおよびリモート、チップレットあたり2つのCCX、16ウェイ(非包含)。デスクトップCPUでは最大16MB、サーバーCPUでは最大64MB。
Intel Kaby Lake (2016)L1キャッシュ(命令およびデータ) – コアあたり64KB L2キャッシュ – コアあたり256KB L3キャッシュ – 2MB ~8MB 共有[ 37 ]
インテル Broadwell (2014)L1キャッシュ(命令およびデータ) –コアあたり64KB L2キャッシュ – コアあたり256 KK L3キャッシュ – 2MB ~6MBの共有キャッシュ L4キャッシュ – 128 MBのeDRAM(Iris Proモデルのみ)[ 36 ]
IBM POWER7 (2010)L1キャッシュ(命令およびデータ) – 各バンクは64バンク構成、各バンクは2nd+1wrポート 、32KB、8ウェイアソシアティブ、128Bブロック、ライトスルー L2キャッシュ – 256KB、8ウェイ、128Bブロック、ライトバック、L1キャッシュを含む、 アクセスレイテンシ2ns L3キャッシュ – 4MBの8つの領域(合計 32MB)、ローカル領域6ns 、リモート30ns 、各領域8ウェイアソシアティブ、DRAMデータアレイ、SRAMタグアレイ[ 39 ]
参考文献 1 2 Hennessy, John L; Patterson, David A; Asanović, Krste ; Bakos, Jason D; Colwell, Robert P; Bhattacharjee, Abhishek; Conte, Thomas M; Duato, José; Franklin, Diana; Goldberg, David; Jouppi, Norman P; Li, Sheng; Muralimanohar, Naveen; Peterson, Gregory D; Pinkston, Timothy Mark; Ranganathan, Prakash; Wood, David Allen; Young, Clifford; Zaky, Amr (2011). Computer Architecture: a Quantitative Approach (Sixth ed.). Elsevier Science. ISBN 978-0128119051 OCLC 983459758 ↑ 「キャッシュ:レベル調整の必要性」 (PDF ) ↑ ロナルド・D・ミラー、ラース・I・エリクソン、リー・A・フライシャー、2014年。『ミラーの麻酔学電子書籍』エルゼビア・ヘルス・サイエンス、75ページ。ISBN 978-0-323-28011-2 。 ↑ アルバート・Y・ゾマヤ、2006年。『自然着想型および革新的コンピューティングハンドブック:古典モデルと新興技術の統合』。シュプリンガー・サイエンス&ビジネス・メディア。298ページ。ISBN 978-0-387-40532-2 。 ↑ Richard C. Dorf、2018年。『センサー、ナノサイエンス、生物医学工学、および計測機器:センサー、 ナノサイエンス、生物医学工学』CRC Press、p. 4。ISBN 978-1-4200-0316-1 。 ↑ David A. Patterson; John L. Hennessy、2004年。『コンピュータ構成と設計:ハードウェア/ソフトウェアインターフェース、第3版』Elsevier、552ページ。ISBN 978-0-08-050257-1 。 ↑ 「モーリス・ヴィンセント・ウィルクス卿|イギリスのコンピュータ科学者」 。 ブリタニカ百科事典 。 2016年12月11日 取得。 ↑ バークレー、ジョン・L・ヘネシー(スタンフォード大学)、およびデビッド・A・パターソン(カリフォルニア大学)。 「メモリ階層設計 – パート6. Intel Core i7、誤謬、落とし穴」 。EDN 。 2022年10月13日 取得 。 {{cite news}}: CS1 maint: 複数の名前: 著者リスト (リンク)↑ シェーン・クック、2012年。『CUDAプログラミング:GPUによる並列コンピューティングのための開発者ガイド』ニューネス社、107~109ページ。ISBN 978-0-12-415988-4 。 ↑ ブルース・ヘリングスワース、パトリック・ホール、ハワード・アンダーソン、2001年。『高等国家コンピューティング』ラウトレッジ、30-31ページ。ISBN 978-0-7506-5230-8 。 ↑ Reeta Sahoo、Gagan Sahoo。『情報実践』Saraswati House Pvt Ltd. pp. 1–。ISBN 978-93-5199-433-6 。 ↑ Phillip A. Laplante; Seppo J. Ovaska; 2011. Real-Time Systems Design and Analysis: Tools for the Practitioner. John Wiley & Sons. pp. 94–95. ISBN 978-1-118-13659-1 。 1 2 3 ヘネシーとパターソン。 『コンピュータアーキテクチャ:定量的アプローチ 』 。 モーガン・カウフマン 。ISBN 9780123704900 。↑ Cetin Kaya Koc、2008年。『暗号工学』Springer Science & Business Media、pp. 479–480。ISBN 978-0-387-71817-0 。 ↑ David A. Patterson; John L. Hennessy; 2008. Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann. pp. 489–492. ISBN 978-0-08-092281-2 。 ↑ ハーベイ・G・クレイゴン、2000年。『コンピュータ・アーキテクチャと実装』ケンブリッジ大学出版局、95-97ページ。ISBN 978-0-521-65168-4 。 ↑ ベイカー・モハマド、2013年。『マルチコアおよびシステムオンチップ向け組み込みメモリ設計』。シュプリンガー・サイエンス&ビジネス・メディア。11~14ページ。ISBN 978-1-4614-8881-1 。 ↑ Gayde, William. 「CPUはどのように設計され、製造されるか」 . Techspot . 2019年 8月17日 取得 。 ↑ Vojin G. Oklobdzija、2017 年。デジタル設計と製造。 CRCプレス。 p. 4.ISBN 978-0-8493-8604-6 。 ↑ 「メモリ階層」 。 1 2 Solihin, Yan (2016). 並列マルチコアアーキテクチャの基礎 . Chapman and Hall. pp. 第5章: メモリ階層構成の概要. ISBN 9781482211184 。↑ Yan Solihin、2015年。『並列マルチコアアーキテクチャの基礎』CRC Press、150ページ。ISBN 978-1-4822-1119-1 。 ↑ スティーブ・ヒース、2002年。『組み込みシステム設計』エルゼビア、106ページ。ISBN 978-0-08-047756-5 。 ↑ アラン・クレメンツ、2013年。『コンピュータ構成とアーキテクチャ:テーマとバリエーション』。Cengage Learning。588ページ。ISBN 1-285-41542-6 。 ↑ 「排他キャッシュ階層のパフォーマンス評価」 (PDF) 。 2012年8月13日に オリジナル (PDF)からアーカイブ 。 2016年10月19日 に取得。 ↑ David A. Patterson; John L. Hennessy; 2017. Computer Organization and Design RISC-V Edition: The Hardware Software Interface. Elsevier Science. pp. 386–387. ISBN 978-0-12-812276-1 。 ↑ Stefan Goedecker; Adolfy Hoisie; 2001. Performance Optimization of Numerically Intensive Codes. SIAM. p. 11. ISBN 978-0-89871-484-5 。 1 2 Solihin, Yan (2009). 並列コンピュータアーキテクチャの基礎 . Solihin Publishing. pp. 第6章: メモリ階層構成の概要. ISBN 9780984163007 。↑ ハーベイ・G・クレイゴン、1996年。『メモリシステムとパイプラインプロセッサ』。ジョーンズ&バートレット・ラーニング。47ページ。ISBN 978-0-86720-474-2 。 ↑ David A. Patterson; John L. Hennessy; 2007. Computer Organization and Design, Revised Printing, Third Edition: The Hardware/Software Interface. Elsevier. p. 484. ISBN 978-0-08-055033-6 。 ↑ 「共有キャッシュマルチコアシステムのためのソフトウェア技術」 2018年5月24日。 ↑ 「チップマルチプロセッサ向け適応型共有/プライベートNUCAキャッシュパーティショニング方式」 (PDF) 。 2016年10月19日に オリジナル (PDF) からアーカイブされました。 ↑ Akanksha Jain; Calvin Lin; 2019. Cache Replacement Policies. Morgan & Claypool Publishers. p. 45. ISBN 978-1-68173-577-1 。 ↑ David Culler; Jaswinder Pal Singh; Anoop Gupta; 1999. Parallel Computer Architecture: A Hardware/Software Approach. Gulf Professional Publishing. p. 436. ISBN 978-1-55860-343-1 。 1 2 Stephen W. Keckler; Kunle Olukotun; H. Peter Hofstee; 2009. Multicore Processors and Systems. Springer Science & Business Media. p. 182. ISBN 978-1-4419-0263-4 。 1 2 「インテル Broadwell マイクロアーキテクチャ」 。 1 2 「Intel Kaby Lake マイクロアーキテクチャ」 。 ↑ 「NehalemプロセッサとNehalem-EP SMPプラットフォームのアーキテクチャ」 (PDF) 。 2014年8月11日に オリジナル (PDF) からアーカイブされました。 ↑ 「IBM Power7」 。2010年8月21日に オリジナル からアーカイブされました 。