コンパイラ

コンパイラの自動ベクトル化で使われる命令の種類として正しいものはどれか。

  1. A割り込みを発生させる命令
  2. B複数のデータを同時に扱うSIMD命令
  3. Cキャッシュの内容を、まとめてすべて消去する命令
答えと解説を見る

正解:B. 複数のデータを同時に扱うSIMD命令

自動ベクトル化は、配列の要素ごとに同じ計算をするループを見つけ、複数の要素をまとめて処理するSIMD命令に置き換える最適化です。例えば128ビットのSIMDレジスタなら32ビットの数を4つ同時に足せるので、うまくいけばループの演算の回数が4分の1になります。繰り返しの間に依存がないこと、データの並びが連続していることなどが条件になり、ポインタの重なりの可能性があると見送られることもあります。割り込みやキャッシュの操作の命令とは関係ありません。

  • A. 割り込みを起こす命令は使いません。
  • B. 正しい。SIMD命令で複数の要素をまとめて処理します。
  • C. キャッシュを消す命令とは関係ありません。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. コンパイラの最適化が守らなければならない基本的な条件として正しいものはどれか。
  2. コード生成の段階の一つである命令選択(インストラクションセレクション)の説明として正しいものはどれか。
  3. クロスコンパイラの説明として正しいものはどれか。
  4. 最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由はどれか。
  5. 上の関数に、定数伝播・定数畳み込み・不要コードの削除を十分に行ったとき、関数が返す値と残るコードとして正しいものはどれか。