プロセッサの仕様を見ると、目立つのはキャッシュメモリです。キャッシュメモリは、すべてのCPUだけでなく、すべてのGPUにも搭載されています。 この記事では、キャッシュメモリがプレーンでアクセス可能な言語であるかを説明し、このタイプのメモリがPCで何のためにあるかを理解できるようにします。
キャッシュメモリは最初に インテル 80486ですが、その起源は、キャッシュメモリのアイデアが初めて実装されたIBM S / 360にまでさかのぼります。 今日は CPU, GPU およびメモリを備えた他のプロセッサでは、それはすべてのプロセッサの不可欠な部分になっています。
なぜキャッシュが必要なのですか?
キャッシュメモリが必要なのは、 RAM メモリはCPUが十分な速度で命令を実行するには遅すぎるため、これ以上加速することはできません。 ソリューション? 最新のデータと命令にズームインできるように、プロセッサに内部メモリを追加します。
問題は、これを実行すると、プログラム自体に実行が強制され、CPUサイクルが消費されるため、非常に複雑になることです。 ソリューション? 現在実行されているものに最も近いデータと命令をコピーするメカニズムでメモリを作成します。
キャッシュはプロセッサ内にあるため、CPUがキャッシュ内のデータを検出すると、RAMに自然にアクセスできる場合よりもはるかに高速に実行されます。
キャッシュはどのように機能しますか?
まず、キャッシュはRAMメモリの一部ではなく、そのように機能しないことを覚えておく必要があります。さらに、プログラムが必要なときに必要に応じてメモリを占有して解放できるRAMのように制御することはできません。 。 理由? キャッシュはRAMとは完全に独立して機能します。
キャッシュの役割は、データをメモリからプロセッサに移動することです。 プログラムの通常のことは、コードが順番に実行されることです。つまり、現在の命令が行1000にある場合、ジャンプ命令でない限り、次の命令は1001になります。 キャッシュのアイデア? さて、データと命令の一部をプロセッサの内部メモリに転送します。
CPUまたはGPUがデータまたは命令を探すとき、最初に行うことは、プロセッサに最も近いキャッシュを調べることです。したがって、期待されるデータに達するまで増加するレベルが最も低いキャッシュを調べます。 アイデアは、メモリにアクセスする必要がないということです。
CPUとGPUのキャッシュレベル
XNUMXつ以上のコアがあるマルチコアシステムでは、それらすべてが同じRAMメモリにうまくアクセスし、メモリ用の単一のインターフェイスと、それにアクセスするために戦う複数のプロセッサがあることがわかります。 この時点で、追加のキャッシュレベルを作成する必要があります。このキャッシュレベルは、メモリコントローラーと通信し、これはより高いキャッシュレベルと通信します。
通常、マルチコアCPUには通常2つのレベルのキャッシュがありますが、一部の設計では、共有LXNUMXキャッシュを持つ複数のCPUのグループに基づくクラスターですが、他のクラスターとスペースを共有するため、第XNUMXレベルのキャッシュ。
一般的ではありませんが、レベル3のキャッシュは、メモリインターフェイスがボトルネックとして十分に大きくなり、階層にレベルを追加するとパフォーマンスが向上するとすぐに表示されます。
メモリ階層
メモリ階層のルールは非常に明確です。プロセッサレジスタから始まり、同じメモリの中で最も遅いメモリで終わり、常に同じルールに従います。
- 階層の現在のレベルには、前のレベルよりも容量が多く、次のレベルよりも容量が少なくなっています。
- CPUから離れるにつれて、命令のレイテンシーが増加します。
- CPUから離れると、データの帯域幅が減少します。
キャッシュレベルの特定のケースでは、それらはますます小さな情報を格納しますが、常に次のレベルのフラグメントを含みます。 したがって、L1キャッシュはL2キャッシュデータのサブセットであり、L1キャッシュデータはL3キャッシュデータのスーパーセットであり、LXNUMXキャッシュデータがある場合はそのサブセットです。
ただし、メモリに最も近い最後のレベルのキャッシュはRAMのサブセットではなく、プロセッサに最も近いメモリページまたはこれらのセットのコピーにすぎません。
キャッシュミスまたはデータが見つからない場合
最大のパフォーマンスの問題のXNUMXつは、キャッシュレベルでデータが見つからない場合に発生するミスキャッシュが発生する場合です。 これは、プロセッササイクルの損失が多くなるため、故障したCPUのパフォーマンスにとって非常に危険ですが、故障したCPUにとってもそれほど危険ではありません。
CPUの設計では、すべてのキャッシュミスの検索時間の合計が検索時間と組み合わされて、キャッシュ内で直接データを検索するよりも大きいという事実は失敗です。 シーク時間はRAMへのアクセスよりも長いため、多くのCPU設計は設計テーブルに戻らなければなりませんでした。
そのため、アーキテクトはアーキテクチャにレベルを追加することに非常に消極的です。そうです、パフォーマンスの向上に直面して正当化する必要があるからです。
記憶との一貫性
キャッシュにはRAMからのデータのコピーがありますが、RAM自体ではないため、キャッシュとRAMの間だけでなく、一部が分離されている異なるキャッシュレベル間でも、データが一致しないという危険があります。 。
そのため、すべてのレベルでデータの一貫性を相互に維持するためのメカニズムが必要です。 プロセッサコアの数とともに増加する非常に複雑なシステムの実装を想定しているもの。