--physcpubind オプションを指定して numactl を使用していました。マニュアルには次のように書かれています。
--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...
3 つの NUMA ノードを備えた NUMA システムがあり、それぞれに 4 つのコアがあるとします。NUMA ノード 0 には、コア番号として 0、1、2、3 があります。NUMA ノード 1 には 4、5、6、7 があり、NUMA ノード 2 には 8、9、10、11 があります。私の質問は、次のようにプログラムを実行するとしましょう。
export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program
つまり、プログラムを 6 つのスレッドで実行し、CPU コア 0、1、4、5、8、9 で実行するように要求しています。たとえば、プログラム中のある時点でスレッド 0 ~ 5 に CPU コア 0、1、4、5、8、9 (setup1) が割り当てられているとします。プログラム実行中の他の時点で、たとえばスレッド 0 が CPU コア 9 などで実行されている可能性はありますか? つまり、CPU コア間でスレッドの移行は行われますか? それとも、スレッドは (setup1 のように) CPU コアに一意にバインドされますか? ありがとう。