2008-11-11 6 views
30

Gibt es eine progmatische Methode, CPU-Affinität für einen Prozess in C/C++ für das Linux-Betriebssystem festzulegen.CPU-Affinität

Antwort

41

Sie müssen sched_setaffinity(2) verwenden.

Zum Beispiel auf CPUs 0 und 2 nur auszuführen:

#define _GNU_SOURCE 
#include <sched.h> 

cpu_set_t mask; 
CPU_ZERO(&mask); 
CPU_SET(0, &mask); 
CPU_SET(2, &mask); 
result = sched_setaffinity(0, sizeof(mask), &mask); 

(0 für den ersten Parameter bedeutet den aktuellen Prozess, liefern eine PID, wenn es ein anderer Prozess ist Sie steuern möchten).

Siehe auch sched_getcpu(3).

+0

möchten reservieren Dies könnte Kompliment an die Technik: die CPU abfragen der Thread läuft gerade auf benutze dies: ScrollerBlaster

+1

Vergessen Sie nicht, _GNU_SOURCE_ zu definieren, wenn Sie –

+1

kompilieren. ZB fügen Sie dem gcc-Befehl "-D _GNU_SOURCE" – Simon

2

Kurz

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

Blick in CPU Affinity für mehr Details

+0

hinzu. Sie sollten den richtigen Typ und die entsprechenden Makros (z 'cpu_set_t' und' CPU_SET') - es gibt keine Garantie, dass die Bits in einem 'long' an der richtigen Stelle sind. – Alnitak

0

Ich habe viele Mühe gemacht zu realisieren, was passiert ist, so füge ich diese Antwort für Leute wie mich helfen (ich benutze gcc Compiler unter Linux Minze)

#include <sched.h> 
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; 
} 

Aber vergessen Sie nicht, diese Optionen für den Compiler-Befehl hinzuzufügen: -D _GNU_SOURCE Da Betriebssystem könnte einen Prozess auf den jeweiligen Kern zuordnen, können Sie in /etc/default und der Lauf sudo update-grub in Terminal diese GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3" in die grub-Datei hinzufügen, die Kerne Sie