性能評価・プロファイリング
マルチコアやNUMAのシステムで性能を測るとき、スレッドを特定のコアに固定する(アフィニティを設定する)ことがある理由として正しいものはどれか。
- AOSがスレッドをコアの間で移動させると、キャッシュの内容が失われたり遠いメモリを使ったりして、結果がばらつくから
- B固定すると、コアの数が2倍になるから
- C固定しないと、プログラムが実行できないから
答えと解説を見る
正解:A. OSがスレッドをコアの間で移動させると、キャッシュの内容が失われたり遠いメモリを使ったりして、結果がばらつくから
OSは負荷を分散するために、スレッドを別のコアへ移すことがあります。移った先のコアのキャッシュには必要なデータがなく、NUMAのシステムでは、データが置かれたメモリから遠いソケットに移ってしまうこともあります。そのため、同じプログラムでも、どのコアで動いたかによって時間が変わります。スレッドをコアに固定し、メモリの置き場所もそろえると、測定の再現性が高まります。
- A. 正しい。測定の条件をそろえるための工夫です。
- B. コアの数は変わりません。
- C. 固定しなくても実行はできます。