マルチコアと同期

逐次一貫性(シーケンシャルコンシステンシ)の説明として正しいものはどれか。

  1. A各コアの操作が、毎回ランダムな順番で実行される
  2. Bすべてのコアの操作が、ある1つの順番に並べられ、各コアの操作はプログラムに書いた順番どおりに現れるように見える
  3. Cすべての操作が、1つのコアだけで実行される
答えと解説を見る

正解:B. すべてのコアの操作が、ある1つの順番に並べられ、各コアの操作はプログラムに書いた順番どおりに現れるように見える

逐次一貫性では、複数のコアの操作がトランプを混ぜるように1列に並べられ、各コアの操作はその中でプログラムの順番を保っているように見えます。プログラマにとって最も分かりやすいモデルですが、ハードウェアがストアバッファなどで順番を入れ替える最適化を大きく制限するので、実際の多くのCPUはもっと緩いモデルを採用しています。

  • A. ランダムではなく、プログラムの順番が守られます。
  • B. 正しい。最も直感的で分かりやすいモデルです。
  • C. 複数のコアで動くことが前提です。
この分野を解く 分野ページへ

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

  1. 上の2つのスレッドを別々のコアで同時に実行する(コンパイラによる並べ替えはないとする)。逐次一貫性では起こらないが、x86などの実際のCPUでは起こりうる結果はどれか。
  2. x86のメモリ一貫性モデル(TSO、トータルストアオーダー)の特徴として正しいものはどれか。
  3. ARMやRISC-V(RVWMO)のような弱いメモリ一貫性モデルについて正しいものはどれか。
  4. メモリバリア(フェンス)命令の役割として正しいものはどれか。
  5. 上のコードで、スレッド1がdataを用意してからflagで知らせ、スレッド2がflagを見てからdataを読む。弱いメモリ一貫性モデルのCPUで、スレッド2が確実に42を読むために必要なこととして正しいものはどれか。