Affinità CPU

Esiste un metodo progammatico per impostare l’affinità della CPU per un processo in c / c ++ per il sistema operativo Linux.

Devi usare sched_setaffinity(2) .

Ad esempio, per eseguire solo sulle CPU 0 e 2:

 #define _GNU_SOURCE #include  cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); CPU_SET(2, &mask); result = sched_setaffinity(0, sizeof(mask), &mask); 

( 0 per il primo parametro indica il processo corrente, fornire un PID se si tratta di un altro processo che si desidera controllare).

Vedi anche sched_getcpu(3) .

Utilizzare sched_setaffinity a livello di processo o pthread_attr_setaffinity_np per singoli thread.

In breve

 unsigned long mask = 7; /* processors 0, 1, and 2 */ unsigned int len = sizeof(mask); if (sched_setaffinity(0, len, &mask) < 0) { perror("sched_setaffinity"); } 

Cerca in Affinità CPU per maggiori dettagli

Ho fatto molti sforzi per capire cosa sta succedendo, quindi aggiungo questa risposta per aiutare le persone come me (io uso il compilatore gcc in linux mint)

 #include  cpu_set_t mask; inline void assignToThisCore(int core_id) { CPU_ZERO(&mask); CPU_SET(core_id, &mask); sched_setaffinity(0, sizeof(mask), &mask); } int main(){ //cal this: assignToThisCore(2);//assign to core 0,1,2,... return 0; } 

Ma non dimenticare di aggiungere queste opzioni al comando del compilatore: -D _GNU_SOURCE Poiché il sistema operativo potrebbe assegnare un processo al particolare core, puoi aggiungere questo GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3" al file grub che si trova in /etc/default e l’esecuzione sudo update-grub nel terminale per riservare i core che si desidera