Respostas:
Dentro do processo, a chamada seria sched_setaffinity()
, ou para coisas de pthreads,pthread_setaffinity_np()
Em uma nota relacionada, se você estiver preocupado com a afinidade da CPU do seu programa, pode valer a pena prestar atenção em como ele está fazendo a alocação de memória também. Sistemas maiores com memória conectada a mais de um controlador (ou seja, vários soquetes de CPU, cada um com o seu) terão latência e largura de banda variáveis entre diferentes pares de CPU / memória. Você também deve procurar a afinidade do NUMA, usando o numactl
comando ou as chamadas de sistema com as quais trabalha. Um programa em que trabalhei obteve uma melhoria de desempenho de 10% com isso.
taskset -c 1-3 ./a.out arg1 arg2
inicia o a.out
processo com argumentos fornecidos e afinidade definidos para os processadores 1, 2 ou 3 (com base em zero).
Aqui está um programa de teste C mínimo que pode ser usado para vê-lo em ação: 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
e nãotaskset -c 1,3 -p 45678
; isto é, que-c 1,3
é uma especificação de máscara e, como tal, deve ser colocada entre o-p
e opid
.