メモリインタリーブ
主記憶を複数のバンクに分け、連続したアドレスを異なるバンクに順番に割り当てることで、CPUからのアクセスを並列に処理し、主記憶へのアクセスを高速化する方式。
イマシルちゃんの解説
レジが1台しかないお店だと、お客さんは1人ずつしか会計できないよね。
でも、レジを4台に増やして、お客さんを順番に1番、2番、3番、4番のレジに案内すれば、
4人を同時に会計できる!
メモリインタリーブは、メモリをいくつかの「レジ(バンク)」に分けて、
次々に来る読み書きの注文を、順番に別のバンクに振り分ける工夫なんだよ!
より深い解説
定義
メモリインタリーブは、主記憶装置を独立して動作できる複数のバンクに分割し、連続するアドレスを各バンクに交互(インタリーブ)に配置する方式である。主記憶のアクセスは、データを読み出した後に次の読み出しの準備をする時間(サイクル時間)がかかるが、別々のバンクなら、1つのバンクの準備中に、ほかのバンクにアクセスできる。
アドレスの割り当て(4バンクの例)
| バンク0 | バンク1 | バンク2 | バンク3 |
|---|---|---|---|
| 0 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 |
連続したアドレス(0、1、2、3…)を順に読むと、アクセスが4つのバンクに分散するため、各バンクの準備時間を待たずに、次々とデータを取り出せる。プログラムの命令や配列のデータは連続したアドレスに置かれることが多いため、効果が大きい。
効果が出にくい場合
同じバンクに属するアドレスばかりに続けてアクセスする(この例ではアドレス0、4、8…のように、バンクの数の倍数の間隔でアクセスする)と、アクセスが1つのバンクに集中し、並列化の効果が得られない。
身近な例:デュアルチャネル
パソコンで、同じ容量のメモリモジュールを2枚(または4枚)組にして差すと、メモリコントローラが2つの経路(チャネル)を並行して使い、メモリの帯域を広げる(デュアルチャネル)。これも、メモリへのアクセスを複数に分けて並列に処理するという点で、同じ考え方である。
ほかの高速化・メモリ管理の方式との区別
| 方式 | 内容 |
|---|---|
| メモリインタリーブ | 主記憶を複数のバンクに分け、アクセスを並列に処理する |
| キャッシュメモリ | CPUと主記憶の間に、高速で小容量のメモリを置き、アクセス速度の差を埋める |
| ディスクキャッシュ | 主記憶と磁気ディスク装置の間にバッファメモリを置き、アクセス速度の差を補う |
| DMA | 主記憶と入出力装置の間で、CPUを介さずにデータを転送する |
| 仮想記憶 | 外部記憶装置を使って、主記憶の容量を超えるメモリ空間をプログラムから使えるようにする |
いずれもアクセスの効率を高める仕組みだが、「複数のバンクに分けて並列に処理する」のはメモリインタリーブだけである。