忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【コンピュータ】複数コアの連携が生む、仕方のない空振り!「コヒーレントミス」|情報処理問題1000本ノック

1つのチップに複数のCPUコアを搭載するマルチプロセッサ時代。それぞれのコアが持つキャッシュメモリのデータに矛盾が出ないよう「一貫性(コヒーレンシ)」を保とうとした結果、逆に発生してしまう特殊なキャッシュミス「コヒーレントミス」のメカニズムを攻略しましょう。

1. 【 問題 】:コンピュータ構成要素(マルチプロセッサとキャッシュ制御)

【 問題 】 複数のCPUコアがそれぞれ固有のキャッシュメモリを持つマルチプロセッサシステムに関する記述です。すべてのキャッシュメモリ間でデータの「一貫性(コヒーレンシ)」を維持するために、あるコアが共有データを書き換えた際、他のコアが保持していた同じデータを強制的に「無効化」する制御が行われます。この制御が原因で、無効化された側のコアが後にそのデータにアクセスした際、データがキャッシュ内から消失しているために発生するキャッシュミスを何と呼ぶでしょうか?

1. コンパルソリミス(初期ミス)
2. キャパシティミス(容量ミス)
3. コンフリクトミス(競合ミス)
4. コヒーレントミス(コヒーレンスミス)

2. 正解:

正解: 4. コヒーレントミス

3. 解説:「データの鮮度」を守るためのセキュリティルールが裏目に

コヒーレントミス(Coherence Miss)とは、マルチコアCPU特有のキャッシュミスです。
複数のコアで同じメインメモリのデータを共有しているとき、コアAがデータを「10」から「20」に書き換えたとします。このとき、コアBのキャッシュに残っている古い「10」というデータは使えなくしなければシステムがバグを起こしてしまいます。そのため、コアBのキャッシュデータを強制的に「ゴミ(無効)」にする処理が走ります。 その後、コアBが「よし、さっきのデータを読もう」と自分のキャッシュを見に行くと、すでに無効化されて空っぽになっているため、わざわざ遠くのメインメモリまで最新の「20」を取りに行くことになります。この、データの矛盾(不整合)を防ぐための仕組みによって引き起こされるキャッシュミスが、コヒーレントミスです。

【試験で区別すべき「キャッシュミス」の主な原因】 ← ココが試験のポイント!

ミスの分類発生する根本的な原因・理由
1. コンパルソリミス 電源を入れてから「初めて」そのデータを読み込むため、まだ入っていない。
2. キャパシティミス キャッシュメモリの「容量(サイズ)」が足りず、溢れて追い出されてしまった。
3. コンフリクトミス 容量は空いているが、データの配置場所(アドレスのバッティング)で競合した。
4. コヒーレントミス 他のコアがデータを書き換えたため、自分のデータが一貫性保持のために「無効化」された。

1. 理解のコツ: 「オフィスの共有ホワイトボードと個人用メモ」に例えてみましょう。
・社員Aと社員Bが、会社のホワイトボード(メインメモリ)に書かれた「今日の売上目標:100万円」という情報を、それぞれ自分の手帳(個別キャッシュ)にメモしました。
・夕方、社員Aが「目標が150万円に変更になったぞ」とホワイトボードを書き換えました。このとき、社員Bが古い手帳のメモ(100万円)をそのまま見て仕事をすると大問題になります。そのため、社内ルール(一貫性制御)によって、社員Aは社員Bの手帳のページを「このメモは古いからバツ!無効!」と消してしまいます。
・その後、社員Bが手帳を開くとメモが消されているため(キャッシュミス)、わざわざ席を立って遠くのホワイトボードまで最新の目標を確認しに行かなければなりません。この、『他の人が内容をアップデートしたせいで、自分のメモが使えなくなってトボトボ確認し直す羽目になる状態』コヒーレントミスです。

2. 試験対策の視点: コンピュータアーキテクチャやプロセッサの高速化技術を問う高度な問題として出題されます。問題文の中に「マルチプロセッサ(複数のキャッシュ)」「一貫性(コヒーレンシ)を保つ」「一部のキャッシュが不整合(無効化)となることで発生するキャッシュミス」というキーワードの組み合わせがあれば、迷わずコヒーレントミスを選択してください。
対策として、このミスを減らすためには、プロセッサ間で共有するデータの割り振りを最適化し、異なるコアが同じデータ領域を頻繁に書き換え合わないようなプログラムの構造にする(偽共有の排除など)が有効である、という高度な並列プログラミングの関連知識も合わせて知っておくと、記述式や応用問題にも対応できる強力な武器になります。


4. まとめ

「マルチプロセッサ環境において、メモリデータの一貫性を維持する制御(無効化など)が働いた結果、他のコアの書き込みの割りを食う形で自分のキャッシュが空振りに終わる現象」。これがコヒーレントミスです。単一のコアでは発生しない、マルチコアならではのトレードオフ現象として、そのメカニズムをしっかりと記憶に刻んでおきましょう!


PR