1. 序章

キャッシュは通常、CPUなどの特定のハードウェアコンポーネントのできるだけ近くに戦略的に割り当てられたメモリの小さな部分です。このシナリオでは、キャッシュメモリは高速であることが提案され、CPUによって処理されるデータを提供します。他のプライマリメモリ(レジスタを除く)よりも遅延が少ない。

このチュートリアルでは、キャッシュメモリの概要を説明します。 まず、メモリ階層に特に注意して、コンピュータメモリを一般的に研究します。 次に、キャッシュメモリを詳細に確認し、キャッシュヒットとキャッシュミスの概念を理解します。 最後に、CPUのコンテキストスイッチングが通常キャッシュメモリにどのように影響するかを見ていきます。

2. コンピュータメモリの基本

現在、5レベルの階層を持つピラミッドがコンピュータのメモリを編成しています。 ピラミッドの各レベルは、主に3つのパラメータに関してメモリ特性を変化させます。

  • アクセス時間:メモリデバイスからのデータ要求から必要データの受信までの経過時間
  • ストレージ容量:メモリデバイスが維持できるデータの最大量
  • ビットあたりのコスト:メモリデバイスで使用可能な各ビットに関連する平均金銭的コスト

次の図は、従来のコンピュータのメモリ階層を示しています。

まず、メモリ階層ピラミッドの各レベルを分析するために、プライマリメモリとセカンダリメモリの概念を理解する必要があります。 プライマリメモリの最も関連性のある特性は、CPUがプライマリメモリに直接アクセスすることです。 対照的に、CPUがアクセスするには、セカンダリメモリをプライマリメモリに割り当てる必要があります。 本来、プライマリメモリは揮発性ですが、セカンダリメモリは不揮発性です。 ただし、プライマリおよび不揮発性読み取り専用メモリ(ROM)などの例外があります。

2.1. メモリ階層レベル

ピラミッドの上部には、レジスターがあります。 レジスタはCPU内に含まれているため、ピラミッド内の他のメモリデバイスと比較して最速のアクセス時間を提供します。 これらのレジスタは、CPUのメモリユニットを構成します。 ただし、メモリユニットは、CPUの限られた物理スペースを制御ユニットと算術論理ユニットの両方と共有します。 したがって、これらのユニットは、期待されるパフォーマンスを達成するために、慎重に設計および製造する必要があります。 これらの理由により、レジスタは通常、メモリの最小かつ最も高価な部分を表します。

レジスタの下には、キャッシュメモリがあります。 CPUのメモリユニットの制限により、 キャッシュは、専用のデータバスで接続されたCPUの近く(CPUチップの特定の場所にある場合もあります)に高速メモリを提供します。 一般に、キャッシュはより多くのストレージ容量を持ち、レジスタよりも低速で安価です。 ただし、他のメモリデバイスよりも高速で、高価で、ストレージも少なくて済みます。

階層の第3レベルには、他のプライマリメモリデバイスが含まれます。 これらのデバイスの最も一般的な例は、CPUにオンデマンドデータを提供する揮発性メモリであるランダムアクセスメモリ(RAM)です。 読み取り専用メモリ(ROM)、プログラム可能読み取り専用メモリ(PROM)、および消去可能プログラム可能読み取り専用メモリ(EPROM)は、このレベルのメモリデバイスの他の例です。

第4レベルには、不揮発性フラッシュベースのデバイスを理解できるソリッドステートセカンダリメモリがあります。 ここで有名なメモリデバイスは、ソリッドステートドライブ(SSD)です。 これらのデバイスは、機械的なプロセスを実行せずにデータを読み書きします。したがって、通常、他のセカンダリメモリデバイスよりも高速で、エネルギー経済的で、高価です。

他のセカンダリデバイスは、メモリ階層の最後のレベルを構成します。これらのデバイスの一般的な例は、ハードディスク、光ディスク、および磁気テープです。

3. キャッシュメモリ

歴史的に、メモリの速度はCPUの速度のように進化しません。 しかし、技術の進化に伴い、CPUエンジニアは、チップ内のレジスタ数を増やしたり増やしたりするよりも、処理速度の向上に力を注いできました。 したがって、メモリエンジニアは、CPUのメモリユニットの外部に十分なストレージ容量とかなりのコストを備えた高速メモリを提供するという課題に対処する必要があります。

キャッシュは、CPUに非常に近い高速メモリを提供するための代替手段であり、専用バスを使用してデータを交換します。 このように、メモリエンジニアは、小さな高速メモリ(このシナリオではレジスタとキャッシュ)と大きな低速メモリ(他のプライマリメモリ)を組み合わせたさまざまな手法を使用して、ストレージを備えた高速メモリに近い一般的な速度を実現します。遅いメモリの容量。

次に、キャッシュメモリに関する関連する概念と技術的な詳細を確認します。

3.1. 局所性の原則

大まかに言って、キャッシュは、CPUがまもなく必要とする命令とデータの一部を予測し、他の低速のプライマリメモリデバイスからそれらをロードしようとします。 この予測は、局所性の原則に基づいています。 ローカリティの原則は、CPUが特定の期間にわたって特定のメモリ領域に繰り返しアクセスする傾向を考慮しています。 したがって、このような場合、この原則は時間的および空間的局所性の両方を指します。

  • 時間的局所性 :キャッシュメモリに最近ロードされたデータが短期間に数回再利用されることを前提としています。 したがって、この期間中は、このデータをキャッシュから削除または置換しないでください。
  • 空間的局所性:最近ロードされたデータのアドレスに近いアドレスを持つデータがまもなく使用される可能性が高いという仮定。 したがって、キャッシュメモリはこれらの関連データをできるだけ早くロードする必要があります。

3.2. キャッシュ階層

キャッシュメモリ自体は特定の階層を示します。たとえば、最も一般的なシナリオでは、コンピュータにはL1、L2、およびL3と呼ばれる3つのキャッシュレベルがあります。

  • L1キャッシュ :最小のストレージ容量(通常は16KBから512KB)で最速のキャッシュ。 L1キャッシュメモリは、各CPUのコアの専用バスに接続します。 一部のプロセッサでは、このキャッシュはデータキャッシュと命令キャッシュに分割されます。
  • L2キャッシュ :L1キャッシュよりもアクセス速度がわずかに遅いキャッシュ。 通常のシナリオでは、L2キャッシュは128KBから24MBのストレージ容量を提供します。 このキャッシュは、CPUコアのペア間で共有されるメモリバスに接続します。
  • L3キャッシュ :提示されたものの中で最も遅いアクセス速度でキャッシュします。 通常、このキャッシュのストレージ容量は2MBから32MBまでさまざまで、複数のCPUコアと共有されるメモリバスに接続します。

提示されたキャッシュレベルに加えて、HaswellやBroadwellなどの特定のプロセッサにはL4キャッシュメモリがあります。 このような場合、L4キャッシュはCPUとGPUの間で共有されるメモリバスに接続します。

3.3. キャッシュミスとキャッシュヒット

CPUのコアは、決定されたタスクを処理している間、メモリに数回アクセスします。 これらのアクセスは、CPUに必要な命令とデータの両方を回復します。 CPUは通常、高速メモリから低速メモリまで、前に示した階層に従ってコンピュータメモリにアクセスすることを強調することが重要です。 たとえば、必要なデータがL3キャッシュにある場合、CPUは最初にL1およびL2キャッシュにアクセスできず、最後にL3キャッシュ内のデータを見つけます。 したがって、この小さな例では、2つのキャッシュミス(L1およびL2キャッシュ)とキャッシュヒット(L3キャッシュ)が発生したと言えます。

  • キャッシュミス:特定のデータまたは命令を検索するためにキャッシュが検索されたが、アクセスされたキャッシュメモリでは使用できないイベント。
  • キャッシュヒット:特定のデータまたは命令を検索するためにキャッシュが検索され、アクセスされたキャッシュメモリで 使用可能であるイベント。このシナリオでは、キャッシュは要求されたリソースを返します。

一般的に、ミスとは対照的にヒット数が多いほど、キャッシュメモリのパフォーマンスが向上すると言えます。 数学的には、キャッシュのミス/ヒット率を次のように計算します。

ここで、はそれぞれ、特定の期間におけるキャッシュヒットとキャッシュミスの数です。 は、0から1の範囲であり、1に近いほど、キャッシュのパフォーマンスが向上します。

同一のデータ/情報要求を処理する(ハードウェアに関して)等しいキャッシュは、異なるパフォーマンスを示す可能性があることに注意してください。 この違いは、たとえば、個別のキャッシュ書き込みポリシーの採用が原因で発生します。

3.4. コンテキストスイッチング

マルチタスクコンピュータでは、複数のプロセスがCPU実行時間を共有します。 一般的なシナリオでは、CPUには、コンピューターで実行されているプロセスよりもはるかに少ないコアがあります。 そのため、CPUはこれらのプロセスの実行を間隔を置いてスケジュールします。 したがって、実際には、コンテキストスイッチングは、CPUコアで実行されているプロセスを中断して、新しいプロセスまたは以前に中断されたプロセスを実行することで構成されます。

CPUコアで実行している間、プロセスはおそらく複数のデータと命令を必要とします。これをプロセスワーキングセットと呼びます。最終的に、キャッシュメモリはプロセスのワーキングセットの全体または一部をロードします。 ただし、コンテキストの切り替え後、キャッシュはクリーンであるか、以前に実行されたプロセスのワーキングセットが含まれていることがよくあります。 したがって、コンテキストスイッチングが原因で、通常、CPUコアでのプロセス実行の開始時にいくつかのキャッシュミスが発生します。

最後に、コンテキストスイッチングによるキャッシュミスは、使用されるキャッシュメモリのストレージ容量、その書き込みポリシー、およびプロセスによって課せられるメモリワークロードに応じて、多かれ少なかれ深刻になる可能性があることに注意することが重要です。

4. 結論

この記事では、キャッシュメモリについて学習しました。 まず、コンピュータメモリの基本的な概念を確認しました。 次に、キャッシュメモリを詳細に分析しました。 次に、キャッシュメモリがどのように機能するかとそれらのさまざまなカテゴリについて学びました。 最後に、CPUコアのコンテキスト切り替えがキャッシュのヒットとミスにどのように影響するかについて概説しました。

キャッシュは現在のコンピュータにとって重要なメモリデバイスであると結論付けることができます。 キャッシュは、さまざまな手法と階層構造を使用することにより、コンピューターメモリへの高速かつ効率的なアクセスを可能にし、データまたは命令を待機するプロセスでのCPUのアイドル状態を軽減します。