performance - 高速化 - 並列化 スレッド数




マルチコアIntel CPUではキャッシュメモリはどのように共有されていますか? (3)

マルチコアCPUやマルチプロセッサシステムで使用されるキャッシュメモリに関する質問がいくつかあります。 (プログラミングには直接関係しませんが、マルチコアプロセッサ/マルチプロセッサシステム用のソフトウェアを書いている間に多くの反響がありますので、ここで尋ねます)

  1. マルチプロセッサシステムまたはマルチコアプロセッサ(Intel Quad Core、Core 2 Duoなど)では、各CPUコア/プロセッサに独自のキャッシュメモリ(データおよびプログラムキャッシュ)がありますか?

  2. あるプロセッサ/コアがお互いのキャッシュメモリにアクセスできるかどうかは、お互いのキャッシュにアクセスすることが許可されていれば、キャッシュミスが少なくなる可能性があるからです。プロセッサーのキャッシュがそれを持っているので、メモリーから第1プロセッサーのキャッシュへの読み取りを回避できますか? この仮定は有効で真実ですか?

  3. 任意のプロセッサが他のプロセッサのキャッシュメモリにアクセスできるようにする上で問題がありますか?


マルチプロセッサシステムまたはマルチコアプロセッサ(Intel Quad Core、Core 2 Duoなど)では、各CPUコア/プロセッサに独自のキャッシュメモリ(データおよびプログラムキャッシュ)がありますか?

  1. はい。 正確なチップモデルによって異なりますが、最も一般的な設計は、各CPUコアが独自のL1データおよび命令キャッシュを持つことです。 L2統合キャッシュは、通常、すべてのコアで共有されます。

あるプロセッサ/コアがお互いのキャッシュメモリにアクセスできるかどうかは、お互いのキャッシュにアクセスすることが許可されていれば、キャッシュミスが少なくなる可能性があるからです。プロセッサーのキャッシュがそれを持っているので、メモリーから第1プロセッサーのキャッシュへの読み取りを回避できますか? この仮定は有効で真実ですか?

  1. 各CPUコアのL1キャッシュはコアと同じダイにあり、他のコアではアクセスできません。 各コアは、共用データバスを介してL2キャッシュに接続されている。

任意のプロセッサが他のプロセッサのキャッシュメモリにアクセスできるようにする上で問題がありますか?

  1. はい - 単にさまざまなCPUキャッシュを他のコアに接続するワイヤーがありません。 コアが別のコアのキャッシュ内のデータにアクセスしたい場合、それを実行できる唯一のデータパスはシステムバスだけです。

非常に重要な関連問題は、 キャッシュコヒーレンシの問題です。 次のことを考慮してください。あるCPUコアがキャッシュ内に特定のメモリ位置を持ち、そのメモリ位置に書き込みを行うとします。 次に、別のコアがそのメモリロケーションを読み込みます。 第2のコアが更新された価値をどのように見ているかをどのように確認しますか? これがキャッシュコヒーレンシの問題です。 さまざまなソリューションがあります。 Wikipedia et al。


あなたの最初の答えには、Core 2 Duoに2層キャッシュシステムがあり、各プロセッサに独自の第1レベルのキャッシュがあり、第2レベルのキャッシュを共有していることがわかります。 これは、データの同期化とメモリの利用の両方に役立ちます。

あなたの2番目の質問に答えるために、私はあなたの前提が正しいと信じています。 プロセッサが互いのキャッシュにアクセスできるようにするには、明らかに、プロセッサが選択できるデータが増えるほどキャッシュミスが少なくなります。 ただし、共有キャッシュを検討してください。 Core 2 Duoの場合、キャッシュを共有することで、プログラマはこの環境で共通に使用される変数を安全に配置できるため、プロセッサは個々の第1レベルのキャッシュにアクセスする必要がなくなります。

3番目の質問に答えるには、他のプロセッサのキャッシュメモリにアクセスする際に問題が発生する可能性があります。これは、「Single Write Multiple Read」の原則になります。 同時に複数のプロセスがメモリ内の同じ場所に書き込むことはできません。

コア2デュオの詳細については、この素敵な記事をお読みください。

http://software.intel.com/en-us/articles/software-techniques-for-shared-cache-multi-core-systems/


クイックアンサー1)はい2)いいえ、しかし、それはあなたが参照しているメモリインスタンス/リソースによって異なる場合がありますが、データは同時に複数の場所に存在する可能性があります。 3)はい。

この問題の完全な説明については、9部の記事「すべてのプログラマーがメモリについて知っておくべきこと」を、Ulrich Drepper( http://lwn.net/Articles/250967/ )から読んでください。あなたがよくアクセスしやすい詳細でお問い合わせしているようです。







cpu-cache