平成20年秋期試験問題 午前問39
問39解説へ
目的プログラムの実行時間を短くするためにコンパイラが行う最適化方法として,適切なものはどれか。
- 繰返し回数の多いループは,繰返し回数がより少ないループを複数回繰り返すように変形する。例えば,10,000回実行するループは,100回実行するループを100回繰り返すようにする。
- 算術式の中で,加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。例えば,"X+X"は"2*X"で置き換える。
- 定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。
- プログラム中の2か所以上で同じ処理を行っている場合は,それらをサブルーチン化し,元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。
広告
解説
コンパイラは、ソースコードを翻訳して、機械語の目的プログラム(実行ファイル/ロードモジュール)を生成する言語プロセッサです。
実行ファイルを生成する前のソースコードを機械語に翻訳する過程において、ソースコードの解析が行われ、効率的、かつ、実行時間やメモリ使用量などを最少化するようにソースコードを調整する最適化処理が行われます。
実行ファイルを生成する前のソースコードを機械語に翻訳する過程において、ソースコードの解析が行われ、効率的、かつ、実行時間やメモリ使用量などを最少化するようにソースコードを調整する最適化処理が行われます。
- 繰返し回数の多いループに対しては、ループの中身のコードを複数回配置してループ条件のチェック回数を減らしたり、分岐回数を減らすことによってオーバーヘッドを低減させる「ループ展開」と呼ばれる最適化が行われます。
- CPUでは乗算よりも加算の方が高速に計算できます。実際には"2*X"→"X+X"というように乗算を加算に置き換える「演算子強度低減」と呼ばれる最適化が行われます。
- 正しい。「定数畳み込み」及び「定数伝播」と呼ばれる最適化手法です。変数はメモリ上に動的に確保されますが、定数はプログラムコード上に埋め込まれるという違いがあるため、定数は変数よりも高速にアクセスできます。
- サブルーチンの呼び出しには余計なオーバーヘッドが生じます。このため、プログラムの実行に支障がない場合には、サブルーチンをメインプログラム中に展開してしまうことでオーバーヘッドを減らす「インライン展開」と呼ばれる最適化が行われます。
広告