Réponses:
À l'intérieur du processus, l'appel serait sched_setaffinity()
, ou pour les trucs pthreads,pthread_setaffinity_np()
Sur une note connexe, si vous vous inquiétez de l'affinité CPU de votre programme, il peut être utile de faire attention à la façon dont il fait l'allocation de mémoire. Les systèmes plus grands avec une mémoire connectée à plusieurs contrôleurs (c'est-à-dire plusieurs sockets CPU, chacun avec leur propre) auront une latence et une bande passante variables entre différentes paires CPU-mémoire. Vous voudrez également examiner l'affinité NUMA, en utilisant la numactl
commande ou les appels système avec lesquels elle fonctionne. Un programme sur lequel j'ai travaillé a obtenu une amélioration de 10% de ses performances.
taskset -c 1-3 ./a.out arg1 arg2
lance le a.out
processus avec des arguments donnés et une affinité définie pour les processeurs 1, 2 ou 3 (basés sur zéro).
Voici un programme de test C minimal qui peut être utilisé pour le voir en action: 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
plutôt quetaskset -c 1,3 -p 45678
; c'est-à-dire que le-c 1,3
est une spécification de masque et, en tant que tel, doit être placé entre le-p
et lepid
.