ウィキペディアの記事の概要図は、Nehalem (「Core i7」としてブランド化された最初の CPU) がコアあたり 256 KB の L2 キャッシュを持っていることを示しています。
ここの「銀行」という言葉の意味がわかりません。Nehalem のキャッシュは、キャッシュ ラインごとに 64 ビット (8 バイト) の 8 方向連想です。
つまり、キャッシュへの読み取り/書き込みアクセスごとに 8 バイトのデータが転送されます。これは、すべての仮想アドレスが 8 バイトである 64 ビット アーキテクチャに対応しています。そのため、アドレスをメモリから取得またはメモリに格納する必要があるたびに、8 バイトを転送する必要があるため、キャッシュ内の単一のエントリをそのように設計するのは当然のことです。(アプリケーションによっては、その他のキャッシュ サイズも意味があります。たとえば、ベクトル処理ユニットのデータ キャッシュのサイズを大きくするなど)。
x-way 連想性は、メモリ アドレスと、そのアドレスの情報をキャッシュ内に格納できる場所との関係を決定します。「8ウェイ連想性」という用語は、特定のメモリアドレスに格納されたデータを8つの異なるキャッシュラインに保持できるという事実を指します。キャッシュには、1 つのウェイ内で一致するエントリを選択するためのアドレス比較メカニズムと、使用する x ウェイを決定するための置換戦略があり、以前の有効な値を追い出す可能性があります。
あなたが「バンク」という用語を使用しているのは、おそらくこの 8 通りの結合性の「セット」の 1 つを指しています。したがって、あなたの質問に対する答えはおそらく「8」です。繰り返しますが、これはコアごとに 1 つの L2 キャッシュであり、それぞれがその構造を持っています。
同時アクセスに関するあなたの仮定も有効です。たとえば、ARM の Cortax A15 について文書化されています
。ただし、キャッシュのこれらのセットまたはバンクに個別にアクセスできるかどうか、およびどのようにアクセスできるかは、誰の推測でもあります。ウィキペディアの図は、L1 データ キャッシュと L2 キャッシュの間の 256 ビット バスを示しています。これはどちらも、4 つのウェイに独立してアクセスできることを意味します (4*64=256 ですが、実際には常に 1 つのメモリ ロード/ストアのみが転送され、低速の L2 キャッシュが 4 つのキャッシュ ラインを同時にフィードするだけである可能性が高くなります)。バーストと呼ばれる高速な L1 キャッシュ。
この仮定は、 Intel のページにあるシステム アーキテクチャ マニュアルの2.2.6 章に、「サイクルごとに 2 つのロードと 1 つのストアの内部帯域幅」を強調して、後の Sandy Bridge の改善がリストされているという事実によって裏付けられています。したがって、SandyBridge より前の CPU では、同時ロード/ストアの数が少なくなるはずです。
「飛行中」のロード/ストアと実際に送信されたデータには違いがあることに注意してください。「実行中」とは、現在実行中の操作です。すべてのキャッシュがミスを報告した後、メモリがデータを生成するのを待つ必要がある可能性がある負荷の場合。そのため、多数のロードを並行して実行できますが、任意の 2 つのキャッシュ間のデータ バスは常に一度しか使用できません。上記の SandyBridge の改善により、実際にはそのデータ バスが 2 つのロードに拡張され、1 つのストアが実際に同時にデータを送信するようになりました。
一部のアカウントでは、あなたの直感は正しくありません。
- 一般に、ハイパー スレッディングとマルチ スレッディングにより、CPU はサイクルごとに複数のステートメントを実行できます。(Nehalem、第 2.2.5 章:「コアごとに 2 つのハードウェア スレッド (論理プロセッサ) を提供します。4 幅の実行エンジンを利用します」。したがって、L1 キャッシュへの複数の同時ロード/ストアをサポートすることは理にかなっています。
- L2 キャッシュは、L1 データと L1 命令キャッシュの両方を提供します。その部分は正しいです。(1) の理由から、2 つ以上の同時操作をサポートすることが理にかなっている場合があります。
- 通常、L3 キャッシュの数を増やすことができますが、実際には意味がありません。32 という数字をどこから得たのかはわかりませんが、推測に過ぎないのかもしれません。追加のアクセス ポイント (用語では「バンク」) には、アドレス デコーダー、タグ アレイ (キャッシュ ラインとのアドレス比較、置換戦略、およびキャッシュ データ フラグ (ダーティ ビットなど) を処理するため) が必要です。そのため、すべてのアクセス ポートでトランジスタのオーバーヘッドが必要になるため、シリコンの面積と電力が必要になります。存在するすべてのポートは、使用されていない場合でも、キャッシュ アクセスを遅くします。(詳細はこの回答の範囲外です)。したがって、これはデリケートな設計上の決定であり、一般的に 32 は高すぎます。通常、CPU 番号内のあらゆる種類のメモリの場合、1 から 6-8 の読み取りポートと 1 から 2-4 の書き込みポートの範囲です。もちろん、例外もあるでしょう。
ソフトウェアの最適化に関するあなたのポイントについて: あなたが低レベルのハードウェア/ファームウェア開発者である場合は心配してください。それ以外の場合は、高レベルのアイデアに従ってください。可能であれば、集中的な操作の最も内側のループを小さくして、L3 キャッシュに収まるようにします。コア数よりも多くのスレッドを、ローカル データで負荷の高いコンピューティングで開始しないでください。このような速度への影響について心配し始めた場合は、一致する cpu スイッチを使用してコードのコンパイル/最適化を開始し、マシン上の他のタスク (インフラストラクチャ サービスも含む) を制御します。
要約すれば:
- Nehalem の L2 キャッシュは 8 連想です
- 2 つ未満の同時ロードと 1 つのストア操作 (おそらく 1 つだけ) をサポートします。ただし、各ロード/ストアは、L1 データ キャッシュとの間で一度に最大 256 ビットを送信できます。
- 物理的な設計上の制約 (タイミング/面積/消費電力) により、L3 キャッシュの同時ロード/ストア操作の数は 32 まで拡張されません。
- 一般に、アプリケーションではこれらの詳細についてあまり心配する必要はありません - ただし、そうしなければならないことが確実にわかっている場合を除きます (たとえば、ハイ パフォーマンス コンピューティングの場合)。