マルチコアと同期

ARMやRISC-V(RVWMO)のような弱いメモリ一貫性モデルについて正しいものはどれか。

  1. A異なる番地への読み書きの多くの入れ替えを許し、順番が必要な場所にはプログラムでバリアなどを入れる
  2. B入れ替えを一切許さないので、バリアの命令は存在しない
  3. C同じ番地への読み書きの順番さえ保証しない
答えと解説を見る

正解:A. 異なる番地への読み書きの多くの入れ替えを許し、順番が必要な場所にはプログラムでバリアなどを入れる

弱いモデルでは、依存関係のない異なる番地への読み書きを、ハードウェアがかなり自由に入れ替えられます。回路を単純にし、性能や電力の効率を上げやすい反面、ほかのコアとデータを受け渡すときは、fence命令や、取得・解放の意味を持つ読み書きの命令で順番を明示する必要があります。高水準の言語では、アトミック変数を使えばコンパイラが適切な命令を出してくれます。

  • A. 正しい。ハードウェアの自由度が高い分、順番の指定は明示的に行います。
  • B. RISC-Vにもfence命令があります。
  • C. 同じ番地への順番は、コヒーレンシによって保たれます。
この分野を解く 分野ページへ

マルチコアと同期のほかの問題

  1. メモリバリア(フェンス)命令の役割として正しいものはどれか。
  2. 上のコードで、スレッド1がdataを用意してからflagで知らせ、スレッド2がflagを見てからdataを読む。弱いメモリ一貫性モデルのCPUで、スレッド2が確実に42を読むために必要なこととして正しいものはどれか。
  3. 取得(acquire)と解放(release)の意味を持つメモリ操作について正しいものはどれか。
  4. C言語で、スレッド間で受け渡すフラグ変数にvolatileを付けるだけでは、同期として不十分である理由として正しいものはどれか。
  5. C11の_AtomicやC++11のstd::atomicで、メモリオーダーを指定できるようになっている理由として正しいものはどれか。