平成27年度 秋期 応用情報技術者試験 午前 問19
目的プログラムの実行時間を短くするためにコンパイラが行う最適化の方法として,適切なものはどれか。
キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:ウ
-
ア: 繰返し回数が多いループは,繰返し回数がより少ないループを複数回繰り返すように変形する。
誤り。ループを二重にすると,ループ制御(カウンタの更新や判定)の処理が増えるため,実行時間は短くなりません。最適化では,逆にループ展開によってループ制御の回数を減らします。 -
イ: 算術式の中で,加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。
誤り。一般に乗算は加算より処理時間が長いため,最適化では逆に乗算を加算やシフトに置き換えます(演算強度の軽減)。 -
ウ: 定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。
正しい。定数伝播と呼ばれる最適化です。変数の参照(メモリアクセス)を定数に置き換えることで,さらに定数どうしの演算をコンパイル時に計算する(定数畳込み)ことも可能になり,実行時間が短くなります。 -
エ: プログラム中の2か所以上で同じ処理を行っている場合は,それらをサブルーチン化し,元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。
誤り。サブルーチン化はプログラムの大きさを小さくしますが,呼出しと復帰の処理が増えるため実行時間は長くなります。実行時間短縮のためには,逆にサブルーチンを呼出し元に展開する(インライン展開)ことがあります。
答え
ウ: 定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。
出典:平成27年度 秋期 応用情報技術者試験 午前 問19