誰かが個別の命令キャッシュとデータキャッシュを持つことで何が得られるかを説明できますか?これを説明する適切なリンクへのポインタも高く評価されます。
主な理由は、パフォーマンスです。もう1つの理由は消費電力です。
DCacheとiCacheを分離すると、命令とデータを並行してフェッチできます。
命令とデータには異なるアクセスパターンがあります。
ICacheへの書き込みはまれです。 CPU設計者は、コードの変更はまれであるという想定に基づいてiCacheとCPUアーキテクチャを最適化しています。たとえば、 10hおよび12hプロセッサ用のAMDソフトウェア最適化ガイド は次のように述べています。
L1命令キャッシュがいっぱいになると、プリデコードが始まります。プリデコード情報が生成され、命令キャッシュと一緒に保存されます。
Intel Nehalem CPUはループバックバッファーを備えており、これに加えてSandy Bridge CPUはµopキャッシュを備えています Intel、AMDおよびVIA CPUs)のマイクロアーキテクチャ 。これらに注意してください。はコードに関連する機能であり、データに直接対応するものはありません。パフォーマンスにメリットがあります。IntelはCPU設計者が消費電力の過度の増加をもたらす機能を導入することを「禁止」しているため、おそらく総消費電力にもメリットがあります。
ほとんどのCPUは、データ転送ネットワーク(ストアからロードへの転送)を備えています。コードに関連する「ストアからロードへの転送」はありません。単に、コードがデータよりもはるかに少ない頻度で変更されているためです。
コードはデータとは異なるパターンを示します。
そうは言っても、ほとんどのCPU今日には、コードとデータの両方を保持する統合L2キャッシュがあります。この理由は、L2IキャッシュとL2Dキャッシュを別々にすると、測定可能なパフォーマンスの向上を提供できずにトランジスタバジェットを無駄に消費してしまうためです。
(確かに、iCacheとdCacheを別々にする理由は複雑さを減らしません理由は、理由が複雑さを減らした場合、パイプラインが存在しないためです。現在のCPUデザインのいずれか。パイプラインを使用するCPUは、パイプラインを使用しないCPUよりも複雑です。複雑さを増やしたいと考えています。事実は次のとおりです。 CPUの設計は(通常)以前の設計よりも複雑です。)
これは、CPUのどの機能ユニットが主にそのキャッシュにアクセスするかに関係しています。 ALUとFPUはデータキャッシュにアクセスしますが、デコーダーとスケジューラーは命令キャッシュにアクセスします。多くの場合、パイプライン化により、命令プロセッサと実行ユニットが同時に機能するため、単一のキャッシュを使用すると、これら2つのコンポーネント間で競合が発生します。それらを分離することで、柔軟性が失われ、プロセッサのこれら2つの主要コンポーネントが同時にキャッシュからデータをフェッチできるようになります。
理由の1つは、複雑さを軽減することです。一度に複数の行を取得したり、非同期で取得したりできる共有キャッシュを実装できます(Hit-Under-Missを参照)。ただし、キャッシュコントローラーははるかに複雑になります。
もう1つの理由は、実行の安定性です。既知の量のicacheとdcacheがある場合、データのキャッシュにより、単純な共有キャッシュで発生する可能性のある命令のキャッシュシステムが不足することはありません。
ダンが述べたように、それらを分離することで、コントローラーの複雑さを増すことなく、パイプライン化が容易になります。
プロセッサのMEMステージとFETCHステージは同時にL1キャッシュ(結合されていると想定)にアクセスできるため、どちらを優先するか(パフォーマンスのボトルネックになる可能性がある)として競合が発生する可能性があります。これを解決する1つの方法は、2つの読み取りポートを持つL1キャッシュを作成することです。ただし、ポートの数を増やすと、キャッシュ領域が二次的に増加し、消費電力が増加します。
また、L1キャッシュが結合されたものである場合、一部のデータブロックが、重要でアクセスされようとしている命令を含むブロックを置き換える可能性があります。これらの追い出しとそれに続くキャッシュミスは、全体的なパフォーマンスを低下させる可能性があります。
また、ほとんどの場合、プロセッサーは命令を順次フェッチします(取得したターゲットやジャンプなどの例外はほとんどありません)。これにより、命令キャッシュの空間的局所性が向上し、ヒット率が向上します。また、他の回答で述べたように、ICache(JITコンパイラなどの自己変更コード)への書き込みはほとんどありません。そのため、アクセスパターンや、ロード/ストアキュー、書き込みバッファーなどの他のコンポーネントを考慮して、個別のicache設計とdcache設計を最適化できます。
一般に2種類のアーキテクチャがあります。1。フォンノイマンアーキテクチャと2.ハーワードアーキテクチャです。 Harwardアーキテクチャは2つの別々のメモリを使用します。詳細については、このアームページ http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3839.html をご覧ください。