2017-12-18 56 views
-1

キャッシュミスが発生した場合、データはメインメモリから直接レジスタに移動されるか、最初にキャッシュに移動されて登録されますか?メインメモリとレジスタを直接接続する方法はありますか?キャッシュミスが発生した場合、データは直接レジスタに移動されるか、最初にキャッシュに移動して登録されますか?

+0

「メインメモリから直接登録するように移動した」と言うと、実際には「メインメモリから直接登録し、キャッシュにコピーする」という意味ですか?それ以外の場合は、キャッシュは何ですか?また、キャッシュをバイパスすると、プログラムの速度が遅くなります(ダイレクトメモリアクセスがキャッシュよりも遅いため)。そしてあなたはキャッシュをバイパスしたい理由を詳しく述べることができますか?解決したい*実際の問題は何ですか?ユースケースとは何ですか? –

+0

http://idownvotedbecau.se/beingunresponsive –

+0

@Someprogrammerdude Iは回路上で、データをキャッシュに入れたときと同じ時間にレジスタに入れているということですか?私はデータがキャッシュ(LLC、L2、L1)に入れられることを知っていますが、データをキャッシュに置いてレジスタにデータを置くことの間にシーケンスがありますか? – peasantspring

答えて

2

私はキャッシュミスロードがキャッシュラインが外部キャッシュから到着した後にL1ロード使用待ち時間を待たなければならないかどうか尋ねていると思います。すなわち、ラインがL1に書き込まれるのを待ってから、負荷を正常に再試行する。

高性能CPUがそのように動作しないことはほぼ確実です。 L2ヒットのレイテンシは多くのワークロードにとって重要です。ロードを再開するタイミングを知るためには、受信キャッシュラインを追跡するロードバッファが必要です。だからあなたは、キャッシュに書き込むのと並行して、入ってくるデータを取り込むだけです。 TLBチェックは、外部キャッシュに送信する物理アドレスの生成の一部としてすでに実行されていました。

ほとんどの実際のCPUは、待機中のワード/バイトが到着するとすぐにパイプラインを再開できるようにする早期再開デザインを使用するため、残りのキャッシュラインはバックグラウンドで転送されます。

さらに最適化が重要です。これは、必要なワードから開始して送信されるキャッシュラインを要求します。そのため、キャッシュラインの途中のワードのデマンドミスがそのワードを最初に受け取ることができます。私は、現代のDDR DRAMは、指定された64ビットのチャンクで64バイトバーストを開始し、メインメモリから読み込むときにこれをサポートしていると思います。私は100%の近代的なCPUがこれを使用しているとは確信していません。アウト・オブ・オーダー実行が同じラインに対する複数の未処理ミスを許容する場合、おそらくそれはより複雑になる。

早期再起動とクリティカルワードファーストのいくつかの説明については、which is optimal a bigger block cache size or a smaller one?を参照してください。


メインメモリとレジスタを接続する直接的な方法はありますか?

「直接」とは何かを意味します。最新の高性能CPUでは、2〜3層のキャッシュと、複数のコアのメモリへのアクセスを調停する独自のバッファリングを備えたメモリコントローラが存在します。そうではありません。

特別なキャッシュバイパス負荷とストア命令を備えたシンプルなシングルコアCPUを設計する場合は、確実に実行してください。または、早期再起動を「直接」と考えている場合は、それはすでに発生しています。

ストアの場合、x86およびその他のアーキテクチャではキャッシュバイパスストアがありますが、x86のMOVNT命令はレジスタをメモリに直接接続しません。店舗はラインフィルバッファーに入ります。ラインバッファーはいっぱいになるとフラッシュされ、ライトコンバイニングを行います。

キャッシュ不可能なメモリ領域もあります。キャッシュ不可能なメモリへのロードまたはストアはアーキテクチャ的に「直接的」ですが、実際にはマイクロアーキテクチャではロード/ストア実行ユニットからL1Dが使用するのと同じメカニズムメモリコントローラに話してください。

+0

ありがとうございます! – peasantspring

関連する問題