Odpowiedzi:
Wewnątrz procesu będzie połączenie sched_setaffinity()
lub dla pthreads rzeczy,pthread_setaffinity_np()
W powiązanej notatce, jeśli martwisz się powinowactwem procesora do twojego programu, warto zwrócić uwagę na sposób przydzielania pamięci. Większe systemy z pamięcią podłączoną do więcej niż jednego kontrolera (tj. Wielu gniazd procesora, każde z własnym) będą miały zmienne opóźnienie i szerokość pasma między różnymi parami procesora-pamięci. Będziesz także chciał sprawdzić powinowactwo NUMA, używając numactl
polecenia lub wywołań systemowych, z którymi działa. Jeden program, nad którym pracowałem, uzyskał 10% poprawę wydajności.
taskset -c 1-3 ./a.out arg1 arg2
uruchamia a.out
proces z podanymi argumentami i powinowactwem ustawionymi na procesory 1, 2 lub 3 (w oparciu o zero).
Oto minimalny program testowy C, którego można użyć, aby zobaczyć go w akcji: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
taskset -p -c 1,3 45678
raczej niżtaskset -c 1,3 -p 45678
; tzn. że-c 1,3
jest to specyfikacja maski i jako taka musi być umieszczona między-p
apid
.