基本情報技術者 2009年 秋期 午前(科目A) 問10
問題文
メモリインタリープの説明として、適切なものはどれか。
選択肢
ア:CPUから主記憶へのアクセスを高速化するために、キャッシュメモリと主記憶との両方に同時にデータを書き込む。
イ:CPUから主記憶へのアクセスを高速化するために、主記憶内部を複数のバンクに分割し、各バンクを並列にアクセスする。(正解)
ウ:CPUと主記憶のアクセス速度の違いによるボトルネックを解消するために、高速かつ小容量のメモリを配置する。
エ:パイプライン処理を乱す要因をなくすために、キャッシュメモリを命令用とデータ用の二つに分離する。
メモリインタリープ【午前2 解説】
要点まとめ
- 結論→メモリインタリーブは主記憶を複数の独立バンクに分割し並列アクセスを可能にして帯域とスループットを向上させる技術です。
- 根拠→連続するアドレスを異なるバンクに順に割り当てることで各バンクの待ち時間を重ね合わせ,並列にデータ転送を行い実効スループットを高めます。
- 差がつくポイント→キャッシュの書き込み動作や命令/データキャッシュ分離と混同しないこと。インタリーブは主記憶内部のバンク並列化で,キャッシュとは別の層の手法です。
正解の理由
正解は イ です。メモリインタリーブは主記憶(DRAMなど)内部を複数のバンクに分割し,連続アクセスを異なるバンクへ振り分けることで各バンクのレイテンシを隠蔽し,並列にアクセスさせて全体の帯域を向上させる方式です。選択肢イはこの説明と一致しており,並列アクセスによる高速化を正しく述べています。
よくある誤解
- 「同時にキャッシュと主記憶に書き込む」は書き込み方式(write-through)でありインタリーブではありません。
- 命令用とデータ用の分離はキャッシュ構成(Harvard風/split cache)であって主記憶バンクの並列化とは別物です。
解法ステップ
- 問題文のキーワードを確認:「メモリ」「並列」「バンク」など主記憶内部の分割を示す語を探す。
- 各選択肢が示す技術の階層を判別:キャッシュ層の話か主記憶内部の話かを区別する。
- インタリーブの本質(バンク分割→並列アクセス→帯域向上)に一致する選択肢を選ぶ。
- 残りの選択肢はキャッシュの書き込み方式や命令/データ分離など別技術なので除外する。
選択肢別の誤答解説
- ア: CPUから主記憶へのアクセスを高速化するために、キャッシュメモリと主記憶との両方に同時にデータを書き込む。
→ 誤り。これは書き込みポリシー(write-through)やキャッシュの動作に関する記述であり,メモリインタリーブとは無関係です。 - イ: CPUから主記憶へのアクセスを高速化するために、主記憶内部を複数のバンクに分割し、各バンクを並列にアクセスする。
→ 正解。インタリーブの定義そのもので,バンク並列化による帯域向上を示しています。 - ウ: CPUと主記憶のアクセス速度の違いによるボトルネックを解消するために、高速かつ小容量のメモリを配置する。
→ 誤り。これはキャッシュ(高速小容量メモリ)によるメモリ階層の説明であり,主記憶のバンク分割とは別の対処法です。 - エ: パイプライン処理を乱す要因をなくすために、キャッシュメモリを命令用とデー夕用の二つに分離する。
→ 誤り。命令/データキャッシュの分離(split I/D cache)はパイプラインやキャッシュ競合の緩和策で,インタリーブではありません。
補足コラム
- 種類:インタリーブにはローオーダ(低位ビットでバンクを割当て)とハイオーダ(高位ビットでバンクを割当て)があり,アクセスパターンに応じて効果が異なります。
- 理想的性能:nバンクの完全にインターリーブされたメモリでは理想的には帯域がほぼn倍に増える(競合や制御遅延を無視した場合)。概念的にはバンクサイクル時間を,バンク数をとすると,理想的な連続アクセス間隔は約になります。
- 実運用ではバンク競合(同じバンクへの同時要求)や行バッファのヒット/ミス,メモリコントローラの振る舞いが性能を左右します。
- マルチチャネルDRAM(デュアル/クアッドチャネル)は物理的チャネル数を増やすことで帯域を増やす方式で,インタリーブと併用されることが多いが概念は異なります。
- アドレス→バンクの単純なマッピング例:bank = (address / block_size) % n
簡単なマッピング例(Python)
def bank_of_address(addr, block_size, n_banks):
block_index = addr // block_size
return block_index % n_banks
# 例: 4バンク, ブロックサイズ64バイト
for addr in range(0, 512, 64):
print(addr, "-> bank", bank_of_address(addr, 64, 4))
FAQ
Q: インタリーブとデュアルチャネルは同じですか?
A: いいえ。デュアルチャネルはメモリコントローラと物理チャネルを増やして並列にデータを流す仕組みで,インタリーブは主記憶内部を複数バンクに割り振る技術です。併用すると効果的です。
A: いいえ。デュアルチャネルはメモリコントローラと物理チャネルを増やして並列にデータを流す仕組みで,インタリーブは主記憶内部を複数バンクに割り振る技術です。併用すると効果的です。
Q: 低位インタリーブと高位インタリーブの違いは?
A: 低位インタリーブはアドレスの下位ビットでバンク割当てを行い連続アドレスが異バンクに分散されやすい。一方高位は大きなブロックをバンク間で割るため,アクセスパターンによっては有利不利が変わります。
A: 低位インタリーブはアドレスの下位ビットでバンク割当てを行い連続アドレスが異バンクに分散されやすい。一方高位は大きなブロックをバンク間で割るため,アクセスパターンによっては有利不利が変わります。
Q: バンク競合とは何ですか?
A: 複数のアクセスが同一バンクに集中し順次処理されるために並列化効果が失われる現象です。アクセスパターンや割当て方式で回避を図ります。
A: 複数のアクセスが同一バンクに集中し順次処理されるために並列化効果が失われる現象です。アクセスパターンや割当て方式で回避を図ります。
関連キーワード: メモリインタリーブ、メモリバンク、バンク競合、メモリバンド幅、メモリチャネル、キャッシュ、レイテンシ、スループット、SDRAM

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

