コンパイラ

コンパイラの命令スケジューリングの主な目的はどれか。

  1. Aプログラムの結果が変わっても、とにかく命令の数を減らすこと
  2. B結果を変えずに命令を並べ替え、待ち時間を埋めること
  3. C実行する命令を、OSのスケジューラが選んだ順番に並べ直すこと
答えと解説を見る

正解:B. 結果を変えずに命令を並べ替え、待ち時間を埋めること

読み込みや掛け算の結果がすぐには使えない場合、その結果を使う命令を直後に置くとCPUは待たされます。命令スケジューリングは、データの依存関係を守って結果を変えない範囲で、依存のないほかの命令を間に入れるように順番を並べ替え、待ち時間を有効に使えるようにします。順番どおりに実行するCPUで特に効果が大きくなります。結果を変える変換は許されず、OSのスケジューラはプロセスの切り替えを決めるもので別のしくみです。

  • A. 結果を変える変換は許されません。
  • B. 正しい。依存を守って並べ替え、待ち時間を埋めます。
  • C. OSのスケジューラはプロセスの切り替えを決める別のしくみです。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 上の関数の最後の再帰呼び出しに末尾呼び出しの最適化を行うと、どのような効果があるか。
  2. コンパイラとインタプリタの違いとして正しいものはどれか。
  3. JITコンパイルを使う実行環境の特徴として正しいものはどれか。
  4. LLVMの基本的な構成として正しいものはどれか。
  5. コンパイラの最適化のレベルを指定するオプションで、最適化をしない設定(-O0など)がよく使われる場面はどれか。