基本情報技術者 2010年 春期 午前(科目A) 問11
問題文
命令キャッシュを効果的に使用できるプログラムの作成方法はどれか。
選択肢
ア:アクセスする作業領域部分をまとめる。
イ:作業領域全体を平均的にアクセスするように作成する。
ウ:頻繁に実行される処理部分をまとめる。(正解)
エ:プログラム全体を平均的に実行するように作成する。
🔒 解説は解答すると表示されます
命令キャッシュの活用策【午前解説】
正解の理由
命令キャッシュはCPUが実行する命令を高速に供給するためのキャッシュです。頻繁に実行される命令列(ホットコード)を近くにまとめると、同じキャッシュラインや近接するラインが繰り返し使われ、キャッシュヒット率が高まります。これにより命令フェッチの遅延が減り、プログラムの実行速度や消費電力の改善につながります。選択肢「ウ: 頻繁に実行される処理部分をまとめる。」はこの原則に合致するため正解です。
解法ステップ
- 問題が「命令キャッシュ」に関するものと認識する(命令=コード)。
- 命令キャッシュの基本原理(時間的・空間的局所性)を思い出す。
- 各選択肢が「コード配置」か「データ配置」か「平均化」かを判定する。
- 局所性を強化する選択肢(ホットコードをまとめる)を正答として選ぶ。
選択肢別の誤答解説
- ア: アクセスする作業領域部分をまとめる。
→ これは主にデータのワーキングセットに関する対策で、データキャッシュ向けの表現です。命令キャッシュの改善とは直接対応しません。 - イ: 作業領域全体を平均的にアクセスするように作成する。
→ 「平均的にアクセス」させると局所性が失われ、キャッシュミスが増えるため命令キャッシュに不利です。 - ウ: 頻繁に実行される処理部分をまとめる。
→ 正解。ホットコードを近接させることで命令キャッシュのヒット率が向上し実行性能が改善します。 - エ: プログラム全体を平均的に実行するように作成する。
→ イと同様に「平均化」は局所性を破壊し、命令キャッシュの利点を失わせる可能性があります。
よくある誤解
- 命令キャッシュとデータキャッシュを混同する:コードの配置最適化は命令キャッシュに効きますが、データアクセスパターンの改善はデータキャッシュ対策になります。
- 「平均的にアクセスするようにする」が良いと思いがち:平均化は局所性を失わせ、キャッシュの利点を活かせないため逆効果です。
- 大きくコードを展開すれば必ず速くなると思う誤解:無駄なインライン化や大規模な展開は命令容量を増やし逆にキャッシュミスを招くことがあります。
補足コラム
命令キャッシュ最適化の実践テクニックには、プロファイルガイド最適化(PGO)によるホット関数の検出と再配置、ホット/コールド分割(頻繁に呼ばれる関数と稀にしか呼ばれない関数を分離)、関数の順序付け、基本ブロックの並べ替え、適切なインライン化・ループ最適化などがあります。逆に、過度のインライン化や無差別なコード展開はバイナリサイズを肥大化させ、命令キャッシュ容量を圧迫して逆効果になるため注意が必要です。組み込み系ではI-cacheが小さいため特にコード配置の影響が顕著です。
FAQ
Q1: 命令キャッシュはデータキャッシュとどう違いますか?
A1: 命令キャッシュは命令(コード)フェッチを高速化するためのキャッシュで、データキャッシュはメモリ操作(読み書き)を高速化します。最適化手法も対象が異なります。
A1: 命令キャッシュは命令(コード)フェッチを高速化するためのキャッシュで、データキャッシュはメモリ操作(読み書き)を高速化します。最適化手法も対象が異なります。
Q2: どのように「頻繁に実行される処理」を見つければ良いですか?
A2: プロファイラ(perf、gprof、VTune 等)でホットスポットを特定します。プロファイル結果を元にコード配置や最適化を行います。
A2: プロファイラ(perf、gprof、VTune 等)でホットスポットを特定します。プロファイル結果を元にコード配置や最適化を行います。
Q3: インライン化は常に有効ですか?
A3: 小さなホット関数のインライン化は効果的ですが、過度に行うとコードサイズが増え命令キャッシュを圧迫し逆効果になります。プロファイルを元に判断します。
A3: 小さなホット関数のインライン化は効果的ですが、過度に行うとコードサイズが増え命令キャッシュを圧迫し逆効果になります。プロファイルを元に判断します。
Q4: 組み込み環境では特別な注意がありますか?
A4: I-cacheが小さい場合、ホット/コールド分割やコード配置の効果が大きく、コードサイズとキャッシュ利用のトレードオフを慎重に設計する必要があります。
A4: I-cacheが小さい場合、ホット/コールド分割やコード配置の効果が大きく、コードサイズとキャッシュ利用のトレードオフを慎重に設計する必要があります。
関連キーワード: 命令キャッシュ、コードの局所性、ホットパス、プロファイル最適化、コード配置、インライン化、ホット/コールド分割

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

