平成27年度 秋期 応用情報技術者試験 午前 問19
テクノロジ/ソフトウェア目的プログラムの実行時間を短くするためにコンパイラが行う最適化の方法として,適切なものはどれか。
出典:平成27年度 秋期 応用情報技術者試験 午前 問19
- ア繰返し回数が多いループは,繰返し回数がより少ないループを複数回繰り返すように変形する。例えば,10,000回実行するループは,100回実行するループを100回繰り返すようにする。
- イ算術式の中で,加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。例えば,"X+X"は"X*2"で置き換える。
- ウ定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。
- エプログラム中の2か所以上で同じ処理を行っている場合は,それらをサブルーチン化し,元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。
正解:ウ
解説
コンパイラの最適化には,定数の伝播(値が変わらないと分かった変数を定数に置き換える)や強さの軽減,共通部分式の削除,ループの展開など様々な手法があります。設問のうち,値が変わらないと確認できた変数を定数に置き換える最適化は,実行時の変数参照や計算を減らして実行時間を短縮します。
選択肢ごとの解説
- ア誤り。実行回数の多いループを回数の少ないループの繰返しに分解しても,総実行回数は変わらず,むしろループ制御のオーバヘッドが増えるため最適化にはなりません。
- イ誤り。X+Xのような単純な加算をX*2の乗算に置き換えるのは,一般に乗算の方がコストが高いため最適化に逆行します。
- ウ正しい。値が変化しないと確認できた変数を定数に置き換えることで,実行時の変数アクセスや再計算を省略でき,実行時間の短縮につながります。
- エ誤り。重複する処理をサブルーチン化することはプログラムサイズの削減や保守性向上に役立ちますが,呼出しのオーバヘッドが増えるため実行時間の短縮を直接目的とした最適化ではありません。