メモリインタリーブ
主記憶を独立して動作できる複数のバンクに分け、異なる領域へのアクセスを並列に進める方式。代表的には連続するアドレスを各領域へ順番に割り当て、連続したデータの読み書きを効率化する。
イマシルちゃんの解説
メモリインタリーブは、主記憶の読み書きを効率よく進める方式だよ。
主記憶を独立して動作できる複数のバンクに分けるんだ。
代表的な方法では、連続するアドレスを別々の領域へ順番に割り当てるよ。
ある領域が次の読み出しに備えている間に、別の領域からデータを読み出せるよ。
どの領域にアクセスするかは、読み書きしたいデータのアドレスで決まるの。
続けて並んだデータを読むときに待ち時間を減らせるので、CPUへデータを次々に渡しやすくなるんだ。
この解説はわかりやすかったですか?
より深い解説
定義
メモリインタリーブは、主記憶装置を独立して動作できる複数のバンクに分割し、連続するアドレスを各バンクに交互(インタリーブ)に配置する方式である。主記憶のアクセスは、データを読み出した後に次の読み出しの準備をする時間(サイクル時間)がかかるが、別々のバンクなら、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を介さずにデータを転送する |
| 仮想記憶 | 外部記憶装置を使って、主記憶の容量を超えるメモリ空間をプログラムから使えるようにする |
いずれもアクセスの効率を高める仕組みだが、「複数のバンクに分けて並列に処理する」のはメモリインタリーブだけである。