回答:
プロセス内では、呼び出しはになりますsched_setaffinity()
。pthreadの場合は、pthread_setaffinity_np()
関連する注意点として、プログラムのCPUアフィニティを心配している場合は、メモリ割り当ても同様に行うことに注意する価値があるかもしれません。メモリが複数のコントローラーに接続されている大規模システム(つまり、それぞれ独自の複数のCPUソケット)では、異なるCPUとメモリーのペア間でレイテンシーと帯域幅が変化します。numactl
コマンドまたはそれが機能するシステムコールを使用して、NUMAアフィニティも調べる必要があります。私が取り組んだプログラムの1つでは、これによりパフォーマンスが10%向上しました。
taskset -c 1-3 ./a.out arg1 arg2
a.out
プロセッサ1、2、または3(ゼロベース)に設定された引数とアフィニティでプロセスを起動します。
動作を確認するために使用できる最小限のCテストプログラムを以下に示します。 -c / 50117787#50117787
taskset -p -c 1,3 45678
する必要があることが示唆されましたtaskset -c 1,3 -p 45678
。すなわち、-c 1,3
はマスク仕様であり、そのため、-p
との間に配置する必要がありますpid
。